PD9waHAgIAkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCXJlcXVpcmVfb25jZSgkX1NFUlZFUlsnRE9DVU1FTlRfUk9PVCddIC4gIi9lY2xpcHNlLm9yZy1jb21tb24vc3lzdGVtL2FwcC5jbGFzcy5waHAiKTsJcmVxdWlyZV9vbmNlKCRfU0VSVkVSWydET0NVTUVOVF9ST09UJ10gLiAiL2VjbGlwc2Uub3JnLWNvbW1vbi9zeXN0ZW0vbmF2LmNsYXNzLnBocCIpOyAJcmVxdWlyZV9vbmNlKCRfU0VSVkVSWydET0NVTUVOVF9ST09UJ10gLiAiL2VjbGlwc2Uub3JnLWNvbW1vbi9zeXN0ZW0vbWVudS5jbGFzcy5waHAiKTsgCSRBcHAgCT0gbmV3IEFwcCgpOwkkTmF2CT0gbmV3IE5hdigpOwkkTWVudSAJPSBuZXcgTWVudSgpOwkJaW5jbHVkZSgkQXBwLT5nZXRQcm9qZWN0Q29tbW9uKCkpOyAgICAjIEFsbCBvbiB0aGUgc2FtZSBsaW5lIHRvIHVuY2x1dHRlciB0aGUgdXNlcidzIGRlc2t0b3AnCgoJIyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCgkjCgkjIHNhbXBsZV8zY29sLnBocAoJIwoJIyBBdXRob3I6IAkJRGVuaXMgUm95CgkjIERhdGU6CQkJMjAwNS0xMS0wNwoJIwoJIyBEZXNjcmlwdGlvbjogVHlwZSB5b3VyIHBhZ2UgY29tbWVudHMgaGVyZSAtIHRoZXNlIGFyZSBub3Qgc2VudCB0byB0aGUgYnJvd3NlcgoJIwoJIwoJIyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKCQoJIwoJIyBCZWdpbjogcGFnZS1zcGVjaWZpYyBzZXR0aW5ncy4gIENoYW5nZSB0aGVzZS4gCgkkcGFnZVRpdGxlIAkJPSAiT3BlbiBTb3VyY2UgUGx1Zy1pbnMiOwoJJHBhZ2VLZXl3b3Jkcwk9ICJwbHVnLWlucywgY2F0YWxvZ3VlIjsKCSRwYWdlQXV0aG9yCQk9ICJNaWtlIE1pbGlua292aWNoLCBOb3YuIDI2LCAyMDA1IjsKCQoJIyBBZGQgcGFnZS1zcGVjaWZpYyBOYXYgYmFycyBoZXJlCgkjIEZvcm1hdCBpcyBMaW5rIHRleHQsIGxpbmsgVVJMIChjYW4gYmUgaHR0cDovL3d3dy5zb21lb3RoZXJzaXRlLmNvbS8pLCB0YXJnZXQgKF9zZWxmLCBfYmxhbmspLCBsZXZlbCAoMSwgMiBvciAzKQoJIyAkTmF2LT5hZGROYXZTZXBhcmF0b3IoIk15IFBhZ2UgTGlua3MiLCAJImRvd25sb2Fkcy5waHAiKTsKCSMgJE5hdi0+YWRkQ3VzdG9tTmF2KCJNeSBMaW5rIiwgIm15cGFnZS5waHAiLCAiX3NlbGYiLCAxKTsKCSMgJE5hdi0+YWRkQ3VzdG9tTmF2KCJHb29nbGUiLCAiaHR0cDovL3d3dy5nb29nbGUuY29tLyIsICJfYmxhbmsiLCAxKTsKCgkjIEVuZDogcGFnZS1zcGVjaWZpYyBzZXR0aW5ncwoJIwoJCQoJIyBQYXN0ZSB5b3VyIEhUTUwgY29udGVudCBiZXR3ZWVuIHRoZSBFT0hUTUwgbWFya2VycyEJCglvYl9zdGFydCgpOyA/PgoKCTxkaXYgaWQ9Im1pZGNvbHVtbiI+CgkJPGgxPjxhIG5hbWU9InRvcCI+PC9hPjw/PSRwYWdlVGl0bGU/PjwvaDE+CgkJPHA+VGhpcyBwYWdlIGNvbnRhaW5zIGxpbmtzIHRvIGVjbGlwc2UtYmFzZWQgb3BlbiBzb3VyY2UgY29tbXVuaXR5IHByb2plY3RzIGFuZCAKICAJCQlwbHVnLWlucy4gVGhlIGxpc3RpbmdzIGhlcmUgYXJlIGludGVuZGVkIHRvIGdldCB5b3Ugc3RhcnRlZCBpbiBmaW5kaW5nIG91dCBtb3JlIAoJCQkgIGFib3V0IHBsdWctaW5zIGFuZCBwcm9qZWN0cyBmcm9tIGFyb3VuZCB0aGUgY29tbXVuaXR5LiA8L3A+CiAgCQkKCQk8cD5Eb24mcnNxdW87dCBmb3JnZXQgdG8gYWxzbyBsb29rIGF0IHRoZSBtYW55IDxhIGhyZWY9InBsdWdpbnNpdGVzLnBocCI+Y29tbXVuaXR5IHBsdWctaW4gc2l0ZXM8L2E+CgkJdGhhdCBhcmUgb3V0IHRoZXJlITwvcD4KCQkJICAKCQk8cD5XZSZyc3F1bztkIGxpa2UgdGhlc2UgcGFnZXMgdG8gYmUgdXNlZnVsIHRvIHlvdSAtIHNvIHBsZWFzZSA8YSBocmVmPSJtYWlsdG86bmV3c0BlY2xpcHNlLm9yZyI+ZW1haWw8L2E+IAoJCQkgIHVzIHlvdXIgcG9pbnRlcnMgYW5kIGNvbW1lbnRzISA8L3A+CiAgCQkKICAJCTxoMz48YSBuYW1lPSJsaXN0Ij48L2E+UGx1Zy1pbiBMaXN0aW5nczwvaDM+CiAgCQk8cD5IZXJlIGlzIGEgc2FtcGxpbmcgb2Ygb3BlbiBzb3VyY2UgcHJvamVjdHMgYmFzZWQgb24gZWNsaXBzZS4gKERvbiZyc3F1bzt0IGZvcmdldCB0byAKCQljaGVjayBvdXQgc2l0ZXMgbGlrZSA8YSBocmVmPSJodHRwOi8vd3d3LnNvdXJjZWZvcmdlLm5ldCIgdGFyZ2V0PSJfYmxhbmsiPnNvdXJjZWZvcmdlPC9hPiAKCQl0b28uKSBBbmQsIHJlbWVtYmVyIHRvIDxhIGhyZWY9Im1haWx0bzpuZXdzQGVjbGlwc2Uub3JnIj5lbWFpbDwvYT4gdXMgYSBub3RlIGFib3V0IAoJCXlvdXIgcHJvamVjdCEgPC9wPgoKICAJCTx0YWJsZSBib3JkZXI9MCBjZWxsc3BhY2luZz01IGNlbGxwYWRkaW5nPTIgd2lkdGg9IjEwMCUiID4KCTx0cj4KICAgPHRkIGFsaWduPVJJR0hUIHZhbGlnbj1UT1Agd2lkdGg9IjMlIj48aW1nIHNyYz0iLi4vaW1hZ2VzL0FkYXJyb3cuZ2lmIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCI+PC90ZD4gCiAgICA8dGQgd2lkdGg9IjEwMCUiPiA8Yj5BbmRyZWkgTG9za3V0b3YmcnNxdW87cyBQbHVnLWlucyAtIDwvYj4gPGEgaHJlZj0iaHR0cDovL2FuZHJlaS5nbXhob21lLmRlL2VjbGlwc2UuaHRtbCIgdGFyZ2V0PSJfYmxhbmsiPmh0dHA6Ly9hbmRyZWkuZ214aG9tZS5kZS9lY2xpcHNlLmh0bWw8L2E+IAogICAgICAtIFVwZGF0ZSBtYW5hZ2VyOiBodHRwOi8vYW5kcmVpLmdteGhvbWUuZGUvZWNsaXBzZS88YnI+CiAgICAgICAgPGJyPgogICAgICAgIDxiPkFueUVkaXQ8L2I+IC0gPGEgaHJlZj0iaHR0cDovL2FuZHJlaS5nbXhob21lLmRlL2FueWVkaXQvaW5kZXguaHRtbCIgdGFyZ2V0PSJfYmxhbmsiPmh0dHA6Ly9hbmRyZWkuZ214aG9tZS5kZS9hbnllZGl0L2luZGV4Lmh0bWw8L2E+IAogICAgICAgIC0gVGhlIEFueUVkaXQgcGx1Zy1pbiBhZGRzIHNldmVyYWwgbmV3IGFjdGlvbnMgdG8gdGhlIGNvbnRleHQgbWVudSBvZiAKICAgICAgICBUZXh0LWJhc2VkIEVjbGlwc2UgZWRpdG9ycyBpbmNsdWRpbmcgdGhlIGZvbGxvd2luZzogT3BlbiBmaWxlIHVuZGVyIGN1cnNvciwgCiAgICAgICAgT3BlbiB0eXBlIHVuZGVyIGN1cnNvciwgYW5kIHRoZSBmb2xsb3dpbmcgQ29udmVyc2lvbnM6IExlYWRpbmcgdGFicyB0byAKICAgICAgICBzcGFjZXMsIExlYWRpbmcgc3BhY2VzIHRvIHRhYnMsIENoYXJzIHRvIEh0bWwgZW50aXRpZXMsIEh0bWwgZW50aXRpZXMgCiAgICAgICAgdG8gY2hhcnMsIENhcGl0YWxpemUsIGFuZCBJbnZlcnQgY2FzZS4gQW55RWRpdCBhbHNvIGFsbG93cyB5b3UgdG8gYXV0b21hdGljYWxseSAKICAgICAgICByZW1vdmUgdHJhaWxpbmcgd2hpdGVzcGFjZXMgYW5kL29yIHBlcmZvcm0gdGFiczwtPnNwYWNlcyBjb252ZXJzaW9uIG9uIAogICAgICAgIGEgInNhdmUiIGFjdGlvbiBpbiBuZWFybHkgYWxsIHRleHQtYmFzZWQgRWNsaXBzZSBlZGl0b3JzLiBBbnlFZGl0IHdvcmtzIAogICAgICAgIHdpdGggRWNsaXBzZSAyLjEuKiwgMy4wLiogYW5kIDMuMS4qLiA8YnI+CiAgICAgICAgPGJyPgogICAgICAgIDxiPkJyYW5jaFZpZXcgcGx1Zy1pbiBmb3IgRWNsaXBzZTwvYj4gLSA8YSBocmVmPSJodHRwOi8vYW5kcmVpLmdteGhvbWUuZGUvcGVyZm9yY2UvQnJhbmNoVmlld1dyYXBwZXIuaHRtbCIgdGFyZ2V0PSJfYmxhbmsiPmh0dHA6Ly9hbmRyZWkuZ214aG9tZS5kZS9wZXJmb3JjZS9CcmFuY2hWaWV3V3JhcHBlci5odG1sPC9hPiAKICAgICAgICAtIEJyYW5jaFZpZXcgcGx1Zy1pbiBmb3IgZWNsaXBzZSBpcyBhIHdyYXBwZXIgZm9yIHJ1bm5pbmcgPGEgaHJlZj0iaHR0cDovL2FuZHJlaS5nbXhob21lLmRlL3BlcmZvcmNlL2luZGV4Lmh0bWwiIHRhcmdldD0iX2JsYW5rIj5CcmFuY2hWaWV3PC9hPiAKICAgICAgICBmcm9tIHdpdGhpbiBlY2xpcHNlLiBCcmFuY2hWaWV3IHByb3ZpZGVzIGEgZ3JhcGhpY2FsIHZpZXcgb2YgUDQgKFBlcmZvcmNlKSAKICAgICAgICBkZXBvdHMsIGluY2x1ZGluZyBmaWxlIHJldmlzaW9ucywgYnJhbmNoZXMgYW5kIG1lcmdlcyBvZiBzZWxlY3RlZCBkZXBvdCAKICAgICAgICBmaWxlcyAoZGlyKS4gQnJhbmNoVmlldyBpcyBub3cgdXBkYXRlZCB0byBlY2xpcHNlIDIuKiBhbmQgMy4wISA8YnI+CiAgICAgICAgPGJyPgogICAgICAgIDxiPkJ5dGVjb2RlIE91dGxpbmU8L2I+IC0gPGEgaHJlZj0iaHR0cDovL2FuZHJlaS5nbXhob21lLmRlL2J5dGVjb2RlL2luZGV4Lmh0bWwiIHRhcmdldD0iX2JsYW5rIj5odHRwOi8vYW5kcmVpLmdteGhvbWUuZGUvYnl0ZWNvZGUvaW5kZXguaHRtbDwvYT4gCiAgICAgICAgLSBCeXRlY29kZSBPdXRsaW5lIHBsdWctaW4gc2hvd3MgZGlzYXNzZW1ibGVkIGJ5dGVjb2RlIG9mIGN1cnJlbnQgamF2YSAKICAgICAgICBlZGl0b3Igb3IgY2xhc3MgZmlsZS4gSGF2ZSB5b3UgYWxyZWFkeSBhc2tlZCB5b3Vyc2VsdmVzIHdoYXQgdGhlIGNvbXBpbGVyIAogICAgICAgIGRvZXMgd2l0aCB5b3VyIEphdmEgY29kZT8gSGVyZSBpcyB0aGUgYW5zd2VyIDotKSBCeXRlY29kZSBvdXRsaW5lIHN1cHBvcnRzIAogICAgICAgIEVjbGlwc2UgMy4wIGFuZCAzLjEuIDxicj4KICAgICAgICA8YnI+CiAgICAgICAgPGI+RXh0ZW5kZWQgVlMgUHJlc2VudGF0aW9uPC9iPiAtIDxhIGhyZWY9Imh0dHA6Ly9hbmRyZWkuZ214aG9tZS5kZS9za2lucy9pbmRleC5odG1sIiB0YXJnZXQ9Il9ibGFuayI+aHR0cDovL2FuZHJlaS5nbXhob21lLmRlL3NraW5zL2luZGV4Lmh0bWw8L2E+IAogICAgICAgIC0gRXh0ZW5kZWQgVlMgUHJlc2VudGF0aW9uIHBsdWdpbiBmb3IgRWNsaXBzZSBpcyBhIG5ldyBza2luIGZvciBFY2xpcHNlIAogICAgICAgIDMuMSBhbmQgbG9va3MgbGlrZSBWaXN1YWwgU3R1ZGlvIGFkb3B0ZWQgZm9yIEVjbGlwc2Ugd29ya2JlbmNoLiA8YnI+CiAgICAgICAgPGJyPgogICAgICAgIDxiPkZpbGVTeW5jPC9iPiAtIDxhIGhyZWY9Imh0dHA6Ly9hbmRyZWkuZ214aG9tZS5kZS9maWxlc3luYy9pbmRleC5odG1sIiB0YXJnZXQ9Il9ibGFuayI+aHR0cDovL2FuZHJlaS5nbXhob21lLmRlL2ZpbGVzeW5jL2luZGV4Lmh0bWw8L2E+IAogICAgICAgIC0gRmlsZVN5bmMgcGx1Z2luIGZvciBFY2xpcHNlIGlzIGEgZmlsZSBzeW5jaHJvbmlzYXRpb24gdG9vbC4gVGhlIG1haW4gCiAgICAgICAgZ29hbCBpcyB0byBrZWVwIGZpbGVzIG91dHNpZGUgb2YgRWNsaXBzZSBwcm9qZWN0cyBpbi1zeW5jIHdpdGggRWNsaXBzZSAKICAgICAgICBwcm9qZWN0IGZpbGVzLiBUaGUgcGx1Z2luIHdvcmtzIGFzIGJ1aWxkZXIgaW4gRWNsaXBzZSBhbmQgd2lsbCBzeW5jaHJvbml6ZSAKICAgICAgICBhbGwgY2hhbmdlcyBvbiBFY2xpcHNlIHByb2plY3QgZmlsZXMgd2l0aCBtYXBwZWQgZXh0ZXJuYWwgZm9sZGVycy4gPGJyPgogICAgICAgIDxicj4KICAgICAgICA8Yj5KRGVwZW5kNEVjbGlwc2U8L2I+IC0gPGEgaHJlZj0iaHR0cDovL2FuZHJlaS5nbXhob21lLmRlL2pkZXBlbmQ0ZWNsaXBzZS9pbmRleC5odG1sIiB0YXJnZXQ9Il9ibGFuayI+aHR0cDovL2FuZHJlaS5nbXhob21lLmRlL2pkZXBlbmQ0ZWNsaXBzZS9pbmRleC5odG1sPC9hPiAKICAgICAgICAtIEpEZXBlbmQ0RWNsaXBzZSBwbHVnLWluIGZvciBFY2xpcHNlIGlzIGEgd3JhcHBlciBmb3IgcnVubmluZyBKRGVwZW5kIAogICAgICAgIGZyb20gd2l0aGluIEVjbGlwc2UuIEFuZCwgd2hhdCBpcyBKRGVwZW5kPyAoZnJvbSB3d3cuY2xhcmt3YXJlLmNvbSk6IEpEZXBlbmQgCiAgICAgICAgdHJhdmVyc2VzIGEgc2V0IG9mIEphdmEgY2xhc3MgYW5kIHNvdXJjZSBmaWxlIGRpcmVjdG9yaWVzIGFuZCBnZW5lcmF0ZXMgCiAgICAgICAgZGVzaWduIHF1YWxpdHkgbWV0cmljcyBmb3IgZWFjaCBKYXZhIHBhY2thZ2UuIEpEZXBlbmQgYWxsb3dzIHlvdSB0byBhdXRvbWF0aWNhbGx5IAogICAgICAgIG1lYXN1cmUgdGhlIHF1YWxpdHkgb2YgYSBkZXNpZ24gaW4gdGVybXMgb2YgaXRzIGV4dGVuc2liaWxpdHksIHJldXNhYmlsaXR5LCAKICAgICAgICBhbmQgbWFpbnRhaW5hYmlsaXR5IHRvIGVmZmVjdGl2ZWx5IG1hbmFnZSBhbmQgY29udHJvbCBwYWNrYWdlIGRlcGVuZGVuY2llcy4gCiAgICAgICAgUGFja2FnZSBkZXBlbmRlbmN5IGN5Y2xlcyBhcmUgcmVwb3J0ZWQgYWxvbmcgd2l0aCB0aGUgaGllcmFyY2hpY2FsIHBhdGhzIAogICAgICAgIG9mIHBhY2thZ2VzIHBhcnRpY2lwYXRpbmcgaW4gcGFja2FnZSBkZXBlbmRlbmN5IGN5Y2xlcy4gPGI+IDwvYj5KRGVwZW5kNEVjbGlwc2UgCiAgICAgICAgaGFzIGJlZW4gdXBkYXRlZCBmb3IgRWNsaXBzZSAyLiogYW5kIDMuMCB2ZXJzaW9ucyEgCiAgICAgIDxwIGFsaWduPSJyaWdodCI+PHNtYWxsPjxhIGhyZWY9IiN0b3AiPmdvIHRvIHRvcDwvYT48L3NtYWxsPjwvcD48L3RkPgogIDwvdHI+Cjx0cj4KICAgPHRkIGFsaWduPVJJR0hUIHZhbGlnbj1UT1Agd2lkdGg9IjMlIj48aW1nIHNyYz0iLi4vaW1hZ2VzL0FkYXJyb3cuZ2lmIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCI+PC90ZD4gCiAgICA8dGQgd2lkdGg9IjEwMCUiPiA8Yj5hbnQ0ZWNsaXBzZTwvYj4gLSA8YSBocmVmPSJodHRwOi8vYW50NGVjbGlwc2Uuc2YubmV0IiB0YXJnZXQ9Il9ibGFuayI+aHR0cDovL2FudDRlY2xpcHNlLnNmLm5ldDwvYT4gCiAgICAgIC0gR2VyZCBXJnV1bWw7dGhlcmljaCBhbmQgTmlscyBIYXJ0bWFubiA8YnI+CiAgICAgIFRoZSBhaW0gb2YgdGhlIGFudDRlY2xpcHNlIHByb2plY3QgaXMgdG8gYXZvaWQgdGhlIHJlZHVuZGFuY3kgb2YgRWNsaXBzZSAKICAgICAgYW5kIEFudCBjb25maWd1cmF0aW9ucy4gSXQgY29uc2lzdHMgb2YgQW50IHRhc2tzIHRoYXQgYXJlIGFibGUgdG8gcmVhZCBhbmQgCiAgICAgIHdvcmsgd2l0aCBzb21lIG9mIEVjbGlwc2UmcnNxdW87cyBjb25maWd1cmF0aW9uIGZpbGVzLiBXaXRoIHRoZXNlIHRhc2tzIHlvdSZyc3F1bztyZSAKICAgICAgYWJsZSB0byBjcmVhdGUgYSBjb21wbGV0ZSBhdXRvbWF0aWMgYnVpbGQgc3lzdGVtIHRoYXQgc3RhcnRzIHdpdGggY2hlY2tpbmcgCiAgICAgIG91dCBhbGwgcmVxdWlyZWQgcHJvamVjdHMgZnJvbSBDVlMgYXMgc3BlY2lmaWVkIGluIGFuIEVjbGlwc2UtVGVhbVByb2plY3RTZXQsIAogICAgICBidWlsZHMgYWxsIHByb2plY3RzIGluIHRoZSBjb3JyZWN0IG9yZGVyIHdpdGggY2xhc3NwYXRoIHNldHRpbmdzIGFzIHNwZWNpZmllZCAKICAgICAgaW4gRWNsaXBzZSwgYW5kIHRvIGxhdW5jaCB5b3VyIGFwcGxpY2F0aW9ucyBhcyB0aGV5IGFyZSBzcGVjaWZpZWQgaW4gRWNsaXBzZS4gCiAgICAgIENoYW5nZXMgaW4gRWNsaXBzZSBhcmUgaW1tZWRpYXRlbHkgdmlzaWJsZSB0byB5b3VyIGJ1aWxkZmlsZXMgLSB3aXRob3V0IAogICAgICBjaGFuZ2luZyBvbmUgbGluZSBvZiBjb2RlITxwIGFsaWduPSJyaWdodCI+PHNtYWxsPjxhIGhyZWY9IiN0b3AiPmdvIHRvIHRvcDwvYT48L3NtYWxsPjwvcD48L3RkPgogIDwvdHI+Cjx0cj4KICAgPHRkIGFsaWduPVJJR0hUIHZhbGlnbj1UT1Agd2lkdGg9IjMlIj48aW1nIHNyYz0iLi4vaW1hZ2VzL0FkYXJyb3cuZ2lmIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCI+PC90ZD4gCiAgICA8dGQgd2lkdGg9IjEwMCUiPiA8Yj5BTlRMUiBVSSBwbHVnLWluPC9iPiAtIDxhIGhyZWY9Imh0dHA6Ly9hbnRscmVjbGlwc2Uuc291cmNlZm9yZ2UubmV0LyIgdGFyZ2V0PSJfYmxhbmsiPmh0dHA6Ly9hbnRscmVjbGlwc2Uuc291cmNlZm9yZ2UubmV0LzwvYT4gCiAgICAgIC0gVG9yc3RlbiBKdWVyZ2VsZWl0IDxicj4KICAgICAgVGhpcyBwcm9qZWN0IGFkZHMgc3VwcG9ydCBmb3IgdGhlIGxleGVyL3BhcnNlciBnZW5lcmF0b3IgQU5UTFIgKDxhIGhyZWY9Imh0dHA6Ly9hbnRsci5vcmcvIiB0YXJnZXQ9Il9ibGFuayI+aHR0cDovL2FudGxyLm9yZy88L2E+KSAKICAgICAgdG8gdGhlIEVjbGlwc2UgcGxhdGZvcm0uIFRoZSByZWxhdGVkIHBsdWctaW5zIHByb3ZpZGUgYSBtdWx0aS1wYWdlIGVkaXRvciAKICAgICAgZm9yIEFOVExSIGdyYW1tYXIgZmlsZXMgKHdpdGggc3ludGF4IGhpZ2hsaWdodGluZywgb3V0bGluZSB2aWV3LCBjb250ZW50IAogICAgICBhc3Npc3QsIGdyYW1tYXIgb3ZlcnZpZXcsIC4uLiksIGEgcHJvamVjdCBuYXR1cmUgd2l0aCBpbmNyZW1lbnRhbCBidWlsZGVyIAogICAgICBmb3IgQU5UTFIgZ3JhbW1hcnMgYW5kIHRoZSBBTlRMUiBmcmFtZXdvcmsgaXRzZWxmLjxwIGFsaWduPSJyaWdodCI+PHNtYWxsPjxhIGhyZWY9IiN0b3AiPmdvIHRvIHRvcDwvYT48L3NtYWxsPjwvcD48L3RkPgogIDwvdHI+Cjx0cj4KICAgPHRkIGFsaWduPVJJR0hUIHZhbGlnbj1UT1Agd2lkdGg9IjMlIj48aW1nIHNyYz0iLi4vaW1hZ2VzL0FkYXJyb3cuZ2lmIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCI+PC90ZD4gCiAgICA8dGQgd2lkdGg9IjEwMCUiPiA8Yj5UaGUgQmlnIFNwbGFzaDwvYj4gLSA8YSBocmVmPSJodHRwOi8vYmlnc3BsYXNoLnNvdXJjZWZvcmdlLm5ldC8iIHRhcmdldD0iX2JsYW5rIj5odHRwOi8vYmlnc3BsYXNoLnNvdXJjZWZvcmdlLm5ldC88L2E+IAogICAgICA8YnI+CiAgICAgIFRoZSBCaWcgU3BsYXNoIGhvc3RzIHBsdWctaW5zIGluY2x1ZGluZyB0aGUgZGIgdG9vbHMgKGZvcm1lciAiZWNsZGJ0b29sIiAKICAgICAgcHJvamVjdCkgYW5kIFNXVCBmb3JtIGRlc2lnbmVyLiBJdCBpcyB0aGUgaG9tZXBhZ2Ugb2YgdGhlIGFzc29jaWF0aW9uIG9mIAogICAgICBlY2xpcHNlIHBsdWctaW4gcHJvZ3JhbW1lcnMgb2YgR2hlbnQgKEJlbGdpdW0pLiBUaGUgc2l0ZSBhbHNvIGluY2x1ZGVzIHByZXNlbnRhdGlvbiAKICAgICAgbWF0ZXJpYWxzIG9uIHRoZSB1c2Ugb2YgRWNsaXBzZSBKRFQsIGFuZCBvbiBTV1QgcHJvZ3JhbW1pbmcuIDxwIGFsaWduPSJyaWdodCI+PHNtYWxsPjxhIGhyZWY9IiN0b3AiPmdvIHRvIHRvcDwvYT48L3NtYWxsPjwvcD48L3RkPgogIDwvdHI+CiAgPHRyPgogICA8dGQgYWxpZ249UklHSFQgdmFsaWduPVRPUCB3aWR0aD0iMyUiPjxpbWcgc3JjPSIuLi9pbWFnZXMvQWRhcnJvdy5naWYiIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIj48L3RkPiAKICAgIDx0ZCB3aWR0aD0iMTAwJSI+IDxiPkJsdWVTa3lUaW1lPC9iPiAtIDxhIGhyZWY9Imh0dHA6Ly9ibHVlc2t5dGltZS5zb3VyY2Vmb3JnZS5uZXQiIHRhcmdldD0iX2JsYW5rIj5odHRwOi8vYmx1ZXNreXRpbWUuc291cmNlZm9yZ2UubmV0PC9hPiAKICAgICAgLSBKb3NzIFdyaWdodCA8YnI+CiAgICAgIFRoZSBCbHVlU2t5VGltZSBwbHVnLWluIHByb3ZpZGVzIGEgdmFyaWV0eSBvZiBzdXBwb3J0IGZlYXR1cmVzIGZvciB3ZWIgYXBwIAogICAgICBkZXZlbG9wbWVudC4gVGhlIHBsdWctaW4gaW5jbHVkZXMgdG9vbHMgZm9yIGNyZWF0aW5nIG5ldyBwcm9qZWN0cywgaW1wb3J0L2V4cG9ydCAKICAgICAgdG8gV0FSIGZpbGVzLCBpbnN0YWxsaW5nIGFuZCBzd2l0Y2hpbmcgYmV0d2VlbiBzZXJ2ZXJzLCBzdGFydCwgcmVzdGFydCBhbmQgCiAgICAgIHN0b3Agd2ViIGFwcCBzZXJ2ZXJzIGFuZCBsYXVuY2hpbmcgdG8gd2ViIGJyb3dzZXJzLiBUaGUgcGx1Zy1pbiBwcm92aWRlcyAKICAgICAgc29tZSBkZWJ1ZyBzdXBwb3J0IGFuZCBhIGZyYW1ld29yayBmb3IgZGV2ZWxvcGluZyB3ZWIgYXBwbGljYXRpb24gc2VydmVyIAogICAgICBhZGFwdG9ycy4gU29tZSBhcmUgYWxyZWFkeSBhdmFpbGFibGU6IEludGVybmFsIFRvbWNhdCA0LjAuMywgVG9tY2F0IDQuMS4xMiwgCiAgICAgIEpldHR5IDQuMS4yLCBFeHRlcm5hbCBSZXNpbiAyLjEsIEV4dGVybmFsIFRvbWNhdCA0LjEgYW5kIEV4dGVybmFsIEpldHR5IAogICAgICA0LjEuIFRoZSBwbHVnLWluIGNhbiBiZSBkb3dubG9hZGVkIGZyb20gPGEgaHJlZj0iaHR0cDovL3NvdXJjZWZvcmdlLm5ldC9wcm9qZWN0cy9ibHVlc2t5dGltZSIgdGFyZ2V0PSJfYmxhbmsiPiAKICAgICAgaHR0cDovL3NvdXJjZWZvcmdlLm5ldC9wcm9qZWN0cy9ibHVlc2t5dGltZTwvYT4gYW5kIGNvbnRhaW5zIGZ1bGwgdXNlciBkb2N1bWVudGF0aW9uIAogICAgICBmcm9tIHRoZSBFY2xpcHNlIEhlbHAgc3lzdGVtLiBGdXJ0aGVyIGluZm9ybWF0aW9uIGFuZCBvbmxpbmUgdXNlciBkb2N1bWVudGF0aW9uIAogICAgICBpcyBhdmFpbGFibGUgYXQgPGEgaHJlZj0iaHR0cDovL2JsdWVza3l0aW1lLnNvdXJjZWZvcmdlLm5ldCIgdGFyZ2V0PSJfYmxhbmsiPmh0dHA6Ly9ibHVlc2t5dGltZS5zb3VyY2Vmb3JnZS5uZXQ8L2E+LiAKICAgIDxwIGFsaWduPSJyaWdodCI+PHNtYWxsPjxhIGhyZWY9IiN0b3AiPmdvIHRvIHRvcDwvYT48L3NtYWxsPjwvcD48L3RkPgogIDwvdHI+CiAgPHRyPgogICA8dGQgYWxpZ249UklHSFQgdmFsaWduPVRPUCB3aWR0aD0iMyUiPjxpbWcgc3JjPSIuLi9pbWFnZXMvQWRhcnJvdy5naWYiIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIj48L3RkPiAKICAgIDx0ZCB3aWR0aD0iMTAwJSI+IDxiPkNGRWNsaXBzZTwvYj4gLSA8YSBocmVmPSJodHRwOi8vY2ZlY2xpcHNlLnJvaGFuY2xhbi5jb20vIiB0YXJnZXQ9Il9ibGFuayI+aHR0cDovL2NmZWNsaXBzZS5yb2hhbmNsYW4uY29tLzwvYT4gCiAgICAgIC0gUm9iIFJvaGFuIGFuZCBPbGl2ZXIgVHVwbWFuIDxicj4KICAgICAgQ0ZFY2xpcHNlIGlzIGEgQ29sZCBGdXNpb24gcGx1Zy1pbiBmb3IgRWNsaXBzZS4gVGhpcyBwbHVnLWluIGFkZHMgYSBDb2xkIAogICAgICBGdXNpb24gc2NyaXB0IGVkaXRvciwgc3ludGF4IGhpZ2hsaWdodGluZywgYW5kIGNvZGUgaW5zaWdodCBmb3IgdGhlIGNvbGQgCiAgICAgIGZ1c2lvbiBsYW5ndWFnZS4gSXQgYWxzbyBwcm92aWRlcyBjb2RlIGluc2lnaHQgZm9yIGh0bWwgNC4wMSwgYSBzcGVjaWFsaXplZCAKICAgICAgY2ZzY3JpcHQgZWRpdG9yLCBhbmQgYSBzbmlwcGV0IChodG1sIGZyYWdtZW50KSBpbnNlcnRlci4gKENvbGQgRnVzaW9uIGlzIAogICAgICBhIHNlcnZlciBzaWRlIHNjcmlwdGluZyBsYW5ndWFnZSB0aGF0IHNpdHMgb24gdG9wIG9mIGEgSjJFRSBzZXJ2ZXIuIFRoZXJlIAogICAgICBhcmUgY3VycmVudGx5IHR3byBjb21wYW5pZXMgdGhhdCBtYWtlIGVuZ2luZXMgdGhhdCBjYW4gcHJvY2VzcyBDb2xkIEZ1c2lvbiAKICAgICAgc2NyaXB0cyAtIE1hY3JvbWVkaWEgYW5kIE5ldyBBdGxhbnRhLik8cCBhbGlnbj0icmlnaHQiPjxzbWFsbD48YSBocmVmPSIjdG9wIj5nbyB0byB0b3A8L2E+PC9zbWFsbD48L3A+PC90ZD4KICA8L3RyPgogIDx0cj4KICAgPHRkIGFsaWduPVJJR0hUIHZhbGlnbj1UT1Agd2lkdGg9IjMlIj48aW1nIHNyYz0iLi4vaW1hZ2VzL0FkYXJyb3cuZ2lmIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCI+PC90ZD4gCiAgICA8dGQgd2lkdGg9IjEwMCUiPiA8Yj5DaGVja2NsaXBzZTwvYj4gLSA8YSBocmVmPSJodHRwOi8vd3d3Lm12bXNvZnQuZGUvY29udGVudC9wbHVnaW5zL2NoZWNrY2xpcHNlL2NoZWNrY2xpcHNlLmh0bSIgdGFyZ2V0PSJfYmxhbmsiPmh0dHA6Ly93d3cubXZtc29mdC5kZS9jb250ZW50L3BsdWdpbnMvY2hlY2tjbGlwc2UvY2hlY2tjbGlwc2UuaHRtPC9hPiAKICAgICAgLSBNYXJjbyB2YW4gTWVlZ2VuIDxicj4KICAgICAgQ2hlY2tjbGlwc2UgaW50ZWdyYXRlcyB0aGUgZmFtb3VzIENoZWNrc3R5bGUgU3R5bGUgYW5kIENvZGluZyBHdWlkZWxpbmUgCiAgICAgIENoZWNrZXIgQ2hlY2tzdHlsZSAzLjEgaW50byB0aGUgRWNsaXBzZSBTb2Z0d2FyZSBEZXZlbG9wbWVudCBFbnZpcm9ubWVudCAKICAgICAgKFdlYnNwaGVyZSBTdHVkaW8gQXBwbGljYXRpb24gRGV2ZWxvcGVyIGlzIHRoZSBJQk0tcHJvZHVjdCBiYXNlZCBvbiB0aGUgCiAgICAgIGVjbGlwc2UgcGxhdGZvcm0pLCBzaG93aW5nIHN0eWxlIHZpb2xhdGlvbnMgd2l0aCBtYXJrZXJzLCBwcm9qZWN0LXNwZWNpZmljIAogICAgICBjb25maWd1cmF0aW9uLCB0ZWFtIHN1cHBvcnQgYW5kIGludGVncmF0ZWQgaGVscC4gSXQgdXNlcyB0aGUgb3JpZ2luYWwgQ2hlY2tzdHlsZSAKICAgICAgY29uZmlndXJhdGlvbiBmaWxlcyBhbmQgc2VhbWxlc3NseSBpbnRlZ3JhdGVzIHdpdGggYXV0b21hdGVkIGFudCBidWlsZHMuIAogICAgPHAgYWxpZ249InJpZ2h0Ij48c21hbGw+PGEgaHJlZj0iI3RvcCI+Z28gdG8gdG9wPC9hPjwvc21hbGw+PC9wPjwvdGQ+CiAgPC90cj4KICA8dHI+CiAgIDx0ZCBhbGlnbj1SSUdIVCB2YWxpZ249VE9QIHdpZHRoPSIzJSI+PGltZyBzcmM9Ii4uL2ltYWdlcy9BZGFycm93LmdpZiIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiPjwvdGQ+IAogICAgPHRkIHdpZHRoPSIxMDAlIj4gPGI+Q29uY2Vybk1hcHBlcjwvYj4gLSA8YSBocmVmPSJodHRwOi8vd3d3LmNzLm1jZ2lsbC5jYS9+bWFydGluL2NtLyIgdGFyZ2V0PSJfYmxhbmsiPmh0dHA6Ly93d3cuY3MubWNnaWxsLmNhL35tYXJ0aW4vY20vPC9hPiAKICAgICAgLSBNYXJ0aW4gUm9iaWxsYXJkIGFuZCBGciZlYWN1dGU7ZCZlYWN1dGU7cmljIFdlaWdhbmQtV2FyciA8YnI+CiAgICAgIENvbmNlcm5NYXBwZXIgaXMgYSBwbHVnLWluIHRoYXQgYWxsb3dzIGRldmVsb3BlcnMgdG8gb3JnYW5pemUgZmllbGRzIGFuZCAKICAgICAgbWV0aG9kcyBpbnRvIGFyYml0cmFyeSBtb2R1bGVzIGNhbGxlZCAiY29uY2VybnMiLCBhbmQgdG8ga2VlcCBhIHBlcm1hbmVudCAKICAgICAgcmVjb3JkIG9mIHRoZSBjb2RlIGFzc29jaWF0ZWQgd2l0aCB2YXJpb3VzIGNvbmNlcm5zLiBDb25jZXJuTWFwcGVyIGNhbiBhbHNvIAogICAgICBiZSB1c2VkIHRvIHByb2dyYW1tYXRpY2FsbHkgY3JlYXRlIGNvbmNlcm4gbW9kZWxzIHVzaW5nIGEgdmFyaWV0eSBvZiBhcHByb2FjaGVzLiAKICAgIDxwIGFsaWduPSJyaWdodCI+PHNtYWxsPjxhIGhyZWY9IiN0b3AiPmdvIHRvIHRvcDwvYT48L3NtYWxsPjwvcD48L3RkPgogIDwvdHI+CiAgPHRyPgogICA8dGQgYWxpZ249UklHSFQgdmFsaWduPVRPUCB3aWR0aD0iMyUiPjxpbWcgc3JjPSIuLi9pbWFnZXMvQWRhcnJvdy5naWYiIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIj48L3RkPiAKICAgIDx0ZCB3aWR0aD0iMTAwJSI+IDxiPkNvbnRpbnVvdXMgdGVzdGluZzwvYj4gLSA8YSBocmVmPSJodHRwOi8vd3d3LnBhZy5jc2FpbC5taXQuZWR1L2NvbnRpbnVvdXN0ZXN0aW5nLyIgdGFyZ2V0PSJfYmxhbmsiPmh0dHA6Ly93d3cucGFnLmNzYWlsLm1pdC5lZHUvY29udGludW91c3Rlc3RpbmcvPC9hPiAKICAgICAgLSBEYXZpZCBTYWZmLCBLZXZpbiBDaGV2YWxpZXIsIGFuZCBNaWNoYWVsIEJyaWRnZSwgTUlUIDxicj4KICAgICAgQ29udGludW91cyB0ZXN0aW5nIHVzZXMgZXhjZXNzIGN5Y2xlcyBvbiBhIGRldmVsb3BlciZyc3F1bztzIHdvcmtzdGF0aW9uIHRvIGNvbnRpbnVvdXNseSAKICAgICAgcnVuIHJlZ3Jlc3Npb24gdGVzdHMgaW4gdGhlIGJhY2tncm91bmQsIHByb3ZpZGluZyByYXBpZCBmZWVkYmFjayBhYm91dCB0ZXN0IAogICAgICBmYWlsdXJlcyBhcyBzb3VyY2UgY29kZSBpcyBlZGl0ZWQuIEl0IHJlZHVjZXMgdGhlIHRpbWUgYW5kIGVuZXJneSByZXF1aXJlZCAKICAgICAgdG8ga2VlcCBjb2RlIHdlbGwtdGVzdGVkLCBhbmQgcHJldmVudHMgcmVncmVzc2lvbiBlcnJvcnMgZnJvbSBwZXJzaXN0aW5nIAogICAgICB1bmNhdWdodCBmb3IgbG9uZyBwZXJpb2RzIG9mIHRpbWUuIDxwIGFsaWduPSJyaWdodCI+PHNtYWxsPjxhIGhyZWY9IiN0b3AiPmdvIHRvIHRvcDwvYT48L3NtYWxsPjwvcD48L3RkPgogIDwvdHI+CiAgPHRyPgogICA8dGQgYWxpZ249UklHSFQgdmFsaWduPVRPUCB3aWR0aD0iMyUiPjxpbWcgc3JjPSIuLi9pbWFnZXMvQWRhcnJvdy5naWYiIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIj48L3RkPiAKICAgIDx0ZCB3aWR0aD0iMTAwJSI+IDxiPkNvdWdhYXIgSURFPC9iPiAtIDxhIGhyZWY9Imh0dHA6Ly9jb3VnYWFyLm9yZy9wcm9qZWN0cy9jb3VnYWFyaWRlLyIgdGFyZ2V0PSJfYmxhbmsiPmh0dHA6Ly9jb3VnYWFyLm9yZy9wcm9qZWN0cy9jb3VnYWFyaWRlLzwvYT4gCiAgICAgIC0gTWF0dCBBYnJhbXMgPGJyPgogICAgICBDb3VnYWFyIElERSwgaW1wbGVtZW50ZWQgYXMgYSBwbHVnLWluIGZvciBFY2xpcHNlLCBwcm92aWRlcyBhbiBpbnRlZ3JhdGVkIAogICAgICBkZXZlbG9wbWVudCBlbnZpcm9ubWVudCBmb3IgPGEgaHJlZj0iaHR0cDovL2NvdWdhYXIub3JnIiB0YXJnZXQ9Il9ibGFuayI+Q291Z2FhcjwvYT4gCiAgICAgIChjb3VnYWFyLm9yZykgYXBwbGljYXRpb25zLiBUaGUgcGx1Zy1pbiBlbmFibGVzIGRldmVsb3BlcnMgdG8gZWFzaWx5IGRldmVsb3AsIAogICAgICBydW4gYW5kIGRlYnVnIENvdWdhYXIgYWdlbnQgc29jaWV0aWVzLiA8cCBhbGlnbj0icmlnaHQiPjxzbWFsbD48YSBocmVmPSIjdG9wIj5nbyB0byB0b3A8L2E+PC9zbWFsbD48L3A+PC90ZD4KICA8L3RyPgogIDx0cj4KICAgPHRkIGFsaWduPVJJR0hUIHZhbGlnbj1UT1Agd2lkdGg9IjMlIj48aW1nIHNyYz0iLi4vaW1hZ2VzL0FkYXJyb3cuZ2lmIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCI+PC90ZD4gCiAgICA8dGQgd2lkdGg9IjEwMCUiPiA8Yj5DcmVvbGU8L2I+IC0gPGEgaHJlZj0iaHR0cDovL3d3dy50aGVjaGlzZWxncm91cC5vcmcvY3Jlb2xlIiB0YXJnZXQ9Il9ibGFuayI+aHR0cDovL3d3dy50aGVjaGlzZWxncm91cC5vcmcvY3Jlb2xlPC9hPiAKICAgICAgLSBSb2IgTGludGVybiA8YnI+CiAgICAgIENyZW9sZSBpcyB0aGUgdGVybSB1c2VkIHRvIGRlc2NyaWJlIG91ciBwbHVnLWluIHRvIHRoZSBFY2xpcHNlIHBsYXRmb3JtIAogICAgICB3aGljaCBpbnRlZ3JhdGVzIDxhIGhyZWY9Imh0dHA6Ly93d3cudGhlY2hpc2VsZ3JvdXAub3JnL3NocmltcCIgdGFyZ2V0PSJfYmxhbmsiPlNIcmlNUDwvYT4gCiAgICAgIHdpdGggdGhlIEphdmEgRGV2ZWxvcG1lbnQgVG9vbHMgKEpEVCkgLiBXaXRoIENyZW9sZSB5b3UgY2FuIGV4cGxvcmUgeW91ciAKICAgICAgSmF2YSBjb2RlIHZpc3VhbGx5IGFsbG93aW5nIHlvdSB0byBzZWUgaXRzIHN0cnVjdHVyZSBhbmQgdGhlIGxpbmtzIChjYWxscywgCiAgICAgIGFjY2Vzc2VzLCBldGMpIGJldHdlZW4gaXRzIGRpZmZlcmVudCBwaWVjZXMuIENyZW9sZSBhZGRzIGl0cyBvd24gcGVyc3BlY3RpdmUgCiAgICAgIHRvIHRoZSBlY2xpcHNlIHBsYXRmb3JtLCBhbmQgYSBudW1iZXIgb2YgbmV3IHZpZXdzLiBGb3IgZmVhdHVyZSByZXF1ZXN0cywgCiAgICAgIENWUyBhY2Nlc3MsIGJ1ZyByZXBvcnRzLCBldGMuIHNlZSA8YSBocmVmPSJodHRwOi8vc291cmNlZm9yZ2UubmV0L3Byb2plY3RzL2NoaXNlbGdyb3VwLyIgdGFyZ2V0PSJfYmxhbmsiPmh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcHJvamVjdHMvY2hpc2VsZ3JvdXAvPC9hPiAKICAgICAgLiA8cCBhbGlnbj0icmlnaHQiPjxzbWFsbD48YSBocmVmPSIjdG9wIj5nbyB0byB0b3A8L2E+PC9zbWFsbD48L3A+PC90ZD4KICA8L3RyPgogIDx0cj4KICAgPHRkIGFsaWduPVJJR0hUIHZhbGlnbj1UT1Agd2lkdGg9IjMlIj48aW1nIHNyYz0iLi4vaW1hZ2VzL0FkYXJyb3cuZ2lmIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCI+PC90ZD4gCiAgICA8dGQgd2lkdGg9IjEwMCUiPiA8Yj5jc3BsdWdpbjwvYj4gLSA8YSBocmVmPSJodHRwOi8vY3NhcGkuYmVybGlvcy5kZSIgdGFyZ2V0PSJfYmxhbmsiPmh0dHA6Ly9jc2FwaS5iZXJsaW9zLmRlPC9hPiAKICAgICAgLSBCb3JpcyBCYWxkYXNzYXJpIDxicj4KICAgICAgY3NhcGljb3JlIGlzIGEgSmF2YSBBUEkgZm9yIFRlbGVsb2dpYyZyc3F1bztzIFN5bmVyZ3kvQ2hhbmdlLiBJdCBpcyBjb21wb3NlZCBvZiAKICAgICAgYSBzZXQgb2YgY29yZSBjbGFzc2VzIHdoaWNoIGFsbG93IGJhc2ljIG9wZXJhdGlvbnMgb24gdGhlIHNlcnZlciBieSByZXF1ZXN0aW5nIAogICAgICB0aGUgc2VydmVyIHNpZGUgb2YgdGhlIFBlcmwgQVBJIGZ1cm5pc2hlZCBieSBUZWxlbG9naWMuIFRoZXNlIGNsYXNzZXMgY29tZSAKICAgICAgYnVuZGxlZCBpbiBhbiBFY2xpcHNlIHBsdWdpbiAtIHRoZSBjc3BsdWdpbi4gVGhlIGNzcGx1Z2luIGJldGEgZmVhdHVyZXMgCiAgICAgIGluY2x1ZGUgbG9naW4gYW5kIHJlcG9ydHMuIDxwIGFsaWduPSJyaWdodCI+PHNtYWxsPjxhIGhyZWY9IiN0b3AiPmdvIHRvIHRvcDwvYT48L3NtYWxsPjwvcD48L3RkPgogIDwvdHI+Cjx0cj4KICAgPHRkIGFsaWduPVJJR0hUIHZhbGlnbj1UT1Agd2lkdGg9IjMlIj48aW1nIHNyYz0iLi4vaW1hZ2VzL0FkYXJyb3cuZ2lmIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCI+PC90ZD4gCiAgICA8dGQgd2lkdGg9IjEwMCUiPiA8Yj5FYXN5IFN0cnV0cyBwbHVnLWluPC9iPiAtIDxhIGhyZWY9Imh0dHA6Ly9lYXN5c3RydXRzLnNvdXJjZWZvcmdlLm5ldC8iIHRhcmdldD0iX2JsYW5rIj5odHRwOi8vZWFzeXN0cnV0cy5zb3VyY2Vmb3JnZS5uZXQvPC9hPiAKICAgICAgLSBFbW1hbnVlbCBCb3VkcmFudCA8YnI+CiAgICAgIFRoZSBFYXN5IFN0cnV0cyBwcm9qZWN0IHByb3ZpZGVzIHBsdWctaW5zIGZvciB0aGUgRWNsaXBzZSAyLjAgZGV2ZWxvcG1lbnQgCiAgICAgIGVudmlyb25tZW50IHRvIGVuYWJsZSB5b3UgdG8gZGV2ZWxvcCB3ZWIgYXBwbGljYXRpb25zIGJhc2VkIG9uIHRoZSBNVkMgZGVzaWduIAogICAgICBwYXR0ZXJuIHByb3ZpZGVkIGJ5IHRoZSA8YSBocmVmPSJodHRwOi8vamFrYXJ0YS5hcGFjaGUub3JnL3N0cnV0cyIgdGFyZ2V0PSJfYmxhbmsiPkpha2FydGEgCiAgICAgIFN0cnV0cyBmcmFtZXdvcms8L2E+IHZlcnNpb24gMS4wIGFuZCAxLjEuIEZlYXR1cmVzIGluY2x1ZGU6IFN0cnV0cyB3aXphcmRzIAogICAgICB3aXRoIEphdmEvWE1ML0pTUCBYU0xUIGdlbmVyYXRpb24sIFN0cnV0cyB2aWV3LCBTdHJ1dHMgZWRpdG9yIGFuZCBVc2VyIGhlbHBlcnMgCiAgICAgICh0b29sdGlwcywgdmFsaWRhdGlvbi4uLikuIEVhc3kgU3RydXRzIGlzIGNvbXBhdGlibGUgd2l0aCA8YSBocmVmPSJodHRwOi8veGRvY2xldC5zb3VyY2Vmb3JnZS5uZXQveGRvY2xldC8iIHRhcmdldD0iX2JsYW5rIj5YRG9jbGV0PC9hPiAKICAgICAgKHYwLjYuMiBhbmQgdXApLiBZb3UgY2FuIHVzZSBFYXN5IFN0cnV0cyB3aXRoIGFueSBwbGF0Zm9ybSBiYXNlZCBvbiBFY2xpcHNlIAogICAgICAyLjAgKGVnLiBJQk0gV1MqRCA1KS4gTGljZW5zZWQgdW5kZXIgdGhlIDxhIGhyZWY9Imh0dHA6Ly93d3cuYXBhY2hlLm9yZy9MSUNFTlNFIiB0YXJnZXQ9Il9ibGFuayI+QVNGIAogICAgICBsaWNlbnNlPC9hPi4gVGhlIGZlYXR1cmUgbWFuYWdlciAoeG1sIGZpbGUpIGlzIGxvY2F0ZWQgYXQ6IDxhIGhyZWY9Imh0dHA6Ly9lYXN5c3RydXRzLnNvdXJjZWZvcmdlLm5ldC9lY2xpcHNlL3VwZGF0ZXMvc2l0ZS54bWwiIHRhcmdldD0iX2JsYW5rIj5odHRwOi8vZWFzeXN0cnV0cy5zb3VyY2Vmb3JnZS5uZXQvZWNsaXBzZS91cGRhdGVzL3NpdGUueG1sPC9hPiAKICAgIDxwIGFsaWduPSJyaWdodCI+PHNtYWxsPjxhIGhyZWY9IiN0b3AiPmdvIHRvIHRvcDwvYT48L3NtYWxsPjwvcD48L3RkPgogIDwvdHI+CiAgPHRyPgogICA8dGQgYWxpZ249UklHSFQgdmFsaWduPVRPUCB3aWR0aD0iMyUiPjxpbWcgc3JjPSIuLi9pbWFnZXMvQWRhcnJvdy5naWYiIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIj48L3RkPiAKICAgIDx0ZCB3aWR0aD0iMTAwJSI+IDxiPkVhc3kgRXhwbG9yZXIgcGx1Zy1pbjwvYj4gLSA8YSBocmVmPSJodHRwOi8vZWFzeXN0cnV0cy5zb3VyY2Vmb3JnZS5uZXQvI2Vhc3lleHBsb3JlciIgdGFyZ2V0PSJfYmxhbmsiPmh0dHA6Ly9lYXN5c3RydXRzLnNvdXJjZWZvcmdlLm5ldC8jZWFzeWV4cGxvcmVyPC9hPiAKICAgICAgLSBFbW1hbnVlbCBCb3VkcmFudCA8YnI+CiAgICAgIEEgc21hbGwgcGx1Zy1pbiB0aGF0IGFkZHMgJ1dpbmRvd3MgRXhwbG9yZXInIGJyb3dzaW5nIGZlYXR1cmVzIHRvIHRoZSBSZXNvdXJjZS9QYWNrYWdlIAogICAgICBleHBsb3JlciBwb3B1cCBtZW51LiBUaGUgZmVhdHVyZSBtYW5hZ2VyICh4bWwgZmlsZSkgaXMgbG9jYXRlZCBhdDogPGEgaHJlZj0iaHR0cDovL2Vhc3lzdHJ1dHMuc291cmNlZm9yZ2UubmV0L2VjbGlwc2UvdXBkYXRlcy9zaXRlLnhtbCIgdGFyZ2V0PSJfYmxhbmsiPmh0dHA6Ly9lYXN5c3RydXRzLnNvdXJjZWZvcmdlLm5ldC9lY2xpcHNlL3VwZGF0ZXMvc2l0ZS54bWw8L2E+PHAgYWxpZ249InJpZ2h0Ij48c21hbGw+PGEgaHJlZj0iI3RvcCI+Z28gdG8gdG9wPC9hPjwvc21hbGw+PC9wPjwvdGQ+CiAgPC90cj4KICA8dHI+CiAgIDx0ZCBhbGlnbj1SSUdIVCB2YWxpZ249VE9QIHdpZHRoPSIzJSI+PGltZyBzcmM9Ii4uL2ltYWdlcy9BZGFycm93LmdpZiIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiPjwvdGQ+IAogICAgPHRkIHdpZHRoPSIxMDAlIj4gPGI+RWNsb3g8L2I+IC0gPGEgaHJlZj0iaHR0cDovL2hvbWUuZ25hLm9yZy9lY2xveCIgdGFyZ2V0PSJfYmxhbmsiPmh0dHA6Ly9ob21lLmduYS5vcmcvZWNsb3g8L2E+IAogICAgICAtIEd1aWxsYXVtZSBCcm9ja2VyIDxicj4KICAgICAgRWNsb3ggaXMgYW4gRWNsaXBzZSBwbHVnLWluIHByb3ZpZGluZyBhIGZyb250ZW5kIGZvciA8YSBocmVmPSJodHRwOi8vd3d3LmRveHlnZW4ub3JnIiB0YXJnZXQ9Il9ibGFuayI+RG94eWdlbjwvYT4uIAogICAgICBUaGUgcGx1Zy1pbiBwcm92aWRlcyBhIGdyYXBoaWNhbCBlZGl0b3IgZm9yIERveHlnZW4mcnNxdW87cyBmaWxlcyBhbGxvd3MgZWFzaWVyIAogICAgICBjb25maWd1cmF0aW9uIG9mIGRvY3VtZW50YXRpb24gYnVpbGRzLiBBbGwgc2V0dGluZ3MgYXJlIGFjY2Vzc2libGUgaW4gYSAKICAgICAgY2xlYXIgYW5kIHN0cnVjdHVyZWQgbGF5b3V0LiBUaGUgZWRpdG9yIHNpbXBseSBwYXJzZXMgYW5kIHJlLWdlbmVyYXRlcyBEb3h5Z2VuJnJzcXVvO3MgCiAgICAgIGZpbGVzIHNvIGV2ZW4gZXhpc3Rpbmcgb25lcyBhcmUgc3VwcG9ydGVkLiBUaGUgZG9jdW1lbnRhdGlvbiBidWlsZCBjYW4gYmUgCiAgICAgIGxhdW5jaGVkIGZyb20gSURFIHdpdGhvdXQgcGFzc2luZyB0aHJvdWdoIGEgY29uc29sZS4gQnVpbGQgb3V0cHV0cyBhcmUgbG9nZ2VkIAogICAgICBpbnRvIGEgZGVkaWNhdGVkIHZpZXcuIFlvdSBjYW4gZXZlbiBoYWx0IGEgYnVpbGQgcHJvY2VzcyBpbiBvbmUgY2xpY2suIDxwIGFsaWduPSJyaWdodCI+PHNtYWxsPjxhIGhyZWY9IiN0b3AiPmdvIHRvIHRvcDwvYT48L3NtYWxsPjwvcD48L3RkPgogIDwvdHI+CiAgPHRyPgogICA8dGQgYWxpZ249UklHSFQgdmFsaWduPVRPUCB3aWR0aD0iMyUiPjxpbWcgc3JjPSIuLi9pbWFnZXMvQWRhcnJvdy5naWYiIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIj48L3RkPiAKICAgIDx0ZCB3aWR0aD0iMTAwJSI+IDxiPmVjbGlwc2UtY2Nhc2U8L2I+IC0gPGEgaHJlZj0iaHR0cDovL3NvdXJjZWZvcmdlLm5ldC9wcm9qZWN0cy9lY2xpcHNlLWNjYXNlIiB0YXJnZXQ9Il9ibGFuayI+aHR0cDovL3NvdXJjZWZvcmdlLm5ldC9wcm9qZWN0cy9lY2xpcHNlLWNjYXNlPC9hPiAKICAgICAgLSBNYXR0aGV3IENvbndheTxicj4KICAgICAgVGhpcyBpcyBhIENsZWFyQ2FzZSBwbHVnLWluIGZvciBlY2xpcHNlIDIuMC4gSXQgcHJvdmlkZXMgc29tZSBiYXNpYyBDbGVhckNhc2UgZnVuY3Rpb25hbGl0eSBmb3IgdGhlCmVjbGlwc2UgcGxhdGZvcm0sIGluY2x1ZGluZyB0aGUgYWJpbGl0eSB0byB1c2UgdGhlIGVjbGlwc2UgcmVmYWN0b3JpbmcgdG9vbHMgb24gY29kZSBpbiBhIENsZWFyQ2FzZQpkeW5hbWljIG9yIHNuYXBzaG90IHZpZXcuICBPbiBXaW4zMiBpdCB1c2VzIGEgSk5JIGxheWVyIHRvIGNvbW11bmljYXRlIHdpdGggQ2xlYXJDYXNlIGZvciBtYXhpbXVtIHNwZWVkLApidXQgeW91IGNhbiBhbHNvIGNob29zZSB0byB1c2UgdGhlIGNsZWFydG9vbCBleGVjdXRhYmxlIGZvciBvdGhlciBwbGF0Zm9ybXMuIDxwIGFsaWduPSJyaWdodCI+PHNtYWxsPjxhIGhyZWY9IiN0b3AiPmdvIHRvIHRvcDwvYT48L3NtYWxsPjwvcD48L3RkPgogIDwvdHI+CiA8dHI+IAogICAgPHRkIGFsaWduPVJJR0hUIHZhbGlnbj1UT1Agd2lkdGg9IjMlIj48aW1nIHNyYz0iLi4vaW1hZ2VzL0FkYXJyb3cuZ2lmIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCI+PC90ZD4KICAgIDx0ZCB3aWR0aD0iOTclIj48Yj5FY2xpcHNlIENoZWNrc3R5bGUgcGx1Zy1pbjwvYj4gLSA8YSBocmVmPSJodHRwOi8vc291cmNlZm9yZ2UubmV0L3Byb2plY3RzL2VjbGlwc2UtY3MvIiB0YXJnZXQ9Il9ibGFuayI+aHR0cDovL3NvdXJjZWZvcmdlLm5ldC9wcm9qZWN0cy9lY2xpcHNlLWNzLyAKICAgICAgPC9hPiAtIERhdmlkIFNjaG5laWRlciA8YnI+CiAgICAgIFRoZSBDaGVja3N0eWxlIHBsdWctaW4gZm9yIEVjbGlwc2UgYWRkcyBhIHJlYWwtdGltZSBzdGF0aWMgY29kZSBhbmFseXplciAKICAgICAgdG8gdGhlIEVjbGlwc2UgZW52aXJvbm1lbnQuIDxwIGFsaWduPSJyaWdodCI+PHNtYWxsPjxhIGhyZWY9IiN0b3AiPmdvIHRvIHRvcDwvYT48L3NtYWxsPjwvcD48L3RkPgogIDwvdHI+CiA8dHI+IAogICAgPHRkIGFsaWduPVJJR0hUIHZhbGlnbj1UT1Agd2lkdGg9IjMlIj48aW1nIHNyYz0iLi4vaW1hZ2VzL0FkYXJyb3cuZ2lmIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCI+PC90ZD4KICAgIDx0ZCB3aWR0aD0iOTclIj48Yj5FY2xpcHNlIEZpbmRCdWdzIFBsdWctaW48L2I+IC0gPGEgaHJlZj0iaHR0cDovL3d3dy50b2JqZWN0LmRlL2luZGV4LnBocD9pZD05IiB0YXJnZXQ9Il9ibGFuayI+aHR0cDovL3d3dy50b2JqZWN0LmRlL2luZGV4LnBocD9pZD05PC9hPiAKICAgICAgLSBQZXRlciBGcmllc2UgPGJyPgogICAgICBGaW5kQnVncyA8YSBocmVmPSJodHRwOi8vZmluZGJ1Z3Muc291cmNlZm9yZ2UubmV0IiB0YXJnZXQ9Il9ibGFuayI+aHR0cDovL2ZpbmRidWdzLnNvdXJjZWZvcmdlLm5ldDwvYT4gCiAgICAgIGlzIGEgcHJvZ3JhbSB0byBmaW5kIGJ1Z3MgaW4gSmF2YSBwcm9ncmFtcy4gSXQgbG9va3MgZm9yIGluc3RhbmNlcyBvZiAmcXVvdDtidWcgCiAgICAgIHBhdHRlcm5zJnF1b3Q7IC0gY29kZSBpbnN0YW5jZXMgdGhhdCBhcmUgbGlrZWx5IHRvIGJlIGVycm9ycy4gVGhlIEZpbmRCdWdzIAogICAgICBQbHVnLWluIGlzIGEgcGx1Zy1pbiBmb3IgRWNsaXBzZSAzLjAuIEl0IHNlYW1sZXNzbHkgaW50ZWdyYXRlcyBGaW5kQnVncyAKICAgICAgaW50byB0aGUgRWNsaXBzZSBwbGF0Zm9ybS4gQSBidWcgY2hlY2sgaXMgcGVyZm9ybWVkIHdoZW4gdGhlIHVzZXIgc2F2ZSBvciAKICAgICAgY29tcGlsZSB0aGVpciBjb2RlLiBBbnkgYnVncyBmb3VuZCB3aWxsIGJlIGRpc3BsYXllZCBpbiB0aGUgRWNsaXBzZSB0YXNrIAogICAgICBsaXN0IGF0IHRoZSBib3R0b20gb2YgdGhlIHNjcmVlbi48cCBhbGlnbj0icmlnaHQiPjxzbWFsbD48YSBocmVmPSIjdG9wIj5nbyB0byB0b3A8L2E+PC9zbWFsbD48L3A+PC90ZD4KICA8L3RyPiAKIDx0cj4gCiAgICA8dGQgYWxpZ249UklHSFQgdmFsaWduPVRPUCB3aWR0aD0iMyUiPjxpbWcgc3JjPSIuLi9pbWFnZXMvQWRhcnJvdy5naWYiIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIj48L3RkPgogICAgPHRkIHdpZHRoPSI5NyUiPjxiPkVjbGlwc2UtZ2FtZXM8L2I+IC0gPGEgaHJlZj0iaHR0cDovL2VjbGlwc2UtZ2FtZXMuc291cmNlZm9yZ2UubmV0IiB0YXJnZXQ9Il9ibGFuayI+aHR0cDovL2VjbGlwc2UtZ2FtZXMuc291cmNlZm9yZ2UubmV0IAogICAgICA8L2E+IC0gSm9zJmVhY3V0ZTsgTSBPcmRheCBDYXNzJmFhY3V0ZTs8YnI+CiAgICAgIFRoZSBnb2FsIG9mIHRoaXMgcHJvamVjdCBpcyB0byBwcm92aWRlIHNldmVyYWwgZ2FtZXMgYXMgcGx1Zy1pbnMgZm9yIHRoZSBFY2xpcHNlIElERS4gCiAgICAgIFRoaXMgcHJvamVjdCBzdGFydGVkIGFzIGEgcHJvb2Ygb2YgY29uY2VwdCBhYm91dCBFY2xpcHNlIGV4dGVuc2liaWxpdHkgdW5kZXIgCiAgICAgIHRoZSBUaW5tYW4gcHJvamVjdC4gRWNsaXBzZS1nYW1lcyBpcyBkZWRpY2F0ZWQgZXhjbHVzaXZlbHkgdG8gZ2FtZXMhIDxwIGFsaWduPSJyaWdodCI+PHNtYWxsPjxhIGhyZWY9IiN0b3AiPmdvIHRvIHRvcDwvYT48L3NtYWxsPjwvcD48L3RkPgogIDwvdHI+IAogICAgPHRyPgogICA8dGQgYWxpZ249UklHSFQgdmFsaWduPVRPUCB3aWR0aD0iMyUiPjxpbWcgc3JjPSIuLi9pbWFnZXMvQWRhcnJvdy5naWYiIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIj48L3RkPiAKICAgIDx0ZCB3aWR0aD0iMTAwJSI+PGI+RWNsaXBzZSBIZXggRWRpdG9yIFBsdWctaW4gKEVIRVApPC9iPiAtIDxhIGhyZWY9Imh0dHA6Ly9laGVwLnNvdXJjZWZvcmdlLm5ldCIgdGFyZ2V0PSJfYmxhbmsiPmh0dHA6Ly9laGVwLnNvdXJjZWZvcmdlLm5ldDwvYT4gCiAgICAgIC0gTWFyY2VsIFBhbGtvIGFsaWFzIFJhbmRhbGxjbyA8YnI+CiAgICAgIFRoZSBFY2xpcHNlIEhleCBFZGl0b3IgUGx1Zy1pbiAoRUhFUClpcyBhbiBFY2xpcHNlIHBsdWctaW4gd2hpY2ggYWxsb3dzIHVzZXIgCiAgICAgIHRvIHZpZXcgb3IgbW9kaWZ5IGFueSBmaWxlIGluIGhleCBtb2RlLiBUaGUgcGx1Zy1pbiBwcm92aWRlIGhleCB2aWV3IGFuZCAKICAgICAgY2hhcmFjdGVyICh0ZXh0dWFsKSB2aWV3IHdpdGggbWFueSBlbmNvZGluZ3MgKEFTQ0lJLCBFQkNESUMsIENQMTI1MCwgS09JOF9SLCAKICAgICAgSVNPODg1OS4uLikuIFRoZSBwbHVnLWluIHVwZGF0ZSBzaXRlIGFkZHJlc3MgaXMgPGEgaHJlZj0iaHR0cDovL2VoZXAuc291cmNlZm9yZ2UubmV0L3VwZGF0ZSIgdGFyZ2V0PSJfYmxhbmsiPmh0dHA6Ly9laGVwLnNvdXJjZWZvcmdlLm5ldC91cGRhdGU8L2E+LiAKICAgIDxwIGFsaWduPSJyaWdodCI+PHNtYWxsPjxhIGhyZWY9IiN0b3AiPmdvIHRvIHRvcDwvYT48L3NtYWxsPjwvcD48L3RkPgogIDwvdHI+CiA8dHI+IAogICAgPHRkIGFsaWduPVJJR0hUIHZhbGlnbj1UT1Agd2lkdGg9IjMlIj48aW1nIHNyYz0iLi4vaW1hZ2VzL0FkYXJyb3cuZ2lmIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCI+PC90ZD4KICAgIDx0ZCB3aWR0aD0iOTclIj48Yj5FY2xpcHNlTUU8L2I+IC0gPGEgaHJlZj0iaHR0cDovL2VjbGlwc2VtZS5vcmciIHRhcmdldD0iX2JsYW5rIj5odHRwOi8vZWNsaXBzZW1lLm9yZzwvYT4gCiAgICAgIC0gQ3JhaWcgU2V0ZXJhIGFuZCBLZXZpbiBIdW50ZXIgPGJyPgogICAgICBFY2xpcHNlTUUgaXMgYW4gRWNsaXBzZSBwbHVnaW4gdG8gaGVscCBkZXZlbG9wIEoyTUUgTUlEbGV0cy4gRWNsaXBzZU1FIGRvZXMgCiAgICAgIHRoZSAiZ3J1bnQgd29yayIgb2YgY29ubmVjdGluZyBXaXJlbGVzcyBUb29sa2l0cyB0byB0aGUgRWNsaXBzZSBkZXZlbG9wbWVudCAKICAgICAgZW52aXJvbm1lbnQsIGFsbG93aW5nIHlvdSB0byBmb2N1cyBvbiBkZXZlbG9waW5nIHlvdXIgYXBwbGljYXRpb24sIHJhdGhlciAKICAgICAgdGhhbiB3b3JyeWluZyBhYm91dCB0aGUgc3BlY2lhbCBuZWVkcyBvZiBKMk1FIGRldmVsb3BtZW50LiA8cCBhbGlnbj0icmlnaHQiPjxzbWFsbD48YSBocmVmPSIjdG9wIj5nbyB0byB0b3A8L2E+PC9zbWFsbD48L3A+PC90ZD4KICA8L3RyPiAKICA8dHI+IAogICAgPHRkIGFsaWduPVJJR0hUIHZhbGlnbj1UT1Agd2lkdGg9IjMlIj48aW1nIHNyYz0iLi4vaW1hZ2VzL0FkYXJyb3cuZ2lmIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCI+PC90ZD4KICAgIDx0ZCB3aWR0aD0iOTclIj48Yj5lY2xpcHNlLXBpY2R0PC9iPiAtIDxhIGhyZWY9Imh0dHA6Ly9lY2xpcHNlLXBpY2R0LnNvdXJjZWZvcmdlLm5ldCIgdGFyZ2V0PSJfYmxhbmsiPmh0dHA6Ly9lY2xpcHNlLXBpY2R0LnNvdXJjZWZvcmdlLm5ldDwvYT4gCiAgICAgIC0gTWljaGFlbCBJaGRlIGFuZCBMdWtlIEhpcnNjaHkgPGJyPgogICAgICBUaGUgZWNsaXBzZS1waWNkdCBwbHVnLWluIHByb3ZpZGVzIGFuIG9wZW4tc291cmNlLCBjcm9zcy1wbGF0Zm9ybSBzb2Z0d2FyZSAKICAgICAgZGV2ZWxvcG1lbnQgZW52aXJvbm1lbnQgZm9yIHRoZSBlbnRpcmUgbGluZSBvZiBQSUMgbWljcm9jb250cm9sbGVycy4gVGhlIAogICAgICBnb2FsIGZvciBwaWNkdCBpcyB0byBjcmVhdGUgYW4gY29tcGxldGUgZW52aXJvbm1lbnQgY29udGFpbmluZyBhbGwgdGhlIGZlYXR1cmVzIAogICAgICBmb3VuZCBpbiBNUExBQiB3aGlsZSBhZGRpbmcgbmV3IGZlYXR1cmVzIChzdWNoIGFzIG91dGxpbmUgdmlld3MgYW5kIGluY3JlbWVudGFsIAogICAgICBidWlsZGVycykuIDxwIGFsaWduPSJyaWdodCI+PHNtYWxsPjxhIGhyZWY9IiN0b3AiPmdvIHRvIHRvcDwvYT48L3NtYWxsPjwvcD48L3RkPgogIDwvdHI+IAogIDx0cj4gCiAgICA8dGQgYWxpZ249UklHSFQgdmFsaWduPVRPUCB3aWR0aD0iMyUiPjxpbWcgc3JjPSIuLi9pbWFnZXMvQWRhcnJvdy5naWYiIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIj48L3RkPgogICAgPHRkIHdpZHRoPSI5NyUiPjxiPkVjbGlwc2UgUlNTIFJlYWRlcjwvYj4gLSA8YSBocmVmPSJodHRwOi8vbW9ycGhpbmUuc291cmNlZm9yZ2UubmV0IiB0YXJnZXQ9Il9ibGFuayI+aHR0cDovL21vcnBoaW5lLnNvdXJjZWZvcmdlLm5ldDwvYT4gCiAgICAgIC0gUGV0ZXIgTmVocmVyIDxicj4KICAgICAgVGhlIEVjbGlwc2UgUlNTIFJlYWRlciBpcyBhIHN5bmRpY2F0ZWQgbmV3cyByZWFkZXIgdGhhdCBpbnRlZ3JhdGVzIGRpcmVjdGx5IAogICAgICBpbnRvIHlvdXIgRWNsaXBzZSB3b3JrYmVuY2guIEl0IGFsbG93cyB5b3UgdG8gc3Vic2NyaWJlIHRvIHZhcmlvdXMgc3luZGljYXRlZCAKICAgICAgbmV3cyBmZWVkcyAoY2hhbm5lbHMpIGFuZCB2aWV3IHRoZW0gaW4gc2V2ZXJhbCB3b3JrYmVuY2ggdmlld3MuIEVhY2ggY2hhbm5lbCAKICAgICAgY2FuIGJlIGF1dG9tYXRpY2FsbHkgdXBkYXRlZCBmcm9tIGl0cyBzb3VyY2UgYXQgcmVndWxhciBpbnRlcnZhbHMuIFlvdSBjYW4gCiAgICAgIGJyb3dzZSB0aGUgY2hhbm5lbCBjb250ZW50IHVzaW5nIHNldmVyYWwgY29uZmlndXJlZCBsaW5rIGJyb3dzZXJzLiBUaGFua3MgCiAgICAgIHRvIEVjbGlwc2UmcnNxdW87cyBleHRlbnNpb24gcG9pbnQgbWVjaGFuaXNtLCB0aGUgcGx1Zy1pbiBjYW4gYmUgc2VhbWxlc3NseSBleHRlbmRlZCAKICAgICAgdG8gc3VwcG9ydCBuZXcgc3luZGljYXRpb24gZm9ybWF0cyBhbmQgbGluayBicm93c2Vycy48cCBhbGlnbj0icmlnaHQiPjxzbWFsbD48YSBocmVmPSIjdG9wIj5nbyB0byB0b3A8L2E+PC9zbWFsbD48L3A+PC90ZD4KICA8L3RyPgogIDx0cj4gCiAgICA8dGQgYWxpZ249UklHSFQgdmFsaWduPVRPUCB3aWR0aD0iMyUiPjxpbWcgc3JjPSIuLi9pbWFnZXMvQWRhcnJvdy5naWYiIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIj48L3RkPgogICAgPHRkIHdpZHRoPSI5NyUiPjxiPkVjbGlwc2UtVG9vbHM8L2I+IC0gPGEgaHJlZj0iaHR0cDovL2VjbGlwc2UtdG9vbHMuc291cmNlZm9yZ2UubmV0L2NhbGwtaGllcmFyY2h5IiB0YXJnZXQ9Il9ibGFuayI+aHR0cDovL2VjbGlwc2UtdG9vbHMuc291cmNlZm9yZ2UubmV0L2NhbGwtaGllcmFyY2h5PC9hPiAKICAgICAgLSBKZXNwZXIgS2Ftc3RydXAgTGlubmV0IDxicj4KCTxiPkNhbGwgSGllcmFyY2h5IHBsdWctaW48L2I+IC0gVGhlIENhbGwgSGllcmFyY2h5IHBsdWctaW4gCiAgICAgIGFkZHMgYSBjYWxsIGhpZXJhcmNoeSB2aWV3IHRvIHRoZSBKRFQgaW4gRWNsaXBzZSwgYWxsb3dpbmcgeW91IHRvIHNlZSBjYWxscyAKICAgICAgaW50byBhbmQgY2FsbHMgb3V0IG9mIGEgbWV0aG9kLiBUaGlzIHBsdWctaW4gaXMgaW5jbHVkZWQgaW4gdGhlIGxhdGVzdCBidWlsZHMgCiAgICAgIGluIHRoZSAyLjIgc3RyZWFtLjxwIGFsaWduPSJyaWdodCI+PHNtYWxsPjxhIGhyZWY9IiN0b3AiPmdvIHRvIHRvcDwvYT48L3NtYWxsPjwvcD48L3RkPgogIDwvdHI+ICAKICA8dHI+IAogICAgPHRkIGFsaWduPVJJR0hUIHZhbGlnbj1UT1Agd2lkdGg9IjMlIj48aW1nIHNyYz0iLi4vaW1hZ2VzL0FkYXJyb3cuZ2lmIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCI+PC90ZD4KICAgIDx0ZCB3aWR0aD0iOTclIj48Yj5FY2xpcHNsZWU8L2I+IC0gPGEgaHJlZj0iaHR0cHM6Ly9lY2xpcHNsZWUuZGV2LmphdmEubmV0LyIgdGFyZ2V0PSJfYmxhbmsiPmh0dHBzOi8vZWNsaXBzbGVlLmRldi5qYXZhLm5ldC88L2E+IAogICAgICAtIEVjbGlwc2xlZSBUZWFtIDxicj4KICAgICAgVGhlIEpBSU4gU0xFRSBFY2xpcHNlIFBsdWctaW4gcHJvdmlkZXMgYSBzZXQgb2Ygd2l6YXJkcyB0byBzaW1wbGlmeSB0aGUgCiAgICAgIGNyZWF0aW9uIG9mIHRoZSBmb2xsb3dpbmcgSkFJTiBTTEVFIGNvbXBvbmVudHM6IFByb2ZpbGUgc3BlY2lmaWNhdGlvbnMsIAogICAgICBFdmVudHMsIFNlcnZpY2UgQnVpbGRpbmcgQmxvY2tzIChTQkJzKSwgU2VydmljZSBYTUwgRGVzY3JpcHRvcnMgYW5kIERlcGxveWFibGUgCiAgICAgIFVuaXRzLiBXaXRoIHRoZSBwbHVnLWluIGRldmVsb3BlcnMgY2FuIGNvbnN0cnVjdCwgZGVwbG95IGFuZCB0ZXN0IGNvbXBsZXRlIAogICAgICBzZXJ2aWNlcyBlYXNpbHkgYW5kIHF1aWNrbHkuIFRoZSBwbHVnLWluIGNyZWF0ZXMgc2tlbGV0b24gSmF2YSBjbGFzc2VzIGZvciAKICAgICAgZXZlbnRzLCBTQkJzLCBhbmQgcHJvZmlsZXMuIERldmVsb3BlcnMgdGhlbiBhZGQgdGhlIHNlcnZpY2UgbG9naWMgdG8gdGhlIAogICAgICBza2VsZXRvbnMuIENoYW5nZXMgdG8gdGhlIEpBSU4gU0xFRSBzcGVjaWZpYyBlbGVtZW50cyBjYW4gYmUgbWFkZSB0byB0aGUgCiAgICAgIGNvbXBvbmVudHMgdGhyb3VnaG91dCB0aGUgZGV2ZWxvcG1lbnQgcHJvY2VzcyB1c2luZyB3aXphcmRzLiBUaGUgcGx1Zy1pbiAKICAgICAgZ2VuZXJhdGVzIGFuZCBlbnN1cmVzIHRoYXQgdGhlIGNvcnJlY3QgWE1MIGRlc2NyaXB0b3JzIGZvciB0aGUgY29tcG9uZW50cyAKICAgICAgYXJlIGNvcnJlY3QuIDxwIGFsaWduPSJyaWdodCI+PHNtYWxsPjxhIGhyZWY9IiN0b3AiPmdvIHRvIHRvcDwvYT48L3NtYWxsPjwvcD48L3RkPgogIDwvdHI+ICAKICA8dHI+IAogICAgPHRkIGFsaWduPVJJR0hUIHZhbGlnbj1UT1Agd2lkdGg9IjMlIj48aW1nIHNyYz0iLi4vaW1hZ2VzL0FkYXJyb3cuZ2lmIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCI+PC90ZD4KICAgIDx0ZCB3aWR0aD0iOTclIj48Yj5FTUYgU2VhcmNoIFBsdWctaW48L2I+IC08YSBocmVmPSJodHRwOi8vc291cmNlZm9yZ2UubmV0L3Byb2plY3RzL2VtZnNlYXJjaC8iIHRhcmdldD0iX2JsYW5rIj5odHRwOi8vc291cmNlZm9yZ2UubmV0L3Byb2plY3RzL2VtZnNlYXJjaC88L2E+IAogICAgICAtIEtudXQgV2FubmhlZGVuIGFuZCBDaGFybGVzIEZ1bG5lY2t5IDxicj4KICAgICAgVGhpcyBFY2xpcHNlIDMuMCBwbHVnLWluIHByb3ZpZGVzIGEgc2VhcmNoIHBhZ2Ugc3BlY2lhbGl6ZWQgZm9yIHNlYXJjaGluZyAKICAgICAgRU1GIG1vZGVsIGluc3RhbmNlIGRhdGEgc2VyaWFsaXplZCB0byB3b3Jrc3BhY2UgcmVzb3VyY2VzLiBDdXJyZW50bHkgc3VwcG9ydGVkIAogICAgICBhcmUgcmVndWxhciB0ZXh0IHNlYXJjaGVzIGFuZCBYUGF0aCBzZWFyY2hlcyAodXNpbmcgSmFrYXJ0YSBKWFBhdGgpLiA8cCBhbGlnbj0icmlnaHQiPjxzbWFsbD48YSBocmVmPSIjdG9wIj5nbyB0byB0b3A8L2E+PC9zbWFsbD48L3A+PC90ZD4KICA8L3RyPiAgCiAgPHRyPiAKICAgIDx0ZCBhbGlnbj1SSUdIVCB2YWxpZ249VE9QIHdpZHRoPSIzJSI+PGltZyBzcmM9Ii4uL2ltYWdlcy9BZGFycm93LmdpZiIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiPjwvdGQ+CiAgICA8dGQgd2lkdGg9Ijk3JSI+PGI+RVBJQyAtIEVjbGlwc2UgUGVybCBJbnRlZ3JhdGlvbjwvYj4gLSA8YSBocmVmPSJodHRwOi8vZS1wLWktYy5zb3VyY2Vmb3JnZS5uZXQvIiB0YXJnZXQ9Il9ibGFuayI+aHR0cDovL2UtcC1pLWMuc291cmNlZm9yZ2UubmV0LzwvYT4gCiAgICAgIC0gRVBJQyBwcm9qZWN0IHRlYW0gPGJyPgogICAgICBFUElDIGlzIGFuIG9wZW5zb3VyY2UgUGVybCBJREUgZm9yIHRoZSBFY2xpcHNlIHBsYXRmb3JtLiBGZWF0dXJlcyBzdXBwb3J0ZWQgCiAgICAgIGFyZSBzeW50YXggaGlnaGxpZ2h0aW5nLCBvbiB0aGUgZmx5IHN5bnRheCBjaGVjaywgY29udGVudCBhc3Npc3QsIHBlcmxkb2MgCiAgICAgIHN1cHBvcnQsIHNvdXJjZSBmb3JtYXR0ZXIgYW5kIHRlbXBsYXRpbmcgc3VwcG9ydC4gUmVndWxhciBleHByZXNzaW9uIHBsdWctaW4gCiAgICAgIGFuZCBzdXBwb3J0IGZvciB0aGUgZVNwZWxsIHNwZWxsY2hlY2tlciBhcmUgYWxzbyBhdmFpbGFibGUuIEEgUGVybCBkZWJ1Z2dlciAKICAgICAgaXMgdW5kZXIgZGV2ZWxvcG1lbnQuPHAgYWxpZ249InJpZ2h0Ij48c21hbGw+PGEgaHJlZj0iI3RvcCI+Z28gdG8gdG9wPC9hPjwvc21hbGw+PC9wPjwvdGQ+CiAgPC90cj4gIAogIDx0cj4gCiAgICA8dGQgYWxpZ249UklHSFQgdmFsaWduPVRPUCB3aWR0aD0iMyUiPjxpbWcgc3JjPSIuLi9pbWFnZXMvQWRhcnJvdy5naWYiIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIj48L3RkPgogICAgPHRkIHdpZHRoPSI5NyUiPjxiPkUtSkFNQVM8L2I+IC0gPGEgaHJlZj0iaHR0cDovL2JpZ2Zvb3QudWliLm5vL3Byb2plY3RzL3N0dWRwcm9qZWN0cy9qYW1hcy8iIHRhcmdldD0iX2JsYW5rIj5odHRwOi8vYmlnZm9vdC51aWIubm8vcHJvamVjdHMvc3R1ZHByb2plY3RzL2phbWFzLzwvYT4gCiAgICAgIC0gT3R0byBIZWxnZSBOeWflcmQgPGJyPgogICAgICBUaGUgRS1KQU1BUyBwbHVnLWluLCBkZXZlbG9wZWQgYXMgcGFydCBvZiB0aGUgSkFNQVMgcHJvamVjdCwgdHJpZXMgdG8gYXNzaXN0IGRpc3RyaWJ1dGVkIHByb2dyYW1tZXJzIGluIGNvb3JkaW5hdGluZyBwYXJhbGxlbCBkZXZlbG9wbWVudCBvZiBKYXZhIGNvZGUgdXNpbmcgYWdlbnQgdGVjaG5vbG9neS4gVGhlIHBsdWctaW4gcHJvdmlkZXMgYSBjb29yZGluYXRpb24gbWVjaGFuaXNtIGJ5IGV4dGVuZGluZyBleGlzdGluZyBmdW5jdGlvbmFsaXR5IHRvIHByZXNlbnQgY28td29ya2VycyB3aXRoIGEgbGFyZ2VyIGRlZ3JlZSBvZiBhd2FyZW5lc3MgcmVnYXJkaW5nIGxvY2FsIHdvcmtzcGFjZSBjaGFuZ2VzIG9uIGNvbW1vbiBjb2RlIGluIHJlYWwtdGltZSBhbmQgcGVlci10by1wZWVyLjxiciAvPjxiciAvPgoJICBUaGUgZm91bmRhdGlvbiBmb3IgdGhlIEphdmEgQXdhcmVuZXNzIE11bHRpLUFnZW50IFN5c3RlbSAoSkFNQVMpIHByb2plY3QgaXMgdGhlIG5lZWQgZm9yIGF3YXJlbmVzcyByZWxhdGVkIHRvIHByb2dyYW1tZXIncyBhY3Rpdml0aWVzIGFyb3VuZCBjb21tb24gY29kZS4gVGhlIG9iamVjdGl2ZSBpcyB0byBwcm92aWRlIGEgZGVjZW50cmFsaXplZCBtdWx0aS1hZ2VudCBzeXN0ZW0gKE1BUykgd2hpY2ggd2lsbCBhaWQgcGFydGljaXBhbnRzIGluIGRpc3RyaWJ1dGVkIHByb2dyYW1taW5nIGFjdGl2aXRpZXMgZ2V0dGluZyBpbmZvcm1hdGlvbiBhYm91dCBldmVudHMgb24gY29tbW9uIGNvZGUuIFRoZSByZXNlYXJjaCBjb250ZXh0IGlzIEFnZW50IFN1cHBvcnRlZCBDb29wZXJhdGl2ZSBXb3JrLjxiciAvPjxiciAvPgoJICBUaGUgY3VycmVudCByZXN1bHQgb2YgdGhpcyB3b3JrIGlzOiAoMSkgSkFNQVMgKEphdmEgQXdhcmVuZXNzIE11bHRpLUFnZW50IFN5c3RlbSkgYSBwbGF0Zm9ybSBpbmRlcGVuZGVudCBmcmFtZXdvcmsgZGV2ZWxvcGVkIHVzaW5nIEpBREUgKEphdmEgQWdlbnQgREV2ZWxvcG1lbnQgRnJhbWV3b3JrKSBhcyBtaWRkbGV3YXJlLiAoMikgRS1KQU1BUyBhIEVjbGlwc2UgcGx1Zy1pbiBhbmQgY29vcmRpbmF0aW9uIHRvb2wgdGhhdCBpbXBsZW1lbnRzIHRoaXMgZnJhbWV3b3JrIGFuZCBwcm92aWRlIHRoZSBmZWF0dXJlcyBieSBleHRlbmRpbmcgdGhlIEVjbGlwc2UgcGxhdGZvcm0uPGJyIC8+PGJyIC8+CjxwIGFsaWduPSJyaWdodCI+PHNtYWxsPjxhIGhyZWY9IiN0b3AiPmdvIHRvIHRvcDwvYT48L3NtYWxsPjwvcD48L3RkPgogIDwvdHI+ICAKICA8dHI+IAogICAgPHRkIGFsaWduPVJJR0hUIHZhbGlnbj1UT1Agd2lkdGg9IjMlIj48aW1nIHNyYz0iLi4vaW1hZ2VzL0FkYXJyb3cuZ2lmIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCI+PC90ZD4KICAgIDx0ZCB3aWR0aD0iOTclIj48Yj5GYXQgSmFyIEVjbGlwc2UgUGx1Zy1JbiA8L2I+IC0gPGEgaHJlZj0iaHR0cDovL2ZqZXAuc291cmNlZm9yZ2UubmV0LyIgdGFyZ2V0PSJfYmxhbmsiPmh0dHA6Ly9mamVwLnNvdXJjZWZvcmdlLm5ldC88L2E+IAogICAgICAtIEZlcmVuYyBIZWNobGVyIGFuZCBTaW1vbiBUdWZmcyA8YnI+CiAgICAgIEZhdCBKYXIgRWNsaXBzZSBQbHVnLUluIGlzIGEgRGVwbG95bWVudC1Ub29sIHdoaWNoIGRlcGxveXMgYW4gRWNsaXBzZSBqYXZhLXByb2plY3QgCiAgICAgIGludG8gb25lIGV4ZWN1dGFibGUgamFyLiBJbiBhZGRpdGlvbiB0byB0aGUgZWNsaXBzZSBzdGFuZGFyZCBqYXItZXhwb3J0ZXIsIAogICAgICByZWZlcmVuY2VkIGNsYXNzZXMgYW5kIGphcnMgYXJlIGluY2x1ZGVkIGluIHRoZSAiRmF0LUphciIuIFRoZSByZXN1bHRpbmcgCiAgICAgIGphciBjb250YWlucyBhbGwgcmVxdWlyZWQgY2xhc3NlcyBhbmQgY2FuIGJlIGV4ZWN1dGVkIGRpcmVjdGx5IHdpdGggImphdmEgCiAgICAgIC1qYXIiIC0gbm8gY2xhc3NwYXRoIGhhcyB0byBiZSBzZXQsIG5vIGFkZGl0aW9uYWwgamFycyBoYXZlIHRvIGJlIGRlcGxveWVkLiAKICAgICAgSmFycywgRXh0ZXJuYWwtSmFycywgVXNlci1MaWJyYXJpZXMsIFN5c3RlbS1MaWJyYXJpZXMsIENsYXNzZXMtRm9sZGVycyBhbmQgCiAgICAgIFByb2plY3QtRXhwb3J0cyBhcmUgYWxsIGlkZW50aWZpZWQgYnkgdGhlIHBsdWctaW4uIE1haW4tQ2xhc3MgY2FuIGFsc28gYmUgCiAgICAgIHNlbGVjdGVkIGFuZCBNYW5pZmVzdC1maWxlcyBhcmUgbWVyZ2VkLiBUaGUgT25lLUpBUiBvcHRpb24gaW50ZWdyYXRlcyBhIAogICAgICBzcGVjaWFsaXNlZCBDbGFzcy1Mb2FkZXIgd3JpdHRlbiBieSBTaW1vbiBUdWZmcyAoIDxhIGhyZWY9Imh0dHA6Ly9vbmUtamFyLnNvdXJjZWZvcmdlLm5ldC8iIHRhcmdldD0iX2JsYW5rIj5odHRwOi8vb25lLWphci5zb3VyY2Vmb3JnZS5uZXQvPC9hPiAKICAgICAgKSB3aGljaCBoYW5kbGVzIGphci1maWxlcyBpbnNpZGUgYSBqYXIgLiA8cCBhbGlnbj0icmlnaHQiPjxzbWFsbD48YSBocmVmPSIjdG9wIj5nbyB0byB0b3A8L2E+PC9zbWFsbD48L3A+PC90ZD4KICA8L3RyPiAgCiAgPHRyPiAKICAgIDx0ZCBhbGlnbj1SSUdIVCB2YWxpZ249VE9QIHdpZHRoPSIzJSI+PGltZyBzcmM9Ii4uL2ltYWdlcy9BZGFycm93LmdpZiIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiPjwvdGQ+CiAgICA8dGQgd2lkdGg9Ijk3JSI+PGI+RmxleGlibGUgWE1MLWJhc2VkIExhbmd1YWdlcyAoRlhMKSBwbHVnLWluPC9iPiA8YSBocmVmPSJodHRwOi8vd3d3LmZ4bC1wcm9qZWN0LmNvbSIgdGFyZ2V0PSJfYmxhbmsiPmh0dHA6Ly93d3cuZnhsLXByb2plY3QuY29tPC9hPiAKICAgICAgQ2hyaXN0aWFuIFJlaWNoZWwgPGJyPgogICAgICBUaGUgRlhMIHByb2plY3QgaXMgYW4gb3Blbi1zb3VyY2UgcmVzZWFyY2ggcHJvamVjdCB0aGF0IGxldmVyYWdlcyBkb21haW4gCiAgICAgIHNwZWNpZmljIGxhbmd1YWdlcyAoRFNMcykgYW5kIG90aGVyIG1vZGVsaW5nIGFwcHJvYWNoZXMuIFRoZSBGWEwgcGx1Zy1pbiAKICAgICAgcHJvdmlkZXMsIGZvciBleGFtcGxlLCBzdXBwb3J0IGZvciB0aGUgaW50ZWdyYXRpb24gb2YgRFNMcyBhbmQgaW50cmEtbW9kZWwgCiAgICAgIGFuZCBpbnRlci1tb2RlbCB0cmFuc2Zvcm1hdGlvbnMgYmFzZWQgb24gZ3JhcGhpY2FsIHBpcGVsaW5lcyBhbmQgb3B0aW1pemVkIAogICAgICB2aWV3cyAoZS5nLiwgdGV4dCwgRU1GIGdlbmVyYXRlZCBlZGl0b3JzLCBldGMuKS4gQWRkaXRpb25hbGx5LCBhIHNwZWNpYWwgCiAgICAgIGJ1aWxkZXIgY2FuIGJlIHVzZWQgaW4gb3JkZXIgdG8gZ2VuZXJhdGUgY3VzdG9taXplZCBhbmQgdGFpbG9yZWQgY29kZS4gPHAgYWxpZ249InJpZ2h0Ij48c21hbGw+PGEgaHJlZj0iI3RvcCI+Z28gdG8gdG9wPC9hPjwvc21hbGw+PC9wPjwvdGQ+CiAgPC90cj4gCiAgPHRyPiAKICAgIDx0ZCBhbGlnbj1SSUdIVCB2YWxpZ249VE9QIHdpZHRoPSIzJSI+PGltZyBzcmM9Ii4uL2ltYWdlcy9BZGFycm93LmdpZiIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiPjwvdGQ+CiAgICA8dGQgd2lkdGg9Ijk3JSI+PGI+Rmx1eCA8L2I+IC0gPGEgaHJlZj0iaHR0cDovL3NvdXJjZWZvcmdlLm5ldC9wcm9qZWN0cy9mbHV4NGVjbGlwc2UiIHRhcmdldD0iX2JsYW5rIj5odHRwOi8vc291cmNlZm9yZ2UubmV0L3Byb2plY3RzL2ZsdXg0ZWNsaXBzZTwvYT4gCiAgICAgIC0gTWF0dGhpYXMgQnVyYmFjaCA8YnI+CiAgICAgIEZsdXggaXMgYSBKYXZhIHRvb2wgYXZhaWxhYmxlIGFzIGFuIEVjbGlwc2UgcGx1Zy1pbiB0aGF0IHN1cHBvcnRzIHRoZSBtb2RlbC1kcml2ZW4gCiAgICAgIGRlc2lnbiBvZiBhIFN0cnV0cyAxLjEgd2ViIGFwcGxpY2F0aW9uIGJ5IHJlcGVhdGVkbHkgKHJlLSlnZW5lcmF0aW5nIHRoZSAKICAgICAgc3RydXRzLWNvbmZpZy08bW9kdWxlPi54bWwgZmlsZXMgZnJvbSBVTUwgYWN0aXZpdHkgZGlhZ3JhbXMuIEV4dGVuc2l2ZSBkb2N1bWVudGF0aW9uIAogICAgICBpcyBhdmFpbGFibGUgdGhyb3VnaCB0aGUgRWNsaXBzZSBvbmxpbmUgaGVscCBhbmQgb24gdGhlIHByb2plY3QncyBob21lIHBhZ2UgCiAgICAgIDxhIGhyZWY9Imh0dHA6Ly9mbHV4NGVjbGlwc2Uuc291cmNlZm9yZ2UubmV0IiB0YXJnZXQ9Il9ibGFuayI+aHR0cDovL2ZsdXg0ZWNsaXBzZS5zb3VyY2Vmb3JnZS5uZXQ8L2E+LiAKICAgIDxwIGFsaWduPSJyaWdodCI+PHNtYWxsPjxhIGhyZWY9IiN0b3AiPmdvIHRvIHRvcDwvYT48L3NtYWxsPjwvcD48L3RkPgogIDwvdHI+ICAKICA8dHI+IAogICAgPHRkIGFsaWduPVJJR0hUIHZhbGlnbj1UT1Agd2lkdGg9IjMlIj48aW1nIHNyYz0iLi4vaW1hZ2VzL0FkYXJyb3cuZ2lmIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCI+PC90ZD4KICAgIDx0ZCB3aWR0aD0iOTclIj48Yj5GT1AgQnJpZGdlPC9iPiAtIDxhIGhyZWY9Imh0dHA6Ly93d3cuYWhtYWRzb2Z0Lm9yZy9mb3BicmlkZ2UuaHRtbCIgdGFyZ2V0PSJfYmxhbmsiPmh0dHA6Ly93d3cuYWhtYWRzb2Z0Lm9yZy9mb3BicmlkZ2UuaHRtbDwvYT4gCiAgICAgIC0gQWhtYWRTb2Z0IDxicj4KICAgICAgVGhlIEZPUCBicmlkZ2UgcGx1Zy1pbiBwcm92aWRlcyB0aGUgYWJpbGl0eSBmb3IgZWNsaXBzZSB1c2VycyB0byBjb252ZXJ0IAogICAgICBGTyBkb2N1bWVudHMgaW50byBhbnkgb25lIG9mIHRoZSBmb3JtYXRzIHN1cHBvcnRlZCBieSBBcGFjaGUgRk9QIGRpcmVjdGx5IAogICAgICBmcm9tIHRoZSB3b3JrYmVuY2guIFRoaXMgY2FwYWJpbGl0eSBpcyBxdWl0ZSB1c2VmdWwgZm9yIHJhcGlkIHByb3RvdHlwaW5nLiAKICAgIDxwIGFsaWduPSJyaWdodCI+PHNtYWxsPjxhIGhyZWY9IiN0b3AiPmdvIHRvIHRvcDwvYT48L3NtYWxsPjwvcD48L3RkPgogIDwvdHI+ICAKICAgIDx0cj4gCiAgICA8dGQgYWxpZ249UklHSFQgdmFsaWduPVRPUCB3aWR0aD0iMyUiPjxpbWcgc3JjPSIuLi9pbWFnZXMvQWRhcnJvdy5naWYiIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIj48L3RkPgogICAgPHRkIHdpZHRoPSI5NyUiPiAKICAgICAgPHA+PGI+RnJlZU1lbTwvYj4gLSA8YSBocmVmPSJodHRwOi8vd3d3Lmp1bmdpbmdlci5iaXovZWNsaXBzZS8iIHRhcmdldD0iX2JsYW5rIj5odHRwOi8vd3d3Lmp1bmdpbmdlci5iaXovZWNsaXBzZS88L2E+IAogICAgICAgIC0gTWFya3VzIE9saXZlciBKdW5naW5nZXIgPGJyPgogICAgICAgIEZyZWVNZW0gaXMgYSBncmFwaGljYWwgbWVtb3J5IG1vbml0b3IgdGhhdCBmZWF0dXJlczogPC9wPgogICAgICA8dWw+CiAgICAgICAgPGxpPlNob3J0IHRlcm0gbWVtb3J5IG1vbml0b3Igc2hvd2luZyB0aGUgbGFzdCBtaW51dGU8L2xpPgogICAgICAgIDxsaT5Mb25nIHRlcm0gbWVtb3J5IG1vbml0b3Igc2hvd2luZyB0aGUgbGFzdCB0d28gaG91cnM8L2xpPgogICAgICAgIDxsaT5NYW51YWwgYW5kIGF1dG9tYXRpYyBnYXJiYWdlIGNvbGxlY3Rpb24gPC9saT4KICAgICAgICA8bGk+R3JhcGhpY2FsIG1lbW9yeSBpbmRpY2F0b3IgaW4gdGhlIHRpdGxlIGJhciA8L2xpPgogICAgICAgIDxsaT5QcmVmZXJlbmNlcyB0byBhZGp1c3QgZGlzcGxheSBhbmQgYmVoYXZpb3VyIDwvbGk+CiAgICAgIDwvdWw+CiAgICA8cCBhbGlnbj0icmlnaHQiPjxzbWFsbD48YSBocmVmPSIjdG9wIj5nbyB0byB0b3A8L2E+PC9zbWFsbD48L3A+PC90ZD4KICA8L3RyPiAgCiAgPHRyPgogICA8dGQgYWxpZ249UklHSFQgdmFsaWduPVRPUCB3aWR0aD0iMyUiPjxpbWcgc3JjPSIuLi9pbWFnZXMvQWRhcnJvdy5naWYiIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIj48L3RkPiAKICAgIDx0ZCB3aWR0aD0iMTAwJSI+IDxiPkdlbmVyaWMgRWNsaXBzZSBNb2RlbGluZyBTeXN0ZW0gKEdFTVMpPC9iPiAtIDxhIGhyZWY9Imh0dHA6Ly93d3cuc2YubmV0L3Byb2plY3RzL2dlbXMiIHRhcmdldD0iX2JsYW5rIj5odHRwOi8vd3d3LnNmLm5ldC9wcm9qZWN0cy9nZW1zPC9hPiAKICAgICAgLSBEaXN0cmlidXRlZCBPYmplY3QgQ29tcHV0aW5nIEdyb3VwIGF0IFZhbmRlcmJpbHQgVW5pdmVyc2l0eSA8aW1nIHNyYz0iLi4vaW1hZ2VzL25ldy5naWYiIHdpZHRoPSIzMSIgaGVpZ2h0PSIxNCI+PGJyPgogICAgICBUaGUgR2VuZXJpYyBFY2xpcHNlIE1vZGVsaW5nIFN5c3RlbSAoR0VNUykgaXMgYSBNREQgdG9vbCBmb3IgRWNsaXBzZSB0aGF0IAogICAgICBhbGxvd3MgZm9yIHRoZSByYXBpZCBkZXZlbG9wbWVudCBvZiBEcmF3MkQgcGx1Z2lucy4gRGV2ZWxvcGVycyBzcGVjaWZ5IHRoZSAKICAgICAgcnVsZXMgZm9yIGEgZG9tYWluIGxhbmd1YWdlIHVzaW5nIGEgbWV0YW1vZGVsIGFuZCB0aGUgdG9vbCBnZW5lcmF0ZXMgYSBkaWFncmFtIAogICAgICBlZGl0b3IgcGx1Z2luIHRoYXQgZW5mb3JjZXMgdGhlIHJ1bGVzIGZyb20gdGhlIG1ldGFtb2RlbC4gSW50ZXJwcmV0ZXJzIGNhbiAKICAgICAgdGhlbiBiZSB3cml0dGVuIHRvIHRyYXZlcnNlIHRoZSBtb2RlbCBhbmQgZ2VuZXJhdGUgY29kZSwgcGVyZm9ybSBhbmFseXNlcywgCiAgICAgIG9yIGV4ZWN1dGUgdGhlIG1vZGVsLjxwIGFsaWduPSJyaWdodCI+PHNtYWxsPjxhIGhyZWY9IiN0b3AiPmdvIHRvIHRvcDwvYT48L3NtYWxsPjwvcD48L3RkPgogIDwvdHI+CiAgPHRyPgogICA8dGQgYWxpZ249UklHSFQgdmFsaWduPVRPUCB3aWR0aD0iMyUiPjxpbWcgc3JjPSIuLi9pbWFnZXMvQWRhcnJvdy5naWYiIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIj48L3RkPiAKICAgIDx0ZCB3aWR0aD0iMTAwJSI+IDxiPkdsb2JhbEVudmlyb25tZW50PC9iPiAtIDxhIGhyZWY9Imh0dHA6Ly93d3cuYWNlbGV0LmNvbS9vcGVuc291cmNlL2luZGV4Lmh0bWwiIHRhcmdldD0iX2JsYW5rIj5odHRwOi8vd3d3LmFjZWxldC5jb20vb3BlbnNvdXJjZS9pbmRleC5odG1sPC9hPiAKICAgICAgLSBUaGUgQWNlbGV0IFRlYW0gPGJyPgogICAgICBHbG9iYWxFbnZpcm9ubWVudCBwcm92aWRlcyBnbG9iYWxseSBzaGFyZWQga2V5LXZhbHVlIHBhaXJzIGZvciBkaWZmZXJlbnQgCiAgICAgIEphdmEgdGhyZWFkcywgSlZNcywgSjJFRSAoRUpCIGFuZCBKU1ApLCBKYXZhIGFuZCBub24tamF2YSBhcHBsaWNhdGlvbnMuIAogICAgPHAgYWxpZ249InJpZ2h0Ij48c21hbGw+PGEgaHJlZj0iI3RvcCI+Z28gdG8gdG9wPC9hPjwvc21hbGw+PC9wPjwvdGQ+CiAgPC90cj4KICAgIDx0cj4KICAgPHRkIGFsaWduPVJJR0hUIHZhbGlnbj1UT1Agd2lkdGg9IjMlIj48aW1nIHNyYz0iLi4vaW1hZ2VzL0FkYXJyb3cuZ2lmIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCI+PC90ZD4gCiAgICA8dGQgd2lkdGg9IjEwMCUiPiA8Yj5Hb28gRWNsaXBzZSBJREUgcGx1Zy1pbiAtPC9iPjxhIGhyZWY9Imh0dHA6Ly9wZW9wbGUuZGViaWFuLm9yZy8lN0ViZnVsZ2hhbS9nb28vaW5kZXguaHRtbCIgdGFyZ2V0PSJfYmxhbmsiPmh0dHA6Ly9wZW9wbGUuZGViaWFuLm9yZy9+YmZ1bGdoYW0vZ29vL2luZGV4Lmh0bWw8L2E+IAogICAgICAtIEJyZW50IEEuIEZ1bGdoYW08YnI+CiAgICAgIFRoZSBHb28gcHJvZ3JhbW1pbmcgbGFuZ3VhZ2UgaXMgYSBuZXcgT2JqZWN0IE9yaWVudGVkIFNjaGVtZSBhbmQgCiAgICAgIER5bGFuLWluc3BpcmVkIHByb2dyYW1taW5nIGxhbmd1YWdlLiBUaGUgR29vIEVjbGlwc2UgSURFIHBsdWctaW4gCiAgICAgIHByb3ZpZGVzIHN5bnRheCBoaWdobGlnaHRpbmcsIGtleXdvcmQgY29tcGxldGlvbiwgYW5kIEdvbyBSRVBMIAogICAgICBzdXBwb3J0IGZyb20gd2l0aGluIHRoZSBFY2xpcHNlIHByb2dyYW1taW5nIGVudmlyb25tZW50LgogICAgPHAgYWxpZ249InJpZ2h0Ij48c21hbGw+PGEgaHJlZj0iI3RvcCI+Z28gdG8gdG9wPC9hPjwvc21hbGw+PC9wPjwvdGQ+CiAgPC90cj4KICAgIDx0cj4KICAgPHRkIGFsaWduPVJJR0hUIHZhbGlnbj1UT1Agd2lkdGg9IjMlIj48aW1nIHNyYz0iLi4vaW1hZ2VzL0FkYXJyb3cuZ2lmIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCI+PC90ZD4gCiAgICA8dGQgd2lkdGg9IjEwMCUiPiA8Yj5Hb29nbGUtU2VhcmNoIHBsdWctaW48L2I+IC0gPGEgaHJlZj0iaHR0cDovL3d3dy5mYXRib3JuLm9yZy9lY2xpcHNlL3BsdWdpbnMvaW5kZXguaHRtbCIgdGFyZ2V0PSJfYmxhbmsiPmh0dHA6Ly93d3cuZmF0Ym9ybi5vcmcvZWNsaXBzZS9wbHVnaW5zL2luZGV4Lmh0bWw8L2E+IAogICAgICBieSBDaHJpcyBLYXUgPGJyPgoJICBBIHBsdWctaW4gdGhhdCBwcm92aWRlcyBnb29nbGUgc2VhcmNoZXMgZnJvbSBpbnNpZGUgZWNsaXBzZS4gCiAgICA8cCBhbGlnbj0icmlnaHQiPjxzbWFsbD48YSBocmVmPSIjdG9wIj5nbyB0byB0b3A8L2E+PC9zbWFsbD48L3A+PC90ZD4KICA8L3RyPgogICAgPHRyPgogICA8dGQgYWxpZ249UklHSFQgdmFsaWduPVRPUCB3aWR0aD0iMyUiPjxpbWcgc3JjPSIuLi9pbWFnZXMvQWRhcnJvdy5naWYiIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIj48L3RkPiAKICAgIDx0ZCB3aWR0aD0iMTAwJSI+IDxiPkdyb292eSBFY2xpcHNlIFBsdWctaW48L2I+IC0gPGEgaHJlZj0iaHR0cDovL2RvY3MuY29kZWhhdXMub3JnL2Rpc3BsYXkvR1JPT1ZZL0VjbGlwc2UlMkJQbHVnaW4iIHRhcmdldD0iX2JsYW5rIj5odHRwOi8vZG9jcy5jb2RlaGF1cy5vcmcvZGlzcGxheS9HUk9PVlkvRWNsaXBzZStQbHVnaW48L2E+IAogICAgICAtIEphbWVzIFN0cmFjaGFuIGFuZCBCb2IgTWMgV2hpcnRlciA8YnI+CiAgICAgIDxhIGhyZWY9Imh0dHA6Ly9ncm9vdnkuY29kZWhhdXMub3JnIiB0YXJnZXQ9Il9ibGFuayI+R3Jvb3Z5PC9hPiBpcyBhIG5ldyAKICAgICAgYWdpbGUgZHluYW1pYyBsYW5ndWFnZSBmb3IgdGhlIEpWTSBjb21iaW5pbmcgbG90cyBvZiBncmVhdCBmZWF0dXJlcyBmcm9tIAogICAgICBsYW5ndWFnZXMgbGlrZSBQeXRob24sIFJ1YnkgYW5kIFNtYWxsdGFsayBhbmQgbWFraW5nIHRoZW0gYXZhaWxhYmxlIHRvIHRoZSAKICAgICAgSmF2YSBkZXZlbG9wZXJzIHVzaW5nIGEgSmF2YS1saWtlIHN5bnRheC4gR3Jvb3Z5IGNhbiBiZSB1c2VkIGFzIGFuIGFsdGVybmF0aXZlIAogICAgICBjb21waWxlciB0byBqYXZhYyB0byBnZW5lcmF0ZSBzdGFuZGFyZCBKYXZhIGJ5dGVjb2RlIHRvIGJlIHVzZWQgYnkgYW55IEphdmEgCiAgICAgIHByb2plY3Qgb3IgaXQgY2FuIGJlIHVzZWQgZHluYW1pY2FsbHkgYXMgYW4gYWx0ZXJuYXRpdmUgbGFuZ3VhZ2Ugc3VjaCBhcyAKICAgICAgZm9yIHNjcmlwdGluZyBKYXZhIG9iamVjdHMsIHRlbXBsYXRpbmcgb3Igd3JpdGluZyB1bml0IHRlc3QgY2FzZXMuIDxwIGFsaWduPSJyaWdodCI+PHNtYWxsPjxhIGhyZWY9IiN0b3AiPmdvIHRvIHRvcDwvYT48L3NtYWxsPjwvcD48L3RkPgogIDwvdHI+CiAgPHRyPgogICA8dGQgYWxpZ249UklHSFQgdmFsaWduPVRPUCB3aWR0aD0iMyUiPjxpbWcgc3JjPSIuLi9pbWFnZXMvQWRhcnJvdy5naWYiIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIj48L3RkPiAKICAgIDx0ZCB3aWR0aD0iMTAwJSI+IDxiPkltcHJvdmUgPC9iPi0gPGJyPgoJICA8Yj5DIyBwbHVnLWluIGZvciBFY2xpcHNlPC9iPiAtIDxhIGhyZWY9Imh0dHA6Ly93d3cuaW1wcm92ZS10ZWNobm9sb2dpZXMuY29tL2FscGhhL2VzaGFycC8iIHRhcmdldD0iX2JsYW5rIj5odHRwOi8vd3d3LmltcHJvdmUtdGVjaG5vbG9naWVzLmNvbS9hbHBoYS9lc2hhcnAvPC9hPjxicj4KICAgICAgVGhpcyBwbHVnLWluIGFsbG93cyB5b3UgdG8gZWRpdCBDIyBjb2RlLCBzcGVjaWZ5IGFyZ3VtZW50cyBmb3IgdGhlIEMjIGNvbXBpbGVyIGFuZCBidWlsZCB5b3VyIGNvZGUuCiAgICAgIDxicj48Yj5SZXNpbiBwbHVnLWluIGZvciBFY2xpcHNlIDwvYj4gLTxhIGhyZWY9Imh0dHA6Ly93d3cuaW1wcm92ZS10ZWNobm9sb2dpZXMuY29tL2FscGhhL3Jlc2luLyIgdGFyZ2V0PSJfYmxhbmsiPmh0dHA6Ly93d3cuaW1wcm92ZS10ZWNobm9sb2dpZXMuY29tL2FscGhhL3Jlc2luLzwvYT4gCiAgICAgIDxicj4KICAgICAgVGhpcyBwbHVnLWluIGFsbG93cyB5b3UgdG8gZGVidWcganNwIG9yIHNlcnZsZXRzIGJ5IGxhdW5jaGluZyByZXNpbiB3aXRoaW4gCiAgICAgIGVjbGlwc2UuIEl0IGluY2x1ZGVzIGEgcHJvamVjdCB3aXphcmQgZm9yIGNyZWF0aW5nIHdlYiBhcHBsaWNhdGlvbiBkaXJlY3RvcnkgCiAgICAgIHN0cnVjdHVyZXMgYW5kIGNsYXNzcGF0aHMuIEFOVCBpcyB1c2VkIHRvIGJ1aWxkIHRoZSB3YXIgZmlsZS4gVGhlIHByb3ZpZGVkIAogICAgICBBTlQgYnVpbGQgZmlsZSBjYW4gYmUgY3VzdG9taXplZCBieSB1c2VycyB0byBvcHRpbWl6ZSBpbnRlZ3JhdGlvbi48YnI+CiAgICAgIDxiPlN0cnV0cy1jb25maWcgRWRpdG9yIGZvciBFY2xpcHNlIDwvYj4gLSA8YSBocmVmPSJodHRwOi8vd3d3LmltcHJvdmUtdGVjaG5vbG9naWVzLmNvbS9hbHBoYS9zdHJ1dHMtY29uZmlnLWVkaXRvci8iIHRhcmdldD0iX2JsYW5rIj5odHRwOi8vd3d3LmltcHJvdmUtdGVjaG5vbG9naWVzLmNvbS9hbHBoYS9zdHJ1dHMtY29uZmlnLWVkaXRvci88L2E+IAogICAgICA8YnI+CiAgICAgIFRoaXMgcGx1Zy1pbiBmZWF0dXJlcyBhIHN0cnV0cy1jb25maWcgZ3JhcGhpY2FsIHZpZXcsIGF1dG9tYXRpYyBsYXlvdXQsIGFuZCAKICAgICAgb3RoZXIgdG9vbHMgZm9yIHN0cnV0cy1jb25maWcgZWRpdGluZy4gQSBzY3JlZW5zaG90IG9mIHRoZSBncmFwaGljYWwgdG9vbCAKICAgICAgaXMgYXZhaWxhYmxlIGF0IDxhIGhyZWY9Imh0dHA6Ly93d3cuaW1wcm92ZS10ZWNobm9sb2dpZXMuY29tL2FscGhhL3N0cnV0cy1jb25maWctZWRpdG9yL2ltYWdlcy9wbHVnLWluLmdpZiIgdGFyZ2V0PSJfYmxhbmsiPmh0dHA6Ly93d3cuaW1wcm92ZS10ZWNobm9sb2dpZXMuY29tL2FscGhhL3N0cnV0cy1jb25maWctZWRpdG9yL2ltYWdlcy9wbHVnLWluLmdpZjwvYT4gCiAgICAgIDxicj4KICAgICAgPGI+V1NETCBWaWV3ZXIgZm9yIEVjbGlwc2U8L2I+IC0gPGEgaHJlZj0iaHR0cDovL3d3dy5pbXByb3ZlLXRlY2hub2xvZ2llcy5jb20vYWxwaGEvd3NkbC12aWV3ZXIvIiB0YXJnZXQ9Il9ibGFuayI+aHR0cDovL3d3dy5pbXByb3ZlLXRlY2hub2xvZ2llcy5jb20vYWxwaGEvd3NkbC12aWV3ZXIvPC9hPiAKICAgICAgPGJyPgogICAgICBUaGlzIHBsdWctaW4gZmVhdHVyZXMgYSBncmFwaGljYWwgdmlldyBmb3IgYW55IHdzZGwgZmlsZXMsIGF1dG9tYXRpYyBsYXlvdXQsIAogICAgICBhbmQgb3RoZXIgdG9vbHMgZm9yIHdzZGwgY29uZmlndXJhdGlvbiBlZGl0aW5nLiBBIHNjcmVlbnNob3Qgb2YgdGhlIGdyYXBoaWNhbCAKICAgICAgdG9vbCBpcyBhdmFpbGFibGUgYXQgPGEgaHJlZj0iaHR0cDovL3d3dy5pbXByb3ZlLXRlY2hub2xvZ2llcy5jb20vYWxwaGEvd3NkbC12aWV3ZXIvaW1hZ2VzL2libS5qcGciIHRhcmdldD0iX2JsYW5rIj5odHRwOi8vd3d3LmltcHJvdmUtdGVjaG5vbG9naWVzLmNvbS9hbHBoYS93c2RsLXZpZXdlci9pbWFnZXMvaWJtLmpwZzwvYT4gCiAgICA8cCBhbGlnbj0icmlnaHQiPjxzbWFsbD48YSBocmVmPSIjdG9wIj5nbyB0byB0b3A8L2E+PC9zbWFsbD48L3A+PC90ZD4KICA8L3RyPgogICA8dHI+CiAgICA8dGQgYWxpZ249UklHSFQgdmFsaWduPVRPUCB3aWR0aD0iMyUiPjxpbWcgc3JjPSIuLi9pbWFnZXMvQWRhcnJvdy5naWYiIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIj48L3RkPiAKICAgIDx0ZCB3aWR0aD0iMTAwJSI+IDxiPkphZ3ppbGxhIFBsdWctSW48L2I+IC0gPGEgaHJlZj0iaHR0cDovL2phZ3ppbGxhLnNvdXJjZWZvcmdlLm5ldCIgdGFyZ2V0PSJfYmxhbmsiPmh0dHA6Ly9qYWd6aWxsYS5zb3VyY2Vmb3JnZS5uZXQ8L2E+IAogICAgICAtIE1pZ3VlbCBHcmlmZmEgPGJyPgogICAgICBUaGUgamFnemlsbGEgZWNsaXBzZSBwbHVnLWluIGlzIGEgY29tcG9uZW50IG9mIHRoZSBqYWd6aWxsYSBzeXN0ZW0gKGEgamF2YSAKICAgICAgd3JhcHBlciB0byBidWd6aWxsYSAyLjE2IGF0IHRoaXMgbW9tZW50KS4gVGhpcyBwbHVnLWluIGVuYWJsZXMgcXVlcnlpbmcsIAogICAgICBmaWx0ZXJpbmcsIG1vZGlmeWluZyBhbmQgcmVwb3J0aW5nIGJ1Z3Mgd2l0aGluIHRoZSBlY2xpcHNlIGVudmlyb21lbnQuIEphZ3ppbGxhIAogICAgICBpcyBleHRyZW1seSBmbGV4aWJsZSwgYW5kIGV2ZW50cyBjYW4gYmUgZGVmaW5lZCBhbmQgY3VzdG9taXplZCB0byBmaXggY3VzdG9taXphdGlvbiAKICAgICAgbmVlZHMuIEN1cnJlbnRseSB0aGUgY29ubmVjdGlvbiBtZXRob2QgaXMgSkRCQywgYnV0IGEgd2ViIHNlcnZpY2VzIGludGVyZmFjZSAKICAgICAgaXMgdW5kZXIgZGV2ZWxvcG1lbnQuIDxwIGFsaWduPSJyaWdodCI+PHNtYWxsPjxhIGhyZWY9IiN0b3AiPmdvIHRvIHRvcDwvYT48L3NtYWxsPjwvcD48L3RkPgogIDwvdHI+CiAgPHRyPgogICAgPHRkIGFsaWduPVJJR0hUIHZhbGlnbj1UT1Agd2lkdGg9IjMlIj48aW1nIHNyYz0iLi4vaW1hZ2VzL0FkYXJyb3cuZ2lmIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCI+PC90ZD4gCiAgICA8dGQgd2lkdGg9IjEwMCUiPjxiPiBKYWxvcHkgSmF2YSBTb3VyY2UgQ29kZSBGb3JtYXR0ZXI8L2I+IC0gPGEgaHJlZj0iaHR0cDovL2phbG9weS5zb3VyY2Vmb3JnZS5uZXQiIHRhcmdldD0iX2JsYW5rIj5odHRwOi8vamFsb3B5LnNvdXJjZWZvcmdlLm5ldDwvYT4gCiAgICAgIC0gTWFyY28gSHVuc2lja2VyPGJyPgogICAgICBKYWxvcHkgaXMgYSBwb3dlcmZ1bCBzb3VyY2UgY29kZSBmb3JtYXR0ZXIgdGhhdCBpbmNsdWRlcyBzdXBwb3J0IGZvcgpmZWF0dXJlcyBzdWNoIGFzIEJyYWNlIFN0eWxlIFRyYW5zZm9ybWF0aW9uLCBJbnRlbGxpZ2VudCBMaW5lIFdyYXBwaW5nLApJbmRlbnRhdGlvbiwgVmFyaWFibGVzL1BhcmFtZXRlciBBbGlnbm1lbnQsIENvZGUgU2VwYXJhdGlvbi9Tb3J0aW5nLApKYXZhZG9jIEdlbmVyYXRpb24gYW5kIG11Y2ggbW9yZS4gIDxwIGFsaWduPSJyaWdodCI+PHNtYWxsPjxhIGhyZWY9IiN0b3AiPmdvIHRvIHRvcDwvYT48L3NtYWxsPjwvcD48L3RkPgogIDwvdHI+CiAgPHRyPiAKICAgIDx0ZCBhbGlnbj1SSUdIVCB2YWxpZ249VE9QIHdpZHRoPSIzJSI+PGltZyBzcmM9Ii4uL2ltYWdlcy9BZGFycm93LmdpZiIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiPjwvdGQ+CiAgICA8dGQgd2lkdGg9Ijk3JSI+PGI+SmFwcGxlPC9iPiAtIDxhIGhyZWY9Imh0dHA6Ly93d3cuamFwcGxlLm9yZy9hYm91dC5odG1sIiB0YXJnZXQ9Il9ibGFuayI+aHR0cDovL3d3dy5qYXBwbGUub3JnL2Fib3V0Lmh0bWw8L2E+PGJyPgogICAgICBKYXBwbGUgaXMgYSByYXBpZCBhcHBsaWNhdGlvbiBkZXZlbG9wbWVudCBlbnZpcm9ubWVudCBmb3IgYnVpbGRpbmcgd2ViIAoJICBhcHBsaWNhdGlvbnMgYW5kIHNlcnZpY2VzLiBCdWlsdCBvbiB0aGUgSmF2YSBwbGF0Zm9ybSBhbmQgb3Blbi1zdGFuZGFyZHMsIAoJICBKYXBwbGUgcHJvdmlkZXMgYm90aCBhbiBlbnZpcm9ubWVudCBmb3IgZGV2ZWxvcGluZyBhcHBsaWNhdGlvbnMgYW5kIGFsc28gCgkgIHRoZSBmb3VuZGF0aW9uIHNlcnZlciBjb2RlIGZvciBwcm9kdWN0aW9uIGFwcGxpY2F0aW9ucy48cCBhbGlnbj0icmlnaHQiPjxzbWFsbD48YSBocmVmPSIjdG9wIj5nbyB0byB0b3A8L2E+PC9zbWFsbD48L3A+PC90ZD4KICA8L3RyPgogICA8dHI+CiAgICA8dGQgYWxpZ249UklHSFQgdmFsaWduPVRPUCB3aWR0aD0iMyUiPjxpbWcgc3JjPSIuLi9pbWFnZXMvQWRhcnJvdy5naWYiIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIj48L3RkPiAKICAgIDx0ZCB3aWR0aD0iMTAwJSI+IDxiPkphdmEgUGxhdGZvcm0gTG9nZ2luZyBTdXBwb3J0IGZvciBFY2xpcHNlPC9iPiA8YSBocmVmPSJodHRwOi8vc291cmNlZm9yZ2UubmV0L3Byb2plY3RzL2pwbHMiIHRhcmdldD0iX2JsYW5rIj5odHRwOi8vc291cmNlZm9yZ2UubmV0L3Byb2plY3RzL2pwbHM8L2E+IAogICAgICAtIE1pa2UgV2VybmVyIDxicj4KICAgICAgVGhpcyBwcm9qZWN0IGludGVncmF0ZXMgdGhlIEphdmEgbG9nZ2luZyBBUEkgKGphdmEudXRpbC5sb2dnaW5nKSBpbnRvIEVjbGlwc2UuIAogICAgICBDdXJyZW50bHkgaXQgcHJvdmlkZXMgdHdvIGxvZ2dpbmcgaGFuZGxlcnMuIE9uZSB3cml0ZXMgbG9nIHJlY29yZHMgdG8gYW4gCiAgICAgIEVjbGlwc2UgQ29uc29sZSBWaWV3IHdoZXJlIGVhY2ggbG9nZ2luZyBsZXZlbCBjYW4gYmUgYXNzaWduZWQgYSBwYXJ0aWN1bGFyIAogICAgICBjb2xvci4gVGhlIHNlY29uZCBsb2dnaW5nIGhhbmRsZXIgcmVkaXJlY3RzIHRoZSBsb2cgcmVjb3JkcyB0byB0aGUgRWNsaXBzZSAKICAgICAgbG9nZ2luZyBmYWNpbGl0eS4gVGhpcyBpcyB1c2VmdWwgd2hlbiBsb2cgcmVjb3JkcyBzaG91bGQgYmUgc2hvd24gaW4gY29ycmVsYXRpb24gCiAgICAgIHdpdGggdGhvc2UgbG9nZ2VkIGRpcmVjdGx5IHdpdGggdGhlIGVjbGlwc2UgbG9nZ2luZyBzZXJ2aWNlIChlLmcuIGJ5IG90aGVyIAogICAgICBlY2xpcHNlIHBsdWctaW5zKS4gPHAgYWxpZ249InJpZ2h0Ij48c21hbGw+PGEgaHJlZj0iI3RvcCI+Z28gdG8gdG9wPC9hPjwvc21hbGw+PC9wPjwvdGQ+CiAgPC90cj4KICAgPHRyPgogICAgPHRkIGFsaWduPVJJR0hUIHZhbGlnbj1UT1Agd2lkdGg9IjMlIj48aW1nIHNyYz0iLi4vaW1hZ2VzL0FkYXJyb3cuZ2lmIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCI+PC90ZD4gCiAgICA8dGQgd2lkdGg9IjEwMCUiPiA8Yj5KYXZhZG9jIGJ1aWxkZXI8L2I+IC0gPGEgaHJlZj0iaHR0cDovL2phdmFkb2NidWlsZGVyLnNvdXJjZWZvcmdlLm5ldCIgdGFyZ2V0PSJfYmxhbmsiPmh0dHA6Ly9qYXZhZG9jYnVpbGRlci5zb3VyY2Vmb3JnZS5uZXQ8L2E+IAogICAgICAtIE1pZ3VlbCBHcmlmZmEgPGJyPgogICAgICBUaGUgamF2YWRvYyBidWlsZGVyIGlzIGFuIGVjbGlwc2UgcGx1Zy1pbiB0aGF0IGludGVncmF0ZXMgeGRvY2xldC1zdHlsZSBmdW5jdGlvbmFsbGl0eSAKICAgICAgc2VhbWxlc3NseSBpbnRvIHRoZSBlY2xpcHNlIHBsYXRmb3JtLiBBcyBhIG5hdGl2ZSBlY2xpcHNlIHRvb2wsIGphdmFkb2MgCiAgICAgIGJ1aWxkZXIgaXMgbXVjaCBmYXN0ZXIgdGhhbiB1c2luZyBleHRlcm5hbCB0b29scyBzdWNoIGFzIFhEb2NsZXQrYW50L21hdmVuLiAKICAgICAgVGhlIHBsdWctaW4gdXNlcyBRRG94IGZvciBwYXJzaW5nIGphdmEgZmlsZXMsIHRoZSBYRG9jbGV0MiBqYXZhZG9jIHBhcnNlciwgCiAgICAgIGFuZCBqYWthcnRhIHZlbG9jaXR5IGFzIHRoZSB0ZW1wbGF0ZSBlbmdpbmUuIDxwIGFsaWduPSJyaWdodCI+PHNtYWxsPjxhIGhyZWY9IiN0b3AiPmdvIHRvIHRvcDwvYT48L3NtYWxsPjwvcD48L3RkPgogIDwvdHI+CiAgIDx0cj4KICAgIDx0ZCBhbGlnbj1SSUdIVCB2YWxpZ249VE9QIHdpZHRoPSIzJSI+PGltZyBzcmM9Ii4uL2ltYWdlcy9BZGFycm93LmdpZiIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiPjwvdGQ+IAogICAgPHRkIHdpZHRoPSIxMDAlIj4gPGI+SmF2YWRvYyBvbmxpbmU8L2I+IC0gPGEgaHJlZj0iaHR0cDovL3d3dy5qYXZhZG9jb25saW5lLmNvbS9lY2xpcHNlLmh0bSIgdGFyZ2V0PSJfYmxhbmsiPmh0dHA6Ly93d3cuamF2YWRvY29ubGluZS5jb20vZWNsaXBzZS5odG08L2E+IAogICAgICAtIE1hc28gR2F0byA8YnI+CiAgICAgIFRoZSBKYXZhZG9jIG9ubGluZSBwbHVnLWluIGZvciBFY2xpcHNlIGFsbG93cyB5b3UgdG8gc2VhcmNoIGZvciBqYXZhZG9jIGRvY3VtZW50cyAKICAgICAgb3ZlciB0aGUgSW50ZXJuZXQgdXNpbmcgdGhlIEphdmFkb2MgT25saW5lIHdlYi4gKDxhIGhyZWY9Imh0dHA6Ly93d3cuamF2YWRvY29ubGluZS5jb20iIHRhcmdldD0iX2JsYW5rIj5odHRwOi8vd3d3LmphdmFkb2NvbmxpbmUuY29tPC9hPikgCiAgICAgIEJ5IGNsaWNraW5nIGluIGEgamF2YSBlbGVtZW50IGluIHRoZSBFY2xpcHNlIGVudmlyb25tZW50LCB0aGUgcGx1Zy1pbiB3aWxsIAogICAgICBsYXVuY2ggYSBicm93c2VyIGFuZCBsb2FkIHRoZSBKYXZhZG9jIE9ubGluZSB3ZWIgdG8gc2VhcmNoIGZvciB0aGUgamF2YWRvYyAKICAgICAgb2YgdGhpcyBqYXZhIGVsZW1lbnQuIEphdmFkb2MgT25saW5lIGlzIGJhc2VkIG9uIHRoZSBHb29nbGUgV2ViIEFQSXMgKGJldGEpLiAKICAgICAgSW4gUmVsZWFzZSAwLjkuMSwgeW91IGNhbiBzZWxlY3QgamF2YSBlbGVtZW50cyBpbnRvIGphdmEgZWRpdG9yICh0ZXh0IHNlbGVjdCkgCiAgICAgIGFuZCBqYXZhIGVsZW1lbnRzIGZyb20gdGhlIEphdmEgUGVyc3BlY3RpdmUgYW5kIHRoZSBKYXZhIEJyb3dzaW5nIFBlcnNwZWN0aXZlLjxwIGFsaWduPSJyaWdodCI+PHNtYWxsPjxhIGhyZWY9IiN0b3AiPmdvIHRvIHRvcDwvYT48L3NtYWxsPjwvcD48L3RkPgogIDwvdHI+CiAgPHRyPiAKICAgIDx0ZCBhbGlnbj1SSUdIVCB2YWxpZ249VE9QIHdpZHRoPSIzJSI+PGltZyBzcmM9Ii4uL2ltYWdlcy9BZGFycm93LmdpZiIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiPjwvdGQ+CiAgICA8dGQgd2lkdGg9Ijk3JSI+PGI+SkJvc3M8L2I+IC0gPGEgaHJlZj0iaHR0cDovL3d3dy5qYm9zcy5vcmcvIiB0YXJnZXQ9Il9ibGFuayI+aHR0cDovL3d3dy5qYm9zcy5vcmcvPC9hPiAKICAgICAgPGJyPgogICAgICBKQm9zcy1JREUgc3VwcG9ydHMgYXBwbGljYXRpb24gZGV2ZWxvcG1lbnQgZm9yIEpCb3NzICh2aWEgWERvY2xldCBzdXBwb3J0KSAKICAgICAgYXMgd2VsbCBhcyBsaWZlIGN5Y2xlIGNvbnRyb2wgYW5kIG1vbml0b3Jpbmcgb2YgYSBKQm9zcyBzZXJ2ZXIuIEl0IGlzIGEgCiAgICAgIG5ldyBwcm9qZWN0LCBkcml2ZW4gYnkgdGhlIEpCb3NzIHRlYW0sIGFuZCBhaW1lZCB0byBncm93IGludG8gYSB3b3JsZCBjbGFzcyAKICAgICAgSURFIGZvciBKQm9zcy4gRG93bmxvYWRzOiA8YSBocmVmPSJodHRwOi8vd3d3Lmpib3NzLm9yZy9kZXZlbG9wZXJzL3Byb2plY3RzL2pib3NzL2pib3NzaWRlLmpzcCIgdGFyZ2V0PSJfYmxhbmsiPmh0dHA6Ly93d3cuamJvc3Mub3JnL2RldmVsb3BlcnMvcHJvamVjdHMvamJvc3MvamJvc3NpZGUuanNwPC9hPjxwIGFsaWduPSJyaWdodCI+PHNtYWxsPjxhIGhyZWY9IiN0b3AiPmdvIHRvIHRvcDwvYT48L3NtYWxsPjwvcD48L3RkPgogIDwvdHI+CiAgPHRyPiAKICAgIDx0ZCBhbGlnbj1SSUdIVCB2YWxpZ249VE9QIHdpZHRoPSIzJSI+PGltZyBzcmM9Ii4uL2ltYWdlcy9BZGFycm93LmdpZiIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiPjwvdGQ+CiAgICA8dGQgd2lkdGg9Ijk3JSI+IDxiPkpGYWNlRGJjPC9iPiAtIDxhIGhyZWY9Imh0dHA6Ly9qZmFjZWRiYy5zb3VyY2Vmb3JnZS5uZXQiIHRhcmdldD0iX2JsYW5rIj5odHRwOi8vamZhY2VkYmMuc291cmNlZm9yZ2UubmV0PC9hPiAKICAgICAgYnkgQW5kcmVhIE1henpvbGluaSA8YnI+CiAgICAgIEpGYWNlRGJjIGlzIGEgSkRCQyBjbGllbnQgdGhhdCB3aWxsIGFsbG93IHlvdSB0byB2aWV3IHRoZSBzdHJ1Y3R1cmUgb2YgYSAKICAgICAgSkRCQyBjb21wbGlhbnQgZGF0YWJhc2UsIGlzc3VpbmcgU1FMIGNvbW1hbmRzLCBldGMuIEpGYWNlRGJjIGNhbiBydW4gYXMgCiAgICAgIGEgc3RhbmQtYWxvbmUgYXBwbGljYXRpb24gb3IgYXMgYW4gRWNsaXBzZSBwbHVnLWluLiBUaGUgbWFpbiBmZWF0dXJlcyBhcmU6IAogICAgICBTUUwgc3ludGF4IGhpZ2hsaWdodGluZzsgYSBkYXRhYmFzZSBzdHJ1Y3R1cmUgdmlld2VyOyBtdWx0aXBsZSBjb25uZWN0aW9ucyAKICAgICAgbWFuYWdlbWVudCBhbmQgaW50ZXJuYXRpb25hbGl6YXRpb24uICg8aT5TZWUgYWxzbyBTUUxFeHBsb3JlciBhbmQgUHJhdG9jaXR5IAogICAgICBsaXN0aW5ncyBvbiB0aGlzIHBhZ2UhPC9pPik8cCBhbGlnbj0icmlnaHQiPjxzbWFsbD48YSBocmVmPSIjdG9wIj5nbyB0byB0b3A8L2E+PC9zbWFsbD48L3A+PC90ZD4KICA8L3RyPgogIDx0cj4gCiAgICA8dGQgYWxpZ249UklHSFQgdmFsaWduPVRPUCB3aWR0aD0iMyUiPjxpbWcgc3JjPSIuLi9pbWFnZXMvQWRhcnJvdy5naWYiIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIj48L3RkPgogICAgPHRkIHdpZHRoPSI5NyUiPiA8Yj5qZmNVbml0PC9iPiAtIDxhIGhyZWY9Imh0dHA6Ly9qZmN1bml0LnNvdXJjZWZvcmdlLm5ldCIgdGFyZ2V0PSJfYmxhbmsiPmh0dHA6Ly9qZmN1bml0LnNvdXJjZWZvcmdlLm5ldDwvYT4gCiAgICAgIC0gTWF0dCBDYXN3ZWxsLCBWaWpheSBBcmF2YW11ZGhhbiwgS2V2aW4gV2lsc29uIDxicj4KICAgICAgamZjVW5pdCBpcyBhIFVJIHRlc3RpbmcgZnJhbWV3b3JrIGJ1aWx0IG9uIHRvcCBvZiA8YSBocmVmPSJodHRwOi8vd3d3Lmp1bml0Lm9yZy9pbmRleC5odG0iIHRhcmdldD0iX2JsYW5rIj5KVW5pdDwvYT4gCiAgICAgIGZvciBTd2luZyBiYXNlZCBhcHBsaWNhdGlvbnMuIFRoaXMgcGx1Zy1pbiBwcm92aWRlcyBhIGZyYW1ld29yayBzaW1pbGFyIHRvIEpVbml0IHRlc3RzLCBmb3IgCgkgIHZlcmlmeWluZyBVSSBiZWhhdmlvciBpbmNsdWRpbmcgIG9idGFpbmluZyBoYW5kbGVzIG9uIFdpbmRvd3MvRGlhbG9ncywgbG9jYXRpbmcgY29tcG9uZW50cyAKCSAgd2l0aGluIGEgY29tcG9uZW50IGhpZXJhcmNoeSB0aGF0IG9jY3VyIGluIHRoZSBjb250YWluZXJzIGZvdW5kIGFib3ZlLCBhbmQgZmlyaW5nIGV2ZW50cyBvbiB0aGUgRXZlbnRRdWV1ZS48cCBhbGlnbj0icmlnaHQiPjxzbWFsbD48YSBocmVmPSIjdG9wIj5nbyB0byB0b3A8L2E+PC9zbWFsbD48L3A+PC90ZD4KICA8L3RyPgogIDx0cj4gCiAgICA8dGQgYWxpZ249UklHSFQgdmFsaWduPVRPUCB3aWR0aD0iMyUiPjxpbWcgc3JjPSIuLi9pbWFnZXMvQWRhcnJvdy5naWYiIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIj48L3RkPgogICAgPHRkIHdpZHRoPSI5NyUiPiA8Yj5KTkRJIEJyb3dzZXI8L2I+IC08YSBocmVmPSJodHRwOi8vcmVuYXVkLndhbGR1cmEuY29tL3NvZnR3YXJlL2phdmEvY29tLndhbGR1cmEuZWNsaXBzZS5qbmRpYnJvd3Nlci8iIHRhcmdldD0iX2JsYW5rIj4gCiAgICAgIGh0dHA6Ly9yZW5hdWQud2FsZHVyYS5jb20vc29mdHdhcmUvamF2YS9jb20ud2FsZHVyYS5lY2xpcHNlLmpuZGlicm93c2VyLzwvYT4gCiAgICAgIC0gUmVuYXVkIFdhbGR1cmEgPGJyPgogICAgICBKTkRJIGlzIGFuIGFic3RyYWN0aW9uIGxheWVyIHVzZWQgdG8gYWNjZXNzIG5hbWluZyBhbmQgZGlyZWN0b3J5IHNlcnZpY2VzIAogICAgICBpbiBhIHVuaWZvcm0gbWFubmVyIHVzaW5nIHRoZSBKYXZhIGxhbmd1YWdlLiBBIEpOREkgY2xpZW50IGxpa2UgdGhpcyBwbHVnLWluIAogICAgICBpcyBhYmxlIHRvIGJyb3dzZSBhbmQgZWRpdCBuYW1pbmcgYW5kIGRpcmVjdG9yeSBzZXJ2aWNlcyBzdWNoIGFzIExEQVAgZGlyZWN0b3JpZXMsIAoJICBDb3JiYSBvciBSTUkgcmVnaXN0cmllcywgYW5kIGV2ZW4gdGhlIFdpbmRvd3MgcmVnaXN0cnksIGRpcmVjdGx5IGZyb20gRWNsaXBzZSEgVGhlIHBsdWctaW4gCgkgIGluY2x1ZGVzIG1hbnkgZGVmYXVsdHMgZm9yIHRoZSBtb3N0IGNvbW1vbiBuYW1pbmcgc2VydmljZXMuIExHUEwgbGljZW5zZS48cCBhbGlnbj0icmlnaHQiPjxzbWFsbD48YSBocmVmPSIjdG9wIj5nbyB0byB0b3A8L2E+PC9zbWFsbD48L3A+PC90ZD4KICA8L3RyPgogIDx0cj4gCiAgICA8dGQgYWxpZ249UklHSFQgdmFsaWduPVRPUCB3aWR0aD0iMyUiPjxpbWcgc3JjPSIuLi9pbWFnZXMvQWRhcnJvdy5naWYiIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIj48L3RkPgogICAgPHRkIHdpZHRoPSI5NyUiPiA8Yj48aT5KT1BFPC9pPiAtIEpPbkFTIFBsdWctaW4gZm9yIGVjbGlwc2U8L2I+IC0gPGEgaHJlZj0iaHR0cDovL2ZvcmdlLm9iamVjdHdlYi5vcmcvcHJvamVjdHMvam9wZSIgdGFyZ2V0PSJfYmxhbmsiPmh0dHA6Ly9mb3JnZS5vYmplY3R3ZWIub3JnL3Byb2plY3RzL2pvcGU8L2E+IAogICAgICAtIHRoZSBKT1BFIHRlYW0gPGJyPgogICAgICBUaGUgSk9uQVMgUGx1Zy1pbiBmb3IgZWNsaXBzZSAoSk9QRSkgcHJvdmlkZXMgYSBjb21wbGV0ZSBlbnZpcm9ubWVudCBmb3IgCiAgICAgIGRldmVsb3BpbmcgSk9uQVMgCiAgICAgIDxsaW5rIGh0dHA6Ly9qb25hcy5vYmplY3R3ZWIub3JnLz4gYXBwbGljYXRpb25zIG9uIGVjbGlwc2UuICAgSk9QRSBwcm92aWRlcyBzdGFydCwgc3RvcCwgYW5kIHJlc3RhcnQgZnVuY3Rpb25zIGZvciBKT25BUyBvbiBlY2xpcHNlLCBhcyB3ZWxsIGFzIGRlYnVnZ2luZyBhbmQgV2ViIEFQUCBkZXZlbG9wbWVudCBmZWF0dXJlcyBzdWNoIGFzIFdBUiBnZW5lcmF0aW9uIGFuZCBIb3QgZGVwbG95bWVudC4gICA8cCBhbGlnbj0icmlnaHQiPjxzbWFsbD48YSBocmVmPSIjdG9wIj5nbyB0byB0b3A8L2E+PC9zbWFsbD48L3A+PC90ZD4KICA8L3RyPgogIDx0cj4gCiAgICA8dGQgYWxpZ249UklHSFQgdmFsaWduPVRPUCB3aWR0aD0iMyUiPjxpbWcgc3JjPSIuLi9pbWFnZXMvQWRhcnJvdy5naWYiIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIj48L3RkPgogICAgPHRkIHdpZHRoPSI5NyUiPiA8Yj5KUGVkYWwgUERGVmlld2VyIGZvciBFY2xpcHNlPC9iPiAtIDxhIGhyZWY9Imh0dHA6Ly93d3cuanBlZGFsLm9yZy9lY2xpcHNlLmh0bWwiIHRhcmdldD0iX2JsYW5rIj5odHRwOi8vd3d3LmpwZWRhbC5vcmcvZWNsaXBzZS5odG1sPC9hPiAKICAgICAgLSBTaW1vbiBCYXJuZXR0IGFuZCBNYXJrIFN0ZXBoZW5zIChJRFJzb2x1dGlvbnMpPGJyPgoJCVRoZSBQREZWaWV3ZXIgcGx1Z2luIGFkZHMgc3VwcG9ydCBmb3IgZGlzcGxheWluZyBQREYgZmlsZXMgdG8gRWNsaXBzZS4gUERGIGZpbGVzIGJlY29tZSBhIHN1cHBvcnRlZCBmaWxldHlwZSwgd2l0aCBhIFZpZXcgYW5kIGEgUGVyc3BlY3RpdmUuIERvdWJsZS1jbGlja2luZyBvbiBhIFBERiBmaWxlIG9yIGNob29zaW5nIG9wZW4gZGlzcGxheXMgdGhlIFBERiBpbiBpdHMgb3duIFZpZXcsIHdpdGggYW55IG91dGxpbmUgYWxzbyBkaXNwbGF5ZWQgYXMgYSBjbGlja2FibGUgdHJlZS4gQSBuYXZpZ2F0aW9uIHRvb2xiYXIgaXMgYWxzbyBwcm92aWRlZCBvZmZlcmluZyBwYWdlIG5hdmlnYXRpb24gYW5kIHNjYWxpbmcgb3B0aW9ucy4gVGhlIEVjbGlwc2UgcGx1Z2luIHVzZXMgdGhlIEdQTCB2ZXJzaW9uIG9mIHRoZSBKUGVkYWwgUERGIGxpYnJhcnksIHdoaWNoIG9mZmVycyBhIGNvbXByZWhlbnNpdmUgUERGIHZpZXdlciBpbmNsdWRpbmcgc3VwcG9ydCBmb3IgZW1iZWRkZWQgZm9udHMuCiAgICAgICAgPHAgYWxpZ249InJpZ2h0Ij48c21hbGw+PGEgaHJlZj0iI3RvcCI+Z28gdG8gdG9wPC9hPjwvc21hbGw+PC9wPjwvdGQ+CiAgPC90cj4KICA8dHI+IAogICAgPHRkIGFsaWduPVJJR0hUIHZhbGlnbj1UT1Agd2lkdGg9IjMlIj48aW1nIHNyYz0iLi4vaW1hZ2VzL0FkYXJyb3cuZ2lmIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCI+PC90ZD4KICAgIDx0ZCB3aWR0aD0iOTclIj4gPGI+SlhwcmVzczwvYj4gLSA8YSBocmVmPSJodHRwOi8vanhwcmVzcy5zb3VyY2Vmb3JnZS5uZXQiIHRhcmdldD0iX2JsYW5rIj5odHRwOi8vanhwcmVzcy5zb3VyY2Vmb3JnZS5uZXQ8L2E+IAogICAgICAtIFJhZ2h1cmFtYW4gUmFtYXN3YW15IDxicj4KICAgICAgSlhwcmVzcyBpcyBhIHNldCBvZiBlY2xpcHNlIHBsdWctaW5zIHdoaWNoIGNhbiBiZSBvZiB1c2UgdG8gSmF2YSBhcHBsaWNhdGlvbiAKICAgICAgZGV2ZWxvcGVycyBhbmQgRWNsaXBzZSBwbHVnLWluIGRldmVsb3BlcnMuIEl0IGdlbmVyYXRlcyBKYXZhIEFQSXMgZm9yIGNyZWF0aW5nIAogICAgICBpbnRlcm5hdGlvbmFsaXplZCBtZXNzYWdlIHN0cmluZ3MsIG1lc3NhZ2Ugb2JqZWN0cywgZXhjZXB0aW9uIG9iamVjdHMgd2l0aCAKICAgICAgbG90cyBvZiBjb25maWd1cmFibGUgZGVzaWduIG9wdGlvbnMuIFRoZSBnZW5lcmF0ZWQgamF2YSBhcGkgd3JhcHMgYXJvdW5kIAogICAgICBNZXNzYWdlRm9ybWF0IGNsYXNzIHVzYWdlcyBhbmQgb3IgUmVzb3VyY2VCdW5kbGUgY2xhc3MgdXNhZ2VzIGFuZCBzaW1wbGlmaWVzIAogICAgICBjb25jZXJucy4gSXQgc2ltcGxpZmllcyBwYXJhbWV0ZXJpemVkIG1lc3NhZ2VzIHdpdGggc3VwcG9ydCBmb3IgcGx1cmFsaXNhdGlvbi4gCiAgICAgIEl0IHByb3Bvc2VzIGFuZCBwcm92aWRlcyBhIGV4cGVyaW1lbnRhbCBzdXBwb3J0IGZvciBrZXlib2FyZCBtYXBwaW5nIGZvciAKICAgICAgYW55IGxhbmd1YWdlLiBPdXQgb2YgdGhlIGJveCBsYW5ndWFnZSB3aXRoIHN1cHBvcnQgZm9yIGtleWJvYXJkIG1hcHBpbmcgCiAgICAgIGlzIFRhbWlsLSB0YS4gTmV3IGFkZGl0aW9uYWwga2V5Ym9hcmQgbWFwcGluZ3MgZm9yIG90aGVyIGxhbmd1YWdlcyBjYW4gYmUgCiAgICAgIHNpbXBseSBpbXBvcnRlZCBpbnRvIHRoZSBzb2Z0d2FyZS4gPHAgYWxpZ249InJpZ2h0Ij48c21hbGw+PGEgaHJlZj0iI3RvcCI+Z28gdG8gdG9wPC9hPjwvc21hbGw+PC9wPjwvdGQ+CiAgPC90cj4KICA8dHI+IAogICAgPHRkIGFsaWduPVJJR0hUIHZhbGlnbj1UT1Agd2lkdGg9IjMlIj48aW1nIHNyYz0iLi4vaW1hZ2VzL0FkYXJyb3cuZ2lmIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCI+PC90ZD4KICAgIDx0ZCB3aWR0aD0iOTclIj48Yj5rbG9tcC5vcmc8L2I+IC0gPGEgaHJlZj0iaHR0cDovL3d3dy5rbG9tcC5vcmcvZWNsaXBzZS8iIHRhcmdldD0iX2JsYW5rIj4gCiAgICAgIGh0dHA6Ly93d3cua2xvbXAub3JnL2VjbGlwc2UvPC9hPiAtIFRoZSBLbG9tcCBUZWFtICh1cGRhdGUgc2l0ZTogaHR0cDovL2tsb21wLm9yZy9lY2xpcHNlL3VwZGF0ZXMpIAogICAgICA8YnI+CiAgICAgIDxicj4KICAgICAgPGI+Zm9ybWF0amF2YTwvYj4gLSBUaGlzIHBsdWctaW4gYWxsb3dzIHlvdSB0byBzZWxlY3Qgb25lIG9yIG1vcmUgcGFja2FnZXMgCiAgICAgIGluIHRoZSBKYXZhIFBhY2thZ2UgRXhwbG9yZXIgYW5kIGZvcm1hdCBhbGwgLmphdmEgZmlsZXMgaW4gdGhvc2UgcGFja2FnZXMuIAogICAgICBZb3UgY2FuIGFsc28gc2VsZWN0IGp1c3QgdGhlIHNwZWNpZmljIEphdmEgc291cmNlIGZpbGVzIHlvdSB3aXNoIHRvIGZvcm1hdCAKICAgICAgb3IgZXZlbiB0aGUgd2hvbGUgc291cmNlIGRpcmVjdG9yeS4gPGJyPgogICAgICA8Yj5GaWxlIFNpemUgRGVjb3JhdG9yPC9iPiAtIEltcGxlbWVudHMgYSBuZXcgbGFiZWwgZGVjb3JhdG9yIHRoYXQgc2hvd3MgCiAgICAgIHRoZSBzaXplIG9mIGVhY2ggZmlsZSBpbiB0aGUgTmF2aWdhdG9yIGFuZCBQYWNrYWdlIHZpZXdzLiBUaGUgZGVjb3JhdG9yIAogICAgICBjYW4gYmUgdHVybmVkIG9uIGFuZCBvZmYgaW4gdGhlIHByZWZlcmVuY2VzIG1lbnUsIGFuZCBjYW4gYmUgY29uZmlndXJlZCAKICAgICAgdG8gdXNlIGtpbG8tdW5pdHMgb2YgMTAyNCBvciAxMDAwIGJ5dGVzLiBUaGUgbmFtZXMgb2YgdGhlIHVuaXRzIChzaW5nbGUsIAogICAgICBraWxvLCBtZWdhLCBnaWdhKSBhbmQgdGhlIGZvcm1hdCBvZiB0aGUgd2hvbGUgc3RyaW5nIGNhbiBiZSBjb25maWd1cmVkLCAKICAgICAgYW5kIHdoZXRoZXIgdGhlIHNpemUgYXBwZWFycyBpbiBmcm9udCBvZiBvciBhZnRlciB0aGUgZmlsZW5hbWUuIDxicj4KICAgICAgPGI+U2Z0cCBzZWN1cmUgZmlsZSBzeW5jaHJvbml6YXRpb248L2I+IC0gUHJvdmlkZXMgZmlsZSBhbmQgZGlyZWN0b3J5IHN5bmNocm9uaXphdGlvbiAKICAgICAgYmV0d2VlbiB0aGUgRWNsaXBzZSB3b3Jrc3BhY2UgYW5kIGEgcmVtb3RlIGxvY2F0aW9uIHVzaW5nIHRoZSBTU0ggU2Z0cCBwcm90b2NvbC4gCiAgICAgIFRoZSBTZnRwIHByb3RvY29sIGlzIG5vdCB3ZWxsIGtub3duLCBidXQgaXQgaXMgd2lkZWx5IGltcGxlbWVudGVkIGluIGJvdGggCiAgICAgIHNzaCBzZXJ2ZXJzIGFuZCBjbGllbnRzLiBPcGVuU1NIIHByb3ZpZGVzIHRoaXMgcHJvdG9jb2wsIGFzIHdlbGwgbWFueSBvdGhlcnMuPHAgYWxpZ249InJpZ2h0Ij48c21hbGw+PGEgaHJlZj0iI3RvcCI+Z28gdG8gdG9wPC9hPjwvc21hbGw+PC9wPjwvdGQ+CiAgPC90cj4KICA8dHI+IAogICAgPHRkIGFsaWduPVJJR0hUIHZhbGlnbj1UT1Agd2lkdGg9IjMlIj48aW1nIHNyYz0iLi4vaW1hZ2VzL0FkYXJyb3cuZ2lmIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCI+PC90ZD4KICAgIDx0ZCB3aWR0aD0iOTclIj48Yj5sZUpPUyBwbHVnLWluIGZvciBFY2xpcHNlPC9iPiAtIDxhIGhyZWY9Imh0dHA6Ly93d3cuaW5mby51Y2wuYWMuYmUvcGVvcGxlL2NocC9wcm9qZWN0cy9qYXZhcmN4L2VjbGlwc2UvIiB0YXJnZXQ9Il9ibGFuayI+aHR0cDovL3d3dy5pbmZvLnVjbC5hYy5iZS9wZW9wbGUvY2hwL3Byb2plY3RzL2phdmFyY3gvZWNsaXBzZS88L2E+IAogICAgICAtIENocmlzdG9waGUgUG9uc2FyZDxicj4KICAgICAgVGhpcyBlY2xpcHNlIHBsdWctaW4gYWxsb3dzIHlvdSB0byBkZXZlbG9wIGphdmEgY29kZSBmb3IgdGhlIExFR08gUkNYIGJyaWNrIAogICAgICB1c2luZyB0aGUgbGVKT1MgSlZNIChwbGVhc2Ugc2VlIDxhIGhyZWY9Imh0dHA6Ly93d3cubGVqb3Mub3JnIiB0YXJnZXQ9Il9ibGFuayI+aHR0cDovL3d3dy5sZWpvcy5vcmc8L2E+KS4gCiAgICAgIEl0IG9mZmVycyBlYXN5IGNvbmZpZ3VyYXRpb24gdGhyb3VnaCBhIHByb2plY3Qgd2l6YXJkIGFuZCBhIHByZWZlcmVuY2UgcGFnZSwgCiAgICAgIHVzZXMgZWNsaXBzZSBjb2RlIGJ1aWxkaW5nIGFuZCBhZGRzIFJDWCBzcGVjaWZpYyBvcGVyYXRpb25zIGJvdGggZm9yIGZpcm13YXJlIAogICAgICBhbmQgYnl0ZS1jb2RlIGRvd25sb2FkLiA8cCBhbGlnbj0icmlnaHQiPjxzbWFsbD48YSBocmVmPSIjdG9wIj5nbyB0byB0b3A8L2E+PC9zbWFsbD48L3A+PC90ZD4KICA8L3RyPgogIDx0cj4gCiAgICA8dGQgYWxpZ249UklHSFQgdmFsaWduPVRPUCB3aWR0aD0iMyUiPjxpbWcgc3JjPSIuLi9pbWFnZXMvQWRhcnJvdy5naWYiIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIj48L3RkPgogICAgPHRkIHdpZHRoPSI5NyUiPjxiPktub3BmbGVyZmlzaCBlY2xpcHNlIHBsdWctaW48L2I+IC0gPGEgaHJlZj0iaHR0cDovL3d3dy5rbm9wZmxlcmZpc2gub3JnLyIgdGFyZ2V0PSJfYmxhbmsiPmh0dHA6Ly93d3cua25vcGZsZXJmaXNoLm9yZy88L2E+IAogICAgICAtIFRoZSBLbm9wZmxlcmZpc2ggVGVhbSA8YnI+CiAgICAgIFRoZSBLbm9wZmxlcmZpc2ggZWNsaXBzZSBwbHVnLWluIHdpbGwgbWFrZSBPU0dpIGJ1bmRsZSBkZXZlbG9wbWVudCBlYXNpZXIgCiAgICAgIGFuZCBzbW9vdGhlciB0aGFuIGV2ZXIuIFRoZSBwbHVnLWluY2x1ZGVzIHdpemFyZHMgdGhhdCB3aWxsIGd1aWRlIGFuZCBhc3Npc3QgCiAgICAgIHRoZSBkZXZlbG9wZXIgYWxsIHRoZSB3YXkgZnJvbSBjcmVhdGluZyBPU0dpIGJ1bmRsZSBjb2RlIHNrZWxldG9ucyB0byBwYWNrYWdpbmcgCiAgICAgIHRoZSByZXN1bHRpbmcgYnVuZGxlIEpBUiBmaWxlLiA8cCBhbGlnbj0icmlnaHQiPjxzbWFsbD48YSBocmVmPSIjdG9wIj5nbyB0byB0b3A8L2E+PC9zbWFsbD48L3A+PC90ZD4KICA8L3RyPgogIDx0cj4gCiAgICA8dGQgYWxpZ249UklHSFQgdmFsaWduPVRPUCB3aWR0aD0iMyUiPjxpbWcgc3JjPSIuLi9pbWFnZXMvQWRhcnJvdy5naWYiIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIj48L3RkPgogICAgPHRkIHdpZHRoPSI5NyUiPjxiPkx1bmFyLWVjbGlwc2U8L2I+IC0gPGEgaHJlZj0iaHR0cDovL3NvdXJjZWZvcmdlLm5ldC9wcm9qZWN0cy9sdW5hci1lY2xpcHNlLyIgdGFyZ2V0PSJfYmxhbmsiPmh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcHJvamVjdHMvbHVuYXItZWNsaXBzZS88L2E+IAogICAgICAtIEdlbmFkeSBCZXJ5b3praW4gLSA8YSBocmVmPSJodHRwOi8vd3d3LmNzLnRlY2huaW9uLmFjLmlsLyU3RWdlbmFkeWIvIiB0YXJnZXQ9Il9ibGFuayI+aHR0cDovL3d3dy5jcy50ZWNobmlvbi5hYy5pbC9+Z2VuYWR5Yi88L2E+IAogICAgICA8YnI+PGJyPgogICAgICA8Yj5FZGl0b3IgRW5oYW5jZW1lbnRzIHBsdWctaW4gLSA8L2I+VGhlIHBsdWctaW4gcHJvdmlkZXMgYSBjb250ZXh0IGluc2Vuc2l0aXZlIAogICAgICBjb21wbGV0aW9uIHdoaWNoIGlzIGJhc2VkIG9uIHRoZSBFbWFjcyAiZHluYW1pYyBhYmJyZXYgZXhwYW5zaW9uIi4gVGhlIGNvbXBsZXRpb24gCiAgICAgIGlzIGFjdGl2YXRlZCBieSB0aGUgQWx0Ky8ga2V5LiBJdCBhbHNvIHByb3ZpZGVzIG9wZXJhdGlvbnMgb24gYSByZWN0YW5ndWxhciAKICAgICAgc2VsZWN0aW9uIGFuZCBvdGhlciBlbmhhbmNlbWVudHMgYnkgU3RlZmFuIEhlaW1hbm4uIDxhIGhyZWY9Imh0dHA6Ly93d3cuc3RlZmFuaGVpbWFubi5uZXQiIHRhcmdldD0iX2JsYW5rIj5odHRwOi8vd3d3LnN0ZWZhbmhlaW1hbm4ubmV0PC9hPjxicj4KICAgIDxwIGFsaWduPSJyaWdodCI+PHNtYWxsPjxhIGhyZWY9IiN0b3AiPmdvIHRvIHRvcDwvYT48L3NtYWxsPjwvcD48L3RkPgogIDwvdHI+CiAgPHRyPiAKICAgIDx0ZCBhbGlnbj1SSUdIVCB2YWxpZ249VE9QIHdpZHRoPSIzJSI+PGltZyBzcmM9Ii4uL2ltYWdlcy9BZGFycm93LmdpZiIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiPjwvdGQ+CiAgICA8dGQgd2lkdGg9Ijk3JSI+PGI+TURFIChNREUgU3R1ZGlvIGFuZCBNZXRhUHJvZ3JhbXMpPC9iPiAgPGEgaHJlZj0iaHR0cDovL3d3dy5tMWdsb2JhbC5jb20iIHRhcmdldD0iX2JsYW5rIj5odHRwOi8vd3d3Lm0xZ2xvYmFsLmNvbTwvYT4gCiAgICAgIC0gTTEgR2xvYmFsIDxicj4KICAgICAgTURFIGZvciBKMkVFIGlzIGEgZnVsbCBmZWF0dXJlZCwgbW9kZWwtZHJpdmVuIGRldmVsb3BtZW50IGVudmlyb25tZW50IHRoYXQgCiAgICAgIGluY2x1ZGVzIE1ERSBTdHVkaW8gKGEgVU1MIG1vZGVsZXIpIGFuZCBNZXRhUHJvZ3JhbXMuIE1ERSB0cmFuc2Zvcm1zIGEgc2ltcGxlIAogICAgICBVTUwgbW9kZWwgb2YgYW4gYXBwbGljYXRpb24gaW50byB0aGUgbWFqb3JpdHkgb2YgYSBKMkVFIGltcGxlbWVudGF0aW9uIGJ5IAogICAgICBleGVjdXRpbmcgTWV0YVByb2dyYW1zLiBNREUgdHJhbnNmb3JtcyBzaW1wbGUgVU1MIG1vZGVscyBpbnRvIEpTUHMsIEphdmEgCiAgICAgIGNsYXNzZXMsIGFuZCBTdHJ1dHMgY29uZmlndXJhdGlvbi9tYXBwaW5nIGZpbGVzIChzdHJ1dHMtY29uZmlnLnhtbCwgdmFsaWRhdG9yLnhtbCwgCiAgICAgIEFwcGxpY2F0aW9uIFJlc291cmNlLCBldGMuKSwgc2Vzc2lvbiBiZWFucywgZW50aXR5IGJlYW5zLCBtZXNzYWdlIGRyaXZlbiAKICAgICAgYmVhbnMsIGJ1c2luZXNzIG9iamVjdHMgYW5kIHZhbHVlIG9iamVjdHMsIGFudCBidWlsZCBzY3JpcHRzIGFuZCBKMkVFIGRlcGxveW1lbnQgCiAgICAgIGZpbGVzLiBNREUgaXMgYXZhaWxhYmxlIGFzIGFuIGVjbGlwc2UgcGx1Zy1pbiwgYXMgYSBXZWJTcGhlcmUgQXBwbGljYXRpb24gCiAgICAgIERldmVsb3BlciBwbHVnLWluIGFuZCBhcyBhIHN0YW5kLWFsb25lIFdpbmRvd3MgYmFzZWQgZW52aXJvbm1lbnQuIE1ERSBTdHVkaW8gCiAgICAgIGlzIGZyZWUgZm9yIGRvd25sb2FkIGFuZCBNZXRhUHJvZ3JhbXMgYXJlIG9wZW4gc291cmNlLiBUbyBkb3dubG9hZCBhbmQgcmVhZCAKICAgICAgb3VyIGJ1c2luZXNzIGNhc2UsIGdvIHRvIDxhIGhyZWY9Imh0dHA6Ly93d3cubTFnbG9iYWwub3JnIiB0YXJnZXQ9Il9ibGFuayI+aHR0cDovL3d3dy5tMWdsb2JhbC5vcmc8L2E+LiAKICAgIDxwIGFsaWduPSJyaWdodCI+PHNtYWxsPjxhIGhyZWY9IiN0b3AiPmdvIHRvIHRvcDwvYT48L3NtYWxsPjwvcD48L3RkPgogIDwvdHI+CiAgPHRyPgogICA8dGQgYWxpZ249UklHSFQgdmFsaWduPVRPUCB3aWR0aD0iMyUiPjxpbWcgc3JjPSIuLi9pbWFnZXMvQWRhcnJvdy5naWYiIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIj48L3RkPiAKICAgIDx0ZCB3aWR0aD0iMTAwJSI+PGI+TWV2ZW5pZGU8L2I+IC0gPGEgaHJlZj0iaHR0cDovL21ldmVuaWRlLmNvZGVoYXVzLm9yZy8iIHRhcmdldD0iX2JsYW5rIj5odHRwOi8vbWV2ZW5pZGUuY29kZWhhdXMub3JnLzwvYT4gCiAgICAgIC0gdGhlIE1ldmVuaWRlIFRlYW0gPGJyPgogICAgICA8YnI+CiAgICAgIDxiPk1ldmVuaWRlIEVjbGlwc2U8L2I+IC0gPGEgaHJlZj0iaHR0cDovL21ldmVuaWRlLmNvZGVoYXVzLm9yZy9tZXZlbmlkZS11aS1lY2xpcHNlL2ZlYXR1cmVzLmh0bWwiIHRhcmdldD0iX2JsYW5rIj5odHRwOi8vbWV2ZW5pZGUuY29kZWhhdXMub3JnL21ldmVuaWRlLXVpLWVjbGlwc2UvZmVhdHVyZXMuaHRtbDwvYT4gCiAgICAgIC0gVGhlIE1ldmVuaWRlIHBsdWctaW4gaW50ZWdyYXRlcyBNYXZlbiBzbW9vdGhseSBpbnRvIEVjbGlwc2UgYW5kIHRodXMgZmFjaWxpdGF0ZXMgCiAgICAgIHRoZSB1c2Ugb2YgTWF2ZW4gLSBmcm9tIHN0YXJ0aW5nIGEgcHJvamVjdCBmcm9tIHNjcmF0Y2ggb3IgdG8gY29udmVydGluZyAKICAgICAgYW4gZXhpc3RpbmcgY29kZWJhc2UuIEFtb25nIG1hbnkgb3RoZXIgZmVhdHVyZXMsIHRoaXMgcGx1Zy1pbiBwcm92aWRlcyBhIAogICAgICBNdWx0aXBhcnQgUG9tIGVkaXRvciBhcyB3ZWxsIGFzIEplbGx5IGVkaXRpbmcgY2FwYWJpbGl0aWVzIGFuZCBhbGxvd3MgdGhlIAogICAgICBzeW5jaHJvbml6YXRpb24gb2YgcHJvamVjdHMgd2l0aCB0aGUgdGhlaXIgYXNzb2NpYXRlZCBQT01zIGluIGEgYmlkaXJlY3Rpb25hbCAKICAgICAgYW5kIGNvbmN1cnJlbnQgd2F5LiBBIE1hdmVuIFJ1bm5lciBpcyBhbHNvIGludGVncmF0ZWQgaW50byB0aGUgZXh0ZXJuYWwgCiAgICAgIHRvb2xzLjxicj4KICAgICAgPGJyPgogICAgICA8Yj5NRVAgUGx1Zy1pbjwvYj4gLSA8YSBocmVmPSJodHRwOi8vbWV2ZW5pZGUuY29kZWhhdXMub3JnL21hdmVuLWVjbGlwc2UtcGx1Z2luLXBsdWdpbi8iIHRhcmdldD0iX2JsYW5rIj5odHRwOi8vbWV2ZW5pZGUuY29kZWhhdXMub3JnL21hdmVuLWVjbGlwc2UtcGx1Z2luLXBsdWdpbi88L2E+IAogICAgICAtIFRoaXMgcGx1Zy1pbiBhaW1zIHRvIHNpbXBsaWZ5IHRoZSBtYW5hZ2VtZW50IG9mIEVjbGlwc2UgcGx1Zy1pbiBhcnRlZmFjdHMgCiAgICAgIGludGVyZGVwZW5kZW5jeS4gSXQgYWxsb3dzIHRyYWNraW5nIHRoZSByZXF1aXJlZCBwbHVnLWluIHZlcnNpb24sIGFuZCBhbHNvIAogICAgICBhdXRvbWF0aWNhbGx5IGdlbmVyYXRpbmcgZmVhdHVyZSBhbmQgc2l0ZSB1cGRhdGUgZGlzdHJpYnV0aW9uLiBGbGV4aWJpbGl0eSAKICAgICAgaXMgYXR0YWluZWQgdGhyb3VnaCB0aGUgZGVjbGFyYXRpb24gb2YgYSB1c2VyLWRlZmluZWQgQW50IGZpbHRlciB0aGF0IGFsbG93cyAKICAgICAgdGhlIHVzZSBvZiBjdXN0b20gcmVwbGFjZW1lbnQgc3RyaW5ncyBpbiB0aGUgdGVtcGxhdGVzLiA8cCBhbGlnbj0icmlnaHQiPjxzbWFsbD48YSBocmVmPSIjdG9wIj5nbyB0byB0b3A8L2E+PC9zbWFsbD48L3A+PC90ZD4KICA8L3RyPgogIDx0cj4KICAgPHRkIGFsaWduPVJJR0hUIHZhbGlnbj1UT1Agd2lkdGg9IjMlIj48aW1nIHNyYz0iLi4vaW1hZ2VzL0FkYXJyb3cuZ2lmIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCI+PC90ZD4gCiAgICA8dGQgd2lkdGg9IjEwMCUiPjxiPk1pbGxzdG9uZTwvYj4gLSA8YSBocmVmPSJodHRwOi8vd3d3Lm1pbGxzdG9uZS5vcmcvZWNsaXBzZS8iIHRhcmdldD0iX2JsYW5rIj5odHRwOi8vd3d3Lm1pbGxzdG9uZS5vcmcvZWNsaXBzZS88L2E+IAogICAgICAtIElUIE1pbGwgTHRkLiA8YnIgLz4KCU1pbGxzdG9uZSBFY2xpcHNlIHBsdWdpbiBpbnRlZ3JhdGVzIE1pbGxzdG9uZSBXZWIgVUkgTGlicmFyeSBpbnRvIEVjbGlwc2UuICBVc2luZyB0aGlzIHBsdWdpbiBkZXZlbG9wZXJzIGNhbiBlYXNpbHkgYnVpbGQgd2ViIGFwcGxpY2F0aW9ucyB1c2luZyBNaWxsc3RvbmUgVUkgTGlicmFyeSBhbmQgcnVuIHRoZW0gaW5zaWRlIHRoZSBFY2xpcHNlIElERS48YnIgLz48YnIgLz4KCU1haW4gZmVhdHVyZXMgb2YgdGhlIE1pbGxzdG9uZSBQbHVnaW4gOgoJPHVsPgoJCTxsaT5OZXcgTWlsbHN0b25lIHByb2plY3QgY3JlYXRpb248L2xpPgoJCTxsaT5MYXVuY2ggY29uZmlndXJhdGlvbnM8L2xpPgoJCTxsaT5BcHBsaWNhdGlvbiBsaXZlIHZpZXc8L2xpPgoJCTxsaT5KRFQgZGVidWcgaW50ZWdyYXRpb248L2xpPgoJCTxsaT5TZXJ2bGV0IFdBUiBleHBvcnQ8L2xpPgoJPHVsPgkKPHAgYWxpZ249InJpZ2h0Ij48c21hbGw+PGEgaHJlZj0iI3RvcCI+Z28gdG8gdG9wPC9hPjwvc21hbGw+PC9wPjwvdGQ+CiAgPC90cj4KCiAgPHRyPgogICA8dGQgYWxpZ249UklHSFQgdmFsaWduPVRPUCB3aWR0aD0iMyUiPjxpbWcgc3JjPSIuLi9pbWFnZXMvQWRhcnJvdy5naWYiIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIj48L3RkPiAKICAgIDx0ZCB3aWR0aD0iMTAwJSI+PGI+TW9ja0NyZWF0b3I8L2I+IC08YSBocmVmPSJodHRwOi8vd3d3LmFic3RyYWt0LmRlL21vY2tjcmVhdG9yLmh0bWwiIHRhcmdldD0iX2JsYW5rIj5odHRwOi8vd3d3LmFic3RyYWt0LmRlL21vY2tjcmVhdG9yLmh0bWw8L2E+IAogICAgICAtIENocmlzdGlhbiBKdW5naGFucyBhdCBhYnN0cmFrdC5kZSA8YnIgLz4KICAgICAgTW9ja0NyZWF0b3IgaXMgYSBwbHVnLWluIGZvciBnZW5lcmF0aW5nIE1vY2tPYmplY3RzIDxhIGhyZWY9Imh0dHA6Ly93d3cubW9ja29iamVjdHMuY29tLyIgdGFyZ2V0PSJfYmxhbmsiPmh0dHA6Ly93d3cubW9ja29iamVjdHMuY29tLzwvYT4sIAogICAgICB3aGljaCBhcmUgY29tcG9uZW50cyB1c2VkIGluIHVuaXQgdGVzdGluZyB0byBzaW11bGF0ZSBhZGRpdGlvbmFsIG9iamVjdHMgCiAgICAgIG9yIHN1YnN5c3RlbXMgaW4gdGhlIFRlc3RDYXNlLiA8cCBhbGlnbj0icmlnaHQiPjxzbWFsbD48YSBocmVmPSIjdG9wIj5nbyB0byB0b3A8L2E+PC9zbWFsbD48L3A+PC90ZD4KICA8L3RyPgogIDx0cj4KICAgPHRkIGFsaWduPVJJR0hUIHZhbGlnbj1UT1Agd2lkdGg9IjMlIj48aW1nIHNyYz0iLi4vaW1hZ2VzL0FkYXJyb3cuZ2lmIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCI+PC90ZD4gCiAgICA8dGQgd2lkdGg9IjEwMCUiPiA8Yj5Nb3Rpb24gTW9kZWxpbmc8L2I+IC0gPGEgaHJlZj0iaHR0cDovL21vdGlvbm1vZGVsaW5nLnNvdXJjZWZvcmdlLm5ldCIgdGFyZ2V0PSJfYmxhbmsiPmh0dHA6Ly9tb3Rpb25tb2RlbGluZy5zb3VyY2Vmb3JnZS5uZXQ8L2E+IAogICAgICAtIFRoZSBNb3Rpb24gTW9kZWxpbmcgVGVhbSA8YnIgLz4KICAgICAgTW90aW9uIE1vZGVsaW5nIGlzIGEgZGV2ZWxvcGVyIGNlbnRyaWMgbW9kZWxpbmcgdG9vbCBiYXNlZCBvbiB0aGUgZWNsaXBzZSAKICAgICAgcGxhdGZvcm0uIEl0JnJzcXVvO3MgZGVzaWduZWQgdG8gYmUgZWFzaWx5IGV4dGVuc2libGUgdmlhIGphdmFzY3JpcHQgdG8gaGFuZGxlIAogICAgICBuZXcgZmVhdHVyZXMgb3IgbmV3IG1ldGFtb2RlbHMuIEZvciB2MC4xIHRoZSBzdXBwb3J0IG9mIFVNTDEuNCBjbGFzcyBkaWFncmFtcyAKICAgICAgYW5kIHRoZWlyIGdlbmVyYXRpb24gd2l0aCBhbmRyb01EQSBpbnNpZGUgZWNsaXBzZSBpcyB1bmRlciBkZXZlbG9wbWVudC4gCiAgICA8cCBhbGlnbj0icmlnaHQiPjxzbWFsbD48YSBocmVmPSIjdG9wIj5nbyB0byB0b3A8L2E+PC9zbWFsbD48L3A+PC90ZD4KICA8L3RyPgogIDx0cj4gCiAgICA8dGQgYWxpZ249UklHSFQgdmFsaWduPVRPUCB3aWR0aD0iMyUiPjxpbWcgc3JjPSIuLi9pbWFnZXMvQWRhcnJvdy5naWYiIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIj48L3RkPgogICAgPHRkIHdpZHRoPSI5NyUiPjxiPk11bHRpIENsaXBib2FyZCA8L2I+LSA8YSBocmVmPSJodHRwOi8vd3d3LmJhc3RpYW4tYmVyZ2VyaG9mZi5jb20vZWNsaXBzZS9mZWF0dXJlcy93ZWIvTXVsdGlDbGlwYm9hcmQvdG9jLmh0bWwiIHRhcmdldD0iX2JsYW5rIj5odHRwOi8vd3d3LmJhc3RpYW4tYmVyZ2VyaG9mZi5jb20vZWNsaXBzZS9mZWF0dXJlcy93ZWIvTXVsdGlDbGlwYm9hcmQvdG9jLmh0bWw8L2E+IAogICAgICAtIEJhc3RpYW4gQmVyZ2VyaG9mZiA8YnIgLz4KICAgICAgTXVsdGkgQ2xpcGJvYXJkIGFkZHMgYSBjbGlwYm9hcmQgZm9yIHRleHQtIGFuZCBzb3VyY2UtY29kZSBlZGl0b3IgY29udGVudHMgCiAgICAgIHRoYXQgaG9sZHMgbXVsdGlwbGUgZW50cmllcy4gWW91IGNhbiBjb2xsZWN0IHNvbWUgc25pcHBldHMgYnkgYWRkaW5nIHRoZW0gCiAgICAgIHRvIHRoZSBNdWx0aSBDbGlwYm9hcmQgYW5kIHRoZW4gcGFzdGUgYW55IG9mIHRoZW0gdG8gd2hlcmUgeW91IG5lZWQgdGhlbS4gCiAgICAgIFRoZSBwbHVnLWluIGNhbiBiZSBjb25maWd1cmVkIHRvIHNhdmUgdGhlIGNvbnRlbnRzIG9mIHlvdXIgTXVsdGkgQ2xpcGJvYXJkIAogICAgICB0byBhIGZpbGUgd2hlbiBFY2xpcHNlIGlzIGNsb3NlZC4gQ29udGVudHMgYXJlIHRoZW4gcmVsb2FkZWQgd2hlbiBFY2xpcHNlIAogICAgICBpcyBvcGVuZWQuIEl0IGNhbiBhbHNvIGJlIGNvbmZpZ3VyZWQgdG8gZW5hYmxlIGVkaXRpbmcgdGhlIGNvbnRlbnRzIG9mIHRoZSAKICAgICAgTXVsdGkgQ2xpcGJvYXJkLiBNdWx0aUNsaXBib2FyZCBpcyBjdXJyZW50bHkgYXZhaWxhYmxlIGFzIFZlcnNpb24gMi4wLjAgCiAgICA8cCBhbGlnbj0icmlnaHQiPjxzbWFsbD48YSBocmVmPSIjdG9wIj5nbyB0byB0b3A8L2E+PC9zbWFsbD48L3A+PC90ZD4KICA8L3RyPiAKCiAgPHRyPgogICA8dGQgYWxpZ249UklHSFQgdmFsaWduPVRPUCB3aWR0aD0iMyUiPjxpbWcgc3JjPSIuLi9pbWFnZXMvQWRhcnJvdy5naWYiIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIj48L3RkPiAKICAgIDx0ZCB3aWR0aD0iMTAwJSI+PGI+bXlXTDwvYj4gLSA8YSBocmVmPSJodHRwOi8vbXl3bC5zb3VyY2Vmb3JnZS5uZXQiIHRhcmdldD0iX2JsYW5rIj5odHRwOi8vbXl3bC5zb3VyY2Vmb3JnZS5uZXQ8L2E+IAogICAgICAtIEZpbGlwcG9zIFNsYXZpayA8YnIgLz4KICAgICAgRk9SVEhuZXQmcnNxdW87cyBXZWJMb2dpYyBFY2xpcHNlIHBsdWctaW4gKHNob3J0IG5hbWUgbXlXTCBwbHVnLWluKSBpcyBhbiBFY2xpcHNlIAogICAgICBTREsgMy4wIGNvbXBhdGlibGUgcGx1Zy1pbiB3aGljaCBhbGxvd3MgQkVBJnJzcXVvO3MgV2ViTG9naWMgU2VydmVyICg2LjEsIDcuMSBhbmQgCiAgICAgIDguMSkgdG8gYmUgc3RhcnRlZCBhbmQgbWFuYWdlZCBmcm9tIHdpdGhpbiBFY2xpcHNlIGFuZCB0aHVzIGVhc2lseSBkZWJ1ZyAKICAgICAgZGVwbG95ZWQgSjJFRSBhcHBsaWNhdGlvbnMgaW4gQkVBLiA8cCBhbGlnbj0icmlnaHQiPjxzbWFsbD48YSBocmVmPSIjdG9wIj5nbyB0byB0b3A8L2E+PC9zbWFsbD48L3A+PC90ZD4KICA8L3RyPgogIDx0cj4gCiAgICA8dGQgYWxpZ249UklHSFQgdmFsaWduPVRPUCB3aWR0aD0iMyUiPjxpbWcgc3JjPSIuLi9pbWFnZXMvQWRhcnJvdy5naWYiIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIj48L3RkPgogICAgPHRkIHdpZHRoPSI5NyUiPiA8Yj5PcmJlb24gU3R1ZGlvIC0gPC9iPjxhIGhyZWY9Imh0dHA6Ly93d3cub3JiZW9uLmNvbS9zb2Z0d2FyZS9zdHVkaW8iIHRhcmdldD0iX2JsYW5rIj5odHRwOi8vd3d3Lm9yYmVvbi5jb20vc29mdHdhcmUvc3R1ZGlvPC9hPjxiPiAKICAgICAgLSA8L2I+T3JiZW9uPGI+IDxiciAvPgogICAgICA8L2I+T3JiZW9uIFN0dWRpbyBpcyBhbiBpbnRlZ3JhdGVkIGRldmVsb3BtZW50IGVudmlyb25tZW50IChJREUpIHRoYXQgaW1wcm92ZXMgCiAgICAgIHByb2R1Y3Rpdml0eSB3aGVuIGNyZWF0aW5nIFhNTC1iYXNlZCBXZWIgYXBwbGljYXRpb25zIGFuZCBlbnRlcnByaXNlIGludGVncmF0aW9uIAogICAgICBhcHBsaWNhdGlvbnMgYmFzZWQgb24gdGhlIE9yYmVvbiBJbnRlZ3JhdGlvbiBTdWl0ZSAoT0lTKS4gU3R1ZGlvIHBsdWdzIGluIAogICAgICB0byBFY2xpcHNlLCB0aGUgb3BlbiwgaW5kdXN0cnktc3VwcG9ydGVkIHBsYXRmb3JtIGZvciBkZXZlbG9wbWVudCB0b29scywgCiAgICAgIGFzIHdlbGwgYXMgSUJNJnJzcXVvO3MgV2ViU3BoZXJlIFN0dWRpbyBBcHBsaWNhdGlvbiBEZXZlbG9wZXIuIFN0dWRpbyBjYW4gYWxzbyAKICAgICAgYmUgcnVuIGluIHN0YW5kYWxvbmUgbW9kZSBmb3IgZGV2ZWxvcGVycyB0aGF0IGRvIG5vdCBhbHJlYWR5IHVzZSBFY2xpcHNlLiAKICAgIDxwIGFsaWduPSJyaWdodCI+PHNtYWxsPjxhIGhyZWY9IiN0b3AiPmdvIHRvIHRvcDwvYT48L3NtYWxsPjwvcD48L3RkPgogIDwvdHI+IAogIDx0cj4KICAgPHRkIGFsaWduPVJJR0hUIHZhbGlnbj1UT1Agd2lkdGg9IjMlIj48aW1nIHNyYz0iLi4vaW1hZ2VzL0FkYXJyb3cuZ2lmIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCI+PC90ZD4gCiAgICA8dGQgd2lkdGg9IjEwMCUiPjxiPnA0ZWNsaXBzZTwvYj4gLSA8YSBocmVmPSJodHRwOi8vd3d3LnNvdXJjZWZvcmdlLm5ldC9wcm9qZWN0cy9wNGVjbGlwc2UiIHRhcmdldD0iX2JsYW5rIj5odHRwOi8vd3d3LnNvdXJjZWZvcmdlLm5ldC9wcm9qZWN0cy9wNGVjbGlwc2U8L2E+IAogICAgICAtIERhdmlkIENvcmJpbjxiciAvPgogICAgICBUaGlzIHBsdWctaW4gaW50ZWdlcmF0ZXMgPGEgaHJlZj0iaHR0cDovL3d3dy5wZXJmb3JjZS5jb20iIHRhcmdldD0iX2JsYW5rIj5QZXJmb3JjZTwvYT4gCiAgICAgIHNvdXJjZSBjb250cm9sIHN5c3RlbSB3aXRoIEVjbGlwc2UuPHAgYWxpZ249InJpZ2h0Ij48c21hbGw+PGEgaHJlZj0iI3RvcCI+Z28gdG8gdG9wPC9hPjwvc21hbGw+PC9wPjwvdGQ+CiAgPC90cj4KICA8dHI+IAogICAgPHRkIGFsaWduPVJJR0hUIHZhbGlnbj1UT1Agd2lkdGg9IjMlIj48aW1nIHNyYz0iLi4vaW1hZ2VzL0FkYXJyb3cuZ2lmIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCI+PC90ZD4KICAgIDx0ZCB3aWR0aD0iOTclIj4gPGI+UEhQRWNsaXBzZTwvYj4gLSA8YSBocmVmPSJodHRwOi8vcGhwZWNsaXBzZS5zb3VyY2Vmb3JnZS5uZXQvIiB0YXJnZXQ9Il9ibGFuayI+aHR0cDovL3BocGVjbGlwc2Uuc291cmNlZm9yZ2UubmV0LzwvYT4gCiAgICAgIC0gUEhQRWNsaXBzZSBwcm9qZWN0IHRlYW0gPGJyIC8+CglQSFBFY2xpcHNlIGlzIGFuIG9wZW4tc291cmNlIFBIUCBJREUuICBGZWF0dXJlcyBpbmNsdWRlIGhpZ2hsaWdodGluZyBQSFAKCVN5bnRheCwgcnVubmluZyBQSFAgU2NyaXB0cyBpbiBhIEJyb3dzZXIsIFBIUCBhdXRvIGNvbXBsZXRpb24sIAoJc3RhcnQvc3RvcCBNeVNRTC9BcGFjaGUgY29uZmlndXJhdGlvbnMgYW5kIGNvbnRleHQgaGVscCBmb3IgZnVuY3Rpb24gbmFtZXMuCgk8cCBhbGlnbj0icmlnaHQiPjxzbWFsbD48YSBocmVmPSIjdG9wIj5nbyB0byB0b3A8L2E+PC9zbWFsbD48L3A+PC90ZD4KICA8L3RyPgogIDx0cj4gCiAgICA8dGQgYWxpZ249UklHSFQgdmFsaWduPVRPUCB3aWR0aD0iMyUiPjxpbWcgc3JjPSIuLi9pbWFnZXMvQWRhcnJvdy5naWYiIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIj48L3RkPgogICAgPHRkIHdpZHRoPSI5NyUiPiA8Yj5QbGFudHk8L2I+IC0gPGEgaHJlZj0iaHR0cDovL3d3dy5nZWJpdC5kZS9kb3dubG9hZC9wbGFudHkvcGxhbnR5Lmh0bWwiIHRhcmdldD0iX2JsYW5rIj5odHRwOi8vd3d3LmdlYml0LmRlL2Rvd25sb2FkL3BsYW50eS9wbGFudHkuaHRtbDwvYT4gCiAgICAgIC0gR2ViaXQgPGJyIC8+CglFZGl0b3IgZm9yIEFudCBidWlsZC54bWwgZmlsZXMuIFRoZSBtb3N0IGltcG9ydGFudCBmZWF0dXJlIGlzIHRoZSAKICAgICAgQ29kZSBBc3Npc3RhbmNlIGZvciBBbnQgdGFza3MsIHRoZWlyIGF0dHJpYnV0ZXMgYW5kIHByb3BlcnRpZXMuIEFudCZyc3F1bztzIGRvY3VtZW50YXRpb24gCiAgICAgIHRleHRzIGFyZSBkaXNwbGF5ZWQgd2l0aCB0aGUgQ29kZSBBc3Npc3RhbmNlLCB0aHVzIG1ha2luZyBwYXJhbGxlbCBicm93c2luZyAKICAgICAgb2YgdGhlIEFudCBkb2N1bWVudGF0aW9uIHVubmVjZXNzYXJ5IHdoaWxlIGVkaXRpbmcuIE90aGVyIGZlYXR1cmVzIGFyZSBTeW50YXggCiAgICAgIEhpZ2hsaWdodGluZyBhbmQgYW4gT3V0bGluZSBWaWV3LiA8cCBhbGlnbj0icmlnaHQiPjxzbWFsbD48YSBocmVmPSIjdG9wIj5nbyB0byB0b3A8L2E+PC9zbWFsbD48L3A+PC90ZD4KICA8L3RyPgogIDx0cj4gCiAgICA8dGQgYWxpZ249UklHSFQgdmFsaWduPVRPUCB3aWR0aD0iMyUiPjxpbWcgc3JjPSIuLi9pbWFnZXMvQWRhcnJvdy5naWYiIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIj48L3RkPgogICAgPHRkIHdpZHRoPSI5NyUiPiA8Yj5QTUQ8L2I+IC0gPGEgaHJlZj0iaHR0cDovL3BtZC5zb3VyY2Vmb3JnZS5uZXQiIHRhcmdldD0iX2JsYW5rIj5odHRwOi8vcG1kLnNvdXJjZWZvcmdlLm5ldDwvYT4gCiAgICAgIC0gdGhlIFBNRCBUZWFtIDxiciAvPgoJICBQTUQgaXMgYSBqYXZhIGNvZGUgc2Nhbm5lciB0aGF0IGRldGVjdHMgc2VtYW50aWMgZXJyb3JzIG9yIHN0eWxlIGZhdWx0cy4gVGhlIHBsdWctaW4gaXMgZnVsbHkgCgkgIGludGVncmF0ZWQgd2l0aCBFY2xpcHNlIChnbG9iYWwgYW5kIHBlciBwcm9qZWN0IGNvbmZpZ3VyYXRpb24sIHZpb2xhdGlvbnMgdmlldywgcHJvYmxlbSBtYXJrZXJzLCAKCSAgaW5jcmVtZW50YWwgYnVpbGRlciwgZXRjLikgIFRoZSBQTUQgcGx1Zy1pbiBwcm92aWRlcyBhIGxhcmdlIHNldCBvZiBydWxlcyBhbmQgcHJvdmlkZXMgdGhlIGFiaWxpdHkgCgkgIHRvIGNvZGUgbmV3IHJ1bGVzLiAgPHAgYWxpZ249InJpZ2h0Ij48c21hbGw+PGEgaHJlZj0iI3RvcCI+Z28gdG8gdG9wPC9hPjwvc21hbGw+PC9wPjwvdGQ+CgkgIDwvdHI+CiAgPHRyPiAKICAgIDx0ZCBhbGlnbj1SSUdIVCB2YWxpZ249VE9QIHdpZHRoPSIzJSI+PGltZyBzcmM9Ii4uL2ltYWdlcy9BZGFycm93LmdpZiIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiPjwvdGQ+CiAgICA8dGQgd2lkdGg9Ijk3JSI+IDxiPlByb2plY3RTZXQgUGx1Zy1pbjwvYj4gLSA8YSBocmVmPSJodHRwOi8vd3d3LmVqYnByb3ZpZGVyLmRlL2hvbWVwYWdlL2luZGV4Lmh0bWwiIHRhcmdldD0iX2JsYW5rIj5odHRwOi8vd3d3LmVqYnByb3ZpZGVyLmRlL2hvbWVwYWdlL2luZGV4Lmh0bWw8L2E+IAogICAgICAtIENTQyBTb2Z0d2FyZUNvbnN1bHQgdGVhbSA8YnIgLz4KCVRoZSBQcm9qZWN0IFNldCBTdXBwb3J0IHBsdWctaW4gaXMgbWVhbnQgdG8gYmUgZm9yIEVjbGlwc2Ugd2hhdCBDb25maWd1cmF0aW9uIE1hcHMgYXJlIGZvciBJQk0gCglTbWFsbHRhbGsgYW5kIFNvbHV0aW9uIE1hcHMgZm9yIFZBIEphdmE6IHRvcCBsZXZlbCBtYW5hZ2VtZW50IGxheWVyIGZvciBpbnRlcnJlbGF0ZWQgYnV0IGluZGVwZW5kZW50bHkgCgl2ZXJzaW9uZWQgbW9kdWxlcyBpbiBhIHJlcG9zaXRvcnkuIFRoZSBwbHVnLWluIHByb3ZpZGVzIHRoZSBuZWNlc3NhcnkgdG9vbHMgZm9yIGNvbmZpZ3VyYXRpb24gCgltYW5hZ2VtZW50IGZvciBsYXJnZSBwcm9qZWN0cywgc3VjaCBhcyBlZGl0b3JzIGFuZCB3aXphcmRzIGFsb25nIHdpdGggY29uZmxpY3QgZGV0ZWN0aW9uIGFuZCByZXNvbHV0aW9uLiA8cCBhbGlnbj0icmlnaHQiPjxzbWFsbD48YSBocmVmPSIjdG9wIj5nbyB0byB0b3A8L2E+PC9zbWFsbD48L3A+PC90ZD4KICA8L3RyPgogIDx0cj4KICAgPHRkIGFsaWduPVJJR0hUIHZhbGlnbj1UT1Agd2lkdGg9IjMlIj48aW1nIHNyYz0iLi4vaW1hZ2VzL0FkYXJyb3cuZ2lmIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCI+PC90ZD4gCiAgICA8dGQgd2lkdGg9IjEwMCUiPiA8Yj5Qcm9wZXJ0aWVzIEVkaXRvcjwvYj4gLSA8YSBocmVmPSJodHRwOi8vcHJvcGVkaXQuc291cmNlZm9yZ2UuanAvaW5kZXhfZW4uaHRtbCIgdGFyZ2V0PSJfYmxhbmsiPmh0dHA6Ly9wcm9wZWRpdC5zb3VyY2Vmb3JnZS5qcC9pbmRleF9lbi5odG1sPC9hPiAKICAgICAgLSBTb3UgTWl5YXpha2kgPGJyIC8+CiAgICAgIFRoaXMgZWRpdG9yIGNhbiBkaXJlY3RseSBlZGl0IHByb3BlcnR5IGZpbGVzIHdyaXR0ZW4gaW4gVW5pY29kZSByZWZlcmVuY2UgCiAgICAgIGNoYXJhY3RlcnMsIGFuZCBzYXZlcyB0aGUgdGltZSBhbmQgZWZmb3J0IG9mIGNvbnZlcnRpbmcgaW50byBVbmljb2RlIHRocm91Z2ggCiAgICAgIG5hdGl2ZTJhc2NpaS4gSW4gYWRkaXRpb24gdG8gdGhlIHVzdWFsIGZ1bmN0aW9ucyBvZiBhbiBlZGl0b3IsIHRoZSBwbHVnLWluIAogICAgICBpcyBpbnRlZ3JhdGVkIHdpdGggRWNsaXBzZSBhbmQgSkJ1aWxkZXIuIEZpbGVzIGNhbiBiZSBvcGVuZWQgaW4gdGhlIElERSAKICAgICAgYW5kIHNhdmVkIGluIFVuaWNvZGUuIDxwIGFsaWduPSJyaWdodCI+PHNtYWxsPjxhIGhyZWY9IiN0b3AiPmdvIHRvIHRvcDwvYT48L3NtYWxsPjwvcD48L3RkPgogIDwvdHI+CiAgPHRyPgogICA8dGQgYWxpZ249UklHSFQgdmFsaWduPVRPUCB3aWR0aD0iMyUiPjxpbWcgc3JjPSIuLi9pbWFnZXMvQWRhcnJvdy5naWYiIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIj48L3RkPiAKICAgIDx0ZCB3aWR0aD0iMTAwJSI+IDxiPlByb3RvY29sczwvYj4gLSA8YSBocmVmPSJodHRwOi8vd3d3LmJlcmduZXIuc2UvcHJvdG9jb2xzIiB0YXJnZXQ9Il9ibGFuayI+aHR0cDovL3d3dy5iZXJnbmVyLnNlL3Byb3RvY29sczwvYT4gCiAgICAgIC0gU3Rlbi1FcmlrIEJlcmduZXIgPGJyIC8+CglUaGUgUHJvdG9jb2xzIHBsdWctaW4gbGV0cyB5b3UgZ3JvdXAgcmVsYXRlZCBlbGVtZW50cyBvZiBhIEphdmEgY2xhc3Mgb3IgaW50ZXJmYWNlIGRlZmluaXRpb24uIAoJR3JvdXBzIGFyZSBtYW5pZmVzdGVkIGJvdGggdGhyb3VnaCBhIG5ldyB2aWV3IGZvciB0aGUgSmF2YSBCcm93c2luZyBwZXJzcGVjdGl2ZSBhbmQgaW4gdGhlIHNvdXJjZSAKCWNvZGUgYXMgaGVhZGVycy4gVGhlIHBsdWctaW4gb2ZmZXJzIGRyYWcgJiBkcm9wIGZvciBlZGl0aW5nIGdyb3VwIG1lbWJlcnNoaXAsIGFuIGFsdGVybmF0aXZlICJTb3J0IAoJTWVtYmVycyIgb3BlcmF0aW9uIHRoYXQgdGFrZXMgaGVhZGVycyBpbnRvIGFjY291bnQsIGFuZCBhIGNob2ljZSBvZiBzdGFuZGFyZCBoZWFkZXIgbmFtZXMgZm9yIHF1aWNrIAoJc2VsZWN0aW9uLiBGb3IgRWNsaXBzZSAzLjAuCiA8cCBhbGlnbj0icmlnaHQiPjxzbWFsbD48YSBocmVmPSIjdG9wIj5nbyB0byB0b3A8L2E+PC9zbWFsbD48L3A+PC90ZD4KICA8L3RyPgogIDx0cj4gCiAgICA8dGQgYWxpZ249UklHSFQgdmFsaWduPVRPUCB3aWR0aD0iMyUiPjxpbWcgc3JjPSIuLi9pbWFnZXMvQWRhcnJvdy5naWYiIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIj48L3RkPgogICAgPHRkIHdpZHRoPSI5NyUiPjxiPlB5RGV2IDwvYj4gLSA8YSBocmVmPSJodHRwOi8vcHlkZXYuc291cmNlZm9yZ2UubmV0IiB0YXJnZXQ9Il9ibGFuayI+aHR0cDovL3d3dy5weWRldi5zb3VyY2Vmb3JnZS5uZXQ8L2E+IAogICAgICAtIGNyZWF0ZWQgYnkgQWxla3MgVG90aWMsIG1haW50YWluZWQgYnkgRmFiaW8gWmFkcm96bnkgPGJyIC8+CiAgICAgIFB5RGV2IGlzIGEgUHl0aG9uIElERSBmb3IgRWNsaXBzZS4gSXQgZmVhdHVyZXMgYW4gZWRpdG9yLCBjb2RlIGNvbXBsZXRpb24sIAogICAgICBjb2RlIGFzc2lzdGFudCwgdGVtcGxhdGVzLCBjb2RlIGNvdmVyYWdlLCByZWZhY3RvcmluZywgb3V0bGluZSB2aWV3LCBkZWJ1Z2dlciwgCiAgICAgIGFuZCBvdGhlciBnb29kaWVzIChjaGVjayB0aGUgaG9tZXBhZ2UgZm9yIG1vcmUgaW5mbyEhKS4gPHAgYWxpZ249InJpZ2h0Ij48c21hbGw+PGEgaHJlZj0iI3RvcCI+Z28gdG8gdG9wPC9hPjwvc21hbGw+PC9wPjwvdGQ+CiAgPC90cj4gIAogIDx0cj4KICAgPHRkIGFsaWduPVJJR0hUIHZhbGlnbj1UT1Agd2lkdGg9IjMlIj48aW1nIHNyYz0iLi4vaW1hZ2VzL0FkYXJyb3cuZ2lmIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCI+PC90ZD4gCiAgICA8dGQgd2lkdGg9IjEwMCUiPiA8Yj5RdWFudHVtPC9iPiAtIDxhIGhyZWY9Imh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcHJvamVjdHMvcXVhbnR1bS8iIHRhcmdldD0iX2JsYW5rIj5odHRwOi8vc291cmNlZm9yZ2UubmV0L3Byb2plY3RzL3F1YW50dW0vPC9hPiAKICAgICAgLSBUb20gU2NobmVpZGVyIDxiciAvPgoJUXVhbnR1bSBpcyBhIHNpbXBsZSBkYXRhYmFzZSBhY2Nlc3MgcGx1Zy1pbiBmb3IgRWNsaXBzZS4gSXQgY3VycmVudGx5IHN1cHBvcnRzIFBvc3RncmVzLCBNeVNRTCwgCglBZGFiYXMtRCwgREIyLCBhbmQgT3JhY2xlLiBJdCBhbGxvd3MgYSB1c2VyIHRvIGVhc2lseSB2aWV3IGEgbGlzdHMgb2YgdGFibGVzLCB2aWV3cywgb3IgCglzZXF1ZW5jZXMuPHAgYWxpZ249InJpZ2h0Ij48c21hbGw+PGEgaHJlZj0iI3RvcCI+Z28gdG8gdG9wPC9hPjwvc21hbGw+PC9wPjwvdGQ+CiAgPC90cj4KICA8dHI+IAogICAgPHRkIGFsaWduPVJJR0hUIHZhbGlnbj1UT1Agd2lkdGg9IjMlIj48aW1nIHNyYz0iLi4vaW1hZ2VzL0FkYXJyb3cuZ2lmIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCI+PC90ZD4KICAgIDx0ZCB3aWR0aD0iOTclIj48Yj5RdWlja1JFeCAtIHJlZ3VsYXIgZXhwcmVzc2lvbnMgPC9iPi0gPGEgaHJlZj0iaHR0cDovL3d3dy5iYXN0aWFuLWJlcmdlcmhvZmYuY29tL2VjbGlwc2UvZmVhdHVyZXMvd2ViL1F1aWNrUkV4L3RvYy5odG1sIiB0YXJnZXQ9Il9ibGFuayI+aHR0cDovL3d3dy5iYXN0aWFuLWJlcmdlcmhvZmYuY29tL2VjbGlwc2UvZmVhdHVyZXMvd2ViL1F1aWNrUkV4L3RvYy5odG1sPC9hPiAKICAgICAgLSBCYXN0aWFuIEJlcmdlcmhvZmYgPGJyIC8+CiAgICAgIFF1aWNrUkV4IGlzIGEgcmVndWxhciBleHByZXNzaW9ucyBwbHVnLWluIHdoaWNoIGFkZHMgYSB2aWV3IGZvciByZWFsLXRpbWUgCiAgICAgIGV2YWx1YXRpb24gb2YgcmVndWxhciBleHByZXNzaW9uIG1hdGNoZXMgYWdhaW5zdCBhbnkgdGV4dC4gTWF0Y2hlcyBhbmQgZ3JvdXBzIAogICAgICBhcmUgY29sb3VyZWQgYW5kIGNhbiBiZSBuYXZpZ2F0ZWQuIFF1aWNrUkV4IHN1cHBvcnRzIEphdmEtIGFuZCBBcGFjaGUgT1JPLVJlZ3VsYXIgCiAgICAgIEV4cHJlc3Npb25zLiBJdCBvZmZlcnMgY29kZS1jb21wbGV0aW9uIGZvciB0aGUgcmVndWxhciBleHByZXNzaW9ucy4gVGhlcmUgCiAgICAgIGlzIGFsc28gYW4gZXh0ZW5kYWJsZSBSZWd1bGFyIEV4cHJlc3Npb24gTGlicmFyeS4gQSBKYXBhbmVzZSBjb2xsZWFndWUgcHJvdmlkZWQgCiAgICAgIEphcGFuZXNlIGxvY2FsaXphdGlvbiBhcyB3ZWxsLiBRdWlja1JFeCBpcyBjdXJyZW50bHkgYXZhaWxhYmxlIGFzIFZlcnNpb24gCiAgICAgIDMuMC4wIDxwIGFsaWduPSJyaWdodCI+PHNtYWxsPjxhIGhyZWY9IiN0b3AiPmdvIHRvIHRvcDwvYT48L3NtYWxsPjwvcD48L3RkPgogIDwvdHI+CiAgPHRyPiAKICAgIDx0ZCBhbGlnbj1SSUdIVCB2YWxpZ249VE9QIHdpZHRoPSIzJSI+PGltZyBzcmM9Ii4uL2ltYWdlcy9BZGFycm93LmdpZiIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiPjwvdGQ+CiAgICA8dGQgd2lkdGg9Ijk3JSI+PGI+UmVsbyAtIFJlbGF0aW9uc2hpcCBiYXNlZCBFeHBsb3JhdGlvbiA8L2I+LSA8YSBocmVmPSJodHRwOi8vcmVsby5jc2FpbC5taXQuZWR1LyIgdGFyZ2V0PSJfYmxhbmsiPmh0dHA6Ly9yZWxvLmNzYWlsLm1pdC5lZHUvPC9hPiAKICAgICAgLSBWaW5lZXQgU2luaGE8YnIgLz4KICAgICAgUmVsbyBwcm92aWRlcyBlbmQtdXNlciBmb2N1c2VkIHRvb2xzIHRvIGhlbHAgZGV2ZWxvcGVycyB1bmRlcnN0YW5kIHBhcnRzIAogICAgICBvZiBsYXJnZSBjb2RlYmFzZXMuIEl0IHRyYWNrcyBkZXZlbG9wZXJzJyBleHBsb3JhdGlvbnMgdGhyb3VnaCB0aGUgY29kZSAKICAgICAgYmFzZSBhbmQgYnVpbGRzIFVNTC1saWtlIGRpYWdyYW1zIG9uLXRoZS1mbHkuIFJlbG8gYWxsb3dzIGRldmVsb3BlcnMgdG8gCiAgICAgIHpvb20gaW4gdG8gdmlldyBhbmQgZWRpdCBjb2RlLCB1c2luZyB0ZXh0IGVkaXRvcnMgZW1iZWRkZWQgaW4gdGhlIGRpYWdyYW0uIAogICAgICBJdCBwcm92aWRlcyBmb3IgYW4gaW50ZXJhY3RpdmUgZXhwbG9yYXRpb24gb2YgdGhlIGNvZGUgd2hpbGUgYnVpbGRpbmcgYW5kIAogICAgICBhdXRvbWF0aWNhbGx5IG1hbmFnaW5nIHRoZSBjb250ZXh0IGluIGEgdmlzdWFsaXphdGlvbi4KCSAgPHAgYWxpZ249InJpZ2h0Ij48c21hbGw+PGEgaHJlZj0iI3RvcCI+Z28gdG8gdG9wPC9hPjwvc21hbGw+PC9wPjwvdGQ+CiAgPC90cj4KICA8dHI+IAogICAgPHRkIGFsaWduPVJJR0hUIHZhbGlnbj1UT1Agd2lkdGg9IjMlIj48aW1nIHNyYz0iLi4vaW1hZ2VzL0FkYXJyb3cuZ2lmIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCI+PC90ZD4KICAgIDx0ZCB3aWR0aD0iOTclIj4gPGI+UmVzaW4gZm9yIEVjbGlwc2U8L2I+IC0gPGEgaHJlZj0iaHR0cDovL21lbWJyZXMubHljb3MuZnIvcmVzaW5mb3JlY2xpcHNlLyIgdGFyZ2V0PSJfYmxhbmsiPmh0dHA6Ly9tZW1icmVzLmx5Y29zLmZyL3Jlc2luZm9yZWNsaXBzZS88L2E+IAogICAgICAtIEFybmF1ZCBQZXlyZSA8YnIgLz4KICAgICAgPGJyIC8+CiAgICAgIFRoZSBSZXNpbiBGb3IgRWNsaXBzZSBwbHVnLWluIHByb3ZpZGVzIHRvb2xzIGZvciBkZXZlbG9waW5nIHdlYiBwcm9qZWN0czo8YnIgLz4KICAgICAgPGI+UmVzaW4gbWFuYWdlbWVudDwvYj4gLSBpcyBhIGdyYXBoaWNhbCB1c2VyIGludGVyZmFjZSBmb3IgbWFuYWdpbmcgUmVzaW4gc2VydmVycyAKICAgICAgd2l0aGluIEVjbGlwc2UuIFRoZSBpbnRlcmZhY2UgYWxsb3dzIHlvdSB0byBjcmVhdGUgc2VydmVycywgYWRkIHdlYiBwcm9qZWN0cywgCiAgICAgIGVkaXQgY2xhc3NwYXRoIGFuZCBzeXN0ZW0gcHJvcGVydGllcywgbWFuYWdlIGh0dHBzLCBsYXVuY2gsIGRlYnVnIGFuZCBzdG9wIAogICAgICB0aGUgc2VydmVyLiBJdCBzaG91bGQgd29yayB3aXRoIHdlYiBwcm9qZWN0cyBjcmVhdGVkIGJ5IGFueSBvdGhlciBwbHVnLWluIAogICAgICAoc3VjaCBhcyBXU0FEIHdlYiBwcm9qZWN0cykuIDxiciAvPgogICAgIDxiPiBXZWIgcHJvamVjdHM8L2I+IC0gdGhlIHBsdWctaW4gYWxsb3dzIHlvdSB0byBjcmVhdGUgZ2VuZXJpYyB3ZWIgcHJvamVjdHMgKHlvdSAKICAgICAgZG9uJnJzcXVvO3QgbmVlZCB0byBpbnN0YWxsIFJlc2luKSBvciBwcm9qZWN0cyBvcHRpbWl6ZWQgZm9yIFJlc2luLiBXZWIgcHJvamVjdHMgCiAgICAgIGluY2x1ZGUgYXV0b2RldGVjdGlvbiBvZiBqYXIgZmlsZXMgYWRkZWQgdG8gdGhlICJXRUItSU5GL2xpYiIgZGlyZWN0b3J5LiAKICAgICAgPGJyIC8+CiAgICAgPGI+IFdhciBleHBvcnQ8L2I+IC0gaXMgYSB3aXphcmQgdG8gZXhwb3J0IHdlYiBwcm9qZWN0cyBpbnRvIHdhciBmaWxlcy4gPHAgYWxpZ249InJpZ2h0Ij48c21hbGw+PGEgaHJlZj0iI3RvcCI+Z28gdG8gdG9wPC9hPjwvc21hbGw+PC9wPjwvdGQ+CiAgPC90cj4KICA8dHI+CiAgIDx0ZCBhbGlnbj1SSUdIVCB2YWxpZ249VE9QIHdpZHRoPSIzJSI+PGltZyBzcmM9Ii4uL2ltYWdlcy9BZGFycm93LmdpZiIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiPjwvdGQ+IAogICAgPHRkIHdpZHRoPSIxMDAlIj4gPGI+UkRUOiBSdWJ5IERldmVsb3BtZW50IFRvb2w8L2I+IC0gPGEgaHJlZj0iaHR0cDovL3NvdXJjZWZvcmdlLm5ldC9wcm9qZWN0cy9ydWJ5ZWNsaXBzZSIgdGFyZ2V0PSJfYmxhbmsiPmh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcHJvamVjdHMvcnVieWVjbGlwc2U8L2E+IAogICAgICAtIEFkYW0gV2lsbGlhbXMgPGJyIC8+CiAgICAgIFRoZSBSdWJ5IERldmVsb3BtZW50IFRvb2wgaXMgYSBSdWJ5IHJlc291cmNlIGF3YXJlIHBsdWctaW4gZm9yIHRoZSBlY2xpcHNlIHBsYXRmb3JtLjxwIGFsaWduPSJyaWdodCI+PHNtYWxsPjxhIGhyZWY9IiN0b3AiPmdvIHRvIHRvcDwvYT48L3NtYWxsPjwvcD48L3RkPgogIDwvdHI+CiAgPHRyPgogICA8dGQgYWxpZ249UklHSFQgdmFsaWduPVRPUCB3aWR0aD0iMyUiPjxpbWcgc3JjPSIuLi9pbWFnZXMvQWRhcnJvdy5naWYiIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIj48L3RkPiAKICAgIDx0ZCB3aWR0aD0iMTAwJSI+IDxiPlJTU093bCA8L2I+IC0gPGEgaHJlZj0iaHR0cDovL3d3dy5yc3Nvd2wub3JnIiB0YXJnZXQ9Il9ibGFuayI+aHR0cDovL3d3dy5yc3Nvd2wub3JnPC9hPiAKICAgICAgLSBCZW5qYW1pbiBQYXNlcm8gPGJyIC8+CiAgICAgIFJTU093bCBpcyBhbiBvcGVuc291cmNlIE5ld3NyZWFkZXIgc3VwcG9ydGluZyB0aGUgZm9ybWF0cyBSU1MsIFJERiBhbmQgQXRvbS4gCiAgICAgIFNvbWUgb2YgdGhlIGZlYXR1cmVzIGFyZSBhbiBlYXN5IGV4cG9ydCBvZiBOZXdzIGludG8gUERGICYgUlRGLCBJbXBvcnQgYW5kIAogICAgICBFeHBvcnQgdmlhIE9QTUwsIGludGVncmF0ZWQgbmV3c2ZlZWQtc2VhcmNoZW5naW5lIGFuZCBhIGZ1bGx0ZXh0LXNlYXJjaC4gCiAgICAgIEl0IGlzIGxvY2FsaXplZCBpbnRvIDI2IGxhbmd1YWdlcyBhbmQgcnVubmluZyBvbiBhbGwgb3BlcmF0aW5nIHN5c3RlbXMsIAogICAgICB0aGF0IFNXVCBpcyBzdXBwb3J0aW5nLiBUaGUgbG9vayBhbmQgZmVlbCBvZiBSU1NPd2wgd2FzIGluc3BpcmVkIGJ5IHRoZSAKICAgICAgY2xhc3NpYyBFY2xpcHNlIDIuMSBwcmVzZW50YXRpb24uIFJTU093bCBpcyByZWdpc3RlcmVkIG9uIFNvdXJjZUZvcmdlIGFuZCAKICAgICAgd2FzIGVsZWN0ZWQgcHJvamVjdCBvZiB0aGUgbW9udGggZm9yIEphbnVhcnkgMjAwNS48cCBhbGlnbj0icmlnaHQiPjxzbWFsbD48YSBocmVmPSIjdG9wIj5nbyB0byB0b3A8L2E+PC9zbWFsbD48L3A+PC90ZD4KICA8L3RyPgogIDx0cj4KICAgPHRkIGFsaWduPVJJR0hUIHZhbGlnbj1UT1Agd2lkdGg9IjMlIj48aW1nIHNyYz0iLi4vaW1hZ2VzL0FkYXJyb3cuZ2lmIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCI+PC90ZD4gCiAgICA8dGQgd2lkdGg9IjEwMCUiPiA8Yj5SU1MgVmlldzwvYj4gLSA8YSBocmVmPSJodHRwOi8vd3d3Lmp1bmdpbmdlci5iaXovZWNsaXBzZS8iIHRhcmdldD0iX2JsYW5rIj5odHRwOi8vd3d3Lmp1bmdpbmdlci5iaXovZWNsaXBzZS88L2E+IAogICAgICAtIE1hcmt1cyBPbGl2ZXIgSnVuZ2luZ2VyIDxiciAvPgogICAgICBSU1MgVmlldyBoZWxwcyB0byBrZWVwIHRyYWNrIG9mIGFueSBuZXdzIGF2YWlsYWJsZSBhcyBhbiBSU1MgZmVlZC4gU3RheSAKICAgICAgdXAtdG8tZGF0ZSB3aXRoIHRoZSBuZXdzIG9mIHRoZSB3b3JsZCwgdGhlIG5ld2VzdCBnZWVrIHN0dWZmLCBvciBhbnl0aGluZyAKICAgICAgeW91IGFyZSBpbnRlcmVzdGVkIGluLiBZb3UgZG8gbm90IGhhdmUgdG8gdmlzaXQgdGhlIHdlYiBzaXRlcyBhcyBuZXdzIGFyZSAKICAgICAgZGlyZWN0bHkgZGVsaXZlcmVkIGludG8geW91ciBFY2xpcHNlIHdvcmtiZW5jaC48cCBhbGlnbj0icmlnaHQiPjxzbWFsbD48YSBocmVmPSIjdG9wIj5nbyB0byB0b3A8L2E+PC9zbWFsbD48L3A+PC90ZD4KICA8L3RyPgo8dHI+CiAgIDx0ZCBhbGlnbj1SSUdIVCB2YWxpZ249VE9QIHdpZHRoPSIzJSI+PGltZyBzcmM9Ii4uL2ltYWdlcy9BZGFycm93LmdpZiIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiPjwvdGQ+IAogICAgPHRkIHdpZHRoPSIxMDAlIj4gPGI+U2FuZ2FtPC9iPiAtIDxhIGhyZWY9Imh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcHJvamVjdHMvc2FuZ2FtIiB0YXJnZXQ9Il9ibGFuayI+aHR0cDovL3NvdXJjZWZvcmdlLm5ldC9wcm9qZWN0cy9zYW5nYW08L2E+IAogICAgICBhbmQgPGEgaHJlZj0iaHR0cDovL3NhbmdhbS5zb3VyY2Vmb3JnZS5uZXQvIiB0YXJnZXQ9Il9ibGFuayI+aHR0cDovL3NhbmdhbS5zb3VyY2Vmb3JnZS5uZXQvPC9hPiAKICAgICAgLSBieSBTb21payBSYWhhIGFuZCBBbWl0IFJhbmEgPGJyIC8+CiAgICAgICdTYW5nYW0nIGlzIGEgcGx1Zy1pbiB0aGF0IGF0dGVtcHRzIHRvIHNpbXVsYXRlIHBhaXIgcHJvZ3JhbW1pbmcgb3ZlciB0aGUgCiAgICAgIGludGVybmV0LiBZb3UgY2FuIGNvZGUsIHNhdmUgYW5kIHJ1biB5b3VyIHByb2dyYW1zIHRvZ2V0aGVyIHdpdGggZGlzdHJpYnV0ZWQgCiAgICAgIHRlYW1zIChhcGFydCBmcm9tIGJlaW5nIGFibGUgdG8gY2hhdCB3aGlsZSB5b3UgY29kZSkuPHAgYWxpZ249InJpZ2h0Ij48c21hbGw+PGEgaHJlZj0iI3RvcCI+Z28gdG8gdG9wPC9hPjwvc21hbGw+PC9wPjwvdGQ+CiAgPC90cj4gIAogIDx0cj4KICAgPHRkIGFsaWduPVJJR0hUIHZhbGlnbj1UT1Agd2lkdGg9IjMlIj48aW1nIHNyYz0iLi4vaW1hZ2VzL0FkYXJyb3cuZ2lmIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCI+PC90ZD4gCiAgICA8dGQgd2lkdGg9IjEwMCUiPiA8Yj5TQ29ucyBCdWlsZGVyIFBsdWctaW48L2I+IC0gPGEgaHJlZj0iaHR0cDovL25pYy1uYWMtcHJvamVjdC5kZS8lN0Vsb3RoYXIvZWNsaXBzZS91cGRhdGUvU0NvbnNCdWlsZGVyUGx1Z2luLmh0bWwiIHRhcmdldD0iX2JsYW5rIj5odHRwOi8vbmljLW5hYy1wcm9qZWN0LmRlL35sb3RoYXIvZWNsaXBzZS91cGRhdGUvU0NvbnNCdWlsZGVyUGx1Z2luLmh0bWw8L2E+IAogICAgICAtIExvdGhhciBXZXJ6aW5nZXIgPGJyIC8+CiAgICAgIFRoZSBTQ29ucyBCdWlsZGVyIHBsdWctaW4gaXMgYW4gYWRkLW9uIHRvIEVjbGlwc2UgQ0RUIChDL0MrKyBEZXZlbG9wbWVudCAKICAgICAgVG9vbHMpIHRoYXQgYWxsb3dzIHlvdSB0byBidWlsZCBDL0MrKyBwcm9qZWN0cyB3aXRoIHRoZSA8YSBocmVmPSJodHRwOi8vd3d3LnNjb25zLm9yZy8iIHRhcmdldD0iX2JsYW5rIj5TQ29ucyAKICAgICAgYnVpbGQgdG9vbDwvYT4uIEZlYXR1cmVzIGluY2x1ZGUgc3VwcG9ydCBmb3IgbXVsdGlwbGUgcGxhdGZvcm1zIGFuZCBidWlsZCAKICAgICAgY29uZmlndXJhdGlvbnMsIHRoZSBhYmlsaXR5IHRvIG1vZGlmeSBidWlsZCBzZXR0aW5ncyBieSBkaXJlY3RvcnkgYW5kIGJ5IAogICAgICBjb25maWd1cmF0aW9uLCBzdXBwb3J0IGZvciBDcHBVbml0IHRlc3RzLCBhbmQgdXNlciBleHRlbnNpb25zIHRvIFNDb25zdHJ1Y3QgCiAgICAgIGFuZCBtb3JlLiBJdCBoYXMgYmVlbiB0ZXN0ZWQgaXQgd2l0aCBTQ29ucyByZWxlYXNlIDAuOTUuIDxwIGFsaWduPSJyaWdodCI+PHNtYWxsPjxhIGhyZWY9IiN0b3AiPmdvIHRvIHRvcDwvYT48L3NtYWxsPjwvcD48L3RkPgogIDwvdHI+CiAgPHRyPgogICA8dGQgYWxpZ249UklHSFQgdmFsaWduPVRPUCB3aWR0aD0iMyUiPjxpbWcgc3JjPSIuLi9pbWFnZXMvQWRhcnJvdy5naWYiIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIj48L3RkPiAKICAgIDx0ZCB3aWR0aD0iMTAwJSI+IDxiPlNoZWxsRWQ8L2I+IC08YSBocmVmPSJodHRwOi8vd3d3LnNvbWV0aGluZ3NvZnR3YXJlLmNvbS9wcm9kdWN0cy9zaGVsbGVkLmh0bWwiIHRhcmdldD0iX2JsYW5rIj5odHRwOi8vd3d3LnNvbWV0aGluZ3NvZnR3YXJlLmNvbS9wcm9kdWN0cy9zaGVsbGVkLmh0bWw8L2E+IAogICAgICAtIFNvbWV0aGluZ1NvZnR3YXJlIDxiciAvPgogICAgICBTaGVsbEVkIGlzIGEgc2NyaXB0IGVkaXRvciBmb3IgdGhlIEVjbGlwc2UgcGxhdGZvcm0uIEZlYXR1cmVzIGluY2x1ZGUgc3ludGF4IAogICAgICBoaWdobGlnaHRpbmcsIHNtYXJ0IGluZGVudGF0aW9uLCBtYWluIHBhZ2UgaW5mb3JtYXRpb24gb24gdGV4dCBob3ZlciBhbmQgCiAgICAgIHN5bnRheCBoaWdobGlnaHRlZCBmaWxlIGNvbXBhcmVzLiBTaGVsbEVkIHdvcmtzIHdpdGggRWNsaXBzZSAzLjAgYW5kIGhpZ2hlci4gCiAgICA8cCBhbGlnbj0icmlnaHQiPjxzbWFsbD48YSBocmVmPSIjdG9wIj5nbyB0byB0b3A8L2E+PC9zbWFsbD48L3A+PC90ZD4KICA8L3RyPgogIDx0cj4KICAgPHRkIGFsaWduPVJJR0hUIHZhbGlnbj1UT1Agd2lkdGg9IjMlIj48aW1nIHNyYz0iLi4vaW1hZ2VzL0FkYXJyb3cuZ2lmIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCI+PC90ZD4gCiAgICA8dGQgd2lkdGg9IjEwMCUiPiA8Yj5TaW1wbGlmeWluZyBUZXN0IENhc2VzIHBsdWctaW48L2I+IC0gPGEgaHJlZj0iaHR0cDovL3d3dy5zdC5jcy51bmktc2IuZGUvZWNsaXBzZS8iIHRhcmdldD0iX2JsYW5rIj5odHRwOi8vd3d3LnN0LmNzLnVuaS1zYi5kZS9lY2xpcHNlLzwvYT4gCiAgICAgIC0gQW5kcmVhcyBaZWxsZXIgLyBNYXJ0aW4gQnVyZ2VyIC8gUGhpbGlwcCBCb3VpbGxvbiAvIFRvbSBaaW1tZXJtYW5uIDxiciAvPgogICAgICBUaGlzIHBsdWctaW4gYXV0b21hdGljYWxseSBkZXRlY3RzIHRoZSBpbnB1dCBpbiBhIGZpbGUgdGhhdCBpbmR1Y2VkIGEgZmFpbHVyZSAKICAgICAgaW4gYSA8YSBocmVmPSJodHRwOi8vd3d3Lmp1bml0Lm9yZyIgdGFyZ2V0PSJfYmxhbmsiPkpVbml0PC9hPiB0ZXN0LiBUaGUgCiAgICAgIHBsdWctaW4gY3JlYXRlcyBhIGNvcHkgb2YgdGhlIGZpbGUgYW5kIGlzb2xhdGVzIHRoZSBsb2NhdGlvbiBvZiB0aGUgZmFpbHVyZSAKICAgICAgaW5kdWNpbmcgaW5wdXQgYnkgcmVydW5uaW5nIHRoZSBKVW5pdCB0ZXN0IG9uIHByb2dyZXNzaXZlbHkgc21hbGxlciBzZWdtZW50cyAKICAgICAgb2YgdGhlIGZpbGUuIFRoZSBjb3B5IGFuZCB0aGUgb3JpZ2luYWwgYXJlIG5vdCBjaGFuZ2VkLCBidXQgdGhlIGlucHV0IHRoYXQgCiAgICAgIGNhdXNlZCB0aGUgZmFpbHVyZSBpcyBsb2NhdGVkLiA8YnIgLz4KICAgIDxwIGFsaWduPSJyaWdodCI+PHNtYWxsPjxhIGhyZWY9IiN0b3AiPmdvIHRvIHRvcDwvYT48L3NtYWxsPjwvcD48L3RkPgogIDwvdHI+CiAgPHRyPgogICA8dGQgYWxpZ249UklHSFQgdmFsaWduPVRPUCB3aWR0aD0iMyUiPjxpbWcgc3JjPSIuLi9pbWFnZXMvQWRhcnJvdy5naWYiIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIj48L3RkPiAKICAgIDx0ZCB3aWR0aD0iMTAwJSI+IDxiPlNPRklBPC9iPiAtIDxhIGhyZWY9Imh0dHA6Ly93d3cuc2FsbW9ubGxjLmNvbS9zb2ZpYSIgdGFyZ2V0PSJfYmxhbmsiPmh0dHA6Ly93d3cuc2FsbW9ubGxjLmNvbS9zb2ZpYTwvYT4gCiAgICAgIERvd25sb2FkOiA8YSBocmVmPSJodHRwOi8vc291cmNlZm9yZ2UubmV0L3Byb2plY3RzL3NhbG1vbiIgdGFyZ2V0PSJfYmxhbmsiPmh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcHJvamVjdHMvc2FsbW88L2E+biAKICAgICAgLSBieSBkZXZlbG9wZXJzIGF0IFNhbG1vbiBMTEMgYW5kIG1hbnkgZGV2ZWxvcGVycyBmcm9tIHRoZSBvcGVuIHNvdXJjZSBjb21tdW5pdHk8YnIgLz4KICAgICAgVGhlIFNhbG1vbiBPcGVuIEZyYW1ld29yayBmb3IgSW50ZXJuZXQgQXBwbGljYXRpb25zIChTT0ZJQSkgaXMgUmFwaWQgQXBwbGljYXRpb24gCiAgICAgIERldmVsb3BtZW50IHRvb2wgc2V0IGZvciB0aGUgSjJFRS4gSXQgaW50ZWdyYXRlcyBiZXN0LW9mLWJyZWVkIHRvb2xzIHdpdGggCiAgICAgIGEgSmF2YSBmcmFtZXdvcmsgdG8gcHJvdmlkZSBhbiBlbmQtdG8tZW5kIHNvbHV0aW9uIGZvciBkZXZlbG9waW5nIGhpZ2ggcXVhbGl0eSAKICAgICAgZGF0YWJhc2UgZHJpdmVuIHdlYiBhcHBsaWNhdGlvbnMgcXVpY2tseSBhbmQgZWFzaWx5LiA8cCBhbGlnbj0icmlnaHQiPjxzbWFsbD48YSBocmVmPSIjdG9wIj5nbyB0byB0b3A8L2E+PC9zbWFsbD48L3A+PC90ZD4KICA8L3RyPgogICA8dHI+CiAgIDx0ZCBhbGlnbj1SSUdIVCB2YWxpZ249VE9QIHdpZHRoPSIzJSI+PGltZyBzcmM9Ii4uL2ltYWdlcy9BZGFycm93LmdpZiIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiPjwvdGQ+IAogICAgPHRkIHdpZHRoPSIxMDAlIj4gPGI+U29sZXg8L2I+IC0gPGEgaHJlZj0iaHR0cDovL3NvdXJjZWZvcmdlLm5ldC9wcm9qZWN0cy9zb2xleC8iIHRhcmdldD0iX2JsYW5rIj5odHRwOi8vc291cmNlZm9yZ2UubmV0L3Byb2plY3RzL3NvbGV4LzwvYT4gCiAgICAgIC0gTkVPTUFsb2dpYyBkZXZlbG9wbWVudCB0ZWFtIC0gPGEgaHJlZj0iaHR0cDovL3d3dy5uZW9tYWxvZ2ljLmNvbS8iIHRhcmdldD0iX2JsYW5rIj5odHRwOi8vd3d3Lm5lb21hbG9naWMuY29tLzwvYT48YnIgLz4KICAgICAgICBUaGUgU29sZXggcGx1Zy1pbiBpcyBhIFdlYiBhcHBsaWNhdGlvbiB0ZXN0aW5nIHRvb2wsIGJhc2VkIG9uIGEKICAgICAgICBidWlsdC1pbiBXZWIgcHJveHkgYW5kIGEgY29uY2VwdCBvZiBleHRyYWN0aW9uL3JlcGxhY2VtZW50CiAgICAgICAgcnVsZXMuIFNvbGV4IHByb3ZpZGVzIGZ1bmN0aW9ucyB0byByZWNvcmQgYSBjbGllbnQgc2Vzc2lvbiwgYWRqdXN0IAoJCWFjY29yZGluZyB0byB2YXJpb3VzIHBhcmFtZXRlcnMgYW5kIHJlcGxheSBpdCBsYXRlciB0eXBpY2FsbHkgaW4gCgkJb3JkZXIgdG8gZW5zdXJlIG5vbiByZWdyZXNzaW9uIG9mIGEgV2ViIGFwcGxpY2F0aW9uJnJzcXVvO3MgYmVoYXZpb3VyLgogICAgICA8cCBhbGlnbj0icmlnaHQiPjxzbWFsbD48YSBocmVmPSIjdG9wIj5nbyB0byB0b3A8L2E+PC9zbWFsbD48L3A+PC90ZD4KICA8L3RyPgogIDx0cj4KICAgPHRkIGFsaWduPVJJR0hUIHZhbGlnbj1UT1Agd2lkdGg9IjMlIj48aW1nIHNyYz0iLi4vaW1hZ2VzL0FkYXJyb3cuZ2lmIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCI+PC90ZD4gCiAgICA8dGQgd2lkdGg9IjEwMCUiPiA8Yj5TcHJpbmcgSURFPC9iPiAtIDxhIGhyZWY9Imh0dHA6Ly9zcHJpbmdpZGUub3JnLyIgdGFyZ2V0PSJfYmxhbmsiPmh0dHA6Ly9zcHJpbmdpZGUub3JnLzwvYT4gCiAgICAgIC0gVG9yc3RlbiBKdWVyZ2VsZWl0LCBDaHJpc3RpYW4gRHVwdWlzIDxiciAvPgogICAgICBTcHJpbmcgSURFIGlzIGEgc2V0IG9mIHBsdWdpbnMgd2hpY2ggYXJlIGFkZGluZyBzdXBwb3J0IGZvciB0aGUgcG9wdWxhciAKICAgICAgSjJFRSBhcHBsaWNhdGlvbiBmcmFtZXdvcmsgPGEgaHJlZj0iaHR0cDovL3d3dy5zcHJpbmdmcmFtZXdvcmsub3JnLyIgdGFyZ2V0PSJfYmxhbmsiPlNwcmluZyAKICAgICAgRnJhbWV3b3JrPC9hPiB0byB0aGUgRWNsaXBzZSBwbGF0Zm9ybS4gSXQgY29uc2lzdHMgb2YgYSBwcm9qZWN0IG5hdHVyZSB3aGljaCAKICAgICAgcHJvdmlkZXMgc3VwcG9ydCBmb3IgU3ByaW5nIGJlYW4gY29uZmlnIGZpbGVzLCBhbiBpbmNyZW1lbnRhbCBidWlsZGVyIHdoaWNoIAogICAgICB2YWxpZGF0ZXMgU3ByaW5nIGJlYW4gY29uZmlnIGZpbGVzLCBhIHZpZXcgd2hpY2ggZGlzcGxheXMgYWxsIFNwcmluZyBwcm9qZWN0cyAKICAgICAgd2l0aCB0aGVpciBTcHJpbmcgYmVhbiBjb25maWcgZmlsZXMgYW5kIGEgdmlldyB3aGljaCBkaXNwbGF5cyBhIGdyYXBoIGZyb20gCiAgICAgIGFsbCBiZWFucyBkZWZpbmVkIGluIGEgc2luZ2xlIGNvbmZpZyBmaWxlLiBUaGUgbmV4dCBtYWpvciByZWxlYXNlIG9mIFNwcmluZyAKICAgICAgSURFIHdpbGwgYWRkIGEgZ3JhcGhpY2FsIGVkaXRvciBmb3IgPGEgaHJlZj0iaHR0cDovL29wZW5zb3VyY2UuYXRsYXNzaWFuLmNvbS9jb25mbHVlbmNlL3NwcmluZy9kaXNwbGF5L1dFQkZMT1cvSG9tZSIgdGFyZ2V0PSJfYmxhbmsiPlNwcmluZyAKICAgICAgV2ViRmxvdzwvYT4gY29uZmlnIGZpbGVzIGFuZCBhbiBYTUwgZWRpdG9yIGZvciBTcHJpbmcgYmVhbnMgY29uZmlnIGZpbGVzLjxwIGFsaWduPSJyaWdodCI+PHNtYWxsPjxhIGhyZWY9IiN0b3AiPmdvIHRvIHRvcDwvYT48L3NtYWxsPjwvcD48L3RkPgogIDwvdHI+CiAgPHRyPgogICA8dGQgYWxpZ249UklHSFQgdmFsaWduPVRPUCB3aWR0aD0iMyUiPjxpbWcgc3JjPSIuLi9pbWFnZXMvQWRhcnJvdy5naWYiIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIj48L3RkPiAKICAgIDx0ZCB3aWR0aD0iMTAwJSI+IDxiPlNwaW5kbGUsIGFuIEVjbGlwc2UgcGx1Zy1pbiBmb3IgVGFwZXN0cnk8L2I+IC0gPGEgaHJlZj0iaHR0cDovL3NwaW5kbGUuc291cmNlZm9yZ2UubmV0IiB0YXJnZXQ9Il9ibGFuayI+aHR0cDovL3NwaW5kbGUuc291cmNlZm9yZ2UubmV0PC9hPiAKICAgICAgLSBHZW9mZiBMb25nbWFuIDxiciAvPgogICAgICBTcGluZGxlIHByb3ZpZGVzIHdpemFyZHMgYW5kIGVkaXRvcnMgZm9yIDxhIGhyZWY9Imh0dHA6Ly90YXBlc3RyeS5zb3VyY2Vmb3JnZS5uZXQiIHRhcmdldD0iX2JsYW5rIj5UYXBlc3RyeTwvYT4gCiAgICAgIGZyYW1ld29yayBmaWxlcy48YnIgLz4KICAgICAgR2VvZmYgaGFzIGFsc28gZG9uYXRlZCBhIHJlc291cmNlIGV2ZW50IHRyYWNraW5nIHRvb2wgdG8gdGhlIHBsYXRmb3JtIHRoYXQgCiAgICAgIGNhbiBiZSBmb3VuZCBpbiB0aGUgPGEgaHJlZj0iaHR0cDovL2Rldi5lY2xpcHNlLm9yZy92aWV3Y3ZzL2luZGV4LmNnaS8lN0VjaGVja291dCU3RS9wbGF0Zm9ybS1jb3JlLWhvbWUvZGV2Lmh0bWwiIHRhcmdldD0iX2JsYW5rIj5Db3JlIAogICAgICBUb29sczwvYT4gcGx1Zy1pbi4gPHAgYWxpZ249InJpZ2h0Ij48c21hbGw+PGEgaHJlZj0iI3RvcCI+Z28gdG8gdG9wPC9hPjwvc21hbGw+PC9wPjwvdGQ+CiAgPC90cj4KICA8dHI+IAogICAgPHRkIGFsaWduPVJJR0hUIHZhbGlnbj1UT1Agd2lkdGg9IjMlIj48aW1nIHNyYz0iLi4vaW1hZ2VzL0FkYXJyb3cuZ2lmIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCI+PC90ZD4KICAgIDx0ZCB3aWR0aD0iOTclIj4gPGI+U1FMRXhwbG9yZXI8L2I+IC0gPGEgaHJlZj0iaHR0cHM6Ly9zcWxleHBsb3Jlci5kZXYuamF2YS5uZXQvIiB0YXJnZXQ9Il9ibGFuayI+aHR0cHM6Ly9zcWxleHBsb3Jlci5kZXYuamF2YS5uZXQvPC9hPiAKICAgICAgLSBBbGV4YW5kcmUgVGVsbGVzIGFuZCBBYWRpIERlc2hwYW5kZSA8YnIgLz4KICAgICAgU1FMRXhwbG9yZXIgaXMgYSBkYXRhYmFzZSBxdWVyeSBhbmQgdmlzdWFsaXphdGlvbiB0b29sIG9yaWdpbmFsbHkgZGVyaXZlZCAKICAgICAgZnJvbSBKRmFjZURCQy4gSXQgY2FuIGNvbm5lY3QgYW5kIHJ1biBxdWVyaWVzIGFnYWluc3QgYW55IEpEQkMtY29tcGxpYW50IAogICAgICBkYXRhYmFzZSBhbmQgY29tZXMgd2l0aCBhIHNjaGVtYSB2aXN1YWxpemVyIHRvIGhlbHAgeW91IGJldHRlciB1bmRlcnN0YW5kIAogICAgICB5b3VyIHNjaGVtYS4gVGhlIHBsdWctaW4gd2FzIG9yaWdpbmFsbHkgZGV2ZWxvcGVkIGJ5IEFuZHJlYSBNYXp6b2xpbiBhbmQgCiAgICAgIGlzIG5vdyBiZWluZyBtYWludGFpbmVkIGJ5IEFsZXhhbmRyZSBUZWxsZXMgYW5kIEFhZGkgRGVzaHBhbmRlLiA8cCBhbGlnbj0icmlnaHQiPjxzbWFsbD48YSBocmVmPSIjdG9wIj5nbyB0byB0b3A8L2E+PC9zbWFsbD48L3A+PC90ZD4KICA8L3RyPgogIDx0cj4KICAgPHRkIGFsaWduPVJJR0hUIHZhbGlnbj1UT1Agd2lkdGg9IjMlIj48aW1nIHNyYz0iLi4vaW1hZ2VzL0FkYXJyb3cuZ2lmIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCI+PC90ZD4gCiAgICA8dGQgd2lkdGg9IjEwMCUiPiA8Yj5TUlMgUGx1Zy1pbjwvYj4gLSA8YSBocmVmPSJodHRwOi8vZWNsaXBzZXNycy5zb3VyY2Vmb3JnZS5uZXQvIiB0YXJnZXQ9Il9ibGFuayI+aHR0cDovL2VjbGlwc2VzcnMuc291cmNlZm9yZ2UubmV0LzwvYT4gCiAgICAgIC0gQ2hhcmxlcyBGdWxuZWNreSA8YnIgLz4KICAgICAgVGhlIFNSUyBQbHVnLWluIGlzIG1lYW50IHRvIHByb3ZpZGUgYW4gaW50dWl0aXZlIG1lYW5zIHRvIGVkaXQgYW4gWE1MIGJhc2VkIAogICAgICBTb2Z0d2FyZSBSZXF1aXJlbWVudHMgU3BlY2lmaWNhdGlvbi4gVGhlIGNvbmNlcHQgYmVoaW5kIHRoZSBTUlMgUGx1Zy1pbiAKICAgICAgZGVyaXZlcyBmcm9tIHRoZSBncm93aW5nIGNvbnNlbnN1cyB0aGF0IHJlcXVpcmVtZW50cyBjYW4gZWZmZWN0aXZlbHkgYmUgCiAgICAgIGlkZW50aWZpZWQgdGhyb3VnaCBVc2UgQ2FzZXMuIFRoZSB1c2UgY2FzZSBzdHJhdGVneSBvZiBhc2tpbmcgIldoYXQgZG8geW91IAogICAgICBuZWVkIHRvIGFjY29tcGxpc2ggd2l0aCB0aGlzIHN5c3RlbT8iIGtlZXBzIHVzZXJzIGFuZCBkZXZlbG9wZXJzIGZvY3VzZWQgCiAgICAgIG9uIHZpc3VhbGl6aW5nIGhvdyB0aGUgYXBwbGljYXRpb24gb3VnaHQgdG8gcGVyZm9ybSBhIHJlcXVpcmVkIGZ1bmN0aW9uLiAKICAgICAgRXZlbnR1YWxseSwgd2VsbCB3cml0dGVuIFVzZSBDYXNlcyBzdGFydCB0byBsb29rIHNpbWlsYXIgdG8gYSBVc2VyJnJzcXVvO3MgTWFudWFsLCAKICAgICAgbGVhZGluZyB0byB0aGUgc2Vjb25kYXJ5IGZ1bmN0aW9uIG9mIHRoZSBTUlMsIHRoZSBnZW5lcmF0aW9uIG9mIGEgc2tlbGV0YWwgCiAgICAgIFVzZXImcnNxdW87cyBNYW51YWwgaW4gYSBmb3JtYXQgc3VpdGFibGUgZm9yIGVkaXRpbmcgb24gYW55IHBsYXRmb3JtLiBBZGRpdGlvbmFsbHkgCiAgICAgIHRoZSBwbHVnLWluIHN1cHBvcnRzIHRyYWNhYmlsaXR5IHRocm91Z2hvdXQgdGhlIGRldmVsb3BtZW50IHByb2Nlc3MgYnkgdHJhY2tpbmcgCiAgICAgIHdoaWNoIGNvbXBvbmVudHMgInJlYWxpemUiIHRoZSBVc2UgQ2FzZXMuIDxwIGFsaWduPSJyaWdodCI+PHNtYWxsPjxhIGhyZWY9IiN0b3AiPmdvIHRvIHRvcDwvYT48L3NtYWxsPjwvcD48L3RkPgogIDwvdHI+CiAgPHRyPgogICA8dGQgYWxpZ249UklHSFQgdmFsaWduPVRPUCB3aWR0aD0iMyUiPjxpbWcgc3JjPSIuLi9pbWFnZXMvQWRhcnJvdy5naWYiIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIj48L3RkPiAKICAgIDx0ZCB3aWR0aD0iMTAwJSI+IDxiPlNXZURFIChTZW1hbnRpYyBXZWIgRGV2ZWxvcG1lbnQgRW52aXJvbm1lbnQpPC9iPiAtIDxhIGhyZWY9Imh0dHA6Ly9vd2wtZWNsaXBzZS5wcm9qZWN0cy5zZW13ZWJjZW50cmFsLm9yZy8iIHRhcmdldD0iX2JsYW5rIj5odHRwOi8vb3dsLWVjbGlwc2UucHJvamVjdHMuc2Vtd2ViY2VudHJhbC5vcmcvPC9hPiAKICAgICAgLSBCQk4gVGVjaG5vbG9naWVzIDxiciAvPgogICAgICBTV2VERSBwcm92aWRlcyBhIHNlcmllcyBvZiBwbHVnLWlucyBmb3IgY3JlYXRpbmcgYW5kIHdvcmtpbmcgd2l0aCBzZW1hbnRpYyAKICAgICAgd2ViIGNvbnRlbnQgYXMgd2VsbCBhcyBleHRlbnNpb24gcG9pbnRzIGZvciBpbnRlZ3JhdGluZyBhZGRpdGlvbmFsIHNlbWFudGljIAogICAgICB3ZWIgdG9vbHMuIFRoZSBTV2VERSBwbHVnLWlucyBpbmNsdWRlIGFuIE9XTCBlZGl0b3Igd2l0aCBzeW50YXggaGlnaGxpZ2h0aW5nLCAKICAgICAgY29udGVudCBhc3Npc3QsIGFuZCBlcnJvciBkZXRlY3Rpb24sIE9XTCBkb2N1bWVudCB2YWxpZGF0aW9uLCBKYXZhIGNvZGUgCiAgICAgIGdlbmVyYXRpb24sIGFuZCBvbnRvbG9neSB2aXN1YWxpemF0aW9uLjxwIGFsaWduPSJyaWdodCI+PHNtYWxsPjxhIGhyZWY9IiN0b3AiPmdvIHRvIHRvcDwvYT48L3NtYWxsPjwvcD48L3RkPgogIDwvdHI+CiAgPHRyPgogICA8dGQgYWxpZ249UklHSFQgdmFsaWduPVRPUCB3aWR0aD0iMyUiPjxpbWcgc3JjPSIuLi9pbWFnZXMvQWRhcnJvdy5naWYiIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIj48L3RkPiAKICAgIDx0ZCB3aWR0aD0iMTAwJSI+IDxiPlNXVHdvcmtiZW5jaCBFc3NlbnRpYWwgRGF0YTwvYj4gLSA8YSBocmVmPSJodHRwOi8vd3d3LnN3dHdvcmtiZW5jaC5jb20iIHRhcmdldD0iX2JsYW5rIj5odHRwOi8vd3d3LnN3dHdvcmtiZW5jaC5jb208L2E+IAogICAgICAtIEFTQywgSW5jLjxiciAvPgogICAgICBTV1R3b3JrYmVuY2ggRXNzZW50aWFsIERhdGEgaXMgYSBkYXRhLWF3YXJlIGNvbnRyb2wgZnJhbWV3b3JrIGZvciBFY2xpcHNlIAogICAgICBhcHBsaWNhdGlvbnMuIFRoaXMgbGlicmFyeSBiaW5kcyBzdGFuZGFyZCBTV1QgY29udHJvbHMgdG8gSmF2YUJlYW4gcHJvcGVydGllcyAKICAgICAgb24gcGxhaW4gb2xkIEphdmEgb2JqZWN0cy4gSW4gYWRkaXRpb24sIGl0IHByb3ZpZGVzIHBvd2VyZnVsIGV4dGVuc2libGUgCiAgICAgIGZpZWxkLWxldmVsIHZhbGlkYXRpb24gY2FwYWJpbGl0aWVzIHVzaW5nIHlvdXIgY2hvaWNlIG9mIHJlZ3VsYXIgZXhwcmVzc2lvbnMsIAogICAgICBlZGl0IG1hc2tzLCBhbmQgc3RhbmRhcmQgSmF2YSBjb2RlLiBFc3NlbnRpYWwgRGF0YSBhZGRzIGEgcG93ZXJmdWwgdmlydHVhbCAKICAgICAgdGFibGUgY29udHJvbCB0aGF0IG1ha2VzIFNXVCZyc3F1bztzIHRhYmxlIGNvbnRyb2wgd29yayB0aGUgd2F5IGVuZC11c2VycyBleHBlY3QuIAogICAgICBTV1R3b3JrYmVuY2ggcHJvamVjdHMgYXJlIGxpY2Vuc2VkIHVuZGVyIGFuIE9TSS1hcHByb3ZlZCBvcGVuLXNvdXJjZSBsaWNlbnNlIAogICAgICBhbmQgb3B0aW9uYWxseSB1bmRlciBhIGNvbW1lcmNpYWwgc29mdHdhcmUgbGljZW5zZS4gPHAgYWxpZ249InJpZ2h0Ij48c21hbGw+PGEgaHJlZj0iI3RvcCI+Z28gdG8gdG9wPC9hPjwvc21hbGw+PC9wPjwvdGQ+CiAgPC90cj4KICA8dHI+CiAgIDx0ZCBhbGlnbj1SSUdIVCB2YWxpZ249VE9QIHdpZHRoPSIzJSI+PGltZyBzcmM9Ii4uL2ltYWdlcy9BZGFycm93LmdpZiIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiPjwvdGQ+IAogICAgPHRkIHdpZHRoPSIxMDAlIj4gPGI+U3lzZGVvIC0gRWNsaXBzZSBUb21jYXQgTGF1bmNoZXI8L2I+IC0gPGEgaHJlZj0iaHR0cDovL3d3dy5zeXNkZW8uY29tL3N5c2Rlby9lY2xpcHNlL3RvbWNhdHBsdWdpbiIgdGFyZ2V0PSJfYmxhbmsiPmh0dHA6Ly93d3cuc3lzZGVvLmNvbS9zeXNkZW8vZWNsaXBzZS90b21jYXRwbHVnaW48L2E+IAogICAgICA8YnIgLz4KICAgICAgICBJbnRlZ3JhdGVzIHRoZSBBcGFjaGUgSmFrYXJ0YSBQcm9qZWN0JnJzcXVvO3MgVG9tY2F0IHNlcnZsZXQgY29udGFpbmVyIHdpdGggZWNsaXBzZS4KICAgICAgPHAgYWxpZ249InJpZ2h0Ij48c21hbGw+PGEgaHJlZj0iI3RvcCI+Z28gdG8gdG9wPC9hPjwvc21hbGw+PC9wPjwvdGQ+CiAgPC90cj4KICAKICAgPHRyPgogICA8dGQgYWxpZ249UklHSFQgdmFsaWduPVRPUCB3aWR0aD0iMyUiPjxpbWcgc3JjPSIuLi9pbWFnZXMvQWRhcnJvdy5naWYiIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIj48L3RkPiAKICAgIDx0ZCB3aWR0aD0iMTAwJSI+IDxiPlRpbm1hbjwvYj4gLSA8YSBocmVmPSJodHRwOi8vd3d3LnNvdXJjZWZvcmdlLm9yZy9wcm9qZWN0cy90aW5tYW4iIHRhcmdldD0iX2JsYW5rIj5odHRwOi8vd3d3LnNvdXJjZWZvcmdlLm9yZy9wcm9qZWN0cy90aW5tYW48L2E+IAogICAgICAtIFNoYXJvbiBEYWdhbjxiciAvPgogICAgICBPcmlnaW5hbGx5IGEgcHJvamVjdCBmb3IgcHJvdmlkaW5nIGFuIElSQyBjbGllbnQgcGx1Zy1pbiB0byBlY2xpcHNlLCBUaW5tYW4gCiAgICAgIGhhcyBiZWNvbWUgYW4gdW1icmVsbGEgcHJvamVjdCB0aGF0IGhvc3RzIG90aGVyICdob2JieScgcGx1Zy1pbnMgdG9vLiBIZXJlIAogICAgICB5b3UmcnNxdW87bGwgYWxzbyBmaW5kIDxiPk1pbmVzd2VlcGVyPC9iPiwgYnkgSm9zJmVhY3V0ZTsgTSBPcmRheCBDYXNzJmFhY3V0ZTsgYW5kIDxiPkVzc2VudGlhbCBKYXZhIAogICAgICBEb2N1bWVudGF0aW9uPC9iPiwgYnkgTWF0dGhldyBQZXJyaW5zLCBhIGNvbGxlY3Rpb24gb2YgSmF2YSBkb2N1bWVudGF0aW9uIAogICAgICBhbmQgc3BlY2lmaWNhdGlvbnMsIHBhY2tlZCBhcyBhIGhlbHAgY29udGVudCBmb3IgRWNsaXBzZSB2MS4wLjxwIGFsaWduPSJyaWdodCI+PHNtYWxsPjxhIGhyZWY9IiN0b3AiPmdvIHRvIHRvcDwvYT48L3NtYWxsPjwvcD48L3RkPgogIDwvdHI+CiAgPHRyPgogICA8dGQgYWxpZ249UklHSFQgdmFsaWduPVRPUCB3aWR0aD0iMyUiPjxpbWcgc3JjPSIuLi9pbWFnZXMvQWRhcnJvdy5naWYiIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIj48L3RkPiAKICAgIDx0ZCB3aWR0aD0iMTAwJSI+IDxiPlRvYnkncyBQTC9TUUwgRWRpdG9yIDwvYj4tIDxhIGhyZWY9Imh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcHJvamVjdHMvcGxzcWxlZGl0b3IiIHRhcmdldD0iX2JsYW5rIj5odHRwOi8vc291cmNlZm9yZ2UubmV0L3Byb2plY3RzL3Bsc3FsZWRpdG9yPC9hPiAKICAgICAgLSBUb2J5IFppbmVzIGFuZCBBbmRyZXcgQ29oZW4gPGJyIC8+CiAgICAgIFRoaXMgcGx1Z2luIGlzIGFuIGVkaXRvciBwbHVnaW4gdG8gcHJvdmlkZSBzeW50YXggaGlnaGxpZ2h0aW5nLCBjb250ZW50IAogICAgICBhc3Npc3QgZm9yIGJvdGggZmlsZSBhbmQgZGF0YWJhc2UgYmFzZWQgcGFja2FnZXMsIHBhY2thZ2UgY29uc3RhbnRzLCBwcm9jZWR1cmVzIAogICAgICBhbmQgZnVuY3Rpb25zLCBhbmQgZm9yIGRhdGFiYXNlIGJhc2VkIHRhYmxlcyBhbmQgY29sdW1ucy4gSXQgbG9hZHMgY29kZSAKICAgICAgdG8gdGhlIGRhdGFiYXNlLCBtYXJrcyBlcnJvcnMgaW4gdGhlIGZpbGVzIGFuZCBnZW5lcmF0ZXMgaGVhZGVycy4gSXQgYWxzbyAKICAgICAgcHJvdmlkZXMgc3RhbmRhcmQgZWRpdG9yIGNhcGFiaWxpdGllcyB5b3UgZXhwZWN0IGZyb20gZWNsaXBzZSBiYXNlZCB0b29scyAKICAgICAgLSBkb2N1bWVudGF0aW9uIHRvb2xzLCBob3ZlciBkb2N1bWVudGF0aW9uLCBGMyBsb29rdXAgZnVuY3Rpb25hbGl0eSBhbmQgCiAgICAgIGluIHRoZSBmdXR1cmUgZm9ybWF0dGluZywgc2VhcmNoaW5nLCBxdWljayBhc3Npc3RzIGFuZCByZWZhY3RvcmluZy4gPHAgYWxpZ249InJpZ2h0Ij48c21hbGw+PGEgaHJlZj0iI3RvcCI+Z28gdG8gdG9wPC9hPjwvc21hbGw+PC9wPjwvdGQ+CiAgPC90cj4KICA8dHI+IAogICAgPHRkIGFsaWduPVJJR0hUIHZhbGlnbj1UT1Agd2lkdGg9IjMlIj48aW1nIHNyYz0iLi4vaW1hZ2VzL0FkYXJyb3cuZ2lmIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCI+PC90ZD4KICAgIDx0ZCB3aWR0aD0iOTclIj48Yj5UT1BDQVNFRCA8L2I+LSA8YSBocmVmPSJodHRwOi8vd3d3LnRvcGNhc2VkLm9yZyIgdGFyZ2V0PSJfYmxhbmsiPmh0dHA6Ly93d3cudG9wY2FzZWQub3JnPC9hPiAKICAgICAgLSBUb3BjYXNlZCBDb25zb3J0aXVtIDxiciAvPgogICAgICBUT1BDQVNFRCBpcyBhbiBlbmdpbmVlcmluZyB0b29sa2l0IGZvciBjcml0aWNhbCBzeXN0ZW1zIGFuZCBhcHBsaWNhdGlvbnMgCiAgICAgIGJhc2VkIG9uIEVjbGlwc2UuIEl0IGFpbXMgdG8gcHJvdmlkZSB0aGUgdG9vbHMgcmVxdWlyZWQgdG8gZ28gZnJvbSByZXF1aXJlbWVudHMgCiAgICAgIHRvIGltcGxlbWVudGF0aW9uIHN0YWdlcywgYW5kIGZvY3VzZXMgb24gTW9kZWwgRHJpdmVuIEVuZ2luZWVyaW5nLiBUaGUgdG9vbHNldCAKICAgICAgd2lsbCBiZSBjb21wbGlhbnQgd2l0aCBzdGFuZGFyZHMgbGlrZSB0aGUgRE8tMTc4QiBkb2N1bWVudC4gVGhlIGN1cnJlbnQgCiAgICAgIHZlcnNpb24gKDAuNy4xKSBpbmNsdWRlcyA6IHNldmVyYWwgZ3JhcGhpY2FsIGVkaXRvciAoRUNPUkUsIFVNTCAyIC0gY2xhc3MsIAogICAgICB1c2UgY2FzZXMsIGFuZCBzZXF1ZW5jZSBkaWFncmFtIG9ubHkgLSBzdHJ1Y3R1cmVkIGFuYWx5c2lzLCBBQURMIC0gQXJjaGl0ZWN0dXJlIAogICAgICBBbmFseXNpcyBhbmQgRGVzaWduIExhbmd1YWdlKSwgYSBmcmFtZXdvcmsgdG8gZ2VuZXJhdGUgcGFydGlhbGx5IG5ldyBncmFwaGljYWwgCiAgICAgIGVkaXRvcnMgZnJvbSBFQ09SRSBtb2RlbHMsIGFuIE9DTCBtb2RlbCBjaGVja2VyIGFuZCBzb21lIGFkbWluaXN0cmF0aXZlIAogICAgICB0b29scyBtYWtpbmcgYSBkZXBsb3ltZW50IGluIGluZHVzdHJpYWwgY29udGV4dCBlYXNpZXIuIAogICAgICA8cCBhbGlnbj0icmlnaHQiPjxzbWFsbD48YSBocmVmPSIjdG9wIj5nbyB0byB0b3A8L2E+PC9zbWFsbD48L3A+PC90ZD4KICA8L3RyPgogIDx0cj4KICAgPHRkIGFsaWduPVJJR0hUIHZhbGlnbj1UT1Agd2lkdGg9IjMlIj48aW1nIHNyYz0iLi4vaW1hZ2VzL0FkYXJyb3cuZ2lmIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCI+PC90ZD4gCiAgICA8dGQgd2lkdGg9IjEwMCUiPiA8Yj5UcnVTdHVkaW8gSW50ZWdyYXRlZCBEZXZlbG9wbWVudCBFbnZpcm9ubWVudDwvYj4gLSA8YSBocmVmPSJodHRwOi8vd3d3LnhvcmVkLmNvbS9wcm9kdWN0cy5waHAiIHRhcmdldD0iX2JsYW5rIj5odHRwOi8vd3d3LnhvcmVkLmNvbS9wcm9kdWN0cy5waHA8L2E+IAogICAgICAtIFRydVN0dWRpbyBGb3VuZGF0aW9uIDxiciAvPgogICAgICBUcnVTdHVkaW8gSURFIGlzIGEgUEhQIGFuZCBQeXRob24gSURFIGJ1aWx0IG9uIHRvcCBvZiB0aGUgRWNsaXBzZSBQbGF0Zm9ybS4gCiAgICAgIEl0IGluaGVyaXRzIGEgY29tcHJlaGVuc2l2ZSBzZXQgb2YgRWNsaXBzZSBlZGl0aW5nLCBkZWJ1Z2dpbmcgYW5kIGRlcGxveW1lbnQgCiAgICAgIHRvb2xzIGFuZCBpbnRyb2R1Y2VzIG5ldyBmZWF0dXJlcyBmb3IgUEhQIGFuZCBQeXRob24gZGV2ZWxvcGVycy4gSXQgc3VwcG9ydHMgCiAgICAgIGRlYnVnZ2luZyBvdmVyIERCR3AsIGluY2x1ZGluZyBYZGVidWcgZm9yIFBIUC4gU291cmNlIGNvZGUgcGFyc2VycyB3aXRoIAogICAgICBhZHZhbmNlZCBjb2RlLWFuYWx5emUgYW5kIGNvZGUtY2hlY2tpbmcgb3B0aW9ucyBhbGxvd3MgZWFzeSBwcm9qZWN0IG5hdmlnYXRpb24gCiAgICAgIGFuZCBnaXZlcyBlZGl0LXRpbWUgc3ludGF4IGVycm9ycyBpZGVudGlmaWNhdGlvbiBhbmQgY29kZSB2YWxpZGF0aW9uIGJlbmVmaXRzLjxwIGFsaWduPSJyaWdodCI+PHNtYWxsPjxhIGhyZWY9IiN0b3AiPmdvIHRvIHRvcDwvYT48L3NtYWxsPjwvcD48L3RkPgogIDwvdHI+CiAgPHRyPgogICA8dGQgYWxpZ249UklHSFQgdmFsaWduPVRPUCB3aWR0aD0iMyUiPjxpbWcgc3JjPSIuLi9pbWFnZXMvQWRhcnJvdy5naWYiIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIj48L3RkPiAKICAgIDx0ZCB3aWR0aD0iMTAwJSI+IDxiPlVuaU1vZDogRXhlY3V0YWJsZSBVTUwgZm9yIEVjbGlwc2U8L2I+IC0gPGEgaHJlZj0iaHR0cDovL3VuaW1vZC5zZi5uZXQiIHRhcmdldD0iX2JsYW5rIj5odHRwOi8vdW5pbW9kLnNmLm5ldDwvYT4gCiAgICAgIC0gVmFkaW0gR3Vyb3YsIGVWZWxvcGVycyBDb3Jwb3JhdGlvbiAoPGEgaHJlZj0iaHR0cDovL3d3dy5ldmVsb3BlcnMuY29tIiB0YXJnZXQ9Il9ibGFuayI+aHR0cDovL3d3dy5ldmVsb3BlcnMuY29tPC9hPikgCiAgICAgIDxiciAvPgogICAgICBVbmlNb2QgaXMgYSBwbHVnLWluIGZvciBFY2xpcHNlIHRoYXQgaW1wbGVtZW50cyBhbiBFeGVjdXRhYmxlIFVNTCBhcHByb2FjaC4gCiAgICAgIFVuaU1vZCBwcm92aWRlcyB0b29scyB0byBtb2RlbCB5b3VyIHN5c3RlbSB1c2luZyBDbGFzcyBhbmQgU3RhdGVjaGFydCBVTUwgCiAgICAgIGRpYWdyYW1zIGFuZCB0aGVuICZxdW90O3J1biZxdW90OyB0aGVzZSBkaWFncmFtcyBpbiBvbmUgY2xpY2sgZnJvbSBFY2xpcHNlLiAKICAgICAgVW5pTW9kIGFsc28gcHJvdmlkZXMgdGhlIGFiaWxpdHkgdG8gZGVidWcgeW91ciBkaWFncmFtczogeW91IGNhbiBzZXQgYnJlYWtwb2ludHMgCiAgICAgIG9uIHN0YXRlcywgdHJhbnNpdGlvbnMgb3IgYWN0aW9ucywgcnVuIHRoZSBkaWFncmFtIHN0ZXAtYnktc3RlcCBhbmQgbW9uaXRvciAKICAgICAgbG9jYWwgdmFyaWFibGVzLiBMb2NhbCBhbmQgcmVtb3RlIGRlYnVnZ2luZyBpcyBzdXBwb3J0ZWQsIGkuZS4geW91IG1heSBleGVjdXRlIAogICAgICB5b3VyIG1vZGVsIGluc2lkZSBhIEoyRUUgc2VydmVyIGFuZCBkZWJ1ZyBpdCByZW1vdGVseS48cCBhbGlnbj0icmlnaHQiPjxzbWFsbD48YSBocmVmPSIjdG9wIj5nbyB0byB0b3A8L2E+PC9zbWFsbD48L3A+PC90ZD4KICA8L3RyPgogIDx0cj4KICAgPHRkIGFsaWduPVJJR0hUIHZhbGlnbj1UT1Agd2lkdGg9IjMlIj48aW1nIHNyYz0iLi4vaW1hZ2VzL0FkYXJyb3cuZ2lmIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCI+PC90ZD4gCiAgICA8dGQgd2lkdGg9IjEwMCUiPiA8Yj5VbHRpbWF0ZUNJTSBFeHBsb3JlcjwvYj4gLSA8YSBocmVmPSJodHRwOi8vc291cmNlZm9yZ2UubmV0L3Byb2plY3RzL3VsdGltYXRlY2ltIiB0YXJnZXQ9Il9ibGFuayI+aHR0cDovL3NvdXJjZWZvcmdlLm5ldC9wcm9qZWN0cy91bHRpbWF0ZWNpbTwvYT4gCiAgICAgIC0gVWx0aW1hdGUgVGVjaG5vbG9neSwgSW5jICg8YSBocmVmPSJodHRwOi8vd3d3LnVsdGltYXRldGVjaC5jb20vIiB0YXJnZXQ9Il9ibGFuayI+aHR0cDovL3d3dy51bHRpbWF0ZXRlY2guY29tLzwvYT4pIAogICAgICA8YnIgLz4KICAgIFVsdGltYXRlQ0lNIEV4cGxvcmVyIGlzIGFuIE9wZW4gU291cmNlIEVjbGlwc2UgcGx1Z2luIGZyb20gVWx0aW1hdGUgVGVjaG5vbG9neSwgSW5jLiB0aGF0IGVuYWJsZXMgeW91IHRvIGNvbm5lY3QgdG8gYSBsaXZlIFdCRU0gc2VydmVyIGFuZCBleHBsb3JlIHRoZSBvYmplY3QgbW9kZWwgKENJTU9NKS4gIEl0IGlzIHRoZSBlc3NlbnRpYWwgdG9vbCBmb3IgQ0lNIGNsaWVudCBkZXZlbG9wbWVudCwgdHJvdWJsZXNob290aW5nLCBkZWJ1Z2dpbmcsIGFuZCBxdWFsaXR5IGFzc3VyYW5jZS4gIFVsdGltYXRlQ0lNIGVuYWJsZXMgeW91IHRvIGVhc2lseSBuYXZpZ2F0ZSBDSU1PTSwgdmlldyBvYmplY3RzIGFuZCBpbnN0YW5jZXMsIG1vZGlmeSBpbnN0YW5jZXMsIHJ1biBxdWVyaWVzLCBhbmQgbXVjaCBtb3JlLjxiciAvPjxiciAvPgoJICAgIDxwIGFsaWduPSJyaWdodCI+PHNtYWxsPjxhIGhyZWY9IiN0b3AiPmdvIHRvIHRvcDwvYT48L3NtYWxsPjwvcD48L3RkPgogIDwvdHI+CiAgPHRyPiAKICAgIDx0ZCBhbGlnbj1SSUdIVCB2YWxpZ249VE9QIHdpZHRoPSIzJSI+PGltZyBzcmM9Ii4uL2ltYWdlcy9BZGFycm93LmdpZiIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiPjwvdGQ+CiAgICA8dGQgd2lkdGg9Ijk3JSI+PGI+VjRBTEwgQXNzaXNpIEdVSS1CdWlsZGVyIDwvYj4gLSA8YSBocmVmPSJodHRwOi8vc291cmNlZm9yZ2UubmV0L3Byb2plY3RzL3Y0YWxsLyIgdGFyZ2V0PSJfYmxhbmsiPmh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcHJvamVjdHMvdjRhbGwvPC9hPiAKICAgICAgLSBSYW1pbiBBc3Npc2kgPGJyIC8+CiAgICAgIDxpPlY0QUxMIGlzIG5vdyBhbiBvcGVuIHNvdXJjZSBwcm9qZWN0IG9uIHNvdXJjZWZvcmdlISA8L2k+PGJyIC8+CiAgICAgIFY0QUxMIEFzc2lzaSBHVUktQnVpbGRlciBpcyBhIHJhcGlkIGFwcGxpY2F0aW9uIGRldmVsb3BtZW50IGVudmlyb25tZW50IAogICAgICBmb3IgYnVpbGRpbmcgamF2YSBhcHBsaWNhdGlvbnMuIEl0IHN1cHBvcnRzIGRpZmZlcmVudCBUYXJnZXQgQVBJJ3MgKFN3aW5nLCAKICAgICAgU1dUIGV0Yy4pLiBPcHRpb25hbGx5IGRldmVsb3BlcnMgY2FuIGFjdGl2YXRlIFhNTCBydW50aW1lIHN1cHBvcnQgZm9yIGZhc3RlciwgCiAgICAgIGVhc2llciBhbmQgbW9yZSBlZmZpY2llbnQgYXBwbGljYXRpb24gZGV2ZWxvcG1lbnQuIDxwIGFsaWduPSJyaWdodCI+PHNtYWxsPjxhIGhyZWY9IiN0b3AiPmdvIHRvIHRvcDwvYT48L3NtYWxsPjwvcD48L3RkPgogIDwvdHI+IAogIDx0cj4KICAgPHRkIGFsaWduPVJJR0hUIHZhbGlnbj1UT1Agd2lkdGg9IjMlIj48aW1nIHNyYz0iLi4vaW1hZ2VzL0FkYXJyb3cuZ2lmIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCI+PC90ZD4gCiAgICA8dGQgd2lkdGg9IjEwMCUiPiA8Yj5WZWxvY2l0eSBVSSBQbHVnLWluPC9iPiAtIDxhIGhyZWY9Imh0dHA6Ly92ZWxvZWRpdC5zb3VyY2Vmb3JnZS5uZXQvIiB0YXJnZXQ9Il9ibGFuayI+aHR0cDovL3ZlbG9lZGl0LnNvdXJjZWZvcmdlLm5ldC88L2E+IAogICAgICAtIFRvcnN0ZW4gSnVlcmdlbGVpdCA8YnIgLz4KICAgICAgVGhpcyBwcm9qZWN0IGFkZHMgc3VwcG9ydCBmb3IgSmFrYXJ0YSZyc3F1bztzIHRlbXBsYXRlIGVuZ2luZSBWZWxvY2l0eSAoPGEgaHJlZj0iaHR0cDovL2pha2FydGEuYXBhY2hlLm9yZy92ZWxvY2l0eS8iIHRhcmdldD0iX2JsYW5rIj5odHRwOi8vamFrYXJ0YS5hcGFjaGUub3JnL3ZlbG9jaXR5LzwvYT4pIAogICAgICB0byB0aGUgRWNsaXBzZSBwbGF0Zm9ybS4gVGhlIHJlbGF0ZWQgcGx1Zy1pbnMgYXJlIHByb3ZpZGluZyBhbiBlZGl0b3IgZm9yIAogICAgICBWZWxvY2l0eSZyc3F1bztzIHRlbXBsYXRlIGZpbGVzICh3aXRoIHN5bnRheCBoaWdobGlnaHRpbmcsIG91dGxpbmUgdmlldywgY29udGVudCAKICAgICAgYXNzaXN0LCAuLi4pIGFuZCB0aGUgVmVsb2NpdHkgZnJhbWV3b3JrIGl0c2VsZi48cCBhbGlnbj0icmlnaHQiPjxzbWFsbD48YSBocmVmPSIjdG9wIj5nbyB0byB0b3A8L2E+PC9zbWFsbD48L3A+PC90ZD4gCiAgPC90cj4KICA8dHI+CiAgIDx0ZCBhbGlnbj1SSUdIVCB2YWxpZ249VE9QIHdpZHRoPSIzJSI+PGltZyBzcmM9Ii4uL2ltYWdlcy9BZGFycm93LmdpZiIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiPjwvdGQ+IAogICAgPHRkIHdpZHRoPSIxMDAlIj4gPGI+VmVyc2lvbnRyZWUgPC9iPiAtIDxhIGhyZWY9Imh0dHA6Ly92ZXJzaW9udHJlZS5zb3VyY2Vmb3JnZS5uZXQvIiB0YXJnZXQ9Il9ibGFuayI+aHR0cDovL3ZlcnNpb250cmVlLnNvdXJjZWZvcmdlLm5ldC88L2E+IAogICAgICAtIEphbiBLYXJzdGVucyBhbmQgQW5kciZlYWN1dGU7IExhbmdob3JzdCA8YnIgLz4KICAgICAgRWNsaXBzZSBWZXJzaW9uIFRyZWUgUGx1Zy1pbiBpcyBhbiBlYXN5IHRvIHVzZSwgZ3JhcGhpY2FsIHZlcnNpb24gdHJlZSBmb3IgCiAgICAgIHByb2plY3QgYXJ0aWZhY3RzIGhvc3RlZCBpbiBhIENWUyByZXBvc2l0b3J5LiBJdCBpcyBhIGdyYXBoaWNhbCByZXBsYWNtZW50IAogICAgICBmb3IgRWNsaXBzZSByZXNvdXJjZSBoaXN0b3J5LiBTdXBwb3J0cyBkaWZmZXJlbnQgbGF5b3V0IHN0eWxlcywgY3VzdG9taXphdGlvbiAKICAgICAgYW5kIGNvbnZlbmllbmNlIGZlYXR1cmVzLiBTdXBwb3J0cyBFY2xpcHNlIDIueCBhbmQgMy4wLjxwIGFsaWduPSJyaWdodCI+PHNtYWxsPjxhIGhyZWY9IiN0b3AiPmdvIHRvIHRvcDwvYT48L3NtYWxsPjwvcD48L3RkPiAKICA8L3RyPgogIDx0cj4KICAgPHRkIGFsaWduPVJJR0hUIHZhbGlnbj1UT1Agd2lkdGg9IjMlIj48aW1nIHNyYz0iLi4vaW1hZ2VzL0FkYXJyb3cuZ2lmIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCI+PC90ZD4gCiAgICA8dGQgd2lkdGg9IjEwMCUiPiA8Yj5XT0xpcHM8L2I+IC0gPGEgaHJlZj0iaHR0cDovL29iamVjdHN0eWxlLm9yZy93b3Byb2plY3QvIiB0YXJnZXQ9Il9ibGFuayI+aHR0cDovL29iamVjdHN0eWxlLm9yZy93b3Byb2plY3QvPC9hPiAKICAgICAgLSBieSB0aGUgT2JqZWN0U3R5bGUgdGVhbSA8YnIgLz4KICAgICAgV09MaXBzIGlzIGEgcGx1Zy1pbiB0aGF0IHN1cHBvcnQgZGV2ZWxvcG1lbnQgb2YgPGEgaHJlZj0iaHR0cDovL3d3dy5hcHBsZS5jb20vd2Vib2JqZWN0cy8iIHRhcmdldD0iX2JsYW5rIj4gCiAgICAgIFdlYk9iamVjdHM8L2E+IGFwcGxpY2F0aW9ucyBhbmQgZnJhbWV3b3Jrcy4gV09MaXBzIGlzIGEgcGFydCBvZiA8YSBocmVmPSJodHRwOi8vb2JqZWN0c3R5bGUub3JnL3dvcHJvamVjdC8iIHRhcmdldD0iX2JsYW5rIj5XT1Byb2plY3Q8L2E+LiAKICAgICAgV09Qcm9qZWN0IGlzIGEgc2V0IG9mIE9TIGFuZCBJREUgaW5kZXBlbmRlbnQgdG9vbHMgKGJhc2VkIG9uIDxhIApocmVmPSJodHRwOi8vamFrYXJ0YS5hcGFjaGUub3JnL2FudC8iIHRhcmdldD0iX2JsYW5rIj5BbnQ8L2E+KSBmb3Igd29ya2luZyB3aXRoIAogICAgICBXZWJPYmplY3RzPHAgYWxpZ249InJpZ2h0Ij48c21hbGw+PGEgaHJlZj0iI3RvcCI+Z28gdG8gdG9wPC9hPjwvc21hbGw+PC9wPjwvdGQ+CiAgPC90cj4KICA8dHI+CiAgIDx0ZCBhbGlnbj1SSUdIVCB2YWxpZ249VE9QIHdpZHRoPSIzJSI+PGltZyBzcmM9Ii4uL2ltYWdlcy9BZGFycm93LmdpZiIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiPjwvdGQ+IAogICAgPHRkIHdpZHRoPSIxMDAlIj4gPGI+WC1QYXJyb3RzIHBsdWctaW5zIC0gPGEgaHJlZj0iaHR0cDovL3d3dy54LXBhcnJvdHMuY29tLyIgdGFyZ2V0PSJfYmxhbmsiPmh0dHA6Ly93d3cueC1wYXJyb3RzLmNvbS88L2E+IAogICAgICAtIHRoZSBYLVBhcnJvdHMgRGV2ZWxvcG1lbnQgVGVhbSA8L2I+PGJyIC8+CiAgICAgIEEgZ3Jvd2luZyBudW1iZXIgb2YgZnJlZSBFY2xpcHNlIHBsdWctaW5zIHdyaXR0ZW4gYnkgdGhlIFgtUGFycm90cyB0ZWFtLiAKICAgICAgQ3VycmVudGx5IHRoZSBmb2xsb3dpbmcgcGx1Zy1pbnMgYXJlIGF2YWlsYWJsZTo8YnIgLz4KICAgICAgLSBJT05BIElQYXMgSW50ZWdyYXRpb24gKElPTkEmcnNxdW87cyBFSkIgU2VydmVyKTxiciAvPgogICAgICAtIFNlcnZsZXRFeGVjIEludGVncmF0aW9uPGJyIC8+CiAgICAgIC0gVGVsbmV0IEludGVncmF0aW9uPHAgYWxpZ249InJpZ2h0Ij48c21hbGw+PGEgaHJlZj0iI3RvcCI+Z28gdG8gdG9wPC9hPjwvc21hbGw+PC9wPjwvdGQ+CiAgPC90cj4KICA8dHI+CiAgIDx0ZCBhbGlnbj1SSUdIVCB2YWxpZ249VE9QIHdpZHRoPSIzJSI+PGltZyBzcmM9Ii4uL2ltYWdlcy9BZGFycm93LmdpZiIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiPjwvdGQ+IAogICAgPHRkIHdpZHRoPSIxMDAlIj4gPGI+ekNsaXBzZSBwbHVnLWlucyAtIDwvYj48YSBocmVmPSJodHRwOi8vd3d3LnpjbGlwc2Uub3JnL2luZGV4Lmh0bWwiIHRhcmdldD0iX2JsYW5rIj5odHRwOi8vd3d3LnpjbGlwc2Uub3JnL2luZGV4Lmh0bWw8L2E+PGI+IAogICAgICA8L2I+PGJyIC8+CiAgICAgIDxiciAvPgogICAgICA8Yj5JbnNlY3Rpdm9yZTwvYj4gLSA8YSBocmVmPSJodHRwOi8vd3d3LnpjbGlwc2Uub3JnL3Byb2plY3RzL2luc2VjdGl2b3JlLyIgdGFyZ2V0PSJfYmxhbmsiPmh0dHA6Ly93d3cuemNsaXBzZS5vcmcvcHJvamVjdHMvaW5zZWN0aXZvcmUvIAogICAgICA8L2E+IDxiciAvPgogICAgICBJbnNlY3Rpdm9yZSBpcyBhIFRhc2sgY3JlYXRpb24gYW5kIHNoYXJpbmcgcGx1Zy1pbiB0aGF0IHByb3ZpZGVzIHRoZSBhYmlsaXR5IAogICAgICB0byBjYXB0dXJlIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gaW4gdGhlIHRhc2ssIHN1Y2ggYXMgU3RhdGUsIFNldmVyaXR5LCAKICAgICAgRGVzY3JpcHRpb24sIGFuZCBhIE5vdGVzIGxvZyBhbmQgc2hhcmUgdGhlc2UgdGFza3Mgd2l0aCBvdGhlcnMgd29ya2luZyBvbiAKICAgICAgdGhlIHNhbWUgY29kZWJhc2UgdmlhIHRoZWlyIGV4aXN0aW5nIHNvdXJjZSBjb250cm9sIHN5c3RlbSAoZS5nLiBDVlMpLiAKICAgICAgSW5zZWN0aXZvcmUgaW50ZWdyYXRlcyB3aXRoIHRoZSBFY2xpcHNlIHRhc2sgbGlzdCAmYW1wOyBwcm92aWRlcyBvdGhlciBmZWF0dXJlcyAKICAgICAgc3VjaCBhcyBlbWFpbCBub3RpZmljYXRpb24uIDxiciAvPjxwIGFsaWduPSJyaWdodCI+PHNtYWxsPjxhIGhyZWY9IiN0b3AiPmdvIHRvIHRvcDwvYT48L3NtYWxsPjxiciAvPjxiciAvPjwvcD48L3RkPgogIDwvdHI+CiAgCiAgPC90YWJsZT4KICAgIAk8L2Rpdj4KICAJCTxkaXYgaWQ9InJpZ2h0Y29sdW1uIj4KCQk8ZGl2IGNsYXNzPSJzaWRlaXRlbSI+CgkJCTxoNj5SZWxhdGVkIExpbmtzPC9oNj4KCQkJPHVsPgoJCQkJPGxpPjxhIGhyZWY9InBsdWdpbnNpdGVzLnBocCI+Q29tbXVuaXR5IFBsdWctaW4gU2l0ZXM8L2E+PC9saT4KCQkJCTxsaT48YSBocmVmPSJjb21tZXJjaWFscGx1Z2lucy5waHAiPkNvbW1lcmNpYWwgUHJvamVjdHMgYW5kIFBsdWctaW5zPC9hPjwvbGk+CgkJCQk8bGk+PGEgaHJlZj0ib3NwbHVnaW5zLnBocCI+T3BlbiBTb3VyY2UgUHJvamVjdHMgYW5kIFBsdWctaW5zPC9hPjwvbGk+CgkJCQk8bGk+PGEgaHJlZj0idGVhbS5waHAiPlRlYW0gUmVwb3NpdG9yeSBwcm92aWRlcnM8L2E+PC9saT4KCQkJPC91bD4KCQk8L2Rpdj4KCQk8L2Rpdj4KICAKCgk8PyAKICAgICRodG1sID0gb2JfZ2V0X2NvbnRlbnRzKCk7CiAgICBvYl9lbmRfY2xlYW4oKTsKCgoJIyBHZW5lcmF0ZSB0aGUgd2ViIHBhZ2UKCSRBcHAtPmdlbmVyYXRlUGFnZSgkdGhlbWUsICRNZW51LCAkTmF2LCAkcGFnZUF1dGhvciwgJHBhZ2VLZXl3b3JkcywgJHBhZ2VUaXRsZSwgJGh0bWwpOwo/Pgo=