PD9waHAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVpcmVfb25jZSgkX1NFUlZFUlsnRE9DVU1FTlRfUk9PVCddIC4gIi9lY2xpcHNlLm9yZy1jb21tb24vc3lzdGVtL2FwcC5jbGFzcy5waHAiKTsgICByZXF1aXJlX29uY2UoJF9TRVJWRVJbJ0RPQ1VNRU5UX1JPT1QnXSAuICIvZWNsaXBzZS5vcmctY29tbW9uL3N5c3RlbS9uYXYuY2xhc3MucGhwIik7ICAgcmVxdWlyZV9vbmNlKCRfU0VSVkVSWydET0NVTUVOVF9ST09UJ10gLiAiL2VjbGlwc2Uub3JnLWNvbW1vbi9zeXN0ZW0vbWVudS5jbGFzcy5waHAiKTsgICRBcHAgICAgPSBuZXcgQXBwKCk7ICAgICROYXYgICAgPSBuZXcgTmF2KCk7ICAgICRNZW51ICAgPSBuZXcgTWVudSgpOyAgICAgICBpbmNsdWRlKCRBcHAtPmdldFByb2plY3RDb21tb24oKSk7ICAgICMgQWxsIG9uIHRoZSBzYW1lIGxpbmUgdG8gdW5jbHV0dGVyIHRoZSB1c2VyJ3MgZGVza3RvcCcKCiAgICAjKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAgICMKICAgICMgL20ydC13ZWIvcHJvamVjdC1pbmZvL20ydC1nYWxpbGVvLWlwLWxvZy5waHAKICAgICMKICAgICMgQXV0aG9yOiAgICAgICBQYXVsIEVsZGVyCiAgICAjIERhdGU6ICAgICAgICAgMjAwOS0wNi0xMQogICAgIwogICAgIyBEZXNjcmlwdGlvbjogU3RhdGljIHNuYXBzaG90IG9mIE0yVCBJUCBMb2cuCiAgICAjCiAgICAjCiAgICAjKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICAgCiAgICAjCiAgICAjIEJlZ2luOiBwYWdlLXNwZWNpZmljIHNldHRpbmdzLiAgQ2hhbmdlIHRoZXNlLiAKICAgICRwYWdlVGl0bGUgICAgICA9ICJBcHByb3ZlZCBJUCBMb2cgZm9yIG1vZGVsaW5nLm0ydCAtIEdhbGlsZW8gUmVsZWFzZSAoeHBhbmQgMC43LCBhY2NlbGVvIDAuOCwgamV0IDEuMCkiOwogICAgJHBhZ2VLZXl3b3JkcyAgID0gIkVjbGlwc2UsIE1vZGVsaW5nLCBNb2RlbCB0byB0ZXh0LCBNMlQsIGpldCwgeHBhbmQsIGFjY2VsZW8sIGdhbGlsZW8sIGlwLCBsb2csIGlwIGxvZyI7CiAgICAkcGFnZUF1dGhvciAgICAgPSAiUGF1bCBFbGRlciI7CiAgICAKICAgICMgQWRkIHBhZ2Utc3BlY2lmaWMgTmF2IGJhcnMgaGVyZQogICAgIyBGb3JtYXQgaXMgTGluayB0ZXh0LCBsaW5rIFVSTCAoY2FuIGJlIGh0dHA6Ly93d3cuc29tZW90aGVyc2l0ZS5jb20vKSwgdGFyZ2V0IChfc2VsZiwgX2JsYW5rKSwgbGV2ZWwgKDEsIDIgb3IgMykKICAgICMgJE5hdi0+YWRkTmF2U2VwYXJhdG9yKCJNeSBQYWdlIExpbmtzIiwgICAgImRvd25sb2Fkcy5waHAiKTsKICAgICMgJE5hdi0+YWRkQ3VzdG9tTmF2KCJNeSBMaW5rIiwgIm15cGFnZS5waHAiLCAiX3NlbGYiLCAzKTsKICAgICMgJE5hdi0+YWRkQ3VzdG9tTmF2KCJHb29nbGUiLCAiaHR0cDovL3d3dy5nb29nbGUuY29tLyIsICJfYmxhbmsiLCAzKTsKCiAgICAjIEVuZDogcGFnZS1zcGVjaWZpYyBzZXR0aW5ncwogICAgIwogICAgICAgIAogICAgIyBQYXN0ZSB5b3VyIEhUTUwgY29udGVudCBiZXR3ZWVuIHRoZSBtYXJrZXJzISAgCm9iX3N0YXJ0KCk7Cj8+ICAgICAgCjxkaXYgaWQ9Im1pZGNvbHVtbiI+Cgo8aDE+QXBwcm92ZWQgSVAgTG9nIGZvciBtb2RlbGluZy5tMnQgLSBHYWxpbGVvIFJlbGVhc2UgKHhwYW5kIDAuNywgYWNjZWxlbyAwLjgsIGpldCAxLjApPC9oMT4KCjxoMj5MaWNlbnNlczwvaDI+Cgo8aDI+VGhpcmQtUGFydHkgQ29kZTwvaDI+CgogICAgPHRhYmxlIGJvcmRlcj0iMSIgY2VsbHBhZGRpbmc9IjMiIGNlbGxzcGFjaW5nPSIwIj4KPHRyPgo8dGg+Q1E8L3RoPgo8dGg+VGhpcmQtUGFydHkgQ29kZTwvdGg+Cjx0aD5MaWNlbnNlPC90aD4KPHRoPlVzZTwvdGg+CjwvdHI+Cjx0cj4KICAgIDx0ZD48YSBocmVmPSJodHRwczovL2Rldi5lY2xpcHNlLm9yZy9pcHppbGxhL3Nob3dfYnVnLmNnaT9pZD0zMzYiPjMzNjwvYT48L3RkPgogICAgPHRkPkFwYWNoZSBUb21jYXQgVmVyc2lvbjogIDMuMi40PC90ZD4KCiAgICA8dGQ+QXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UgMS4xPC90ZD4KICAgIDx0ZD48L3RkPgogICAgPC90cj4KICAgIDx0cj4KICAgIDx0ZD48YSBocmVmPSJodHRwczovL2Rldi5lY2xpcHNlLm9yZy9pcHppbGxhL3Nob3dfYnVnLmNnaT9pZD0xNTU3Ij4xNTU3PC9hPjwvdGQ+CiAgICA8dGQ+QU5UTFIgcnVudGltZSBWZXJzaW9uOiAzLjA8L3RkPgogICAgPHRkPk5ldyBCU0QgbGljZW5zZTwvdGQ+CgogICAgPHRkPjwvdGQ+CiAgICA8L3RyPgogICAgPHRyPgogICAgPHRkPjxhIGhyZWY9Imh0dHBzOi8vZGV2LmVjbGlwc2Uub3JnL2lwemlsbGEvc2hvd19idWcuY2dpP2lkPTE1NzQiPjE1NzQ8L2E+PC90ZD4KICAgIDx0ZD54UGFuZCBWZXJzaW9uOiA0LjIuMDwvdGQ+CiAgICA8dGQ+RWNsaXBzZSBQdWJsaWMgTGljZW5zZTwvdGQ+CiAgICA8dGQ+PC90ZD4KCiAgICA8L3RyPgogICAgPHRyPgogICAgPHRkPjxhIGhyZWY9Imh0dHBzOi8vZGV2LmVjbGlwc2Uub3JnL2lwemlsbGEvc2hvd19idWcuY2dpP2lkPTE1NzYiPjE1NzY8L2E+PC90ZD4KICAgIDx0ZD5vcmcuYXBhY2hlLmNvbW1vbnMubG9nZ2luZyAgVmVyc2lvbjogMS4wLjQ8L3RkPgogICAgPHRkPkFwYWNoZSBMaWNlbnNlLCAyLjA8L3RkPgogICAgPHRkPjwvdGQ+CiAgICA8L3RyPgoKICAgIDx0cj4KICAgIDx0ZD48YSBocmVmPSJodHRwczovL2Rldi5lY2xpcHNlLm9yZy9pcHppbGxhL3Nob3dfYnVnLmNnaT9pZD0xODI3Ij4xODI3PC9hPjwvdGQ+CiAgICA8dGQ+SUNVNEogMy42LjE8L3RkPgogICAgPHRkPlguTmV0IExpY2Vuc2UgKElDVTRKIExpY2Vuc2UsIE1JVCBTdHlsZSk8L3RkPgogICAgPHRkPm1vZGlmaWVkIHNvdXJjZSZuYnNwOyZhbXA7Jm5ic3A7YmluYXJ5PC90ZD4KICAgIDwvdHI+CgogICAgPHRyPgogICAgPHRkPjxhIGhyZWY9Imh0dHBzOi8vZGV2LmVjbGlwc2Uub3JnL2lwemlsbGEvc2hvd19idWcuY2dpP2lkPTI1MTEiPjI1MTE8L2E+PC90ZD4KICAgIDx0ZD5NVEwgVmVyc2lvbjogMC43LjA8L3RkPgogICAgPHRkPk9iamVjdCBNYW5hZ2VtZW50IEdyb3VwIExpY2Vuc2U8L3RkPgogICAgPHRkPnVubW9kaWZpZWQgc291cmNlIDwvdGQ+CiAgICA8L3RyPgogICAgPHRyPgoKICAgIDx0ZD48YSBocmVmPSJodHRwczovL2Rldi5lY2xpcHNlLm9yZy9pcHppbGxhL3Nob3dfYnVnLmNnaT9pZD0yNTE4Ij4yNTE4PC9hPjwvdGQ+CiAgICA8dGQ+TVRMIE1PRiBNb2RlbHMgVG8gVGV4dCBUcmFuc2Zvcm1hdGlvbiBMYW5ndWFnZSBTcGVjaWZpY2F0aW9uIFZlcnNpb246IDEuMDwvdGQ+CiAgICA8dGQ+T2JqZWN0IE1hbmFnZW1lbnQgR3JvdXAgTGljZW5zZTwvdGQ+CiAgICA8dGQ+dW5tb2RpZmllZCBzb3VyY2UmbmJzcDsmYW1wOyZuYnNwO2JpbmFyeTwvdGQ+CiAgICA8L3RyPgogICAgPHRyPgoKICAgIDx0ZD48YSBocmVmPSJodHRwczovL2Rldi5lY2xpcHNlLm9yZy9pcHppbGxhL3Nob3dfYnVnLmNnaT9pZD0yOTkxIj4yOTkxPC9hPjwvdGQ+CiAgICA8dGQ+QU5UTFIgVmVyc2lvbjogMy4wIFJ1bnRpbWUgKFBCIENRMTM1OSk8L3RkPgogICAgPHRkPk5ldyBCU0QgbGljZW5zZTwvdGQ+CiAgICA8dGQ+dW5tb2RpZmllZCBzb3VyY2UmbmJzcDsmYW1wOyZuYnNwO2JpbmFyeTwvdGQ+CiAgICA8L3RyPgogICAgPHRyPgoKICAgIDx0ZD48YSBocmVmPSJodHRwczovL2Rldi5lY2xpcHNlLm9yZy9pcHppbGxhL3Nob3dfYnVnLmNnaT9pZD0yOTkyIj4yOTkyPC9hPjwvdGQ+CiAgICA8dGQ+Q29tbW9ucyBMb2dnaW5nIFZlcnNpb246IDEuMC40IChQQiBDUTEzMyk8L3RkPgogICAgPHRkPkFwYWNoZSBMaWNlbnNlLCAyLjA8L3RkPgogICAgPHRkPnVubW9kaWZpZWQgc291cmNlJm5ic3A7JmFtcDsmbmJzcDtiaW5hcnk8L3RkPgogICAgPC90cj4KICAgIDx0cj4KCiAgICA8dGQ+PGEgaHJlZj0iaHR0cHM6Ly9kZXYuZWNsaXBzZS5vcmcvaXB6aWxsYS9zaG93X2J1Zy5jZ2k/aWQ9MzA3NiI+MzA3NjwvYT48L3RkPgogICAgPHRkPlhwYW5kIE1pZGRsZUVuZDwvdGQ+CiAgICA8dGQ+RWNsaXBzZSBQdWJsaWMgTGljZW5zZTwvdGQ+CiAgICA8dGQ+PC90ZD4KICAgIDwvdHI+CiAgICA8dHI+CiAgICA8dGQ+PGEgaHJlZj0iaHR0cHM6Ly9kZXYuZWNsaXBzZS5vcmcvaXB6aWxsYS9zaG93X2J1Zy5jZ2k/aWQ9MzExNiI+MzExNjwvYT48L3RkPgoKICAgIDx0ZD5NMlQgWHBhbmQgWFNEIEFkYXB0ZXI8L3RkPgogICAgPHRkPkVjbGlwc2UgUHVibGljIExpY2Vuc2U8L3RkPgogICAgPHRkPjwvdGQ+CiAgICA8L3RyPgogICAgPHRyPgogICAgPHRkPjxhIGhyZWY9Imh0dHBzOi8vZGV2LmVjbGlwc2Uub3JnL2lwemlsbGEvc2hvd19idWcuY2dpP2lkPTMxODQiPjMxODQ8L2E+PC90ZD4KICAgIDx0ZD5BT1AgQWxsaWFuY2UgVmVyc2lvbjogMS4wICh1c2luZyBmcm9tIE9yYml0IENRMzA4Nyk8L3RkPgoKICAgIDx0ZD5QdWJsaWMgRG9tYWluPC90ZD4KICAgIDx0ZD51bm1vZGlmaWVkIGJpbmFyeSA8L3RkPgogICAgPC90cj4KICAgIDwvdGFibGU+CjxwLz4KPHA+PGVtPk5vIHByZS1yZXEgZGVwZW5kZW5jaWVzPC9lbT48L3A+CjxoMj5Db21taXR0ZXJzPC9oMj4KPGRpdj5UaGlzIHRhYmxlIGxpc3RzIGV2ZXJ5b25lIHdobyBpcywgb3IgZXZlciBoYXMgYmVlbiwgYSBjb21taXR0ZXIuCiAgICAgICAgVGhlIG9ubHkgcmVhc29ucyB0byByZW1vdmUgc29tZW9uZSBmcm9tIHRoaXMgbGlzdCBhcmUgKGkpIGlmIHRoZXkgbmV2ZXIKICAgICAgICB3ZXJlIGEgY29tbWl0dGVyLCAoaWkpIGl0IGlzIGEgYm9ndXMgbGlzdGluZyBzdWNoIGFzICdyb290Jywgb3IgKGlpaSkgYWxsCiAgICAgICAgdGhlIGNvZGUgdGhhdCBwZXJzb24gd3JvdGUgaXMgbm93IG9ic29sZXRlIGFuZCBubyBsb25nZXIgYmVpbmcgc2hpcHBlZC4KICAgICAgICBUaGlzIGxpc3QgbXVzdCBpbmNsdWRlIGV2ZXJ5b25lIHdobyBjb21taXR0ZWQgYW55IGNvZGUgb3Igb3RoZXIgZmlsZXMgYXJlCiAgICAgICAgYmVpbmcgZGlzdHJpYnV0ZWQgaW4gdGhlIGN1cnJlbnQgcmVsZWFzZS48L2Rpdj4KCiAgICAKCjx0YWJsZSBib3JkZXI9IjEiIGNlbGxwYWRkaW5nPSIzIiBjZWxsc3BhY2luZz0iMCI+Cjx0cj4KICAgICAgICA8dGggY29sc3Bhbj0iMiI+UGFzdCBhbmQKICAgICAgICBQcmVzZW50IEFjdGl2ZTwvdGg+CiAgICA8L3RyPgo8dHI+PHRoPk5hbWU8L3RoPgo8dGg+T3JnYW5pemF0aW9uPC90aD4KPC90cj4KPHRyPgogICAgPHRkPmFuZHJlIEFybm9sZDwvdGQ+CgogICAgPHRkPiA8L3RkPgogICAgICAgIDwvdHI+CiAgICA8dHI+CiAgICA8dGQ+TmljayBCb2xkdDwvdGQ+CiAgICA8dGQ+UmVkIEhhdCwgSW5jLiA8L3RkPgogICAgICAgIDwvdHI+CiAgICA8dHI+CiAgICA8dGQ+Q2VkcmljICBCcnVuPC90ZD4KICAgIDx0ZD5PQkVPIDwvdGQ+CiAgICAgICAgPC90cj4KICAgIDx0cj4KICAgIDx0ZD5Kb2VsIENoZXVvdWE8L3RkPgogICAgPHRkPiA8L3RkPgoKICAgICAgICA8L3RyPgogICAgPHRyPgogICAgPHRkPlN2ZW4gRWZmdGluZ2U8L3RkPgogICAgPHRkPml0ZW1pcyBBRyA8L3RkPgogICAgICAgIDwvdHI+CgogICAgPHRyPgogICAgPHRkPlBhdWwgRWxkZXI8L3RkPgogICAgPHRkPklCTSA8L3RkPgogICAgICAgIDwvdHI+CiAgICA8dHI+CgogICAgPHRkPlBldGVyIEZyaWVzZTwvdGQ+CiAgICA8dGQ+aXRlbWlzIEFHIDwvdGQ+CiAgICAgICAgPC90cj4KICAgIDx0cj4KICAgIDx0ZD5MYXVyZW50IEdvdWJldDwvdGQ+CgogICAgPHRkPk9CRU8gPC90ZD4KICAgICAgICA8L3RyPgogICAgPHRyPgogICAgPHRkPkFybm8gSGFhc2U8L3RkPgogICAgPHRkPiA8L3RkPgogICAgICAgIDwvdHI+CiAgICA8dHI+CiAgICA8dGQ+RGVubmlzIEj8Ym5lcjwvdGQ+CiAgICA8dGQ+aXRlbWlzIEFHIDwvdGQ+CiAgICAgICAgPC90cj4KICAgIDx0cj4KICAgIDx0ZD5KYW4gS29laG5sZWluPC90ZD4KICAgIDx0ZD5pdGVtaXMgQUcgPC90ZD4KCiAgICAgICAgPC90cj4KICAgIDx0cj4KICAgIDx0ZD5CZXJuZCBLb2xiPC90ZD4KICAgIDx0ZD5TQVAgQUcgPC90ZD4KICAgICAgICA8L3RyPgoKICAgIDx0cj4KICAgIDx0ZD5Kb25hdGhhbiBNdXNzZXQ8L3RkPgogICAgPHRkPk9CRU8gPC90ZD4KICAgICAgICA8L3RyPgogICAgPHRyPgoKICAgIDx0ZD5QYXRyaWNrIFNjaG9lbmJhY2g8L3RkPgogICAgPHRkPml0ZW1pcyBBRyA8L3RkPgogICAgICAgIDwvdHI+CiAgICA8dHI+CiAgICA8dGQ+S2Fyc3RlbiBUaG9tczwvdGQ+CgogICAgPHRkPml0ZW1pcyBBRyA8L3RkPgogICAgICAgIDwvdHI+CiAgICA8L3RhYmxlPgo8cD4KPGRpdj5UaGlzIHRhYmxlIGxpc3RzIGNvbW1pdHRlcnMgd2hvIGRvIG5vdCBhcHBlYXIgdG8gaGF2ZSBjb21taXR0ZWQgYW55IGNvZGUgb3IKICAgICAgICBmaWxlcyB0byB0aGUgcHJvamVjdC4gVGhpcyBpcyBhICdiZXN0LWd1ZXNzJyB0YWJsZSBiYXNlZCBvbiB0aGUgY29tbWl0cyBleHBsb3JlcgogICAgICAgIGRhdGEuIElmIHNvbWVvbmUgbGlzdGVkIGhlcmUgYWN0dWFsbHkgaGFzIGNvbW1pdHRlZCBjb2RlLCBwbGVhc2UgY29ycmVjdCB0aGUKICAgICAgICB0YWJsZSBieSBtYWtpbmcgdGhlbSBhY3RpdmUuPC9kaXY+CiAgICAKCgo8dGFibGUgYm9yZGVyPSIxIiBjZWxscGFkZGluZz0iMyIgY2VsbHNwYWNpbmc9IjAiPgo8dHI+CiAgICAgICAgPHRoIGNvbHNwYW49IjIiPk5ldmVyCiAgICAgICAgQWN0aXZlPC90aD4KICAgIDwvdHI+Cjx0cj48dGg+TmFtZTwvdGg+Cjx0aD5Pcmdhbml6YXRpb248L3RoPgo8L3RyPgo8dHI+CiAgICAgICAgPHRkPkNocmlzIEFuaXN6Y3p5azwvdGQ+CiAgICAgICAgPHRkPkNvZGUgOSA8L3RkPgogICAgICAgICAgICAgICAgPC90cj4KICAgICAgICA8dHI+CiAgICAgICAgPHRkPldpbSBCYXN0PC90ZD4KICAgICAgICA8dGQ+IDwvdGQ+CiAgICAgICAgICAgICAgICA8L3RyPgogICAgICAgIDx0cj4KICAgICAgICA8dGQ+V2ltIEJhc3Q8L3RkPgogICAgICAgIDx0ZD5Db21wdXdhcmUgPC90ZD4KICAgICAgICAgICAgICAgIDwvdHI+CiAgICAgICAgPHRyPgogICAgICAgIDx0ZD5IZWlrbyBCZWhyZW5zPC90ZD4KICAgICAgICA8dGQ+aXRlbWlzIEFHIDwvdGQ+CiAgICAgICAgICAgICAgICA8L3RyPgogICAgICAgIDx0cj4KICAgICAgICA8dGQ+Sm9lbCBDYXluZTwvdGQ+CiAgICAgICAgPHRkPklCTSA8L3RkPgogICAgICAgICAgICAgICAgPC90cj4KICAgICAgICA8dHI+CiAgICAgICAgPHRkPkZyYW5rIENvcm5lbGlzc2VuPC90ZD4KICAgICAgICA8dGQ+Q29tcHV3YXJlIDwvdGQ+CiAgICAgICAgICAgICAgICA8L3RyPgogICAgICAgIDx0cj4KICAgICAgICA8dGQ+TWFya3VzIFZvZWx0ZXI8L3RkPgogICAgICAgIDx0ZD5pdGVtaXMgQUcgPC90ZD4KICAgICAgICAgICAgICAgIDwvdHI+CiAgICAgICAgPHRyPgogICAgICAgIDx0ZD5hcmphbiBrb2s8L3RkPgogICAgICAgIDx0ZD4gPC90ZD4KICAgICAgICAgICAgICAgIDwvdHI+CiAgICAgICAgICAgIDwvdGFibGU+CiAgICA8cD4KICAgIDxoMj5Db250cmlidXRvcnMgYW5kIFRoZWlyIENvbnRyaWJ1dGlvbnM8L2gyPgo8ZGl2PgogICAgVGhpcyB0YWJsZSBsaXN0cywgYnkgY29udHJpYnV0b3IgYW5kIHRoZW4gYnkgYnVnICMsIGFsbCB0aGUgbm9uLWNvbW1pdHRlciBjb250cmlidXRpb25zLgogICAgVGhpcyBzZWN0aW9uIGlzIHByb2JhYmx5IHRoZSB3ZWFrZXN0IG9mIHRoZSBhdXRvbWF0ZWQgZGF0YSBnYXRoZXJpbmcgYmVjYXVzZSB0aGVyZSBhcmUgCiAgICBzbyBtYW55IGJ1Z3MgYW5kIHNvIG1hbnkgZGlmZmVyZW50IHdheXMgdGhhdCBwZW9wbGUgaGF2ZSBub3RlZCBjb250cmlidXRpb25zIG92ZXIgdGltZS48cD4KICAgIFRvIG5vdGUgYSBjb250cmlidXRpb246CiAgICA8dWw+CgogICAgPGxpPkluY2x1ZGUgdGhlIGNvbnRyaWJ1dGlvbiBhcyBhIHBhdGNoIG9uIGEgYnVnIGFuZCBhZGQgdGhlICJpcGxvZysiIGZsYWcgdG8gdGhhdCBhdHRhY2htZW50LgogICAgPGxpPkluY2x1ZGUgdGhlIGNvbnRyaWJ1dGlvbiBhcyBhIGNvbW1lbnQgb24gYSBidWcgYW5kIGFkZCB0aGUgImlwbG9nKyIgZmxhZyB0byB0aGUgYnVnLiAoTm90ZSB0aGF0IHRoaXMKICAgICAgICB3aWxsIGFkZCBhbGwgdGhlIGNvbW1lbnRlcnMgb2YgdGhlIGJ1ZyBhcyBjb250cmlidXRvcnMgYW5kIHRoZW4geW91J2xsIGhhdmUgdG8gJ2V4Y2x1ZGUnIGFsbCB0aG9zZQogICAgICAgIHdobyBkaWQgbm90IGNvbnRyaWJ1dGUuIEJldHRlciB0byB1c2UgcGF0Y2ggYXR0YWNobWVudHMgaWYgcG9zc2libGUuKQogICAgPC91bD4KICAgIDxwPgogICAgTm90ZSB0aGF0IHRoaXMgdGFibGUgaW5jbHVkZXMgYWxsIGNvbnRyaWJ1dGlvbnMgdGhhdCBhcmUgYmVpbmcgZGlzdHJpYnV0ZWQgaW4gdGhlIGNvZGUuCiAgICBUaGUgcmVhc29ucyB0byBjb3JyZWN0L3JlbW92ZSBlbnRyaWVzIGZyb20gdGhpcyB0YWJsZSBhcmU6PHVsPgogICAgPGxpPlRoZSBhbGdvcml0aG0gaW5jb3JyZWN0bHkgY2xhc3NpZmllZCBzb21ldGhpbmcgYXMgYSBjb250cmlidXRpb24gd2hlbiBpdCByZWFsbHkgd2Fzbid0CiAgICAgICAgICAgIGEgY29udHJpYnV0aW9uLgogICAgPGxpPlRoZSBjb250cmlidXRpb24gaXNuJ3Qvd2Fzbid0IHVzZWQgYXQgYWxsLiBOb3RlIHRoYXQgaWYganVzdCBvbmUgbGluZSBvZiBhIGZpbGUgaXMgdXNlZCwKICAgICAgICAgICAgdGhlbiB0aGUgY29udHJpYnV0aW9uIGlzIGNvbnNpZGVyZWQgYXMgaGF2aW5nIGJlZW4gdXNlZC4gSWYgcG9zc2libGUsIG1hcmsgdGhlCiAgICAgICAgICAgIGF0dGFjaG1lbnQgYXMgb2Jzb2xldGUgaW4gYnVnemlsbGE7IG90aGVyd2lzZSwgdXNlIHRoZSBjb3JyZWN0aW9ucyB0byBtYWtlIHRoZSBjaGFuZ2UuCiAgICA8L3VsPgogICAgUGxlYXNlIG5vdGUgdGhhdCBpZiBwZXJzb24gWCB3YXMgYSBjb250cmlidXRvciBhbmQgbGF0ZXIgYmVjYW1lIGEgY29tbWl0dGVyLCBoZSBvciBzaGUgd2lsbAogICAgYmUgbGlzdGVkIGJvdGggYWJvdmUgaW4gdGhlIGNvbW1pdHRlciB0YWJsZSAoZm9yIGhpcy9oZXIgd29yayBhcyBhIGNvbW1pdHRlcikgCiAgICBhbmQgaGVyZSBpbiB0aGUgY29udHJpYnV0b3IgdGFibGUgKGZvciBoaXMvaGVyIHdvcmsgcHJpb3IgdG8gYmVjb21pbmcgYSBjb21taXR0ZXIpLgogICAgPC9kaXY+CiAgICA8dGFibGUgYm9yZGVyPSIxIiBjZWxscGFkZGluZz0iMyIgY2VsbHNwYWNpbmc9IjAiPgoKPHRyPgo8dGg+QnVnPC90aD4KPHRoPlNpemU8L3RoPgo8dGg+RGVzY3JpcHRpb248L3RoPgo8L3RyPgo8dHI+PHRkIGNvbHNwYW49IjMiIHN0eWxlPSJiYWNrZ3JvdW5kLWNvbG9yOiAjREREREREIj5GcmVkZHkmbmJzcDtBbGxpbGFpcmUgKG9iZW8uZnIpPC90ZD4KCiAgICAgICAgPC90cj4KICAgIDx0cj4KICAgICAgICA8dGQ+PGEgaHJlZj0iaHR0cHM6Ly9idWdzLmVjbGlwc2Uub3JnL2J1Z3Mvc2hvd19idWcuY2dpP2lkPTI0OTc3NCI+MjQ5Nzc0PC9hPjwvdGQ+CiAgICAgICAgPHRkPjE2ODwvdGQ+CiAgICAgICAgPHRkPltDb250cmlidXRpb25dIE5ldyB1bml0IHRlc3RzIGZvciBNVEwgRW5naW5lIHBsdWdpbiB0ZXN0PGJyPmNvbW1lbnQgIzA8L3RkPgoKICAgICAgICAgICAgICAgIDwvdHI+CiAgICA8dHI+PHRkIGNvbHNwYW49IjMiIHN0eWxlPSJiYWNrZ3JvdW5kLWNvbG9yOiAjREREREREIj5BbmRy6SZuYnNwO0Fybm9sZCAoZ214LmRlKTwvdGQ+CiAgICAgICAgPC90cj4KICAgIDx0cj4KICAgICAgICA8dGQ+PGEgaHJlZj0iaHR0cHM6Ly9idWdzLmVjbGlwc2Uub3JnL2J1Z3Mvc2hvd19idWcuY2dpP2lkPTI2MzY1MCI+MjYzNjUwPC9hPjwvdGQ+CgogICAgICAgIDx0ZD41NjUuM0s8L3RkPgogICAgICAgIDx0ZD5Db21wbGV0ZSBYdGVuZCBhbmQgWHBhbmQgbWlkZGxlZW5kIHRvIGludGVycHJldGUgWHBhbmQvWHRlbmQgY29kZSB1c2luZyB0aGUgWHRlbmQgYmFja2VuZDxicj5wYXRjaHNldCBmaXhpbmcgdGhpcyBpc3N1ZTwvdGQ+CiAgICAgICAgICAgICAgICA8L3RyPgogICAgPHRyPgogICAgICAgIDx0ZD48YSBocmVmPSJodHRwczovL2J1Z3MuZWNsaXBzZS5vcmcvYnVncy9zaG93X2J1Zy5jZ2k/aWQ9Mjc0NjE3Ij4yNzQ2MTc8L2E+PC90ZD4KCiAgICAgICAgPHRkPjgwOTwvdGQ+CiAgICAgICAgPHRkPkFkZCBnZXR0ZXIgZm9yIHdpbGRjYXJkUGFyYW1zIG9uIEFkdmljZTxicj5wYXRjaHNldCBmaXhpbmcgdGhpcyBpc3N1ZTwvdGQ+CiAgICAgICAgICAgICAgICA8L3RyPgogICAgPHRyPgogICAgICAgIDx0ZD48YSBocmVmPSJodHRwczovL2J1Z3MuZWNsaXBzZS5vcmcvYnVncy9zaG93X2J1Zy5jZ2k/aWQ9Mjc0NjE5Ij4yNzQ2MTk8L2E+PC90ZD4KCiAgICAgICAgPHRkPjk0MjwvdGQ+CiAgICAgICAgPHRkPkZpeCBoYW5kbGluZyBvZiBkZWZhdWx0IGZpbGUgZW5jb2Rpbmc8YnI+cGF0Y2hzZXQgZml4aW5nIHRoaXMgaXNzdWU8L3RkPgogICAgICAgICAgICAgICAgPC90cj4KICAgIDx0cj4KICAgICAgICA8dGQ+PGEgaHJlZj0iaHR0cHM6Ly9idWdzLmVjbGlwc2Uub3JnL2J1Z3Mvc2hvd19idWcuY2dpP2lkPTI3NTA3OSI+Mjc1MDc5PC9hPjwvdGQ+CgogICAgICAgIDx0ZD40LjVLPC90ZD4KICAgICAgICA8dGQ+Rml4IGJ1Z3MgaW4gWHRlbmQgLyBYcGFuZCBtaWRkbGVlbmQgcmVsYXRlZCB0byBjaGFuZ2VzIGluIE1XRTxicj5GaXhlcyBhbGwgY29tcGlsZSBpc3N1ZXMgZHVlIHRvIE1XRSBjaGFuZ2VzPC90ZD4KICAgICAgICAgICAgICAgIDwvdHI+CiAgICA8dHI+CiAgICAgICAgPHRkPjxhIGhyZWY9Imh0dHBzOi8vYnVncy5lY2xpcHNlLm9yZy9idWdzL3Nob3dfYnVnLmNnaT9pZD0yNzUwODAiPjI3NTA4MDwvYT48L3RkPgoKICAgICAgICA8dGQ+NC4ySzwvdGQ+CiAgICAgICAgPHRkPkZpeCB2ZXJzaW9uIG9mIFhwYW5kIGFuZCBYdGVuZCBtaWRkbGVlbmQ8YnI+Q29ycmVjdHMgcGx1Z2luIHZlcnNpb25zIGFuZCBFTUYgZGVwZW5kZW5jeTwvdGQ+CiAgICAgICAgICAgICAgICA8L3RyPgogICAgPHRyPgogICAgICAgIDx0ZD48YSBocmVmPSJodHRwczovL2J1Z3MuZWNsaXBzZS5vcmcvYnVncy9zaG93X2J1Zy5jZ2k/aWQ9MjYzNjUwIj4yNjM2NTA8L2E+PC90ZD4KCiAgICAgICAgPHRkPjEuMEs8L3RkPgogICAgICAgIDx0ZD5Db21wbGV0ZSBYdGVuZCBhbmQgWHBhbmQgbWlkZGxlZW5kIHRvIGludGVycHJldGUgWHBhbmQvWHRlbmQgY29kZSB1c2luZyB0aGUgWHRlbmQgYmFja2VuZDxicj5jb21tZW50ICMwPC90ZD4KICAgICAgICAgICAgICAgIDwvdHI+CiAgICA8dHI+CiAgICAgICAgPHRkPjxhIGhyZWY9Imh0dHBzOi8vYnVncy5lY2xpcHNlLm9yZy9idWdzL3Nob3dfYnVnLmNnaT9pZD0yNjM2NTAiPjI2MzY1MDwvYT48L3RkPgoKICAgICAgICA8dGQ+MTk5PC90ZD4KICAgICAgICA8dGQ+Q29tcGxldGUgWHRlbmQgYW5kIFhwYW5kIG1pZGRsZWVuZCB0byBpbnRlcnByZXRlIFhwYW5kL1h0ZW5kIGNvZGUgdXNpbmcgdGhlIFh0ZW5kIGJhY2tlbmQ8YnI+Y29tbWVudCAjMjwvdGQ+CiAgICAgICAgICAgICAgICA8L3RyPgogICAgPHRyPgogICAgICAgIDx0ZD48YSBocmVmPSJodHRwczovL2J1Z3MuZWNsaXBzZS5vcmcvYnVncy9zaG93X2J1Zy5jZ2k/aWQ9MjYzNjUwIj4yNjM2NTA8L2E+PC90ZD4KCiAgICAgICAgPHRkPjczPC90ZD4KICAgICAgICA8dGQ+Q29tcGxldGUgWHRlbmQgYW5kIFhwYW5kIG1pZGRsZWVuZCB0byBpbnRlcnByZXRlIFhwYW5kL1h0ZW5kIGNvZGUgdXNpbmcgdGhlIFh0ZW5kIGJhY2tlbmQ8YnI+Y29tbWVudCAjMzwvdGQ+CiAgICAgICAgICAgICAgICA8L3RyPgogICAgPHRyPgogICAgICAgIDx0ZD48YSBocmVmPSJodHRwczovL2J1Z3MuZWNsaXBzZS5vcmcvYnVncy9zaG93X2J1Zy5jZ2k/aWQ9MjYzNjUwIj4yNjM2NTA8L2E+PC90ZD4KCiAgICAgICAgPHRkPjE2NzwvdGQ+CiAgICAgICAgPHRkPkNvbXBsZXRlIFh0ZW5kIGFuZCBYcGFuZCBtaWRkbGVlbmQgdG8gaW50ZXJwcmV0ZSBYcGFuZC9YdGVuZCBjb2RlIHVzaW5nIHRoZSBYdGVuZCBiYWNrZW5kPGJyPmNvbW1lbnQgIzQ8L3RkPgogICAgICAgICAgICAgICAgPC90cj4KICAgIDx0cj48dGQgY29sc3Bhbj0iMyIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNEREREREQiPkplcm9tZSZuYnNwO0JFTk9JUyAob2Jlby5mcik8L3RkPgogICAgICAgIDwvdHI+CiAgICA8dHI+CiAgICAgICAgPHRkPjxhIGhyZWY9Imh0dHBzOi8vYnVncy5lY2xpcHNlLm9yZy9idWdzL3Nob3dfYnVnLmNnaT9pZD0yNjA1NDQiPjI2MDU0NDwvYT48L3RkPgogICAgICAgIDx0ZD4xNTc8L3RkPgogICAgICAgIDx0ZD5BZGQgY3Jvc3NSZWZlcmVuY2VzIG9wZXJhdGlvbiBpbiBNVExOb25TdGFuZGFyZExpYnJhcnk8YnI+Y29tbWVudCAjMDwvdGQ+CiAgICAgICAgICAgICAgICA8L3RyPgogICAgPHRyPgogICAgICAgIDx0ZD48YSBocmVmPSJodHRwczovL2J1Z3MuZWNsaXBzZS5vcmcvYnVncy9zaG93X2J1Zy5jZ2k/aWQ9MjYwNTQ0Ij4yNjA1NDQ8L2E+PC90ZD4KICAgICAgICA8dGQ+NTc8L3RkPgogICAgICAgIDx0ZD5BZGQgY3Jvc3NSZWZlcmVuY2VzIG9wZXJhdGlvbiBpbiBNVExOb25TdGFuZGFyZExpYnJhcnk8YnI+Y29tbWVudCAjMTwvdGQ+CiAgICAgICAgICAgICAgICA8L3RyPgogICAgPHRyPjx0ZCBjb2xzcGFuPSIzIiBzdHlsZT0iYmFja2dyb3VuZC1jb2xvcjogI0RERERERCI+SGVpa28mbmJzcDtCZWhyZW5zIChpdGVtaXMuZGUpPC90ZD4KICAgICAgICA8L3RyPgogICAgPHRyPgoKICAgICAgICA8dGQ+PGEgaHJlZj0iaHR0cHM6Ly9idWdzLmVjbGlwc2Uub3JnL2J1Z3Mvc2hvd19idWcuY2dpP2lkPTI2NDM2MyI+MjY0MzYzPC9hPjwvdGQ+CiAgICAgICAgPHRkPjEuMks8L3RkPgogICAgICAgIDx0ZD5bWHRlbmRdIE5vIG1lYW5pbmdmdWwgZXhjZXB0aW9uIHdoZW4gcmVleHBvcnRpbmcgYW4gdW5rbm93biBleHRlbnNpb248YnI+RXhjZXB0aW9uIHRoYXQgbmFtZXMgaW1wb3J0ZXIgYW5kIHVua25vd24gZXh0ZW5zaW9uIGZpbGUgdGhhdCBzaG91bGQgYmUgaW1wb3J0ZWQ8L3RkPgogICAgICAgICAgICAgICAgPC90cj4KICAgIDx0cj4KCiAgICAgICAgPHRkPjxhIGhyZWY9Imh0dHBzOi8vYnVncy5lY2xpcHNlLm9yZy9idWdzL3Nob3dfYnVnLmNnaT9pZD0yNjQ1NjQiPjI2NDU2NDwvYT48L3RkPgogICAgICAgIDx0ZD40OS44SzwvdGQ+CiAgICAgICAgPHRkPltYdGVuZF0gRXhwcmVzc2lvbnMgY2Fubm90IHJlcHJlc2VudCBsYXJnZSBvcmRpbmFsIG51bWJlcnM8YnI+TG9uZy0+QmlnSW50ZWdlciwgSW1wbGljaXQgdHlwZSBjb252ZXJzaW9uIGZvciBqYXZhIGV4dGVuc2lvbnMsIG1pbm9yIGZpeGVzPC90ZD4KICAgICAgICAgICAgICAgIDwvdHI+CiAgICA8dHI+CgogICAgICAgIDx0ZD48YSBocmVmPSJodHRwczovL2J1Z3MuZWNsaXBzZS5vcmcvYnVncy9zaG93X2J1Zy5jZ2k/aWQ9Mjc0NTE2Ij4yNzQ1MTY8L2E+PC90ZD4KICAgICAgICA8dGQ+OS4xSzwvdGQ+CiAgICAgICAgPHRkPlNvbWUgYnVncyBpbiBFTUYgdHlwZXN5c3RlbTxicj5wYXRjaDwvdGQ+CiAgICAgICAgICAgICAgICA8L3RyPgogICAgPHRyPgoKICAgICAgICA8dGQ+PGEgaHJlZj0iaHR0cHM6Ly9idWdzLmVjbGlwc2Uub3JnL2J1Z3Mvc2hvd19idWcuY2dpP2lkPTI3NDUxOCI+Mjc0NTE4PC9hPjwvdGQ+CiAgICAgICAgPHRkPjEyLjlLPC90ZD4KICAgICAgICA8dGQ+U29tZSBidWdzIGluIFVNTCB0eXBlc3lzdGVtPGJyPnBhdGNoPC90ZD4KICAgICAgICAgICAgICAgIDwvdHI+CiAgICA8dHI+PHRkIGNvbHNwYW49IjMiIHN0eWxlPSJiYWNrZ3JvdW5kLWNvbG9yOiAjREREREREIj5TdGVwaGFuZSZuYnNwO0JvdWNoZXQgKG9iZW8uZnIpPC90ZD4KICAgICAgICA8L3RyPgogICAgPHRyPgogICAgICAgIDx0ZD48YSBocmVmPSJodHRwczovL2J1Z3MuZWNsaXBzZS5vcmcvYnVncy9zaG93X2J1Zy5jZ2k/aWQ9MjUwNjUwIj4yNTA2NTA8L2E+PC90ZD4KICAgICAgICA8dGQ+NDk3PC90ZD4KICAgICAgICA8dGQ+W1BBVENIXSBuZXcgTVRMIGV4YW1wbGUgOiBVbWwgMiBqYXZhPGJyPmNvbW1lbnQgIzA8L3RkPgogICAgICAgICAgICAgICAgPC90cj4KICAgIDx0cj4KICAgICAgICA8dGQ+PGEgaHJlZj0iaHR0cHM6Ly9idWdzLmVjbGlwc2Uub3JnL2J1Z3Mvc2hvd19idWcuY2dpP2lkPTI1MDY1MCI+MjUwNjUwPC9hPjwvdGQ+CiAgICAgICAgPHRkPjU0PC90ZD4KICAgICAgICA8dGQ+W1BBVENIXSBuZXcgTVRMIGV4YW1wbGUgOiBVbWwgMiBqYXZhPGJyPmNvbW1lbnQgIzE8L3RkPgogICAgICAgICAgICAgICAgPC90cj4KICAgIDx0cj4KICAgICAgICA8dGQ+PGEgaHJlZj0iaHR0cHM6Ly9idWdzLmVjbGlwc2Uub3JnL2J1Z3Mvc2hvd19idWcuY2dpP2lkPTI1MDY1MCI+MjUwNjUwPC9hPjwvdGQ+CiAgICAgICAgPHRkPjMyNTwvdGQ+CiAgICAgICAgPHRkPltQQVRDSF0gbmV3IE1UTCBleGFtcGxlIDogVW1sIDIgamF2YTxicj5jb21tZW50ICMzPC90ZD4KICAgICAgICAgICAgICAgIDwvdHI+CiAgICA8dHI+CiAgICAgICAgPHRkPjxhIGhyZWY9Imh0dHBzOi8vYnVncy5lY2xpcHNlLm9yZy9idWdzL3Nob3dfYnVnLmNnaT9pZD0yNTA2NTAiPjI1MDY1MDwvYT48L3RkPgogICAgICAgIDx0ZD41MjwvdGQ+CiAgICAgICAgPHRkPltQQVRDSF0gbmV3IE1UTCBleGFtcGxlIDogVW1sIDIgamF2YTxicj5jb21tZW50ICM0PC90ZD4KICAgICAgICAgICAgICAgIDwvdHI+CiAgICA8dHI+CiAgICAgICAgPHRkPjxhIGhyZWY9Imh0dHBzOi8vYnVncy5lY2xpcHNlLm9yZy9idWdzL3Nob3dfYnVnLmNnaT9pZD0yNTA2NTAiPjI1MDY1MDwvYT48L3RkPgogICAgICAgIDx0ZD42NDwvdGQ+CiAgICAgICAgPHRkPltQQVRDSF0gbmV3IE1UTCBleGFtcGxlIDogVW1sIDIgamF2YTxicj5jb21tZW50ICM1PC90ZD4KICAgICAgICAgICAgICAgIDwvdHI+CiAgICA8dHI+PHRkIGNvbHNwYW49IjMiIHN0eWxlPSJiYWNrZ3JvdW5kLWNvbG9yOiAjREREREREIj5FZG9hcmRvJm5ic3A7Q29tYXIgKHVrLmlibS5jb20pPC90ZD4KICAgICAgICA8L3RyPgogICAgPHRyPgoKICAgICAgICA8dGQ+PGEgaHJlZj0iaHR0cHM6Ly9idWdzLmVjbGlwc2Uub3JnL2J1Z3Mvc2hvd19idWcuY2dpP2lkPTI2MjkxNSI+MjYyOTE1PC9hPjwvdGQ+CiAgICAgICAgPHRkPjEuOEs8L3RkPgogICAgICAgIDx0ZD5BcHBseSBFY2xpcHNlIEpEVCBmb3JtYXR0ZXIgdG8gamV0LWdlbmVyYXRlZCBqYXZhIHNvdXJjZXM8YnI+Y29tbWVudCAjMDwvdGQ+CiAgICAgICAgICAgICAgICA8L3RyPgogICAgPHRyPgoKICAgICAgICA8dGQ+PGEgaHJlZj0iaHR0cHM6Ly9idWdzLmVjbGlwc2Uub3JnL2J1Z3Mvc2hvd19idWcuY2dpP2lkPTI2MjkxNSI+MjYyOTE1PC9hPjwvdGQ+CiAgICAgICAgPHRkPjM1OTwvdGQ+CiAgICAgICAgPHRkPkFwcGx5IEVjbGlwc2UgSkRUIGZvcm1hdHRlciB0byBqZXQtZ2VuZXJhdGVkIGphdmEgc291cmNlczxicj5jb21tZW50ICMyPC90ZD4KICAgICAgICAgICAgICAgIDwvdHI+CiAgICA8dHI+CgogICAgICAgIDx0ZD48YSBocmVmPSJodHRwczovL2J1Z3MuZWNsaXBzZS5vcmcvYnVncy9zaG93X2J1Zy5jZ2k/aWQ9MjYyOTE1Ij4yNjI5MTU8L2E+PC90ZD4KICAgICAgICA8dGQ+NTQ8L3RkPgogICAgICAgIDx0ZD5BcHBseSBFY2xpcHNlIEpEVCBmb3JtYXR0ZXIgdG8gamV0LWdlbmVyYXRlZCBqYXZhIHNvdXJjZXM8YnI+Y29tbWVudCAjMzwvdGQ+CiAgICAgICAgICAgICAgICA8L3RyPgogICAgPHRyPjx0ZCBjb2xzcGFuPSIzIiBzdHlsZT0iYmFja2dyb3VuZC1jb2xvcjogI0RERERERCI+TW9yaXR6Jm5ic3A7RXlzaG9sZHQgKGl0ZW1pcy5kZSk8L3RkPgogICAgICAgIDwvdHI+CiAgICA8dHI+CiAgICAgICAgPHRkPjxhIGhyZWY9Imh0dHBzOi8vYnVncy5lY2xpcHNlLm9yZy9idWdzL3Nob3dfYnVnLmNnaT9pZD0yNjg1NzciPjI2ODU3NzwvYT48L3RkPgogICAgICAgIDx0ZD43LjJLPC90ZD4KICAgICAgICA8dGQ+bWlzYyBidWdmaXhlcyBmb3IgWHBhbmQgbmVlZGVkIGJ5IHRoZSBYU0QgQWRhcHRlcjxicj54dGVuZCBmaXhlcyAwLjI8L3RkPgogICAgICAgICAgICAgICAgPC90cj4KICAgIDx0cj4KICAgICAgICA8dGQ+PGEgaHJlZj0iaHR0cHM6Ly9idWdzLmVjbGlwc2Uub3JnL2J1Z3Mvc2hvd19idWcuY2dpP2lkPTI3MzQ2NCI+MjczNDY0PC9hPjwvdGQ+CiAgICAgICAgPHRkPjg1OC4wSzwvdGQ+CiAgICAgICAgPHRkPlt0eXBlc3lzdGVtLnhzZF0gTWlncmF0ZSBkb2N1bWVudGF0aW9uIGZyb20gb0FXPGJyPnh0ZW5kLnR5cGVzeXN0ZW0ueHNkIERvY3VtZW50YXRpb24gSW1hZ2VzIDAuMTwvdGQ+CiAgICAgICAgICAgICAgICA8L3RyPgogICAgPHRyPgogICAgICAgIDx0ZD48YSBocmVmPSJodHRwczovL2J1Z3MuZWNsaXBzZS5vcmcvYnVncy9zaG93X2J1Zy5jZ2k/aWQ9MjczNDY0Ij4yNzM0NjQ8L2E+PC90ZD4KICAgICAgICA8dGQ+OTQ4LjRLPC90ZD4KICAgICAgICA8dGQ+W3R5cGVzeXN0ZW0ueHNkXSBNaWdyYXRlIGRvY3VtZW50YXRpb24gZnJvbSBvQVc8YnI+eHRlbmQudHlwZXN5c3RlbS54c2QgRG9jdW1lbnRhdGlvbiAwLjE8L3RkPgogICAgICAgICAgICAgICAgPC90cj4KICAgIDx0cj4KICAgICAgICA8dGQ+PGEgaHJlZj0iaHR0cHM6Ly9idWdzLmVjbGlwc2Uub3JnL2J1Z3Mvc2hvd19idWcuY2dpP2lkPTI3NzgxOSI+Mjc3ODE5PC9hPjwvdGQ+CiAgICAgICAgPHRkPjE1NC4xSzwvdGQ+CiAgICAgICAgPHRkPk5lZWRlZCBmaXhlcyBkZXRlY3RlZCBieSB0aGUgSVAgcmV2aWV3IGZvciB4dGVuZC50eXBlc3lzdGVtLnhzZDxicj54dGVuZC50eXBlc3lzdGVtLnhzZCBJUCBGaXhlcyAwLjE8L3RkPgogICAgICAgICAgICAgICAgPC90cj4KICAgIDx0cj48dGQgY29sc3Bhbj0iMyIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNEREREREQiPkdvdWx3ZW4mbmJzcDtMZSZuYnNwO0Z1ciAob2Jlby5mcik8L3RkPgogICAgICAgIDwvdHI+CgogICAgPHRyPgogICAgICAgIDx0ZD48YSBocmVmPSJodHRwczovL2J1Z3MuZWNsaXBzZS5vcmcvYnVncy9zaG93X2J1Zy5jZ2k/aWQ9MjYwNTQ0Ij4yNjA1NDQ8L2E+PC90ZD4KICAgICAgICA8dGQ+OTI8L3RkPgogICAgICAgIDx0ZD5BZGQgY3Jvc3NSZWZlcmVuY2VzIG9wZXJhdGlvbiBpbiBNVExOb25TdGFuZGFyZExpYnJhcnk8YnI+Y29tbWVudCAjMjwvdGQ+CiAgICAgICAgICAgICAgICA8L3RyPgoKICAgIDx0cj48dGQgY29sc3Bhbj0iMyIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNEREREREQiPlJpY2hhcmQmbmJzcDtHcm9uYmFjayAoYm9ybGFuZC5jb20pPC90ZD4KICAgICAgICA8L3RyPgogICAgPHRyPgogICAgICAgIDx0ZD48YSBocmVmPSJodHRwczovL2J1Z3MuZWNsaXBzZS5vcmcvYnVncy9zaG93X2J1Zy5jZ2k/aWQ9MjI5MTE1Ij4yMjkxMTU8L2E+PC90ZD4KICAgICAgICA8dGQ+NjYyPC90ZD4KCiAgICAgICAgPHRkPlhwYW5kIHdpemFyZCBwYWNrYWdlIHNob3VsZCBiZSBleHBvc2VkPGJyPlNpbXBsZSBwYXRjaCB0byBhZGQgd2l6YXJkIHBhY2thZ2UgdG8gRXhwb3J0LVBhY2thZ2UgbGlzdDwvdGQ+CiAgICAgICAgICAgICAgICA8L3RyPgogICAgPHRyPjx0ZCBjb2xzcGFuPSIzIiBzdHlsZT0iYmFja2dyb3VuZC1jb2xvcjogI0RERERERCI+QmVybmQmbmJzcDtLb2xiIChrb2xid2FyZS5kZSk8L3RkPgoKICAgICAgICA8L3RyPgogICAgPHRyPgogICAgICAgIDx0ZD48YSBocmVmPSJodHRwczovL2J1Z3MuZWNsaXBzZS5vcmcvYnVncy9zaG93X2J1Zy5jZ2k/aWQ9MjYzNjUwIj4yNjM2NTA8L2E+PC90ZD4KICAgICAgICA8dGQ+NDU8L3RkPgogICAgICAgIDx0ZD5Db21wbGV0ZSBYdGVuZCBhbmQgWHBhbmQgbWlkZGxlZW5kIHRvIGludGVycHJldGUgWHBhbmQvWHRlbmQgY29kZSB1c2luZyB0aGUgWHRlbmQgYmFja2VuZDxicj5jb21tZW50ICMxPC90ZD4KCiAgICAgICAgICAgICAgICA8L3RyPgogICAgPHRyPgogICAgICAgIDx0ZD48YSBocmVmPSJodHRwczovL2J1Z3MuZWNsaXBzZS5vcmcvYnVncy9zaG93X2J1Zy5jZ2k/aWQ9MjYzNjUwIj4yNjM2NTA8L2E+PC90ZD4KICAgICAgICA8dGQ+MTk0PC90ZD4KICAgICAgICA8dGQ+Q29tcGxldGUgWHRlbmQgYW5kIFhwYW5kIG1pZGRsZWVuZCB0byBpbnRlcnByZXRlIFhwYW5kL1h0ZW5kIGNvZGUgdXNpbmcgdGhlIFh0ZW5kIGJhY2tlbmQ8YnI+Y29tbWVudCAjNTwvdGQ+CgogICAgICAgICAgICAgICAgPC90cj4KICAgIDx0cj4KICAgICAgICA8dGQ+PGEgaHJlZj0iaHR0cHM6Ly9idWdzLmVjbGlwc2Uub3JnL2J1Z3Mvc2hvd19idWcuY2dpP2lkPTI2MzY1MCI+MjYzNjUwPC9hPjwvdGQ+CiAgICAgICAgPHRkPjU8L3RkPgogICAgICAgIDx0ZD5Db21wbGV0ZSBYdGVuZCBhbmQgWHBhbmQgbWlkZGxlZW5kIHRvIGludGVycHJldGUgWHBhbmQvWHRlbmQgY29kZSB1c2luZyB0aGUgWHRlbmQgYmFja2VuZDxicj5jb21tZW50ICM2PC90ZD4KCiAgICAgICAgICAgICAgICA8L3RyPgogICAgPHRyPjx0ZCBjb2xzcGFuPSIzIiBzdHlsZT0iYmFja2dyb3VuZC1jb2xvcjogI0RERERERCI+WXZhbiZuYnNwO0x1c3NhdWQgKG9iZW8uZnIpPC90ZD4KICAgICAgICA8L3RyPgogICAgPHRyPgogICAgICAgIDx0ZD48YSBocmVmPSJodHRwczovL2J1Z3MuZWNsaXBzZS5vcmcvYnVncy9zaG93X2J1Zy5jZ2k/aWQ9MjYyNzQzIj4yNjI3NDM8L2E+PC90ZD4KCiAgICAgICAgPHRkPjYyNDwvdGQ+CiAgICAgICAgPHRkPkFkZGVkIHJlZnJlbmNlIHNlYXJjaCBpbiB0ZW1wbGF0ZSBlZGl0b3I8YnI+Y29tbWVudCAjMDwvdGQ+CiAgICAgICAgICAgICAgICA8L3RyPgogICAgPHRyPjx0ZCBjb2xzcGFuPSIzIiBzdHlsZT0iYmFja2dyb3VuZC1jb2xvcjogI0RERERERCI+RGlldGVyJm5ic3A7TW9yb2ZmICh1bWxtZGEub3JnKTwvdGQ+CiAgICAgICAgPC90cj4KICAgIDx0cj4KICAgICAgICA8dGQ+PGEgaHJlZj0iaHR0cHM6Ly9idWdzLmVjbGlwc2Uub3JnL2J1Z3Mvc2hvd19idWcuY2dpP2lkPTI3MzQxMiI+MjczNDEyPC9hPjwvdGQ+CiAgICAgICAgPHRkPjQuM0s8L3RkPgogICAgICAgIDx0ZD5VSSBkZXBlbmRlbmN5IGluIG9yZy5lY2xpcHNlLnh0ZW5kLnR5cGVzeXN0ZW0uZW1mPGJyPlBhdGNoIG1vdmluZyBFYXJseVN0YXJ0IHRvIFVJIHBsdWdpbiwgY2hhbmdpbmcgdGhlIHBsdWdpbi54bWxzPC90ZD4KICAgICAgICAgICAgICAgIDwvdHI+CiAgICA8dHI+CiAgICAgICAgPHRkPjxhIGhyZWY9Imh0dHBzOi8vYnVncy5lY2xpcHNlLm9yZy9idWdzL3Nob3dfYnVnLmNnaT9pZD0yNzQyNjUiPjI3NDI2NTwvYT48L3RkPgogICAgICAgIDx0ZD4zLjNLPC90ZD4KICAgICAgICA8dGQ+TWF2ZW4gcG9tIGZpbGU8YnI+UGF0Y2ggZm9yIFhQYW5kIFJlbGFuZzwvdGQ+CiAgICAgICAgICAgICAgICA8L3RyPgogICAgPHRyPgogICAgICAgIDx0ZD48YSBocmVmPSJodHRwczovL2J1Z3MuZWNsaXBzZS5vcmcvYnVncy9zaG93X2J1Zy5jZ2k/aWQ9Mjc0MjY1Ij4yNzQyNjU8L2E+PC90ZD4KICAgICAgICA8dGQ+OS41SzwvdGQ+CiAgICAgICAgPHRkPk1hdmVuIHBvbSBmaWxlPGJyPlBhdGNoIGZvciBYUGFuZCBQbHVnaW5zPC90ZD4KICAgICAgICAgICAgICAgIDwvdHI+CiAgICA8dHI+CiAgICAgICAgPHRkPjxhIGhyZWY9Imh0dHBzOi8vYnVncy5lY2xpcHNlLm9yZy9idWdzL3Nob3dfYnVnLmNnaT9pZD0yNzQ4NzkiPjI3NDg3OTwvYT48L3RkPgogICAgICAgIDx0ZD4xLjRLPC90ZD4KICAgICAgICA8dGQ+TWlub3IgY2hhbmdlcyB0byBtYXZlbiBwb20gZmlsZXM8YnI+UGF0Y2ggd2l0aCB0aGUgY2hhbmdlZCBwb20ueG1sIGluIFhQYW5kIFJlbGVuZyBhbmQgUGx1Z2luczwvdGQ+CiAgICAgICAgICAgICAgICA8L3RyPgogICAgPHRyPjx0ZCBjb2xzcGFuPSIzIiBzdHlsZT0iYmFja2dyb3VuZC1jb2xvcjogI0RERERERCI+S2Fyc3RlbiZuYnNwO1Rob21zIChpdGVtaXMuZGUpPC90ZD4KICAgICAgICA8L3RyPgogICAgPHRyPgoKICAgICAgICA8dGQ+PGEgaHJlZj0iaHR0cHM6Ly9idWdzLmVjbGlwc2Uub3JnL2J1Z3Mvc2hvd19idWcuY2dpP2lkPTIwNTUyMiI+MjA1NTIyPC9hPjwvdGQ+CiAgICAgICAgPHRkPjEyLjBLPC90ZD4KICAgICAgICA8dGQ+cHJFeGNsdWRlcyBjYXVzZXMgSWxsZWdhbEFyZ3VtZW50RXhlcHRpb248YnI+UGF0Y2g8L3RkPgogICAgICAgICAgICAgICAgPC90cj4KICAgIDx0cj48dGQgY29sc3Bhbj0iMyIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNEREREREQiPlNlYmFzdGlhbiZuYnNwO1phcm5la293IChpdGVtaXMuZGUpPC90ZD4KICAgICAgICA8L3RyPgogICAgPHRyPgogICAgICAgIDx0ZD48YSBocmVmPSJodHRwczovL2J1Z3MuZWNsaXBzZS5vcmcvYnVncy9zaG93X2J1Zy5jZ2k/aWQ9MjE4NjA3Ij4yMTg2MDc8L2E+PC90ZD4KICAgICAgICA8dGQ+Ny4xSzwvdGQ+CiAgICAgICAgPHRkPk9yZGVyIFByZXNlcnZpbmcgU2V0czxicj5UZXN0cyBhbmQgc29tZSBmaXhlcyBmb3IgaW50ZXJzZWN0LCB1bmlvbiwgd2l0aG91dCwgU2V0VHlwZS5uZXdJbnN0YW5jZTwvdGQ+CiAgICAgICAgICAgICAgICA8L3RyPgogICAgPHRyPgogICAgICAgIDx0ZD48YSBocmVmPSJodHRwczovL2J1Z3MuZWNsaXBzZS5vcmcvYnVncy9zaG93X2J1Zy5jZ2k/aWQ9MjY3Njk5Ij4yNjc2OTk8L2E+PC90ZD4KICAgICAgICA8dGQ+OS41SzwvdGQ+CiAgICAgICAgPHRkPlhwYW5kIEVkaXRvciBpcyBub3QgcmVnaXN0ZXJlZDxicj5SZXN0b3JlIGNvbnRlbnQgb2YgcGx1Z2luIHhtbCwgc29tZSBmaXhlcyB3aXRoIGtleWJpbmRpbmdzPC90ZD4KICAgICAgICAgICAgICAgIDwvdHI+CiAgICA8dHI+CiAgICAgICAgPHRkPjxhIGhyZWY9Imh0dHBzOi8vYnVncy5lY2xpcHNlLm9yZy9idWdzL3Nob3dfYnVnLmNnaT9pZD0yNjg4MDgiPjI2ODgwODwvYT48L3RkPgogICAgICAgIDx0ZD4xLjVLPC90ZD4KICAgICAgICA8dGQ+W0FjdGl2aXRpZXNdIER1YmxpY2F0ZSBlbnRyaWVzIGluIHBsdWdpbnMgeG1sIGxlYWQgdG8gdW5yZXNvbHZlZCBtZXNzYWdlPGJyPkZpeDwvdGQ+CiAgICAgICAgICAgICAgICA8L3RyPgogICAgPHRyPgogICAgICAgIDx0ZD48YSBocmVmPSJodHRwczovL2J1Z3MuZWNsaXBzZS5vcmcvYnVncy9zaG93X2J1Zy5jZ2k/aWQ9MjY5OTU0Ij4yNjk5NTQ8L2E+PC90ZD4KICAgICAgICA8dGQ+My45SzwvdGQ+CiAgICAgICAgPHRkPltUeXBlIGluZmVyZW5jZV0gUmV0dXJuIHR5cGUgZm9yIENvbGxlY3Rpb24uZmxhdHRlbiBjb3VsZCBiZSBpbmZlcmVkIGluIG1vc3QgY2FzZXM8YnI+Q29sbGVjdGlvbi5mbGF0dGVuPC90ZD4KICAgICAgICAgICAgICAgIDwvdHI+CiAgICA8dHI+CiAgICAgICAgPHRkPjxhIGhyZWY9Imh0dHBzOi8vYnVncy5lY2xpcHNlLm9yZy9idWdzL3Nob3dfYnVnLmNnaT9pZD0yNjk5NTUiPjI2OTk1NTwvYT48L3RkPgogICAgICAgIDx0ZD4xMi4zSzwvdGQ+CiAgICAgICAgPHRkPltDb250ZW50QXNzaXN0XSBNaXNsZWFkaW5nIGFuZCBkdXBsaWNhdGUgc3VnZ2VzdGlvbnMgd2hlbiBwYXJhbWV0ZXJpemVkIHR5cGVzIGFyZSBpbnZvbHZlZDxicj5QYXRjaCB0aGF0IGZpeGVzIHRoZSBwcm9ibGVtczwvdGQ+CiAgICAgICAgICAgICAgICA8L3RyPgogICAgPHRyPgogICAgICAgIDx0ZD48YSBocmVmPSJodHRwczovL2J1Z3MuZWNsaXBzZS5vcmcvYnVncy9zaG93X2J1Zy5jZ2k/aWQ9MjczMDUwIj4yNzMwNTA8L2E+PC90ZD4KICAgICAgICA8dGQ+Mi4ySzwvdGQ+CiAgICAgICAgPHRkPltKYXZhTWV0YW1vZGVsXSBPcGVuZWQgYW5kIGNsb3NlZCBwcm9qZWN0cyBhcmUgbm90IGhhbmRsZWQgZ3JhY2VmdWxseTxicj5GaXg8L3RkPgogICAgICAgICAgICAgICAgPC90cj4KICAgIDx0cj4KICAgICAgICA8dGQ+PGEgaHJlZj0iaHR0cHM6Ly9idWdzLmVjbGlwc2Uub3JnL2J1Z3Mvc2hvd19idWcuY2dpP2lkPTI3MzA1MSI+MjczMDUxPC9hPjwvdGQ+CiAgICAgICAgPHRkPjIuNUs8L3RkPgogICAgICAgIDx0ZD5bQ29udGVudEFzc2lzdF0gTWlzc2luZyBwcm9wb3NhbHMgZm9yIGV4dGVuc2lvbnM8YnI+Rml4PC90ZD4KICAgICAgICAgICAgICAgIDwvdHI+CiAgICA8dHI+PHRkIGNvbHNwYW49IjMiIHN0eWxlPSJiYWNrZ3JvdW5kLWNvbG9yOiAjREREREREIj5BbGV4YW5kZXImbmJzcDtOed9lbiAoaXRlbWlzLmRlKTwvdGQ+CiAgICAgICAgPC90cj4KICAgIDx0cj4KCiAgICAgICAgPHRkPjxhIGhyZWY9Imh0dHBzOi8vYnVncy5lY2xpcHNlLm9yZy9idWdzL3Nob3dfYnVnLmNnaT9pZD0yNjQzMTkiPjI2NDMxOTwvYT48L3RkPgogICAgICAgIDx0ZD4yLjJLPC90ZD4KICAgICAgICA8dGQ+c2V0Q2FsbEJhY2sgbWV0aG9kIHNob3VsZCBiZSBwdWxsZWQgdXAgZnJvbSBYcGFuZEV4ZWN1dGlvbkNvbnRleHRJbXBsIHRvIEV4ZWN1dGlvbkNvbnRleHRJbXBsPGJyPlB1bGwtdXAgcGF0Y2g8L3RkPgogICAgICAgICAgICAgICAgPC90cj4KICAgIDwvdGFibGU+Cgo8aDI+UmVwb3NpdG9yaWVzPC9oMj4KPHA+VGhlIGluZm9ybWF0aW9uIGNvbnRhaW5lZCBpbiB0aGlzIGxvZyB3YXMgZ2VuZXJhdGVkIGJ5IHVzaW5nIGNvbW1pdCBpbmZvcm1hdGlvbiBmcm9tIHRoZSBmb2xsb3dpbmcgcmVwb3NpdG9yaWVzOjwvcD4KPGRpdiBzdHlsZT0ncGFkZGluZy1sZWZ0OiAyZW0nPi9jdnNyb290L21vZGVsaW5nL29yZy5lY2xpcHNlLm0ydDwvZGl2PgoKPC9kaXY+Cjw/cGhwCiAgICAkaHRtbCA9IG9iX2dldF9jb250ZW50cygpOwogICAgb2JfZW5kX2NsZWFuKCk7CgogICAgIyBHZW5lcmF0ZSB0aGUgd2ViIHBhZ2UKICAgICRBcHAtPmdlbmVyYXRlUGFnZSgkdGhlbWUsICRNZW51LCAkTmF2LCAkcGFnZUF1dGhvciwgJHBhZ2VLZXl3b3JkcywgJHBhZ2VUaXRsZSwgJGh0bWwpOwo/Pgo=