ZGlmZiAtLWdpdCBhL2Rvd25sb2Fkcy9pbmRleC1vbGQucGhwIGIvZG93bmxvYWRzL2luZGV4LW9sZC5waHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzUwZjNkMQotLS0gL2Rldi9udWxsCisrKyBiL2Rvd25sb2Fkcy9pbmRleC1vbGQucGhwCkBAIC0wLDAgKzEsODUgQEAKKzw/cGhwCiskYnVpbGRTZXJ2ZXJDb21tb25GaWxlcyA9IGFycmF5ICggCisJIi9vcHQvcHVibGljL2NiaS9tb2RlbGluZy9pbmNsdWRlcy9idWlsZFNlcnZlci1jb21tb24ucGhwIiwKKwkkX1NFUlZFUlsnRE9DVU1FTlRfUk9PVCddIC4gIi9tb2RlbGluZy9pbmNsdWRlcy9idWlsZFNlcnZlci1jb21tb24ucGhwIiwKKyk7CiskZm91bmRCdWlsZFNlcnZlckNvbW1vbkZpbGUgPSBmYWxzZTsKK2ZvcmVhY2ggKCRidWlsZFNlcnZlckNvbW1vbkZpbGVzIGFzICRicykKK3sKKwlpZiAoaXNfZmlsZSgkYnMpKQorCXsKKwkJcmVxdWlyZV9vbmNlKCRicyk7ICRmb3VuZEJ1aWxkU2VydmVyQ29tbW9uRmlsZSA9IHRydWU7IGJyZWFrOworCX0KK30KK2lmICghJGZvdW5kQnVpbGRTZXJ2ZXJDb21tb25GaWxlKQoreworCXByaW50ICJXYXJuaW5nOiBjb3VsZCBub3QgZmluZCBtb2RlbGluZy9pbmNsdWRlcy9idWlsZFNlcnZlci1jb21tb24ucGhwIGluIF9jb21tb24ucGhwIjsKK30KK2Vsc2UKK3sKKwl1bnNldCgkZm91bmRCdWlsZFNlcnZlckNvbW1vbkZpbGUpOworfQorCiskZGVmYXVsdFByb2ogPSAiIjsKK3Vuc2V0KCRfR0VUWyJwcm9qZWN0Il0pOyAvLyBtb2Rpc2NvIGhhcyBubyBzdWJwcm9qZWN0cywgc28gdGhpcyBzaG91bGQgYmUgYmxhbmsKK3JlcXVpcmVfb25jZSgkX1NFUlZFUlsnRE9DVU1FTlRfUk9PVCddIC4gIi9lY2xpcHNlLm9yZy1jb21tb24vc3lzdGVtL2FwcC5jbGFzcy5waHAiKTsgCityZXF1aXJlX29uY2UoJF9TRVJWRVJbJ0RPQ1VNRU5UX1JPT1QnXSAuICIvZWNsaXBzZS5vcmctY29tbW9uL3N5c3RlbS9uYXYuY2xhc3MucGhwIik7ICAKK3JlcXVpcmVfb25jZSgkX1NFUlZFUlsnRE9DVU1FTlRfUk9PVCddIC4gIi9lY2xpcHNlLm9yZy1jb21tb24vc3lzdGVtL21lbnUuY2xhc3MucGhwIik7IAorJEFwcCA9IG5ldyBBcHAoKTsgJE5hdiA9IG5ldyBOYXYoKTsgJE1lbnUgPSBuZXcgTWVudSgpOyBpbmNsdWRlKCRBcHAtPmdldFByb2plY3RDb21tb24oKSk7CisKK29iX3N0YXJ0KCk7CisKKy8qIGNvbmZpZyAqLworCisvKiB6aXBzIHRoYXQgYXJlIGFsbG93ZWQgdG8gYmUgYWJzZW50IGZyb20gdGhlIGRvd25sb2FkcyBwYWdlIChlZy4sIG5ldyBvbmVzIGFkZGVkIG1pZC1zdHJlYW0pICovCisjJGV4dHJhWmlwcyA9IGFycmF5KCJwZHQtU0RLIiwgInBkdC1leGFtcGxlcyIsICJwZHQtYWxsLWluLW9uZS13aW4zMiIsICJwZHQtYWxsLWluLW9uZS1saW51eC1ndGsiLCAicGR0LWFsbC1pbi1vbmUtbWFjb3N4LWNhcmJvbiIsInBkdC1teWx5biIpOworJGV4dHJhWmlwcyA9IGFycmF5KCk7CisKKy8qICRwcm9qZWN0ID0+IHNlY3Rpb25zL1Byb2plY3QgTmFtZSA9PiAocHJldHR5bmFtZSA9PiBmaWxlbmFtZSkgKi8KKy8qIG9ubHkgcmVxdWlyZWQgaWYgdXNpbmcgc29tZXRoaW5nIG90aGVyIHRoYW4gdGhlIGRlZmF1bHQgNDsgb3RoZXJ3aXNlIHdpbGwgYmUgZ2VuZXJhdGVkICovCiskZGxzID0gYXJyYXkoCisJIi8iID0+IGFycmF5KCAjIHVzZSAiLyIgYmVjYXVzZSBQRFQgaGFzIG5vIHBhcmVudCBvciBjaGlsZCBwcm9qZWN0cy9jb21wb25lbnRzCisJCSJNT0RJU0NPIiA9PiBhcnJheSgKKwkJCSMiPGltZyBhbHQ9XCJBbGwtSW4tT25lIEJ1bmRsZSBpbmNsdWRpbmcgRWNsaXBzZSBhbmQgcmVxdWlyZWQgZGVwZW5kZW5jaWVzXCIgc3JjPVwiL21vZGVsaW5nL2ltYWdlcy9kbC1pY29uLWFpby1idW5kbGUuZ2lmXCIvPiA8YiBzdHlsZT1cImNvbG9yOmdyZWVuXCI+QWxsLUluLU9uZTwvYj4gV2luZG93cyAzMi1iaXQiID0+ICJhbGwtaW4tb25lLXdpbjMyIiwKKwkJCSMiPGltZyBhbHQ9XCJBbGwtSW4tT25lIEJ1bmRsZSBpbmNsdWRpbmcgRWNsaXBzZSBhbmQgcmVxdWlyZWQgZGVwZW5kZW5jaWVzXCIgc3JjPVwiL21vZGVsaW5nL2ltYWdlcy9kbC1pY29uLWFpby1idW5kbGUuZ2lmXCIvPiA8YiBzdHlsZT1cImNvbG9yOmdyZWVuXCI+QWxsLUluLU9uZTwvYj4gTGludXggeDg2L0dUSyAyIiA9PiAiYWxsLWluLW9uZS1saW51eC1ndGsiLAorCQkJIyI8aW1nIGFsdD1cIkFsbC1Jbi1PbmUgQnVuZGxlIGluY2x1ZGluZyBFY2xpcHNlIGFuZCByZXF1aXJlZCBkZXBlbmRlbmNpZXNcIiBzcmM9XCIvbW9kZWxpbmcvaW1hZ2VzL2RsLWljb24tYWlvLWJ1bmRsZS5naWZcIi8+IDxiIHN0eWxlPVwiY29sb3I6Z3JlZW5cIj5BbGwtSW4tT25lPC9iPiBNYWMgT1MgWCBDYXJib24iID0+ICJhbGwtaW4tb25lLW1hY29zeC1jYXJib24iLAorCQkgCSI8YWNyb255bSB0aXRsZT1cIkNsaWNrIHRvIGRvd25sb2FkIGFyY2hpdmVkIEFsbC1Jbi1PbmUgcDIgUmVwbyBVcGRhdGUgU2l0ZVwiPjxpbWcgYWx0PVwiQ2xpY2sgdG8gZG93bmxvYWQgYXJjaGl2ZWQgQWxsLUluLU9uZSBwMiBSZXBvIFVwZGF0ZSBTaXRlXCIgc3JjPVwiL21vZGVsaW5nL2ltYWdlcy9kbC1pY29uLXVwZGF0ZS16aXAuZ2lmXCIvPiA8YiBzdHlsZT1cImNvbG9yOmdyZWVuXCI+QWxsLUluLU9uZSBVcGRhdGUgU2l0ZTwvYj48L2Fjcm9ueW0+IiA9PiAiVXBkYXRlIiwKKwkJCSMiU0RLIChSdW50aW1lLCBTb3VyY2UpIiA9PiAiU0RLIiwKKwkJCSMiUnVudGltZSIgPT4gInJ1bnRpbWUiLAorCQkJIyJNeWx5biBCcmlkZ2UiID0+ICJteWx5biIsCisJCQkjIkV4YW1wbGVzIiA9PiAiZXhhbXBsZXMiLAorCQkJIyJBdXRvbWF0ZWQgVGVzdHMiID0+ICJBdXRvbWF0ZWQtVGVzdHMiLAorCQkpLAorCSksCispOworCisvKiBsaXN0IG9mIHZhbGlkIGZpbGUgcHJlZml4ZXMgZm9yIHByb2plY3RzIHdobyBoYXZlIGJlZW4gcmVuYW1lZDsga2V5cyBoYXZlIGxlYWRpbmcgLyB0byBtYXRjaCAkcHJvaiAqLworLyogb25seSByZXF1aXJlZCBpZiB1c2luZyBzb21ldGhpbmcgb3RoZXIgdGhhbiB0aGUgZGVmYXVsdDsgb3RoZXJ3aXNlIHdpbGwgYmUgZ2VuZXJhdGVkICovCiskZmlsZVByZSA9IGFycmF5KCAjIHVzZSAiLyIgYmVjYXVzZSBNT0RJU0NPIGhhcyBubyBwYXJlbnQgb3IgY2hpbGQgcHJvamVjdHMvY29tcG9uZW50cworCSIvIiA9PiBhcnJheSgiTU9ESVNDTyIsICJtb2Rpc2NvIiwgIk1vRGlzY28iKSAvLyBNT0RJU0NPLXNkay0qLnppcAorKTsKKworLyogZGVmaW5lIHNob3dOb3RlcygpLCAkb2xkcmVscywgZG9MYW5ndWFnZVBhY2tzKCkgaW4gZXh0cmFzLSRwcm9qLnBocCAob3IganVzdCBleHRyYXMucGhwIGZvciBmbGF0IHByb2plY3RzKSBpZiBuZWNlc3NhcnksIGRvd25sb2Fkcy1jb21tb24ucGhwIHdpbGwgaW5jbHVkZSB0aGVtICovCisvKiBlbmQgY29uZmlnICovCisKKy8vaWYgKCRpc0J1aWxkU2VydmVyKSB7IGluY2x1ZGVfb25jZSAkX1NFUlZFUlsiRE9DVU1FTlRfUk9PVCJdIC4gIi9wZHQvYnVpbGQvc2lkZWl0ZW1zLWNvbW1vbi5waHAiOyB9CisvL3JlcXVpcmVfb25jZSgkX1NFUlZFUlsiRE9DVU1FTlRfUk9PVCJdIC4gIi9tb2RlbGluZy9pbmNsdWRlcy9kb3dubG9hZHMtY29tbW9uLnBocCIpOworcmVxdWlyZV9vbmNlKCJkb3dubG9hZHMtY29tbW9uLnBocCIpOworCiskaHRtbCA9IG9iX2dldF9jb250ZW50cygpOworb2JfZW5kX2NsZWFuKCk7CisKKy8qIE5vdGU6IEdvb2dsZSBBbmFseXRpY3MgbW92ZWQgdG8gX3Byb2plY3RDb21tb24ucGhwIHNvIGl0J3Mgb24gRVZFUlkgcGFnZSAqLworCiskdHJhbnMgPSBhcnJheV9mbGlwKCRwcm9qZWN0cyk7CiskcGFnZVRpdGxlID0gIk1vRGlzY28gLSBEb3dubG9hZHMiOworJHBhZ2VLZXl3b3JkcyA9ICJNb0Rpc2NvLCBNb2RlbCBEaXNjb3ZlcnksIE1vZGVsLURyaXZlbiBSZXZlcnNlIEVuZ2luZWVyaW5nLCBNREUsIGRvd25sb2FkIjsKKyRwYWdlQXV0aG9yID0gIk5pY29sYXMgQnJvcyI7IC8vIChjb3BpZWQgZnJvbSBQRFQpCisKKyMgR2VuZXJhdGUgdGhlIHdlYiBwYWdlCiskQXBwLT5BZGRFeHRyYUh0bWxIZWFkZXIoJzxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9Ii9tb2RlbGluZy9pbmNsdWRlcy9kb3dubG9hZHMuY3NzIi8+JyAuICJcbiIpOworJEFwcC0+QWRkRXh0cmFIdG1sSGVhZGVyKCc8c2NyaXB0IHNyYz0iL21vZGVsaW5nL2luY2x1ZGVzL2Rvd25sb2Fkcy5qcyIgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij48L3NjcmlwdD4nIC4gIlxuIik7IC8vaWUgZG9lc24ndCB1bmRlcnN0YW5kIHNlbGYgY2xvc2luZyBzY3JpcHQgdGFncywgYW5kIHdvbid0IGV2ZW4gdHJ5IHRvIHJlbmRlciB0aGUgcGFnZSBpZiB5b3UgdXNlIG9uZQorJEFwcC0+QWRkRXh0cmFIdG1sSGVhZGVyKCc8bGluayB0eXBlPSJhcHBsaWNhdGlvbi9yc3MreG1sIiByZWw9ImFsdGVybmF0ZSIgdGl0bGU9IlBEVCBCdWlsZCBGZWVkIiBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2Rvd25sb2Fkcy9kb3dubG9hZC5waHA/ZmlsZT0vJy4kUFIuJy9mZWVkcy9idWlsZHMtJy4kcHJvamN0LicueG1sIi8+JyAuICJcbiIpOworJEFwcC0+Z2VuZXJhdGVQYWdlKCR0aGVtZSwgJE1lbnUsICROYXYsICRwYWdlQXV0aG9yLCAkcGFnZUtleXdvcmRzLCAkcGFnZVRpdGxlLCAkaHRtbCk7CisKKz8+CmRpZmYgLS1naXQgYS9kb3dubG9hZHMvaW5kZXgucGhwIGIvZG93bmxvYWRzL2luZGV4LnBocAppbmRleCA3NTBmM2QxLi4yMWU3OTA5IDEwMDY0NAotLS0gYS9kb3dubG9hZHMvaW5kZXgucGhwCisrKyBiL2Rvd25sb2Fkcy9pbmRleC5waHAKQEAgLTEsODUgKzEsMTA2IEBACiA8P3BocAotJGJ1aWxkU2VydmVyQ29tbW9uRmlsZXMgPSBhcnJheSAoIAotCSIvb3B0L3B1YmxpYy9jYmkvbW9kZWxpbmcvaW5jbHVkZXMvYnVpbGRTZXJ2ZXItY29tbW9uLnBocCIsCi0JJF9TRVJWRVJbJ0RPQ1VNRU5UX1JPT1QnXSAuICIvbW9kZWxpbmcvaW5jbHVkZXMvYnVpbGRTZXJ2ZXItY29tbW9uLnBocCIsCi0pOwotJGZvdW5kQnVpbGRTZXJ2ZXJDb21tb25GaWxlID0gZmFsc2U7Ci1mb3JlYWNoICgkYnVpbGRTZXJ2ZXJDb21tb25GaWxlcyBhcyAkYnMpCi17Ci0JaWYgKGlzX2ZpbGUoJGJzKSkKLQl7Ci0JCXJlcXVpcmVfb25jZSgkYnMpOyAkZm91bmRCdWlsZFNlcnZlckNvbW1vbkZpbGUgPSB0cnVlOyBicmVhazsKLQl9CisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA5LCAyMDE0IEVjbGlwc2UgRm91bmRhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICBHculnb2lyZSBEdXDpIChNaWEtU29mdHdhcmUpCisgKgkgIEh1Z28gQnJ1bmVsaWVyZSAoSW5yaWEpCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCXJlcXVpcmVfb25jZSgkX1NFUlZFUlsnRE9DVU1FTlRfUk9PVCddIC4gIi9lY2xpcHNlLm9yZy1jb21tb24vc3lzdGVtL2FwcC5jbGFzcy5waHAiKTsJCisJcmVxdWlyZV9vbmNlKCRfU0VSVkVSWydET0NVTUVOVF9ST09UJ10gLiAiL2VjbGlwc2Uub3JnLWNvbW1vbi9zeXN0ZW0vbmF2LmNsYXNzLnBocCIpOworCXJlcXVpcmVfb25jZSgkX1NFUlZFUlsnRE9DVU1FTlRfUk9PVCddIC4gIi9lY2xpcHNlLm9yZy1jb21tb24vc3lzdGVtL21lbnUuY2xhc3MucGhwIik7IAkKKwkkQXBwIAk9IG5ldyBBcHAoKTsKKwkkTmF2CT0gbmV3IE5hdigpOworCSRNZW51IAk9IG5ldyBNZW51KCk7CisJaW5jbHVkZSgkQXBwLT5nZXRQcm9qZWN0Q29tbW9uKCkpOworCisJIyBEZWZpbmUgdGhlc2UgaGVyZSwgb3IgaW4gX3Byb2plY3RDb21tb24ucGhwIGZvciBzaXRlLXdpZGUgdmFsdWVzCisJJHBhZ2VLZXl3b3Jkcwk9ICJlY2xpcHNlLCBtb2RlbGluZywgZW1mLCBtb2Rpc2NvLCByZXZlcnNlIGVuZ2luZWVyaW5nLCBtb2Rlcm5pemF0aW9uLCBtZGUiOworCSRwYWdlQXV0aG9yCQk9ICJHcmVnb2lyZSBEdXBlLCBIdWdvIEJydW5lbGllcmUiOworCSRwYWdlVGl0bGUgCQk9ICJNb0Rpc2NvIjsKKwkKKyRodG1sPSIiOworCiskZHJvcHM9Im1vZGVsaW5nL21kdC9tb2Rpc2NvL2Rvd25sb2Fkcy9kcm9wcyI7CiskZG93bmxvYWRfcm9vdGRpcj0iL2hvbWUvZGF0YTIvaHR0cGQvZG93bmxvYWQuZWNsaXBzZS5vcmcvJGRyb3BzLyI7CiskYXJjaGl2ZV9yb290ZGlyPSIvaG9tZS9kYXRhMi9odHRwZC9hcmNoaXZlLmVjbGlwc2Uub3JnLyRkcm9wcy8iOworJGh0dHBfcHJlZml4PSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2Rvd25sb2Fkcy9kb3dubG9hZC5waHA/ZmlsZT0vIjsKKworZnVuY3Rpb24gYnJvd3NlKCRyb290ZGlyKXsKKyR2ZXJzaW9uX2RpcnMgPSBzY2FuZGlyKCRyb290ZGlyKTsKKyRhcnI9YXJyYXkoKTsKK2ZvciAoJGkgPSAyIDsgJGkgPCBjb3VudCgkdmVyc2lvbl9kaXJzKSA7ICRpKyspeworICAgICR2ZXJzaW9uID0gJHZlcnNpb25fZGlyc1skaV07CisgICAgJHF1YWxpZmllcnNfZGlycyA9IHNjYW5kaXIoIiRyb290ZGlyLyR2ZXJzaW9uIik7CisgICAgZm9yICgkaiA9IDIgOyAkaiA8IGNvdW50KCRxdWFsaWZpZXJzX2RpcnMpIDsgJGorKyl7CisgICAgICAkcXVhbGlmaWVyID0gJHF1YWxpZmllcnNfZGlyc1skal07CisgICAgICAkZmlsZXMgPSBzY2FuZGlyKCIkcm9vdGRpci8kdmVyc2lvbi8kcXVhbGlmaWVyIik7CisgICAgICBmb3IgKCRrID0gMiA7ICRrIDwgY291bnQoJGZpbGVzKSA7ICRrKyspeworICAgICAgICAgICR4eHggPSAkZmlsZXNbJGtdOworICAgICAgICAgIGlmIChzdWJzdHIoJHh4eCwgLXN0cmxlbigiLnppcCIpKSA9PT0gIi56aXAiKXsKKyAgICAgICAgICAgICAgJGFycltdPWFycmF5KAorICAgICAgICAgICAgICAgICAicGF0aCIgPT4gIiR2ZXJzaW9uLyRxdWFsaWZpZXIvJHh4eCIsCisgICAgICAgICAgICAgICAgICJzaG9ydG5hbWUiID0+ICR4eHgsCisgICAgICAgICAgICAgICAgICJxdWFsaWZpZXIiID0+ICRxdWFsaWZpZXIKKyAgICAgICAgICAgICAgKTsKKyAgICAgICAgICB9CisgICAgICB9CisgICAgfQogfQotaWYgKCEkZm91bmRCdWlsZFNlcnZlckNvbW1vbkZpbGUpCi17Ci0JcHJpbnQgIldhcm5pbmc6IGNvdWxkIG5vdCBmaW5kIG1vZGVsaW5nL2luY2x1ZGVzL2J1aWxkU2VydmVyLWNvbW1vbi5waHAgaW4gX2NvbW1vbi5waHAiOwotfQotZWxzZQotewotCXVuc2V0KCRmb3VuZEJ1aWxkU2VydmVyQ29tbW9uRmlsZSk7CityZXR1cm4gJGFycjsKIH0KIAotJGRlZmF1bHRQcm9qID0gIiI7Ci11bnNldCgkX0dFVFsicHJvamVjdCJdKTsgLy8gbW9kaXNjbyBoYXMgbm8gc3VicHJvamVjdHMsIHNvIHRoaXMgc2hvdWxkIGJlIGJsYW5rCi1yZXF1aXJlX29uY2UoJF9TRVJWRVJbJ0RPQ1VNRU5UX1JPT1QnXSAuICIvZWNsaXBzZS5vcmctY29tbW9uL3N5c3RlbS9hcHAuY2xhc3MucGhwIik7IAotcmVxdWlyZV9vbmNlKCRfU0VSVkVSWydET0NVTUVOVF9ST09UJ10gLiAiL2VjbGlwc2Uub3JnLWNvbW1vbi9zeXN0ZW0vbmF2LmNsYXNzLnBocCIpOyAgCi1yZXF1aXJlX29uY2UoJF9TRVJWRVJbJ0RPQ1VNRU5UX1JPT1QnXSAuICIvZWNsaXBzZS5vcmctY29tbW9uL3N5c3RlbS9tZW51LmNsYXNzLnBocCIpOyAKLSRBcHAgPSBuZXcgQXBwKCk7ICROYXYgPSBuZXcgTmF2KCk7ICRNZW51ID0gbmV3IE1lbnUoKTsgaW5jbHVkZSgkQXBwLT5nZXRQcm9qZWN0Q29tbW9uKCkpOworZnVuY3Rpb24gcHJpbnRfbGkoJGh0dHBfcHJlZml4LCRkcm9wcywkcmVzdWx0LCRpKXsKKyAgICAkaHRtbCA9IiI7CisgICAgJGhyZWY9IiRodHRwX3ByZWZpeC8kZHJvcHMvIi4kcmVzdWx0WyRpXVsicGF0aCJdOworICAgICR0eHQ9JHJlc3VsdFskaV1bInNob3J0bmFtZSJdOworICAgICRodG1sLj0iPGxpPjxhIGhyZWY9JyRocmVmJz4kdHh0PC9hPjwvbGk+IjsKKyAgICByZXR1cm4gJGh0bWw7Cit9CiAKLW9iX3N0YXJ0KCk7CitmdW5jdGlvbiBjbXAoJGEsICRiKXsKKyAgJGFycl9hID0gZXhwbG9kZSgiLSIsICRhWyJzaG9ydG5hbWUiXSk7CisgICRhcnJfYiA9IGV4cGxvZGUoIi0iLCAkYlsic2hvcnRuYW1lIl0pOworICAkbGFzdF9hPWNvdW50KCRhcnJfYSk7IAorICAkbGFzdF9iPWNvdW50KCRhcnJfYik7CisgICRhX3ZlcnNpb249JGFycl9hWyRsYXN0X2EtMV07CisgICRiX3ZlcnNpb249JGFycl9iWyRsYXN0X2ItMV07CisgIGlmICggJGFfdmVyc2lvbj09ICRiX3ZlcnNpb24peworICAgIHJldHVybiAwOworICB9CisgIHJldHVybiAoJGFfdmVyc2lvbiA+ICRiX3ZlcnNpb24pID8gLTEgOiAxIDsKK30KIAotLyogY29uZmlnICovCiAKLS8qIHppcHMgdGhhdCBhcmUgYWxsb3dlZCB0byBiZSBhYnNlbnQgZnJvbSB0aGUgZG93bmxvYWRzIHBhZ2UgKGVnLiwgbmV3IG9uZXMgYWRkZWQgbWlkLXN0cmVhbSkgKi8KLSMkZXh0cmFaaXBzID0gYXJyYXkoInBkdC1TREsiLCAicGR0LWV4YW1wbGVzIiwgInBkdC1hbGwtaW4tb25lLXdpbjMyIiwgInBkdC1hbGwtaW4tb25lLWxpbnV4LWd0ayIsICJwZHQtYWxsLWluLW9uZS1tYWNvc3gtY2FyYm9uIiwicGR0LW15bHluIik7Ci0kZXh0cmFaaXBzID0gYXJyYXkoKTsKKyRkb3dubG9hZF9yZXN1bHQgPSBicm93c2UoJGRvd25sb2FkX3Jvb3RkaXIpOworJGFyY2hpdmVfcmVzdWx0ID0gYnJvd3NlKCRhcmNoaXZlX3Jvb3RkaXIpOworJHJlc3VsdD0gYXJyYXlfbWVyZ2UoJGRvd25sb2FkX3Jlc3VsdCwgJGFyY2hpdmVfcmVzdWx0KTsKK3Vzb3J0KCRyZXN1bHQsICJjbXAiKTsKKyRodG1sPSI8aDE+UmVsZWFzZXM8L2gxPiI7CiskaHRtbC49Ijx1bD4iOworZm9yICgkaSA9IDA7ICRpIDwgY291bnQoJHJlc3VsdCkgOyAkaSsrKXsKKyAgICAkcXVhbGlmaWVyID0gJHJlc3VsdFskaV1bInF1YWxpZmllciJdOworICAgIGlmIChzdHJwb3MoJHF1YWxpZmllciwgIlIiKSA9PT0gMCl7CisgICAgICAgICRodG1sLj1wcmludF9saSgkaHR0cF9wcmVmaXgsJGRyb3BzLCRyZXN1bHQsJGkpOworICAgIH0KK30KKyRodG1sLj0iPC91bD4iOworJGh0bWwuPSI8aDE+U3RhYmxlIGJ1aWxkczwvaDE+IjsKKyRodG1sLj0iPHVsPiI7Citmb3IgKCRpID0gMDsgJGkgPCBjb3VudCgkcmVzdWx0KSA7ICRpKyspeworICAgICRxdWFsaWZpZXIgPSAkcmVzdWx0WyRpXVsicXVhbGlmaWVyIl07CisgICAgaWYgKHN0cnBvcygkcXVhbGlmaWVyLCAiUyIpID09PSAwKXsKKyAgICAgICAgJGh0bWwuPXByaW50X2xpKCRodHRwX3ByZWZpeCwkZHJvcHMsJHJlc3VsdCwkaSk7CisgICAgfQorfQorJGh0bWwuPSI8L3VsPiI7CiAKLS8qICRwcm9qZWN0ID0+IHNlY3Rpb25zL1Byb2plY3QgTmFtZSA9PiAocHJldHR5bmFtZSA9PiBmaWxlbmFtZSkgKi8KLS8qIG9ubHkgcmVxdWlyZWQgaWYgdXNpbmcgc29tZXRoaW5nIG90aGVyIHRoYW4gdGhlIGRlZmF1bHQgNDsgb3RoZXJ3aXNlIHdpbGwgYmUgZ2VuZXJhdGVkICovCi0kZGxzID0gYXJyYXkoCi0JIi8iID0+IGFycmF5KCAjIHVzZSAiLyIgYmVjYXVzZSBQRFQgaGFzIG5vIHBhcmVudCBvciBjaGlsZCBwcm9qZWN0cy9jb21wb25lbnRzCi0JCSJNT0RJU0NPIiA9PiBhcnJheSgKLQkJCSMiPGltZyBhbHQ9XCJBbGwtSW4tT25lIEJ1bmRsZSBpbmNsdWRpbmcgRWNsaXBzZSBhbmQgcmVxdWlyZWQgZGVwZW5kZW5jaWVzXCIgc3JjPVwiL21vZGVsaW5nL2ltYWdlcy9kbC1pY29uLWFpby1idW5kbGUuZ2lmXCIvPiA8YiBzdHlsZT1cImNvbG9yOmdyZWVuXCI+QWxsLUluLU9uZTwvYj4gV2luZG93cyAzMi1iaXQiID0+ICJhbGwtaW4tb25lLXdpbjMyIiwKLQkJCSMiPGltZyBhbHQ9XCJBbGwtSW4tT25lIEJ1bmRsZSBpbmNsdWRpbmcgRWNsaXBzZSBhbmQgcmVxdWlyZWQgZGVwZW5kZW5jaWVzXCIgc3JjPVwiL21vZGVsaW5nL2ltYWdlcy9kbC1pY29uLWFpby1idW5kbGUuZ2lmXCIvPiA8YiBzdHlsZT1cImNvbG9yOmdyZWVuXCI+QWxsLUluLU9uZTwvYj4gTGludXggeDg2L0dUSyAyIiA9PiAiYWxsLWluLW9uZS1saW51eC1ndGsiLAotCQkJIyI8aW1nIGFsdD1cIkFsbC1Jbi1PbmUgQnVuZGxlIGluY2x1ZGluZyBFY2xpcHNlIGFuZCByZXF1aXJlZCBkZXBlbmRlbmNpZXNcIiBzcmM9XCIvbW9kZWxpbmcvaW1hZ2VzL2RsLWljb24tYWlvLWJ1bmRsZS5naWZcIi8+IDxiIHN0eWxlPVwiY29sb3I6Z3JlZW5cIj5BbGwtSW4tT25lPC9iPiBNYWMgT1MgWCBDYXJib24iID0+ICJhbGwtaW4tb25lLW1hY29zeC1jYXJib24iLAotCQkgCSI8YWNyb255bSB0aXRsZT1cIkNsaWNrIHRvIGRvd25sb2FkIGFyY2hpdmVkIEFsbC1Jbi1PbmUgcDIgUmVwbyBVcGRhdGUgU2l0ZVwiPjxpbWcgYWx0PVwiQ2xpY2sgdG8gZG93bmxvYWQgYXJjaGl2ZWQgQWxsLUluLU9uZSBwMiBSZXBvIFVwZGF0ZSBTaXRlXCIgc3JjPVwiL21vZGVsaW5nL2ltYWdlcy9kbC1pY29uLXVwZGF0ZS16aXAuZ2lmXCIvPiA8YiBzdHlsZT1cImNvbG9yOmdyZWVuXCI+QWxsLUluLU9uZSBVcGRhdGUgU2l0ZTwvYj48L2Fjcm9ueW0+IiA9PiAiVXBkYXRlIiwKLQkJCSMiU0RLIChSdW50aW1lLCBTb3VyY2UpIiA9PiAiU0RLIiwKLQkJCSMiUnVudGltZSIgPT4gInJ1bnRpbWUiLAotCQkJIyJNeWx5biBCcmlkZ2UiID0+ICJteWx5biIsCi0JCQkjIkV4YW1wbGVzIiA9PiAiZXhhbXBsZXMiLAotCQkJIyJBdXRvbWF0ZWQgVGVzdHMiID0+ICJBdXRvbWF0ZWQtVGVzdHMiLAotCQkpLAotCSksCi0pOwogCi0vKiBsaXN0IG9mIHZhbGlkIGZpbGUgcHJlZml4ZXMgZm9yIHByb2plY3RzIHdobyBoYXZlIGJlZW4gcmVuYW1lZDsga2V5cyBoYXZlIGxlYWRpbmcgLyB0byBtYXRjaCAkcHJvaiAqLwotLyogb25seSByZXF1aXJlZCBpZiB1c2luZyBzb21ldGhpbmcgb3RoZXIgdGhhbiB0aGUgZGVmYXVsdDsgb3RoZXJ3aXNlIHdpbGwgYmUgZ2VuZXJhdGVkICovCi0kZmlsZVByZSA9IGFycmF5KCAjIHVzZSAiLyIgYmVjYXVzZSBNT0RJU0NPIGhhcyBubyBwYXJlbnQgb3IgY2hpbGQgcHJvamVjdHMvY29tcG9uZW50cwotCSIvIiA9PiBhcnJheSgiTU9ESVNDTyIsICJtb2Rpc2NvIiwgIk1vRGlzY28iKSAvLyBNT0RJU0NPLXNkay0qLnppcAotKTsKIAotLyogZGVmaW5lIHNob3dOb3RlcygpLCAkb2xkcmVscywgZG9MYW5ndWFnZVBhY2tzKCkgaW4gZXh0cmFzLSRwcm9qLnBocCAob3IganVzdCBleHRyYXMucGhwIGZvciBmbGF0IHByb2plY3RzKSBpZiBuZWNlc3NhcnksIGRvd25sb2Fkcy1jb21tb24ucGhwIHdpbGwgaW5jbHVkZSB0aGVtICovCi0vKiBlbmQgY29uZmlnICovCi0KLS8vaWYgKCRpc0J1aWxkU2VydmVyKSB7IGluY2x1ZGVfb25jZSAkX1NFUlZFUlsiRE9DVU1FTlRfUk9PVCJdIC4gIi9wZHQvYnVpbGQvc2lkZWl0ZW1zLWNvbW1vbi5waHAiOyB9Ci0vL3JlcXVpcmVfb25jZSgkX1NFUlZFUlsiRE9DVU1FTlRfUk9PVCJdIC4gIi9tb2RlbGluZy9pbmNsdWRlcy9kb3dubG9hZHMtY29tbW9uLnBocCIpOwotcmVxdWlyZV9vbmNlKCJkb3dubG9hZHMtY29tbW9uLnBocCIpOwotCi0kaHRtbCA9IG9iX2dldF9jb250ZW50cygpOwotb2JfZW5kX2NsZWFuKCk7Ci0KLS8qIE5vdGU6IEdvb2dsZSBBbmFseXRpY3MgbW92ZWQgdG8gX3Byb2plY3RDb21tb24ucGhwIHNvIGl0J3Mgb24gRVZFUlkgcGFnZSAqLwotCi0kdHJhbnMgPSBhcnJheV9mbGlwKCRwcm9qZWN0cyk7Ci0kcGFnZVRpdGxlID0gIk1vRGlzY28gLSBEb3dubG9hZHMiOwotJHBhZ2VLZXl3b3JkcyA9ICJNb0Rpc2NvLCBNb2RlbCBEaXNjb3ZlcnksIE1vZGVsLURyaXZlbiBSZXZlcnNlIEVuZ2luZWVyaW5nLCBNREUsIGRvd25sb2FkIjsKLSRwYWdlQXV0aG9yID0gIk5pY29sYXMgQnJvcyI7IC8vIChjb3BpZWQgZnJvbSBQRFQpCi0KLSMgR2VuZXJhdGUgdGhlIHdlYiBwYWdlCi0kQXBwLT5BZGRFeHRyYUh0bWxIZWFkZXIoJzxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9Ii9tb2RlbGluZy9pbmNsdWRlcy9kb3dubG9hZHMuY3NzIi8+JyAuICJcbiIpOwotJEFwcC0+QWRkRXh0cmFIdG1sSGVhZGVyKCc8c2NyaXB0IHNyYz0iL21vZGVsaW5nL2luY2x1ZGVzL2Rvd25sb2Fkcy5qcyIgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij48L3NjcmlwdD4nIC4gIlxuIik7IC8vaWUgZG9lc24ndCB1bmRlcnN0YW5kIHNlbGYgY2xvc2luZyBzY3JpcHQgdGFncywgYW5kIHdvbid0IGV2ZW4gdHJ5IHRvIHJlbmRlciB0aGUgcGFnZSBpZiB5b3UgdXNlIG9uZQotJEFwcC0+QWRkRXh0cmFIdG1sSGVhZGVyKCc8bGluayB0eXBlPSJhcHBsaWNhdGlvbi9yc3MreG1sIiByZWw9ImFsdGVybmF0ZSIgdGl0bGU9IlBEVCBCdWlsZCBGZWVkIiBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2Rvd25sb2Fkcy9kb3dubG9hZC5waHA/ZmlsZT0vJy4kUFIuJy9mZWVkcy9idWlsZHMtJy4kcHJvamN0LicueG1sIi8+JyAuICJcbiIpOwotJEFwcC0+Z2VuZXJhdGVQYWdlKCR0aGVtZSwgJE1lbnUsICROYXYsICRwYWdlQXV0aG9yLCAkcGFnZUtleXdvcmRzLCAkcGFnZVRpdGxlLCAkaHRtbCk7Ci0KKyRBcHAtPmdlbmVyYXRlUGFnZSgkdGhlbWUsICRNZW51LCBudWxsLCAkcGFnZUF1dGhvciwgJHBhZ2VLZXl3b3JkcywgJHBhZ2VUaXRsZSwgJGh0bWwpOwogPz4KZGlmZiAtLWdpdCBhL2Rvd25sb2Fkcy9pbmRleDIucGhwIGIvZG93bmxvYWRzL2luZGV4Mi5waHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIxZTc5MDkuLjAwMDAwMDAKLS0tIGEvZG93bmxvYWRzL2luZGV4Mi5waHAKKysrIC9kZXYvbnVsbApAQCAtMSwxMDYgKzAsMCBAQAotPD9waHAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDksIDIwMTQgRWNsaXBzZSBGb3VuZGF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgIEdy6WdvaXJlIER1cOkgKE1pYS1Tb2Z0d2FyZSkKLSAqCSAgSHVnbyBCcnVuZWxpZXJlIChJbnJpYSkKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0JcmVxdWlyZV9vbmNlKCRfU0VSVkVSWydET0NVTUVOVF9ST09UJ10gLiAiL2VjbGlwc2Uub3JnLWNvbW1vbi9zeXN0ZW0vYXBwLmNsYXNzLnBocCIpOwkKLQlyZXF1aXJlX29uY2UoJF9TRVJWRVJbJ0RPQ1VNRU5UX1JPT1QnXSAuICIvZWNsaXBzZS5vcmctY29tbW9uL3N5c3RlbS9uYXYuY2xhc3MucGhwIik7Ci0JcmVxdWlyZV9vbmNlKCRfU0VSVkVSWydET0NVTUVOVF9ST09UJ10gLiAiL2VjbGlwc2Uub3JnLWNvbW1vbi9zeXN0ZW0vbWVudS5jbGFzcy5waHAiKTsgCQotCSRBcHAgCT0gbmV3IEFwcCgpOwotCSROYXYJPSBuZXcgTmF2KCk7Ci0JJE1lbnUgCT0gbmV3IE1lbnUoKTsKLQlpbmNsdWRlKCRBcHAtPmdldFByb2plY3RDb21tb24oKSk7Ci0KLQkjIERlZmluZSB0aGVzZSBoZXJlLCBvciBpbiBfcHJvamVjdENvbW1vbi5waHAgZm9yIHNpdGUtd2lkZSB2YWx1ZXMKLQkkcGFnZUtleXdvcmRzCT0gImVjbGlwc2UsIG1vZGVsaW5nLCBlbWYsIG1vZGlzY28sIHJldmVyc2UgZW5naW5lZXJpbmcsIG1vZGVybml6YXRpb24sIG1kZSI7Ci0JJHBhZ2VBdXRob3IJCT0gIkdyZWdvaXJlIER1cGUsIEh1Z28gQnJ1bmVsaWVyZSI7Ci0JJHBhZ2VUaXRsZSAJCT0gIk1vRGlzY28iOwotCQotJGh0bWw9IiI7Ci0KLSRkcm9wcz0ibW9kZWxpbmcvbWR0L21vZGlzY28vZG93bmxvYWRzL2Ryb3BzIjsKLSRkb3dubG9hZF9yb290ZGlyPSIvaG9tZS9kYXRhMi9odHRwZC9kb3dubG9hZC5lY2xpcHNlLm9yZy8kZHJvcHMvIjsKLSRhcmNoaXZlX3Jvb3RkaXI9Ii9ob21lL2RhdGEyL2h0dHBkL2FyY2hpdmUuZWNsaXBzZS5vcmcvJGRyb3BzLyI7Ci0kaHR0cF9wcmVmaXg9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZG93bmxvYWRzL2Rvd25sb2FkLnBocD9maWxlPS8iOwotCi1mdW5jdGlvbiBicm93c2UoJHJvb3RkaXIpewotJHZlcnNpb25fZGlycyA9IHNjYW5kaXIoJHJvb3RkaXIpOwotJGFycj1hcnJheSgpOwotZm9yICgkaSA9IDIgOyAkaSA8IGNvdW50KCR2ZXJzaW9uX2RpcnMpIDsgJGkrKyl7Ci0gICAgJHZlcnNpb24gPSAkdmVyc2lvbl9kaXJzWyRpXTsKLSAgICAkcXVhbGlmaWVyc19kaXJzID0gc2NhbmRpcigiJHJvb3RkaXIvJHZlcnNpb24iKTsKLSAgICBmb3IgKCRqID0gMiA7ICRqIDwgY291bnQoJHF1YWxpZmllcnNfZGlycykgOyAkaisrKXsKLSAgICAgICRxdWFsaWZpZXIgPSAkcXVhbGlmaWVyc19kaXJzWyRqXTsKLSAgICAgICRmaWxlcyA9IHNjYW5kaXIoIiRyb290ZGlyLyR2ZXJzaW9uLyRxdWFsaWZpZXIiKTsKLSAgICAgIGZvciAoJGsgPSAyIDsgJGsgPCBjb3VudCgkZmlsZXMpIDsgJGsrKyl7Ci0gICAgICAgICAgJHh4eCA9ICRmaWxlc1ska107Ci0gICAgICAgICAgaWYgKHN1YnN0cigkeHh4LCAtc3RybGVuKCIuemlwIikpID09PSAiLnppcCIpewotICAgICAgICAgICAgICAkYXJyW109YXJyYXkoCi0gICAgICAgICAgICAgICAgICJwYXRoIiA9PiAiJHZlcnNpb24vJHF1YWxpZmllci8keHh4IiwKLSAgICAgICAgICAgICAgICAgInNob3J0bmFtZSIgPT4gJHh4eCwKLSAgICAgICAgICAgICAgICAgInF1YWxpZmllciIgPT4gJHF1YWxpZmllcgotICAgICAgICAgICAgICApOwotICAgICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci19Ci1yZXR1cm4gJGFycjsKLX0KLQotZnVuY3Rpb24gcHJpbnRfbGkoJGh0dHBfcHJlZml4LCRkcm9wcywkcmVzdWx0LCRpKXsKLSAgICAkaHRtbCA9IiI7Ci0gICAgJGhyZWY9IiRodHRwX3ByZWZpeC8kZHJvcHMvIi4kcmVzdWx0WyRpXVsicGF0aCJdOwotICAgICR0eHQ9JHJlc3VsdFskaV1bInNob3J0bmFtZSJdOwotICAgICRodG1sLj0iPGxpPjxhIGhyZWY9JyRocmVmJz4kdHh0PC9hPjwvbGk+IjsKLSAgICByZXR1cm4gJGh0bWw7Ci19Ci0KLWZ1bmN0aW9uIGNtcCgkYSwgJGIpewotICAkYXJyX2EgPSBleHBsb2RlKCItIiwgJGFbInNob3J0bmFtZSJdKTsKLSAgJGFycl9iID0gZXhwbG9kZSgiLSIsICRiWyJzaG9ydG5hbWUiXSk7Ci0gICRsYXN0X2E9Y291bnQoJGFycl9hKTsgCi0gICRsYXN0X2I9Y291bnQoJGFycl9iKTsKLSAgJGFfdmVyc2lvbj0kYXJyX2FbJGxhc3RfYS0xXTsKLSAgJGJfdmVyc2lvbj0kYXJyX2JbJGxhc3RfYi0xXTsKLSAgaWYgKCAkYV92ZXJzaW9uPT0gJGJfdmVyc2lvbil7Ci0gICAgcmV0dXJuIDA7Ci0gIH0KLSAgcmV0dXJuICgkYV92ZXJzaW9uID4gJGJfdmVyc2lvbikgPyAtMSA6IDEgOwotfQotCi0KLSRkb3dubG9hZF9yZXN1bHQgPSBicm93c2UoJGRvd25sb2FkX3Jvb3RkaXIpOwotJGFyY2hpdmVfcmVzdWx0ID0gYnJvd3NlKCRhcmNoaXZlX3Jvb3RkaXIpOwotJHJlc3VsdD0gYXJyYXlfbWVyZ2UoJGRvd25sb2FkX3Jlc3VsdCwgJGFyY2hpdmVfcmVzdWx0KTsKLXVzb3J0KCRyZXN1bHQsICJjbXAiKTsKLSRodG1sPSI8aDE+UmVsZWFzZXM8L2gxPiI7Ci0kaHRtbC49Ijx1bD4iOwotZm9yICgkaSA9IDA7ICRpIDwgY291bnQoJHJlc3VsdCkgOyAkaSsrKXsKLSAgICAkcXVhbGlmaWVyID0gJHJlc3VsdFskaV1bInF1YWxpZmllciJdOwotICAgIGlmIChzdHJwb3MoJHF1YWxpZmllciwgIlIiKSA9PT0gMCl7Ci0gICAgICAgICRodG1sLj1wcmludF9saSgkaHR0cF9wcmVmaXgsJGRyb3BzLCRyZXN1bHQsJGkpOwotICAgIH0KLX0KLSRodG1sLj0iPC91bD4iOwotJGh0bWwuPSI8aDE+U3RhYmxlIGJ1aWxkczwvaDE+IjsKLSRodG1sLj0iPHVsPiI7Ci1mb3IgKCRpID0gMDsgJGkgPCBjb3VudCgkcmVzdWx0KSA7ICRpKyspewotICAgICRxdWFsaWZpZXIgPSAkcmVzdWx0WyRpXVsicXVhbGlmaWVyIl07Ci0gICAgaWYgKHN0cnBvcygkcXVhbGlmaWVyLCAiUyIpID09PSAwKXsKLSAgICAgICAgJGh0bWwuPXByaW50X2xpKCRodHRwX3ByZWZpeCwkZHJvcHMsJHJlc3VsdCwkaSk7Ci0gICAgfQotfQotJGh0bWwuPSI8L3VsPiI7Ci0KLQotCi0kQXBwLT5nZW5lcmF0ZVBhZ2UoJHRoZW1lLCAkTWVudSwgbnVsbCwgJHBhZ2VBdXRob3IsICRwYWdlS2V5d29yZHMsICRwYWdlVGl0bGUsICRodG1sKTsKLT8+Cg==