Skip to content

Instantly share code, notes, and snippets.

@haidv35
Created January 11, 2022 03:47
Show Gist options
  • Save haidv35/f35adb2804b78b8d075c6783b8e4bd1f to your computer and use it in GitHub Desktop.
Save haidv35/f35adb2804b78b8d075c6783b8e4bd1f to your computer and use it in GitHub Desktop.
SmF2YS5wZXJmb3JtKGZ1bmN0aW9uICgpIHsKICAgIGNvbnN0IFN5c3RlbSA9IEphdmEudXNlKCdqYXZhLmxhbmcuU3lzdGVtJyk7CiAgICBjb25zdCBSdW50aW1lID0gSmF2YS51c2UoJ2phdmEubGFuZy5SdW50aW1lJyk7CiAgICBjb25zdCBWTVN0YWNrID0gSmF2YS51c2UoJ2RhbHZpay5zeXN0ZW0uVk1TdGFjaycpOwogICAgU3lzdGVtLmxvYWRMaWJyYXJ5LmltcGxlbWVudGF0aW9uID0gZnVuY3Rpb24gKGxpYnJhcnkpIHsKICAgICAgICB0cnkgewogICAgICAgICAgICBjb25zb2xlLmxvZygnU3lzdGVtLmxvYWRMaWJyYXJ5KCInICsgbGlicmFyeSArICciKScpOwogICAgICAgICAgICBjb25zb2xlLmxvZyhKYXZhLnVzZSgiYW5kcm9pZC51dGlsLkxvZyIpLmdldFN0YWNrVHJhY2VTdHJpbmcoSmF2YS51c2UoImphdmEubGFuZy5UaHJvd2FibGUiKS4kbmV3KCkpKTsKICAgICAgICAgICAKICAgICAgICAgICAgaWYgKGxpYnJhcnkgPT0gIm5hdGl2ZS1saWIiKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICAgICAgICAgIEludGVyY2VwdG9yLmF0dGFjaChNb2R1bGUuZmluZEV4cG9ydEJ5TmFtZShudWxsLCAic3Ryc3RyIiksIHsKICAgICAgICAgICAgICAgICAgICBvbkVudGVyOiBmdW5jdGlvbiAoYXJncykgewogICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmhheXN0YWNrID0gYXJnc1swXTsKICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5uZWVkbGUgPSBhcmdzWzFdOwogICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmZyaWRhID0gQm9vbGVhbigwKTsKICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGhheXN0YWNrID0gTWVtb3J5LnJlYWRVdGY4U3RyaW5nKHRoaXMuaGF5c3RhY2spOwogICAgICAgICAgICAgICAgICAgICAgICB2YXIgbmVlZGxlID0gTWVtb3J5LnJlYWRVdGY4U3RyaW5nKHRoaXMubmVlZGxlKTsKICAgICAgICAgICAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2coInN0cnN0ciA9ICIrIGhheXN0YWNrKTsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGhheXN0YWNrLmluZGV4T2YoImZyaWRhIikgIT0gLTEgfHwgaGF5c3RhY2suaW5kZXhPZigieHBvc2VkIikgIT0gLTEpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCJzdHJzdHJ+ISEhISEhISEhISIpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5mcmlkYSA9IEJvb2xlYW4oMSk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgIG9uTGVhdmU6IGZ1bmN0aW9uIChyZXR2YWwpIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuZnJpZGEpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCItbGliY2hlY2tzLnNvIHN0cnN0ciAgIiArIE1lbW9yeS5yZWFkVXRmOFN0cmluZyh0aGlzLm5lZWRsZSkgKyAiID09PSAiICsgTWVtb3J5LnJlYWRVdGY4U3RyaW5nKHRoaXMuaGF5c3RhY2spKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHZhbC5yZXBsYWNlKDB4MCk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJldHZhbDsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgfSAKICAgICAgICAgICAgY29uc3QgbG9hZGVkID0gUnVudGltZS5nZXRSdW50aW1lKCkubG9hZExpYnJhcnkwKFZNU3RhY2suZ2V0Q2FsbGluZ0NsYXNzTG9hZGVyKCksIGxpYnJhcnkpOwogICAgICAgICAgICByZXR1cm4gbG9hZGVkOwogICAgICAgIH1jYXRjaCAoZSkgewogICAgICAgICAgICBjb25zb2xlLmxvZyhlKTsKICAgICAgICB9CiAgICB9OwoKCn0pOwoKCkphdmEucGVyZm9ybShmdW5jdGlvbiAoKSB7CiAgICB2YXIgYSA9IG51bGw7CiAgICB2YXIgYiA9IG51bGw7CiAgICB2YXIgUmV0cm9maXRDID0gSmF2YS51c2UoImNvbS5icGx1cy52dHBheS5yZXRyb2ZpdC5jIik7CiAgICBSZXRyb2ZpdEMuY2hlY2tDbGllbnRUcnVzdGVkLm92ZXJsb2FkKCdMamF2YS5zZWN1cml0eS5jZXJ0Llg1MDlDZXJ0aWZpY2F0ZScsICdqYXZhLmxhbmcuU3RyaW5nJykuaW1wbGVtZW50YXRpb24gPSBmdW5jdGlvbiAoYSxiKSB7CiAgICAgICByZXR1cm4KICAgIH07CiAgICBSZXRyb2ZpdEMuY2hlY2tTZXJ2ZXJUcnVzdGVkLm92ZXJsb2FkKCdMamF2YS5zZWN1cml0eS5jZXJ0Llg1MDlDZXJ0aWZpY2F0ZScsICdqYXZhLmxhbmcuU3RyaW5nJykuaW1wbGVtZW50YXRpb24gPSBmdW5jdGlvbiAoYSxiKSB7CiAgICAgICByZXR1cm4KICAgIH07Cn0pOwoKSmF2YS5wZXJmb3JtKGZ1bmN0aW9uICgpIHsKICAgIHZhciBhID0gbnVsbDsKICAgIHZhciBiID0gbnVsbDsKICAgIHZhciBEb3RwID0gSmF2YS51c2UoInZuLmNvbS52aWV0dGVsLnZkcy52YW5pbGxhbGliLmFwcC5kb3RwLkRvdHAiKTsKICAgIERvdHAuaXNVc2VyQWN0aXZlLm92ZXJsb2FkKCdhbmRyb2lkLmNvbnRlbnQuQ29udGV4dCcsICdqYXZhLmxhbmcuU3RyaW5nJykuaW1wbGVtZW50YXRpb24gPSBmdW5jdGlvbiAoYSxiKSB7CiAgICAgICByZXR1cm4gdHJ1ZTsKICAgIH07CiAgICBEb3RwLmRlbGV0ZVVzZXIub3ZlcmxvYWQoJ2FuZHJvaWQuY29udGVudC5Db250ZXh0JywgJ2phdmEubGFuZy5TdHJpbmcnKS5pbXBsZW1lbnRhdGlvbiA9IGZ1bmN0aW9uIChhLGIpIHsKICAgICAgICByZXR1cm47CiAgICAgfTsKfSk7CgoKc2V0VGltZW91dChmdW5jdGlvbigpIHsKICAgIEphdmEucGVyZm9ybShmdW5jdGlvbigpIHsKICAgICAgICBjb25zb2xlLmxvZygiIik7CiAgICAgICAgY29uc29sZS5sb2coIlsuXSBBbmRyb2lkIENlcnQgUGlubmluZyBCeXBhc3MiKTsKCiAgICAgICAgdmFyIENlcnRpZmljYXRlRmFjdG9yeSA9IEphdmEudXNlKCJqYXZhLnNlY3VyaXR5LmNlcnQuQ2VydGlmaWNhdGVGYWN0b3J5Iik7CiAgICAgICAgdmFyIEZpbGVJbnB1dFN0cmVhbSA9IEphdmEudXNlKCJqYXZhLmlvLkZpbGVJbnB1dFN0cmVhbSIpOwogICAgICAgIHZhciBCdWZmZXJlZElucHV0U3RyZWFtID0gSmF2YS51c2UoImphdmEuaW8uQnVmZmVyZWRJbnB1dFN0cmVhbSIpOwogICAgICAgIHZhciBYNTA5Q2VydGlmaWNhdGUgPSBKYXZhLnVzZSgiamF2YS5zZWN1cml0eS5jZXJ0Llg1MDlDZXJ0aWZpY2F0ZSIpOwogICAgICAgIHZhciBLZXlTdG9yZSA9IEphdmEudXNlKCJqYXZhLnNlY3VyaXR5LktleVN0b3JlIik7CiAgICAgICAgdmFyIFRydXN0TWFuYWdlckZhY3RvcnkgPSBKYXZhLnVzZSgiamF2YXgubmV0LnNzbC5UcnVzdE1hbmFnZXJGYWN0b3J5Iik7CiAgICAgICAgdmFyIFNTTENvbnRleHQgPSBKYXZhLnVzZSgiamF2YXgubmV0LnNzbC5TU0xDb250ZXh0Iik7CiAgICAgICAgdmFyIFg1MDlUcnVzdE1hbmFnZXIgPSBKYXZhLnVzZSgnamF2YXgubmV0LnNzbC5YNTA5VHJ1c3RNYW5hZ2VyJyk7CiAgICAgICAgY29uc29sZS5sb2coIlsuXSBUcnVzdE1hbmFnZXJJbXBsIEFuZHJvaWQgNysgZGV0ZWN0aW9uLi4uIik7CiAgICAgICAgdHJ5IHsKICAgICAgICAgICAgdmFyIFRydXN0TWFuYWdlckltcGwgPSBKYXZhLnVzZSgnY29tLmFuZHJvaWQub3JnLmNvbnNjcnlwdC5UcnVzdE1hbmFnZXJJbXBsJyk7CiAgICAgICAgICAgIFRydXN0TWFuYWdlckltcGwudmVyaWZ5Q2hhaW4uaW1wbGVtZW50YXRpb24gPSBmdW5jdGlvbih1bnRydXN0ZWRDaGFpbiwgdHJ1c3RBbmNob3JDaGFpbiwgaG9zdCwgY2xpZW50QXV0aCwgb2NzcERhdGEsIHRsc1NjdERhdGEpIHsKICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCJbK10gKEFuZHJvaWQgNyspIFRydXN0TWFuYWdlckltcGwgdmVyaWZ5Q2hhaW4oKSBjYWxsZWQuIE5vdCB0aHJvd2luZyBhbiBleGNlcHRpb24uIik7CiAgICAgICAgICAgICAgICByZXR1cm4gdW50cnVzdGVkQ2hhaW47CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIFBpbm5pbmdUcnVzdE1hbmFnZXIuY2hlY2tTZXJ2ZXJUcnVzdGVkLmltcGxlbWVudGF0aW9uID0gZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygiWytdIEFwcGNlbGVyYXRvciBjaGVja1NlcnZlclRydXN0ZWQoKSBjYWxsZWQuIE5vdCB0aHJvd2luZyBhbiBleGNlcHRpb24uIik7CiAgICAgICAgICAgIH0KICAgICAgICB9IGNhdGNoIChlcnIpIHsKICAgICAgICAgICAgY29uc29sZS5sb2coIlstXSBUcnVzdE1hbmFnZXJJbXBsIE5vdCBGb3VuZCIpOwogICAgICAgIH0KICAgICAgICBjb25zb2xlLmxvZygiWy5dIFRydXN0TWFuYWdlciBBbmRyb2lkIDwgNyBkZXRlY3Rpb24uLi4iKTsKICAgICAgICAKICAgICAgICB2YXIgVHJ1c3RNYW5hZ2VyID0gSmF2YS5yZWdpc3RlckNsYXNzKHsKICAgICAgICAgICAgbmFtZTogJ2NvbS5zZW5zZXBvc3QudGVzdC5UcnVzdE1hbmFnZXInLAogICAgICAgICAgICBpbXBsZW1lbnRzOiBbWDUwOVRydXN0TWFuYWdlcl0sCiAgICAgICAgICAgIG1ldGhvZHM6IHsKICAgICAgICAgICAgICAgIGNoZWNrQ2xpZW50VHJ1c3RlZDogZnVuY3Rpb24oY2hhaW4sIGF1dGhUeXBlKSB7fSwKICAgICAgICAgICAgICAgIGNoZWNrU2VydmVyVHJ1c3RlZDogZnVuY3Rpb24oY2hhaW4sIGF1dGhUeXBlKSB7fSwKICAgICAgICAgICAgICAgIGdldEFjY2VwdGVkSXNzdWVyczogZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFtdOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICAgICAgdmFyIFRydXN0TWFuYWdlcnMgPSBbVHJ1c3RNYW5hZ2VyLiRuZXcoKV07CiAgICAgICAgdmFyIFNTTENvbnRleHRfaW5pdCA9IFNTTENvbnRleHQuaW5pdC5vdmVybG9hZCgKICAgICAgICAgICAgJ1tMamF2YXgubmV0LnNzbC5LZXlNYW5hZ2VyOycsICdbTGphdmF4Lm5ldC5zc2wuVHJ1c3RNYW5hZ2VyOycsICdqYXZhLnNlY3VyaXR5LlNlY3VyZVJhbmRvbScpOwoKICAgICAgICB0cnkgewogICAgICAgICAgICBTU0xDb250ZXh0X2luaXQuaW1wbGVtZW50YXRpb24gPSBmdW5jdGlvbihrZXlNYW5hZ2VyLCB0cnVzdE1hbmFnZXIsIHNlY3VyZVJhbmRvbSkgewogICAgICAgICAgICAgICAgY29uc29sZS5sb2coIlsrXSBPdmVycmlkaW5nIFNTTENvbnRleHQuaW5pdCgpIHdpdGggdGhlIGN1c3RvbSBUcnVzdE1hbmFnZXIgYW5kcm9pZCA8IDciKTsKICAgICAgICAgICAgICAgIFNTTENvbnRleHRfaW5pdC5jYWxsKHRoaXMsIGtleU1hbmFnZXIsIFRydXN0TWFuYWdlcnMsIHNlY3VyZVJhbmRvbSk7CiAgICAgICAgICAgIH07CiAgICAgICAgfSBjYXRjaCAoZXJyKSB7CiAgICAgICAgICAgIGNvbnNvbGUubG9nKCJbLV0gVHJ1c3RNYW5hZ2VyIE5vdCBGb3VuZCIpOwogICAgICAgIH0KICAgIH0pOwp9KTs=
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment