@vtj/designer 0.9.3 → 0.9.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (46) hide show
  1. package/dist/{Editor-C1dy1R3N.js → Editor-ZiUDqfgK.js} +1 -1
  2. package/dist/css.worker-DcQjDQkA.js +109 -0
  3. package/dist/editor.worker-lG8NyUhA.js +25 -0
  4. package/dist/html.worker-B83UVBG6.js +25 -0
  5. package/dist/index.mjs +228 -226
  6. package/dist/json.worker-Deqi-XXW.js +25 -0
  7. package/dist/ts.worker-P1pVlN2Z.js +51359 -0
  8. package/package.json +8 -8
  9. package/types/components/editor/Editor.d.ts +1 -1
  10. package/types/components/editor/index.d.ts +1 -1
  11. package/types/components/regions/empty.d.ts +1 -1
  12. package/types/components/regions/index.d.ts +2 -2
  13. package/types/components/regions/toolbar.d.ts +1 -1
  14. package/types/components/setters/file.d.ts +1 -1
  15. package/types/components/setters/function.d.ts +1 -1
  16. package/types/components/setters/icon.d.ts +1 -1
  17. package/types/components/setters/index.d.ts +7 -7
  18. package/types/components/setters/json.d.ts +1 -1
  19. package/types/components/setters/section.d.ts +1 -1
  20. package/types/components/setters/slider.d.ts +1 -1
  21. package/types/components/setters/tag.d.ts +1 -1
  22. package/types/components/shared/binder.d.ts +2 -1
  23. package/types/components/shared/box.d.ts +3 -2
  24. package/types/components/shared/item.d.ts +2 -1
  25. package/types/components/shared/panel.d.ts +2 -1
  26. package/types/components/shared/tabs.d.ts +2 -1
  27. package/types/components/shared/viewer.d.ts +1 -1
  28. package/types/components/shared/viewport.d.ts +3 -2
  29. package/types/components/widgets/about/index.d.ts +1 -1
  30. package/types/components/widgets/actions/coder.d.ts +1 -1
  31. package/types/components/widgets/apis/base-info.d.ts +1 -1
  32. package/types/components/widgets/apis/jsonp-options.d.ts +1 -1
  33. package/types/components/widgets/apis/mock-template.d.ts +1 -1
  34. package/types/components/widgets/apis/request-settings.d.ts +1 -1
  35. package/types/components/widgets/designer/actions.d.ts +1 -1
  36. package/types/components/widgets/empty/index.d.ts +1 -1
  37. package/types/components/widgets/index.d.ts +3 -3
  38. package/types/components/widgets/previewer/index.d.ts +1 -1
  39. package/types/components/widgets/scripts/group.d.ts +3 -2
  40. package/types/components/widgets/style/spacing-input.d.ts +1 -1
  41. package/types/version.d.ts +3 -3
  42. package/dist/css.worker-BkwH8iYE.js +0 -25
  43. package/dist/editor.worker-C8k3yDdT.js +0 -25
  44. package/dist/html.worker-DefZQYbA.js +0 -25
  45. package/dist/json.worker-05I1Fjzo.js +0 -25
  46. package/dist/ts.worker-Dn3IQaLA.js +0 -25
@@ -1,25 +0,0 @@
1
- const c = "KGZ1bmN0aW9uKCl7InVzZSBzdHJpY3QiO2NsYXNzIE1ye2NvbnN0cnVjdG9yKCl7dGhpcy5saXN0ZW5lcnM9W10sdGhpcy51bmV4cGVjdGVkRXJyb3JIYW5kbGVyPWZ1bmN0aW9uKHQpe3NldFRpbWVvdXQoKCk9Pnt0aHJvdyB0LnN0YWNrP0VlLmlzRXJyb3JOb1RlbGVtZXRyeSh0KT9uZXcgRWUodC5tZXNzYWdlK2AKCmArdC5zdGFjayk6bmV3IEVycm9yKHQubWVzc2FnZStgCgpgK3Quc3RhY2spOnR9LDApfX1lbWl0KHQpe3RoaXMubGlzdGVuZXJzLmZvckVhY2gobj0+e24odCl9KX1vblVuZXhwZWN0ZWRFcnJvcih0KXt0aGlzLnVuZXhwZWN0ZWRFcnJvckhhbmRsZXIodCksdGhpcy5lbWl0KHQpfW9uVW5leHBlY3RlZEV4dGVybmFsRXJyb3IodCl7dGhpcy51bmV4cGVjdGVkRXJyb3JIYW5kbGVyKHQpfX1jb25zdCBrcj1uZXcgTXI7ZnVuY3Rpb24gbHQoZSl7RnIoZSl8fGtyLm9uVW5leHBlY3RlZEVycm9yKGUpfWZ1bmN0aW9uIE5uKGUpe2lmKGUgaW5zdGFuY2VvZiBFcnJvcil7Y29uc3R7bmFtZTp0LG1lc3NhZ2U6bn09ZSxzPWUuc3RhY2t0cmFjZXx8ZS5zdGFjaztyZXR1cm57JGlzRXJyb3I6ITAsbmFtZTp0LG1lc3NhZ2U6bixzdGFjazpzLG5vVGVsZW1ldHJ5OkVlLmlzRXJyb3JOb1RlbGVtZXRyeShlKX19cmV0dXJuIGV9Y29uc3QgVHQ9IkNhbmNlbGVkIjtmdW5jdGlvbiBGcihlKXtyZXR1cm4gZSBpbnN0YW5jZW9mIERyPyEwOmUgaW5zdGFuY2VvZiBFcnJvciYmZS5uYW1lPT09VHQmJmUubWVzc2FnZT09PVR0fWNsYXNzIERyIGV4dGVuZHMgRXJyb3J7Y29uc3RydWN0b3IoKXtzdXBlcihUdCksdGhpcy5uYW1lPXRoaXMubWVzc2FnZX19Y2xhc3MgRWUgZXh0ZW5kcyBFcnJvcntjb25zdHJ1Y3Rvcih0KXtzdXBlcih0KSx0aGlzLm5hbWU9IkNvZGVFeHBlY3RlZEVycm9yIn1zdGF0aWMgZnJvbUVycm9yKHQpe2lmKHQgaW5zdGFuY2VvZiBFZSlyZXR1cm4gdDtjb25zdCBuPW5ldyBFZTtyZXR1cm4gbi5tZXNzYWdlPXQubWVzc2FnZSxuLnN0YWNrPXQuc3RhY2ssbn1zdGF0aWMgaXNFcnJvck5vVGVsZW1ldHJ5KHQpe3JldHVybiB0Lm5hbWU9PT0iQ29kZUV4cGVjdGVkRXJyb3IifX1jbGFzcyB0ZSBleHRlbmRzIEVycm9ye2NvbnN0cnVjdG9yKHQpe3N1cGVyKHR8fCJBbiB1bmV4cGVjdGVkIGJ1ZyBvY2N1cnJlZC4iKSxPYmplY3Quc2V0UHJvdG90eXBlT2YodGhpcyx0ZS5wcm90b3R5cGUpfX1mdW5jdGlvbiBQcihlLHQpe2NvbnN0IG49dGhpcztsZXQgcz0hMSxyO3JldHVybiBmdW5jdGlvbigpe3JldHVybiBzfHwocz0hMCxyPWUuYXBwbHkobixhcmd1bWVudHMpKSxyfX12YXIgb3Q7KGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQocCl7cmV0dXJuIHAmJnR5cGVvZiBwPT0ib2JqZWN0IiYmdHlwZW9mIHBbU3ltYm9sLml0ZXJhdG9yXT09ImZ1bmN0aW9uIn1lLmlzPXQ7Y29uc3Qgbj1PYmplY3QuZnJlZXplKFtdKTtmdW5jdGlvbiBzKCl7cmV0dXJuIG59ZS5lbXB0eT1zO2Z1bmN0aW9uKnIocCl7eWllbGQgcH1lLnNpbmdsZT1yO2Z1bmN0aW9uIGkocCl7cmV0dXJuIHQocCk/cDpyKHApfWUud3JhcD1pO2Z1bmN0aW9uIGwocCl7cmV0dXJuIHB8fG59ZS5mcm9tPWw7ZnVuY3Rpb24qbyhwKXtmb3IobGV0IHg9cC5sZW5ndGgtMTt4Pj0wO3gtLSl5aWVsZCBwW3hdfWUucmV2ZXJzZT1vO2Z1bmN0aW9uIHUocCl7cmV0dXJuIXB8fHBbU3ltYm9sLml0ZXJhdG9yXSgpLm5leHQoKS5kb25lPT09ITB9ZS5pc0VtcHR5PXU7ZnVuY3Rpb24gYyhwKXtyZXR1cm4gcFtTeW1ib2wuaXRlcmF0b3JdKCkubmV4dCgpLnZhbHVlfWUuZmlyc3Q9YztmdW5jdGlvbiBmKHAseCl7bGV0IHY9MDtmb3IoY29uc3QgQSBvZiBwKWlmKHgoQSx2KyspKXJldHVybiEwO3JldHVybiExfWUuc29tZT1mO2Z1bmN0aW9uIGgocCx4KXtmb3IoY29uc3QgdiBvZiBwKWlmKHgodikpcmV0dXJuIHZ9ZS5maW5kPWg7ZnVuY3Rpb24qZChwLHgpe2Zvcihjb25zdCB2IG9mIHApeCh2KSYmKHlpZWxkIHYpfWUuZmlsdGVyPWQ7ZnVuY3Rpb24qbShwLHgpe2xldCB2PTA7Zm9yKGNvbnN0IEEgb2YgcCl5aWVsZCB4KEEsdisrKX1lLm1hcD1tO2Z1bmN0aW9uKmcocCx4KXtsZXQgdj0wO2Zvcihjb25zdCBBIG9mIHApeWllbGQqeChBLHYrKyl9ZS5mbGF0TWFwPWc7ZnVuY3Rpb24qYiguLi5wKXtmb3IoY29uc3QgeCBvZiBwKXlpZWxkKnh9ZS5jb25jYXQ9YjtmdW5jdGlvbiB3KHAseCx2KXtsZXQgQT12O2Zvcihjb25zdCB5IG9mIHApQT14KEEseSk7cmV0dXJuIEF9ZS5yZWR1Y2U9dztmdW5jdGlvbipOKHAseCx2PXAubGVuZ3RoKXtmb3IoeDwwJiYoeCs9cC5sZW5ndGgpLHY8MD92Kz1wLmxlbmd0aDp2PnAubGVuZ3RoJiYodj1wLmxlbmd0aCk7eDx2O3grKyl5aWVsZCBwW3hdfWUuc2xpY2U9TjtmdW5jdGlvbiBDKHAseD1OdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFkpe2NvbnN0IHY9W107aWYoeD09PTApcmV0dXJuW3YscF07Y29uc3QgQT1wW1N5bWJvbC5pdGVyYXRvcl0oKTtmb3IobGV0IHk9MDt5PHg7eSsrKXtjb25zdCBJPUEubmV4dCgpO2lmKEkuZG9uZSlyZXR1cm5bdixlLmVtcHR5KCldO3YucHVzaChJLnZhbHVlKX1yZXR1cm5bdix7W1N5bWJvbC5pdGVyYXRvcl0oKXtyZXR1cm4gQX19XX1lLmNvbnN1bWU9Qzthc3luYyBmdW5jdGlvbiBTKHApe2NvbnN0IHg9W107Zm9yIGF3YWl0KGNvbnN0IHYgb2YgcCl4LnB1c2godik7cmV0dXJuIFByb21pc2UucmVzb2x2ZSh4KX1lLmFzeW5jVG9BcnJheT1TfSkob3R8fChvdD17fSkpO2Z1bmN0aW9uIGNhKGUpe3JldHVybiBlfWZ1bmN0aW9uIGhhKGUsdCl7fWZ1bmN0aW9uIHZuKGUpe2lmKG90LmlzKGUpKXtjb25zdCB0PVtdO2Zvcihjb25zdCBuIG9mIGUpaWYobil0cnl7bi5kaXNwb3NlKCl9Y2F0Y2gocyl7dC5wdXNoKHMpfWlmKHQubGVuZ3RoPT09MSl0aHJvdyB0WzBdO2lmKHQubGVuZ3RoPjEpdGhyb3cgbmV3IEFnZ3JlZ2F0ZUVycm9yKHQsIkVuY291bnRlcmVkIGVycm9ycyB3aGlsZSBkaXNwb3Npbmcgb2Ygc3RvcmUiKTtyZXR1cm4gQXJyYXkuaXNBcnJheShlKT9bXTplfWVsc2UgaWYoZSlyZXR1cm4gZS5kaXNwb3NlKCksZX1mdW5jdGlvbiBUciguLi5lKXtyZXR1cm4gdXQoKCk9PnZuKGUpKX1mdW5jdGlvbiB1dChlKXtyZXR1cm57ZGlzcG9zZTpQcigoKT0+e2UoKX0pfX1jb25zdCBSdD1jbGFzcyBSdHtjb25zdHJ1Y3Rvcigpe3RoaXMuX3RvRGlzcG9zZT1uZXcgU2V0LHRoaXMuX2lzRGlzcG9zZWQ9ITF9ZGlzcG9zZSgpe3RoaXMuX2lzRGlzcG9zZWR8fCh0aGlzLl9pc0Rpc3Bvc2VkPSEwLHRoaXMuY2xlYXIoKSl9Z2V0IGlzRGlzcG9zZWQoKXtyZXR1cm4gdGhpcy5faXNEaXNwb3NlZH1jbGVhcigpe2lmKHRoaXMuX3RvRGlzcG9zZS5zaXplIT09MCl0cnl7dm4odGhpcy5fdG9EaXNwb3NlKX1maW5hbGx5e3RoaXMuX3RvRGlzcG9zZS5jbGVhcigpfX1hZGQodCl7aWYoIXQpcmV0dXJuIHQ7aWYodD09PXRoaXMpdGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgcmVnaXN0ZXIgYSBkaXNwb3NhYmxlIG9uIGl0c2VsZiEiKTtyZXR1cm4gdGhpcy5faXNEaXNwb3NlZD9SdC5ESVNBQkxFX0RJU1BPU0VEX1dBUk5JTkd8fGNvbnNvbGUud2FybihuZXcgRXJyb3IoIlRyeWluZyB0byBhZGQgYSBkaXNwb3NhYmxlIHRvIGEgRGlzcG9zYWJsZVN0b3JlIHRoYXQgaGFzIGFscmVhZHkgYmVlbiBkaXNwb3NlZCBvZi4gVGhlIGFkZGVkIG9iamVjdCB3aWxsIGJlIGxlYWtlZCEiKS5zdGFjayk6dGhpcy5fdG9EaXNwb3NlLmFkZCh0KSx0fWRlbGV0ZUFuZExlYWsodCl7dCYmdGhpcy5fdG9EaXNwb3NlLmhhcyh0KSYmdGhpcy5fdG9EaXNwb3NlLmRlbGV0ZSh0KX19O1J0LkRJU0FCTEVfRElTUE9TRURfV0FSTklORz0hMTtsZXQgWGU9UnQ7Y29uc3QgTG49Y2xhc3MgTG57Y29uc3RydWN0b3IoKXt0aGlzLl9zdG9yZT1uZXcgWGUsdGhpcy5fc3RvcmV9ZGlzcG9zZSgpe3RoaXMuX3N0b3JlLmRpc3Bvc2UoKX1fcmVnaXN0ZXIodCl7aWYodD09PXRoaXMpdGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgcmVnaXN0ZXIgYSBkaXNwb3NhYmxlIG9uIGl0c2VsZiEiKTtyZXR1cm4gdGhpcy5fc3RvcmUuYWRkKHQpfX07TG4uTm9uZT1PYmplY3QuZnJlZXplKHtkaXNwb3NlKCl7fX0pO2xldCBNZT1Mbjtjb25zdCBXZT1jbGFzcyBXZXtjb25zdHJ1Y3Rvcih0KXt0aGlzLmVsZW1lbnQ9dCx0aGlzLm5leHQ9V2UuVW5kZWZpbmVkLHRoaXMucHJldj1XZS5VbmRlZmluZWR9fTtXZS5VbmRlZmluZWQ9bmV3IFdlKHZvaWQgMCk7bGV0ICQ9V2U7Y2xhc3MgVnJ7Y29uc3RydWN0b3IoKXt0aGlzLl9maXJzdD0kLlVuZGVmaW5lZCx0aGlzLl9sYXN0PSQuVW5kZWZpbmVkLHRoaXMuX3NpemU9MH1nZXQgc2l6ZSgpe3JldHVybiB0aGlzLl9zaXplfWlzRW1wdHkoKXtyZXR1cm4gdGhpcy5fZmlyc3Q9PT0kLlVuZGVmaW5lZH1jbGVhcigpe2xldCB0PXRoaXMuX2ZpcnN0O2Zvcig7dCE9PSQuVW5kZWZpbmVkOyl7Y29uc3Qgbj10Lm5leHQ7dC5wcmV2PSQuVW5kZWZpbmVkLHQubmV4dD0kLlVuZGVmaW5lZCx0PW59dGhpcy5fZmlyc3Q9JC5VbmRlZmluZWQsdGhpcy5fbGFzdD0kLlVuZGVmaW5lZCx0aGlzLl9zaXplPTB9dW5zaGlmdCh0KXtyZXR1cm4gdGhpcy5faW5zZXJ0KHQsITEpfXB1c2godCl7cmV0dXJuIHRoaXMuX2luc2VydCh0LCEwKX1faW5zZXJ0KHQsbil7Y29uc3Qgcz1uZXcgJCh0KTtpZih0aGlzLl9maXJzdD09PSQuVW5kZWZpbmVkKXRoaXMuX2ZpcnN0PXMsdGhpcy5fbGFzdD1zO2Vsc2UgaWYobil7Y29uc3QgaT10aGlzLl9sYXN0O3RoaXMuX2xhc3Q9cyxzLnByZXY9aSxpLm5leHQ9c31lbHNle2NvbnN0IGk9dGhpcy5fZmlyc3Q7dGhpcy5fZmlyc3Q9cyxzLm5leHQ9aSxpLnByZXY9c310aGlzLl9zaXplKz0xO2xldCByPSExO3JldHVybigpPT57cnx8KHI9ITAsdGhpcy5fcmVtb3ZlKHMpKX19c2hpZnQoKXtpZih0aGlzLl9maXJzdCE9PSQuVW5kZWZpbmVkKXtjb25zdCB0PXRoaXMuX2ZpcnN0LmVsZW1lbnQ7cmV0dXJuIHRoaXMuX3JlbW92ZSh0aGlzLl9maXJzdCksdH19cG9wKCl7aWYodGhpcy5fbGFzdCE9PSQuVW5kZWZpbmVkKXtjb25zdCB0PXRoaXMuX2xhc3QuZWxlbWVudDtyZXR1cm4gdGhpcy5fcmVtb3ZlKHRoaXMuX2xhc3QpLHR9fV9yZW1vdmUodCl7aWYodC5wcmV2IT09JC5VbmRlZmluZWQmJnQubmV4dCE9PSQuVW5kZWZpbmVkKXtjb25zdCBuPXQucHJldjtuLm5leHQ9dC5uZXh0LHQubmV4dC5wcmV2PW59ZWxzZSB0LnByZXY9PT0kLlVuZGVmaW5lZCYmdC5uZXh0PT09JC5VbmRlZmluZWQ/KHRoaXMuX2ZpcnN0PSQuVW5kZWZpbmVkLHRoaXMuX2xhc3Q9JC5VbmRlZmluZWQpOnQubmV4dD09PSQuVW5kZWZpbmVkPyh0aGlzLl9sYXN0PXRoaXMuX2xhc3QucHJldix0aGlzLl9sYXN0Lm5leHQ9JC5VbmRlZmluZWQpOnQucHJldj09PSQuVW5kZWZpbmVkJiYodGhpcy5fZmlyc3Q9dGhpcy5fZmlyc3QubmV4dCx0aGlzLl9maXJzdC5wcmV2PSQuVW5kZWZpbmVkKTt0aGlzLl9zaXplLT0xfSpbU3ltYm9sLml0ZXJhdG9yXSgpe2xldCB0PXRoaXMuX2ZpcnN0O2Zvcig7dCE9PSQuVW5kZWZpbmVkOyl5aWVsZCB0LmVsZW1lbnQsdD10Lm5leHR9fWNvbnN0IElyPWdsb2JhbFRoaXMucGVyZm9ybWFuY2UmJnR5cGVvZiBnbG9iYWxUaGlzLnBlcmZvcm1hbmNlLm5vdz09ImZ1bmN0aW9uIjtjbGFzcyBjdHtzdGF0aWMgY3JlYXRlKHQpe3JldHVybiBuZXcgY3QodCl9Y29uc3RydWN0b3IodCl7dGhpcy5fbm93PUlyJiZ0PT09ITE/RGF0ZS5ub3c6Z2xvYmFsVGhpcy5wZXJmb3JtYW5jZS5ub3cuYmluZChnbG9iYWxUaGlzLnBlcmZvcm1hbmNlKSx0aGlzLl9zdGFydFRpbWU9dGhpcy5fbm93KCksdGhpcy5fc3RvcFRpbWU9LTF9c3RvcCgpe3RoaXMuX3N0b3BUaW1lPXRoaXMuX25vdygpfXJlc2V0KCl7dGhpcy5fc3RhcnRUaW1lPXRoaXMuX25vdygpLHRoaXMuX3N0b3BUaW1lPS0xfWVsYXBzZWQoKXtyZXR1cm4gdGhpcy5fc3RvcFRpbWUhPT0tMT90aGlzLl9zdG9wVGltZS10aGlzLl9zdGFydFRpbWU6dGhpcy5fbm93KCktdGhpcy5fc3RhcnRUaW1lfX12YXIgVnQ7KGZ1bmN0aW9uKGUpe2UuTm9uZT0oKT0+TWUuTm9uZTtmdW5jdGlvbiB0KF8sTCl7cmV0dXJuIGgoXywoKT0+e30sMCx2b2lkIDAsITAsdm9pZCAwLEwpfWUuZGVmZXI9dDtmdW5jdGlvbiBuKF8pe3JldHVybihMLEU9bnVsbCxSKT0+e2xldCBGPSExLFQ7cmV0dXJuIFQ9XyhIPT57aWYoIUYpcmV0dXJuIFQ/VC5kaXNwb3NlKCk6Rj0hMCxMLmNhbGwoRSxIKX0sbnVsbCxSKSxGJiZULmRpc3Bvc2UoKSxUfX1lLm9uY2U9bjtmdW5jdGlvbiBzKF8sTCxFKXtyZXR1cm4gYygoUixGPW51bGwsVCk9Pl8oSD0+Ui5jYWxsKEYsTChIKSksbnVsbCxUKSxFKX1lLm1hcD1zO2Z1bmN0aW9uIHIoXyxMLEUpe3JldHVybiBjKChSLEY9bnVsbCxUKT0+XyhIPT57TChIKSxSLmNhbGwoRixIKX0sbnVsbCxUKSxFKX1lLmZvckVhY2g9cjtmdW5jdGlvbiBpKF8sTCxFKXtyZXR1cm4gYygoUixGPW51bGwsVCk9Pl8oSD0+TChIKSYmUi5jYWxsKEYsSCksbnVsbCxUKSxFKX1lLmZpbHRlcj1pO2Z1bmN0aW9uIGwoXyl7cmV0dXJuIF99ZS5zaWduYWw9bDtmdW5jdGlvbiBvKC4uLl8pe3JldHVybihMLEU9bnVsbCxSKT0+e2NvbnN0IEY9VHIoLi4uXy5tYXAoVD0+VChIPT5MLmNhbGwoRSxIKSkpKTtyZXR1cm4gZihGLFIpfX1lLmFueT1vO2Z1bmN0aW9uIHUoXyxMLEUsUil7bGV0IEY9RTtyZXR1cm4gcyhfLFQ9PihGPUwoRixUKSxGKSxSKX1lLnJlZHVjZT11O2Z1bmN0aW9uIGMoXyxMKXtsZXQgRTtjb25zdCBSPXtvbldpbGxBZGRGaXJzdExpc3RlbmVyKCl7RT1fKEYuZmlyZSxGKX0sb25EaWRSZW1vdmVMYXN0TGlzdGVuZXIoKXtFPy5kaXNwb3NlKCl9fSxGPW5ldyBsZShSKTtyZXR1cm4gTD8uYWRkKEYpLEYuZXZlbnR9ZnVuY3Rpb24gZihfLEwpe3JldHVybiBMIGluc3RhbmNlb2YgQXJyYXk/TC5wdXNoKF8pOkwmJkwuYWRkKF8pLF99ZnVuY3Rpb24gaChfLEwsRT0xMDAsUj0hMSxGPSExLFQsSCl7bGV0IEosWSxqZSxEdD0wLGF0O2NvbnN0IGxhPXtsZWFrV2FybmluZ1RocmVzaG9sZDpULG9uV2lsbEFkZEZpcnN0TGlzdGVuZXIoKXtKPV8ob2E9PntEdCsrLFk9TChZLG9hKSxSJiYhamUmJihQdC5maXJlKFkpLFk9dm9pZCAwKSxhdD0oKT0+e2NvbnN0IHVhPVk7WT12b2lkIDAsamU9dm9pZCAwLCghUnx8RHQ+MSkmJlB0LmZpcmUodWEpLER0PTB9LHR5cGVvZiBFPT0ibnVtYmVyIj8oY2xlYXJUaW1lb3V0KGplKSxqZT1zZXRUaW1lb3V0KGF0LEUpKTpqZT09PXZvaWQgMCYmKGplPTAscXVldWVNaWNyb3Rhc2soYXQpKX0pfSxvbldpbGxSZW1vdmVMaXN0ZW5lcigpe0YmJkR0PjAmJmF0Py4oKX0sb25EaWRSZW1vdmVMYXN0TGlzdGVuZXIoKXthdD12b2lkIDAsSi5kaXNwb3NlKCl9fSxQdD1uZXcgbGUobGEpO3JldHVybiBIPy5hZGQoUHQpLFB0LmV2ZW50fWUuZGVib3VuY2U9aDtmdW5jdGlvbiBkKF8sTD0wLEUpe3JldHVybiBlLmRlYm91bmNlKF8sKFIsRik9PlI/KFIucHVzaChGKSxSKTpbRl0sTCx2b2lkIDAsITAsdm9pZCAwLEUpfWUuYWNjdW11bGF0ZT1kO2Z1bmN0aW9uIG0oXyxMPShSLEYpPT5SPT09RixFKXtsZXQgUj0hMCxGO3JldHVybiBpKF8sVD0+e2NvbnN0IEg9Unx8IUwoVCxGKTtyZXR1cm4gUj0hMSxGPVQsSH0sRSl9ZS5sYXRjaD1tO2Z1bmN0aW9uIGcoXyxMLEUpe3JldHVybltlLmZpbHRlcihfLEwsRSksZS5maWx0ZXIoXyxSPT4hTChSKSxFKV19ZS5zcGxpdD1nO2Z1bmN0aW9uIGIoXyxMPSExLEU9W10sUil7bGV0IEY9RS5zbGljZSgpLFQ9XyhZPT57Rj9GLnB1c2goWSk6Si5maXJlKFkpfSk7UiYmUi5hZGQoVCk7Y29uc3QgSD0oKT0+e0Y/LmZvckVhY2goWT0+Si5maXJlKFkpKSxGPW51bGx9LEo9bmV3IGxlKHtvbldpbGxBZGRGaXJzdExpc3RlbmVyKCl7VHx8KFQ9XyhZPT5KLmZpcmUoWSkpLFImJlIuYWRkKFQpKX0sb25EaWRBZGRGaXJzdExpc3RlbmVyKCl7RiYmKEw/c2V0VGltZW91dChIKTpIKCkpfSxvbkRpZFJlbW92ZUxhc3RMaXN0ZW5lcigpe1QmJlQuZGlzcG9zZSgpLFQ9bnVsbH19KTtyZXR1cm4gUiYmUi5hZGQoSiksSi5ldmVudH1lLmJ1ZmZlcj1iO2Z1bmN0aW9uIHcoXyxMKXtyZXR1cm4oUixGLFQpPT57Y29uc3QgSD1MKG5ldyBDKTtyZXR1cm4gXyhmdW5jdGlvbihKKXtjb25zdCBZPUguZXZhbHVhdGUoSik7WSE9PU4mJlIuY2FsbChGLFkpfSx2b2lkIDAsVCl9fWUuY2hhaW49dztjb25zdCBOPVN5bWJvbCgiSGFsdENoYWluYWJsZSIpO2NsYXNzIEN7Y29uc3RydWN0b3IoKXt0aGlzLnN0ZXBzPVtdfW1hcChMKXtyZXR1cm4gdGhpcy5zdGVwcy5wdXNoKEwpLHRoaXN9Zm9yRWFjaChMKXtyZXR1cm4gdGhpcy5zdGVwcy5wdXNoKEU9PihMKEUpLEUpKSx0aGlzfWZpbHRlcihMKXtyZXR1cm4gdGhpcy5zdGVwcy5wdXNoKEU9PkwoRSk/RTpOKSx0aGlzfXJlZHVjZShMLEUpe2xldCBSPUU7cmV0dXJuIHRoaXMuc3RlcHMucHVzaChGPT4oUj1MKFIsRiksUikpLHRoaXN9bGF0Y2goTD0oRSxSKT0+RT09PVIpe2xldCBFPSEwLFI7cmV0dXJuIHRoaXMuc3RlcHMucHVzaChGPT57Y29uc3QgVD1FfHwhTChGLFIpO3JldHVybiBFPSExLFI9RixUP0Y6Tn0pLHRoaXN9ZXZhbHVhdGUoTCl7Zm9yKGNvbnN0IEUgb2YgdGhpcy5zdGVwcylpZihMPUUoTCksTD09PU4pYnJlYWs7cmV0dXJuIEx9fWZ1bmN0aW9uIFMoXyxMLEU9Uj0+Uil7Y29uc3QgUj0oLi4uSik9PkguZmlyZShFKC4uLkopKSxGPSgpPT5fLm9uKEwsUiksVD0oKT0+Xy5yZW1vdmVMaXN0ZW5lcihMLFIpLEg9bmV3IGxlKHtvbldpbGxBZGRGaXJzdExpc3RlbmVyOkYsb25EaWRSZW1vdmVMYXN0TGlzdGVuZXI6VH0pO3JldHVybiBILmV2ZW50fWUuZnJvbU5vZGVFdmVudEVtaXR0ZXI9UztmdW5jdGlvbiBwKF8sTCxFPVI9PlIpe2NvbnN0IFI9KC4uLkopPT5ILmZpcmUoRSguLi5KKSksRj0oKT0+Xy5hZGRFdmVudExpc3RlbmVyKEwsUiksVD0oKT0+Xy5yZW1vdmVFdmVudExpc3RlbmVyKEwsUiksSD1uZXcgbGUoe29uV2lsbEFkZEZpcnN0TGlzdGVuZXI6RixvbkRpZFJlbW92ZUxhc3RMaXN0ZW5lcjpUfSk7cmV0dXJuIEguZXZlbnR9ZS5mcm9tRE9NRXZlbnRFbWl0dGVyPXA7ZnVuY3Rpb24geChfKXtyZXR1cm4gbmV3IFByb21pc2UoTD0+bihfKShMKSl9ZS50b1Byb21pc2U9eDtmdW5jdGlvbiB2KF8pe2NvbnN0IEw9bmV3IGxlO3JldHVybiBfLnRoZW4oRT0+e0wuZmlyZShFKX0sKCk9PntMLmZpcmUodm9pZCAwKX0pLmZpbmFsbHkoKCk9PntMLmRpc3Bvc2UoKX0pLEwuZXZlbnR9ZS5mcm9tUHJvbWlzZT12O2Z1bmN0aW9uIEEoXyxMKXtyZXR1cm4gXyhFPT5MLmZpcmUoRSkpfWUuZm9yd2FyZD1BO2Z1bmN0aW9uIHkoXyxMLEUpe3JldHVybiBMKEUpLF8oUj0+TChSKSl9ZS5ydW5BbmRTdWJzY3JpYmU9eTtjbGFzcyBJe2NvbnN0cnVjdG9yKEwsRSl7dGhpcy5fb2JzZXJ2YWJsZT1MLHRoaXMuX2NvdW50ZXI9MCx0aGlzLl9oYXNDaGFuZ2VkPSExO2NvbnN0IFI9e29uV2lsbEFkZEZpcnN0TGlzdGVuZXI6KCk9PntMLmFkZE9ic2VydmVyKHRoaXMpfSxvbkRpZFJlbW92ZUxhc3RMaXN0ZW5lcjooKT0+e0wucmVtb3ZlT2JzZXJ2ZXIodGhpcyl9fTt0aGlzLmVtaXR0ZXI9bmV3IGxlKFIpLEUmJkUuYWRkKHRoaXMuZW1pdHRlcil9YmVnaW5VcGRhdGUoTCl7dGhpcy5fY291bnRlcisrfWhhbmRsZVBvc3NpYmxlQ2hhbmdlKEwpe31oYW5kbGVDaGFuZ2UoTCxFKXt0aGlzLl9oYXNDaGFuZ2VkPSEwfWVuZFVwZGF0ZShMKXt0aGlzLl9jb3VudGVyLS0sdGhpcy5fY291bnRlcj09PTAmJih0aGlzLl9vYnNlcnZhYmxlLnJlcG9ydENoYW5nZXMoKSx0aGlzLl9oYXNDaGFuZ2VkJiYodGhpcy5faGFzQ2hhbmdlZD0hMSx0aGlzLmVtaXR0ZXIuZmlyZSh0aGlzLl9vYnNlcnZhYmxlLmdldCgpKSkpfX1mdW5jdGlvbiBYKF8sTCl7cmV0dXJuIG5ldyBJKF8sTCkuZW1pdHRlci5ldmVudH1lLmZyb21PYnNlcnZhYmxlPVg7ZnVuY3Rpb24gQihfKXtyZXR1cm4oTCxFLFIpPT57bGV0IEY9MCxUPSExO2NvbnN0IEg9e2JlZ2luVXBkYXRlKCl7RisrfSxlbmRVcGRhdGUoKXtGLS0sRj09PTAmJihfLnJlcG9ydENoYW5nZXMoKSxUJiYoVD0hMSxMLmNhbGwoRSkpKX0saGFuZGxlUG9zc2libGVDaGFuZ2UoKXt9LGhhbmRsZUNoYW5nZSgpe1Q9ITB9fTtfLmFkZE9ic2VydmVyKEgpLF8ucmVwb3J0Q2hhbmdlcygpO2NvbnN0IEo9e2Rpc3Bvc2UoKXtfLnJlbW92ZU9ic2VydmVyKEgpfX07cmV0dXJuIFIgaW5zdGFuY2VvZiBYZT9SLmFkZChKKTpBcnJheS5pc0FycmF5KFIpJiZSLnB1c2goSiksSn19ZS5mcm9tT2JzZXJ2YWJsZUxpZ2h0PUJ9KShWdHx8KFZ0PXt9KSk7Y29uc3QgemU9Y2xhc3MgemV7Y29uc3RydWN0b3IodCl7dGhpcy5saXN0ZW5lckNvdW50PTAsdGhpcy5pbnZvY2F0aW9uQ291bnQ9MCx0aGlzLmVsYXBzZWRPdmVyYWxsPTAsdGhpcy5kdXJhdGlvbnM9W10sdGhpcy5uYW1lPWAke3R9XyR7emUuX2lkUG9vbCsrfWAsemUuYWxsLmFkZCh0aGlzKX1zdGFydCh0KXt0aGlzLl9zdG9wV2F0Y2g9bmV3IGN0LHRoaXMubGlzdGVuZXJDb3VudD10fXN0b3AoKXtpZih0aGlzLl9zdG9wV2F0Y2gpe2NvbnN0IHQ9dGhpcy5fc3RvcFdhdGNoLmVsYXBzZWQoKTt0aGlzLmR1cmF0aW9ucy5wdXNoKHQpLHRoaXMuZWxhcHNlZE92ZXJhbGwrPXQsdGhpcy5pbnZvY2F0aW9uQ291bnQrPTEsdGhpcy5fc3RvcFdhdGNoPXZvaWQgMH19fTt6ZS5hbGw9bmV3IFNldCx6ZS5faWRQb29sPTA7bGV0IEl0PXplLEJyPS0xO2NvbnN0IHl0PWNsYXNzIHl0e2NvbnN0cnVjdG9yKHQsbixzPSh5dC5faWRQb29sKyspLnRvU3RyaW5nKDE2KS5wYWRTdGFydCgzLCIwIikpe3RoaXMuX2Vycm9ySGFuZGxlcj10LHRoaXMudGhyZXNob2xkPW4sdGhpcy5uYW1lPXMsdGhpcy5fd2FybkNvdW50ZG93bj0wfWRpc3Bvc2UoKXt0aGlzLl9zdGFja3M/LmNsZWFyKCl9Y2hlY2sodCxuKXtjb25zdCBzPXRoaXMudGhyZXNob2xkO2lmKHM8PTB8fG48cylyZXR1cm47dGhpcy5fc3RhY2tzfHwodGhpcy5fc3RhY2tzPW5ldyBNYXApO2NvbnN0IHI9dGhpcy5fc3RhY2tzLmdldCh0LnZhbHVlKXx8MDtpZih0aGlzLl9zdGFja3Muc2V0KHQudmFsdWUscisxKSx0aGlzLl93YXJuQ291bnRkb3duLT0xLHRoaXMuX3dhcm5Db3VudGRvd248PTApe3RoaXMuX3dhcm5Db3VudGRvd249cyouNTtjb25zdFtpLGxdPXRoaXMuZ2V0TW9zdEZyZXF1ZW50U3RhY2soKSxvPWBbJHt0aGlzLm5hbWV9XSBwb3RlbnRpYWwgbGlzdGVuZXIgTEVBSyBkZXRlY3RlZCwgaGF2aW5nICR7bn0gbGlzdGVuZXJzIGFscmVhZHkuIE1PU1QgZnJlcXVlbnQgbGlzdGVuZXIgKCR7bH0pOmA7Y29uc29sZS53YXJuKG8pLGNvbnNvbGUud2FybihpKTtjb25zdCB1PW5ldyBxcihvLGkpO3RoaXMuX2Vycm9ySGFuZGxlcih1KX1yZXR1cm4oKT0+e2NvbnN0IGk9dGhpcy5fc3RhY2tzLmdldCh0LnZhbHVlKXx8MDt0aGlzLl9zdGFja3Muc2V0KHQudmFsdWUsaS0xKX19Z2V0TW9zdEZyZXF1ZW50U3RhY2soKXtpZighdGhpcy5fc3RhY2tzKXJldHVybjtsZXQgdCxuPTA7Zm9yKGNvbnN0W3Mscl1vZiB0aGlzLl9zdGFja3MpKCF0fHxuPHIpJiYodD1bcyxyXSxuPXIpO3JldHVybiB0fX07eXQuX2lkUG9vbD0xO2xldCBCdD15dDtjbGFzcyBxdHtzdGF0aWMgY3JlYXRlKCl7Y29uc3QgdD1uZXcgRXJyb3I7cmV0dXJuIG5ldyBxdCh0LnN0YWNrPz8iIil9Y29uc3RydWN0b3IodCl7dGhpcy52YWx1ZT10fXByaW50KCl7Y29uc29sZS53YXJuKHRoaXMudmFsdWUuc3BsaXQoYApgKS5zbGljZSgyKS5qb2luKGAKYCkpfX1jbGFzcyBxciBleHRlbmRzIEVycm9ye2NvbnN0cnVjdG9yKHQsbil7c3VwZXIodCksdGhpcy5uYW1lPSJMaXN0ZW5lckxlYWtFcnJvciIsdGhpcy5zdGFjaz1ufX1jbGFzcyBVciBleHRlbmRzIEVycm9ye2NvbnN0cnVjdG9yKHQsbil7c3VwZXIodCksdGhpcy5uYW1lPSJMaXN0ZW5lclJlZnVzYWxFcnJvciIsdGhpcy5zdGFjaz1ufX1jbGFzcyBVdHtjb25zdHJ1Y3Rvcih0KXt0aGlzLnZhbHVlPXR9fWNvbnN0IEhyPTI7Y2xhc3MgbGV7Y29uc3RydWN0b3IodCl7dGhpcy5fc2l6ZT0wLHRoaXMuX29wdGlvbnM9dCx0aGlzLl9sZWFrYWdlTW9uPXRoaXMuX29wdGlvbnM/LmxlYWtXYXJuaW5nVGhyZXNob2xkP25ldyBCdCh0Py5vbkxpc3RlbmVyRXJyb3I/P2x0LHRoaXMuX29wdGlvbnM/LmxlYWtXYXJuaW5nVGhyZXNob2xkPz9Ccik6dm9pZCAwLHRoaXMuX3BlcmZNb249dGhpcy5fb3B0aW9ucz8uX3Byb2ZOYW1lP25ldyBJdCh0aGlzLl9vcHRpb25zLl9wcm9mTmFtZSk6dm9pZCAwLHRoaXMuX2RlbGl2ZXJ5UXVldWU9dGhpcy5fb3B0aW9ucz8uZGVsaXZlcnlRdWV1ZX1kaXNwb3NlKCl7dGhpcy5fZGlzcG9zZWR8fCh0aGlzLl9kaXNwb3NlZD0hMCx0aGlzLl9kZWxpdmVyeVF1ZXVlPy5jdXJyZW50PT09dGhpcyYmdGhpcy5fZGVsaXZlcnlRdWV1ZS5yZXNldCgpLHRoaXMuX2xpc3RlbmVycyYmKHRoaXMuX2xpc3RlbmVycz12b2lkIDAsdGhpcy5fc2l6ZT0wKSx0aGlzLl9vcHRpb25zPy5vbkRpZFJlbW92ZUxhc3RMaXN0ZW5lcj8uKCksdGhpcy5fbGVha2FnZU1vbj8uZGlzcG9zZSgpKX1nZXQgZXZlbnQoKXtyZXR1cm4gdGhpcy5fZXZlbnQ/Pyh0aGlzLl9ldmVudD0odCxuLHMpPT57aWYodGhpcy5fbGVha2FnZU1vbiYmdGhpcy5fc2l6ZT50aGlzLl9sZWFrYWdlTW9uLnRocmVzaG9sZCoqMil7Y29uc3Qgbz1gWyR7dGhpcy5fbGVha2FnZU1vbi5uYW1lfV0gUkVGVVNFUyB0byBhY2NlcHQgbmV3IGxpc3RlbmVycyBiZWNhdXNlIGl0IGV4Y2VlZGVkIGl0cyB0aHJlc2hvbGQgYnkgZmFyICgke3RoaXMuX3NpemV9IHZzICR7dGhpcy5fbGVha2FnZU1vbi50aHJlc2hvbGR9KWA7Y29uc29sZS53YXJuKG8pO2NvbnN0IHU9dGhpcy5fbGVha2FnZU1vbi5nZXRNb3N0RnJlcXVlbnRTdGFjaygpPz9bIlVOS05PV04gc3RhY2siLC0xXSxjPW5ldyBVcihgJHtvfS4gSElOVDogU3RhY2sgc2hvd3MgbW9zdCBmcmVxdWVudCBsaXN0ZW5lciAoJHt1WzFdfS10aW1lcylgLHVbMF0pO3JldHVybih0aGlzLl9vcHRpb25zPy5vbkxpc3RlbmVyRXJyb3J8fGx0KShjKSxNZS5Ob25lfWlmKHRoaXMuX2Rpc3Bvc2VkKXJldHVybiBNZS5Ob25lO24mJih0PXQuYmluZChuKSk7Y29uc3Qgcj1uZXcgVXQodCk7bGV0IGk7dGhpcy5fbGVha2FnZU1vbiYmdGhpcy5fc2l6ZT49TWF0aC5jZWlsKHRoaXMuX2xlYWthZ2VNb24udGhyZXNob2xkKi4yKSYmKHIuc3RhY2s9cXQuY3JlYXRlKCksaT10aGlzLl9sZWFrYWdlTW9uLmNoZWNrKHIuc3RhY2ssdGhpcy5fc2l6ZSsxKSksdGhpcy5fbGlzdGVuZXJzP3RoaXMuX2xpc3RlbmVycyBpbnN0YW5jZW9mIFV0Pyh0aGlzLl9kZWxpdmVyeVF1ZXVlPz8odGhpcy5fZGVsaXZlcnlRdWV1ZT1uZXcgV3IpLHRoaXMuX2xpc3RlbmVycz1bdGhpcy5fbGlzdGVuZXJzLHJdKTp0aGlzLl9saXN0ZW5lcnMucHVzaChyKToodGhpcy5fb3B0aW9ucz8ub25XaWxsQWRkRmlyc3RMaXN0ZW5lcj8uKHRoaXMpLHRoaXMuX2xpc3RlbmVycz1yLHRoaXMuX29wdGlvbnM/Lm9uRGlkQWRkRmlyc3RMaXN0ZW5lcj8uKHRoaXMpKSx0aGlzLl9zaXplKys7Y29uc3QgbD11dCgoKT0+e2k/LigpLHRoaXMuX3JlbW92ZUxpc3RlbmVyKHIpfSk7cmV0dXJuIHMgaW5zdGFuY2VvZiBYZT9zLmFkZChsKTpBcnJheS5pc0FycmF5KHMpJiZzLnB1c2gobCksbH0pLHRoaXMuX2V2ZW50fV9yZW1vdmVMaXN0ZW5lcih0KXtpZih0aGlzLl9vcHRpb25zPy5vbldpbGxSZW1vdmVMaXN0ZW5lcj8uKHRoaXMpLCF0aGlzLl9saXN0ZW5lcnMpcmV0dXJuO2lmKHRoaXMuX3NpemU9PT0xKXt0aGlzLl9saXN0ZW5lcnM9dm9pZCAwLHRoaXMuX29wdGlvbnM/Lm9uRGlkUmVtb3ZlTGFzdExpc3RlbmVyPy4odGhpcyksdGhpcy5fc2l6ZT0wO3JldHVybn1jb25zdCBuPXRoaXMuX2xpc3RlbmVycyxzPW4uaW5kZXhPZih0KTtpZihzPT09LTEpdGhyb3cgY29uc29sZS5sb2coImRpc3Bvc2VkPyIsdGhpcy5fZGlzcG9zZWQpLGNvbnNvbGUubG9nKCJzaXplPyIsdGhpcy5fc2l6ZSksY29uc29sZS5sb2coImFycj8iLEpTT04uc3RyaW5naWZ5KHRoaXMuX2xpc3RlbmVycykpLG5ldyBFcnJvcigiQXR0ZW1wdGVkIHRvIGRpc3Bvc2UgdW5rbm93biBsaXN0ZW5lciIpO3RoaXMuX3NpemUtLSxuW3NdPXZvaWQgMDtjb25zdCByPXRoaXMuX2RlbGl2ZXJ5UXVldWUuY3VycmVudD09PXRoaXM7aWYodGhpcy5fc2l6ZSpIcjw9bi5sZW5ndGgpe2xldCBpPTA7Zm9yKGxldCBsPTA7bDxuLmxlbmd0aDtsKyspbltsXT9uW2krK109bltsXTpyJiYodGhpcy5fZGVsaXZlcnlRdWV1ZS5lbmQtLSxpPHRoaXMuX2RlbGl2ZXJ5UXVldWUuaSYmdGhpcy5fZGVsaXZlcnlRdWV1ZS5pLS0pO24ubGVuZ3RoPWl9fV9kZWxpdmVyKHQsbil7aWYoIXQpcmV0dXJuO2NvbnN0IHM9dGhpcy5fb3B0aW9ucz8ub25MaXN0ZW5lckVycm9yfHxsdDtpZighcyl7dC52YWx1ZShuKTtyZXR1cm59dHJ5e3QudmFsdWUobil9Y2F0Y2gocil7cyhyKX19X2RlbGl2ZXJRdWV1ZSh0KXtjb25zdCBuPXQuY3VycmVudC5fbGlzdGVuZXJzO2Zvcig7dC5pPHQuZW5kOyl0aGlzLl9kZWxpdmVyKG5bdC5pKytdLHQudmFsdWUpO3QucmVzZXQoKX1maXJlKHQpe2lmKHRoaXMuX2RlbGl2ZXJ5UXVldWU/LmN1cnJlbnQmJih0aGlzLl9kZWxpdmVyUXVldWUodGhpcy5fZGVsaXZlcnlRdWV1ZSksdGhpcy5fcGVyZk1vbj8uc3RvcCgpKSx0aGlzLl9wZXJmTW9uPy5zdGFydCh0aGlzLl9zaXplKSx0aGlzLl9saXN0ZW5lcnMpaWYodGhpcy5fbGlzdGVuZXJzIGluc3RhbmNlb2YgVXQpdGhpcy5fZGVsaXZlcih0aGlzLl9saXN0ZW5lcnMsdCk7ZWxzZXtjb25zdCBuPXRoaXMuX2RlbGl2ZXJ5UXVldWU7bi5lbnF1ZXVlKHRoaXMsdCx0aGlzLl9saXN0ZW5lcnMubGVuZ3RoKSx0aGlzLl9kZWxpdmVyUXVldWUobil9dGhpcy5fcGVyZk1vbj8uc3RvcCgpfWhhc0xpc3RlbmVycygpe3JldHVybiB0aGlzLl9zaXplPjB9fWNsYXNzIFdye2NvbnN0cnVjdG9yKCl7dGhpcy5pPS0xLHRoaXMuZW5kPTB9ZW5xdWV1ZSh0LG4scyl7dGhpcy5pPTAsdGhpcy5lbmQ9cyx0aGlzLmN1cnJlbnQ9dCx0aGlzLnZhbHVlPW59cmVzZXQoKXt0aGlzLmk9dGhpcy5lbmQsdGhpcy5jdXJyZW50PXZvaWQgMCx0aGlzLnZhbHVlPXZvaWQgMH19ZnVuY3Rpb24genIoZSl7cmV0dXJuIHR5cGVvZiBlPT0ic3RyaW5nIn1mdW5jdGlvbiAkcihlKXtsZXQgdD1bXTtmb3IoO09iamVjdC5wcm90b3R5cGUhPT1lOyl0PXQuY29uY2F0KE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGUpKSxlPU9iamVjdC5nZXRQcm90b3R5cGVPZihlKTtyZXR1cm4gdH1mdW5jdGlvbiBIdChlKXtjb25zdCB0PVtdO2Zvcihjb25zdCBuIG9mICRyKGUpKXR5cGVvZiBlW25dPT0iZnVuY3Rpb24iJiZ0LnB1c2gobik7cmV0dXJuIHR9ZnVuY3Rpb24gR3IoZSx0KXtjb25zdCBuPXI9PmZ1bmN0aW9uKCl7Y29uc3QgaT1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsMCk7cmV0dXJuIHQocixpKX0scz17fTtmb3IoY29uc3QgciBvZiBlKXNbcl09bihyKTtyZXR1cm4gc31mdW5jdGlvbiBPcigpe3JldHVybiBnbG9iYWxUaGlzLl9WU0NPREVfTkxTX01FU1NBR0VTfWZ1bmN0aW9uIFNuKCl7cmV0dXJuIGdsb2JhbFRoaXMuX1ZTQ09ERV9OTFNfTEFOR1VBR0V9Y29uc3QganI9U24oKT09PSJwc2V1ZG8ifHx0eXBlb2YgZG9jdW1lbnQ8InUiJiZkb2N1bWVudC5sb2NhdGlvbiYmZG9jdW1lbnQubG9jYXRpb24uaGFzaC5pbmRleE9mKCJwc2V1ZG89dHJ1ZSIpPj0wO2Z1bmN0aW9uIENuKGUsdCl7bGV0IG47cmV0dXJuIHQubGVuZ3RoPT09MD9uPWU6bj1lLnJlcGxhY2UoL1x7KFxkKylcfS9nLChzLHIpPT57Y29uc3QgaT1yWzBdLGw9dFtpXTtsZXQgbz1zO3JldHVybiB0eXBlb2YgbD09InN0cmluZyI/bz1sOih0eXBlb2YgbD09Im51bWJlciJ8fHR5cGVvZiBsPT0iYm9vbGVhbiJ8fGw9PT12b2lkIDB8fGw9PT1udWxsKSYmKG89U3RyaW5nKGwpKSxvfSksanImJihuPSLvvLsiK24ucmVwbGFjZSgvW2FvdWVpXS9nLCIkJiQmIikrIu+8vSIpLG59ZnVuY3Rpb24geihlLHQsLi4ubil7cmV0dXJuIENuKHR5cGVvZiBlPT0ibnVtYmVyIj9YcihlLHQpOnQsbil9ZnVuY3Rpb24gWHIoZSx0KXtjb25zdCBuPU9yKCk/LltlXTtpZih0eXBlb2YgbiE9InN0cmluZyIpe2lmKHR5cGVvZiB0PT0ic3RyaW5nIilyZXR1cm4gdDt0aHJvdyBuZXcgRXJyb3IoYCEhISBOTFMgTUlTU0lORzogJHtlfSAhISFgKX1yZXR1cm4gbn1jb25zdCBrZT0iZW4iO2xldCBXdD0hMSx6dD0hMSwkdD0hMSxodCxHdD1rZSxBbj1rZSxRcixkZTtjb25zdCBDZT1nbG9iYWxUaGlzO2xldCBuZTt0eXBlb2YgQ2UudnNjb2RlPCJ1IiYmdHlwZW9mIENlLnZzY29kZS5wcm9jZXNzPCJ1Ij9uZT1DZS52c2NvZGUucHJvY2Vzczp0eXBlb2YgcHJvY2VzczwidSImJnR5cGVvZiBwcm9jZXNzPy52ZXJzaW9ucz8ubm9kZT09InN0cmluZyImJihuZT1wcm9jZXNzKTtjb25zdCBKcj10eXBlb2YgbmU/LnZlcnNpb25zPy5lbGVjdHJvbj09InN0cmluZyImJm5lPy50eXBlPT09InJlbmRlcmVyIjtpZih0eXBlb2YgbmU9PSJvYmplY3QiKXtXdD1uZS5wbGF0Zm9ybT09PSJ3aW4zMiIsenQ9bmUucGxhdGZvcm09PT0iZGFyd2luIiwkdD1uZS5wbGF0Zm9ybT09PSJsaW51eCIsJHQmJm5lLmVudi5TTkFQJiZuZS5lbnYuU05BUF9SRVZJU0lPTixuZS5lbnYuQ0l8fG5lLmVudi5CVUlMRF9BUlRJRkFDVFNUQUdJTkdESVJFQ1RPUlksaHQ9a2UsR3Q9a2U7Y29uc3QgZT1uZS5lbnYuVlNDT0RFX05MU19DT05GSUc7aWYoZSl0cnl7Y29uc3QgdD1KU09OLnBhcnNlKGUpO2h0PXQudXNlckxvY2FsZSxBbj10Lm9zTG9jYWxlLEd0PXQucmVzb2x2ZWRMYW5ndWFnZXx8a2UsUXI9dC5sYW5ndWFnZVBhY2s/LnRyYW5zbGF0aW9uc0NvbmZpZ0ZpbGV9Y2F0Y2h7fX1lbHNlIHR5cGVvZiBuYXZpZ2F0b3I9PSJvYmplY3QiJiYhSnI/KGRlPW5hdmlnYXRvci51c2VyQWdlbnQsV3Q9ZGUuaW5kZXhPZigiV2luZG93cyIpPj0wLHp0PWRlLmluZGV4T2YoIk1hY2ludG9zaCIpPj0wLChkZS5pbmRleE9mKCJNYWNpbnRvc2giKT49MHx8ZGUuaW5kZXhPZigiaVBhZCIpPj0wfHxkZS5pbmRleE9mKCJpUGhvbmUiKT49MCkmJm5hdmlnYXRvci5tYXhUb3VjaFBvaW50cyYmbmF2aWdhdG9yLm1heFRvdWNoUG9pbnRzPjAsJHQ9ZGUuaW5kZXhPZigiTGludXgiKT49MCxkZT8uaW5kZXhPZigiTW9iaSIpPj0wLEd0PVNuKCl8fGtlLGh0PW5hdmlnYXRvci5sYW5ndWFnZS50b0xvd2VyQ2FzZSgpLEFuPWh0KTpjb25zb2xlLmVycm9yKCJVbmFibGUgdG8gcmVzb2x2ZSBwbGF0Zm9ybS4iKTtjb25zdCBRZT1XdCxZcj16dCxjZT1kZSxacj10eXBlb2YgQ2UucG9zdE1lc3NhZ2U9PSJmdW5jdGlvbiImJiFDZS5pbXBvcnRTY3JpcHRzOygoKT0+e2lmKFpyKXtjb25zdCBlPVtdO0NlLmFkZEV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLG49PntpZihuLmRhdGEmJm4uZGF0YS52c2NvZGVTY2hlZHVsZUFzeW5jV29yaylmb3IobGV0IHM9MCxyPWUubGVuZ3RoO3M8cjtzKyspe2NvbnN0IGk9ZVtzXTtpZihpLmlkPT09bi5kYXRhLnZzY29kZVNjaGVkdWxlQXN5bmNXb3JrKXtlLnNwbGljZShzLDEpLGkuY2FsbGJhY2soKTtyZXR1cm59fX0pO2xldCB0PTA7cmV0dXJuIG49Pntjb25zdCBzPSsrdDtlLnB1c2goe2lkOnMsY2FsbGJhY2s6bn0pLENlLnBvc3RNZXNzYWdlKHt2c2NvZGVTY2hlZHVsZUFzeW5jV29yazpzfSwiKiIpfX1yZXR1cm4gZT0+c2V0VGltZW91dChlKX0pKCk7Y29uc3QgS3I9ISEoY2UmJmNlLmluZGV4T2YoIkNocm9tZSIpPj0wKTtjZSYmY2UuaW5kZXhPZigiRmlyZWZveCIpPj0wLCFLciYmY2UmJmNlLmluZGV4T2YoIlNhZmFyaSIpPj0wLGNlJiZjZS5pbmRleE9mKCJFZGcvIik+PTAsY2UmJmNlLmluZGV4T2YoIkFuZHJvaWQiKT49MDtmdW5jdGlvbiBlaShlKXtyZXR1cm4gZX1jbGFzcyB0aXtjb25zdHJ1Y3Rvcih0LG4pe3RoaXMubGFzdENhY2hlPXZvaWQgMCx0aGlzLmxhc3RBcmdLZXk9dm9pZCAwLHR5cGVvZiB0PT0iZnVuY3Rpb24iPyh0aGlzLl9mbj10LHRoaXMuX2NvbXB1dGVLZXk9ZWkpOih0aGlzLl9mbj1uLHRoaXMuX2NvbXB1dGVLZXk9dC5nZXRDYWNoZUtleSl9Z2V0KHQpe2NvbnN0IG49dGhpcy5fY29tcHV0ZUtleSh0KTtyZXR1cm4gdGhpcy5sYXN0QXJnS2V5IT09biYmKHRoaXMubGFzdEFyZ0tleT1uLHRoaXMubGFzdENhY2hlPXRoaXMuX2ZuKHQpKSx0aGlzLmxhc3RDYWNoZX19Y2xhc3MgUm57Y29uc3RydWN0b3IodCl7dGhpcy5leGVjdXRvcj10LHRoaXMuX2RpZFJ1bj0hMX1nZXQgdmFsdWUoKXtpZighdGhpcy5fZGlkUnVuKXRyeXt0aGlzLl92YWx1ZT10aGlzLmV4ZWN1dG9yKCl9Y2F0Y2godCl7dGhpcy5fZXJyb3I9dH1maW5hbGx5e3RoaXMuX2RpZFJ1bj0hMH1pZih0aGlzLl9lcnJvcil0aHJvdyB0aGlzLl9lcnJvcjtyZXR1cm4gdGhpcy5fdmFsdWV9Z2V0IHJhd1ZhbHVlKCl7cmV0dXJuIHRoaXMuX3ZhbHVlfX1mdW5jdGlvbiBuaShlKXtyZXR1cm4gZS5yZXBsYWNlKC9bXFxce1x9XCpcK1w/XHxcXlwkXC5cW1xdXChcKV0vZywiXFwkJiIpfWZ1bmN0aW9uIHNpKGUpe3JldHVybiBlLnNwbGl0KC9cclxufFxyfFxuLyl9ZnVuY3Rpb24gcmkoZSl7Zm9yKGxldCB0PTAsbj1lLmxlbmd0aDt0PG47dCsrKXtjb25zdCBzPWUuY2hhckNvZGVBdCh0KTtpZihzIT09MzImJnMhPT05KXJldHVybiB0fXJldHVybi0xfWZ1bmN0aW9uIGlpKGUsdD1lLmxlbmd0aC0xKXtmb3IobGV0IG49dDtuPj0wO24tLSl7Y29uc3Qgcz1lLmNoYXJDb2RlQXQobik7aWYocyE9PTMyJiZzIT09OSlyZXR1cm4gbn1yZXR1cm4tMX1mdW5jdGlvbiB5bihlKXtyZXR1cm4gZT49NjUmJmU8PTkwfWZ1bmN0aW9uIGZ0KGUpe3JldHVybiA1NTI5Njw9ZSYmZTw9NTYzMTl9ZnVuY3Rpb24gT3QoZSl7cmV0dXJuIDU2MzIwPD1lJiZlPD01NzM0M31mdW5jdGlvbiBFbihlLHQpe3JldHVybihlLTU1Mjk2PDwxMCkrKHQtNTYzMjApKzY1NTM2fWZ1bmN0aW9uIGFpKGUsdCxuKXtjb25zdCBzPWUuY2hhckNvZGVBdChuKTtpZihmdChzKSYmbisxPHQpe2NvbnN0IHI9ZS5jaGFyQ29kZUF0KG4rMSk7aWYoT3QocikpcmV0dXJuIEVuKHMscil9cmV0dXJuIHN9Y29uc3QgbGk9L15bXHRcblxyXHgyMC1ceDdFXSokLztmdW5jdGlvbiBvaShlKXtyZXR1cm4gbGkudGVzdChlKX1jb25zdCBmZT1jbGFzcyBmZXtzdGF0aWMgZ2V0SW5zdGFuY2UodCl7cmV0dXJuIGZlLmNhY2hlLmdldChBcnJheS5mcm9tKHQpKX1zdGF0aWMgZ2V0TG9jYWxlcygpe3JldHVybiBmZS5fbG9jYWxlcy52YWx1ZX1jb25zdHJ1Y3Rvcih0KXt0aGlzLmNvbmZ1c2FibGVEaWN0aW9uYXJ5PXR9aXNBbWJpZ3VvdXModCl7cmV0dXJuIHRoaXMuY29uZnVzYWJsZURpY3Rpb25hcnkuaGFzKHQpfWdldFByaW1hcnlDb25mdXNhYmxlKHQpe3JldHVybiB0aGlzLmNvbmZ1c2FibGVEaWN0aW9uYXJ5LmdldCh0KX1nZXRDb25mdXNhYmxlQ29kZVBvaW50cygpe3JldHVybiBuZXcgU2V0KHRoaXMuY29uZnVzYWJsZURpY3Rpb25hcnkua2V5cygpKX19O2ZlLmFtYmlndW91c0NoYXJhY3RlckRhdGE9bmV3IFJuKCgpPT5KU09OLnBhcnNlKCd7Il9jb21tb24iOls4MjMyLDMyLDgyMzMsMzIsNTc2MCwzMiw4MTkyLDMyLDgxOTMsMzIsODE5NCwzMiw4MTk1LDMyLDgxOTYsMzIsODE5NywzMiw4MTk4LDMyLDgyMDAsMzIsODIwMSwzMiw4MjAyLDMyLDgyODcsMzIsODE5OSwzMiw4MjM5LDMyLDIwNDIsOTUsNjUxMDEsOTUsNjUxMDIsOTUsNjUxMDMsOTUsODIwOCw0NSw4MjA5LDQ1LDgyMTAsNDUsNjUxMTIsNDUsMTc0OCw0NSw4MjU5LDQ1LDcyNyw0NSw4NzIyLDQ1LDEwMTM0LDQ1LDExNDUwLDQ1LDE1NDksNDQsMTY0Myw0NCw4MjE4LDQ0LDE4NCw0NCw0MjIzMyw0NCw4OTQsNTksMjMwNyw1OCwyNjkxLDU4LDE0MTcsNTgsMTc5NSw1OCwxNzk2LDU4LDU4NjgsNTgsNjUwNzIsNTgsNjE0Nyw1OCw2MTUzLDU4LDgyODIsNTgsMTQ3NSw1OCw3NjAsNTgsNDI4ODksNTgsODc1OCw1OCw3MjAsNTgsNDIyMzcsNTgsNDUxLDMzLDExNjAxLDMzLDY2MCw2Myw1NzcsNjMsMjQyOSw2Myw1MDM4LDYzLDQyNzMxLDYzLDExOTE0OSw0Niw4MjI4LDQ2LDE3OTMsNDYsMTc5NCw0Niw0MjUxMCw0Niw2ODE3Niw0NiwxNjMyLDQ2LDE3NzYsNDYsNDIyMzIsNDYsMTM3Myw5Niw2NTI4Nyw5Niw4MjE5LDk2LDgyNDIsOTYsMTM3MCw5NiwxNTIzLDk2LDgxNzUsOTYsNjUzNDQsOTYsOTAwLDk2LDgxODksOTYsODEyNSw5Niw4MTI3LDk2LDgxOTAsOTYsNjk3LDk2LDg4NCw5Niw3MTIsOTYsNzE0LDk2LDcxNSw5Niw3NTYsOTYsNjk5LDk2LDcwMSw5Niw3MDAsOTYsNzAyLDk2LDQyODkyLDk2LDE0OTcsOTYsMjAzNiw5NiwyMDM3LDk2LDUxOTQsOTYsNTgzNiw5Niw5NDAzMyw5Niw5NDAzNCw5Niw2NTMzOSw5MSwxMDA4OCw0MCwxMDA5OCw0MCwxMjMwOCw0MCw2NDgzMCw0MCw2NTM0MSw5MywxMDA4OSw0MSwxMDA5OSw0MSwxMjMwOSw0MSw2NDgzMSw0MSwxMDEwMCwxMjMsMTE5MDYwLDEyMywxMDEwMSwxMjUsNjUzNDIsOTQsODI3MCw0MiwxNjQ1LDQyLDg3MjcsNDIsNjYzMzUsNDIsNTk0MSw0Nyw4MjU3LDQ3LDg3MjUsNDcsODI2MCw0Nyw5NTg1LDQ3LDEwMTg3LDQ3LDEwNzQ0LDQ3LDExOTM1NCw0NywxMjc1NSw0NywxMjMzOSw0NywxMTQ2Miw0NywyMDAzMSw0NywxMjAzNSw0Nyw2NTM0MCw5Miw2NTEyOCw5Miw4NzI2LDkyLDEwMTg5LDkyLDEwNzQxLDkyLDEwNzQ1LDkyLDExOTMxMSw5MiwxMTkzNTUsOTIsMTI3NTYsOTIsMjAwMjIsOTIsMTIwMzQsOTIsNDI4NzIsMzgsNzA4LDk0LDcxMCw5NCw1ODY5LDQzLDEwMTMzLDQzLDY2MjAzLDQzLDgyNDksNjAsMTAwOTQsNjAsNzA2LDYwLDExOTM1MCw2MCw1MTc2LDYwLDU4MTAsNjAsNTEyMCw2MSwxMTg0MCw2MSwxMjQ0OCw2MSw0MjIzOSw2MSw4MjUwLDYyLDEwMDk1LDYyLDcwNyw2MiwxMTkzNTEsNjIsNTE3MSw2Miw5NDAxNSw2Miw4Mjc1LDEyNiw3MzIsMTI2LDgxMjgsMTI2LDg3NjQsMTI2LDY1MzcyLDEyNCw2NTI5Myw0NSwxMjA3ODQsNTAsMTIwNzk0LDUwLDEyMDgwNCw1MCwxMjA4MTQsNTAsMTIwODI0LDUwLDEzMDAzNCw1MCw0Mjg0Miw1MCw0MjMsNTAsMTAwMCw1MCw0MjU2NCw1MCw1MzExLDUwLDQyNzM1LDUwLDExOTMwMiw1MSwxMjA3ODUsNTEsMTIwNzk1LDUxLDEyMDgwNSw1MSwxMjA4MTUsNTEsMTIwODI1LDUxLDEzMDAzNSw1MSw0MjkyMyw1MSw1NDAsNTEsNDM5LDUxLDQyODU4LDUxLDExNDY4LDUxLDEyNDgsNTEsOTQwMTEsNTEsNzE4ODIsNTEsMTIwNzg2LDUyLDEyMDc5Niw1MiwxMjA4MDYsNTIsMTIwODE2LDUyLDEyMDgyNiw1MiwxMzAwMzYsNTIsNTA3MCw1Miw3MTg1NSw1MiwxMjA3ODcsNTMsMTIwNzk3LDUzLDEyMDgwNyw1MywxMjA4MTcsNTMsMTIwODI3LDUzLDEzMDAzNyw1Myw0NDQsNTMsNzE4NjcsNTMsMTIwNzg4LDU0LDEyMDc5OCw1NCwxMjA4MDgsNTQsMTIwODE4LDU0LDEyMDgyOCw1NCwxMzAwMzgsNTQsMTE0NzQsNTQsNTEwMiw1NCw3MTg5Myw1NCwxMTkzMTQsNTUsMTIwNzg5LDU1LDEyMDc5OSw1NSwxMjA4MDksNTUsMTIwODE5LDU1LDEyMDgyOSw1NSwxMzAwMzksNTUsNjY3NzAsNTUsNzE4NzgsNTUsMjgxOSw1NiwyNTM4LDU2LDI2NjYsNTYsMTI1MTMxLDU2LDEyMDc5MCw1NiwxMjA4MDAsNTYsMTIwODEwLDU2LDEyMDgyMCw1NiwxMjA4MzAsNTYsMTMwMDQwLDU2LDU0Nyw1Niw1NDYsNTYsNjYzMzAsNTYsMjY2Myw1NywyOTIwLDU3LDI1NDEsNTcsMzQzNyw1NywxMjA3OTEsNTcsMTIwODAxLDU3LDEyMDgxMSw1NywxMjA4MjEsNTcsMTIwODMxLDU3LDEzMDA0MSw1Nyw0Mjg2Miw1NywxMTQ2Niw1Nyw3MTg4NCw1Nyw3MTg1Miw1Nyw3MTg5NCw1Nyw5MDgyLDk3LDY1MzQ1LDk3LDExOTgzNCw5NywxMTk4ODYsOTcsMTE5OTM4LDk3LDExOTk5MCw5NywxMjAwNDIsOTcsMTIwMDk0LDk3LDEyMDE0Niw5NywxMjAxOTgsOTcsMTIwMjUwLDk3LDEyMDMwMiw5NywxMjAzNTQsOTcsMTIwNDA2LDk3LDEyMDQ1OCw5Nyw1OTMsOTcsOTQ1LDk3LDEyMDUxNCw5NywxMjA1NzIsOTcsMTIwNjMwLDk3LDEyMDY4OCw5NywxMjA3NDYsOTcsNjUzMTMsNjUsMTE5ODA4LDY1LDExOTg2MCw2NSwxMTk5MTIsNjUsMTE5OTY0LDY1LDEyMDAxNiw2NSwxMjAwNjgsNjUsMTIwMTIwLDY1LDEyMDE3Miw2NSwxMjAyMjQsNjUsMTIwMjc2LDY1LDEyMDMyOCw2NSwxMjAzODAsNjUsMTIwNDMyLDY1LDkxMyw2NSwxMjA0ODgsNjUsMTIwNTQ2LDY1LDEyMDYwNCw2NSwxMjA2NjIsNjUsMTIwNzIwLDY1LDUwMzQsNjUsNTU3Myw2NSw0MjIyMiw2NSw5NDAxNiw2NSw2NjIwOCw2NSwxMTk4MzUsOTgsMTE5ODg3LDk4LDExOTkzOSw5OCwxMTk5OTEsOTgsMTIwMDQzLDk4LDEyMDA5NSw5OCwxMjAxNDcsOTgsMTIwMTk5LDk4LDEyMDI1MSw5OCwxMjAzMDMsOTgsMTIwMzU1LDk4LDEyMDQwNyw5OCwxMjA0NTksOTgsMzg4LDk4LDUwNzEsOTgsNTIzNCw5OCw1NTUxLDk4LDY1MzE0LDY2LDg0OTIsNjYsMTE5ODA5LDY2LDExOTg2MSw2NiwxMTk5MTMsNjYsMTIwMDE3LDY2LDEyMDA2OSw2NiwxMjAxMjEsNjYsMTIwMTczLDY2LDEyMDIyNSw2NiwxMjAyNzcsNjYsMTIwMzI5LDY2LDEyMDM4MSw2NiwxMjA0MzMsNjYsNDI5MzIsNjYsOTE0LDY2LDEyMDQ4OSw2NiwxMjA1NDcsNjYsMTIwNjA1LDY2LDEyMDY2Myw2NiwxMjA3MjEsNjYsNTEwOCw2Niw1NjIzLDY2LDQyMTkyLDY2LDY2MTc4LDY2LDY2MjA5LDY2LDY2MzA1LDY2LDY1MzQ3LDk5LDg1NzMsOTksMTE5ODM2LDk5LDExOTg4OCw5OSwxMTk5NDAsOTksMTE5OTkyLDk5LDEyMDA0NCw5OSwxMjAwOTYsOTksMTIwMTQ4LDk5LDEyMDIwMCw5OSwxMjAyNTIsOTksMTIwMzA0LDk5LDEyMDM1Niw5OSwxMjA0MDgsOTksMTIwNDYwLDk5LDc0MjgsOTksMTAxMCw5OSwxMTQyOSw5OSw0Mzk1MSw5OSw2NjYyMSw5OSwxMjg4NDQsNjcsNzE5MjIsNjcsNzE5MTMsNjcsNjUzMTUsNjcsODU1Nyw2Nyw4NDUwLDY3LDg0OTMsNjcsMTE5ODEwLDY3LDExOTg2Miw2NywxMTk5MTQsNjcsMTE5OTY2LDY3LDEyMDAxOCw2NywxMjAxNzQsNjcsMTIwMjI2LDY3LDEyMDI3OCw2NywxMjAzMzAsNjcsMTIwMzgyLDY3LDEyMDQzNCw2NywxMDE3LDY3LDExNDI4LDY3LDUwODcsNjcsNDIyMDIsNjcsNjYyMTAsNjcsNjYzMDYsNjcsNjY1ODEsNjcsNjY4NDQsNjcsODU3NCwxMDAsODUxOCwxMDAsMTE5ODM3LDEwMCwxMTk4ODksMTAwLDExOTk0MSwxMDAsMTE5OTkzLDEwMCwxMjAwNDUsMTAwLDEyMDA5NywxMDAsMTIwMTQ5LDEwMCwxMjAyMDEsMTAwLDEyMDI1MywxMDAsMTIwMzA1LDEwMCwxMjAzNTcsMTAwLDEyMDQwOSwxMDAsMTIwNDYxLDEwMCwxMjgxLDEwMCw1MDk1LDEwMCw1MjMxLDEwMCw0MjE5NCwxMDAsODU1OCw2OCw4NTE3LDY4LDExOTgxMSw2OCwxMTk4NjMsNjgsMTE5OTE1LDY4LDExOTk2Nyw2OCwxMjAwMTksNjgsMTIwMDcxLDY4LDEyMDEyMyw2OCwxMjAxNzUsNjgsMTIwMjI3LDY4LDEyMDI3OSw2OCwxMjAzMzEsNjgsMTIwMzgzLDY4LDEyMDQzNSw2OCw1MDI0LDY4LDU1OTgsNjgsNTYxMCw2OCw0MjE5NSw2OCw4NDk0LDEwMSw2NTM0OSwxMDEsODQ5NSwxMDEsODUxOSwxMDEsMTE5ODM4LDEwMSwxMTk4OTAsMTAxLDExOTk0MiwxMDEsMTIwMDQ2LDEwMSwxMjAwOTgsMTAxLDEyMDE1MCwxMDEsMTIwMjAyLDEwMSwxMjAyNTQsMTAxLDEyMDMwNiwxMDEsMTIwMzU4LDEwMSwxMjA0MTAsMTAxLDEyMDQ2MiwxMDEsNDM4MjYsMTAxLDEyMTMsMTAxLDg5NTksNjksNjUzMTcsNjksODQ5Niw2OSwxMTk4MTIsNjksMTE5ODY0LDY5LDExOTkxNiw2OSwxMjAwMjAsNjksMTIwMDcyLDY5LDEyMDEyNCw2OSwxMjAxNzYsNjksMTIwMjI4LDY5LDEyMDI4MCw2OSwxMjAzMzIsNjksMTIwMzg0LDY5LDEyMDQzNiw2OSw5MTcsNjksMTIwNDkyLDY5LDEyMDU1MCw2OSwxMjA2MDgsNjksMTIwNjY2LDY5LDEyMDcyNCw2OSwxMTU3Nyw2OSw1MDM2LDY5LDQyMjI0LDY5LDcxODQ2LDY5LDcxODU0LDY5LDY2MTgyLDY5LDExOTgzOSwxMDIsMTE5ODkxLDEwMiwxMTk5NDMsMTAyLDExOTk5NSwxMDIsMTIwMDQ3LDEwMiwxMjAwOTksMTAyLDEyMDE1MSwxMDIsMTIwMjAzLDEwMiwxMjAyNTUsMTAyLDEyMDMwNywxMDIsMTIwMzU5LDEwMiwxMjA0MTEsMTAyLDEyMDQ2MywxMDIsNDM4MjksMTAyLDQyOTA1LDEwMiwzODMsMTAyLDc4MzcsMTAyLDE0MTIsMTAyLDExOTMxNSw3MCw4NDk3LDcwLDExOTgxMyw3MCwxMTk4NjUsNzAsMTE5OTE3LDcwLDEyMDAyMSw3MCwxMjAwNzMsNzAsMTIwMTI1LDcwLDEyMDE3Nyw3MCwxMjAyMjksNzAsMTIwMjgxLDcwLDEyMDMzMyw3MCwxMjAzODUsNzAsMTIwNDM3LDcwLDQyOTA0LDcwLDk4OCw3MCwxMjA3NzgsNzAsNTU1Niw3MCw0MjIwNSw3MCw3MTg3NCw3MCw3MTg0Miw3MCw2NjE4Myw3MCw2NjIxMyw3MCw2Njg1Myw3MCw2NTM1MSwxMDMsODQ1OCwxMDMsMTE5ODQwLDEwMywxMTk4OTIsMTAzLDExOTk0NCwxMDMsMTIwMDQ4LDEwMywxMjAxMDAsMTAzLDEyMDE1MiwxMDMsMTIwMjA0LDEwMywxMjAyNTYsMTAzLDEyMDMwOCwxMDMsMTIwMzYwLDEwMywxMjA0MTIsMTAzLDEyMDQ2NCwxMDMsNjA5LDEwMyw3NTU1LDEwMywzOTcsMTAzLDE0MDksMTAzLDExOTgxNCw3MSwxMTk4NjYsNzEsMTE5OTE4LDcxLDExOTk3MCw3MSwxMjAwMjIsNzEsMTIwMDc0LDcxLDEyMDEyNiw3MSwxMjAxNzgsNzEsMTIwMjMwLDcxLDEyMDI4Miw3MSwxMjAzMzQsNzEsMTIwMzg2LDcxLDEyMDQzOCw3MSwxMjkyLDcxLDUwNTYsNzEsNTEwNyw3MSw0MjE5OCw3MSw2NTM1MiwxMDQsODQ2MiwxMDQsMTE5ODQxLDEwNCwxMTk5NDUsMTA0LDExOTk5NywxMDQsMTIwMDQ5LDEwNCwxMjAxMDEsMTA0LDEyMDE1MywxMDQsMTIwMjA1LDEwNCwxMjAyNTcsMTA0LDEyMDMwOSwxMDQsMTIwMzYxLDEwNCwxMjA0MTMsMTA0LDEyMDQ2NSwxMDQsMTIxMSwxMDQsMTM5MiwxMDQsNTA1OCwxMDQsNjUzMjAsNzIsODQ1OSw3Miw4NDYwLDcyLDg0NjEsNzIsMTE5ODE1LDcyLDExOTg2Nyw3MiwxMTk5MTksNzIsMTIwMDIzLDcyLDEyMDE3OSw3MiwxMjAyMzEsNzIsMTIwMjgzLDcyLDEyMDMzNSw3MiwxMjAzODcsNzIsMTIwNDM5LDcyLDkxOSw3MiwxMjA0OTQsNzIsMTIwNTUyLDcyLDEyMDYxMCw3MiwxMjA2NjgsNzIsMTIwNzI2LDcyLDExNDA2LDcyLDUwNTEsNzIsNTUwMCw3Miw0MjIxNSw3Miw2NjI1NSw3Miw3MzEsMTA1LDkwNzUsMTA1LDY1MzUzLDEwNSw4NTYwLDEwNSw4NTA1LDEwNSw4NTIwLDEwNSwxMTk4NDIsMTA1LDExOTg5NCwxMDUsMTE5OTQ2LDEwNSwxMTk5OTgsMTA1LDEyMDA1MCwxMDUsMTIwMTAyLDEwNSwxMjAxNTQsMTA1LDEyMDIwNiwxMDUsMTIwMjU4LDEwNSwxMjAzMTAsMTA1LDEyMDM2MiwxMDUsMTIwNDE0LDEwNSwxMjA0NjYsMTA1LDEyMDQ4NCwxMDUsNjE4LDEwNSw2MTcsMTA1LDk1MywxMDUsODEyNiwxMDUsODkwLDEwNSwxMjA1MjIsMTA1LDEyMDU4MCwxMDUsMTIwNjM4LDEwNSwxMjA2OTYsMTA1LDEyMDc1NCwxMDUsMTExMCwxMDUsNDI1NjcsMTA1LDEyMzEsMTA1LDQzODkzLDEwNSw1MDI5LDEwNSw3MTg3NSwxMDUsNjUzNTQsMTA2LDg1MjEsMTA2LDExOTg0MywxMDYsMTE5ODk1LDEwNiwxMTk5NDcsMTA2LDExOTk5OSwxMDYsMTIwMDUxLDEwNiwxMjAxMDMsMTA2LDEyMDE1NSwxMDYsMTIwMjA3LDEwNiwxMjAyNTksMTA2LDEyMDMxMSwxMDYsMTIwMzYzLDEwNiwxMjA0MTUsMTA2LDEyMDQ2NywxMDYsMTAxMSwxMDYsMTExMiwxMDYsNjUzMjIsNzQsMTE5ODE3LDc0LDExOTg2OSw3NCwxMTk5MjEsNzQsMTE5OTczLDc0LDEyMDAyNSw3NCwxMjAwNzcsNzQsMTIwMTI5LDc0LDEyMDE4MSw3NCwxMjAyMzMsNzQsMTIwMjg1LDc0LDEyMDMzNyw3NCwxMjAzODksNzQsMTIwNDQxLDc0LDQyOTMwLDc0LDg5NSw3NCwxMDMyLDc0LDUwMzUsNzQsNTI2MSw3NCw0MjIwMSw3NCwxMTk4NDQsMTA3LDExOTg5NiwxMDcsMTE5OTQ4LDEwNywxMjAwMDAsMTA3LDEyMDA1MiwxMDcsMTIwMTA0LDEwNywxMjAxNTYsMTA3LDEyMDIwOCwxMDcsMTIwMjYwLDEwNywxMjAzMTIsMTA3LDEyMDM2NCwxMDcsMTIwNDE2LDEwNywxMjA0NjgsMTA3LDg0OTAsNzUsNjUzMjMsNzUsMTE5ODE4LDc1LDExOTg3MCw3NSwxMTk5MjIsNzUsMTE5OTc0LDc1LDEyMDAyNiw3NSwxMjAwNzgsNzUsMTIwMTMwLDc1LDEyMDE4Miw3NSwxMjAyMzQsNzUsMTIwMjg2LDc1LDEyMDMzOCw3NSwxMjAzOTAsNzUsMTIwNDQyLDc1LDkyMiw3NSwxMjA0OTcsNzUsMTIwNTU1LDc1LDEyMDYxMyw3NSwxMjA2NzEsNzUsMTIwNzI5LDc1LDExNDEyLDc1LDUwOTQsNzUsNTg0NSw3NSw0MjE5OSw3NSw2Njg0MCw3NSwxNDcyLDEwOCw4NzM5LDczLDkyMTMsNzMsNjU1MTIsNzMsMTYzMywxMDgsMTc3Nyw3Myw2NjMzNiwxMDgsMTI1MTI3LDEwOCwxMjA3ODMsNzMsMTIwNzkzLDczLDEyMDgwMyw3MywxMjA4MTMsNzMsMTIwODIzLDczLDEzMDAzMyw3Myw2NTMyMSw3Myw4NTQ0LDczLDg0NjQsNzMsODQ2NSw3MywxMTk4MTYsNzMsMTE5ODY4LDczLDExOTkyMCw3MywxMjAwMjQsNzMsMTIwMTI4LDczLDEyMDE4MCw3MywxMjAyMzIsNzMsMTIwMjg0LDczLDEyMDMzNiw3MywxMjAzODgsNzMsMTIwNDQwLDczLDY1MzU2LDEwOCw4NTcyLDczLDg0NjcsMTA4LDExOTg0NSwxMDgsMTE5ODk3LDEwOCwxMTk5NDksMTA4LDEyMDAwMSwxMDgsMTIwMDUzLDEwOCwxMjAxMDUsNzMsMTIwMTU3LDczLDEyMDIwOSw3MywxMjAyNjEsNzMsMTIwMzEzLDczLDEyMDM2NSw3MywxMjA0MTcsNzMsMTIwNDY5LDczLDQ0OCw3MywxMjA0OTYsNzMsMTIwNTU0LDczLDEyMDYxMiw3MywxMjA2NzAsNzMsMTIwNzI4LDczLDExNDEwLDczLDEwMzAsNzMsMTIxNiw3MywxNDkzLDEwOCwxNTAzLDEwOCwxNTc1LDEwOCwxMjY0NjQsMTA4LDEyNjU5MiwxMDgsNjUxNjYsMTA4LDY1MTY1LDEwOCwxOTk0LDEwOCwxMTU5OSw3Myw1ODI1LDczLDQyMjI2LDczLDkzOTkyLDczLDY2MTg2LDEyNCw2NjMxMywxMjQsMTE5MzM4LDc2LDg1NTYsNzYsODQ2Niw3NiwxMTk4MTksNzYsMTE5ODcxLDc2LDExOTkyMyw3NiwxMjAwMjcsNzYsMTIwMDc5LDc2LDEyMDEzMSw3NiwxMjAxODMsNzYsMTIwMjM1LDc2LDEyMDI4Nyw3NiwxMjAzMzksNzYsMTIwMzkxLDc2LDEyMDQ0Myw3NiwxMTQ3Miw3Niw1MDg2LDc2LDUyOTAsNzYsNDIyMDksNzYsOTM5NzQsNzYsNzE4NDMsNzYsNzE4NTgsNzYsNjY1ODcsNzYsNjY4NTQsNzYsNjUzMjUsNzcsODU1OSw3Nyw4NDk5LDc3LDExOTgyMCw3NywxMTk4NzIsNzcsMTE5OTI0LDc3LDEyMDAyOCw3NywxMjAwODAsNzcsMTIwMTMyLDc3LDEyMDE4NCw3NywxMjAyMzYsNzcsMTIwMjg4LDc3LDEyMDM0MCw3NywxMjAzOTIsNzcsMTIwNDQ0LDc3LDkyNCw3NywxMjA0OTksNzcsMTIwNTU3LDc3LDEyMDYxNSw3NywxMjA2NzMsNzcsMTIwNzMxLDc3LDEwMTgsNzcsMTE0MTYsNzcsNTA0Nyw3Nyw1NjE2LDc3LDU4NDYsNzcsNDIyMDcsNzcsNjYyMjQsNzcsNjYzMjEsNzcsMTE5ODQ3LDExMCwxMTk4OTksMTEwLDExOTk1MSwxMTAsMTIwMDAzLDExMCwxMjAwNTUsMTEwLDEyMDEwNywxMTAsMTIwMTU5LDExMCwxMjAyMTEsMTEwLDEyMDI2MywxMTAsMTIwMzE1LDExMCwxMjAzNjcsMTEwLDEyMDQxOSwxMTAsMTIwNDcxLDExMCwxNDAwLDExMCwxNDA0LDExMCw2NTMyNiw3OCw4NDY5LDc4LDExOTgyMSw3OCwxMTk4NzMsNzgsMTE5OTI1LDc4LDExOTk3Nyw3OCwxMjAwMjksNzgsMTIwMDgxLDc4LDEyMDE4NSw3OCwxMjAyMzcsNzgsMTIwMjg5LDc4LDEyMDM0MSw3OCwxMjAzOTMsNzgsMTIwNDQ1LDc4LDkyNSw3OCwxMjA1MDAsNzgsMTIwNTU4LDc4LDEyMDYxNiw3OCwxMjA2NzQsNzgsMTIwNzMyLDc4LDExNDE4LDc4LDQyMjA4LDc4LDY2ODM1LDc4LDMwNzQsMTExLDMyMDIsMTExLDMzMzAsMTExLDM0NTgsMTExLDI0MDYsMTExLDI2NjIsMTExLDI3OTAsMTExLDMwNDYsMTExLDMxNzQsMTExLDMzMDIsMTExLDM0MzAsMTExLDM2NjQsMTExLDM3OTIsMTExLDQxNjAsMTExLDE2MzcsMTExLDE3ODEsMTExLDY1MzU5LDExMSw4NTAwLDExMSwxMTk4NDgsMTExLDExOTkwMCwxMTEsMTE5OTUyLDExMSwxMjAwNTYsMTExLDEyMDEwOCwxMTEsMTIwMTYwLDExMSwxMjAyMTIsMTExLDEyMDI2NCwxMTEsMTIwMzE2LDExMSwxMjAzNjgsMTExLDEyMDQyMCwxMTEsMTIwNDcyLDExMSw3NDM5LDExMSw3NDQxLDExMSw0MzgzNywxMTEsOTU5LDExMSwxMjA1MjgsMTExLDEyMDU4NiwxMTEsMTIwNjQ0LDExMSwxMjA3MDIsMTExLDEyMDc2MCwxMTEsOTYzLDExMSwxMjA1MzIsMTExLDEyMDU5MCwxMTEsMTIwNjQ4LDExMSwxMjA3MDYsMTExLDEyMDc2NCwxMTEsMTE0MjMsMTExLDQzNTEsMTExLDE0MTMsMTExLDE1MDUsMTExLDE2MDcsMTExLDEyNjUwMCwxMTEsMTI2NTY0LDExMSwxMjY1OTYsMTExLDY1MjU5LDExMSw2NTI2MCwxMTEsNjUyNTgsMTExLDY1MjU3LDExMSwxNzI2LDExMSw2NDQyOCwxMTEsNjQ0MjksMTExLDY0NDI3LDExMSw2NDQyNiwxMTEsMTcyOSwxMTEsNjQ0MjQsMTExLDY0NDI1LDExMSw2NDQyMywxMTEsNjQ0MjIsMTExLDE3NDksMTExLDMzNjAsMTExLDQxMjUsMTExLDY2Nzk0LDExMSw3MTg4MCwxMTEsNzE4OTUsMTExLDY2NjA0LDExMSwxOTg0LDc5LDI1MzQsNzksMjkxOCw3OSwxMjI5NSw3OSw3MDg2NCw3OSw3MTkwNCw3OSwxMjA3ODIsNzksMTIwNzkyLDc5LDEyMDgwMiw3OSwxMjA4MTIsNzksMTIwODIyLDc5LDEzMDAzMiw3OSw2NTMyNyw3OSwxMTk4MjIsNzksMTE5ODc0LDc5LDExOTkyNiw3OSwxMTk5NzgsNzksMTIwMDMwLDc5LDEyMDA4Miw3OSwxMjAxMzQsNzksMTIwMTg2LDc5LDEyMDIzOCw3OSwxMjAyOTAsNzksMTIwMzQyLDc5LDEyMDM5NCw3OSwxMjA0NDYsNzksOTI3LDc5LDEyMDUwMiw3OSwxMjA1NjAsNzksMTIwNjE4LDc5LDEyMDY3Niw3OSwxMjA3MzQsNzksMTE0MjIsNzksMTM2NSw3OSwxMTYwNCw3OSw0ODE2LDc5LDI4NDgsNzksNjY3NTQsNzksNDIyMjcsNzksNzE4NjEsNzksNjYxOTQsNzksNjYyMTksNzksNjY1NjQsNzksNjY4MzgsNzksOTA3NiwxMTIsNjUzNjAsMTEyLDExOTg0OSwxMTIsMTE5OTAxLDExMiwxMTk5NTMsMTEyLDEyMDAwNSwxMTIsMTIwMDU3LDExMiwxMjAxMDksMTEyLDEyMDE2MSwxMTIsMTIwMjEzLDExMiwxMjAyNjUsMTEyLDEyMDMxNywxMTIsMTIwMzY5LDExMiwxMjA0MjEsMTEyLDEyMDQ3MywxMTIsOTYxLDExMiwxMjA1MzAsMTEyLDEyMDU0NCwxMTIsMTIwNTg4LDExMiwxMjA2MDIsMTEyLDEyMDY0NiwxMTIsMTIwNjYwLDExMiwxMjA3MDQsMTEyLDEyMDcxOCwxMTIsMTIwNzYyLDExMiwxMjA3NzYsMTEyLDExNDI3LDExMiw2NTMyOCw4MCw4NDczLDgwLDExOTgyMyw4MCwxMTk4NzUsODAsMTE5OTI3LDgwLDExOTk3OSw4MCwxMjAwMzEsODAsMTIwMDgzLDgwLDEyMDE4Nyw4MCwxMjAyMzksODAsMTIwMjkxLDgwLDEyMDM0Myw4MCwxMjAzOTUsODAsMTIwNDQ3LDgwLDkyOSw4MCwxMjA1MDQsODAsMTIwNTYyLDgwLDEyMDYyMCw4MCwxMjA2NzgsODAsMTIwNzM2LDgwLDExNDI2LDgwLDUwOTAsODAsNTIyOSw4MCw0MjE5Myw4MCw2NjE5Nyw4MCwxMTk4NTAsMTEzLDExOTkwMiwxMTMsMTE5OTU0LDExMywxMjAwMDYsMTEzLDEyMDA1OCwxMTMsMTIwMTEwLDExMywxMjAxNjIsMTEzLDEyMDIxNCwxMTMsMTIwMjY2LDExMywxMjAzMTgsMTEzLDEyMDM3MCwxMTMsMTIwNDIyLDExMywxMjA0NzQsMTEzLDEzMDcsMTEzLDEzNzksMTEzLDEzODIsMTEzLDg0NzQsODEsMTE5ODI0LDgxLDExOTg3Niw4MSwxMTk5MjgsODEsMTE5OTgwLDgxLDEyMDAzMiw4MSwxMjAwODQsODEsMTIwMTg4LDgxLDEyMDI0MCw4MSwxMjAyOTIsODEsMTIwMzQ0LDgxLDEyMDM5Niw4MSwxMjA0NDgsODEsMTE2MDUsODEsMTE5ODUxLDExNCwxMTk5MDMsMTE0LDExOTk1NSwxMTQsMTIwMDA3LDExNCwxMjAwNTksMTE0LDEyMDExMSwxMTQsMTIwMTYzLDExNCwxMjAyMTUsMTE0LDEyMDI2NywxMTQsMTIwMzE5LDExNCwxMjAzNzEsMTE0LDEyMDQyMywxMTQsMTIwNDc1LDExNCw0Mzg0NywxMTQsNDM4NDgsMTE0LDc0NjIsMTE0LDExMzk3LDExNCw0MzkwNSwxMTQsMTE5MzE4LDgyLDg0NzUsODIsODQ3Niw4Miw4NDc3LDgyLDExOTgyNSw4MiwxMTk4NzcsODIsMTE5OTI5LDgyLDEyMDAzMyw4MiwxMjAxODksODIsMTIwMjQxLDgyLDEyMDI5Myw4MiwxMjAzNDUsODIsMTIwMzk3LDgyLDEyMDQ0OSw4Miw0MjIsODIsNTAyNSw4Miw1MDc0LDgyLDY2NzQwLDgyLDU1MTEsODIsNDIyMTEsODIsOTQwMDUsODIsNjUzNjMsMTE1LDExOTg1MiwxMTUsMTE5OTA0LDExNSwxMTk5NTYsMTE1LDEyMDAwOCwxMTUsMTIwMDYwLDExNSwxMjAxMTIsMTE1LDEyMDE2NCwxMTUsMTIwMjE2LDExNSwxMjAyNjgsMTE1LDEyMDMyMCwxMTUsMTIwMzcyLDExNSwxMjA0MjQsMTE1LDEyMDQ3NiwxMTUsNDI4MDEsMTE1LDQ0NSwxMTUsMTEwOSwxMTUsNDM5NDYsMTE1LDcxODczLDExNSw2NjYzMiwxMTUsNjUzMzEsODMsMTE5ODI2LDgzLDExOTg3OCw4MywxMTk5MzAsODMsMTE5OTgyLDgzLDEyMDAzNCw4MywxMjAwODYsODMsMTIwMTM4LDgzLDEyMDE5MCw4MywxMjAyNDIsODMsMTIwMjk0LDgzLDEyMDM0Niw4MywxMjAzOTgsODMsMTIwNDUwLDgzLDEwMjksODMsMTM1OSw4Myw1MDc3LDgzLDUwODIsODMsNDIyMTAsODMsOTQwMTAsODMsNjYxOTgsODMsNjY1OTIsODMsMTE5ODUzLDExNiwxMTk5MDUsMTE2LDExOTk1NywxMTYsMTIwMDA5LDExNiwxMjAwNjEsMTE2LDEyMDExMywxMTYsMTIwMTY1LDExNiwxMjAyMTcsMTE2LDEyMDI2OSwxMTYsMTIwMzIxLDExNiwxMjAzNzMsMTE2LDEyMDQyNSwxMTYsMTIwNDc3LDExNiw4ODY4LDg0LDEwMjAxLDg0LDEyODg3Miw4NCw2NTMzMiw4NCwxMTk4MjcsODQsMTE5ODc5LDg0LDExOTkzMSw4NCwxMTk5ODMsODQsMTIwMDM1LDg0LDEyMDA4Nyw4NCwxMjAxMzksODQsMTIwMTkxLDg0LDEyMDI0Myw4NCwxMjAyOTUsODQsMTIwMzQ3LDg0LDEyMDM5OSw4NCwxMjA0NTEsODQsOTMyLDg0LDEyMDUwNyw4NCwxMjA1NjUsODQsMTIwNjIzLDg0LDEyMDY4MSw4NCwxMjA3MzksODQsMTE0MzAsODQsNTAyNiw4NCw0MjE5Niw4NCw5Mzk2Miw4NCw3MTg2OCw4NCw2NjE5OSw4NCw2NjIyNSw4NCw2NjMyNSw4NCwxMTk4NTQsMTE3LDExOTkwNiwxMTcsMTE5OTU4LDExNywxMjAwMTAsMTE3LDEyMDA2MiwxMTcsMTIwMTE0LDExNywxMjAxNjYsMTE3LDEyMDIxOCwxMTcsMTIwMjcwLDExNywxMjAzMjIsMTE3LDEyMDM3NCwxMTcsMTIwNDI2LDExNywxMjA0NzgsMTE3LDQyOTExLDExNyw3NDUyLDExNyw0Mzg1NCwxMTcsNDM4NTgsMTE3LDY1MSwxMTcsOTY1LDExNywxMjA1MzQsMTE3LDEyMDU5MiwxMTcsMTIwNjUwLDExNywxMjA3MDgsMTE3LDEyMDc2NiwxMTcsMTQwNSwxMTcsNjY4MDYsMTE3LDcxODk2LDExNyw4NzQ2LDg1LDg4OTksODUsMTE5ODI4LDg1LDExOTg4MCw4NSwxMTk5MzIsODUsMTE5OTg0LDg1LDEyMDAzNiw4NSwxMjAwODgsODUsMTIwMTQwLDg1LDEyMDE5Miw4NSwxMjAyNDQsODUsMTIwMjk2LDg1LDEyMDM0OCw4NSwxMjA0MDAsODUsMTIwNDUyLDg1LDEzNTcsODUsNDYwOCw4NSw2Njc2Niw4NSw1MTk2LDg1LDQyMjI4LDg1LDk0MDE4LDg1LDcxODY0LDg1LDg3NDQsMTE4LDg4OTcsMTE4LDY1MzY2LDExOCw4NTY0LDExOCwxMTk4NTUsMTE4LDExOTkwNywxMTgsMTE5OTU5LDExOCwxMjAwMTEsMTE4LDEyMDA2MywxMTgsMTIwMTE1LDExOCwxMjAxNjcsMTE4LDEyMDIxOSwxMTgsMTIwMjcxLDExOCwxMjAzMjMsMTE4LDEyMDM3NSwxMTgsMTIwNDI3LDExOCwxMjA0NzksMTE4LDc0NTYsMTE4LDk1NywxMTgsMTIwNTI2LDExOCwxMjA1ODQsMTE4LDEyMDY0MiwxMTgsMTIwNzAwLDExOCwxMjA3NTgsMTE4LDExNDEsMTE4LDE0OTYsMTE4LDcxNDMwLDExOCw0Mzk0NSwxMTgsNzE4NzIsMTE4LDExOTMwOSw4NiwxNjM5LDg2LDE3ODMsODYsODU0OCw4NiwxMTk4MjksODYsMTE5ODgxLDg2LDExOTkzMyw4NiwxMTk5ODUsODYsMTIwMDM3LDg2LDEyMDA4OSw4NiwxMjAxNDEsODYsMTIwMTkzLDg2LDEyMDI0NSw4NiwxMjAyOTcsODYsMTIwMzQ5LDg2LDEyMDQwMSw4NiwxMjA0NTMsODYsMTE0MCw4NiwxMTU3Niw4Niw1MDgxLDg2LDUxNjcsODYsNDI3MTksODYsNDIyMTQsODYsOTM5NjAsODYsNzE4NDAsODYsNjY4NDUsODYsNjIzLDExOSwxMTk4NTYsMTE5LDExOTkwOCwxMTksMTE5OTYwLDExOSwxMjAwMTIsMTE5LDEyMDA2NCwxMTksMTIwMTE2LDExOSwxMjAxNjgsMTE5LDEyMDIyMCwxMTksMTIwMjcyLDExOSwxMjAzMjQsMTE5LDEyMDM3NiwxMTksMTIwNDI4LDExOSwxMjA0ODAsMTE5LDc0NTcsMTE5LDExMjEsMTE5LDEzMDksMTE5LDEzNzcsMTE5LDcxNDM0LDExOSw3MTQzOCwxMTksNzE0MzksMTE5LDQzOTA3LDExOSw3MTkxOSw4Nyw3MTkxMCw4NywxMTk4MzAsODcsMTE5ODgyLDg3LDExOTkzNCw4NywxMTk5ODYsODcsMTIwMDM4LDg3LDEyMDA5MCw4NywxMjAxNDIsODcsMTIwMTk0LDg3LDEyMDI0Niw4NywxMjAyOTgsODcsMTIwMzUwLDg3LDEyMDQwMiw4NywxMjA0NTQsODcsMTMwOCw4Nyw1MDQzLDg3LDUwNzYsODcsNDIyMTgsODcsNTc0MiwxMjAsMTA1MzksMTIwLDEwNTQwLDEyMCwxMDc5OSwxMjAsNjUzNjgsMTIwLDg1NjksMTIwLDExOTg1NywxMjAsMTE5OTA5LDEyMCwxMTk5NjEsMTIwLDEyMDAxMywxMjAsMTIwMDY1LDEyMCwxMjAxMTcsMTIwLDEyMDE2OSwxMjAsMTIwMjIxLDEyMCwxMjAyNzMsMTIwLDEyMDMyNSwxMjAsMTIwMzc3LDEyMCwxMjA0MjksMTIwLDEyMDQ4MSwxMjAsNTQ0MSwxMjAsNTUwMSwxMjAsNTc0MSw4OCw5NTg3LDg4LDY2MzM4LDg4LDcxOTE2LDg4LDY1MzM2LDg4LDg1NTMsODgsMTE5ODMxLDg4LDExOTg4Myw4OCwxMTk5MzUsODgsMTE5OTg3LDg4LDEyMDAzOSw4OCwxMjAwOTEsODgsMTIwMTQzLDg4LDEyMDE5NSw4OCwxMjAyNDcsODgsMTIwMjk5LDg4LDEyMDM1MSw4OCwxMjA0MDMsODgsMTIwNDU1LDg4LDQyOTMxLDg4LDkzNSw4OCwxMjA1MTAsODgsMTIwNTY4LDg4LDEyMDYyNiw4OCwxMjA2ODQsODgsMTIwNzQyLDg4LDExNDM2LDg4LDExNjEzLDg4LDU4MTUsODgsNDIyMTksODgsNjYxOTIsODgsNjYyMjgsODgsNjYzMjcsODgsNjY4NTUsODgsNjExLDEyMSw3NTY0LDEyMSw2NTM2OSwxMjEsMTE5ODU4LDEyMSwxMTk5MTAsMTIxLDExOTk2MiwxMjEsMTIwMDE0LDEyMSwxMjAwNjYsMTIxLDEyMDExOCwxMjEsMTIwMTcwLDEyMSwxMjAyMjIsMTIxLDEyMDI3NCwxMjEsMTIwMzI2LDEyMSwxMjAzNzgsMTIxLDEyMDQzMCwxMjEsMTIwNDgyLDEyMSw2NTUsMTIxLDc5MzUsMTIxLDQzODY2LDEyMSw5NDcsMTIxLDg1MDksMTIxLDEyMDUxNiwxMjEsMTIwNTc0LDEyMSwxMjA2MzIsMTIxLDEyMDY5MCwxMjEsMTIwNzQ4LDEyMSwxMTk5LDEyMSw0MzI3LDEyMSw3MTkwMCwxMjEsNjUzMzcsODksMTE5ODMyLDg5LDExOTg4NCw4OSwxMTk5MzYsODksMTE5OTg4LDg5LDEyMDA0MCw4OSwxMjAwOTIsODksMTIwMTQ0LDg5LDEyMDE5Niw4OSwxMjAyNDgsODksMTIwMzAwLDg5LDEyMDM1Miw4OSwxMjA0MDQsODksMTIwNDU2LDg5LDkzMyw4OSw5NzgsODksMTIwNTA4LDg5LDEyMDU2Niw4OSwxMjA2MjQsODksMTIwNjgyLDg5LDEyMDc0MCw4OSwxMTQzMiw4OSwxMTk4LDg5LDUwMzMsODksNTA1Myw4OSw0MjIyMCw4OSw5NDAxOSw4OSw3MTg0NCw4OSw2NjIyNiw4OSwxMTk4NTksMTIyLDExOTkxMSwxMjIsMTE5OTYzLDEyMiwxMjAwMTUsMTIyLDEyMDA2NywxMjIsMTIwMTE5LDEyMiwxMjAxNzEsMTIyLDEyMDIyMywxMjIsMTIwMjc1LDEyMiwxMjAzMjcsMTIyLDEyMDM3OSwxMjIsMTIwNDMxLDEyMiwxMjA0ODMsMTIyLDc0NTgsMTIyLDQzOTIzLDEyMiw3MTg3NiwxMjIsNjYyOTMsOTAsNzE5MDksOTAsNjUzMzgsOTAsODQ4NCw5MCw4NDg4LDkwLDExOTgzMyw5MCwxMTk4ODUsOTAsMTE5OTM3LDkwLDExOTk4OSw5MCwxMjAwNDEsOTAsMTIwMTk3LDkwLDEyMDI0OSw5MCwxMjAzMDEsOTAsMTIwMzUzLDkwLDEyMDQwNSw5MCwxMjA0NTcsOTAsOTE4LDkwLDEyMDQ5Myw5MCwxMjA1NTEsOTAsMTIwNjA5LDkwLDEyMDY2Nyw5MCwxMjA3MjUsOTAsNTA1OSw5MCw0MjIwNCw5MCw3MTg0OSw5MCw2NTI4MiwzNCw2NTI4NCwzNiw2NTI4NSwzNyw2NTI4NiwzOCw2NTI5MCw0Miw2NTI5MSw0Myw2NTI5NCw0Niw2NTI5NSw0Nyw2NTI5Niw0OCw2NTI5Nyw0OSw2NTI5OCw1MCw2NTI5OSw1MSw2NTMwMCw1Miw2NTMwMSw1Myw2NTMwMiw1NCw2NTMwMyw1NSw2NTMwNCw1Niw2NTMwNSw1Nyw2NTMwOCw2MCw2NTMwOSw2MSw2NTMxMCw2Miw2NTMxMiw2NCw2NTMxNiw2OCw2NTMxOCw3MCw2NTMxOSw3MSw2NTMyNCw3Niw2NTMyOSw4MSw2NTMzMCw4Miw2NTMzMyw4NSw2NTMzNCw4Niw2NTMzNSw4Nyw2NTM0Myw5NSw2NTM0Niw5OCw2NTM0OCwxMDAsNjUzNTAsMTAyLDY1MzU1LDEwNyw2NTM1NywxMDksNjUzNTgsMTEwLDY1MzYxLDExMyw2NTM2MiwxMTQsNjUzNjQsMTE2LDY1MzY1LDExNyw2NTM2NywxMTksNjUzNzAsMTIyLDY1MzcxLDEyMyw2NTM3MywxMjUsMTE5ODQ2LDEwOV0sIl9kZWZhdWx0IjpbMTYwLDMyLDgyMTEsNDUsNjUzNzQsMTI2LDY1MzA2LDU4LDY1MjgxLDMzLDgyMTYsOTYsODIxNyw5Niw4MjQ1LDk2LDE4MCw5NiwxMjQ5NCw0NywxMDQ3LDUxLDEwNzMsNTQsMTA3Miw5NywxMDQwLDY1LDEwNjgsOTgsMTA0Miw2NiwxMDg5LDk5LDEwNTcsNjcsMTA3NywxMDEsMTA0NSw2OSwxMDUzLDcyLDMwNSwxMDUsMTA1MCw3NSw5MjEsNzMsMTA1Miw3NywxMDg2LDExMSwxMDU0LDc5LDEwMDksMTEyLDEwODgsMTEyLDEwNTYsODAsMTA3NSwxMTQsMTA1OCw4NCwyMTUsMTIwLDEwOTMsMTIwLDEwNjEsODgsMTA5MSwxMjEsMTA1OSw4OSw2NTI4MywzNSw2NTI4OCw0MCw2NTI4OSw0MSw2NTI5Miw0NCw2NTMwNyw1OSw2NTMxMSw2M10sImNzIjpbNjUzNzQsMTI2LDY1MzA2LDU4LDY1MjgxLDMzLDgyMTYsOTYsODIxNyw5Niw4MjQ1LDk2LDE4MCw5NiwxMjQ5NCw0NywxMDQ3LDUxLDEwNzMsNTQsMTA3Miw5NywxMDQwLDY1LDEwNjgsOTgsMTA0Miw2NiwxMDg5LDk5LDEwNTcsNjcsMTA3NywxMDEsMTA0NSw2OSwxMDUzLDcyLDMwNSwxMDUsMTA1MCw3NSw5MjEsNzMsMTA1Miw3NywxMDg2LDExMSwxMDU0LDc5LDEwMDksMTEyLDEwODgsMTEyLDEwNTYsODAsMTA3NSwxMTQsMTA1OCw4NCwxMDkzLDEyMCwxMDYxLDg4LDEwOTEsMTIxLDEwNTksODksNjUyODMsMzUsNjUyODgsNDAsNjUyODksNDEsNjUyOTIsNDQsNjUzMDcsNTksNjUzMTEsNjNdLCJkZSI6WzY1Mzc0LDEyNiw2NTMwNiw1OCw2NTI4MSwzMyw4MjE2LDk2LDgyMTcsOTYsODI0NSw5NiwxODAsOTYsMTI0OTQsNDcsMTA0Nyw1MSwxMDczLDU0LDEwNzIsOTcsMTA0MCw2NSwxMDY4LDk4LDEwNDIsNjYsMTA4OSw5OSwxMDU3LDY3LDEwNzcsMTAxLDEwNDUsNjksMTA1Myw3MiwzMDUsMTA1LDEwNTAsNzUsOTIxLDczLDEwNTIsNzcsMTA4NiwxMTEsMTA1NCw3OSwxMDA5LDExMiwxMDg4LDExMiwxMDU2LDgwLDEwNzUsMTE0LDEwNTgsODQsMTA5MywxMjAsMTA2MSw4OCwxMDkxLDEyMSwxMDU5LDg5LDY1MjgzLDM1LDY1Mjg4LDQwLDY1Mjg5LDQxLDY1MjkyLDQ0LDY1MzA3LDU5LDY1MzExLDYzXSwiZXMiOls4MjExLDQ1LDY1Mzc0LDEyNiw2NTMwNiw1OCw2NTI4MSwzMyw4MjQ1LDk2LDE4MCw5NiwxMjQ5NCw0NywxMDQ3LDUxLDEwNzMsNTQsMTA3Miw5NywxMDQwLDY1LDEwNjgsOTgsMTA0Miw2NiwxMDg5LDk5LDEwNTcsNjcsMTA3NywxMDEsMTA0NSw2OSwxMDUzLDcyLDMwNSwxMDUsMTA1MCw3NSwxMDUyLDc3LDEwODYsMTExLDEwNTQsNzksMTAwOSwxMTIsMTA4OCwxMTIsMTA1Niw4MCwxMDc1LDExNCwxMDU4LDg0LDIxNSwxMjAsMTA5MywxMjAsMTA2MSw4OCwxMDkxLDEyMSwxMDU5LDg5LDY1MjgzLDM1LDY1Mjg4LDQwLDY1Mjg5LDQxLDY1MjkyLDQ0LDY1MzA3LDU5LDY1MzExLDYzXSwiZnIiOls2NTM3NCwxMjYsNjUzMDYsNTgsNjUyODEsMzMsODIxNiw5Niw4MjQ1LDk2LDEyNDk0LDQ3LDEwNDcsNTEsMTA3Myw1NCwxMDcyLDk3LDEwNDAsNjUsMTA2OCw5OCwxMDQyLDY2LDEwODksOTksMTA1Nyw2NywxMDc3LDEwMSwxMDQ1LDY5LDEwNTMsNzIsMzA1LDEwNSwxMDUwLDc1LDkyMSw3MywxMDUyLDc3LDEwODYsMTExLDEwNTQsNzksMTAwOSwxMTIsMTA4OCwxMTIsMTA1Niw4MCwxMDc1LDExNCwxMDU4LDg0LDIxNSwxMjAsMTA5MywxMjAsMTA2MSw4OCwxMDkxLDEyMSwxMDU5LDg5LDY1MjgzLDM1LDY1Mjg4LDQwLDY1Mjg5LDQxLDY1MjkyLDQ0LDY1MzA3LDU5LDY1MzExLDYzXSwiaXQiOlsxNjAsMzIsODIxMSw0NSw2NTM3NCwxMjYsNjUzMDYsNTgsNjUyODEsMzMsODIxNiw5Niw4MjQ1LDk2LDE4MCw5NiwxMjQ5NCw0NywxMDQ3LDUxLDEwNzMsNTQsMTA3Miw5NywxMDQwLDY1LDEwNjgsOTgsMTA0Miw2NiwxMDg5LDk5LDEwNTcsNjcsMTA3NywxMDEsMTA0NSw2OSwxMDUzLDcyLDMwNSwxMDUsMTA1MCw3NSw5MjEsNzMsMTA1Miw3NywxMDg2LDExMSwxMDU0LDc5LDEwMDksMTEyLDEwODgsMTEyLDEwNTYsODAsMTA3NSwxMTQsMTA1OCw4NCwyMTUsMTIwLDEwOTMsMTIwLDEwNjEsODgsMTA5MSwxMjEsMTA1OSw4OSw2NTI4MywzNSw2NTI4OCw0MCw2NTI4OSw0MSw2NTI5Miw0NCw2NTMwNyw1OSw2NTMxMSw2M10sImphIjpbODIxMSw0NSw2NTMwNiw1OCw2NTI4MSwzMyw4MjE2LDk2LDgyMTcsOTYsODI0NSw5NiwxODAsOTYsMTA0Nyw1MSwxMDczLDU0LDEwNzIsOTcsMTA0MCw2NSwxMDY4LDk4LDEwNDIsNjYsMTA4OSw5OSwxMDU3LDY3LDEwNzcsMTAxLDEwNDUsNjksMTA1Myw3MiwzMDUsMTA1LDEwNTAsNzUsOTIxLDczLDEwNTIsNzcsMTA4NiwxMTEsMTA1NCw3OSwxMDA5LDExMiwxMDg4LDExMiwxMDU2LDgwLDEwNzUsMTE0LDEwNTgsODQsMjE1LDEyMCwxMDkzLDEyMCwxMDYxLDg4LDEwOTEsMTIxLDEwNTksODksNjUyODMsMzUsNjUyOTIsNDQsNjUzMDcsNTldLCJrbyI6WzgyMTEsNDUsNjUzNzQsMTI2LDY1MzA2LDU4LDY1MjgxLDMzLDgyNDUsOTYsMTgwLDk2LDEyNDk0LDQ3LDEwNDcsNTEsMTA3Myw1NCwxMDcyLDk3LDEwNDAsNjUsMTA2OCw5OCwxMDQyLDY2LDEwODksOTksMTA1Nyw2NywxMDc3LDEwMSwxMDQ1LDY5LDEwNTMsNzIsMzA1LDEwNSwxMDUwLDc1LDkyMSw3MywxMDUyLDc3LDEwODYsMTExLDEwNTQsNzksMTAwOSwxMTIsMTA4OCwxMTIsMTA1Niw4MCwxMDc1LDExNCwxMDU4LDg0LDIxNSwxMjAsMTA5MywxMjAsMTA2MSw4OCwxMDkxLDEyMSwxMDU5LDg5LDY1MjgzLDM1LDY1Mjg4LDQwLDY1Mjg5LDQxLDY1MjkyLDQ0LDY1MzA3LDU5LDY1MzExLDYzXSwicGwiOls2NTM3NCwxMjYsNjUzMDYsNTgsNjUyODEsMzMsODIxNiw5Niw4MjE3LDk2LDgyNDUsOTYsMTgwLDk2LDEyNDk0LDQ3LDEwNDcsNTEsMTA3Myw1NCwxMDcyLDk3LDEwNDAsNjUsMTA2OCw5OCwxMDQyLDY2LDEwODksOTksMTA1Nyw2NywxMDc3LDEwMSwxMDQ1LDY5LDEwNTMsNzIsMzA1LDEwNSwxMDUwLDc1LDkyMSw3MywxMDUyLDc3LDEwODYsMTExLDEwNTQsNzksMTAwOSwxMTIsMTA4OCwxMTIsMTA1Niw4MCwxMDc1LDExNCwxMDU4LDg0LDIxNSwxMjAsMTA5MywxMjAsMTA2MSw4OCwxMDkxLDEyMSwxMDU5LDg5LDY1MjgzLDM1LDY1Mjg4LDQwLDY1Mjg5LDQxLDY1MjkyLDQ0LDY1MzA3LDU5LDY1MzExLDYzXSwicHQtQlIiOls2NTM3NCwxMjYsNjUzMDYsNTgsNjUyODEsMzMsODIxNiw5Niw4MjE3LDk2LDgyNDUsOTYsMTgwLDk2LDEyNDk0LDQ3LDEwNDcsNTEsMTA3Myw1NCwxMDcyLDk3LDEwNDAsNjUsMTA2OCw5OCwxMDQyLDY2LDEwODksOTksMTA1Nyw2NywxMDc3LDEwMSwxMDQ1LDY5LDEwNTMsNzIsMzA1LDEwNSwxMDUwLDc1LDkyMSw3MywxMDUyLDc3LDEwODYsMTExLDEwNTQsNzksMTAwOSwxMTIsMTA4OCwxMTIsMTA1Niw4MCwxMDc1LDExNCwxMDU4LDg0LDIxNSwxMjAsMTA5MywxMjAsMTA2MSw4OCwxMDkxLDEyMSwxMDU5LDg5LDY1MjgzLDM1LDY1Mjg4LDQwLDY1Mjg5LDQxLDY1MjkyLDQ0LDY1MzA3LDU5LDY1MzExLDYzXSwicXBzLXBsb2MiOlsxNjAsMzIsODIxMSw0NSw2NTM3NCwxMjYsNjUzMDYsNTgsNjUyODEsMzMsODIxNiw5Niw4MjE3LDk2LDgyNDUsOTYsMTgwLDk2LDEyNDk0LDQ3LDEwNDcsNTEsMTA3Myw1NCwxMDcyLDk3LDEwNDAsNjUsMTA2OCw5OCwxMDQyLDY2LDEwODksOTksMTA1Nyw2NywxMDc3LDEwMSwxMDQ1LDY5LDEwNTMsNzIsMzA1LDEwNSwxMDUwLDc1LDkyMSw3MywxMDUyLDc3LDEwODYsMTExLDEwNTQsNzksMTA4OCwxMTIsMTA1Niw4MCwxMDc1LDExNCwxMDU4LDg0LDIxNSwxMjAsMTA5MywxMjAsMTA2MSw4OCwxMDkxLDEyMSwxMDU5LDg5LDY1MjgzLDM1LDY1Mjg4LDQwLDY1Mjg5LDQxLDY1MjkyLDQ0LDY1MzA3LDU5LDY1MzExLDYzXSwicnUiOls2NTM3NCwxMjYsNjUzMDYsNTgsNjUyODEsMzMsODIxNiw5Niw4MjE3LDk2LDgyNDUsOTYsMTgwLDk2LDEyNDk0LDQ3LDMwNSwxMDUsOTIxLDczLDEwMDksMTEyLDIxNSwxMjAsNjUyODMsMzUsNjUyODgsNDAsNjUyODksNDEsNjUyOTIsNDQsNjUzMDcsNTksNjUzMTEsNjNdLCJ0ciI6WzE2MCwzMiw4MjExLDQ1LDY1Mzc0LDEyNiw2NTMwNiw1OCw2NTI4MSwzMyw4MjQ1LDk2LDE4MCw5NiwxMjQ5NCw0NywxMDQ3LDUxLDEwNzMsNTQsMTA3Miw5NywxMDQwLDY1LDEwNjgsOTgsMTA0Miw2NiwxMDg5LDk5LDEwNTcsNjcsMTA3NywxMDEsMTA0NSw2OSwxMDUzLDcyLDEwNTAsNzUsOTIxLDczLDEwNTIsNzcsMTA4NiwxMTEsMTA1NCw3OSwxMDA5LDExMiwxMDg4LDExMiwxMDU2LDgwLDEwNzUsMTE0LDEwNTgsODQsMjE1LDEyMCwxMDkzLDEyMCwxMDYxLDg4LDEwOTEsMTIxLDEwNTksODksNjUyODMsMzUsNjUyODgsNDAsNjUyODksNDEsNjUyOTIsNDQsNjUzMDcsNTksNjUzMTEsNjNdLCJ6aC1oYW5zIjpbNjUzNzQsMTI2LDY1MzA2LDU4LDY1MjgxLDMzLDgyNDUsOTYsMTgwLDk2LDEyNDk0LDQ3LDEwNDcsNTEsMTA3Myw1NCwxMDcyLDk3LDEwNDAsNjUsMTA2OCw5OCwxMDQyLDY2LDEwODksOTksMTA1Nyw2NywxMDc3LDEwMSwxMDQ1LDY5LDEwNTMsNzIsMzA1LDEwNSwxMDUwLDc1LDkyMSw3MywxMDUyLDc3LDEwODYsMTExLDEwNTQsNzksMTAwOSwxMTIsMTA4OCwxMTIsMTA1Niw4MCwxMDc1LDExNCwxMDU4LDg0LDIxNSwxMjAsMTA5MywxMjAsMTA2MSw4OCwxMDkxLDEyMSwxMDU5LDg5LDY1Mjg4LDQwLDY1Mjg5LDQxXSwiemgtaGFudCI6WzgyMTEsNDUsNjUzNzQsMTI2LDE4MCw5NiwxMjQ5NCw0NywxMDQ3LDUxLDEwNzMsNTQsMTA3Miw5NywxMDQwLDY1LDEwNjgsOTgsMTA0Miw2NiwxMDg5LDk5LDEwNTcsNjcsMTA3NywxMDEsMTA0NSw2OSwxMDUzLDcyLDMwNSwxMDUsMTA1MCw3NSw5MjEsNzMsMTA1Miw3NywxMDg2LDExMSwxMDU0LDc5LDEwMDksMTEyLDEwODgsMTEyLDEwNTYsODAsMTA3NSwxMTQsMTA1OCw4NCwyMTUsMTIwLDEwOTMsMTIwLDEwNjEsODgsMTA5MSwxMjEsMTA1OSw4OSw2NTI4MywzNSw2NTMwNyw1OV19JykpLGZlLmNhY2hlPW5ldyB0aSh7Z2V0Q2FjaGVLZXk6SlNPTi5zdHJpbmdpZnl9LHQ9PntmdW5jdGlvbiBuKGYpe2NvbnN0IGg9bmV3IE1hcDtmb3IobGV0IGQ9MDtkPGYubGVuZ3RoO2QrPTIpaC5zZXQoZltkXSxmW2QrMV0pO3JldHVybiBofWZ1bmN0aW9uIHMoZixoKXtjb25zdCBkPW5ldyBNYXAoZik7Zm9yKGNvbnN0W20sZ11vZiBoKWQuc2V0KG0sZyk7cmV0dXJuIGR9ZnVuY3Rpb24gcihmLGgpe2lmKCFmKXJldHVybiBoO2NvbnN0IGQ9bmV3IE1hcDtmb3IoY29uc3RbbSxnXW9mIGYpaC5oYXMobSkmJmQuc2V0KG0sZyk7cmV0dXJuIGR9Y29uc3QgaT1mZS5hbWJpZ3VvdXNDaGFyYWN0ZXJEYXRhLnZhbHVlO2xldCBsPXQuZmlsdGVyKGY9PiFmLnN0YXJ0c1dpdGgoIl8iKSYmZiBpbiBpKTtsLmxlbmd0aD09PTAmJihsPVsiX2RlZmF1bHQiXSk7bGV0IG87Zm9yKGNvbnN0IGYgb2YgbCl7Y29uc3QgaD1uKGlbZl0pO289cihvLGgpfWNvbnN0IHU9bihpLl9jb21tb24pLGM9cyh1LG8pO3JldHVybiBuZXcgZmUoYyl9KSxmZS5fbG9jYWxlcz1uZXcgUm4oKCk9Pk9iamVjdC5rZXlzKGZlLmFtYmlndW91c0NoYXJhY3RlckRhdGEudmFsdWUpLmZpbHRlcih0PT4hdC5zdGFydHNXaXRoKCJfIikpKTtsZXQgSmU9ZmU7Y29uc3QgJGU9Y2xhc3MgJGV7c3RhdGljIGdldFJhd0RhdGEoKXtyZXR1cm4gSlNPTi5wYXJzZSgiWzksMTAsMTEsMTIsMTMsMzIsMTI3LDE2MCwxNzMsODQ3LDE1NjQsNDQ0Nyw0NDQ4LDYwNjgsNjA2OSw2MTU1LDYxNTYsNjE1Nyw2MTU4LDczNTUsNzM1Niw4MTkyLDgxOTMsODE5NCw4MTk1LDgxOTYsODE5Nyw4MTk4LDgxOTksODIwMCw4MjAxLDgyMDIsODIwMyw4MjA0LDgyMDUsODIwNiw4MjA3LDgyMzQsODIzNSw4MjM2LDgyMzcsODIzOCw4MjM5LDgyODcsODI4OCw4Mjg5LDgyOTAsODI5MSw4MjkyLDgyOTMsODI5NCw4Mjk1LDgyOTYsODI5Nyw4Mjk4LDgyOTksODMwMCw4MzAxLDgzMDIsODMwMywxMDI0MCwxMjI4OCwxMjY0NCw2NTAyNCw2NTAyNSw2NTAyNiw2NTAyNyw2NTAyOCw2NTAyOSw2NTAzMCw2NTAzMSw2NTAzMiw2NTAzMyw2NTAzNCw2NTAzNSw2NTAzNiw2NTAzNyw2NTAzOCw2NTAzOSw2NTI3OSw2NTQ0MCw2NTUyMCw2NTUyMSw2NTUyMiw2NTUyMyw2NTUyNCw2NTUyNSw2NTUyNiw2NTUyNyw2NTUyOCw2NTUzMiw3ODg0NCwxMTkxNTUsMTE5MTU2LDExOTE1NywxMTkxNTgsMTE5MTU5LDExOTE2MCwxMTkxNjEsMTE5MTYyLDkxNzUwNCw5MTc1MDUsOTE3NTA2LDkxNzUwNyw5MTc1MDgsOTE3NTA5LDkxNzUxMCw5MTc1MTEsOTE3NTEyLDkxNzUxMyw5MTc1MTQsOTE3NTE1LDkxNzUxNiw5MTc1MTcsOTE3NTE4LDkxNzUxOSw5MTc1MjAsOTE3NTIxLDkxNzUyMiw5MTc1MjMsOTE3NTI0LDkxNzUyNSw5MTc1MjYsOTE3NTI3LDkxNzUyOCw5MTc1MjksOTE3NTMwLDkxNzUzMSw5MTc1MzIsOTE3NTMzLDkxNzUzNCw5MTc1MzUsOTE3NTM2LDkxNzUzNyw5MTc1MzgsOTE3NTM5LDkxNzU0MCw5MTc1NDEsOTE3NTQyLDkxNzU0Myw5MTc1NDQsOTE3NTQ1LDkxNzU0Niw5MTc1NDcsOTE3NTQ4LDkxNzU0OSw5MTc1NTAsOTE3NTUxLDkxNzU1Miw5MTc1NTMsOTE3NTU0LDkxNzU1NSw5MTc1NTYsOTE3NTU3LDkxNzU1OCw5MTc1NTksOTE3NTYwLDkxNzU2MSw5MTc1NjIsOTE3NTYzLDkxNzU2NCw5MTc1NjUsOTE3NTY2LDkxNzU2Nyw5MTc1NjgsOTE3NTY5LDkxNzU3MCw5MTc1NzEsOTE3NTcyLDkxNzU3Myw5MTc1NzQsOTE3NTc1LDkxNzU3Niw5MTc1NzcsOTE3NTc4LDkxNzU3OSw5MTc1ODAsOTE3NTgxLDkxNzU4Miw5MTc1ODMsOTE3NTg0LDkxNzU4NSw5MTc1ODYsOTE3NTg3LDkxNzU4OCw5MTc1ODksOTE3NTkwLDkxNzU5MSw5MTc1OTIsOTE3NTkzLDkxNzU5NCw5MTc1OTUsOTE3NTk2LDkxNzU5Nyw5MTc1OTgsOTE3NTk5LDkxNzYwMCw5MTc2MDEsOTE3NjAyLDkxNzYwMyw5MTc2MDQsOTE3NjA1LDkxNzYwNiw5MTc2MDcsOTE3NjA4LDkxNzYwOSw5MTc2MTAsOTE3NjExLDkxNzYxMiw5MTc2MTMsOTE3NjE0LDkxNzYxNSw5MTc2MTYsOTE3NjE3LDkxNzYxOCw5MTc2MTksOTE3NjIwLDkxNzYyMSw5MTc2MjIsOTE3NjIzLDkxNzYyNCw5MTc2MjUsOTE3NjI2LDkxNzYyNyw5MTc2MjgsOTE3NjI5LDkxNzYzMCw5MTc2MzEsOTE3NzYwLDkxNzc2MSw5MTc3NjIsOTE3NzYzLDkxNzc2NCw5MTc3NjUsOTE3NzY2LDkxNzc2Nyw5MTc3NjgsOTE3NzY5LDkxNzc3MCw5MTc3NzEsOTE3NzcyLDkxNzc3Myw5MTc3NzQsOTE3Nzc1LDkxNzc3Niw5MTc3NzcsOTE3Nzc4LDkxNzc3OSw5MTc3ODAsOTE3NzgxLDkxNzc4Miw5MTc3ODMsOTE3Nzg0LDkxNzc4NSw5MTc3ODYsOTE3Nzg3LDkxNzc4OCw5MTc3ODksOTE3NzkwLDkxNzc5MSw5MTc3OTIsOTE3NzkzLDkxNzc5NCw5MTc3OTUsOTE3Nzk2LDkxNzc5Nyw5MTc3OTgsOTE3Nzk5LDkxNzgwMCw5MTc4MDEsOTE3ODAyLDkxNzgwMyw5MTc4MDQsOTE3ODA1LDkxNzgwNiw5MTc4MDcsOTE3ODA4LDkxNzgwOSw5MTc4MTAsOTE3ODExLDkxNzgxMiw5MTc4MTMsOTE3ODE0LDkxNzgxNSw5MTc4MTYsOTE3ODE3LDkxNzgxOCw5MTc4MTksOTE3ODIwLDkxNzgyMSw5MTc4MjIsOTE3ODIzLDkxNzgyNCw5MTc4MjUsOTE3ODI2LDkxNzgyNyw5MTc4MjgsOTE3ODI5LDkxNzgzMCw5MTc4MzEsOTE3ODMyLDkxNzgzMyw5MTc4MzQsOTE3ODM1LDkxNzgzNiw5MTc4MzcsOTE3ODM4LDkxNzgzOSw5MTc4NDAsOTE3ODQxLDkxNzg0Miw5MTc4NDMsOTE3ODQ0LDkxNzg0NSw5MTc4NDYsOTE3ODQ3LDkxNzg0OCw5MTc4NDksOTE3ODUwLDkxNzg1MSw5MTc4NTIsOTE3ODUzLDkxNzg1NCw5MTc4NTUsOTE3ODU2LDkxNzg1Nyw5MTc4NTgsOTE3ODU5LDkxNzg2MCw5MTc4NjEsOTE3ODYyLDkxNzg2Myw5MTc4NjQsOTE3ODY1LDkxNzg2Niw5MTc4NjcsOTE3ODY4LDkxNzg2OSw5MTc4NzAsOTE3ODcxLDkxNzg3Miw5MTc4NzMsOTE3ODc0LDkxNzg3NSw5MTc4NzYsOTE3ODc3LDkxNzg3OCw5MTc4NzksOTE3ODgwLDkxNzg4MSw5MTc4ODIsOTE3ODgzLDkxNzg4NCw5MTc4ODUsOTE3ODg2LDkxNzg4Nyw5MTc4ODgsOTE3ODg5LDkxNzg5MCw5MTc4OTEsOTE3ODkyLDkxNzg5Myw5MTc4OTQsOTE3ODk1LDkxNzg5Niw5MTc4OTcsOTE3ODk4LDkxNzg5OSw5MTc5MDAsOTE3OTAxLDkxNzkwMiw5MTc5MDMsOTE3OTA0LDkxNzkwNSw5MTc5MDYsOTE3OTA3LDkxNzkwOCw5MTc5MDksOTE3OTEwLDkxNzkxMSw5MTc5MTIsOTE3OTEzLDkxNzkxNCw5MTc5MTUsOTE3OTE2LDkxNzkxNyw5MTc5MTgsOTE3OTE5LDkxNzkyMCw5MTc5MjEsOTE3OTIyLDkxNzkyMyw5MTc5MjQsOTE3OTI1LDkxNzkyNiw5MTc5MjcsOTE3OTI4LDkxNzkyOSw5MTc5MzAsOTE3OTMxLDkxNzkzMiw5MTc5MzMsOTE3OTM0LDkxNzkzNSw5MTc5MzYsOTE3OTM3LDkxNzkzOCw5MTc5MzksOTE3OTQwLDkxNzk0MSw5MTc5NDIsOTE3OTQzLDkxNzk0NCw5MTc5NDUsOTE3OTQ2LDkxNzk0Nyw5MTc5NDgsOTE3OTQ5LDkxNzk1MCw5MTc5NTEsOTE3OTUyLDkxNzk1Myw5MTc5NTQsOTE3OTU1LDkxNzk1Niw5MTc5NTcsOTE3OTU4LDkxNzk1OSw5MTc5NjAsOTE3OTYxLDkxNzk2Miw5MTc5NjMsOTE3OTY0LDkxNzk2NSw5MTc5NjYsOTE3OTY3LDkxNzk2OCw5MTc5NjksOTE3OTcwLDkxNzk3MSw5MTc5NzIsOTE3OTczLDkxNzk3NCw5MTc5NzUsOTE3OTc2LDkxNzk3Nyw5MTc5NzgsOTE3OTc5LDkxNzk4MCw5MTc5ODEsOTE3OTgyLDkxNzk4Myw5MTc5ODQsOTE3OTg1LDkxNzk4Niw5MTc5ODcsOTE3OTg4LDkxNzk4OSw5MTc5OTAsOTE3OTkxLDkxNzk5Miw5MTc5OTMsOTE3OTk0LDkxNzk5NSw5MTc5OTYsOTE3OTk3LDkxNzk5OCw5MTc5OTldIil9c3RhdGljIGdldERhdGEoKXtyZXR1cm4gdGhpcy5fZGF0YXx8KHRoaXMuX2RhdGE9bmV3IFNldCgkZS5nZXRSYXdEYXRhKCkpKSx0aGlzLl9kYXRhfXN0YXRpYyBpc0ludmlzaWJsZUNoYXJhY3Rlcih0KXtyZXR1cm4gJGUuZ2V0RGF0YSgpLmhhcyh0KX1zdGF0aWMgZ2V0IGNvZGVQb2ludHMoKXtyZXR1cm4gJGUuZ2V0RGF0YSgpfX07JGUuX2RhdGE9dm9pZCAwO2xldCBZZT0kZTtjb25zdCB1aT0iJGluaXRpYWxpemUiO2NsYXNzIGNpe2NvbnN0cnVjdG9yKHQsbixzLHIpe3RoaXMudnNXb3JrZXI9dCx0aGlzLnJlcT1uLHRoaXMubWV0aG9kPXMsdGhpcy5hcmdzPXIsdGhpcy50eXBlPTB9fWNsYXNzIE1ue2NvbnN0cnVjdG9yKHQsbixzLHIpe3RoaXMudnNXb3JrZXI9dCx0aGlzLnNlcT1uLHRoaXMucmVzPXMsdGhpcy5lcnI9cix0aGlzLnR5cGU9MX19Y2xhc3MgaGl7Y29uc3RydWN0b3IodCxuLHMscil7dGhpcy52c1dvcmtlcj10LHRoaXMucmVxPW4sdGhpcy5ldmVudE5hbWU9cyx0aGlzLmFyZz1yLHRoaXMudHlwZT0yfX1jbGFzcyBmaXtjb25zdHJ1Y3Rvcih0LG4scyl7dGhpcy52c1dvcmtlcj10LHRoaXMucmVxPW4sdGhpcy5ldmVudD1zLHRoaXMudHlwZT0zfX1jbGFzcyBkaXtjb25zdHJ1Y3Rvcih0LG4pe3RoaXMudnNXb3JrZXI9dCx0aGlzLnJlcT1uLHRoaXMudHlwZT00fX1jbGFzcyBtaXtjb25zdHJ1Y3Rvcih0KXt0aGlzLl93b3JrZXJJZD0tMSx0aGlzLl9oYW5kbGVyPXQsdGhpcy5fbGFzdFNlbnRSZXE9MCx0aGlzLl9wZW5kaW5nUmVwbGllcz1PYmplY3QuY3JlYXRlKG51bGwpLHRoaXMuX3BlbmRpbmdFbWl0dGVycz1uZXcgTWFwLHRoaXMuX3BlbmRpbmdFdmVudHM9bmV3IE1hcH1zZXRXb3JrZXJJZCh0KXt0aGlzLl93b3JrZXJJZD10fXNlbmRNZXNzYWdlKHQsbil7Y29uc3Qgcz1TdHJpbmcoKyt0aGlzLl9sYXN0U2VudFJlcSk7cmV0dXJuIG5ldyBQcm9taXNlKChyLGkpPT57dGhpcy5fcGVuZGluZ1JlcGxpZXNbc109e3Jlc29sdmU6cixyZWplY3Q6aX0sdGhpcy5fc2VuZChuZXcgY2kodGhpcy5fd29ya2VySWQscyx0LG4pKX0pfWxpc3Rlbih0LG4pe2xldCBzPW51bGw7Y29uc3Qgcj1uZXcgbGUoe29uV2lsbEFkZEZpcnN0TGlzdGVuZXI6KCk9PntzPVN0cmluZygrK3RoaXMuX2xhc3RTZW50UmVxKSx0aGlzLl9wZW5kaW5nRW1pdHRlcnMuc2V0KHMsciksdGhpcy5fc2VuZChuZXcgaGkodGhpcy5fd29ya2VySWQscyx0LG4pKX0sb25EaWRSZW1vdmVMYXN0TGlzdGVuZXI6KCk9Pnt0aGlzLl9wZW5kaW5nRW1pdHRlcnMuZGVsZXRlKHMpLHRoaXMuX3NlbmQobmV3IGRpKHRoaXMuX3dvcmtlcklkLHMpKSxzPW51bGx9fSk7cmV0dXJuIHIuZXZlbnR9aGFuZGxlTWVzc2FnZSh0KXshdHx8IXQudnNXb3JrZXJ8fHRoaXMuX3dvcmtlcklkIT09LTEmJnQudnNXb3JrZXIhPT10aGlzLl93b3JrZXJJZHx8dGhpcy5faGFuZGxlTWVzc2FnZSh0KX1faGFuZGxlTWVzc2FnZSh0KXtzd2l0Y2godC50eXBlKXtjYXNlIDE6cmV0dXJuIHRoaXMuX2hhbmRsZVJlcGx5TWVzc2FnZSh0KTtjYXNlIDA6cmV0dXJuIHRoaXMuX2hhbmRsZVJlcXVlc3RNZXNzYWdlKHQpO2Nhc2UgMjpyZXR1cm4gdGhpcy5faGFuZGxlU3Vic2NyaWJlRXZlbnRNZXNzYWdlKHQpO2Nhc2UgMzpyZXR1cm4gdGhpcy5faGFuZGxlRXZlbnRNZXNzYWdlKHQpO2Nhc2UgNDpyZXR1cm4gdGhpcy5faGFuZGxlVW5zdWJzY3JpYmVFdmVudE1lc3NhZ2UodCl9fV9oYW5kbGVSZXBseU1lc3NhZ2UodCl7aWYoIXRoaXMuX3BlbmRpbmdSZXBsaWVzW3Quc2VxXSl7Y29uc29sZS53YXJuKCJHb3QgcmVwbHkgdG8gdW5rbm93biBzZXEiKTtyZXR1cm59Y29uc3Qgbj10aGlzLl9wZW5kaW5nUmVwbGllc1t0LnNlcV07aWYoZGVsZXRlIHRoaXMuX3BlbmRpbmdSZXBsaWVzW3Quc2VxXSx0LmVycil7bGV0IHM9dC5lcnI7dC5lcnIuJGlzRXJyb3ImJihzPW5ldyBFcnJvcixzLm5hbWU9dC5lcnIubmFtZSxzLm1lc3NhZ2U9dC5lcnIubWVzc2FnZSxzLnN0YWNrPXQuZXJyLnN0YWNrKSxuLnJlamVjdChzKTtyZXR1cm59bi5yZXNvbHZlKHQucmVzKX1faGFuZGxlUmVxdWVzdE1lc3NhZ2UodCl7Y29uc3Qgbj10LnJlcTt0aGlzLl9oYW5kbGVyLmhhbmRsZU1lc3NhZ2UodC5tZXRob2QsdC5hcmdzKS50aGVuKHI9Pnt0aGlzLl9zZW5kKG5ldyBNbih0aGlzLl93b3JrZXJJZCxuLHIsdm9pZCAwKSl9LHI9PntyLmRldGFpbCBpbnN0YW5jZW9mIEVycm9yJiYoci5kZXRhaWw9Tm4oci5kZXRhaWwpKSx0aGlzLl9zZW5kKG5ldyBNbih0aGlzLl93b3JrZXJJZCxuLHZvaWQgMCxObihyKSkpfSl9X2hhbmRsZVN1YnNjcmliZUV2ZW50TWVzc2FnZSh0KXtjb25zdCBuPXQucmVxLHM9dGhpcy5faGFuZGxlci5oYW5kbGVFdmVudCh0LmV2ZW50TmFtZSx0LmFyZykocj0+e3RoaXMuX3NlbmQobmV3IGZpKHRoaXMuX3dvcmtlcklkLG4scikpfSk7dGhpcy5fcGVuZGluZ0V2ZW50cy5zZXQobixzKX1faGFuZGxlRXZlbnRNZXNzYWdlKHQpe2lmKCF0aGlzLl9wZW5kaW5nRW1pdHRlcnMuaGFzKHQucmVxKSl7Y29uc29sZS53YXJuKCJHb3QgZXZlbnQgZm9yIHVua25vd24gcmVxIik7cmV0dXJufXRoaXMuX3BlbmRpbmdFbWl0dGVycy5nZXQodC5yZXEpLmZpcmUodC5ldmVudCl9X2hhbmRsZVVuc3Vic2NyaWJlRXZlbnRNZXNzYWdlKHQpe2lmKCF0aGlzLl9wZW5kaW5nRXZlbnRzLmhhcyh0LnJlcSkpe2NvbnNvbGUud2FybigiR290IHVuc3Vic2NyaWJlIGZvciB1bmtub3duIHJlcSIpO3JldHVybn10aGlzLl9wZW5kaW5nRXZlbnRzLmdldCh0LnJlcSkuZGlzcG9zZSgpLHRoaXMuX3BlbmRpbmdFdmVudHMuZGVsZXRlKHQucmVxKX1fc2VuZCh0KXtjb25zdCBuPVtdO2lmKHQudHlwZT09PTApZm9yKGxldCBzPTA7czx0LmFyZ3MubGVuZ3RoO3MrKyl0LmFyZ3Nbc11pbnN0YW5jZW9mIEFycmF5QnVmZmVyJiZuLnB1c2godC5hcmdzW3NdKTtlbHNlIHQudHlwZT09PTEmJnQucmVzIGluc3RhbmNlb2YgQXJyYXlCdWZmZXImJm4ucHVzaCh0LnJlcyk7dGhpcy5faGFuZGxlci5zZW5kTWVzc2FnZSh0LG4pfX1mdW5jdGlvbiBrbihlKXtyZXR1cm4gZVswXT09PSJvIiYmZVsxXT09PSJuIiYmeW4oZS5jaGFyQ29kZUF0KDIpKX1mdW5jdGlvbiBGbihlKXtyZXR1cm4vXm9uRHluYW1pYy8udGVzdChlKSYmeW4oZS5jaGFyQ29kZUF0KDkpKX1mdW5jdGlvbiBnaShlLHQsbil7Y29uc3Qgcz1sPT5mdW5jdGlvbigpe2NvbnN0IG89QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLDApO3JldHVybiB0KGwsbyl9LHI9bD0+ZnVuY3Rpb24obyl7cmV0dXJuIG4obCxvKX0saT17fTtmb3IoY29uc3QgbCBvZiBlKXtpZihGbihsKSl7aVtsXT1yKGwpO2NvbnRpbnVlfWlmKGtuKGwpKXtpW2xdPW4obCx2b2lkIDApO2NvbnRpbnVlfWlbbF09cyhsKX1yZXR1cm4gaX1jbGFzcyBiaXtjb25zdHJ1Y3Rvcih0LG4pe3RoaXMuX3JlcXVlc3RIYW5kbGVyRmFjdG9yeT1uLHRoaXMuX3JlcXVlc3RIYW5kbGVyPW51bGwsdGhpcy5fcHJvdG9jb2w9bmV3IG1pKHtzZW5kTWVzc2FnZToocyxyKT0+e3QocyxyKX0saGFuZGxlTWVzc2FnZToocyxyKT0+dGhpcy5faGFuZGxlTWVzc2FnZShzLHIpLGhhbmRsZUV2ZW50OihzLHIpPT50aGlzLl9oYW5kbGVFdmVudChzLHIpfSl9b25tZXNzYWdlKHQpe3RoaXMuX3Byb3RvY29sLmhhbmRsZU1lc3NhZ2UodCl9X2hhbmRsZU1lc3NhZ2UodCxuKXtpZih0PT09dWkpcmV0dXJuIHRoaXMuaW5pdGlhbGl6ZShuWzBdLG5bMV0sblsyXSxuWzNdKTtpZighdGhpcy5fcmVxdWVzdEhhbmRsZXJ8fHR5cGVvZiB0aGlzLl9yZXF1ZXN0SGFuZGxlclt0XSE9ImZ1bmN0aW9uIilyZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKCJNaXNzaW5nIHJlcXVlc3RIYW5kbGVyIG9yIG1ldGhvZDogIit0KSk7dHJ5e3JldHVybiBQcm9taXNlLnJlc29sdmUodGhpcy5fcmVxdWVzdEhhbmRsZXJbdF0uYXBwbHkodGhpcy5fcmVxdWVzdEhhbmRsZXIsbikpfWNhdGNoKHMpe3JldHVybiBQcm9taXNlLnJlamVjdChzKX19X2hhbmRsZUV2ZW50KHQsbil7aWYoIXRoaXMuX3JlcXVlc3RIYW5kbGVyKXRocm93IG5ldyBFcnJvcigiTWlzc2luZyByZXF1ZXN0SGFuZGxlciIpO2lmKEZuKHQpKXtjb25zdCBzPXRoaXMuX3JlcXVlc3RIYW5kbGVyW3RdLmNhbGwodGhpcy5fcmVxdWVzdEhhbmRsZXIsbik7aWYodHlwZW9mIHMhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IEVycm9yKGBNaXNzaW5nIGR5bmFtaWMgZXZlbnQgJHt0fSBvbiByZXF1ZXN0IGhhbmRsZXIuYCk7cmV0dXJuIHN9aWYoa24odCkpe2NvbnN0IHM9dGhpcy5fcmVxdWVzdEhhbmRsZXJbdF07aWYodHlwZW9mIHMhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IEVycm9yKGBNaXNzaW5nIGV2ZW50ICR7dH0gb24gcmVxdWVzdCBoYW5kbGVyLmApO3JldHVybiBzfXRocm93IG5ldyBFcnJvcihgTWFsZm9ybWVkIGV2ZW50IG5hbWUgJHt0fWApfWluaXRpYWxpemUodCxuLHMscil7dGhpcy5fcHJvdG9jb2wuc2V0V29ya2VySWQodCk7Y29uc3Qgbz1naShyLCh1LGMpPT50aGlzLl9wcm90b2NvbC5zZW5kTWVzc2FnZSh1LGMpLCh1LGMpPT50aGlzLl9wcm90b2NvbC5saXN0ZW4odSxjKSk7cmV0dXJuIHRoaXMuX3JlcXVlc3RIYW5kbGVyRmFjdG9yeT8odGhpcy5fcmVxdWVzdEhhbmRsZXI9dGhpcy5fcmVxdWVzdEhhbmRsZXJGYWN0b3J5KG8pLFByb21pc2UucmVzb2x2ZShIdCh0aGlzLl9yZXF1ZXN0SGFuZGxlcikpKToobiYmKHR5cGVvZiBuLmJhc2VVcmw8InUiJiZkZWxldGUgbi5iYXNlVXJsLHR5cGVvZiBuLnBhdGhzPCJ1IiYmdHlwZW9mIG4ucGF0aHMudnM8InUiJiZkZWxldGUgbi5wYXRocy52cyx0eXBlb2Ygbi50cnVzdGVkVHlwZXNQb2xpY3k8InUiJiZkZWxldGUgbi50cnVzdGVkVHlwZXNQb2xpY3ksbi5jYXRjaEVycm9yPSEwLGdsb2JhbFRoaXMucmVxdWlyZS5jb25maWcobikpLG5ldyBQcm9taXNlKCh1LGMpPT57Y29uc3QgZj1nbG9iYWxUaGlzLnJlcXVpcmU7Zihbc10saD0+e2lmKHRoaXMuX3JlcXVlc3RIYW5kbGVyPWguY3JlYXRlKG8pLCF0aGlzLl9yZXF1ZXN0SGFuZGxlcil7YyhuZXcgRXJyb3IoIk5vIFJlcXVlc3RIYW5kbGVyISIpKTtyZXR1cm59dShIdCh0aGlzLl9yZXF1ZXN0SGFuZGxlcikpfSxjKX0pKX19Y2xhc3MgeGV7Y29uc3RydWN0b3IodCxuLHMscil7dGhpcy5vcmlnaW5hbFN0YXJ0PXQsdGhpcy5vcmlnaW5hbExlbmd0aD1uLHRoaXMubW9kaWZpZWRTdGFydD1zLHRoaXMubW9kaWZpZWRMZW5ndGg9cn1nZXRPcmlnaW5hbEVuZCgpe3JldHVybiB0aGlzLm9yaWdpbmFsU3RhcnQrdGhpcy5vcmlnaW5hbExlbmd0aH1nZXRNb2RpZmllZEVuZCgpe3JldHVybiB0aGlzLm1vZGlmaWVkU3RhcnQrdGhpcy5tb2RpZmllZExlbmd0aH19ZnVuY3Rpb24gRG4oZSx0KXtyZXR1cm4odDw8NSktdCtlfDB9ZnVuY3Rpb24geGkoZSx0KXt0PURuKDE0OTQxNyx0KTtmb3IobGV0IG49MCxzPWUubGVuZ3RoO248cztuKyspdD1EbihlLmNoYXJDb2RlQXQobiksdCk7cmV0dXJuIHR9ZnVuY3Rpb24ganQoZSx0LG49MzIpe2NvbnN0IHM9bi10LHI9figoMTw8cyktMSk7cmV0dXJuKGU8PHR8KHImZSk+Pj5zKT4+PjB9ZnVuY3Rpb24gUG4oZSx0PTAsbj1lLmJ5dGVMZW5ndGgscz0wKXtmb3IobGV0IHI9MDtyPG47cisrKWVbdCtyXT1zfWZ1bmN0aW9uIF9pKGUsdCxuPSIwIil7Zm9yKDtlLmxlbmd0aDx0OyllPW4rZTtyZXR1cm4gZX1mdW5jdGlvbiBaZShlLHQ9MzIpe3JldHVybiBlIGluc3RhbmNlb2YgQXJyYXlCdWZmZXI/QXJyYXkuZnJvbShuZXcgVWludDhBcnJheShlKSkubWFwKG49Pm4udG9TdHJpbmcoMTYpLnBhZFN0YXJ0KDIsIjAiKSkuam9pbigiIik6X2koKGU+Pj4wKS50b1N0cmluZygxNiksdC80KX1jb25zdCBFdD1jbGFzcyBFdHtjb25zdHJ1Y3Rvcigpe3RoaXMuX2gwPTE3MzI1ODQxOTMsdGhpcy5faDE9NDAyMzIzMzQxNyx0aGlzLl9oMj0yNTYyMzgzMTAyLHRoaXMuX2gzPTI3MTczMzg3OCx0aGlzLl9oND0zMjg1Mzc3NTIwLHRoaXMuX2J1ZmY9bmV3IFVpbnQ4QXJyYXkoNjcpLHRoaXMuX2J1ZmZEVj1uZXcgRGF0YVZpZXcodGhpcy5fYnVmZi5idWZmZXIpLHRoaXMuX2J1ZmZMZW49MCx0aGlzLl90b3RhbExlbj0wLHRoaXMuX2xlZnRvdmVySGlnaFN1cnJvZ2F0ZT0wLHRoaXMuX2ZpbmlzaGVkPSExfXVwZGF0ZSh0KXtjb25zdCBuPXQubGVuZ3RoO2lmKG49PT0wKXJldHVybjtjb25zdCBzPXRoaXMuX2J1ZmY7bGV0IHI9dGhpcy5fYnVmZkxlbixpPXRoaXMuX2xlZnRvdmVySGlnaFN1cnJvZ2F0ZSxsLG87Zm9yKGkhPT0wPyhsPWksbz0tMSxpPTApOihsPXQuY2hhckNvZGVBdCgwKSxvPTApOzspe2xldCB1PWw7aWYoZnQobCkpaWYobysxPG4pe2NvbnN0IGM9dC5jaGFyQ29kZUF0KG8rMSk7T3QoYyk/KG8rKyx1PUVuKGwsYykpOnU9NjU1MzN9ZWxzZXtpPWw7YnJlYWt9ZWxzZSBPdChsKSYmKHU9NjU1MzMpO2lmKHI9dGhpcy5fcHVzaChzLHIsdSksbysrLG88bilsPXQuY2hhckNvZGVBdChvKTtlbHNlIGJyZWFrfXRoaXMuX2J1ZmZMZW49cix0aGlzLl9sZWZ0b3ZlckhpZ2hTdXJyb2dhdGU9aX1fcHVzaCh0LG4scyl7cmV0dXJuIHM8MTI4P3RbbisrXT1zOnM8MjA0OD8odFtuKytdPTE5MnwocyYxOTg0KT4+PjYsdFtuKytdPTEyOHwocyY2Myk+Pj4wKTpzPDY1NTM2Pyh0W24rK109MjI0fChzJjYxNDQwKT4+PjEyLHRbbisrXT0xMjh8KHMmNDAzMik+Pj42LHRbbisrXT0xMjh8KHMmNjMpPj4+MCk6KHRbbisrXT0yNDB8KHMmMTgzNTAwOCk+Pj4xOCx0W24rK109MTI4fChzJjI1ODA0OCk+Pj4xMix0W24rK109MTI4fChzJjQwMzIpPj4+Nix0W24rK109MTI4fChzJjYzKT4+PjApLG4+PTY0JiYodGhpcy5fc3RlcCgpLG4tPTY0LHRoaXMuX3RvdGFsTGVuKz02NCx0WzBdPXRbNjRdLHRbMV09dFs2NV0sdFsyXT10WzY2XSksbn1kaWdlc3QoKXtyZXR1cm4gdGhpcy5fZmluaXNoZWR8fCh0aGlzLl9maW5pc2hlZD0hMCx0aGlzLl9sZWZ0b3ZlckhpZ2hTdXJyb2dhdGUmJih0aGlzLl9sZWZ0b3ZlckhpZ2hTdXJyb2dhdGU9MCx0aGlzLl9idWZmTGVuPXRoaXMuX3B1c2godGhpcy5fYnVmZix0aGlzLl9idWZmTGVuLDY1NTMzKSksdGhpcy5fdG90YWxMZW4rPXRoaXMuX2J1ZmZMZW4sdGhpcy5fd3JhcFVwKCkpLFplKHRoaXMuX2gwKStaZSh0aGlzLl9oMSkrWmUodGhpcy5faDIpK1plKHRoaXMuX2gzKStaZSh0aGlzLl9oNCl9X3dyYXBVcCgpe3RoaXMuX2J1ZmZbdGhpcy5fYnVmZkxlbisrXT0xMjgsUG4odGhpcy5fYnVmZix0aGlzLl9idWZmTGVuKSx0aGlzLl9idWZmTGVuPjU2JiYodGhpcy5fc3RlcCgpLFBuKHRoaXMuX2J1ZmYpKTtjb25zdCB0PTgqdGhpcy5fdG90YWxMZW47dGhpcy5fYnVmZkRWLnNldFVpbnQzMig1NixNYXRoLmZsb29yKHQvNDI5NDk2NzI5NiksITEpLHRoaXMuX2J1ZmZEVi5zZXRVaW50MzIoNjAsdCU0Mjk0OTY3Mjk2LCExKSx0aGlzLl9zdGVwKCl9X3N0ZXAoKXtjb25zdCB0PUV0Ll9iaWdCbG9jazMyLG49dGhpcy5fYnVmZkRWO2ZvcihsZXQgaD0wO2g8NjQ7aCs9NCl0LnNldFVpbnQzMihoLG4uZ2V0VWludDMyKGgsITEpLCExKTtmb3IobGV0IGg9NjQ7aDwzMjA7aCs9NCl0LnNldFVpbnQzMihoLGp0KHQuZ2V0VWludDMyKGgtMTIsITEpXnQuZ2V0VWludDMyKGgtMzIsITEpXnQuZ2V0VWludDMyKGgtNTYsITEpXnQuZ2V0VWludDMyKGgtNjQsITEpLDEpLCExKTtsZXQgcz10aGlzLl9oMCxyPXRoaXMuX2gxLGk9dGhpcy5faDIsbD10aGlzLl9oMyxvPXRoaXMuX2g0LHUsYyxmO2ZvcihsZXQgaD0wO2g8ODA7aCsrKWg8MjA/KHU9ciZpfH5yJmwsYz0xNTE4NTAwMjQ5KTpoPDQwPyh1PXJeaV5sLGM9MTg1OTc3NTM5Myk6aDw2MD8odT1yJml8ciZsfGkmbCxjPTI0MDA5NTk3MDgpOih1PXJeaV5sLGM9MzM5NTQ2OTc4MiksZj1qdChzLDUpK3UrbytjK3QuZ2V0VWludDMyKGgqNCwhMSkmNDI5NDk2NzI5NSxvPWwsbD1pLGk9anQociwzMCkscj1zLHM9Zjt0aGlzLl9oMD10aGlzLl9oMCtzJjQyOTQ5NjcyOTUsdGhpcy5faDE9dGhpcy5faDErciY0Mjk0OTY3Mjk1LHRoaXMuX2gyPXRoaXMuX2gyK2kmNDI5NDk2NzI5NSx0aGlzLl9oMz10aGlzLl9oMytsJjQyOTQ5NjcyOTUsdGhpcy5faDQ9dGhpcy5faDQrbyY0Mjk0OTY3Mjk1fX07RXQuX2JpZ0Jsb2NrMzI9bmV3IERhdGFWaWV3KG5ldyBBcnJheUJ1ZmZlcigzMjApKTtsZXQgVG49RXQ7Y2xhc3MgVm57Y29uc3RydWN0b3IodCl7dGhpcy5zb3VyY2U9dH1nZXRFbGVtZW50cygpe2NvbnN0IHQ9dGhpcy5zb3VyY2Usbj1uZXcgSW50MzJBcnJheSh0Lmxlbmd0aCk7Zm9yKGxldCBzPTAscj10Lmxlbmd0aDtzPHI7cysrKW5bc109dC5jaGFyQ29kZUF0KHMpO3JldHVybiBufX1mdW5jdGlvbiBwaShlLHQsbil7cmV0dXJuIG5ldyBfZShuZXcgVm4oZSksbmV3IFZuKHQpKS5Db21wdXRlRGlmZihuKS5jaGFuZ2VzfWNsYXNzIEZle3N0YXRpYyBBc3NlcnQodCxuKXtpZighdCl0aHJvdyBuZXcgRXJyb3Iobil9fWNsYXNzIERle3N0YXRpYyBDb3B5KHQsbixzLHIsaSl7Zm9yKGxldCBsPTA7bDxpO2wrKylzW3IrbF09dFtuK2xdfXN0YXRpYyBDb3B5Mih0LG4scyxyLGkpe2ZvcihsZXQgbD0wO2w8aTtsKyspc1tyK2xdPXRbbitsXX19Y2xhc3MgSW57Y29uc3RydWN0b3IoKXt0aGlzLm1fY2hhbmdlcz1bXSx0aGlzLm1fb3JpZ2luYWxTdGFydD0xMDczNzQxODI0LHRoaXMubV9tb2RpZmllZFN0YXJ0PTEwNzM3NDE4MjQsdGhpcy5tX29yaWdpbmFsQ291bnQ9MCx0aGlzLm1fbW9kaWZpZWRDb3VudD0wfU1hcmtOZXh0Q2hhbmdlKCl7KHRoaXMubV9vcmlnaW5hbENvdW50PjB8fHRoaXMubV9tb2RpZmllZENvdW50PjApJiZ0aGlzLm1fY2hhbmdlcy5wdXNoKG5ldyB4ZSh0aGlzLm1fb3JpZ2luYWxTdGFydCx0aGlzLm1fb3JpZ2luYWxDb3VudCx0aGlzLm1fbW9kaWZpZWRTdGFydCx0aGlzLm1fbW9kaWZpZWRDb3VudCkpLHRoaXMubV9vcmlnaW5hbENvdW50PTAsdGhpcy5tX21vZGlmaWVkQ291bnQ9MCx0aGlzLm1fb3JpZ2luYWxTdGFydD0xMDczNzQxODI0LHRoaXMubV9tb2RpZmllZFN0YXJ0PTEwNzM3NDE4MjR9QWRkT3JpZ2luYWxFbGVtZW50KHQsbil7dGhpcy5tX29yaWdpbmFsU3RhcnQ9TWF0aC5taW4odGhpcy5tX29yaWdpbmFsU3RhcnQsdCksdGhpcy5tX21vZGlmaWVkU3RhcnQ9TWF0aC5taW4odGhpcy5tX21vZGlmaWVkU3RhcnQsbiksdGhpcy5tX29yaWdpbmFsQ291bnQrK31BZGRNb2RpZmllZEVsZW1lbnQodCxuKXt0aGlzLm1fb3JpZ2luYWxTdGFydD1NYXRoLm1pbih0aGlzLm1fb3JpZ2luYWxTdGFydCx0KSx0aGlzLm1fbW9kaWZpZWRTdGFydD1NYXRoLm1pbih0aGlzLm1fbW9kaWZpZWRTdGFydCxuKSx0aGlzLm1fbW9kaWZpZWRDb3VudCsrfWdldENoYW5nZXMoKXtyZXR1cm4odGhpcy5tX29yaWdpbmFsQ291bnQ+MHx8dGhpcy5tX21vZGlmaWVkQ291bnQ+MCkmJnRoaXMuTWFya05leHRDaGFuZ2UoKSx0aGlzLm1fY2hhbmdlc31nZXRSZXZlcnNlQ2hhbmdlcygpe3JldHVybih0aGlzLm1fb3JpZ2luYWxDb3VudD4wfHx0aGlzLm1fbW9kaWZpZWRDb3VudD4wKSYmdGhpcy5NYXJrTmV4dENoYW5nZSgpLHRoaXMubV9jaGFuZ2VzLnJldmVyc2UoKSx0aGlzLm1fY2hhbmdlc319Y2xhc3MgX2V7Y29uc3RydWN0b3IodCxuLHM9bnVsbCl7dGhpcy5Db250aW51ZVByb2Nlc3NpbmdQcmVkaWNhdGU9cyx0aGlzLl9vcmlnaW5hbFNlcXVlbmNlPXQsdGhpcy5fbW9kaWZpZWRTZXF1ZW5jZT1uO2NvbnN0W3IsaSxsXT1fZS5fZ2V0RWxlbWVudHModCksW28sdSxjXT1fZS5fZ2V0RWxlbWVudHMobik7dGhpcy5faGFzU3RyaW5ncz1sJiZjLHRoaXMuX29yaWdpbmFsU3RyaW5nRWxlbWVudHM9cix0aGlzLl9vcmlnaW5hbEVsZW1lbnRzT3JIYXNoPWksdGhpcy5fbW9kaWZpZWRTdHJpbmdFbGVtZW50cz1vLHRoaXMuX21vZGlmaWVkRWxlbWVudHNPckhhc2g9dSx0aGlzLm1fZm9yd2FyZEhpc3Rvcnk9W10sdGhpcy5tX3JldmVyc2VIaXN0b3J5PVtdfXN0YXRpYyBfaXNTdHJpbmdBcnJheSh0KXtyZXR1cm4gdC5sZW5ndGg+MCYmdHlwZW9mIHRbMF09PSJzdHJpbmcifXN0YXRpYyBfZ2V0RWxlbWVudHModCl7Y29uc3Qgbj10LmdldEVsZW1lbnRzKCk7aWYoX2UuX2lzU3RyaW5nQXJyYXkobikpe2NvbnN0IHM9bmV3IEludDMyQXJyYXkobi5sZW5ndGgpO2ZvcihsZXQgcj0wLGk9bi5sZW5ndGg7cjxpO3IrKylzW3JdPXhpKG5bcl0sMCk7cmV0dXJuW24scywhMF19cmV0dXJuIG4gaW5zdGFuY2VvZiBJbnQzMkFycmF5P1tbXSxuLCExXTpbW10sbmV3IEludDMyQXJyYXkobiksITFdfUVsZW1lbnRzQXJlRXF1YWwodCxuKXtyZXR1cm4gdGhpcy5fb3JpZ2luYWxFbGVtZW50c09ySGFzaFt0XSE9PXRoaXMuX21vZGlmaWVkRWxlbWVudHNPckhhc2hbbl0/ITE6dGhpcy5faGFzU3RyaW5ncz90aGlzLl9vcmlnaW5hbFN0cmluZ0VsZW1lbnRzW3RdPT09dGhpcy5fbW9kaWZpZWRTdHJpbmdFbGVtZW50c1tuXTohMH1FbGVtZW50c0FyZVN0cmljdEVxdWFsKHQsbil7aWYoIXRoaXMuRWxlbWVudHNBcmVFcXVhbCh0LG4pKXJldHVybiExO2NvbnN0IHM9X2UuX2dldFN0cmljdEVsZW1lbnQodGhpcy5fb3JpZ2luYWxTZXF1ZW5jZSx0KSxyPV9lLl9nZXRTdHJpY3RFbGVtZW50KHRoaXMuX21vZGlmaWVkU2VxdWVuY2Usbik7cmV0dXJuIHM9PT1yfXN0YXRpYyBfZ2V0U3RyaWN0RWxlbWVudCh0LG4pe3JldHVybiB0eXBlb2YgdC5nZXRTdHJpY3RFbGVtZW50PT0iZnVuY3Rpb24iP3QuZ2V0U3RyaWN0RWxlbWVudChuKTpudWxsfU9yaWdpbmFsRWxlbWVudHNBcmVFcXVhbCh0LG4pe3JldHVybiB0aGlzLl9vcmlnaW5hbEVsZW1lbnRzT3JIYXNoW3RdIT09dGhpcy5fb3JpZ2luYWxFbGVtZW50c09ySGFzaFtuXT8hMTp0aGlzLl9oYXNTdHJpbmdzP3RoaXMuX29yaWdpbmFsU3RyaW5nRWxlbWVudHNbdF09PT10aGlzLl9vcmlnaW5hbFN0cmluZ0VsZW1lbnRzW25dOiEwfU1vZGlmaWVkRWxlbWVudHNBcmVFcXVhbCh0LG4pe3JldHVybiB0aGlzLl9tb2RpZmllZEVsZW1lbnRzT3JIYXNoW3RdIT09dGhpcy5fbW9kaWZpZWRFbGVtZW50c09ySGFzaFtuXT8hMTp0aGlzLl9oYXNTdHJpbmdzP3RoaXMuX21vZGlmaWVkU3RyaW5nRWxlbWVudHNbdF09PT10aGlzLl9tb2RpZmllZFN0cmluZ0VsZW1lbnRzW25dOiEwfUNvbXB1dGVEaWZmKHQpe3JldHVybiB0aGlzLl9Db21wdXRlRGlmZigwLHRoaXMuX29yaWdpbmFsRWxlbWVudHNPckhhc2gubGVuZ3RoLTEsMCx0aGlzLl9tb2RpZmllZEVsZW1lbnRzT3JIYXNoLmxlbmd0aC0xLHQpfV9Db21wdXRlRGlmZih0LG4scyxyLGkpe2NvbnN0IGw9WyExXTtsZXQgbz10aGlzLkNvbXB1dGVEaWZmUmVjdXJzaXZlKHQsbixzLHIsbCk7cmV0dXJuIGkmJihvPXRoaXMuUHJldHRpZnlDaGFuZ2VzKG8pKSx7cXVpdEVhcmx5OmxbMF0sY2hhbmdlczpvfX1Db21wdXRlRGlmZlJlY3Vyc2l2ZSh0LG4scyxyLGkpe2ZvcihpWzBdPSExO3Q8PW4mJnM8PXImJnRoaXMuRWxlbWVudHNBcmVFcXVhbCh0LHMpOyl0KysscysrO2Zvcig7bj49dCYmcj49cyYmdGhpcy5FbGVtZW50c0FyZUVxdWFsKG4scik7KW4tLSxyLS07aWYodD5ufHxzPnIpe2xldCBoO3JldHVybiBzPD1yPyhGZS5Bc3NlcnQodD09PW4rMSwib3JpZ2luYWxTdGFydCBzaG91bGQgb25seSBiZSBvbmUgbW9yZSB0aGFuIG9yaWdpbmFsRW5kIiksaD1bbmV3IHhlKHQsMCxzLHItcysxKV0pOnQ8PW4/KEZlLkFzc2VydChzPT09cisxLCJtb2RpZmllZFN0YXJ0IHNob3VsZCBvbmx5IGJlIG9uZSBtb3JlIHRoYW4gbW9kaWZpZWRFbmQiKSxoPVtuZXcgeGUodCxuLXQrMSxzLDApXSk6KEZlLkFzc2VydCh0PT09bisxLCJvcmlnaW5hbFN0YXJ0IHNob3VsZCBvbmx5IGJlIG9uZSBtb3JlIHRoYW4gb3JpZ2luYWxFbmQiKSxGZS5Bc3NlcnQocz09PXIrMSwibW9kaWZpZWRTdGFydCBzaG91bGQgb25seSBiZSBvbmUgbW9yZSB0aGFuIG1vZGlmaWVkRW5kIiksaD1bXSksaH1jb25zdCBsPVswXSxvPVswXSx1PXRoaXMuQ29tcHV0ZVJlY3Vyc2lvblBvaW50KHQsbixzLHIsbCxvLGkpLGM9bFswXSxmPW9bMF07aWYodSE9PW51bGwpcmV0dXJuIHU7aWYoIWlbMF0pe2NvbnN0IGg9dGhpcy5Db21wdXRlRGlmZlJlY3Vyc2l2ZSh0LGMscyxmLGkpO2xldCBkPVtdO3JldHVybiBpWzBdP2Q9W25ldyB4ZShjKzEsbi0oYysxKSsxLGYrMSxyLShmKzEpKzEpXTpkPXRoaXMuQ29tcHV0ZURpZmZSZWN1cnNpdmUoYysxLG4sZisxLHIsaSksdGhpcy5Db25jYXRlbmF0ZUNoYW5nZXMoaCxkKX1yZXR1cm5bbmV3IHhlKHQsbi10KzEscyxyLXMrMSldfVdBTEtUUkFDRSh0LG4scyxyLGksbCxvLHUsYyxmLGgsZCxtLGcsYix3LE4sQyl7bGV0IFM9bnVsbCxwPW51bGwseD1uZXcgSW4sdj1uLEE9cyx5PW1bMF0td1swXS1yLEk9LTEwNzM3NDE4MjQsWD10aGlzLm1fZm9yd2FyZEhpc3RvcnkubGVuZ3RoLTE7ZG97Y29uc3QgQj15K3Q7Qj09PXZ8fEI8QSYmY1tCLTFdPGNbQisxXT8oaD1jW0IrMV0sZz1oLXktcixoPEkmJnguTWFya05leHRDaGFuZ2UoKSxJPWgseC5BZGRNb2RpZmllZEVsZW1lbnQoaCsxLGcpLHk9QisxLXQpOihoPWNbQi0xXSsxLGc9aC15LXIsaDxJJiZ4Lk1hcmtOZXh0Q2hhbmdlKCksST1oLTEseC5BZGRPcmlnaW5hbEVsZW1lbnQoaCxnKzEpLHk9Qi0xLXQpLFg+PTAmJihjPXRoaXMubV9mb3J3YXJkSGlzdG9yeVtYXSx0PWNbMF0sdj0xLEE9Yy5sZW5ndGgtMSl9d2hpbGUoLS1YPj0tMSk7aWYoUz14LmdldFJldmVyc2VDaGFuZ2VzKCksQ1swXSl7bGV0IEI9bVswXSsxLF89d1swXSsxO2lmKFMhPT1udWxsJiZTLmxlbmd0aD4wKXtjb25zdCBMPVNbUy5sZW5ndGgtMV07Qj1NYXRoLm1heChCLEwuZ2V0T3JpZ2luYWxFbmQoKSksXz1NYXRoLm1heChfLEwuZ2V0TW9kaWZpZWRFbmQoKSl9cD1bbmV3IHhlKEIsZC1CKzEsXyxiLV8rMSldfWVsc2V7eD1uZXcgSW4sdj1sLEE9byx5PW1bMF0td1swXS11LEk9MTA3Mzc0MTgyNCxYPU4/dGhpcy5tX3JldmVyc2VIaXN0b3J5Lmxlbmd0aC0xOnRoaXMubV9yZXZlcnNlSGlzdG9yeS5sZW5ndGgtMjtkb3tjb25zdCBCPXkraTtCPT09dnx8QjxBJiZmW0ItMV0+PWZbQisxXT8oaD1mW0IrMV0tMSxnPWgteS11LGg+SSYmeC5NYXJrTmV4dENoYW5nZSgpLEk9aCsxLHguQWRkT3JpZ2luYWxFbGVtZW50KGgrMSxnKzEpLHk9QisxLWkpOihoPWZbQi0xXSxnPWgteS11LGg+SSYmeC5NYXJrTmV4dENoYW5nZSgpLEk9aCx4LkFkZE1vZGlmaWVkRWxlbWVudChoKzEsZysxKSx5PUItMS1pKSxYPj0wJiYoZj10aGlzLm1fcmV2ZXJzZUhpc3RvcnlbWF0saT1mWzBdLHY9MSxBPWYubGVuZ3RoLTEpfXdoaWxlKC0tWD49LTEpO3A9eC5nZXRDaGFuZ2VzKCl9cmV0dXJuIHRoaXMuQ29uY2F0ZW5hdGVDaGFuZ2VzKFMscCl9Q29tcHV0ZVJlY3Vyc2lvblBvaW50KHQsbixzLHIsaSxsLG8pe2xldCB1PTAsYz0wLGY9MCxoPTAsZD0wLG09MDt0LS0scy0tLGlbMF09MCxsWzBdPTAsdGhpcy5tX2ZvcndhcmRIaXN0b3J5PVtdLHRoaXMubV9yZXZlcnNlSGlzdG9yeT1bXTtjb25zdCBnPW4tdCsoci1zKSxiPWcrMSx3PW5ldyBJbnQzMkFycmF5KGIpLE49bmV3IEludDMyQXJyYXkoYiksQz1yLXMsUz1uLXQscD10LXMseD1uLXIsQT0oUy1DKSUyPT09MDt3W0NdPXQsTltTXT1uLG9bMF09ITE7Zm9yKGxldCB5PTE7eTw9Zy8yKzE7eSsrKXtsZXQgST0wLFg9MDtmPXRoaXMuQ2xpcERpYWdvbmFsQm91bmQoQy15LHksQyxiKSxoPXRoaXMuQ2xpcERpYWdvbmFsQm91bmQoQyt5LHksQyxiKTtmb3IobGV0IF89ZjtfPD1oO18rPTIpe189PT1mfHxfPGgmJndbXy0xXTx3W18rMV0/dT13W18rMV06dT13W18tMV0rMSxjPXUtKF8tQyktcDtjb25zdCBMPXU7Zm9yKDt1PG4mJmM8ciYmdGhpcy5FbGVtZW50c0FyZUVxdWFsKHUrMSxjKzEpOyl1KyssYysrO2lmKHdbX109dSx1K2M+SStYJiYoST11LFg9YyksIUEmJk1hdGguYWJzKF8tUyk8PXktMSYmdT49TltfXSlyZXR1cm4gaVswXT11LGxbMF09YyxMPD1OW19dJiZ5PD0xNDQ4P3RoaXMuV0FMS1RSQUNFKEMsZixoLHAsUyxkLG0seCx3LE4sdSxuLGksYyxyLGwsQSxvKTpudWxsfWNvbnN0IEI9KEktdCsoWC1zKS15KS8yO2lmKHRoaXMuQ29udGludWVQcm9jZXNzaW5nUHJlZGljYXRlIT09bnVsbCYmIXRoaXMuQ29udGludWVQcm9jZXNzaW5nUHJlZGljYXRlKEksQikpcmV0dXJuIG9bMF09ITAsaVswXT1JLGxbMF09WCxCPjAmJnk8PTE0NDg/dGhpcy5XQUxLVFJBQ0UoQyxmLGgscCxTLGQsbSx4LHcsTix1LG4saSxjLHIsbCxBLG8pOih0KysscysrLFtuZXcgeGUodCxuLXQrMSxzLHItcysxKV0pO2Q9dGhpcy5DbGlwRGlhZ29uYWxCb3VuZChTLXkseSxTLGIpLG09dGhpcy5DbGlwRGlhZ29uYWxCb3VuZChTK3kseSxTLGIpO2ZvcihsZXQgXz1kO188PW07Xys9Mil7Xz09PWR8fF88bSYmTltfLTFdPj1OW18rMV0/dT1OW18rMV0tMTp1PU5bXy0xXSxjPXUtKF8tUykteDtjb25zdCBMPXU7Zm9yKDt1PnQmJmM+cyYmdGhpcy5FbGVtZW50c0FyZUVxdWFsKHUsYyk7KXUtLSxjLS07aWYoTltfXT11LEEmJk1hdGguYWJzKF8tQyk8PXkmJnU8PXdbX10pcmV0dXJuIGlbMF09dSxsWzBdPWMsTD49d1tfXSYmeTw9MTQ0OD90aGlzLldBTEtUUkFDRShDLGYsaCxwLFMsZCxtLHgsdyxOLHUsbixpLGMscixsLEEsbyk6bnVsbH1pZih5PD0xNDQ3KXtsZXQgXz1uZXcgSW50MzJBcnJheShoLWYrMik7X1swXT1DLWYrMSxEZS5Db3B5Mih3LGYsXywxLGgtZisxKSx0aGlzLm1fZm9yd2FyZEhpc3RvcnkucHVzaChfKSxfPW5ldyBJbnQzMkFycmF5KG0tZCsyKSxfWzBdPVMtZCsxLERlLkNvcHkyKE4sZCxfLDEsbS1kKzEpLHRoaXMubV9yZXZlcnNlSGlzdG9yeS5wdXNoKF8pfX1yZXR1cm4gdGhpcy5XQUxLVFJBQ0UoQyxmLGgscCxTLGQsbSx4LHcsTix1LG4saSxjLHIsbCxBLG8pfVByZXR0aWZ5Q2hhbmdlcyh0KXtmb3IobGV0IG49MDtuPHQubGVuZ3RoO24rKyl7Y29uc3Qgcz10W25dLHI9bjx0Lmxlbmd0aC0xP3RbbisxXS5vcmlnaW5hbFN0YXJ0OnRoaXMuX29yaWdpbmFsRWxlbWVudHNPckhhc2gubGVuZ3RoLGk9bjx0Lmxlbmd0aC0xP3RbbisxXS5tb2RpZmllZFN0YXJ0OnRoaXMuX21vZGlmaWVkRWxlbWVudHNPckhhc2gubGVuZ3RoLGw9cy5vcmlnaW5hbExlbmd0aD4wLG89cy5tb2RpZmllZExlbmd0aD4wO2Zvcig7cy5vcmlnaW5hbFN0YXJ0K3Mub3JpZ2luYWxMZW5ndGg8ciYmcy5tb2RpZmllZFN0YXJ0K3MubW9kaWZpZWRMZW5ndGg8aSYmKCFsfHx0aGlzLk9yaWdpbmFsRWxlbWVudHNBcmVFcXVhbChzLm9yaWdpbmFsU3RhcnQscy5vcmlnaW5hbFN0YXJ0K3Mub3JpZ2luYWxMZW5ndGgpKSYmKCFvfHx0aGlzLk1vZGlmaWVkRWxlbWVudHNBcmVFcXVhbChzLm1vZGlmaWVkU3RhcnQscy5tb2RpZmllZFN0YXJ0K3MubW9kaWZpZWRMZW5ndGgpKTspe2NvbnN0IGM9dGhpcy5FbGVtZW50c0FyZVN0cmljdEVxdWFsKHMub3JpZ2luYWxTdGFydCxzLm1vZGlmaWVkU3RhcnQpO2lmKHRoaXMuRWxlbWVudHNBcmVTdHJpY3RFcXVhbChzLm9yaWdpbmFsU3RhcnQrcy5vcmlnaW5hbExlbmd0aCxzLm1vZGlmaWVkU3RhcnQrcy5tb2RpZmllZExlbmd0aCkmJiFjKWJyZWFrO3Mub3JpZ2luYWxTdGFydCsrLHMubW9kaWZpZWRTdGFydCsrfWNvbnN0IHU9W251bGxdO2lmKG48dC5sZW5ndGgtMSYmdGhpcy5DaGFuZ2VzT3ZlcmxhcCh0W25dLHRbbisxXSx1KSl7dFtuXT11WzBdLHQuc3BsaWNlKG4rMSwxKSxuLS07Y29udGludWV9fWZvcihsZXQgbj10Lmxlbmd0aC0xO24+PTA7bi0tKXtjb25zdCBzPXRbbl07bGV0IHI9MCxpPTA7aWYobj4wKXtjb25zdCBoPXRbbi0xXTtyPWgub3JpZ2luYWxTdGFydCtoLm9yaWdpbmFsTGVuZ3RoLGk9aC5tb2RpZmllZFN0YXJ0K2gubW9kaWZpZWRMZW5ndGh9Y29uc3QgbD1zLm9yaWdpbmFsTGVuZ3RoPjAsbz1zLm1vZGlmaWVkTGVuZ3RoPjA7bGV0IHU9MCxjPXRoaXMuX2JvdW5kYXJ5U2NvcmUocy5vcmlnaW5hbFN0YXJ0LHMub3JpZ2luYWxMZW5ndGgscy5tb2RpZmllZFN0YXJ0LHMubW9kaWZpZWRMZW5ndGgpO2ZvcihsZXQgaD0xOztoKyspe2NvbnN0IGQ9cy5vcmlnaW5hbFN0YXJ0LWgsbT1zLm1vZGlmaWVkU3RhcnQtaDtpZihkPHJ8fG08aXx8bCYmIXRoaXMuT3JpZ2luYWxFbGVtZW50c0FyZUVxdWFsKGQsZCtzLm9yaWdpbmFsTGVuZ3RoKXx8byYmIXRoaXMuTW9kaWZpZWRFbGVtZW50c0FyZUVxdWFsKG0sbStzLm1vZGlmaWVkTGVuZ3RoKSlicmVhaztjb25zdCBiPShkPT09ciYmbT09PWk/NTowKSt0aGlzLl9ib3VuZGFyeVNjb3JlKGQscy5vcmlnaW5hbExlbmd0aCxtLHMubW9kaWZpZWRMZW5ndGgpO2I+YyYmKGM9Yix1PWgpfXMub3JpZ2luYWxTdGFydC09dSxzLm1vZGlmaWVkU3RhcnQtPXU7Y29uc3QgZj1bbnVsbF07aWYobj4wJiZ0aGlzLkNoYW5nZXNPdmVybGFwKHRbbi0xXSx0W25dLGYpKXt0W24tMV09ZlswXSx0LnNwbGljZShuLDEpLG4rKztjb250aW51ZX19aWYodGhpcy5faGFzU3RyaW5ncylmb3IobGV0IG49MSxzPXQubGVuZ3RoO248cztuKyspe2NvbnN0IHI9dFtuLTFdLGk9dFtuXSxsPWkub3JpZ2luYWxTdGFydC1yLm9yaWdpbmFsU3RhcnQtci5vcmlnaW5hbExlbmd0aCxvPXIub3JpZ2luYWxTdGFydCx1PWkub3JpZ2luYWxTdGFydCtpLm9yaWdpbmFsTGVuZ3RoLGM9dS1vLGY9ci5tb2RpZmllZFN0YXJ0LGg9aS5tb2RpZmllZFN0YXJ0K2kubW9kaWZpZWRMZW5ndGgsZD1oLWY7aWYobDw1JiZjPDIwJiZkPDIwKXtjb25zdCBtPXRoaXMuX2ZpbmRCZXR0ZXJDb250aWd1b3VzU2VxdWVuY2UobyxjLGYsZCxsKTtpZihtKXtjb25zdFtnLGJdPW07KGchPT1yLm9yaWdpbmFsU3RhcnQrci5vcmlnaW5hbExlbmd0aHx8YiE9PXIubW9kaWZpZWRTdGFydCtyLm1vZGlmaWVkTGVuZ3RoKSYmKHIub3JpZ2luYWxMZW5ndGg9Zy1yLm9yaWdpbmFsU3RhcnQsci5tb2RpZmllZExlbmd0aD1iLXIubW9kaWZpZWRTdGFydCxpLm9yaWdpbmFsU3RhcnQ9ZytsLGkubW9kaWZpZWRTdGFydD1iK2wsaS5vcmlnaW5hbExlbmd0aD11LWkub3JpZ2luYWxTdGFydCxpLm1vZGlmaWVkTGVuZ3RoPWgtaS5tb2RpZmllZFN0YXJ0KX19fXJldHVybiB0fV9maW5kQmV0dGVyQ29udGlndW91c1NlcXVlbmNlKHQsbixzLHIsaSl7aWYobjxpfHxyPGkpcmV0dXJuIG51bGw7Y29uc3QgbD10K24taSsxLG89cytyLWkrMTtsZXQgdT0wLGM9MCxmPTA7Zm9yKGxldCBoPXQ7aDxsO2grKylmb3IobGV0IGQ9cztkPG87ZCsrKXtjb25zdCBtPXRoaXMuX2NvbnRpZ3VvdXNTZXF1ZW5jZVNjb3JlKGgsZCxpKTttPjAmJm0+dSYmKHU9bSxjPWgsZj1kKX1yZXR1cm4gdT4wP1tjLGZdOm51bGx9X2NvbnRpZ3VvdXNTZXF1ZW5jZVNjb3JlKHQsbixzKXtsZXQgcj0wO2ZvcihsZXQgaT0wO2k8cztpKyspe2lmKCF0aGlzLkVsZW1lbnRzQXJlRXF1YWwodCtpLG4raSkpcmV0dXJuIDA7cis9dGhpcy5fb3JpZ2luYWxTdHJpbmdFbGVtZW50c1t0K2ldLmxlbmd0aH1yZXR1cm4gcn1fT3JpZ2luYWxJc0JvdW5kYXJ5KHQpe3JldHVybiB0PD0wfHx0Pj10aGlzLl9vcmlnaW5hbEVsZW1lbnRzT3JIYXNoLmxlbmd0aC0xPyEwOnRoaXMuX2hhc1N0cmluZ3MmJi9eXHMqJC8udGVzdCh0aGlzLl9vcmlnaW5hbFN0cmluZ0VsZW1lbnRzW3RdKX1fT3JpZ2luYWxSZWdpb25Jc0JvdW5kYXJ5KHQsbil7aWYodGhpcy5fT3JpZ2luYWxJc0JvdW5kYXJ5KHQpfHx0aGlzLl9PcmlnaW5hbElzQm91bmRhcnkodC0xKSlyZXR1cm4hMDtpZihuPjApe2NvbnN0IHM9dCtuO2lmKHRoaXMuX09yaWdpbmFsSXNCb3VuZGFyeShzLTEpfHx0aGlzLl9PcmlnaW5hbElzQm91bmRhcnkocykpcmV0dXJuITB9cmV0dXJuITF9X01vZGlmaWVkSXNCb3VuZGFyeSh0KXtyZXR1cm4gdDw9MHx8dD49dGhpcy5fbW9kaWZpZWRFbGVtZW50c09ySGFzaC5sZW5ndGgtMT8hMDp0aGlzLl9oYXNTdHJpbmdzJiYvXlxzKiQvLnRlc3QodGhpcy5fbW9kaWZpZWRTdHJpbmdFbGVtZW50c1t0XSl9X01vZGlmaWVkUmVnaW9uSXNCb3VuZGFyeSh0LG4pe2lmKHRoaXMuX01vZGlmaWVkSXNCb3VuZGFyeSh0KXx8dGhpcy5fTW9kaWZpZWRJc0JvdW5kYXJ5KHQtMSkpcmV0dXJuITA7aWYobj4wKXtjb25zdCBzPXQrbjtpZih0aGlzLl9Nb2RpZmllZElzQm91bmRhcnkocy0xKXx8dGhpcy5fTW9kaWZpZWRJc0JvdW5kYXJ5KHMpKXJldHVybiEwfXJldHVybiExfV9ib3VuZGFyeVNjb3JlKHQsbixzLHIpe2NvbnN0IGk9dGhpcy5fT3JpZ2luYWxSZWdpb25Jc0JvdW5kYXJ5KHQsbik/MTowLGw9dGhpcy5fTW9kaWZpZWRSZWdpb25Jc0JvdW5kYXJ5KHMscik/MTowO3JldHVybiBpK2x9Q29uY2F0ZW5hdGVDaGFuZ2VzKHQsbil7Y29uc3Qgcz1bXTtpZih0Lmxlbmd0aD09PTB8fG4ubGVuZ3RoPT09MClyZXR1cm4gbi5sZW5ndGg+MD9uOnQ7aWYodGhpcy5DaGFuZ2VzT3ZlcmxhcCh0W3QubGVuZ3RoLTFdLG5bMF0scykpe2NvbnN0IHI9bmV3IEFycmF5KHQubGVuZ3RoK24ubGVuZ3RoLTEpO3JldHVybiBEZS5Db3B5KHQsMCxyLDAsdC5sZW5ndGgtMSksclt0Lmxlbmd0aC0xXT1zWzBdLERlLkNvcHkobiwxLHIsdC5sZW5ndGgsbi5sZW5ndGgtMSkscn1lbHNle2NvbnN0IHI9bmV3IEFycmF5KHQubGVuZ3RoK24ubGVuZ3RoKTtyZXR1cm4gRGUuQ29weSh0LDAsciwwLHQubGVuZ3RoKSxEZS5Db3B5KG4sMCxyLHQubGVuZ3RoLG4ubGVuZ3RoKSxyfX1DaGFuZ2VzT3ZlcmxhcCh0LG4scyl7aWYoRmUuQXNzZXJ0KHQub3JpZ2luYWxTdGFydDw9bi5vcmlnaW5hbFN0YXJ0LCJMZWZ0IGNoYW5nZSBpcyBub3QgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIHJpZ2h0IGNoYW5nZSIpLEZlLkFzc2VydCh0Lm1vZGlmaWVkU3RhcnQ8PW4ubW9kaWZpZWRTdGFydCwiTGVmdCBjaGFuZ2UgaXMgbm90IGxlc3MgdGhhbiBvciBlcXVhbCB0byByaWdodCBjaGFuZ2UiKSx0Lm9yaWdpbmFsU3RhcnQrdC5vcmlnaW5hbExlbmd0aD49bi5vcmlnaW5hbFN0YXJ0fHx0Lm1vZGlmaWVkU3RhcnQrdC5tb2RpZmllZExlbmd0aD49bi5tb2RpZmllZFN0YXJ0KXtjb25zdCByPXQub3JpZ2luYWxTdGFydDtsZXQgaT10Lm9yaWdpbmFsTGVuZ3RoO2NvbnN0IGw9dC5tb2RpZmllZFN0YXJ0O2xldCBvPXQubW9kaWZpZWRMZW5ndGg7cmV0dXJuIHQub3JpZ2luYWxTdGFydCt0Lm9yaWdpbmFsTGVuZ3RoPj1uLm9yaWdpbmFsU3RhcnQmJihpPW4ub3JpZ2luYWxTdGFydCtuLm9yaWdpbmFsTGVuZ3RoLXQub3JpZ2luYWxTdGFydCksdC5tb2RpZmllZFN0YXJ0K3QubW9kaWZpZWRMZW5ndGg+PW4ubW9kaWZpZWRTdGFydCYmKG89bi5tb2RpZmllZFN0YXJ0K24ubW9kaWZpZWRMZW5ndGgtdC5tb2RpZmllZFN0YXJ0KSxzWzBdPW5ldyB4ZShyLGksbCxvKSwhMH1lbHNlIHJldHVybiBzWzBdPW51bGwsITF9Q2xpcERpYWdvbmFsQm91bmQodCxuLHMscil7aWYodD49MCYmdDxyKXJldHVybiB0O2NvbnN0IGk9cyxsPXItcy0xLG89biUyPT09MDtpZih0PDApe2NvbnN0IHU9aSUyPT09MDtyZXR1cm4gbz09PXU/MDoxfWVsc2V7Y29uc3QgdT1sJTI9PT0wO3JldHVybiBvPT09dT9yLTE6ci0yfX19dmFyIEJuPXtFTlZfVFlQRToibG9jYWwiLE5PREVfRU5WOiJwcm9kdWN0aW9uIn07bGV0IFBlO2NvbnN0IFh0PWdsb2JhbFRoaXMudnNjb2RlO2lmKHR5cGVvZiBYdDwidSImJnR5cGVvZiBYdC5wcm9jZXNzPCJ1Iil7Y29uc3QgZT1YdC5wcm9jZXNzO1BlPXtnZXQgcGxhdGZvcm0oKXtyZXR1cm4gZS5wbGF0Zm9ybX0sZ2V0IGFyY2goKXtyZXR1cm4gZS5hcmNofSxnZXQgZW52KCl7cmV0dXJuIGUuZW52fSxjd2QoKXtyZXR1cm4gZS5jd2QoKX19fWVsc2UgdHlwZW9mIHByb2Nlc3M8InUiP1BlPXtnZXQgcGxhdGZvcm0oKXtyZXR1cm4gcHJvY2Vzcy5wbGF0Zm9ybX0sZ2V0IGFyY2goKXtyZXR1cm4gcHJvY2Vzcy5hcmNofSxnZXQgZW52KCl7cmV0dXJuIEJufSxjd2QoKXtyZXR1cm4gQm4uVlNDT0RFX0NXRHx8cHJvY2Vzcy5jd2QoKX19OlBlPXtnZXQgcGxhdGZvcm0oKXtyZXR1cm4gUWU/IndpbjMyIjpZcj8iZGFyd2luIjoibGludXgifSxnZXQgYXJjaCgpe30sZ2V0IGVudigpe3JldHVybnt9fSxjd2QoKXtyZXR1cm4iLyJ9fTtjb25zdCBkdD1QZS5jd2Qsd2k9UGUuZW52LExpPVBlLnBsYXRmb3JtLE5pPTY1LHZpPTk3LFNpPTkwLENpPTEyMixwZT00NixRPTQ3LEs9OTIsd2U9NTgsQWk9NjM7Y2xhc3MgcW4gZXh0ZW5kcyBFcnJvcntjb25zdHJ1Y3Rvcih0LG4scyl7bGV0IHI7dHlwZW9mIG49PSJzdHJpbmciJiZuLmluZGV4T2YoIm5vdCAiKT09PTA/KHI9Im11c3Qgbm90IGJlIixuPW4ucmVwbGFjZSgvXm5vdCAvLCIiKSk6cj0ibXVzdCBiZSI7Y29uc3QgaT10LmluZGV4T2YoIi4iKSE9PS0xPyJwcm9wZXJ0eSI6ImFyZ3VtZW50IjtsZXQgbD1gVGhlICIke3R9IiAke2l9ICR7cn0gb2YgdHlwZSAke259YDtsKz1gLiBSZWNlaXZlZCB0eXBlICR7dHlwZW9mIHN9YCxzdXBlcihsKSx0aGlzLmNvZGU9IkVSUl9JTlZBTElEX0FSR19UWVBFIn19ZnVuY3Rpb24gUmkoZSx0KXtpZihlPT09bnVsbHx8dHlwZW9mIGUhPSJvYmplY3QiKXRocm93IG5ldyBxbih0LCJPYmplY3QiLGUpfWZ1bmN0aW9uIE8oZSx0KXtpZih0eXBlb2YgZSE9InN0cmluZyIpdGhyb3cgbmV3IHFuKHQsInN0cmluZyIsZSl9Y29uc3QgTGU9TGk9PT0id2luMzIiO2Z1bmN0aW9uIFAoZSl7cmV0dXJuIGU9PT1RfHxlPT09S31mdW5jdGlvbiBRdChlKXtyZXR1cm4gZT09PVF9ZnVuY3Rpb24gTmUoZSl7cmV0dXJuIGU+PU5pJiZlPD1TaXx8ZT49dmkmJmU8PUNpfWZ1bmN0aW9uIG10KGUsdCxuLHMpe2xldCByPSIiLGk9MCxsPS0xLG89MCx1PTA7Zm9yKGxldCBjPTA7Yzw9ZS5sZW5ndGg7KytjKXtpZihjPGUubGVuZ3RoKXU9ZS5jaGFyQ29kZUF0KGMpO2Vsc2V7aWYocyh1KSlicmVhazt1PVF9aWYocyh1KSl7aWYoIShsPT09Yy0xfHxvPT09MSkpaWYobz09PTIpe2lmKHIubGVuZ3RoPDJ8fGkhPT0yfHxyLmNoYXJDb2RlQXQoci5sZW5ndGgtMSkhPT1wZXx8ci5jaGFyQ29kZUF0KHIubGVuZ3RoLTIpIT09cGUpe2lmKHIubGVuZ3RoPjIpe2NvbnN0IGY9ci5sYXN0SW5kZXhPZihuKTtmPT09LTE/KHI9IiIsaT0wKToocj1yLnNsaWNlKDAsZiksaT1yLmxlbmd0aC0xLXIubGFzdEluZGV4T2YobikpLGw9YyxvPTA7Y29udGludWV9ZWxzZSBpZihyLmxlbmd0aCE9PTApe3I9IiIsaT0wLGw9YyxvPTA7Y29udGludWV9fXQmJihyKz1yLmxlbmd0aD4wP2Ake259Li5gOiIuLiIsaT0yKX1lbHNlIHIubGVuZ3RoPjA/cis9YCR7bn0ke2Uuc2xpY2UobCsxLGMpfWA6cj1lLnNsaWNlKGwrMSxjKSxpPWMtbC0xO2w9YyxvPTB9ZWxzZSB1PT09cGUmJm8hPT0tMT8rK286bz0tMX1yZXR1cm4gcn1mdW5jdGlvbiB5aShlKXtyZXR1cm4gZT9gJHtlWzBdPT09Ii4iPyIiOiIuIn0ke2V9YDoiIn1mdW5jdGlvbiBVbihlLHQpe1JpKHQsInBhdGhPYmplY3QiKTtjb25zdCBuPXQuZGlyfHx0LnJvb3Qscz10LmJhc2V8fGAke3QubmFtZXx8IiJ9JHt5aSh0LmV4dCl9YDtyZXR1cm4gbj9uPT09dC5yb290P2Ake259JHtzfWA6YCR7bn0ke2V9JHtzfWA6c31jb25zdCBaPXtyZXNvbHZlKC4uLmUpe2xldCB0PSIiLG49IiIscz0hMTtmb3IobGV0IHI9ZS5sZW5ndGgtMTtyPj0tMTtyLS0pe2xldCBpO2lmKHI+PTApe2lmKGk9ZVtyXSxPKGksYHBhdGhzWyR7cn1dYCksaS5sZW5ndGg9PT0wKWNvbnRpbnVlfWVsc2UgdC5sZW5ndGg9PT0wP2k9ZHQoKTooaT13aVtgPSR7dH1gXXx8ZHQoKSwoaT09PXZvaWQgMHx8aS5zbGljZSgwLDIpLnRvTG93ZXJDYXNlKCkhPT10LnRvTG93ZXJDYXNlKCkmJmkuY2hhckNvZGVBdCgyKT09PUspJiYoaT1gJHt0fVxcYCkpO2NvbnN0IGw9aS5sZW5ndGg7bGV0IG89MCx1PSIiLGM9ITE7Y29uc3QgZj1pLmNoYXJDb2RlQXQoMCk7aWYobD09PTEpUChmKSYmKG89MSxjPSEwKTtlbHNlIGlmKFAoZikpaWYoYz0hMCxQKGkuY2hhckNvZGVBdCgxKSkpe2xldCBoPTIsZD1oO2Zvcig7aDxsJiYhUChpLmNoYXJDb2RlQXQoaCkpOyloKys7aWYoaDxsJiZoIT09ZCl7Y29uc3QgbT1pLnNsaWNlKGQsaCk7Zm9yKGQ9aDtoPGwmJlAoaS5jaGFyQ29kZUF0KGgpKTspaCsrO2lmKGg8bCYmaCE9PWQpe2ZvcihkPWg7aDxsJiYhUChpLmNoYXJDb2RlQXQoaCkpOyloKys7KGg9PT1sfHxoIT09ZCkmJih1PWBcXFxcJHttfVxcJHtpLnNsaWNlKGQsaCl9YCxvPWgpfX19ZWxzZSBvPTE7ZWxzZSBOZShmKSYmaS5jaGFyQ29kZUF0KDEpPT09d2UmJih1PWkuc2xpY2UoMCwyKSxvPTIsbD4yJiZQKGkuY2hhckNvZGVBdCgyKSkmJihjPSEwLG89MykpO2lmKHUubGVuZ3RoPjApaWYodC5sZW5ndGg+MCl7aWYodS50b0xvd2VyQ2FzZSgpIT09dC50b0xvd2VyQ2FzZSgpKWNvbnRpbnVlfWVsc2UgdD11O2lmKHMpe2lmKHQubGVuZ3RoPjApYnJlYWt9ZWxzZSBpZihuPWAke2kuc2xpY2Uobyl9XFwke259YCxzPWMsYyYmdC5sZW5ndGg+MClicmVha31yZXR1cm4gbj1tdChuLCFzLCJcXCIsUCkscz9gJHt0fVxcJHtufWA6YCR7dH0ke259YHx8Ii4ifSxub3JtYWxpemUoZSl7TyhlLCJwYXRoIik7Y29uc3QgdD1lLmxlbmd0aDtpZih0PT09MClyZXR1cm4iLiI7bGV0IG49MCxzLHI9ITE7Y29uc3QgaT1lLmNoYXJDb2RlQXQoMCk7aWYodD09PTEpcmV0dXJuIFF0KGkpPyJcXCI6ZTtpZihQKGkpKWlmKHI9ITAsUChlLmNoYXJDb2RlQXQoMSkpKXtsZXQgbz0yLHU9bztmb3IoO288dCYmIVAoZS5jaGFyQ29kZUF0KG8pKTspbysrO2lmKG88dCYmbyE9PXUpe2NvbnN0IGM9ZS5zbGljZSh1LG8pO2Zvcih1PW87bzx0JiZQKGUuY2hhckNvZGVBdChvKSk7KW8rKztpZihvPHQmJm8hPT11KXtmb3IodT1vO288dCYmIVAoZS5jaGFyQ29kZUF0KG8pKTspbysrO2lmKG89PT10KXJldHVybmBcXFxcJHtjfVxcJHtlLnNsaWNlKHUpfVxcYDtvIT09dSYmKHM9YFxcXFwke2N9XFwke2Uuc2xpY2UodSxvKX1gLG49byl9fX1lbHNlIG49MTtlbHNlIE5lKGkpJiZlLmNoYXJDb2RlQXQoMSk9PT13ZSYmKHM9ZS5zbGljZSgwLDIpLG49Mix0PjImJlAoZS5jaGFyQ29kZUF0KDIpKSYmKHI9ITAsbj0zKSk7bGV0IGw9bjx0P210KGUuc2xpY2UobiksIXIsIlxcIixQKToiIjtyZXR1cm4gbC5sZW5ndGg9PT0wJiYhciYmKGw9Ii4iKSxsLmxlbmd0aD4wJiZQKGUuY2hhckNvZGVBdCh0LTEpKSYmKGwrPSJcXCIpLHM9PT12b2lkIDA/cj9gXFwke2x9YDpsOnI/YCR7c31cXCR7bH1gOmAke3N9JHtsfWB9LGlzQWJzb2x1dGUoZSl7TyhlLCJwYXRoIik7Y29uc3QgdD1lLmxlbmd0aDtpZih0PT09MClyZXR1cm4hMTtjb25zdCBuPWUuY2hhckNvZGVBdCgwKTtyZXR1cm4gUChuKXx8dD4yJiZOZShuKSYmZS5jaGFyQ29kZUF0KDEpPT09d2UmJlAoZS5jaGFyQ29kZUF0KDIpKX0sam9pbiguLi5lKXtpZihlLmxlbmd0aD09PTApcmV0dXJuIi4iO2xldCB0LG47Zm9yKGxldCBpPTA7aTxlLmxlbmd0aDsrK2kpe2NvbnN0IGw9ZVtpXTtPKGwsInBhdGgiKSxsLmxlbmd0aD4wJiYodD09PXZvaWQgMD90PW49bDp0Kz1gXFwke2x9YCl9aWYodD09PXZvaWQgMClyZXR1cm4iLiI7bGV0IHM9ITAscj0wO2lmKHR5cGVvZiBuPT0ic3RyaW5nIiYmUChuLmNoYXJDb2RlQXQoMCkpKXsrK3I7Y29uc3QgaT1uLmxlbmd0aDtpPjEmJlAobi5jaGFyQ29kZUF0KDEpKSYmKCsrcixpPjImJihQKG4uY2hhckNvZGVBdCgyKSk/KytyOnM9ITEpKX1pZihzKXtmb3IoO3I8dC5sZW5ndGgmJlAodC5jaGFyQ29kZUF0KHIpKTspcisrO3I+PTImJih0PWBcXCR7dC5zbGljZShyKX1gKX1yZXR1cm4gWi5ub3JtYWxpemUodCl9LHJlbGF0aXZlKGUsdCl7aWYoTyhlLCJmcm9tIiksTyh0LCJ0byIpLGU9PT10KXJldHVybiIiO2NvbnN0IG49Wi5yZXNvbHZlKGUpLHM9Wi5yZXNvbHZlKHQpO2lmKG49PT1zfHwoZT1uLnRvTG93ZXJDYXNlKCksdD1zLnRvTG93ZXJDYXNlKCksZT09PXQpKXJldHVybiIiO2xldCByPTA7Zm9yKDtyPGUubGVuZ3RoJiZlLmNoYXJDb2RlQXQocik9PT1LOylyKys7bGV0IGk9ZS5sZW5ndGg7Zm9yKDtpLTE+ciYmZS5jaGFyQ29kZUF0KGktMSk9PT1LOylpLS07Y29uc3QgbD1pLXI7bGV0IG89MDtmb3IoO288dC5sZW5ndGgmJnQuY2hhckNvZGVBdChvKT09PUs7KW8rKztsZXQgdT10Lmxlbmd0aDtmb3IoO3UtMT5vJiZ0LmNoYXJDb2RlQXQodS0xKT09PUs7KXUtLTtjb25zdCBjPXUtbyxmPWw8Yz9sOmM7bGV0IGg9LTEsZD0wO2Zvcig7ZDxmO2QrKyl7Y29uc3QgZz1lLmNoYXJDb2RlQXQocitkKTtpZihnIT09dC5jaGFyQ29kZUF0KG8rZCkpYnJlYWs7Zz09PUsmJihoPWQpfWlmKGQhPT1mKXtpZihoPT09LTEpcmV0dXJuIHN9ZWxzZXtpZihjPmYpe2lmKHQuY2hhckNvZGVBdChvK2QpPT09SylyZXR1cm4gcy5zbGljZShvK2QrMSk7aWYoZD09PTIpcmV0dXJuIHMuc2xpY2UobytkKX1sPmYmJihlLmNoYXJDb2RlQXQocitkKT09PUs/aD1kOmQ9PT0yJiYoaD0zKSksaD09PS0xJiYoaD0wKX1sZXQgbT0iIjtmb3IoZD1yK2grMTtkPD1pOysrZCkoZD09PWl8fGUuY2hhckNvZGVBdChkKT09PUspJiYobSs9bS5sZW5ndGg9PT0wPyIuLiI6IlxcLi4iKTtyZXR1cm4gbys9aCxtLmxlbmd0aD4wP2Ake219JHtzLnNsaWNlKG8sdSl9YDoocy5jaGFyQ29kZUF0KG8pPT09SyYmKytvLHMuc2xpY2Uobyx1KSl9LHRvTmFtZXNwYWNlZFBhdGgoZSl7aWYodHlwZW9mIGUhPSJzdHJpbmcifHxlLmxlbmd0aD09PTApcmV0dXJuIGU7Y29uc3QgdD1aLnJlc29sdmUoZSk7aWYodC5sZW5ndGg8PTIpcmV0dXJuIGU7aWYodC5jaGFyQ29kZUF0KDApPT09Syl7aWYodC5jaGFyQ29kZUF0KDEpPT09Syl7Y29uc3Qgbj10LmNoYXJDb2RlQXQoMik7aWYobiE9PUFpJiZuIT09cGUpcmV0dXJuYFxcXFw/XFxVTkNcXCR7dC5zbGljZSgyKX1gfX1lbHNlIGlmKE5lKHQuY2hhckNvZGVBdCgwKSkmJnQuY2hhckNvZGVBdCgxKT09PXdlJiZ0LmNoYXJDb2RlQXQoMik9PT1LKXJldHVybmBcXFxcP1xcJHt0fWA7cmV0dXJuIGV9LGRpcm5hbWUoZSl7TyhlLCJwYXRoIik7Y29uc3QgdD1lLmxlbmd0aDtpZih0PT09MClyZXR1cm4iLiI7bGV0IG49LTEscz0wO2NvbnN0IHI9ZS5jaGFyQ29kZUF0KDApO2lmKHQ9PT0xKXJldHVybiBQKHIpP2U6Ii4iO2lmKFAocikpe2lmKG49cz0xLFAoZS5jaGFyQ29kZUF0KDEpKSl7bGV0IG89Mix1PW87Zm9yKDtvPHQmJiFQKGUuY2hhckNvZGVBdChvKSk7KW8rKztpZihvPHQmJm8hPT11KXtmb3IodT1vO288dCYmUChlLmNoYXJDb2RlQXQobykpOylvKys7aWYobzx0JiZvIT09dSl7Zm9yKHU9bztvPHQmJiFQKGUuY2hhckNvZGVBdChvKSk7KW8rKztpZihvPT09dClyZXR1cm4gZTtvIT09dSYmKG49cz1vKzEpfX19fWVsc2UgTmUocikmJmUuY2hhckNvZGVBdCgxKT09PXdlJiYobj10PjImJlAoZS5jaGFyQ29kZUF0KDIpKT8zOjIscz1uKTtsZXQgaT0tMSxsPSEwO2ZvcihsZXQgbz10LTE7bz49czstLW8paWYoUChlLmNoYXJDb2RlQXQobykpKXtpZighbCl7aT1vO2JyZWFrfX1lbHNlIGw9ITE7aWYoaT09PS0xKXtpZihuPT09LTEpcmV0dXJuIi4iO2k9bn1yZXR1cm4gZS5zbGljZSgwLGkpfSxiYXNlbmFtZShlLHQpe3QhPT12b2lkIDAmJk8odCwic3VmZml4IiksTyhlLCJwYXRoIik7bGV0IG49MCxzPS0xLHI9ITAsaTtpZihlLmxlbmd0aD49MiYmTmUoZS5jaGFyQ29kZUF0KDApKSYmZS5jaGFyQ29kZUF0KDEpPT09d2UmJihuPTIpLHQhPT12b2lkIDAmJnQubGVuZ3RoPjAmJnQubGVuZ3RoPD1lLmxlbmd0aCl7aWYodD09PWUpcmV0dXJuIiI7bGV0IGw9dC5sZW5ndGgtMSxvPS0xO2ZvcihpPWUubGVuZ3RoLTE7aT49bjstLWkpe2NvbnN0IHU9ZS5jaGFyQ29kZUF0KGkpO2lmKFAodSkpe2lmKCFyKXtuPWkrMTticmVha319ZWxzZSBvPT09LTEmJihyPSExLG89aSsxKSxsPj0wJiYodT09PXQuY2hhckNvZGVBdChsKT8tLWw9PT0tMSYmKHM9aSk6KGw9LTEscz1vKSl9cmV0dXJuIG49PT1zP3M9bzpzPT09LTEmJihzPWUubGVuZ3RoKSxlLnNsaWNlKG4scyl9Zm9yKGk9ZS5sZW5ndGgtMTtpPj1uOy0taSlpZihQKGUuY2hhckNvZGVBdChpKSkpe2lmKCFyKXtuPWkrMTticmVha319ZWxzZSBzPT09LTEmJihyPSExLHM9aSsxKTtyZXR1cm4gcz09PS0xPyIiOmUuc2xpY2UobixzKX0sZXh0bmFtZShlKXtPKGUsInBhdGgiKTtsZXQgdD0wLG49LTEscz0wLHI9LTEsaT0hMCxsPTA7ZS5sZW5ndGg+PTImJmUuY2hhckNvZGVBdCgxKT09PXdlJiZOZShlLmNoYXJDb2RlQXQoMCkpJiYodD1zPTIpO2ZvcihsZXQgbz1lLmxlbmd0aC0xO28+PXQ7LS1vKXtjb25zdCB1PWUuY2hhckNvZGVBdChvKTtpZihQKHUpKXtpZighaSl7cz1vKzE7YnJlYWt9Y29udGludWV9cj09PS0xJiYoaT0hMSxyPW8rMSksdT09PXBlP249PT0tMT9uPW86bCE9PTEmJihsPTEpOm4hPT0tMSYmKGw9LTEpfXJldHVybiBuPT09LTF8fHI9PT0tMXx8bD09PTB8fGw9PT0xJiZuPT09ci0xJiZuPT09cysxPyIiOmUuc2xpY2UobixyKX0sZm9ybWF0OlVuLmJpbmQobnVsbCwiXFwiKSxwYXJzZShlKXtPKGUsInBhdGgiKTtjb25zdCB0PXtyb290OiIiLGRpcjoiIixiYXNlOiIiLGV4dDoiIixuYW1lOiIifTtpZihlLmxlbmd0aD09PTApcmV0dXJuIHQ7Y29uc3Qgbj1lLmxlbmd0aDtsZXQgcz0wLHI9ZS5jaGFyQ29kZUF0KDApO2lmKG49PT0xKXJldHVybiBQKHIpPyh0LnJvb3Q9dC5kaXI9ZSx0KToodC5iYXNlPXQubmFtZT1lLHQpO2lmKFAocikpe2lmKHM9MSxQKGUuY2hhckNvZGVBdCgxKSkpe2xldCBoPTIsZD1oO2Zvcig7aDxuJiYhUChlLmNoYXJDb2RlQXQoaCkpOyloKys7aWYoaDxuJiZoIT09ZCl7Zm9yKGQ9aDtoPG4mJlAoZS5jaGFyQ29kZUF0KGgpKTspaCsrO2lmKGg8biYmaCE9PWQpe2ZvcihkPWg7aDxuJiYhUChlLmNoYXJDb2RlQXQoaCkpOyloKys7aD09PW4/cz1oOmghPT1kJiYocz1oKzEpfX19fWVsc2UgaWYoTmUocikmJmUuY2hhckNvZGVBdCgxKT09PXdlKXtpZihuPD0yKXJldHVybiB0LnJvb3Q9dC5kaXI9ZSx0O2lmKHM9MixQKGUuY2hhckNvZGVBdCgyKSkpe2lmKG49PT0zKXJldHVybiB0LnJvb3Q9dC5kaXI9ZSx0O3M9M319cz4wJiYodC5yb290PWUuc2xpY2UoMCxzKSk7bGV0IGk9LTEsbD1zLG89LTEsdT0hMCxjPWUubGVuZ3RoLTEsZj0wO2Zvcig7Yz49czstLWMpe2lmKHI9ZS5jaGFyQ29kZUF0KGMpLFAocikpe2lmKCF1KXtsPWMrMTticmVha31jb250aW51ZX1vPT09LTEmJih1PSExLG89YysxKSxyPT09cGU/aT09PS0xP2k9YzpmIT09MSYmKGY9MSk6aSE9PS0xJiYoZj0tMSl9cmV0dXJuIG8hPT0tMSYmKGk9PT0tMXx8Zj09PTB8fGY9PT0xJiZpPT09by0xJiZpPT09bCsxP3QuYmFzZT10Lm5hbWU9ZS5zbGljZShsLG8pOih0Lm5hbWU9ZS5zbGljZShsLGkpLHQuYmFzZT1lLnNsaWNlKGwsbyksdC5leHQ9ZS5zbGljZShpLG8pKSksbD4wJiZsIT09cz90LmRpcj1lLnNsaWNlKDAsbC0xKTp0LmRpcj10LnJvb3QsdH0sc2VwOiJcXCIsZGVsaW1pdGVyOiI7Iix3aW4zMjpudWxsLHBvc2l4Om51bGx9LEVpPSgoKT0+e2lmKExlKXtjb25zdCBlPS9cXC9nO3JldHVybigpPT57Y29uc3QgdD1kdCgpLnJlcGxhY2UoZSwiLyIpO3JldHVybiB0LnNsaWNlKHQuaW5kZXhPZigiLyIpKX19cmV0dXJuKCk9PmR0KCl9KSgpLGVlPXtyZXNvbHZlKC4uLmUpe2xldCB0PSIiLG49ITE7Zm9yKGxldCBzPWUubGVuZ3RoLTE7cz49LTEmJiFuO3MtLSl7Y29uc3Qgcj1zPj0wP2Vbc106RWkoKTtPKHIsYHBhdGhzWyR7c31dYCksci5sZW5ndGghPT0wJiYodD1gJHtyfS8ke3R9YCxuPXIuY2hhckNvZGVBdCgwKT09PVEpfXJldHVybiB0PW10KHQsIW4sIi8iLFF0KSxuP2AvJHt0fWA6dC5sZW5ndGg+MD90OiIuIn0sbm9ybWFsaXplKGUpe2lmKE8oZSwicGF0aCIpLGUubGVuZ3RoPT09MClyZXR1cm4iLiI7Y29uc3QgdD1lLmNoYXJDb2RlQXQoMCk9PT1RLG49ZS5jaGFyQ29kZUF0KGUubGVuZ3RoLTEpPT09UTtyZXR1cm4gZT1tdChlLCF0LCIvIixRdCksZS5sZW5ndGg9PT0wP3Q/Ii8iOm4/Ii4vIjoiLiI6KG4mJihlKz0iLyIpLHQ/YC8ke2V9YDplKX0saXNBYnNvbHV0ZShlKXtyZXR1cm4gTyhlLCJwYXRoIiksZS5sZW5ndGg+MCYmZS5jaGFyQ29kZUF0KDApPT09UX0sam9pbiguLi5lKXtpZihlLmxlbmd0aD09PTApcmV0dXJuIi4iO2xldCB0O2ZvcihsZXQgbj0wO248ZS5sZW5ndGg7KytuKXtjb25zdCBzPWVbbl07TyhzLCJwYXRoIikscy5sZW5ndGg+MCYmKHQ9PT12b2lkIDA/dD1zOnQrPWAvJHtzfWApfXJldHVybiB0PT09dm9pZCAwPyIuIjplZS5ub3JtYWxpemUodCl9LHJlbGF0aXZlKGUsdCl7aWYoTyhlLCJmcm9tIiksTyh0LCJ0byIpLGU9PT10fHwoZT1lZS5yZXNvbHZlKGUpLHQ9ZWUucmVzb2x2ZSh0KSxlPT09dCkpcmV0dXJuIiI7Y29uc3Qgbj0xLHM9ZS5sZW5ndGgscj1zLW4saT0xLGw9dC5sZW5ndGgtaSxvPXI8bD9yOmw7bGV0IHU9LTEsYz0wO2Zvcig7YzxvO2MrKyl7Y29uc3QgaD1lLmNoYXJDb2RlQXQobitjKTtpZihoIT09dC5jaGFyQ29kZUF0KGkrYykpYnJlYWs7aD09PVEmJih1PWMpfWlmKGM9PT1vKWlmKGw+byl7aWYodC5jaGFyQ29kZUF0KGkrYyk9PT1RKXJldHVybiB0LnNsaWNlKGkrYysxKTtpZihjPT09MClyZXR1cm4gdC5zbGljZShpK2MpfWVsc2Ugcj5vJiYoZS5jaGFyQ29kZUF0KG4rYyk9PT1RP3U9YzpjPT09MCYmKHU9MCkpO2xldCBmPSIiO2ZvcihjPW4rdSsxO2M8PXM7KytjKShjPT09c3x8ZS5jaGFyQ29kZUF0KGMpPT09USkmJihmKz1mLmxlbmd0aD09PTA/Ii4uIjoiLy4uIik7cmV0dXJuYCR7Zn0ke3Quc2xpY2UoaSt1KX1gfSx0b05hbWVzcGFjZWRQYXRoKGUpe3JldHVybiBlfSxkaXJuYW1lKGUpe2lmKE8oZSwicGF0aCIpLGUubGVuZ3RoPT09MClyZXR1cm4iLiI7Y29uc3QgdD1lLmNoYXJDb2RlQXQoMCk9PT1RO2xldCBuPS0xLHM9ITA7Zm9yKGxldCByPWUubGVuZ3RoLTE7cj49MTstLXIpaWYoZS5jaGFyQ29kZUF0KHIpPT09USl7aWYoIXMpe249cjticmVha319ZWxzZSBzPSExO3JldHVybiBuPT09LTE/dD8iLyI6Ii4iOnQmJm49PT0xPyIvLyI6ZS5zbGljZSgwLG4pfSxiYXNlbmFtZShlLHQpe3QhPT12b2lkIDAmJk8odCwiZXh0IiksTyhlLCJwYXRoIik7bGV0IG49MCxzPS0xLHI9ITAsaTtpZih0IT09dm9pZCAwJiZ0Lmxlbmd0aD4wJiZ0Lmxlbmd0aDw9ZS5sZW5ndGgpe2lmKHQ9PT1lKXJldHVybiIiO2xldCBsPXQubGVuZ3RoLTEsbz0tMTtmb3IoaT1lLmxlbmd0aC0xO2k+PTA7LS1pKXtjb25zdCB1PWUuY2hhckNvZGVBdChpKTtpZih1PT09USl7aWYoIXIpe249aSsxO2JyZWFrfX1lbHNlIG89PT0tMSYmKHI9ITEsbz1pKzEpLGw+PTAmJih1PT09dC5jaGFyQ29kZUF0KGwpPy0tbD09PS0xJiYocz1pKToobD0tMSxzPW8pKX1yZXR1cm4gbj09PXM/cz1vOnM9PT0tMSYmKHM9ZS5sZW5ndGgpLGUuc2xpY2UobixzKX1mb3IoaT1lLmxlbmd0aC0xO2k+PTA7LS1pKWlmKGUuY2hhckNvZGVBdChpKT09PVEpe2lmKCFyKXtuPWkrMTticmVha319ZWxzZSBzPT09LTEmJihyPSExLHM9aSsxKTtyZXR1cm4gcz09PS0xPyIiOmUuc2xpY2UobixzKX0sZXh0bmFtZShlKXtPKGUsInBhdGgiKTtsZXQgdD0tMSxuPTAscz0tMSxyPSEwLGk9MDtmb3IobGV0IGw9ZS5sZW5ndGgtMTtsPj0wOy0tbCl7Y29uc3Qgbz1lLmNoYXJDb2RlQXQobCk7aWYobz09PVEpe2lmKCFyKXtuPWwrMTticmVha31jb250aW51ZX1zPT09LTEmJihyPSExLHM9bCsxKSxvPT09cGU/dD09PS0xP3Q9bDppIT09MSYmKGk9MSk6dCE9PS0xJiYoaT0tMSl9cmV0dXJuIHQ9PT0tMXx8cz09PS0xfHxpPT09MHx8aT09PTEmJnQ9PT1zLTEmJnQ9PT1uKzE/IiI6ZS5zbGljZSh0LHMpfSxmb3JtYXQ6VW4uYmluZChudWxsLCIvIikscGFyc2UoZSl7TyhlLCJwYXRoIik7Y29uc3QgdD17cm9vdDoiIixkaXI6IiIsYmFzZToiIixleHQ6IiIsbmFtZToiIn07aWYoZS5sZW5ndGg9PT0wKXJldHVybiB0O2NvbnN0IG49ZS5jaGFyQ29kZUF0KDApPT09UTtsZXQgcztuPyh0LnJvb3Q9Ii8iLHM9MSk6cz0wO2xldCByPS0xLGk9MCxsPS0xLG89ITAsdT1lLmxlbmd0aC0xLGM9MDtmb3IoO3U+PXM7LS11KXtjb25zdCBmPWUuY2hhckNvZGVBdCh1KTtpZihmPT09USl7aWYoIW8pe2k9dSsxO2JyZWFrfWNvbnRpbnVlfWw9PT0tMSYmKG89ITEsbD11KzEpLGY9PT1wZT9yPT09LTE/cj11OmMhPT0xJiYoYz0xKTpyIT09LTEmJihjPS0xKX1pZihsIT09LTEpe2NvbnN0IGY9aT09PTAmJm4/MTppO3I9PT0tMXx8Yz09PTB8fGM9PT0xJiZyPT09bC0xJiZyPT09aSsxP3QuYmFzZT10Lm5hbWU9ZS5zbGljZShmLGwpOih0Lm5hbWU9ZS5zbGljZShmLHIpLHQuYmFzZT1lLnNsaWNlKGYsbCksdC5leHQ9ZS5zbGljZShyLGwpKX1yZXR1cm4gaT4wP3QuZGlyPWUuc2xpY2UoMCxpLTEpOm4mJih0LmRpcj0iLyIpLHR9LHNlcDoiLyIsZGVsaW1pdGVyOiI6Iix3aW4zMjpudWxsLHBvc2l4Om51bGx9O2VlLndpbjMyPVoud2luMzI9WixlZS5wb3NpeD1aLnBvc2l4PWVlLExlP1oubm9ybWFsaXplOmVlLm5vcm1hbGl6ZSxMZT9aLnJlc29sdmU6ZWUucmVzb2x2ZSxMZT9aLnJlbGF0aXZlOmVlLnJlbGF0aXZlLExlP1ouZGlybmFtZTplZS5kaXJuYW1lLExlP1ouYmFzZW5hbWU6ZWUuYmFzZW5hbWUsTGU/Wi5leHRuYW1lOmVlLmV4dG5hbWUsTGU/Wi5zZXA6ZWUuc2VwO2NvbnN0IE1pPS9eXHdbXHdcZCsuLV0qJC8sa2k9L15cLy8sRmk9L15cL1wvLztmdW5jdGlvbiBEaShlLHQpe2lmKCFlLnNjaGVtZSYmdCl0aHJvdyBuZXcgRXJyb3IoYFtVcmlFcnJvcl06IFNjaGVtZSBpcyBtaXNzaW5nOiB7c2NoZW1lOiAiIiwgYXV0aG9yaXR5OiAiJHtlLmF1dGhvcml0eX0iLCBwYXRoOiAiJHtlLnBhdGh9IiwgcXVlcnk6ICIke2UucXVlcnl9IiwgZnJhZ21lbnQ6ICIke2UuZnJhZ21lbnR9In1gKTtpZihlLnNjaGVtZSYmIU1pLnRlc3QoZS5zY2hlbWUpKXRocm93IG5ldyBFcnJvcigiW1VyaUVycm9yXTogU2NoZW1lIGNvbnRhaW5zIGlsbGVnYWwgY2hhcmFjdGVycy4iKTtpZihlLnBhdGgpe2lmKGUuYXV0aG9yaXR5KXtpZigha2kudGVzdChlLnBhdGgpKXRocm93IG5ldyBFcnJvcignW1VyaUVycm9yXTogSWYgYSBVUkkgY29udGFpbnMgYW4gYXV0aG9yaXR5IGNvbXBvbmVudCwgdGhlbiB0aGUgcGF0aCBjb21wb25lbnQgbXVzdCBlaXRoZXIgYmUgZW1wdHkgb3IgYmVnaW4gd2l0aCBhIHNsYXNoICgiLyIpIGNoYXJhY3RlcicpfWVsc2UgaWYoRmkudGVzdChlLnBhdGgpKXRocm93IG5ldyBFcnJvcignW1VyaUVycm9yXTogSWYgYSBVUkkgZG9lcyBub3QgY29udGFpbiBhbiBhdXRob3JpdHkgY29tcG9uZW50LCB0aGVuIHRoZSBwYXRoIGNhbm5vdCBiZWdpbiB3aXRoIHR3byBzbGFzaCBjaGFyYWN0ZXJzICgiLy8iKScpfX1mdW5jdGlvbiBQaShlLHQpe3JldHVybiFlJiYhdD8iZmlsZSI6ZX1mdW5jdGlvbiBUaShlLHQpe3N3aXRjaChlKXtjYXNlImh0dHBzIjpjYXNlImh0dHAiOmNhc2UiZmlsZSI6dD90WzBdIT09b2UmJih0PW9lK3QpOnQ9b2U7YnJlYWt9cmV0dXJuIHR9Y29uc3QgVz0iIixvZT0iLyIsVmk9L14oKFteOi8/I10rPyk6KT8oXC9cLyhbXi8/I10qKSk/KFtePyNdKikoXD8oW14jXSopKT8oIyguKikpPy87Y2xhc3MgQWV7c3RhdGljIGlzVXJpKHQpe3JldHVybiB0IGluc3RhbmNlb2YgQWU/ITA6dD90eXBlb2YgdC5hdXRob3JpdHk9PSJzdHJpbmciJiZ0eXBlb2YgdC5mcmFnbWVudD09InN0cmluZyImJnR5cGVvZiB0LnBhdGg9PSJzdHJpbmciJiZ0eXBlb2YgdC5xdWVyeT09InN0cmluZyImJnR5cGVvZiB0LnNjaGVtZT09InN0cmluZyImJnR5cGVvZiB0LmZzUGF0aD09InN0cmluZyImJnR5cGVvZiB0LndpdGg9PSJmdW5jdGlvbiImJnR5cGVvZiB0LnRvU3RyaW5nPT0iZnVuY3Rpb24iOiExfWNvbnN0cnVjdG9yKHQsbixzLHIsaSxsPSExKXt0eXBlb2YgdD09Im9iamVjdCI/KHRoaXMuc2NoZW1lPXQuc2NoZW1lfHxXLHRoaXMuYXV0aG9yaXR5PXQuYXV0aG9yaXR5fHxXLHRoaXMucGF0aD10LnBhdGh8fFcsdGhpcy5xdWVyeT10LnF1ZXJ5fHxXLHRoaXMuZnJhZ21lbnQ9dC5mcmFnbWVudHx8Vyk6KHRoaXMuc2NoZW1lPVBpKHQsbCksdGhpcy5hdXRob3JpdHk9bnx8Vyx0aGlzLnBhdGg9VGkodGhpcy5zY2hlbWUsc3x8VyksdGhpcy5xdWVyeT1yfHxXLHRoaXMuZnJhZ21lbnQ9aXx8VyxEaSh0aGlzLGwpKX1nZXQgZnNQYXRoKCl7cmV0dXJuIEp0KHRoaXMsITEpfXdpdGgodCl7aWYoIXQpcmV0dXJuIHRoaXM7bGV0e3NjaGVtZTpuLGF1dGhvcml0eTpzLHBhdGg6cixxdWVyeTppLGZyYWdtZW50Omx9PXQ7cmV0dXJuIG49PT12b2lkIDA/bj10aGlzLnNjaGVtZTpuPT09bnVsbCYmKG49Vykscz09PXZvaWQgMD9zPXRoaXMuYXV0aG9yaXR5OnM9PT1udWxsJiYocz1XKSxyPT09dm9pZCAwP3I9dGhpcy5wYXRoOnI9PT1udWxsJiYocj1XKSxpPT09dm9pZCAwP2k9dGhpcy5xdWVyeTppPT09bnVsbCYmKGk9VyksbD09PXZvaWQgMD9sPXRoaXMuZnJhZ21lbnQ6bD09PW51bGwmJihsPVcpLG49PT10aGlzLnNjaGVtZSYmcz09PXRoaXMuYXV0aG9yaXR5JiZyPT09dGhpcy5wYXRoJiZpPT09dGhpcy5xdWVyeSYmbD09PXRoaXMuZnJhZ21lbnQ/dGhpczpuZXcgVGUobixzLHIsaSxsKX1zdGF0aWMgcGFyc2UodCxuPSExKXtjb25zdCBzPVZpLmV4ZWModCk7cmV0dXJuIHM/bmV3IFRlKHNbMl18fFcsZ3Qoc1s0XXx8VyksZ3Qoc1s1XXx8VyksZ3Qoc1s3XXx8VyksZ3Qoc1s5XXx8Vyksbik6bmV3IFRlKFcsVyxXLFcsVyl9c3RhdGljIGZpbGUodCl7bGV0IG49VztpZihRZSYmKHQ9dC5yZXBsYWNlKC9cXC9nLG9lKSksdFswXT09PW9lJiZ0WzFdPT09b2Upe2NvbnN0IHM9dC5pbmRleE9mKG9lLDIpO3M9PT0tMT8obj10LnN1YnN0cmluZygyKSx0PW9lKToobj10LnN1YnN0cmluZygyLHMpLHQ9dC5zdWJzdHJpbmcocyl8fG9lKX1yZXR1cm4gbmV3IFRlKCJmaWxlIixuLHQsVyxXKX1zdGF0aWMgZnJvbSh0LG4pe3JldHVybiBuZXcgVGUodC5zY2hlbWUsdC5hdXRob3JpdHksdC5wYXRoLHQucXVlcnksdC5mcmFnbWVudCxuKX1zdGF0aWMgam9pblBhdGgodCwuLi5uKXtpZighdC5wYXRoKXRocm93IG5ldyBFcnJvcigiW1VyaUVycm9yXTogY2Fubm90IGNhbGwgam9pblBhdGggb24gVVJJIHdpdGhvdXQgcGF0aCIpO2xldCBzO3JldHVybiBRZSYmdC5zY2hlbWU9PT0iZmlsZSI/cz1BZS5maWxlKFouam9pbihKdCh0LCEwKSwuLi5uKSkucGF0aDpzPWVlLmpvaW4odC5wYXRoLC4uLm4pLHQud2l0aCh7cGF0aDpzfSl9dG9TdHJpbmcodD0hMSl7cmV0dXJuIFl0KHRoaXMsdCl9dG9KU09OKCl7cmV0dXJuIHRoaXN9c3RhdGljIHJldml2ZSh0KXtpZih0KXtpZih0IGluc3RhbmNlb2YgQWUpcmV0dXJuIHQ7e2NvbnN0IG49bmV3IFRlKHQpO3JldHVybiBuLl9mb3JtYXR0ZWQ9dC5leHRlcm5hbD8/bnVsbCxuLl9mc1BhdGg9dC5fc2VwPT09SG4/dC5mc1BhdGg/P251bGw6bnVsbCxufX1lbHNlIHJldHVybiB0fX1jb25zdCBIbj1RZT8xOnZvaWQgMDtjbGFzcyBUZSBleHRlbmRzIEFle2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLl9mb3JtYXR0ZWQ9bnVsbCx0aGlzLl9mc1BhdGg9bnVsbH1nZXQgZnNQYXRoKCl7cmV0dXJuIHRoaXMuX2ZzUGF0aHx8KHRoaXMuX2ZzUGF0aD1KdCh0aGlzLCExKSksdGhpcy5fZnNQYXRofXRvU3RyaW5nKHQ9ITEpe3JldHVybiB0P1l0KHRoaXMsITApOih0aGlzLl9mb3JtYXR0ZWR8fCh0aGlzLl9mb3JtYXR0ZWQ9WXQodGhpcywhMSkpLHRoaXMuX2Zvcm1hdHRlZCl9dG9KU09OKCl7Y29uc3QgdD17JG1pZDoxfTtyZXR1cm4gdGhpcy5fZnNQYXRoJiYodC5mc1BhdGg9dGhpcy5fZnNQYXRoLHQuX3NlcD1IbiksdGhpcy5fZm9ybWF0dGVkJiYodC5leHRlcm5hbD10aGlzLl9mb3JtYXR0ZWQpLHRoaXMucGF0aCYmKHQucGF0aD10aGlzLnBhdGgpLHRoaXMuc2NoZW1lJiYodC5zY2hlbWU9dGhpcy5zY2hlbWUpLHRoaXMuYXV0aG9yaXR5JiYodC5hdXRob3JpdHk9dGhpcy5hdXRob3JpdHkpLHRoaXMucXVlcnkmJih0LnF1ZXJ5PXRoaXMucXVlcnkpLHRoaXMuZnJhZ21lbnQmJih0LmZyYWdtZW50PXRoaXMuZnJhZ21lbnQpLHR9fWNvbnN0IFduPXs1ODoiJTNBIiw0NzoiJTJGIiw2MzoiJTNGIiwzNToiJTIzIiw5MToiJTVCIiw5MzoiJTVEIiw2NDoiJTQwIiwzMzoiJTIxIiwzNjoiJTI0IiwzODoiJTI2IiwzOToiJTI3Iiw0MDoiJTI4Iiw0MToiJTI5Iiw0MjoiJTJBIiw0MzoiJTJCIiw0NDoiJTJDIiw1OToiJTNCIiw2MToiJTNEIiwzMjoiJTIwIn07ZnVuY3Rpb24gem4oZSx0LG4pe2xldCBzLHI9LTE7Zm9yKGxldCBpPTA7aTxlLmxlbmd0aDtpKyspe2NvbnN0IGw9ZS5jaGFyQ29kZUF0KGkpO2lmKGw+PTk3JiZsPD0xMjJ8fGw+PTY1JiZsPD05MHx8bD49NDgmJmw8PTU3fHxsPT09NDV8fGw9PT00Nnx8bD09PTk1fHxsPT09MTI2fHx0JiZsPT09NDd8fG4mJmw9PT05MXx8biYmbD09PTkzfHxuJiZsPT09NTgpciE9PS0xJiYocys9ZW5jb2RlVVJJQ29tcG9uZW50KGUuc3Vic3RyaW5nKHIsaSkpLHI9LTEpLHMhPT12b2lkIDAmJihzKz1lLmNoYXJBdChpKSk7ZWxzZXtzPT09dm9pZCAwJiYocz1lLnN1YnN0cigwLGkpKTtjb25zdCBvPVduW2xdO28hPT12b2lkIDA/KHIhPT0tMSYmKHMrPWVuY29kZVVSSUNvbXBvbmVudChlLnN1YnN0cmluZyhyLGkpKSxyPS0xKSxzKz1vKTpyPT09LTEmJihyPWkpfX1yZXR1cm4gciE9PS0xJiYocys9ZW5jb2RlVVJJQ29tcG9uZW50KGUuc3Vic3RyaW5nKHIpKSkscyE9PXZvaWQgMD9zOmV9ZnVuY3Rpb24gSWkoZSl7bGV0IHQ7Zm9yKGxldCBuPTA7bjxlLmxlbmd0aDtuKyspe2NvbnN0IHM9ZS5jaGFyQ29kZUF0KG4pO3M9PT0zNXx8cz09PTYzPyh0PT09dm9pZCAwJiYodD1lLnN1YnN0cigwLG4pKSx0Kz1XbltzXSk6dCE9PXZvaWQgMCYmKHQrPWVbbl0pfXJldHVybiB0IT09dm9pZCAwP3Q6ZX1mdW5jdGlvbiBKdChlLHQpe2xldCBuO3JldHVybiBlLmF1dGhvcml0eSYmZS5wYXRoLmxlbmd0aD4xJiZlLnNjaGVtZT09PSJmaWxlIj9uPWAvLyR7ZS5hdXRob3JpdHl9JHtlLnBhdGh9YDplLnBhdGguY2hhckNvZGVBdCgwKT09PTQ3JiYoZS5wYXRoLmNoYXJDb2RlQXQoMSk+PTY1JiZlLnBhdGguY2hhckNvZGVBdCgxKTw9OTB8fGUucGF0aC5jaGFyQ29kZUF0KDEpPj05NyYmZS5wYXRoLmNoYXJDb2RlQXQoMSk8PTEyMikmJmUucGF0aC5jaGFyQ29kZUF0KDIpPT09NTg/dD9uPWUucGF0aC5zdWJzdHIoMSk6bj1lLnBhdGhbMV0udG9Mb3dlckNhc2UoKStlLnBhdGguc3Vic3RyKDIpOm49ZS5wYXRoLFFlJiYobj1uLnJlcGxhY2UoL1wvL2csIlxcIikpLG59ZnVuY3Rpb24gWXQoZSx0KXtjb25zdCBuPXQ/SWk6em47bGV0IHM9IiIse3NjaGVtZTpyLGF1dGhvcml0eTppLHBhdGg6bCxxdWVyeTpvLGZyYWdtZW50OnV9PWU7aWYociYmKHMrPXIscys9IjoiKSwoaXx8cj09PSJmaWxlIikmJihzKz1vZSxzKz1vZSksaSl7bGV0IGM9aS5pbmRleE9mKCJAIik7aWYoYyE9PS0xKXtjb25zdCBmPWkuc3Vic3RyKDAsYyk7aT1pLnN1YnN0cihjKzEpLGM9Zi5sYXN0SW5kZXhPZigiOiIpLGM9PT0tMT9zKz1uKGYsITEsITEpOihzKz1uKGYuc3Vic3RyKDAsYyksITEsITEpLHMrPSI6IixzKz1uKGYuc3Vic3RyKGMrMSksITEsITApKSxzKz0iQCJ9aT1pLnRvTG93ZXJDYXNlKCksYz1pLmxhc3RJbmRleE9mKCI6IiksYz09PS0xP3MrPW4oaSwhMSwhMCk6KHMrPW4oaS5zdWJzdHIoMCxjKSwhMSwhMCkscys9aS5zdWJzdHIoYykpfWlmKGwpe2lmKGwubGVuZ3RoPj0zJiZsLmNoYXJDb2RlQXQoMCk9PT00NyYmbC5jaGFyQ29kZUF0KDIpPT09NTgpe2NvbnN0IGM9bC5jaGFyQ29kZUF0KDEpO2M+PTY1JiZjPD05MCYmKGw9YC8ke1N0cmluZy5mcm9tQ2hhckNvZGUoYyszMil9OiR7bC5zdWJzdHIoMyl9YCl9ZWxzZSBpZihsLmxlbmd0aD49MiYmbC5jaGFyQ29kZUF0KDEpPT09NTgpe2NvbnN0IGM9bC5jaGFyQ29kZUF0KDApO2M+PTY1JiZjPD05MCYmKGw9YCR7U3RyaW5nLmZyb21DaGFyQ29kZShjKzMyKX06JHtsLnN1YnN0cigyKX1gKX1zKz1uKGwsITAsITEpfXJldHVybiBvJiYocys9Ij8iLHMrPW4obywhMSwhMSkpLHUmJihzKz0iIyIscys9dD91OnpuKHUsITEsITEpKSxzfWZ1bmN0aW9uICRuKGUpe3RyeXtyZXR1cm4gZGVjb2RlVVJJQ29tcG9uZW50KGUpfWNhdGNoe3JldHVybiBlLmxlbmd0aD4zP2Uuc3Vic3RyKDAsMykrJG4oZS5zdWJzdHIoMykpOmV9fWNvbnN0IEduPS8oJVswLTlBLVphLXpdWzAtOUEtWmEtel0pKy9nO2Z1bmN0aW9uIGd0KGUpe3JldHVybiBlLm1hdGNoKEduKT9lLnJlcGxhY2UoR24sdD0+JG4odCkpOmV9Y2xhc3MgcXtjb25zdHJ1Y3Rvcih0LG4pe3RoaXMubGluZU51bWJlcj10LHRoaXMuY29sdW1uPW59d2l0aCh0PXRoaXMubGluZU51bWJlcixuPXRoaXMuY29sdW1uKXtyZXR1cm4gdD09PXRoaXMubGluZU51bWJlciYmbj09PXRoaXMuY29sdW1uP3RoaXM6bmV3IHEodCxuKX1kZWx0YSh0PTAsbj0wKXtyZXR1cm4gdGhpcy53aXRoKHRoaXMubGluZU51bWJlcit0LHRoaXMuY29sdW1uK24pfWVxdWFscyh0KXtyZXR1cm4gcS5lcXVhbHModGhpcyx0KX1zdGF0aWMgZXF1YWxzKHQsbil7cmV0dXJuIXQmJiFuPyEwOiEhdCYmISFuJiZ0LmxpbmVOdW1iZXI9PT1uLmxpbmVOdW1iZXImJnQuY29sdW1uPT09bi5jb2x1bW59aXNCZWZvcmUodCl7cmV0dXJuIHEuaXNCZWZvcmUodGhpcyx0KX1zdGF0aWMgaXNCZWZvcmUodCxuKXtyZXR1cm4gdC5saW5lTnVtYmVyPG4ubGluZU51bWJlcj8hMDpuLmxpbmVOdW1iZXI8dC5saW5lTnVtYmVyPyExOnQuY29sdW1uPG4uY29sdW1ufWlzQmVmb3JlT3JFcXVhbCh0KXtyZXR1cm4gcS5pc0JlZm9yZU9yRXF1YWwodGhpcyx0KX1zdGF0aWMgaXNCZWZvcmVPckVxdWFsKHQsbil7cmV0dXJuIHQubGluZU51bWJlcjxuLmxpbmVOdW1iZXI/ITA6bi5saW5lTnVtYmVyPHQubGluZU51bWJlcj8hMTp0LmNvbHVtbjw9bi5jb2x1bW59c3RhdGljIGNvbXBhcmUodCxuKXtjb25zdCBzPXQubGluZU51bWJlcnwwLHI9bi5saW5lTnVtYmVyfDA7aWYocz09PXIpe2NvbnN0IGk9dC5jb2x1bW58MCxsPW4uY29sdW1ufDA7cmV0dXJuIGktbH1yZXR1cm4gcy1yfWNsb25lKCl7cmV0dXJuIG5ldyBxKHRoaXMubGluZU51bWJlcix0aGlzLmNvbHVtbil9dG9TdHJpbmcoKXtyZXR1cm4iKCIrdGhpcy5saW5lTnVtYmVyKyIsIit0aGlzLmNvbHVtbisiKSJ9c3RhdGljIGxpZnQodCl7cmV0dXJuIG5ldyBxKHQubGluZU51bWJlcix0LmNvbHVtbil9c3RhdGljIGlzSVBvc2l0aW9uKHQpe3JldHVybiB0JiZ0eXBlb2YgdC5saW5lTnVtYmVyPT0ibnVtYmVyIiYmdHlwZW9mIHQuY29sdW1uPT0ibnVtYmVyIn10b0pTT04oKXtyZXR1cm57bGluZU51bWJlcjp0aGlzLmxpbmVOdW1iZXIsY29sdW1uOnRoaXMuY29sdW1ufX19Y2xhc3Mga3tjb25zdHJ1Y3Rvcih0LG4scyxyKXt0PnN8fHQ9PT1zJiZuPnI/KHRoaXMuc3RhcnRMaW5lTnVtYmVyPXMsdGhpcy5zdGFydENvbHVtbj1yLHRoaXMuZW5kTGluZU51bWJlcj10LHRoaXMuZW5kQ29sdW1uPW4pOih0aGlzLnN0YXJ0TGluZU51bWJlcj10LHRoaXMuc3RhcnRDb2x1bW49bix0aGlzLmVuZExpbmVOdW1iZXI9cyx0aGlzLmVuZENvbHVtbj1yKX1pc0VtcHR5KCl7cmV0dXJuIGsuaXNFbXB0eSh0aGlzKX1zdGF0aWMgaXNFbXB0eSh0KXtyZXR1cm4gdC5zdGFydExpbmVOdW1iZXI9PT10LmVuZExpbmVOdW1iZXImJnQuc3RhcnRDb2x1bW49PT10LmVuZENvbHVtbn1jb250YWluc1Bvc2l0aW9uKHQpe3JldHVybiBrLmNvbnRhaW5zUG9zaXRpb24odGhpcyx0KX1zdGF0aWMgY29udGFpbnNQb3NpdGlvbih0LG4pe3JldHVybiEobi5saW5lTnVtYmVyPHQuc3RhcnRMaW5lTnVtYmVyfHxuLmxpbmVOdW1iZXI+dC5lbmRMaW5lTnVtYmVyfHxuLmxpbmVOdW1iZXI9PT10LnN0YXJ0TGluZU51bWJlciYmbi5jb2x1bW48dC5zdGFydENvbHVtbnx8bi5saW5lTnVtYmVyPT09dC5lbmRMaW5lTnVtYmVyJiZuLmNvbHVtbj50LmVuZENvbHVtbil9c3RhdGljIHN0cmljdENvbnRhaW5zUG9zaXRpb24odCxuKXtyZXR1cm4hKG4ubGluZU51bWJlcjx0LnN0YXJ0TGluZU51bWJlcnx8bi5saW5lTnVtYmVyPnQuZW5kTGluZU51bWJlcnx8bi5saW5lTnVtYmVyPT09dC5zdGFydExpbmVOdW1iZXImJm4uY29sdW1uPD10LnN0YXJ0Q29sdW1ufHxuLmxpbmVOdW1iZXI9PT10LmVuZExpbmVOdW1iZXImJm4uY29sdW1uPj10LmVuZENvbHVtbil9Y29udGFpbnNSYW5nZSh0KXtyZXR1cm4gay5jb250YWluc1JhbmdlKHRoaXMsdCl9c3RhdGljIGNvbnRhaW5zUmFuZ2UodCxuKXtyZXR1cm4hKG4uc3RhcnRMaW5lTnVtYmVyPHQuc3RhcnRMaW5lTnVtYmVyfHxuLmVuZExpbmVOdW1iZXI8dC5zdGFydExpbmVOdW1iZXJ8fG4uc3RhcnRMaW5lTnVtYmVyPnQuZW5kTGluZU51bWJlcnx8bi5lbmRMaW5lTnVtYmVyPnQuZW5kTGluZU51bWJlcnx8bi5zdGFydExpbmVOdW1iZXI9PT10LnN0YXJ0TGluZU51bWJlciYmbi5zdGFydENvbHVtbjx0LnN0YXJ0Q29sdW1ufHxuLmVuZExpbmVOdW1iZXI9PT10LmVuZExpbmVOdW1iZXImJm4uZW5kQ29sdW1uPnQuZW5kQ29sdW1uKX1zdHJpY3RDb250YWluc1JhbmdlKHQpe3JldHVybiBrLnN0cmljdENvbnRhaW5zUmFuZ2UodGhpcyx0KX1zdGF0aWMgc3RyaWN0Q29udGFpbnNSYW5nZSh0LG4pe3JldHVybiEobi5zdGFydExpbmVOdW1iZXI8dC5zdGFydExpbmVOdW1iZXJ8fG4uZW5kTGluZU51bWJlcjx0LnN0YXJ0TGluZU51bWJlcnx8bi5zdGFydExpbmVOdW1iZXI+dC5lbmRMaW5lTnVtYmVyfHxuLmVuZExpbmVOdW1iZXI+dC5lbmRMaW5lTnVtYmVyfHxuLnN0YXJ0TGluZU51bWJlcj09PXQuc3RhcnRMaW5lTnVtYmVyJiZuLnN0YXJ0Q29sdW1uPD10LnN0YXJ0Q29sdW1ufHxuLmVuZExpbmVOdW1iZXI9PT10LmVuZExpbmVOdW1iZXImJm4uZW5kQ29sdW1uPj10LmVuZENvbHVtbil9cGx1c1JhbmdlKHQpe3JldHVybiBrLnBsdXNSYW5nZSh0aGlzLHQpfXN0YXRpYyBwbHVzUmFuZ2UodCxuKXtsZXQgcyxyLGksbDtyZXR1cm4gbi5zdGFydExpbmVOdW1iZXI8dC5zdGFydExpbmVOdW1iZXI/KHM9bi5zdGFydExpbmVOdW1iZXIscj1uLnN0YXJ0Q29sdW1uKTpuLnN0YXJ0TGluZU51bWJlcj09PXQuc3RhcnRMaW5lTnVtYmVyPyhzPW4uc3RhcnRMaW5lTnVtYmVyLHI9TWF0aC5taW4obi5zdGFydENvbHVtbix0LnN0YXJ0Q29sdW1uKSk6KHM9dC5zdGFydExpbmVOdW1iZXIscj10LnN0YXJ0Q29sdW1uKSxuLmVuZExpbmVOdW1iZXI+dC5lbmRMaW5lTnVtYmVyPyhpPW4uZW5kTGluZU51bWJlcixsPW4uZW5kQ29sdW1uKTpuLmVuZExpbmVOdW1iZXI9PT10LmVuZExpbmVOdW1iZXI/KGk9bi5lbmRMaW5lTnVtYmVyLGw9TWF0aC5tYXgobi5lbmRDb2x1bW4sdC5lbmRDb2x1bW4pKTooaT10LmVuZExpbmVOdW1iZXIsbD10LmVuZENvbHVtbiksbmV3IGsocyxyLGksbCl9aW50ZXJzZWN0UmFuZ2VzKHQpe3JldHVybiBrLmludGVyc2VjdFJhbmdlcyh0aGlzLHQpfXN0YXRpYyBpbnRlcnNlY3RSYW5nZXModCxuKXtsZXQgcz10LnN0YXJ0TGluZU51bWJlcixyPXQuc3RhcnRDb2x1bW4saT10LmVuZExpbmVOdW1iZXIsbD10LmVuZENvbHVtbjtjb25zdCBvPW4uc3RhcnRMaW5lTnVtYmVyLHU9bi5zdGFydENvbHVtbixjPW4uZW5kTGluZU51bWJlcixmPW4uZW5kQ29sdW1uO3JldHVybiBzPG8/KHM9byxyPXUpOnM9PT1vJiYocj1NYXRoLm1heChyLHUpKSxpPmM/KGk9YyxsPWYpOmk9PT1jJiYobD1NYXRoLm1pbihsLGYpKSxzPml8fHM9PT1pJiZyPmw/bnVsbDpuZXcgayhzLHIsaSxsKX1lcXVhbHNSYW5nZSh0KXtyZXR1cm4gay5lcXVhbHNSYW5nZSh0aGlzLHQpfXN0YXRpYyBlcXVhbHNSYW5nZSh0LG4pe3JldHVybiF0JiYhbj8hMDohIXQmJiEhbiYmdC5zdGFydExpbmVOdW1iZXI9PT1uLnN0YXJ0TGluZU51bWJlciYmdC5zdGFydENvbHVtbj09PW4uc3RhcnRDb2x1bW4mJnQuZW5kTGluZU51bWJlcj09PW4uZW5kTGluZU51bWJlciYmdC5lbmRDb2x1bW49PT1uLmVuZENvbHVtbn1nZXRFbmRQb3NpdGlvbigpe3JldHVybiBrLmdldEVuZFBvc2l0aW9uKHRoaXMpfXN0YXRpYyBnZXRFbmRQb3NpdGlvbih0KXtyZXR1cm4gbmV3IHEodC5lbmRMaW5lTnVtYmVyLHQuZW5kQ29sdW1uKX1nZXRTdGFydFBvc2l0aW9uKCl7cmV0dXJuIGsuZ2V0U3RhcnRQb3NpdGlvbih0aGlzKX1zdGF0aWMgZ2V0U3RhcnRQb3NpdGlvbih0KXtyZXR1cm4gbmV3IHEodC5zdGFydExpbmVOdW1iZXIsdC5zdGFydENvbHVtbil9dG9TdHJpbmcoKXtyZXR1cm4iWyIrdGhpcy5zdGFydExpbmVOdW1iZXIrIiwiK3RoaXMuc3RhcnRDb2x1bW4rIiAtPiAiK3RoaXMuZW5kTGluZU51bWJlcisiLCIrdGhpcy5lbmRDb2x1bW4rIl0ifXNldEVuZFBvc2l0aW9uKHQsbil7cmV0dXJuIG5ldyBrKHRoaXMuc3RhcnRMaW5lTnVtYmVyLHRoaXMuc3RhcnRDb2x1bW4sdCxuKX1zZXRTdGFydFBvc2l0aW9uKHQsbil7cmV0dXJuIG5ldyBrKHQsbix0aGlzLmVuZExpbmVOdW1iZXIsdGhpcy5lbmRDb2x1bW4pfWNvbGxhcHNlVG9TdGFydCgpe3JldHVybiBrLmNvbGxhcHNlVG9TdGFydCh0aGlzKX1zdGF0aWMgY29sbGFwc2VUb1N0YXJ0KHQpe3JldHVybiBuZXcgayh0LnN0YXJ0TGluZU51bWJlcix0LnN0YXJ0Q29sdW1uLHQuc3RhcnRMaW5lTnVtYmVyLHQuc3RhcnRDb2x1bW4pfWNvbGxhcHNlVG9FbmQoKXtyZXR1cm4gay5jb2xsYXBzZVRvRW5kKHRoaXMpfXN0YXRpYyBjb2xsYXBzZVRvRW5kKHQpe3JldHVybiBuZXcgayh0LmVuZExpbmVOdW1iZXIsdC5lbmRDb2x1bW4sdC5lbmRMaW5lTnVtYmVyLHQuZW5kQ29sdW1uKX1kZWx0YSh0KXtyZXR1cm4gbmV3IGsodGhpcy5zdGFydExpbmVOdW1iZXIrdCx0aGlzLnN0YXJ0Q29sdW1uLHRoaXMuZW5kTGluZU51bWJlcit0LHRoaXMuZW5kQ29sdW1uKX1zdGF0aWMgZnJvbVBvc2l0aW9ucyh0LG49dCl7cmV0dXJuIG5ldyBrKHQubGluZU51bWJlcix0LmNvbHVtbixuLmxpbmVOdW1iZXIsbi5jb2x1bW4pfXN0YXRpYyBsaWZ0KHQpe3JldHVybiB0P25ldyBrKHQuc3RhcnRMaW5lTnVtYmVyLHQuc3RhcnRDb2x1bW4sdC5lbmRMaW5lTnVtYmVyLHQuZW5kQ29sdW1uKTpudWxsfXN0YXRpYyBpc0lSYW5nZSh0KXtyZXR1cm4gdCYmdHlwZW9mIHQuc3RhcnRMaW5lTnVtYmVyPT0ibnVtYmVyIiYmdHlwZW9mIHQuc3RhcnRDb2x1bW49PSJudW1iZXIiJiZ0eXBlb2YgdC5lbmRMaW5lTnVtYmVyPT0ibnVtYmVyIiYmdHlwZW9mIHQuZW5kQ29sdW1uPT0ibnVtYmVyIn1zdGF0aWMgYXJlSW50ZXJzZWN0aW5nT3JUb3VjaGluZyh0LG4pe3JldHVybiEodC5lbmRMaW5lTnVtYmVyPG4uc3RhcnRMaW5lTnVtYmVyfHx0LmVuZExpbmVOdW1iZXI9PT1uLnN0YXJ0TGluZU51bWJlciYmdC5lbmRDb2x1bW48bi5zdGFydENvbHVtbnx8bi5lbmRMaW5lTnVtYmVyPHQuc3RhcnRMaW5lTnVtYmVyfHxuLmVuZExpbmVOdW1iZXI9PT10LnN0YXJ0TGluZU51bWJlciYmbi5lbmRDb2x1bW48dC5zdGFydENvbHVtbil9c3RhdGljIGFyZUludGVyc2VjdGluZyh0LG4pe3JldHVybiEodC5lbmRMaW5lTnVtYmVyPG4uc3RhcnRMaW5lTnVtYmVyfHx0LmVuZExpbmVOdW1iZXI9PT1uLnN0YXJ0TGluZU51bWJlciYmdC5lbmRDb2x1bW48PW4uc3RhcnRDb2x1bW58fG4uZW5kTGluZU51bWJlcjx0LnN0YXJ0TGluZU51bWJlcnx8bi5lbmRMaW5lTnVtYmVyPT09dC5zdGFydExpbmVOdW1iZXImJm4uZW5kQ29sdW1uPD10LnN0YXJ0Q29sdW1uKX1zdGF0aWMgY29tcGFyZVJhbmdlc1VzaW5nU3RhcnRzKHQsbil7aWYodCYmbil7Y29uc3QgaT10LnN0YXJ0TGluZU51bWJlcnwwLGw9bi5zdGFydExpbmVOdW1iZXJ8MDtpZihpPT09bCl7Y29uc3Qgbz10LnN0YXJ0Q29sdW1ufDAsdT1uLnN0YXJ0Q29sdW1ufDA7aWYobz09PXUpe2NvbnN0IGM9dC5lbmRMaW5lTnVtYmVyfDAsZj1uLmVuZExpbmVOdW1iZXJ8MDtpZihjPT09Zil7Y29uc3QgaD10LmVuZENvbHVtbnwwLGQ9bi5lbmRDb2x1bW58MDtyZXR1cm4gaC1kfXJldHVybiBjLWZ9cmV0dXJuIG8tdX1yZXR1cm4gaS1sfXJldHVybih0PzE6MCktKG4/MTowKX1zdGF0aWMgY29tcGFyZVJhbmdlc1VzaW5nRW5kcyh0LG4pe3JldHVybiB0LmVuZExpbmVOdW1iZXI9PT1uLmVuZExpbmVOdW1iZXI/dC5lbmRDb2x1bW49PT1uLmVuZENvbHVtbj90LnN0YXJ0TGluZU51bWJlcj09PW4uc3RhcnRMaW5lTnVtYmVyP3Quc3RhcnRDb2x1bW4tbi5zdGFydENvbHVtbjp0LnN0YXJ0TGluZU51bWJlci1uLnN0YXJ0TGluZU51bWJlcjp0LmVuZENvbHVtbi1uLmVuZENvbHVtbjp0LmVuZExpbmVOdW1iZXItbi5lbmRMaW5lTnVtYmVyfXN0YXRpYyBzcGFuc011bHRpcGxlTGluZXModCl7cmV0dXJuIHQuZW5kTGluZU51bWJlcj50LnN0YXJ0TGluZU51bWJlcn10b0pTT04oKXtyZXR1cm4gdGhpc319ZnVuY3Rpb24gQmkoZSx0LG49KHMscik9PnM9PT1yKXtpZihlPT09dClyZXR1cm4hMDtpZighZXx8IXR8fGUubGVuZ3RoIT09dC5sZW5ndGgpcmV0dXJuITE7Zm9yKGxldCBzPTAscj1lLmxlbmd0aDtzPHI7cysrKWlmKCFuKGVbc10sdFtzXSkpcmV0dXJuITE7cmV0dXJuITB9ZnVuY3Rpb24qcWkoZSx0KXtsZXQgbixzO2Zvcihjb25zdCByIG9mIGUpcyE9PXZvaWQgMCYmdChzLHIpP24ucHVzaChyKToobiYmKHlpZWxkIG4pLG49W3JdKSxzPXI7biYmKHlpZWxkIG4pfWZ1bmN0aW9uIFVpKGUsdCl7Zm9yKGxldCBuPTA7bjw9ZS5sZW5ndGg7bisrKXQobj09PTA/dm9pZCAwOmVbbi0xXSxuPT09ZS5sZW5ndGg/dm9pZCAwOmVbbl0pfWZ1bmN0aW9uIEhpKGUsdCl7Zm9yKGxldCBuPTA7bjxlLmxlbmd0aDtuKyspdChuPT09MD92b2lkIDA6ZVtuLTFdLGVbbl0sbisxPT09ZS5sZW5ndGg/dm9pZCAwOmVbbisxXSl9ZnVuY3Rpb24gV2koZSx0KXtmb3IoY29uc3QgbiBvZiB0KWUucHVzaChuKX12YXIgWnQ7KGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoaSl7cmV0dXJuIGk8MH1lLmlzTGVzc1RoYW49dDtmdW5jdGlvbiBuKGkpe3JldHVybiBpPD0wfWUuaXNMZXNzVGhhbk9yRXF1YWw9bjtmdW5jdGlvbiBzKGkpe3JldHVybiBpPjB9ZS5pc0dyZWF0ZXJUaGFuPXM7ZnVuY3Rpb24gcihpKXtyZXR1cm4gaT09PTB9ZS5pc05laXRoZXJMZXNzT3JHcmVhdGVyVGhhbj1yLGUuZ3JlYXRlclRoYW49MSxlLmxlc3NUaGFuPS0xLGUubmVpdGhlckxlc3NPckdyZWF0ZXJUaGFuPTB9KShadHx8KFp0PXt9KSk7ZnVuY3Rpb24gYnQoZSx0KXtyZXR1cm4obixzKT0+dChlKG4pLGUocykpfWNvbnN0IHh0PShlLHQpPT5lLXQ7ZnVuY3Rpb24gemkoZSl7cmV0dXJuKHQsbik9Pi1lKHQsbil9Y29uc3QgR2U9Y2xhc3MgR2V7Y29uc3RydWN0b3IodCl7dGhpcy5pdGVyYXRlPXR9dG9BcnJheSgpe2NvbnN0IHQ9W107cmV0dXJuIHRoaXMuaXRlcmF0ZShuPT4odC5wdXNoKG4pLCEwKSksdH1maWx0ZXIodCl7cmV0dXJuIG5ldyBHZShuPT50aGlzLml0ZXJhdGUocz0+dChzKT9uKHMpOiEwKSl9bWFwKHQpe3JldHVybiBuZXcgR2Uobj0+dGhpcy5pdGVyYXRlKHM9Pm4odChzKSkpKX1maW5kTGFzdCh0KXtsZXQgbjtyZXR1cm4gdGhpcy5pdGVyYXRlKHM9Pih0KHMpJiYobj1zKSwhMCkpLG59ZmluZExhc3RNYXhCeSh0KXtsZXQgbixzPSEwO3JldHVybiB0aGlzLml0ZXJhdGUocj0+KChzfHxadC5pc0dyZWF0ZXJUaGFuKHQocixuKSkpJiYocz0hMSxuPXIpLCEwKSksbn19O0dlLmVtcHR5PW5ldyBHZSh0PT57fSk7bGV0IE9uPUdlO2Z1bmN0aW9uIGpuKGUpe3JldHVybiBlPDA/MDplPjI1NT8yNTU6ZXwwfWZ1bmN0aW9uIFZlKGUpe3JldHVybiBlPDA/MDplPjQyOTQ5NjcyOTU/NDI5NDk2NzI5NTplfDB9Y2xhc3MgJGl7Y29uc3RydWN0b3IodCl7dGhpcy52YWx1ZXM9dCx0aGlzLnByZWZpeFN1bT1uZXcgVWludDMyQXJyYXkodC5sZW5ndGgpLHRoaXMucHJlZml4U3VtVmFsaWRJbmRleD1uZXcgSW50MzJBcnJheSgxKSx0aGlzLnByZWZpeFN1bVZhbGlkSW5kZXhbMF09LTF9aW5zZXJ0VmFsdWVzKHQsbil7dD1WZSh0KTtjb25zdCBzPXRoaXMudmFsdWVzLHI9dGhpcy5wcmVmaXhTdW0saT1uLmxlbmd0aDtyZXR1cm4gaT09PTA/ITE6KHRoaXMudmFsdWVzPW5ldyBVaW50MzJBcnJheShzLmxlbmd0aCtpKSx0aGlzLnZhbHVlcy5zZXQocy5zdWJhcnJheSgwLHQpLDApLHRoaXMudmFsdWVzLnNldChzLnN1YmFycmF5KHQpLHQraSksdGhpcy52YWx1ZXMuc2V0KG4sdCksdC0xPHRoaXMucHJlZml4U3VtVmFsaWRJbmRleFswXSYmKHRoaXMucHJlZml4U3VtVmFsaWRJbmRleFswXT10LTEpLHRoaXMucHJlZml4U3VtPW5ldyBVaW50MzJBcnJheSh0aGlzLnZhbHVlcy5sZW5ndGgpLHRoaXMucHJlZml4U3VtVmFsaWRJbmRleFswXT49MCYmdGhpcy5wcmVmaXhTdW0uc2V0KHIuc3ViYXJyYXkoMCx0aGlzLnByZWZpeFN1bVZhbGlkSW5kZXhbMF0rMSkpLCEwKX1zZXRWYWx1ZSh0LG4pe3JldHVybiB0PVZlKHQpLG49VmUobiksdGhpcy52YWx1ZXNbdF09PT1uPyExOih0aGlzLnZhbHVlc1t0XT1uLHQtMTx0aGlzLnByZWZpeFN1bVZhbGlkSW5kZXhbMF0mJih0aGlzLnByZWZpeFN1bVZhbGlkSW5kZXhbMF09dC0xKSwhMCl9cmVtb3ZlVmFsdWVzKHQsbil7dD1WZSh0KSxuPVZlKG4pO2NvbnN0IHM9dGhpcy52YWx1ZXMscj10aGlzLnByZWZpeFN1bTtpZih0Pj1zLmxlbmd0aClyZXR1cm4hMTtjb25zdCBpPXMubGVuZ3RoLXQ7cmV0dXJuIG4+PWkmJihuPWkpLG49PT0wPyExOih0aGlzLnZhbHVlcz1uZXcgVWludDMyQXJyYXkocy5sZW5ndGgtbiksdGhpcy52YWx1ZXMuc2V0KHMuc3ViYXJyYXkoMCx0KSwwKSx0aGlzLnZhbHVlcy5zZXQocy5zdWJhcnJheSh0K24pLHQpLHRoaXMucHJlZml4U3VtPW5ldyBVaW50MzJBcnJheSh0aGlzLnZhbHVlcy5sZW5ndGgpLHQtMTx0aGlzLnByZWZpeFN1bVZhbGlkSW5kZXhbMF0mJih0aGlzLnByZWZpeFN1bVZhbGlkSW5kZXhbMF09dC0xKSx0aGlzLnByZWZpeFN1bVZhbGlkSW5kZXhbMF0+PTAmJnRoaXMucHJlZml4U3VtLnNldChyLnN1YmFycmF5KDAsdGhpcy5wcmVmaXhTdW1WYWxpZEluZGV4WzBdKzEpKSwhMCl9Z2V0VG90YWxTdW0oKXtyZXR1cm4gdGhpcy52YWx1ZXMubGVuZ3RoPT09MD8wOnRoaXMuX2dldFByZWZpeFN1bSh0aGlzLnZhbHVlcy5sZW5ndGgtMSl9Z2V0UHJlZml4U3VtKHQpe3JldHVybiB0PDA/MDoodD1WZSh0KSx0aGlzLl9nZXRQcmVmaXhTdW0odCkpfV9nZXRQcmVmaXhTdW0odCl7aWYodDw9dGhpcy5wcmVmaXhTdW1WYWxpZEluZGV4WzBdKXJldHVybiB0aGlzLnByZWZpeFN1bVt0XTtsZXQgbj10aGlzLnByZWZpeFN1bVZhbGlkSW5kZXhbMF0rMTtuPT09MCYmKHRoaXMucHJlZml4U3VtWzBdPXRoaXMudmFsdWVzWzBdLG4rKyksdD49dGhpcy52YWx1ZXMubGVuZ3RoJiYodD10aGlzLnZhbHVlcy5sZW5ndGgtMSk7Zm9yKGxldCBzPW47czw9dDtzKyspdGhpcy5wcmVmaXhTdW1bc109dGhpcy5wcmVmaXhTdW1bcy0xXSt0aGlzLnZhbHVlc1tzXTtyZXR1cm4gdGhpcy5wcmVmaXhTdW1WYWxpZEluZGV4WzBdPU1hdGgubWF4KHRoaXMucHJlZml4U3VtVmFsaWRJbmRleFswXSx0KSx0aGlzLnByZWZpeFN1bVt0XX1nZXRJbmRleE9mKHQpe3Q9TWF0aC5mbG9vcih0KSx0aGlzLmdldFRvdGFsU3VtKCk7bGV0IG49MCxzPXRoaXMudmFsdWVzLmxlbmd0aC0xLHI9MCxpPTAsbD0wO2Zvcig7bjw9czspaWYocj1uKyhzLW4pLzJ8MCxpPXRoaXMucHJlZml4U3VtW3JdLGw9aS10aGlzLnZhbHVlc1tyXSx0PGwpcz1yLTE7ZWxzZSBpZih0Pj1pKW49cisxO2Vsc2UgYnJlYWs7cmV0dXJuIG5ldyBHaShyLHQtbCl9fWNsYXNzIEdpe2NvbnN0cnVjdG9yKHQsbil7dGhpcy5pbmRleD10LHRoaXMucmVtYWluZGVyPW4sdGhpcy5fcHJlZml4U3VtSW5kZXhPZlJlc3VsdEJyYW5kPXZvaWQgMCx0aGlzLmluZGV4PXQsdGhpcy5yZW1haW5kZXI9bn19Y2xhc3MgT2l7Y29uc3RydWN0b3IodCxuLHMscil7dGhpcy5fdXJpPXQsdGhpcy5fbGluZXM9bix0aGlzLl9lb2w9cyx0aGlzLl92ZXJzaW9uSWQ9cix0aGlzLl9saW5lU3RhcnRzPW51bGwsdGhpcy5fY2FjaGVkVGV4dFZhbHVlPW51bGx9ZGlzcG9zZSgpe3RoaXMuX2xpbmVzLmxlbmd0aD0wfWdldCB2ZXJzaW9uKCl7cmV0dXJuIHRoaXMuX3ZlcnNpb25JZH1nZXRUZXh0KCl7cmV0dXJuIHRoaXMuX2NhY2hlZFRleHRWYWx1ZT09PW51bGwmJih0aGlzLl9jYWNoZWRUZXh0VmFsdWU9dGhpcy5fbGluZXMuam9pbih0aGlzLl9lb2wpKSx0aGlzLl9jYWNoZWRUZXh0VmFsdWV9b25FdmVudHModCl7dC5lb2wmJnQuZW9sIT09dGhpcy5fZW9sJiYodGhpcy5fZW9sPXQuZW9sLHRoaXMuX2xpbmVTdGFydHM9bnVsbCk7Y29uc3Qgbj10LmNoYW5nZXM7Zm9yKGNvbnN0IHMgb2Ygbil0aGlzLl9hY2NlcHREZWxldGVSYW5nZShzLnJhbmdlKSx0aGlzLl9hY2NlcHRJbnNlcnRUZXh0KG5ldyBxKHMucmFuZ2Uuc3RhcnRMaW5lTnVtYmVyLHMucmFuZ2Uuc3RhcnRDb2x1bW4pLHMudGV4dCk7dGhpcy5fdmVyc2lvbklkPXQudmVyc2lvbklkLHRoaXMuX2NhY2hlZFRleHRWYWx1ZT1udWxsfV9lbnN1cmVMaW5lU3RhcnRzKCl7aWYoIXRoaXMuX2xpbmVTdGFydHMpe2NvbnN0IHQ9dGhpcy5fZW9sLmxlbmd0aCxuPXRoaXMuX2xpbmVzLmxlbmd0aCxzPW5ldyBVaW50MzJBcnJheShuKTtmb3IobGV0IHI9MDtyPG47cisrKXNbcl09dGhpcy5fbGluZXNbcl0ubGVuZ3RoK3Q7dGhpcy5fbGluZVN0YXJ0cz1uZXcgJGkocyl9fV9zZXRMaW5lVGV4dCh0LG4pe3RoaXMuX2xpbmVzW3RdPW4sdGhpcy5fbGluZVN0YXJ0cyYmdGhpcy5fbGluZVN0YXJ0cy5zZXRWYWx1ZSh0LHRoaXMuX2xpbmVzW3RdLmxlbmd0aCt0aGlzLl9lb2wubGVuZ3RoKX1fYWNjZXB0RGVsZXRlUmFuZ2UodCl7aWYodC5zdGFydExpbmVOdW1iZXI9PT10LmVuZExpbmVOdW1iZXIpe2lmKHQuc3RhcnRDb2x1bW49PT10LmVuZENvbHVtbilyZXR1cm47dGhpcy5fc2V0TGluZVRleHQodC5zdGFydExpbmVOdW1iZXItMSx0aGlzLl9saW5lc1t0LnN0YXJ0TGluZU51bWJlci0xXS5zdWJzdHJpbmcoMCx0LnN0YXJ0Q29sdW1uLTEpK3RoaXMuX2xpbmVzW3Quc3RhcnRMaW5lTnVtYmVyLTFdLnN1YnN0cmluZyh0LmVuZENvbHVtbi0xKSk7cmV0dXJufXRoaXMuX3NldExpbmVUZXh0KHQuc3RhcnRMaW5lTnVtYmVyLTEsdGhpcy5fbGluZXNbdC5zdGFydExpbmVOdW1iZXItMV0uc3Vic3RyaW5nKDAsdC5zdGFydENvbHVtbi0xKSt0aGlzLl9saW5lc1t0LmVuZExpbmVOdW1iZXItMV0uc3Vic3RyaW5nKHQuZW5kQ29sdW1uLTEpKSx0aGlzLl9saW5lcy5zcGxpY2UodC5zdGFydExpbmVOdW1iZXIsdC5lbmRMaW5lTnVtYmVyLXQuc3RhcnRMaW5lTnVtYmVyKSx0aGlzLl9saW5lU3RhcnRzJiZ0aGlzLl9saW5lU3RhcnRzLnJlbW92ZVZhbHVlcyh0LnN0YXJ0TGluZU51bWJlcix0LmVuZExpbmVOdW1iZXItdC5zdGFydExpbmVOdW1iZXIpfV9hY2NlcHRJbnNlcnRUZXh0KHQsbil7aWYobi5sZW5ndGg9PT0wKXJldHVybjtjb25zdCBzPXNpKG4pO2lmKHMubGVuZ3RoPT09MSl7dGhpcy5fc2V0TGluZVRleHQodC5saW5lTnVtYmVyLTEsdGhpcy5fbGluZXNbdC5saW5lTnVtYmVyLTFdLnN1YnN0cmluZygwLHQuY29sdW1uLTEpK3NbMF0rdGhpcy5fbGluZXNbdC5saW5lTnVtYmVyLTFdLnN1YnN0cmluZyh0LmNvbHVtbi0xKSk7cmV0dXJufXNbcy5sZW5ndGgtMV0rPXRoaXMuX2xpbmVzW3QubGluZU51bWJlci0xXS5zdWJzdHJpbmcodC5jb2x1bW4tMSksdGhpcy5fc2V0TGluZVRleHQodC5saW5lTnVtYmVyLTEsdGhpcy5fbGluZXNbdC5saW5lTnVtYmVyLTFdLnN1YnN0cmluZygwLHQuY29sdW1uLTEpK3NbMF0pO2NvbnN0IHI9bmV3IFVpbnQzMkFycmF5KHMubGVuZ3RoLTEpO2ZvcihsZXQgaT0xO2k8cy5sZW5ndGg7aSsrKXRoaXMuX2xpbmVzLnNwbGljZSh0LmxpbmVOdW1iZXIraS0xLDAsc1tpXSkscltpLTFdPXNbaV0ubGVuZ3RoK3RoaXMuX2VvbC5sZW5ndGg7dGhpcy5fbGluZVN0YXJ0cyYmdGhpcy5fbGluZVN0YXJ0cy5pbnNlcnRWYWx1ZXModC5saW5lTnVtYmVyLHIpfX1jb25zdCBqaT0iYH4hQCMkJV4mKigpLT0rW3tdfVxcfDs6J1wiLC48Pi8/IjtmdW5jdGlvbiBYaShlPSIiKXtsZXQgdD0iKC0/XFxkKlxcLlxcZFxcdyopfChbXiI7Zm9yKGNvbnN0IG4gb2YgamkpZS5pbmRleE9mKG4pPj0wfHwodCs9IlxcIituKTtyZXR1cm4gdCs9Ilxcc10rKSIsbmV3IFJlZ0V4cCh0LCJnIil9Y29uc3QgWG49WGkoKTtmdW5jdGlvbiBRbihlKXtsZXQgdD1YbjtpZihlJiZlIGluc3RhbmNlb2YgUmVnRXhwKWlmKGUuZ2xvYmFsKXQ9ZTtlbHNle2xldCBuPSJnIjtlLmlnbm9yZUNhc2UmJihuKz0iaSIpLGUubXVsdGlsaW5lJiYobis9Im0iKSxlLnVuaWNvZGUmJihuKz0idSIpLHQ9bmV3IFJlZ0V4cChlLnNvdXJjZSxuKX1yZXR1cm4gdC5sYXN0SW5kZXg9MCx0fWNvbnN0IEpuPW5ldyBWcjtKbi51bnNoaWZ0KHttYXhMZW46MWUzLHdpbmRvd1NpemU6MTUsdGltZUJ1ZGdldDoxNTB9KTtmdW5jdGlvbiBLdChlLHQsbixzLHIpe2lmKHQ9UW4odCkscnx8KHI9b3QuZmlyc3QoSm4pKSxuLmxlbmd0aD5yLm1heExlbil7bGV0IGM9ZS1yLm1heExlbi8yO3JldHVybiBjPDA/Yz0wOnMrPWMsbj1uLnN1YnN0cmluZyhjLGUrci5tYXhMZW4vMiksS3QoZSx0LG4scyxyKX1jb25zdCBpPURhdGUubm93KCksbD1lLTEtcztsZXQgbz0tMSx1PW51bGw7Zm9yKGxldCBjPTE7IShEYXRlLm5vdygpLWk+PXIudGltZUJ1ZGdldCk7YysrKXtjb25zdCBmPWwtci53aW5kb3dTaXplKmM7dC5sYXN0SW5kZXg9TWF0aC5tYXgoMCxmKTtjb25zdCBoPVFpKHQsbixsLG8pO2lmKCFoJiZ1fHwodT1oLGY8PTApKWJyZWFrO289Zn1pZih1KXtjb25zdCBjPXt3b3JkOnVbMF0sc3RhcnRDb2x1bW46cysxK3UuaW5kZXgsZW5kQ29sdW1uOnMrMSt1LmluZGV4K3VbMF0ubGVuZ3RofTtyZXR1cm4gdC5sYXN0SW5kZXg9MCxjfXJldHVybiBudWxsfWZ1bmN0aW9uIFFpKGUsdCxuLHMpe2xldCByO2Zvcig7cj1lLmV4ZWModCk7KXtjb25zdCBpPXIuaW5kZXh8fDA7aWYoaTw9biYmZS5sYXN0SW5kZXg+PW4pcmV0dXJuIHI7aWYocz4wJiZpPnMpcmV0dXJuIG51bGx9cmV0dXJuIG51bGx9Y2xhc3MgZW57Y29uc3RydWN0b3IodCl7Y29uc3Qgbj1qbih0KTt0aGlzLl9kZWZhdWx0VmFsdWU9bix0aGlzLl9hc2NpaU1hcD1lbi5fY3JlYXRlQXNjaWlNYXAobiksdGhpcy5fbWFwPW5ldyBNYXB9c3RhdGljIF9jcmVhdGVBc2NpaU1hcCh0KXtjb25zdCBuPW5ldyBVaW50OEFycmF5KDI1Nik7cmV0dXJuIG4uZmlsbCh0KSxufXNldCh0LG4pe2NvbnN0IHM9am4obik7dD49MCYmdDwyNTY/dGhpcy5fYXNjaWlNYXBbdF09czp0aGlzLl9tYXAuc2V0KHQscyl9Z2V0KHQpe3JldHVybiB0Pj0wJiZ0PDI1Nj90aGlzLl9hc2NpaU1hcFt0XTp0aGlzLl9tYXAuZ2V0KHQpfHx0aGlzLl9kZWZhdWx0VmFsdWV9Y2xlYXIoKXt0aGlzLl9hc2NpaU1hcC5maWxsKHRoaXMuX2RlZmF1bHRWYWx1ZSksdGhpcy5fbWFwLmNsZWFyKCl9fWNsYXNzIEppe2NvbnN0cnVjdG9yKHQsbixzKXtjb25zdCByPW5ldyBVaW50OEFycmF5KHQqbik7Zm9yKGxldCBpPTAsbD10Km47aTxsO2krKylyW2ldPXM7dGhpcy5fZGF0YT1yLHRoaXMucm93cz10LHRoaXMuY29scz1ufWdldCh0LG4pe3JldHVybiB0aGlzLl9kYXRhW3QqdGhpcy5jb2xzK25dfXNldCh0LG4scyl7dGhpcy5fZGF0YVt0KnRoaXMuY29scytuXT1zfX1jbGFzcyBZaXtjb25zdHJ1Y3Rvcih0KXtsZXQgbj0wLHM9MDtmb3IobGV0IGk9MCxsPXQubGVuZ3RoO2k8bDtpKyspe2NvbnN0W28sdSxjXT10W2ldO3U+biYmKG49dSksbz5zJiYocz1vKSxjPnMmJihzPWMpfW4rKyxzKys7Y29uc3Qgcj1uZXcgSmkocyxuLDApO2ZvcihsZXQgaT0wLGw9dC5sZW5ndGg7aTxsO2krKyl7Y29uc3Rbbyx1LGNdPXRbaV07ci5zZXQobyx1LGMpfXRoaXMuX3N0YXRlcz1yLHRoaXMuX21heENoYXJDb2RlPW59bmV4dFN0YXRlKHQsbil7cmV0dXJuIG48MHx8bj49dGhpcy5fbWF4Q2hhckNvZGU/MDp0aGlzLl9zdGF0ZXMuZ2V0KHQsbil9fWxldCB0bj1udWxsO2Z1bmN0aW9uIFppKCl7cmV0dXJuIHRuPT09bnVsbCYmKHRuPW5ldyBZaShbWzEsMTA0LDJdLFsxLDcyLDJdLFsxLDEwMiw2XSxbMSw3MCw2XSxbMiwxMTYsM10sWzIsODQsM10sWzMsMTE2LDRdLFszLDg0LDRdLFs0LDExMiw1XSxbNCw4MCw1XSxbNSwxMTUsOV0sWzUsODMsOV0sWzUsNTgsMTBdLFs2LDEwNSw3XSxbNiw3Myw3XSxbNywxMDgsOF0sWzcsNzYsOF0sWzgsMTAxLDldLFs4LDY5LDldLFs5LDU4LDEwXSxbMTAsNDcsMTFdLFsxMSw0NywxMl1dKSksdG59bGV0IEtlPW51bGw7ZnVuY3Rpb24gS2koKXtpZihLZT09PW51bGwpe0tlPW5ldyBlbigwKTtjb25zdCBlPWAgCTw+JyLjgIHjgILvvaHvvaTvvIzvvI7vvJrvvJvigJjjgIjjgIzjgI7jgJTvvIjvvLvvvZvvvaLvvaPvvZ3vvL3vvInjgJXjgI/jgI3jgInigJnvvYDvvZ7igKZgO2ZvcihsZXQgbj0wO248ZS5sZW5ndGg7bisrKUtlLnNldChlLmNoYXJDb2RlQXQobiksMSk7Y29uc3QgdD0iLiw7OiI7Zm9yKGxldCBuPTA7bjx0Lmxlbmd0aDtuKyspS2Uuc2V0KHQuY2hhckNvZGVBdChuKSwyKX1yZXR1cm4gS2V9Y2xhc3MgX3R7c3RhdGljIF9jcmVhdGVMaW5rKHQsbixzLHIsaSl7bGV0IGw9aS0xO2Rve2NvbnN0IG89bi5jaGFyQ29kZUF0KGwpO2lmKHQuZ2V0KG8pIT09MilicmVhaztsLS19d2hpbGUobD5yKTtpZihyPjApe2NvbnN0IG89bi5jaGFyQ29kZUF0KHItMSksdT1uLmNoYXJDb2RlQXQobCk7KG89PT00MCYmdT09PTQxfHxvPT09OTEmJnU9PT05M3x8bz09PTEyMyYmdT09PTEyNSkmJmwtLX1yZXR1cm57cmFuZ2U6e3N0YXJ0TGluZU51bWJlcjpzLHN0YXJ0Q29sdW1uOnIrMSxlbmRMaW5lTnVtYmVyOnMsZW5kQ29sdW1uOmwrMn0sdXJsOm4uc3Vic3RyaW5nKHIsbCsxKX19c3RhdGljIGNvbXB1dGVMaW5rcyh0LG49WmkoKSl7Y29uc3Qgcz1LaSgpLHI9W107Zm9yKGxldCBpPTEsbD10LmdldExpbmVDb3VudCgpO2k8PWw7aSsrKXtjb25zdCBvPXQuZ2V0TGluZUNvbnRlbnQoaSksdT1vLmxlbmd0aDtsZXQgYz0wLGY9MCxoPTAsZD0xLG09ITEsZz0hMSxiPSExLHc9ITE7Zm9yKDtjPHU7KXtsZXQgTj0hMTtjb25zdCBDPW8uY2hhckNvZGVBdChjKTtpZihkPT09MTMpe2xldCBTO3N3aXRjaChDKXtjYXNlIDQwOm09ITAsUz0wO2JyZWFrO2Nhc2UgNDE6Uz1tPzA6MTticmVhaztjYXNlIDkxOmI9ITAsZz0hMCxTPTA7YnJlYWs7Y2FzZSA5MzpiPSExLFM9Zz8wOjE7YnJlYWs7Y2FzZSAxMjM6dz0hMCxTPTA7YnJlYWs7Y2FzZSAxMjU6Uz13PzA6MTticmVhaztjYXNlIDM5OmNhc2UgMzQ6Y2FzZSA5NjpoPT09Qz9TPTE6aD09PTM5fHxoPT09MzR8fGg9PT05Nj9TPTA6Uz0xO2JyZWFrO2Nhc2UgNDI6Uz1oPT09NDI/MTowO2JyZWFrO2Nhc2UgMTI0OlM9aD09PTEyND8xOjA7YnJlYWs7Y2FzZSAzMjpTPWI/MDoxO2JyZWFrO2RlZmF1bHQ6Uz1zLmdldChDKX1TPT09MSYmKHIucHVzaChfdC5fY3JlYXRlTGluayhzLG8saSxmLGMpKSxOPSEwKX1lbHNlIGlmKGQ9PT0xMil7bGV0IFM7Qz09PTkxPyhnPSEwLFM9MCk6Uz1zLmdldChDKSxTPT09MT9OPSEwOmQ9MTN9ZWxzZSBkPW4ubmV4dFN0YXRlKGQsQyksZD09PTAmJihOPSEwKTtOJiYoZD0xLG09ITEsZz0hMSx3PSExLGY9YysxLGg9QyksYysrfWQ9PT0xMyYmci5wdXNoKF90Ll9jcmVhdGVMaW5rKHMsbyxpLGYsdSkpfXJldHVybiByfX1mdW5jdGlvbiBlMShlKXtyZXR1cm4hZXx8dHlwZW9mIGUuZ2V0TGluZUNvdW50IT0iZnVuY3Rpb24ifHx0eXBlb2YgZS5nZXRMaW5lQ29udGVudCE9ImZ1bmN0aW9uIj9bXTpfdC5jb21wdXRlTGlua3MoZSl9Y29uc3QgTXQ9Y2xhc3MgTXR7Y29uc3RydWN0b3IoKXt0aGlzLl9kZWZhdWx0VmFsdWVTZXQ9W1sidHJ1ZSIsImZhbHNlIl0sWyJUcnVlIiwiRmFsc2UiXSxbIlByaXZhdGUiLCJQdWJsaWMiLCJGcmllbmQiLCJSZWFkT25seSIsIlBhcnRpYWwiLCJQcm90ZWN0ZWQiLCJXcml0ZU9ubHkiXSxbInB1YmxpYyIsInByb3RlY3RlZCIsInByaXZhdGUiXV19bmF2aWdhdGVWYWx1ZVNldCh0LG4scyxyLGkpe2lmKHQmJm4pe2NvbnN0IGw9dGhpcy5kb05hdmlnYXRlVmFsdWVTZXQobixpKTtpZihsKXJldHVybntyYW5nZTp0LHZhbHVlOmx9fWlmKHMmJnIpe2NvbnN0IGw9dGhpcy5kb05hdmlnYXRlVmFsdWVTZXQocixpKTtpZihsKXJldHVybntyYW5nZTpzLHZhbHVlOmx9fXJldHVybiBudWxsfWRvTmF2aWdhdGVWYWx1ZVNldCh0LG4pe2NvbnN0IHM9dGhpcy5udW1iZXJSZXBsYWNlKHQsbik7cmV0dXJuIHMhPT1udWxsP3M6dGhpcy50ZXh0UmVwbGFjZSh0LG4pfW51bWJlclJlcGxhY2UodCxuKXtjb25zdCBzPU1hdGgucG93KDEwLHQubGVuZ3RoLSh0Lmxhc3RJbmRleE9mKCIuIikrMSkpO2xldCByPU51bWJlcih0KTtjb25zdCBpPXBhcnNlRmxvYXQodCk7cmV0dXJuIWlzTmFOKHIpJiYhaXNOYU4oaSkmJnI9PT1pP3I9PT0wJiYhbj9udWxsOihyPU1hdGguZmxvb3IocipzKSxyKz1uP3M6LXMsU3RyaW5nKHIvcykpOm51bGx9dGV4dFJlcGxhY2UodCxuKXtyZXR1cm4gdGhpcy52YWx1ZVNldHNSZXBsYWNlKHRoaXMuX2RlZmF1bHRWYWx1ZVNldCx0LG4pfXZhbHVlU2V0c1JlcGxhY2UodCxuLHMpe2xldCByPW51bGw7Zm9yKGxldCBpPTAsbD10Lmxlbmd0aDtyPT09bnVsbCYmaTxsO2krKylyPXRoaXMudmFsdWVTZXRSZXBsYWNlKHRbaV0sbixzKTtyZXR1cm4gcn12YWx1ZVNldFJlcGxhY2UodCxuLHMpe2xldCByPXQuaW5kZXhPZihuKTtyZXR1cm4gcj49MD8ocis9cz8xOi0xLHI8MD9yPXQubGVuZ3RoLTE6ciU9dC5sZW5ndGgsdFtyXSk6bnVsbH19O010LklOU1RBTkNFPW5ldyBNdDtsZXQgbm49TXQ7Y29uc3QgWW49T2JqZWN0LmZyZWV6ZShmdW5jdGlvbihlLHQpe2NvbnN0IG49c2V0VGltZW91dChlLmJpbmQodCksMCk7cmV0dXJue2Rpc3Bvc2UoKXtjbGVhclRpbWVvdXQobil9fX0pO3ZhciBwdDsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdChuKXtyZXR1cm4gbj09PWUuTm9uZXx8bj09PWUuQ2FuY2VsbGVkfHxuIGluc3RhbmNlb2Ygd3Q/ITA6IW58fHR5cGVvZiBuIT0ib2JqZWN0Ij8hMTp0eXBlb2Ygbi5pc0NhbmNlbGxhdGlvblJlcXVlc3RlZD09ImJvb2xlYW4iJiZ0eXBlb2Ygbi5vbkNhbmNlbGxhdGlvblJlcXVlc3RlZD09ImZ1bmN0aW9uIn1lLmlzQ2FuY2VsbGF0aW9uVG9rZW49dCxlLk5vbmU9T2JqZWN0LmZyZWV6ZSh7aXNDYW5jZWxsYXRpb25SZXF1ZXN0ZWQ6ITEsb25DYW5jZWxsYXRpb25SZXF1ZXN0ZWQ6VnQuTm9uZX0pLGUuQ2FuY2VsbGVkPU9iamVjdC5mcmVlemUoe2lzQ2FuY2VsbGF0aW9uUmVxdWVzdGVkOiEwLG9uQ2FuY2VsbGF0aW9uUmVxdWVzdGVkOllufSl9KShwdHx8KHB0PXt9KSk7Y2xhc3Mgd3R7Y29uc3RydWN0b3IoKXt0aGlzLl9pc0NhbmNlbGxlZD0hMSx0aGlzLl9lbWl0dGVyPW51bGx9Y2FuY2VsKCl7dGhpcy5faXNDYW5jZWxsZWR8fCh0aGlzLl9pc0NhbmNlbGxlZD0hMCx0aGlzLl9lbWl0dGVyJiYodGhpcy5fZW1pdHRlci5maXJlKHZvaWQgMCksdGhpcy5kaXNwb3NlKCkpKX1nZXQgaXNDYW5jZWxsYXRpb25SZXF1ZXN0ZWQoKXtyZXR1cm4gdGhpcy5faXNDYW5jZWxsZWR9Z2V0IG9uQ2FuY2VsbGF0aW9uUmVxdWVzdGVkKCl7cmV0dXJuIHRoaXMuX2lzQ2FuY2VsbGVkP1luOih0aGlzLl9lbWl0dGVyfHwodGhpcy5fZW1pdHRlcj1uZXcgbGUpLHRoaXMuX2VtaXR0ZXIuZXZlbnQpfWRpc3Bvc2UoKXt0aGlzLl9lbWl0dGVyJiYodGhpcy5fZW1pdHRlci5kaXNwb3NlKCksdGhpcy5fZW1pdHRlcj1udWxsKX19Y2xhc3MgdDF7Y29uc3RydWN0b3IodCl7dGhpcy5fdG9rZW49dm9pZCAwLHRoaXMuX3BhcmVudExpc3RlbmVyPXZvaWQgMCx0aGlzLl9wYXJlbnRMaXN0ZW5lcj10JiZ0Lm9uQ2FuY2VsbGF0aW9uUmVxdWVzdGVkKHRoaXMuY2FuY2VsLHRoaXMpfWdldCB0b2tlbigpe3JldHVybiB0aGlzLl90b2tlbnx8KHRoaXMuX3Rva2VuPW5ldyB3dCksdGhpcy5fdG9rZW59Y2FuY2VsKCl7dGhpcy5fdG9rZW4/dGhpcy5fdG9rZW4gaW5zdGFuY2VvZiB3dCYmdGhpcy5fdG9rZW4uY2FuY2VsKCk6dGhpcy5fdG9rZW49cHQuQ2FuY2VsbGVkfWRpc3Bvc2UodD0hMSl7dCYmdGhpcy5jYW5jZWwoKSx0aGlzLl9wYXJlbnRMaXN0ZW5lcj8uZGlzcG9zZSgpLHRoaXMuX3Rva2VuP3RoaXMuX3Rva2VuIGluc3RhbmNlb2Ygd3QmJnRoaXMuX3Rva2VuLmRpc3Bvc2UoKTp0aGlzLl90b2tlbj1wdC5Ob25lfX1jbGFzcyBzbntjb25zdHJ1Y3Rvcigpe3RoaXMuX2tleUNvZGVUb1N0cj1bXSx0aGlzLl9zdHJUb0tleUNvZGU9T2JqZWN0LmNyZWF0ZShudWxsKX1kZWZpbmUodCxuKXt0aGlzLl9rZXlDb2RlVG9TdHJbdF09bix0aGlzLl9zdHJUb0tleUNvZGVbbi50b0xvd2VyQ2FzZSgpXT10fWtleUNvZGVUb1N0cih0KXtyZXR1cm4gdGhpcy5fa2V5Q29kZVRvU3RyW3RdfXN0clRvS2V5Q29kZSh0KXtyZXR1cm4gdGhpcy5fc3RyVG9LZXlDb2RlW3QudG9Mb3dlckNhc2UoKV18fDB9fWNvbnN0IEx0PW5ldyBzbixybj1uZXcgc24sYW49bmV3IHNuLG4xPW5ldyBBcnJheSgyMzApLHMxPU9iamVjdC5jcmVhdGUobnVsbCkscjE9T2JqZWN0LmNyZWF0ZShudWxsKTsoZnVuY3Rpb24oKXtjb25zdCBlPSIiLHQ9W1sxLDAsIk5vbmUiLDAsInVua25vd24iLDAsIlZLX1VOS05PV04iLGUsZV0sWzEsMSwiSHlwZXIiLDAsZSwwLGUsZSxlXSxbMSwyLCJTdXBlciIsMCxlLDAsZSxlLGVdLFsxLDMsIkZuIiwwLGUsMCxlLGUsZV0sWzEsNCwiRm5Mb2NrIiwwLGUsMCxlLGUsZV0sWzEsNSwiU3VzcGVuZCIsMCxlLDAsZSxlLGVdLFsxLDYsIlJlc3VtZSIsMCxlLDAsZSxlLGVdLFsxLDcsIlR1cmJvIiwwLGUsMCxlLGUsZV0sWzEsOCwiU2xlZXAiLDAsZSwwLCJWS19TTEVFUCIsZSxlXSxbMSw5LCJXYWtlVXAiLDAsZSwwLGUsZSxlXSxbMCwxMCwiS2V5QSIsMzEsIkEiLDY1LCJWS19BIixlLGVdLFswLDExLCJLZXlCIiwzMiwiQiIsNjYsIlZLX0IiLGUsZV0sWzAsMTIsIktleUMiLDMzLCJDIiw2NywiVktfQyIsZSxlXSxbMCwxMywiS2V5RCIsMzQsIkQiLDY4LCJWS19EIixlLGVdLFswLDE0LCJLZXlFIiwzNSwiRSIsNjksIlZLX0UiLGUsZV0sWzAsMTUsIktleUYiLDM2LCJGIiw3MCwiVktfRiIsZSxlXSxbMCwxNiwiS2V5RyIsMzcsIkciLDcxLCJWS19HIixlLGVdLFswLDE3LCJLZXlIIiwzOCwiSCIsNzIsIlZLX0giLGUsZV0sWzAsMTgsIktleUkiLDM5LCJJIiw3MywiVktfSSIsZSxlXSxbMCwxOSwiS2V5SiIsNDAsIkoiLDc0LCJWS19KIixlLGVdLFswLDIwLCJLZXlLIiw0MSwiSyIsNzUsIlZLX0siLGUsZV0sWzAsMjEsIktleUwiLDQyLCJMIiw3NiwiVktfTCIsZSxlXSxbMCwyMiwiS2V5TSIsNDMsIk0iLDc3LCJWS19NIixlLGVdLFswLDIzLCJLZXlOIiw0NCwiTiIsNzgsIlZLX04iLGUsZV0sWzAsMjQsIktleU8iLDQ1LCJPIiw3OSwiVktfTyIsZSxlXSxbMCwyNSwiS2V5UCIsNDYsIlAiLDgwLCJWS19QIixlLGVdLFswLDI2LCJLZXlRIiw0NywiUSIsODEsIlZLX1EiLGUsZV0sWzAsMjcsIktleVIiLDQ4LCJSIiw4MiwiVktfUiIsZSxlXSxbMCwyOCwiS2V5UyIsNDksIlMiLDgzLCJWS19TIixlLGVdLFswLDI5LCJLZXlUIiw1MCwiVCIsODQsIlZLX1QiLGUsZV0sWzAsMzAsIktleVUiLDUxLCJVIiw4NSwiVktfVSIsZSxlXSxbMCwzMSwiS2V5ViIsNTIsIlYiLDg2LCJWS19WIixlLGVdLFswLDMyLCJLZXlXIiw1MywiVyIsODcsIlZLX1ciLGUsZV0sWzAsMzMsIktleVgiLDU0LCJYIiw4OCwiVktfWCIsZSxlXSxbMCwzNCwiS2V5WSIsNTUsIlkiLDg5LCJWS19ZIixlLGVdLFswLDM1LCJLZXlaIiw1NiwiWiIsOTAsIlZLX1oiLGUsZV0sWzAsMzYsIkRpZ2l0MSIsMjIsIjEiLDQ5LCJWS18xIixlLGVdLFswLDM3LCJEaWdpdDIiLDIzLCIyIiw1MCwiVktfMiIsZSxlXSxbMCwzOCwiRGlnaXQzIiwyNCwiMyIsNTEsIlZLXzMiLGUsZV0sWzAsMzksIkRpZ2l0NCIsMjUsIjQiLDUyLCJWS180IixlLGVdLFswLDQwLCJEaWdpdDUiLDI2LCI1Iiw1MywiVktfNSIsZSxlXSxbMCw0MSwiRGlnaXQ2IiwyNywiNiIsNTQsIlZLXzYiLGUsZV0sWzAsNDIsIkRpZ2l0NyIsMjgsIjciLDU1LCJWS183IixlLGVdLFswLDQzLCJEaWdpdDgiLDI5LCI4Iiw1NiwiVktfOCIsZSxlXSxbMCw0NCwiRGlnaXQ5IiwzMCwiOSIsNTcsIlZLXzkiLGUsZV0sWzAsNDUsIkRpZ2l0MCIsMjEsIjAiLDQ4LCJWS18wIixlLGVdLFsxLDQ2LCJFbnRlciIsMywiRW50ZXIiLDEzLCJWS19SRVRVUk4iLGUsZV0sWzEsNDcsIkVzY2FwZSIsOSwiRXNjYXBlIiwyNywiVktfRVNDQVBFIixlLGVdLFsxLDQ4LCJCYWNrc3BhY2UiLDEsIkJhY2tzcGFjZSIsOCwiVktfQkFDSyIsZSxlXSxbMSw0OSwiVGFiIiwyLCJUYWIiLDksIlZLX1RBQiIsZSxlXSxbMSw1MCwiU3BhY2UiLDEwLCJTcGFjZSIsMzIsIlZLX1NQQUNFIixlLGVdLFswLDUxLCJNaW51cyIsODgsIi0iLDE4OSwiVktfT0VNX01JTlVTIiwiLSIsIk9FTV9NSU5VUyJdLFswLDUyLCJFcXVhbCIsODYsIj0iLDE4NywiVktfT0VNX1BMVVMiLCI9IiwiT0VNX1BMVVMiXSxbMCw1MywiQnJhY2tldExlZnQiLDkyLCJbIiwyMTksIlZLX09FTV80IiwiWyIsIk9FTV80Il0sWzAsNTQsIkJyYWNrZXRSaWdodCIsOTQsIl0iLDIyMSwiVktfT0VNXzYiLCJdIiwiT0VNXzYiXSxbMCw1NSwiQmFja3NsYXNoIiw5MywiXFwiLDIyMCwiVktfT0VNXzUiLCJcXCIsIk9FTV81Il0sWzAsNTYsIkludGxIYXNoIiwwLGUsMCxlLGUsZV0sWzAsNTcsIlNlbWljb2xvbiIsODUsIjsiLDE4NiwiVktfT0VNXzEiLCI7IiwiT0VNXzEiXSxbMCw1OCwiUXVvdGUiLDk1LCInIiwyMjIsIlZLX09FTV83IiwiJyIsIk9FTV83Il0sWzAsNTksIkJhY2txdW90ZSIsOTEsImAiLDE5MiwiVktfT0VNXzMiLCJgIiwiT0VNXzMiXSxbMCw2MCwiQ29tbWEiLDg3LCIsIiwxODgsIlZLX09FTV9DT01NQSIsIiwiLCJPRU1fQ09NTUEiXSxbMCw2MSwiUGVyaW9kIiw4OSwiLiIsMTkwLCJWS19PRU1fUEVSSU9EIiwiLiIsIk9FTV9QRVJJT0QiXSxbMCw2MiwiU2xhc2giLDkwLCIvIiwxOTEsIlZLX09FTV8yIiwiLyIsIk9FTV8yIl0sWzEsNjMsIkNhcHNMb2NrIiw4LCJDYXBzTG9jayIsMjAsIlZLX0NBUElUQUwiLGUsZV0sWzEsNjQsIkYxIiw1OSwiRjEiLDExMiwiVktfRjEiLGUsZV0sWzEsNjUsIkYyIiw2MCwiRjIiLDExMywiVktfRjIiLGUsZV0sWzEsNjYsIkYzIiw2MSwiRjMiLDExNCwiVktfRjMiLGUsZV0sWzEsNjcsIkY0Iiw2MiwiRjQiLDExNSwiVktfRjQiLGUsZV0sWzEsNjgsIkY1Iiw2MywiRjUiLDExNiwiVktfRjUiLGUsZV0sWzEsNjksIkY2Iiw2NCwiRjYiLDExNywiVktfRjYiLGUsZV0sWzEsNzAsIkY3Iiw2NSwiRjciLDExOCwiVktfRjciLGUsZV0sWzEsNzEsIkY4Iiw2NiwiRjgiLDExOSwiVktfRjgiLGUsZV0sWzEsNzIsIkY5Iiw2NywiRjkiLDEyMCwiVktfRjkiLGUsZV0sWzEsNzMsIkYxMCIsNjgsIkYxMCIsMTIxLCJWS19GMTAiLGUsZV0sWzEsNzQsIkYxMSIsNjksIkYxMSIsMTIyLCJWS19GMTEiLGUsZV0sWzEsNzUsIkYxMiIsNzAsIkYxMiIsMTIzLCJWS19GMTIiLGUsZV0sWzEsNzYsIlByaW50U2NyZWVuIiwwLGUsMCxlLGUsZV0sWzEsNzcsIlNjcm9sbExvY2siLDg0LCJTY3JvbGxMb2NrIiwxNDUsIlZLX1NDUk9MTCIsZSxlXSxbMSw3OCwiUGF1c2UiLDcsIlBhdXNlQnJlYWsiLDE5LCJWS19QQVVTRSIsZSxlXSxbMSw3OSwiSW5zZXJ0IiwxOSwiSW5zZXJ0Iiw0NSwiVktfSU5TRVJUIixlLGVdLFsxLDgwLCJIb21lIiwxNCwiSG9tZSIsMzYsIlZLX0hPTUUiLGUsZV0sWzEsODEsIlBhZ2VVcCIsMTEsIlBhZ2VVcCIsMzMsIlZLX1BSSU9SIixlLGVdLFsxLDgyLCJEZWxldGUiLDIwLCJEZWxldGUiLDQ2LCJWS19ERUxFVEUiLGUsZV0sWzEsODMsIkVuZCIsMTMsIkVuZCIsMzUsIlZLX0VORCIsZSxlXSxbMSw4NCwiUGFnZURvd24iLDEyLCJQYWdlRG93biIsMzQsIlZLX05FWFQiLGUsZV0sWzEsODUsIkFycm93UmlnaHQiLDE3LCJSaWdodEFycm93IiwzOSwiVktfUklHSFQiLCJSaWdodCIsZV0sWzEsODYsIkFycm93TGVmdCIsMTUsIkxlZnRBcnJvdyIsMzcsIlZLX0xFRlQiLCJMZWZ0IixlXSxbMSw4NywiQXJyb3dEb3duIiwxOCwiRG93bkFycm93Iiw0MCwiVktfRE9XTiIsIkRvd24iLGVdLFsxLDg4LCJBcnJvd1VwIiwxNiwiVXBBcnJvdyIsMzgsIlZLX1VQIiwiVXAiLGVdLFsxLDg5LCJOdW1Mb2NrIiw4MywiTnVtTG9jayIsMTQ0LCJWS19OVU1MT0NLIixlLGVdLFsxLDkwLCJOdW1wYWREaXZpZGUiLDExMywiTnVtUGFkX0RpdmlkZSIsMTExLCJWS19ESVZJREUiLGUsZV0sWzEsOTEsIk51bXBhZE11bHRpcGx5IiwxMDgsIk51bVBhZF9NdWx0aXBseSIsMTA2LCJWS19NVUxUSVBMWSIsZSxlXSxbMSw5MiwiTnVtcGFkU3VidHJhY3QiLDExMSwiTnVtUGFkX1N1YnRyYWN0IiwxMDksIlZLX1NVQlRSQUNUIixlLGVdLFsxLDkzLCJOdW1wYWRBZGQiLDEwOSwiTnVtUGFkX0FkZCIsMTA3LCJWS19BREQiLGUsZV0sWzEsOTQsIk51bXBhZEVudGVyIiwzLGUsMCxlLGUsZV0sWzEsOTUsIk51bXBhZDEiLDk5LCJOdW1QYWQxIiw5NywiVktfTlVNUEFEMSIsZSxlXSxbMSw5NiwiTnVtcGFkMiIsMTAwLCJOdW1QYWQyIiw5OCwiVktfTlVNUEFEMiIsZSxlXSxbMSw5NywiTnVtcGFkMyIsMTAxLCJOdW1QYWQzIiw5OSwiVktfTlVNUEFEMyIsZSxlXSxbMSw5OCwiTnVtcGFkNCIsMTAyLCJOdW1QYWQ0IiwxMDAsIlZLX05VTVBBRDQiLGUsZV0sWzEsOTksIk51bXBhZDUiLDEwMywiTnVtUGFkNSIsMTAxLCJWS19OVU1QQUQ1IixlLGVdLFsxLDEwMCwiTnVtcGFkNiIsMTA0LCJOdW1QYWQ2IiwxMDIsIlZLX05VTVBBRDYiLGUsZV0sWzEsMTAxLCJOdW1wYWQ3IiwxMDUsIk51bVBhZDciLDEwMywiVktfTlVNUEFENyIsZSxlXSxbMSwxMDIsIk51bXBhZDgiLDEwNiwiTnVtUGFkOCIsMTA0LCJWS19OVU1QQUQ4IixlLGVdLFsxLDEwMywiTnVtcGFkOSIsMTA3LCJOdW1QYWQ5IiwxMDUsIlZLX05VTVBBRDkiLGUsZV0sWzEsMTA0LCJOdW1wYWQwIiw5OCwiTnVtUGFkMCIsOTYsIlZLX05VTVBBRDAiLGUsZV0sWzEsMTA1LCJOdW1wYWREZWNpbWFsIiwxMTIsIk51bVBhZF9EZWNpbWFsIiwxMTAsIlZLX0RFQ0lNQUwiLGUsZV0sWzAsMTA2LCJJbnRsQmFja3NsYXNoIiw5NywiT0VNXzEwMiIsMjI2LCJWS19PRU1fMTAyIixlLGVdLFsxLDEwNywiQ29udGV4dE1lbnUiLDU4LCJDb250ZXh0TWVudSIsOTMsZSxlLGVdLFsxLDEwOCwiUG93ZXIiLDAsZSwwLGUsZSxlXSxbMSwxMDksIk51bXBhZEVxdWFsIiwwLGUsMCxlLGUsZV0sWzEsMTEwLCJGMTMiLDcxLCJGMTMiLDEyNCwiVktfRjEzIixlLGVdLFsxLDExMSwiRjE0Iiw3MiwiRjE0IiwxMjUsIlZLX0YxNCIsZSxlXSxbMSwxMTIsIkYxNSIsNzMsIkYxNSIsMTI2LCJWS19GMTUiLGUsZV0sWzEsMTEzLCJGMTYiLDc0LCJGMTYiLDEyNywiVktfRjE2IixlLGVdLFsxLDExNCwiRjE3Iiw3NSwiRjE3IiwxMjgsIlZLX0YxNyIsZSxlXSxbMSwxMTUsIkYxOCIsNzYsIkYxOCIsMTI5LCJWS19GMTgiLGUsZV0sWzEsMTE2LCJGMTkiLDc3LCJGMTkiLDEzMCwiVktfRjE5IixlLGVdLFsxLDExNywiRjIwIiw3OCwiRjIwIiwxMzEsIlZLX0YyMCIsZSxlXSxbMSwxMTgsIkYyMSIsNzksIkYyMSIsMTMyLCJWS19GMjEiLGUsZV0sWzEsMTE5LCJGMjIiLDgwLCJGMjIiLDEzMywiVktfRjIyIixlLGVdLFsxLDEyMCwiRjIzIiw4MSwiRjIzIiwxMzQsIlZLX0YyMyIsZSxlXSxbMSwxMjEsIkYyNCIsODIsIkYyNCIsMTM1LCJWS19GMjQiLGUsZV0sWzEsMTIyLCJPcGVuIiwwLGUsMCxlLGUsZV0sWzEsMTIzLCJIZWxwIiwwLGUsMCxlLGUsZV0sWzEsMTI0LCJTZWxlY3QiLDAsZSwwLGUsZSxlXSxbMSwxMjUsIkFnYWluIiwwLGUsMCxlLGUsZV0sWzEsMTI2LCJVbmRvIiwwLGUsMCxlLGUsZV0sWzEsMTI3LCJDdXQiLDAsZSwwLGUsZSxlXSxbMSwxMjgsIkNvcHkiLDAsZSwwLGUsZSxlXSxbMSwxMjksIlBhc3RlIiwwLGUsMCxlLGUsZV0sWzEsMTMwLCJGaW5kIiwwLGUsMCxlLGUsZV0sWzEsMTMxLCJBdWRpb1ZvbHVtZU11dGUiLDExNywiQXVkaW9Wb2x1bWVNdXRlIiwxNzMsIlZLX1ZPTFVNRV9NVVRFIixlLGVdLFsxLDEzMiwiQXVkaW9Wb2x1bWVVcCIsMTE4LCJBdWRpb1ZvbHVtZVVwIiwxNzUsIlZLX1ZPTFVNRV9VUCIsZSxlXSxbMSwxMzMsIkF1ZGlvVm9sdW1lRG93biIsMTE5LCJBdWRpb1ZvbHVtZURvd24iLDE3NCwiVktfVk9MVU1FX0RPV04iLGUsZV0sWzEsMTM0LCJOdW1wYWRDb21tYSIsMTEwLCJOdW1QYWRfU2VwYXJhdG9yIiwxMDgsIlZLX1NFUEFSQVRPUiIsZSxlXSxbMCwxMzUsIkludGxSbyIsMTE1LCJBQk5UX0MxIiwxOTMsIlZLX0FCTlRfQzEiLGUsZV0sWzEsMTM2LCJLYW5hTW9kZSIsMCxlLDAsZSxlLGVdLFswLDEzNywiSW50bFllbiIsMCxlLDAsZSxlLGVdLFsxLDEzOCwiQ29udmVydCIsMCxlLDAsZSxlLGVdLFsxLDEzOSwiTm9uQ29udmVydCIsMCxlLDAsZSxlLGVdLFsxLDE0MCwiTGFuZzEiLDAsZSwwLGUsZSxlXSxbMSwxNDEsIkxhbmcyIiwwLGUsMCxlLGUsZV0sWzEsMTQyLCJMYW5nMyIsMCxlLDAsZSxlLGVdLFsxLDE0MywiTGFuZzQiLDAsZSwwLGUsZSxlXSxbMSwxNDQsIkxhbmc1IiwwLGUsMCxlLGUsZV0sWzEsMTQ1LCJBYm9ydCIsMCxlLDAsZSxlLGVdLFsxLDE0NiwiUHJvcHMiLDAsZSwwLGUsZSxlXSxbMSwxNDcsIk51bXBhZFBhcmVuTGVmdCIsMCxlLDAsZSxlLGVdLFsxLDE0OCwiTnVtcGFkUGFyZW5SaWdodCIsMCxlLDAsZSxlLGVdLFsxLDE0OSwiTnVtcGFkQmFja3NwYWNlIiwwLGUsMCxlLGUsZV0sWzEsMTUwLCJOdW1wYWRNZW1vcnlTdG9yZSIsMCxlLDAsZSxlLGVdLFsxLDE1MSwiTnVtcGFkTWVtb3J5UmVjYWxsIiwwLGUsMCxlLGUsZV0sWzEsMTUyLCJOdW1wYWRNZW1vcnlDbGVhciIsMCxlLDAsZSxlLGVdLFsxLDE1MywiTnVtcGFkTWVtb3J5QWRkIiwwLGUsMCxlLGUsZV0sWzEsMTU0LCJOdW1wYWRNZW1vcnlTdWJ0cmFjdCIsMCxlLDAsZSxlLGVdLFsxLDE1NSwiTnVtcGFkQ2xlYXIiLDEzMSwiQ2xlYXIiLDEyLCJWS19DTEVBUiIsZSxlXSxbMSwxNTYsIk51bXBhZENsZWFyRW50cnkiLDAsZSwwLGUsZSxlXSxbMSwwLGUsNSwiQ3RybCIsMTcsIlZLX0NPTlRST0wiLGUsZV0sWzEsMCxlLDQsIlNoaWZ0IiwxNiwiVktfU0hJRlQiLGUsZV0sWzEsMCxlLDYsIkFsdCIsMTgsIlZLX01FTlUiLGUsZV0sWzEsMCxlLDU3LCJNZXRhIiw5MSwiVktfQ09NTUFORCIsZSxlXSxbMSwxNTcsIkNvbnRyb2xMZWZ0Iiw1LGUsMCwiVktfTENPTlRST0wiLGUsZV0sWzEsMTU4LCJTaGlmdExlZnQiLDQsZSwwLCJWS19MU0hJRlQiLGUsZV0sWzEsMTU5LCJBbHRMZWZ0Iiw2LGUsMCwiVktfTE1FTlUiLGUsZV0sWzEsMTYwLCJNZXRhTGVmdCIsNTcsZSwwLCJWS19MV0lOIixlLGVdLFsxLDE2MSwiQ29udHJvbFJpZ2h0Iiw1LGUsMCwiVktfUkNPTlRST0wiLGUsZV0sWzEsMTYyLCJTaGlmdFJpZ2h0Iiw0LGUsMCwiVktfUlNISUZUIixlLGVdLFsxLDE2MywiQWx0UmlnaHQiLDYsZSwwLCJWS19STUVOVSIsZSxlXSxbMSwxNjQsIk1ldGFSaWdodCIsNTcsZSwwLCJWS19SV0lOIixlLGVdLFsxLDE2NSwiQnJpZ2h0bmVzc1VwIiwwLGUsMCxlLGUsZV0sWzEsMTY2LCJCcmlnaHRuZXNzRG93biIsMCxlLDAsZSxlLGVdLFsxLDE2NywiTWVkaWFQbGF5IiwwLGUsMCxlLGUsZV0sWzEsMTY4LCJNZWRpYVJlY29yZCIsMCxlLDAsZSxlLGVdLFsxLDE2OSwiTWVkaWFGYXN0Rm9yd2FyZCIsMCxlLDAsZSxlLGVdLFsxLDE3MCwiTWVkaWFSZXdpbmQiLDAsZSwwLGUsZSxlXSxbMSwxNzEsIk1lZGlhVHJhY2tOZXh0IiwxMjQsIk1lZGlhVHJhY2tOZXh0IiwxNzYsIlZLX01FRElBX05FWFRfVFJBQ0siLGUsZV0sWzEsMTcyLCJNZWRpYVRyYWNrUHJldmlvdXMiLDEyNSwiTWVkaWFUcmFja1ByZXZpb3VzIiwxNzcsIlZLX01FRElBX1BSRVZfVFJBQ0siLGUsZV0sWzEsMTczLCJNZWRpYVN0b3AiLDEyNiwiTWVkaWFTdG9wIiwxNzgsIlZLX01FRElBX1NUT1AiLGUsZV0sWzEsMTc0LCJFamVjdCIsMCxlLDAsZSxlLGVdLFsxLDE3NSwiTWVkaWFQbGF5UGF1c2UiLDEyNywiTWVkaWFQbGF5UGF1c2UiLDE3OSwiVktfTUVESUFfUExBWV9QQVVTRSIsZSxlXSxbMSwxNzYsIk1lZGlhU2VsZWN0IiwxMjgsIkxhdW5jaE1lZGlhUGxheWVyIiwxODEsIlZLX01FRElBX0xBVU5DSF9NRURJQV9TRUxFQ1QiLGUsZV0sWzEsMTc3LCJMYXVuY2hNYWlsIiwxMjksIkxhdW5jaE1haWwiLDE4MCwiVktfTUVESUFfTEFVTkNIX01BSUwiLGUsZV0sWzEsMTc4LCJMYXVuY2hBcHAyIiwxMzAsIkxhdW5jaEFwcDIiLDE4MywiVktfTUVESUFfTEFVTkNIX0FQUDIiLGUsZV0sWzEsMTc5LCJMYXVuY2hBcHAxIiwwLGUsMCwiVktfTUVESUFfTEFVTkNIX0FQUDEiLGUsZV0sWzEsMTgwLCJTZWxlY3RUYXNrIiwwLGUsMCxlLGUsZV0sWzEsMTgxLCJMYXVuY2hTY3JlZW5TYXZlciIsMCxlLDAsZSxlLGVdLFsxLDE4MiwiQnJvd3NlclNlYXJjaCIsMTIwLCJCcm93c2VyU2VhcmNoIiwxNzAsIlZLX0JST1dTRVJfU0VBUkNIIixlLGVdLFsxLDE4MywiQnJvd3NlckhvbWUiLDEyMSwiQnJvd3NlckhvbWUiLDE3MiwiVktfQlJPV1NFUl9IT01FIixlLGVdLFsxLDE4NCwiQnJvd3NlckJhY2siLDEyMiwiQnJvd3NlckJhY2siLDE2NiwiVktfQlJPV1NFUl9CQUNLIixlLGVdLFsxLDE4NSwiQnJvd3NlckZvcndhcmQiLDEyMywiQnJvd3NlckZvcndhcmQiLDE2NywiVktfQlJPV1NFUl9GT1JXQVJEIixlLGVdLFsxLDE4NiwiQnJvd3NlclN0b3AiLDAsZSwwLCJWS19CUk9XU0VSX1NUT1AiLGUsZV0sWzEsMTg3LCJCcm93c2VyUmVmcmVzaCIsMCxlLDAsIlZLX0JST1dTRVJfUkVGUkVTSCIsZSxlXSxbMSwxODgsIkJyb3dzZXJGYXZvcml0ZXMiLDAsZSwwLCJWS19CUk9XU0VSX0ZBVk9SSVRFUyIsZSxlXSxbMSwxODksIlpvb21Ub2dnbGUiLDAsZSwwLGUsZSxlXSxbMSwxOTAsIk1haWxSZXBseSIsMCxlLDAsZSxlLGVdLFsxLDE5MSwiTWFpbEZvcndhcmQiLDAsZSwwLGUsZSxlXSxbMSwxOTIsIk1haWxTZW5kIiwwLGUsMCxlLGUsZV0sWzEsMCxlLDExNCwiS2V5SW5Db21wb3NpdGlvbiIsMjI5LGUsZSxlXSxbMSwwLGUsMTE2LCJBQk5UX0MyIiwxOTQsIlZLX0FCTlRfQzIiLGUsZV0sWzEsMCxlLDk2LCJPRU1fOCIsMjIzLCJWS19PRU1fOCIsZSxlXSxbMSwwLGUsMCxlLDAsIlZLX0tBTkEiLGUsZV0sWzEsMCxlLDAsZSwwLCJWS19IQU5HVUwiLGUsZV0sWzEsMCxlLDAsZSwwLCJWS19KVU5KQSIsZSxlXSxbMSwwLGUsMCxlLDAsIlZLX0ZJTkFMIixlLGVdLFsxLDAsZSwwLGUsMCwiVktfSEFOSkEiLGUsZV0sWzEsMCxlLDAsZSwwLCJWS19LQU5KSSIsZSxlXSxbMSwwLGUsMCxlLDAsIlZLX0NPTlZFUlQiLGUsZV0sWzEsMCxlLDAsZSwwLCJWS19OT05DT05WRVJUIixlLGVdLFsxLDAsZSwwLGUsMCwiVktfQUNDRVBUIixlLGVdLFsxLDAsZSwwLGUsMCwiVktfTU9ERUNIQU5HRSIsZSxlXSxbMSwwLGUsMCxlLDAsIlZLX1NFTEVDVCIsZSxlXSxbMSwwLGUsMCxlLDAsIlZLX1BSSU5UIixlLGVdLFsxLDAsZSwwLGUsMCwiVktfRVhFQ1VURSIsZSxlXSxbMSwwLGUsMCxlLDAsIlZLX1NOQVBTSE9UIixlLGVdLFsxLDAsZSwwLGUsMCwiVktfSEVMUCIsZSxlXSxbMSwwLGUsMCxlLDAsIlZLX0FQUFMiLGUsZV0sWzEsMCxlLDAsZSwwLCJWS19QUk9DRVNTS0VZIixlLGVdLFsxLDAsZSwwLGUsMCwiVktfUEFDS0VUIixlLGVdLFsxLDAsZSwwLGUsMCwiVktfREJFX1NCQ1NDSEFSIixlLGVdLFsxLDAsZSwwLGUsMCwiVktfREJFX0RCQ1NDSEFSIixlLGVdLFsxLDAsZSwwLGUsMCwiVktfQVRUTiIsZSxlXSxbMSwwLGUsMCxlLDAsIlZLX0NSU0VMIixlLGVdLFsxLDAsZSwwLGUsMCwiVktfRVhTRUwiLGUsZV0sWzEsMCxlLDAsZSwwLCJWS19FUkVPRiIsZSxlXSxbMSwwLGUsMCxlLDAsIlZLX1BMQVkiLGUsZV0sWzEsMCxlLDAsZSwwLCJWS19aT09NIixlLGVdLFsxLDAsZSwwLGUsMCwiVktfTk9OQU1FIixlLGVdLFsxLDAsZSwwLGUsMCwiVktfUEExIixlLGVdLFsxLDAsZSwwLGUsMCwiVktfT0VNX0NMRUFSIixlLGVdXSxuPVtdLHM9W107Zm9yKGNvbnN0IHIgb2YgdCl7Y29uc3RbaSxsLG8sdSxjLGYsaCxkLG1dPXI7aWYoc1tsXXx8KHNbbF09ITAsczFbb109bCxyMVtvLnRvTG93ZXJDYXNlKCldPWwpLCFuW3VdKXtpZihuW3VdPSEwLCFjKXRocm93IG5ldyBFcnJvcihgU3RyaW5nIHJlcHJlc2VudGF0aW9uIG1pc3NpbmcgZm9yIGtleSBjb2RlICR7dX0gYXJvdW5kIHNjYW4gY29kZSAke299YCk7THQuZGVmaW5lKHUsYykscm4uZGVmaW5lKHUsZHx8YyksYW4uZGVmaW5lKHUsbXx8ZHx8Yyl9ZiYmKG4xW2ZdPXUpfX0pKCk7dmFyIFpuOyhmdW5jdGlvbihlKXtmdW5jdGlvbiB0KG8pe3JldHVybiBMdC5rZXlDb2RlVG9TdHIobyl9ZS50b1N0cmluZz10O2Z1bmN0aW9uIG4obyl7cmV0dXJuIEx0LnN0clRvS2V5Q29kZShvKX1lLmZyb21TdHJpbmc9bjtmdW5jdGlvbiBzKG8pe3JldHVybiBybi5rZXlDb2RlVG9TdHIobyl9ZS50b1VzZXJTZXR0aW5nc1VTPXM7ZnVuY3Rpb24gcihvKXtyZXR1cm4gYW4ua2V5Q29kZVRvU3RyKG8pfWUudG9Vc2VyU2V0dGluZ3NHZW5lcmFsPXI7ZnVuY3Rpb24gaShvKXtyZXR1cm4gcm4uc3RyVG9LZXlDb2RlKG8pfHxhbi5zdHJUb0tleUNvZGUobyl9ZS5mcm9tVXNlclNldHRpbmdzPWk7ZnVuY3Rpb24gbChvKXtpZihvPj05OCYmbzw9MTEzKXJldHVybiBudWxsO3N3aXRjaChvKXtjYXNlIDE2OnJldHVybiJVcCI7Y2FzZSAxODpyZXR1cm4iRG93biI7Y2FzZSAxNTpyZXR1cm4iTGVmdCI7Y2FzZSAxNzpyZXR1cm4iUmlnaHQifXJldHVybiBMdC5rZXlDb2RlVG9TdHIobyl9ZS50b0VsZWN0cm9uQWNjZWxlcmF0b3I9bH0pKFpufHwoWm49e30pKTtmdW5jdGlvbiBpMShlLHQpe2NvbnN0IG49KHQmNjU1MzUpPDwxNj4+PjA7cmV0dXJuKGV8bik+Pj4wfWNsYXNzIHNlIGV4dGVuZHMga3tjb25zdHJ1Y3Rvcih0LG4scyxyKXtzdXBlcih0LG4scyxyKSx0aGlzLnNlbGVjdGlvblN0YXJ0TGluZU51bWJlcj10LHRoaXMuc2VsZWN0aW9uU3RhcnRDb2x1bW49bix0aGlzLnBvc2l0aW9uTGluZU51bWJlcj1zLHRoaXMucG9zaXRpb25Db2x1bW49cn10b1N0cmluZygpe3JldHVybiJbIit0aGlzLnNlbGVjdGlvblN0YXJ0TGluZU51bWJlcisiLCIrdGhpcy5zZWxlY3Rpb25TdGFydENvbHVtbisiIC0+ICIrdGhpcy5wb3NpdGlvbkxpbmVOdW1iZXIrIiwiK3RoaXMucG9zaXRpb25Db2x1bW4rIl0ifWVxdWFsc1NlbGVjdGlvbih0KXtyZXR1cm4gc2Uuc2VsZWN0aW9uc0VxdWFsKHRoaXMsdCl9c3RhdGljIHNlbGVjdGlvbnNFcXVhbCh0LG4pe3JldHVybiB0LnNlbGVjdGlvblN0YXJ0TGluZU51bWJlcj09PW4uc2VsZWN0aW9uU3RhcnRMaW5lTnVtYmVyJiZ0LnNlbGVjdGlvblN0YXJ0Q29sdW1uPT09bi5zZWxlY3Rpb25TdGFydENvbHVtbiYmdC5wb3NpdGlvbkxpbmVOdW1iZXI9PT1uLnBvc2l0aW9uTGluZU51bWJlciYmdC5wb3NpdGlvbkNvbHVtbj09PW4ucG9zaXRpb25Db2x1bW59Z2V0RGlyZWN0aW9uKCl7cmV0dXJuIHRoaXMuc2VsZWN0aW9uU3RhcnRMaW5lTnVtYmVyPT09dGhpcy5zdGFydExpbmVOdW1iZXImJnRoaXMuc2VsZWN0aW9uU3RhcnRDb2x1bW49PT10aGlzLnN0YXJ0Q29sdW1uPzA6MX1zZXRFbmRQb3NpdGlvbih0LG4pe3JldHVybiB0aGlzLmdldERpcmVjdGlvbigpPT09MD9uZXcgc2UodGhpcy5zdGFydExpbmVOdW1iZXIsdGhpcy5zdGFydENvbHVtbix0LG4pOm5ldyBzZSh0LG4sdGhpcy5zdGFydExpbmVOdW1iZXIsdGhpcy5zdGFydENvbHVtbil9Z2V0UG9zaXRpb24oKXtyZXR1cm4gbmV3IHEodGhpcy5wb3NpdGlvbkxpbmVOdW1iZXIsdGhpcy5wb3NpdGlvbkNvbHVtbil9Z2V0U2VsZWN0aW9uU3RhcnQoKXtyZXR1cm4gbmV3IHEodGhpcy5zZWxlY3Rpb25TdGFydExpbmVOdW1iZXIsdGhpcy5zZWxlY3Rpb25TdGFydENvbHVtbil9c2V0U3RhcnRQb3NpdGlvbih0LG4pe3JldHVybiB0aGlzLmdldERpcmVjdGlvbigpPT09MD9uZXcgc2UodCxuLHRoaXMuZW5kTGluZU51bWJlcix0aGlzLmVuZENvbHVtbik6bmV3IHNlKHRoaXMuZW5kTGluZU51bWJlcix0aGlzLmVuZENvbHVtbix0LG4pfXN0YXRpYyBmcm9tUG9zaXRpb25zKHQsbj10KXtyZXR1cm4gbmV3IHNlKHQubGluZU51bWJlcix0LmNvbHVtbixuLmxpbmVOdW1iZXIsbi5jb2x1bW4pfXN0YXRpYyBmcm9tUmFuZ2UodCxuKXtyZXR1cm4gbj09PTA/bmV3IHNlKHQuc3RhcnRMaW5lTnVtYmVyLHQuc3RhcnRDb2x1bW4sdC5lbmRMaW5lTnVtYmVyLHQuZW5kQ29sdW1uKTpuZXcgc2UodC5lbmRMaW5lTnVtYmVyLHQuZW5kQ29sdW1uLHQuc3RhcnRMaW5lTnVtYmVyLHQuc3RhcnRDb2x1bW4pfXN0YXRpYyBsaWZ0U2VsZWN0aW9uKHQpe3JldHVybiBuZXcgc2UodC5zZWxlY3Rpb25TdGFydExpbmVOdW1iZXIsdC5zZWxlY3Rpb25TdGFydENvbHVtbix0LnBvc2l0aW9uTGluZU51bWJlcix0LnBvc2l0aW9uQ29sdW1uKX1zdGF0aWMgc2VsZWN0aW9uc0FyckVxdWFsKHQsbil7aWYodCYmIW58fCF0JiZuKXJldHVybiExO2lmKCF0JiYhbilyZXR1cm4hMDtpZih0Lmxlbmd0aCE9PW4ubGVuZ3RoKXJldHVybiExO2ZvcihsZXQgcz0wLHI9dC5sZW5ndGg7czxyO3MrKylpZighdGhpcy5zZWxlY3Rpb25zRXF1YWwodFtzXSxuW3NdKSlyZXR1cm4hMTtyZXR1cm4hMH1zdGF0aWMgaXNJU2VsZWN0aW9uKHQpe3JldHVybiB0JiZ0eXBlb2YgdC5zZWxlY3Rpb25TdGFydExpbmVOdW1iZXI9PSJudW1iZXIiJiZ0eXBlb2YgdC5zZWxlY3Rpb25TdGFydENvbHVtbj09Im51bWJlciImJnR5cGVvZiB0LnBvc2l0aW9uTGluZU51bWJlcj09Im51bWJlciImJnR5cGVvZiB0LnBvc2l0aW9uQ29sdW1uPT0ibnVtYmVyIn1zdGF0aWMgY3JlYXRlV2l0aERpcmVjdGlvbih0LG4scyxyLGkpe3JldHVybiBpPT09MD9uZXcgc2UodCxuLHMscik6bmV3IHNlKHMscix0LG4pfX1jb25zdCBLbj1PYmplY3QuY3JlYXRlKG51bGwpO2Z1bmN0aW9uIGEoZSx0KXtpZih6cih0KSl7Y29uc3Qgbj1Lblt0XTtpZihuPT09dm9pZCAwKXRocm93IG5ldyBFcnJvcihgJHtlfSByZWZlcmVuY2VzIGFuIHVua25vd24gY29kaWNvbjogJHt0fWApO3Q9bn1yZXR1cm4gS25bZV09dCx7aWQ6ZX19Y29uc3QgYTE9e2FkZDphKCJhZGQiLDZlNCkscGx1czphKCJwbHVzIiw2ZTQpLGdpc3ROZXc6YSgiZ2lzdC1uZXciLDZlNCkscmVwb0NyZWF0ZTphKCJyZXBvLWNyZWF0ZSIsNmU0KSxsaWdodGJ1bGI6YSgibGlnaHRidWxiIiw2MDAwMSksbGlnaHRCdWxiOmEoImxpZ2h0LWJ1bGIiLDYwMDAxKSxyZXBvOmEoInJlcG8iLDYwMDAyKSxyZXBvRGVsZXRlOmEoInJlcG8tZGVsZXRlIiw2MDAwMiksZ2lzdEZvcms6YSgiZ2lzdC1mb3JrIiw2MDAwMykscmVwb0ZvcmtlZDphKCJyZXBvLWZvcmtlZCIsNjAwMDMpLGdpdFB1bGxSZXF1ZXN0OmEoImdpdC1wdWxsLXJlcXVlc3QiLDYwMDA0KSxnaXRQdWxsUmVxdWVzdEFiYW5kb25lZDphKCJnaXQtcHVsbC1yZXF1ZXN0LWFiYW5kb25lZCIsNjAwMDQpLHJlY29yZEtleXM6YSgicmVjb3JkLWtleXMiLDYwMDA1KSxrZXlib2FyZDphKCJrZXlib2FyZCIsNjAwMDUpLHRhZzphKCJ0YWciLDYwMDA2KSxnaXRQdWxsUmVxdWVzdExhYmVsOmEoImdpdC1wdWxsLXJlcXVlc3QtbGFiZWwiLDYwMDA2KSx0YWdBZGQ6YSgidGFnLWFkZCIsNjAwMDYpLHRhZ1JlbW92ZTphKCJ0YWctcmVtb3ZlIiw2MDAwNikscGVyc29uOmEoInBlcnNvbiIsNjAwMDcpLHBlcnNvbkZvbGxvdzphKCJwZXJzb24tZm9sbG93Iiw2MDAwNykscGVyc29uT3V0bGluZTphKCJwZXJzb24tb3V0bGluZSIsNjAwMDcpLHBlcnNvbkZpbGxlZDphKCJwZXJzb24tZmlsbGVkIiw2MDAwNyksZ2l0QnJhbmNoOmEoImdpdC1icmFuY2giLDYwMDA4KSxnaXRCcmFuY2hDcmVhdGU6YSgiZ2l0LWJyYW5jaC1jcmVhdGUiLDYwMDA4KSxnaXRCcmFuY2hEZWxldGU6YSgiZ2l0LWJyYW5jaC1kZWxldGUiLDYwMDA4KSxzb3VyY2VDb250cm9sOmEoInNvdXJjZS1jb250cm9sIiw2MDAwOCksbWlycm9yOmEoIm1pcnJvciIsNjAwMDkpLG1pcnJvclB1YmxpYzphKCJtaXJyb3ItcHVibGljIiw2MDAwOSksc3RhcjphKCJzdGFyIiw2MDAxMCksc3RhckFkZDphKCJzdGFyLWFkZCIsNjAwMTApLHN0YXJEZWxldGU6YSgic3Rhci1kZWxldGUiLDYwMDEwKSxzdGFyRW1wdHk6YSgic3Rhci1lbXB0eSIsNjAwMTApLGNvbW1lbnQ6YSgiY29tbWVudCIsNjAwMTEpLGNvbW1lbnRBZGQ6YSgiY29tbWVudC1hZGQiLDYwMDExKSxhbGVydDphKCJhbGVydCIsNjAwMTIpLHdhcm5pbmc6YSgid2FybmluZyIsNjAwMTIpLHNlYXJjaDphKCJzZWFyY2giLDYwMDEzKSxzZWFyY2hTYXZlOmEoInNlYXJjaC1zYXZlIiw2MDAxMyksbG9nT3V0OmEoImxvZy1vdXQiLDYwMDE0KSxzaWduT3V0OmEoInNpZ24tb3V0Iiw2MDAxNCksbG9nSW46YSgibG9nLWluIiw2MDAxNSksc2lnbkluOmEoInNpZ24taW4iLDYwMDE1KSxleWU6YSgiZXllIiw2MDAxNiksZXllVW53YXRjaDphKCJleWUtdW53YXRjaCIsNjAwMTYpLGV5ZVdhdGNoOmEoImV5ZS13YXRjaCIsNjAwMTYpLGNpcmNsZUZpbGxlZDphKCJjaXJjbGUtZmlsbGVkIiw2MDAxNykscHJpbWl0aXZlRG90OmEoInByaW1pdGl2ZS1kb3QiLDYwMDE3KSxjbG9zZURpcnR5OmEoImNsb3NlLWRpcnR5Iiw2MDAxNyksZGVidWdCcmVha3BvaW50OmEoImRlYnVnLWJyZWFrcG9pbnQiLDYwMDE3KSxkZWJ1Z0JyZWFrcG9pbnREaXNhYmxlZDphKCJkZWJ1Zy1icmVha3BvaW50LWRpc2FibGVkIiw2MDAxNyksZGVidWdIaW50OmEoImRlYnVnLWhpbnQiLDYwMDE3KSx0ZXJtaW5hbERlY29yYXRpb25TdWNjZXNzOmEoInRlcm1pbmFsLWRlY29yYXRpb24tc3VjY2VzcyIsNjAwMTcpLHByaW1pdGl2ZVNxdWFyZTphKCJwcmltaXRpdmUtc3F1YXJlIiw2MDAxOCksZWRpdDphKCJlZGl0Iiw2MDAxOSkscGVuY2lsOmEoInBlbmNpbCIsNjAwMTkpLGluZm86YSgiaW5mbyIsNjAwMjApLGlzc3VlT3BlbmVkOmEoImlzc3VlLW9wZW5lZCIsNjAwMjApLGdpc3RQcml2YXRlOmEoImdpc3QtcHJpdmF0ZSIsNjAwMjEpLGdpdEZvcmtQcml2YXRlOmEoImdpdC1mb3JrLXByaXZhdGUiLDYwMDIxKSxsb2NrOmEoImxvY2siLDYwMDIxKSxtaXJyb3JQcml2YXRlOmEoIm1pcnJvci1wcml2YXRlIiw2MDAyMSksY2xvc2U6YSgiY2xvc2UiLDYwMDIyKSxyZW1vdmVDbG9zZTphKCJyZW1vdmUtY2xvc2UiLDYwMDIyKSx4OmEoIngiLDYwMDIyKSxyZXBvU3luYzphKCJyZXBvLXN5bmMiLDYwMDIzKSxzeW5jOmEoInN5bmMiLDYwMDIzKSxjbG9uZTphKCJjbG9uZSIsNjAwMjQpLGRlc2t0b3BEb3dubG9hZDphKCJkZXNrdG9wLWRvd25sb2FkIiw2MDAyNCksYmVha2VyOmEoImJlYWtlciIsNjAwMjUpLG1pY3Jvc2NvcGU6YSgibWljcm9zY29wZSIsNjAwMjUpLHZtOmEoInZtIiw2MDAyNiksZGV2aWNlRGVza3RvcDphKCJkZXZpY2UtZGVza3RvcCIsNjAwMjYpLGZpbGU6YSgiZmlsZSIsNjAwMjcpLGZpbGVUZXh0OmEoImZpbGUtdGV4dCIsNjAwMjcpLG1vcmU6YSgibW9yZSIsNjAwMjgpLGVsbGlwc2lzOmEoImVsbGlwc2lzIiw2MDAyOCksa2ViYWJIb3Jpem9udGFsOmEoImtlYmFiLWhvcml6b250YWwiLDYwMDI4KSxtYWlsUmVwbHk6YSgibWFpbC1yZXBseSIsNjAwMjkpLHJlcGx5OmEoInJlcGx5Iiw2MDAyOSksb3JnYW5pemF0aW9uOmEoIm9yZ2FuaXphdGlvbiIsNjAwMzApLG9yZ2FuaXphdGlvbkZpbGxlZDphKCJvcmdhbml6YXRpb24tZmlsbGVkIiw2MDAzMCksb3JnYW5pemF0aW9uT3V0bGluZTphKCJvcmdhbml6YXRpb24tb3V0bGluZSIsNjAwMzApLG5ld0ZpbGU6YSgibmV3LWZpbGUiLDYwMDMxKSxmaWxlQWRkOmEoImZpbGUtYWRkIiw2MDAzMSksbmV3Rm9sZGVyOmEoIm5ldy1mb2xkZXIiLDYwMDMyKSxmaWxlRGlyZWN0b3J5Q3JlYXRlOmEoImZpbGUtZGlyZWN0b3J5LWNyZWF0ZSIsNjAwMzIpLHRyYXNoOmEoInRyYXNoIiw2MDAzMyksdHJhc2hjYW46YSgidHJhc2hjYW4iLDYwMDMzKSxoaXN0b3J5OmEoImhpc3RvcnkiLDYwMDM0KSxjbG9jazphKCJjbG9jayIsNjAwMzQpLGZvbGRlcjphKCJmb2xkZXIiLDYwMDM1KSxmaWxlRGlyZWN0b3J5OmEoImZpbGUtZGlyZWN0b3J5Iiw2MDAzNSksc3ltYm9sRm9sZGVyOmEoInN5bWJvbC1mb2xkZXIiLDYwMDM1KSxsb2dvR2l0aHViOmEoImxvZ28tZ2l0aHViIiw2MDAzNiksbWFya0dpdGh1YjphKCJtYXJrLWdpdGh1YiIsNjAwMzYpLGdpdGh1YjphKCJnaXRodWIiLDYwMDM2KSx0ZXJtaW5hbDphKCJ0ZXJtaW5hbCIsNjAwMzcpLGNvbnNvbGU6YSgiY29uc29sZSIsNjAwMzcpLHJlcGw6YSgicmVwbCIsNjAwMzcpLHphcDphKCJ6YXAiLDYwMDM4KSxzeW1ib2xFdmVudDphKCJzeW1ib2wtZXZlbnQiLDYwMDM4KSxlcnJvcjphKCJlcnJvciIsNjAwMzkpLHN0b3A6YSgic3RvcCIsNjAwMzkpLHZhcmlhYmxlOmEoInZhcmlhYmxlIiw2MDA0MCksc3ltYm9sVmFyaWFibGU6YSgic3ltYm9sLXZhcmlhYmxlIiw2MDA0MCksYXJyYXk6YSgiYXJyYXkiLDYwMDQyKSxzeW1ib2xBcnJheTphKCJzeW1ib2wtYXJyYXkiLDYwMDQyKSxzeW1ib2xNb2R1bGU6YSgic3ltYm9sLW1vZHVsZSIsNjAwNDMpLHN5bWJvbFBhY2thZ2U6YSgic3ltYm9sLXBhY2thZ2UiLDYwMDQzKSxzeW1ib2xOYW1lc3BhY2U6YSgic3ltYm9sLW5hbWVzcGFjZSIsNjAwNDMpLHN5bWJvbE9iamVjdDphKCJzeW1ib2wtb2JqZWN0Iiw2MDA0Myksc3ltYm9sTWV0aG9kOmEoInN5bWJvbC1tZXRob2QiLDYwMDQ0KSxzeW1ib2xGdW5jdGlvbjphKCJzeW1ib2wtZnVuY3Rpb24iLDYwMDQ0KSxzeW1ib2xDb25zdHJ1Y3RvcjphKCJzeW1ib2wtY29uc3RydWN0b3IiLDYwMDQ0KSxzeW1ib2xCb29sZWFuOmEoInN5bWJvbC1ib29sZWFuIiw2MDA0Nyksc3ltYm9sTnVsbDphKCJzeW1ib2wtbnVsbCIsNjAwNDcpLHN5bWJvbE51bWVyaWM6YSgic3ltYm9sLW51bWVyaWMiLDYwMDQ4KSxzeW1ib2xOdW1iZXI6YSgic3ltYm9sLW51bWJlciIsNjAwNDgpLHN5bWJvbFN0cnVjdHVyZTphKCJzeW1ib2wtc3RydWN0dXJlIiw2MDA0OSksc3ltYm9sU3RydWN0OmEoInN5bWJvbC1zdHJ1Y3QiLDYwMDQ5KSxzeW1ib2xQYXJhbWV0ZXI6YSgic3ltYm9sLXBhcmFtZXRlciIsNjAwNTApLHN5bWJvbFR5cGVQYXJhbWV0ZXI6YSgic3ltYm9sLXR5cGUtcGFyYW1ldGVyIiw2MDA1MCksc3ltYm9sS2V5OmEoInN5bWJvbC1rZXkiLDYwMDUxKSxzeW1ib2xUZXh0OmEoInN5bWJvbC10ZXh0Iiw2MDA1MSksc3ltYm9sUmVmZXJlbmNlOmEoInN5bWJvbC1yZWZlcmVuY2UiLDYwMDUyKSxnb1RvRmlsZTphKCJnby10by1maWxlIiw2MDA1Miksc3ltYm9sRW51bTphKCJzeW1ib2wtZW51bSIsNjAwNTMpLHN5bWJvbFZhbHVlOmEoInN5bWJvbC12YWx1ZSIsNjAwNTMpLHN5bWJvbFJ1bGVyOmEoInN5bWJvbC1ydWxlciIsNjAwNTQpLHN5bWJvbFVuaXQ6YSgic3ltYm9sLXVuaXQiLDYwMDU0KSxhY3RpdmF0ZUJyZWFrcG9pbnRzOmEoImFjdGl2YXRlLWJyZWFrcG9pbnRzIiw2MDA1NSksYXJjaGl2ZTphKCJhcmNoaXZlIiw2MDA1NiksYXJyb3dCb3RoOmEoImFycm93LWJvdGgiLDYwMDU3KSxhcnJvd0Rvd246YSgiYXJyb3ctZG93biIsNjAwNTgpLGFycm93TGVmdDphKCJhcnJvdy1sZWZ0Iiw2MDA1OSksYXJyb3dSaWdodDphKCJhcnJvdy1yaWdodCIsNjAwNjApLGFycm93U21hbGxEb3duOmEoImFycm93LXNtYWxsLWRvd24iLDYwMDYxKSxhcnJvd1NtYWxsTGVmdDphKCJhcnJvdy1zbWFsbC1sZWZ0Iiw2MDA2MiksYXJyb3dTbWFsbFJpZ2h0OmEoImFycm93LXNtYWxsLXJpZ2h0Iiw2MDA2MyksYXJyb3dTbWFsbFVwOmEoImFycm93LXNtYWxsLXVwIiw2MDA2NCksYXJyb3dVcDphKCJhcnJvdy11cCIsNjAwNjUpLGJlbGw6YSgiYmVsbCIsNjAwNjYpLGJvbGQ6YSgiYm9sZCIsNjAwNjcpLGJvb2s6YSgiYm9vayIsNjAwNjgpLGJvb2ttYXJrOmEoImJvb2ttYXJrIiw2MDA2OSksZGVidWdCcmVha3BvaW50Q29uZGl0aW9uYWxVbnZlcmlmaWVkOmEoImRlYnVnLWJyZWFrcG9pbnQtY29uZGl0aW9uYWwtdW52ZXJpZmllZCIsNjAwNzApLGRlYnVnQnJlYWtwb2ludENvbmRpdGlvbmFsOmEoImRlYnVnLWJyZWFrcG9pbnQtY29uZGl0aW9uYWwiLDYwMDcxKSxkZWJ1Z0JyZWFrcG9pbnRDb25kaXRpb25hbERpc2FibGVkOmEoImRlYnVnLWJyZWFrcG9pbnQtY29uZGl0aW9uYWwtZGlzYWJsZWQiLDYwMDcxKSxkZWJ1Z0JyZWFrcG9pbnREYXRhVW52ZXJpZmllZDphKCJkZWJ1Zy1icmVha3BvaW50LWRhdGEtdW52ZXJpZmllZCIsNjAwNzIpLGRlYnVnQnJlYWtwb2ludERhdGE6YSgiZGVidWctYnJlYWtwb2ludC1kYXRhIiw2MDA3MyksZGVidWdCcmVha3BvaW50RGF0YURpc2FibGVkOmEoImRlYnVnLWJyZWFrcG9pbnQtZGF0YS1kaXNhYmxlZCIsNjAwNzMpLGRlYnVnQnJlYWtwb2ludExvZ1VudmVyaWZpZWQ6YSgiZGVidWctYnJlYWtwb2ludC1sb2ctdW52ZXJpZmllZCIsNjAwNzQpLGRlYnVnQnJlYWtwb2ludExvZzphKCJkZWJ1Zy1icmVha3BvaW50LWxvZyIsNjAwNzUpLGRlYnVnQnJlYWtwb2ludExvZ0Rpc2FibGVkOmEoImRlYnVnLWJyZWFrcG9pbnQtbG9nLWRpc2FibGVkIiw2MDA3NSksYnJpZWZjYXNlOmEoImJyaWVmY2FzZSIsNjAwNzYpLGJyb2FkY2FzdDphKCJicm9hZGNhc3QiLDYwMDc3KSxicm93c2VyOmEoImJyb3dzZXIiLDYwMDc4KSxidWc6YSgiYnVnIiw2MDA3OSksY2FsZW5kYXI6YSgiY2FsZW5kYXIiLDYwMDgwKSxjYXNlU2Vuc2l0aXZlOmEoImNhc2Utc2Vuc2l0aXZlIiw2MDA4MSksY2hlY2s6YSgiY2hlY2siLDYwMDgyKSxjaGVja2xpc3Q6YSgiY2hlY2tsaXN0Iiw2MDA4MyksY2hldnJvbkRvd246YSgiY2hldnJvbi1kb3duIiw2MDA4NCksY2hldnJvbkxlZnQ6YSgiY2hldnJvbi1sZWZ0Iiw2MDA4NSksY2hldnJvblJpZ2h0OmEoImNoZXZyb24tcmlnaHQiLDYwMDg2KSxjaGV2cm9uVXA6YSgiY2hldnJvbi11cCIsNjAwODcpLGNocm9tZUNsb3NlOmEoImNocm9tZS1jbG9zZSIsNjAwODgpLGNocm9tZU1heGltaXplOmEoImNocm9tZS1tYXhpbWl6ZSIsNjAwODkpLGNocm9tZU1pbmltaXplOmEoImNocm9tZS1taW5pbWl6ZSIsNjAwOTApLGNocm9tZVJlc3RvcmU6YSgiY2hyb21lLXJlc3RvcmUiLDYwMDkxKSxjaXJjbGVPdXRsaW5lOmEoImNpcmNsZS1vdXRsaW5lIiw2MDA5MiksY2lyY2xlOmEoImNpcmNsZSIsNjAwOTIpLGRlYnVnQnJlYWtwb2ludFVudmVyaWZpZWQ6YSgiZGVidWctYnJlYWtwb2ludC11bnZlcmlmaWVkIiw2MDA5MiksdGVybWluYWxEZWNvcmF0aW9uSW5jb21wbGV0ZTphKCJ0ZXJtaW5hbC1kZWNvcmF0aW9uLWluY29tcGxldGUiLDYwMDkyKSxjaXJjbGVTbGFzaDphKCJjaXJjbGUtc2xhc2giLDYwMDkzKSxjaXJjdWl0Qm9hcmQ6YSgiY2lyY3VpdC1ib2FyZCIsNjAwOTQpLGNsZWFyQWxsOmEoImNsZWFyLWFsbCIsNjAwOTUpLGNsaXBweTphKCJjbGlwcHkiLDYwMDk2KSxjbG9zZUFsbDphKCJjbG9zZS1hbGwiLDYwMDk3KSxjbG91ZERvd25sb2FkOmEoImNsb3VkLWRvd25sb2FkIiw2MDA5OCksY2xvdWRVcGxvYWQ6YSgiY2xvdWQtdXBsb2FkIiw2MDA5OSksY29kZTphKCJjb2RlIiw2MDEwMCksY29sbGFwc2VBbGw6YSgiY29sbGFwc2UtYWxsIiw2MDEwMSksY29sb3JNb2RlOmEoImNvbG9yLW1vZGUiLDYwMTAyKSxjb21tZW50RGlzY3Vzc2lvbjphKCJjb21tZW50LWRpc2N1c3Npb24iLDYwMTAzKSxjcmVkaXRDYXJkOmEoImNyZWRpdC1jYXJkIiw2MDEwNSksZGFzaDphKCJkYXNoIiw2MDEwOCksZGFzaGJvYXJkOmEoImRhc2hib2FyZCIsNjAxMDkpLGRhdGFiYXNlOmEoImRhdGFiYXNlIiw2MDExMCksZGVidWdDb250aW51ZTphKCJkZWJ1Zy1jb250aW51ZSIsNjAxMTEpLGRlYnVnRGlzY29ubmVjdDphKCJkZWJ1Zy1kaXNjb25uZWN0Iiw2MDExMiksZGVidWdQYXVzZTphKCJkZWJ1Zy1wYXVzZSIsNjAxMTMpLGRlYnVnUmVzdGFydDphKCJkZWJ1Zy1yZXN0YXJ0Iiw2MDExNCksZGVidWdTdGFydDphKCJkZWJ1Zy1zdGFydCIsNjAxMTUpLGRlYnVnU3RlcEludG86YSgiZGVidWctc3RlcC1pbnRvIiw2MDExNiksZGVidWdTdGVwT3V0OmEoImRlYnVnLXN0ZXAtb3V0Iiw2MDExNyksZGVidWdTdGVwT3ZlcjphKCJkZWJ1Zy1zdGVwLW92ZXIiLDYwMTE4KSxkZWJ1Z1N0b3A6YSgiZGVidWctc3RvcCIsNjAxMTkpLGRlYnVnOmEoImRlYnVnIiw2MDEyMCksZGV2aWNlQ2FtZXJhVmlkZW86YSgiZGV2aWNlLWNhbWVyYS12aWRlbyIsNjAxMjEpLGRldmljZUNhbWVyYTphKCJkZXZpY2UtY2FtZXJhIiw2MDEyMiksZGV2aWNlTW9iaWxlOmEoImRldmljZS1tb2JpbGUiLDYwMTIzKSxkaWZmQWRkZWQ6YSgiZGlmZi1hZGRlZCIsNjAxMjQpLGRpZmZJZ25vcmVkOmEoImRpZmYtaWdub3JlZCIsNjAxMjUpLGRpZmZNb2RpZmllZDphKCJkaWZmLW1vZGlmaWVkIiw2MDEyNiksZGlmZlJlbW92ZWQ6YSgiZGlmZi1yZW1vdmVkIiw2MDEyNyksZGlmZlJlbmFtZWQ6YSgiZGlmZi1yZW5hbWVkIiw2MDEyOCksZGlmZjphKCJkaWZmIiw2MDEyOSksZGlmZlNpZGVieXNpZGU6YSgiZGlmZi1zaWRlYnlzaWRlIiw2MDEyOSksZGlzY2FyZDphKCJkaXNjYXJkIiw2MDEzMCksZWRpdG9yTGF5b3V0OmEoImVkaXRvci1sYXlvdXQiLDYwMTMxKSxlbXB0eVdpbmRvdzphKCJlbXB0eS13aW5kb3ciLDYwMTMyKSxleGNsdWRlOmEoImV4Y2x1ZGUiLDYwMTMzKSxleHRlbnNpb25zOmEoImV4dGVuc2lvbnMiLDYwMTM0KSxleWVDbG9zZWQ6YSgiZXllLWNsb3NlZCIsNjAxMzUpLGZpbGVCaW5hcnk6YSgiZmlsZS1iaW5hcnkiLDYwMTM2KSxmaWxlQ29kZTphKCJmaWxlLWNvZGUiLDYwMTM3KSxmaWxlTWVkaWE6YSgiZmlsZS1tZWRpYSIsNjAxMzgpLGZpbGVQZGY6YSgiZmlsZS1wZGYiLDYwMTM5KSxmaWxlU3VibW9kdWxlOmEoImZpbGUtc3VibW9kdWxlIiw2MDE0MCksZmlsZVN5bWxpbmtEaXJlY3Rvcnk6YSgiZmlsZS1zeW1saW5rLWRpcmVjdG9yeSIsNjAxNDEpLGZpbGVTeW1saW5rRmlsZTphKCJmaWxlLXN5bWxpbmstZmlsZSIsNjAxNDIpLGZpbGVaaXA6YSgiZmlsZS16aXAiLDYwMTQzKSxmaWxlczphKCJmaWxlcyIsNjAxNDQpLGZpbHRlcjphKCJmaWx0ZXIiLDYwMTQ1KSxmbGFtZTphKCJmbGFtZSIsNjAxNDYpLGZvbGREb3duOmEoImZvbGQtZG93biIsNjAxNDcpLGZvbGRVcDphKCJmb2xkLXVwIiw2MDE0OCksZm9sZDphKCJmb2xkIiw2MDE0OSksZm9sZGVyQWN0aXZlOmEoImZvbGRlci1hY3RpdmUiLDYwMTUwKSxmb2xkZXJPcGVuZWQ6YSgiZm9sZGVyLW9wZW5lZCIsNjAxNTEpLGdlYXI6YSgiZ2VhciIsNjAxNTIpLGdpZnQ6YSgiZ2lmdCIsNjAxNTMpLGdpc3RTZWNyZXQ6YSgiZ2lzdC1zZWNyZXQiLDYwMTU0KSxnaXN0OmEoImdpc3QiLDYwMTU1KSxnaXRDb21taXQ6YSgiZ2l0LWNvbW1pdCIsNjAxNTYpLGdpdENvbXBhcmU6YSgiZ2l0LWNvbXBhcmUiLDYwMTU3KSxjb21wYXJlQ2hhbmdlczphKCJjb21wYXJlLWNoYW5nZXMiLDYwMTU3KSxnaXRNZXJnZTphKCJnaXQtbWVyZ2UiLDYwMTU4KSxnaXRodWJBY3Rpb246YSgiZ2l0aHViLWFjdGlvbiIsNjAxNTkpLGdpdGh1YkFsdDphKCJnaXRodWItYWx0Iiw2MDE2MCksZ2xvYmU6YSgiZ2xvYmUiLDYwMTYxKSxncmFiYmVyOmEoImdyYWJiZXIiLDYwMTYyKSxncmFwaDphKCJncmFwaCIsNjAxNjMpLGdyaXBwZXI6YSgiZ3JpcHBlciIsNjAxNjQpLGhlYXJ0OmEoImhlYXJ0Iiw2MDE2NSksaG9tZTphKCJob21lIiw2MDE2NiksaG9yaXpvbnRhbFJ1bGU6YSgiaG9yaXpvbnRhbC1ydWxlIiw2MDE2NyksaHVib3Q6YSgiaHVib3QiLDYwMTY4KSxpbmJveDphKCJpbmJveCIsNjAxNjkpLGlzc3VlUmVvcGVuZWQ6YSgiaXNzdWUtcmVvcGVuZWQiLDYwMTcxKSxpc3N1ZXM6YSgiaXNzdWVzIiw2MDE3MiksaXRhbGljOmEoIml0YWxpYyIsNjAxNzMpLGplcnNleTphKCJqZXJzZXkiLDYwMTc0KSxqc29uOmEoImpzb24iLDYwMTc1KSxrZWJhYlZlcnRpY2FsOmEoImtlYmFiLXZlcnRpY2FsIiw2MDE3Niksa2V5OmEoImtleSIsNjAxNzcpLGxhdzphKCJsYXciLDYwMTc4KSxsaWdodGJ1bGJBdXRvZml4OmEoImxpZ2h0YnVsYi1hdXRvZml4Iiw2MDE3OSksbGlua0V4dGVybmFsOmEoImxpbmstZXh0ZXJuYWwiLDYwMTgwKSxsaW5rOmEoImxpbmsiLDYwMTgxKSxsaXN0T3JkZXJlZDphKCJsaXN0LW9yZGVyZWQiLDYwMTgyKSxsaXN0VW5vcmRlcmVkOmEoImxpc3QtdW5vcmRlcmVkIiw2MDE4MyksbGl2ZVNoYXJlOmEoImxpdmUtc2hhcmUiLDYwMTg0KSxsb2FkaW5nOmEoImxvYWRpbmciLDYwMTg1KSxsb2NhdGlvbjphKCJsb2NhdGlvbiIsNjAxODYpLG1haWxSZWFkOmEoIm1haWwtcmVhZCIsNjAxODcpLG1haWw6YSgibWFpbCIsNjAxODgpLG1hcmtkb3duOmEoIm1hcmtkb3duIiw2MDE4OSksbWVnYXBob25lOmEoIm1lZ2FwaG9uZSIsNjAxOTApLG1lbnRpb246YSgibWVudGlvbiIsNjAxOTEpLG1pbGVzdG9uZTphKCJtaWxlc3RvbmUiLDYwMTkyKSxnaXRQdWxsUmVxdWVzdE1pbGVzdG9uZTphKCJnaXQtcHVsbC1yZXF1ZXN0LW1pbGVzdG9uZSIsNjAxOTIpLG1vcnRhckJvYXJkOmEoIm1vcnRhci1ib2FyZCIsNjAxOTMpLG1vdmU6YSgibW92ZSIsNjAxOTQpLG11bHRpcGxlV2luZG93czphKCJtdWx0aXBsZS13aW5kb3dzIiw2MDE5NSksbXV0ZTphKCJtdXRlIiw2MDE5Niksbm9OZXdsaW5lOmEoIm5vLW5ld2xpbmUiLDYwMTk3KSxub3RlOmEoIm5vdGUiLDYwMTk4KSxvY3RvZmFjZTphKCJvY3RvZmFjZSIsNjAxOTkpLG9wZW5QcmV2aWV3OmEoIm9wZW4tcHJldmlldyIsNjAyMDApLHBhY2thZ2U6YSgicGFja2FnZSIsNjAyMDEpLHBhaW50Y2FuOmEoInBhaW50Y2FuIiw2MDIwMikscGluOmEoInBpbiIsNjAyMDMpLHBsYXk6YSgicGxheSIsNjAyMDQpLHJ1bjphKCJydW4iLDYwMjA0KSxwbHVnOmEoInBsdWciLDYwMjA1KSxwcmVzZXJ2ZUNhc2U6YSgicHJlc2VydmUtY2FzZSIsNjAyMDYpLHByZXZpZXc6YSgicHJldmlldyIsNjAyMDcpLHByb2plY3Q6YSgicHJvamVjdCIsNjAyMDgpLHB1bHNlOmEoInB1bHNlIiw2MDIwOSkscXVlc3Rpb246YSgicXVlc3Rpb24iLDYwMjEwKSxxdW90ZTphKCJxdW90ZSIsNjAyMTEpLHJhZGlvVG93ZXI6YSgicmFkaW8tdG93ZXIiLDYwMjEyKSxyZWFjdGlvbnM6YSgicmVhY3Rpb25zIiw2MDIxMykscmVmZXJlbmNlczphKCJyZWZlcmVuY2VzIiw2MDIxNCkscmVmcmVzaDphKCJyZWZyZXNoIiw2MDIxNSkscmVnZXg6YSgicmVnZXgiLDYwMjE2KSxyZW1vdGVFeHBsb3JlcjphKCJyZW1vdGUtZXhwbG9yZXIiLDYwMjE3KSxyZW1vdGU6YSgicmVtb3RlIiw2MDIxOCkscmVtb3ZlOmEoInJlbW92ZSIsNjAyMTkpLHJlcGxhY2VBbGw6YSgicmVwbGFjZS1hbGwiLDYwMjIwKSxyZXBsYWNlOmEoInJlcGxhY2UiLDYwMjIxKSxyZXBvQ2xvbmU6YSgicmVwby1jbG9uZSIsNjAyMjIpLHJlcG9Gb3JjZVB1c2g6YSgicmVwby1mb3JjZS1wdXNoIiw2MDIyMykscmVwb1B1bGw6YSgicmVwby1wdWxsIiw2MDIyNCkscmVwb1B1c2g6YSgicmVwby1wdXNoIiw2MDIyNSkscmVwb3J0OmEoInJlcG9ydCIsNjAyMjYpLHJlcXVlc3RDaGFuZ2VzOmEoInJlcXVlc3QtY2hhbmdlcyIsNjAyMjcpLHJvY2tldDphKCJyb2NrZXQiLDYwMjI4KSxyb290Rm9sZGVyT3BlbmVkOmEoInJvb3QtZm9sZGVyLW9wZW5lZCIsNjAyMjkpLHJvb3RGb2xkZXI6YSgicm9vdC1mb2xkZXIiLDYwMjMwKSxyc3M6YSgicnNzIiw2MDIzMSkscnVieTphKCJydWJ5Iiw2MDIzMiksc2F2ZUFsbDphKCJzYXZlLWFsbCIsNjAyMzMpLHNhdmVBczphKCJzYXZlLWFzIiw2MDIzNCksc2F2ZTphKCJzYXZlIiw2MDIzNSksc2NyZWVuRnVsbDphKCJzY3JlZW4tZnVsbCIsNjAyMzYpLHNjcmVlbk5vcm1hbDphKCJzY3JlZW4tbm9ybWFsIiw2MDIzNyksc2VhcmNoU3RvcDphKCJzZWFyY2gtc3RvcCIsNjAyMzgpLHNlcnZlcjphKCJzZXJ2ZXIiLDYwMjQwKSxzZXR0aW5nc0dlYXI6YSgic2V0dGluZ3MtZ2VhciIsNjAyNDEpLHNldHRpbmdzOmEoInNldHRpbmdzIiw2MDI0Miksc2hpZWxkOmEoInNoaWVsZCIsNjAyNDMpLHNtaWxleTphKCJzbWlsZXkiLDYwMjQ0KSxzb3J0UHJlY2VkZW5jZTphKCJzb3J0LXByZWNlZGVuY2UiLDYwMjQ1KSxzcGxpdEhvcml6b250YWw6YSgic3BsaXQtaG9yaXpvbnRhbCIsNjAyNDYpLHNwbGl0VmVydGljYWw6YSgic3BsaXQtdmVydGljYWwiLDYwMjQ3KSxzcXVpcnJlbDphKCJzcXVpcnJlbCIsNjAyNDgpLHN0YXJGdWxsOmEoInN0YXItZnVsbCIsNjAyNDkpLHN0YXJIYWxmOmEoInN0YXItaGFsZiIsNjAyNTApLHN5bWJvbENsYXNzOmEoInN5bWJvbC1jbGFzcyIsNjAyNTEpLHN5bWJvbENvbG9yOmEoInN5bWJvbC1jb2xvciIsNjAyNTIpLHN5bWJvbENvbnN0YW50OmEoInN5bWJvbC1jb25zdGFudCIsNjAyNTMpLHN5bWJvbEVudW1NZW1iZXI6YSgic3ltYm9sLWVudW0tbWVtYmVyIiw2MDI1NCksc3ltYm9sRmllbGQ6YSgic3ltYm9sLWZpZWxkIiw2MDI1NSksc3ltYm9sRmlsZTphKCJzeW1ib2wtZmlsZSIsNjAyNTYpLHN5bWJvbEludGVyZmFjZTphKCJzeW1ib2wtaW50ZXJmYWNlIiw2MDI1Nyksc3ltYm9sS2V5d29yZDphKCJzeW1ib2wta2V5d29yZCIsNjAyNTgpLHN5bWJvbE1pc2M6YSgic3ltYm9sLW1pc2MiLDYwMjU5KSxzeW1ib2xPcGVyYXRvcjphKCJzeW1ib2wtb3BlcmF0b3IiLDYwMjYwKSxzeW1ib2xQcm9wZXJ0eTphKCJzeW1ib2wtcHJvcGVydHkiLDYwMjYxKSx3cmVuY2g6YSgid3JlbmNoIiw2MDI2MSksd3JlbmNoU3ViYWN0aW9uOmEoIndyZW5jaC1zdWJhY3Rpb24iLDYwMjYxKSxzeW1ib2xTbmlwcGV0OmEoInN5bWJvbC1zbmlwcGV0Iiw2MDI2MiksdGFza2xpc3Q6YSgidGFza2xpc3QiLDYwMjYzKSx0ZWxlc2NvcGU6YSgidGVsZXNjb3BlIiw2MDI2NCksdGV4dFNpemU6YSgidGV4dC1zaXplIiw2MDI2NSksdGhyZWVCYXJzOmEoInRocmVlLWJhcnMiLDYwMjY2KSx0aHVtYnNkb3duOmEoInRodW1ic2Rvd24iLDYwMjY3KSx0aHVtYnN1cDphKCJ0aHVtYnN1cCIsNjAyNjgpLHRvb2xzOmEoInRvb2xzIiw2MDI2OSksdHJpYW5nbGVEb3duOmEoInRyaWFuZ2xlLWRvd24iLDYwMjcwKSx0cmlhbmdsZUxlZnQ6YSgidHJpYW5nbGUtbGVmdCIsNjAyNzEpLHRyaWFuZ2xlUmlnaHQ6YSgidHJpYW5nbGUtcmlnaHQiLDYwMjcyKSx0cmlhbmdsZVVwOmEoInRyaWFuZ2xlLXVwIiw2MDI3MyksdHdpdHRlcjphKCJ0d2l0dGVyIiw2MDI3NCksdW5mb2xkOmEoInVuZm9sZCIsNjAyNzUpLHVubG9jazphKCJ1bmxvY2siLDYwMjc2KSx1bm11dGU6YSgidW5tdXRlIiw2MDI3NyksdW52ZXJpZmllZDphKCJ1bnZlcmlmaWVkIiw2MDI3OCksdmVyaWZpZWQ6YSgidmVyaWZpZWQiLDYwMjc5KSx2ZXJzaW9uczphKCJ2ZXJzaW9ucyIsNjAyODApLHZtQWN0aXZlOmEoInZtLWFjdGl2ZSIsNjAyODEpLHZtT3V0bGluZTphKCJ2bS1vdXRsaW5lIiw2MDI4Miksdm1SdW5uaW5nOmEoInZtLXJ1bm5pbmciLDYwMjgzKSx3YXRjaDphKCJ3YXRjaCIsNjAyODQpLHdoaXRlc3BhY2U6YSgid2hpdGVzcGFjZSIsNjAyODUpLHdob2xlV29yZDphKCJ3aG9sZS13b3JkIiw2MDI4Niksd2luZG93OmEoIndpbmRvdyIsNjAyODcpLHdvcmRXcmFwOmEoIndvcmQtd3JhcCIsNjAyODgpLHpvb21JbjphKCJ6b29tLWluIiw2MDI4OSksem9vbU91dDphKCJ6b29tLW91dCIsNjAyOTApLGxpc3RGaWx0ZXI6YSgibGlzdC1maWx0ZXIiLDYwMjkxKSxsaXN0RmxhdDphKCJsaXN0LWZsYXQiLDYwMjkyKSxsaXN0U2VsZWN0aW9uOmEoImxpc3Qtc2VsZWN0aW9uIiw2MDI5Myksc2VsZWN0aW9uOmEoInNlbGVjdGlvbiIsNjAyOTMpLGxpc3RUcmVlOmEoImxpc3QtdHJlZSIsNjAyOTQpLGRlYnVnQnJlYWtwb2ludEZ1bmN0aW9uVW52ZXJpZmllZDphKCJkZWJ1Zy1icmVha3BvaW50LWZ1bmN0aW9uLXVudmVyaWZpZWQiLDYwMjk1KSxkZWJ1Z0JyZWFrcG9pbnRGdW5jdGlvbjphKCJkZWJ1Zy1icmVha3BvaW50LWZ1bmN0aW9uIiw2MDI5NiksZGVidWdCcmVha3BvaW50RnVuY3Rpb25EaXNhYmxlZDphKCJkZWJ1Zy1icmVha3BvaW50LWZ1bmN0aW9uLWRpc2FibGVkIiw2MDI5NiksZGVidWdTdGFja2ZyYW1lQWN0aXZlOmEoImRlYnVnLXN0YWNrZnJhbWUtYWN0aXZlIiw2MDI5NyksY2lyY2xlU21hbGxGaWxsZWQ6YSgiY2lyY2xlLXNtYWxsLWZpbGxlZCIsNjAyOTgpLGRlYnVnU3RhY2tmcmFtZURvdDphKCJkZWJ1Zy1zdGFja2ZyYW1lLWRvdCIsNjAyOTgpLHRlcm1pbmFsRGVjb3JhdGlvbk1hcms6YSgidGVybWluYWwtZGVjb3JhdGlvbi1tYXJrIiw2MDI5OCksZGVidWdTdGFja2ZyYW1lOmEoImRlYnVnLXN0YWNrZnJhbWUiLDYwMjk5KSxkZWJ1Z1N0YWNrZnJhbWVGb2N1c2VkOmEoImRlYnVnLXN0YWNrZnJhbWUtZm9jdXNlZCIsNjAyOTkpLGRlYnVnQnJlYWtwb2ludFVuc3VwcG9ydGVkOmEoImRlYnVnLWJyZWFrcG9pbnQtdW5zdXBwb3J0ZWQiLDYwMzAwKSxzeW1ib2xTdHJpbmc6YSgic3ltYm9sLXN0cmluZyIsNjAzMDEpLGRlYnVnUmV2ZXJzZUNvbnRpbnVlOmEoImRlYnVnLXJldmVyc2UtY29udGludWUiLDYwMzAyKSxkZWJ1Z1N0ZXBCYWNrOmEoImRlYnVnLXN0ZXAtYmFjayIsNjAzMDMpLGRlYnVnUmVzdGFydEZyYW1lOmEoImRlYnVnLXJlc3RhcnQtZnJhbWUiLDYwMzA0KSxkZWJ1Z0FsdDphKCJkZWJ1Zy1hbHQiLDYwMzA1KSxjYWxsSW5jb21pbmc6YSgiY2FsbC1pbmNvbWluZyIsNjAzMDYpLGNhbGxPdXRnb2luZzphKCJjYWxsLW91dGdvaW5nIiw2MDMwNyksbWVudTphKCJtZW51Iiw2MDMwOCksZXhwYW5kQWxsOmEoImV4cGFuZC1hbGwiLDYwMzA5KSxmZWVkYmFjazphKCJmZWVkYmFjayIsNjAzMTApLGdpdFB1bGxSZXF1ZXN0UmV2aWV3ZXI6YSgiZ2l0LXB1bGwtcmVxdWVzdC1yZXZpZXdlciIsNjAzMTApLGdyb3VwQnlSZWZUeXBlOmEoImdyb3VwLWJ5LXJlZi10eXBlIiw2MDMxMSksdW5ncm91cEJ5UmVmVHlwZTphKCJ1bmdyb3VwLWJ5LXJlZi10eXBlIiw2MDMxMiksYWNjb3VudDphKCJhY2NvdW50Iiw2MDMxMyksZ2l0UHVsbFJlcXVlc3RBc3NpZ25lZTphKCJnaXQtcHVsbC1yZXF1ZXN0LWFzc2lnbmVlIiw2MDMxMyksYmVsbERvdDphKCJiZWxsLWRvdCIsNjAzMTQpLGRlYnVnQ29uc29sZTphKCJkZWJ1Zy1jb25zb2xlIiw2MDMxNSksbGlicmFyeTphKCJsaWJyYXJ5Iiw2MDMxNiksb3V0cHV0OmEoIm91dHB1dCIsNjAzMTcpLHJ1bkFsbDphKCJydW4tYWxsIiw2MDMxOCksc3luY0lnbm9yZWQ6YSgic3luYy1pZ25vcmVkIiw2MDMxOSkscGlubmVkOmEoInBpbm5lZCIsNjAzMjApLGdpdGh1YkludmVydGVkOmEoImdpdGh1Yi1pbnZlcnRlZCIsNjAzMjEpLHNlcnZlclByb2Nlc3M6YSgic2VydmVyLXByb2Nlc3MiLDYwMzIyKSxzZXJ2ZXJFbnZpcm9ubWVudDphKCJzZXJ2ZXItZW52aXJvbm1lbnQiLDYwMzIzKSxwYXNzOmEoInBhc3MiLDYwMzI0KSxpc3N1ZUNsb3NlZDphKCJpc3N1ZS1jbG9zZWQiLDYwMzI0KSxzdG9wQ2lyY2xlOmEoInN0b3AtY2lyY2xlIiw2MDMyNSkscGxheUNpcmNsZTphKCJwbGF5LWNpcmNsZSIsNjAzMjYpLHJlY29yZDphKCJyZWNvcmQiLDYwMzI3KSxkZWJ1Z0FsdFNtYWxsOmEoImRlYnVnLWFsdC1zbWFsbCIsNjAzMjgpLHZtQ29ubmVjdDphKCJ2bS1jb25uZWN0Iiw2MDMyOSksY2xvdWQ6YSgiY2xvdWQiLDYwMzMwKSxtZXJnZTphKCJtZXJnZSIsNjAzMzEpLGV4cG9ydDphKCJleHBvcnQiLDYwMzMyKSxncmFwaExlZnQ6YSgiZ3JhcGgtbGVmdCIsNjAzMzMpLG1hZ25ldDphKCJtYWduZXQiLDYwMzM0KSxub3RlYm9vazphKCJub3RlYm9vayIsNjAzMzUpLHJlZG86YSgicmVkbyIsNjAzMzYpLGNoZWNrQWxsOmEoImNoZWNrLWFsbCIsNjAzMzcpLHBpbm5lZERpcnR5OmEoInBpbm5lZC1kaXJ0eSIsNjAzMzgpLHBhc3NGaWxsZWQ6YSgicGFzcy1maWxsZWQiLDYwMzM5KSxjaXJjbGVMYXJnZUZpbGxlZDphKCJjaXJjbGUtbGFyZ2UtZmlsbGVkIiw2MDM0MCksY2lyY2xlTGFyZ2U6YSgiY2lyY2xlLWxhcmdlIiw2MDM0MSksY2lyY2xlTGFyZ2VPdXRsaW5lOmEoImNpcmNsZS1sYXJnZS1vdXRsaW5lIiw2MDM0MSksY29tYmluZTphKCJjb21iaW5lIiw2MDM0MiksZ2F0aGVyOmEoImdhdGhlciIsNjAzNDIpLHRhYmxlOmEoInRhYmxlIiw2MDM0MyksdmFyaWFibGVHcm91cDphKCJ2YXJpYWJsZS1ncm91cCIsNjAzNDQpLHR5cGVIaWVyYXJjaHk6YSgidHlwZS1oaWVyYXJjaHkiLDYwMzQ1KSx0eXBlSGllcmFyY2h5U3ViOmEoInR5cGUtaGllcmFyY2h5LXN1YiIsNjAzNDYpLHR5cGVIaWVyYXJjaHlTdXBlcjphKCJ0eXBlLWhpZXJhcmNoeS1zdXBlciIsNjAzNDcpLGdpdFB1bGxSZXF1ZXN0Q3JlYXRlOmEoImdpdC1wdWxsLXJlcXVlc3QtY3JlYXRlIiw2MDM0OCkscnVuQWJvdmU6YSgicnVuLWFib3ZlIiw2MDM0OSkscnVuQmVsb3c6YSgicnVuLWJlbG93Iiw2MDM1MCksbm90ZWJvb2tUZW1wbGF0ZTphKCJub3RlYm9vay10ZW1wbGF0ZSIsNjAzNTEpLGRlYnVnUmVydW46YSgiZGVidWctcmVydW4iLDYwMzUyKSx3b3Jrc3BhY2VUcnVzdGVkOmEoIndvcmtzcGFjZS10cnVzdGVkIiw2MDM1Myksd29ya3NwYWNlVW50cnVzdGVkOmEoIndvcmtzcGFjZS11bnRydXN0ZWQiLDYwMzU0KSx3b3Jrc3BhY2VVbmtub3duOmEoIndvcmtzcGFjZS11bmtub3duIiw2MDM1NSksdGVybWluYWxDbWQ6YSgidGVybWluYWwtY21kIiw2MDM1NiksdGVybWluYWxEZWJpYW46YSgidGVybWluYWwtZGViaWFuIiw2MDM1NyksdGVybWluYWxMaW51eDphKCJ0ZXJtaW5hbC1saW51eCIsNjAzNTgpLHRlcm1pbmFsUG93ZXJzaGVsbDphKCJ0ZXJtaW5hbC1wb3dlcnNoZWxsIiw2MDM1OSksdGVybWluYWxUbXV4OmEoInRlcm1pbmFsLXRtdXgiLDYwMzYwKSx0ZXJtaW5hbFVidW50dTphKCJ0ZXJtaW5hbC11YnVudHUiLDYwMzYxKSx0ZXJtaW5hbEJhc2g6YSgidGVybWluYWwtYmFzaCIsNjAzNjIpLGFycm93U3dhcDphKCJhcnJvdy1zd2FwIiw2MDM2MyksY29weTphKCJjb3B5Iiw2MDM2NCkscGVyc29uQWRkOmEoInBlcnNvbi1hZGQiLDYwMzY1KSxmaWx0ZXJGaWxsZWQ6YSgiZmlsdGVyLWZpbGxlZCIsNjAzNjYpLHdhbmQ6YSgid2FuZCIsNjAzNjcpLGRlYnVnTGluZUJ5TGluZTphKCJkZWJ1Zy1saW5lLWJ5LWxpbmUiLDYwMzY4KSxpbnNwZWN0OmEoImluc3BlY3QiLDYwMzY5KSxsYXllcnM6YSgibGF5ZXJzIiw2MDM3MCksbGF5ZXJzRG90OmEoImxheWVycy1kb3QiLDYwMzcxKSxsYXllcnNBY3RpdmU6YSgibGF5ZXJzLWFjdGl2ZSIsNjAzNzIpLGNvbXBhc3M6YSgiY29tcGFzcyIsNjAzNzMpLGNvbXBhc3NEb3Q6YSgiY29tcGFzcy1kb3QiLDYwMzc0KSxjb21wYXNzQWN0aXZlOmEoImNvbXBhc3MtYWN0aXZlIiw2MDM3NSksYXp1cmU6YSgiYXp1cmUiLDYwMzc2KSxpc3N1ZURyYWZ0OmEoImlzc3VlLWRyYWZ0Iiw2MDM3NyksZ2l0UHVsbFJlcXVlc3RDbG9zZWQ6YSgiZ2l0LXB1bGwtcmVxdWVzdC1jbG9zZWQiLDYwMzc4KSxnaXRQdWxsUmVxdWVzdERyYWZ0OmEoImdpdC1wdWxsLXJlcXVlc3QtZHJhZnQiLDYwMzc5KSxkZWJ1Z0FsbDphKCJkZWJ1Zy1hbGwiLDYwMzgwKSxkZWJ1Z0NvdmVyYWdlOmEoImRlYnVnLWNvdmVyYWdlIiw2MDM4MSkscnVuRXJyb3JzOmEoInJ1bi1lcnJvcnMiLDYwMzgyKSxmb2xkZXJMaWJyYXJ5OmEoImZvbGRlci1saWJyYXJ5Iiw2MDM4MyksZGVidWdDb250aW51ZVNtYWxsOmEoImRlYnVnLWNvbnRpbnVlLXNtYWxsIiw2MDM4NCksYmVha2VyU3RvcDphKCJiZWFrZXItc3RvcCIsNjAzODUpLGdyYXBoTGluZTphKCJncmFwaC1saW5lIiw2MDM4NiksZ3JhcGhTY2F0dGVyOmEoImdyYXBoLXNjYXR0ZXIiLDYwMzg3KSxwaWVDaGFydDphKCJwaWUtY2hhcnQiLDYwMzg4KSxicmFja2V0OmEoImJyYWNrZXQiLDYwMTc1KSxicmFja2V0RG90OmEoImJyYWNrZXQtZG90Iiw2MDM4OSksYnJhY2tldEVycm9yOmEoImJyYWNrZXQtZXJyb3IiLDYwMzkwKSxsb2NrU21hbGw6YSgibG9jay1zbWFsbCIsNjAzOTEpLGF6dXJlRGV2b3BzOmEoImF6dXJlLWRldm9wcyIsNjAzOTIpLHZlcmlmaWVkRmlsbGVkOmEoInZlcmlmaWVkLWZpbGxlZCIsNjAzOTMpLG5ld2xpbmU6YSgibmV3bGluZSIsNjAzOTQpLGxheW91dDphKCJsYXlvdXQiLDYwMzk1KSxsYXlvdXRBY3Rpdml0eWJhckxlZnQ6YSgibGF5b3V0LWFjdGl2aXR5YmFyLWxlZnQiLDYwMzk2KSxsYXlvdXRBY3Rpdml0eWJhclJpZ2h0OmEoImxheW91dC1hY3Rpdml0eWJhci1yaWdodCIsNjAzOTcpLGxheW91dFBhbmVsTGVmdDphKCJsYXlvdXQtcGFuZWwtbGVmdCIsNjAzOTgpLGxheW91dFBhbmVsQ2VudGVyOmEoImxheW91dC1wYW5lbC1jZW50ZXIiLDYwMzk5KSxsYXlvdXRQYW5lbEp1c3RpZnk6YSgibGF5b3V0LXBhbmVsLWp1c3RpZnkiLDYwNDAwKSxsYXlvdXRQYW5lbFJpZ2h0OmEoImxheW91dC1wYW5lbC1yaWdodCIsNjA0MDEpLGxheW91dFBhbmVsOmEoImxheW91dC1wYW5lbCIsNjA0MDIpLGxheW91dFNpZGViYXJMZWZ0OmEoImxheW91dC1zaWRlYmFyLWxlZnQiLDYwNDAzKSxsYXlvdXRTaWRlYmFyUmlnaHQ6YSgibGF5b3V0LXNpZGViYXItcmlnaHQiLDYwNDA0KSxsYXlvdXRTdGF0dXNiYXI6YSgibGF5b3V0LXN0YXR1c2JhciIsNjA0MDUpLGxheW91dE1lbnViYXI6YSgibGF5b3V0LW1lbnViYXIiLDYwNDA2KSxsYXlvdXRDZW50ZXJlZDphKCJsYXlvdXQtY2VudGVyZWQiLDYwNDA3KSx0YXJnZXQ6YSgidGFyZ2V0Iiw2MDQwOCksaW5kZW50OmEoImluZGVudCIsNjA0MDkpLHJlY29yZFNtYWxsOmEoInJlY29yZC1zbWFsbCIsNjA0MTApLGVycm9yU21hbGw6YSgiZXJyb3Itc21hbGwiLDYwNDExKSx0ZXJtaW5hbERlY29yYXRpb25FcnJvcjphKCJ0ZXJtaW5hbC1kZWNvcmF0aW9uLWVycm9yIiw2MDQxMSksYXJyb3dDaXJjbGVEb3duOmEoImFycm93LWNpcmNsZS1kb3duIiw2MDQxMiksYXJyb3dDaXJjbGVMZWZ0OmEoImFycm93LWNpcmNsZS1sZWZ0Iiw2MDQxMyksYXJyb3dDaXJjbGVSaWdodDphKCJhcnJvdy1jaXJjbGUtcmlnaHQiLDYwNDE0KSxhcnJvd0NpcmNsZVVwOmEoImFycm93LWNpcmNsZS11cCIsNjA0MTUpLGxheW91dFNpZGViYXJSaWdodE9mZjphKCJsYXlvdXQtc2lkZWJhci1yaWdodC1vZmYiLDYwNDE2KSxsYXlvdXRQYW5lbE9mZjphKCJsYXlvdXQtcGFuZWwtb2ZmIiw2MDQxNyksbGF5b3V0U2lkZWJhckxlZnRPZmY6YSgibGF5b3V0LXNpZGViYXItbGVmdC1vZmYiLDYwNDE4KSxibGFuazphKCJibGFuayIsNjA0MTkpLGhlYXJ0RmlsbGVkOmEoImhlYXJ0LWZpbGxlZCIsNjA0MjApLG1hcDphKCJtYXAiLDYwNDIxKSxtYXBIb3Jpem9udGFsOmEoIm1hcC1ob3Jpem9udGFsIiw2MDQyMSksZm9sZEhvcml6b250YWw6YSgiZm9sZC1ob3Jpem9udGFsIiw2MDQyMSksbWFwRmlsbGVkOmEoIm1hcC1maWxsZWQiLDYwNDIyKSxtYXBIb3Jpem9udGFsRmlsbGVkOmEoIm1hcC1ob3Jpem9udGFsLWZpbGxlZCIsNjA0MjIpLGZvbGRIb3Jpem9udGFsRmlsbGVkOmEoImZvbGQtaG9yaXpvbnRhbC1maWxsZWQiLDYwNDIyKSxjaXJjbGVTbWFsbDphKCJjaXJjbGUtc21hbGwiLDYwNDIzKSxiZWxsU2xhc2g6YSgiYmVsbC1zbGFzaCIsNjA0MjQpLGJlbGxTbGFzaERvdDphKCJiZWxsLXNsYXNoLWRvdCIsNjA0MjUpLGNvbW1lbnRVbnJlc29sdmVkOmEoImNvbW1lbnQtdW5yZXNvbHZlZCIsNjA0MjYpLGdpdFB1bGxSZXF1ZXN0R29Ub0NoYW5nZXM6YSgiZ2l0LXB1bGwtcmVxdWVzdC1nby10by1jaGFuZ2VzIiw2MDQyNyksZ2l0UHVsbFJlcXVlc3ROZXdDaGFuZ2VzOmEoImdpdC1wdWxsLXJlcXVlc3QtbmV3LWNoYW5nZXMiLDYwNDI4KSxzZWFyY2hGdXp6eTphKCJzZWFyY2gtZnV6enkiLDYwNDI5KSxjb21tZW50RHJhZnQ6YSgiY29tbWVudC1kcmFmdCIsNjA0MzApLHNlbmQ6YSgic2VuZCIsNjA0MzEpLHNwYXJrbGU6YSgic3BhcmtsZSIsNjA0MzIpLGluc2VydDphKCJpbnNlcnQiLDYwNDMzKSxtaWM6YSgibWljIiw2MDQzNCksdGh1bWJzZG93bkZpbGxlZDphKCJ0aHVtYnNkb3duLWZpbGxlZCIsNjA0MzUpLHRodW1ic3VwRmlsbGVkOmEoInRodW1ic3VwLWZpbGxlZCIsNjA0MzYpLGNvZmZlZTphKCJjb2ZmZWUiLDYwNDM3KSxzbmFrZTphKCJzbmFrZSIsNjA0MzgpLGdhbWU6YSgiZ2FtZSIsNjA0MzkpLHZyOmEoInZyIiw2MDQ0MCksY2hpcDphKCJjaGlwIiw2MDQ0MSkscGlhbm86YSgicGlhbm8iLDYwNDQyKSxtdXNpYzphKCJtdXNpYyIsNjA0NDMpLG1pY0ZpbGxlZDphKCJtaWMtZmlsbGVkIiw2MDQ0NCkscmVwb0ZldGNoOmEoInJlcG8tZmV0Y2giLDYwNDQ1KSxjb3BpbG90OmEoImNvcGlsb3QiLDYwNDQ2KSxsaWdodGJ1bGJTcGFya2xlOmEoImxpZ2h0YnVsYi1zcGFya2xlIiw2MDQ0Nykscm9ib3Q6YSgicm9ib3QiLDYwNDQ4KSxzcGFya2xlRmlsbGVkOmEoInNwYXJrbGUtZmlsbGVkIiw2MDQ0OSksZGlmZlNpbmdsZTphKCJkaWZmLXNpbmdsZSIsNjA0NTApLGRpZmZNdWx0aXBsZTphKCJkaWZmLW11bHRpcGxlIiw2MDQ1MSksc3Vycm91bmRXaXRoOmEoInN1cnJvdW5kLXdpdGgiLDYwNDUyKSxzaGFyZTphKCJzaGFyZSIsNjA0NTMpLGdpdFN0YXNoOmEoImdpdC1zdGFzaCIsNjA0NTQpLGdpdFN0YXNoQXBwbHk6YSgiZ2l0LXN0YXNoLWFwcGx5Iiw2MDQ1NSksZ2l0U3Rhc2hQb3A6YSgiZ2l0LXN0YXNoLXBvcCIsNjA0NTYpLHZzY29kZTphKCJ2c2NvZGUiLDYwNDU3KSx2c2NvZGVJbnNpZGVyczphKCJ2c2NvZGUtaW5zaWRlcnMiLDYwNDU4KSxjb2RlT3NzOmEoImNvZGUtb3NzIiw2MDQ1OSkscnVuQ292ZXJhZ2U6YSgicnVuLWNvdmVyYWdlIiw2MDQ2MCkscnVuQWxsQ292ZXJhZ2U6YSgicnVuLWFsbC1jb3ZlcmFnZSIsNjA0NjEpLGNvdmVyYWdlOmEoImNvdmVyYWdlIiw2MDQ2MiksZ2l0aHViUHJvamVjdDphKCJnaXRodWItcHJvamVjdCIsNjA0NjMpLG1hcFZlcnRpY2FsOmEoIm1hcC12ZXJ0aWNhbCIsNjA0NjQpLGZvbGRWZXJ0aWNhbDphKCJmb2xkLXZlcnRpY2FsIiw2MDQ2NCksbWFwVmVydGljYWxGaWxsZWQ6YSgibWFwLXZlcnRpY2FsLWZpbGxlZCIsNjA0NjUpLGZvbGRWZXJ0aWNhbEZpbGxlZDphKCJmb2xkLXZlcnRpY2FsLWZpbGxlZCIsNjA0NjUpLGdvVG9TZWFyY2g6YSgiZ28tdG8tc2VhcmNoIiw2MDQ2NikscGVyY2VudGFnZTphKCJwZXJjZW50YWdlIiw2MDQ2Nyksc29ydFBlcmNlbnRhZ2U6YSgic29ydC1wZXJjZW50YWdlIiw2MDQ2NyksYXR0YWNoOmEoImF0dGFjaCIsNjA0NjgpfSxsMT17ZGlhbG9nRXJyb3I6YSgiZGlhbG9nLWVycm9yIiwiZXJyb3IiKSxkaWFsb2dXYXJuaW5nOmEoImRpYWxvZy13YXJuaW5nIiwid2FybmluZyIpLGRpYWxvZ0luZm86YSgiZGlhbG9nLWluZm8iLCJpbmZvIiksZGlhbG9nQ2xvc2U6YSgiZGlhbG9nLWNsb3NlIiwiY2xvc2UiKSx0cmVlSXRlbUV4cGFuZGVkOmEoInRyZWUtaXRlbS1leHBhbmRlZCIsImNoZXZyb24tZG93biIpLHRyZWVGaWx0ZXJPblR5cGVPbjphKCJ0cmVlLWZpbHRlci1vbi10eXBlLW9uIiwibGlzdC1maWx0ZXIiKSx0cmVlRmlsdGVyT25UeXBlT2ZmOmEoInRyZWUtZmlsdGVyLW9uLXR5cGUtb2ZmIiwibGlzdC1zZWxlY3Rpb24iKSx0cmVlRmlsdGVyQ2xlYXI6YSgidHJlZS1maWx0ZXItY2xlYXIiLCJjbG9zZSIpLHRyZWVJdGVtTG9hZGluZzphKCJ0cmVlLWl0ZW0tbG9hZGluZyIsImxvYWRpbmciKSxtZW51U2VsZWN0aW9uOmEoIm1lbnUtc2VsZWN0aW9uIiwiY2hlY2siKSxtZW51U3VibWVudTphKCJtZW51LXN1Ym1lbnUiLCJjaGV2cm9uLXJpZ2h0IiksbWVudUJhck1vcmU6YSgibWVudWJhci1tb3JlIiwibW9yZSIpLHNjcm9sbGJhckJ1dHRvbkxlZnQ6YSgic2Nyb2xsYmFyLWJ1dHRvbi1sZWZ0IiwidHJpYW5nbGUtbGVmdCIpLHNjcm9sbGJhckJ1dHRvblJpZ2h0OmEoInNjcm9sbGJhci1idXR0b24tcmlnaHQiLCJ0cmlhbmdsZS1yaWdodCIpLHNjcm9sbGJhckJ1dHRvblVwOmEoInNjcm9sbGJhci1idXR0b24tdXAiLCJ0cmlhbmdsZS11cCIpLHNjcm9sbGJhckJ1dHRvbkRvd246YSgic2Nyb2xsYmFyLWJ1dHRvbi1kb3duIiwidHJpYW5nbGUtZG93biIpLHRvb2xCYXJNb3JlOmEoInRvb2xiYXItbW9yZSIsIm1vcmUiKSxxdWlja0lucHV0QmFjazphKCJxdWljay1pbnB1dC1iYWNrIiwiYXJyb3ctbGVmdCIpLGRyb3BEb3duQnV0dG9uOmEoImRyb3AtZG93bi1idXR0b24iLDYwMDg0KSxzeW1ib2xDdXN0b21Db2xvcjphKCJzeW1ib2wtY3VzdG9tY29sb3IiLDYwMjUyKSxleHBvcnRJY29uOmEoImV4cG9ydCIsNjAzMzIpLHdvcmtzcGFjZVVuc3BlY2lmaWVkOmEoIndvcmtzcGFjZS11bnNwZWNpZmllZCIsNjAzNTUpLG5ld0xpbmU6YSgibmV3bGluZSIsNjAzOTQpLHRodW1ic0Rvd25GaWxsZWQ6YSgidGh1bWJzZG93bi1maWxsZWQiLDYwNDM1KSx0aHVtYnNVcEZpbGxlZDphKCJ0aHVtYnN1cC1maWxsZWQiLDYwNDM2KSxnaXRGZXRjaDphKCJnaXQtZmV0Y2giLDYwNDQ1KSxsaWdodGJ1bGJTcGFya2xlQXV0b2ZpeDphKCJsaWdodGJ1bGItc3BhcmtsZS1hdXRvZml4Iiw2MDQ0NyksZGVidWdCcmVha3BvaW50UGVuZGluZzphKCJkZWJ1Zy1icmVha3BvaW50LXBlbmRpbmciLDYwMzc3KX0sTT17Li4uYTEsLi4ubDF9O2NsYXNzIG8xe2NvbnN0cnVjdG9yKCl7dGhpcy5fdG9rZW5pemF0aW9uU3VwcG9ydHM9bmV3IE1hcCx0aGlzLl9mYWN0b3JpZXM9bmV3IE1hcCx0aGlzLl9vbkRpZENoYW5nZT1uZXcgbGUsdGhpcy5vbkRpZENoYW5nZT10aGlzLl9vbkRpZENoYW5nZS5ldmVudCx0aGlzLl9jb2xvck1hcD1udWxsfWhhbmRsZUNoYW5nZSh0KXt0aGlzLl9vbkRpZENoYW5nZS5maXJlKHtjaGFuZ2VkTGFuZ3VhZ2VzOnQsY2hhbmdlZENvbG9yTWFwOiExfSl9cmVnaXN0ZXIodCxuKXtyZXR1cm4gdGhpcy5fdG9rZW5pemF0aW9uU3VwcG9ydHMuc2V0KHQsbiksdGhpcy5oYW5kbGVDaGFuZ2UoW3RdKSx1dCgoKT0+e3RoaXMuX3Rva2VuaXphdGlvblN1cHBvcnRzLmdldCh0KT09PW4mJih0aGlzLl90b2tlbml6YXRpb25TdXBwb3J0cy5kZWxldGUodCksdGhpcy5oYW5kbGVDaGFuZ2UoW3RdKSl9KX1nZXQodCl7cmV0dXJuIHRoaXMuX3Rva2VuaXphdGlvblN1cHBvcnRzLmdldCh0KXx8bnVsbH1yZWdpc3RlckZhY3RvcnkodCxuKXt0aGlzLl9mYWN0b3JpZXMuZ2V0KHQpPy5kaXNwb3NlKCk7Y29uc3Qgcz1uZXcgdTEodGhpcyx0LG4pO3JldHVybiB0aGlzLl9mYWN0b3JpZXMuc2V0KHQscyksdXQoKCk9Pntjb25zdCByPXRoaXMuX2ZhY3Rvcmllcy5nZXQodCk7IXJ8fHIhPT1zfHwodGhpcy5fZmFjdG9yaWVzLmRlbGV0ZSh0KSxyLmRpc3Bvc2UoKSl9KX1hc3luYyBnZXRPckNyZWF0ZSh0KXtjb25zdCBuPXRoaXMuZ2V0KHQpO2lmKG4pcmV0dXJuIG47Y29uc3Qgcz10aGlzLl9mYWN0b3JpZXMuZ2V0KHQpO3JldHVybiFzfHxzLmlzUmVzb2x2ZWQ/bnVsbDooYXdhaXQgcy5yZXNvbHZlKCksdGhpcy5nZXQodCkpfWlzUmVzb2x2ZWQodCl7aWYodGhpcy5nZXQodCkpcmV0dXJuITA7Y29uc3Qgcz10aGlzLl9mYWN0b3JpZXMuZ2V0KHQpO3JldHVybiEhKCFzfHxzLmlzUmVzb2x2ZWQpfXNldENvbG9yTWFwKHQpe3RoaXMuX2NvbG9yTWFwPXQsdGhpcy5fb25EaWRDaGFuZ2UuZmlyZSh7Y2hhbmdlZExhbmd1YWdlczpBcnJheS5mcm9tKHRoaXMuX3Rva2VuaXphdGlvblN1cHBvcnRzLmtleXMoKSksY2hhbmdlZENvbG9yTWFwOiEwfSl9Z2V0Q29sb3JNYXAoKXtyZXR1cm4gdGhpcy5fY29sb3JNYXB9Z2V0RGVmYXVsdEJhY2tncm91bmQoKXtyZXR1cm4gdGhpcy5fY29sb3JNYXAmJnRoaXMuX2NvbG9yTWFwLmxlbmd0aD4yP3RoaXMuX2NvbG9yTWFwWzJdOm51bGx9fWNsYXNzIHUxIGV4dGVuZHMgTWV7Z2V0IGlzUmVzb2x2ZWQoKXtyZXR1cm4gdGhpcy5faXNSZXNvbHZlZH1jb25zdHJ1Y3Rvcih0LG4scyl7c3VwZXIoKSx0aGlzLl9yZWdpc3RyeT10LHRoaXMuX2xhbmd1YWdlSWQ9bix0aGlzLl9mYWN0b3J5PXMsdGhpcy5faXNEaXNwb3NlZD0hMSx0aGlzLl9yZXNvbHZlUHJvbWlzZT1udWxsLHRoaXMuX2lzUmVzb2x2ZWQ9ITF9ZGlzcG9zZSgpe3RoaXMuX2lzRGlzcG9zZWQ9ITAsc3VwZXIuZGlzcG9zZSgpfWFzeW5jIHJlc29sdmUoKXtyZXR1cm4gdGhpcy5fcmVzb2x2ZVByb21pc2V8fCh0aGlzLl9yZXNvbHZlUHJvbWlzZT10aGlzLl9jcmVhdGUoKSksdGhpcy5fcmVzb2x2ZVByb21pc2V9YXN5bmMgX2NyZWF0ZSgpe2NvbnN0IHQ9YXdhaXQgdGhpcy5fZmFjdG9yeS50b2tlbml6YXRpb25TdXBwb3J0O3RoaXMuX2lzUmVzb2x2ZWQ9ITAsdCYmIXRoaXMuX2lzRGlzcG9zZWQmJnRoaXMuX3JlZ2lzdGVyKHRoaXMuX3JlZ2lzdHJ5LnJlZ2lzdGVyKHRoaXMuX2xhbmd1YWdlSWQsdCkpfX1jbGFzcyBjMXtjb25zdHJ1Y3Rvcih0LG4scyl7dGhpcy5vZmZzZXQ9dCx0aGlzLnR5cGU9bix0aGlzLmxhbmd1YWdlPXMsdGhpcy5fdG9rZW5CcmFuZD12b2lkIDB9dG9TdHJpbmcoKXtyZXR1cm4iKCIrdGhpcy5vZmZzZXQrIiwgIit0aGlzLnR5cGUrIikifX12YXIgZXM7KGZ1bmN0aW9uKGUpe2VbZS5JbmNyZWFzZT0wXT0iSW5jcmVhc2UiLGVbZS5EZWNyZWFzZT0xXT0iRGVjcmVhc2UifSkoZXN8fChlcz17fSkpO3ZhciB0czsoZnVuY3Rpb24oZSl7Y29uc3QgdD1uZXcgTWFwO3Quc2V0KDAsTS5zeW1ib2xNZXRob2QpLHQuc2V0KDEsTS5zeW1ib2xGdW5jdGlvbiksdC5zZXQoMixNLnN5bWJvbENvbnN0cnVjdG9yKSx0LnNldCgzLE0uc3ltYm9sRmllbGQpLHQuc2V0KDQsTS5zeW1ib2xWYXJpYWJsZSksdC5zZXQoNSxNLnN5bWJvbENsYXNzKSx0LnNldCg2LE0uc3ltYm9sU3RydWN0KSx0LnNldCg3LE0uc3ltYm9sSW50ZXJmYWNlKSx0LnNldCg4LE0uc3ltYm9sTW9kdWxlKSx0LnNldCg5LE0uc3ltYm9sUHJvcGVydHkpLHQuc2V0KDEwLE0uc3ltYm9sRXZlbnQpLHQuc2V0KDExLE0uc3ltYm9sT3BlcmF0b3IpLHQuc2V0KDEyLE0uc3ltYm9sVW5pdCksdC5zZXQoMTMsTS5zeW1ib2xWYWx1ZSksdC5zZXQoMTUsTS5zeW1ib2xFbnVtKSx0LnNldCgxNCxNLnN5bWJvbENvbnN0YW50KSx0LnNldCgxNSxNLnN5bWJvbEVudW0pLHQuc2V0KDE2LE0uc3ltYm9sRW51bU1lbWJlciksdC5zZXQoMTcsTS5zeW1ib2xLZXl3b3JkKSx0LnNldCgyNyxNLnN5bWJvbFNuaXBwZXQpLHQuc2V0KDE4LE0uc3ltYm9sVGV4dCksdC5zZXQoMTksTS5zeW1ib2xDb2xvciksdC5zZXQoMjAsTS5zeW1ib2xGaWxlKSx0LnNldCgyMSxNLnN5bWJvbFJlZmVyZW5jZSksdC5zZXQoMjIsTS5zeW1ib2xDdXN0b21Db2xvciksdC5zZXQoMjMsTS5zeW1ib2xGb2xkZXIpLHQuc2V0KDI0LE0uc3ltYm9sVHlwZVBhcmFtZXRlciksdC5zZXQoMjUsTS5hY2NvdW50KSx0LnNldCgyNixNLmlzc3Vlcyk7ZnVuY3Rpb24gbihpKXtsZXQgbD10LmdldChpKTtyZXR1cm4gbHx8KGNvbnNvbGUuaW5mbygiTm8gY29kaWNvbiBmb3VuZCBmb3IgQ29tcGxldGlvbkl0ZW1LaW5kICIraSksbD1NLnN5bWJvbFByb3BlcnR5KSxsfWUudG9JY29uPW47Y29uc3Qgcz1uZXcgTWFwO3Muc2V0KCJtZXRob2QiLDApLHMuc2V0KCJmdW5jdGlvbiIsMSkscy5zZXQoImNvbnN0cnVjdG9yIiwyKSxzLnNldCgiZmllbGQiLDMpLHMuc2V0KCJ2YXJpYWJsZSIsNCkscy5zZXQoImNsYXNzIiw1KSxzLnNldCgic3RydWN0Iiw2KSxzLnNldCgiaW50ZXJmYWNlIiw3KSxzLnNldCgibW9kdWxlIiw4KSxzLnNldCgicHJvcGVydHkiLDkpLHMuc2V0KCJldmVudCIsMTApLHMuc2V0KCJvcGVyYXRvciIsMTEpLHMuc2V0KCJ1bml0IiwxMikscy5zZXQoInZhbHVlIiwxMykscy5zZXQoImNvbnN0YW50IiwxNCkscy5zZXQoImVudW0iLDE1KSxzLnNldCgiZW51bS1tZW1iZXIiLDE2KSxzLnNldCgiZW51bU1lbWJlciIsMTYpLHMuc2V0KCJrZXl3b3JkIiwxNykscy5zZXQoInNuaXBwZXQiLDI3KSxzLnNldCgidGV4dCIsMTgpLHMuc2V0KCJjb2xvciIsMTkpLHMuc2V0KCJmaWxlIiwyMCkscy5zZXQoInJlZmVyZW5jZSIsMjEpLHMuc2V0KCJjdXN0b21jb2xvciIsMjIpLHMuc2V0KCJmb2xkZXIiLDIzKSxzLnNldCgidHlwZS1wYXJhbWV0ZXIiLDI0KSxzLnNldCgidHlwZVBhcmFtZXRlciIsMjQpLHMuc2V0KCJhY2NvdW50IiwyNSkscy5zZXQoImlzc3VlIiwyNik7ZnVuY3Rpb24gcihpLGwpe2xldCBvPXMuZ2V0KGkpO3JldHVybiB0eXBlb2Ygbz4idSImJiFsJiYobz05KSxvfWUuZnJvbVN0cmluZz1yfSkodHN8fCh0cz17fSkpO3ZhciBuczsoZnVuY3Rpb24oZSl7ZVtlLkF1dG9tYXRpYz0wXT0iQXV0b21hdGljIixlW2UuRXhwbGljaXQ9MV09IkV4cGxpY2l0In0pKG5zfHwobnM9e30pKTt2YXIgc3M7KGZ1bmN0aW9uKGUpe2VbZS5BdXRvbWF0aWM9MF09IkF1dG9tYXRpYyIsZVtlLlBhc3RlQXM9MV09IlBhc3RlQXMifSkoc3N8fChzcz17fSkpO3ZhciByczsoZnVuY3Rpb24oZSl7ZVtlLkludm9rZT0xXT0iSW52b2tlIixlW2UuVHJpZ2dlckNoYXJhY3Rlcj0yXT0iVHJpZ2dlckNoYXJhY3RlciIsZVtlLkNvbnRlbnRDaGFuZ2U9M109IkNvbnRlbnRDaGFuZ2UifSkocnN8fChycz17fSkpO3ZhciBpczsoZnVuY3Rpb24oZSl7ZVtlLlRleHQ9MF09IlRleHQiLGVbZS5SZWFkPTFdPSJSZWFkIixlW2UuV3JpdGU9Ml09IldyaXRlIn0pKGlzfHwoaXM9e30pKSx6KCJBcnJheSIsImFycmF5IikseigiQm9vbGVhbiIsImJvb2xlYW4iKSx6KCJDbGFzcyIsImNsYXNzIikseigiQ29uc3RhbnQiLCJjb25zdGFudCIpLHooIkNvbnN0cnVjdG9yIiwiY29uc3RydWN0b3IiKSx6KCJFbnVtIiwiZW51bWVyYXRpb24iKSx6KCJFbnVtTWVtYmVyIiwiZW51bWVyYXRpb24gbWVtYmVyIikseigiRXZlbnQiLCJldmVudCIpLHooIkZpZWxkIiwiZmllbGQiKSx6KCJGaWxlIiwiZmlsZSIpLHooIkZ1bmN0aW9uIiwiZnVuY3Rpb24iKSx6KCJJbnRlcmZhY2UiLCJpbnRlcmZhY2UiKSx6KCJLZXkiLCJrZXkiKSx6KCJNZXRob2QiLCJtZXRob2QiKSx6KCJNb2R1bGUiLCJtb2R1bGUiKSx6KCJOYW1lc3BhY2UiLCJuYW1lc3BhY2UiKSx6KCJOdWxsIiwibnVsbCIpLHooIk51bWJlciIsIm51bWJlciIpLHooIk9iamVjdCIsIm9iamVjdCIpLHooIk9wZXJhdG9yIiwib3BlcmF0b3IiKSx6KCJQYWNrYWdlIiwicGFja2FnZSIpLHooIlByb3BlcnR5IiwicHJvcGVydHkiKSx6KCJTdHJpbmciLCJzdHJpbmciKSx6KCJTdHJ1Y3QiLCJzdHJ1Y3QiKSx6KCJUeXBlUGFyYW1ldGVyIiwidHlwZSBwYXJhbWV0ZXIiKSx6KCJWYXJpYWJsZSIsInZhcmlhYmxlIik7dmFyIGFzOyhmdW5jdGlvbihlKXtjb25zdCB0PW5ldyBNYXA7dC5zZXQoMCxNLnN5bWJvbEZpbGUpLHQuc2V0KDEsTS5zeW1ib2xNb2R1bGUpLHQuc2V0KDIsTS5zeW1ib2xOYW1lc3BhY2UpLHQuc2V0KDMsTS5zeW1ib2xQYWNrYWdlKSx0LnNldCg0LE0uc3ltYm9sQ2xhc3MpLHQuc2V0KDUsTS5zeW1ib2xNZXRob2QpLHQuc2V0KDYsTS5zeW1ib2xQcm9wZXJ0eSksdC5zZXQoNyxNLnN5bWJvbEZpZWxkKSx0LnNldCg4LE0uc3ltYm9sQ29uc3RydWN0b3IpLHQuc2V0KDksTS5zeW1ib2xFbnVtKSx0LnNldCgxMCxNLnN5bWJvbEludGVyZmFjZSksdC5zZXQoMTEsTS5zeW1ib2xGdW5jdGlvbiksdC5zZXQoMTIsTS5zeW1ib2xWYXJpYWJsZSksdC5zZXQoMTMsTS5zeW1ib2xDb25zdGFudCksdC5zZXQoMTQsTS5zeW1ib2xTdHJpbmcpLHQuc2V0KDE1LE0uc3ltYm9sTnVtYmVyKSx0LnNldCgxNixNLnN5bWJvbEJvb2xlYW4pLHQuc2V0KDE3LE0uc3ltYm9sQXJyYXkpLHQuc2V0KDE4LE0uc3ltYm9sT2JqZWN0KSx0LnNldCgxOSxNLnN5bWJvbEtleSksdC5zZXQoMjAsTS5zeW1ib2xOdWxsKSx0LnNldCgyMSxNLnN5bWJvbEVudW1NZW1iZXIpLHQuc2V0KDIyLE0uc3ltYm9sU3RydWN0KSx0LnNldCgyMyxNLnN5bWJvbEV2ZW50KSx0LnNldCgyNCxNLnN5bWJvbE9wZXJhdG9yKSx0LnNldCgyNSxNLnN5bWJvbFR5cGVQYXJhbWV0ZXIpO2Z1bmN0aW9uIG4ocyl7bGV0IHI9dC5nZXQocyk7cmV0dXJuIHJ8fChjb25zb2xlLmluZm8oIk5vIGNvZGljb24gZm91bmQgZm9yIFN5bWJvbEtpbmQgIitzKSxyPU0uc3ltYm9sUHJvcGVydHkpLHJ9ZS50b0ljb249bn0pKGFzfHwoYXM9e30pKTtjb25zdCBhZT1jbGFzcyBhZXtzdGF0aWMgZnJvbVZhbHVlKHQpe3N3aXRjaCh0KXtjYXNlImNvbW1lbnQiOnJldHVybiBhZS5Db21tZW50O2Nhc2UiaW1wb3J0cyI6cmV0dXJuIGFlLkltcG9ydHM7Y2FzZSJyZWdpb24iOnJldHVybiBhZS5SZWdpb259cmV0dXJuIG5ldyBhZSh0KX1jb25zdHJ1Y3Rvcih0KXt0aGlzLnZhbHVlPXR9fTthZS5Db21tZW50PW5ldyBhZSgiY29tbWVudCIpLGFlLkltcG9ydHM9bmV3IGFlKCJpbXBvcnRzIiksYWUuUmVnaW9uPW5ldyBhZSgicmVnaW9uIik7bGV0IGxzPWFlO3ZhciBvczsoZnVuY3Rpb24oZSl7ZVtlLkFJR2VuZXJhdGVkPTFdPSJBSUdlbmVyYXRlZCJ9KShvc3x8KG9zPXt9KSk7dmFyIHVzOyhmdW5jdGlvbihlKXtlW2UuSW52b2tlPTBdPSJJbnZva2UiLGVbZS5BdXRvbWF0aWM9MV09IkF1dG9tYXRpYyJ9KSh1c3x8KHVzPXt9KSk7dmFyIGNzOyhmdW5jdGlvbihlKXtmdW5jdGlvbiB0KG4pe3JldHVybiFufHx0eXBlb2YgbiE9Im9iamVjdCI/ITE6dHlwZW9mIG4uaWQ9PSJzdHJpbmciJiZ0eXBlb2Ygbi50aXRsZT09InN0cmluZyJ9ZS5pcz10fSkoY3N8fChjcz17fSkpO3ZhciBoczsoZnVuY3Rpb24oZSl7ZVtlLlR5cGU9MV09IlR5cGUiLGVbZS5QYXJhbWV0ZXI9Ml09IlBhcmFtZXRlciJ9KShoc3x8KGhzPXt9KSksbmV3IG8xO3ZhciBmczsoZnVuY3Rpb24oZSl7ZVtlLkludm9rZT0wXT0iSW52b2tlIixlW2UuQXV0b21hdGljPTFdPSJBdXRvbWF0aWMifSkoZnN8fChmcz17fSkpO3ZhciBkczsoZnVuY3Rpb24oZSl7ZVtlLlVua25vd249MF09IlVua25vd24iLGVbZS5EaXNhYmxlZD0xXT0iRGlzYWJsZWQiLGVbZS5FbmFibGVkPTJdPSJFbmFibGVkIn0pKGRzfHwoZHM9e30pKTt2YXIgbXM7KGZ1bmN0aW9uKGUpe2VbZS5JbnZva2U9MV09Ikludm9rZSIsZVtlLkF1dG89Ml09IkF1dG8ifSkobXN8fChtcz17fSkpO3ZhciBnczsoZnVuY3Rpb24oZSl7ZVtlLk5vbmU9MF09Ik5vbmUiLGVbZS5LZWVwV2hpdGVzcGFjZT0xXT0iS2VlcFdoaXRlc3BhY2UiLGVbZS5JbnNlcnRBc1NuaXBwZXQ9NF09Ikluc2VydEFzU25pcHBldCJ9KShnc3x8KGdzPXt9KSk7dmFyIGJzOyhmdW5jdGlvbihlKXtlW2UuTWV0aG9kPTBdPSJNZXRob2QiLGVbZS5GdW5jdGlvbj0xXT0iRnVuY3Rpb24iLGVbZS5Db25zdHJ1Y3Rvcj0yXT0iQ29uc3RydWN0b3IiLGVbZS5GaWVsZD0zXT0iRmllbGQiLGVbZS5WYXJpYWJsZT00XT0iVmFyaWFibGUiLGVbZS5DbGFzcz01XT0iQ2xhc3MiLGVbZS5TdHJ1Y3Q9Nl09IlN0cnVjdCIsZVtlLkludGVyZmFjZT03XT0iSW50ZXJmYWNlIixlW2UuTW9kdWxlPThdPSJNb2R1bGUiLGVbZS5Qcm9wZXJ0eT05XT0iUHJvcGVydHkiLGVbZS5FdmVudD0xMF09IkV2ZW50IixlW2UuT3BlcmF0b3I9MTFdPSJPcGVyYXRvciIsZVtlLlVuaXQ9MTJdPSJVbml0IixlW2UuVmFsdWU9MTNdPSJWYWx1ZSIsZVtlLkNvbnN0YW50PTE0XT0iQ29uc3RhbnQiLGVbZS5FbnVtPTE1XT0iRW51bSIsZVtlLkVudW1NZW1iZXI9MTZdPSJFbnVtTWVtYmVyIixlW2UuS2V5d29yZD0xN109IktleXdvcmQiLGVbZS5UZXh0PTE4XT0iVGV4dCIsZVtlLkNvbG9yPTE5XT0iQ29sb3IiLGVbZS5GaWxlPTIwXT0iRmlsZSIsZVtlLlJlZmVyZW5jZT0yMV09IlJlZmVyZW5jZSIsZVtlLkN1c3RvbWNvbG9yPTIyXT0iQ3VzdG9tY29sb3IiLGVbZS5Gb2xkZXI9MjNdPSJGb2xkZXIiLGVbZS5UeXBlUGFyYW1ldGVyPTI0XT0iVHlwZVBhcmFtZXRlciIsZVtlLlVzZXI9MjVdPSJVc2VyIixlW2UuSXNzdWU9MjZdPSJJc3N1ZSIsZVtlLlNuaXBwZXQ9MjddPSJTbmlwcGV0In0pKGJzfHwoYnM9e30pKTt2YXIgeHM7KGZ1bmN0aW9uKGUpe2VbZS5EZXByZWNhdGVkPTFdPSJEZXByZWNhdGVkIn0pKHhzfHwoeHM9e30pKTt2YXIgX3M7KGZ1bmN0aW9uKGUpe2VbZS5JbnZva2U9MF09Ikludm9rZSIsZVtlLlRyaWdnZXJDaGFyYWN0ZXI9MV09IlRyaWdnZXJDaGFyYWN0ZXIiLGVbZS5UcmlnZ2VyRm9ySW5jb21wbGV0ZUNvbXBsZXRpb25zPTJdPSJUcmlnZ2VyRm9ySW5jb21wbGV0ZUNvbXBsZXRpb25zIn0pKF9zfHwoX3M9e30pKTt2YXIgcHM7KGZ1bmN0aW9uKGUpe2VbZS5FWEFDVD0wXT0iRVhBQ1QiLGVbZS5BQk9WRT0xXT0iQUJPVkUiLGVbZS5CRUxPVz0yXT0iQkVMT1cifSkocHN8fChwcz17fSkpO3ZhciB3czsoZnVuY3Rpb24oZSl7ZVtlLk5vdFNldD0wXT0iTm90U2V0IixlW2UuQ29udGVudEZsdXNoPTFdPSJDb250ZW50Rmx1c2giLGVbZS5SZWNvdmVyRnJvbU1hcmtlcnM9Ml09IlJlY292ZXJGcm9tTWFya2VycyIsZVtlLkV4cGxpY2l0PTNdPSJFeHBsaWNpdCIsZVtlLlBhc3RlPTRdPSJQYXN0ZSIsZVtlLlVuZG89NV09IlVuZG8iLGVbZS5SZWRvPTZdPSJSZWRvIn0pKHdzfHwod3M9e30pKTt2YXIgTHM7KGZ1bmN0aW9uKGUpe2VbZS5MRj0xXT0iTEYiLGVbZS5DUkxGPTJdPSJDUkxGIn0pKExzfHwoTHM9e30pKTt2YXIgTnM7KGZ1bmN0aW9uKGUpe2VbZS5UZXh0PTBdPSJUZXh0IixlW2UuUmVhZD0xXT0iUmVhZCIsZVtlLldyaXRlPTJdPSJXcml0ZSJ9KShOc3x8KE5zPXt9KSk7dmFyIHZzOyhmdW5jdGlvbihlKXtlW2UuTm9uZT0wXT0iTm9uZSIsZVtlLktlZXA9MV09IktlZXAiLGVbZS5CcmFja2V0cz0yXT0iQnJhY2tldHMiLGVbZS5BZHZhbmNlZD0zXT0iQWR2YW5jZWQiLGVbZS5GdWxsPTRdPSJGdWxsIn0pKHZzfHwodnM9e30pKTt2YXIgU3M7KGZ1bmN0aW9uKGUpe2VbZS5hY2NlcHRTdWdnZXN0aW9uT25Db21taXRDaGFyYWN0ZXI9MF09ImFjY2VwdFN1Z2dlc3Rpb25PbkNvbW1pdENoYXJhY3RlciIsZVtlLmFjY2VwdFN1Z2dlc3Rpb25PbkVudGVyPTFdPSJhY2NlcHRTdWdnZXN0aW9uT25FbnRlciIsZVtlLmFjY2Vzc2liaWxpdHlTdXBwb3J0PTJdPSJhY2Nlc3NpYmlsaXR5U3VwcG9ydCIsZVtlLmFjY2Vzc2liaWxpdHlQYWdlU2l6ZT0zXT0iYWNjZXNzaWJpbGl0eVBhZ2VTaXplIixlW2UuYXJpYUxhYmVsPTRdPSJhcmlhTGFiZWwiLGVbZS5hcmlhUmVxdWlyZWQ9NV09ImFyaWFSZXF1aXJlZCIsZVtlLmF1dG9DbG9zaW5nQnJhY2tldHM9Nl09ImF1dG9DbG9zaW5nQnJhY2tldHMiLGVbZS5hdXRvQ2xvc2luZ0NvbW1lbnRzPTddPSJhdXRvQ2xvc2luZ0NvbW1lbnRzIixlW2Uuc2NyZWVuUmVhZGVyQW5ub3VuY2VJbmxpbmVTdWdnZXN0aW9uPThdPSJzY3JlZW5SZWFkZXJBbm5vdW5jZUlubGluZVN1Z2dlc3Rpb24iLGVbZS5hdXRvQ2xvc2luZ0RlbGV0ZT05XT0iYXV0b0Nsb3NpbmdEZWxldGUiLGVbZS5hdXRvQ2xvc2luZ092ZXJ0eXBlPTEwXT0iYXV0b0Nsb3NpbmdPdmVydHlwZSIsZVtlLmF1dG9DbG9zaW5nUXVvdGVzPTExXT0iYXV0b0Nsb3NpbmdRdW90ZXMiLGVbZS5hdXRvSW5kZW50PTEyXT0iYXV0b0luZGVudCIsZVtlLmF1dG9tYXRpY0xheW91dD0xM109ImF1dG9tYXRpY0xheW91dCIsZVtlLmF1dG9TdXJyb3VuZD0xNF09ImF1dG9TdXJyb3VuZCIsZVtlLmJyYWNrZXRQYWlyQ29sb3JpemF0aW9uPTE1XT0iYnJhY2tldFBhaXJDb2xvcml6YXRpb24iLGVbZS5ndWlkZXM9MTZdPSJndWlkZXMiLGVbZS5jb2RlTGVucz0xN109ImNvZGVMZW5zIixlW2UuY29kZUxlbnNGb250RmFtaWx5PTE4XT0iY29kZUxlbnNGb250RmFtaWx5IixlW2UuY29kZUxlbnNGb250U2l6ZT0xOV09ImNvZGVMZW5zRm9udFNpemUiLGVbZS5jb2xvckRlY29yYXRvcnM9MjBdPSJjb2xvckRlY29yYXRvcnMiLGVbZS5jb2xvckRlY29yYXRvcnNMaW1pdD0yMV09ImNvbG9yRGVjb3JhdG9yc0xpbWl0IixlW2UuY29sdW1uU2VsZWN0aW9uPTIyXT0iY29sdW1uU2VsZWN0aW9uIixlW2UuY29tbWVudHM9MjNdPSJjb21tZW50cyIsZVtlLmNvbnRleHRtZW51PTI0XT0iY29udGV4dG1lbnUiLGVbZS5jb3B5V2l0aFN5bnRheEhpZ2hsaWdodGluZz0yNV09ImNvcHlXaXRoU3ludGF4SGlnaGxpZ2h0aW5nIixlW2UuY3Vyc29yQmxpbmtpbmc9MjZdPSJjdXJzb3JCbGlua2luZyIsZVtlLmN1cnNvclNtb290aENhcmV0QW5pbWF0aW9uPTI3XT0iY3Vyc29yU21vb3RoQ2FyZXRBbmltYXRpb24iLGVbZS5jdXJzb3JTdHlsZT0yOF09ImN1cnNvclN0eWxlIixlW2UuY3Vyc29yU3Vycm91bmRpbmdMaW5lcz0yOV09ImN1cnNvclN1cnJvdW5kaW5nTGluZXMiLGVbZS5jdXJzb3JTdXJyb3VuZGluZ0xpbmVzU3R5bGU9MzBdPSJjdXJzb3JTdXJyb3VuZGluZ0xpbmVzU3R5bGUiLGVbZS5jdXJzb3JXaWR0aD0zMV09ImN1cnNvcldpZHRoIixlW2UuZGlzYWJsZUxheWVySGludGluZz0zMl09ImRpc2FibGVMYXllckhpbnRpbmciLGVbZS5kaXNhYmxlTW9ub3NwYWNlT3B0aW1pemF0aW9ucz0zM109ImRpc2FibGVNb25vc3BhY2VPcHRpbWl6YXRpb25zIixlW2UuZG9tUmVhZE9ubHk9MzRdPSJkb21SZWFkT25seSIsZVtlLmRyYWdBbmREcm9wPTM1XT0iZHJhZ0FuZERyb3AiLGVbZS5kcm9wSW50b0VkaXRvcj0zNl09ImRyb3BJbnRvRWRpdG9yIixlW2UuZW1wdHlTZWxlY3Rpb25DbGlwYm9hcmQ9MzddPSJlbXB0eVNlbGVjdGlvbkNsaXBib2FyZCIsZVtlLmV4cGVyaW1lbnRhbFdoaXRlc3BhY2VSZW5kZXJpbmc9MzhdPSJleHBlcmltZW50YWxXaGl0ZXNwYWNlUmVuZGVyaW5nIixlW2UuZXh0cmFFZGl0b3JDbGFzc05hbWU9MzldPSJleHRyYUVkaXRvckNsYXNzTmFtZSIsZVtlLmZhc3RTY3JvbGxTZW5zaXRpdml0eT00MF09ImZhc3RTY3JvbGxTZW5zaXRpdml0eSIsZVtlLmZpbmQ9NDFdPSJmaW5kIixlW2UuZml4ZWRPdmVyZmxvd1dpZGdldHM9NDJdPSJmaXhlZE92ZXJmbG93V2lkZ2V0cyIsZVtlLmZvbGRpbmc9NDNdPSJmb2xkaW5nIixlW2UuZm9sZGluZ1N0cmF0ZWd5PTQ0XT0iZm9sZGluZ1N0cmF0ZWd5IixlW2UuZm9sZGluZ0hpZ2hsaWdodD00NV09ImZvbGRpbmdIaWdobGlnaHQiLGVbZS5mb2xkaW5nSW1wb3J0c0J5RGVmYXVsdD00Nl09ImZvbGRpbmdJbXBvcnRzQnlEZWZhdWx0IixlW2UuZm9sZGluZ01heGltdW1SZWdpb25zPTQ3XT0iZm9sZGluZ01heGltdW1SZWdpb25zIixlW2UudW5mb2xkT25DbGlja0FmdGVyRW5kT2ZMaW5lPTQ4XT0idW5mb2xkT25DbGlja0FmdGVyRW5kT2ZMaW5lIixlW2UuZm9udEZhbWlseT00OV09ImZvbnRGYW1pbHkiLGVbZS5mb250SW5mbz01MF09ImZvbnRJbmZvIixlW2UuZm9udExpZ2F0dXJlcz01MV09ImZvbnRMaWdhdHVyZXMiLGVbZS5mb250U2l6ZT01Ml09ImZvbnRTaXplIixlW2UuZm9udFdlaWdodD01M109ImZvbnRXZWlnaHQiLGVbZS5mb250VmFyaWF0aW9ucz01NF09ImZvbnRWYXJpYXRpb25zIixlW2UuZm9ybWF0T25QYXN0ZT01NV09ImZvcm1hdE9uUGFzdGUiLGVbZS5mb3JtYXRPblR5cGU9NTZdPSJmb3JtYXRPblR5cGUiLGVbZS5nbHlwaE1hcmdpbj01N109ImdseXBoTWFyZ2luIixlW2UuZ290b0xvY2F0aW9uPTU4XT0iZ290b0xvY2F0aW9uIixlW2UuaGlkZUN1cnNvckluT3ZlcnZpZXdSdWxlcj01OV09ImhpZGVDdXJzb3JJbk92ZXJ2aWV3UnVsZXIiLGVbZS5ob3Zlcj02MF09ImhvdmVyIixlW2UuaW5EaWZmRWRpdG9yPTYxXT0iaW5EaWZmRWRpdG9yIixlW2UuaW5saW5lU3VnZ2VzdD02Ml09ImlubGluZVN1Z2dlc3QiLGVbZS5pbmxpbmVFZGl0PTYzXT0iaW5saW5lRWRpdCIsZVtlLmxldHRlclNwYWNpbmc9NjRdPSJsZXR0ZXJTcGFjaW5nIixlW2UubGlnaHRidWxiPTY1XT0ibGlnaHRidWxiIixlW2UubGluZURlY29yYXRpb25zV2lkdGg9NjZdPSJsaW5lRGVjb3JhdGlvbnNXaWR0aCIsZVtlLmxpbmVIZWlnaHQ9NjddPSJsaW5lSGVpZ2h0IixlW2UubGluZU51bWJlcnM9NjhdPSJsaW5lTnVtYmVycyIsZVtlLmxpbmVOdW1iZXJzTWluQ2hhcnM9NjldPSJsaW5lTnVtYmVyc01pbkNoYXJzIixlW2UubGlua2VkRWRpdGluZz03MF09ImxpbmtlZEVkaXRpbmciLGVbZS5saW5rcz03MV09ImxpbmtzIixlW2UubWF0Y2hCcmFja2V0cz03Ml09Im1hdGNoQnJhY2tldHMiLGVbZS5taW5pbWFwPTczXT0ibWluaW1hcCIsZVtlLm1vdXNlU3R5bGU9NzRdPSJtb3VzZVN0eWxlIixlW2UubW91c2VXaGVlbFNjcm9sbFNlbnNpdGl2aXR5PTc1XT0ibW91c2VXaGVlbFNjcm9sbFNlbnNpdGl2aXR5IixlW2UubW91c2VXaGVlbFpvb209NzZdPSJtb3VzZVdoZWVsWm9vbSIsZVtlLm11bHRpQ3Vyc29yTWVyZ2VPdmVybGFwcGluZz03N109Im11bHRpQ3Vyc29yTWVyZ2VPdmVybGFwcGluZyIsZVtlLm11bHRpQ3Vyc29yTW9kaWZpZXI9NzhdPSJtdWx0aUN1cnNvck1vZGlmaWVyIixlW2UubXVsdGlDdXJzb3JQYXN0ZT03OV09Im11bHRpQ3Vyc29yUGFzdGUiLGVbZS5tdWx0aUN1cnNvckxpbWl0PTgwXT0ibXVsdGlDdXJzb3JMaW1pdCIsZVtlLm9jY3VycmVuY2VzSGlnaGxpZ2h0PTgxXT0ib2NjdXJyZW5jZXNIaWdobGlnaHQiLGVbZS5vdmVydmlld1J1bGVyQm9yZGVyPTgyXT0ib3ZlcnZpZXdSdWxlckJvcmRlciIsZVtlLm92ZXJ2aWV3UnVsZXJMYW5lcz04M109Im92ZXJ2aWV3UnVsZXJMYW5lcyIsZVtlLnBhZGRpbmc9ODRdPSJwYWRkaW5nIixlW2UucGFzdGVBcz04NV09InBhc3RlQXMiLGVbZS5wYXJhbWV0ZXJIaW50cz04Nl09InBhcmFtZXRlckhpbnRzIixlW2UucGVla1dpZGdldERlZmF1bHRGb2N1cz04N109InBlZWtXaWRnZXREZWZhdWx0Rm9jdXMiLGVbZS5wbGFjZWhvbGRlcj04OF09InBsYWNlaG9sZGVyIixlW2UuZGVmaW5pdGlvbkxpbmtPcGVuc0luUGVlaz04OV09ImRlZmluaXRpb25MaW5rT3BlbnNJblBlZWsiLGVbZS5xdWlja1N1Z2dlc3Rpb25zPTkwXT0icXVpY2tTdWdnZXN0aW9ucyIsZVtlLnF1aWNrU3VnZ2VzdGlvbnNEZWxheT05MV09InF1aWNrU3VnZ2VzdGlvbnNEZWxheSIsZVtlLnJlYWRPbmx5PTkyXT0icmVhZE9ubHkiLGVbZS5yZWFkT25seU1lc3NhZ2U9OTNdPSJyZWFkT25seU1lc3NhZ2UiLGVbZS5yZW5hbWVPblR5cGU9OTRdPSJyZW5hbWVPblR5cGUiLGVbZS5yZW5kZXJDb250cm9sQ2hhcmFjdGVycz05NV09InJlbmRlckNvbnRyb2xDaGFyYWN0ZXJzIixlW2UucmVuZGVyRmluYWxOZXdsaW5lPTk2XT0icmVuZGVyRmluYWxOZXdsaW5lIixlW2UucmVuZGVyTGluZUhpZ2hsaWdodD05N109InJlbmRlckxpbmVIaWdobGlnaHQiLGVbZS5yZW5kZXJMaW5lSGlnaGxpZ2h0T25seVdoZW5Gb2N1cz05OF09InJlbmRlckxpbmVIaWdobGlnaHRPbmx5V2hlbkZvY3VzIixlW2UucmVuZGVyVmFsaWRhdGlvbkRlY29yYXRpb25zPTk5XT0icmVuZGVyVmFsaWRhdGlvbkRlY29yYXRpb25zIixlW2UucmVuZGVyV2hpdGVzcGFjZT0xMDBdPSJyZW5kZXJXaGl0ZXNwYWNlIixlW2UucmV2ZWFsSG9yaXpvbnRhbFJpZ2h0UGFkZGluZz0xMDFdPSJyZXZlYWxIb3Jpem9udGFsUmlnaHRQYWRkaW5nIixlW2Uucm91bmRlZFNlbGVjdGlvbj0xMDJdPSJyb3VuZGVkU2VsZWN0aW9uIixlW2UucnVsZXJzPTEwM109InJ1bGVycyIsZVtlLnNjcm9sbGJhcj0xMDRdPSJzY3JvbGxiYXIiLGVbZS5zY3JvbGxCZXlvbmRMYXN0Q29sdW1uPTEwNV09InNjcm9sbEJleW9uZExhc3RDb2x1bW4iLGVbZS5zY3JvbGxCZXlvbmRMYXN0TGluZT0xMDZdPSJzY3JvbGxCZXlvbmRMYXN0TGluZSIsZVtlLnNjcm9sbFByZWRvbWluYW50QXhpcz0xMDddPSJzY3JvbGxQcmVkb21pbmFudEF4aXMiLGVbZS5zZWxlY3Rpb25DbGlwYm9hcmQ9MTA4XT0ic2VsZWN0aW9uQ2xpcGJvYXJkIixlW2Uuc2VsZWN0aW9uSGlnaGxpZ2h0PTEwOV09InNlbGVjdGlvbkhpZ2hsaWdodCIsZVtlLnNlbGVjdE9uTGluZU51bWJlcnM9MTEwXT0ic2VsZWN0T25MaW5lTnVtYmVycyIsZVtlLnNob3dGb2xkaW5nQ29udHJvbHM9MTExXT0ic2hvd0ZvbGRpbmdDb250cm9scyIsZVtlLnNob3dVbnVzZWQ9MTEyXT0ic2hvd1VudXNlZCIsZVtlLnNuaXBwZXRTdWdnZXN0aW9ucz0xMTNdPSJzbmlwcGV0U3VnZ2VzdGlvbnMiLGVbZS5zbWFydFNlbGVjdD0xMTRdPSJzbWFydFNlbGVjdCIsZVtlLnNtb290aFNjcm9sbGluZz0xMTVdPSJzbW9vdGhTY3JvbGxpbmciLGVbZS5zdGlja3lTY3JvbGw9MTE2XT0ic3RpY2t5U2Nyb2xsIixlW2Uuc3RpY2t5VGFiU3RvcHM9MTE3XT0ic3RpY2t5VGFiU3RvcHMiLGVbZS5zdG9wUmVuZGVyaW5nTGluZUFmdGVyPTExOF09InN0b3BSZW5kZXJpbmdMaW5lQWZ0ZXIiLGVbZS5zdWdnZXN0PTExOV09InN1Z2dlc3QiLGVbZS5zdWdnZXN0Rm9udFNpemU9MTIwXT0ic3VnZ2VzdEZvbnRTaXplIixlW2Uuc3VnZ2VzdExpbmVIZWlnaHQ9MTIxXT0ic3VnZ2VzdExpbmVIZWlnaHQiLGVbZS5zdWdnZXN0T25UcmlnZ2VyQ2hhcmFjdGVycz0xMjJdPSJzdWdnZXN0T25UcmlnZ2VyQ2hhcmFjdGVycyIsZVtlLnN1Z2dlc3RTZWxlY3Rpb249MTIzXT0ic3VnZ2VzdFNlbGVjdGlvbiIsZVtlLnRhYkNvbXBsZXRpb249MTI0XT0idGFiQ29tcGxldGlvbiIsZVtlLnRhYkluZGV4PTEyNV09InRhYkluZGV4IixlW2UudW5pY29kZUhpZ2hsaWdodGluZz0xMjZdPSJ1bmljb2RlSGlnaGxpZ2h0aW5nIixlW2UudW51c3VhbExpbmVUZXJtaW5hdG9ycz0xMjddPSJ1bnVzdWFsTGluZVRlcm1pbmF0b3JzIixlW2UudXNlU2hhZG93RE9NPTEyOF09InVzZVNoYWRvd0RPTSIsZVtlLnVzZVRhYlN0b3BzPTEyOV09InVzZVRhYlN0b3BzIixlW2Uud29yZEJyZWFrPTEzMF09IndvcmRCcmVhayIsZVtlLndvcmRTZWdtZW50ZXJMb2NhbGVzPTEzMV09IndvcmRTZWdtZW50ZXJMb2NhbGVzIixlW2Uud29yZFNlcGFyYXRvcnM9MTMyXT0id29yZFNlcGFyYXRvcnMiLGVbZS53b3JkV3JhcD0xMzNdPSJ3b3JkV3JhcCIsZVtlLndvcmRXcmFwQnJlYWtBZnRlckNoYXJhY3RlcnM9MTM0XT0id29yZFdyYXBCcmVha0FmdGVyQ2hhcmFjdGVycyIsZVtlLndvcmRXcmFwQnJlYWtCZWZvcmVDaGFyYWN0ZXJzPTEzNV09IndvcmRXcmFwQnJlYWtCZWZvcmVDaGFyYWN0ZXJzIixlW2Uud29yZFdyYXBDb2x1bW49MTM2XT0id29yZFdyYXBDb2x1bW4iLGVbZS53b3JkV3JhcE92ZXJyaWRlMT0xMzddPSJ3b3JkV3JhcE92ZXJyaWRlMSIsZVtlLndvcmRXcmFwT3ZlcnJpZGUyPTEzOF09IndvcmRXcmFwT3ZlcnJpZGUyIixlW2Uud3JhcHBpbmdJbmRlbnQ9MTM5XT0id3JhcHBpbmdJbmRlbnQiLGVbZS53cmFwcGluZ1N0cmF0ZWd5PTE0MF09IndyYXBwaW5nU3RyYXRlZ3kiLGVbZS5zaG93RGVwcmVjYXRlZD0xNDFdPSJzaG93RGVwcmVjYXRlZCIsZVtlLmlubGF5SGludHM9MTQyXT0iaW5sYXlIaW50cyIsZVtlLmVkaXRvckNsYXNzTmFtZT0xNDNdPSJlZGl0b3JDbGFzc05hbWUiLGVbZS5waXhlbFJhdGlvPTE0NF09InBpeGVsUmF0aW8iLGVbZS50YWJGb2N1c01vZGU9MTQ1XT0idGFiRm9jdXNNb2RlIixlW2UubGF5b3V0SW5mbz0xNDZdPSJsYXlvdXRJbmZvIixlW2Uud3JhcHBpbmdJbmZvPTE0N109IndyYXBwaW5nSW5mbyIsZVtlLmRlZmF1bHRDb2xvckRlY29yYXRvcnM9MTQ4XT0iZGVmYXVsdENvbG9yRGVjb3JhdG9ycyIsZVtlLmNvbG9yRGVjb3JhdG9yc0FjdGl2YXRlZE9uPTE0OV09ImNvbG9yRGVjb3JhdG9yc0FjdGl2YXRlZE9uIixlW2UuaW5saW5lQ29tcGxldGlvbnNBY2Nlc3NpYmlsaXR5VmVyYm9zZT0xNTBdPSJpbmxpbmVDb21wbGV0aW9uc0FjY2Vzc2liaWxpdHlWZXJib3NlIn0pKFNzfHwoU3M9e30pKTt2YXIgQ3M7KGZ1bmN0aW9uKGUpe2VbZS5UZXh0RGVmaW5lZD0wXT0iVGV4dERlZmluZWQiLGVbZS5MRj0xXT0iTEYiLGVbZS5DUkxGPTJdPSJDUkxGIn0pKENzfHwoQ3M9e30pKTt2YXIgQXM7KGZ1bmN0aW9uKGUpe2VbZS5MRj0wXT0iTEYiLGVbZS5DUkxGPTFdPSJDUkxGIn0pKEFzfHwoQXM9e30pKTt2YXIgUnM7KGZ1bmN0aW9uKGUpe2VbZS5MZWZ0PTFdPSJMZWZ0IixlW2UuQ2VudGVyPTJdPSJDZW50ZXIiLGVbZS5SaWdodD0zXT0iUmlnaHQifSkoUnN8fChScz17fSkpO3ZhciB5czsoZnVuY3Rpb24oZSl7ZVtlLkluY3JlYXNlPTBdPSJJbmNyZWFzZSIsZVtlLkRlY3JlYXNlPTFdPSJEZWNyZWFzZSJ9KSh5c3x8KHlzPXt9KSk7dmFyIEVzOyhmdW5jdGlvbihlKXtlW2UuTm9uZT0wXT0iTm9uZSIsZVtlLkluZGVudD0xXT0iSW5kZW50IixlW2UuSW5kZW50T3V0ZGVudD0yXT0iSW5kZW50T3V0ZGVudCIsZVtlLk91dGRlbnQ9M109Ik91dGRlbnQifSkoRXN8fChFcz17fSkpO3ZhciBNczsoZnVuY3Rpb24oZSl7ZVtlLkJvdGg9MF09IkJvdGgiLGVbZS5SaWdodD0xXT0iUmlnaHQiLGVbZS5MZWZ0PTJdPSJMZWZ0IixlW2UuTm9uZT0zXT0iTm9uZSJ9KShNc3x8KE1zPXt9KSk7dmFyIGtzOyhmdW5jdGlvbihlKXtlW2UuVHlwZT0xXT0iVHlwZSIsZVtlLlBhcmFtZXRlcj0yXT0iUGFyYW1ldGVyIn0pKGtzfHwoa3M9e30pKTt2YXIgRnM7KGZ1bmN0aW9uKGUpe2VbZS5BdXRvbWF0aWM9MF09IkF1dG9tYXRpYyIsZVtlLkV4cGxpY2l0PTFdPSJFeHBsaWNpdCJ9KShGc3x8KEZzPXt9KSk7dmFyIERzOyhmdW5jdGlvbihlKXtlW2UuSW52b2tlPTBdPSJJbnZva2UiLGVbZS5BdXRvbWF0aWM9MV09IkF1dG9tYXRpYyJ9KShEc3x8KERzPXt9KSk7dmFyIGxuOyhmdW5jdGlvbihlKXtlW2UuRGVwZW5kc09uS2JMYXlvdXQ9LTFdPSJEZXBlbmRzT25LYkxheW91dCIsZVtlLlVua25vd249MF09IlVua25vd24iLGVbZS5CYWNrc3BhY2U9MV09IkJhY2tzcGFjZSIsZVtlLlRhYj0yXT0iVGFiIixlW2UuRW50ZXI9M109IkVudGVyIixlW2UuU2hpZnQ9NF09IlNoaWZ0IixlW2UuQ3RybD01XT0iQ3RybCIsZVtlLkFsdD02XT0iQWx0IixlW2UuUGF1c2VCcmVhaz03XT0iUGF1c2VCcmVhayIsZVtlLkNhcHNMb2NrPThdPSJDYXBzTG9jayIsZVtlLkVzY2FwZT05XT0iRXNjYXBlIixlW2UuU3BhY2U9MTBdPSJTcGFjZSIsZVtlLlBhZ2VVcD0xMV09IlBhZ2VVcCIsZVtlLlBhZ2VEb3duPTEyXT0iUGFnZURvd24iLGVbZS5FbmQ9MTNdPSJFbmQiLGVbZS5Ib21lPTE0XT0iSG9tZSIsZVtlLkxlZnRBcnJvdz0xNV09IkxlZnRBcnJvdyIsZVtlLlVwQXJyb3c9MTZdPSJVcEFycm93IixlW2UuUmlnaHRBcnJvdz0xN109IlJpZ2h0QXJyb3ciLGVbZS5Eb3duQXJyb3c9MThdPSJEb3duQXJyb3ciLGVbZS5JbnNlcnQ9MTldPSJJbnNlcnQiLGVbZS5EZWxldGU9MjBdPSJEZWxldGUiLGVbZS5EaWdpdDA9MjFdPSJEaWdpdDAiLGVbZS5EaWdpdDE9MjJdPSJEaWdpdDEiLGVbZS5EaWdpdDI9MjNdPSJEaWdpdDIiLGVbZS5EaWdpdDM9MjRdPSJEaWdpdDMiLGVbZS5EaWdpdDQ9MjVdPSJEaWdpdDQiLGVbZS5EaWdpdDU9MjZdPSJEaWdpdDUiLGVbZS5EaWdpdDY9MjddPSJEaWdpdDYiLGVbZS5EaWdpdDc9MjhdPSJEaWdpdDciLGVbZS5EaWdpdDg9MjldPSJEaWdpdDgiLGVbZS5EaWdpdDk9MzBdPSJEaWdpdDkiLGVbZS5LZXlBPTMxXT0iS2V5QSIsZVtlLktleUI9MzJdPSJLZXlCIixlW2UuS2V5Qz0zM109IktleUMiLGVbZS5LZXlEPTM0XT0iS2V5RCIsZVtlLktleUU9MzVdPSJLZXlFIixlW2UuS2V5Rj0zNl09IktleUYiLGVbZS5LZXlHPTM3XT0iS2V5RyIsZVtlLktleUg9MzhdPSJLZXlIIixlW2UuS2V5ST0zOV09IktleUkiLGVbZS5LZXlKPTQwXT0iS2V5SiIsZVtlLktleUs9NDFdPSJLZXlLIixlW2UuS2V5TD00Ml09IktleUwiLGVbZS5LZXlNPTQzXT0iS2V5TSIsZVtlLktleU49NDRdPSJLZXlOIixlW2UuS2V5Tz00NV09IktleU8iLGVbZS5LZXlQPTQ2XT0iS2V5UCIsZVtlLktleVE9NDddPSJLZXlRIixlW2UuS2V5Uj00OF09IktleVIiLGVbZS5LZXlTPTQ5XT0iS2V5UyIsZVtlLktleVQ9NTBdPSJLZXlUIixlW2UuS2V5VT01MV09IktleVUiLGVbZS5LZXlWPTUyXT0iS2V5ViIsZVtlLktleVc9NTNdPSJLZXlXIixlW2UuS2V5WD01NF09IktleVgiLGVbZS5LZXlZPTU1XT0iS2V5WSIsZVtlLktleVo9NTZdPSJLZXlaIixlW2UuTWV0YT01N109Ik1ldGEiLGVbZS5Db250ZXh0TWVudT01OF09IkNvbnRleHRNZW51IixlW2UuRjE9NTldPSJGMSIsZVtlLkYyPTYwXT0iRjIiLGVbZS5GMz02MV09IkYzIixlW2UuRjQ9NjJdPSJGNCIsZVtlLkY1PTYzXT0iRjUiLGVbZS5GNj02NF09IkY2IixlW2UuRjc9NjVdPSJGNyIsZVtlLkY4PTY2XT0iRjgiLGVbZS5GOT02N109IkY5IixlW2UuRjEwPTY4XT0iRjEwIixlW2UuRjExPTY5XT0iRjExIixlW2UuRjEyPTcwXT0iRjEyIixlW2UuRjEzPTcxXT0iRjEzIixlW2UuRjE0PTcyXT0iRjE0IixlW2UuRjE1PTczXT0iRjE1IixlW2UuRjE2PTc0XT0iRjE2IixlW2UuRjE3PTc1XT0iRjE3IixlW2UuRjE4PTc2XT0iRjE4IixlW2UuRjE5PTc3XT0iRjE5IixlW2UuRjIwPTc4XT0iRjIwIixlW2UuRjIxPTc5XT0iRjIxIixlW2UuRjIyPTgwXT0iRjIyIixlW2UuRjIzPTgxXT0iRjIzIixlW2UuRjI0PTgyXT0iRjI0IixlW2UuTnVtTG9jaz04M109Ik51bUxvY2siLGVbZS5TY3JvbGxMb2NrPTg0XT0iU2Nyb2xsTG9jayIsZVtlLlNlbWljb2xvbj04NV09IlNlbWljb2xvbiIsZVtlLkVxdWFsPTg2XT0iRXF1YWwiLGVbZS5Db21tYT04N109IkNvbW1hIixlW2UuTWludXM9ODhdPSJNaW51cyIsZVtlLlBlcmlvZD04OV09IlBlcmlvZCIsZVtlLlNsYXNoPTkwXT0iU2xhc2giLGVbZS5CYWNrcXVvdGU9OTFdPSJCYWNrcXVvdGUiLGVbZS5CcmFja2V0TGVmdD05Ml09IkJyYWNrZXRMZWZ0IixlW2UuQmFja3NsYXNoPTkzXT0iQmFja3NsYXNoIixlW2UuQnJhY2tldFJpZ2h0PTk0XT0iQnJhY2tldFJpZ2h0IixlW2UuUXVvdGU9OTVdPSJRdW90ZSIsZVtlLk9FTV84PTk2XT0iT0VNXzgiLGVbZS5JbnRsQmFja3NsYXNoPTk3XT0iSW50bEJhY2tzbGFzaCIsZVtlLk51bXBhZDA9OThdPSJOdW1wYWQwIixlW2UuTnVtcGFkMT05OV09Ik51bXBhZDEiLGVbZS5OdW1wYWQyPTEwMF09Ik51bXBhZDIiLGVbZS5OdW1wYWQzPTEwMV09Ik51bXBhZDMiLGVbZS5OdW1wYWQ0PTEwMl09Ik51bXBhZDQiLGVbZS5OdW1wYWQ1PTEwM109Ik51bXBhZDUiLGVbZS5OdW1wYWQ2PTEwNF09Ik51bXBhZDYiLGVbZS5OdW1wYWQ3PTEwNV09Ik51bXBhZDciLGVbZS5OdW1wYWQ4PTEwNl09Ik51bXBhZDgiLGVbZS5OdW1wYWQ5PTEwN109Ik51bXBhZDkiLGVbZS5OdW1wYWRNdWx0aXBseT0xMDhdPSJOdW1wYWRNdWx0aXBseSIsZVtlLk51bXBhZEFkZD0xMDldPSJOdW1wYWRBZGQiLGVbZS5OVU1QQURfU0VQQVJBVE9SPTExMF09Ik5VTVBBRF9TRVBBUkFUT1IiLGVbZS5OdW1wYWRTdWJ0cmFjdD0xMTFdPSJOdW1wYWRTdWJ0cmFjdCIsZVtlLk51bXBhZERlY2ltYWw9MTEyXT0iTnVtcGFkRGVjaW1hbCIsZVtlLk51bXBhZERpdmlkZT0xMTNdPSJOdW1wYWREaXZpZGUiLGVbZS5LRVlfSU5fQ09NUE9TSVRJT049MTE0XT0iS0VZX0lOX0NPTVBPU0lUSU9OIixlW2UuQUJOVF9DMT0xMTVdPSJBQk5UX0MxIixlW2UuQUJOVF9DMj0xMTZdPSJBQk5UX0MyIixlW2UuQXVkaW9Wb2x1bWVNdXRlPTExN109IkF1ZGlvVm9sdW1lTXV0ZSIsZVtlLkF1ZGlvVm9sdW1lVXA9MTE4XT0iQXVkaW9Wb2x1bWVVcCIsZVtlLkF1ZGlvVm9sdW1lRG93bj0xMTldPSJBdWRpb1ZvbHVtZURvd24iLGVbZS5Ccm93c2VyU2VhcmNoPTEyMF09IkJyb3dzZXJTZWFyY2giLGVbZS5Ccm93c2VySG9tZT0xMjFdPSJCcm93c2VySG9tZSIsZVtlLkJyb3dzZXJCYWNrPTEyMl09IkJyb3dzZXJCYWNrIixlW2UuQnJvd3NlckZvcndhcmQ9MTIzXT0iQnJvd3NlckZvcndhcmQiLGVbZS5NZWRpYVRyYWNrTmV4dD0xMjRdPSJNZWRpYVRyYWNrTmV4dCIsZVtlLk1lZGlhVHJhY2tQcmV2aW91cz0xMjVdPSJNZWRpYVRyYWNrUHJldmlvdXMiLGVbZS5NZWRpYVN0b3A9MTI2XT0iTWVkaWFTdG9wIixlW2UuTWVkaWFQbGF5UGF1c2U9MTI3XT0iTWVkaWFQbGF5UGF1c2UiLGVbZS5MYXVuY2hNZWRpYVBsYXllcj0xMjhdPSJMYXVuY2hNZWRpYVBsYXllciIsZVtlLkxhdW5jaE1haWw9MTI5XT0iTGF1bmNoTWFpbCIsZVtlLkxhdW5jaEFwcDI9MTMwXT0iTGF1bmNoQXBwMiIsZVtlLkNsZWFyPTEzMV09IkNsZWFyIixlW2UuTUFYX1ZBTFVFPTEzMl09Ik1BWF9WQUxVRSJ9KShsbnx8KGxuPXt9KSk7dmFyIG9uOyhmdW5jdGlvbihlKXtlW2UuSGludD0xXT0iSGludCIsZVtlLkluZm89Ml09IkluZm8iLGVbZS5XYXJuaW5nPTRdPSJXYXJuaW5nIixlW2UuRXJyb3I9OF09IkVycm9yIn0pKG9ufHwob249e30pKTt2YXIgdW47KGZ1bmN0aW9uKGUpe2VbZS5Vbm5lY2Vzc2FyeT0xXT0iVW5uZWNlc3NhcnkiLGVbZS5EZXByZWNhdGVkPTJdPSJEZXByZWNhdGVkIn0pKHVufHwodW49e30pKTt2YXIgUHM7KGZ1bmN0aW9uKGUpe2VbZS5JbmxpbmU9MV09IklubGluZSIsZVtlLkd1dHRlcj0yXT0iR3V0dGVyIn0pKFBzfHwoUHM9e30pKTt2YXIgVHM7KGZ1bmN0aW9uKGUpe2VbZS5Ob3JtYWw9MV09Ik5vcm1hbCIsZVtlLlVuZGVybGluZWQ9Ml09IlVuZGVybGluZWQifSkoVHN8fChUcz17fSkpO3ZhciBWczsoZnVuY3Rpb24oZSl7ZVtlLlVOS05PV049MF09IlVOS05PV04iLGVbZS5URVhUQVJFQT0xXT0iVEVYVEFSRUEiLGVbZS5HVVRURVJfR0xZUEhfTUFSR0lOPTJdPSJHVVRURVJfR0xZUEhfTUFSR0lOIixlW2UuR1VUVEVSX0xJTkVfTlVNQkVSUz0zXT0iR1VUVEVSX0xJTkVfTlVNQkVSUyIsZVtlLkdVVFRFUl9MSU5FX0RFQ09SQVRJT05TPTRdPSJHVVRURVJfTElORV9ERUNPUkFUSU9OUyIsZVtlLkdVVFRFUl9WSUVXX1pPTkU9NV09IkdVVFRFUl9WSUVXX1pPTkUiLGVbZS5DT05URU5UX1RFWFQ9Nl09IkNPTlRFTlRfVEVYVCIsZVtlLkNPTlRFTlRfRU1QVFk9N109IkNPTlRFTlRfRU1QVFkiLGVbZS5DT05URU5UX1ZJRVdfWk9ORT04XT0iQ09OVEVOVF9WSUVXX1pPTkUiLGVbZS5DT05URU5UX1dJREdFVD05XT0iQ09OVEVOVF9XSURHRVQiLGVbZS5PVkVSVklFV19SVUxFUj0xMF09Ik9WRVJWSUVXX1JVTEVSIixlW2UuU0NST0xMQkFSPTExXT0iU0NST0xMQkFSIixlW2UuT1ZFUkxBWV9XSURHRVQ9MTJdPSJPVkVSTEFZX1dJREdFVCIsZVtlLk9VVFNJREVfRURJVE9SPTEzXT0iT1VUU0lERV9FRElUT1IifSkoVnN8fChWcz17fSkpO3ZhciBJczsoZnVuY3Rpb24oZSl7ZVtlLkFJR2VuZXJhdGVkPTFdPSJBSUdlbmVyYXRlZCJ9KShJc3x8KElzPXt9KSk7dmFyIEJzOyhmdW5jdGlvbihlKXtlW2UuSW52b2tlPTBdPSJJbnZva2UiLGVbZS5BdXRvbWF0aWM9MV09IkF1dG9tYXRpYyJ9KShCc3x8KEJzPXt9KSk7dmFyIHFzOyhmdW5jdGlvbihlKXtlW2UuVE9QX1JJR0hUX0NPUk5FUj0wXT0iVE9QX1JJR0hUX0NPUk5FUiIsZVtlLkJPVFRPTV9SSUdIVF9DT1JORVI9MV09IkJPVFRPTV9SSUdIVF9DT1JORVIiLGVbZS5UT1BfQ0VOVEVSPTJdPSJUT1BfQ0VOVEVSIn0pKHFzfHwocXM9e30pKTt2YXIgVXM7KGZ1bmN0aW9uKGUpe2VbZS5MZWZ0PTFdPSJMZWZ0IixlW2UuQ2VudGVyPTJdPSJDZW50ZXIiLGVbZS5SaWdodD00XT0iUmlnaHQiLGVbZS5GdWxsPTddPSJGdWxsIn0pKFVzfHwoVXM9e30pKTt2YXIgSHM7KGZ1bmN0aW9uKGUpe2VbZS5Xb3JkPTBdPSJXb3JkIixlW2UuTGluZT0xXT0iTGluZSIsZVtlLlN1Z2dlc3Q9Ml09IlN1Z2dlc3QifSkoSHN8fChIcz17fSkpO3ZhciBXczsoZnVuY3Rpb24oZSl7ZVtlLkxlZnQ9MF09IkxlZnQiLGVbZS5SaWdodD0xXT0iUmlnaHQiLGVbZS5Ob25lPTJdPSJOb25lIixlW2UuTGVmdE9mSW5qZWN0ZWRUZXh0PTNdPSJMZWZ0T2ZJbmplY3RlZFRleHQiLGVbZS5SaWdodE9mSW5qZWN0ZWRUZXh0PTRdPSJSaWdodE9mSW5qZWN0ZWRUZXh0In0pKFdzfHwoV3M9e30pKTt2YXIgenM7KGZ1bmN0aW9uKGUpe2VbZS5PZmY9MF09Ik9mZiIsZVtlLk9uPTFdPSJPbiIsZVtlLlJlbGF0aXZlPTJdPSJSZWxhdGl2ZSIsZVtlLkludGVydmFsPTNdPSJJbnRlcnZhbCIsZVtlLkN1c3RvbT00XT0iQ3VzdG9tIn0pKHpzfHwoenM9e30pKTt2YXIgJHM7KGZ1bmN0aW9uKGUpe2VbZS5Ob25lPTBdPSJOb25lIixlW2UuVGV4dD0xXT0iVGV4dCIsZVtlLkJsb2Nrcz0yXT0iQmxvY2tzIn0pKCRzfHwoJHM9e30pKTt2YXIgR3M7KGZ1bmN0aW9uKGUpe2VbZS5TbW9vdGg9MF09IlNtb290aCIsZVtlLkltbWVkaWF0ZT0xXT0iSW1tZWRpYXRlIn0pKEdzfHwoR3M9e30pKTt2YXIgT3M7KGZ1bmN0aW9uKGUpe2VbZS5BdXRvPTFdPSJBdXRvIixlW2UuSGlkZGVuPTJdPSJIaWRkZW4iLGVbZS5WaXNpYmxlPTNdPSJWaXNpYmxlIn0pKE9zfHwoT3M9e30pKTt2YXIgY247KGZ1bmN0aW9uKGUpe2VbZS5MVFI9MF09IkxUUiIsZVtlLlJUTD0xXT0iUlRMIn0pKGNufHwoY249e30pKTt2YXIganM7KGZ1bmN0aW9uKGUpe2UuT2ZmPSJvZmYiLGUuT25Db2RlPSJvbkNvZGUiLGUuT249Im9uIn0pKGpzfHwoanM9e30pKTt2YXIgWHM7KGZ1bmN0aW9uKGUpe2VbZS5JbnZva2U9MV09Ikludm9rZSIsZVtlLlRyaWdnZXJDaGFyYWN0ZXI9Ml09IlRyaWdnZXJDaGFyYWN0ZXIiLGVbZS5Db250ZW50Q2hhbmdlPTNdPSJDb250ZW50Q2hhbmdlIn0pKFhzfHwoWHM9e30pKTt2YXIgUXM7KGZ1bmN0aW9uKGUpe2VbZS5GaWxlPTBdPSJGaWxlIixlW2UuTW9kdWxlPTFdPSJNb2R1bGUiLGVbZS5OYW1lc3BhY2U9Ml09Ik5hbWVzcGFjZSIsZVtlLlBhY2thZ2U9M109IlBhY2thZ2UiLGVbZS5DbGFzcz00XT0iQ2xhc3MiLGVbZS5NZXRob2Q9NV09Ik1ldGhvZCIsZVtlLlByb3BlcnR5PTZdPSJQcm9wZXJ0eSIsZVtlLkZpZWxkPTddPSJGaWVsZCIsZVtlLkNvbnN0cnVjdG9yPThdPSJDb25zdHJ1Y3RvciIsZVtlLkVudW09OV09IkVudW0iLGVbZS5JbnRlcmZhY2U9MTBdPSJJbnRlcmZhY2UiLGVbZS5GdW5jdGlvbj0xMV09IkZ1bmN0aW9uIixlW2UuVmFyaWFibGU9MTJdPSJWYXJpYWJsZSIsZVtlLkNvbnN0YW50PTEzXT0iQ29uc3RhbnQiLGVbZS5TdHJpbmc9MTRdPSJTdHJpbmciLGVbZS5OdW1iZXI9MTVdPSJOdW1iZXIiLGVbZS5Cb29sZWFuPTE2XT0iQm9vbGVhbiIsZVtlLkFycmF5PTE3XT0iQXJyYXkiLGVbZS5PYmplY3Q9MThdPSJPYmplY3QiLGVbZS5LZXk9MTldPSJLZXkiLGVbZS5OdWxsPTIwXT0iTnVsbCIsZVtlLkVudW1NZW1iZXI9MjFdPSJFbnVtTWVtYmVyIixlW2UuU3RydWN0PTIyXT0iU3RydWN0IixlW2UuRXZlbnQ9MjNdPSJFdmVudCIsZVtlLk9wZXJhdG9yPTI0XT0iT3BlcmF0b3IiLGVbZS5UeXBlUGFyYW1ldGVyPTI1XT0iVHlwZVBhcmFtZXRlciJ9KShRc3x8KFFzPXt9KSk7dmFyIEpzOyhmdW5jdGlvbihlKXtlW2UuRGVwcmVjYXRlZD0xXT0iRGVwcmVjYXRlZCJ9KShKc3x8KEpzPXt9KSk7dmFyIFlzOyhmdW5jdGlvbihlKXtlW2UuSGlkZGVuPTBdPSJIaWRkZW4iLGVbZS5CbGluaz0xXT0iQmxpbmsiLGVbZS5TbW9vdGg9Ml09IlNtb290aCIsZVtlLlBoYXNlPTNdPSJQaGFzZSIsZVtlLkV4cGFuZD00XT0iRXhwYW5kIixlW2UuU29saWQ9NV09IlNvbGlkIn0pKFlzfHwoWXM9e30pKTt2YXIgWnM7KGZ1bmN0aW9uKGUpe2VbZS5MaW5lPTFdPSJMaW5lIixlW2UuQmxvY2s9Ml09IkJsb2NrIixlW2UuVW5kZXJsaW5lPTNdPSJVbmRlcmxpbmUiLGVbZS5MaW5lVGhpbj00XT0iTGluZVRoaW4iLGVbZS5CbG9ja091dGxpbmU9NV09IkJsb2NrT3V0bGluZSIsZVtlLlVuZGVybGluZVRoaW49Nl09IlVuZGVybGluZVRoaW4ifSkoWnN8fChacz17fSkpO3ZhciBLczsoZnVuY3Rpb24oZSl7ZVtlLkFsd2F5c0dyb3dzV2hlblR5cGluZ0F0RWRnZXM9MF09IkFsd2F5c0dyb3dzV2hlblR5cGluZ0F0RWRnZXMiLGVbZS5OZXZlckdyb3dzV2hlblR5cGluZ0F0RWRnZXM9MV09Ik5ldmVyR3Jvd3NXaGVuVHlwaW5nQXRFZGdlcyIsZVtlLkdyb3dzT25seVdoZW5UeXBpbmdCZWZvcmU9Ml09Ikdyb3dzT25seVdoZW5UeXBpbmdCZWZvcmUiLGVbZS5Hcm93c09ubHlXaGVuVHlwaW5nQWZ0ZXI9M109Ikdyb3dzT25seVdoZW5UeXBpbmdBZnRlciJ9KShLc3x8KEtzPXt9KSk7dmFyIGVyOyhmdW5jdGlvbihlKXtlW2UuTm9uZT0wXT0iTm9uZSIsZVtlLlNhbWU9MV09IlNhbWUiLGVbZS5JbmRlbnQ9Ml09IkluZGVudCIsZVtlLkRlZXBJbmRlbnQ9M109IkRlZXBJbmRlbnQifSkoZXJ8fChlcj17fSkpO2NvbnN0IE9lPWNsYXNzIE9le3N0YXRpYyBjaG9yZCh0LG4pe3JldHVybiBpMSh0LG4pfX07T2UuQ3RybENtZD0yMDQ4LE9lLlNoaWZ0PTEwMjQsT2UuQWx0PTUxMixPZS5XaW5DdHJsPTI1NjtsZXQgaG49T2U7ZnVuY3Rpb24gaDEoKXtyZXR1cm57ZWRpdG9yOnZvaWQgMCxsYW5ndWFnZXM6dm9pZCAwLENhbmNlbGxhdGlvblRva2VuU291cmNlOnQxLEVtaXR0ZXI6bGUsS2V5Q29kZTpsbixLZXlNb2Q6aG4sUG9zaXRpb246cSxSYW5nZTprLFNlbGVjdGlvbjpzZSxTZWxlY3Rpb25EaXJlY3Rpb246Y24sTWFya2VyU2V2ZXJpdHk6b24sTWFya2VyVGFnOnVuLFVyaTpBZSxUb2tlbjpjMX19dmFyIHRyO2NsYXNzIGYxe2NvbnN0cnVjdG9yKCl7dGhpc1t0cl09IkxpbmtlZE1hcCIsdGhpcy5fbWFwPW5ldyBNYXAsdGhpcy5faGVhZD12b2lkIDAsdGhpcy5fdGFpbD12b2lkIDAsdGhpcy5fc2l6ZT0wLHRoaXMuX3N0YXRlPTB9Y2xlYXIoKXt0aGlzLl9tYXAuY2xlYXIoKSx0aGlzLl9oZWFkPXZvaWQgMCx0aGlzLl90YWlsPXZvaWQgMCx0aGlzLl9zaXplPTAsdGhpcy5fc3RhdGUrK31pc0VtcHR5KCl7cmV0dXJuIXRoaXMuX2hlYWQmJiF0aGlzLl90YWlsfWdldCBzaXplKCl7cmV0dXJuIHRoaXMuX3NpemV9Z2V0IGZpcnN0KCl7cmV0dXJuIHRoaXMuX2hlYWQ/LnZhbHVlfWdldCBsYXN0KCl7cmV0dXJuIHRoaXMuX3RhaWw/LnZhbHVlfWhhcyh0KXtyZXR1cm4gdGhpcy5fbWFwLmhhcyh0KX1nZXQodCxuPTApe2NvbnN0IHM9dGhpcy5fbWFwLmdldCh0KTtpZihzKXJldHVybiBuIT09MCYmdGhpcy50b3VjaChzLG4pLHMudmFsdWV9c2V0KHQsbixzPTApe2xldCByPXRoaXMuX21hcC5nZXQodCk7aWYocilyLnZhbHVlPW4scyE9PTAmJnRoaXMudG91Y2gocixzKTtlbHNle3N3aXRjaChyPXtrZXk6dCx2YWx1ZTpuLG5leHQ6dm9pZCAwLHByZXZpb3VzOnZvaWQgMH0scyl7Y2FzZSAwOnRoaXMuYWRkSXRlbUxhc3Qocik7YnJlYWs7Y2FzZSAxOnRoaXMuYWRkSXRlbUZpcnN0KHIpO2JyZWFrO2Nhc2UgMjp0aGlzLmFkZEl0ZW1MYXN0KHIpO2JyZWFrO2RlZmF1bHQ6dGhpcy5hZGRJdGVtTGFzdChyKTticmVha310aGlzLl9tYXAuc2V0KHQsciksdGhpcy5fc2l6ZSsrfXJldHVybiB0aGlzfWRlbGV0ZSh0KXtyZXR1cm4hIXRoaXMucmVtb3ZlKHQpfXJlbW92ZSh0KXtjb25zdCBuPXRoaXMuX21hcC5nZXQodCk7aWYobilyZXR1cm4gdGhpcy5fbWFwLmRlbGV0ZSh0KSx0aGlzLnJlbW92ZUl0ZW0obiksdGhpcy5fc2l6ZS0tLG4udmFsdWV9c2hpZnQoKXtpZighdGhpcy5faGVhZCYmIXRoaXMuX3RhaWwpcmV0dXJuO2lmKCF0aGlzLl9oZWFkfHwhdGhpcy5fdGFpbCl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgbGlzdCIpO2NvbnN0IHQ9dGhpcy5faGVhZDtyZXR1cm4gdGhpcy5fbWFwLmRlbGV0ZSh0LmtleSksdGhpcy5yZW1vdmVJdGVtKHQpLHRoaXMuX3NpemUtLSx0LnZhbHVlfWZvckVhY2godCxuKXtjb25zdCBzPXRoaXMuX3N0YXRlO2xldCByPXRoaXMuX2hlYWQ7Zm9yKDtyOyl7aWYobj90LmJpbmQobikoci52YWx1ZSxyLmtleSx0aGlzKTp0KHIudmFsdWUsci5rZXksdGhpcyksdGhpcy5fc3RhdGUhPT1zKXRocm93IG5ldyBFcnJvcigiTGlua2VkTWFwIGdvdCBtb2RpZmllZCBkdXJpbmcgaXRlcmF0aW9uLiIpO3I9ci5uZXh0fX1rZXlzKCl7Y29uc3QgdD10aGlzLG49dGhpcy5fc3RhdGU7bGV0IHM9dGhpcy5faGVhZDtjb25zdCByPXtbU3ltYm9sLml0ZXJhdG9yXSgpe3JldHVybiByfSxuZXh0KCl7aWYodC5fc3RhdGUhPT1uKXRocm93IG5ldyBFcnJvcigiTGlua2VkTWFwIGdvdCBtb2RpZmllZCBkdXJpbmcgaXRlcmF0aW9uLiIpO2lmKHMpe2NvbnN0IGk9e3ZhbHVlOnMua2V5LGRvbmU6ITF9O3JldHVybiBzPXMubmV4dCxpfWVsc2UgcmV0dXJue3ZhbHVlOnZvaWQgMCxkb25lOiEwfX19O3JldHVybiByfXZhbHVlcygpe2NvbnN0IHQ9dGhpcyxuPXRoaXMuX3N0YXRlO2xldCBzPXRoaXMuX2hlYWQ7Y29uc3Qgcj17W1N5bWJvbC5pdGVyYXRvcl0oKXtyZXR1cm4gcn0sbmV4dCgpe2lmKHQuX3N0YXRlIT09bil0aHJvdyBuZXcgRXJyb3IoIkxpbmtlZE1hcCBnb3QgbW9kaWZpZWQgZHVyaW5nIGl0ZXJhdGlvbi4iKTtpZihzKXtjb25zdCBpPXt2YWx1ZTpzLnZhbHVlLGRvbmU6ITF9O3JldHVybiBzPXMubmV4dCxpfWVsc2UgcmV0dXJue3ZhbHVlOnZvaWQgMCxkb25lOiEwfX19O3JldHVybiByfWVudHJpZXMoKXtjb25zdCB0PXRoaXMsbj10aGlzLl9zdGF0ZTtsZXQgcz10aGlzLl9oZWFkO2NvbnN0IHI9e1tTeW1ib2wuaXRlcmF0b3JdKCl7cmV0dXJuIHJ9LG5leHQoKXtpZih0Ll9zdGF0ZSE9PW4pdGhyb3cgbmV3IEVycm9yKCJMaW5rZWRNYXAgZ290IG1vZGlmaWVkIGR1cmluZyBpdGVyYXRpb24uIik7aWYocyl7Y29uc3QgaT17dmFsdWU6W3Mua2V5LHMudmFsdWVdLGRvbmU6ITF9O3JldHVybiBzPXMubmV4dCxpfWVsc2UgcmV0dXJue3ZhbHVlOnZvaWQgMCxkb25lOiEwfX19O3JldHVybiByfVsodHI9U3ltYm9sLnRvU3RyaW5nVGFnLFN5bWJvbC5pdGVyYXRvcildKCl7cmV0dXJuIHRoaXMuZW50cmllcygpfXRyaW1PbGQodCl7aWYodD49dGhpcy5zaXplKXJldHVybjtpZih0PT09MCl7dGhpcy5jbGVhcigpO3JldHVybn1sZXQgbj10aGlzLl9oZWFkLHM9dGhpcy5zaXplO2Zvcig7biYmcz50Oyl0aGlzLl9tYXAuZGVsZXRlKG4ua2V5KSxuPW4ubmV4dCxzLS07dGhpcy5faGVhZD1uLHRoaXMuX3NpemU9cyxuJiYobi5wcmV2aW91cz12b2lkIDApLHRoaXMuX3N0YXRlKyt9dHJpbU5ldyh0KXtpZih0Pj10aGlzLnNpemUpcmV0dXJuO2lmKHQ9PT0wKXt0aGlzLmNsZWFyKCk7cmV0dXJufWxldCBuPXRoaXMuX3RhaWwscz10aGlzLnNpemU7Zm9yKDtuJiZzPnQ7KXRoaXMuX21hcC5kZWxldGUobi5rZXkpLG49bi5wcmV2aW91cyxzLS07dGhpcy5fdGFpbD1uLHRoaXMuX3NpemU9cyxuJiYobi5uZXh0PXZvaWQgMCksdGhpcy5fc3RhdGUrK31hZGRJdGVtRmlyc3QodCl7aWYoIXRoaXMuX2hlYWQmJiF0aGlzLl90YWlsKXRoaXMuX3RhaWw9dDtlbHNlIGlmKHRoaXMuX2hlYWQpdC5uZXh0PXRoaXMuX2hlYWQsdGhpcy5faGVhZC5wcmV2aW91cz10O2Vsc2UgdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIGxpc3QiKTt0aGlzLl9oZWFkPXQsdGhpcy5fc3RhdGUrK31hZGRJdGVtTGFzdCh0KXtpZighdGhpcy5faGVhZCYmIXRoaXMuX3RhaWwpdGhpcy5faGVhZD10O2Vsc2UgaWYodGhpcy5fdGFpbCl0LnByZXZpb3VzPXRoaXMuX3RhaWwsdGhpcy5fdGFpbC5uZXh0PXQ7ZWxzZSB0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgbGlzdCIpO3RoaXMuX3RhaWw9dCx0aGlzLl9zdGF0ZSsrfXJlbW92ZUl0ZW0odCl7aWYodD09PXRoaXMuX2hlYWQmJnQ9PT10aGlzLl90YWlsKXRoaXMuX2hlYWQ9dm9pZCAwLHRoaXMuX3RhaWw9dm9pZCAwO2Vsc2UgaWYodD09PXRoaXMuX2hlYWQpe2lmKCF0Lm5leHQpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIGxpc3QiKTt0Lm5leHQucHJldmlvdXM9dm9pZCAwLHRoaXMuX2hlYWQ9dC5uZXh0fWVsc2UgaWYodD09PXRoaXMuX3RhaWwpe2lmKCF0LnByZXZpb3VzKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBsaXN0Iik7dC5wcmV2aW91cy5uZXh0PXZvaWQgMCx0aGlzLl90YWlsPXQucHJldmlvdXN9ZWxzZXtjb25zdCBuPXQubmV4dCxzPXQucHJldmlvdXM7aWYoIW58fCFzKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBsaXN0Iik7bi5wcmV2aW91cz1zLHMubmV4dD1ufXQubmV4dD12b2lkIDAsdC5wcmV2aW91cz12b2lkIDAsdGhpcy5fc3RhdGUrK310b3VjaCh0LG4pe2lmKCF0aGlzLl9oZWFkfHwhdGhpcy5fdGFpbCl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgbGlzdCIpO2lmKCEobiE9PTEmJm4hPT0yKSl7aWYobj09PTEpe2lmKHQ9PT10aGlzLl9oZWFkKXJldHVybjtjb25zdCBzPXQubmV4dCxyPXQucHJldmlvdXM7dD09PXRoaXMuX3RhaWw/KHIubmV4dD12b2lkIDAsdGhpcy5fdGFpbD1yKToocy5wcmV2aW91cz1yLHIubmV4dD1zKSx0LnByZXZpb3VzPXZvaWQgMCx0Lm5leHQ9dGhpcy5faGVhZCx0aGlzLl9oZWFkLnByZXZpb3VzPXQsdGhpcy5faGVhZD10LHRoaXMuX3N0YXRlKyt9ZWxzZSBpZihuPT09Mil7aWYodD09PXRoaXMuX3RhaWwpcmV0dXJuO2NvbnN0IHM9dC5uZXh0LHI9dC5wcmV2aW91czt0PT09dGhpcy5faGVhZD8ocy5wcmV2aW91cz12b2lkIDAsdGhpcy5faGVhZD1zKToocy5wcmV2aW91cz1yLHIubmV4dD1zKSx0Lm5leHQ9dm9pZCAwLHQucHJldmlvdXM9dGhpcy5fdGFpbCx0aGlzLl90YWlsLm5leHQ9dCx0aGlzLl90YWlsPXQsdGhpcy5fc3RhdGUrK319fXRvSlNPTigpe2NvbnN0IHQ9W107cmV0dXJuIHRoaXMuZm9yRWFjaCgobixzKT0+e3QucHVzaChbcyxuXSl9KSx0fWZyb21KU09OKHQpe3RoaXMuY2xlYXIoKTtmb3IoY29uc3RbbixzXW9mIHQpdGhpcy5zZXQobixzKX19Y2xhc3MgZDEgZXh0ZW5kcyBmMXtjb25zdHJ1Y3Rvcih0LG49MSl7c3VwZXIoKSx0aGlzLl9saW1pdD10LHRoaXMuX3JhdGlvPU1hdGgubWluKE1hdGgubWF4KDAsbiksMSl9Z2V0IGxpbWl0KCl7cmV0dXJuIHRoaXMuX2xpbWl0fXNldCBsaW1pdCh0KXt0aGlzLl9saW1pdD10LHRoaXMuY2hlY2tUcmltKCl9Z2V0KHQsbj0yKXtyZXR1cm4gc3VwZXIuZ2V0KHQsbil9cGVlayh0KXtyZXR1cm4gc3VwZXIuZ2V0KHQsMCl9c2V0KHQsbil7cmV0dXJuIHN1cGVyLnNldCh0LG4sMiksdGhpc31jaGVja1RyaW0oKXt0aGlzLnNpemU+dGhpcy5fbGltaXQmJnRoaXMudHJpbShNYXRoLnJvdW5kKHRoaXMuX2xpbWl0KnRoaXMuX3JhdGlvKSl9fWNsYXNzIG0xIGV4dGVuZHMgZDF7Y29uc3RydWN0b3IodCxuPTEpe3N1cGVyKHQsbil9dHJpbSh0KXt0aGlzLnRyaW1PbGQodCl9c2V0KHQsbil7cmV0dXJuIHN1cGVyLnNldCh0LG4pLHRoaXMuY2hlY2tUcmltKCksdGhpc319Y2xhc3MgZzF7Y29uc3RydWN0b3IoKXt0aGlzLm1hcD1uZXcgTWFwfWFkZCh0LG4pe2xldCBzPXRoaXMubWFwLmdldCh0KTtzfHwocz1uZXcgU2V0LHRoaXMubWFwLnNldCh0LHMpKSxzLmFkZChuKX1kZWxldGUodCxuKXtjb25zdCBzPXRoaXMubWFwLmdldCh0KTtzJiYocy5kZWxldGUobikscy5zaXplPT09MCYmdGhpcy5tYXAuZGVsZXRlKHQpKX1mb3JFYWNoKHQsbil7Y29uc3Qgcz10aGlzLm1hcC5nZXQodCk7cyYmcy5mb3JFYWNoKG4pfWdldCh0KXtjb25zdCBuPXRoaXMubWFwLmdldCh0KTtyZXR1cm4gbnx8bmV3IFNldH19bmV3IG0xKDEwKTt2YXIgbnI7KGZ1bmN0aW9uKGUpe2VbZS5MZWZ0PTFdPSJMZWZ0IixlW2UuQ2VudGVyPTJdPSJDZW50ZXIiLGVbZS5SaWdodD00XT0iUmlnaHQiLGVbZS5GdWxsPTddPSJGdWxsIn0pKG5yfHwobnI9e30pKTt2YXIgc3I7KGZ1bmN0aW9uKGUpe2VbZS5MZWZ0PTFdPSJMZWZ0IixlW2UuQ2VudGVyPTJdPSJDZW50ZXIiLGVbZS5SaWdodD0zXT0iUmlnaHQifSkoc3J8fChzcj17fSkpO3ZhciBycjsoZnVuY3Rpb24oZSl7ZVtlLkJvdGg9MF09IkJvdGgiLGVbZS5SaWdodD0xXT0iUmlnaHQiLGVbZS5MZWZ0PTJdPSJMZWZ0IixlW2UuTm9uZT0zXT0iTm9uZSJ9KShycnx8KHJyPXt9KSk7ZnVuY3Rpb24gYjEoZSx0LG4scyxyKXtpZihzPT09MClyZXR1cm4hMDtjb25zdCBpPXQuY2hhckNvZGVBdChzLTEpO2lmKGUuZ2V0KGkpIT09MHx8aT09PTEzfHxpPT09MTApcmV0dXJuITA7aWYocj4wKXtjb25zdCBsPXQuY2hhckNvZGVBdChzKTtpZihlLmdldChsKSE9PTApcmV0dXJuITB9cmV0dXJuITF9ZnVuY3Rpb24geDEoZSx0LG4scyxyKXtpZihzK3I9PT1uKXJldHVybiEwO2NvbnN0IGk9dC5jaGFyQ29kZUF0KHMrcik7aWYoZS5nZXQoaSkhPT0wfHxpPT09MTN8fGk9PT0xMClyZXR1cm4hMDtpZihyPjApe2NvbnN0IGw9dC5jaGFyQ29kZUF0KHMrci0xKTtpZihlLmdldChsKSE9PTApcmV0dXJuITB9cmV0dXJuITF9ZnVuY3Rpb24gXzEoZSx0LG4scyxyKXtyZXR1cm4gYjEoZSx0LG4scyxyKSYmeDEoZSx0LG4scyxyKX1jbGFzcyBwMXtjb25zdHJ1Y3Rvcih0LG4pe3RoaXMuX3dvcmRTZXBhcmF0b3JzPXQsdGhpcy5fc2VhcmNoUmVnZXg9bix0aGlzLl9wcmV2TWF0Y2hTdGFydEluZGV4PS0xLHRoaXMuX3ByZXZNYXRjaExlbmd0aD0wfXJlc2V0KHQpe3RoaXMuX3NlYXJjaFJlZ2V4Lmxhc3RJbmRleD10LHRoaXMuX3ByZXZNYXRjaFN0YXJ0SW5kZXg9LTEsdGhpcy5fcHJldk1hdGNoTGVuZ3RoPTB9bmV4dCh0KXtjb25zdCBuPXQubGVuZ3RoO2xldCBzO2Rve2lmKHRoaXMuX3ByZXZNYXRjaFN0YXJ0SW5kZXgrdGhpcy5fcHJldk1hdGNoTGVuZ3RoPT09bnx8KHM9dGhpcy5fc2VhcmNoUmVnZXguZXhlYyh0KSwhcykpcmV0dXJuIG51bGw7Y29uc3Qgcj1zLmluZGV4LGk9c1swXS5sZW5ndGg7aWYocj09PXRoaXMuX3ByZXZNYXRjaFN0YXJ0SW5kZXgmJmk9PT10aGlzLl9wcmV2TWF0Y2hMZW5ndGgpe2lmKGk9PT0wKXthaSh0LG4sdGhpcy5fc2VhcmNoUmVnZXgubGFzdEluZGV4KT42NTUzNT90aGlzLl9zZWFyY2hSZWdleC5sYXN0SW5kZXgrPTI6dGhpcy5fc2VhcmNoUmVnZXgubGFzdEluZGV4Kz0xO2NvbnRpbnVlfXJldHVybiBudWxsfWlmKHRoaXMuX3ByZXZNYXRjaFN0YXJ0SW5kZXg9cix0aGlzLl9wcmV2TWF0Y2hMZW5ndGg9aSwhdGhpcy5fd29yZFNlcGFyYXRvcnN8fF8xKHRoaXMuX3dvcmRTZXBhcmF0b3JzLHQsbixyLGkpKXJldHVybiBzfXdoaWxlKHMpO3JldHVybiBudWxsfX1mdW5jdGlvbiB3MShlLHQ9IlVucmVhY2hhYmxlIil7dGhyb3cgbmV3IEVycm9yKHQpfWZ1bmN0aW9uIE50KGUpe2lmKCFlKCkpe2RlYnVnZ2VyO2UoKSxsdChuZXcgdGUoIkFzc2VydGlvbiBGYWlsZWQiKSl9fWZ1bmN0aW9uIGlyKGUsdCl7bGV0IG49MDtmb3IoO248ZS5sZW5ndGgtMTspe2NvbnN0IHM9ZVtuXSxyPWVbbisxXTtpZighdChzLHIpKXJldHVybiExO24rK31yZXR1cm4hMH1jbGFzcyBMMXtzdGF0aWMgY29tcHV0ZVVuaWNvZGVIaWdobGlnaHRzKHQsbixzKXtjb25zdCByPXM/cy5zdGFydExpbmVOdW1iZXI6MSxpPXM/cy5lbmRMaW5lTnVtYmVyOnQuZ2V0TGluZUNvdW50KCksbD1uZXcgYXIobiksbz1sLmdldENhbmRpZGF0ZUNvZGVQb2ludHMoKTtsZXQgdTtvPT09ImFsbE5vbkJhc2ljQXNjaWkiP3U9bmV3IFJlZ0V4cCgiW15cXHRcXG5cXHJcXHgyMC1cXHg3RV0iLCJnIik6dT1uZXcgUmVnRXhwKGAke04xKEFycmF5LmZyb20obykpfWAsImciKTtjb25zdCBjPW5ldyBwMShudWxsLHUpLGY9W107bGV0IGg9ITEsZCxtPTAsZz0wLGI9MDtlOmZvcihsZXQgdz1yLE49aTt3PD1OO3crKyl7Y29uc3QgQz10LmdldExpbmVDb250ZW50KHcpLFM9Qy5sZW5ndGg7Yy5yZXNldCgwKTtkbyBpZihkPWMubmV4dChDKSxkKXtsZXQgcD1kLmluZGV4LHg9ZC5pbmRleCtkWzBdLmxlbmd0aDtpZihwPjApe2NvbnN0IEk9Qy5jaGFyQ29kZUF0KHAtMSk7ZnQoSSkmJnAtLX1pZih4KzE8Uyl7Y29uc3QgST1DLmNoYXJDb2RlQXQoeC0xKTtmdChJKSYmeCsrfWNvbnN0IHY9Qy5zdWJzdHJpbmcocCx4KTtsZXQgQT1LdChwKzEsWG4sQywwKTtBJiZBLmVuZENvbHVtbjw9cCsxJiYoQT1udWxsKTtjb25zdCB5PWwuc2hvdWxkSGlnaGxpZ2h0Tm9uQmFzaWNBU0NJSSh2LEE/QS53b3JkOm51bGwpO2lmKHkhPT0wKXtpZih5PT09Mz9tKys6eT09PTI/ZysrOnk9PT0xP2IrKzp3MSgpLGYubGVuZ3RoPj0xZTMpe2g9ITA7YnJlYWsgZX1mLnB1c2gobmV3IGsodyxwKzEsdyx4KzEpKX19d2hpbGUoZCl9cmV0dXJue3JhbmdlczpmLGhhc01vcmU6aCxhbWJpZ3VvdXNDaGFyYWN0ZXJDb3VudDptLGludmlzaWJsZUNoYXJhY3RlckNvdW50Omcsbm9uQmFzaWNBc2NpaUNoYXJhY3RlckNvdW50OmJ9fXN0YXRpYyBjb21wdXRlVW5pY29kZUhpZ2hsaWdodFJlYXNvbih0LG4pe2NvbnN0IHM9bmV3IGFyKG4pO3N3aXRjaChzLnNob3VsZEhpZ2hsaWdodE5vbkJhc2ljQVNDSUkodCxudWxsKSl7Y2FzZSAwOnJldHVybiBudWxsO2Nhc2UgMjpyZXR1cm57a2luZDoxfTtjYXNlIDM6e2NvbnN0IGk9dC5jb2RlUG9pbnRBdCgwKSxsPXMuYW1iaWd1b3VzQ2hhcmFjdGVycy5nZXRQcmltYXJ5Q29uZnVzYWJsZShpKSxvPUplLmdldExvY2FsZXMoKS5maWx0ZXIodT0+IUplLmdldEluc3RhbmNlKG5ldyBTZXQoWy4uLm4uYWxsb3dlZExvY2FsZXMsdV0pKS5pc0FtYmlndW91cyhpKSk7cmV0dXJue2tpbmQ6MCxjb25mdXNhYmxlV2l0aDpTdHJpbmcuZnJvbUNvZGVQb2ludChsKSxub3RBbWJpZ3VvdXNJbkxvY2FsZXM6b319Y2FzZSAxOnJldHVybntraW5kOjJ9fX19ZnVuY3Rpb24gTjEoZSx0KXtyZXR1cm5gWyR7bmkoZS5tYXAocz0+U3RyaW5nLmZyb21Db2RlUG9pbnQocykpLmpvaW4oIiIpKX1dYH1jbGFzcyBhcntjb25zdHJ1Y3Rvcih0KXt0aGlzLm9wdGlvbnM9dCx0aGlzLmFsbG93ZWRDb2RlUG9pbnRzPW5ldyBTZXQodC5hbGxvd2VkQ29kZVBvaW50cyksdGhpcy5hbWJpZ3VvdXNDaGFyYWN0ZXJzPUplLmdldEluc3RhbmNlKG5ldyBTZXQodC5hbGxvd2VkTG9jYWxlcykpfWdldENhbmRpZGF0ZUNvZGVQb2ludHMoKXtpZih0aGlzLm9wdGlvbnMubm9uQmFzaWNBU0NJSSlyZXR1cm4iYWxsTm9uQmFzaWNBc2NpaSI7Y29uc3QgdD1uZXcgU2V0O2lmKHRoaXMub3B0aW9ucy5pbnZpc2libGVDaGFyYWN0ZXJzKWZvcihjb25zdCBuIG9mIFllLmNvZGVQb2ludHMpbHIoU3RyaW5nLmZyb21Db2RlUG9pbnQobikpfHx0LmFkZChuKTtpZih0aGlzLm9wdGlvbnMuYW1iaWd1b3VzQ2hhcmFjdGVycylmb3IoY29uc3QgbiBvZiB0aGlzLmFtYmlndW91c0NoYXJhY3RlcnMuZ2V0Q29uZnVzYWJsZUNvZGVQb2ludHMoKSl0LmFkZChuKTtmb3IoY29uc3QgbiBvZiB0aGlzLmFsbG93ZWRDb2RlUG9pbnRzKXQuZGVsZXRlKG4pO3JldHVybiB0fXNob3VsZEhpZ2hsaWdodE5vbkJhc2ljQVNDSUkodCxuKXtjb25zdCBzPXQuY29kZVBvaW50QXQoMCk7aWYodGhpcy5hbGxvd2VkQ29kZVBvaW50cy5oYXMocykpcmV0dXJuIDA7aWYodGhpcy5vcHRpb25zLm5vbkJhc2ljQVNDSUkpcmV0dXJuIDE7bGV0IHI9ITEsaT0hMTtpZihuKWZvcihjb25zdCBsIG9mIG4pe2NvbnN0IG89bC5jb2RlUG9pbnRBdCgwKSx1PW9pKGwpO3I9cnx8dSwhdSYmIXRoaXMuYW1iaWd1b3VzQ2hhcmFjdGVycy5pc0FtYmlndW91cyhvKSYmIVllLmlzSW52aXNpYmxlQ2hhcmFjdGVyKG8pJiYoaT0hMCl9cmV0dXJuIXImJmk/MDp0aGlzLm9wdGlvbnMuaW52aXNpYmxlQ2hhcmFjdGVycyYmIWxyKHQpJiZZZS5pc0ludmlzaWJsZUNoYXJhY3RlcihzKT8yOnRoaXMub3B0aW9ucy5hbWJpZ3VvdXNDaGFyYWN0ZXJzJiZ0aGlzLmFtYmlndW91c0NoYXJhY3RlcnMuaXNBbWJpZ3VvdXMocyk/MzowfX1mdW5jdGlvbiBscihlKXtyZXR1cm4gZT09PSIgInx8ZT09PWAKYHx8ZT09PSIJIn1jbGFzcyB2dHtjb25zdHJ1Y3Rvcih0LG4scyl7dGhpcy5jaGFuZ2VzPXQsdGhpcy5tb3Zlcz1uLHRoaXMuaGl0VGltZW91dD1zfX1jbGFzcyB2MXtjb25zdHJ1Y3Rvcih0LG4pe3RoaXMubGluZVJhbmdlTWFwcGluZz10LHRoaXMuY2hhbmdlcz1ufX1jbGFzcyBWe3N0YXRpYyBhZGRSYW5nZSh0LG4pe2xldCBzPTA7Zm9yKDtzPG4ubGVuZ3RoJiZuW3NdLmVuZEV4Y2x1c2l2ZTx0LnN0YXJ0OylzKys7bGV0IHI9cztmb3IoO3I8bi5sZW5ndGgmJm5bcl0uc3RhcnQ8PXQuZW5kRXhjbHVzaXZlOylyKys7aWYocz09PXIpbi5zcGxpY2UocywwLHQpO2Vsc2V7Y29uc3QgaT1NYXRoLm1pbih0LnN0YXJ0LG5bc10uc3RhcnQpLGw9TWF0aC5tYXgodC5lbmRFeGNsdXNpdmUsbltyLTFdLmVuZEV4Y2x1c2l2ZSk7bi5zcGxpY2UocyxyLXMsbmV3IFYoaSxsKSl9fXN0YXRpYyB0cnlDcmVhdGUodCxuKXtpZighKHQ+bikpcmV0dXJuIG5ldyBWKHQsbil9c3RhdGljIG9mTGVuZ3RoKHQpe3JldHVybiBuZXcgVigwLHQpfXN0YXRpYyBvZlN0YXJ0QW5kTGVuZ3RoKHQsbil7cmV0dXJuIG5ldyBWKHQsdCtuKX1jb25zdHJ1Y3Rvcih0LG4pe2lmKHRoaXMuc3RhcnQ9dCx0aGlzLmVuZEV4Y2x1c2l2ZT1uLHQ+bil0aHJvdyBuZXcgdGUoYEludmFsaWQgcmFuZ2U6ICR7dGhpcy50b1N0cmluZygpfWApfWdldCBpc0VtcHR5KCl7cmV0dXJuIHRoaXMuc3RhcnQ9PT10aGlzLmVuZEV4Y2x1c2l2ZX1kZWx0YSh0KXtyZXR1cm4gbmV3IFYodGhpcy5zdGFydCt0LHRoaXMuZW5kRXhjbHVzaXZlK3QpfWRlbHRhU3RhcnQodCl7cmV0dXJuIG5ldyBWKHRoaXMuc3RhcnQrdCx0aGlzLmVuZEV4Y2x1c2l2ZSl9ZGVsdGFFbmQodCl7cmV0dXJuIG5ldyBWKHRoaXMuc3RhcnQsdGhpcy5lbmRFeGNsdXNpdmUrdCl9Z2V0IGxlbmd0aCgpe3JldHVybiB0aGlzLmVuZEV4Y2x1c2l2ZS10aGlzLnN0YXJ0fXRvU3RyaW5nKCl7cmV0dXJuYFske3RoaXMuc3RhcnR9LCAke3RoaXMuZW5kRXhjbHVzaXZlfSlgfWNvbnRhaW5zKHQpe3JldHVybiB0aGlzLnN0YXJ0PD10JiZ0PHRoaXMuZW5kRXhjbHVzaXZlfWpvaW4odCl7cmV0dXJuIG5ldyBWKE1hdGgubWluKHRoaXMuc3RhcnQsdC5zdGFydCksTWF0aC5tYXgodGhpcy5lbmRFeGNsdXNpdmUsdC5lbmRFeGNsdXNpdmUpKX1pbnRlcnNlY3QodCl7Y29uc3Qgbj1NYXRoLm1heCh0aGlzLnN0YXJ0LHQuc3RhcnQpLHM9TWF0aC5taW4odGhpcy5lbmRFeGNsdXNpdmUsdC5lbmRFeGNsdXNpdmUpO2lmKG48PXMpcmV0dXJuIG5ldyBWKG4scyl9aW50ZXJzZWN0cyh0KXtjb25zdCBuPU1hdGgubWF4KHRoaXMuc3RhcnQsdC5zdGFydCkscz1NYXRoLm1pbih0aGlzLmVuZEV4Y2x1c2l2ZSx0LmVuZEV4Y2x1c2l2ZSk7cmV0dXJuIG48c31pc0JlZm9yZSh0KXtyZXR1cm4gdGhpcy5lbmRFeGNsdXNpdmU8PXQuc3RhcnR9aXNBZnRlcih0KXtyZXR1cm4gdGhpcy5zdGFydD49dC5lbmRFeGNsdXNpdmV9c2xpY2UodCl7cmV0dXJuIHQuc2xpY2UodGhpcy5zdGFydCx0aGlzLmVuZEV4Y2x1c2l2ZSl9c3Vic3RyaW5nKHQpe3JldHVybiB0LnN1YnN0cmluZyh0aGlzLnN0YXJ0LHRoaXMuZW5kRXhjbHVzaXZlKX1jbGlwKHQpe2lmKHRoaXMuaXNFbXB0eSl0aHJvdyBuZXcgdGUoYEludmFsaWQgY2xpcHBpbmcgcmFuZ2U6ICR7dGhpcy50b1N0cmluZygpfWApO3JldHVybiBNYXRoLm1heCh0aGlzLnN0YXJ0LE1hdGgubWluKHRoaXMuZW5kRXhjbHVzaXZlLTEsdCkpfWNsaXBDeWNsaWModCl7aWYodGhpcy5pc0VtcHR5KXRocm93IG5ldyB0ZShgSW52YWxpZCBjbGlwcGluZyByYW5nZTogJHt0aGlzLnRvU3RyaW5nKCl9YCk7cmV0dXJuIHQ8dGhpcy5zdGFydD90aGlzLmVuZEV4Y2x1c2l2ZS0odGhpcy5zdGFydC10KSV0aGlzLmxlbmd0aDp0Pj10aGlzLmVuZEV4Y2x1c2l2ZT90aGlzLnN0YXJ0Kyh0LXRoaXMuc3RhcnQpJXRoaXMubGVuZ3RoOnR9Zm9yRWFjaCh0KXtmb3IobGV0IG49dGhpcy5zdGFydDtuPHRoaXMuZW5kRXhjbHVzaXZlO24rKyl0KG4pfX1mdW5jdGlvbiBJZShlLHQpe2NvbnN0IG49ZXQoZSx0KTtyZXR1cm4gbj09PS0xP3ZvaWQgMDplW25dfWZ1bmN0aW9uIGV0KGUsdCxuPTAscz1lLmxlbmd0aCl7bGV0IHI9bixpPXM7Zm9yKDtyPGk7KXtjb25zdCBsPU1hdGguZmxvb3IoKHIraSkvMik7dChlW2xdKT9yPWwrMTppPWx9cmV0dXJuIHItMX1mdW5jdGlvbiBTMShlLHQpe2NvbnN0IG49Zm4oZSx0KTtyZXR1cm4gbj09PWUubGVuZ3RoP3ZvaWQgMDplW25dfWZ1bmN0aW9uIGZuKGUsdCxuPTAscz1lLmxlbmd0aCl7bGV0IHI9bixpPXM7Zm9yKDtyPGk7KXtjb25zdCBsPU1hdGguZmxvb3IoKHIraSkvMik7dChlW2xdKT9pPWw6cj1sKzF9cmV0dXJuIHJ9Y29uc3Qga3Q9Y2xhc3Mga3R7Y29uc3RydWN0b3IodCl7dGhpcy5fYXJyYXk9dCx0aGlzLl9maW5kTGFzdE1vbm90b25vdXNMYXN0SWR4PTB9ZmluZExhc3RNb25vdG9ub3VzKHQpe2lmKGt0LmFzc2VydEludmFyaWFudHMpe2lmKHRoaXMuX3ByZXZGaW5kTGFzdFByZWRpY2F0ZSl7Zm9yKGNvbnN0IHMgb2YgdGhpcy5fYXJyYXkpaWYodGhpcy5fcHJldkZpbmRMYXN0UHJlZGljYXRlKHMpJiYhdChzKSl0aHJvdyBuZXcgRXJyb3IoIk1vbm90b25vdXNBcnJheTogY3VycmVudCBwcmVkaWNhdGUgbXVzdCBiZSB3ZWFrZXIgdGhhbiAob3IgZXF1YWwgdG8pIHRoZSBwcmV2aW91cyBwcmVkaWNhdGUuIil9dGhpcy5fcHJldkZpbmRMYXN0UHJlZGljYXRlPXR9Y29uc3Qgbj1ldCh0aGlzLl9hcnJheSx0LHRoaXMuX2ZpbmRMYXN0TW9ub3Rvbm91c0xhc3RJZHgpO3JldHVybiB0aGlzLl9maW5kTGFzdE1vbm90b25vdXNMYXN0SWR4PW4rMSxuPT09LTE/dm9pZCAwOnRoaXMuX2FycmF5W25dfX07a3QuYXNzZXJ0SW52YXJpYW50cz0hMTtsZXQgU3Q9a3Q7Y2xhc3MgRHtzdGF0aWMgZnJvbVJhbmdlSW5jbHVzaXZlKHQpe3JldHVybiBuZXcgRCh0LnN0YXJ0TGluZU51bWJlcix0LmVuZExpbmVOdW1iZXIrMSl9c3RhdGljIGpvaW5NYW55KHQpe2lmKHQubGVuZ3RoPT09MClyZXR1cm5bXTtsZXQgbj1uZXcgaGUodFswXS5zbGljZSgpKTtmb3IobGV0IHM9MTtzPHQubGVuZ3RoO3MrKyluPW4uZ2V0VW5pb24obmV3IGhlKHRbc10uc2xpY2UoKSkpO3JldHVybiBuLnJhbmdlc31zdGF0aWMgam9pbih0KXtpZih0Lmxlbmd0aD09PTApdGhyb3cgbmV3IHRlKCJsaW5lUmFuZ2VzIGNhbm5vdCBiZSBlbXB0eSIpO2xldCBuPXRbMF0uc3RhcnRMaW5lTnVtYmVyLHM9dFswXS5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlO2ZvcihsZXQgcj0xO3I8dC5sZW5ndGg7cisrKW49TWF0aC5taW4obix0W3JdLnN0YXJ0TGluZU51bWJlcikscz1NYXRoLm1heChzLHRbcl0uZW5kTGluZU51bWJlckV4Y2x1c2l2ZSk7cmV0dXJuIG5ldyBEKG4scyl9c3RhdGljIG9mTGVuZ3RoKHQsbil7cmV0dXJuIG5ldyBEKHQsdCtuKX1zdGF0aWMgZGVzZXJpYWxpemUodCl7cmV0dXJuIG5ldyBEKHRbMF0sdFsxXSl9Y29uc3RydWN0b3IodCxuKXtpZih0Pm4pdGhyb3cgbmV3IHRlKGBzdGFydExpbmVOdW1iZXIgJHt0fSBjYW5ub3QgYmUgYWZ0ZXIgZW5kTGluZU51bWJlckV4Y2x1c2l2ZSAke259YCk7dGhpcy5zdGFydExpbmVOdW1iZXI9dCx0aGlzLmVuZExpbmVOdW1iZXJFeGNsdXNpdmU9bn1jb250YWlucyh0KXtyZXR1cm4gdGhpcy5zdGFydExpbmVOdW1iZXI8PXQmJnQ8dGhpcy5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlfWdldCBpc0VtcHR5KCl7cmV0dXJuIHRoaXMuc3RhcnRMaW5lTnVtYmVyPT09dGhpcy5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlfWRlbHRhKHQpe3JldHVybiBuZXcgRCh0aGlzLnN0YXJ0TGluZU51bWJlcit0LHRoaXMuZW5kTGluZU51bWJlckV4Y2x1c2l2ZSt0KX1kZWx0YUxlbmd0aCh0KXtyZXR1cm4gbmV3IEQodGhpcy5zdGFydExpbmVOdW1iZXIsdGhpcy5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlK3QpfWdldCBsZW5ndGgoKXtyZXR1cm4gdGhpcy5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlLXRoaXMuc3RhcnRMaW5lTnVtYmVyfWpvaW4odCl7cmV0dXJuIG5ldyBEKE1hdGgubWluKHRoaXMuc3RhcnRMaW5lTnVtYmVyLHQuc3RhcnRMaW5lTnVtYmVyKSxNYXRoLm1heCh0aGlzLmVuZExpbmVOdW1iZXJFeGNsdXNpdmUsdC5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlKSl9dG9TdHJpbmcoKXtyZXR1cm5gWyR7dGhpcy5zdGFydExpbmVOdW1iZXJ9LCR7dGhpcy5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlfSlgfWludGVyc2VjdCh0KXtjb25zdCBuPU1hdGgubWF4KHRoaXMuc3RhcnRMaW5lTnVtYmVyLHQuc3RhcnRMaW5lTnVtYmVyKSxzPU1hdGgubWluKHRoaXMuZW5kTGluZU51bWJlckV4Y2x1c2l2ZSx0LmVuZExpbmVOdW1iZXJFeGNsdXNpdmUpO2lmKG48PXMpcmV0dXJuIG5ldyBEKG4scyl9aW50ZXJzZWN0c1N0cmljdCh0KXtyZXR1cm4gdGhpcy5zdGFydExpbmVOdW1iZXI8dC5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlJiZ0LnN0YXJ0TGluZU51bWJlcjx0aGlzLmVuZExpbmVOdW1iZXJFeGNsdXNpdmV9b3ZlcmxhcE9yVG91Y2godCl7cmV0dXJuIHRoaXMuc3RhcnRMaW5lTnVtYmVyPD10LmVuZExpbmVOdW1iZXJFeGNsdXNpdmUmJnQuc3RhcnRMaW5lTnVtYmVyPD10aGlzLmVuZExpbmVOdW1iZXJFeGNsdXNpdmV9ZXF1YWxzKHQpe3JldHVybiB0aGlzLnN0YXJ0TGluZU51bWJlcj09PXQuc3RhcnRMaW5lTnVtYmVyJiZ0aGlzLmVuZExpbmVOdW1iZXJFeGNsdXNpdmU9PT10LmVuZExpbmVOdW1iZXJFeGNsdXNpdmV9dG9JbmNsdXNpdmVSYW5nZSgpe3JldHVybiB0aGlzLmlzRW1wdHk/bnVsbDpuZXcgayh0aGlzLnN0YXJ0TGluZU51bWJlciwxLHRoaXMuZW5kTGluZU51bWJlckV4Y2x1c2l2ZS0xLE51bWJlci5NQVhfU0FGRV9JTlRFR0VSKX10b0V4Y2x1c2l2ZVJhbmdlKCl7cmV0dXJuIG5ldyBrKHRoaXMuc3RhcnRMaW5lTnVtYmVyLDEsdGhpcy5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlLDEpfW1hcFRvTGluZUFycmF5KHQpe2NvbnN0IG49W107Zm9yKGxldCBzPXRoaXMuc3RhcnRMaW5lTnVtYmVyO3M8dGhpcy5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlO3MrKyluLnB1c2godChzKSk7cmV0dXJuIG59Zm9yRWFjaCh0KXtmb3IobGV0IG49dGhpcy5zdGFydExpbmVOdW1iZXI7bjx0aGlzLmVuZExpbmVOdW1iZXJFeGNsdXNpdmU7bisrKXQobil9c2VyaWFsaXplKCl7cmV0dXJuW3RoaXMuc3RhcnRMaW5lTnVtYmVyLHRoaXMuZW5kTGluZU51bWJlckV4Y2x1c2l2ZV19aW5jbHVkZXModCl7cmV0dXJuIHRoaXMuc3RhcnRMaW5lTnVtYmVyPD10JiZ0PHRoaXMuZW5kTGluZU51bWJlckV4Y2x1c2l2ZX10b09mZnNldFJhbmdlKCl7cmV0dXJuIG5ldyBWKHRoaXMuc3RhcnRMaW5lTnVtYmVyLTEsdGhpcy5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlLTEpfX1jbGFzcyBoZXtjb25zdHJ1Y3Rvcih0PVtdKXt0aGlzLl9ub3JtYWxpemVkUmFuZ2VzPXR9Z2V0IHJhbmdlcygpe3JldHVybiB0aGlzLl9ub3JtYWxpemVkUmFuZ2VzfWFkZFJhbmdlKHQpe2lmKHQubGVuZ3RoPT09MClyZXR1cm47Y29uc3Qgbj1mbih0aGlzLl9ub3JtYWxpemVkUmFuZ2VzLHI9PnIuZW5kTGluZU51bWJlckV4Y2x1c2l2ZT49dC5zdGFydExpbmVOdW1iZXIpLHM9ZXQodGhpcy5fbm9ybWFsaXplZFJhbmdlcyxyPT5yLnN0YXJ0TGluZU51bWJlcjw9dC5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlKSsxO2lmKG49PT1zKXRoaXMuX25vcm1hbGl6ZWRSYW5nZXMuc3BsaWNlKG4sMCx0KTtlbHNlIGlmKG49PT1zLTEpe2NvbnN0IHI9dGhpcy5fbm9ybWFsaXplZFJhbmdlc1tuXTt0aGlzLl9ub3JtYWxpemVkUmFuZ2VzW25dPXIuam9pbih0KX1lbHNle2NvbnN0IHI9dGhpcy5fbm9ybWFsaXplZFJhbmdlc1tuXS5qb2luKHRoaXMuX25vcm1hbGl6ZWRSYW5nZXNbcy0xXSkuam9pbih0KTt0aGlzLl9ub3JtYWxpemVkUmFuZ2VzLnNwbGljZShuLHMtbixyKX19Y29udGFpbnModCl7Y29uc3Qgbj1JZSh0aGlzLl9ub3JtYWxpemVkUmFuZ2VzLHM9PnMuc3RhcnRMaW5lTnVtYmVyPD10KTtyZXR1cm4hIW4mJm4uZW5kTGluZU51bWJlckV4Y2x1c2l2ZT50fWludGVyc2VjdHModCl7Y29uc3Qgbj1JZSh0aGlzLl9ub3JtYWxpemVkUmFuZ2VzLHM9PnMuc3RhcnRMaW5lTnVtYmVyPHQuZW5kTGluZU51bWJlckV4Y2x1c2l2ZSk7cmV0dXJuISFuJiZuLmVuZExpbmVOdW1iZXJFeGNsdXNpdmU+dC5zdGFydExpbmVOdW1iZXJ9Z2V0VW5pb24odCl7aWYodGhpcy5fbm9ybWFsaXplZFJhbmdlcy5sZW5ndGg9PT0wKXJldHVybiB0O2lmKHQuX25vcm1hbGl6ZWRSYW5nZXMubGVuZ3RoPT09MClyZXR1cm4gdGhpcztjb25zdCBuPVtdO2xldCBzPTAscj0wLGk9bnVsbDtmb3IoO3M8dGhpcy5fbm9ybWFsaXplZFJhbmdlcy5sZW5ndGh8fHI8dC5fbm9ybWFsaXplZFJhbmdlcy5sZW5ndGg7KXtsZXQgbD1udWxsO2lmKHM8dGhpcy5fbm9ybWFsaXplZFJhbmdlcy5sZW5ndGgmJnI8dC5fbm9ybWFsaXplZFJhbmdlcy5sZW5ndGgpe2NvbnN0IG89dGhpcy5fbm9ybWFsaXplZFJhbmdlc1tzXSx1PXQuX25vcm1hbGl6ZWRSYW5nZXNbcl07by5zdGFydExpbmVOdW1iZXI8dS5zdGFydExpbmVOdW1iZXI/KGw9byxzKyspOihsPXUscisrKX1lbHNlIHM8dGhpcy5fbm9ybWFsaXplZFJhbmdlcy5sZW5ndGg/KGw9dGhpcy5fbm9ybWFsaXplZFJhbmdlc1tzXSxzKyspOihsPXQuX25vcm1hbGl6ZWRSYW5nZXNbcl0scisrKTtpPT09bnVsbD9pPWw6aS5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlPj1sLnN0YXJ0TGluZU51bWJlcj9pPW5ldyBEKGkuc3RhcnRMaW5lTnVtYmVyLE1hdGgubWF4KGkuZW5kTGluZU51bWJlckV4Y2x1c2l2ZSxsLmVuZExpbmVOdW1iZXJFeGNsdXNpdmUpKToobi5wdXNoKGkpLGk9bCl9cmV0dXJuIGkhPT1udWxsJiZuLnB1c2goaSksbmV3IGhlKG4pfXN1YnRyYWN0RnJvbSh0KXtjb25zdCBuPWZuKHRoaXMuX25vcm1hbGl6ZWRSYW5nZXMsbD0+bC5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlPj10LnN0YXJ0TGluZU51bWJlcikscz1ldCh0aGlzLl9ub3JtYWxpemVkUmFuZ2VzLGw9Pmwuc3RhcnRMaW5lTnVtYmVyPD10LmVuZExpbmVOdW1iZXJFeGNsdXNpdmUpKzE7aWYobj09PXMpcmV0dXJuIG5ldyBoZShbdF0pO2NvbnN0IHI9W107bGV0IGk9dC5zdGFydExpbmVOdW1iZXI7Zm9yKGxldCBsPW47bDxzO2wrKyl7Y29uc3Qgbz10aGlzLl9ub3JtYWxpemVkUmFuZ2VzW2xdO28uc3RhcnRMaW5lTnVtYmVyPmkmJnIucHVzaChuZXcgRChpLG8uc3RhcnRMaW5lTnVtYmVyKSksaT1vLmVuZExpbmVOdW1iZXJFeGNsdXNpdmV9cmV0dXJuIGk8dC5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlJiZyLnB1c2gobmV3IEQoaSx0LmVuZExpbmVOdW1iZXJFeGNsdXNpdmUpKSxuZXcgaGUocil9dG9TdHJpbmcoKXtyZXR1cm4gdGhpcy5fbm9ybWFsaXplZFJhbmdlcy5tYXAodD0+dC50b1N0cmluZygpKS5qb2luKCIsICIpfWdldEludGVyc2VjdGlvbih0KXtjb25zdCBuPVtdO2xldCBzPTAscj0wO2Zvcig7czx0aGlzLl9ub3JtYWxpemVkUmFuZ2VzLmxlbmd0aCYmcjx0Ll9ub3JtYWxpemVkUmFuZ2VzLmxlbmd0aDspe2NvbnN0IGk9dGhpcy5fbm9ybWFsaXplZFJhbmdlc1tzXSxsPXQuX25vcm1hbGl6ZWRSYW5nZXNbcl0sbz1pLmludGVyc2VjdChsKTtvJiYhby5pc0VtcHR5JiZuLnB1c2gobyksaS5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlPGwuZW5kTGluZU51bWJlckV4Y2x1c2l2ZT9zKys6cisrfXJldHVybiBuZXcgaGUobil9Z2V0V2l0aERlbHRhKHQpe3JldHVybiBuZXcgaGUodGhpcy5fbm9ybWFsaXplZFJhbmdlcy5tYXAobj0+bi5kZWx0YSh0KSkpfX1jb25zdCBTZT1jbGFzcyBTZXtzdGF0aWMgYmV0d2VlblBvc2l0aW9ucyh0LG4pe3JldHVybiB0LmxpbmVOdW1iZXI9PT1uLmxpbmVOdW1iZXI/bmV3IFNlKDAsbi5jb2x1bW4tdC5jb2x1bW4pOm5ldyBTZShuLmxpbmVOdW1iZXItdC5saW5lTnVtYmVyLG4uY29sdW1uLTEpfXN0YXRpYyBvZlJhbmdlKHQpe3JldHVybiBTZS5iZXR3ZWVuUG9zaXRpb25zKHQuZ2V0U3RhcnRQb3NpdGlvbigpLHQuZ2V0RW5kUG9zaXRpb24oKSl9c3RhdGljIG9mVGV4dCh0KXtsZXQgbj0wLHM9MDtmb3IoY29uc3QgciBvZiB0KXI9PT1gCmA/KG4rKyxzPTApOnMrKztyZXR1cm4gbmV3IFNlKG4scyl9Y29uc3RydWN0b3IodCxuKXt0aGlzLmxpbmVDb3VudD10LHRoaXMuY29sdW1uQ291bnQ9bn1pc0dyZWF0ZXJUaGFuT3JFcXVhbFRvKHQpe3JldHVybiB0aGlzLmxpbmVDb3VudCE9PXQubGluZUNvdW50P3RoaXMubGluZUNvdW50PnQubGluZUNvdW50OnRoaXMuY29sdW1uQ291bnQ+PXQuY29sdW1uQ291bnR9Y3JlYXRlUmFuZ2UodCl7cmV0dXJuIHRoaXMubGluZUNvdW50PT09MD9uZXcgayh0LmxpbmVOdW1iZXIsdC5jb2x1bW4sdC5saW5lTnVtYmVyLHQuY29sdW1uK3RoaXMuY29sdW1uQ291bnQpOm5ldyBrKHQubGluZU51bWJlcix0LmNvbHVtbix0LmxpbmVOdW1iZXIrdGhpcy5saW5lQ291bnQsdGhpcy5jb2x1bW5Db3VudCsxKX1hZGRUb1Bvc2l0aW9uKHQpe3JldHVybiB0aGlzLmxpbmVDb3VudD09PTA/bmV3IHEodC5saW5lTnVtYmVyLHQuY29sdW1uK3RoaXMuY29sdW1uQ291bnQpOm5ldyBxKHQubGluZU51bWJlcit0aGlzLmxpbmVDb3VudCx0aGlzLmNvbHVtbkNvdW50KzEpfXRvU3RyaW5nKCl7cmV0dXJuYCR7dGhpcy5saW5lQ291bnR9LCR7dGhpcy5jb2x1bW5Db3VudH1gfX07U2UuemVybz1uZXcgU2UoMCwwKTtsZXQgb3I9U2U7Y2xhc3MgQzF7Y29uc3RydWN0b3IodCxuKXt0aGlzLnJhbmdlPXQsdGhpcy50ZXh0PW59dG9TaW5nbGVFZGl0T3BlcmF0aW9uKCl7cmV0dXJue3JhbmdlOnRoaXMucmFuZ2UsdGV4dDp0aGlzLnRleHR9fX1jbGFzcyByZXtzdGF0aWMgaW52ZXJzZSh0LG4scyl7Y29uc3Qgcj1bXTtsZXQgaT0xLGw9MTtmb3IoY29uc3QgdSBvZiB0KXtjb25zdCBjPW5ldyByZShuZXcgRChpLHUub3JpZ2luYWwuc3RhcnRMaW5lTnVtYmVyKSxuZXcgRChsLHUubW9kaWZpZWQuc3RhcnRMaW5lTnVtYmVyKSk7Yy5tb2RpZmllZC5pc0VtcHR5fHxyLnB1c2goYyksaT11Lm9yaWdpbmFsLmVuZExpbmVOdW1iZXJFeGNsdXNpdmUsbD11Lm1vZGlmaWVkLmVuZExpbmVOdW1iZXJFeGNsdXNpdmV9Y29uc3Qgbz1uZXcgcmUobmV3IEQoaSxuKzEpLG5ldyBEKGwscysxKSk7cmV0dXJuIG8ubW9kaWZpZWQuaXNFbXB0eXx8ci5wdXNoKG8pLHJ9c3RhdGljIGNsaXAodCxuLHMpe2NvbnN0IHI9W107Zm9yKGNvbnN0IGkgb2YgdCl7Y29uc3QgbD1pLm9yaWdpbmFsLmludGVyc2VjdChuKSxvPWkubW9kaWZpZWQuaW50ZXJzZWN0KHMpO2wmJiFsLmlzRW1wdHkmJm8mJiFvLmlzRW1wdHkmJnIucHVzaChuZXcgcmUobCxvKSl9cmV0dXJuIHJ9Y29uc3RydWN0b3IodCxuKXt0aGlzLm9yaWdpbmFsPXQsdGhpcy5tb2RpZmllZD1ufXRvU3RyaW5nKCl7cmV0dXJuYHske3RoaXMub3JpZ2luYWwudG9TdHJpbmcoKX0tPiR7dGhpcy5tb2RpZmllZC50b1N0cmluZygpfX1gfWZsaXAoKXtyZXR1cm4gbmV3IHJlKHRoaXMubW9kaWZpZWQsdGhpcy5vcmlnaW5hbCl9am9pbih0KXtyZXR1cm4gbmV3IHJlKHRoaXMub3JpZ2luYWwuam9pbih0Lm9yaWdpbmFsKSx0aGlzLm1vZGlmaWVkLmpvaW4odC5tb2RpZmllZCkpfXRvUmFuZ2VNYXBwaW5nKCl7Y29uc3QgdD10aGlzLm9yaWdpbmFsLnRvSW5jbHVzaXZlUmFuZ2UoKSxuPXRoaXMubW9kaWZpZWQudG9JbmNsdXNpdmVSYW5nZSgpO2lmKHQmJm4pcmV0dXJuIG5ldyB1ZSh0LG4pO2lmKHRoaXMub3JpZ2luYWwuc3RhcnRMaW5lTnVtYmVyPT09MXx8dGhpcy5tb2RpZmllZC5zdGFydExpbmVOdW1iZXI9PT0xKXtpZighKHRoaXMubW9kaWZpZWQuc3RhcnRMaW5lTnVtYmVyPT09MSYmdGhpcy5vcmlnaW5hbC5zdGFydExpbmVOdW1iZXI9PT0xKSl0aHJvdyBuZXcgdGUoIm5vdCBhIHZhbGlkIGRpZmYiKTtyZXR1cm4gbmV3IHVlKG5ldyBrKHRoaXMub3JpZ2luYWwuc3RhcnRMaW5lTnVtYmVyLDEsdGhpcy5vcmlnaW5hbC5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlLDEpLG5ldyBrKHRoaXMubW9kaWZpZWQuc3RhcnRMaW5lTnVtYmVyLDEsdGhpcy5tb2RpZmllZC5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlLDEpKX1lbHNlIHJldHVybiBuZXcgdWUobmV3IGsodGhpcy5vcmlnaW5hbC5zdGFydExpbmVOdW1iZXItMSxOdW1iZXIuTUFYX1NBRkVfSU5URUdFUix0aGlzLm9yaWdpbmFsLmVuZExpbmVOdW1iZXJFeGNsdXNpdmUtMSxOdW1iZXIuTUFYX1NBRkVfSU5URUdFUiksbmV3IGsodGhpcy5tb2RpZmllZC5zdGFydExpbmVOdW1iZXItMSxOdW1iZXIuTUFYX1NBRkVfSU5URUdFUix0aGlzLm1vZGlmaWVkLmVuZExpbmVOdW1iZXJFeGNsdXNpdmUtMSxOdW1iZXIuTUFYX1NBRkVfSU5URUdFUikpfXRvUmFuZ2VNYXBwaW5nMih0LG4pe2lmKHVyKHRoaXMub3JpZ2luYWwuZW5kTGluZU51bWJlckV4Y2x1c2l2ZSx0KSYmdXIodGhpcy5tb2RpZmllZC5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlLG4pKXJldHVybiBuZXcgdWUobmV3IGsodGhpcy5vcmlnaW5hbC5zdGFydExpbmVOdW1iZXIsMSx0aGlzLm9yaWdpbmFsLmVuZExpbmVOdW1iZXJFeGNsdXNpdmUsMSksbmV3IGsodGhpcy5tb2RpZmllZC5zdGFydExpbmVOdW1iZXIsMSx0aGlzLm1vZGlmaWVkLmVuZExpbmVOdW1iZXJFeGNsdXNpdmUsMSkpO2lmKCF0aGlzLm9yaWdpbmFsLmlzRW1wdHkmJiF0aGlzLm1vZGlmaWVkLmlzRW1wdHkpcmV0dXJuIG5ldyB1ZShrLmZyb21Qb3NpdGlvbnMobmV3IHEodGhpcy5vcmlnaW5hbC5zdGFydExpbmVOdW1iZXIsMSksQmUobmV3IHEodGhpcy5vcmlnaW5hbC5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlLTEsTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIpLHQpKSxrLmZyb21Qb3NpdGlvbnMobmV3IHEodGhpcy5tb2RpZmllZC5zdGFydExpbmVOdW1iZXIsMSksQmUobmV3IHEodGhpcy5tb2RpZmllZC5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlLTEsTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIpLG4pKSk7aWYodGhpcy5vcmlnaW5hbC5zdGFydExpbmVOdW1iZXI+MSYmdGhpcy5tb2RpZmllZC5zdGFydExpbmVOdW1iZXI+MSlyZXR1cm4gbmV3IHVlKGsuZnJvbVBvc2l0aW9ucyhCZShuZXcgcSh0aGlzLm9yaWdpbmFsLnN0YXJ0TGluZU51bWJlci0xLE51bWJlci5NQVhfU0FGRV9JTlRFR0VSKSx0KSxCZShuZXcgcSh0aGlzLm9yaWdpbmFsLmVuZExpbmVOdW1iZXJFeGNsdXNpdmUtMSxOdW1iZXIuTUFYX1NBRkVfSU5URUdFUiksdCkpLGsuZnJvbVBvc2l0aW9ucyhCZShuZXcgcSh0aGlzLm1vZGlmaWVkLnN0YXJ0TGluZU51bWJlci0xLE51bWJlci5NQVhfU0FGRV9JTlRFR0VSKSxuKSxCZShuZXcgcSh0aGlzLm1vZGlmaWVkLmVuZExpbmVOdW1iZXJFeGNsdXNpdmUtMSxOdW1iZXIuTUFYX1NBRkVfSU5URUdFUiksbikpKTt0aHJvdyBuZXcgdGV9fWZ1bmN0aW9uIEJlKGUsdCl7aWYoZS5saW5lTnVtYmVyPDEpcmV0dXJuIG5ldyBxKDEsMSk7aWYoZS5saW5lTnVtYmVyPnQubGVuZ3RoKXJldHVybiBuZXcgcSh0Lmxlbmd0aCx0W3QubGVuZ3RoLTFdLmxlbmd0aCsxKTtjb25zdCBuPXRbZS5saW5lTnVtYmVyLTFdO3JldHVybiBlLmNvbHVtbj5uLmxlbmd0aCsxP25ldyBxKGUubGluZU51bWJlcixuLmxlbmd0aCsxKTplfWZ1bmN0aW9uIHVyKGUsdCl7cmV0dXJuIGU+PTEmJmU8PXQubGVuZ3RofWNsYXNzIG1lIGV4dGVuZHMgcmV7c3RhdGljIGZyb21SYW5nZU1hcHBpbmdzKHQpe2NvbnN0IG49RC5qb2luKHQubWFwKHI9PkQuZnJvbVJhbmdlSW5jbHVzaXZlKHIub3JpZ2luYWxSYW5nZSkpKSxzPUQuam9pbih0Lm1hcChyPT5ELmZyb21SYW5nZUluY2x1c2l2ZShyLm1vZGlmaWVkUmFuZ2UpKSk7cmV0dXJuIG5ldyBtZShuLHMsdCl9Y29uc3RydWN0b3IodCxuLHMpe3N1cGVyKHQsbiksdGhpcy5pbm5lckNoYW5nZXM9c31mbGlwKCl7cmV0dXJuIG5ldyBtZSh0aGlzLm1vZGlmaWVkLHRoaXMub3JpZ2luYWwsdGhpcy5pbm5lckNoYW5nZXM/Lm1hcCh0PT50LmZsaXAoKSkpfXdpdGhJbm5lckNoYW5nZXNGcm9tTGluZVJhbmdlcygpe3JldHVybiBuZXcgbWUodGhpcy5vcmlnaW5hbCx0aGlzLm1vZGlmaWVkLFt0aGlzLnRvUmFuZ2VNYXBwaW5nKCldKX19Y2xhc3MgdWV7c3RhdGljIGFzc2VydFNvcnRlZCh0KXtmb3IobGV0IG49MTtuPHQubGVuZ3RoO24rKyl7Y29uc3Qgcz10W24tMV0scj10W25dO2lmKCEocy5vcmlnaW5hbFJhbmdlLmdldEVuZFBvc2l0aW9uKCkuaXNCZWZvcmVPckVxdWFsKHIub3JpZ2luYWxSYW5nZS5nZXRTdGFydFBvc2l0aW9uKCkpJiZzLm1vZGlmaWVkUmFuZ2UuZ2V0RW5kUG9zaXRpb24oKS5pc0JlZm9yZU9yRXF1YWwoci5tb2RpZmllZFJhbmdlLmdldFN0YXJ0UG9zaXRpb24oKSkpKXRocm93IG5ldyB0ZSgiUmFuZ2UgbWFwcGluZ3MgbXVzdCBiZSBzb3J0ZWQiKX19Y29uc3RydWN0b3IodCxuKXt0aGlzLm9yaWdpbmFsUmFuZ2U9dCx0aGlzLm1vZGlmaWVkUmFuZ2U9bn10b1N0cmluZygpe3JldHVybmB7JHt0aGlzLm9yaWdpbmFsUmFuZ2UudG9TdHJpbmcoKX0tPiR7dGhpcy5tb2RpZmllZFJhbmdlLnRvU3RyaW5nKCl9fWB9ZmxpcCgpe3JldHVybiBuZXcgdWUodGhpcy5tb2RpZmllZFJhbmdlLHRoaXMub3JpZ2luYWxSYW5nZSl9dG9UZXh0RWRpdCh0KXtjb25zdCBuPXQuZ2V0VmFsdWVPZlJhbmdlKHRoaXMubW9kaWZpZWRSYW5nZSk7cmV0dXJuIG5ldyBDMSh0aGlzLm9yaWdpbmFsUmFuZ2Usbil9fWNvbnN0IEExPTM7Y2xhc3MgUjF7Y29tcHV0ZURpZmYodCxuLHMpe2NvbnN0IGk9bmV3IE0xKHQsbix7bWF4Q29tcHV0YXRpb25UaW1lOnMubWF4Q29tcHV0YXRpb25UaW1lTXMsc2hvdWxkSWdub3JlVHJpbVdoaXRlc3BhY2U6cy5pZ25vcmVUcmltV2hpdGVzcGFjZSxzaG91bGRDb21wdXRlQ2hhckNoYW5nZXM6ITAsc2hvdWxkTWFrZVByZXR0eURpZmY6ITAsc2hvdWxkUG9zdFByb2Nlc3NDaGFyQ2hhbmdlczohMH0pLmNvbXB1dGVEaWZmKCksbD1bXTtsZXQgbz1udWxsO2Zvcihjb25zdCB1IG9mIGkuY2hhbmdlcyl7bGV0IGM7dS5vcmlnaW5hbEVuZExpbmVOdW1iZXI9PT0wP2M9bmV3IEQodS5vcmlnaW5hbFN0YXJ0TGluZU51bWJlcisxLHUub3JpZ2luYWxTdGFydExpbmVOdW1iZXIrMSk6Yz1uZXcgRCh1Lm9yaWdpbmFsU3RhcnRMaW5lTnVtYmVyLHUub3JpZ2luYWxFbmRMaW5lTnVtYmVyKzEpO2xldCBmO3UubW9kaWZpZWRFbmRMaW5lTnVtYmVyPT09MD9mPW5ldyBEKHUubW9kaWZpZWRTdGFydExpbmVOdW1iZXIrMSx1Lm1vZGlmaWVkU3RhcnRMaW5lTnVtYmVyKzEpOmY9bmV3IEQodS5tb2RpZmllZFN0YXJ0TGluZU51bWJlcix1Lm1vZGlmaWVkRW5kTGluZU51bWJlcisxKTtsZXQgaD1uZXcgbWUoYyxmLHUuY2hhckNoYW5nZXM/Lm1hcChkPT5uZXcgdWUobmV3IGsoZC5vcmlnaW5hbFN0YXJ0TGluZU51bWJlcixkLm9yaWdpbmFsU3RhcnRDb2x1bW4sZC5vcmlnaW5hbEVuZExpbmVOdW1iZXIsZC5vcmlnaW5hbEVuZENvbHVtbiksbmV3IGsoZC5tb2RpZmllZFN0YXJ0TGluZU51bWJlcixkLm1vZGlmaWVkU3RhcnRDb2x1bW4sZC5tb2RpZmllZEVuZExpbmVOdW1iZXIsZC5tb2RpZmllZEVuZENvbHVtbikpKSk7byYmKG8ubW9kaWZpZWQuZW5kTGluZU51bWJlckV4Y2x1c2l2ZT09PWgubW9kaWZpZWQuc3RhcnRMaW5lTnVtYmVyfHxvLm9yaWdpbmFsLmVuZExpbmVOdW1iZXJFeGNsdXNpdmU9PT1oLm9yaWdpbmFsLnN0YXJ0TGluZU51bWJlcikmJihoPW5ldyBtZShvLm9yaWdpbmFsLmpvaW4oaC5vcmlnaW5hbCksby5tb2RpZmllZC5qb2luKGgubW9kaWZpZWQpLG8uaW5uZXJDaGFuZ2VzJiZoLmlubmVyQ2hhbmdlcz9vLmlubmVyQ2hhbmdlcy5jb25jYXQoaC5pbm5lckNoYW5nZXMpOnZvaWQgMCksbC5wb3AoKSksbC5wdXNoKGgpLG89aH1yZXR1cm4gTnQoKCk9PmlyKGwsKHUsYyk9PmMub3JpZ2luYWwuc3RhcnRMaW5lTnVtYmVyLXUub3JpZ2luYWwuZW5kTGluZU51bWJlckV4Y2x1c2l2ZT09PWMubW9kaWZpZWQuc3RhcnRMaW5lTnVtYmVyLXUubW9kaWZpZWQuZW5kTGluZU51bWJlckV4Y2x1c2l2ZSYmdS5vcmlnaW5hbC5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlPGMub3JpZ2luYWwuc3RhcnRMaW5lTnVtYmVyJiZ1Lm1vZGlmaWVkLmVuZExpbmVOdW1iZXJFeGNsdXNpdmU8Yy5tb2RpZmllZC5zdGFydExpbmVOdW1iZXIpKSxuZXcgdnQobCxbXSxpLnF1aXRFYXJseSl9fWZ1bmN0aW9uIGNyKGUsdCxuLHMpe3JldHVybiBuZXcgX2UoZSx0LG4pLkNvbXB1dGVEaWZmKHMpfWxldCBocj1jbGFzc3tjb25zdHJ1Y3Rvcih0KXtjb25zdCBuPVtdLHM9W107Zm9yKGxldCByPTAsaT10Lmxlbmd0aDtyPGk7cisrKW5bcl09ZG4odFtyXSwxKSxzW3JdPW1uKHRbcl0sMSk7dGhpcy5saW5lcz10LHRoaXMuX3N0YXJ0Q29sdW1ucz1uLHRoaXMuX2VuZENvbHVtbnM9c31nZXRFbGVtZW50cygpe2NvbnN0IHQ9W107Zm9yKGxldCBuPTAscz10aGlzLmxpbmVzLmxlbmd0aDtuPHM7bisrKXRbbl09dGhpcy5saW5lc1tuXS5zdWJzdHJpbmcodGhpcy5fc3RhcnRDb2x1bW5zW25dLTEsdGhpcy5fZW5kQ29sdW1uc1tuXS0xKTtyZXR1cm4gdH1nZXRTdHJpY3RFbGVtZW50KHQpe3JldHVybiB0aGlzLmxpbmVzW3RdfWdldFN0YXJ0TGluZU51bWJlcih0KXtyZXR1cm4gdCsxfWdldEVuZExpbmVOdW1iZXIodCl7cmV0dXJuIHQrMX1jcmVhdGVDaGFyU2VxdWVuY2UodCxuLHMpe2NvbnN0IHI9W10saT1bXSxsPVtdO2xldCBvPTA7Zm9yKGxldCB1PW47dTw9czt1Kyspe2NvbnN0IGM9dGhpcy5saW5lc1t1XSxmPXQ/dGhpcy5fc3RhcnRDb2x1bW5zW3VdOjEsaD10P3RoaXMuX2VuZENvbHVtbnNbdV06Yy5sZW5ndGgrMTtmb3IobGV0IGQ9ZjtkPGg7ZCsrKXJbb109Yy5jaGFyQ29kZUF0KGQtMSksaVtvXT11KzEsbFtvXT1kLG8rKzshdCYmdTxzJiYocltvXT0xMCxpW29dPXUrMSxsW29dPWMubGVuZ3RoKzEsbysrKX1yZXR1cm4gbmV3IHkxKHIsaSxsKX19O2NsYXNzIHkxe2NvbnN0cnVjdG9yKHQsbixzKXt0aGlzLl9jaGFyQ29kZXM9dCx0aGlzLl9saW5lTnVtYmVycz1uLHRoaXMuX2NvbHVtbnM9c310b1N0cmluZygpe3JldHVybiJbIit0aGlzLl9jaGFyQ29kZXMubWFwKCh0LG4pPT4odD09PTEwPyJcXG4iOlN0cmluZy5mcm9tQ2hhckNvZGUodCkpK2AtKCR7dGhpcy5fbGluZU51bWJlcnNbbl19LCR7dGhpcy5fY29sdW1uc1tuXX0pYCkuam9pbigiLCAiKSsiXSJ9X2Fzc2VydEluZGV4KHQsbil7aWYodDwwfHx0Pj1uLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoIklsbGVnYWwgaW5kZXgiKX1nZXRFbGVtZW50cygpe3JldHVybiB0aGlzLl9jaGFyQ29kZXN9Z2V0U3RhcnRMaW5lTnVtYmVyKHQpe3JldHVybiB0PjAmJnQ9PT10aGlzLl9saW5lTnVtYmVycy5sZW5ndGg/dGhpcy5nZXRFbmRMaW5lTnVtYmVyKHQtMSk6KHRoaXMuX2Fzc2VydEluZGV4KHQsdGhpcy5fbGluZU51bWJlcnMpLHRoaXMuX2xpbmVOdW1iZXJzW3RdKX1nZXRFbmRMaW5lTnVtYmVyKHQpe3JldHVybiB0PT09LTE/dGhpcy5nZXRTdGFydExpbmVOdW1iZXIodCsxKToodGhpcy5fYXNzZXJ0SW5kZXgodCx0aGlzLl9saW5lTnVtYmVycyksdGhpcy5fY2hhckNvZGVzW3RdPT09MTA/dGhpcy5fbGluZU51bWJlcnNbdF0rMTp0aGlzLl9saW5lTnVtYmVyc1t0XSl9Z2V0U3RhcnRDb2x1bW4odCl7cmV0dXJuIHQ+MCYmdD09PXRoaXMuX2NvbHVtbnMubGVuZ3RoP3RoaXMuZ2V0RW5kQ29sdW1uKHQtMSk6KHRoaXMuX2Fzc2VydEluZGV4KHQsdGhpcy5fY29sdW1ucyksdGhpcy5fY29sdW1uc1t0XSl9Z2V0RW5kQ29sdW1uKHQpe3JldHVybiB0PT09LTE/dGhpcy5nZXRTdGFydENvbHVtbih0KzEpOih0aGlzLl9hc3NlcnRJbmRleCh0LHRoaXMuX2NvbHVtbnMpLHRoaXMuX2NoYXJDb2Rlc1t0XT09PTEwPzE6dGhpcy5fY29sdW1uc1t0XSsxKX19Y2xhc3MgcWV7Y29uc3RydWN0b3IodCxuLHMscixpLGwsbyx1KXt0aGlzLm9yaWdpbmFsU3RhcnRMaW5lTnVtYmVyPXQsdGhpcy5vcmlnaW5hbFN0YXJ0Q29sdW1uPW4sdGhpcy5vcmlnaW5hbEVuZExpbmVOdW1iZXI9cyx0aGlzLm9yaWdpbmFsRW5kQ29sdW1uPXIsdGhpcy5tb2RpZmllZFN0YXJ0TGluZU51bWJlcj1pLHRoaXMubW9kaWZpZWRTdGFydENvbHVtbj1sLHRoaXMubW9kaWZpZWRFbmRMaW5lTnVtYmVyPW8sdGhpcy5tb2RpZmllZEVuZENvbHVtbj11fXN0YXRpYyBjcmVhdGVGcm9tRGlmZkNoYW5nZSh0LG4scyl7Y29uc3Qgcj1uLmdldFN0YXJ0TGluZU51bWJlcih0Lm9yaWdpbmFsU3RhcnQpLGk9bi5nZXRTdGFydENvbHVtbih0Lm9yaWdpbmFsU3RhcnQpLGw9bi5nZXRFbmRMaW5lTnVtYmVyKHQub3JpZ2luYWxTdGFydCt0Lm9yaWdpbmFsTGVuZ3RoLTEpLG89bi5nZXRFbmRDb2x1bW4odC5vcmlnaW5hbFN0YXJ0K3Qub3JpZ2luYWxMZW5ndGgtMSksdT1zLmdldFN0YXJ0TGluZU51bWJlcih0Lm1vZGlmaWVkU3RhcnQpLGM9cy5nZXRTdGFydENvbHVtbih0Lm1vZGlmaWVkU3RhcnQpLGY9cy5nZXRFbmRMaW5lTnVtYmVyKHQubW9kaWZpZWRTdGFydCt0Lm1vZGlmaWVkTGVuZ3RoLTEpLGg9cy5nZXRFbmRDb2x1bW4odC5tb2RpZmllZFN0YXJ0K3QubW9kaWZpZWRMZW5ndGgtMSk7cmV0dXJuIG5ldyBxZShyLGksbCxvLHUsYyxmLGgpfX1mdW5jdGlvbiBFMShlKXtpZihlLmxlbmd0aDw9MSlyZXR1cm4gZTtjb25zdCB0PVtlWzBdXTtsZXQgbj10WzBdO2ZvcihsZXQgcz0xLHI9ZS5sZW5ndGg7czxyO3MrKyl7Y29uc3QgaT1lW3NdLGw9aS5vcmlnaW5hbFN0YXJ0LShuLm9yaWdpbmFsU3RhcnQrbi5vcmlnaW5hbExlbmd0aCksbz1pLm1vZGlmaWVkU3RhcnQtKG4ubW9kaWZpZWRTdGFydCtuLm1vZGlmaWVkTGVuZ3RoKTtNYXRoLm1pbihsLG8pPEExPyhuLm9yaWdpbmFsTGVuZ3RoPWkub3JpZ2luYWxTdGFydCtpLm9yaWdpbmFsTGVuZ3RoLW4ub3JpZ2luYWxTdGFydCxuLm1vZGlmaWVkTGVuZ3RoPWkubW9kaWZpZWRTdGFydCtpLm1vZGlmaWVkTGVuZ3RoLW4ubW9kaWZpZWRTdGFydCk6KHQucHVzaChpKSxuPWkpfXJldHVybiB0fWNsYXNzIHR0e2NvbnN0cnVjdG9yKHQsbixzLHIsaSl7dGhpcy5vcmlnaW5hbFN0YXJ0TGluZU51bWJlcj10LHRoaXMub3JpZ2luYWxFbmRMaW5lTnVtYmVyPW4sdGhpcy5tb2RpZmllZFN0YXJ0TGluZU51bWJlcj1zLHRoaXMubW9kaWZpZWRFbmRMaW5lTnVtYmVyPXIsdGhpcy5jaGFyQ2hhbmdlcz1pfXN0YXRpYyBjcmVhdGVGcm9tRGlmZlJlc3VsdCh0LG4scyxyLGksbCxvKXtsZXQgdSxjLGYsaCxkO2lmKG4ub3JpZ2luYWxMZW5ndGg9PT0wPyh1PXMuZ2V0U3RhcnRMaW5lTnVtYmVyKG4ub3JpZ2luYWxTdGFydCktMSxjPTApOih1PXMuZ2V0U3RhcnRMaW5lTnVtYmVyKG4ub3JpZ2luYWxTdGFydCksYz1zLmdldEVuZExpbmVOdW1iZXIobi5vcmlnaW5hbFN0YXJ0K24ub3JpZ2luYWxMZW5ndGgtMSkpLG4ubW9kaWZpZWRMZW5ndGg9PT0wPyhmPXIuZ2V0U3RhcnRMaW5lTnVtYmVyKG4ubW9kaWZpZWRTdGFydCktMSxoPTApOihmPXIuZ2V0U3RhcnRMaW5lTnVtYmVyKG4ubW9kaWZpZWRTdGFydCksaD1yLmdldEVuZExpbmVOdW1iZXIobi5tb2RpZmllZFN0YXJ0K24ubW9kaWZpZWRMZW5ndGgtMSkpLGwmJm4ub3JpZ2luYWxMZW5ndGg+MCYmbi5vcmlnaW5hbExlbmd0aDwyMCYmbi5tb2RpZmllZExlbmd0aD4wJiZuLm1vZGlmaWVkTGVuZ3RoPDIwJiZpKCkpe2NvbnN0IG09cy5jcmVhdGVDaGFyU2VxdWVuY2UodCxuLm9yaWdpbmFsU3RhcnQsbi5vcmlnaW5hbFN0YXJ0K24ub3JpZ2luYWxMZW5ndGgtMSksZz1yLmNyZWF0ZUNoYXJTZXF1ZW5jZSh0LG4ubW9kaWZpZWRTdGFydCxuLm1vZGlmaWVkU3RhcnQrbi5tb2RpZmllZExlbmd0aC0xKTtpZihtLmdldEVsZW1lbnRzKCkubGVuZ3RoPjAmJmcuZ2V0RWxlbWVudHMoKS5sZW5ndGg+MCl7bGV0IGI9Y3IobSxnLGksITApLmNoYW5nZXM7byYmKGI9RTEoYikpLGQ9W107Zm9yKGxldCB3PTAsTj1iLmxlbmd0aDt3PE47dysrKWQucHVzaChxZS5jcmVhdGVGcm9tRGlmZkNoYW5nZShiW3ddLG0sZykpfX1yZXR1cm4gbmV3IHR0KHUsYyxmLGgsZCl9fWNsYXNzIE0xe2NvbnN0cnVjdG9yKHQsbixzKXt0aGlzLnNob3VsZENvbXB1dGVDaGFyQ2hhbmdlcz1zLnNob3VsZENvbXB1dGVDaGFyQ2hhbmdlcyx0aGlzLnNob3VsZFBvc3RQcm9jZXNzQ2hhckNoYW5nZXM9cy5zaG91bGRQb3N0UHJvY2Vzc0NoYXJDaGFuZ2VzLHRoaXMuc2hvdWxkSWdub3JlVHJpbVdoaXRlc3BhY2U9cy5zaG91bGRJZ25vcmVUcmltV2hpdGVzcGFjZSx0aGlzLnNob3VsZE1ha2VQcmV0dHlEaWZmPXMuc2hvdWxkTWFrZVByZXR0eURpZmYsdGhpcy5vcmlnaW5hbExpbmVzPXQsdGhpcy5tb2RpZmllZExpbmVzPW4sdGhpcy5vcmlnaW5hbD1uZXcgaHIodCksdGhpcy5tb2RpZmllZD1uZXcgaHIobiksdGhpcy5jb250aW51ZUxpbmVEaWZmPWZyKHMubWF4Q29tcHV0YXRpb25UaW1lKSx0aGlzLmNvbnRpbnVlQ2hhckRpZmY9ZnIocy5tYXhDb21wdXRhdGlvblRpbWU9PT0wPzA6TWF0aC5taW4ocy5tYXhDb21wdXRhdGlvblRpbWUsNWUzKSl9Y29tcHV0ZURpZmYoKXtpZih0aGlzLm9yaWdpbmFsLmxpbmVzLmxlbmd0aD09PTEmJnRoaXMub3JpZ2luYWwubGluZXNbMF0ubGVuZ3RoPT09MClyZXR1cm4gdGhpcy5tb2RpZmllZC5saW5lcy5sZW5ndGg9PT0xJiZ0aGlzLm1vZGlmaWVkLmxpbmVzWzBdLmxlbmd0aD09PTA/e3F1aXRFYXJseTohMSxjaGFuZ2VzOltdfTp7cXVpdEVhcmx5OiExLGNoYW5nZXM6W3tvcmlnaW5hbFN0YXJ0TGluZU51bWJlcjoxLG9yaWdpbmFsRW5kTGluZU51bWJlcjoxLG1vZGlmaWVkU3RhcnRMaW5lTnVtYmVyOjEsbW9kaWZpZWRFbmRMaW5lTnVtYmVyOnRoaXMubW9kaWZpZWQubGluZXMubGVuZ3RoLGNoYXJDaGFuZ2VzOnZvaWQgMH1dfTtpZih0aGlzLm1vZGlmaWVkLmxpbmVzLmxlbmd0aD09PTEmJnRoaXMubW9kaWZpZWQubGluZXNbMF0ubGVuZ3RoPT09MClyZXR1cm57cXVpdEVhcmx5OiExLGNoYW5nZXM6W3tvcmlnaW5hbFN0YXJ0TGluZU51bWJlcjoxLG9yaWdpbmFsRW5kTGluZU51bWJlcjp0aGlzLm9yaWdpbmFsLmxpbmVzLmxlbmd0aCxtb2RpZmllZFN0YXJ0TGluZU51bWJlcjoxLG1vZGlmaWVkRW5kTGluZU51bWJlcjoxLGNoYXJDaGFuZ2VzOnZvaWQgMH1dfTtjb25zdCB0PWNyKHRoaXMub3JpZ2luYWwsdGhpcy5tb2RpZmllZCx0aGlzLmNvbnRpbnVlTGluZURpZmYsdGhpcy5zaG91bGRNYWtlUHJldHR5RGlmZiksbj10LmNoYW5nZXMscz10LnF1aXRFYXJseTtpZih0aGlzLnNob3VsZElnbm9yZVRyaW1XaGl0ZXNwYWNlKXtjb25zdCBvPVtdO2ZvcihsZXQgdT0wLGM9bi5sZW5ndGg7dTxjO3UrKylvLnB1c2godHQuY3JlYXRlRnJvbURpZmZSZXN1bHQodGhpcy5zaG91bGRJZ25vcmVUcmltV2hpdGVzcGFjZSxuW3VdLHRoaXMub3JpZ2luYWwsdGhpcy5tb2RpZmllZCx0aGlzLmNvbnRpbnVlQ2hhckRpZmYsdGhpcy5zaG91bGRDb21wdXRlQ2hhckNoYW5nZXMsdGhpcy5zaG91bGRQb3N0UHJvY2Vzc0NoYXJDaGFuZ2VzKSk7cmV0dXJue3F1aXRFYXJseTpzLGNoYW5nZXM6b319Y29uc3Qgcj1bXTtsZXQgaT0wLGw9MDtmb3IobGV0IG89LTEsdT1uLmxlbmd0aDtvPHU7bysrKXtjb25zdCBjPW8rMTx1P25bbysxXTpudWxsLGY9Yz9jLm9yaWdpbmFsU3RhcnQ6dGhpcy5vcmlnaW5hbExpbmVzLmxlbmd0aCxoPWM/Yy5tb2RpZmllZFN0YXJ0OnRoaXMubW9kaWZpZWRMaW5lcy5sZW5ndGg7Zm9yKDtpPGYmJmw8aDspe2NvbnN0IGQ9dGhpcy5vcmlnaW5hbExpbmVzW2ldLG09dGhpcy5tb2RpZmllZExpbmVzW2xdO2lmKGQhPT1tKXt7bGV0IGc9ZG4oZCwxKSxiPWRuKG0sMSk7Zm9yKDtnPjEmJmI+MTspe2NvbnN0IHc9ZC5jaGFyQ29kZUF0KGctMiksTj1tLmNoYXJDb2RlQXQoYi0yKTtpZih3IT09TilicmVhaztnLS0sYi0tfShnPjF8fGI+MSkmJnRoaXMuX3B1c2hUcmltV2hpdGVzcGFjZUNoYXJDaGFuZ2UocixpKzEsMSxnLGwrMSwxLGIpfXtsZXQgZz1tbihkLDEpLGI9bW4obSwxKTtjb25zdCB3PWQubGVuZ3RoKzEsTj1tLmxlbmd0aCsxO2Zvcig7Zzx3JiZiPE47KXtjb25zdCBDPWQuY2hhckNvZGVBdChnLTEpLFM9ZC5jaGFyQ29kZUF0KGItMSk7aWYoQyE9PVMpYnJlYWs7ZysrLGIrK30oZzx3fHxiPE4pJiZ0aGlzLl9wdXNoVHJpbVdoaXRlc3BhY2VDaGFyQ2hhbmdlKHIsaSsxLGcsdyxsKzEsYixOKX19aSsrLGwrK31jJiYoci5wdXNoKHR0LmNyZWF0ZUZyb21EaWZmUmVzdWx0KHRoaXMuc2hvdWxkSWdub3JlVHJpbVdoaXRlc3BhY2UsYyx0aGlzLm9yaWdpbmFsLHRoaXMubW9kaWZpZWQsdGhpcy5jb250aW51ZUNoYXJEaWZmLHRoaXMuc2hvdWxkQ29tcHV0ZUNoYXJDaGFuZ2VzLHRoaXMuc2hvdWxkUG9zdFByb2Nlc3NDaGFyQ2hhbmdlcykpLGkrPWMub3JpZ2luYWxMZW5ndGgsbCs9Yy5tb2RpZmllZExlbmd0aCl9cmV0dXJue3F1aXRFYXJseTpzLGNoYW5nZXM6cn19X3B1c2hUcmltV2hpdGVzcGFjZUNoYXJDaGFuZ2UodCxuLHMscixpLGwsbyl7aWYodGhpcy5fbWVyZ2VUcmltV2hpdGVzcGFjZUNoYXJDaGFuZ2UodCxuLHMscixpLGwsbykpcmV0dXJuO2xldCB1O3RoaXMuc2hvdWxkQ29tcHV0ZUNoYXJDaGFuZ2VzJiYodT1bbmV3IHFlKG4scyxuLHIsaSxsLGksbyldKSx0LnB1c2gobmV3IHR0KG4sbixpLGksdSkpfV9tZXJnZVRyaW1XaGl0ZXNwYWNlQ2hhckNoYW5nZSh0LG4scyxyLGksbCxvKXtjb25zdCB1PXQubGVuZ3RoO2lmKHU9PT0wKXJldHVybiExO2NvbnN0IGM9dFt1LTFdO3JldHVybiBjLm9yaWdpbmFsRW5kTGluZU51bWJlcj09PTB8fGMubW9kaWZpZWRFbmRMaW5lTnVtYmVyPT09MD8hMTpjLm9yaWdpbmFsRW5kTGluZU51bWJlcj09PW4mJmMubW9kaWZpZWRFbmRMaW5lTnVtYmVyPT09aT8odGhpcy5zaG91bGRDb21wdXRlQ2hhckNoYW5nZXMmJmMuY2hhckNoYW5nZXMmJmMuY2hhckNoYW5nZXMucHVzaChuZXcgcWUobixzLG4scixpLGwsaSxvKSksITApOmMub3JpZ2luYWxFbmRMaW5lTnVtYmVyKzE9PT1uJiZjLm1vZGlmaWVkRW5kTGluZU51bWJlcisxPT09aT8oYy5vcmlnaW5hbEVuZExpbmVOdW1iZXI9bixjLm1vZGlmaWVkRW5kTGluZU51bWJlcj1pLHRoaXMuc2hvdWxkQ29tcHV0ZUNoYXJDaGFuZ2VzJiZjLmNoYXJDaGFuZ2VzJiZjLmNoYXJDaGFuZ2VzLnB1c2gobmV3IHFlKG4scyxuLHIsaSxsLGksbykpLCEwKTohMX19ZnVuY3Rpb24gZG4oZSx0KXtjb25zdCBuPXJpKGUpO3JldHVybiBuPT09LTE/dDpuKzF9ZnVuY3Rpb24gbW4oZSx0KXtjb25zdCBuPWlpKGUpO3JldHVybiBuPT09LTE/dDpuKzJ9ZnVuY3Rpb24gZnIoZSl7aWYoZT09PTApcmV0dXJuKCk9PiEwO2NvbnN0IHQ9RGF0ZS5ub3coKTtyZXR1cm4oKT0+RGF0ZS5ub3coKS10PGV9Y2xhc3MgZ2V7c3RhdGljIHRyaXZpYWwodCxuKXtyZXR1cm4gbmV3IGdlKFtuZXcgRyhWLm9mTGVuZ3RoKHQubGVuZ3RoKSxWLm9mTGVuZ3RoKG4ubGVuZ3RoKSldLCExKX1zdGF0aWMgdHJpdmlhbFRpbWVkT3V0KHQsbil7cmV0dXJuIG5ldyBnZShbbmV3IEcoVi5vZkxlbmd0aCh0Lmxlbmd0aCksVi5vZkxlbmd0aChuLmxlbmd0aCkpXSwhMCl9Y29uc3RydWN0b3IodCxuKXt0aGlzLmRpZmZzPXQsdGhpcy5oaXRUaW1lb3V0PW59fWNsYXNzIEd7c3RhdGljIGludmVydCh0LG4pe2NvbnN0IHM9W107cmV0dXJuIFVpKHQsKHIsaSk9PntzLnB1c2goRy5mcm9tT2Zmc2V0UGFpcnMocj9yLmdldEVuZEV4Y2x1c2l2ZXMoKTpiZS56ZXJvLGk/aS5nZXRTdGFydHMoKTpuZXcgYmUobiwocj9yLnNlcTJSYW5nZS5lbmRFeGNsdXNpdmUtci5zZXExUmFuZ2UuZW5kRXhjbHVzaXZlOjApK24pKSl9KSxzfXN0YXRpYyBmcm9tT2Zmc2V0UGFpcnModCxuKXtyZXR1cm4gbmV3IEcobmV3IFYodC5vZmZzZXQxLG4ub2Zmc2V0MSksbmV3IFYodC5vZmZzZXQyLG4ub2Zmc2V0MikpfXN0YXRpYyBhc3NlcnRTb3J0ZWQodCl7bGV0IG47Zm9yKGNvbnN0IHMgb2YgdCl7aWYobiYmIShuLnNlcTFSYW5nZS5lbmRFeGNsdXNpdmU8PXMuc2VxMVJhbmdlLnN0YXJ0JiZuLnNlcTJSYW5nZS5lbmRFeGNsdXNpdmU8PXMuc2VxMlJhbmdlLnN0YXJ0KSl0aHJvdyBuZXcgdGUoIlNlcXVlbmNlIGRpZmZzIG11c3QgYmUgc29ydGVkIik7bj1zfX1jb25zdHJ1Y3Rvcih0LG4pe3RoaXMuc2VxMVJhbmdlPXQsdGhpcy5zZXEyUmFuZ2U9bn1zd2FwKCl7cmV0dXJuIG5ldyBHKHRoaXMuc2VxMlJhbmdlLHRoaXMuc2VxMVJhbmdlKX10b1N0cmluZygpe3JldHVybmAke3RoaXMuc2VxMVJhbmdlfSA8LT4gJHt0aGlzLnNlcTJSYW5nZX1gfWpvaW4odCl7cmV0dXJuIG5ldyBHKHRoaXMuc2VxMVJhbmdlLmpvaW4odC5zZXExUmFuZ2UpLHRoaXMuc2VxMlJhbmdlLmpvaW4odC5zZXEyUmFuZ2UpKX1kZWx0YSh0KXtyZXR1cm4gdD09PTA/dGhpczpuZXcgRyh0aGlzLnNlcTFSYW5nZS5kZWx0YSh0KSx0aGlzLnNlcTJSYW5nZS5kZWx0YSh0KSl9ZGVsdGFTdGFydCh0KXtyZXR1cm4gdD09PTA/dGhpczpuZXcgRyh0aGlzLnNlcTFSYW5nZS5kZWx0YVN0YXJ0KHQpLHRoaXMuc2VxMlJhbmdlLmRlbHRhU3RhcnQodCkpfWRlbHRhRW5kKHQpe3JldHVybiB0PT09MD90aGlzOm5ldyBHKHRoaXMuc2VxMVJhbmdlLmRlbHRhRW5kKHQpLHRoaXMuc2VxMlJhbmdlLmRlbHRhRW5kKHQpKX1pbnRlcnNlY3QodCl7Y29uc3Qgbj10aGlzLnNlcTFSYW5nZS5pbnRlcnNlY3QodC5zZXExUmFuZ2UpLHM9dGhpcy5zZXEyUmFuZ2UuaW50ZXJzZWN0KHQuc2VxMlJhbmdlKTtpZighKCFufHwhcykpcmV0dXJuIG5ldyBHKG4scyl9Z2V0U3RhcnRzKCl7cmV0dXJuIG5ldyBiZSh0aGlzLnNlcTFSYW5nZS5zdGFydCx0aGlzLnNlcTJSYW5nZS5zdGFydCl9Z2V0RW5kRXhjbHVzaXZlcygpe3JldHVybiBuZXcgYmUodGhpcy5zZXExUmFuZ2UuZW5kRXhjbHVzaXZlLHRoaXMuc2VxMlJhbmdlLmVuZEV4Y2x1c2l2ZSl9fWNvbnN0IFJlPWNsYXNzIFJle2NvbnN0cnVjdG9yKHQsbil7dGhpcy5vZmZzZXQxPXQsdGhpcy5vZmZzZXQyPW59dG9TdHJpbmcoKXtyZXR1cm5gJHt0aGlzLm9mZnNldDF9IDwtPiAke3RoaXMub2Zmc2V0Mn1gfWRlbHRhKHQpe3JldHVybiB0PT09MD90aGlzOm5ldyBSZSh0aGlzLm9mZnNldDErdCx0aGlzLm9mZnNldDIrdCl9ZXF1YWxzKHQpe3JldHVybiB0aGlzLm9mZnNldDE9PT10Lm9mZnNldDEmJnRoaXMub2Zmc2V0Mj09PXQub2Zmc2V0Mn19O1JlLnplcm89bmV3IFJlKDAsMCksUmUubWF4PW5ldyBSZShOdW1iZXIuTUFYX1NBRkVfSU5URUdFUixOdW1iZXIuTUFYX1NBRkVfSU5URUdFUik7bGV0IGJlPVJlO2NvbnN0IEZ0PWNsYXNzIEZ0e2lzVmFsaWQoKXtyZXR1cm4hMH19O0Z0Lmluc3RhbmNlPW5ldyBGdDtsZXQgbnQ9RnQ7Y2xhc3MgazF7Y29uc3RydWN0b3IodCl7aWYodGhpcy50aW1lb3V0PXQsdGhpcy5zdGFydFRpbWU9RGF0ZS5ub3coKSx0aGlzLnZhbGlkPSEwLHQ8PTApdGhyb3cgbmV3IHRlKCJ0aW1lb3V0IG11c3QgYmUgcG9zaXRpdmUiKX1pc1ZhbGlkKCl7aWYoIShEYXRlLm5vdygpLXRoaXMuc3RhcnRUaW1lPHRoaXMudGltZW91dCkmJnRoaXMudmFsaWQpe3RoaXMudmFsaWQ9ITE7ZGVidWdnZXJ9cmV0dXJuIHRoaXMudmFsaWR9fWNsYXNzIGdue2NvbnN0cnVjdG9yKHQsbil7dGhpcy53aWR0aD10LHRoaXMuaGVpZ2h0PW4sdGhpcy5hcnJheT1bXSx0aGlzLmFycmF5PW5ldyBBcnJheSh0Km4pfWdldCh0LG4pe3JldHVybiB0aGlzLmFycmF5W3Qrbip0aGlzLndpZHRoXX1zZXQodCxuLHMpe3RoaXMuYXJyYXlbdCtuKnRoaXMud2lkdGhdPXN9fWZ1bmN0aW9uIGJuKGUpe3JldHVybiBlPT09MzJ8fGU9PT05fWNvbnN0IGl0PWNsYXNzIGl0e3N0YXRpYyBnZXRLZXkodCl7bGV0IG49dGhpcy5jaHJLZXlzLmdldCh0KTtyZXR1cm4gbj09PXZvaWQgMCYmKG49dGhpcy5jaHJLZXlzLnNpemUsdGhpcy5jaHJLZXlzLnNldCh0LG4pKSxufWNvbnN0cnVjdG9yKHQsbixzKXt0aGlzLnJhbmdlPXQsdGhpcy5saW5lcz1uLHRoaXMuc291cmNlPXMsdGhpcy5oaXN0b2dyYW09W107bGV0IHI9MDtmb3IobGV0IGk9dC5zdGFydExpbmVOdW1iZXItMTtpPHQuZW5kTGluZU51bWJlckV4Y2x1c2l2ZS0xO2krKyl7Y29uc3QgbD1uW2ldO2ZvcihsZXQgdT0wO3U8bC5sZW5ndGg7dSsrKXtyKys7Y29uc3QgYz1sW3VdLGY9aXQuZ2V0S2V5KGMpO3RoaXMuaGlzdG9ncmFtW2ZdPSh0aGlzLmhpc3RvZ3JhbVtmXXx8MCkrMX1yKys7Y29uc3Qgbz1pdC5nZXRLZXkoYApgKTt0aGlzLmhpc3RvZ3JhbVtvXT0odGhpcy5oaXN0b2dyYW1bb118fDApKzF9dGhpcy50b3RhbENvdW50PXJ9Y29tcHV0ZVNpbWlsYXJpdHkodCl7bGV0IG49MDtjb25zdCBzPU1hdGgubWF4KHRoaXMuaGlzdG9ncmFtLmxlbmd0aCx0Lmhpc3RvZ3JhbS5sZW5ndGgpO2ZvcihsZXQgcj0wO3I8cztyKyspbis9TWF0aC5hYnMoKHRoaXMuaGlzdG9ncmFtW3JdPz8wKS0odC5oaXN0b2dyYW1bcl0/PzApKTtyZXR1cm4gMS1uLyh0aGlzLnRvdGFsQ291bnQrdC50b3RhbENvdW50KX19O2l0LmNocktleXM9bmV3IE1hcDtsZXQgQ3Q9aXQ7Y2xhc3MgRjF7Y29tcHV0ZSh0LG4scz1udC5pbnN0YW5jZSxyKXtpZih0Lmxlbmd0aD09PTB8fG4ubGVuZ3RoPT09MClyZXR1cm4gZ2UudHJpdmlhbCh0LG4pO2NvbnN0IGk9bmV3IGduKHQubGVuZ3RoLG4ubGVuZ3RoKSxsPW5ldyBnbih0Lmxlbmd0aCxuLmxlbmd0aCksbz1uZXcgZ24odC5sZW5ndGgsbi5sZW5ndGgpO2ZvcihsZXQgZz0wO2c8dC5sZW5ndGg7ZysrKWZvcihsZXQgYj0wO2I8bi5sZW5ndGg7YisrKXtpZighcy5pc1ZhbGlkKCkpcmV0dXJuIGdlLnRyaXZpYWxUaW1lZE91dCh0LG4pO2NvbnN0IHc9Zz09PTA/MDppLmdldChnLTEsYiksTj1iPT09MD8wOmkuZ2V0KGcsYi0xKTtsZXQgQzt0LmdldEVsZW1lbnQoZyk9PT1uLmdldEVsZW1lbnQoYik/KGc9PT0wfHxiPT09MD9DPTA6Qz1pLmdldChnLTEsYi0xKSxnPjAmJmI+MCYmbC5nZXQoZy0xLGItMSk9PT0zJiYoQys9by5nZXQoZy0xLGItMSkpLEMrPXI/cihnLGIpOjEpOkM9LTE7Y29uc3QgUz1NYXRoLm1heCh3LE4sQyk7aWYoUz09PUMpe2NvbnN0IHA9Zz4wJiZiPjA/by5nZXQoZy0xLGItMSk6MDtvLnNldChnLGIscCsxKSxsLnNldChnLGIsMyl9ZWxzZSBTPT09dz8oby5zZXQoZyxiLDApLGwuc2V0KGcsYiwxKSk6Uz09PU4mJihvLnNldChnLGIsMCksbC5zZXQoZyxiLDIpKTtpLnNldChnLGIsUyl9Y29uc3QgdT1bXTtsZXQgYz10Lmxlbmd0aCxmPW4ubGVuZ3RoO2Z1bmN0aW9uIGgoZyxiKXsoZysxIT09Y3x8YisxIT09ZikmJnUucHVzaChuZXcgRyhuZXcgVihnKzEsYyksbmV3IFYoYisxLGYpKSksYz1nLGY9Yn1sZXQgZD10Lmxlbmd0aC0xLG09bi5sZW5ndGgtMTtmb3IoO2Q+PTAmJm0+PTA7KWwuZ2V0KGQsbSk9PT0zPyhoKGQsbSksZC0tLG0tLSk6bC5nZXQoZCxtKT09PTE/ZC0tOm0tLTtyZXR1cm4gaCgtMSwtMSksdS5yZXZlcnNlKCksbmV3IGdlKHUsITEpfX1jbGFzcyBkcntjb21wdXRlKHQsbixzPW50Lmluc3RhbmNlKXtpZih0Lmxlbmd0aD09PTB8fG4ubGVuZ3RoPT09MClyZXR1cm4gZ2UudHJpdmlhbCh0LG4pO2NvbnN0IHI9dCxpPW47ZnVuY3Rpb24gbChiLHcpe2Zvcig7YjxyLmxlbmd0aCYmdzxpLmxlbmd0aCYmci5nZXRFbGVtZW50KGIpPT09aS5nZXRFbGVtZW50KHcpOyliKyssdysrO3JldHVybiBifWxldCBvPTA7Y29uc3QgdT1uZXcgRDE7dS5zZXQoMCxsKDAsMCkpO2NvbnN0IGM9bmV3IFAxO2Muc2V0KDAsdS5nZXQoMCk9PT0wP251bGw6bmV3IG1yKG51bGwsMCwwLHUuZ2V0KDApKSk7bGV0IGY9MDtlOmZvcig7Oyl7aWYobysrLCFzLmlzVmFsaWQoKSlyZXR1cm4gZ2UudHJpdmlhbFRpbWVkT3V0KHIsaSk7Y29uc3QgYj0tTWF0aC5taW4obyxpLmxlbmd0aCtvJTIpLHc9TWF0aC5taW4obyxyLmxlbmd0aCtvJTIpO2ZvcihmPWI7Zjw9dztmKz0yKXtjb25zdCBOPWY9PT13Py0xOnUuZ2V0KGYrMSksQz1mPT09Yj8tMTp1LmdldChmLTEpKzEsUz1NYXRoLm1pbihNYXRoLm1heChOLEMpLHIubGVuZ3RoKSxwPVMtZjtpZihTPnIubGVuZ3RofHxwPmkubGVuZ3RoKWNvbnRpbnVlO2NvbnN0IHg9bChTLHApO3Uuc2V0KGYseCk7Y29uc3Qgdj1TPT09Tj9jLmdldChmKzEpOmMuZ2V0KGYtMSk7aWYoYy5zZXQoZix4IT09Uz9uZXcgbXIodixTLHAseC1TKTp2KSx1LmdldChmKT09PXIubGVuZ3RoJiZ1LmdldChmKS1mPT09aS5sZW5ndGgpYnJlYWsgZX19bGV0IGg9Yy5nZXQoZik7Y29uc3QgZD1bXTtsZXQgbT1yLmxlbmd0aCxnPWkubGVuZ3RoO2Zvcig7Oyl7Y29uc3QgYj1oP2gueCtoLmxlbmd0aDowLHc9aD9oLnkraC5sZW5ndGg6MDtpZigoYiE9PW18fHchPT1nKSYmZC5wdXNoKG5ldyBHKG5ldyBWKGIsbSksbmV3IFYodyxnKSkpLCFoKWJyZWFrO209aC54LGc9aC55LGg9aC5wcmV2fXJldHVybiBkLnJldmVyc2UoKSxuZXcgZ2UoZCwhMSl9fWNsYXNzIG1ye2NvbnN0cnVjdG9yKHQsbixzLHIpe3RoaXMucHJldj10LHRoaXMueD1uLHRoaXMueT1zLHRoaXMubGVuZ3RoPXJ9fWNsYXNzIEQxe2NvbnN0cnVjdG9yKCl7dGhpcy5wb3NpdGl2ZUFycj1uZXcgSW50MzJBcnJheSgxMCksdGhpcy5uZWdhdGl2ZUFycj1uZXcgSW50MzJBcnJheSgxMCl9Z2V0KHQpe3JldHVybiB0PDA/KHQ9LXQtMSx0aGlzLm5lZ2F0aXZlQXJyW3RdKTp0aGlzLnBvc2l0aXZlQXJyW3RdfXNldCh0LG4pe2lmKHQ8MCl7aWYodD0tdC0xLHQ+PXRoaXMubmVnYXRpdmVBcnIubGVuZ3RoKXtjb25zdCBzPXRoaXMubmVnYXRpdmVBcnI7dGhpcy5uZWdhdGl2ZUFycj1uZXcgSW50MzJBcnJheShzLmxlbmd0aCoyKSx0aGlzLm5lZ2F0aXZlQXJyLnNldChzKX10aGlzLm5lZ2F0aXZlQXJyW3RdPW59ZWxzZXtpZih0Pj10aGlzLnBvc2l0aXZlQXJyLmxlbmd0aCl7Y29uc3Qgcz10aGlzLnBvc2l0aXZlQXJyO3RoaXMucG9zaXRpdmVBcnI9bmV3IEludDMyQXJyYXkocy5sZW5ndGgqMiksdGhpcy5wb3NpdGl2ZUFyci5zZXQocyl9dGhpcy5wb3NpdGl2ZUFyclt0XT1ufX19Y2xhc3MgUDF7Y29uc3RydWN0b3IoKXt0aGlzLnBvc2l0aXZlQXJyPVtdLHRoaXMubmVnYXRpdmVBcnI9W119Z2V0KHQpe3JldHVybiB0PDA/KHQ9LXQtMSx0aGlzLm5lZ2F0aXZlQXJyW3RdKTp0aGlzLnBvc2l0aXZlQXJyW3RdfXNldCh0LG4pe3Q8MD8odD0tdC0xLHRoaXMubmVnYXRpdmVBcnJbdF09bik6dGhpcy5wb3NpdGl2ZUFyclt0XT1ufX1jbGFzcyBBdHtjb25zdHJ1Y3Rvcih0LG4scyl7dGhpcy5saW5lcz10LHRoaXMucmFuZ2U9bix0aGlzLmNvbnNpZGVyV2hpdGVzcGFjZUNoYW5nZXM9cyx0aGlzLmVsZW1lbnRzPVtdLHRoaXMuZmlyc3RFbGVtZW50T2Zmc2V0QnlMaW5lSWR4PVtdLHRoaXMubGluZVN0YXJ0T2Zmc2V0cz1bXSx0aGlzLnRyaW1tZWRXc0xlbmd0aHNCeUxpbmVJZHg9W10sdGhpcy5maXJzdEVsZW1lbnRPZmZzZXRCeUxpbmVJZHgucHVzaCgwKTtmb3IobGV0IHI9dGhpcy5yYW5nZS5zdGFydExpbmVOdW1iZXI7cjw9dGhpcy5yYW5nZS5lbmRMaW5lTnVtYmVyO3IrKyl7bGV0IGk9dFtyLTFdLGw9MDtyPT09dGhpcy5yYW5nZS5zdGFydExpbmVOdW1iZXImJnRoaXMucmFuZ2Uuc3RhcnRDb2x1bW4+MSYmKGw9dGhpcy5yYW5nZS5zdGFydENvbHVtbi0xLGk9aS5zdWJzdHJpbmcobCkpLHRoaXMubGluZVN0YXJ0T2Zmc2V0cy5wdXNoKGwpO2xldCBvPTA7aWYoIXMpe2NvbnN0IGM9aS50cmltU3RhcnQoKTtvPWkubGVuZ3RoLWMubGVuZ3RoLGk9Yy50cmltRW5kKCl9dGhpcy50cmltbWVkV3NMZW5ndGhzQnlMaW5lSWR4LnB1c2gobyk7Y29uc3QgdT1yPT09dGhpcy5yYW5nZS5lbmRMaW5lTnVtYmVyP01hdGgubWluKHRoaXMucmFuZ2UuZW5kQ29sdW1uLTEtbC1vLGkubGVuZ3RoKTppLmxlbmd0aDtmb3IobGV0IGM9MDtjPHU7YysrKXRoaXMuZWxlbWVudHMucHVzaChpLmNoYXJDb2RlQXQoYykpO3I8dGhpcy5yYW5nZS5lbmRMaW5lTnVtYmVyJiYodGhpcy5lbGVtZW50cy5wdXNoKDEwKSx0aGlzLmZpcnN0RWxlbWVudE9mZnNldEJ5TGluZUlkeC5wdXNoKHRoaXMuZWxlbWVudHMubGVuZ3RoKSl9fXRvU3RyaW5nKCl7cmV0dXJuYFNsaWNlOiAiJHt0aGlzLnRleHR9ImB9Z2V0IHRleHQoKXtyZXR1cm4gdGhpcy5nZXRUZXh0KG5ldyBWKDAsdGhpcy5sZW5ndGgpKX1nZXRUZXh0KHQpe3JldHVybiB0aGlzLmVsZW1lbnRzLnNsaWNlKHQuc3RhcnQsdC5lbmRFeGNsdXNpdmUpLm1hcChuPT5TdHJpbmcuZnJvbUNoYXJDb2RlKG4pKS5qb2luKCIiKX1nZXRFbGVtZW50KHQpe3JldHVybiB0aGlzLmVsZW1lbnRzW3RdfWdldCBsZW5ndGgoKXtyZXR1cm4gdGhpcy5lbGVtZW50cy5sZW5ndGh9Z2V0Qm91bmRhcnlTY29yZSh0KXtjb25zdCBuPWJyKHQ+MD90aGlzLmVsZW1lbnRzW3QtMV06LTEpLHM9YnIodDx0aGlzLmVsZW1lbnRzLmxlbmd0aD90aGlzLmVsZW1lbnRzW3RdOi0xKTtpZihuPT09NyYmcz09PTgpcmV0dXJuIDA7aWYobj09PTgpcmV0dXJuIDE1MDtsZXQgcj0wO3JldHVybiBuIT09cyYmKHIrPTEwLG49PT0wJiZzPT09MSYmKHIrPTEpKSxyKz1ncihuKSxyKz1ncihzKSxyfXRyYW5zbGF0ZU9mZnNldCh0LG49InJpZ2h0Iil7Y29uc3Qgcz1ldCh0aGlzLmZpcnN0RWxlbWVudE9mZnNldEJ5TGluZUlkeCxpPT5pPD10KSxyPXQtdGhpcy5maXJzdEVsZW1lbnRPZmZzZXRCeUxpbmVJZHhbc107cmV0dXJuIG5ldyBxKHRoaXMucmFuZ2Uuc3RhcnRMaW5lTnVtYmVyK3MsMSt0aGlzLmxpbmVTdGFydE9mZnNldHNbc10rcisocj09PTAmJm49PT0ibGVmdCI/MDp0aGlzLnRyaW1tZWRXc0xlbmd0aHNCeUxpbmVJZHhbc10pKX10cmFuc2xhdGVSYW5nZSh0KXtjb25zdCBuPXRoaXMudHJhbnNsYXRlT2Zmc2V0KHQuc3RhcnQsInJpZ2h0Iikscz10aGlzLnRyYW5zbGF0ZU9mZnNldCh0LmVuZEV4Y2x1c2l2ZSwibGVmdCIpO3JldHVybiBzLmlzQmVmb3JlKG4pP2suZnJvbVBvc2l0aW9ucyhzLHMpOmsuZnJvbVBvc2l0aW9ucyhuLHMpfWZpbmRXb3JkQ29udGFpbmluZyh0KXtpZih0PDB8fHQ+PXRoaXMuZWxlbWVudHMubGVuZ3RofHwheG4odGhpcy5lbGVtZW50c1t0XSkpcmV0dXJuO2xldCBuPXQ7Zm9yKDtuPjAmJnhuKHRoaXMuZWxlbWVudHNbbi0xXSk7KW4tLTtsZXQgcz10O2Zvcig7czx0aGlzLmVsZW1lbnRzLmxlbmd0aCYmeG4odGhpcy5lbGVtZW50c1tzXSk7KXMrKztyZXR1cm4gbmV3IFYobixzKX1jb3VudExpbmVzSW4odCl7cmV0dXJuIHRoaXMudHJhbnNsYXRlT2Zmc2V0KHQuZW5kRXhjbHVzaXZlKS5saW5lTnVtYmVyLXRoaXMudHJhbnNsYXRlT2Zmc2V0KHQuc3RhcnQpLmxpbmVOdW1iZXJ9aXNTdHJvbmdseUVxdWFsKHQsbil7cmV0dXJuIHRoaXMuZWxlbWVudHNbdF09PT10aGlzLmVsZW1lbnRzW25dfWV4dGVuZFRvRnVsbExpbmVzKHQpe2NvbnN0IG49SWUodGhpcy5maXJzdEVsZW1lbnRPZmZzZXRCeUxpbmVJZHgscj0+cjw9dC5zdGFydCk/PzAscz1TMSh0aGlzLmZpcnN0RWxlbWVudE9mZnNldEJ5TGluZUlkeCxyPT50LmVuZEV4Y2x1c2l2ZTw9cik/P3RoaXMuZWxlbWVudHMubGVuZ3RoO3JldHVybiBuZXcgVihuLHMpfX1mdW5jdGlvbiB4bihlKXtyZXR1cm4gZT49OTcmJmU8PTEyMnx8ZT49NjUmJmU8PTkwfHxlPj00OCYmZTw9NTd9Y29uc3QgVDE9ezA6MCwxOjAsMjowLDM6MTAsNDoyLDU6MzAsNjozLDc6MTAsODoxMH07ZnVuY3Rpb24gZ3IoZSl7cmV0dXJuIFQxW2VdfWZ1bmN0aW9uIGJyKGUpe3JldHVybiBlPT09MTA/ODplPT09MTM/NzpibihlKT82OmU+PTk3JiZlPD0xMjI/MDplPj02NSYmZTw9OTA/MTplPj00OCYmZTw9NTc/MjplPT09LTE/MzplPT09NDR8fGU9PT01OT81OjR9ZnVuY3Rpb24gVjEoZSx0LG4scyxyLGkpe2xldHttb3ZlczpsLGV4Y2x1ZGVkQ2hhbmdlczpvfT1CMShlLHQsbixpKTtpZighaS5pc1ZhbGlkKCkpcmV0dXJuW107Y29uc3QgdT1lLmZpbHRlcihmPT4hby5oYXMoZikpLGM9cTEodSxzLHIsdCxuLGkpO3JldHVybiBXaShsLGMpLGw9VTEobCksbD1sLmZpbHRlcihmPT57Y29uc3QgaD1mLm9yaWdpbmFsLnRvT2Zmc2V0UmFuZ2UoKS5zbGljZSh0KS5tYXAobT0+bS50cmltKCkpO3JldHVybiBoLmpvaW4oYApgKS5sZW5ndGg+PTE1JiZJMShoLG09Pm0ubGVuZ3RoPj0yKT49Mn0pLGw9SDEoZSxsKSxsfWZ1bmN0aW9uIEkxKGUsdCl7bGV0IG49MDtmb3IoY29uc3QgcyBvZiBlKXQocykmJm4rKztyZXR1cm4gbn1mdW5jdGlvbiBCMShlLHQsbixzKXtjb25zdCByPVtdLGk9ZS5maWx0ZXIodT0+dS5tb2RpZmllZC5pc0VtcHR5JiZ1Lm9yaWdpbmFsLmxlbmd0aD49MykubWFwKHU9Pm5ldyBDdCh1Lm9yaWdpbmFsLHQsdSkpLGw9bmV3IFNldChlLmZpbHRlcih1PT51Lm9yaWdpbmFsLmlzRW1wdHkmJnUubW9kaWZpZWQubGVuZ3RoPj0zKS5tYXAodT0+bmV3IEN0KHUubW9kaWZpZWQsbix1KSkpLG89bmV3IFNldDtmb3IoY29uc3QgdSBvZiBpKXtsZXQgYz0tMSxmO2Zvcihjb25zdCBoIG9mIGwpe2NvbnN0IGQ9dS5jb21wdXRlU2ltaWxhcml0eShoKTtkPmMmJihjPWQsZj1oKX1pZihjPi45JiZmJiYobC5kZWxldGUoZiksci5wdXNoKG5ldyByZSh1LnJhbmdlLGYucmFuZ2UpKSxvLmFkZCh1LnNvdXJjZSksby5hZGQoZi5zb3VyY2UpKSwhcy5pc1ZhbGlkKCkpcmV0dXJue21vdmVzOnIsZXhjbHVkZWRDaGFuZ2VzOm99fXJldHVybnttb3ZlczpyLGV4Y2x1ZGVkQ2hhbmdlczpvfX1mdW5jdGlvbiBxMShlLHQsbixzLHIsaSl7Y29uc3QgbD1bXSxvPW5ldyBnMTtmb3IoY29uc3QgZCBvZiBlKWZvcihsZXQgbT1kLm9yaWdpbmFsLnN0YXJ0TGluZU51bWJlcjttPGQub3JpZ2luYWwuZW5kTGluZU51bWJlckV4Y2x1c2l2ZS0yO20rKyl7Y29uc3QgZz1gJHt0W20tMV19OiR7dFttKzEtMV19OiR7dFttKzItMV19YDtvLmFkZChnLHtyYW5nZTpuZXcgRChtLG0rMyl9KX1jb25zdCB1PVtdO2Uuc29ydChidChkPT5kLm1vZGlmaWVkLnN0YXJ0TGluZU51bWJlcix4dCkpO2Zvcihjb25zdCBkIG9mIGUpe2xldCBtPVtdO2ZvcihsZXQgZz1kLm1vZGlmaWVkLnN0YXJ0TGluZU51bWJlcjtnPGQubW9kaWZpZWQuZW5kTGluZU51bWJlckV4Y2x1c2l2ZS0yO2crKyl7Y29uc3QgYj1gJHtuW2ctMV19OiR7bltnKzEtMV19OiR7bltnKzItMV19YCx3PW5ldyBEKGcsZyszKSxOPVtdO28uZm9yRWFjaChiLCh7cmFuZ2U6Q30pPT57Zm9yKGNvbnN0IHAgb2YgbSlpZihwLm9yaWdpbmFsTGluZVJhbmdlLmVuZExpbmVOdW1iZXJFeGNsdXNpdmUrMT09PUMuZW5kTGluZU51bWJlckV4Y2x1c2l2ZSYmcC5tb2RpZmllZExpbmVSYW5nZS5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlKzE9PT13LmVuZExpbmVOdW1iZXJFeGNsdXNpdmUpe3Aub3JpZ2luYWxMaW5lUmFuZ2U9bmV3IEQocC5vcmlnaW5hbExpbmVSYW5nZS5zdGFydExpbmVOdW1iZXIsQy5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlKSxwLm1vZGlmaWVkTGluZVJhbmdlPW5ldyBEKHAubW9kaWZpZWRMaW5lUmFuZ2Uuc3RhcnRMaW5lTnVtYmVyLHcuZW5kTGluZU51bWJlckV4Y2x1c2l2ZSksTi5wdXNoKHApO3JldHVybn1jb25zdCBTPXttb2RpZmllZExpbmVSYW5nZTp3LG9yaWdpbmFsTGluZVJhbmdlOkN9O3UucHVzaChTKSxOLnB1c2goUyl9KSxtPU59aWYoIWkuaXNWYWxpZCgpKXJldHVybltdfXUuc29ydCh6aShidChkPT5kLm1vZGlmaWVkTGluZVJhbmdlLmxlbmd0aCx4dCkpKTtjb25zdCBjPW5ldyBoZSxmPW5ldyBoZTtmb3IoY29uc3QgZCBvZiB1KXtjb25zdCBtPWQubW9kaWZpZWRMaW5lUmFuZ2Uuc3RhcnRMaW5lTnVtYmVyLWQub3JpZ2luYWxMaW5lUmFuZ2Uuc3RhcnRMaW5lTnVtYmVyLGc9Yy5zdWJ0cmFjdEZyb20oZC5tb2RpZmllZExpbmVSYW5nZSksYj1mLnN1YnRyYWN0RnJvbShkLm9yaWdpbmFsTGluZVJhbmdlKS5nZXRXaXRoRGVsdGEobSksdz1nLmdldEludGVyc2VjdGlvbihiKTtmb3IoY29uc3QgTiBvZiB3LnJhbmdlcyl7aWYoTi5sZW5ndGg8Myljb250aW51ZTtjb25zdCBDPU4sUz1OLmRlbHRhKC1tKTtsLnB1c2gobmV3IHJlKFMsQykpLGMuYWRkUmFuZ2UoQyksZi5hZGRSYW5nZShTKX19bC5zb3J0KGJ0KGQ9PmQub3JpZ2luYWwuc3RhcnRMaW5lTnVtYmVyLHh0KSk7Y29uc3QgaD1uZXcgU3QoZSk7Zm9yKGxldCBkPTA7ZDxsLmxlbmd0aDtkKyspe2NvbnN0IG09bFtkXSxnPWguZmluZExhc3RNb25vdG9ub3VzKHY9PnYub3JpZ2luYWwuc3RhcnRMaW5lTnVtYmVyPD1tLm9yaWdpbmFsLnN0YXJ0TGluZU51bWJlciksYj1JZShlLHY9PnYubW9kaWZpZWQuc3RhcnRMaW5lTnVtYmVyPD1tLm1vZGlmaWVkLnN0YXJ0TGluZU51bWJlciksdz1NYXRoLm1heChtLm9yaWdpbmFsLnN0YXJ0TGluZU51bWJlci1nLm9yaWdpbmFsLnN0YXJ0TGluZU51bWJlcixtLm1vZGlmaWVkLnN0YXJ0TGluZU51bWJlci1iLm1vZGlmaWVkLnN0YXJ0TGluZU51bWJlciksTj1oLmZpbmRMYXN0TW9ub3Rvbm91cyh2PT52Lm9yaWdpbmFsLnN0YXJ0TGluZU51bWJlcjxtLm9yaWdpbmFsLmVuZExpbmVOdW1iZXJFeGNsdXNpdmUpLEM9SWUoZSx2PT52Lm1vZGlmaWVkLnN0YXJ0TGluZU51bWJlcjxtLm1vZGlmaWVkLmVuZExpbmVOdW1iZXJFeGNsdXNpdmUpLFM9TWF0aC5tYXgoTi5vcmlnaW5hbC5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlLW0ub3JpZ2luYWwuZW5kTGluZU51bWJlckV4Y2x1c2l2ZSxDLm1vZGlmaWVkLmVuZExpbmVOdW1iZXJFeGNsdXNpdmUtbS5tb2RpZmllZC5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlKTtsZXQgcDtmb3IocD0wO3A8dztwKyspe2NvbnN0IHY9bS5vcmlnaW5hbC5zdGFydExpbmVOdW1iZXItcC0xLEE9bS5tb2RpZmllZC5zdGFydExpbmVOdW1iZXItcC0xO2lmKHY+cy5sZW5ndGh8fEE+ci5sZW5ndGh8fGMuY29udGFpbnMoQSl8fGYuY29udGFpbnModil8fCF4cihzW3YtMV0scltBLTFdLGkpKWJyZWFrfXA+MCYmKGYuYWRkUmFuZ2UobmV3IEQobS5vcmlnaW5hbC5zdGFydExpbmVOdW1iZXItcCxtLm9yaWdpbmFsLnN0YXJ0TGluZU51bWJlcikpLGMuYWRkUmFuZ2UobmV3IEQobS5tb2RpZmllZC5zdGFydExpbmVOdW1iZXItcCxtLm1vZGlmaWVkLnN0YXJ0TGluZU51bWJlcikpKTtsZXQgeDtmb3IoeD0wO3g8Uzt4Kyspe2NvbnN0IHY9bS5vcmlnaW5hbC5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlK3gsQT1tLm1vZGlmaWVkLmVuZExpbmVOdW1iZXJFeGNsdXNpdmUreDtpZih2PnMubGVuZ3RofHxBPnIubGVuZ3RofHxjLmNvbnRhaW5zKEEpfHxmLmNvbnRhaW5zKHYpfHwheHIoc1t2LTFdLHJbQS0xXSxpKSlicmVha314PjAmJihmLmFkZFJhbmdlKG5ldyBEKG0ub3JpZ2luYWwuZW5kTGluZU51bWJlckV4Y2x1c2l2ZSxtLm9yaWdpbmFsLmVuZExpbmVOdW1iZXJFeGNsdXNpdmUreCkpLGMuYWRkUmFuZ2UobmV3IEQobS5tb2RpZmllZC5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlLG0ubW9kaWZpZWQuZW5kTGluZU51bWJlckV4Y2x1c2l2ZSt4KSkpLChwPjB8fHg+MCkmJihsW2RdPW5ldyByZShuZXcgRChtLm9yaWdpbmFsLnN0YXJ0TGluZU51bWJlci1wLG0ub3JpZ2luYWwuZW5kTGluZU51bWJlckV4Y2x1c2l2ZSt4KSxuZXcgRChtLm1vZGlmaWVkLnN0YXJ0TGluZU51bWJlci1wLG0ubW9kaWZpZWQuZW5kTGluZU51bWJlckV4Y2x1c2l2ZSt4KSkpfXJldHVybiBsfWZ1bmN0aW9uIHhyKGUsdCxuKXtpZihlLnRyaW0oKT09PXQudHJpbSgpKXJldHVybiEwO2lmKGUubGVuZ3RoPjMwMCYmdC5sZW5ndGg+MzAwKXJldHVybiExO2NvbnN0IHI9bmV3IGRyKCkuY29tcHV0ZShuZXcgQXQoW2VdLG5ldyBrKDEsMSwxLGUubGVuZ3RoKSwhMSksbmV3IEF0KFt0XSxuZXcgaygxLDEsMSx0Lmxlbmd0aCksITEpLG4pO2xldCBpPTA7Y29uc3QgbD1HLmludmVydChyLmRpZmZzLGUubGVuZ3RoKTtmb3IoY29uc3QgZiBvZiBsKWYuc2VxMVJhbmdlLmZvckVhY2goaD0+e2JuKGUuY2hhckNvZGVBdChoKSl8fGkrK30pO2Z1bmN0aW9uIG8oZil7bGV0IGg9MDtmb3IobGV0IGQ9MDtkPGUubGVuZ3RoO2QrKylibihmLmNoYXJDb2RlQXQoZCkpfHxoKys7cmV0dXJuIGh9Y29uc3QgdT1vKGUubGVuZ3RoPnQubGVuZ3RoP2U6dCk7cmV0dXJuIGkvdT4uNiYmdT4xMH1mdW5jdGlvbiBVMShlKXtpZihlLmxlbmd0aD09PTApcmV0dXJuIGU7ZS5zb3J0KGJ0KG49Pm4ub3JpZ2luYWwuc3RhcnRMaW5lTnVtYmVyLHh0KSk7Y29uc3QgdD1bZVswXV07Zm9yKGxldCBuPTE7bjxlLmxlbmd0aDtuKyspe2NvbnN0IHM9dFt0Lmxlbmd0aC0xXSxyPWVbbl0saT1yLm9yaWdpbmFsLnN0YXJ0TGluZU51bWJlci1zLm9yaWdpbmFsLmVuZExpbmVOdW1iZXJFeGNsdXNpdmUsbD1yLm1vZGlmaWVkLnN0YXJ0TGluZU51bWJlci1zLm1vZGlmaWVkLmVuZExpbmVOdW1iZXJFeGNsdXNpdmU7aWYoaT49MCYmbD49MCYmaStsPD0yKXt0W3QubGVuZ3RoLTFdPXMuam9pbihyKTtjb250aW51ZX10LnB1c2gocil9cmV0dXJuIHR9ZnVuY3Rpb24gSDEoZSx0KXtjb25zdCBuPW5ldyBTdChlKTtyZXR1cm4gdD10LmZpbHRlcihzPT57Y29uc3Qgcj1uLmZpbmRMYXN0TW9ub3Rvbm91cyhvPT5vLm9yaWdpbmFsLnN0YXJ0TGluZU51bWJlcjxzLm9yaWdpbmFsLmVuZExpbmVOdW1iZXJFeGNsdXNpdmUpfHxuZXcgcmUobmV3IEQoMSwxKSxuZXcgRCgxLDEpKSxpPUllKGUsbz0+by5tb2RpZmllZC5zdGFydExpbmVOdW1iZXI8cy5tb2RpZmllZC5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlKTtyZXR1cm4gciE9PWl9KSx0fWZ1bmN0aW9uIF9yKGUsdCxuKXtsZXQgcz1uO3JldHVybiBzPXByKGUsdCxzKSxzPXByKGUsdCxzKSxzPVcxKGUsdCxzKSxzfWZ1bmN0aW9uIHByKGUsdCxuKXtpZihuLmxlbmd0aD09PTApcmV0dXJuIG47Y29uc3Qgcz1bXTtzLnB1c2goblswXSk7Zm9yKGxldCBpPTE7aTxuLmxlbmd0aDtpKyspe2NvbnN0IGw9c1tzLmxlbmd0aC0xXTtsZXQgbz1uW2ldO2lmKG8uc2VxMVJhbmdlLmlzRW1wdHl8fG8uc2VxMlJhbmdlLmlzRW1wdHkpe2NvbnN0IHU9by5zZXExUmFuZ2Uuc3RhcnQtbC5zZXExUmFuZ2UuZW5kRXhjbHVzaXZlO2xldCBjO2ZvcihjPTE7Yzw9dSYmIShlLmdldEVsZW1lbnQoby5zZXExUmFuZ2Uuc3RhcnQtYykhPT1lLmdldEVsZW1lbnQoby5zZXExUmFuZ2UuZW5kRXhjbHVzaXZlLWMpfHx0LmdldEVsZW1lbnQoby5zZXEyUmFuZ2Uuc3RhcnQtYykhPT10LmdldEVsZW1lbnQoby5zZXEyUmFuZ2UuZW5kRXhjbHVzaXZlLWMpKTtjKyspO2lmKGMtLSxjPT09dSl7c1tzLmxlbmd0aC0xXT1uZXcgRyhuZXcgVihsLnNlcTFSYW5nZS5zdGFydCxvLnNlcTFSYW5nZS5lbmRFeGNsdXNpdmUtdSksbmV3IFYobC5zZXEyUmFuZ2Uuc3RhcnQsby5zZXEyUmFuZ2UuZW5kRXhjbHVzaXZlLXUpKTtjb250aW51ZX1vPW8uZGVsdGEoLWMpfXMucHVzaChvKX1jb25zdCByPVtdO2ZvcihsZXQgaT0wO2k8cy5sZW5ndGgtMTtpKyspe2NvbnN0IGw9c1tpKzFdO2xldCBvPXNbaV07aWYoby5zZXExUmFuZ2UuaXNFbXB0eXx8by5zZXEyUmFuZ2UuaXNFbXB0eSl7Y29uc3QgdT1sLnNlcTFSYW5nZS5zdGFydC1vLnNlcTFSYW5nZS5lbmRFeGNsdXNpdmU7bGV0IGM7Zm9yKGM9MDtjPHUmJiEoIWUuaXNTdHJvbmdseUVxdWFsKG8uc2VxMVJhbmdlLnN0YXJ0K2Msby5zZXExUmFuZ2UuZW5kRXhjbHVzaXZlK2MpfHwhdC5pc1N0cm9uZ2x5RXF1YWwoby5zZXEyUmFuZ2Uuc3RhcnQrYyxvLnNlcTJSYW5nZS5lbmRFeGNsdXNpdmUrYykpO2MrKyk7aWYoYz09PXUpe3NbaSsxXT1uZXcgRyhuZXcgVihvLnNlcTFSYW5nZS5zdGFydCt1LGwuc2VxMVJhbmdlLmVuZEV4Y2x1c2l2ZSksbmV3IFYoby5zZXEyUmFuZ2Uuc3RhcnQrdSxsLnNlcTJSYW5nZS5lbmRFeGNsdXNpdmUpKTtjb250aW51ZX1jPjAmJihvPW8uZGVsdGEoYykpfXIucHVzaChvKX1yZXR1cm4gcy5sZW5ndGg+MCYmci5wdXNoKHNbcy5sZW5ndGgtMV0pLHJ9ZnVuY3Rpb24gVzEoZSx0LG4pe2lmKCFlLmdldEJvdW5kYXJ5U2NvcmV8fCF0LmdldEJvdW5kYXJ5U2NvcmUpcmV0dXJuIG47Zm9yKGxldCBzPTA7czxuLmxlbmd0aDtzKyspe2NvbnN0IHI9cz4wP25bcy0xXTp2b2lkIDAsaT1uW3NdLGw9cysxPG4ubGVuZ3RoP25bcysxXTp2b2lkIDAsbz1uZXcgVihyP3Iuc2VxMVJhbmdlLmVuZEV4Y2x1c2l2ZSsxOjAsbD9sLnNlcTFSYW5nZS5zdGFydC0xOmUubGVuZ3RoKSx1PW5ldyBWKHI/ci5zZXEyUmFuZ2UuZW5kRXhjbHVzaXZlKzE6MCxsP2wuc2VxMlJhbmdlLnN0YXJ0LTE6dC5sZW5ndGgpO2kuc2VxMVJhbmdlLmlzRW1wdHk/bltzXT13cihpLGUsdCxvLHUpOmkuc2VxMlJhbmdlLmlzRW1wdHkmJihuW3NdPXdyKGkuc3dhcCgpLHQsZSx1LG8pLnN3YXAoKSl9cmV0dXJuIG59ZnVuY3Rpb24gd3IoZSx0LG4scyxyKXtsZXQgbD0xO2Zvcig7ZS5zZXExUmFuZ2Uuc3RhcnQtbD49cy5zdGFydCYmZS5zZXEyUmFuZ2Uuc3RhcnQtbD49ci5zdGFydCYmbi5pc1N0cm9uZ2x5RXF1YWwoZS5zZXEyUmFuZ2Uuc3RhcnQtbCxlLnNlcTJSYW5nZS5lbmRFeGNsdXNpdmUtbCkmJmw8MTAwOylsKys7bC0tO2xldCBvPTA7Zm9yKDtlLnNlcTFSYW5nZS5zdGFydCtvPHMuZW5kRXhjbHVzaXZlJiZlLnNlcTJSYW5nZS5lbmRFeGNsdXNpdmUrbzxyLmVuZEV4Y2x1c2l2ZSYmbi5pc1N0cm9uZ2x5RXF1YWwoZS5zZXEyUmFuZ2Uuc3RhcnQrbyxlLnNlcTJSYW5nZS5lbmRFeGNsdXNpdmUrbykmJm88MTAwOylvKys7aWYobD09PTAmJm89PT0wKXJldHVybiBlO2xldCB1PTAsYz0tMTtmb3IobGV0IGY9LWw7Zjw9bztmKyspe2NvbnN0IGg9ZS5zZXEyUmFuZ2Uuc3RhcnQrZixkPWUuc2VxMlJhbmdlLmVuZEV4Y2x1c2l2ZStmLG09ZS5zZXExUmFuZ2Uuc3RhcnQrZixnPXQuZ2V0Qm91bmRhcnlTY29yZShtKStuLmdldEJvdW5kYXJ5U2NvcmUoaCkrbi5nZXRCb3VuZGFyeVNjb3JlKGQpO2c+YyYmKGM9Zyx1PWYpfXJldHVybiBlLmRlbHRhKHUpfWZ1bmN0aW9uIHoxKGUsdCxuKXtjb25zdCBzPVtdO2Zvcihjb25zdCByIG9mIG4pe2NvbnN0IGk9c1tzLmxlbmd0aC0xXTtpZighaSl7cy5wdXNoKHIpO2NvbnRpbnVlfXIuc2VxMVJhbmdlLnN0YXJ0LWkuc2VxMVJhbmdlLmVuZEV4Y2x1c2l2ZTw9Mnx8ci5zZXEyUmFuZ2Uuc3RhcnQtaS5zZXEyUmFuZ2UuZW5kRXhjbHVzaXZlPD0yP3Nbcy5sZW5ndGgtMV09bmV3IEcoaS5zZXExUmFuZ2Uuam9pbihyLnNlcTFSYW5nZSksaS5zZXEyUmFuZ2Uuam9pbihyLnNlcTJSYW5nZSkpOnMucHVzaChyKX1yZXR1cm4gc31mdW5jdGlvbiAkMShlLHQsbil7Y29uc3Qgcz1HLmludmVydChuLGUubGVuZ3RoKSxyPVtdO2xldCBpPW5ldyBiZSgwLDApO2Z1bmN0aW9uIGwodSxjKXtpZih1Lm9mZnNldDE8aS5vZmZzZXQxfHx1Lm9mZnNldDI8aS5vZmZzZXQyKXJldHVybjtjb25zdCBmPWUuZmluZFdvcmRDb250YWluaW5nKHUub2Zmc2V0MSksaD10LmZpbmRXb3JkQ29udGFpbmluZyh1Lm9mZnNldDIpO2lmKCFmfHwhaClyZXR1cm47bGV0IGQ9bmV3IEcoZixoKTtjb25zdCBtPWQuaW50ZXJzZWN0KGMpO2xldCBnPW0uc2VxMVJhbmdlLmxlbmd0aCxiPW0uc2VxMlJhbmdlLmxlbmd0aDtmb3IoO3MubGVuZ3RoPjA7KXtjb25zdCB3PXNbMF07aWYoISh3LnNlcTFSYW5nZS5pbnRlcnNlY3RzKGQuc2VxMVJhbmdlKXx8dy5zZXEyUmFuZ2UuaW50ZXJzZWN0cyhkLnNlcTJSYW5nZSkpKWJyZWFrO2NvbnN0IEM9ZS5maW5kV29yZENvbnRhaW5pbmcody5zZXExUmFuZ2Uuc3RhcnQpLFM9dC5maW5kV29yZENvbnRhaW5pbmcody5zZXEyUmFuZ2Uuc3RhcnQpLHA9bmV3IEcoQyxTKSx4PXAuaW50ZXJzZWN0KHcpO2lmKGcrPXguc2VxMVJhbmdlLmxlbmd0aCxiKz14LnNlcTJSYW5nZS5sZW5ndGgsZD1kLmpvaW4ocCksZC5zZXExUmFuZ2UuZW5kRXhjbHVzaXZlPj13LnNlcTFSYW5nZS5lbmRFeGNsdXNpdmUpcy5zaGlmdCgpO2Vsc2UgYnJlYWt9ZytiPChkLnNlcTFSYW5nZS5sZW5ndGgrZC5zZXEyUmFuZ2UubGVuZ3RoKSoyLzMmJnIucHVzaChkKSxpPWQuZ2V0RW5kRXhjbHVzaXZlcygpfWZvcig7cy5sZW5ndGg+MDspe2NvbnN0IHU9cy5zaGlmdCgpO3Uuc2VxMVJhbmdlLmlzRW1wdHl8fChsKHUuZ2V0U3RhcnRzKCksdSksbCh1LmdldEVuZEV4Y2x1c2l2ZXMoKS5kZWx0YSgtMSksdSkpfXJldHVybiBHMShuLHIpfWZ1bmN0aW9uIEcxKGUsdCl7Y29uc3Qgbj1bXTtmb3IoO2UubGVuZ3RoPjB8fHQubGVuZ3RoPjA7KXtjb25zdCBzPWVbMF0scj10WzBdO2xldCBpO3MmJighcnx8cy5zZXExUmFuZ2Uuc3RhcnQ8ci5zZXExUmFuZ2Uuc3RhcnQpP2k9ZS5zaGlmdCgpOmk9dC5zaGlmdCgpLG4ubGVuZ3RoPjAmJm5bbi5sZW5ndGgtMV0uc2VxMVJhbmdlLmVuZEV4Y2x1c2l2ZT49aS5zZXExUmFuZ2Uuc3RhcnQ/bltuLmxlbmd0aC0xXT1uW24ubGVuZ3RoLTFdLmpvaW4oaSk6bi5wdXNoKGkpfXJldHVybiBufWZ1bmN0aW9uIE8xKGUsdCxuKXtsZXQgcz1uO2lmKHMubGVuZ3RoPT09MClyZXR1cm4gcztsZXQgcj0wLGk7ZG97aT0hMTtjb25zdCBsPVtzWzBdXTtmb3IobGV0IG89MTtvPHMubGVuZ3RoO28rKyl7bGV0IGY9ZnVuY3Rpb24oZCxtKXtjb25zdCBnPW5ldyBWKGMuc2VxMVJhbmdlLmVuZEV4Y2x1c2l2ZSx1LnNlcTFSYW5nZS5zdGFydCk7cmV0dXJuIGUuZ2V0VGV4dChnKS5yZXBsYWNlKC9ccy9nLCIiKS5sZW5ndGg8PTQmJihkLnNlcTFSYW5nZS5sZW5ndGgrZC5zZXEyUmFuZ2UubGVuZ3RoPjV8fG0uc2VxMVJhbmdlLmxlbmd0aCttLnNlcTJSYW5nZS5sZW5ndGg+NSl9O2NvbnN0IHU9c1tvXSxjPWxbbC5sZW5ndGgtMV07ZihjLHUpPyhpPSEwLGxbbC5sZW5ndGgtMV09bFtsLmxlbmd0aC0xXS5qb2luKHUpKTpsLnB1c2godSl9cz1sfXdoaWxlKHIrKzwxMCYmaSk7cmV0dXJuIHN9ZnVuY3Rpb24gajEoZSx0LG4pe2xldCBzPW47aWYocy5sZW5ndGg9PT0wKXJldHVybiBzO2xldCByPTAsaTtkb3tpPSExO2NvbnN0IG89W3NbMF1dO2ZvcihsZXQgdT0xO3U8cy5sZW5ndGg7dSsrKXtsZXQgaD1mdW5jdGlvbihtLGcpe2NvbnN0IGI9bmV3IFYoZi5zZXExUmFuZ2UuZW5kRXhjbHVzaXZlLGMuc2VxMVJhbmdlLnN0YXJ0KTtpZihlLmNvdW50TGluZXNJbihiKT41fHxiLmxlbmd0aD41MDApcmV0dXJuITE7Y29uc3QgTj1lLmdldFRleHQoYikudHJpbSgpO2lmKE4ubGVuZ3RoPjIwfHxOLnNwbGl0KC9cclxufFxyfFxuLykubGVuZ3RoPjEpcmV0dXJuITE7Y29uc3QgQz1lLmNvdW50TGluZXNJbihtLnNlcTFSYW5nZSksUz1tLnNlcTFSYW5nZS5sZW5ndGgscD10LmNvdW50TGluZXNJbihtLnNlcTJSYW5nZSkseD1tLnNlcTJSYW5nZS5sZW5ndGgsdj1lLmNvdW50TGluZXNJbihnLnNlcTFSYW5nZSksQT1nLnNlcTFSYW5nZS5sZW5ndGgseT10LmNvdW50TGluZXNJbihnLnNlcTJSYW5nZSksST1nLnNlcTJSYW5nZS5sZW5ndGgsWD0yKjQwKzUwO2Z1bmN0aW9uIEIoXyl7cmV0dXJuIE1hdGgubWluKF8sWCl9cmV0dXJuIE1hdGgucG93KE1hdGgucG93KEIoQyo0MCtTKSwxLjUpK01hdGgucG93KEIocCo0MCt4KSwxLjUpLDEuNSkrTWF0aC5wb3coTWF0aC5wb3coQih2KjQwK0EpLDEuNSkrTWF0aC5wb3coQih5KjQwK0kpLDEuNSksMS41KT4oWCoqMS41KSoqMS41KjEuM307Y29uc3QgYz1zW3VdLGY9b1tvLmxlbmd0aC0xXTtoKGYsYyk/KGk9ITAsb1tvLmxlbmd0aC0xXT1vW28ubGVuZ3RoLTFdLmpvaW4oYykpOm8ucHVzaChjKX1zPW99d2hpbGUocisrPDEwJiZpKTtjb25zdCBsPVtdO3JldHVybiBIaShzLChvLHUsYyk9PntsZXQgZj11O2Z1bmN0aW9uIGgoTil7cmV0dXJuIE4ubGVuZ3RoPjAmJk4udHJpbSgpLmxlbmd0aDw9MyYmdS5zZXExUmFuZ2UubGVuZ3RoK3Uuc2VxMlJhbmdlLmxlbmd0aD4xMDB9Y29uc3QgZD1lLmV4dGVuZFRvRnVsbExpbmVzKHUuc2VxMVJhbmdlKSxtPWUuZ2V0VGV4dChuZXcgVihkLnN0YXJ0LHUuc2VxMVJhbmdlLnN0YXJ0KSk7aChtKSYmKGY9Zi5kZWx0YVN0YXJ0KC1tLmxlbmd0aCkpO2NvbnN0IGc9ZS5nZXRUZXh0KG5ldyBWKHUuc2VxMVJhbmdlLmVuZEV4Y2x1c2l2ZSxkLmVuZEV4Y2x1c2l2ZSkpO2goZykmJihmPWYuZGVsdGFFbmQoZy5sZW5ndGgpKTtjb25zdCBiPUcuZnJvbU9mZnNldFBhaXJzKG8/by5nZXRFbmRFeGNsdXNpdmVzKCk6YmUuemVybyxjP2MuZ2V0U3RhcnRzKCk6YmUubWF4KSx3PWYuaW50ZXJzZWN0KGIpO2wubGVuZ3RoPjAmJncuZ2V0U3RhcnRzKCkuZXF1YWxzKGxbbC5sZW5ndGgtMV0uZ2V0RW5kRXhjbHVzaXZlcygpKT9sW2wubGVuZ3RoLTFdPWxbbC5sZW5ndGgtMV0uam9pbih3KTpsLnB1c2godyl9KSxsfWNsYXNzIExye2NvbnN0cnVjdG9yKHQsbil7dGhpcy50cmltbWVkSGFzaD10LHRoaXMubGluZXM9bn1nZXRFbGVtZW50KHQpe3JldHVybiB0aGlzLnRyaW1tZWRIYXNoW3RdfWdldCBsZW5ndGgoKXtyZXR1cm4gdGhpcy50cmltbWVkSGFzaC5sZW5ndGh9Z2V0Qm91bmRhcnlTY29yZSh0KXtjb25zdCBuPXQ9PT0wPzA6TnIodGhpcy5saW5lc1t0LTFdKSxzPXQ9PT10aGlzLmxpbmVzLmxlbmd0aD8wOk5yKHRoaXMubGluZXNbdF0pO3JldHVybiAxZTMtKG4rcyl9Z2V0VGV4dCh0KXtyZXR1cm4gdGhpcy5saW5lcy5zbGljZSh0LnN0YXJ0LHQuZW5kRXhjbHVzaXZlKS5qb2luKGAKYCl9aXNTdHJvbmdseUVxdWFsKHQsbil7cmV0dXJuIHRoaXMubGluZXNbdF09PT10aGlzLmxpbmVzW25dfX1mdW5jdGlvbiBOcihlKXtsZXQgdD0wO2Zvcig7dDxlLmxlbmd0aCYmKGUuY2hhckNvZGVBdCh0KT09PTMyfHxlLmNoYXJDb2RlQXQodCk9PT05KTspdCsrO3JldHVybiB0fWNsYXNzIFgxe2NvbnN0cnVjdG9yKCl7dGhpcy5keW5hbWljUHJvZ3JhbW1pbmdEaWZmaW5nPW5ldyBGMSx0aGlzLm15ZXJzRGlmZmluZ0FsZ29yaXRobT1uZXcgZHJ9Y29tcHV0ZURpZmYodCxuLHMpe2lmKHQubGVuZ3RoPD0xJiZCaSh0LG4sKHgsdik9Png9PT12KSlyZXR1cm4gbmV3IHZ0KFtdLFtdLCExKTtpZih0Lmxlbmd0aD09PTEmJnRbMF0ubGVuZ3RoPT09MHx8bi5sZW5ndGg9PT0xJiZuWzBdLmxlbmd0aD09PTApcmV0dXJuIG5ldyB2dChbbmV3IG1lKG5ldyBEKDEsdC5sZW5ndGgrMSksbmV3IEQoMSxuLmxlbmd0aCsxKSxbbmV3IHVlKG5ldyBrKDEsMSx0Lmxlbmd0aCx0W3QubGVuZ3RoLTFdLmxlbmd0aCsxKSxuZXcgaygxLDEsbi5sZW5ndGgsbltuLmxlbmd0aC0xXS5sZW5ndGgrMSkpXSldLFtdLCExKTtjb25zdCByPXMubWF4Q29tcHV0YXRpb25UaW1lTXM9PT0wP250Lmluc3RhbmNlOm5ldyBrMShzLm1heENvbXB1dGF0aW9uVGltZU1zKSxpPSFzLmlnbm9yZVRyaW1XaGl0ZXNwYWNlLGw9bmV3IE1hcDtmdW5jdGlvbiBvKHgpe2xldCB2PWwuZ2V0KHgpO3JldHVybiB2PT09dm9pZCAwJiYodj1sLnNpemUsbC5zZXQoeCx2KSksdn1jb25zdCB1PXQubWFwKHg9Pm8oeC50cmltKCkpKSxjPW4ubWFwKHg9Pm8oeC50cmltKCkpKSxmPW5ldyBMcih1LHQpLGg9bmV3IExyKGMsbiksZD1mLmxlbmd0aCtoLmxlbmd0aDwxNzAwP3RoaXMuZHluYW1pY1Byb2dyYW1taW5nRGlmZmluZy5jb21wdXRlKGYsaCxyLCh4LHYpPT50W3hdPT09blt2XT9uW3ZdLmxlbmd0aD09PTA/LjE6MStNYXRoLmxvZygxK25bdl0ubGVuZ3RoKTouOTkpOnRoaXMubXllcnNEaWZmaW5nQWxnb3JpdGhtLmNvbXB1dGUoZixoLHIpO2xldCBtPWQuZGlmZnMsZz1kLmhpdFRpbWVvdXQ7bT1fcihmLGgsbSksbT1PMShmLGgsbSk7Y29uc3QgYj1bXSx3PXg9PntpZihpKWZvcihsZXQgdj0wO3Y8eDt2Kyspe2NvbnN0IEE9Tit2LHk9Qyt2O2lmKHRbQV0hPT1uW3ldKXtjb25zdCBJPXRoaXMucmVmaW5lRGlmZih0LG4sbmV3IEcobmV3IFYoQSxBKzEpLG5ldyBWKHkseSsxKSkscixpKTtmb3IoY29uc3QgWCBvZiBJLm1hcHBpbmdzKWIucHVzaChYKTtJLmhpdFRpbWVvdXQmJihnPSEwKX19fTtsZXQgTj0wLEM9MDtmb3IoY29uc3QgeCBvZiBtKXtOdCgoKT0+eC5zZXExUmFuZ2Uuc3RhcnQtTj09PXguc2VxMlJhbmdlLnN0YXJ0LUMpO2NvbnN0IHY9eC5zZXExUmFuZ2Uuc3RhcnQtTjt3KHYpLE49eC5zZXExUmFuZ2UuZW5kRXhjbHVzaXZlLEM9eC5zZXEyUmFuZ2UuZW5kRXhjbHVzaXZlO2NvbnN0IEE9dGhpcy5yZWZpbmVEaWZmKHQsbix4LHIsaSk7QS5oaXRUaW1lb3V0JiYoZz0hMCk7Zm9yKGNvbnN0IHkgb2YgQS5tYXBwaW5ncyliLnB1c2goeSl9dyh0Lmxlbmd0aC1OKTtjb25zdCBTPXZyKGIsdCxuKTtsZXQgcD1bXTtyZXR1cm4gcy5jb21wdXRlTW92ZXMmJihwPXRoaXMuY29tcHV0ZU1vdmVzKFMsdCxuLHUsYyxyLGkpKSxOdCgoKT0+e2Z1bmN0aW9uIHgoQSx5KXtpZihBLmxpbmVOdW1iZXI8MXx8QS5saW5lTnVtYmVyPnkubGVuZ3RoKXJldHVybiExO2NvbnN0IEk9eVtBLmxpbmVOdW1iZXItMV07cmV0dXJuIShBLmNvbHVtbjwxfHxBLmNvbHVtbj5JLmxlbmd0aCsxKX1mdW5jdGlvbiB2KEEseSl7cmV0dXJuIShBLnN0YXJ0TGluZU51bWJlcjwxfHxBLnN0YXJ0TGluZU51bWJlcj55Lmxlbmd0aCsxfHxBLmVuZExpbmVOdW1iZXJFeGNsdXNpdmU8MXx8QS5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlPnkubGVuZ3RoKzEpfWZvcihjb25zdCBBIG9mIFMpe2lmKCFBLmlubmVyQ2hhbmdlcylyZXR1cm4hMTtmb3IoY29uc3QgeSBvZiBBLmlubmVyQ2hhbmdlcylpZighKHgoeS5tb2RpZmllZFJhbmdlLmdldFN0YXJ0UG9zaXRpb24oKSxuKSYmeCh5Lm1vZGlmaWVkUmFuZ2UuZ2V0RW5kUG9zaXRpb24oKSxuKSYmeCh5Lm9yaWdpbmFsUmFuZ2UuZ2V0U3RhcnRQb3NpdGlvbigpLHQpJiZ4KHkub3JpZ2luYWxSYW5nZS5nZXRFbmRQb3NpdGlvbigpLHQpKSlyZXR1cm4hMTtpZighdihBLm1vZGlmaWVkLG4pfHwhdihBLm9yaWdpbmFsLHQpKXJldHVybiExfXJldHVybiEwfSksbmV3IHZ0KFMscCxnKX1jb21wdXRlTW92ZXModCxuLHMscixpLGwsbyl7cmV0dXJuIFYxKHQsbixzLHIsaSxsKS5tYXAoZj0+e2NvbnN0IGg9dGhpcy5yZWZpbmVEaWZmKG4scyxuZXcgRyhmLm9yaWdpbmFsLnRvT2Zmc2V0UmFuZ2UoKSxmLm1vZGlmaWVkLnRvT2Zmc2V0UmFuZ2UoKSksbCxvKSxkPXZyKGgubWFwcGluZ3MsbixzLCEwKTtyZXR1cm4gbmV3IHYxKGYsZCl9KX1yZWZpbmVEaWZmKHQsbixzLHIsaSl7Y29uc3Qgbz1KMShzKS50b1JhbmdlTWFwcGluZzIodCxuKSx1PW5ldyBBdCh0LG8ub3JpZ2luYWxSYW5nZSxpKSxjPW5ldyBBdChuLG8ubW9kaWZpZWRSYW5nZSxpKSxmPXUubGVuZ3RoK2MubGVuZ3RoPDUwMD90aGlzLmR5bmFtaWNQcm9ncmFtbWluZ0RpZmZpbmcuY29tcHV0ZSh1LGMscik6dGhpcy5teWVyc0RpZmZpbmdBbGdvcml0aG0uY29tcHV0ZSh1LGMscik7bGV0IGg9Zi5kaWZmcztyZXR1cm4gaD1fcih1LGMsaCksaD0kMSh1LGMsaCksaD16MSh1LGMsaCksaD1qMSh1LGMsaCkse21hcHBpbmdzOmgubWFwKG09Pm5ldyB1ZSh1LnRyYW5zbGF0ZVJhbmdlKG0uc2VxMVJhbmdlKSxjLnRyYW5zbGF0ZVJhbmdlKG0uc2VxMlJhbmdlKSkpLGhpdFRpbWVvdXQ6Zi5oaXRUaW1lb3V0fX19ZnVuY3Rpb24gdnIoZSx0LG4scz0hMSl7Y29uc3Qgcj1bXTtmb3IoY29uc3QgaSBvZiBxaShlLm1hcChsPT5RMShsLHQsbikpLChsLG8pPT5sLm9yaWdpbmFsLm92ZXJsYXBPclRvdWNoKG8ub3JpZ2luYWwpfHxsLm1vZGlmaWVkLm92ZXJsYXBPclRvdWNoKG8ubW9kaWZpZWQpKSl7Y29uc3QgbD1pWzBdLG89aVtpLmxlbmd0aC0xXTtyLnB1c2gobmV3IG1lKGwub3JpZ2luYWwuam9pbihvLm9yaWdpbmFsKSxsLm1vZGlmaWVkLmpvaW4oby5tb2RpZmllZCksaS5tYXAodT0+dS5pbm5lckNoYW5nZXNbMF0pKSl9cmV0dXJuIE50KCgpPT4hcyYmci5sZW5ndGg+MCYmKHJbMF0ubW9kaWZpZWQuc3RhcnRMaW5lTnVtYmVyIT09clswXS5vcmlnaW5hbC5zdGFydExpbmVOdW1iZXJ8fG4ubGVuZ3RoLXJbci5sZW5ndGgtMV0ubW9kaWZpZWQuZW5kTGluZU51bWJlckV4Y2x1c2l2ZSE9PXQubGVuZ3RoLXJbci5sZW5ndGgtMV0ub3JpZ2luYWwuZW5kTGluZU51bWJlckV4Y2x1c2l2ZSk/ITE6aXIociwoaSxsKT0+bC5vcmlnaW5hbC5zdGFydExpbmVOdW1iZXItaS5vcmlnaW5hbC5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlPT09bC5tb2RpZmllZC5zdGFydExpbmVOdW1iZXItaS5tb2RpZmllZC5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlJiZpLm9yaWdpbmFsLmVuZExpbmVOdW1iZXJFeGNsdXNpdmU8bC5vcmlnaW5hbC5zdGFydExpbmVOdW1iZXImJmkubW9kaWZpZWQuZW5kTGluZU51bWJlckV4Y2x1c2l2ZTxsLm1vZGlmaWVkLnN0YXJ0TGluZU51bWJlcikpLHJ9ZnVuY3Rpb24gUTEoZSx0LG4pe2xldCBzPTAscj0wO2UubW9kaWZpZWRSYW5nZS5lbmRDb2x1bW49PT0xJiZlLm9yaWdpbmFsUmFuZ2UuZW5kQ29sdW1uPT09MSYmZS5vcmlnaW5hbFJhbmdlLnN0YXJ0TGluZU51bWJlcitzPD1lLm9yaWdpbmFsUmFuZ2UuZW5kTGluZU51bWJlciYmZS5tb2RpZmllZFJhbmdlLnN0YXJ0TGluZU51bWJlcitzPD1lLm1vZGlmaWVkUmFuZ2UuZW5kTGluZU51bWJlciYmKHI9LTEpLGUubW9kaWZpZWRSYW5nZS5zdGFydENvbHVtbi0xPj1uW2UubW9kaWZpZWRSYW5nZS5zdGFydExpbmVOdW1iZXItMV0ubGVuZ3RoJiZlLm9yaWdpbmFsUmFuZ2Uuc3RhcnRDb2x1bW4tMT49dFtlLm9yaWdpbmFsUmFuZ2Uuc3RhcnRMaW5lTnVtYmVyLTFdLmxlbmd0aCYmZS5vcmlnaW5hbFJhbmdlLnN0YXJ0TGluZU51bWJlcjw9ZS5vcmlnaW5hbFJhbmdlLmVuZExpbmVOdW1iZXIrciYmZS5tb2RpZmllZFJhbmdlLnN0YXJ0TGluZU51bWJlcjw9ZS5tb2RpZmllZFJhbmdlLmVuZExpbmVOdW1iZXIrciYmKHM9MSk7Y29uc3QgaT1uZXcgRChlLm9yaWdpbmFsUmFuZ2Uuc3RhcnRMaW5lTnVtYmVyK3MsZS5vcmlnaW5hbFJhbmdlLmVuZExpbmVOdW1iZXIrMStyKSxsPW5ldyBEKGUubW9kaWZpZWRSYW5nZS5zdGFydExpbmVOdW1iZXIrcyxlLm1vZGlmaWVkUmFuZ2UuZW5kTGluZU51bWJlcisxK3IpO3JldHVybiBuZXcgbWUoaSxsLFtlXSl9ZnVuY3Rpb24gSjEoZSl7cmV0dXJuIG5ldyByZShuZXcgRChlLnNlcTFSYW5nZS5zdGFydCsxLGUuc2VxMVJhbmdlLmVuZEV4Y2x1c2l2ZSsxKSxuZXcgRChlLnNlcTJSYW5nZS5zdGFydCsxLGUuc2VxMlJhbmdlLmVuZEV4Y2x1c2l2ZSsxKSl9Y29uc3QgU3I9e2dldExlZ2FjeTooKT0+bmV3IFIxLGdldERlZmF1bHQ6KCk9Pm5ldyBYMX07ZnVuY3Rpb24gdmUoZSx0KXtjb25zdCBuPU1hdGgucG93KDEwLHQpO3JldHVybiBNYXRoLnJvdW5kKGUqbikvbn1jbGFzcyBqe2NvbnN0cnVjdG9yKHQsbixzLHI9MSl7dGhpcy5fcmdiYUJyYW5kPXZvaWQgMCx0aGlzLnI9TWF0aC5taW4oMjU1LE1hdGgubWF4KDAsdCkpfDAsdGhpcy5nPU1hdGgubWluKDI1NSxNYXRoLm1heCgwLG4pKXwwLHRoaXMuYj1NYXRoLm1pbigyNTUsTWF0aC5tYXgoMCxzKSl8MCx0aGlzLmE9dmUoTWF0aC5tYXgoTWF0aC5taW4oMSxyKSwwKSwzKX1zdGF0aWMgZXF1YWxzKHQsbil7cmV0dXJuIHQucj09PW4uciYmdC5nPT09bi5nJiZ0LmI9PT1uLmImJnQuYT09PW4uYX19Y2xhc3MgaWV7Y29uc3RydWN0b3IodCxuLHMscil7dGhpcy5faHNsYUJyYW5kPXZvaWQgMCx0aGlzLmg9TWF0aC5tYXgoTWF0aC5taW4oMzYwLHQpLDApfDAsdGhpcy5zPXZlKE1hdGgubWF4KE1hdGgubWluKDEsbiksMCksMyksdGhpcy5sPXZlKE1hdGgubWF4KE1hdGgubWluKDEscyksMCksMyksdGhpcy5hPXZlKE1hdGgubWF4KE1hdGgubWluKDEsciksMCksMyl9c3RhdGljIGVxdWFscyh0LG4pe3JldHVybiB0Lmg9PT1uLmgmJnQucz09PW4ucyYmdC5sPT09bi5sJiZ0LmE9PT1uLmF9c3RhdGljIGZyb21SR0JBKHQpe2NvbnN0IG49dC5yLzI1NSxzPXQuZy8yNTUscj10LmIvMjU1LGk9dC5hLGw9TWF0aC5tYXgobixzLHIpLG89TWF0aC5taW4obixzLHIpO2xldCB1PTAsYz0wO2NvbnN0IGY9KG8rbCkvMixoPWwtbztpZihoPjApe3N3aXRjaChjPU1hdGgubWluKGY8PS41P2gvKDIqZik6aC8oMi0yKmYpLDEpLGwpe2Nhc2Ugbjp1PShzLXIpL2grKHM8cj82OjApO2JyZWFrO2Nhc2Ugczp1PShyLW4pL2grMjticmVhaztjYXNlIHI6dT0obi1zKS9oKzQ7YnJlYWt9dSo9NjAsdT1NYXRoLnJvdW5kKHUpfXJldHVybiBuZXcgaWUodSxjLGYsaSl9c3RhdGljIF9odWUycmdiKHQsbixzKXtyZXR1cm4gczwwJiYocys9MSkscz4xJiYocy09MSksczwxLzY/dCsobi10KSo2KnM6czwxLzI/bjpzPDIvMz90KyhuLXQpKigyLzMtcykqNjp0fXN0YXRpYyB0b1JHQkEodCl7Y29uc3Qgbj10LmgvMzYwLHtzLGw6cixhOml9PXQ7bGV0IGwsbyx1O2lmKHM9PT0wKWw9bz11PXI7ZWxzZXtjb25zdCBjPXI8LjU/ciooMStzKTpyK3MtcipzLGY9MipyLWM7bD1pZS5faHVlMnJnYihmLGMsbisxLzMpLG89aWUuX2h1ZTJyZ2IoZixjLG4pLHU9aWUuX2h1ZTJyZ2IoZixjLG4tMS8zKX1yZXR1cm4gbmV3IGooTWF0aC5yb3VuZChsKjI1NSksTWF0aC5yb3VuZChvKjI1NSksTWF0aC5yb3VuZCh1KjI1NSksaSl9fWNsYXNzIFVle2NvbnN0cnVjdG9yKHQsbixzLHIpe3RoaXMuX2hzdmFCcmFuZD12b2lkIDAsdGhpcy5oPU1hdGgubWF4KE1hdGgubWluKDM2MCx0KSwwKXwwLHRoaXMucz12ZShNYXRoLm1heChNYXRoLm1pbigxLG4pLDApLDMpLHRoaXMudj12ZShNYXRoLm1heChNYXRoLm1pbigxLHMpLDApLDMpLHRoaXMuYT12ZShNYXRoLm1heChNYXRoLm1pbigxLHIpLDApLDMpfXN0YXRpYyBlcXVhbHModCxuKXtyZXR1cm4gdC5oPT09bi5oJiZ0LnM9PT1uLnMmJnQudj09PW4udiYmdC5hPT09bi5hfXN0YXRpYyBmcm9tUkdCQSh0KXtjb25zdCBuPXQuci8yNTUscz10LmcvMjU1LHI9dC5iLzI1NSxpPU1hdGgubWF4KG4scyxyKSxsPU1hdGgubWluKG4scyxyKSxvPWktbCx1PWk9PT0wPzA6by9pO2xldCBjO3JldHVybiBvPT09MD9jPTA6aT09PW4/Yz0oKHMtcikvbyU2KzYpJTY6aT09PXM/Yz0oci1uKS9vKzI6Yz0obi1zKS9vKzQsbmV3IFVlKE1hdGgucm91bmQoYyo2MCksdSxpLHQuYSl9c3RhdGljIHRvUkdCQSh0KXtjb25zdHtoOm4scyx2OnIsYTppfT10LGw9cipzLG89bCooMS1NYXRoLmFicyhuLzYwJTItMSkpLHU9ci1sO2xldFtjLGYsaF09WzAsMCwwXTtyZXR1cm4gbjw2MD8oYz1sLGY9byk6bjwxMjA/KGM9byxmPWwpOm48MTgwPyhmPWwsaD1vKTpuPDI0MD8oZj1vLGg9bCk6bjwzMDA/KGM9byxoPWwpOm48PTM2MCYmKGM9bCxoPW8pLGM9TWF0aC5yb3VuZCgoYyt1KSoyNTUpLGY9TWF0aC5yb3VuZCgoZit1KSoyNTUpLGg9TWF0aC5yb3VuZCgoaCt1KSoyNTUpLG5ldyBqKGMsZixoLGkpfX1jb25zdCBVPWNsYXNzIFV7c3RhdGljIGZyb21IZXgodCl7cmV0dXJuIFUuRm9ybWF0LkNTUy5wYXJzZUhleCh0KXx8VS5yZWR9c3RhdGljIGVxdWFscyh0LG4pe3JldHVybiF0JiYhbj8hMDohdHx8IW4/ITE6dC5lcXVhbHMobil9Z2V0IGhzbGEoKXtyZXR1cm4gdGhpcy5faHNsYT90aGlzLl9oc2xhOmllLmZyb21SR0JBKHRoaXMucmdiYSl9Z2V0IGhzdmEoKXtyZXR1cm4gdGhpcy5faHN2YT90aGlzLl9oc3ZhOlVlLmZyb21SR0JBKHRoaXMucmdiYSl9Y29uc3RydWN0b3IodCl7aWYodClpZih0IGluc3RhbmNlb2Ygail0aGlzLnJnYmE9dDtlbHNlIGlmKHQgaW5zdGFuY2VvZiBpZSl0aGlzLl9oc2xhPXQsdGhpcy5yZ2JhPWllLnRvUkdCQSh0KTtlbHNlIGlmKHQgaW5zdGFuY2VvZiBVZSl0aGlzLl9oc3ZhPXQsdGhpcy5yZ2JhPVVlLnRvUkdCQSh0KTtlbHNlIHRocm93IG5ldyBFcnJvcigiSW52YWxpZCBjb2xvciBjdG9yIGFyZ3VtZW50Iik7ZWxzZSB0aHJvdyBuZXcgRXJyb3IoIkNvbG9yIG5lZWRzIGEgdmFsdWUiKX1lcXVhbHModCl7cmV0dXJuISF0JiZqLmVxdWFscyh0aGlzLnJnYmEsdC5yZ2JhKSYmaWUuZXF1YWxzKHRoaXMuaHNsYSx0LmhzbGEpJiZVZS5lcXVhbHModGhpcy5oc3ZhLHQuaHN2YSl9Z2V0UmVsYXRpdmVMdW1pbmFuY2UoKXtjb25zdCB0PVUuX3JlbGF0aXZlTHVtaW5hbmNlRm9yQ29tcG9uZW50KHRoaXMucmdiYS5yKSxuPVUuX3JlbGF0aXZlTHVtaW5hbmNlRm9yQ29tcG9uZW50KHRoaXMucmdiYS5nKSxzPVUuX3JlbGF0aXZlTHVtaW5hbmNlRm9yQ29tcG9uZW50KHRoaXMucmdiYS5iKSxyPS4yMTI2KnQrLjcxNTIqbisuMDcyMipzO3JldHVybiB2ZShyLDQpfXN0YXRpYyBfcmVsYXRpdmVMdW1pbmFuY2VGb3JDb21wb25lbnQodCl7Y29uc3Qgbj10LzI1NTtyZXR1cm4gbjw9LjAzOTI4P24vMTIuOTI6TWF0aC5wb3coKG4rLjA1NSkvMS4wNTUsMi40KX1pc0xpZ2h0ZXIoKXtyZXR1cm4odGhpcy5yZ2JhLnIqMjk5K3RoaXMucmdiYS5nKjU4Nyt0aGlzLnJnYmEuYioxMTQpLzFlMz49MTI4fWlzTGlnaHRlclRoYW4odCl7Y29uc3Qgbj10aGlzLmdldFJlbGF0aXZlTHVtaW5hbmNlKCkscz10LmdldFJlbGF0aXZlTHVtaW5hbmNlKCk7cmV0dXJuIG4+c31pc0RhcmtlclRoYW4odCl7Y29uc3Qgbj10aGlzLmdldFJlbGF0aXZlTHVtaW5hbmNlKCkscz10LmdldFJlbGF0aXZlTHVtaW5hbmNlKCk7cmV0dXJuIG48c31saWdodGVuKHQpe3JldHVybiBuZXcgVShuZXcgaWUodGhpcy5oc2xhLmgsdGhpcy5oc2xhLnMsdGhpcy5oc2xhLmwrdGhpcy5oc2xhLmwqdCx0aGlzLmhzbGEuYSkpfWRhcmtlbih0KXtyZXR1cm4gbmV3IFUobmV3IGllKHRoaXMuaHNsYS5oLHRoaXMuaHNsYS5zLHRoaXMuaHNsYS5sLXRoaXMuaHNsYS5sKnQsdGhpcy5oc2xhLmEpKX10cmFuc3BhcmVudCh0KXtjb25zdHtyOm4sZzpzLGI6cixhOml9PXRoaXMucmdiYTtyZXR1cm4gbmV3IFUobmV3IGoobixzLHIsaSp0KSl9aXNUcmFuc3BhcmVudCgpe3JldHVybiB0aGlzLnJnYmEuYT09PTB9aXNPcGFxdWUoKXtyZXR1cm4gdGhpcy5yZ2JhLmE9PT0xfW9wcG9zaXRlKCl7cmV0dXJuIG5ldyBVKG5ldyBqKDI1NS10aGlzLnJnYmEuciwyNTUtdGhpcy5yZ2JhLmcsMjU1LXRoaXMucmdiYS5iLHRoaXMucmdiYS5hKSl9bWFrZU9wYXF1ZSh0KXtpZih0aGlzLmlzT3BhcXVlKCl8fHQucmdiYS5hIT09MSlyZXR1cm4gdGhpcztjb25zdHtyOm4sZzpzLGI6cixhOml9PXRoaXMucmdiYTtyZXR1cm4gbmV3IFUobmV3IGoodC5yZ2JhLnItaSoodC5yZ2JhLnItbiksdC5yZ2JhLmctaSoodC5yZ2JhLmctcyksdC5yZ2JhLmItaSoodC5yZ2JhLmItciksMSkpfXRvU3RyaW5nKCl7cmV0dXJuIHRoaXMuX3RvU3RyaW5nfHwodGhpcy5fdG9TdHJpbmc9VS5Gb3JtYXQuQ1NTLmZvcm1hdCh0aGlzKSksdGhpcy5fdG9TdHJpbmd9c3RhdGljIGdldExpZ2h0ZXJDb2xvcih0LG4scyl7aWYodC5pc0xpZ2h0ZXJUaGFuKG4pKXJldHVybiB0O3M9c3x8LjU7Y29uc3Qgcj10LmdldFJlbGF0aXZlTHVtaW5hbmNlKCksaT1uLmdldFJlbGF0aXZlTHVtaW5hbmNlKCk7cmV0dXJuIHM9cyooaS1yKS9pLHQubGlnaHRlbihzKX1zdGF0aWMgZ2V0RGFya2VyQ29sb3IodCxuLHMpe2lmKHQuaXNEYXJrZXJUaGFuKG4pKXJldHVybiB0O3M9c3x8LjU7Y29uc3Qgcj10LmdldFJlbGF0aXZlTHVtaW5hbmNlKCksaT1uLmdldFJlbGF0aXZlTHVtaW5hbmNlKCk7cmV0dXJuIHM9cyooci1pKS9yLHQuZGFya2VuKHMpfX07VS53aGl0ZT1uZXcgVShuZXcgaigyNTUsMjU1LDI1NSwxKSksVS5ibGFjaz1uZXcgVShuZXcgaigwLDAsMCwxKSksVS5yZWQ9bmV3IFUobmV3IGooMjU1LDAsMCwxKSksVS5ibHVlPW5ldyBVKG5ldyBqKDAsMCwyNTUsMSkpLFUuZ3JlZW49bmV3IFUobmV3IGooMCwyNTUsMCwxKSksVS5jeWFuPW5ldyBVKG5ldyBqKDAsMjU1LDI1NSwxKSksVS5saWdodGdyZXk9bmV3IFUobmV3IGooMjExLDIxMSwyMTEsMSkpLFUudHJhbnNwYXJlbnQ9bmV3IFUobmV3IGooMCwwLDAsMCkpO2xldCBIZT1VOyhmdW5jdGlvbihlKXsoZnVuY3Rpb24odCl7KGZ1bmN0aW9uKG4pe2Z1bmN0aW9uIHMobSl7cmV0dXJuIG0ucmdiYS5hPT09MT9gcmdiKCR7bS5yZ2JhLnJ9LCAke20ucmdiYS5nfSwgJHttLnJnYmEuYn0pYDplLkZvcm1hdC5DU1MuZm9ybWF0UkdCQShtKX1uLmZvcm1hdFJHQj1zO2Z1bmN0aW9uIHIobSl7cmV0dXJuYHJnYmEoJHttLnJnYmEucn0sICR7bS5yZ2JhLmd9LCAke20ucmdiYS5ifSwgJHsrbS5yZ2JhLmEudG9GaXhlZCgyKX0pYH1uLmZvcm1hdFJHQkE9cjtmdW5jdGlvbiBpKG0pe3JldHVybiBtLmhzbGEuYT09PTE/YGhzbCgke20uaHNsYS5ofSwgJHsobS5oc2xhLnMqMTAwKS50b0ZpeGVkKDIpfSUsICR7KG0uaHNsYS5sKjEwMCkudG9GaXhlZCgyKX0lKWA6ZS5Gb3JtYXQuQ1NTLmZvcm1hdEhTTEEobSl9bi5mb3JtYXRIU0w9aTtmdW5jdGlvbiBsKG0pe3JldHVybmBoc2xhKCR7bS5oc2xhLmh9LCAkeyhtLmhzbGEucyoxMDApLnRvRml4ZWQoMil9JSwgJHsobS5oc2xhLmwqMTAwKS50b0ZpeGVkKDIpfSUsICR7bS5oc2xhLmEudG9GaXhlZCgyKX0pYH1uLmZvcm1hdEhTTEE9bDtmdW5jdGlvbiBvKG0pe2NvbnN0IGc9bS50b1N0cmluZygxNik7cmV0dXJuIGcubGVuZ3RoIT09Mj8iMCIrZzpnfWZ1bmN0aW9uIHUobSl7cmV0dXJuYCMke28obS5yZ2JhLnIpfSR7byhtLnJnYmEuZyl9JHtvKG0ucmdiYS5iKX1gfW4uZm9ybWF0SGV4PXU7ZnVuY3Rpb24gYyhtLGc9ITEpe3JldHVybiBnJiZtLnJnYmEuYT09PTE/ZS5Gb3JtYXQuQ1NTLmZvcm1hdEhleChtKTpgIyR7byhtLnJnYmEucil9JHtvKG0ucmdiYS5nKX0ke28obS5yZ2JhLmIpfSR7byhNYXRoLnJvdW5kKG0ucmdiYS5hKjI1NSkpfWB9bi5mb3JtYXRIZXhBPWM7ZnVuY3Rpb24gZihtKXtyZXR1cm4gbS5pc09wYXF1ZSgpP2UuRm9ybWF0LkNTUy5mb3JtYXRIZXgobSk6ZS5Gb3JtYXQuQ1NTLmZvcm1hdFJHQkEobSl9bi5mb3JtYXQ9ZjtmdW5jdGlvbiBoKG0pe2NvbnN0IGc9bS5sZW5ndGg7aWYoZz09PTB8fG0uY2hhckNvZGVBdCgwKSE9PTM1KXJldHVybiBudWxsO2lmKGc9PT03KXtjb25zdCBiPTE2KmQobS5jaGFyQ29kZUF0KDEpKStkKG0uY2hhckNvZGVBdCgyKSksdz0xNipkKG0uY2hhckNvZGVBdCgzKSkrZChtLmNoYXJDb2RlQXQoNCkpLE49MTYqZChtLmNoYXJDb2RlQXQoNSkpK2QobS5jaGFyQ29kZUF0KDYpKTtyZXR1cm4gbmV3IGUobmV3IGooYix3LE4sMSkpfWlmKGc9PT05KXtjb25zdCBiPTE2KmQobS5jaGFyQ29kZUF0KDEpKStkKG0uY2hhckNvZGVBdCgyKSksdz0xNipkKG0uY2hhckNvZGVBdCgzKSkrZChtLmNoYXJDb2RlQXQoNCkpLE49MTYqZChtLmNoYXJDb2RlQXQoNSkpK2QobS5jaGFyQ29kZUF0KDYpKSxDPTE2KmQobS5jaGFyQ29kZUF0KDcpKStkKG0uY2hhckNvZGVBdCg4KSk7cmV0dXJuIG5ldyBlKG5ldyBqKGIsdyxOLEMvMjU1KSl9aWYoZz09PTQpe2NvbnN0IGI9ZChtLmNoYXJDb2RlQXQoMSkpLHc9ZChtLmNoYXJDb2RlQXQoMikpLE49ZChtLmNoYXJDb2RlQXQoMykpO3JldHVybiBuZXcgZShuZXcgaigxNipiK2IsMTYqdyt3LDE2Kk4rTikpfWlmKGc9PT01KXtjb25zdCBiPWQobS5jaGFyQ29kZUF0KDEpKSx3PWQobS5jaGFyQ29kZUF0KDIpKSxOPWQobS5jaGFyQ29kZUF0KDMpKSxDPWQobS5jaGFyQ29kZUF0KDQpKTtyZXR1cm4gbmV3IGUobmV3IGooMTYqYitiLDE2KncrdywxNipOK04sKDE2KkMrQykvMjU1KSl9cmV0dXJuIG51bGx9bi5wYXJzZUhleD1oO2Z1bmN0aW9uIGQobSl7c3dpdGNoKG0pe2Nhc2UgNDg6cmV0dXJuIDA7Y2FzZSA0OTpyZXR1cm4gMTtjYXNlIDUwOnJldHVybiAyO2Nhc2UgNTE6cmV0dXJuIDM7Y2FzZSA1MjpyZXR1cm4gNDtjYXNlIDUzOnJldHVybiA1O2Nhc2UgNTQ6cmV0dXJuIDY7Y2FzZSA1NTpyZXR1cm4gNztjYXNlIDU2OnJldHVybiA4O2Nhc2UgNTc6cmV0dXJuIDk7Y2FzZSA5NzpyZXR1cm4gMTA7Y2FzZSA2NTpyZXR1cm4gMTA7Y2FzZSA5ODpyZXR1cm4gMTE7Y2FzZSA2NjpyZXR1cm4gMTE7Y2FzZSA5OTpyZXR1cm4gMTI7Y2FzZSA2NzpyZXR1cm4gMTI7Y2FzZSAxMDA6cmV0dXJuIDEzO2Nhc2UgNjg6cmV0dXJuIDEzO2Nhc2UgMTAxOnJldHVybiAxNDtjYXNlIDY5OnJldHVybiAxNDtjYXNlIDEwMjpyZXR1cm4gMTU7Y2FzZSA3MDpyZXR1cm4gMTV9cmV0dXJuIDB9fSkodC5DU1N8fCh0LkNTUz17fSkpfSkoZS5Gb3JtYXR8fChlLkZvcm1hdD17fSkpfSkoSGV8fChIZT17fSkpO2Z1bmN0aW9uIENyKGUpe2NvbnN0IHQ9W107Zm9yKGNvbnN0IG4gb2YgZSl7Y29uc3Qgcz1OdW1iZXIobik7KHN8fHM9PT0wJiZuLnJlcGxhY2UoL1xzL2csIiIpIT09IiIpJiZ0LnB1c2gocyl9cmV0dXJuIHR9ZnVuY3Rpb24gX24oZSx0LG4scyl7cmV0dXJue3JlZDplLzI1NSxibHVlOm4vMjU1LGdyZWVuOnQvMjU1LGFscGhhOnN9fWZ1bmN0aW9uIHN0KGUsdCl7Y29uc3Qgbj10LmluZGV4LHM9dFswXS5sZW5ndGg7aWYoIW4pcmV0dXJuO2NvbnN0IHI9ZS5wb3NpdGlvbkF0KG4pO3JldHVybntzdGFydExpbmVOdW1iZXI6ci5saW5lTnVtYmVyLHN0YXJ0Q29sdW1uOnIuY29sdW1uLGVuZExpbmVOdW1iZXI6ci5saW5lTnVtYmVyLGVuZENvbHVtbjpyLmNvbHVtbitzfX1mdW5jdGlvbiBZMShlLHQpe2lmKCFlKXJldHVybjtjb25zdCBuPUhlLkZvcm1hdC5DU1MucGFyc2VIZXgodCk7aWYobilyZXR1cm57cmFuZ2U6ZSxjb2xvcjpfbihuLnJnYmEucixuLnJnYmEuZyxuLnJnYmEuYixuLnJnYmEuYSl9fWZ1bmN0aW9uIEFyKGUsdCxuKXtpZighZXx8dC5sZW5ndGghPT0xKXJldHVybjtjb25zdCByPXRbMF0udmFsdWVzKCksaT1DcihyKTtyZXR1cm57cmFuZ2U6ZSxjb2xvcjpfbihpWzBdLGlbMV0saVsyXSxuP2lbM106MSl9fWZ1bmN0aW9uIFJyKGUsdCxuKXtpZighZXx8dC5sZW5ndGghPT0xKXJldHVybjtjb25zdCByPXRbMF0udmFsdWVzKCksaT1DcihyKSxsPW5ldyBIZShuZXcgaWUoaVswXSxpWzFdLzEwMCxpWzJdLzEwMCxuP2lbM106MSkpO3JldHVybntyYW5nZTplLGNvbG9yOl9uKGwucmdiYS5yLGwucmdiYS5nLGwucmdiYS5iLGwucmdiYS5hKX19ZnVuY3Rpb24gcnQoZSx0KXtyZXR1cm4gdHlwZW9mIGU9PSJzdHJpbmciP1suLi5lLm1hdGNoQWxsKHQpXTplLmZpbmRNYXRjaGVzKHQpfWZ1bmN0aW9uIFoxKGUpe2NvbnN0IHQ9W10scz1ydChlLC9cYihyZ2J8cmdiYXxoc2x8aHNsYSkoXChbMC05XHMsLlwlXSpcKSl8KCMpKFtBLUZhLWYwLTldezN9KVxifCgjKShbQS1GYS1mMC05XXs0fSlcYnwoIykoW0EtRmEtZjAtOV17Nn0pXGJ8KCMpKFtBLUZhLWYwLTldezh9KVxiL2dtKTtpZihzLmxlbmd0aD4wKWZvcihjb25zdCByIG9mIHMpe2NvbnN0IGk9ci5maWx0ZXIoYz0+YyE9PXZvaWQgMCksbD1pWzFdLG89aVsyXTtpZighbyljb250aW51ZTtsZXQgdTtpZihsPT09InJnYiIpe2NvbnN0IGM9L15cKFxzKigyNVswLTVdfDJbMC00XVswLTldfDFbMC05XXsyfXxbMS05XVswLTldfFswLTldKVxzKixccyooMjVbMC01XXwyWzAtNF1bMC05XXwxWzAtOV17Mn18WzEtOV1bMC05XXxbMC05XSlccyosXHMqKDI1WzAtNV18MlswLTRdWzAtOV18MVswLTldezJ9fFsxLTldWzAtOV18WzAtOV0pXHMqXCkkL2dtO3U9QXIoc3QoZSxyKSxydChvLGMpLCExKX1lbHNlIGlmKGw9PT0icmdiYSIpe2NvbnN0IGM9L15cKFxzKigyNVswLTVdfDJbMC00XVswLTldfDFbMC05XXsyfXxbMS05XVswLTldfFswLTldKVxzKixccyooMjVbMC01XXwyWzAtNF1bMC05XXwxWzAtOV17Mn18WzEtOV1bMC05XXxbMC05XSlccyosXHMqKDI1WzAtNV18MlswLTRdWzAtOV18MVswLTldezJ9fFsxLTldWzAtOV18WzAtOV0pXHMqLFxzKigwWy5dWzAtOV0rfFsuXVswLTldK3xbMDFdWy5dfFswMV0pXHMqXCkkL2dtO3U9QXIoc3QoZSxyKSxydChvLGMpLCEwKX1lbHNlIGlmKGw9PT0iaHNsIil7Y29uc3QgYz0vXlwoXHMqKDM2WzBdfDNbMC01XVswLTldfFsxMl1bMC05XVswLTldfFsxLTldP1swLTldKVxzKixccyooMTAwfFxkezEsMn1bLl1cZCp8XGR7MSwyfSklXHMqLFxzKigxMDB8XGR7MSwyfVsuXVxkKnxcZHsxLDJ9KSVccypcKSQvZ207dT1ScihzdChlLHIpLHJ0KG8sYyksITEpfWVsc2UgaWYobD09PSJoc2xhIil7Y29uc3QgYz0vXlwoXHMqKDM2WzBdfDNbMC01XVswLTldfFsxMl1bMC05XVswLTldfFsxLTldP1swLTldKVxzKixccyooMTAwfFxkezEsMn1bLl1cZCp8XGR7MSwyfSklXHMqLFxzKigxMDB8XGR7MSwyfVsuXVxkKnxcZHsxLDJ9KSVccyosXHMqKDBbLl1bMC05XSt8Wy5dWzAtOV0rfFswMV1bLl18WzAxXSlccypcKSQvZ207dT1ScihzdChlLHIpLHJ0KG8sYyksITApfWVsc2UgbD09PSIjIiYmKHU9WTEoc3QoZSxyKSxsK28pKTt1JiZ0LnB1c2godSl9cmV0dXJuIHR9ZnVuY3Rpb24gSzEoZSl7cmV0dXJuIWV8fHR5cGVvZiBlLmdldFZhbHVlIT0iZnVuY3Rpb24ifHx0eXBlb2YgZS5wb3NpdGlvbkF0IT0iZnVuY3Rpb24iP1tdOloxKGUpfWNvbnN0IHlyPW5ldyBSZWdFeHAoIlxcYk1BUks6XFxzKiguKikkIiwiZCIpLGVhPS9eLSt8LSskL2c7ZnVuY3Rpb24gdGEoZSx0KXtsZXQgbj1bXTtpZih0LmZpbmRSZWdpb25TZWN0aW9uSGVhZGVycyYmdC5mb2xkaW5nUnVsZXM/Lm1hcmtlcnMpe2NvbnN0IHM9bmEoZSx0KTtuPW4uY29uY2F0KHMpfWlmKHQuZmluZE1hcmtTZWN0aW9uSGVhZGVycyl7Y29uc3Qgcz1zYShlKTtuPW4uY29uY2F0KHMpfXJldHVybiBufWZ1bmN0aW9uIG5hKGUsdCl7Y29uc3Qgbj1bXSxzPWUuZ2V0TGluZUNvdW50KCk7Zm9yKGxldCByPTE7cjw9cztyKyspe2NvbnN0IGk9ZS5nZXRMaW5lQ29udGVudChyKSxsPWkubWF0Y2godC5mb2xkaW5nUnVsZXMubWFya2Vycy5zdGFydCk7aWYobCl7Y29uc3Qgbz17c3RhcnRMaW5lTnVtYmVyOnIsc3RhcnRDb2x1bW46bFswXS5sZW5ndGgrMSxlbmRMaW5lTnVtYmVyOnIsZW5kQ29sdW1uOmkubGVuZ3RoKzF9O2lmKG8uZW5kQ29sdW1uPm8uc3RhcnRDb2x1bW4pe2NvbnN0IHU9e3JhbmdlOm8sLi4uRXIoaS5zdWJzdHJpbmcobFswXS5sZW5ndGgpKSxzaG91bGRCZUluQ29tbWVudHM6ITF9Oyh1LnRleHR8fHUuaGFzU2VwYXJhdG9yTGluZSkmJm4ucHVzaCh1KX19fXJldHVybiBufWZ1bmN0aW9uIHNhKGUpe2NvbnN0IHQ9W10sbj1lLmdldExpbmVDb3VudCgpO2ZvcihsZXQgcz0xO3M8PW47cysrKXtjb25zdCByPWUuZ2V0TGluZUNvbnRlbnQocyk7cmEocixzLHQpfXJldHVybiB0fWZ1bmN0aW9uIHJhKGUsdCxuKXt5ci5sYXN0SW5kZXg9MDtjb25zdCBzPXlyLmV4ZWMoZSk7aWYocyl7Y29uc3Qgcj1zLmluZGljZXNbMV1bMF0rMSxpPXMuaW5kaWNlc1sxXVsxXSsxLGw9e3N0YXJ0TGluZU51bWJlcjp0LHN0YXJ0Q29sdW1uOnIsZW5kTGluZU51bWJlcjp0LGVuZENvbHVtbjppfTtpZihsLmVuZENvbHVtbj5sLnN0YXJ0Q29sdW1uKXtjb25zdCBvPXtyYW5nZTpsLC4uLkVyKHNbMV0pLHNob3VsZEJlSW5Db21tZW50czohMH07KG8udGV4dHx8by5oYXNTZXBhcmF0b3JMaW5lKSYmbi5wdXNoKG8pfX19ZnVuY3Rpb24gRXIoZSl7ZT1lLnRyaW0oKTtjb25zdCB0PWUuc3RhcnRzV2l0aCgiLSIpO3JldHVybiBlPWUucmVwbGFjZShlYSwiIikse3RleHQ6ZSxoYXNTZXBhcmF0b3JMaW5lOnR9fWNsYXNzIGlhIGV4dGVuZHMgT2l7Z2V0IHVyaSgpe3JldHVybiB0aGlzLl91cml9Z2V0IGVvbCgpe3JldHVybiB0aGlzLl9lb2x9Z2V0VmFsdWUoKXtyZXR1cm4gdGhpcy5nZXRUZXh0KCl9ZmluZE1hdGNoZXModCl7Y29uc3Qgbj1bXTtmb3IobGV0IHM9MDtzPHRoaXMuX2xpbmVzLmxlbmd0aDtzKyspe2NvbnN0IHI9dGhpcy5fbGluZXNbc10saT10aGlzLm9mZnNldEF0KG5ldyBxKHMrMSwxKSksbD1yLm1hdGNoQWxsKHQpO2Zvcihjb25zdCBvIG9mIGwpKG8uaW5kZXh8fG8uaW5kZXg9PT0wKSYmKG8uaW5kZXg9by5pbmRleCtpKSxuLnB1c2gobyl9cmV0dXJuIG59Z2V0TGluZXNDb250ZW50KCl7cmV0dXJuIHRoaXMuX2xpbmVzLnNsaWNlKDApfWdldExpbmVDb3VudCgpe3JldHVybiB0aGlzLl9saW5lcy5sZW5ndGh9Z2V0TGluZUNvbnRlbnQodCl7cmV0dXJuIHRoaXMuX2xpbmVzW3QtMV19Z2V0V29yZEF0UG9zaXRpb24odCxuKXtjb25zdCBzPUt0KHQuY29sdW1uLFFuKG4pLHRoaXMuX2xpbmVzW3QubGluZU51bWJlci0xXSwwKTtyZXR1cm4gcz9uZXcgayh0LmxpbmVOdW1iZXIscy5zdGFydENvbHVtbix0LmxpbmVOdW1iZXIscy5lbmRDb2x1bW4pOm51bGx9d29yZHModCl7Y29uc3Qgbj10aGlzLl9saW5lcyxzPXRoaXMuX3dvcmRlbml6ZS5iaW5kKHRoaXMpO2xldCByPTAsaT0iIixsPTAsbz1bXTtyZXR1cm57KltTeW1ib2wuaXRlcmF0b3JdKCl7Zm9yKDs7KWlmKGw8by5sZW5ndGgpe2NvbnN0IHU9aS5zdWJzdHJpbmcob1tsXS5zdGFydCxvW2xdLmVuZCk7bCs9MSx5aWVsZCB1fWVsc2UgaWYocjxuLmxlbmd0aClpPW5bcl0sbz1zKGksdCksbD0wLHIrPTE7ZWxzZSBicmVha319fWdldExpbmVXb3Jkcyh0LG4pe2NvbnN0IHM9dGhpcy5fbGluZXNbdC0xXSxyPXRoaXMuX3dvcmRlbml6ZShzLG4pLGk9W107Zm9yKGNvbnN0IGwgb2YgcilpLnB1c2goe3dvcmQ6cy5zdWJzdHJpbmcobC5zdGFydCxsLmVuZCksc3RhcnRDb2x1bW46bC5zdGFydCsxLGVuZENvbHVtbjpsLmVuZCsxfSk7cmV0dXJuIGl9X3dvcmRlbml6ZSh0LG4pe2NvbnN0IHM9W107bGV0IHI7Zm9yKG4ubGFzdEluZGV4PTA7KHI9bi5leGVjKHQpKSYmclswXS5sZW5ndGghPT0wOylzLnB1c2goe3N0YXJ0OnIuaW5kZXgsZW5kOnIuaW5kZXgrclswXS5sZW5ndGh9KTtyZXR1cm4gc31nZXRWYWx1ZUluUmFuZ2UodCl7aWYodD10aGlzLl92YWxpZGF0ZVJhbmdlKHQpLHQuc3RhcnRMaW5lTnVtYmVyPT09dC5lbmRMaW5lTnVtYmVyKXJldHVybiB0aGlzLl9saW5lc1t0LnN0YXJ0TGluZU51bWJlci0xXS5zdWJzdHJpbmcodC5zdGFydENvbHVtbi0xLHQuZW5kQ29sdW1uLTEpO2NvbnN0IG49dGhpcy5fZW9sLHM9dC5zdGFydExpbmVOdW1iZXItMSxyPXQuZW5kTGluZU51bWJlci0xLGk9W107aS5wdXNoKHRoaXMuX2xpbmVzW3NdLnN1YnN0cmluZyh0LnN0YXJ0Q29sdW1uLTEpKTtmb3IobGV0IGw9cysxO2w8cjtsKyspaS5wdXNoKHRoaXMuX2xpbmVzW2xdKTtyZXR1cm4gaS5wdXNoKHRoaXMuX2xpbmVzW3JdLnN1YnN0cmluZygwLHQuZW5kQ29sdW1uLTEpKSxpLmpvaW4obil9b2Zmc2V0QXQodCl7cmV0dXJuIHQ9dGhpcy5fdmFsaWRhdGVQb3NpdGlvbih0KSx0aGlzLl9lbnN1cmVMaW5lU3RhcnRzKCksdGhpcy5fbGluZVN0YXJ0cy5nZXRQcmVmaXhTdW0odC5saW5lTnVtYmVyLTIpKyh0LmNvbHVtbi0xKX1wb3NpdGlvbkF0KHQpe3Q9TWF0aC5mbG9vcih0KSx0PU1hdGgubWF4KDAsdCksdGhpcy5fZW5zdXJlTGluZVN0YXJ0cygpO2NvbnN0IG49dGhpcy5fbGluZVN0YXJ0cy5nZXRJbmRleE9mKHQpLHM9dGhpcy5fbGluZXNbbi5pbmRleF0ubGVuZ3RoO3JldHVybntsaW5lTnVtYmVyOjErbi5pbmRleCxjb2x1bW46MStNYXRoLm1pbihuLnJlbWFpbmRlcixzKX19X3ZhbGlkYXRlUmFuZ2UodCl7Y29uc3Qgbj10aGlzLl92YWxpZGF0ZVBvc2l0aW9uKHtsaW5lTnVtYmVyOnQuc3RhcnRMaW5lTnVtYmVyLGNvbHVtbjp0LnN0YXJ0Q29sdW1ufSkscz10aGlzLl92YWxpZGF0ZVBvc2l0aW9uKHtsaW5lTnVtYmVyOnQuZW5kTGluZU51bWJlcixjb2x1bW46dC5lbmRDb2x1bW59KTtyZXR1cm4gbi5saW5lTnVtYmVyIT09dC5zdGFydExpbmVOdW1iZXJ8fG4uY29sdW1uIT09dC5zdGFydENvbHVtbnx8cy5saW5lTnVtYmVyIT09dC5lbmRMaW5lTnVtYmVyfHxzLmNvbHVtbiE9PXQuZW5kQ29sdW1uP3tzdGFydExpbmVOdW1iZXI6bi5saW5lTnVtYmVyLHN0YXJ0Q29sdW1uOm4uY29sdW1uLGVuZExpbmVOdW1iZXI6cy5saW5lTnVtYmVyLGVuZENvbHVtbjpzLmNvbHVtbn06dH1fdmFsaWRhdGVQb3NpdGlvbih0KXtpZighcS5pc0lQb3NpdGlvbih0KSl0aHJvdyBuZXcgRXJyb3IoImJhZCBwb3NpdGlvbiIpO2xldHtsaW5lTnVtYmVyOm4sY29sdW1uOnN9PXQscj0hMTtpZihuPDEpbj0xLHM9MSxyPSEwO2Vsc2UgaWYobj50aGlzLl9saW5lcy5sZW5ndGgpbj10aGlzLl9saW5lcy5sZW5ndGgscz10aGlzLl9saW5lc1tuLTFdLmxlbmd0aCsxLHI9ITA7ZWxzZXtjb25zdCBpPXRoaXMuX2xpbmVzW24tMV0ubGVuZ3RoKzE7czwxPyhzPTEscj0hMCk6cz5pJiYocz1pLHI9ITApfXJldHVybiByP3tsaW5lTnVtYmVyOm4sY29sdW1uOnN9OnR9fWNvbnN0IHllPWNsYXNzIHlle2NvbnN0cnVjdG9yKHQsbil7dGhpcy5faG9zdD10LHRoaXMuX21vZGVscz1PYmplY3QuY3JlYXRlKG51bGwpLHRoaXMuX2ZvcmVpZ25Nb2R1bGVGYWN0b3J5PW4sdGhpcy5fZm9yZWlnbk1vZHVsZT1udWxsfWRpc3Bvc2UoKXt0aGlzLl9tb2RlbHM9T2JqZWN0LmNyZWF0ZShudWxsKX1fZ2V0TW9kZWwodCl7cmV0dXJuIHRoaXMuX21vZGVsc1t0XX1fZ2V0TW9kZWxzKCl7Y29uc3QgdD1bXTtyZXR1cm4gT2JqZWN0LmtleXModGhpcy5fbW9kZWxzKS5mb3JFYWNoKG49PnQucHVzaCh0aGlzLl9tb2RlbHNbbl0pKSx0fWFjY2VwdE5ld01vZGVsKHQpe3RoaXMuX21vZGVsc1t0LnVybF09bmV3IGlhKEFlLnBhcnNlKHQudXJsKSx0LmxpbmVzLHQuRU9MLHQudmVyc2lvbklkKX1hY2NlcHRNb2RlbENoYW5nZWQodCxuKXtpZighdGhpcy5fbW9kZWxzW3RdKXJldHVybjt0aGlzLl9tb2RlbHNbdF0ub25FdmVudHMobil9YWNjZXB0UmVtb3ZlZE1vZGVsKHQpe3RoaXMuX21vZGVsc1t0XSYmZGVsZXRlIHRoaXMuX21vZGVsc1t0XX1hc3luYyBjb21wdXRlVW5pY29kZUhpZ2hsaWdodHModCxuLHMpe2NvbnN0IHI9dGhpcy5fZ2V0TW9kZWwodCk7cmV0dXJuIHI/TDEuY29tcHV0ZVVuaWNvZGVIaWdobGlnaHRzKHIsbixzKTp7cmFuZ2VzOltdLGhhc01vcmU6ITEsYW1iaWd1b3VzQ2hhcmFjdGVyQ291bnQ6MCxpbnZpc2libGVDaGFyYWN0ZXJDb3VudDowLG5vbkJhc2ljQXNjaWlDaGFyYWN0ZXJDb3VudDowfX1hc3luYyBmaW5kU2VjdGlvbkhlYWRlcnModCxuKXtjb25zdCBzPXRoaXMuX2dldE1vZGVsKHQpO3JldHVybiBzP3RhKHMsbik6W119YXN5bmMgY29tcHV0ZURpZmYodCxuLHMscil7Y29uc3QgaT10aGlzLl9nZXRNb2RlbCh0KSxsPXRoaXMuX2dldE1vZGVsKG4pO3JldHVybiFpfHwhbD9udWxsOnllLmNvbXB1dGVEaWZmKGksbCxzLHIpfXN0YXRpYyBjb21wdXRlRGlmZih0LG4scyxyKXtjb25zdCBpPXI9PT0iYWR2YW5jZWQiP1NyLmdldERlZmF1bHQoKTpTci5nZXRMZWdhY3koKSxsPXQuZ2V0TGluZXNDb250ZW50KCksbz1uLmdldExpbmVzQ29udGVudCgpLHU9aS5jb21wdXRlRGlmZihsLG8scyksYz11LmNoYW5nZXMubGVuZ3RoPjA/ITE6dGhpcy5fbW9kZWxzQXJlSWRlbnRpY2FsKHQsbik7ZnVuY3Rpb24gZihoKXtyZXR1cm4gaC5tYXAoZD0+W2Qub3JpZ2luYWwuc3RhcnRMaW5lTnVtYmVyLGQub3JpZ2luYWwuZW5kTGluZU51bWJlckV4Y2x1c2l2ZSxkLm1vZGlmaWVkLnN0YXJ0TGluZU51bWJlcixkLm1vZGlmaWVkLmVuZExpbmVOdW1iZXJFeGNsdXNpdmUsZC5pbm5lckNoYW5nZXM/Lm1hcChtPT5bbS5vcmlnaW5hbFJhbmdlLnN0YXJ0TGluZU51bWJlcixtLm9yaWdpbmFsUmFuZ2Uuc3RhcnRDb2x1bW4sbS5vcmlnaW5hbFJhbmdlLmVuZExpbmVOdW1iZXIsbS5vcmlnaW5hbFJhbmdlLmVuZENvbHVtbixtLm1vZGlmaWVkUmFuZ2Uuc3RhcnRMaW5lTnVtYmVyLG0ubW9kaWZpZWRSYW5nZS5zdGFydENvbHVtbixtLm1vZGlmaWVkUmFuZ2UuZW5kTGluZU51bWJlcixtLm1vZGlmaWVkUmFuZ2UuZW5kQ29sdW1uXSldKX1yZXR1cm57aWRlbnRpY2FsOmMscXVpdEVhcmx5OnUuaGl0VGltZW91dCxjaGFuZ2VzOmYodS5jaGFuZ2VzKSxtb3Zlczp1Lm1vdmVzLm1hcChoPT5baC5saW5lUmFuZ2VNYXBwaW5nLm9yaWdpbmFsLnN0YXJ0TGluZU51bWJlcixoLmxpbmVSYW5nZU1hcHBpbmcub3JpZ2luYWwuZW5kTGluZU51bWJlckV4Y2x1c2l2ZSxoLmxpbmVSYW5nZU1hcHBpbmcubW9kaWZpZWQuc3RhcnRMaW5lTnVtYmVyLGgubGluZVJhbmdlTWFwcGluZy5tb2RpZmllZC5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlLGYoaC5jaGFuZ2VzKV0pfX1zdGF0aWMgX21vZGVsc0FyZUlkZW50aWNhbCh0LG4pe2NvbnN0IHM9dC5nZXRMaW5lQ291bnQoKSxyPW4uZ2V0TGluZUNvdW50KCk7aWYocyE9PXIpcmV0dXJuITE7Zm9yKGxldCBpPTE7aTw9cztpKyspe2NvbnN0IGw9dC5nZXRMaW5lQ29udGVudChpKSxvPW4uZ2V0TGluZUNvbnRlbnQoaSk7aWYobCE9PW8pcmV0dXJuITF9cmV0dXJuITB9YXN5bmMgY29tcHV0ZU1vcmVNaW5pbWFsRWRpdHModCxuLHMpe2NvbnN0IHI9dGhpcy5fZ2V0TW9kZWwodCk7aWYoIXIpcmV0dXJuIG47Y29uc3QgaT1bXTtsZXQgbDtuPW4uc2xpY2UoMCkuc29ydCgodSxjKT0+e2lmKHUucmFuZ2UmJmMucmFuZ2UpcmV0dXJuIGsuY29tcGFyZVJhbmdlc1VzaW5nU3RhcnRzKHUucmFuZ2UsYy5yYW5nZSk7Y29uc3QgZj11LnJhbmdlPzA6MSxoPWMucmFuZ2U/MDoxO3JldHVybiBmLWh9KTtsZXQgbz0wO2ZvcihsZXQgdT0xO3U8bi5sZW5ndGg7dSsrKWsuZ2V0RW5kUG9zaXRpb24obltvXS5yYW5nZSkuZXF1YWxzKGsuZ2V0U3RhcnRQb3NpdGlvbihuW3VdLnJhbmdlKSk/KG5bb10ucmFuZ2U9ay5mcm9tUG9zaXRpb25zKGsuZ2V0U3RhcnRQb3NpdGlvbihuW29dLnJhbmdlKSxrLmdldEVuZFBvc2l0aW9uKG5bdV0ucmFuZ2UpKSxuW29dLnRleHQrPW5bdV0udGV4dCk6KG8rKyxuW29dPW5bdV0pO24ubGVuZ3RoPW8rMTtmb3IobGV0e3JhbmdlOnUsdGV4dDpjLGVvbDpmfW9mIG4pe2lmKHR5cGVvZiBmPT0ibnVtYmVyIiYmKGw9Ziksay5pc0VtcHR5KHUpJiYhYyljb250aW51ZTtjb25zdCBoPXIuZ2V0VmFsdWVJblJhbmdlKHUpO2lmKGM9Yy5yZXBsYWNlKC9cclxufFxufFxyL2csci5lb2wpLGg9PT1jKWNvbnRpbnVlO2lmKE1hdGgubWF4KGMubGVuZ3RoLGgubGVuZ3RoKT55ZS5fZGlmZkxpbWl0KXtpLnB1c2goe3JhbmdlOnUsdGV4dDpjfSk7Y29udGludWV9Y29uc3QgZD1waShoLGMscyksbT1yLm9mZnNldEF0KGsubGlmdCh1KS5nZXRTdGFydFBvc2l0aW9uKCkpO2Zvcihjb25zdCBnIG9mIGQpe2NvbnN0IGI9ci5wb3NpdGlvbkF0KG0rZy5vcmlnaW5hbFN0YXJ0KSx3PXIucG9zaXRpb25BdChtK2cub3JpZ2luYWxTdGFydCtnLm9yaWdpbmFsTGVuZ3RoKSxOPXt0ZXh0OmMuc3Vic3RyKGcubW9kaWZpZWRTdGFydCxnLm1vZGlmaWVkTGVuZ3RoKSxyYW5nZTp7c3RhcnRMaW5lTnVtYmVyOmIubGluZU51bWJlcixzdGFydENvbHVtbjpiLmNvbHVtbixlbmRMaW5lTnVtYmVyOncubGluZU51bWJlcixlbmRDb2x1bW46dy5jb2x1bW59fTtyLmdldFZhbHVlSW5SYW5nZShOLnJhbmdlKSE9PU4udGV4dCYmaS5wdXNoKE4pfX1yZXR1cm4gdHlwZW9mIGw9PSJudW1iZXIiJiZpLnB1c2goe2VvbDpsLHRleHQ6IiIscmFuZ2U6e3N0YXJ0TGluZU51bWJlcjowLHN0YXJ0Q29sdW1uOjAsZW5kTGluZU51bWJlcjowLGVuZENvbHVtbjowfX0pLGl9YXN5bmMgY29tcHV0ZUxpbmtzKHQpe2NvbnN0IG49dGhpcy5fZ2V0TW9kZWwodCk7cmV0dXJuIG4/ZTEobik6bnVsbH1hc3luYyBjb21wdXRlRGVmYXVsdERvY3VtZW50Q29sb3JzKHQpe2NvbnN0IG49dGhpcy5fZ2V0TW9kZWwodCk7cmV0dXJuIG4/SzEobik6bnVsbH1hc3luYyB0ZXh0dWFsU3VnZ2VzdCh0LG4scyxyKXtjb25zdCBpPW5ldyBjdCxsPW5ldyBSZWdFeHAocyxyKSxvPW5ldyBTZXQ7ZTpmb3IoY29uc3QgdSBvZiB0KXtjb25zdCBjPXRoaXMuX2dldE1vZGVsKHUpO2lmKGMpe2Zvcihjb25zdCBmIG9mIGMud29yZHMobCkpaWYoIShmPT09bnx8IWlzTmFOKE51bWJlcihmKSkpJiYoby5hZGQoZiksby5zaXplPnllLl9zdWdnZXN0aW9uc0xpbWl0KSlicmVhayBlfX1yZXR1cm57d29yZHM6QXJyYXkuZnJvbShvKSxkdXJhdGlvbjppLmVsYXBzZWQoKX19YXN5bmMgY29tcHV0ZVdvcmRSYW5nZXModCxuLHMscil7Y29uc3QgaT10aGlzLl9nZXRNb2RlbCh0KTtpZighaSlyZXR1cm4gT2JqZWN0LmNyZWF0ZShudWxsKTtjb25zdCBsPW5ldyBSZWdFeHAocyxyKSxvPU9iamVjdC5jcmVhdGUobnVsbCk7Zm9yKGxldCB1PW4uc3RhcnRMaW5lTnVtYmVyO3U8bi5lbmRMaW5lTnVtYmVyO3UrKyl7Y29uc3QgYz1pLmdldExpbmVXb3Jkcyh1LGwpO2Zvcihjb25zdCBmIG9mIGMpe2lmKCFpc05hTihOdW1iZXIoZi53b3JkKSkpY29udGludWU7bGV0IGg9b1tmLndvcmRdO2h8fChoPVtdLG9bZi53b3JkXT1oKSxoLnB1c2goe3N0YXJ0TGluZU51bWJlcjp1LHN0YXJ0Q29sdW1uOmYuc3RhcnRDb2x1bW4sZW5kTGluZU51bWJlcjp1LGVuZENvbHVtbjpmLmVuZENvbHVtbn0pfX1yZXR1cm4gb31hc3luYyBuYXZpZ2F0ZVZhbHVlU2V0KHQsbixzLHIsaSl7Y29uc3QgbD10aGlzLl9nZXRNb2RlbCh0KTtpZighbClyZXR1cm4gbnVsbDtjb25zdCBvPW5ldyBSZWdFeHAocixpKTtuLnN0YXJ0Q29sdW1uPT09bi5lbmRDb2x1bW4mJihuPXtzdGFydExpbmVOdW1iZXI6bi5zdGFydExpbmVOdW1iZXIsc3RhcnRDb2x1bW46bi5zdGFydENvbHVtbixlbmRMaW5lTnVtYmVyOm4uZW5kTGluZU51bWJlcixlbmRDb2x1bW46bi5lbmRDb2x1bW4rMX0pO2NvbnN0IHU9bC5nZXRWYWx1ZUluUmFuZ2UobiksYz1sLmdldFdvcmRBdFBvc2l0aW9uKHtsaW5lTnVtYmVyOm4uc3RhcnRMaW5lTnVtYmVyLGNvbHVtbjpuLnN0YXJ0Q29sdW1ufSxvKTtpZighYylyZXR1cm4gbnVsbDtjb25zdCBmPWwuZ2V0VmFsdWVJblJhbmdlKGMpO3JldHVybiBubi5JTlNUQU5DRS5uYXZpZ2F0ZVZhbHVlU2V0KG4sdSxjLGYscyl9bG9hZEZvcmVpZ25Nb2R1bGUodCxuLHMpe2NvbnN0IGw9e2hvc3Q6R3Iocywobyx1KT0+dGhpcy5faG9zdC5maHIobyx1KSksZ2V0TWlycm9yTW9kZWxzOigpPT50aGlzLl9nZXRNb2RlbHMoKX07cmV0dXJuIHRoaXMuX2ZvcmVpZ25Nb2R1bGVGYWN0b3J5Pyh0aGlzLl9mb3JlaWduTW9kdWxlPXRoaXMuX2ZvcmVpZ25Nb2R1bGVGYWN0b3J5KGwsbiksUHJvbWlzZS5yZXNvbHZlKEh0KHRoaXMuX2ZvcmVpZ25Nb2R1bGUpKSk6UHJvbWlzZS5yZWplY3QobmV3IEVycm9yKCJVbmV4cGVjdGVkIHVzYWdlIikpfWZtcih0LG4pe2lmKCF0aGlzLl9mb3JlaWduTW9kdWxlfHx0eXBlb2YgdGhpcy5fZm9yZWlnbk1vZHVsZVt0XSE9ImZ1bmN0aW9uIilyZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKCJNaXNzaW5nIHJlcXVlc3RIYW5kbGVyIG9yIG1ldGhvZDogIit0KSk7dHJ5e3JldHVybiBQcm9taXNlLnJlc29sdmUodGhpcy5fZm9yZWlnbk1vZHVsZVt0XS5hcHBseSh0aGlzLl9mb3JlaWduTW9kdWxlLG4pKX1jYXRjaChzKXtyZXR1cm4gUHJvbWlzZS5yZWplY3Qocyl9fX07eWUuX2RpZmZMaW1pdD0xZTUseWUuX3N1Z2dlc3Rpb25zTGltaXQ9MWU0O2xldCBwbj15ZTt0eXBlb2YgaW1wb3J0U2NyaXB0cz09ImZ1bmN0aW9uIiYmKGdsb2JhbFRoaXMubW9uYWNvPWgxKCkpO2xldCB3bj0hMTtmdW5jdGlvbiBhYShlKXtpZih3bilyZXR1cm47d249ITA7Y29uc3QgdD1uZXcgYmkobj0+e2dsb2JhbFRoaXMucG9zdE1lc3NhZ2Uobil9LG49Pm5ldyBwbihuLGUpKTtnbG9iYWxUaGlzLm9ubWVzc2FnZT1uPT57dC5vbm1lc3NhZ2Uobi5kYXRhKX19Z2xvYmFsVGhpcy5vbm1lc3NhZ2U9ZT0+e3dufHxhYShudWxsKX19KSgpOwo=", m = (l) => Uint8Array.from(atob(l), (Z) => Z.charCodeAt(0)), d = typeof self < "u" && self.Blob && new Blob([m(c)], { type: "text/javascript;charset=utf-8" });
2
- function W(l) {
3
- let Z;
4
- try {
5
- if (Z = d && (self.URL || self.webkitURL).createObjectURL(d), !Z) throw "";
6
- const b = new Worker(Z, {
7
- name: l?.name
8
- });
9
- return b.addEventListener("error", () => {
10
- (self.URL || self.webkitURL).revokeObjectURL(Z);
11
- }), b;
12
- } catch {
13
- return new Worker(
14
- "data:text/javascript;base64," + c,
15
- {
16
- name: l?.name
17
- }
18
- );
19
- } finally {
20
- Z && (self.URL || self.webkitURL).revokeObjectURL(Z);
21
- }
22
- }
23
- export {
24
- W as default
25
- };