@codingame/monaco-editor-wrapper 1.8.0 → 1.10.0

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.
@@ -1,6 +1,6 @@
1
1
  import { c as createBase64WorkerFactory } from './worker.js';
2
2
 
3
- var WorkerFactory = createBase64WorkerFactory('Lyogcm9sbHVwLXBsdWdpbi13ZWItd29ya2VyLWxvYWRlciAqLwohZnVuY3Rpb24oKXsidXNlIHN0cmljdCI7Y2xhc3MgbHtjb25zdHJ1Y3Rvcigpe3RoaXMubGlzdGVuZXJzPVtdLHRoaXMudW5leHBlY3RlZEVycm9ySGFuZGxlcj1mdW5jdGlvbihlKXtzZXRUaW1lb3V0KCgpPT57aWYoZS5zdGFjayl0aHJvdyBuZXcgRXJyb3IoZS5tZXNzYWdlKyJcblxuIitlLnN0YWNrKTt0aHJvdyBlfSwwKX19YWRkTGlzdGVuZXIoZSl7cmV0dXJuIHRoaXMubGlzdGVuZXJzLnB1c2goZSksKCk9Pnt0aGlzLl9yZW1vdmVMaXN0ZW5lcihlKX19ZW1pdCh0KXt0aGlzLmxpc3RlbmVycy5mb3JFYWNoKGU9PntlKHQpfSl9X3JlbW92ZUxpc3RlbmVyKGUpe3RoaXMubGlzdGVuZXJzLnNwbGljZSh0aGlzLmxpc3RlbmVycy5pbmRleE9mKGUpLDEpfXNldFVuZXhwZWN0ZWRFcnJvckhhbmRsZXIoZSl7dGhpcy51bmV4cGVjdGVkRXJyb3JIYW5kbGVyPWV9Z2V0VW5leHBlY3RlZEVycm9ySGFuZGxlcigpe3JldHVybiB0aGlzLnVuZXhwZWN0ZWRFcnJvckhhbmRsZXJ9b25VbmV4cGVjdGVkRXJyb3IoZSl7dGhpcy51bmV4cGVjdGVkRXJyb3JIYW5kbGVyKGUpLHRoaXMuZW1pdChlKX1vblVuZXhwZWN0ZWRFeHRlcm5hbEVycm9yKGUpe3RoaXMudW5leHBlY3RlZEVycm9ySGFuZGxlcihlKX19Y29uc3QgYz1uZXcgbDtmdW5jdGlvbiB1KGUpeyFmdW5jdGlvbihlKXtpZihlIGluc3RhbmNlb2YgbSlyZXR1cm4hMDtyZXR1cm4gZSBpbnN0YW5jZW9mIEVycm9yJiZlLm5hbWU9PT1kJiZlLm1lc3NhZ2U9PT1kfShlKSYmYy5vblVuZXhwZWN0ZWRFcnJvcihlKX1mdW5jdGlvbiBoKGUpe3ZhciB0LHI7cmV0dXJuIGUgaW5zdGFuY2VvZiBFcnJvcj8oe25hbWU6dCxtZXNzYWdlOnJ9PWUseyRpc0Vycm9yOiEwLG5hbWU6dCxtZXNzYWdlOnIsc3RhY2s6ZS5zdGFja3RyYWNlfHxlLnN0YWNrfSk6ZX1jb25zdCBkPSJDYW5jZWxlZCI7Y2xhc3MgbSBleHRlbmRzIEVycm9ye2NvbnN0cnVjdG9yKCl7c3VwZXIoZCksdGhpcy5uYW1lPXRoaXMubWVzc2FnZX19dmFyIGc7e3ZhciBwPWc9Z3x8e307cC5pcz1mdW5jdGlvbihlKXtyZXR1cm4gZSYmIm9iamVjdCI9PXR5cGVvZiBlJiYiZnVuY3Rpb24iPT10eXBlb2YgZVtTeW1ib2wuaXRlcmF0b3JdfTtjb25zdCBpYT1PYmplY3QuZnJlZXplKFtdKTtwLmVtcHR5PWZ1bmN0aW9uKCl7cmV0dXJuIGlhfSxwLnNpbmdsZT1mdW5jdGlvbiooZSl7eWllbGQgZX0scC5mcm9tPWZ1bmN0aW9uKGUpe3JldHVybiBlfHxpYX0scC5pc0VtcHR5PWZ1bmN0aW9uKGUpe3JldHVybiFlfHwhMD09PWVbU3ltYm9sLml0ZXJhdG9yXSgpLm5leHQoKS5kb25lfSxwLmZpcnN0PWZ1bmN0aW9uKGUpe3JldHVybiBlW1N5bWJvbC5pdGVyYXRvcl0oKS5uZXh0KCkudmFsdWV9LHAuc29tZT1mdW5jdGlvbihlLHQpe2Zvcihjb25zdCByIG9mIGUpaWYodChyKSlyZXR1cm4hMDtyZXR1cm4hMX0scC5maW5kPWZ1bmN0aW9uKGUsdCl7Zm9yKGNvbnN0IHIgb2YgZSlpZih0KHIpKXJldHVybiByfSxwLmZpbHRlcj1mdW5jdGlvbiooZSx0KXtmb3IoY29uc3QgciBvZiBlKXQocikmJih5aWVsZCByKX0scC5tYXA9ZnVuY3Rpb24qKGUsdCl7bGV0IHI9MDtmb3IoY29uc3QgbiBvZiBlKXlpZWxkIHQobixyKyspfSxwLmNvbmNhdD1mdW5jdGlvbiooLi4uZSl7Zm9yKGNvbnN0IHQgb2YgZSlmb3IoY29uc3QgciBvZiB0KXlpZWxkIHJ9LHAuY29uY2F0TmVzdGVkPWZ1bmN0aW9uKihlKXtmb3IoY29uc3QgdCBvZiBlKWZvcihjb25zdCByIG9mIHQpeWllbGQgcn0scC5yZWR1Y2U9ZnVuY3Rpb24oZSx0LHIpe2xldCBuPXI7Zm9yKGNvbnN0IGkgb2YgZSluPXQobixpKTtyZXR1cm4gbn0scC5zbGljZT1mdW5jdGlvbiooZSx0LHI9ZS5sZW5ndGgpe2Zvcih0PDAmJih0Kz1lLmxlbmd0aCkscjwwP3IrPWUubGVuZ3RoOnI+ZS5sZW5ndGgmJihyPWUubGVuZ3RoKTt0PHI7dCsrKXlpZWxkIGVbdF19LHAuY29uc3VtZT1mdW5jdGlvbihlLHQ9TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZKXtjb25zdCByPVtdO2lmKDA9PT10KXJldHVybltyLGVdO2NvbnN0IG49ZVtTeW1ib2wuaXRlcmF0b3JdKCk7Zm9yKGxldCBlPTA7ZTx0O2UrKyl7dmFyIGk9bi5uZXh0KCk7aWYoaS5kb25lKXJldHVybltyLHAuZW1wdHkoKV07ci5wdXNoKGkudmFsdWUpfXJldHVybltyLHtbU3ltYm9sLml0ZXJhdG9yXSgpe3JldHVybiBufX1dfSxwLmVxdWFscz1mdW5jdGlvbihlLHQscj0oZSx0KT0+ZT09PXQpe2NvbnN0IG49ZVtTeW1ib2wuaXRlcmF0b3JdKCksaT10W1N5bWJvbC5pdGVyYXRvcl0oKTtmb3IoOzspe3ZhciBvPW4ubmV4dCgpLGE9aS5uZXh0KCk7aWYoby5kb25lIT09YS5kb25lKXJldHVybiExO2lmKG8uZG9uZSlyZXR1cm4hMDtpZighcihvLnZhbHVlLGEudmFsdWUpKXJldHVybiExfX19Y2xhc3MgYiBleHRlbmRzIEVycm9ye2NvbnN0cnVjdG9yKGUpe3N1cGVyKGBFbmNvdW50ZXJlZCBlcnJvcnMgd2hpbGUgZGlzcG9zaW5nIG9mIHN0b3JlLiBFcnJvcnM6IFske2Uuam9pbigiLCAiKX1dYCksdGhpcy5lcnJvcnM9ZX19ZnVuY3Rpb24gdihlKXtpZihnLmlzKGUpKXtsZXQgdD1bXTtmb3IoY29uc3QgciBvZiBlKWlmKHIpdHJ5e3IuZGlzcG9zZSgpfWNhdGNoKGUpe3QucHVzaChlKX1pZigxPT09dC5sZW5ndGgpdGhyb3cgdFswXTtpZigxPHQubGVuZ3RoKXRocm93IG5ldyBiKHQpO3JldHVybiBBcnJheS5pc0FycmF5KGUpP1tdOmV9aWYoZSlyZXR1cm4gZS5kaXNwb3NlKCksZX1mdW5jdGlvbiB5KGUpe3JldHVybntkaXNwb3NlOmZ1bmN0aW9uKGUpe2NvbnN0IHQ9dGhpcztsZXQgcj0hMSxuO3JldHVybiBmdW5jdGlvbigpe3JldHVybiByP246KHI9ITAsbj1lLmFwcGx5KHQsYXJndW1lbnRzKSl9fSgoKT0+e2UoKX0pfX1jbGFzcyBDe2NvbnN0cnVjdG9yKCl7dGhpcy5fdG9EaXNwb3NlPW5ldyBTZXQsdGhpcy5faXNEaXNwb3NlZD0hMX1kaXNwb3NlKCl7dGhpcy5faXNEaXNwb3NlZHx8KHRoaXMuX2lzRGlzcG9zZWQ9ITAsdGhpcy5jbGVhcigpKX1nZXQgaXNEaXNwb3NlZCgpe3JldHVybiB0aGlzLl9pc0Rpc3Bvc2VkfWNsZWFyKCl7dHJ5e3YodGhpcy5fdG9EaXNwb3NlLnZhbHVlcygpKX1maW5hbGx5e3RoaXMuX3RvRGlzcG9zZS5jbGVhcigpfX1hZGQoZSl7aWYoIWUpcmV0dXJuIGU7aWYoZT09PXRoaXMpdGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgcmVnaXN0ZXIgYSBkaXNwb3NhYmxlIG9uIGl0c2VsZiEiKTtyZXR1cm4gdGhpcy5faXNEaXNwb3NlZD9DLkRJU0FCTEVfRElTUE9TRURfV0FSTklOR3x8Y29uc29sZS53YXJuKG5ldyBFcnJvcigiVHJ5aW5nIHRvIGFkZCBhIGRpc3Bvc2FibGUgdG8gYSBEaXNwb3NhYmxlU3RvcmUgdGhhdCBoYXMgYWxyZWFkeSBiZWVuIGRpc3Bvc2VkIG9mLiBUaGUgYWRkZWQgb2JqZWN0IHdpbGwgYmUgbGVha2VkISIpLnN0YWNrKTp0aGlzLl90b0Rpc3Bvc2UuYWRkKGUpLGV9fUMuRElTQUJMRV9ESVNQT1NFRF9XQVJOSU5HPSExO2NsYXNzIHd7Y29uc3RydWN0b3IoKXt0aGlzLl9zdG9yZT1uZXcgQyx0aGlzLl9zdG9yZX1kaXNwb3NlKCl7dGhpcy5fc3RvcmUuZGlzcG9zZSgpfV9yZWdpc3RlcihlKXtpZihlPT09dGhpcyl0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCByZWdpc3RlciBhIGRpc3Bvc2FibGUgb24gaXRzZWxmISIpO3JldHVybiB0aGlzLl9zdG9yZS5hZGQoZSl9fXcuTm9uZT1PYmplY3QuZnJlZXplKHtkaXNwb3NlKCl7fX0pO2NsYXNzIF97Y29uc3RydWN0b3IoZSl7dGhpcy5lbGVtZW50PWUsdGhpcy5uZXh0PV8uVW5kZWZpbmVkLHRoaXMucHJldj1fLlVuZGVmaW5lZH19Xy5VbmRlZmluZWQ9bmV3IF8odm9pZCAwKTtjbGFzcyBTe2NvbnN0cnVjdG9yKCl7dGhpcy5fZmlyc3Q9Xy5VbmRlZmluZWQsdGhpcy5fbGFzdD1fLlVuZGVmaW5lZCx0aGlzLl9zaXplPTB9Z2V0IHNpemUoKXtyZXR1cm4gdGhpcy5fc2l6ZX1pc0VtcHR5KCl7cmV0dXJuIHRoaXMuX2ZpcnN0PT09Xy5VbmRlZmluZWR9Y2xlYXIoKXtsZXQgZT10aGlzLl9maXJzdDtmb3IoO2UhPT1fLlVuZGVmaW5lZDspe3ZhciB0PWUubmV4dDtlLnByZXY9Xy5VbmRlZmluZWQsZS5uZXh0PV8uVW5kZWZpbmVkLGU9dH10aGlzLl9maXJzdD1fLlVuZGVmaW5lZCx0aGlzLl9sYXN0PV8uVW5kZWZpbmVkLHRoaXMuX3NpemU9MH11bnNoaWZ0KGUpe3JldHVybiB0aGlzLl9pbnNlcnQoZSwhMSl9cHVzaChlKXtyZXR1cm4gdGhpcy5faW5zZXJ0KGUsITApfV9pbnNlcnQoZSx0KXtjb25zdCByPW5ldyBfKGUpO2lmKHRoaXMuX2ZpcnN0PT09Xy5VbmRlZmluZWQpdGhpcy5fZmlyc3Q9cix0aGlzLl9sYXN0PXI7ZWxzZSBpZih0KXtjb25zdCBpPXRoaXMuX2xhc3Q7KCh0aGlzLl9sYXN0PXIpLnByZXY9aSkubmV4dD1yfWVsc2V7Y29uc3Qgbz10aGlzLl9maXJzdDsoKHRoaXMuX2ZpcnN0PXIpLm5leHQ9bykucHJldj1yfXRoaXMuX3NpemUrPTE7bGV0IG49ITE7cmV0dXJuKCk9PntufHwobj0hMCx0aGlzLl9yZW1vdmUocikpfX1zaGlmdCgpe3ZhciBlO2lmKHRoaXMuX2ZpcnN0IT09Xy5VbmRlZmluZWQpcmV0dXJuIGU9dGhpcy5fZmlyc3QuZWxlbWVudCx0aGlzLl9yZW1vdmUodGhpcy5fZmlyc3QpLGV9cG9wKCl7dmFyIGU7aWYodGhpcy5fbGFzdCE9PV8uVW5kZWZpbmVkKXJldHVybiBlPXRoaXMuX2xhc3QuZWxlbWVudCx0aGlzLl9yZW1vdmUodGhpcy5fbGFzdCksZX1fcmVtb3ZlKGUpe2lmKGUucHJldiE9PV8uVW5kZWZpbmVkJiZlLm5leHQhPT1fLlVuZGVmaW5lZCl7Y29uc3QgdD1lLnByZXY7dC5uZXh0PWUubmV4dCxlLm5leHQucHJldj10fWVsc2UgZS5wcmV2PT09Xy5VbmRlZmluZWQmJmUubmV4dD09PV8uVW5kZWZpbmVkPyh0aGlzLl9maXJzdD1fLlVuZGVmaW5lZCx0aGlzLl9sYXN0PV8uVW5kZWZpbmVkKTplLm5leHQ9PT1fLlVuZGVmaW5lZD8odGhpcy5fbGFzdD10aGlzLl9sYXN0LnByZXYsdGhpcy5fbGFzdC5uZXh0PV8uVW5kZWZpbmVkKTplLnByZXY9PT1fLlVuZGVmaW5lZCYmKHRoaXMuX2ZpcnN0PXRoaXMuX2ZpcnN0Lm5leHQsdGhpcy5fZmlyc3QucHJldj1fLlVuZGVmaW5lZCk7LS10aGlzLl9zaXplfSpbU3ltYm9sLml0ZXJhdG9yXSgpe2xldCBlPXRoaXMuX2ZpcnN0O2Zvcig7ZSE9PV8uVW5kZWZpbmVkOyl5aWVsZCBlLmVsZW1lbnQsZT1lLm5leHR9fXZhciBlPSJlbiI7bGV0IEE9ITEseD0hMSxFPSExLGs9dm9pZCAwLE49ZTtsZXQgTD12b2lkIDA7Y29uc3QgTT0ib2JqZWN0Ij09dHlwZW9mIHNlbGY/c2VsZjoib2JqZWN0Ij09dHlwZW9mIGdsb2JhbD9nbG9iYWw6e307bGV0IE89dm9pZCAwO3ZvaWQgMCE9PU0udnNjb2RlJiZ2b2lkIDAhPT1NLnZzY29kZS5wcm9jZXNzP089TS52c2NvZGUucHJvY2VzczoidW5kZWZpbmVkIiE9dHlwZW9mIHByb2Nlc3MmJihPPXByb2Nlc3MpO3ZhciB0PSJzdHJpbmciPT10eXBlb2YobnVsbD09PSh0PW51bGw9PT1PfHx2b2lkIDA9PT1PP3ZvaWQgMDpPLnZlcnNpb25zKXx8dm9pZCAwPT09dD92b2lkIDA6dC5lbGVjdHJvbikmJiJyZW5kZXJlciI9PT0obnVsbD09PU98fHZvaWQgMD09PU8/dm9pZCAwOk8udHlwZSk7aWYoIm9iamVjdCIhPXR5cGVvZiBuYXZpZ2F0b3J8fHQpaWYoIm9iamVjdCI9PXR5cGVvZiBPKXtBPSJ3aW4zMiI9PT1PLnBsYXRmb3JtLHg9ImRhcndpbiI9PT1PLnBsYXRmb3JtLChFPSJsaW51eCI9PT1PLnBsYXRmb3JtKSYmTy5lbnYuU05BUCYmTy5lbnYuU05BUF9SRVZJU0lPTixrPWUsTj1lO3Q9Ty5lbnYuVlNDT0RFX05MU19DT05GSUc7aWYodCl0cnl7dmFyIFA9SlNPTi5wYXJzZSh0KSxyPVAuYXZhaWxhYmxlTGFuZ3VhZ2VzWyIqIl07az1QLmxvY2FsZSxOPXJ8fGUsUC5fdHJhbnNsYXRpb25zQ29uZmlnRmlsZX1jYXRjaChlKXt9fWVsc2UgY29uc29sZS5lcnJvcigiVW5hYmxlIHRvIHJlc29sdmUgcGxhdGZvcm0uIik7ZWxzZSBMPW5hdmlnYXRvci51c2VyQWdlbnQsQT0wPD1MLmluZGV4T2YoIldpbmRvd3MiKSx4PTA8PUwuaW5kZXhPZigiTWFjaW50b3NoIiksKDA8PUwuaW5kZXhPZigiTWFjaW50b3NoIil8fDA8PUwuaW5kZXhPZigiaVBhZCIpfHwwPD1MLmluZGV4T2YoImlQaG9uZSIpKSYmbmF2aWdhdG9yLm1heFRvdWNoUG9pbnRzJiZuYXZpZ2F0b3IubWF4VG91Y2hQb2ludHMsRT0wPD1MLmluZGV4T2YoIkxpbnV4Iiksaz1uYXZpZ2F0b3IubGFuZ3VhZ2UsTj1rO2NvbnN0IFQ9QSxJPXgsVj1FLFI9TDsoKCk9PntpZigiZnVuY3Rpb24iIT10eXBlb2YgTS5wb3N0TWVzc2FnZXx8TS5pbXBvcnRTY3JpcHRzKXJldHVybjt7bGV0IGk9W10sZT0oTS5hZGRFdmVudExpc3RlbmVyKCJtZXNzYWdlIixyPT57aWYoci5kYXRhJiZyLmRhdGEudnNjb2RlU2NoZWR1bGVBc3luY1dvcmspZm9yKGxldCBlPTAsdD1pLmxlbmd0aDtlPHQ7ZSsrKXtjb25zdCBuPWlbZV07aWYobi5pZD09PXIuZGF0YS52c2NvZGVTY2hlZHVsZUFzeW5jV29yaylyZXR1cm4gaS5zcGxpY2UoZSwxKSx2b2lkIG4uY2FsbGJhY2soKX19KSwwKX19KSgpO3ZhciBELEYsdD0hIShSJiYwPD1SLmluZGV4T2YoIkNocm9tZSIpKTtSJiZSLmluZGV4T2YoIkZpcmVmb3giKSwhdCYmUiYmUi5pbmRleE9mKCJTYWZhcmkiKSxSJiZSLmluZGV4T2YoIkVkZy8iKSxSJiZSLmluZGV4T2YoIkFuZHJvaWQiKTtjb25zdCBLPU0ucGVyZm9ybWFuY2UmJiJmdW5jdGlvbiI9PXR5cGVvZiBNLnBlcmZvcm1hbmNlLm5vdztjbGFzcyBqe2NvbnN0cnVjdG9yKGUpe3RoaXMuX2hpZ2hSZXNvbHV0aW9uPUsmJmUsdGhpcy5fc3RhcnRUaW1lPXRoaXMuX25vdygpLHRoaXMuX3N0b3BUaW1lPS0xfXN0YXRpYyBjcmVhdGUoZT0hMCl7cmV0dXJuIG5ldyBqKGUpfXN0b3AoKXt0aGlzLl9zdG9wVGltZT10aGlzLl9ub3coKX1lbGFwc2VkKCl7cmV0dXJuLTEhPT10aGlzLl9zdG9wVGltZT90aGlzLl9zdG9wVGltZS10aGlzLl9zdGFydFRpbWU6dGhpcy5fbm93KCktdGhpcy5fc3RhcnRUaW1lfV9ub3coKXtyZXR1cm4odGhpcy5faGlnaFJlc29sdXRpb24/TS5wZXJmb3JtYW5jZTpEYXRlKS5ub3coKX19e3ZhciBVPUQ9RHx8e307ZnVuY3Rpb24gQihvKXtyZXR1cm4odCxyPW51bGwsZSk9PntsZXQgbj0hMSxpO3JldHVybiBpPW8oZT0+e2lmKCFuKXJldHVybiBpP2kuZGlzcG9zZSgpOm49ITAsdC5jYWxsKHIsZSl9LG51bGwsZSksbiYmaS5kaXNwb3NlKCksaX19ZnVuY3Rpb24gcShuLGkpe3JldHVybiB6KCh0LHI9bnVsbCxlKT0+bihlPT50LmNhbGwocixpKGUpKSxudWxsLGUpKX1mdW5jdGlvbiAkKG4saSl7cmV0dXJuIHooKHQscj1udWxsLGUpPT5uKGU9PntpKGUpLHQuY2FsbChyLGUpfSxudWxsLGUpKX1mdW5jdGlvbiBXKG4saSl7cmV0dXJuIHooKHQscj1udWxsLGUpPT5uKGU9PmkoZSkmJnQuY2FsbChyLGUpLG51bGwsZSkpfWZ1bmN0aW9uIEgoZSx0LHIpe2xldCBuPXI7cmV0dXJuIHEoZSxlPT5uPXQobixlKSl9ZnVuY3Rpb24geihlKXtsZXQgdDtjb25zdCByPW5ldyBYKHtvbkZpcnN0TGlzdGVuZXJBZGQoKXt0PWUoci5maXJlLHIpfSxvbkxhc3RMaXN0ZW5lclJlbW92ZSgpe3QuZGlzcG9zZSgpfX0pO3JldHVybiByLmV2ZW50fWZ1bmN0aW9uIEooZSx0LHI9MTAwLG49ITEsaSl7bGV0IG8sYT12b2lkIDAscz12b2lkIDAsbD0wO2NvbnN0IGM9bmV3IFgoe2xlYWtXYXJuaW5nVGhyZXNob2xkOmksb25GaXJzdExpc3RlbmVyQWRkKCl7bz1lKGU9PntsKyssYT10KGEsZSksbiYmIXMmJihjLmZpcmUoYSksYT12b2lkIDApLGNsZWFyVGltZW91dChzKSxzPXNldFRpbWVvdXQoKCk9Pnt2YXIgZT1hO2E9dm9pZCAwLHM9dm9pZCAwLCghbnx8MTxsKSYmYy5maXJlKGUpLGw9MH0scil9KX0sb25MYXN0TGlzdGVuZXJSZW1vdmUoKXtvLmRpc3Bvc2UoKX19KTtyZXR1cm4gYy5ldmVudH1mdW5jdGlvbiBHKGUscj0oZSx0KT0+ZT09PXQpe2xldCBuPSEwLGk7cmV0dXJuIFcoZSxlPT57dmFyIHQ9bnx8IXIoZSxpKTtyZXR1cm4gbj0hMSxpPWUsdH0pfVUuTm9uZT0oKT0+dy5Ob25lLFUub25jZT1CLFUubWFwPXEsVS5mb3JFYWNoPSQsVS5maWx0ZXI9VyxVLnNpZ25hbD1mdW5jdGlvbihlKXtyZXR1cm4gZX0sVS5hbnk9ZnVuY3Rpb24oLi4uaSl7cmV0dXJuKHQscj1udWxsLG4pPT57dmFyWy4uLmVdPVsuLi5pLm1hcChlPT5lKGU9PnQuY2FsbChyLGUpLG51bGwsbikpXTtyZXR1cm4geSgoKT0+dihlKSl9fSxVLnJlZHVjZT1ILFUuZGVib3VuY2VkTGlzdGVuZXI9ZnVuY3Rpb24oZSx0LHIsbj0xMDAsaT0hMSl7bGV0IG89dm9pZCAwLGE9dm9pZCAwLHM9MDtyZXR1cm4gZShlPT57cysrLG89cihvLGUpLGkmJiFhJiYodChvKSxvPXZvaWQgMCksY2xlYXJUaW1lb3V0KGEpLGE9c2V0VGltZW91dCgoKT0+e3ZhciBlPW87bz12b2lkIDAsYT12b2lkIDAsKCFpfHwxPHMpJiZ0KGUpLHM9MH0sbil9KX0sVS5kZWJvdW5jZT1KLFUubGF0Y2g9RyxVLnNwbGl0PWZ1bmN0aW9uKGUsdCl7cmV0dXJuW1UuZmlsdGVyKGUsdCksVS5maWx0ZXIoZSxlPT4hdChlKSldfSxVLmJ1ZmZlcj1mdW5jdGlvbihlLHQ9ITEscj1bXSl7bGV0IG49ci5zbGljZSgpLGk9ZShlPT57bj9uLnB1c2goZSk6YS5maXJlKGUpfSk7Y29uc3Qgbz0oKT0+e24mJm4uZm9yRWFjaChlPT5hLmZpcmUoZSkpLG49bnVsbH0sYT1uZXcgWCh7b25GaXJzdExpc3RlbmVyQWRkKCl7aT1pfHxlKGU9PmEuZmlyZShlKSl9LG9uRmlyc3RMaXN0ZW5lckRpZEFkZCgpe24mJih0P3NldFRpbWVvdXQobyk6bygpKX0sb25MYXN0TGlzdGVuZXJSZW1vdmUoKXtpJiZpLmRpc3Bvc2UoKSxpPW51bGx9fSk7cmV0dXJuIGEuZXZlbnR9O2NsYXNzIG9he2NvbnN0cnVjdG9yKGUpe3RoaXMuZXZlbnQ9ZX1tYXAoZSl7cmV0dXJuIG5ldyBvYShxKHRoaXMuZXZlbnQsZSkpfWZvckVhY2goZSl7cmV0dXJuIG5ldyBvYSgkKHRoaXMuZXZlbnQsZSkpfWZpbHRlcihlKXtyZXR1cm4gbmV3IG9hKFcodGhpcy5ldmVudCxlKSl9cmVkdWNlKGUsdCl7cmV0dXJuIG5ldyBvYShIKHRoaXMuZXZlbnQsZSx0KSl9bGF0Y2goKXtyZXR1cm4gbmV3IG9hKEcodGhpcy5ldmVudCkpfWRlYm91bmNlKGUsdD0xMDAscj0hMSxuKXtyZXR1cm4gbmV3IG9hKEoodGhpcy5ldmVudCxlLHQscixuKSl9b24oZSx0LHIpe3JldHVybiB0aGlzLmV2ZW50KGUsdCxyKX1vbmNlKGUsdCxyKXtyZXR1cm4gQih0aGlzLmV2ZW50KShlLHQscil9fVUuY2hhaW49ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBvYShlKX0sVS5mcm9tTm9kZUV2ZW50RW1pdHRlcj1mdW5jdGlvbihlLHQscj1lPT5lKXtjb25zdCBuPSguLi5lKT0+aS5maXJlKHIoLi4uZSkpLGk9bmV3IFgoe29uRmlyc3RMaXN0ZW5lckFkZDooKT0+ZS5vbih0LG4pLG9uTGFzdExpc3RlbmVyUmVtb3ZlOigpPT5lLnJlbW92ZUxpc3RlbmVyKHQsbil9KTtyZXR1cm4gaS5ldmVudH0sVS5mcm9tRE9NRXZlbnRFbWl0dGVyPWZ1bmN0aW9uKGUsdCxyPWU9PmUpe2NvbnN0IG49KC4uLmUpPT5pLmZpcmUociguLi5lKSksaT1uZXcgWCh7b25GaXJzdExpc3RlbmVyQWRkOigpPT5lLmFkZEV2ZW50TGlzdGVuZXIodCxuKSxvbkxhc3RMaXN0ZW5lclJlbW92ZTooKT0+ZS5yZW1vdmVFdmVudExpc3RlbmVyKHQsbil9KTtyZXR1cm4gaS5ldmVudH0sVS50b1Byb21pc2U9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBQcm9taXNlKGU9PkIodCkoZSkpfSxVLnJ1bkFuZFN1YnNjcmliZT1mdW5jdGlvbihlLHQpe3JldHVybiB0KHZvaWQgMCksZShlPT50KGUpKX0sVS5ydW5BbmRTdWJzY3JpYmVXaXRoU3RvcmU9ZnVuY3Rpb24oZSx0KXtsZXQgcj1udWxsO2Z1bmN0aW9uIG4oZSl7bnVsbCE9PXImJnZvaWQgMCE9PXImJnIuZGlzcG9zZSgpLHI9bmV3IEMsdChlLHIpfW4odm9pZCAwKTtjb25zdCBpPWUoZT0+bihlKSk7cmV0dXJuIHkoKCk9PntpLmRpc3Bvc2UoKSxudWxsIT09ciYmdm9pZCAwIT09ciYmci5kaXNwb3NlKCl9KX19Y2xhc3MgWntjb25zdHJ1Y3RvcihlKXt0aGlzLl9saXN0ZW5lckNvdW50PTAsdGhpcy5faW52b2NhdGlvbkNvdW50PTAsdGhpcy5fZWxhcHNlZE92ZXJhbGw9MCx0aGlzLl9uYW1lPWUrIl8iK1ouX2lkUG9vbCsrfXN0YXJ0KGUpe3RoaXMuX3N0b3BXYXRjaD1uZXcgaighMCksdGhpcy5fbGlzdGVuZXJDb3VudD1lfXN0b3AoKXtpZih0aGlzLl9zdG9wV2F0Y2gpe2NvbnN0IGU9dGhpcy5fc3RvcFdhdGNoLmVsYXBzZWQoKTt0aGlzLl9lbGFwc2VkT3ZlcmFsbCs9ZSx0aGlzLl9pbnZvY2F0aW9uQ291bnQrPTEsY29uc29sZS5pbmZvKGBkaWQgRklSRSAke3RoaXMuX25hbWV9OiBlbGFwc2VkX21zOiAke2UudG9GaXhlZCg1KX0sIGxpc3RlbmVyOiAke3RoaXMuX2xpc3RlbmVyQ291bnR9IChlbGFwc2VkX292ZXJhbGw6ICR7dGhpcy5fZWxhcHNlZE92ZXJhbGwudG9GaXhlZCgyKX0sIGludm9jYXRpb25zOiAke3RoaXMuX2ludm9jYXRpb25Db3VudH0pYCksdGhpcy5fc3RvcFdhdGNoPXZvaWQgMH19fVouX2lkUG9vbD0wO2NsYXNzIFh7Y29uc3RydWN0b3IoZSl7dGhpcy5fZGlzcG9zZWQ9ITEsdGhpcy5fb3B0aW9ucz1lLHRoaXMuX2xlYWthZ2VNb249dm9pZCAwLHRoaXMuX3BlcmZNb249bnVsbCE9PShlPXRoaXMuX29wdGlvbnMpJiZ2b2lkIDAhPT1lJiZlLl9wcm9mTmFtZT9uZXcgWih0aGlzLl9vcHRpb25zLl9wcm9mTmFtZSk6dm9pZCAwfWdldCBldmVudCgpe3JldHVybiB0aGlzLl9ldmVudHx8KHRoaXMuX2V2ZW50PShlLHQscik9Pnt0aGlzLl9saXN0ZW5lcnN8fCh0aGlzLl9saXN0ZW5lcnM9bmV3IFMpO3ZhciBuPXRoaXMuX2xpc3RlbmVycy5pc0VtcHR5KCk7biYmdGhpcy5fb3B0aW9ucyYmdGhpcy5fb3B0aW9ucy5vbkZpcnN0TGlzdGVuZXJBZGQmJnRoaXMuX29wdGlvbnMub25GaXJzdExpc3RlbmVyQWRkKHRoaXMpO2NvbnN0IGk9dGhpcy5fbGlzdGVuZXJzLnB1c2godD9bZSx0XTplKSxvPShuJiZ0aGlzLl9vcHRpb25zJiZ0aGlzLl9vcHRpb25zLm9uRmlyc3RMaXN0ZW5lckRpZEFkZCYmdGhpcy5fb3B0aW9ucy5vbkZpcnN0TGlzdGVuZXJEaWRBZGQodGhpcyksdGhpcy5fb3B0aW9ucyYmdGhpcy5fb3B0aW9ucy5vbkxpc3RlbmVyRGlkQWRkJiZ0aGlzLl9vcHRpb25zLm9uTGlzdGVuZXJEaWRBZGQodGhpcyxlLHQpLG51bGw9PT0obj10aGlzLl9sZWFrYWdlTW9uKXx8dm9pZCAwPT09bj92b2lkIDA6bi5jaGVjayh0aGlzLl9saXN0ZW5lcnMuc2l6ZSkpO2U9eSgoKT0+e28mJm8oKSx0aGlzLl9kaXNwb3NlZHx8KGkoKSx0aGlzLl9vcHRpb25zJiZ0aGlzLl9vcHRpb25zLm9uTGFzdExpc3RlbmVyUmVtb3ZlJiYodGhpcy5fbGlzdGVuZXJzJiYhdGhpcy5fbGlzdGVuZXJzLmlzRW1wdHkoKXx8dGhpcy5fb3B0aW9ucy5vbkxhc3RMaXN0ZW5lclJlbW92ZSh0aGlzKSkpfSk7cmV0dXJuIHIgaW5zdGFuY2VvZiBDP3IuYWRkKGUpOkFycmF5LmlzQXJyYXkocikmJnIucHVzaChlKSxlfSksdGhpcy5fZXZlbnR9ZmlyZShlKXt2YXIgdDtpZih0aGlzLl9saXN0ZW5lcnMpe3RoaXMuX2RlbGl2ZXJ5UXVldWV8fCh0aGlzLl9kZWxpdmVyeVF1ZXVlPW5ldyBTKTtmb3IodmFyIHIgb2YgdGhpcy5fbGlzdGVuZXJzKXRoaXMuX2RlbGl2ZXJ5UXVldWUucHVzaChbcixlXSk7Zm9yKG51bGwhPT0odD10aGlzLl9wZXJmTW9uKSYmdm9pZCAwIT09dCYmdC5zdGFydCh0aGlzLl9kZWxpdmVyeVF1ZXVlLnNpemUpOzA8dGhpcy5fZGVsaXZlcnlRdWV1ZS5zaXplOyl7Y29uc3RbbixlXT10aGlzLl9kZWxpdmVyeVF1ZXVlLnNoaWZ0KCk7dHJ5eyJmdW5jdGlvbiI9PXR5cGVvZiBuP24uY2FsbCh2b2lkIDAsZSk6blswXS5jYWxsKG5bMV0sZSl9Y2F0Y2goZSl7dShlKX19bnVsbCE9PSh0PXRoaXMuX3BlcmZNb24pJiZ2b2lkIDAhPT10JiZ0LnN0b3AoKX19ZGlzcG9zZSgpe3ZhciBlLHQ7dGhpcy5fZGlzcG9zZWR8fCh0aGlzLl9kaXNwb3NlZD0hMCxudWxsIT09KGU9dGhpcy5fbGlzdGVuZXJzKSYmdm9pZCAwIT09ZSYmZS5jbGVhcigpLG51bGwhPT0oZT10aGlzLl9kZWxpdmVyeVF1ZXVlKSYmdm9pZCAwIT09ZSYmZS5jbGVhcigpLG51bGwhPT0odD1udWxsPT09KGU9dGhpcy5fb3B0aW9ucyl8fHZvaWQgMD09PWU/dm9pZCAwOmUub25MYXN0TGlzdGVuZXJSZW1vdmUpJiZ2b2lkIDAhPT10JiZ0LmNhbGwoZSksbnVsbCE9PSh0PXRoaXMuX2xlYWthZ2VNb24pJiZ2b2lkIDAhPT10JiZ0LmRpc3Bvc2UoKSl9fWZ1bmN0aW9uIFEoZSl7Y29uc3QgdD1bXTtmb3IoY29uc3QgciBvZiBmdW5jdGlvbihlKXtsZXQgdD1bXSxyPU9iamVjdC5nZXRQcm90b3R5cGVPZihlKTtmb3IoO09iamVjdC5wcm90b3R5cGUhPT1yOyl0PXQuY29uY2F0KE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHIpKSxyPU9iamVjdC5nZXRQcm90b3R5cGVPZihyKTtyZXR1cm4gdH0oZSkpImZ1bmN0aW9uIj09dHlwZW9mIGVbcl0mJnQucHVzaChyKTtyZXR1cm4gdH1mdW5jdGlvbiBZKGUscil7bGV0IHQ9e307Zm9yKGNvbnN0IG4gb2YgZSl0W25dPSh0PT5mdW5jdGlvbigpe3ZhciBlPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywwKTtyZXR1cm4gcih0LGUpfSkobik7cmV0dXJuIHR9Y2xhc3MgZWV7Y29uc3RydWN0b3IoZSl7dGhpcy5leGVjdXRvcj1lLHRoaXMuX2RpZFJ1bj0hMX1nZXRWYWx1ZSgpe2lmKCF0aGlzLl9kaWRSdW4pdHJ5e3RoaXMuX3ZhbHVlPXRoaXMuZXhlY3V0b3IoKX1jYXRjaChlKXt0aGlzLl9lcnJvcj1lfWZpbmFsbHl7dGhpcy5fZGlkUnVuPSEwfWlmKHRoaXMuX2Vycm9yKXRocm93IHRoaXMuX2Vycm9yO3JldHVybiB0aGlzLl92YWx1ZX1nZXQgcmF3VmFsdWUoKXtyZXR1cm4gdGhpcy5fdmFsdWV9fWZ1bmN0aW9uIHRlKGUpe3JldHVybiBlLnJlcGxhY2UoL1tcXFx7XH1cKlwrXD9cfFxeXCRcLlxbXF1cKFwpXS9nLCJcXCQmIil9ZnVuY3Rpb24gcmUocixuLGk9MCxvPXIubGVuZ3RoLGE9MCxzPW4ubGVuZ3RoKXtmb3IoO2k8byYmYTxzO2krKyxhKyspe2xldCBlPXIuY2hhckNvZGVBdChpKSx0PW4uY2hhckNvZGVBdChhKTtpZihlIT09dCl7aWYoMTI4PD1lfHwxMjg8PXQpcmV0dXJuIGZ1bmN0aW9uKGUsdCxyPTAsbj1lLmxlbmd0aCxpPTAsbz10Lmxlbmd0aCl7Zm9yKDtyPG4mJmk8bztyKyssaSsrKXt2YXIgYT1lLmNoYXJDb2RlQXQocikscz10LmNoYXJDb2RlQXQoaSk7aWYoYTxzKXJldHVybi0xO2lmKHM8YSlyZXR1cm4gMX12YXIgbD1uLXIsYz1vLWk7cmV0dXJuIGw8Yz8tMTpjPGw/MTowfShyLnRvTG93ZXJDYXNlKCksbi50b0xvd2VyQ2FzZSgpLGksbyxhLHMpO25lKGUpJiYoZS09MzIpLG5lKHQpJiYodC09MzIpO3ZhciBsPWUtdDtpZigwIT1sKXJldHVybiBsfX12YXIgZT1vLWksdD1zLWE7cmV0dXJuIGU8dD8tMTp0PGU/MTowfWZ1bmN0aW9uIG5lKGUpe3JldHVybiA5Nzw9ZSYmZTw9MTIyfWZ1bmN0aW9uIGllKGUpe3JldHVybiA2NTw9ZSYmZTw9OTB9ZnVuY3Rpb24gb2UoZSx0KXt2YXIgcj10Lmxlbmd0aDtyZXR1cm4hKHQubGVuZ3RoPmUubGVuZ3RoKSYmMD09PXJlKGUsdCwwLHIpfWZ1bmN0aW9uIGFlKGUpe3JldHVybiA1NTI5Njw9ZSYmZTw9NTYzMTl9Y2xhc3Mgc2V7Y29uc3RydWN0b3IoZSl7dGhpcy5jb25mdXNhYmxlRGljdGlvbmFyeT1lfXN0YXRpYyBnZXRJbnN0YW5jZShlKXtyZXR1cm4gc2UuY2FjaGUuZ2V0KEFycmF5LmZyb20oZSkpfXN0YXRpYyBnZXRMb2NhbGVzKCl7cmV0dXJuIHNlLl9sb2NhbGVzLmdldFZhbHVlKCl9aXNBbWJpZ3VvdXMoZSl7cmV0dXJuIHRoaXMuY29uZnVzYWJsZURpY3Rpb25hcnkuaGFzKGUpfWdldFByaW1hcnlDb25mdXNhYmxlKGUpe3JldHVybiB0aGlzLmNvbmZ1c2FibGVEaWN0aW9uYXJ5LmdldChlKX1nZXRDb25mdXNhYmxlQ29kZVBvaW50cygpe3JldHVybiBuZXcgU2V0KHRoaXMuY29uZnVzYWJsZURpY3Rpb25hcnkua2V5cygpKX19KEY9c2UpLmFtYmlndW91c0NoYXJhY3RlckRhdGE9bmV3IGVlKCgpPT5KU09OLnBhcnNlKCd7Il9jb21tb24iOls4MjMyLDMyLDgyMzMsMzIsNTc2MCwzMiw4MTkyLDMyLDgxOTMsMzIsODE5NCwzMiw4MTk1LDMyLDgxOTYsMzIsODE5NywzMiw4MTk4LDMyLDgyMDAsMzIsODIwMSwzMiw4MjAyLDMyLDgyODcsMzIsODE5OSwzMiw4MjM5LDMyLDIwNDIsOTUsNjUxMDEsOTUsNjUxMDIsOTUsNjUxMDMsOTUsODIwOCw0NSw4MjA5LDQ1LDgyMTAsNDUsNjUxMTIsNDUsMTc0OCw0NSw4MjU5LDQ1LDcyNyw0NSw4NzIyLDQ1LDEwMTM0LDQ1LDExNDUwLDQ1LDE1NDksNDQsMTY0Myw0NCw4MjE4LDQ0LDE4NCw0NCw0MjIzMyw0NCw4OTQsNTksMjMwNyw1OCwyNjkxLDU4LDE0MTcsNTgsMTc5NSw1OCwxNzk2LDU4LDU4NjgsNTgsNjUwNzIsNTgsNjE0Nyw1OCw2MTUzLDU4LDgyODIsNTgsMTQ3NSw1OCw3NjAsNTgsNDI4ODksNTgsODc1OCw1OCw3MjAsNTgsNDIyMzcsNTgsNDUxLDMzLDExNjAxLDMzLDY2MCw2Myw1NzcsNjMsMjQyOSw2Myw1MDM4LDYzLDQyNzMxLDYzLDExOTE0OSw0Niw4MjI4LDQ2LDE3OTMsNDYsMTc5NCw0Niw0MjUxMCw0Niw2ODE3Niw0NiwxNjMyLDQ2LDE3NzYsNDYsNDIyMzIsNDYsMTM3Myw5Niw2NTI4Nyw5Niw4MjE5LDk2LDgyNDIsOTYsMTM3MCw5NiwxNTIzLDk2LDgxNzUsOTYsNjUzNDQsOTYsOTAwLDk2LDgxODksOTYsODEyNSw5Niw4MTI3LDk2LDgxOTAsOTYsNjk3LDk2LDg4NCw5Niw3MTIsOTYsNzE0LDk2LDcxNSw5Niw3NTYsOTYsNjk5LDk2LDcwMSw5Niw3MDAsOTYsNzAyLDk2LDQyODkyLDk2LDE0OTcsOTYsMjAzNiw5NiwyMDM3LDk2LDUxOTQsOTYsNTgzNiw5Niw5NDAzMyw5Niw5NDAzNCw5Niw2NTMzOSw5MSwxMDA4OCw0MCwxMDA5OCw0MCwxMjMwOCw0MCw2NDgzMCw0MCw2NTM0MSw5MywxMDA4OSw0MSwxMDA5OSw0MSwxMjMwOSw0MSw2NDgzMSw0MSwxMDEwMCwxMjMsMTE5MDYwLDEyMywxMDEwMSwxMjUsNjUzNDIsOTQsODI3MCw0MiwxNjQ1LDQyLDg3MjcsNDIsNjYzMzUsNDIsNTk0MSw0Nyw4MjU3LDQ3LDg3MjUsNDcsODI2MCw0Nyw5NTg1LDQ3LDEwMTg3LDQ3LDEwNzQ0LDQ3LDExOTM1NCw0NywxMjc1NSw0NywxMjMzOSw0NywxMTQ2Miw0NywyMDAzMSw0NywxMjAzNSw0Nyw2NTM0MCw5Miw2NTEyOCw5Miw4NzI2LDkyLDEwMTg5LDkyLDEwNzQxLDkyLDEwNzQ1LDkyLDExOTMxMSw5MiwxMTkzNTUsOTIsMTI3NTYsOTIsMjAwMjIsOTIsMTIwMzQsOTIsNDI4NzIsMzgsNzA4LDk0LDcxMCw5NCw1ODY5LDQzLDEwMTMzLDQzLDY2MjAzLDQzLDgyNDksNjAsMTAwOTQsNjAsNzA2LDYwLDExOTM1MCw2MCw1MTc2LDYwLDU4MTAsNjAsNTEyMCw2MSwxMTg0MCw2MSwxMjQ0OCw2MSw0MjIzOSw2MSw4MjUwLDYyLDEwMDk1LDYyLDcwNyw2MiwxMTkzNTEsNjIsNTE3MSw2Miw5NDAxNSw2Miw4Mjc1LDEyNiw3MzIsMTI2LDgxMjgsMTI2LDg3NjQsMTI2LDY1MzcyLDEyNCw2NTI5Myw0NSwxMjA3ODQsNTAsMTIwNzk0LDUwLDEyMDgwNCw1MCwxMjA4MTQsNTAsMTIwODI0LDUwLDEzMDAzNCw1MCw0Mjg0Miw1MCw0MjMsNTAsMTAwMCw1MCw0MjU2NCw1MCw1MzExLDUwLDQyNzM1LDUwLDExOTMwMiw1MSwxMjA3ODUsNTEsMTIwNzk1LDUxLDEyMDgwNSw1MSwxMjA4MTUsNTEsMTIwODI1LDUxLDEzMDAzNSw1MSw0MjkyMyw1MSw1NDAsNTEsNDM5LDUxLDQyODU4LDUxLDExNDY4LDUxLDEyNDgsNTEsOTQwMTEsNTEsNzE4ODIsNTEsMTIwNzg2LDUyLDEyMDc5Niw1MiwxMjA4MDYsNTIsMTIwODE2LDUyLDEyMDgyNiw1MiwxMzAwMzYsNTIsNTA3MCw1Miw3MTg1NSw1MiwxMjA3ODcsNTMsMTIwNzk3LDUzLDEyMDgwNyw1MywxMjA4MTcsNTMsMTIwODI3LDUzLDEzMDAzNyw1Myw0NDQsNTMsNzE4NjcsNTMsMTIwNzg4LDU0LDEyMDc5OCw1NCwxMjA4MDgsNTQsMTIwODE4LDU0LDEyMDgyOCw1NCwxMzAwMzgsNTQsMTE0NzQsNTQsNTEwMiw1NCw3MTg5Myw1NCwxMTkzMTQsNTUsMTIwNzg5LDU1LDEyMDc5OSw1NSwxMjA4MDksNTUsMTIwODE5LDU1LDEyMDgyOSw1NSwxMzAwMzksNTUsNjY3NzAsNTUsNzE4NzgsNTUsMjgxOSw1NiwyNTM4LDU2LDI2NjYsNTYsMTI1MTMxLDU2LDEyMDc5MCw1NiwxMjA4MDAsNTYsMTIwODEwLDU2LDEyMDgyMCw1NiwxMjA4MzAsNTYsMTMwMDQwLDU2LDU0Nyw1Niw1NDYsNTYsNjYzMzAsNTYsMjY2Myw1NywyOTIwLDU3LDI1NDEsNTcsMzQzNyw1NywxMjA3OTEsNTcsMTIwODAxLDU3LDEyMDgxMSw1NywxMjA4MjEsNTcsMTIwODMxLDU3LDEzMDA0MSw1Nyw0Mjg2Miw1NywxMTQ2Niw1Nyw3MTg4NCw1Nyw3MTg1Miw1Nyw3MTg5NCw1Nyw5MDgyLDk3LDY1MzQ1LDk3LDExOTgzNCw5NywxMTk4ODYsOTcsMTE5OTM4LDk3LDExOTk5MCw5NywxMjAwNDIsOTcsMTIwMDk0LDk3LDEyMDE0Niw5NywxMjAxOTgsOTcsMTIwMjUwLDk3LDEyMDMwMiw5NywxMjAzNTQsOTcsMTIwNDA2LDk3LDEyMDQ1OCw5Nyw1OTMsOTcsOTQ1LDk3LDEyMDUxNCw5NywxMjA1NzIsOTcsMTIwNjMwLDk3LDEyMDY4OCw5NywxMjA3NDYsOTcsNjUzMTMsNjUsMTE5ODA4LDY1LDExOTg2MCw2NSwxMTk5MTIsNjUsMTE5OTY0LDY1LDEyMDAxNiw2NSwxMjAwNjgsNjUsMTIwMTIwLDY1LDEyMDE3Miw2NSwxMjAyMjQsNjUsMTIwMjc2LDY1LDEyMDMyOCw2NSwxMjAzODAsNjUsMTIwNDMyLDY1LDkxMyw2NSwxMjA0ODgsNjUsMTIwNTQ2LDY1LDEyMDYwNCw2NSwxMjA2NjIsNjUsMTIwNzIwLDY1LDUwMzQsNjUsNTU3Myw2NSw0MjIyMiw2NSw5NDAxNiw2NSw2NjIwOCw2NSwxMTk4MzUsOTgsMTE5ODg3LDk4LDExOTkzOSw5OCwxMTk5OTEsOTgsMTIwMDQzLDk4LDEyMDA5NSw5OCwxMjAxNDcsOTgsMTIwMTk5LDk4LDEyMDI1MSw5OCwxMjAzMDMsOTgsMTIwMzU1LDk4LDEyMDQwNyw5OCwxMjA0NTksOTgsMzg4LDk4LDUwNzEsOTgsNTIzNCw5OCw1NTUxLDk4LDY1MzE0LDY2LDg0OTIsNjYsMTE5ODA5LDY2LDExOTg2MSw2NiwxMTk5MTMsNjYsMTIwMDE3LDY2LDEyMDA2OSw2NiwxMjAxMjEsNjYsMTIwMTczLDY2LDEyMDIyNSw2NiwxMjAyNzcsNjYsMTIwMzI5LDY2LDEyMDM4MSw2NiwxMjA0MzMsNjYsNDI5MzIsNjYsOTE0LDY2LDEyMDQ4OSw2NiwxMjA1NDcsNjYsMTIwNjA1LDY2LDEyMDY2Myw2NiwxMjA3MjEsNjYsNTEwOCw2Niw1NjIzLDY2LDQyMTkyLDY2LDY2MTc4LDY2LDY2MjA5LDY2LDY2MzA1LDY2LDY1MzQ3LDk5LDg1NzMsOTksMTE5ODM2LDk5LDExOTg4OCw5OSwxMTk5NDAsOTksMTE5OTkyLDk5LDEyMDA0NCw5OSwxMjAwOTYsOTksMTIwMTQ4LDk5LDEyMDIwMCw5OSwxMjAyNTIsOTksMTIwMzA0LDk5LDEyMDM1Niw5OSwxMjA0MDgsOTksMTIwNDYwLDk5LDc0MjgsOTksMTAxMCw5OSwxMTQyOSw5OSw0Mzk1MSw5OSw2NjYyMSw5OSwxMjg4NDQsNjcsNzE5MjIsNjcsNzE5MTMsNjcsNjUzMTUsNjcsODU1Nyw2Nyw4NDUwLDY3LDg0OTMsNjcsMTE5ODEwLDY3LDExOTg2Miw2NywxMTk5MTQsNjcsMTE5OTY2LDY3LDEyMDAxOCw2NywxMjAxNzQsNjcsMTIwMjI2LDY3LDEyMDI3OCw2NywxMjAzMzAsNjcsMTIwMzgyLDY3LDEyMDQzNCw2NywxMDE3LDY3LDExNDI4LDY3LDUwODcsNjcsNDIyMDIsNjcsNjYyMTAsNjcsNjYzMDYsNjcsNjY1ODEsNjcsNjY4NDQsNjcsODU3NCwxMDAsODUxOCwxMDAsMTE5ODM3LDEwMCwxMTk4ODksMTAwLDExOTk0MSwxMDAsMTE5OTkzLDEwMCwxMjAwNDUsMTAwLDEyMDA5NywxMDAsMTIwMTQ5LDEwMCwxMjAyMDEsMTAwLDEyMDI1MywxMDAsMTIwMzA1LDEwMCwxMjAzNTcsMTAwLDEyMDQwOSwxMDAsMTIwNDYxLDEwMCwxMjgxLDEwMCw1MDk1LDEwMCw1MjMxLDEwMCw0MjE5NCwxMDAsODU1OCw2OCw4NTE3LDY4LDExOTgxMSw2OCwxMTk4NjMsNjgsMTE5OTE1LDY4LDExOTk2Nyw2OCwxMjAwMTksNjgsMTIwMDcxLDY4LDEyMDEyMyw2OCwxMjAxNzUsNjgsMTIwMjI3LDY4LDEyMDI3OSw2OCwxMjAzMzEsNjgsMTIwMzgzLDY4LDEyMDQzNSw2OCw1MDI0LDY4LDU1OTgsNjgsNTYxMCw2OCw0MjE5NSw2OCw4NDk0LDEwMSw2NTM0OSwxMDEsODQ5NSwxMDEsODUxOSwxMDEsMTE5ODM4LDEwMSwxMTk4OTAsMTAxLDExOTk0MiwxMDEsMTIwMDQ2LDEwMSwxMjAwOTgsMTAxLDEyMDE1MCwxMDEsMTIwMjAyLDEwMSwxMjAyNTQsMTAxLDEyMDMwNiwxMDEsMTIwMzU4LDEwMSwxMjA0MTAsMTAxLDEyMDQ2MiwxMDEsNDM4MjYsMTAxLDEyMTMsMTAxLDg5NTksNjksNjUzMTcsNjksODQ5Niw2OSwxMTk4MTIsNjksMTE5ODY0LDY5LDExOTkxNiw2OSwxMjAwMjAsNjksMTIwMDcyLDY5LDEyMDEyNCw2OSwxMjAxNzYsNjksMTIwMjI4LDY5LDEyMDI4MCw2OSwxMjAzMzIsNjksMTIwMzg0LDY5LDEyMDQzNiw2OSw5MTcsNjksMTIwNDkyLDY5LDEyMDU1MCw2OSwxMjA2MDgsNjksMTIwNjY2LDY5LDEyMDcyNCw2OSwxMTU3Nyw2OSw1MDM2LDY5LDQyMjI0LDY5LDcxODQ2LDY5LDcxODU0LDY5LDY2MTgyLDY5LDExOTgzOSwxMDIsMTE5ODkxLDEwMiwxMTk5NDMsMTAyLDExOTk5NSwxMDIsMTIwMDQ3LDEwMiwxMjAwOTksMTAyLDEyMDE1MSwxMDIsMTIwMjAzLDEwMiwxMjAyNTUsMTAyLDEyMDMwNywxMDIsMTIwMzU5LDEwMiwxMjA0MTEsMTAyLDEyMDQ2MywxMDIsNDM4MjksMTAyLDQyOTA1LDEwMiwzODMsMTAyLDc4MzcsMTAyLDE0MTIsMTAyLDExOTMxNSw3MCw4NDk3LDcwLDExOTgxMyw3MCwxMTk4NjUsNzAsMTE5OTE3LDcwLDEyMDAyMSw3MCwxMjAwNzMsNzAsMTIwMTI1LDcwLDEyMDE3Nyw3MCwxMjAyMjksNzAsMTIwMjgxLDcwLDEyMDMzMyw3MCwxMjAzODUsNzAsMTIwNDM3LDcwLDQyOTA0LDcwLDk4OCw3MCwxMjA3NzgsNzAsNTU1Niw3MCw0MjIwNSw3MCw3MTg3NCw3MCw3MTg0Miw3MCw2NjE4Myw3MCw2NjIxMyw3MCw2Njg1Myw3MCw2NTM1MSwxMDMsODQ1OCwxMDMsMTE5ODQwLDEwMywxMTk4OTIsMTAzLDExOTk0NCwxMDMsMTIwMDQ4LDEwMywxMjAxMDAsMTAzLDEyMDE1MiwxMDMsMTIwMjA0LDEwMywxMjAyNTYsMTAzLDEyMDMwOCwxMDMsMTIwMzYwLDEwMywxMjA0MTIsMTAzLDEyMDQ2NCwxMDMsNjA5LDEwMyw3NTU1LDEwMywzOTcsMTAzLDE0MDksMTAzLDExOTgxNCw3MSwxMTk4NjYsNzEsMTE5OTE4LDcxLDExOTk3MCw3MSwxMjAwMjIsNzEsMTIwMDc0LDcxLDEyMDEyNiw3MSwxMjAxNzgsNzEsMTIwMjMwLDcxLDEyMDI4Miw3MSwxMjAzMzQsNzEsMTIwMzg2LDcxLDEyMDQzOCw3MSwxMjkyLDcxLDUwNTYsNzEsNTEwNyw3MSw0MjE5OCw3MSw2NTM1MiwxMDQsODQ2MiwxMDQsMTE5ODQxLDEwNCwxMTk5NDUsMTA0LDExOTk5NywxMDQsMTIwMDQ5LDEwNCwxMjAxMDEsMTA0LDEyMDE1MywxMDQsMTIwMjA1LDEwNCwxMjAyNTcsMTA0LDEyMDMwOSwxMDQsMTIwMzYxLDEwNCwxMjA0MTMsMTA0LDEyMDQ2NSwxMDQsMTIxMSwxMDQsMTM5MiwxMDQsNTA1OCwxMDQsNjUzMjAsNzIsODQ1OSw3Miw4NDYwLDcyLDg0NjEsNzIsMTE5ODE1LDcyLDExOTg2Nyw3MiwxMTk5MTksNzIsMTIwMDIzLDcyLDEyMDE3OSw3MiwxMjAyMzEsNzIsMTIwMjgzLDcyLDEyMDMzNSw3MiwxMjAzODcsNzIsMTIwNDM5LDcyLDkxOSw3MiwxMjA0OTQsNzIsMTIwNTUyLDcyLDEyMDYxMCw3MiwxMjA2NjgsNzIsMTIwNzI2LDcyLDExNDA2LDcyLDUwNTEsNzIsNTUwMCw3Miw0MjIxNSw3Miw2NjI1NSw3Miw3MzEsMTA1LDkwNzUsMTA1LDY1MzUzLDEwNSw4NTYwLDEwNSw4NTA1LDEwNSw4NTIwLDEwNSwxMTk4NDIsMTA1LDExOTg5NCwxMDUsMTE5OTQ2LDEwNSwxMTk5OTgsMTA1LDEyMDA1MCwxMDUsMTIwMTAyLDEwNSwxMjAxNTQsMTA1LDEyMDIwNiwxMDUsMTIwMjU4LDEwNSwxMjAzMTAsMTA1LDEyMDM2MiwxMDUsMTIwNDE0LDEwNSwxMjA0NjYsMTA1LDEyMDQ4NCwxMDUsNjE4LDEwNSw2MTcsMTA1LDk1MywxMDUsODEyNiwxMDUsODkwLDEwNSwxMjA1MjIsMTA1LDEyMDU4MCwxMDUsMTIwNjM4LDEwNSwxMjA2OTYsMTA1LDEyMDc1NCwxMDUsMTExMCwxMDUsNDI1NjcsMTA1LDEyMzEsMTA1LDQzODkzLDEwNSw1MDI5LDEwNSw3MTg3NSwxMDUsNjUzNTQsMTA2LDg1MjEsMTA2LDExOTg0MywxMDYsMTE5ODk1LDEwNiwxMTk5NDcsMTA2LDExOTk5OSwxMDYsMTIwMDUxLDEwNiwxMjAxMDMsMTA2LDEyMDE1NSwxMDYsMTIwMjA3LDEwNiwxMjAyNTksMTA2LDEyMDMxMSwxMDYsMTIwMzYzLDEwNiwxMjA0MTUsMTA2LDEyMDQ2NywxMDYsMTAxMSwxMDYsMTExMiwxMDYsNjUzMjIsNzQsMTE5ODE3LDc0LDExOTg2OSw3NCwxMTk5MjEsNzQsMTE5OTczLDc0LDEyMDAyNSw3NCwxMjAwNzcsNzQsMTIwMTI5LDc0LDEyMDE4MSw3NCwxMjAyMzMsNzQsMTIwMjg1LDc0LDEyMDMzNyw3NCwxMjAzODksNzQsMTIwNDQxLDc0LDQyOTMwLDc0LDg5NSw3NCwxMDMyLDc0LDUwMzUsNzQsNTI2MSw3NCw0MjIwMSw3NCwxMTk4NDQsMTA3LDExOTg5NiwxMDcsMTE5OTQ4LDEwNywxMjAwMDAsMTA3LDEyMDA1MiwxMDcsMTIwMTA0LDEwNywxMjAxNTYsMTA3LDEyMDIwOCwxMDcsMTIwMjYwLDEwNywxMjAzMTIsMTA3LDEyMDM2NCwxMDcsMTIwNDE2LDEwNywxMjA0NjgsMTA3LDg0OTAsNzUsNjUzMjMsNzUsMTE5ODE4LDc1LDExOTg3MCw3NSwxMTk5MjIsNzUsMTE5OTc0LDc1LDEyMDAyNiw3NSwxMjAwNzgsNzUsMTIwMTMwLDc1LDEyMDE4Miw3NSwxMjAyMzQsNzUsMTIwMjg2LDc1LDEyMDMzOCw3NSwxMjAzOTAsNzUsMTIwNDQyLDc1LDkyMiw3NSwxMjA0OTcsNzUsMTIwNTU1LDc1LDEyMDYxMyw3NSwxMjA2NzEsNzUsMTIwNzI5LDc1LDExNDEyLDc1LDUwOTQsNzUsNTg0NSw3NSw0MjE5OSw3NSw2Njg0MCw3NSwxNDcyLDEwOCw4NzM5LDczLDkyMTMsNzMsNjU1MTIsNzMsMTYzMywxMDgsMTc3Nyw3Myw2NjMzNiwxMDgsMTI1MTI3LDEwOCwxMjA3ODMsNzMsMTIwNzkzLDczLDEyMDgwMyw3MywxMjA4MTMsNzMsMTIwODIzLDczLDEzMDAzMyw3Myw2NTMyMSw3Myw4NTQ0LDczLDg0NjQsNzMsODQ2NSw3MywxMTk4MTYsNzMsMTE5ODY4LDczLDExOTkyMCw3MywxMjAwMjQsNzMsMTIwMTI4LDczLDEyMDE4MCw3MywxMjAyMzIsNzMsMTIwMjg0LDczLDEyMDMzNiw3MywxMjAzODgsNzMsMTIwNDQwLDczLDY1MzU2LDEwOCw4NTcyLDczLDg0NjcsMTA4LDExOTg0NSwxMDgsMTE5ODk3LDEwOCwxMTk5NDksMTA4LDEyMDAwMSwxMDgsMTIwMDUzLDEwOCwxMjAxMDUsNzMsMTIwMTU3LDczLDEyMDIwOSw3MywxMjAyNjEsNzMsMTIwMzEzLDczLDEyMDM2NSw3MywxMjA0MTcsNzMsMTIwNDY5LDczLDQ0OCw3MywxMjA0OTYsNzMsMTIwNTU0LDczLDEyMDYxMiw3MywxMjA2NzAsNzMsMTIwNzI4LDczLDExNDEwLDczLDEwMzAsNzMsMTIxNiw3MywxNDkzLDEwOCwxNTAzLDEwOCwxNTc1LDEwOCwxMjY0NjQsMTA4LDEyNjU5MiwxMDgsNjUxNjYsMTA4LDY1MTY1LDEwOCwxOTk0LDEwOCwxMTU5OSw3Myw1ODI1LDczLDQyMjI2LDczLDkzOTkyLDczLDY2MTg2LDEyNCw2NjMxMywxMjQsMTE5MzM4LDc2LDg1NTYsNzYsODQ2Niw3NiwxMTk4MTksNzYsMTE5ODcxLDc2LDExOTkyMyw3NiwxMjAwMjcsNzYsMTIwMDc5LDc2LDEyMDEzMSw3NiwxMjAxODMsNzYsMTIwMjM1LDc2LDEyMDI4Nyw3NiwxMjAzMzksNzYsMTIwMzkxLDc2LDEyMDQ0Myw3NiwxMTQ3Miw3Niw1MDg2LDc2LDUyOTAsNzYsNDIyMDksNzYsOTM5NzQsNzYsNzE4NDMsNzYsNzE4NTgsNzYsNjY1ODcsNzYsNjY4NTQsNzYsNjUzMjUsNzcsODU1OSw3Nyw4NDk5LDc3LDExOTgyMCw3NywxMTk4NzIsNzcsMTE5OTI0LDc3LDEyMDAyOCw3NywxMjAwODAsNzcsMTIwMTMyLDc3LDEyMDE4NCw3NywxMjAyMzYsNzcsMTIwMjg4LDc3LDEyMDM0MCw3NywxMjAzOTIsNzcsMTIwNDQ0LDc3LDkyNCw3NywxMjA0OTksNzcsMTIwNTU3LDc3LDEyMDYxNSw3NywxMjA2NzMsNzcsMTIwNzMxLDc3LDEwMTgsNzcsMTE0MTYsNzcsNTA0Nyw3Nyw1NjE2LDc3LDU4NDYsNzcsNDIyMDcsNzcsNjYyMjQsNzcsNjYzMjEsNzcsMTE5ODQ3LDExMCwxMTk4OTksMTEwLDExOTk1MSwxMTAsMTIwMDAzLDExMCwxMjAwNTUsMTEwLDEyMDEwNywxMTAsMTIwMTU5LDExMCwxMjAyMTEsMTEwLDEyMDI2MywxMTAsMTIwMzE1LDExMCwxMjAzNjcsMTEwLDEyMDQxOSwxMTAsMTIwNDcxLDExMCwxNDAwLDExMCwxNDA0LDExMCw2NTMyNiw3OCw4NDY5LDc4LDExOTgyMSw3OCwxMTk4NzMsNzgsMTE5OTI1LDc4LDExOTk3Nyw3OCwxMjAwMjksNzgsMTIwMDgxLDc4LDEyMDE4NSw3OCwxMjAyMzcsNzgsMTIwMjg5LDc4LDEyMDM0MSw3OCwxMjAzOTMsNzgsMTIwNDQ1LDc4LDkyNSw3OCwxMjA1MDAsNzgsMTIwNTU4LDc4LDEyMDYxNiw3OCwxMjA2NzQsNzgsMTIwNzMyLDc4LDExNDE4LDc4LDQyMjA4LDc4LDY2ODM1LDc4LDMwNzQsMTExLDMyMDIsMTExLDMzMzAsMTExLDM0NTgsMTExLDI0MDYsMTExLDI2NjIsMTExLDI3OTAsMTExLDMwNDYsMTExLDMxNzQsMTExLDMzMDIsMTExLDM0MzAsMTExLDM2NjQsMTExLDM3OTIsMTExLDQxNjAsMTExLDE2MzcsMTExLDE3ODEsMTExLDY1MzU5LDExMSw4NTAwLDExMSwxMTk4NDgsMTExLDExOTkwMCwxMTEsMTE5OTUyLDExMSwxMjAwNTYsMTExLDEyMDEwOCwxMTEsMTIwMTYwLDExMSwxMjAyMTIsMTExLDEyMDI2NCwxMTEsMTIwMzE2LDExMSwxMjAzNjgsMTExLDEyMDQyMCwxMTEsMTIwNDcyLDExMSw3NDM5LDExMSw3NDQxLDExMSw0MzgzNywxMTEsOTU5LDExMSwxMjA1MjgsMTExLDEyMDU4NiwxMTEsMTIwNjQ0LDExMSwxMjA3MDIsMTExLDEyMDc2MCwxMTEsOTYzLDExMSwxMjA1MzIsMTExLDEyMDU5MCwxMTEsMTIwNjQ4LDExMSwxMjA3MDYsMTExLDEyMDc2NCwxMTEsMTE0MjMsMTExLDQzNTEsMTExLDE0MTMsMTExLDE1MDUsMTExLDE2MDcsMTExLDEyNjUwMCwxMTEsMTI2NTY0LDExMSwxMjY1OTYsMTExLDY1MjU5LDExMSw2NTI2MCwxMTEsNjUyNTgsMTExLDY1MjU3LDExMSwxNzI2LDExMSw2NDQyOCwxMTEsNjQ0MjksMTExLDY0NDI3LDExMSw2NDQyNiwxMTEsMTcyOSwxMTEsNjQ0MjQsMTExLDY0NDI1LDExMSw2NDQyMywxMTEsNjQ0MjIsMTExLDE3NDksMTExLDMzNjAsMTExLDQxMjUsMTExLDY2Nzk0LDExMSw3MTg4MCwxMTEsNzE4OTUsMTExLDY2NjA0LDExMSwxOTg0LDc5LDI1MzQsNzksMjkxOCw3OSwxMjI5NSw3OSw3MDg2NCw3OSw3MTkwNCw3OSwxMjA3ODIsNzksMTIwNzkyLDc5LDEyMDgwMiw3OSwxMjA4MTIsNzksMTIwODIyLDc5LDEzMDAzMiw3OSw2NTMyNyw3OSwxMTk4MjIsNzksMTE5ODc0LDc5LDExOTkyNiw3OSwxMTk5NzgsNzksMTIwMDMwLDc5LDEyMDA4Miw3OSwxMjAxMzQsNzksMTIwMTg2LDc5LDEyMDIzOCw3OSwxMjAyOTAsNzksMTIwMzQyLDc5LDEyMDM5NCw3OSwxMjA0NDYsNzksOTI3LDc5LDEyMDUwMiw3OSwxMjA1NjAsNzksMTIwNjE4LDc5LDEyMDY3Niw3OSwxMjA3MzQsNzksMTE0MjIsNzksMTM2NSw3OSwxMTYwNCw3OSw0ODE2LDc5LDI4NDgsNzksNjY3NTQsNzksNDIyMjcsNzksNzE4NjEsNzksNjYxOTQsNzksNjYyMTksNzksNjY1NjQsNzksNjY4MzgsNzksOTA3NiwxMTIsNjUzNjAsMTEyLDExOTg0OSwxMTIsMTE5OTAxLDExMiwxMTk5NTMsMTEyLDEyMDAwNSwxMTIsMTIwMDU3LDExMiwxMjAxMDksMTEyLDEyMDE2MSwxMTIsMTIwMjEzLDExMiwxMjAyNjUsMTEyLDEyMDMxNywxMTIsMTIwMzY5LDExMiwxMjA0MjEsMTEyLDEyMDQ3MywxMTIsOTYxLDExMiwxMjA1MzAsMTEyLDEyMDU0NCwxMTIsMTIwNTg4LDExMiwxMjA2MDIsMTEyLDEyMDY0NiwxMTIsMTIwNjYwLDExMiwxMjA3MDQsMTEyLDEyMDcxOCwxMTIsMTIwNzYyLDExMiwxMjA3NzYsMTEyLDExNDI3LDExMiw2NTMyOCw4MCw4NDczLDgwLDExOTgyMyw4MCwxMTk4NzUsODAsMTE5OTI3LDgwLDExOTk3OSw4MCwxMjAwMzEsODAsMTIwMDgzLDgwLDEyMDE4Nyw4MCwxMjAyMzksODAsMTIwMjkxLDgwLDEyMDM0Myw4MCwxMjAzOTUsODAsMTIwNDQ3LDgwLDkyOSw4MCwxMjA1MDQsODAsMTIwNTYyLDgwLDEyMDYyMCw4MCwxMjA2NzgsODAsMTIwNzM2LDgwLDExNDI2LDgwLDUwOTAsODAsNTIyOSw4MCw0MjE5Myw4MCw2NjE5Nyw4MCwxMTk4NTAsMTEzLDExOTkwMiwxMTMsMTE5OTU0LDExMywxMjAwMDYsMTEzLDEyMDA1OCwxMTMsMTIwMTEwLDExMywxMjAxNjIsMTEzLDEyMDIxNCwxMTMsMTIwMjY2LDExMywxMjAzMTgsMTEzLDEyMDM3MCwxMTMsMTIwNDIyLDExMywxMjA0NzQsMTEzLDEzMDcsMTEzLDEzNzksMTEzLDEzODIsMTEzLDg0NzQsODEsMTE5ODI0LDgxLDExOTg3Niw4MSwxMTk5MjgsODEsMTE5OTgwLDgxLDEyMDAzMiw4MSwxMjAwODQsODEsMTIwMTg4LDgxLDEyMDI0MCw4MSwxMjAyOTIsODEsMTIwMzQ0LDgxLDEyMDM5Niw4MSwxMjA0NDgsODEsMTE2MDUsODEsMTE5ODUxLDExNCwxMTk5MDMsMTE0LDExOTk1NSwxMTQsMTIwMDA3LDExNCwxMjAwNTksMTE0LDEyMDExMSwxMTQsMTIwMTYzLDExNCwxMjAyMTUsMTE0LDEyMDI2NywxMTQsMTIwMzE5LDExNCwxMjAzNzEsMTE0LDEyMDQyMywxMTQsMTIwNDc1LDExNCw0Mzg0NywxMTQsNDM4NDgsMTE0LDc0NjIsMTE0LDExMzk3LDExNCw0MzkwNSwxMTQsMTE5MzE4LDgyLDg0NzUsODIsODQ3Niw4Miw4NDc3LDgyLDExOTgyNSw4MiwxMTk4NzcsODIsMTE5OTI5LDgyLDEyMDAzMyw4MiwxMjAxODksODIsMTIwMjQxLDgyLDEyMDI5Myw4MiwxMjAzNDUsODIsMTIwMzk3LDgyLDEyMDQ0OSw4Miw0MjIsODIsNTAyNSw4Miw1MDc0LDgyLDY2NzQwLDgyLDU1MTEsODIsNDIyMTEsODIsOTQwMDUsODIsNjUzNjMsMTE1LDExOTg1MiwxMTUsMTE5OTA0LDExNSwxMTk5NTYsMTE1LDEyMDAwOCwxMTUsMTIwMDYwLDExNSwxMjAxMTIsMTE1LDEyMDE2NCwxMTUsMTIwMjE2LDExNSwxMjAyNjgsMTE1LDEyMDMyMCwxMTUsMTIwMzcyLDExNSwxMjA0MjQsMTE1LDEyMDQ3NiwxMTUsNDI4MDEsMTE1LDQ0NSwxMTUsMTEwOSwxMTUsNDM5NDYsMTE1LDcxODczLDExNSw2NjYzMiwxMTUsNjUzMzEsODMsMTE5ODI2LDgzLDExOTg3OCw4MywxMTk5MzAsODMsMTE5OTgyLDgzLDEyMDAzNCw4MywxMjAwODYsODMsMTIwMTM4LDgzLDEyMDE5MCw4MywxMjAyNDIsODMsMTIwMjk0LDgzLDEyMDM0Niw4MywxMjAzOTgsODMsMTIwNDUwLDgzLDEwMjksODMsMTM1OSw4Myw1MDc3LDgzLDUwODIsODMsNDIyMTAsODMsOTQwMTAsODMsNjYxOTgsODMsNjY1OTIsODMsMTE5ODUzLDExNiwxMTk5MDUsMTE2LDExOTk1NywxMTYsMTIwMDA5LDExNiwxMjAwNjEsMTE2LDEyMDExMywxMTYsMTIwMTY1LDExNiwxMjAyMTcsMTE2LDEyMDI2OSwxMTYsMTIwMzIxLDExNiwxMjAzNzMsMTE2LDEyMDQyNSwxMTYsMTIwNDc3LDExNiw4ODY4LDg0LDEwMjAxLDg0LDEyODg3Miw4NCw2NTMzMiw4NCwxMTk4MjcsODQsMTE5ODc5LDg0LDExOTkzMSw4NCwxMTk5ODMsODQsMTIwMDM1LDg0LDEyMDA4Nyw4NCwxMjAxMzksODQsMTIwMTkxLDg0LDEyMDI0Myw4NCwxMjAyOTUsODQsMTIwMzQ3LDg0LDEyMDM5OSw4NCwxMjA0NTEsODQsOTMyLDg0LDEyMDUwNyw4NCwxMjA1NjUsODQsMTIwNjIzLDg0LDEyMDY4MSw4NCwxMjA3MzksODQsMTE0MzAsODQsNTAyNiw4NCw0MjE5Niw4NCw5Mzk2Miw4NCw3MTg2OCw4NCw2NjE5OSw4NCw2NjIyNSw4NCw2NjMyNSw4NCwxMTk4NTQsMTE3LDExOTkwNiwxMTcsMTE5OTU4LDExNywxMjAwMTAsMTE3LDEyMDA2MiwxMTcsMTIwMTE0LDExNywxMjAxNjYsMTE3LDEyMDIxOCwxMTcsMTIwMjcwLDExNywxMjAzMjIsMTE3LDEyMDM3NCwxMTcsMTIwNDI2LDExNywxMjA0NzgsMTE3LDQyOTExLDExNyw3NDUyLDExNyw0Mzg1NCwxMTcsNDM4NTgsMTE3LDY1MSwxMTcsOTY1LDExNywxMjA1MzQsMTE3LDEyMDU5MiwxMTcsMTIwNjUwLDExNywxMjA3MDgsMTE3LDEyMDc2NiwxMTcsMTQwNSwxMTcsNjY4MDYsMTE3LDcxODk2LDExNyw4NzQ2LDg1LDg4OTksODUsMTE5ODI4LDg1LDExOTg4MCw4NSwxMTk5MzIsODUsMTE5OTg0LDg1LDEyMDAzNiw4NSwxMjAwODgsODUsMTIwMTQwLDg1LDEyMDE5Miw4NSwxMjAyNDQsODUsMTIwMjk2LDg1LDEyMDM0OCw4NSwxMjA0MDAsODUsMTIwNDUyLDg1LDEzNTcsODUsNDYwOCw4NSw2Njc2Niw4NSw1MTk2LDg1LDQyMjI4LDg1LDk0MDE4LDg1LDcxODY0LDg1LDg3NDQsMTE4LDg4OTcsMTE4LDY1MzY2LDExOCw4NTY0LDExOCwxMTk4NTUsMTE4LDExOTkwNywxMTgsMTE5OTU5LDExOCwxMjAwMTEsMTE4LDEyMDA2MywxMTgsMTIwMTE1LDExOCwxMjAxNjcsMTE4LDEyMDIxOSwxMTgsMTIwMjcxLDExOCwxMjAzMjMsMTE4LDEyMDM3NSwxMTgsMTIwNDI3LDExOCwxMjA0NzksMTE4LDc0NTYsMTE4LDk1NywxMTgsMTIwNTI2LDExOCwxMjA1ODQsMTE4LDEyMDY0MiwxMTgsMTIwNzAwLDExOCwxMjA3NTgsMTE4LDExNDEsMTE4LDE0OTYsMTE4LDcxNDMwLDExOCw0Mzk0NSwxMTgsNzE4NzIsMTE4LDExOTMwOSw4NiwxNjM5LDg2LDE3ODMsODYsODU0OCw4NiwxMTk4MjksODYsMTE5ODgxLDg2LDExOTkzMyw4NiwxMTk5ODUsODYsMTIwMDM3LDg2LDEyMDA4OSw4NiwxMjAxNDEsODYsMTIwMTkzLDg2LDEyMDI0NSw4NiwxMjAyOTcsODYsMTIwMzQ5LDg2LDEyMDQwMSw4NiwxMjA0NTMsODYsMTE0MCw4NiwxMTU3Niw4Niw1MDgxLDg2LDUxNjcsODYsNDI3MTksODYsNDIyMTQsODYsOTM5NjAsODYsNzE4NDAsODYsNjY4NDUsODYsNjIzLDExOSwxMTk4NTYsMTE5LDExOTkwOCwxMTksMTE5OTYwLDExOSwxMjAwMTIsMTE5LDEyMDA2NCwxMTksMTIwMTE2LDExOSwxMjAxNjgsMTE5LDEyMDIyMCwxMTksMTIwMjcyLDExOSwxMjAzMjQsMTE5LDEyMDM3NiwxMTksMTIwNDI4LDExOSwxMjA0ODAsMTE5LDc0NTcsMTE5LDExMjEsMTE5LDEzMDksMTE5LDEzNzcsMTE5LDcxNDM0LDExOSw3MTQzOCwxMTksNzE0MzksMTE5LDQzOTA3LDExOSw3MTkxOSw4Nyw3MTkxMCw4NywxMTk4MzAsODcsMTE5ODgyLDg3LDExOTkzNCw4NywxMTk5ODYsODcsMTIwMDM4LDg3LDEyMDA5MCw4NywxMjAxNDIsODcsMTIwMTk0LDg3LDEyMDI0Niw4NywxMjAyOTgsODcsMTIwMzUwLDg3LDEyMDQwMiw4NywxMjA0NTQsODcsMTMwOCw4Nyw1MDQzLDg3LDUwNzYsODcsNDIyMTgsODcsNTc0MiwxMjAsMTA1MzksMTIwLDEwNTQwLDEyMCwxMDc5OSwxMjAsNjUzNjgsMTIwLDg1NjksMTIwLDExOTg1NywxMjAsMTE5OTA5LDEyMCwxMTk5NjEsMTIwLDEyMDAxMywxMjAsMTIwMDY1LDEyMCwxMjAxMTcsMTIwLDEyMDE2OSwxMjAsMTIwMjIxLDEyMCwxMjAyNzMsMTIwLDEyMDMyNSwxMjAsMTIwMzc3LDEyMCwxMjA0MjksMTIwLDEyMDQ4MSwxMjAsNTQ0MSwxMjAsNTUwMSwxMjAsNTc0MSw4OCw5NTg3LDg4LDY2MzM4LDg4LDcxOTE2LDg4LDY1MzM2LDg4LDg1NTMsODgsMTE5ODMxLDg4LDExOTg4Myw4OCwxMTk5MzUsODgsMTE5OTg3LDg4LDEyMDAzOSw4OCwxMjAwOTEsODgsMTIwMTQzLDg4LDEyMDE5NSw4OCwxMjAyNDcsODgsMTIwMjk5LDg4LDEyMDM1MSw4OCwxMjA0MDMsODgsMTIwNDU1LDg4LDQyOTMxLDg4LDkzNSw4OCwxMjA1MTAsODgsMTIwNTY4LDg4LDEyMDYyNiw4OCwxMjA2ODQsODgsMTIwNzQyLDg4LDExNDM2LDg4LDExNjEzLDg4LDU4MTUsODgsNDIyMTksODgsNjYxOTIsODgsNjYyMjgsODgsNjYzMjcsODgsNjY4NTUsODgsNjExLDEyMSw3NTY0LDEyMSw2NTM2OSwxMjEsMTE5ODU4LDEyMSwxMTk5MTAsMTIxLDExOTk2MiwxMjEsMTIwMDE0LDEyMSwxMjAwNjYsMTIxLDEyMDExOCwxMjEsMTIwMTcwLDEyMSwxMjAyMjIsMTIxLDEyMDI3NCwxMjEsMTIwMzI2LDEyMSwxMjAzNzgsMTIxLDEyMDQzMCwxMjEsMTIwNDgyLDEyMSw2NTUsMTIxLDc5MzUsMTIxLDQzODY2LDEyMSw5NDcsMTIxLDg1MDksMTIxLDEyMDUxNiwxMjEsMTIwNTc0LDEyMSwxMjA2MzIsMTIxLDEyMDY5MCwxMjEsMTIwNzQ4LDEyMSwxMTk5LDEyMSw0MzI3LDEyMSw3MTkwMCwxMjEsNjUzMzcsODksMTE5ODMyLDg5LDExOTg4NCw4OSwxMTk5MzYsODksMTE5OTg4LDg5LDEyMDA0MCw4OSwxMjAwOTIsODksMTIwMTQ0LDg5LDEyMDE5Niw4OSwxMjAyNDgsODksMTIwMzAwLDg5LDEyMDM1Miw4OSwxMjA0MDQsODksMTIwNDU2LDg5LDkzMyw4OSw5NzgsODksMTIwNTA4LDg5LDEyMDU2Niw4OSwxMjA2MjQsODksMTIwNjgyLDg5LDEyMDc0MCw4OSwxMTQzMiw4OSwxMTk4LDg5LDUwMzMsODksNTA1Myw4OSw0MjIyMCw4OSw5NDAxOSw4OSw3MTg0NCw4OSw2NjIyNiw4OSwxMTk4NTksMTIyLDExOTkxMSwxMjIsMTE5OTYzLDEyMiwxMjAwMTUsMTIyLDEyMDA2NywxMjIsMTIwMTE5LDEyMiwxMjAxNzEsMTIyLDEyMDIyMywxMjIsMTIwMjc1LDEyMiwxMjAzMjcsMTIyLDEyMDM3OSwxMjIsMTIwNDMxLDEyMiwxMjA0ODMsMTIyLDc0NTgsMTIyLDQzOTIzLDEyMiw3MTg3NiwxMjIsNjYyOTMsOTAsNzE5MDksOTAsNjUzMzgsOTAsODQ4NCw5MCw4NDg4LDkwLDExOTgzMyw5MCwxMTk4ODUsOTAsMTE5OTM3LDkwLDExOTk4OSw5MCwxMjAwNDEsOTAsMTIwMTk3LDkwLDEyMDI0OSw5MCwxMjAzMDEsOTAsMTIwMzUzLDkwLDEyMDQwNSw5MCwxMjA0NTcsOTAsOTE4LDkwLDEyMDQ5Myw5MCwxMjA1NTEsOTAsMTIwNjA5LDkwLDEyMDY2Nyw5MCwxMjA3MjUsOTAsNTA1OSw5MCw0MjIwNCw5MCw3MTg0OSw5MCw2NTI4MiwzNCw2NTI4NCwzNiw2NTI4NSwzNyw2NTI4NiwzOCw2NTI5MCw0Miw2NTI5MSw0Myw2NTI5NCw0Niw2NTI5NSw0Nyw2NTI5Niw0OCw2NTI5Nyw0OSw2NTI5OCw1MCw2NTI5OSw1MSw2NTMwMCw1Miw2NTMwMSw1Myw2NTMwMiw1NCw2NTMwMyw1NSw2NTMwNCw1Niw2NTMwNSw1Nyw2NTMwOCw2MCw2NTMwOSw2MSw2NTMxMCw2Miw2NTMxMiw2NCw2NTMxNiw2OCw2NTMxOCw3MCw2NTMxOSw3MSw2NTMyNCw3Niw2NTMyOSw4MSw2NTMzMCw4Miw2NTMzMyw4NSw2NTMzNCw4Niw2NTMzNSw4Nyw2NTM0Myw5NSw2NTM0Niw5OCw2NTM0OCwxMDAsNjUzNTAsMTAyLDY1MzU1LDEwNyw2NTM1NywxMDksNjUzNTgsMTEwLDY1MzYxLDExMyw2NTM2MiwxMTQsNjUzNjQsMTE2LDY1MzY1LDExNyw2NTM2NywxMTksNjUzNzAsMTIyLDY1MzcxLDEyMyw2NTM3MywxMjVdLCJfZGVmYXVsdCI6WzE2MCwzMiw4MjExLDQ1LDY1Mzc0LDEyNiw2NTMwNiw1OCw2NTI4MSwzMyw4MjE2LDk2LDgyMTcsOTYsODI0NSw5NiwxODAsOTYsMTI0OTQsNDcsMTA0Nyw1MSwxMDczLDU0LDEwNzIsOTcsMTA0MCw2NSwxMDY4LDk4LDEwNDIsNjYsMTA4OSw5OSwxMDU3LDY3LDEwNzcsMTAxLDEwNDUsNjksMTA1Myw3MiwzMDUsMTA1LDEwNTAsNzUsOTIxLDczLDEwNTIsNzcsMTA4NiwxMTEsMTA1NCw3OSwxMDA5LDExMiwxMDg4LDExMiwxMDU2LDgwLDEwNzUsMTE0LDEwNTgsODQsMjE1LDEyMCwxMDkzLDEyMCwxMDYxLDg4LDEwOTEsMTIxLDEwNTksODksNjUyODMsMzUsNjUyODgsNDAsNjUyODksNDEsNjUyOTIsNDQsNjUzMDcsNTksNjUzMTEsNjNdLCJjcyI6WzY1Mzc0LDEyNiw2NTMwNiw1OCw2NTI4MSwzMyw4MjE2LDk2LDgyMTcsOTYsODI0NSw5NiwxODAsOTYsMTI0OTQsNDcsMTA0Nyw1MSwxMDczLDU0LDEwNzIsOTcsMTA0MCw2NSwxMDY4LDk4LDEwNDIsNjYsMTA4OSw5OSwxMDU3LDY3LDEwNzcsMTAxLDEwNDUsNjksMTA1Myw3MiwzMDUsMTA1LDEwNTAsNzUsOTIxLDczLDEwNTIsNzcsMTA4NiwxMTEsMTA1NCw3OSwxMDA5LDExMiwxMDg4LDExMiwxMDU2LDgwLDEwNzUsMTE0LDEwNTgsODQsMTA5MywxMjAsMTA2MSw4OCwxMDkxLDEyMSwxMDU5LDg5LDY1MjgzLDM1LDY1Mjg4LDQwLDY1Mjg5LDQxLDY1MjkyLDQ0LDY1MzA3LDU5LDY1MzExLDYzXSwiZGUiOls2NTM3NCwxMjYsNjUzMDYsNTgsNjUyODEsMzMsODIxNiw5Niw4MjE3LDk2LDgyNDUsOTYsMTgwLDk2LDEyNDk0LDQ3LDEwNDcsNTEsMTA3Myw1NCwxMDcyLDk3LDEwNDAsNjUsMTA2OCw5OCwxMDQyLDY2LDEwODksOTksMTA1Nyw2NywxMDc3LDEwMSwxMDQ1LDY5LDEwNTMsNzIsMzA1LDEwNSwxMDUwLDc1LDkyMSw3MywxMDUyLDc3LDEwODYsMTExLDEwNTQsNzksMTAwOSwxMTIsMTA4OCwxMTIsMTA1Niw4MCwxMDc1LDExNCwxMDU4LDg0LDEwOTMsMTIwLDEwNjEsODgsMTA5MSwxMjEsMTA1OSw4OSw2NTI4MywzNSw2NTI4OCw0MCw2NTI4OSw0MSw2NTI5Miw0NCw2NTMwNyw1OSw2NTMxMSw2M10sImVzIjpbODIxMSw0NSw2NTM3NCwxMjYsNjUzMDYsNTgsNjUyODEsMzMsODI0NSw5NiwxODAsOTYsMTI0OTQsNDcsMTA0Nyw1MSwxMDczLDU0LDEwNzIsOTcsMTA0MCw2NSwxMDY4LDk4LDEwNDIsNjYsMTA4OSw5OSwxMDU3LDY3LDEwNzcsMTAxLDEwNDUsNjksMTA1Myw3MiwzMDUsMTA1LDEwNTAsNzUsMTA1Miw3NywxMDg2LDExMSwxMDU0LDc5LDEwMDksMTEyLDEwODgsMTEyLDEwNTYsODAsMTA3NSwxMTQsMTA1OCw4NCwyMTUsMTIwLDEwOTMsMTIwLDEwNjEsODgsMTA5MSwxMjEsMTA1OSw4OSw2NTI4MywzNSw2NTI4OCw0MCw2NTI4OSw0MSw2NTI5Miw0NCw2NTMwNyw1OSw2NTMxMSw2M10sImZyIjpbNjUzNzQsMTI2LDY1MzA2LDU4LDY1MjgxLDMzLDgyMTYsOTYsODI0NSw5NiwxMjQ5NCw0NywxMDQ3LDUxLDEwNzMsNTQsMTA3Miw5NywxMDQwLDY1LDEwNjgsOTgsMTA0Miw2NiwxMDg5LDk5LDEwNTcsNjcsMTA3NywxMDEsMTA0NSw2OSwxMDUzLDcyLDMwNSwxMDUsMTA1MCw3NSw5MjEsNzMsMTA1Miw3NywxMDg2LDExMSwxMDU0LDc5LDEwMDksMTEyLDEwODgsMTEyLDEwNTYsODAsMTA3NSwxMTQsMTA1OCw4NCwyMTUsMTIwLDEwOTMsMTIwLDEwNjEsODgsMTA5MSwxMjEsMTA1OSw4OSw2NTI4MywzNSw2NTI4OCw0MCw2NTI4OSw0MSw2NTI5Miw0NCw2NTMwNyw1OSw2NTMxMSw2M10sIml0IjpbMTYwLDMyLDgyMTEsNDUsNjUzNzQsMTI2LDY1MzA2LDU4LDY1MjgxLDMzLDgyMTYsOTYsODI0NSw5NiwxODAsOTYsMTI0OTQsNDcsMTA0Nyw1MSwxMDczLDU0LDEwNzIsOTcsMTA0MCw2NSwxMDY4LDk4LDEwNDIsNjYsMTA4OSw5OSwxMDU3LDY3LDEwNzcsMTAxLDEwNDUsNjksMTA1Myw3MiwzMDUsMTA1LDEwNTAsNzUsOTIxLDczLDEwNTIsNzcsMTA4NiwxMTEsMTA1NCw3OSwxMDA5LDExMiwxMDg4LDExMiwxMDU2LDgwLDEwNzUsMTE0LDEwNTgsODQsMjE1LDEyMCwxMDkzLDEyMCwxMDYxLDg4LDEwOTEsMTIxLDEwNTksODksNjUyODMsMzUsNjUyODgsNDAsNjUyODksNDEsNjUyOTIsNDQsNjUzMDcsNTksNjUzMTEsNjNdLCJqYSI6WzgyMTEsNDUsNjUzMDYsNTgsNjUyODEsMzMsODIxNiw5Niw4MjE3LDk2LDgyNDUsOTYsMTgwLDk2LDEwNDcsNTEsMTA3Myw1NCwxMDcyLDk3LDEwNDAsNjUsMTA2OCw5OCwxMDQyLDY2LDEwODksOTksMTA1Nyw2NywxMDc3LDEwMSwxMDQ1LDY5LDEwNTMsNzIsMzA1LDEwNSwxMDUwLDc1LDkyMSw3MywxMDUyLDc3LDEwODYsMTExLDEwNTQsNzksMTAwOSwxMTIsMTA4OCwxMTIsMTA1Niw4MCwxMDc1LDExNCwxMDU4LDg0LDIxNSwxMjAsMTA5MywxMjAsMTA2MSw4OCwxMDkxLDEyMSwxMDU5LDg5LDY1MjgzLDM1LDY1MjkyLDQ0LDY1MzA3LDU5XSwia28iOls4MjExLDQ1LDY1Mzc0LDEyNiw2NTMwNiw1OCw2NTI4MSwzMyw4MjQ1LDk2LDE4MCw5NiwxMjQ5NCw0NywxMDQ3LDUxLDEwNzMsNTQsMTA3Miw5NywxMDQwLDY1LDEwNjgsOTgsMTA0Miw2NiwxMDg5LDk5LDEwNTcsNjcsMTA3NywxMDEsMTA0NSw2OSwxMDUzLDcyLDMwNSwxMDUsMTA1MCw3NSw5MjEsNzMsMTA1Miw3NywxMDg2LDExMSwxMDU0LDc5LDEwMDksMTEyLDEwODgsMTEyLDEwNTYsODAsMTA3NSwxMTQsMTA1OCw4NCwyMTUsMTIwLDEwOTMsMTIwLDEwNjEsODgsMTA5MSwxMjEsMTA1OSw4OSw2NTI4MywzNSw2NTI4OCw0MCw2NTI4OSw0MSw2NTI5Miw0NCw2NTMwNyw1OSw2NTMxMSw2M10sInBsIjpbNjUzNzQsMTI2LDY1MzA2LDU4LDY1MjgxLDMzLDgyMTYsOTYsODIxNyw5Niw4MjQ1LDk2LDE4MCw5NiwxMjQ5NCw0NywxMDQ3LDUxLDEwNzMsNTQsMTA3Miw5NywxMDQwLDY1LDEwNjgsOTgsMTA0Miw2NiwxMDg5LDk5LDEwNTcsNjcsMTA3NywxMDEsMTA0NSw2OSwxMDUzLDcyLDMwNSwxMDUsMTA1MCw3NSw5MjEsNzMsMTA1Miw3NywxMDg2LDExMSwxMDU0LDc5LDEwMDksMTEyLDEwODgsMTEyLDEwNTYsODAsMTA3NSwxMTQsMTA1OCw4NCwyMTUsMTIwLDEwOTMsMTIwLDEwNjEsODgsMTA5MSwxMjEsMTA1OSw4OSw2NTI4MywzNSw2NTI4OCw0MCw2NTI4OSw0MSw2NTI5Miw0NCw2NTMwNyw1OSw2NTMxMSw2M10sInB0LUJSIjpbNjUzNzQsMTI2LDY1MzA2LDU4LDY1MjgxLDMzLDgyMTYsOTYsODIxNyw5Niw4MjQ1LDk2LDE4MCw5NiwxMjQ5NCw0NywxMDQ3LDUxLDEwNzMsNTQsMTA3Miw5NywxMDQwLDY1LDEwNjgsOTgsMTA0Miw2NiwxMDg5LDk5LDEwNTcsNjcsMTA3NywxMDEsMTA0NSw2OSwxMDUzLDcyLDMwNSwxMDUsMTA1MCw3NSw5MjEsNzMsMTA1Miw3NywxMDg2LDExMSwxMDU0LDc5LDEwMDksMTEyLDEwODgsMTEyLDEwNTYsODAsMTA3NSwxMTQsMTA1OCw4NCwyMTUsMTIwLDEwOTMsMTIwLDEwNjEsODgsMTA5MSwxMjEsMTA1OSw4OSw2NTI4MywzNSw2NTI4OCw0MCw2NTI4OSw0MSw2NTI5Miw0NCw2NTMwNyw1OSw2NTMxMSw2M10sInFwcy1wbG9jIjpbMTYwLDMyLDgyMTEsNDUsNjUzNzQsMTI2LDY1MzA2LDU4LDY1MjgxLDMzLDgyMTYsOTYsODIxNyw5Niw4MjQ1LDk2LDE4MCw5NiwxMjQ5NCw0NywxMDQ3LDUxLDEwNzMsNTQsMTA3Miw5NywxMDQwLDY1LDEwNjgsOTgsMTA0Miw2NiwxMDg5LDk5LDEwNTcsNjcsMTA3NywxMDEsMTA0NSw2OSwxMDUzLDcyLDMwNSwxMDUsMTA1MCw3NSw5MjEsNzMsMTA1Miw3NywxMDg2LDExMSwxMDU0LDc5LDEwODgsMTEyLDEwNTYsODAsMTA3NSwxMTQsMTA1OCw4NCwyMTUsMTIwLDEwOTMsMTIwLDEwNjEsODgsMTA5MSwxMjEsMTA1OSw4OSw2NTI4MywzNSw2NTI4OCw0MCw2NTI4OSw0MSw2NTI5Miw0NCw2NTMwNyw1OSw2NTMxMSw2M10sInJ1IjpbNjUzNzQsMTI2LDY1MzA2LDU4LDY1MjgxLDMzLDgyMTYsOTYsODIxNyw5Niw4MjQ1LDk2LDE4MCw5NiwxMjQ5NCw0NywzMDUsMTA1LDkyMSw3MywxMDA5LDExMiwyMTUsMTIwLDY1MjgzLDM1LDY1Mjg4LDQwLDY1Mjg5LDQxLDY1MjkyLDQ0LDY1MzA3LDU5LDY1MzExLDYzXSwidHIiOlsxNjAsMzIsODIxMSw0NSw2NTM3NCwxMjYsNjUzMDYsNTgsNjUyODEsMzMsODI0NSw5NiwxODAsOTYsMTI0OTQsNDcsMTA0Nyw1MSwxMDczLDU0LDEwNzIsOTcsMTA0MCw2NSwxMDY4LDk4LDEwNDIsNjYsMTA4OSw5OSwxMDU3LDY3LDEwNzcsMTAxLDEwNDUsNjksMTA1Myw3MiwxMDUwLDc1LDkyMSw3MywxMDUyLDc3LDEwODYsMTExLDEwNTQsNzksMTAwOSwxMTIsMTA4OCwxMTIsMTA1Niw4MCwxMDc1LDExNCwxMDU4LDg0LDIxNSwxMjAsMTA5MywxMjAsMTA2MSw4OCwxMDkxLDEyMSwxMDU5LDg5LDY1MjgzLDM1LDY1Mjg4LDQwLDY1Mjg5LDQxLDY1MjkyLDQ0LDY1MzA3LDU5LDY1MzExLDYzXSwiemgtaGFucyI6WzY1Mzc0LDEyNiw2NTMwNiw1OCw2NTI4MSwzMyw4MjQ1LDk2LDE4MCw5NiwxMjQ5NCw0NywxMDQ3LDUxLDEwNzMsNTQsMTA3Miw5NywxMDQwLDY1LDEwNjgsOTgsMTA0Miw2NiwxMDg5LDk5LDEwNTcsNjcsMTA3NywxMDEsMTA0NSw2OSwxMDUzLDcyLDMwNSwxMDUsMTA1MCw3NSw5MjEsNzMsMTA1Miw3NywxMDg2LDExMSwxMDU0LDc5LDEwMDksMTEyLDEwODgsMTEyLDEwNTYsODAsMTA3NSwxMTQsMTA1OCw4NCwyMTUsMTIwLDEwOTMsMTIwLDEwNjEsODgsMTA5MSwxMjEsMTA1OSw4OSw2NTI4OCw0MCw2NTI4OSw0MV0sInpoLWhhbnQiOls4MjExLDQ1LDY1Mzc0LDEyNiwxODAsOTYsMTI0OTQsNDcsMTA0Nyw1MSwxMDczLDU0LDEwNzIsOTcsMTA0MCw2NSwxMDY4LDk4LDEwNDIsNjYsMTA4OSw5OSwxMDU3LDY3LDEwNzcsMTAxLDEwNDUsNjksMTA1Myw3MiwzMDUsMTA1LDEwNTAsNzUsOTIxLDczLDEwNTIsNzcsMTA4NiwxMTEsMTA1NCw3OSwxMDA5LDExMiwxMDg4LDExMiwxMDU2LDgwLDEwNzUsMTE0LDEwNTgsODQsMjE1LDEyMCwxMDkzLDEyMCwxMDYxLDg4LDEwOTEsMTIxLDEwNTksODksNjUyODMsMzUsNjUzMDcsNTldfScpKSxzZS5jYWNoZT1uZXcgY2xhc3N7Y29uc3RydWN0b3IoZSl7dGhpcy5jb21wdXRlRm49ZSx0aGlzLmxhc3RDYWNoZT12b2lkIDAsdGhpcy5sYXN0QXJnS2V5PXZvaWQgMH1nZXQoZSl7dmFyIHQ9SlNPTi5zdHJpbmdpZnkoZSk7cmV0dXJuIHRoaXMubGFzdEFyZ0tleSE9PXQmJih0aGlzLmxhc3RBcmdLZXk9dCx0aGlzLmxhc3RDYWNoZT10aGlzLmNvbXB1dGVGbihlKSksdGhpcy5sYXN0Q2FjaGV9fShlPT57ZnVuY3Rpb24gdCh0KXtjb25zdCByPW5ldyBNYXA7Zm9yKGxldCBlPTA7ZTx0Lmxlbmd0aDtlKz0yKXIuc2V0KHRbZV0sdFtlKzFdKTtyZXR1cm4gcn1jb25zdCByPUYuYW1iaWd1b3VzQ2hhcmFjdGVyRGF0YS5nZXRWYWx1ZSgpO2xldCBuPWUuZmlsdGVyKGU9PiFlLnN0YXJ0c1dpdGgoIl8iKSYmZSBpbiByKSxpPXZvaWQgMDtmb3IoY29uc3QgYSBvZiBuPTA9PT1uLmxlbmd0aD9bIl9kZWZhdWx0Il06bil7Y29uc3Qgbz10KHJbYV0pO2k9ZnVuY3Rpb24oZSx0KXtpZighZSlyZXR1cm4gdDtjb25zdCByPW5ldyBNYXA7Zm9yKHZhcltuLGldb2YgZSl0LmhhcyhuKSYmci5zZXQobixpKTtyZXR1cm4gcn0oaSxvKX1jb25zdCBvPWZ1bmN0aW9uKGUsdCl7Y29uc3Qgcj1uZXcgTWFwKGUpO2Zvcih2YXJbbixpXW9mIHQpci5zZXQobixpKTtyZXR1cm4gcn0odChyLl9jb21tb24pLGkpO3JldHVybiBuZXcgc2Uobyl9KSxzZS5fbG9jYWxlcz1uZXcgZWUoKCk9Pk9iamVjdC5rZXlzKHNlLmFtYmlndW91c0NoYXJhY3RlckRhdGEuZ2V0VmFsdWUoKSkuZmlsdGVyKGU9PiFlLnN0YXJ0c1dpdGgoIl8iKSkpO2NsYXNzIGxle3N0YXRpYyBnZXRSYXdEYXRhKCl7cmV0dXJuIEpTT04ucGFyc2UoIls5LDEwLDExLDEyLDEzLDMyLDEyNywxNjAsMTczLDg0NywxNTY0LDQ0NDcsNDQ0OCw2MDY4LDYwNjksNjE1NSw2MTU2LDYxNTcsNjE1OCw3MzU1LDczNTYsODE5Miw4MTkzLDgxOTQsODE5NSw4MTk2LDgxOTcsODE5OCw4MTk5LDgyMDAsODIwMSw4MjAyLDgyMDMsODIwNCw4MjA1LDgyMDYsODIwNyw4MjM0LDgyMzUsODIzNiw4MjM3LDgyMzgsODIzOSw4Mjg3LDgyODgsODI4OSw4MjkwLDgyOTEsODI5Miw4MjkzLDgyOTQsODI5NSw4Mjk2LDgyOTcsODI5OCw4Mjk5LDgzMDAsODMwMSw4MzAyLDgzMDMsMTAyNDAsMTIyODgsMTI2NDQsNjUwMjQsNjUwMjUsNjUwMjYsNjUwMjcsNjUwMjgsNjUwMjksNjUwMzAsNjUwMzEsNjUwMzIsNjUwMzMsNjUwMzQsNjUwMzUsNjUwMzYsNjUwMzcsNjUwMzgsNjUwMzksNjUyNzksNjU0NDAsNjU1MjAsNjU1MjEsNjU1MjIsNjU1MjMsNjU1MjQsNjU1MjUsNjU1MjYsNjU1MjcsNjU1MjgsNjU1MzIsNzg4NDQsMTE5MTU1LDExOTE1NiwxMTkxNTcsMTE5MTU4LDExOTE1OSwxMTkxNjAsMTE5MTYxLDExOTE2Miw5MTc1MDQsOTE3NTA1LDkxNzUwNiw5MTc1MDcsOTE3NTA4LDkxNzUwOSw5MTc1MTAsOTE3NTExLDkxNzUxMiw5MTc1MTMsOTE3NTE0LDkxNzUxNSw5MTc1MTYsOTE3NTE3LDkxNzUxOCw5MTc1MTksOTE3NTIwLDkxNzUyMSw5MTc1MjIsOTE3NTIzLDkxNzUyNCw5MTc1MjUsOTE3NTI2LDkxNzUyNyw5MTc1MjgsOTE3NTI5LDkxNzUzMCw5MTc1MzEsOTE3NTMyLDkxNzUzMyw5MTc1MzQsOTE3NTM1LDkxNzUzNiw5MTc1MzcsOTE3NTM4LDkxNzUzOSw5MTc1NDAsOTE3NTQxLDkxNzU0Miw5MTc1NDMsOTE3NTQ0LDkxNzU0NSw5MTc1NDYsOTE3NTQ3LDkxNzU0OCw5MTc1NDksOTE3NTUwLDkxNzU1MSw5MTc1NTIsOTE3NTUzLDkxNzU1NCw5MTc1NTUsOTE3NTU2LDkxNzU1Nyw5MTc1NTgsOTE3NTU5LDkxNzU2MCw5MTc1NjEsOTE3NTYyLDkxNzU2Myw5MTc1NjQsOTE3NTY1LDkxNzU2Niw5MTc1NjcsOTE3NTY4LDkxNzU2OSw5MTc1NzAsOTE3NTcxLDkxNzU3Miw5MTc1NzMsOTE3NTc0LDkxNzU3NSw5MTc1NzYsOTE3NTc3LDkxNzU3OCw5MTc1NzksOTE3NTgwLDkxNzU4MSw5MTc1ODIsOTE3NTgzLDkxNzU4NCw5MTc1ODUsOTE3NTg2LDkxNzU4Nyw5MTc1ODgsOTE3NTg5LDkxNzU5MCw5MTc1OTEsOTE3NTkyLDkxNzU5Myw5MTc1OTQsOTE3NTk1LDkxNzU5Niw5MTc1OTcsOTE3NTk4LDkxNzU5OSw5MTc2MDAsOTE3NjAxLDkxNzYwMiw5MTc2MDMsOTE3NjA0LDkxNzYwNSw5MTc2MDYsOTE3NjA3LDkxNzYwOCw5MTc2MDksOTE3NjEwLDkxNzYxMSw5MTc2MTIsOTE3NjEzLDkxNzYxNCw5MTc2MTUsOTE3NjE2LDkxNzYxNyw5MTc2MTgsOTE3NjE5LDkxNzYyMCw5MTc2MjEsOTE3NjIyLDkxNzYyMyw5MTc2MjQsOTE3NjI1LDkxNzYyNiw5MTc2MjcsOTE3NjI4LDkxNzYyOSw5MTc2MzAsOTE3NjMxLDkxNzc2MCw5MTc3NjEsOTE3NzYyLDkxNzc2Myw5MTc3NjQsOTE3NzY1LDkxNzc2Niw5MTc3NjcsOTE3NzY4LDkxNzc2OSw5MTc3NzAsOTE3NzcxLDkxNzc3Miw5MTc3NzMsOTE3Nzc0LDkxNzc3NSw5MTc3NzYsOTE3Nzc3LDkxNzc3OCw5MTc3NzksOTE3NzgwLDkxNzc4MSw5MTc3ODIsOTE3NzgzLDkxNzc4NCw5MTc3ODUsOTE3Nzg2LDkxNzc4Nyw5MTc3ODgsOTE3Nzg5LDkxNzc5MCw5MTc3OTEsOTE3NzkyLDkxNzc5Myw5MTc3OTQsOTE3Nzk1LDkxNzc5Niw5MTc3OTcsOTE3Nzk4LDkxNzc5OSw5MTc4MDAsOTE3ODAxLDkxNzgwMiw5MTc4MDMsOTE3ODA0LDkxNzgwNSw5MTc4MDYsOTE3ODA3LDkxNzgwOCw5MTc4MDksOTE3ODEwLDkxNzgxMSw5MTc4MTIsOTE3ODEzLDkxNzgxNCw5MTc4MTUsOTE3ODE2LDkxNzgxNyw5MTc4MTgsOTE3ODE5LDkxNzgyMCw5MTc4MjEsOTE3ODIyLDkxNzgyMyw5MTc4MjQsOTE3ODI1LDkxNzgyNiw5MTc4MjcsOTE3ODI4LDkxNzgyOSw5MTc4MzAsOTE3ODMxLDkxNzgzMiw5MTc4MzMsOTE3ODM0LDkxNzgzNSw5MTc4MzYsOTE3ODM3LDkxNzgzOCw5MTc4MzksOTE3ODQwLDkxNzg0MSw5MTc4NDIsOTE3ODQzLDkxNzg0NCw5MTc4NDUsOTE3ODQ2LDkxNzg0Nyw5MTc4NDgsOTE3ODQ5LDkxNzg1MCw5MTc4NTEsOTE3ODUyLDkxNzg1Myw5MTc4NTQsOTE3ODU1LDkxNzg1Niw5MTc4NTcsOTE3ODU4LDkxNzg1OSw5MTc4NjAsOTE3ODYxLDkxNzg2Miw5MTc4NjMsOTE3ODY0LDkxNzg2NSw5MTc4NjYsOTE3ODY3LDkxNzg2OCw5MTc4NjksOTE3ODcwLDkxNzg3MSw5MTc4NzIsOTE3ODczLDkxNzg3NCw5MTc4NzUsOTE3ODc2LDkxNzg3Nyw5MTc4NzgsOTE3ODc5LDkxNzg4MCw5MTc4ODEsOTE3ODgyLDkxNzg4Myw5MTc4ODQsOTE3ODg1LDkxNzg4Niw5MTc4ODcsOTE3ODg4LDkxNzg4OSw5MTc4OTAsOTE3ODkxLDkxNzg5Miw5MTc4OTMsOTE3ODk0LDkxNzg5NSw5MTc4OTYsOTE3ODk3LDkxNzg5OCw5MTc4OTksOTE3OTAwLDkxNzkwMSw5MTc5MDIsOTE3OTAzLDkxNzkwNCw5MTc5MDUsOTE3OTA2LDkxNzkwNyw5MTc5MDgsOTE3OTA5LDkxNzkxMCw5MTc5MTEsOTE3OTEyLDkxNzkxMyw5MTc5MTQsOTE3OTE1LDkxNzkxNiw5MTc5MTcsOTE3OTE4LDkxNzkxOSw5MTc5MjAsOTE3OTIxLDkxNzkyMiw5MTc5MjMsOTE3OTI0LDkxNzkyNSw5MTc5MjYsOTE3OTI3LDkxNzkyOCw5MTc5MjksOTE3OTMwLDkxNzkzMSw5MTc5MzIsOTE3OTMzLDkxNzkzNCw5MTc5MzUsOTE3OTM2LDkxNzkzNyw5MTc5MzgsOTE3OTM5LDkxNzk0MCw5MTc5NDEsOTE3OTQyLDkxNzk0Myw5MTc5NDQsOTE3OTQ1LDkxNzk0Niw5MTc5NDcsOTE3OTQ4LDkxNzk0OSw5MTc5NTAsOTE3OTUxLDkxNzk1Miw5MTc5NTMsOTE3OTU0LDkxNzk1NSw5MTc5NTYsOTE3OTU3LDkxNzk1OCw5MTc5NTksOTE3OTYwLDkxNzk2MSw5MTc5NjIsOTE3OTYzLDkxNzk2NCw5MTc5NjUsOTE3OTY2LDkxNzk2Nyw5MTc5NjgsOTE3OTY5LDkxNzk3MCw5MTc5NzEsOTE3OTcyLDkxNzk3Myw5MTc5NzQsOTE3OTc1LDkxNzk3Niw5MTc5NzcsOTE3OTc4LDkxNzk3OSw5MTc5ODAsOTE3OTgxLDkxNzk4Miw5MTc5ODMsOTE3OTg0LDkxNzk4NSw5MTc5ODYsOTE3OTg3LDkxNzk4OCw5MTc5ODksOTE3OTkwLDkxNzk5MSw5MTc5OTIsOTE3OTkzLDkxNzk5NCw5MTc5OTUsOTE3OTk2LDkxNzk5Nyw5MTc5OTgsOTE3OTk5XSIpfXN0YXRpYyBnZXREYXRhKCl7cmV0dXJuIHRoaXMuX2RhdGF8fCh0aGlzLl9kYXRhPW5ldyBTZXQobGUuZ2V0UmF3RGF0YSgpKSksdGhpcy5fZGF0YX1zdGF0aWMgaXNJbnZpc2libGVDaGFyYWN0ZXIoZSl7cmV0dXJuIGxlLmdldERhdGEoKS5oYXMoZSl9c3RhdGljIGdldCBjb2RlUG9pbnRzKCl7cmV0dXJuIGxlLmdldERhdGEoKX19bGUuX2RhdGE9dm9pZCAwO2NsYXNzIGNle2NvbnN0cnVjdG9yKGUsdCxyLG4pe3RoaXMudnNXb3JrZXI9ZSx0aGlzLnJlcT10LHRoaXMubWV0aG9kPXIsdGhpcy5hcmdzPW4sdGhpcy50eXBlPTB9fWNsYXNzIHVle2NvbnN0cnVjdG9yKGUsdCxyLG4pe3RoaXMudnNXb3JrZXI9ZSx0aGlzLnNlcT10LHRoaXMucmVzPXIsdGhpcy5lcnI9bix0aGlzLnR5cGU9MX19Y2xhc3MgaGV7Y29uc3RydWN0b3IoZSx0LHIsbil7dGhpcy52c1dvcmtlcj1lLHRoaXMucmVxPXQsdGhpcy5ldmVudE5hbWU9cix0aGlzLmFyZz1uLHRoaXMudHlwZT0yfX1jbGFzcyBmZXtjb25zdHJ1Y3RvcihlLHQscil7dGhpcy52c1dvcmtlcj1lLHRoaXMucmVxPXQsdGhpcy5ldmVudD1yLHRoaXMudHlwZT0zfX1jbGFzcyBkZXtjb25zdHJ1Y3RvcihlLHQpe3RoaXMudnNXb3JrZXI9ZSx0aGlzLnJlcT10LHRoaXMudHlwZT00fX1jbGFzcyBtZXtjb25zdHJ1Y3RvcihlKXt0aGlzLl93b3JrZXJJZD0tMSx0aGlzLl9oYW5kbGVyPWUsdGhpcy5fbGFzdFNlbnRSZXE9MCx0aGlzLl9wZW5kaW5nUmVwbGllcz1PYmplY3QuY3JlYXRlKG51bGwpLHRoaXMuX3BlbmRpbmdFbWl0dGVycz1uZXcgTWFwLHRoaXMuX3BlbmRpbmdFdmVudHM9bmV3IE1hcH1zZXRXb3JrZXJJZChlKXt0aGlzLl93b3JrZXJJZD1lfXNlbmRNZXNzYWdlKHIsbil7Y29uc3QgaT1TdHJpbmcoKyt0aGlzLl9sYXN0U2VudFJlcSk7cmV0dXJuIG5ldyBQcm9taXNlKChlLHQpPT57dGhpcy5fcGVuZGluZ1JlcGxpZXNbaV09e3Jlc29sdmU6ZSxyZWplY3Q6dH0sdGhpcy5fc2VuZChuZXcgY2UodGhpcy5fd29ya2VySWQsaSxyLG4pKX0pfWxpc3RlbihlLHQpe2xldCByPW51bGw7Y29uc3Qgbj1uZXcgWCh7b25GaXJzdExpc3RlbmVyQWRkOigpPT57cj1TdHJpbmcoKyt0aGlzLl9sYXN0U2VudFJlcSksdGhpcy5fcGVuZGluZ0VtaXR0ZXJzLnNldChyLG4pLHRoaXMuX3NlbmQobmV3IGhlKHRoaXMuX3dvcmtlcklkLHIsZSx0KSl9LG9uTGFzdExpc3RlbmVyUmVtb3ZlOigpPT57dGhpcy5fcGVuZGluZ0VtaXR0ZXJzLmRlbGV0ZShyKSx0aGlzLl9zZW5kKG5ldyBkZSh0aGlzLl93b3JrZXJJZCxyKSkscj1udWxsfX0pO3JldHVybiBuLmV2ZW50fWhhbmRsZU1lc3NhZ2UoZSl7ZSYmZS52c1dvcmtlciYmKC0xIT09dGhpcy5fd29ya2VySWQmJmUudnNXb3JrZXIhPT10aGlzLl93b3JrZXJJZHx8dGhpcy5faGFuZGxlTWVzc2FnZShlKSl9X2hhbmRsZU1lc3NhZ2UoZSl7c3dpdGNoKGUudHlwZSl7Y2FzZSAxOnJldHVybiB0aGlzLl9oYW5kbGVSZXBseU1lc3NhZ2UoZSk7Y2FzZSAwOnJldHVybiB0aGlzLl9oYW5kbGVSZXF1ZXN0TWVzc2FnZShlKTtjYXNlIDI6cmV0dXJuIHRoaXMuX2hhbmRsZVN1YnNjcmliZUV2ZW50TWVzc2FnZShlKTtjYXNlIDM6cmV0dXJuIHRoaXMuX2hhbmRsZUV2ZW50TWVzc2FnZShlKTtjYXNlIDQ6cmV0dXJuIHRoaXMuX2hhbmRsZVVuc3Vic2NyaWJlRXZlbnRNZXNzYWdlKGUpfX1faGFuZGxlUmVwbHlNZXNzYWdlKHIpe2lmKHRoaXMuX3BlbmRpbmdSZXBsaWVzW3Iuc2VxXSl7bGV0IHQ9dGhpcy5fcGVuZGluZ1JlcGxpZXNbci5zZXFdO2lmKGRlbGV0ZSB0aGlzLl9wZW5kaW5nUmVwbGllc1tyLnNlcV0sci5lcnIpe2xldCBlPXIuZXJyO3JldHVybiByLmVyci4kaXNFcnJvciYmKChlPW5ldyBFcnJvcikubmFtZT1yLmVyci5uYW1lLGUubWVzc2FnZT1yLmVyci5tZXNzYWdlLGUuc3RhY2s9ci5lcnIuc3RhY2spLHZvaWQgdC5yZWplY3QoZSl9dC5yZXNvbHZlKHIucmVzKX1lbHNlIGNvbnNvbGUud2FybigiR290IHJlcGx5IHRvIHVua25vd24gc2VxIil9X2hhbmRsZVJlcXVlc3RNZXNzYWdlKGUpe2xldCB0PWUucmVxLHI9dGhpcy5faGFuZGxlci5oYW5kbGVNZXNzYWdlKGUubWV0aG9kLGUuYXJncyk7ci50aGVuKGU9Pnt0aGlzLl9zZW5kKG5ldyB1ZSh0aGlzLl93b3JrZXJJZCx0LGUsdm9pZCAwKSl9LGU9PntlLmRldGFpbCBpbnN0YW5jZW9mIEVycm9yJiYoZS5kZXRhaWw9aChlLmRldGFpbCkpLHRoaXMuX3NlbmQobmV3IHVlKHRoaXMuX3dvcmtlcklkLHQsdm9pZCAwLGgoZSkpKX0pfV9oYW5kbGVTdWJzY3JpYmVFdmVudE1lc3NhZ2UoZSl7Y29uc3QgdD1lLnJlcTtlPXRoaXMuX2hhbmRsZXIuaGFuZGxlRXZlbnQoZS5ldmVudE5hbWUsZS5hcmcpKGU9Pnt0aGlzLl9zZW5kKG5ldyBmZSh0aGlzLl93b3JrZXJJZCx0LGUpKX0pO3RoaXMuX3BlbmRpbmdFdmVudHMuc2V0KHQsZSl9X2hhbmRsZUV2ZW50TWVzc2FnZShlKXt0aGlzLl9wZW5kaW5nRW1pdHRlcnMuaGFzKGUucmVxKT90aGlzLl9wZW5kaW5nRW1pdHRlcnMuZ2V0KGUucmVxKS5maXJlKGUuZXZlbnQpOmNvbnNvbGUud2FybigiR290IGV2ZW50IGZvciB1bmtub3duIHJlcSIpfV9oYW5kbGVVbnN1YnNjcmliZUV2ZW50TWVzc2FnZShlKXt0aGlzLl9wZW5kaW5nRXZlbnRzLmhhcyhlLnJlcSk/KHRoaXMuX3BlbmRpbmdFdmVudHMuZ2V0KGUucmVxKS5kaXNwb3NlKCksdGhpcy5fcGVuZGluZ0V2ZW50cy5kZWxldGUoZS5yZXEpKTpjb25zb2xlLndhcm4oIkdvdCB1bnN1YnNjcmliZSBmb3IgdW5rbm93biByZXEiKX1fc2VuZCh0KXtsZXQgcj1bXTtpZigwPT09dC50eXBlKWZvcihsZXQgZT0wO2U8dC5hcmdzLmxlbmd0aDtlKyspdC5hcmdzW2VdaW5zdGFuY2VvZiBBcnJheUJ1ZmZlciYmci5wdXNoKHQuYXJnc1tlXSk7ZWxzZSAxPT09dC50eXBlJiZ0LnJlcyBpbnN0YW5jZW9mIEFycmF5QnVmZmVyJiZyLnB1c2godC5yZXMpO3RoaXMuX2hhbmRsZXIuc2VuZE1lc3NhZ2UodCxyKX19ZnVuY3Rpb24gZ2UoZSl7cmV0dXJuIm8iPT09ZVswXSYmIm4iPT09ZVsxXSYmaWUoZS5jaGFyQ29kZUF0KDIpKX1mdW5jdGlvbiBwZShlKXtyZXR1cm4vXm9uRHluYW1pYy8udGVzdChlKSYmaWUoZS5jaGFyQ29kZUF0KDkpKX1mdW5jdGlvbiBiZShlLHIsbil7bGV0IHQ9e307Zm9yKGNvbnN0IGkgb2YgZSlwZShpKT90W2ldPSh0PT5mdW5jdGlvbihlKXtyZXR1cm4gbih0LGUpfSkoaSk6Z2UoaSk/dFtpXT1uKGksdm9pZCAwKTp0W2ldPSh0PT5mdW5jdGlvbigpe3ZhciBlPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywwKTtyZXR1cm4gcih0LGUpfSkoaSk7cmV0dXJuIHR9Y2xhc3MgdmV7Y29uc3RydWN0b3IocixlKXt0aGlzLl9yZXF1ZXN0SGFuZGxlckZhY3Rvcnk9ZSx0aGlzLl9yZXF1ZXN0SGFuZGxlcj1udWxsLHRoaXMuX3Byb3RvY29sPW5ldyBtZSh7c2VuZE1lc3NhZ2U6KGUsdCk9PntyKGUsdCl9LGhhbmRsZU1lc3NhZ2U6KGUsdCk9PnRoaXMuX2hhbmRsZU1lc3NhZ2UoZSx0KSxoYW5kbGVFdmVudDooZSx0KT0+dGhpcy5faGFuZGxlRXZlbnQoZSx0KX0pfW9ubWVzc2FnZShlKXt0aGlzLl9wcm90b2NvbC5oYW5kbGVNZXNzYWdlKGUpfV9oYW5kbGVNZXNzYWdlKGUsdCl7aWYoIiRpbml0aWFsaXplIj09PWUpcmV0dXJuIHRoaXMuaW5pdGlhbGl6ZSh0WzBdLHRbMV0sdFsyXSx0WzNdKTtpZighdGhpcy5fcmVxdWVzdEhhbmRsZXJ8fCJmdW5jdGlvbiIhPXR5cGVvZiB0aGlzLl9yZXF1ZXN0SGFuZGxlcltlXSlyZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKCJNaXNzaW5nIHJlcXVlc3RIYW5kbGVyIG9yIG1ldGhvZDogIitlKSk7dHJ5e3JldHVybiBQcm9taXNlLnJlc29sdmUodGhpcy5fcmVxdWVzdEhhbmRsZXJbZV0uYXBwbHkodGhpcy5fcmVxdWVzdEhhbmRsZXIsdCkpfWNhdGNoKGUpe3JldHVybiBQcm9taXNlLnJlamVjdChlKX19X2hhbmRsZUV2ZW50KGUsdCl7aWYoIXRoaXMuX3JlcXVlc3RIYW5kbGVyKXRocm93IG5ldyBFcnJvcigiTWlzc2luZyByZXF1ZXN0SGFuZGxlciIpO2lmKHBlKGUpKXt0PXRoaXMuX3JlcXVlc3RIYW5kbGVyW2VdLmNhbGwodGhpcy5fcmVxdWVzdEhhbmRsZXIsdCk7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHQpdGhyb3cgbmV3IEVycm9yKGBNaXNzaW5nIGR5bmFtaWMgZXZlbnQgJHtlfSBvbiByZXF1ZXN0IGhhbmRsZXIuYCk7cmV0dXJuIHR9aWYoZ2UoZSkpe3Q9dGhpcy5fcmVxdWVzdEhhbmRsZXJbZV07aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHQpdGhyb3cgbmV3IEVycm9yKGBNaXNzaW5nIGV2ZW50ICR7ZX0gb24gcmVxdWVzdCBoYW5kbGVyLmApO3JldHVybiB0fXRocm93IG5ldyBFcnJvcigiTWFsZm9ybWVkIGV2ZW50IG5hbWUgIitlKX1pbml0aWFsaXplKGUsdCxuLHIpe3RoaXMuX3Byb3RvY29sLnNldFdvcmtlcklkKGUpO2NvbnN0IGk9YmUociwoZSx0KT0+dGhpcy5fcHJvdG9jb2wuc2VuZE1lc3NhZ2UoZSx0KSwoZSx0KT0+dGhpcy5fcHJvdG9jb2wubGlzdGVuKGUsdCkpO3JldHVybiB0aGlzLl9yZXF1ZXN0SGFuZGxlckZhY3Rvcnk/KHRoaXMuX3JlcXVlc3RIYW5kbGVyPXRoaXMuX3JlcXVlc3RIYW5kbGVyRmFjdG9yeShpKSxQcm9taXNlLnJlc29sdmUoUSh0aGlzLl9yZXF1ZXN0SGFuZGxlcikpKToodCYmKHZvaWQgMCE9PXQuYmFzZVVybCYmZGVsZXRlIHQuYmFzZVVybCx2b2lkIDAhPT10LnBhdGhzJiZ2b2lkIDAhPT10LnBhdGhzLnZzJiZkZWxldGUgdC5wYXRocy52cyx0LnRydXN0ZWRUeXBlc1BvbGljeSxkZWxldGUgdC50cnVzdGVkVHlwZXNQb2xpY3ksdC5jYXRjaEVycm9yPSEwLE0ucmVxdWlyZS5jb25maWcodCkpLG5ldyBQcm9taXNlKCh0LHIpPT57Y29uc3QgZT1NLnJlcXVpcmU7ZShbbl0sZT0+e3RoaXMuX3JlcXVlc3RIYW5kbGVyPWUuY3JlYXRlKGkpLHRoaXMuX3JlcXVlc3RIYW5kbGVyP3QoUSh0aGlzLl9yZXF1ZXN0SGFuZGxlcikpOnIobmV3IEVycm9yKCJObyBSZXF1ZXN0SGFuZGxlciEiKSl9LHIpfSkpfX1jbGFzcyB5ZXtjb25zdHJ1Y3RvcihlLHQscixuKXt0aGlzLm9yaWdpbmFsU3RhcnQ9ZSx0aGlzLm9yaWdpbmFsTGVuZ3RoPXQsdGhpcy5tb2RpZmllZFN0YXJ0PXIsdGhpcy5tb2RpZmllZExlbmd0aD1ufWdldE9yaWdpbmFsRW5kKCl7cmV0dXJuIHRoaXMub3JpZ2luYWxTdGFydCt0aGlzLm9yaWdpbmFsTGVuZ3RofWdldE1vZGlmaWVkRW5kKCl7cmV0dXJuIHRoaXMubW9kaWZpZWRTdGFydCt0aGlzLm1vZGlmaWVkTGVuZ3RofX1mdW5jdGlvbiBDZShlLHQpe3JldHVybih0PDw1KS10K2V8MH1jbGFzcyB3ZXtjb25zdHJ1Y3RvcihlKXt0aGlzLnNvdXJjZT1lfWdldEVsZW1lbnRzKCl7Y29uc3Qgcj10aGlzLnNvdXJjZSxuPW5ldyBJbnQzMkFycmF5KHIubGVuZ3RoKTtmb3IobGV0IGU9MCx0PXIubGVuZ3RoO2U8dDtlKyspbltlXT1yLmNoYXJDb2RlQXQoZSk7cmV0dXJuIG59fWNsYXNzIF9le3N0YXRpYyBBc3NlcnQoZSx0KXtpZighZSl0aHJvdyBuZXcgRXJyb3IodCl9fWNsYXNzIFNle3N0YXRpYyBDb3B5KHQscixuLGksbyl7Zm9yKGxldCBlPTA7ZTxvO2UrKyluW2krZV09dFtyK2VdfXN0YXRpYyBDb3B5Mih0LHIsbixpLG8pe2ZvcihsZXQgZT0wO2U8bztlKyspbltpK2VdPXRbcitlXX19Y2xhc3MgQWV7Y29uc3RydWN0b3IoKXt0aGlzLm1fY2hhbmdlcz1bXSx0aGlzLm1fb3JpZ2luYWxTdGFydD0xMDczNzQxODI0LHRoaXMubV9tb2RpZmllZFN0YXJ0PTEwNzM3NDE4MjQsdGhpcy5tX29yaWdpbmFsQ291bnQ9MCx0aGlzLm1fbW9kaWZpZWRDb3VudD0wfU1hcmtOZXh0Q2hhbmdlKCl7KDA8dGhpcy5tX29yaWdpbmFsQ291bnR8fDA8dGhpcy5tX21vZGlmaWVkQ291bnQpJiZ0aGlzLm1fY2hhbmdlcy5wdXNoKG5ldyB5ZSh0aGlzLm1fb3JpZ2luYWxTdGFydCx0aGlzLm1fb3JpZ2luYWxDb3VudCx0aGlzLm1fbW9kaWZpZWRTdGFydCx0aGlzLm1fbW9kaWZpZWRDb3VudCkpLHRoaXMubV9vcmlnaW5hbENvdW50PTAsdGhpcy5tX21vZGlmaWVkQ291bnQ9MCx0aGlzLm1fb3JpZ2luYWxTdGFydD0xMDczNzQxODI0LHRoaXMubV9tb2RpZmllZFN0YXJ0PTEwNzM3NDE4MjR9QWRkT3JpZ2luYWxFbGVtZW50KGUsdCl7dGhpcy5tX29yaWdpbmFsU3RhcnQ9TWF0aC5taW4odGhpcy5tX29yaWdpbmFsU3RhcnQsZSksdGhpcy5tX21vZGlmaWVkU3RhcnQ9TWF0aC5taW4odGhpcy5tX21vZGlmaWVkU3RhcnQsdCksdGhpcy5tX29yaWdpbmFsQ291bnQrK31BZGRNb2RpZmllZEVsZW1lbnQoZSx0KXt0aGlzLm1fb3JpZ2luYWxTdGFydD1NYXRoLm1pbih0aGlzLm1fb3JpZ2luYWxTdGFydCxlKSx0aGlzLm1fbW9kaWZpZWRTdGFydD1NYXRoLm1pbih0aGlzLm1fbW9kaWZpZWRTdGFydCx0KSx0aGlzLm1fbW9kaWZpZWRDb3VudCsrfWdldENoYW5nZXMoKXtyZXR1cm4oMDx0aGlzLm1fb3JpZ2luYWxDb3VudHx8MDx0aGlzLm1fbW9kaWZpZWRDb3VudCkmJnRoaXMuTWFya05leHRDaGFuZ2UoKSx0aGlzLm1fY2hhbmdlc31nZXRSZXZlcnNlQ2hhbmdlcygpe3JldHVybigwPHRoaXMubV9vcmlnaW5hbENvdW50fHwwPHRoaXMubV9tb2RpZmllZENvdW50KSYmdGhpcy5NYXJrTmV4dENoYW5nZSgpLHRoaXMubV9jaGFuZ2VzLnJldmVyc2UoKSx0aGlzLm1fY2hhbmdlc319Y2xhc3MgeGV7Y29uc3RydWN0b3IoZSx0LHI9bnVsbCl7dGhpcy5Db250aW51ZVByb2Nlc3NpbmdQcmVkaWNhdGU9cix0aGlzLl9vcmlnaW5hbFNlcXVlbmNlPWUsdGhpcy5fbW9kaWZpZWRTZXF1ZW5jZT10O3ZhcltyLGUsbl09eGUuX2dldEVsZW1lbnRzKGUpLFt0LGksb109eGUuX2dldEVsZW1lbnRzKHQpO3RoaXMuX2hhc1N0cmluZ3M9biYmbyx0aGlzLl9vcmlnaW5hbFN0cmluZ0VsZW1lbnRzPXIsdGhpcy5fb3JpZ2luYWxFbGVtZW50c09ySGFzaD1lLHRoaXMuX21vZGlmaWVkU3RyaW5nRWxlbWVudHM9dCx0aGlzLl9tb2RpZmllZEVsZW1lbnRzT3JIYXNoPWksdGhpcy5tX2ZvcndhcmRIaXN0b3J5PVtdLHRoaXMubV9yZXZlcnNlSGlzdG9yeT1bXX1zdGF0aWMgX2lzU3RyaW5nQXJyYXkoZSl7cmV0dXJuIDA8ZS5sZW5ndGgmJiJzdHJpbmciPT10eXBlb2YgZVswXX1zdGF0aWMgX2dldEVsZW1lbnRzKGUpe3ZhciByPWUuZ2V0RWxlbWVudHMoKTtpZih4ZS5faXNTdHJpbmdBcnJheShyKSl7Y29uc3Qgbj1uZXcgSW50MzJBcnJheShyLmxlbmd0aCk7Zm9yKGxldCBlPTAsdD1yLmxlbmd0aDtlPHQ7ZSsrKW5bZV09ZnVuY3Rpb24ocixuKXtuPUNlKDE0OTQxNyxuKTtmb3IobGV0IGU9MCx0PXIubGVuZ3RoO2U8dDtlKyspbj1DZShyLmNoYXJDb2RlQXQoZSksbik7cmV0dXJuIG59KHJbZV0sMCk7cmV0dXJuW3IsbiwhMF19cmV0dXJuIHIgaW5zdGFuY2VvZiBJbnQzMkFycmF5P1tbXSxyLCExXTpbW10sbmV3IEludDMyQXJyYXkociksITFdfUVsZW1lbnRzQXJlRXF1YWwoZSx0KXtyZXR1cm4gdGhpcy5fb3JpZ2luYWxFbGVtZW50c09ySGFzaFtlXT09PXRoaXMuX21vZGlmaWVkRWxlbWVudHNPckhhc2hbdF0mJighdGhpcy5faGFzU3RyaW5nc3x8dGhpcy5fb3JpZ2luYWxTdHJpbmdFbGVtZW50c1tlXT09PXRoaXMuX21vZGlmaWVkU3RyaW5nRWxlbWVudHNbdF0pfUVsZW1lbnRzQXJlU3RyaWN0RXF1YWwoZSx0KXtyZXR1cm4hIXRoaXMuRWxlbWVudHNBcmVFcXVhbChlLHQpJiZ4ZS5fZ2V0U3RyaWN0RWxlbWVudCh0aGlzLl9vcmlnaW5hbFNlcXVlbmNlLGUpPT09eGUuX2dldFN0cmljdEVsZW1lbnQodGhpcy5fbW9kaWZpZWRTZXF1ZW5jZSx0KX1zdGF0aWMgX2dldFN0cmljdEVsZW1lbnQoZSx0KXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgZS5nZXRTdHJpY3RFbGVtZW50P2UuZ2V0U3RyaWN0RWxlbWVudCh0KTpudWxsfU9yaWdpbmFsRWxlbWVudHNBcmVFcXVhbChlLHQpe3JldHVybiB0aGlzLl9vcmlnaW5hbEVsZW1lbnRzT3JIYXNoW2VdPT09dGhpcy5fb3JpZ2luYWxFbGVtZW50c09ySGFzaFt0XSYmKCF0aGlzLl9oYXNTdHJpbmdzfHx0aGlzLl9vcmlnaW5hbFN0cmluZ0VsZW1lbnRzW2VdPT09dGhpcy5fb3JpZ2luYWxTdHJpbmdFbGVtZW50c1t0XSl9TW9kaWZpZWRFbGVtZW50c0FyZUVxdWFsKGUsdCl7cmV0dXJuIHRoaXMuX21vZGlmaWVkRWxlbWVudHNPckhhc2hbZV09PT10aGlzLl9tb2RpZmllZEVsZW1lbnRzT3JIYXNoW3RdJiYoIXRoaXMuX2hhc1N0cmluZ3N8fHRoaXMuX21vZGlmaWVkU3RyaW5nRWxlbWVudHNbZV09PT10aGlzLl9tb2RpZmllZFN0cmluZ0VsZW1lbnRzW3RdKX1Db21wdXRlRGlmZihlKXtyZXR1cm4gdGhpcy5fQ29tcHV0ZURpZmYoMCx0aGlzLl9vcmlnaW5hbEVsZW1lbnRzT3JIYXNoLmxlbmd0aC0xLDAsdGhpcy5fbW9kaWZpZWRFbGVtZW50c09ySGFzaC5sZW5ndGgtMSxlKX1fQ29tcHV0ZURpZmYoZSx0LHIsbixpKXt2YXIgbz1bITFdO2xldCBhPXRoaXMuQ29tcHV0ZURpZmZSZWN1cnNpdmUoZSx0LHIsbixvKTtyZXR1cm4gaSYmKGE9dGhpcy5QcmV0dGlmeUNoYW5nZXMoYSkpLHtxdWl0RWFybHk6b1swXSxjaGFuZ2VzOmF9fUNvbXB1dGVEaWZmUmVjdXJzaXZlKHQscixuLGksbyl7Zm9yKG9bMF09ITE7dDw9ciYmbjw9aSYmdGhpcy5FbGVtZW50c0FyZUVxdWFsKHQsbik7KXQrKyxuKys7Zm9yKDt0PD1yJiZuPD1pJiZ0aGlzLkVsZW1lbnRzQXJlRXF1YWwocixpKTspci0tLGktLTtpZihyPHR8fGk8bil7bGV0IGU7cmV0dXJuIGU9bjw9aT8oX2UuQXNzZXJ0KHQ9PT1yKzEsIm9yaWdpbmFsU3RhcnQgc2hvdWxkIG9ubHkgYmUgb25lIG1vcmUgdGhhbiBvcmlnaW5hbEVuZCIpLFtuZXcgeWUodCwwLG4saS1uKzEpXSk6dDw9cj8oX2UuQXNzZXJ0KG49PT1pKzEsIm1vZGlmaWVkU3RhcnQgc2hvdWxkIG9ubHkgYmUgb25lIG1vcmUgdGhhbiBtb2RpZmllZEVuZCIpLFtuZXcgeWUodCxyLXQrMSxuLDApXSk6KF9lLkFzc2VydCh0PT09cisxLCJvcmlnaW5hbFN0YXJ0IHNob3VsZCBvbmx5IGJlIG9uZSBtb3JlIHRoYW4gb3JpZ2luYWxFbmQiKSxfZS5Bc3NlcnQobj09PWkrMSwibW9kaWZpZWRTdGFydCBzaG91bGQgb25seSBiZSBvbmUgbW9yZSB0aGFuIG1vZGlmaWVkRW5kIiksW10pfXZhciBhPVswXSxzPVswXSxsPXRoaXMuQ29tcHV0ZVJlY3Vyc2lvblBvaW50KHQscixuLGksYSxzLG8pLGE9YVswXSxzPXNbMF07aWYobnVsbCE9PWwpcmV0dXJuIGw7aWYob1swXSlyZXR1cm5bbmV3IHllKHQsci10KzEsbixpLW4rMSldO3tsPXRoaXMuQ29tcHV0ZURpZmZSZWN1cnNpdmUodCxhLG4scyxvKTtsZXQgZT1bXTtyZXR1cm4gZT1vWzBdP1tuZXcgeWUoYSsxLHItKGErMSkrMSxzKzEsaS0ocysxKSsxKV06dGhpcy5Db21wdXRlRGlmZlJlY3Vyc2l2ZShhKzEscixzKzEsaSxvKSx0aGlzLkNvbmNhdGVuYXRlQ2hhbmdlcyhsLGUpfX1XQUxLVFJBQ0UodSxyLGgsZixkLG0sZyxwLGUsYix0LHYseSxuLEMsdyxfLFMpe2xldCBBPW51bGwsaT1uZXcgQWUseD1yLEU9aCxvPXlbMF0td1swXS1mLGE9LTEwNzM3NDE4MjQscz10aGlzLm1fZm9yd2FyZEhpc3RvcnkubGVuZ3RoLTE7ZG97dmFyIGw9byt1O289bD09PXh8fGw8RSYmZVtsLTFdPGVbbCsxXT8obj0odD1lW2wrMV0pLW8tZix0PGEmJmkuTWFya05leHRDaGFuZ2UoKSxhPXQsaS5BZGRNb2RpZmllZEVsZW1lbnQodCsxLG4pLGwrMS11KToobj0odD1lW2wtMV0rMSktby1mLHQ8YSYmaS5NYXJrTmV4dENoYW5nZSgpLGE9dC0xLGkuQWRkT3JpZ2luYWxFbGVtZW50KHQsbisxKSxsLTEtdSksMDw9cyYmKHU9KGU9dGhpcy5tX2ZvcndhcmRIaXN0b3J5W3NdKVswXSx4PTEsRT1lLmxlbmd0aC0xKX13aGlsZSgtMTw9LS1zKTtpZihyPWkuZ2V0UmV2ZXJzZUNoYW5nZXMoKSxTWzBdKXtsZXQgZT15WzBdKzEsdD13WzBdKzE7aWYobnVsbCE9PXImJjA8ci5sZW5ndGgpe2NvbnN0IGs9cltyLmxlbmd0aC0xXTtlPU1hdGgubWF4KGUsay5nZXRPcmlnaW5hbEVuZCgpKSx0PU1hdGgubWF4KHQsay5nZXRNb2RpZmllZEVuZCgpKX1BPVtuZXcgeWUoZSx2LWUrMSx0LEMtdCsxKV19ZWxzZXtpPW5ldyBBZSx4PW0sRT1nLG89eVswXS13WzBdLXAsYT0xMDczNzQxODI0LHM9Xz90aGlzLm1fcmV2ZXJzZUhpc3RvcnkubGVuZ3RoLTE6dGhpcy5tX3JldmVyc2VIaXN0b3J5Lmxlbmd0aC0yO2Rve3ZhciBjPW8rZDtvPWM9PT14fHxjPEUmJmJbYy0xXT49YltjKzFdPyhuPSh0PWJbYysxXS0xKS1vLXAsdD5hJiZpLk1hcmtOZXh0Q2hhbmdlKCksYT10KzEsaS5BZGRPcmlnaW5hbEVsZW1lbnQodCsxLG4rMSksYysxLWQpOihuPSh0PWJbYy0xXSktby1wLHQ+YSYmaS5NYXJrTmV4dENoYW5nZSgpLGE9dCxpLkFkZE1vZGlmaWVkRWxlbWVudCh0KzEsbisxKSxjLTEtZCksMDw9cyYmKGQ9KGI9dGhpcy5tX3JldmVyc2VIaXN0b3J5W3NdKVswXSx4PTEsRT1iLmxlbmd0aC0xKX13aGlsZSgtMTw9LS1zKTtBPWkuZ2V0Q2hhbmdlcygpfXJldHVybiB0aGlzLkNvbmNhdGVuYXRlQ2hhbmdlcyhyLEEpfUNvbXB1dGVSZWN1cnNpb25Qb2ludChpLG8sbSxnLHAsYix2KXtsZXQgYT0wLHM9MCxsPTAseT0wLGM9MCxDPTA7aS0tLG0tLSxiW3BbMF09MF09MCx0aGlzLm1fZm9yd2FyZEhpc3Rvcnk9W10sdGhpcy5tX3JldmVyc2VIaXN0b3J5PVtdO3ZhciBlPW8taSsoZy1tKSx3PTErZTtjb25zdCB1PW5ldyBJbnQzMkFycmF5KHcpLGg9bmV3IEludDMyQXJyYXkodyk7dmFyIGY9Zy1tLGQ9by1pLF89aS1tLFM9by1nLEE9KGQtZiklMj09MDt1W2ZdPWksaFtkXT1vLHZbMF09ITE7Zm9yKGxldCBuPTE7bjw9ZS8yKzE7bisrKXtsZXQgdD0wLHI9MDtsPXRoaXMuQ2xpcERpYWdvbmFsQm91bmQoZi1uLG4sZix3KSx5PXRoaXMuQ2xpcERpYWdvbmFsQm91bmQoZituLG4sZix3KTtmb3IobGV0IGU9bDtlPD15O2UrPTIpe2E9ZT09PWx8fGU8eSYmdVtlLTFdPHVbZSsxXT91W2UrMV06dVtlLTFdKzEscz1hLShlLWYpLV87Zm9yKHZhciB4PWE7YTxvJiZzPGcmJnRoaXMuRWxlbWVudHNBcmVFcXVhbChhKzEscysxKTspYSsrLHMrKztpZigodVtlXT1hKStzPnQrciYmKHQ9YSxyPXMpLCFBJiZNYXRoLmFicyhlLWQpPD1uLTEmJmE+PWhbZV0pcmV0dXJuIHBbMF09YSxiWzBdPXMseDw9aFtlXSYmbjw9MTQ0OD90aGlzLldBTEtUUkFDRShmLGwseSxfLGQsYyxDLFMsdSxoLGEsbyxwLHMsZyxiLEEsdik6bnVsbH12YXIgRT0odC1pKyhyLW0pLW4pLzI7aWYobnVsbCE9PXRoaXMuQ29udGludWVQcm9jZXNzaW5nUHJlZGljYXRlJiYhdGhpcy5Db250aW51ZVByb2Nlc3NpbmdQcmVkaWNhdGUodCxFKSlyZXR1cm4gdlswXT0hMCxwWzBdPXQsYlswXT1yLDA8RSYmbjw9MTQ0OD90aGlzLldBTEtUUkFDRShmLGwseSxfLGQsYyxDLFMsdSxoLGEsbyxwLHMsZyxiLEEsdik6KGkrKyxtKyssW25ldyB5ZShpLG8taSsxLG0sZy1tKzEpXSk7Yz10aGlzLkNsaXBEaWFnb25hbEJvdW5kKGQtbixuLGQsdyksQz10aGlzLkNsaXBEaWFnb25hbEJvdW5kKGQrbixuLGQsdyk7Zm9yKGxldCBlPWM7ZTw9QztlKz0yKXthPWU9PT1jfHxlPEMmJmhbZS0xXT49aFtlKzFdP2hbZSsxXS0xOmhbZS0xXSxzPWEtKGUtZCktUztmb3IodmFyIGs9YTthPmkmJnM+bSYmdGhpcy5FbGVtZW50c0FyZUVxdWFsKGEscyk7KWEtLSxzLS07aWYoaFtlXT1hLEEmJk1hdGguYWJzKGUtZik8PW4mJmE8PXVbZV0pcmV0dXJuIHBbMF09YSxiWzBdPXMsaz49dVtlXSYmbjw9MTQ0OD90aGlzLldBTEtUUkFDRShmLGwseSxfLGQsYyxDLFMsdSxoLGEsbyxwLHMsZyxiLEEsdik6bnVsbH1pZihuPD0xNDQ3KXtsZXQgZT1uZXcgSW50MzJBcnJheSh5LWwrMik7ZVswXT1mLWwrMSxTZS5Db3B5Mih1LGwsZSwxLHktbCsxKSx0aGlzLm1fZm9yd2FyZEhpc3RvcnkucHVzaChlKSwoZT1uZXcgSW50MzJBcnJheShDLWMrMikpWzBdPWQtYysxLFNlLkNvcHkyKGgsYyxlLDEsQy1jKzEpLHRoaXMubV9yZXZlcnNlSGlzdG9yeS5wdXNoKGUpfX1yZXR1cm4gdGhpcy5XQUxLVFJBQ0UoZixsLHksXyxkLGMsQyxTLHUsaCxhLG8scCxzLGcsYixBLHYpfVByZXR0aWZ5Q2hhbmdlcyhvKXtmb3IobGV0IGU9MDtlPG8ubGVuZ3RoO2UrKyl7Y29uc3QgdD1vW2VdO2Zvcih2YXIgaD1lPG8ubGVuZ3RoLTE/b1tlKzFdLm9yaWdpbmFsU3RhcnQ6dGhpcy5fb3JpZ2luYWxFbGVtZW50c09ySGFzaC5sZW5ndGgsZj1lPG8ubGVuZ3RoLTE/b1tlKzFdLm1vZGlmaWVkU3RhcnQ6dGhpcy5fbW9kaWZpZWRFbGVtZW50c09ySGFzaC5sZW5ndGgsZD0wPHQub3JpZ2luYWxMZW5ndGgsbT0wPHQubW9kaWZpZWRMZW5ndGg7dC5vcmlnaW5hbFN0YXJ0K3Qub3JpZ2luYWxMZW5ndGg8aCYmdC5tb2RpZmllZFN0YXJ0K3QubW9kaWZpZWRMZW5ndGg8ZiYmKCFkfHx0aGlzLk9yaWdpbmFsRWxlbWVudHNBcmVFcXVhbCh0Lm9yaWdpbmFsU3RhcnQsdC5vcmlnaW5hbFN0YXJ0K3Qub3JpZ2luYWxMZW5ndGgpKSYmKCFtfHx0aGlzLk1vZGlmaWVkRWxlbWVudHNBcmVFcXVhbCh0Lm1vZGlmaWVkU3RhcnQsdC5tb2RpZmllZFN0YXJ0K3QubW9kaWZpZWRMZW5ndGgpKTspe3ZhciBnPXRoaXMuRWxlbWVudHNBcmVTdHJpY3RFcXVhbCh0Lm9yaWdpbmFsU3RhcnQsdC5tb2RpZmllZFN0YXJ0KTtpZih0aGlzLkVsZW1lbnRzQXJlU3RyaWN0RXF1YWwodC5vcmlnaW5hbFN0YXJ0K3Qub3JpZ2luYWxMZW5ndGgsdC5tb2RpZmllZFN0YXJ0K3QubW9kaWZpZWRMZW5ndGgpJiYhZylicmVhazt0Lm9yaWdpbmFsU3RhcnQrKyx0Lm1vZGlmaWVkU3RhcnQrK312YXIgcD1bbnVsbF07ZTxvLmxlbmd0aC0xJiZ0aGlzLkNoYW5nZXNPdmVybGFwKG9bZV0sb1tlKzFdLHApJiYob1tlXT1wWzBdLG8uc3BsaWNlKGUrMSwxKSxlLS0pfWZvcihsZXQgZT1vLmxlbmd0aC0xOzA8PWU7ZS0tKXtjb25zdCBjPW9bZV07bGV0IHQ9MCxyPTA7MDxlJiYobD1vW2UtMV0sdD1sLm9yaWdpbmFsU3RhcnQrbC5vcmlnaW5hbExlbmd0aCxyPWwubW9kaWZpZWRTdGFydCtsLm1vZGlmaWVkTGVuZ3RoKTt2YXIgYj0wPGMub3JpZ2luYWxMZW5ndGgsdj0wPGMubW9kaWZpZWRMZW5ndGg7bGV0IG49MCxpPXRoaXMuX2JvdW5kYXJ5U2NvcmUoYy5vcmlnaW5hbFN0YXJ0LGMub3JpZ2luYWxMZW5ndGgsYy5tb2RpZmllZFN0YXJ0LGMubW9kaWZpZWRMZW5ndGgpO2ZvcihsZXQgZT0xOztlKyspe3ZhciBhPWMub3JpZ2luYWxTdGFydC1lLHM9Yy5tb2RpZmllZFN0YXJ0LWU7aWYoYTx0fHxzPHIpYnJlYWs7aWYoYiYmIXRoaXMuT3JpZ2luYWxFbGVtZW50c0FyZUVxdWFsKGEsYStjLm9yaWdpbmFsTGVuZ3RoKSlicmVhaztpZih2JiYhdGhpcy5Nb2RpZmllZEVsZW1lbnRzQXJlRXF1YWwocyxzK2MubW9kaWZpZWRMZW5ndGgpKWJyZWFrO2E9KGE9PT10JiZzPT09cj81OjApK3RoaXMuX2JvdW5kYXJ5U2NvcmUoYSxjLm9yaWdpbmFsTGVuZ3RoLHMsYy5tb2RpZmllZExlbmd0aCk7YT5pJiYoaT1hLG49ZSl9Yy5vcmlnaW5hbFN0YXJ0LT1uLGMubW9kaWZpZWRTdGFydC09bjt2YXIgbD1bbnVsbF07MDxlJiZ0aGlzLkNoYW5nZXNPdmVybGFwKG9bZS0xXSxvW2VdLGwpJiYob1tlLTFdPWxbMF0sby5zcGxpY2UoZSwxKSxlKyspfWlmKHRoaXMuX2hhc1N0cmluZ3MpZm9yKGxldCBlPTEsdD1vLmxlbmd0aDtlPHQ7ZSsrKXtjb25zdCBpPW9bZS0xXSx1PW9bZV07dmFyIHk9dS5vcmlnaW5hbFN0YXJ0LWkub3JpZ2luYWxTdGFydC1pLm9yaWdpbmFsTGVuZ3RoLEM9aS5vcmlnaW5hbFN0YXJ0LHc9dS5vcmlnaW5hbFN0YXJ0K3Uub3JpZ2luYWxMZW5ndGgscj13LUMsbj1pLm1vZGlmaWVkU3RhcnQsXz11Lm1vZGlmaWVkU3RhcnQrdS5tb2RpZmllZExlbmd0aCxTPV8tbjt5PDUmJnI8MjAmJlM8MjAmJigoQz10aGlzLl9maW5kQmV0dGVyQ29udGlndW91c1NlcXVlbmNlKEMscixuLFMseSkpJiYoW3Isbl09QyxyPT09aS5vcmlnaW5hbFN0YXJ0K2kub3JpZ2luYWxMZW5ndGgmJm49PT1pLm1vZGlmaWVkU3RhcnQraS5tb2RpZmllZExlbmd0aHx8KGkub3JpZ2luYWxMZW5ndGg9ci1pLm9yaWdpbmFsU3RhcnQsaS5tb2RpZmllZExlbmd0aD1uLWkubW9kaWZpZWRTdGFydCx1Lm9yaWdpbmFsU3RhcnQ9cit5LHUubW9kaWZpZWRTdGFydD1uK3ksdS5vcmlnaW5hbExlbmd0aD13LXUub3JpZ2luYWxTdGFydCx1Lm1vZGlmaWVkTGVuZ3RoPV8tdS5tb2RpZmllZFN0YXJ0KSkpfXJldHVybiBvfV9maW5kQmV0dGVyQ29udGlndW91c1NlcXVlbmNlKGUsdCxyLG4saSl7aWYodDxpfHxuPGkpcmV0dXJuIG51bGw7dmFyIG89ZSt0LWkrMSx1PXIrbi1pKzE7bGV0IGE9MCxzPTAsbD0wO2ZvcihsZXQgdD1lO3Q8bzt0KyspZm9yKGxldCBlPXI7ZTx1O2UrKyl7dmFyIGM9dGhpcy5fY29udGlndW91c1NlcXVlbmNlU2NvcmUodCxlLGkpOzA8YyYmYz5hJiYoYT1jLHM9dCxsPWUpfXJldHVybiAwPGE/W3MsbF06bnVsbH1fY29udGlndW91c1NlcXVlbmNlU2NvcmUodCxyLG4pe2xldCBpPTA7Zm9yKGxldCBlPTA7ZTxuO2UrKyl7aWYoIXRoaXMuRWxlbWVudHNBcmVFcXVhbCh0K2UscitlKSlyZXR1cm4gMDtpKz10aGlzLl9vcmlnaW5hbFN0cmluZ0VsZW1lbnRzW3QrZV0ubGVuZ3RofXJldHVybiBpfV9PcmlnaW5hbElzQm91bmRhcnkoZSl7cmV0dXJuIGU8PTB8fGU+PXRoaXMuX29yaWdpbmFsRWxlbWVudHNPckhhc2gubGVuZ3RoLTF8fHRoaXMuX2hhc1N0cmluZ3MmJi9eXHMqJC8udGVzdCh0aGlzLl9vcmlnaW5hbFN0cmluZ0VsZW1lbnRzW2VdKX1fT3JpZ2luYWxSZWdpb25Jc0JvdW5kYXJ5KGUsdCl7aWYodGhpcy5fT3JpZ2luYWxJc0JvdW5kYXJ5KGUpfHx0aGlzLl9PcmlnaW5hbElzQm91bmRhcnkoZS0xKSlyZXR1cm4hMDtpZigwPHQpe2U9ZSt0O2lmKHRoaXMuX09yaWdpbmFsSXNCb3VuZGFyeShlLTEpfHx0aGlzLl9PcmlnaW5hbElzQm91bmRhcnkoZSkpcmV0dXJuITB9cmV0dXJuITF9X01vZGlmaWVkSXNCb3VuZGFyeShlKXtyZXR1cm4gZTw9MHx8ZT49dGhpcy5fbW9kaWZpZWRFbGVtZW50c09ySGFzaC5sZW5ndGgtMXx8dGhpcy5faGFzU3RyaW5ncyYmL15ccyokLy50ZXN0KHRoaXMuX21vZGlmaWVkU3RyaW5nRWxlbWVudHNbZV0pfV9Nb2RpZmllZFJlZ2lvbklzQm91bmRhcnkoZSx0KXtpZih0aGlzLl9Nb2RpZmllZElzQm91bmRhcnkoZSl8fHRoaXMuX01vZGlmaWVkSXNCb3VuZGFyeShlLTEpKXJldHVybiEwO2lmKDA8dCl7ZT1lK3Q7aWYodGhpcy5fTW9kaWZpZWRJc0JvdW5kYXJ5KGUtMSl8fHRoaXMuX01vZGlmaWVkSXNCb3VuZGFyeShlKSlyZXR1cm4hMH1yZXR1cm4hMX1fYm91bmRhcnlTY29yZShlLHQscixuKXtyZXR1cm4odGhpcy5fT3JpZ2luYWxSZWdpb25Jc0JvdW5kYXJ5KGUsdCk/MTowKSsodGhpcy5fTW9kaWZpZWRSZWdpb25Jc0JvdW5kYXJ5KHIsbik/MTowKX1Db25jYXRlbmF0ZUNoYW5nZXMoZSx0KXt2YXIgcj1bXTtpZigwPT09ZS5sZW5ndGh8fDA9PT10Lmxlbmd0aClyZXR1cm4gMDx0Lmxlbmd0aD90OmU7aWYodGhpcy5DaGFuZ2VzT3ZlcmxhcChlW2UubGVuZ3RoLTFdLHRbMF0scikpe2NvbnN0IG49bmV3IEFycmF5KGUubGVuZ3RoK3QubGVuZ3RoLTEpO3JldHVybiBTZS5Db3B5KGUsMCxuLDAsZS5sZW5ndGgtMSksbltlLmxlbmd0aC0xXT1yWzBdLFNlLkNvcHkodCwxLG4sZS5sZW5ndGgsdC5sZW5ndGgtMSksbn1yZXR1cm4gcj1uZXcgQXJyYXkoZS5sZW5ndGgrdC5sZW5ndGgpLFNlLkNvcHkoZSwwLHIsMCxlLmxlbmd0aCksU2UuQ29weSh0LDAscixlLmxlbmd0aCx0Lmxlbmd0aCkscn1DaGFuZ2VzT3ZlcmxhcChyLG4saSl7aWYoX2UuQXNzZXJ0KHIub3JpZ2luYWxTdGFydDw9bi5vcmlnaW5hbFN0YXJ0LCJMZWZ0IGNoYW5nZSBpcyBub3QgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIHJpZ2h0IGNoYW5nZSIpLF9lLkFzc2VydChyLm1vZGlmaWVkU3RhcnQ8PW4ubW9kaWZpZWRTdGFydCwiTGVmdCBjaGFuZ2UgaXMgbm90IGxlc3MgdGhhbiBvciBlcXVhbCB0byByaWdodCBjaGFuZ2UiKSxyLm9yaWdpbmFsU3RhcnQrci5vcmlnaW5hbExlbmd0aD49bi5vcmlnaW5hbFN0YXJ0fHxyLm1vZGlmaWVkU3RhcnQrci5tb2RpZmllZExlbmd0aD49bi5tb2RpZmllZFN0YXJ0KXt2YXIgbz1yLm9yaWdpbmFsU3RhcnQ7bGV0IGU9ci5vcmlnaW5hbExlbmd0aDt2YXIgYT1yLm1vZGlmaWVkU3RhcnQ7bGV0IHQ9ci5tb2RpZmllZExlbmd0aDtyZXR1cm4gci5vcmlnaW5hbFN0YXJ0K3Iub3JpZ2luYWxMZW5ndGg+PW4ub3JpZ2luYWxTdGFydCYmKGU9bi5vcmlnaW5hbFN0YXJ0K24ub3JpZ2luYWxMZW5ndGgtci5vcmlnaW5hbFN0YXJ0KSxyLm1vZGlmaWVkU3RhcnQrci5tb2RpZmllZExlbmd0aD49bi5tb2RpZmllZFN0YXJ0JiYodD1uLm1vZGlmaWVkU3RhcnQrbi5tb2RpZmllZExlbmd0aC1yLm1vZGlmaWVkU3RhcnQpLGlbMF09bmV3IHllKG8sZSxhLHQpLCEwfXJldHVybiBpWzBdPW51bGwsITF9Q2xpcERpYWdvbmFsQm91bmQoZSx0LHIsbil7aWYoMDw9ZSYmZTxuKXJldHVybiBlO3Q9dCUyPT0wO3JldHVybiBlPDA/dD09KHIlMj09MCk/MDoxOnQ9PSgobi1yLTEpJTI9PTApP24tMTpuLTJ9fWxldCBFZTtpZih2b2lkIDAhPT1NLnZzY29kZSYmdm9pZCAwIT09TS52c2NvZGUucHJvY2Vzcyl7Y29uc3QgYWE9TS52c2NvZGUucHJvY2VzcztFZT17Z2V0IHBsYXRmb3JtKCl7cmV0dXJuIGFhLnBsYXRmb3JtfSxnZXQgYXJjaCgpe3JldHVybiBhYS5hcmNofSxnZXQgZW52KCl7cmV0dXJuIGFhLmVudn0sY3dkKCl7cmV0dXJuIGFhLmN3ZCgpfX19ZWxzZSBFZT0idW5kZWZpbmVkIiE9dHlwZW9mIHByb2Nlc3M/e2dldCBwbGF0Zm9ybSgpe3JldHVybiBwcm9jZXNzLnBsYXRmb3JtfSxnZXQgYXJjaCgpe3JldHVybiBwcm9jZXNzLmFyY2h9LGdldCBlbnYoKXtyZXR1cm4gcHJvY2Vzcy5lbnZ9LGN3ZCgpe3JldHVybiBwcm9jZXNzLmVudi5WU0NPREVfQ1dEfHxwcm9jZXNzLmN3ZCgpfX06e2dldCBwbGF0Zm9ybSgpe3JldHVybiBUPyJ3aW4zMiI6ST8iZGFyd2luIjoibGludXgifSxnZXQgYXJjaCgpe30sZ2V0IGVudigpe3JldHVybnt9fSxjd2QoKXtyZXR1cm4iLyJ9fTtjb25zdCBrZT1FZS5jd2QsTmU9RWUuZW52O3ZhciBMZSxNZSxyPUVlLnBsYXRmb3JtO2NsYXNzIE9lIGV4dGVuZHMgRXJyb3J7Y29uc3RydWN0b3IoZSx0LHIpe2xldCBuOyJzdHJpbmciPT10eXBlb2YgdCYmMD09PXQuaW5kZXhPZigibm90ICIpPyhuPSJtdXN0IG5vdCBiZSIsdD10LnJlcGxhY2UoL15ub3QgLywiIikpOm49Im11c3QgYmUiO3ZhciBpPS0xIT09ZS5pbmRleE9mKCIuIik/InByb3BlcnR5IjoiYXJndW1lbnQiLGU9YFRoZSAiJHtlfSIgJHtpfSAke259IG9mIHR5cGUgYCt0O3N1cGVyKGUrPSIuIFJlY2VpdmVkIHR5cGUgIit0eXBlb2YgciksdGhpcy5jb2RlPSJFUlJfSU5WQUxJRF9BUkdfVFlQRSJ9fWZ1bmN0aW9uIFBlKGUsdCl7aWYoInN0cmluZyIhPXR5cGVvZiBlKXRocm93IG5ldyBPZSh0LCJzdHJpbmciLGUpfWZ1bmN0aW9uIGYoZSl7cmV0dXJuIDQ3PT09ZXx8OTI9PT1lfWZ1bmN0aW9uIFRlKGUpe3JldHVybiA0Nz09PWV9ZnVuY3Rpb24gSWUoZSl7cmV0dXJuIDY1PD1lJiZlPD05MHx8OTc8PWUmJmU8PTEyMn1mdW5jdGlvbiBWZSh0LHIsbixpKXtsZXQgbz0iIixhPTAscz0tMSxsPTAsYz0wO2ZvcihsZXQgZT0wO2U8PXQubGVuZ3RoOysrZSl7aWYoZTx0Lmxlbmd0aCljPXQuY2hhckNvZGVBdChlKTtlbHNle2lmKGkoYykpYnJlYWs7Yz00N31pZihpKGMpKXtpZihzIT09ZS0xJiYxIT09bClpZigyPT09bCl7aWYoby5sZW5ndGg8Mnx8MiE9PWF8fDQ2IT09by5jaGFyQ29kZUF0KG8ubGVuZ3RoLTEpfHw0NiE9PW8uY2hhckNvZGVBdChvLmxlbmd0aC0yKSl7aWYoMjxvLmxlbmd0aCl7dmFyIHU9by5sYXN0SW5kZXhPZihuKTthPS0xPT09dT8obz0iIiwwKToobz1vLnNsaWNlKDAsdSkpLmxlbmd0aC0xLW8ubGFzdEluZGV4T2Yobikscz1lLGw9MDtjb250aW51ZX1pZigwIT09by5sZW5ndGgpe289IiIsYT0wLHM9ZSxsPTA7Y29udGludWV9fXImJihvKz0wPG8ubGVuZ3RoP24rIi4uIjoiLi4iLGE9Mil9ZWxzZSAwPG8ubGVuZ3RoP28rPSIiK24rdC5zbGljZShzKzEsZSk6bz10LnNsaWNlKHMrMSxlKSxhPWUtcy0xO3M9ZSxsPTB9ZWxzZSA0Nj09PWMmJi0xIT09bD8rK2w6bD0tMX1yZXR1cm4gb31mdW5jdGlvbiBSZShlLHQpe2lmKG51bGw9PT10fHwib2JqZWN0IiE9dHlwZW9mIHQpdGhyb3cgbmV3IE9lKCJwYXRoT2JqZWN0IiwiT2JqZWN0Iix0KTt2YXIgcj10LmRpcnx8dC5yb290LG49dC5iYXNlfHwiIisodC5uYW1lfHwiIikrKHQuZXh0fHwiIik7cmV0dXJuIHI/cj09PXQucm9vdD8iIityK246IiIrcitlK246bn1jb25zdCBEZT17cmVzb2x2ZSguLi5vKXtsZXQgYT0iIixzPSIiLGw9ITE7Zm9yKGxldCB0PW8ubGVuZ3RoLTE7LTE8PXQ7dC0tKXtsZXQgcjtpZigwPD10KXtpZihQZShyPW9bdF0sInBhdGgiKSwwPT09ci5sZW5ndGgpY29udGludWV9ZWxzZSAwPT09YS5sZW5ndGg/cj1rZSgpOih2b2lkIDA9PT0ocj1OZVsiPSIrYV18fGtlKCkpfHxyLnNsaWNlKDAsMikudG9Mb3dlckNhc2UoKSE9PWEudG9Mb3dlckNhc2UoKSYmOTI9PT1yLmNoYXJDb2RlQXQoMikpJiYocj1hKyJcXCIpO3ZhciBjPXIubGVuZ3RoO2xldCBuPTAsaT0iIixlPSExO3ZhciB1PXIuY2hhckNvZGVBdCgwKTtpZigxPT09YylmKHUpJiYobj0xLGU9ITApO2Vsc2UgaWYoZih1KSlpZihlPSEwLGYoci5jaGFyQ29kZUF0KDEpKSl7bGV0IGU9Mix0PWU7Zm9yKDtlPGMmJiFmKHIuY2hhckNvZGVBdChlKSk7KWUrKztpZihlPGMmJmUhPT10KXt2YXIgaD1yLnNsaWNlKHQsZSk7Zm9yKHQ9ZTtlPGMmJmYoci5jaGFyQ29kZUF0KGUpKTspZSsrO2lmKGU8YyYmZSE9PXQpe2Zvcih0PWU7ZTxjJiYhZihyLmNoYXJDb2RlQXQoZSkpOyllKys7ZSE9PWMmJmU9PT10fHwoaT1gXFxcXCR7aH1cXGArci5zbGljZSh0LGUpLG49ZSl9fX1lbHNlIG49MTtlbHNlIEllKHUpJiY1OD09PXIuY2hhckNvZGVBdCgxKSYmKGk9ci5zbGljZSgwLDIpLChuPTIpPGMmJmYoci5jaGFyQ29kZUF0KDIpKSYmKGU9ITAsbj0zKSk7aWYoMDxpLmxlbmd0aClpZigwPGEubGVuZ3RoKXtpZihpLnRvTG93ZXJDYXNlKCkhPT1hLnRvTG93ZXJDYXNlKCkpY29udGludWV9ZWxzZSBhPWk7aWYobCl7aWYoMDxhLmxlbmd0aClicmVha31lbHNlIGlmKHM9ci5zbGljZShuKSsiXFwiK3MsKGw9ZSkmJjA8YS5sZW5ndGgpYnJlYWt9cmV0dXJuIHM9VmUocywhbCwiXFwiLGYpLGw/YSsiXFwiK3M6IiIrYStzfHwiLiJ9LG5vcm1hbGl6ZShyKXtQZShyLCJwYXRoIik7dmFyIG49ci5sZW5ndGg7aWYoMD09PW4pcmV0dXJuIi4iO2xldCBpPTAsbyxlPSExO3ZhciB0PXIuY2hhckNvZGVBdCgwKTtpZigxPT09bilyZXR1cm4gVGUodCk/IlxcIjpyO2lmKGYodCkpaWYoZT0hMCxmKHIuY2hhckNvZGVBdCgxKSkpe2xldCBlPTIsdD1lO2Zvcig7ZTxuJiYhZihyLmNoYXJDb2RlQXQoZSkpOyllKys7aWYoZTxuJiZlIT09dCl7dmFyIGE9ci5zbGljZSh0LGUpO2Zvcih0PWU7ZTxuJiZmKHIuY2hhckNvZGVBdChlKSk7KWUrKztpZihlPG4mJmUhPT10KXtmb3IodD1lO2U8biYmIWYoci5jaGFyQ29kZUF0KGUpKTspZSsrO2lmKGU9PT1uKXJldHVybmBcXFxcJHthfVxcJHtyLnNsaWNlKHQpfVxcYDtlIT09dCYmKG89YFxcXFwke2F9XFxgK3Iuc2xpY2UodCxlKSxpPWUpfX19ZWxzZSBpPTE7ZWxzZSBJZSh0KSYmNTg9PT1yLmNoYXJDb2RlQXQoMSkmJihvPXIuc2xpY2UoMCwyKSwoaT0yKTxuJiZmKHIuY2hhckNvZGVBdCgyKSkmJihlPSEwLGk9MykpO2xldCBzPWk8bj9WZShyLnNsaWNlKGkpLCFlLCJcXCIsZik6IiI7cmV0dXJuIDA8KHM9MCE9PXMubGVuZ3RofHxlP3M6Ii4iKS5sZW5ndGgmJmYoci5jaGFyQ29kZUF0KG4tMSkpJiYocys9IlxcIiksdm9pZCAwPT09bz9lPyJcXCIrczpzOmU/bysiXFwiK3M6IiIrbytzfSxpc0Fic29sdXRlKGUpe1BlKGUsInBhdGgiKTt2YXIgdD1lLmxlbmd0aDtpZigwPT09dClyZXR1cm4hMTt2YXIgcj1lLmNoYXJDb2RlQXQoMCk7cmV0dXJuIGYocil8fDI8dCYmSWUocikmJjU4PT09ZS5jaGFyQ29kZUF0KDEpJiZmKGUuY2hhckNvZGVBdCgyKSl9LGpvaW4oLi4udCl7aWYoMD09PXQubGVuZ3RoKXJldHVybiIuIjtsZXQgcixuO2ZvcihsZXQgZT0wO2U8dC5sZW5ndGg7KytlKXt2YXIgaT10W2VdO1BlKGksInBhdGgiKSwwPGkubGVuZ3RoJiYodm9pZCAwPT09cj9yPW49aTpyKz0iXFwiK2kpfWlmKHZvaWQgMD09PXIpcmV0dXJuIi4iO2xldCBlPSEwLG89MDt2YXIgYTtpZigic3RyaW5nIj09dHlwZW9mIG4mJmYobi5jaGFyQ29kZUF0KDApKSYmKCsrbywxPChhPW4ubGVuZ3RoKSYmZihuLmNoYXJDb2RlQXQoMSkpJiYoKytvLDI8YSYmKGYobi5jaGFyQ29kZUF0KDIpKT8rK286ZT0hMSkpKSxlKXtmb3IoO288ci5sZW5ndGgmJmYoci5jaGFyQ29kZUF0KG8pKTspbysrOzI8PW8mJihyPSJcXCIrci5zbGljZShvKSl9cmV0dXJuIERlLm5vcm1hbGl6ZShyKX0scmVsYXRpdmUoZSx0KXtpZihQZShlLCJmcm9tIiksUGUodCwidG8iKSxlPT09dClyZXR1cm4iIjtjb25zdCB1PURlLnJlc29sdmUoZSkscj1EZS5yZXNvbHZlKHQpO2lmKHU9PT1yKXJldHVybiIiO2lmKChlPXUudG9Mb3dlckNhc2UoKSk9PT0odD1yLnRvTG93ZXJDYXNlKCkpKXJldHVybiIiO2xldCBuPTA7Zm9yKDtuPGUubGVuZ3RoJiY5Mj09PWUuY2hhckNvZGVBdChuKTspbisrO2xldCBpPWUubGVuZ3RoO2Zvcig7aS0xPm4mJjkyPT09ZS5jaGFyQ29kZUF0KGktMSk7KWktLTt2YXIgaD1pLW47bGV0IG89MDtmb3IoO288dC5sZW5ndGgmJjkyPT09dC5jaGFyQ29kZUF0KG8pOylvKys7bGV0IGE9dC5sZW5ndGg7Zm9yKDthLTE+byYmOTI9PT10LmNoYXJDb2RlQXQoYS0xKTspYS0tO3ZhciBmPWEtbyxzPWg8Zj9oOmY7bGV0IGw9LTEsYz0wO2Zvcig7YzxzO2MrKyl7dmFyIGQ9ZS5jaGFyQ29kZUF0KG4rYyk7aWYoZCE9PXQuY2hhckNvZGVBdChvK2MpKWJyZWFrOzkyPT09ZCYmKGw9Yyl9aWYoYyE9PXMpe2lmKC0xPT09bClyZXR1cm4gcn1lbHNle2lmKHM8Zil7aWYoOTI9PT10LmNoYXJDb2RlQXQobytjKSlyZXR1cm4gci5zbGljZShvK2MrMSk7aWYoMj09PWMpcmV0dXJuIHIuc2xpY2UobytjKX1zPGgmJig5Mj09PWUuY2hhckNvZGVBdChuK2MpP2w9YzoyPT09YyYmKGw9MykpLC0xPT09bCYmKGw9MCl9bGV0IG09IiI7Zm9yKGM9bitsKzE7Yzw9aTsrK2MpYyE9PWkmJjkyIT09ZS5jaGFyQ29kZUF0KGMpfHwobSs9MD09PW0ubGVuZ3RoPyIuLiI6IlxcLi4iKTtyZXR1cm4gbys9bCwwPG0ubGVuZ3RoPyIiK20rci5zbGljZShvLGEpOig5Mj09PXIuY2hhckNvZGVBdChvKSYmKytvLHIuc2xpY2UobyxhKSl9LHRvTmFtZXNwYWNlZFBhdGgoZSl7aWYoInN0cmluZyIhPXR5cGVvZiBlKXJldHVybiBlO2lmKDA9PT1lLmxlbmd0aClyZXR1cm4iIjtjb25zdCB0PURlLnJlc29sdmUoZSk7aWYodC5sZW5ndGg8PTIpcmV0dXJuIGU7aWYoOTI9PT10LmNoYXJDb2RlQXQoMCkpe2lmKDkyPT09dC5jaGFyQ29kZUF0KDEpKXt2YXIgcj10LmNoYXJDb2RlQXQoMik7aWYoNjMhPT1yJiY0NiE9PXIpcmV0dXJuIlxcXFw/XFxVTkNcXCIrdC5zbGljZSgyKX19ZWxzZSBpZihJZSh0LmNoYXJDb2RlQXQoMCkpJiY1OD09PXQuY2hhckNvZGVBdCgxKSYmOTI9PT10LmNoYXJDb2RlQXQoMikpcmV0dXJuIlxcXFw/XFwiK3Q7cmV0dXJuIGV9LGRpcm5hbWUocil7UGUociwicGF0aCIpO3ZhciBuPXIubGVuZ3RoO2lmKDA9PT1uKXJldHVybiIuIjtsZXQgaT0tMSxvPTA7dmFyIGU9ci5jaGFyQ29kZUF0KDApO2lmKDE9PT1uKXJldHVybiBmKGUpP3I6Ii4iO2lmKGYoZSkpe2lmKGk9bz0xLGYoci5jaGFyQ29kZUF0KDEpKSl7bGV0IGU9Mix0PWU7Zm9yKDtlPG4mJiFmKHIuY2hhckNvZGVBdChlKSk7KWUrKztpZihlPG4mJmUhPT10KXtmb3IodD1lO2U8biYmZihyLmNoYXJDb2RlQXQoZSkpOyllKys7aWYoZTxuJiZlIT09dCl7Zm9yKHQ9ZTtlPG4mJiFmKHIuY2hhckNvZGVBdChlKSk7KWUrKztpZihlPT09bilyZXR1cm4gcjtlIT09dCYmKGk9bz1lKzEpfX19fWVsc2UgSWUoZSkmJjU4PT09ci5jaGFyQ29kZUF0KDEpJiYoaT0yPG4mJmYoci5jaGFyQ29kZUF0KDIpKT8zOjIsbz1pKTtsZXQgdD0tMSxhPSEwO2ZvcihsZXQgZT1uLTE7ZT49bzstLWUpaWYoZihyLmNoYXJDb2RlQXQoZSkpKXtpZighYSl7dD1lO2JyZWFrfX1lbHNlIGE9ITE7aWYoLTE9PT10KXtpZigtMT09PWkpcmV0dXJuIi4iO3Q9aX1yZXR1cm4gci5zbGljZSgwLHQpfSxiYXNlbmFtZShyLG4pe3ZvaWQgMCE9PW4mJlBlKG4sImV4dCIpLFBlKHIsInBhdGgiKTtsZXQgaT0wLG89LTEsYT0hMCxzO2lmKDI8PXIubGVuZ3RoJiZJZShyLmNoYXJDb2RlQXQoMCkpJiY1OD09PXIuY2hhckNvZGVBdCgxKSYmKGk9Miksdm9pZCAwIT09biYmMDxuLmxlbmd0aCYmbi5sZW5ndGg8PXIubGVuZ3RoKXtpZihuPT09cilyZXR1cm4iIjtsZXQgZT1uLmxlbmd0aC0xLHQ9LTE7Zm9yKHM9ci5sZW5ndGgtMTtzPj1pOy0tcyl7dmFyIGw9ci5jaGFyQ29kZUF0KHMpO2lmKGYobCkpe2lmKCFhKXtpPXMrMTticmVha319ZWxzZS0xPT09dCYmKGE9ITEsdD1zKzEpLDA8PWUmJihsPT09bi5jaGFyQ29kZUF0KGUpPy0xPT0tLWUmJihvPXMpOihlPS0xLG89dCkpfXJldHVybiBpPT09bz9vPXQ6LTE9PT1vJiYobz1yLmxlbmd0aCksci5zbGljZShpLG8pfWZvcihzPXIubGVuZ3RoLTE7cz49aTstLXMpaWYoZihyLmNoYXJDb2RlQXQocykpKXtpZighYSl7aT1zKzE7YnJlYWt9fWVsc2UtMT09PW8mJihhPSExLG89cysxKTtyZXR1cm4tMT09PW8/IiI6ci5zbGljZShpLG8pfSxleHRuYW1lKHQpe1BlKHQsInBhdGgiKTtsZXQgcj0wLG49LTEsaT0wLG89LTEsYT0hMCxzPTA7Mjw9dC5sZW5ndGgmJjU4PT09dC5jaGFyQ29kZUF0KDEpJiZJZSh0LmNoYXJDb2RlQXQoMCkpJiYocj1pPTIpO2ZvcihsZXQgZT10Lmxlbmd0aC0xO2U+PXI7LS1lKXt2YXIgbD10LmNoYXJDb2RlQXQoZSk7aWYoZihsKSl7aWYoYSljb250aW51ZTtpPWUrMTticmVha30tMT09PW8mJihhPSExLG89ZSsxKSw0Nj09PWw/LTE9PT1uP249ZToxIT09cyYmKHM9MSk6LTEhPT1uJiYocz0tMSl9cmV0dXJuLTE9PT1ufHwtMT09PW98fDA9PT1zfHwxPT09cyYmbj09PW8tMSYmbj09PWkrMT8iIjp0LnNsaWNlKG4sbyl9LGZvcm1hdDpSZS5iaW5kKG51bGwsIlxcIikscGFyc2Uocil7UGUociwicGF0aCIpO2NvbnN0IGU9e3Jvb3Q6IiIsZGlyOiIiLGJhc2U6IiIsZXh0OiIiLG5hbWU6IiJ9O2lmKDA9PT1yLmxlbmd0aClyZXR1cm4gZTt2YXIgbj1yLmxlbmd0aDtsZXQgaT0wLHQ9ci5jaGFyQ29kZUF0KDApO2lmKDE9PT1uKXJldHVybiBmKHQpP2Uucm9vdD1lLmRpcj1yOmUuYmFzZT1lLm5hbWU9cixlO2lmKGYodCkpe2lmKGk9MSxmKHIuY2hhckNvZGVBdCgxKSkpe2xldCBlPTIsdD1lO2Zvcig7ZTxuJiYhZihyLmNoYXJDb2RlQXQoZSkpOyllKys7aWYoZTxuJiZlIT09dCl7Zm9yKHQ9ZTtlPG4mJmYoci5jaGFyQ29kZUF0KGUpKTspZSsrO2lmKGU8biYmZSE9PXQpe2Zvcih0PWU7ZTxuJiYhZihyLmNoYXJDb2RlQXQoZSkpOyllKys7ZT09PW4/aT1lOmUhPT10JiYoaT1lKzEpfX19fWVsc2UgaWYoSWUodCkmJjU4PT09ci5jaGFyQ29kZUF0KDEpKXtpZihuPD0yKXJldHVybiBlLnJvb3Q9ZS5kaXI9cixlO2lmKGk9MixmKHIuY2hhckNvZGVBdCgyKSkpe2lmKDM9PT1uKXJldHVybiBlLnJvb3Q9ZS5kaXI9cixlO2k9M319MDxpJiYoZS5yb290PXIuc2xpY2UoMCxpKSk7bGV0IG89LTEsYT1pLHM9LTEsdT0hMCxsPXIubGVuZ3RoLTEsYz0wO2Zvcig7bD49aTstLWwpe2lmKGYodD1yLmNoYXJDb2RlQXQobCkpKXtpZih1KWNvbnRpbnVlO2E9bCsxO2JyZWFrfS0xPT09cyYmKHU9ITEscz1sKzEpLDQ2PT09dD8tMT09PW8/bz1sOjEhPT1jJiYoYz0xKTotMSE9PW8mJihjPS0xKX1yZXR1cm4tMSE9PXMmJigtMT09PW98fDA9PT1jfHwxPT09YyYmbz09PXMtMSYmbz09PWErMT9lLmJhc2U9ZS5uYW1lPXIuc2xpY2UoYSxzKTooZS5uYW1lPXIuc2xpY2UoYSxvKSxlLmJhc2U9ci5zbGljZShhLHMpLGUuZXh0PXIuc2xpY2UobyxzKSkpLDA8YSYmYSE9PWk/ZS5kaXI9ci5zbGljZSgwLGEtMSk6ZS5kaXI9ZS5yb290LGV9LHNlcDoiXFwiLGRlbGltaXRlcjoiOyIsd2luMzI6bnVsbCxwb3NpeDpudWxsfSxGZT17cmVzb2x2ZSguLi50KXtsZXQgcj0iIixuPSExO2ZvcihsZXQgZT10Lmxlbmd0aC0xOy0xPD1lJiYhbjtlLS0pe2NvbnN0IGk9MDw9ZT90W2VdOmtlKCk7UGUoaSwicGF0aCIpLDAhPT1pLmxlbmd0aCYmKHI9aSsiLyIrcixuPTQ3PT09aS5jaGFyQ29kZUF0KDApKX1yZXR1cm4gcj1WZShyLCFuLCIvIixUZSksbj8iLyIrcjowPHIubGVuZ3RoP3I6Ii4ifSxub3JtYWxpemUoZSl7aWYoUGUoZSwicGF0aCIpLDA9PT1lLmxlbmd0aClyZXR1cm4iLiI7dmFyIHQ9NDc9PT1lLmNoYXJDb2RlQXQoMCkscj00Nz09PWUuY2hhckNvZGVBdChlLmxlbmd0aC0xKTtyZXR1cm4gMD09PShlPVZlKGUsIXQsIi8iLFRlKSkubGVuZ3RoP3Q/Ii8iOnI/Ii4vIjoiLiI6KHImJihlKz0iLyIpLHQ/Ii8iK2U6ZSl9LGlzQWJzb2x1dGUoZSl7cmV0dXJuIFBlKGUsInBhdGgiKSwwPGUubGVuZ3RoJiY0Nz09PWUuY2hhckNvZGVBdCgwKX0sam9pbiguLi50KXtpZigwPT09dC5sZW5ndGgpcmV0dXJuIi4iO2xldCByO2ZvcihsZXQgZT0wO2U8dC5sZW5ndGg7KytlKXt2YXIgbj10W2VdO1BlKG4sInBhdGgiKSwwPG4ubGVuZ3RoJiYodm9pZCAwPT09cj9yPW46cis9Ii8iK24pfXJldHVybiB2b2lkIDA9PT1yPyIuIjpGZS5ub3JtYWxpemUocil9LHJlbGF0aXZlKGUsdCl7aWYoUGUoZSwiZnJvbSIpLFBlKHQsInRvIiksZT09PXQpcmV0dXJuIiI7aWYoKGU9RmUucmVzb2x2ZShlKSk9PT0odD1GZS5yZXNvbHZlKHQpKSlyZXR1cm4iIjt2YXIgcj1lLmxlbmd0aCxuPXItMSxpPXQubGVuZ3RoLTEsbz1uPGk/bjppO2xldCBhPS0xLHM9MDtmb3IoO3M8bztzKyspe3ZhciBsPWUuY2hhckNvZGVBdCgxK3MpO2lmKGwhPT10LmNoYXJDb2RlQXQoMStzKSlicmVhazs0Nz09PWwmJihhPXMpfWlmKHM9PT1vKWlmKG88aSl7aWYoNDc9PT10LmNoYXJDb2RlQXQoMStzKSlyZXR1cm4gdC5zbGljZSgxK3MrMSk7aWYoMD09PXMpcmV0dXJuIHQuc2xpY2UoMStzKX1lbHNlIG88biYmKDQ3PT09ZS5jaGFyQ29kZUF0KDErcyk/YT1zOjA9PT1zJiYoYT0wKSk7bGV0IGM9IiI7Zm9yKHM9MSthKzE7czw9cjsrK3MpcyE9PXImJjQ3IT09ZS5jaGFyQ29kZUF0KHMpfHwoYys9MD09PWMubGVuZ3RoPyIuLiI6Ii8uLiIpO3JldHVybiIiK2MrdC5zbGljZSgxK2EpfSx0b05hbWVzcGFjZWRQYXRoKGUpe3JldHVybiBlfSxkaXJuYW1lKHQpe2lmKFBlKHQsInBhdGgiKSwwPT09dC5sZW5ndGgpcmV0dXJuIi4iO3ZhciBlPTQ3PT09dC5jaGFyQ29kZUF0KDApO2xldCByPS0xLG49ITA7Zm9yKGxldCBlPXQubGVuZ3RoLTE7MTw9ZTstLWUpaWYoNDc9PT10LmNoYXJDb2RlQXQoZSkpe2lmKCFuKXtyPWU7YnJlYWt9fWVsc2Ugbj0hMTtyZXR1cm4tMT09PXI/ZT8iLyI6Ii4iOmUmJjE9PT1yPyIvLyI6dC5zbGljZSgwLHIpfSxiYXNlbmFtZShyLG4pe3ZvaWQgMCE9PW4mJlBlKG4sImV4dCIpLFBlKHIsInBhdGgiKTtsZXQgaT0wLG89LTEsYT0hMCxzO2lmKHZvaWQgMCE9PW4mJjA8bi5sZW5ndGgmJm4ubGVuZ3RoPD1yLmxlbmd0aCl7aWYobj09PXIpcmV0dXJuIiI7bGV0IGU9bi5sZW5ndGgtMSx0PS0xO2ZvcihzPXIubGVuZ3RoLTE7MDw9czstLXMpe3ZhciBsPXIuY2hhckNvZGVBdChzKTtpZig0Nz09PWwpe2lmKCFhKXtpPXMrMTticmVha319ZWxzZS0xPT09dCYmKGE9ITEsdD1zKzEpLDA8PWUmJihsPT09bi5jaGFyQ29kZUF0KGUpPy0xPT0tLWUmJihvPXMpOihlPS0xLG89dCkpfXJldHVybiBpPT09bz9vPXQ6LTE9PT1vJiYobz1yLmxlbmd0aCksci5zbGljZShpLG8pfWZvcihzPXIubGVuZ3RoLTE7MDw9czstLXMpaWYoNDc9PT1yLmNoYXJDb2RlQXQocykpe2lmKCFhKXtpPXMrMTticmVha319ZWxzZS0xPT09byYmKGE9ITEsbz1zKzEpO3JldHVybi0xPT09bz8iIjpyLnNsaWNlKGksbyl9LGV4dG5hbWUodCl7UGUodCwicGF0aCIpO2xldCByPS0xLG49MCxpPS0xLG89ITAsYT0wO2ZvcihsZXQgZT10Lmxlbmd0aC0xOzA8PWU7LS1lKXt2YXIgcz10LmNoYXJDb2RlQXQoZSk7aWYoNDc9PT1zKXtpZihvKWNvbnRpbnVlO249ZSsxO2JyZWFrfS0xPT09aSYmKG89ITEsaT1lKzEpLDQ2PT09cz8tMT09PXI/cj1lOjEhPT1hJiYoYT0xKTotMSE9PXImJihhPS0xKX1yZXR1cm4tMT09PXJ8fC0xPT09aXx8MD09PWF8fDE9PT1hJiZyPT09aS0xJiZyPT09bisxPyIiOnQuc2xpY2UocixpKX0sZm9ybWF0OlJlLmJpbmQobnVsbCwiLyIpLHBhcnNlKGUpe1BlKGUsInBhdGgiKTtjb25zdCB0PXtyb290OiIiLGRpcjoiIixiYXNlOiIiLGV4dDoiIixuYW1lOiIifTtpZigwPT09ZS5sZW5ndGgpcmV0dXJuIHQ7dmFyIHI9NDc9PT1lLmNoYXJDb2RlQXQoMCk7bGV0IG4saT0obj1yPyh0LnJvb3Q9Ii8iLDEpOjAsLTEpLG89MCxhPS0xLHM9ITAsbD1lLmxlbmd0aC0xLGM9MDtmb3IoO2w+PW47LS1sKXt2YXIgdT1lLmNoYXJDb2RlQXQobCk7aWYoNDc9PT11KXtpZihzKWNvbnRpbnVlO289bCsxO2JyZWFrfS0xPT09YSYmKHM9ITEsYT1sKzEpLDQ2PT09dT8tMT09PWk/aT1sOjEhPT1jJiYoYz0xKTotMSE9PWkmJihjPS0xKX1pZigtMSE9PWEpe2NvbnN0IG49MD09PW8mJnI/MTpvOy0xPT09aXx8MD09PWN8fDE9PT1jJiZpPT09YS0xJiZpPT09bysxP3QuYmFzZT10Lm5hbWU9ZS5zbGljZShuLGEpOih0Lm5hbWU9ZS5zbGljZShuLGkpLHQuYmFzZT1lLnNsaWNlKG4sYSksdC5leHQ9ZS5zbGljZShpLGEpKX1yZXR1cm4gMDxvP3QuZGlyPWUuc2xpY2UoMCxvLTEpOnImJih0LmRpcj0iLyIpLHR9LHNlcDoiLyIsZGVsaW1pdGVyOiI6Iix3aW4zMjpudWxsLHBvc2l4Om51bGx9LEtlPShGZS53aW4zMj1EZS53aW4zMj1EZSxGZS5wb3NpeD1EZS5wb3NpeD1GZSwoIndpbjMyIj09PXI/RGU6RmUpLm5vcm1hbGl6ZSksVWU9KCgid2luMzIiPT09cj9EZTpGZSkucmVzb2x2ZSwoIndpbjMyIj09PXI/RGU6RmUpLnJlbGF0aXZlLCgid2luMzIiPT09cj9EZTpGZSkuZGlybmFtZSwoIndpbjMyIj09PXI/RGU6RmUpLmJhc2VuYW1lKSxCZT0oIndpbjMyIj09PXI/RGU6RmUpLmV4dG5hbWUscWU9KCJ3aW4zMiI9PT1yP0RlOkZlKS5zZXAsJGU9L15cd1tcd1xkKy4tXSokLyxXZT0vXlwvLyxIZT0vXlwvXC8vO2Z1bmN0aW9uIHplKGUsdCl7aWYoIWUuc2NoZW1lJiZ0KXRocm93IG5ldyBFcnJvcihgW1VyaUVycm9yXTogU2NoZW1lIGlzIG1pc3Npbmc6IHtzY2hlbWU6ICIiLCBhdXRob3JpdHk6ICIke2UuYXV0aG9yaXR5fSIsIHBhdGg6ICIke2UucGF0aH0iLCBxdWVyeTogIiR7ZS5xdWVyeX0iLCBmcmFnbWVudDogIiR7ZS5mcmFnbWVudH0ifWApO2lmKGUuc2NoZW1lJiYhJGUudGVzdChlLnNjaGVtZSkpdGhyb3cgbmV3IEVycm9yKCJbVXJpRXJyb3JdOiBTY2hlbWUgY29udGFpbnMgaWxsZWdhbCBjaGFyYWN0ZXJzLiIpO2lmKGUucGF0aClpZihlLmF1dGhvcml0eSl7aWYoIVdlLnRlc3QoZS5wYXRoKSl0aHJvdyBuZXcgRXJyb3IoJ1tVcmlFcnJvcl06IElmIGEgVVJJIGNvbnRhaW5zIGFuIGF1dGhvcml0eSBjb21wb25lbnQsIHRoZW4gdGhlIHBhdGggY29tcG9uZW50IG11c3QgZWl0aGVyIGJlIGVtcHR5IG9yIGJlZ2luIHdpdGggYSBzbGFzaCAoIi8iKSBjaGFyYWN0ZXInKX1lbHNlIGlmKEhlLnRlc3QoZS5wYXRoKSl0aHJvdyBuZXcgRXJyb3IoJ1tVcmlFcnJvcl06IElmIGEgVVJJIGRvZXMgbm90IGNvbnRhaW4gYW4gYXV0aG9yaXR5IGNvbXBvbmVudCwgdGhlbiB0aGUgcGF0aCBjYW5ub3QgYmVnaW4gd2l0aCB0d28gc2xhc2ggY2hhcmFjdGVycyAoIi8vIiknKX1jb25zdCBKZT0iLyIsR2U9L14oKFteOi8/I10rPyk6KT8oXC9cLyhbXi8/I10qKSk/KFtePyNdKikoXD8oW14jXSopKT8oIyguKikpPy87Y2xhc3MgWmV7Y29uc3RydWN0b3IoZSx0LHIsbixpLG89ITEpe3ZhciBhOyJvYmplY3QiPT10eXBlb2YgZT8odGhpcy5zY2hlbWU9ZS5zY2hlbWV8fCIiLHRoaXMuYXV0aG9yaXR5PWUuYXV0aG9yaXR5fHwiIix0aGlzLnBhdGg9ZS5wYXRofHwiIix0aGlzLnF1ZXJ5PWUucXVlcnl8fCIiLHRoaXMuZnJhZ21lbnQ9ZS5mcmFnbWVudHx8IiIpOih0aGlzLnNjaGVtZT0oYT1vLChlPWUpfHxhP2U6ImZpbGUiKSx0aGlzLmF1dGhvcml0eT10fHwiIix0aGlzLnBhdGg9ZnVuY3Rpb24oZSx0KXtzd2l0Y2goZSl7Y2FzZSJodHRwcyI6Y2FzZSJodHRwIjpjYXNlImZpbGUiOnQ/dFswXSE9PUplJiYodD1KZSt0KTp0PUplfXJldHVybiB0fSh0aGlzLnNjaGVtZSxyfHwiIiksdGhpcy5xdWVyeT1ufHwiIix0aGlzLmZyYWdtZW50PWl8fCIiLHplKHRoaXMsbykpfXN0YXRpYyBpc1VyaShlKXtyZXR1cm4gZSBpbnN0YW5jZW9mIFplfHwhIWUmJigic3RyaW5nIj09dHlwZW9mIGUuYXV0aG9yaXR5JiYic3RyaW5nIj09dHlwZW9mIGUuZnJhZ21lbnQmJiJzdHJpbmciPT10eXBlb2YgZS5wYXRoJiYic3RyaW5nIj09dHlwZW9mIGUucXVlcnkmJiJzdHJpbmciPT10eXBlb2YgZS5zY2hlbWUmJiJzdHJpbmciPT10eXBlb2YgZS5mc1BhdGgmJiJmdW5jdGlvbiI9PXR5cGVvZiBlLndpdGgmJiJmdW5jdGlvbiI9PXR5cGVvZiBlLnRvU3RyaW5nKX1nZXQgZnNQYXRoKCl7cmV0dXJuIHJ0KHRoaXMsITEpfXdpdGgoZSl7aWYoIWUpcmV0dXJuIHRoaXM7bGV0e3NjaGVtZTp0LGF1dGhvcml0eTpyLHBhdGg6bixxdWVyeTppLGZyYWdtZW50Om99PWU7cmV0dXJuIHZvaWQgMD09PXQ/dD10aGlzLnNjaGVtZTpudWxsPT09dCYmKHQ9IiIpLHZvaWQgMD09PXI/cj10aGlzLmF1dGhvcml0eTpudWxsPT09ciYmKHI9IiIpLHZvaWQgMD09PW4/bj10aGlzLnBhdGg6bnVsbD09PW4mJihuPSIiKSx2b2lkIDA9PT1pP2k9dGhpcy5xdWVyeTpudWxsPT09aSYmKGk9IiIpLHZvaWQgMD09PW8/bz10aGlzLmZyYWdtZW50Om51bGw9PT1vJiYobz0iIiksdD09PXRoaXMuc2NoZW1lJiZyPT09dGhpcy5hdXRob3JpdHkmJm49PT10aGlzLnBhdGgmJmk9PT10aGlzLnF1ZXJ5JiZvPT09dGhpcy5mcmFnbWVudD90aGlzOm5ldyBRZSh0LHIsbixpLG8pfXN0YXRpYyBwYXJzZShlLHQ9ITEpe2U9R2UuZXhlYyhlKTtyZXR1cm4gZT9uZXcgUWUoZVsyXXx8IiIsb3QoZVs0XXx8IiIpLG90KGVbNV18fCIiKSxvdChlWzddfHwiIiksb3QoZVs5XXx8IiIpLHQpOm5ldyBRZSgiIiwiIiwiIiwiIiwiIil9c3RhdGljIGZpbGUoZSl7bGV0IHQ9IiI7dmFyIHI7cmV0dXJuKGU9VD9lLnJlcGxhY2UoL1xcL2csSmUpOmUpWzBdPT09SmUmJmVbMV09PT1KZSYmKGU9LTE9PT0ocj1lLmluZGV4T2YoSmUsMikpPyh0PWUuc3Vic3RyaW5nKDIpLEplKToodD1lLnN1YnN0cmluZygyLHIpLGUuc3Vic3RyaW5nKHIpfHxKZSkpLG5ldyBRZSgiZmlsZSIsdCxlLCIiLCIiKX1zdGF0aWMgZnJvbShlKXtlPW5ldyBRZShlLnNjaGVtZSxlLmF1dGhvcml0eSxlLnBhdGgsZS5xdWVyeSxlLmZyYWdtZW50KTtyZXR1cm4gemUoZSwhMCksZX1zdGF0aWMgam9pblBhdGgoZSwuLi50KXtpZighZS5wYXRoKXRocm93IG5ldyBFcnJvcigiW1VyaUVycm9yXTogY2Fubm90IGNhbGwgam9pblBhdGggb24gVVJJIHdpdGhvdXQgcGF0aCIpO2xldCByO3JldHVybiByPVQmJiJmaWxlIj09PWUuc2NoZW1lP1plLmZpbGUoRGUuam9pbihydChlLCEwKSwuLi50KSkucGF0aDpGZS5qb2luKGUucGF0aCwuLi50KSxlLndpdGgoe3BhdGg6cn0pfXRvU3RyaW5nKGU9ITEpe3JldHVybiBudCh0aGlzLGUpfXRvSlNPTigpe3JldHVybiB0aGlzfXN0YXRpYyByZXZpdmUoZSl7aWYoZSl7aWYoZSBpbnN0YW5jZW9mIFplKXJldHVybiBlO3tjb25zdCB0PW5ldyBRZShlKTtyZXR1cm4gdC5fZm9ybWF0dGVkPWUuZXh0ZXJuYWwsdC5fZnNQYXRoPWUuX3NlcD09PVhlP2UuZnNQYXRoOm51bGwsdH19cmV0dXJuIGV9fWNvbnN0IFhlPVQ/MTp2b2lkIDA7Y2xhc3MgUWUgZXh0ZW5kcyBaZXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5fZm9ybWF0dGVkPW51bGwsdGhpcy5fZnNQYXRoPW51bGx9Z2V0IGZzUGF0aCgpe3JldHVybiB0aGlzLl9mc1BhdGh8fCh0aGlzLl9mc1BhdGg9cnQodGhpcywhMSkpLHRoaXMuX2ZzUGF0aH10b1N0cmluZyhlPSExKXtyZXR1cm4gZT9udCh0aGlzLCEwKToodGhpcy5fZm9ybWF0dGVkfHwodGhpcy5fZm9ybWF0dGVkPW50KHRoaXMsITEpKSx0aGlzLl9mb3JtYXR0ZWQpfXRvSlNPTigpe2NvbnN0IGU9eyRtaWQ6MX07cmV0dXJuIHRoaXMuX2ZzUGF0aCYmKGUuZnNQYXRoPXRoaXMuX2ZzUGF0aCxlLl9zZXA9WGUpLHRoaXMuX2Zvcm1hdHRlZCYmKGUuZXh0ZXJuYWw9dGhpcy5fZm9ybWF0dGVkKSx0aGlzLnBhdGgmJihlLnBhdGg9dGhpcy5wYXRoKSx0aGlzLnNjaGVtZSYmKGUuc2NoZW1lPXRoaXMuc2NoZW1lKSx0aGlzLmF1dGhvcml0eSYmKGUuYXV0aG9yaXR5PXRoaXMuYXV0aG9yaXR5KSx0aGlzLnF1ZXJ5JiYoZS5xdWVyeT10aGlzLnF1ZXJ5KSx0aGlzLmZyYWdtZW50JiYoZS5mcmFnbWVudD10aGlzLmZyYWdtZW50KSxlfX1jb25zdCBZZT17WzU4XToiJTNBIiw0NzoiJTJGIiw2MzoiJTNGIiwzNToiJTIzIiw5MToiJTVCIiw5MzoiJTVEIiw2NDoiJTQwIiwzMzoiJTIxIiwzNjoiJTI0IiwzODoiJTI2IiwzOToiJTI3Iiw0MDoiJTI4Iiw0MToiJTI5Iiw0MjoiJTJBIiw0MzoiJTJCIiw0NDoiJTJDIiw1OToiJTNCIiw2MToiJTNEIiwzMjoiJTIwIn07ZnVuY3Rpb24gZXQodCxyKXtsZXQgbj12b2lkIDAsaT0tMTtmb3IobGV0IGU9MDtlPHQubGVuZ3RoO2UrKyl7dmFyIG89dC5jaGFyQ29kZUF0KGUpOzk3PD1vJiZvPD0xMjJ8fDY1PD1vJiZvPD05MHx8NDg8PW8mJm88PTU3fHw0NT09PW98fDQ2PT09b3x8OTU9PT1vfHwxMjY9PT1vfHxyJiY0Nz09PW8/KC0xIT09aSYmKG4rPWVuY29kZVVSSUNvbXBvbmVudCh0LnN1YnN0cmluZyhpLGUpKSxpPS0xKSx2b2lkIDAhPT1uJiYobis9dC5jaGFyQXQoZSkpKToodm9pZCAwPT09biYmKG49dC5zdWJzdHIoMCxlKSksdm9pZCAwIT09KG89WWVbb10pPygtMSE9PWkmJihuKz1lbmNvZGVVUklDb21wb25lbnQodC5zdWJzdHJpbmcoaSxlKSksaT0tMSksbis9byk6LTE9PT1pJiYoaT1lKSl9cmV0dXJuLTEhPT1pJiYobis9ZW5jb2RlVVJJQ29tcG9uZW50KHQuc3Vic3RyaW5nKGkpKSksdm9pZCAwIT09bj9uOnR9ZnVuY3Rpb24gdHQodCl7bGV0IHI9dm9pZCAwO2ZvcihsZXQgZT0wO2U8dC5sZW5ndGg7ZSsrKXt2YXIgbj10LmNoYXJDb2RlQXQoZSk7MzU9PT1ufHw2Mz09PW4/KHZvaWQgMD09PXImJihyPXQuc3Vic3RyKDAsZSkpLHIrPVllW25dKTp2b2lkIDAhPT1yJiYocis9dFtlXSl9cmV0dXJuIHZvaWQgMCE9PXI/cjp0fWZ1bmN0aW9uIHJ0KGUsdCl7bGV0IHI7cmV0dXJuIHI9ZS5hdXRob3JpdHkmJjE8ZS5wYXRoLmxlbmd0aCYmImZpbGUiPT09ZS5zY2hlbWU/Ii8vIitlLmF1dGhvcml0eStlLnBhdGg6NDc9PT1lLnBhdGguY2hhckNvZGVBdCgwKSYmKDY1PD1lLnBhdGguY2hhckNvZGVBdCgxKSYmZS5wYXRoLmNoYXJDb2RlQXQoMSk8PTkwfHw5Nzw9ZS5wYXRoLmNoYXJDb2RlQXQoMSkmJmUucGF0aC5jaGFyQ29kZUF0KDEpPD0xMjIpJiY1OD09PWUucGF0aC5jaGFyQ29kZUF0KDIpP3Q/ZS5wYXRoLnN1YnN0cigxKTplLnBhdGhbMV0udG9Mb3dlckNhc2UoKStlLnBhdGguc3Vic3RyKDIpOmUucGF0aCxyPVQ/ci5yZXBsYWNlKC9cLy9nLCJcXCIpOnJ9ZnVuY3Rpb24gbnQoZSx0KXtjb25zdCByPXQ/dHQ6ZXQ7bGV0IG49IiIse3NjaGVtZTppLGF1dGhvcml0eTpvLHBhdGg6YSxxdWVyeTpzLGZyYWdtZW50Omx9PWU7aWYoaSYmKG49bitpKyI6IiksIW8mJiJmaWxlIiE9PWl8fChuPShuKz1KZSkrSmUpLG8pe2xldCBlPW8uaW5kZXhPZigiQCIpO2lmKC0xIT09ZSl7Y29uc3QgYz1vLnN1YnN0cigwLGUpO289by5zdWJzdHIoZSsxKSwtMT09PShlPWMuaW5kZXhPZigiOiIpKT9uKz1yKGMsITEpOm49KG49bityKGMuc3Vic3RyKDAsZSksITEpKyI6IikrcihjLnN1YnN0cihlKzEpLCExKSxuKz0iQCJ9bz1vLnRvTG93ZXJDYXNlKCksLTE9PT0oZT1vLmluZGV4T2YoIjoiKSk/bis9cihvLCExKTpuPShuKz1yKG8uc3Vic3RyKDAsZSksITEpKStvLnN1YnN0cihlKX1yZXR1cm4gYSYmKDM8PWEubGVuZ3RoJiY0Nz09PWEuY2hhckNvZGVBdCgwKSYmNTg9PT1hLmNoYXJDb2RlQXQoMik/NjU8PShlPWEuY2hhckNvZGVBdCgxKSkmJmU8PTkwJiYoYT1gLyR7U3RyaW5nLmZyb21DaGFyQ29kZShlKzMyKX06YCthLnN1YnN0cigzKSk6Mjw9YS5sZW5ndGgmJjU4PT09YS5jaGFyQ29kZUF0KDEpJiYoNjU8PShlPWEuY2hhckNvZGVBdCgwKSkmJmU8PTkwJiYoYT1TdHJpbmcuZnJvbUNoYXJDb2RlKGUrMzIpKyI6IithLnN1YnN0cigyKSkpLG4rPXIoYSwhMCkpLHMmJihuPShuKz0iPyIpK3IocywhMSkpLG49bD8obis9IiMiKSsodD9sOmV0KGwsITEpKTpufWNvbnN0IGl0PS8oJVswLTlBLVphLXpdWzAtOUEtWmEtel0pKy9nO2Z1bmN0aW9uIG90KGUpe3JldHVybiBlLm1hdGNoKGl0KT9lLnJlcGxhY2UoaXQsZT0+ZnVuY3Rpb24gdChyKXt0cnl7cmV0dXJuIGRlY29kZVVSSUNvbXBvbmVudChyKX1jYXRjaChlKXtyZXR1cm4gMzxyLmxlbmd0aD9yLnN1YnN0cigwLDMpK3Qoci5zdWJzdHIoMykpOnJ9fShlKSk6ZX1jbGFzcyBhdHtjb25zdHJ1Y3RvcihlLHQpe3RoaXMubGluZU51bWJlcj1lLHRoaXMuY29sdW1uPXR9d2l0aChlPXRoaXMubGluZU51bWJlcix0PXRoaXMuY29sdW1uKXtyZXR1cm4gZT09PXRoaXMubGluZU51bWJlciYmdD09PXRoaXMuY29sdW1uP3RoaXM6bmV3IGF0KGUsdCl9ZGVsdGEoZT0wLHQ9MCl7cmV0dXJuIHRoaXMud2l0aCh0aGlzLmxpbmVOdW1iZXIrZSx0aGlzLmNvbHVtbit0KX1lcXVhbHMoZSl7cmV0dXJuIGF0LmVxdWFscyh0aGlzLGUpfXN0YXRpYyBlcXVhbHMoZSx0KXtyZXR1cm4hZSYmIXR8fCEhZSYmISF0JiZlLmxpbmVOdW1iZXI9PT10LmxpbmVOdW1iZXImJmUuY29sdW1uPT09dC5jb2x1bW59aXNCZWZvcmUoZSl7cmV0dXJuIGF0LmlzQmVmb3JlKHRoaXMsZSl9c3RhdGljIGlzQmVmb3JlKGUsdCl7cmV0dXJuIGUubGluZU51bWJlcjx0LmxpbmVOdW1iZXJ8fCEodC5saW5lTnVtYmVyPGUubGluZU51bWJlcikmJmUuY29sdW1uPHQuY29sdW1ufWlzQmVmb3JlT3JFcXVhbChlKXtyZXR1cm4gYXQuaXNCZWZvcmVPckVxdWFsKHRoaXMsZSl9c3RhdGljIGlzQmVmb3JlT3JFcXVhbChlLHQpe3JldHVybiBlLmxpbmVOdW1iZXI8dC5saW5lTnVtYmVyfHwhKHQubGluZU51bWJlcjxlLmxpbmVOdW1iZXIpJiZlLmNvbHVtbjw9dC5jb2x1bW59c3RhdGljIGNvbXBhcmUoZSx0KXt2YXIgcj0wfGUubGluZU51bWJlcixuPTB8dC5saW5lTnVtYmVyO3JldHVybiByIT1uP3ItbjooMHxlLmNvbHVtbiktKDB8dC5jb2x1bW4pfWNsb25lKCl7cmV0dXJuIG5ldyBhdCh0aGlzLmxpbmVOdW1iZXIsdGhpcy5jb2x1bW4pfXRvU3RyaW5nKCl7cmV0dXJuIigiK3RoaXMubGluZU51bWJlcisiLCIrdGhpcy5jb2x1bW4rIikifXN0YXRpYyBsaWZ0KGUpe3JldHVybiBuZXcgYXQoZS5saW5lTnVtYmVyLGUuY29sdW1uKX1zdGF0aWMgaXNJUG9zaXRpb24oZSl7cmV0dXJuIGUmJiJudW1iZXIiPT10eXBlb2YgZS5saW5lTnVtYmVyJiYibnVtYmVyIj09dHlwZW9mIGUuY29sdW1ufX1jbGFzcyBzdHtjb25zdHJ1Y3RvcihlLHQscixuKXtyPGV8fGU9PT1yJiZuPHQ/KHRoaXMuc3RhcnRMaW5lTnVtYmVyPXIsdGhpcy5zdGFydENvbHVtbj1uLHRoaXMuZW5kTGluZU51bWJlcj1lLHRoaXMuZW5kQ29sdW1uPXQpOih0aGlzLnN0YXJ0TGluZU51bWJlcj1lLHRoaXMuc3RhcnRDb2x1bW49dCx0aGlzLmVuZExpbmVOdW1iZXI9cix0aGlzLmVuZENvbHVtbj1uKX1pc0VtcHR5KCl7cmV0dXJuIHN0LmlzRW1wdHkodGhpcyl9c3RhdGljIGlzRW1wdHkoZSl7cmV0dXJuIGUuc3RhcnRMaW5lTnVtYmVyPT09ZS5lbmRMaW5lTnVtYmVyJiZlLnN0YXJ0Q29sdW1uPT09ZS5lbmRDb2x1bW59Y29udGFpbnNQb3NpdGlvbihlKXtyZXR1cm4gc3QuY29udGFpbnNQb3NpdGlvbih0aGlzLGUpfXN0YXRpYyBjb250YWluc1Bvc2l0aW9uKGUsdCl7cmV0dXJuISh0LmxpbmVOdW1iZXI8ZS5zdGFydExpbmVOdW1iZXJ8fHQubGluZU51bWJlcj5lLmVuZExpbmVOdW1iZXIpJiYoISh0LmxpbmVOdW1iZXI9PT1lLnN0YXJ0TGluZU51bWJlciYmdC5jb2x1bW48ZS5zdGFydENvbHVtbikmJiEodC5saW5lTnVtYmVyPT09ZS5lbmRMaW5lTnVtYmVyJiZ0LmNvbHVtbj5lLmVuZENvbHVtbikpfXN0YXRpYyBzdHJpY3RDb250YWluc1Bvc2l0aW9uKGUsdCl7cmV0dXJuISh0LmxpbmVOdW1iZXI8ZS5zdGFydExpbmVOdW1iZXJ8fHQubGluZU51bWJlcj5lLmVuZExpbmVOdW1iZXIpJiYoISh0LmxpbmVOdW1iZXI9PT1lLnN0YXJ0TGluZU51bWJlciYmdC5jb2x1bW48PWUuc3RhcnRDb2x1bW4pJiYhKHQubGluZU51bWJlcj09PWUuZW5kTGluZU51bWJlciYmdC5jb2x1bW4+PWUuZW5kQ29sdW1uKSl9Y29udGFpbnNSYW5nZShlKXtyZXR1cm4gc3QuY29udGFpbnNSYW5nZSh0aGlzLGUpfXN0YXRpYyBjb250YWluc1JhbmdlKGUsdCl7cmV0dXJuISh0LnN0YXJ0TGluZU51bWJlcjxlLnN0YXJ0TGluZU51bWJlcnx8dC5lbmRMaW5lTnVtYmVyPGUuc3RhcnRMaW5lTnVtYmVyKSYmKCEodC5zdGFydExpbmVOdW1iZXI+ZS5lbmRMaW5lTnVtYmVyfHx0LmVuZExpbmVOdW1iZXI+ZS5lbmRMaW5lTnVtYmVyKSYmKCEodC5zdGFydExpbmVOdW1iZXI9PT1lLnN0YXJ0TGluZU51bWJlciYmdC5zdGFydENvbHVtbjxlLnN0YXJ0Q29sdW1uKSYmISh0LmVuZExpbmVOdW1iZXI9PT1lLmVuZExpbmVOdW1iZXImJnQuZW5kQ29sdW1uPmUuZW5kQ29sdW1uKSkpfXN0cmljdENvbnRhaW5zUmFuZ2UoZSl7cmV0dXJuIHN0LnN0cmljdENvbnRhaW5zUmFuZ2UodGhpcyxlKX1zdGF0aWMgc3RyaWN0Q29udGFpbnNSYW5nZShlLHQpe3JldHVybiEodC5zdGFydExpbmVOdW1iZXI8ZS5zdGFydExpbmVOdW1iZXJ8fHQuZW5kTGluZU51bWJlcjxlLnN0YXJ0TGluZU51bWJlcikmJighKHQuc3RhcnRMaW5lTnVtYmVyPmUuZW5kTGluZU51bWJlcnx8dC5lbmRMaW5lTnVtYmVyPmUuZW5kTGluZU51bWJlcikmJighKHQuc3RhcnRMaW5lTnVtYmVyPT09ZS5zdGFydExpbmVOdW1iZXImJnQuc3RhcnRDb2x1bW48PWUuc3RhcnRDb2x1bW4pJiYhKHQuZW5kTGluZU51bWJlcj09PWUuZW5kTGluZU51bWJlciYmdC5lbmRDb2x1bW4+PWUuZW5kQ29sdW1uKSkpfXBsdXNSYW5nZShlKXtyZXR1cm4gc3QucGx1c1JhbmdlKHRoaXMsZSl9c3RhdGljIHBsdXNSYW5nZShlLHQpe2xldCByLG4saSxvO3JldHVybiBuPXQuc3RhcnRMaW5lTnVtYmVyPGUuc3RhcnRMaW5lTnVtYmVyPyhyPXQuc3RhcnRMaW5lTnVtYmVyLHQuc3RhcnRDb2x1bW4pOnQuc3RhcnRMaW5lTnVtYmVyPT09ZS5zdGFydExpbmVOdW1iZXI/KHI9dC5zdGFydExpbmVOdW1iZXIsTWF0aC5taW4odC5zdGFydENvbHVtbixlLnN0YXJ0Q29sdW1uKSk6KHI9ZS5zdGFydExpbmVOdW1iZXIsZS5zdGFydENvbHVtbiksbz10LmVuZExpbmVOdW1iZXI+ZS5lbmRMaW5lTnVtYmVyPyhpPXQuZW5kTGluZU51bWJlcix0LmVuZENvbHVtbik6dC5lbmRMaW5lTnVtYmVyPT09ZS5lbmRMaW5lTnVtYmVyPyhpPXQuZW5kTGluZU51bWJlcixNYXRoLm1heCh0LmVuZENvbHVtbixlLmVuZENvbHVtbikpOihpPWUuZW5kTGluZU51bWJlcixlLmVuZENvbHVtbiksbmV3IHN0KHIsbixpLG8pfWludGVyc2VjdFJhbmdlcyhlKXtyZXR1cm4gc3QuaW50ZXJzZWN0UmFuZ2VzKHRoaXMsZSl9c3RhdGljIGludGVyc2VjdFJhbmdlcyhlLHQpe2xldCByPWUuc3RhcnRMaW5lTnVtYmVyLG49ZS5zdGFydENvbHVtbixpPWUuZW5kTGluZU51bWJlcixvPWUuZW5kQ29sdW1uO3ZhciBlPXQuc3RhcnRMaW5lTnVtYmVyLGE9dC5zdGFydENvbHVtbixzPXQuZW5kTGluZU51bWJlcix0PXQuZW5kQ29sdW1uO3JldHVybiByPGU/KHI9ZSxuPWEpOnI9PT1lJiYobj1NYXRoLm1heChuLGEpKSxpPnM/KGk9cyxvPXQpOmk9PT1zJiYobz1NYXRoLm1pbihvLHQpKSxyPml8fHI9PT1pJiZuPm8/bnVsbDpuZXcgc3QocixuLGksbyl9ZXF1YWxzUmFuZ2UoZSl7cmV0dXJuIHN0LmVxdWFsc1JhbmdlKHRoaXMsZSl9c3RhdGljIGVxdWFsc1JhbmdlKGUsdCl7cmV0dXJuISFlJiYhIXQmJmUuc3RhcnRMaW5lTnVtYmVyPT09dC5zdGFydExpbmVOdW1iZXImJmUuc3RhcnRDb2x1bW49PT10LnN0YXJ0Q29sdW1uJiZlLmVuZExpbmVOdW1iZXI9PT10LmVuZExpbmVOdW1iZXImJmUuZW5kQ29sdW1uPT09dC5lbmRDb2x1bW59Z2V0RW5kUG9zaXRpb24oKXtyZXR1cm4gc3QuZ2V0RW5kUG9zaXRpb24odGhpcyl9c3RhdGljIGdldEVuZFBvc2l0aW9uKGUpe3JldHVybiBuZXcgYXQoZS5lbmRMaW5lTnVtYmVyLGUuZW5kQ29sdW1uKX1nZXRTdGFydFBvc2l0aW9uKCl7cmV0dXJuIHN0LmdldFN0YXJ0UG9zaXRpb24odGhpcyl9c3RhdGljIGdldFN0YXJ0UG9zaXRpb24oZSl7cmV0dXJuIG5ldyBhdChlLnN0YXJ0TGluZU51bWJlcixlLnN0YXJ0Q29sdW1uKX10b1N0cmluZygpe3JldHVybiJbIit0aGlzLnN0YXJ0TGluZU51bWJlcisiLCIrdGhpcy5zdGFydENvbHVtbisiIC0+ICIrdGhpcy5lbmRMaW5lTnVtYmVyKyIsIit0aGlzLmVuZENvbHVtbisiXSJ9c2V0RW5kUG9zaXRpb24oZSx0KXtyZXR1cm4gbmV3IHN0KHRoaXMuc3RhcnRMaW5lTnVtYmVyLHRoaXMuc3RhcnRDb2x1bW4sZSx0KX1zZXRTdGFydFBvc2l0aW9uKGUsdCl7cmV0dXJuIG5ldyBzdChlLHQsdGhpcy5lbmRMaW5lTnVtYmVyLHRoaXMuZW5kQ29sdW1uKX1jb2xsYXBzZVRvU3RhcnQoKXtyZXR1cm4gc3QuY29sbGFwc2VUb1N0YXJ0KHRoaXMpfXN0YXRpYyBjb2xsYXBzZVRvU3RhcnQoZSl7cmV0dXJuIG5ldyBzdChlLnN0YXJ0TGluZU51bWJlcixlLnN0YXJ0Q29sdW1uLGUuc3RhcnRMaW5lTnVtYmVyLGUuc3RhcnRDb2x1bW4pfXN0YXRpYyBmcm9tUG9zaXRpb25zKGUsdD1lKXtyZXR1cm4gbmV3IHN0KGUubGluZU51bWJlcixlLmNvbHVtbix0LmxpbmVOdW1iZXIsdC5jb2x1bW4pfXN0YXRpYyBsaWZ0KGUpe3JldHVybiBlP25ldyBzdChlLnN0YXJ0TGluZU51bWJlcixlLnN0YXJ0Q29sdW1uLGUuZW5kTGluZU51bWJlcixlLmVuZENvbHVtbik6bnVsbH1zdGF0aWMgaXNJUmFuZ2UoZSl7cmV0dXJuIGUmJiJudW1iZXIiPT10eXBlb2YgZS5zdGFydExpbmVOdW1iZXImJiJudW1iZXIiPT10eXBlb2YgZS5zdGFydENvbHVtbiYmIm51bWJlciI9PXR5cGVvZiBlLmVuZExpbmVOdW1iZXImJiJudW1iZXIiPT10eXBlb2YgZS5lbmRDb2x1bW59c3RhdGljIGFyZUludGVyc2VjdGluZ09yVG91Y2hpbmcoZSx0KXtyZXR1cm4hKGUuZW5kTGluZU51bWJlcjx0LnN0YXJ0TGluZU51bWJlcnx8ZS5lbmRMaW5lTnVtYmVyPT09dC5zdGFydExpbmVOdW1iZXImJmUuZW5kQ29sdW1uPHQuc3RhcnRDb2x1bW4pJiYhKHQuZW5kTGluZU51bWJlcjxlLnN0YXJ0TGluZU51bWJlcnx8dC5lbmRMaW5lTnVtYmVyPT09ZS5zdGFydExpbmVOdW1iZXImJnQuZW5kQ29sdW1uPGUuc3RhcnRDb2x1bW4pfXN0YXRpYyBhcmVJbnRlcnNlY3RpbmcoZSx0KXtyZXR1cm4hKGUuZW5kTGluZU51bWJlcjx0LnN0YXJ0TGluZU51bWJlcnx8ZS5lbmRMaW5lTnVtYmVyPT09dC5zdGFydExpbmVOdW1iZXImJmUuZW5kQ29sdW1uPD10LnN0YXJ0Q29sdW1uKSYmISh0LmVuZExpbmVOdW1iZXI8ZS5zdGFydExpbmVOdW1iZXJ8fHQuZW5kTGluZU51bWJlcj09PWUuc3RhcnRMaW5lTnVtYmVyJiZ0LmVuZENvbHVtbjw9ZS5zdGFydENvbHVtbil9c3RhdGljIGNvbXBhcmVSYW5nZXNVc2luZ1N0YXJ0cyhlLHQpe3ZhciByLG4saSxvLGEscztyZXR1cm4gZSYmdD8ocj0wfGUuc3RhcnRMaW5lTnVtYmVyKT09KG49MHx0LnN0YXJ0TGluZU51bWJlcik/KGk9MHxlLnN0YXJ0Q29sdW1uKT09KG89MHx0LnN0YXJ0Q29sdW1uKT8oYT0wfGUuZW5kTGluZU51bWJlcikhPShzPTB8dC5lbmRMaW5lTnVtYmVyKT9hLXM6KDB8ZS5lbmRDb2x1bW4pLSgwfHQuZW5kQ29sdW1uKTppLW86ci1uOihlPzE6MCktKHQ/MTowKX1zdGF0aWMgY29tcGFyZVJhbmdlc1VzaW5nRW5kcyhlLHQpe3JldHVybiBlLmVuZExpbmVOdW1iZXI9PT10LmVuZExpbmVOdW1iZXI/ZS5lbmRDb2x1bW49PT10LmVuZENvbHVtbj9lLnN0YXJ0TGluZU51bWJlcj09PXQuc3RhcnRMaW5lTnVtYmVyP2Uuc3RhcnRDb2x1bW4tdC5zdGFydENvbHVtbjplLnN0YXJ0TGluZU51bWJlci10LnN0YXJ0TGluZU51bWJlcjplLmVuZENvbHVtbi10LmVuZENvbHVtbjplLmVuZExpbmVOdW1iZXItdC5lbmRMaW5lTnVtYmVyfXN0YXRpYyBzcGFuc011bHRpcGxlTGluZXMoZSl7cmV0dXJuIGUuZW5kTGluZU51bWJlcj5lLnN0YXJ0TGluZU51bWJlcn19ZnVuY3Rpb24gbHQoZSx0LHIsbil7Y29uc3QgaT1uZXcgeGUoZSx0LHIpO3JldHVybiBpLkNvbXB1dGVEaWZmKG4pfWNsYXNzIGN0e2NvbnN0cnVjdG9yKHIpe2NvbnN0IG49W10saT1bXTtmb3IobGV0IGU9MCx0PXIubGVuZ3RoO2U8dDtlKyspbltlXT1tdChyW2VdLDEpLGlbZV09Z3QocltlXSwxKTt0aGlzLmxpbmVzPXIsdGhpcy5fc3RhcnRDb2x1bW5zPW4sdGhpcy5fZW5kQ29sdW1ucz1pfWdldEVsZW1lbnRzKCl7Y29uc3Qgcj1bXTtmb3IobGV0IGU9MCx0PXRoaXMubGluZXMubGVuZ3RoO2U8dDtlKyspcltlXT10aGlzLmxpbmVzW2VdLnN1YnN0cmluZyh0aGlzLl9zdGFydENvbHVtbnNbZV0tMSx0aGlzLl9lbmRDb2x1bW5zW2VdLTEpO3JldHVybiByfWdldFN0cmljdEVsZW1lbnQoZSl7cmV0dXJuIHRoaXMubGluZXNbZV19Z2V0U3RhcnRMaW5lTnVtYmVyKGUpe3JldHVybiBlKzF9Z2V0RW5kTGluZU51bWJlcihlKXtyZXR1cm4gZSsxfWNyZWF0ZUNoYXJTZXF1ZW5jZShlLHIsbil7Y29uc3QgaT1bXSxvPVtdLGE9W107bGV0IHM9MDtmb3IobGV0IHQ9cjt0PD1uO3QrKyl7Y29uc3QgdT10aGlzLmxpbmVzW3RdO3ZhciBsPWU/dGhpcy5fc3RhcnRDb2x1bW5zW3RdOjEsYz1lP3RoaXMuX2VuZENvbHVtbnNbdF06dS5sZW5ndGgrMTtmb3IobGV0IGU9bDtlPGM7ZSsrKWlbc109dS5jaGFyQ29kZUF0KGUtMSksb1tzXT10KzEsYVtzXT1lLHMrK31yZXR1cm4gbmV3IHV0KGksbyxhKX19Y2xhc3MgdXR7Y29uc3RydWN0b3IoZSx0LHIpe3RoaXMuX2NoYXJDb2Rlcz1lLHRoaXMuX2xpbmVOdW1iZXJzPXQsdGhpcy5fY29sdW1ucz1yfWdldEVsZW1lbnRzKCl7cmV0dXJuIHRoaXMuX2NoYXJDb2Rlc31nZXRTdGFydExpbmVOdW1iZXIoZSl7cmV0dXJuIHRoaXMuX2xpbmVOdW1iZXJzW2VdfWdldFN0YXJ0Q29sdW1uKGUpe3JldHVybiB0aGlzLl9jb2x1bW5zW2VdfWdldEVuZExpbmVOdW1iZXIoZSl7cmV0dXJuIHRoaXMuX2xpbmVOdW1iZXJzW2VdfWdldEVuZENvbHVtbihlKXtyZXR1cm4gdGhpcy5fY29sdW1uc1tlXSsxfX1jbGFzcyBodHtjb25zdHJ1Y3RvcihlLHQscixuLGksbyxhLHMpe3RoaXMub3JpZ2luYWxTdGFydExpbmVOdW1iZXI9ZSx0aGlzLm9yaWdpbmFsU3RhcnRDb2x1bW49dCx0aGlzLm9yaWdpbmFsRW5kTGluZU51bWJlcj1yLHRoaXMub3JpZ2luYWxFbmRDb2x1bW49bix0aGlzLm1vZGlmaWVkU3RhcnRMaW5lTnVtYmVyPWksdGhpcy5tb2RpZmllZFN0YXJ0Q29sdW1uPW8sdGhpcy5tb2RpZmllZEVuZExpbmVOdW1iZXI9YSx0aGlzLm1vZGlmaWVkRW5kQ29sdW1uPXN9c3RhdGljIGNyZWF0ZUZyb21EaWZmQ2hhbmdlKGUsdCxyKXtsZXQgbixpLG8sYSxzLGwsYyx1O3JldHVybiBhPTA9PT1lLm9yaWdpbmFsTGVuZ3RoPyhuPTAsaT0wLG89MCk6KG49dC5nZXRTdGFydExpbmVOdW1iZXIoZS5vcmlnaW5hbFN0YXJ0KSxpPXQuZ2V0U3RhcnRDb2x1bW4oZS5vcmlnaW5hbFN0YXJ0KSxvPXQuZ2V0RW5kTGluZU51bWJlcihlLm9yaWdpbmFsU3RhcnQrZS5vcmlnaW5hbExlbmd0aC0xKSx0LmdldEVuZENvbHVtbihlLm9yaWdpbmFsU3RhcnQrZS5vcmlnaW5hbExlbmd0aC0xKSksdT0wPT09ZS5tb2RpZmllZExlbmd0aD8ocz0wLGw9MCxjPTApOihzPXIuZ2V0U3RhcnRMaW5lTnVtYmVyKGUubW9kaWZpZWRTdGFydCksbD1yLmdldFN0YXJ0Q29sdW1uKGUubW9kaWZpZWRTdGFydCksYz1yLmdldEVuZExpbmVOdW1iZXIoZS5tb2RpZmllZFN0YXJ0K2UubW9kaWZpZWRMZW5ndGgtMSksci5nZXRFbmRDb2x1bW4oZS5tb2RpZmllZFN0YXJ0K2UubW9kaWZpZWRMZW5ndGgtMSkpLG5ldyBodChuLGksbyxhLHMsbCxjLHUpfX1jbGFzcyBmdHtjb25zdHJ1Y3RvcihlLHQscixuLGkpe3RoaXMub3JpZ2luYWxTdGFydExpbmVOdW1iZXI9ZSx0aGlzLm9yaWdpbmFsRW5kTGluZU51bWJlcj10LHRoaXMubW9kaWZpZWRTdGFydExpbmVOdW1iZXI9cix0aGlzLm1vZGlmaWVkRW5kTGluZU51bWJlcj1uLHRoaXMuY2hhckNoYW5nZXM9aX1zdGF0aWMgY3JlYXRlRnJvbURpZmZSZXN1bHQoZSx0LG4saSxvLHUsaCl7bGV0IHIsYSxzLGwsYz12b2lkIDA7aWYoYT0wPT09dC5vcmlnaW5hbExlbmd0aD8ocj1uLmdldFN0YXJ0TGluZU51bWJlcih0Lm9yaWdpbmFsU3RhcnQpLTEsMCk6KHI9bi5nZXRTdGFydExpbmVOdW1iZXIodC5vcmlnaW5hbFN0YXJ0KSxuLmdldEVuZExpbmVOdW1iZXIodC5vcmlnaW5hbFN0YXJ0K3Qub3JpZ2luYWxMZW5ndGgtMSkpLGw9MD09PXQubW9kaWZpZWRMZW5ndGg/KHM9aS5nZXRTdGFydExpbmVOdW1iZXIodC5tb2RpZmllZFN0YXJ0KS0xLDApOihzPWkuZ2V0U3RhcnRMaW5lTnVtYmVyKHQubW9kaWZpZWRTdGFydCksaS5nZXRFbmRMaW5lTnVtYmVyKHQubW9kaWZpZWRTdGFydCt0Lm1vZGlmaWVkTGVuZ3RoLTEpKSx1JiYwPHQub3JpZ2luYWxMZW5ndGgmJnQub3JpZ2luYWxMZW5ndGg8MjAmJjA8dC5tb2RpZmllZExlbmd0aCYmdC5tb2RpZmllZExlbmd0aDwyMCYmbygpKXt2YXIgZj1uLmNyZWF0ZUNoYXJTZXF1ZW5jZShlLHQub3JpZ2luYWxTdGFydCx0Lm9yaWdpbmFsU3RhcnQrdC5vcmlnaW5hbExlbmd0aC0xKSxkPWkuY3JlYXRlQ2hhclNlcXVlbmNlKGUsdC5tb2RpZmllZFN0YXJ0LHQubW9kaWZpZWRTdGFydCt0Lm1vZGlmaWVkTGVuZ3RoLTEpO2xldCByPWx0KGYsZCxvLCEwKS5jaGFuZ2VzO2gmJihyPWZ1bmN0aW9uKHIpe2lmKHIubGVuZ3RoPD0xKXJldHVybiByO2NvbnN0IG49W3JbMF1dO2xldCBpPW5bMF07Zm9yKGxldCBlPTEsdD1yLmxlbmd0aDtlPHQ7ZSsrKXt2YXIgbz1yW2VdLGE9by5vcmlnaW5hbFN0YXJ0LShpLm9yaWdpbmFsU3RhcnQraS5vcmlnaW5hbExlbmd0aCkscz1vLm1vZGlmaWVkU3RhcnQtKGkubW9kaWZpZWRTdGFydCtpLm1vZGlmaWVkTGVuZ3RoKTtNYXRoLm1pbihhLHMpPDM/KGkub3JpZ2luYWxMZW5ndGg9by5vcmlnaW5hbFN0YXJ0K28ub3JpZ2luYWxMZW5ndGgtaS5vcmlnaW5hbFN0YXJ0LGkubW9kaWZpZWRMZW5ndGg9by5tb2RpZmllZFN0YXJ0K28ubW9kaWZpZWRMZW5ndGgtaS5tb2RpZmllZFN0YXJ0KToobi5wdXNoKG8pLGk9byl9cmV0dXJuIG59KHIpKSxjPVtdO2ZvcihsZXQgZT0wLHQ9ci5sZW5ndGg7ZTx0O2UrKyljLnB1c2goaHQuY3JlYXRlRnJvbURpZmZDaGFuZ2UocltlXSxmLGQpKX1yZXR1cm4gbmV3IGZ0KHIsYSxzLGwsYyl9fWNsYXNzIGR0e2NvbnN0cnVjdG9yKGUsdCxyKXt0aGlzLnNob3VsZENvbXB1dGVDaGFyQ2hhbmdlcz1yLnNob3VsZENvbXB1dGVDaGFyQ2hhbmdlcyx0aGlzLnNob3VsZFBvc3RQcm9jZXNzQ2hhckNoYW5nZXM9ci5zaG91bGRQb3N0UHJvY2Vzc0NoYXJDaGFuZ2VzLHRoaXMuc2hvdWxkSWdub3JlVHJpbVdoaXRlc3BhY2U9ci5zaG91bGRJZ25vcmVUcmltV2hpdGVzcGFjZSx0aGlzLnNob3VsZE1ha2VQcmV0dHlEaWZmPXIuc2hvdWxkTWFrZVByZXR0eURpZmYsdGhpcy5vcmlnaW5hbExpbmVzPWUsdGhpcy5tb2RpZmllZExpbmVzPXQsdGhpcy5vcmlnaW5hbD1uZXcgY3QoZSksdGhpcy5tb2RpZmllZD1uZXcgY3QodCksdGhpcy5jb250aW51ZUxpbmVEaWZmPXB0KHIubWF4Q29tcHV0YXRpb25UaW1lKSx0aGlzLmNvbnRpbnVlQ2hhckRpZmY9cHQoMD09PXIubWF4Q29tcHV0YXRpb25UaW1lPzA6TWF0aC5taW4oci5tYXhDb21wdXRhdGlvblRpbWUsNWUzKSl9Y29tcHV0ZURpZmYoKXtpZigxPT09dGhpcy5vcmlnaW5hbC5saW5lcy5sZW5ndGgmJjA9PT10aGlzLm9yaWdpbmFsLmxpbmVzWzBdLmxlbmd0aClyZXR1cm4gMT09PXRoaXMubW9kaWZpZWQubGluZXMubGVuZ3RoJiYwPT09dGhpcy5tb2RpZmllZC5saW5lc1swXS5sZW5ndGg/e3F1aXRFYXJseTohMSxjaGFuZ2VzOltdfTp7cXVpdEVhcmx5OiExLGNoYW5nZXM6W3tvcmlnaW5hbFN0YXJ0TGluZU51bWJlcjoxLG9yaWdpbmFsRW5kTGluZU51bWJlcjoxLG1vZGlmaWVkU3RhcnRMaW5lTnVtYmVyOjEsbW9kaWZpZWRFbmRMaW5lTnVtYmVyOnRoaXMubW9kaWZpZWQubGluZXMubGVuZ3RoLGNoYXJDaGFuZ2VzOlt7bW9kaWZpZWRFbmRDb2x1bW46MCxtb2RpZmllZEVuZExpbmVOdW1iZXI6MCxtb2RpZmllZFN0YXJ0Q29sdW1uOjAsbW9kaWZpZWRTdGFydExpbmVOdW1iZXI6MCxvcmlnaW5hbEVuZENvbHVtbjowLG9yaWdpbmFsRW5kTGluZU51bWJlcjowLG9yaWdpbmFsU3RhcnRDb2x1bW46MCxvcmlnaW5hbFN0YXJ0TGluZU51bWJlcjowfV19XX07aWYoMT09PXRoaXMubW9kaWZpZWQubGluZXMubGVuZ3RoJiYwPT09dGhpcy5tb2RpZmllZC5saW5lc1swXS5sZW5ndGgpcmV0dXJue3F1aXRFYXJseTohMSxjaGFuZ2VzOlt7b3JpZ2luYWxTdGFydExpbmVOdW1iZXI6MSxvcmlnaW5hbEVuZExpbmVOdW1iZXI6dGhpcy5vcmlnaW5hbC5saW5lcy5sZW5ndGgsbW9kaWZpZWRTdGFydExpbmVOdW1iZXI6MSxtb2RpZmllZEVuZExpbmVOdW1iZXI6MSxjaGFyQ2hhbmdlczpbe21vZGlmaWVkRW5kQ29sdW1uOjAsbW9kaWZpZWRFbmRMaW5lTnVtYmVyOjAsbW9kaWZpZWRTdGFydENvbHVtbjowLG1vZGlmaWVkU3RhcnRMaW5lTnVtYmVyOjAsb3JpZ2luYWxFbmRDb2x1bW46MCxvcmlnaW5hbEVuZExpbmVOdW1iZXI6MCxvcmlnaW5hbFN0YXJ0Q29sdW1uOjAsb3JpZ2luYWxTdGFydExpbmVOdW1iZXI6MH1dfV19O3ZhciBlPWx0KHRoaXMub3JpZ2luYWwsdGhpcy5tb2RpZmllZCx0aGlzLmNvbnRpbnVlTGluZURpZmYsdGhpcy5zaG91bGRNYWtlUHJldHR5RGlmZikscj1lLmNoYW5nZXMsZT1lLnF1aXRFYXJseTtpZih0aGlzLnNob3VsZElnbm9yZVRyaW1XaGl0ZXNwYWNlKXtjb25zdCBkPVtdO2ZvcihsZXQgZT0wLHQ9ci5sZW5ndGg7ZTx0O2UrKylkLnB1c2goZnQuY3JlYXRlRnJvbURpZmZSZXN1bHQodGhpcy5zaG91bGRJZ25vcmVUcmltV2hpdGVzcGFjZSxyW2VdLHRoaXMub3JpZ2luYWwsdGhpcy5tb2RpZmllZCx0aGlzLmNvbnRpbnVlQ2hhckRpZmYsdGhpcy5zaG91bGRDb21wdXRlQ2hhckNoYW5nZXMsdGhpcy5zaG91bGRQb3N0UHJvY2Vzc0NoYXJDaGFuZ2VzKSk7cmV0dXJue3F1aXRFYXJseTplLGNoYW5nZXM6ZH19Y29uc3Qgbj1bXTtsZXQgaT0wLG89MDtmb3IobGV0IGU9LTEsdD1yLmxlbmd0aDtlPHQ7ZSsrKXtmb3IodmFyIGE9ZSsxPHQ/cltlKzFdOm51bGwsaD1hP2Eub3JpZ2luYWxTdGFydDp0aGlzLm9yaWdpbmFsTGluZXMubGVuZ3RoLGY9YT9hLm1vZGlmaWVkU3RhcnQ6dGhpcy5tb2RpZmllZExpbmVzLmxlbmd0aDtpPGgmJm88Zjspe2NvbnN0IGM9dGhpcy5vcmlnaW5hbExpbmVzW2ldLHU9dGhpcy5tb2RpZmllZExpbmVzW29dO2lmKGMhPT11KXt7bGV0IGU9bXQoYywxKSx0PW10KHUsMSk7Zm9yKDsxPGUmJjE8dDspe2lmKGMuY2hhckNvZGVBdChlLTIpIT09dS5jaGFyQ29kZUF0KHQtMikpYnJlYWs7ZS0tLHQtLX0oMTxlfHwxPHQpJiZ0aGlzLl9wdXNoVHJpbVdoaXRlc3BhY2VDaGFyQ2hhbmdlKG4saSsxLDEsZSxvKzEsMSx0KX17bGV0IGU9Z3QoYywxKSx0PWd0KHUsMSk7Zm9yKHZhciBzPWMubGVuZ3RoKzEsbD11Lmxlbmd0aCsxO2U8cyYmdDxsOyl7aWYoYy5jaGFyQ29kZUF0KGUtMSkhPT1jLmNoYXJDb2RlQXQodC0xKSlicmVhaztlKyssdCsrfShlPHN8fHQ8bCkmJnRoaXMuX3B1c2hUcmltV2hpdGVzcGFjZUNoYXJDaGFuZ2UobixpKzEsZSxzLG8rMSx0LGwpfX1pKyssbysrfWEmJihuLnB1c2goZnQuY3JlYXRlRnJvbURpZmZSZXN1bHQodGhpcy5zaG91bGRJZ25vcmVUcmltV2hpdGVzcGFjZSxhLHRoaXMub3JpZ2luYWwsdGhpcy5tb2RpZmllZCx0aGlzLmNvbnRpbnVlQ2hhckRpZmYsdGhpcy5zaG91bGRDb21wdXRlQ2hhckNoYW5nZXMsdGhpcy5zaG91bGRQb3N0UHJvY2Vzc0NoYXJDaGFuZ2VzKSksaSs9YS5vcmlnaW5hbExlbmd0aCxvKz1hLm1vZGlmaWVkTGVuZ3RoKX1yZXR1cm57cXVpdEVhcmx5OmUsY2hhbmdlczpufX1fcHVzaFRyaW1XaGl0ZXNwYWNlQ2hhckNoYW5nZSh0LHIsbixpLG8sYSxzKXtpZighdGhpcy5fbWVyZ2VUcmltV2hpdGVzcGFjZUNoYXJDaGFuZ2UodCxyLG4saSxvLGEscykpe2xldCBlPXZvaWQgMDt0aGlzLnNob3VsZENvbXB1dGVDaGFyQ2hhbmdlcyYmKGU9W25ldyBodChyLG4scixpLG8sYSxvLHMpXSksdC5wdXNoKG5ldyBmdChyLHIsbyxvLGUpKX19X21lcmdlVHJpbVdoaXRlc3BhY2VDaGFyQ2hhbmdlKGUsdCxyLG4saSxvLGEpe3ZhciBzPWUubGVuZ3RoO2lmKDA9PT1zKXJldHVybiExO2NvbnN0IGw9ZVtzLTFdO3JldHVybiAwIT09bC5vcmlnaW5hbEVuZExpbmVOdW1iZXImJjAhPT1sLm1vZGlmaWVkRW5kTGluZU51bWJlciYmKGwub3JpZ2luYWxFbmRMaW5lTnVtYmVyKzE9PT10JiZsLm1vZGlmaWVkRW5kTGluZU51bWJlcisxPT09aSYmKGwub3JpZ2luYWxFbmRMaW5lTnVtYmVyPXQsbC5tb2RpZmllZEVuZExpbmVOdW1iZXI9aSx0aGlzLnNob3VsZENvbXB1dGVDaGFyQ2hhbmdlcyYmbC5jaGFyQ2hhbmdlcyYmbC5jaGFyQ2hhbmdlcy5wdXNoKG5ldyBodCh0LHIsdCxuLGksbyxpLGEpKSwhMCkpfX1mdW5jdGlvbiBtdChlLHQpe2U9ZnVuY3Rpb24ocil7Zm9yKGxldCBlPTAsdD1yLmxlbmd0aDtlPHQ7ZSsrKXt2YXIgbj1yLmNoYXJDb2RlQXQoZSk7aWYoMzIhPT1uJiY5IT09bilyZXR1cm4gZX1yZXR1cm4tMX0oZSk7cmV0dXJuLTE9PT1lP3Q6ZSsxfWZ1bmN0aW9uIGd0KGUsdCl7ZT1mdW5jdGlvbih0LHI9dC5sZW5ndGgtMSl7Zm9yKGxldCBlPXI7MDw9ZTtlLS0pe3ZhciBuPXQuY2hhckNvZGVBdChlKTtpZigzMiE9PW4mJjkhPT1uKXJldHVybiBlfXJldHVybi0xfShlKTtyZXR1cm4tMT09PWU/dDplKzJ9ZnVuY3Rpb24gcHQoZSl7aWYoMD09PWUpcmV0dXJuKCk9PiEwO2NvbnN0IHQ9RGF0ZS5ub3coKTtyZXR1cm4oKT0+RGF0ZS5ub3coKS10PGV9ZnVuY3Rpb24gYnQoZSl7cmV0dXJuIGU8MD8wOjI1NTxlPzI1NTowfGV9ZnVuY3Rpb24gdnQoZSl7cmV0dXJuIGU8MD8wOjQyOTQ5NjcyOTU8ZT80Mjk0OTY3Mjk1OjB8ZX1jbGFzcyB5dHtjb25zdHJ1Y3RvcihlKXt0aGlzLnZhbHVlcz1lLHRoaXMucHJlZml4U3VtPW5ldyBVaW50MzJBcnJheShlLmxlbmd0aCksdGhpcy5wcmVmaXhTdW1WYWxpZEluZGV4PW5ldyBJbnQzMkFycmF5KDEpLHRoaXMucHJlZml4U3VtVmFsaWRJbmRleFswXT0tMX1pbnNlcnRWYWx1ZXMoZSx0KXtlPXZ0KGUpO2NvbnN0IHI9dGhpcy52YWx1ZXMsbj10aGlzLnByZWZpeFN1bTt2YXIgaT10Lmxlbmd0aDtyZXR1cm4gMCE9PWkmJih0aGlzLnZhbHVlcz1uZXcgVWludDMyQXJyYXkoci5sZW5ndGgraSksdGhpcy52YWx1ZXMuc2V0KHIuc3ViYXJyYXkoMCxlKSwwKSx0aGlzLnZhbHVlcy5zZXQoci5zdWJhcnJheShlKSxlK2kpLHRoaXMudmFsdWVzLnNldCh0LGUpLGUtMTx0aGlzLnByZWZpeFN1bVZhbGlkSW5kZXhbMF0mJih0aGlzLnByZWZpeFN1bVZhbGlkSW5kZXhbMF09ZS0xKSx0aGlzLnByZWZpeFN1bT1uZXcgVWludDMyQXJyYXkodGhpcy52YWx1ZXMubGVuZ3RoKSwwPD10aGlzLnByZWZpeFN1bVZhbGlkSW5kZXhbMF0mJnRoaXMucHJlZml4U3VtLnNldChuLnN1YmFycmF5KDAsdGhpcy5wcmVmaXhTdW1WYWxpZEluZGV4WzBdKzEpKSwhMCl9c2V0VmFsdWUoZSx0KXtyZXR1cm4gZT12dChlKSx0PXZ0KHQpLHRoaXMudmFsdWVzW2VdIT09dCYmKHRoaXMudmFsdWVzW2VdPXQsZS0xPHRoaXMucHJlZml4U3VtVmFsaWRJbmRleFswXSYmKHRoaXMucHJlZml4U3VtVmFsaWRJbmRleFswXT1lLTEpLCEwKX1yZW1vdmVWYWx1ZXMoZSx0KXtlPXZ0KGUpLHQ9dnQodCk7Y29uc3Qgcj10aGlzLnZhbHVlcyxuPXRoaXMucHJlZml4U3VtO2lmKGU+PXIubGVuZ3RoKXJldHVybiExO3ZhciBpPXIubGVuZ3RoLWU7cmV0dXJuIDAhPT0odD1pPD10P2k6dCkmJih0aGlzLnZhbHVlcz1uZXcgVWludDMyQXJyYXkoci5sZW5ndGgtdCksdGhpcy52YWx1ZXMuc2V0KHIuc3ViYXJyYXkoMCxlKSwwKSx0aGlzLnZhbHVlcy5zZXQoci5zdWJhcnJheShlK3QpLGUpLHRoaXMucHJlZml4U3VtPW5ldyBVaW50MzJBcnJheSh0aGlzLnZhbHVlcy5sZW5ndGgpLGUtMTx0aGlzLnByZWZpeFN1bVZhbGlkSW5kZXhbMF0mJih0aGlzLnByZWZpeFN1bVZhbGlkSW5kZXhbMF09ZS0xKSwwPD10aGlzLnByZWZpeFN1bVZhbGlkSW5kZXhbMF0mJnRoaXMucHJlZml4U3VtLnNldChuLnN1YmFycmF5KDAsdGhpcy5wcmVmaXhTdW1WYWxpZEluZGV4WzBdKzEpKSwhMCl9Z2V0VG90YWxTdW0oKXtyZXR1cm4gMD09PXRoaXMudmFsdWVzLmxlbmd0aD8wOnRoaXMuX2dldFByZWZpeFN1bSh0aGlzLnZhbHVlcy5sZW5ndGgtMSl9Z2V0UHJlZml4U3VtKGUpe3JldHVybiBlPDA/MDooZT12dChlKSx0aGlzLl9nZXRQcmVmaXhTdW0oZSkpfV9nZXRQcmVmaXhTdW0odCl7aWYodDw9dGhpcy5wcmVmaXhTdW1WYWxpZEluZGV4WzBdKXJldHVybiB0aGlzLnByZWZpeFN1bVt0XTtsZXQgcj10aGlzLnByZWZpeFN1bVZhbGlkSW5kZXhbMF0rMTswPT09ciYmKHRoaXMucHJlZml4U3VtWzBdPXRoaXMudmFsdWVzWzBdLHIrKyksdD49dGhpcy52YWx1ZXMubGVuZ3RoJiYodD10aGlzLnZhbHVlcy5sZW5ndGgtMSk7Zm9yKGxldCBlPXI7ZTw9dDtlKyspdGhpcy5wcmVmaXhTdW1bZV09dGhpcy5wcmVmaXhTdW1bZS0xXSt0aGlzLnZhbHVlc1tlXTtyZXR1cm4gdGhpcy5wcmVmaXhTdW1WYWxpZEluZGV4WzBdPU1hdGgubWF4KHRoaXMucHJlZml4U3VtVmFsaWRJbmRleFswXSx0KSx0aGlzLnByZWZpeFN1bVt0XX1nZXRJbmRleE9mKGUpe2U9TWF0aC5mbG9vcihlKSx0aGlzLmdldFRvdGFsU3VtKCk7bGV0IHQ9MCxyPXRoaXMudmFsdWVzLmxlbmd0aC0xLG49MDt2YXIgaTtsZXQgbz0wO2Zvcig7dDw9cjspaWYobj10KyhyLXQpLzJ8MCxpPXRoaXMucHJlZml4U3VtW25dLGU8KG89aS10aGlzLnZhbHVlc1tuXSkpcj1uLTE7ZWxzZXtpZighKGk8PWUpKWJyZWFrO3Q9bisxfXJldHVybiBuZXcgQ3QobixlLW8pfX1jbGFzcyBDdHtjb25zdHJ1Y3RvcihlLHQpe3RoaXMuaW5kZXg9ZSx0aGlzLnJlbWFpbmRlcj10LHRoaXMuX3ByZWZpeFN1bUluZGV4T2ZSZXN1bHRCcmFuZD12b2lkIDAsdGhpcy5pbmRleD1lLHRoaXMucmVtYWluZGVyPXR9fWNvbnN0IHd0PWZ1bmN0aW9uKGU9IiIpe2xldCB0PSIoLT9cXGQqXFwuXFxkXFx3Kil8KFteIjtmb3IoY29uc3QgciBvZiJgfiFAIyQlXiYqKCktPStbe119XFx8OzonXCIsLjw+Lz8iKTA8PWUuaW5kZXhPZihyKXx8KHQrPSJcXCIrcik7cmV0dXJuIHQrPSJcXHNdKykiLG5ldyBSZWdFeHAodCwiZyIpfSgpO2NvbnN0IF90PXttYXhMZW46MWUzLHdpbmRvd1NpemU6MTUsdGltZUJ1ZGdldDoxNTB9O2Z1bmN0aW9uIFN0KHQscixuLGksbz1fdCl7aWYobi5sZW5ndGg+by5tYXhMZW4pe2xldCBlPXQtby5tYXhMZW4vMjtyZXR1cm4gZTwwP2U9MDppKz1lLFN0KHQscixuPW4uc3Vic3RyaW5nKGUsdCtvLm1heExlbi8yKSxpLG8pfXZhciBoPURhdGUubm93KCksYT10LTEtaTtsZXQgcz0tMSxsPW51bGw7Zm9yKGxldCBlPTE7IShEYXRlLm5vdygpLWg+PW8udGltZUJ1ZGdldCk7ZSsrKXt2YXIgYz1hLW8ud2luZG93U2l6ZSplLHU9KHIubGFzdEluZGV4PU1hdGgubWF4KDAsYyksZnVuY3Rpb24oZSx0LHIsbil7dmFyIGk7Zm9yKDtpPWUuZXhlYyh0KTspe3ZhciBvPWkuaW5kZXh8fDA7aWYobzw9ciYmZS5sYXN0SW5kZXg+PXIpcmV0dXJuIGk7aWYoMDxuJiZuPG8pcmV0dXJuIG51bGx9cmV0dXJuIG51bGx9KHIsbixhLHMpKTtpZighdSYmbClicmVhaztpZihsPXUsYzw9MClicmVhaztzPWN9cmV0dXJuIGw/KHQ9e3dvcmQ6bFswXSxzdGFydENvbHVtbjppKzErbC5pbmRleCxlbmRDb2x1bW46aSsxK2wuaW5kZXgrbFswXS5sZW5ndGh9LHIubGFzdEluZGV4PTAsdCk6bnVsbH1jbGFzcyBBdHtjb25zdHJ1Y3RvcihlKXtlPWJ0KGUpO3RoaXMuX2RlZmF1bHRWYWx1ZT1lLHRoaXMuX2FzY2lpTWFwPUF0Ll9jcmVhdGVBc2NpaU1hcChlKSx0aGlzLl9tYXA9bmV3IE1hcH1zdGF0aWMgX2NyZWF0ZUFzY2lpTWFwKHQpe2NvbnN0IHI9bmV3IFVpbnQ4QXJyYXkoMjU2KTtmb3IobGV0IGU9MDtlPDI1NjtlKyspcltlXT10O3JldHVybiByfXNldChlLHQpe3Q9YnQodCk7MDw9ZSYmZTwyNTY/dGhpcy5fYXNjaWlNYXBbZV09dDp0aGlzLl9tYXAuc2V0KGUsdCl9Z2V0KGUpe3JldHVybiAwPD1lJiZlPDI1Nj90aGlzLl9hc2NpaU1hcFtlXTp0aGlzLl9tYXAuZ2V0KGUpfHx0aGlzLl9kZWZhdWx0VmFsdWV9fWNsYXNzIHh0e2NvbnN0cnVjdG9yKHIsbixpKXtjb25zdCBvPW5ldyBVaW50OEFycmF5KHIqbik7Zm9yKGxldCBlPTAsdD1yKm47ZTx0O2UrKylvW2VdPWk7dGhpcy5fZGF0YT1vLHRoaXMucm93cz1yLHRoaXMuY29scz1ufWdldChlLHQpe3JldHVybiB0aGlzLl9kYXRhW2UqdGhpcy5jb2xzK3RdfXNldChlLHQscil7dGhpcy5fZGF0YVtlKnRoaXMuY29scyt0XT1yfX1jbGFzcyBFdHtjb25zdHJ1Y3RvcihyKXtsZXQgbj0wLGk9MDtmb3IobGV0IGU9MCx0PXIubGVuZ3RoO2U8dDtlKyspe3ZhcltvLGEsc109cltlXTthPm4mJihuPWEpLHM+KGk9bz5pP286aSkmJihpPXMpfW4rKyxpKys7Y29uc3QgbD1uZXcgeHQoaSxuLDApO2ZvcihsZXQgZT0wLHQ9ci5sZW5ndGg7ZTx0O2UrKyl7dmFyW2MsdSxoXT1yW2VdO2wuc2V0KGMsdSxoKX10aGlzLl9zdGF0ZXM9bCx0aGlzLl9tYXhDaGFyQ29kZT1ufW5leHRTdGF0ZShlLHQpe3JldHVybiB0PDB8fHQ+PXRoaXMuX21heENoYXJDb2RlPzA6dGhpcy5fc3RhdGVzLmdldChlLHQpfX1sZXQga3Q9bnVsbDtsZXQgTnQ9bnVsbDtjbGFzcyBMdHtzdGF0aWMgX2NyZWF0ZUxpbmsoZSx0LHIsbixpKXtsZXQgbz1pLTE7ZG97dmFyIGE9dC5jaGFyQ29kZUF0KG8pO2lmKDIhPT1lLmdldChhKSlicmVha313aGlsZSgtLW8+bik7dmFyIHM7cmV0dXJuIDA8biYmKGk9dC5jaGFyQ29kZUF0KG4tMSkscz10LmNoYXJDb2RlQXQobyksKDQwPT09aSYmNDE9PT1zfHw5MT09PWkmJjkzPT09c3x8MTIzPT09aSYmMTI1PT09cykmJm8tLSkse3JhbmdlOntzdGFydExpbmVOdW1iZXI6cixzdGFydENvbHVtbjpuKzEsZW5kTGluZU51bWJlcjpyLGVuZENvbHVtbjpvKzJ9LHVybDp0LnN1YnN0cmluZyhuLG8rMSl9fXN0YXRpYyBjb21wdXRlTGlua3ModCxoPWt0PW51bGw9PT1rdD9uZXcgRXQoW1sxLDEwNCwyXSxbMSw3MiwyXSxbMSwxMDIsNl0sWzEsNzAsNl0sWzIsMTE2LDNdLFsyLDg0LDNdLFszLDExNiw0XSxbMyw4NCw0XSxbNCwxMTIsNV0sWzQsODAsNV0sWzUsMTE1LDldLFs1LDgzLDldLFs1LDU4LDEwXSxbNiwxMDUsN10sWzYsNzMsN10sWzcsMTA4LDhdLFs3LDc2LDhdLFs4LDEwMSw5XSxbOCw2OSw5XSxbOSw1OCwxMF0sWzEwLDQ3LDExXSxbMTEsNDcsMTJdXSk6a3Qpe2NvbnN0IGY9ZnVuY3Rpb24oKXtpZihudWxsPT09TnQpe050PW5ldyBBdCgwKTt2YXIgdD0iIFx0PD4nXCLjgIHjgILvvaHvvaTvvIzvvI7vvJrvvJvigJjjgIjjgIzjgI7jgJTvvIjvvLvvvZvvvaLvvaPvvZ3vvL3vvInjgJXjgI/jgI3jgInigJnvvYDvvZ7igKYiO2ZvcihsZXQgZT0wO2U8dC5sZW5ndGg7ZSsrKU50LnNldCh0LmNoYXJDb2RlQXQoZSksMSk7Zm9yKGxldCBlPTA7ZTwiLiw7Ii5sZW5ndGg7ZSsrKU50LnNldCgiLiw7Ii5jaGFyQ29kZUF0KGUpLDIpfXJldHVybiBOdH0oKSxkPVtdO2ZvcihsZXQgdT0xLGU9dC5nZXRMaW5lQ291bnQoKTt1PD1lO3UrKyl7Y29uc3QgcD10LmdldExpbmVDb250ZW50KHUpO3ZhciBtPXAubGVuZ3RoO2xldCByPTAsbj0wLGk9MCxvPTEsYT0hMSxzPSExLGw9ITEsYz0hMTtmb3IoO3I8bTspe2xldCB0PSExO3ZhciBnPXAuY2hhckNvZGVBdChyKTtpZigxMz09PW8pe2xldCBlO3N3aXRjaChnKXtjYXNlIDQwOmE9ITAsZT0wO2JyZWFrO2Nhc2UgNDE6ZT1hPzA6MTticmVhaztjYXNlIDkxOmw9ITAscz0hMCxlPTA7YnJlYWs7Y2FzZSA5MzpsPSExLGU9cz8wOjE7YnJlYWs7Y2FzZSAxMjM6Yz0hMCxlPTA7YnJlYWs7Y2FzZSAxMjU6ZT1jPzA6MTticmVhaztjYXNlIDM5OmU9MzQ9PT1pfHw5Nj09PWk/MDoxO2JyZWFrO2Nhc2UgMzQ6ZT0zOT09PWl8fDk2PT09aT8wOjE7YnJlYWs7Y2FzZSA5NjplPTM5PT09aXx8MzQ9PT1pPzA6MTticmVhaztjYXNlIDQyOmU9NDI9PT1pPzE6MDticmVhaztjYXNlIDEyNDplPTEyND09PWk/MTowO2JyZWFrO2Nhc2UgMzI6ZT1sPzA6MTticmVhaztkZWZhdWx0OmU9Zi5nZXQoZyl9MT09PWUmJihkLnB1c2goTHQuX2NyZWF0ZUxpbmsoZixwLHUsbixyKSksdD0hMCl9ZWxzZSBpZigxMj09PW8pe2xldCBlOzE9PT0oZT05MT09PWc/KHM9ITAsMCk6Zi5nZXQoZykpP3Q9ITA6bz0xM31lbHNlIDA9PT0obz1oLm5leHRTdGF0ZShvLGcpKSYmKHQ9ITApO3QmJihvPTEsYT0hMSxzPSExLGM9ITEsbj1yKzEsaT1nKSxyKyt9MTM9PT1vJiZkLnB1c2goTHQuX2NyZWF0ZUxpbmsoZixwLHUsbixtKSl9cmV0dXJuIGR9fWNsYXNzIE10e2NvbnN0cnVjdG9yKCl7dGhpcy5fZGVmYXVsdFZhbHVlU2V0PVtbInRydWUiLCJmYWxzZSJdLFsiVHJ1ZSIsIkZhbHNlIl0sWyJQcml2YXRlIiwiUHVibGljIiwiRnJpZW5kIiwiUmVhZE9ubHkiLCJQYXJ0aWFsIiwiUHJvdGVjdGVkIiwiV3JpdGVPbmx5Il0sWyJwdWJsaWMiLCJwcm90ZWN0ZWQiLCJwcml2YXRlIl1dfW5hdmlnYXRlVmFsdWVTZXQoZSx0LHIsbixpKXtpZihlJiZ0KXt0PXRoaXMuZG9OYXZpZ2F0ZVZhbHVlU2V0KHQsaSk7aWYodClyZXR1cm57cmFuZ2U6ZSx2YWx1ZTp0fX1pZihyJiZuKXtlPXRoaXMuZG9OYXZpZ2F0ZVZhbHVlU2V0KG4saSk7aWYoZSlyZXR1cm57cmFuZ2U6cix2YWx1ZTplfX1yZXR1cm4gbnVsbH1kb05hdmlnYXRlVmFsdWVTZXQoZSx0KXt2YXIgcj10aGlzLm51bWJlclJlcGxhY2UoZSx0KTtyZXR1cm4gbnVsbCE9PXI/cjp0aGlzLnRleHRSZXBsYWNlKGUsdCl9bnVtYmVyUmVwbGFjZShlLHQpe3ZhciByPU1hdGgucG93KDEwLGUubGVuZ3RoLShlLmxhc3RJbmRleE9mKCIuIikrMSkpO2xldCBuPU51bWJlcihlKTtlPXBhcnNlRmxvYXQoZSk7cmV0dXJuIWlzTmFOKG4pJiYhaXNOYU4oZSkmJm49PT1lJiYoMCE9PW58fHQpPyhuPU1hdGguZmxvb3IobipyKSxuKz10P3I6LXIsU3RyaW5nKG4vcikpOm51bGx9dGV4dFJlcGxhY2UoZSx0KXtyZXR1cm4gdGhpcy52YWx1ZVNldHNSZXBsYWNlKHRoaXMuX2RlZmF1bHRWYWx1ZVNldCxlLHQpfXZhbHVlU2V0c1JlcGxhY2UocixuLGkpe2xldCBvPW51bGw7Zm9yKGxldCBlPTAsdD1yLmxlbmd0aDtudWxsPT09byYmZTx0O2UrKylvPXRoaXMudmFsdWVTZXRSZXBsYWNlKHJbZV0sbixpKTtyZXR1cm4gb312YWx1ZVNldFJlcGxhY2UoZSx0LHIpe2xldCBuPWUuaW5kZXhPZih0KTtyZXR1cm4gMDw9bj8oKG4rPXI/MTotMSk8MD9uPWUubGVuZ3RoLTE6biU9ZS5sZW5ndGgsZVtuXSk6bnVsbH19TXQuSU5TVEFOQ0U9bmV3IE10O2NvbnN0IE90PU9iamVjdC5mcmVlemUoZnVuY3Rpb24oZSx0KXtjb25zdCByPXNldFRpbWVvdXQoZS5iaW5kKHQpLDApO3JldHVybntkaXNwb3NlKCl7Y2xlYXJUaW1lb3V0KHIpfX19KTsoTWU9TGU9TGV8fHt9KS5pc0NhbmNlbGxhdGlvblRva2VuPWZ1bmN0aW9uKGUpe3JldHVybiBlPT09TWUuTm9uZXx8ZT09PU1lLkNhbmNlbGxlZHx8KGUgaW5zdGFuY2VvZiBQdHx8ISghZXx8Im9iamVjdCIhPXR5cGVvZiBlKSYmKCJib29sZWFuIj09dHlwZW9mIGUuaXNDYW5jZWxsYXRpb25SZXF1ZXN0ZWQmJiJmdW5jdGlvbiI9PXR5cGVvZiBlLm9uQ2FuY2VsbGF0aW9uUmVxdWVzdGVkKSl9LE1lLk5vbmU9T2JqZWN0LmZyZWV6ZSh7aXNDYW5jZWxsYXRpb25SZXF1ZXN0ZWQ6ITEsb25DYW5jZWxsYXRpb25SZXF1ZXN0ZWQ6RC5Ob25lfSksTWUuQ2FuY2VsbGVkPU9iamVjdC5mcmVlemUoe2lzQ2FuY2VsbGF0aW9uUmVxdWVzdGVkOiEwLG9uQ2FuY2VsbGF0aW9uUmVxdWVzdGVkOk90fSk7Y2xhc3MgUHR7Y29uc3RydWN0b3IoKXt0aGlzLl9pc0NhbmNlbGxlZD0hMSx0aGlzLl9lbWl0dGVyPW51bGx9Y2FuY2VsKCl7dGhpcy5faXNDYW5jZWxsZWR8fCh0aGlzLl9pc0NhbmNlbGxlZD0hMCx0aGlzLl9lbWl0dGVyJiYodGhpcy5fZW1pdHRlci5maXJlKHZvaWQgMCksdGhpcy5kaXNwb3NlKCkpKX1nZXQgaXNDYW5jZWxsYXRpb25SZXF1ZXN0ZWQoKXtyZXR1cm4gdGhpcy5faXNDYW5jZWxsZWR9Z2V0IG9uQ2FuY2VsbGF0aW9uUmVxdWVzdGVkKCl7cmV0dXJuIHRoaXMuX2lzQ2FuY2VsbGVkP090Oih0aGlzLl9lbWl0dGVyfHwodGhpcy5fZW1pdHRlcj1uZXcgWCksdGhpcy5fZW1pdHRlci5ldmVudCl9ZGlzcG9zZSgpe3RoaXMuX2VtaXR0ZXImJih0aGlzLl9lbWl0dGVyLmRpc3Bvc2UoKSx0aGlzLl9lbWl0dGVyPW51bGwpfX1jbGFzcyBUdHtjb25zdHJ1Y3RvcihlKXt0aGlzLl90b2tlbj12b2lkIDAsdGhpcy5fcGFyZW50TGlzdGVuZXI9dm9pZCAwLHRoaXMuX3BhcmVudExpc3RlbmVyPWUmJmUub25DYW5jZWxsYXRpb25SZXF1ZXN0ZWQodGhpcy5jYW5jZWwsdGhpcyl9Z2V0IHRva2VuKCl7cmV0dXJuIHRoaXMuX3Rva2VufHwodGhpcy5fdG9rZW49bmV3IFB0KSx0aGlzLl90b2tlbn1jYW5jZWwoKXt0aGlzLl90b2tlbj90aGlzLl90b2tlbiBpbnN0YW5jZW9mIFB0JiZ0aGlzLl90b2tlbi5jYW5jZWwoKTp0aGlzLl90b2tlbj1MZS5DYW5jZWxsZWR9ZGlzcG9zZShlPSExKXtlJiZ0aGlzLmNhbmNlbCgpLHRoaXMuX3BhcmVudExpc3RlbmVyJiZ0aGlzLl9wYXJlbnRMaXN0ZW5lci5kaXNwb3NlKCksdGhpcy5fdG9rZW4/dGhpcy5fdG9rZW4gaW5zdGFuY2VvZiBQdCYmdGhpcy5fdG9rZW4uZGlzcG9zZSgpOnRoaXMuX3Rva2VuPUxlLk5vbmV9fWNsYXNzIEl0e2NvbnN0cnVjdG9yKCl7dGhpcy5fa2V5Q29kZVRvU3RyPVtdLHRoaXMuX3N0clRvS2V5Q29kZT1PYmplY3QuY3JlYXRlKG51bGwpfWRlZmluZShlLHQpe3RoaXMuX2tleUNvZGVUb1N0cltlXT10LHRoaXMuX3N0clRvS2V5Q29kZVt0LnRvTG93ZXJDYXNlKCldPWV9a2V5Q29kZVRvU3RyKGUpe3JldHVybiB0aGlzLl9rZXlDb2RlVG9TdHJbZV19c3RyVG9LZXlDb2RlKGUpe3JldHVybiB0aGlzLl9zdHJUb0tleUNvZGVbZS50b0xvd2VyQ2FzZSgpXXx8MH19Y29uc3QgVnQ9bmV3IEl0LFJ0PW5ldyBJdCxEdD1uZXcgSXQsRnQ9bmV3IEFycmF5KDIzMCksS3Q9e30sanQ9W10sVXQ9T2JqZWN0LmNyZWF0ZShudWxsKSxCdD1PYmplY3QuY3JlYXRlKG51bGwpLHF0PVtdLCR0PVtdO2ZvcihsZXQgZT0wO2U8PTE5MztlKyspcXRbZV09LTE7Zm9yKGxldCBlPTA7ZTw9MTI2O2UrKykkdFtlXT0tMTt7bGV0IGU9W10sdD1bXTtmb3IoY29uc3Qgc2Egb2ZbWzAsMSwwLCJOb25lIiwwLCJ1bmtub3duIiwwLCJWS19VTktOT1dOIiwiIiwiIl0sWzAsMSwxLCJIeXBlciIsMCwiIiwwLCIiLCIiLCIiXSxbMCwxLDIsIlN1cGVyIiwwLCIiLDAsIiIsIiIsIiJdLFswLDEsMywiRm4iLDAsIiIsMCwiIiwiIiwiIl0sWzAsMSw0LCJGbkxvY2siLDAsIiIsMCwiIiwiIiwiIl0sWzAsMSw1LCJTdXNwZW5kIiwwLCIiLDAsIiIsIiIsIiJdLFswLDEsNiwiUmVzdW1lIiwwLCIiLDAsIiIsIiIsIiJdLFswLDEsNywiVHVyYm8iLDAsIiIsMCwiIiwiIiwiIl0sWzAsMSw4LCJTbGVlcCIsMCwiIiwwLCJWS19TTEVFUCIsIiIsIiJdLFswLDEsOSwiV2FrZVVwIiwwLCIiLDAsIiIsIiIsIiJdLFszMSwwLDEwLCJLZXlBIiwzMSwiQSIsNjUsIlZLX0EiLCIiLCIiXSxbMzIsMCwxMSwiS2V5QiIsMzIsIkIiLDY2LCJWS19CIiwiIiwiIl0sWzMzLDAsMTIsIktleUMiLDMzLCJDIiw2NywiVktfQyIsIiIsIiJdLFszNCwwLDEzLCJLZXlEIiwzNCwiRCIsNjgsIlZLX0QiLCIiLCIiXSxbMzUsMCwxNCwiS2V5RSIsMzUsIkUiLDY5LCJWS19FIiwiIiwiIl0sWzM2LDAsMTUsIktleUYiLDM2LCJGIiw3MCwiVktfRiIsIiIsIiJdLFszNywwLDE2LCJLZXlHIiwzNywiRyIsNzEsIlZLX0ciLCIiLCIiXSxbMzgsMCwxNywiS2V5SCIsMzgsIkgiLDcyLCJWS19IIiwiIiwiIl0sWzM5LDAsMTgsIktleUkiLDM5LCJJIiw3MywiVktfSSIsIiIsIiJdLFs0MCwwLDE5LCJLZXlKIiw0MCwiSiIsNzQsIlZLX0oiLCIiLCIiXSxbNDEsMCwyMCwiS2V5SyIsNDEsIksiLDc1LCJWS19LIiwiIiwiIl0sWzQyLDAsMjEsIktleUwiLDQyLCJMIiw3NiwiVktfTCIsIiIsIiJdLFs0MywwLDIyLCJLZXlNIiw0MywiTSIsNzcsIlZLX00iLCIiLCIiXSxbNDQsMCwyMywiS2V5TiIsNDQsIk4iLDc4LCJWS19OIiwiIiwiIl0sWzQ1LDAsMjQsIktleU8iLDQ1LCJPIiw3OSwiVktfTyIsIiIsIiJdLFs0NiwwLDI1LCJLZXlQIiw0NiwiUCIsODAsIlZLX1AiLCIiLCIiXSxbNDcsMCwyNiwiS2V5USIsNDcsIlEiLDgxLCJWS19RIiwiIiwiIl0sWzQ4LDAsMjcsIktleVIiLDQ4LCJSIiw4MiwiVktfUiIsIiIsIiJdLFs0OSwwLDI4LCJLZXlTIiw0OSwiUyIsODMsIlZLX1MiLCIiLCIiXSxbNTAsMCwyOSwiS2V5VCIsNTAsIlQiLDg0LCJWS19UIiwiIiwiIl0sWzUxLDAsMzAsIktleVUiLDUxLCJVIiw4NSwiVktfVSIsIiIsIiJdLFs1MiwwLDMxLCJLZXlWIiw1MiwiViIsODYsIlZLX1YiLCIiLCIiXSxbNTMsMCwzMiwiS2V5VyIsNTMsIlciLDg3LCJWS19XIiwiIiwiIl0sWzU0LDAsMzMsIktleVgiLDU0LCJYIiw4OCwiVktfWCIsIiIsIiJdLFs1NSwwLDM0LCJLZXlZIiw1NSwiWSIsODksIlZLX1kiLCIiLCIiXSxbNTYsMCwzNSwiS2V5WiIsNTYsIloiLDkwLCJWS19aIiwiIiwiIl0sWzIyLDAsMzYsIkRpZ2l0MSIsMjIsIjEiLDQ5LCJWS18xIiwiIiwiIl0sWzIzLDAsMzcsIkRpZ2l0MiIsMjMsIjIiLDUwLCJWS18yIiwiIiwiIl0sWzI0LDAsMzgsIkRpZ2l0MyIsMjQsIjMiLDUxLCJWS18zIiwiIiwiIl0sWzI1LDAsMzksIkRpZ2l0NCIsMjUsIjQiLDUyLCJWS180IiwiIiwiIl0sWzI2LDAsNDAsIkRpZ2l0NSIsMjYsIjUiLDUzLCJWS181IiwiIiwiIl0sWzI3LDAsNDEsIkRpZ2l0NiIsMjcsIjYiLDU0LCJWS182IiwiIiwiIl0sWzI4LDAsNDIsIkRpZ2l0NyIsMjgsIjciLDU1LCJWS183IiwiIiwiIl0sWzI5LDAsNDMsIkRpZ2l0OCIsMjksIjgiLDU2LCJWS184IiwiIiwiIl0sWzMwLDAsNDQsIkRpZ2l0OSIsMzAsIjkiLDU3LCJWS185IiwiIiwiIl0sWzIxLDAsNDUsIkRpZ2l0MCIsMjEsIjAiLDQ4LCJWS18wIiwiIiwiIl0sWzMsMSw0NiwiRW50ZXIiLDMsIkVudGVyIiwxMywiVktfUkVUVVJOIiwiIiwiIl0sWzksMSw0NywiRXNjYXBlIiw5LCJFc2NhcGUiLDI3LCJWS19FU0NBUEUiLCIiLCIiXSxbMSwxLDQ4LCJCYWNrc3BhY2UiLDEsIkJhY2tzcGFjZSIsOCwiVktfQkFDSyIsIiIsIiJdLFsyLDEsNDksIlRhYiIsMiwiVGFiIiw5LCJWS19UQUIiLCIiLCIiXSxbMTAsMSw1MCwiU3BhY2UiLDEwLCJTcGFjZSIsMzIsIlZLX1NQQUNFIiwiIiwiIl0sWzgzLDAsNTEsIk1pbnVzIiw4MywiLSIsMTg5LCJWS19PRU1fTUlOVVMiLCItIiwiT0VNX01JTlVTIl0sWzgxLDAsNTIsIkVxdWFsIiw4MSwiPSIsMTg3LCJWS19PRU1fUExVUyIsIj0iLCJPRU1fUExVUyJdLFs4NywwLDUzLCJCcmFja2V0TGVmdCIsODcsIlsiLDIxOSwiVktfT0VNXzQiLCJbIiwiT0VNXzQiXSxbODksMCw1NCwiQnJhY2tldFJpZ2h0Iiw4OSwiXSIsMjIxLCJWS19PRU1fNiIsIl0iLCJPRU1fNiJdLFs4OCwwLDU1LCJCYWNrc2xhc2giLDg4LCJcXCIsMjIwLCJWS19PRU1fNSIsIlxcIiwiT0VNXzUiXSxbMCwwLDU2LCJJbnRsSGFzaCIsMCwiIiwwLCIiLCIiLCIiXSxbODAsMCw1NywiU2VtaWNvbG9uIiw4MCwiOyIsMTg2LCJWS19PRU1fMSIsIjsiLCJPRU1fMSJdLFs5MCwwLDU4LCJRdW90ZSIsOTAsIiciLDIyMiwiVktfT0VNXzciLCInIiwiT0VNXzciXSxbODYsMCw1OSwiQmFja3F1b3RlIiw4NiwiYCIsMTkyLCJWS19PRU1fMyIsImAiLCJPRU1fMyJdLFs4MiwwLDYwLCJDb21tYSIsODIsIiwiLDE4OCwiVktfT0VNX0NPTU1BIiwiLCIsIk9FTV9DT01NQSJdLFs4NCwwLDYxLCJQZXJpb2QiLDg0LCIuIiwxOTAsIlZLX09FTV9QRVJJT0QiLCIuIiwiT0VNX1BFUklPRCJdLFs4NSwwLDYyLCJTbGFzaCIsODUsIi8iLDE5MSwiVktfT0VNXzIiLCIvIiwiT0VNXzIiXSxbOCwxLDYzLCJDYXBzTG9jayIsOCwiQ2Fwc0xvY2siLDIwLCJWS19DQVBJVEFMIiwiIiwiIl0sWzU5LDEsNjQsIkYxIiw1OSwiRjEiLDExMiwiVktfRjEiLCIiLCIiXSxbNjAsMSw2NSwiRjIiLDYwLCJGMiIsMTEzLCJWS19GMiIsIiIsIiJdLFs2MSwxLDY2LCJGMyIsNjEsIkYzIiwxMTQsIlZLX0YzIiwiIiwiIl0sWzYyLDEsNjcsIkY0Iiw2MiwiRjQiLDExNSwiVktfRjQiLCIiLCIiXSxbNjMsMSw2OCwiRjUiLDYzLCJGNSIsMTE2LCJWS19GNSIsIiIsIiJdLFs2NCwxLDY5LCJGNiIsNjQsIkY2IiwxMTcsIlZLX0Y2IiwiIiwiIl0sWzY1LDEsNzAsIkY3Iiw2NSwiRjciLDExOCwiVktfRjciLCIiLCIiXSxbNjYsMSw3MSwiRjgiLDY2LCJGOCIsMTE5LCJWS19GOCIsIiIsIiJdLFs2NywxLDcyLCJGOSIsNjcsIkY5IiwxMjAsIlZLX0Y5IiwiIiwiIl0sWzY4LDEsNzMsIkYxMCIsNjgsIkYxMCIsMTIxLCJWS19GMTAiLCIiLCIiXSxbNjksMSw3NCwiRjExIiw2OSwiRjExIiwxMjIsIlZLX0YxMSIsIiIsIiJdLFs3MCwxLDc1LCJGMTIiLDcwLCJGMTIiLDEyMywiVktfRjEyIiwiIiwiIl0sWzAsMSw3NiwiUHJpbnRTY3JlZW4iLDAsIiIsMCwiIiwiIiwiIl0sWzc5LDEsNzcsIlNjcm9sbExvY2siLDc5LCJTY3JvbGxMb2NrIiwxNDUsIlZLX1NDUk9MTCIsIiIsIiJdLFs3LDEsNzgsIlBhdXNlIiw3LCJQYXVzZUJyZWFrIiwxOSwiVktfUEFVU0UiLCIiLCIiXSxbMTksMSw3OSwiSW5zZXJ0IiwxOSwiSW5zZXJ0Iiw0NSwiVktfSU5TRVJUIiwiIiwiIl0sWzE0LDEsODAsIkhvbWUiLDE0LCJIb21lIiwzNiwiVktfSE9NRSIsIiIsIiJdLFsxMSwxLDgxLCJQYWdlVXAiLDExLCJQYWdlVXAiLDMzLCJWS19QUklPUiIsIiIsIiJdLFsyMCwxLDgyLCJEZWxldGUiLDIwLCJEZWxldGUiLDQ2LCJWS19ERUxFVEUiLCIiLCIiXSxbMTMsMSw4MywiRW5kIiwxMywiRW5kIiwzNSwiVktfRU5EIiwiIiwiIl0sWzEyLDEsODQsIlBhZ2VEb3duIiwxMiwiUGFnZURvd24iLDM0LCJWS19ORVhUIiwiIiwiIl0sWzE3LDEsODUsIkFycm93UmlnaHQiLDE3LCJSaWdodEFycm93IiwzOSwiVktfUklHSFQiLCJSaWdodCIsIiJdLFsxNSwxLDg2LCJBcnJvd0xlZnQiLDE1LCJMZWZ0QXJyb3ciLDM3LCJWS19MRUZUIiwiTGVmdCIsIiJdLFsxOCwxLDg3LCJBcnJvd0Rvd24iLDE4LCJEb3duQXJyb3ciLDQwLCJWS19ET1dOIiwiRG93biIsIiJdLFsxNiwxLDg4LCJBcnJvd1VwIiwxNiwiVXBBcnJvdyIsMzgsIlZLX1VQIiwiVXAiLCIiXSxbNzgsMSw4OSwiTnVtTG9jayIsNzgsIk51bUxvY2siLDE0NCwiVktfTlVNTE9DSyIsIiIsIiJdLFsxMDgsMSw5MCwiTnVtcGFkRGl2aWRlIiwxMDgsIk51bVBhZF9EaXZpZGUiLDExMSwiVktfRElWSURFIiwiIiwiIl0sWzEwMywxLDkxLCJOdW1wYWRNdWx0aXBseSIsMTAzLCJOdW1QYWRfTXVsdGlwbHkiLDEwNiwiVktfTVVMVElQTFkiLCIiLCIiXSxbMTA2LDEsOTIsIk51bXBhZFN1YnRyYWN0IiwxMDYsIk51bVBhZF9TdWJ0cmFjdCIsMTA5LCJWS19TVUJUUkFDVCIsIiIsIiJdLFsxMDQsMSw5MywiTnVtcGFkQWRkIiwxMDQsIk51bVBhZF9BZGQiLDEwNywiVktfQUREIiwiIiwiIl0sWzMsMSw5NCwiTnVtcGFkRW50ZXIiLDMsIiIsMCwiIiwiIiwiIl0sWzk0LDEsOTUsIk51bXBhZDEiLDk0LCJOdW1QYWQxIiw5NywiVktfTlVNUEFEMSIsIiIsIiJdLFs5NSwxLDk2LCJOdW1wYWQyIiw5NSwiTnVtUGFkMiIsOTgsIlZLX05VTVBBRDIiLCIiLCIiXSxbOTYsMSw5NywiTnVtcGFkMyIsOTYsIk51bVBhZDMiLDk5LCJWS19OVU1QQUQzIiwiIiwiIl0sWzk3LDEsOTgsIk51bXBhZDQiLDk3LCJOdW1QYWQ0IiwxMDAsIlZLX05VTVBBRDQiLCIiLCIiXSxbOTgsMSw5OSwiTnVtcGFkNSIsOTgsIk51bVBhZDUiLDEwMSwiVktfTlVNUEFENSIsIiIsIiJdLFs5OSwxLDEwMCwiTnVtcGFkNiIsOTksIk51bVBhZDYiLDEwMiwiVktfTlVNUEFENiIsIiIsIiJdLFsxMDAsMSwxMDEsIk51bXBhZDciLDEwMCwiTnVtUGFkNyIsMTAzLCJWS19OVU1QQUQ3IiwiIiwiIl0sWzEwMSwxLDEwMiwiTnVtcGFkOCIsMTAxLCJOdW1QYWQ4IiwxMDQsIlZLX05VTVBBRDgiLCIiLCIiXSxbMTAyLDEsMTAzLCJOdW1wYWQ5IiwxMDIsIk51bVBhZDkiLDEwNSwiVktfTlVNUEFEOSIsIiIsIiJdLFs5MywxLDEwNCwiTnVtcGFkMCIsOTMsIk51bVBhZDAiLDk2LCJWS19OVU1QQUQwIiwiIiwiIl0sWzEwNywxLDEwNSwiTnVtcGFkRGVjaW1hbCIsMTA3LCJOdW1QYWRfRGVjaW1hbCIsMTEwLCJWS19ERUNJTUFMIiwiIiwiIl0sWzkyLDAsMTA2LCJJbnRsQmFja3NsYXNoIiw5MiwiT0VNXzEwMiIsMjI2LCJWS19PRU1fMTAyIiwiIiwiIl0sWzU4LDEsMTA3LCJDb250ZXh0TWVudSIsNTgsIkNvbnRleHRNZW51Iiw5MywiIiwiIiwiIl0sWzAsMSwxMDgsIlBvd2VyIiwwLCIiLDAsIiIsIiIsIiJdLFswLDEsMTA5LCJOdW1wYWRFcXVhbCIsMCwiIiwwLCIiLCIiLCIiXSxbNzEsMSwxMTAsIkYxMyIsNzEsIkYxMyIsMTI0LCJWS19GMTMiLCIiLCIiXSxbNzIsMSwxMTEsIkYxNCIsNzIsIkYxNCIsMTI1LCJWS19GMTQiLCIiLCIiXSxbNzMsMSwxMTIsIkYxNSIsNzMsIkYxNSIsMTI2LCJWS19GMTUiLCIiLCIiXSxbNzQsMSwxMTMsIkYxNiIsNzQsIkYxNiIsMTI3LCJWS19GMTYiLCIiLCIiXSxbNzUsMSwxMTQsIkYxNyIsNzUsIkYxNyIsMTI4LCJWS19GMTciLCIiLCIiXSxbNzYsMSwxMTUsIkYxOCIsNzYsIkYxOCIsMTI5LCJWS19GMTgiLCIiLCIiXSxbNzcsMSwxMTYsIkYxOSIsNzcsIkYxOSIsMTMwLCJWS19GMTkiLCIiLCIiXSxbMCwxLDExNywiRjIwIiwwLCIiLDAsIlZLX0YyMCIsIiIsIiJdLFswLDEsMTE4LCJGMjEiLDAsIiIsMCwiVktfRjIxIiwiIiwiIl0sWzAsMSwxMTksIkYyMiIsMCwiIiwwLCJWS19GMjIiLCIiLCIiXSxbMCwxLDEyMCwiRjIzIiwwLCIiLDAsIlZLX0YyMyIsIiIsIiJdLFswLDEsMTIxLCJGMjQiLDAsIiIsMCwiVktfRjI0IiwiIiwiIl0sWzAsMSwxMjIsIk9wZW4iLDAsIiIsMCwiIiwiIiwiIl0sWzAsMSwxMjMsIkhlbHAiLDAsIiIsMCwiIiwiIiwiIl0sWzAsMSwxMjQsIlNlbGVjdCIsMCwiIiwwLCIiLCIiLCIiXSxbMCwxLDEyNSwiQWdhaW4iLDAsIiIsMCwiIiwiIiwiIl0sWzAsMSwxMjYsIlVuZG8iLDAsIiIsMCwiIiwiIiwiIl0sWzAsMSwxMjcsIkN1dCIsMCwiIiwwLCIiLCIiLCIiXSxbMCwxLDEyOCwiQ29weSIsMCwiIiwwLCIiLCIiLCIiXSxbMCwxLDEyOSwiUGFzdGUiLDAsIiIsMCwiIiwiIiwiIl0sWzAsMSwxMzAsIkZpbmQiLDAsIiIsMCwiIiwiIiwiIl0sWzAsMSwxMzEsIkF1ZGlvVm9sdW1lTXV0ZSIsMTEyLCJBdWRpb1ZvbHVtZU11dGUiLDE3MywiVktfVk9MVU1FX01VVEUiLCIiLCIiXSxbMCwxLDEzMiwiQXVkaW9Wb2x1bWVVcCIsMTEzLCJBdWRpb1ZvbHVtZVVwIiwxNzUsIlZLX1ZPTFVNRV9VUCIsIiIsIiJdLFswLDEsMTMzLCJBdWRpb1ZvbHVtZURvd24iLDExNCwiQXVkaW9Wb2x1bWVEb3duIiwxNzQsIlZLX1ZPTFVNRV9ET1dOIiwiIiwiIl0sWzEwNSwxLDEzNCwiTnVtcGFkQ29tbWEiLDEwNSwiTnVtUGFkX1NlcGFyYXRvciIsMTA4LCJWS19TRVBBUkFUT1IiLCIiLCIiXSxbMTEwLDAsMTM1LCJJbnRsUm8iLDExMCwiQUJOVF9DMSIsMTkzLCJWS19BQk5UX0MxIiwiIiwiIl0sWzAsMSwxMzYsIkthbmFNb2RlIiwwLCIiLDAsIiIsIiIsIiJdLFswLDAsMTM3LCJJbnRsWWVuIiwwLCIiLDAsIiIsIiIsIiJdLFswLDEsMTM4LCJDb252ZXJ0IiwwLCIiLDAsIiIsIiIsIiJdLFswLDEsMTM5LCJOb25Db252ZXJ0IiwwLCIiLDAsIiIsIiIsIiJdLFswLDEsMTQwLCJMYW5nMSIsMCwiIiwwLCIiLCIiLCIiXSxbMCwxLDE0MSwiTGFuZzIiLDAsIiIsMCwiIiwiIiwiIl0sWzAsMSwxNDIsIkxhbmczIiwwLCIiLDAsIiIsIiIsIiJdLFswLDEsMTQzLCJMYW5nNCIsMCwiIiwwLCIiLCIiLCIiXSxbMCwxLDE0NCwiTGFuZzUiLDAsIiIsMCwiIiwiIiwiIl0sWzAsMSwxNDUsIkFib3J0IiwwLCIiLDAsIiIsIiIsIiJdLFswLDEsMTQ2LCJQcm9wcyIsMCwiIiwwLCIiLCIiLCIiXSxbMCwxLDE0NywiTnVtcGFkUGFyZW5MZWZ0IiwwLCIiLDAsIiIsIiIsIiJdLFswLDEsMTQ4LCJOdW1wYWRQYXJlblJpZ2h0IiwwLCIiLDAsIiIsIiIsIiJdLFswLDEsMTQ5LCJOdW1wYWRCYWNrc3BhY2UiLDAsIiIsMCwiIiwiIiwiIl0sWzAsMSwxNTAsIk51bXBhZE1lbW9yeVN0b3JlIiwwLCIiLDAsIiIsIiIsIiJdLFswLDEsMTUxLCJOdW1wYWRNZW1vcnlSZWNhbGwiLDAsIiIsMCwiIiwiIiwiIl0sWzAsMSwxNTIsIk51bXBhZE1lbW9yeUNsZWFyIiwwLCIiLDAsIiIsIiIsIiJdLFswLDEsMTUzLCJOdW1wYWRNZW1vcnlBZGQiLDAsIiIsMCwiIiwiIiwiIl0sWzAsMSwxNTQsIk51bXBhZE1lbW9yeVN1YnRyYWN0IiwwLCIiLDAsIiIsIiIsIiJdLFswLDEsMTU1LCJOdW1wYWRDbGVhciIsMCwiIiwwLCIiLCIiLCIiXSxbMCwxLDE1NiwiTnVtcGFkQ2xlYXJFbnRyeSIsMCwiIiwwLCIiLCIiLCIiXSxbNSwxLDAsIiIsNSwiQ3RybCIsMTcsIlZLX0NPTlRST0wiLCIiLCIiXSxbNCwxLDAsIiIsNCwiU2hpZnQiLDE2LCJWS19TSElGVCIsIiIsIiJdLFs2LDEsMCwiIiw2LCJBbHQiLDE4LCJWS19NRU5VIiwiIiwiIl0sWzU3LDEsMCwiIiw1NywiTWV0YSIsMCwiVktfQ09NTUFORCIsIiIsIiJdLFs1LDEsMTU3LCJDb250cm9sTGVmdCIsNSwiIiwwLCJWS19MQ09OVFJPTCIsIiIsIiJdLFs0LDEsMTU4LCJTaGlmdExlZnQiLDQsIiIsMCwiVktfTFNISUZUIiwiIiwiIl0sWzYsMSwxNTksIkFsdExlZnQiLDYsIiIsMCwiVktfTE1FTlUiLCIiLCIiXSxbNTcsMSwxNjAsIk1ldGFMZWZ0Iiw1NywiIiwwLCJWS19MV0lOIiwiIiwiIl0sWzUsMSwxNjEsIkNvbnRyb2xSaWdodCIsNSwiIiwwLCJWS19SQ09OVFJPTCIsIiIsIiJdLFs0LDEsMTYyLCJTaGlmdFJpZ2h0Iiw0LCIiLDAsIlZLX1JTSElGVCIsIiIsIiJdLFs2LDEsMTYzLCJBbHRSaWdodCIsNiwiIiwwLCJWS19STUVOVSIsIiIsIiJdLFs1NywxLDE2NCwiTWV0YVJpZ2h0Iiw1NywiIiwwLCJWS19SV0lOIiwiIiwiIl0sWzAsMSwxNjUsIkJyaWdodG5lc3NVcCIsMCwiIiwwLCIiLCIiLCIiXSxbMCwxLDE2NiwiQnJpZ2h0bmVzc0Rvd24iLDAsIiIsMCwiIiwiIiwiIl0sWzAsMSwxNjcsIk1lZGlhUGxheSIsMCwiIiwwLCIiLCIiLCIiXSxbMCwxLDE2OCwiTWVkaWFSZWNvcmQiLDAsIiIsMCwiIiwiIiwiIl0sWzAsMSwxNjksIk1lZGlhRmFzdEZvcndhcmQiLDAsIiIsMCwiIiwiIiwiIl0sWzAsMSwxNzAsIk1lZGlhUmV3aW5kIiwwLCIiLDAsIiIsIiIsIiJdLFsxMTQsMSwxNzEsIk1lZGlhVHJhY2tOZXh0IiwxMTksIk1lZGlhVHJhY2tOZXh0IiwxNzYsIlZLX01FRElBX05FWFRfVFJBQ0siLCIiLCIiXSxbMTE1LDEsMTcyLCJNZWRpYVRyYWNrUHJldmlvdXMiLDEyMCwiTWVkaWFUcmFja1ByZXZpb3VzIiwxNzcsIlZLX01FRElBX1BSRVZfVFJBQ0siLCIiLCIiXSxbMTE2LDEsMTczLCJNZWRpYVN0b3AiLDEyMSwiTWVkaWFTdG9wIiwxNzgsIlZLX01FRElBX1NUT1AiLCIiLCIiXSxbMCwxLDE3NCwiRWplY3QiLDAsIiIsMCwiIiwiIiwiIl0sWzExNywxLDE3NSwiTWVkaWFQbGF5UGF1c2UiLDEyMiwiTWVkaWFQbGF5UGF1c2UiLDE3OSwiVktfTUVESUFfUExBWV9QQVVTRSIsIiIsIiJdLFswLDEsMTc2LCJNZWRpYVNlbGVjdCIsMTIzLCJMYXVuY2hNZWRpYVBsYXllciIsMTgxLCJWS19NRURJQV9MQVVOQ0hfTUVESUFfU0VMRUNUIiwiIiwiIl0sWzAsMSwxNzcsIkxhdW5jaE1haWwiLDEyNCwiTGF1bmNoTWFpbCIsMTgwLCJWS19NRURJQV9MQVVOQ0hfTUFJTCIsIiIsIiJdLFswLDEsMTc4LCJMYXVuY2hBcHAyIiwxMjUsIkxhdW5jaEFwcDIiLDE4MywiVktfTUVESUFfTEFVTkNIX0FQUDIiLCIiLCIiXSxbMCwxLDE3OSwiTGF1bmNoQXBwMSIsMCwiIiwwLCJWS19NRURJQV9MQVVOQ0hfQVBQMSIsIiIsIiJdLFswLDEsMTgwLCJTZWxlY3RUYXNrIiwwLCIiLDAsIiIsIiIsIiJdLFswLDEsMTgxLCJMYXVuY2hTY3JlZW5TYXZlciIsMCwiIiwwLCIiLCIiLCIiXSxbMCwxLDE4MiwiQnJvd3NlclNlYXJjaCIsMTE1LCJCcm93c2VyU2VhcmNoIiwxNzAsIlZLX0JST1dTRVJfU0VBUkNIIiwiIiwiIl0sWzAsMSwxODMsIkJyb3dzZXJIb21lIiwxMTYsIkJyb3dzZXJIb21lIiwxNzIsIlZLX0JST1dTRVJfSE9NRSIsIiIsIiJdLFsxMTIsMSwxODQsIkJyb3dzZXJCYWNrIiwxMTcsIkJyb3dzZXJCYWNrIiwxNjYsIlZLX0JST1dTRVJfQkFDSyIsIiIsIiJdLFsxMTMsMSwxODUsIkJyb3dzZXJGb3J3YXJkIiwxMTgsIkJyb3dzZXJGb3J3YXJkIiwxNjcsIlZLX0JST1dTRVJfRk9SV0FSRCIsIiIsIiJdLFswLDEsMTg2LCJCcm93c2VyU3RvcCIsMCwiIiwwLCJWS19CUk9XU0VSX1NUT1AiLCIiLCIiXSxbMCwxLDE4NywiQnJvd3NlclJlZnJlc2giLDAsIiIsMCwiVktfQlJPV1NFUl9SRUZSRVNIIiwiIiwiIl0sWzAsMSwxODgsIkJyb3dzZXJGYXZvcml0ZXMiLDAsIiIsMCwiVktfQlJPV1NFUl9GQVZPUklURVMiLCIiLCIiXSxbMCwxLDE4OSwiWm9vbVRvZ2dsZSIsMCwiIiwwLCIiLCIiLCIiXSxbMCwxLDE5MCwiTWFpbFJlcGx5IiwwLCIiLDAsIiIsIiIsIiJdLFswLDEsMTkxLCJNYWlsRm9yd2FyZCIsMCwiIiwwLCIiLCIiLCIiXSxbMCwxLDE5MiwiTWFpbFNlbmQiLDAsIiIsMCwiIiwiIiwiIl0sWzEwOSwxLDAsIiIsMTA5LCJLZXlJbkNvbXBvc2l0aW9uIiwyMjksIiIsIiIsIiJdLFsxMTEsMSwwLCIiLDExMSwiQUJOVF9DMiIsMTk0LCJWS19BQk5UX0MyIiwiIiwiIl0sWzkxLDEsMCwiIiw5MSwiT0VNXzgiLDIyMywiVktfT0VNXzgiLCIiLCIiXSxbMCwxLDAsIiIsMCwiIiwwLCJWS19DTEVBUiIsIiIsIiJdLFswLDEsMCwiIiwwLCIiLDAsIlZLX0tBTkEiLCIiLCIiXSxbMCwxLDAsIiIsMCwiIiwwLCJWS19IQU5HVUwiLCIiLCIiXSxbMCwxLDAsIiIsMCwiIiwwLCJWS19KVU5KQSIsIiIsIiJdLFswLDEsMCwiIiwwLCIiLDAsIlZLX0ZJTkFMIiwiIiwiIl0sWzAsMSwwLCIiLDAsIiIsMCwiVktfSEFOSkEiLCIiLCIiXSxbMCwxLDAsIiIsMCwiIiwwLCJWS19LQU5KSSIsIiIsIiJdLFswLDEsMCwiIiwwLCIiLDAsIlZLX0NPTlZFUlQiLCIiLCIiXSxbMCwxLDAsIiIsMCwiIiwwLCJWS19OT05DT05WRVJUIiwiIiwiIl0sWzAsMSwwLCIiLDAsIiIsMCwiVktfQUNDRVBUIiwiIiwiIl0sWzAsMSwwLCIiLDAsIiIsMCwiVktfTU9ERUNIQU5HRSIsIiIsIiJdLFswLDEsMCwiIiwwLCIiLDAsIlZLX1NFTEVDVCIsIiIsIiJdLFswLDEsMCwiIiwwLCIiLDAsIlZLX1BSSU5UIiwiIiwiIl0sWzAsMSwwLCIiLDAsIiIsMCwiVktfRVhFQ1VURSIsIiIsIiJdLFswLDEsMCwiIiwwLCIiLDAsIlZLX1NOQVBTSE9UIiwiIiwiIl0sWzAsMSwwLCIiLDAsIiIsMCwiVktfSEVMUCIsIiIsIiJdLFswLDEsMCwiIiwwLCIiLDAsIlZLX0FQUFMiLCIiLCIiXSxbMCwxLDAsIiIsMCwiIiwwLCJWS19QUk9DRVNTS0VZIiwiIiwiIl0sWzAsMSwwLCIiLDAsIiIsMCwiVktfUEFDS0VUIiwiIiwiIl0sWzAsMSwwLCIiLDAsIiIsMCwiVktfREJFX1NCQ1NDSEFSIiwiIiwiIl0sWzAsMSwwLCIiLDAsIiIsMCwiVktfREJFX0RCQ1NDSEFSIiwiIiwiIl0sWzAsMSwwLCIiLDAsIiIsMCwiVktfQVRUTiIsIiIsIiJdLFswLDEsMCwiIiwwLCIiLDAsIlZLX0NSU0VMIiwiIiwiIl0sWzAsMSwwLCIiLDAsIiIsMCwiVktfRVhTRUwiLCIiLCIiXSxbMCwxLDAsIiIsMCwiIiwwLCJWS19FUkVPRiIsIiIsIiJdLFswLDEsMCwiIiwwLCIiLDAsIlZLX1BMQVkiLCIiLCIiXSxbMCwxLDAsIiIsMCwiIiwwLCJWS19aT09NIiwiIiwiIl0sWzAsMSwwLCIiLDAsIiIsMCwiVktfTk9OQU1FIiwiIiwiIl0sWzAsMSwwLCIiLDAsIiIsMCwiVktfUEExIiwiIiwiIl0sWzAsMSwwLCIiLDAsIiIsMCwiVktfT0VNX0NMRUFSIiwiIiwiIl1dKXtjb25zdFssbGEsY2EsdWEsaGEsZmEsZGEsbWEsZ2EscGFdPXNhO2lmKHRbY2FdfHwodFtjYV09ITAsanRbY2FdPXVhLFV0W3VhXT1jYSxCdFt1YS50b0xvd2VyQ2FzZSgpXT1jYSxsYSYmMCE9PShxdFtjYV09aGEpJiYzIT09aGEmJjUhPT1oYSYmNCE9PWhhJiY2IT09aGEmJjU3IT09aGEmJigkdFtoYV09Y2EpKSwhZVtoYV0pe2lmKGVbaGFdPSEwLCFmYSl0aHJvdyBuZXcgRXJyb3IoYFN0cmluZyByZXByZXNlbnRhdGlvbiBtaXNzaW5nIGZvciBrZXkgY29kZSAke2hhfSBhcm91bmQgc2NhbiBjb2RlIGArdWEpO1Z0LmRlZmluZShoYSxmYSksUnQuZGVmaW5lKGhhLGdhfHxmYSksRHQuZGVmaW5lKGhhLHBhfHxnYXx8ZmEpfWRhJiYoRnRbZGFdPWhhKSxtYSYmKEt0W21hXT1oYSl9JHRbM109NDZ9Y2xhc3MgV3QgZXh0ZW5kcyBzdHtjb25zdHJ1Y3RvcihlLHQscixuKXtzdXBlcihlLHQscixuKSx0aGlzLnNlbGVjdGlvblN0YXJ0TGluZU51bWJlcj1lLHRoaXMuc2VsZWN0aW9uU3RhcnRDb2x1bW49dCx0aGlzLnBvc2l0aW9uTGluZU51bWJlcj1yLHRoaXMucG9zaXRpb25Db2x1bW49bn10b1N0cmluZygpe3JldHVybiJbIit0aGlzLnNlbGVjdGlvblN0YXJ0TGluZU51bWJlcisiLCIrdGhpcy5zZWxlY3Rpb25TdGFydENvbHVtbisiIC0+ICIrdGhpcy5wb3NpdGlvbkxpbmVOdW1iZXIrIiwiK3RoaXMucG9zaXRpb25Db2x1bW4rIl0ifWVxdWFsc1NlbGVjdGlvbihlKXtyZXR1cm4gV3Quc2VsZWN0aW9uc0VxdWFsKHRoaXMsZSl9c3RhdGljIHNlbGVjdGlvbnNFcXVhbChlLHQpe3JldHVybiBlLnNlbGVjdGlvblN0YXJ0TGluZU51bWJlcj09PXQuc2VsZWN0aW9uU3RhcnRMaW5lTnVtYmVyJiZlLnNlbGVjdGlvblN0YXJ0Q29sdW1uPT09dC5zZWxlY3Rpb25TdGFydENvbHVtbiYmZS5wb3NpdGlvbkxpbmVOdW1iZXI9PT10LnBvc2l0aW9uTGluZU51bWJlciYmZS5wb3NpdGlvbkNvbHVtbj09PXQucG9zaXRpb25Db2x1bW59Z2V0RGlyZWN0aW9uKCl7cmV0dXJuIHRoaXMuc2VsZWN0aW9uU3RhcnRMaW5lTnVtYmVyPT09dGhpcy5zdGFydExpbmVOdW1iZXImJnRoaXMuc2VsZWN0aW9uU3RhcnRDb2x1bW49PT10aGlzLnN0YXJ0Q29sdW1uPzA6MX1zZXRFbmRQb3NpdGlvbihlLHQpe3JldHVybiAwPT09dGhpcy5nZXREaXJlY3Rpb24oKT9uZXcgV3QodGhpcy5zdGFydExpbmVOdW1iZXIsdGhpcy5zdGFydENvbHVtbixlLHQpOm5ldyBXdChlLHQsdGhpcy5zdGFydExpbmVOdW1iZXIsdGhpcy5zdGFydENvbHVtbil9Z2V0UG9zaXRpb24oKXtyZXR1cm4gbmV3IGF0KHRoaXMucG9zaXRpb25MaW5lTnVtYmVyLHRoaXMucG9zaXRpb25Db2x1bW4pfWdldFNlbGVjdGlvblN0YXJ0KCl7cmV0dXJuIG5ldyBhdCh0aGlzLnNlbGVjdGlvblN0YXJ0TGluZU51bWJlcix0aGlzLnNlbGVjdGlvblN0YXJ0Q29sdW1uKX1zZXRTdGFydFBvc2l0aW9uKGUsdCl7cmV0dXJuIDA9PT10aGlzLmdldERpcmVjdGlvbigpP25ldyBXdChlLHQsdGhpcy5lbmRMaW5lTnVtYmVyLHRoaXMuZW5kQ29sdW1uKTpuZXcgV3QodGhpcy5lbmRMaW5lTnVtYmVyLHRoaXMuZW5kQ29sdW1uLGUsdCl9c3RhdGljIGZyb21Qb3NpdGlvbnMoZSx0PWUpe3JldHVybiBuZXcgV3QoZS5saW5lTnVtYmVyLGUuY29sdW1uLHQubGluZU51bWJlcix0LmNvbHVtbil9c3RhdGljIGZyb21SYW5nZShlLHQpe3JldHVybiAwPT09dD9uZXcgV3QoZS5zdGFydExpbmVOdW1iZXIsZS5zdGFydENvbHVtbixlLmVuZExpbmVOdW1iZXIsZS5lbmRDb2x1bW4pOm5ldyBXdChlLmVuZExpbmVOdW1iZXIsZS5lbmRDb2x1bW4sZS5zdGFydExpbmVOdW1iZXIsZS5zdGFydENvbHVtbil9c3RhdGljIGxpZnRTZWxlY3Rpb24oZSl7cmV0dXJuIG5ldyBXdChlLnNlbGVjdGlvblN0YXJ0TGluZU51bWJlcixlLnNlbGVjdGlvblN0YXJ0Q29sdW1uLGUucG9zaXRpb25MaW5lTnVtYmVyLGUucG9zaXRpb25Db2x1bW4pfXN0YXRpYyBzZWxlY3Rpb25zQXJyRXF1YWwocixuKXtpZihyJiYhbnx8IXImJm4pcmV0dXJuITE7aWYoIXImJiFuKXJldHVybiEwO2lmKHIubGVuZ3RoIT09bi5sZW5ndGgpcmV0dXJuITE7Zm9yKGxldCBlPTAsdD1yLmxlbmd0aDtlPHQ7ZSsrKWlmKCF0aGlzLnNlbGVjdGlvbnNFcXVhbChyW2VdLG5bZV0pKXJldHVybiExO3JldHVybiEwfXN0YXRpYyBpc0lTZWxlY3Rpb24oZSl7cmV0dXJuIGUmJiJudW1iZXIiPT10eXBlb2YgZS5zZWxlY3Rpb25TdGFydExpbmVOdW1iZXImJiJudW1iZXIiPT10eXBlb2YgZS5zZWxlY3Rpb25TdGFydENvbHVtbiYmIm51bWJlciI9PXR5cGVvZiBlLnBvc2l0aW9uTGluZU51bWJlciYmIm51bWJlciI9PXR5cGVvZiBlLnBvc2l0aW9uQ29sdW1ufXN0YXRpYyBjcmVhdGVXaXRoRGlyZWN0aW9uKGUsdCxyLG4saSl7cmV0dXJuIDA9PT1pP25ldyBXdChlLHQscixuKTpuZXcgV3QocixuLGUsdCl9fXZhciBIdCx6dD1mdW5jdGlvbihlLGEscyxsKXtyZXR1cm4gbmV3KHM9c3x8UHJvbWlzZSkoZnVuY3Rpb24ocix0KXtmdW5jdGlvbiBuKGUpe3RyeXtvKGwubmV4dChlKSl9Y2F0Y2goZSl7dChlKX19ZnVuY3Rpb24gaShlKXt0cnl7byhsLnRocm93KGUpKX1jYXRjaChlKXt0KGUpfX1mdW5jdGlvbiBvKGUpe3ZhciB0O2UuZG9uZT9yKGUudmFsdWUpOigodD1lLnZhbHVlKWluc3RhbmNlb2Ygcz90Om5ldyBzKGZ1bmN0aW9uKGUpe2UodCl9KSkudGhlbihuLGkpfW8oKGw9bC5hcHBseShlLGF8fFtdKSkubmV4dCgpKX0pfSxKdD1mdW5jdGlvbihhKXtpZighU3ltYm9sLmFzeW5jSXRlcmF0b3IpdGhyb3cgbmV3IFR5cGVFcnJvcigiU3ltYm9sLmFzeW5jSXRlcmF0b3IgaXMgbm90IGRlZmluZWQuIik7dmFyIGUsdD1hW1N5bWJvbC5hc3luY0l0ZXJhdG9yXTtyZXR1cm4gdD90LmNhbGwoYSk6KGE9ImZ1bmN0aW9uIj09dHlwZW9mIF9fdmFsdWVzP19fdmFsdWVzKGEpOmFbU3ltYm9sLml0ZXJhdG9yXSgpLGU9e30scigibmV4dCIpLHIoInRocm93IikscigicmV0dXJuIiksZVtTeW1ib2wuYXN5bmNJdGVyYXRvcl09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30sZSk7ZnVuY3Rpb24gcihvKXtlW29dPWFbb10mJmZ1bmN0aW9uKGkpe3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihlLHQpe3ZhciByLG47aT1hW29dKGkpLHI9ZSxlPXQsbj1pLmRvbmUsdD1pLnZhbHVlLFByb21pc2UucmVzb2x2ZSh0KS50aGVuKGZ1bmN0aW9uKGUpe3Ioe3ZhbHVlOmUsZG9uZTpufSl9LGUpfSl9fX07Y2xhc3MgR3R7Y29uc3RydWN0b3IodCl7dGhpcy5fc3RhdGU9MCx0aGlzLl9yZXN1bHRzPVtdLHRoaXMuX2Vycm9yPW51bGwsdGhpcy5fb25TdGF0ZUNoYW5nZWQ9bmV3IFgscXVldWVNaWNyb3Rhc2soKCk9Pnp0KHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtjb25zdCBlPXtlbWl0T25lOmU9PnRoaXMuZW1pdE9uZShlKSxlbWl0TWFueTplPT50aGlzLmVtaXRNYW55KGUpLHJlamVjdDplPT50aGlzLnJlamVjdChlKX07dHJ5e3lpZWxkIFByb21pc2UucmVzb2x2ZSh0KGUpKSx0aGlzLnJlc29sdmUoKX1jYXRjaChlKXt0aGlzLnJlamVjdChlKX1maW5hbGx5e2UuZW1pdE9uZT12b2lkIDAsZS5lbWl0TWFueT12b2lkIDAsZS5yZWplY3Q9dm9pZCAwfX0pKX1zdGF0aWMgZnJvbUFycmF5KHQpe3JldHVybiBuZXcgR3QoZT0+e2UuZW1pdE1hbnkodCl9KX1zdGF0aWMgZnJvbVByb21pc2UodCl7cmV0dXJuIG5ldyBHdChlPT56dCh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7ZS5lbWl0TWFueSh5aWVsZCB0KX0pKX1zdGF0aWMgZnJvbVByb21pc2VzKGUpe3JldHVybiBuZXcgR3QodD0+enQodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3lpZWxkIFByb21pc2UuYWxsKGUubWFwKGU9Pnp0KHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtyZXR1cm4gdC5lbWl0T25lKHlpZWxkIGUpfSkpKX0pKX1zdGF0aWMgbWVyZ2UoZSl7cmV0dXJuIG5ldyBHdChhPT56dCh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7eWllbGQgUHJvbWlzZS5hbGwoZS5tYXAobj0+e3ZhciBpLG87cmV0dXJuIHp0KHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXt2YXIgdCxlO3RyeXtmb3IoaT1KdChuKTshKG89eWllbGQgaS5uZXh0KCkpLmRvbmU7KXt2YXIgcj1vLnZhbHVlO2EuZW1pdE9uZShyKX19Y2F0Y2goZSl7dD17ZXJyb3I6ZX19ZmluYWxseXt0cnl7byYmIW8uZG9uZSYmKGU9aS5yZXR1cm4pJiYoeWllbGQgZS5jYWxsKGkpKX1maW5hbGx5e2lmKHQpdGhyb3cgdC5lcnJvcn19fSl9KSl9KSl9W1N5bWJvbC5hc3luY0l0ZXJhdG9yXSgpe2xldCBlPTA7cmV0dXJue25leHQ6KCk9Pnp0KHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtmb3IoOzspe2lmKDI9PT10aGlzLl9zdGF0ZSl0aHJvdyB0aGlzLl9lcnJvcjtpZihlPHRoaXMuX3Jlc3VsdHMubGVuZ3RoKXJldHVybntkb25lOiExLHZhbHVlOnRoaXMuX3Jlc3VsdHNbZSsrXX07aWYoMT09PXRoaXMuX3N0YXRlKXJldHVybntkb25lOiEwLHZhbHVlOnZvaWQgMH07eWllbGQgRC50b1Byb21pc2UodGhpcy5fb25TdGF0ZUNoYW5nZWQuZXZlbnQpfX0pfX1zdGF0aWMgbWFwKGEscyl7cmV0dXJuIG5ldyBHdChvPT56dCh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7dmFyIHQsZTt0cnl7Zm9yKHZhciByLG49SnQoYSk7IShyPXlpZWxkIG4ubmV4dCgpKS5kb25lOyl7dmFyIGk9ci52YWx1ZTtvLmVtaXRPbmUocyhpKSl9fWNhdGNoKGUpe3Q9e2Vycm9yOmV9fWZpbmFsbHl7dHJ5e3ImJiFyLmRvbmUmJihlPW4ucmV0dXJuKSYmKHlpZWxkIGUuY2FsbChuKSl9ZmluYWxseXtpZih0KXRocm93IHQuZXJyb3J9fX0pKX1tYXAoZSl7cmV0dXJuIEd0Lm1hcCh0aGlzLGUpfXN0YXRpYyBmaWx0ZXIoYSxzKXtyZXR1cm4gbmV3IEd0KG89Pnp0KHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXt2YXIgdCxlO3RyeXtmb3IodmFyIHIsbj1KdChhKTshKHI9eWllbGQgbi5uZXh0KCkpLmRvbmU7KXt2YXIgaT1yLnZhbHVlO3MoaSkmJm8uZW1pdE9uZShpKX19Y2F0Y2goZSl7dD17ZXJyb3I6ZX19ZmluYWxseXt0cnl7ciYmIXIuZG9uZSYmKGU9bi5yZXR1cm4pJiYoeWllbGQgZS5jYWxsKG4pKX1maW5hbGx5e2lmKHQpdGhyb3cgdC5lcnJvcn19fSkpfWZpbHRlcihlKXtyZXR1cm4gR3QuZmlsdGVyKHRoaXMsZSl9c3RhdGljIGNvYWxlc2NlKGUpe3JldHVybiBHdC5maWx0ZXIoZSxlPT4hIWUpfWNvYWxlc2NlKCl7cmV0dXJuIEd0LmNvYWxlc2NlKHRoaXMpfXN0YXRpYyB0b1Byb21pc2Uocil7dmFyIG4saSxvLGE7cmV0dXJuIHp0KHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtjb25zdCBlPVtdO3RyeXtmb3Iobj1KdChyKTshKGk9eWllbGQgbi5uZXh0KCkpLmRvbmU7KXt2YXIgdD1pLnZhbHVlO2UucHVzaCh0KX19Y2F0Y2goZSl7bz17ZXJyb3I6ZX19ZmluYWxseXt0cnl7aSYmIWkuZG9uZSYmKGE9bi5yZXR1cm4pJiYoeWllbGQgYS5jYWxsKG4pKX1maW5hbGx5e2lmKG8pdGhyb3cgby5lcnJvcn19cmV0dXJuIGV9KX10b1Byb21pc2UoKXtyZXR1cm4gR3QudG9Qcm9taXNlKHRoaXMpfWVtaXRPbmUoZSl7MD09PXRoaXMuX3N0YXRlJiYodGhpcy5fcmVzdWx0cy5wdXNoKGUpLHRoaXMuX29uU3RhdGVDaGFuZ2VkLmZpcmUoKSl9ZW1pdE1hbnkoZSl7MD09PXRoaXMuX3N0YXRlJiYodGhpcy5fcmVzdWx0cz10aGlzLl9yZXN1bHRzLmNvbmNhdChlKSx0aGlzLl9vblN0YXRlQ2hhbmdlZC5maXJlKCkpfXJlc29sdmUoKXswPT09dGhpcy5fc3RhdGUmJih0aGlzLl9zdGF0ZT0xLHRoaXMuX29uU3RhdGVDaGFuZ2VkLmZpcmUoKSl9cmVqZWN0KGUpezA9PT10aGlzLl9zdGF0ZSYmKHRoaXMuX3N0YXRlPTIsdGhpcy5fZXJyb3I9ZSx0aGlzLl9vblN0YXRlQ2hhbmdlZC5maXJlKCkpfX1HdC5FTVBUWT1HdC5mcm9tQXJyYXkoW10pO2NsYXNzIFp0e2NvbnN0cnVjdG9yKCl7dGhpc1tIdF09IkxpbmtlZE1hcCIsdGhpcy5fbWFwPW5ldyBNYXAsdGhpcy5faGVhZD12b2lkIDAsdGhpcy5fdGFpbD12b2lkIDAsdGhpcy5fc2l6ZT0wLHRoaXMuX3N0YXRlPTB9Y2xlYXIoKXt0aGlzLl9tYXAuY2xlYXIoKSx0aGlzLl9oZWFkPXZvaWQgMCx0aGlzLl90YWlsPXZvaWQgMCx0aGlzLl9zaXplPTAsdGhpcy5fc3RhdGUrK31pc0VtcHR5KCl7cmV0dXJuIXRoaXMuX2hlYWQmJiF0aGlzLl90YWlsfWdldCBzaXplKCl7cmV0dXJuIHRoaXMuX3NpemV9Z2V0IGZpcnN0KCl7dmFyIGU7cmV0dXJuIG51bGw9PT0oZT10aGlzLl9oZWFkKXx8dm9pZCAwPT09ZT92b2lkIDA6ZS52YWx1ZX1nZXQgbGFzdCgpe3ZhciBlO3JldHVybiBudWxsPT09KGU9dGhpcy5fdGFpbCl8fHZvaWQgMD09PWU/dm9pZCAwOmUudmFsdWV9aGFzKGUpe3JldHVybiB0aGlzLl9tYXAuaGFzKGUpfWdldChlLHQ9MCl7ZT10aGlzLl9tYXAuZ2V0KGUpO2lmKGUpcmV0dXJuIDAhPT10JiZ0aGlzLnRvdWNoKGUsdCksZS52YWx1ZX1zZXQoZSx0LHI9MCl7bGV0IG49dGhpcy5fbWFwLmdldChlKTtpZihuKW4udmFsdWU9dCwwIT09ciYmdGhpcy50b3VjaChuLHIpO2Vsc2V7c3dpdGNoKG49e2tleTplLHZhbHVlOnQsbmV4dDp2b2lkIDAscHJldmlvdXM6dm9pZCAwfSxyKXtjYXNlIDA6dGhpcy5hZGRJdGVtTGFzdChuKTticmVhaztjYXNlIDE6dGhpcy5hZGRJdGVtRmlyc3Qobik7YnJlYWs7ZGVmYXVsdDp0aGlzLmFkZEl0ZW1MYXN0KG4pfXRoaXMuX21hcC5zZXQoZSxuKSx0aGlzLl9zaXplKyt9cmV0dXJuIHRoaXN9ZGVsZXRlKGUpe3JldHVybiEhdGhpcy5yZW1vdmUoZSl9cmVtb3ZlKGUpe3ZhciB0PXRoaXMuX21hcC5nZXQoZSk7aWYodClyZXR1cm4gdGhpcy5fbWFwLmRlbGV0ZShlKSx0aGlzLnJlbW92ZUl0ZW0odCksdGhpcy5fc2l6ZS0tLHQudmFsdWV9c2hpZnQoKXtpZih0aGlzLl9oZWFkfHx0aGlzLl90YWlsKXtpZighdGhpcy5faGVhZHx8IXRoaXMuX3RhaWwpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIGxpc3QiKTt2YXIgZT10aGlzLl9oZWFkO3JldHVybiB0aGlzLl9tYXAuZGVsZXRlKGUua2V5KSx0aGlzLnJlbW92ZUl0ZW0oZSksdGhpcy5fc2l6ZS0tLGUudmFsdWV9fWZvckVhY2goZSx0KXt2YXIgcj10aGlzLl9zdGF0ZTtsZXQgbj10aGlzLl9oZWFkO2Zvcig7bjspe2lmKCh0P2UuYmluZCh0KTplKShuLnZhbHVlLG4ua2V5LHRoaXMpLHRoaXMuX3N0YXRlIT09cil0aHJvdyBuZXcgRXJyb3IoIkxpbmtlZE1hcCBnb3QgbW9kaWZpZWQgZHVyaW5nIGl0ZXJhdGlvbi4iKTtuPW4ubmV4dH19a2V5cygpe2NvbnN0IHQ9dGhpcyxyPXRoaXMuX3N0YXRlO2xldCBuPXRoaXMuX2hlYWQ7Y29uc3QgZT17W1N5bWJvbC5pdGVyYXRvcl0oKXtyZXR1cm4gZX0sbmV4dCgpe2lmKHQuX3N0YXRlIT09cil0aHJvdyBuZXcgRXJyb3IoIkxpbmtlZE1hcCBnb3QgbW9kaWZpZWQgZHVyaW5nIGl0ZXJhdGlvbi4iKTt2YXIgZTtyZXR1cm4gbj8oZT17dmFsdWU6bi5rZXksZG9uZTohMX0sbj1uLm5leHQsZSk6e3ZhbHVlOnZvaWQgMCxkb25lOiEwfX19O3JldHVybiBlfXZhbHVlcygpe2NvbnN0IHQ9dGhpcyxyPXRoaXMuX3N0YXRlO2xldCBuPXRoaXMuX2hlYWQ7Y29uc3QgZT17W1N5bWJvbC5pdGVyYXRvcl0oKXtyZXR1cm4gZX0sbmV4dCgpe2lmKHQuX3N0YXRlIT09cil0aHJvdyBuZXcgRXJyb3IoIkxpbmtlZE1hcCBnb3QgbW9kaWZpZWQgZHVyaW5nIGl0ZXJhdGlvbi4iKTt2YXIgZTtyZXR1cm4gbj8oZT17dmFsdWU6bi52YWx1ZSxkb25lOiExfSxuPW4ubmV4dCxlKTp7dmFsdWU6dm9pZCAwLGRvbmU6ITB9fX07cmV0dXJuIGV9ZW50cmllcygpe2NvbnN0IHQ9dGhpcyxyPXRoaXMuX3N0YXRlO2xldCBuPXRoaXMuX2hlYWQ7Y29uc3QgZT17W1N5bWJvbC5pdGVyYXRvcl0oKXtyZXR1cm4gZX0sbmV4dCgpe2lmKHQuX3N0YXRlIT09cil0aHJvdyBuZXcgRXJyb3IoIkxpbmtlZE1hcCBnb3QgbW9kaWZpZWQgZHVyaW5nIGl0ZXJhdGlvbi4iKTt2YXIgZTtyZXR1cm4gbj8oZT17dmFsdWU6W24ua2V5LG4udmFsdWVdLGRvbmU6ITF9LG49bi5uZXh0LGUpOnt2YWx1ZTp2b2lkIDAsZG9uZTohMH19fTtyZXR1cm4gZX1bKEh0PVN5bWJvbC50b1N0cmluZ1RhZyxTeW1ib2wuaXRlcmF0b3IpXSgpe3JldHVybiB0aGlzLmVudHJpZXMoKX10cmltT2xkKHIpe2lmKCEocj49dGhpcy5zaXplKSlpZigwIT09cil7bGV0IGU9dGhpcy5faGVhZCx0PXRoaXMuc2l6ZTtmb3IoO2UmJnQ+cjspdGhpcy5fbWFwLmRlbGV0ZShlLmtleSksZT1lLm5leHQsdC0tO3RoaXMuX2hlYWQ9ZSx0aGlzLl9zaXplPXQsZSYmKGUucHJldmlvdXM9dm9pZCAwKSx0aGlzLl9zdGF0ZSsrfWVsc2UgdGhpcy5jbGVhcigpfWFkZEl0ZW1GaXJzdChlKXtpZih0aGlzLl9oZWFkfHx0aGlzLl90YWlsKXtpZighdGhpcy5faGVhZCl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgbGlzdCIpO2UubmV4dD10aGlzLl9oZWFkLHRoaXMuX2hlYWQucHJldmlvdXM9ZX1lbHNlIHRoaXMuX3RhaWw9ZTt0aGlzLl9oZWFkPWUsdGhpcy5fc3RhdGUrK31hZGRJdGVtTGFzdChlKXtpZih0aGlzLl9oZWFkfHx0aGlzLl90YWlsKXtpZighdGhpcy5fdGFpbCl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgbGlzdCIpO2UucHJldmlvdXM9dGhpcy5fdGFpbCx0aGlzLl90YWlsLm5leHQ9ZX1lbHNlIHRoaXMuX2hlYWQ9ZTt0aGlzLl90YWlsPWUsdGhpcy5fc3RhdGUrK31yZW1vdmVJdGVtKGUpe2lmKGU9PT10aGlzLl9oZWFkJiZlPT09dGhpcy5fdGFpbCl0aGlzLl9oZWFkPXZvaWQgMCx0aGlzLl90YWlsPXZvaWQgMDtlbHNlIGlmKGU9PT10aGlzLl9oZWFkKXtpZighZS5uZXh0KXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBsaXN0Iik7ZS5uZXh0LnByZXZpb3VzPXZvaWQgMCx0aGlzLl9oZWFkPWUubmV4dH1lbHNlIGlmKGU9PT10aGlzLl90YWlsKXtpZighZS5wcmV2aW91cyl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgbGlzdCIpO2UucHJldmlvdXMubmV4dD12b2lkIDAsdGhpcy5fdGFpbD1lLnByZXZpb3VzfWVsc2V7Y29uc3QgdD1lLm5leHQscj1lLnByZXZpb3VzO2lmKCF0fHwhcil0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgbGlzdCIpOyh0LnByZXZpb3VzPXIpLm5leHQ9dH1lLm5leHQ9dm9pZCAwLGUucHJldmlvdXM9dm9pZCAwLHRoaXMuX3N0YXRlKyt9dG91Y2goZSx0KXtpZighdGhpcy5faGVhZHx8IXRoaXMuX3RhaWwpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIGxpc3QiKTtpZigxPT09dHx8Mj09PXQpaWYoMT09PXQpe2lmKGUhPT10aGlzLl9oZWFkKXtjb25zdCByPWUubmV4dCxuPWUucHJldmlvdXM7ZT09PXRoaXMuX3RhaWw/KG4ubmV4dD12b2lkIDAsdGhpcy5fdGFpbD1uKTooci5wcmV2aW91cz1uKS5uZXh0PXIsZS5wcmV2aW91cz12b2lkIDAsZS5uZXh0PXRoaXMuX2hlYWQsdGhpcy5faGVhZC5wcmV2aW91cz1lLHRoaXMuX2hlYWQ9ZSx0aGlzLl9zdGF0ZSsrfX1lbHNlIGlmKDI9PT10JiZlIT09dGhpcy5fdGFpbCl7Y29uc3QgaT1lLm5leHQsbz1lLnByZXZpb3VzO2U9PT10aGlzLl9oZWFkPyhpLnByZXZpb3VzPXZvaWQgMCx0aGlzLl9oZWFkPWkpOihpLnByZXZpb3VzPW8pLm5leHQ9aSxlLm5leHQ9dm9pZCAwLGUucHJldmlvdXM9dGhpcy5fdGFpbCx0aGlzLl90YWlsLm5leHQ9ZSx0aGlzLl90YWlsPWUsdGhpcy5fc3RhdGUrK319dG9KU09OKCl7Y29uc3Qgcj1bXTtyZXR1cm4gdGhpcy5mb3JFYWNoKChlLHQpPT57ci5wdXNoKFt0LGVdKX0pLHJ9ZnJvbUpTT04oZSl7dGhpcy5jbGVhcigpO2Zvcih2YXJbdCxyXW9mIGUpdGhpcy5zZXQodCxyKX19Y2xhc3MgWHQgZXh0ZW5kcyBadHtjb25zdHJ1Y3RvcihlLHQ9MSl7c3VwZXIoKSx0aGlzLl9saW1pdD1lLHRoaXMuX3JhdGlvPU1hdGgubWluKE1hdGgubWF4KDAsdCksMSl9Z2V0IGxpbWl0KCl7cmV0dXJuIHRoaXMuX2xpbWl0fXNldCBsaW1pdChlKXt0aGlzLl9saW1pdD1lLHRoaXMuY2hlY2tUcmltKCl9Z2V0KGUsdD0yKXtyZXR1cm4gc3VwZXIuZ2V0KGUsdCl9cGVlayhlKXtyZXR1cm4gc3VwZXIuZ2V0KGUsMCl9c2V0KGUsdCl7cmV0dXJuIHN1cGVyLnNldChlLHQsMiksdGhpcy5jaGVja1RyaW0oKSx0aGlzfWNoZWNrVHJpbSgpe3RoaXMuc2l6ZT50aGlzLl9saW1pdCYmdGhpcy50cmltT2xkKE1hdGgucm91bmQodGhpcy5fbGltaXQqdGhpcy5fcmF0aW8pKX19Y29uc3QgUXQ9IioqIixZdD0iLyIsZXI9IlsvXFxcXF0iLHRyPSJbXi9cXFxcXSIscnI9L1wvL2c7ZnVuY3Rpb24gbnIoZSl7c3dpdGNoKGUpe2Nhc2UgMDpyZXR1cm4iIjtjYXNlIDE6cmV0dXJuIHRyKyIqPyI7ZGVmYXVsdDpyZXR1cm5gKD86JHtlcn18JHt0cn0rJHtlcn18JHtlcn0ke3RyfSspKj9gfX1mdW5jdGlvbiBpcihlLHQpe2lmKCFlKXJldHVybltdO2NvbnN0IHI9W107bGV0IG49ITEsaT0hMSxvPSIiO2Zvcihjb25zdCBhIG9mIGUpe3N3aXRjaChhKXtjYXNlIHQ6aWYobnx8aSlicmVhaztyLnB1c2gobyksbz0iIjtjb250aW51ZTtjYXNlInsiOm49ITA7YnJlYWs7Y2FzZSJ9IjpuPSExO2JyZWFrO2Nhc2UiWyI6aT0hMDticmVhaztjYXNlIl0iOmk9ITF9bys9YX1yZXR1cm4gbyYmci5wdXNoKG8pLHJ9ZnVuY3Rpb24gb3IoKXtyZXR1cm4hMX1jb25zdCBhcj0vXlwqXCpcL1wqXC5bXHdcLi1dKyQvLHNyPS9eXCpcKlwvKFtcd1wuLV0rKVwvPyQvLGxyPS9ee1wqXCpcL1tcKlwuXT9bXHdcLi1dK1wvPygsXCpcKlwvW1wqXC5dP1tcd1wuLV0rXC8/KSp9JC8sY3I9L157XCpcKlwvW1wqXC5dP1tcd1wuLV0rKFwvKFwqXCopPyk/KCxcKlwqXC9bXCpcLl0/W1x3XC4tXSsoXC8oXCpcKik/KT8pKn0kLyx1cj0vXlwqXCooKFwvW1x3XC4tXSspKylcLz8kLyxocj0vXihbXHdcLi1dKyhcL1tcd1wuLV0rKSopXC8/JC8sZnI9bmV3IFh0KDFlNCksZHI9ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbH07ZnVuY3Rpb24gbXIoZSx0KXtpZighZSlyZXR1cm4gZHI7bGV0IHI7dmFyIG49KHI9KHI9InN0cmluZyIhPXR5cGVvZiBlP2UucGF0dGVybjplKS50cmltKCkpKyJfIishIXQudHJpbUZvckV4Y2x1c2lvbnM7bGV0IGk9ZnIuZ2V0KG4pO2lmKGkpcmV0dXJuIGdyKGksZSk7bGV0IG87aWYoYXIudGVzdChyKSl7Y29uc3QgYT1yLnN1YnN0cig0KTtpPWZ1bmN0aW9uKGUsdCl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBlJiZlLmVuZHNXaXRoKGEpP3I6bnVsbH19ZWxzZSBpPShvPXNyLmV4ZWMocHIocix0KSkpP2Z1bmN0aW9uKHIsbil7ZnVuY3Rpb24gZShlLHQpe3JldHVybiJzdHJpbmciIT10eXBlb2YgZT9udWxsOnQ/dD09PXI/bjpudWxsOmU9PT1yfHxlLmVuZHNXaXRoKGkpfHxlLmVuZHNXaXRoKG8pP246bnVsbH1jb25zdCBpPSIvIityLG89IlxcIityLHQ9W3JdO3JldHVybiBlLmJhc2VuYW1lcz10LGUucGF0dGVybnM9W25dLGUuYWxsQmFzZW5hbWVzPXQsZX0ob1sxXSxyKToodC50cmltRm9yRXhjbHVzaW9ucz9jcjpscikudGVzdChyKT9mdW5jdGlvbihpLHQpe2NvbnN0IG89eXIoaS5zbGljZSgxLC0xKS5zcGxpdCgiLCIpLm1hcChlPT5tcihlLHQpKS5maWx0ZXIoZT0+ZSE9PWRyKSxpKSxlPW8ubGVuZ3RoO2lmKCFlKXJldHVybiBkcjtpZigxPT09ZSlyZXR1cm4gb1swXTtmdW5jdGlvbiByKHIsbil7Zm9yKGxldCBlPTAsdD1vLmxlbmd0aDtlPHQ7ZSsrKWlmKG9bZV0ocixuKSlyZXR1cm4gaTtyZXR1cm4gbnVsbH12YXIgbj1vLmZpbmQoZT0+ISFlLmFsbEJhc2VuYW1lcyk7biYmKHIuYWxsQmFzZW5hbWVzPW4uYWxsQmFzZW5hbWVzKTtuPW8ucmVkdWNlKChlLHQpPT50LmFsbFBhdGhzP2UuY29uY2F0KHQuYWxsUGF0aHMpOmUsW10pO24ubGVuZ3RoJiYoci5hbGxQYXRocz1uKTtyZXR1cm4gcn0ocix0KToobz11ci5leGVjKHByKHIsdCkpKT9icihvWzFdLnN1YnN0cigxKSxyLCEwKToobz1oci5leGVjKHByKHIsdCkpKT9icihvWzFdLHIsITEpOmZ1bmN0aW9uKHQpe3RyeXtjb25zdCByPW5ldyBSZWdFeHAoYF4ke2Z1bmN0aW9uIHUoZSl7aWYoIWUpcmV0dXJuIiI7bGV0IGg9IiI7Y29uc3QgZj1pcihlLFl0KTtpZihmLmV2ZXJ5KGU9PmU9PT1RdCkpaD0iLioiO2Vsc2V7bGV0IGM9ITE7Zi5mb3JFYWNoKChpLG8pPT57aWYoaSE9PVF0KXtsZXQgZT0hMSx0PSIiLHI9ITEsbj0iIjtmb3IoY29uc3QgcyBvZiBpKWlmKCJ9IiE9PXMmJmUpdCs9cztlbHNlIGlmKCFyfHwiXSI9PT1zJiZuKXN3aXRjaChzKXtjYXNlInsiOmU9ITA7Y29udGludWU7Y2FzZSJbIjpyPSEwO2NvbnRpbnVlO2Nhc2UifSI6e2NvbnN0IGw9aXIodCwiLCIpO3ZhciBhPWAoPzoke2wubWFwKGU9PnUoZSkpLmpvaW4oInwiKX0pYDtoKz1hLGU9ITEsdD0iIjticmVha31jYXNlIl0iOmgrPSJbIituKyJdIixyPSExLG49IiI7YnJlYWs7Y2FzZSI/IjpoKz10cjtjb250aW51ZTtjYXNlIioiOmgrPW5yKDEpO2NvbnRpbnVlO2RlZmF1bHQ6aCs9dGUocyl9ZWxzZXtsZXQgZTtlPSItIj09PXM/czoiXiIhPT1zJiYiISIhPT1zfHxuP3M9PT1ZdD8iIjp0ZShzKToiXiIsbis9ZX1vPGYubGVuZ3RoLTEmJihmW28rMV0hPT1RdHx8bysyPGYubGVuZ3RoKSYmKGgrPWVyKSxjPSExfWVsc2UgY3x8KGgrPW5yKDIpLGM9ITApfSl9cmV0dXJuIGh9KHQpfSRgKTtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIHIubGFzdEluZGV4PTAsInN0cmluZyI9PXR5cGVvZiBlJiZyLnRlc3QoZSk/dDpudWxsfX1jYXRjaChlKXtyZXR1cm4gZHJ9fShyKTtyZXR1cm4gZnIuc2V0KG4saSksZ3IoaSxlKX1mdW5jdGlvbiBncihyLG4pe3JldHVybiJzdHJpbmciPT10eXBlb2Ygbj9yOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKHQscixlLG49cWUpe2lmKHQ9PT1yKXJldHVybiAxO2lmKHQmJnImJiEoci5sZW5ndGg+dC5sZW5ndGgpKXtpZihlKXtpZighb2UodCxyKSlyZXR1cm47aWYoci5sZW5ndGg9PT10Lmxlbmd0aClyZXR1cm4gMTtsZXQgZT1yLmxlbmd0aDtyZXR1cm4gci5jaGFyQXQoci5sZW5ndGgtMSk9PT1uJiZlLS0sdC5jaGFyQXQoZSk9PT1ufXJldHVybiByLmNoYXJBdChyLmxlbmd0aC0xKSE9PW4mJihyKz1uKSwwPT09dC5pbmRleE9mKHIpfX0oZSxuLmJhc2UsIVYpP3IoZS5zdWJzdHIobi5iYXNlLmxlbmd0aCsxKSx0KTpudWxsfX1mdW5jdGlvbiBwcihlLHQpe3JldHVybiB0LnRyaW1Gb3JFeGNsdXNpb25zJiZlLmVuZHNXaXRoKCIvKioiKT9lLnN1YnN0cigwLGUubGVuZ3RoLTIpOmV9ZnVuY3Rpb24gYnIocixuLGUpe2NvbnN0IGk9cWU9PT1GZS5zZXAsbz1pP3I6ci5yZXBsYWNlKHJyLHFlKSxhPXFlK28scz1GZS5zZXArcix0PWU/ZnVuY3Rpb24oZSx0KXtyZXR1cm4ic3RyaW5nIiE9dHlwZW9mIGV8fGUhPT1vJiYhZS5lbmRzV2l0aChhKSYmKGl8fGUhPT1yJiYhZS5lbmRzV2l0aChzKSk/bnVsbDpufTpmdW5jdGlvbihlLHQpe3JldHVybiJzdHJpbmciIT10eXBlb2YgZXx8ZSE9PW8mJihpfHxlIT09cik/bnVsbDpufTtyZXR1cm4gdC5hbGxQYXRocz1bKGU/IiovIjoiLi8iKStyXSx0fWZ1bmN0aW9uIHZyKGUsdCxyKXtyZXR1cm4gZSYmInN0cmluZyI9PXR5cGVvZiB0JiZmdW5jdGlvbihlLHQ9e30pe2lmKCFlKXJldHVybiBvcjtpZigic3RyaW5nIj09dHlwZW9mIGV8fGZ1bmN0aW9uKGUpe3JldHVybiEhZSYmKCJzdHJpbmciPT10eXBlb2YgZS5iYXNlJiYic3RyaW5nIj09dHlwZW9mIGUucGF0dGVybil9KGUpKXtjb25zdCBuPW1yKGUsdCk7aWYobj09PWRyKXJldHVybiBvcjt2YXIgcj1mdW5jdGlvbihlLHQpe3JldHVybiEhbihlLHQpfTtyZXR1cm4gbi5hbGxCYXNlbmFtZXMmJihyLmFsbEJhc2VuYW1lcz1uLmFsbEJhc2VuYW1lcyksbi5hbGxQYXRocyYmKHIuYWxsUGF0aHM9bi5hbGxQYXRocykscn1yZXR1cm4gZnVuY3Rpb24ocixuKXtjb25zdCBsPXlyKE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHIpLm1hcChlPT57e3ZhciBvPWUsdD0oZT1yW2VdLG4pO2lmKCExPT09ZSlyZXR1cm4gZHI7Y29uc3QgYT1tcihvLHQpO2lmKGE9PT1kcilyZXR1cm4gZHI7aWYoImJvb2xlYW4iPT10eXBlb2YgZSlyZXR1cm4gYTtpZihlKXtjb25zdCBzPWUud2hlbjtpZigic3RyaW5nIj09dHlwZW9mIHMpcmV0dXJuKHQ9KGUsdCxyLG4pPT57aWYoIW58fCFhKGUsdCkpcmV0dXJuIG51bGw7Y29uc3QgaT1uKHMucmVwbGFjZSgiJChiYXNlbmFtZSkiLHIpKTtyZXR1cm4oZT1pKSYmImZ1bmN0aW9uIj09dHlwZW9mIGUudGhlbj9pLnRoZW4oZT0+ZT9vOm51bGwpOmk/bzpudWxsfSkucmVxdWlyZXNTaWJsaW5ncz0hMCx0fXJldHVybiBhfX0pLmZpbHRlcihlPT5lIT09ZHIpKSxlPWwubGVuZ3RoO2lmKCFlKXJldHVybiBkcjtpZighbC5zb21lKGU9PiEhZS5yZXF1aXJlc1NpYmxpbmdzKSl7aWYoMT09PWUpcmV0dXJuIGxbMF07Y29uc3QgdD1mdW5jdGlvbihyLG4pe2ZvcihsZXQgZT0wLHQ9bC5sZW5ndGg7ZTx0O2UrKyl7dmFyIGk9bFtlXShyLG4pO2lmKGkpcmV0dXJuIGl9cmV0dXJuIG51bGx9LGk9bC5maW5kKGU9PiEhZS5hbGxCYXNlbmFtZXMpLG89KGkmJih0LmFsbEJhc2VuYW1lcz1pLmFsbEJhc2VuYW1lcyksbC5yZWR1Y2UoKGUsdCk9PnQuYWxsUGF0aHM/ZS5jb25jYXQodC5hbGxQYXRocyk6ZSxbXSkpO3JldHVybiBvLmxlbmd0aCYmKHQuYWxsUGF0aHM9byksdH1jb25zdCB0PWZ1bmN0aW9uKHIsbixpKXtsZXQgbz12b2lkIDA7Zm9yKGxldCBlPTAsdD1sLmxlbmd0aDtlPHQ7ZSsrKXtjb25zdCBzPWxbZV07cy5yZXF1aXJlc1NpYmxpbmdzJiZpJiYobj1ufHxVZShyKSxvPW98fG4uc3Vic3RyKDAsbi5sZW5ndGgtQmUocikubGVuZ3RoKSk7dmFyIGE9cyhyLG4sbyxpKTtpZihhKXJldHVybiBhfXJldHVybiBudWxsfSxpPWwuZmluZChlPT4hIWUuYWxsQmFzZW5hbWVzKTtpJiYodC5hbGxCYXNlbmFtZXM9aS5hbGxCYXNlbmFtZXMpO2NvbnN0IG89bC5yZWR1Y2UoKGUsdCk9PnQuYWxsUGF0aHM/ZS5jb25jYXQodC5hbGxQYXRocyk6ZSxbXSk7by5sZW5ndGgmJih0LmFsbFBhdGhzPW8pO3JldHVybiB0fShlLHQpfShlKSh0LHZvaWQgMCxyKX1mdW5jdGlvbiB5cihlLHIpe2NvbnN0IHQ9ZS5maWx0ZXIoZT0+ISFlLmJhc2VuYW1lcyk7aWYodC5sZW5ndGg8MilyZXR1cm4gZTtjb25zdCBpPXQucmVkdWNlKChlLHQpPT57dD10LmJhc2VuYW1lcztyZXR1cm4gdD9lLmNvbmNhdCh0KTplfSxbXSk7bGV0IG87aWYocil7bz1bXTtmb3IobGV0IGU9MCx0PWkubGVuZ3RoO2U8dDtlKyspby5wdXNoKHIpfWVsc2Ugbz10LnJlZHVjZSgoZSx0KT0+e3Q9dC5wYXR0ZXJucztyZXR1cm4gdD9lLmNvbmNhdCh0KTplfSxbXSk7ZnVuY3Rpb24gbih0LHIpe2lmKCJzdHJpbmciIT10eXBlb2YgdClyZXR1cm4gbnVsbDtpZighcil7bGV0IGU7Zm9yKGU9dC5sZW5ndGg7MDxlO2UtLSl7dmFyIG49dC5jaGFyQ29kZUF0KGUtMSk7aWYoNDc9PT1ufHw5Mj09PW4pYnJlYWt9cj10LnN1YnN0cihlKX1yZXR1cm4tMSE9PShyPWkuaW5kZXhPZihyKSk/b1tyXTpudWxsfW4uYmFzZW5hbWVzPWksbi5wYXR0ZXJucz1vLG4uYWxsQmFzZW5hbWVzPWk7Y29uc3QgYT1lLmZpbHRlcihlPT4hZS5iYXNlbmFtZXMpO3JldHVybiBhLnB1c2gobiksYX1mdW5jdGlvbiBDcihlKXtyZXR1cm4ic3RyaW5nIiE9dHlwZW9mIGUmJihBcnJheS5pc0FycmF5KGUpP2UuZXZlcnkoQ3IpOiEhZS5leGNsdXNpdmUpfWNsYXNzIHdye2NvbnN0cnVjdG9yKCl7dGhpcy5fY2xvY2s9MCx0aGlzLl9lbnRyaWVzPVtdLHRoaXMuX29uRGlkQ2hhbmdlPW5ldyBYfWdldCBvbkRpZENoYW5nZSgpe3JldHVybiB0aGlzLl9vbkRpZENoYW5nZS5ldmVudH1yZWdpc3RlcihlLHQpe2xldCByPXtzZWxlY3RvcjplLHByb3ZpZGVyOnQsX3Njb3JlOi0xLF90aW1lOnRoaXMuX2Nsb2NrKyt9O3JldHVybiB0aGlzLl9lbnRyaWVzLnB1c2gociksdGhpcy5fbGFzdENhbmRpZGF0ZT12b2lkIDAsdGhpcy5fb25EaWRDaGFuZ2UuZmlyZSh0aGlzLl9lbnRyaWVzLmxlbmd0aCkseSgoKT0+e3ZhciBlOyFyfHwwPD0oZT10aGlzLl9lbnRyaWVzLmluZGV4T2YocikpJiYodGhpcy5fZW50cmllcy5zcGxpY2UoZSwxKSx0aGlzLl9sYXN0Q2FuZGlkYXRlPXZvaWQgMCx0aGlzLl9vbkRpZENoYW5nZS5maXJlKHRoaXMuX2VudHJpZXMubGVuZ3RoKSxyPXZvaWQgMCl9KX1oYXMoZSl7cmV0dXJuIDA8dGhpcy5hbGwoZSkubGVuZ3RofWFsbChlKXtpZighZSlyZXR1cm5bXTt0aGlzLl91cGRhdGVTY29yZXMoZSk7Y29uc3QgdD1bXTtmb3IodmFyIHIgb2YgdGhpcy5fZW50cmllcykwPHIuX3Njb3JlJiZ0LnB1c2goci5wcm92aWRlcik7cmV0dXJuIHR9b3JkZXJlZChlKXtjb25zdCB0PVtdO3JldHVybiB0aGlzLl9vcmRlcmVkRm9yRWFjaChlLGU9PnQucHVzaChlLnByb3ZpZGVyKSksdH1vcmRlcmVkR3JvdXBzKGUpe2NvbnN0IHQ9W107bGV0IHIsbjtyZXR1cm4gdGhpcy5fb3JkZXJlZEZvckVhY2goZSxlPT57ciYmbj09PWUuX3Njb3JlP3IucHVzaChlLnByb3ZpZGVyKToobj1lLl9zY29yZSxyPVtlLnByb3ZpZGVyXSx0LnB1c2gocikpfSksdH1fb3JkZXJlZEZvckVhY2goZSx0KXtpZihlKXt0aGlzLl91cGRhdGVTY29yZXMoZSk7Zm9yKGNvbnN0IHIgb2YgdGhpcy5fZW50cmllcykwPHIuX3Njb3JlJiZ0KHIpfX1fdXBkYXRlU2NvcmVzKGUpe3ZhciB0LHI9e3VyaTplLnVyaS50b1N0cmluZygpLGxhbmd1YWdlOmUuZ2V0TGFuZ3VhZ2VJZCgpfTtpZighdGhpcy5fbGFzdENhbmRpZGF0ZXx8dGhpcy5fbGFzdENhbmRpZGF0ZS5sYW5ndWFnZSE9PXIubGFuZ3VhZ2V8fHRoaXMuX2xhc3RDYW5kaWRhdGUudXJpIT09ci51cmkpe3RoaXMuX2xhc3RDYW5kaWRhdGU9cjtmb3IodmFyIG4gb2YgdGhpcy5fZW50cmllcylpZihuLl9zY29yZT1mdW5jdGlvbiB0KHIsbixpLG8pe2lmKEFycmF5LmlzQXJyYXkocikpe2xldCBlPTA7Zm9yKGNvbnN0IGMgb2Ygcil7dmFyIGE9dChjLG4saSxvKTtpZigxMD09PWEpcmV0dXJuIGE7YT5lJiYoZT1hKX1yZXR1cm4gZX1pZigic3RyaW5nIj09dHlwZW9mIHIpcmV0dXJuIG8/IioiPT09cj81OnI9PT1pPzEwOjA6MDtpZihyKXt2YXJ7bGFuZ3VhZ2U6cixwYXR0ZXJuOnMsc2NoZW1lOmUsaGFzQWNjZXNzVG9BbGxNb2RlbHM6bH09cjtpZighbyYmIWwpcmV0dXJuIDA7bGV0IHQ9MDtpZihlKWlmKGU9PT1uLnNjaGVtZSl0PTEwO2Vsc2V7aWYoIioiIT09ZSlyZXR1cm4gMDt0PTV9aWYocilpZihyPT09aSl0PTEwO2Vsc2V7aWYoIioiIT09cilyZXR1cm4gMDt0PU1hdGgubWF4KHQsNSl9aWYocyl7bGV0IGU7aWYoKGU9InN0cmluZyI9PXR5cGVvZiBzP3M6T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LHMpLHtiYXNlOktlKHMuYmFzZSl9KSkhPT1uLmZzUGF0aCYmIXZyKGUsbi5mc1BhdGgpKXJldHVybiAwO3Q9MTB9cmV0dXJuIHR9cmV0dXJuIDB9KG4uc2VsZWN0b3IsZS51cmksZS5nZXRMYW5ndWFnZUlkKCksISh0PWUpLmlzVG9vTGFyZ2VGb3JTeW5jaW5nKCkmJiF0LmlzRm9yU2ltcGxlV2lkZ2V0KSxDcihuLnNlbGVjdG9yKSYmMDxuLl9zY29yZSl7Zm9yKHZhciBpIG9mIHRoaXMuX2VudHJpZXMpaS5fc2NvcmU9MDtuLl9zY29yZT0xZTM7YnJlYWt9dGhpcy5fZW50cmllcy5zb3J0KHdyLl9jb21wYXJlQnlTY29yZUFuZFRpbWUpfX1zdGF0aWMgX2NvbXBhcmVCeVNjb3JlQW5kVGltZShlLHQpe3JldHVybiBlLl9zY29yZTx0Ll9zY29yZT8xOmUuX3Njb3JlPnQuX3Njb3JlPy0xOmUuX3RpbWU8dC5fdGltZT8xOmUuX3RpbWU+dC5fdGltZT8tMTowfX12YXIgX3I9ZnVuY3Rpb24oZSxhLHMsbCl7cmV0dXJuIG5ldyhzPXN8fFByb21pc2UpKGZ1bmN0aW9uKHIsdCl7ZnVuY3Rpb24gbihlKXt0cnl7byhsLm5leHQoZSkpfWNhdGNoKGUpe3QoZSl9fWZ1bmN0aW9uIGkoZSl7dHJ5e28obC50aHJvdyhlKSl9Y2F0Y2goZSl7dChlKX19ZnVuY3Rpb24gbyhlKXt2YXIgdDtlLmRvbmU/cihlLnZhbHVlKTooKHQ9ZS52YWx1ZSlpbnN0YW5jZW9mIHM/dDpuZXcgcyhmdW5jdGlvbihlKXtlKHQpfSkpLnRoZW4obixpKX1vKChsPWwuYXBwbHkoZSxhfHxbXSkpLm5leHQoKSl9KX07Y2xhc3MgU3IgZXh0ZW5kcyB3e2NvbnN0cnVjdG9yKGUsdCxyKXtzdXBlcigpLHRoaXMuX3JlZ2lzdHJ5PWUsdGhpcy5fbGFuZ3VhZ2VJZD10LHRoaXMuX2ZhY3Rvcnk9cix0aGlzLl9pc0Rpc3Bvc2VkPSExLHRoaXMuX3Jlc29sdmVQcm9taXNlPW51bGwsdGhpcy5faXNSZXNvbHZlZD0hMX1nZXQgaXNSZXNvbHZlZCgpe3JldHVybiB0aGlzLl9pc1Jlc29sdmVkfWRpc3Bvc2UoKXt0aGlzLl9pc0Rpc3Bvc2VkPSEwLHN1cGVyLmRpc3Bvc2UoKX1yZXNvbHZlKCl7cmV0dXJuIF9yKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtyZXR1cm4gdGhpcy5fcmVzb2x2ZVByb21pc2V8fCh0aGlzLl9yZXNvbHZlUHJvbWlzZT10aGlzLl9jcmVhdGUoKSksdGhpcy5fcmVzb2x2ZVByb21pc2V9KX1fY3JlYXRlKCl7cmV0dXJuIF9yKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXt2YXIgZT15aWVsZCBQcm9taXNlLnJlc29sdmUodGhpcy5fZmFjdG9yeS5jcmVhdGVUb2tlbml6YXRpb25TdXBwb3J0KCkpO3RoaXMuX2lzUmVzb2x2ZWQ9ITAsZSYmIXRoaXMuX2lzRGlzcG9zZWQmJnRoaXMuX3JlZ2lzdGVyKHRoaXMuX3JlZ2lzdHJ5LnJlZ2lzdGVyKHRoaXMuX2xhbmd1YWdlSWQsZSkpfSl9fWNsYXNzIGl7Y29uc3RydWN0b3IoZSx0LHIpe3RoaXMuaWQ9ZSx0aGlzLmRlZmluaXRpb249dCx0aGlzLmRlc2NyaXB0aW9uPXIsaS5fYWxsQ29kaWNvbnMucHVzaCh0aGlzKX1nZXQgY2xhc3NOYW1lcygpe3JldHVybiJjb2RpY29uIGNvZGljb24tIit0aGlzLmlkfWdldCBjbGFzc05hbWVzQXJyYXkoKXtyZXR1cm5bImNvZGljb24iLCJjb2RpY29uLSIrdGhpcy5pZF19Z2V0IGNzc1NlbGVjdG9yKCl7cmV0dXJuIi5jb2RpY29uLmNvZGljb24tIit0aGlzLmlkfXN0YXRpYyBnZXRBbGwoKXtyZXR1cm4gaS5fYWxsQ29kaWNvbnN9fWkuX2FsbENvZGljb25zPVtdLGkuYWRkPW5ldyBpKCJhZGQiLHtmb250Q2hhcmFjdGVyOiJcXGVhNjAifSksaS5wbHVzPW5ldyBpKCJwbHVzIixpLmFkZC5kZWZpbml0aW9uKSxpLmdpc3ROZXc9bmV3IGkoImdpc3QtbmV3IixpLmFkZC5kZWZpbml0aW9uKSxpLnJlcG9DcmVhdGU9bmV3IGkoInJlcG8tY3JlYXRlIixpLmFkZC5kZWZpbml0aW9uKSxpLmxpZ2h0YnVsYj1uZXcgaSgibGlnaHRidWxiIix7Zm9udENoYXJhY3RlcjoiXFxlYTYxIn0pLGkubGlnaHRCdWxiPW5ldyBpKCJsaWdodC1idWxiIix7Zm9udENoYXJhY3RlcjoiXFxlYTYxIn0pLGkucmVwbz1uZXcgaSgicmVwbyIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE2MiJ9KSxpLnJlcG9EZWxldGU9bmV3IGkoInJlcG8tZGVsZXRlIix7Zm9udENoYXJhY3RlcjoiXFxlYTYyIn0pLGkuZ2lzdEZvcms9bmV3IGkoImdpc3QtZm9yayIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE2MyJ9KSxpLnJlcG9Gb3JrZWQ9bmV3IGkoInJlcG8tZm9ya2VkIix7Zm9udENoYXJhY3RlcjoiXFxlYTYzIn0pLGkuZ2l0UHVsbFJlcXVlc3Q9bmV3IGkoImdpdC1wdWxsLXJlcXVlc3QiLHtmb250Q2hhcmFjdGVyOiJcXGVhNjQifSksaS5naXRQdWxsUmVxdWVzdEFiYW5kb25lZD1uZXcgaSgiZ2l0LXB1bGwtcmVxdWVzdC1hYmFuZG9uZWQiLHtmb250Q2hhcmFjdGVyOiJcXGVhNjQifSksaS5yZWNvcmRLZXlzPW5ldyBpKCJyZWNvcmQta2V5cyIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE2NSJ9KSxpLmtleWJvYXJkPW5ldyBpKCJrZXlib2FyZCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE2NSJ9KSxpLnRhZz1uZXcgaSgidGFnIix7Zm9udENoYXJhY3RlcjoiXFxlYTY2In0pLGkudGFnQWRkPW5ldyBpKCJ0YWctYWRkIix7Zm9udENoYXJhY3RlcjoiXFxlYTY2In0pLGkudGFnUmVtb3ZlPW5ldyBpKCJ0YWctcmVtb3ZlIix7Zm9udENoYXJhY3RlcjoiXFxlYTY2In0pLGkucGVyc29uPW5ldyBpKCJwZXJzb24iLHtmb250Q2hhcmFjdGVyOiJcXGVhNjcifSksaS5wZXJzb25Gb2xsb3c9bmV3IGkoInBlcnNvbi1mb2xsb3ciLHtmb250Q2hhcmFjdGVyOiJcXGVhNjcifSksaS5wZXJzb25PdXRsaW5lPW5ldyBpKCJwZXJzb24tb3V0bGluZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE2NyJ9KSxpLnBlcnNvbkZpbGxlZD1uZXcgaSgicGVyc29uLWZpbGxlZCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE2NyJ9KSxpLmdpdEJyYW5jaD1uZXcgaSgiZ2l0LWJyYW5jaCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE2OCJ9KSxpLmdpdEJyYW5jaENyZWF0ZT1uZXcgaSgiZ2l0LWJyYW5jaC1jcmVhdGUiLHtmb250Q2hhcmFjdGVyOiJcXGVhNjgifSksaS5naXRCcmFuY2hEZWxldGU9bmV3IGkoImdpdC1icmFuY2gtZGVsZXRlIix7Zm9udENoYXJhY3RlcjoiXFxlYTY4In0pLGkuc291cmNlQ29udHJvbD1uZXcgaSgic291cmNlLWNvbnRyb2wiLHtmb250Q2hhcmFjdGVyOiJcXGVhNjgifSksaS5taXJyb3I9bmV3IGkoIm1pcnJvciIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE2OSJ9KSxpLm1pcnJvclB1YmxpYz1uZXcgaSgibWlycm9yLXB1YmxpYyIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE2OSJ9KSxpLnN0YXI9bmV3IGkoInN0YXIiLHtmb250Q2hhcmFjdGVyOiJcXGVhNmEifSksaS5zdGFyQWRkPW5ldyBpKCJzdGFyLWFkZCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE2YSJ9KSxpLnN0YXJEZWxldGU9bmV3IGkoInN0YXItZGVsZXRlIix7Zm9udENoYXJhY3RlcjoiXFxlYTZhIn0pLGkuc3RhckVtcHR5PW5ldyBpKCJzdGFyLWVtcHR5Iix7Zm9udENoYXJhY3RlcjoiXFxlYTZhIn0pLGkuY29tbWVudD1uZXcgaSgiY29tbWVudCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE2YiJ9KSxpLmNvbW1lbnRBZGQ9bmV3IGkoImNvbW1lbnQtYWRkIix7Zm9udENoYXJhY3RlcjoiXFxlYTZiIn0pLGkuYWxlcnQ9bmV3IGkoImFsZXJ0Iix7Zm9udENoYXJhY3RlcjoiXFxlYTZjIn0pLGkud2FybmluZz1uZXcgaSgid2FybmluZyIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE2YyJ9KSxpLnNlYXJjaD1uZXcgaSgic2VhcmNoIix7Zm9udENoYXJhY3RlcjoiXFxlYTZkIn0pLGkuc2VhcmNoU2F2ZT1uZXcgaSgic2VhcmNoLXNhdmUiLHtmb250Q2hhcmFjdGVyOiJcXGVhNmQifSksaS5sb2dPdXQ9bmV3IGkoImxvZy1vdXQiLHtmb250Q2hhcmFjdGVyOiJcXGVhNmUifSksaS5zaWduT3V0PW5ldyBpKCJzaWduLW91dCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE2ZSJ9KSxpLmxvZ0luPW5ldyBpKCJsb2ctaW4iLHtmb250Q2hhcmFjdGVyOiJcXGVhNmYifSksaS5zaWduSW49bmV3IGkoInNpZ24taW4iLHtmb250Q2hhcmFjdGVyOiJcXGVhNmYifSksaS5leWU9bmV3IGkoImV5ZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE3MCJ9KSxpLmV5ZVVud2F0Y2g9bmV3IGkoImV5ZS11bndhdGNoIix7Zm9udENoYXJhY3RlcjoiXFxlYTcwIn0pLGkuZXllV2F0Y2g9bmV3IGkoImV5ZS13YXRjaCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE3MCJ9KSxpLmNpcmNsZUZpbGxlZD1uZXcgaSgiY2lyY2xlLWZpbGxlZCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE3MSJ9KSxpLnByaW1pdGl2ZURvdD1uZXcgaSgicHJpbWl0aXZlLWRvdCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE3MSJ9KSxpLmNsb3NlRGlydHk9bmV3IGkoImNsb3NlLWRpcnR5Iix7Zm9udENoYXJhY3RlcjoiXFxlYTcxIn0pLGkuZGVidWdCcmVha3BvaW50PW5ldyBpKCJkZWJ1Zy1icmVha3BvaW50Iix7Zm9udENoYXJhY3RlcjoiXFxlYTcxIn0pLGkuZGVidWdCcmVha3BvaW50RGlzYWJsZWQ9bmV3IGkoImRlYnVnLWJyZWFrcG9pbnQtZGlzYWJsZWQiLHtmb250Q2hhcmFjdGVyOiJcXGVhNzEifSksaS5kZWJ1Z0hpbnQ9bmV3IGkoImRlYnVnLWhpbnQiLHtmb250Q2hhcmFjdGVyOiJcXGVhNzEifSksaS5wcmltaXRpdmVTcXVhcmU9bmV3IGkoInByaW1pdGl2ZS1zcXVhcmUiLHtmb250Q2hhcmFjdGVyOiJcXGVhNzIifSksaS5lZGl0PW5ldyBpKCJlZGl0Iix7Zm9udENoYXJhY3RlcjoiXFxlYTczIn0pLGkucGVuY2lsPW5ldyBpKCJwZW5jaWwiLHtmb250Q2hhcmFjdGVyOiJcXGVhNzMifSksaS5pbmZvPW5ldyBpKCJpbmZvIix7Zm9udENoYXJhY3RlcjoiXFxlYTc0In0pLGkuaXNzdWVPcGVuZWQ9bmV3IGkoImlzc3VlLW9wZW5lZCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE3NCJ9KSxpLmdpc3RQcml2YXRlPW5ldyBpKCJnaXN0LXByaXZhdGUiLHtmb250Q2hhcmFjdGVyOiJcXGVhNzUifSksaS5naXRGb3JrUHJpdmF0ZT1uZXcgaSgiZ2l0LWZvcmstcHJpdmF0ZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE3NSJ9KSxpLmxvY2s9bmV3IGkoImxvY2siLHtmb250Q2hhcmFjdGVyOiJcXGVhNzUifSksaS5taXJyb3JQcml2YXRlPW5ldyBpKCJtaXJyb3ItcHJpdmF0ZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE3NSJ9KSxpLmNsb3NlPW5ldyBpKCJjbG9zZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE3NiJ9KSxpLnJlbW92ZUNsb3NlPW5ldyBpKCJyZW1vdmUtY2xvc2UiLHtmb250Q2hhcmFjdGVyOiJcXGVhNzYifSksaS54PW5ldyBpKCJ4Iix7Zm9udENoYXJhY3RlcjoiXFxlYTc2In0pLGkucmVwb1N5bmM9bmV3IGkoInJlcG8tc3luYyIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE3NyJ9KSxpLnN5bmM9bmV3IGkoInN5bmMiLHtmb250Q2hhcmFjdGVyOiJcXGVhNzcifSksaS5jbG9uZT1uZXcgaSgiY2xvbmUiLHtmb250Q2hhcmFjdGVyOiJcXGVhNzgifSksaS5kZXNrdG9wRG93bmxvYWQ9bmV3IGkoImRlc2t0b3AtZG93bmxvYWQiLHtmb250Q2hhcmFjdGVyOiJcXGVhNzgifSksaS5iZWFrZXI9bmV3IGkoImJlYWtlciIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE3OSJ9KSxpLm1pY3Jvc2NvcGU9bmV3IGkoIm1pY3Jvc2NvcGUiLHtmb250Q2hhcmFjdGVyOiJcXGVhNzkifSksaS52bT1uZXcgaSgidm0iLHtmb250Q2hhcmFjdGVyOiJcXGVhN2EifSksaS5kZXZpY2VEZXNrdG9wPW5ldyBpKCJkZXZpY2UtZGVza3RvcCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE3YSJ9KSxpLmZpbGU9bmV3IGkoImZpbGUiLHtmb250Q2hhcmFjdGVyOiJcXGVhN2IifSksaS5maWxlVGV4dD1uZXcgaSgiZmlsZS10ZXh0Iix7Zm9udENoYXJhY3RlcjoiXFxlYTdiIn0pLGkubW9yZT1uZXcgaSgibW9yZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE3YyJ9KSxpLmVsbGlwc2lzPW5ldyBpKCJlbGxpcHNpcyIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE3YyJ9KSxpLmtlYmFiSG9yaXpvbnRhbD1uZXcgaSgia2ViYWItaG9yaXpvbnRhbCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE3YyJ9KSxpLm1haWxSZXBseT1uZXcgaSgibWFpbC1yZXBseSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE3ZCJ9KSxpLnJlcGx5PW5ldyBpKCJyZXBseSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE3ZCJ9KSxpLm9yZ2FuaXphdGlvbj1uZXcgaSgib3JnYW5pemF0aW9uIix7Zm9udENoYXJhY3RlcjoiXFxlYTdlIn0pLGkub3JnYW5pemF0aW9uRmlsbGVkPW5ldyBpKCJvcmdhbml6YXRpb24tZmlsbGVkIix7Zm9udENoYXJhY3RlcjoiXFxlYTdlIn0pLGkub3JnYW5pemF0aW9uT3V0bGluZT1uZXcgaSgib3JnYW5pemF0aW9uLW91dGxpbmUiLHtmb250Q2hhcmFjdGVyOiJcXGVhN2UifSksaS5uZXdGaWxlPW5ldyBpKCJuZXctZmlsZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE3ZiJ9KSxpLmZpbGVBZGQ9bmV3IGkoImZpbGUtYWRkIix7Zm9udENoYXJhY3RlcjoiXFxlYTdmIn0pLGkubmV3Rm9sZGVyPW5ldyBpKCJuZXctZm9sZGVyIix7Zm9udENoYXJhY3RlcjoiXFxlYTgwIn0pLGkuZmlsZURpcmVjdG9yeUNyZWF0ZT1uZXcgaSgiZmlsZS1kaXJlY3RvcnktY3JlYXRlIix7Zm9udENoYXJhY3RlcjoiXFxlYTgwIn0pLGkudHJhc2g9bmV3IGkoInRyYXNoIix7Zm9udENoYXJhY3RlcjoiXFxlYTgxIn0pLGkudHJhc2hjYW49bmV3IGkoInRyYXNoY2FuIix7Zm9udENoYXJhY3RlcjoiXFxlYTgxIn0pLGkuaGlzdG9yeT1uZXcgaSgiaGlzdG9yeSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE4MiJ9KSxpLmNsb2NrPW5ldyBpKCJjbG9jayIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE4MiJ9KSxpLmZvbGRlcj1uZXcgaSgiZm9sZGVyIix7Zm9udENoYXJhY3RlcjoiXFxlYTgzIn0pLGkuZmlsZURpcmVjdG9yeT1uZXcgaSgiZmlsZS1kaXJlY3RvcnkiLHtmb250Q2hhcmFjdGVyOiJcXGVhODMifSksaS5zeW1ib2xGb2xkZXI9bmV3IGkoInN5bWJvbC1mb2xkZXIiLHtmb250Q2hhcmFjdGVyOiJcXGVhODMifSksaS5sb2dvR2l0aHViPW5ldyBpKCJsb2dvLWdpdGh1YiIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE4NCJ9KSxpLm1hcmtHaXRodWI9bmV3IGkoIm1hcmstZ2l0aHViIix7Zm9udENoYXJhY3RlcjoiXFxlYTg0In0pLGkuZ2l0aHViPW5ldyBpKCJnaXRodWIiLHtmb250Q2hhcmFjdGVyOiJcXGVhODQifSksaS50ZXJtaW5hbD1uZXcgaSgidGVybWluYWwiLHtmb250Q2hhcmFjdGVyOiJcXGVhODUifSksaS5jb25zb2xlPW5ldyBpKCJjb25zb2xlIix7Zm9udENoYXJhY3RlcjoiXFxlYTg1In0pLGkucmVwbD1uZXcgaSgicmVwbCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE4NSJ9KSxpLnphcD1uZXcgaSgiemFwIix7Zm9udENoYXJhY3RlcjoiXFxlYTg2In0pLGkuc3ltYm9sRXZlbnQ9bmV3IGkoInN5bWJvbC1ldmVudCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE4NiJ9KSxpLmVycm9yPW5ldyBpKCJlcnJvciIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE4NyJ9KSxpLnN0b3A9bmV3IGkoInN0b3AiLHtmb250Q2hhcmFjdGVyOiJcXGVhODcifSksaS52YXJpYWJsZT1uZXcgaSgidmFyaWFibGUiLHtmb250Q2hhcmFjdGVyOiJcXGVhODgifSksaS5zeW1ib2xWYXJpYWJsZT1uZXcgaSgic3ltYm9sLXZhcmlhYmxlIix7Zm9udENoYXJhY3RlcjoiXFxlYTg4In0pLGkuYXJyYXk9bmV3IGkoImFycmF5Iix7Zm9udENoYXJhY3RlcjoiXFxlYThhIn0pLGkuc3ltYm9sQXJyYXk9bmV3IGkoInN5bWJvbC1hcnJheSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE4YSJ9KSxpLnN5bWJvbE1vZHVsZT1uZXcgaSgic3ltYm9sLW1vZHVsZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE4YiJ9KSxpLnN5bWJvbFBhY2thZ2U9bmV3IGkoInN5bWJvbC1wYWNrYWdlIix7Zm9udENoYXJhY3RlcjoiXFxlYThiIn0pLGkuc3ltYm9sTmFtZXNwYWNlPW5ldyBpKCJzeW1ib2wtbmFtZXNwYWNlIix7Zm9udENoYXJhY3RlcjoiXFxlYThiIn0pLGkuc3ltYm9sT2JqZWN0PW5ldyBpKCJzeW1ib2wtb2JqZWN0Iix7Zm9udENoYXJhY3RlcjoiXFxlYThiIn0pLGkuc3ltYm9sTWV0aG9kPW5ldyBpKCJzeW1ib2wtbWV0aG9kIix7Zm9udENoYXJhY3RlcjoiXFxlYThjIn0pLGkuc3ltYm9sRnVuY3Rpb249bmV3IGkoInN5bWJvbC1mdW5jdGlvbiIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE4YyJ9KSxpLnN5bWJvbENvbnN0cnVjdG9yPW5ldyBpKCJzeW1ib2wtY29uc3RydWN0b3IiLHtmb250Q2hhcmFjdGVyOiJcXGVhOGMifSksaS5zeW1ib2xCb29sZWFuPW5ldyBpKCJzeW1ib2wtYm9vbGVhbiIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE4ZiJ9KSxpLnN5bWJvbE51bGw9bmV3IGkoInN5bWJvbC1udWxsIix7Zm9udENoYXJhY3RlcjoiXFxlYThmIn0pLGkuc3ltYm9sTnVtZXJpYz1uZXcgaSgic3ltYm9sLW51bWVyaWMiLHtmb250Q2hhcmFjdGVyOiJcXGVhOTAifSksaS5zeW1ib2xOdW1iZXI9bmV3IGkoInN5bWJvbC1udW1iZXIiLHtmb250Q2hhcmFjdGVyOiJcXGVhOTAifSksaS5zeW1ib2xTdHJ1Y3R1cmU9bmV3IGkoInN5bWJvbC1zdHJ1Y3R1cmUiLHtmb250Q2hhcmFjdGVyOiJcXGVhOTEifSksaS5zeW1ib2xTdHJ1Y3Q9bmV3IGkoInN5bWJvbC1zdHJ1Y3QiLHtmb250Q2hhcmFjdGVyOiJcXGVhOTEifSksaS5zeW1ib2xQYXJhbWV0ZXI9bmV3IGkoInN5bWJvbC1wYXJhbWV0ZXIiLHtmb250Q2hhcmFjdGVyOiJcXGVhOTIifSksaS5zeW1ib2xUeXBlUGFyYW1ldGVyPW5ldyBpKCJzeW1ib2wtdHlwZS1wYXJhbWV0ZXIiLHtmb250Q2hhcmFjdGVyOiJcXGVhOTIifSksaS5zeW1ib2xLZXk9bmV3IGkoInN5bWJvbC1rZXkiLHtmb250Q2hhcmFjdGVyOiJcXGVhOTMifSksaS5zeW1ib2xUZXh0PW5ldyBpKCJzeW1ib2wtdGV4dCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE5MyJ9KSxpLnN5bWJvbFJlZmVyZW5jZT1uZXcgaSgic3ltYm9sLXJlZmVyZW5jZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE5NCJ9KSxpLmdvVG9GaWxlPW5ldyBpKCJnby10by1maWxlIix7Zm9udENoYXJhY3RlcjoiXFxlYTk0In0pLGkuc3ltYm9sRW51bT1uZXcgaSgic3ltYm9sLWVudW0iLHtmb250Q2hhcmFjdGVyOiJcXGVhOTUifSksaS5zeW1ib2xWYWx1ZT1uZXcgaSgic3ltYm9sLXZhbHVlIix7Zm9udENoYXJhY3RlcjoiXFxlYTk1In0pLGkuc3ltYm9sUnVsZXI9bmV3IGkoInN5bWJvbC1ydWxlciIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE5NiJ9KSxpLnN5bWJvbFVuaXQ9bmV3IGkoInN5bWJvbC11bml0Iix7Zm9udENoYXJhY3RlcjoiXFxlYTk2In0pLGkuYWN0aXZhdGVCcmVha3BvaW50cz1uZXcgaSgiYWN0aXZhdGUtYnJlYWtwb2ludHMiLHtmb250Q2hhcmFjdGVyOiJcXGVhOTcifSksaS5hcmNoaXZlPW5ldyBpKCJhcmNoaXZlIix7Zm9udENoYXJhY3RlcjoiXFxlYTk4In0pLGkuYXJyb3dCb3RoPW5ldyBpKCJhcnJvdy1ib3RoIix7Zm9udENoYXJhY3RlcjoiXFxlYTk5In0pLGkuYXJyb3dEb3duPW5ldyBpKCJhcnJvdy1kb3duIix7Zm9udENoYXJhY3RlcjoiXFxlYTlhIn0pLGkuYXJyb3dMZWZ0PW5ldyBpKCJhcnJvdy1sZWZ0Iix7Zm9udENoYXJhY3RlcjoiXFxlYTliIn0pLGkuYXJyb3dSaWdodD1uZXcgaSgiYXJyb3ctcmlnaHQiLHtmb250Q2hhcmFjdGVyOiJcXGVhOWMifSksaS5hcnJvd1NtYWxsRG93bj1uZXcgaSgiYXJyb3ctc21hbGwtZG93biIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE5ZCJ9KSxpLmFycm93U21hbGxMZWZ0PW5ldyBpKCJhcnJvdy1zbWFsbC1sZWZ0Iix7Zm9udENoYXJhY3RlcjoiXFxlYTllIn0pLGkuYXJyb3dTbWFsbFJpZ2h0PW5ldyBpKCJhcnJvdy1zbWFsbC1yaWdodCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE5ZiJ9KSxpLmFycm93U21hbGxVcD1uZXcgaSgiYXJyb3ctc21hbGwtdXAiLHtmb250Q2hhcmFjdGVyOiJcXGVhYTAifSksaS5hcnJvd1VwPW5ldyBpKCJhcnJvdy11cCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFhMSJ9KSxpLmJlbGw9bmV3IGkoImJlbGwiLHtmb250Q2hhcmFjdGVyOiJcXGVhYTIifSksaS5ib2xkPW5ldyBpKCJib2xkIix7Zm9udENoYXJhY3RlcjoiXFxlYWEzIn0pLGkuYm9vaz1uZXcgaSgiYm9vayIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFhNCJ9KSxpLmJvb2ttYXJrPW5ldyBpKCJib29rbWFyayIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFhNSJ9KSxpLmRlYnVnQnJlYWtwb2ludENvbmRpdGlvbmFsVW52ZXJpZmllZD1uZXcgaSgiZGVidWctYnJlYWtwb2ludC1jb25kaXRpb25hbC11bnZlcmlmaWVkIix7Zm9udENoYXJhY3RlcjoiXFxlYWE2In0pLGkuZGVidWdCcmVha3BvaW50Q29uZGl0aW9uYWw9bmV3IGkoImRlYnVnLWJyZWFrcG9pbnQtY29uZGl0aW9uYWwiLHtmb250Q2hhcmFjdGVyOiJcXGVhYTcifSksaS5kZWJ1Z0JyZWFrcG9pbnRDb25kaXRpb25hbERpc2FibGVkPW5ldyBpKCJkZWJ1Zy1icmVha3BvaW50LWNvbmRpdGlvbmFsLWRpc2FibGVkIix7Zm9udENoYXJhY3RlcjoiXFxlYWE3In0pLGkuZGVidWdCcmVha3BvaW50RGF0YVVudmVyaWZpZWQ9bmV3IGkoImRlYnVnLWJyZWFrcG9pbnQtZGF0YS11bnZlcmlmaWVkIix7Zm9udENoYXJhY3RlcjoiXFxlYWE4In0pLGkuZGVidWdCcmVha3BvaW50RGF0YT1uZXcgaSgiZGVidWctYnJlYWtwb2ludC1kYXRhIix7Zm9udENoYXJhY3RlcjoiXFxlYWE5In0pLGkuZGVidWdCcmVha3BvaW50RGF0YURpc2FibGVkPW5ldyBpKCJkZWJ1Zy1icmVha3BvaW50LWRhdGEtZGlzYWJsZWQiLHtmb250Q2hhcmFjdGVyOiJcXGVhYTkifSksaS5kZWJ1Z0JyZWFrcG9pbnRMb2dVbnZlcmlmaWVkPW5ldyBpKCJkZWJ1Zy1icmVha3BvaW50LWxvZy11bnZlcmlmaWVkIix7Zm9udENoYXJhY3RlcjoiXFxlYWFhIn0pLGkuZGVidWdCcmVha3BvaW50TG9nPW5ldyBpKCJkZWJ1Zy1icmVha3BvaW50LWxvZyIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFhYiJ9KSxpLmRlYnVnQnJlYWtwb2ludExvZ0Rpc2FibGVkPW5ldyBpKCJkZWJ1Zy1icmVha3BvaW50LWxvZy1kaXNhYmxlZCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFhYiJ9KSxpLmJyaWVmY2FzZT1uZXcgaSgiYnJpZWZjYXNlIix7Zm9udENoYXJhY3RlcjoiXFxlYWFjIn0pLGkuYnJvYWRjYXN0PW5ldyBpKCJicm9hZGNhc3QiLHtmb250Q2hhcmFjdGVyOiJcXGVhYWQifSksaS5icm93c2VyPW5ldyBpKCJicm93c2VyIix7Zm9udENoYXJhY3RlcjoiXFxlYWFlIn0pLGkuYnVnPW5ldyBpKCJidWciLHtmb250Q2hhcmFjdGVyOiJcXGVhYWYifSksaS5jYWxlbmRhcj1uZXcgaSgiY2FsZW5kYXIiLHtmb250Q2hhcmFjdGVyOiJcXGVhYjAifSksaS5jYXNlU2Vuc2l0aXZlPW5ldyBpKCJjYXNlLXNlbnNpdGl2ZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFiMSJ9KSxpLmNoZWNrPW5ldyBpKCJjaGVjayIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFiMiJ9KSxpLmNoZWNrbGlzdD1uZXcgaSgiY2hlY2tsaXN0Iix7Zm9udENoYXJhY3RlcjoiXFxlYWIzIn0pLGkuY2hldnJvbkRvd249bmV3IGkoImNoZXZyb24tZG93biIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFiNCJ9KSxpLmRyb3BEb3duQnV0dG9uPW5ldyBpKCJkcm9wLWRvd24tYnV0dG9uIixpLmNoZXZyb25Eb3duLmRlZmluaXRpb24pLGkuY2hldnJvbkxlZnQ9bmV3IGkoImNoZXZyb24tbGVmdCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFiNSJ9KSxpLmNoZXZyb25SaWdodD1uZXcgaSgiY2hldnJvbi1yaWdodCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFiNiJ9KSxpLmNoZXZyb25VcD1uZXcgaSgiY2hldnJvbi11cCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFiNyJ9KSxpLmNocm9tZUNsb3NlPW5ldyBpKCJjaHJvbWUtY2xvc2UiLHtmb250Q2hhcmFjdGVyOiJcXGVhYjgifSksaS5jaHJvbWVNYXhpbWl6ZT1uZXcgaSgiY2hyb21lLW1heGltaXplIix7Zm9udENoYXJhY3RlcjoiXFxlYWI5In0pLGkuY2hyb21lTWluaW1pemU9bmV3IGkoImNocm9tZS1taW5pbWl6ZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFiYSJ9KSxpLmNocm9tZVJlc3RvcmU9bmV3IGkoImNocm9tZS1yZXN0b3JlIix7Zm9udENoYXJhY3RlcjoiXFxlYWJiIn0pLGkuY2lyY2xlT3V0bGluZT1uZXcgaSgiY2lyY2xlLW91dGxpbmUiLHtmb250Q2hhcmFjdGVyOiJcXGVhYmMifSksaS5kZWJ1Z0JyZWFrcG9pbnRVbnZlcmlmaWVkPW5ldyBpKCJkZWJ1Zy1icmVha3BvaW50LXVudmVyaWZpZWQiLHtmb250Q2hhcmFjdGVyOiJcXGVhYmMifSksaS5jaXJjbGVTbGFzaD1uZXcgaSgiY2lyY2xlLXNsYXNoIix7Zm9udENoYXJhY3RlcjoiXFxlYWJkIn0pLGkuY2lyY3VpdEJvYXJkPW5ldyBpKCJjaXJjdWl0LWJvYXJkIix7Zm9udENoYXJhY3RlcjoiXFxlYWJlIn0pLGkuY2xlYXJBbGw9bmV3IGkoImNsZWFyLWFsbCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFiZiJ9KSxpLmNsaXBweT1uZXcgaSgiY2xpcHB5Iix7Zm9udENoYXJhY3RlcjoiXFxlYWMwIn0pLGkuY2xvc2VBbGw9bmV3IGkoImNsb3NlLWFsbCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFjMSJ9KSxpLmNsb3VkRG93bmxvYWQ9bmV3IGkoImNsb3VkLWRvd25sb2FkIix7Zm9udENoYXJhY3RlcjoiXFxlYWMyIn0pLGkuY2xvdWRVcGxvYWQ9bmV3IGkoImNsb3VkLXVwbG9hZCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFjMyJ9KSxpLmNvZGU9bmV3IGkoImNvZGUiLHtmb250Q2hhcmFjdGVyOiJcXGVhYzQifSksaS5jb2xsYXBzZUFsbD1uZXcgaSgiY29sbGFwc2UtYWxsIix7Zm9udENoYXJhY3RlcjoiXFxlYWM1In0pLGkuY29sb3JNb2RlPW5ldyBpKCJjb2xvci1tb2RlIix7Zm9udENoYXJhY3RlcjoiXFxlYWM2In0pLGkuY29tbWVudERpc2N1c3Npb249bmV3IGkoImNvbW1lbnQtZGlzY3Vzc2lvbiIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFjNyJ9KSxpLmNvbXBhcmVDaGFuZ2VzPW5ldyBpKCJjb21wYXJlLWNoYW5nZXMiLHtmb250Q2hhcmFjdGVyOiJcXGVhZmQifSksaS5jcmVkaXRDYXJkPW5ldyBpKCJjcmVkaXQtY2FyZCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFjOSJ9KSxpLmRhc2g9bmV3IGkoImRhc2giLHtmb250Q2hhcmFjdGVyOiJcXGVhY2MifSksaS5kYXNoYm9hcmQ9bmV3IGkoImRhc2hib2FyZCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFjZCJ9KSxpLmRhdGFiYXNlPW5ldyBpKCJkYXRhYmFzZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFjZSJ9KSxpLmRlYnVnQ29udGludWU9bmV3IGkoImRlYnVnLWNvbnRpbnVlIix7Zm9udENoYXJhY3RlcjoiXFxlYWNmIn0pLGkuZGVidWdEaXNjb25uZWN0PW5ldyBpKCJkZWJ1Zy1kaXNjb25uZWN0Iix7Zm9udENoYXJhY3RlcjoiXFxlYWQwIn0pLGkuZGVidWdQYXVzZT1uZXcgaSgiZGVidWctcGF1c2UiLHtmb250Q2hhcmFjdGVyOiJcXGVhZDEifSksaS5kZWJ1Z1Jlc3RhcnQ9bmV3IGkoImRlYnVnLXJlc3RhcnQiLHtmb250Q2hhcmFjdGVyOiJcXGVhZDIifSksaS5kZWJ1Z1N0YXJ0PW5ldyBpKCJkZWJ1Zy1zdGFydCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFkMyJ9KSxpLmRlYnVnU3RlcEludG89bmV3IGkoImRlYnVnLXN0ZXAtaW50byIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFkNCJ9KSxpLmRlYnVnU3RlcE91dD1uZXcgaSgiZGVidWctc3RlcC1vdXQiLHtmb250Q2hhcmFjdGVyOiJcXGVhZDUifSksaS5kZWJ1Z1N0ZXBPdmVyPW5ldyBpKCJkZWJ1Zy1zdGVwLW92ZXIiLHtmb250Q2hhcmFjdGVyOiJcXGVhZDYifSksaS5kZWJ1Z1N0b3A9bmV3IGkoImRlYnVnLXN0b3AiLHtmb250Q2hhcmFjdGVyOiJcXGVhZDcifSksaS5kZWJ1Zz1uZXcgaSgiZGVidWciLHtmb250Q2hhcmFjdGVyOiJcXGVhZDgifSksaS5kZXZpY2VDYW1lcmFWaWRlbz1uZXcgaSgiZGV2aWNlLWNhbWVyYS12aWRlbyIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFkOSJ9KSxpLmRldmljZUNhbWVyYT1uZXcgaSgiZGV2aWNlLWNhbWVyYSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFkYSJ9KSxpLmRldmljZU1vYmlsZT1uZXcgaSgiZGV2aWNlLW1vYmlsZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFkYiJ9KSxpLmRpZmZBZGRlZD1uZXcgaSgiZGlmZi1hZGRlZCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFkYyJ9KSxpLmRpZmZJZ25vcmVkPW5ldyBpKCJkaWZmLWlnbm9yZWQiLHtmb250Q2hhcmFjdGVyOiJcXGVhZGQifSksaS5kaWZmTW9kaWZpZWQ9bmV3IGkoImRpZmYtbW9kaWZpZWQiLHtmb250Q2hhcmFjdGVyOiJcXGVhZGUifSksaS5kaWZmUmVtb3ZlZD1uZXcgaSgiZGlmZi1yZW1vdmVkIix7Zm9udENoYXJhY3RlcjoiXFxlYWRmIn0pLGkuZGlmZlJlbmFtZWQ9bmV3IGkoImRpZmYtcmVuYW1lZCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFlMCJ9KSxpLmRpZmY9bmV3IGkoImRpZmYiLHtmb250Q2hhcmFjdGVyOiJcXGVhZTEifSksaS5kaXNjYXJkPW5ldyBpKCJkaXNjYXJkIix7Zm9udENoYXJhY3RlcjoiXFxlYWUyIn0pLGkuZWRpdG9yTGF5b3V0PW5ldyBpKCJlZGl0b3ItbGF5b3V0Iix7Zm9udENoYXJhY3RlcjoiXFxlYWUzIn0pLGkuZW1wdHlXaW5kb3c9bmV3IGkoImVtcHR5LXdpbmRvdyIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFlNCJ9KSxpLmV4Y2x1ZGU9bmV3IGkoImV4Y2x1ZGUiLHtmb250Q2hhcmFjdGVyOiJcXGVhZTUifSksaS5leHRlbnNpb25zPW5ldyBpKCJleHRlbnNpb25zIix7Zm9udENoYXJhY3RlcjoiXFxlYWU2In0pLGkuZXllQ2xvc2VkPW5ldyBpKCJleWUtY2xvc2VkIix7Zm9udENoYXJhY3RlcjoiXFxlYWU3In0pLGkuZmlsZUJpbmFyeT1uZXcgaSgiZmlsZS1iaW5hcnkiLHtmb250Q2hhcmFjdGVyOiJcXGVhZTgifSksaS5maWxlQ29kZT1uZXcgaSgiZmlsZS1jb2RlIix7Zm9udENoYXJhY3RlcjoiXFxlYWU5In0pLGkuZmlsZU1lZGlhPW5ldyBpKCJmaWxlLW1lZGlhIix7Zm9udENoYXJhY3RlcjoiXFxlYWVhIn0pLGkuZmlsZVBkZj1uZXcgaSgiZmlsZS1wZGYiLHtmb250Q2hhcmFjdGVyOiJcXGVhZWIifSksaS5maWxlU3VibW9kdWxlPW5ldyBpKCJmaWxlLXN1Ym1vZHVsZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFlYyJ9KSxpLmZpbGVTeW1saW5rRGlyZWN0b3J5PW5ldyBpKCJmaWxlLXN5bWxpbmstZGlyZWN0b3J5Iix7Zm9udENoYXJhY3RlcjoiXFxlYWVkIn0pLGkuZmlsZVN5bWxpbmtGaWxlPW5ldyBpKCJmaWxlLXN5bWxpbmstZmlsZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFlZSJ9KSxpLmZpbGVaaXA9bmV3IGkoImZpbGUtemlwIix7Zm9udENoYXJhY3RlcjoiXFxlYWVmIn0pLGkuZmlsZXM9bmV3IGkoImZpbGVzIix7Zm9udENoYXJhY3RlcjoiXFxlYWYwIn0pLGkuZmlsdGVyPW5ldyBpKCJmaWx0ZXIiLHtmb250Q2hhcmFjdGVyOiJcXGVhZjEifSksaS5mbGFtZT1uZXcgaSgiZmxhbWUiLHtmb250Q2hhcmFjdGVyOiJcXGVhZjIifSksaS5mb2xkRG93bj1uZXcgaSgiZm9sZC1kb3duIix7Zm9udENoYXJhY3RlcjoiXFxlYWYzIn0pLGkuZm9sZFVwPW5ldyBpKCJmb2xkLXVwIix7Zm9udENoYXJhY3RlcjoiXFxlYWY0In0pLGkuZm9sZD1uZXcgaSgiZm9sZCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFmNSJ9KSxpLmZvbGRlckFjdGl2ZT1uZXcgaSgiZm9sZGVyLWFjdGl2ZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFmNiJ9KSxpLmZvbGRlck9wZW5lZD1uZXcgaSgiZm9sZGVyLW9wZW5lZCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFmNyJ9KSxpLmdlYXI9bmV3IGkoImdlYXIiLHtmb250Q2hhcmFjdGVyOiJcXGVhZjgifSksaS5naWZ0PW5ldyBpKCJnaWZ0Iix7Zm9udENoYXJhY3RlcjoiXFxlYWY5In0pLGkuZ2lzdFNlY3JldD1uZXcgaSgiZ2lzdC1zZWNyZXQiLHtmb250Q2hhcmFjdGVyOiJcXGVhZmEifSksaS5naXN0PW5ldyBpKCJnaXN0Iix7Zm9udENoYXJhY3RlcjoiXFxlYWZiIn0pLGkuZ2l0Q29tbWl0PW5ldyBpKCJnaXQtY29tbWl0Iix7Zm9udENoYXJhY3RlcjoiXFxlYWZjIn0pLGkuZ2l0Q29tcGFyZT1uZXcgaSgiZ2l0LWNvbXBhcmUiLHtmb250Q2hhcmFjdGVyOiJcXGVhZmQifSksaS5naXRNZXJnZT1uZXcgaSgiZ2l0LW1lcmdlIix7Zm9udENoYXJhY3RlcjoiXFxlYWZlIn0pLGkuZ2l0aHViQWN0aW9uPW5ldyBpKCJnaXRodWItYWN0aW9uIix7Zm9udENoYXJhY3RlcjoiXFxlYWZmIn0pLGkuZ2l0aHViQWx0PW5ldyBpKCJnaXRodWItYWx0Iix7Zm9udENoYXJhY3RlcjoiXFxlYjAwIn0pLGkuZ2xvYmU9bmV3IGkoImdsb2JlIix7Zm9udENoYXJhY3RlcjoiXFxlYjAxIn0pLGkuZ3JhYmJlcj1uZXcgaSgiZ3JhYmJlciIse2ZvbnRDaGFyYWN0ZXI6IlxcZWIwMiJ9KSxpLmdyYXBoPW5ldyBpKCJncmFwaCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWIwMyJ9KSxpLmdyaXBwZXI9bmV3IGkoImdyaXBwZXIiLHtmb250Q2hhcmFjdGVyOiJcXGViMDQifSksaS5oZWFydD1uZXcgaSgiaGVhcnQiLHtmb250Q2hhcmFjdGVyOiJcXGViMDUifSksaS5ob21lPW5ldyBpKCJob21lIix7Zm9udENoYXJhY3RlcjoiXFxlYjA2In0pLGkuaG9yaXpvbnRhbFJ1bGU9bmV3IGkoImhvcml6b250YWwtcnVsZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWIwNyJ9KSxpLmh1Ym90PW5ldyBpKCJodWJvdCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWIwOCJ9KSxpLmluYm94PW5ldyBpKCJpbmJveCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWIwOSJ9KSxpLmlzc3VlQ2xvc2VkPW5ldyBpKCJpc3N1ZS1jbG9zZWQiLHtmb250Q2hhcmFjdGVyOiJcXGViYTQifSksaS5pc3N1ZVJlb3BlbmVkPW5ldyBpKCJpc3N1ZS1yZW9wZW5lZCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWIwYiJ9KSxpLmlzc3Vlcz1uZXcgaSgiaXNzdWVzIix7Zm9udENoYXJhY3RlcjoiXFxlYjBjIn0pLGkuaXRhbGljPW5ldyBpKCJpdGFsaWMiLHtmb250Q2hhcmFjdGVyOiJcXGViMGQifSksaS5qZXJzZXk9bmV3IGkoImplcnNleSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWIwZSJ9KSxpLmpzb249bmV3IGkoImpzb24iLHtmb250Q2hhcmFjdGVyOiJcXGViMGYifSksaS5rZWJhYlZlcnRpY2FsPW5ldyBpKCJrZWJhYi12ZXJ0aWNhbCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWIxMCJ9KSxpLmtleT1uZXcgaSgia2V5Iix7Zm9udENoYXJhY3RlcjoiXFxlYjExIn0pLGkubGF3PW5ldyBpKCJsYXciLHtmb250Q2hhcmFjdGVyOiJcXGViMTIifSksaS5saWdodGJ1bGJBdXRvZml4PW5ldyBpKCJsaWdodGJ1bGItYXV0b2ZpeCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWIxMyJ9KSxpLmxpbmtFeHRlcm5hbD1uZXcgaSgibGluay1leHRlcm5hbCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWIxNCJ9KSxpLmxpbms9bmV3IGkoImxpbmsiLHtmb250Q2hhcmFjdGVyOiJcXGViMTUifSksaS5saXN0T3JkZXJlZD1uZXcgaSgibGlzdC1vcmRlcmVkIix7Zm9udENoYXJhY3RlcjoiXFxlYjE2In0pLGkubGlzdFVub3JkZXJlZD1uZXcgaSgibGlzdC11bm9yZGVyZWQiLHtmb250Q2hhcmFjdGVyOiJcXGViMTcifSksaS5saXZlU2hhcmU9bmV3IGkoImxpdmUtc2hhcmUiLHtmb250Q2hhcmFjdGVyOiJcXGViMTgifSksaS5sb2FkaW5nPW5ldyBpKCJsb2FkaW5nIix7Zm9udENoYXJhY3RlcjoiXFxlYjE5In0pLGkubG9jYXRpb249bmV3IGkoImxvY2F0aW9uIix7Zm9udENoYXJhY3RlcjoiXFxlYjFhIn0pLGkubWFpbFJlYWQ9bmV3IGkoIm1haWwtcmVhZCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWIxYiJ9KSxpLm1haWw9bmV3IGkoIm1haWwiLHtmb250Q2hhcmFjdGVyOiJcXGViMWMifSksaS5tYXJrZG93bj1uZXcgaSgibWFya2Rvd24iLHtmb250Q2hhcmFjdGVyOiJcXGViMWQifSksaS5tZWdhcGhvbmU9bmV3IGkoIm1lZ2FwaG9uZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWIxZSJ9KSxpLm1lbnRpb249bmV3IGkoIm1lbnRpb24iLHtmb250Q2hhcmFjdGVyOiJcXGViMWYifSksaS5taWxlc3RvbmU9bmV3IGkoIm1pbGVzdG9uZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWIyMCJ9KSxpLm1vcnRhckJvYXJkPW5ldyBpKCJtb3J0YXItYm9hcmQiLHtmb250Q2hhcmFjdGVyOiJcXGViMjEifSksaS5tb3ZlPW5ldyBpKCJtb3ZlIix7Zm9udENoYXJhY3RlcjoiXFxlYjIyIn0pLGkubXVsdGlwbGVXaW5kb3dzPW5ldyBpKCJtdWx0aXBsZS13aW5kb3dzIix7Zm9udENoYXJhY3RlcjoiXFxlYjIzIn0pLGkubXV0ZT1uZXcgaSgibXV0ZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWIyNCJ9KSxpLm5vTmV3bGluZT1uZXcgaSgibm8tbmV3bGluZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWIyNSJ9KSxpLm5vdGU9bmV3IGkoIm5vdGUiLHtmb250Q2hhcmFjdGVyOiJcXGViMjYifSksaS5vY3RvZmFjZT1uZXcgaSgib2N0b2ZhY2UiLHtmb250Q2hhcmFjdGVyOiJcXGViMjcifSksaS5vcGVuUHJldmlldz1uZXcgaSgib3Blbi1wcmV2aWV3Iix7Zm9udENoYXJhY3RlcjoiXFxlYjI4In0pLGkucGFja2FnZV89bmV3IGkoInBhY2thZ2UiLHtmb250Q2hhcmFjdGVyOiJcXGViMjkifSksaS5wYWludGNhbj1uZXcgaSgicGFpbnRjYW4iLHtmb250Q2hhcmFjdGVyOiJcXGViMmEifSksaS5waW49bmV3IGkoInBpbiIse2ZvbnRDaGFyYWN0ZXI6IlxcZWIyYiJ9KSxpLnBsYXk9bmV3IGkoInBsYXkiLHtmb250Q2hhcmFjdGVyOiJcXGViMmMifSksaS5ydW49bmV3IGkoInJ1biIse2ZvbnRDaGFyYWN0ZXI6IlxcZWIyYyJ9KSxpLnBsdWc9bmV3IGkoInBsdWciLHtmb250Q2hhcmFjdGVyOiJcXGViMmQifSksaS5wcmVzZXJ2ZUNhc2U9bmV3IGkoInByZXNlcnZlLWNhc2UiLHtmb250Q2hhcmFjdGVyOiJcXGViMmUifSksaS5wcmV2aWV3PW5ldyBpKCJwcmV2aWV3Iix7Zm9udENoYXJhY3RlcjoiXFxlYjJmIn0pLGkucHJvamVjdD1uZXcgaSgicHJvamVjdCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWIzMCJ9KSxpLnB1bHNlPW5ldyBpKCJwdWxzZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWIzMSJ9KSxpLnF1ZXN0aW9uPW5ldyBpKCJxdWVzdGlvbiIse2ZvbnRDaGFyYWN0ZXI6IlxcZWIzMiJ9KSxpLnF1b3RlPW5ldyBpKCJxdW90ZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWIzMyJ9KSxpLnJhZGlvVG93ZXI9bmV3IGkoInJhZGlvLXRvd2VyIix7Zm9udENoYXJhY3RlcjoiXFxlYjM0In0pLGkucmVhY3Rpb25zPW5ldyBpKCJyZWFjdGlvbnMiLHtmb250Q2hhcmFjdGVyOiJcXGViMzUifSksaS5yZWZlcmVuY2VzPW5ldyBpKCJyZWZlcmVuY2VzIix7Zm9udENoYXJhY3RlcjoiXFxlYjM2In0pLGkucmVmcmVzaD1uZXcgaSgicmVmcmVzaCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWIzNyJ9KSxpLnJlZ2V4PW5ldyBpKCJyZWdleCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWIzOCJ9KSxpLnJlbW90ZUV4cGxvcmVyPW5ldyBpKCJyZW1vdGUtZXhwbG9yZXIiLHtmb250Q2hhcmFjdGVyOiJcXGViMzkifSksaS5yZW1vdGU9bmV3IGkoInJlbW90ZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWIzYSJ9KSxpLnJlbW92ZT1uZXcgaSgicmVtb3ZlIix7Zm9udENoYXJhY3RlcjoiXFxlYjNiIn0pLGkucmVwbGFjZUFsbD1uZXcgaSgicmVwbGFjZS1hbGwiLHtmb250Q2hhcmFjdGVyOiJcXGViM2MifSksaS5yZXBsYWNlPW5ldyBpKCJyZXBsYWNlIix7Zm9udENoYXJhY3RlcjoiXFxlYjNkIn0pLGkucmVwb0Nsb25lPW5ldyBpKCJyZXBvLWNsb25lIix7Zm9udENoYXJhY3RlcjoiXFxlYjNlIn0pLGkucmVwb0ZvcmNlUHVzaD1uZXcgaSgicmVwby1mb3JjZS1wdXNoIix7Zm9udENoYXJhY3RlcjoiXFxlYjNmIn0pLGkucmVwb1B1bGw9bmV3IGkoInJlcG8tcHVsbCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI0MCJ9KSxpLnJlcG9QdXNoPW5ldyBpKCJyZXBvLXB1c2giLHtmb250Q2hhcmFjdGVyOiJcXGViNDEifSksaS5yZXBvcnQ9bmV3IGkoInJlcG9ydCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI0MiJ9KSxpLnJlcXVlc3RDaGFuZ2VzPW5ldyBpKCJyZXF1ZXN0LWNoYW5nZXMiLHtmb250Q2hhcmFjdGVyOiJcXGViNDMifSksaS5yb2NrZXQ9bmV3IGkoInJvY2tldCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI0NCJ9KSxpLnJvb3RGb2xkZXJPcGVuZWQ9bmV3IGkoInJvb3QtZm9sZGVyLW9wZW5lZCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI0NSJ9KSxpLnJvb3RGb2xkZXI9bmV3IGkoInJvb3QtZm9sZGVyIix7Zm9udENoYXJhY3RlcjoiXFxlYjQ2In0pLGkucnNzPW5ldyBpKCJyc3MiLHtmb250Q2hhcmFjdGVyOiJcXGViNDcifSksaS5ydWJ5PW5ldyBpKCJydWJ5Iix7Zm9udENoYXJhY3RlcjoiXFxlYjQ4In0pLGkuc2F2ZUFsbD1uZXcgaSgic2F2ZS1hbGwiLHtmb250Q2hhcmFjdGVyOiJcXGViNDkifSksaS5zYXZlQXM9bmV3IGkoInNhdmUtYXMiLHtmb250Q2hhcmFjdGVyOiJcXGViNGEifSksaS5zYXZlPW5ldyBpKCJzYXZlIix7Zm9udENoYXJhY3RlcjoiXFxlYjRiIn0pLGkuc2NyZWVuRnVsbD1uZXcgaSgic2NyZWVuLWZ1bGwiLHtmb250Q2hhcmFjdGVyOiJcXGViNGMifSksaS5zY3JlZW5Ob3JtYWw9bmV3IGkoInNjcmVlbi1ub3JtYWwiLHtmb250Q2hhcmFjdGVyOiJcXGViNGQifSksaS5zZWFyY2hTdG9wPW5ldyBpKCJzZWFyY2gtc3RvcCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI0ZSJ9KSxpLnNlcnZlcj1uZXcgaSgic2VydmVyIix7Zm9udENoYXJhY3RlcjoiXFxlYjUwIn0pLGkuc2V0dGluZ3NHZWFyPW5ldyBpKCJzZXR0aW5ncy1nZWFyIix7Zm9udENoYXJhY3RlcjoiXFxlYjUxIn0pLGkuc2V0dGluZ3M9bmV3IGkoInNldHRpbmdzIix7Zm9udENoYXJhY3RlcjoiXFxlYjUyIn0pLGkuc2hpZWxkPW5ldyBpKCJzaGllbGQiLHtmb250Q2hhcmFjdGVyOiJcXGViNTMifSksaS5zbWlsZXk9bmV3IGkoInNtaWxleSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI1NCJ9KSxpLnNvcnRQcmVjZWRlbmNlPW5ldyBpKCJzb3J0LXByZWNlZGVuY2UiLHtmb250Q2hhcmFjdGVyOiJcXGViNTUifSksaS5zcGxpdEhvcml6b250YWw9bmV3IGkoInNwbGl0LWhvcml6b250YWwiLHtmb250Q2hhcmFjdGVyOiJcXGViNTYifSksaS5zcGxpdFZlcnRpY2FsPW5ldyBpKCJzcGxpdC12ZXJ0aWNhbCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI1NyJ9KSxpLnNxdWlycmVsPW5ldyBpKCJzcXVpcnJlbCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI1OCJ9KSxpLnN0YXJGdWxsPW5ldyBpKCJzdGFyLWZ1bGwiLHtmb250Q2hhcmFjdGVyOiJcXGViNTkifSksaS5zdGFySGFsZj1uZXcgaSgic3Rhci1oYWxmIix7Zm9udENoYXJhY3RlcjoiXFxlYjVhIn0pLGkuc3ltYm9sQ2xhc3M9bmV3IGkoInN5bWJvbC1jbGFzcyIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI1YiJ9KSxpLnN5bWJvbENvbG9yPW5ldyBpKCJzeW1ib2wtY29sb3IiLHtmb250Q2hhcmFjdGVyOiJcXGViNWMifSksaS5zeW1ib2xDdXN0b21Db2xvcj1uZXcgaSgic3ltYm9sLWN1c3RvbWNvbG9yIix7Zm9udENoYXJhY3RlcjoiXFxlYjVjIn0pLGkuc3ltYm9sQ29uc3RhbnQ9bmV3IGkoInN5bWJvbC1jb25zdGFudCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI1ZCJ9KSxpLnN5bWJvbEVudW1NZW1iZXI9bmV3IGkoInN5bWJvbC1lbnVtLW1lbWJlciIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI1ZSJ9KSxpLnN5bWJvbEZpZWxkPW5ldyBpKCJzeW1ib2wtZmllbGQiLHtmb250Q2hhcmFjdGVyOiJcXGViNWYifSksaS5zeW1ib2xGaWxlPW5ldyBpKCJzeW1ib2wtZmlsZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI2MCJ9KSxpLnN5bWJvbEludGVyZmFjZT1uZXcgaSgic3ltYm9sLWludGVyZmFjZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI2MSJ9KSxpLnN5bWJvbEtleXdvcmQ9bmV3IGkoInN5bWJvbC1rZXl3b3JkIix7Zm9udENoYXJhY3RlcjoiXFxlYjYyIn0pLGkuc3ltYm9sTWlzYz1uZXcgaSgic3ltYm9sLW1pc2MiLHtmb250Q2hhcmFjdGVyOiJcXGViNjMifSksaS5zeW1ib2xPcGVyYXRvcj1uZXcgaSgic3ltYm9sLW9wZXJhdG9yIix7Zm9udENoYXJhY3RlcjoiXFxlYjY0In0pLGkuc3ltYm9sUHJvcGVydHk9bmV3IGkoInN5bWJvbC1wcm9wZXJ0eSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI2NSJ9KSxpLndyZW5jaD1uZXcgaSgid3JlbmNoIix7Zm9udENoYXJhY3RlcjoiXFxlYjY1In0pLGkud3JlbmNoU3ViYWN0aW9uPW5ldyBpKCJ3cmVuY2gtc3ViYWN0aW9uIix7Zm9udENoYXJhY3RlcjoiXFxlYjY1In0pLGkuc3ltYm9sU25pcHBldD1uZXcgaSgic3ltYm9sLXNuaXBwZXQiLHtmb250Q2hhcmFjdGVyOiJcXGViNjYifSksaS50YXNrbGlzdD1uZXcgaSgidGFza2xpc3QiLHtmb250Q2hhcmFjdGVyOiJcXGViNjcifSksaS50ZWxlc2NvcGU9bmV3IGkoInRlbGVzY29wZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI2OCJ9KSxpLnRleHRTaXplPW5ldyBpKCJ0ZXh0LXNpemUiLHtmb250Q2hhcmFjdGVyOiJcXGViNjkifSksaS50aHJlZUJhcnM9bmV3IGkoInRocmVlLWJhcnMiLHtmb250Q2hhcmFjdGVyOiJcXGViNmEifSksaS50aHVtYnNkb3duPW5ldyBpKCJ0aHVtYnNkb3duIix7Zm9udENoYXJhY3RlcjoiXFxlYjZiIn0pLGkudGh1bWJzdXA9bmV3IGkoInRodW1ic3VwIix7Zm9udENoYXJhY3RlcjoiXFxlYjZjIn0pLGkudG9vbHM9bmV3IGkoInRvb2xzIix7Zm9udENoYXJhY3RlcjoiXFxlYjZkIn0pLGkudHJpYW5nbGVEb3duPW5ldyBpKCJ0cmlhbmdsZS1kb3duIix7Zm9udENoYXJhY3RlcjoiXFxlYjZlIn0pLGkudHJpYW5nbGVMZWZ0PW5ldyBpKCJ0cmlhbmdsZS1sZWZ0Iix7Zm9udENoYXJhY3RlcjoiXFxlYjZmIn0pLGkudHJpYW5nbGVSaWdodD1uZXcgaSgidHJpYW5nbGUtcmlnaHQiLHtmb250Q2hhcmFjdGVyOiJcXGViNzAifSksaS50cmlhbmdsZVVwPW5ldyBpKCJ0cmlhbmdsZS11cCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI3MSJ9KSxpLnR3aXR0ZXI9bmV3IGkoInR3aXR0ZXIiLHtmb250Q2hhcmFjdGVyOiJcXGViNzIifSksaS51bmZvbGQ9bmV3IGkoInVuZm9sZCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI3MyJ9KSxpLnVubG9jaz1uZXcgaSgidW5sb2NrIix7Zm9udENoYXJhY3RlcjoiXFxlYjc0In0pLGkudW5tdXRlPW5ldyBpKCJ1bm11dGUiLHtmb250Q2hhcmFjdGVyOiJcXGViNzUifSksaS51bnZlcmlmaWVkPW5ldyBpKCJ1bnZlcmlmaWVkIix7Zm9udENoYXJhY3RlcjoiXFxlYjc2In0pLGkudmVyaWZpZWQ9bmV3IGkoInZlcmlmaWVkIix7Zm9udENoYXJhY3RlcjoiXFxlYjc3In0pLGkudmVyc2lvbnM9bmV3IGkoInZlcnNpb25zIix7Zm9udENoYXJhY3RlcjoiXFxlYjc4In0pLGkudm1BY3RpdmU9bmV3IGkoInZtLWFjdGl2ZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI3OSJ9KSxpLnZtT3V0bGluZT1uZXcgaSgidm0tb3V0bGluZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI3YSJ9KSxpLnZtUnVubmluZz1uZXcgaSgidm0tcnVubmluZyIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI3YiJ9KSxpLndhdGNoPW5ldyBpKCJ3YXRjaCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI3YyJ9KSxpLndoaXRlc3BhY2U9bmV3IGkoIndoaXRlc3BhY2UiLHtmb250Q2hhcmFjdGVyOiJcXGViN2QifSksaS53aG9sZVdvcmQ9bmV3IGkoIndob2xlLXdvcmQiLHtmb250Q2hhcmFjdGVyOiJcXGViN2UifSksaS53aW5kb3c9bmV3IGkoIndpbmRvdyIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI3ZiJ9KSxpLndvcmRXcmFwPW5ldyBpKCJ3b3JkLXdyYXAiLHtmb250Q2hhcmFjdGVyOiJcXGViODAifSksaS56b29tSW49bmV3IGkoInpvb20taW4iLHtmb250Q2hhcmFjdGVyOiJcXGViODEifSksaS56b29tT3V0PW5ldyBpKCJ6b29tLW91dCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI4MiJ9KSxpLmxpc3RGaWx0ZXI9bmV3IGkoImxpc3QtZmlsdGVyIix7Zm9udENoYXJhY3RlcjoiXFxlYjgzIn0pLGkubGlzdEZsYXQ9bmV3IGkoImxpc3QtZmxhdCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI4NCJ9KSxpLmxpc3RTZWxlY3Rpb249bmV3IGkoImxpc3Qtc2VsZWN0aW9uIix7Zm9udENoYXJhY3RlcjoiXFxlYjg1In0pLGkuc2VsZWN0aW9uPW5ldyBpKCJzZWxlY3Rpb24iLHtmb250Q2hhcmFjdGVyOiJcXGViODUifSksaS5saXN0VHJlZT1uZXcgaSgibGlzdC10cmVlIix7Zm9udENoYXJhY3RlcjoiXFxlYjg2In0pLGkuZGVidWdCcmVha3BvaW50RnVuY3Rpb25VbnZlcmlmaWVkPW5ldyBpKCJkZWJ1Zy1icmVha3BvaW50LWZ1bmN0aW9uLXVudmVyaWZpZWQiLHtmb250Q2hhcmFjdGVyOiJcXGViODcifSksaS5kZWJ1Z0JyZWFrcG9pbnRGdW5jdGlvbj1uZXcgaSgiZGVidWctYnJlYWtwb2ludC1mdW5jdGlvbiIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI4OCJ9KSxpLmRlYnVnQnJlYWtwb2ludEZ1bmN0aW9uRGlzYWJsZWQ9bmV3IGkoImRlYnVnLWJyZWFrcG9pbnQtZnVuY3Rpb24tZGlzYWJsZWQiLHtmb250Q2hhcmFjdGVyOiJcXGViODgifSksaS5kZWJ1Z1N0YWNrZnJhbWVBY3RpdmU9bmV3IGkoImRlYnVnLXN0YWNrZnJhbWUtYWN0aXZlIix7Zm9udENoYXJhY3RlcjoiXFxlYjg5In0pLGkuZGVidWdTdGFja2ZyYW1lRG90PW5ldyBpKCJkZWJ1Zy1zdGFja2ZyYW1lLWRvdCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI4YSJ9KSxpLmRlYnVnU3RhY2tmcmFtZT1uZXcgaSgiZGVidWctc3RhY2tmcmFtZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI4YiJ9KSxpLmRlYnVnU3RhY2tmcmFtZUZvY3VzZWQ9bmV3IGkoImRlYnVnLXN0YWNrZnJhbWUtZm9jdXNlZCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI4YiJ9KSxpLmRlYnVnQnJlYWtwb2ludFVuc3VwcG9ydGVkPW5ldyBpKCJkZWJ1Zy1icmVha3BvaW50LXVuc3VwcG9ydGVkIix7Zm9udENoYXJhY3RlcjoiXFxlYjhjIn0pLGkuc3ltYm9sU3RyaW5nPW5ldyBpKCJzeW1ib2wtc3RyaW5nIix7Zm9udENoYXJhY3RlcjoiXFxlYjhkIn0pLGkuZGVidWdSZXZlcnNlQ29udGludWU9bmV3IGkoImRlYnVnLXJldmVyc2UtY29udGludWUiLHtmb250Q2hhcmFjdGVyOiJcXGViOGUifSksaS5kZWJ1Z1N0ZXBCYWNrPW5ldyBpKCJkZWJ1Zy1zdGVwLWJhY2siLHtmb250Q2hhcmFjdGVyOiJcXGViOGYifSksaS5kZWJ1Z1Jlc3RhcnRGcmFtZT1uZXcgaSgiZGVidWctcmVzdGFydC1mcmFtZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI5MCJ9KSxpLmNhbGxJbmNvbWluZz1uZXcgaSgiY2FsbC1pbmNvbWluZyIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI5MiJ9KSxpLmNhbGxPdXRnb2luZz1uZXcgaSgiY2FsbC1vdXRnb2luZyIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI5MyJ9KSxpLm1lbnU9bmV3IGkoIm1lbnUiLHtmb250Q2hhcmFjdGVyOiJcXGViOTQifSksaS5leHBhbmRBbGw9bmV3IGkoImV4cGFuZC1hbGwiLHtmb250Q2hhcmFjdGVyOiJcXGViOTUifSksaS5mZWVkYmFjaz1uZXcgaSgiZmVlZGJhY2siLHtmb250Q2hhcmFjdGVyOiJcXGViOTYifSksaS5ncm91cEJ5UmVmVHlwZT1uZXcgaSgiZ3JvdXAtYnktcmVmLXR5cGUiLHtmb250Q2hhcmFjdGVyOiJcXGViOTcifSksaS51bmdyb3VwQnlSZWZUeXBlPW5ldyBpKCJ1bmdyb3VwLWJ5LXJlZi10eXBlIix7Zm9udENoYXJhY3RlcjoiXFxlYjk4In0pLGkuYWNjb3VudD1uZXcgaSgiYWNjb3VudCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI5OSJ9KSxpLmJlbGxEb3Q9bmV3IGkoImJlbGwtZG90Iix7Zm9udENoYXJhY3RlcjoiXFxlYjlhIn0pLGkuZGVidWdDb25zb2xlPW5ldyBpKCJkZWJ1Zy1jb25zb2xlIix7Zm9udENoYXJhY3RlcjoiXFxlYjliIn0pLGkubGlicmFyeT1uZXcgaSgibGlicmFyeSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI5YyJ9KSxpLm91dHB1dD1uZXcgaSgib3V0cHV0Iix7Zm9udENoYXJhY3RlcjoiXFxlYjlkIn0pLGkucnVuQWxsPW5ldyBpKCJydW4tYWxsIix7Zm9udENoYXJhY3RlcjoiXFxlYjllIn0pLGkuc3luY0lnbm9yZWQ9bmV3IGkoInN5bmMtaWdub3JlZCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI5ZiJ9KSxpLnBpbm5lZD1uZXcgaSgicGlubmVkIix7Zm9udENoYXJhY3RlcjoiXFxlYmEwIn0pLGkuZ2l0aHViSW52ZXJ0ZWQ9bmV3IGkoImdpdGh1Yi1pbnZlcnRlZCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJhMSJ9KSxpLmRlYnVnQWx0PW5ldyBpKCJkZWJ1Zy1hbHQiLHtmb250Q2hhcmFjdGVyOiJcXGViOTEifSksaS5zZXJ2ZXJQcm9jZXNzPW5ldyBpKCJzZXJ2ZXItcHJvY2VzcyIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJhMiJ9KSxpLnNlcnZlckVudmlyb25tZW50PW5ldyBpKCJzZXJ2ZXItZW52aXJvbm1lbnQiLHtmb250Q2hhcmFjdGVyOiJcXGViYTMifSksaS5wYXNzPW5ldyBpKCJwYXNzIix7Zm9udENoYXJhY3RlcjoiXFxlYmE0In0pLGkuc3RvcENpcmNsZT1uZXcgaSgic3RvcC1jaXJjbGUiLHtmb250Q2hhcmFjdGVyOiJcXGViYTUifSksaS5wbGF5Q2lyY2xlPW5ldyBpKCJwbGF5LWNpcmNsZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJhNiJ9KSxpLnJlY29yZD1uZXcgaSgicmVjb3JkIix7Zm9udENoYXJhY3RlcjoiXFxlYmE3In0pLGkuZGVidWdBbHRTbWFsbD1uZXcgaSgiZGVidWctYWx0LXNtYWxsIix7Zm9udENoYXJhY3RlcjoiXFxlYmE4In0pLGkudm1Db25uZWN0PW5ldyBpKCJ2bS1jb25uZWN0Iix7Zm9udENoYXJhY3RlcjoiXFxlYmE5In0pLGkuY2xvdWQ9bmV3IGkoImNsb3VkIix7Zm9udENoYXJhY3RlcjoiXFxlYmFhIn0pLGkubWVyZ2U9bmV3IGkoIm1lcmdlIix7Zm9udENoYXJhY3RlcjoiXFxlYmFiIn0pLGkuZXhwb3J0SWNvbj1uZXcgaSgiZXhwb3J0Iix7Zm9udENoYXJhY3RlcjoiXFxlYmFjIn0pLGkuZ3JhcGhMZWZ0PW5ldyBpKCJncmFwaC1sZWZ0Iix7Zm9udENoYXJhY3RlcjoiXFxlYmFkIn0pLGkubWFnbmV0PW5ldyBpKCJtYWduZXQiLHtmb250Q2hhcmFjdGVyOiJcXGViYWUifSksaS5ub3RlYm9vaz1uZXcgaSgibm90ZWJvb2siLHtmb250Q2hhcmFjdGVyOiJcXGViYWYifSksaS5yZWRvPW5ldyBpKCJyZWRvIix7Zm9udENoYXJhY3RlcjoiXFxlYmIwIn0pLGkuY2hlY2tBbGw9bmV3IGkoImNoZWNrLWFsbCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJiMSJ9KSxpLnBpbm5lZERpcnR5PW5ldyBpKCJwaW5uZWQtZGlydHkiLHtmb250Q2hhcmFjdGVyOiJcXGViYjIifSksaS5wYXNzRmlsbGVkPW5ldyBpKCJwYXNzLWZpbGxlZCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJiMyJ9KSxpLmNpcmNsZUxhcmdlRmlsbGVkPW5ldyBpKCJjaXJjbGUtbGFyZ2UtZmlsbGVkIix7Zm9udENoYXJhY3RlcjoiXFxlYmI0In0pLGkuY2lyY2xlTGFyZ2VPdXRsaW5lPW5ldyBpKCJjaXJjbGUtbGFyZ2Utb3V0bGluZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJiNSJ9KSxpLmNvbWJpbmU9bmV3IGkoImNvbWJpbmUiLHtmb250Q2hhcmFjdGVyOiJcXGViYjYifSksaS5nYXRoZXI9bmV3IGkoImdhdGhlciIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJiNiJ9KSxpLnRhYmxlPW5ldyBpKCJ0YWJsZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJiNyJ9KSxpLnZhcmlhYmxlR3JvdXA9bmV3IGkoInZhcmlhYmxlLWdyb3VwIix7Zm9udENoYXJhY3RlcjoiXFxlYmI4In0pLGkudHlwZUhpZXJhcmNoeT1uZXcgaSgidHlwZS1oaWVyYXJjaHkiLHtmb250Q2hhcmFjdGVyOiJcXGViYjkifSksaS50eXBlSGllcmFyY2h5U3ViPW5ldyBpKCJ0eXBlLWhpZXJhcmNoeS1zdWIiLHtmb250Q2hhcmFjdGVyOiJcXGViYmEifSksaS50eXBlSGllcmFyY2h5U3VwZXI9bmV3IGkoInR5cGUtaGllcmFyY2h5LXN1cGVyIix7Zm9udENoYXJhY3RlcjoiXFxlYmJiIn0pLGkuZ2l0UHVsbFJlcXVlc3RDcmVhdGU9bmV3IGkoImdpdC1wdWxsLXJlcXVlc3QtY3JlYXRlIix7Zm9udENoYXJhY3RlcjoiXFxlYmJjIn0pLGkucnVuQWJvdmU9bmV3IGkoInJ1bi1hYm92ZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJiZCJ9KSxpLnJ1bkJlbG93PW5ldyBpKCJydW4tYmVsb3ciLHtmb250Q2hhcmFjdGVyOiJcXGViYmUifSksaS5ub3RlYm9va1RlbXBsYXRlPW5ldyBpKCJub3RlYm9vay10ZW1wbGF0ZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJiZiJ9KSxpLmRlYnVnUmVydW49bmV3IGkoImRlYnVnLXJlcnVuIix7Zm9udENoYXJhY3RlcjoiXFxlYmMwIn0pLGkud29ya3NwYWNlVHJ1c3RlZD1uZXcgaSgid29ya3NwYWNlLXRydXN0ZWQiLHtmb250Q2hhcmFjdGVyOiJcXGViYzEifSksaS53b3Jrc3BhY2VVbnRydXN0ZWQ9bmV3IGkoIndvcmtzcGFjZS11bnRydXN0ZWQiLHtmb250Q2hhcmFjdGVyOiJcXGViYzIifSksaS53b3Jrc3BhY2VVbnNwZWNpZmllZD1uZXcgaSgid29ya3NwYWNlLXVuc3BlY2lmaWVkIix7Zm9udENoYXJhY3RlcjoiXFxlYmMzIn0pLGkudGVybWluYWxDbWQ9bmV3IGkoInRlcm1pbmFsLWNtZCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJjNCJ9KSxpLnRlcm1pbmFsRGViaWFuPW5ldyBpKCJ0ZXJtaW5hbC1kZWJpYW4iLHtmb250Q2hhcmFjdGVyOiJcXGViYzUifSksaS50ZXJtaW5hbExpbnV4PW5ldyBpKCJ0ZXJtaW5hbC1saW51eCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJjNiJ9KSxpLnRlcm1pbmFsUG93ZXJzaGVsbD1uZXcgaSgidGVybWluYWwtcG93ZXJzaGVsbCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJjNyJ9KSxpLnRlcm1pbmFsVG11eD1uZXcgaSgidGVybWluYWwtdG11eCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJjOCJ9KSxpLnRlcm1pbmFsVWJ1bnR1PW5ldyBpKCJ0ZXJtaW5hbC11YnVudHUiLHtmb250Q2hhcmFjdGVyOiJcXGViYzkifSksaS50ZXJtaW5hbEJhc2g9bmV3IGkoInRlcm1pbmFsLWJhc2giLHtmb250Q2hhcmFjdGVyOiJcXGViY2EifSksaS5hcnJvd1N3YXA9bmV3IGkoImFycm93LXN3YXAiLHtmb250Q2hhcmFjdGVyOiJcXGViY2IifSksaS5jb3B5PW5ldyBpKCJjb3B5Iix7Zm9udENoYXJhY3RlcjoiXFxlYmNjIn0pLGkucGVyc29uQWRkPW5ldyBpKCJwZXJzb24tYWRkIix7Zm9udENoYXJhY3RlcjoiXFxlYmNkIn0pLGkuZmlsdGVyRmlsbGVkPW5ldyBpKCJmaWx0ZXItZmlsbGVkIix7Zm9udENoYXJhY3RlcjoiXFxlYmNlIn0pLGkud2FuZD1uZXcgaSgid2FuZCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJjZiJ9KSxpLmRlYnVnTGluZUJ5TGluZT1uZXcgaSgiZGVidWctbGluZS1ieS1saW5lIix7Zm9udENoYXJhY3RlcjoiXFxlYmQwIn0pLGkuaW5zcGVjdD1uZXcgaSgiaW5zcGVjdCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJkMSJ9KSxpLmxheWVycz1uZXcgaSgibGF5ZXJzIix7Zm9udENoYXJhY3RlcjoiXFxlYmQyIn0pLGkubGF5ZXJzRG90PW5ldyBpKCJsYXllcnMtZG90Iix7Zm9udENoYXJhY3RlcjoiXFxlYmQzIn0pLGkubGF5ZXJzQWN0aXZlPW5ldyBpKCJsYXllcnMtYWN0aXZlIix7Zm9udENoYXJhY3RlcjoiXFxlYmQ0In0pLGkuY29tcGFzcz1uZXcgaSgiY29tcGFzcyIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJkNSJ9KSxpLmNvbXBhc3NEb3Q9bmV3IGkoImNvbXBhc3MtZG90Iix7Zm9udENoYXJhY3RlcjoiXFxlYmQ2In0pLGkuY29tcGFzc0FjdGl2ZT1uZXcgaSgiY29tcGFzcy1hY3RpdmUiLHtmb250Q2hhcmFjdGVyOiJcXGViZDcifSksaS5henVyZT1uZXcgaSgiYXp1cmUiLHtmb250Q2hhcmFjdGVyOiJcXGViZDgifSksaS5pc3N1ZURyYWZ0PW5ldyBpKCJpc3N1ZS1kcmFmdCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJkOSJ9KSxpLmdpdFB1bGxSZXF1ZXN0Q2xvc2VkPW5ldyBpKCJnaXQtcHVsbC1yZXF1ZXN0LWNsb3NlZCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJkYSJ9KSxpLmdpdFB1bGxSZXF1ZXN0RHJhZnQ9bmV3IGkoImdpdC1wdWxsLXJlcXVlc3QtZHJhZnQiLHtmb250Q2hhcmFjdGVyOiJcXGViZGIifSksaS5kZWJ1Z0FsbD1uZXcgaSgiZGVidWctYWxsIix7Zm9udENoYXJhY3RlcjoiXFxlYmRjIn0pLGkuZGVidWdDb3ZlcmFnZT1uZXcgaSgiZGVidWctY292ZXJhZ2UiLHtmb250Q2hhcmFjdGVyOiJcXGViZGQifSksaS5ydW5FcnJvcnM9bmV3IGkoInJ1bi1lcnJvcnMiLHtmb250Q2hhcmFjdGVyOiJcXGViZGUifSksaS5mb2xkZXJMaWJyYXJ5PW5ldyBpKCJmb2xkZXItbGlicmFyeSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJkZiJ9KSxpLmRlYnVnQ29udGludWVTbWFsbD1uZXcgaSgiZGVidWctY29udGludWUtc21hbGwiLHtmb250Q2hhcmFjdGVyOiJcXGViZTAifSksaS5iZWFrZXJTdG9wPW5ldyBpKCJiZWFrZXItc3RvcCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJlMSJ9KSxpLmdyYXBoTGluZT1uZXcgaSgiZ3JhcGgtbGluZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJlMiJ9KSxpLmdyYXBoU2NhdHRlcj1uZXcgaSgiZ3JhcGgtc2NhdHRlciIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJlMyJ9KSxpLnBpZUNoYXJ0PW5ldyBpKCJwaWUtY2hhcnQiLHtmb250Q2hhcmFjdGVyOiJcXGViZTQifSksaS5icmFja2V0PW5ldyBpKCJicmFja2V0IixpLmpzb24uZGVmaW5pdGlvbiksaS5icmFja2V0RG90PW5ldyBpKCJicmFja2V0LWRvdCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJlNSJ9KSxpLmJyYWNrZXRFcnJvcj1uZXcgaSgiYnJhY2tldC1lcnJvciIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJlNiJ9KSxpLmxvY2tTbWFsbD1uZXcgaSgibG9jay1zbWFsbCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJlNyJ9KSxpLmF6dXJlRGV2b3BzPW5ldyBpKCJhenVyZS1kZXZvcHMiLHtmb250Q2hhcmFjdGVyOiJcXGViZTgifSksaS52ZXJpZmllZEZpbGxlZD1uZXcgaSgidmVyaWZpZWQtZmlsbGVkIix7Zm9udENoYXJhY3RlcjoiXFxlYmU5In0pLGkubmV3TGluZT1uZXcgaSgibmV3bGluZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJlYSJ9KSxpLmxheW91dD1uZXcgaSgibGF5b3V0Iix7Zm9udENoYXJhY3RlcjoiXFxlYmViIn0pLGkubGF5b3V0QWN0aXZpdHliYXJMZWZ0PW5ldyBpKCJsYXlvdXQtYWN0aXZpdHliYXItbGVmdCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJlYyJ9KSxpLmxheW91dEFjdGl2aXR5YmFyUmlnaHQ9bmV3IGkoImxheW91dC1hY3Rpdml0eWJhci1yaWdodCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJlZCJ9KSxpLmxheW91dFBhbmVsTGVmdD1uZXcgaSgibGF5b3V0LXBhbmVsLWxlZnQiLHtmb250Q2hhcmFjdGVyOiJcXGViZWUifSksaS5sYXlvdXRQYW5lbENlbnRlcj1uZXcgaSgibGF5b3V0LXBhbmVsLWNlbnRlciIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJlZiJ9KSxpLmxheW91dFBhbmVsSnVzdGlmeT1uZXcgaSgibGF5b3V0LXBhbmVsLWp1c3RpZnkiLHtmb250Q2hhcmFjdGVyOiJcXGViZjAifSksaS5sYXlvdXRQYW5lbFJpZ2h0PW5ldyBpKCJsYXlvdXQtcGFuZWwtcmlnaHQiLHtmb250Q2hhcmFjdGVyOiJcXGViZjEifSksaS5sYXlvdXRQYW5lbD1uZXcgaSgibGF5b3V0LXBhbmVsIix7Zm9udENoYXJhY3RlcjoiXFxlYmYyIn0pLGkubGF5b3V0U2lkZWJhckxlZnQ9bmV3IGkoImxheW91dC1zaWRlYmFyLWxlZnQiLHtmb250Q2hhcmFjdGVyOiJcXGViZjMifSksaS5sYXlvdXRTaWRlYmFyUmlnaHQ9bmV3IGkoImxheW91dC1zaWRlYmFyLXJpZ2h0Iix7Zm9udENoYXJhY3RlcjoiXFxlYmY0In0pLGkubGF5b3V0U3RhdHVzYmFyPW5ldyBpKCJsYXlvdXQtc3RhdHVzYmFyIix7Zm9udENoYXJhY3RlcjoiXFxlYmY1In0pLGkubGF5b3V0TWVudWJhcj1uZXcgaSgibGF5b3V0LW1lbnViYXIiLHtmb250Q2hhcmFjdGVyOiJcXGViZjYifSksaS5sYXlvdXRDZW50ZXJlZD1uZXcgaSgibGF5b3V0LWNlbnRlcmVkIix7Zm9udENoYXJhY3RlcjoiXFxlYmY3In0pLGkudGFyZ2V0PW5ldyBpKCJ0YXJnZXQiLHtmb250Q2hhcmFjdGVyOiJcXGViZjgifSksaS5kaWFsb2dFcnJvcj1uZXcgaSgiZGlhbG9nLWVycm9yIixpLmVycm9yLmRlZmluaXRpb24pLGkuZGlhbG9nV2FybmluZz1uZXcgaSgiZGlhbG9nLXdhcm5pbmciLGkud2FybmluZy5kZWZpbml0aW9uKSxpLmRpYWxvZ0luZm89bmV3IGkoImRpYWxvZy1pbmZvIixpLmluZm8uZGVmaW5pdGlvbiksaS5kaWFsb2dDbG9zZT1uZXcgaSgiZGlhbG9nLWNsb3NlIixpLmNsb3NlLmRlZmluaXRpb24pLGkudHJlZUl0ZW1FeHBhbmRlZD1uZXcgaSgidHJlZS1pdGVtLWV4cGFuZGVkIixpLmNoZXZyb25Eb3duLmRlZmluaXRpb24pLGkudHJlZUZpbHRlck9uVHlwZU9uPW5ldyBpKCJ0cmVlLWZpbHRlci1vbi10eXBlLW9uIixpLmxpc3RGaWx0ZXIuZGVmaW5pdGlvbiksaS50cmVlRmlsdGVyT25UeXBlT2ZmPW5ldyBpKCJ0cmVlLWZpbHRlci1vbi10eXBlLW9mZiIsaS5saXN0U2VsZWN0aW9uLmRlZmluaXRpb24pLGkudHJlZUZpbHRlckNsZWFyPW5ldyBpKCJ0cmVlLWZpbHRlci1jbGVhciIsaS5jbG9zZS5kZWZpbml0aW9uKSxpLnRyZWVJdGVtTG9hZGluZz1uZXcgaSgidHJlZS1pdGVtLWxvYWRpbmciLGkubG9hZGluZy5kZWZpbml0aW9uKSxpLm1lbnVTZWxlY3Rpb249bmV3IGkoIm1lbnUtc2VsZWN0aW9uIixpLmNoZWNrLmRlZmluaXRpb24pLGkubWVudVN1Ym1lbnU9bmV3IGkoIm1lbnUtc3VibWVudSIsaS5jaGV2cm9uUmlnaHQuZGVmaW5pdGlvbiksaS5tZW51QmFyTW9yZT1uZXcgaSgibWVudWJhci1tb3JlIixpLm1vcmUuZGVmaW5pdGlvbiksaS5zY3JvbGxiYXJCdXR0b25MZWZ0PW5ldyBpKCJzY3JvbGxiYXItYnV0dG9uLWxlZnQiLGkudHJpYW5nbGVMZWZ0LmRlZmluaXRpb24pLGkuc2Nyb2xsYmFyQnV0dG9uUmlnaHQ9bmV3IGkoInNjcm9sbGJhci1idXR0b24tcmlnaHQiLGkudHJpYW5nbGVSaWdodC5kZWZpbml0aW9uKSxpLnNjcm9sbGJhckJ1dHRvblVwPW5ldyBpKCJzY3JvbGxiYXItYnV0dG9uLXVwIixpLnRyaWFuZ2xlVXAuZGVmaW5pdGlvbiksaS5zY3JvbGxiYXJCdXR0b25Eb3duPW5ldyBpKCJzY3JvbGxiYXItYnV0dG9uLWRvd24iLGkudHJpYW5nbGVEb3duLmRlZmluaXRpb24pLGkudG9vbEJhck1vcmU9bmV3IGkoInRvb2xiYXItbW9yZSIsaS5tb3JlLmRlZmluaXRpb24pLGkucXVpY2tJbnB1dEJhY2s9bmV3IGkoInF1aWNrLWlucHV0LWJhY2siLGkuYXJyb3dMZWZ0LmRlZmluaXRpb24pO3t2YXIgZTsoZT1maT1maXx8e30pLmljb25OYW1lU2VnbWVudD0iW0EtWmEtejAtOV0rIixlLmljb25OYW1lRXhwcmVzc2lvbj0iW0EtWmEtejAtOS1dKyIsZS5pY29uTW9kaWZpZXJFeHByZXNzaW9uPSJ+W0EtWmEtel0rIixlLmljb25OYW1lQ2hhcmFjdGVyPSJbQS1aYS16MC05fi1dIjtjb25zdCBiYT1uZXcgUmVnRXhwKGBeKCR7ZS5pY29uTmFtZUV4cHJlc3Npb259KSgke2UuaWNvbk1vZGlmaWVyRXhwcmVzc2lvbn0pPyRgKTtmdW5jdGlvbiBBcihlKXtpZihlIGluc3RhbmNlb2YgaSlyZXR1cm5bImNvZGljb24iLCJjb2RpY29uLSIrZS5pZF07ZT1iYS5leGVjKGUuaWQpO2lmKCFlKXJldHVybiBBcihpLmVycm9yKTtsZXRbLHQscl09ZTtjb25zdCBuPVsiY29kaWNvbiIsImNvZGljb24tIit0XTtyZXR1cm4gciYmbi5wdXNoKCJjb2RpY29uLW1vZGlmaWVyLSIrci5zdWJzdHIoMSkpLG59ZS5hc0NsYXNzTmFtZUFycmF5PUFyLGUuYXNDbGFzc05hbWU9ZnVuY3Rpb24oZSl7cmV0dXJuIEFyKGUpLmpvaW4oIiAiKX0sZS5hc0NTU1NlbGVjdG9yPWZ1bmN0aW9uKGUpe3JldHVybiIuIitBcihlKS5qb2luKCIuIil9fWNsYXNzIHhye2NvbnN0cnVjdG9yKGUsdCxyKXt0aGlzLl90b2tlbkJyYW5kPXZvaWQgMCx0aGlzLm9mZnNldD1lLHRoaXMudHlwZT10LHRoaXMubGFuZ3VhZ2U9cn10b1N0cmluZygpe3JldHVybiIoIit0aGlzLm9mZnNldCsiLCAiK3RoaXMudHlwZSsiKSJ9fWNsYXNzIEVye2NvbnN0cnVjdG9yKGUsdCl7dGhpcy5fdG9rZW5pemF0aW9uUmVzdWx0QnJhbmQ9dm9pZCAwLHRoaXMudG9rZW5zPWUsdGhpcy5lbmRTdGF0ZT10fX1jbGFzcyBrcntjb25zdHJ1Y3RvcihlLHQpe3RoaXMuX2VuY29kZWRUb2tlbml6YXRpb25SZXN1bHRCcmFuZD12b2lkIDAsdGhpcy50b2tlbnM9ZSx0aGlzLmVuZFN0YXRlPXR9fXtQPXt9O2NvbnN0IHZhPW5ldyBNYXAseWE9KHZhLnNldCgwLGkuc3ltYm9sTWV0aG9kKSx2YS5zZXQoMSxpLnN5bWJvbEZ1bmN0aW9uKSx2YS5zZXQoMixpLnN5bWJvbENvbnN0cnVjdG9yKSx2YS5zZXQoMyxpLnN5bWJvbEZpZWxkKSx2YS5zZXQoNCxpLnN5bWJvbFZhcmlhYmxlKSx2YS5zZXQoNSxpLnN5bWJvbENsYXNzKSx2YS5zZXQoNixpLnN5bWJvbFN0cnVjdCksdmEuc2V0KDcsaS5zeW1ib2xJbnRlcmZhY2UpLHZhLnNldCg4LGkuc3ltYm9sTW9kdWxlKSx2YS5zZXQoOSxpLnN5bWJvbFByb3BlcnR5KSx2YS5zZXQoMTAsaS5zeW1ib2xFdmVudCksdmEuc2V0KDExLGkuc3ltYm9sT3BlcmF0b3IpLHZhLnNldCgxMixpLnN5bWJvbFVuaXQpLHZhLnNldCgxMyxpLnN5bWJvbFZhbHVlKSx2YS5zZXQoMTUsaS5zeW1ib2xFbnVtKSx2YS5zZXQoMTQsaS5zeW1ib2xDb25zdGFudCksdmEuc2V0KDE1LGkuc3ltYm9sRW51bSksdmEuc2V0KDE2LGkuc3ltYm9sRW51bU1lbWJlciksdmEuc2V0KDE3LGkuc3ltYm9sS2V5d29yZCksdmEuc2V0KDI3LGkuc3ltYm9sU25pcHBldCksdmEuc2V0KDE4LGkuc3ltYm9sVGV4dCksdmEuc2V0KDE5LGkuc3ltYm9sQ29sb3IpLHZhLnNldCgyMCxpLnN5bWJvbEZpbGUpLHZhLnNldCgyMSxpLnN5bWJvbFJlZmVyZW5jZSksdmEuc2V0KDIyLGkuc3ltYm9sQ3VzdG9tQ29sb3IpLHZhLnNldCgyMyxpLnN5bWJvbEZvbGRlciksdmEuc2V0KDI0LGkuc3ltYm9sVHlwZVBhcmFtZXRlciksdmEuc2V0KDI1LGkuYWNjb3VudCksdmEuc2V0KDI2LGkuaXNzdWVzKSxQLnRvSWNvbj1mdW5jdGlvbihlKXtsZXQgdD12YS5nZXQoZSk7cmV0dXJuIHR8fChjb25zb2xlLmluZm8oIk5vIGNvZGljb24gZm91bmQgZm9yIENvbXBsZXRpb25JdGVtS2luZCAiK2UpLHQ9aS5zeW1ib2xQcm9wZXJ0eSksdH0sbmV3IE1hcCk7eWEuc2V0KCJtZXRob2QiLDApLHlhLnNldCgiZnVuY3Rpb24iLDEpLHlhLnNldCgiY29uc3RydWN0b3IiLDIpLHlhLnNldCgiZmllbGQiLDMpLHlhLnNldCgidmFyaWFibGUiLDQpLHlhLnNldCgiY2xhc3MiLDUpLHlhLnNldCgic3RydWN0Iiw2KSx5YS5zZXQoImludGVyZmFjZSIsNykseWEuc2V0KCJtb2R1bGUiLDgpLHlhLnNldCgicHJvcGVydHkiLDkpLHlhLnNldCgiZXZlbnQiLDEwKSx5YS5zZXQoIm9wZXJhdG9yIiwxMSkseWEuc2V0KCJ1bml0IiwxMikseWEuc2V0KCJ2YWx1ZSIsMTMpLHlhLnNldCgiY29uc3RhbnQiLDE0KSx5YS5zZXQoImVudW0iLDE1KSx5YS5zZXQoImVudW0tbWVtYmVyIiwxNikseWEuc2V0KCJlbnVtTWVtYmVyIiwxNikseWEuc2V0KCJrZXl3b3JkIiwxNykseWEuc2V0KCJzbmlwcGV0IiwyNykseWEuc2V0KCJ0ZXh0IiwxOCkseWEuc2V0KCJjb2xvciIsMTkpLHlhLnNldCgiZmlsZSIsMjApLHlhLnNldCgicmVmZXJlbmNlIiwyMSkseWEuc2V0KCJjdXN0b21jb2xvciIsMjIpLHlhLnNldCgiZm9sZGVyIiwyMykseWEuc2V0KCJ0eXBlLXBhcmFtZXRlciIsMjQpLHlhLnNldCgidHlwZVBhcmFtZXRlciIsMjQpLHlhLnNldCgiYWNjb3VudCIsMjUpLHlhLnNldCgiaXNzdWUiLDI2KSxQLmZyb21TdHJpbmc9ZnVuY3Rpb24oZSx0KXtsZXQgcj15YS5nZXQoZSk7cmV0dXJuIHI9dm9pZCAwIT09cnx8dD9yOjl9fXt2YXIgdD17fTtjb25zdCBDYT1uZXcgTWFwO0NhLnNldCgwLGkuc3ltYm9sRmlsZSksQ2Euc2V0KDEsaS5zeW1ib2xNb2R1bGUpLENhLnNldCgyLGkuc3ltYm9sTmFtZXNwYWNlKSxDYS5zZXQoMyxpLnN5bWJvbFBhY2thZ2UpLENhLnNldCg0LGkuc3ltYm9sQ2xhc3MpLENhLnNldCg1LGkuc3ltYm9sTWV0aG9kKSxDYS5zZXQoNixpLnN5bWJvbFByb3BlcnR5KSxDYS5zZXQoNyxpLnN5bWJvbEZpZWxkKSxDYS5zZXQoOCxpLnN5bWJvbENvbnN0cnVjdG9yKSxDYS5zZXQoOSxpLnN5bWJvbEVudW0pLENhLnNldCgxMCxpLnN5bWJvbEludGVyZmFjZSksQ2Euc2V0KDExLGkuc3ltYm9sRnVuY3Rpb24pLENhLnNldCgxMixpLnN5bWJvbFZhcmlhYmxlKSxDYS5zZXQoMTMsaS5zeW1ib2xDb25zdGFudCksQ2Euc2V0KDE0LGkuc3ltYm9sU3RyaW5nKSxDYS5zZXQoMTUsaS5zeW1ib2xOdW1iZXIpLENhLnNldCgxNixpLnN5bWJvbEJvb2xlYW4pLENhLnNldCgxNyxpLnN5bWJvbEFycmF5KSxDYS5zZXQoMTgsaS5zeW1ib2xPYmplY3QpLENhLnNldCgxOSxpLnN5bWJvbEtleSksQ2Euc2V0KDIwLGkuc3ltYm9sTnVsbCksQ2Euc2V0KDIxLGkuc3ltYm9sRW51bU1lbWJlciksQ2Euc2V0KDIyLGkuc3ltYm9sU3RydWN0KSxDYS5zZXQoMjMsaS5zeW1ib2xFdmVudCksQ2Euc2V0KDI0LGkuc3ltYm9sT3BlcmF0b3IpLENhLnNldCgyNSxpLnN5bWJvbFR5cGVQYXJhbWV0ZXIpLHQudG9JY29uPWZ1bmN0aW9uKGUpe2xldCB0PUNhLmdldChlKTtyZXR1cm4gdHx8KGNvbnNvbGUuaW5mbygiTm8gY29kaWNvbiBmb3VuZCBmb3IgU3ltYm9sS2luZCAiK2UpLHQ9aS5zeW1ib2xQcm9wZXJ0eSksdH19ZnVuY3Rpb24gTnIoZSx0LHIpe2lmKCFyfHxyLmxlbmd0aDx0Lmxlbmd0aClyZXR1cm4gbnVsbDtsZXQgbjtyZXR1cm4obj1lP29lKHIsdCk6MD09PXIuaW5kZXhPZih0KSk/MDx0Lmxlbmd0aD9be3N0YXJ0OjAsZW5kOnQubGVuZ3RofV06W106bnVsbH0obnx8e30pLmlzPWZ1bmN0aW9uKGUpe3JldHVybiEoIWV8fCJvYmplY3QiIT10eXBlb2YgZSkmJigic3RyaW5nIj09dHlwZW9mIGUuaWQmJiJzdHJpbmciPT10eXBlb2YgZS50aXRsZSl9LG5ldyB3cixuZXcgd3IsbmV3IHdyLG5ldyB3cixuZXcgd3IsbmV3IHdyLG5ldyB3cixuZXcgd3IsbmV3IHdyLG5ldyB3cixuZXcgd3IsbmV3IHdyLG5ldyB3cixuZXcgd3IsbmV3IHdyLG5ldyB3cixuZXcgd3IsbmV3IHdyLG5ldyB3cixuZXcgd3IsbmV3IHdyLG5ldyB3cixuZXcgd3IsbmV3IHdyLG5ldyB3cixuZXcgd3IsbmV3IHdyLG5ldyBjbGFzc3tjb25zdHJ1Y3Rvcigpe3RoaXMuX21hcD1uZXcgTWFwLHRoaXMuX2ZhY3Rvcmllcz1uZXcgTWFwLHRoaXMuX29uRGlkQ2hhbmdlPW5ldyBYLHRoaXMub25EaWRDaGFuZ2U9dGhpcy5fb25EaWRDaGFuZ2UuZXZlbnQsdGhpcy5fY29sb3JNYXA9bnVsbH1maXJlKGUpe3RoaXMuX29uRGlkQ2hhbmdlLmZpcmUoe2NoYW5nZWRMYW5ndWFnZXM6ZSxjaGFuZ2VkQ29sb3JNYXA6ITF9KX1yZWdpc3RlcihlLHQpe3JldHVybiB0aGlzLl9tYXAuc2V0KGUsdCksdGhpcy5maXJlKFtlXSkseSgoKT0+e3RoaXMuX21hcC5nZXQoZSk9PT10JiYodGhpcy5fbWFwLmRlbGV0ZShlKSx0aGlzLmZpcmUoW2VdKSl9KX1yZWdpc3RlckZhY3RvcnkodCxlKXt2YXIgcjtudWxsIT09KHI9dGhpcy5fZmFjdG9yaWVzLmdldCh0KSkmJnZvaWQgMCE9PXImJnIuZGlzcG9zZSgpO2NvbnN0IG49bmV3IFNyKHRoaXMsdCxlKTtyZXR1cm4gdGhpcy5fZmFjdG9yaWVzLnNldCh0LG4pLHkoKCk9Pntjb25zdCBlPXRoaXMuX2ZhY3Rvcmllcy5nZXQodCk7ZSYmZT09PW4mJih0aGlzLl9mYWN0b3JpZXMuZGVsZXRlKHQpLGUuZGlzcG9zZSgpKX0pfWdldE9yQ3JlYXRlKHIpe3JldHVybiBfcih0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7dmFyIGU9dGhpcy5nZXQocik7aWYoZSlyZXR1cm4gZTtjb25zdCB0PXRoaXMuX2ZhY3Rvcmllcy5nZXQocik7cmV0dXJuIXR8fHQuaXNSZXNvbHZlZD9udWxsOih5aWVsZCB0LnJlc29sdmUoKSx0aGlzLmdldChyKSl9KX1nZXQoZSl7cmV0dXJuIHRoaXMuX21hcC5nZXQoZSl8fG51bGx9aXNSZXNvbHZlZChlKXtpZih0aGlzLmdldChlKSlyZXR1cm4hMDtlPXRoaXMuX2ZhY3Rvcmllcy5nZXQoZSk7cmV0dXJuIShlJiYhZS5pc1Jlc29sdmVkKX1zZXRDb2xvck1hcChlKXt0aGlzLl9jb2xvck1hcD1lLHRoaXMuX29uRGlkQ2hhbmdlLmZpcmUoe2NoYW5nZWRMYW5ndWFnZXM6QXJyYXkuZnJvbSh0aGlzLl9tYXAua2V5cygpKSxjaGFuZ2VkQ29sb3JNYXA6ITB9KX1nZXRDb2xvck1hcCgpe3JldHVybiB0aGlzLl9jb2xvck1hcH1nZXREZWZhdWx0QmFja2dyb3VuZCgpe3JldHVybiB0aGlzLl9jb2xvck1hcCYmMjx0aGlzLl9jb2xvck1hcC5sZW5ndGg/dGhpcy5fY29sb3JNYXBbMl06bnVsbH19LChyPXM9c3x8e30pW3IuRGVwZW5kc09uS2JMYXlvdXQ9LTFdPSJEZXBlbmRzT25LYkxheW91dCIscltyLlVua25vd249MF09IlVua25vd24iLHJbci5CYWNrc3BhY2U9MV09IkJhY2tzcGFjZSIscltyLlRhYj0yXT0iVGFiIixyW3IuRW50ZXI9M109IkVudGVyIixyW3IuU2hpZnQ9NF09IlNoaWZ0IixyW3IuQ3RybD01XT0iQ3RybCIscltyLkFsdD02XT0iQWx0IixyW3IuUGF1c2VCcmVhaz03XT0iUGF1c2VCcmVhayIscltyLkNhcHNMb2NrPThdPSJDYXBzTG9jayIscltyLkVzY2FwZT05XT0iRXNjYXBlIixyW3IuU3BhY2U9MTBdPSJTcGFjZSIscltyLlBhZ2VVcD0xMV09IlBhZ2VVcCIscltyLlBhZ2VEb3duPTEyXT0iUGFnZURvd24iLHJbci5FbmQ9MTNdPSJFbmQiLHJbci5Ib21lPTE0XT0iSG9tZSIscltyLkxlZnRBcnJvdz0xNV09IkxlZnRBcnJvdyIscltyLlVwQXJyb3c9MTZdPSJVcEFycm93IixyW3IuUmlnaHRBcnJvdz0xN109IlJpZ2h0QXJyb3ciLHJbci5Eb3duQXJyb3c9MThdPSJEb3duQXJyb3ciLHJbci5JbnNlcnQ9MTldPSJJbnNlcnQiLHJbci5EZWxldGU9MjBdPSJEZWxldGUiLHJbci5EaWdpdDA9MjFdPSJEaWdpdDAiLHJbci5EaWdpdDE9MjJdPSJEaWdpdDEiLHJbci5EaWdpdDI9MjNdPSJEaWdpdDIiLHJbci5EaWdpdDM9MjRdPSJEaWdpdDMiLHJbci5EaWdpdDQ9MjVdPSJEaWdpdDQiLHJbci5EaWdpdDU9MjZdPSJEaWdpdDUiLHJbci5EaWdpdDY9MjddPSJEaWdpdDYiLHJbci5EaWdpdDc9MjhdPSJEaWdpdDciLHJbci5EaWdpdDg9MjldPSJEaWdpdDgiLHJbci5EaWdpdDk9MzBdPSJEaWdpdDkiLHJbci5LZXlBPTMxXT0iS2V5QSIscltyLktleUI9MzJdPSJLZXlCIixyW3IuS2V5Qz0zM109IktleUMiLHJbci5LZXlEPTM0XT0iS2V5RCIscltyLktleUU9MzVdPSJLZXlFIixyW3IuS2V5Rj0zNl09IktleUYiLHJbci5LZXlHPTM3XT0iS2V5RyIscltyLktleUg9MzhdPSJLZXlIIixyW3IuS2V5ST0zOV09IktleUkiLHJbci5LZXlKPTQwXT0iS2V5SiIscltyLktleUs9NDFdPSJLZXlLIixyW3IuS2V5TD00Ml09IktleUwiLHJbci5LZXlNPTQzXT0iS2V5TSIscltyLktleU49NDRdPSJLZXlOIixyW3IuS2V5Tz00NV09IktleU8iLHJbci5LZXlQPTQ2XT0iS2V5UCIscltyLktleVE9NDddPSJLZXlRIixyW3IuS2V5Uj00OF09IktleVIiLHJbci5LZXlTPTQ5XT0iS2V5UyIscltyLktleVQ9NTBdPSJLZXlUIixyW3IuS2V5VT01MV09IktleVUiLHJbci5LZXlWPTUyXT0iS2V5ViIscltyLktleVc9NTNdPSJLZXlXIixyW3IuS2V5WD01NF09IktleVgiLHJbci5LZXlZPTU1XT0iS2V5WSIscltyLktleVo9NTZdPSJLZXlaIixyW3IuTWV0YT01N109Ik1ldGEiLHJbci5Db250ZXh0TWVudT01OF09IkNvbnRleHRNZW51IixyW3IuRjE9NTldPSJGMSIscltyLkYyPTYwXT0iRjIiLHJbci5GMz02MV09IkYzIixyW3IuRjQ9NjJdPSJGNCIscltyLkY1PTYzXT0iRjUiLHJbci5GNj02NF09IkY2IixyW3IuRjc9NjVdPSJGNyIscltyLkY4PTY2XT0iRjgiLHJbci5GOT02N109IkY5IixyW3IuRjEwPTY4XT0iRjEwIixyW3IuRjExPTY5XT0iRjExIixyW3IuRjEyPTcwXT0iRjEyIixyW3IuRjEzPTcxXT0iRjEzIixyW3IuRjE0PTcyXT0iRjE0IixyW3IuRjE1PTczXT0iRjE1IixyW3IuRjE2PTc0XT0iRjE2IixyW3IuRjE3PTc1XT0iRjE3IixyW3IuRjE4PTc2XT0iRjE4IixyW3IuRjE5PTc3XT0iRjE5IixyW3IuTnVtTG9jaz03OF09Ik51bUxvY2siLHJbci5TY3JvbGxMb2NrPTc5XT0iU2Nyb2xsTG9jayIscltyLlNlbWljb2xvbj04MF09IlNlbWljb2xvbiIscltyLkVxdWFsPTgxXT0iRXF1YWwiLHJbci5Db21tYT04Ml09IkNvbW1hIixyW3IuTWludXM9ODNdPSJNaW51cyIscltyLlBlcmlvZD04NF09IlBlcmlvZCIscltyLlNsYXNoPTg1XT0iU2xhc2giLHJbci5CYWNrcXVvdGU9ODZdPSJCYWNrcXVvdGUiLHJbci5CcmFja2V0TGVmdD04N109IkJyYWNrZXRMZWZ0IixyW3IuQmFja3NsYXNoPTg4XT0iQmFja3NsYXNoIixyW3IuQnJhY2tldFJpZ2h0PTg5XT0iQnJhY2tldFJpZ2h0IixyW3IuUXVvdGU9OTBdPSJRdW90ZSIscltyLk9FTV84PTkxXT0iT0VNXzgiLHJbci5JbnRsQmFja3NsYXNoPTkyXT0iSW50bEJhY2tzbGFzaCIscltyLk51bXBhZDA9OTNdPSJOdW1wYWQwIixyW3IuTnVtcGFkMT05NF09Ik51bXBhZDEiLHJbci5OdW1wYWQyPTk1XT0iTnVtcGFkMiIscltyLk51bXBhZDM9OTZdPSJOdW1wYWQzIixyW3IuTnVtcGFkND05N109Ik51bXBhZDQiLHJbci5OdW1wYWQ1PTk4XT0iTnVtcGFkNSIscltyLk51bXBhZDY9OTldPSJOdW1wYWQ2IixyW3IuTnVtcGFkNz0xMDBdPSJOdW1wYWQ3IixyW3IuTnVtcGFkOD0xMDFdPSJOdW1wYWQ4IixyW3IuTnVtcGFkOT0xMDJdPSJOdW1wYWQ5IixyW3IuTnVtcGFkTXVsdGlwbHk9MTAzXT0iTnVtcGFkTXVsdGlwbHkiLHJbci5OdW1wYWRBZGQ9MTA0XT0iTnVtcGFkQWRkIixyW3IuTlVNUEFEX1NFUEFSQVRPUj0xMDVdPSJOVU1QQURfU0VQQVJBVE9SIixyW3IuTnVtcGFkU3VidHJhY3Q9MTA2XT0iTnVtcGFkU3VidHJhY3QiLHJbci5OdW1wYWREZWNpbWFsPTEwN109Ik51bXBhZERlY2ltYWwiLHJbci5OdW1wYWREaXZpZGU9MTA4XT0iTnVtcGFkRGl2aWRlIixyW3IuS0VZX0lOX0NPTVBPU0lUSU9OPTEwOV09IktFWV9JTl9DT01QT1NJVElPTiIscltyLkFCTlRfQzE9MTEwXT0iQUJOVF9DMSIscltyLkFCTlRfQzI9MTExXT0iQUJOVF9DMiIscltyLkF1ZGlvVm9sdW1lTXV0ZT0xMTJdPSJBdWRpb1ZvbHVtZU11dGUiLHJbci5BdWRpb1ZvbHVtZVVwPTExM109IkF1ZGlvVm9sdW1lVXAiLHJbci5BdWRpb1ZvbHVtZURvd249MTE0XT0iQXVkaW9Wb2x1bWVEb3duIixyW3IuQnJvd3NlclNlYXJjaD0xMTVdPSJCcm93c2VyU2VhcmNoIixyW3IuQnJvd3NlckhvbWU9MTE2XT0iQnJvd3NlckhvbWUiLHJbci5Ccm93c2VyQmFjaz0xMTddPSJCcm93c2VyQmFjayIscltyLkJyb3dzZXJGb3J3YXJkPTExOF09IkJyb3dzZXJGb3J3YXJkIixyW3IuTWVkaWFUcmFja05leHQ9MTE5XT0iTWVkaWFUcmFja05leHQiLHJbci5NZWRpYVRyYWNrUHJldmlvdXM9MTIwXT0iTWVkaWFUcmFja1ByZXZpb3VzIixyW3IuTWVkaWFTdG9wPTEyMV09Ik1lZGlhU3RvcCIscltyLk1lZGlhUGxheVBhdXNlPTEyMl09Ik1lZGlhUGxheVBhdXNlIixyW3IuTGF1bmNoTWVkaWFQbGF5ZXI9MTIzXT0iTGF1bmNoTWVkaWFQbGF5ZXIiLHJbci5MYXVuY2hNYWlsPTEyNF09IkxhdW5jaE1haWwiLHJbci5MYXVuY2hBcHAyPTEyNV09IkxhdW5jaEFwcDIiLHJbci5NQVhfVkFMVUU9MTI2XT0iTUFYX1ZBTFVFIiwoZT1yaT1yaXx8e30pW2UuVHJhY2U9MF09IlRyYWNlIixlW2UuRGVidWc9MV09IkRlYnVnIixlW2UuSW5mbz0yXT0iSW5mbyIsZVtlLldhcm5pbmc9M109Ildhcm5pbmciLGVbZS5FcnJvcj00XT0iRXJyb3IiLGVbZS5Dcml0aWNhbD01XT0iQ3JpdGljYWwiLGVbZS5PZmY9Nl09Ik9mZiIsKHQ9X249X258fHt9KVt0LlBhcmFncmFwaD0wXT0iUGFyYWdyYXBoIix0W3QuQnJlYWs9MV09IkJyZWFrIiwobj1qbj1qbnx8e30pW24uSGludD0xXT0iSGludCIsbltuLkluZm89Ml09IkluZm8iLG5bbi5XYXJuaW5nPTRdPSJXYXJuaW5nIixuW24uRXJyb3I9OF09IkVycm9yIiwoZT1Ibj1Ibnx8e30pW2UuVW5uZWNlc3Nhcnk9MV09IlVubmVjZXNzYXJ5IixlW2UuRGVwcmVjYXRlZD0yXT0iRGVwcmVjYXRlZCIsKHQ9Rm49Rm58fHt9KVt0LkxUUj0wXT0iTFRSIix0W3QuUlRMPTFdPSJSVEwiLE5yLmJpbmQodm9pZCAwLCExKSxOci5iaW5kKHZvaWQgMCwhMCk7Y29uc3QgTHI9bmV3IFNldDsiKClbXXt9PD5gJ1wiLS87OiwuPyEiLnNwbGl0KCIiKS5mb3JFYWNoKGU9PkxyLmFkZChlLmNoYXJDb2RlQXQoMCkpKSxuZXcgWHQoMWU0KTtmdW5jdGlvbiBNcigpe2NvbnN0IHQ9W10scj1bXTtmb3IobGV0IGU9MDtlPD0xMjg7ZSsrKXJbZV09MDtmb3IobGV0IGU9MDtlPD0xMjg7ZSsrKXQucHVzaChyLnNsaWNlKDApKTtyZXR1cm4gdH1mdW5jdGlvbiBPcih0KXtjb25zdCByPVtdO2ZvcihsZXQgZT0wO2U8PXQ7ZSsrKXJbZV09MDtyZXR1cm4gcn1PcigyNTYpLE9yKDI1NiksTXIoKSxNcigpLE1yKCk7dmFyIFByLFRyLElyLG49bmV3IFJlZ0V4cChgXFwkXFwoJHtmaS5pY29uTmFtZUV4cHJlc3Npb259KD86JHtmaS5pY29uTW9kaWZpZXJFeHByZXNzaW9ufSk/XFwpYCwiZyIpO25ldyBSZWdFeHAoZmkuaWNvbk5hbWVDaGFyYWN0ZXIpO2NvbnN0IFZyPW5ldyBSZWdFeHAoIihcXFxcKT8iK24uc291cmNlLCJnIik7bmV3IFJlZ0V4cCgiXFxcXCIrbi5zb3VyY2UsImciKSxuZXcgUmVnRXhwKGAoXFxzKT8oXFxcXCk/JHtuLnNvdXJjZX0oXFxzKT9gLCJnIik7Y2xhc3MgUnJ7Y29uc3RydWN0b3IoZT0iIix0PSExKXtpZih0aGlzLnZhbHVlPWUsInN0cmluZyIhPXR5cGVvZiB0aGlzLnZhbHVlKXRocm93KGU9InZhbHVlIik/bmV3IEVycm9yKCJJbGxlZ2FsIGFyZ3VtZW50OiAiK2UpOm5ldyBFcnJvcigiSWxsZWdhbCBhcmd1bWVudCIpOyJib29sZWFuIj09dHlwZW9mIHQ/KHRoaXMuaXNUcnVzdGVkPXQsdGhpcy5zdXBwb3J0VGhlbWVJY29ucz0hMSx0aGlzLnN1cHBvcnRIdG1sPSExKToodGhpcy5pc1RydXN0ZWQ9bnVsbCE9PShlPXQuaXNUcnVzdGVkKSYmdm9pZCAwIT09ZT9lOnZvaWQgMCx0aGlzLnN1cHBvcnRUaGVtZUljb25zPW51bGwhPT0oZT10LnN1cHBvcnRUaGVtZUljb25zKSYmdm9pZCAwIT09ZSYmZSx0aGlzLnN1cHBvcnRIdG1sPW51bGwhPT0oZT10LnN1cHBvcnRIdG1sKSYmdm9pZCAwIT09ZSYmZSl9YXBwZW5kVGV4dChlLHQ9MCl7cmV0dXJuIHRoaXMudmFsdWUrPSh0aGlzLnN1cHBvcnRUaGVtZUljb25zP2UucmVwbGFjZShWciwoZSx0KT0+dD9lOiJcXCIrZSk6ZSkucmVwbGFjZSgvW1xcYCpfe31bXF0oKSMrXC0hXS9nLCJcXCQmIikucmVwbGFjZSgvKFsgXHRdKykvZywoZSx0KT0+IiZuYnNwOyIucmVwZWF0KHQubGVuZ3RoKSkucmVwbGFjZSgvXD4vZ20sIlxcPiIpLnJlcGxhY2UoL1xuL2csMT09PXQ/IlxcXG4iOiJcblxuIiksdGhpc31hcHBlbmRNYXJrZG93bihlKXtyZXR1cm4gdGhpcy52YWx1ZSs9ZSx0aGlzfWFwcGVuZENvZGVibG9jayhlLHQpe3JldHVybiB0aGlzLnZhbHVlKz0iXG5gYGAiLHRoaXMudmFsdWUrPWUsdGhpcy52YWx1ZSs9IlxuIix0aGlzLnZhbHVlKz10LHRoaXMudmFsdWUrPSJcbmBgYFxuIix0aGlzfX1mdW5jdGlvbiBEcihlKXtpZihQci5zZXJ2aWNlSWRzLmhhcyhlKSlyZXR1cm4gUHIuc2VydmljZUlkcy5nZXQoZSk7ZnVuY3Rpb24gbyhlLHQscil7aWYoMyE9PWFyZ3VtZW50cy5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKCJASVNlcnZpY2VOYW1lLWRlY29yYXRvciBjYW4gb25seSBiZSB1c2VkIHRvIGRlY29yYXRlIGEgcGFyYW1ldGVyIik7dmFyIG4saTtuPW8scj1yLGk9ITEsKGU9ZSlbUHIuRElfVEFSR0VUXT09PWU/ZVtQci5ESV9ERVBFTkRFTkNJRVNdLnB1c2goe2lkOm4saW5kZXg6cixvcHRpb25hbDppfSk6KGVbUHIuRElfREVQRU5ERU5DSUVTXT1be2lkOm4saW5kZXg6cixvcHRpb25hbDppfV0sZVtQci5ESV9UQVJHRVRdPWUpfXJldHVybiBvLnRvU3RyaW5nPSgpPT5lLFByLnNlcnZpY2VJZHMuc2V0KGUsbyksbywxfShUcj1Qcj1Qcnx8e30pLnNlcnZpY2VJZHM9bmV3IE1hcCxUci5ESV9UQVJHRVQ9IiRkaSR0YXJnZXQiLFRyLkRJX0RFUEVOREVOQ0lFUz0iJGRpJGRlcGVuZGVuY2llcyIsVHIuZ2V0U2VydmljZURlcGVuZGVuY2llcz1mdW5jdGlvbihlKXtyZXR1cm4gZVtUci5ESV9ERVBFTkRFTkNJRVNdfHxbXX0sRHIoImluc3RhbnRpYXRpb25TZXJ2aWNlIiksRHIoImxvZ1NlcnZpY2UiKSxEcigibG9nZ2VyU2VydmljZSIpLChlPUlyPUlyfHx7fSlbZS5UcmFjZT0wXT0iVHJhY2UiLGVbZS5EZWJ1Zz0xXT0iRGVidWciLGVbZS5JbmZvPTJdPSJJbmZvIixlW2UuV2FybmluZz0zXT0iV2FybmluZyIsZVtlLkVycm9yPTRdPSJFcnJvciIsZVtlLkNyaXRpY2FsPTVdPSJDcml0aWNhbCIsZVtlLk9mZj02XT0iT2ZmIjtjb25zdCBGcj1Jci5JbmZvO2NsYXNzIEtyIGV4dGVuZHMgd3tjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5sZXZlbD1Gcix0aGlzLl9vbkRpZENoYW5nZUxvZ0xldmVsPXRoaXMuX3JlZ2lzdGVyKG5ldyBYKSx0aGlzLm9uRGlkQ2hhbmdlTG9nTGV2ZWw9dGhpcy5fb25EaWRDaGFuZ2VMb2dMZXZlbC5ldmVudH1zZXRMZXZlbChlKXt0aGlzLmxldmVsIT09ZSYmKHRoaXMubGV2ZWw9ZSx0aGlzLl9vbkRpZENoYW5nZUxvZ0xldmVsLmZpcmUodGhpcy5sZXZlbCkpfWdldExldmVsKCl7cmV0dXJuIHRoaXMubGV2ZWx9fWNsYXNzIGpyIGV4dGVuZHMgS3J7Y29uc3RydWN0b3IoZT1Gcil7c3VwZXIoKSx0aGlzLnNldExldmVsKGUpfXRyYWNlKGUsLi4udCl7dGhpcy5nZXRMZXZlbCgpPD1Jci5UcmFjZSYmY29uc29sZS5sb2coIiVjVFJBQ0UiLCJjb2xvcjogIzg4OCIsZSwuLi50KX1kZWJ1ZyhlLC4uLnQpe3RoaXMuZ2V0TGV2ZWwoKTw9SXIuRGVidWcmJmNvbnNvbGUubG9nKCIlY0RFQlVHIiwiYmFja2dyb3VuZDogI2VlZTsgY29sb3I6ICM4ODgiLGUsLi4udCl9aW5mbyhlLC4uLnQpe3RoaXMuZ2V0TGV2ZWwoKTw9SXIuSW5mbyYmY29uc29sZS5sb2coIiVjIElORk8iLCJjb2xvcjogIzMzZiIsZSwuLi50KX13YXJuKGUsLi4udCl7dGhpcy5nZXRMZXZlbCgpPD1Jci5XYXJuaW5nJiZjb25zb2xlLmxvZygiJWMgV0FSTiIsImNvbG9yOiAjOTkzIixlLC4uLnQpfWVycm9yKGUsLi4udCl7dGhpcy5nZXRMZXZlbCgpPD1Jci5FcnJvciYmY29uc29sZS5sb2coIiVjICBFUlIiLCJjb2xvcjogI2YzMyIsZSwuLi50KX1jcml0aWNhbChlLC4uLnQpe3RoaXMuZ2V0TGV2ZWwoKTw9SXIuQ3JpdGljYWwmJmNvbnNvbGUubG9nKCIlY0NSSVRJIiwiYmFja2dyb3VuZDogI2YzMzsgY29sb3I6IHdoaXRlIixlLC4uLnQpfWRpc3Bvc2UoKXt9Zmx1c2goKXt9fWNsYXNzIFVye3N0YXRpYyBjaG9yZChlLHQpe3JldHVybihlfCg2NTUzNSZ0KTw8MTY+Pj4wKT4+PjB9fWZ1bmN0aW9uIEJyKGUsdCxyLG4saSl7cmV0dXJuIGZ1bmN0aW9uKGUsdCxyLG4pe2lmKDA9PT1yKXJldHVybiAxO3ZhciBpPXQuY2hhckNvZGVBdChyLTEpO2lmKDAhPT1lLmdldChpKSlyZXR1cm4gMTtpZigxMz09PWl8fDEwPT09aSlyZXR1cm4gMTtpZigwPG4pe2k9dC5jaGFyQ29kZUF0KHIpO2lmKDAhPT1lLmdldChpKSlyZXR1cm4gMX1yZXR1cm59KGUsdCxuLGkpJiZmdW5jdGlvbihlLHQscixuLGkpe2lmKG4raT09PXIpcmV0dXJuIDE7aWYocj10LmNoYXJDb2RlQXQobitpKSwwIT09ZS5nZXQocikpcmV0dXJuIDE7aWYoMTM9PT1yfHwxMD09PXIpcmV0dXJuIDE7aWYoMDxpKXtyPXQuY2hhckNvZGVBdChuK2ktMSk7aWYoMCE9PWUuZ2V0KHIpKXJldHVybiAxfXJldHVybn0oZSx0LHIsbixpKX1Vci5DdHJsQ21kPTIwNDgsVXIuU2hpZnQ9MTAyNCxVci5BbHQ9NTEyLFVyLldpbkN0cmw9MjU2O2NsYXNzIHFye2NvbnN0cnVjdG9yKGUsdCl7dGhpcy5fd29yZFNlcGFyYXRvcnM9ZSx0aGlzLl9zZWFyY2hSZWdleD10LHRoaXMuX3ByZXZNYXRjaFN0YXJ0SW5kZXg9LTEsdGhpcy5fcHJldk1hdGNoTGVuZ3RoPTB9cmVzZXQoZSl7dGhpcy5fc2VhcmNoUmVnZXgubGFzdEluZGV4PWUsdGhpcy5fcHJldk1hdGNoU3RhcnRJbmRleD0tMSx0aGlzLl9wcmV2TWF0Y2hMZW5ndGg9MH1uZXh0KGUpe3ZhciB0PWUubGVuZ3RoO2xldCByO2Rve2lmKHRoaXMuX3ByZXZNYXRjaFN0YXJ0SW5kZXgrdGhpcy5fcHJldk1hdGNoTGVuZ3RoPT09dClyZXR1cm4gbnVsbDtpZighKHI9dGhpcy5fc2VhcmNoUmVnZXguZXhlYyhlKSkpcmV0dXJuIG51bGw7dmFyIG49ci5pbmRleCxpPXJbMF0ubGVuZ3RoO2lmKG4hPT10aGlzLl9wcmV2TWF0Y2hTdGFydEluZGV4fHxpIT09dGhpcy5fcHJldk1hdGNoTGVuZ3RoKXtpZih0aGlzLl9wcmV2TWF0Y2hTdGFydEluZGV4PW4sdGhpcy5fcHJldk1hdGNoTGVuZ3RoPWksIXRoaXMuX3dvcmRTZXBhcmF0b3JzfHxCcih0aGlzLl93b3JkU2VwYXJhdG9ycyxlLHQsbixpKSlyZXR1cm4gcn1lbHNle2lmKDAhPT1pKXJldHVybiBudWxsOzY1NTM1PGZ1bmN0aW9uKGUsdCxyKXt2YXIgbj1lLmNoYXJDb2RlQXQocik7aWYoYWUobikmJnIrMTx0KXt0PWUuY2hhckNvZGVBdChyKzEpO2lmKDU2MzIwPD0oZT10KSYmZTw9NTczNDMpcmV0dXJuIHQtNTYzMjArKG4tNTUyOTY8PDEwKSs2NTUzNn1yZXR1cm4gbn0oZSx0LHRoaXMuX3NlYXJjaFJlZ2V4Lmxhc3RJbmRleCk/dGhpcy5fc2VhcmNoUmVnZXgubGFzdEluZGV4Kz0yOnRoaXMuX3NlYXJjaFJlZ2V4Lmxhc3RJbmRleCs9MX19d2hpbGUocik7cmV0dXJuIG51bGx9fWNsYXNzICRye3N0YXRpYyBjb21wdXRlVW5pY29kZUhpZ2hsaWdodHModCx1LGUpe3ZhciBoPWU/ZS5zdGFydExpbmVOdW1iZXI6MSxmPWU/ZS5lbmRMaW5lTnVtYmVyOnQuZ2V0TGluZUNvdW50KCk7Y29uc3Qgbj1uZXcgV3IodSk7dmFyIGksZT1uLmdldENhbmRpZGF0ZUNvZGVQb2ludHMoKTtsZXQgcjtyPSJhbGxOb25CYXNpY0FzY2lpIj09PWU/bmV3IFJlZ0V4cCgiW15cXHRcXG5cXHJcXHgyMC1cXHg3RV0iLCJnIik6bmV3IFJlZ0V4cCgiIitmdW5jdGlvbihlKXtlPWBbJHt0ZShlLm1hcChlPT5TdHJpbmcuZnJvbUNvZGVQb2ludChlKSkuam9pbigiIikpfV1gO3JldHVybiBlfShBcnJheS5mcm9tKGUpKSwiZyIpO2NvbnN0IG89bmV3IHFyKG51bGwsciksYT1bXTtsZXQgcz0hMSxkPTAsbT0wLGc9MDtlOmZvcihsZXQgcj1oLGU9ZjtyPD1lO3IrKyl7Y29uc3QgYz10LmdldExpbmVDb250ZW50KHIpO3ZhciBwPWMubGVuZ3RoO28ucmVzZXQoMCk7ZG97aWYoaT1vLm5leHQoYykpe2xldCBlPWkuaW5kZXgsdD1pLmluZGV4K2lbMF0ubGVuZ3RoOzA8ZSYmYWUoYy5jaGFyQ29kZUF0KGUtMSkpJiZlLS0sdCsxPHAmJmFlKGMuY2hhckNvZGVBdCh0LTEpKSYmdCsrO3ZhciBsPWMuc3Vic3RyaW5nKGUsdCksbD1uLnNob3VsZEhpZ2hsaWdodE5vbkJhc2ljQVNDSUkobCk7aWYoMCE9PWwpe2lmKDM9PT1sKWQrKztlbHNlIGlmKDI9PT1sKW0rKztlbHNle2lmKDEhPT1sKXRocm93IGw9dm9pZCAwLFtsPSJVbnJlYWNoYWJsZSJdPVtdLG5ldyBFcnJvcihsKTtnKyt9aWYoMWUzPD1hLmxlbmd0aCl7cz0hMDticmVhayBlfWEucHVzaChuZXcgc3QocixlKzEscix0KzEpKX19fXdoaWxlKGkpfXJldHVybntyYW5nZXM6YSxoYXNNb3JlOnMsYW1iaWd1b3VzQ2hhcmFjdGVyQ291bnQ6ZCxpbnZpc2libGVDaGFyYWN0ZXJDb3VudDptLG5vbkJhc2ljQXNjaWlDaGFyYWN0ZXJDb3VudDpnfX1zdGF0aWMgY29tcHV0ZVVuaWNvZGVIaWdobGlnaHRSZWFzb24oZSx0KXtjb25zdCByPW5ldyBXcih0KTtzd2l0Y2goci5zaG91bGRIaWdobGlnaHROb25CYXNpY0FTQ0lJKGUpKXtjYXNlIDA6cmV0dXJuIG51bGw7Y2FzZSAyOnJldHVybntraW5kOjF9O2Nhc2UgMzp7Y29uc3Qgbz1lLmNvZGVQb2ludEF0KDApO3ZhciBuPXIuYW1iaWd1b3VzQ2hhcmFjdGVycy5nZXRQcmltYXJ5Q29uZnVzYWJsZShvKSxpPXNlLmdldExvY2FsZXMoKS5maWx0ZXIoZT0+IXNlLmdldEluc3RhbmNlKG5ldyBTZXQoWy4uLnQuYWxsb3dlZExvY2FsZXMsZV0pKS5pc0FtYmlndW91cyhvKSk7cmV0dXJue2tpbmQ6MCxjb25mdXNhYmxlV2l0aDpTdHJpbmcuZnJvbUNvZGVQb2ludChuKSxub3RBbWJpZ3VvdXNJbkxvY2FsZXM6aX19Y2FzZSAxOnJldHVybntraW5kOjJ9fX19Y2xhc3MgV3J7Y29uc3RydWN0b3IoZSl7dGhpcy5vcHRpb25zPWUsdGhpcy5hbGxvd2VkQ29kZVBvaW50cz1uZXcgU2V0KGUuYWxsb3dlZENvZGVQb2ludHMpLHRoaXMuYW1iaWd1b3VzQ2hhcmFjdGVycz1zZS5nZXRJbnN0YW5jZShuZXcgU2V0KGUuYWxsb3dlZExvY2FsZXMpKX1nZXRDYW5kaWRhdGVDb2RlUG9pbnRzKCl7aWYodGhpcy5vcHRpb25zLm5vbkJhc2ljQVNDSUkpcmV0dXJuImFsbE5vbkJhc2ljQXNjaWkiO2NvbnN0IGU9bmV3IFNldDtpZih0aGlzLm9wdGlvbnMuaW52aXNpYmxlQ2hhcmFjdGVycylmb3IoY29uc3QgdCBvZiBsZS5jb2RlUG9pbnRzKWUuYWRkKHQpO2lmKHRoaXMub3B0aW9ucy5hbWJpZ3VvdXNDaGFyYWN0ZXJzKWZvcihjb25zdCByIG9mIHRoaXMuYW1iaWd1b3VzQ2hhcmFjdGVycy5nZXRDb25mdXNhYmxlQ29kZVBvaW50cygpKWUuYWRkKHIpO2Zvcihjb25zdCBuIG9mIHRoaXMuYWxsb3dlZENvZGVQb2ludHMpZS5kZWxldGUobik7cmV0dXJuIGV9c2hvdWxkSGlnaGxpZ2h0Tm9uQmFzaWNBU0NJSShlKXt2YXIgdD1lLmNvZGVQb2ludEF0KDApO2lmKHRoaXMuYWxsb3dlZENvZGVQb2ludHMuaGFzKHQpKXJldHVybiAwO2lmKHRoaXMub3B0aW9ucy5ub25CYXNpY0FTQ0lJKXJldHVybiAxO2lmKHRoaXMub3B0aW9ucy5pbnZpc2libGVDaGFyYWN0ZXJzJiYoISgiICI9PT1lfHwiXG4iPT09ZXx8Ilx0Ij09PWUpJiZsZS5pc0ludmlzaWJsZUNoYXJhY3Rlcih0KSkpcmV0dXJuIDI7cmV0dXJuIHRoaXMub3B0aW9ucy5hbWJpZ3VvdXNDaGFyYWN0ZXJzJiZ0aGlzLmFtYmlndW91c0NoYXJhY3RlcnMuaXNBbWJpZ3VvdXModCk/MzowfX12YXIgSHIsenI9ZnVuY3Rpb24oZSxhLHMsbCl7cmV0dXJuIG5ldyhzPXN8fFByb21pc2UpKGZ1bmN0aW9uKHIsdCl7ZnVuY3Rpb24gbihlKXt0cnl7byhsLm5leHQoZSkpfWNhdGNoKGUpe3QoZSl9fWZ1bmN0aW9uIGkoZSl7dHJ5e28obC50aHJvdyhlKSl9Y2F0Y2goZSl7dChlKX19ZnVuY3Rpb24gbyhlKXt2YXIgdDtlLmRvbmU/cihlLnZhbHVlKTooKHQ9ZS52YWx1ZSlpbnN0YW5jZW9mIHM/dDpuZXcgcyhmdW5jdGlvbihlKXtlKHQpfSkpLnRoZW4obixpKX1vKChsPWwuYXBwbHkoZSxhfHxbXSkpLm5leHQoKSl9KX07Y2xhc3MgSnIgZXh0ZW5kcyBjbGFzc3tjb25zdHJ1Y3RvcihlLHQscixuKXt0aGlzLl91cmk9ZSx0aGlzLl9saW5lcz10LHRoaXMuX2VvbD1yLHRoaXMuX3ZlcnNpb25JZD1uLHRoaXMuX2xpbmVTdGFydHM9bnVsbCx0aGlzLl9jYWNoZWRUZXh0VmFsdWU9bnVsbH1kaXNwb3NlKCl7dGhpcy5fbGluZXMubGVuZ3RoPTB9Z2V0IHZlcnNpb24oKXtyZXR1cm4gdGhpcy5fdmVyc2lvbklkfWdldFRleHQoKXtyZXR1cm4gbnVsbD09PXRoaXMuX2NhY2hlZFRleHRWYWx1ZSYmKHRoaXMuX2NhY2hlZFRleHRWYWx1ZT10aGlzLl9saW5lcy5qb2luKHRoaXMuX2VvbCkpLHRoaXMuX2NhY2hlZFRleHRWYWx1ZX1vbkV2ZW50cyhlKXtlLmVvbCYmZS5lb2whPT10aGlzLl9lb2wmJih0aGlzLl9lb2w9ZS5lb2wsdGhpcy5fbGluZVN0YXJ0cz1udWxsKTtmb3IoY29uc3QgdCBvZiBlLmNoYW5nZXMpdGhpcy5fYWNjZXB0RGVsZXRlUmFuZ2UodC5yYW5nZSksdGhpcy5fYWNjZXB0SW5zZXJ0VGV4dChuZXcgYXQodC5yYW5nZS5zdGFydExpbmVOdW1iZXIsdC5yYW5nZS5zdGFydENvbHVtbiksdC50ZXh0KTt0aGlzLl92ZXJzaW9uSWQ9ZS52ZXJzaW9uSWQsdGhpcy5fY2FjaGVkVGV4dFZhbHVlPW51bGx9X2Vuc3VyZUxpbmVTdGFydHMoKXtpZighdGhpcy5fbGluZVN0YXJ0cyl7dmFyIHQ9dGhpcy5fZW9sLmxlbmd0aCxyPXRoaXMuX2xpbmVzLmxlbmd0aDtjb25zdCBuPW5ldyBVaW50MzJBcnJheShyKTtmb3IobGV0IGU9MDtlPHI7ZSsrKW5bZV09dGhpcy5fbGluZXNbZV0ubGVuZ3RoK3Q7dGhpcy5fbGluZVN0YXJ0cz1uZXcgeXQobil9fV9zZXRMaW5lVGV4dChlLHQpe3RoaXMuX2xpbmVzW2VdPXQsdGhpcy5fbGluZVN0YXJ0cyYmdGhpcy5fbGluZVN0YXJ0cy5zZXRWYWx1ZShlLHRoaXMuX2xpbmVzW2VdLmxlbmd0aCt0aGlzLl9lb2wubGVuZ3RoKX1fYWNjZXB0RGVsZXRlUmFuZ2UoZSl7aWYoZS5zdGFydExpbmVOdW1iZXI9PT1lLmVuZExpbmVOdW1iZXIpcmV0dXJuIGUuc3RhcnRDb2x1bW49PT1lLmVuZENvbHVtbj92b2lkIDA6dm9pZCB0aGlzLl9zZXRMaW5lVGV4dChlLnN0YXJ0TGluZU51bWJlci0xLHRoaXMuX2xpbmVzW2Uuc3RhcnRMaW5lTnVtYmVyLTFdLnN1YnN0cmluZygwLGUuc3RhcnRDb2x1bW4tMSkrdGhpcy5fbGluZXNbZS5zdGFydExpbmVOdW1iZXItMV0uc3Vic3RyaW5nKGUuZW5kQ29sdW1uLTEpKTt0aGlzLl9zZXRMaW5lVGV4dChlLnN0YXJ0TGluZU51bWJlci0xLHRoaXMuX2xpbmVzW2Uuc3RhcnRMaW5lTnVtYmVyLTFdLnN1YnN0cmluZygwLGUuc3RhcnRDb2x1bW4tMSkrdGhpcy5fbGluZXNbZS5lbmRMaW5lTnVtYmVyLTFdLnN1YnN0cmluZyhlLmVuZENvbHVtbi0xKSksdGhpcy5fbGluZXMuc3BsaWNlKGUuc3RhcnRMaW5lTnVtYmVyLGUuZW5kTGluZU51bWJlci1lLnN0YXJ0TGluZU51bWJlciksdGhpcy5fbGluZVN0YXJ0cyYmdGhpcy5fbGluZVN0YXJ0cy5yZW1vdmVWYWx1ZXMoZS5zdGFydExpbmVOdW1iZXIsZS5lbmRMaW5lTnVtYmVyLWUuc3RhcnRMaW5lTnVtYmVyKX1fYWNjZXB0SW5zZXJ0VGV4dCh0LGUpe2lmKDAhPT1lLmxlbmd0aCl7Y29uc3Qgcj1lLnNwbGl0KC9cclxufFxyfFxuLyk7aWYoMSE9PXIubGVuZ3RoKXtyW3IubGVuZ3RoLTFdKz10aGlzLl9saW5lc1t0LmxpbmVOdW1iZXItMV0uc3Vic3RyaW5nKHQuY29sdW1uLTEpLHRoaXMuX3NldExpbmVUZXh0KHQubGluZU51bWJlci0xLHRoaXMuX2xpbmVzW3QubGluZU51bWJlci0xXS5zdWJzdHJpbmcoMCx0LmNvbHVtbi0xKStyWzBdKTtjb25zdCBuPW5ldyBVaW50MzJBcnJheShyLmxlbmd0aC0xKTtmb3IobGV0IGU9MTtlPHIubGVuZ3RoO2UrKyl0aGlzLl9saW5lcy5zcGxpY2UodC5saW5lTnVtYmVyK2UtMSwwLHJbZV0pLG5bZS0xXT1yW2VdLmxlbmd0aCt0aGlzLl9lb2wubGVuZ3RoO3RoaXMuX2xpbmVTdGFydHMmJnRoaXMuX2xpbmVTdGFydHMuaW5zZXJ0VmFsdWVzKHQubGluZU51bWJlcixuKX1lbHNlIHRoaXMuX3NldExpbmVUZXh0KHQubGluZU51bWJlci0xLHRoaXMuX2xpbmVzW3QubGluZU51bWJlci0xXS5zdWJzdHJpbmcoMCx0LmNvbHVtbi0xKStyWzBdK3RoaXMuX2xpbmVzW3QubGluZU51bWJlci0xXS5zdWJzdHJpbmcodC5jb2x1bW4tMSkpfX19e2dldCB1cmkoKXtyZXR1cm4gdGhpcy5fdXJpfWdldCBlb2woKXtyZXR1cm4gdGhpcy5fZW9sfWdldFZhbHVlKCl7cmV0dXJuIHRoaXMuZ2V0VGV4dCgpfWdldExpbmVzQ29udGVudCgpe3JldHVybiB0aGlzLl9saW5lcy5zbGljZSgwKX1nZXRMaW5lQ291bnQoKXtyZXR1cm4gdGhpcy5fbGluZXMubGVuZ3RofWdldExpbmVDb250ZW50KGUpe3JldHVybiB0aGlzLl9saW5lc1tlLTFdfWdldFdvcmRBdFBvc2l0aW9uKGUsdCl7dD1TdChlLmNvbHVtbixmdW5jdGlvbih0KXtsZXQgcj13dDtpZih0JiZ0IGluc3RhbmNlb2YgUmVnRXhwKWlmKHQuZ2xvYmFsKXI9dDtlbHNle2xldCBlPSJnIjt0Lmlnbm9yZUNhc2UmJihlKz0iaSIpLHQubXVsdGlsaW5lJiYoZSs9Im0iKSx0LnVuaWNvZGUmJihlKz0idSIpLHI9bmV3IFJlZ0V4cCh0LnNvdXJjZSxlKX1yZXR1cm4gci5sYXN0SW5kZXg9MCxyfSh0KSx0aGlzLl9saW5lc1tlLmxpbmVOdW1iZXItMV0sMCk7cmV0dXJuIHQ/bmV3IHN0KGUubGluZU51bWJlcix0LnN0YXJ0Q29sdW1uLGUubGluZU51bWJlcix0LmVuZENvbHVtbik6bnVsbH13b3Jkcyh0KXtjb25zdCByPXRoaXMuX2xpbmVzLG49dGhpcy5fd29yZGVuaXplLmJpbmQodGhpcyk7bGV0IGk9MCxvPSIiLGE9MCxzPVtdO3JldHVybnsqW1N5bWJvbC5pdGVyYXRvcl0oKXtmb3IoOzspaWYoYTxzLmxlbmd0aCl7dmFyIGU9by5zdWJzdHJpbmcoc1thXS5zdGFydCxzW2FdLmVuZCk7YSs9MSx5aWVsZCBlfWVsc2V7aWYoIShpPHIubGVuZ3RoKSlicmVhaztvPXJbaV0scz1uKG8sdCksYT0wLGkrPTF9fX19Z2V0TGluZVdvcmRzKGUsdCl7Y29uc3Qgcj10aGlzLl9saW5lc1tlLTFdO2NvbnN0IG49W107Zm9yKGNvbnN0IGkgb2YgdGhpcy5fd29yZGVuaXplKHIsdCkpbi5wdXNoKHt3b3JkOnIuc3Vic3RyaW5nKGkuc3RhcnQsaS5lbmQpLHN0YXJ0Q29sdW1uOmkuc3RhcnQrMSxlbmRDb2x1bW46aS5lbmQrMX0pO3JldHVybiBufV93b3JkZW5pemUoZSx0KXtjb25zdCByPVtdO3ZhciBuO2Zvcih0Lmxhc3RJbmRleD0wOyhuPXQuZXhlYyhlKSkmJjAhPT1uWzBdLmxlbmd0aDspci5wdXNoKHtzdGFydDpuLmluZGV4LGVuZDpuLmluZGV4K25bMF0ubGVuZ3RofSk7cmV0dXJuIHJ9Z2V0VmFsdWVJblJhbmdlKGUpe2lmKChlPXRoaXMuX3ZhbGlkYXRlUmFuZ2UoZSkpLnN0YXJ0TGluZU51bWJlcj09PWUuZW5kTGluZU51bWJlcilyZXR1cm4gdGhpcy5fbGluZXNbZS5zdGFydExpbmVOdW1iZXItMV0uc3Vic3RyaW5nKGUuc3RhcnRDb2x1bW4tMSxlLmVuZENvbHVtbi0xKTt2YXIgdD10aGlzLl9lb2wscj1lLnN0YXJ0TGluZU51bWJlci0xLG49ZS5lbmRMaW5lTnVtYmVyLTE7Y29uc3QgaT1bXTtpLnB1c2godGhpcy5fbGluZXNbcl0uc3Vic3RyaW5nKGUuc3RhcnRDb2x1bW4tMSkpO2ZvcihsZXQgZT0xK3I7ZTxuO2UrKylpLnB1c2godGhpcy5fbGluZXNbZV0pO3JldHVybiBpLnB1c2godGhpcy5fbGluZXNbbl0uc3Vic3RyaW5nKDAsZS5lbmRDb2x1bW4tMSkpLGkuam9pbih0KX1vZmZzZXRBdChlKXtyZXR1cm4gZT10aGlzLl92YWxpZGF0ZVBvc2l0aW9uKGUpLHRoaXMuX2Vuc3VyZUxpbmVTdGFydHMoKSx0aGlzLl9saW5lU3RhcnRzLmdldFByZWZpeFN1bShlLmxpbmVOdW1iZXItMikrKGUuY29sdW1uLTEpfXBvc2l0aW9uQXQoZSl7ZT1NYXRoLmZsb29yKGUpLGU9TWF0aC5tYXgoMCxlKSx0aGlzLl9lbnN1cmVMaW5lU3RhcnRzKCk7dmFyIGU9dGhpcy5fbGluZVN0YXJ0cy5nZXRJbmRleE9mKGUpLHQ9dGhpcy5fbGluZXNbZS5pbmRleF0ubGVuZ3RoO3JldHVybntsaW5lTnVtYmVyOjErZS5pbmRleCxjb2x1bW46MStNYXRoLm1pbihlLnJlbWFpbmRlcix0KX19X3ZhbGlkYXRlUmFuZ2UoZSl7dmFyIHQ9dGhpcy5fdmFsaWRhdGVQb3NpdGlvbih7bGluZU51bWJlcjplLnN0YXJ0TGluZU51bWJlcixjb2x1bW46ZS5zdGFydENvbHVtbn0pLHI9dGhpcy5fdmFsaWRhdGVQb3NpdGlvbih7bGluZU51bWJlcjplLmVuZExpbmVOdW1iZXIsY29sdW1uOmUuZW5kQ29sdW1ufSk7cmV0dXJuIHQubGluZU51bWJlciE9PWUuc3RhcnRMaW5lTnVtYmVyfHx0LmNvbHVtbiE9PWUuc3RhcnRDb2x1bW58fHIubGluZU51bWJlciE9PWUuZW5kTGluZU51bWJlcnx8ci5jb2x1bW4hPT1lLmVuZENvbHVtbj97c3RhcnRMaW5lTnVtYmVyOnQubGluZU51bWJlcixzdGFydENvbHVtbjp0LmNvbHVtbixlbmRMaW5lTnVtYmVyOnIubGluZU51bWJlcixlbmRDb2x1bW46ci5jb2x1bW59OmV9X3ZhbGlkYXRlUG9zaXRpb24oZSl7aWYoIWF0LmlzSVBvc2l0aW9uKGUpKXRocm93IG5ldyBFcnJvcigiYmFkIHBvc2l0aW9uIik7bGV0e2xpbmVOdW1iZXI6dCxjb2x1bW46cn09ZSxuPSExO3ZhciBpO3JldHVybiB0PDE/KHQ9MSxyPTEsbj0hMCk6dD50aGlzLl9saW5lcy5sZW5ndGg/KHQ9dGhpcy5fbGluZXMubGVuZ3RoLHI9dGhpcy5fbGluZXNbdC0xXS5sZW5ndGgrMSxuPSEwKTooaT10aGlzLl9saW5lc1t0LTFdLmxlbmd0aCsxLHI8MT8ocj0xLG49ITApOnI+aSYmKHI9aSxuPSEwKSksbj97bGluZU51bWJlcjp0LGNvbHVtbjpyfTplfX1jbGFzcyBHcntjb25zdHJ1Y3RvcihlLHQpe3RoaXMuX2hvc3Q9ZSx0aGlzLl9tb2RlbHM9T2JqZWN0LmNyZWF0ZShudWxsKSx0aGlzLl9mb3JlaWduTW9kdWxlRmFjdG9yeT10LHRoaXMuX2ZvcmVpZ25Nb2R1bGU9bnVsbH1kaXNwb3NlKCl7dGhpcy5fbW9kZWxzPU9iamVjdC5jcmVhdGUobnVsbCl9X2dldE1vZGVsKGUpe3JldHVybiB0aGlzLl9tb2RlbHNbZV19X2dldE1vZGVscygpe2NvbnN0IHQ9W107cmV0dXJuIE9iamVjdC5rZXlzKHRoaXMuX21vZGVscykuZm9yRWFjaChlPT50LnB1c2godGhpcy5fbW9kZWxzW2VdKSksdH1hY2NlcHROZXdNb2RlbChlKXt0aGlzLl9tb2RlbHNbZS51cmxdPW5ldyBKcihaZS5wYXJzZShlLnVybCksZS5saW5lcyxlLkVPTCxlLnZlcnNpb25JZCl9YWNjZXB0TW9kZWxDaGFuZ2VkKGUsdCl7aWYodGhpcy5fbW9kZWxzW2VdKXtjb25zdCByPXRoaXMuX21vZGVsc1tlXTtyLm9uRXZlbnRzKHQpfX1hY2NlcHRSZW1vdmVkTW9kZWwoZSl7dGhpcy5fbW9kZWxzW2VdJiZkZWxldGUgdGhpcy5fbW9kZWxzW2VdfWNvbXB1dGVVbmljb2RlSGlnaGxpZ2h0cyh0LHIsbil7cmV0dXJuIHpyKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXt2YXIgZT10aGlzLl9nZXRNb2RlbCh0KTtyZXR1cm4gZT8kci5jb21wdXRlVW5pY29kZUhpZ2hsaWdodHMoZSxyLG4pOntyYW5nZXM6W10saGFzTW9yZTohMSxhbWJpZ3VvdXNDaGFyYWN0ZXJDb3VudDowLGludmlzaWJsZUNoYXJhY3RlckNvdW50OjAsbm9uQmFzaWNBc2NpaUNoYXJhY3RlckNvdW50OjB9fSl9Y29tcHV0ZURpZmYobyxhLHMsbCl7cmV0dXJuIHpyKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtjb25zdCBlPXRoaXMuX2dldE1vZGVsKG8pLHQ9dGhpcy5fZ2V0TW9kZWwoYSk7aWYoIWV8fCF0KXJldHVybiBudWxsO3ZhciByPWUuZ2V0TGluZXNDb250ZW50KCksbj10LmdldExpbmVzQ29udGVudCgpO2NvbnN0IGk9bmV3IGR0KHIsbix7c2hvdWxkQ29tcHV0ZUNoYXJDaGFuZ2VzOiEwLHNob3VsZFBvc3RQcm9jZXNzQ2hhckNoYW5nZXM6ITAsc2hvdWxkSWdub3JlVHJpbVdoaXRlc3BhY2U6cyxzaG91bGRNYWtlUHJldHR5RGlmZjohMCxtYXhDb21wdXRhdGlvblRpbWU6bH0pO3I9aS5jb21wdXRlRGlmZigpLG49ISgwPHIuY2hhbmdlcy5sZW5ndGgpJiZ0aGlzLl9tb2RlbHNBcmVJZGVudGljYWwoZSx0KTtyZXR1cm57cXVpdEVhcmx5OnIucXVpdEVhcmx5LGlkZW50aWNhbDpuLGNoYW5nZXM6ci5jaGFuZ2VzfX0pfV9tb2RlbHNBcmVJZGVudGljYWwodCxyKXt2YXIgbj10LmdldExpbmVDb3VudCgpO2lmKG4hPT1yLmdldExpbmVDb3VudCgpKXJldHVybiExO2ZvcihsZXQgZT0xO2U8PW47ZSsrKWlmKHQuZ2V0TGluZUNvbnRlbnQoZSkhPT1yLmdldExpbmVDb250ZW50KGUpKXJldHVybiExO3JldHVybiEwfWNvbXB1dGVNb3JlTWluaW1hbEVkaXRzKGYsZCl7cmV0dXJuIHpyKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtjb25zdCBlPXRoaXMuX2dldE1vZGVsKGYpO2lmKCFlKXJldHVybiBkO2NvbnN0IHQ9W107bGV0IHI9dm9pZCAwO2Zvcih2YXJ7cmFuZ2U6bix0ZXh0OmksZW9sOm99b2YgZD1kLnNsaWNlKDApLnNvcnQoKGUsdCk9PntyZXR1cm4gZS5yYW5nZSYmdC5yYW5nZT9zdC5jb21wYXJlUmFuZ2VzVXNpbmdTdGFydHMoZS5yYW5nZSx0LnJhbmdlKTooZS5yYW5nZT8wOjEpLSh0LnJhbmdlPzA6MSl9KSlpZigibnVtYmVyIj09dHlwZW9mIG8mJihyPW8pLCFzdC5pc0VtcHR5KG4pfHxpKXtvPWUuZ2V0VmFsdWVJblJhbmdlKG4pO2lmKG8hPT0oaT1pLnJlcGxhY2UoL1xyXG58XG58XHIvZyxlLmVvbCkpKWlmKE1hdGgubWF4KGkubGVuZ3RoLG8ubGVuZ3RoKT5Hci5fZGlmZkxpbWl0KXQucHVzaCh7cmFuZ2U6bix0ZXh0Oml9KTtlbHNle289byx1PWksaD0hMTt2YXIgbz1uZXcgeGUobmV3IHdlKG8pLG5ldyB3ZSh1KSkuQ29tcHV0ZURpZmYoaCkuY2hhbmdlcyxhPWUub2Zmc2V0QXQoc3QubGlmdChuKS5nZXRTdGFydFBvc2l0aW9uKCkpO2Zvcihjb25zdCBjIG9mIG8pe3ZhciBzPWUucG9zaXRpb25BdChhK2Mub3JpZ2luYWxTdGFydCksbD1lLnBvc2l0aW9uQXQoYStjLm9yaWdpbmFsU3RhcnQrYy5vcmlnaW5hbExlbmd0aCkscz17dGV4dDppLnN1YnN0cihjLm1vZGlmaWVkU3RhcnQsYy5tb2RpZmllZExlbmd0aCkscmFuZ2U6e3N0YXJ0TGluZU51bWJlcjpzLmxpbmVOdW1iZXIsc3RhcnRDb2x1bW46cy5jb2x1bW4sZW5kTGluZU51bWJlcjpsLmxpbmVOdW1iZXIsZW5kQ29sdW1uOmwuY29sdW1ufX07ZS5nZXRWYWx1ZUluUmFuZ2Uocy5yYW5nZSkhPT1zLnRleHQmJnQucHVzaChzKX19fXZhciB1LGg7cmV0dXJuIm51bWJlciI9PXR5cGVvZiByJiZ0LnB1c2goe2VvbDpyLHRleHQ6IiIscmFuZ2U6e3N0YXJ0TGluZU51bWJlcjowLHN0YXJ0Q29sdW1uOjAsZW5kTGluZU51bWJlcjowLGVuZENvbHVtbjowfX0pLHR9KX1jb21wdXRlTGlua3ModCl7cmV0dXJuIHpyKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXt2YXIgZT10aGlzLl9nZXRNb2RlbCh0KTtyZXR1cm4gZT8oZT1lKSYmImZ1bmN0aW9uIj09dHlwZW9mIGUuZ2V0TGluZUNvdW50JiYiZnVuY3Rpb24iPT10eXBlb2YgZS5nZXRMaW5lQ29udGVudD9MdC5jb21wdXRlTGlua3MoZSk6W106bnVsbH0pfXRleHR1YWxTdWdnZXN0KGEscyxsLGMpe3JldHVybiB6cih0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7Y29uc3QgZT1uZXcgaighMCk7dmFyIHQ9bmV3IFJlZ0V4cChsLGMpO2NvbnN0IHI9bmV3IFNldDtlOmZvcih2YXIgbiBvZiBhKXtjb25zdCBvPXRoaXMuX2dldE1vZGVsKG4pO2lmKG8pZm9yKHZhciBpIG9mIG8ud29yZHModCkpaWYoaSE9PXMmJmlzTmFOKE51bWJlcihpKSkmJihyLmFkZChpKSxyLnNpemU+R3IuX3N1Z2dlc3Rpb25zTGltaXQpKWJyZWFrIGV9cmV0dXJue3dvcmRzOkFycmF5LmZyb20ociksZHVyYXRpb246ZS5lbGFwc2VkKCl9fSl9Y29tcHV0ZVdvcmRSYW5nZXModCxvLGEscyl7cmV0dXJuIHpyKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtjb25zdCBlPXRoaXMuX2dldE1vZGVsKHQpO2lmKCFlKXJldHVybiBPYmplY3QuY3JlYXRlKG51bGwpO3ZhciByPW5ldyBSZWdFeHAoYSxzKTtjb25zdCBuPU9iamVjdC5jcmVhdGUobnVsbCk7Zm9yKGxldCB0PW8uc3RhcnRMaW5lTnVtYmVyO3Q8by5lbmRMaW5lTnVtYmVyO3QrKylmb3IoY29uc3QgaSBvZiBlLmdldExpbmVXb3Jkcyh0LHIpKWlmKGlzTmFOKE51bWJlcihpLndvcmQpKSl7bGV0IGU9bltpLndvcmRdO2V8fChlPVtdLG5baS53b3JkXT1lKSxlLnB1c2goe3N0YXJ0TGluZU51bWJlcjp0LHN0YXJ0Q29sdW1uOmkuc3RhcnRDb2x1bW4sZW5kTGluZU51bWJlcjp0LGVuZENvbHVtbjppLmVuZENvbHVtbn0pfXJldHVybiBufSl9bmF2aWdhdGVWYWx1ZVNldChpLG8sYSxzLGwpe3JldHVybiB6cih0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7Y29uc3QgZT10aGlzLl9nZXRNb2RlbChpKTtpZighZSlyZXR1cm4gbnVsbDt2YXIgdD1uZXcgUmVnRXhwKHMsbCkscj0oby5zdGFydENvbHVtbj09PW8uZW5kQ29sdW1uJiYobz17c3RhcnRMaW5lTnVtYmVyOm8uc3RhcnRMaW5lTnVtYmVyLHN0YXJ0Q29sdW1uOm8uc3RhcnRDb2x1bW4sZW5kTGluZU51bWJlcjpvLmVuZExpbmVOdW1iZXIsZW5kQ29sdW1uOm8uZW5kQ29sdW1uKzF9KSxlLmdldFZhbHVlSW5SYW5nZShvKSksdD1lLmdldFdvcmRBdFBvc2l0aW9uKHtsaW5lTnVtYmVyOm8uc3RhcnRMaW5lTnVtYmVyLGNvbHVtbjpvLnN0YXJ0Q29sdW1ufSx0KTtpZighdClyZXR1cm4gbnVsbDt2YXIgbj1lLmdldFZhbHVlSW5SYW5nZSh0KTtyZXR1cm4gTXQuSU5TVEFOQ0UubmF2aWdhdGVWYWx1ZVNldChvLHIsdCxuLGEpfSl9bG9hZEZvcmVpZ25Nb2R1bGUoZSx0LHIpe3I9WShyLChlLHQpPT50aGlzLl9ob3N0LmZocihlLHQpKTtyZXR1cm4gdGhpcy5fZm9yZWlnbk1vZHVsZUZhY3Rvcnk/KHRoaXMuX2ZvcmVpZ25Nb2R1bGU9dGhpcy5fZm9yZWlnbk1vZHVsZUZhY3Rvcnkoe2hvc3Q6cixnZXRNaXJyb3JNb2RlbHM6KCk9PnRoaXMuX2dldE1vZGVscygpfSx0KSxQcm9taXNlLnJlc29sdmUoUSh0aGlzLl9mb3JlaWduTW9kdWxlKSkpOlByb21pc2UucmVqZWN0KG5ldyBFcnJvcigiVW5leHBlY3RlZCB1c2FnZSIpKX1mbXIoZSx0KXtpZighdGhpcy5fZm9yZWlnbk1vZHVsZXx8ImZ1bmN0aW9uIiE9dHlwZW9mIHRoaXMuX2ZvcmVpZ25Nb2R1bGVbZV0pcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcigiTWlzc2luZyByZXF1ZXN0SGFuZGxlciBvciBtZXRob2Q6ICIrZSkpO3RyeXtyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHRoaXMuX2ZvcmVpZ25Nb2R1bGVbZV0uYXBwbHkodGhpcy5fZm9yZWlnbk1vZHVsZSx0KSl9Y2F0Y2goZSl7cmV0dXJuIFByb21pc2UucmVqZWN0KGUpfX19R3IuX2RpZmZMaW1pdD0xZTUsR3IuX3N1Z2dlc3Rpb25zTGltaXQ9MWU0LCJmdW5jdGlvbiI9PXR5cGVvZiBpbXBvcnRTY3JpcHRzJiYoTS5tb25hY289e2VkaXRvcjp2b2lkIDAsbGFuZ3VhZ2VzOnZvaWQgMCxleHRyYTp2b2lkIDAsQ2FuY2VsbGF0aW9uVG9rZW5Tb3VyY2U6VHQsRW1pdHRlcjpYLEtleUNvZGU6cyxLZXlNb2Q6VXIsUG9zaXRpb246YXQsUmFuZ2U6c3QsU2VsZWN0aW9uOld0LFVyaTpaZSxUb2tlbjp4cixNYXJrZG93blN0cmluZzpScixNYXJrZG93blN0cmluZ1RleHROZXdsaW5lU3R5bGU6X24sRGlzcG9zYWJsZTp3LERpc3Bvc2FibGVTdG9yZTpDLEVycm9ySGFuZGxlcjpsLEFic3RyYWN0TG9nZ2VyOktyLENvbnNvbGVMb2dnZXI6anIsVG9rZW5pemF0aW9uUmVzdWx0OkVyLEVuY29kZWRUb2tlbml6YXRpb25SZXN1bHQ6a3IsU2VsZWN0aW9uRGlyZWN0aW9uOkZuLE1hcmtlclNldmVyaXR5OmpuLE1hcmtlclRhZzpIbixMb2dMZXZlbDpyaSxlcnJvckhhbmRsZXI6Y30pO2xldCBacj0hMTtmdW5jdGlvbiBYcih0KXtpZighWnIpe1pyPSEwO2NvbnN0IHI9bmV3IHZlKGU9PntzZWxmLnBvc3RNZXNzYWdlKGUpfSxlPT5uZXcgR3IoZSx0KSk7c2VsZi5vbm1lc3NhZ2U9ZT0+e3Iub25tZXNzYWdlKGUuZGF0YSl9fX1mdW5jdGlvbiBRcihvLGUpe3ZhciBhPW8ubGVuZ3RoLHM9MCxsPSIiLGM9MCx1PTE2LGg9MCxtPTAsZj0wLGc9MCxkPTA7ZnVuY3Rpb24gcCgpe2Zvcih2YXIgZT0iIix0PXM7Oyl7aWYoYTw9cyl7ZSs9by5zdWJzdHJpbmcodCxzKSxkPTI7YnJlYWt9dmFyIHI9by5jaGFyQ29kZUF0KHMpO2lmKDM0PT09cil7ZSs9by5zdWJzdHJpbmcodCxzKSxzKys7YnJlYWt9aWYoOTIhPT1yKXtpZigwPD1yJiZyPD0zMSl7aWYoZW4ocikpe2UrPW8uc3Vic3RyaW5nKHQscyksZD0yO2JyZWFrfWQ9Nn1zKyt9ZWxzZXtpZihlKz1vLnN1YnN0cmluZyh0LHMpLGE8PSsrcyl7ZD0yO2JyZWFrfXN3aXRjaChvLmNoYXJDb2RlQXQocysrKSl7Y2FzZSAzNDplKz0nIic7YnJlYWs7Y2FzZSA5MjplKz0iXFwiO2JyZWFrO2Nhc2UgNDc6ZSs9Ii8iO2JyZWFrO2Nhc2UgOTg6ZSs9IlxiIjticmVhaztjYXNlIDEwMjplKz0iXGYiO2JyZWFrO2Nhc2UgMTEwOmUrPSJcbiI7YnJlYWs7Y2FzZSAxMTQ6ZSs9IlxyIjticmVhaztjYXNlIDExNjplKz0iXHQiO2JyZWFrO2Nhc2UgMTE3OnZhciBuPWZ1bmN0aW9uKGUsdCl7Zm9yKHZhciByPTAsbj0wO3I8ZXx8IXQ7KXt2YXIgaT1vLmNoYXJDb2RlQXQocyk7aWYoNDg8PWkmJmk8PTU3KW49MTYqbitpLTQ4O2Vsc2UgaWYoNjU8PWkmJmk8PTcwKW49MTYqbitpLTY1KzEwO2Vsc2V7aWYoISg5Nzw9aSYmaTw9MTAyKSlicmVhaztuPTE2Km4raS05NysxMH1zKysscisrfXJldHVybiBuPXI8ZT8tMTpufSg0LCEwKTswPD1uP2UrPVN0cmluZy5mcm9tQ2hhckNvZGUobik6ZD00O2JyZWFrO2RlZmF1bHQ6ZD01fXQ9c319cmV0dXJuIGV9ZnVuY3Rpb24gdCgpe2lmKGw9IiIsZD0wLG09aCxnPWYsYTw9KGM9cykpcmV0dXJuIGM9YSx1PTE3O3ZhciBlPW8uY2hhckNvZGVBdChzKTtpZihZcihlKSl7Zm9yKDtzKyssbCs9U3RyaW5nLmZyb21DaGFyQ29kZShlKSxZcihlPW8uY2hhckNvZGVBdChzKSk7KTtyZXR1cm4gdT0xNX1pZihlbihlKSlyZXR1cm4gcysrLGwrPVN0cmluZy5mcm9tQ2hhckNvZGUoZSksMTM9PT1lJiYxMD09PW8uY2hhckNvZGVBdChzKSYmKHMrKyxsKz0iXG4iKSxoKyssZj1zLHU9MTQ7c3dpdGNoKGUpe2Nhc2UgMTIzOnJldHVybiBzKyssdT0xO2Nhc2UgMTI1OnJldHVybiBzKyssdT0yO2Nhc2UgOTE6cmV0dXJuIHMrKyx1PTM7Y2FzZSA5MzpyZXR1cm4gcysrLHU9NDtjYXNlIDU4OnJldHVybiBzKyssdT02O2Nhc2UgNDQ6cmV0dXJuIHMrKyx1PTU7Y2FzZSAzNDpyZXR1cm4gcysrLGw9cCgpLHU9MTA7Y2FzZSA0Nzp2YXIgdD1zLTE7aWYoNDc9PT1vLmNoYXJDb2RlQXQocysxKSl7Zm9yKHMrPTI7czxhJiYhZW4oby5jaGFyQ29kZUF0KHMpKTspcysrO3JldHVybiBsPW8uc3Vic3RyaW5nKHQscyksdT0xMn1pZig0MiE9PW8uY2hhckNvZGVBdChzKzEpKXJldHVybiBsKz1TdHJpbmcuZnJvbUNoYXJDb2RlKGUpLHMrKyx1PTE2O3MrPTI7Zm9yKHZhciByPWEtMSxuPSExO3M8cjspe3ZhciBpPW8uY2hhckNvZGVBdChzKTtpZig0Mj09PWkmJjQ3PT09by5jaGFyQ29kZUF0KHMrMSkpe3MrPTIsbj0hMDticmVha31zKyssZW4oaSkmJigxMz09PWkmJjEwPT09by5jaGFyQ29kZUF0KHMpJiZzKyssaCsrLGY9cyl9cmV0dXJuIG58fChzKyssZD0xKSxsPW8uc3Vic3RyaW5nKHQscyksdT0xMztjYXNlIDQ1OmlmKGwrPVN0cmluZy5mcm9tQ2hhckNvZGUoZSksKytzPT09YXx8IXRuKG8uY2hhckNvZGVBdChzKSkpcmV0dXJuIHU9MTY7Y2FzZSA0ODpjYXNlIDQ5OmNhc2UgNTA6Y2FzZSA1MTpjYXNlIDUyOmNhc2UgNTM6Y2FzZSA1NDpjYXNlIDU1OmNhc2UgNTY6Y2FzZSA1NzpyZXR1cm4gbCs9ZnVuY3Rpb24oKXt2YXIgZT1zO2lmKDQ4PT09by5jaGFyQ29kZUF0KHMpKXMrKztlbHNlIGZvcihzKys7czxvLmxlbmd0aCYmdG4oby5jaGFyQ29kZUF0KHMpKTspcysrO2lmKHM8by5sZW5ndGgmJjQ2PT09by5jaGFyQ29kZUF0KHMpKXtpZighKCsrczxvLmxlbmd0aCYmdG4oby5jaGFyQ29kZUF0KHMpKSkpcmV0dXJuIGQ9MyxvLnN1YnN0cmluZyhlLHMpO2ZvcihzKys7czxvLmxlbmd0aCYmdG4oby5jaGFyQ29kZUF0KHMpKTspcysrfXZhciB0PXM7aWYoczxvLmxlbmd0aCYmKDY5PT09by5jaGFyQ29kZUF0KHMpfHwxMDE9PT1vLmNoYXJDb2RlQXQocykpKWlmKCgrK3M8by5sZW5ndGgmJjQzPT09by5jaGFyQ29kZUF0KHMpfHw0NT09PW8uY2hhckNvZGVBdChzKSkmJnMrKyxzPG8ubGVuZ3RoJiZ0bihvLmNoYXJDb2RlQXQocykpKXtmb3IocysrO3M8by5sZW5ndGgmJnRuKG8uY2hhckNvZGVBdChzKSk7KXMrKzt0PXN9ZWxzZSBkPTM7cmV0dXJuIG8uc3Vic3RyaW5nKGUsdCl9KCksdT0xMTtkZWZhdWx0OmZvcig7czxhJiZmdW5jdGlvbihlKXtpZihZcihlKXx8ZW4oZSkpcmV0dXJuITE7c3dpdGNoKGUpe2Nhc2UgMTI1OmNhc2UgOTM6Y2FzZSAxMjM6Y2FzZSA5MTpjYXNlIDM0OmNhc2UgNTg6Y2FzZSA0NDpjYXNlIDQ3OnJldHVybiExfXJldHVybiEwfShlKTspcysrLGU9by5jaGFyQ29kZUF0KHMpO2lmKGM9PT1zKXJldHVybiBsKz1TdHJpbmcuZnJvbUNoYXJDb2RlKGUpLHMrKyx1PTE2O3N3aXRjaChsPW8uc3Vic3RyaW5nKGMscykpe2Nhc2UidHJ1ZSI6cmV0dXJuIHU9ODtjYXNlImZhbHNlIjpyZXR1cm4gdT05O2Nhc2UibnVsbCI6cmV0dXJuIHU9N31yZXR1cm4gdT0xNn19cmV0dXJue3NldFBvc2l0aW9uOmZ1bmN0aW9uKGUpe3M9ZSxsPSIiLHU9MTYsZD1jPTB9LGdldFBvc2l0aW9uOmZ1bmN0aW9uKCl7cmV0dXJuIHN9LHNjYW46KGU9dm9pZCAwPT09ZT8hMTplKT9mdW5jdGlvbigpe2Zvcih2YXIgZTsxMjw9KGU9dCgpKSYmZTw9MTU7KTtyZXR1cm4gZX06dCxnZXRUb2tlbjpmdW5jdGlvbigpe3JldHVybiB1fSxnZXRUb2tlblZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIGx9LGdldFRva2VuT2Zmc2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGN9LGdldFRva2VuTGVuZ3RoOmZ1bmN0aW9uKCl7cmV0dXJuIHMtY30sZ2V0VG9rZW5TdGFydExpbmU6ZnVuY3Rpb24oKXtyZXR1cm4gbX0sZ2V0VG9rZW5TdGFydENoYXJhY3RlcjpmdW5jdGlvbigpe3JldHVybiBjLWd9LGdldFRva2VuRXJyb3I6ZnVuY3Rpb24oKXtyZXR1cm4gZH19fWZ1bmN0aW9uIFlyKGUpe3JldHVybiAzMj09PWV8fDk9PT1lfHwxMT09PWV8fDEyPT09ZXx8MTYwPT09ZXx8NTc2MD09PWV8fDgxOTI8PWUmJmU8PTgyMDN8fDgyMzk9PT1lfHw4Mjg3PT09ZXx8MTIyODg9PT1lfHw2NTI3OT09PWV9ZnVuY3Rpb24gZW4oZSl7cmV0dXJuIDEwPT09ZXx8MTM9PT1lfHw4MjMyPT09ZXx8ODIzMz09PWV9ZnVuY3Rpb24gdG4oZSl7cmV0dXJuIDQ4PD1lJiZlPD01N31mdW5jdGlvbiBybihuLHUsZSl7dmFyIGgsdCxmLGQ7aWYodSl7Zm9yKGY9dS5vZmZzZXQsZD1mK3UubGVuZ3RoLHQ9ZjswPHQmJiFvbihuLHQtMSk7KXQtLTtmb3IodmFyIG09ZDttPG4ubGVuZ3RoJiYhb24obixtKTspbSsrO2E9bi5zdWJzdHJpbmcodCxtKSxoPWZ1bmN0aW9uKGUsdCl7dmFyIHI9MCxuPTAsaT10LnRhYlNpemV8fDQ7Zm9yKDtyPGUubGVuZ3RoOyl7dmFyIG89ZS5jaGFyQXQocik7aWYoIiAiPT09byluKys7ZWxzZXtpZigiXHQiIT09bylicmVhaztuKz1pfXIrK31yZXR1cm4gTWF0aC5mbG9vcihuL2kpfShhLGUpfWVsc2UgZj10PWg9MCxkPShhPW4pLmxlbmd0aDt2YXIgZz1mdW5jdGlvbihlLHQpe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgbj10LmNoYXJBdChyKTtpZigiXHIiPT09bilyZXR1cm4gcisxPHQubGVuZ3RoJiYiXG4iPT09dC5jaGFyQXQocisxKT8iXHJcbiI6IlxyIjtpZigiXG4iPT09bilyZXR1cm4iXG4ifXJldHVybiBlJiZlLmVvbHx8IlxuIn0oZSxuKSxyPSExLHA9MCxiPWUuaW5zZXJ0U3BhY2VzP25uKCIgIixlLnRhYlNpemV8fDQpOiJcdCIsaT1RcihhLCExKSx2PSExO2Z1bmN0aW9uIG8oKXtyZXR1cm4gZytubihiLGgrcCl9ZnVuY3Rpb24geSgpe3ZhciBlPWkuc2NhbigpO2ZvcihyPSExOzE1PT09ZXx8MTQ9PT1lOylyPXJ8fDE0PT09ZSxlPWkuc2NhbigpO3JldHVybiB2PTE2PT09ZXx8MCE9PWkuZ2V0VG9rZW5FcnJvcigpLGV9dmFyIEM9W107ZnVuY3Rpb24gdyhlLHQscil7dnx8dSYmISh0PGQmJmY8cil8fG4uc3Vic3RyaW5nKHQscik9PT1lfHxDLnB1c2goe29mZnNldDp0LGxlbmd0aDpyLXQsY29udGVudDplfSl9dmFyIGEscz15KCk7Zm9yKDE3IT09cyYmKGE9aS5nZXRUb2tlbk9mZnNldCgpK3QsdyhubihiLGgpLHQsYSkpOzE3IT09czspe2Zvcih2YXIgXz1pLmdldFRva2VuT2Zmc2V0KCkraS5nZXRUb2tlbkxlbmd0aCgpK3QsbD15KCksYz0iIixTPSExOyFyJiYoMTI9PT1sfHwxMz09PWwpOyl3KCIgIixfLGkuZ2V0VG9rZW5PZmZzZXQoKSt0KSxfPWkuZ2V0VG9rZW5PZmZzZXQoKStpLmdldFRva2VuTGVuZ3RoKCkrdCxjPShTPTEyPT09bCk/bygpOiIiLGw9eSgpO2lmKDI9PT1sKTEhPT1zJiYocC0tLGM9bygpKTtlbHNlIGlmKDQ9PT1sKTMhPT1zJiYocC0tLGM9bygpKTtlbHNle3N3aXRjaChzKXtjYXNlIDM6Y2FzZSAxOnArKyxjPW8oKTticmVhaztjYXNlIDU6Y2FzZSAxMjpjPW8oKTticmVhaztjYXNlIDEzOnI/Yz1vKCk6U3x8KGM9IiAiKTticmVhaztjYXNlIDY6U3x8KGM9IiAiKTticmVhaztjYXNlIDEwOmlmKDY9PT1sKXtTfHwoYz0iIik7YnJlYWt9Y2FzZSA3OmNhc2UgODpjYXNlIDk6Y2FzZSAxMTpjYXNlIDI6Y2FzZSA0OjEyPT09bHx8MTM9PT1sP1N8fChjPSIgIik6NSE9PWwmJjE3IT09bCYmKHY9ITApO2JyZWFrO2Nhc2UgMTY6dj0hMH0hcnx8MTIhPT1sJiYxMyE9PWx8fChjPW8oKSl9dyhjPTE3PT09bD9lLmluc2VydEZpbmFsTmV3bGluZT9nOiIiOmMsXyxpLmdldFRva2VuT2Zmc2V0KCkrdCkscz1sfXJldHVybiBDfWZ1bmN0aW9uIG5uKGUsdCl7Zm9yKHZhciByPSIiLG49MDtuPHQ7bisrKXIrPWU7cmV0dXJuIHJ9ZnVuY3Rpb24gb24oZSx0KXtyZXR1cm4tMSE9PSJcclxuIi5pbmRleE9mKGUuY2hhckF0KHQpKX1zZWxmLm9ubWVzc2FnZT1lPT57WnJ8fFhyKG51bGwpfSwoSHI9SHJ8fHt9KS5ERUZBVUxUPXthbGxvd1RyYWlsaW5nQ29tbWE6ITF9O3ZhciBhbixzbixsbixjbix1bixobixmbixkbixtbixnbixwbixibix2bix5bixDbix3bixfbixTbixBbj1Rcix4bj1mdW5jdGlvbihlLG4sdCl7dm9pZCAwPT09biYmKG49W10pLHZvaWQgMD09PXQmJih0PUhyLkRFRkFVTFQpO3ZhciByPW51bGwsaT1bXSxvPVtdO2Z1bmN0aW9uIGEoZSl7QXJyYXkuaXNBcnJheShpKT9pLnB1c2goZSk6bnVsbCE9PXImJihpW3JdPWUpfXJldHVybiBmdW5jdGlvbih1LGUsdCl7dm9pZCAwPT09dCYmKHQ9SHIuREVGQVVMVCk7dmFyIGk9UXIodSwhMSk7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZT9mdW5jdGlvbigpe3JldHVybiBlKGkuZ2V0VG9rZW5PZmZzZXQoKSxpLmdldFRva2VuTGVuZ3RoKCksaS5nZXRUb2tlblN0YXJ0TGluZSgpLGkuZ2V0VG9rZW5TdGFydENoYXJhY3RlcigpKX06ZnVuY3Rpb24oKXtyZXR1cm4hMH19ZnVuY3Rpb24gbih0KXtyZXR1cm4gdD9mdW5jdGlvbihlKXtyZXR1cm4gdChlLGkuZ2V0VG9rZW5PZmZzZXQoKSxpLmdldFRva2VuTGVuZ3RoKCksaS5nZXRUb2tlblN0YXJ0TGluZSgpLGkuZ2V0VG9rZW5TdGFydENoYXJhY3RlcigpKX06ZnVuY3Rpb24oKXtyZXR1cm4hMH19dmFyIGg9cihlLm9uT2JqZWN0QmVnaW4pLGY9bihlLm9uT2JqZWN0UHJvcGVydHkpLGQ9cihlLm9uT2JqZWN0RW5kKSxtPXIoZS5vbkFycmF5QmVnaW4pLGc9cihlLm9uQXJyYXlFbmQpLG89bihlLm9uTGl0ZXJhbFZhbHVlKSxhPW4oZS5vblNlcGFyYXRvcikscD1yKGUub25Db21tZW50KSxiPW4oZS5vbkVycm9yKSx2PXQmJnQuZGlzYWxsb3dDb21tZW50cyx5PXQmJnQuYWxsb3dUcmFpbGluZ0NvbW1hO2Z1bmN0aW9uIHMoKXtmb3IoOzspe3ZhciBlPWkuc2NhbigpO3N3aXRjaChpLmdldFRva2VuRXJyb3IoKSl7Y2FzZSA0OmwoMTQpO2JyZWFrO2Nhc2UgNTpsKDE1KTticmVhaztjYXNlIDM6bCgxMyk7YnJlYWs7Y2FzZSAxOnZ8fGwoMTEpO2JyZWFrO2Nhc2UgMjpsKDEyKTticmVhaztjYXNlIDY6bCgxNil9c3dpdGNoKGUpe2Nhc2UgMTI6Y2FzZSAxMzp2P2woMTApOnAoKTticmVhaztjYXNlIDE2OmwoMSk7YnJlYWs7Y2FzZSAxNTpjYXNlIDE0OmJyZWFrO2RlZmF1bHQ6cmV0dXJuIGV9fX1mdW5jdGlvbiBsKGUsdCxyKXtpZih2b2lkIDA9PT10JiYodD1bXSksdm9pZCAwPT09ciYmKHI9W10pLGIoZSksMDx0Lmxlbmd0aCtyLmxlbmd0aClmb3IodmFyIG49aS5nZXRUb2tlbigpOzE3IT09bjspe2lmKC0xIT09dC5pbmRleE9mKG4pKXtzKCk7YnJlYWt9aWYoLTEhPT1yLmluZGV4T2YobikpYnJlYWs7bj1zKCl9fWZ1bmN0aW9uIEMoZSl7dmFyIHQ9aS5nZXRUb2tlblZhbHVlKCk7cmV0dXJuKGU/bzpmKSh0KSxzKCksITB9ZnVuY3Rpb24gdygpe2goKSxzKCk7Zm9yKHZhciBlPSExOzIhPT1pLmdldFRva2VuKCkmJjE3IT09aS5nZXRUb2tlbigpOyl7aWYoNT09PWkuZ2V0VG9rZW4oKSl7aWYoZXx8bCg0LFtdLFtdKSxhKCIsIikscygpLDI9PT1pLmdldFRva2VuKCkmJnkpYnJlYWt9ZWxzZSBlJiZsKDYsW10sW10pOyFmdW5jdGlvbigpe2lmKDEwPT09aS5nZXRUb2tlbigpKXJldHVybiBDKCExKSw2PT09aS5nZXRUb2tlbigpPyhhKCI6IikscygpLGMoKXx8bCg0LFtdLFsyLDVdKSk6bCg1LFtdLFsyLDVdKSwxO2woMyxbXSxbMiw1XSl9KCkmJmwoNCxbXSxbMiw1XSksZT0hMH1yZXR1cm4gZCgpLDIhPT1pLmdldFRva2VuKCk/bCg3LFsyXSxbXSk6cygpLCEwfWZ1bmN0aW9uIGMoKXtzd2l0Y2goaS5nZXRUb2tlbigpKXtjYXNlIDM6bSgpLHMoKTtmb3IodmFyIGU9ITE7NCE9PWkuZ2V0VG9rZW4oKSYmMTchPT1pLmdldFRva2VuKCk7KXtpZig1PT09aS5nZXRUb2tlbigpKXtpZihlfHxsKDQsW10sW10pLGEoIiwiKSxzKCksND09PWkuZ2V0VG9rZW4oKSYmeSlicmVha31lbHNlIGUmJmwoNixbXSxbXSk7YygpfHxsKDQsW10sWzQsNV0pLGU9ITB9cmV0dXJuIGcoKSw0IT09aS5nZXRUb2tlbigpP2woOCxbNF0sW10pOnMoKSwxO2Nhc2UgMTpyZXR1cm4gdygpO2Nhc2UgMTA6cmV0dXJuIEMoITApO2RlZmF1bHQ6c3dpdGNoKGkuZ2V0VG9rZW4oKSl7Y2FzZSAxMTp2YXIgdD1pLmdldFRva2VuVmFsdWUoKSx0PU51bWJlcih0KTtpc05hTih0KSYmKGwoMiksdD0wKSxvKHQpO2JyZWFrO2Nhc2UgNzpvKG51bGwpO2JyZWFrO2Nhc2UgODpvKCEwKTticmVhaztjYXNlIDk6byghMSk7YnJlYWs7ZGVmYXVsdDpyZXR1cm59cmV0dXJuIHMoKSwxfX1pZihzKCksMTc9PT1pLmdldFRva2VuKCkpcmV0dXJuIHQuYWxsb3dFbXB0eUNvbnRlbnR8fGwoNCxbXSxbXSk7aWYoIWMoKSlyZXR1cm4gbCg0LFtdLFtdKTsxNyE9PWkuZ2V0VG9rZW4oKSYmbCg5LFtdLFtdKX0oZSx7b25PYmplY3RCZWdpbjpmdW5jdGlvbigpe3ZhciBlPXt9O2EoZSksby5wdXNoKGkpLGk9ZSxyPW51bGx9LG9uT2JqZWN0UHJvcGVydHk6ZnVuY3Rpb24oZSl7cj1lfSxvbk9iamVjdEVuZDpmdW5jdGlvbigpe2k9by5wb3AoKX0sb25BcnJheUJlZ2luOmZ1bmN0aW9uKCl7dmFyIGU9W107YShlKSxvLnB1c2goaSksaT1lLHI9bnVsbH0sb25BcnJheUVuZDpmdW5jdGlvbigpe2k9by5wb3AoKX0sb25MaXRlcmFsVmFsdWU6YSxvbkVycm9yOmZ1bmN0aW9uKGUsdCxyKXtuLnB1c2goe2Vycm9yOmUsb2Zmc2V0OnQsbGVuZ3RoOnJ9KX19LHQpLGlbMF19LEVuPWZ1bmN0aW9uIGUodCxyLG4pe2lmKHZvaWQgMD09PShjPW49dm9pZCAwIT09biYmbikmJihjPSExKSwobD1yKT49KHM9dCkub2Zmc2V0JiZsPHMub2Zmc2V0K3MubGVuZ3RofHxjJiZsPT09cy5vZmZzZXQrcy5sZW5ndGgpe3ZhciBpPXQuY2hpbGRyZW47aWYoQXJyYXkuaXNBcnJheShpKSlmb3IodmFyIG89MDtvPGkubGVuZ3RoJiZpW29dLm9mZnNldDw9cjtvKyspe3ZhciBhPWUoaVtvXSxyLG4pO2lmKGEpcmV0dXJuIGF9cmV0dXJuIHR9dmFyIHMsbCxjfSxrbj1mdW5jdGlvbiBlKHQpe2lmKCF0LnBhcmVudHx8IXQucGFyZW50LmNoaWxkcmVuKXJldHVybltdO3ZhciByLG49ZSh0LnBhcmVudCk7cmV0dXJuInByb3BlcnR5Ij09PXQucGFyZW50LnR5cGU/KHI9dC5wYXJlbnQuY2hpbGRyZW5bMF0udmFsdWUsbi5wdXNoKHIpKToiYXJyYXkiIT09dC5wYXJlbnQudHlwZXx8LTEhPT0ocj10LnBhcmVudC5jaGlsZHJlbi5pbmRleE9mKHQpKSYmbi5wdXNoKHIpLG59LE5uPWZ1bmN0aW9uIGUodCl7c3dpdGNoKHQudHlwZSl7Y2FzZSJhcnJheSI6cmV0dXJuIHQuY2hpbGRyZW4ubWFwKGUpO2Nhc2Uib2JqZWN0Ijpmb3IodmFyIHI9T2JqZWN0LmNyZWF0ZShudWxsKSxuPTAsaT10LmNoaWxkcmVuO248aS5sZW5ndGg7bisrKXt2YXIgbz1pW25dLGE9by5jaGlsZHJlblsxXTthJiYocltvLmNoaWxkcmVuWzBdLnZhbHVlXT1lKGEpKX1yZXR1cm4gcjtjYXNlIm51bGwiOmNhc2Uic3RyaW5nIjpjYXNlIm51bWJlciI6Y2FzZSJib29sZWFuIjpyZXR1cm4gdC52YWx1ZTtkZWZhdWx0OnJldHVybn19O2Z1bmN0aW9uIExuKGUsdCl7aWYoZT09PXQpcmV0dXJuIDE7aWYobnVsbCE9ZSYmbnVsbCE9dCYmdHlwZW9mIGU9PXR5cGVvZiB0JiYib2JqZWN0Ij09dHlwZW9mIGUmJkFycmF5LmlzQXJyYXkoZSk9PT1BcnJheS5pc0FycmF5KHQpKXt2YXIgcixuO2lmKEFycmF5LmlzQXJyYXkoZSkpe2lmKGUubGVuZ3RoIT09dC5sZW5ndGgpcmV0dXJuO2ZvcihyPTA7cjxlLmxlbmd0aDtyKyspaWYoIUxuKGVbcl0sdFtyXSkpcmV0dXJufWVsc2V7dmFyIGk9W107Zm9yKG4gaW4gZSlpLnB1c2gobik7aS5zb3J0KCk7dmFyIG89W107Zm9yKG4gaW4gdClvLnB1c2gobik7aWYoby5zb3J0KCksIUxuKGksbykpcmV0dXJuO2ZvcihyPTA7cjxpLmxlbmd0aDtyKyspaWYoIUxuKGVbaVtyXV0sdFtpW3JdXSkpcmV0dXJufXJldHVybiAxfX1mdW5jdGlvbiBNbihlKXtyZXR1cm4ibnVtYmVyIj09dHlwZW9mIGV9ZnVuY3Rpb24gT24oZSl7cmV0dXJuIHZvaWQgMCE9PWV9ZnVuY3Rpb24gUG4oZSl7cmV0dXJuImJvb2xlYW4iPT10eXBlb2YgZX1mdW5jdGlvbiBUbihlLHQpe3ZhciByPWUubGVuZ3RoLXQubGVuZ3RoO3JldHVybiAwPHI/ZS5sYXN0SW5kZXhPZih0KT09PXI6MD09ciYmZT09PXR9ZnVuY3Rpb24gSW4odCl7dmFyIHI9IiI7IWZ1bmN0aW9uKGUsdCl7aWYoIShlLmxlbmd0aDx0Lmxlbmd0aCkpe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKWlmKGVbcl0hPT10W3JdKXJldHVybjtyZXR1cm4gMX19KHQsIig/aSkiKXx8KHQ9dC5zdWJzdHJpbmcoNCkscj0iaSIpO3RyeXtyZXR1cm4gbmV3IFJlZ0V4cCh0LHIrInUiKX1jYXRjaChlKXt0cnl7cmV0dXJuIG5ldyBSZWdFeHAodCxyKX1jYXRjaChlKXtyZXR1cm59fX0odD1hbj1hbnx8e30pLk1JTl9WQUxVRT0wLHQuTUFYX1ZBTFVFPTIxNDc0ODM2NDcsKGZpPXNuPXNufHx7fSkuY3JlYXRlPWZ1bmN0aW9uKGUsdCl7cmV0dXJue2xpbmU6ZT1lPT09TnVtYmVyLk1BWF9WQUxVRT9hbi5NQVhfVkFMVUU6ZSxjaGFyYWN0ZXI6dD10PT09TnVtYmVyLk1BWF9WQUxVRT9hbi5NQVhfVkFMVUU6dH19LGZpLmlzPWZ1bmN0aW9uKGUpe3JldHVybiBhLm9iamVjdExpdGVyYWwoZSkmJmEudWludGVnZXIoZS5saW5lKSYmYS51aW50ZWdlcihlLmNoYXJhY3Rlcil9LChuPWxuPWxufHx7fSkuY3JlYXRlPWZ1bmN0aW9uKGUsdCxyLG4pe2lmKGEudWludGVnZXIoZSkmJmEudWludGVnZXIodCkmJmEudWludGVnZXIocikmJmEudWludGVnZXIobikpcmV0dXJue3N0YXJ0OnNuLmNyZWF0ZShlLHQpLGVuZDpzbi5jcmVhdGUocixuKX07aWYoc24uaXMoZSkmJnNuLmlzKHQpKXJldHVybntzdGFydDplLGVuZDp0fTt0aHJvdyBuZXcgRXJyb3IoIlJhbmdlI2NyZWF0ZSBjYWxsZWQgd2l0aCBpbnZhbGlkIGFyZ3VtZW50c1siK2UrIiwgIit0KyIsICIrcisiLCAiK24rIl0iKX0sbi5pcz1mdW5jdGlvbihlKXtyZXR1cm4gYS5vYmplY3RMaXRlcmFsKGUpJiZzbi5pcyhlLnN0YXJ0KSYmc24uaXMoZS5lbmQpfSwoZT1jbj1jbnx8e30pLmNyZWF0ZT1mdW5jdGlvbihlLHQpe3JldHVybnt1cmk6ZSxyYW5nZTp0fX0sZS5pcz1mdW5jdGlvbihlKXtyZXR1cm4gYS5kZWZpbmVkKGUpJiZsbi5pcyhlLnJhbmdlKSYmKGEuc3RyaW5nKGUudXJpKXx8YS51bmRlZmluZWQoZS51cmkpKX0sKHM9d2k9d2l8fHt9KS5jcmVhdGU9ZnVuY3Rpb24oZSx0LHIsbil7cmV0dXJue3JlZDplLGdyZWVuOnQsYmx1ZTpyLGFscGhhOm59fSxzLmlzPWZ1bmN0aW9uKGUpe3JldHVybiBhLm51bWJlclJhbmdlKGUucmVkLDAsMSkmJmEubnVtYmVyUmFuZ2UoZS5ncmVlbiwwLDEpJiZhLm51bWJlclJhbmdlKGUuYmx1ZSwwLDEpJiZhLm51bWJlclJhbmdlKGUuYWxwaGEsMCwxKX0sKF9uPXVuPXVufHx7fSkuQ29tbWVudD0iY29tbWVudCIsX24uSW1wb3J0cz0iaW1wb3J0cyIsX24uUmVnaW9uPSJyZWdpb24iLChGbj1obj1obnx8e30pLmNyZWF0ZT1mdW5jdGlvbihlLHQpe3JldHVybntsb2NhdGlvbjplLG1lc3NhZ2U6dH19LEZuLmlzPWZ1bmN0aW9uKGUpe3JldHVybiBhLmRlZmluZWQoZSkmJmNuLmlzKGUubG9jYXRpb24pJiZhLnN0cmluZyhlLm1lc3NhZ2UpfSwoam49Zm49Zm58fHt9KS5FcnJvcj0xLGpuLldhcm5pbmc9Mixqbi5JbmZvcm1hdGlvbj0zLGpuLkhpbnQ9NCwoJG58fHt9KS5pcz1mdW5jdGlvbihlKXtyZXR1cm4gbnVsbCE9ZSYmYS5zdHJpbmcoZS5ocmVmKX0sKEhuPWRuPWRufHx7fSkuY3JlYXRlPWZ1bmN0aW9uKGUsdCxyLG4saSxvKXtyZXR1cm4gZT17cmFuZ2U6ZSxtZXNzYWdlOnR9LGEuZGVmaW5lZChyKSYmKGUuc2V2ZXJpdHk9ciksYS5kZWZpbmVkKG4pJiYoZS5jb2RlPW4pLGEuZGVmaW5lZChpKSYmKGUuc291cmNlPWkpLGEuZGVmaW5lZChvKSYmKGUucmVsYXRlZEluZm9ybWF0aW9uPW8pLGV9LEhuLmlzPWZ1bmN0aW9uKGUpe3ZhciB0O3JldHVybiBhLmRlZmluZWQoZSkmJmxuLmlzKGUucmFuZ2UpJiZhLnN0cmluZyhlLm1lc3NhZ2UpJiYoYS5udW1iZXIoZS5zZXZlcml0eSl8fGEudW5kZWZpbmVkKGUuc2V2ZXJpdHkpKSYmKGEuaW50ZWdlcihlLmNvZGUpfHxhLnN0cmluZyhlLmNvZGUpfHxhLnVuZGVmaW5lZChlLmNvZGUpKSYmKGEudW5kZWZpbmVkKGUuY29kZURlc2NyaXB0aW9uKXx8YS5zdHJpbmcobnVsbD09PSh0PWUuY29kZURlc2NyaXB0aW9uKXx8dm9pZCAwPT09dD92b2lkIDA6dC5ocmVmKSkmJihhLnN0cmluZyhlLnNvdXJjZSl8fGEudW5kZWZpbmVkKGUuc291cmNlKSkmJihhLnVuZGVmaW5lZChlLnJlbGF0ZWRJbmZvcm1hdGlvbil8fGEudHlwZWRBcnJheShlLnJlbGF0ZWRJbmZvcm1hdGlvbixobi5pcykpfSwocmk9Wm49Wm58fHt9KS5jcmVhdGU9ZnVuY3Rpb24oZSx0KXtmb3IodmFyIHI9W10sbj0yO248YXJndW1lbnRzLmxlbmd0aDtuKyspcltuLTJdPWFyZ3VtZW50c1tuXTtyZXR1cm4gZT17dGl0bGU6ZSxjb21tYW5kOnR9LGEuZGVmaW5lZChyKSYmMDxyLmxlbmd0aCYmKGUuYXJndW1lbnRzPXIpLGV9LHJpLmlzPWZ1bmN0aW9uKGUpe3JldHVybiBhLmRlZmluZWQoZSkmJmEuc3RyaW5nKGUudGl0bGUpJiZhLnN0cmluZyhlLmNvbW1hbmQpfSwodD1tbj1tbnx8e30pLnJlcGxhY2U9ZnVuY3Rpb24oZSx0KXtyZXR1cm57cmFuZ2U6ZSxuZXdUZXh0OnR9fSx0Lmluc2VydD1mdW5jdGlvbihlLHQpe3JldHVybntyYW5nZTp7c3RhcnQ6ZSxlbmQ6ZX0sbmV3VGV4dDp0fX0sdC5kZWw9ZnVuY3Rpb24oZSl7cmV0dXJue3JhbmdlOmUsbmV3VGV4dDoiIn19LHQuaXM9ZnVuY3Rpb24oZSl7cmV0dXJuIGEub2JqZWN0TGl0ZXJhbChlKSYmYS5zdHJpbmcoZS5uZXdUZXh0KSYmbG4uaXMoZS5yYW5nZSl9LChmaT1nbj1nbnx8e30pLmNyZWF0ZT1mdW5jdGlvbihlLHQscil7cmV0dXJuIGU9e2xhYmVsOmV9LHZvaWQgMCE9PXQmJihlLm5lZWRzQ29uZmlybWF0aW9uPXQpLHZvaWQgMCE9PXImJihlLmRlc2NyaXB0aW9uPXIpLGV9LGZpLmlzPWZ1bmN0aW9uKGUpe3JldHVybiB2b2lkIDAhPT1lJiZhLm9iamVjdExpdGVyYWwoZSkmJmEuc3RyaW5nKGUubGFiZWwpJiYoYS5ib29sZWFuKGUubmVlZHNDb25maXJtYXRpb24pfHx2b2lkIDA9PT1lLm5lZWRzQ29uZmlybWF0aW9uKSYmKGEuc3RyaW5nKGUuZGVzY3JpcHRpb24pfHx2b2lkIDA9PT1lLmRlc2NyaXB0aW9uKX0sKHBufHwocG49e30pKS5pcz1mdW5jdGlvbihlKXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIGV9LChuPWJuPWJufHx7fSkucmVwbGFjZT1mdW5jdGlvbihlLHQscil7cmV0dXJue3JhbmdlOmUsbmV3VGV4dDp0LGFubm90YXRpb25JZDpyfX0sbi5pbnNlcnQ9ZnVuY3Rpb24oZSx0LHIpe3JldHVybntyYW5nZTp7c3RhcnQ6ZSxlbmQ6ZX0sbmV3VGV4dDp0LGFubm90YXRpb25JZDpyfX0sbi5kZWw9ZnVuY3Rpb24oZSx0KXtyZXR1cm57cmFuZ2U6ZSxuZXdUZXh0OiIiLGFubm90YXRpb25JZDp0fX0sbi5pcz1mdW5jdGlvbihlKXtyZXR1cm4gbW4uaXMoZSkmJihnbi5pcyhlLmFubm90YXRpb25JZCl8fHBuLmlzKGUuYW5ub3RhdGlvbklkKSl9LChlPXZuPXZufHx7fSkuY3JlYXRlPWZ1bmN0aW9uKGUsdCl7cmV0dXJue3RleHREb2N1bWVudDplLGVkaXRzOnR9fSxlLmlzPWZ1bmN0aW9uKGUpe3JldHVybiBhLmRlZmluZWQoZSkmJkRuLmlzKGUudGV4dERvY3VtZW50KSYmQXJyYXkuaXNBcnJheShlLmVkaXRzKX0sKHdpPXluPXlufHx7fSkuY3JlYXRlPWZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gZT17a2luZDoiY3JlYXRlIix1cmk6ZX0sdm9pZCAwPT09dHx8dm9pZCAwPT09dC5vdmVyd3JpdGUmJnZvaWQgMD09PXQuaWdub3JlSWZFeGlzdHN8fChlLm9wdGlvbnM9dCksdm9pZCAwIT09ciYmKGUuYW5ub3RhdGlvbklkPXIpLGV9LHdpLmlzPWZ1bmN0aW9uKGUpe3JldHVybiBlJiYiY3JlYXRlIj09PWUua2luZCYmYS5zdHJpbmcoZS51cmkpJiYodm9pZCAwPT09ZS5vcHRpb25zfHwodm9pZCAwPT09ZS5vcHRpb25zLm92ZXJ3cml0ZXx8YS5ib29sZWFuKGUub3B0aW9ucy5vdmVyd3JpdGUpKSYmKHZvaWQgMD09PWUub3B0aW9ucy5pZ25vcmVJZkV4aXN0c3x8YS5ib29sZWFuKGUub3B0aW9ucy5pZ25vcmVJZkV4aXN0cykpKSYmKHZvaWQgMD09PWUuYW5ub3RhdGlvbklkfHxwbi5pcyhlLmFubm90YXRpb25JZCkpfSwocz1Dbj1Dbnx8e30pLmNyZWF0ZT1mdW5jdGlvbihlLHQscixuKXtyZXR1cm4gZT17a2luZDoicmVuYW1lIixvbGRVcmk6ZSxuZXdVcmk6dH0sdm9pZCAwPT09cnx8dm9pZCAwPT09ci5vdmVyd3JpdGUmJnZvaWQgMD09PXIuaWdub3JlSWZFeGlzdHN8fChlLm9wdGlvbnM9ciksdm9pZCAwIT09biYmKGUuYW5ub3RhdGlvbklkPW4pLGV9LHMuaXM9ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJiJyZW5hbWUiPT09ZS5raW5kJiZhLnN0cmluZyhlLm9sZFVyaSkmJmEuc3RyaW5nKGUubmV3VXJpKSYmKHZvaWQgMD09PWUub3B0aW9uc3x8KHZvaWQgMD09PWUub3B0aW9ucy5vdmVyd3JpdGV8fGEuYm9vbGVhbihlLm9wdGlvbnMub3ZlcndyaXRlKSkmJih2b2lkIDA9PT1lLm9wdGlvbnMuaWdub3JlSWZFeGlzdHN8fGEuYm9vbGVhbihlLm9wdGlvbnMuaWdub3JlSWZFeGlzdHMpKSkmJih2b2lkIDA9PT1lLmFubm90YXRpb25JZHx8cG4uaXMoZS5hbm5vdGF0aW9uSWQpKX0sKF9uPXduPXdufHx7fSkuY3JlYXRlPWZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gZT17a2luZDoiZGVsZXRlIix1cmk6ZX0sdm9pZCAwPT09dHx8dm9pZCAwPT09dC5yZWN1cnNpdmUmJnZvaWQgMD09PXQuaWdub3JlSWZOb3RFeGlzdHN8fChlLm9wdGlvbnM9dCksdm9pZCAwIT09ciYmKGUuYW5ub3RhdGlvbklkPXIpLGV9LF9uLmlzPWZ1bmN0aW9uKGUpe3JldHVybiBlJiYiZGVsZXRlIj09PWUua2luZCYmYS5zdHJpbmcoZS51cmkpJiYodm9pZCAwPT09ZS5vcHRpb25zfHwodm9pZCAwPT09ZS5vcHRpb25zLnJlY3Vyc2l2ZXx8YS5ib29sZWFuKGUub3B0aW9ucy5yZWN1cnNpdmUpKSYmKHZvaWQgMD09PWUub3B0aW9ucy5pZ25vcmVJZk5vdEV4aXN0c3x8YS5ib29sZWFuKGUub3B0aW9ucy5pZ25vcmVJZk5vdEV4aXN0cykpKSYmKHZvaWQgMD09PWUuYW5ub3RhdGlvbklkfHxwbi5pcyhlLmFubm90YXRpb25JZCkpfSwoU258fChTbj17fSkpLmlzPWZ1bmN0aW9uKGUpe3JldHVybiBlJiYodm9pZCAwIT09ZS5jaGFuZ2VzfHx2b2lkIDAhPT1lLmRvY3VtZW50Q2hhbmdlcykmJih2b2lkIDA9PT1lLmRvY3VtZW50Q2hhbmdlc3x8ZS5kb2N1bWVudENoYW5nZXMuZXZlcnkoZnVuY3Rpb24oZSl7cmV0dXJuIGEuc3RyaW5nKGUua2luZCk/eW4uaXMoZSl8fENuLmlzKGUpfHx3bi5pcyhlKTp2bi5pcyhlKX0pKX07Um4ucHJvdG90eXBlLmluc2VydD1mdW5jdGlvbihlLHQscil7dmFyIG4scj12b2lkIDA9PT1yP21uLmluc2VydChlLHQpOnBuLmlzKHIpP2JuLmluc2VydChlLHQsbj1yKToodGhpcy5hc3NlcnRDaGFuZ2VBbm5vdGF0aW9ucyh0aGlzLmNoYW5nZUFubm90YXRpb25zKSxuPXRoaXMuY2hhbmdlQW5ub3RhdGlvbnMubWFuYWdlKHIpLGJuLmluc2VydChlLHQsbikpO2lmKHRoaXMuZWRpdHMucHVzaChyKSx2b2lkIDAhPT1uKXJldHVybiBufSxSbi5wcm90b3R5cGUucmVwbGFjZT1mdW5jdGlvbihlLHQscil7dmFyIG4scj12b2lkIDA9PT1yP21uLnJlcGxhY2UoZSx0KTpwbi5pcyhyKT9ibi5yZXBsYWNlKGUsdCxuPXIpOih0aGlzLmFzc2VydENoYW5nZUFubm90YXRpb25zKHRoaXMuY2hhbmdlQW5ub3RhdGlvbnMpLG49dGhpcy5jaGFuZ2VBbm5vdGF0aW9ucy5tYW5hZ2UociksYm4ucmVwbGFjZShlLHQsbikpO2lmKHRoaXMuZWRpdHMucHVzaChyKSx2b2lkIDAhPT1uKXJldHVybiBufSxSbi5wcm90b3R5cGUuZGVsZXRlPWZ1bmN0aW9uKGUsdCl7dmFyIHIsdD12b2lkIDA9PT10P21uLmRlbChlKTpwbi5pcyh0KT9ibi5kZWwoZSxyPXQpOih0aGlzLmFzc2VydENoYW5nZUFubm90YXRpb25zKHRoaXMuY2hhbmdlQW5ub3RhdGlvbnMpLHI9dGhpcy5jaGFuZ2VBbm5vdGF0aW9ucy5tYW5hZ2UodCksYm4uZGVsKGUscikpO2lmKHRoaXMuZWRpdHMucHVzaCh0KSx2b2lkIDAhPT1yKXJldHVybiByfSxSbi5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKGUpe3RoaXMuZWRpdHMucHVzaChlKX0sUm4ucHJvdG90eXBlLmFsbD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmVkaXRzfSxSbi5wcm90b3R5cGUuY2xlYXI9ZnVuY3Rpb24oKXt0aGlzLmVkaXRzLnNwbGljZSgwLHRoaXMuZWRpdHMubGVuZ3RoKX0sUm4ucHJvdG90eXBlLmFzc2VydENoYW5nZUFubm90YXRpb25zPWZ1bmN0aW9uKGUpe2lmKHZvaWQgMD09PWUpdGhyb3cgbmV3IEVycm9yKCJUZXh0IGVkaXQgY2hhbmdlIGlzIG5vdCBjb25maWd1cmVkIHRvIG1hbmFnZSBjaGFuZ2UgYW5ub3RhdGlvbnMuIil9O3ZhciBWbj1SbjtmdW5jdGlvbiBSbihlLHQpe3RoaXMuZWRpdHM9ZSx0aGlzLmNoYW5nZUFubm90YXRpb25zPXR9c2kucHJvdG90eXBlLmFsbD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9hbm5vdGF0aW9uc30sT2JqZWN0LmRlZmluZVByb3BlcnR5KHNpLnByb3RvdHlwZSwic2l6ZSIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9zaXplfSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLHNpLnByb3RvdHlwZS5tYW5hZ2U9ZnVuY3Rpb24oZSx0KXt2YXIgcjtpZihwbi5pcyhlKT9yPWU6KHI9dGhpcy5uZXh0SWQoKSx0PWUpLHZvaWQgMCE9PXRoaXMuX2Fubm90YXRpb25zW3JdKXRocm93IG5ldyBFcnJvcigiSWQgIityKyIgaXMgYWxyZWFkeSBpbiB1c2UuIik7aWYodm9pZCAwPT09dCl0aHJvdyBuZXcgRXJyb3IoIk5vIGFubm90YXRpb24gcHJvdmlkZWQgZm9yIGlkICIrcik7cmV0dXJuIHRoaXMuX2Fubm90YXRpb25zW3JdPXQsdGhpcy5fc2l6ZSsrLHJ9LHNpLnByb3RvdHlwZS5uZXh0SWQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY291bnRlcisrLHRoaXMuX2NvdW50ZXIudG9TdHJpbmcoKX07dmFyIERuLEZuLEtuLGpuLFVuLEJuLHFuLCRuLFduLEhuLHpuLEpuLEduLFpuLFhuLFFuLFluLGVpLHRpLHJpLG5pLGlpLG9pLGFpPXNpO2Z1bmN0aW9uIHNpKGUpe3RoaXMuX2Fubm90YXRpb25zPXZvaWQgMD09PWU/T2JqZWN0LmNyZWF0ZShudWxsKTplLHRoaXMuX2NvdW50ZXI9MCx0aGlzLl9zaXplPTB9ZnVuY3Rpb24gbGkocil7dmFyIG49dGhpczt0aGlzLl90ZXh0RWRpdENoYW5nZXM9T2JqZWN0LmNyZWF0ZShudWxsKSx2b2lkIDAhPT1yPyh0aGlzLl93b3Jrc3BhY2VFZGl0PXIpLmRvY3VtZW50Q2hhbmdlcz8odGhpcy5fY2hhbmdlQW5ub3RhdGlvbnM9bmV3IGFpKHIuY2hhbmdlQW5ub3RhdGlvbnMpLHIuY2hhbmdlQW5ub3RhdGlvbnM9dGhpcy5fY2hhbmdlQW5ub3RhdGlvbnMuYWxsKCksci5kb2N1bWVudENoYW5nZXMuZm9yRWFjaChmdW5jdGlvbihlKXt2YXIgdDt2bi5pcyhlKSYmKHQ9bmV3IFZuKGUuZWRpdHMsbi5fY2hhbmdlQW5ub3RhdGlvbnMpLG4uX3RleHRFZGl0Q2hhbmdlc1tlLnRleHREb2N1bWVudC51cmldPXQpfSkpOnIuY2hhbmdlcyYmT2JqZWN0LmtleXMoci5jaGFuZ2VzKS5mb3JFYWNoKGZ1bmN0aW9uKGUpe3ZhciB0PW5ldyBWbihyLmNoYW5nZXNbZV0pO24uX3RleHRFZGl0Q2hhbmdlc1tlXT10fSk6dGhpcy5fd29ya3NwYWNlRWRpdD17fX1PYmplY3QuZGVmaW5lUHJvcGVydHkobGkucHJvdG90eXBlLCJlZGl0Iix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaW5pdERvY3VtZW50Q2hhbmdlcygpLHZvaWQgMCE9PXRoaXMuX2NoYW5nZUFubm90YXRpb25zJiYoMD09PXRoaXMuX2NoYW5nZUFubm90YXRpb25zLnNpemU/dGhpcy5fd29ya3NwYWNlRWRpdC5jaGFuZ2VBbm5vdGF0aW9ucz12b2lkIDA6dGhpcy5fd29ya3NwYWNlRWRpdC5jaGFuZ2VBbm5vdGF0aW9ucz10aGlzLl9jaGFuZ2VBbm5vdGF0aW9ucy5hbGwoKSksdGhpcy5fd29ya3NwYWNlRWRpdH0sZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9KSxsaS5wcm90b3R5cGUuZ2V0VGV4dEVkaXRDaGFuZ2U9ZnVuY3Rpb24oZSl7aWYoRG4uaXMoZSkpe2lmKHRoaXMuaW5pdERvY3VtZW50Q2hhbmdlcygpLHZvaWQgMD09PXRoaXMuX3dvcmtzcGFjZUVkaXQuZG9jdW1lbnRDaGFuZ2VzKXRocm93IG5ldyBFcnJvcigiV29ya3NwYWNlIGVkaXQgaXMgbm90IGNvbmZpZ3VyZWQgZm9yIGRvY3VtZW50IGNoYW5nZXMuIik7dmFyIHQ9e3VyaTplLnVyaSx2ZXJzaW9uOmUudmVyc2lvbn07cmV0dXJuKHI9dGhpcy5fdGV4dEVkaXRDaGFuZ2VzW3QudXJpXSl8fCh0aGlzLl93b3Jrc3BhY2VFZGl0LmRvY3VtZW50Q2hhbmdlcy5wdXNoKHt0ZXh0RG9jdW1lbnQ6dCxlZGl0czpuPVtdfSkscj1uZXcgVm4obix0aGlzLl9jaGFuZ2VBbm5vdGF0aW9ucyksdGhpcy5fdGV4dEVkaXRDaGFuZ2VzW3QudXJpXT1yKSxyfWlmKHRoaXMuaW5pdENoYW5nZXMoKSx2b2lkIDA9PT10aGlzLl93b3Jrc3BhY2VFZGl0LmNoYW5nZXMpdGhyb3cgbmV3IEVycm9yKCJXb3Jrc3BhY2UgZWRpdCBpcyBub3QgY29uZmlndXJlZCBmb3Igbm9ybWFsIHRleHQgZWRpdCBjaGFuZ2VzLiIpO3ZhciByLG47cmV0dXJuKHI9dGhpcy5fdGV4dEVkaXRDaGFuZ2VzW2VdKXx8KHRoaXMuX3dvcmtzcGFjZUVkaXQuY2hhbmdlc1tlXT1uPVtdLHI9bmV3IFZuKG4pLHRoaXMuX3RleHRFZGl0Q2hhbmdlc1tlXT1yKSxyfSxsaS5wcm90b3R5cGUuaW5pdERvY3VtZW50Q2hhbmdlcz1mdW5jdGlvbigpe3ZvaWQgMD09PXRoaXMuX3dvcmtzcGFjZUVkaXQuZG9jdW1lbnRDaGFuZ2VzJiZ2b2lkIDA9PT10aGlzLl93b3Jrc3BhY2VFZGl0LmNoYW5nZXMmJih0aGlzLl9jaGFuZ2VBbm5vdGF0aW9ucz1uZXcgYWksdGhpcy5fd29ya3NwYWNlRWRpdC5kb2N1bWVudENoYW5nZXM9W10sdGhpcy5fd29ya3NwYWNlRWRpdC5jaGFuZ2VBbm5vdGF0aW9ucz10aGlzLl9jaGFuZ2VBbm5vdGF0aW9ucy5hbGwoKSl9LGxpLnByb3RvdHlwZS5pbml0Q2hhbmdlcz1mdW5jdGlvbigpe3ZvaWQgMD09PXRoaXMuX3dvcmtzcGFjZUVkaXQuZG9jdW1lbnRDaGFuZ2VzJiZ2b2lkIDA9PT10aGlzLl93b3Jrc3BhY2VFZGl0LmNoYW5nZXMmJih0aGlzLl93b3Jrc3BhY2VFZGl0LmNoYW5nZXM9T2JqZWN0LmNyZWF0ZShudWxsKSl9LGxpLnByb3RvdHlwZS5jcmVhdGVGaWxlPWZ1bmN0aW9uKGUsdCxyKXtpZih0aGlzLmluaXREb2N1bWVudENoYW5nZXMoKSx2b2lkIDA9PT10aGlzLl93b3Jrc3BhY2VFZGl0LmRvY3VtZW50Q2hhbmdlcyl0aHJvdyBuZXcgRXJyb3IoIldvcmtzcGFjZSBlZGl0IGlzIG5vdCBjb25maWd1cmVkIGZvciBkb2N1bWVudCBjaGFuZ2VzLiIpO3ZhciBuLGk7aWYoZ24uaXModCl8fHBuLmlzKHQpP249dDpyPXQsdD12b2lkIDA9PT1uP3luLmNyZWF0ZShlLHIpOihpPXBuLmlzKG4pP246dGhpcy5fY2hhbmdlQW5ub3RhdGlvbnMubWFuYWdlKG4pLHluLmNyZWF0ZShlLHIsaSkpLHRoaXMuX3dvcmtzcGFjZUVkaXQuZG9jdW1lbnRDaGFuZ2VzLnB1c2godCksdm9pZCAwIT09aSlyZXR1cm4gaX0sbGkucHJvdG90eXBlLnJlbmFtZUZpbGU9ZnVuY3Rpb24oZSx0LHIsbil7aWYodGhpcy5pbml0RG9jdW1lbnRDaGFuZ2VzKCksdm9pZCAwPT09dGhpcy5fd29ya3NwYWNlRWRpdC5kb2N1bWVudENoYW5nZXMpdGhyb3cgbmV3IEVycm9yKCJXb3Jrc3BhY2UgZWRpdCBpcyBub3QgY29uZmlndXJlZCBmb3IgZG9jdW1lbnQgY2hhbmdlcy4iKTt2YXIgaSxvO2lmKGduLmlzKHIpfHxwbi5pcyhyKT9pPXI6bj1yLHI9dm9pZCAwPT09aT9Dbi5jcmVhdGUoZSx0LG4pOihvPXBuLmlzKGkpP2k6dGhpcy5fY2hhbmdlQW5ub3RhdGlvbnMubWFuYWdlKGkpLENuLmNyZWF0ZShlLHQsbixvKSksdGhpcy5fd29ya3NwYWNlRWRpdC5kb2N1bWVudENoYW5nZXMucHVzaChyKSx2b2lkIDAhPT1vKXJldHVybiBvfSxsaS5wcm90b3R5cGUuZGVsZXRlRmlsZT1mdW5jdGlvbihlLHQscil7aWYodGhpcy5pbml0RG9jdW1lbnRDaGFuZ2VzKCksdm9pZCAwPT09dGhpcy5fd29ya3NwYWNlRWRpdC5kb2N1bWVudENoYW5nZXMpdGhyb3cgbmV3IEVycm9yKCJXb3Jrc3BhY2UgZWRpdCBpcyBub3QgY29uZmlndXJlZCBmb3IgZG9jdW1lbnQgY2hhbmdlcy4iKTt2YXIgbixpO2lmKGduLmlzKHQpfHxwbi5pcyh0KT9uPXQ6cj10LHQ9dm9pZCAwPT09bj93bi5jcmVhdGUoZSxyKTooaT1wbi5pcyhuKT9uOnRoaXMuX2NoYW5nZUFubm90YXRpb25zLm1hbmFnZShuKSx3bi5jcmVhdGUoZSxyLGkpKSx0aGlzLl93b3Jrc3BhY2VFZGl0LmRvY3VtZW50Q2hhbmdlcy5wdXNoKHQpLHZvaWQgMCE9PWkpcmV0dXJuIGl9LChGbj1Ebj1Ebnx8e30pLmNyZWF0ZT1mdW5jdGlvbihlLHQpe3JldHVybnt1cmk6ZSx2ZXJzaW9uOnR9fSxGbi5pcz1mdW5jdGlvbihlKXtyZXR1cm4gYS5kZWZpbmVkKGUpJiZhLnN0cmluZyhlLnVyaSkmJihudWxsPT09ZS52ZXJzaW9ufHxhLmludGVnZXIoZS52ZXJzaW9uKSl9LChqbj1Lbj1Lbnx8e30pLlBsYWluVGV4dD0icGxhaW50ZXh0Iixqbi5NYXJrZG93bj0ibWFya2Rvd24iLChVbj1Lbj1Lbnx8e30pLmlzPWZ1bmN0aW9uKGUpe3JldHVybiBlPT09VW4uUGxhaW5UZXh0fHxlPT09VW4uTWFya2Rvd259LChCbnx8KEJuPXt9KSkuaXM9ZnVuY3Rpb24oZSl7dmFyIHQ9ZTtyZXR1cm4gYS5vYmplY3RMaXRlcmFsKGUpJiZLbi5pcyh0LmtpbmQpJiZhLnN0cmluZyh0LnZhbHVlKX0sKCRuPXFuPXFufHx7fSkuVGV4dD0xLCRuLk1ldGhvZD0yLCRuLkZ1bmN0aW9uPTMsJG4uQ29uc3RydWN0b3I9NCwkbi5GaWVsZD01LCRuLlZhcmlhYmxlPTYsJG4uQ2xhc3M9Nywkbi5JbnRlcmZhY2U9OCwkbi5Nb2R1bGU9OSwkbi5Qcm9wZXJ0eT0xMCwkbi5Vbml0PTExLCRuLlZhbHVlPTEyLCRuLkVudW09MTMsJG4uS2V5d29yZD0xNCwkbi5TbmlwcGV0PTE1LCRuLkNvbG9yPTE2LCRuLkZpbGU9MTcsJG4uUmVmZXJlbmNlPTE4LCRuLkZvbGRlcj0xOSwkbi5FbnVtTWVtYmVyPTIwLCRuLkNvbnN0YW50PTIxLCRuLlN0cnVjdD0yMiwkbi5FdmVudD0yMywkbi5PcGVyYXRvcj0yNCwkbi5UeXBlUGFyYW1ldGVyPTI1LChIbj1Xbj1Xbnx8e30pLlBsYWluVGV4dD0xLEhuLlNuaXBwZXQ9Miwoem58fCh6bj17fSkpLmNyZWF0ZT1mdW5jdGlvbihlKXtyZXR1cm57bGFiZWw6ZX19LChKbnx8e30pLmNyZWF0ZT1mdW5jdGlvbihlLHQpe3JldHVybntpdGVtczplfHxbXSxpc0luY29tcGxldGU6ISF0fX0sKFpuPUduPUdufHx7fSkuZnJvbVBsYWluVGV4dD1mdW5jdGlvbihlKXtyZXR1cm4gZS5yZXBsYWNlKC9bXFxgKl97fVtcXSgpIytcLS4hXS9nLCJcXCQmIil9LFpuLmlzPWZ1bmN0aW9uKGUpe3JldHVybiBhLnN0cmluZyhlKXx8YS5vYmplY3RMaXRlcmFsKGUpJiZhLnN0cmluZyhlLmxhbmd1YWdlKSYmYS5zdHJpbmcoZS52YWx1ZSl9LChYbnx8e30pLmlzPWZ1bmN0aW9uKGUpe3ZhciB0PWU7cmV0dXJuISF0JiZhLm9iamVjdExpdGVyYWwodCkmJihCbi5pcyh0LmNvbnRlbnRzKXx8R24uaXModC5jb250ZW50cyl8fGEudHlwZWRBcnJheSh0LmNvbnRlbnRzLEduLmlzKSkmJih2b2lkIDA9PT1lLnJhbmdlfHxsbi5pcyhlLnJhbmdlKSl9LChRbnx8e30pLmNyZWF0ZT1mdW5jdGlvbihlLHQpe3JldHVybiB0P3tsYWJlbDplLGRvY3VtZW50YXRpb246dH06e2xhYmVsOmV9fSwoWW58fHt9KS5jcmVhdGU9ZnVuY3Rpb24oZSx0KXtmb3IodmFyIHI9W10sbj0yO248YXJndW1lbnRzLmxlbmd0aDtuKyspcltuLTJdPWFyZ3VtZW50c1tuXTtyZXR1cm4gZT17bGFiZWw6ZX0sYS5kZWZpbmVkKHQpJiYoZS5kb2N1bWVudGF0aW9uPXQpLGEuZGVmaW5lZChyKT9lLnBhcmFtZXRlcnM9cjplLnBhcmFtZXRlcnM9W10sZX0sKGVpfHx7fSkuY3JlYXRlPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGU9e3JhbmdlOmV9LGEubnVtYmVyKHQpJiYoZS5raW5kPXQpLGV9LChyaT10aT10aXx8e30pLkZpbGU9MSxyaS5Nb2R1bGU9MixyaS5OYW1lc3BhY2U9MyxyaS5QYWNrYWdlPTQscmkuQ2xhc3M9NSxyaS5NZXRob2Q9NixyaS5Qcm9wZXJ0eT03LHJpLkZpZWxkPTgscmkuQ29uc3RydWN0b3I9OSxyaS5FbnVtPTEwLHJpLkludGVyZmFjZT0xMSxyaS5GdW5jdGlvbj0xMixyaS5WYXJpYWJsZT0xMyxyaS5Db25zdGFudD0xNCxyaS5TdHJpbmc9MTUscmkuTnVtYmVyPTE2LHJpLkJvb2xlYW49MTcscmkuQXJyYXk9MTgscmkuT2JqZWN0PTE5LHJpLktleT0yMCxyaS5OdWxsPTIxLHJpLkVudW1NZW1iZXI9MjIscmkuU3RydWN0PTIzLHJpLkV2ZW50PTI0LHJpLk9wZXJhdG9yPTI1LHJpLlR5cGVQYXJhbWV0ZXI9MjYsKG5pfHx7fSkuY3JlYXRlPWZ1bmN0aW9uKGUsdCxyLG4saSl7cmV0dXJuIGU9e25hbWU6ZSxraW5kOnQsbG9jYXRpb246e3VyaTpuLHJhbmdlOnJ9fSxpJiYoZS5jb250YWluZXJOYW1lPWkpLGV9LChvaT1paT1paXx8e30pLmNyZWF0ZT1mdW5jdGlvbihlLHQpe3JldHVybntyYW5nZTplLHBhcmVudDp0fX0sb2kuaXM9ZnVuY3Rpb24oZSl7cmV0dXJuIHZvaWQgMCE9PWUmJmxuLmlzKGUucmFuZ2UpJiYodm9pZCAwPT09ZS5wYXJlbnR8fG9pLmlzKGUucGFyZW50KSl9O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh1aS5wcm90b3R5cGUsInVyaSIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl91cml9LGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHVpLnByb3RvdHlwZSwibGFuZ3VhZ2VJZCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9sYW5ndWFnZUlkfSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh1aS5wcm90b3R5cGUsInZlcnNpb24iLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fdmVyc2lvbn0sZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9KSx1aS5wcm90b3R5cGUuZ2V0VGV4dD1mdW5jdGlvbihlKXt2YXIgdDtyZXR1cm4gZT8odD10aGlzLm9mZnNldEF0KGUuc3RhcnQpLGU9dGhpcy5vZmZzZXRBdChlLmVuZCksdGhpcy5fY29udGVudC5zdWJzdHJpbmcodCxlKSk6dGhpcy5fY29udGVudH0sdWkucHJvdG90eXBlLnVwZGF0ZT1mdW5jdGlvbihlLHQpe3RoaXMuX2NvbnRlbnQ9ZS50ZXh0LHRoaXMuX3ZlcnNpb249dCx0aGlzLl9saW5lT2Zmc2V0cz12b2lkIDB9LHVpLnByb3RvdHlwZS5nZXRMaW5lT2Zmc2V0cz1mdW5jdGlvbigpe2lmKHZvaWQgMD09PXRoaXMuX2xpbmVPZmZzZXRzKXtmb3IodmFyIGU9W10sdD10aGlzLl9jb250ZW50LHI9ITAsbj0wO248dC5sZW5ndGg7bisrKXtyJiYoZS5wdXNoKG4pLHI9ITEpO3ZhciBpPXQuY2hhckF0KG4pLHI9IlxyIj09PWl8fCJcbiI9PT1pOyJcciI9PT1pJiZuKzE8dC5sZW5ndGgmJiJcbiI9PT10LmNoYXJBdChuKzEpJiZuKyt9ciYmMDx0Lmxlbmd0aCYmZS5wdXNoKHQubGVuZ3RoKSx0aGlzLl9saW5lT2Zmc2V0cz1lfXJldHVybiB0aGlzLl9saW5lT2Zmc2V0c30sdWkucHJvdG90eXBlLnBvc2l0aW9uQXQ9ZnVuY3Rpb24oZSl7ZT1NYXRoLm1heChNYXRoLm1pbihlLHRoaXMuX2NvbnRlbnQubGVuZ3RoKSwwKTt2YXIgdD10aGlzLmdldExpbmVPZmZzZXRzKCkscj0wLG49dC5sZW5ndGg7aWYoMD09PW4pcmV0dXJuIHNuLmNyZWF0ZSgwLGUpO2Zvcig7cjxuOyl7dmFyIGk9TWF0aC5mbG9vcigocituKS8yKTt0W2ldPmU/bj1pOnI9aSsxfXZhciBvPXItMTtyZXR1cm4gc24uY3JlYXRlKG8sZS10W29dKX0sdWkucHJvdG90eXBlLm9mZnNldEF0PWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuZ2V0TGluZU9mZnNldHMoKTtpZihlLmxpbmU+PXQubGVuZ3RoKXJldHVybiB0aGlzLl9jb250ZW50Lmxlbmd0aDtpZihlLmxpbmU8MClyZXR1cm4gMDt2YXIgcj10W2UubGluZV0sdD1lLmxpbmUrMTx0Lmxlbmd0aD90W2UubGluZSsxXTp0aGlzLl9jb250ZW50Lmxlbmd0aDtyZXR1cm4gTWF0aC5tYXgoTWF0aC5taW4ocitlLmNoYXJhY3Rlcix0KSxyKX0sT2JqZWN0LmRlZmluZVByb3BlcnR5KHVpLnByb3RvdHlwZSwibGluZUNvdW50Iix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ2V0TGluZU9mZnNldHMoKS5sZW5ndGh9LGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEwfSk7dmFyIGEsY2k7ZnVuY3Rpb24gdWkoZSx0LHIsbil7dGhpcy5fdXJpPWUsdGhpcy5fbGFuZ3VhZ2VJZD10LHRoaXMuX3ZlcnNpb249cix0aGlzLl9jb250ZW50PW4sdGhpcy5fbGluZU9mZnNldHM9dm9pZCAwfXQ9YT1hfHx7fSxjaT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLHQuZGVmaW5lZD1mdW5jdGlvbihlKXtyZXR1cm4gdm9pZCAwIT09ZX0sdC51bmRlZmluZWQ9ZnVuY3Rpb24oZSl7cmV0dXJuIHZvaWQgMD09PWV9LHQuYm9vbGVhbj1mdW5jdGlvbihlKXtyZXR1cm4hMD09PWV8fCExPT09ZX0sdC5zdHJpbmc9ZnVuY3Rpb24oZSl7cmV0dXJuIltvYmplY3QgU3RyaW5nXSI9PT1jaS5jYWxsKGUpfSx0Lm51bWJlcj1mdW5jdGlvbihlKXtyZXR1cm4iW29iamVjdCBOdW1iZXJdIj09PWNpLmNhbGwoZSl9LHQubnVtYmVyUmFuZ2U9ZnVuY3Rpb24oZSx0LHIpe3JldHVybiJbb2JqZWN0IE51bWJlcl0iPT09Y2kuY2FsbChlKSYmdDw9ZSYmZTw9cn0sdC5pbnRlZ2VyPWZ1bmN0aW9uKGUpe3JldHVybiJbb2JqZWN0IE51bWJlcl0iPT09Y2kuY2FsbChlKSYmLTIxNDc0ODM2NDg8PWUmJmU8PTIxNDc0ODM2NDd9LHQudWludGVnZXI9ZnVuY3Rpb24oZSl7cmV0dXJuIltvYmplY3QgTnVtYmVyXSI9PT1jaS5jYWxsKGUpJiYwPD1lJiZlPD0yMTQ3NDgzNjQ3fSx0LmZ1bmM9ZnVuY3Rpb24oZSl7cmV0dXJuIltvYmplY3QgRnVuY3Rpb25dIj09PWNpLmNhbGwoZSl9LHQub2JqZWN0TGl0ZXJhbD1mdW5jdGlvbihlKXtyZXR1cm4gbnVsbCE9PWUmJiJvYmplY3QiPT10eXBlb2YgZX0sdC50eXBlZEFycmF5PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIEFycmF5LmlzQXJyYXkoZSkmJmUuZXZlcnkodCl9O3ZhciBoaSxmaSxkaSxtaT1jbGFzc3tjb25zdHJ1Y3RvcihlLHQscixuKXt0aGlzLl91cmk9ZSx0aGlzLl9sYW5ndWFnZUlkPXQsdGhpcy5fdmVyc2lvbj1yLHRoaXMuX2NvbnRlbnQ9bix0aGlzLl9saW5lT2Zmc2V0cz12b2lkIDB9Z2V0IHVyaSgpe3JldHVybiB0aGlzLl91cml9Z2V0IGxhbmd1YWdlSWQoKXtyZXR1cm4gdGhpcy5fbGFuZ3VhZ2VJZH1nZXQgdmVyc2lvbigpe3JldHVybiB0aGlzLl92ZXJzaW9ufWdldFRleHQoZSl7dmFyIHQ7cmV0dXJuIGU/KHQ9dGhpcy5vZmZzZXRBdChlLnN0YXJ0KSxlPXRoaXMub2Zmc2V0QXQoZS5lbmQpLHRoaXMuX2NvbnRlbnQuc3Vic3RyaW5nKHQsZSkpOnRoaXMuX2NvbnRlbnR9dXBkYXRlKGUsdCl7Zm9yKHZhciBuIG9mIGUpaWYobWkuaXNJbmNyZW1lbnRhbChuKSl7dmFyIGk9cGkobi5yYW5nZSksbz10aGlzLm9mZnNldEF0KGkuc3RhcnQpLGE9dGhpcy5vZmZzZXRBdChpLmVuZCkscz0odGhpcy5fY29udGVudD10aGlzLl9jb250ZW50LnN1YnN0cmluZygwLG8pK24udGV4dCt0aGlzLl9jb250ZW50LnN1YnN0cmluZyhhLHRoaXMuX2NvbnRlbnQubGVuZ3RoKSxNYXRoLm1heChpLnN0YXJ0LmxpbmUsMCkpLGk9TWF0aC5tYXgoaS5lbmQubGluZSwwKTtsZXQgcj10aGlzLl9saW5lT2Zmc2V0czt2YXIgbD1naShuLnRleHQsITEsbyk7aWYoaS1zPT09bC5sZW5ndGgpZm9yKGxldCBlPTAsdD1sLmxlbmd0aDtlPHQ7ZSsrKXJbZStzKzFdPWxbZV07ZWxzZSBsLmxlbmd0aDwxZTQ/ci5zcGxpY2UocysxLGktcywuLi5sKTp0aGlzLl9saW5lT2Zmc2V0cz1yPXIuc2xpY2UoMCxzKzEpLmNvbmNhdChsLHIuc2xpY2UoaSsxKSk7dmFyIGM9bi50ZXh0Lmxlbmd0aC0oYS1vKTtpZigwIT1jKWZvcihsZXQgZT1zKzErbC5sZW5ndGgsdD1yLmxlbmd0aDtlPHQ7ZSsrKXJbZV09cltlXStjfWVsc2V7aWYoIW1pLmlzRnVsbChuKSl0aHJvdyBuZXcgRXJyb3IoIlVua25vd24gY2hhbmdlIGV2ZW50IHJlY2VpdmVkIik7dGhpcy5fY29udGVudD1uLnRleHQsdGhpcy5fbGluZU9mZnNldHM9dm9pZCAwfXRoaXMuX3ZlcnNpb249dH1nZXRMaW5lT2Zmc2V0cygpe3JldHVybiB2b2lkIDA9PT10aGlzLl9saW5lT2Zmc2V0cyYmKHRoaXMuX2xpbmVPZmZzZXRzPWdpKHRoaXMuX2NvbnRlbnQsITApKSx0aGlzLl9saW5lT2Zmc2V0c31wb3NpdGlvbkF0KGUpe2U9TWF0aC5tYXgoTWF0aC5taW4oZSx0aGlzLl9jb250ZW50Lmxlbmd0aCksMCk7dmFyIHQ9dGhpcy5nZXRMaW5lT2Zmc2V0cygpO2xldCByPTAsbj10Lmxlbmd0aDtpZigwPT09bilyZXR1cm57bGluZTowLGNoYXJhY3RlcjplfTtmb3IoO3I8bjspe3ZhciBpPU1hdGguZmxvb3IoKHIrbikvMik7dFtpXT5lP249aTpyPWkrMX12YXIgbz1yLTE7cmV0dXJue2xpbmU6byxjaGFyYWN0ZXI6ZS10W29dfX1vZmZzZXRBdChlKXt2YXIgdD10aGlzLmdldExpbmVPZmZzZXRzKCk7aWYoZS5saW5lPj10Lmxlbmd0aClyZXR1cm4gdGhpcy5fY29udGVudC5sZW5ndGg7aWYoZS5saW5lPDApcmV0dXJuIDA7dmFyIHI9dFtlLmxpbmVdLHQ9ZS5saW5lKzE8dC5sZW5ndGg/dFtlLmxpbmUrMV06dGhpcy5fY29udGVudC5sZW5ndGg7cmV0dXJuIE1hdGgubWF4KE1hdGgubWluKHIrZS5jaGFyYWN0ZXIsdCkscil9Z2V0IGxpbmVDb3VudCgpe3JldHVybiB0aGlzLmdldExpbmVPZmZzZXRzKCkubGVuZ3RofXN0YXRpYyBpc0luY3JlbWVudGFsKGUpe3JldHVybiBudWxsIT1lJiYic3RyaW5nIj09dHlwZW9mIGUudGV4dCYmdm9pZCAwIT09ZS5yYW5nZSYmKHZvaWQgMD09PWUucmFuZ2VMZW5ndGh8fCJudW1iZXIiPT10eXBlb2YgZS5yYW5nZUxlbmd0aCl9c3RhdGljIGlzRnVsbChlKXtyZXR1cm4gbnVsbCE9ZSYmInN0cmluZyI9PXR5cGVvZiBlLnRleHQmJnZvaWQgMD09PWUucmFuZ2UmJnZvaWQgMD09PWUucmFuZ2VMZW5ndGh9fTtmdW5jdGlvbiBnaSh0LGUscj0wKXtjb25zdCBuPWU/W3JdOltdO2ZvcihsZXQgZT0wO2U8dC5sZW5ndGg7ZSsrKXt2YXIgaT10LmNoYXJDb2RlQXQoZSk7MTMhPT1pJiYxMCE9PWl8fCgxMz09PWkmJmUrMTx0Lmxlbmd0aCYmMTA9PT10LmNoYXJDb2RlQXQoZSsxKSYmZSsrLG4ucHVzaChyK2UrMSkpfXJldHVybiBufWZ1bmN0aW9uIHBpKGUpe3ZhciB0PWUuc3RhcnQscj1lLmVuZDtyZXR1cm4gdC5saW5lPnIubGluZXx8dC5saW5lPT09ci5saW5lJiZ0LmNoYXJhY3Rlcj5yLmNoYXJhY3Rlcj97c3RhcnQ6cixlbmQ6dH06ZX1mdW5jdGlvbiBiaShlKXt2YXIgdD1waShlLnJhbmdlKTtyZXR1cm4gdCE9PWUucmFuZ2U/e25ld1RleHQ6ZS5uZXdUZXh0LHJhbmdlOnR9OmV9ZnVuY3Rpb24gdmkoZSx0LC4uLnIpe3t2YXIgbj1yO2xldCBlO3JldHVybiBlPTA9PT1uLmxlbmd0aD90OnQucmVwbGFjZSgvXHsoXGQrKVx9L2csKGUsdCk9Pnt0PXRbMF07cmV0dXJuIHZvaWQgMCE9PW5bdF0/blt0XTplfSl9fShmaT1oaT1oaXx8e30pLmNyZWF0ZT1mdW5jdGlvbihlLHQscixuKXtyZXR1cm4gbmV3IG1pKGUsdCxyLG4pfSxmaS51cGRhdGU9ZnVuY3Rpb24oZSx0LHIpe2lmKGUgaW5zdGFuY2VvZiBtaSlyZXR1cm4gZS51cGRhdGUodCxyKSxlO3Rocm93IG5ldyBFcnJvcigiVGV4dERvY3VtZW50LnVwZGF0ZTogZG9jdW1lbnQgbXVzdCBiZSBjcmVhdGVkIGJ5IFRleHREb2N1bWVudC5jcmVhdGUiKX0sZmkuYXBwbHlFZGl0cz1mdW5jdGlvbihlLHQpe2xldCByPWUuZ2V0VGV4dCgpLG49MDtjb25zdCBpPVtdO2Zvcihjb25zdCBhIG9mIGZ1bmN0aW9uIGUodCxyKXtpZih0Lmxlbmd0aDw9MSlyZXR1cm4gdDtjb25zdCBuPXQubGVuZ3RoLzJ8MDtjb25zdCBpPXQuc2xpY2UoMCxuKTtjb25zdCBvPXQuc2xpY2Uobik7ZShpLHIpO2UobyxyKTtsZXQgYT0wO2xldCBzPTA7bGV0IGw9MDtmb3IoO2E8aS5sZW5ndGgmJnM8by5sZW5ndGg7KXtsZXQgZT1yKGlbYV0sb1tzXSk7ZTw9MD90W2wrK109aVthKytdOnRbbCsrXT1vW3MrK119Zm9yKDthPGkubGVuZ3RoOyl0W2wrK109aVthKytdO2Zvcig7czxvLmxlbmd0aDspdFtsKytdPW9bcysrXTtyZXR1cm4gdH0odC5tYXAoYmkpLChlLHQpPT57dmFyIHI9ZS5yYW5nZS5zdGFydC5saW5lLXQucmFuZ2Uuc3RhcnQubGluZTtyZXR1cm4gMD09cj9lLnJhbmdlLnN0YXJ0LmNoYXJhY3Rlci10LnJhbmdlLnN0YXJ0LmNoYXJhY3RlcjpyfSkpe3ZhciBvPWUub2Zmc2V0QXQoYS5yYW5nZS5zdGFydCk7aWYobzxuKXRocm93IG5ldyBFcnJvcigiT3ZlcmxhcHBpbmcgZWRpdCIpO28+biYmaS5wdXNoKHIuc3Vic3RyaW5nKG4sbykpLGEubmV3VGV4dC5sZW5ndGgmJmkucHVzaChhLm5ld1RleHQpLG49ZS5vZmZzZXRBdChhLnJhbmdlLmVuZCl9cmV0dXJuIGkucHVzaChyLnN1YnN0cihuKSksaS5qb2luKCIiKX0sKG49ZGk9ZGl8fHt9KVtuLlVuZGVmaW5lZD0wXT0iVW5kZWZpbmVkIixuW24uRW51bVZhbHVlTWlzbWF0Y2g9MV09IkVudW1WYWx1ZU1pc21hdGNoIixuW24uRGVwcmVjYXRlZD0yXT0iRGVwcmVjYXRlZCIsbltuLlVuZXhwZWN0ZWRFbmRPZkNvbW1lbnQ9MjU3XT0iVW5leHBlY3RlZEVuZE9mQ29tbWVudCIsbltuLlVuZXhwZWN0ZWRFbmRPZlN0cmluZz0yNThdPSJVbmV4cGVjdGVkRW5kT2ZTdHJpbmciLG5bbi5VbmV4cGVjdGVkRW5kT2ZOdW1iZXI9MjU5XT0iVW5leHBlY3RlZEVuZE9mTnVtYmVyIixuW24uSW52YWxpZFVuaWNvZGU9MjYwXT0iSW52YWxpZFVuaWNvZGUiLG5bbi5JbnZhbGlkRXNjYXBlQ2hhcmFjdGVyPTI2MV09IkludmFsaWRFc2NhcGVDaGFyYWN0ZXIiLG5bbi5JbnZhbGlkQ2hhcmFjdGVyPTI2Ml09IkludmFsaWRDaGFyYWN0ZXIiLG5bbi5Qcm9wZXJ0eUV4cGVjdGVkPTUxM109IlByb3BlcnR5RXhwZWN0ZWQiLG5bbi5Db21tYUV4cGVjdGVkPTUxNF09IkNvbW1hRXhwZWN0ZWQiLG5bbi5Db2xvbkV4cGVjdGVkPTUxNV09IkNvbG9uRXhwZWN0ZWQiLG5bbi5WYWx1ZUV4cGVjdGVkPTUxNl09IlZhbHVlRXhwZWN0ZWQiLG5bbi5Db21tYU9yQ2xvc2VCYWNrZXRFeHBlY3RlZD01MTddPSJDb21tYU9yQ2xvc2VCYWNrZXRFeHBlY3RlZCIsbltuLkNvbW1hT3JDbG9zZUJyYWNlRXhwZWN0ZWQ9NTE4XT0iQ29tbWFPckNsb3NlQnJhY2VFeHBlY3RlZCIsbltuLlRyYWlsaW5nQ29tbWE9NTE5XT0iVHJhaWxpbmdDb21tYSIsbltuLkR1cGxpY2F0ZUtleT01MjBdPSJEdXBsaWNhdGVLZXkiLG5bbi5Db21tZW50Tm90UGVybWl0dGVkPTUyMV09IkNvbW1lbnROb3RQZXJtaXR0ZWQiLG5bbi5TY2hlbWFSZXNvbHZlRXJyb3I9NzY4XT0iU2NoZW1hUmVzb2x2ZUVycm9yIixLbi5NYXJrZG93bixLbi5QbGFpblRleHQ7eWk9ZnVuY3Rpb24oZSx0KXtyZXR1cm4oeWk9T2JqZWN0LnNldFByb3RvdHlwZU9mfHx7X19wcm90b19fOltdfWluc3RhbmNlb2YgQXJyYXkmJmZ1bmN0aW9uKGUsdCl7ZS5fX3Byb3RvX189dH18fGZ1bmN0aW9uKGUsdCl7Zm9yKHZhciByIGluIHQpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQscikmJihlW3JdPXRbcl0pfSkoZSx0KX07dmFyIHlpLGU9ZnVuY3Rpb24oZSx0KXtpZigiZnVuY3Rpb24iIT10eXBlb2YgdCYmbnVsbCE9PXQpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2xhc3MgZXh0ZW5kcyB2YWx1ZSAiK1N0cmluZyh0KSsiIGlzIG5vdCBhIGNvbnN0cnVjdG9yIG9yIG51bGwiKTtmdW5jdGlvbiByKCl7dGhpcy5jb25zdHJ1Y3Rvcj1lfXlpKGUsdCksZS5wcm90b3R5cGU9bnVsbD09PXQ/T2JqZWN0LmNyZWF0ZSh0KTooci5wcm90b3R5cGU9dC5wcm90b3R5cGUsbmV3IHIpfSxqZT12aSxDaT17ImNvbG9yLWhleCI6e2Vycm9yTWVzc2FnZTpqZSgiY29sb3JIZXhGb3JtYXRXYXJuaW5nIiwiSW52YWxpZCBjb2xvciBmb3JtYXQuIFVzZSAjUkdCLCAjUkdCQSwgI1JSR0dCQiBvciAjUlJHR0JCQUEuIikscGF0dGVybjovXiMoWzAtOUEtRmEtZl17Myw0fXwoWzAtOUEtRmEtZl17Mn0pezMsNH0pJC99LCJkYXRlLXRpbWUiOntlcnJvck1lc3NhZ2U6amUoImRhdGVUaW1lRm9ybWF0V2FybmluZyIsIlN0cmluZyBpcyBub3QgYSBSRkMzMzM5IGRhdGUtdGltZS4iKSxwYXR0ZXJuOi9eKFxkezR9KS0oMFsxLTldfDFbMC0yXSktKDBbMS05XXxbMTJdWzAtOV18M1swMV0pVChbMDFdWzAtOV18MlswLTNdKTooWzAtNV1bMC05XSk6KFswLTVdWzAtOV18NjApKFwuWzAtOV0rKT8oWnwoXCt8LSkoWzAxXVswLTldfDJbMC0zXSk6KFswLTVdWzAtOV0pKSQvaX0sZGF0ZTp7ZXJyb3JNZXNzYWdlOmplKCJkYXRlRm9ybWF0V2FybmluZyIsIlN0cmluZyBpcyBub3QgYSBSRkMzMzM5IGRhdGUuIikscGF0dGVybjovXihcZHs0fSktKDBbMS05XXwxWzAtMl0pLSgwWzEtOV18WzEyXVswLTldfDNbMDFdKSQvaX0sdGltZTp7ZXJyb3JNZXNzYWdlOmplKCJ0aW1lRm9ybWF0V2FybmluZyIsIlN0cmluZyBpcyBub3QgYSBSRkMzMzM5IHRpbWUuIikscGF0dGVybjovXihbMDFdWzAtOV18MlswLTNdKTooWzAtNV1bMC05XSk6KFswLTVdWzAtOV18NjApKFwuWzAtOV0rKT8oWnwoXCt8LSkoWzAxXVswLTldfDJbMC0zXSk6KFswLTVdWzAtOV0pKSQvaX0sZW1haWw6e2Vycm9yTWVzc2FnZTpqZSgiZW1haWxGb3JtYXRXYXJuaW5nIiwiU3RyaW5nIGlzIG5vdCBhbiBlLW1haWwgYWRkcmVzcy4iKSxwYXR0ZXJuOi9eKChbXjw+KClcW1xdXFwuLDs6XHNAIl0rKFwuW148PigpXFtcXVxcLiw7OlxzQCJdKykqKXwoIi4rIikpQCgoXFtbMC05XXsxLDN9XC5bMC05XXsxLDN9XC5bMC05XXsxLDN9XC5bMC05XXsxLDN9XSl8KChbYS16QS1aMC05LV0rXC4pK1thLXpBLVpdezIsfSkpJC99LGhvc3RuYW1lOntlcnJvck1lc3NhZ2U6amUoImhvc3RuYW1lRm9ybWF0V2FybmluZyIsIlN0cmluZyBpcyBub3QgYSBob3N0bmFtZS4iKSxwYXR0ZXJuOi9eKD89LnsxLDI1M31cLj8kKVthLXowLTldKD86W2EtejAtOS1dezAsNjF9W2EtejAtOV0pPyg/OlwuW2EtejAtOV0oPzpbLTAtOWEtel17MCw2MX1bMC05YS16XSk/KSpcLj8kL2l9LGlwdjQ6e2Vycm9yTWVzc2FnZTpqZSgiaXB2NEZvcm1hdFdhcm5pbmciLCJTdHJpbmcgaXMgbm90IGFuIElQdjQgYWRkcmVzcy4iKSxwYXR0ZXJuOi9eKD86KD86MjVbMC01XXwyWzAtNF1cZHwxXGRcZHxbMS05XT9cZClcLil7M30oPzoyNVswLTVdfDJbMC00XVxkfDFcZFxkfFsxLTldP1xkKSQvfSxpcHY2OntlcnJvck1lc3NhZ2U6amUoImlwdjZGb3JtYXRXYXJuaW5nIiwiU3RyaW5nIGlzIG5vdCBhbiBJUHY2IGFkZHJlc3MuIikscGF0dGVybjovXigoKFswLTlhLWZdezEsNH06KXs3fShbMC05YS1mXXsxLDR9fDopKXwoKFswLTlhLWZdezEsNH06KXs2fSg6WzAtOWEtZl17MSw0fXwoKDI1WzAtNV18MlswLTRdXGR8MVxkXGR8WzEtOV0/XGQpKFwuKDI1WzAtNV18MlswLTRdXGR8MVxkXGR8WzEtOV0/XGQpKXszfSl8OikpfCgoWzAtOWEtZl17MSw0fTopezV9KCgoOlswLTlhLWZdezEsNH0pezEsMn0pfDooKDI1WzAtNV18MlswLTRdXGR8MVxkXGR8WzEtOV0/XGQpKFwuKDI1WzAtNV18MlswLTRdXGR8MVxkXGR8WzEtOV0/XGQpKXszfSl8OikpfCgoWzAtOWEtZl17MSw0fTopezR9KCgoOlswLTlhLWZdezEsNH0pezEsM30pfCgoOlswLTlhLWZdezEsNH0pPzooKDI1WzAtNV18MlswLTRdXGR8MVxkXGR8WzEtOV0/XGQpKFwuKDI1WzAtNV18MlswLTRdXGR8MVxkXGR8WzEtOV0/XGQpKXszfSkpfDopKXwoKFswLTlhLWZdezEsNH06KXszfSgoKDpbMC05YS1mXXsxLDR9KXsxLDR9KXwoKDpbMC05YS1mXXsxLDR9KXswLDJ9OigoMjVbMC01XXwyWzAtNF1cZHwxXGRcZHxbMS05XT9cZCkoXC4oMjVbMC01XXwyWzAtNF1cZHwxXGRcZHxbMS05XT9cZCkpezN9KSl8OikpfCgoWzAtOWEtZl17MSw0fTopezJ9KCgoOlswLTlhLWZdezEsNH0pezEsNX0pfCgoOlswLTlhLWZdezEsNH0pezAsM306KCgyNVswLTVdfDJbMC00XVxkfDFcZFxkfFsxLTldP1xkKShcLigyNVswLTVdfDJbMC00XVxkfDFcZFxkfFsxLTldP1xkKSl7M30pKXw6KSl8KChbMC05YS1mXXsxLDR9Oil7MX0oKCg6WzAtOWEtZl17MSw0fSl7MSw2fSl8KCg6WzAtOWEtZl17MSw0fSl7MCw0fTooKDI1WzAtNV18MlswLTRdXGR8MVxkXGR8WzEtOV0/XGQpKFwuKDI1WzAtNV18MlswLTRdXGR8MVxkXGR8WzEtOV0/XGQpKXszfSkpfDopKXwoOigoKDpbMC05YS1mXXsxLDR9KXsxLDd9KXwoKDpbMC05YS1mXXsxLDR9KXswLDV9OigoMjVbMC01XXwyWzAtNF1cZHwxXGRcZHxbMS05XT9cZCkoXC4oMjVbMC01XXwyWzAtNF1cZHwxXGRcZHxbMS05XT9cZCkpezN9KSl8OikpKSQvaX19LHdpPShPYmplY3QuZGVmaW5lUHJvcGVydHkoX2kucHJvdG90eXBlLCJjaGlsZHJlbiIse2dldDpmdW5jdGlvbigpe3JldHVybltdfSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLF9pLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiJ0eXBlOiAiK3RoaXMudHlwZSsiICgiK3RoaXMub2Zmc2V0KyIvIit0aGlzLmxlbmd0aCsiKSIrKHRoaXMucGFyZW50PyIgcGFyZW50OiB7Iit0aGlzLnBhcmVudC50b1N0cmluZygpKyJ9IjoiIil9LF9pKTtmdW5jdGlvbiBfaShlLHQscil7dm9pZCAwPT09ciYmKHI9MCksdGhpcy5vZmZzZXQ9dCx0aGlzLmxlbmd0aD1yLHRoaXMucGFyZW50PWV9ZSh4aSxTaT13aSk7dmFyIFNpLEFpPXhpO2Z1bmN0aW9uIHhpKGUsdCl7ZT1TaS5jYWxsKHRoaXMsZSx0KXx8dGhpcztyZXR1cm4gZS50eXBlPSJudWxsIixlLnZhbHVlPW51bGwsZX1lKE5pLEVpPXdpKTt2YXIgRWksa2k9Tmk7ZnVuY3Rpb24gTmkoZSx0LHIpe2U9RWkuY2FsbCh0aGlzLGUscil8fHRoaXM7cmV0dXJuIGUudHlwZT0iYm9vbGVhbiIsZS52YWx1ZT10LGV9ZShPaSxMaT13aSksT2JqZWN0LmRlZmluZVByb3BlcnR5KE9pLnByb3RvdHlwZSwiY2hpbGRyZW4iLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pdGVtc30sZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9KTt2YXIgTGksTWk9T2k7ZnVuY3Rpb24gT2koZSx0KXtlPUxpLmNhbGwodGhpcyxlLHQpfHx0aGlzO3JldHVybiBlLnR5cGU9ImFycmF5IixlLml0ZW1zPVtdLGV9ZShJaSxQaT13aSk7dmFyIFBpLFRpPUlpO2Z1bmN0aW9uIElpKGUsdCl7ZT1QaS5jYWxsKHRoaXMsZSx0KXx8dGhpcztyZXR1cm4gZS50eXBlPSJudW1iZXIiLGUuaXNJbnRlZ2VyPSEwLGUudmFsdWU9TnVtYmVyLk5hTixlfWUoRGksVmk9d2kpO3ZhciBWaSxSaT1EaTtmdW5jdGlvbiBEaShlLHQscil7ZT1WaS5jYWxsKHRoaXMsZSx0LHIpfHx0aGlzO3JldHVybiBlLnR5cGU9InN0cmluZyIsZS52YWx1ZT0iIixlfWUoamksRmk9d2kpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShqaS5wcm90b3R5cGUsImNoaWxkcmVuIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudmFsdWVOb2RlP1t0aGlzLmtleU5vZGUsdGhpcy52YWx1ZU5vZGVdOlt0aGlzLmtleU5vZGVdfSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pO3ZhciBGaSxLaT1qaTtmdW5jdGlvbiBqaShlLHQscil7ZT1GaS5jYWxsKHRoaXMsZSx0KXx8dGhpcztyZXR1cm4gZS50eXBlPSJwcm9wZXJ0eSIsZS5jb2xvbk9mZnNldD0tMSxlLmtleU5vZGU9cixlfWUocWksVWk9d2kpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShxaS5wcm90b3R5cGUsImNoaWxkcmVuIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucHJvcGVydGllc30sZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9KTt2YXIgVWksQmk9cWk7ZnVuY3Rpb24gcWkoZSx0KXtlPVVpLmNhbGwodGhpcyxlLHQpfHx0aGlzO3JldHVybiBlLnR5cGU9Im9iamVjdCIsZS5wcm9wZXJ0aWVzPVtdLGV9ZnVuY3Rpb24gJGkoZSl7cmV0dXJuIFBuKGUpP2U/e306e25vdDp7fX06ZX1IaS5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKGUpe3RoaXMuc2NoZW1hcy5wdXNoKGUpfSxIaS5wcm90b3R5cGUubWVyZ2U9ZnVuY3Rpb24oZSl7QXJyYXkucHJvdG90eXBlLnB1c2guYXBwbHkodGhpcy5zY2hlbWFzLGUuc2NoZW1hcyl9LEhpLnByb3RvdHlwZS5pbmNsdWRlPWZ1bmN0aW9uKGUpe3JldHVybigtMT09PXRoaXMuZm9jdXNPZmZzZXR8fFlpKGUsdGhpcy5mb2N1c09mZnNldCkpJiZlIT09dGhpcy5leGNsdWRlfSxIaS5wcm90b3R5cGUubmV3U3ViPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBIaSgtMSx0aGlzLmV4Y2x1ZGUpfTt2YXIgV2k9SGk7ZnVuY3Rpb24gSGkoZSx0KXt0aGlzLmZvY3VzT2Zmc2V0PWU9dm9pZCAwPT09ZT8tMTplLHRoaXMuZXhjbHVkZT10LHRoaXMuc2NoZW1hcz1bXX1PYmplY3QuZGVmaW5lUHJvcGVydHkoSmkucHJvdG90eXBlLCJzY2hlbWFzIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuW119LGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEwfSksSmkucHJvdG90eXBlLmFkZD1mdW5jdGlvbihlKXt9LEppLnByb3RvdHlwZS5tZXJnZT1mdW5jdGlvbihlKXt9LEppLnByb3RvdHlwZS5pbmNsdWRlPWZ1bmN0aW9uKGUpe3JldHVybiEwfSxKaS5wcm90b3R5cGUubmV3U3ViPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9LEppLmluc3RhbmNlPW5ldyBKaTt2YXIgemk9Smk7ZnVuY3Rpb24gSmkoKXt9WmkucHJvdG90eXBlLmhhc1Byb2JsZW1zPWZ1bmN0aW9uKCl7cmV0dXJuISF0aGlzLnByb2JsZW1zLmxlbmd0aH0sWmkucHJvdG90eXBlLm1lcmdlQWxsPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0wLHI9ZTt0PHIubGVuZ3RoO3QrKyl7dmFyIG49clt0XTt0aGlzLm1lcmdlKG4pfX0sWmkucHJvdG90eXBlLm1lcmdlPWZ1bmN0aW9uKGUpe3RoaXMucHJvYmxlbXM9dGhpcy5wcm9ibGVtcy5jb25jYXQoZS5wcm9ibGVtcyl9LFppLnByb3RvdHlwZS5tZXJnZUVudW1WYWx1ZXM9ZnVuY3Rpb24oZSl7aWYoIXRoaXMuZW51bVZhbHVlTWF0Y2gmJiFlLmVudW1WYWx1ZU1hdGNoJiZ0aGlzLmVudW1WYWx1ZXMmJmUuZW51bVZhbHVlcyl7dGhpcy5lbnVtVmFsdWVzPXRoaXMuZW51bVZhbHVlcy5jb25jYXQoZS5lbnVtVmFsdWVzKTtmb3IodmFyIHQ9MCxyPXRoaXMucHJvYmxlbXM7dDxyLmxlbmd0aDt0Kyspe3ZhciBuPXJbdF07bi5jb2RlPT09ZGkuRW51bVZhbHVlTWlzbWF0Y2gmJihuLm1lc3NhZ2U9amUoImVudW1XYXJuaW5nIiwiVmFsdWUgaXMgbm90IGFjY2VwdGVkLiBWYWxpZCB2YWx1ZXM6IHswfS4iLHRoaXMuZW51bVZhbHVlcy5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIEpTT04uc3RyaW5naWZ5KGUpfSkuam9pbigiLCAiKSkpfX19LFppLnByb3RvdHlwZS5tZXJnZVByb3BlcnR5TWF0Y2g9ZnVuY3Rpb24oZSl7dGhpcy5tZXJnZShlKSx0aGlzLnByb3BlcnRpZXNNYXRjaGVzKyssKGUuZW51bVZhbHVlTWF0Y2h8fCFlLmhhc1Byb2JsZW1zKCkmJmUucHJvcGVydGllc01hdGNoZXMpJiZ0aGlzLnByb3BlcnRpZXNWYWx1ZU1hdGNoZXMrKyxlLmVudW1WYWx1ZU1hdGNoJiZlLmVudW1WYWx1ZXMmJjE9PT1lLmVudW1WYWx1ZXMubGVuZ3RoJiZ0aGlzLnByaW1hcnlWYWx1ZU1hdGNoZXMrK30sWmkucHJvdG90eXBlLmNvbXBhcmU9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5oYXNQcm9ibGVtcygpO3JldHVybiB0IT09ZS5oYXNQcm9ibGVtcygpP3Q/LTE6MTp0aGlzLmVudW1WYWx1ZU1hdGNoIT09ZS5lbnVtVmFsdWVNYXRjaD9lLmVudW1WYWx1ZU1hdGNoPy0xOjE6dGhpcy5wcmltYXJ5VmFsdWVNYXRjaGVzIT09ZS5wcmltYXJ5VmFsdWVNYXRjaGVzP3RoaXMucHJpbWFyeVZhbHVlTWF0Y2hlcy1lLnByaW1hcnlWYWx1ZU1hdGNoZXM6dGhpcy5wcm9wZXJ0aWVzVmFsdWVNYXRjaGVzIT09ZS5wcm9wZXJ0aWVzVmFsdWVNYXRjaGVzP3RoaXMucHJvcGVydGllc1ZhbHVlTWF0Y2hlcy1lLnByb3BlcnRpZXNWYWx1ZU1hdGNoZXM6dGhpcy5wcm9wZXJ0aWVzTWF0Y2hlcy1lLnByb3BlcnRpZXNNYXRjaGVzfTt2YXIgR2k9Wmk7ZnVuY3Rpb24gWmkoKXt0aGlzLnByb2JsZW1zPVtdLHRoaXMucHJvcGVydGllc01hdGNoZXM9MCx0aGlzLnByb3BlcnRpZXNWYWx1ZU1hdGNoZXM9MCx0aGlzLnByaW1hcnlWYWx1ZU1hdGNoZXM9MCx0aGlzLmVudW1WYWx1ZU1hdGNoPSExLHRoaXMuZW51bVZhbHVlcz12b2lkIDB9ZnVuY3Rpb24gWGkoZSl7cmV0dXJuIE5uKGUpfWZ1bmN0aW9uIFFpKGUpe3JldHVybiBrbihlKX1mdW5jdGlvbiBZaShlLHQscil7cmV0dXJuIHZvaWQgMD09PXImJihyPSExKSx0Pj1lLm9mZnNldCYmdDxlLm9mZnNldCtlLmxlbmd0aHx8ciYmdD09PWUub2Zmc2V0K2UubGVuZ3RofXRvLnByb3RvdHlwZS5nZXROb2RlRnJvbU9mZnNldD1mdW5jdGlvbihlLHQpe2lmKHZvaWQgMD09PXQmJih0PSExKSx0aGlzLnJvb3QpcmV0dXJuIEVuKHRoaXMucm9vdCxlLHQpfSx0by5wcm90b3R5cGUudmlzaXQ9ZnVuY3Rpb24oaSl7dmFyIG87dGhpcy5yb290JiYobz1mdW5jdGlvbihlKXt2YXIgdD1pKGUpLHI9ZS5jaGlsZHJlbjtpZihBcnJheS5pc0FycmF5KHIpKWZvcih2YXIgbj0wO248ci5sZW5ndGgmJnQ7bisrKXQ9byhyW25dKTtyZXR1cm4gdH0pKHRoaXMucm9vdCl9LHRvLnByb3RvdHlwZS52YWxpZGF0ZT1mdW5jdGlvbihyLGUsbil7dmFyIHQ7aWYodm9pZCAwPT09biYmKG49Zm4uV2FybmluZyksdGhpcy5yb290JiZlKXJldHVybiB0PW5ldyBHaSxybyh0aGlzLnJvb3QsZSx0LHppLmluc3RhbmNlKSx0LnByb2JsZW1zLm1hcChmdW5jdGlvbihlKXt2YXIgdD1sbi5jcmVhdGUoci5wb3NpdGlvbkF0KGUubG9jYXRpb24ub2Zmc2V0KSxyLnBvc2l0aW9uQXQoZS5sb2NhdGlvbi5vZmZzZXQrZS5sb2NhdGlvbi5sZW5ndGgpKTtyZXR1cm4gZG4uY3JlYXRlKHQsZS5tZXNzYWdlLG51bGwhPT0odD1lLnNldmVyaXR5KSYmdm9pZCAwIT09dD90Om4sZS5jb2RlKX0pfSx0by5wcm90b3R5cGUuZ2V0TWF0Y2hpbmdTY2hlbWFzPWZ1bmN0aW9uKGUsdCxyKXt0PW5ldyBXaSh0PXZvaWQgMD09PXQ/LTE6dCxyKTtyZXR1cm4gdGhpcy5yb290JiZlJiZybyh0aGlzLnJvb3QsZSxuZXcgR2ksdCksdC5zY2hlbWFzfTt2YXIgZW89dG87ZnVuY3Rpb24gdG8oZSx0LHIpe3ZvaWQgMD09PXQmJih0PVtdKSx2b2lkIDA9PT1yJiYocj1bXSksdGhpcy5yb290PWUsdGhpcy5zeW50YXhFcnJvcnM9dCx0aGlzLmNvbW1lbnRzPXJ9ZnVuY3Rpb24gcm8obCxlLHUsZil7aWYobCYmZi5pbmNsdWRlKGwpKXt2YXIgYyxkLG0sZyxwLGIsdixoPWw7c3dpdGNoKGgudHlwZSl7Y2FzZSJvYmplY3QiOmZvcih2YXIgdD1oLHI9ZSxuPXUseT1mLEM9T2JqZWN0LmNyZWF0ZShudWxsKSx3PVtdLF89MCxTPXQucHJvcGVydGllcztfPFMubGVuZ3RoO18rKyl7dmFyIEE9KCQ9U1tfXSkua2V5Tm9kZS52YWx1ZTtDW0FdPSQudmFsdWVOb2RlLHcucHVzaChBKX1pZihBcnJheS5pc0FycmF5KHIucmVxdWlyZWQpKWZvcih2YXIgeD0wLEU9ci5yZXF1aXJlZDt4PEUubGVuZ3RoO3grKyl7dmFyIGssTj1FW3hdO0NbTl18fChrPXQucGFyZW50JiYicHJvcGVydHkiPT09dC5wYXJlbnQudHlwZSYmdC5wYXJlbnQua2V5Tm9kZSxrPWs/e29mZnNldDprLm9mZnNldCxsZW5ndGg6ay5sZW5ndGh9OntvZmZzZXQ6dC5vZmZzZXQsbGVuZ3RoOjF9LG4ucHJvYmxlbXMucHVzaCh7bG9jYXRpb246ayxtZXNzYWdlOmplKCJNaXNzaW5nUmVxdWlyZWRQcm9wV2FybmluZyIsJ01pc3NpbmcgcHJvcGVydHkgInswfSIuJyxOKX0pKX1mdW5jdGlvbiBMKGUpe2Zvcih2YXIgdD13LmluZGV4T2YoZSk7MDw9dDspdy5zcGxpY2UodCwxKSx0PXcuaW5kZXhPZihlKX1pZihyLnByb3BlcnRpZXMpZm9yKHZhciBNPTAsTz1PYmplY3Qua2V5cyhyLnByb3BlcnRpZXMpO008Ty5sZW5ndGg7TSsrKXt2YXIgTj1PW01dLFA9KEwoTiksci5wcm9wZXJ0aWVzW05dKTsocT1DW05dKSYmKFBuKFApP1A/KG4ucHJvcGVydGllc01hdGNoZXMrKyxuLnByb3BlcnRpZXNWYWx1ZU1hdGNoZXMrKyk6KCQ9cS5wYXJlbnQsbi5wcm9ibGVtcy5wdXNoKHtsb2NhdGlvbjp7b2Zmc2V0OiQua2V5Tm9kZS5vZmZzZXQsbGVuZ3RoOiQua2V5Tm9kZS5sZW5ndGh9LG1lc3NhZ2U6ci5lcnJvck1lc3NhZ2V8fGplKCJEaXNhbGxvd2VkRXh0cmFQcm9wV2FybmluZyIsIlByb3BlcnR5IHswfSBpcyBub3QgYWxsb3dlZC4iLE4pfSkpOih6PW5ldyBHaSxybyhxLFAseix5KSxuLm1lcmdlUHJvcGVydHlNYXRjaCh6KSkpfWlmKHIucGF0dGVyblByb3BlcnRpZXMpZm9yKHZhciBUPTAsST1PYmplY3Qua2V5cyhyLnBhdHRlcm5Qcm9wZXJ0aWVzKTtUPEkubGVuZ3RoO1QrKylmb3IodmFyIFY9SVtUXSxSPUluKFYpLEQ9MCxGPXcuc2xpY2UoMCk7RDxGLmxlbmd0aDtEKyspe049RltEXTtudWxsIT1SJiZSLnRlc3QoTikmJihMKE4pLChxPUNbTl0pJiYoUG4oUD1yLnBhdHRlcm5Qcm9wZXJ0aWVzW1ZdKT9QPyhuLnByb3BlcnRpZXNNYXRjaGVzKyssbi5wcm9wZXJ0aWVzVmFsdWVNYXRjaGVzKyspOigkPXEucGFyZW50LG4ucHJvYmxlbXMucHVzaCh7bG9jYXRpb246e29mZnNldDokLmtleU5vZGUub2Zmc2V0LGxlbmd0aDokLmtleU5vZGUubGVuZ3RofSxtZXNzYWdlOnIuZXJyb3JNZXNzYWdlfHxqZSgiRGlzYWxsb3dlZEV4dHJhUHJvcFdhcm5pbmciLCJQcm9wZXJ0eSB7MH0gaXMgbm90IGFsbG93ZWQuIixOKX0pKTooej1uZXcgR2kscm8ocSxQLHoseSksbi5tZXJnZVByb3BlcnR5TWF0Y2goeikpKSl9aWYoIm9iamVjdCI9PXR5cGVvZiByLmFkZGl0aW9uYWxQcm9wZXJ0aWVzKWZvcih2YXIgSz0wLGo9dztLPGoubGVuZ3RoO0srKyl7Tj1qW0tdOyhxPUNbTl0pJiYoej1uZXcgR2kscm8ocSxyLmFkZGl0aW9uYWxQcm9wZXJ0aWVzLHoseSksbi5tZXJnZVByb3BlcnR5TWF0Y2goeikpfWVsc2UgaWYoITE9PT1yLmFkZGl0aW9uYWxQcm9wZXJ0aWVzJiYwPHcubGVuZ3RoKWZvcih2YXIgVT0wLEI9dztVPEIubGVuZ3RoO1UrKyl7dmFyIHEsJCxOPUJbVV07KHE9Q1tOXSkmJigkPXEucGFyZW50LG4ucHJvYmxlbXMucHVzaCh7bG9jYXRpb246e29mZnNldDokLmtleU5vZGUub2Zmc2V0LGxlbmd0aDokLmtleU5vZGUubGVuZ3RofSxtZXNzYWdlOnIuZXJyb3JNZXNzYWdlfHxqZSgiRGlzYWxsb3dlZEV4dHJhUHJvcFdhcm5pbmciLCJQcm9wZXJ0eSB7MH0gaXMgbm90IGFsbG93ZWQuIixOKX0pKX1pZihNbihyLm1heFByb3BlcnRpZXMpJiZ0LnByb3BlcnRpZXMubGVuZ3RoPnIubWF4UHJvcGVydGllcyYmbi5wcm9ibGVtcy5wdXNoKHtsb2NhdGlvbjp7b2Zmc2V0OnQub2Zmc2V0LGxlbmd0aDp0Lmxlbmd0aH0sbWVzc2FnZTpqZSgiTWF4UHJvcFdhcm5pbmciLCJPYmplY3QgaGFzIG1vcmUgcHJvcGVydGllcyB0aGFuIGxpbWl0IG9mIHswfS4iLHIubWF4UHJvcGVydGllcyl9KSxNbihyLm1pblByb3BlcnRpZXMpJiZ0LnByb3BlcnRpZXMubGVuZ3RoPHIubWluUHJvcGVydGllcyYmbi5wcm9ibGVtcy5wdXNoKHtsb2NhdGlvbjp7b2Zmc2V0OnQub2Zmc2V0LGxlbmd0aDp0Lmxlbmd0aH0sbWVzc2FnZTpqZSgiTWluUHJvcFdhcm5pbmciLCJPYmplY3QgaGFzIGZld2VyIHByb3BlcnRpZXMgdGhhbiB0aGUgcmVxdWlyZWQgbnVtYmVyIG9mIHswfSIsci5taW5Qcm9wZXJ0aWVzKX0pLHIuZGVwZW5kZW5jaWVzKWZvcih2YXIgVz0wLEg9T2JqZWN0LmtleXMoci5kZXBlbmRlbmNpZXMpO1c8SC5sZW5ndGg7VysrKXtBPUhbV107aWYoQ1tBXSl7dmFyIHosSj1yLmRlcGVuZGVuY2llc1tBXTtpZihBcnJheS5pc0FycmF5KEopKWZvcih2YXIgRz0wLFo9SjtHPFoubGVuZ3RoO0crKyl7dmFyIFg9WltHXTtDW1hdP24ucHJvcGVydGllc1ZhbHVlTWF0Y2hlcysrOm4ucHJvYmxlbXMucHVzaCh7bG9jYXRpb246e29mZnNldDp0Lm9mZnNldCxsZW5ndGg6dC5sZW5ndGh9LG1lc3NhZ2U6amUoIlJlcXVpcmVkRGVwZW5kZW50UHJvcFdhcm5pbmciLCJPYmplY3QgaXMgbWlzc2luZyBwcm9wZXJ0eSB7MH0gcmVxdWlyZWQgYnkgcHJvcGVydHkgezF9LiIsWCxBKX0pfWVsc2UoUD0kaShKKSkmJih6PW5ldyBHaSxybyh0LFAseix5KSxuLm1lcmdlUHJvcGVydHlNYXRjaCh6KSl9fXZhciBRPSRpKHIucHJvcGVydHlOYW1lcyk7aWYoUSlmb3IodmFyIFk9MCxlZT10LnByb3BlcnRpZXM7WTxlZS5sZW5ndGg7WSsrKXt2YXIgdGU9ZWVbWV07KEE9dGUua2V5Tm9kZSkmJnJvKEEsUSxuLHppLmluc3RhbmNlKX1icmVhaztjYXNlImFycmF5Ijp2YXIgaT1oLHJlPWUsbmU9dSxpZT1mO2lmKEFycmF5LmlzQXJyYXkocmUuaXRlbXMpKXtmb3IodmFyIG9lPXJlLml0ZW1zLGFlPTA7YWU8b2UubGVuZ3RoO2FlKyspe3ZhciBzZT0kaShvZVthZV0pLGxlPW5ldyBHaTsoZGU9aS5pdGVtc1thZV0pPyhybyhkZSxzZSxsZSxpZSksbmUubWVyZ2VQcm9wZXJ0eU1hdGNoKGxlKSk6aS5pdGVtcy5sZW5ndGg+PW9lLmxlbmd0aCYmbmUucHJvcGVydGllc1ZhbHVlTWF0Y2hlcysrfWlmKGkuaXRlbXMubGVuZ3RoPm9lLmxlbmd0aClpZigib2JqZWN0Ij09dHlwZW9mIHJlLmFkZGl0aW9uYWxJdGVtcylmb3IodmFyIGNlPW9lLmxlbmd0aDtjZTxpLml0ZW1zLmxlbmd0aDtjZSsrKXtsZT1uZXcgR2k7cm8oaS5pdGVtc1tjZV0scmUuYWRkaXRpb25hbEl0ZW1zLGxlLGllKSxuZS5tZXJnZVByb3BlcnR5TWF0Y2gobGUpfWVsc2UhMT09PXJlLmFkZGl0aW9uYWxJdGVtcyYmbmUucHJvYmxlbXMucHVzaCh7bG9jYXRpb246e29mZnNldDppLm9mZnNldCxsZW5ndGg6aS5sZW5ndGh9LG1lc3NhZ2U6amUoImFkZGl0aW9uYWxJdGVtc1dhcm5pbmciLCJBcnJheSBoYXMgdG9vIG1hbnkgaXRlbXMgYWNjb3JkaW5nIHRvIHNjaGVtYS4gRXhwZWN0ZWQgezB9IG9yIGZld2VyLiIsb2UubGVuZ3RoKX0pfWVsc2V7dmFyIHVlPSRpKHJlLml0ZW1zKTtpZih1ZSlmb3IodmFyIGhlPTAsZmU9aS5pdGVtcztoZTxmZS5sZW5ndGg7aGUrKyl7dmFyIGRlPWZlW2hlXSxsZT1uZXcgR2k7cm8oZGUsdWUsbGUsaWUpLG5lLm1lcmdlUHJvcGVydHlNYXRjaChsZSl9fXZhciBtZSxnZT0kaShyZS5jb250YWlucyk7Z2UmJihpLml0ZW1zLnNvbWUoZnVuY3Rpb24oZSl7dmFyIHQ9bmV3IEdpO3JldHVybiBybyhlLGdlLHQsemkuaW5zdGFuY2UpLCF0Lmhhc1Byb2JsZW1zKCl9KXx8bmUucHJvYmxlbXMucHVzaCh7bG9jYXRpb246e29mZnNldDppLm9mZnNldCxsZW5ndGg6aS5sZW5ndGh9LG1lc3NhZ2U6cmUuZXJyb3JNZXNzYWdlfHxqZSgicmVxdWlyZWRJdGVtTWlzc2luZ1dhcm5pbmciLCJBcnJheSBkb2VzIG5vdCBjb250YWluIHJlcXVpcmVkIGl0ZW0uIil9KSksTW4ocmUubWluSXRlbXMpJiZpLml0ZW1zLmxlbmd0aDxyZS5taW5JdGVtcyYmbmUucHJvYmxlbXMucHVzaCh7bG9jYXRpb246e29mZnNldDppLm9mZnNldCxsZW5ndGg6aS5sZW5ndGh9LG1lc3NhZ2U6amUoIm1pbkl0ZW1zV2FybmluZyIsIkFycmF5IGhhcyB0b28gZmV3IGl0ZW1zLiBFeHBlY3RlZCB7MH0gb3IgbW9yZS4iLHJlLm1pbkl0ZW1zKX0pLE1uKHJlLm1heEl0ZW1zKSYmaS5pdGVtcy5sZW5ndGg+cmUubWF4SXRlbXMmJm5lLnByb2JsZW1zLnB1c2goe2xvY2F0aW9uOntvZmZzZXQ6aS5vZmZzZXQsbGVuZ3RoOmkubGVuZ3RofSxtZXNzYWdlOmplKCJtYXhJdGVtc1dhcm5pbmciLCJBcnJheSBoYXMgdG9vIG1hbnkgaXRlbXMuIEV4cGVjdGVkIHswfSBvciBmZXdlci4iLHJlLm1heEl0ZW1zKX0pLCEwIT09cmUudW5pcXVlSXRlbXN8fChtZT1YaShpKSkuc29tZShmdW5jdGlvbihlLHQpe3JldHVybiB0IT09bWUubGFzdEluZGV4T2YoZSl9KSYmbmUucHJvYmxlbXMucHVzaCh7bG9jYXRpb246e29mZnNldDppLm9mZnNldCxsZW5ndGg6aS5sZW5ndGh9LG1lc3NhZ2U6amUoInVuaXF1ZUl0ZW1zV2FybmluZyIsIkFycmF5IGhhcyBkdXBsaWNhdGUgaXRlbXMuIil9KTticmVhaztjYXNlInN0cmluZyI6dmFyIG8sYT1oLHM9ZSxwZT11O2lmKE1uKHMubWluTGVuZ3RoKSYmYS52YWx1ZS5sZW5ndGg8cy5taW5MZW5ndGgmJnBlLnByb2JsZW1zLnB1c2goe2xvY2F0aW9uOntvZmZzZXQ6YS5vZmZzZXQsbGVuZ3RoOmEubGVuZ3RofSxtZXNzYWdlOmplKCJtaW5MZW5ndGhXYXJuaW5nIiwiU3RyaW5nIGlzIHNob3J0ZXIgdGhhbiB0aGUgbWluaW11bSBsZW5ndGggb2YgezB9LiIscy5taW5MZW5ndGgpfSksTW4ocy5tYXhMZW5ndGgpJiZhLnZhbHVlLmxlbmd0aD5zLm1heExlbmd0aCYmcGUucHJvYmxlbXMucHVzaCh7bG9jYXRpb246e29mZnNldDphLm9mZnNldCxsZW5ndGg6YS5sZW5ndGh9LG1lc3NhZ2U6amUoIm1heExlbmd0aFdhcm5pbmciLCJTdHJpbmcgaXMgbG9uZ2VyIHRoYW4gdGhlIG1heGltdW0gbGVuZ3RoIG9mIHswfS4iLHMubWF4TGVuZ3RoKX0pLCJzdHJpbmciPT10eXBlb2Ygcy5wYXR0ZXJuJiYobnVsbCE9KG89SW4ocy5wYXR0ZXJuKSkmJm8udGVzdChhLnZhbHVlKXx8cGUucHJvYmxlbXMucHVzaCh7bG9jYXRpb246e29mZnNldDphLm9mZnNldCxsZW5ndGg6YS5sZW5ndGh9LG1lc3NhZ2U6cy5wYXR0ZXJuRXJyb3JNZXNzYWdlfHxzLmVycm9yTWVzc2FnZXx8amUoInBhdHRlcm5XYXJuaW5nIiwnU3RyaW5nIGRvZXMgbm90IG1hdGNoIHRoZSBwYXR0ZXJuIG9mICJ7MH0iLicscy5wYXR0ZXJuKX0pKSxzLmZvcm1hdClzd2l0Y2gocy5mb3JtYXQpe2Nhc2UidXJpIjpjYXNlInVyaS1yZWZlcmVuY2UiOnZhciBiZT12b2lkIDA7YS52YWx1ZT8odmU9L14oKFteOi8/I10rPyk6KT8oXC9cLyhbXi8/I10qKSk/KFtePyNdKikoXD8oW14jXSopKT8oIyguKikpPy8uZXhlYyhhLnZhbHVlKSk/dmVbMl18fCJ1cmkiIT09cy5mb3JtYXR8fChiZT1qZSgidXJpU2NoZW1lTWlzc2luZyIsIlVSSSB3aXRoIGEgc2NoZW1lIGlzIGV4cGVjdGVkLiIpKTpiZT1qZSgidXJpTWlzc2luZyIsIlVSSSBpcyBleHBlY3RlZC4iKTpiZT1qZSgidXJpRW1wdHkiLCJVUkkgZXhwZWN0ZWQuIiksYmUmJnBlLnByb2JsZW1zLnB1c2goe2xvY2F0aW9uOntvZmZzZXQ6YS5vZmZzZXQsbGVuZ3RoOmEubGVuZ3RofSxtZXNzYWdlOnMucGF0dGVybkVycm9yTWVzc2FnZXx8cy5lcnJvck1lc3NhZ2V8fGplKCJ1cmlGb3JtYXRXYXJuaW5nIiwiU3RyaW5nIGlzIG5vdCBhIFVSSTogezB9IixiZSl9KTticmVhaztjYXNlImNvbG9yLWhleCI6Y2FzZSJkYXRlLXRpbWUiOmNhc2UiZGF0ZSI6Y2FzZSJ0aW1lIjpjYXNlImVtYWlsIjpjYXNlImhvc3RuYW1lIjpjYXNlImlwdjQiOmNhc2UiaXB2NiI6dmFyIHZlPUNpW3MuZm9ybWF0XTthLnZhbHVlJiZ2ZS5wYXR0ZXJuLmV4ZWMoYS52YWx1ZSl8fHBlLnByb2JsZW1zLnB1c2goe2xvY2F0aW9uOntvZmZzZXQ6YS5vZmZzZXQsbGVuZ3RoOmEubGVuZ3RofSxtZXNzYWdlOnMucGF0dGVybkVycm9yTWVzc2FnZXx8cy5lcnJvck1lc3NhZ2V8fHZlLmVycm9yTWVzc2FnZX0pfWJyZWFrO2Nhc2UibnVtYmVyIjpvPWUsZD11LG09KGM9aCkudmFsdWUsTW4oby5tdWx0aXBsZU9mKSYmKHY9LTEsTnVtYmVyLmlzSW50ZWdlcihvLm11bHRpcGxlT2YpP3Y9bSVvLm11bHRpcGxlT2Y6KGI9RGUoby5tdWx0aXBsZU9mKSxwPURlKG0pLGImJnAmJihnPU1hdGgucG93KDEwLE1hdGguYWJzKHAubXVsdGlwbGllci1iLm11bHRpcGxpZXIpKSxwLm11bHRpcGxpZXI8Yi5tdWx0aXBsaWVyP3AudmFsdWUqPWc6Yi52YWx1ZSo9Zyx2PXAudmFsdWUlYi52YWx1ZSkpLDAhPT12JiZkLnByb2JsZW1zLnB1c2goe2xvY2F0aW9uOntvZmZzZXQ6Yy5vZmZzZXQsbGVuZ3RoOmMubGVuZ3RofSxtZXNzYWdlOmplKCJtdWx0aXBsZU9mV2FybmluZyIsIlZhbHVlIGlzIG5vdCBkaXZpc2libGUgYnkgezB9LiIsby5tdWx0aXBsZU9mKX0pKSxNbihnPUZlKG8ubWluaW11bSxvLmV4Y2x1c2l2ZU1pbmltdW0pKSYmbTw9ZyYmZC5wcm9ibGVtcy5wdXNoKHtsb2NhdGlvbjp7b2Zmc2V0OmMub2Zmc2V0LGxlbmd0aDpjLmxlbmd0aH0sbWVzc2FnZTpqZSgiZXhjbHVzaXZlTWluaW11bVdhcm5pbmciLCJWYWx1ZSBpcyBiZWxvdyB0aGUgZXhjbHVzaXZlIG1pbmltdW0gb2YgezB9LiIsZyl9KSxNbihwPUZlKG8ubWF4aW11bSxvLmV4Y2x1c2l2ZU1heGltdW0pKSYmcDw9bSYmZC5wcm9ibGVtcy5wdXNoKHtsb2NhdGlvbjp7b2Zmc2V0OmMub2Zmc2V0LGxlbmd0aDpjLmxlbmd0aH0sbWVzc2FnZTpqZSgiZXhjbHVzaXZlTWF4aW11bVdhcm5pbmciLCJWYWx1ZSBpcyBhYm92ZSB0aGUgZXhjbHVzaXZlIG1heGltdW0gb2YgezB9LiIscCl9KSxNbihiPUtlKG8ubWluaW11bSxvLmV4Y2x1c2l2ZU1pbmltdW0pKSYmbTxiJiZkLnByb2JsZW1zLnB1c2goe2xvY2F0aW9uOntvZmZzZXQ6Yy5vZmZzZXQsbGVuZ3RoOmMubGVuZ3RofSxtZXNzYWdlOmplKCJtaW5pbXVtV2FybmluZyIsIlZhbHVlIGlzIGJlbG93IHRoZSBtaW5pbXVtIG9mIHswfS4iLGIpfSksTW4odj1LZShvLm1heGltdW0sby5leGNsdXNpdmVNYXhpbXVtKSkmJnY8bSYmZC5wcm9ibGVtcy5wdXNoKHtsb2NhdGlvbjp7b2Zmc2V0OmMub2Zmc2V0LGxlbmd0aDpjLmxlbmd0aH0sbWVzc2FnZTpqZSgibWF4aW11bVdhcm5pbmciLCJWYWx1ZSBpcyBhYm92ZSB0aGUgbWF4aW11bSBvZiB7MH0uIix2KX0pO2JyZWFrO2Nhc2UicHJvcGVydHkiOnJldHVybiBybyhoLnZhbHVlTm9kZSxlLHUsZil9ZnVuY3Rpb24geWUoZSl7cmV0dXJuIGgudHlwZT09PWV8fCJpbnRlZ2VyIj09PWUmJiJudW1iZXIiPT09aC50eXBlJiZoLmlzSW50ZWdlcn1pZihBcnJheS5pc0FycmF5KGUudHlwZSk/ZS50eXBlLnNvbWUoeWUpfHx1LnByb2JsZW1zLnB1c2goe2xvY2F0aW9uOntvZmZzZXQ6aC5vZmZzZXQsbGVuZ3RoOmgubGVuZ3RofSxtZXNzYWdlOmUuZXJyb3JNZXNzYWdlfHxqZSgidHlwZUFycmF5TWlzbWF0Y2hXYXJuaW5nIiwiSW5jb3JyZWN0IHR5cGUuIEV4cGVjdGVkIG9uZSBvZiB7MH0uIixlLnR5cGUuam9pbigiLCAiKSl9KTplLnR5cGUmJih5ZShlLnR5cGUpfHx1LnByb2JsZW1zLnB1c2goe2xvY2F0aW9uOntvZmZzZXQ6aC5vZmZzZXQsbGVuZ3RoOmgubGVuZ3RofSxtZXNzYWdlOmUuZXJyb3JNZXNzYWdlfHxqZSgidHlwZU1pc21hdGNoV2FybmluZyIsJ0luY29ycmVjdCB0eXBlLiBFeHBlY3RlZCAiezB9Ii4nLGUudHlwZSl9KSksQXJyYXkuaXNBcnJheShlLmFsbE9mKSlmb3IodmFyIENlPTAsd2U9ZS5hbGxPZjtDZTx3ZS5sZW5ndGg7Q2UrKyl7dmFyIF9lPXdlW0NlXTtybyhoLCRpKF9lKSx1LGYpfWw9JGkoZS5ub3QpO2lmKGwpe3ZhciBTZT1uZXcgR2ksQWU9Zi5uZXdTdWIoKTtybyhoLGwsU2UsQWUpLFNlLmhhc1Byb2JsZW1zKCl8fHUucHJvYmxlbXMucHVzaCh7bG9jYXRpb246e29mZnNldDpoLm9mZnNldCxsZW5ndGg6aC5sZW5ndGh9LG1lc3NhZ2U6amUoIm5vdFNjaGVtYVdhcm5pbmciLCJNYXRjaGVzIGEgc2NoZW1hIHRoYXQgaXMgbm90IGFsbG93ZWQuIil9KTtmb3IodmFyIHhlPTAsRWU9QWUuc2NoZW1hczt4ZTxFZS5sZW5ndGg7eGUrKyl7dmFyIGtlPUVlW3hlXTtrZS5pbnZlcnRlZD0ha2UuaW52ZXJ0ZWQsZi5hZGQoa2UpfX1mdW5jdGlvbiBOZShlLHQpe2Zvcih2YXIgcj1bXSxuPXZvaWQgMCxpPTAsbz1lO2k8by5sZW5ndGg7aSsrKXt2YXIgYSxzPSRpKG9baV0pLGw9bmV3IEdpLGM9Zi5uZXdTdWIoKTtybyhoLHMsbCxjKSxsLmhhc1Byb2JsZW1zKCl8fHIucHVzaChzKSxuP3R8fGwuaGFzUHJvYmxlbXMoKXx8bi52YWxpZGF0aW9uUmVzdWx0Lmhhc1Byb2JsZW1zKCk/MDwoYT1sLmNvbXBhcmUobi52YWxpZGF0aW9uUmVzdWx0KSk/bj17c2NoZW1hOnMsdmFsaWRhdGlvblJlc3VsdDpsLG1hdGNoaW5nU2NoZW1hczpjfTowPT09YSYmKG4ubWF0Y2hpbmdTY2hlbWFzLm1lcmdlKGMpLG4udmFsaWRhdGlvblJlc3VsdC5tZXJnZUVudW1WYWx1ZXMobCkpOihuLm1hdGNoaW5nU2NoZW1hcy5tZXJnZShjKSxuLnZhbGlkYXRpb25SZXN1bHQucHJvcGVydGllc01hdGNoZXMrPWwucHJvcGVydGllc01hdGNoZXMsbi52YWxpZGF0aW9uUmVzdWx0LnByb3BlcnRpZXNWYWx1ZU1hdGNoZXMrPWwucHJvcGVydGllc1ZhbHVlTWF0Y2hlcyk6bj17c2NoZW1hOnMsdmFsaWRhdGlvblJlc3VsdDpsLG1hdGNoaW5nU2NoZW1hczpjfX1yZXR1cm4gMTxyLmxlbmd0aCYmdCYmdS5wcm9ibGVtcy5wdXNoKHtsb2NhdGlvbjp7b2Zmc2V0Omgub2Zmc2V0LGxlbmd0aDoxfSxtZXNzYWdlOmplKCJvbmVPZldhcm5pbmciLCJNYXRjaGVzIG11bHRpcGxlIHNjaGVtYXMgd2hlbiBvbmx5IG9uZSBtdXN0IHZhbGlkYXRlLiIpfSksbiYmKHUubWVyZ2Uobi52YWxpZGF0aW9uUmVzdWx0KSx1LnByb3BlcnRpZXNNYXRjaGVzKz1uLnZhbGlkYXRpb25SZXN1bHQucHJvcGVydGllc01hdGNoZXMsdS5wcm9wZXJ0aWVzVmFsdWVNYXRjaGVzKz1uLnZhbGlkYXRpb25SZXN1bHQucHJvcGVydGllc1ZhbHVlTWF0Y2hlcyxmLm1lcmdlKG4ubWF0Y2hpbmdTY2hlbWFzKSksci5sZW5ndGh9ZnVuY3Rpb24gTGUoZSl7dmFyIHQ9bmV3IEdpLHI9Zi5uZXdTdWIoKTtybyhoLCRpKGUpLHQsciksdS5tZXJnZSh0KSx1LnByb3BlcnRpZXNNYXRjaGVzKz10LnByb3BlcnRpZXNNYXRjaGVzLHUucHJvcGVydGllc1ZhbHVlTWF0Y2hlcys9dC5wcm9wZXJ0aWVzVmFsdWVNYXRjaGVzLGYubWVyZ2Uocil9aWYoQXJyYXkuaXNBcnJheShlLmFueU9mKSYmTmUoZS5hbnlPZiwhMSksQXJyYXkuaXNBcnJheShlLm9uZU9mKSYmTmUoZS5vbmVPZiwhMCksbD0kaShlLmlmKSl7U2U9bDtBZT0kaShlLnRoZW4pO2w9JGkoZS5lbHNlKTt2YXIgU2U9JGkoU2UpLE1lPW5ldyBHaSxPZT1mLm5ld1N1YigpO3JvKGgsU2UsTWUsT2UpLGYubWVyZ2UoT2UpLE1lLmhhc1Byb2JsZW1zKCk/bCYmTGUobCk6QWUmJkxlKEFlKX1pZihBcnJheS5pc0FycmF5KGUuZW51bSkpe2Zvcih2YXIgUGU9WGkoaCksVGU9ITEsSWU9MCxWZT1lLmVudW07SWU8VmUubGVuZ3RoO0llKyspe3ZhciBSZT1WZVtJZV07aWYoTG4oUGUsUmUpKXtUZT0hMDticmVha319dS5lbnVtVmFsdWVzPWUuZW51bSwodS5lbnVtVmFsdWVNYXRjaD1UZSl8fHUucHJvYmxlbXMucHVzaCh7bG9jYXRpb246e29mZnNldDpoLm9mZnNldCxsZW5ndGg6aC5sZW5ndGh9LGNvZGU6ZGkuRW51bVZhbHVlTWlzbWF0Y2gsbWVzc2FnZTplLmVycm9yTWVzc2FnZXx8amUoImVudW1XYXJuaW5nIiwiVmFsdWUgaXMgbm90IGFjY2VwdGVkLiBWYWxpZCB2YWx1ZXM6IHswfS4iLGUuZW51bS5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIEpTT04uc3RyaW5naWZ5KGUpfSkuam9pbigiLCAiKSl9KX1PbihlLmNvbnN0KSYmKExuKFBlPVhpKGgpLGUuY29uc3QpP3UuZW51bVZhbHVlTWF0Y2g9ITA6KHUucHJvYmxlbXMucHVzaCh7bG9jYXRpb246e29mZnNldDpoLm9mZnNldCxsZW5ndGg6aC5sZW5ndGh9LGNvZGU6ZGkuRW51bVZhbHVlTWlzbWF0Y2gsbWVzc2FnZTplLmVycm9yTWVzc2FnZXx8amUoImNvbnN0V2FybmluZyIsIlZhbHVlIG11c3QgYmUgezB9LiIsSlNPTi5zdHJpbmdpZnkoZS5jb25zdCkpfSksdS5lbnVtVmFsdWVNYXRjaD0hMSksdS5lbnVtVmFsdWVzPVtlLmNvbnN0XSksZS5kZXByZWNhdGlvbk1lc3NhZ2UmJmgucGFyZW50JiZ1LnByb2JsZW1zLnB1c2goe2xvY2F0aW9uOntvZmZzZXQ6aC5wYXJlbnQub2Zmc2V0LGxlbmd0aDpoLnBhcmVudC5sZW5ndGh9LHNldmVyaXR5OmZuLldhcm5pbmcsbWVzc2FnZTplLmRlcHJlY2F0aW9uTWVzc2FnZSxjb2RlOmRpLkRlcHJlY2F0ZWR9KSxmLmFkZCh7bm9kZTpoLHNjaGVtYTplfSl9ZnVuY3Rpb24gRGUoZSl7dmFyIHQsZT0vXigtP1xkKykoPzpcLihcZCspKT8oPzplKFstK11cZCspKT8kLy5leGVjKGUudG9TdHJpbmcoKSk7cmV0dXJuIGUmJnt2YWx1ZTpOdW1iZXIoZVsxXSsoZVsyXXx8IiIpKSxtdWx0aXBsaWVyOigobnVsbD09PSh0PWVbMl0pfHx2b2lkIDA9PT10P3ZvaWQgMDp0Lmxlbmd0aCl8fDApLShwYXJzZUludChlWzNdKXx8MCl9fWZ1bmN0aW9uIEZlKGUsdCl7cmV0dXJuIE1uKHQpP3Q6UG4odCkmJnQ/ZTp2b2lkIDB9ZnVuY3Rpb24gS2UoZSx0KXtpZighUG4odCl8fCF0KXJldHVybiBlfX1mdW5jdGlvbiBubyhvLGUpe3ZhciBhPVtdLGQ9LTEsbT1vLmdldFRleHQoKSxsPUFuKG0sITEpLHQ9ZSYmZS5jb2xsZWN0Q29tbWVudHM/W106dm9pZCAwO2Z1bmN0aW9uIGMoKXtmb3IoOzspe3ZhciBlPWwuc2NhbigpO3N3aXRjaCghZnVuY3Rpb24oKXtzd2l0Y2gobC5nZXRUb2tlbkVycm9yKCkpe2Nhc2UgNDpyZXR1cm4gcyhqZSgiSW52YWxpZFVuaWNvZGUiLCJJbnZhbGlkIHVuaWNvZGUgc2VxdWVuY2UgaW4gc3RyaW5nLiIpLGRpLkludmFsaWRVbmljb2RlKTtjYXNlIDU6cmV0dXJuIHMoamUoIkludmFsaWRFc2NhcGVDaGFyYWN0ZXIiLCJJbnZhbGlkIGVzY2FwZSBjaGFyYWN0ZXIgaW4gc3RyaW5nLiIpLGRpLkludmFsaWRFc2NhcGVDaGFyYWN0ZXIpO2Nhc2UgMzpyZXR1cm4gcyhqZSgiVW5leHBlY3RlZEVuZE9mTnVtYmVyIiwiVW5leHBlY3RlZCBlbmQgb2YgbnVtYmVyLiIpLGRpLlVuZXhwZWN0ZWRFbmRPZk51bWJlcik7Y2FzZSAxOnJldHVybiBzKGplKCJVbmV4cGVjdGVkRW5kT2ZDb21tZW50IiwiVW5leHBlY3RlZCBlbmQgb2YgY29tbWVudC4iKSxkaS5VbmV4cGVjdGVkRW5kT2ZDb21tZW50KTtjYXNlIDI6cmV0dXJuIHMoamUoIlVuZXhwZWN0ZWRFbmRPZlN0cmluZyIsIlVuZXhwZWN0ZWQgZW5kIG9mIHN0cmluZy4iKSxkaS5VbmV4cGVjdGVkRW5kT2ZTdHJpbmcpO2Nhc2UgNjpyZXR1cm4gcyhqZSgiSW52YWxpZENoYXJhY3RlciIsIkludmFsaWQgY2hhcmFjdGVycyBpbiBzdHJpbmcuIENvbnRyb2wgY2hhcmFjdGVycyBtdXN0IGJlIGVzY2FwZWQuIiksZGkuSW52YWxpZENoYXJhY3Rlcil9fSgpLGUpe2Nhc2UgMTI6Y2FzZSAxMzpBcnJheS5pc0FycmF5KHQpJiZ0LnB1c2gobG4uY3JlYXRlKG8ucG9zaXRpb25BdChsLmdldFRva2VuT2Zmc2V0KCkpLG8ucG9zaXRpb25BdChsLmdldFRva2VuT2Zmc2V0KCkrbC5nZXRUb2tlbkxlbmd0aCgpKSkpO2JyZWFrO2Nhc2UgMTU6Y2FzZSAxNDpicmVhaztkZWZhdWx0OnJldHVybiBlfX19ZnVuY3Rpb24gdShlLHQscixuLGkpe3ZvaWQgMD09PWkmJihpPWZuLkVycm9yKSwwIT09YS5sZW5ndGgmJnI9PT1kfHwobj1sbi5jcmVhdGUoby5wb3NpdGlvbkF0KHIpLG8ucG9zaXRpb25BdChuKSksYS5wdXNoKGRuLmNyZWF0ZShuLGUsaSx0LG8ubGFuZ3VhZ2VJZCkpLGQ9cil9ZnVuY3Rpb24gcyhlLHQscixuLGkpe3ZvaWQgMD09PXImJihyPXZvaWQgMCksdm9pZCAwPT09biYmKG49W10pLHZvaWQgMD09PWkmJihpPVtdKTt2YXIgbz1sLmdldFRva2VuT2Zmc2V0KCksYT1sLmdldFRva2VuT2Zmc2V0KCkrbC5nZXRUb2tlbkxlbmd0aCgpO2lmKG89PT1hJiYwPG8pe2ZvcihvLS07MDxvJiYvXHMvLnRlc3QobS5jaGFyQXQobykpOylvLS07YT1vKzF9aWYodShlLHQsbyxhKSxyJiZoKHIsITEpLDA8bi5sZW5ndGgraS5sZW5ndGgpZm9yKHZhciBzPWwuZ2V0VG9rZW4oKTsxNyE9PXM7KXtpZigtMSE9PW4uaW5kZXhPZihzKSl7YygpO2JyZWFrfWlmKC0xIT09aS5pbmRleE9mKHMpKWJyZWFrO3M9YygpfXJldHVybiByfWZ1bmN0aW9uIGgoZSx0KXtyZXR1cm4gZS5sZW5ndGg9bC5nZXRUb2tlbk9mZnNldCgpK2wuZ2V0VG9rZW5MZW5ndGgoKS1lLm9mZnNldCx0JiZjKCksZX12YXIgZz1uZXcgUmkodm9pZCAwLDAsMCk7ZnVuY3Rpb24gcihlKXtpZigxPT09bC5nZXRUb2tlbigpKXtmb3IodmFyIHQ9bmV3IEJpKGUsbC5nZXRUb2tlbk9mZnNldCgpKSxyPU9iamVjdC5jcmVhdGUobnVsbCksbj0oYygpLCExKTsyIT09bC5nZXRUb2tlbigpJiYxNyE9PWwuZ2V0VG9rZW4oKTspe2lmKDU9PT1sLmdldFRva2VuKCkpe258fHMoamUoIlByb3BlcnR5RXhwZWN0ZWQiLCJQcm9wZXJ0eSBleHBlY3RlZCIpLGRpLlByb3BlcnR5RXhwZWN0ZWQpO3ZhciBpPWwuZ2V0VG9rZW5PZmZzZXQoKTtpZihjKCksMj09PWwuZ2V0VG9rZW4oKSl7biYmdShqZSgiVHJhaWxpbmdDb21tYSIsIlRyYWlsaW5nIGNvbW1hIiksZGkuVHJhaWxpbmdDb21tYSxpLGkrMSk7Y29udGludWV9fWVsc2UgbiYmcyhqZSgiRXhwZWN0ZWRDb21tYSIsIkV4cGVjdGVkIGNvbW1hIiksZGkuQ29tbWFFeHBlY3RlZCk7aT1mdW5jdGlvbihlLHQpe3ZhciByPXAoZT1uZXcgS2koZSxsLmdldFRva2VuT2Zmc2V0KCksZykpO2lmKCFyKXtpZigxNiE9PWwuZ2V0VG9rZW4oKSlyZXR1cm47cyhqZSgiRG91YmxlUXVvdGVzRXhwZWN0ZWQiLCJQcm9wZXJ0eSBrZXlzIG11c3QgYmUgZG91YmxlcXVvdGVkIiksZGkuVW5kZWZpbmVkKTt2YXIgbj1uZXcgUmkoZSxsLmdldFRva2VuT2Zmc2V0KCksbC5nZXRUb2tlbkxlbmd0aCgpKTtuLnZhbHVlPWwuZ2V0VG9rZW5WYWx1ZSgpLHI9bixjKCl9aWYoKG49dFsoZS5rZXlOb2RlPXIpLnZhbHVlXSk/KHUoamUoIkR1cGxpY2F0ZUtleVdhcm5pbmciLCJEdXBsaWNhdGUgb2JqZWN0IGtleSIpLGRpLkR1cGxpY2F0ZUtleSxlLmtleU5vZGUub2Zmc2V0LGUua2V5Tm9kZS5vZmZzZXQrZS5rZXlOb2RlLmxlbmd0aCxmbi5XYXJuaW5nKSwib2JqZWN0Ij09dHlwZW9mIG4mJnUoamUoIkR1cGxpY2F0ZUtleVdhcm5pbmciLCJEdXBsaWNhdGUgb2JqZWN0IGtleSIpLGRpLkR1cGxpY2F0ZUtleSxuLmtleU5vZGUub2Zmc2V0LG4ua2V5Tm9kZS5vZmZzZXQrbi5rZXlOb2RlLmxlbmd0aCxmbi5XYXJuaW5nKSx0W3IudmFsdWVdPSEwKTp0W3IudmFsdWVdPWUsNj09PWwuZ2V0VG9rZW4oKSllLmNvbG9uT2Zmc2V0PWwuZ2V0VG9rZW5PZmZzZXQoKSxjKCk7ZWxzZSBpZihzKGplKCJDb2xvbkV4cGVjdGVkIiwiQ29sb24gZXhwZWN0ZWQiKSxkaS5Db2xvbkV4cGVjdGVkKSwxMD09PWwuZ2V0VG9rZW4oKSYmby5wb3NpdGlvbkF0KHIub2Zmc2V0K3IubGVuZ3RoKS5saW5lPG8ucG9zaXRpb25BdChsLmdldFRva2VuT2Zmc2V0KCkpLmxpbmUpcmV0dXJuIGUubGVuZ3RoPXIubGVuZ3RoLGU7cmV0dXJuKG49ZihlKSk/KGUudmFsdWVOb2RlPW4sZS5sZW5ndGg9bi5vZmZzZXQrbi5sZW5ndGgtZS5vZmZzZXQsZSk6cyhqZSgiVmFsdWVFeHBlY3RlZCIsIlZhbHVlIGV4cGVjdGVkIiksZGkuVmFsdWVFeHBlY3RlZCxlLFtdLFsyLDVdKX0odCxyKTtpP3QucHJvcGVydGllcy5wdXNoKGkpOnMoamUoIlByb3BlcnR5RXhwZWN0ZWQiLCJQcm9wZXJ0eSBleHBlY3RlZCIpLGRpLlByb3BlcnR5RXhwZWN0ZWQsdm9pZCAwLFtdLFsyLDVdKSxuPSEwfXJldHVybiAyIT09bC5nZXRUb2tlbigpP3MoamUoIkV4cGVjdGVkQ2xvc2VCcmFjZSIsIkV4cGVjdGVkIGNvbW1hIG9yIGNsb3NpbmcgYnJhY2UiKSxkaS5Db21tYU9yQ2xvc2VCcmFjZUV4cGVjdGVkLHQpOmgodCwhMCl9fWZ1bmN0aW9uIHAoZSl7aWYoMTA9PT1sLmdldFRva2VuKCkpcmV0dXJuIGU9bmV3IFJpKGUsbC5nZXRUb2tlbk9mZnNldCgpKSxlLnZhbHVlPWwuZ2V0VG9rZW5WYWx1ZSgpLGgoZSwhMCl9ZnVuY3Rpb24gZihlKXtyZXR1cm4gZnVuY3Rpb24oZSl7aWYoMz09PWwuZ2V0VG9rZW4oKSl7Zm9yKHZhciB0PW5ldyBNaShlLGwuZ2V0VG9rZW5PZmZzZXQoKSkscj0oYygpLCExKTs0IT09bC5nZXRUb2tlbigpJiYxNyE9PWwuZ2V0VG9rZW4oKTspe2lmKDU9PT1sLmdldFRva2VuKCkpe3J8fHMoamUoIlZhbHVlRXhwZWN0ZWQiLCJWYWx1ZSBleHBlY3RlZCIpLGRpLlZhbHVlRXhwZWN0ZWQpO3ZhciBuPWwuZ2V0VG9rZW5PZmZzZXQoKTtpZihjKCksND09PWwuZ2V0VG9rZW4oKSl7ciYmdShqZSgiVHJhaWxpbmdDb21tYSIsIlRyYWlsaW5nIGNvbW1hIiksZGkuVHJhaWxpbmdDb21tYSxuLG4rMSk7Y29udGludWV9fWVsc2UgciYmcyhqZSgiRXhwZWN0ZWRDb21tYSIsIkV4cGVjdGVkIGNvbW1hIiksZGkuQ29tbWFFeHBlY3RlZCk7bj1mKHQpO24/dC5pdGVtcy5wdXNoKG4pOnMoamUoIlByb3BlcnR5RXhwZWN0ZWQiLCJWYWx1ZSBleHBlY3RlZCIpLGRpLlZhbHVlRXhwZWN0ZWQsdm9pZCAwLFtdLFs0LDVdKSxyPSEwfXJldHVybiA0IT09bC5nZXRUb2tlbigpP3MoamUoIkV4cGVjdGVkQ2xvc2VCcmFja2V0IiwiRXhwZWN0ZWQgY29tbWEgb3IgY2xvc2luZyBicmFja2V0IiksZGkuQ29tbWFPckNsb3NlQmFja2V0RXhwZWN0ZWQsdCk6aCh0LCEwKX19KGUpfHxyKGUpfHxwKGUpfHxmdW5jdGlvbih0KXtpZigxMT09PWwuZ2V0VG9rZW4oKSl7dD1uZXcgVGkodCxsLmdldFRva2VuT2Zmc2V0KCkpO2lmKDA9PT1sLmdldFRva2VuRXJyb3IoKSl7dmFyIGU9bC5nZXRUb2tlblZhbHVlKCk7dHJ5e3ZhciByPUpTT04ucGFyc2UoZSk7aWYoIU1uKHIpKXJldHVybiBzKGplKCJJbnZhbGlkTnVtYmVyRm9ybWF0IiwiSW52YWxpZCBudW1iZXIgZm9ybWF0LiIpLGRpLlVuZGVmaW5lZCx0KTt0LnZhbHVlPXJ9Y2F0Y2goZSl7cmV0dXJuIHMoamUoIkludmFsaWROdW1iZXJGb3JtYXQiLCJJbnZhbGlkIG51bWJlciBmb3JtYXQuIiksZGkuVW5kZWZpbmVkLHQpfXQuaXNJbnRlZ2VyPS0xPT09ZS5pbmRleE9mKCIuIil9cmV0dXJuIGgodCwhMCl9fShlKXx8ZnVuY3Rpb24oZSl7c3dpdGNoKGwuZ2V0VG9rZW4oKSl7Y2FzZSA3OnJldHVybiBoKG5ldyBBaShlLGwuZ2V0VG9rZW5PZmZzZXQoKSksITApO2Nhc2UgODpyZXR1cm4gaChuZXcga2koZSwhMCxsLmdldFRva2VuT2Zmc2V0KCkpLCEwKTtjYXNlIDk6cmV0dXJuIGgobmV3IGtpKGUsITEsbC5nZXRUb2tlbk9mZnNldCgpKSwhMCk7ZGVmYXVsdDpyZXR1cm59fShlKX1lPXZvaWQgMDtyZXR1cm4gMTchPT1jKCkmJigoZT1mKGUpKT8xNyE9PWwuZ2V0VG9rZW4oKSYmcyhqZSgiRW5kIG9mIGZpbGUgZXhwZWN0ZWQiLCJFbmQgb2YgZmlsZSBleHBlY3RlZC4iKSxkaS5VbmRlZmluZWQpOnMoamUoIkludmFsaWQgc3ltYm9sIiwiRXhwZWN0ZWQgYSBKU09OIG9iamVjdCwgYXJyYXkgb3IgbGl0ZXJhbC4iKSxkaS5VbmRlZmluZWQpKSxuZXcgZW8oZSxhLHQpfXZhciBpbz12aSxvbz0oby5wcm90b3R5cGUuZG9SZXNvbHZlPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD10aGlzLmNvbnRyaWJ1dGlvbnMubGVuZ3RoLTE7MDw9dDt0LS0pe3ZhciByPXRoaXMuY29udHJpYnV0aW9uc1t0XS5yZXNvbHZlQ29tcGxldGlvbjtpZihyKXtyPXIoZSk7aWYocilyZXR1cm4gcn19cmV0dXJuIHRoaXMucHJvbWlzZUNvbnN0cnVjdG9yLnJlc29sdmUoZSl9LG8ucHJvdG90eXBlLmRvQ29tcGxldGU9ZnVuY3Rpb24oYyx0LHUpe3ZhciBoPXRoaXMsZj17aXRlbXM6W10saXNJbmNvbXBsZXRlOiExfSxkPWMuZ2V0VGV4dCgpLG09Yy5vZmZzZXRBdCh0KSxnPXUuZ2V0Tm9kZUZyb21PZmZzZXQobSwhMCk7aWYodGhpcy5pc0luQ29tbWVudChjLGc/Zy5vZmZzZXQ6MCxtKSlyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGYpO2cmJm09PT1nLm9mZnNldCtnLmxlbmd0aCYmMDxtJiYoZT1kW20tMV0sKCJvYmplY3QiPT09Zy50eXBlJiYifSI9PT1lfHwiYXJyYXkiPT09Zy50eXBlJiYiXSI9PT1lKSYmKGc9Zy5wYXJlbnQpKTt2YXIgZSxwPXRoaXMuZ2V0Q3VycmVudFdvcmQoYyxtKSx2PSFnfHwic3RyaW5nIiE9PWcudHlwZSYmIm51bWJlciIhPT1nLnR5cGUmJiJib29sZWFuIiE9PWcudHlwZSYmIm51bGwiIT09Zy50eXBlPygwPChlPW0tcC5sZW5ndGgpJiYnIic9PT1kW2UtMV0mJmUtLSxsbi5jcmVhdGUoYy5wb3NpdGlvbkF0KGUpLHQpKTpsbi5jcmVhdGUoYy5wb3NpdGlvbkF0KGcub2Zmc2V0KSxjLnBvc2l0aW9uQXQoZy5vZmZzZXQrZy5sZW5ndGgpKSx5PXt9LGI9e2FkZDpmdW5jdGlvbihlKXt2YXIgdD1lLmxhYmVsLHI9eVt0XTtyPyhyLmRvY3VtZW50YXRpb258fChyLmRvY3VtZW50YXRpb249ZS5kb2N1bWVudGF0aW9uKSxyLmRldGFpbHx8KHIuZGV0YWlsPWUuZGV0YWlsKSk6KDYwPCh0PXQucmVwbGFjZSgvW1xuXS9nLCLihrUiKSkubGVuZ3RoJiYocj10LnN1YnN0cigwLDU3KS50cmltKCkrIi4uLiIseVtyXXx8KHQ9cikpLHYmJnZvaWQgMCE9PWUuaW5zZXJ0VGV4dCYmKGUudGV4dEVkaXQ9bW4ucmVwbGFjZSh2LGUuaW5zZXJ0VGV4dCkpLGUubGFiZWw9dCx5W3RdPWUsZi5pdGVtcy5wdXNoKGUpKX0sc2V0QXNJbmNvbXBsZXRlOmZ1bmN0aW9uKCl7Zi5pc0luY29tcGxldGU9ITB9LGVycm9yOmZ1bmN0aW9uKGUpe2NvbnNvbGUuZXJyb3IoZSl9LGxvZzpmdW5jdGlvbihlKXtjb25zb2xlLmxvZyhlKX0sZ2V0TnVtYmVyT2ZQcm9wb3NhbHM6ZnVuY3Rpb24oKXtyZXR1cm4gZi5pdGVtcy5sZW5ndGh9fTtyZXR1cm4gdGhpcy5zY2hlbWFTZXJ2aWNlLmdldFNjaGVtYUZvclJlc291cmNlKGMudXJpLHUpLnRoZW4oZnVuY3Rpb24oZSl7dmFyIHQscj1bXSxuPSEwLGk9IiIsbz12b2lkIDA7aWYoZyYmKCJzdHJpbmciIT09Zy50eXBlfHwodD1nLnBhcmVudCkmJiJwcm9wZXJ0eSI9PT10LnR5cGUmJnQua2V5Tm9kZT09PWcmJihuPSF0LnZhbHVlTm9kZSxvPXQsaT1kLnN1YnN0cihnLm9mZnNldCsxLGcubGVuZ3RoLTIpLHQmJihnPXQucGFyZW50KSkpLGcmJiJvYmplY3QiPT09Zy50eXBlKXtpZihnLm9mZnNldD09PW0pcmV0dXJuIGY7Zy5wcm9wZXJ0aWVzLmZvckVhY2goZnVuY3Rpb24oZSl7byYmbz09PWV8fCh5W2Uua2V5Tm9kZS52YWx1ZV09em4uY3JlYXRlKCJfXyIpKX0pO3ZhciBhPSIiLHM9KG4mJihhPWguZXZhbHVhdGVTZXBhcmF0b3JBZnRlcihjLGMub2Zmc2V0QXQodi5lbmQpKSksZT9oLmdldFByb3BlcnR5Q29tcGxldGlvbnMoZSx1LGcsbixhLGIpOmguZ2V0U2NoZW1hTGVzc1Byb3BlcnR5Q29tcGxldGlvbnModSxnLGksYiksUWkoZykpO2guY29udHJpYnV0aW9ucy5mb3JFYWNoKGZ1bmN0aW9uKGUpe2U9ZS5jb2xsZWN0UHJvcGVydHlDb21wbGV0aW9ucyhjLnVyaSxzLHAsbiwiIj09PWEsYik7ZSYmci5wdXNoKGUpfSksIWUmJjA8cC5sZW5ndGgmJiciJyE9PWQuY2hhckF0KG0tcC5sZW5ndGgtMSkmJihiLmFkZCh7a2luZDpxbi5Qcm9wZXJ0eSxsYWJlbDpoLmdldExhYmVsRm9yVmFsdWUocCksaW5zZXJ0VGV4dDpoLmdldEluc2VydFRleHRGb3JQcm9wZXJ0eShwLHZvaWQgMCwhMSxhKSxpbnNlcnRUZXh0Rm9ybWF0OlduLlNuaXBwZXQsZG9jdW1lbnRhdGlvbjoiIn0pLGIuc2V0QXNJbmNvbXBsZXRlKCkpfXZhciBsPXt9O3JldHVybiBlP2guZ2V0VmFsdWVDb21wbGV0aW9ucyhlLHUsZyxtLGMsYixsKTpoLmdldFNjaGVtYUxlc3NWYWx1ZUNvbXBsZXRpb25zKHUsZyxtLGMsYiksMDxoLmNvbnRyaWJ1dGlvbnMubGVuZ3RoJiZoLmdldENvbnRyaWJ1dGVkVmFsdWVDb21wbGV0aW9ucyh1LGcsbSxjLGIsciksaC5wcm9taXNlQ29uc3RydWN0b3IuYWxsKHIpLnRoZW4oZnVuY3Rpb24oKXt2YXIgZTtyZXR1cm4gMD09PWIuZ2V0TnVtYmVyT2ZQcm9wb3NhbHMoKSYmKGU9bSwhZ3x8InN0cmluZyIhPT1nLnR5cGUmJiJudW1iZXIiIT09Zy50eXBlJiYiYm9vbGVhbiIhPT1nLnR5cGUmJiJudWxsIiE9PWcudHlwZXx8KGU9Zy5vZmZzZXQrZy5sZW5ndGgpLGU9aC5ldmFsdWF0ZVNlcGFyYXRvckFmdGVyKGMsZSksaC5hZGRGaWxsZXJWYWx1ZUNvbXBsZXRpb25zKGwsZSxiKSksZn0pfSl9LG8ucHJvdG90eXBlLmdldFByb3BlcnR5Q29tcGxldGlvbnM9ZnVuY3Rpb24oZSx0LGEscyxsLGMpe3ZhciB1PXRoaXM7dC5nZXRNYXRjaGluZ1NjaGVtYXMoZS5zY2hlbWEsYS5vZmZzZXQpLmZvckVhY2goZnVuY3Rpb24oZSl7aWYoZS5ub2RlPT09YSYmIWUuaW52ZXJ0ZWQpe3ZhciByPWUuc2NoZW1hLnByb3BlcnRpZXMsbj0ociYmT2JqZWN0LmtleXMocikuZm9yRWFjaChmdW5jdGlvbihlKXt2YXIgdD1yW2VdOyJvYmplY3QiIT10eXBlb2YgdHx8dC5kZXByZWNhdGlvbk1lc3NhZ2V8fHQuZG9Ob3RTdWdnZXN0fHwoZT17a2luZDpxbi5Qcm9wZXJ0eSxsYWJlbDplLGluc2VydFRleHQ6dS5nZXRJbnNlcnRUZXh0Rm9yUHJvcGVydHkoZSx0LHMsbCksaW5zZXJ0VGV4dEZvcm1hdDpXbi5TbmlwcGV0LGZpbHRlclRleHQ6dS5nZXRGaWx0ZXJUZXh0Rm9yVmFsdWUoZSksZG9jdW1lbnRhdGlvbjp1LmZyb21NYXJrdXAodC5tYXJrZG93bkRlc2NyaXB0aW9uKXx8dC5kZXNjcmlwdGlvbnx8IiJ9LHZvaWQgMCE9PXQuc3VnZ2VzdFNvcnRUZXh0JiYoZS5zb3J0VGV4dD10LnN1Z2dlc3RTb3J0VGV4dCksZS5pbnNlcnRUZXh0JiZUbihlLmluc2VydFRleHQsIiQxIi5jb25jYXQobCkpJiYoZS5jb21tYW5kPXt0aXRsZToiU3VnZ2VzdCIsY29tbWFuZDoiZWRpdG9yLmFjdGlvbi50cmlnZ2VyU3VnZ2VzdCJ9KSxjLmFkZChlKSl9KSxlLnNjaGVtYS5wcm9wZXJ0eU5hbWVzKTtpZigib2JqZWN0Ij09dHlwZW9mIG4mJiFuLmRlcHJlY2F0aW9uTWVzc2FnZSYmIW4uZG9Ob3RTdWdnZXN0KXt2YXIgdD1mdW5jdGlvbihlLHQpe3ZvaWQgMD09PXQmJih0PXZvaWQgMCk7ZT17a2luZDpxbi5Qcm9wZXJ0eSxsYWJlbDplLGluc2VydFRleHQ6dS5nZXRJbnNlcnRUZXh0Rm9yUHJvcGVydHkoZSx2b2lkIDAscyxsKSxpbnNlcnRUZXh0Rm9ybWF0OlduLlNuaXBwZXQsZmlsdGVyVGV4dDp1LmdldEZpbHRlclRleHRGb3JWYWx1ZShlKSxkb2N1bWVudGF0aW9uOnR8fHUuZnJvbU1hcmt1cChuLm1hcmtkb3duRGVzY3JpcHRpb24pfHxuLmRlc2NyaXB0aW9ufHwiIn07dm9pZCAwIT09bi5zdWdnZXN0U29ydFRleHQmJihlLnNvcnRUZXh0PW4uc3VnZ2VzdFNvcnRUZXh0KSxlLmluc2VydFRleHQmJlRuKGUuaW5zZXJ0VGV4dCwiJDEiLmNvbmNhdChsKSkmJihlLmNvbW1hbmQ9e3RpdGxlOiJTdWdnZXN0Iixjb21tYW5kOiJlZGl0b3IuYWN0aW9uLnRyaWdnZXJTdWdnZXN0In0pLGMuYWRkKGUpfTtpZihuLmVudW0pZm9yKHZhciBpPTA7aTxuLmVudW0ubGVuZ3RoO2krKyl7dmFyIG89dm9pZCAwO24ubWFya2Rvd25FbnVtRGVzY3JpcHRpb25zJiZpPG4ubWFya2Rvd25FbnVtRGVzY3JpcHRpb25zLmxlbmd0aD9vPXUuZnJvbU1hcmt1cChuLm1hcmtkb3duRW51bURlc2NyaXB0aW9uc1tpXSk6bi5lbnVtRGVzY3JpcHRpb25zJiZpPG4uZW51bURlc2NyaXB0aW9ucy5sZW5ndGgmJihvPW4uZW51bURlc2NyaXB0aW9uc1tpXSksdChuLmVudW1baV0sbyl9bi5jb25zdCYmdChuLmNvbnN0KX19fSl9LG8ucHJvdG90eXBlLmdldFNjaGVtYUxlc3NQcm9wZXJ0eUNvbXBsZXRpb25zPWZ1bmN0aW9uKGUsdCxyLG4pe2Z1bmN0aW9uIGkoZSl7ZS5wcm9wZXJ0aWVzLmZvckVhY2goZnVuY3Rpb24oZSl7ZT1lLmtleU5vZGUudmFsdWU7bi5hZGQoe2tpbmQ6cW4uUHJvcGVydHksbGFiZWw6ZSxpbnNlcnRUZXh0OmEuZ2V0SW5zZXJ0VGV4dEZvclZhbHVlKGUsIiIpLGluc2VydFRleHRGb3JtYXQ6V24uU25pcHBldCxmaWx0ZXJUZXh0OmEuZ2V0RmlsdGVyVGV4dEZvclZhbHVlKGUpLGRvY3VtZW50YXRpb246IiJ9KX0pfXZhciBvLGE9dGhpczt0LnBhcmVudD8icHJvcGVydHkiPT09dC5wYXJlbnQudHlwZT8obz10LnBhcmVudC5rZXlOb2RlLnZhbHVlLGUudmlzaXQoZnVuY3Rpb24oZSl7cmV0dXJuInByb3BlcnR5Ij09PWUudHlwZSYmZSE9PXQucGFyZW50JiZlLmtleU5vZGUudmFsdWU9PT1vJiZlLnZhbHVlTm9kZSYmIm9iamVjdCI9PT1lLnZhbHVlTm9kZS50eXBlJiZpKGUudmFsdWVOb2RlKSwhMH0pKToiYXJyYXkiPT09dC5wYXJlbnQudHlwZSYmdC5wYXJlbnQuaXRlbXMuZm9yRWFjaChmdW5jdGlvbihlKXsib2JqZWN0Ij09PWUudHlwZSYmZSE9PXQmJmkoZSl9KToib2JqZWN0Ij09PXQudHlwZSYmbi5hZGQoe2tpbmQ6cW4uUHJvcGVydHksbGFiZWw6IiRzY2hlbWEiLGluc2VydFRleHQ6dGhpcy5nZXRJbnNlcnRUZXh0Rm9yUHJvcGVydHkoIiRzY2hlbWEiLHZvaWQgMCwhMCwiIiksaW5zZXJ0VGV4dEZvcm1hdDpXbi5TbmlwcGV0LGRvY3VtZW50YXRpb246IiIsZmlsdGVyVGV4dDp0aGlzLmdldEZpbHRlclRleHRGb3JWYWx1ZSgiJHNjaGVtYSIpfSl9LG8ucHJvdG90eXBlLmdldFNjaGVtYUxlc3NWYWx1ZUNvbXBsZXRpb25zPWZ1bmN0aW9uKGUsdCxyLG4saSl7dmFyIG89dGhpcyxhPXI7aWYoIXR8fCJzdHJpbmciIT09dC50eXBlJiYibnVtYmVyIiE9PXQudHlwZSYmImJvb2xlYW4iIT09dC50eXBlJiYibnVsbCIhPT10LnR5cGV8fChhPXQub2Zmc2V0K3QubGVuZ3RoLHQ9dC5wYXJlbnQpLCF0KXJldHVybiBpLmFkZCh7a2luZDp0aGlzLmdldFN1Z2dlc3Rpb25LaW5kKCJvYmplY3QiKSxsYWJlbDoiRW1wdHkgb2JqZWN0IixpbnNlcnRUZXh0OnRoaXMuZ2V0SW5zZXJ0VGV4dEZvclZhbHVlKHt9LCIiKSxpbnNlcnRUZXh0Rm9ybWF0OlduLlNuaXBwZXQsZG9jdW1lbnRhdGlvbjoiIn0pLHZvaWQgaS5hZGQoe2tpbmQ6dGhpcy5nZXRTdWdnZXN0aW9uS2luZCgiYXJyYXkiKSxsYWJlbDoiRW1wdHkgYXJyYXkiLGluc2VydFRleHQ6dGhpcy5nZXRJbnNlcnRUZXh0Rm9yVmFsdWUoW10sIiIpLGluc2VydFRleHRGb3JtYXQ6V24uU25pcHBldCxkb2N1bWVudGF0aW9uOiIifSk7ZnVuY3Rpb24gcyhlKXtlLnBhcmVudCYmIVlpKGUucGFyZW50LHIsITApJiZpLmFkZCh7a2luZDpvLmdldFN1Z2dlc3Rpb25LaW5kKGUudHlwZSksbGFiZWw6by5nZXRMYWJlbFRleHRGb3JNYXRjaGluZ05vZGUoZSxuKSxpbnNlcnRUZXh0Om8uZ2V0SW5zZXJ0VGV4dEZvck1hdGNoaW5nTm9kZShlLG4sYyksaW5zZXJ0VGV4dEZvcm1hdDpXbi5TbmlwcGV0LGRvY3VtZW50YXRpb246IiJ9KSwiYm9vbGVhbiI9PT1lLnR5cGUmJm8uYWRkQm9vbGVhblZhbHVlQ29tcGxldGlvbighZS52YWx1ZSxjLGkpfXZhciBsLGM9dGhpcy5ldmFsdWF0ZVNlcGFyYXRvckFmdGVyKG4sYSk7aWYoInByb3BlcnR5Ij09PXQudHlwZSYmcj4odC5jb2xvbk9mZnNldHx8MCkpe2E9dC52YWx1ZU5vZGU7aWYoYSYmKHI+YS5vZmZzZXQrYS5sZW5ndGh8fCJvYmplY3QiPT09YS50eXBlfHwiYXJyYXkiPT09YS50eXBlKSlyZXR1cm47dmFyIHU9dC5rZXlOb2RlLnZhbHVlO2UudmlzaXQoZnVuY3Rpb24oZSl7cmV0dXJuInByb3BlcnR5Ij09PWUudHlwZSYmZS5rZXlOb2RlLnZhbHVlPT09dSYmZS52YWx1ZU5vZGUmJnMoZS52YWx1ZU5vZGUpLCEwfSksIiRzY2hlbWEiPT09dSYmdC5wYXJlbnQmJiF0LnBhcmVudC5wYXJlbnQmJnRoaXMuYWRkRG9sbGFyU2NoZW1hQ29tcGxldGlvbnMoYyxpKX0iYXJyYXkiPT09dC50eXBlJiYodC5wYXJlbnQmJiJwcm9wZXJ0eSI9PT10LnBhcmVudC50eXBlPyhsPXQucGFyZW50LmtleU5vZGUudmFsdWUsZS52aXNpdChmdW5jdGlvbihlKXtyZXR1cm4icHJvcGVydHkiPT09ZS50eXBlJiZlLmtleU5vZGUudmFsdWU9PT1sJiZlLnZhbHVlTm9kZSYmImFycmF5Ij09PWUudmFsdWVOb2RlLnR5cGUmJmUudmFsdWVOb2RlLml0ZW1zLmZvckVhY2gocyksITB9KSk6dC5pdGVtcy5mb3JFYWNoKHMpKX0sby5wcm90b3R5cGUuZ2V0VmFsdWVDb21wbGV0aW9ucz1mdW5jdGlvbih1LGgsZSx0LGYscixuKXt2YXIgZD10LGk9dm9pZCAwLG09dm9pZCAwO2lmKCFlfHwic3RyaW5nIiE9PWUudHlwZSYmIm51bWJlciIhPT1lLnR5cGUmJiJib29sZWFuIiE9PWUudHlwZSYmIm51bGwiIT09ZS50eXBlfHwoZD1lLm9mZnNldCtlLmxlbmd0aCxlPShtPWUpLnBhcmVudCksZSl7aWYoInByb3BlcnR5Ij09PWUudHlwZSYmdD4oZS5jb2xvbk9mZnNldHx8MCkpe3ZhciBvPWUudmFsdWVOb2RlO2lmKG8mJnQ+by5vZmZzZXQrby5sZW5ndGgpcmV0dXJuO2k9ZS5rZXlOb2RlLnZhbHVlLGU9ZS5wYXJlbnR9aWYoZSYmKHZvaWQgMCE9PWl8fCJhcnJheSI9PT1lLnR5cGUpKXtmb3IodmFyIGE9dGhpcy5ldmFsdWF0ZVNlcGFyYXRvckFmdGVyKGYsZCksZz0wLHA9aC5nZXRNYXRjaGluZ1NjaGVtYXModS5zY2hlbWEsZS5vZmZzZXQsbSk7ZzxwLmxlbmd0aDtnKyspe3ZhciBiLHM9cFtnXTtpZihzLm5vZGU9PT1lJiYhcy5pbnZlcnRlZCYmcy5zY2hlbWEpaWYoImFycmF5Ij09PWUudHlwZSYmcy5zY2hlbWEuaXRlbXMmJihBcnJheS5pc0FycmF5KHMuc2NoZW1hLml0ZW1zKT8oYj10aGlzLmZpbmRJdGVtQXRPZmZzZXQoZSxmLHQpKTxzLnNjaGVtYS5pdGVtcy5sZW5ndGgmJnRoaXMuYWRkU2NoZW1hVmFsdWVDb21wbGV0aW9ucyhzLnNjaGVtYS5pdGVtc1tiXSxhLHIsbik6dGhpcy5hZGRTY2hlbWFWYWx1ZUNvbXBsZXRpb25zKHMuc2NoZW1hLml0ZW1zLGEscixuKSksdm9pZCAwIT09aSl7dmFyIGw9ITE7aWYocy5zY2hlbWEucHJvcGVydGllcyYmKGM9cy5zY2hlbWEucHJvcGVydGllc1tpXSkmJihsPSEwLHRoaXMuYWRkU2NoZW1hVmFsdWVDb21wbGV0aW9ucyhjLGEscixuKSkscy5zY2hlbWEucGF0dGVyblByb3BlcnRpZXMmJiFsKWZvcih2YXIgdj0wLHk9T2JqZWN0LmtleXMocy5zY2hlbWEucGF0dGVyblByb3BlcnRpZXMpO3Y8eS5sZW5ndGg7disrKXt2YXIgYyxDPXlbdl0sdz1JbihDKTtudWxsIT13JiZ3LnRlc3QoaSkmJihsPSEwLGM9cy5zY2hlbWEucGF0dGVyblByb3BlcnRpZXNbQ10sdGhpcy5hZGRTY2hlbWFWYWx1ZUNvbXBsZXRpb25zKGMsYSxyLG4pKX1zLnNjaGVtYS5hZGRpdGlvbmFsUHJvcGVydGllcyYmIWwmJihjPXMuc2NoZW1hLmFkZGl0aW9uYWxQcm9wZXJ0aWVzLHRoaXMuYWRkU2NoZW1hVmFsdWVDb21wbGV0aW9ucyhjLGEscixuKSl9fSIkc2NoZW1hIiE9PWl8fGUucGFyZW50fHx0aGlzLmFkZERvbGxhclNjaGVtYUNvbXBsZXRpb25zKGEsciksbi5ib29sZWFuJiYodGhpcy5hZGRCb29sZWFuVmFsdWVDb21wbGV0aW9uKCEwLGEsciksdGhpcy5hZGRCb29sZWFuVmFsdWVDb21wbGV0aW9uKCExLGEscikpLG4ubnVsbCYmdGhpcy5hZGROdWxsVmFsdWVDb21wbGV0aW9uKGEscil9fWVsc2UgdGhpcy5hZGRTY2hlbWFWYWx1ZUNvbXBsZXRpb25zKHUuc2NoZW1hLCIiLHIsbil9LG8ucHJvdG90eXBlLmdldENvbnRyaWJ1dGVkVmFsdWVDb21wbGV0aW9ucz1mdW5jdGlvbihlLHQscixuLGksbyl7dmFyIGEscyxsO3Q/KHQ9InN0cmluZyIhPT10LnR5cGUmJiJudW1iZXIiIT09dC50eXBlJiYiYm9vbGVhbiIhPT10LnR5cGUmJiJudWxsIiE9PXQudHlwZT90OnQucGFyZW50KSYmInByb3BlcnR5Ij09PXQudHlwZSYmcj4odC5jb2xvbk9mZnNldHx8MCkmJihhPXQua2V5Tm9kZS52YWx1ZSwoIShzPXQudmFsdWVOb2RlKXx8cjw9cy5vZmZzZXQrcy5sZW5ndGgpJiZ0LnBhcmVudCYmKGw9UWkodC5wYXJlbnQpLHRoaXMuY29udHJpYnV0aW9ucy5mb3JFYWNoKGZ1bmN0aW9uKGUpe2U9ZS5jb2xsZWN0VmFsdWVDb21wbGV0aW9ucyhuLnVyaSxsLGEsaSk7ZSYmby5wdXNoKGUpfSkpKTp0aGlzLmNvbnRyaWJ1dGlvbnMuZm9yRWFjaChmdW5jdGlvbihlKXtlPWUuY29sbGVjdERlZmF1bHRDb21wbGV0aW9ucyhuLnVyaSxpKTtlJiZvLnB1c2goZSl9KX0sby5wcm90b3R5cGUuYWRkU2NoZW1hVmFsdWVDb21wbGV0aW9ucz1mdW5jdGlvbihlLHQscixuKXt2YXIgaT10aGlzOyJvYmplY3QiPT10eXBlb2YgZSYmKHRoaXMuYWRkRW51bVZhbHVlQ29tcGxldGlvbnMoZSx0LHIpLHRoaXMuYWRkRGVmYXVsdFZhbHVlQ29tcGxldGlvbnMoZSx0LHIpLHRoaXMuY29sbGVjdFR5cGVzKGUsbiksQXJyYXkuaXNBcnJheShlLmFsbE9mKSYmZS5hbGxPZi5mb3JFYWNoKGZ1bmN0aW9uKGUpe3JldHVybiBpLmFkZFNjaGVtYVZhbHVlQ29tcGxldGlvbnMoZSx0LHIsbil9KSxBcnJheS5pc0FycmF5KGUuYW55T2YpJiZlLmFueU9mLmZvckVhY2goZnVuY3Rpb24oZSl7cmV0dXJuIGkuYWRkU2NoZW1hVmFsdWVDb21wbGV0aW9ucyhlLHQscixuKX0pLEFycmF5LmlzQXJyYXkoZS5vbmVPZikmJmUub25lT2YuZm9yRWFjaChmdW5jdGlvbihlKXtyZXR1cm4gaS5hZGRTY2hlbWFWYWx1ZUNvbXBsZXRpb25zKGUsdCxyLG4pfSkpfSxvLnByb3RvdHlwZS5hZGREZWZhdWx0VmFsdWVDb21wbGV0aW9ucz1mdW5jdGlvbih1LGgsZixkKXt2YXIgbT10aGlzLGc9KHZvaWQgMD09PWQmJihkPTApLCExKTtpZihPbih1LmRlZmF1bHQpKXtmb3IodmFyIGU9dS50eXBlLHQ9dS5kZWZhdWx0LHI9ZDswPHI7ci0tKXQ9W3RdLGU9ImFycmF5IjtmLmFkZCh7a2luZDp0aGlzLmdldFN1Z2dlc3Rpb25LaW5kKGUpLGxhYmVsOnRoaXMuZ2V0TGFiZWxGb3JWYWx1ZSh0KSxpbnNlcnRUZXh0OnRoaXMuZ2V0SW5zZXJ0VGV4dEZvclZhbHVlKHQsaCksaW5zZXJ0VGV4dEZvcm1hdDpXbi5TbmlwcGV0LGRldGFpbDppbygianNvbi5zdWdnZXN0LmRlZmF1bHQiLCJEZWZhdWx0IHZhbHVlIil9KSxnPSEwfUFycmF5LmlzQXJyYXkodS5leGFtcGxlcykmJnUuZXhhbXBsZXMuZm9yRWFjaChmdW5jdGlvbihlKXtmb3IodmFyIHQ9dS50eXBlLHI9ZSxuPWQ7MDxuO24tLSlyPVtyXSx0PSJhcnJheSI7Zi5hZGQoe2tpbmQ6bS5nZXRTdWdnZXN0aW9uS2luZCh0KSxsYWJlbDptLmdldExhYmVsRm9yVmFsdWUociksaW5zZXJ0VGV4dDptLmdldEluc2VydFRleHRGb3JWYWx1ZShyLGgpLGluc2VydFRleHRGb3JtYXQ6V24uU25pcHBldH0pLGc9ITB9KSxBcnJheS5pc0FycmF5KHUuZGVmYXVsdFNuaXBwZXRzKSYmdS5kZWZhdWx0U25pcHBldHMuZm9yRWFjaChmdW5jdGlvbihlKXt2YXIgdCxyLG49dS50eXBlLGk9ZS5ib2R5LG89ZS5sYWJlbDtpZihPbihpKSl7dS50eXBlO2Zvcih2YXIgYT1kOzA8YTthLS0paT1baV07dD1tLmdldEluc2VydFRleHRGb3JTbmlwcGV0VmFsdWUoaSxoKSxyPW0uZ2V0RmlsdGVyVGV4dEZvclNuaXBwZXRWYWx1ZShpKSxvPW98fG0uZ2V0TGFiZWxGb3JTbmlwcGV0VmFsdWUoaSl9ZWxzZXtpZigic3RyaW5nIiE9dHlwZW9mIGUuYm9keVRleHQpcmV0dXJuO2Zvcih2YXIgcz0iIixsPSIiLGM9IiIsYT1kOzA8YTthLS0pcz1zK2MrIltcbiIsbD1sKyJcbiIrYysiXSIsYys9Ilx0IixuPSJhcnJheSI7dD1zK2MrZS5ib2R5VGV4dC5zcGxpdCgiXG4iKS5qb2luKCJcbiIrYykrbCtoLG89b3x8dCxyPXQucmVwbGFjZSgvW1xuXS9nLCIiKX1mLmFkZCh7a2luZDptLmdldFN1Z2dlc3Rpb25LaW5kKG4pLGxhYmVsOm8sZG9jdW1lbnRhdGlvbjptLmZyb21NYXJrdXAoZS5tYXJrZG93bkRlc2NyaXB0aW9uKXx8ZS5kZXNjcmlwdGlvbixpbnNlcnRUZXh0OnQsaW5zZXJ0VGV4dEZvcm1hdDpXbi5TbmlwcGV0LGZpbHRlclRleHQ6cn0pLGc9ITB9KSwhZyYmIm9iamVjdCI9PXR5cGVvZiB1Lml0ZW1zJiYhQXJyYXkuaXNBcnJheSh1Lml0ZW1zKSYmZDw1JiZ0aGlzLmFkZERlZmF1bHRWYWx1ZUNvbXBsZXRpb25zKHUuaXRlbXMsaCxmLGQrMSl9LG8ucHJvdG90eXBlLmFkZEVudW1WYWx1ZUNvbXBsZXRpb25zPWZ1bmN0aW9uKGUsdCxyKXtpZihPbihlLmNvbnN0KSYmci5hZGQoe2tpbmQ6dGhpcy5nZXRTdWdnZXN0aW9uS2luZChlLnR5cGUpLGxhYmVsOnRoaXMuZ2V0TGFiZWxGb3JWYWx1ZShlLmNvbnN0KSxpbnNlcnRUZXh0OnRoaXMuZ2V0SW5zZXJ0VGV4dEZvclZhbHVlKGUuY29uc3QsdCksaW5zZXJ0VGV4dEZvcm1hdDpXbi5TbmlwcGV0LGRvY3VtZW50YXRpb246dGhpcy5mcm9tTWFya3VwKGUubWFya2Rvd25EZXNjcmlwdGlvbil8fGUuZGVzY3JpcHRpb259KSxBcnJheS5pc0FycmF5KGUuZW51bSkpZm9yKHZhciBuPTAsaT1lLmVudW0ubGVuZ3RoO248aTtuKyspe3ZhciBvPWUuZW51bVtuXSxhPXRoaXMuZnJvbU1hcmt1cChlLm1hcmtkb3duRGVzY3JpcHRpb24pfHxlLmRlc2NyaXB0aW9uO2UubWFya2Rvd25FbnVtRGVzY3JpcHRpb25zJiZuPGUubWFya2Rvd25FbnVtRGVzY3JpcHRpb25zLmxlbmd0aCYmdGhpcy5kb2VzU3VwcG9ydE1hcmtkb3duKCk/YT10aGlzLmZyb21NYXJrdXAoZS5tYXJrZG93bkVudW1EZXNjcmlwdGlvbnNbbl0pOmUuZW51bURlc2NyaXB0aW9ucyYmbjxlLmVudW1EZXNjcmlwdGlvbnMubGVuZ3RoJiYoYT1lLmVudW1EZXNjcmlwdGlvbnNbbl0pLHIuYWRkKHtraW5kOnRoaXMuZ2V0U3VnZ2VzdGlvbktpbmQoZS50eXBlKSxsYWJlbDp0aGlzLmdldExhYmVsRm9yVmFsdWUobyksaW5zZXJ0VGV4dDp0aGlzLmdldEluc2VydFRleHRGb3JWYWx1ZShvLHQpLGluc2VydFRleHRGb3JtYXQ6V24uU25pcHBldCxkb2N1bWVudGF0aW9uOmF9KX19LG8ucHJvdG90eXBlLmNvbGxlY3RUeXBlcz1mdW5jdGlvbihlLHQpe0FycmF5LmlzQXJyYXkoZS5lbnVtKXx8T24oZS5jb25zdCl8fChlPWUudHlwZSxBcnJheS5pc0FycmF5KGUpP2UuZm9yRWFjaChmdW5jdGlvbihlKXtyZXR1cm4gdFtlXT0hMH0pOmUmJih0W2VdPSEwKSl9LG8ucHJvdG90eXBlLmFkZEZpbGxlclZhbHVlQ29tcGxldGlvbnM9ZnVuY3Rpb24oZSx0LHIpe2Uub2JqZWN0JiZyLmFkZCh7a2luZDp0aGlzLmdldFN1Z2dlc3Rpb25LaW5kKCJvYmplY3QiKSxsYWJlbDoie30iLGluc2VydFRleHQ6dGhpcy5nZXRJbnNlcnRUZXh0Rm9yR3Vlc3NlZFZhbHVlKHt9LHQpLGluc2VydFRleHRGb3JtYXQ6V24uU25pcHBldCxkZXRhaWw6aW8oImRlZmF1bHRzLm9iamVjdCIsIk5ldyBvYmplY3QiKSxkb2N1bWVudGF0aW9uOiIifSksZS5hcnJheSYmci5hZGQoe2tpbmQ6dGhpcy5nZXRTdWdnZXN0aW9uS2luZCgiYXJyYXkiKSxsYWJlbDoiW10iLGluc2VydFRleHQ6dGhpcy5nZXRJbnNlcnRUZXh0Rm9yR3Vlc3NlZFZhbHVlKFtdLHQpLGluc2VydFRleHRGb3JtYXQ6V24uU25pcHBldCxkZXRhaWw6aW8oImRlZmF1bHRzLmFycmF5IiwiTmV3IGFycmF5IiksZG9jdW1lbnRhdGlvbjoiIn0pfSxvLnByb3RvdHlwZS5hZGRCb29sZWFuVmFsdWVDb21wbGV0aW9uPWZ1bmN0aW9uKGUsdCxyKXtyLmFkZCh7a2luZDp0aGlzLmdldFN1Z2dlc3Rpb25LaW5kKCJib29sZWFuIiksbGFiZWw6ZT8idHJ1ZSI6ImZhbHNlIixpbnNlcnRUZXh0OnRoaXMuZ2V0SW5zZXJ0VGV4dEZvclZhbHVlKGUsdCksaW5zZXJ0VGV4dEZvcm1hdDpXbi5TbmlwcGV0LGRvY3VtZW50YXRpb246IiJ9KX0sby5wcm90b3R5cGUuYWRkTnVsbFZhbHVlQ29tcGxldGlvbj1mdW5jdGlvbihlLHQpe3QuYWRkKHtraW5kOnRoaXMuZ2V0U3VnZ2VzdGlvbktpbmQoIm51bGwiKSxsYWJlbDoibnVsbCIsaW5zZXJ0VGV4dDoibnVsbCIrZSxpbnNlcnRUZXh0Rm9ybWF0OlduLlNuaXBwZXQsZG9jdW1lbnRhdGlvbjoiIn0pfSxvLnByb3RvdHlwZS5hZGREb2xsYXJTY2hlbWFDb21wbGV0aW9ucz1mdW5jdGlvbih0LHIpe3ZhciBuPXRoaXM7dGhpcy5zY2hlbWFTZXJ2aWNlLmdldFJlZ2lzdGVyZWRTY2hlbWFJZHMoZnVuY3Rpb24oZSl7cmV0dXJuImh0dHAiPT09ZXx8Imh0dHBzIj09PWV9KS5mb3JFYWNoKGZ1bmN0aW9uKGUpe3JldHVybiByLmFkZCh7a2luZDpxbi5Nb2R1bGUsbGFiZWw6bi5nZXRMYWJlbEZvclZhbHVlKGUpLGZpbHRlclRleHQ6bi5nZXRGaWx0ZXJUZXh0Rm9yVmFsdWUoZSksaW5zZXJ0VGV4dDpuLmdldEluc2VydFRleHRGb3JWYWx1ZShlLHQpLGluc2VydFRleHRGb3JtYXQ6V24uU25pcHBldCxkb2N1bWVudGF0aW9uOiIifSl9KX0sby5wcm90b3R5cGUuZ2V0TGFiZWxGb3JWYWx1ZT1mdW5jdGlvbihlKXtyZXR1cm4gSlNPTi5zdHJpbmdpZnkoZSl9LG8ucHJvdG90eXBlLmdldEZpbHRlclRleHRGb3JWYWx1ZT1mdW5jdGlvbihlKXtyZXR1cm4gSlNPTi5zdHJpbmdpZnkoZSl9LG8ucHJvdG90eXBlLmdldEZpbHRlclRleHRGb3JTbmlwcGV0VmFsdWU9ZnVuY3Rpb24oZSl7cmV0dXJuIEpTT04uc3RyaW5naWZ5KGUpLnJlcGxhY2UoL1wkXHtcZCs6KFtefV0rKVx9fFwkXGQrL2csIiQxIil9LG8ucHJvdG90eXBlLmdldExhYmVsRm9yU25pcHBldFZhbHVlPWZ1bmN0aW9uKGUpe3JldHVybiBKU09OLnN0cmluZ2lmeShlKS5yZXBsYWNlKC9cJFx7XGQrOihbXn1dKylcfXxcJFxkKy9nLCIkMSIpfSxvLnByb3RvdHlwZS5nZXRJbnNlcnRUZXh0Rm9yUGxhaW5UZXh0PWZ1bmN0aW9uKGUpe3JldHVybiBlLnJlcGxhY2UoL1tcXFwkXH1dL2csIlxcJCYiKX0sby5wcm90b3R5cGUuZ2V0SW5zZXJ0VGV4dEZvclZhbHVlPWZ1bmN0aW9uKGUsdCl7ZT1KU09OLnN0cmluZ2lmeShlLG51bGwsIlx0Iik7cmV0dXJuInt9Ij09PWU/InskMX0iK3Q6IltdIj09PWU/IlskMV0iK3Q6dGhpcy5nZXRJbnNlcnRUZXh0Rm9yUGxhaW5UZXh0KGUrdCl9LG8ucHJvdG90eXBlLmdldEluc2VydFRleHRGb3JTbmlwcGV0VmFsdWU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZnVuY3Rpb24gZSh0LHIsbil7aWYobnVsbD09PXR8fCJvYmplY3QiIT10eXBlb2YgdClyZXR1cm4gbih0KTt2YXIgaT1yKyJcdCI7aWYoQXJyYXkuaXNBcnJheSh0KSl7aWYoMD09PXQubGVuZ3RoKXJldHVybiJbXSI7Zm9yKHZhciBvPSJbXG4iLGE9MDthPHQubGVuZ3RoO2ErKylvKz1pK2UodFthXSxpLG4pLGE8dC5sZW5ndGgtMSYmKG8rPSIsIiksbys9IlxuIjtyZXR1cm4gbys9cisiXSJ9dmFyIHM9T2JqZWN0LmtleXModCk7aWYoMD09PXMubGVuZ3RoKXJldHVybiJ7fSI7Zm9yKG89IntcbiIsYT0wO2E8cy5sZW5ndGg7YSsrKXt2YXIgbD1zW2FdO28rPWkrSlNPTi5zdHJpbmdpZnkobCkrIjogIitlKHRbbF0saSxuKSxhPHMubGVuZ3RoLTEmJihvKz0iLCIpLG8rPSJcbiJ9cmV0dXJuIG8rPXIrIn0ifShlLCIiLGZ1bmN0aW9uKGUpe3JldHVybiJzdHJpbmciPT10eXBlb2YgZSYmIl4iPT09ZVswXT9lLnN1YnN0cigxKTpKU09OLnN0cmluZ2lmeShlKX0pK3R9LG8ucHJvdG90eXBlLmdldEluc2VydFRleHRGb3JHdWVzc2VkVmFsdWU9ZnVuY3Rpb24oZSx0KXtzd2l0Y2godHlwZW9mIGUpe2Nhc2Uib2JqZWN0IjpyZXR1cm4gbnVsbD09PWU/IiR7MTpudWxsfSIrdDp0aGlzLmdldEluc2VydFRleHRGb3JWYWx1ZShlLHQpO2Nhc2Uic3RyaW5nIjp2YXIgcj0ocj1KU09OLnN0cmluZ2lmeShlKSkuc3Vic3RyKDEsci5sZW5ndGgtMik7cmV0dXJuJyIkezE6Jysocj10aGlzLmdldEluc2VydFRleHRGb3JQbGFpblRleHQocikpKyd9IicrdDtjYXNlIm51bWJlciI6Y2FzZSJib29sZWFuIjpyZXR1cm4iJHsxOiIrSlNPTi5zdHJpbmdpZnkoZSkrIn0iK3R9cmV0dXJuIHRoaXMuZ2V0SW5zZXJ0VGV4dEZvclZhbHVlKGUsdCl9LG8ucHJvdG90eXBlLmdldFN1Z2dlc3Rpb25LaW5kPWZ1bmN0aW9uKGUpe3ZhciB0O2lmKCEoZT1BcnJheS5pc0FycmF5KGUpPzA8KHQ9ZSkubGVuZ3RoP3RbMF06dm9pZCAwOmUpKXJldHVybiBxbi5WYWx1ZTtzd2l0Y2goZSl7Y2FzZSJzdHJpbmciOnJldHVybiBxbi5WYWx1ZTtjYXNlIm9iamVjdCI6cmV0dXJuIHFuLk1vZHVsZTtjYXNlInByb3BlcnR5IjpyZXR1cm4gcW4uUHJvcGVydHk7ZGVmYXVsdDpyZXR1cm4gcW4uVmFsdWV9fSxvLnByb3RvdHlwZS5nZXRMYWJlbFRleHRGb3JNYXRjaGluZ05vZGU9ZnVuY3Rpb24oZSx0KXtzd2l0Y2goZS50eXBlKXtjYXNlImFycmF5IjpyZXR1cm4iW10iO2Nhc2Uib2JqZWN0IjpyZXR1cm4ie30iO2RlZmF1bHQ6cmV0dXJuIHQuZ2V0VGV4dCgpLnN1YnN0cihlLm9mZnNldCxlLmxlbmd0aCl9fSxvLnByb3RvdHlwZS5nZXRJbnNlcnRUZXh0Rm9yTWF0Y2hpbmdOb2RlPWZ1bmN0aW9uKGUsdCxyKXtzd2l0Y2goZS50eXBlKXtjYXNlImFycmF5IjpyZXR1cm4gdGhpcy5nZXRJbnNlcnRUZXh0Rm9yVmFsdWUoW10scik7Y2FzZSJvYmplY3QiOnJldHVybiB0aGlzLmdldEluc2VydFRleHRGb3JWYWx1ZSh7fSxyKTtkZWZhdWx0OnZhciBuPXQuZ2V0VGV4dCgpLnN1YnN0cihlLm9mZnNldCxlLmxlbmd0aCkrcjtyZXR1cm4gdGhpcy5nZXRJbnNlcnRUZXh0Rm9yUGxhaW5UZXh0KG4pfX0sby5wcm90b3R5cGUuZ2V0SW5zZXJ0VGV4dEZvclByb3BlcnR5PWZ1bmN0aW9uKGUsdCxyLG4pe3ZhciBpPXRoaXMuZ2V0SW5zZXJ0VGV4dEZvclZhbHVlKGUsIiIpO2lmKCFyKXJldHVybiBpO3ZhciBvLGU9aSsiOiAiLHI9MDtpZih0JiYoQXJyYXkuaXNBcnJheSh0LmRlZmF1bHRTbmlwcGV0cykmJigxIT09dC5kZWZhdWx0U25pcHBldHMubGVuZ3RofHxPbihhPXQuZGVmYXVsdFNuaXBwZXRzWzBdLmJvZHkpJiYobz10aGlzLmdldEluc2VydFRleHRGb3JTbmlwcGV0VmFsdWUoYSwiIikpLHIrPXQuZGVmYXVsdFNuaXBwZXRzLmxlbmd0aCksdC5lbnVtJiYob3x8MSE9PXQuZW51bS5sZW5ndGh8fChvPXRoaXMuZ2V0SW5zZXJ0VGV4dEZvckd1ZXNzZWRWYWx1ZSh0LmVudW1bMF0sIiIpKSxyKz10LmVudW0ubGVuZ3RoKSxPbih0LmRlZmF1bHQpJiYobz1vfHx0aGlzLmdldEluc2VydFRleHRGb3JHdWVzc2VkVmFsdWUodC5kZWZhdWx0LCIiKSxyKyspLEFycmF5LmlzQXJyYXkodC5leGFtcGxlcykmJnQuZXhhbXBsZXMubGVuZ3RoJiYobz1vfHx0aGlzLmdldEluc2VydFRleHRGb3JHdWVzc2VkVmFsdWUodC5leGFtcGxlc1swXSwiIikscis9dC5leGFtcGxlcy5sZW5ndGgpLDA9PT1yKSl7dmFyIGE9QXJyYXkuaXNBcnJheSh0LnR5cGUpP3QudHlwZVswXTp0LnR5cGU7c3dpdGNoKGF8fCh0LnByb3BlcnRpZXM/YT0ib2JqZWN0Ijp0Lml0ZW1zJiYoYT0iYXJyYXkiKSksYSl7Y2FzZSJib29sZWFuIjpvPSIkMSI7YnJlYWs7Y2FzZSJzdHJpbmciOm89JyIkMSInO2JyZWFrO2Nhc2Uib2JqZWN0IjpvPSJ7JDF9IjticmVhaztjYXNlImFycmF5IjpvPSJbJDFdIjticmVhaztjYXNlIm51bWJlciI6Y2FzZSJpbnRlZ2VyIjpvPSIkezE6MH0iO2JyZWFrO2Nhc2UibnVsbCI6bz0iJHsxOm51bGx9IjticmVhaztkZWZhdWx0OnJldHVybiBpfX1yZXR1cm4gZSsobz0hb3x8MTxyPyIkMSI6bykrbn0sby5wcm90b3R5cGUuZ2V0Q3VycmVudFdvcmQ9ZnVuY3Rpb24oZSx0KXtmb3IodmFyIHI9dC0xLG49ZS5nZXRUZXh0KCk7MDw9ciYmLTE9PT0nIFx0XG5cclx2Ijp7WyxdfScuaW5kZXhPZihuLmNoYXJBdChyKSk7KXItLTtyZXR1cm4gbi5zdWJzdHJpbmcocisxLHQpfSxvLnByb3RvdHlwZS5ldmFsdWF0ZVNlcGFyYXRvckFmdGVyPWZ1bmN0aW9uKGUsdCl7ZT1BbihlLmdldFRleHQoKSwhMCk7c3dpdGNoKGUuc2V0UG9zaXRpb24odCksZS5zY2FuKCkpe2Nhc2UgNTpjYXNlIDI6Y2FzZSA0OmNhc2UgMTc6cmV0dXJuIiI7ZGVmYXVsdDpyZXR1cm4iLCJ9fSxvLnByb3RvdHlwZS5maW5kSXRlbUF0T2Zmc2V0PWZ1bmN0aW9uKGUsdCxyKXtmb3IodmFyIG49QW4odC5nZXRUZXh0KCksITApLGk9ZS5pdGVtcyxvPWkubGVuZ3RoLTE7MDw9bztvLS0pe3ZhciBhPWlbb107aWYocj5hLm9mZnNldCthLmxlbmd0aClyZXR1cm4gbi5zZXRQb3NpdGlvbihhLm9mZnNldCthLmxlbmd0aCksNT09PW4uc2NhbigpJiZyPj1uLmdldFRva2VuT2Zmc2V0KCkrbi5nZXRUb2tlbkxlbmd0aCgpP28rMTpvO2lmKHI+PWEub2Zmc2V0KXJldHVybiBvfXJldHVybiAwfSxvLnByb3RvdHlwZS5pc0luQ29tbWVudD1mdW5jdGlvbihlLHQscil7Zm9yKHZhciBuPUFuKGUuZ2V0VGV4dCgpLCExKSxpPShuLnNldFBvc2l0aW9uKHQpLG4uc2NhbigpKTsxNyE9PWkmJm4uZ2V0VG9rZW5PZmZzZXQoKStuLmdldFRva2VuTGVuZ3RoKCk8cjspaT1uLnNjYW4oKTtyZXR1cm4oMTI9PT1pfHwxMz09PWkpJiZuLmdldFRva2VuT2Zmc2V0KCk8PXJ9LG8ucHJvdG90eXBlLmZyb21NYXJrdXA9ZnVuY3Rpb24oZSl7aWYoZSYmdGhpcy5kb2VzU3VwcG9ydE1hcmtkb3duKCkpcmV0dXJue2tpbmQ6S24uTWFya2Rvd24sdmFsdWU6ZX19LG8ucHJvdG90eXBlLmRvZXNTdXBwb3J0TWFya2Rvd249ZnVuY3Rpb24oKXt2YXIgZTtyZXR1cm4gT24odGhpcy5zdXBwb3J0c01hcmtkb3duKXx8KGU9dGhpcy5jbGllbnRDYXBhYmlsaXRpZXMudGV4dERvY3VtZW50JiZ0aGlzLmNsaWVudENhcGFiaWxpdGllcy50ZXh0RG9jdW1lbnQuY29tcGxldGlvbix0aGlzLnN1cHBvcnRzTWFya2Rvd249ZSYmZS5jb21wbGV0aW9uSXRlbSYmQXJyYXkuaXNBcnJheShlLmNvbXBsZXRpb25JdGVtLmRvY3VtZW50YXRpb25Gb3JtYXQpJiYtMSE9PWUuY29tcGxldGlvbkl0ZW0uZG9jdW1lbnRhdGlvbkZvcm1hdC5pbmRleE9mKEtuLk1hcmtkb3duKSksdGhpcy5zdXBwb3J0c01hcmtkb3dufSxvLnByb3RvdHlwZS5kb2VzU3VwcG9ydHNDb21taXRDaGFyYWN0ZXJzPWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuIE9uKHRoaXMuc3VwcG9ydHNDb21taXRDaGFyYWN0ZXJzKXx8KGU9dGhpcy5jbGllbnRDYXBhYmlsaXRpZXMudGV4dERvY3VtZW50JiZ0aGlzLmNsaWVudENhcGFiaWxpdGllcy50ZXh0RG9jdW1lbnQuY29tcGxldGlvbix0aGlzLnN1cHBvcnRzQ29tbWl0Q2hhcmFjdGVycz1lJiZlLmNvbXBsZXRpb25JdGVtJiYhIWUuY29tcGxldGlvbkl0ZW0uY29tbWl0Q2hhcmFjdGVyc1N1cHBvcnQpLHRoaXMuc3VwcG9ydHNDb21taXRDaGFyYWN0ZXJzfSxvKTtmdW5jdGlvbiBvKGUsdCxyLG4pe3ZvaWQgMD09PXQmJih0PVtdKSx2b2lkIDA9PT1yJiYocj1Qcm9taXNlKSx2b2lkIDA9PT1uJiYobj17fSksdGhpcy5zY2hlbWFTZXJ2aWNlPWUsdGhpcy5jb250cmlidXRpb25zPXQsdGhpcy5wcm9taXNlQ29uc3RydWN0b3I9cix0aGlzLmNsaWVudENhcGFiaWxpdGllcz1ufXNvLnByb3RvdHlwZS5kb0hvdmVyPWZ1bmN0aW9uKGUsdCxhKXt2YXIgdD1lLm9mZnNldEF0KHQpLHM9YS5nZXROb2RlRnJvbU9mZnNldCh0KTtpZighc3x8KCJvYmplY3QiPT09cy50eXBlfHwiYXJyYXkiPT09cy50eXBlKSYmdD5zLm9mZnNldCsxJiZ0PHMub2Zmc2V0K3MubGVuZ3RoLTEpcmV0dXJuIHRoaXMucHJvbWlzZS5yZXNvbHZlKG51bGwpO3Q9cztpZigic3RyaW5nIj09PXMudHlwZSl7dmFyIHI9cy5wYXJlbnQ7aWYociYmInByb3BlcnR5Ij09PXIudHlwZSYmci5rZXlOb2RlPT09cyYmIShzPXIudmFsdWVOb2RlKSlyZXR1cm4gdGhpcy5wcm9taXNlLnJlc29sdmUobnVsbCl9Zm9yKHZhciBuPWxuLmNyZWF0ZShlLnBvc2l0aW9uQXQodC5vZmZzZXQpLGUucG9zaXRpb25BdCh0Lm9mZnNldCt0Lmxlbmd0aCkpLGw9ZnVuY3Rpb24oZSl7cmV0dXJue2NvbnRlbnRzOmUscmFuZ2U6bn19LGk9UWkocyksbz10aGlzLmNvbnRyaWJ1dGlvbnMubGVuZ3RoLTE7MDw9bztvLS0pe3ZhciBjPXRoaXMuY29udHJpYnV0aW9uc1tvXS5nZXRJbmZvQ29udHJpYnV0aW9uKGUudXJpLGkpO2lmKGMpcmV0dXJuIGMudGhlbihsKX1yZXR1cm4gdGhpcy5zY2hlbWFTZXJ2aWNlLmdldFNjaGVtYUZvclJlc291cmNlKGUudXJpLGEpLnRoZW4oZnVuY3Rpb24oZSl7dmFyIHIsbixpLG8sdDtyZXR1cm4gZSYmcz8oZT1hLmdldE1hdGNoaW5nU2NoZW1hcyhlLnNjaGVtYSxzLm9mZnNldCksbz1pPW49cj12b2lkIDAsZS5ldmVyeShmdW5jdGlvbihlKXt2YXIgdDtyZXR1cm4gZS5ub2RlPT09cyYmIWUuaW52ZXJ0ZWQmJmUuc2NoZW1hJiYocj1yfHxlLnNjaGVtYS50aXRsZSxuPW58fGUuc2NoZW1hLm1hcmtkb3duRGVzY3JpcHRpb258fGxvKGUuc2NoZW1hLmRlc2NyaXB0aW9uKSxlLnNjaGVtYS5lbnVtJiYodD1lLnNjaGVtYS5lbnVtLmluZGV4T2YoWGkocykpLGUuc2NoZW1hLm1hcmtkb3duRW51bURlc2NyaXB0aW9ucz9pPWUuc2NoZW1hLm1hcmtkb3duRW51bURlc2NyaXB0aW9uc1t0XTplLnNjaGVtYS5lbnVtRGVzY3JpcHRpb25zJiYoaT1sbyhlLnNjaGVtYS5lbnVtRGVzY3JpcHRpb25zW3RdKSksaSYmInN0cmluZyIhPXR5cGVvZihvPWUuc2NoZW1hLmVudW1bdF0pJiYobz1KU09OLnN0cmluZ2lmeShvKSkpKSwhMH0pLGU9IiIsciYmKGU9bG8ocikpLG4mJigwPGUubGVuZ3RoJiYoZSs9IlxuXG4iKSxlKz1uKSxpJiYoMDxlLmxlbmd0aCYmKGUrPSJcblxuIiksZSs9ImAiLmNvbmNhdCgtMT09PSh0PW8pLmluZGV4T2YoImAiKT90OiJgYCAiK3QrIiBgYCIsImA6ICIpLmNvbmNhdChpKSksbChbZV0pKTpudWxsfSl9O3ZhciBhbz1zbztmdW5jdGlvbiBzbyhlLHQscil7dm9pZCAwPT09dCYmKHQ9W10pLHRoaXMuc2NoZW1hU2VydmljZT1lLHRoaXMuY29udHJpYnV0aW9ucz10LHRoaXMucHJvbWlzZT1yfHxQcm9taXNlfWZ1bmN0aW9uIGxvKGUpe2lmKGUpcmV0dXJuIGUucmVwbGFjZSgvKFteXG5ccl0pKFxyP1xuKShbXlxuXHJdKS9nbSwiJDFcblxuJDMiKS5yZXBsYWNlKC9bXFxgKl97fVtcXSgpIytcLS4hXS9nLCJcXCQmIil9dmFyIGNvPXZpLHVvPShoby5wcm90b3R5cGUuY29uZmlndXJlPWZ1bmN0aW9uKGUpe2UmJih0aGlzLnZhbGlkYXRpb25FbmFibGVkPSExIT09ZS52YWxpZGF0ZSx0aGlzLmNvbW1lbnRTZXZlcml0eT1lLmFsbG93Q29tbWVudHM/dm9pZCAwOmZuLkVycm9yKX0saG8ucHJvdG90eXBlLmRvVmFsaWRhdGlvbj1mdW5jdGlvbihoLGYsZCxlKXt2YXIgbT10aGlzO2lmKCF0aGlzLnZhbGlkYXRpb25FbmFibGVkKXJldHVybiB0aGlzLnByb21pc2UucmVzb2x2ZShbXSk7ZnVuY3Rpb24gdChlKXt2YXIgdCxyLG49bnVsbCE9ZCYmZC50cmFpbGluZ0NvbW1hcz9tbyhkLnRyYWlsaW5nQ29tbWFzKTpmbi5FcnJvcixpPW51bGwhPWQmJmQuY29tbWVudHM/bW8oZC5jb21tZW50cyk6bS5jb21tZW50U2V2ZXJpdHksbz1udWxsIT1kJiZkLnNjaGVtYVZhbGlkYXRpb24/bW8oZC5zY2hlbWFWYWxpZGF0aW9uKTpmbi5XYXJuaW5nLGE9bnVsbCE9ZCYmZC5zY2hlbWFSZXF1ZXN0P21vKGQuc2NoZW1hUmVxdWVzdCk6Zm4uV2FybmluZztlJiYoZS5lcnJvcnMubGVuZ3RoJiZmLnJvb3QmJmE/KHQ9KHQ9Im9iamVjdCI9PT0ocj1mLnJvb3QpLnR5cGU/ci5wcm9wZXJ0aWVzWzBdOnZvaWQgMCkmJiIkc2NoZW1hIj09PXQua2V5Tm9kZS52YWx1ZT8odD10LnZhbHVlTm9kZXx8dCxsbi5jcmVhdGUoaC5wb3NpdGlvbkF0KHQub2Zmc2V0KSxoLnBvc2l0aW9uQXQodC5vZmZzZXQrdC5sZW5ndGgpKSk6bG4uY3JlYXRlKGgucG9zaXRpb25BdChyLm9mZnNldCksaC5wb3NpdGlvbkF0KHIub2Zmc2V0KzEpKSxwKGRuLmNyZWF0ZSh0LGUuZXJyb3JzWzBdLGEsZGkuU2NoZW1hUmVzb2x2ZUVycm9yKSkpOiFvfHwocj1mLnZhbGlkYXRlKGgsZS5zY2hlbWEsbykpJiZyLmZvckVhY2gocCksZnVuY3Rpb24gZSh0KXtpZih0JiYib2JqZWN0Ij09dHlwZW9mIHQpe2lmKFBuKHQuYWxsb3dDb21tZW50cykpcmV0dXJuIHQuYWxsb3dDb21tZW50cztpZih0LmFsbE9mKWZvcih2YXIgcj0wLG49dC5hbGxPZjtyPG4ubGVuZ3RoO3IrKyl7dmFyIGk9bltyXSxpPWUoaSk7aWYoUG4oaSkpcmV0dXJuIGl9fXJldHVybn0oZS5zY2hlbWEpJiYoaT12b2lkIDApLGZ1bmN0aW9uIGUodCl7aWYodCYmIm9iamVjdCI9PXR5cGVvZiB0KXtpZihQbih0LmFsbG93VHJhaWxpbmdDb21tYXMpKXJldHVybiB0LmFsbG93VHJhaWxpbmdDb21tYXM7dmFyIHI9dDtpZihQbihyLmFsbG93c1RyYWlsaW5nQ29tbWFzKSlyZXR1cm4gci5hbGxvd3NUcmFpbGluZ0NvbW1hcztpZih0LmFsbE9mKWZvcih2YXIgbj0wLGk9dC5hbGxPZjtuPGkubGVuZ3RoO24rKyl7dmFyIG89aVtuXSxvPWUobyk7aWYoUG4obykpcmV0dXJuIG99fXJldHVybn0oZS5zY2hlbWEpJiYobj12b2lkIDApKTtmb3IodmFyIHMsbD0wLHU9Zi5zeW50YXhFcnJvcnM7bDx1Lmxlbmd0aDtsKyspe3ZhciBjPXVbbF07aWYoYy5jb2RlPT09ZGkuVHJhaWxpbmdDb21tYSl7aWYoIm51bWJlciIhPXR5cGVvZiBuKWNvbnRpbnVlO2Muc2V2ZXJpdHk9bn1wKGMpfXJldHVybiJudW1iZXIiPT10eXBlb2YgaSYmKHM9Y28oIkludmFsaWRDb21tZW50VG9rZW4iLCJDb21tZW50cyBhcmUgbm90IHBlcm1pdHRlZCBpbiBKU09OLiIpLGYuY29tbWVudHMuZm9yRWFjaChmdW5jdGlvbihlKXtwKGRuLmNyZWF0ZShlLHMsaSxkaS5Db21tZW50Tm90UGVybWl0dGVkKSl9KSksZ312YXIgcixnPVtdLG49e30scD1mdW5jdGlvbihlKXt2YXIgdD1lLnJhbmdlLnN0YXJ0LmxpbmUrIiAiK2UucmFuZ2Uuc3RhcnQuY2hhcmFjdGVyKyIgIitlLm1lc3NhZ2U7blt0XXx8KG5bdF09ITAsZy5wdXNoKGUpKX07cmV0dXJuIGU/KHI9ZS5pZHx8InNjaGVtYXNlcnZpY2U6Ly91bnRpdGxlZC8iK2ZvKyssdGhpcy5qc29uU2NoZW1hU2VydmljZS5yZWdpc3RlckV4dGVybmFsU2NoZW1hKHIsW10sZSkuZ2V0UmVzb2x2ZWRTY2hlbWEoKS50aGVuKHQpKTp0aGlzLmpzb25TY2hlbWFTZXJ2aWNlLmdldFNjaGVtYUZvclJlc291cmNlKGgudXJpLGYpLnRoZW4odCl9LGhvLnByb3RvdHlwZS5nZXRMYW5ndWFnZVN0YXR1cz1mdW5jdGlvbihlLHQpe3JldHVybntzY2hlbWFzOnRoaXMuanNvblNjaGVtYVNlcnZpY2UuZ2V0U2NoZW1hVVJJc0ZvclJlc291cmNlKGUudXJpLHQpfX0saG8pO2Z1bmN0aW9uIGhvKGUsdCl7dGhpcy5qc29uU2NoZW1hU2VydmljZT1lLHRoaXMucHJvbWlzZT10LHRoaXMudmFsaWRhdGlvbkVuYWJsZWQ9ITB9dmFyIGZvPTA7ZnVuY3Rpb24gbW8oZSl7c3dpdGNoKGUpe2Nhc2UiZXJyb3IiOnJldHVybiBmbi5FcnJvcjtjYXNlIndhcm5pbmciOnJldHVybiBmbi5XYXJuaW5nO2Nhc2UiaWdub3JlIjpyZXR1cm59fXZhciBnbz00OCxwbz01Nyxibz02NSx2bz05Nyx5bz0xMDI7ZnVuY3Rpb24gQ28oZSl7cmV0dXJuIGU8Z28/MDplPD1wbz9lLWdvOihlPHZvJiYoZSs9dm8tYm8pLHZvPD1lJiZlPD15bz9lLXZvKzEwOjApfV9vLnByb3RvdHlwZS5maW5kRG9jdW1lbnRTeW1ib2xzPWZ1bmN0aW9uKG8sZSx0KXt2YXIgdT10aGlzLGU9KHZvaWQgMD09PXQmJih0PXtyZXN1bHRMaW1pdDpOdW1iZXIuTUFYX1ZBTFVFfSksZS5yb290KTtpZighZSlyZXR1cm5bXTt2YXIgYT10LnJlc3VsdExpbWl0fHxOdW1iZXIuTUFYX1ZBTFVFLHI9by51cmk7aWYoKCJ2c2NvZGU6Ly9kZWZhdWx0c2V0dGluZ3Mva2V5YmluZGluZ3MuanNvbiI9PT1yfHxUbihyLnRvTG93ZXJDYXNlKCksIi91c2VyL2tleWJpbmRpbmdzLmpzb24iKSkmJiJhcnJheSI9PT1lLnR5cGUpe2Zvcih2YXIgbj1bXSxpPTAsaD1lLml0ZW1zO2k8aC5sZW5ndGg7aSsrKXt2YXIgcz1oW2ldO2lmKCJvYmplY3QiPT09cy50eXBlKWZvcih2YXIgbD0wLGY9cy5wcm9wZXJ0aWVzO2w8Zi5sZW5ndGg7bCsrKXt2YXIgZD1mW2xdO2lmKCJrZXkiPT09ZC5rZXlOb2RlLnZhbHVlJiZkLnZhbHVlTm9kZSl7dmFyIG09Y24uY3JlYXRlKG8udXJpLFNvKG8scykpO2lmKG4ucHVzaCh7bmFtZTpYaShkLnZhbHVlTm9kZSksa2luZDp0aS5GdW5jdGlvbixsb2NhdGlvbjptfSksLS1hPD0wKXJldHVybiB0JiZ0Lm9uUmVzdWx0TGltaXRFeGNlZWRlZCYmdC5vblJlc3VsdExpbWl0RXhjZWVkZWQociksbn19fXJldHVybiBufWZvcih2YXIgYz1be25vZGU6ZSxjb250YWluZXJOYW1lOiIifV0sZz0wLHA9ITEsYj1bXTtnPGMubGVuZ3RoOyl7dmFyIHY9Y1tnKytdOyFmdW5jdGlvbihlLGkpeyJhcnJheSI9PT1lLnR5cGU/ZS5pdGVtcy5mb3JFYWNoKGZ1bmN0aW9uKGUpe2UmJmMucHVzaCh7bm9kZTplLGNvbnRhaW5lck5hbWU6aX0pfSk6Im9iamVjdCI9PT1lLnR5cGUmJmUucHJvcGVydGllcy5mb3JFYWNoKGZ1bmN0aW9uKGUpe3ZhciB0LHIsbj1lLnZhbHVlTm9kZTtuJiYoMDxhPyhhLS0sdD1jbi5jcmVhdGUoby51cmksU28obyxlKSkscj1pP2krIi4iK2Uua2V5Tm9kZS52YWx1ZTplLmtleU5vZGUudmFsdWUsYi5wdXNoKHtuYW1lOnUuZ2V0S2V5TGFiZWwoZSksa2luZDp1LmdldFN5bWJvbEtpbmQobi50eXBlKSxsb2NhdGlvbjp0LGNvbnRhaW5lck5hbWU6aX0pLGMucHVzaCh7bm9kZTpuLGNvbnRhaW5lck5hbWU6cn0pKTpwPSEwKX0pfSh2Lm5vZGUsdi5jb250YWluZXJOYW1lKX1yZXR1cm4gcCYmdCYmdC5vblJlc3VsdExpbWl0RXhjZWVkZWQmJnQub25SZXN1bHRMaW1pdEV4Y2VlZGVkKHIpLGJ9LF9vLnByb3RvdHlwZS5maW5kRG9jdW1lbnRTeW1ib2xzMj1mdW5jdGlvbihhLGUsdCl7dmFyIHM9dGhpcyxlPSh2b2lkIDA9PT10JiYodD17cmVzdWx0TGltaXQ6TnVtYmVyLk1BWF9WQUxVRX0pLGUucm9vdCk7aWYoIWUpcmV0dXJuW107dmFyIGw9dC5yZXN1bHRMaW1pdHx8TnVtYmVyLk1BWF9WQUxVRSxyPWEudXJpO2lmKCgidnNjb2RlOi8vZGVmYXVsdHNldHRpbmdzL2tleWJpbmRpbmdzLmpzb24iPT09cnx8VG4oci50b0xvd2VyQ2FzZSgpLCIvdXNlci9rZXliaW5kaW5ncy5qc29uIikpJiYiYXJyYXkiPT09ZS50eXBlKXtmb3IodmFyIG49W10saT0wLHU9ZS5pdGVtcztpPHUubGVuZ3RoO2krKyl7dmFyIGg9dVtpXTtpZigib2JqZWN0Ij09PWgudHlwZSlmb3IodmFyIGY9MCxkPWgucHJvcGVydGllcztmPGQubGVuZ3RoO2YrKyl7dmFyIG89ZFtmXTtpZigia2V5Ij09PW8ua2V5Tm9kZS52YWx1ZSYmby52YWx1ZU5vZGUpe3ZhciBtPVNvKGEsaCksZz1TbyhhLG8ua2V5Tm9kZSk7aWYobi5wdXNoKHtuYW1lOlhpKG8udmFsdWVOb2RlKSxraW5kOnRpLkZ1bmN0aW9uLHJhbmdlOm0sc2VsZWN0aW9uUmFuZ2U6Z30pLC0tbDw9MClyZXR1cm4gdCYmdC5vblJlc3VsdExpbWl0RXhjZWVkZWQmJnQub25SZXN1bHRMaW1pdEV4Y2VlZGVkKHIpLG59fX1yZXR1cm4gbn1mb3IodmFyIHA9W10sYz1be25vZGU6ZSxyZXN1bHQ6cH1dLGI9MCx2PSExO2I8Yy5sZW5ndGg7KXt2YXIgeT1jW2IrK107IWZ1bmN0aW9uKGUsbyl7ImFycmF5Ij09PWUudHlwZT9lLml0ZW1zLmZvckVhY2goZnVuY3Rpb24oZSx0KXt2YXIgcixuO2UmJigwPGw/KGwtLSxuPXI9U28oYSxlKSx0PXtuYW1lOlN0cmluZyh0KSxraW5kOnMuZ2V0U3ltYm9sS2luZChlLnR5cGUpLHJhbmdlOnIsc2VsZWN0aW9uUmFuZ2U6bixjaGlsZHJlbjpbXX0sby5wdXNoKHQpLGMucHVzaCh7cmVzdWx0OnQuY2hpbGRyZW4sbm9kZTplfSkpOnY9ITApfSk6Im9iamVjdCI9PT1lLnR5cGUmJmUucHJvcGVydGllcy5mb3JFYWNoKGZ1bmN0aW9uKGUpe3ZhciB0LHIsbixpPWUudmFsdWVOb2RlO2kmJigwPGw/KGwtLSx0PVNvKGEsZSkscj1TbyhhLGUua2V5Tm9kZSksbj1bXSxlPXtuYW1lOnMuZ2V0S2V5TGFiZWwoZSksa2luZDpzLmdldFN5bWJvbEtpbmQoaS50eXBlKSxyYW5nZTp0LHNlbGVjdGlvblJhbmdlOnIsY2hpbGRyZW46bixkZXRhaWw6cy5nZXREZXRhaWwoaSl9LG8ucHVzaChlKSxjLnB1c2goe3Jlc3VsdDpuLG5vZGU6aX0pKTp2PSEwKX0pfSh5Lm5vZGUseS5yZXN1bHQpfXJldHVybiB2JiZ0JiZ0Lm9uUmVzdWx0TGltaXRFeGNlZWRlZCYmdC5vblJlc3VsdExpbWl0RXhjZWVkZWQocikscH0sX28ucHJvdG90eXBlLmdldFN5bWJvbEtpbmQ9ZnVuY3Rpb24oZSl7c3dpdGNoKGUpe2Nhc2Uib2JqZWN0IjpyZXR1cm4gdGkuTW9kdWxlO2Nhc2Uic3RyaW5nIjpyZXR1cm4gdGkuU3RyaW5nO2Nhc2UibnVtYmVyIjpyZXR1cm4gdGkuTnVtYmVyO2Nhc2UiYXJyYXkiOnJldHVybiB0aS5BcnJheTtjYXNlImJvb2xlYW4iOnJldHVybiB0aS5Cb29sZWFuO2RlZmF1bHQ6cmV0dXJuIHRpLlZhcmlhYmxlfX0sX28ucHJvdG90eXBlLmdldEtleUxhYmVsPWZ1bmN0aW9uKGUpe2U9ZS5rZXlOb2RlLnZhbHVlO3JldHVybihlPWUmJmUucmVwbGFjZSgvW1xuXS9nLCLihrUiKSkmJmUudHJpbSgpP2U6JyInLmNvbmNhdChlLCciJyl9LF9vLnByb3RvdHlwZS5nZXREZXRhaWw9ZnVuY3Rpb24oZSl7aWYoZSlyZXR1cm4iYm9vbGVhbiI9PT1lLnR5cGV8fCJudW1iZXIiPT09ZS50eXBlfHwibnVsbCI9PT1lLnR5cGV8fCJzdHJpbmciPT09ZS50eXBlP1N0cmluZyhlLnZhbHVlKToiYXJyYXkiPT09ZS50eXBlP2UuY2hpbGRyZW4ubGVuZ3RoP3ZvaWQgMDoiW10iOiJvYmplY3QiIT09ZS50eXBlfHxlLmNoaWxkcmVuLmxlbmd0aD92b2lkIDA6Int9In0sX28ucHJvdG90eXBlLmZpbmREb2N1bWVudENvbG9ycz1mdW5jdGlvbihjLHUsaCl7cmV0dXJuIHRoaXMuc2NoZW1hU2VydmljZS5nZXRTY2hlbWFGb3JSZXNvdXJjZShjLnVyaSx1KS50aGVuKGZ1bmN0aW9uKGUpe3ZhciB0PVtdO2lmKGUpZm9yKHZhciByPWgmJiJudW1iZXIiPT10eXBlb2YgaC5yZXN1bHRMaW1pdD9oLnJlc3VsdExpbWl0Ok51bWJlci5NQVhfVkFMVUUsbj17fSxpPTAsbz11LmdldE1hdGNoaW5nU2NoZW1hcyhlLnNjaGVtYSk7aTxvLmxlbmd0aDtpKyspe3ZhciBhPW9baV07aWYoIWEuaW52ZXJ0ZWQmJmEuc2NoZW1hJiYoImNvbG9yIj09PWEuc2NoZW1hLmZvcm1hdHx8ImNvbG9yLWhleCI9PT1hLnNjaGVtYS5mb3JtYXQpJiZhLm5vZGUmJiJzdHJpbmciPT09YS5ub2RlLnR5cGUpe3ZhciBzPVN0cmluZyhhLm5vZGUub2Zmc2V0KTtpZighbltzXSl7dmFyIGw9ZnVuY3Rpb24oZSl7aWYoIiMiPT09ZVswXSlzd2l0Y2goZS5sZW5ndGgpe2Nhc2UgNDpyZXR1cm57cmVkOjE3KkNvKGUuY2hhckNvZGVBdCgxKSkvMjU1LGdyZWVuOjE3KkNvKGUuY2hhckNvZGVBdCgyKSkvMjU1LGJsdWU6MTcqQ28oZS5jaGFyQ29kZUF0KDMpKS8yNTUsYWxwaGE6MX07Y2FzZSA1OnJldHVybntyZWQ6MTcqQ28oZS5jaGFyQ29kZUF0KDEpKS8yNTUsZ3JlZW46MTcqQ28oZS5jaGFyQ29kZUF0KDIpKS8yNTUsYmx1ZToxNypDbyhlLmNoYXJDb2RlQXQoMykpLzI1NSxhbHBoYToxNypDbyhlLmNoYXJDb2RlQXQoNCkpLzI1NX07Y2FzZSA3OnJldHVybntyZWQ6KDE2KkNvKGUuY2hhckNvZGVBdCgxKSkrQ28oZS5jaGFyQ29kZUF0KDIpKSkvMjU1LGdyZWVuOigxNipDbyhlLmNoYXJDb2RlQXQoMykpK0NvKGUuY2hhckNvZGVBdCg0KSkpLzI1NSxibHVlOigxNipDbyhlLmNoYXJDb2RlQXQoNSkpK0NvKGUuY2hhckNvZGVBdCg2KSkpLzI1NSxhbHBoYToxfTtjYXNlIDk6cmV0dXJue3JlZDooMTYqQ28oZS5jaGFyQ29kZUF0KDEpKStDbyhlLmNoYXJDb2RlQXQoMikpKS8yNTUsZ3JlZW46KDE2KkNvKGUuY2hhckNvZGVBdCgzKSkrQ28oZS5jaGFyQ29kZUF0KDQpKSkvMjU1LGJsdWU6KDE2KkNvKGUuY2hhckNvZGVBdCg1KSkrQ28oZS5jaGFyQ29kZUF0KDYpKSkvMjU1LGFscGhhOigxNipDbyhlLmNoYXJDb2RlQXQoNykpK0NvKGUuY2hhckNvZGVBdCg4KSkpLzI1NX19fShYaShhLm5vZGUpKTtpZihsJiYoYT1TbyhjLGEubm9kZSksdC5wdXNoKHtjb2xvcjpsLHJhbmdlOmF9KSksbltzXT0hMCwtLXI8PTApcmV0dXJuIGgmJmgub25SZXN1bHRMaW1pdEV4Y2VlZGVkJiZoLm9uUmVzdWx0TGltaXRFeGNlZWRlZChjLnVyaSksdH19fXJldHVybiB0fSl9LF9vLnByb3RvdHlwZS5nZXRDb2xvclByZXNlbnRhdGlvbnM9ZnVuY3Rpb24oZSx0LHIsbil7dmFyIGk9W10sbz1NYXRoLnJvdW5kKDI1NSpyLnJlZCksYT1NYXRoLnJvdW5kKDI1NSpyLmdyZWVuKSxzPU1hdGgucm91bmQoMjU1KnIuYmx1ZSk7ZnVuY3Rpb24gbChlKXtlPWUudG9TdHJpbmcoMTYpO3JldHVybiAyIT09ZS5sZW5ndGg/IjAiK2U6ZX1yZXR1cm4gbz0xPT09ci5hbHBoYT8iIyIuY29uY2F0KGwobykpLmNvbmNhdChsKGEpKS5jb25jYXQobChzKSk6IiMiLmNvbmNhdChsKG8pKS5jb25jYXQobChhKSkuY29uY2F0KGwocykpLmNvbmNhdChsKE1hdGgucm91bmQoMjU1KnIuYWxwaGEpKSksaS5wdXNoKHtsYWJlbDpvLHRleHRFZGl0Om1uLnJlcGxhY2UobixKU09OLnN0cmluZ2lmeShvKSl9KSxpfTt2YXIgd289X287ZnVuY3Rpb24gX28oZSl7dGhpcy5zY2hlbWFTZXJ2aWNlPWV9ZnVuY3Rpb24gU28oZSx0KXtyZXR1cm4gbG4uY3JlYXRlKGUucG9zaXRpb25BdCh0Lm9mZnNldCksZS5wb3NpdGlvbkF0KHQub2Zmc2V0K3QubGVuZ3RoKSl9dmFyIEFvLHhvLEVvLGtvLE5vLExvLE1vLHM9dmksT289e3NjaGVtYUFzc29jaWF0aW9uczpbXSxzY2hlbWFzOnsiaHR0cDovL2pzb24tc2NoZW1hLm9yZy9zY2hlbWEjIjp7JHJlZjoiaHR0cDovL2pzb24tc2NoZW1hLm9yZy9kcmFmdC0wNy9zY2hlbWEjIn0sImh0dHA6Ly9qc29uLXNjaGVtYS5vcmcvZHJhZnQtMDQvc2NoZW1hIyI6eyRzY2hlbWE6Imh0dHA6Ly9qc29uLXNjaGVtYS5vcmcvZHJhZnQtMDQvc2NoZW1hIyIsZGVmaW5pdGlvbnM6e3NjaGVtYUFycmF5Ont0eXBlOiJhcnJheSIsbWluSXRlbXM6MSxpdGVtczp7JHJlZjoiIyJ9fSxwb3NpdGl2ZUludGVnZXI6e3R5cGU6ImludGVnZXIiLG1pbmltdW06MH0scG9zaXRpdmVJbnRlZ2VyRGVmYXVsdDA6e2FsbE9mOlt7JHJlZjoiIy9kZWZpbml0aW9ucy9wb3NpdGl2ZUludGVnZXIifSx7ZGVmYXVsdDowfV19LHNpbXBsZVR5cGVzOnt0eXBlOiJzdHJpbmciLGVudW06WyJhcnJheSIsImJvb2xlYW4iLCJpbnRlZ2VyIiwibnVsbCIsIm51bWJlciIsIm9iamVjdCIsInN0cmluZyJdfSxzdHJpbmdBcnJheTp7dHlwZToiYXJyYXkiLGl0ZW1zOnt0eXBlOiJzdHJpbmcifSxtaW5JdGVtczoxLHVuaXF1ZUl0ZW1zOiEwfX0sdHlwZToib2JqZWN0Iixwcm9wZXJ0aWVzOntpZDp7dHlwZToic3RyaW5nIixmb3JtYXQ6InVyaSJ9LCRzY2hlbWE6e3R5cGU6InN0cmluZyIsZm9ybWF0OiJ1cmkifSx0aXRsZTp7dHlwZToic3RyaW5nIn0sZGVzY3JpcHRpb246e3R5cGU6InN0cmluZyJ9LGRlZmF1bHQ6e30sbXVsdGlwbGVPZjp7dHlwZToibnVtYmVyIixtaW5pbXVtOjAsZXhjbHVzaXZlTWluaW11bTohMH0sbWF4aW11bTp7dHlwZToibnVtYmVyIn0sZXhjbHVzaXZlTWF4aW11bTp7dHlwZToiYm9vbGVhbiIsZGVmYXVsdDohMX0sbWluaW11bTp7dHlwZToibnVtYmVyIn0sZXhjbHVzaXZlTWluaW11bTp7dHlwZToiYm9vbGVhbiIsZGVmYXVsdDohMX0sbWF4TGVuZ3RoOnthbGxPZjpbeyRyZWY6IiMvZGVmaW5pdGlvbnMvcG9zaXRpdmVJbnRlZ2VyIn1dfSxtaW5MZW5ndGg6e2FsbE9mOlt7JHJlZjoiIy9kZWZpbml0aW9ucy9wb3NpdGl2ZUludGVnZXJEZWZhdWx0MCJ9XX0scGF0dGVybjp7dHlwZToic3RyaW5nIixmb3JtYXQ6InJlZ2V4In0sYWRkaXRpb25hbEl0ZW1zOnthbnlPZjpbe3R5cGU6ImJvb2xlYW4ifSx7JHJlZjoiIyJ9XSxkZWZhdWx0Ont9fSxpdGVtczp7YW55T2Y6W3skcmVmOiIjIn0seyRyZWY6IiMvZGVmaW5pdGlvbnMvc2NoZW1hQXJyYXkifV0sZGVmYXVsdDp7fX0sbWF4SXRlbXM6e2FsbE9mOlt7JHJlZjoiIy9kZWZpbml0aW9ucy9wb3NpdGl2ZUludGVnZXIifV19LG1pbkl0ZW1zOnthbGxPZjpbeyRyZWY6IiMvZGVmaW5pdGlvbnMvcG9zaXRpdmVJbnRlZ2VyRGVmYXVsdDAifV19LHVuaXF1ZUl0ZW1zOnt0eXBlOiJib29sZWFuIixkZWZhdWx0OiExfSxtYXhQcm9wZXJ0aWVzOnthbGxPZjpbeyRyZWY6IiMvZGVmaW5pdGlvbnMvcG9zaXRpdmVJbnRlZ2VyIn1dfSxtaW5Qcm9wZXJ0aWVzOnthbGxPZjpbeyRyZWY6IiMvZGVmaW5pdGlvbnMvcG9zaXRpdmVJbnRlZ2VyRGVmYXVsdDAifV19LHJlcXVpcmVkOnthbGxPZjpbeyRyZWY6IiMvZGVmaW5pdGlvbnMvc3RyaW5nQXJyYXkifV19LGFkZGl0aW9uYWxQcm9wZXJ0aWVzOnthbnlPZjpbe3R5cGU6ImJvb2xlYW4ifSx7JHJlZjoiIyJ9XSxkZWZhdWx0Ont9fSxkZWZpbml0aW9uczp7dHlwZToib2JqZWN0IixhZGRpdGlvbmFsUHJvcGVydGllczp7JHJlZjoiIyJ9LGRlZmF1bHQ6e319LHByb3BlcnRpZXM6e3R5cGU6Im9iamVjdCIsYWRkaXRpb25hbFByb3BlcnRpZXM6eyRyZWY6IiMifSxkZWZhdWx0Ont9fSxwYXR0ZXJuUHJvcGVydGllczp7dHlwZToib2JqZWN0IixhZGRpdGlvbmFsUHJvcGVydGllczp7JHJlZjoiIyJ9LGRlZmF1bHQ6e319LGRlcGVuZGVuY2llczp7dHlwZToib2JqZWN0IixhZGRpdGlvbmFsUHJvcGVydGllczp7YW55T2Y6W3skcmVmOiIjIn0seyRyZWY6IiMvZGVmaW5pdGlvbnMvc3RyaW5nQXJyYXkifV19fSxlbnVtOnt0eXBlOiJhcnJheSIsbWluSXRlbXM6MSx1bmlxdWVJdGVtczohMH0sdHlwZTp7YW55T2Y6W3skcmVmOiIjL2RlZmluaXRpb25zL3NpbXBsZVR5cGVzIn0se3R5cGU6ImFycmF5IixpdGVtczp7JHJlZjoiIy9kZWZpbml0aW9ucy9zaW1wbGVUeXBlcyJ9LG1pbkl0ZW1zOjEsdW5pcXVlSXRlbXM6ITB9XX0sZm9ybWF0OnthbnlPZjpbe3R5cGU6InN0cmluZyIsZW51bTpbImRhdGUtdGltZSIsInVyaSIsImVtYWlsIiwiaG9zdG5hbWUiLCJpcHY0IiwiaXB2NiIsInJlZ2V4Il19LHt0eXBlOiJzdHJpbmcifV19LGFsbE9mOnthbGxPZjpbeyRyZWY6IiMvZGVmaW5pdGlvbnMvc2NoZW1hQXJyYXkifV19LGFueU9mOnthbGxPZjpbeyRyZWY6IiMvZGVmaW5pdGlvbnMvc2NoZW1hQXJyYXkifV19LG9uZU9mOnthbGxPZjpbeyRyZWY6IiMvZGVmaW5pdGlvbnMvc2NoZW1hQXJyYXkifV19LG5vdDp7YWxsT2Y6W3skcmVmOiIjIn1dfX0sZGVwZW5kZW5jaWVzOntleGNsdXNpdmVNYXhpbXVtOlsibWF4aW11bSJdLGV4Y2x1c2l2ZU1pbmltdW06WyJtaW5pbXVtIl19LGRlZmF1bHQ6e319LCJodHRwOi8vanNvbi1zY2hlbWEub3JnL2RyYWZ0LTA3L3NjaGVtYSMiOntkZWZpbml0aW9uczp7c2NoZW1hQXJyYXk6e3R5cGU6ImFycmF5IixtaW5JdGVtczoxLGl0ZW1zOnskcmVmOiIjIn19LG5vbk5lZ2F0aXZlSW50ZWdlcjp7dHlwZToiaW50ZWdlciIsbWluaW11bTowfSxub25OZWdhdGl2ZUludGVnZXJEZWZhdWx0MDp7YWxsT2Y6W3skcmVmOiIjL2RlZmluaXRpb25zL25vbk5lZ2F0aXZlSW50ZWdlciJ9LHtkZWZhdWx0OjB9XX0sc2ltcGxlVHlwZXM6e2VudW06WyJhcnJheSIsImJvb2xlYW4iLCJpbnRlZ2VyIiwibnVsbCIsIm51bWJlciIsIm9iamVjdCIsInN0cmluZyJdfSxzdHJpbmdBcnJheTp7dHlwZToiYXJyYXkiLGl0ZW1zOnt0eXBlOiJzdHJpbmcifSx1bmlxdWVJdGVtczohMCxkZWZhdWx0OltdfX0sdHlwZTpbIm9iamVjdCIsImJvb2xlYW4iXSxwcm9wZXJ0aWVzOnskaWQ6e3R5cGU6InN0cmluZyIsZm9ybWF0OiJ1cmktcmVmZXJlbmNlIn0sJHNjaGVtYTp7dHlwZToic3RyaW5nIixmb3JtYXQ6InVyaSJ9LCRyZWY6e3R5cGU6InN0cmluZyIsZm9ybWF0OiJ1cmktcmVmZXJlbmNlIn0sJGNvbW1lbnQ6e3R5cGU6InN0cmluZyJ9LHRpdGxlOnt0eXBlOiJzdHJpbmcifSxkZXNjcmlwdGlvbjp7dHlwZToic3RyaW5nIn0sZGVmYXVsdDohMCxyZWFkT25seTp7dHlwZToiYm9vbGVhbiIsZGVmYXVsdDohMX0sZXhhbXBsZXM6e3R5cGU6ImFycmF5IixpdGVtczohMH0sbXVsdGlwbGVPZjp7dHlwZToibnVtYmVyIixleGNsdXNpdmVNaW5pbXVtOjB9LG1heGltdW06e3R5cGU6Im51bWJlciJ9LGV4Y2x1c2l2ZU1heGltdW06e3R5cGU6Im51bWJlciJ9LG1pbmltdW06e3R5cGU6Im51bWJlciJ9LGV4Y2x1c2l2ZU1pbmltdW06e3R5cGU6Im51bWJlciJ9LG1heExlbmd0aDp7JHJlZjoiIy9kZWZpbml0aW9ucy9ub25OZWdhdGl2ZUludGVnZXIifSxtaW5MZW5ndGg6eyRyZWY6IiMvZGVmaW5pdGlvbnMvbm9uTmVnYXRpdmVJbnRlZ2VyRGVmYXVsdDAifSxwYXR0ZXJuOnt0eXBlOiJzdHJpbmciLGZvcm1hdDoicmVnZXgifSxhZGRpdGlvbmFsSXRlbXM6eyRyZWY6IiMifSxpdGVtczp7YW55T2Y6W3skcmVmOiIjIn0seyRyZWY6IiMvZGVmaW5pdGlvbnMvc2NoZW1hQXJyYXkifV0sZGVmYXVsdDohMH0sbWF4SXRlbXM6eyRyZWY6IiMvZGVmaW5pdGlvbnMvbm9uTmVnYXRpdmVJbnRlZ2VyIn0sbWluSXRlbXM6eyRyZWY6IiMvZGVmaW5pdGlvbnMvbm9uTmVnYXRpdmVJbnRlZ2VyRGVmYXVsdDAifSx1bmlxdWVJdGVtczp7dHlwZToiYm9vbGVhbiIsZGVmYXVsdDohMX0sY29udGFpbnM6eyRyZWY6IiMifSxtYXhQcm9wZXJ0aWVzOnskcmVmOiIjL2RlZmluaXRpb25zL25vbk5lZ2F0aXZlSW50ZWdlciJ9LG1pblByb3BlcnRpZXM6eyRyZWY6IiMvZGVmaW5pdGlvbnMvbm9uTmVnYXRpdmVJbnRlZ2VyRGVmYXVsdDAifSxyZXF1aXJlZDp7JHJlZjoiIy9kZWZpbml0aW9ucy9zdHJpbmdBcnJheSJ9LGFkZGl0aW9uYWxQcm9wZXJ0aWVzOnskcmVmOiIjIn0sZGVmaW5pdGlvbnM6e3R5cGU6Im9iamVjdCIsYWRkaXRpb25hbFByb3BlcnRpZXM6eyRyZWY6IiMifSxkZWZhdWx0Ont9fSxwcm9wZXJ0aWVzOnt0eXBlOiJvYmplY3QiLGFkZGl0aW9uYWxQcm9wZXJ0aWVzOnskcmVmOiIjIn0sZGVmYXVsdDp7fX0scGF0dGVyblByb3BlcnRpZXM6e3R5cGU6Im9iamVjdCIsYWRkaXRpb25hbFByb3BlcnRpZXM6eyRyZWY6IiMifSxwcm9wZXJ0eU5hbWVzOntmb3JtYXQ6InJlZ2V4In0sZGVmYXVsdDp7fX0sZGVwZW5kZW5jaWVzOnt0eXBlOiJvYmplY3QiLGFkZGl0aW9uYWxQcm9wZXJ0aWVzOnthbnlPZjpbeyRyZWY6IiMifSx7JHJlZjoiIy9kZWZpbml0aW9ucy9zdHJpbmdBcnJheSJ9XX19LHByb3BlcnR5TmFtZXM6eyRyZWY6IiMifSxjb25zdDohMCxlbnVtOnt0eXBlOiJhcnJheSIsaXRlbXM6ITAsbWluSXRlbXM6MSx1bmlxdWVJdGVtczohMH0sdHlwZTp7YW55T2Y6W3skcmVmOiIjL2RlZmluaXRpb25zL3NpbXBsZVR5cGVzIn0se3R5cGU6ImFycmF5IixpdGVtczp7JHJlZjoiIy9kZWZpbml0aW9ucy9zaW1wbGVUeXBlcyJ9LG1pbkl0ZW1zOjEsdW5pcXVlSXRlbXM6ITB9XX0sZm9ybWF0Ont0eXBlOiJzdHJpbmcifSxjb250ZW50TWVkaWFUeXBlOnt0eXBlOiJzdHJpbmcifSxjb250ZW50RW5jb2Rpbmc6e3R5cGU6InN0cmluZyJ9LGlmOnskcmVmOiIjIn0sdGhlbjp7JHJlZjoiIyJ9LGVsc2U6eyRyZWY6IiMifSxhbGxPZjp7JHJlZjoiIy9kZWZpbml0aW9ucy9zY2hlbWFBcnJheSJ9LGFueU9mOnskcmVmOiIjL2RlZmluaXRpb25zL3NjaGVtYUFycmF5In0sb25lT2Y6eyRyZWY6IiMvZGVmaW5pdGlvbnMvc2NoZW1hQXJyYXkifSxub3Q6eyRyZWY6IiMifX0sZGVmYXVsdDohMH19fSxQbz17aWQ6cygic2NoZW1hLmpzb24uaWQiLCJBIHVuaXF1ZSBpZGVudGlmaWVyIGZvciB0aGUgc2NoZW1hLiIpLCRzY2hlbWE6cygic2NoZW1hLmpzb24uJHNjaGVtYSIsIlRoZSBzY2hlbWEgdG8gdmVyaWZ5IHRoaXMgZG9jdW1lbnQgYWdhaW5zdC4iKSx0aXRsZTpzKCJzY2hlbWEuanNvbi50aXRsZSIsIkEgZGVzY3JpcHRpdmUgdGl0bGUgb2YgdGhlIGVsZW1lbnQuIiksZGVzY3JpcHRpb246cygic2NoZW1hLmpzb24uZGVzY3JpcHRpb24iLCJBIGxvbmcgZGVzY3JpcHRpb24gb2YgdGhlIGVsZW1lbnQuIFVzZWQgaW4gaG92ZXIgbWVudXMgYW5kIHN1Z2dlc3Rpb25zLiIpLGRlZmF1bHQ6cygic2NoZW1hLmpzb24uZGVmYXVsdCIsIkEgZGVmYXVsdCB2YWx1ZS4gVXNlZCBieSBzdWdnZXN0aW9ucy4iKSxtdWx0aXBsZU9mOnMoInNjaGVtYS5qc29uLm11bHRpcGxlT2YiLCJBIG51bWJlciB0aGF0IHNob3VsZCBjbGVhbmx5IGRpdmlkZSB0aGUgY3VycmVudCB2YWx1ZSAoaS5lLiBoYXZlIG5vIHJlbWFpbmRlcikuIiksbWF4aW11bTpzKCJzY2hlbWEuanNvbi5tYXhpbXVtIiwiVGhlIG1heGltdW0gbnVtZXJpY2FsIHZhbHVlLCBpbmNsdXNpdmUgYnkgZGVmYXVsdC4iKSxleGNsdXNpdmVNYXhpbXVtOnMoInNjaGVtYS5qc29uLmV4Y2x1c2l2ZU1heGltdW0iLCJNYWtlcyB0aGUgbWF4aW11bSBwcm9wZXJ0eSBleGNsdXNpdmUuIiksbWluaW11bTpzKCJzY2hlbWEuanNvbi5taW5pbXVtIiwiVGhlIG1pbmltdW0gbnVtZXJpY2FsIHZhbHVlLCBpbmNsdXNpdmUgYnkgZGVmYXVsdC4iKSxleGNsdXNpdmVNaW5pbXVtOnMoInNjaGVtYS5qc29uLmV4Y2x1c2l2ZU1pbmludW0iLCJNYWtlcyB0aGUgbWluaW11bSBwcm9wZXJ0eSBleGNsdXNpdmUuIiksbWF4TGVuZ3RoOnMoInNjaGVtYS5qc29uLm1heExlbmd0aCIsIlRoZSBtYXhpbXVtIGxlbmd0aCBvZiBhIHN0cmluZy4iKSxtaW5MZW5ndGg6cygic2NoZW1hLmpzb24ubWluTGVuZ3RoIiwiVGhlIG1pbmltdW0gbGVuZ3RoIG9mIGEgc3RyaW5nLiIpLHBhdHRlcm46cygic2NoZW1hLmpzb24ucGF0dGVybiIsIkEgcmVndWxhciBleHByZXNzaW9uIHRvIG1hdGNoIHRoZSBzdHJpbmcgYWdhaW5zdC4gSXQgaXMgbm90IGltcGxpY2l0bHkgYW5jaG9yZWQuIiksYWRkaXRpb25hbEl0ZW1zOnMoInNjaGVtYS5qc29uLmFkZGl0aW9uYWxJdGVtcyIsIkZvciBhcnJheXMsIG9ubHkgd2hlbiBpdGVtcyBpcyBzZXQgYXMgYW4gYXJyYXkuIElmIGl0IGlzIGEgc2NoZW1hLCB0aGVuIHRoaXMgc2NoZW1hIHZhbGlkYXRlcyBpdGVtcyBhZnRlciB0aGUgb25lcyBzcGVjaWZpZWQgYnkgdGhlIGl0ZW1zIGFycmF5LiBJZiBpdCBpcyBmYWxzZSwgdGhlbiBhZGRpdGlvbmFsIGl0ZW1zIHdpbGwgY2F1c2UgdmFsaWRhdGlvbiB0byBmYWlsLiIpLGl0ZW1zOnMoInNjaGVtYS5qc29uLml0ZW1zIiwiRm9yIGFycmF5cy4gQ2FuIGVpdGhlciBiZSBhIHNjaGVtYSB0byB2YWxpZGF0ZSBldmVyeSBlbGVtZW50IGFnYWluc3Qgb3IgYW4gYXJyYXkgb2Ygc2NoZW1hcyB0byB2YWxpZGF0ZSBlYWNoIGl0ZW0gYWdhaW5zdCBpbiBvcmRlciAodGhlIGZpcnN0IHNjaGVtYSB3aWxsIHZhbGlkYXRlIHRoZSBmaXJzdCBlbGVtZW50LCB0aGUgc2Vjb25kIHNjaGVtYSB3aWxsIHZhbGlkYXRlIHRoZSBzZWNvbmQgZWxlbWVudCwgYW5kIHNvIG9uLiIpLG1heEl0ZW1zOnMoInNjaGVtYS5qc29uLm1heEl0ZW1zIiwiVGhlIG1heGltdW0gbnVtYmVyIG9mIGl0ZW1zIHRoYXQgY2FuIGJlIGluc2lkZSBhbiBhcnJheS4gSW5jbHVzaXZlLiIpLG1pbkl0ZW1zOnMoInNjaGVtYS5qc29uLm1pbkl0ZW1zIiwiVGhlIG1pbmltdW0gbnVtYmVyIG9mIGl0ZW1zIHRoYXQgY2FuIGJlIGluc2lkZSBhbiBhcnJheS4gSW5jbHVzaXZlLiIpLHVuaXF1ZUl0ZW1zOnMoInNjaGVtYS5qc29uLnVuaXF1ZUl0ZW1zIiwiSWYgYWxsIG9mIHRoZSBpdGVtcyBpbiB0aGUgYXJyYXkgbXVzdCBiZSB1bmlxdWUuIERlZmF1bHRzIHRvIGZhbHNlLiIpLG1heFByb3BlcnRpZXM6cygic2NoZW1hLmpzb24ubWF4UHJvcGVydGllcyIsIlRoZSBtYXhpbXVtIG51bWJlciBvZiBwcm9wZXJ0aWVzIGFuIG9iamVjdCBjYW4gaGF2ZS4gSW5jbHVzaXZlLiIpLG1pblByb3BlcnRpZXM6cygic2NoZW1hLmpzb24ubWluUHJvcGVydGllcyIsIlRoZSBtaW5pbXVtIG51bWJlciBvZiBwcm9wZXJ0aWVzIGFuIG9iamVjdCBjYW4gaGF2ZS4gSW5jbHVzaXZlLiIpLHJlcXVpcmVkOnMoInNjaGVtYS5qc29uLnJlcXVpcmVkIiwiQW4gYXJyYXkgb2Ygc3RyaW5ncyB0aGF0IGxpc3RzIHRoZSBuYW1lcyBvZiBhbGwgcHJvcGVydGllcyByZXF1aXJlZCBvbiB0aGlzIG9iamVjdC4iKSxhZGRpdGlvbmFsUHJvcGVydGllczpzKCJzY2hlbWEuanNvbi5hZGRpdGlvbmFsUHJvcGVydGllcyIsIkVpdGhlciBhIHNjaGVtYSBvciBhIGJvb2xlYW4uIElmIGEgc2NoZW1hLCB0aGVuIHVzZWQgdG8gdmFsaWRhdGUgYWxsIHByb3BlcnRpZXMgbm90IG1hdGNoZWQgYnkgJ3Byb3BlcnRpZXMnIG9yICdwYXR0ZXJuUHJvcGVydGllcycuIElmIGZhbHNlLCB0aGVuIGFueSBwcm9wZXJ0aWVzIG5vdCBtYXRjaGVkIGJ5IGVpdGhlciB3aWxsIGNhdXNlIHRoaXMgc2NoZW1hIHRvIGZhaWwuIiksZGVmaW5pdGlvbnM6cygic2NoZW1hLmpzb24uZGVmaW5pdGlvbnMiLCJOb3QgdXNlZCBmb3IgdmFsaWRhdGlvbi4gUGxhY2Ugc3Vic2NoZW1hcyBoZXJlIHRoYXQgeW91IHdpc2ggdG8gcmVmZXJlbmNlIGlubGluZSB3aXRoICRyZWYuIikscHJvcGVydGllczpzKCJzY2hlbWEuanNvbi5wcm9wZXJ0aWVzIiwiQSBtYXAgb2YgcHJvcGVydHkgbmFtZXMgdG8gc2NoZW1hcyBmb3IgZWFjaCBwcm9wZXJ0eS4iKSxwYXR0ZXJuUHJvcGVydGllczpzKCJzY2hlbWEuanNvbi5wYXR0ZXJuUHJvcGVydGllcyIsIkEgbWFwIG9mIHJlZ3VsYXIgZXhwcmVzc2lvbnMgb24gcHJvcGVydHkgbmFtZXMgdG8gc2NoZW1hcyBmb3IgbWF0Y2hpbmcgcHJvcGVydGllcy4iKSxkZXBlbmRlbmNpZXM6cygic2NoZW1hLmpzb24uZGVwZW5kZW5jaWVzIiwiQSBtYXAgb2YgcHJvcGVydHkgbmFtZXMgdG8gZWl0aGVyIGFuIGFycmF5IG9mIHByb3BlcnR5IG5hbWVzIG9yIGEgc2NoZW1hLiBBbiBhcnJheSBvZiBwcm9wZXJ0eSBuYW1lcyBtZWFucyB0aGUgcHJvcGVydHkgbmFtZWQgaW4gdGhlIGtleSBkZXBlbmRzIG9uIHRoZSBwcm9wZXJ0aWVzIGluIHRoZSBhcnJheSBiZWluZyBwcmVzZW50IGluIHRoZSBvYmplY3QgaW4gb3JkZXIgdG8gYmUgdmFsaWQuIElmIHRoZSB2YWx1ZSBpcyBhIHNjaGVtYSwgdGhlbiB0aGUgc2NoZW1hIGlzIG9ubHkgYXBwbGllZCB0byB0aGUgb2JqZWN0IGlmIHRoZSBwcm9wZXJ0eSBpbiB0aGUga2V5IGV4aXN0cyBvbiB0aGUgb2JqZWN0LiIpLGVudW06cygic2NoZW1hLmpzb24uZW51bSIsIlRoZSBzZXQgb2YgbGl0ZXJhbCB2YWx1ZXMgdGhhdCBhcmUgdmFsaWQuIiksdHlwZTpzKCJzY2hlbWEuanNvbi50eXBlIiwiRWl0aGVyIGEgc3RyaW5nIG9mIG9uZSBvZiB0aGUgYmFzaWMgc2NoZW1hIHR5cGVzIChudW1iZXIsIGludGVnZXIsIG51bGwsIGFycmF5LCBvYmplY3QsIGJvb2xlYW4sIHN0cmluZykgb3IgYW4gYXJyYXkgb2Ygc3RyaW5ncyBzcGVjaWZ5aW5nIGEgc3Vic2V0IG9mIHRob3NlIHR5cGVzLiIpLGZvcm1hdDpzKCJzY2hlbWEuanNvbi5mb3JtYXQiLCJEZXNjcmliZXMgdGhlIGZvcm1hdCBleHBlY3RlZCBmb3IgdGhlIHZhbHVlLiIpLGFsbE9mOnMoInNjaGVtYS5qc29uLmFsbE9mIiwiQW4gYXJyYXkgb2Ygc2NoZW1hcywgYWxsIG9mIHdoaWNoIG11c3QgbWF0Y2guIiksYW55T2Y6cygic2NoZW1hLmpzb24uYW55T2YiLCJBbiBhcnJheSBvZiBzY2hlbWFzLCB3aGVyZSBhdCBsZWFzdCBvbmUgbXVzdCBtYXRjaC4iKSxvbmVPZjpzKCJzY2hlbWEuanNvbi5vbmVPZiIsIkFuIGFycmF5IG9mIHNjaGVtYXMsIGV4YWN0bHkgb25lIG9mIHdoaWNoIG11c3QgbWF0Y2guIiksbm90OnMoInNjaGVtYS5qc29uLm5vdCIsIkEgc2NoZW1hIHdoaWNoIG11c3Qgbm90IG1hdGNoLiIpLCRpZDpzKCJzY2hlbWEuanNvbi4kaWQiLCJBIHVuaXF1ZSBpZGVudGlmaWVyIGZvciB0aGUgc2NoZW1hLiIpLCRyZWY6cygic2NoZW1hLmpzb24uJHJlZiIsIlJlZmVyZW5jZSBhIGRlZmluaXRpb24gaG9zdGVkIG9uIGFueSBsb2NhdGlvbi4iKSwkY29tbWVudDpzKCJzY2hlbWEuanNvbi4kY29tbWVudCIsIkNvbW1lbnRzIGZyb20gc2NoZW1hIGF1dGhvcnMgdG8gcmVhZGVycyBvciBtYWludGFpbmVycyBvZiB0aGUgc2NoZW1hLiIpLHJlYWRPbmx5OnMoInNjaGVtYS5qc29uLnJlYWRPbmx5IiwiSW5kaWNhdGVzIHRoYXQgdGhlIHZhbHVlIG9mIHRoZSBpbnN0YW5jZSBpcyBtYW5hZ2VkIGV4Y2x1c2l2ZWx5IGJ5IHRoZSBvd25pbmcgYXV0aG9yaXR5LiIpLGV4YW1wbGVzOnMoInNjaGVtYS5qc29uLmV4YW1wbGVzIiwiU2FtcGxlIEpTT04gdmFsdWVzIGFzc29jaWF0ZWQgd2l0aCBhIHBhcnRpY3VsYXIgc2NoZW1hLCBmb3IgdGhlIHB1cnBvc2Ugb2YgaWxsdXN0cmF0aW5nIHVzYWdlLiIpLGNvbnRhaW5zOnMoInNjaGVtYS5qc29uLmNvbnRhaW5zIiwnQW4gYXJyYXkgaW5zdGFuY2UgaXMgdmFsaWQgYWdhaW5zdCAiY29udGFpbnMiIGlmIGF0IGxlYXN0IG9uZSBvZiBpdHMgZWxlbWVudHMgaXMgdmFsaWQgYWdhaW5zdCB0aGUgZ2l2ZW4gc2NoZW1hLicpLHByb3BlcnR5TmFtZXM6cygic2NoZW1hLmpzb24ucHJvcGVydHlOYW1lcyIsIklmIHRoZSBpbnN0YW5jZSBpcyBhbiBvYmplY3QsIHRoaXMga2V5d29yZCB2YWxpZGF0ZXMgaWYgZXZlcnkgcHJvcGVydHkgbmFtZSBpbiB0aGUgaW5zdGFuY2UgdmFsaWRhdGVzIGFnYWluc3QgdGhlIHByb3ZpZGVkIHNjaGVtYS4iKSxjb25zdDpzKCJzY2hlbWEuanNvbi5jb25zdCIsIkFuIGluc3RhbmNlIHZhbGlkYXRlcyBzdWNjZXNzZnVsbHkgYWdhaW5zdCB0aGlzIGtleXdvcmQgaWYgaXRzIHZhbHVlIGlzIGVxdWFsIHRvIHRoZSB2YWx1ZSBvZiB0aGUga2V5d29yZC4iKSxjb250ZW50TWVkaWFUeXBlOnMoInNjaGVtYS5qc29uLmNvbnRlbnRNZWRpYVR5cGUiLCJEZXNjcmliZXMgdGhlIG1lZGlhIHR5cGUgb2YgYSBzdHJpbmcgcHJvcGVydHkuIiksY29udGVudEVuY29kaW5nOnMoInNjaGVtYS5qc29uLmNvbnRlbnRFbmNvZGluZyIsIkRlc2NyaWJlcyB0aGUgY29udGVudCBlbmNvZGluZyBvZiBhIHN0cmluZyBwcm9wZXJ0eS4iKSxpZjpzKCJzY2hlbWEuanNvbi5pZiIsJ1RoZSB2YWxpZGF0aW9uIG91dGNvbWUgb2YgdGhlICJpZiIgc3Vic2NoZW1hIGNvbnRyb2xzIHdoaWNoIG9mIHRoZSAidGhlbiIgb3IgImVsc2UiIGtleXdvcmRzIGFyZSBldmFsdWF0ZWQuJyksdGhlbjpzKCJzY2hlbWEuanNvbi50aGVuIiwnVGhlICJpZiIgc3Vic2NoZW1hIGlzIHVzZWQgZm9yIHZhbGlkYXRpb24gd2hlbiB0aGUgImlmIiBzdWJzY2hlbWEgc3VjY2VlZHMuJyksZWxzZTpzKCJzY2hlbWEuanNvbi5lbHNlIiwnVGhlICJlbHNlIiBzdWJzY2hlbWEgaXMgdXNlZCBmb3IgdmFsaWRhdGlvbiB3aGVuIHRoZSAiaWYiIHN1YnNjaGVtYSBmYWlscy4nKX07Zm9yKE5vIGluIE9vLnNjaGVtYXMpZm9yKGtvIGluKEFvPU9vLnNjaGVtYXNbTm9dKS5wcm9wZXJ0aWVzKSJib29sZWFuIj09dHlwZW9mKHhvPUFvLnByb3BlcnRpZXNba29dKSYmKHhvPUFvLnByb3BlcnRpZXNba29dPXt9KSwoRW89UG9ba29dKT94by5kZXNjcmlwdGlvbj1Fbzpjb25zb2xlLmxvZygiIi5jb25jYXQoa28sIjogbG9jYWxpemUoJ3NjaGVtYS5qc29uLiIpLmNvbmNhdChrbyxgJywgIiIpYCkpO2Z1bmN0aW9uIFRvKGUpe2lmKE1vW2VdKXJldHVybiBNb1tlXS5leHBvcnRzO3ZhciB0PU1vW2VdPXtleHBvcnRzOnt9fTtyZXR1cm4gTG9bZV0odCx0LmV4cG9ydHMsVG8pLHQuZXhwb3J0c31Mbz17NDcwOmU9PntmdW5jdGlvbiBmKGUpe2lmKCJzdHJpbmciIT10eXBlb2YgZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJQYXRoIG11c3QgYmUgYSBzdHJpbmcuIFJlY2VpdmVkICIrSlNPTi5zdHJpbmdpZnkoZSkpfWZ1bmN0aW9uIG8oZSx0KXtmb3IodmFyIHIsbj0iIixpPTAsbz0tMSxhPTAscz0wO3M8PWUubGVuZ3RoOysrcyl7aWYoczxlLmxlbmd0aClyPWUuY2hhckNvZGVBdChzKTtlbHNle2lmKDQ3PT09cilicmVhaztyPTQ3fWlmKDQ3PT09cil7aWYobyE9PXMtMSYmMSE9PWEpaWYobyE9PXMtMSYmMj09PWEpe2lmKG4ubGVuZ3RoPDJ8fDIhPT1pfHw0NiE9PW4uY2hhckNvZGVBdChuLmxlbmd0aC0xKXx8NDYhPT1uLmNoYXJDb2RlQXQobi5sZW5ndGgtMikpaWYoMjxuLmxlbmd0aCl7dmFyIGw9bi5sYXN0SW5kZXhPZigiLyIpO2lmKGwhPT1uLmxlbmd0aC0xKXtpPS0xPT09bD8obj0iIiwwKToobj1uLnNsaWNlKDAsbCkpLmxlbmd0aC0xLW4ubGFzdEluZGV4T2YoIi8iKSxvPXMsYT0wO2NvbnRpbnVlfX1lbHNlIGlmKDI9PT1uLmxlbmd0aHx8MT09PW4ubGVuZ3RoKXtuPSIiLG89cyxhPWk9MDtjb250aW51ZX10JiYoMDxuLmxlbmd0aD9uKz0iLy4uIjpuPSIuLiIsaT0yKX1lbHNlIDA8bi5sZW5ndGg/bis9Ii8iK2Uuc2xpY2UobysxLHMpOm49ZS5zbGljZShvKzEscyksaT1zLW8tMTtvPXMsYT0wfWVsc2UgNDY9PT1yJiYtMSE9PWE/KythOmE9LTF9cmV0dXJuIG59dmFyIGQ9e3Jlc29sdmU6ZnVuY3Rpb24oKXtmb3IodmFyIGUsdD0iIixyPSExLG49YXJndW1lbnRzLmxlbmd0aC0xOy0xPD1uJiYhcjtuLS0pe3ZhciBpPTA8PW4/YXJndW1lbnRzW25dOmU9dm9pZCAwPT09ZT9wcm9jZXNzLmN3ZCgpOmU7ZihpKSwwIT09aS5sZW5ndGgmJih0PWkrIi8iK3Qscj00Nz09PWkuY2hhckNvZGVBdCgwKSl9cmV0dXJuIHQ9byh0LCFyKSxyPzA8dC5sZW5ndGg/Ii8iK3Q6Ii8iOjA8dC5sZW5ndGg/dDoiLiJ9LG5vcm1hbGl6ZTpmdW5jdGlvbihlKXtpZihmKGUpLDA9PT1lLmxlbmd0aClyZXR1cm4iLiI7dmFyIHQ9NDc9PT1lLmNoYXJDb2RlQXQoMCkscj00Nz09PWUuY2hhckNvZGVBdChlLmxlbmd0aC0xKTtyZXR1cm4gMDwoZT0wIT09KGU9byhlLCF0KSkubGVuZ3RofHx0P2U6Ii4iKS5sZW5ndGgmJnImJihlKz0iLyIpLHQ/Ii8iK2U6ZX0saXNBYnNvbHV0ZTpmdW5jdGlvbihlKXtyZXR1cm4gZihlKSwwPGUubGVuZ3RoJiY0Nz09PWUuY2hhckNvZGVBdCgwKX0sam9pbjpmdW5jdGlvbigpe2lmKDA9PT1hcmd1bWVudHMubGVuZ3RoKXJldHVybiIuIjtmb3IodmFyIGUsdD0wO3Q8YXJndW1lbnRzLmxlbmd0aDsrK3Qpe3ZhciByPWFyZ3VtZW50c1t0XTtmKHIpLDA8ci5sZW5ndGgmJih2b2lkIDA9PT1lP2U9cjplKz0iLyIrcil9cmV0dXJuIHZvaWQgMD09PWU/Ii4iOmQubm9ybWFsaXplKGUpfSxyZWxhdGl2ZTpmdW5jdGlvbihlLHQpe2lmKGYoZSksZih0KSxlPT09dClyZXR1cm4iIjtpZigoZT1kLnJlc29sdmUoZSkpPT09KHQ9ZC5yZXNvbHZlKHQpKSlyZXR1cm4iIjtmb3IodmFyIHI9MTtyPGUubGVuZ3RoJiY0Nz09PWUuY2hhckNvZGVBdChyKTsrK3IpO2Zvcih2YXIgbj1lLmxlbmd0aCxpPW4tcixvPTE7bzx0Lmxlbmd0aCYmNDc9PT10LmNoYXJDb2RlQXQobyk7KytvKTtmb3IodmFyIHU9dC5sZW5ndGgtbyxhPWk8dT9pOnUscz0tMSxsPTA7bDw9YTsrK2wpe2lmKGw9PT1hKXtpZihhPHUpe2lmKDQ3PT09dC5jaGFyQ29kZUF0KG8rbCkpcmV0dXJuIHQuc2xpY2UobytsKzEpO2lmKDA9PT1sKXJldHVybiB0LnNsaWNlKG8rbCl9ZWxzZSBhPGkmJig0Nz09PWUuY2hhckNvZGVBdChyK2wpP3M9bDowPT09bCYmKHM9MCkpO2JyZWFrfXZhciBoPWUuY2hhckNvZGVBdChyK2wpO2lmKGghPT10LmNoYXJDb2RlQXQobytsKSlicmVhazs0Nz09PWgmJihzPWwpfWZvcih2YXIgYz0iIixsPXIrcysxO2w8PW47KytsKWwhPT1uJiY0NyE9PWUuY2hhckNvZGVBdChsKXx8KDA9PT1jLmxlbmd0aD9jKz0iLi4iOmMrPSIvLi4iKTtyZXR1cm4gMDxjLmxlbmd0aD9jK3Quc2xpY2UobytzKTooNDc9PT10LmNoYXJDb2RlQXQobys9cykmJisrbyx0LnNsaWNlKG8pKX0sX21ha2VMb25nOmZ1bmN0aW9uKGUpe3JldHVybiBlfSxkaXJuYW1lOmZ1bmN0aW9uKGUpe2lmKGYoZSksMD09PWUubGVuZ3RoKXJldHVybiIuIjtmb3IodmFyIHQ9NDc9PT1lLmNoYXJDb2RlQXQoMCkscj0tMSxuPSEwLGk9ZS5sZW5ndGgtMTsxPD1pOy0taSlpZig0Nz09PWUuY2hhckNvZGVBdChpKSl7aWYoIW4pe3I9aTticmVha319ZWxzZSBuPSExO3JldHVybi0xPT09cj90PyIvIjoiLiI6dCYmMT09PXI/Ii8vIjplLnNsaWNlKDAscil9LGJhc2VuYW1lOmZ1bmN0aW9uKGUsdCl7aWYodm9pZCAwIT09dCYmInN0cmluZyIhPXR5cGVvZiB0KXRocm93IG5ldyBUeXBlRXJyb3IoJyJleHQiIGFyZ3VtZW50IG11c3QgYmUgYSBzdHJpbmcnKTtmKGUpO3ZhciByPTAsbj0tMSxpPSEwO2lmKHZvaWQgMCE9PXQmJjA8dC5sZW5ndGgmJnQubGVuZ3RoPD1lLmxlbmd0aCl7aWYodC5sZW5ndGg9PT1lLmxlbmd0aCYmdD09PWUpcmV0dXJuIiI7Zm9yKHZhciBvPXQubGVuZ3RoLTEsYT0tMSxzPWUubGVuZ3RoLTE7MDw9czstLXMpe3ZhciBsPWUuY2hhckNvZGVBdChzKTtpZig0Nz09PWwpe2lmKCFpKXtyPXMrMTticmVha319ZWxzZS0xPT09YSYmKGk9ITEsYT1zKzEpLDA8PW8mJihsPT09dC5jaGFyQ29kZUF0KG8pPy0xPT0tLW8mJihuPXMpOihvPS0xLG49YSkpfXJldHVybiByPT09bj9uPWE6LTE9PT1uJiYobj1lLmxlbmd0aCksZS5zbGljZShyLG4pfWZvcihzPWUubGVuZ3RoLTE7MDw9czstLXMpaWYoNDc9PT1lLmNoYXJDb2RlQXQocykpe2lmKCFpKXtyPXMrMTticmVha319ZWxzZS0xPT09biYmKGk9ITEsbj1zKzEpO3JldHVybi0xPT09bj8iIjplLnNsaWNlKHIsbil9LGV4dG5hbWU6ZnVuY3Rpb24oZSl7ZihlKTtmb3IodmFyIHQ9LTEscj0wLG49LTEsaT0hMCxvPTAsYT1lLmxlbmd0aC0xOzA8PWE7LS1hKXt2YXIgcz1lLmNoYXJDb2RlQXQoYSk7aWYoNDchPT1zKS0xPT09biYmKGk9ITEsbj1hKzEpLDQ2PT09cz8tMT09PXQ/dD1hOjEhPT1vJiYobz0xKTotMSE9PXQmJihvPS0xKTtlbHNlIGlmKCFpKXtyPWErMTticmVha319cmV0dXJuLTE9PT10fHwtMT09PW58fDA9PT1vfHwxPT09byYmdD09PW4tMSYmdD09PXIrMT8iIjplLnNsaWNlKHQsbil9LGZvcm1hdDpmdW5jdGlvbihlKXtpZihudWxsPT09ZXx8Im9iamVjdCIhPXR5cGVvZiBlKXRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSAicGF0aE9iamVjdCIgYXJndW1lbnQgbXVzdCBiZSBvZiB0eXBlIE9iamVjdC4gUmVjZWl2ZWQgdHlwZSAnK3R5cGVvZiBlKTtyZXR1cm4gdD1lLmRpcnx8ZS5yb290LHI9ZS5iYXNlfHwoZS5uYW1lfHwiIikrKGUuZXh0fHwiIiksdD90PT09ZS5yb290P3Qrcjp0KyIvIityOnI7dmFyIHQscn0scGFyc2U6ZnVuY3Rpb24oZSl7ZihlKTt2YXIgdD17cm9vdDoiIixkaXI6IiIsYmFzZToiIixleHQ6IiIsbmFtZToiIn07aWYoMD09PWUubGVuZ3RoKXJldHVybiB0O2Zvcih2YXIgcixuPTQ3PT09ZS5jaGFyQ29kZUF0KDApLHU9bj8odC5yb290PSIvIiwxKTowLGk9LTEsbz0wLGE9LTEscz0hMCxsPWUubGVuZ3RoLTEsYz0wO3U8PWw7LS1sKWlmKDQ3IT09KHI9ZS5jaGFyQ29kZUF0KGwpKSktMT09PWEmJihzPSExLGE9bCsxKSw0Nj09PXI/LTE9PT1pP2k9bDoxIT09YyYmKGM9MSk6LTEhPT1pJiYoYz0tMSk7ZWxzZSBpZighcyl7bz1sKzE7YnJlYWt9cmV0dXJuLTE9PT1pfHwtMT09PWF8fDA9PT1jfHwxPT09YyYmaT09PWEtMSYmaT09PW8rMT8tMSE9PWEmJih0LmJhc2U9dC5uYW1lPTA9PT1vJiZuP2Uuc2xpY2UoMSxhKTplLnNsaWNlKG8sYSkpOigwPT09byYmbj8odC5uYW1lPWUuc2xpY2UoMSxpKSx0LmJhc2U9ZS5zbGljZSgxLGEpKToodC5uYW1lPWUuc2xpY2UobyxpKSx0LmJhc2U9ZS5zbGljZShvLGEpKSx0LmV4dD1lLnNsaWNlKGksYSkpLDA8bz90LmRpcj1lLnNsaWNlKDAsby0xKTpuJiYodC5kaXI9Ii8iKSx0fSxzZXA6Ii8iLGRlbGltaXRlcjoiOiIsd2luMzI6bnVsbCxwb3NpeDpudWxsfTtkLnBvc2l4PWQsZS5leHBvcnRzPWR9LDQ0NzoodSxlLHQpPT57dmFyIG47dC5yKGUpLHQuZChlLHtVUkk6KCk9PnAsVXRpbHM6KCk9Pmx9KSwib2JqZWN0Ij09dHlwZW9mIHByb2Nlc3M/bj0id2luMzIiPT09cHJvY2Vzcy5wbGF0Zm9ybToib2JqZWN0Ij09dHlwZW9mIG5hdmlnYXRvciYmKG49MDw9bmF2aWdhdG9yLnVzZXJBZ2VudC5pbmRleE9mKCJXaW5kb3dzIikpO289ZnVuY3Rpb24oZSx0KXtyZXR1cm4obz1PYmplY3Quc2V0UHJvdG90eXBlT2Z8fHtfX3Byb3RvX186W119aW5zdGFuY2VvZiBBcnJheSYmZnVuY3Rpb24oZSx0KXtlLl9fcHJvdG9fXz10fXx8ZnVuY3Rpb24oZSx0KXtmb3IodmFyIHIgaW4gdClPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodCxyKSYmKGVbcl09dFtyXSl9KShlLHQpfTt2YXIgbyxoPS9eXHdbXHdcZCsuLV0qJC8sZj0vXlwvLyxkPS9eXC9cLy87ZnVuY3Rpb24gbShlLHQpe2lmKCFlLnNjaGVtZSYmdCl0aHJvdyBuZXcgRXJyb3IoJ1tVcmlFcnJvcl06IFNjaGVtZSBpcyBtaXNzaW5nOiB7c2NoZW1lOiAiIiwgYXV0aG9yaXR5OiAiJy5jb25jYXQoZS5hdXRob3JpdHksJyIsIHBhdGg6ICInKS5jb25jYXQoZS5wYXRoLCciLCBxdWVyeTogIicpLmNvbmNhdChlLnF1ZXJ5LCciLCBmcmFnbWVudDogIicpLmNvbmNhdChlLmZyYWdtZW50LCcifScpKTtpZihlLnNjaGVtZSYmIWgudGVzdChlLnNjaGVtZSkpdGhyb3cgbmV3IEVycm9yKCJbVXJpRXJyb3JdOiBTY2hlbWUgY29udGFpbnMgaWxsZWdhbCBjaGFyYWN0ZXJzLiIpO2lmKGUucGF0aClpZihlLmF1dGhvcml0eSl7aWYoIWYudGVzdChlLnBhdGgpKXRocm93IG5ldyBFcnJvcignW1VyaUVycm9yXTogSWYgYSBVUkkgY29udGFpbnMgYW4gYXV0aG9yaXR5IGNvbXBvbmVudCwgdGhlbiB0aGUgcGF0aCBjb21wb25lbnQgbXVzdCBlaXRoZXIgYmUgZW1wdHkgb3IgYmVnaW4gd2l0aCBhIHNsYXNoICgiLyIpIGNoYXJhY3RlcicpfWVsc2UgaWYoZC50ZXN0KGUucGF0aCkpdGhyb3cgbmV3IEVycm9yKCdbVXJpRXJyb3JdOiBJZiBhIFVSSSBkb2VzIG5vdCBjb250YWluIGFuIGF1dGhvcml0eSBjb21wb25lbnQsIHRoZW4gdGhlIHBhdGggY2Fubm90IGJlZ2luIHdpdGggdHdvIHNsYXNoIGNoYXJhY3RlcnMgKCIvLyIpJyl9dmFyIGc9L14oKFteOi8/I10rPyk6KT8oXC9cLyhbXi8/I10qKSk/KFtePyNdKikoXD8oW14jXSopKT8oIyguKikpPy8scD0oci5pc1VyaT1mdW5jdGlvbihlKXtyZXR1cm4gZSBpbnN0YW5jZW9mIHJ8fCEhZSYmInN0cmluZyI9PXR5cGVvZiBlLmF1dGhvcml0eSYmInN0cmluZyI9PXR5cGVvZiBlLmZyYWdtZW50JiYic3RyaW5nIj09dHlwZW9mIGUucGF0aCYmInN0cmluZyI9PXR5cGVvZiBlLnF1ZXJ5JiYic3RyaW5nIj09dHlwZW9mIGUuc2NoZW1lJiYic3RyaW5nIj09dHlwZW9mIGUuZnNQYXRoJiYiZnVuY3Rpb24iPT10eXBlb2YgZS53aXRoJiYiZnVuY3Rpb24iPT10eXBlb2YgZS50b1N0cmluZ30sT2JqZWN0LmRlZmluZVByb3BlcnR5KHIucHJvdG90eXBlLCJmc1BhdGgiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdyh0aGlzLCExKX0sZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9KSxyLnByb3RvdHlwZS53aXRoPWZ1bmN0aW9uKGUpe2lmKCFlKXJldHVybiB0aGlzO3ZhciB0PWUuc2NoZW1lLHI9ZS5hdXRob3JpdHksbj1lLnBhdGgsaT1lLnF1ZXJ5LGU9ZS5mcmFnbWVudDtyZXR1cm4gdm9pZCAwPT09dD90PXRoaXMuc2NoZW1lOm51bGw9PT10JiYodD0iIiksdm9pZCAwPT09cj9yPXRoaXMuYXV0aG9yaXR5Om51bGw9PT1yJiYocj0iIiksdm9pZCAwPT09bj9uPXRoaXMucGF0aDpudWxsPT09biYmKG49IiIpLHZvaWQgMD09PWk/aT10aGlzLnF1ZXJ5Om51bGw9PT1pJiYoaT0iIiksdm9pZCAwPT09ZT9lPXRoaXMuZnJhZ21lbnQ6bnVsbD09PWUmJihlPSIiKSx0PT09dGhpcy5zY2hlbWUmJnI9PT10aGlzLmF1dGhvcml0eSYmbj09PXRoaXMucGF0aCYmaT09PXRoaXMucXVlcnkmJmU9PT10aGlzLmZyYWdtZW50P3RoaXM6bmV3IGEodCxyLG4saSxlKX0sci5wYXJzZT1mdW5jdGlvbihlLHQpe3ZvaWQgMD09PXQmJih0PSExKTtlPWcuZXhlYyhlKTtyZXR1cm4gZT9uZXcgYShlWzJdfHwiIixpKGVbNF18fCIiKSxpKGVbNV18fCIiKSxpKGVbN118fCIiKSxpKGVbOV18fCIiKSx0KTpuZXcgYSgiIiwiIiwiIiwiIiwiIil9LHIuZmlsZT1mdW5jdGlvbihlKXt2YXIgdCxyPSIiO3JldHVybiIvIj09PShlPW4/ZS5yZXBsYWNlKC9cXC9nLCIvIik6ZSlbMF0mJiIvIj09PWVbMV0mJihlPS0xPT09KHQ9ZS5pbmRleE9mKCIvIiwyKSk/KHI9ZS5zdWJzdHJpbmcoMiksIi8iKToocj1lLnN1YnN0cmluZygyLHQpLGUuc3Vic3RyaW5nKHQpfHwiLyIpKSxuZXcgYSgiZmlsZSIscixlLCIiLCIiKX0sci5mcm9tPWZ1bmN0aW9uKGUpe2U9bmV3IGEoZS5zY2hlbWUsZS5hdXRob3JpdHksZS5wYXRoLGUucXVlcnksZS5mcmFnbWVudCk7cmV0dXJuIG0oZSwhMCksZX0sci5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oZSl7cmV0dXJuIHModGhpcyxlPXZvaWQgMD09PWU/ITE6ZSl9LHIucHJvdG90eXBlLnRvSlNPTj1mdW5jdGlvbigpe3JldHVybiB0aGlzfSxyLnJldml2ZT1mdW5jdGlvbihlKXtpZihlKXtpZihlIGluc3RhbmNlb2YgcilyZXR1cm4gZTt2YXIgdD1uZXcgYShlKTtyZXR1cm4gdC5fZm9ybWF0dGVkPWUuZXh0ZXJuYWwsdC5fZnNQYXRoPWUuX3NlcD09PWI/ZS5mc1BhdGg6bnVsbCx0fXJldHVybiBlfSxyKSxiPW4/MTp2b2lkIDAsYT1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7dmFyIGU9bnVsbCE9PXQmJnQuYXBwbHkodGhpcyxhcmd1bWVudHMpfHx0aGlzO3JldHVybiBlLl9mb3JtYXR0ZWQ9bnVsbCxlLl9mc1BhdGg9bnVsbCxlfXZhciByPWUsbj10O2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBuJiZudWxsIT09bil0aHJvdyBuZXcgVHlwZUVycm9yKCJDbGFzcyBleHRlbmRzIHZhbHVlICIrU3RyaW5nKG4pKyIgaXMgbm90IGEgY29uc3RydWN0b3Igb3IgbnVsbCIpO2Z1bmN0aW9uIGkoKXt0aGlzLmNvbnN0cnVjdG9yPXJ9cmV0dXJuIG8ocixuKSxyLnByb3RvdHlwZT1udWxsPT09bj9PYmplY3QuY3JlYXRlKG4pOihpLnByb3RvdHlwZT1uLnByb3RvdHlwZSxuZXcgaSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJmc1BhdGgiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZnNQYXRofHwodGhpcy5fZnNQYXRoPXcodGhpcywhMSkpLHRoaXMuX2ZzUGF0aH0sZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9KSxlLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbihlKXtyZXR1cm4oZT12b2lkIDA9PT1lPyExOmUpP3ModGhpcywhMCk6KHRoaXMuX2Zvcm1hdHRlZHx8KHRoaXMuX2Zvcm1hdHRlZD1zKHRoaXMsITEpKSx0aGlzLl9mb3JtYXR0ZWQpfSxlLnByb3RvdHlwZS50b0pTT049ZnVuY3Rpb24oKXt2YXIgZT17JG1pZDoxfTtyZXR1cm4gdGhpcy5fZnNQYXRoJiYoZS5mc1BhdGg9dGhpcy5fZnNQYXRoLGUuX3NlcD1iKSx0aGlzLl9mb3JtYXR0ZWQmJihlLmV4dGVybmFsPXRoaXMuX2Zvcm1hdHRlZCksdGhpcy5wYXRoJiYoZS5wYXRoPXRoaXMucGF0aCksdGhpcy5zY2hlbWUmJihlLnNjaGVtZT10aGlzLnNjaGVtZSksdGhpcy5hdXRob3JpdHkmJihlLmF1dGhvcml0eT10aGlzLmF1dGhvcml0eSksdGhpcy5xdWVyeSYmKGUucXVlcnk9dGhpcy5xdWVyeSksdGhpcy5mcmFnbWVudCYmKGUuZnJhZ21lbnQ9dGhpcy5mcmFnbWVudCksZX0sZX0ocCksdj0oKGU9e30pWzU4XT0iJTNBIixlWzQ3XT0iJTJGIixlWzYzXT0iJTNGIixlWzM1XT0iJTIzIixlWzkxXT0iJTVCIixlWzkzXT0iJTVEIixlWzY0XT0iJTQwIixlWzMzXT0iJTIxIixlWzM2XT0iJTI0IixlWzM4XT0iJTI2IixlWzM5XT0iJTI3IixlWzQwXT0iJTI4IixlWzQxXT0iJTI5IixlWzQyXT0iJTJBIixlWzQzXT0iJTJCIixlWzQ0XT0iJTJDIixlWzU5XT0iJTNCIixlWzYxXT0iJTNEIixlWzMyXT0iJTIwIixlKTtmdW5jdGlvbiByKGUsdCxyLG4saSxvKXt2b2lkIDA9PT1vJiYobz0hMSksIm9iamVjdCI9PXR5cGVvZiBlPyh0aGlzLnNjaGVtZT1lLnNjaGVtZXx8IiIsdGhpcy5hdXRob3JpdHk9ZS5hdXRob3JpdHl8fCIiLHRoaXMucGF0aD1lLnBhdGh8fCIiLHRoaXMucXVlcnk9ZS5xdWVyeXx8IiIsdGhpcy5mcmFnbWVudD1lLmZyYWdtZW50fHwiIik6KHRoaXMuc2NoZW1lPWV8fG8/ZToiZmlsZSIsdGhpcy5hdXRob3JpdHk9dHx8IiIsdGhpcy5wYXRoPWZ1bmN0aW9uKGUsdCl7c3dpdGNoKGUpe2Nhc2UiaHR0cHMiOmNhc2UiaHR0cCI6Y2FzZSJmaWxlIjp0PyIvIiE9PXRbMF0mJih0PSIvIit0KTp0PSIvIn1yZXR1cm4gdH0odGhpcy5zY2hlbWUscnx8IiIpLHRoaXMucXVlcnk9bnx8IiIsdGhpcy5mcmFnbWVudD1pfHwiIixtKHRoaXMsbykpfWZ1bmN0aW9uIHkoZSx0KXtmb3IodmFyIHI9dm9pZCAwLG49LTEsaT0wO2k8ZS5sZW5ndGg7aSsrKXt2YXIgbz1lLmNoYXJDb2RlQXQoaSk7OTc8PW8mJm88PTEyMnx8NjU8PW8mJm88PTkwfHw0ODw9byYmbzw9NTd8fDQ1PT09b3x8NDY9PT1vfHw5NT09PW98fDEyNj09PW98fHQmJjQ3PT09bz8oLTEhPT1uJiYocis9ZW5jb2RlVVJJQ29tcG9uZW50KGUuc3Vic3RyaW5nKG4saSkpLG49LTEpLHZvaWQgMCE9PXImJihyKz1lLmNoYXJBdChpKSkpOih2b2lkIDA9PT1yJiYocj1lLnN1YnN0cigwLGkpKSx2b2lkIDAhPT0obz12W29dKT8oLTEhPT1uJiYocis9ZW5jb2RlVVJJQ29tcG9uZW50KGUuc3Vic3RyaW5nKG4saSkpLG49LTEpLHIrPW8pOi0xPT09biYmKG49aSkpfXJldHVybi0xIT09biYmKHIrPWVuY29kZVVSSUNvbXBvbmVudChlLnN1YnN0cmluZyhuKSkpLHZvaWQgMCE9PXI/cjplfWZ1bmN0aW9uIEMoZSl7Zm9yKHZhciB0PXZvaWQgMCxyPTA7cjxlLmxlbmd0aDtyKyspe3ZhciBuPWUuY2hhckNvZGVBdChyKTszNT09PW58fDYzPT09bj8odm9pZCAwPT09dCYmKHQ9ZS5zdWJzdHIoMCxyKSksdCs9dltuXSk6dm9pZCAwIT09dCYmKHQrPWVbcl0pfXJldHVybiB2b2lkIDAhPT10P3Q6ZX1mdW5jdGlvbiB3KGUsdCl7dD1lLmF1dGhvcml0eSYmMTxlLnBhdGgubGVuZ3RoJiYiZmlsZSI9PT1lLnNjaGVtZT8iLy8iLmNvbmNhdChlLmF1dGhvcml0eSkuY29uY2F0KGUucGF0aCk6NDc9PT1lLnBhdGguY2hhckNvZGVBdCgwKSYmKDY1PD1lLnBhdGguY2hhckNvZGVBdCgxKSYmZS5wYXRoLmNoYXJDb2RlQXQoMSk8PTkwfHw5Nzw9ZS5wYXRoLmNoYXJDb2RlQXQoMSkmJmUucGF0aC5jaGFyQ29kZUF0KDEpPD0xMjIpJiY1OD09PWUucGF0aC5jaGFyQ29kZUF0KDIpP3Q/ZS5wYXRoLnN1YnN0cigxKTplLnBhdGhbMV0udG9Mb3dlckNhc2UoKStlLnBhdGguc3Vic3RyKDIpOmUucGF0aDtyZXR1cm4gdD1uP3QucmVwbGFjZSgvXC8vZywiXFwiKTp0fWZ1bmN0aW9uIHMoZSx0KXt2YXIgcixuLGk9dD9DOnksbz0iIixhPWUuc2NoZW1lLHM9ZS5hdXRob3JpdHksbD1lLnBhdGgsYz1lLnF1ZXJ5LGU9ZS5mcmFnbWVudDtyZXR1cm4gYSYmKG89bythKyI6IiksIXMmJiJmaWxlIiE9PWF8fChvKz0iLy8iKSxzJiYoLTEhPT0oYT1zLmluZGV4T2YoIkAiKSkmJihyPXMuc3Vic3RyKDAsYSkscz1zLnN1YnN0cihhKzEpLC0xPT09KGE9ci5pbmRleE9mKCI6IikpP28rPWkociwhMSk6bz0obz1vK2koci5zdWJzdHIoMCxhKSwhMSkrIjoiKStpKHIuc3Vic3RyKGErMSksITEpLG8rPSJAIiksLTE9PT0oYT0ocz1zLnRvTG93ZXJDYXNlKCkpLmluZGV4T2YoIjoiKSk/bys9aShzLCExKTpvPShvKz1pKHMuc3Vic3RyKDAsYSksITEpKStzLnN1YnN0cihhKSksbCYmKDM8PWwubGVuZ3RoJiY0Nz09PWwuY2hhckNvZGVBdCgwKSYmNTg9PT1sLmNoYXJDb2RlQXQoMik/NjU8PShuPWwuY2hhckNvZGVBdCgxKSkmJm48PTkwJiYobD0iLyIuY29uY2F0KFN0cmluZy5mcm9tQ2hhckNvZGUobiszMiksIjoiKS5jb25jYXQobC5zdWJzdHIoMykpKToyPD1sLmxlbmd0aCYmNTg9PT1sLmNoYXJDb2RlQXQoMSkmJjY1PD0obj1sLmNoYXJDb2RlQXQoMCkpJiZuPD05MCYmKGw9IiIuY29uY2F0KFN0cmluZy5mcm9tQ2hhckNvZGUobiszMiksIjoiKS5jb25jYXQobC5zdWJzdHIoMikpKSxvKz1pKGwsITApKSxjJiYobz0obys9Ij8iKStpKGMsITEpKSxvPWU/KG8rPSIjIikrKHQ/ZTp5KGUsITEpKTpvfXZhciBfPS8oJVswLTlBLVphLXpdWzAtOUEtWmEtel0pKy9nO2Z1bmN0aW9uIGkoZSl7cmV0dXJuIGUubWF0Y2goXyk/ZS5yZXBsYWNlKF8sZnVuY3Rpb24gdChyKXt0cnl7cmV0dXJuIGRlY29kZVVSSUNvbXBvbmVudChyKX1jYXRjaChlKXtyZXR1cm4gMzxyLmxlbmd0aD9yLnN1YnN0cigwLDMpK3Qoci5zdWJzdHIoMykpOnJ9fSk6ZX1mdW5jdGlvbiBTKGUsdCxyKXtpZihyfHwyPT09YXJndW1lbnRzLmxlbmd0aClmb3IodmFyIG4saT0wLG89dC5sZW5ndGg7aTxvO2krKykhbiYmaSBpbiB0fHwoKG49bnx8QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwodCwwLGkpKVtpXT10W2ldKTtyZXR1cm4gZS5jb25jYXQobnx8QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwodCkpfXZhciBsLGU9dCg0NzApLGM9ZS5wb3NpeHx8ZTsodD1sPWx8fHt9KS5qb2luUGF0aD1mdW5jdGlvbihlKXtmb3IodmFyIHQ9W10scj0xO3I8YXJndW1lbnRzLmxlbmd0aDtyKyspdFtyLTFdPWFyZ3VtZW50c1tyXTtyZXR1cm4gZS53aXRoKHtwYXRoOmMuam9pbi5hcHBseShjLFMoW2UucGF0aF0sdCwhMSkpfSl9LHQucmVzb2x2ZVBhdGg9ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PVtdLHI9MTtyPGFyZ3VtZW50cy5sZW5ndGg7cisrKXRbci0xXT1hcmd1bWVudHNbcl07dmFyIG49ZS5wYXRofHwiLyI7cmV0dXJuIGUud2l0aCh7cGF0aDpjLnJlc29sdmUuYXBwbHkoYyxTKFtuXSx0LCExKSl9KX0sdC5kaXJuYW1lPWZ1bmN0aW9uKGUpe3ZhciB0PWMuZGlybmFtZShlLnBhdGgpO3JldHVybiAxPT09dC5sZW5ndGgmJjQ2PT09dC5jaGFyQ29kZUF0KDApP2U6ZS53aXRoKHtwYXRoOnR9KX0sdC5iYXNlbmFtZT1mdW5jdGlvbihlKXtyZXR1cm4gYy5iYXNlbmFtZShlLnBhdGgpfSx0LmV4dG5hbWU9ZnVuY3Rpb24oZSl7cmV0dXJuIGMuZXh0bmFtZShlLnBhdGgpfX19LE1vPXt9LFRvLmQ9KGUsdCk9Pntmb3IodmFyIHIgaW4gdClUby5vKHQscikmJiFUby5vKGUscikmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHIse2VudW1lcmFibGU6ITAsZ2V0OnRbcl19KX0sVG8ubz0oZSx0KT0+T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsdCksVG8ucj1lPT57InVuZGVmaW5lZCIhPXR5cGVvZiBTeW1ib2wmJlN5bWJvbC50b1N0cmluZ1RhZyYmT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsU3ltYm9sLnRvU3RyaW5nVGFnLHt2YWx1ZToiTW9kdWxlIn0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KX07dmFyIElvPVRvKDQ0NylbIlVSSSJdO3ZhciBWbz12aSxSbz0oRG8ucHJvdG90eXBlLm1hdGNoZXNQYXR0ZXJuPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0hMSxyPTAsbj10aGlzLmdsb2JXcmFwcGVycztyPG4ubGVuZ3RoO3IrKyl7dmFyIGk9bltyXSxvPWkucmVnZXhwLGk9aS5pbmNsdWRlO28udGVzdChlKSYmKHQ9aSl9cmV0dXJuIHR9LERvLnByb3RvdHlwZS5nZXRVUklzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudXJpc30sRG8pO2Z1bmN0aW9uIERvKGUsdCl7dGhpcy5nbG9iV3JhcHBlcnM9W107dHJ5e2Zvcih2YXIgcj0wLG49ZTtyPG4ubGVuZ3RoO3IrKyl7dmFyIGk9bltyXSxvPSIhIiE9PWlbMF07MDwoaT1vP2k6aS5zdWJzdHJpbmcoMSkpLmxlbmd0aCYmKCIvIj09PWlbMF0mJihpPWkuc3Vic3RyaW5nKDEpKSx0aGlzLmdsb2JXcmFwcGVycy5wdXNoKHtyZWdleHA6ZnVuY3Rpb24oZSx0KXtpZigic3RyaW5nIiE9dHlwZW9mIGUpdGhyb3cgbmV3IFR5cGVFcnJvcigiRXhwZWN0ZWQgYSBzdHJpbmciKTtmb3IodmFyIHIsbj1TdHJpbmcoZSksaT0iIixvPSEhdCYmISF0LmV4dGVuZGVkLHU9ISF0JiYhIXQuZ2xvYnN0YXIsYT0hMSxlPXQmJiJzdHJpbmciPT10eXBlb2YgdC5mbGFncz90LmZsYWdzOiIiLHM9MCxoPW4ubGVuZ3RoO3M8aDtzKyspc3dpdGNoKHI9bltzXSl7Y2FzZSIvIjpjYXNlIiQiOmNhc2UiXiI6Y2FzZSIrIjpjYXNlIi4iOmNhc2UiKCI6Y2FzZSIpIjpjYXNlIj0iOmNhc2UiISI6Y2FzZSJ8IjppKz0iXFwiK3I7YnJlYWs7Y2FzZSI/IjppZihvKXtpKz0iLiI7YnJlYWt9Y2FzZSJbIjpjYXNlIl0iOmlmKG8pe2krPXI7YnJlYWt9Y2FzZSJ7IjppZihvKXthPSEwLGkrPSIoIjticmVha31jYXNlIn0iOmlmKG8pe2E9ITEsaSs9IikiO2JyZWFrfWNhc2UiLCI6aWYoYSl7aSs9InwiO2JyZWFrfWkrPSJcXCIrcjticmVhaztjYXNlIioiOmZvcih2YXIgbD1uW3MtMV0sZj0xOyIqIj09PW5bcysxXTspZisrLHMrKzt2YXIgYz1uW3MrMV07dT8xPGYmJigiLyI9PT1sfHx2b2lkIDA9PT1sfHwieyI9PT1sfHwiLCI9PT1sKSYmKCIvIj09PWN8fHZvaWQgMD09PWN8fCIsIj09PWN8fCJ9Ij09PWMpPygiLyI9PT1jP3MrKzoiLyI9PT1sJiZpLmVuZHNXaXRoKCJcXC8iKSYmKGk9aS5zdWJzdHIoMCxpLmxlbmd0aC0yKSksaSs9IigoPzpbXi9dKig/Oi98JCkpKikiKTppKz0iKFteL10qKSI6aSs9Ii4qIjticmVhaztkZWZhdWx0OmkrPXJ9cmV0dXJuIGUmJn5lLmluZGV4T2YoImciKXx8KGk9Il4iK2krIiQiKSxuZXcgUmVnRXhwKGksZSl9KCIqKi8iK2kse2V4dGVuZGVkOiEwLGdsb2JzdGFyOiEwfSksaW5jbHVkZTpvfSkpfXRoaXMudXJpcz10fWNhdGNoKGUpe3RoaXMuZ2xvYldyYXBwZXJzLmxlbmd0aD0wLHRoaXMudXJpcz1bXX19S28ucHJvdG90eXBlLmdldFVucmVzb2x2ZWRTY2hlbWE9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy51bnJlc29sdmVkU2NoZW1hfHwodGhpcy51bnJlc29sdmVkU2NoZW1hPXRoaXMuc2VydmljZS5sb2FkU2NoZW1hKHRoaXMudXJpKSksdGhpcy51bnJlc29sdmVkU2NoZW1hfSxLby5wcm90b3R5cGUuZ2V0UmVzb2x2ZWRTY2hlbWE9ZnVuY3Rpb24oKXt2YXIgdD10aGlzO3JldHVybiB0aGlzLnJlc29sdmVkU2NoZW1hfHwodGhpcy5yZXNvbHZlZFNjaGVtYT10aGlzLmdldFVucmVzb2x2ZWRTY2hlbWEoKS50aGVuKGZ1bmN0aW9uKGUpe3JldHVybiB0LnNlcnZpY2UucmVzb2x2ZVNjaGVtYUNvbnRlbnQoZSx0KX0pKSx0aGlzLnJlc29sdmVkU2NoZW1hfSxLby5wcm90b3R5cGUuY2xlYXJTY2hlbWE9ZnVuY3Rpb24oKXt2YXIgZT0hIXRoaXMudW5yZXNvbHZlZFNjaGVtYTtyZXR1cm4gdGhpcy5yZXNvbHZlZFNjaGVtYT12b2lkIDAsdGhpcy51bnJlc29sdmVkU2NoZW1hPXZvaWQgMCx0aGlzLmRlcGVuZGVuY2llcy5jbGVhcigpLHRoaXMuYW5jaG9ycz12b2lkIDAsZX07dmFyIEZvPUtvO2Z1bmN0aW9uIEtvKGUsdCxyKXt0aGlzLnNlcnZpY2U9ZSx0aGlzLnVyaT10LHRoaXMuZGVwZW5kZW5jaWVzPW5ldyBTZXQsdGhpcy5hbmNob3JzPXZvaWQgMCxyJiYodGhpcy51bnJlc29sdmVkU2NoZW1hPXRoaXMuc2VydmljZS5wcm9taXNlLnJlc29sdmUobmV3IGpvKHIpKSl9dmFyIGpvPWZ1bmN0aW9uKGUsdCl7dm9pZCAwPT09dCYmKHQ9W10pLHRoaXMuc2NoZW1hPWUsdGhpcy5lcnJvcnM9dH0sVW89KEJvLnByb3RvdHlwZS5nZXRTZWN0aW9uPWZ1bmN0aW9uKGUpe2U9dGhpcy5nZXRTZWN0aW9uUmVjdXJzaXZlKGUsdGhpcy5zY2hlbWEpO2lmKGUpcmV0dXJuICRpKGUpfSxCby5wcm90b3R5cGUuZ2V0U2VjdGlvblJlY3Vyc2l2ZT1mdW5jdGlvbihlLHQpe2lmKCF0fHwiYm9vbGVhbiI9PXR5cGVvZiB0fHwwPT09ZS5sZW5ndGgpcmV0dXJuIHQ7dmFyIHI9ZS5zaGlmdCgpO2lmKHQucHJvcGVydGllcyYmKHQucHJvcGVydGllc1tyXSwxKSlyZXR1cm4gdGhpcy5nZXRTZWN0aW9uUmVjdXJzaXZlKGUsdC5wcm9wZXJ0aWVzW3JdKTtpZih0LnBhdHRlcm5Qcm9wZXJ0aWVzKWZvcih2YXIgbj0wLGk9T2JqZWN0LmtleXModC5wYXR0ZXJuUHJvcGVydGllcyk7bjxpLmxlbmd0aDtuKyspe3ZhciBvPWlbbl0sYT1JbihvKTtpZihudWxsIT1hJiZhLnRlc3QocikpcmV0dXJuIHRoaXMuZ2V0U2VjdGlvblJlY3Vyc2l2ZShlLHQucGF0dGVyblByb3BlcnRpZXNbb10pfWVsc2V7aWYoIm9iamVjdCI9PXR5cGVvZiB0LmFkZGl0aW9uYWxQcm9wZXJ0aWVzKXJldHVybiB0aGlzLmdldFNlY3Rpb25SZWN1cnNpdmUoZSx0LmFkZGl0aW9uYWxQcm9wZXJ0aWVzKTtpZihyLm1hdGNoKCJbMC05XSsiKSlpZihBcnJheS5pc0FycmF5KHQuaXRlbXMpKXt2YXIgcz1wYXJzZUludChyLDEwKTtpZighaXNOYU4ocykmJnQuaXRlbXNbc10pcmV0dXJuIHRoaXMuZ2V0U2VjdGlvblJlY3Vyc2l2ZShlLHQuaXRlbXNbc10pfWVsc2UgaWYodC5pdGVtcylyZXR1cm4gdGhpcy5nZXRTZWN0aW9uUmVjdXJzaXZlKGUsdC5pdGVtcyl9fSxCbyk7ZnVuY3Rpb24gQm8oZSx0KXt2b2lkIDA9PT10JiYodD1bXSksdGhpcy5zY2hlbWE9ZSx0aGlzLmVycm9ycz10fSRvLnByb3RvdHlwZS5nZXRSZWdpc3RlcmVkU2NoZW1hSWRzPWZ1bmN0aW9uKHQpe3JldHVybiBPYmplY3Qua2V5cyh0aGlzLnJlZ2lzdGVyZWRTY2hlbWFzSWRzKS5maWx0ZXIoZnVuY3Rpb24oZSl7ZT1Jby5wYXJzZShlKS5zY2hlbWU7cmV0dXJuInNjaGVtYXNlcnZpY2UiIT09ZSYmKCF0fHx0KGUpKX0pfSxPYmplY3QuZGVmaW5lUHJvcGVydHkoJG8ucHJvdG90eXBlLCJwcm9taXNlIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucHJvbWlzZUNvbnN0cnVjdG9yfSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLCRvLnByb3RvdHlwZS5kaXNwb3NlPWZ1bmN0aW9uKCl7Zm9yKDswPHRoaXMuY2FsbE9uRGlzcG9zZS5sZW5ndGg7KXRoaXMuY2FsbE9uRGlzcG9zZS5wb3AoKSgpfSwkby5wcm90b3R5cGUub25SZXNvdXJjZUNoYW5nZT1mdW5jdGlvbihlKXtmb3IodmFyIHQ9dGhpcyxyPSh0aGlzLmNhY2hlZFNjaGVtYUZvclJlc291cmNlPXZvaWQgMCwhMSksbj1bZT16byhlKV0saT1PYmplY3Qua2V5cyh0aGlzLnNjaGVtYXNCeUlkKS5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIHQuc2NoZW1hc0J5SWRbZV19KTtuLmxlbmd0aDspZm9yKHZhciBvPW4ucG9wKCksYT0wO2E8aS5sZW5ndGg7YSsrKXt2YXIgcz1pW2FdO3MmJihzLnVyaT09PW98fHMuZGVwZW5kZW5jaWVzLmhhcyhvKSkmJihzLnVyaSE9PW8mJm4ucHVzaChzLnVyaSkscy5jbGVhclNjaGVtYSgpJiYocj0hMCksaVthXT12b2lkIDApfXJldHVybiByfSwkby5wcm90b3R5cGUuc2V0U2NoZW1hQ29udHJpYnV0aW9ucz1mdW5jdGlvbihlKXtpZihlLnNjaGVtYXMpe3ZhciB0LHI9ZS5zY2hlbWFzO2Zvcih0IGluIHIpe3ZhciBuPXpvKHQpO3RoaXMuY29udHJpYnV0aW9uU2NoZW1hc1tuXT10aGlzLmFkZFNjaGVtYUhhbmRsZShuLHJbdF0pfX1pZihBcnJheS5pc0FycmF5KGUuc2NoZW1hQXNzb2NpYXRpb25zKSlmb3IodmFyIGk9MCxvPWUuc2NoZW1hQXNzb2NpYXRpb25zO2k8by5sZW5ndGg7aSsrKXt2YXIgYT1vW2ldLHM9YS51cmlzLm1hcCh6byksYT10aGlzLmFkZEZpbGVQYXR0ZXJuQXNzb2NpYXRpb24oYS5wYXR0ZXJuLHMpO3RoaXMuY29udHJpYnV0aW9uQXNzb2NpYXRpb25zLnB1c2goYSl9fSwkby5wcm90b3R5cGUuYWRkU2NoZW1hSGFuZGxlPWZ1bmN0aW9uKGUsdCl7dD1uZXcgRm8odGhpcyxlLHQpO3JldHVybiB0aGlzLnNjaGVtYXNCeUlkW2VdPXR9LCRvLnByb3RvdHlwZS5nZXRPckFkZFNjaGVtYUhhbmRsZT1mdW5jdGlvbihlLHQpe3JldHVybiB0aGlzLnNjaGVtYXNCeUlkW2VdfHx0aGlzLmFkZFNjaGVtYUhhbmRsZShlLHQpfSwkby5wcm90b3R5cGUuYWRkRmlsZVBhdHRlcm5Bc3NvY2lhdGlvbj1mdW5jdGlvbihlLHQpe2U9bmV3IFJvKGUsdCk7cmV0dXJuIHRoaXMuZmlsZVBhdHRlcm5Bc3NvY2lhdGlvbnMucHVzaChlKSxlfSwkby5wcm90b3R5cGUucmVnaXN0ZXJFeHRlcm5hbFNjaGVtYT1mdW5jdGlvbihlLHQscil7ZT16byhlKTtyZXR1cm4gdGhpcy5yZWdpc3RlcmVkU2NoZW1hc0lkc1tlXT0hMCx0aGlzLmNhY2hlZFNjaGVtYUZvclJlc291cmNlPXZvaWQgMCx0JiZ0aGlzLmFkZEZpbGVQYXR0ZXJuQXNzb2NpYXRpb24odCxbZV0pLHI/dGhpcy5hZGRTY2hlbWFIYW5kbGUoZSxyKTp0aGlzLmdldE9yQWRkU2NoZW1hSGFuZGxlKGUpfSwkby5wcm90b3R5cGUuY2xlYXJFeHRlcm5hbFNjaGVtYXM9ZnVuY3Rpb24oKXtmb3IodmFyIGUgaW4gdGhpcy5zY2hlbWFzQnlJZD17fSx0aGlzLmZpbGVQYXR0ZXJuQXNzb2NpYXRpb25zPVtdLHRoaXMucmVnaXN0ZXJlZFNjaGVtYXNJZHM9e30sdGhpcy5jYWNoZWRTY2hlbWFGb3JSZXNvdXJjZT12b2lkIDAsdGhpcy5jb250cmlidXRpb25TY2hlbWFzKXRoaXMuc2NoZW1hc0J5SWRbZV09dGhpcy5jb250cmlidXRpb25TY2hlbWFzW2VdLHRoaXMucmVnaXN0ZXJlZFNjaGVtYXNJZHNbZV09ITA7Zm9yKHZhciB0PTAscj10aGlzLmNvbnRyaWJ1dGlvbkFzc29jaWF0aW9uczt0PHIubGVuZ3RoO3QrKyl7dmFyIG49clt0XTt0aGlzLmZpbGVQYXR0ZXJuQXNzb2NpYXRpb25zLnB1c2gobil9fSwkby5wcm90b3R5cGUuZ2V0UmVzb2x2ZWRTY2hlbWE9ZnVuY3Rpb24oZSl7ZT16byhlKSxlPXRoaXMuc2NoZW1hc0J5SWRbZV07cmV0dXJuIGU/ZS5nZXRSZXNvbHZlZFNjaGVtYSgpOnRoaXMucHJvbWlzZS5yZXNvbHZlKHZvaWQgMCl9LCRvLnByb3RvdHlwZS5sb2FkU2NoZW1hPWZ1bmN0aW9uKHIpe3ZhciBlO3JldHVybiB0aGlzLnJlcXVlc3RTZXJ2aWNlP3RoaXMucmVxdWVzdFNlcnZpY2UocikudGhlbihmdW5jdGlvbihlKXtpZighZSlyZXR1cm4gdD1WbygianNvbi5zY2hlbWEubm9jb250ZW50IiwiVW5hYmxlIHRvIGxvYWQgc2NoZW1hIGZyb20gJ3swfSc6IE5vIGNvbnRlbnQuIixKbyhyKSksbmV3IGpvKHt9LFt0XSk7dmFyIHQ9W10sZT14bihlLHQpLHQ9dC5sZW5ndGg/W1ZvKCJqc29uLnNjaGVtYS5pbnZhbGlkRm9ybWF0IiwiVW5hYmxlIHRvIHBhcnNlIGNvbnRlbnQgZnJvbSAnezB9JzogUGFyc2UgZXJyb3IgYXQgb2Zmc2V0IHsxfS4iLEpvKHIpLHRbMF0ub2Zmc2V0KV06W107cmV0dXJuIG5ldyBqbyhlLHQpfSxmdW5jdGlvbihlKXt2YXIgdD1lLnRvU3RyaW5nKCksZT1lLnRvU3RyaW5nKCkuc3BsaXQoIkVycm9yOiAiKTtyZXR1cm4gVG4odD0xPGUubGVuZ3RoP2VbMV06dCwiLiIpJiYodD10LnN1YnN0cigwLHQubGVuZ3RoLTEpKSxuZXcgam8oe30sW1ZvKCJqc29uLnNjaGVtYS5ub2NvbnRlbnQiLCJVbmFibGUgdG8gbG9hZCBzY2hlbWEgZnJvbSAnezB9JzogezF9LiIsSm8ociksdCldKX0pOihlPVZvKCJqc29uLnNjaGVtYS5ub3JlcXVlc3RzZXJ2aWNlIiwiVW5hYmxlIHRvIGxvYWQgc2NoZW1hIGZyb20gJ3swfScuIE5vIHNjaGVtYSByZXF1ZXN0IHNlcnZpY2UgYXZhaWxhYmxlIixKbyhyKSksdGhpcy5wcm9taXNlLnJlc29sdmUobmV3IGpvKHt9LFtlXSkpKX0sJG8ucHJvdG90eXBlLnJlc29sdmVTY2hlbWFDb250ZW50PWZ1bmN0aW9uKGUsdCl7dmFyIHM9dGhpcyxsPWUuZXJyb3JzLnNsaWNlKDApLHI9ZS5zY2hlbWE7aWYoci4kc2NoZW1hKXtlPXpvKHIuJHNjaGVtYSk7aWYoImh0dHA6Ly9qc29uLXNjaGVtYS5vcmcvZHJhZnQtMDMvc2NoZW1hIj09PWUpcmV0dXJuIHRoaXMucHJvbWlzZS5yZXNvbHZlKG5ldyBVbyh7fSxbVm8oImpzb24uc2NoZW1hLmRyYWZ0MDMubm90c3VwcG9ydGVkIiwiRHJhZnQtMDMgc2NoZW1hcyBhcmUgbm90IHN1cHBvcnRlZC4iKV0pKTsiaHR0cHM6Ly9qc29uLXNjaGVtYS5vcmcvZHJhZnQvMjAxOS0wOS9zY2hlbWEiPT09ZT9sLnB1c2goVm8oImpzb24uc2NoZW1hLmRyYWZ0MjAxOTA5Lm5vdHN1cHBvcnRlZCIsIkRyYWZ0IDIwMTktMDkgc2NoZW1hcyBhcmUgbm90IHlldCBmdWxseSBzdXBwb3J0ZWQuIikpOiJodHRwczovL2pzb24tc2NoZW1hLm9yZy9kcmFmdC8yMDIwLTEyL3NjaGVtYSI9PT1lJiZsLnB1c2goVm8oImpzb24uc2NoZW1hLmRyYWZ0MjAyMDEyLm5vdHN1cHBvcnRlZCIsIkRyYWZ0IDIwMjAtMTIgc2NoZW1hcyBhcmUgbm90IHlldCBmdWxseSBzdXBwb3J0ZWQuIikpfXZhciBjPXRoaXMuY29udGV4dFNlcnZpY2UsaT1mdW5jdGlvbihlLHQpe3Q9ZGVjb2RlVVJJQ29tcG9uZW50KHQpO3ZhciByPWU7cmV0dXJuKHQ9Ii8iPT09dFswXT90LnN1YnN0cmluZygxKTp0KS5zcGxpdCgiLyIpLnNvbWUoZnVuY3Rpb24oZSl7cmV0dXJuIGU9ZS5yZXBsYWNlKC9+MS9nLCIvIikucmVwbGFjZSgvfjAvZywifiIpLCEocj1yW2VdKX0pLHJ9LG89ZnVuY3Rpb24oZSx0LHIpe3JldHVybiB0LmFuY2hvcnN8fCh0LmFuY2hvcnM9bihlKSksdC5hbmNob3JzLmdldChyKX0sYT1mdW5jdGlvbihlLHQpe2Zvcih2YXIgciBpbiB0KXQuaGFzT3duUHJvcGVydHkocikmJiFlLmhhc093blByb3BlcnR5KHIpJiYiaWQiIT09ciYmIiRpZCIhPT1yJiYoZVtyXT10W3JdKX0sdT1mdW5jdGlvbihlLHQscixuKXt0PXZvaWQgMD09PW58fDA9PT1uLmxlbmd0aD90OiIvIj09PW4uY2hhckF0KDApP2kodCxuKTpvKHQscixuKTt0P2EoZSx0KTpsLnB1c2goVm8oImpzb24uc2NoZW1hLmludmFsaWRpZCIsIiRyZWYgJ3swfScgaW4gJ3sxfScgY2FuIG5vdCBiZSByZXNvbHZlZC4iLG4sci51cmkpKX0sZj1mdW5jdGlvbihyLG4saSxvKXtuPXpvKG49YyYmIS9eW0EtWmEtel1bQS1aYS16MC05K1wtLitdKjpcL1wvLiovLnRlc3Qobik/Yy5yZXNvbHZlUmVsYXRpdmVQYXRoKG4sby51cmkpOm4pO3ZhciBhPXMuZ2V0T3JBZGRTY2hlbWFIYW5kbGUobik7cmV0dXJuIGEuZ2V0VW5yZXNvbHZlZFNjaGVtYSgpLnRoZW4oZnVuY3Rpb24oZSl7dmFyIHQ7cmV0dXJuIG8uZGVwZW5kZW5jaWVzLmFkZChuKSxlLmVycm9ycy5sZW5ndGgmJih0PWk/bisiIyIraTpuLGwucHVzaChWbygianNvbi5zY2hlbWEucHJvYmxlbWxvYWRpbmdyZWYiLCJQcm9ibGVtcyBsb2FkaW5nIHJlZmVyZW5jZSAnezB9JzogezF9Iix0LGUuZXJyb3JzWzBdKSkpLHUocixlLnNjaGVtYSxhLGkpLGgocixlLnNjaGVtYSxhKX0pfSxoPWZ1bmN0aW9uKGUsaSxvKXt2YXIgYT1bXTtyZXR1cm4gcy50cmF2ZXJzZU5vZGVzKGUsZnVuY3Rpb24oZSl7Zm9yKHZhciB0PW5ldyBTZXQ7ZS4kcmVmOyl7dmFyIHI9ZS4kcmVmLG49ci5zcGxpdCgiIyIsMik7aWYoZGVsZXRlIGUuJHJlZiwwPG5bMF0ubGVuZ3RoKXJldHVybiB2b2lkIGEucHVzaChmKGUsblswXSxuWzFdLG8pKTt0LmhhcyhyKXx8KG49blsxXSx1KGUsaSxvLG4pLHQuYWRkKHIpKX19KSxzLnByb21pc2UuYWxsKGEpfSxuPWZ1bmN0aW9uKGUpe3ZhciBuPW5ldyBNYXA7cmV0dXJuIHMudHJhdmVyc2VOb2RlcyhlLGZ1bmN0aW9uKGUpe3ZhciB0LHI9ZS4kaWR8fGUuaWQ7InN0cmluZyI9PXR5cGVvZiByJiYiIyI9PT1yLmNoYXJBdCgwKSYmKHQ9ci5zdWJzdHJpbmcoMSksbi5oYXModCk/bC5wdXNoKFZvKCJqc29uLnNjaGVtYS5kdXBsaWNhdGVpZCIsIkR1cGxpY2F0ZSBpZCBkZWNsYXJhdGlvbjogJ3swfSciLHIpKTpuLnNldCh0LGUpKX0pLG59O3JldHVybiBoKHIscix0KS50aGVuKGZ1bmN0aW9uKGUpe3JldHVybiBuZXcgVW8ocixsKX0pfSwkby5wcm90b3R5cGUudHJhdmVyc2VOb2Rlcz1mdW5jdGlvbihlLHQpe2lmKCFlfHwib2JqZWN0IiE9dHlwZW9mIGUpcmV0dXJuIFByb21pc2UucmVzb2x2ZShudWxsKTtmb3IodmFyIHI9bmV3IFNldCxsPVtlXSxuPWwucG9wKCk7bjspci5oYXMobil8fChyLmFkZChuKSx0KG4pLGZ1bmN0aW9uKCl7Zm9yKHZhciBlPVtdLHQ9MDt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKWVbdF09YXJndW1lbnRzW3RdO2Zvcih2YXIgcj0wLG49ZTtyPG4ubGVuZ3RoO3IrKyl7dmFyIGk9bltyXTsib2JqZWN0Ij09dHlwZW9mIGkmJmwucHVzaChpKX19KG4uaXRlbXMsbi5hZGRpdGlvbmFsSXRlbXMsbi5hZGRpdGlvbmFsUHJvcGVydGllcyxuLm5vdCxuLmNvbnRhaW5zLG4ucHJvcGVydHlOYW1lcyxuLmlmLG4udGhlbixuLmVsc2UpLGZ1bmN0aW9uKCl7Zm9yKHZhciBlPVtdLHQ9MDt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKWVbdF09YXJndW1lbnRzW3RdO2Zvcih2YXIgcj0wLG49ZTtyPG4ubGVuZ3RoO3IrKyl7dmFyIGk9bltyXTtpZigib2JqZWN0Ij09dHlwZW9mIGkpZm9yKHZhciBvIGluIGkpe289aVtvXTsib2JqZWN0Ij09dHlwZW9mIG8mJmwucHVzaChvKX19fShuLmRlZmluaXRpb25zLG4ucHJvcGVydGllcyxuLnBhdHRlcm5Qcm9wZXJ0aWVzLG4uZGVwZW5kZW5jaWVzKSxmdW5jdGlvbigpe2Zvcih2YXIgZT1bXSx0PTA7dDxhcmd1bWVudHMubGVuZ3RoO3QrKyllW3RdPWFyZ3VtZW50c1t0XTtmb3IodmFyIHI9MCxuPWU7cjxuLmxlbmd0aDtyKyspe3ZhciBpPW5bcl07aWYoQXJyYXkuaXNBcnJheShpKSlmb3IodmFyIG89MCxhPWk7bzxhLmxlbmd0aDtvKyspe3ZhciBzPWFbb107Im9iamVjdCI9PXR5cGVvZiBzJiZsLnB1c2gocyl9fX0obi5hbnlPZixuLmFsbE9mLG4ub25lT2Ysbi5pdGVtcykpLG49bC5wb3AoKX0sJG8ucHJvdG90eXBlLmdldFNjaGVtYUZyb21Qcm9wZXJ0eT1mdW5jdGlvbihlLHQpe3ZhciByO2lmKCJvYmplY3QiPT09KG51bGw9PT0ocj10LnJvb3QpfHx2b2lkIDA9PT1yP3ZvaWQgMDpyLnR5cGUpKWZvcih2YXIgbj0wLGk9dC5yb290LnByb3BlcnRpZXM7bjxpLmxlbmd0aDtuKyspe3ZhciBvLGE9aVtuXTtpZigiJHNjaGVtYSI9PT1hLmtleU5vZGUudmFsdWUmJiJzdHJpbmciPT09KG51bGw9PT0obz1hLnZhbHVlTm9kZSl8fHZvaWQgMD09PW8/dm9pZCAwOm8udHlwZSkpcmV0dXJuIG89YS52YWx1ZU5vZGUudmFsdWUsdGhpcy5jb250ZXh0U2VydmljZSYmIS9eXHdbXHdcZCsuLV0qOi8udGVzdChvKT90aGlzLmNvbnRleHRTZXJ2aWNlLnJlc29sdmVSZWxhdGl2ZVBhdGgobyxlKTpvfX0sJG8ucHJvdG90eXBlLmdldEFzc29jaWF0ZWRTY2hlbWFzPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD1PYmplY3QuY3JlYXRlKG51bGwpLHI9W10sbj1mdW5jdGlvbih0KXt0cnl7cmV0dXJuIElvLnBhcnNlKHQpLndpdGgoe2ZyYWdtZW50Om51bGwscXVlcnk6bnVsbH0pLnRvU3RyaW5nKCl9Y2F0Y2goZSl7cmV0dXJuIHR9fShlKSxpPTAsbz10aGlzLmZpbGVQYXR0ZXJuQXNzb2NpYXRpb25zO2k8by5sZW5ndGg7aSsrKXt2YXIgYT1vW2ldO2lmKGEubWF0Y2hlc1BhdHRlcm4obikpZm9yKHZhciBzPTAsbD1hLmdldFVSSXMoKTtzPGwubGVuZ3RoO3MrKyl7dmFyIGM9bFtzXTt0W2NdfHwoci5wdXNoKGMpLHRbY109ITApfX1yZXR1cm4gcn0sJG8ucHJvdG90eXBlLmdldFNjaGVtYVVSSXNGb3JSZXNvdXJjZT1mdW5jdGlvbihlLHQpe3Q9dCYmdGhpcy5nZXRTY2hlbWFGcm9tUHJvcGVydHkoZSx0KTtyZXR1cm4gdD9bdF06dGhpcy5nZXRBc3NvY2lhdGVkU2NoZW1hcyhlKX0sJG8ucHJvdG90eXBlLmdldFNjaGVtYUZvclJlc291cmNlPWZ1bmN0aW9uKGUsdCl7aWYodCl7dmFyIHQ9dGhpcy5nZXRTY2hlbWFGcm9tUHJvcGVydHkoZSx0KTtpZih0KXJldHVybiB0PXpvKHQpLHRoaXMuZ2V0T3JBZGRTY2hlbWFIYW5kbGUodCkuZ2V0UmVzb2x2ZWRTY2hlbWEoKX1pZih0aGlzLmNhY2hlZFNjaGVtYUZvclJlc291cmNlJiZ0aGlzLmNhY2hlZFNjaGVtYUZvclJlc291cmNlLnJlc291cmNlPT09ZSlyZXR1cm4gdGhpcy5jYWNoZWRTY2hlbWFGb3JSZXNvdXJjZS5yZXNvbHZlZFNjaGVtYTt0PXRoaXMuZ2V0QXNzb2NpYXRlZFNjaGVtYXMoZSksdD0wPHQubGVuZ3RoP3RoaXMuY3JlYXRlQ29tYmluZWRTY2hlbWEoZSx0KS5nZXRSZXNvbHZlZFNjaGVtYSgpOnRoaXMucHJvbWlzZS5yZXNvbHZlKHZvaWQgMCk7cmV0dXJuIHRoaXMuY2FjaGVkU2NoZW1hRm9yUmVzb3VyY2U9e3Jlc291cmNlOmUscmVzb2x2ZWRTY2hlbWE6dH0sdH0sJG8ucHJvdG90eXBlLmNyZWF0ZUNvbWJpbmVkU2NoZW1hPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIDE9PT10Lmxlbmd0aD90aGlzLmdldE9yQWRkU2NoZW1hSGFuZGxlKHRbMF0pOihlPSJzY2hlbWFzZXJ2aWNlOi8vY29tYmluZWRTY2hlbWEvIitlbmNvZGVVUklDb21wb25lbnQoZSksdD17YWxsT2Y6dC5tYXAoZnVuY3Rpb24oZSl7cmV0dXJueyRyZWY6ZX19KX0sdGhpcy5hZGRTY2hlbWFIYW5kbGUoZSx0KSl9LCRvLnByb3RvdHlwZS5nZXRNYXRjaGluZ1NjaGVtYXM9ZnVuY3Rpb24oZSx0LHIpe3ZhciBuO3JldHVybiByPyhuPXIuaWR8fCJzY2hlbWFzZXJ2aWNlOi8vdW50aXRsZWQvbWF0Y2hpbmdTY2hlbWFzLyIrSG8rKyx0aGlzLmFkZFNjaGVtYUhhbmRsZShuLHIpLmdldFJlc29sdmVkU2NoZW1hKCkudGhlbihmdW5jdGlvbihlKXtyZXR1cm4gdC5nZXRNYXRjaGluZ1NjaGVtYXMoZS5zY2hlbWEpLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4hZS5pbnZlcnRlZH0pfSkpOnRoaXMuZ2V0U2NoZW1hRm9yUmVzb3VyY2UoZS51cmksdCkudGhlbihmdW5jdGlvbihlKXtyZXR1cm4gZT90LmdldE1hdGNoaW5nU2NoZW1hcyhlLnNjaGVtYSkuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiFlLmludmVydGVkfSk6W119KX07dmFyIHFvPSRvO2Z1bmN0aW9uICRvKGUsdCxyKXt0aGlzLmNvbnRleHRTZXJ2aWNlPXQsdGhpcy5yZXF1ZXN0U2VydmljZT1lLHRoaXMucHJvbWlzZUNvbnN0cnVjdG9yPXJ8fFByb21pc2UsdGhpcy5jYWxsT25EaXNwb3NlPVtdLHRoaXMuY29udHJpYnV0aW9uU2NoZW1hcz17fSx0aGlzLmNvbnRyaWJ1dGlvbkFzc29jaWF0aW9ucz1bXSx0aGlzLnNjaGVtYXNCeUlkPXt9LHRoaXMuZmlsZVBhdHRlcm5Bc3NvY2lhdGlvbnM9W10sdGhpcy5yZWdpc3RlcmVkU2NoZW1hc0lkcz17fX12YXIgV28sSG89MDtmdW5jdGlvbiB6byh0KXt0cnl7cmV0dXJuIElvLnBhcnNlKHQpLnRvU3RyaW5nKCl9Y2F0Y2goZSl7cmV0dXJuIHR9fWZ1bmN0aW9uIEpvKGUpe3RyeXt2YXIgdD1Jby5wYXJzZShlKTtpZigiZmlsZSI9PT10LnNjaGVtZSlyZXR1cm4gdC5mc1BhdGh9Y2F0Y2goZSl7fXJldHVybiBlfWZ1bmN0aW9uIEdvKGUsdCl7dmFyIHI9W10sdT1bXSxuPVtdLGg9LTEsaT1BbihlLmdldFRleHQoKSwhMSksZj1pLnNjYW4oKTtmdW5jdGlvbiBkKGUpe3IucHVzaChlKSx1LnB1c2gobi5sZW5ndGgpfWZvcig7MTchPT1mOyl7c3dpdGNoKGYpe2Nhc2UgMTpjYXNlIDM6dmFyIG89e3N0YXJ0TGluZTphPWUucG9zaXRpb25BdChpLmdldFRva2VuT2Zmc2V0KCkpLmxpbmUsZW5kTGluZTphLGtpbmQ6MT09PWY/Im9iamVjdCI6ImFycmF5In07bi5wdXNoKG8pO2JyZWFrO2Nhc2UgMjpjYXNlIDQ6MDxuLmxlbmd0aCYmbltuLmxlbmd0aC0xXS5raW5kPT09KDI9PT1mPyJvYmplY3QiOiJhcnJheSIpJiYobz1uLnBvcCgpLHM9ZS5wb3NpdGlvbkF0KGkuZ2V0VG9rZW5PZmZzZXQoKSkubGluZSxvJiZzPm8uc3RhcnRMaW5lKzEmJmghPT1vLnN0YXJ0TGluZSYmKG8uZW5kTGluZT1zLTEsZChvKSxoPW8uc3RhcnRMaW5lKSk7YnJlYWs7Y2FzZSAxMzp2YXIgYT1lLnBvc2l0aW9uQXQoaS5nZXRUb2tlbk9mZnNldCgpKS5saW5lLG09ZS5wb3NpdGlvbkF0KGkuZ2V0VG9rZW5PZmZzZXQoKStpLmdldFRva2VuTGVuZ3RoKCkpLmxpbmU7MT09PWkuZ2V0VG9rZW5FcnJvcigpJiZhKzE8ZS5saW5lQ291bnQ/aS5zZXRQb3NpdGlvbihlLm9mZnNldEF0KHNuLmNyZWF0ZShhKzEsMCkpKTphPG0mJihkKHtzdGFydExpbmU6YSxlbmRMaW5lOm0sa2luZDp1bi5Db21tZW50fSksaD1hKTticmVhaztjYXNlIDEyOm09ZS5nZXRUZXh0KCkuc3Vic3RyKGkuZ2V0VG9rZW5PZmZzZXQoKSxpLmdldFRva2VuTGVuZ3RoKCkpLm1hdGNoKC9eXC9cL1xzKiMocmVnaW9uXGIpfChlbmRyZWdpb25cYikvKTtpZihtKXt2YXIgcz1lLnBvc2l0aW9uQXQoaS5nZXRUb2tlbk9mZnNldCgpKS5saW5lO2lmKG1bMV0pe289e3N0YXJ0TGluZTpzLGVuZExpbmU6cyxraW5kOnVuLlJlZ2lvbn07bi5wdXNoKG8pfWVsc2V7Zm9yKHZhciBsPW4ubGVuZ3RoLTE7MDw9bCYmbltsXS5raW5kIT09dW4uUmVnaW9uOylsLS07MDw9bCYmKG89bltsXSxuLmxlbmd0aD1sLHM+by5zdGFydExpbmUmJmghPT1vLnN0YXJ0TGluZSYmKG8uZW5kTGluZT1zLGQobyksaD1vLnN0YXJ0TGluZSkpfX19Zj1pLnNjYW4oKX12YXIgZz10JiZ0LnJhbmdlTGltaXQ7aWYoIm51bWJlciIhPXR5cGVvZiBnfHxyLmxlbmd0aDw9ZylyZXR1cm4gcjt0JiZ0Lm9uUmFuZ2VMaW1pdEV4Y2VlZGVkJiZ0Lm9uUmFuZ2VMaW1pdEV4Y2VlZGVkKGUudXJpKTtmb3IodmFyIHA9W10sYj0wLHY9dTtiPHYubGVuZ3RoO2IrKykoYz12W2JdKTwzMCYmKHBbY109KHBbY118fDApKzEpO2Zvcih2YXIgeT0wLEM9MCxsPTA7bDxwLmxlbmd0aDtsKyspe3ZhciB3PXBbbF07aWYodyl7aWYoZzx3K3kpe0M9bDticmVha315Kz13fX1mb3IodmFyIGMsXz1bXSxsPTA7bDxyLmxlbmd0aDtsKyspIm51bWJlciI9PXR5cGVvZihjPXVbbF0pJiYoYzxDfHxjPT09QyYmeSsrPGcpJiZfLnB1c2gocltsXSk7cmV0dXJuIF99ZnVuY3Rpb24gWm8odSxlLGgpe2Z1bmN0aW9uIGYoZSx0KXtyZXR1cm4gbG4uY3JlYXRlKHUucG9zaXRpb25BdChlKSx1LnBvc2l0aW9uQXQodCkpfXZhciBkPUFuKHUuZ2V0VGV4dCgpLCEwKTtyZXR1cm4gZS5tYXAoZnVuY3Rpb24oZSl7Zm9yKHZhciB0LHIsbj11Lm9mZnNldEF0KGUpLGk9aC5nZXROb2RlRnJvbU9mZnNldChuLCEwKSxvPVtdO2k7KXtzd2l0Y2goaS50eXBlKXtjYXNlInN0cmluZyI6Y2FzZSJvYmplY3QiOmNhc2UiYXJyYXkiOnZhciBhPWkub2Zmc2V0KzEscz1pLm9mZnNldCtpLmxlbmd0aC0xO2E8cyYmYTw9biYmbjw9cyYmby5wdXNoKGYoYSxzKSksby5wdXNoKGYoaS5vZmZzZXQsaS5vZmZzZXQraS5sZW5ndGgpKTticmVhaztjYXNlIm51bWJlciI6Y2FzZSJib29sZWFuIjpjYXNlIm51bGwiOmNhc2UicHJvcGVydHkiOm8ucHVzaChmKGkub2Zmc2V0LGkub2Zmc2V0K2kubGVuZ3RoKSl9KCJwcm9wZXJ0eSI9PT1pLnR5cGV8fGkucGFyZW50JiYiYXJyYXkiPT09aS5wYXJlbnQudHlwZSkmJih0PWkub2Zmc2V0K2kubGVuZ3RoLHI9NSxkLnNldFBvc2l0aW9uKHQpLC0xIT09KHQ9ZC5zY2FuKCkhPT1yPy0xOmQuZ2V0VG9rZW5PZmZzZXQoKStkLmdldFRva2VuTGVuZ3RoKCkpJiZvLnB1c2goZihpLm9mZnNldCx0KSkpLGk9aS5wYXJlbnR9Zm9yKHZhciBsPXZvaWQgMCxjPW8ubGVuZ3RoLTE7MDw9YztjLS0pbD1paS5jcmVhdGUob1tjXSxsKTtyZXR1cm4gbD1sfHxpaS5jcmVhdGUobG4uY3JlYXRlKGUsZSkpfSl9ZnVuY3Rpb24gWG8ocixuKXt2YXIgaT1bXTtyZXR1cm4gbi52aXNpdChmdW5jdGlvbihlKXt2YXIgdDtyZXR1cm4icHJvcGVydHkiPT09ZS50eXBlJiYiJHJlZiI9PT1lLmtleU5vZGUudmFsdWUmJiJzdHJpbmciPT09KG51bGw9PT0odD1lLnZhbHVlTm9kZSl8fHZvaWQgMD09PXQ/dm9pZCAwOnQudHlwZSkmJih0PWUudmFsdWVOb2RlLnZhbHVlLCh0PWZ1bmN0aW9uKGUsdCl7dD1mdW5jdGlvbihlKXtyZXR1cm4iIyIhPT1lPyIjIj09PWVbMF0mJiIvIj09PWVbMV0/ZS5zdWJzdHJpbmcoMikuc3BsaXQoL1wvLykubWFwKFFvKTpudWxsOltdfSh0KTtyZXR1cm4gdD9mdW5jdGlvbiBlKHQscil7aWYoIXIpcmV0dXJuIG51bGw7aWYoMD09PXQubGVuZ3RoKXJldHVybiByO3ZhciBuPXQuc2hpZnQoKTt7dmFyIGk7e2lmKHImJiJvYmplY3QiPT09ci50eXBlKXJldHVybihpPXIucHJvcGVydGllcy5maW5kKGZ1bmN0aW9uKGUpe3JldHVybiBlLmtleU5vZGUudmFsdWU9PT1ufSkpP2UodCxpLnZhbHVlTm9kZSk6bnVsbDtpZihyJiYiYXJyYXkiPT09ci50eXBlKWlmKG4ubWF0Y2goL14oMHxbMS05XVswLTldKikkLykpcmV0dXJuIGk9TnVtYmVyLnBhcnNlSW50KG4pLChyPXIuaXRlbXNbaV0pP2UodCxyKTpudWxsfX1yZXR1cm4gbnVsbH0odCxlLnJvb3QpOm51bGx9KG4sdCkpJiYodD1yLnBvc2l0aW9uQXQodC5vZmZzZXQpLGkucHVzaCh7dGFyZ2V0OiIiLmNvbmNhdChyLnVyaSwiIyIpLmNvbmNhdCh0LmxpbmUrMSwiLCIpLmNvbmNhdCh0LmNoYXJhY3RlcisxKSxyYW5nZToodD1yLGU9ZS52YWx1ZU5vZGUsbG4uY3JlYXRlKHQucG9zaXRpb25BdChlLm9mZnNldCsxKSx0LnBvc2l0aW9uQXQoZS5vZmZzZXQrZS5sZW5ndGgtMSkpKX0pKSksITB9KSxQcm9taXNlLnJlc29sdmUoaSl9ZnVuY3Rpb24gUW8oZSl7cmV0dXJuIGUucmVwbGFjZSgvfjEvZywiLyIpLnJlcGxhY2UoL34wL2csIn4iKX1mdW5jdGlvbiBZbyhlKXt2YXIgdD1lLnByb21pc2VDb25zdHJ1Y3Rvcnx8UHJvbWlzZSxyPW5ldyBxbyhlLnNjaGVtYVJlcXVlc3RTZXJ2aWNlLGUud29ya3NwYWNlQ29udGV4dCx0KSxuPShyLnNldFNjaGVtYUNvbnRyaWJ1dGlvbnMoT28pLG5ldyBvbyhyLGUuY29udHJpYnV0aW9ucyx0LGUuY2xpZW50Q2FwYWJpbGl0aWVzKSksZT1uZXcgYW8ocixlLmNvbnRyaWJ1dGlvbnMsdCksaT1uZXcgd28ociksbz1uZXcgdW8ocix0KTtyZXR1cm57Y29uZmlndXJlOmZ1bmN0aW9uKGUpe3IuY2xlYXJFeHRlcm5hbFNjaGVtYXMoKSxlLnNjaGVtYXMmJmUuc2NoZW1hcy5mb3JFYWNoKGZ1bmN0aW9uKGUpe3IucmVnaXN0ZXJFeHRlcm5hbFNjaGVtYShlLnVyaSxlLmZpbGVNYXRjaCxlLnNjaGVtYSl9KSxvLmNvbmZpZ3VyZShlKX0scmVzZXRTY2hlbWE6ZnVuY3Rpb24oZSl7cmV0dXJuIHIub25SZXNvdXJjZUNoYW5nZShlKX0sZG9WYWxpZGF0aW9uOm8uZG9WYWxpZGF0aW9uLmJpbmQobyksZ2V0TGFuZ3VhZ2VTdGF0dXM6by5nZXRMYW5ndWFnZVN0YXR1cy5iaW5kKG8pLHBhcnNlSlNPTkRvY3VtZW50OmZ1bmN0aW9uKGUpe3JldHVybiBubyhlLHtjb2xsZWN0Q29tbWVudHM6ITB9KX0sbmV3SlNPTkRvY3VtZW50OmZ1bmN0aW9uKGUsdCl7cmV0dXJuIG5ldyBlbyhlLGU9dm9pZCAwPT09KGU9dCk/W106ZSxbXSl9LGdldE1hdGNoaW5nU2NoZW1hczpyLmdldE1hdGNoaW5nU2NoZW1hcy5iaW5kKHIpLGRvUmVzb2x2ZTpuLmRvUmVzb2x2ZS5iaW5kKG4pLGRvQ29tcGxldGU6bi5kb0NvbXBsZXRlLmJpbmQobiksZmluZERvY3VtZW50U3ltYm9sczppLmZpbmREb2N1bWVudFN5bWJvbHMuYmluZChpKSxmaW5kRG9jdW1lbnRTeW1ib2xzMjppLmZpbmREb2N1bWVudFN5bWJvbHMyLmJpbmQoaSksZmluZERvY3VtZW50Q29sb3JzOmkuZmluZERvY3VtZW50Q29sb3JzLmJpbmQoaSksZ2V0Q29sb3JQcmVzZW50YXRpb25zOmkuZ2V0Q29sb3JQcmVzZW50YXRpb25zLmJpbmQoaSksZG9Ib3ZlcjplLmRvSG92ZXIuYmluZChlKSxnZXRGb2xkaW5nUmFuZ2VzOkdvLGdldFNlbGVjdGlvblJhbmdlczpabyxmaW5kRGVmaW5pdGlvbjpmdW5jdGlvbigpe3JldHVybiBQcm9taXNlLnJlc29sdmUoW10pfSxmaW5kTGlua3M6WG8sZm9ybWF0OmZ1bmN0aW9uKHQsZSxyKXt2YXIgbixpPXZvaWQgMCxlPShlJiYoaT17b2Zmc2V0Om49dC5vZmZzZXRBdChlLnN0YXJ0KSxsZW5ndGg6dC5vZmZzZXRBdChlLmVuZCktbn0pLHt0YWJTaXplOnI/ci50YWJTaXplOjQsaW5zZXJ0U3BhY2VzOiEwPT09KG51bGw9PXI/dm9pZCAwOnIuaW5zZXJ0U3BhY2VzKSxpbnNlcnRGaW5hbE5ld2xpbmU6ITA9PT0obnVsbD09cj92b2lkIDA6ci5pbnNlcnRGaW5hbE5ld2xpbmUpLGVvbDoiXG4ifSk7cmV0dXJuIHJuKHQuZ2V0VGV4dCgpLGksZSkubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBtbi5yZXBsYWNlKGxuLmNyZWF0ZSh0LnBvc2l0aW9uQXQoZS5vZmZzZXQpLHQucG9zaXRpb25BdChlLm9mZnNldCtlLmxlbmd0aCkpLGUuY29udGVudCl9KX19fSJ1bmRlZmluZWQiIT10eXBlb2YgZmV0Y2gmJihXbz1mdW5jdGlvbihlKXtyZXR1cm4gZmV0Y2goZSkudGhlbihlPT5lLnRleHQoKSl9KTt2YXIgZWE9Y2xhc3N7X2N0eDtfbGFuZ3VhZ2VTZXJ2aWNlO19sYW5ndWFnZVNldHRpbmdzO19sYW5ndWFnZUlkO2NvbnN0cnVjdG9yKGUsdCl7dGhpcy5fY3R4PWUsdGhpcy5fbGFuZ3VhZ2VTZXR0aW5ncz10Lmxhbmd1YWdlU2V0dGluZ3MsdGhpcy5fbGFuZ3VhZ2VJZD10Lmxhbmd1YWdlSWQsdGhpcy5fbGFuZ3VhZ2VTZXJ2aWNlPVlvKHt3b3Jrc3BhY2VDb250ZXh0OntyZXNvbHZlUmVsYXRpdmVQYXRoOihlLHQpPT57dD10LnN1YnN0cigwLHQubGFzdEluZGV4T2YoIi8iKSsxKTtpZihmdW5jdGlvbihlKXtyZXR1cm4gZS5jaGFyQ29kZUF0KDApPT09dGF9KGUpKXtjb25zdCBpPUlvLnBhcnNlKHQpO3ZhciByPWUuc3BsaXQoIi8iKTtyZXR1cm4gaS53aXRoKHtwYXRoOm5hKHIpfSkudG9TdHJpbmcoKX17cj10LHQ9W2VdO2NvbnN0IG89SW8ucGFyc2UociksYT1vLnBhdGguc3BsaXQoIi8iKTtmb3IodmFyIG4gb2YgdClhLnB1c2goLi4ubi5zcGxpdCgiLyIpKTtyZXR1cm4gby53aXRoKHtwYXRoOm5hKGEpfSkudG9TdHJpbmcoKX19fSxzY2hlbWFSZXF1ZXN0U2VydmljZTp0LmVuYWJsZVNjaGVtYVJlcXVlc3Q/V286dm9pZCAwfSksdGhpcy5fbGFuZ3VhZ2VTZXJ2aWNlLmNvbmZpZ3VyZSh0aGlzLl9sYW5ndWFnZVNldHRpbmdzKX1hc3luYyBkb1ZhbGlkYXRpb24oZSl7dmFyIHQsZT10aGlzLl9nZXRUZXh0RG9jdW1lbnQoZSk7cmV0dXJuIGU/KHQ9dGhpcy5fbGFuZ3VhZ2VTZXJ2aWNlLnBhcnNlSlNPTkRvY3VtZW50KGUpLHRoaXMuX2xhbmd1YWdlU2VydmljZS5kb1ZhbGlkYXRpb24oZSx0LHRoaXMuX2xhbmd1YWdlU2V0dGluZ3MpKTpQcm9taXNlLnJlc29sdmUoW10pfWFzeW5jIGRvQ29tcGxldGUoZSx0KXtlPXRoaXMuX2dldFRleHREb2N1bWVudChlKTtpZighZSlyZXR1cm4gbnVsbDt2YXIgcj10aGlzLl9sYW5ndWFnZVNlcnZpY2UucGFyc2VKU09ORG9jdW1lbnQoZSk7cmV0dXJuIHRoaXMuX2xhbmd1YWdlU2VydmljZS5kb0NvbXBsZXRlKGUsdCxyKX1hc3luYyBkb1Jlc29sdmUoZSl7cmV0dXJuIHRoaXMuX2xhbmd1YWdlU2VydmljZS5kb1Jlc29sdmUoZSl9YXN5bmMgZG9Ib3ZlcihlLHQpe2U9dGhpcy5fZ2V0VGV4dERvY3VtZW50KGUpO2lmKCFlKXJldHVybiBudWxsO3ZhciByPXRoaXMuX2xhbmd1YWdlU2VydmljZS5wYXJzZUpTT05Eb2N1bWVudChlKTtyZXR1cm4gdGhpcy5fbGFuZ3VhZ2VTZXJ2aWNlLmRvSG92ZXIoZSx0LHIpfWFzeW5jIGZvcm1hdChlLHQscil7ZT10aGlzLl9nZXRUZXh0RG9jdW1lbnQoZSk7aWYoIWUpcmV0dXJuW107ZT10aGlzLl9sYW5ndWFnZVNlcnZpY2UuZm9ybWF0KGUsdCxyKTtyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGUpfWFzeW5jIHJlc2V0U2NoZW1hKGUpe3JldHVybiBQcm9taXNlLnJlc29sdmUodGhpcy5fbGFuZ3VhZ2VTZXJ2aWNlLnJlc2V0U2NoZW1hKGUpKX1hc3luYyBmaW5kRG9jdW1lbnRTeW1ib2xzKGUpe2U9dGhpcy5fZ2V0VGV4dERvY3VtZW50KGUpO2lmKCFlKXJldHVybltdO3ZhciB0PXRoaXMuX2xhbmd1YWdlU2VydmljZS5wYXJzZUpTT05Eb2N1bWVudChlKSxlPXRoaXMuX2xhbmd1YWdlU2VydmljZS5maW5kRG9jdW1lbnRTeW1ib2xzKGUsdCk7cmV0dXJuIFByb21pc2UucmVzb2x2ZShlKX1hc3luYyBmaW5kRG9jdW1lbnRDb2xvcnMoZSl7ZT10aGlzLl9nZXRUZXh0RG9jdW1lbnQoZSk7aWYoIWUpcmV0dXJuW107dmFyIHQ9dGhpcy5fbGFuZ3VhZ2VTZXJ2aWNlLnBhcnNlSlNPTkRvY3VtZW50KGUpLGU9dGhpcy5fbGFuZ3VhZ2VTZXJ2aWNlLmZpbmREb2N1bWVudENvbG9ycyhlLHQpO3JldHVybiBQcm9taXNlLnJlc29sdmUoZSl9YXN5bmMgZ2V0Q29sb3JQcmVzZW50YXRpb25zKGUsdCxyKXtlPXRoaXMuX2dldFRleHREb2N1bWVudChlKTtpZighZSlyZXR1cm5bXTt2YXIgbj10aGlzLl9sYW5ndWFnZVNlcnZpY2UucGFyc2VKU09ORG9jdW1lbnQoZSksZT10aGlzLl9sYW5ndWFnZVNlcnZpY2UuZ2V0Q29sb3JQcmVzZW50YXRpb25zKGUsbix0LHIpO3JldHVybiBQcm9taXNlLnJlc29sdmUoZSl9YXN5bmMgZ2V0Rm9sZGluZ1JhbmdlcyhlLHQpe2U9dGhpcy5fZ2V0VGV4dERvY3VtZW50KGUpO2lmKCFlKXJldHVybltdO2U9dGhpcy5fbGFuZ3VhZ2VTZXJ2aWNlLmdldEZvbGRpbmdSYW5nZXMoZSx0KTtyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGUpfWFzeW5jIGdldFNlbGVjdGlvblJhbmdlcyhlLHQpe2U9dGhpcy5fZ2V0VGV4dERvY3VtZW50KGUpO2lmKCFlKXJldHVybltdO3ZhciByPXRoaXMuX2xhbmd1YWdlU2VydmljZS5wYXJzZUpTT05Eb2N1bWVudChlKSxlPXRoaXMuX2xhbmd1YWdlU2VydmljZS5nZXRTZWxlY3Rpb25SYW5nZXMoZSx0LHIpO3JldHVybiBQcm9taXNlLnJlc29sdmUoZSl9X2dldFRleHREb2N1bWVudChlKXt2YXIgdDtmb3IodCBvZiB0aGlzLl9jdHguZ2V0TWlycm9yTW9kZWxzKCkpaWYodC51cmkudG9TdHJpbmcoKT09PWUpcmV0dXJuIGhpLmNyZWF0ZShlLHRoaXMuX2xhbmd1YWdlSWQsdC52ZXJzaW9uLHQuZ2V0VmFsdWUoKSk7cmV0dXJuIG51bGx9fSx0YT0iLyIuY2hhckNvZGVBdCgwKSxyYT0iLiIuY2hhckNvZGVBdCgwKTtmdW5jdGlvbiBuYShlKXtjb25zdCB0PVtdO2Zvcihjb25zdCBuIG9mIGUpMD09PW4ubGVuZ3RofHwxPT09bi5sZW5ndGgmJm4uY2hhckNvZGVBdCgwKT09PXJhfHwoMj09PW4ubGVuZ3RoJiZuLmNoYXJDb2RlQXQoMCk9PT1yYSYmbi5jaGFyQ29kZUF0KDEpPT09cmE/dC5wb3AoKTp0LnB1c2gobikpOzE8ZS5sZW5ndGgmJjA9PT1lW2UubGVuZ3RoLTFdLmxlbmd0aCYmdC5wdXNoKCIiKTtsZXQgcj10LmpvaW4oIi8iKTtyZXR1cm4gcj0wPT09ZVswXS5sZW5ndGg/Ii8iK3I6cn1zZWxmLm9ubWVzc2FnZT0oKT0+e1hyKChlLHQpPT5uZXcgZWEoZSx0KSl9fSgpOwoK', null, false);
3
+ var WorkerFactory = createBase64WorkerFactory('Lyogcm9sbHVwLXBsdWdpbi13ZWItd29ya2VyLWxvYWRlciAqLwohZnVuY3Rpb24oKXsidXNlIHN0cmljdCI7Y2xhc3Mgc3tjb25zdHJ1Y3Rvcigpe3RoaXMubGlzdGVuZXJzPVtdLHRoaXMudW5leHBlY3RlZEVycm9ySGFuZGxlcj1mdW5jdGlvbihlKXtzZXRUaW1lb3V0KCgpPT57aWYoZS5zdGFjayl0aHJvdyBuZXcgRXJyb3IoZS5tZXNzYWdlKyJcblxuIitlLnN0YWNrKTt0aHJvdyBlfSwwKX19YWRkTGlzdGVuZXIoZSl7cmV0dXJuIHRoaXMubGlzdGVuZXJzLnB1c2goZSksKCk9Pnt0aGlzLl9yZW1vdmVMaXN0ZW5lcihlKX19ZW1pdCh0KXt0aGlzLmxpc3RlbmVycy5mb3JFYWNoKGU9PntlKHQpfSl9X3JlbW92ZUxpc3RlbmVyKGUpe3RoaXMubGlzdGVuZXJzLnNwbGljZSh0aGlzLmxpc3RlbmVycy5pbmRleE9mKGUpLDEpfXNldFVuZXhwZWN0ZWRFcnJvckhhbmRsZXIoZSl7dGhpcy51bmV4cGVjdGVkRXJyb3JIYW5kbGVyPWV9Z2V0VW5leHBlY3RlZEVycm9ySGFuZGxlcigpe3JldHVybiB0aGlzLnVuZXhwZWN0ZWRFcnJvckhhbmRsZXJ9b25VbmV4cGVjdGVkRXJyb3IoZSl7dGhpcy51bmV4cGVjdGVkRXJyb3JIYW5kbGVyKGUpLHRoaXMuZW1pdChlKX1vblVuZXhwZWN0ZWRFeHRlcm5hbEVycm9yKGUpe3RoaXMudW5leHBlY3RlZEVycm9ySGFuZGxlcihlKX19Y29uc3QgbD1uZXcgcztmdW5jdGlvbiBjKGUpeyFmdW5jdGlvbihlKXtpZihlIGluc3RhbmNlb2YgZClyZXR1cm4hMDtyZXR1cm4gZSBpbnN0YW5jZW9mIEVycm9yJiZlLm5hbWU9PT1oJiZlLm1lc3NhZ2U9PT1ofShlKSYmbC5vblVuZXhwZWN0ZWRFcnJvcihlKX1mdW5jdGlvbiB1KGUpe3ZhciB0LHI7cmV0dXJuIGUgaW5zdGFuY2VvZiBFcnJvcj8oe25hbWU6dCxtZXNzYWdlOnJ9PWUseyRpc0Vycm9yOiEwLG5hbWU6dCxtZXNzYWdlOnIsc3RhY2s6ZS5zdGFja3RyYWNlfHxlLnN0YWNrfSk6ZX1jb25zdCBoPSJDYW5jZWxlZCI7Y2xhc3MgZCBleHRlbmRzIEVycm9ye2NvbnN0cnVjdG9yKCl7c3VwZXIoaCksdGhpcy5uYW1lPXRoaXMubWVzc2FnZX19dmFyIG07e3ZhciBnPW09bXx8e307Zy5pcz1mdW5jdGlvbihlKXtyZXR1cm4gZSYmIm9iamVjdCI9PXR5cGVvZiBlJiYiZnVuY3Rpb24iPT10eXBlb2YgZVtTeW1ib2wuaXRlcmF0b3JdfTtjb25zdCBMbz1PYmplY3QuZnJlZXplKFtdKTtnLmVtcHR5PWZ1bmN0aW9uKCl7cmV0dXJuIExvfSxnLnNpbmdsZT1mdW5jdGlvbiooZSl7eWllbGQgZX0sZy5mcm9tPWZ1bmN0aW9uKGUpe3JldHVybiBlfHxMb30sZy5pc0VtcHR5PWZ1bmN0aW9uKGUpe3JldHVybiFlfHwhMD09PWVbU3ltYm9sLml0ZXJhdG9yXSgpLm5leHQoKS5kb25lfSxnLmZpcnN0PWZ1bmN0aW9uKGUpe3JldHVybiBlW1N5bWJvbC5pdGVyYXRvcl0oKS5uZXh0KCkudmFsdWV9LGcuc29tZT1mdW5jdGlvbihlLHQpe2Zvcihjb25zdCByIG9mIGUpaWYodChyKSlyZXR1cm4hMDtyZXR1cm4hMX0sZy5maW5kPWZ1bmN0aW9uKGUsdCl7Zm9yKGNvbnN0IHIgb2YgZSlpZih0KHIpKXJldHVybiByfSxnLmZpbHRlcj1mdW5jdGlvbiooZSx0KXtmb3IoY29uc3QgciBvZiBlKXQocikmJih5aWVsZCByKX0sZy5tYXA9ZnVuY3Rpb24qKGUsdCl7bGV0IHI9MDtmb3IoY29uc3QgbiBvZiBlKXlpZWxkIHQobixyKyspfSxnLmNvbmNhdD1mdW5jdGlvbiooLi4uZSl7Zm9yKGNvbnN0IHQgb2YgZSlmb3IoY29uc3QgciBvZiB0KXlpZWxkIHJ9LGcuY29uY2F0TmVzdGVkPWZ1bmN0aW9uKihlKXtmb3IoY29uc3QgdCBvZiBlKWZvcihjb25zdCByIG9mIHQpeWllbGQgcn0sZy5yZWR1Y2U9ZnVuY3Rpb24oZSx0LHIpe2xldCBuPXI7Zm9yKGNvbnN0IGkgb2YgZSluPXQobixpKTtyZXR1cm4gbn0sZy5zbGljZT1mdW5jdGlvbiooZSx0LHI9ZS5sZW5ndGgpe2Zvcih0PDAmJih0Kz1lLmxlbmd0aCkscjwwP3IrPWUubGVuZ3RoOnI+ZS5sZW5ndGgmJihyPWUubGVuZ3RoKTt0PHI7dCsrKXlpZWxkIGVbdF19LGcuY29uc3VtZT1mdW5jdGlvbihlLHQ9TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZKXtjb25zdCByPVtdO2lmKDA9PT10KXJldHVybltyLGVdO2NvbnN0IG49ZVtTeW1ib2wuaXRlcmF0b3JdKCk7Zm9yKGxldCBlPTA7ZTx0O2UrKyl7dmFyIGk9bi5uZXh0KCk7aWYoaS5kb25lKXJldHVybltyLGcuZW1wdHkoKV07ci5wdXNoKGkudmFsdWUpfXJldHVybltyLHtbU3ltYm9sLml0ZXJhdG9yXSgpe3JldHVybiBufX1dfSxnLmVxdWFscz1mdW5jdGlvbihlLHQscj0oZSx0KT0+ZT09PXQpe2NvbnN0IG49ZVtTeW1ib2wuaXRlcmF0b3JdKCksaT10W1N5bWJvbC5pdGVyYXRvcl0oKTtmb3IoOzspe3ZhciBvPW4ubmV4dCgpLGE9aS5uZXh0KCk7aWYoby5kb25lIT09YS5kb25lKXJldHVybiExO2lmKG8uZG9uZSlyZXR1cm4hMDtpZighcihvLnZhbHVlLGEudmFsdWUpKXJldHVybiExfX19Y2xhc3MgcCBleHRlbmRzIEVycm9ye2NvbnN0cnVjdG9yKGUpe3N1cGVyKGBFbmNvdW50ZXJlZCBlcnJvcnMgd2hpbGUgZGlzcG9zaW5nIG9mIHN0b3JlLiBFcnJvcnM6IFske2Uuam9pbigiLCAiKX1dYCksdGhpcy5lcnJvcnM9ZX19ZnVuY3Rpb24gYihlKXtpZihtLmlzKGUpKXtsZXQgdD1bXTtmb3IoY29uc3QgciBvZiBlKWlmKHIpdHJ5e3IuZGlzcG9zZSgpfWNhdGNoKGUpe3QucHVzaChlKX1pZigxPT09dC5sZW5ndGgpdGhyb3cgdFswXTtpZigxPHQubGVuZ3RoKXRocm93IG5ldyBwKHQpO3JldHVybiBBcnJheS5pc0FycmF5KGUpP1tdOmV9aWYoZSlyZXR1cm4gZS5kaXNwb3NlKCksZX1mdW5jdGlvbiB2KGUpe3JldHVybntkaXNwb3NlOmZ1bmN0aW9uKGUpe2NvbnN0IHQ9dGhpcztsZXQgcj0hMSxuO3JldHVybiBmdW5jdGlvbigpe3JldHVybiByP246KHI9ITAsbj1lLmFwcGx5KHQsYXJndW1lbnRzKSl9fSgoKT0+e2UoKX0pfX1jbGFzcyB5e2NvbnN0cnVjdG9yKCl7dGhpcy5fdG9EaXNwb3NlPW5ldyBTZXQsdGhpcy5faXNEaXNwb3NlZD0hMX1kaXNwb3NlKCl7dGhpcy5faXNEaXNwb3NlZHx8KHRoaXMuX2lzRGlzcG9zZWQ9ITAsdGhpcy5jbGVhcigpKX1nZXQgaXNEaXNwb3NlZCgpe3JldHVybiB0aGlzLl9pc0Rpc3Bvc2VkfWNsZWFyKCl7dHJ5e2IodGhpcy5fdG9EaXNwb3NlLnZhbHVlcygpKX1maW5hbGx5e3RoaXMuX3RvRGlzcG9zZS5jbGVhcigpfX1hZGQoZSl7aWYoIWUpcmV0dXJuIGU7aWYoZT09PXRoaXMpdGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgcmVnaXN0ZXIgYSBkaXNwb3NhYmxlIG9uIGl0c2VsZiEiKTtyZXR1cm4gdGhpcy5faXNEaXNwb3NlZD95LkRJU0FCTEVfRElTUE9TRURfV0FSTklOR3x8Y29uc29sZS53YXJuKG5ldyBFcnJvcigiVHJ5aW5nIHRvIGFkZCBhIGRpc3Bvc2FibGUgdG8gYSBEaXNwb3NhYmxlU3RvcmUgdGhhdCBoYXMgYWxyZWFkeSBiZWVuIGRpc3Bvc2VkIG9mLiBUaGUgYWRkZWQgb2JqZWN0IHdpbGwgYmUgbGVha2VkISIpLnN0YWNrKTp0aGlzLl90b0Rpc3Bvc2UuYWRkKGUpLGV9fXkuRElTQUJMRV9ESVNQT1NFRF9XQVJOSU5HPSExO2NsYXNzIEN7Y29uc3RydWN0b3IoKXt0aGlzLl9zdG9yZT1uZXcgeSx0aGlzLl9zdG9yZX1kaXNwb3NlKCl7dGhpcy5fc3RvcmUuZGlzcG9zZSgpfV9yZWdpc3RlcihlKXtpZihlPT09dGhpcyl0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCByZWdpc3RlciBhIGRpc3Bvc2FibGUgb24gaXRzZWxmISIpO3JldHVybiB0aGlzLl9zdG9yZS5hZGQoZSl9fUMuTm9uZT1PYmplY3QuZnJlZXplKHtkaXNwb3NlKCl7fX0pO2NsYXNzIHd7Y29uc3RydWN0b3IoKXt0aGlzLmRpc3Bvc2U9KCk9Pnt9LHRoaXMudW5zZXQ9KCk9Pnt9LHRoaXMuaXNzZXQ9KCk9PiExfXNldChlKXtsZXQgdD1lO3JldHVybiB0aGlzLnVuc2V0PSgpPT50PXZvaWQgMCx0aGlzLmlzc2V0PSgpPT52b2lkIDAhPT10LHRoaXMuZGlzcG9zZT0oKT0+e3QmJih0KCksdD12b2lkIDApfSx0aGlzfX1jbGFzcyBfe2NvbnN0cnVjdG9yKGUpe3RoaXMuZWxlbWVudD1lLHRoaXMubmV4dD1fLlVuZGVmaW5lZCx0aGlzLnByZXY9Xy5VbmRlZmluZWR9fV8uVW5kZWZpbmVkPW5ldyBfKHZvaWQgMCk7Y2xhc3MgU3tjb25zdHJ1Y3Rvcigpe3RoaXMuX2ZpcnN0PV8uVW5kZWZpbmVkLHRoaXMuX2xhc3Q9Xy5VbmRlZmluZWQsdGhpcy5fc2l6ZT0wfWdldCBzaXplKCl7cmV0dXJuIHRoaXMuX3NpemV9aXNFbXB0eSgpe3JldHVybiB0aGlzLl9maXJzdD09PV8uVW5kZWZpbmVkfWNsZWFyKCl7bGV0IGU9dGhpcy5fZmlyc3Q7Zm9yKDtlIT09Xy5VbmRlZmluZWQ7KXt2YXIgdD1lLm5leHQ7ZS5wcmV2PV8uVW5kZWZpbmVkLGUubmV4dD1fLlVuZGVmaW5lZCxlPXR9dGhpcy5fZmlyc3Q9Xy5VbmRlZmluZWQsdGhpcy5fbGFzdD1fLlVuZGVmaW5lZCx0aGlzLl9zaXplPTB9dW5zaGlmdChlKXtyZXR1cm4gdGhpcy5faW5zZXJ0KGUsITEpfXB1c2goZSl7cmV0dXJuIHRoaXMuX2luc2VydChlLCEwKX1faW5zZXJ0KGUsdCl7Y29uc3Qgcj1uZXcgXyhlKTtpZih0aGlzLl9maXJzdD09PV8uVW5kZWZpbmVkKXRoaXMuX2ZpcnN0PXIsdGhpcy5fbGFzdD1yO2Vsc2UgaWYodCl7Y29uc3QgaT10aGlzLl9sYXN0OygodGhpcy5fbGFzdD1yKS5wcmV2PWkpLm5leHQ9cn1lbHNle2NvbnN0IG89dGhpcy5fZmlyc3Q7KCh0aGlzLl9maXJzdD1yKS5uZXh0PW8pLnByZXY9cn10aGlzLl9zaXplKz0xO2xldCBuPSExO3JldHVybigpPT57bnx8KG49ITAsdGhpcy5fcmVtb3ZlKHIpKX19c2hpZnQoKXt2YXIgZTtpZih0aGlzLl9maXJzdCE9PV8uVW5kZWZpbmVkKXJldHVybiBlPXRoaXMuX2ZpcnN0LmVsZW1lbnQsdGhpcy5fcmVtb3ZlKHRoaXMuX2ZpcnN0KSxlfXBvcCgpe3ZhciBlO2lmKHRoaXMuX2xhc3QhPT1fLlVuZGVmaW5lZClyZXR1cm4gZT10aGlzLl9sYXN0LmVsZW1lbnQsdGhpcy5fcmVtb3ZlKHRoaXMuX2xhc3QpLGV9X3JlbW92ZShlKXtpZihlLnByZXYhPT1fLlVuZGVmaW5lZCYmZS5uZXh0IT09Xy5VbmRlZmluZWQpe2NvbnN0IHQ9ZS5wcmV2O3QubmV4dD1lLm5leHQsZS5uZXh0LnByZXY9dH1lbHNlIGUucHJldj09PV8uVW5kZWZpbmVkJiZlLm5leHQ9PT1fLlVuZGVmaW5lZD8odGhpcy5fZmlyc3Q9Xy5VbmRlZmluZWQsdGhpcy5fbGFzdD1fLlVuZGVmaW5lZCk6ZS5uZXh0PT09Xy5VbmRlZmluZWQ/KHRoaXMuX2xhc3Q9dGhpcy5fbGFzdC5wcmV2LHRoaXMuX2xhc3QubmV4dD1fLlVuZGVmaW5lZCk6ZS5wcmV2PT09Xy5VbmRlZmluZWQmJih0aGlzLl9maXJzdD10aGlzLl9maXJzdC5uZXh0LHRoaXMuX2ZpcnN0LnByZXY9Xy5VbmRlZmluZWQpOy0tdGhpcy5fc2l6ZX0qW1N5bWJvbC5pdGVyYXRvcl0oKXtsZXQgZT10aGlzLl9maXJzdDtmb3IoO2UhPT1fLlVuZGVmaW5lZDspeWllbGQgZS5lbGVtZW50LGU9ZS5uZXh0fX12YXIgZT0iZW4iO2xldCBBPSExLHg9ITEsRT0hMSxOPSExLGs9dm9pZCAwLEw9ZTtsZXQgTT12b2lkIDA7Y29uc3QgTz0ib2JqZWN0Ij09dHlwZW9mIHNlbGY/c2VsZjoib2JqZWN0Ij09dHlwZW9mIGdsb2JhbD9nbG9iYWw6e307bGV0IFQ9dm9pZCAwO3ZvaWQgMCE9PU8udnNjb2RlJiZ2b2lkIDAhPT1PLnZzY29kZS5wcm9jZXNzP1Q9Ty52c2NvZGUucHJvY2VzczoidW5kZWZpbmVkIiE9dHlwZW9mIHByb2Nlc3MmJihUPXByb2Nlc3MpO3ZhciB0PSJzdHJpbmciPT10eXBlb2YobnVsbD09PSh0PW51bGw9PT1UfHx2b2lkIDA9PT1UP3ZvaWQgMDpULnZlcnNpb25zKXx8dm9pZCAwPT09dD92b2lkIDA6dC5lbGVjdHJvbikmJiJyZW5kZXJlciI9PT0obnVsbD09PVR8fHZvaWQgMD09PVQ/dm9pZCAwOlQudHlwZSk7aWYoIm9iamVjdCIhPXR5cGVvZiBuYXZpZ2F0b3J8fHQpaWYoIm9iamVjdCI9PXR5cGVvZiBUKXtBPSJ3aW4zMiI9PT1ULnBsYXRmb3JtLHg9ImRhcndpbiI9PT1ULnBsYXRmb3JtLChFPSJsaW51eCI9PT1ULnBsYXRmb3JtKSYmVC5lbnYuU05BUCYmVC5lbnYuU05BUF9SRVZJU0lPTixULmVudi5DSXx8VC5lbnYuQlVJTERfQVJUSUZBQ1RTVEFHSU5HRElSRUNUT1JZLGs9ZSxMPWU7dD1ULmVudi5WU0NPREVfTkxTX0NPTkZJRztpZih0KXRyeXt2YXIgST1KU09OLnBhcnNlKHQpLHI9SS5hdmFpbGFibGVMYW5ndWFnZXNbIioiXTtrPUkubG9jYWxlLEw9cnx8ZSxJLl90cmFuc2xhdGlvbnNDb25maWdGaWxlfWNhdGNoKGUpe319ZWxzZSBjb25zb2xlLmVycm9yKCJVbmFibGUgdG8gcmVzb2x2ZSBwbGF0Zm9ybS4iKTtlbHNlIE09bmF2aWdhdG9yLnVzZXJBZ2VudCxBPTA8PU0uaW5kZXhPZigiV2luZG93cyIpLHg9MDw9TS5pbmRleE9mKCJNYWNpbnRvc2giKSwoMDw9TS5pbmRleE9mKCJNYWNpbnRvc2giKXx8MDw9TS5pbmRleE9mKCJpUGFkIil8fDA8PU0uaW5kZXhPZigiaVBob25lIikpJiZuYXZpZ2F0b3IubWF4VG91Y2hQb2ludHMmJm5hdmlnYXRvci5tYXhUb3VjaFBvaW50cyxFPTA8PU0uaW5kZXhPZigiTGludXgiKSxOPSEwLGs9bmF2aWdhdG9yLmxhbmd1YWdlLEw9aztjb25zdCBQPUEsVj14LFI9KE4mJk8uaW1wb3J0U2NyaXB0cyxNKTsoKCk9PntpZigiZnVuY3Rpb24iIT10eXBlb2YgTy5wb3N0TWVzc2FnZXx8Ty5pbXBvcnRTY3JpcHRzKXJldHVybjt7bGV0IGk9W10sZT0oTy5hZGRFdmVudExpc3RlbmVyKCJtZXNzYWdlIixyPT57aWYoci5kYXRhJiZyLmRhdGEudnNjb2RlU2NoZWR1bGVBc3luY1dvcmspZm9yKGxldCBlPTAsdD1pLmxlbmd0aDtlPHQ7ZSsrKXtjb25zdCBuPWlbZV07aWYobi5pZD09PXIuZGF0YS52c2NvZGVTY2hlZHVsZUFzeW5jV29yaylyZXR1cm4gaS5zcGxpY2UoZSwxKSx2b2lkIG4uY2FsbGJhY2soKX19KSwwKX19KSgpO3ZhciBELHQ9ISEoUiYmMDw9Ui5pbmRleE9mKCJDaHJvbWUiKSk7UiYmUi5pbmRleE9mKCJGaXJlZm94IiksIXQmJlImJlIuaW5kZXhPZigiU2FmYXJpIiksUiYmUi5pbmRleE9mKCJFZGcvIiksUiYmUi5pbmRleE9mKCJBbmRyb2lkIik7Y29uc3QgRj1PLnBlcmZvcm1hbmNlJiYiZnVuY3Rpb24iPT10eXBlb2YgTy5wZXJmb3JtYW5jZS5ub3c7Y2xhc3MgS3tjb25zdHJ1Y3RvcihlKXt0aGlzLl9oaWdoUmVzb2x1dGlvbj1GJiZlLHRoaXMuX3N0YXJ0VGltZT10aGlzLl9ub3coKSx0aGlzLl9zdG9wVGltZT0tMX1zdGF0aWMgY3JlYXRlKGU9ITApe3JldHVybiBuZXcgSyhlKX1zdG9wKCl7dGhpcy5fc3RvcFRpbWU9dGhpcy5fbm93KCl9ZWxhcHNlZCgpe3JldHVybi0xIT09dGhpcy5fc3RvcFRpbWU/dGhpcy5fc3RvcFRpbWUtdGhpcy5fc3RhcnRUaW1lOnRoaXMuX25vdygpLXRoaXMuX3N0YXJ0VGltZX1fbm93KCl7cmV0dXJuKHRoaXMuX2hpZ2hSZXNvbHV0aW9uP08ucGVyZm9ybWFuY2U6RGF0ZSkubm93KCl9fXt2YXIgaj0kbj0kbnx8e307ZnVuY3Rpb24gVShvKXtyZXR1cm4odCxyPW51bGwsZSk9PntsZXQgbj0hMSxpO3JldHVybiBpPW8oZT0+e2lmKCFuKXJldHVybiBpP2kuZGlzcG9zZSgpOm49ITAsdC5jYWxsKHIsZSl9LG51bGwsZSksbiYmaS5kaXNwb3NlKCksaX19ZnVuY3Rpb24gcShuLGksZSl7cmV0dXJuIEgoKHQscj1udWxsLGUpPT5uKGU9PnQuY2FsbChyLGkoZSkpLG51bGwsZSksZSl9ZnVuY3Rpb24gQihuLGksZSl7cmV0dXJuIEgoKHQscj1udWxsLGUpPT5uKGU9PntpKGUpLHQuY2FsbChyLGUpfSxudWxsLGUpLGUpfWZ1bmN0aW9uICQobixpLGUpe3JldHVybiBIKCh0LHI9bnVsbCxlKT0+bihlPT5pKGUpJiZ0LmNhbGwocixlKSxudWxsLGUpLGUpfWZ1bmN0aW9uIFcoZSx0LHIsbil7bGV0IGk9cjtyZXR1cm4gcShlLGU9Pmk9dChpLGUpLG4pfWZ1bmN0aW9uIEgoZSx0KXtsZXQgcjt2YXIgbj17b25GaXJzdExpc3RlbmVyQWRkKCl7cj1lKGkuZmlyZSxpKX0sb25MYXN0TGlzdGVuZXJSZW1vdmUoKXtyLmRpc3Bvc2UoKX19O2NvbnN0IGk9bmV3IFEobik7cmV0dXJuIHQmJnQuYWRkKGkpLGkuZXZlbnR9ZnVuY3Rpb24geihlLHQsdT0xMDAscj0hMSxuLGkpe2xldCBvLGE9dm9pZCAwLHM9dm9pZCAwLGw9MDtuPXtsZWFrV2FybmluZ1RocmVzaG9sZDpuLG9uRmlyc3RMaXN0ZW5lckFkZCgpe289ZShlPT57bCsrLGE9dChhLGUpLHImJiFzJiYoYy5maXJlKGEpLGE9dm9pZCAwKSxjbGVhclRpbWVvdXQocykscz1zZXRUaW1lb3V0KCgpPT57dmFyIGU9YTthPXZvaWQgMCxzPXZvaWQgMCwoIXJ8fDE8bCkmJmMuZmlyZShlKSxsPTB9LHUpfSl9LG9uTGFzdExpc3RlbmVyUmVtb3ZlKCl7by5kaXNwb3NlKCl9fTtjb25zdCBjPW5ldyBRKG4pO3JldHVybiBpJiZpLmFkZChjKSxjLmV2ZW50fWZ1bmN0aW9uIEooZSxyPShlLHQpPT5lPT09dCx0KXtsZXQgbj0hMCxpO3JldHVybiAkKGUsZT0+e3ZhciB0PW58fCFyKGUsaSk7cmV0dXJuIG49ITEsaT1lLHR9LHQpfWouTm9uZT0oKT0+Qy5Ob25lLGoub25jZT1VLGoubWFwPXEsai5mb3JFYWNoPUIsai5maWx0ZXI9JCxqLnNpZ25hbD1mdW5jdGlvbihlKXtyZXR1cm4gZX0sai5hbnk9ZnVuY3Rpb24oLi4uaSl7cmV0dXJuKHQscj1udWxsLG4pPT57dmFyWy4uLmVdPVsuLi5pLm1hcChlPT5lKGU9PnQuY2FsbChyLGUpLG51bGwsbikpXTtyZXR1cm4gdigoKT0+YihlKSl9fSxqLnJlZHVjZT1XLGouZGVib3VuY2U9eixqLmxhdGNoPUosai5zcGxpdD1mdW5jdGlvbihlLHQscil7cmV0dXJuW2ouZmlsdGVyKGUsdCxyKSxqLmZpbHRlcihlLGU9PiF0KGUpLHIpXX0sai5idWZmZXI9ZnVuY3Rpb24oZSx0PSExLHI9W10pe2xldCBuPXIuc2xpY2UoKSxpPWUoZT0+e24/bi5wdXNoKGUpOmEuZmlyZShlKX0pO2NvbnN0IG89KCk9PntuJiZuLmZvckVhY2goZT0+YS5maXJlKGUpKSxuPW51bGx9LGE9bmV3IFEoe29uRmlyc3RMaXN0ZW5lckFkZCgpe2k9aXx8ZShlPT5hLmZpcmUoZSkpfSxvbkZpcnN0TGlzdGVuZXJEaWRBZGQoKXtuJiYodD9zZXRUaW1lb3V0KG8pOm8oKSl9LG9uTGFzdExpc3RlbmVyUmVtb3ZlKCl7aSYmaS5kaXNwb3NlKCksaT1udWxsfX0pO3JldHVybiBhLmV2ZW50fTtjbGFzcyBNb3tjb25zdHJ1Y3RvcihlKXt0aGlzLmV2ZW50PWV9bWFwKGUpe3JldHVybiBuZXcgTW8ocSh0aGlzLmV2ZW50LGUpKX1mb3JFYWNoKGUpe3JldHVybiBuZXcgTW8oQih0aGlzLmV2ZW50LGUpKX1maWx0ZXIoZSl7cmV0dXJuIG5ldyBNbygkKHRoaXMuZXZlbnQsZSkpfXJlZHVjZShlLHQpe3JldHVybiBuZXcgTW8oVyh0aGlzLmV2ZW50LGUsdCkpfWxhdGNoKCl7cmV0dXJuIG5ldyBNbyhKKHRoaXMuZXZlbnQpKX1kZWJvdW5jZShlLHQ9MTAwLHI9ITEsbil7cmV0dXJuIG5ldyBNbyh6KHRoaXMuZXZlbnQsZSx0LHIsbikpfW9uKGUsdCxyKXtyZXR1cm4gdGhpcy5ldmVudChlLHQscil9b25jZShlLHQscil7cmV0dXJuIFUodGhpcy5ldmVudCkoZSx0LHIpfX1qLmNoYWluPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcgTW8oZSl9LGouZnJvbU5vZGVFdmVudEVtaXR0ZXI9ZnVuY3Rpb24oZSx0LHI9ZT0+ZSl7Y29uc3Qgbj0oLi4uZSk9PmkuZmlyZShyKC4uLmUpKSxpPW5ldyBRKHtvbkZpcnN0TGlzdGVuZXJBZGQ6KCk9PmUub24odCxuKSxvbkxhc3RMaXN0ZW5lclJlbW92ZTooKT0+ZS5yZW1vdmVMaXN0ZW5lcih0LG4pfSk7cmV0dXJuIGkuZXZlbnR9LGouZnJvbURPTUV2ZW50RW1pdHRlcj1mdW5jdGlvbihlLHQscj1lPT5lKXtjb25zdCBuPSguLi5lKT0+aS5maXJlKHIoLi4uZSkpLGk9bmV3IFEoe29uRmlyc3RMaXN0ZW5lckFkZDooKT0+ZS5hZGRFdmVudExpc3RlbmVyKHQsbiksb25MYXN0TGlzdGVuZXJSZW1vdmU6KCk9PmUucmVtb3ZlRXZlbnRMaXN0ZW5lcih0LG4pfSk7cmV0dXJuIGkuZXZlbnR9LGoudG9Qcm9taXNlPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgUHJvbWlzZShlPT5VKHQpKGUpKX0sai5ydW5BbmRTdWJzY3JpYmU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdCh2b2lkIDApLGUoZT0+dChlKSl9LGoucnVuQW5kU3Vic2NyaWJlV2l0aFN0b3JlPWZ1bmN0aW9uKGUsdCl7bGV0IHI9bnVsbDtmdW5jdGlvbiBuKGUpe251bGwhPT1yJiZ2b2lkIDAhPT1yJiZyLmRpc3Bvc2UoKSxyPW5ldyB5LHQoZSxyKX1uKHZvaWQgMCk7Y29uc3QgaT1lKGU9Pm4oZSkpO3JldHVybiB2KCgpPT57aS5kaXNwb3NlKCksbnVsbCE9PXImJnZvaWQgMCE9PXImJnIuZGlzcG9zZSgpfSl9fWNsYXNzIEd7Y29uc3RydWN0b3IoZSl7dGhpcy5fbGlzdGVuZXJDb3VudD0wLHRoaXMuX2ludm9jYXRpb25Db3VudD0wLHRoaXMuX2VsYXBzZWRPdmVyYWxsPTAsdGhpcy5fbmFtZT1lKyJfIitHLl9pZFBvb2wrK31zdGFydChlKXt0aGlzLl9zdG9wV2F0Y2g9bmV3IEsoITApLHRoaXMuX2xpc3RlbmVyQ291bnQ9ZX1zdG9wKCl7aWYodGhpcy5fc3RvcFdhdGNoKXtjb25zdCBlPXRoaXMuX3N0b3BXYXRjaC5lbGFwc2VkKCk7dGhpcy5fZWxhcHNlZE92ZXJhbGwrPWUsdGhpcy5faW52b2NhdGlvbkNvdW50Kz0xLGNvbnNvbGUuaW5mbyhgZGlkIEZJUkUgJHt0aGlzLl9uYW1lfTogZWxhcHNlZF9tczogJHtlLnRvRml4ZWQoNSl9LCBsaXN0ZW5lcjogJHt0aGlzLl9saXN0ZW5lckNvdW50fSAoZWxhcHNlZF9vdmVyYWxsOiAke3RoaXMuX2VsYXBzZWRPdmVyYWxsLnRvRml4ZWQoMil9LCBpbnZvY2F0aW9uczogJHt0aGlzLl9pbnZvY2F0aW9uQ291bnR9KWApLHRoaXMuX3N0b3BXYXRjaD12b2lkIDB9fX1HLl9pZFBvb2w9MDtjbGFzcyBae2NvbnN0cnVjdG9yKGUpe3RoaXMudmFsdWU9ZX1zdGF0aWMgY3JlYXRlKCl7dmFyIGU7cmV0dXJuIG5ldyBaKG51bGwhPT0oZT0obmV3IEVycm9yKS5zdGFjaykmJnZvaWQgMCE9PWU/ZToiIil9cHJpbnQoKXtjb25zb2xlLndhcm4odGhpcy52YWx1ZS5zcGxpdCgiXG4iKS5zbGljZSgyKS5qb2luKCJcbiIpKX19Y2xhc3MgWHtjb25zdHJ1Y3RvcihlLHQscil7dGhpcy5jYWxsYmFjaz1lLHRoaXMuY2FsbGJhY2tUaGlzPXQsdGhpcy5zdGFjaz1yLHRoaXMuc3Vic2NyaXB0aW9uPW5ldyB3fWludm9rZShlKXt0aGlzLmNhbGxiYWNrLmNhbGwodGhpcy5jYWxsYmFja1RoaXMsZSl9fWNsYXNzIFF7Y29uc3RydWN0b3IoZSl7dGhpcy5fZGlzcG9zZWQ9ITEsdGhpcy5fb3B0aW9ucz1lLHRoaXMuX2xlYWthZ2VNb249dm9pZCAwLHRoaXMuX3BlcmZNb249bnVsbCE9PShlPXRoaXMuX29wdGlvbnMpJiZ2b2lkIDAhPT1lJiZlLl9wcm9mTmFtZT9uZXcgRyh0aGlzLl9vcHRpb25zLl9wcm9mTmFtZSk6dm9pZCAwfWRpc3Bvc2UoKXt2YXIgZSx0O3RoaXMuX2Rpc3Bvc2VkfHwodGhpcy5fZGlzcG9zZWQ9ITAsdGhpcy5fbGlzdGVuZXJzJiZ0aGlzLl9saXN0ZW5lcnMuY2xlYXIoKSxudWxsIT09KGU9dGhpcy5fZGVsaXZlcnlRdWV1ZSkmJnZvaWQgMCE9PWUmJmUuY2xlYXIoKSxudWxsIT09KHQ9bnVsbD09PShlPXRoaXMuX29wdGlvbnMpfHx2b2lkIDA9PT1lP3ZvaWQgMDplLm9uTGFzdExpc3RlbmVyUmVtb3ZlKSYmdm9pZCAwIT09dCYmdC5jYWxsKGUpLG51bGwhPT0odD10aGlzLl9sZWFrYWdlTW9uKSYmdm9pZCAwIT09dCYmdC5kaXNwb3NlKCkpfWdldCBldmVudCgpe3JldHVybiB0aGlzLl9ldmVudHx8KHRoaXMuX2V2ZW50PShlLHQscik9Pnt0aGlzLl9saXN0ZW5lcnN8fCh0aGlzLl9saXN0ZW5lcnM9bmV3IFMpO3ZhciBuLGksbz10aGlzLl9saXN0ZW5lcnMuaXNFbXB0eSgpO28mJm51bGwhPT0oaT10aGlzLl9vcHRpb25zKSYmdm9pZCAwIT09aSYmaS5vbkZpcnN0TGlzdGVuZXJBZGQmJnRoaXMuX29wdGlvbnMub25GaXJzdExpc3RlbmVyQWRkKHRoaXMpO2xldCBhLHM7dGhpcy5fbGVha2FnZU1vbiYmMzA8PXRoaXMuX2xpc3RlbmVycy5zaXplJiYocz1aLmNyZWF0ZSgpLGE9dGhpcy5fbGVha2FnZU1vbi5jaGVjayhzLHRoaXMuX2xpc3RlbmVycy5zaXplKzEpKTtjb25zdCBsPW5ldyBYKGUsdCxzKSxjPXRoaXMuX2xpc3RlbmVycy5wdXNoKGwpO28mJm51bGwhPT0obj10aGlzLl9vcHRpb25zKSYmdm9pZCAwIT09biYmbi5vbkZpcnN0TGlzdGVuZXJEaWRBZGQmJnRoaXMuX29wdGlvbnMub25GaXJzdExpc3RlbmVyRGlkQWRkKHRoaXMpLG51bGwhPT0oaT10aGlzLl9vcHRpb25zKSYmdm9pZCAwIT09aSYmaS5vbkxpc3RlbmVyRGlkQWRkJiZ0aGlzLl9vcHRpb25zLm9uTGlzdGVuZXJEaWRBZGQodGhpcyxlLHQpO289bC5zdWJzY3JpcHRpb24uc2V0KCgpPT57YSYmYSgpLHRoaXMuX2Rpc3Bvc2VkfHwoYygpLHRoaXMuX29wdGlvbnMmJnRoaXMuX29wdGlvbnMub25MYXN0TGlzdGVuZXJSZW1vdmUmJih0aGlzLl9saXN0ZW5lcnMmJiF0aGlzLl9saXN0ZW5lcnMuaXNFbXB0eSgpfHx0aGlzLl9vcHRpb25zLm9uTGFzdExpc3RlbmVyUmVtb3ZlKHRoaXMpKSl9KTtyZXR1cm4gciBpbnN0YW5jZW9mIHk/ci5hZGQobyk6QXJyYXkuaXNBcnJheShyKSYmci5wdXNoKG8pLG99KSx0aGlzLl9ldmVudH1maXJlKGUpe3ZhciB0O2lmKHRoaXMuX2xpc3RlbmVycyl7dGhpcy5fZGVsaXZlcnlRdWV1ZXx8KHRoaXMuX2RlbGl2ZXJ5UXVldWU9bmV3IFMpO2Zvcih2YXIgciBvZiB0aGlzLl9saXN0ZW5lcnMpdGhpcy5fZGVsaXZlcnlRdWV1ZS5wdXNoKFtyLGVdKTtmb3IobnVsbCE9PSh0PXRoaXMuX3BlcmZNb24pJiZ2b2lkIDAhPT10JiZ0LnN0YXJ0KHRoaXMuX2RlbGl2ZXJ5UXVldWUuc2l6ZSk7MDx0aGlzLl9kZWxpdmVyeVF1ZXVlLnNpemU7KXtjb25zdFtuLGVdPXRoaXMuX2RlbGl2ZXJ5UXVldWUuc2hpZnQoKTt0cnl7bi5pbnZva2UoZSl9Y2F0Y2goZSl7YyhlKX19bnVsbCE9PSh0PXRoaXMuX3BlcmZNb24pJiZ2b2lkIDAhPT10JiZ0LnN0b3AoKX19fWZ1bmN0aW9uIFkoZSl7Y29uc3QgdD1bXTtmb3IoY29uc3QgciBvZiBmdW5jdGlvbihlKXtsZXQgdD1bXSxyPU9iamVjdC5nZXRQcm90b3R5cGVPZihlKTtmb3IoO09iamVjdC5wcm90b3R5cGUhPT1yOyl0PXQuY29uY2F0KE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHIpKSxyPU9iamVjdC5nZXRQcm90b3R5cGVPZihyKTtyZXR1cm4gdH0oZSkpImZ1bmN0aW9uIj09dHlwZW9mIGVbcl0mJnQucHVzaChyKTtyZXR1cm4gdH1mdW5jdGlvbiBlZShlLHIpe2xldCB0PXt9O2Zvcihjb25zdCBuIG9mIGUpdFtuXT0odD0+ZnVuY3Rpb24oKXt2YXIgZT1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsMCk7cmV0dXJuIHIodCxlKX0pKG4pO3JldHVybiB0fWNsYXNzIHRle2NvbnN0cnVjdG9yKGUpe3RoaXMuZXhlY3V0b3I9ZSx0aGlzLl9kaWRSdW49ITF9Z2V0VmFsdWUoKXtpZighdGhpcy5fZGlkUnVuKXRyeXt0aGlzLl92YWx1ZT10aGlzLmV4ZWN1dG9yKCl9Y2F0Y2goZSl7dGhpcy5fZXJyb3I9ZX1maW5hbGx5e3RoaXMuX2RpZFJ1bj0hMH1pZih0aGlzLl9lcnJvcil0aHJvdyB0aGlzLl9lcnJvcjtyZXR1cm4gdGhpcy5fdmFsdWV9Z2V0IHJhd1ZhbHVlKCl7cmV0dXJuIHRoaXMuX3ZhbHVlfX1mdW5jdGlvbiByZShyLG4saT0wLG89ci5sZW5ndGgsYT0wLHM9bi5sZW5ndGgpe2Zvcig7aTxvJiZhPHM7aSsrLGErKyl7bGV0IGU9ci5jaGFyQ29kZUF0KGkpLHQ9bi5jaGFyQ29kZUF0KGEpO2lmKGUhPT10KXtpZigxMjg8PWV8fDEyODw9dClyZXR1cm4gZnVuY3Rpb24oZSx0LHI9MCxuPWUubGVuZ3RoLGk9MCxvPXQubGVuZ3RoKXtmb3IoO3I8biYmaTxvO3IrKyxpKyspe3ZhciBhPWUuY2hhckNvZGVBdChyKSxzPXQuY2hhckNvZGVBdChpKTtpZihhPHMpcmV0dXJuLTE7aWYoczxhKXJldHVybiAxfXZhciBsPW4tcixjPW8taTtyZXR1cm4gbDxjPy0xOmM8bD8xOjB9KHIudG9Mb3dlckNhc2UoKSxuLnRvTG93ZXJDYXNlKCksaSxvLGEscyk7bmUoZSkmJihlLT0zMiksbmUodCkmJih0LT0zMik7dmFyIGw9ZS10O2lmKDAhPWwpcmV0dXJuIGx9fXZhciBlPW8taSx0PXMtYTtyZXR1cm4gZTx0Py0xOnQ8ZT8xOjB9ZnVuY3Rpb24gbmUoZSl7cmV0dXJuIDk3PD1lJiZlPD0xMjJ9ZnVuY3Rpb24gaWUoZSl7cmV0dXJuIDY1PD1lJiZlPD05MH1mdW5jdGlvbiBvZShlKXtyZXR1cm4gNTUyOTY8PWUmJmU8PTU2MzE5fWNvbnN0IGFlPS9eW1x0XG5cclx4MjAtXHg3RV0qJC87Y2xhc3Mgc2V7Y29uc3RydWN0b3IoZSl7dGhpcy5jb25mdXNhYmxlRGljdGlvbmFyeT1lfXN0YXRpYyBnZXRJbnN0YW5jZShlKXtyZXR1cm4gc2UuY2FjaGUuZ2V0KEFycmF5LmZyb20oZSkpfXN0YXRpYyBnZXRMb2NhbGVzKCl7cmV0dXJuIHNlLl9sb2NhbGVzLmdldFZhbHVlKCl9aXNBbWJpZ3VvdXMoZSl7cmV0dXJuIHRoaXMuY29uZnVzYWJsZURpY3Rpb25hcnkuaGFzKGUpfWdldFByaW1hcnlDb25mdXNhYmxlKGUpe3JldHVybiB0aGlzLmNvbmZ1c2FibGVEaWN0aW9uYXJ5LmdldChlKX1nZXRDb25mdXNhYmxlQ29kZVBvaW50cygpe3JldHVybiBuZXcgU2V0KHRoaXMuY29uZnVzYWJsZURpY3Rpb25hcnkua2V5cygpKX19KEQ9c2UpLmFtYmlndW91c0NoYXJhY3RlckRhdGE9bmV3IHRlKCgpPT5KU09OLnBhcnNlKCd7Il9jb21tb24iOls4MjMyLDMyLDgyMzMsMzIsNTc2MCwzMiw4MTkyLDMyLDgxOTMsMzIsODE5NCwzMiw4MTk1LDMyLDgxOTYsMzIsODE5NywzMiw4MTk4LDMyLDgyMDAsMzIsODIwMSwzMiw4MjAyLDMyLDgyODcsMzIsODE5OSwzMiw4MjM5LDMyLDIwNDIsOTUsNjUxMDEsOTUsNjUxMDIsOTUsNjUxMDMsOTUsODIwOCw0NSw4MjA5LDQ1LDgyMTAsNDUsNjUxMTIsNDUsMTc0OCw0NSw4MjU5LDQ1LDcyNyw0NSw4NzIyLDQ1LDEwMTM0LDQ1LDExNDUwLDQ1LDE1NDksNDQsMTY0Myw0NCw4MjE4LDQ0LDE4NCw0NCw0MjIzMyw0NCw4OTQsNTksMjMwNyw1OCwyNjkxLDU4LDE0MTcsNTgsMTc5NSw1OCwxNzk2LDU4LDU4NjgsNTgsNjUwNzIsNTgsNjE0Nyw1OCw2MTUzLDU4LDgyODIsNTgsMTQ3NSw1OCw3NjAsNTgsNDI4ODksNTgsODc1OCw1OCw3MjAsNTgsNDIyMzcsNTgsNDUxLDMzLDExNjAxLDMzLDY2MCw2Myw1NzcsNjMsMjQyOSw2Myw1MDM4LDYzLDQyNzMxLDYzLDExOTE0OSw0Niw4MjI4LDQ2LDE3OTMsNDYsMTc5NCw0Niw0MjUxMCw0Niw2ODE3Niw0NiwxNjMyLDQ2LDE3NzYsNDYsNDIyMzIsNDYsMTM3Myw5Niw2NTI4Nyw5Niw4MjE5LDk2LDgyNDIsOTYsMTM3MCw5NiwxNTIzLDk2LDgxNzUsOTYsNjUzNDQsOTYsOTAwLDk2LDgxODksOTYsODEyNSw5Niw4MTI3LDk2LDgxOTAsOTYsNjk3LDk2LDg4NCw5Niw3MTIsOTYsNzE0LDk2LDcxNSw5Niw3NTYsOTYsNjk5LDk2LDcwMSw5Niw3MDAsOTYsNzAyLDk2LDQyODkyLDk2LDE0OTcsOTYsMjAzNiw5NiwyMDM3LDk2LDUxOTQsOTYsNTgzNiw5Niw5NDAzMyw5Niw5NDAzNCw5Niw2NTMzOSw5MSwxMDA4OCw0MCwxMDA5OCw0MCwxMjMwOCw0MCw2NDgzMCw0MCw2NTM0MSw5MywxMDA4OSw0MSwxMDA5OSw0MSwxMjMwOSw0MSw2NDgzMSw0MSwxMDEwMCwxMjMsMTE5MDYwLDEyMywxMDEwMSwxMjUsNjUzNDIsOTQsODI3MCw0MiwxNjQ1LDQyLDg3MjcsNDIsNjYzMzUsNDIsNTk0MSw0Nyw4MjU3LDQ3LDg3MjUsNDcsODI2MCw0Nyw5NTg1LDQ3LDEwMTg3LDQ3LDEwNzQ0LDQ3LDExOTM1NCw0NywxMjc1NSw0NywxMjMzOSw0NywxMTQ2Miw0NywyMDAzMSw0NywxMjAzNSw0Nyw2NTM0MCw5Miw2NTEyOCw5Miw4NzI2LDkyLDEwMTg5LDkyLDEwNzQxLDkyLDEwNzQ1LDkyLDExOTMxMSw5MiwxMTkzNTUsOTIsMTI3NTYsOTIsMjAwMjIsOTIsMTIwMzQsOTIsNDI4NzIsMzgsNzA4LDk0LDcxMCw5NCw1ODY5LDQzLDEwMTMzLDQzLDY2MjAzLDQzLDgyNDksNjAsMTAwOTQsNjAsNzA2LDYwLDExOTM1MCw2MCw1MTc2LDYwLDU4MTAsNjAsNTEyMCw2MSwxMTg0MCw2MSwxMjQ0OCw2MSw0MjIzOSw2MSw4MjUwLDYyLDEwMDk1LDYyLDcwNyw2MiwxMTkzNTEsNjIsNTE3MSw2Miw5NDAxNSw2Miw4Mjc1LDEyNiw3MzIsMTI2LDgxMjgsMTI2LDg3NjQsMTI2LDY1MzcyLDEyNCw2NTI5Myw0NSwxMjA3ODQsNTAsMTIwNzk0LDUwLDEyMDgwNCw1MCwxMjA4MTQsNTAsMTIwODI0LDUwLDEzMDAzNCw1MCw0Mjg0Miw1MCw0MjMsNTAsMTAwMCw1MCw0MjU2NCw1MCw1MzExLDUwLDQyNzM1LDUwLDExOTMwMiw1MSwxMjA3ODUsNTEsMTIwNzk1LDUxLDEyMDgwNSw1MSwxMjA4MTUsNTEsMTIwODI1LDUxLDEzMDAzNSw1MSw0MjkyMyw1MSw1NDAsNTEsNDM5LDUxLDQyODU4LDUxLDExNDY4LDUxLDEyNDgsNTEsOTQwMTEsNTEsNzE4ODIsNTEsMTIwNzg2LDUyLDEyMDc5Niw1MiwxMjA4MDYsNTIsMTIwODE2LDUyLDEyMDgyNiw1MiwxMzAwMzYsNTIsNTA3MCw1Miw3MTg1NSw1MiwxMjA3ODcsNTMsMTIwNzk3LDUzLDEyMDgwNyw1MywxMjA4MTcsNTMsMTIwODI3LDUzLDEzMDAzNyw1Myw0NDQsNTMsNzE4NjcsNTMsMTIwNzg4LDU0LDEyMDc5OCw1NCwxMjA4MDgsNTQsMTIwODE4LDU0LDEyMDgyOCw1NCwxMzAwMzgsNTQsMTE0NzQsNTQsNTEwMiw1NCw3MTg5Myw1NCwxMTkzMTQsNTUsMTIwNzg5LDU1LDEyMDc5OSw1NSwxMjA4MDksNTUsMTIwODE5LDU1LDEyMDgyOSw1NSwxMzAwMzksNTUsNjY3NzAsNTUsNzE4NzgsNTUsMjgxOSw1NiwyNTM4LDU2LDI2NjYsNTYsMTI1MTMxLDU2LDEyMDc5MCw1NiwxMjA4MDAsNTYsMTIwODEwLDU2LDEyMDgyMCw1NiwxMjA4MzAsNTYsMTMwMDQwLDU2LDU0Nyw1Niw1NDYsNTYsNjYzMzAsNTYsMjY2Myw1NywyOTIwLDU3LDI1NDEsNTcsMzQzNyw1NywxMjA3OTEsNTcsMTIwODAxLDU3LDEyMDgxMSw1NywxMjA4MjEsNTcsMTIwODMxLDU3LDEzMDA0MSw1Nyw0Mjg2Miw1NywxMTQ2Niw1Nyw3MTg4NCw1Nyw3MTg1Miw1Nyw3MTg5NCw1Nyw5MDgyLDk3LDY1MzQ1LDk3LDExOTgzNCw5NywxMTk4ODYsOTcsMTE5OTM4LDk3LDExOTk5MCw5NywxMjAwNDIsOTcsMTIwMDk0LDk3LDEyMDE0Niw5NywxMjAxOTgsOTcsMTIwMjUwLDk3LDEyMDMwMiw5NywxMjAzNTQsOTcsMTIwNDA2LDk3LDEyMDQ1OCw5Nyw1OTMsOTcsOTQ1LDk3LDEyMDUxNCw5NywxMjA1NzIsOTcsMTIwNjMwLDk3LDEyMDY4OCw5NywxMjA3NDYsOTcsNjUzMTMsNjUsMTE5ODA4LDY1LDExOTg2MCw2NSwxMTk5MTIsNjUsMTE5OTY0LDY1LDEyMDAxNiw2NSwxMjAwNjgsNjUsMTIwMTIwLDY1LDEyMDE3Miw2NSwxMjAyMjQsNjUsMTIwMjc2LDY1LDEyMDMyOCw2NSwxMjAzODAsNjUsMTIwNDMyLDY1LDkxMyw2NSwxMjA0ODgsNjUsMTIwNTQ2LDY1LDEyMDYwNCw2NSwxMjA2NjIsNjUsMTIwNzIwLDY1LDUwMzQsNjUsNTU3Myw2NSw0MjIyMiw2NSw5NDAxNiw2NSw2NjIwOCw2NSwxMTk4MzUsOTgsMTE5ODg3LDk4LDExOTkzOSw5OCwxMTk5OTEsOTgsMTIwMDQzLDk4LDEyMDA5NSw5OCwxMjAxNDcsOTgsMTIwMTk5LDk4LDEyMDI1MSw5OCwxMjAzMDMsOTgsMTIwMzU1LDk4LDEyMDQwNyw5OCwxMjA0NTksOTgsMzg4LDk4LDUwNzEsOTgsNTIzNCw5OCw1NTUxLDk4LDY1MzE0LDY2LDg0OTIsNjYsMTE5ODA5LDY2LDExOTg2MSw2NiwxMTk5MTMsNjYsMTIwMDE3LDY2LDEyMDA2OSw2NiwxMjAxMjEsNjYsMTIwMTczLDY2LDEyMDIyNSw2NiwxMjAyNzcsNjYsMTIwMzI5LDY2LDEyMDM4MSw2NiwxMjA0MzMsNjYsNDI5MzIsNjYsOTE0LDY2LDEyMDQ4OSw2NiwxMjA1NDcsNjYsMTIwNjA1LDY2LDEyMDY2Myw2NiwxMjA3MjEsNjYsNTEwOCw2Niw1NjIzLDY2LDQyMTkyLDY2LDY2MTc4LDY2LDY2MjA5LDY2LDY2MzA1LDY2LDY1MzQ3LDk5LDg1NzMsOTksMTE5ODM2LDk5LDExOTg4OCw5OSwxMTk5NDAsOTksMTE5OTkyLDk5LDEyMDA0NCw5OSwxMjAwOTYsOTksMTIwMTQ4LDk5LDEyMDIwMCw5OSwxMjAyNTIsOTksMTIwMzA0LDk5LDEyMDM1Niw5OSwxMjA0MDgsOTksMTIwNDYwLDk5LDc0MjgsOTksMTAxMCw5OSwxMTQyOSw5OSw0Mzk1MSw5OSw2NjYyMSw5OSwxMjg4NDQsNjcsNzE5MjIsNjcsNzE5MTMsNjcsNjUzMTUsNjcsODU1Nyw2Nyw4NDUwLDY3LDg0OTMsNjcsMTE5ODEwLDY3LDExOTg2Miw2NywxMTk5MTQsNjcsMTE5OTY2LDY3LDEyMDAxOCw2NywxMjAxNzQsNjcsMTIwMjI2LDY3LDEyMDI3OCw2NywxMjAzMzAsNjcsMTIwMzgyLDY3LDEyMDQzNCw2NywxMDE3LDY3LDExNDI4LDY3LDUwODcsNjcsNDIyMDIsNjcsNjYyMTAsNjcsNjYzMDYsNjcsNjY1ODEsNjcsNjY4NDQsNjcsODU3NCwxMDAsODUxOCwxMDAsMTE5ODM3LDEwMCwxMTk4ODksMTAwLDExOTk0MSwxMDAsMTE5OTkzLDEwMCwxMjAwNDUsMTAwLDEyMDA5NywxMDAsMTIwMTQ5LDEwMCwxMjAyMDEsMTAwLDEyMDI1MywxMDAsMTIwMzA1LDEwMCwxMjAzNTcsMTAwLDEyMDQwOSwxMDAsMTIwNDYxLDEwMCwxMjgxLDEwMCw1MDk1LDEwMCw1MjMxLDEwMCw0MjE5NCwxMDAsODU1OCw2OCw4NTE3LDY4LDExOTgxMSw2OCwxMTk4NjMsNjgsMTE5OTE1LDY4LDExOTk2Nyw2OCwxMjAwMTksNjgsMTIwMDcxLDY4LDEyMDEyMyw2OCwxMjAxNzUsNjgsMTIwMjI3LDY4LDEyMDI3OSw2OCwxMjAzMzEsNjgsMTIwMzgzLDY4LDEyMDQzNSw2OCw1MDI0LDY4LDU1OTgsNjgsNTYxMCw2OCw0MjE5NSw2OCw4NDk0LDEwMSw2NTM0OSwxMDEsODQ5NSwxMDEsODUxOSwxMDEsMTE5ODM4LDEwMSwxMTk4OTAsMTAxLDExOTk0MiwxMDEsMTIwMDQ2LDEwMSwxMjAwOTgsMTAxLDEyMDE1MCwxMDEsMTIwMjAyLDEwMSwxMjAyNTQsMTAxLDEyMDMwNiwxMDEsMTIwMzU4LDEwMSwxMjA0MTAsMTAxLDEyMDQ2MiwxMDEsNDM4MjYsMTAxLDEyMTMsMTAxLDg5NTksNjksNjUzMTcsNjksODQ5Niw2OSwxMTk4MTIsNjksMTE5ODY0LDY5LDExOTkxNiw2OSwxMjAwMjAsNjksMTIwMDcyLDY5LDEyMDEyNCw2OSwxMjAxNzYsNjksMTIwMjI4LDY5LDEyMDI4MCw2OSwxMjAzMzIsNjksMTIwMzg0LDY5LDEyMDQzNiw2OSw5MTcsNjksMTIwNDkyLDY5LDEyMDU1MCw2OSwxMjA2MDgsNjksMTIwNjY2LDY5LDEyMDcyNCw2OSwxMTU3Nyw2OSw1MDM2LDY5LDQyMjI0LDY5LDcxODQ2LDY5LDcxODU0LDY5LDY2MTgyLDY5LDExOTgzOSwxMDIsMTE5ODkxLDEwMiwxMTk5NDMsMTAyLDExOTk5NSwxMDIsMTIwMDQ3LDEwMiwxMjAwOTksMTAyLDEyMDE1MSwxMDIsMTIwMjAzLDEwMiwxMjAyNTUsMTAyLDEyMDMwNywxMDIsMTIwMzU5LDEwMiwxMjA0MTEsMTAyLDEyMDQ2MywxMDIsNDM4MjksMTAyLDQyOTA1LDEwMiwzODMsMTAyLDc4MzcsMTAyLDE0MTIsMTAyLDExOTMxNSw3MCw4NDk3LDcwLDExOTgxMyw3MCwxMTk4NjUsNzAsMTE5OTE3LDcwLDEyMDAyMSw3MCwxMjAwNzMsNzAsMTIwMTI1LDcwLDEyMDE3Nyw3MCwxMjAyMjksNzAsMTIwMjgxLDcwLDEyMDMzMyw3MCwxMjAzODUsNzAsMTIwNDM3LDcwLDQyOTA0LDcwLDk4OCw3MCwxMjA3NzgsNzAsNTU1Niw3MCw0MjIwNSw3MCw3MTg3NCw3MCw3MTg0Miw3MCw2NjE4Myw3MCw2NjIxMyw3MCw2Njg1Myw3MCw2NTM1MSwxMDMsODQ1OCwxMDMsMTE5ODQwLDEwMywxMTk4OTIsMTAzLDExOTk0NCwxMDMsMTIwMDQ4LDEwMywxMjAxMDAsMTAzLDEyMDE1MiwxMDMsMTIwMjA0LDEwMywxMjAyNTYsMTAzLDEyMDMwOCwxMDMsMTIwMzYwLDEwMywxMjA0MTIsMTAzLDEyMDQ2NCwxMDMsNjA5LDEwMyw3NTU1LDEwMywzOTcsMTAzLDE0MDksMTAzLDExOTgxNCw3MSwxMTk4NjYsNzEsMTE5OTE4LDcxLDExOTk3MCw3MSwxMjAwMjIsNzEsMTIwMDc0LDcxLDEyMDEyNiw3MSwxMjAxNzgsNzEsMTIwMjMwLDcxLDEyMDI4Miw3MSwxMjAzMzQsNzEsMTIwMzg2LDcxLDEyMDQzOCw3MSwxMjkyLDcxLDUwNTYsNzEsNTEwNyw3MSw0MjE5OCw3MSw2NTM1MiwxMDQsODQ2MiwxMDQsMTE5ODQxLDEwNCwxMTk5NDUsMTA0LDExOTk5NywxMDQsMTIwMDQ5LDEwNCwxMjAxMDEsMTA0LDEyMDE1MywxMDQsMTIwMjA1LDEwNCwxMjAyNTcsMTA0LDEyMDMwOSwxMDQsMTIwMzYxLDEwNCwxMjA0MTMsMTA0LDEyMDQ2NSwxMDQsMTIxMSwxMDQsMTM5MiwxMDQsNTA1OCwxMDQsNjUzMjAsNzIsODQ1OSw3Miw4NDYwLDcyLDg0NjEsNzIsMTE5ODE1LDcyLDExOTg2Nyw3MiwxMTk5MTksNzIsMTIwMDIzLDcyLDEyMDE3OSw3MiwxMjAyMzEsNzIsMTIwMjgzLDcyLDEyMDMzNSw3MiwxMjAzODcsNzIsMTIwNDM5LDcyLDkxOSw3MiwxMjA0OTQsNzIsMTIwNTUyLDcyLDEyMDYxMCw3MiwxMjA2NjgsNzIsMTIwNzI2LDcyLDExNDA2LDcyLDUwNTEsNzIsNTUwMCw3Miw0MjIxNSw3Miw2NjI1NSw3Miw3MzEsMTA1LDkwNzUsMTA1LDY1MzUzLDEwNSw4NTYwLDEwNSw4NTA1LDEwNSw4NTIwLDEwNSwxMTk4NDIsMTA1LDExOTg5NCwxMDUsMTE5OTQ2LDEwNSwxMTk5OTgsMTA1LDEyMDA1MCwxMDUsMTIwMTAyLDEwNSwxMjAxNTQsMTA1LDEyMDIwNiwxMDUsMTIwMjU4LDEwNSwxMjAzMTAsMTA1LDEyMDM2MiwxMDUsMTIwNDE0LDEwNSwxMjA0NjYsMTA1LDEyMDQ4NCwxMDUsNjE4LDEwNSw2MTcsMTA1LDk1MywxMDUsODEyNiwxMDUsODkwLDEwNSwxMjA1MjIsMTA1LDEyMDU4MCwxMDUsMTIwNjM4LDEwNSwxMjA2OTYsMTA1LDEyMDc1NCwxMDUsMTExMCwxMDUsNDI1NjcsMTA1LDEyMzEsMTA1LDQzODkzLDEwNSw1MDI5LDEwNSw3MTg3NSwxMDUsNjUzNTQsMTA2LDg1MjEsMTA2LDExOTg0MywxMDYsMTE5ODk1LDEwNiwxMTk5NDcsMTA2LDExOTk5OSwxMDYsMTIwMDUxLDEwNiwxMjAxMDMsMTA2LDEyMDE1NSwxMDYsMTIwMjA3LDEwNiwxMjAyNTksMTA2LDEyMDMxMSwxMDYsMTIwMzYzLDEwNiwxMjA0MTUsMTA2LDEyMDQ2NywxMDYsMTAxMSwxMDYsMTExMiwxMDYsNjUzMjIsNzQsMTE5ODE3LDc0LDExOTg2OSw3NCwxMTk5MjEsNzQsMTE5OTczLDc0LDEyMDAyNSw3NCwxMjAwNzcsNzQsMTIwMTI5LDc0LDEyMDE4MSw3NCwxMjAyMzMsNzQsMTIwMjg1LDc0LDEyMDMzNyw3NCwxMjAzODksNzQsMTIwNDQxLDc0LDQyOTMwLDc0LDg5NSw3NCwxMDMyLDc0LDUwMzUsNzQsNTI2MSw3NCw0MjIwMSw3NCwxMTk4NDQsMTA3LDExOTg5NiwxMDcsMTE5OTQ4LDEwNywxMjAwMDAsMTA3LDEyMDA1MiwxMDcsMTIwMTA0LDEwNywxMjAxNTYsMTA3LDEyMDIwOCwxMDcsMTIwMjYwLDEwNywxMjAzMTIsMTA3LDEyMDM2NCwxMDcsMTIwNDE2LDEwNywxMjA0NjgsMTA3LDg0OTAsNzUsNjUzMjMsNzUsMTE5ODE4LDc1LDExOTg3MCw3NSwxMTk5MjIsNzUsMTE5OTc0LDc1LDEyMDAyNiw3NSwxMjAwNzgsNzUsMTIwMTMwLDc1LDEyMDE4Miw3NSwxMjAyMzQsNzUsMTIwMjg2LDc1LDEyMDMzOCw3NSwxMjAzOTAsNzUsMTIwNDQyLDc1LDkyMiw3NSwxMjA0OTcsNzUsMTIwNTU1LDc1LDEyMDYxMyw3NSwxMjA2NzEsNzUsMTIwNzI5LDc1LDExNDEyLDc1LDUwOTQsNzUsNTg0NSw3NSw0MjE5OSw3NSw2Njg0MCw3NSwxNDcyLDEwOCw4NzM5LDczLDkyMTMsNzMsNjU1MTIsNzMsMTYzMywxMDgsMTc3Nyw3Myw2NjMzNiwxMDgsMTI1MTI3LDEwOCwxMjA3ODMsNzMsMTIwNzkzLDczLDEyMDgwMyw3MywxMjA4MTMsNzMsMTIwODIzLDczLDEzMDAzMyw3Myw2NTMyMSw3Myw4NTQ0LDczLDg0NjQsNzMsODQ2NSw3MywxMTk4MTYsNzMsMTE5ODY4LDczLDExOTkyMCw3MywxMjAwMjQsNzMsMTIwMTI4LDczLDEyMDE4MCw3MywxMjAyMzIsNzMsMTIwMjg0LDczLDEyMDMzNiw3MywxMjAzODgsNzMsMTIwNDQwLDczLDY1MzU2LDEwOCw4NTcyLDczLDg0NjcsMTA4LDExOTg0NSwxMDgsMTE5ODk3LDEwOCwxMTk5NDksMTA4LDEyMDAwMSwxMDgsMTIwMDUzLDEwOCwxMjAxMDUsNzMsMTIwMTU3LDczLDEyMDIwOSw3MywxMjAyNjEsNzMsMTIwMzEzLDczLDEyMDM2NSw3MywxMjA0MTcsNzMsMTIwNDY5LDczLDQ0OCw3MywxMjA0OTYsNzMsMTIwNTU0LDczLDEyMDYxMiw3MywxMjA2NzAsNzMsMTIwNzI4LDczLDExNDEwLDczLDEwMzAsNzMsMTIxNiw3MywxNDkzLDEwOCwxNTAzLDEwOCwxNTc1LDEwOCwxMjY0NjQsMTA4LDEyNjU5MiwxMDgsNjUxNjYsMTA4LDY1MTY1LDEwOCwxOTk0LDEwOCwxMTU5OSw3Myw1ODI1LDczLDQyMjI2LDczLDkzOTkyLDczLDY2MTg2LDEyNCw2NjMxMywxMjQsMTE5MzM4LDc2LDg1NTYsNzYsODQ2Niw3NiwxMTk4MTksNzYsMTE5ODcxLDc2LDExOTkyMyw3NiwxMjAwMjcsNzYsMTIwMDc5LDc2LDEyMDEzMSw3NiwxMjAxODMsNzYsMTIwMjM1LDc2LDEyMDI4Nyw3NiwxMjAzMzksNzYsMTIwMzkxLDc2LDEyMDQ0Myw3NiwxMTQ3Miw3Niw1MDg2LDc2LDUyOTAsNzYsNDIyMDksNzYsOTM5NzQsNzYsNzE4NDMsNzYsNzE4NTgsNzYsNjY1ODcsNzYsNjY4NTQsNzYsNjUzMjUsNzcsODU1OSw3Nyw4NDk5LDc3LDExOTgyMCw3NywxMTk4NzIsNzcsMTE5OTI0LDc3LDEyMDAyOCw3NywxMjAwODAsNzcsMTIwMTMyLDc3LDEyMDE4NCw3NywxMjAyMzYsNzcsMTIwMjg4LDc3LDEyMDM0MCw3NywxMjAzOTIsNzcsMTIwNDQ0LDc3LDkyNCw3NywxMjA0OTksNzcsMTIwNTU3LDc3LDEyMDYxNSw3NywxMjA2NzMsNzcsMTIwNzMxLDc3LDEwMTgsNzcsMTE0MTYsNzcsNTA0Nyw3Nyw1NjE2LDc3LDU4NDYsNzcsNDIyMDcsNzcsNjYyMjQsNzcsNjYzMjEsNzcsMTE5ODQ3LDExMCwxMTk4OTksMTEwLDExOTk1MSwxMTAsMTIwMDAzLDExMCwxMjAwNTUsMTEwLDEyMDEwNywxMTAsMTIwMTU5LDExMCwxMjAyMTEsMTEwLDEyMDI2MywxMTAsMTIwMzE1LDExMCwxMjAzNjcsMTEwLDEyMDQxOSwxMTAsMTIwNDcxLDExMCwxNDAwLDExMCwxNDA0LDExMCw2NTMyNiw3OCw4NDY5LDc4LDExOTgyMSw3OCwxMTk4NzMsNzgsMTE5OTI1LDc4LDExOTk3Nyw3OCwxMjAwMjksNzgsMTIwMDgxLDc4LDEyMDE4NSw3OCwxMjAyMzcsNzgsMTIwMjg5LDc4LDEyMDM0MSw3OCwxMjAzOTMsNzgsMTIwNDQ1LDc4LDkyNSw3OCwxMjA1MDAsNzgsMTIwNTU4LDc4LDEyMDYxNiw3OCwxMjA2NzQsNzgsMTIwNzMyLDc4LDExNDE4LDc4LDQyMjA4LDc4LDY2ODM1LDc4LDMwNzQsMTExLDMyMDIsMTExLDMzMzAsMTExLDM0NTgsMTExLDI0MDYsMTExLDI2NjIsMTExLDI3OTAsMTExLDMwNDYsMTExLDMxNzQsMTExLDMzMDIsMTExLDM0MzAsMTExLDM2NjQsMTExLDM3OTIsMTExLDQxNjAsMTExLDE2MzcsMTExLDE3ODEsMTExLDY1MzU5LDExMSw4NTAwLDExMSwxMTk4NDgsMTExLDExOTkwMCwxMTEsMTE5OTUyLDExMSwxMjAwNTYsMTExLDEyMDEwOCwxMTEsMTIwMTYwLDExMSwxMjAyMTIsMTExLDEyMDI2NCwxMTEsMTIwMzE2LDExMSwxMjAzNjgsMTExLDEyMDQyMCwxMTEsMTIwNDcyLDExMSw3NDM5LDExMSw3NDQxLDExMSw0MzgzNywxMTEsOTU5LDExMSwxMjA1MjgsMTExLDEyMDU4NiwxMTEsMTIwNjQ0LDExMSwxMjA3MDIsMTExLDEyMDc2MCwxMTEsOTYzLDExMSwxMjA1MzIsMTExLDEyMDU5MCwxMTEsMTIwNjQ4LDExMSwxMjA3MDYsMTExLDEyMDc2NCwxMTEsMTE0MjMsMTExLDQzNTEsMTExLDE0MTMsMTExLDE1MDUsMTExLDE2MDcsMTExLDEyNjUwMCwxMTEsMTI2NTY0LDExMSwxMjY1OTYsMTExLDY1MjU5LDExMSw2NTI2MCwxMTEsNjUyNTgsMTExLDY1MjU3LDExMSwxNzI2LDExMSw2NDQyOCwxMTEsNjQ0MjksMTExLDY0NDI3LDExMSw2NDQyNiwxMTEsMTcyOSwxMTEsNjQ0MjQsMTExLDY0NDI1LDExMSw2NDQyMywxMTEsNjQ0MjIsMTExLDE3NDksMTExLDMzNjAsMTExLDQxMjUsMTExLDY2Nzk0LDExMSw3MTg4MCwxMTEsNzE4OTUsMTExLDY2NjA0LDExMSwxOTg0LDc5LDI1MzQsNzksMjkxOCw3OSwxMjI5NSw3OSw3MDg2NCw3OSw3MTkwNCw3OSwxMjA3ODIsNzksMTIwNzkyLDc5LDEyMDgwMiw3OSwxMjA4MTIsNzksMTIwODIyLDc5LDEzMDAzMiw3OSw2NTMyNyw3OSwxMTk4MjIsNzksMTE5ODc0LDc5LDExOTkyNiw3OSwxMTk5NzgsNzksMTIwMDMwLDc5LDEyMDA4Miw3OSwxMjAxMzQsNzksMTIwMTg2LDc5LDEyMDIzOCw3OSwxMjAyOTAsNzksMTIwMzQyLDc5LDEyMDM5NCw3OSwxMjA0NDYsNzksOTI3LDc5LDEyMDUwMiw3OSwxMjA1NjAsNzksMTIwNjE4LDc5LDEyMDY3Niw3OSwxMjA3MzQsNzksMTE0MjIsNzksMTM2NSw3OSwxMTYwNCw3OSw0ODE2LDc5LDI4NDgsNzksNjY3NTQsNzksNDIyMjcsNzksNzE4NjEsNzksNjYxOTQsNzksNjYyMTksNzksNjY1NjQsNzksNjY4MzgsNzksOTA3NiwxMTIsNjUzNjAsMTEyLDExOTg0OSwxMTIsMTE5OTAxLDExMiwxMTk5NTMsMTEyLDEyMDAwNSwxMTIsMTIwMDU3LDExMiwxMjAxMDksMTEyLDEyMDE2MSwxMTIsMTIwMjEzLDExMiwxMjAyNjUsMTEyLDEyMDMxNywxMTIsMTIwMzY5LDExMiwxMjA0MjEsMTEyLDEyMDQ3MywxMTIsOTYxLDExMiwxMjA1MzAsMTEyLDEyMDU0NCwxMTIsMTIwNTg4LDExMiwxMjA2MDIsMTEyLDEyMDY0NiwxMTIsMTIwNjYwLDExMiwxMjA3MDQsMTEyLDEyMDcxOCwxMTIsMTIwNzYyLDExMiwxMjA3NzYsMTEyLDExNDI3LDExMiw2NTMyOCw4MCw4NDczLDgwLDExOTgyMyw4MCwxMTk4NzUsODAsMTE5OTI3LDgwLDExOTk3OSw4MCwxMjAwMzEsODAsMTIwMDgzLDgwLDEyMDE4Nyw4MCwxMjAyMzksODAsMTIwMjkxLDgwLDEyMDM0Myw4MCwxMjAzOTUsODAsMTIwNDQ3LDgwLDkyOSw4MCwxMjA1MDQsODAsMTIwNTYyLDgwLDEyMDYyMCw4MCwxMjA2NzgsODAsMTIwNzM2LDgwLDExNDI2LDgwLDUwOTAsODAsNTIyOSw4MCw0MjE5Myw4MCw2NjE5Nyw4MCwxMTk4NTAsMTEzLDExOTkwMiwxMTMsMTE5OTU0LDExMywxMjAwMDYsMTEzLDEyMDA1OCwxMTMsMTIwMTEwLDExMywxMjAxNjIsMTEzLDEyMDIxNCwxMTMsMTIwMjY2LDExMywxMjAzMTgsMTEzLDEyMDM3MCwxMTMsMTIwNDIyLDExMywxMjA0NzQsMTEzLDEzMDcsMTEzLDEzNzksMTEzLDEzODIsMTEzLDg0NzQsODEsMTE5ODI0LDgxLDExOTg3Niw4MSwxMTk5MjgsODEsMTE5OTgwLDgxLDEyMDAzMiw4MSwxMjAwODQsODEsMTIwMTg4LDgxLDEyMDI0MCw4MSwxMjAyOTIsODEsMTIwMzQ0LDgxLDEyMDM5Niw4MSwxMjA0NDgsODEsMTE2MDUsODEsMTE5ODUxLDExNCwxMTk5MDMsMTE0LDExOTk1NSwxMTQsMTIwMDA3LDExNCwxMjAwNTksMTE0LDEyMDExMSwxMTQsMTIwMTYzLDExNCwxMjAyMTUsMTE0LDEyMDI2NywxMTQsMTIwMzE5LDExNCwxMjAzNzEsMTE0LDEyMDQyMywxMTQsMTIwNDc1LDExNCw0Mzg0NywxMTQsNDM4NDgsMTE0LDc0NjIsMTE0LDExMzk3LDExNCw0MzkwNSwxMTQsMTE5MzE4LDgyLDg0NzUsODIsODQ3Niw4Miw4NDc3LDgyLDExOTgyNSw4MiwxMTk4NzcsODIsMTE5OTI5LDgyLDEyMDAzMyw4MiwxMjAxODksODIsMTIwMjQxLDgyLDEyMDI5Myw4MiwxMjAzNDUsODIsMTIwMzk3LDgyLDEyMDQ0OSw4Miw0MjIsODIsNTAyNSw4Miw1MDc0LDgyLDY2NzQwLDgyLDU1MTEsODIsNDIyMTEsODIsOTQwMDUsODIsNjUzNjMsMTE1LDExOTg1MiwxMTUsMTE5OTA0LDExNSwxMTk5NTYsMTE1LDEyMDAwOCwxMTUsMTIwMDYwLDExNSwxMjAxMTIsMTE1LDEyMDE2NCwxMTUsMTIwMjE2LDExNSwxMjAyNjgsMTE1LDEyMDMyMCwxMTUsMTIwMzcyLDExNSwxMjA0MjQsMTE1LDEyMDQ3NiwxMTUsNDI4MDEsMTE1LDQ0NSwxMTUsMTEwOSwxMTUsNDM5NDYsMTE1LDcxODczLDExNSw2NjYzMiwxMTUsNjUzMzEsODMsMTE5ODI2LDgzLDExOTg3OCw4MywxMTk5MzAsODMsMTE5OTgyLDgzLDEyMDAzNCw4MywxMjAwODYsODMsMTIwMTM4LDgzLDEyMDE5MCw4MywxMjAyNDIsODMsMTIwMjk0LDgzLDEyMDM0Niw4MywxMjAzOTgsODMsMTIwNDUwLDgzLDEwMjksODMsMTM1OSw4Myw1MDc3LDgzLDUwODIsODMsNDIyMTAsODMsOTQwMTAsODMsNjYxOTgsODMsNjY1OTIsODMsMTE5ODUzLDExNiwxMTk5MDUsMTE2LDExOTk1NywxMTYsMTIwMDA5LDExNiwxMjAwNjEsMTE2LDEyMDExMywxMTYsMTIwMTY1LDExNiwxMjAyMTcsMTE2LDEyMDI2OSwxMTYsMTIwMzIxLDExNiwxMjAzNzMsMTE2LDEyMDQyNSwxMTYsMTIwNDc3LDExNiw4ODY4LDg0LDEwMjAxLDg0LDEyODg3Miw4NCw2NTMzMiw4NCwxMTk4MjcsODQsMTE5ODc5LDg0LDExOTkzMSw4NCwxMTk5ODMsODQsMTIwMDM1LDg0LDEyMDA4Nyw4NCwxMjAxMzksODQsMTIwMTkxLDg0LDEyMDI0Myw4NCwxMjAyOTUsODQsMTIwMzQ3LDg0LDEyMDM5OSw4NCwxMjA0NTEsODQsOTMyLDg0LDEyMDUwNyw4NCwxMjA1NjUsODQsMTIwNjIzLDg0LDEyMDY4MSw4NCwxMjA3MzksODQsMTE0MzAsODQsNTAyNiw4NCw0MjE5Niw4NCw5Mzk2Miw4NCw3MTg2OCw4NCw2NjE5OSw4NCw2NjIyNSw4NCw2NjMyNSw4NCwxMTk4NTQsMTE3LDExOTkwNiwxMTcsMTE5OTU4LDExNywxMjAwMTAsMTE3LDEyMDA2MiwxMTcsMTIwMTE0LDExNywxMjAxNjYsMTE3LDEyMDIxOCwxMTcsMTIwMjcwLDExNywxMjAzMjIsMTE3LDEyMDM3NCwxMTcsMTIwNDI2LDExNywxMjA0NzgsMTE3LDQyOTExLDExNyw3NDUyLDExNyw0Mzg1NCwxMTcsNDM4NTgsMTE3LDY1MSwxMTcsOTY1LDExNywxMjA1MzQsMTE3LDEyMDU5MiwxMTcsMTIwNjUwLDExNywxMjA3MDgsMTE3LDEyMDc2NiwxMTcsMTQwNSwxMTcsNjY4MDYsMTE3LDcxODk2LDExNyw4NzQ2LDg1LDg4OTksODUsMTE5ODI4LDg1LDExOTg4MCw4NSwxMTk5MzIsODUsMTE5OTg0LDg1LDEyMDAzNiw4NSwxMjAwODgsODUsMTIwMTQwLDg1LDEyMDE5Miw4NSwxMjAyNDQsODUsMTIwMjk2LDg1LDEyMDM0OCw4NSwxMjA0MDAsODUsMTIwNDUyLDg1LDEzNTcsODUsNDYwOCw4NSw2Njc2Niw4NSw1MTk2LDg1LDQyMjI4LDg1LDk0MDE4LDg1LDcxODY0LDg1LDg3NDQsMTE4LDg4OTcsMTE4LDY1MzY2LDExOCw4NTY0LDExOCwxMTk4NTUsMTE4LDExOTkwNywxMTgsMTE5OTU5LDExOCwxMjAwMTEsMTE4LDEyMDA2MywxMTgsMTIwMTE1LDExOCwxMjAxNjcsMTE4LDEyMDIxOSwxMTgsMTIwMjcxLDExOCwxMjAzMjMsMTE4LDEyMDM3NSwxMTgsMTIwNDI3LDExOCwxMjA0NzksMTE4LDc0NTYsMTE4LDk1NywxMTgsMTIwNTI2LDExOCwxMjA1ODQsMTE4LDEyMDY0MiwxMTgsMTIwNzAwLDExOCwxMjA3NTgsMTE4LDExNDEsMTE4LDE0OTYsMTE4LDcxNDMwLDExOCw0Mzk0NSwxMTgsNzE4NzIsMTE4LDExOTMwOSw4NiwxNjM5LDg2LDE3ODMsODYsODU0OCw4NiwxMTk4MjksODYsMTE5ODgxLDg2LDExOTkzMyw4NiwxMTk5ODUsODYsMTIwMDM3LDg2LDEyMDA4OSw4NiwxMjAxNDEsODYsMTIwMTkzLDg2LDEyMDI0NSw4NiwxMjAyOTcsODYsMTIwMzQ5LDg2LDEyMDQwMSw4NiwxMjA0NTMsODYsMTE0MCw4NiwxMTU3Niw4Niw1MDgxLDg2LDUxNjcsODYsNDI3MTksODYsNDIyMTQsODYsOTM5NjAsODYsNzE4NDAsODYsNjY4NDUsODYsNjIzLDExOSwxMTk4NTYsMTE5LDExOTkwOCwxMTksMTE5OTYwLDExOSwxMjAwMTIsMTE5LDEyMDA2NCwxMTksMTIwMTE2LDExOSwxMjAxNjgsMTE5LDEyMDIyMCwxMTksMTIwMjcyLDExOSwxMjAzMjQsMTE5LDEyMDM3NiwxMTksMTIwNDI4LDExOSwxMjA0ODAsMTE5LDc0NTcsMTE5LDExMjEsMTE5LDEzMDksMTE5LDEzNzcsMTE5LDcxNDM0LDExOSw3MTQzOCwxMTksNzE0MzksMTE5LDQzOTA3LDExOSw3MTkxOSw4Nyw3MTkxMCw4NywxMTk4MzAsODcsMTE5ODgyLDg3LDExOTkzNCw4NywxMTk5ODYsODcsMTIwMDM4LDg3LDEyMDA5MCw4NywxMjAxNDIsODcsMTIwMTk0LDg3LDEyMDI0Niw4NywxMjAyOTgsODcsMTIwMzUwLDg3LDEyMDQwMiw4NywxMjA0NTQsODcsMTMwOCw4Nyw1MDQzLDg3LDUwNzYsODcsNDIyMTgsODcsNTc0MiwxMjAsMTA1MzksMTIwLDEwNTQwLDEyMCwxMDc5OSwxMjAsNjUzNjgsMTIwLDg1NjksMTIwLDExOTg1NywxMjAsMTE5OTA5LDEyMCwxMTk5NjEsMTIwLDEyMDAxMywxMjAsMTIwMDY1LDEyMCwxMjAxMTcsMTIwLDEyMDE2OSwxMjAsMTIwMjIxLDEyMCwxMjAyNzMsMTIwLDEyMDMyNSwxMjAsMTIwMzc3LDEyMCwxMjA0MjksMTIwLDEyMDQ4MSwxMjAsNTQ0MSwxMjAsNTUwMSwxMjAsNTc0MSw4OCw5NTg3LDg4LDY2MzM4LDg4LDcxOTE2LDg4LDY1MzM2LDg4LDg1NTMsODgsMTE5ODMxLDg4LDExOTg4Myw4OCwxMTk5MzUsODgsMTE5OTg3LDg4LDEyMDAzOSw4OCwxMjAwOTEsODgsMTIwMTQzLDg4LDEyMDE5NSw4OCwxMjAyNDcsODgsMTIwMjk5LDg4LDEyMDM1MSw4OCwxMjA0MDMsODgsMTIwNDU1LDg4LDQyOTMxLDg4LDkzNSw4OCwxMjA1MTAsODgsMTIwNTY4LDg4LDEyMDYyNiw4OCwxMjA2ODQsODgsMTIwNzQyLDg4LDExNDM2LDg4LDExNjEzLDg4LDU4MTUsODgsNDIyMTksODgsNjYxOTIsODgsNjYyMjgsODgsNjYzMjcsODgsNjY4NTUsODgsNjExLDEyMSw3NTY0LDEyMSw2NTM2OSwxMjEsMTE5ODU4LDEyMSwxMTk5MTAsMTIxLDExOTk2MiwxMjEsMTIwMDE0LDEyMSwxMjAwNjYsMTIxLDEyMDExOCwxMjEsMTIwMTcwLDEyMSwxMjAyMjIsMTIxLDEyMDI3NCwxMjEsMTIwMzI2LDEyMSwxMjAzNzgsMTIxLDEyMDQzMCwxMjEsMTIwNDgyLDEyMSw2NTUsMTIxLDc5MzUsMTIxLDQzODY2LDEyMSw5NDcsMTIxLDg1MDksMTIxLDEyMDUxNiwxMjEsMTIwNTc0LDEyMSwxMjA2MzIsMTIxLDEyMDY5MCwxMjEsMTIwNzQ4LDEyMSwxMTk5LDEyMSw0MzI3LDEyMSw3MTkwMCwxMjEsNjUzMzcsODksMTE5ODMyLDg5LDExOTg4NCw4OSwxMTk5MzYsODksMTE5OTg4LDg5LDEyMDA0MCw4OSwxMjAwOTIsODksMTIwMTQ0LDg5LDEyMDE5Niw4OSwxMjAyNDgsODksMTIwMzAwLDg5LDEyMDM1Miw4OSwxMjA0MDQsODksMTIwNDU2LDg5LDkzMyw4OSw5NzgsODksMTIwNTA4LDg5LDEyMDU2Niw4OSwxMjA2MjQsODksMTIwNjgyLDg5LDEyMDc0MCw4OSwxMTQzMiw4OSwxMTk4LDg5LDUwMzMsODksNTA1Myw4OSw0MjIyMCw4OSw5NDAxOSw4OSw3MTg0NCw4OSw2NjIyNiw4OSwxMTk4NTksMTIyLDExOTkxMSwxMjIsMTE5OTYzLDEyMiwxMjAwMTUsMTIyLDEyMDA2NywxMjIsMTIwMTE5LDEyMiwxMjAxNzEsMTIyLDEyMDIyMywxMjIsMTIwMjc1LDEyMiwxMjAzMjcsMTIyLDEyMDM3OSwxMjIsMTIwNDMxLDEyMiwxMjA0ODMsMTIyLDc0NTgsMTIyLDQzOTIzLDEyMiw3MTg3NiwxMjIsNjYyOTMsOTAsNzE5MDksOTAsNjUzMzgsOTAsODQ4NCw5MCw4NDg4LDkwLDExOTgzMyw5MCwxMTk4ODUsOTAsMTE5OTM3LDkwLDExOTk4OSw5MCwxMjAwNDEsOTAsMTIwMTk3LDkwLDEyMDI0OSw5MCwxMjAzMDEsOTAsMTIwMzUzLDkwLDEyMDQwNSw5MCwxMjA0NTcsOTAsOTE4LDkwLDEyMDQ5Myw5MCwxMjA1NTEsOTAsMTIwNjA5LDkwLDEyMDY2Nyw5MCwxMjA3MjUsOTAsNTA1OSw5MCw0MjIwNCw5MCw3MTg0OSw5MCw2NTI4MiwzNCw2NTI4NCwzNiw2NTI4NSwzNyw2NTI4NiwzOCw2NTI5MCw0Miw2NTI5MSw0Myw2NTI5NCw0Niw2NTI5NSw0Nyw2NTI5Niw0OCw2NTI5Nyw0OSw2NTI5OCw1MCw2NTI5OSw1MSw2NTMwMCw1Miw2NTMwMSw1Myw2NTMwMiw1NCw2NTMwMyw1NSw2NTMwNCw1Niw2NTMwNSw1Nyw2NTMwOCw2MCw2NTMwOSw2MSw2NTMxMCw2Miw2NTMxMiw2NCw2NTMxNiw2OCw2NTMxOCw3MCw2NTMxOSw3MSw2NTMyNCw3Niw2NTMyOSw4MSw2NTMzMCw4Miw2NTMzMyw4NSw2NTMzNCw4Niw2NTMzNSw4Nyw2NTM0Myw5NSw2NTM0Niw5OCw2NTM0OCwxMDAsNjUzNTAsMTAyLDY1MzU1LDEwNyw2NTM1NywxMDksNjUzNTgsMTEwLDY1MzYxLDExMyw2NTM2MiwxMTQsNjUzNjQsMTE2LDY1MzY1LDExNyw2NTM2NywxMTksNjUzNzAsMTIyLDY1MzcxLDEyMyw2NTM3MywxMjVdLCJfZGVmYXVsdCI6WzE2MCwzMiw4MjExLDQ1LDY1Mzc0LDEyNiw2NTMwNiw1OCw2NTI4MSwzMyw4MjE2LDk2LDgyMTcsOTYsODI0NSw5NiwxODAsOTYsMTI0OTQsNDcsMTA0Nyw1MSwxMDczLDU0LDEwNzIsOTcsMTA0MCw2NSwxMDY4LDk4LDEwNDIsNjYsMTA4OSw5OSwxMDU3LDY3LDEwNzcsMTAxLDEwNDUsNjksMTA1Myw3MiwzMDUsMTA1LDEwNTAsNzUsOTIxLDczLDEwNTIsNzcsMTA4NiwxMTEsMTA1NCw3OSwxMDA5LDExMiwxMDg4LDExMiwxMDU2LDgwLDEwNzUsMTE0LDEwNTgsODQsMjE1LDEyMCwxMDkzLDEyMCwxMDYxLDg4LDEwOTEsMTIxLDEwNTksODksNjUyODMsMzUsNjUyODgsNDAsNjUyODksNDEsNjUyOTIsNDQsNjUzMDcsNTksNjUzMTEsNjNdLCJjcyI6WzY1Mzc0LDEyNiw2NTMwNiw1OCw2NTI4MSwzMyw4MjE2LDk2LDgyMTcsOTYsODI0NSw5NiwxODAsOTYsMTI0OTQsNDcsMTA0Nyw1MSwxMDczLDU0LDEwNzIsOTcsMTA0MCw2NSwxMDY4LDk4LDEwNDIsNjYsMTA4OSw5OSwxMDU3LDY3LDEwNzcsMTAxLDEwNDUsNjksMTA1Myw3MiwzMDUsMTA1LDEwNTAsNzUsOTIxLDczLDEwNTIsNzcsMTA4NiwxMTEsMTA1NCw3OSwxMDA5LDExMiwxMDg4LDExMiwxMDU2LDgwLDEwNzUsMTE0LDEwNTgsODQsMTA5MywxMjAsMTA2MSw4OCwxMDkxLDEyMSwxMDU5LDg5LDY1MjgzLDM1LDY1Mjg4LDQwLDY1Mjg5LDQxLDY1MjkyLDQ0LDY1MzA3LDU5LDY1MzExLDYzXSwiZGUiOls2NTM3NCwxMjYsNjUzMDYsNTgsNjUyODEsMzMsODIxNiw5Niw4MjE3LDk2LDgyNDUsOTYsMTgwLDk2LDEyNDk0LDQ3LDEwNDcsNTEsMTA3Myw1NCwxMDcyLDk3LDEwNDAsNjUsMTA2OCw5OCwxMDQyLDY2LDEwODksOTksMTA1Nyw2NywxMDc3LDEwMSwxMDQ1LDY5LDEwNTMsNzIsMzA1LDEwNSwxMDUwLDc1LDkyMSw3MywxMDUyLDc3LDEwODYsMTExLDEwNTQsNzksMTAwOSwxMTIsMTA4OCwxMTIsMTA1Niw4MCwxMDc1LDExNCwxMDU4LDg0LDEwOTMsMTIwLDEwNjEsODgsMTA5MSwxMjEsMTA1OSw4OSw2NTI4MywzNSw2NTI4OCw0MCw2NTI4OSw0MSw2NTI5Miw0NCw2NTMwNyw1OSw2NTMxMSw2M10sImVzIjpbODIxMSw0NSw2NTM3NCwxMjYsNjUzMDYsNTgsNjUyODEsMzMsODI0NSw5NiwxODAsOTYsMTI0OTQsNDcsMTA0Nyw1MSwxMDczLDU0LDEwNzIsOTcsMTA0MCw2NSwxMDY4LDk4LDEwNDIsNjYsMTA4OSw5OSwxMDU3LDY3LDEwNzcsMTAxLDEwNDUsNjksMTA1Myw3MiwzMDUsMTA1LDEwNTAsNzUsMTA1Miw3NywxMDg2LDExMSwxMDU0LDc5LDEwMDksMTEyLDEwODgsMTEyLDEwNTYsODAsMTA3NSwxMTQsMTA1OCw4NCwyMTUsMTIwLDEwOTMsMTIwLDEwNjEsODgsMTA5MSwxMjEsMTA1OSw4OSw2NTI4MywzNSw2NTI4OCw0MCw2NTI4OSw0MSw2NTI5Miw0NCw2NTMwNyw1OSw2NTMxMSw2M10sImZyIjpbNjUzNzQsMTI2LDY1MzA2LDU4LDY1MjgxLDMzLDgyMTYsOTYsODI0NSw5NiwxMjQ5NCw0NywxMDQ3LDUxLDEwNzMsNTQsMTA3Miw5NywxMDQwLDY1LDEwNjgsOTgsMTA0Miw2NiwxMDg5LDk5LDEwNTcsNjcsMTA3NywxMDEsMTA0NSw2OSwxMDUzLDcyLDMwNSwxMDUsMTA1MCw3NSw5MjEsNzMsMTA1Miw3NywxMDg2LDExMSwxMDU0LDc5LDEwMDksMTEyLDEwODgsMTEyLDEwNTYsODAsMTA3NSwxMTQsMTA1OCw4NCwyMTUsMTIwLDEwOTMsMTIwLDEwNjEsODgsMTA5MSwxMjEsMTA1OSw4OSw2NTI4MywzNSw2NTI4OCw0MCw2NTI4OSw0MSw2NTI5Miw0NCw2NTMwNyw1OSw2NTMxMSw2M10sIml0IjpbMTYwLDMyLDgyMTEsNDUsNjUzNzQsMTI2LDY1MzA2LDU4LDY1MjgxLDMzLDgyMTYsOTYsODI0NSw5NiwxODAsOTYsMTI0OTQsNDcsMTA0Nyw1MSwxMDczLDU0LDEwNzIsOTcsMTA0MCw2NSwxMDY4LDk4LDEwNDIsNjYsMTA4OSw5OSwxMDU3LDY3LDEwNzcsMTAxLDEwNDUsNjksMTA1Myw3MiwzMDUsMTA1LDEwNTAsNzUsOTIxLDczLDEwNTIsNzcsMTA4NiwxMTEsMTA1NCw3OSwxMDA5LDExMiwxMDg4LDExMiwxMDU2LDgwLDEwNzUsMTE0LDEwNTgsODQsMjE1LDEyMCwxMDkzLDEyMCwxMDYxLDg4LDEwOTEsMTIxLDEwNTksODksNjUyODMsMzUsNjUyODgsNDAsNjUyODksNDEsNjUyOTIsNDQsNjUzMDcsNTksNjUzMTEsNjNdLCJqYSI6WzgyMTEsNDUsNjUzMDYsNTgsNjUyODEsMzMsODIxNiw5Niw4MjE3LDk2LDgyNDUsOTYsMTgwLDk2LDEwNDcsNTEsMTA3Myw1NCwxMDcyLDk3LDEwNDAsNjUsMTA2OCw5OCwxMDQyLDY2LDEwODksOTksMTA1Nyw2NywxMDc3LDEwMSwxMDQ1LDY5LDEwNTMsNzIsMzA1LDEwNSwxMDUwLDc1LDkyMSw3MywxMDUyLDc3LDEwODYsMTExLDEwNTQsNzksMTAwOSwxMTIsMTA4OCwxMTIsMTA1Niw4MCwxMDc1LDExNCwxMDU4LDg0LDIxNSwxMjAsMTA5MywxMjAsMTA2MSw4OCwxMDkxLDEyMSwxMDU5LDg5LDY1MjgzLDM1LDY1MjkyLDQ0LDY1MzA3LDU5XSwia28iOls4MjExLDQ1LDY1Mzc0LDEyNiw2NTMwNiw1OCw2NTI4MSwzMyw4MjQ1LDk2LDE4MCw5NiwxMjQ5NCw0NywxMDQ3LDUxLDEwNzMsNTQsMTA3Miw5NywxMDQwLDY1LDEwNjgsOTgsMTA0Miw2NiwxMDg5LDk5LDEwNTcsNjcsMTA3NywxMDEsMTA0NSw2OSwxMDUzLDcyLDMwNSwxMDUsMTA1MCw3NSw5MjEsNzMsMTA1Miw3NywxMDg2LDExMSwxMDU0LDc5LDEwMDksMTEyLDEwODgsMTEyLDEwNTYsODAsMTA3NSwxMTQsMTA1OCw4NCwyMTUsMTIwLDEwOTMsMTIwLDEwNjEsODgsMTA5MSwxMjEsMTA1OSw4OSw2NTI4MywzNSw2NTI4OCw0MCw2NTI4OSw0MSw2NTI5Miw0NCw2NTMwNyw1OSw2NTMxMSw2M10sInBsIjpbNjUzNzQsMTI2LDY1MzA2LDU4LDY1MjgxLDMzLDgyMTYsOTYsODIxNyw5Niw4MjQ1LDk2LDE4MCw5NiwxMjQ5NCw0NywxMDQ3LDUxLDEwNzMsNTQsMTA3Miw5NywxMDQwLDY1LDEwNjgsOTgsMTA0Miw2NiwxMDg5LDk5LDEwNTcsNjcsMTA3NywxMDEsMTA0NSw2OSwxMDUzLDcyLDMwNSwxMDUsMTA1MCw3NSw5MjEsNzMsMTA1Miw3NywxMDg2LDExMSwxMDU0LDc5LDEwMDksMTEyLDEwODgsMTEyLDEwNTYsODAsMTA3NSwxMTQsMTA1OCw4NCwyMTUsMTIwLDEwOTMsMTIwLDEwNjEsODgsMTA5MSwxMjEsMTA1OSw4OSw2NTI4MywzNSw2NTI4OCw0MCw2NTI4OSw0MSw2NTI5Miw0NCw2NTMwNyw1OSw2NTMxMSw2M10sInB0LUJSIjpbNjUzNzQsMTI2LDY1MzA2LDU4LDY1MjgxLDMzLDgyMTYsOTYsODIxNyw5Niw4MjQ1LDk2LDE4MCw5NiwxMjQ5NCw0NywxMDQ3LDUxLDEwNzMsNTQsMTA3Miw5NywxMDQwLDY1LDEwNjgsOTgsMTA0Miw2NiwxMDg5LDk5LDEwNTcsNjcsMTA3NywxMDEsMTA0NSw2OSwxMDUzLDcyLDMwNSwxMDUsMTA1MCw3NSw5MjEsNzMsMTA1Miw3NywxMDg2LDExMSwxMDU0LDc5LDEwMDksMTEyLDEwODgsMTEyLDEwNTYsODAsMTA3NSwxMTQsMTA1OCw4NCwyMTUsMTIwLDEwOTMsMTIwLDEwNjEsODgsMTA5MSwxMjEsMTA1OSw4OSw2NTI4MywzNSw2NTI4OCw0MCw2NTI4OSw0MSw2NTI5Miw0NCw2NTMwNyw1OSw2NTMxMSw2M10sInFwcy1wbG9jIjpbMTYwLDMyLDgyMTEsNDUsNjUzNzQsMTI2LDY1MzA2LDU4LDY1MjgxLDMzLDgyMTYsOTYsODIxNyw5Niw4MjQ1LDk2LDE4MCw5NiwxMjQ5NCw0NywxMDQ3LDUxLDEwNzMsNTQsMTA3Miw5NywxMDQwLDY1LDEwNjgsOTgsMTA0Miw2NiwxMDg5LDk5LDEwNTcsNjcsMTA3NywxMDEsMTA0NSw2OSwxMDUzLDcyLDMwNSwxMDUsMTA1MCw3NSw5MjEsNzMsMTA1Miw3NywxMDg2LDExMSwxMDU0LDc5LDEwODgsMTEyLDEwNTYsODAsMTA3NSwxMTQsMTA1OCw4NCwyMTUsMTIwLDEwOTMsMTIwLDEwNjEsODgsMTA5MSwxMjEsMTA1OSw4OSw2NTI4MywzNSw2NTI4OCw0MCw2NTI4OSw0MSw2NTI5Miw0NCw2NTMwNyw1OSw2NTMxMSw2M10sInJ1IjpbNjUzNzQsMTI2LDY1MzA2LDU4LDY1MjgxLDMzLDgyMTYsOTYsODIxNyw5Niw4MjQ1LDk2LDE4MCw5NiwxMjQ5NCw0NywzMDUsMTA1LDkyMSw3MywxMDA5LDExMiwyMTUsMTIwLDY1MjgzLDM1LDY1Mjg4LDQwLDY1Mjg5LDQxLDY1MjkyLDQ0LDY1MzA3LDU5LDY1MzExLDYzXSwidHIiOlsxNjAsMzIsODIxMSw0NSw2NTM3NCwxMjYsNjUzMDYsNTgsNjUyODEsMzMsODI0NSw5NiwxODAsOTYsMTI0OTQsNDcsMTA0Nyw1MSwxMDczLDU0LDEwNzIsOTcsMTA0MCw2NSwxMDY4LDk4LDEwNDIsNjYsMTA4OSw5OSwxMDU3LDY3LDEwNzcsMTAxLDEwNDUsNjksMTA1Myw3MiwxMDUwLDc1LDkyMSw3MywxMDUyLDc3LDEwODYsMTExLDEwNTQsNzksMTAwOSwxMTIsMTA4OCwxMTIsMTA1Niw4MCwxMDc1LDExNCwxMDU4LDg0LDIxNSwxMjAsMTA5MywxMjAsMTA2MSw4OCwxMDkxLDEyMSwxMDU5LDg5LDY1MjgzLDM1LDY1Mjg4LDQwLDY1Mjg5LDQxLDY1MjkyLDQ0LDY1MzA3LDU5LDY1MzExLDYzXSwiemgtaGFucyI6WzY1Mzc0LDEyNiw2NTMwNiw1OCw2NTI4MSwzMyw4MjQ1LDk2LDE4MCw5NiwxMjQ5NCw0NywxMDQ3LDUxLDEwNzMsNTQsMTA3Miw5NywxMDQwLDY1LDEwNjgsOTgsMTA0Miw2NiwxMDg5LDk5LDEwNTcsNjcsMTA3NywxMDEsMTA0NSw2OSwxMDUzLDcyLDMwNSwxMDUsMTA1MCw3NSw5MjEsNzMsMTA1Miw3NywxMDg2LDExMSwxMDU0LDc5LDEwMDksMTEyLDEwODgsMTEyLDEwNTYsODAsMTA3NSwxMTQsMTA1OCw4NCwyMTUsMTIwLDEwOTMsMTIwLDEwNjEsODgsMTA5MSwxMjEsMTA1OSw4OSw2NTI4OCw0MCw2NTI4OSw0MV0sInpoLWhhbnQiOls4MjExLDQ1LDY1Mzc0LDEyNiwxODAsOTYsMTI0OTQsNDcsMTA0Nyw1MSwxMDczLDU0LDEwNzIsOTcsMTA0MCw2NSwxMDY4LDk4LDEwNDIsNjYsMTA4OSw5OSwxMDU3LDY3LDEwNzcsMTAxLDEwNDUsNjksMTA1Myw3MiwzMDUsMTA1LDEwNTAsNzUsOTIxLDczLDEwNTIsNzcsMTA4NiwxMTEsMTA1NCw3OSwxMDA5LDExMiwxMDg4LDExMiwxMDU2LDgwLDEwNzUsMTE0LDEwNTgsODQsMjE1LDEyMCwxMDkzLDEyMCwxMDYxLDg4LDEwOTEsMTIxLDEwNTksODksNjUyODMsMzUsNjUzMDcsNTldfScpKSxzZS5jYWNoZT1uZXcgY2xhc3N7Y29uc3RydWN0b3IoZSl7dGhpcy5jb21wdXRlRm49ZSx0aGlzLmxhc3RDYWNoZT12b2lkIDAsdGhpcy5sYXN0QXJnS2V5PXZvaWQgMH1nZXQoZSl7dmFyIHQ9SlNPTi5zdHJpbmdpZnkoZSk7cmV0dXJuIHRoaXMubGFzdEFyZ0tleSE9PXQmJih0aGlzLmxhc3RBcmdLZXk9dCx0aGlzLmxhc3RDYWNoZT10aGlzLmNvbXB1dGVGbihlKSksdGhpcy5sYXN0Q2FjaGV9fShlPT57ZnVuY3Rpb24gdCh0KXtjb25zdCByPW5ldyBNYXA7Zm9yKGxldCBlPTA7ZTx0Lmxlbmd0aDtlKz0yKXIuc2V0KHRbZV0sdFtlKzFdKTtyZXR1cm4gcn1jb25zdCByPUQuYW1iaWd1b3VzQ2hhcmFjdGVyRGF0YS5nZXRWYWx1ZSgpO2xldCBuPWUuZmlsdGVyKGU9PiFlLnN0YXJ0c1dpdGgoIl8iKSYmZSBpbiByKSxpPXZvaWQgMDtmb3IoY29uc3QgYSBvZiBuPTA9PT1uLmxlbmd0aD9bIl9kZWZhdWx0Il06bil7Y29uc3Qgbz10KHJbYV0pO2k9ZnVuY3Rpb24oZSx0KXtpZighZSlyZXR1cm4gdDtjb25zdCByPW5ldyBNYXA7Zm9yKHZhcltuLGldb2YgZSl0LmhhcyhuKSYmci5zZXQobixpKTtyZXR1cm4gcn0oaSxvKX1jb25zdCBvPWZ1bmN0aW9uKGUsdCl7Y29uc3Qgcj1uZXcgTWFwKGUpO2Zvcih2YXJbbixpXW9mIHQpci5zZXQobixpKTtyZXR1cm4gcn0odChyLl9jb21tb24pLGkpO3JldHVybiBuZXcgc2Uobyl9KSxzZS5fbG9jYWxlcz1uZXcgdGUoKCk9Pk9iamVjdC5rZXlzKHNlLmFtYmlndW91c0NoYXJhY3RlckRhdGEuZ2V0VmFsdWUoKSkuZmlsdGVyKGU9PiFlLnN0YXJ0c1dpdGgoIl8iKSkpO2NsYXNzIGxle3N0YXRpYyBnZXRSYXdEYXRhKCl7cmV0dXJuIEpTT04ucGFyc2UoIls5LDEwLDExLDEyLDEzLDMyLDEyNywxNjAsMTczLDg0NywxNTY0LDQ0NDcsNDQ0OCw2MDY4LDYwNjksNjE1NSw2MTU2LDYxNTcsNjE1OCw3MzU1LDczNTYsODE5Miw4MTkzLDgxOTQsODE5NSw4MTk2LDgxOTcsODE5OCw4MTk5LDgyMDAsODIwMSw4MjAyLDgyMDMsODIwNCw4MjA1LDgyMDYsODIwNyw4MjM0LDgyMzUsODIzNiw4MjM3LDgyMzgsODIzOSw4Mjg3LDgyODgsODI4OSw4MjkwLDgyOTEsODI5Miw4MjkzLDgyOTQsODI5NSw4Mjk2LDgyOTcsODI5OCw4Mjk5LDgzMDAsODMwMSw4MzAyLDgzMDMsMTAyNDAsMTIyODgsMTI2NDQsNjUwMjQsNjUwMjUsNjUwMjYsNjUwMjcsNjUwMjgsNjUwMjksNjUwMzAsNjUwMzEsNjUwMzIsNjUwMzMsNjUwMzQsNjUwMzUsNjUwMzYsNjUwMzcsNjUwMzgsNjUwMzksNjUyNzksNjU0NDAsNjU1MjAsNjU1MjEsNjU1MjIsNjU1MjMsNjU1MjQsNjU1MjUsNjU1MjYsNjU1MjcsNjU1MjgsNjU1MzIsNzg4NDQsMTE5MTU1LDExOTE1NiwxMTkxNTcsMTE5MTU4LDExOTE1OSwxMTkxNjAsMTE5MTYxLDExOTE2Miw5MTc1MDQsOTE3NTA1LDkxNzUwNiw5MTc1MDcsOTE3NTA4LDkxNzUwOSw5MTc1MTAsOTE3NTExLDkxNzUxMiw5MTc1MTMsOTE3NTE0LDkxNzUxNSw5MTc1MTYsOTE3NTE3LDkxNzUxOCw5MTc1MTksOTE3NTIwLDkxNzUyMSw5MTc1MjIsOTE3NTIzLDkxNzUyNCw5MTc1MjUsOTE3NTI2LDkxNzUyNyw5MTc1MjgsOTE3NTI5LDkxNzUzMCw5MTc1MzEsOTE3NTMyLDkxNzUzMyw5MTc1MzQsOTE3NTM1LDkxNzUzNiw5MTc1MzcsOTE3NTM4LDkxNzUzOSw5MTc1NDAsOTE3NTQxLDkxNzU0Miw5MTc1NDMsOTE3NTQ0LDkxNzU0NSw5MTc1NDYsOTE3NTQ3LDkxNzU0OCw5MTc1NDksOTE3NTUwLDkxNzU1MSw5MTc1NTIsOTE3NTUzLDkxNzU1NCw5MTc1NTUsOTE3NTU2LDkxNzU1Nyw5MTc1NTgsOTE3NTU5LDkxNzU2MCw5MTc1NjEsOTE3NTYyLDkxNzU2Myw5MTc1NjQsOTE3NTY1LDkxNzU2Niw5MTc1NjcsOTE3NTY4LDkxNzU2OSw5MTc1NzAsOTE3NTcxLDkxNzU3Miw5MTc1NzMsOTE3NTc0LDkxNzU3NSw5MTc1NzYsOTE3NTc3LDkxNzU3OCw5MTc1NzksOTE3NTgwLDkxNzU4MSw5MTc1ODIsOTE3NTgzLDkxNzU4NCw5MTc1ODUsOTE3NTg2LDkxNzU4Nyw5MTc1ODgsOTE3NTg5LDkxNzU5MCw5MTc1OTEsOTE3NTkyLDkxNzU5Myw5MTc1OTQsOTE3NTk1LDkxNzU5Niw5MTc1OTcsOTE3NTk4LDkxNzU5OSw5MTc2MDAsOTE3NjAxLDkxNzYwMiw5MTc2MDMsOTE3NjA0LDkxNzYwNSw5MTc2MDYsOTE3NjA3LDkxNzYwOCw5MTc2MDksOTE3NjEwLDkxNzYxMSw5MTc2MTIsOTE3NjEzLDkxNzYxNCw5MTc2MTUsOTE3NjE2LDkxNzYxNyw5MTc2MTgsOTE3NjE5LDkxNzYyMCw5MTc2MjEsOTE3NjIyLDkxNzYyMyw5MTc2MjQsOTE3NjI1LDkxNzYyNiw5MTc2MjcsOTE3NjI4LDkxNzYyOSw5MTc2MzAsOTE3NjMxLDkxNzc2MCw5MTc3NjEsOTE3NzYyLDkxNzc2Myw5MTc3NjQsOTE3NzY1LDkxNzc2Niw5MTc3NjcsOTE3NzY4LDkxNzc2OSw5MTc3NzAsOTE3NzcxLDkxNzc3Miw5MTc3NzMsOTE3Nzc0LDkxNzc3NSw5MTc3NzYsOTE3Nzc3LDkxNzc3OCw5MTc3NzksOTE3NzgwLDkxNzc4MSw5MTc3ODIsOTE3NzgzLDkxNzc4NCw5MTc3ODUsOTE3Nzg2LDkxNzc4Nyw5MTc3ODgsOTE3Nzg5LDkxNzc5MCw5MTc3OTEsOTE3NzkyLDkxNzc5Myw5MTc3OTQsOTE3Nzk1LDkxNzc5Niw5MTc3OTcsOTE3Nzk4LDkxNzc5OSw5MTc4MDAsOTE3ODAxLDkxNzgwMiw5MTc4MDMsOTE3ODA0LDkxNzgwNSw5MTc4MDYsOTE3ODA3LDkxNzgwOCw5MTc4MDksOTE3ODEwLDkxNzgxMSw5MTc4MTIsOTE3ODEzLDkxNzgxNCw5MTc4MTUsOTE3ODE2LDkxNzgxNyw5MTc4MTgsOTE3ODE5LDkxNzgyMCw5MTc4MjEsOTE3ODIyLDkxNzgyMyw5MTc4MjQsOTE3ODI1LDkxNzgyNiw5MTc4MjcsOTE3ODI4LDkxNzgyOSw5MTc4MzAsOTE3ODMxLDkxNzgzMiw5MTc4MzMsOTE3ODM0LDkxNzgzNSw5MTc4MzYsOTE3ODM3LDkxNzgzOCw5MTc4MzksOTE3ODQwLDkxNzg0MSw5MTc4NDIsOTE3ODQzLDkxNzg0NCw5MTc4NDUsOTE3ODQ2LDkxNzg0Nyw5MTc4NDgsOTE3ODQ5LDkxNzg1MCw5MTc4NTEsOTE3ODUyLDkxNzg1Myw5MTc4NTQsOTE3ODU1LDkxNzg1Niw5MTc4NTcsOTE3ODU4LDkxNzg1OSw5MTc4NjAsOTE3ODYxLDkxNzg2Miw5MTc4NjMsOTE3ODY0LDkxNzg2NSw5MTc4NjYsOTE3ODY3LDkxNzg2OCw5MTc4NjksOTE3ODcwLDkxNzg3MSw5MTc4NzIsOTE3ODczLDkxNzg3NCw5MTc4NzUsOTE3ODc2LDkxNzg3Nyw5MTc4NzgsOTE3ODc5LDkxNzg4MCw5MTc4ODEsOTE3ODgyLDkxNzg4Myw5MTc4ODQsOTE3ODg1LDkxNzg4Niw5MTc4ODcsOTE3ODg4LDkxNzg4OSw5MTc4OTAsOTE3ODkxLDkxNzg5Miw5MTc4OTMsOTE3ODk0LDkxNzg5NSw5MTc4OTYsOTE3ODk3LDkxNzg5OCw5MTc4OTksOTE3OTAwLDkxNzkwMSw5MTc5MDIsOTE3OTAzLDkxNzkwNCw5MTc5MDUsOTE3OTA2LDkxNzkwNyw5MTc5MDgsOTE3OTA5LDkxNzkxMCw5MTc5MTEsOTE3OTEyLDkxNzkxMyw5MTc5MTQsOTE3OTE1LDkxNzkxNiw5MTc5MTcsOTE3OTE4LDkxNzkxOSw5MTc5MjAsOTE3OTIxLDkxNzkyMiw5MTc5MjMsOTE3OTI0LDkxNzkyNSw5MTc5MjYsOTE3OTI3LDkxNzkyOCw5MTc5MjksOTE3OTMwLDkxNzkzMSw5MTc5MzIsOTE3OTMzLDkxNzkzNCw5MTc5MzUsOTE3OTM2LDkxNzkzNyw5MTc5MzgsOTE3OTM5LDkxNzk0MCw5MTc5NDEsOTE3OTQyLDkxNzk0Myw5MTc5NDQsOTE3OTQ1LDkxNzk0Niw5MTc5NDcsOTE3OTQ4LDkxNzk0OSw5MTc5NTAsOTE3OTUxLDkxNzk1Miw5MTc5NTMsOTE3OTU0LDkxNzk1NSw5MTc5NTYsOTE3OTU3LDkxNzk1OCw5MTc5NTksOTE3OTYwLDkxNzk2MSw5MTc5NjIsOTE3OTYzLDkxNzk2NCw5MTc5NjUsOTE3OTY2LDkxNzk2Nyw5MTc5NjgsOTE3OTY5LDkxNzk3MCw5MTc5NzEsOTE3OTcyLDkxNzk3Myw5MTc5NzQsOTE3OTc1LDkxNzk3Niw5MTc5NzcsOTE3OTc4LDkxNzk3OSw5MTc5ODAsOTE3OTgxLDkxNzk4Miw5MTc5ODMsOTE3OTg0LDkxNzk4NSw5MTc5ODYsOTE3OTg3LDkxNzk4OCw5MTc5ODksOTE3OTkwLDkxNzk5MSw5MTc5OTIsOTE3OTkzLDkxNzk5NCw5MTc5OTUsOTE3OTk2LDkxNzk5Nyw5MTc5OTgsOTE3OTk5XSIpfXN0YXRpYyBnZXREYXRhKCl7cmV0dXJuIHRoaXMuX2RhdGF8fCh0aGlzLl9kYXRhPW5ldyBTZXQobGUuZ2V0UmF3RGF0YSgpKSksdGhpcy5fZGF0YX1zdGF0aWMgaXNJbnZpc2libGVDaGFyYWN0ZXIoZSl7cmV0dXJuIGxlLmdldERhdGEoKS5oYXMoZSl9c3RhdGljIGdldCBjb2RlUG9pbnRzKCl7cmV0dXJuIGxlLmdldERhdGEoKX19bGUuX2RhdGE9dm9pZCAwO2NsYXNzIGNle2NvbnN0cnVjdG9yKGUsdCxyLG4pe3RoaXMudnNXb3JrZXI9ZSx0aGlzLnJlcT10LHRoaXMubWV0aG9kPXIsdGhpcy5hcmdzPW4sdGhpcy50eXBlPTB9fWNsYXNzIHVle2NvbnN0cnVjdG9yKGUsdCxyLG4pe3RoaXMudnNXb3JrZXI9ZSx0aGlzLnNlcT10LHRoaXMucmVzPXIsdGhpcy5lcnI9bix0aGlzLnR5cGU9MX19Y2xhc3MgaGV7Y29uc3RydWN0b3IoZSx0LHIsbil7dGhpcy52c1dvcmtlcj1lLHRoaXMucmVxPXQsdGhpcy5ldmVudE5hbWU9cix0aGlzLmFyZz1uLHRoaXMudHlwZT0yfX1jbGFzcyBmZXtjb25zdHJ1Y3RvcihlLHQscil7dGhpcy52c1dvcmtlcj1lLHRoaXMucmVxPXQsdGhpcy5ldmVudD1yLHRoaXMudHlwZT0zfX1jbGFzcyBkZXtjb25zdHJ1Y3RvcihlLHQpe3RoaXMudnNXb3JrZXI9ZSx0aGlzLnJlcT10LHRoaXMudHlwZT00fX1jbGFzcyBtZXtjb25zdHJ1Y3RvcihlKXt0aGlzLl93b3JrZXJJZD0tMSx0aGlzLl9oYW5kbGVyPWUsdGhpcy5fbGFzdFNlbnRSZXE9MCx0aGlzLl9wZW5kaW5nUmVwbGllcz1PYmplY3QuY3JlYXRlKG51bGwpLHRoaXMuX3BlbmRpbmdFbWl0dGVycz1uZXcgTWFwLHRoaXMuX3BlbmRpbmdFdmVudHM9bmV3IE1hcH1zZXRXb3JrZXJJZChlKXt0aGlzLl93b3JrZXJJZD1lfXNlbmRNZXNzYWdlKHIsbil7Y29uc3QgaT1TdHJpbmcoKyt0aGlzLl9sYXN0U2VudFJlcSk7cmV0dXJuIG5ldyBQcm9taXNlKChlLHQpPT57dGhpcy5fcGVuZGluZ1JlcGxpZXNbaV09e3Jlc29sdmU6ZSxyZWplY3Q6dH0sdGhpcy5fc2VuZChuZXcgY2UodGhpcy5fd29ya2VySWQsaSxyLG4pKX0pfWxpc3RlbihlLHQpe2xldCByPW51bGw7Y29uc3Qgbj1uZXcgUSh7b25GaXJzdExpc3RlbmVyQWRkOigpPT57cj1TdHJpbmcoKyt0aGlzLl9sYXN0U2VudFJlcSksdGhpcy5fcGVuZGluZ0VtaXR0ZXJzLnNldChyLG4pLHRoaXMuX3NlbmQobmV3IGhlKHRoaXMuX3dvcmtlcklkLHIsZSx0KSl9LG9uTGFzdExpc3RlbmVyUmVtb3ZlOigpPT57dGhpcy5fcGVuZGluZ0VtaXR0ZXJzLmRlbGV0ZShyKSx0aGlzLl9zZW5kKG5ldyBkZSh0aGlzLl93b3JrZXJJZCxyKSkscj1udWxsfX0pO3JldHVybiBuLmV2ZW50fWhhbmRsZU1lc3NhZ2UoZSl7ZSYmZS52c1dvcmtlciYmKC0xIT09dGhpcy5fd29ya2VySWQmJmUudnNXb3JrZXIhPT10aGlzLl93b3JrZXJJZHx8dGhpcy5faGFuZGxlTWVzc2FnZShlKSl9X2hhbmRsZU1lc3NhZ2UoZSl7c3dpdGNoKGUudHlwZSl7Y2FzZSAxOnJldHVybiB0aGlzLl9oYW5kbGVSZXBseU1lc3NhZ2UoZSk7Y2FzZSAwOnJldHVybiB0aGlzLl9oYW5kbGVSZXF1ZXN0TWVzc2FnZShlKTtjYXNlIDI6cmV0dXJuIHRoaXMuX2hhbmRsZVN1YnNjcmliZUV2ZW50TWVzc2FnZShlKTtjYXNlIDM6cmV0dXJuIHRoaXMuX2hhbmRsZUV2ZW50TWVzc2FnZShlKTtjYXNlIDQ6cmV0dXJuIHRoaXMuX2hhbmRsZVVuc3Vic2NyaWJlRXZlbnRNZXNzYWdlKGUpfX1faGFuZGxlUmVwbHlNZXNzYWdlKHIpe2lmKHRoaXMuX3BlbmRpbmdSZXBsaWVzW3Iuc2VxXSl7bGV0IHQ9dGhpcy5fcGVuZGluZ1JlcGxpZXNbci5zZXFdO2lmKGRlbGV0ZSB0aGlzLl9wZW5kaW5nUmVwbGllc1tyLnNlcV0sci5lcnIpe2xldCBlPXIuZXJyO3JldHVybiByLmVyci4kaXNFcnJvciYmKChlPW5ldyBFcnJvcikubmFtZT1yLmVyci5uYW1lLGUubWVzc2FnZT1yLmVyci5tZXNzYWdlLGUuc3RhY2s9ci5lcnIuc3RhY2spLHZvaWQgdC5yZWplY3QoZSl9dC5yZXNvbHZlKHIucmVzKX1lbHNlIGNvbnNvbGUud2FybigiR290IHJlcGx5IHRvIHVua25vd24gc2VxIil9X2hhbmRsZVJlcXVlc3RNZXNzYWdlKGUpe2xldCB0PWUucmVxLHI9dGhpcy5faGFuZGxlci5oYW5kbGVNZXNzYWdlKGUubWV0aG9kLGUuYXJncyk7ci50aGVuKGU9Pnt0aGlzLl9zZW5kKG5ldyB1ZSh0aGlzLl93b3JrZXJJZCx0LGUsdm9pZCAwKSl9LGU9PntlLmRldGFpbCBpbnN0YW5jZW9mIEVycm9yJiYoZS5kZXRhaWw9dShlLmRldGFpbCkpLHRoaXMuX3NlbmQobmV3IHVlKHRoaXMuX3dvcmtlcklkLHQsdm9pZCAwLHUoZSkpKX0pfV9oYW5kbGVTdWJzY3JpYmVFdmVudE1lc3NhZ2UoZSl7Y29uc3QgdD1lLnJlcTtlPXRoaXMuX2hhbmRsZXIuaGFuZGxlRXZlbnQoZS5ldmVudE5hbWUsZS5hcmcpKGU9Pnt0aGlzLl9zZW5kKG5ldyBmZSh0aGlzLl93b3JrZXJJZCx0LGUpKX0pO3RoaXMuX3BlbmRpbmdFdmVudHMuc2V0KHQsZSl9X2hhbmRsZUV2ZW50TWVzc2FnZShlKXt0aGlzLl9wZW5kaW5nRW1pdHRlcnMuaGFzKGUucmVxKT90aGlzLl9wZW5kaW5nRW1pdHRlcnMuZ2V0KGUucmVxKS5maXJlKGUuZXZlbnQpOmNvbnNvbGUud2FybigiR290IGV2ZW50IGZvciB1bmtub3duIHJlcSIpfV9oYW5kbGVVbnN1YnNjcmliZUV2ZW50TWVzc2FnZShlKXt0aGlzLl9wZW5kaW5nRXZlbnRzLmhhcyhlLnJlcSk/KHRoaXMuX3BlbmRpbmdFdmVudHMuZ2V0KGUucmVxKS5kaXNwb3NlKCksdGhpcy5fcGVuZGluZ0V2ZW50cy5kZWxldGUoZS5yZXEpKTpjb25zb2xlLndhcm4oIkdvdCB1bnN1YnNjcmliZSBmb3IgdW5rbm93biByZXEiKX1fc2VuZCh0KXtsZXQgcj1bXTtpZigwPT09dC50eXBlKWZvcihsZXQgZT0wO2U8dC5hcmdzLmxlbmd0aDtlKyspdC5hcmdzW2VdaW5zdGFuY2VvZiBBcnJheUJ1ZmZlciYmci5wdXNoKHQuYXJnc1tlXSk7ZWxzZSAxPT09dC50eXBlJiZ0LnJlcyBpbnN0YW5jZW9mIEFycmF5QnVmZmVyJiZyLnB1c2godC5yZXMpO3RoaXMuX2hhbmRsZXIuc2VuZE1lc3NhZ2UodCxyKX19ZnVuY3Rpb24gZ2UoZSl7cmV0dXJuIm8iPT09ZVswXSYmIm4iPT09ZVsxXSYmaWUoZS5jaGFyQ29kZUF0KDIpKX1mdW5jdGlvbiBwZShlKXtyZXR1cm4vXm9uRHluYW1pYy8udGVzdChlKSYmaWUoZS5jaGFyQ29kZUF0KDkpKX1mdW5jdGlvbiBiZShlLHIsbil7bGV0IHQ9e307Zm9yKGNvbnN0IGkgb2YgZSlwZShpKT90W2ldPSh0PT5mdW5jdGlvbihlKXtyZXR1cm4gbih0LGUpfSkoaSk6Z2UoaSk/dFtpXT1uKGksdm9pZCAwKTp0W2ldPSh0PT5mdW5jdGlvbigpe3ZhciBlPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywwKTtyZXR1cm4gcih0LGUpfSkoaSk7cmV0dXJuIHR9Y2xhc3MgdmV7Y29uc3RydWN0b3IocixlKXt0aGlzLl9yZXF1ZXN0SGFuZGxlckZhY3Rvcnk9ZSx0aGlzLl9yZXF1ZXN0SGFuZGxlcj1udWxsLHRoaXMuX3Byb3RvY29sPW5ldyBtZSh7c2VuZE1lc3NhZ2U6KGUsdCk9PntyKGUsdCl9LGhhbmRsZU1lc3NhZ2U6KGUsdCk9PnRoaXMuX2hhbmRsZU1lc3NhZ2UoZSx0KSxoYW5kbGVFdmVudDooZSx0KT0+dGhpcy5faGFuZGxlRXZlbnQoZSx0KX0pfW9ubWVzc2FnZShlKXt0aGlzLl9wcm90b2NvbC5oYW5kbGVNZXNzYWdlKGUpfV9oYW5kbGVNZXNzYWdlKGUsdCl7aWYoIiRpbml0aWFsaXplIj09PWUpcmV0dXJuIHRoaXMuaW5pdGlhbGl6ZSh0WzBdLHRbMV0sdFsyXSx0WzNdKTtpZighdGhpcy5fcmVxdWVzdEhhbmRsZXJ8fCJmdW5jdGlvbiIhPXR5cGVvZiB0aGlzLl9yZXF1ZXN0SGFuZGxlcltlXSlyZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKCJNaXNzaW5nIHJlcXVlc3RIYW5kbGVyIG9yIG1ldGhvZDogIitlKSk7dHJ5e3JldHVybiBQcm9taXNlLnJlc29sdmUodGhpcy5fcmVxdWVzdEhhbmRsZXJbZV0uYXBwbHkodGhpcy5fcmVxdWVzdEhhbmRsZXIsdCkpfWNhdGNoKGUpe3JldHVybiBQcm9taXNlLnJlamVjdChlKX19X2hhbmRsZUV2ZW50KGUsdCl7aWYoIXRoaXMuX3JlcXVlc3RIYW5kbGVyKXRocm93IG5ldyBFcnJvcigiTWlzc2luZyByZXF1ZXN0SGFuZGxlciIpO2lmKHBlKGUpKXt0PXRoaXMuX3JlcXVlc3RIYW5kbGVyW2VdLmNhbGwodGhpcy5fcmVxdWVzdEhhbmRsZXIsdCk7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHQpdGhyb3cgbmV3IEVycm9yKGBNaXNzaW5nIGR5bmFtaWMgZXZlbnQgJHtlfSBvbiByZXF1ZXN0IGhhbmRsZXIuYCk7cmV0dXJuIHR9aWYoZ2UoZSkpe3Q9dGhpcy5fcmVxdWVzdEhhbmRsZXJbZV07aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHQpdGhyb3cgbmV3IEVycm9yKGBNaXNzaW5nIGV2ZW50ICR7ZX0gb24gcmVxdWVzdCBoYW5kbGVyLmApO3JldHVybiB0fXRocm93IG5ldyBFcnJvcigiTWFsZm9ybWVkIGV2ZW50IG5hbWUgIitlKX1pbml0aWFsaXplKGUsdCxuLHIpe3RoaXMuX3Byb3RvY29sLnNldFdvcmtlcklkKGUpO2NvbnN0IGk9YmUociwoZSx0KT0+dGhpcy5fcHJvdG9jb2wuc2VuZE1lc3NhZ2UoZSx0KSwoZSx0KT0+dGhpcy5fcHJvdG9jb2wubGlzdGVuKGUsdCkpO3JldHVybiB0aGlzLl9yZXF1ZXN0SGFuZGxlckZhY3Rvcnk/KHRoaXMuX3JlcXVlc3RIYW5kbGVyPXRoaXMuX3JlcXVlc3RIYW5kbGVyRmFjdG9yeShpKSxQcm9taXNlLnJlc29sdmUoWSh0aGlzLl9yZXF1ZXN0SGFuZGxlcikpKToodCYmKHZvaWQgMCE9PXQuYmFzZVVybCYmZGVsZXRlIHQuYmFzZVVybCx2b2lkIDAhPT10LnBhdGhzJiZ2b2lkIDAhPT10LnBhdGhzLnZzJiZkZWxldGUgdC5wYXRocy52cyx0LnRydXN0ZWRUeXBlc1BvbGljeSxkZWxldGUgdC50cnVzdGVkVHlwZXNQb2xpY3ksdC5jYXRjaEVycm9yPSEwLE8ucmVxdWlyZS5jb25maWcodCkpLG5ldyBQcm9taXNlKCh0LHIpPT57Y29uc3QgZT1PLnJlcXVpcmU7ZShbbl0sZT0+e3RoaXMuX3JlcXVlc3RIYW5kbGVyPWUuY3JlYXRlKGkpLHRoaXMuX3JlcXVlc3RIYW5kbGVyP3QoWSh0aGlzLl9yZXF1ZXN0SGFuZGxlcikpOnIobmV3IEVycm9yKCJObyBSZXF1ZXN0SGFuZGxlciEiKSl9LHIpfSkpfX1jbGFzcyB5ZXtjb25zdHJ1Y3RvcihlLHQscixuKXt0aGlzLm9yaWdpbmFsU3RhcnQ9ZSx0aGlzLm9yaWdpbmFsTGVuZ3RoPXQsdGhpcy5tb2RpZmllZFN0YXJ0PXIsdGhpcy5tb2RpZmllZExlbmd0aD1ufWdldE9yaWdpbmFsRW5kKCl7cmV0dXJuIHRoaXMub3JpZ2luYWxTdGFydCt0aGlzLm9yaWdpbmFsTGVuZ3RofWdldE1vZGlmaWVkRW5kKCl7cmV0dXJuIHRoaXMubW9kaWZpZWRTdGFydCt0aGlzLm1vZGlmaWVkTGVuZ3RofX1mdW5jdGlvbiBDZShlLHQpe3JldHVybih0PDw1KS10K2V8MH1jbGFzcyB3ZXtjb25zdHJ1Y3RvcihlKXt0aGlzLnNvdXJjZT1lfWdldEVsZW1lbnRzKCl7Y29uc3Qgcj10aGlzLnNvdXJjZSxuPW5ldyBJbnQzMkFycmF5KHIubGVuZ3RoKTtmb3IobGV0IGU9MCx0PXIubGVuZ3RoO2U8dDtlKyspbltlXT1yLmNoYXJDb2RlQXQoZSk7cmV0dXJuIG59fWNsYXNzIF9le3N0YXRpYyBBc3NlcnQoZSx0KXtpZighZSl0aHJvdyBuZXcgRXJyb3IodCl9fWNsYXNzIFNle3N0YXRpYyBDb3B5KHQscixuLGksbyl7Zm9yKGxldCBlPTA7ZTxvO2UrKyluW2krZV09dFtyK2VdfXN0YXRpYyBDb3B5Mih0LHIsbixpLG8pe2ZvcihsZXQgZT0wO2U8bztlKyspbltpK2VdPXRbcitlXX19Y2xhc3MgQWV7Y29uc3RydWN0b3IoKXt0aGlzLm1fY2hhbmdlcz1bXSx0aGlzLm1fb3JpZ2luYWxTdGFydD0xMDczNzQxODI0LHRoaXMubV9tb2RpZmllZFN0YXJ0PTEwNzM3NDE4MjQsdGhpcy5tX29yaWdpbmFsQ291bnQ9MCx0aGlzLm1fbW9kaWZpZWRDb3VudD0wfU1hcmtOZXh0Q2hhbmdlKCl7KDA8dGhpcy5tX29yaWdpbmFsQ291bnR8fDA8dGhpcy5tX21vZGlmaWVkQ291bnQpJiZ0aGlzLm1fY2hhbmdlcy5wdXNoKG5ldyB5ZSh0aGlzLm1fb3JpZ2luYWxTdGFydCx0aGlzLm1fb3JpZ2luYWxDb3VudCx0aGlzLm1fbW9kaWZpZWRTdGFydCx0aGlzLm1fbW9kaWZpZWRDb3VudCkpLHRoaXMubV9vcmlnaW5hbENvdW50PTAsdGhpcy5tX21vZGlmaWVkQ291bnQ9MCx0aGlzLm1fb3JpZ2luYWxTdGFydD0xMDczNzQxODI0LHRoaXMubV9tb2RpZmllZFN0YXJ0PTEwNzM3NDE4MjR9QWRkT3JpZ2luYWxFbGVtZW50KGUsdCl7dGhpcy5tX29yaWdpbmFsU3RhcnQ9TWF0aC5taW4odGhpcy5tX29yaWdpbmFsU3RhcnQsZSksdGhpcy5tX21vZGlmaWVkU3RhcnQ9TWF0aC5taW4odGhpcy5tX21vZGlmaWVkU3RhcnQsdCksdGhpcy5tX29yaWdpbmFsQ291bnQrK31BZGRNb2RpZmllZEVsZW1lbnQoZSx0KXt0aGlzLm1fb3JpZ2luYWxTdGFydD1NYXRoLm1pbih0aGlzLm1fb3JpZ2luYWxTdGFydCxlKSx0aGlzLm1fbW9kaWZpZWRTdGFydD1NYXRoLm1pbih0aGlzLm1fbW9kaWZpZWRTdGFydCx0KSx0aGlzLm1fbW9kaWZpZWRDb3VudCsrfWdldENoYW5nZXMoKXtyZXR1cm4oMDx0aGlzLm1fb3JpZ2luYWxDb3VudHx8MDx0aGlzLm1fbW9kaWZpZWRDb3VudCkmJnRoaXMuTWFya05leHRDaGFuZ2UoKSx0aGlzLm1fY2hhbmdlc31nZXRSZXZlcnNlQ2hhbmdlcygpe3JldHVybigwPHRoaXMubV9vcmlnaW5hbENvdW50fHwwPHRoaXMubV9tb2RpZmllZENvdW50KSYmdGhpcy5NYXJrTmV4dENoYW5nZSgpLHRoaXMubV9jaGFuZ2VzLnJldmVyc2UoKSx0aGlzLm1fY2hhbmdlc319Y2xhc3MgeGV7Y29uc3RydWN0b3IoZSx0LHI9bnVsbCl7dGhpcy5Db250aW51ZVByb2Nlc3NpbmdQcmVkaWNhdGU9cix0aGlzLl9vcmlnaW5hbFNlcXVlbmNlPWUsdGhpcy5fbW9kaWZpZWRTZXF1ZW5jZT10O3ZhcltyLGUsbl09eGUuX2dldEVsZW1lbnRzKGUpLFt0LGksb109eGUuX2dldEVsZW1lbnRzKHQpO3RoaXMuX2hhc1N0cmluZ3M9biYmbyx0aGlzLl9vcmlnaW5hbFN0cmluZ0VsZW1lbnRzPXIsdGhpcy5fb3JpZ2luYWxFbGVtZW50c09ySGFzaD1lLHRoaXMuX21vZGlmaWVkU3RyaW5nRWxlbWVudHM9dCx0aGlzLl9tb2RpZmllZEVsZW1lbnRzT3JIYXNoPWksdGhpcy5tX2ZvcndhcmRIaXN0b3J5PVtdLHRoaXMubV9yZXZlcnNlSGlzdG9yeT1bXX1zdGF0aWMgX2lzU3RyaW5nQXJyYXkoZSl7cmV0dXJuIDA8ZS5sZW5ndGgmJiJzdHJpbmciPT10eXBlb2YgZVswXX1zdGF0aWMgX2dldEVsZW1lbnRzKGUpe3ZhciByPWUuZ2V0RWxlbWVudHMoKTtpZih4ZS5faXNTdHJpbmdBcnJheShyKSl7Y29uc3Qgbj1uZXcgSW50MzJBcnJheShyLmxlbmd0aCk7Zm9yKGxldCBlPTAsdD1yLmxlbmd0aDtlPHQ7ZSsrKW5bZV09ZnVuY3Rpb24ocixuKXtuPUNlKDE0OTQxNyxuKTtmb3IobGV0IGU9MCx0PXIubGVuZ3RoO2U8dDtlKyspbj1DZShyLmNoYXJDb2RlQXQoZSksbik7cmV0dXJuIG59KHJbZV0sMCk7cmV0dXJuW3IsbiwhMF19cmV0dXJuIHIgaW5zdGFuY2VvZiBJbnQzMkFycmF5P1tbXSxyLCExXTpbW10sbmV3IEludDMyQXJyYXkociksITFdfUVsZW1lbnRzQXJlRXF1YWwoZSx0KXtyZXR1cm4gdGhpcy5fb3JpZ2luYWxFbGVtZW50c09ySGFzaFtlXT09PXRoaXMuX21vZGlmaWVkRWxlbWVudHNPckhhc2hbdF0mJighdGhpcy5faGFzU3RyaW5nc3x8dGhpcy5fb3JpZ2luYWxTdHJpbmdFbGVtZW50c1tlXT09PXRoaXMuX21vZGlmaWVkU3RyaW5nRWxlbWVudHNbdF0pfUVsZW1lbnRzQXJlU3RyaWN0RXF1YWwoZSx0KXtyZXR1cm4hIXRoaXMuRWxlbWVudHNBcmVFcXVhbChlLHQpJiZ4ZS5fZ2V0U3RyaWN0RWxlbWVudCh0aGlzLl9vcmlnaW5hbFNlcXVlbmNlLGUpPT09eGUuX2dldFN0cmljdEVsZW1lbnQodGhpcy5fbW9kaWZpZWRTZXF1ZW5jZSx0KX1zdGF0aWMgX2dldFN0cmljdEVsZW1lbnQoZSx0KXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgZS5nZXRTdHJpY3RFbGVtZW50P2UuZ2V0U3RyaWN0RWxlbWVudCh0KTpudWxsfU9yaWdpbmFsRWxlbWVudHNBcmVFcXVhbChlLHQpe3JldHVybiB0aGlzLl9vcmlnaW5hbEVsZW1lbnRzT3JIYXNoW2VdPT09dGhpcy5fb3JpZ2luYWxFbGVtZW50c09ySGFzaFt0XSYmKCF0aGlzLl9oYXNTdHJpbmdzfHx0aGlzLl9vcmlnaW5hbFN0cmluZ0VsZW1lbnRzW2VdPT09dGhpcy5fb3JpZ2luYWxTdHJpbmdFbGVtZW50c1t0XSl9TW9kaWZpZWRFbGVtZW50c0FyZUVxdWFsKGUsdCl7cmV0dXJuIHRoaXMuX21vZGlmaWVkRWxlbWVudHNPckhhc2hbZV09PT10aGlzLl9tb2RpZmllZEVsZW1lbnRzT3JIYXNoW3RdJiYoIXRoaXMuX2hhc1N0cmluZ3N8fHRoaXMuX21vZGlmaWVkU3RyaW5nRWxlbWVudHNbZV09PT10aGlzLl9tb2RpZmllZFN0cmluZ0VsZW1lbnRzW3RdKX1Db21wdXRlRGlmZihlKXtyZXR1cm4gdGhpcy5fQ29tcHV0ZURpZmYoMCx0aGlzLl9vcmlnaW5hbEVsZW1lbnRzT3JIYXNoLmxlbmd0aC0xLDAsdGhpcy5fbW9kaWZpZWRFbGVtZW50c09ySGFzaC5sZW5ndGgtMSxlKX1fQ29tcHV0ZURpZmYoZSx0LHIsbixpKXt2YXIgbz1bITFdO2xldCBhPXRoaXMuQ29tcHV0ZURpZmZSZWN1cnNpdmUoZSx0LHIsbixvKTtyZXR1cm4gaSYmKGE9dGhpcy5QcmV0dGlmeUNoYW5nZXMoYSkpLHtxdWl0RWFybHk6b1swXSxjaGFuZ2VzOmF9fUNvbXB1dGVEaWZmUmVjdXJzaXZlKHQscixuLGksbyl7Zm9yKG9bMF09ITE7dDw9ciYmbjw9aSYmdGhpcy5FbGVtZW50c0FyZUVxdWFsKHQsbik7KXQrKyxuKys7Zm9yKDt0PD1yJiZuPD1pJiZ0aGlzLkVsZW1lbnRzQXJlRXF1YWwocixpKTspci0tLGktLTtpZihyPHR8fGk8bil7bGV0IGU7cmV0dXJuIGU9bjw9aT8oX2UuQXNzZXJ0KHQ9PT1yKzEsIm9yaWdpbmFsU3RhcnQgc2hvdWxkIG9ubHkgYmUgb25lIG1vcmUgdGhhbiBvcmlnaW5hbEVuZCIpLFtuZXcgeWUodCwwLG4saS1uKzEpXSk6dDw9cj8oX2UuQXNzZXJ0KG49PT1pKzEsIm1vZGlmaWVkU3RhcnQgc2hvdWxkIG9ubHkgYmUgb25lIG1vcmUgdGhhbiBtb2RpZmllZEVuZCIpLFtuZXcgeWUodCxyLXQrMSxuLDApXSk6KF9lLkFzc2VydCh0PT09cisxLCJvcmlnaW5hbFN0YXJ0IHNob3VsZCBvbmx5IGJlIG9uZSBtb3JlIHRoYW4gb3JpZ2luYWxFbmQiKSxfZS5Bc3NlcnQobj09PWkrMSwibW9kaWZpZWRTdGFydCBzaG91bGQgb25seSBiZSBvbmUgbW9yZSB0aGFuIG1vZGlmaWVkRW5kIiksW10pfXZhciBhPVswXSxzPVswXSxsPXRoaXMuQ29tcHV0ZVJlY3Vyc2lvblBvaW50KHQscixuLGksYSxzLG8pLGE9YVswXSxzPXNbMF07aWYobnVsbCE9PWwpcmV0dXJuIGw7aWYob1swXSlyZXR1cm5bbmV3IHllKHQsci10KzEsbixpLW4rMSldO3tsPXRoaXMuQ29tcHV0ZURpZmZSZWN1cnNpdmUodCxhLG4scyxvKTtsZXQgZT1bXTtyZXR1cm4gZT1vWzBdP1tuZXcgeWUoYSsxLHItKGErMSkrMSxzKzEsaS0ocysxKSsxKV06dGhpcy5Db21wdXRlRGlmZlJlY3Vyc2l2ZShhKzEscixzKzEsaSxvKSx0aGlzLkNvbmNhdGVuYXRlQ2hhbmdlcyhsLGUpfX1XQUxLVFJBQ0UodSxyLGgsZixkLG0sZyxwLGUsYix0LHYseSxuLEMsdyxfLFMpe2xldCBBPW51bGwsaT1uZXcgQWUseD1yLEU9aCxvPXlbMF0td1swXS1mLGE9LTEwNzM3NDE4MjQscz10aGlzLm1fZm9yd2FyZEhpc3RvcnkubGVuZ3RoLTE7ZG97dmFyIGw9byt1O289bD09PXh8fGw8RSYmZVtsLTFdPGVbbCsxXT8obj0odD1lW2wrMV0pLW8tZix0PGEmJmkuTWFya05leHRDaGFuZ2UoKSxhPXQsaS5BZGRNb2RpZmllZEVsZW1lbnQodCsxLG4pLGwrMS11KToobj0odD1lW2wtMV0rMSktby1mLHQ8YSYmaS5NYXJrTmV4dENoYW5nZSgpLGE9dC0xLGkuQWRkT3JpZ2luYWxFbGVtZW50KHQsbisxKSxsLTEtdSksMDw9cyYmKHU9KGU9dGhpcy5tX2ZvcndhcmRIaXN0b3J5W3NdKVswXSx4PTEsRT1lLmxlbmd0aC0xKX13aGlsZSgtMTw9LS1zKTtpZihyPWkuZ2V0UmV2ZXJzZUNoYW5nZXMoKSxTWzBdKXtsZXQgZT15WzBdKzEsdD13WzBdKzE7aWYobnVsbCE9PXImJjA8ci5sZW5ndGgpe2NvbnN0IE49cltyLmxlbmd0aC0xXTtlPU1hdGgubWF4KGUsTi5nZXRPcmlnaW5hbEVuZCgpKSx0PU1hdGgubWF4KHQsTi5nZXRNb2RpZmllZEVuZCgpKX1BPVtuZXcgeWUoZSx2LWUrMSx0LEMtdCsxKV19ZWxzZXtpPW5ldyBBZSx4PW0sRT1nLG89eVswXS13WzBdLXAsYT0xMDczNzQxODI0LHM9Xz90aGlzLm1fcmV2ZXJzZUhpc3RvcnkubGVuZ3RoLTE6dGhpcy5tX3JldmVyc2VIaXN0b3J5Lmxlbmd0aC0yO2Rve3ZhciBjPW8rZDtvPWM9PT14fHxjPEUmJmJbYy0xXT49YltjKzFdPyhuPSh0PWJbYysxXS0xKS1vLXAsdD5hJiZpLk1hcmtOZXh0Q2hhbmdlKCksYT10KzEsaS5BZGRPcmlnaW5hbEVsZW1lbnQodCsxLG4rMSksYysxLWQpOihuPSh0PWJbYy0xXSktby1wLHQ+YSYmaS5NYXJrTmV4dENoYW5nZSgpLGE9dCxpLkFkZE1vZGlmaWVkRWxlbWVudCh0KzEsbisxKSxjLTEtZCksMDw9cyYmKGQ9KGI9dGhpcy5tX3JldmVyc2VIaXN0b3J5W3NdKVswXSx4PTEsRT1iLmxlbmd0aC0xKX13aGlsZSgtMTw9LS1zKTtBPWkuZ2V0Q2hhbmdlcygpfXJldHVybiB0aGlzLkNvbmNhdGVuYXRlQ2hhbmdlcyhyLEEpfUNvbXB1dGVSZWN1cnNpb25Qb2ludChpLG8sbSxnLHAsYix2KXtsZXQgYT0wLHM9MCxsPTAseT0wLGM9MCxDPTA7aS0tLG0tLSxiW3BbMF09MF09MCx0aGlzLm1fZm9yd2FyZEhpc3Rvcnk9W10sdGhpcy5tX3JldmVyc2VIaXN0b3J5PVtdO3ZhciBlPW8taSsoZy1tKSx3PTErZTtjb25zdCB1PW5ldyBJbnQzMkFycmF5KHcpLGg9bmV3IEludDMyQXJyYXkodyk7dmFyIGY9Zy1tLGQ9by1pLF89aS1tLFM9by1nLEE9KGQtZiklMj09MDt1W2ZdPWksaFtkXT1vLHZbMF09ITE7Zm9yKGxldCBuPTE7bjw9ZS8yKzE7bisrKXtsZXQgdD0wLHI9MDtsPXRoaXMuQ2xpcERpYWdvbmFsQm91bmQoZi1uLG4sZix3KSx5PXRoaXMuQ2xpcERpYWdvbmFsQm91bmQoZituLG4sZix3KTtmb3IobGV0IGU9bDtlPD15O2UrPTIpe2E9ZT09PWx8fGU8eSYmdVtlLTFdPHVbZSsxXT91W2UrMV06dVtlLTFdKzEscz1hLShlLWYpLV87Zm9yKHZhciB4PWE7YTxvJiZzPGcmJnRoaXMuRWxlbWVudHNBcmVFcXVhbChhKzEscysxKTspYSsrLHMrKztpZigodVtlXT1hKStzPnQrciYmKHQ9YSxyPXMpLCFBJiZNYXRoLmFicyhlLWQpPD1uLTEmJmE+PWhbZV0pcmV0dXJuIHBbMF09YSxiWzBdPXMseDw9aFtlXSYmbjw9MTQ0OD90aGlzLldBTEtUUkFDRShmLGwseSxfLGQsYyxDLFMsdSxoLGEsbyxwLHMsZyxiLEEsdik6bnVsbH12YXIgRT0odC1pKyhyLW0pLW4pLzI7aWYobnVsbCE9PXRoaXMuQ29udGludWVQcm9jZXNzaW5nUHJlZGljYXRlJiYhdGhpcy5Db250aW51ZVByb2Nlc3NpbmdQcmVkaWNhdGUodCxFKSlyZXR1cm4gdlswXT0hMCxwWzBdPXQsYlswXT1yLDA8RSYmbjw9MTQ0OD90aGlzLldBTEtUUkFDRShmLGwseSxfLGQsYyxDLFMsdSxoLGEsbyxwLHMsZyxiLEEsdik6KGkrKyxtKyssW25ldyB5ZShpLG8taSsxLG0sZy1tKzEpXSk7Yz10aGlzLkNsaXBEaWFnb25hbEJvdW5kKGQtbixuLGQsdyksQz10aGlzLkNsaXBEaWFnb25hbEJvdW5kKGQrbixuLGQsdyk7Zm9yKGxldCBlPWM7ZTw9QztlKz0yKXthPWU9PT1jfHxlPEMmJmhbZS0xXT49aFtlKzFdP2hbZSsxXS0xOmhbZS0xXSxzPWEtKGUtZCktUztmb3IodmFyIE49YTthPmkmJnM+bSYmdGhpcy5FbGVtZW50c0FyZUVxdWFsKGEscyk7KWEtLSxzLS07aWYoaFtlXT1hLEEmJk1hdGguYWJzKGUtZik8PW4mJmE8PXVbZV0pcmV0dXJuIHBbMF09YSxiWzBdPXMsTj49dVtlXSYmbjw9MTQ0OD90aGlzLldBTEtUUkFDRShmLGwseSxfLGQsYyxDLFMsdSxoLGEsbyxwLHMsZyxiLEEsdik6bnVsbH1pZihuPD0xNDQ3KXtsZXQgZT1uZXcgSW50MzJBcnJheSh5LWwrMik7ZVswXT1mLWwrMSxTZS5Db3B5Mih1LGwsZSwxLHktbCsxKSx0aGlzLm1fZm9yd2FyZEhpc3RvcnkucHVzaChlKSwoZT1uZXcgSW50MzJBcnJheShDLWMrMikpWzBdPWQtYysxLFNlLkNvcHkyKGgsYyxlLDEsQy1jKzEpLHRoaXMubV9yZXZlcnNlSGlzdG9yeS5wdXNoKGUpfX1yZXR1cm4gdGhpcy5XQUxLVFJBQ0UoZixsLHksXyxkLGMsQyxTLHUsaCxhLG8scCxzLGcsYixBLHYpfVByZXR0aWZ5Q2hhbmdlcyhvKXtmb3IobGV0IGU9MDtlPG8ubGVuZ3RoO2UrKyl7Y29uc3QgdD1vW2VdO2Zvcih2YXIgaD1lPG8ubGVuZ3RoLTE/b1tlKzFdLm9yaWdpbmFsU3RhcnQ6dGhpcy5fb3JpZ2luYWxFbGVtZW50c09ySGFzaC5sZW5ndGgsZj1lPG8ubGVuZ3RoLTE/b1tlKzFdLm1vZGlmaWVkU3RhcnQ6dGhpcy5fbW9kaWZpZWRFbGVtZW50c09ySGFzaC5sZW5ndGgsZD0wPHQub3JpZ2luYWxMZW5ndGgsbT0wPHQubW9kaWZpZWRMZW5ndGg7dC5vcmlnaW5hbFN0YXJ0K3Qub3JpZ2luYWxMZW5ndGg8aCYmdC5tb2RpZmllZFN0YXJ0K3QubW9kaWZpZWRMZW5ndGg8ZiYmKCFkfHx0aGlzLk9yaWdpbmFsRWxlbWVudHNBcmVFcXVhbCh0Lm9yaWdpbmFsU3RhcnQsdC5vcmlnaW5hbFN0YXJ0K3Qub3JpZ2luYWxMZW5ndGgpKSYmKCFtfHx0aGlzLk1vZGlmaWVkRWxlbWVudHNBcmVFcXVhbCh0Lm1vZGlmaWVkU3RhcnQsdC5tb2RpZmllZFN0YXJ0K3QubW9kaWZpZWRMZW5ndGgpKTspe3ZhciBnPXRoaXMuRWxlbWVudHNBcmVTdHJpY3RFcXVhbCh0Lm9yaWdpbmFsU3RhcnQsdC5tb2RpZmllZFN0YXJ0KTtpZih0aGlzLkVsZW1lbnRzQXJlU3RyaWN0RXF1YWwodC5vcmlnaW5hbFN0YXJ0K3Qub3JpZ2luYWxMZW5ndGgsdC5tb2RpZmllZFN0YXJ0K3QubW9kaWZpZWRMZW5ndGgpJiYhZylicmVhazt0Lm9yaWdpbmFsU3RhcnQrKyx0Lm1vZGlmaWVkU3RhcnQrK312YXIgcD1bbnVsbF07ZTxvLmxlbmd0aC0xJiZ0aGlzLkNoYW5nZXNPdmVybGFwKG9bZV0sb1tlKzFdLHApJiYob1tlXT1wWzBdLG8uc3BsaWNlKGUrMSwxKSxlLS0pfWZvcihsZXQgZT1vLmxlbmd0aC0xOzA8PWU7ZS0tKXtjb25zdCBjPW9bZV07bGV0IHQ9MCxyPTA7MDxlJiYobD1vW2UtMV0sdD1sLm9yaWdpbmFsU3RhcnQrbC5vcmlnaW5hbExlbmd0aCxyPWwubW9kaWZpZWRTdGFydCtsLm1vZGlmaWVkTGVuZ3RoKTt2YXIgYj0wPGMub3JpZ2luYWxMZW5ndGgsdj0wPGMubW9kaWZpZWRMZW5ndGg7bGV0IG49MCxpPXRoaXMuX2JvdW5kYXJ5U2NvcmUoYy5vcmlnaW5hbFN0YXJ0LGMub3JpZ2luYWxMZW5ndGgsYy5tb2RpZmllZFN0YXJ0LGMubW9kaWZpZWRMZW5ndGgpO2ZvcihsZXQgZT0xOztlKyspe3ZhciBhPWMub3JpZ2luYWxTdGFydC1lLHM9Yy5tb2RpZmllZFN0YXJ0LWU7aWYoYTx0fHxzPHIpYnJlYWs7aWYoYiYmIXRoaXMuT3JpZ2luYWxFbGVtZW50c0FyZUVxdWFsKGEsYStjLm9yaWdpbmFsTGVuZ3RoKSlicmVhaztpZih2JiYhdGhpcy5Nb2RpZmllZEVsZW1lbnRzQXJlRXF1YWwocyxzK2MubW9kaWZpZWRMZW5ndGgpKWJyZWFrO2E9KGE9PT10JiZzPT09cj81OjApK3RoaXMuX2JvdW5kYXJ5U2NvcmUoYSxjLm9yaWdpbmFsTGVuZ3RoLHMsYy5tb2RpZmllZExlbmd0aCk7YT5pJiYoaT1hLG49ZSl9Yy5vcmlnaW5hbFN0YXJ0LT1uLGMubW9kaWZpZWRTdGFydC09bjt2YXIgbD1bbnVsbF07MDxlJiZ0aGlzLkNoYW5nZXNPdmVybGFwKG9bZS0xXSxvW2VdLGwpJiYob1tlLTFdPWxbMF0sby5zcGxpY2UoZSwxKSxlKyspfWlmKHRoaXMuX2hhc1N0cmluZ3MpZm9yKGxldCBlPTEsdD1vLmxlbmd0aDtlPHQ7ZSsrKXtjb25zdCBpPW9bZS0xXSx1PW9bZV07dmFyIHk9dS5vcmlnaW5hbFN0YXJ0LWkub3JpZ2luYWxTdGFydC1pLm9yaWdpbmFsTGVuZ3RoLEM9aS5vcmlnaW5hbFN0YXJ0LHc9dS5vcmlnaW5hbFN0YXJ0K3Uub3JpZ2luYWxMZW5ndGgscj13LUMsbj1pLm1vZGlmaWVkU3RhcnQsXz11Lm1vZGlmaWVkU3RhcnQrdS5tb2RpZmllZExlbmd0aCxTPV8tbjt5PDUmJnI8MjAmJlM8MjAmJigoQz10aGlzLl9maW5kQmV0dGVyQ29udGlndW91c1NlcXVlbmNlKEMscixuLFMseSkpJiYoW3Isbl09QyxyPT09aS5vcmlnaW5hbFN0YXJ0K2kub3JpZ2luYWxMZW5ndGgmJm49PT1pLm1vZGlmaWVkU3RhcnQraS5tb2RpZmllZExlbmd0aHx8KGkub3JpZ2luYWxMZW5ndGg9ci1pLm9yaWdpbmFsU3RhcnQsaS5tb2RpZmllZExlbmd0aD1uLWkubW9kaWZpZWRTdGFydCx1Lm9yaWdpbmFsU3RhcnQ9cit5LHUubW9kaWZpZWRTdGFydD1uK3ksdS5vcmlnaW5hbExlbmd0aD13LXUub3JpZ2luYWxTdGFydCx1Lm1vZGlmaWVkTGVuZ3RoPV8tdS5tb2RpZmllZFN0YXJ0KSkpfXJldHVybiBvfV9maW5kQmV0dGVyQ29udGlndW91c1NlcXVlbmNlKGUsdCxyLG4saSl7aWYodDxpfHxuPGkpcmV0dXJuIG51bGw7dmFyIG89ZSt0LWkrMSx1PXIrbi1pKzE7bGV0IGE9MCxzPTAsbD0wO2ZvcihsZXQgdD1lO3Q8bzt0KyspZm9yKGxldCBlPXI7ZTx1O2UrKyl7dmFyIGM9dGhpcy5fY29udGlndW91c1NlcXVlbmNlU2NvcmUodCxlLGkpOzA8YyYmYz5hJiYoYT1jLHM9dCxsPWUpfXJldHVybiAwPGE/W3MsbF06bnVsbH1fY29udGlndW91c1NlcXVlbmNlU2NvcmUodCxyLG4pe2xldCBpPTA7Zm9yKGxldCBlPTA7ZTxuO2UrKyl7aWYoIXRoaXMuRWxlbWVudHNBcmVFcXVhbCh0K2UscitlKSlyZXR1cm4gMDtpKz10aGlzLl9vcmlnaW5hbFN0cmluZ0VsZW1lbnRzW3QrZV0ubGVuZ3RofXJldHVybiBpfV9PcmlnaW5hbElzQm91bmRhcnkoZSl7cmV0dXJuIGU8PTB8fGU+PXRoaXMuX29yaWdpbmFsRWxlbWVudHNPckhhc2gubGVuZ3RoLTF8fHRoaXMuX2hhc1N0cmluZ3MmJi9eXHMqJC8udGVzdCh0aGlzLl9vcmlnaW5hbFN0cmluZ0VsZW1lbnRzW2VdKX1fT3JpZ2luYWxSZWdpb25Jc0JvdW5kYXJ5KGUsdCl7aWYodGhpcy5fT3JpZ2luYWxJc0JvdW5kYXJ5KGUpfHx0aGlzLl9PcmlnaW5hbElzQm91bmRhcnkoZS0xKSlyZXR1cm4hMDtpZigwPHQpe2U9ZSt0O2lmKHRoaXMuX09yaWdpbmFsSXNCb3VuZGFyeShlLTEpfHx0aGlzLl9PcmlnaW5hbElzQm91bmRhcnkoZSkpcmV0dXJuITB9cmV0dXJuITF9X01vZGlmaWVkSXNCb3VuZGFyeShlKXtyZXR1cm4gZTw9MHx8ZT49dGhpcy5fbW9kaWZpZWRFbGVtZW50c09ySGFzaC5sZW5ndGgtMXx8dGhpcy5faGFzU3RyaW5ncyYmL15ccyokLy50ZXN0KHRoaXMuX21vZGlmaWVkU3RyaW5nRWxlbWVudHNbZV0pfV9Nb2RpZmllZFJlZ2lvbklzQm91bmRhcnkoZSx0KXtpZih0aGlzLl9Nb2RpZmllZElzQm91bmRhcnkoZSl8fHRoaXMuX01vZGlmaWVkSXNCb3VuZGFyeShlLTEpKXJldHVybiEwO2lmKDA8dCl7ZT1lK3Q7aWYodGhpcy5fTW9kaWZpZWRJc0JvdW5kYXJ5KGUtMSl8fHRoaXMuX01vZGlmaWVkSXNCb3VuZGFyeShlKSlyZXR1cm4hMH1yZXR1cm4hMX1fYm91bmRhcnlTY29yZShlLHQscixuKXtyZXR1cm4odGhpcy5fT3JpZ2luYWxSZWdpb25Jc0JvdW5kYXJ5KGUsdCk/MTowKSsodGhpcy5fTW9kaWZpZWRSZWdpb25Jc0JvdW5kYXJ5KHIsbik/MTowKX1Db25jYXRlbmF0ZUNoYW5nZXMoZSx0KXt2YXIgcj1bXTtpZigwPT09ZS5sZW5ndGh8fDA9PT10Lmxlbmd0aClyZXR1cm4gMDx0Lmxlbmd0aD90OmU7aWYodGhpcy5DaGFuZ2VzT3ZlcmxhcChlW2UubGVuZ3RoLTFdLHRbMF0scikpe2NvbnN0IG49bmV3IEFycmF5KGUubGVuZ3RoK3QubGVuZ3RoLTEpO3JldHVybiBTZS5Db3B5KGUsMCxuLDAsZS5sZW5ndGgtMSksbltlLmxlbmd0aC0xXT1yWzBdLFNlLkNvcHkodCwxLG4sZS5sZW5ndGgsdC5sZW5ndGgtMSksbn1yZXR1cm4gcj1uZXcgQXJyYXkoZS5sZW5ndGgrdC5sZW5ndGgpLFNlLkNvcHkoZSwwLHIsMCxlLmxlbmd0aCksU2UuQ29weSh0LDAscixlLmxlbmd0aCx0Lmxlbmd0aCkscn1DaGFuZ2VzT3ZlcmxhcChyLG4saSl7aWYoX2UuQXNzZXJ0KHIub3JpZ2luYWxTdGFydDw9bi5vcmlnaW5hbFN0YXJ0LCJMZWZ0IGNoYW5nZSBpcyBub3QgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIHJpZ2h0IGNoYW5nZSIpLF9lLkFzc2VydChyLm1vZGlmaWVkU3RhcnQ8PW4ubW9kaWZpZWRTdGFydCwiTGVmdCBjaGFuZ2UgaXMgbm90IGxlc3MgdGhhbiBvciBlcXVhbCB0byByaWdodCBjaGFuZ2UiKSxyLm9yaWdpbmFsU3RhcnQrci5vcmlnaW5hbExlbmd0aD49bi5vcmlnaW5hbFN0YXJ0fHxyLm1vZGlmaWVkU3RhcnQrci5tb2RpZmllZExlbmd0aD49bi5tb2RpZmllZFN0YXJ0KXt2YXIgbz1yLm9yaWdpbmFsU3RhcnQ7bGV0IGU9ci5vcmlnaW5hbExlbmd0aDt2YXIgYT1yLm1vZGlmaWVkU3RhcnQ7bGV0IHQ9ci5tb2RpZmllZExlbmd0aDtyZXR1cm4gci5vcmlnaW5hbFN0YXJ0K3Iub3JpZ2luYWxMZW5ndGg+PW4ub3JpZ2luYWxTdGFydCYmKGU9bi5vcmlnaW5hbFN0YXJ0K24ub3JpZ2luYWxMZW5ndGgtci5vcmlnaW5hbFN0YXJ0KSxyLm1vZGlmaWVkU3RhcnQrci5tb2RpZmllZExlbmd0aD49bi5tb2RpZmllZFN0YXJ0JiYodD1uLm1vZGlmaWVkU3RhcnQrbi5tb2RpZmllZExlbmd0aC1yLm1vZGlmaWVkU3RhcnQpLGlbMF09bmV3IHllKG8sZSxhLHQpLCEwfXJldHVybiBpWzBdPW51bGwsITF9Q2xpcERpYWdvbmFsQm91bmQoZSx0LHIsbil7aWYoMDw9ZSYmZTxuKXJldHVybiBlO3Q9dCUyPT0wO3JldHVybiBlPDA/dD09KHIlMj09MCk/MDoxOnQ9PSgobi1yLTEpJTI9PTApP24tMTpuLTJ9fWxldCBFZTtpZih2b2lkIDAhPT1PLnZzY29kZSYmdm9pZCAwIT09Ty52c2NvZGUucHJvY2Vzcyl7Y29uc3QgT289Ty52c2NvZGUucHJvY2VzcztFZT17Z2V0IHBsYXRmb3JtKCl7cmV0dXJuIE9vLnBsYXRmb3JtfSxnZXQgYXJjaCgpe3JldHVybiBPby5hcmNofSxnZXQgZW52KCl7cmV0dXJuIE9vLmVudn0sY3dkKCl7cmV0dXJuIE9vLmN3ZCgpfX19ZWxzZSBFZT0idW5kZWZpbmVkIiE9dHlwZW9mIHByb2Nlc3M/e2dldCBwbGF0Zm9ybSgpe3JldHVybiBwcm9jZXNzLnBsYXRmb3JtfSxnZXQgYXJjaCgpe3JldHVybiBwcm9jZXNzLmFyY2h9LGdldCBlbnYoKXtyZXR1cm4gcHJvY2Vzcy5lbnZ9LGN3ZCgpe3JldHVybiBwcm9jZXNzLmVudi5WU0NPREVfQ1dEfHxwcm9jZXNzLmN3ZCgpfX06e2dldCBwbGF0Zm9ybSgpe3JldHVybiBQPyJ3aW4zMiI6Vj8iZGFyd2luIjoibGludXgifSxnZXQgYXJjaCgpe30sZ2V0IGVudigpe3JldHVybnt9fSxjd2QoKXtyZXR1cm4iLyJ9fTtjb25zdCBOZT1FZS5jd2Qsa2U9RWUuZW52O3ZhciBMZSxNZSxyPUVlLnBsYXRmb3JtO2NsYXNzIE9lIGV4dGVuZHMgRXJyb3J7Y29uc3RydWN0b3IoZSx0LHIpe2xldCBuOyJzdHJpbmciPT10eXBlb2YgdCYmMD09PXQuaW5kZXhPZigibm90ICIpPyhuPSJtdXN0IG5vdCBiZSIsdD10LnJlcGxhY2UoL15ub3QgLywiIikpOm49Im11c3QgYmUiO3ZhciBpPS0xIT09ZS5pbmRleE9mKCIuIik/InByb3BlcnR5IjoiYXJndW1lbnQiLGU9YFRoZSAiJHtlfSIgJHtpfSAke259IG9mIHR5cGUgYCt0O3N1cGVyKGUrPSIuIFJlY2VpdmVkIHR5cGUgIit0eXBlb2YgciksdGhpcy5jb2RlPSJFUlJfSU5WQUxJRF9BUkdfVFlQRSJ9fWZ1bmN0aW9uIFRlKGUsdCl7aWYoInN0cmluZyIhPXR5cGVvZiBlKXRocm93IG5ldyBPZSh0LCJzdHJpbmciLGUpfWZ1bmN0aW9uIGYoZSl7cmV0dXJuIDQ3PT09ZXx8OTI9PT1lfWZ1bmN0aW9uIEllKGUpe3JldHVybiA0Nz09PWV9ZnVuY3Rpb24gUGUoZSl7cmV0dXJuIDY1PD1lJiZlPD05MHx8OTc8PWUmJmU8PTEyMn1mdW5jdGlvbiBWZSh0LHIsbixpKXtsZXQgbz0iIixhPTAscz0tMSxsPTAsYz0wO2ZvcihsZXQgZT0wO2U8PXQubGVuZ3RoOysrZSl7aWYoZTx0Lmxlbmd0aCljPXQuY2hhckNvZGVBdChlKTtlbHNle2lmKGkoYykpYnJlYWs7Yz00N31pZihpKGMpKXtpZihzIT09ZS0xJiYxIT09bClpZigyPT09bCl7aWYoby5sZW5ndGg8Mnx8MiE9PWF8fDQ2IT09by5jaGFyQ29kZUF0KG8ubGVuZ3RoLTEpfHw0NiE9PW8uY2hhckNvZGVBdChvLmxlbmd0aC0yKSl7aWYoMjxvLmxlbmd0aCl7dmFyIHU9by5sYXN0SW5kZXhPZihuKTthPS0xPT09dT8obz0iIiwwKToobz1vLnNsaWNlKDAsdSkpLmxlbmd0aC0xLW8ubGFzdEluZGV4T2Yobikscz1lLGw9MDtjb250aW51ZX1pZigwIT09by5sZW5ndGgpe289IiIsYT0wLHM9ZSxsPTA7Y29udGludWV9fXImJihvKz0wPG8ubGVuZ3RoP24rIi4uIjoiLi4iLGE9Mil9ZWxzZSAwPG8ubGVuZ3RoP28rPSIiK24rdC5zbGljZShzKzEsZSk6bz10LnNsaWNlKHMrMSxlKSxhPWUtcy0xO3M9ZSxsPTB9ZWxzZSA0Nj09PWMmJi0xIT09bD8rK2w6bD0tMX1yZXR1cm4gb31mdW5jdGlvbiBSZShlLHQpe2lmKG51bGw9PT10fHwib2JqZWN0IiE9dHlwZW9mIHQpdGhyb3cgbmV3IE9lKCJwYXRoT2JqZWN0IiwiT2JqZWN0Iix0KTt2YXIgcj10LmRpcnx8dC5yb290LG49dC5iYXNlfHwiIisodC5uYW1lfHwiIikrKHQuZXh0fHwiIik7cmV0dXJuIHI/cj09PXQucm9vdD8iIityK246IiIrcitlK246bn1jb25zdCBEZT17cmVzb2x2ZSguLi5vKXtsZXQgYT0iIixzPSIiLGw9ITE7Zm9yKGxldCB0PW8ubGVuZ3RoLTE7LTE8PXQ7dC0tKXtsZXQgcjtpZigwPD10KXtpZihUZShyPW9bdF0sInBhdGgiKSwwPT09ci5sZW5ndGgpY29udGludWV9ZWxzZSAwPT09YS5sZW5ndGg/cj1OZSgpOih2b2lkIDA9PT0ocj1rZVsiPSIrYV18fE5lKCkpfHxyLnNsaWNlKDAsMikudG9Mb3dlckNhc2UoKSE9PWEudG9Mb3dlckNhc2UoKSYmOTI9PT1yLmNoYXJDb2RlQXQoMikpJiYocj1hKyJcXCIpO3ZhciBjPXIubGVuZ3RoO2xldCBuPTAsaT0iIixlPSExO3ZhciB1PXIuY2hhckNvZGVBdCgwKTtpZigxPT09YylmKHUpJiYobj0xLGU9ITApO2Vsc2UgaWYoZih1KSlpZihlPSEwLGYoci5jaGFyQ29kZUF0KDEpKSl7bGV0IGU9Mix0PWU7Zm9yKDtlPGMmJiFmKHIuY2hhckNvZGVBdChlKSk7KWUrKztpZihlPGMmJmUhPT10KXt2YXIgaD1yLnNsaWNlKHQsZSk7Zm9yKHQ9ZTtlPGMmJmYoci5jaGFyQ29kZUF0KGUpKTspZSsrO2lmKGU8YyYmZSE9PXQpe2Zvcih0PWU7ZTxjJiYhZihyLmNoYXJDb2RlQXQoZSkpOyllKys7ZSE9PWMmJmU9PT10fHwoaT1gXFxcXCR7aH1cXGArci5zbGljZSh0LGUpLG49ZSl9fX1lbHNlIG49MTtlbHNlIFBlKHUpJiY1OD09PXIuY2hhckNvZGVBdCgxKSYmKGk9ci5zbGljZSgwLDIpLChuPTIpPGMmJmYoci5jaGFyQ29kZUF0KDIpKSYmKGU9ITAsbj0zKSk7aWYoMDxpLmxlbmd0aClpZigwPGEubGVuZ3RoKXtpZihpLnRvTG93ZXJDYXNlKCkhPT1hLnRvTG93ZXJDYXNlKCkpY29udGludWV9ZWxzZSBhPWk7aWYobCl7aWYoMDxhLmxlbmd0aClicmVha31lbHNlIGlmKHM9ci5zbGljZShuKSsiXFwiK3MsKGw9ZSkmJjA8YS5sZW5ndGgpYnJlYWt9cmV0dXJuIHM9VmUocywhbCwiXFwiLGYpLGw/YSsiXFwiK3M6IiIrYStzfHwiLiJ9LG5vcm1hbGl6ZShyKXtUZShyLCJwYXRoIik7dmFyIG49ci5sZW5ndGg7aWYoMD09PW4pcmV0dXJuIi4iO2xldCBpPTAsbyxlPSExO3ZhciB0PXIuY2hhckNvZGVBdCgwKTtpZigxPT09bilyZXR1cm4gSWUodCk/IlxcIjpyO2lmKGYodCkpaWYoZT0hMCxmKHIuY2hhckNvZGVBdCgxKSkpe2xldCBlPTIsdD1lO2Zvcig7ZTxuJiYhZihyLmNoYXJDb2RlQXQoZSkpOyllKys7aWYoZTxuJiZlIT09dCl7dmFyIGE9ci5zbGljZSh0LGUpO2Zvcih0PWU7ZTxuJiZmKHIuY2hhckNvZGVBdChlKSk7KWUrKztpZihlPG4mJmUhPT10KXtmb3IodD1lO2U8biYmIWYoci5jaGFyQ29kZUF0KGUpKTspZSsrO2lmKGU9PT1uKXJldHVybmBcXFxcJHthfVxcJHtyLnNsaWNlKHQpfVxcYDtlIT09dCYmKG89YFxcXFwke2F9XFxgK3Iuc2xpY2UodCxlKSxpPWUpfX19ZWxzZSBpPTE7ZWxzZSBQZSh0KSYmNTg9PT1yLmNoYXJDb2RlQXQoMSkmJihvPXIuc2xpY2UoMCwyKSwoaT0yKTxuJiZmKHIuY2hhckNvZGVBdCgyKSkmJihlPSEwLGk9MykpO2xldCBzPWk8bj9WZShyLnNsaWNlKGkpLCFlLCJcXCIsZik6IiI7cmV0dXJuIDA8KHM9MCE9PXMubGVuZ3RofHxlP3M6Ii4iKS5sZW5ndGgmJmYoci5jaGFyQ29kZUF0KG4tMSkpJiYocys9IlxcIiksdm9pZCAwPT09bz9lPyJcXCIrczpzOmU/bysiXFwiK3M6IiIrbytzfSxpc0Fic29sdXRlKGUpe1RlKGUsInBhdGgiKTt2YXIgdD1lLmxlbmd0aDtpZigwPT09dClyZXR1cm4hMTt2YXIgcj1lLmNoYXJDb2RlQXQoMCk7cmV0dXJuIGYocil8fDI8dCYmUGUocikmJjU4PT09ZS5jaGFyQ29kZUF0KDEpJiZmKGUuY2hhckNvZGVBdCgyKSl9LGpvaW4oLi4udCl7aWYoMD09PXQubGVuZ3RoKXJldHVybiIuIjtsZXQgcixuO2ZvcihsZXQgZT0wO2U8dC5sZW5ndGg7KytlKXt2YXIgaT10W2VdO1RlKGksInBhdGgiKSwwPGkubGVuZ3RoJiYodm9pZCAwPT09cj9yPW49aTpyKz0iXFwiK2kpfWlmKHZvaWQgMD09PXIpcmV0dXJuIi4iO2xldCBlPSEwLG89MDt2YXIgYTtpZigic3RyaW5nIj09dHlwZW9mIG4mJmYobi5jaGFyQ29kZUF0KDApKSYmKCsrbywxPChhPW4ubGVuZ3RoKSYmZihuLmNoYXJDb2RlQXQoMSkpJiYoKytvLDI8YSYmKGYobi5jaGFyQ29kZUF0KDIpKT8rK286ZT0hMSkpKSxlKXtmb3IoO288ci5sZW5ndGgmJmYoci5jaGFyQ29kZUF0KG8pKTspbysrOzI8PW8mJihyPSJcXCIrci5zbGljZShvKSl9cmV0dXJuIERlLm5vcm1hbGl6ZShyKX0scmVsYXRpdmUoZSx0KXtpZihUZShlLCJmcm9tIiksVGUodCwidG8iKSxlPT09dClyZXR1cm4iIjtjb25zdCB1PURlLnJlc29sdmUoZSkscj1EZS5yZXNvbHZlKHQpO2lmKHU9PT1yKXJldHVybiIiO2lmKChlPXUudG9Mb3dlckNhc2UoKSk9PT0odD1yLnRvTG93ZXJDYXNlKCkpKXJldHVybiIiO2xldCBuPTA7Zm9yKDtuPGUubGVuZ3RoJiY5Mj09PWUuY2hhckNvZGVBdChuKTspbisrO2xldCBpPWUubGVuZ3RoO2Zvcig7aS0xPm4mJjkyPT09ZS5jaGFyQ29kZUF0KGktMSk7KWktLTt2YXIgaD1pLW47bGV0IG89MDtmb3IoO288dC5sZW5ndGgmJjkyPT09dC5jaGFyQ29kZUF0KG8pOylvKys7bGV0IGE9dC5sZW5ndGg7Zm9yKDthLTE+byYmOTI9PT10LmNoYXJDb2RlQXQoYS0xKTspYS0tO3ZhciBmPWEtbyxzPWg8Zj9oOmY7bGV0IGw9LTEsYz0wO2Zvcig7YzxzO2MrKyl7dmFyIGQ9ZS5jaGFyQ29kZUF0KG4rYyk7aWYoZCE9PXQuY2hhckNvZGVBdChvK2MpKWJyZWFrOzkyPT09ZCYmKGw9Yyl9aWYoYyE9PXMpe2lmKC0xPT09bClyZXR1cm4gcn1lbHNle2lmKHM8Zil7aWYoOTI9PT10LmNoYXJDb2RlQXQobytjKSlyZXR1cm4gci5zbGljZShvK2MrMSk7aWYoMj09PWMpcmV0dXJuIHIuc2xpY2UobytjKX1zPGgmJig5Mj09PWUuY2hhckNvZGVBdChuK2MpP2w9YzoyPT09YyYmKGw9MykpLC0xPT09bCYmKGw9MCl9bGV0IG09IiI7Zm9yKGM9bitsKzE7Yzw9aTsrK2MpYyE9PWkmJjkyIT09ZS5jaGFyQ29kZUF0KGMpfHwobSs9MD09PW0ubGVuZ3RoPyIuLiI6IlxcLi4iKTtyZXR1cm4gbys9bCwwPG0ubGVuZ3RoPyIiK20rci5zbGljZShvLGEpOig5Mj09PXIuY2hhckNvZGVBdChvKSYmKytvLHIuc2xpY2UobyxhKSl9LHRvTmFtZXNwYWNlZFBhdGgoZSl7aWYoInN0cmluZyIhPXR5cGVvZiBlKXJldHVybiBlO2lmKDA9PT1lLmxlbmd0aClyZXR1cm4iIjtjb25zdCB0PURlLnJlc29sdmUoZSk7aWYodC5sZW5ndGg8PTIpcmV0dXJuIGU7aWYoOTI9PT10LmNoYXJDb2RlQXQoMCkpe2lmKDkyPT09dC5jaGFyQ29kZUF0KDEpKXt2YXIgcj10LmNoYXJDb2RlQXQoMik7aWYoNjMhPT1yJiY0NiE9PXIpcmV0dXJuIlxcXFw/XFxVTkNcXCIrdC5zbGljZSgyKX19ZWxzZSBpZihQZSh0LmNoYXJDb2RlQXQoMCkpJiY1OD09PXQuY2hhckNvZGVBdCgxKSYmOTI9PT10LmNoYXJDb2RlQXQoMikpcmV0dXJuIlxcXFw/XFwiK3Q7cmV0dXJuIGV9LGRpcm5hbWUocil7VGUociwicGF0aCIpO3ZhciBuPXIubGVuZ3RoO2lmKDA9PT1uKXJldHVybiIuIjtsZXQgaT0tMSxvPTA7dmFyIGU9ci5jaGFyQ29kZUF0KDApO2lmKDE9PT1uKXJldHVybiBmKGUpP3I6Ii4iO2lmKGYoZSkpe2lmKGk9bz0xLGYoci5jaGFyQ29kZUF0KDEpKSl7bGV0IGU9Mix0PWU7Zm9yKDtlPG4mJiFmKHIuY2hhckNvZGVBdChlKSk7KWUrKztpZihlPG4mJmUhPT10KXtmb3IodD1lO2U8biYmZihyLmNoYXJDb2RlQXQoZSkpOyllKys7aWYoZTxuJiZlIT09dCl7Zm9yKHQ9ZTtlPG4mJiFmKHIuY2hhckNvZGVBdChlKSk7KWUrKztpZihlPT09bilyZXR1cm4gcjtlIT09dCYmKGk9bz1lKzEpfX19fWVsc2UgUGUoZSkmJjU4PT09ci5jaGFyQ29kZUF0KDEpJiYoaT0yPG4mJmYoci5jaGFyQ29kZUF0KDIpKT8zOjIsbz1pKTtsZXQgdD0tMSxhPSEwO2ZvcihsZXQgZT1uLTE7ZT49bzstLWUpaWYoZihyLmNoYXJDb2RlQXQoZSkpKXtpZighYSl7dD1lO2JyZWFrfX1lbHNlIGE9ITE7aWYoLTE9PT10KXtpZigtMT09PWkpcmV0dXJuIi4iO3Q9aX1yZXR1cm4gci5zbGljZSgwLHQpfSxiYXNlbmFtZShyLG4pe3ZvaWQgMCE9PW4mJlRlKG4sImV4dCIpLFRlKHIsInBhdGgiKTtsZXQgaT0wLG89LTEsYT0hMCxzO2lmKDI8PXIubGVuZ3RoJiZQZShyLmNoYXJDb2RlQXQoMCkpJiY1OD09PXIuY2hhckNvZGVBdCgxKSYmKGk9Miksdm9pZCAwIT09biYmMDxuLmxlbmd0aCYmbi5sZW5ndGg8PXIubGVuZ3RoKXtpZihuPT09cilyZXR1cm4iIjtsZXQgZT1uLmxlbmd0aC0xLHQ9LTE7Zm9yKHM9ci5sZW5ndGgtMTtzPj1pOy0tcyl7dmFyIGw9ci5jaGFyQ29kZUF0KHMpO2lmKGYobCkpe2lmKCFhKXtpPXMrMTticmVha319ZWxzZS0xPT09dCYmKGE9ITEsdD1zKzEpLDA8PWUmJihsPT09bi5jaGFyQ29kZUF0KGUpPy0xPT0tLWUmJihvPXMpOihlPS0xLG89dCkpfXJldHVybiBpPT09bz9vPXQ6LTE9PT1vJiYobz1yLmxlbmd0aCksci5zbGljZShpLG8pfWZvcihzPXIubGVuZ3RoLTE7cz49aTstLXMpaWYoZihyLmNoYXJDb2RlQXQocykpKXtpZighYSl7aT1zKzE7YnJlYWt9fWVsc2UtMT09PW8mJihhPSExLG89cysxKTtyZXR1cm4tMT09PW8/IiI6ci5zbGljZShpLG8pfSxleHRuYW1lKHQpe1RlKHQsInBhdGgiKTtsZXQgcj0wLG49LTEsaT0wLG89LTEsYT0hMCxzPTA7Mjw9dC5sZW5ndGgmJjU4PT09dC5jaGFyQ29kZUF0KDEpJiZQZSh0LmNoYXJDb2RlQXQoMCkpJiYocj1pPTIpO2ZvcihsZXQgZT10Lmxlbmd0aC0xO2U+PXI7LS1lKXt2YXIgbD10LmNoYXJDb2RlQXQoZSk7aWYoZihsKSl7aWYoYSljb250aW51ZTtpPWUrMTticmVha30tMT09PW8mJihhPSExLG89ZSsxKSw0Nj09PWw/LTE9PT1uP249ZToxIT09cyYmKHM9MSk6LTEhPT1uJiYocz0tMSl9cmV0dXJuLTE9PT1ufHwtMT09PW98fDA9PT1zfHwxPT09cyYmbj09PW8tMSYmbj09PWkrMT8iIjp0LnNsaWNlKG4sbyl9LGZvcm1hdDpSZS5iaW5kKG51bGwsIlxcIikscGFyc2Uocil7VGUociwicGF0aCIpO2NvbnN0IGU9e3Jvb3Q6IiIsZGlyOiIiLGJhc2U6IiIsZXh0OiIiLG5hbWU6IiJ9O2lmKDA9PT1yLmxlbmd0aClyZXR1cm4gZTt2YXIgbj1yLmxlbmd0aDtsZXQgaT0wLHQ9ci5jaGFyQ29kZUF0KDApO2lmKDE9PT1uKXJldHVybiBmKHQpP2Uucm9vdD1lLmRpcj1yOmUuYmFzZT1lLm5hbWU9cixlO2lmKGYodCkpe2lmKGk9MSxmKHIuY2hhckNvZGVBdCgxKSkpe2xldCBlPTIsdD1lO2Zvcig7ZTxuJiYhZihyLmNoYXJDb2RlQXQoZSkpOyllKys7aWYoZTxuJiZlIT09dCl7Zm9yKHQ9ZTtlPG4mJmYoci5jaGFyQ29kZUF0KGUpKTspZSsrO2lmKGU8biYmZSE9PXQpe2Zvcih0PWU7ZTxuJiYhZihyLmNoYXJDb2RlQXQoZSkpOyllKys7ZT09PW4/aT1lOmUhPT10JiYoaT1lKzEpfX19fWVsc2UgaWYoUGUodCkmJjU4PT09ci5jaGFyQ29kZUF0KDEpKXtpZihuPD0yKXJldHVybiBlLnJvb3Q9ZS5kaXI9cixlO2lmKGk9MixmKHIuY2hhckNvZGVBdCgyKSkpe2lmKDM9PT1uKXJldHVybiBlLnJvb3Q9ZS5kaXI9cixlO2k9M319MDxpJiYoZS5yb290PXIuc2xpY2UoMCxpKSk7bGV0IG89LTEsYT1pLHM9LTEsdT0hMCxsPXIubGVuZ3RoLTEsYz0wO2Zvcig7bD49aTstLWwpe2lmKGYodD1yLmNoYXJDb2RlQXQobCkpKXtpZih1KWNvbnRpbnVlO2E9bCsxO2JyZWFrfS0xPT09cyYmKHU9ITEscz1sKzEpLDQ2PT09dD8tMT09PW8/bz1sOjEhPT1jJiYoYz0xKTotMSE9PW8mJihjPS0xKX1yZXR1cm4tMSE9PXMmJigtMT09PW98fDA9PT1jfHwxPT09YyYmbz09PXMtMSYmbz09PWErMT9lLmJhc2U9ZS5uYW1lPXIuc2xpY2UoYSxzKTooZS5uYW1lPXIuc2xpY2UoYSxvKSxlLmJhc2U9ci5zbGljZShhLHMpLGUuZXh0PXIuc2xpY2UobyxzKSkpLDA8YSYmYSE9PWk/ZS5kaXI9ci5zbGljZSgwLGEtMSk6ZS5kaXI9ZS5yb290LGV9LHNlcDoiXFwiLGRlbGltaXRlcjoiOyIsd2luMzI6bnVsbCxwb3NpeDpudWxsfSxGZT17cmVzb2x2ZSguLi50KXtsZXQgcj0iIixuPSExO2ZvcihsZXQgZT10Lmxlbmd0aC0xOy0xPD1lJiYhbjtlLS0pe2NvbnN0IGk9MDw9ZT90W2VdOk5lKCk7VGUoaSwicGF0aCIpLDAhPT1pLmxlbmd0aCYmKHI9aSsiLyIrcixuPTQ3PT09aS5jaGFyQ29kZUF0KDApKX1yZXR1cm4gcj1WZShyLCFuLCIvIixJZSksbj8iLyIrcjowPHIubGVuZ3RoP3I6Ii4ifSxub3JtYWxpemUoZSl7aWYoVGUoZSwicGF0aCIpLDA9PT1lLmxlbmd0aClyZXR1cm4iLiI7dmFyIHQ9NDc9PT1lLmNoYXJDb2RlQXQoMCkscj00Nz09PWUuY2hhckNvZGVBdChlLmxlbmd0aC0xKTtyZXR1cm4gMD09PShlPVZlKGUsIXQsIi8iLEllKSkubGVuZ3RoP3Q/Ii8iOnI/Ii4vIjoiLiI6KHImJihlKz0iLyIpLHQ/Ii8iK2U6ZSl9LGlzQWJzb2x1dGUoZSl7cmV0dXJuIFRlKGUsInBhdGgiKSwwPGUubGVuZ3RoJiY0Nz09PWUuY2hhckNvZGVBdCgwKX0sam9pbiguLi50KXtpZigwPT09dC5sZW5ndGgpcmV0dXJuIi4iO2xldCByO2ZvcihsZXQgZT0wO2U8dC5sZW5ndGg7KytlKXt2YXIgbj10W2VdO1RlKG4sInBhdGgiKSwwPG4ubGVuZ3RoJiYodm9pZCAwPT09cj9yPW46cis9Ii8iK24pfXJldHVybiB2b2lkIDA9PT1yPyIuIjpGZS5ub3JtYWxpemUocil9LHJlbGF0aXZlKGUsdCl7aWYoVGUoZSwiZnJvbSIpLFRlKHQsInRvIiksZT09PXQpcmV0dXJuIiI7aWYoKGU9RmUucmVzb2x2ZShlKSk9PT0odD1GZS5yZXNvbHZlKHQpKSlyZXR1cm4iIjt2YXIgcj1lLmxlbmd0aCxuPXItMSxpPXQubGVuZ3RoLTEsbz1uPGk/bjppO2xldCBhPS0xLHM9MDtmb3IoO3M8bztzKyspe3ZhciBsPWUuY2hhckNvZGVBdCgxK3MpO2lmKGwhPT10LmNoYXJDb2RlQXQoMStzKSlicmVhazs0Nz09PWwmJihhPXMpfWlmKHM9PT1vKWlmKG88aSl7aWYoNDc9PT10LmNoYXJDb2RlQXQoMStzKSlyZXR1cm4gdC5zbGljZSgxK3MrMSk7aWYoMD09PXMpcmV0dXJuIHQuc2xpY2UoMStzKX1lbHNlIG88biYmKDQ3PT09ZS5jaGFyQ29kZUF0KDErcyk/YT1zOjA9PT1zJiYoYT0wKSk7bGV0IGM9IiI7Zm9yKHM9MSthKzE7czw9cjsrK3MpcyE9PXImJjQ3IT09ZS5jaGFyQ29kZUF0KHMpfHwoYys9MD09PWMubGVuZ3RoPyIuLiI6Ii8uLiIpO3JldHVybiIiK2MrdC5zbGljZSgxK2EpfSx0b05hbWVzcGFjZWRQYXRoKGUpe3JldHVybiBlfSxkaXJuYW1lKHQpe2lmKFRlKHQsInBhdGgiKSwwPT09dC5sZW5ndGgpcmV0dXJuIi4iO3ZhciBlPTQ3PT09dC5jaGFyQ29kZUF0KDApO2xldCByPS0xLG49ITA7Zm9yKGxldCBlPXQubGVuZ3RoLTE7MTw9ZTstLWUpaWYoNDc9PT10LmNoYXJDb2RlQXQoZSkpe2lmKCFuKXtyPWU7YnJlYWt9fWVsc2Ugbj0hMTtyZXR1cm4tMT09PXI/ZT8iLyI6Ii4iOmUmJjE9PT1yPyIvLyI6dC5zbGljZSgwLHIpfSxiYXNlbmFtZShyLG4pe3ZvaWQgMCE9PW4mJlRlKG4sImV4dCIpLFRlKHIsInBhdGgiKTtsZXQgaT0wLG89LTEsYT0hMCxzO2lmKHZvaWQgMCE9PW4mJjA8bi5sZW5ndGgmJm4ubGVuZ3RoPD1yLmxlbmd0aCl7aWYobj09PXIpcmV0dXJuIiI7bGV0IGU9bi5sZW5ndGgtMSx0PS0xO2ZvcihzPXIubGVuZ3RoLTE7MDw9czstLXMpe3ZhciBsPXIuY2hhckNvZGVBdChzKTtpZig0Nz09PWwpe2lmKCFhKXtpPXMrMTticmVha319ZWxzZS0xPT09dCYmKGE9ITEsdD1zKzEpLDA8PWUmJihsPT09bi5jaGFyQ29kZUF0KGUpPy0xPT0tLWUmJihvPXMpOihlPS0xLG89dCkpfXJldHVybiBpPT09bz9vPXQ6LTE9PT1vJiYobz1yLmxlbmd0aCksci5zbGljZShpLG8pfWZvcihzPXIubGVuZ3RoLTE7MDw9czstLXMpaWYoNDc9PT1yLmNoYXJDb2RlQXQocykpe2lmKCFhKXtpPXMrMTticmVha319ZWxzZS0xPT09byYmKGE9ITEsbz1zKzEpO3JldHVybi0xPT09bz8iIjpyLnNsaWNlKGksbyl9LGV4dG5hbWUodCl7VGUodCwicGF0aCIpO2xldCByPS0xLG49MCxpPS0xLG89ITAsYT0wO2ZvcihsZXQgZT10Lmxlbmd0aC0xOzA8PWU7LS1lKXt2YXIgcz10LmNoYXJDb2RlQXQoZSk7aWYoNDc9PT1zKXtpZihvKWNvbnRpbnVlO249ZSsxO2JyZWFrfS0xPT09aSYmKG89ITEsaT1lKzEpLDQ2PT09cz8tMT09PXI/cj1lOjEhPT1hJiYoYT0xKTotMSE9PXImJihhPS0xKX1yZXR1cm4tMT09PXJ8fC0xPT09aXx8MD09PWF8fDE9PT1hJiZyPT09aS0xJiZyPT09bisxPyIiOnQuc2xpY2UocixpKX0sZm9ybWF0OlJlLmJpbmQobnVsbCwiLyIpLHBhcnNlKGUpe1RlKGUsInBhdGgiKTtjb25zdCB0PXtyb290OiIiLGRpcjoiIixiYXNlOiIiLGV4dDoiIixuYW1lOiIifTtpZigwPT09ZS5sZW5ndGgpcmV0dXJuIHQ7dmFyIHI9NDc9PT1lLmNoYXJDb2RlQXQoMCk7bGV0IG4saT0obj1yPyh0LnJvb3Q9Ii8iLDEpOjAsLTEpLG89MCxhPS0xLHM9ITAsbD1lLmxlbmd0aC0xLGM9MDtmb3IoO2w+PW47LS1sKXt2YXIgdT1lLmNoYXJDb2RlQXQobCk7aWYoNDc9PT11KXtpZihzKWNvbnRpbnVlO289bCsxO2JyZWFrfS0xPT09YSYmKHM9ITEsYT1sKzEpLDQ2PT09dT8tMT09PWk/aT1sOjEhPT1jJiYoYz0xKTotMSE9PWkmJihjPS0xKX1pZigtMSE9PWEpe2NvbnN0IG49MD09PW8mJnI/MTpvOy0xPT09aXx8MD09PWN8fDE9PT1jJiZpPT09YS0xJiZpPT09bysxP3QuYmFzZT10Lm5hbWU9ZS5zbGljZShuLGEpOih0Lm5hbWU9ZS5zbGljZShuLGkpLHQuYmFzZT1lLnNsaWNlKG4sYSksdC5leHQ9ZS5zbGljZShpLGEpKX1yZXR1cm4gMDxvP3QuZGlyPWUuc2xpY2UoMCxvLTEpOnImJih0LmRpcj0iLyIpLHR9LHNlcDoiLyIsZGVsaW1pdGVyOiI6Iix3aW4zMjpudWxsLHBvc2l4Om51bGx9LEtlPShGZS53aW4zMj1EZS53aW4zMj1EZSxGZS5wb3NpeD1EZS5wb3NpeD1GZSwoIndpbjMyIj09PXI/RGU6RmUpLm5vcm1hbGl6ZSwoIndpbjMyIj09PXI/RGU6RmUpLnJlc29sdmUsKCJ3aW4zMiI9PT1yP0RlOkZlKS5yZWxhdGl2ZSwoIndpbjMyIj09PXI/RGU6RmUpLmRpcm5hbWUsKCJ3aW4zMiI9PT1yP0RlOkZlKS5iYXNlbmFtZSwoIndpbjMyIj09PXI/RGU6RmUpLmV4dG5hbWUsKCJ3aW4zMiI9PT1yP0RlOkZlKS5zZXAsL15cd1tcd1xkKy4tXSokLykscWU9L15cLy8sQmU9L15cL1wvLztmdW5jdGlvbiAkZShlLHQpe2lmKCFlLnNjaGVtZSYmdCl0aHJvdyBuZXcgRXJyb3IoYFtVcmlFcnJvcl06IFNjaGVtZSBpcyBtaXNzaW5nOiB7c2NoZW1lOiAiIiwgYXV0aG9yaXR5OiAiJHtlLmF1dGhvcml0eX0iLCBwYXRoOiAiJHtlLnBhdGh9IiwgcXVlcnk6ICIke2UucXVlcnl9IiwgZnJhZ21lbnQ6ICIke2UuZnJhZ21lbnR9In1gKTtpZihlLnNjaGVtZSYmIUtlLnRlc3QoZS5zY2hlbWUpKXRocm93IG5ldyBFcnJvcigiW1VyaUVycm9yXTogU2NoZW1lIGNvbnRhaW5zIGlsbGVnYWwgY2hhcmFjdGVycy4iKTtpZihlLnBhdGgpaWYoZS5hdXRob3JpdHkpe2lmKCFxZS50ZXN0KGUucGF0aCkpdGhyb3cgbmV3IEVycm9yKCdbVXJpRXJyb3JdOiBJZiBhIFVSSSBjb250YWlucyBhbiBhdXRob3JpdHkgY29tcG9uZW50LCB0aGVuIHRoZSBwYXRoIGNvbXBvbmVudCBtdXN0IGVpdGhlciBiZSBlbXB0eSBvciBiZWdpbiB3aXRoIGEgc2xhc2ggKCIvIikgY2hhcmFjdGVyJyl9ZWxzZSBpZihCZS50ZXN0KGUucGF0aCkpdGhyb3cgbmV3IEVycm9yKCdbVXJpRXJyb3JdOiBJZiBhIFVSSSBkb2VzIG5vdCBjb250YWluIGFuIGF1dGhvcml0eSBjb21wb25lbnQsIHRoZW4gdGhlIHBhdGggY2Fubm90IGJlZ2luIHdpdGggdHdvIHNsYXNoIGNoYXJhY3RlcnMgKCIvLyIpJyl9Y29uc3QgV2U9Ii8iLEhlPS9eKChbXjovPyNdKz8pOik/KFwvXC8oW14vPyNdKikpPyhbXj8jXSopKFw/KFteI10qKSk/KCMoLiopKT8vO2NsYXNzIHple2NvbnN0cnVjdG9yKGUsdCxyLG4saSxvPSExKXt2YXIgYTsib2JqZWN0Ij09dHlwZW9mIGU/KHRoaXMuc2NoZW1lPWUuc2NoZW1lfHwiIix0aGlzLmF1dGhvcml0eT1lLmF1dGhvcml0eXx8IiIsdGhpcy5wYXRoPWUucGF0aHx8IiIsdGhpcy5xdWVyeT1lLnF1ZXJ5fHwiIix0aGlzLmZyYWdtZW50PWUuZnJhZ21lbnR8fCIiKToodGhpcy5zY2hlbWU9KGE9bywoZT1lKXx8YT9lOiJmaWxlIiksdGhpcy5hdXRob3JpdHk9dHx8IiIsdGhpcy5wYXRoPWZ1bmN0aW9uKGUsdCl7c3dpdGNoKGUpe2Nhc2UiaHR0cHMiOmNhc2UiaHR0cCI6Y2FzZSJmaWxlIjp0P3RbMF0hPT1XZSYmKHQ9V2UrdCk6dD1XZX1yZXR1cm4gdH0odGhpcy5zY2hlbWUscnx8IiIpLHRoaXMucXVlcnk9bnx8IiIsdGhpcy5mcmFnbWVudD1pfHwiIiwkZSh0aGlzLG8pKX1zdGF0aWMgaXNVcmkoZSl7cmV0dXJuIGUgaW5zdGFuY2VvZiB6ZXx8ISFlJiYoInN0cmluZyI9PXR5cGVvZiBlLmF1dGhvcml0eSYmInN0cmluZyI9PXR5cGVvZiBlLmZyYWdtZW50JiYic3RyaW5nIj09dHlwZW9mIGUucGF0aCYmInN0cmluZyI9PXR5cGVvZiBlLnF1ZXJ5JiYic3RyaW5nIj09dHlwZW9mIGUuc2NoZW1lJiYic3RyaW5nIj09dHlwZW9mIGUuZnNQYXRoJiYiZnVuY3Rpb24iPT10eXBlb2YgZS53aXRoJiYiZnVuY3Rpb24iPT10eXBlb2YgZS50b1N0cmluZyl9Z2V0IGZzUGF0aCgpe3JldHVybiBZZSh0aGlzLCExKX13aXRoKGUpe2lmKCFlKXJldHVybiB0aGlzO2xldHtzY2hlbWU6dCxhdXRob3JpdHk6cixwYXRoOm4scXVlcnk6aSxmcmFnbWVudDpvfT1lO3JldHVybiB2b2lkIDA9PT10P3Q9dGhpcy5zY2hlbWU6bnVsbD09PXQmJih0PSIiKSx2b2lkIDA9PT1yP3I9dGhpcy5hdXRob3JpdHk6bnVsbD09PXImJihyPSIiKSx2b2lkIDA9PT1uP249dGhpcy5wYXRoOm51bGw9PT1uJiYobj0iIiksdm9pZCAwPT09aT9pPXRoaXMucXVlcnk6bnVsbD09PWkmJihpPSIiKSx2b2lkIDA9PT1vP289dGhpcy5mcmFnbWVudDpudWxsPT09byYmKG89IiIpLHQ9PT10aGlzLnNjaGVtZSYmcj09PXRoaXMuYXV0aG9yaXR5JiZuPT09dGhpcy5wYXRoJiZpPT09dGhpcy5xdWVyeSYmbz09PXRoaXMuZnJhZ21lbnQ/dGhpczpuZXcgR2UodCxyLG4saSxvKX1zdGF0aWMgcGFyc2UoZSx0PSExKXtlPUhlLmV4ZWMoZSk7cmV0dXJuIGU/bmV3IEdlKGVbMl18fCIiLHJ0KGVbNF18fCIiKSxydChlWzVdfHwiIikscnQoZVs3XXx8IiIpLHJ0KGVbOV18fCIiKSx0KTpuZXcgR2UoIiIsIiIsIiIsIiIsIiIpfXN0YXRpYyBmaWxlKGUpe2xldCB0PSIiO3ZhciByO3JldHVybihlPVA/ZS5yZXBsYWNlKC9cXC9nLFdlKTplKVswXT09PVdlJiZlWzFdPT09V2UmJihlPS0xPT09KHI9ZS5pbmRleE9mKFdlLDIpKT8odD1lLnN1YnN0cmluZygyKSxXZSk6KHQ9ZS5zdWJzdHJpbmcoMixyKSxlLnN1YnN0cmluZyhyKXx8V2UpKSxuZXcgR2UoImZpbGUiLHQsZSwiIiwiIil9c3RhdGljIGZyb20oZSl7ZT1uZXcgR2UoZS5zY2hlbWUsZS5hdXRob3JpdHksZS5wYXRoLGUucXVlcnksZS5mcmFnbWVudCk7cmV0dXJuICRlKGUsITApLGV9c3RhdGljIGpvaW5QYXRoKGUsLi4udCl7aWYoIWUucGF0aCl0aHJvdyBuZXcgRXJyb3IoIltVcmlFcnJvcl06IGNhbm5vdCBjYWxsIGpvaW5QYXRoIG9uIFVSSSB3aXRob3V0IHBhdGgiKTtsZXQgcjtyZXR1cm4gcj1QJiYiZmlsZSI9PT1lLnNjaGVtZT96ZS5maWxlKERlLmpvaW4oWWUoZSwhMCksLi4udCkpLnBhdGg6RmUuam9pbihlLnBhdGgsLi4udCksZS53aXRoKHtwYXRoOnJ9KX10b1N0cmluZyhlPSExKXtyZXR1cm4gZXQodGhpcyxlKX10b0pTT04oKXtyZXR1cm4gdGhpc31zdGF0aWMgcmV2aXZlKGUpe2lmKGUpe2lmKGUgaW5zdGFuY2VvZiB6ZSlyZXR1cm4gZTt7Y29uc3QgdD1uZXcgR2UoZSk7cmV0dXJuIHQuX2Zvcm1hdHRlZD1lLmV4dGVybmFsLHQuX2ZzUGF0aD1lLl9zZXA9PT1KZT9lLmZzUGF0aDpudWxsLHR9fXJldHVybiBlfX1jb25zdCBKZT1QPzE6dm9pZCAwO2NsYXNzIEdlIGV4dGVuZHMgemV7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuX2Zvcm1hdHRlZD1udWxsLHRoaXMuX2ZzUGF0aD1udWxsfWdldCBmc1BhdGgoKXtyZXR1cm4gdGhpcy5fZnNQYXRofHwodGhpcy5fZnNQYXRoPVllKHRoaXMsITEpKSx0aGlzLl9mc1BhdGh9dG9TdHJpbmcoZT0hMSl7cmV0dXJuIGU/ZXQodGhpcywhMCk6KHRoaXMuX2Zvcm1hdHRlZHx8KHRoaXMuX2Zvcm1hdHRlZD1ldCh0aGlzLCExKSksdGhpcy5fZm9ybWF0dGVkKX10b0pTT04oKXtjb25zdCBlPXskbWlkOjF9O3JldHVybiB0aGlzLl9mc1BhdGgmJihlLmZzUGF0aD10aGlzLl9mc1BhdGgsZS5fc2VwPUplKSx0aGlzLl9mb3JtYXR0ZWQmJihlLmV4dGVybmFsPXRoaXMuX2Zvcm1hdHRlZCksdGhpcy5wYXRoJiYoZS5wYXRoPXRoaXMucGF0aCksdGhpcy5zY2hlbWUmJihlLnNjaGVtZT10aGlzLnNjaGVtZSksdGhpcy5hdXRob3JpdHkmJihlLmF1dGhvcml0eT10aGlzLmF1dGhvcml0eSksdGhpcy5xdWVyeSYmKGUucXVlcnk9dGhpcy5xdWVyeSksdGhpcy5mcmFnbWVudCYmKGUuZnJhZ21lbnQ9dGhpcy5mcmFnbWVudCksZX19Y29uc3QgWmU9e1s1OF06IiUzQSIsNDc6IiUyRiIsNjM6IiUzRiIsMzU6IiUyMyIsOTE6IiU1QiIsOTM6IiU1RCIsNjQ6IiU0MCIsMzM6IiUyMSIsMzY6IiUyNCIsMzg6IiUyNiIsMzk6IiUyNyIsNDA6IiUyOCIsNDE6IiUyOSIsNDI6IiUyQSIsNDM6IiUyQiIsNDQ6IiUyQyIsNTk6IiUzQiIsNjE6IiUzRCIsMzI6IiUyMCJ9O2Z1bmN0aW9uIFhlKHQscil7bGV0IG49dm9pZCAwLGk9LTE7Zm9yKGxldCBlPTA7ZTx0Lmxlbmd0aDtlKyspe3ZhciBvPXQuY2hhckNvZGVBdChlKTs5Nzw9byYmbzw9MTIyfHw2NTw9byYmbzw9OTB8fDQ4PD1vJiZvPD01N3x8NDU9PT1vfHw0Nj09PW98fDk1PT09b3x8MTI2PT09b3x8ciYmNDc9PT1vPygtMSE9PWkmJihuKz1lbmNvZGVVUklDb21wb25lbnQodC5zdWJzdHJpbmcoaSxlKSksaT0tMSksdm9pZCAwIT09biYmKG4rPXQuY2hhckF0KGUpKSk6KHZvaWQgMD09PW4mJihuPXQuc3Vic3RyKDAsZSkpLHZvaWQgMCE9PShvPVplW29dKT8oLTEhPT1pJiYobis9ZW5jb2RlVVJJQ29tcG9uZW50KHQuc3Vic3RyaW5nKGksZSkpLGk9LTEpLG4rPW8pOi0xPT09aSYmKGk9ZSkpfXJldHVybi0xIT09aSYmKG4rPWVuY29kZVVSSUNvbXBvbmVudCh0LnN1YnN0cmluZyhpKSkpLHZvaWQgMCE9PW4/bjp0fWZ1bmN0aW9uIFFlKHQpe2xldCByPXZvaWQgMDtmb3IobGV0IGU9MDtlPHQubGVuZ3RoO2UrKyl7dmFyIG49dC5jaGFyQ29kZUF0KGUpOzM1PT09bnx8NjM9PT1uPyh2b2lkIDA9PT1yJiYocj10LnN1YnN0cigwLGUpKSxyKz1aZVtuXSk6dm9pZCAwIT09ciYmKHIrPXRbZV0pfXJldHVybiB2b2lkIDAhPT1yP3I6dH1mdW5jdGlvbiBZZShlLHQpe2xldCByO3JldHVybiByPWUuYXV0aG9yaXR5JiYxPGUucGF0aC5sZW5ndGgmJiJmaWxlIj09PWUuc2NoZW1lPyIvLyIrZS5hdXRob3JpdHkrZS5wYXRoOjQ3PT09ZS5wYXRoLmNoYXJDb2RlQXQoMCkmJig2NTw9ZS5wYXRoLmNoYXJDb2RlQXQoMSkmJmUucGF0aC5jaGFyQ29kZUF0KDEpPD05MHx8OTc8PWUucGF0aC5jaGFyQ29kZUF0KDEpJiZlLnBhdGguY2hhckNvZGVBdCgxKTw9MTIyKSYmNTg9PT1lLnBhdGguY2hhckNvZGVBdCgyKT90P2UucGF0aC5zdWJzdHIoMSk6ZS5wYXRoWzFdLnRvTG93ZXJDYXNlKCkrZS5wYXRoLnN1YnN0cigyKTplLnBhdGgscj1QP3IucmVwbGFjZSgvXC8vZywiXFwiKTpyfWZ1bmN0aW9uIGV0KGUsdCl7Y29uc3Qgcj10P1FlOlhlO2xldCBuPSIiLHtzY2hlbWU6aSxhdXRob3JpdHk6byxwYXRoOmEscXVlcnk6cyxmcmFnbWVudDpsfT1lO2lmKGkmJihuPW4raSsiOiIpLCFvJiYiZmlsZSIhPT1pfHwobj0obis9V2UpK1dlKSxvKXtsZXQgZT1vLmluZGV4T2YoIkAiKTtpZigtMSE9PWUpe2NvbnN0IGM9by5zdWJzdHIoMCxlKTtvPW8uc3Vic3RyKGUrMSksLTE9PT0oZT1jLmluZGV4T2YoIjoiKSk/bis9cihjLCExKTpuPShuPW4rcihjLnN1YnN0cigwLGUpLCExKSsiOiIpK3IoYy5zdWJzdHIoZSsxKSwhMSksbis9IkAifW89by50b0xvd2VyQ2FzZSgpLC0xPT09KGU9by5pbmRleE9mKCI6IikpP24rPXIobywhMSk6bj0obis9cihvLnN1YnN0cigwLGUpLCExKSkrby5zdWJzdHIoZSl9cmV0dXJuIGEmJigzPD1hLmxlbmd0aCYmNDc9PT1hLmNoYXJDb2RlQXQoMCkmJjU4PT09YS5jaGFyQ29kZUF0KDIpPzY1PD0oZT1hLmNoYXJDb2RlQXQoMSkpJiZlPD05MCYmKGE9YC8ke1N0cmluZy5mcm9tQ2hhckNvZGUoZSszMil9OmArYS5zdWJzdHIoMykpOjI8PWEubGVuZ3RoJiY1OD09PWEuY2hhckNvZGVBdCgxKSYmKDY1PD0oZT1hLmNoYXJDb2RlQXQoMCkpJiZlPD05MCYmKGE9U3RyaW5nLmZyb21DaGFyQ29kZShlKzMyKSsiOiIrYS5zdWJzdHIoMikpKSxuKz1yKGEsITApKSxzJiYobj0obis9Ij8iKStyKHMsITEpKSxuPWw/KG4rPSIjIikrKHQ/bDpYZShsLCExKSk6bn1jb25zdCB0dD0vKCVbMC05QS1aYS16XVswLTlBLVphLXpdKSsvZztmdW5jdGlvbiBydChlKXtyZXR1cm4gZS5tYXRjaCh0dCk/ZS5yZXBsYWNlKHR0LGU9PmZ1bmN0aW9uIHQocil7dHJ5e3JldHVybiBkZWNvZGVVUklDb21wb25lbnQocil9Y2F0Y2goZSl7cmV0dXJuIDM8ci5sZW5ndGg/ci5zdWJzdHIoMCwzKSt0KHIuc3Vic3RyKDMpKTpyfX0oZSkpOmV9Y2xhc3MgbnR7Y29uc3RydWN0b3IoZSx0KXt0aGlzLmxpbmVOdW1iZXI9ZSx0aGlzLmNvbHVtbj10fXdpdGgoZT10aGlzLmxpbmVOdW1iZXIsdD10aGlzLmNvbHVtbil7cmV0dXJuIGU9PT10aGlzLmxpbmVOdW1iZXImJnQ9PT10aGlzLmNvbHVtbj90aGlzOm5ldyBudChlLHQpfWRlbHRhKGU9MCx0PTApe3JldHVybiB0aGlzLndpdGgodGhpcy5saW5lTnVtYmVyK2UsdGhpcy5jb2x1bW4rdCl9ZXF1YWxzKGUpe3JldHVybiBudC5lcXVhbHModGhpcyxlKX1zdGF0aWMgZXF1YWxzKGUsdCl7cmV0dXJuIWUmJiF0fHwhIWUmJiEhdCYmZS5saW5lTnVtYmVyPT09dC5saW5lTnVtYmVyJiZlLmNvbHVtbj09PXQuY29sdW1ufWlzQmVmb3JlKGUpe3JldHVybiBudC5pc0JlZm9yZSh0aGlzLGUpfXN0YXRpYyBpc0JlZm9yZShlLHQpe3JldHVybiBlLmxpbmVOdW1iZXI8dC5saW5lTnVtYmVyfHwhKHQubGluZU51bWJlcjxlLmxpbmVOdW1iZXIpJiZlLmNvbHVtbjx0LmNvbHVtbn1pc0JlZm9yZU9yRXF1YWwoZSl7cmV0dXJuIG50LmlzQmVmb3JlT3JFcXVhbCh0aGlzLGUpfXN0YXRpYyBpc0JlZm9yZU9yRXF1YWwoZSx0KXtyZXR1cm4gZS5saW5lTnVtYmVyPHQubGluZU51bWJlcnx8ISh0LmxpbmVOdW1iZXI8ZS5saW5lTnVtYmVyKSYmZS5jb2x1bW48PXQuY29sdW1ufXN0YXRpYyBjb21wYXJlKGUsdCl7dmFyIHI9MHxlLmxpbmVOdW1iZXIsbj0wfHQubGluZU51bWJlcjtyZXR1cm4gciE9bj9yLW46KDB8ZS5jb2x1bW4pLSgwfHQuY29sdW1uKX1jbG9uZSgpe3JldHVybiBuZXcgbnQodGhpcy5saW5lTnVtYmVyLHRoaXMuY29sdW1uKX10b1N0cmluZygpe3JldHVybiIoIit0aGlzLmxpbmVOdW1iZXIrIiwiK3RoaXMuY29sdW1uKyIpIn1zdGF0aWMgbGlmdChlKXtyZXR1cm4gbmV3IG50KGUubGluZU51bWJlcixlLmNvbHVtbil9c3RhdGljIGlzSVBvc2l0aW9uKGUpe3JldHVybiBlJiYibnVtYmVyIj09dHlwZW9mIGUubGluZU51bWJlciYmIm51bWJlciI9PXR5cGVvZiBlLmNvbHVtbn19Y2xhc3MgaXR7Y29uc3RydWN0b3IoZSx0LHIsbil7cjxlfHxlPT09ciYmbjx0Pyh0aGlzLnN0YXJ0TGluZU51bWJlcj1yLHRoaXMuc3RhcnRDb2x1bW49bix0aGlzLmVuZExpbmVOdW1iZXI9ZSx0aGlzLmVuZENvbHVtbj10KToodGhpcy5zdGFydExpbmVOdW1iZXI9ZSx0aGlzLnN0YXJ0Q29sdW1uPXQsdGhpcy5lbmRMaW5lTnVtYmVyPXIsdGhpcy5lbmRDb2x1bW49bil9aXNFbXB0eSgpe3JldHVybiBpdC5pc0VtcHR5KHRoaXMpfXN0YXRpYyBpc0VtcHR5KGUpe3JldHVybiBlLnN0YXJ0TGluZU51bWJlcj09PWUuZW5kTGluZU51bWJlciYmZS5zdGFydENvbHVtbj09PWUuZW5kQ29sdW1ufWNvbnRhaW5zUG9zaXRpb24oZSl7cmV0dXJuIGl0LmNvbnRhaW5zUG9zaXRpb24odGhpcyxlKX1zdGF0aWMgY29udGFpbnNQb3NpdGlvbihlLHQpe3JldHVybiEodC5saW5lTnVtYmVyPGUuc3RhcnRMaW5lTnVtYmVyfHx0LmxpbmVOdW1iZXI+ZS5lbmRMaW5lTnVtYmVyKSYmKCEodC5saW5lTnVtYmVyPT09ZS5zdGFydExpbmVOdW1iZXImJnQuY29sdW1uPGUuc3RhcnRDb2x1bW4pJiYhKHQubGluZU51bWJlcj09PWUuZW5kTGluZU51bWJlciYmdC5jb2x1bW4+ZS5lbmRDb2x1bW4pKX1zdGF0aWMgc3RyaWN0Q29udGFpbnNQb3NpdGlvbihlLHQpe3JldHVybiEodC5saW5lTnVtYmVyPGUuc3RhcnRMaW5lTnVtYmVyfHx0LmxpbmVOdW1iZXI+ZS5lbmRMaW5lTnVtYmVyKSYmKCEodC5saW5lTnVtYmVyPT09ZS5zdGFydExpbmVOdW1iZXImJnQuY29sdW1uPD1lLnN0YXJ0Q29sdW1uKSYmISh0LmxpbmVOdW1iZXI9PT1lLmVuZExpbmVOdW1iZXImJnQuY29sdW1uPj1lLmVuZENvbHVtbikpfWNvbnRhaW5zUmFuZ2UoZSl7cmV0dXJuIGl0LmNvbnRhaW5zUmFuZ2UodGhpcyxlKX1zdGF0aWMgY29udGFpbnNSYW5nZShlLHQpe3JldHVybiEodC5zdGFydExpbmVOdW1iZXI8ZS5zdGFydExpbmVOdW1iZXJ8fHQuZW5kTGluZU51bWJlcjxlLnN0YXJ0TGluZU51bWJlcikmJighKHQuc3RhcnRMaW5lTnVtYmVyPmUuZW5kTGluZU51bWJlcnx8dC5lbmRMaW5lTnVtYmVyPmUuZW5kTGluZU51bWJlcikmJighKHQuc3RhcnRMaW5lTnVtYmVyPT09ZS5zdGFydExpbmVOdW1iZXImJnQuc3RhcnRDb2x1bW48ZS5zdGFydENvbHVtbikmJiEodC5lbmRMaW5lTnVtYmVyPT09ZS5lbmRMaW5lTnVtYmVyJiZ0LmVuZENvbHVtbj5lLmVuZENvbHVtbikpKX1zdHJpY3RDb250YWluc1JhbmdlKGUpe3JldHVybiBpdC5zdHJpY3RDb250YWluc1JhbmdlKHRoaXMsZSl9c3RhdGljIHN0cmljdENvbnRhaW5zUmFuZ2UoZSx0KXtyZXR1cm4hKHQuc3RhcnRMaW5lTnVtYmVyPGUuc3RhcnRMaW5lTnVtYmVyfHx0LmVuZExpbmVOdW1iZXI8ZS5zdGFydExpbmVOdW1iZXIpJiYoISh0LnN0YXJ0TGluZU51bWJlcj5lLmVuZExpbmVOdW1iZXJ8fHQuZW5kTGluZU51bWJlcj5lLmVuZExpbmVOdW1iZXIpJiYoISh0LnN0YXJ0TGluZU51bWJlcj09PWUuc3RhcnRMaW5lTnVtYmVyJiZ0LnN0YXJ0Q29sdW1uPD1lLnN0YXJ0Q29sdW1uKSYmISh0LmVuZExpbmVOdW1iZXI9PT1lLmVuZExpbmVOdW1iZXImJnQuZW5kQ29sdW1uPj1lLmVuZENvbHVtbikpKX1wbHVzUmFuZ2UoZSl7cmV0dXJuIGl0LnBsdXNSYW5nZSh0aGlzLGUpfXN0YXRpYyBwbHVzUmFuZ2UoZSx0KXtsZXQgcixuLGksbztyZXR1cm4gbj10LnN0YXJ0TGluZU51bWJlcjxlLnN0YXJ0TGluZU51bWJlcj8ocj10LnN0YXJ0TGluZU51bWJlcix0LnN0YXJ0Q29sdW1uKTp0LnN0YXJ0TGluZU51bWJlcj09PWUuc3RhcnRMaW5lTnVtYmVyPyhyPXQuc3RhcnRMaW5lTnVtYmVyLE1hdGgubWluKHQuc3RhcnRDb2x1bW4sZS5zdGFydENvbHVtbikpOihyPWUuc3RhcnRMaW5lTnVtYmVyLGUuc3RhcnRDb2x1bW4pLG89dC5lbmRMaW5lTnVtYmVyPmUuZW5kTGluZU51bWJlcj8oaT10LmVuZExpbmVOdW1iZXIsdC5lbmRDb2x1bW4pOnQuZW5kTGluZU51bWJlcj09PWUuZW5kTGluZU51bWJlcj8oaT10LmVuZExpbmVOdW1iZXIsTWF0aC5tYXgodC5lbmRDb2x1bW4sZS5lbmRDb2x1bW4pKTooaT1lLmVuZExpbmVOdW1iZXIsZS5lbmRDb2x1bW4pLG5ldyBpdChyLG4saSxvKX1pbnRlcnNlY3RSYW5nZXMoZSl7cmV0dXJuIGl0LmludGVyc2VjdFJhbmdlcyh0aGlzLGUpfXN0YXRpYyBpbnRlcnNlY3RSYW5nZXMoZSx0KXtsZXQgcj1lLnN0YXJ0TGluZU51bWJlcixuPWUuc3RhcnRDb2x1bW4saT1lLmVuZExpbmVOdW1iZXIsbz1lLmVuZENvbHVtbjt2YXIgZT10LnN0YXJ0TGluZU51bWJlcixhPXQuc3RhcnRDb2x1bW4scz10LmVuZExpbmVOdW1iZXIsdD10LmVuZENvbHVtbjtyZXR1cm4gcjxlPyhyPWUsbj1hKTpyPT09ZSYmKG49TWF0aC5tYXgobixhKSksaT5zPyhpPXMsbz10KTppPT09cyYmKG89TWF0aC5taW4obyx0KSkscj5pfHxyPT09aSYmbj5vP251bGw6bmV3IGl0KHIsbixpLG8pfWVxdWFsc1JhbmdlKGUpe3JldHVybiBpdC5lcXVhbHNSYW5nZSh0aGlzLGUpfXN0YXRpYyBlcXVhbHNSYW5nZShlLHQpe3JldHVybiEhZSYmISF0JiZlLnN0YXJ0TGluZU51bWJlcj09PXQuc3RhcnRMaW5lTnVtYmVyJiZlLnN0YXJ0Q29sdW1uPT09dC5zdGFydENvbHVtbiYmZS5lbmRMaW5lTnVtYmVyPT09dC5lbmRMaW5lTnVtYmVyJiZlLmVuZENvbHVtbj09PXQuZW5kQ29sdW1ufWdldEVuZFBvc2l0aW9uKCl7cmV0dXJuIGl0LmdldEVuZFBvc2l0aW9uKHRoaXMpfXN0YXRpYyBnZXRFbmRQb3NpdGlvbihlKXtyZXR1cm4gbmV3IG50KGUuZW5kTGluZU51bWJlcixlLmVuZENvbHVtbil9Z2V0U3RhcnRQb3NpdGlvbigpe3JldHVybiBpdC5nZXRTdGFydFBvc2l0aW9uKHRoaXMpfXN0YXRpYyBnZXRTdGFydFBvc2l0aW9uKGUpe3JldHVybiBuZXcgbnQoZS5zdGFydExpbmVOdW1iZXIsZS5zdGFydENvbHVtbil9dG9TdHJpbmcoKXtyZXR1cm4iWyIrdGhpcy5zdGFydExpbmVOdW1iZXIrIiwiK3RoaXMuc3RhcnRDb2x1bW4rIiAtPiAiK3RoaXMuZW5kTGluZU51bWJlcisiLCIrdGhpcy5lbmRDb2x1bW4rIl0ifXNldEVuZFBvc2l0aW9uKGUsdCl7cmV0dXJuIG5ldyBpdCh0aGlzLnN0YXJ0TGluZU51bWJlcix0aGlzLnN0YXJ0Q29sdW1uLGUsdCl9c2V0U3RhcnRQb3NpdGlvbihlLHQpe3JldHVybiBuZXcgaXQoZSx0LHRoaXMuZW5kTGluZU51bWJlcix0aGlzLmVuZENvbHVtbil9Y29sbGFwc2VUb1N0YXJ0KCl7cmV0dXJuIGl0LmNvbGxhcHNlVG9TdGFydCh0aGlzKX1zdGF0aWMgY29sbGFwc2VUb1N0YXJ0KGUpe3JldHVybiBuZXcgaXQoZS5zdGFydExpbmVOdW1iZXIsZS5zdGFydENvbHVtbixlLnN0YXJ0TGluZU51bWJlcixlLnN0YXJ0Q29sdW1uKX1zdGF0aWMgZnJvbVBvc2l0aW9ucyhlLHQ9ZSl7cmV0dXJuIG5ldyBpdChlLmxpbmVOdW1iZXIsZS5jb2x1bW4sdC5saW5lTnVtYmVyLHQuY29sdW1uKX1zdGF0aWMgbGlmdChlKXtyZXR1cm4gZT9uZXcgaXQoZS5zdGFydExpbmVOdW1iZXIsZS5zdGFydENvbHVtbixlLmVuZExpbmVOdW1iZXIsZS5lbmRDb2x1bW4pOm51bGx9c3RhdGljIGlzSVJhbmdlKGUpe3JldHVybiBlJiYibnVtYmVyIj09dHlwZW9mIGUuc3RhcnRMaW5lTnVtYmVyJiYibnVtYmVyIj09dHlwZW9mIGUuc3RhcnRDb2x1bW4mJiJudW1iZXIiPT10eXBlb2YgZS5lbmRMaW5lTnVtYmVyJiYibnVtYmVyIj09dHlwZW9mIGUuZW5kQ29sdW1ufXN0YXRpYyBhcmVJbnRlcnNlY3RpbmdPclRvdWNoaW5nKGUsdCl7cmV0dXJuIShlLmVuZExpbmVOdW1iZXI8dC5zdGFydExpbmVOdW1iZXJ8fGUuZW5kTGluZU51bWJlcj09PXQuc3RhcnRMaW5lTnVtYmVyJiZlLmVuZENvbHVtbjx0LnN0YXJ0Q29sdW1uKSYmISh0LmVuZExpbmVOdW1iZXI8ZS5zdGFydExpbmVOdW1iZXJ8fHQuZW5kTGluZU51bWJlcj09PWUuc3RhcnRMaW5lTnVtYmVyJiZ0LmVuZENvbHVtbjxlLnN0YXJ0Q29sdW1uKX1zdGF0aWMgYXJlSW50ZXJzZWN0aW5nKGUsdCl7cmV0dXJuIShlLmVuZExpbmVOdW1iZXI8dC5zdGFydExpbmVOdW1iZXJ8fGUuZW5kTGluZU51bWJlcj09PXQuc3RhcnRMaW5lTnVtYmVyJiZlLmVuZENvbHVtbjw9dC5zdGFydENvbHVtbikmJiEodC5lbmRMaW5lTnVtYmVyPGUuc3RhcnRMaW5lTnVtYmVyfHx0LmVuZExpbmVOdW1iZXI9PT1lLnN0YXJ0TGluZU51bWJlciYmdC5lbmRDb2x1bW48PWUuc3RhcnRDb2x1bW4pfXN0YXRpYyBjb21wYXJlUmFuZ2VzVXNpbmdTdGFydHMoZSx0KXt2YXIgcixuLGksbyxhLHM7cmV0dXJuIGUmJnQ/KHI9MHxlLnN0YXJ0TGluZU51bWJlcik9PShuPTB8dC5zdGFydExpbmVOdW1iZXIpPyhpPTB8ZS5zdGFydENvbHVtbik9PShvPTB8dC5zdGFydENvbHVtbik/KGE9MHxlLmVuZExpbmVOdW1iZXIpIT0ocz0wfHQuZW5kTGluZU51bWJlcik/YS1zOigwfGUuZW5kQ29sdW1uKS0oMHx0LmVuZENvbHVtbik6aS1vOnItbjooZT8xOjApLSh0PzE6MCl9c3RhdGljIGNvbXBhcmVSYW5nZXNVc2luZ0VuZHMoZSx0KXtyZXR1cm4gZS5lbmRMaW5lTnVtYmVyPT09dC5lbmRMaW5lTnVtYmVyP2UuZW5kQ29sdW1uPT09dC5lbmRDb2x1bW4/ZS5zdGFydExpbmVOdW1iZXI9PT10LnN0YXJ0TGluZU51bWJlcj9lLnN0YXJ0Q29sdW1uLXQuc3RhcnRDb2x1bW46ZS5zdGFydExpbmVOdW1iZXItdC5zdGFydExpbmVOdW1iZXI6ZS5lbmRDb2x1bW4tdC5lbmRDb2x1bW46ZS5lbmRMaW5lTnVtYmVyLXQuZW5kTGluZU51bWJlcn1zdGF0aWMgc3BhbnNNdWx0aXBsZUxpbmVzKGUpe3JldHVybiBlLmVuZExpbmVOdW1iZXI+ZS5zdGFydExpbmVOdW1iZXJ9dG9KU09OKCl7cmV0dXJuIHRoaXN9fWZ1bmN0aW9uIG90KGUsdCxyLG4pe2NvbnN0IGk9bmV3IHhlKGUsdCxyKTtyZXR1cm4gaS5Db21wdXRlRGlmZihuKX1jbGFzcyBhdHtjb25zdHJ1Y3RvcihyKXtjb25zdCBuPVtdLGk9W107Zm9yKGxldCBlPTAsdD1yLmxlbmd0aDtlPHQ7ZSsrKW5bZV09aHQocltlXSwxKSxpW2VdPWZ0KHJbZV0sMSk7dGhpcy5saW5lcz1yLHRoaXMuX3N0YXJ0Q29sdW1ucz1uLHRoaXMuX2VuZENvbHVtbnM9aX1nZXRFbGVtZW50cygpe2NvbnN0IHI9W107Zm9yKGxldCBlPTAsdD10aGlzLmxpbmVzLmxlbmd0aDtlPHQ7ZSsrKXJbZV09dGhpcy5saW5lc1tlXS5zdWJzdHJpbmcodGhpcy5fc3RhcnRDb2x1bW5zW2VdLTEsdGhpcy5fZW5kQ29sdW1uc1tlXS0xKTtyZXR1cm4gcn1nZXRTdHJpY3RFbGVtZW50KGUpe3JldHVybiB0aGlzLmxpbmVzW2VdfWdldFN0YXJ0TGluZU51bWJlcihlKXtyZXR1cm4gZSsxfWdldEVuZExpbmVOdW1iZXIoZSl7cmV0dXJuIGUrMX1jcmVhdGVDaGFyU2VxdWVuY2UoZSxyLG4pe2NvbnN0IGk9W10sbz1bXSxhPVtdO2xldCBzPTA7Zm9yKGxldCB0PXI7dDw9bjt0Kyspe2NvbnN0IHU9dGhpcy5saW5lc1t0XTt2YXIgbD1lP3RoaXMuX3N0YXJ0Q29sdW1uc1t0XToxLGM9ZT90aGlzLl9lbmRDb2x1bW5zW3RdOnUubGVuZ3RoKzE7Zm9yKGxldCBlPWw7ZTxjO2UrKylpW3NdPXUuY2hhckNvZGVBdChlLTEpLG9bc109dCsxLGFbc109ZSxzKyt9cmV0dXJuIG5ldyBzdChpLG8sYSl9fWNsYXNzIHN0e2NvbnN0cnVjdG9yKGUsdCxyKXt0aGlzLl9jaGFyQ29kZXM9ZSx0aGlzLl9saW5lTnVtYmVycz10LHRoaXMuX2NvbHVtbnM9cn1nZXRFbGVtZW50cygpe3JldHVybiB0aGlzLl9jaGFyQ29kZXN9Z2V0U3RhcnRMaW5lTnVtYmVyKGUpe3JldHVybiB0aGlzLl9saW5lTnVtYmVyc1tlXX1nZXRTdGFydENvbHVtbihlKXtyZXR1cm4gdGhpcy5fY29sdW1uc1tlXX1nZXRFbmRMaW5lTnVtYmVyKGUpe3JldHVybiB0aGlzLl9saW5lTnVtYmVyc1tlXX1nZXRFbmRDb2x1bW4oZSl7cmV0dXJuIHRoaXMuX2NvbHVtbnNbZV0rMX19Y2xhc3MgbHR7Y29uc3RydWN0b3IoZSx0LHIsbixpLG8sYSxzKXt0aGlzLm9yaWdpbmFsU3RhcnRMaW5lTnVtYmVyPWUsdGhpcy5vcmlnaW5hbFN0YXJ0Q29sdW1uPXQsdGhpcy5vcmlnaW5hbEVuZExpbmVOdW1iZXI9cix0aGlzLm9yaWdpbmFsRW5kQ29sdW1uPW4sdGhpcy5tb2RpZmllZFN0YXJ0TGluZU51bWJlcj1pLHRoaXMubW9kaWZpZWRTdGFydENvbHVtbj1vLHRoaXMubW9kaWZpZWRFbmRMaW5lTnVtYmVyPWEsdGhpcy5tb2RpZmllZEVuZENvbHVtbj1zfXN0YXRpYyBjcmVhdGVGcm9tRGlmZkNoYW5nZShlLHQscil7bGV0IG4saSxvLGEscyxsLGMsdTtyZXR1cm4gYT0wPT09ZS5vcmlnaW5hbExlbmd0aD8obj0wLGk9MCxvPTApOihuPXQuZ2V0U3RhcnRMaW5lTnVtYmVyKGUub3JpZ2luYWxTdGFydCksaT10LmdldFN0YXJ0Q29sdW1uKGUub3JpZ2luYWxTdGFydCksbz10LmdldEVuZExpbmVOdW1iZXIoZS5vcmlnaW5hbFN0YXJ0K2Uub3JpZ2luYWxMZW5ndGgtMSksdC5nZXRFbmRDb2x1bW4oZS5vcmlnaW5hbFN0YXJ0K2Uub3JpZ2luYWxMZW5ndGgtMSkpLHU9MD09PWUubW9kaWZpZWRMZW5ndGg/KHM9MCxsPTAsYz0wKToocz1yLmdldFN0YXJ0TGluZU51bWJlcihlLm1vZGlmaWVkU3RhcnQpLGw9ci5nZXRTdGFydENvbHVtbihlLm1vZGlmaWVkU3RhcnQpLGM9ci5nZXRFbmRMaW5lTnVtYmVyKGUubW9kaWZpZWRTdGFydCtlLm1vZGlmaWVkTGVuZ3RoLTEpLHIuZ2V0RW5kQ29sdW1uKGUubW9kaWZpZWRTdGFydCtlLm1vZGlmaWVkTGVuZ3RoLTEpKSxuZXcgbHQobixpLG8sYSxzLGwsYyx1KX19Y2xhc3MgY3R7Y29uc3RydWN0b3IoZSx0LHIsbixpKXt0aGlzLm9yaWdpbmFsU3RhcnRMaW5lTnVtYmVyPWUsdGhpcy5vcmlnaW5hbEVuZExpbmVOdW1iZXI9dCx0aGlzLm1vZGlmaWVkU3RhcnRMaW5lTnVtYmVyPXIsdGhpcy5tb2RpZmllZEVuZExpbmVOdW1iZXI9bix0aGlzLmNoYXJDaGFuZ2VzPWl9c3RhdGljIGNyZWF0ZUZyb21EaWZmUmVzdWx0KGUsdCxuLGksbyx1LGgpe2xldCByLGEscyxsLGM9dm9pZCAwO2lmKGE9MD09PXQub3JpZ2luYWxMZW5ndGg/KHI9bi5nZXRTdGFydExpbmVOdW1iZXIodC5vcmlnaW5hbFN0YXJ0KS0xLDApOihyPW4uZ2V0U3RhcnRMaW5lTnVtYmVyKHQub3JpZ2luYWxTdGFydCksbi5nZXRFbmRMaW5lTnVtYmVyKHQub3JpZ2luYWxTdGFydCt0Lm9yaWdpbmFsTGVuZ3RoLTEpKSxsPTA9PT10Lm1vZGlmaWVkTGVuZ3RoPyhzPWkuZ2V0U3RhcnRMaW5lTnVtYmVyKHQubW9kaWZpZWRTdGFydCktMSwwKToocz1pLmdldFN0YXJ0TGluZU51bWJlcih0Lm1vZGlmaWVkU3RhcnQpLGkuZ2V0RW5kTGluZU51bWJlcih0Lm1vZGlmaWVkU3RhcnQrdC5tb2RpZmllZExlbmd0aC0xKSksdSYmMDx0Lm9yaWdpbmFsTGVuZ3RoJiZ0Lm9yaWdpbmFsTGVuZ3RoPDIwJiYwPHQubW9kaWZpZWRMZW5ndGgmJnQubW9kaWZpZWRMZW5ndGg8MjAmJm8oKSl7dmFyIGY9bi5jcmVhdGVDaGFyU2VxdWVuY2UoZSx0Lm9yaWdpbmFsU3RhcnQsdC5vcmlnaW5hbFN0YXJ0K3Qub3JpZ2luYWxMZW5ndGgtMSksZD1pLmNyZWF0ZUNoYXJTZXF1ZW5jZShlLHQubW9kaWZpZWRTdGFydCx0Lm1vZGlmaWVkU3RhcnQrdC5tb2RpZmllZExlbmd0aC0xKTtsZXQgcj1vdChmLGQsbywhMCkuY2hhbmdlcztoJiYocj1mdW5jdGlvbihyKXtpZihyLmxlbmd0aDw9MSlyZXR1cm4gcjtjb25zdCBuPVtyWzBdXTtsZXQgaT1uWzBdO2ZvcihsZXQgZT0xLHQ9ci5sZW5ndGg7ZTx0O2UrKyl7dmFyIG89cltlXSxhPW8ub3JpZ2luYWxTdGFydC0oaS5vcmlnaW5hbFN0YXJ0K2kub3JpZ2luYWxMZW5ndGgpLHM9by5tb2RpZmllZFN0YXJ0LShpLm1vZGlmaWVkU3RhcnQraS5tb2RpZmllZExlbmd0aCk7TWF0aC5taW4oYSxzKTwzPyhpLm9yaWdpbmFsTGVuZ3RoPW8ub3JpZ2luYWxTdGFydCtvLm9yaWdpbmFsTGVuZ3RoLWkub3JpZ2luYWxTdGFydCxpLm1vZGlmaWVkTGVuZ3RoPW8ubW9kaWZpZWRTdGFydCtvLm1vZGlmaWVkTGVuZ3RoLWkubW9kaWZpZWRTdGFydCk6KG4ucHVzaChvKSxpPW8pfXJldHVybiBufShyKSksYz1bXTtmb3IobGV0IGU9MCx0PXIubGVuZ3RoO2U8dDtlKyspYy5wdXNoKGx0LmNyZWF0ZUZyb21EaWZmQ2hhbmdlKHJbZV0sZixkKSl9cmV0dXJuIG5ldyBjdChyLGEscyxsLGMpfX1jbGFzcyB1dHtjb25zdHJ1Y3RvcihlLHQscil7dGhpcy5zaG91bGRDb21wdXRlQ2hhckNoYW5nZXM9ci5zaG91bGRDb21wdXRlQ2hhckNoYW5nZXMsdGhpcy5zaG91bGRQb3N0UHJvY2Vzc0NoYXJDaGFuZ2VzPXIuc2hvdWxkUG9zdFByb2Nlc3NDaGFyQ2hhbmdlcyx0aGlzLnNob3VsZElnbm9yZVRyaW1XaGl0ZXNwYWNlPXIuc2hvdWxkSWdub3JlVHJpbVdoaXRlc3BhY2UsdGhpcy5zaG91bGRNYWtlUHJldHR5RGlmZj1yLnNob3VsZE1ha2VQcmV0dHlEaWZmLHRoaXMub3JpZ2luYWxMaW5lcz1lLHRoaXMubW9kaWZpZWRMaW5lcz10LHRoaXMub3JpZ2luYWw9bmV3IGF0KGUpLHRoaXMubW9kaWZpZWQ9bmV3IGF0KHQpLHRoaXMuY29udGludWVMaW5lRGlmZj1kdChyLm1heENvbXB1dGF0aW9uVGltZSksdGhpcy5jb250aW51ZUNoYXJEaWZmPWR0KDA9PT1yLm1heENvbXB1dGF0aW9uVGltZT8wOk1hdGgubWluKHIubWF4Q29tcHV0YXRpb25UaW1lLDVlMykpfWNvbXB1dGVEaWZmKCl7aWYoMT09PXRoaXMub3JpZ2luYWwubGluZXMubGVuZ3RoJiYwPT09dGhpcy5vcmlnaW5hbC5saW5lc1swXS5sZW5ndGgpcmV0dXJuIDE9PT10aGlzLm1vZGlmaWVkLmxpbmVzLmxlbmd0aCYmMD09PXRoaXMubW9kaWZpZWQubGluZXNbMF0ubGVuZ3RoP3txdWl0RWFybHk6ITEsY2hhbmdlczpbXX06e3F1aXRFYXJseTohMSxjaGFuZ2VzOlt7b3JpZ2luYWxTdGFydExpbmVOdW1iZXI6MSxvcmlnaW5hbEVuZExpbmVOdW1iZXI6MSxtb2RpZmllZFN0YXJ0TGluZU51bWJlcjoxLG1vZGlmaWVkRW5kTGluZU51bWJlcjp0aGlzLm1vZGlmaWVkLmxpbmVzLmxlbmd0aCxjaGFyQ2hhbmdlczpbe21vZGlmaWVkRW5kQ29sdW1uOjAsbW9kaWZpZWRFbmRMaW5lTnVtYmVyOjAsbW9kaWZpZWRTdGFydENvbHVtbjowLG1vZGlmaWVkU3RhcnRMaW5lTnVtYmVyOjAsb3JpZ2luYWxFbmRDb2x1bW46MCxvcmlnaW5hbEVuZExpbmVOdW1iZXI6MCxvcmlnaW5hbFN0YXJ0Q29sdW1uOjAsb3JpZ2luYWxTdGFydExpbmVOdW1iZXI6MH1dfV19O2lmKDE9PT10aGlzLm1vZGlmaWVkLmxpbmVzLmxlbmd0aCYmMD09PXRoaXMubW9kaWZpZWQubGluZXNbMF0ubGVuZ3RoKXJldHVybntxdWl0RWFybHk6ITEsY2hhbmdlczpbe29yaWdpbmFsU3RhcnRMaW5lTnVtYmVyOjEsb3JpZ2luYWxFbmRMaW5lTnVtYmVyOnRoaXMub3JpZ2luYWwubGluZXMubGVuZ3RoLG1vZGlmaWVkU3RhcnRMaW5lTnVtYmVyOjEsbW9kaWZpZWRFbmRMaW5lTnVtYmVyOjEsY2hhckNoYW5nZXM6W3ttb2RpZmllZEVuZENvbHVtbjowLG1vZGlmaWVkRW5kTGluZU51bWJlcjowLG1vZGlmaWVkU3RhcnRDb2x1bW46MCxtb2RpZmllZFN0YXJ0TGluZU51bWJlcjowLG9yaWdpbmFsRW5kQ29sdW1uOjAsb3JpZ2luYWxFbmRMaW5lTnVtYmVyOjAsb3JpZ2luYWxTdGFydENvbHVtbjowLG9yaWdpbmFsU3RhcnRMaW5lTnVtYmVyOjB9XX1dfTt2YXIgZT1vdCh0aGlzLm9yaWdpbmFsLHRoaXMubW9kaWZpZWQsdGhpcy5jb250aW51ZUxpbmVEaWZmLHRoaXMuc2hvdWxkTWFrZVByZXR0eURpZmYpLHI9ZS5jaGFuZ2VzLGU9ZS5xdWl0RWFybHk7aWYodGhpcy5zaG91bGRJZ25vcmVUcmltV2hpdGVzcGFjZSl7Y29uc3QgZD1bXTtmb3IobGV0IGU9MCx0PXIubGVuZ3RoO2U8dDtlKyspZC5wdXNoKGN0LmNyZWF0ZUZyb21EaWZmUmVzdWx0KHRoaXMuc2hvdWxkSWdub3JlVHJpbVdoaXRlc3BhY2UscltlXSx0aGlzLm9yaWdpbmFsLHRoaXMubW9kaWZpZWQsdGhpcy5jb250aW51ZUNoYXJEaWZmLHRoaXMuc2hvdWxkQ29tcHV0ZUNoYXJDaGFuZ2VzLHRoaXMuc2hvdWxkUG9zdFByb2Nlc3NDaGFyQ2hhbmdlcykpO3JldHVybntxdWl0RWFybHk6ZSxjaGFuZ2VzOmR9fWNvbnN0IG49W107bGV0IGk9MCxvPTA7Zm9yKGxldCBlPS0xLHQ9ci5sZW5ndGg7ZTx0O2UrKyl7Zm9yKHZhciBhPWUrMTx0P3JbZSsxXTpudWxsLGg9YT9hLm9yaWdpbmFsU3RhcnQ6dGhpcy5vcmlnaW5hbExpbmVzLmxlbmd0aCxmPWE/YS5tb2RpZmllZFN0YXJ0OnRoaXMubW9kaWZpZWRMaW5lcy5sZW5ndGg7aTxoJiZvPGY7KXtjb25zdCBjPXRoaXMub3JpZ2luYWxMaW5lc1tpXSx1PXRoaXMubW9kaWZpZWRMaW5lc1tvXTtpZihjIT09dSl7e2xldCBlPWh0KGMsMSksdD1odCh1LDEpO2Zvcig7MTxlJiYxPHQ7KXtpZihjLmNoYXJDb2RlQXQoZS0yKSE9PXUuY2hhckNvZGVBdCh0LTIpKWJyZWFrO2UtLSx0LS19KDE8ZXx8MTx0KSYmdGhpcy5fcHVzaFRyaW1XaGl0ZXNwYWNlQ2hhckNoYW5nZShuLGkrMSwxLGUsbysxLDEsdCl9e2xldCBlPWZ0KGMsMSksdD1mdCh1LDEpO2Zvcih2YXIgcz1jLmxlbmd0aCsxLGw9dS5sZW5ndGgrMTtlPHMmJnQ8bDspe2lmKGMuY2hhckNvZGVBdChlLTEpIT09Yy5jaGFyQ29kZUF0KHQtMSkpYnJlYWs7ZSsrLHQrK30oZTxzfHx0PGwpJiZ0aGlzLl9wdXNoVHJpbVdoaXRlc3BhY2VDaGFyQ2hhbmdlKG4saSsxLGUscyxvKzEsdCxsKX19aSsrLG8rK31hJiYobi5wdXNoKGN0LmNyZWF0ZUZyb21EaWZmUmVzdWx0KHRoaXMuc2hvdWxkSWdub3JlVHJpbVdoaXRlc3BhY2UsYSx0aGlzLm9yaWdpbmFsLHRoaXMubW9kaWZpZWQsdGhpcy5jb250aW51ZUNoYXJEaWZmLHRoaXMuc2hvdWxkQ29tcHV0ZUNoYXJDaGFuZ2VzLHRoaXMuc2hvdWxkUG9zdFByb2Nlc3NDaGFyQ2hhbmdlcykpLGkrPWEub3JpZ2luYWxMZW5ndGgsbys9YS5tb2RpZmllZExlbmd0aCl9cmV0dXJue3F1aXRFYXJseTplLGNoYW5nZXM6bn19X3B1c2hUcmltV2hpdGVzcGFjZUNoYXJDaGFuZ2UodCxyLG4saSxvLGEscyl7aWYoIXRoaXMuX21lcmdlVHJpbVdoaXRlc3BhY2VDaGFyQ2hhbmdlKHQscixuLGksbyxhLHMpKXtsZXQgZT12b2lkIDA7dGhpcy5zaG91bGRDb21wdXRlQ2hhckNoYW5nZXMmJihlPVtuZXcgbHQocixuLHIsaSxvLGEsbyxzKV0pLHQucHVzaChuZXcgY3QocixyLG8sbyxlKSl9fV9tZXJnZVRyaW1XaGl0ZXNwYWNlQ2hhckNoYW5nZShlLHQscixuLGksbyxhKXt2YXIgcz1lLmxlbmd0aDtpZigwPT09cylyZXR1cm4hMTtjb25zdCBsPWVbcy0xXTtyZXR1cm4gMCE9PWwub3JpZ2luYWxFbmRMaW5lTnVtYmVyJiYwIT09bC5tb2RpZmllZEVuZExpbmVOdW1iZXImJihsLm9yaWdpbmFsRW5kTGluZU51bWJlcisxPT09dCYmbC5tb2RpZmllZEVuZExpbmVOdW1iZXIrMT09PWkmJihsLm9yaWdpbmFsRW5kTGluZU51bWJlcj10LGwubW9kaWZpZWRFbmRMaW5lTnVtYmVyPWksdGhpcy5zaG91bGRDb21wdXRlQ2hhckNoYW5nZXMmJmwuY2hhckNoYW5nZXMmJmwuY2hhckNoYW5nZXMucHVzaChuZXcgbHQodCxyLHQsbixpLG8saSxhKSksITApKX19ZnVuY3Rpb24gaHQoZSx0KXtlPWZ1bmN0aW9uKHIpe2ZvcihsZXQgZT0wLHQ9ci5sZW5ndGg7ZTx0O2UrKyl7dmFyIG49ci5jaGFyQ29kZUF0KGUpO2lmKDMyIT09biYmOSE9PW4pcmV0dXJuIGV9cmV0dXJuLTF9KGUpO3JldHVybi0xPT09ZT90OmUrMX1mdW5jdGlvbiBmdChlLHQpe2U9ZnVuY3Rpb24odCxyPXQubGVuZ3RoLTEpe2ZvcihsZXQgZT1yOzA8PWU7ZS0tKXt2YXIgbj10LmNoYXJDb2RlQXQoZSk7aWYoMzIhPT1uJiY5IT09bilyZXR1cm4gZX1yZXR1cm4tMX0oZSk7cmV0dXJuLTE9PT1lP3Q6ZSsyfWZ1bmN0aW9uIGR0KGUpe2lmKDA9PT1lKXJldHVybigpPT4hMDtjb25zdCB0PURhdGUubm93KCk7cmV0dXJuKCk9PkRhdGUubm93KCktdDxlfWZ1bmN0aW9uIG10KGUpe3JldHVybiBlPDA/MDoyNTU8ZT8yNTU6MHxlfWZ1bmN0aW9uIGd0KGUpe3JldHVybiBlPDA/MDo0Mjk0OTY3Mjk1PGU/NDI5NDk2NzI5NTowfGV9Y2xhc3MgcHR7Y29uc3RydWN0b3IoZSl7dGhpcy52YWx1ZXM9ZSx0aGlzLnByZWZpeFN1bT1uZXcgVWludDMyQXJyYXkoZS5sZW5ndGgpLHRoaXMucHJlZml4U3VtVmFsaWRJbmRleD1uZXcgSW50MzJBcnJheSgxKSx0aGlzLnByZWZpeFN1bVZhbGlkSW5kZXhbMF09LTF9aW5zZXJ0VmFsdWVzKGUsdCl7ZT1ndChlKTtjb25zdCByPXRoaXMudmFsdWVzLG49dGhpcy5wcmVmaXhTdW07dmFyIGk9dC5sZW5ndGg7cmV0dXJuIDAhPT1pJiYodGhpcy52YWx1ZXM9bmV3IFVpbnQzMkFycmF5KHIubGVuZ3RoK2kpLHRoaXMudmFsdWVzLnNldChyLnN1YmFycmF5KDAsZSksMCksdGhpcy52YWx1ZXMuc2V0KHIuc3ViYXJyYXkoZSksZStpKSx0aGlzLnZhbHVlcy5zZXQodCxlKSxlLTE8dGhpcy5wcmVmaXhTdW1WYWxpZEluZGV4WzBdJiYodGhpcy5wcmVmaXhTdW1WYWxpZEluZGV4WzBdPWUtMSksdGhpcy5wcmVmaXhTdW09bmV3IFVpbnQzMkFycmF5KHRoaXMudmFsdWVzLmxlbmd0aCksMDw9dGhpcy5wcmVmaXhTdW1WYWxpZEluZGV4WzBdJiZ0aGlzLnByZWZpeFN1bS5zZXQobi5zdWJhcnJheSgwLHRoaXMucHJlZml4U3VtVmFsaWRJbmRleFswXSsxKSksITApfXNldFZhbHVlKGUsdCl7cmV0dXJuIGU9Z3QoZSksdD1ndCh0KSx0aGlzLnZhbHVlc1tlXSE9PXQmJih0aGlzLnZhbHVlc1tlXT10LGUtMTx0aGlzLnByZWZpeFN1bVZhbGlkSW5kZXhbMF0mJih0aGlzLnByZWZpeFN1bVZhbGlkSW5kZXhbMF09ZS0xKSwhMCl9cmVtb3ZlVmFsdWVzKGUsdCl7ZT1ndChlKSx0PWd0KHQpO2NvbnN0IHI9dGhpcy52YWx1ZXMsbj10aGlzLnByZWZpeFN1bTtpZihlPj1yLmxlbmd0aClyZXR1cm4hMTt2YXIgaT1yLmxlbmd0aC1lO3JldHVybiAwIT09KHQ9aTw9dD9pOnQpJiYodGhpcy52YWx1ZXM9bmV3IFVpbnQzMkFycmF5KHIubGVuZ3RoLXQpLHRoaXMudmFsdWVzLnNldChyLnN1YmFycmF5KDAsZSksMCksdGhpcy52YWx1ZXMuc2V0KHIuc3ViYXJyYXkoZSt0KSxlKSx0aGlzLnByZWZpeFN1bT1uZXcgVWludDMyQXJyYXkodGhpcy52YWx1ZXMubGVuZ3RoKSxlLTE8dGhpcy5wcmVmaXhTdW1WYWxpZEluZGV4WzBdJiYodGhpcy5wcmVmaXhTdW1WYWxpZEluZGV4WzBdPWUtMSksMDw9dGhpcy5wcmVmaXhTdW1WYWxpZEluZGV4WzBdJiZ0aGlzLnByZWZpeFN1bS5zZXQobi5zdWJhcnJheSgwLHRoaXMucHJlZml4U3VtVmFsaWRJbmRleFswXSsxKSksITApfWdldFRvdGFsU3VtKCl7cmV0dXJuIDA9PT10aGlzLnZhbHVlcy5sZW5ndGg/MDp0aGlzLl9nZXRQcmVmaXhTdW0odGhpcy52YWx1ZXMubGVuZ3RoLTEpfWdldFByZWZpeFN1bShlKXtyZXR1cm4gZTwwPzA6KGU9Z3QoZSksdGhpcy5fZ2V0UHJlZml4U3VtKGUpKX1fZ2V0UHJlZml4U3VtKHQpe2lmKHQ8PXRoaXMucHJlZml4U3VtVmFsaWRJbmRleFswXSlyZXR1cm4gdGhpcy5wcmVmaXhTdW1bdF07bGV0IHI9dGhpcy5wcmVmaXhTdW1WYWxpZEluZGV4WzBdKzE7MD09PXImJih0aGlzLnByZWZpeFN1bVswXT10aGlzLnZhbHVlc1swXSxyKyspLHQ+PXRoaXMudmFsdWVzLmxlbmd0aCYmKHQ9dGhpcy52YWx1ZXMubGVuZ3RoLTEpO2ZvcihsZXQgZT1yO2U8PXQ7ZSsrKXRoaXMucHJlZml4U3VtW2VdPXRoaXMucHJlZml4U3VtW2UtMV0rdGhpcy52YWx1ZXNbZV07cmV0dXJuIHRoaXMucHJlZml4U3VtVmFsaWRJbmRleFswXT1NYXRoLm1heCh0aGlzLnByZWZpeFN1bVZhbGlkSW5kZXhbMF0sdCksdGhpcy5wcmVmaXhTdW1bdF19Z2V0SW5kZXhPZihlKXtlPU1hdGguZmxvb3IoZSksdGhpcy5nZXRUb3RhbFN1bSgpO2xldCB0PTAscj10aGlzLnZhbHVlcy5sZW5ndGgtMSxuPTA7dmFyIGk7bGV0IG89MDtmb3IoO3Q8PXI7KWlmKG49dCsoci10KS8yfDAsaT10aGlzLnByZWZpeFN1bVtuXSxlPChvPWktdGhpcy52YWx1ZXNbbl0pKXI9bi0xO2Vsc2V7aWYoIShpPD1lKSlicmVhazt0PW4rMX1yZXR1cm4gbmV3IGJ0KG4sZS1vKX19Y2xhc3MgYnR7Y29uc3RydWN0b3IoZSx0KXt0aGlzLmluZGV4PWUsdGhpcy5yZW1haW5kZXI9dCx0aGlzLl9wcmVmaXhTdW1JbmRleE9mUmVzdWx0QnJhbmQ9dm9pZCAwLHRoaXMuaW5kZXg9ZSx0aGlzLnJlbWFpbmRlcj10fX1jb25zdCB2dD1mdW5jdGlvbihlPSIiKXtsZXQgdD0iKC0/XFxkKlxcLlxcZFxcdyopfChbXiI7Zm9yKGNvbnN0IHIgb2YiYH4hQCMkJV4mKigpLT0rW3tdfVxcfDs6J1wiLC48Pi8/IikwPD1lLmluZGV4T2Yocil8fCh0Kz0iXFwiK3IpO3JldHVybiB0Kz0iXFxzXSspIixuZXcgUmVnRXhwKHQsImciKX0oKTtjb25zdCB5dD17bWF4TGVuOjFlMyx3aW5kb3dTaXplOjE1LHRpbWVCdWRnZXQ6MTUwfTtmdW5jdGlvbiBDdCh0LHIsbixpLG89eXQpe2lmKG4ubGVuZ3RoPm8ubWF4TGVuKXtsZXQgZT10LW8ubWF4TGVuLzI7cmV0dXJuIGU8MD9lPTA6aSs9ZSxDdCh0LHIsbj1uLnN1YnN0cmluZyhlLHQrby5tYXhMZW4vMiksaSxvKX12YXIgaD1EYXRlLm5vdygpLGE9dC0xLWk7bGV0IHM9LTEsbD1udWxsO2ZvcihsZXQgZT0xOyEoRGF0ZS5ub3coKS1oPj1vLnRpbWVCdWRnZXQpO2UrKyl7dmFyIGM9YS1vLndpbmRvd1NpemUqZSx1PShyLmxhc3RJbmRleD1NYXRoLm1heCgwLGMpLGZ1bmN0aW9uKGUsdCxyLG4pe3ZhciBpO2Zvcig7aT1lLmV4ZWModCk7KXt2YXIgbz1pLmluZGV4fHwwO2lmKG88PXImJmUubGFzdEluZGV4Pj1yKXJldHVybiBpO2lmKDA8biYmbjxvKXJldHVybiBudWxsfXJldHVybiBudWxsfShyLG4sYSxzKSk7aWYoIXUmJmwpYnJlYWs7aWYobD11LGM8PTApYnJlYWs7cz1jfXJldHVybiBsPyh0PXt3b3JkOmxbMF0sc3RhcnRDb2x1bW46aSsxK2wuaW5kZXgsZW5kQ29sdW1uOmkrMStsLmluZGV4K2xbMF0ubGVuZ3RofSxyLmxhc3RJbmRleD0wLHQpOm51bGx9Y2xhc3Mgd3R7Y29uc3RydWN0b3IoZSl7ZT1tdChlKTt0aGlzLl9kZWZhdWx0VmFsdWU9ZSx0aGlzLl9hc2NpaU1hcD13dC5fY3JlYXRlQXNjaWlNYXAoZSksdGhpcy5fbWFwPW5ldyBNYXB9c3RhdGljIF9jcmVhdGVBc2NpaU1hcCh0KXtjb25zdCByPW5ldyBVaW50OEFycmF5KDI1Nik7Zm9yKGxldCBlPTA7ZTwyNTY7ZSsrKXJbZV09dDtyZXR1cm4gcn1zZXQoZSx0KXt0PW10KHQpOzA8PWUmJmU8MjU2P3RoaXMuX2FzY2lpTWFwW2VdPXQ6dGhpcy5fbWFwLnNldChlLHQpfWdldChlKXtyZXR1cm4gMDw9ZSYmZTwyNTY/dGhpcy5fYXNjaWlNYXBbZV06dGhpcy5fbWFwLmdldChlKXx8dGhpcy5fZGVmYXVsdFZhbHVlfX1jbGFzcyBfdHtjb25zdHJ1Y3RvcihyLG4saSl7Y29uc3Qgbz1uZXcgVWludDhBcnJheShyKm4pO2ZvcihsZXQgZT0wLHQ9cipuO2U8dDtlKyspb1tlXT1pO3RoaXMuX2RhdGE9byx0aGlzLnJvd3M9cix0aGlzLmNvbHM9bn1nZXQoZSx0KXtyZXR1cm4gdGhpcy5fZGF0YVtlKnRoaXMuY29scyt0XX1zZXQoZSx0LHIpe3RoaXMuX2RhdGFbZSp0aGlzLmNvbHMrdF09cn19Y2xhc3MgU3R7Y29uc3RydWN0b3Iocil7bGV0IG49MCxpPTA7Zm9yKGxldCBlPTAsdD1yLmxlbmd0aDtlPHQ7ZSsrKXt2YXJbbyxhLHNdPXJbZV07YT5uJiYobj1hKSxzPihpPW8+aT9vOmkpJiYoaT1zKX1uKyssaSsrO2NvbnN0IGw9bmV3IF90KGksbiwwKTtmb3IobGV0IGU9MCx0PXIubGVuZ3RoO2U8dDtlKyspe3ZhcltjLHUsaF09cltlXTtsLnNldChjLHUsaCl9dGhpcy5fc3RhdGVzPWwsdGhpcy5fbWF4Q2hhckNvZGU9bn1uZXh0U3RhdGUoZSx0KXtyZXR1cm4gdDwwfHx0Pj10aGlzLl9tYXhDaGFyQ29kZT8wOnRoaXMuX3N0YXRlcy5nZXQoZSx0KX19bGV0IEF0PW51bGw7bGV0IHh0PW51bGw7Y2xhc3MgRXR7c3RhdGljIF9jcmVhdGVMaW5rKGUsdCxyLG4saSl7bGV0IG89aS0xO2Rve3ZhciBhPXQuY2hhckNvZGVBdChvKTtpZigyIT09ZS5nZXQoYSkpYnJlYWt9d2hpbGUoLS1vPm4pO3ZhciBzO3JldHVybiAwPG4mJihpPXQuY2hhckNvZGVBdChuLTEpLHM9dC5jaGFyQ29kZUF0KG8pLCg0MD09PWkmJjQxPT09c3x8OTE9PT1pJiY5Mz09PXN8fDEyMz09PWkmJjEyNT09PXMpJiZvLS0pLHtyYW5nZTp7c3RhcnRMaW5lTnVtYmVyOnIsc3RhcnRDb2x1bW46bisxLGVuZExpbmVOdW1iZXI6cixlbmRDb2x1bW46bysyfSx1cmw6dC5zdWJzdHJpbmcobixvKzEpfX1zdGF0aWMgY29tcHV0ZUxpbmtzKHQsaD1BdD1udWxsPT09QXQ/bmV3IFN0KFtbMSwxMDQsMl0sWzEsNzIsMl0sWzEsMTAyLDZdLFsxLDcwLDZdLFsyLDExNiwzXSxbMiw4NCwzXSxbMywxMTYsNF0sWzMsODQsNF0sWzQsMTEyLDVdLFs0LDgwLDVdLFs1LDExNSw5XSxbNSw4Myw5XSxbNSw1OCwxMF0sWzYsMTA1LDddLFs2LDczLDddLFs3LDEwOCw4XSxbNyw3Niw4XSxbOCwxMDEsOV0sWzgsNjksOV0sWzksNTgsMTBdLFsxMCw0NywxMV0sWzExLDQ3LDEyXV0pOkF0KXtjb25zdCBmPWZ1bmN0aW9uKCl7aWYobnVsbD09PXh0KXt4dD1uZXcgd3QoMCk7dmFyIHQ9IiBcdDw+J1wi44CB44CC772h772k77yM77yO77ya77yb4oCY44CI44CM44CO44CU77yI77y7772b772i772j772d77y977yJ44CV44CP44CN44CJ4oCZ772A772e4oCmIjtmb3IobGV0IGU9MDtlPHQubGVuZ3RoO2UrKyl4dC5zZXQodC5jaGFyQ29kZUF0KGUpLDEpO2ZvcihsZXQgZT0wO2U8Ii4sOyIubGVuZ3RoO2UrKyl4dC5zZXQoIi4sOyIuY2hhckNvZGVBdChlKSwyKX1yZXR1cm4geHR9KCksZD1bXTtmb3IobGV0IHU9MSxlPXQuZ2V0TGluZUNvdW50KCk7dTw9ZTt1Kyspe2NvbnN0IHA9dC5nZXRMaW5lQ29udGVudCh1KTt2YXIgbT1wLmxlbmd0aDtsZXQgcj0wLG49MCxpPTAsbz0xLGE9ITEscz0hMSxsPSExLGM9ITE7Zm9yKDtyPG07KXtsZXQgdD0hMTt2YXIgZz1wLmNoYXJDb2RlQXQocik7aWYoMTM9PT1vKXtsZXQgZTtzd2l0Y2goZyl7Y2FzZSA0MDphPSEwLGU9MDticmVhaztjYXNlIDQxOmU9YT8wOjE7YnJlYWs7Y2FzZSA5MTpsPSEwLHM9ITAsZT0wO2JyZWFrO2Nhc2UgOTM6bD0hMSxlPXM/MDoxO2JyZWFrO2Nhc2UgMTIzOmM9ITAsZT0wO2JyZWFrO2Nhc2UgMTI1OmU9Yz8wOjE7YnJlYWs7Y2FzZSAzOTplPTM0PT09aXx8OTY9PT1pPzA6MTticmVhaztjYXNlIDM0OmU9Mzk9PT1pfHw5Nj09PWk/MDoxO2JyZWFrO2Nhc2UgOTY6ZT0zOT09PWl8fDM0PT09aT8wOjE7YnJlYWs7Y2FzZSA0MjplPTQyPT09aT8xOjA7YnJlYWs7Y2FzZSAxMjQ6ZT0xMjQ9PT1pPzE6MDticmVhaztjYXNlIDMyOmU9bD8wOjE7YnJlYWs7ZGVmYXVsdDplPWYuZ2V0KGcpfTE9PT1lJiYoZC5wdXNoKEV0Ll9jcmVhdGVMaW5rKGYscCx1LG4scikpLHQ9ITApfWVsc2UgaWYoMTI9PT1vKXtsZXQgZTsxPT09KGU9OTE9PT1nPyhzPSEwLDApOmYuZ2V0KGcpKT90PSEwOm89MTN9ZWxzZSAwPT09KG89aC5uZXh0U3RhdGUobyxnKSkmJih0PSEwKTt0JiYobz0xLGE9ITEscz0hMSxjPSExLG49cisxLGk9ZykscisrfTEzPT09byYmZC5wdXNoKEV0Ll9jcmVhdGVMaW5rKGYscCx1LG4sbSkpfXJldHVybiBkfX1jbGFzcyBOdHtjb25zdHJ1Y3Rvcigpe3RoaXMuX2RlZmF1bHRWYWx1ZVNldD1bWyJ0cnVlIiwiZmFsc2UiXSxbIlRydWUiLCJGYWxzZSJdLFsiUHJpdmF0ZSIsIlB1YmxpYyIsIkZyaWVuZCIsIlJlYWRPbmx5IiwiUGFydGlhbCIsIlByb3RlY3RlZCIsIldyaXRlT25seSJdLFsicHVibGljIiwicHJvdGVjdGVkIiwicHJpdmF0ZSJdXX1uYXZpZ2F0ZVZhbHVlU2V0KGUsdCxyLG4saSl7aWYoZSYmdCl7dD10aGlzLmRvTmF2aWdhdGVWYWx1ZVNldCh0LGkpO2lmKHQpcmV0dXJue3JhbmdlOmUsdmFsdWU6dH19aWYociYmbil7ZT10aGlzLmRvTmF2aWdhdGVWYWx1ZVNldChuLGkpO2lmKGUpcmV0dXJue3JhbmdlOnIsdmFsdWU6ZX19cmV0dXJuIG51bGx9ZG9OYXZpZ2F0ZVZhbHVlU2V0KGUsdCl7dmFyIHI9dGhpcy5udW1iZXJSZXBsYWNlKGUsdCk7cmV0dXJuIG51bGwhPT1yP3I6dGhpcy50ZXh0UmVwbGFjZShlLHQpfW51bWJlclJlcGxhY2UoZSx0KXt2YXIgcj1NYXRoLnBvdygxMCxlLmxlbmd0aC0oZS5sYXN0SW5kZXhPZigiLiIpKzEpKTtsZXQgbj1OdW1iZXIoZSk7ZT1wYXJzZUZsb2F0KGUpO3JldHVybiFpc05hTihuKSYmIWlzTmFOKGUpJiZuPT09ZSYmKDAhPT1ufHx0KT8obj1NYXRoLmZsb29yKG4qciksbis9dD9yOi1yLFN0cmluZyhuL3IpKTpudWxsfXRleHRSZXBsYWNlKGUsdCl7cmV0dXJuIHRoaXMudmFsdWVTZXRzUmVwbGFjZSh0aGlzLl9kZWZhdWx0VmFsdWVTZXQsZSx0KX12YWx1ZVNldHNSZXBsYWNlKHIsbixpKXtsZXQgbz1udWxsO2ZvcihsZXQgZT0wLHQ9ci5sZW5ndGg7bnVsbD09PW8mJmU8dDtlKyspbz10aGlzLnZhbHVlU2V0UmVwbGFjZShyW2VdLG4saSk7cmV0dXJuIG99dmFsdWVTZXRSZXBsYWNlKGUsdCxyKXtsZXQgbj1lLmluZGV4T2YodCk7cmV0dXJuIDA8PW4/KChuKz1yPzE6LTEpPDA/bj1lLmxlbmd0aC0xOm4lPWUubGVuZ3RoLGVbbl0pOm51bGx9fU50LklOU1RBTkNFPW5ldyBOdDtjb25zdCBrdD1PYmplY3QuZnJlZXplKGZ1bmN0aW9uKGUsdCl7Y29uc3Qgcj1zZXRUaW1lb3V0KGUuYmluZCh0KSwwKTtyZXR1cm57ZGlzcG9zZSgpe2NsZWFyVGltZW91dChyKX19fSk7KE1lPUxlPUxlfHx7fSkuaXNDYW5jZWxsYXRpb25Ub2tlbj1mdW5jdGlvbihlKXtyZXR1cm4gZT09PU1lLk5vbmV8fGU9PT1NZS5DYW5jZWxsZWR8fChlIGluc3RhbmNlb2YgTHR8fCEoIWV8fCJvYmplY3QiIT10eXBlb2YgZSkmJigiYm9vbGVhbiI9PXR5cGVvZiBlLmlzQ2FuY2VsbGF0aW9uUmVxdWVzdGVkJiYiZnVuY3Rpb24iPT10eXBlb2YgZS5vbkNhbmNlbGxhdGlvblJlcXVlc3RlZCkpfSxNZS5Ob25lPU9iamVjdC5mcmVlemUoe2lzQ2FuY2VsbGF0aW9uUmVxdWVzdGVkOiExLG9uQ2FuY2VsbGF0aW9uUmVxdWVzdGVkOiRuLk5vbmV9KSxNZS5DYW5jZWxsZWQ9T2JqZWN0LmZyZWV6ZSh7aXNDYW5jZWxsYXRpb25SZXF1ZXN0ZWQ6ITAsb25DYW5jZWxsYXRpb25SZXF1ZXN0ZWQ6a3R9KTtjbGFzcyBMdHtjb25zdHJ1Y3Rvcigpe3RoaXMuX2lzQ2FuY2VsbGVkPSExLHRoaXMuX2VtaXR0ZXI9bnVsbH1jYW5jZWwoKXt0aGlzLl9pc0NhbmNlbGxlZHx8KHRoaXMuX2lzQ2FuY2VsbGVkPSEwLHRoaXMuX2VtaXR0ZXImJih0aGlzLl9lbWl0dGVyLmZpcmUodm9pZCAwKSx0aGlzLmRpc3Bvc2UoKSkpfWdldCBpc0NhbmNlbGxhdGlvblJlcXVlc3RlZCgpe3JldHVybiB0aGlzLl9pc0NhbmNlbGxlZH1nZXQgb25DYW5jZWxsYXRpb25SZXF1ZXN0ZWQoKXtyZXR1cm4gdGhpcy5faXNDYW5jZWxsZWQ/a3Q6KHRoaXMuX2VtaXR0ZXJ8fCh0aGlzLl9lbWl0dGVyPW5ldyBRKSx0aGlzLl9lbWl0dGVyLmV2ZW50KX1kaXNwb3NlKCl7dGhpcy5fZW1pdHRlciYmKHRoaXMuX2VtaXR0ZXIuZGlzcG9zZSgpLHRoaXMuX2VtaXR0ZXI9bnVsbCl9fWNsYXNzIE10e2NvbnN0cnVjdG9yKGUpe3RoaXMuX3Rva2VuPXZvaWQgMCx0aGlzLl9wYXJlbnRMaXN0ZW5lcj12b2lkIDAsdGhpcy5fcGFyZW50TGlzdGVuZXI9ZSYmZS5vbkNhbmNlbGxhdGlvblJlcXVlc3RlZCh0aGlzLmNhbmNlbCx0aGlzKX1nZXQgdG9rZW4oKXtyZXR1cm4gdGhpcy5fdG9rZW58fCh0aGlzLl90b2tlbj1uZXcgTHQpLHRoaXMuX3Rva2VufWNhbmNlbCgpe3RoaXMuX3Rva2VuP3RoaXMuX3Rva2VuIGluc3RhbmNlb2YgTHQmJnRoaXMuX3Rva2VuLmNhbmNlbCgpOnRoaXMuX3Rva2VuPUxlLkNhbmNlbGxlZH1kaXNwb3NlKGU9ITEpe2UmJnRoaXMuY2FuY2VsKCksdGhpcy5fcGFyZW50TGlzdGVuZXImJnRoaXMuX3BhcmVudExpc3RlbmVyLmRpc3Bvc2UoKSx0aGlzLl90b2tlbj90aGlzLl90b2tlbiBpbnN0YW5jZW9mIEx0JiZ0aGlzLl90b2tlbi5kaXNwb3NlKCk6dGhpcy5fdG9rZW49TGUuTm9uZX19Y2xhc3MgT3R7Y29uc3RydWN0b3IoKXt0aGlzLl9rZXlDb2RlVG9TdHI9W10sdGhpcy5fc3RyVG9LZXlDb2RlPU9iamVjdC5jcmVhdGUobnVsbCl9ZGVmaW5lKGUsdCl7dGhpcy5fa2V5Q29kZVRvU3RyW2VdPXQsdGhpcy5fc3RyVG9LZXlDb2RlW3QudG9Mb3dlckNhc2UoKV09ZX1rZXlDb2RlVG9TdHIoZSl7cmV0dXJuIHRoaXMuX2tleUNvZGVUb1N0cltlXX1zdHJUb0tleUNvZGUoZSl7cmV0dXJuIHRoaXMuX3N0clRvS2V5Q29kZVtlLnRvTG93ZXJDYXNlKCldfHwwfX1jb25zdCBUdD1uZXcgT3QsSXQ9bmV3IE90LFB0PW5ldyBPdCxWdD1uZXcgQXJyYXkoMjMwKSxSdD17fSxEdD1bXSxGdD1PYmplY3QuY3JlYXRlKG51bGwpLEt0PU9iamVjdC5jcmVhdGUobnVsbCksanQ9W10sVXQ9W107Zm9yKGxldCBlPTA7ZTw9MTkzO2UrKylqdFtlXT0tMTtmb3IobGV0IGU9MDtlPD0xMjc7ZSsrKVV0W2VdPS0xO3tsZXQgZT1bXSx0PVtdO2Zvcihjb25zdCBUbyBvZltbMCwxLDAsIk5vbmUiLDAsInVua25vd24iLDAsIlZLX1VOS05PV04iLCIiLCIiXSxbMCwxLDEsIkh5cGVyIiwwLCIiLDAsIiIsIiIsIiJdLFswLDEsMiwiU3VwZXIiLDAsIiIsMCwiIiwiIiwiIl0sWzAsMSwzLCJGbiIsMCwiIiwwLCIiLCIiLCIiXSxbMCwxLDQsIkZuTG9jayIsMCwiIiwwLCIiLCIiLCIiXSxbMCwxLDUsIlN1c3BlbmQiLDAsIiIsMCwiIiwiIiwiIl0sWzAsMSw2LCJSZXN1bWUiLDAsIiIsMCwiIiwiIiwiIl0sWzAsMSw3LCJUdXJibyIsMCwiIiwwLCIiLCIiLCIiXSxbMCwxLDgsIlNsZWVwIiwwLCIiLDAsIlZLX1NMRUVQIiwiIiwiIl0sWzAsMSw5LCJXYWtlVXAiLDAsIiIsMCwiIiwiIiwiIl0sWzMxLDAsMTAsIktleUEiLDMxLCJBIiw2NSwiVktfQSIsIiIsIiJdLFszMiwwLDExLCJLZXlCIiwzMiwiQiIsNjYsIlZLX0IiLCIiLCIiXSxbMzMsMCwxMiwiS2V5QyIsMzMsIkMiLDY3LCJWS19DIiwiIiwiIl0sWzM0LDAsMTMsIktleUQiLDM0LCJEIiw2OCwiVktfRCIsIiIsIiJdLFszNSwwLDE0LCJLZXlFIiwzNSwiRSIsNjksIlZLX0UiLCIiLCIiXSxbMzYsMCwxNSwiS2V5RiIsMzYsIkYiLDcwLCJWS19GIiwiIiwiIl0sWzM3LDAsMTYsIktleUciLDM3LCJHIiw3MSwiVktfRyIsIiIsIiJdLFszOCwwLDE3LCJLZXlIIiwzOCwiSCIsNzIsIlZLX0giLCIiLCIiXSxbMzksMCwxOCwiS2V5SSIsMzksIkkiLDczLCJWS19JIiwiIiwiIl0sWzQwLDAsMTksIktleUoiLDQwLCJKIiw3NCwiVktfSiIsIiIsIiJdLFs0MSwwLDIwLCJLZXlLIiw0MSwiSyIsNzUsIlZLX0siLCIiLCIiXSxbNDIsMCwyMSwiS2V5TCIsNDIsIkwiLDc2LCJWS19MIiwiIiwiIl0sWzQzLDAsMjIsIktleU0iLDQzLCJNIiw3NywiVktfTSIsIiIsIiJdLFs0NCwwLDIzLCJLZXlOIiw0NCwiTiIsNzgsIlZLX04iLCIiLCIiXSxbNDUsMCwyNCwiS2V5TyIsNDUsIk8iLDc5LCJWS19PIiwiIiwiIl0sWzQ2LDAsMjUsIktleVAiLDQ2LCJQIiw4MCwiVktfUCIsIiIsIiJdLFs0NywwLDI2LCJLZXlRIiw0NywiUSIsODEsIlZLX1EiLCIiLCIiXSxbNDgsMCwyNywiS2V5UiIsNDgsIlIiLDgyLCJWS19SIiwiIiwiIl0sWzQ5LDAsMjgsIktleVMiLDQ5LCJTIiw4MywiVktfUyIsIiIsIiJdLFs1MCwwLDI5LCJLZXlUIiw1MCwiVCIsODQsIlZLX1QiLCIiLCIiXSxbNTEsMCwzMCwiS2V5VSIsNTEsIlUiLDg1LCJWS19VIiwiIiwiIl0sWzUyLDAsMzEsIktleVYiLDUyLCJWIiw4NiwiVktfViIsIiIsIiJdLFs1MywwLDMyLCJLZXlXIiw1MywiVyIsODcsIlZLX1ciLCIiLCIiXSxbNTQsMCwzMywiS2V5WCIsNTQsIlgiLDg4LCJWS19YIiwiIiwiIl0sWzU1LDAsMzQsIktleVkiLDU1LCJZIiw4OSwiVktfWSIsIiIsIiJdLFs1NiwwLDM1LCJLZXlaIiw1NiwiWiIsOTAsIlZLX1oiLCIiLCIiXSxbMjIsMCwzNiwiRGlnaXQxIiwyMiwiMSIsNDksIlZLXzEiLCIiLCIiXSxbMjMsMCwzNywiRGlnaXQyIiwyMywiMiIsNTAsIlZLXzIiLCIiLCIiXSxbMjQsMCwzOCwiRGlnaXQzIiwyNCwiMyIsNTEsIlZLXzMiLCIiLCIiXSxbMjUsMCwzOSwiRGlnaXQ0IiwyNSwiNCIsNTIsIlZLXzQiLCIiLCIiXSxbMjYsMCw0MCwiRGlnaXQ1IiwyNiwiNSIsNTMsIlZLXzUiLCIiLCIiXSxbMjcsMCw0MSwiRGlnaXQ2IiwyNywiNiIsNTQsIlZLXzYiLCIiLCIiXSxbMjgsMCw0MiwiRGlnaXQ3IiwyOCwiNyIsNTUsIlZLXzciLCIiLCIiXSxbMjksMCw0MywiRGlnaXQ4IiwyOSwiOCIsNTYsIlZLXzgiLCIiLCIiXSxbMzAsMCw0NCwiRGlnaXQ5IiwzMCwiOSIsNTcsIlZLXzkiLCIiLCIiXSxbMjEsMCw0NSwiRGlnaXQwIiwyMSwiMCIsNDgsIlZLXzAiLCIiLCIiXSxbMywxLDQ2LCJFbnRlciIsMywiRW50ZXIiLDEzLCJWS19SRVRVUk4iLCIiLCIiXSxbOSwxLDQ3LCJFc2NhcGUiLDksIkVzY2FwZSIsMjcsIlZLX0VTQ0FQRSIsIiIsIiJdLFsxLDEsNDgsIkJhY2tzcGFjZSIsMSwiQmFja3NwYWNlIiw4LCJWS19CQUNLIiwiIiwiIl0sWzIsMSw0OSwiVGFiIiwyLCJUYWIiLDksIlZLX1RBQiIsIiIsIiJdLFsxMCwxLDUwLCJTcGFjZSIsMTAsIlNwYWNlIiwzMiwiVktfU1BBQ0UiLCIiLCIiXSxbODMsMCw1MSwiTWludXMiLDgzLCItIiwxODksIlZLX09FTV9NSU5VUyIsIi0iLCJPRU1fTUlOVVMiXSxbODEsMCw1MiwiRXF1YWwiLDgxLCI9IiwxODcsIlZLX09FTV9QTFVTIiwiPSIsIk9FTV9QTFVTIl0sWzg3LDAsNTMsIkJyYWNrZXRMZWZ0Iiw4NywiWyIsMjE5LCJWS19PRU1fNCIsIlsiLCJPRU1fNCJdLFs4OSwwLDU0LCJCcmFja2V0UmlnaHQiLDg5LCJdIiwyMjEsIlZLX09FTV82IiwiXSIsIk9FTV82Il0sWzg4LDAsNTUsIkJhY2tzbGFzaCIsODgsIlxcIiwyMjAsIlZLX09FTV81IiwiXFwiLCJPRU1fNSJdLFswLDAsNTYsIkludGxIYXNoIiwwLCIiLDAsIiIsIiIsIiJdLFs4MCwwLDU3LCJTZW1pY29sb24iLDgwLCI7IiwxODYsIlZLX09FTV8xIiwiOyIsIk9FTV8xIl0sWzkwLDAsNTgsIlF1b3RlIiw5MCwiJyIsMjIyLCJWS19PRU1fNyIsIiciLCJPRU1fNyJdLFs4NiwwLDU5LCJCYWNrcXVvdGUiLDg2LCJgIiwxOTIsIlZLX09FTV8zIiwiYCIsIk9FTV8zIl0sWzgyLDAsNjAsIkNvbW1hIiw4MiwiLCIsMTg4LCJWS19PRU1fQ09NTUEiLCIsIiwiT0VNX0NPTU1BIl0sWzg0LDAsNjEsIlBlcmlvZCIsODQsIi4iLDE5MCwiVktfT0VNX1BFUklPRCIsIi4iLCJPRU1fUEVSSU9EIl0sWzg1LDAsNjIsIlNsYXNoIiw4NSwiLyIsMTkxLCJWS19PRU1fMiIsIi8iLCJPRU1fMiJdLFs4LDEsNjMsIkNhcHNMb2NrIiw4LCJDYXBzTG9jayIsMjAsIlZLX0NBUElUQUwiLCIiLCIiXSxbNTksMSw2NCwiRjEiLDU5LCJGMSIsMTEyLCJWS19GMSIsIiIsIiJdLFs2MCwxLDY1LCJGMiIsNjAsIkYyIiwxMTMsIlZLX0YyIiwiIiwiIl0sWzYxLDEsNjYsIkYzIiw2MSwiRjMiLDExNCwiVktfRjMiLCIiLCIiXSxbNjIsMSw2NywiRjQiLDYyLCJGNCIsMTE1LCJWS19GNCIsIiIsIiJdLFs2MywxLDY4LCJGNSIsNjMsIkY1IiwxMTYsIlZLX0Y1IiwiIiwiIl0sWzY0LDEsNjksIkY2Iiw2NCwiRjYiLDExNywiVktfRjYiLCIiLCIiXSxbNjUsMSw3MCwiRjciLDY1LCJGNyIsMTE4LCJWS19GNyIsIiIsIiJdLFs2NiwxLDcxLCJGOCIsNjYsIkY4IiwxMTksIlZLX0Y4IiwiIiwiIl0sWzY3LDEsNzIsIkY5Iiw2NywiRjkiLDEyMCwiVktfRjkiLCIiLCIiXSxbNjgsMSw3MywiRjEwIiw2OCwiRjEwIiwxMjEsIlZLX0YxMCIsIiIsIiJdLFs2OSwxLDc0LCJGMTEiLDY5LCJGMTEiLDEyMiwiVktfRjExIiwiIiwiIl0sWzcwLDEsNzUsIkYxMiIsNzAsIkYxMiIsMTIzLCJWS19GMTIiLCIiLCIiXSxbMCwxLDc2LCJQcmludFNjcmVlbiIsMCwiIiwwLCIiLCIiLCIiXSxbNzksMSw3NywiU2Nyb2xsTG9jayIsNzksIlNjcm9sbExvY2siLDE0NSwiVktfU0NST0xMIiwiIiwiIl0sWzcsMSw3OCwiUGF1c2UiLDcsIlBhdXNlQnJlYWsiLDE5LCJWS19QQVVTRSIsIiIsIiJdLFsxOSwxLDc5LCJJbnNlcnQiLDE5LCJJbnNlcnQiLDQ1LCJWS19JTlNFUlQiLCIiLCIiXSxbMTQsMSw4MCwiSG9tZSIsMTQsIkhvbWUiLDM2LCJWS19IT01FIiwiIiwiIl0sWzExLDEsODEsIlBhZ2VVcCIsMTEsIlBhZ2VVcCIsMzMsIlZLX1BSSU9SIiwiIiwiIl0sWzIwLDEsODIsIkRlbGV0ZSIsMjAsIkRlbGV0ZSIsNDYsIlZLX0RFTEVURSIsIiIsIiJdLFsxMywxLDgzLCJFbmQiLDEzLCJFbmQiLDM1LCJWS19FTkQiLCIiLCIiXSxbMTIsMSw4NCwiUGFnZURvd24iLDEyLCJQYWdlRG93biIsMzQsIlZLX05FWFQiLCIiLCIiXSxbMTcsMSw4NSwiQXJyb3dSaWdodCIsMTcsIlJpZ2h0QXJyb3ciLDM5LCJWS19SSUdIVCIsIlJpZ2h0IiwiIl0sWzE1LDEsODYsIkFycm93TGVmdCIsMTUsIkxlZnRBcnJvdyIsMzcsIlZLX0xFRlQiLCJMZWZ0IiwiIl0sWzE4LDEsODcsIkFycm93RG93biIsMTgsIkRvd25BcnJvdyIsNDAsIlZLX0RPV04iLCJEb3duIiwiIl0sWzE2LDEsODgsIkFycm93VXAiLDE2LCJVcEFycm93IiwzOCwiVktfVVAiLCJVcCIsIiJdLFs3OCwxLDg5LCJOdW1Mb2NrIiw3OCwiTnVtTG9jayIsMTQ0LCJWS19OVU1MT0NLIiwiIiwiIl0sWzEwOCwxLDkwLCJOdW1wYWREaXZpZGUiLDEwOCwiTnVtUGFkX0RpdmlkZSIsMTExLCJWS19ESVZJREUiLCIiLCIiXSxbMTAzLDEsOTEsIk51bXBhZE11bHRpcGx5IiwxMDMsIk51bVBhZF9NdWx0aXBseSIsMTA2LCJWS19NVUxUSVBMWSIsIiIsIiJdLFsxMDYsMSw5MiwiTnVtcGFkU3VidHJhY3QiLDEwNiwiTnVtUGFkX1N1YnRyYWN0IiwxMDksIlZLX1NVQlRSQUNUIiwiIiwiIl0sWzEwNCwxLDkzLCJOdW1wYWRBZGQiLDEwNCwiTnVtUGFkX0FkZCIsMTA3LCJWS19BREQiLCIiLCIiXSxbMywxLDk0LCJOdW1wYWRFbnRlciIsMywiIiwwLCIiLCIiLCIiXSxbOTQsMSw5NSwiTnVtcGFkMSIsOTQsIk51bVBhZDEiLDk3LCJWS19OVU1QQUQxIiwiIiwiIl0sWzk1LDEsOTYsIk51bXBhZDIiLDk1LCJOdW1QYWQyIiw5OCwiVktfTlVNUEFEMiIsIiIsIiJdLFs5NiwxLDk3LCJOdW1wYWQzIiw5NiwiTnVtUGFkMyIsOTksIlZLX05VTVBBRDMiLCIiLCIiXSxbOTcsMSw5OCwiTnVtcGFkNCIsOTcsIk51bVBhZDQiLDEwMCwiVktfTlVNUEFENCIsIiIsIiJdLFs5OCwxLDk5LCJOdW1wYWQ1Iiw5OCwiTnVtUGFkNSIsMTAxLCJWS19OVU1QQUQ1IiwiIiwiIl0sWzk5LDEsMTAwLCJOdW1wYWQ2Iiw5OSwiTnVtUGFkNiIsMTAyLCJWS19OVU1QQUQ2IiwiIiwiIl0sWzEwMCwxLDEwMSwiTnVtcGFkNyIsMTAwLCJOdW1QYWQ3IiwxMDMsIlZLX05VTVBBRDciLCIiLCIiXSxbMTAxLDEsMTAyLCJOdW1wYWQ4IiwxMDEsIk51bVBhZDgiLDEwNCwiVktfTlVNUEFEOCIsIiIsIiJdLFsxMDIsMSwxMDMsIk51bXBhZDkiLDEwMiwiTnVtUGFkOSIsMTA1LCJWS19OVU1QQUQ5IiwiIiwiIl0sWzkzLDEsMTA0LCJOdW1wYWQwIiw5MywiTnVtUGFkMCIsOTYsIlZLX05VTVBBRDAiLCIiLCIiXSxbMTA3LDEsMTA1LCJOdW1wYWREZWNpbWFsIiwxMDcsIk51bVBhZF9EZWNpbWFsIiwxMTAsIlZLX0RFQ0lNQUwiLCIiLCIiXSxbOTIsMCwxMDYsIkludGxCYWNrc2xhc2giLDkyLCJPRU1fMTAyIiwyMjYsIlZLX09FTV8xMDIiLCIiLCIiXSxbNTgsMSwxMDcsIkNvbnRleHRNZW51Iiw1OCwiQ29udGV4dE1lbnUiLDkzLCIiLCIiLCIiXSxbMCwxLDEwOCwiUG93ZXIiLDAsIiIsMCwiIiwiIiwiIl0sWzAsMSwxMDksIk51bXBhZEVxdWFsIiwwLCIiLDAsIiIsIiIsIiJdLFs3MSwxLDExMCwiRjEzIiw3MSwiRjEzIiwxMjQsIlZLX0YxMyIsIiIsIiJdLFs3MiwxLDExMSwiRjE0Iiw3MiwiRjE0IiwxMjUsIlZLX0YxNCIsIiIsIiJdLFs3MywxLDExMiwiRjE1Iiw3MywiRjE1IiwxMjYsIlZLX0YxNSIsIiIsIiJdLFs3NCwxLDExMywiRjE2Iiw3NCwiRjE2IiwxMjcsIlZLX0YxNiIsIiIsIiJdLFs3NSwxLDExNCwiRjE3Iiw3NSwiRjE3IiwxMjgsIlZLX0YxNyIsIiIsIiJdLFs3NiwxLDExNSwiRjE4Iiw3NiwiRjE4IiwxMjksIlZLX0YxOCIsIiIsIiJdLFs3NywxLDExNiwiRjE5Iiw3NywiRjE5IiwxMzAsIlZLX0YxOSIsIiIsIiJdLFswLDEsMTE3LCJGMjAiLDAsIiIsMCwiVktfRjIwIiwiIiwiIl0sWzAsMSwxMTgsIkYyMSIsMCwiIiwwLCJWS19GMjEiLCIiLCIiXSxbMCwxLDExOSwiRjIyIiwwLCIiLDAsIlZLX0YyMiIsIiIsIiJdLFswLDEsMTIwLCJGMjMiLDAsIiIsMCwiVktfRjIzIiwiIiwiIl0sWzAsMSwxMjEsIkYyNCIsMCwiIiwwLCJWS19GMjQiLCIiLCIiXSxbMCwxLDEyMiwiT3BlbiIsMCwiIiwwLCIiLCIiLCIiXSxbMCwxLDEyMywiSGVscCIsMCwiIiwwLCIiLCIiLCIiXSxbMCwxLDEyNCwiU2VsZWN0IiwwLCIiLDAsIiIsIiIsIiJdLFswLDEsMTI1LCJBZ2FpbiIsMCwiIiwwLCIiLCIiLCIiXSxbMCwxLDEyNiwiVW5kbyIsMCwiIiwwLCIiLCIiLCIiXSxbMCwxLDEyNywiQ3V0IiwwLCIiLDAsIiIsIiIsIiJdLFswLDEsMTI4LCJDb3B5IiwwLCIiLDAsIiIsIiIsIiJdLFswLDEsMTI5LCJQYXN0ZSIsMCwiIiwwLCIiLCIiLCIiXSxbMCwxLDEzMCwiRmluZCIsMCwiIiwwLCIiLCIiLCIiXSxbMCwxLDEzMSwiQXVkaW9Wb2x1bWVNdXRlIiwxMTIsIkF1ZGlvVm9sdW1lTXV0ZSIsMTczLCJWS19WT0xVTUVfTVVURSIsIiIsIiJdLFswLDEsMTMyLCJBdWRpb1ZvbHVtZVVwIiwxMTMsIkF1ZGlvVm9sdW1lVXAiLDE3NSwiVktfVk9MVU1FX1VQIiwiIiwiIl0sWzAsMSwxMzMsIkF1ZGlvVm9sdW1lRG93biIsMTE0LCJBdWRpb1ZvbHVtZURvd24iLDE3NCwiVktfVk9MVU1FX0RPV04iLCIiLCIiXSxbMTA1LDEsMTM0LCJOdW1wYWRDb21tYSIsMTA1LCJOdW1QYWRfU2VwYXJhdG9yIiwxMDgsIlZLX1NFUEFSQVRPUiIsIiIsIiJdLFsxMTAsMCwxMzUsIkludGxSbyIsMTEwLCJBQk5UX0MxIiwxOTMsIlZLX0FCTlRfQzEiLCIiLCIiXSxbMCwxLDEzNiwiS2FuYU1vZGUiLDAsIiIsMCwiIiwiIiwiIl0sWzAsMCwxMzcsIkludGxZZW4iLDAsIiIsMCwiIiwiIiwiIl0sWzAsMSwxMzgsIkNvbnZlcnQiLDAsIiIsMCwiIiwiIiwiIl0sWzAsMSwxMzksIk5vbkNvbnZlcnQiLDAsIiIsMCwiIiwiIiwiIl0sWzAsMSwxNDAsIkxhbmcxIiwwLCIiLDAsIiIsIiIsIiJdLFswLDEsMTQxLCJMYW5nMiIsMCwiIiwwLCIiLCIiLCIiXSxbMCwxLDE0MiwiTGFuZzMiLDAsIiIsMCwiIiwiIiwiIl0sWzAsMSwxNDMsIkxhbmc0IiwwLCIiLDAsIiIsIiIsIiJdLFswLDEsMTQ0LCJMYW5nNSIsMCwiIiwwLCIiLCIiLCIiXSxbMCwxLDE0NSwiQWJvcnQiLDAsIiIsMCwiIiwiIiwiIl0sWzAsMSwxNDYsIlByb3BzIiwwLCIiLDAsIiIsIiIsIiJdLFswLDEsMTQ3LCJOdW1wYWRQYXJlbkxlZnQiLDAsIiIsMCwiIiwiIiwiIl0sWzAsMSwxNDgsIk51bXBhZFBhcmVuUmlnaHQiLDAsIiIsMCwiIiwiIiwiIl0sWzAsMSwxNDksIk51bXBhZEJhY2tzcGFjZSIsMCwiIiwwLCIiLCIiLCIiXSxbMCwxLDE1MCwiTnVtcGFkTWVtb3J5U3RvcmUiLDAsIiIsMCwiIiwiIiwiIl0sWzAsMSwxNTEsIk51bXBhZE1lbW9yeVJlY2FsbCIsMCwiIiwwLCIiLCIiLCIiXSxbMCwxLDE1MiwiTnVtcGFkTWVtb3J5Q2xlYXIiLDAsIiIsMCwiIiwiIiwiIl0sWzAsMSwxNTMsIk51bXBhZE1lbW9yeUFkZCIsMCwiIiwwLCIiLCIiLCIiXSxbMCwxLDE1NCwiTnVtcGFkTWVtb3J5U3VidHJhY3QiLDAsIiIsMCwiIiwiIiwiIl0sWzAsMSwxNTUsIk51bXBhZENsZWFyIiwxMjYsIkNsZWFyIiwxMiwiVktfQ0xFQVIiLCIiLCIiXSxbMCwxLDE1NiwiTnVtcGFkQ2xlYXJFbnRyeSIsMCwiIiwwLCIiLCIiLCIiXSxbNSwxLDAsIiIsNSwiQ3RybCIsMTcsIlZLX0NPTlRST0wiLCIiLCIiXSxbNCwxLDAsIiIsNCwiU2hpZnQiLDE2LCJWS19TSElGVCIsIiIsIiJdLFs2LDEsMCwiIiw2LCJBbHQiLDE4LCJWS19NRU5VIiwiIiwiIl0sWzU3LDEsMCwiIiw1NywiTWV0YSIsMCwiVktfQ09NTUFORCIsIiIsIiJdLFs1LDEsMTU3LCJDb250cm9sTGVmdCIsNSwiIiwwLCJWS19MQ09OVFJPTCIsIiIsIiJdLFs0LDEsMTU4LCJTaGlmdExlZnQiLDQsIiIsMCwiVktfTFNISUZUIiwiIiwiIl0sWzYsMSwxNTksIkFsdExlZnQiLDYsIiIsMCwiVktfTE1FTlUiLCIiLCIiXSxbNTcsMSwxNjAsIk1ldGFMZWZ0Iiw1NywiIiwwLCJWS19MV0lOIiwiIiwiIl0sWzUsMSwxNjEsIkNvbnRyb2xSaWdodCIsNSwiIiwwLCJWS19SQ09OVFJPTCIsIiIsIiJdLFs0LDEsMTYyLCJTaGlmdFJpZ2h0Iiw0LCIiLDAsIlZLX1JTSElGVCIsIiIsIiJdLFs2LDEsMTYzLCJBbHRSaWdodCIsNiwiIiwwLCJWS19STUVOVSIsIiIsIiJdLFs1NywxLDE2NCwiTWV0YVJpZ2h0Iiw1NywiIiwwLCJWS19SV0lOIiwiIiwiIl0sWzAsMSwxNjUsIkJyaWdodG5lc3NVcCIsMCwiIiwwLCIiLCIiLCIiXSxbMCwxLDE2NiwiQnJpZ2h0bmVzc0Rvd24iLDAsIiIsMCwiIiwiIiwiIl0sWzAsMSwxNjcsIk1lZGlhUGxheSIsMCwiIiwwLCIiLCIiLCIiXSxbMCwxLDE2OCwiTWVkaWFSZWNvcmQiLDAsIiIsMCwiIiwiIiwiIl0sWzAsMSwxNjksIk1lZGlhRmFzdEZvcndhcmQiLDAsIiIsMCwiIiwiIiwiIl0sWzAsMSwxNzAsIk1lZGlhUmV3aW5kIiwwLCIiLDAsIiIsIiIsIiJdLFsxMTQsMSwxNzEsIk1lZGlhVHJhY2tOZXh0IiwxMTksIk1lZGlhVHJhY2tOZXh0IiwxNzYsIlZLX01FRElBX05FWFRfVFJBQ0siLCIiLCIiXSxbMTE1LDEsMTcyLCJNZWRpYVRyYWNrUHJldmlvdXMiLDEyMCwiTWVkaWFUcmFja1ByZXZpb3VzIiwxNzcsIlZLX01FRElBX1BSRVZfVFJBQ0siLCIiLCIiXSxbMTE2LDEsMTczLCJNZWRpYVN0b3AiLDEyMSwiTWVkaWFTdG9wIiwxNzgsIlZLX01FRElBX1NUT1AiLCIiLCIiXSxbMCwxLDE3NCwiRWplY3QiLDAsIiIsMCwiIiwiIiwiIl0sWzExNywxLDE3NSwiTWVkaWFQbGF5UGF1c2UiLDEyMiwiTWVkaWFQbGF5UGF1c2UiLDE3OSwiVktfTUVESUFfUExBWV9QQVVTRSIsIiIsIiJdLFswLDEsMTc2LCJNZWRpYVNlbGVjdCIsMTIzLCJMYXVuY2hNZWRpYVBsYXllciIsMTgxLCJWS19NRURJQV9MQVVOQ0hfTUVESUFfU0VMRUNUIiwiIiwiIl0sWzAsMSwxNzcsIkxhdW5jaE1haWwiLDEyNCwiTGF1bmNoTWFpbCIsMTgwLCJWS19NRURJQV9MQVVOQ0hfTUFJTCIsIiIsIiJdLFswLDEsMTc4LCJMYXVuY2hBcHAyIiwxMjUsIkxhdW5jaEFwcDIiLDE4MywiVktfTUVESUFfTEFVTkNIX0FQUDIiLCIiLCIiXSxbMCwxLDE3OSwiTGF1bmNoQXBwMSIsMCwiIiwwLCJWS19NRURJQV9MQVVOQ0hfQVBQMSIsIiIsIiJdLFswLDEsMTgwLCJTZWxlY3RUYXNrIiwwLCIiLDAsIiIsIiIsIiJdLFswLDEsMTgxLCJMYXVuY2hTY3JlZW5TYXZlciIsMCwiIiwwLCIiLCIiLCIiXSxbMCwxLDE4MiwiQnJvd3NlclNlYXJjaCIsMTE1LCJCcm93c2VyU2VhcmNoIiwxNzAsIlZLX0JST1dTRVJfU0VBUkNIIiwiIiwiIl0sWzAsMSwxODMsIkJyb3dzZXJIb21lIiwxMTYsIkJyb3dzZXJIb21lIiwxNzIsIlZLX0JST1dTRVJfSE9NRSIsIiIsIiJdLFsxMTIsMSwxODQsIkJyb3dzZXJCYWNrIiwxMTcsIkJyb3dzZXJCYWNrIiwxNjYsIlZLX0JST1dTRVJfQkFDSyIsIiIsIiJdLFsxMTMsMSwxODUsIkJyb3dzZXJGb3J3YXJkIiwxMTgsIkJyb3dzZXJGb3J3YXJkIiwxNjcsIlZLX0JST1dTRVJfRk9SV0FSRCIsIiIsIiJdLFswLDEsMTg2LCJCcm93c2VyU3RvcCIsMCwiIiwwLCJWS19CUk9XU0VSX1NUT1AiLCIiLCIiXSxbMCwxLDE4NywiQnJvd3NlclJlZnJlc2giLDAsIiIsMCwiVktfQlJPV1NFUl9SRUZSRVNIIiwiIiwiIl0sWzAsMSwxODgsIkJyb3dzZXJGYXZvcml0ZXMiLDAsIiIsMCwiVktfQlJPV1NFUl9GQVZPUklURVMiLCIiLCIiXSxbMCwxLDE4OSwiWm9vbVRvZ2dsZSIsMCwiIiwwLCIiLCIiLCIiXSxbMCwxLDE5MCwiTWFpbFJlcGx5IiwwLCIiLDAsIiIsIiIsIiJdLFswLDEsMTkxLCJNYWlsRm9yd2FyZCIsMCwiIiwwLCIiLCIiLCIiXSxbMCwxLDE5MiwiTWFpbFNlbmQiLDAsIiIsMCwiIiwiIiwiIl0sWzEwOSwxLDAsIiIsMTA5LCJLZXlJbkNvbXBvc2l0aW9uIiwyMjksIiIsIiIsIiJdLFsxMTEsMSwwLCIiLDExMSwiQUJOVF9DMiIsMTk0LCJWS19BQk5UX0MyIiwiIiwiIl0sWzkxLDEsMCwiIiw5MSwiT0VNXzgiLDIyMywiVktfT0VNXzgiLCIiLCIiXSxbMCwxLDAsIiIsMCwiIiwwLCJWS19LQU5BIiwiIiwiIl0sWzAsMSwwLCIiLDAsIiIsMCwiVktfSEFOR1VMIiwiIiwiIl0sWzAsMSwwLCIiLDAsIiIsMCwiVktfSlVOSkEiLCIiLCIiXSxbMCwxLDAsIiIsMCwiIiwwLCJWS19GSU5BTCIsIiIsIiJdLFswLDEsMCwiIiwwLCIiLDAsIlZLX0hBTkpBIiwiIiwiIl0sWzAsMSwwLCIiLDAsIiIsMCwiVktfS0FOSkkiLCIiLCIiXSxbMCwxLDAsIiIsMCwiIiwwLCJWS19DT05WRVJUIiwiIiwiIl0sWzAsMSwwLCIiLDAsIiIsMCwiVktfTk9OQ09OVkVSVCIsIiIsIiJdLFswLDEsMCwiIiwwLCIiLDAsIlZLX0FDQ0VQVCIsIiIsIiJdLFswLDEsMCwiIiwwLCIiLDAsIlZLX01PREVDSEFOR0UiLCIiLCIiXSxbMCwxLDAsIiIsMCwiIiwwLCJWS19TRUxFQ1QiLCIiLCIiXSxbMCwxLDAsIiIsMCwiIiwwLCJWS19QUklOVCIsIiIsIiJdLFswLDEsMCwiIiwwLCIiLDAsIlZLX0VYRUNVVEUiLCIiLCIiXSxbMCwxLDAsIiIsMCwiIiwwLCJWS19TTkFQU0hPVCIsIiIsIiJdLFswLDEsMCwiIiwwLCIiLDAsIlZLX0hFTFAiLCIiLCIiXSxbMCwxLDAsIiIsMCwiIiwwLCJWS19BUFBTIiwiIiwiIl0sWzAsMSwwLCIiLDAsIiIsMCwiVktfUFJPQ0VTU0tFWSIsIiIsIiJdLFswLDEsMCwiIiwwLCIiLDAsIlZLX1BBQ0tFVCIsIiIsIiJdLFswLDEsMCwiIiwwLCIiLDAsIlZLX0RCRV9TQkNTQ0hBUiIsIiIsIiJdLFswLDEsMCwiIiwwLCIiLDAsIlZLX0RCRV9EQkNTQ0hBUiIsIiIsIiJdLFswLDEsMCwiIiwwLCIiLDAsIlZLX0FUVE4iLCIiLCIiXSxbMCwxLDAsIiIsMCwiIiwwLCJWS19DUlNFTCIsIiIsIiJdLFswLDEsMCwiIiwwLCIiLDAsIlZLX0VYU0VMIiwiIiwiIl0sWzAsMSwwLCIiLDAsIiIsMCwiVktfRVJFT0YiLCIiLCIiXSxbMCwxLDAsIiIsMCwiIiwwLCJWS19QTEFZIiwiIiwiIl0sWzAsMSwwLCIiLDAsIiIsMCwiVktfWk9PTSIsIiIsIiJdLFswLDEsMCwiIiwwLCIiLDAsIlZLX05PTkFNRSIsIiIsIiJdLFswLDEsMCwiIiwwLCIiLDAsIlZLX1BBMSIsIiIsIiJdLFswLDEsMCwiIiwwLCIiLDAsIlZLX09FTV9DTEVBUiIsIiIsIiJdXSl7Y29uc3RbLElvLFBvLFZvLFJvLERvLEZvLEtvLGpvLFVvXT1UbztpZih0W1BvXXx8KHRbUG9dPSEwLER0W1BvXT1WbyxGdFtWb109UG8sS3RbVm8udG9Mb3dlckNhc2UoKV09UG8sSW8mJjAhPT0oanRbUG9dPVJvKSYmMyE9PVJvJiY1IT09Um8mJjQhPT1SbyYmNiE9PVJvJiY1NyE9PVJvJiYoVXRbUm9dPVBvKSksIWVbUm9dKXtpZihlW1JvXT0hMCwhRG8pdGhyb3cgbmV3IEVycm9yKGBTdHJpbmcgcmVwcmVzZW50YXRpb24gbWlzc2luZyBmb3Iga2V5IGNvZGUgJHtSb30gYXJvdW5kIHNjYW4gY29kZSBgK1ZvKTtUdC5kZWZpbmUoUm8sRG8pLEl0LmRlZmluZShSbyxqb3x8RG8pLFB0LmRlZmluZShSbyxVb3x8am98fERvKX1GbyYmKFZ0W0ZvXT1SbyksS28mJihSdFtLb109Um8pfVV0WzNdPTQ2fWNsYXNzIHF0IGV4dGVuZHMgaXR7Y29uc3RydWN0b3IoZSx0LHIsbil7c3VwZXIoZSx0LHIsbiksdGhpcy5zZWxlY3Rpb25TdGFydExpbmVOdW1iZXI9ZSx0aGlzLnNlbGVjdGlvblN0YXJ0Q29sdW1uPXQsdGhpcy5wb3NpdGlvbkxpbmVOdW1iZXI9cix0aGlzLnBvc2l0aW9uQ29sdW1uPW59dG9TdHJpbmcoKXtyZXR1cm4iWyIrdGhpcy5zZWxlY3Rpb25TdGFydExpbmVOdW1iZXIrIiwiK3RoaXMuc2VsZWN0aW9uU3RhcnRDb2x1bW4rIiAtPiAiK3RoaXMucG9zaXRpb25MaW5lTnVtYmVyKyIsIit0aGlzLnBvc2l0aW9uQ29sdW1uKyJdIn1lcXVhbHNTZWxlY3Rpb24oZSl7cmV0dXJuIHF0LnNlbGVjdGlvbnNFcXVhbCh0aGlzLGUpfXN0YXRpYyBzZWxlY3Rpb25zRXF1YWwoZSx0KXtyZXR1cm4gZS5zZWxlY3Rpb25TdGFydExpbmVOdW1iZXI9PT10LnNlbGVjdGlvblN0YXJ0TGluZU51bWJlciYmZS5zZWxlY3Rpb25TdGFydENvbHVtbj09PXQuc2VsZWN0aW9uU3RhcnRDb2x1bW4mJmUucG9zaXRpb25MaW5lTnVtYmVyPT09dC5wb3NpdGlvbkxpbmVOdW1iZXImJmUucG9zaXRpb25Db2x1bW49PT10LnBvc2l0aW9uQ29sdW1ufWdldERpcmVjdGlvbigpe3JldHVybiB0aGlzLnNlbGVjdGlvblN0YXJ0TGluZU51bWJlcj09PXRoaXMuc3RhcnRMaW5lTnVtYmVyJiZ0aGlzLnNlbGVjdGlvblN0YXJ0Q29sdW1uPT09dGhpcy5zdGFydENvbHVtbj8wOjF9c2V0RW5kUG9zaXRpb24oZSx0KXtyZXR1cm4gMD09PXRoaXMuZ2V0RGlyZWN0aW9uKCk/bmV3IHF0KHRoaXMuc3RhcnRMaW5lTnVtYmVyLHRoaXMuc3RhcnRDb2x1bW4sZSx0KTpuZXcgcXQoZSx0LHRoaXMuc3RhcnRMaW5lTnVtYmVyLHRoaXMuc3RhcnRDb2x1bW4pfWdldFBvc2l0aW9uKCl7cmV0dXJuIG5ldyBudCh0aGlzLnBvc2l0aW9uTGluZU51bWJlcix0aGlzLnBvc2l0aW9uQ29sdW1uKX1nZXRTZWxlY3Rpb25TdGFydCgpe3JldHVybiBuZXcgbnQodGhpcy5zZWxlY3Rpb25TdGFydExpbmVOdW1iZXIsdGhpcy5zZWxlY3Rpb25TdGFydENvbHVtbil9c2V0U3RhcnRQb3NpdGlvbihlLHQpe3JldHVybiAwPT09dGhpcy5nZXREaXJlY3Rpb24oKT9uZXcgcXQoZSx0LHRoaXMuZW5kTGluZU51bWJlcix0aGlzLmVuZENvbHVtbik6bmV3IHF0KHRoaXMuZW5kTGluZU51bWJlcix0aGlzLmVuZENvbHVtbixlLHQpfXN0YXRpYyBmcm9tUG9zaXRpb25zKGUsdD1lKXtyZXR1cm4gbmV3IHF0KGUubGluZU51bWJlcixlLmNvbHVtbix0LmxpbmVOdW1iZXIsdC5jb2x1bW4pfXN0YXRpYyBmcm9tUmFuZ2UoZSx0KXtyZXR1cm4gMD09PXQ/bmV3IHF0KGUuc3RhcnRMaW5lTnVtYmVyLGUuc3RhcnRDb2x1bW4sZS5lbmRMaW5lTnVtYmVyLGUuZW5kQ29sdW1uKTpuZXcgcXQoZS5lbmRMaW5lTnVtYmVyLGUuZW5kQ29sdW1uLGUuc3RhcnRMaW5lTnVtYmVyLGUuc3RhcnRDb2x1bW4pfXN0YXRpYyBsaWZ0U2VsZWN0aW9uKGUpe3JldHVybiBuZXcgcXQoZS5zZWxlY3Rpb25TdGFydExpbmVOdW1iZXIsZS5zZWxlY3Rpb25TdGFydENvbHVtbixlLnBvc2l0aW9uTGluZU51bWJlcixlLnBvc2l0aW9uQ29sdW1uKX1zdGF0aWMgc2VsZWN0aW9uc0FyckVxdWFsKHIsbil7aWYociYmIW58fCFyJiZuKXJldHVybiExO2lmKCFyJiYhbilyZXR1cm4hMDtpZihyLmxlbmd0aCE9PW4ubGVuZ3RoKXJldHVybiExO2ZvcihsZXQgZT0wLHQ9ci5sZW5ndGg7ZTx0O2UrKylpZighdGhpcy5zZWxlY3Rpb25zRXF1YWwocltlXSxuW2VdKSlyZXR1cm4hMTtyZXR1cm4hMH1zdGF0aWMgaXNJU2VsZWN0aW9uKGUpe3JldHVybiBlJiYibnVtYmVyIj09dHlwZW9mIGUuc2VsZWN0aW9uU3RhcnRMaW5lTnVtYmVyJiYibnVtYmVyIj09dHlwZW9mIGUuc2VsZWN0aW9uU3RhcnRDb2x1bW4mJiJudW1iZXIiPT10eXBlb2YgZS5wb3NpdGlvbkxpbmVOdW1iZXImJiJudW1iZXIiPT10eXBlb2YgZS5wb3NpdGlvbkNvbHVtbn1zdGF0aWMgY3JlYXRlV2l0aERpcmVjdGlvbihlLHQscixuLGkpe3JldHVybiAwPT09aT9uZXcgcXQoZSx0LHIsbik6bmV3IHF0KHIsbixlLHQpfX12YXIgQnQsJHQ9ZnVuY3Rpb24oZSxhLHMsbCl7cmV0dXJuIG5ldyhzPXN8fFByb21pc2UpKGZ1bmN0aW9uKHIsdCl7ZnVuY3Rpb24gbihlKXt0cnl7byhsLm5leHQoZSkpfWNhdGNoKGUpe3QoZSl9fWZ1bmN0aW9uIGkoZSl7dHJ5e28obC50aHJvdyhlKSl9Y2F0Y2goZSl7dChlKX19ZnVuY3Rpb24gbyhlKXt2YXIgdDtlLmRvbmU/cihlLnZhbHVlKTooKHQ9ZS52YWx1ZSlpbnN0YW5jZW9mIHM/dDpuZXcgcyhmdW5jdGlvbihlKXtlKHQpfSkpLnRoZW4obixpKX1vKChsPWwuYXBwbHkoZSxhfHxbXSkpLm5leHQoKSl9KX07Y2xhc3MgV3QgZXh0ZW5kcyBDe2NvbnN0cnVjdG9yKGUsdCxyKXtzdXBlcigpLHRoaXMuX3JlZ2lzdHJ5PWUsdGhpcy5fbGFuZ3VhZ2VJZD10LHRoaXMuX2ZhY3Rvcnk9cix0aGlzLl9pc0Rpc3Bvc2VkPSExLHRoaXMuX3Jlc29sdmVQcm9taXNlPW51bGwsdGhpcy5faXNSZXNvbHZlZD0hMX1nZXQgaXNSZXNvbHZlZCgpe3JldHVybiB0aGlzLl9pc1Jlc29sdmVkfWRpc3Bvc2UoKXt0aGlzLl9pc0Rpc3Bvc2VkPSEwLHN1cGVyLmRpc3Bvc2UoKX1yZXNvbHZlKCl7cmV0dXJuICR0KHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtyZXR1cm4gdGhpcy5fcmVzb2x2ZVByb21pc2V8fCh0aGlzLl9yZXNvbHZlUHJvbWlzZT10aGlzLl9jcmVhdGUoKSksdGhpcy5fcmVzb2x2ZVByb21pc2V9KX1fY3JlYXRlKCl7cmV0dXJuICR0KHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXt2YXIgZT15aWVsZCBQcm9taXNlLnJlc29sdmUodGhpcy5fZmFjdG9yeS5jcmVhdGVUb2tlbml6YXRpb25TdXBwb3J0KCkpO3RoaXMuX2lzUmVzb2x2ZWQ9ITAsZSYmIXRoaXMuX2lzRGlzcG9zZWQmJnRoaXMuX3JlZ2lzdGVyKHRoaXMuX3JlZ2lzdHJ5LnJlZ2lzdGVyKHRoaXMuX2xhbmd1YWdlSWQsZSkpfSl9fWNsYXNzIGl7Y29uc3RydWN0b3IoZSx0LHIpe3RoaXMuaWQ9ZSx0aGlzLmRlZmluaXRpb249dCx0aGlzLmRlc2NyaXB0aW9uPXIsaS5fYWxsQ29kaWNvbnMucHVzaCh0aGlzKX1nZXQgY2xhc3NOYW1lcygpe3JldHVybiJjb2RpY29uIGNvZGljb24tIit0aGlzLmlkfWdldCBjbGFzc05hbWVzQXJyYXkoKXtyZXR1cm5bImNvZGljb24iLCJjb2RpY29uLSIrdGhpcy5pZF19Z2V0IGNzc1NlbGVjdG9yKCl7cmV0dXJuIi5jb2RpY29uLmNvZGljb24tIit0aGlzLmlkfXN0YXRpYyBnZXRBbGwoKXtyZXR1cm4gaS5fYWxsQ29kaWNvbnN9fWkuX2FsbENvZGljb25zPVtdLGkuYWRkPW5ldyBpKCJhZGQiLHtmb250Q2hhcmFjdGVyOiJcXGVhNjAifSksaS5wbHVzPW5ldyBpKCJwbHVzIixpLmFkZC5kZWZpbml0aW9uKSxpLmdpc3ROZXc9bmV3IGkoImdpc3QtbmV3IixpLmFkZC5kZWZpbml0aW9uKSxpLnJlcG9DcmVhdGU9bmV3IGkoInJlcG8tY3JlYXRlIixpLmFkZC5kZWZpbml0aW9uKSxpLmxpZ2h0YnVsYj1uZXcgaSgibGlnaHRidWxiIix7Zm9udENoYXJhY3RlcjoiXFxlYTYxIn0pLGkubGlnaHRCdWxiPW5ldyBpKCJsaWdodC1idWxiIix7Zm9udENoYXJhY3RlcjoiXFxlYTYxIn0pLGkucmVwbz1uZXcgaSgicmVwbyIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE2MiJ9KSxpLnJlcG9EZWxldGU9bmV3IGkoInJlcG8tZGVsZXRlIix7Zm9udENoYXJhY3RlcjoiXFxlYTYyIn0pLGkuZ2lzdEZvcms9bmV3IGkoImdpc3QtZm9yayIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE2MyJ9KSxpLnJlcG9Gb3JrZWQ9bmV3IGkoInJlcG8tZm9ya2VkIix7Zm9udENoYXJhY3RlcjoiXFxlYTYzIn0pLGkuZ2l0UHVsbFJlcXVlc3Q9bmV3IGkoImdpdC1wdWxsLXJlcXVlc3QiLHtmb250Q2hhcmFjdGVyOiJcXGVhNjQifSksaS5naXRQdWxsUmVxdWVzdEFiYW5kb25lZD1uZXcgaSgiZ2l0LXB1bGwtcmVxdWVzdC1hYmFuZG9uZWQiLHtmb250Q2hhcmFjdGVyOiJcXGVhNjQifSksaS5yZWNvcmRLZXlzPW5ldyBpKCJyZWNvcmQta2V5cyIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE2NSJ9KSxpLmtleWJvYXJkPW5ldyBpKCJrZXlib2FyZCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE2NSJ9KSxpLnRhZz1uZXcgaSgidGFnIix7Zm9udENoYXJhY3RlcjoiXFxlYTY2In0pLGkudGFnQWRkPW5ldyBpKCJ0YWctYWRkIix7Zm9udENoYXJhY3RlcjoiXFxlYTY2In0pLGkudGFnUmVtb3ZlPW5ldyBpKCJ0YWctcmVtb3ZlIix7Zm9udENoYXJhY3RlcjoiXFxlYTY2In0pLGkucGVyc29uPW5ldyBpKCJwZXJzb24iLHtmb250Q2hhcmFjdGVyOiJcXGVhNjcifSksaS5wZXJzb25Gb2xsb3c9bmV3IGkoInBlcnNvbi1mb2xsb3ciLHtmb250Q2hhcmFjdGVyOiJcXGVhNjcifSksaS5wZXJzb25PdXRsaW5lPW5ldyBpKCJwZXJzb24tb3V0bGluZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE2NyJ9KSxpLnBlcnNvbkZpbGxlZD1uZXcgaSgicGVyc29uLWZpbGxlZCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE2NyJ9KSxpLmdpdEJyYW5jaD1uZXcgaSgiZ2l0LWJyYW5jaCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE2OCJ9KSxpLmdpdEJyYW5jaENyZWF0ZT1uZXcgaSgiZ2l0LWJyYW5jaC1jcmVhdGUiLHtmb250Q2hhcmFjdGVyOiJcXGVhNjgifSksaS5naXRCcmFuY2hEZWxldGU9bmV3IGkoImdpdC1icmFuY2gtZGVsZXRlIix7Zm9udENoYXJhY3RlcjoiXFxlYTY4In0pLGkuc291cmNlQ29udHJvbD1uZXcgaSgic291cmNlLWNvbnRyb2wiLHtmb250Q2hhcmFjdGVyOiJcXGVhNjgifSksaS5taXJyb3I9bmV3IGkoIm1pcnJvciIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE2OSJ9KSxpLm1pcnJvclB1YmxpYz1uZXcgaSgibWlycm9yLXB1YmxpYyIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE2OSJ9KSxpLnN0YXI9bmV3IGkoInN0YXIiLHtmb250Q2hhcmFjdGVyOiJcXGVhNmEifSksaS5zdGFyQWRkPW5ldyBpKCJzdGFyLWFkZCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE2YSJ9KSxpLnN0YXJEZWxldGU9bmV3IGkoInN0YXItZGVsZXRlIix7Zm9udENoYXJhY3RlcjoiXFxlYTZhIn0pLGkuc3RhckVtcHR5PW5ldyBpKCJzdGFyLWVtcHR5Iix7Zm9udENoYXJhY3RlcjoiXFxlYTZhIn0pLGkuY29tbWVudD1uZXcgaSgiY29tbWVudCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE2YiJ9KSxpLmNvbW1lbnRBZGQ9bmV3IGkoImNvbW1lbnQtYWRkIix7Zm9udENoYXJhY3RlcjoiXFxlYTZiIn0pLGkuYWxlcnQ9bmV3IGkoImFsZXJ0Iix7Zm9udENoYXJhY3RlcjoiXFxlYTZjIn0pLGkud2FybmluZz1uZXcgaSgid2FybmluZyIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE2YyJ9KSxpLnNlYXJjaD1uZXcgaSgic2VhcmNoIix7Zm9udENoYXJhY3RlcjoiXFxlYTZkIn0pLGkuc2VhcmNoU2F2ZT1uZXcgaSgic2VhcmNoLXNhdmUiLHtmb250Q2hhcmFjdGVyOiJcXGVhNmQifSksaS5sb2dPdXQ9bmV3IGkoImxvZy1vdXQiLHtmb250Q2hhcmFjdGVyOiJcXGVhNmUifSksaS5zaWduT3V0PW5ldyBpKCJzaWduLW91dCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE2ZSJ9KSxpLmxvZ0luPW5ldyBpKCJsb2ctaW4iLHtmb250Q2hhcmFjdGVyOiJcXGVhNmYifSksaS5zaWduSW49bmV3IGkoInNpZ24taW4iLHtmb250Q2hhcmFjdGVyOiJcXGVhNmYifSksaS5leWU9bmV3IGkoImV5ZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE3MCJ9KSxpLmV5ZVVud2F0Y2g9bmV3IGkoImV5ZS11bndhdGNoIix7Zm9udENoYXJhY3RlcjoiXFxlYTcwIn0pLGkuZXllV2F0Y2g9bmV3IGkoImV5ZS13YXRjaCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE3MCJ9KSxpLmNpcmNsZUZpbGxlZD1uZXcgaSgiY2lyY2xlLWZpbGxlZCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE3MSJ9KSxpLnByaW1pdGl2ZURvdD1uZXcgaSgicHJpbWl0aXZlLWRvdCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE3MSJ9KSxpLmNsb3NlRGlydHk9bmV3IGkoImNsb3NlLWRpcnR5Iix7Zm9udENoYXJhY3RlcjoiXFxlYTcxIn0pLGkuZGVidWdCcmVha3BvaW50PW5ldyBpKCJkZWJ1Zy1icmVha3BvaW50Iix7Zm9udENoYXJhY3RlcjoiXFxlYTcxIn0pLGkuZGVidWdCcmVha3BvaW50RGlzYWJsZWQ9bmV3IGkoImRlYnVnLWJyZWFrcG9pbnQtZGlzYWJsZWQiLHtmb250Q2hhcmFjdGVyOiJcXGVhNzEifSksaS5kZWJ1Z0hpbnQ9bmV3IGkoImRlYnVnLWhpbnQiLHtmb250Q2hhcmFjdGVyOiJcXGVhNzEifSksaS5wcmltaXRpdmVTcXVhcmU9bmV3IGkoInByaW1pdGl2ZS1zcXVhcmUiLHtmb250Q2hhcmFjdGVyOiJcXGVhNzIifSksaS5lZGl0PW5ldyBpKCJlZGl0Iix7Zm9udENoYXJhY3RlcjoiXFxlYTczIn0pLGkucGVuY2lsPW5ldyBpKCJwZW5jaWwiLHtmb250Q2hhcmFjdGVyOiJcXGVhNzMifSksaS5pbmZvPW5ldyBpKCJpbmZvIix7Zm9udENoYXJhY3RlcjoiXFxlYTc0In0pLGkuaXNzdWVPcGVuZWQ9bmV3IGkoImlzc3VlLW9wZW5lZCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE3NCJ9KSxpLmdpc3RQcml2YXRlPW5ldyBpKCJnaXN0LXByaXZhdGUiLHtmb250Q2hhcmFjdGVyOiJcXGVhNzUifSksaS5naXRGb3JrUHJpdmF0ZT1uZXcgaSgiZ2l0LWZvcmstcHJpdmF0ZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE3NSJ9KSxpLmxvY2s9bmV3IGkoImxvY2siLHtmb250Q2hhcmFjdGVyOiJcXGVhNzUifSksaS5taXJyb3JQcml2YXRlPW5ldyBpKCJtaXJyb3ItcHJpdmF0ZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE3NSJ9KSxpLmNsb3NlPW5ldyBpKCJjbG9zZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE3NiJ9KSxpLnJlbW92ZUNsb3NlPW5ldyBpKCJyZW1vdmUtY2xvc2UiLHtmb250Q2hhcmFjdGVyOiJcXGVhNzYifSksaS54PW5ldyBpKCJ4Iix7Zm9udENoYXJhY3RlcjoiXFxlYTc2In0pLGkucmVwb1N5bmM9bmV3IGkoInJlcG8tc3luYyIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE3NyJ9KSxpLnN5bmM9bmV3IGkoInN5bmMiLHtmb250Q2hhcmFjdGVyOiJcXGVhNzcifSksaS5jbG9uZT1uZXcgaSgiY2xvbmUiLHtmb250Q2hhcmFjdGVyOiJcXGVhNzgifSksaS5kZXNrdG9wRG93bmxvYWQ9bmV3IGkoImRlc2t0b3AtZG93bmxvYWQiLHtmb250Q2hhcmFjdGVyOiJcXGVhNzgifSksaS5iZWFrZXI9bmV3IGkoImJlYWtlciIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE3OSJ9KSxpLm1pY3Jvc2NvcGU9bmV3IGkoIm1pY3Jvc2NvcGUiLHtmb250Q2hhcmFjdGVyOiJcXGVhNzkifSksaS52bT1uZXcgaSgidm0iLHtmb250Q2hhcmFjdGVyOiJcXGVhN2EifSksaS5kZXZpY2VEZXNrdG9wPW5ldyBpKCJkZXZpY2UtZGVza3RvcCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE3YSJ9KSxpLmZpbGU9bmV3IGkoImZpbGUiLHtmb250Q2hhcmFjdGVyOiJcXGVhN2IifSksaS5maWxlVGV4dD1uZXcgaSgiZmlsZS10ZXh0Iix7Zm9udENoYXJhY3RlcjoiXFxlYTdiIn0pLGkubW9yZT1uZXcgaSgibW9yZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE3YyJ9KSxpLmVsbGlwc2lzPW5ldyBpKCJlbGxpcHNpcyIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE3YyJ9KSxpLmtlYmFiSG9yaXpvbnRhbD1uZXcgaSgia2ViYWItaG9yaXpvbnRhbCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE3YyJ9KSxpLm1haWxSZXBseT1uZXcgaSgibWFpbC1yZXBseSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE3ZCJ9KSxpLnJlcGx5PW5ldyBpKCJyZXBseSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE3ZCJ9KSxpLm9yZ2FuaXphdGlvbj1uZXcgaSgib3JnYW5pemF0aW9uIix7Zm9udENoYXJhY3RlcjoiXFxlYTdlIn0pLGkub3JnYW5pemF0aW9uRmlsbGVkPW5ldyBpKCJvcmdhbml6YXRpb24tZmlsbGVkIix7Zm9udENoYXJhY3RlcjoiXFxlYTdlIn0pLGkub3JnYW5pemF0aW9uT3V0bGluZT1uZXcgaSgib3JnYW5pemF0aW9uLW91dGxpbmUiLHtmb250Q2hhcmFjdGVyOiJcXGVhN2UifSksaS5uZXdGaWxlPW5ldyBpKCJuZXctZmlsZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE3ZiJ9KSxpLmZpbGVBZGQ9bmV3IGkoImZpbGUtYWRkIix7Zm9udENoYXJhY3RlcjoiXFxlYTdmIn0pLGkubmV3Rm9sZGVyPW5ldyBpKCJuZXctZm9sZGVyIix7Zm9udENoYXJhY3RlcjoiXFxlYTgwIn0pLGkuZmlsZURpcmVjdG9yeUNyZWF0ZT1uZXcgaSgiZmlsZS1kaXJlY3RvcnktY3JlYXRlIix7Zm9udENoYXJhY3RlcjoiXFxlYTgwIn0pLGkudHJhc2g9bmV3IGkoInRyYXNoIix7Zm9udENoYXJhY3RlcjoiXFxlYTgxIn0pLGkudHJhc2hjYW49bmV3IGkoInRyYXNoY2FuIix7Zm9udENoYXJhY3RlcjoiXFxlYTgxIn0pLGkuaGlzdG9yeT1uZXcgaSgiaGlzdG9yeSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE4MiJ9KSxpLmNsb2NrPW5ldyBpKCJjbG9jayIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE4MiJ9KSxpLmZvbGRlcj1uZXcgaSgiZm9sZGVyIix7Zm9udENoYXJhY3RlcjoiXFxlYTgzIn0pLGkuZmlsZURpcmVjdG9yeT1uZXcgaSgiZmlsZS1kaXJlY3RvcnkiLHtmb250Q2hhcmFjdGVyOiJcXGVhODMifSksaS5zeW1ib2xGb2xkZXI9bmV3IGkoInN5bWJvbC1mb2xkZXIiLHtmb250Q2hhcmFjdGVyOiJcXGVhODMifSksaS5sb2dvR2l0aHViPW5ldyBpKCJsb2dvLWdpdGh1YiIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE4NCJ9KSxpLm1hcmtHaXRodWI9bmV3IGkoIm1hcmstZ2l0aHViIix7Zm9udENoYXJhY3RlcjoiXFxlYTg0In0pLGkuZ2l0aHViPW5ldyBpKCJnaXRodWIiLHtmb250Q2hhcmFjdGVyOiJcXGVhODQifSksaS50ZXJtaW5hbD1uZXcgaSgidGVybWluYWwiLHtmb250Q2hhcmFjdGVyOiJcXGVhODUifSksaS5jb25zb2xlPW5ldyBpKCJjb25zb2xlIix7Zm9udENoYXJhY3RlcjoiXFxlYTg1In0pLGkucmVwbD1uZXcgaSgicmVwbCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE4NSJ9KSxpLnphcD1uZXcgaSgiemFwIix7Zm9udENoYXJhY3RlcjoiXFxlYTg2In0pLGkuc3ltYm9sRXZlbnQ9bmV3IGkoInN5bWJvbC1ldmVudCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE4NiJ9KSxpLmVycm9yPW5ldyBpKCJlcnJvciIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE4NyJ9KSxpLnN0b3A9bmV3IGkoInN0b3AiLHtmb250Q2hhcmFjdGVyOiJcXGVhODcifSksaS52YXJpYWJsZT1uZXcgaSgidmFyaWFibGUiLHtmb250Q2hhcmFjdGVyOiJcXGVhODgifSksaS5zeW1ib2xWYXJpYWJsZT1uZXcgaSgic3ltYm9sLXZhcmlhYmxlIix7Zm9udENoYXJhY3RlcjoiXFxlYTg4In0pLGkuYXJyYXk9bmV3IGkoImFycmF5Iix7Zm9udENoYXJhY3RlcjoiXFxlYThhIn0pLGkuc3ltYm9sQXJyYXk9bmV3IGkoInN5bWJvbC1hcnJheSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE4YSJ9KSxpLnN5bWJvbE1vZHVsZT1uZXcgaSgic3ltYm9sLW1vZHVsZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE4YiJ9KSxpLnN5bWJvbFBhY2thZ2U9bmV3IGkoInN5bWJvbC1wYWNrYWdlIix7Zm9udENoYXJhY3RlcjoiXFxlYThiIn0pLGkuc3ltYm9sTmFtZXNwYWNlPW5ldyBpKCJzeW1ib2wtbmFtZXNwYWNlIix7Zm9udENoYXJhY3RlcjoiXFxlYThiIn0pLGkuc3ltYm9sT2JqZWN0PW5ldyBpKCJzeW1ib2wtb2JqZWN0Iix7Zm9udENoYXJhY3RlcjoiXFxlYThiIn0pLGkuc3ltYm9sTWV0aG9kPW5ldyBpKCJzeW1ib2wtbWV0aG9kIix7Zm9udENoYXJhY3RlcjoiXFxlYThjIn0pLGkuc3ltYm9sRnVuY3Rpb249bmV3IGkoInN5bWJvbC1mdW5jdGlvbiIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE4YyJ9KSxpLnN5bWJvbENvbnN0cnVjdG9yPW5ldyBpKCJzeW1ib2wtY29uc3RydWN0b3IiLHtmb250Q2hhcmFjdGVyOiJcXGVhOGMifSksaS5zeW1ib2xCb29sZWFuPW5ldyBpKCJzeW1ib2wtYm9vbGVhbiIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE4ZiJ9KSxpLnN5bWJvbE51bGw9bmV3IGkoInN5bWJvbC1udWxsIix7Zm9udENoYXJhY3RlcjoiXFxlYThmIn0pLGkuc3ltYm9sTnVtZXJpYz1uZXcgaSgic3ltYm9sLW51bWVyaWMiLHtmb250Q2hhcmFjdGVyOiJcXGVhOTAifSksaS5zeW1ib2xOdW1iZXI9bmV3IGkoInN5bWJvbC1udW1iZXIiLHtmb250Q2hhcmFjdGVyOiJcXGVhOTAifSksaS5zeW1ib2xTdHJ1Y3R1cmU9bmV3IGkoInN5bWJvbC1zdHJ1Y3R1cmUiLHtmb250Q2hhcmFjdGVyOiJcXGVhOTEifSksaS5zeW1ib2xTdHJ1Y3Q9bmV3IGkoInN5bWJvbC1zdHJ1Y3QiLHtmb250Q2hhcmFjdGVyOiJcXGVhOTEifSksaS5zeW1ib2xQYXJhbWV0ZXI9bmV3IGkoInN5bWJvbC1wYXJhbWV0ZXIiLHtmb250Q2hhcmFjdGVyOiJcXGVhOTIifSksaS5zeW1ib2xUeXBlUGFyYW1ldGVyPW5ldyBpKCJzeW1ib2wtdHlwZS1wYXJhbWV0ZXIiLHtmb250Q2hhcmFjdGVyOiJcXGVhOTIifSksaS5zeW1ib2xLZXk9bmV3IGkoInN5bWJvbC1rZXkiLHtmb250Q2hhcmFjdGVyOiJcXGVhOTMifSksaS5zeW1ib2xUZXh0PW5ldyBpKCJzeW1ib2wtdGV4dCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE5MyJ9KSxpLnN5bWJvbFJlZmVyZW5jZT1uZXcgaSgic3ltYm9sLXJlZmVyZW5jZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE5NCJ9KSxpLmdvVG9GaWxlPW5ldyBpKCJnby10by1maWxlIix7Zm9udENoYXJhY3RlcjoiXFxlYTk0In0pLGkuc3ltYm9sRW51bT1uZXcgaSgic3ltYm9sLWVudW0iLHtmb250Q2hhcmFjdGVyOiJcXGVhOTUifSksaS5zeW1ib2xWYWx1ZT1uZXcgaSgic3ltYm9sLXZhbHVlIix7Zm9udENoYXJhY3RlcjoiXFxlYTk1In0pLGkuc3ltYm9sUnVsZXI9bmV3IGkoInN5bWJvbC1ydWxlciIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE5NiJ9KSxpLnN5bWJvbFVuaXQ9bmV3IGkoInN5bWJvbC11bml0Iix7Zm9udENoYXJhY3RlcjoiXFxlYTk2In0pLGkuYWN0aXZhdGVCcmVha3BvaW50cz1uZXcgaSgiYWN0aXZhdGUtYnJlYWtwb2ludHMiLHtmb250Q2hhcmFjdGVyOiJcXGVhOTcifSksaS5hcmNoaXZlPW5ldyBpKCJhcmNoaXZlIix7Zm9udENoYXJhY3RlcjoiXFxlYTk4In0pLGkuYXJyb3dCb3RoPW5ldyBpKCJhcnJvdy1ib3RoIix7Zm9udENoYXJhY3RlcjoiXFxlYTk5In0pLGkuYXJyb3dEb3duPW5ldyBpKCJhcnJvdy1kb3duIix7Zm9udENoYXJhY3RlcjoiXFxlYTlhIn0pLGkuYXJyb3dMZWZ0PW5ldyBpKCJhcnJvdy1sZWZ0Iix7Zm9udENoYXJhY3RlcjoiXFxlYTliIn0pLGkuYXJyb3dSaWdodD1uZXcgaSgiYXJyb3ctcmlnaHQiLHtmb250Q2hhcmFjdGVyOiJcXGVhOWMifSksaS5hcnJvd1NtYWxsRG93bj1uZXcgaSgiYXJyb3ctc21hbGwtZG93biIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE5ZCJ9KSxpLmFycm93U21hbGxMZWZ0PW5ldyBpKCJhcnJvdy1zbWFsbC1sZWZ0Iix7Zm9udENoYXJhY3RlcjoiXFxlYTllIn0pLGkuYXJyb3dTbWFsbFJpZ2h0PW5ldyBpKCJhcnJvdy1zbWFsbC1yaWdodCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE5ZiJ9KSxpLmFycm93U21hbGxVcD1uZXcgaSgiYXJyb3ctc21hbGwtdXAiLHtmb250Q2hhcmFjdGVyOiJcXGVhYTAifSksaS5hcnJvd1VwPW5ldyBpKCJhcnJvdy11cCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFhMSJ9KSxpLmJlbGw9bmV3IGkoImJlbGwiLHtmb250Q2hhcmFjdGVyOiJcXGVhYTIifSksaS5ib2xkPW5ldyBpKCJib2xkIix7Zm9udENoYXJhY3RlcjoiXFxlYWEzIn0pLGkuYm9vaz1uZXcgaSgiYm9vayIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFhNCJ9KSxpLmJvb2ttYXJrPW5ldyBpKCJib29rbWFyayIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFhNSJ9KSxpLmRlYnVnQnJlYWtwb2ludENvbmRpdGlvbmFsVW52ZXJpZmllZD1uZXcgaSgiZGVidWctYnJlYWtwb2ludC1jb25kaXRpb25hbC11bnZlcmlmaWVkIix7Zm9udENoYXJhY3RlcjoiXFxlYWE2In0pLGkuZGVidWdCcmVha3BvaW50Q29uZGl0aW9uYWw9bmV3IGkoImRlYnVnLWJyZWFrcG9pbnQtY29uZGl0aW9uYWwiLHtmb250Q2hhcmFjdGVyOiJcXGVhYTcifSksaS5kZWJ1Z0JyZWFrcG9pbnRDb25kaXRpb25hbERpc2FibGVkPW5ldyBpKCJkZWJ1Zy1icmVha3BvaW50LWNvbmRpdGlvbmFsLWRpc2FibGVkIix7Zm9udENoYXJhY3RlcjoiXFxlYWE3In0pLGkuZGVidWdCcmVha3BvaW50RGF0YVVudmVyaWZpZWQ9bmV3IGkoImRlYnVnLWJyZWFrcG9pbnQtZGF0YS11bnZlcmlmaWVkIix7Zm9udENoYXJhY3RlcjoiXFxlYWE4In0pLGkuZGVidWdCcmVha3BvaW50RGF0YT1uZXcgaSgiZGVidWctYnJlYWtwb2ludC1kYXRhIix7Zm9udENoYXJhY3RlcjoiXFxlYWE5In0pLGkuZGVidWdCcmVha3BvaW50RGF0YURpc2FibGVkPW5ldyBpKCJkZWJ1Zy1icmVha3BvaW50LWRhdGEtZGlzYWJsZWQiLHtmb250Q2hhcmFjdGVyOiJcXGVhYTkifSksaS5kZWJ1Z0JyZWFrcG9pbnRMb2dVbnZlcmlmaWVkPW5ldyBpKCJkZWJ1Zy1icmVha3BvaW50LWxvZy11bnZlcmlmaWVkIix7Zm9udENoYXJhY3RlcjoiXFxlYWFhIn0pLGkuZGVidWdCcmVha3BvaW50TG9nPW5ldyBpKCJkZWJ1Zy1icmVha3BvaW50LWxvZyIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFhYiJ9KSxpLmRlYnVnQnJlYWtwb2ludExvZ0Rpc2FibGVkPW5ldyBpKCJkZWJ1Zy1icmVha3BvaW50LWxvZy1kaXNhYmxlZCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFhYiJ9KSxpLmJyaWVmY2FzZT1uZXcgaSgiYnJpZWZjYXNlIix7Zm9udENoYXJhY3RlcjoiXFxlYWFjIn0pLGkuYnJvYWRjYXN0PW5ldyBpKCJicm9hZGNhc3QiLHtmb250Q2hhcmFjdGVyOiJcXGVhYWQifSksaS5icm93c2VyPW5ldyBpKCJicm93c2VyIix7Zm9udENoYXJhY3RlcjoiXFxlYWFlIn0pLGkuYnVnPW5ldyBpKCJidWciLHtmb250Q2hhcmFjdGVyOiJcXGVhYWYifSksaS5jYWxlbmRhcj1uZXcgaSgiY2FsZW5kYXIiLHtmb250Q2hhcmFjdGVyOiJcXGVhYjAifSksaS5jYXNlU2Vuc2l0aXZlPW5ldyBpKCJjYXNlLXNlbnNpdGl2ZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFiMSJ9KSxpLmNoZWNrPW5ldyBpKCJjaGVjayIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFiMiJ9KSxpLmNoZWNrbGlzdD1uZXcgaSgiY2hlY2tsaXN0Iix7Zm9udENoYXJhY3RlcjoiXFxlYWIzIn0pLGkuY2hldnJvbkRvd249bmV3IGkoImNoZXZyb24tZG93biIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFiNCJ9KSxpLmRyb3BEb3duQnV0dG9uPW5ldyBpKCJkcm9wLWRvd24tYnV0dG9uIixpLmNoZXZyb25Eb3duLmRlZmluaXRpb24pLGkuY2hldnJvbkxlZnQ9bmV3IGkoImNoZXZyb24tbGVmdCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFiNSJ9KSxpLmNoZXZyb25SaWdodD1uZXcgaSgiY2hldnJvbi1yaWdodCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFiNiJ9KSxpLmNoZXZyb25VcD1uZXcgaSgiY2hldnJvbi11cCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFiNyJ9KSxpLmNocm9tZUNsb3NlPW5ldyBpKCJjaHJvbWUtY2xvc2UiLHtmb250Q2hhcmFjdGVyOiJcXGVhYjgifSksaS5jaHJvbWVNYXhpbWl6ZT1uZXcgaSgiY2hyb21lLW1heGltaXplIix7Zm9udENoYXJhY3RlcjoiXFxlYWI5In0pLGkuY2hyb21lTWluaW1pemU9bmV3IGkoImNocm9tZS1taW5pbWl6ZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFiYSJ9KSxpLmNocm9tZVJlc3RvcmU9bmV3IGkoImNocm9tZS1yZXN0b3JlIix7Zm9udENoYXJhY3RlcjoiXFxlYWJiIn0pLGkuY2lyY2xlT3V0bGluZT1uZXcgaSgiY2lyY2xlLW91dGxpbmUiLHtmb250Q2hhcmFjdGVyOiJcXGVhYmMifSksaS5kZWJ1Z0JyZWFrcG9pbnRVbnZlcmlmaWVkPW5ldyBpKCJkZWJ1Zy1icmVha3BvaW50LXVudmVyaWZpZWQiLHtmb250Q2hhcmFjdGVyOiJcXGVhYmMifSksaS5jaXJjbGVTbGFzaD1uZXcgaSgiY2lyY2xlLXNsYXNoIix7Zm9udENoYXJhY3RlcjoiXFxlYWJkIn0pLGkuY2lyY3VpdEJvYXJkPW5ldyBpKCJjaXJjdWl0LWJvYXJkIix7Zm9udENoYXJhY3RlcjoiXFxlYWJlIn0pLGkuY2xlYXJBbGw9bmV3IGkoImNsZWFyLWFsbCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFiZiJ9KSxpLmNsaXBweT1uZXcgaSgiY2xpcHB5Iix7Zm9udENoYXJhY3RlcjoiXFxlYWMwIn0pLGkuY2xvc2VBbGw9bmV3IGkoImNsb3NlLWFsbCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFjMSJ9KSxpLmNsb3VkRG93bmxvYWQ9bmV3IGkoImNsb3VkLWRvd25sb2FkIix7Zm9udENoYXJhY3RlcjoiXFxlYWMyIn0pLGkuY2xvdWRVcGxvYWQ9bmV3IGkoImNsb3VkLXVwbG9hZCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFjMyJ9KSxpLmNvZGU9bmV3IGkoImNvZGUiLHtmb250Q2hhcmFjdGVyOiJcXGVhYzQifSksaS5jb2xsYXBzZUFsbD1uZXcgaSgiY29sbGFwc2UtYWxsIix7Zm9udENoYXJhY3RlcjoiXFxlYWM1In0pLGkuY29sb3JNb2RlPW5ldyBpKCJjb2xvci1tb2RlIix7Zm9udENoYXJhY3RlcjoiXFxlYWM2In0pLGkuY29tbWVudERpc2N1c3Npb249bmV3IGkoImNvbW1lbnQtZGlzY3Vzc2lvbiIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFjNyJ9KSxpLmNvbXBhcmVDaGFuZ2VzPW5ldyBpKCJjb21wYXJlLWNoYW5nZXMiLHtmb250Q2hhcmFjdGVyOiJcXGVhZmQifSksaS5jcmVkaXRDYXJkPW5ldyBpKCJjcmVkaXQtY2FyZCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFjOSJ9KSxpLmRhc2g9bmV3IGkoImRhc2giLHtmb250Q2hhcmFjdGVyOiJcXGVhY2MifSksaS5kYXNoYm9hcmQ9bmV3IGkoImRhc2hib2FyZCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFjZCJ9KSxpLmRhdGFiYXNlPW5ldyBpKCJkYXRhYmFzZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFjZSJ9KSxpLmRlYnVnQ29udGludWU9bmV3IGkoImRlYnVnLWNvbnRpbnVlIix7Zm9udENoYXJhY3RlcjoiXFxlYWNmIn0pLGkuZGVidWdEaXNjb25uZWN0PW5ldyBpKCJkZWJ1Zy1kaXNjb25uZWN0Iix7Zm9udENoYXJhY3RlcjoiXFxlYWQwIn0pLGkuZGVidWdQYXVzZT1uZXcgaSgiZGVidWctcGF1c2UiLHtmb250Q2hhcmFjdGVyOiJcXGVhZDEifSksaS5kZWJ1Z1Jlc3RhcnQ9bmV3IGkoImRlYnVnLXJlc3RhcnQiLHtmb250Q2hhcmFjdGVyOiJcXGVhZDIifSksaS5kZWJ1Z1N0YXJ0PW5ldyBpKCJkZWJ1Zy1zdGFydCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFkMyJ9KSxpLmRlYnVnU3RlcEludG89bmV3IGkoImRlYnVnLXN0ZXAtaW50byIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFkNCJ9KSxpLmRlYnVnU3RlcE91dD1uZXcgaSgiZGVidWctc3RlcC1vdXQiLHtmb250Q2hhcmFjdGVyOiJcXGVhZDUifSksaS5kZWJ1Z1N0ZXBPdmVyPW5ldyBpKCJkZWJ1Zy1zdGVwLW92ZXIiLHtmb250Q2hhcmFjdGVyOiJcXGVhZDYifSksaS5kZWJ1Z1N0b3A9bmV3IGkoImRlYnVnLXN0b3AiLHtmb250Q2hhcmFjdGVyOiJcXGVhZDcifSksaS5kZWJ1Zz1uZXcgaSgiZGVidWciLHtmb250Q2hhcmFjdGVyOiJcXGVhZDgifSksaS5kZXZpY2VDYW1lcmFWaWRlbz1uZXcgaSgiZGV2aWNlLWNhbWVyYS12aWRlbyIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFkOSJ9KSxpLmRldmljZUNhbWVyYT1uZXcgaSgiZGV2aWNlLWNhbWVyYSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFkYSJ9KSxpLmRldmljZU1vYmlsZT1uZXcgaSgiZGV2aWNlLW1vYmlsZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFkYiJ9KSxpLmRpZmZBZGRlZD1uZXcgaSgiZGlmZi1hZGRlZCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFkYyJ9KSxpLmRpZmZJZ25vcmVkPW5ldyBpKCJkaWZmLWlnbm9yZWQiLHtmb250Q2hhcmFjdGVyOiJcXGVhZGQifSksaS5kaWZmTW9kaWZpZWQ9bmV3IGkoImRpZmYtbW9kaWZpZWQiLHtmb250Q2hhcmFjdGVyOiJcXGVhZGUifSksaS5kaWZmUmVtb3ZlZD1uZXcgaSgiZGlmZi1yZW1vdmVkIix7Zm9udENoYXJhY3RlcjoiXFxlYWRmIn0pLGkuZGlmZlJlbmFtZWQ9bmV3IGkoImRpZmYtcmVuYW1lZCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFlMCJ9KSxpLmRpZmY9bmV3IGkoImRpZmYiLHtmb250Q2hhcmFjdGVyOiJcXGVhZTEifSksaS5kaXNjYXJkPW5ldyBpKCJkaXNjYXJkIix7Zm9udENoYXJhY3RlcjoiXFxlYWUyIn0pLGkuZWRpdG9yTGF5b3V0PW5ldyBpKCJlZGl0b3ItbGF5b3V0Iix7Zm9udENoYXJhY3RlcjoiXFxlYWUzIn0pLGkuZW1wdHlXaW5kb3c9bmV3IGkoImVtcHR5LXdpbmRvdyIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFlNCJ9KSxpLmV4Y2x1ZGU9bmV3IGkoImV4Y2x1ZGUiLHtmb250Q2hhcmFjdGVyOiJcXGVhZTUifSksaS5leHRlbnNpb25zPW5ldyBpKCJleHRlbnNpb25zIix7Zm9udENoYXJhY3RlcjoiXFxlYWU2In0pLGkuZXllQ2xvc2VkPW5ldyBpKCJleWUtY2xvc2VkIix7Zm9udENoYXJhY3RlcjoiXFxlYWU3In0pLGkuZmlsZUJpbmFyeT1uZXcgaSgiZmlsZS1iaW5hcnkiLHtmb250Q2hhcmFjdGVyOiJcXGVhZTgifSksaS5maWxlQ29kZT1uZXcgaSgiZmlsZS1jb2RlIix7Zm9udENoYXJhY3RlcjoiXFxlYWU5In0pLGkuZmlsZU1lZGlhPW5ldyBpKCJmaWxlLW1lZGlhIix7Zm9udENoYXJhY3RlcjoiXFxlYWVhIn0pLGkuZmlsZVBkZj1uZXcgaSgiZmlsZS1wZGYiLHtmb250Q2hhcmFjdGVyOiJcXGVhZWIifSksaS5maWxlU3VibW9kdWxlPW5ldyBpKCJmaWxlLXN1Ym1vZHVsZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFlYyJ9KSxpLmZpbGVTeW1saW5rRGlyZWN0b3J5PW5ldyBpKCJmaWxlLXN5bWxpbmstZGlyZWN0b3J5Iix7Zm9udENoYXJhY3RlcjoiXFxlYWVkIn0pLGkuZmlsZVN5bWxpbmtGaWxlPW5ldyBpKCJmaWxlLXN5bWxpbmstZmlsZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFlZSJ9KSxpLmZpbGVaaXA9bmV3IGkoImZpbGUtemlwIix7Zm9udENoYXJhY3RlcjoiXFxlYWVmIn0pLGkuZmlsZXM9bmV3IGkoImZpbGVzIix7Zm9udENoYXJhY3RlcjoiXFxlYWYwIn0pLGkuZmlsdGVyPW5ldyBpKCJmaWx0ZXIiLHtmb250Q2hhcmFjdGVyOiJcXGVhZjEifSksaS5mbGFtZT1uZXcgaSgiZmxhbWUiLHtmb250Q2hhcmFjdGVyOiJcXGVhZjIifSksaS5mb2xkRG93bj1uZXcgaSgiZm9sZC1kb3duIix7Zm9udENoYXJhY3RlcjoiXFxlYWYzIn0pLGkuZm9sZFVwPW5ldyBpKCJmb2xkLXVwIix7Zm9udENoYXJhY3RlcjoiXFxlYWY0In0pLGkuZm9sZD1uZXcgaSgiZm9sZCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFmNSJ9KSxpLmZvbGRlckFjdGl2ZT1uZXcgaSgiZm9sZGVyLWFjdGl2ZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFmNiJ9KSxpLmZvbGRlck9wZW5lZD1uZXcgaSgiZm9sZGVyLW9wZW5lZCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFmNyJ9KSxpLmdlYXI9bmV3IGkoImdlYXIiLHtmb250Q2hhcmFjdGVyOiJcXGVhZjgifSksaS5naWZ0PW5ldyBpKCJnaWZ0Iix7Zm9udENoYXJhY3RlcjoiXFxlYWY5In0pLGkuZ2lzdFNlY3JldD1uZXcgaSgiZ2lzdC1zZWNyZXQiLHtmb250Q2hhcmFjdGVyOiJcXGVhZmEifSksaS5naXN0PW5ldyBpKCJnaXN0Iix7Zm9udENoYXJhY3RlcjoiXFxlYWZiIn0pLGkuZ2l0Q29tbWl0PW5ldyBpKCJnaXQtY29tbWl0Iix7Zm9udENoYXJhY3RlcjoiXFxlYWZjIn0pLGkuZ2l0Q29tcGFyZT1uZXcgaSgiZ2l0LWNvbXBhcmUiLHtmb250Q2hhcmFjdGVyOiJcXGVhZmQifSksaS5naXRNZXJnZT1uZXcgaSgiZ2l0LW1lcmdlIix7Zm9udENoYXJhY3RlcjoiXFxlYWZlIn0pLGkuZ2l0aHViQWN0aW9uPW5ldyBpKCJnaXRodWItYWN0aW9uIix7Zm9udENoYXJhY3RlcjoiXFxlYWZmIn0pLGkuZ2l0aHViQWx0PW5ldyBpKCJnaXRodWItYWx0Iix7Zm9udENoYXJhY3RlcjoiXFxlYjAwIn0pLGkuZ2xvYmU9bmV3IGkoImdsb2JlIix7Zm9udENoYXJhY3RlcjoiXFxlYjAxIn0pLGkuZ3JhYmJlcj1uZXcgaSgiZ3JhYmJlciIse2ZvbnRDaGFyYWN0ZXI6IlxcZWIwMiJ9KSxpLmdyYXBoPW5ldyBpKCJncmFwaCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWIwMyJ9KSxpLmdyaXBwZXI9bmV3IGkoImdyaXBwZXIiLHtmb250Q2hhcmFjdGVyOiJcXGViMDQifSksaS5oZWFydD1uZXcgaSgiaGVhcnQiLHtmb250Q2hhcmFjdGVyOiJcXGViMDUifSksaS5ob21lPW5ldyBpKCJob21lIix7Zm9udENoYXJhY3RlcjoiXFxlYjA2In0pLGkuaG9yaXpvbnRhbFJ1bGU9bmV3IGkoImhvcml6b250YWwtcnVsZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWIwNyJ9KSxpLmh1Ym90PW5ldyBpKCJodWJvdCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWIwOCJ9KSxpLmluYm94PW5ldyBpKCJpbmJveCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWIwOSJ9KSxpLmlzc3VlQ2xvc2VkPW5ldyBpKCJpc3N1ZS1jbG9zZWQiLHtmb250Q2hhcmFjdGVyOiJcXGViYTQifSksaS5pc3N1ZVJlb3BlbmVkPW5ldyBpKCJpc3N1ZS1yZW9wZW5lZCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWIwYiJ9KSxpLmlzc3Vlcz1uZXcgaSgiaXNzdWVzIix7Zm9udENoYXJhY3RlcjoiXFxlYjBjIn0pLGkuaXRhbGljPW5ldyBpKCJpdGFsaWMiLHtmb250Q2hhcmFjdGVyOiJcXGViMGQifSksaS5qZXJzZXk9bmV3IGkoImplcnNleSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWIwZSJ9KSxpLmpzb249bmV3IGkoImpzb24iLHtmb250Q2hhcmFjdGVyOiJcXGViMGYifSksaS5rZWJhYlZlcnRpY2FsPW5ldyBpKCJrZWJhYi12ZXJ0aWNhbCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWIxMCJ9KSxpLmtleT1uZXcgaSgia2V5Iix7Zm9udENoYXJhY3RlcjoiXFxlYjExIn0pLGkubGF3PW5ldyBpKCJsYXciLHtmb250Q2hhcmFjdGVyOiJcXGViMTIifSksaS5saWdodGJ1bGJBdXRvZml4PW5ldyBpKCJsaWdodGJ1bGItYXV0b2ZpeCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWIxMyJ9KSxpLmxpbmtFeHRlcm5hbD1uZXcgaSgibGluay1leHRlcm5hbCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWIxNCJ9KSxpLmxpbms9bmV3IGkoImxpbmsiLHtmb250Q2hhcmFjdGVyOiJcXGViMTUifSksaS5saXN0T3JkZXJlZD1uZXcgaSgibGlzdC1vcmRlcmVkIix7Zm9udENoYXJhY3RlcjoiXFxlYjE2In0pLGkubGlzdFVub3JkZXJlZD1uZXcgaSgibGlzdC11bm9yZGVyZWQiLHtmb250Q2hhcmFjdGVyOiJcXGViMTcifSksaS5saXZlU2hhcmU9bmV3IGkoImxpdmUtc2hhcmUiLHtmb250Q2hhcmFjdGVyOiJcXGViMTgifSksaS5sb2FkaW5nPW5ldyBpKCJsb2FkaW5nIix7Zm9udENoYXJhY3RlcjoiXFxlYjE5In0pLGkubG9jYXRpb249bmV3IGkoImxvY2F0aW9uIix7Zm9udENoYXJhY3RlcjoiXFxlYjFhIn0pLGkubWFpbFJlYWQ9bmV3IGkoIm1haWwtcmVhZCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWIxYiJ9KSxpLm1haWw9bmV3IGkoIm1haWwiLHtmb250Q2hhcmFjdGVyOiJcXGViMWMifSksaS5tYXJrZG93bj1uZXcgaSgibWFya2Rvd24iLHtmb250Q2hhcmFjdGVyOiJcXGViMWQifSksaS5tZWdhcGhvbmU9bmV3IGkoIm1lZ2FwaG9uZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWIxZSJ9KSxpLm1lbnRpb249bmV3IGkoIm1lbnRpb24iLHtmb250Q2hhcmFjdGVyOiJcXGViMWYifSksaS5taWxlc3RvbmU9bmV3IGkoIm1pbGVzdG9uZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWIyMCJ9KSxpLm1vcnRhckJvYXJkPW5ldyBpKCJtb3J0YXItYm9hcmQiLHtmb250Q2hhcmFjdGVyOiJcXGViMjEifSksaS5tb3ZlPW5ldyBpKCJtb3ZlIix7Zm9udENoYXJhY3RlcjoiXFxlYjIyIn0pLGkubXVsdGlwbGVXaW5kb3dzPW5ldyBpKCJtdWx0aXBsZS13aW5kb3dzIix7Zm9udENoYXJhY3RlcjoiXFxlYjIzIn0pLGkubXV0ZT1uZXcgaSgibXV0ZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWIyNCJ9KSxpLm5vTmV3bGluZT1uZXcgaSgibm8tbmV3bGluZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWIyNSJ9KSxpLm5vdGU9bmV3IGkoIm5vdGUiLHtmb250Q2hhcmFjdGVyOiJcXGViMjYifSksaS5vY3RvZmFjZT1uZXcgaSgib2N0b2ZhY2UiLHtmb250Q2hhcmFjdGVyOiJcXGViMjcifSksaS5vcGVuUHJldmlldz1uZXcgaSgib3Blbi1wcmV2aWV3Iix7Zm9udENoYXJhY3RlcjoiXFxlYjI4In0pLGkucGFja2FnZV89bmV3IGkoInBhY2thZ2UiLHtmb250Q2hhcmFjdGVyOiJcXGViMjkifSksaS5wYWludGNhbj1uZXcgaSgicGFpbnRjYW4iLHtmb250Q2hhcmFjdGVyOiJcXGViMmEifSksaS5waW49bmV3IGkoInBpbiIse2ZvbnRDaGFyYWN0ZXI6IlxcZWIyYiJ9KSxpLnBsYXk9bmV3IGkoInBsYXkiLHtmb250Q2hhcmFjdGVyOiJcXGViMmMifSksaS5ydW49bmV3IGkoInJ1biIse2ZvbnRDaGFyYWN0ZXI6IlxcZWIyYyJ9KSxpLnBsdWc9bmV3IGkoInBsdWciLHtmb250Q2hhcmFjdGVyOiJcXGViMmQifSksaS5wcmVzZXJ2ZUNhc2U9bmV3IGkoInByZXNlcnZlLWNhc2UiLHtmb250Q2hhcmFjdGVyOiJcXGViMmUifSksaS5wcmV2aWV3PW5ldyBpKCJwcmV2aWV3Iix7Zm9udENoYXJhY3RlcjoiXFxlYjJmIn0pLGkucHJvamVjdD1uZXcgaSgicHJvamVjdCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWIzMCJ9KSxpLnB1bHNlPW5ldyBpKCJwdWxzZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWIzMSJ9KSxpLnF1ZXN0aW9uPW5ldyBpKCJxdWVzdGlvbiIse2ZvbnRDaGFyYWN0ZXI6IlxcZWIzMiJ9KSxpLnF1b3RlPW5ldyBpKCJxdW90ZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWIzMyJ9KSxpLnJhZGlvVG93ZXI9bmV3IGkoInJhZGlvLXRvd2VyIix7Zm9udENoYXJhY3RlcjoiXFxlYjM0In0pLGkucmVhY3Rpb25zPW5ldyBpKCJyZWFjdGlvbnMiLHtmb250Q2hhcmFjdGVyOiJcXGViMzUifSksaS5yZWZlcmVuY2VzPW5ldyBpKCJyZWZlcmVuY2VzIix7Zm9udENoYXJhY3RlcjoiXFxlYjM2In0pLGkucmVmcmVzaD1uZXcgaSgicmVmcmVzaCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWIzNyJ9KSxpLnJlZ2V4PW5ldyBpKCJyZWdleCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWIzOCJ9KSxpLnJlbW90ZUV4cGxvcmVyPW5ldyBpKCJyZW1vdGUtZXhwbG9yZXIiLHtmb250Q2hhcmFjdGVyOiJcXGViMzkifSksaS5yZW1vdGU9bmV3IGkoInJlbW90ZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWIzYSJ9KSxpLnJlbW92ZT1uZXcgaSgicmVtb3ZlIix7Zm9udENoYXJhY3RlcjoiXFxlYjNiIn0pLGkucmVwbGFjZUFsbD1uZXcgaSgicmVwbGFjZS1hbGwiLHtmb250Q2hhcmFjdGVyOiJcXGViM2MifSksaS5yZXBsYWNlPW5ldyBpKCJyZXBsYWNlIix7Zm9udENoYXJhY3RlcjoiXFxlYjNkIn0pLGkucmVwb0Nsb25lPW5ldyBpKCJyZXBvLWNsb25lIix7Zm9udENoYXJhY3RlcjoiXFxlYjNlIn0pLGkucmVwb0ZvcmNlUHVzaD1uZXcgaSgicmVwby1mb3JjZS1wdXNoIix7Zm9udENoYXJhY3RlcjoiXFxlYjNmIn0pLGkucmVwb1B1bGw9bmV3IGkoInJlcG8tcHVsbCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI0MCJ9KSxpLnJlcG9QdXNoPW5ldyBpKCJyZXBvLXB1c2giLHtmb250Q2hhcmFjdGVyOiJcXGViNDEifSksaS5yZXBvcnQ9bmV3IGkoInJlcG9ydCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI0MiJ9KSxpLnJlcXVlc3RDaGFuZ2VzPW5ldyBpKCJyZXF1ZXN0LWNoYW5nZXMiLHtmb250Q2hhcmFjdGVyOiJcXGViNDMifSksaS5yb2NrZXQ9bmV3IGkoInJvY2tldCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI0NCJ9KSxpLnJvb3RGb2xkZXJPcGVuZWQ9bmV3IGkoInJvb3QtZm9sZGVyLW9wZW5lZCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI0NSJ9KSxpLnJvb3RGb2xkZXI9bmV3IGkoInJvb3QtZm9sZGVyIix7Zm9udENoYXJhY3RlcjoiXFxlYjQ2In0pLGkucnNzPW5ldyBpKCJyc3MiLHtmb250Q2hhcmFjdGVyOiJcXGViNDcifSksaS5ydWJ5PW5ldyBpKCJydWJ5Iix7Zm9udENoYXJhY3RlcjoiXFxlYjQ4In0pLGkuc2F2ZUFsbD1uZXcgaSgic2F2ZS1hbGwiLHtmb250Q2hhcmFjdGVyOiJcXGViNDkifSksaS5zYXZlQXM9bmV3IGkoInNhdmUtYXMiLHtmb250Q2hhcmFjdGVyOiJcXGViNGEifSksaS5zYXZlPW5ldyBpKCJzYXZlIix7Zm9udENoYXJhY3RlcjoiXFxlYjRiIn0pLGkuc2NyZWVuRnVsbD1uZXcgaSgic2NyZWVuLWZ1bGwiLHtmb250Q2hhcmFjdGVyOiJcXGViNGMifSksaS5zY3JlZW5Ob3JtYWw9bmV3IGkoInNjcmVlbi1ub3JtYWwiLHtmb250Q2hhcmFjdGVyOiJcXGViNGQifSksaS5zZWFyY2hTdG9wPW5ldyBpKCJzZWFyY2gtc3RvcCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI0ZSJ9KSxpLnNlcnZlcj1uZXcgaSgic2VydmVyIix7Zm9udENoYXJhY3RlcjoiXFxlYjUwIn0pLGkuc2V0dGluZ3NHZWFyPW5ldyBpKCJzZXR0aW5ncy1nZWFyIix7Zm9udENoYXJhY3RlcjoiXFxlYjUxIn0pLGkuc2V0dGluZ3M9bmV3IGkoInNldHRpbmdzIix7Zm9udENoYXJhY3RlcjoiXFxlYjUyIn0pLGkuc2hpZWxkPW5ldyBpKCJzaGllbGQiLHtmb250Q2hhcmFjdGVyOiJcXGViNTMifSksaS5zbWlsZXk9bmV3IGkoInNtaWxleSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI1NCJ9KSxpLnNvcnRQcmVjZWRlbmNlPW5ldyBpKCJzb3J0LXByZWNlZGVuY2UiLHtmb250Q2hhcmFjdGVyOiJcXGViNTUifSksaS5zcGxpdEhvcml6b250YWw9bmV3IGkoInNwbGl0LWhvcml6b250YWwiLHtmb250Q2hhcmFjdGVyOiJcXGViNTYifSksaS5zcGxpdFZlcnRpY2FsPW5ldyBpKCJzcGxpdC12ZXJ0aWNhbCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI1NyJ9KSxpLnNxdWlycmVsPW5ldyBpKCJzcXVpcnJlbCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI1OCJ9KSxpLnN0YXJGdWxsPW5ldyBpKCJzdGFyLWZ1bGwiLHtmb250Q2hhcmFjdGVyOiJcXGViNTkifSksaS5zdGFySGFsZj1uZXcgaSgic3Rhci1oYWxmIix7Zm9udENoYXJhY3RlcjoiXFxlYjVhIn0pLGkuc3ltYm9sQ2xhc3M9bmV3IGkoInN5bWJvbC1jbGFzcyIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI1YiJ9KSxpLnN5bWJvbENvbG9yPW5ldyBpKCJzeW1ib2wtY29sb3IiLHtmb250Q2hhcmFjdGVyOiJcXGViNWMifSksaS5zeW1ib2xDdXN0b21Db2xvcj1uZXcgaSgic3ltYm9sLWN1c3RvbWNvbG9yIix7Zm9udENoYXJhY3RlcjoiXFxlYjVjIn0pLGkuc3ltYm9sQ29uc3RhbnQ9bmV3IGkoInN5bWJvbC1jb25zdGFudCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI1ZCJ9KSxpLnN5bWJvbEVudW1NZW1iZXI9bmV3IGkoInN5bWJvbC1lbnVtLW1lbWJlciIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI1ZSJ9KSxpLnN5bWJvbEZpZWxkPW5ldyBpKCJzeW1ib2wtZmllbGQiLHtmb250Q2hhcmFjdGVyOiJcXGViNWYifSksaS5zeW1ib2xGaWxlPW5ldyBpKCJzeW1ib2wtZmlsZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI2MCJ9KSxpLnN5bWJvbEludGVyZmFjZT1uZXcgaSgic3ltYm9sLWludGVyZmFjZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI2MSJ9KSxpLnN5bWJvbEtleXdvcmQ9bmV3IGkoInN5bWJvbC1rZXl3b3JkIix7Zm9udENoYXJhY3RlcjoiXFxlYjYyIn0pLGkuc3ltYm9sTWlzYz1uZXcgaSgic3ltYm9sLW1pc2MiLHtmb250Q2hhcmFjdGVyOiJcXGViNjMifSksaS5zeW1ib2xPcGVyYXRvcj1uZXcgaSgic3ltYm9sLW9wZXJhdG9yIix7Zm9udENoYXJhY3RlcjoiXFxlYjY0In0pLGkuc3ltYm9sUHJvcGVydHk9bmV3IGkoInN5bWJvbC1wcm9wZXJ0eSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI2NSJ9KSxpLndyZW5jaD1uZXcgaSgid3JlbmNoIix7Zm9udENoYXJhY3RlcjoiXFxlYjY1In0pLGkud3JlbmNoU3ViYWN0aW9uPW5ldyBpKCJ3cmVuY2gtc3ViYWN0aW9uIix7Zm9udENoYXJhY3RlcjoiXFxlYjY1In0pLGkuc3ltYm9sU25pcHBldD1uZXcgaSgic3ltYm9sLXNuaXBwZXQiLHtmb250Q2hhcmFjdGVyOiJcXGViNjYifSksaS50YXNrbGlzdD1uZXcgaSgidGFza2xpc3QiLHtmb250Q2hhcmFjdGVyOiJcXGViNjcifSksaS50ZWxlc2NvcGU9bmV3IGkoInRlbGVzY29wZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI2OCJ9KSxpLnRleHRTaXplPW5ldyBpKCJ0ZXh0LXNpemUiLHtmb250Q2hhcmFjdGVyOiJcXGViNjkifSksaS50aHJlZUJhcnM9bmV3IGkoInRocmVlLWJhcnMiLHtmb250Q2hhcmFjdGVyOiJcXGViNmEifSksaS50aHVtYnNkb3duPW5ldyBpKCJ0aHVtYnNkb3duIix7Zm9udENoYXJhY3RlcjoiXFxlYjZiIn0pLGkudGh1bWJzdXA9bmV3IGkoInRodW1ic3VwIix7Zm9udENoYXJhY3RlcjoiXFxlYjZjIn0pLGkudG9vbHM9bmV3IGkoInRvb2xzIix7Zm9udENoYXJhY3RlcjoiXFxlYjZkIn0pLGkudHJpYW5nbGVEb3duPW5ldyBpKCJ0cmlhbmdsZS1kb3duIix7Zm9udENoYXJhY3RlcjoiXFxlYjZlIn0pLGkudHJpYW5nbGVMZWZ0PW5ldyBpKCJ0cmlhbmdsZS1sZWZ0Iix7Zm9udENoYXJhY3RlcjoiXFxlYjZmIn0pLGkudHJpYW5nbGVSaWdodD1uZXcgaSgidHJpYW5nbGUtcmlnaHQiLHtmb250Q2hhcmFjdGVyOiJcXGViNzAifSksaS50cmlhbmdsZVVwPW5ldyBpKCJ0cmlhbmdsZS11cCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI3MSJ9KSxpLnR3aXR0ZXI9bmV3IGkoInR3aXR0ZXIiLHtmb250Q2hhcmFjdGVyOiJcXGViNzIifSksaS51bmZvbGQ9bmV3IGkoInVuZm9sZCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI3MyJ9KSxpLnVubG9jaz1uZXcgaSgidW5sb2NrIix7Zm9udENoYXJhY3RlcjoiXFxlYjc0In0pLGkudW5tdXRlPW5ldyBpKCJ1bm11dGUiLHtmb250Q2hhcmFjdGVyOiJcXGViNzUifSksaS51bnZlcmlmaWVkPW5ldyBpKCJ1bnZlcmlmaWVkIix7Zm9udENoYXJhY3RlcjoiXFxlYjc2In0pLGkudmVyaWZpZWQ9bmV3IGkoInZlcmlmaWVkIix7Zm9udENoYXJhY3RlcjoiXFxlYjc3In0pLGkudmVyc2lvbnM9bmV3IGkoInZlcnNpb25zIix7Zm9udENoYXJhY3RlcjoiXFxlYjc4In0pLGkudm1BY3RpdmU9bmV3IGkoInZtLWFjdGl2ZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI3OSJ9KSxpLnZtT3V0bGluZT1uZXcgaSgidm0tb3V0bGluZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI3YSJ9KSxpLnZtUnVubmluZz1uZXcgaSgidm0tcnVubmluZyIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI3YiJ9KSxpLndhdGNoPW5ldyBpKCJ3YXRjaCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI3YyJ9KSxpLndoaXRlc3BhY2U9bmV3IGkoIndoaXRlc3BhY2UiLHtmb250Q2hhcmFjdGVyOiJcXGViN2QifSksaS53aG9sZVdvcmQ9bmV3IGkoIndob2xlLXdvcmQiLHtmb250Q2hhcmFjdGVyOiJcXGViN2UifSksaS53aW5kb3c9bmV3IGkoIndpbmRvdyIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI3ZiJ9KSxpLndvcmRXcmFwPW5ldyBpKCJ3b3JkLXdyYXAiLHtmb250Q2hhcmFjdGVyOiJcXGViODAifSksaS56b29tSW49bmV3IGkoInpvb20taW4iLHtmb250Q2hhcmFjdGVyOiJcXGViODEifSksaS56b29tT3V0PW5ldyBpKCJ6b29tLW91dCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI4MiJ9KSxpLmxpc3RGaWx0ZXI9bmV3IGkoImxpc3QtZmlsdGVyIix7Zm9udENoYXJhY3RlcjoiXFxlYjgzIn0pLGkubGlzdEZsYXQ9bmV3IGkoImxpc3QtZmxhdCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI4NCJ9KSxpLmxpc3RTZWxlY3Rpb249bmV3IGkoImxpc3Qtc2VsZWN0aW9uIix7Zm9udENoYXJhY3RlcjoiXFxlYjg1In0pLGkuc2VsZWN0aW9uPW5ldyBpKCJzZWxlY3Rpb24iLHtmb250Q2hhcmFjdGVyOiJcXGViODUifSksaS5saXN0VHJlZT1uZXcgaSgibGlzdC10cmVlIix7Zm9udENoYXJhY3RlcjoiXFxlYjg2In0pLGkuZGVidWdCcmVha3BvaW50RnVuY3Rpb25VbnZlcmlmaWVkPW5ldyBpKCJkZWJ1Zy1icmVha3BvaW50LWZ1bmN0aW9uLXVudmVyaWZpZWQiLHtmb250Q2hhcmFjdGVyOiJcXGViODcifSksaS5kZWJ1Z0JyZWFrcG9pbnRGdW5jdGlvbj1uZXcgaSgiZGVidWctYnJlYWtwb2ludC1mdW5jdGlvbiIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI4OCJ9KSxpLmRlYnVnQnJlYWtwb2ludEZ1bmN0aW9uRGlzYWJsZWQ9bmV3IGkoImRlYnVnLWJyZWFrcG9pbnQtZnVuY3Rpb24tZGlzYWJsZWQiLHtmb250Q2hhcmFjdGVyOiJcXGViODgifSksaS5kZWJ1Z1N0YWNrZnJhbWVBY3RpdmU9bmV3IGkoImRlYnVnLXN0YWNrZnJhbWUtYWN0aXZlIix7Zm9udENoYXJhY3RlcjoiXFxlYjg5In0pLGkuZGVidWdTdGFja2ZyYW1lRG90PW5ldyBpKCJkZWJ1Zy1zdGFja2ZyYW1lLWRvdCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI4YSJ9KSxpLmRlYnVnU3RhY2tmcmFtZT1uZXcgaSgiZGVidWctc3RhY2tmcmFtZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI4YiJ9KSxpLmRlYnVnU3RhY2tmcmFtZUZvY3VzZWQ9bmV3IGkoImRlYnVnLXN0YWNrZnJhbWUtZm9jdXNlZCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI4YiJ9KSxpLmRlYnVnQnJlYWtwb2ludFVuc3VwcG9ydGVkPW5ldyBpKCJkZWJ1Zy1icmVha3BvaW50LXVuc3VwcG9ydGVkIix7Zm9udENoYXJhY3RlcjoiXFxlYjhjIn0pLGkuc3ltYm9sU3RyaW5nPW5ldyBpKCJzeW1ib2wtc3RyaW5nIix7Zm9udENoYXJhY3RlcjoiXFxlYjhkIn0pLGkuZGVidWdSZXZlcnNlQ29udGludWU9bmV3IGkoImRlYnVnLXJldmVyc2UtY29udGludWUiLHtmb250Q2hhcmFjdGVyOiJcXGViOGUifSksaS5kZWJ1Z1N0ZXBCYWNrPW5ldyBpKCJkZWJ1Zy1zdGVwLWJhY2siLHtmb250Q2hhcmFjdGVyOiJcXGViOGYifSksaS5kZWJ1Z1Jlc3RhcnRGcmFtZT1uZXcgaSgiZGVidWctcmVzdGFydC1mcmFtZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI5MCJ9KSxpLmNhbGxJbmNvbWluZz1uZXcgaSgiY2FsbC1pbmNvbWluZyIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI5MiJ9KSxpLmNhbGxPdXRnb2luZz1uZXcgaSgiY2FsbC1vdXRnb2luZyIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI5MyJ9KSxpLm1lbnU9bmV3IGkoIm1lbnUiLHtmb250Q2hhcmFjdGVyOiJcXGViOTQifSksaS5leHBhbmRBbGw9bmV3IGkoImV4cGFuZC1hbGwiLHtmb250Q2hhcmFjdGVyOiJcXGViOTUifSksaS5mZWVkYmFjaz1uZXcgaSgiZmVlZGJhY2siLHtmb250Q2hhcmFjdGVyOiJcXGViOTYifSksaS5ncm91cEJ5UmVmVHlwZT1uZXcgaSgiZ3JvdXAtYnktcmVmLXR5cGUiLHtmb250Q2hhcmFjdGVyOiJcXGViOTcifSksaS51bmdyb3VwQnlSZWZUeXBlPW5ldyBpKCJ1bmdyb3VwLWJ5LXJlZi10eXBlIix7Zm9udENoYXJhY3RlcjoiXFxlYjk4In0pLGkuYWNjb3VudD1uZXcgaSgiYWNjb3VudCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI5OSJ9KSxpLmJlbGxEb3Q9bmV3IGkoImJlbGwtZG90Iix7Zm9udENoYXJhY3RlcjoiXFxlYjlhIn0pLGkuZGVidWdDb25zb2xlPW5ldyBpKCJkZWJ1Zy1jb25zb2xlIix7Zm9udENoYXJhY3RlcjoiXFxlYjliIn0pLGkubGlicmFyeT1uZXcgaSgibGlicmFyeSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI5YyJ9KSxpLm91dHB1dD1uZXcgaSgib3V0cHV0Iix7Zm9udENoYXJhY3RlcjoiXFxlYjlkIn0pLGkucnVuQWxsPW5ldyBpKCJydW4tYWxsIix7Zm9udENoYXJhY3RlcjoiXFxlYjllIn0pLGkuc3luY0lnbm9yZWQ9bmV3IGkoInN5bmMtaWdub3JlZCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI5ZiJ9KSxpLnBpbm5lZD1uZXcgaSgicGlubmVkIix7Zm9udENoYXJhY3RlcjoiXFxlYmEwIn0pLGkuZ2l0aHViSW52ZXJ0ZWQ9bmV3IGkoImdpdGh1Yi1pbnZlcnRlZCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJhMSJ9KSxpLmRlYnVnQWx0PW5ldyBpKCJkZWJ1Zy1hbHQiLHtmb250Q2hhcmFjdGVyOiJcXGViOTEifSksaS5zZXJ2ZXJQcm9jZXNzPW5ldyBpKCJzZXJ2ZXItcHJvY2VzcyIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJhMiJ9KSxpLnNlcnZlckVudmlyb25tZW50PW5ldyBpKCJzZXJ2ZXItZW52aXJvbm1lbnQiLHtmb250Q2hhcmFjdGVyOiJcXGViYTMifSksaS5wYXNzPW5ldyBpKCJwYXNzIix7Zm9udENoYXJhY3RlcjoiXFxlYmE0In0pLGkuc3RvcENpcmNsZT1uZXcgaSgic3RvcC1jaXJjbGUiLHtmb250Q2hhcmFjdGVyOiJcXGViYTUifSksaS5wbGF5Q2lyY2xlPW5ldyBpKCJwbGF5LWNpcmNsZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJhNiJ9KSxpLnJlY29yZD1uZXcgaSgicmVjb3JkIix7Zm9udENoYXJhY3RlcjoiXFxlYmE3In0pLGkuZGVidWdBbHRTbWFsbD1uZXcgaSgiZGVidWctYWx0LXNtYWxsIix7Zm9udENoYXJhY3RlcjoiXFxlYmE4In0pLGkudm1Db25uZWN0PW5ldyBpKCJ2bS1jb25uZWN0Iix7Zm9udENoYXJhY3RlcjoiXFxlYmE5In0pLGkuY2xvdWQ9bmV3IGkoImNsb3VkIix7Zm9udENoYXJhY3RlcjoiXFxlYmFhIn0pLGkubWVyZ2U9bmV3IGkoIm1lcmdlIix7Zm9udENoYXJhY3RlcjoiXFxlYmFiIn0pLGkuZXhwb3J0SWNvbj1uZXcgaSgiZXhwb3J0Iix7Zm9udENoYXJhY3RlcjoiXFxlYmFjIn0pLGkuZ3JhcGhMZWZ0PW5ldyBpKCJncmFwaC1sZWZ0Iix7Zm9udENoYXJhY3RlcjoiXFxlYmFkIn0pLGkubWFnbmV0PW5ldyBpKCJtYWduZXQiLHtmb250Q2hhcmFjdGVyOiJcXGViYWUifSksaS5ub3RlYm9vaz1uZXcgaSgibm90ZWJvb2siLHtmb250Q2hhcmFjdGVyOiJcXGViYWYifSksaS5yZWRvPW5ldyBpKCJyZWRvIix7Zm9udENoYXJhY3RlcjoiXFxlYmIwIn0pLGkuY2hlY2tBbGw9bmV3IGkoImNoZWNrLWFsbCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJiMSJ9KSxpLnBpbm5lZERpcnR5PW5ldyBpKCJwaW5uZWQtZGlydHkiLHtmb250Q2hhcmFjdGVyOiJcXGViYjIifSksaS5wYXNzRmlsbGVkPW5ldyBpKCJwYXNzLWZpbGxlZCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJiMyJ9KSxpLmNpcmNsZUxhcmdlRmlsbGVkPW5ldyBpKCJjaXJjbGUtbGFyZ2UtZmlsbGVkIix7Zm9udENoYXJhY3RlcjoiXFxlYmI0In0pLGkuY2lyY2xlTGFyZ2VPdXRsaW5lPW5ldyBpKCJjaXJjbGUtbGFyZ2Utb3V0bGluZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJiNSJ9KSxpLmNvbWJpbmU9bmV3IGkoImNvbWJpbmUiLHtmb250Q2hhcmFjdGVyOiJcXGViYjYifSksaS5nYXRoZXI9bmV3IGkoImdhdGhlciIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJiNiJ9KSxpLnRhYmxlPW5ldyBpKCJ0YWJsZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJiNyJ9KSxpLnZhcmlhYmxlR3JvdXA9bmV3IGkoInZhcmlhYmxlLWdyb3VwIix7Zm9udENoYXJhY3RlcjoiXFxlYmI4In0pLGkudHlwZUhpZXJhcmNoeT1uZXcgaSgidHlwZS1oaWVyYXJjaHkiLHtmb250Q2hhcmFjdGVyOiJcXGViYjkifSksaS50eXBlSGllcmFyY2h5U3ViPW5ldyBpKCJ0eXBlLWhpZXJhcmNoeS1zdWIiLHtmb250Q2hhcmFjdGVyOiJcXGViYmEifSksaS50eXBlSGllcmFyY2h5U3VwZXI9bmV3IGkoInR5cGUtaGllcmFyY2h5LXN1cGVyIix7Zm9udENoYXJhY3RlcjoiXFxlYmJiIn0pLGkuZ2l0UHVsbFJlcXVlc3RDcmVhdGU9bmV3IGkoImdpdC1wdWxsLXJlcXVlc3QtY3JlYXRlIix7Zm9udENoYXJhY3RlcjoiXFxlYmJjIn0pLGkucnVuQWJvdmU9bmV3IGkoInJ1bi1hYm92ZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJiZCJ9KSxpLnJ1bkJlbG93PW5ldyBpKCJydW4tYmVsb3ciLHtmb250Q2hhcmFjdGVyOiJcXGViYmUifSksaS5ub3RlYm9va1RlbXBsYXRlPW5ldyBpKCJub3RlYm9vay10ZW1wbGF0ZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJiZiJ9KSxpLmRlYnVnUmVydW49bmV3IGkoImRlYnVnLXJlcnVuIix7Zm9udENoYXJhY3RlcjoiXFxlYmMwIn0pLGkud29ya3NwYWNlVHJ1c3RlZD1uZXcgaSgid29ya3NwYWNlLXRydXN0ZWQiLHtmb250Q2hhcmFjdGVyOiJcXGViYzEifSksaS53b3Jrc3BhY2VVbnRydXN0ZWQ9bmV3IGkoIndvcmtzcGFjZS11bnRydXN0ZWQiLHtmb250Q2hhcmFjdGVyOiJcXGViYzIifSksaS53b3Jrc3BhY2VVbnNwZWNpZmllZD1uZXcgaSgid29ya3NwYWNlLXVuc3BlY2lmaWVkIix7Zm9udENoYXJhY3RlcjoiXFxlYmMzIn0pLGkudGVybWluYWxDbWQ9bmV3IGkoInRlcm1pbmFsLWNtZCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJjNCJ9KSxpLnRlcm1pbmFsRGViaWFuPW5ldyBpKCJ0ZXJtaW5hbC1kZWJpYW4iLHtmb250Q2hhcmFjdGVyOiJcXGViYzUifSksaS50ZXJtaW5hbExpbnV4PW5ldyBpKCJ0ZXJtaW5hbC1saW51eCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJjNiJ9KSxpLnRlcm1pbmFsUG93ZXJzaGVsbD1uZXcgaSgidGVybWluYWwtcG93ZXJzaGVsbCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJjNyJ9KSxpLnRlcm1pbmFsVG11eD1uZXcgaSgidGVybWluYWwtdG11eCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJjOCJ9KSxpLnRlcm1pbmFsVWJ1bnR1PW5ldyBpKCJ0ZXJtaW5hbC11YnVudHUiLHtmb250Q2hhcmFjdGVyOiJcXGViYzkifSksaS50ZXJtaW5hbEJhc2g9bmV3IGkoInRlcm1pbmFsLWJhc2giLHtmb250Q2hhcmFjdGVyOiJcXGViY2EifSksaS5hcnJvd1N3YXA9bmV3IGkoImFycm93LXN3YXAiLHtmb250Q2hhcmFjdGVyOiJcXGViY2IifSksaS5jb3B5PW5ldyBpKCJjb3B5Iix7Zm9udENoYXJhY3RlcjoiXFxlYmNjIn0pLGkucGVyc29uQWRkPW5ldyBpKCJwZXJzb24tYWRkIix7Zm9udENoYXJhY3RlcjoiXFxlYmNkIn0pLGkuZmlsdGVyRmlsbGVkPW5ldyBpKCJmaWx0ZXItZmlsbGVkIix7Zm9udENoYXJhY3RlcjoiXFxlYmNlIn0pLGkud2FuZD1uZXcgaSgid2FuZCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJjZiJ9KSxpLmRlYnVnTGluZUJ5TGluZT1uZXcgaSgiZGVidWctbGluZS1ieS1saW5lIix7Zm9udENoYXJhY3RlcjoiXFxlYmQwIn0pLGkuaW5zcGVjdD1uZXcgaSgiaW5zcGVjdCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJkMSJ9KSxpLmxheWVycz1uZXcgaSgibGF5ZXJzIix7Zm9udENoYXJhY3RlcjoiXFxlYmQyIn0pLGkubGF5ZXJzRG90PW5ldyBpKCJsYXllcnMtZG90Iix7Zm9udENoYXJhY3RlcjoiXFxlYmQzIn0pLGkubGF5ZXJzQWN0aXZlPW5ldyBpKCJsYXllcnMtYWN0aXZlIix7Zm9udENoYXJhY3RlcjoiXFxlYmQ0In0pLGkuY29tcGFzcz1uZXcgaSgiY29tcGFzcyIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJkNSJ9KSxpLmNvbXBhc3NEb3Q9bmV3IGkoImNvbXBhc3MtZG90Iix7Zm9udENoYXJhY3RlcjoiXFxlYmQ2In0pLGkuY29tcGFzc0FjdGl2ZT1uZXcgaSgiY29tcGFzcy1hY3RpdmUiLHtmb250Q2hhcmFjdGVyOiJcXGViZDcifSksaS5henVyZT1uZXcgaSgiYXp1cmUiLHtmb250Q2hhcmFjdGVyOiJcXGViZDgifSksaS5pc3N1ZURyYWZ0PW5ldyBpKCJpc3N1ZS1kcmFmdCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJkOSJ9KSxpLmdpdFB1bGxSZXF1ZXN0Q2xvc2VkPW5ldyBpKCJnaXQtcHVsbC1yZXF1ZXN0LWNsb3NlZCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJkYSJ9KSxpLmdpdFB1bGxSZXF1ZXN0RHJhZnQ9bmV3IGkoImdpdC1wdWxsLXJlcXVlc3QtZHJhZnQiLHtmb250Q2hhcmFjdGVyOiJcXGViZGIifSksaS5kZWJ1Z0FsbD1uZXcgaSgiZGVidWctYWxsIix7Zm9udENoYXJhY3RlcjoiXFxlYmRjIn0pLGkuZGVidWdDb3ZlcmFnZT1uZXcgaSgiZGVidWctY292ZXJhZ2UiLHtmb250Q2hhcmFjdGVyOiJcXGViZGQifSksaS5ydW5FcnJvcnM9bmV3IGkoInJ1bi1lcnJvcnMiLHtmb250Q2hhcmFjdGVyOiJcXGViZGUifSksaS5mb2xkZXJMaWJyYXJ5PW5ldyBpKCJmb2xkZXItbGlicmFyeSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJkZiJ9KSxpLmRlYnVnQ29udGludWVTbWFsbD1uZXcgaSgiZGVidWctY29udGludWUtc21hbGwiLHtmb250Q2hhcmFjdGVyOiJcXGViZTAifSksaS5iZWFrZXJTdG9wPW5ldyBpKCJiZWFrZXItc3RvcCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJlMSJ9KSxpLmdyYXBoTGluZT1uZXcgaSgiZ3JhcGgtbGluZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJlMiJ9KSxpLmdyYXBoU2NhdHRlcj1uZXcgaSgiZ3JhcGgtc2NhdHRlciIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJlMyJ9KSxpLnBpZUNoYXJ0PW5ldyBpKCJwaWUtY2hhcnQiLHtmb250Q2hhcmFjdGVyOiJcXGViZTQifSksaS5icmFja2V0PW5ldyBpKCJicmFja2V0IixpLmpzb24uZGVmaW5pdGlvbiksaS5icmFja2V0RG90PW5ldyBpKCJicmFja2V0LWRvdCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJlNSJ9KSxpLmJyYWNrZXRFcnJvcj1uZXcgaSgiYnJhY2tldC1lcnJvciIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJlNiJ9KSxpLmxvY2tTbWFsbD1uZXcgaSgibG9jay1zbWFsbCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJlNyJ9KSxpLmF6dXJlRGV2b3BzPW5ldyBpKCJhenVyZS1kZXZvcHMiLHtmb250Q2hhcmFjdGVyOiJcXGViZTgifSksaS52ZXJpZmllZEZpbGxlZD1uZXcgaSgidmVyaWZpZWQtZmlsbGVkIix7Zm9udENoYXJhY3RlcjoiXFxlYmU5In0pLGkubmV3TGluZT1uZXcgaSgibmV3bGluZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJlYSJ9KSxpLmxheW91dD1uZXcgaSgibGF5b3V0Iix7Zm9udENoYXJhY3RlcjoiXFxlYmViIn0pLGkubGF5b3V0QWN0aXZpdHliYXJMZWZ0PW5ldyBpKCJsYXlvdXQtYWN0aXZpdHliYXItbGVmdCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJlYyJ9KSxpLmxheW91dEFjdGl2aXR5YmFyUmlnaHQ9bmV3IGkoImxheW91dC1hY3Rpdml0eWJhci1yaWdodCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJlZCJ9KSxpLmxheW91dFBhbmVsTGVmdD1uZXcgaSgibGF5b3V0LXBhbmVsLWxlZnQiLHtmb250Q2hhcmFjdGVyOiJcXGViZWUifSksaS5sYXlvdXRQYW5lbENlbnRlcj1uZXcgaSgibGF5b3V0LXBhbmVsLWNlbnRlciIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJlZiJ9KSxpLmxheW91dFBhbmVsSnVzdGlmeT1uZXcgaSgibGF5b3V0LXBhbmVsLWp1c3RpZnkiLHtmb250Q2hhcmFjdGVyOiJcXGViZjAifSksaS5sYXlvdXRQYW5lbFJpZ2h0PW5ldyBpKCJsYXlvdXQtcGFuZWwtcmlnaHQiLHtmb250Q2hhcmFjdGVyOiJcXGViZjEifSksaS5sYXlvdXRQYW5lbD1uZXcgaSgibGF5b3V0LXBhbmVsIix7Zm9udENoYXJhY3RlcjoiXFxlYmYyIn0pLGkubGF5b3V0U2lkZWJhckxlZnQ9bmV3IGkoImxheW91dC1zaWRlYmFyLWxlZnQiLHtmb250Q2hhcmFjdGVyOiJcXGViZjMifSksaS5sYXlvdXRTaWRlYmFyUmlnaHQ9bmV3IGkoImxheW91dC1zaWRlYmFyLXJpZ2h0Iix7Zm9udENoYXJhY3RlcjoiXFxlYmY0In0pLGkubGF5b3V0U3RhdHVzYmFyPW5ldyBpKCJsYXlvdXQtc3RhdHVzYmFyIix7Zm9udENoYXJhY3RlcjoiXFxlYmY1In0pLGkubGF5b3V0TWVudWJhcj1uZXcgaSgibGF5b3V0LW1lbnViYXIiLHtmb250Q2hhcmFjdGVyOiJcXGViZjYifSksaS5sYXlvdXRDZW50ZXJlZD1uZXcgaSgibGF5b3V0LWNlbnRlcmVkIix7Zm9udENoYXJhY3RlcjoiXFxlYmY3In0pLGkudGFyZ2V0PW5ldyBpKCJ0YXJnZXQiLHtmb250Q2hhcmFjdGVyOiJcXGViZjgifSksaS5pbmRlbnQ9bmV3IGkoImluZGVudCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJmOSJ9KSxpLnJlY29yZFNtYWxsPW5ldyBpKCJyZWNvcmQtc21hbGwiLHtmb250Q2hhcmFjdGVyOiJcXGViZmEifSksaS5lcnJvclNtYWxsPW5ldyBpKCJlcnJvci1zbWFsbCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJmYiJ9KSxpLmFycm93Q2lyY2xlRG93bj1uZXcgaSgiYXJyb3ctY2lyY2xlLWRvd24iLHtmb250Q2hhcmFjdGVyOiJcXGViZmMifSksaS5hcnJvd0NpcmNsZUxlZnQ9bmV3IGkoImFycm93LWNpcmNsZS1sZWZ0Iix7Zm9udENoYXJhY3RlcjoiXFxlYmZkIn0pLGkuYXJyb3dDaXJjbGVSaWdodD1uZXcgaSgiYXJyb3ctY2lyY2xlLXJpZ2h0Iix7Zm9udENoYXJhY3RlcjoiXFxlYmZlIn0pLGkuYXJyb3dDaXJjbGVVcD1uZXcgaSgiYXJyb3ctY2lyY2xlLXVwIix7Zm9udENoYXJhY3RlcjoiXFxlYmZmIn0pLGkuZGlhbG9nRXJyb3I9bmV3IGkoImRpYWxvZy1lcnJvciIsaS5lcnJvci5kZWZpbml0aW9uKSxpLmRpYWxvZ1dhcm5pbmc9bmV3IGkoImRpYWxvZy13YXJuaW5nIixpLndhcm5pbmcuZGVmaW5pdGlvbiksaS5kaWFsb2dJbmZvPW5ldyBpKCJkaWFsb2ctaW5mbyIsaS5pbmZvLmRlZmluaXRpb24pLGkuZGlhbG9nQ2xvc2U9bmV3IGkoImRpYWxvZy1jbG9zZSIsaS5jbG9zZS5kZWZpbml0aW9uKSxpLnRyZWVJdGVtRXhwYW5kZWQ9bmV3IGkoInRyZWUtaXRlbS1leHBhbmRlZCIsaS5jaGV2cm9uRG93bi5kZWZpbml0aW9uKSxpLnRyZWVGaWx0ZXJPblR5cGVPbj1uZXcgaSgidHJlZS1maWx0ZXItb24tdHlwZS1vbiIsaS5saXN0RmlsdGVyLmRlZmluaXRpb24pLGkudHJlZUZpbHRlck9uVHlwZU9mZj1uZXcgaSgidHJlZS1maWx0ZXItb24tdHlwZS1vZmYiLGkubGlzdFNlbGVjdGlvbi5kZWZpbml0aW9uKSxpLnRyZWVGaWx0ZXJDbGVhcj1uZXcgaSgidHJlZS1maWx0ZXItY2xlYXIiLGkuY2xvc2UuZGVmaW5pdGlvbiksaS50cmVlSXRlbUxvYWRpbmc9bmV3IGkoInRyZWUtaXRlbS1sb2FkaW5nIixpLmxvYWRpbmcuZGVmaW5pdGlvbiksaS5tZW51U2VsZWN0aW9uPW5ldyBpKCJtZW51LXNlbGVjdGlvbiIsaS5jaGVjay5kZWZpbml0aW9uKSxpLm1lbnVTdWJtZW51PW5ldyBpKCJtZW51LXN1Ym1lbnUiLGkuY2hldnJvblJpZ2h0LmRlZmluaXRpb24pLGkubWVudUJhck1vcmU9bmV3IGkoIm1lbnViYXItbW9yZSIsaS5tb3JlLmRlZmluaXRpb24pLGkuc2Nyb2xsYmFyQnV0dG9uTGVmdD1uZXcgaSgic2Nyb2xsYmFyLWJ1dHRvbi1sZWZ0IixpLnRyaWFuZ2xlTGVmdC5kZWZpbml0aW9uKSxpLnNjcm9sbGJhckJ1dHRvblJpZ2h0PW5ldyBpKCJzY3JvbGxiYXItYnV0dG9uLXJpZ2h0IixpLnRyaWFuZ2xlUmlnaHQuZGVmaW5pdGlvbiksaS5zY3JvbGxiYXJCdXR0b25VcD1uZXcgaSgic2Nyb2xsYmFyLWJ1dHRvbi11cCIsaS50cmlhbmdsZVVwLmRlZmluaXRpb24pLGkuc2Nyb2xsYmFyQnV0dG9uRG93bj1uZXcgaSgic2Nyb2xsYmFyLWJ1dHRvbi1kb3duIixpLnRyaWFuZ2xlRG93bi5kZWZpbml0aW9uKSxpLnRvb2xCYXJNb3JlPW5ldyBpKCJ0b29sYmFyLW1vcmUiLGkubW9yZS5kZWZpbml0aW9uKSxpLnF1aWNrSW5wdXRCYWNrPW5ldyBpKCJxdWljay1pbnB1dC1iYWNrIixpLmFycm93TGVmdC5kZWZpbml0aW9uKTt7dmFyIGU7KGU9SG49SG58fHt9KS5pY29uTmFtZVNlZ21lbnQ9IltBLVphLXowLTldKyIsZS5pY29uTmFtZUV4cHJlc3Npb249IltBLVphLXowLTktXSsiLGUuaWNvbk1vZGlmaWVyRXhwcmVzc2lvbj0ifltBLVphLXpdKyIsZS5pY29uTmFtZUNoYXJhY3Rlcj0iW0EtWmEtejAtOX4tXSI7Y29uc3QgcW89bmV3IFJlZ0V4cChgXigke2UuaWNvbk5hbWVFeHByZXNzaW9ufSkoJHtlLmljb25Nb2RpZmllckV4cHJlc3Npb259KT8kYCk7ZnVuY3Rpb24gSHQoZSl7aWYoZSBpbnN0YW5jZW9mIGkpcmV0dXJuWyJjb2RpY29uIiwiY29kaWNvbi0iK2UuaWRdO2U9cW8uZXhlYyhlLmlkKTtpZighZSlyZXR1cm4gSHQoaS5lcnJvcik7bGV0Wyx0LHJdPWU7Y29uc3Qgbj1bImNvZGljb24iLCJjb2RpY29uLSIrdF07cmV0dXJuIHImJm4ucHVzaCgiY29kaWNvbi1tb2RpZmllci0iK3Iuc3Vic3RyKDEpKSxufWUuYXNDbGFzc05hbWVBcnJheT1IdCxlLmFzQ2xhc3NOYW1lPWZ1bmN0aW9uKGUpe3JldHVybiBIdChlKS5qb2luKCIgIil9LGUuYXNDU1NTZWxlY3Rvcj1mdW5jdGlvbihlKXtyZXR1cm4iLiIrSHQoZSkuam9pbigiLiIpfX1jbGFzcyB6dHtjb25zdHJ1Y3RvcihlLHQscil7dGhpcy5fdG9rZW5CcmFuZD12b2lkIDAsdGhpcy5vZmZzZXQ9ZSx0aGlzLnR5cGU9dCx0aGlzLmxhbmd1YWdlPXJ9dG9TdHJpbmcoKXtyZXR1cm4iKCIrdGhpcy5vZmZzZXQrIiwgIit0aGlzLnR5cGUrIikifX1jbGFzcyBKdHtjb25zdHJ1Y3RvcihlLHQpe3RoaXMuX3Rva2VuaXphdGlvblJlc3VsdEJyYW5kPXZvaWQgMCx0aGlzLnRva2Vucz1lLHRoaXMuZW5kU3RhdGU9dH19Y2xhc3MgR3R7Y29uc3RydWN0b3IoZSx0KXt0aGlzLl9lbmNvZGVkVG9rZW5pemF0aW9uUmVzdWx0QnJhbmQ9dm9pZCAwLHRoaXMudG9rZW5zPWUsdGhpcy5lbmRTdGF0ZT10fX17ST17fTtjb25zdCBCbz1uZXcgTWFwLCRvPShCby5zZXQoMCxpLnN5bWJvbE1ldGhvZCksQm8uc2V0KDEsaS5zeW1ib2xGdW5jdGlvbiksQm8uc2V0KDIsaS5zeW1ib2xDb25zdHJ1Y3RvciksQm8uc2V0KDMsaS5zeW1ib2xGaWVsZCksQm8uc2V0KDQsaS5zeW1ib2xWYXJpYWJsZSksQm8uc2V0KDUsaS5zeW1ib2xDbGFzcyksQm8uc2V0KDYsaS5zeW1ib2xTdHJ1Y3QpLEJvLnNldCg3LGkuc3ltYm9sSW50ZXJmYWNlKSxCby5zZXQoOCxpLnN5bWJvbE1vZHVsZSksQm8uc2V0KDksaS5zeW1ib2xQcm9wZXJ0eSksQm8uc2V0KDEwLGkuc3ltYm9sRXZlbnQpLEJvLnNldCgxMSxpLnN5bWJvbE9wZXJhdG9yKSxCby5zZXQoMTIsaS5zeW1ib2xVbml0KSxCby5zZXQoMTMsaS5zeW1ib2xWYWx1ZSksQm8uc2V0KDE1LGkuc3ltYm9sRW51bSksQm8uc2V0KDE0LGkuc3ltYm9sQ29uc3RhbnQpLEJvLnNldCgxNSxpLnN5bWJvbEVudW0pLEJvLnNldCgxNixpLnN5bWJvbEVudW1NZW1iZXIpLEJvLnNldCgxNyxpLnN5bWJvbEtleXdvcmQpLEJvLnNldCgyNyxpLnN5bWJvbFNuaXBwZXQpLEJvLnNldCgxOCxpLnN5bWJvbFRleHQpLEJvLnNldCgxOSxpLnN5bWJvbENvbG9yKSxCby5zZXQoMjAsaS5zeW1ib2xGaWxlKSxCby5zZXQoMjEsaS5zeW1ib2xSZWZlcmVuY2UpLEJvLnNldCgyMixpLnN5bWJvbEN1c3RvbUNvbG9yKSxCby5zZXQoMjMsaS5zeW1ib2xGb2xkZXIpLEJvLnNldCgyNCxpLnN5bWJvbFR5cGVQYXJhbWV0ZXIpLEJvLnNldCgyNSxpLmFjY291bnQpLEJvLnNldCgyNixpLmlzc3VlcyksSS50b0ljb249ZnVuY3Rpb24oZSl7bGV0IHQ9Qm8uZ2V0KGUpO3JldHVybiB0fHwoY29uc29sZS5pbmZvKCJObyBjb2RpY29uIGZvdW5kIGZvciBDb21wbGV0aW9uSXRlbUtpbmQgIitlKSx0PWkuc3ltYm9sUHJvcGVydHkpLHR9LG5ldyBNYXApOyRvLnNldCgibWV0aG9kIiwwKSwkby5zZXQoImZ1bmN0aW9uIiwxKSwkby5zZXQoImNvbnN0cnVjdG9yIiwyKSwkby5zZXQoImZpZWxkIiwzKSwkby5zZXQoInZhcmlhYmxlIiw0KSwkby5zZXQoImNsYXNzIiw1KSwkby5zZXQoInN0cnVjdCIsNiksJG8uc2V0KCJpbnRlcmZhY2UiLDcpLCRvLnNldCgibW9kdWxlIiw4KSwkby5zZXQoInByb3BlcnR5Iiw5KSwkby5zZXQoImV2ZW50IiwxMCksJG8uc2V0KCJvcGVyYXRvciIsMTEpLCRvLnNldCgidW5pdCIsMTIpLCRvLnNldCgidmFsdWUiLDEzKSwkby5zZXQoImNvbnN0YW50IiwxNCksJG8uc2V0KCJlbnVtIiwxNSksJG8uc2V0KCJlbnVtLW1lbWJlciIsMTYpLCRvLnNldCgiZW51bU1lbWJlciIsMTYpLCRvLnNldCgia2V5d29yZCIsMTcpLCRvLnNldCgic25pcHBldCIsMjcpLCRvLnNldCgidGV4dCIsMTgpLCRvLnNldCgiY29sb3IiLDE5KSwkby5zZXQoImZpbGUiLDIwKSwkby5zZXQoInJlZmVyZW5jZSIsMjEpLCRvLnNldCgiY3VzdG9tY29sb3IiLDIyKSwkby5zZXQoImZvbGRlciIsMjMpLCRvLnNldCgidHlwZS1wYXJhbWV0ZXIiLDI0KSwkby5zZXQoInR5cGVQYXJhbWV0ZXIiLDI0KSwkby5zZXQoImFjY291bnQiLDI1KSwkby5zZXQoImlzc3VlIiwyNiksSS5mcm9tU3RyaW5nPWZ1bmN0aW9uKGUsdCl7bGV0IHI9JG8uZ2V0KGUpO3JldHVybiByPXZvaWQgMCE9PXJ8fHQ/cjo5fX17dD17fTtjb25zdCBXbz1uZXcgTWFwO1dvLnNldCgwLGkuc3ltYm9sRmlsZSksV28uc2V0KDEsaS5zeW1ib2xNb2R1bGUpLFdvLnNldCgyLGkuc3ltYm9sTmFtZXNwYWNlKSxXby5zZXQoMyxpLnN5bWJvbFBhY2thZ2UpLFdvLnNldCg0LGkuc3ltYm9sQ2xhc3MpLFdvLnNldCg1LGkuc3ltYm9sTWV0aG9kKSxXby5zZXQoNixpLnN5bWJvbFByb3BlcnR5KSxXby5zZXQoNyxpLnN5bWJvbEZpZWxkKSxXby5zZXQoOCxpLnN5bWJvbENvbnN0cnVjdG9yKSxXby5zZXQoOSxpLnN5bWJvbEVudW0pLFdvLnNldCgxMCxpLnN5bWJvbEludGVyZmFjZSksV28uc2V0KDExLGkuc3ltYm9sRnVuY3Rpb24pLFdvLnNldCgxMixpLnN5bWJvbFZhcmlhYmxlKSxXby5zZXQoMTMsaS5zeW1ib2xDb25zdGFudCksV28uc2V0KDE0LGkuc3ltYm9sU3RyaW5nKSxXby5zZXQoMTUsaS5zeW1ib2xOdW1iZXIpLFdvLnNldCgxNixpLnN5bWJvbEJvb2xlYW4pLFdvLnNldCgxNyxpLnN5bWJvbEFycmF5KSxXby5zZXQoMTgsaS5zeW1ib2xPYmplY3QpLFdvLnNldCgxOSxpLnN5bWJvbEtleSksV28uc2V0KDIwLGkuc3ltYm9sTnVsbCksV28uc2V0KDIxLGkuc3ltYm9sRW51bU1lbWJlciksV28uc2V0KDIyLGkuc3ltYm9sU3RydWN0KSxXby5zZXQoMjMsaS5zeW1ib2xFdmVudCksV28uc2V0KDI0LGkuc3ltYm9sT3BlcmF0b3IpLFdvLnNldCgyNSxpLnN5bWJvbFR5cGVQYXJhbWV0ZXIpLHQudG9JY29uPWZ1bmN0aW9uKGUpe2xldCB0PVdvLmdldChlKTtyZXR1cm4gdHx8KGNvbnNvbGUuaW5mbygiTm8gY29kaWNvbiBmb3VuZCBmb3IgU3ltYm9sS2luZCAiK2UpLHQ9aS5zeW1ib2xQcm9wZXJ0eSksdH19KG58fHt9KS5pcz1mdW5jdGlvbihlKXtyZXR1cm4hKCFlfHwib2JqZWN0IiE9dHlwZW9mIGUpJiYoInN0cmluZyI9PXR5cGVvZiBlLmlkJiYic3RyaW5nIj09dHlwZW9mIGUudGl0bGUpfSxuZXcgY2xhc3N7Y29uc3RydWN0b3IoKXt0aGlzLl9tYXA9bmV3IE1hcCx0aGlzLl9mYWN0b3JpZXM9bmV3IE1hcCx0aGlzLl9vbkRpZENoYW5nZT1uZXcgUSx0aGlzLm9uRGlkQ2hhbmdlPXRoaXMuX29uRGlkQ2hhbmdlLmV2ZW50LHRoaXMuX2NvbG9yTWFwPW51bGx9ZmlyZShlKXt0aGlzLl9vbkRpZENoYW5nZS5maXJlKHtjaGFuZ2VkTGFuZ3VhZ2VzOmUsY2hhbmdlZENvbG9yTWFwOiExfSl9cmVnaXN0ZXIoZSx0KXtyZXR1cm4gdGhpcy5fbWFwLnNldChlLHQpLHRoaXMuZmlyZShbZV0pLHYoKCk9Pnt0aGlzLl9tYXAuZ2V0KGUpPT09dCYmKHRoaXMuX21hcC5kZWxldGUoZSksdGhpcy5maXJlKFtlXSkpfSl9cmVnaXN0ZXJGYWN0b3J5KHQsZSl7dmFyIHI7bnVsbCE9PShyPXRoaXMuX2ZhY3Rvcmllcy5nZXQodCkpJiZ2b2lkIDAhPT1yJiZyLmRpc3Bvc2UoKTtjb25zdCBuPW5ldyBXdCh0aGlzLHQsZSk7cmV0dXJuIHRoaXMuX2ZhY3Rvcmllcy5zZXQodCxuKSx2KCgpPT57Y29uc3QgZT10aGlzLl9mYWN0b3JpZXMuZ2V0KHQpO2UmJmU9PT1uJiYodGhpcy5fZmFjdG9yaWVzLmRlbGV0ZSh0KSxlLmRpc3Bvc2UoKSl9KX1nZXRPckNyZWF0ZShyKXtyZXR1cm4gJHQodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3ZhciBlPXRoaXMuZ2V0KHIpO2lmKGUpcmV0dXJuIGU7Y29uc3QgdD10aGlzLl9mYWN0b3JpZXMuZ2V0KHIpO3JldHVybiF0fHx0LmlzUmVzb2x2ZWQ/bnVsbDooeWllbGQgdC5yZXNvbHZlKCksdGhpcy5nZXQocikpfSl9Z2V0KGUpe3JldHVybiB0aGlzLl9tYXAuZ2V0KGUpfHxudWxsfWlzUmVzb2x2ZWQoZSl7aWYodGhpcy5nZXQoZSkpcmV0dXJuITA7ZT10aGlzLl9mYWN0b3JpZXMuZ2V0KGUpO3JldHVybiEoZSYmIWUuaXNSZXNvbHZlZCl9c2V0Q29sb3JNYXAoZSl7dGhpcy5fY29sb3JNYXA9ZSx0aGlzLl9vbkRpZENoYW5nZS5maXJlKHtjaGFuZ2VkTGFuZ3VhZ2VzOkFycmF5LmZyb20odGhpcy5fbWFwLmtleXMoKSksY2hhbmdlZENvbG9yTWFwOiEwfSl9Z2V0Q29sb3JNYXAoKXtyZXR1cm4gdGhpcy5fY29sb3JNYXB9Z2V0RGVmYXVsdEJhY2tncm91bmQoKXtyZXR1cm4gdGhpcy5fY29sb3JNYXAmJjI8dGhpcy5fY29sb3JNYXAubGVuZ3RoP3RoaXMuX2NvbG9yTWFwWzJdOm51bGx9fSwocj1sbj1sbnx8e30pW3IuRGVwZW5kc09uS2JMYXlvdXQ9LTFdPSJEZXBlbmRzT25LYkxheW91dCIscltyLlVua25vd249MF09IlVua25vd24iLHJbci5CYWNrc3BhY2U9MV09IkJhY2tzcGFjZSIscltyLlRhYj0yXT0iVGFiIixyW3IuRW50ZXI9M109IkVudGVyIixyW3IuU2hpZnQ9NF09IlNoaWZ0IixyW3IuQ3RybD01XT0iQ3RybCIscltyLkFsdD02XT0iQWx0IixyW3IuUGF1c2VCcmVhaz03XT0iUGF1c2VCcmVhayIscltyLkNhcHNMb2NrPThdPSJDYXBzTG9jayIscltyLkVzY2FwZT05XT0iRXNjYXBlIixyW3IuU3BhY2U9MTBdPSJTcGFjZSIscltyLlBhZ2VVcD0xMV09IlBhZ2VVcCIscltyLlBhZ2VEb3duPTEyXT0iUGFnZURvd24iLHJbci5FbmQ9MTNdPSJFbmQiLHJbci5Ib21lPTE0XT0iSG9tZSIscltyLkxlZnRBcnJvdz0xNV09IkxlZnRBcnJvdyIscltyLlVwQXJyb3c9MTZdPSJVcEFycm93IixyW3IuUmlnaHRBcnJvdz0xN109IlJpZ2h0QXJyb3ciLHJbci5Eb3duQXJyb3c9MThdPSJEb3duQXJyb3ciLHJbci5JbnNlcnQ9MTldPSJJbnNlcnQiLHJbci5EZWxldGU9MjBdPSJEZWxldGUiLHJbci5EaWdpdDA9MjFdPSJEaWdpdDAiLHJbci5EaWdpdDE9MjJdPSJEaWdpdDEiLHJbci5EaWdpdDI9MjNdPSJEaWdpdDIiLHJbci5EaWdpdDM9MjRdPSJEaWdpdDMiLHJbci5EaWdpdDQ9MjVdPSJEaWdpdDQiLHJbci5EaWdpdDU9MjZdPSJEaWdpdDUiLHJbci5EaWdpdDY9MjddPSJEaWdpdDYiLHJbci5EaWdpdDc9MjhdPSJEaWdpdDciLHJbci5EaWdpdDg9MjldPSJEaWdpdDgiLHJbci5EaWdpdDk9MzBdPSJEaWdpdDkiLHJbci5LZXlBPTMxXT0iS2V5QSIscltyLktleUI9MzJdPSJLZXlCIixyW3IuS2V5Qz0zM109IktleUMiLHJbci5LZXlEPTM0XT0iS2V5RCIscltyLktleUU9MzVdPSJLZXlFIixyW3IuS2V5Rj0zNl09IktleUYiLHJbci5LZXlHPTM3XT0iS2V5RyIscltyLktleUg9MzhdPSJLZXlIIixyW3IuS2V5ST0zOV09IktleUkiLHJbci5LZXlKPTQwXT0iS2V5SiIscltyLktleUs9NDFdPSJLZXlLIixyW3IuS2V5TD00Ml09IktleUwiLHJbci5LZXlNPTQzXT0iS2V5TSIscltyLktleU49NDRdPSJLZXlOIixyW3IuS2V5Tz00NV09IktleU8iLHJbci5LZXlQPTQ2XT0iS2V5UCIscltyLktleVE9NDddPSJLZXlRIixyW3IuS2V5Uj00OF09IktleVIiLHJbci5LZXlTPTQ5XT0iS2V5UyIscltyLktleVQ9NTBdPSJLZXlUIixyW3IuS2V5VT01MV09IktleVUiLHJbci5LZXlWPTUyXT0iS2V5ViIscltyLktleVc9NTNdPSJLZXlXIixyW3IuS2V5WD01NF09IktleVgiLHJbci5LZXlZPTU1XT0iS2V5WSIscltyLktleVo9NTZdPSJLZXlaIixyW3IuTWV0YT01N109Ik1ldGEiLHJbci5Db250ZXh0TWVudT01OF09IkNvbnRleHRNZW51IixyW3IuRjE9NTldPSJGMSIscltyLkYyPTYwXT0iRjIiLHJbci5GMz02MV09IkYzIixyW3IuRjQ9NjJdPSJGNCIscltyLkY1PTYzXT0iRjUiLHJbci5GNj02NF09IkY2IixyW3IuRjc9NjVdPSJGNyIscltyLkY4PTY2XT0iRjgiLHJbci5GOT02N109IkY5IixyW3IuRjEwPTY4XT0iRjEwIixyW3IuRjExPTY5XT0iRjExIixyW3IuRjEyPTcwXT0iRjEyIixyW3IuRjEzPTcxXT0iRjEzIixyW3IuRjE0PTcyXT0iRjE0IixyW3IuRjE1PTczXT0iRjE1IixyW3IuRjE2PTc0XT0iRjE2IixyW3IuRjE3PTc1XT0iRjE3IixyW3IuRjE4PTc2XT0iRjE4IixyW3IuRjE5PTc3XT0iRjE5IixyW3IuTnVtTG9jaz03OF09Ik51bUxvY2siLHJbci5TY3JvbGxMb2NrPTc5XT0iU2Nyb2xsTG9jayIscltyLlNlbWljb2xvbj04MF09IlNlbWljb2xvbiIscltyLkVxdWFsPTgxXT0iRXF1YWwiLHJbci5Db21tYT04Ml09IkNvbW1hIixyW3IuTWludXM9ODNdPSJNaW51cyIscltyLlBlcmlvZD04NF09IlBlcmlvZCIscltyLlNsYXNoPTg1XT0iU2xhc2giLHJbci5CYWNrcXVvdGU9ODZdPSJCYWNrcXVvdGUiLHJbci5CcmFja2V0TGVmdD04N109IkJyYWNrZXRMZWZ0IixyW3IuQmFja3NsYXNoPTg4XT0iQmFja3NsYXNoIixyW3IuQnJhY2tldFJpZ2h0PTg5XT0iQnJhY2tldFJpZ2h0IixyW3IuUXVvdGU9OTBdPSJRdW90ZSIscltyLk9FTV84PTkxXT0iT0VNXzgiLHJbci5JbnRsQmFja3NsYXNoPTkyXT0iSW50bEJhY2tzbGFzaCIscltyLk51bXBhZDA9OTNdPSJOdW1wYWQwIixyW3IuTnVtcGFkMT05NF09Ik51bXBhZDEiLHJbci5OdW1wYWQyPTk1XT0iTnVtcGFkMiIscltyLk51bXBhZDM9OTZdPSJOdW1wYWQzIixyW3IuTnVtcGFkND05N109Ik51bXBhZDQiLHJbci5OdW1wYWQ1PTk4XT0iTnVtcGFkNSIscltyLk51bXBhZDY9OTldPSJOdW1wYWQ2IixyW3IuTnVtcGFkNz0xMDBdPSJOdW1wYWQ3IixyW3IuTnVtcGFkOD0xMDFdPSJOdW1wYWQ4IixyW3IuTnVtcGFkOT0xMDJdPSJOdW1wYWQ5IixyW3IuTnVtcGFkTXVsdGlwbHk9MTAzXT0iTnVtcGFkTXVsdGlwbHkiLHJbci5OdW1wYWRBZGQ9MTA0XT0iTnVtcGFkQWRkIixyW3IuTlVNUEFEX1NFUEFSQVRPUj0xMDVdPSJOVU1QQURfU0VQQVJBVE9SIixyW3IuTnVtcGFkU3VidHJhY3Q9MTA2XT0iTnVtcGFkU3VidHJhY3QiLHJbci5OdW1wYWREZWNpbWFsPTEwN109Ik51bXBhZERlY2ltYWwiLHJbci5OdW1wYWREaXZpZGU9MTA4XT0iTnVtcGFkRGl2aWRlIixyW3IuS0VZX0lOX0NPTVBPU0lUSU9OPTEwOV09IktFWV9JTl9DT01QT1NJVElPTiIscltyLkFCTlRfQzE9MTEwXT0iQUJOVF9DMSIscltyLkFCTlRfQzI9MTExXT0iQUJOVF9DMiIscltyLkF1ZGlvVm9sdW1lTXV0ZT0xMTJdPSJBdWRpb1ZvbHVtZU11dGUiLHJbci5BdWRpb1ZvbHVtZVVwPTExM109IkF1ZGlvVm9sdW1lVXAiLHJbci5BdWRpb1ZvbHVtZURvd249MTE0XT0iQXVkaW9Wb2x1bWVEb3duIixyW3IuQnJvd3NlclNlYXJjaD0xMTVdPSJCcm93c2VyU2VhcmNoIixyW3IuQnJvd3NlckhvbWU9MTE2XT0iQnJvd3NlckhvbWUiLHJbci5Ccm93c2VyQmFjaz0xMTddPSJCcm93c2VyQmFjayIscltyLkJyb3dzZXJGb3J3YXJkPTExOF09IkJyb3dzZXJGb3J3YXJkIixyW3IuTWVkaWFUcmFja05leHQ9MTE5XT0iTWVkaWFUcmFja05leHQiLHJbci5NZWRpYVRyYWNrUHJldmlvdXM9MTIwXT0iTWVkaWFUcmFja1ByZXZpb3VzIixyW3IuTWVkaWFTdG9wPTEyMV09Ik1lZGlhU3RvcCIscltyLk1lZGlhUGxheVBhdXNlPTEyMl09Ik1lZGlhUGxheVBhdXNlIixyW3IuTGF1bmNoTWVkaWFQbGF5ZXI9MTIzXT0iTGF1bmNoTWVkaWFQbGF5ZXIiLHJbci5MYXVuY2hNYWlsPTEyNF09IkxhdW5jaE1haWwiLHJbci5MYXVuY2hBcHAyPTEyNV09IkxhdW5jaEFwcDIiLHJbci5DbGVhcj0xMjZdPSJDbGVhciIscltyLk1BWF9WQUxVRT0xMjddPSJNQVhfVkFMVUUiLCgkbj1Ebj1Ebnx8e30pWyRuLlRyYWNlPTBdPSJUcmFjZSIsJG5bJG4uRGVidWc9MV09IkRlYnVnIiwkblskbi5JbmZvPTJdPSJJbmZvIiwkblskbi5XYXJuaW5nPTNdPSJXYXJuaW5nIiwkblskbi5FcnJvcj00XT0iRXJyb3IiLCRuWyRuLkNyaXRpY2FsPTVdPSJDcml0aWNhbCIsJG5bJG4uT2ZmPTZdPSJPZmYiLChlPXVuPXVufHx7fSlbZS5QYXJhZ3JhcGg9MF09IlBhcmFncmFwaCIsZVtlLkJyZWFrPTFdPSJCcmVhayIsKHQ9Q249Q258fHt9KVt0LkhpbnQ9MV09IkhpbnQiLHRbdC5JbmZvPTJdPSJJbmZvIix0W3QuV2FybmluZz00XT0iV2FybmluZyIsdFt0LkVycm9yPThdPSJFcnJvciIsKG49SW49SW58fHt9KVtuLlVubmVjZXNzYXJ5PTFdPSJVbm5lY2Vzc2FyeSIsbltuLkRlcHJlY2F0ZWQ9Ml09IkRlcHJlY2F0ZWQiLCgkbj1tbj1tbnx8e30pWyRuLkxUUj0wXT0iTFRSIiwkblskbi5SVEw9MV09IlJUTCI7Y2xhc3MgWnR7Y29uc3RydWN0b3IoKXt0aGlzW0J0XT0iTGlua2VkTWFwIix0aGlzLl9tYXA9bmV3IE1hcCx0aGlzLl9oZWFkPXZvaWQgMCx0aGlzLl90YWlsPXZvaWQgMCx0aGlzLl9zaXplPTAsdGhpcy5fc3RhdGU9MH1jbGVhcigpe3RoaXMuX21hcC5jbGVhcigpLHRoaXMuX2hlYWQ9dm9pZCAwLHRoaXMuX3RhaWw9dm9pZCAwLHRoaXMuX3NpemU9MCx0aGlzLl9zdGF0ZSsrfWlzRW1wdHkoKXtyZXR1cm4hdGhpcy5faGVhZCYmIXRoaXMuX3RhaWx9Z2V0IHNpemUoKXtyZXR1cm4gdGhpcy5fc2l6ZX1nZXQgZmlyc3QoKXt2YXIgZTtyZXR1cm4gbnVsbD09PShlPXRoaXMuX2hlYWQpfHx2b2lkIDA9PT1lP3ZvaWQgMDplLnZhbHVlfWdldCBsYXN0KCl7dmFyIGU7cmV0dXJuIG51bGw9PT0oZT10aGlzLl90YWlsKXx8dm9pZCAwPT09ZT92b2lkIDA6ZS52YWx1ZX1oYXMoZSl7cmV0dXJuIHRoaXMuX21hcC5oYXMoZSl9Z2V0KGUsdD0wKXtlPXRoaXMuX21hcC5nZXQoZSk7aWYoZSlyZXR1cm4gMCE9PXQmJnRoaXMudG91Y2goZSx0KSxlLnZhbHVlfXNldChlLHQscj0wKXtsZXQgbj10aGlzLl9tYXAuZ2V0KGUpO2lmKG4pbi52YWx1ZT10LDAhPT1yJiZ0aGlzLnRvdWNoKG4scik7ZWxzZXtzd2l0Y2gobj17a2V5OmUsdmFsdWU6dCxuZXh0OnZvaWQgMCxwcmV2aW91czp2b2lkIDB9LHIpe2Nhc2UgMDp0aGlzLmFkZEl0ZW1MYXN0KG4pO2JyZWFrO2Nhc2UgMTp0aGlzLmFkZEl0ZW1GaXJzdChuKTticmVhaztkZWZhdWx0OnRoaXMuYWRkSXRlbUxhc3Qobil9dGhpcy5fbWFwLnNldChlLG4pLHRoaXMuX3NpemUrK31yZXR1cm4gdGhpc31kZWxldGUoZSl7cmV0dXJuISF0aGlzLnJlbW92ZShlKX1yZW1vdmUoZSl7dmFyIHQ9dGhpcy5fbWFwLmdldChlKTtpZih0KXJldHVybiB0aGlzLl9tYXAuZGVsZXRlKGUpLHRoaXMucmVtb3ZlSXRlbSh0KSx0aGlzLl9zaXplLS0sdC52YWx1ZX1zaGlmdCgpe2lmKHRoaXMuX2hlYWR8fHRoaXMuX3RhaWwpe2lmKCF0aGlzLl9oZWFkfHwhdGhpcy5fdGFpbCl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgbGlzdCIpO3ZhciBlPXRoaXMuX2hlYWQ7cmV0dXJuIHRoaXMuX21hcC5kZWxldGUoZS5rZXkpLHRoaXMucmVtb3ZlSXRlbShlKSx0aGlzLl9zaXplLS0sZS52YWx1ZX19Zm9yRWFjaChlLHQpe3ZhciByPXRoaXMuX3N0YXRlO2xldCBuPXRoaXMuX2hlYWQ7Zm9yKDtuOyl7aWYoKHQ/ZS5iaW5kKHQpOmUpKG4udmFsdWUsbi5rZXksdGhpcyksdGhpcy5fc3RhdGUhPT1yKXRocm93IG5ldyBFcnJvcigiTGlua2VkTWFwIGdvdCBtb2RpZmllZCBkdXJpbmcgaXRlcmF0aW9uLiIpO249bi5uZXh0fX1rZXlzKCl7Y29uc3QgdD10aGlzLHI9dGhpcy5fc3RhdGU7bGV0IG49dGhpcy5faGVhZDtjb25zdCBlPXtbU3ltYm9sLml0ZXJhdG9yXSgpe3JldHVybiBlfSxuZXh0KCl7aWYodC5fc3RhdGUhPT1yKXRocm93IG5ldyBFcnJvcigiTGlua2VkTWFwIGdvdCBtb2RpZmllZCBkdXJpbmcgaXRlcmF0aW9uLiIpO3ZhciBlO3JldHVybiBuPyhlPXt2YWx1ZTpuLmtleSxkb25lOiExfSxuPW4ubmV4dCxlKTp7dmFsdWU6dm9pZCAwLGRvbmU6ITB9fX07cmV0dXJuIGV9dmFsdWVzKCl7Y29uc3QgdD10aGlzLHI9dGhpcy5fc3RhdGU7bGV0IG49dGhpcy5faGVhZDtjb25zdCBlPXtbU3ltYm9sLml0ZXJhdG9yXSgpe3JldHVybiBlfSxuZXh0KCl7aWYodC5fc3RhdGUhPT1yKXRocm93IG5ldyBFcnJvcigiTGlua2VkTWFwIGdvdCBtb2RpZmllZCBkdXJpbmcgaXRlcmF0aW9uLiIpO3ZhciBlO3JldHVybiBuPyhlPXt2YWx1ZTpuLnZhbHVlLGRvbmU6ITF9LG49bi5uZXh0LGUpOnt2YWx1ZTp2b2lkIDAsZG9uZTohMH19fTtyZXR1cm4gZX1lbnRyaWVzKCl7Y29uc3QgdD10aGlzLHI9dGhpcy5fc3RhdGU7bGV0IG49dGhpcy5faGVhZDtjb25zdCBlPXtbU3ltYm9sLml0ZXJhdG9yXSgpe3JldHVybiBlfSxuZXh0KCl7aWYodC5fc3RhdGUhPT1yKXRocm93IG5ldyBFcnJvcigiTGlua2VkTWFwIGdvdCBtb2RpZmllZCBkdXJpbmcgaXRlcmF0aW9uLiIpO3ZhciBlO3JldHVybiBuPyhlPXt2YWx1ZTpbbi5rZXksbi52YWx1ZV0sZG9uZTohMX0sbj1uLm5leHQsZSk6e3ZhbHVlOnZvaWQgMCxkb25lOiEwfX19O3JldHVybiBlfVsoQnQ9U3ltYm9sLnRvU3RyaW5nVGFnLFN5bWJvbC5pdGVyYXRvcildKCl7cmV0dXJuIHRoaXMuZW50cmllcygpfXRyaW1PbGQocil7aWYoIShyPj10aGlzLnNpemUpKWlmKDAhPT1yKXtsZXQgZT10aGlzLl9oZWFkLHQ9dGhpcy5zaXplO2Zvcig7ZSYmdD5yOyl0aGlzLl9tYXAuZGVsZXRlKGUua2V5KSxlPWUubmV4dCx0LS07dGhpcy5faGVhZD1lLHRoaXMuX3NpemU9dCxlJiYoZS5wcmV2aW91cz12b2lkIDApLHRoaXMuX3N0YXRlKyt9ZWxzZSB0aGlzLmNsZWFyKCl9YWRkSXRlbUZpcnN0KGUpe2lmKHRoaXMuX2hlYWR8fHRoaXMuX3RhaWwpe2lmKCF0aGlzLl9oZWFkKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBsaXN0Iik7ZS5uZXh0PXRoaXMuX2hlYWQsdGhpcy5faGVhZC5wcmV2aW91cz1lfWVsc2UgdGhpcy5fdGFpbD1lO3RoaXMuX2hlYWQ9ZSx0aGlzLl9zdGF0ZSsrfWFkZEl0ZW1MYXN0KGUpe2lmKHRoaXMuX2hlYWR8fHRoaXMuX3RhaWwpe2lmKCF0aGlzLl90YWlsKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBsaXN0Iik7ZS5wcmV2aW91cz10aGlzLl90YWlsLHRoaXMuX3RhaWwubmV4dD1lfWVsc2UgdGhpcy5faGVhZD1lO3RoaXMuX3RhaWw9ZSx0aGlzLl9zdGF0ZSsrfXJlbW92ZUl0ZW0oZSl7aWYoZT09PXRoaXMuX2hlYWQmJmU9PT10aGlzLl90YWlsKXRoaXMuX2hlYWQ9dm9pZCAwLHRoaXMuX3RhaWw9dm9pZCAwO2Vsc2UgaWYoZT09PXRoaXMuX2hlYWQpe2lmKCFlLm5leHQpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIGxpc3QiKTtlLm5leHQucHJldmlvdXM9dm9pZCAwLHRoaXMuX2hlYWQ9ZS5uZXh0fWVsc2UgaWYoZT09PXRoaXMuX3RhaWwpe2lmKCFlLnByZXZpb3VzKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBsaXN0Iik7ZS5wcmV2aW91cy5uZXh0PXZvaWQgMCx0aGlzLl90YWlsPWUucHJldmlvdXN9ZWxzZXtjb25zdCB0PWUubmV4dCxyPWUucHJldmlvdXM7aWYoIXR8fCFyKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBsaXN0Iik7KHQucHJldmlvdXM9cikubmV4dD10fWUubmV4dD12b2lkIDAsZS5wcmV2aW91cz12b2lkIDAsdGhpcy5fc3RhdGUrK310b3VjaChlLHQpe2lmKCF0aGlzLl9oZWFkfHwhdGhpcy5fdGFpbCl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgbGlzdCIpO2lmKDE9PT10fHwyPT09dClpZigxPT09dCl7aWYoZSE9PXRoaXMuX2hlYWQpe2NvbnN0IHI9ZS5uZXh0LG49ZS5wcmV2aW91cztlPT09dGhpcy5fdGFpbD8obi5uZXh0PXZvaWQgMCx0aGlzLl90YWlsPW4pOihyLnByZXZpb3VzPW4pLm5leHQ9cixlLnByZXZpb3VzPXZvaWQgMCxlLm5leHQ9dGhpcy5faGVhZCx0aGlzLl9oZWFkLnByZXZpb3VzPWUsdGhpcy5faGVhZD1lLHRoaXMuX3N0YXRlKyt9fWVsc2UgaWYoMj09PXQmJmUhPT10aGlzLl90YWlsKXtjb25zdCBpPWUubmV4dCxvPWUucHJldmlvdXM7ZT09PXRoaXMuX2hlYWQ/KGkucHJldmlvdXM9dm9pZCAwLHRoaXMuX2hlYWQ9aSk6KGkucHJldmlvdXM9bykubmV4dD1pLGUubmV4dD12b2lkIDAsZS5wcmV2aW91cz10aGlzLl90YWlsLHRoaXMuX3RhaWwubmV4dD1lLHRoaXMuX3RhaWw9ZSx0aGlzLl9zdGF0ZSsrfX10b0pTT04oKXtjb25zdCByPVtdO3JldHVybiB0aGlzLmZvckVhY2goKGUsdCk9PntyLnB1c2goW3QsZV0pfSkscn1mcm9tSlNPTihlKXt0aGlzLmNsZWFyKCk7Zm9yKHZhclt0LHJdb2YgZSl0aGlzLnNldCh0LHIpfX1mdW5jdGlvbiBYdChlLHQscil7aWYoIXJ8fHIubGVuZ3RoPHQubGVuZ3RoKXJldHVybiBudWxsO2xldCBuO3ZhciBpLG87cmV0dXJuKG49ZT8oZT1yLG89KGk9dCkubGVuZ3RoLCEoaS5sZW5ndGg+ZS5sZW5ndGgpJiYwPT09cmUoZSxpLDAsbykpOjA9PT1yLmluZGV4T2YodCkpPzA8dC5sZW5ndGg/W3tzdGFydDowLGVuZDp0Lmxlbmd0aH1dOltdOm51bGx9WHQuYmluZCh2b2lkIDAsITEpLFh0LmJpbmQodm9pZCAwLCEwKTtjb25zdCBRdD1uZXcgU2V0OyIoKVtde308PmAnXCItLzs6LC4/ISIuc3BsaXQoIiIpLmZvckVhY2goZT0+UXQuYWRkKGUuY2hhckNvZGVBdCgwKSkpLG5ldyBjbGFzcyBleHRlbmRzIFp0e2NvbnN0cnVjdG9yKGUsdD0xKXtzdXBlcigpLHRoaXMuX2xpbWl0PWUsdGhpcy5fcmF0aW89TWF0aC5taW4oTWF0aC5tYXgoMCx0KSwxKX1nZXQgbGltaXQoKXtyZXR1cm4gdGhpcy5fbGltaXR9c2V0IGxpbWl0KGUpe3RoaXMuX2xpbWl0PWUsdGhpcy5jaGVja1RyaW0oKX1nZXQoZSx0PTIpe3JldHVybiBzdXBlci5nZXQoZSx0KX1wZWVrKGUpe3JldHVybiBzdXBlci5nZXQoZSwwKX1zZXQoZSx0KXtyZXR1cm4gc3VwZXIuc2V0KGUsdCwyKSx0aGlzLmNoZWNrVHJpbSgpLHRoaXN9Y2hlY2tUcmltKCl7dGhpcy5zaXplPnRoaXMuX2xpbWl0JiZ0aGlzLnRyaW1PbGQoTWF0aC5yb3VuZCh0aGlzLl9saW1pdCp0aGlzLl9yYXRpbykpfX0oMWU0KTtmdW5jdGlvbiBZdCgpe2NvbnN0IHQ9W10scj1bXTtmb3IobGV0IGU9MDtlPD0xMjg7ZSsrKXJbZV09MDtmb3IobGV0IGU9MDtlPD0xMjg7ZSsrKXQucHVzaChyLnNsaWNlKDApKTtyZXR1cm4gdH1mdW5jdGlvbiBlcih0KXtjb25zdCByPVtdO2ZvcihsZXQgZT0wO2U8PXQ7ZSsrKXJbZV09MDtyZXR1cm4gcn1lcigyNTYpLGVyKDI1NiksWXQoKSxZdCgpLFl0KCk7dmFyIHRyLHJyLG5yLGU9bmV3IFJlZ0V4cChgXFwkXFwoJHtIbi5pY29uTmFtZUV4cHJlc3Npb259KD86JHtIbi5pY29uTW9kaWZpZXJFeHByZXNzaW9ufSk/XFwpYCwiZyIpO25ldyBSZWdFeHAoSG4uaWNvbk5hbWVDaGFyYWN0ZXIpO2NvbnN0IGlyPW5ldyBSZWdFeHAoIihcXFxcKT8iK2Uuc291cmNlLCJnIik7bmV3IFJlZ0V4cCgiXFxcXCIrZS5zb3VyY2UsImciKSxuZXcgUmVnRXhwKGAoXFxzKT8oXFxcXCk/JHtlLnNvdXJjZX0oXFxzKT9gLCJnIik7Y2xhc3Mgb3J7Y29uc3RydWN0b3IoZT0iIix0PSExKXtpZih0aGlzLnZhbHVlPWUsInN0cmluZyIhPXR5cGVvZiB0aGlzLnZhbHVlKXRocm93KGU9InZhbHVlIik/bmV3IEVycm9yKCJJbGxlZ2FsIGFyZ3VtZW50OiAiK2UpOm5ldyBFcnJvcigiSWxsZWdhbCBhcmd1bWVudCIpOyJib29sZWFuIj09dHlwZW9mIHQ/KHRoaXMuaXNUcnVzdGVkPXQsdGhpcy5zdXBwb3J0VGhlbWVJY29ucz0hMSx0aGlzLnN1cHBvcnRIdG1sPSExKToodGhpcy5pc1RydXN0ZWQ9bnVsbCE9PShlPXQuaXNUcnVzdGVkKSYmdm9pZCAwIT09ZT9lOnZvaWQgMCx0aGlzLnN1cHBvcnRUaGVtZUljb25zPW51bGwhPT0oZT10LnN1cHBvcnRUaGVtZUljb25zKSYmdm9pZCAwIT09ZSYmZSx0aGlzLnN1cHBvcnRIdG1sPW51bGwhPT0oZT10LnN1cHBvcnRIdG1sKSYmdm9pZCAwIT09ZSYmZSl9YXBwZW5kVGV4dChlLHQ9MCl7cmV0dXJuIHRoaXMudmFsdWUrPSh0aGlzLnN1cHBvcnRUaGVtZUljb25zP2UucmVwbGFjZShpciwoZSx0KT0+dD9lOiJcXCIrZSk6ZSkucmVwbGFjZSgvW1xcYCpfe31bXF0oKSMrXC0hXS9nLCJcXCQmIikucmVwbGFjZSgvKFsgXHRdKykvZywoZSx0KT0+IiZuYnNwOyIucmVwZWF0KHQubGVuZ3RoKSkucmVwbGFjZSgvXD4vZ20sIlxcPiIpLnJlcGxhY2UoL1xuL2csMT09PXQ/IlxcXG4iOiJcblxuIiksdGhpc31hcHBlbmRNYXJrZG93bihlKXtyZXR1cm4gdGhpcy52YWx1ZSs9ZSx0aGlzfWFwcGVuZENvZGVibG9jayhlLHQpe3JldHVybiB0aGlzLnZhbHVlKz0iXG5gYGAiLHRoaXMudmFsdWUrPWUsdGhpcy52YWx1ZSs9IlxuIix0aGlzLnZhbHVlKz10LHRoaXMudmFsdWUrPSJcbmBgYFxuIix0aGlzfX1mdW5jdGlvbiBhcihlKXtpZih0ci5zZXJ2aWNlSWRzLmhhcyhlKSlyZXR1cm4gdHIuc2VydmljZUlkcy5nZXQoZSk7ZnVuY3Rpb24gaShlLHQscil7aWYoMyE9PWFyZ3VtZW50cy5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKCJASVNlcnZpY2VOYW1lLWRlY29yYXRvciBjYW4gb25seSBiZSB1c2VkIHRvIGRlY29yYXRlIGEgcGFyYW1ldGVyIik7dmFyIG47bj1pLHI9ciwoZT1lKVt0ci5ESV9UQVJHRVRdPT09ZT9lW3RyLkRJX0RFUEVOREVOQ0lFU10ucHVzaCh7aWQ6bixpbmRleDpyfSk6KGVbdHIuRElfREVQRU5ERU5DSUVTXT1be2lkOm4saW5kZXg6cn1dLGVbdHIuRElfVEFSR0VUXT1lKX1yZXR1cm4gaS50b1N0cmluZz0oKT0+ZSx0ci5zZXJ2aWNlSWRzLnNldChlLGkpLGksMX0ocnI9dHI9dHJ8fHt9KS5zZXJ2aWNlSWRzPW5ldyBNYXAscnIuRElfVEFSR0VUPSIkZGkkdGFyZ2V0Iixyci5ESV9ERVBFTkRFTkNJRVM9IiRkaSRkZXBlbmRlbmNpZXMiLHJyLmdldFNlcnZpY2VEZXBlbmRlbmNpZXM9ZnVuY3Rpb24oZSl7cmV0dXJuIGVbcnIuRElfREVQRU5ERU5DSUVTXXx8W119LGFyKCJpbnN0YW50aWF0aW9uU2VydmljZSIpLGFyKCJsb2dTZXJ2aWNlIiksYXIoImxvZ2dlclNlcnZpY2UiKSwodD1ucj1ucnx8e30pW3QuVHJhY2U9MF09IlRyYWNlIix0W3QuRGVidWc9MV09IkRlYnVnIix0W3QuSW5mbz0yXT0iSW5mbyIsdFt0Lldhcm5pbmc9M109Ildhcm5pbmciLHRbdC5FcnJvcj00XT0iRXJyb3IiLHRbdC5Dcml0aWNhbD01XT0iQ3JpdGljYWwiLHRbdC5PZmY9Nl09Ik9mZiI7Y29uc3Qgc3I9bnIuSW5mbztjbGFzcyBsciBleHRlbmRzIEN7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMubGV2ZWw9c3IsdGhpcy5fb25EaWRDaGFuZ2VMb2dMZXZlbD10aGlzLl9yZWdpc3RlcihuZXcgUSksdGhpcy5vbkRpZENoYW5nZUxvZ0xldmVsPXRoaXMuX29uRGlkQ2hhbmdlTG9nTGV2ZWwuZXZlbnR9c2V0TGV2ZWwoZSl7dGhpcy5sZXZlbCE9PWUmJih0aGlzLmxldmVsPWUsdGhpcy5fb25EaWRDaGFuZ2VMb2dMZXZlbC5maXJlKHRoaXMubGV2ZWwpKX1nZXRMZXZlbCgpe3JldHVybiB0aGlzLmxldmVsfX1jbGFzcyBjciBleHRlbmRzIGxye2NvbnN0cnVjdG9yKGU9c3Ipe3N1cGVyKCksdGhpcy5zZXRMZXZlbChlKX10cmFjZShlLC4uLnQpe3RoaXMuZ2V0TGV2ZWwoKTw9bnIuVHJhY2UmJmNvbnNvbGUubG9nKCIlY1RSQUNFIiwiY29sb3I6ICM4ODgiLGUsLi4udCl9ZGVidWcoZSwuLi50KXt0aGlzLmdldExldmVsKCk8PW5yLkRlYnVnJiZjb25zb2xlLmxvZygiJWNERUJVRyIsImJhY2tncm91bmQ6ICNlZWU7IGNvbG9yOiAjODg4IixlLC4uLnQpfWluZm8oZSwuLi50KXt0aGlzLmdldExldmVsKCk8PW5yLkluZm8mJmNvbnNvbGUubG9nKCIlYyBJTkZPIiwiY29sb3I6ICMzM2YiLGUsLi4udCl9d2FybihlLC4uLnQpe3RoaXMuZ2V0TGV2ZWwoKTw9bnIuV2FybmluZyYmY29uc29sZS5sb2coIiVjIFdBUk4iLCJjb2xvcjogIzk5MyIsZSwuLi50KX1lcnJvcihlLC4uLnQpe3RoaXMuZ2V0TGV2ZWwoKTw9bnIuRXJyb3ImJmNvbnNvbGUubG9nKCIlYyAgRVJSIiwiY29sb3I6ICNmMzMiLGUsLi4udCl9Y3JpdGljYWwoZSwuLi50KXt0aGlzLmdldExldmVsKCk8PW5yLkNyaXRpY2FsJiZjb25zb2xlLmxvZygiJWNDUklUSSIsImJhY2tncm91bmQ6ICNmMzM7IGNvbG9yOiB3aGl0ZSIsZSwuLi50KX1kaXNwb3NlKCl7fWZsdXNoKCl7fX1jbGFzcyB1cntzdGF0aWMgY2hvcmQoZSx0KXtyZXR1cm4oZXwoNjU1MzUmdCk8PDE2Pj4+MCk+Pj4wfX1mdW5jdGlvbiBocihlLHQscixuLGkpe3JldHVybiBmdW5jdGlvbihlLHQscixuKXtpZigwPT09cilyZXR1cm4gMTt2YXIgaT10LmNoYXJDb2RlQXQoci0xKTtpZigwIT09ZS5nZXQoaSkpcmV0dXJuIDE7aWYoMTM9PT1pfHwxMD09PWkpcmV0dXJuIDE7aWYoMDxuKXtpPXQuY2hhckNvZGVBdChyKTtpZigwIT09ZS5nZXQoaSkpcmV0dXJuIDF9cmV0dXJufShlLHQsbixpKSYmZnVuY3Rpb24oZSx0LHIsbixpKXtpZihuK2k9PT1yKXJldHVybiAxO2lmKHI9dC5jaGFyQ29kZUF0KG4raSksMCE9PWUuZ2V0KHIpKXJldHVybiAxO2lmKDEzPT09cnx8MTA9PT1yKXJldHVybiAxO2lmKDA8aSl7cj10LmNoYXJDb2RlQXQobitpLTEpO2lmKDAhPT1lLmdldChyKSlyZXR1cm4gMX1yZXR1cm59KGUsdCxyLG4saSl9dXIuQ3RybENtZD0yMDQ4LHVyLlNoaWZ0PTEwMjQsdXIuQWx0PTUxMix1ci5XaW5DdHJsPTI1NjtjbGFzcyBmcntjb25zdHJ1Y3RvcihlLHQpe3RoaXMuX3dvcmRTZXBhcmF0b3JzPWUsdGhpcy5fc2VhcmNoUmVnZXg9dCx0aGlzLl9wcmV2TWF0Y2hTdGFydEluZGV4PS0xLHRoaXMuX3ByZXZNYXRjaExlbmd0aD0wfXJlc2V0KGUpe3RoaXMuX3NlYXJjaFJlZ2V4Lmxhc3RJbmRleD1lLHRoaXMuX3ByZXZNYXRjaFN0YXJ0SW5kZXg9LTEsdGhpcy5fcHJldk1hdGNoTGVuZ3RoPTB9bmV4dChlKXt2YXIgdD1lLmxlbmd0aDtsZXQgcjtkb3tpZih0aGlzLl9wcmV2TWF0Y2hTdGFydEluZGV4K3RoaXMuX3ByZXZNYXRjaExlbmd0aD09PXQpcmV0dXJuIG51bGw7aWYoIShyPXRoaXMuX3NlYXJjaFJlZ2V4LmV4ZWMoZSkpKXJldHVybiBudWxsO3ZhciBuPXIuaW5kZXgsaT1yWzBdLmxlbmd0aDtpZihuIT09dGhpcy5fcHJldk1hdGNoU3RhcnRJbmRleHx8aSE9PXRoaXMuX3ByZXZNYXRjaExlbmd0aCl7aWYodGhpcy5fcHJldk1hdGNoU3RhcnRJbmRleD1uLHRoaXMuX3ByZXZNYXRjaExlbmd0aD1pLCF0aGlzLl93b3JkU2VwYXJhdG9yc3x8aHIodGhpcy5fd29yZFNlcGFyYXRvcnMsZSx0LG4saSkpcmV0dXJuIHJ9ZWxzZXtpZigwIT09aSlyZXR1cm4gbnVsbDs2NTUzNTxmdW5jdGlvbihlLHQscil7dmFyIG49ZS5jaGFyQ29kZUF0KHIpO2lmKG9lKG4pJiZyKzE8dCl7dD1lLmNoYXJDb2RlQXQocisxKTtpZig1NjMyMDw9KGU9dCkmJmU8PTU3MzQzKXJldHVybiB0LTU2MzIwKyhuLTU1Mjk2PDwxMCkrNjU1MzZ9cmV0dXJuIG59KGUsdCx0aGlzLl9zZWFyY2hSZWdleC5sYXN0SW5kZXgpP3RoaXMuX3NlYXJjaFJlZ2V4Lmxhc3RJbmRleCs9Mjp0aGlzLl9zZWFyY2hSZWdleC5sYXN0SW5kZXgrPTF9fXdoaWxlKHIpO3JldHVybiBudWxsfX1jbGFzcyBkcntzdGF0aWMgY29tcHV0ZVVuaWNvZGVIaWdobGlnaHRzKHQsdSxlKXt2YXIgaD1lP2Uuc3RhcnRMaW5lTnVtYmVyOjEsZj1lP2UuZW5kTGluZU51bWJlcjp0LmdldExpbmVDb3VudCgpO2NvbnN0IG49bmV3IG1yKHUpO3ZhciBpLGU9bi5nZXRDYW5kaWRhdGVDb2RlUG9pbnRzKCk7bGV0IHI7cj0iYWxsTm9uQmFzaWNBc2NpaSI9PT1lP25ldyBSZWdFeHAoIlteXFx0XFxuXFxyXFx4MjAtXFx4N0VdIiwiZyIpOm5ldyBSZWdFeHAoIiIrZnVuY3Rpb24oZSl7ZT1gWyR7ZS5tYXAoZT0+U3RyaW5nLmZyb21Db2RlUG9pbnQoZSkpLmpvaW4oIiIpLnJlcGxhY2UoL1tcXFx7XH1cKlwrXD9cfFxeXCRcLlxbXF1cKFwpXS9nLCJcXCQmIil9XWA7cmV0dXJuIGV9KEFycmF5LmZyb20oZSkpLCJnIik7Y29uc3Qgbz1uZXcgZnIobnVsbCxyKSxhPVtdO2xldCBkPSExLG09MCxnPTAscD0wO2U6Zm9yKGxldCByPWgsZT1mO3I8PWU7cisrKXtjb25zdCBjPXQuZ2V0TGluZUNvbnRlbnQocik7dmFyIGI9Yy5sZW5ndGg7by5yZXNldCgwKTtkb3tpZihpPW8ubmV4dChjKSl7bGV0IGU9aS5pbmRleCx0PWkuaW5kZXgraVswXS5sZW5ndGg7MDxlJiZvZShjLmNoYXJDb2RlQXQoZS0xKSkmJmUtLSx0KzE8YiYmb2UoYy5jaGFyQ29kZUF0KHQtMSkpJiZ0Kys7dmFyIHM9Yy5zdWJzdHJpbmcoZSx0KSxsPUN0KGUrMSx2dCxjLDApLHM9bi5zaG91bGRIaWdobGlnaHROb25CYXNpY0FTQ0lJKHMsbD9sLndvcmQ6bnVsbCk7aWYoMCE9PXMpe2lmKDM9PT1zKW0rKztlbHNlIGlmKDI9PT1zKWcrKztlbHNle2lmKDEhPT1zKXRocm93IGw9dm9pZCAwLFtsPSJVbnJlYWNoYWJsZSJdPVtdLG5ldyBFcnJvcihsKTtwKyt9aWYoMWUzPD1hLmxlbmd0aCl7ZD0hMDticmVhayBlfWEucHVzaChuZXcgaXQocixlKzEscix0KzEpKX19fXdoaWxlKGkpfXJldHVybntyYW5nZXM6YSxoYXNNb3JlOmQsYW1iaWd1b3VzQ2hhcmFjdGVyQ291bnQ6bSxpbnZpc2libGVDaGFyYWN0ZXJDb3VudDpnLG5vbkJhc2ljQXNjaWlDaGFyYWN0ZXJDb3VudDpwfX1zdGF0aWMgY29tcHV0ZVVuaWNvZGVIaWdobGlnaHRSZWFzb24oZSx0KXtjb25zdCByPW5ldyBtcih0KTtzd2l0Y2goci5zaG91bGRIaWdobGlnaHROb25CYXNpY0FTQ0lJKGUsbnVsbCkpe2Nhc2UgMDpyZXR1cm4gbnVsbDtjYXNlIDI6cmV0dXJue2tpbmQ6MX07Y2FzZSAzOntjb25zdCBvPWUuY29kZVBvaW50QXQoMCk7dmFyIG49ci5hbWJpZ3VvdXNDaGFyYWN0ZXJzLmdldFByaW1hcnlDb25mdXNhYmxlKG8pLGk9c2UuZ2V0TG9jYWxlcygpLmZpbHRlcihlPT4hc2UuZ2V0SW5zdGFuY2UobmV3IFNldChbLi4udC5hbGxvd2VkTG9jYWxlcyxlXSkpLmlzQW1iaWd1b3VzKG8pKTtyZXR1cm57a2luZDowLGNvbmZ1c2FibGVXaXRoOlN0cmluZy5mcm9tQ29kZVBvaW50KG4pLG5vdEFtYmlndW91c0luTG9jYWxlczppfX1jYXNlIDE6cmV0dXJue2tpbmQ6Mn19fX1jbGFzcyBtcntjb25zdHJ1Y3RvcihlKXt0aGlzLm9wdGlvbnM9ZSx0aGlzLmFsbG93ZWRDb2RlUG9pbnRzPW5ldyBTZXQoZS5hbGxvd2VkQ29kZVBvaW50cyksdGhpcy5hbWJpZ3VvdXNDaGFyYWN0ZXJzPXNlLmdldEluc3RhbmNlKG5ldyBTZXQoZS5hbGxvd2VkTG9jYWxlcykpfWdldENhbmRpZGF0ZUNvZGVQb2ludHMoKXtpZih0aGlzLm9wdGlvbnMubm9uQmFzaWNBU0NJSSlyZXR1cm4iYWxsTm9uQmFzaWNBc2NpaSI7Y29uc3QgZT1uZXcgU2V0O2lmKHRoaXMub3B0aW9ucy5pbnZpc2libGVDaGFyYWN0ZXJzKWZvcihjb25zdCB0IG9mIGxlLmNvZGVQb2ludHMpZ3IoU3RyaW5nLmZyb21Db2RlUG9pbnQodCkpfHxlLmFkZCh0KTtpZih0aGlzLm9wdGlvbnMuYW1iaWd1b3VzQ2hhcmFjdGVycylmb3IoY29uc3QgciBvZiB0aGlzLmFtYmlndW91c0NoYXJhY3RlcnMuZ2V0Q29uZnVzYWJsZUNvZGVQb2ludHMoKSllLmFkZChyKTtmb3IoY29uc3QgbiBvZiB0aGlzLmFsbG93ZWRDb2RlUG9pbnRzKWUuZGVsZXRlKG4pO3JldHVybiBlfXNob3VsZEhpZ2hsaWdodE5vbkJhc2ljQVNDSUkoZSx0KXtjb25zdCByPWUuY29kZVBvaW50QXQoMCk7aWYodGhpcy5hbGxvd2VkQ29kZVBvaW50cy5oYXMocikpcmV0dXJuIDA7aWYodGhpcy5vcHRpb25zLm5vbkJhc2ljQVNDSUkpcmV0dXJuIDE7bGV0IG49ITEsaT0hMTtpZih0KWZvcih2YXIgbyBvZiB0KXtjb25zdCByPW8uY29kZVBvaW50QXQoMCk7bz1vO289YWUudGVzdChvKTtuPW58fG8sb3x8dGhpcy5hbWJpZ3VvdXNDaGFyYWN0ZXJzLmlzQW1iaWd1b3VzKHIpfHxsZS5pc0ludmlzaWJsZUNoYXJhY3RlcihyKXx8KGk9ITApfXJldHVybiFuJiZpPzA6dGhpcy5vcHRpb25zLmludmlzaWJsZUNoYXJhY3RlcnMmJiFncihlKSYmbGUuaXNJbnZpc2libGVDaGFyYWN0ZXIocik/Mjp0aGlzLm9wdGlvbnMuYW1iaWd1b3VzQ2hhcmFjdGVycyYmdGhpcy5hbWJpZ3VvdXNDaGFyYWN0ZXJzLmlzQW1iaWd1b3VzKHIpPzM6MH19ZnVuY3Rpb24gZ3IoZSl7cmV0dXJuIiAiPT09ZXx8IlxuIj09PWV8fCJcdCI9PT1lfXZhciBwcixicj1mdW5jdGlvbihlLGEscyxsKXtyZXR1cm4gbmV3KHM9c3x8UHJvbWlzZSkoZnVuY3Rpb24ocix0KXtmdW5jdGlvbiBuKGUpe3RyeXtvKGwubmV4dChlKSl9Y2F0Y2goZSl7dChlKX19ZnVuY3Rpb24gaShlKXt0cnl7byhsLnRocm93KGUpKX1jYXRjaChlKXt0KGUpfX1mdW5jdGlvbiBvKGUpe3ZhciB0O2UuZG9uZT9yKGUudmFsdWUpOigodD1lLnZhbHVlKWluc3RhbmNlb2Ygcz90Om5ldyBzKGZ1bmN0aW9uKGUpe2UodCl9KSkudGhlbihuLGkpfW8oKGw9bC5hcHBseShlLGF8fFtdKSkubmV4dCgpKX0pfTtjbGFzcyB2ciBleHRlbmRzIGNsYXNze2NvbnN0cnVjdG9yKGUsdCxyLG4pe3RoaXMuX3VyaT1lLHRoaXMuX2xpbmVzPXQsdGhpcy5fZW9sPXIsdGhpcy5fdmVyc2lvbklkPW4sdGhpcy5fbGluZVN0YXJ0cz1udWxsLHRoaXMuX2NhY2hlZFRleHRWYWx1ZT1udWxsfWRpc3Bvc2UoKXt0aGlzLl9saW5lcy5sZW5ndGg9MH1nZXQgdmVyc2lvbigpe3JldHVybiB0aGlzLl92ZXJzaW9uSWR9Z2V0VGV4dCgpe3JldHVybiBudWxsPT09dGhpcy5fY2FjaGVkVGV4dFZhbHVlJiYodGhpcy5fY2FjaGVkVGV4dFZhbHVlPXRoaXMuX2xpbmVzLmpvaW4odGhpcy5fZW9sKSksdGhpcy5fY2FjaGVkVGV4dFZhbHVlfW9uRXZlbnRzKGUpe2UuZW9sJiZlLmVvbCE9PXRoaXMuX2VvbCYmKHRoaXMuX2VvbD1lLmVvbCx0aGlzLl9saW5lU3RhcnRzPW51bGwpO2Zvcihjb25zdCB0IG9mIGUuY2hhbmdlcyl0aGlzLl9hY2NlcHREZWxldGVSYW5nZSh0LnJhbmdlKSx0aGlzLl9hY2NlcHRJbnNlcnRUZXh0KG5ldyBudCh0LnJhbmdlLnN0YXJ0TGluZU51bWJlcix0LnJhbmdlLnN0YXJ0Q29sdW1uKSx0LnRleHQpO3RoaXMuX3ZlcnNpb25JZD1lLnZlcnNpb25JZCx0aGlzLl9jYWNoZWRUZXh0VmFsdWU9bnVsbH1fZW5zdXJlTGluZVN0YXJ0cygpe2lmKCF0aGlzLl9saW5lU3RhcnRzKXt2YXIgdD10aGlzLl9lb2wubGVuZ3RoLHI9dGhpcy5fbGluZXMubGVuZ3RoO2NvbnN0IG49bmV3IFVpbnQzMkFycmF5KHIpO2ZvcihsZXQgZT0wO2U8cjtlKyspbltlXT10aGlzLl9saW5lc1tlXS5sZW5ndGgrdDt0aGlzLl9saW5lU3RhcnRzPW5ldyBwdChuKX19X3NldExpbmVUZXh0KGUsdCl7dGhpcy5fbGluZXNbZV09dCx0aGlzLl9saW5lU3RhcnRzJiZ0aGlzLl9saW5lU3RhcnRzLnNldFZhbHVlKGUsdGhpcy5fbGluZXNbZV0ubGVuZ3RoK3RoaXMuX2VvbC5sZW5ndGgpfV9hY2NlcHREZWxldGVSYW5nZShlKXtpZihlLnN0YXJ0TGluZU51bWJlcj09PWUuZW5kTGluZU51bWJlcilyZXR1cm4gZS5zdGFydENvbHVtbj09PWUuZW5kQ29sdW1uP3ZvaWQgMDp2b2lkIHRoaXMuX3NldExpbmVUZXh0KGUuc3RhcnRMaW5lTnVtYmVyLTEsdGhpcy5fbGluZXNbZS5zdGFydExpbmVOdW1iZXItMV0uc3Vic3RyaW5nKDAsZS5zdGFydENvbHVtbi0xKSt0aGlzLl9saW5lc1tlLnN0YXJ0TGluZU51bWJlci0xXS5zdWJzdHJpbmcoZS5lbmRDb2x1bW4tMSkpO3RoaXMuX3NldExpbmVUZXh0KGUuc3RhcnRMaW5lTnVtYmVyLTEsdGhpcy5fbGluZXNbZS5zdGFydExpbmVOdW1iZXItMV0uc3Vic3RyaW5nKDAsZS5zdGFydENvbHVtbi0xKSt0aGlzLl9saW5lc1tlLmVuZExpbmVOdW1iZXItMV0uc3Vic3RyaW5nKGUuZW5kQ29sdW1uLTEpKSx0aGlzLl9saW5lcy5zcGxpY2UoZS5zdGFydExpbmVOdW1iZXIsZS5lbmRMaW5lTnVtYmVyLWUuc3RhcnRMaW5lTnVtYmVyKSx0aGlzLl9saW5lU3RhcnRzJiZ0aGlzLl9saW5lU3RhcnRzLnJlbW92ZVZhbHVlcyhlLnN0YXJ0TGluZU51bWJlcixlLmVuZExpbmVOdW1iZXItZS5zdGFydExpbmVOdW1iZXIpfV9hY2NlcHRJbnNlcnRUZXh0KHQsZSl7aWYoMCE9PWUubGVuZ3RoKXtjb25zdCByPWUuc3BsaXQoL1xyXG58XHJ8XG4vKTtpZigxIT09ci5sZW5ndGgpe3Jbci5sZW5ndGgtMV0rPXRoaXMuX2xpbmVzW3QubGluZU51bWJlci0xXS5zdWJzdHJpbmcodC5jb2x1bW4tMSksdGhpcy5fc2V0TGluZVRleHQodC5saW5lTnVtYmVyLTEsdGhpcy5fbGluZXNbdC5saW5lTnVtYmVyLTFdLnN1YnN0cmluZygwLHQuY29sdW1uLTEpK3JbMF0pO2NvbnN0IG49bmV3IFVpbnQzMkFycmF5KHIubGVuZ3RoLTEpO2ZvcihsZXQgZT0xO2U8ci5sZW5ndGg7ZSsrKXRoaXMuX2xpbmVzLnNwbGljZSh0LmxpbmVOdW1iZXIrZS0xLDAscltlXSksbltlLTFdPXJbZV0ubGVuZ3RoK3RoaXMuX2VvbC5sZW5ndGg7dGhpcy5fbGluZVN0YXJ0cyYmdGhpcy5fbGluZVN0YXJ0cy5pbnNlcnRWYWx1ZXModC5saW5lTnVtYmVyLG4pfWVsc2UgdGhpcy5fc2V0TGluZVRleHQodC5saW5lTnVtYmVyLTEsdGhpcy5fbGluZXNbdC5saW5lTnVtYmVyLTFdLnN1YnN0cmluZygwLHQuY29sdW1uLTEpK3JbMF0rdGhpcy5fbGluZXNbdC5saW5lTnVtYmVyLTFdLnN1YnN0cmluZyh0LmNvbHVtbi0xKSl9fX17Z2V0IHVyaSgpe3JldHVybiB0aGlzLl91cml9Z2V0IGVvbCgpe3JldHVybiB0aGlzLl9lb2x9Z2V0VmFsdWUoKXtyZXR1cm4gdGhpcy5nZXRUZXh0KCl9Z2V0TGluZXNDb250ZW50KCl7cmV0dXJuIHRoaXMuX2xpbmVzLnNsaWNlKDApfWdldExpbmVDb3VudCgpe3JldHVybiB0aGlzLl9saW5lcy5sZW5ndGh9Z2V0TGluZUNvbnRlbnQoZSl7cmV0dXJuIHRoaXMuX2xpbmVzW2UtMV19Z2V0V29yZEF0UG9zaXRpb24oZSx0KXt0PUN0KGUuY29sdW1uLGZ1bmN0aW9uKHQpe2xldCByPXZ0O2lmKHQmJnQgaW5zdGFuY2VvZiBSZWdFeHApaWYodC5nbG9iYWwpcj10O2Vsc2V7bGV0IGU9ImciO3QuaWdub3JlQ2FzZSYmKGUrPSJpIiksdC5tdWx0aWxpbmUmJihlKz0ibSIpLHQudW5pY29kZSYmKGUrPSJ1Iikscj1uZXcgUmVnRXhwKHQuc291cmNlLGUpfXJldHVybiByLmxhc3RJbmRleD0wLHJ9KHQpLHRoaXMuX2xpbmVzW2UubGluZU51bWJlci0xXSwwKTtyZXR1cm4gdD9uZXcgaXQoZS5saW5lTnVtYmVyLHQuc3RhcnRDb2x1bW4sZS5saW5lTnVtYmVyLHQuZW5kQ29sdW1uKTpudWxsfXdvcmRzKHQpe2NvbnN0IHI9dGhpcy5fbGluZXMsbj10aGlzLl93b3JkZW5pemUuYmluZCh0aGlzKTtsZXQgaT0wLG89IiIsYT0wLHM9W107cmV0dXJueypbU3ltYm9sLml0ZXJhdG9yXSgpe2Zvcig7OylpZihhPHMubGVuZ3RoKXt2YXIgZT1vLnN1YnN0cmluZyhzW2FdLnN0YXJ0LHNbYV0uZW5kKTthKz0xLHlpZWxkIGV9ZWxzZXtpZighKGk8ci5sZW5ndGgpKWJyZWFrO289cltpXSxzPW4obyx0KSxhPTAsaSs9MX19fX1nZXRMaW5lV29yZHMoZSx0KXtjb25zdCByPXRoaXMuX2xpbmVzW2UtMV07Y29uc3Qgbj1bXTtmb3IoY29uc3QgaSBvZiB0aGlzLl93b3JkZW5pemUocix0KSluLnB1c2goe3dvcmQ6ci5zdWJzdHJpbmcoaS5zdGFydCxpLmVuZCksc3RhcnRDb2x1bW46aS5zdGFydCsxLGVuZENvbHVtbjppLmVuZCsxfSk7cmV0dXJuIG59X3dvcmRlbml6ZShlLHQpe2NvbnN0IHI9W107dmFyIG47Zm9yKHQubGFzdEluZGV4PTA7KG49dC5leGVjKGUpKSYmMCE9PW5bMF0ubGVuZ3RoOylyLnB1c2goe3N0YXJ0Om4uaW5kZXgsZW5kOm4uaW5kZXgrblswXS5sZW5ndGh9KTtyZXR1cm4gcn1nZXRWYWx1ZUluUmFuZ2UoZSl7aWYoKGU9dGhpcy5fdmFsaWRhdGVSYW5nZShlKSkuc3RhcnRMaW5lTnVtYmVyPT09ZS5lbmRMaW5lTnVtYmVyKXJldHVybiB0aGlzLl9saW5lc1tlLnN0YXJ0TGluZU51bWJlci0xXS5zdWJzdHJpbmcoZS5zdGFydENvbHVtbi0xLGUuZW5kQ29sdW1uLTEpO3ZhciB0PXRoaXMuX2VvbCxyPWUuc3RhcnRMaW5lTnVtYmVyLTEsbj1lLmVuZExpbmVOdW1iZXItMTtjb25zdCBpPVtdO2kucHVzaCh0aGlzLl9saW5lc1tyXS5zdWJzdHJpbmcoZS5zdGFydENvbHVtbi0xKSk7Zm9yKGxldCBlPTErcjtlPG47ZSsrKWkucHVzaCh0aGlzLl9saW5lc1tlXSk7cmV0dXJuIGkucHVzaCh0aGlzLl9saW5lc1tuXS5zdWJzdHJpbmcoMCxlLmVuZENvbHVtbi0xKSksaS5qb2luKHQpfW9mZnNldEF0KGUpe3JldHVybiBlPXRoaXMuX3ZhbGlkYXRlUG9zaXRpb24oZSksdGhpcy5fZW5zdXJlTGluZVN0YXJ0cygpLHRoaXMuX2xpbmVTdGFydHMuZ2V0UHJlZml4U3VtKGUubGluZU51bWJlci0yKSsoZS5jb2x1bW4tMSl9cG9zaXRpb25BdChlKXtlPU1hdGguZmxvb3IoZSksZT1NYXRoLm1heCgwLGUpLHRoaXMuX2Vuc3VyZUxpbmVTdGFydHMoKTt2YXIgZT10aGlzLl9saW5lU3RhcnRzLmdldEluZGV4T2YoZSksdD10aGlzLl9saW5lc1tlLmluZGV4XS5sZW5ndGg7cmV0dXJue2xpbmVOdW1iZXI6MStlLmluZGV4LGNvbHVtbjoxK01hdGgubWluKGUucmVtYWluZGVyLHQpfX1fdmFsaWRhdGVSYW5nZShlKXt2YXIgdD10aGlzLl92YWxpZGF0ZVBvc2l0aW9uKHtsaW5lTnVtYmVyOmUuc3RhcnRMaW5lTnVtYmVyLGNvbHVtbjplLnN0YXJ0Q29sdW1ufSkscj10aGlzLl92YWxpZGF0ZVBvc2l0aW9uKHtsaW5lTnVtYmVyOmUuZW5kTGluZU51bWJlcixjb2x1bW46ZS5lbmRDb2x1bW59KTtyZXR1cm4gdC5saW5lTnVtYmVyIT09ZS5zdGFydExpbmVOdW1iZXJ8fHQuY29sdW1uIT09ZS5zdGFydENvbHVtbnx8ci5saW5lTnVtYmVyIT09ZS5lbmRMaW5lTnVtYmVyfHxyLmNvbHVtbiE9PWUuZW5kQ29sdW1uP3tzdGFydExpbmVOdW1iZXI6dC5saW5lTnVtYmVyLHN0YXJ0Q29sdW1uOnQuY29sdW1uLGVuZExpbmVOdW1iZXI6ci5saW5lTnVtYmVyLGVuZENvbHVtbjpyLmNvbHVtbn06ZX1fdmFsaWRhdGVQb3NpdGlvbihlKXtpZighbnQuaXNJUG9zaXRpb24oZSkpdGhyb3cgbmV3IEVycm9yKCJiYWQgcG9zaXRpb24iKTtsZXR7bGluZU51bWJlcjp0LGNvbHVtbjpyfT1lLG49ITE7dmFyIGk7cmV0dXJuIHQ8MT8odD0xLHI9MSxuPSEwKTp0PnRoaXMuX2xpbmVzLmxlbmd0aD8odD10aGlzLl9saW5lcy5sZW5ndGgscj10aGlzLl9saW5lc1t0LTFdLmxlbmd0aCsxLG49ITApOihpPXRoaXMuX2xpbmVzW3QtMV0ubGVuZ3RoKzEscjwxPyhyPTEsbj0hMCk6cj5pJiYocj1pLG49ITApKSxuP3tsaW5lTnVtYmVyOnQsY29sdW1uOnJ9OmV9fWNsYXNzIHlye2NvbnN0cnVjdG9yKGUsdCl7dGhpcy5faG9zdD1lLHRoaXMuX21vZGVscz1PYmplY3QuY3JlYXRlKG51bGwpLHRoaXMuX2ZvcmVpZ25Nb2R1bGVGYWN0b3J5PXQsdGhpcy5fZm9yZWlnbk1vZHVsZT1udWxsfWRpc3Bvc2UoKXt0aGlzLl9tb2RlbHM9T2JqZWN0LmNyZWF0ZShudWxsKX1fZ2V0TW9kZWwoZSl7cmV0dXJuIHRoaXMuX21vZGVsc1tlXX1fZ2V0TW9kZWxzKCl7Y29uc3QgdD1bXTtyZXR1cm4gT2JqZWN0LmtleXModGhpcy5fbW9kZWxzKS5mb3JFYWNoKGU9PnQucHVzaCh0aGlzLl9tb2RlbHNbZV0pKSx0fWFjY2VwdE5ld01vZGVsKGUpe3RoaXMuX21vZGVsc1tlLnVybF09bmV3IHZyKHplLnBhcnNlKGUudXJsKSxlLmxpbmVzLGUuRU9MLGUudmVyc2lvbklkKX1hY2NlcHRNb2RlbENoYW5nZWQoZSx0KXtpZih0aGlzLl9tb2RlbHNbZV0pe2NvbnN0IHI9dGhpcy5fbW9kZWxzW2VdO3Iub25FdmVudHModCl9fWFjY2VwdFJlbW92ZWRNb2RlbChlKXt0aGlzLl9tb2RlbHNbZV0mJmRlbGV0ZSB0aGlzLl9tb2RlbHNbZV19Y29tcHV0ZVVuaWNvZGVIaWdobGlnaHRzKHQscixuKXtyZXR1cm4gYnIodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3ZhciBlPXRoaXMuX2dldE1vZGVsKHQpO3JldHVybiBlP2RyLmNvbXB1dGVVbmljb2RlSGlnaGxpZ2h0cyhlLHIsbik6e3JhbmdlczpbXSxoYXNNb3JlOiExLGFtYmlndW91c0NoYXJhY3RlckNvdW50OjAsaW52aXNpYmxlQ2hhcmFjdGVyQ291bnQ6MCxub25CYXNpY0FzY2lpQ2hhcmFjdGVyQ291bnQ6MH19KX1jb21wdXRlRGlmZihvLGEscyxsKXtyZXR1cm4gYnIodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2NvbnN0IGU9dGhpcy5fZ2V0TW9kZWwobyksdD10aGlzLl9nZXRNb2RlbChhKTtpZighZXx8IXQpcmV0dXJuIG51bGw7dmFyIHI9ZS5nZXRMaW5lc0NvbnRlbnQoKSxuPXQuZ2V0TGluZXNDb250ZW50KCk7Y29uc3QgaT1uZXcgdXQocixuLHtzaG91bGRDb21wdXRlQ2hhckNoYW5nZXM6ITAsc2hvdWxkUG9zdFByb2Nlc3NDaGFyQ2hhbmdlczohMCxzaG91bGRJZ25vcmVUcmltV2hpdGVzcGFjZTpzLHNob3VsZE1ha2VQcmV0dHlEaWZmOiEwLG1heENvbXB1dGF0aW9uVGltZTpsfSk7cj1pLmNvbXB1dGVEaWZmKCksbj0hKDA8ci5jaGFuZ2VzLmxlbmd0aCkmJnRoaXMuX21vZGVsc0FyZUlkZW50aWNhbChlLHQpO3JldHVybntxdWl0RWFybHk6ci5xdWl0RWFybHksaWRlbnRpY2FsOm4sY2hhbmdlczpyLmNoYW5nZXN9fSl9X21vZGVsc0FyZUlkZW50aWNhbCh0LHIpe3ZhciBuPXQuZ2V0TGluZUNvdW50KCk7aWYobiE9PXIuZ2V0TGluZUNvdW50KCkpcmV0dXJuITE7Zm9yKGxldCBlPTE7ZTw9bjtlKyspaWYodC5nZXRMaW5lQ29udGVudChlKSE9PXIuZ2V0TGluZUNvbnRlbnQoZSkpcmV0dXJuITE7cmV0dXJuITB9Y29tcHV0ZU1vcmVNaW5pbWFsRWRpdHMoZixkKXtyZXR1cm4gYnIodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2NvbnN0IGU9dGhpcy5fZ2V0TW9kZWwoZik7aWYoIWUpcmV0dXJuIGQ7Y29uc3QgdD1bXTtsZXQgcj12b2lkIDA7Zm9yKHZhcntyYW5nZTpuLHRleHQ6aSxlb2w6b31vZiBkPWQuc2xpY2UoMCkuc29ydCgoZSx0KT0+e3JldHVybiBlLnJhbmdlJiZ0LnJhbmdlP2l0LmNvbXBhcmVSYW5nZXNVc2luZ1N0YXJ0cyhlLnJhbmdlLHQucmFuZ2UpOihlLnJhbmdlPzA6MSktKHQucmFuZ2U/MDoxKX0pKWlmKCJudW1iZXIiPT10eXBlb2YgbyYmKHI9byksIWl0LmlzRW1wdHkobil8fGkpe289ZS5nZXRWYWx1ZUluUmFuZ2Uobik7aWYobyE9PShpPWkucmVwbGFjZSgvXHJcbnxcbnxcci9nLGUuZW9sKSkpaWYoTWF0aC5tYXgoaS5sZW5ndGgsby5sZW5ndGgpPnlyLl9kaWZmTGltaXQpdC5wdXNoKHtyYW5nZTpuLHRleHQ6aX0pO2Vsc2V7bz1vLHU9aSxoPSExO3ZhciBvPW5ldyB4ZShuZXcgd2UobyksbmV3IHdlKHUpKS5Db21wdXRlRGlmZihoKS5jaGFuZ2VzLGE9ZS5vZmZzZXRBdChpdC5saWZ0KG4pLmdldFN0YXJ0UG9zaXRpb24oKSk7Zm9yKGNvbnN0IGMgb2Ygbyl7dmFyIHM9ZS5wb3NpdGlvbkF0KGErYy5vcmlnaW5hbFN0YXJ0KSxsPWUucG9zaXRpb25BdChhK2Mub3JpZ2luYWxTdGFydCtjLm9yaWdpbmFsTGVuZ3RoKSxzPXt0ZXh0Omkuc3Vic3RyKGMubW9kaWZpZWRTdGFydCxjLm1vZGlmaWVkTGVuZ3RoKSxyYW5nZTp7c3RhcnRMaW5lTnVtYmVyOnMubGluZU51bWJlcixzdGFydENvbHVtbjpzLmNvbHVtbixlbmRMaW5lTnVtYmVyOmwubGluZU51bWJlcixlbmRDb2x1bW46bC5jb2x1bW59fTtlLmdldFZhbHVlSW5SYW5nZShzLnJhbmdlKSE9PXMudGV4dCYmdC5wdXNoKHMpfX19dmFyIHUsaDtyZXR1cm4ibnVtYmVyIj09dHlwZW9mIHImJnQucHVzaCh7ZW9sOnIsdGV4dDoiIixyYW5nZTp7c3RhcnRMaW5lTnVtYmVyOjAsc3RhcnRDb2x1bW46MCxlbmRMaW5lTnVtYmVyOjAsZW5kQ29sdW1uOjB9fSksdH0pfWNvbXB1dGVMaW5rcyh0KXtyZXR1cm4gYnIodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3ZhciBlPXRoaXMuX2dldE1vZGVsKHQpO3JldHVybiBlPyhlPWUpJiYiZnVuY3Rpb24iPT10eXBlb2YgZS5nZXRMaW5lQ291bnQmJiJmdW5jdGlvbiI9PXR5cGVvZiBlLmdldExpbmVDb250ZW50P0V0LmNvbXB1dGVMaW5rcyhlKTpbXTpudWxsfSl9dGV4dHVhbFN1Z2dlc3QoYSxzLGwsYyl7cmV0dXJuIGJyKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtjb25zdCBlPW5ldyBLKCEwKTt2YXIgdD1uZXcgUmVnRXhwKGwsYyk7Y29uc3Qgcj1uZXcgU2V0O2U6Zm9yKHZhciBuIG9mIGEpe2NvbnN0IG89dGhpcy5fZ2V0TW9kZWwobik7aWYobylmb3IodmFyIGkgb2Ygby53b3Jkcyh0KSlpZihpIT09cyYmaXNOYU4oTnVtYmVyKGkpKSYmKHIuYWRkKGkpLHIuc2l6ZT55ci5fc3VnZ2VzdGlvbnNMaW1pdCkpYnJlYWsgZX1yZXR1cm57d29yZHM6QXJyYXkuZnJvbShyKSxkdXJhdGlvbjplLmVsYXBzZWQoKX19KX1jb21wdXRlV29yZFJhbmdlcyh0LG8sYSxzKXtyZXR1cm4gYnIodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2NvbnN0IGU9dGhpcy5fZ2V0TW9kZWwodCk7aWYoIWUpcmV0dXJuIE9iamVjdC5jcmVhdGUobnVsbCk7dmFyIHI9bmV3IFJlZ0V4cChhLHMpO2NvbnN0IG49T2JqZWN0LmNyZWF0ZShudWxsKTtmb3IobGV0IHQ9by5zdGFydExpbmVOdW1iZXI7dDxvLmVuZExpbmVOdW1iZXI7dCsrKWZvcihjb25zdCBpIG9mIGUuZ2V0TGluZVdvcmRzKHQscikpaWYoaXNOYU4oTnVtYmVyKGkud29yZCkpKXtsZXQgZT1uW2kud29yZF07ZXx8KGU9W10sbltpLndvcmRdPWUpLGUucHVzaCh7c3RhcnRMaW5lTnVtYmVyOnQsc3RhcnRDb2x1bW46aS5zdGFydENvbHVtbixlbmRMaW5lTnVtYmVyOnQsZW5kQ29sdW1uOmkuZW5kQ29sdW1ufSl9cmV0dXJuIG59KX1uYXZpZ2F0ZVZhbHVlU2V0KGksbyxhLHMsbCl7cmV0dXJuIGJyKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtjb25zdCBlPXRoaXMuX2dldE1vZGVsKGkpO2lmKCFlKXJldHVybiBudWxsO3ZhciB0PW5ldyBSZWdFeHAocyxsKSxyPShvLnN0YXJ0Q29sdW1uPT09by5lbmRDb2x1bW4mJihvPXtzdGFydExpbmVOdW1iZXI6by5zdGFydExpbmVOdW1iZXIsc3RhcnRDb2x1bW46by5zdGFydENvbHVtbixlbmRMaW5lTnVtYmVyOm8uZW5kTGluZU51bWJlcixlbmRDb2x1bW46by5lbmRDb2x1bW4rMX0pLGUuZ2V0VmFsdWVJblJhbmdlKG8pKSx0PWUuZ2V0V29yZEF0UG9zaXRpb24oe2xpbmVOdW1iZXI6by5zdGFydExpbmVOdW1iZXIsY29sdW1uOm8uc3RhcnRDb2x1bW59LHQpO2lmKCF0KXJldHVybiBudWxsO3ZhciBuPWUuZ2V0VmFsdWVJblJhbmdlKHQpO3JldHVybiBOdC5JTlNUQU5DRS5uYXZpZ2F0ZVZhbHVlU2V0KG8scix0LG4sYSl9KX1sb2FkRm9yZWlnbk1vZHVsZShlLHQscil7cj1lZShyLChlLHQpPT50aGlzLl9ob3N0LmZocihlLHQpKTtyZXR1cm4gdGhpcy5fZm9yZWlnbk1vZHVsZUZhY3Rvcnk/KHRoaXMuX2ZvcmVpZ25Nb2R1bGU9dGhpcy5fZm9yZWlnbk1vZHVsZUZhY3Rvcnkoe2hvc3Q6cixnZXRNaXJyb3JNb2RlbHM6KCk9PnRoaXMuX2dldE1vZGVscygpfSx0KSxQcm9taXNlLnJlc29sdmUoWSh0aGlzLl9mb3JlaWduTW9kdWxlKSkpOlByb21pc2UucmVqZWN0KG5ldyBFcnJvcigiVW5leHBlY3RlZCB1c2FnZSIpKX1mbXIoZSx0KXtpZighdGhpcy5fZm9yZWlnbk1vZHVsZXx8ImZ1bmN0aW9uIiE9dHlwZW9mIHRoaXMuX2ZvcmVpZ25Nb2R1bGVbZV0pcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcigiTWlzc2luZyByZXF1ZXN0SGFuZGxlciBvciBtZXRob2Q6ICIrZSkpO3RyeXtyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHRoaXMuX2ZvcmVpZ25Nb2R1bGVbZV0uYXBwbHkodGhpcy5fZm9yZWlnbk1vZHVsZSx0KSl9Y2F0Y2goZSl7cmV0dXJuIFByb21pc2UucmVqZWN0KGUpfX19eXIuX2RpZmZMaW1pdD0xZTUseXIuX3N1Z2dlc3Rpb25zTGltaXQ9MWU0LCJmdW5jdGlvbiI9PXR5cGVvZiBpbXBvcnRTY3JpcHRzJiYoTy5tb25hY289e2VkaXRvcjp2b2lkIDAsbGFuZ3VhZ2VzOnZvaWQgMCxleHRyYTp2b2lkIDAsQ2FuY2VsbGF0aW9uVG9rZW5Tb3VyY2U6TXQsRW1pdHRlcjpRLEtleUNvZGU6bG4sS2V5TW9kOnVyLFBvc2l0aW9uOm50LFJhbmdlOml0LFNlbGVjdGlvbjpxdCxVcmk6emUsVG9rZW46enQsTWFya2Rvd25TdHJpbmc6b3IsTWFya2Rvd25TdHJpbmdUZXh0TmV3bGluZVN0eWxlOnVuLERpc3Bvc2FibGU6QyxEaXNwb3NhYmxlU3RvcmU6eSxFcnJvckhhbmRsZXI6cyxBYnN0cmFjdExvZ2dlcjpscixDb25zb2xlTG9nZ2VyOmNyLFRva2VuaXphdGlvblJlc3VsdDpKdCxFbmNvZGVkVG9rZW5pemF0aW9uUmVzdWx0Okd0LFNlbGVjdGlvbkRpcmVjdGlvbjptbixNYXJrZXJTZXZlcml0eTpDbixNYXJrZXJUYWc6SW4sTG9nTGV2ZWw6RG4sZXJyb3JIYW5kbGVyOmx9KTtsZXQgQ3I9ITE7ZnVuY3Rpb24gd3IodCl7aWYoIUNyKXtDcj0hMDtjb25zdCByPW5ldyB2ZShlPT57c2VsZi5wb3N0TWVzc2FnZShlKX0sZT0+bmV3IHlyKGUsdCkpO3NlbGYub25tZXNzYWdlPWU9PntyLm9ubWVzc2FnZShlLmRhdGEpfX19ZnVuY3Rpb24gX3IobyxlKXt2YXIgYT1vLmxlbmd0aCxzPTAsbD0iIixjPTAsdT0xNixoPTAsbT0wLGY9MCxnPTAsZD0wO2Z1bmN0aW9uIHAoKXtmb3IodmFyIGU9IiIsdD1zOzspe2lmKGE8PXMpe2UrPW8uc3Vic3RyaW5nKHQscyksZD0yO2JyZWFrfXZhciByPW8uY2hhckNvZGVBdChzKTtpZigzND09PXIpe2UrPW8uc3Vic3RyaW5nKHQscykscysrO2JyZWFrfWlmKDkyIT09cil7aWYoMDw9ciYmcjw9MzEpe2lmKEFyKHIpKXtlKz1vLnN1YnN0cmluZyh0LHMpLGQ9MjticmVha31kPTZ9cysrfWVsc2V7aWYoZSs9by5zdWJzdHJpbmcodCxzKSxhPD0rK3Mpe2Q9MjticmVha31zd2l0Y2goby5jaGFyQ29kZUF0KHMrKykpe2Nhc2UgMzQ6ZSs9JyInO2JyZWFrO2Nhc2UgOTI6ZSs9IlxcIjticmVhaztjYXNlIDQ3OmUrPSIvIjticmVhaztjYXNlIDk4OmUrPSJcYiI7YnJlYWs7Y2FzZSAxMDI6ZSs9IlxmIjticmVhaztjYXNlIDExMDplKz0iXG4iO2JyZWFrO2Nhc2UgMTE0OmUrPSJcciI7YnJlYWs7Y2FzZSAxMTY6ZSs9Ilx0IjticmVhaztjYXNlIDExNzp2YXIgbj1mdW5jdGlvbihlLHQpe2Zvcih2YXIgcj0wLG49MDtyPGV8fCF0Oyl7dmFyIGk9by5jaGFyQ29kZUF0KHMpO2lmKDQ4PD1pJiZpPD01NyluPTE2Km4raS00ODtlbHNlIGlmKDY1PD1pJiZpPD03MCluPTE2Km4raS02NSsxMDtlbHNle2lmKCEoOTc8PWkmJmk8PTEwMikpYnJlYWs7bj0xNipuK2ktOTcrMTB9cysrLHIrK31yZXR1cm4gbj1yPGU/LTE6bn0oNCwhMCk7MDw9bj9lKz1TdHJpbmcuZnJvbUNoYXJDb2RlKG4pOmQ9NDticmVhaztkZWZhdWx0OmQ9NX10PXN9fXJldHVybiBlfWZ1bmN0aW9uIHQoKXtpZihsPSIiLGQ9MCxtPWgsZz1mLGE8PShjPXMpKXJldHVybiBjPWEsdT0xNzt2YXIgZT1vLmNoYXJDb2RlQXQocyk7aWYoU3IoZSkpe2Zvcig7cysrLGwrPVN0cmluZy5mcm9tQ2hhckNvZGUoZSksU3IoZT1vLmNoYXJDb2RlQXQocykpOyk7cmV0dXJuIHU9MTV9aWYoQXIoZSkpcmV0dXJuIHMrKyxsKz1TdHJpbmcuZnJvbUNoYXJDb2RlKGUpLDEzPT09ZSYmMTA9PT1vLmNoYXJDb2RlQXQocykmJihzKyssbCs9IlxuIiksaCsrLGY9cyx1PTE0O3N3aXRjaChlKXtjYXNlIDEyMzpyZXR1cm4gcysrLHU9MTtjYXNlIDEyNTpyZXR1cm4gcysrLHU9MjtjYXNlIDkxOnJldHVybiBzKyssdT0zO2Nhc2UgOTM6cmV0dXJuIHMrKyx1PTQ7Y2FzZSA1ODpyZXR1cm4gcysrLHU9NjtjYXNlIDQ0OnJldHVybiBzKyssdT01O2Nhc2UgMzQ6cmV0dXJuIHMrKyxsPXAoKSx1PTEwO2Nhc2UgNDc6dmFyIHQ9cy0xO2lmKDQ3PT09by5jaGFyQ29kZUF0KHMrMSkpe2ZvcihzKz0yO3M8YSYmIUFyKG8uY2hhckNvZGVBdChzKSk7KXMrKztyZXR1cm4gbD1vLnN1YnN0cmluZyh0LHMpLHU9MTJ9aWYoNDIhPT1vLmNoYXJDb2RlQXQocysxKSlyZXR1cm4gbCs9U3RyaW5nLmZyb21DaGFyQ29kZShlKSxzKyssdT0xNjtzKz0yO2Zvcih2YXIgcj1hLTEsbj0hMTtzPHI7KXt2YXIgaT1vLmNoYXJDb2RlQXQocyk7aWYoNDI9PT1pJiY0Nz09PW8uY2hhckNvZGVBdChzKzEpKXtzKz0yLG49ITA7YnJlYWt9cysrLEFyKGkpJiYoMTM9PT1pJiYxMD09PW8uY2hhckNvZGVBdChzKSYmcysrLGgrKyxmPXMpfXJldHVybiBufHwocysrLGQ9MSksbD1vLnN1YnN0cmluZyh0LHMpLHU9MTM7Y2FzZSA0NTppZihsKz1TdHJpbmcuZnJvbUNoYXJDb2RlKGUpLCsrcz09PWF8fCF4cihvLmNoYXJDb2RlQXQocykpKXJldHVybiB1PTE2O2Nhc2UgNDg6Y2FzZSA0OTpjYXNlIDUwOmNhc2UgNTE6Y2FzZSA1MjpjYXNlIDUzOmNhc2UgNTQ6Y2FzZSA1NTpjYXNlIDU2OmNhc2UgNTc6cmV0dXJuIGwrPWZ1bmN0aW9uKCl7dmFyIGU9cztpZig0OD09PW8uY2hhckNvZGVBdChzKSlzKys7ZWxzZSBmb3IocysrO3M8by5sZW5ndGgmJnhyKG8uY2hhckNvZGVBdChzKSk7KXMrKztpZihzPG8ubGVuZ3RoJiY0Nj09PW8uY2hhckNvZGVBdChzKSl7aWYoISgrK3M8by5sZW5ndGgmJnhyKG8uY2hhckNvZGVBdChzKSkpKXJldHVybiBkPTMsby5zdWJzdHJpbmcoZSxzKTtmb3IocysrO3M8by5sZW5ndGgmJnhyKG8uY2hhckNvZGVBdChzKSk7KXMrK312YXIgdD1zO2lmKHM8by5sZW5ndGgmJig2OT09PW8uY2hhckNvZGVBdChzKXx8MTAxPT09by5jaGFyQ29kZUF0KHMpKSlpZigoKytzPG8ubGVuZ3RoJiY0Mz09PW8uY2hhckNvZGVBdChzKXx8NDU9PT1vLmNoYXJDb2RlQXQocykpJiZzKyssczxvLmxlbmd0aCYmeHIoby5jaGFyQ29kZUF0KHMpKSl7Zm9yKHMrKztzPG8ubGVuZ3RoJiZ4cihvLmNoYXJDb2RlQXQocykpOylzKys7dD1zfWVsc2UgZD0zO3JldHVybiBvLnN1YnN0cmluZyhlLHQpfSgpLHU9MTE7ZGVmYXVsdDpmb3IoO3M8YSYmZnVuY3Rpb24oZSl7aWYoU3IoZSl8fEFyKGUpKXJldHVybiExO3N3aXRjaChlKXtjYXNlIDEyNTpjYXNlIDkzOmNhc2UgMTIzOmNhc2UgOTE6Y2FzZSAzNDpjYXNlIDU4OmNhc2UgNDQ6Y2FzZSA0NzpyZXR1cm4hMX1yZXR1cm4hMH0oZSk7KXMrKyxlPW8uY2hhckNvZGVBdChzKTtpZihjPT09cylyZXR1cm4gbCs9U3RyaW5nLmZyb21DaGFyQ29kZShlKSxzKyssdT0xNjtzd2l0Y2gobD1vLnN1YnN0cmluZyhjLHMpKXtjYXNlInRydWUiOnJldHVybiB1PTg7Y2FzZSJmYWxzZSI6cmV0dXJuIHU9OTtjYXNlIm51bGwiOnJldHVybiB1PTd9cmV0dXJuIHU9MTZ9fXJldHVybntzZXRQb3NpdGlvbjpmdW5jdGlvbihlKXtzPWUsbD0iIix1PTE2LGQ9Yz0wfSxnZXRQb3NpdGlvbjpmdW5jdGlvbigpe3JldHVybiBzfSxzY2FuOihlPXZvaWQgMD09PWU/ITE6ZSk/ZnVuY3Rpb24oKXtmb3IodmFyIGU7MTI8PShlPXQoKSkmJmU8PTE1Oyk7cmV0dXJuIGV9OnQsZ2V0VG9rZW46ZnVuY3Rpb24oKXtyZXR1cm4gdX0sZ2V0VG9rZW5WYWx1ZTpmdW5jdGlvbigpe3JldHVybiBsfSxnZXRUb2tlbk9mZnNldDpmdW5jdGlvbigpe3JldHVybiBjfSxnZXRUb2tlbkxlbmd0aDpmdW5jdGlvbigpe3JldHVybiBzLWN9LGdldFRva2VuU3RhcnRMaW5lOmZ1bmN0aW9uKCl7cmV0dXJuIG19LGdldFRva2VuU3RhcnRDaGFyYWN0ZXI6ZnVuY3Rpb24oKXtyZXR1cm4gYy1nfSxnZXRUb2tlbkVycm9yOmZ1bmN0aW9uKCl7cmV0dXJuIGR9fX1mdW5jdGlvbiBTcihlKXtyZXR1cm4gMzI9PT1lfHw5PT09ZXx8MTE9PT1lfHwxMj09PWV8fDE2MD09PWV8fDU3NjA9PT1lfHw4MTkyPD1lJiZlPD04MjAzfHw4MjM5PT09ZXx8ODI4Nz09PWV8fDEyMjg4PT09ZXx8NjUyNzk9PT1lfWZ1bmN0aW9uIEFyKGUpe3JldHVybiAxMD09PWV8fDEzPT09ZXx8ODIzMj09PWV8fDgyMzM9PT1lfWZ1bmN0aW9uIHhyKGUpe3JldHVybiA0ODw9ZSYmZTw9NTd9ZnVuY3Rpb24gRXIobix1LGUpe3ZhciBoLHQsZixkO2lmKHUpe2ZvcihmPXUub2Zmc2V0LGQ9Zit1Lmxlbmd0aCx0PWY7MDx0JiYha3Iobix0LTEpOyl0LS07Zm9yKHZhciBtPWQ7bTxuLmxlbmd0aCYmIWtyKG4sbSk7KW0rKzthPW4uc3Vic3RyaW5nKHQsbSksaD1mdW5jdGlvbihlLHQpe3ZhciByPTAsbj0wLGk9dC50YWJTaXplfHw0O2Zvcig7cjxlLmxlbmd0aDspe3ZhciBvPWUuY2hhckF0KHIpO2lmKCIgIj09PW8pbisrO2Vsc2V7aWYoIlx0IiE9PW8pYnJlYWs7bis9aX1yKyt9cmV0dXJuIE1hdGguZmxvb3Iobi9pKX0oYSxlKX1lbHNlIGY9dD1oPTAsZD0oYT1uKS5sZW5ndGg7dmFyIGc9ZnVuY3Rpb24oZSx0KXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKyl7dmFyIG49dC5jaGFyQXQocik7aWYoIlxyIj09PW4pcmV0dXJuIHIrMTx0Lmxlbmd0aCYmIlxuIj09PXQuY2hhckF0KHIrMSk/IlxyXG4iOiJcciI7aWYoIlxuIj09PW4pcmV0dXJuIlxuIn1yZXR1cm4gZSYmZS5lb2x8fCJcbiJ9KGUsbikscj0hMSxwPTAsYj1lLmluc2VydFNwYWNlcz9OcigiICIsZS50YWJTaXplfHw0KToiXHQiLGk9X3IoYSwhMSksdj0hMTtmdW5jdGlvbiBvKCl7cmV0dXJuIGcrTnIoYixoK3ApfWZ1bmN0aW9uIHkoKXt2YXIgZT1pLnNjYW4oKTtmb3Iocj0hMTsxNT09PWV8fDE0PT09ZTspcj1yfHwxND09PWUsZT1pLnNjYW4oKTtyZXR1cm4gdj0xNj09PWV8fDAhPT1pLmdldFRva2VuRXJyb3IoKSxlfXZhciBDPVtdO2Z1bmN0aW9uIHcoZSx0LHIpe3Z8fHUmJiEodDxkJiZmPHIpfHxuLnN1YnN0cmluZyh0LHIpPT09ZXx8Qy5wdXNoKHtvZmZzZXQ6dCxsZW5ndGg6ci10LGNvbnRlbnQ6ZX0pfXZhciBhLHM9eSgpO2ZvcigxNyE9PXMmJihhPWkuZ2V0VG9rZW5PZmZzZXQoKSt0LHcoTnIoYixoKSx0LGEpKTsxNyE9PXM7KXtmb3IodmFyIF89aS5nZXRUb2tlbk9mZnNldCgpK2kuZ2V0VG9rZW5MZW5ndGgoKSt0LGw9eSgpLGM9IiIsUz0hMTshciYmKDEyPT09bHx8MTM9PT1sKTspdygiICIsXyxpLmdldFRva2VuT2Zmc2V0KCkrdCksXz1pLmdldFRva2VuT2Zmc2V0KCkraS5nZXRUb2tlbkxlbmd0aCgpK3QsYz0oUz0xMj09PWwpP28oKToiIixsPXkoKTtpZigyPT09bCkxIT09cyYmKHAtLSxjPW8oKSk7ZWxzZSBpZig0PT09bCkzIT09cyYmKHAtLSxjPW8oKSk7ZWxzZXtzd2l0Y2gocyl7Y2FzZSAzOmNhc2UgMTpwKyssYz1vKCk7YnJlYWs7Y2FzZSA1OmNhc2UgMTI6Yz1vKCk7YnJlYWs7Y2FzZSAxMzpyP2M9bygpOlN8fChjPSIgIik7YnJlYWs7Y2FzZSA2OlN8fChjPSIgIik7YnJlYWs7Y2FzZSAxMDppZig2PT09bCl7U3x8KGM9IiIpO2JyZWFrfWNhc2UgNzpjYXNlIDg6Y2FzZSA5OmNhc2UgMTE6Y2FzZSAyOmNhc2UgNDoxMj09PWx8fDEzPT09bD9TfHwoYz0iICIpOjUhPT1sJiYxNyE9PWwmJih2PSEwKTticmVhaztjYXNlIDE2OnY9ITB9IXJ8fDEyIT09bCYmMTMhPT1sfHwoYz1vKCkpfXcoYz0xNz09PWw/ZS5pbnNlcnRGaW5hbE5ld2xpbmU/ZzoiIjpjLF8saS5nZXRUb2tlbk9mZnNldCgpK3QpLHM9bH1yZXR1cm4gQ31mdW5jdGlvbiBOcihlLHQpe2Zvcih2YXIgcj0iIixuPTA7bjx0O24rKylyKz1lO3JldHVybiByfWZ1bmN0aW9uIGtyKGUsdCl7cmV0dXJuLTEhPT0iXHJcbiIuaW5kZXhPZihlLmNoYXJBdCh0KSl9c2VsZi5vbm1lc3NhZ2U9ZT0+e0NyfHx3cihudWxsKX0sKHByPXByfHx7fSkuREVGQVVMVD17YWxsb3dUcmFpbGluZ0NvbW1hOiExfTt2YXIgTHIsTXIsT3IsVHIsSXIsUHIsVnIsUnIsRHIsRnIsS3IsanIsVXIscXIsQnIsJHIsV3IsSHIsenI9X3IsSnI9ZnVuY3Rpb24oZSxuLHQpe3ZvaWQgMD09PW4mJihuPVtdKSx2b2lkIDA9PT10JiYodD1wci5ERUZBVUxUKTt2YXIgcj1udWxsLGk9W10sbz1bXTtmdW5jdGlvbiBhKGUpe0FycmF5LmlzQXJyYXkoaSk/aS5wdXNoKGUpOm51bGwhPT1yJiYoaVtyXT1lKX1yZXR1cm4gZnVuY3Rpb24odSxlLHQpe3ZvaWQgMD09PXQmJih0PXByLkRFRkFVTFQpO3ZhciBpPV9yKHUsITEpO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGU/ZnVuY3Rpb24oKXtyZXR1cm4gZShpLmdldFRva2VuT2Zmc2V0KCksaS5nZXRUb2tlbkxlbmd0aCgpLGkuZ2V0VG9rZW5TdGFydExpbmUoKSxpLmdldFRva2VuU3RhcnRDaGFyYWN0ZXIoKSl9OmZ1bmN0aW9uKCl7cmV0dXJuITB9fWZ1bmN0aW9uIG4odCl7cmV0dXJuIHQ/ZnVuY3Rpb24oZSl7cmV0dXJuIHQoZSxpLmdldFRva2VuT2Zmc2V0KCksaS5nZXRUb2tlbkxlbmd0aCgpLGkuZ2V0VG9rZW5TdGFydExpbmUoKSxpLmdldFRva2VuU3RhcnRDaGFyYWN0ZXIoKSl9OmZ1bmN0aW9uKCl7cmV0dXJuITB9fXZhciBoPXIoZS5vbk9iamVjdEJlZ2luKSxmPW4oZS5vbk9iamVjdFByb3BlcnR5KSxkPXIoZS5vbk9iamVjdEVuZCksbT1yKGUub25BcnJheUJlZ2luKSxnPXIoZS5vbkFycmF5RW5kKSxvPW4oZS5vbkxpdGVyYWxWYWx1ZSksYT1uKGUub25TZXBhcmF0b3IpLHA9cihlLm9uQ29tbWVudCksYj1uKGUub25FcnJvciksdj10JiZ0LmRpc2FsbG93Q29tbWVudHMseT10JiZ0LmFsbG93VHJhaWxpbmdDb21tYTtmdW5jdGlvbiBzKCl7Zm9yKDs7KXt2YXIgZT1pLnNjYW4oKTtzd2l0Y2goaS5nZXRUb2tlbkVycm9yKCkpe2Nhc2UgNDpsKDE0KTticmVhaztjYXNlIDU6bCgxNSk7YnJlYWs7Y2FzZSAzOmwoMTMpO2JyZWFrO2Nhc2UgMTp2fHxsKDExKTticmVhaztjYXNlIDI6bCgxMik7YnJlYWs7Y2FzZSA2OmwoMTYpfXN3aXRjaChlKXtjYXNlIDEyOmNhc2UgMTM6dj9sKDEwKTpwKCk7YnJlYWs7Y2FzZSAxNjpsKDEpO2JyZWFrO2Nhc2UgMTU6Y2FzZSAxNDpicmVhaztkZWZhdWx0OnJldHVybiBlfX19ZnVuY3Rpb24gbChlLHQscil7aWYodm9pZCAwPT09dCYmKHQ9W10pLHZvaWQgMD09PXImJihyPVtdKSxiKGUpLDA8dC5sZW5ndGgrci5sZW5ndGgpZm9yKHZhciBuPWkuZ2V0VG9rZW4oKTsxNyE9PW47KXtpZigtMSE9PXQuaW5kZXhPZihuKSl7cygpO2JyZWFrfWlmKC0xIT09ci5pbmRleE9mKG4pKWJyZWFrO249cygpfX1mdW5jdGlvbiBDKGUpe3ZhciB0PWkuZ2V0VG9rZW5WYWx1ZSgpO3JldHVybihlP286ZikodCkscygpLCEwfWZ1bmN0aW9uIHcoKXtoKCkscygpO2Zvcih2YXIgZT0hMTsyIT09aS5nZXRUb2tlbigpJiYxNyE9PWkuZ2V0VG9rZW4oKTspe2lmKDU9PT1pLmdldFRva2VuKCkpe2lmKGV8fGwoNCxbXSxbXSksYSgiLCIpLHMoKSwyPT09aS5nZXRUb2tlbigpJiZ5KWJyZWFrfWVsc2UgZSYmbCg2LFtdLFtdKTshZnVuY3Rpb24oKXtpZigxMD09PWkuZ2V0VG9rZW4oKSlyZXR1cm4gQyghMSksNj09PWkuZ2V0VG9rZW4oKT8oYSgiOiIpLHMoKSxjKCl8fGwoNCxbXSxbMiw1XSkpOmwoNSxbXSxbMiw1XSksMTtsKDMsW10sWzIsNV0pfSgpJiZsKDQsW10sWzIsNV0pLGU9ITB9cmV0dXJuIGQoKSwyIT09aS5nZXRUb2tlbigpP2woNyxbMl0sW10pOnMoKSwhMH1mdW5jdGlvbiBjKCl7c3dpdGNoKGkuZ2V0VG9rZW4oKSl7Y2FzZSAzOm0oKSxzKCk7Zm9yKHZhciBlPSExOzQhPT1pLmdldFRva2VuKCkmJjE3IT09aS5nZXRUb2tlbigpOyl7aWYoNT09PWkuZ2V0VG9rZW4oKSl7aWYoZXx8bCg0LFtdLFtdKSxhKCIsIikscygpLDQ9PT1pLmdldFRva2VuKCkmJnkpYnJlYWt9ZWxzZSBlJiZsKDYsW10sW10pO2MoKXx8bCg0LFtdLFs0LDVdKSxlPSEwfXJldHVybiBnKCksNCE9PWkuZ2V0VG9rZW4oKT9sKDgsWzRdLFtdKTpzKCksMTtjYXNlIDE6cmV0dXJuIHcoKTtjYXNlIDEwOnJldHVybiBDKCEwKTtkZWZhdWx0OnN3aXRjaChpLmdldFRva2VuKCkpe2Nhc2UgMTE6dmFyIHQ9aS5nZXRUb2tlblZhbHVlKCksdD1OdW1iZXIodCk7aXNOYU4odCkmJihsKDIpLHQ9MCksbyh0KTticmVhaztjYXNlIDc6byhudWxsKTticmVhaztjYXNlIDg6byghMCk7YnJlYWs7Y2FzZSA5Om8oITEpO2JyZWFrO2RlZmF1bHQ6cmV0dXJufXJldHVybiBzKCksMX19aWYocygpLDE3PT09aS5nZXRUb2tlbigpKXJldHVybiB0LmFsbG93RW1wdHlDb250ZW50fHxsKDQsW10sW10pO2lmKCFjKCkpcmV0dXJuIGwoNCxbXSxbXSk7MTchPT1pLmdldFRva2VuKCkmJmwoOSxbXSxbXSl9KGUse29uT2JqZWN0QmVnaW46ZnVuY3Rpb24oKXt2YXIgZT17fTthKGUpLG8ucHVzaChpKSxpPWUscj1udWxsfSxvbk9iamVjdFByb3BlcnR5OmZ1bmN0aW9uKGUpe3I9ZX0sb25PYmplY3RFbmQ6ZnVuY3Rpb24oKXtpPW8ucG9wKCl9LG9uQXJyYXlCZWdpbjpmdW5jdGlvbigpe3ZhciBlPVtdO2EoZSksby5wdXNoKGkpLGk9ZSxyPW51bGx9LG9uQXJyYXlFbmQ6ZnVuY3Rpb24oKXtpPW8ucG9wKCl9LG9uTGl0ZXJhbFZhbHVlOmEsb25FcnJvcjpmdW5jdGlvbihlLHQscil7bi5wdXNoKHtlcnJvcjplLG9mZnNldDp0LGxlbmd0aDpyfSl9fSx0KSxpWzBdfSxHcj1mdW5jdGlvbiBlKHQscixuKXtpZih2b2lkIDA9PT0oYz1uPXZvaWQgMCE9PW4mJm4pJiYoYz0hMSksKGw9cik+PShzPXQpLm9mZnNldCYmbDxzLm9mZnNldCtzLmxlbmd0aHx8YyYmbD09PXMub2Zmc2V0K3MubGVuZ3RoKXt2YXIgaT10LmNoaWxkcmVuO2lmKEFycmF5LmlzQXJyYXkoaSkpZm9yKHZhciBvPTA7bzxpLmxlbmd0aCYmaVtvXS5vZmZzZXQ8PXI7bysrKXt2YXIgYT1lKGlbb10scixuKTtpZihhKXJldHVybiBhfXJldHVybiB0fXZhciBzLGwsY30sWnI9ZnVuY3Rpb24gZSh0KXtpZighdC5wYXJlbnR8fCF0LnBhcmVudC5jaGlsZHJlbilyZXR1cm5bXTt2YXIgcixuPWUodC5wYXJlbnQpO3JldHVybiJwcm9wZXJ0eSI9PT10LnBhcmVudC50eXBlPyhyPXQucGFyZW50LmNoaWxkcmVuWzBdLnZhbHVlLG4ucHVzaChyKSk6ImFycmF5IiE9PXQucGFyZW50LnR5cGV8fC0xIT09KHI9dC5wYXJlbnQuY2hpbGRyZW4uaW5kZXhPZih0KSkmJm4ucHVzaChyKSxufSxYcj1mdW5jdGlvbiBlKHQpe3N3aXRjaCh0LnR5cGUpe2Nhc2UiYXJyYXkiOnJldHVybiB0LmNoaWxkcmVuLm1hcChlKTtjYXNlIm9iamVjdCI6Zm9yKHZhciByPU9iamVjdC5jcmVhdGUobnVsbCksbj0wLGk9dC5jaGlsZHJlbjtuPGkubGVuZ3RoO24rKyl7dmFyIG89aVtuXSxhPW8uY2hpbGRyZW5bMV07YSYmKHJbby5jaGlsZHJlblswXS52YWx1ZV09ZShhKSl9cmV0dXJuIHI7Y2FzZSJudWxsIjpjYXNlInN0cmluZyI6Y2FzZSJudW1iZXIiOmNhc2UiYm9vbGVhbiI6cmV0dXJuIHQudmFsdWU7ZGVmYXVsdDpyZXR1cm59fTtmdW5jdGlvbiBRcihlLHQpe2lmKGU9PT10KXJldHVybiAxO2lmKG51bGwhPWUmJm51bGwhPXQmJnR5cGVvZiBlPT10eXBlb2YgdCYmIm9iamVjdCI9PXR5cGVvZiBlJiZBcnJheS5pc0FycmF5KGUpPT09QXJyYXkuaXNBcnJheSh0KSl7dmFyIHIsbjtpZihBcnJheS5pc0FycmF5KGUpKXtpZihlLmxlbmd0aCE9PXQubGVuZ3RoKXJldHVybjtmb3Iocj0wO3I8ZS5sZW5ndGg7cisrKWlmKCFRcihlW3JdLHRbcl0pKXJldHVybn1lbHNle3ZhciBpPVtdO2ZvcihuIGluIGUpaS5wdXNoKG4pO2kuc29ydCgpO3ZhciBvPVtdO2ZvcihuIGluIHQpby5wdXNoKG4pO2lmKG8uc29ydCgpLCFRcihpLG8pKXJldHVybjtmb3Iocj0wO3I8aS5sZW5ndGg7cisrKWlmKCFRcihlW2lbcl1dLHRbaVtyXV0pKXJldHVybn1yZXR1cm4gMX19ZnVuY3Rpb24gWXIoZSl7cmV0dXJuIm51bWJlciI9PXR5cGVvZiBlfWZ1bmN0aW9uIGVuKGUpe3JldHVybiB2b2lkIDAhPT1lfWZ1bmN0aW9uIHRuKGUpe3JldHVybiJib29sZWFuIj09dHlwZW9mIGV9ZnVuY3Rpb24gcm4oZSx0KXt2YXIgcj1lLmxlbmd0aC10Lmxlbmd0aDtyZXR1cm4gMDxyP2UubGFzdEluZGV4T2YodCk9PT1yOjA9PXImJmU9PT10fWZ1bmN0aW9uIG5uKHQpe3ZhciByPSIiOyFmdW5jdGlvbihlLHQpe2lmKCEoZS5sZW5ndGg8dC5sZW5ndGgpKXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKylpZihlW3JdIT09dFtyXSlyZXR1cm47cmV0dXJuIDF9fSh0LCIoP2kpIil8fCh0PXQuc3Vic3RyaW5nKDQpLHI9ImkiKTt0cnl7cmV0dXJuIG5ldyBSZWdFeHAodCxyKyJ1Iil9Y2F0Y2goZSl7dHJ5e3JldHVybiBuZXcgUmVnRXhwKHQscil9Y2F0Y2goZSl7cmV0dXJufX19KG49THI9THJ8fHt9KS5NSU5fVkFMVUU9MCxuLk1BWF9WQUxVRT0yMTQ3NDgzNjQ3LCgkbj1Ncj1Ncnx8e30pLmNyZWF0ZT1mdW5jdGlvbihlLHQpe3JldHVybntsaW5lOmU9ZT09PU51bWJlci5NQVhfVkFMVUU/THIuTUFYX1ZBTFVFOmUsY2hhcmFjdGVyOnQ9dD09PU51bWJlci5NQVhfVkFMVUU/THIuTUFYX1ZBTFVFOnR9fSwkbi5pcz1mdW5jdGlvbihlKXtyZXR1cm4gYS5vYmplY3RMaXRlcmFsKGUpJiZhLnVpbnRlZ2VyKGUubGluZSkmJmEudWludGVnZXIoZS5jaGFyYWN0ZXIpfSwoSG49T3I9T3J8fHt9KS5jcmVhdGU9ZnVuY3Rpb24oZSx0LHIsbil7aWYoYS51aW50ZWdlcihlKSYmYS51aW50ZWdlcih0KSYmYS51aW50ZWdlcihyKSYmYS51aW50ZWdlcihuKSlyZXR1cm57c3RhcnQ6TXIuY3JlYXRlKGUsdCksZW5kOk1yLmNyZWF0ZShyLG4pfTtpZihNci5pcyhlKSYmTXIuaXModCkpcmV0dXJue3N0YXJ0OmUsZW5kOnR9O3Rocm93IG5ldyBFcnJvcigiUmFuZ2UjY3JlYXRlIGNhbGxlZCB3aXRoIGludmFsaWQgYXJndW1lbnRzWyIrZSsiLCAiK3QrIiwgIityKyIsICIrbisiXSIpfSxIbi5pcz1mdW5jdGlvbihlKXtyZXR1cm4gYS5vYmplY3RMaXRlcmFsKGUpJiZNci5pcyhlLnN0YXJ0KSYmTXIuaXMoZS5lbmQpfSwoZT1Ucj1Ucnx8e30pLmNyZWF0ZT1mdW5jdGlvbihlLHQpe3JldHVybnt1cmk6ZSxyYW5nZTp0fX0sZS5pcz1mdW5jdGlvbihlKXtyZXR1cm4gYS5kZWZpbmVkKGUpJiZPci5pcyhlLnJhbmdlKSYmKGEuc3RyaW5nKGUudXJpKXx8YS51bmRlZmluZWQoZS51cmkpKX0sKHQ9JHI9JHJ8fHt9KS5jcmVhdGU9ZnVuY3Rpb24oZSx0LHIsbil7cmV0dXJue3JlZDplLGdyZWVuOnQsYmx1ZTpyLGFscGhhOm59fSx0LmlzPWZ1bmN0aW9uKGUpe3JldHVybiBhLm51bWJlclJhbmdlKGUucmVkLDAsMSkmJmEubnVtYmVyUmFuZ2UoZS5ncmVlbiwwLDEpJiZhLm51bWJlclJhbmdlKGUuYmx1ZSwwLDEpJiZhLm51bWJlclJhbmdlKGUuYWxwaGEsMCwxKX0sKGxuPUlyPUlyfHx7fSkuQ29tbWVudD0iY29tbWVudCIsbG4uSW1wb3J0cz0iaW1wb3J0cyIsbG4uUmVnaW9uPSJyZWdpb24iLCh1bj1Qcj1Qcnx8e30pLmNyZWF0ZT1mdW5jdGlvbihlLHQpe3JldHVybntsb2NhdGlvbjplLG1lc3NhZ2U6dH19LHVuLmlzPWZ1bmN0aW9uKGUpe3JldHVybiBhLmRlZmluZWQoZSkmJlRyLmlzKGUubG9jYXRpb24pJiZhLnN0cmluZyhlLm1lc3NhZ2UpfSwobW49VnI9VnJ8fHt9KS5FcnJvcj0xLG1uLldhcm5pbmc9Mixtbi5JbmZvcm1hdGlvbj0zLG1uLkhpbnQ9NCwocG58fHt9KS5pcz1mdW5jdGlvbihlKXtyZXR1cm4gbnVsbCE9ZSYmYS5zdHJpbmcoZS5ocmVmKX0sKENuPVJyPVJyfHx7fSkuY3JlYXRlPWZ1bmN0aW9uKGUsdCxyLG4saSxvKXtyZXR1cm4gZT17cmFuZ2U6ZSxtZXNzYWdlOnR9LGEuZGVmaW5lZChyKSYmKGUuc2V2ZXJpdHk9ciksYS5kZWZpbmVkKG4pJiYoZS5jb2RlPW4pLGEuZGVmaW5lZChpKSYmKGUuc291cmNlPWkpLGEuZGVmaW5lZChvKSYmKGUucmVsYXRlZEluZm9ybWF0aW9uPW8pLGV9LENuLmlzPWZ1bmN0aW9uKGUpe3ZhciB0O3JldHVybiBhLmRlZmluZWQoZSkmJk9yLmlzKGUucmFuZ2UpJiZhLnN0cmluZyhlLm1lc3NhZ2UpJiYoYS5udW1iZXIoZS5zZXZlcml0eSl8fGEudW5kZWZpbmVkKGUuc2V2ZXJpdHkpKSYmKGEuaW50ZWdlcihlLmNvZGUpfHxhLnN0cmluZyhlLmNvZGUpfHxhLnVuZGVmaW5lZChlLmNvZGUpKSYmKGEudW5kZWZpbmVkKGUuY29kZURlc2NyaXB0aW9uKXx8YS5zdHJpbmcobnVsbD09PSh0PWUuY29kZURlc2NyaXB0aW9uKXx8dm9pZCAwPT09dD92b2lkIDA6dC5ocmVmKSkmJihhLnN0cmluZyhlLnNvdXJjZSl8fGEudW5kZWZpbmVkKGUuc291cmNlKSkmJihhLnVuZGVmaW5lZChlLnJlbGF0ZWRJbmZvcm1hdGlvbil8fGEudHlwZWRBcnJheShlLnJlbGF0ZWRJbmZvcm1hdGlvbixQci5pcykpfSwoSW49RW49RW58fHt9KS5jcmVhdGU9ZnVuY3Rpb24oZSx0KXtmb3IodmFyIHI9W10sbj0yO248YXJndW1lbnRzLmxlbmd0aDtuKyspcltuLTJdPWFyZ3VtZW50c1tuXTtyZXR1cm4gZT17dGl0bGU6ZSxjb21tYW5kOnR9LGEuZGVmaW5lZChyKSYmMDxyLmxlbmd0aCYmKGUuYXJndW1lbnRzPXIpLGV9LEluLmlzPWZ1bmN0aW9uKGUpe3JldHVybiBhLmRlZmluZWQoZSkmJmEuc3RyaW5nKGUudGl0bGUpJiZhLnN0cmluZyhlLmNvbW1hbmQpfSwoRG49RHI9RHJ8fHt9KS5yZXBsYWNlPWZ1bmN0aW9uKGUsdCl7cmV0dXJue3JhbmdlOmUsbmV3VGV4dDp0fX0sRG4uaW5zZXJ0PWZ1bmN0aW9uKGUsdCl7cmV0dXJue3JhbmdlOntzdGFydDplLGVuZDplfSxuZXdUZXh0OnR9fSxEbi5kZWw9ZnVuY3Rpb24oZSl7cmV0dXJue3JhbmdlOmUsbmV3VGV4dDoiIn19LERuLmlzPWZ1bmN0aW9uKGUpe3JldHVybiBhLm9iamVjdExpdGVyYWwoZSkmJmEuc3RyaW5nKGUubmV3VGV4dCkmJk9yLmlzKGUucmFuZ2UpfSwobj1Gcj1Gcnx8e30pLmNyZWF0ZT1mdW5jdGlvbihlLHQscil7cmV0dXJuIGU9e2xhYmVsOmV9LHZvaWQgMCE9PXQmJihlLm5lZWRzQ29uZmlybWF0aW9uPXQpLHZvaWQgMCE9PXImJihlLmRlc2NyaXB0aW9uPXIpLGV9LG4uaXM9ZnVuY3Rpb24oZSl7cmV0dXJuIHZvaWQgMCE9PWUmJmEub2JqZWN0TGl0ZXJhbChlKSYmYS5zdHJpbmcoZS5sYWJlbCkmJihhLmJvb2xlYW4oZS5uZWVkc0NvbmZpcm1hdGlvbil8fHZvaWQgMD09PWUubmVlZHNDb25maXJtYXRpb24pJiYoYS5zdHJpbmcoZS5kZXNjcmlwdGlvbil8fHZvaWQgMD09PWUuZGVzY3JpcHRpb24pfSwoS3J8fChLcj17fSkpLmlzPWZ1bmN0aW9uKGUpe3JldHVybiJzdHJpbmciPT10eXBlb2YgZX0sKCRuPWpyPWpyfHx7fSkucmVwbGFjZT1mdW5jdGlvbihlLHQscil7cmV0dXJue3JhbmdlOmUsbmV3VGV4dDp0LGFubm90YXRpb25JZDpyfX0sJG4uaW5zZXJ0PWZ1bmN0aW9uKGUsdCxyKXtyZXR1cm57cmFuZ2U6e3N0YXJ0OmUsZW5kOmV9LG5ld1RleHQ6dCxhbm5vdGF0aW9uSWQ6cn19LCRuLmRlbD1mdW5jdGlvbihlLHQpe3JldHVybntyYW5nZTplLG5ld1RleHQ6IiIsYW5ub3RhdGlvbklkOnR9fSwkbi5pcz1mdW5jdGlvbihlKXtyZXR1cm4gRHIuaXMoZSkmJihGci5pcyhlLmFubm90YXRpb25JZCl8fEtyLmlzKGUuYW5ub3RhdGlvbklkKSl9LChIbj1Vcj1Vcnx8e30pLmNyZWF0ZT1mdW5jdGlvbihlLHQpe3JldHVybnt0ZXh0RG9jdW1lbnQ6ZSxlZGl0czp0fX0sSG4uaXM9ZnVuY3Rpb24oZSl7cmV0dXJuIGEuZGVmaW5lZChlKSYmc24uaXMoZS50ZXh0RG9jdW1lbnQpJiZBcnJheS5pc0FycmF5KGUuZWRpdHMpfSwoZT1xcj1xcnx8e30pLmNyZWF0ZT1mdW5jdGlvbihlLHQscil7cmV0dXJuIGU9e2tpbmQ6ImNyZWF0ZSIsdXJpOmV9LHZvaWQgMD09PXR8fHZvaWQgMD09PXQub3ZlcndyaXRlJiZ2b2lkIDA9PT10Lmlnbm9yZUlmRXhpc3RzfHwoZS5vcHRpb25zPXQpLHZvaWQgMCE9PXImJihlLmFubm90YXRpb25JZD1yKSxlfSxlLmlzPWZ1bmN0aW9uKGUpe3JldHVybiBlJiYiY3JlYXRlIj09PWUua2luZCYmYS5zdHJpbmcoZS51cmkpJiYodm9pZCAwPT09ZS5vcHRpb25zfHwodm9pZCAwPT09ZS5vcHRpb25zLm92ZXJ3cml0ZXx8YS5ib29sZWFuKGUub3B0aW9ucy5vdmVyd3JpdGUpKSYmKHZvaWQgMD09PWUub3B0aW9ucy5pZ25vcmVJZkV4aXN0c3x8YS5ib29sZWFuKGUub3B0aW9ucy5pZ25vcmVJZkV4aXN0cykpKSYmKHZvaWQgMD09PWUuYW5ub3RhdGlvbklkfHxLci5pcyhlLmFubm90YXRpb25JZCkpfSwoJHI9QnI9QnJ8fHt9KS5jcmVhdGU9ZnVuY3Rpb24oZSx0LHIsbil7cmV0dXJuIGU9e2tpbmQ6InJlbmFtZSIsb2xkVXJpOmUsbmV3VXJpOnR9LHZvaWQgMD09PXJ8fHZvaWQgMD09PXIub3ZlcndyaXRlJiZ2b2lkIDA9PT1yLmlnbm9yZUlmRXhpc3RzfHwoZS5vcHRpb25zPXIpLHZvaWQgMCE9PW4mJihlLmFubm90YXRpb25JZD1uKSxlfSwkci5pcz1mdW5jdGlvbihlKXtyZXR1cm4gZSYmInJlbmFtZSI9PT1lLmtpbmQmJmEuc3RyaW5nKGUub2xkVXJpKSYmYS5zdHJpbmcoZS5uZXdVcmkpJiYodm9pZCAwPT09ZS5vcHRpb25zfHwodm9pZCAwPT09ZS5vcHRpb25zLm92ZXJ3cml0ZXx8YS5ib29sZWFuKGUub3B0aW9ucy5vdmVyd3JpdGUpKSYmKHZvaWQgMD09PWUub3B0aW9ucy5pZ25vcmVJZkV4aXN0c3x8YS5ib29sZWFuKGUub3B0aW9ucy5pZ25vcmVJZkV4aXN0cykpKSYmKHZvaWQgMD09PWUuYW5ub3RhdGlvbklkfHxLci5pcyhlLmFubm90YXRpb25JZCkpfSwodD1Xcj1Xcnx8e30pLmNyZWF0ZT1mdW5jdGlvbihlLHQscil7cmV0dXJuIGU9e2tpbmQ6ImRlbGV0ZSIsdXJpOmV9LHZvaWQgMD09PXR8fHZvaWQgMD09PXQucmVjdXJzaXZlJiZ2b2lkIDA9PT10Lmlnbm9yZUlmTm90RXhpc3RzfHwoZS5vcHRpb25zPXQpLHZvaWQgMCE9PXImJihlLmFubm90YXRpb25JZD1yKSxlfSx0LmlzPWZ1bmN0aW9uKGUpe3JldHVybiBlJiYiZGVsZXRlIj09PWUua2luZCYmYS5zdHJpbmcoZS51cmkpJiYodm9pZCAwPT09ZS5vcHRpb25zfHwodm9pZCAwPT09ZS5vcHRpb25zLnJlY3Vyc2l2ZXx8YS5ib29sZWFuKGUub3B0aW9ucy5yZWN1cnNpdmUpKSYmKHZvaWQgMD09PWUub3B0aW9ucy5pZ25vcmVJZk5vdEV4aXN0c3x8YS5ib29sZWFuKGUub3B0aW9ucy5pZ25vcmVJZk5vdEV4aXN0cykpKSYmKHZvaWQgMD09PWUuYW5ub3RhdGlvbklkfHxLci5pcyhlLmFubm90YXRpb25JZCkpfSwoSHJ8fChIcj17fSkpLmlzPWZ1bmN0aW9uKGUpe3JldHVybiBlJiYodm9pZCAwIT09ZS5jaGFuZ2VzfHx2b2lkIDAhPT1lLmRvY3VtZW50Q2hhbmdlcykmJih2b2lkIDA9PT1lLmRvY3VtZW50Q2hhbmdlc3x8ZS5kb2N1bWVudENoYW5nZXMuZXZlcnkoZnVuY3Rpb24oZSl7cmV0dXJuIGEuc3RyaW5nKGUua2luZCk/cXIuaXMoZSl8fEJyLmlzKGUpfHxXci5pcyhlKTpVci5pcyhlKX0pKX07YW4ucHJvdG90eXBlLmluc2VydD1mdW5jdGlvbihlLHQscil7dmFyIG4scj12b2lkIDA9PT1yP0RyLmluc2VydChlLHQpOktyLmlzKHIpP2pyLmluc2VydChlLHQsbj1yKToodGhpcy5hc3NlcnRDaGFuZ2VBbm5vdGF0aW9ucyh0aGlzLmNoYW5nZUFubm90YXRpb25zKSxuPXRoaXMuY2hhbmdlQW5ub3RhdGlvbnMubWFuYWdlKHIpLGpyLmluc2VydChlLHQsbikpO2lmKHRoaXMuZWRpdHMucHVzaChyKSx2b2lkIDAhPT1uKXJldHVybiBufSxhbi5wcm90b3R5cGUucmVwbGFjZT1mdW5jdGlvbihlLHQscil7dmFyIG4scj12b2lkIDA9PT1yP0RyLnJlcGxhY2UoZSx0KTpLci5pcyhyKT9qci5yZXBsYWNlKGUsdCxuPXIpOih0aGlzLmFzc2VydENoYW5nZUFubm90YXRpb25zKHRoaXMuY2hhbmdlQW5ub3RhdGlvbnMpLG49dGhpcy5jaGFuZ2VBbm5vdGF0aW9ucy5tYW5hZ2UociksanIucmVwbGFjZShlLHQsbikpO2lmKHRoaXMuZWRpdHMucHVzaChyKSx2b2lkIDAhPT1uKXJldHVybiBufSxhbi5wcm90b3R5cGUuZGVsZXRlPWZ1bmN0aW9uKGUsdCl7dmFyIHIsdD12b2lkIDA9PT10P0RyLmRlbChlKTpLci5pcyh0KT9qci5kZWwoZSxyPXQpOih0aGlzLmFzc2VydENoYW5nZUFubm90YXRpb25zKHRoaXMuY2hhbmdlQW5ub3RhdGlvbnMpLHI9dGhpcy5jaGFuZ2VBbm5vdGF0aW9ucy5tYW5hZ2UodCksanIuZGVsKGUscikpO2lmKHRoaXMuZWRpdHMucHVzaCh0KSx2b2lkIDAhPT1yKXJldHVybiByfSxhbi5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKGUpe3RoaXMuZWRpdHMucHVzaChlKX0sYW4ucHJvdG90eXBlLmFsbD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmVkaXRzfSxhbi5wcm90b3R5cGUuY2xlYXI9ZnVuY3Rpb24oKXt0aGlzLmVkaXRzLnNwbGljZSgwLHRoaXMuZWRpdHMubGVuZ3RoKX0sYW4ucHJvdG90eXBlLmFzc2VydENoYW5nZUFubm90YXRpb25zPWZ1bmN0aW9uKGUpe2lmKHZvaWQgMD09PWUpdGhyb3cgbmV3IEVycm9yKCJUZXh0IGVkaXQgY2hhbmdlIGlzIG5vdCBjb25maWd1cmVkIHRvIG1hbmFnZSBjaGFuZ2UgYW5ub3RhdGlvbnMuIil9O3ZhciBvbj1hbjtmdW5jdGlvbiBhbihlLHQpe3RoaXMuZWRpdHM9ZSx0aGlzLmNoYW5nZUFubm90YXRpb25zPXR9T24ucHJvdG90eXBlLmFsbD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9hbm5vdGF0aW9uc30sT2JqZWN0LmRlZmluZVByb3BlcnR5KE9uLnByb3RvdHlwZSwic2l6ZSIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9zaXplfSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLE9uLnByb3RvdHlwZS5tYW5hZ2U9ZnVuY3Rpb24oZSx0KXt2YXIgcjtpZihLci5pcyhlKT9yPWU6KHI9dGhpcy5uZXh0SWQoKSx0PWUpLHZvaWQgMCE9PXRoaXMuX2Fubm90YXRpb25zW3JdKXRocm93IG5ldyBFcnJvcigiSWQgIityKyIgaXMgYWxyZWFkeSBpbiB1c2UuIik7aWYodm9pZCAwPT09dCl0aHJvdyBuZXcgRXJyb3IoIk5vIGFubm90YXRpb24gcHJvdmlkZWQgZm9yIGlkICIrcik7cmV0dXJuIHRoaXMuX2Fubm90YXRpb25zW3JdPXQsdGhpcy5fc2l6ZSsrLHJ9LE9uLnByb3RvdHlwZS5uZXh0SWQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY291bnRlcisrLHRoaXMuX2NvdW50ZXIudG9TdHJpbmcoKX07dmFyIHNuLGxuLGNuLHVuLGhuLGZuLGRuLG1uLGduLHBuLGJuLHZuLHluLENuLHduLF9uLFNuLEFuLHhuLEVuLE5uLGtuLExuLE1uPU9uO2Z1bmN0aW9uIE9uKGUpe3RoaXMuX2Fubm90YXRpb25zPXZvaWQgMD09PWU/T2JqZWN0LmNyZWF0ZShudWxsKTplLHRoaXMuX2NvdW50ZXI9MCx0aGlzLl9zaXplPTB9ZnVuY3Rpb24gVG4ocil7dmFyIG49dGhpczt0aGlzLl90ZXh0RWRpdENoYW5nZXM9T2JqZWN0LmNyZWF0ZShudWxsKSx2b2lkIDAhPT1yPyh0aGlzLl93b3Jrc3BhY2VFZGl0PXIpLmRvY3VtZW50Q2hhbmdlcz8odGhpcy5fY2hhbmdlQW5ub3RhdGlvbnM9bmV3IE1uKHIuY2hhbmdlQW5ub3RhdGlvbnMpLHIuY2hhbmdlQW5ub3RhdGlvbnM9dGhpcy5fY2hhbmdlQW5ub3RhdGlvbnMuYWxsKCksci5kb2N1bWVudENoYW5nZXMuZm9yRWFjaChmdW5jdGlvbihlKXt2YXIgdDtVci5pcyhlKSYmKHQ9bmV3IG9uKGUuZWRpdHMsbi5fY2hhbmdlQW5ub3RhdGlvbnMpLG4uX3RleHRFZGl0Q2hhbmdlc1tlLnRleHREb2N1bWVudC51cmldPXQpfSkpOnIuY2hhbmdlcyYmT2JqZWN0LmtleXMoci5jaGFuZ2VzKS5mb3JFYWNoKGZ1bmN0aW9uKGUpe3ZhciB0PW5ldyBvbihyLmNoYW5nZXNbZV0pO24uX3RleHRFZGl0Q2hhbmdlc1tlXT10fSk6dGhpcy5fd29ya3NwYWNlRWRpdD17fX1PYmplY3QuZGVmaW5lUHJvcGVydHkoVG4ucHJvdG90eXBlLCJlZGl0Iix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaW5pdERvY3VtZW50Q2hhbmdlcygpLHZvaWQgMCE9PXRoaXMuX2NoYW5nZUFubm90YXRpb25zJiYoMD09PXRoaXMuX2NoYW5nZUFubm90YXRpb25zLnNpemU/dGhpcy5fd29ya3NwYWNlRWRpdC5jaGFuZ2VBbm5vdGF0aW9ucz12b2lkIDA6dGhpcy5fd29ya3NwYWNlRWRpdC5jaGFuZ2VBbm5vdGF0aW9ucz10aGlzLl9jaGFuZ2VBbm5vdGF0aW9ucy5hbGwoKSksdGhpcy5fd29ya3NwYWNlRWRpdH0sZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9KSxUbi5wcm90b3R5cGUuZ2V0VGV4dEVkaXRDaGFuZ2U9ZnVuY3Rpb24oZSl7aWYoc24uaXMoZSkpe2lmKHRoaXMuaW5pdERvY3VtZW50Q2hhbmdlcygpLHZvaWQgMD09PXRoaXMuX3dvcmtzcGFjZUVkaXQuZG9jdW1lbnRDaGFuZ2VzKXRocm93IG5ldyBFcnJvcigiV29ya3NwYWNlIGVkaXQgaXMgbm90IGNvbmZpZ3VyZWQgZm9yIGRvY3VtZW50IGNoYW5nZXMuIik7dmFyIHQ9e3VyaTplLnVyaSx2ZXJzaW9uOmUudmVyc2lvbn07cmV0dXJuKHI9dGhpcy5fdGV4dEVkaXRDaGFuZ2VzW3QudXJpXSl8fCh0aGlzLl93b3Jrc3BhY2VFZGl0LmRvY3VtZW50Q2hhbmdlcy5wdXNoKHt0ZXh0RG9jdW1lbnQ6dCxlZGl0czpuPVtdfSkscj1uZXcgb24obix0aGlzLl9jaGFuZ2VBbm5vdGF0aW9ucyksdGhpcy5fdGV4dEVkaXRDaGFuZ2VzW3QudXJpXT1yKSxyfWlmKHRoaXMuaW5pdENoYW5nZXMoKSx2b2lkIDA9PT10aGlzLl93b3Jrc3BhY2VFZGl0LmNoYW5nZXMpdGhyb3cgbmV3IEVycm9yKCJXb3Jrc3BhY2UgZWRpdCBpcyBub3QgY29uZmlndXJlZCBmb3Igbm9ybWFsIHRleHQgZWRpdCBjaGFuZ2VzLiIpO3ZhciByLG47cmV0dXJuKHI9dGhpcy5fdGV4dEVkaXRDaGFuZ2VzW2VdKXx8KHRoaXMuX3dvcmtzcGFjZUVkaXQuY2hhbmdlc1tlXT1uPVtdLHI9bmV3IG9uKG4pLHRoaXMuX3RleHRFZGl0Q2hhbmdlc1tlXT1yKSxyfSxUbi5wcm90b3R5cGUuaW5pdERvY3VtZW50Q2hhbmdlcz1mdW5jdGlvbigpe3ZvaWQgMD09PXRoaXMuX3dvcmtzcGFjZUVkaXQuZG9jdW1lbnRDaGFuZ2VzJiZ2b2lkIDA9PT10aGlzLl93b3Jrc3BhY2VFZGl0LmNoYW5nZXMmJih0aGlzLl9jaGFuZ2VBbm5vdGF0aW9ucz1uZXcgTW4sdGhpcy5fd29ya3NwYWNlRWRpdC5kb2N1bWVudENoYW5nZXM9W10sdGhpcy5fd29ya3NwYWNlRWRpdC5jaGFuZ2VBbm5vdGF0aW9ucz10aGlzLl9jaGFuZ2VBbm5vdGF0aW9ucy5hbGwoKSl9LFRuLnByb3RvdHlwZS5pbml0Q2hhbmdlcz1mdW5jdGlvbigpe3ZvaWQgMD09PXRoaXMuX3dvcmtzcGFjZUVkaXQuZG9jdW1lbnRDaGFuZ2VzJiZ2b2lkIDA9PT10aGlzLl93b3Jrc3BhY2VFZGl0LmNoYW5nZXMmJih0aGlzLl93b3Jrc3BhY2VFZGl0LmNoYW5nZXM9T2JqZWN0LmNyZWF0ZShudWxsKSl9LFRuLnByb3RvdHlwZS5jcmVhdGVGaWxlPWZ1bmN0aW9uKGUsdCxyKXtpZih0aGlzLmluaXREb2N1bWVudENoYW5nZXMoKSx2b2lkIDA9PT10aGlzLl93b3Jrc3BhY2VFZGl0LmRvY3VtZW50Q2hhbmdlcyl0aHJvdyBuZXcgRXJyb3IoIldvcmtzcGFjZSBlZGl0IGlzIG5vdCBjb25maWd1cmVkIGZvciBkb2N1bWVudCBjaGFuZ2VzLiIpO3ZhciBuLGk7aWYoRnIuaXModCl8fEtyLmlzKHQpP249dDpyPXQsdD12b2lkIDA9PT1uP3FyLmNyZWF0ZShlLHIpOihpPUtyLmlzKG4pP246dGhpcy5fY2hhbmdlQW5ub3RhdGlvbnMubWFuYWdlKG4pLHFyLmNyZWF0ZShlLHIsaSkpLHRoaXMuX3dvcmtzcGFjZUVkaXQuZG9jdW1lbnRDaGFuZ2VzLnB1c2godCksdm9pZCAwIT09aSlyZXR1cm4gaX0sVG4ucHJvdG90eXBlLnJlbmFtZUZpbGU9ZnVuY3Rpb24oZSx0LHIsbil7aWYodGhpcy5pbml0RG9jdW1lbnRDaGFuZ2VzKCksdm9pZCAwPT09dGhpcy5fd29ya3NwYWNlRWRpdC5kb2N1bWVudENoYW5nZXMpdGhyb3cgbmV3IEVycm9yKCJXb3Jrc3BhY2UgZWRpdCBpcyBub3QgY29uZmlndXJlZCBmb3IgZG9jdW1lbnQgY2hhbmdlcy4iKTt2YXIgaSxvO2lmKEZyLmlzKHIpfHxLci5pcyhyKT9pPXI6bj1yLHI9dm9pZCAwPT09aT9Cci5jcmVhdGUoZSx0LG4pOihvPUtyLmlzKGkpP2k6dGhpcy5fY2hhbmdlQW5ub3RhdGlvbnMubWFuYWdlKGkpLEJyLmNyZWF0ZShlLHQsbixvKSksdGhpcy5fd29ya3NwYWNlRWRpdC5kb2N1bWVudENoYW5nZXMucHVzaChyKSx2b2lkIDAhPT1vKXJldHVybiBvfSxUbi5wcm90b3R5cGUuZGVsZXRlRmlsZT1mdW5jdGlvbihlLHQscil7aWYodGhpcy5pbml0RG9jdW1lbnRDaGFuZ2VzKCksdm9pZCAwPT09dGhpcy5fd29ya3NwYWNlRWRpdC5kb2N1bWVudENoYW5nZXMpdGhyb3cgbmV3IEVycm9yKCJXb3Jrc3BhY2UgZWRpdCBpcyBub3QgY29uZmlndXJlZCBmb3IgZG9jdW1lbnQgY2hhbmdlcy4iKTt2YXIgbixpO2lmKEZyLmlzKHQpfHxLci5pcyh0KT9uPXQ6cj10LHQ9dm9pZCAwPT09bj9Xci5jcmVhdGUoZSxyKTooaT1Lci5pcyhuKT9uOnRoaXMuX2NoYW5nZUFubm90YXRpb25zLm1hbmFnZShuKSxXci5jcmVhdGUoZSxyLGkpKSx0aGlzLl93b3Jrc3BhY2VFZGl0LmRvY3VtZW50Q2hhbmdlcy5wdXNoKHQpLHZvaWQgMCE9PWkpcmV0dXJuIGl9LChsbj1zbj1zbnx8e30pLmNyZWF0ZT1mdW5jdGlvbihlLHQpe3JldHVybnt1cmk6ZSx2ZXJzaW9uOnR9fSxsbi5pcz1mdW5jdGlvbihlKXtyZXR1cm4gYS5kZWZpbmVkKGUpJiZhLnN0cmluZyhlLnVyaSkmJihudWxsPT09ZS52ZXJzaW9ufHxhLmludGVnZXIoZS52ZXJzaW9uKSl9LCh1bj1jbj1jbnx8e30pLlBsYWluVGV4dD0icGxhaW50ZXh0Iix1bi5NYXJrZG93bj0ibWFya2Rvd24iLChobj1jbj1jbnx8e30pLmlzPWZ1bmN0aW9uKGUpe3JldHVybiBlPT09aG4uUGxhaW5UZXh0fHxlPT09aG4uTWFya2Rvd259LChmbnx8KGZuPXt9KSkuaXM9ZnVuY3Rpb24oZSl7dmFyIHQ9ZTtyZXR1cm4gYS5vYmplY3RMaXRlcmFsKGUpJiZjbi5pcyh0LmtpbmQpJiZhLnN0cmluZyh0LnZhbHVlKX0sKG1uPWRuPWRufHx7fSkuVGV4dD0xLG1uLk1ldGhvZD0yLG1uLkZ1bmN0aW9uPTMsbW4uQ29uc3RydWN0b3I9NCxtbi5GaWVsZD01LG1uLlZhcmlhYmxlPTYsbW4uQ2xhc3M9Nyxtbi5JbnRlcmZhY2U9OCxtbi5Nb2R1bGU9OSxtbi5Qcm9wZXJ0eT0xMCxtbi5Vbml0PTExLG1uLlZhbHVlPTEyLG1uLkVudW09MTMsbW4uS2V5d29yZD0xNCxtbi5TbmlwcGV0PTE1LG1uLkNvbG9yPTE2LG1uLkZpbGU9MTcsbW4uUmVmZXJlbmNlPTE4LG1uLkZvbGRlcj0xOSxtbi5FbnVtTWVtYmVyPTIwLG1uLkNvbnN0YW50PTIxLG1uLlN0cnVjdD0yMixtbi5FdmVudD0yMyxtbi5PcGVyYXRvcj0yNCxtbi5UeXBlUGFyYW1ldGVyPTI1LChwbj1nbj1nbnx8e30pLlBsYWluVGV4dD0xLHBuLlNuaXBwZXQ9MiwoYm58fChibj17fSkpLmNyZWF0ZT1mdW5jdGlvbihlKXtyZXR1cm57bGFiZWw6ZX19LCh2bnx8e30pLmNyZWF0ZT1mdW5jdGlvbihlLHQpe3JldHVybntpdGVtczplfHxbXSxpc0luY29tcGxldGU6ISF0fX0sKENuPXluPXlufHx7fSkuZnJvbVBsYWluVGV4dD1mdW5jdGlvbihlKXtyZXR1cm4gZS5yZXBsYWNlKC9bXFxgKl97fVtcXSgpIytcLS4hXS9nLCJcXCQmIil9LENuLmlzPWZ1bmN0aW9uKGUpe3JldHVybiBhLnN0cmluZyhlKXx8YS5vYmplY3RMaXRlcmFsKGUpJiZhLnN0cmluZyhlLmxhbmd1YWdlKSYmYS5zdHJpbmcoZS52YWx1ZSl9LCh3bnx8e30pLmlzPWZ1bmN0aW9uKGUpe3ZhciB0PWU7cmV0dXJuISF0JiZhLm9iamVjdExpdGVyYWwodCkmJihmbi5pcyh0LmNvbnRlbnRzKXx8eW4uaXModC5jb250ZW50cyl8fGEudHlwZWRBcnJheSh0LmNvbnRlbnRzLHluLmlzKSkmJih2b2lkIDA9PT1lLnJhbmdlfHxPci5pcyhlLnJhbmdlKSl9LChfbnx8e30pLmNyZWF0ZT1mdW5jdGlvbihlLHQpe3JldHVybiB0P3tsYWJlbDplLGRvY3VtZW50YXRpb246dH06e2xhYmVsOmV9fSwoU258fHt9KS5jcmVhdGU9ZnVuY3Rpb24oZSx0KXtmb3IodmFyIHI9W10sbj0yO248YXJndW1lbnRzLmxlbmd0aDtuKyspcltuLTJdPWFyZ3VtZW50c1tuXTtyZXR1cm4gZT17bGFiZWw6ZX0sYS5kZWZpbmVkKHQpJiYoZS5kb2N1bWVudGF0aW9uPXQpLGEuZGVmaW5lZChyKT9lLnBhcmFtZXRlcnM9cjplLnBhcmFtZXRlcnM9W10sZX0sKEFufHx7fSkuY3JlYXRlPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGU9e3JhbmdlOmV9LGEubnVtYmVyKHQpJiYoZS5raW5kPXQpLGV9LChFbj14bj14bnx8e30pLkZpbGU9MSxFbi5Nb2R1bGU9MixFbi5OYW1lc3BhY2U9MyxFbi5QYWNrYWdlPTQsRW4uQ2xhc3M9NSxFbi5NZXRob2Q9NixFbi5Qcm9wZXJ0eT03LEVuLkZpZWxkPTgsRW4uQ29uc3RydWN0b3I9OSxFbi5FbnVtPTEwLEVuLkludGVyZmFjZT0xMSxFbi5GdW5jdGlvbj0xMixFbi5WYXJpYWJsZT0xMyxFbi5Db25zdGFudD0xNCxFbi5TdHJpbmc9MTUsRW4uTnVtYmVyPTE2LEVuLkJvb2xlYW49MTcsRW4uQXJyYXk9MTgsRW4uT2JqZWN0PTE5LEVuLktleT0yMCxFbi5OdWxsPTIxLEVuLkVudW1NZW1iZXI9MjIsRW4uU3RydWN0PTIzLEVuLkV2ZW50PTI0LEVuLk9wZXJhdG9yPTI1LEVuLlR5cGVQYXJhbWV0ZXI9MjYsKE5ufHx7fSkuY3JlYXRlPWZ1bmN0aW9uKGUsdCxyLG4saSl7cmV0dXJuIGU9e25hbWU6ZSxraW5kOnQsbG9jYXRpb246e3VyaTpuLHJhbmdlOnJ9fSxpJiYoZS5jb250YWluZXJOYW1lPWkpLGV9LChMbj1rbj1rbnx8e30pLmNyZWF0ZT1mdW5jdGlvbihlLHQpe3JldHVybntyYW5nZTplLHBhcmVudDp0fX0sTG4uaXM9ZnVuY3Rpb24oZSl7cmV0dXJuIHZvaWQgMCE9PWUmJk9yLmlzKGUucmFuZ2UpJiYodm9pZCAwPT09ZS5wYXJlbnR8fExuLmlzKGUucGFyZW50KSl9O09iamVjdC5kZWZpbmVQcm9wZXJ0eShWbi5wcm90b3R5cGUsInVyaSIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl91cml9LGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KFZuLnByb3RvdHlwZSwibGFuZ3VhZ2VJZCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9sYW5ndWFnZUlkfSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShWbi5wcm90b3R5cGUsInZlcnNpb24iLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fdmVyc2lvbn0sZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9KSxWbi5wcm90b3R5cGUuZ2V0VGV4dD1mdW5jdGlvbihlKXt2YXIgdDtyZXR1cm4gZT8odD10aGlzLm9mZnNldEF0KGUuc3RhcnQpLGU9dGhpcy5vZmZzZXRBdChlLmVuZCksdGhpcy5fY29udGVudC5zdWJzdHJpbmcodCxlKSk6dGhpcy5fY29udGVudH0sVm4ucHJvdG90eXBlLnVwZGF0ZT1mdW5jdGlvbihlLHQpe3RoaXMuX2NvbnRlbnQ9ZS50ZXh0LHRoaXMuX3ZlcnNpb249dCx0aGlzLl9saW5lT2Zmc2V0cz12b2lkIDB9LFZuLnByb3RvdHlwZS5nZXRMaW5lT2Zmc2V0cz1mdW5jdGlvbigpe2lmKHZvaWQgMD09PXRoaXMuX2xpbmVPZmZzZXRzKXtmb3IodmFyIGU9W10sdD10aGlzLl9jb250ZW50LHI9ITAsbj0wO248dC5sZW5ndGg7bisrKXtyJiYoZS5wdXNoKG4pLHI9ITEpO3ZhciBpPXQuY2hhckF0KG4pLHI9IlxyIj09PWl8fCJcbiI9PT1pOyJcciI9PT1pJiZuKzE8dC5sZW5ndGgmJiJcbiI9PT10LmNoYXJBdChuKzEpJiZuKyt9ciYmMDx0Lmxlbmd0aCYmZS5wdXNoKHQubGVuZ3RoKSx0aGlzLl9saW5lT2Zmc2V0cz1lfXJldHVybiB0aGlzLl9saW5lT2Zmc2V0c30sVm4ucHJvdG90eXBlLnBvc2l0aW9uQXQ9ZnVuY3Rpb24oZSl7ZT1NYXRoLm1heChNYXRoLm1pbihlLHRoaXMuX2NvbnRlbnQubGVuZ3RoKSwwKTt2YXIgdD10aGlzLmdldExpbmVPZmZzZXRzKCkscj0wLG49dC5sZW5ndGg7aWYoMD09PW4pcmV0dXJuIE1yLmNyZWF0ZSgwLGUpO2Zvcig7cjxuOyl7dmFyIGk9TWF0aC5mbG9vcigocituKS8yKTt0W2ldPmU/bj1pOnI9aSsxfXZhciBvPXItMTtyZXR1cm4gTXIuY3JlYXRlKG8sZS10W29dKX0sVm4ucHJvdG90eXBlLm9mZnNldEF0PWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuZ2V0TGluZU9mZnNldHMoKTtpZihlLmxpbmU+PXQubGVuZ3RoKXJldHVybiB0aGlzLl9jb250ZW50Lmxlbmd0aDtpZihlLmxpbmU8MClyZXR1cm4gMDt2YXIgcj10W2UubGluZV0sdD1lLmxpbmUrMTx0Lmxlbmd0aD90W2UubGluZSsxXTp0aGlzLl9jb250ZW50Lmxlbmd0aDtyZXR1cm4gTWF0aC5tYXgoTWF0aC5taW4ocitlLmNoYXJhY3Rlcix0KSxyKX0sT2JqZWN0LmRlZmluZVByb3BlcnR5KFZuLnByb3RvdHlwZSwibGluZUNvdW50Iix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ2V0TGluZU9mZnNldHMoKS5sZW5ndGh9LGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEwfSk7dmFyIGEsSW4sUG47ZnVuY3Rpb24gVm4oZSx0LHIsbil7dGhpcy5fdXJpPWUsdGhpcy5fbGFuZ3VhZ2VJZD10LHRoaXMuX3ZlcnNpb249cix0aGlzLl9jb250ZW50PW4sdGhpcy5fbGluZU9mZnNldHM9dm9pZCAwfUluPWE9YXx8e30sUG49T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZyxJbi5kZWZpbmVkPWZ1bmN0aW9uKGUpe3JldHVybiB2b2lkIDAhPT1lfSxJbi51bmRlZmluZWQ9ZnVuY3Rpb24oZSl7cmV0dXJuIHZvaWQgMD09PWV9LEluLmJvb2xlYW49ZnVuY3Rpb24oZSl7cmV0dXJuITA9PT1lfHwhMT09PWV9LEluLnN0cmluZz1mdW5jdGlvbihlKXtyZXR1cm4iW29iamVjdCBTdHJpbmddIj09PVBuLmNhbGwoZSl9LEluLm51bWJlcj1mdW5jdGlvbihlKXtyZXR1cm4iW29iamVjdCBOdW1iZXJdIj09PVBuLmNhbGwoZSl9LEluLm51bWJlclJhbmdlPWZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4iW29iamVjdCBOdW1iZXJdIj09PVBuLmNhbGwoZSkmJnQ8PWUmJmU8PXJ9LEluLmludGVnZXI9ZnVuY3Rpb24oZSl7cmV0dXJuIltvYmplY3QgTnVtYmVyXSI9PT1Qbi5jYWxsKGUpJiYtMjE0NzQ4MzY0ODw9ZSYmZTw9MjE0NzQ4MzY0N30sSW4udWludGVnZXI9ZnVuY3Rpb24oZSl7cmV0dXJuIltvYmplY3QgTnVtYmVyXSI9PT1Qbi5jYWxsKGUpJiYwPD1lJiZlPD0yMTQ3NDgzNjQ3fSxJbi5mdW5jPWZ1bmN0aW9uKGUpe3JldHVybiJbb2JqZWN0IEZ1bmN0aW9uXSI9PT1Qbi5jYWxsKGUpfSxJbi5vYmplY3RMaXRlcmFsPWZ1bmN0aW9uKGUpe3JldHVybiBudWxsIT09ZSYmIm9iamVjdCI9PXR5cGVvZiBlfSxJbi50eXBlZEFycmF5PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIEFycmF5LmlzQXJyYXkoZSkmJmUuZXZlcnkodCl9O3ZhciBSbixEbixqZSxuLEZuPWNsYXNze2NvbnN0cnVjdG9yKGUsdCxyLG4pe3RoaXMuX3VyaT1lLHRoaXMuX2xhbmd1YWdlSWQ9dCx0aGlzLl92ZXJzaW9uPXIsdGhpcy5fY29udGVudD1uLHRoaXMuX2xpbmVPZmZzZXRzPXZvaWQgMH1nZXQgdXJpKCl7cmV0dXJuIHRoaXMuX3VyaX1nZXQgbGFuZ3VhZ2VJZCgpe3JldHVybiB0aGlzLl9sYW5ndWFnZUlkfWdldCB2ZXJzaW9uKCl7cmV0dXJuIHRoaXMuX3ZlcnNpb259Z2V0VGV4dChlKXt2YXIgdDtyZXR1cm4gZT8odD10aGlzLm9mZnNldEF0KGUuc3RhcnQpLGU9dGhpcy5vZmZzZXRBdChlLmVuZCksdGhpcy5fY29udGVudC5zdWJzdHJpbmcodCxlKSk6dGhpcy5fY29udGVudH11cGRhdGUoZSx0KXtmb3IodmFyIG4gb2YgZSlpZihGbi5pc0luY3JlbWVudGFsKG4pKXt2YXIgaT1qbihuLnJhbmdlKSxvPXRoaXMub2Zmc2V0QXQoaS5zdGFydCksYT10aGlzLm9mZnNldEF0KGkuZW5kKSxzPSh0aGlzLl9jb250ZW50PXRoaXMuX2NvbnRlbnQuc3Vic3RyaW5nKDAsbykrbi50ZXh0K3RoaXMuX2NvbnRlbnQuc3Vic3RyaW5nKGEsdGhpcy5fY29udGVudC5sZW5ndGgpLE1hdGgubWF4KGkuc3RhcnQubGluZSwwKSksaT1NYXRoLm1heChpLmVuZC5saW5lLDApO2xldCByPXRoaXMuX2xpbmVPZmZzZXRzO3ZhciBsPUtuKG4udGV4dCwhMSxvKTtpZihpLXM9PT1sLmxlbmd0aClmb3IobGV0IGU9MCx0PWwubGVuZ3RoO2U8dDtlKyspcltlK3MrMV09bFtlXTtlbHNlIGwubGVuZ3RoPDFlND9yLnNwbGljZShzKzEsaS1zLC4uLmwpOnRoaXMuX2xpbmVPZmZzZXRzPXI9ci5zbGljZSgwLHMrMSkuY29uY2F0KGwsci5zbGljZShpKzEpKTt2YXIgYz1uLnRleHQubGVuZ3RoLShhLW8pO2lmKDAhPWMpZm9yKGxldCBlPXMrMStsLmxlbmd0aCx0PXIubGVuZ3RoO2U8dDtlKyspcltlXT1yW2VdK2N9ZWxzZXtpZighRm4uaXNGdWxsKG4pKXRocm93IG5ldyBFcnJvcigiVW5rbm93biBjaGFuZ2UgZXZlbnQgcmVjZWl2ZWQiKTt0aGlzLl9jb250ZW50PW4udGV4dCx0aGlzLl9saW5lT2Zmc2V0cz12b2lkIDB9dGhpcy5fdmVyc2lvbj10fWdldExpbmVPZmZzZXRzKCl7cmV0dXJuIHZvaWQgMD09PXRoaXMuX2xpbmVPZmZzZXRzJiYodGhpcy5fbGluZU9mZnNldHM9S24odGhpcy5fY29udGVudCwhMCkpLHRoaXMuX2xpbmVPZmZzZXRzfXBvc2l0aW9uQXQoZSl7ZT1NYXRoLm1heChNYXRoLm1pbihlLHRoaXMuX2NvbnRlbnQubGVuZ3RoKSwwKTt2YXIgdD10aGlzLmdldExpbmVPZmZzZXRzKCk7bGV0IHI9MCxuPXQubGVuZ3RoO2lmKDA9PT1uKXJldHVybntsaW5lOjAsY2hhcmFjdGVyOmV9O2Zvcig7cjxuOyl7dmFyIGk9TWF0aC5mbG9vcigocituKS8yKTt0W2ldPmU/bj1pOnI9aSsxfXZhciBvPXItMTtyZXR1cm57bGluZTpvLGNoYXJhY3RlcjplLXRbb119fW9mZnNldEF0KGUpe3ZhciB0PXRoaXMuZ2V0TGluZU9mZnNldHMoKTtpZihlLmxpbmU+PXQubGVuZ3RoKXJldHVybiB0aGlzLl9jb250ZW50Lmxlbmd0aDtpZihlLmxpbmU8MClyZXR1cm4gMDt2YXIgcj10W2UubGluZV0sdD1lLmxpbmUrMTx0Lmxlbmd0aD90W2UubGluZSsxXTp0aGlzLl9jb250ZW50Lmxlbmd0aDtyZXR1cm4gTWF0aC5tYXgoTWF0aC5taW4ocitlLmNoYXJhY3Rlcix0KSxyKX1nZXQgbGluZUNvdW50KCl7cmV0dXJuIHRoaXMuZ2V0TGluZU9mZnNldHMoKS5sZW5ndGh9c3RhdGljIGlzSW5jcmVtZW50YWwoZSl7cmV0dXJuIG51bGwhPWUmJiJzdHJpbmciPT10eXBlb2YgZS50ZXh0JiZ2b2lkIDAhPT1lLnJhbmdlJiYodm9pZCAwPT09ZS5yYW5nZUxlbmd0aHx8Im51bWJlciI9PXR5cGVvZiBlLnJhbmdlTGVuZ3RoKX1zdGF0aWMgaXNGdWxsKGUpe3JldHVybiBudWxsIT1lJiYic3RyaW5nIj09dHlwZW9mIGUudGV4dCYmdm9pZCAwPT09ZS5yYW5nZSYmdm9pZCAwPT09ZS5yYW5nZUxlbmd0aH19O2Z1bmN0aW9uIEtuKHQsZSxyPTApe2NvbnN0IG49ZT9bcl06W107Zm9yKGxldCBlPTA7ZTx0Lmxlbmd0aDtlKyspe3ZhciBpPXQuY2hhckNvZGVBdChlKTsxMyE9PWkmJjEwIT09aXx8KDEzPT09aSYmZSsxPHQubGVuZ3RoJiYxMD09PXQuY2hhckNvZGVBdChlKzEpJiZlKyssbi5wdXNoKHIrZSsxKSl9cmV0dXJuIG59ZnVuY3Rpb24gam4oZSl7dmFyIHQ9ZS5zdGFydCxyPWUuZW5kO3JldHVybiB0LmxpbmU+ci5saW5lfHx0LmxpbmU9PT1yLmxpbmUmJnQuY2hhcmFjdGVyPnIuY2hhcmFjdGVyP3tzdGFydDpyLGVuZDp0fTplfWZ1bmN0aW9uIFVuKGUpe3ZhciB0PWpuKGUucmFuZ2UpO3JldHVybiB0IT09ZS5yYW5nZT97bmV3VGV4dDplLm5ld1RleHQscmFuZ2U6dH06ZX1mdW5jdGlvbiBxbihlLHQsLi4ucil7e3ZhciBuPXI7bGV0IGU7cmV0dXJuIGU9MD09PW4ubGVuZ3RoP3Q6dC5yZXBsYWNlKC9ceyhcZCspXH0vZywoZSx0KT0+e3Q9dFswXTtyZXR1cm4gdm9pZCAwIT09blt0XT9uW3RdOmV9KX19KERuPVJuPVJufHx7fSkuY3JlYXRlPWZ1bmN0aW9uKGUsdCxyLG4pe3JldHVybiBuZXcgRm4oZSx0LHIsbil9LERuLnVwZGF0ZT1mdW5jdGlvbihlLHQscil7aWYoZSBpbnN0YW5jZW9mIEZuKXJldHVybiBlLnVwZGF0ZSh0LHIpLGU7dGhyb3cgbmV3IEVycm9yKCJUZXh0RG9jdW1lbnQudXBkYXRlOiBkb2N1bWVudCBtdXN0IGJlIGNyZWF0ZWQgYnkgVGV4dERvY3VtZW50LmNyZWF0ZSIpfSxEbi5hcHBseUVkaXRzPWZ1bmN0aW9uKGUsdCl7bGV0IHI9ZS5nZXRUZXh0KCksbj0wO2NvbnN0IGk9W107Zm9yKGNvbnN0IGEgb2YgZnVuY3Rpb24gZSh0LHIpe2lmKHQubGVuZ3RoPD0xKXJldHVybiB0O2NvbnN0IG49dC5sZW5ndGgvMnwwO2NvbnN0IGk9dC5zbGljZSgwLG4pO2NvbnN0IG89dC5zbGljZShuKTtlKGkscik7ZShvLHIpO2xldCBhPTA7bGV0IHM9MDtsZXQgbD0wO2Zvcig7YTxpLmxlbmd0aCYmczxvLmxlbmd0aDspe2xldCBlPXIoaVthXSxvW3NdKTtlPD0wP3RbbCsrXT1pW2ErK106dFtsKytdPW9bcysrXX1mb3IoO2E8aS5sZW5ndGg7KXRbbCsrXT1pW2ErK107Zm9yKDtzPG8ubGVuZ3RoOyl0W2wrK109b1tzKytdO3JldHVybiB0fSh0Lm1hcChVbiksKGUsdCk9Pnt2YXIgcj1lLnJhbmdlLnN0YXJ0LmxpbmUtdC5yYW5nZS5zdGFydC5saW5lO3JldHVybiAwPT1yP2UucmFuZ2Uuc3RhcnQuY2hhcmFjdGVyLXQucmFuZ2Uuc3RhcnQuY2hhcmFjdGVyOnJ9KSl7dmFyIG89ZS5vZmZzZXRBdChhLnJhbmdlLnN0YXJ0KTtpZihvPG4pdGhyb3cgbmV3IEVycm9yKCJPdmVybGFwcGluZyBlZGl0Iik7bz5uJiZpLnB1c2goci5zdWJzdHJpbmcobixvKSksYS5uZXdUZXh0Lmxlbmd0aCYmaS5wdXNoKGEubmV3VGV4dCksbj1lLm9mZnNldEF0KGEucmFuZ2UuZW5kKX1yZXR1cm4gaS5wdXNoKHIuc3Vic3RyKG4pKSxpLmpvaW4oIiIpfSwobj1qZT1qZXx8e30pW24uVW5kZWZpbmVkPTBdPSJVbmRlZmluZWQiLG5bbi5FbnVtVmFsdWVNaXNtYXRjaD0xXT0iRW51bVZhbHVlTWlzbWF0Y2giLG5bbi5EZXByZWNhdGVkPTJdPSJEZXByZWNhdGVkIixuW24uVW5leHBlY3RlZEVuZE9mQ29tbWVudD0yNTddPSJVbmV4cGVjdGVkRW5kT2ZDb21tZW50IixuW24uVW5leHBlY3RlZEVuZE9mU3RyaW5nPTI1OF09IlVuZXhwZWN0ZWRFbmRPZlN0cmluZyIsbltuLlVuZXhwZWN0ZWRFbmRPZk51bWJlcj0yNTldPSJVbmV4cGVjdGVkRW5kT2ZOdW1iZXIiLG5bbi5JbnZhbGlkVW5pY29kZT0yNjBdPSJJbnZhbGlkVW5pY29kZSIsbltuLkludmFsaWRFc2NhcGVDaGFyYWN0ZXI9MjYxXT0iSW52YWxpZEVzY2FwZUNoYXJhY3RlciIsbltuLkludmFsaWRDaGFyYWN0ZXI9MjYyXT0iSW52YWxpZENoYXJhY3RlciIsbltuLlByb3BlcnR5RXhwZWN0ZWQ9NTEzXT0iUHJvcGVydHlFeHBlY3RlZCIsbltuLkNvbW1hRXhwZWN0ZWQ9NTE0XT0iQ29tbWFFeHBlY3RlZCIsbltuLkNvbG9uRXhwZWN0ZWQ9NTE1XT0iQ29sb25FeHBlY3RlZCIsbltuLlZhbHVlRXhwZWN0ZWQ9NTE2XT0iVmFsdWVFeHBlY3RlZCIsbltuLkNvbW1hT3JDbG9zZUJhY2tldEV4cGVjdGVkPTUxN109IkNvbW1hT3JDbG9zZUJhY2tldEV4cGVjdGVkIixuW24uQ29tbWFPckNsb3NlQnJhY2VFeHBlY3RlZD01MThdPSJDb21tYU9yQ2xvc2VCcmFjZUV4cGVjdGVkIixuW24uVHJhaWxpbmdDb21tYT01MTldPSJUcmFpbGluZ0NvbW1hIixuW24uRHVwbGljYXRlS2V5PTUyMF09IkR1cGxpY2F0ZUtleSIsbltuLkNvbW1lbnROb3RQZXJtaXR0ZWQ9NTIxXT0iQ29tbWVudE5vdFBlcm1pdHRlZCIsbltuLlNjaGVtYVJlc29sdmVFcnJvcj03NjhdPSJTY2hlbWFSZXNvbHZlRXJyb3IiLGNuLk1hcmtkb3duLGNuLlBsYWluVGV4dDtCbj1mdW5jdGlvbihlLHQpe3JldHVybihCbj1PYmplY3Quc2V0UHJvdG90eXBlT2Z8fHtfX3Byb3RvX186W119aW5zdGFuY2VvZiBBcnJheSYmZnVuY3Rpb24oZSx0KXtlLl9fcHJvdG9fXz10fXx8ZnVuY3Rpb24oZSx0KXtmb3IodmFyIHIgaW4gdClPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodCxyKSYmKGVbcl09dFtyXSl9KShlLHQpfTt2YXIgQm4sJG49ZnVuY3Rpb24oZSx0KXtpZigiZnVuY3Rpb24iIT10eXBlb2YgdCYmbnVsbCE9PXQpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2xhc3MgZXh0ZW5kcyB2YWx1ZSAiK1N0cmluZyh0KSsiIGlzIG5vdCBhIGNvbnN0cnVjdG9yIG9yIG51bGwiKTtmdW5jdGlvbiByKCl7dGhpcy5jb25zdHJ1Y3Rvcj1lfUJuKGUsdCksZS5wcm90b3R5cGU9bnVsbD09PXQ/T2JqZWN0LmNyZWF0ZSh0KTooci5wcm90b3R5cGU9dC5wcm90b3R5cGUsbmV3IHIpfSxVZT1xbixXbj17ImNvbG9yLWhleCI6e2Vycm9yTWVzc2FnZTpVZSgiY29sb3JIZXhGb3JtYXRXYXJuaW5nIiwiSW52YWxpZCBjb2xvciBmb3JtYXQuIFVzZSAjUkdCLCAjUkdCQSwgI1JSR0dCQiBvciAjUlJHR0JCQUEuIikscGF0dGVybjovXiMoWzAtOUEtRmEtZl17Myw0fXwoWzAtOUEtRmEtZl17Mn0pezMsNH0pJC99LCJkYXRlLXRpbWUiOntlcnJvck1lc3NhZ2U6VWUoImRhdGVUaW1lRm9ybWF0V2FybmluZyIsIlN0cmluZyBpcyBub3QgYSBSRkMzMzM5IGRhdGUtdGltZS4iKSxwYXR0ZXJuOi9eKFxkezR9KS0oMFsxLTldfDFbMC0yXSktKDBbMS05XXxbMTJdWzAtOV18M1swMV0pVChbMDFdWzAtOV18MlswLTNdKTooWzAtNV1bMC05XSk6KFswLTVdWzAtOV18NjApKFwuWzAtOV0rKT8oWnwoXCt8LSkoWzAxXVswLTldfDJbMC0zXSk6KFswLTVdWzAtOV0pKSQvaX0sZGF0ZTp7ZXJyb3JNZXNzYWdlOlVlKCJkYXRlRm9ybWF0V2FybmluZyIsIlN0cmluZyBpcyBub3QgYSBSRkMzMzM5IGRhdGUuIikscGF0dGVybjovXihcZHs0fSktKDBbMS05XXwxWzAtMl0pLSgwWzEtOV18WzEyXVswLTldfDNbMDFdKSQvaX0sdGltZTp7ZXJyb3JNZXNzYWdlOlVlKCJ0aW1lRm9ybWF0V2FybmluZyIsIlN0cmluZyBpcyBub3QgYSBSRkMzMzM5IHRpbWUuIikscGF0dGVybjovXihbMDFdWzAtOV18MlswLTNdKTooWzAtNV1bMC05XSk6KFswLTVdWzAtOV18NjApKFwuWzAtOV0rKT8oWnwoXCt8LSkoWzAxXVswLTldfDJbMC0zXSk6KFswLTVdWzAtOV0pKSQvaX0sZW1haWw6e2Vycm9yTWVzc2FnZTpVZSgiZW1haWxGb3JtYXRXYXJuaW5nIiwiU3RyaW5nIGlzIG5vdCBhbiBlLW1haWwgYWRkcmVzcy4iKSxwYXR0ZXJuOi9eKChbXjw+KClcW1xdXFwuLDs6XHNAIl0rKFwuW148PigpXFtcXVxcLiw7OlxzQCJdKykqKXwoIi4rIikpQCgoXFtbMC05XXsxLDN9XC5bMC05XXsxLDN9XC5bMC05XXsxLDN9XC5bMC05XXsxLDN9XSl8KChbYS16QS1aMC05LV0rXC4pK1thLXpBLVpdezIsfSkpJC99LGhvc3RuYW1lOntlcnJvck1lc3NhZ2U6VWUoImhvc3RuYW1lRm9ybWF0V2FybmluZyIsIlN0cmluZyBpcyBub3QgYSBob3N0bmFtZS4iKSxwYXR0ZXJuOi9eKD89LnsxLDI1M31cLj8kKVthLXowLTldKD86W2EtejAtOS1dezAsNjF9W2EtejAtOV0pPyg/OlwuW2EtejAtOV0oPzpbLTAtOWEtel17MCw2MX1bMC05YS16XSk/KSpcLj8kL2l9LGlwdjQ6e2Vycm9yTWVzc2FnZTpVZSgiaXB2NEZvcm1hdFdhcm5pbmciLCJTdHJpbmcgaXMgbm90IGFuIElQdjQgYWRkcmVzcy4iKSxwYXR0ZXJuOi9eKD86KD86MjVbMC01XXwyWzAtNF1cZHwxXGRcZHxbMS05XT9cZClcLil7M30oPzoyNVswLTVdfDJbMC00XVxkfDFcZFxkfFsxLTldP1xkKSQvfSxpcHY2OntlcnJvck1lc3NhZ2U6VWUoImlwdjZGb3JtYXRXYXJuaW5nIiwiU3RyaW5nIGlzIG5vdCBhbiBJUHY2IGFkZHJlc3MuIikscGF0dGVybjovXigoKFswLTlhLWZdezEsNH06KXs3fShbMC05YS1mXXsxLDR9fDopKXwoKFswLTlhLWZdezEsNH06KXs2fSg6WzAtOWEtZl17MSw0fXwoKDI1WzAtNV18MlswLTRdXGR8MVxkXGR8WzEtOV0/XGQpKFwuKDI1WzAtNV18MlswLTRdXGR8MVxkXGR8WzEtOV0/XGQpKXszfSl8OikpfCgoWzAtOWEtZl17MSw0fTopezV9KCgoOlswLTlhLWZdezEsNH0pezEsMn0pfDooKDI1WzAtNV18MlswLTRdXGR8MVxkXGR8WzEtOV0/XGQpKFwuKDI1WzAtNV18MlswLTRdXGR8MVxkXGR8WzEtOV0/XGQpKXszfSl8OikpfCgoWzAtOWEtZl17MSw0fTopezR9KCgoOlswLTlhLWZdezEsNH0pezEsM30pfCgoOlswLTlhLWZdezEsNH0pPzooKDI1WzAtNV18MlswLTRdXGR8MVxkXGR8WzEtOV0/XGQpKFwuKDI1WzAtNV18MlswLTRdXGR8MVxkXGR8WzEtOV0/XGQpKXszfSkpfDopKXwoKFswLTlhLWZdezEsNH06KXszfSgoKDpbMC05YS1mXXsxLDR9KXsxLDR9KXwoKDpbMC05YS1mXXsxLDR9KXswLDJ9OigoMjVbMC01XXwyWzAtNF1cZHwxXGRcZHxbMS05XT9cZCkoXC4oMjVbMC01XXwyWzAtNF1cZHwxXGRcZHxbMS05XT9cZCkpezN9KSl8OikpfCgoWzAtOWEtZl17MSw0fTopezJ9KCgoOlswLTlhLWZdezEsNH0pezEsNX0pfCgoOlswLTlhLWZdezEsNH0pezAsM306KCgyNVswLTVdfDJbMC00XVxkfDFcZFxkfFsxLTldP1xkKShcLigyNVswLTVdfDJbMC00XVxkfDFcZFxkfFsxLTldP1xkKSl7M30pKXw6KSl8KChbMC05YS1mXXsxLDR9Oil7MX0oKCg6WzAtOWEtZl17MSw0fSl7MSw2fSl8KCg6WzAtOWEtZl17MSw0fSl7MCw0fTooKDI1WzAtNV18MlswLTRdXGR8MVxkXGR8WzEtOV0/XGQpKFwuKDI1WzAtNV18MlswLTRdXGR8MVxkXGR8WzEtOV0/XGQpKXszfSkpfDopKXwoOigoKDpbMC05YS1mXXsxLDR9KXsxLDd9KXwoKDpbMC05YS1mXXsxLDR9KXswLDV9OigoMjVbMC01XXwyWzAtNF1cZHwxXGRcZHxbMS05XT9cZCkoXC4oMjVbMC01XXwyWzAtNF1cZHwxXGRcZHxbMS05XT9cZCkpezN9KSl8OikpKSQvaX19LEhuPShPYmplY3QuZGVmaW5lUHJvcGVydHkoem4ucHJvdG90eXBlLCJjaGlsZHJlbiIse2dldDpmdW5jdGlvbigpe3JldHVybltdfSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLHpuLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiJ0eXBlOiAiK3RoaXMudHlwZSsiICgiK3RoaXMub2Zmc2V0KyIvIit0aGlzLmxlbmd0aCsiKSIrKHRoaXMucGFyZW50PyIgcGFyZW50OiB7Iit0aGlzLnBhcmVudC50b1N0cmluZygpKyJ9IjoiIil9LHpuKTtmdW5jdGlvbiB6bihlLHQscil7dm9pZCAwPT09ciYmKHI9MCksdGhpcy5vZmZzZXQ9dCx0aGlzLmxlbmd0aD1yLHRoaXMucGFyZW50PWV9JG4oWm4sSm49SG4pO3ZhciBKbixHbj1abjtmdW5jdGlvbiBabihlLHQpe2U9Sm4uY2FsbCh0aGlzLGUsdCl8fHRoaXM7cmV0dXJuIGUudHlwZT0ibnVsbCIsZS52YWx1ZT1udWxsLGV9JG4oWW4sWG49SG4pO3ZhciBYbixRbj1ZbjtmdW5jdGlvbiBZbihlLHQscil7ZT1Ybi5jYWxsKHRoaXMsZSxyKXx8dGhpcztyZXR1cm4gZS50eXBlPSJib29sZWFuIixlLnZhbHVlPXQsZX0kbihyaSxlaT1IbiksT2JqZWN0LmRlZmluZVByb3BlcnR5KHJpLnByb3RvdHlwZSwiY2hpbGRyZW4iLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pdGVtc30sZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9KTt2YXIgZWksdGk9cmk7ZnVuY3Rpb24gcmkoZSx0KXtlPWVpLmNhbGwodGhpcyxlLHQpfHx0aGlzO3JldHVybiBlLnR5cGU9ImFycmF5IixlLml0ZW1zPVtdLGV9JG4ob2ksbmk9SG4pO3ZhciBuaSxpaT1vaTtmdW5jdGlvbiBvaShlLHQpe2U9bmkuY2FsbCh0aGlzLGUsdCl8fHRoaXM7cmV0dXJuIGUudHlwZT0ibnVtYmVyIixlLmlzSW50ZWdlcj0hMCxlLnZhbHVlPU51bWJlci5OYU4sZX0kbihsaSxhaT1Ibik7dmFyIGFpLHNpPWxpO2Z1bmN0aW9uIGxpKGUsdCxyKXtlPWFpLmNhbGwodGhpcyxlLHQscil8fHRoaXM7cmV0dXJuIGUudHlwZT0ic3RyaW5nIixlLnZhbHVlPSIiLGV9JG4oaGksY2k9SG4pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShoaS5wcm90b3R5cGUsImNoaWxkcmVuIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudmFsdWVOb2RlP1t0aGlzLmtleU5vZGUsdGhpcy52YWx1ZU5vZGVdOlt0aGlzLmtleU5vZGVdfSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pO3ZhciBjaSx1aT1oaTtmdW5jdGlvbiBoaShlLHQscil7ZT1jaS5jYWxsKHRoaXMsZSx0KXx8dGhpcztyZXR1cm4gZS50eXBlPSJwcm9wZXJ0eSIsZS5jb2xvbk9mZnNldD0tMSxlLmtleU5vZGU9cixlfSRuKG1pLGZpPUhuKSxPYmplY3QuZGVmaW5lUHJvcGVydHkobWkucHJvdG90eXBlLCJjaGlsZHJlbiIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnByb3BlcnRpZXN9LGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEwfSk7dmFyIGZpLGRpPW1pO2Z1bmN0aW9uIG1pKGUsdCl7ZT1maS5jYWxsKHRoaXMsZSx0KXx8dGhpcztyZXR1cm4gZS50eXBlPSJvYmplY3QiLGUucHJvcGVydGllcz1bXSxlfWZ1bmN0aW9uIGdpKGUpe3JldHVybiB0bihlKT9lP3t9Ontub3Q6e319OmV9YmkucHJvdG90eXBlLmFkZD1mdW5jdGlvbihlKXt0aGlzLnNjaGVtYXMucHVzaChlKX0sYmkucHJvdG90eXBlLm1lcmdlPWZ1bmN0aW9uKGUpe0FycmF5LnByb3RvdHlwZS5wdXNoLmFwcGx5KHRoaXMuc2NoZW1hcyxlLnNjaGVtYXMpfSxiaS5wcm90b3R5cGUuaW5jbHVkZT1mdW5jdGlvbihlKXtyZXR1cm4oLTE9PT10aGlzLmZvY3VzT2Zmc2V0fHxBaShlLHRoaXMuZm9jdXNPZmZzZXQpKSYmZSE9PXRoaXMuZXhjbHVkZX0sYmkucHJvdG90eXBlLm5ld1N1Yj1mdW5jdGlvbigpe3JldHVybiBuZXcgYmkoLTEsdGhpcy5leGNsdWRlKX07dmFyIHBpPWJpO2Z1bmN0aW9uIGJpKGUsdCl7dGhpcy5mb2N1c09mZnNldD1lPXZvaWQgMD09PWU/LTE6ZSx0aGlzLmV4Y2x1ZGU9dCx0aGlzLnNjaGVtYXM9W119T2JqZWN0LmRlZmluZVByb3BlcnR5KHlpLnByb3RvdHlwZSwic2NoZW1hcyIse2dldDpmdW5jdGlvbigpe3JldHVybltdfSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLHlpLnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24oZSl7fSx5aS5wcm90b3R5cGUubWVyZ2U9ZnVuY3Rpb24oZSl7fSx5aS5wcm90b3R5cGUuaW5jbHVkZT1mdW5jdGlvbihlKXtyZXR1cm4hMH0seWkucHJvdG90eXBlLm5ld1N1Yj1mdW5jdGlvbigpe3JldHVybiB0aGlzfSx5aS5pbnN0YW5jZT1uZXcgeWk7dmFyIHZpPXlpO2Z1bmN0aW9uIHlpKCl7fXdpLnByb3RvdHlwZS5oYXNQcm9ibGVtcz1mdW5jdGlvbigpe3JldHVybiEhdGhpcy5wcm9ibGVtcy5sZW5ndGh9LHdpLnByb3RvdHlwZS5tZXJnZUFsbD1mdW5jdGlvbihlKXtmb3IodmFyIHQ9MCxyPWU7dDxyLmxlbmd0aDt0Kyspe3ZhciBuPXJbdF07dGhpcy5tZXJnZShuKX19LHdpLnByb3RvdHlwZS5tZXJnZT1mdW5jdGlvbihlKXt0aGlzLnByb2JsZW1zPXRoaXMucHJvYmxlbXMuY29uY2F0KGUucHJvYmxlbXMpfSx3aS5wcm90b3R5cGUubWVyZ2VFbnVtVmFsdWVzPWZ1bmN0aW9uKGUpe2lmKCF0aGlzLmVudW1WYWx1ZU1hdGNoJiYhZS5lbnVtVmFsdWVNYXRjaCYmdGhpcy5lbnVtVmFsdWVzJiZlLmVudW1WYWx1ZXMpe3RoaXMuZW51bVZhbHVlcz10aGlzLmVudW1WYWx1ZXMuY29uY2F0KGUuZW51bVZhbHVlcyk7Zm9yKHZhciB0PTAscj10aGlzLnByb2JsZW1zO3Q8ci5sZW5ndGg7dCsrKXt2YXIgbj1yW3RdO24uY29kZT09PWplLkVudW1WYWx1ZU1pc21hdGNoJiYobi5tZXNzYWdlPVVlKCJlbnVtV2FybmluZyIsIlZhbHVlIGlzIG5vdCBhY2NlcHRlZC4gVmFsaWQgdmFsdWVzOiB7MH0uIix0aGlzLmVudW1WYWx1ZXMubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBKU09OLnN0cmluZ2lmeShlKX0pLmpvaW4oIiwgIikpKX19fSx3aS5wcm90b3R5cGUubWVyZ2VQcm9wZXJ0eU1hdGNoPWZ1bmN0aW9uKGUpe3RoaXMubWVyZ2UoZSksdGhpcy5wcm9wZXJ0aWVzTWF0Y2hlcysrLChlLmVudW1WYWx1ZU1hdGNofHwhZS5oYXNQcm9ibGVtcygpJiZlLnByb3BlcnRpZXNNYXRjaGVzKSYmdGhpcy5wcm9wZXJ0aWVzVmFsdWVNYXRjaGVzKyssZS5lbnVtVmFsdWVNYXRjaCYmZS5lbnVtVmFsdWVzJiYxPT09ZS5lbnVtVmFsdWVzLmxlbmd0aCYmdGhpcy5wcmltYXJ5VmFsdWVNYXRjaGVzKyt9LHdpLnByb3RvdHlwZS5jb21wYXJlPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuaGFzUHJvYmxlbXMoKTtyZXR1cm4gdCE9PWUuaGFzUHJvYmxlbXMoKT90Py0xOjE6dGhpcy5lbnVtVmFsdWVNYXRjaCE9PWUuZW51bVZhbHVlTWF0Y2g/ZS5lbnVtVmFsdWVNYXRjaD8tMToxOnRoaXMucHJpbWFyeVZhbHVlTWF0Y2hlcyE9PWUucHJpbWFyeVZhbHVlTWF0Y2hlcz90aGlzLnByaW1hcnlWYWx1ZU1hdGNoZXMtZS5wcmltYXJ5VmFsdWVNYXRjaGVzOnRoaXMucHJvcGVydGllc1ZhbHVlTWF0Y2hlcyE9PWUucHJvcGVydGllc1ZhbHVlTWF0Y2hlcz90aGlzLnByb3BlcnRpZXNWYWx1ZU1hdGNoZXMtZS5wcm9wZXJ0aWVzVmFsdWVNYXRjaGVzOnRoaXMucHJvcGVydGllc01hdGNoZXMtZS5wcm9wZXJ0aWVzTWF0Y2hlc307dmFyIENpPXdpO2Z1bmN0aW9uIHdpKCl7dGhpcy5wcm9ibGVtcz1bXSx0aGlzLnByb3BlcnRpZXNNYXRjaGVzPTAsdGhpcy5wcm9wZXJ0aWVzVmFsdWVNYXRjaGVzPTAsdGhpcy5wcmltYXJ5VmFsdWVNYXRjaGVzPTAsdGhpcy5lbnVtVmFsdWVNYXRjaD0hMSx0aGlzLmVudW1WYWx1ZXM9dm9pZCAwfWZ1bmN0aW9uIF9pKGUpe3JldHVybiBYcihlKX1mdW5jdGlvbiBTaShlKXtyZXR1cm4gWnIoZSl9ZnVuY3Rpb24gQWkoZSx0LHIpe3JldHVybiB2b2lkIDA9PT1yJiYocj0hMSksdD49ZS5vZmZzZXQmJnQ8ZS5vZmZzZXQrZS5sZW5ndGh8fHImJnQ9PT1lLm9mZnNldCtlLmxlbmd0aH1FaS5wcm90b3R5cGUuZ2V0Tm9kZUZyb21PZmZzZXQ9ZnVuY3Rpb24oZSx0KXtpZih2b2lkIDA9PT10JiYodD0hMSksdGhpcy5yb290KXJldHVybiBHcih0aGlzLnJvb3QsZSx0KX0sRWkucHJvdG90eXBlLnZpc2l0PWZ1bmN0aW9uKGkpe3ZhciBvO3RoaXMucm9vdCYmKG89ZnVuY3Rpb24oZSl7dmFyIHQ9aShlKSxyPWUuY2hpbGRyZW47aWYoQXJyYXkuaXNBcnJheShyKSlmb3IodmFyIG49MDtuPHIubGVuZ3RoJiZ0O24rKyl0PW8ocltuXSk7cmV0dXJuIHR9KSh0aGlzLnJvb3QpfSxFaS5wcm90b3R5cGUudmFsaWRhdGU9ZnVuY3Rpb24ocixlLG4pe3ZhciB0O2lmKHZvaWQgMD09PW4mJihuPVZyLldhcm5pbmcpLHRoaXMucm9vdCYmZSlyZXR1cm4gdD1uZXcgQ2ksTmkodGhpcy5yb290LGUsdCx2aS5pbnN0YW5jZSksdC5wcm9ibGVtcy5tYXAoZnVuY3Rpb24oZSl7dmFyIHQ9T3IuY3JlYXRlKHIucG9zaXRpb25BdChlLmxvY2F0aW9uLm9mZnNldCksci5wb3NpdGlvbkF0KGUubG9jYXRpb24ub2Zmc2V0K2UubG9jYXRpb24ubGVuZ3RoKSk7cmV0dXJuIFJyLmNyZWF0ZSh0LGUubWVzc2FnZSxudWxsIT09KHQ9ZS5zZXZlcml0eSkmJnZvaWQgMCE9PXQ/dDpuLGUuY29kZSl9KX0sRWkucHJvdG90eXBlLmdldE1hdGNoaW5nU2NoZW1hcz1mdW5jdGlvbihlLHQscil7dD1uZXcgcGkodD12b2lkIDA9PT10Py0xOnQscik7cmV0dXJuIHRoaXMucm9vdCYmZSYmTmkodGhpcy5yb290LGUsbmV3IENpLHQpLHQuc2NoZW1hc307dmFyIHhpPUVpO2Z1bmN0aW9uIEVpKGUsdCxyKXt2b2lkIDA9PT10JiYodD1bXSksdm9pZCAwPT09ciYmKHI9W10pLHRoaXMucm9vdD1lLHRoaXMuc3ludGF4RXJyb3JzPXQsdGhpcy5jb21tZW50cz1yfWZ1bmN0aW9uIE5pKGwsZSx1LGYpe2lmKGwmJmYuaW5jbHVkZShsKSl7dmFyIGMsZCxtLGcscCxiLHYsaD1sO3N3aXRjaChoLnR5cGUpe2Nhc2Uib2JqZWN0Ijpmb3IodmFyIHQ9aCxyPWUsbj11LHk9ZixDPU9iamVjdC5jcmVhdGUobnVsbCksdz1bXSxfPTAsUz10LnByb3BlcnRpZXM7XzxTLmxlbmd0aDtfKyspe3ZhciBBPSgkPVNbX10pLmtleU5vZGUudmFsdWU7Q1tBXT0kLnZhbHVlTm9kZSx3LnB1c2goQSl9aWYoQXJyYXkuaXNBcnJheShyLnJlcXVpcmVkKSlmb3IodmFyIHg9MCxFPXIucmVxdWlyZWQ7eDxFLmxlbmd0aDt4Kyspe3ZhciBOLGs9RVt4XTtDW2tdfHwoTj10LnBhcmVudCYmInByb3BlcnR5Ij09PXQucGFyZW50LnR5cGUmJnQucGFyZW50LmtleU5vZGUsTj1OP3tvZmZzZXQ6Ti5vZmZzZXQsbGVuZ3RoOk4ubGVuZ3RofTp7b2Zmc2V0OnQub2Zmc2V0LGxlbmd0aDoxfSxuLnByb2JsZW1zLnB1c2goe2xvY2F0aW9uOk4sbWVzc2FnZTpVZSgiTWlzc2luZ1JlcXVpcmVkUHJvcFdhcm5pbmciLCdNaXNzaW5nIHByb3BlcnR5ICJ7MH0iLicsayl9KSl9ZnVuY3Rpb24gTChlKXtmb3IodmFyIHQ9dy5pbmRleE9mKGUpOzA8PXQ7KXcuc3BsaWNlKHQsMSksdD13LmluZGV4T2YoZSl9aWYoci5wcm9wZXJ0aWVzKWZvcih2YXIgTT0wLE89T2JqZWN0LmtleXMoci5wcm9wZXJ0aWVzKTtNPE8ubGVuZ3RoO00rKyl7dmFyIGs9T1tNXSxUPShMKGspLHIucHJvcGVydGllc1trXSk7KEI9Q1trXSkmJih0bihUKT9UPyhuLnByb3BlcnRpZXNNYXRjaGVzKyssbi5wcm9wZXJ0aWVzVmFsdWVNYXRjaGVzKyspOigkPUIucGFyZW50LG4ucHJvYmxlbXMucHVzaCh7bG9jYXRpb246e29mZnNldDokLmtleU5vZGUub2Zmc2V0LGxlbmd0aDokLmtleU5vZGUubGVuZ3RofSxtZXNzYWdlOnIuZXJyb3JNZXNzYWdlfHxVZSgiRGlzYWxsb3dlZEV4dHJhUHJvcFdhcm5pbmciLCJQcm9wZXJ0eSB7MH0gaXMgbm90IGFsbG93ZWQuIixrKX0pKTooej1uZXcgQ2ksTmkoQixULHoseSksbi5tZXJnZVByb3BlcnR5TWF0Y2goeikpKX1pZihyLnBhdHRlcm5Qcm9wZXJ0aWVzKWZvcih2YXIgST0wLFA9T2JqZWN0LmtleXMoci5wYXR0ZXJuUHJvcGVydGllcyk7STxQLmxlbmd0aDtJKyspZm9yKHZhciBWPVBbSV0sUj1ubihWKSxEPTAsRj13LnNsaWNlKDApO0Q8Ri5sZW5ndGg7RCsrKXtrPUZbRF07bnVsbCE9UiYmUi50ZXN0KGspJiYoTChrKSwoQj1DW2tdKSYmKHRuKFQ9ci5wYXR0ZXJuUHJvcGVydGllc1tWXSk/VD8obi5wcm9wZXJ0aWVzTWF0Y2hlcysrLG4ucHJvcGVydGllc1ZhbHVlTWF0Y2hlcysrKTooJD1CLnBhcmVudCxuLnByb2JsZW1zLnB1c2goe2xvY2F0aW9uOntvZmZzZXQ6JC5rZXlOb2RlLm9mZnNldCxsZW5ndGg6JC5rZXlOb2RlLmxlbmd0aH0sbWVzc2FnZTpyLmVycm9yTWVzc2FnZXx8VWUoIkRpc2FsbG93ZWRFeHRyYVByb3BXYXJuaW5nIiwiUHJvcGVydHkgezB9IGlzIG5vdCBhbGxvd2VkLiIsayl9KSk6KHo9bmV3IENpLE5pKEIsVCx6LHkpLG4ubWVyZ2VQcm9wZXJ0eU1hdGNoKHopKSkpfWlmKCJvYmplY3QiPT10eXBlb2Ygci5hZGRpdGlvbmFsUHJvcGVydGllcylmb3IodmFyIEs9MCxqPXc7SzxqLmxlbmd0aDtLKyspe2s9altLXTsoQj1DW2tdKSYmKHo9bmV3IENpLE5pKEIsci5hZGRpdGlvbmFsUHJvcGVydGllcyx6LHkpLG4ubWVyZ2VQcm9wZXJ0eU1hdGNoKHopKX1lbHNlIGlmKCExPT09ci5hZGRpdGlvbmFsUHJvcGVydGllcyYmMDx3Lmxlbmd0aClmb3IodmFyIFU9MCxxPXc7VTxxLmxlbmd0aDtVKyspe3ZhciBCLCQsaz1xW1VdOyhCPUNba10pJiYoJD1CLnBhcmVudCxuLnByb2JsZW1zLnB1c2goe2xvY2F0aW9uOntvZmZzZXQ6JC5rZXlOb2RlLm9mZnNldCxsZW5ndGg6JC5rZXlOb2RlLmxlbmd0aH0sbWVzc2FnZTpyLmVycm9yTWVzc2FnZXx8VWUoIkRpc2FsbG93ZWRFeHRyYVByb3BXYXJuaW5nIiwiUHJvcGVydHkgezB9IGlzIG5vdCBhbGxvd2VkLiIsayl9KSl9aWYoWXIoci5tYXhQcm9wZXJ0aWVzKSYmdC5wcm9wZXJ0aWVzLmxlbmd0aD5yLm1heFByb3BlcnRpZXMmJm4ucHJvYmxlbXMucHVzaCh7bG9jYXRpb246e29mZnNldDp0Lm9mZnNldCxsZW5ndGg6dC5sZW5ndGh9LG1lc3NhZ2U6VWUoIk1heFByb3BXYXJuaW5nIiwiT2JqZWN0IGhhcyBtb3JlIHByb3BlcnRpZXMgdGhhbiBsaW1pdCBvZiB7MH0uIixyLm1heFByb3BlcnRpZXMpfSksWXIoci5taW5Qcm9wZXJ0aWVzKSYmdC5wcm9wZXJ0aWVzLmxlbmd0aDxyLm1pblByb3BlcnRpZXMmJm4ucHJvYmxlbXMucHVzaCh7bG9jYXRpb246e29mZnNldDp0Lm9mZnNldCxsZW5ndGg6dC5sZW5ndGh9LG1lc3NhZ2U6VWUoIk1pblByb3BXYXJuaW5nIiwiT2JqZWN0IGhhcyBmZXdlciBwcm9wZXJ0aWVzIHRoYW4gdGhlIHJlcXVpcmVkIG51bWJlciBvZiB7MH0iLHIubWluUHJvcGVydGllcyl9KSxyLmRlcGVuZGVuY2llcylmb3IodmFyIFc9MCxIPU9iamVjdC5rZXlzKHIuZGVwZW5kZW5jaWVzKTtXPEgubGVuZ3RoO1crKyl7QT1IW1ddO2lmKENbQV0pe3ZhciB6LEo9ci5kZXBlbmRlbmNpZXNbQV07aWYoQXJyYXkuaXNBcnJheShKKSlmb3IodmFyIEc9MCxaPUo7RzxaLmxlbmd0aDtHKyspe3ZhciBYPVpbR107Q1tYXT9uLnByb3BlcnRpZXNWYWx1ZU1hdGNoZXMrKzpuLnByb2JsZW1zLnB1c2goe2xvY2F0aW9uOntvZmZzZXQ6dC5vZmZzZXQsbGVuZ3RoOnQubGVuZ3RofSxtZXNzYWdlOlVlKCJSZXF1aXJlZERlcGVuZGVudFByb3BXYXJuaW5nIiwiT2JqZWN0IGlzIG1pc3NpbmcgcHJvcGVydHkgezB9IHJlcXVpcmVkIGJ5IHByb3BlcnR5IHsxfS4iLFgsQSl9KX1lbHNlKFQ9Z2koSikpJiYoej1uZXcgQ2ksTmkodCxULHoseSksbi5tZXJnZVByb3BlcnR5TWF0Y2goeikpfX12YXIgUT1naShyLnByb3BlcnR5TmFtZXMpO2lmKFEpZm9yKHZhciBZPTAsZWU9dC5wcm9wZXJ0aWVzO1k8ZWUubGVuZ3RoO1krKyl7dmFyIHRlPWVlW1ldOyhBPXRlLmtleU5vZGUpJiZOaShBLFEsbix2aS5pbnN0YW5jZSl9YnJlYWs7Y2FzZSJhcnJheSI6dmFyIGk9aCxyZT1lLG5lPXUsaWU9ZjtpZihBcnJheS5pc0FycmF5KHJlLml0ZW1zKSl7Zm9yKHZhciBvZT1yZS5pdGVtcyxhZT0wO2FlPG9lLmxlbmd0aDthZSsrKXt2YXIgc2U9Z2kob2VbYWVdKSxsZT1uZXcgQ2k7KGRlPWkuaXRlbXNbYWVdKT8oTmkoZGUsc2UsbGUsaWUpLG5lLm1lcmdlUHJvcGVydHlNYXRjaChsZSkpOmkuaXRlbXMubGVuZ3RoPj1vZS5sZW5ndGgmJm5lLnByb3BlcnRpZXNWYWx1ZU1hdGNoZXMrK31pZihpLml0ZW1zLmxlbmd0aD5vZS5sZW5ndGgpaWYoIm9iamVjdCI9PXR5cGVvZiByZS5hZGRpdGlvbmFsSXRlbXMpZm9yKHZhciBjZT1vZS5sZW5ndGg7Y2U8aS5pdGVtcy5sZW5ndGg7Y2UrKyl7bGU9bmV3IENpO05pKGkuaXRlbXNbY2VdLHJlLmFkZGl0aW9uYWxJdGVtcyxsZSxpZSksbmUubWVyZ2VQcm9wZXJ0eU1hdGNoKGxlKX1lbHNlITE9PT1yZS5hZGRpdGlvbmFsSXRlbXMmJm5lLnByb2JsZW1zLnB1c2goe2xvY2F0aW9uOntvZmZzZXQ6aS5vZmZzZXQsbGVuZ3RoOmkubGVuZ3RofSxtZXNzYWdlOlVlKCJhZGRpdGlvbmFsSXRlbXNXYXJuaW5nIiwiQXJyYXkgaGFzIHRvbyBtYW55IGl0ZW1zIGFjY29yZGluZyB0byBzY2hlbWEuIEV4cGVjdGVkIHswfSBvciBmZXdlci4iLG9lLmxlbmd0aCl9KX1lbHNle3ZhciB1ZT1naShyZS5pdGVtcyk7aWYodWUpZm9yKHZhciBoZT0wLGZlPWkuaXRlbXM7aGU8ZmUubGVuZ3RoO2hlKyspe3ZhciBkZT1mZVtoZV0sbGU9bmV3IENpO05pKGRlLHVlLGxlLGllKSxuZS5tZXJnZVByb3BlcnR5TWF0Y2gobGUpfX12YXIgbWUsZ2U9Z2kocmUuY29udGFpbnMpO2dlJiYoaS5pdGVtcy5zb21lKGZ1bmN0aW9uKGUpe3ZhciB0PW5ldyBDaTtyZXR1cm4gTmkoZSxnZSx0LHZpLmluc3RhbmNlKSwhdC5oYXNQcm9ibGVtcygpfSl8fG5lLnByb2JsZW1zLnB1c2goe2xvY2F0aW9uOntvZmZzZXQ6aS5vZmZzZXQsbGVuZ3RoOmkubGVuZ3RofSxtZXNzYWdlOnJlLmVycm9yTWVzc2FnZXx8VWUoInJlcXVpcmVkSXRlbU1pc3NpbmdXYXJuaW5nIiwiQXJyYXkgZG9lcyBub3QgY29udGFpbiByZXF1aXJlZCBpdGVtLiIpfSkpLFlyKHJlLm1pbkl0ZW1zKSYmaS5pdGVtcy5sZW5ndGg8cmUubWluSXRlbXMmJm5lLnByb2JsZW1zLnB1c2goe2xvY2F0aW9uOntvZmZzZXQ6aS5vZmZzZXQsbGVuZ3RoOmkubGVuZ3RofSxtZXNzYWdlOlVlKCJtaW5JdGVtc1dhcm5pbmciLCJBcnJheSBoYXMgdG9vIGZldyBpdGVtcy4gRXhwZWN0ZWQgezB9IG9yIG1vcmUuIixyZS5taW5JdGVtcyl9KSxZcihyZS5tYXhJdGVtcykmJmkuaXRlbXMubGVuZ3RoPnJlLm1heEl0ZW1zJiZuZS5wcm9ibGVtcy5wdXNoKHtsb2NhdGlvbjp7b2Zmc2V0Omkub2Zmc2V0LGxlbmd0aDppLmxlbmd0aH0sbWVzc2FnZTpVZSgibWF4SXRlbXNXYXJuaW5nIiwiQXJyYXkgaGFzIHRvbyBtYW55IGl0ZW1zLiBFeHBlY3RlZCB7MH0gb3IgZmV3ZXIuIixyZS5tYXhJdGVtcyl9KSwhMCE9PXJlLnVuaXF1ZUl0ZW1zfHwobWU9X2koaSkpLnNvbWUoZnVuY3Rpb24oZSx0KXtyZXR1cm4gdCE9PW1lLmxhc3RJbmRleE9mKGUpfSkmJm5lLnByb2JsZW1zLnB1c2goe2xvY2F0aW9uOntvZmZzZXQ6aS5vZmZzZXQsbGVuZ3RoOmkubGVuZ3RofSxtZXNzYWdlOlVlKCJ1bmlxdWVJdGVtc1dhcm5pbmciLCJBcnJheSBoYXMgZHVwbGljYXRlIGl0ZW1zLiIpfSk7YnJlYWs7Y2FzZSJzdHJpbmciOnZhciBvLGE9aCxzPWUscGU9dTtpZihZcihzLm1pbkxlbmd0aCkmJmEudmFsdWUubGVuZ3RoPHMubWluTGVuZ3RoJiZwZS5wcm9ibGVtcy5wdXNoKHtsb2NhdGlvbjp7b2Zmc2V0OmEub2Zmc2V0LGxlbmd0aDphLmxlbmd0aH0sbWVzc2FnZTpVZSgibWluTGVuZ3RoV2FybmluZyIsIlN0cmluZyBpcyBzaG9ydGVyIHRoYW4gdGhlIG1pbmltdW0gbGVuZ3RoIG9mIHswfS4iLHMubWluTGVuZ3RoKX0pLFlyKHMubWF4TGVuZ3RoKSYmYS52YWx1ZS5sZW5ndGg+cy5tYXhMZW5ndGgmJnBlLnByb2JsZW1zLnB1c2goe2xvY2F0aW9uOntvZmZzZXQ6YS5vZmZzZXQsbGVuZ3RoOmEubGVuZ3RofSxtZXNzYWdlOlVlKCJtYXhMZW5ndGhXYXJuaW5nIiwiU3RyaW5nIGlzIGxvbmdlciB0aGFuIHRoZSBtYXhpbXVtIGxlbmd0aCBvZiB7MH0uIixzLm1heExlbmd0aCl9KSwic3RyaW5nIj09dHlwZW9mIHMucGF0dGVybiYmKG51bGwhPShvPW5uKHMucGF0dGVybikpJiZvLnRlc3QoYS52YWx1ZSl8fHBlLnByb2JsZW1zLnB1c2goe2xvY2F0aW9uOntvZmZzZXQ6YS5vZmZzZXQsbGVuZ3RoOmEubGVuZ3RofSxtZXNzYWdlOnMucGF0dGVybkVycm9yTWVzc2FnZXx8cy5lcnJvck1lc3NhZ2V8fFVlKCJwYXR0ZXJuV2FybmluZyIsJ1N0cmluZyBkb2VzIG5vdCBtYXRjaCB0aGUgcGF0dGVybiBvZiAiezB9Ii4nLHMucGF0dGVybil9KSkscy5mb3JtYXQpc3dpdGNoKHMuZm9ybWF0KXtjYXNlInVyaSI6Y2FzZSJ1cmktcmVmZXJlbmNlIjp2YXIgYmU9dm9pZCAwO2EudmFsdWU/KHZlPS9eKChbXjovPyNdKz8pOik/KFwvXC8oW14vPyNdKikpPyhbXj8jXSopKFw/KFteI10qKSk/KCMoLiopKT8vLmV4ZWMoYS52YWx1ZSkpP3ZlWzJdfHwidXJpIiE9PXMuZm9ybWF0fHwoYmU9VWUoInVyaVNjaGVtZU1pc3NpbmciLCJVUkkgd2l0aCBhIHNjaGVtZSBpcyBleHBlY3RlZC4iKSk6YmU9VWUoInVyaU1pc3NpbmciLCJVUkkgaXMgZXhwZWN0ZWQuIik6YmU9VWUoInVyaUVtcHR5IiwiVVJJIGV4cGVjdGVkLiIpLGJlJiZwZS5wcm9ibGVtcy5wdXNoKHtsb2NhdGlvbjp7b2Zmc2V0OmEub2Zmc2V0LGxlbmd0aDphLmxlbmd0aH0sbWVzc2FnZTpzLnBhdHRlcm5FcnJvck1lc3NhZ2V8fHMuZXJyb3JNZXNzYWdlfHxVZSgidXJpRm9ybWF0V2FybmluZyIsIlN0cmluZyBpcyBub3QgYSBVUkk6IHswfSIsYmUpfSk7YnJlYWs7Y2FzZSJjb2xvci1oZXgiOmNhc2UiZGF0ZS10aW1lIjpjYXNlImRhdGUiOmNhc2UidGltZSI6Y2FzZSJlbWFpbCI6Y2FzZSJob3N0bmFtZSI6Y2FzZSJpcHY0IjpjYXNlImlwdjYiOnZhciB2ZT1XbltzLmZvcm1hdF07YS52YWx1ZSYmdmUucGF0dGVybi5leGVjKGEudmFsdWUpfHxwZS5wcm9ibGVtcy5wdXNoKHtsb2NhdGlvbjp7b2Zmc2V0OmEub2Zmc2V0LGxlbmd0aDphLmxlbmd0aH0sbWVzc2FnZTpzLnBhdHRlcm5FcnJvck1lc3NhZ2V8fHMuZXJyb3JNZXNzYWdlfHx2ZS5lcnJvck1lc3NhZ2V9KX1icmVhaztjYXNlIm51bWJlciI6bz1lLGQ9dSxtPShjPWgpLnZhbHVlLFlyKG8ubXVsdGlwbGVPZikmJih2PS0xLE51bWJlci5pc0ludGVnZXIoby5tdWx0aXBsZU9mKT92PW0lby5tdWx0aXBsZU9mOihiPURlKG8ubXVsdGlwbGVPZikscD1EZShtKSxiJiZwJiYoZz1NYXRoLnBvdygxMCxNYXRoLmFicyhwLm11bHRpcGxpZXItYi5tdWx0aXBsaWVyKSkscC5tdWx0aXBsaWVyPGIubXVsdGlwbGllcj9wLnZhbHVlKj1nOmIudmFsdWUqPWcsdj1wLnZhbHVlJWIudmFsdWUpKSwwIT09diYmZC5wcm9ibGVtcy5wdXNoKHtsb2NhdGlvbjp7b2Zmc2V0OmMub2Zmc2V0LGxlbmd0aDpjLmxlbmd0aH0sbWVzc2FnZTpVZSgibXVsdGlwbGVPZldhcm5pbmciLCJWYWx1ZSBpcyBub3QgZGl2aXNpYmxlIGJ5IHswfS4iLG8ubXVsdGlwbGVPZil9KSksWXIoZz1GZShvLm1pbmltdW0sby5leGNsdXNpdmVNaW5pbXVtKSkmJm08PWcmJmQucHJvYmxlbXMucHVzaCh7bG9jYXRpb246e29mZnNldDpjLm9mZnNldCxsZW5ndGg6Yy5sZW5ndGh9LG1lc3NhZ2U6VWUoImV4Y2x1c2l2ZU1pbmltdW1XYXJuaW5nIiwiVmFsdWUgaXMgYmVsb3cgdGhlIGV4Y2x1c2l2ZSBtaW5pbXVtIG9mIHswfS4iLGcpfSksWXIocD1GZShvLm1heGltdW0sby5leGNsdXNpdmVNYXhpbXVtKSkmJnA8PW0mJmQucHJvYmxlbXMucHVzaCh7bG9jYXRpb246e29mZnNldDpjLm9mZnNldCxsZW5ndGg6Yy5sZW5ndGh9LG1lc3NhZ2U6VWUoImV4Y2x1c2l2ZU1heGltdW1XYXJuaW5nIiwiVmFsdWUgaXMgYWJvdmUgdGhlIGV4Y2x1c2l2ZSBtYXhpbXVtIG9mIHswfS4iLHApfSksWXIoYj1LZShvLm1pbmltdW0sby5leGNsdXNpdmVNaW5pbXVtKSkmJm08YiYmZC5wcm9ibGVtcy5wdXNoKHtsb2NhdGlvbjp7b2Zmc2V0OmMub2Zmc2V0LGxlbmd0aDpjLmxlbmd0aH0sbWVzc2FnZTpVZSgibWluaW11bVdhcm5pbmciLCJWYWx1ZSBpcyBiZWxvdyB0aGUgbWluaW11bSBvZiB7MH0uIixiKX0pLFlyKHY9S2Uoby5tYXhpbXVtLG8uZXhjbHVzaXZlTWF4aW11bSkpJiZ2PG0mJmQucHJvYmxlbXMucHVzaCh7bG9jYXRpb246e29mZnNldDpjLm9mZnNldCxsZW5ndGg6Yy5sZW5ndGh9LG1lc3NhZ2U6VWUoIm1heGltdW1XYXJuaW5nIiwiVmFsdWUgaXMgYWJvdmUgdGhlIG1heGltdW0gb2YgezB9LiIsdil9KTticmVhaztjYXNlInByb3BlcnR5IjpyZXR1cm4gTmkoaC52YWx1ZU5vZGUsZSx1LGYpfWZ1bmN0aW9uIHllKGUpe3JldHVybiBoLnR5cGU9PT1lfHwiaW50ZWdlciI9PT1lJiYibnVtYmVyIj09PWgudHlwZSYmaC5pc0ludGVnZXJ9aWYoQXJyYXkuaXNBcnJheShlLnR5cGUpP2UudHlwZS5zb21lKHllKXx8dS5wcm9ibGVtcy5wdXNoKHtsb2NhdGlvbjp7b2Zmc2V0Omgub2Zmc2V0LGxlbmd0aDpoLmxlbmd0aH0sbWVzc2FnZTplLmVycm9yTWVzc2FnZXx8VWUoInR5cGVBcnJheU1pc21hdGNoV2FybmluZyIsIkluY29ycmVjdCB0eXBlLiBFeHBlY3RlZCBvbmUgb2YgezB9LiIsZS50eXBlLmpvaW4oIiwgIikpfSk6ZS50eXBlJiYoeWUoZS50eXBlKXx8dS5wcm9ibGVtcy5wdXNoKHtsb2NhdGlvbjp7b2Zmc2V0Omgub2Zmc2V0LGxlbmd0aDpoLmxlbmd0aH0sbWVzc2FnZTplLmVycm9yTWVzc2FnZXx8VWUoInR5cGVNaXNtYXRjaFdhcm5pbmciLCdJbmNvcnJlY3QgdHlwZS4gRXhwZWN0ZWQgInswfSIuJyxlLnR5cGUpfSkpLEFycmF5LmlzQXJyYXkoZS5hbGxPZikpZm9yKHZhciBDZT0wLHdlPWUuYWxsT2Y7Q2U8d2UubGVuZ3RoO0NlKyspe3ZhciBfZT13ZVtDZV07TmkoaCxnaShfZSksdSxmKX1sPWdpKGUubm90KTtpZihsKXt2YXIgU2U9bmV3IENpLEFlPWYubmV3U3ViKCk7TmkoaCxsLFNlLEFlKSxTZS5oYXNQcm9ibGVtcygpfHx1LnByb2JsZW1zLnB1c2goe2xvY2F0aW9uOntvZmZzZXQ6aC5vZmZzZXQsbGVuZ3RoOmgubGVuZ3RofSxtZXNzYWdlOlVlKCJub3RTY2hlbWFXYXJuaW5nIiwiTWF0Y2hlcyBhIHNjaGVtYSB0aGF0IGlzIG5vdCBhbGxvd2VkLiIpfSk7Zm9yKHZhciB4ZT0wLEVlPUFlLnNjaGVtYXM7eGU8RWUubGVuZ3RoO3hlKyspe3ZhciBOZT1FZVt4ZV07TmUuaW52ZXJ0ZWQ9IU5lLmludmVydGVkLGYuYWRkKE5lKX19ZnVuY3Rpb24ga2UoZSx0KXtmb3IodmFyIHI9W10sbj12b2lkIDAsaT0wLG89ZTtpPG8ubGVuZ3RoO2krKyl7dmFyIGEscz1naShvW2ldKSxsPW5ldyBDaSxjPWYubmV3U3ViKCk7TmkoaCxzLGwsYyksbC5oYXNQcm9ibGVtcygpfHxyLnB1c2gocyksbj90fHxsLmhhc1Byb2JsZW1zKCl8fG4udmFsaWRhdGlvblJlc3VsdC5oYXNQcm9ibGVtcygpPzA8KGE9bC5jb21wYXJlKG4udmFsaWRhdGlvblJlc3VsdCkpP249e3NjaGVtYTpzLHZhbGlkYXRpb25SZXN1bHQ6bCxtYXRjaGluZ1NjaGVtYXM6Y306MD09PWEmJihuLm1hdGNoaW5nU2NoZW1hcy5tZXJnZShjKSxuLnZhbGlkYXRpb25SZXN1bHQubWVyZ2VFbnVtVmFsdWVzKGwpKToobi5tYXRjaGluZ1NjaGVtYXMubWVyZ2UoYyksbi52YWxpZGF0aW9uUmVzdWx0LnByb3BlcnRpZXNNYXRjaGVzKz1sLnByb3BlcnRpZXNNYXRjaGVzLG4udmFsaWRhdGlvblJlc3VsdC5wcm9wZXJ0aWVzVmFsdWVNYXRjaGVzKz1sLnByb3BlcnRpZXNWYWx1ZU1hdGNoZXMpOm49e3NjaGVtYTpzLHZhbGlkYXRpb25SZXN1bHQ6bCxtYXRjaGluZ1NjaGVtYXM6Y319cmV0dXJuIDE8ci5sZW5ndGgmJnQmJnUucHJvYmxlbXMucHVzaCh7bG9jYXRpb246e29mZnNldDpoLm9mZnNldCxsZW5ndGg6MX0sbWVzc2FnZTpVZSgib25lT2ZXYXJuaW5nIiwiTWF0Y2hlcyBtdWx0aXBsZSBzY2hlbWFzIHdoZW4gb25seSBvbmUgbXVzdCB2YWxpZGF0ZS4iKX0pLG4mJih1Lm1lcmdlKG4udmFsaWRhdGlvblJlc3VsdCksdS5wcm9wZXJ0aWVzTWF0Y2hlcys9bi52YWxpZGF0aW9uUmVzdWx0LnByb3BlcnRpZXNNYXRjaGVzLHUucHJvcGVydGllc1ZhbHVlTWF0Y2hlcys9bi52YWxpZGF0aW9uUmVzdWx0LnByb3BlcnRpZXNWYWx1ZU1hdGNoZXMsZi5tZXJnZShuLm1hdGNoaW5nU2NoZW1hcykpLHIubGVuZ3RofWZ1bmN0aW9uIExlKGUpe3ZhciB0PW5ldyBDaSxyPWYubmV3U3ViKCk7TmkoaCxnaShlKSx0LHIpLHUubWVyZ2UodCksdS5wcm9wZXJ0aWVzTWF0Y2hlcys9dC5wcm9wZXJ0aWVzTWF0Y2hlcyx1LnByb3BlcnRpZXNWYWx1ZU1hdGNoZXMrPXQucHJvcGVydGllc1ZhbHVlTWF0Y2hlcyxmLm1lcmdlKHIpfWlmKEFycmF5LmlzQXJyYXkoZS5hbnlPZikmJmtlKGUuYW55T2YsITEpLEFycmF5LmlzQXJyYXkoZS5vbmVPZikmJmtlKGUub25lT2YsITApLGw9Z2koZS5pZikpe1NlPWw7QWU9Z2koZS50aGVuKTtsPWdpKGUuZWxzZSk7dmFyIFNlPWdpKFNlKSxNZT1uZXcgQ2ksT2U9Zi5uZXdTdWIoKTtOaShoLFNlLE1lLE9lKSxmLm1lcmdlKE9lKSxNZS5oYXNQcm9ibGVtcygpP2wmJkxlKGwpOkFlJiZMZShBZSl9aWYoQXJyYXkuaXNBcnJheShlLmVudW0pKXtmb3IodmFyIFRlPV9pKGgpLEllPSExLFBlPTAsVmU9ZS5lbnVtO1BlPFZlLmxlbmd0aDtQZSsrKXt2YXIgUmU9VmVbUGVdO2lmKFFyKFRlLFJlKSl7SWU9ITA7YnJlYWt9fXUuZW51bVZhbHVlcz1lLmVudW0sKHUuZW51bVZhbHVlTWF0Y2g9SWUpfHx1LnByb2JsZW1zLnB1c2goe2xvY2F0aW9uOntvZmZzZXQ6aC5vZmZzZXQsbGVuZ3RoOmgubGVuZ3RofSxjb2RlOmplLkVudW1WYWx1ZU1pc21hdGNoLG1lc3NhZ2U6ZS5lcnJvck1lc3NhZ2V8fFVlKCJlbnVtV2FybmluZyIsIlZhbHVlIGlzIG5vdCBhY2NlcHRlZC4gVmFsaWQgdmFsdWVzOiB7MH0uIixlLmVudW0ubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBKU09OLnN0cmluZ2lmeShlKX0pLmpvaW4oIiwgIikpfSl9ZW4oZS5jb25zdCkmJihRcihUZT1faShoKSxlLmNvbnN0KT91LmVudW1WYWx1ZU1hdGNoPSEwOih1LnByb2JsZW1zLnB1c2goe2xvY2F0aW9uOntvZmZzZXQ6aC5vZmZzZXQsbGVuZ3RoOmgubGVuZ3RofSxjb2RlOmplLkVudW1WYWx1ZU1pc21hdGNoLG1lc3NhZ2U6ZS5lcnJvck1lc3NhZ2V8fFVlKCJjb25zdFdhcm5pbmciLCJWYWx1ZSBtdXN0IGJlIHswfS4iLEpTT04uc3RyaW5naWZ5KGUuY29uc3QpKX0pLHUuZW51bVZhbHVlTWF0Y2g9ITEpLHUuZW51bVZhbHVlcz1bZS5jb25zdF0pLGUuZGVwcmVjYXRpb25NZXNzYWdlJiZoLnBhcmVudCYmdS5wcm9ibGVtcy5wdXNoKHtsb2NhdGlvbjp7b2Zmc2V0OmgucGFyZW50Lm9mZnNldCxsZW5ndGg6aC5wYXJlbnQubGVuZ3RofSxzZXZlcml0eTpWci5XYXJuaW5nLG1lc3NhZ2U6ZS5kZXByZWNhdGlvbk1lc3NhZ2UsY29kZTpqZS5EZXByZWNhdGVkfSksZi5hZGQoe25vZGU6aCxzY2hlbWE6ZX0pfWZ1bmN0aW9uIERlKGUpe3ZhciB0LGU9L14oLT9cZCspKD86XC4oXGQrKSk/KD86ZShbLStdXGQrKSk/JC8uZXhlYyhlLnRvU3RyaW5nKCkpO3JldHVybiBlJiZ7dmFsdWU6TnVtYmVyKGVbMV0rKGVbMl18fCIiKSksbXVsdGlwbGllcjooKG51bGw9PT0odD1lWzJdKXx8dm9pZCAwPT09dD92b2lkIDA6dC5sZW5ndGgpfHwwKS0ocGFyc2VJbnQoZVszXSl8fDApfX1mdW5jdGlvbiBGZShlLHQpe3JldHVybiBZcih0KT90OnRuKHQpJiZ0P2U6dm9pZCAwfWZ1bmN0aW9uIEtlKGUsdCl7aWYoIXRuKHQpfHwhdClyZXR1cm4gZX19ZnVuY3Rpb24ga2kobyxlKXt2YXIgYT1bXSxkPS0xLG09by5nZXRUZXh0KCksbD16cihtLCExKSx0PWUmJmUuY29sbGVjdENvbW1lbnRzP1tdOnZvaWQgMDtmdW5jdGlvbiBjKCl7Zm9yKDs7KXt2YXIgZT1sLnNjYW4oKTtzd2l0Y2goIWZ1bmN0aW9uKCl7c3dpdGNoKGwuZ2V0VG9rZW5FcnJvcigpKXtjYXNlIDQ6cmV0dXJuIHMoVWUoIkludmFsaWRVbmljb2RlIiwiSW52YWxpZCB1bmljb2RlIHNlcXVlbmNlIGluIHN0cmluZy4iKSxqZS5JbnZhbGlkVW5pY29kZSk7Y2FzZSA1OnJldHVybiBzKFVlKCJJbnZhbGlkRXNjYXBlQ2hhcmFjdGVyIiwiSW52YWxpZCBlc2NhcGUgY2hhcmFjdGVyIGluIHN0cmluZy4iKSxqZS5JbnZhbGlkRXNjYXBlQ2hhcmFjdGVyKTtjYXNlIDM6cmV0dXJuIHMoVWUoIlVuZXhwZWN0ZWRFbmRPZk51bWJlciIsIlVuZXhwZWN0ZWQgZW5kIG9mIG51bWJlci4iKSxqZS5VbmV4cGVjdGVkRW5kT2ZOdW1iZXIpO2Nhc2UgMTpyZXR1cm4gcyhVZSgiVW5leHBlY3RlZEVuZE9mQ29tbWVudCIsIlVuZXhwZWN0ZWQgZW5kIG9mIGNvbW1lbnQuIiksamUuVW5leHBlY3RlZEVuZE9mQ29tbWVudCk7Y2FzZSAyOnJldHVybiBzKFVlKCJVbmV4cGVjdGVkRW5kT2ZTdHJpbmciLCJVbmV4cGVjdGVkIGVuZCBvZiBzdHJpbmcuIiksamUuVW5leHBlY3RlZEVuZE9mU3RyaW5nKTtjYXNlIDY6cmV0dXJuIHMoVWUoIkludmFsaWRDaGFyYWN0ZXIiLCJJbnZhbGlkIGNoYXJhY3RlcnMgaW4gc3RyaW5nLiBDb250cm9sIGNoYXJhY3RlcnMgbXVzdCBiZSBlc2NhcGVkLiIpLGplLkludmFsaWRDaGFyYWN0ZXIpfX0oKSxlKXtjYXNlIDEyOmNhc2UgMTM6QXJyYXkuaXNBcnJheSh0KSYmdC5wdXNoKE9yLmNyZWF0ZShvLnBvc2l0aW9uQXQobC5nZXRUb2tlbk9mZnNldCgpKSxvLnBvc2l0aW9uQXQobC5nZXRUb2tlbk9mZnNldCgpK2wuZ2V0VG9rZW5MZW5ndGgoKSkpKTticmVhaztjYXNlIDE1OmNhc2UgMTQ6YnJlYWs7ZGVmYXVsdDpyZXR1cm4gZX19fWZ1bmN0aW9uIHUoZSx0LHIsbixpKXt2b2lkIDA9PT1pJiYoaT1Wci5FcnJvciksMCE9PWEubGVuZ3RoJiZyPT09ZHx8KG49T3IuY3JlYXRlKG8ucG9zaXRpb25BdChyKSxvLnBvc2l0aW9uQXQobikpLGEucHVzaChSci5jcmVhdGUobixlLGksdCxvLmxhbmd1YWdlSWQpKSxkPXIpfWZ1bmN0aW9uIHMoZSx0LHIsbixpKXt2b2lkIDA9PT1yJiYocj12b2lkIDApLHZvaWQgMD09PW4mJihuPVtdKSx2b2lkIDA9PT1pJiYoaT1bXSk7dmFyIG89bC5nZXRUb2tlbk9mZnNldCgpLGE9bC5nZXRUb2tlbk9mZnNldCgpK2wuZ2V0VG9rZW5MZW5ndGgoKTtpZihvPT09YSYmMDxvKXtmb3Ioby0tOzA8byYmL1xzLy50ZXN0KG0uY2hhckF0KG8pKTspby0tO2E9bysxfWlmKHUoZSx0LG8sYSksciYmaChyLCExKSwwPG4ubGVuZ3RoK2kubGVuZ3RoKWZvcih2YXIgcz1sLmdldFRva2VuKCk7MTchPT1zOyl7aWYoLTEhPT1uLmluZGV4T2Yocykpe2MoKTticmVha31pZigtMSE9PWkuaW5kZXhPZihzKSlicmVhaztzPWMoKX1yZXR1cm4gcn1mdW5jdGlvbiBoKGUsdCl7cmV0dXJuIGUubGVuZ3RoPWwuZ2V0VG9rZW5PZmZzZXQoKStsLmdldFRva2VuTGVuZ3RoKCktZS5vZmZzZXQsdCYmYygpLGV9dmFyIGc9bmV3IHNpKHZvaWQgMCwwLDApO2Z1bmN0aW9uIHIoZSl7aWYoMT09PWwuZ2V0VG9rZW4oKSl7Zm9yKHZhciB0PW5ldyBkaShlLGwuZ2V0VG9rZW5PZmZzZXQoKSkscj1PYmplY3QuY3JlYXRlKG51bGwpLG49KGMoKSwhMSk7MiE9PWwuZ2V0VG9rZW4oKSYmMTchPT1sLmdldFRva2VuKCk7KXtpZig1PT09bC5nZXRUb2tlbigpKXtufHxzKFVlKCJQcm9wZXJ0eUV4cGVjdGVkIiwiUHJvcGVydHkgZXhwZWN0ZWQiKSxqZS5Qcm9wZXJ0eUV4cGVjdGVkKTt2YXIgaT1sLmdldFRva2VuT2Zmc2V0KCk7aWYoYygpLDI9PT1sLmdldFRva2VuKCkpe24mJnUoVWUoIlRyYWlsaW5nQ29tbWEiLCJUcmFpbGluZyBjb21tYSIpLGplLlRyYWlsaW5nQ29tbWEsaSxpKzEpO2NvbnRpbnVlfX1lbHNlIG4mJnMoVWUoIkV4cGVjdGVkQ29tbWEiLCJFeHBlY3RlZCBjb21tYSIpLGplLkNvbW1hRXhwZWN0ZWQpO2k9ZnVuY3Rpb24oZSx0KXt2YXIgcj1wKGU9bmV3IHVpKGUsbC5nZXRUb2tlbk9mZnNldCgpLGcpKTtpZighcil7aWYoMTYhPT1sLmdldFRva2VuKCkpcmV0dXJuO3MoVWUoIkRvdWJsZVF1b3Rlc0V4cGVjdGVkIiwiUHJvcGVydHkga2V5cyBtdXN0IGJlIGRvdWJsZXF1b3RlZCIpLGplLlVuZGVmaW5lZCk7dmFyIG49bmV3IHNpKGUsbC5nZXRUb2tlbk9mZnNldCgpLGwuZ2V0VG9rZW5MZW5ndGgoKSk7bi52YWx1ZT1sLmdldFRva2VuVmFsdWUoKSxyPW4sYygpfWlmKChuPXRbKGUua2V5Tm9kZT1yKS52YWx1ZV0pPyh1KFVlKCJEdXBsaWNhdGVLZXlXYXJuaW5nIiwiRHVwbGljYXRlIG9iamVjdCBrZXkiKSxqZS5EdXBsaWNhdGVLZXksZS5rZXlOb2RlLm9mZnNldCxlLmtleU5vZGUub2Zmc2V0K2Uua2V5Tm9kZS5sZW5ndGgsVnIuV2FybmluZyksIm9iamVjdCI9PXR5cGVvZiBuJiZ1KFVlKCJEdXBsaWNhdGVLZXlXYXJuaW5nIiwiRHVwbGljYXRlIG9iamVjdCBrZXkiKSxqZS5EdXBsaWNhdGVLZXksbi5rZXlOb2RlLm9mZnNldCxuLmtleU5vZGUub2Zmc2V0K24ua2V5Tm9kZS5sZW5ndGgsVnIuV2FybmluZyksdFtyLnZhbHVlXT0hMCk6dFtyLnZhbHVlXT1lLDY9PT1sLmdldFRva2VuKCkpZS5jb2xvbk9mZnNldD1sLmdldFRva2VuT2Zmc2V0KCksYygpO2Vsc2UgaWYocyhVZSgiQ29sb25FeHBlY3RlZCIsIkNvbG9uIGV4cGVjdGVkIiksamUuQ29sb25FeHBlY3RlZCksMTA9PT1sLmdldFRva2VuKCkmJm8ucG9zaXRpb25BdChyLm9mZnNldCtyLmxlbmd0aCkubGluZTxvLnBvc2l0aW9uQXQobC5nZXRUb2tlbk9mZnNldCgpKS5saW5lKXJldHVybiBlLmxlbmd0aD1yLmxlbmd0aCxlO3JldHVybihuPWYoZSkpPyhlLnZhbHVlTm9kZT1uLGUubGVuZ3RoPW4ub2Zmc2V0K24ubGVuZ3RoLWUub2Zmc2V0LGUpOnMoVWUoIlZhbHVlRXhwZWN0ZWQiLCJWYWx1ZSBleHBlY3RlZCIpLGplLlZhbHVlRXhwZWN0ZWQsZSxbXSxbMiw1XSl9KHQscik7aT90LnByb3BlcnRpZXMucHVzaChpKTpzKFVlKCJQcm9wZXJ0eUV4cGVjdGVkIiwiUHJvcGVydHkgZXhwZWN0ZWQiKSxqZS5Qcm9wZXJ0eUV4cGVjdGVkLHZvaWQgMCxbXSxbMiw1XSksbj0hMH1yZXR1cm4gMiE9PWwuZ2V0VG9rZW4oKT9zKFVlKCJFeHBlY3RlZENsb3NlQnJhY2UiLCJFeHBlY3RlZCBjb21tYSBvciBjbG9zaW5nIGJyYWNlIiksamUuQ29tbWFPckNsb3NlQnJhY2VFeHBlY3RlZCx0KTpoKHQsITApfX1mdW5jdGlvbiBwKGUpe2lmKDEwPT09bC5nZXRUb2tlbigpKXJldHVybiBlPW5ldyBzaShlLGwuZ2V0VG9rZW5PZmZzZXQoKSksZS52YWx1ZT1sLmdldFRva2VuVmFsdWUoKSxoKGUsITApfWZ1bmN0aW9uIGYoZSl7cmV0dXJuIGZ1bmN0aW9uKGUpe2lmKDM9PT1sLmdldFRva2VuKCkpe2Zvcih2YXIgdD1uZXcgdGkoZSxsLmdldFRva2VuT2Zmc2V0KCkpLHI9KGMoKSwhMSk7NCE9PWwuZ2V0VG9rZW4oKSYmMTchPT1sLmdldFRva2VuKCk7KXtpZig1PT09bC5nZXRUb2tlbigpKXtyfHxzKFVlKCJWYWx1ZUV4cGVjdGVkIiwiVmFsdWUgZXhwZWN0ZWQiKSxqZS5WYWx1ZUV4cGVjdGVkKTt2YXIgbj1sLmdldFRva2VuT2Zmc2V0KCk7aWYoYygpLDQ9PT1sLmdldFRva2VuKCkpe3ImJnUoVWUoIlRyYWlsaW5nQ29tbWEiLCJUcmFpbGluZyBjb21tYSIpLGplLlRyYWlsaW5nQ29tbWEsbixuKzEpO2NvbnRpbnVlfX1lbHNlIHImJnMoVWUoIkV4cGVjdGVkQ29tbWEiLCJFeHBlY3RlZCBjb21tYSIpLGplLkNvbW1hRXhwZWN0ZWQpO249Zih0KTtuP3QuaXRlbXMucHVzaChuKTpzKFVlKCJQcm9wZXJ0eUV4cGVjdGVkIiwiVmFsdWUgZXhwZWN0ZWQiKSxqZS5WYWx1ZUV4cGVjdGVkLHZvaWQgMCxbXSxbNCw1XSkscj0hMH1yZXR1cm4gNCE9PWwuZ2V0VG9rZW4oKT9zKFVlKCJFeHBlY3RlZENsb3NlQnJhY2tldCIsIkV4cGVjdGVkIGNvbW1hIG9yIGNsb3NpbmcgYnJhY2tldCIpLGplLkNvbW1hT3JDbG9zZUJhY2tldEV4cGVjdGVkLHQpOmgodCwhMCl9fShlKXx8cihlKXx8cChlKXx8ZnVuY3Rpb24odCl7aWYoMTE9PT1sLmdldFRva2VuKCkpe3Q9bmV3IGlpKHQsbC5nZXRUb2tlbk9mZnNldCgpKTtpZigwPT09bC5nZXRUb2tlbkVycm9yKCkpe3ZhciBlPWwuZ2V0VG9rZW5WYWx1ZSgpO3RyeXt2YXIgcj1KU09OLnBhcnNlKGUpO2lmKCFZcihyKSlyZXR1cm4gcyhVZSgiSW52YWxpZE51bWJlckZvcm1hdCIsIkludmFsaWQgbnVtYmVyIGZvcm1hdC4iKSxqZS5VbmRlZmluZWQsdCk7dC52YWx1ZT1yfWNhdGNoKGUpe3JldHVybiBzKFVlKCJJbnZhbGlkTnVtYmVyRm9ybWF0IiwiSW52YWxpZCBudW1iZXIgZm9ybWF0LiIpLGplLlVuZGVmaW5lZCx0KX10LmlzSW50ZWdlcj0tMT09PWUuaW5kZXhPZigiLiIpfXJldHVybiBoKHQsITApfX0oZSl8fGZ1bmN0aW9uKGUpe3N3aXRjaChsLmdldFRva2VuKCkpe2Nhc2UgNzpyZXR1cm4gaChuZXcgR24oZSxsLmdldFRva2VuT2Zmc2V0KCkpLCEwKTtjYXNlIDg6cmV0dXJuIGgobmV3IFFuKGUsITAsbC5nZXRUb2tlbk9mZnNldCgpKSwhMCk7Y2FzZSA5OnJldHVybiBoKG5ldyBRbihlLCExLGwuZ2V0VG9rZW5PZmZzZXQoKSksITApO2RlZmF1bHQ6cmV0dXJufX0oZSl9ZT12b2lkIDA7cmV0dXJuIDE3IT09YygpJiYoKGU9ZihlKSk/MTchPT1sLmdldFRva2VuKCkmJnMoVWUoIkVuZCBvZiBmaWxlIGV4cGVjdGVkIiwiRW5kIG9mIGZpbGUgZXhwZWN0ZWQuIiksamUuVW5kZWZpbmVkKTpzKFVlKCJJbnZhbGlkIHN5bWJvbCIsIkV4cGVjdGVkIGEgSlNPTiBvYmplY3QsIGFycmF5IG9yIGxpdGVyYWwuIiksamUuVW5kZWZpbmVkKSksbmV3IHhpKGUsYSx0KX12YXIgTGk9cW4sTWk9KG8ucHJvdG90eXBlLmRvUmVzb2x2ZT1mdW5jdGlvbihlKXtmb3IodmFyIHQ9dGhpcy5jb250cmlidXRpb25zLmxlbmd0aC0xOzA8PXQ7dC0tKXt2YXIgcj10aGlzLmNvbnRyaWJ1dGlvbnNbdF0ucmVzb2x2ZUNvbXBsZXRpb247aWYocil7cj1yKGUpO2lmKHIpcmV0dXJuIHJ9fXJldHVybiB0aGlzLnByb21pc2VDb25zdHJ1Y3Rvci5yZXNvbHZlKGUpfSxvLnByb3RvdHlwZS5kb0NvbXBsZXRlPWZ1bmN0aW9uKGMsdCx1KXt2YXIgaD10aGlzLGY9e2l0ZW1zOltdLGlzSW5jb21wbGV0ZTohMX0sZD1jLmdldFRleHQoKSxtPWMub2Zmc2V0QXQodCksZz11LmdldE5vZGVGcm9tT2Zmc2V0KG0sITApO2lmKHRoaXMuaXNJbkNvbW1lbnQoYyxnP2cub2Zmc2V0OjAsbSkpcmV0dXJuIFByb21pc2UucmVzb2x2ZShmKTtnJiZtPT09Zy5vZmZzZXQrZy5sZW5ndGgmJjA8bSYmKGU9ZFttLTFdLCgib2JqZWN0Ij09PWcudHlwZSYmIn0iPT09ZXx8ImFycmF5Ij09PWcudHlwZSYmIl0iPT09ZSkmJihnPWcucGFyZW50KSk7dmFyIGUscD10aGlzLmdldEN1cnJlbnRXb3JkKGMsbSksdj0hZ3x8InN0cmluZyIhPT1nLnR5cGUmJiJudW1iZXIiIT09Zy50eXBlJiYiYm9vbGVhbiIhPT1nLnR5cGUmJiJudWxsIiE9PWcudHlwZT8oMDwoZT1tLXAubGVuZ3RoKSYmJyInPT09ZFtlLTFdJiZlLS0sT3IuY3JlYXRlKGMucG9zaXRpb25BdChlKSx0KSk6T3IuY3JlYXRlKGMucG9zaXRpb25BdChnLm9mZnNldCksYy5wb3NpdGlvbkF0KGcub2Zmc2V0K2cubGVuZ3RoKSkseT17fSxiPXthZGQ6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5sYWJlbCxyPXlbdF07cj8oci5kb2N1bWVudGF0aW9ufHwoci5kb2N1bWVudGF0aW9uPWUuZG9jdW1lbnRhdGlvbiksci5kZXRhaWx8fChyLmRldGFpbD1lLmRldGFpbCkpOig2MDwodD10LnJlcGxhY2UoL1tcbl0vZywi4oa1IikpLmxlbmd0aCYmKHI9dC5zdWJzdHIoMCw1NykudHJpbSgpKyIuLi4iLHlbcl18fCh0PXIpKSx2JiZ2b2lkIDAhPT1lLmluc2VydFRleHQmJihlLnRleHRFZGl0PURyLnJlcGxhY2UodixlLmluc2VydFRleHQpKSxlLmxhYmVsPXQseVt0XT1lLGYuaXRlbXMucHVzaChlKSl9LHNldEFzSW5jb21wbGV0ZTpmdW5jdGlvbigpe2YuaXNJbmNvbXBsZXRlPSEwfSxlcnJvcjpmdW5jdGlvbihlKXtjb25zb2xlLmVycm9yKGUpfSxsb2c6ZnVuY3Rpb24oZSl7Y29uc29sZS5sb2coZSl9LGdldE51bWJlck9mUHJvcG9zYWxzOmZ1bmN0aW9uKCl7cmV0dXJuIGYuaXRlbXMubGVuZ3RofX07cmV0dXJuIHRoaXMuc2NoZW1hU2VydmljZS5nZXRTY2hlbWFGb3JSZXNvdXJjZShjLnVyaSx1KS50aGVuKGZ1bmN0aW9uKGUpe3ZhciB0LHI9W10sbj0hMCxpPSIiLG89dm9pZCAwO2lmKGcmJigic3RyaW5nIiE9PWcudHlwZXx8KHQ9Zy5wYXJlbnQpJiYicHJvcGVydHkiPT09dC50eXBlJiZ0LmtleU5vZGU9PT1nJiYobj0hdC52YWx1ZU5vZGUsbz10LGk9ZC5zdWJzdHIoZy5vZmZzZXQrMSxnLmxlbmd0aC0yKSx0JiYoZz10LnBhcmVudCkpKSxnJiYib2JqZWN0Ij09PWcudHlwZSl7aWYoZy5vZmZzZXQ9PT1tKXJldHVybiBmO2cucHJvcGVydGllcy5mb3JFYWNoKGZ1bmN0aW9uKGUpe28mJm89PT1lfHwoeVtlLmtleU5vZGUudmFsdWVdPWJuLmNyZWF0ZSgiX18iKSl9KTt2YXIgYT0iIixzPShuJiYoYT1oLmV2YWx1YXRlU2VwYXJhdG9yQWZ0ZXIoYyxjLm9mZnNldEF0KHYuZW5kKSkpLGU/aC5nZXRQcm9wZXJ0eUNvbXBsZXRpb25zKGUsdSxnLG4sYSxiKTpoLmdldFNjaGVtYUxlc3NQcm9wZXJ0eUNvbXBsZXRpb25zKHUsZyxpLGIpLFNpKGcpKTtoLmNvbnRyaWJ1dGlvbnMuZm9yRWFjaChmdW5jdGlvbihlKXtlPWUuY29sbGVjdFByb3BlcnR5Q29tcGxldGlvbnMoYy51cmkscyxwLG4sIiI9PT1hLGIpO2UmJnIucHVzaChlKX0pLCFlJiYwPHAubGVuZ3RoJiYnIichPT1kLmNoYXJBdChtLXAubGVuZ3RoLTEpJiYoYi5hZGQoe2tpbmQ6ZG4uUHJvcGVydHksbGFiZWw6aC5nZXRMYWJlbEZvclZhbHVlKHApLGluc2VydFRleHQ6aC5nZXRJbnNlcnRUZXh0Rm9yUHJvcGVydHkocCx2b2lkIDAsITEsYSksaW5zZXJ0VGV4dEZvcm1hdDpnbi5TbmlwcGV0LGRvY3VtZW50YXRpb246IiJ9KSxiLnNldEFzSW5jb21wbGV0ZSgpKX12YXIgbD17fTtyZXR1cm4gZT9oLmdldFZhbHVlQ29tcGxldGlvbnMoZSx1LGcsbSxjLGIsbCk6aC5nZXRTY2hlbWFMZXNzVmFsdWVDb21wbGV0aW9ucyh1LGcsbSxjLGIpLDA8aC5jb250cmlidXRpb25zLmxlbmd0aCYmaC5nZXRDb250cmlidXRlZFZhbHVlQ29tcGxldGlvbnModSxnLG0sYyxiLHIpLGgucHJvbWlzZUNvbnN0cnVjdG9yLmFsbChyKS50aGVuKGZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuIDA9PT1iLmdldE51bWJlck9mUHJvcG9zYWxzKCkmJihlPW0sIWd8fCJzdHJpbmciIT09Zy50eXBlJiYibnVtYmVyIiE9PWcudHlwZSYmImJvb2xlYW4iIT09Zy50eXBlJiYibnVsbCIhPT1nLnR5cGV8fChlPWcub2Zmc2V0K2cubGVuZ3RoKSxlPWguZXZhbHVhdGVTZXBhcmF0b3JBZnRlcihjLGUpLGguYWRkRmlsbGVyVmFsdWVDb21wbGV0aW9ucyhsLGUsYikpLGZ9KX0pfSxvLnByb3RvdHlwZS5nZXRQcm9wZXJ0eUNvbXBsZXRpb25zPWZ1bmN0aW9uKGUsdCxhLHMsbCxjKXt2YXIgdT10aGlzO3QuZ2V0TWF0Y2hpbmdTY2hlbWFzKGUuc2NoZW1hLGEub2Zmc2V0KS5mb3JFYWNoKGZ1bmN0aW9uKGUpe2lmKGUubm9kZT09PWEmJiFlLmludmVydGVkKXt2YXIgcj1lLnNjaGVtYS5wcm9wZXJ0aWVzLG49KHImJk9iamVjdC5rZXlzKHIpLmZvckVhY2goZnVuY3Rpb24oZSl7dmFyIHQ9cltlXTsib2JqZWN0IiE9dHlwZW9mIHR8fHQuZGVwcmVjYXRpb25NZXNzYWdlfHx0LmRvTm90U3VnZ2VzdHx8KGU9e2tpbmQ6ZG4uUHJvcGVydHksbGFiZWw6ZSxpbnNlcnRUZXh0OnUuZ2V0SW5zZXJ0VGV4dEZvclByb3BlcnR5KGUsdCxzLGwpLGluc2VydFRleHRGb3JtYXQ6Z24uU25pcHBldCxmaWx0ZXJUZXh0OnUuZ2V0RmlsdGVyVGV4dEZvclZhbHVlKGUpLGRvY3VtZW50YXRpb246dS5mcm9tTWFya3VwKHQubWFya2Rvd25EZXNjcmlwdGlvbil8fHQuZGVzY3JpcHRpb258fCIifSx2b2lkIDAhPT10LnN1Z2dlc3RTb3J0VGV4dCYmKGUuc29ydFRleHQ9dC5zdWdnZXN0U29ydFRleHQpLGUuaW5zZXJ0VGV4dCYmcm4oZS5pbnNlcnRUZXh0LCIkMSIuY29uY2F0KGwpKSYmKGUuY29tbWFuZD17dGl0bGU6IlN1Z2dlc3QiLGNvbW1hbmQ6ImVkaXRvci5hY3Rpb24udHJpZ2dlclN1Z2dlc3QifSksYy5hZGQoZSkpfSksZS5zY2hlbWEucHJvcGVydHlOYW1lcyk7aWYoIm9iamVjdCI9PXR5cGVvZiBuJiYhbi5kZXByZWNhdGlvbk1lc3NhZ2UmJiFuLmRvTm90U3VnZ2VzdCl7dmFyIHQ9ZnVuY3Rpb24oZSx0KXt2b2lkIDA9PT10JiYodD12b2lkIDApO2U9e2tpbmQ6ZG4uUHJvcGVydHksbGFiZWw6ZSxpbnNlcnRUZXh0OnUuZ2V0SW5zZXJ0VGV4dEZvclByb3BlcnR5KGUsdm9pZCAwLHMsbCksaW5zZXJ0VGV4dEZvcm1hdDpnbi5TbmlwcGV0LGZpbHRlclRleHQ6dS5nZXRGaWx0ZXJUZXh0Rm9yVmFsdWUoZSksZG9jdW1lbnRhdGlvbjp0fHx1LmZyb21NYXJrdXAobi5tYXJrZG93bkRlc2NyaXB0aW9uKXx8bi5kZXNjcmlwdGlvbnx8IiJ9O3ZvaWQgMCE9PW4uc3VnZ2VzdFNvcnRUZXh0JiYoZS5zb3J0VGV4dD1uLnN1Z2dlc3RTb3J0VGV4dCksZS5pbnNlcnRUZXh0JiZybihlLmluc2VydFRleHQsIiQxIi5jb25jYXQobCkpJiYoZS5jb21tYW5kPXt0aXRsZToiU3VnZ2VzdCIsY29tbWFuZDoiZWRpdG9yLmFjdGlvbi50cmlnZ2VyU3VnZ2VzdCJ9KSxjLmFkZChlKX07aWYobi5lbnVtKWZvcih2YXIgaT0wO2k8bi5lbnVtLmxlbmd0aDtpKyspe3ZhciBvPXZvaWQgMDtuLm1hcmtkb3duRW51bURlc2NyaXB0aW9ucyYmaTxuLm1hcmtkb3duRW51bURlc2NyaXB0aW9ucy5sZW5ndGg/bz11LmZyb21NYXJrdXAobi5tYXJrZG93bkVudW1EZXNjcmlwdGlvbnNbaV0pOm4uZW51bURlc2NyaXB0aW9ucyYmaTxuLmVudW1EZXNjcmlwdGlvbnMubGVuZ3RoJiYobz1uLmVudW1EZXNjcmlwdGlvbnNbaV0pLHQobi5lbnVtW2ldLG8pfW4uY29uc3QmJnQobi5jb25zdCl9fX0pfSxvLnByb3RvdHlwZS5nZXRTY2hlbWFMZXNzUHJvcGVydHlDb21wbGV0aW9ucz1mdW5jdGlvbihlLHQscixuKXtmdW5jdGlvbiBpKGUpe2UucHJvcGVydGllcy5mb3JFYWNoKGZ1bmN0aW9uKGUpe2U9ZS5rZXlOb2RlLnZhbHVlO24uYWRkKHtraW5kOmRuLlByb3BlcnR5LGxhYmVsOmUsaW5zZXJ0VGV4dDphLmdldEluc2VydFRleHRGb3JWYWx1ZShlLCIiKSxpbnNlcnRUZXh0Rm9ybWF0OmduLlNuaXBwZXQsZmlsdGVyVGV4dDphLmdldEZpbHRlclRleHRGb3JWYWx1ZShlKSxkb2N1bWVudGF0aW9uOiIifSl9KX12YXIgbyxhPXRoaXM7dC5wYXJlbnQ/InByb3BlcnR5Ij09PXQucGFyZW50LnR5cGU/KG89dC5wYXJlbnQua2V5Tm9kZS52YWx1ZSxlLnZpc2l0KGZ1bmN0aW9uKGUpe3JldHVybiJwcm9wZXJ0eSI9PT1lLnR5cGUmJmUhPT10LnBhcmVudCYmZS5rZXlOb2RlLnZhbHVlPT09byYmZS52YWx1ZU5vZGUmJiJvYmplY3QiPT09ZS52YWx1ZU5vZGUudHlwZSYmaShlLnZhbHVlTm9kZSksITB9KSk6ImFycmF5Ij09PXQucGFyZW50LnR5cGUmJnQucGFyZW50Lml0ZW1zLmZvckVhY2goZnVuY3Rpb24oZSl7Im9iamVjdCI9PT1lLnR5cGUmJmUhPT10JiZpKGUpfSk6Im9iamVjdCI9PT10LnR5cGUmJm4uYWRkKHtraW5kOmRuLlByb3BlcnR5LGxhYmVsOiIkc2NoZW1hIixpbnNlcnRUZXh0OnRoaXMuZ2V0SW5zZXJ0VGV4dEZvclByb3BlcnR5KCIkc2NoZW1hIix2b2lkIDAsITAsIiIpLGluc2VydFRleHRGb3JtYXQ6Z24uU25pcHBldCxkb2N1bWVudGF0aW9uOiIiLGZpbHRlclRleHQ6dGhpcy5nZXRGaWx0ZXJUZXh0Rm9yVmFsdWUoIiRzY2hlbWEiKX0pfSxvLnByb3RvdHlwZS5nZXRTY2hlbWFMZXNzVmFsdWVDb21wbGV0aW9ucz1mdW5jdGlvbihlLHQscixuLGkpe3ZhciBvPXRoaXMsYT1yO2lmKCF0fHwic3RyaW5nIiE9PXQudHlwZSYmIm51bWJlciIhPT10LnR5cGUmJiJib29sZWFuIiE9PXQudHlwZSYmIm51bGwiIT09dC50eXBlfHwoYT10Lm9mZnNldCt0Lmxlbmd0aCx0PXQucGFyZW50KSwhdClyZXR1cm4gaS5hZGQoe2tpbmQ6dGhpcy5nZXRTdWdnZXN0aW9uS2luZCgib2JqZWN0IiksbGFiZWw6IkVtcHR5IG9iamVjdCIsaW5zZXJ0VGV4dDp0aGlzLmdldEluc2VydFRleHRGb3JWYWx1ZSh7fSwiIiksaW5zZXJ0VGV4dEZvcm1hdDpnbi5TbmlwcGV0LGRvY3VtZW50YXRpb246IiJ9KSx2b2lkIGkuYWRkKHtraW5kOnRoaXMuZ2V0U3VnZ2VzdGlvbktpbmQoImFycmF5IiksbGFiZWw6IkVtcHR5IGFycmF5IixpbnNlcnRUZXh0OnRoaXMuZ2V0SW5zZXJ0VGV4dEZvclZhbHVlKFtdLCIiKSxpbnNlcnRUZXh0Rm9ybWF0OmduLlNuaXBwZXQsZG9jdW1lbnRhdGlvbjoiIn0pO2Z1bmN0aW9uIHMoZSl7ZS5wYXJlbnQmJiFBaShlLnBhcmVudCxyLCEwKSYmaS5hZGQoe2tpbmQ6by5nZXRTdWdnZXN0aW9uS2luZChlLnR5cGUpLGxhYmVsOm8uZ2V0TGFiZWxUZXh0Rm9yTWF0Y2hpbmdOb2RlKGUsbiksaW5zZXJ0VGV4dDpvLmdldEluc2VydFRleHRGb3JNYXRjaGluZ05vZGUoZSxuLGMpLGluc2VydFRleHRGb3JtYXQ6Z24uU25pcHBldCxkb2N1bWVudGF0aW9uOiIifSksImJvb2xlYW4iPT09ZS50eXBlJiZvLmFkZEJvb2xlYW5WYWx1ZUNvbXBsZXRpb24oIWUudmFsdWUsYyxpKX12YXIgbCxjPXRoaXMuZXZhbHVhdGVTZXBhcmF0b3JBZnRlcihuLGEpO2lmKCJwcm9wZXJ0eSI9PT10LnR5cGUmJnI+KHQuY29sb25PZmZzZXR8fDApKXthPXQudmFsdWVOb2RlO2lmKGEmJihyPmEub2Zmc2V0K2EubGVuZ3RofHwib2JqZWN0Ij09PWEudHlwZXx8ImFycmF5Ij09PWEudHlwZSkpcmV0dXJuO3ZhciB1PXQua2V5Tm9kZS52YWx1ZTtlLnZpc2l0KGZ1bmN0aW9uKGUpe3JldHVybiJwcm9wZXJ0eSI9PT1lLnR5cGUmJmUua2V5Tm9kZS52YWx1ZT09PXUmJmUudmFsdWVOb2RlJiZzKGUudmFsdWVOb2RlKSwhMH0pLCIkc2NoZW1hIj09PXUmJnQucGFyZW50JiYhdC5wYXJlbnQucGFyZW50JiZ0aGlzLmFkZERvbGxhclNjaGVtYUNvbXBsZXRpb25zKGMsaSl9ImFycmF5Ij09PXQudHlwZSYmKHQucGFyZW50JiYicHJvcGVydHkiPT09dC5wYXJlbnQudHlwZT8obD10LnBhcmVudC5rZXlOb2RlLnZhbHVlLGUudmlzaXQoZnVuY3Rpb24oZSl7cmV0dXJuInByb3BlcnR5Ij09PWUudHlwZSYmZS5rZXlOb2RlLnZhbHVlPT09bCYmZS52YWx1ZU5vZGUmJiJhcnJheSI9PT1lLnZhbHVlTm9kZS50eXBlJiZlLnZhbHVlTm9kZS5pdGVtcy5mb3JFYWNoKHMpLCEwfSkpOnQuaXRlbXMuZm9yRWFjaChzKSl9LG8ucHJvdG90eXBlLmdldFZhbHVlQ29tcGxldGlvbnM9ZnVuY3Rpb24odSxoLGUsdCxmLHIsbil7dmFyIGQ9dCxpPXZvaWQgMCxtPXZvaWQgMDtpZighZXx8InN0cmluZyIhPT1lLnR5cGUmJiJudW1iZXIiIT09ZS50eXBlJiYiYm9vbGVhbiIhPT1lLnR5cGUmJiJudWxsIiE9PWUudHlwZXx8KGQ9ZS5vZmZzZXQrZS5sZW5ndGgsZT0obT1lKS5wYXJlbnQpLGUpe2lmKCJwcm9wZXJ0eSI9PT1lLnR5cGUmJnQ+KGUuY29sb25PZmZzZXR8fDApKXt2YXIgbz1lLnZhbHVlTm9kZTtpZihvJiZ0Pm8ub2Zmc2V0K28ubGVuZ3RoKXJldHVybjtpPWUua2V5Tm9kZS52YWx1ZSxlPWUucGFyZW50fWlmKGUmJih2b2lkIDAhPT1pfHwiYXJyYXkiPT09ZS50eXBlKSl7Zm9yKHZhciBhPXRoaXMuZXZhbHVhdGVTZXBhcmF0b3JBZnRlcihmLGQpLGc9MCxwPWguZ2V0TWF0Y2hpbmdTY2hlbWFzKHUuc2NoZW1hLGUub2Zmc2V0LG0pO2c8cC5sZW5ndGg7ZysrKXt2YXIgYixzPXBbZ107aWYocy5ub2RlPT09ZSYmIXMuaW52ZXJ0ZWQmJnMuc2NoZW1hKWlmKCJhcnJheSI9PT1lLnR5cGUmJnMuc2NoZW1hLml0ZW1zJiYoQXJyYXkuaXNBcnJheShzLnNjaGVtYS5pdGVtcyk/KGI9dGhpcy5maW5kSXRlbUF0T2Zmc2V0KGUsZix0KSk8cy5zY2hlbWEuaXRlbXMubGVuZ3RoJiZ0aGlzLmFkZFNjaGVtYVZhbHVlQ29tcGxldGlvbnMocy5zY2hlbWEuaXRlbXNbYl0sYSxyLG4pOnRoaXMuYWRkU2NoZW1hVmFsdWVDb21wbGV0aW9ucyhzLnNjaGVtYS5pdGVtcyxhLHIsbikpLHZvaWQgMCE9PWkpe3ZhciBsPSExO2lmKHMuc2NoZW1hLnByb3BlcnRpZXMmJihjPXMuc2NoZW1hLnByb3BlcnRpZXNbaV0pJiYobD0hMCx0aGlzLmFkZFNjaGVtYVZhbHVlQ29tcGxldGlvbnMoYyxhLHIsbikpLHMuc2NoZW1hLnBhdHRlcm5Qcm9wZXJ0aWVzJiYhbClmb3IodmFyIHY9MCx5PU9iamVjdC5rZXlzKHMuc2NoZW1hLnBhdHRlcm5Qcm9wZXJ0aWVzKTt2PHkubGVuZ3RoO3YrKyl7dmFyIGMsQz15W3ZdLHc9bm4oQyk7bnVsbCE9dyYmdy50ZXN0KGkpJiYobD0hMCxjPXMuc2NoZW1hLnBhdHRlcm5Qcm9wZXJ0aWVzW0NdLHRoaXMuYWRkU2NoZW1hVmFsdWVDb21wbGV0aW9ucyhjLGEscixuKSl9cy5zY2hlbWEuYWRkaXRpb25hbFByb3BlcnRpZXMmJiFsJiYoYz1zLnNjaGVtYS5hZGRpdGlvbmFsUHJvcGVydGllcyx0aGlzLmFkZFNjaGVtYVZhbHVlQ29tcGxldGlvbnMoYyxhLHIsbikpfX0iJHNjaGVtYSIhPT1pfHxlLnBhcmVudHx8dGhpcy5hZGREb2xsYXJTY2hlbWFDb21wbGV0aW9ucyhhLHIpLG4uYm9vbGVhbiYmKHRoaXMuYWRkQm9vbGVhblZhbHVlQ29tcGxldGlvbighMCxhLHIpLHRoaXMuYWRkQm9vbGVhblZhbHVlQ29tcGxldGlvbighMSxhLHIpKSxuLm51bGwmJnRoaXMuYWRkTnVsbFZhbHVlQ29tcGxldGlvbihhLHIpfX1lbHNlIHRoaXMuYWRkU2NoZW1hVmFsdWVDb21wbGV0aW9ucyh1LnNjaGVtYSwiIixyLG4pfSxvLnByb3RvdHlwZS5nZXRDb250cmlidXRlZFZhbHVlQ29tcGxldGlvbnM9ZnVuY3Rpb24oZSx0LHIsbixpLG8pe3ZhciBhLHMsbDt0Pyh0PSJzdHJpbmciIT09dC50eXBlJiYibnVtYmVyIiE9PXQudHlwZSYmImJvb2xlYW4iIT09dC50eXBlJiYibnVsbCIhPT10LnR5cGU/dDp0LnBhcmVudCkmJiJwcm9wZXJ0eSI9PT10LnR5cGUmJnI+KHQuY29sb25PZmZzZXR8fDApJiYoYT10LmtleU5vZGUudmFsdWUsKCEocz10LnZhbHVlTm9kZSl8fHI8PXMub2Zmc2V0K3MubGVuZ3RoKSYmdC5wYXJlbnQmJihsPVNpKHQucGFyZW50KSx0aGlzLmNvbnRyaWJ1dGlvbnMuZm9yRWFjaChmdW5jdGlvbihlKXtlPWUuY29sbGVjdFZhbHVlQ29tcGxldGlvbnMobi51cmksbCxhLGkpO2UmJm8ucHVzaChlKX0pKSk6dGhpcy5jb250cmlidXRpb25zLmZvckVhY2goZnVuY3Rpb24oZSl7ZT1lLmNvbGxlY3REZWZhdWx0Q29tcGxldGlvbnMobi51cmksaSk7ZSYmby5wdXNoKGUpfSl9LG8ucHJvdG90eXBlLmFkZFNjaGVtYVZhbHVlQ29tcGxldGlvbnM9ZnVuY3Rpb24oZSx0LHIsbil7dmFyIGk9dGhpczsib2JqZWN0Ij09dHlwZW9mIGUmJih0aGlzLmFkZEVudW1WYWx1ZUNvbXBsZXRpb25zKGUsdCxyKSx0aGlzLmFkZERlZmF1bHRWYWx1ZUNvbXBsZXRpb25zKGUsdCxyKSx0aGlzLmNvbGxlY3RUeXBlcyhlLG4pLEFycmF5LmlzQXJyYXkoZS5hbGxPZikmJmUuYWxsT2YuZm9yRWFjaChmdW5jdGlvbihlKXtyZXR1cm4gaS5hZGRTY2hlbWFWYWx1ZUNvbXBsZXRpb25zKGUsdCxyLG4pfSksQXJyYXkuaXNBcnJheShlLmFueU9mKSYmZS5hbnlPZi5mb3JFYWNoKGZ1bmN0aW9uKGUpe3JldHVybiBpLmFkZFNjaGVtYVZhbHVlQ29tcGxldGlvbnMoZSx0LHIsbil9KSxBcnJheS5pc0FycmF5KGUub25lT2YpJiZlLm9uZU9mLmZvckVhY2goZnVuY3Rpb24oZSl7cmV0dXJuIGkuYWRkU2NoZW1hVmFsdWVDb21wbGV0aW9ucyhlLHQscixuKX0pKX0sby5wcm90b3R5cGUuYWRkRGVmYXVsdFZhbHVlQ29tcGxldGlvbnM9ZnVuY3Rpb24odSxoLGYsZCl7dmFyIG09dGhpcyxnPSh2b2lkIDA9PT1kJiYoZD0wKSwhMSk7aWYoZW4odS5kZWZhdWx0KSl7Zm9yKHZhciBlPXUudHlwZSx0PXUuZGVmYXVsdCxyPWQ7MDxyO3ItLSl0PVt0XSxlPSJhcnJheSI7Zi5hZGQoe2tpbmQ6dGhpcy5nZXRTdWdnZXN0aW9uS2luZChlKSxsYWJlbDp0aGlzLmdldExhYmVsRm9yVmFsdWUodCksaW5zZXJ0VGV4dDp0aGlzLmdldEluc2VydFRleHRGb3JWYWx1ZSh0LGgpLGluc2VydFRleHRGb3JtYXQ6Z24uU25pcHBldCxkZXRhaWw6TGkoImpzb24uc3VnZ2VzdC5kZWZhdWx0IiwiRGVmYXVsdCB2YWx1ZSIpfSksZz0hMH1BcnJheS5pc0FycmF5KHUuZXhhbXBsZXMpJiZ1LmV4YW1wbGVzLmZvckVhY2goZnVuY3Rpb24oZSl7Zm9yKHZhciB0PXUudHlwZSxyPWUsbj1kOzA8bjtuLS0pcj1bcl0sdD0iYXJyYXkiO2YuYWRkKHtraW5kOm0uZ2V0U3VnZ2VzdGlvbktpbmQodCksbGFiZWw6bS5nZXRMYWJlbEZvclZhbHVlKHIpLGluc2VydFRleHQ6bS5nZXRJbnNlcnRUZXh0Rm9yVmFsdWUocixoKSxpbnNlcnRUZXh0Rm9ybWF0OmduLlNuaXBwZXR9KSxnPSEwfSksQXJyYXkuaXNBcnJheSh1LmRlZmF1bHRTbmlwcGV0cykmJnUuZGVmYXVsdFNuaXBwZXRzLmZvckVhY2goZnVuY3Rpb24oZSl7dmFyIHQscixuPXUudHlwZSxpPWUuYm9keSxvPWUubGFiZWw7aWYoZW4oaSkpe3UudHlwZTtmb3IodmFyIGE9ZDswPGE7YS0tKWk9W2ldO3Q9bS5nZXRJbnNlcnRUZXh0Rm9yU25pcHBldFZhbHVlKGksaCkscj1tLmdldEZpbHRlclRleHRGb3JTbmlwcGV0VmFsdWUoaSksbz1vfHxtLmdldExhYmVsRm9yU25pcHBldFZhbHVlKGkpfWVsc2V7aWYoInN0cmluZyIhPXR5cGVvZiBlLmJvZHlUZXh0KXJldHVybjtmb3IodmFyIHM9IiIsbD0iIixjPSIiLGE9ZDswPGE7YS0tKXM9cytjKyJbXG4iLGw9bCsiXG4iK2MrIl0iLGMrPSJcdCIsbj0iYXJyYXkiO3Q9cytjK2UuYm9keVRleHQuc3BsaXQoIlxuIikuam9pbigiXG4iK2MpK2wraCxvPW98fHQscj10LnJlcGxhY2UoL1tcbl0vZywiIil9Zi5hZGQoe2tpbmQ6bS5nZXRTdWdnZXN0aW9uS2luZChuKSxsYWJlbDpvLGRvY3VtZW50YXRpb246bS5mcm9tTWFya3VwKGUubWFya2Rvd25EZXNjcmlwdGlvbil8fGUuZGVzY3JpcHRpb24saW5zZXJ0VGV4dDp0LGluc2VydFRleHRGb3JtYXQ6Z24uU25pcHBldCxmaWx0ZXJUZXh0OnJ9KSxnPSEwfSksIWcmJiJvYmplY3QiPT10eXBlb2YgdS5pdGVtcyYmIUFycmF5LmlzQXJyYXkodS5pdGVtcykmJmQ8NSYmdGhpcy5hZGREZWZhdWx0VmFsdWVDb21wbGV0aW9ucyh1Lml0ZW1zLGgsZixkKzEpfSxvLnByb3RvdHlwZS5hZGRFbnVtVmFsdWVDb21wbGV0aW9ucz1mdW5jdGlvbihlLHQscil7aWYoZW4oZS5jb25zdCkmJnIuYWRkKHtraW5kOnRoaXMuZ2V0U3VnZ2VzdGlvbktpbmQoZS50eXBlKSxsYWJlbDp0aGlzLmdldExhYmVsRm9yVmFsdWUoZS5jb25zdCksaW5zZXJ0VGV4dDp0aGlzLmdldEluc2VydFRleHRGb3JWYWx1ZShlLmNvbnN0LHQpLGluc2VydFRleHRGb3JtYXQ6Z24uU25pcHBldCxkb2N1bWVudGF0aW9uOnRoaXMuZnJvbU1hcmt1cChlLm1hcmtkb3duRGVzY3JpcHRpb24pfHxlLmRlc2NyaXB0aW9ufSksQXJyYXkuaXNBcnJheShlLmVudW0pKWZvcih2YXIgbj0wLGk9ZS5lbnVtLmxlbmd0aDtuPGk7bisrKXt2YXIgbz1lLmVudW1bbl0sYT10aGlzLmZyb21NYXJrdXAoZS5tYXJrZG93bkRlc2NyaXB0aW9uKXx8ZS5kZXNjcmlwdGlvbjtlLm1hcmtkb3duRW51bURlc2NyaXB0aW9ucyYmbjxlLm1hcmtkb3duRW51bURlc2NyaXB0aW9ucy5sZW5ndGgmJnRoaXMuZG9lc1N1cHBvcnRNYXJrZG93bigpP2E9dGhpcy5mcm9tTWFya3VwKGUubWFya2Rvd25FbnVtRGVzY3JpcHRpb25zW25dKTplLmVudW1EZXNjcmlwdGlvbnMmJm48ZS5lbnVtRGVzY3JpcHRpb25zLmxlbmd0aCYmKGE9ZS5lbnVtRGVzY3JpcHRpb25zW25dKSxyLmFkZCh7a2luZDp0aGlzLmdldFN1Z2dlc3Rpb25LaW5kKGUudHlwZSksbGFiZWw6dGhpcy5nZXRMYWJlbEZvclZhbHVlKG8pLGluc2VydFRleHQ6dGhpcy5nZXRJbnNlcnRUZXh0Rm9yVmFsdWUobyx0KSxpbnNlcnRUZXh0Rm9ybWF0OmduLlNuaXBwZXQsZG9jdW1lbnRhdGlvbjphfSl9fSxvLnByb3RvdHlwZS5jb2xsZWN0VHlwZXM9ZnVuY3Rpb24oZSx0KXtBcnJheS5pc0FycmF5KGUuZW51bSl8fGVuKGUuY29uc3QpfHwoZT1lLnR5cGUsQXJyYXkuaXNBcnJheShlKT9lLmZvckVhY2goZnVuY3Rpb24oZSl7cmV0dXJuIHRbZV09ITB9KTplJiYodFtlXT0hMCkpfSxvLnByb3RvdHlwZS5hZGRGaWxsZXJWYWx1ZUNvbXBsZXRpb25zPWZ1bmN0aW9uKGUsdCxyKXtlLm9iamVjdCYmci5hZGQoe2tpbmQ6dGhpcy5nZXRTdWdnZXN0aW9uS2luZCgib2JqZWN0IiksbGFiZWw6Int9IixpbnNlcnRUZXh0OnRoaXMuZ2V0SW5zZXJ0VGV4dEZvckd1ZXNzZWRWYWx1ZSh7fSx0KSxpbnNlcnRUZXh0Rm9ybWF0OmduLlNuaXBwZXQsZGV0YWlsOkxpKCJkZWZhdWx0cy5vYmplY3QiLCJOZXcgb2JqZWN0IiksZG9jdW1lbnRhdGlvbjoiIn0pLGUuYXJyYXkmJnIuYWRkKHtraW5kOnRoaXMuZ2V0U3VnZ2VzdGlvbktpbmQoImFycmF5IiksbGFiZWw6IltdIixpbnNlcnRUZXh0OnRoaXMuZ2V0SW5zZXJ0VGV4dEZvckd1ZXNzZWRWYWx1ZShbXSx0KSxpbnNlcnRUZXh0Rm9ybWF0OmduLlNuaXBwZXQsZGV0YWlsOkxpKCJkZWZhdWx0cy5hcnJheSIsIk5ldyBhcnJheSIpLGRvY3VtZW50YXRpb246IiJ9KX0sby5wcm90b3R5cGUuYWRkQm9vbGVhblZhbHVlQ29tcGxldGlvbj1mdW5jdGlvbihlLHQscil7ci5hZGQoe2tpbmQ6dGhpcy5nZXRTdWdnZXN0aW9uS2luZCgiYm9vbGVhbiIpLGxhYmVsOmU/InRydWUiOiJmYWxzZSIsaW5zZXJ0VGV4dDp0aGlzLmdldEluc2VydFRleHRGb3JWYWx1ZShlLHQpLGluc2VydFRleHRGb3JtYXQ6Z24uU25pcHBldCxkb2N1bWVudGF0aW9uOiIifSl9LG8ucHJvdG90eXBlLmFkZE51bGxWYWx1ZUNvbXBsZXRpb249ZnVuY3Rpb24oZSx0KXt0LmFkZCh7a2luZDp0aGlzLmdldFN1Z2dlc3Rpb25LaW5kKCJudWxsIiksbGFiZWw6Im51bGwiLGluc2VydFRleHQ6Im51bGwiK2UsaW5zZXJ0VGV4dEZvcm1hdDpnbi5TbmlwcGV0LGRvY3VtZW50YXRpb246IiJ9KX0sby5wcm90b3R5cGUuYWRkRG9sbGFyU2NoZW1hQ29tcGxldGlvbnM9ZnVuY3Rpb24odCxyKXt2YXIgbj10aGlzO3RoaXMuc2NoZW1hU2VydmljZS5nZXRSZWdpc3RlcmVkU2NoZW1hSWRzKGZ1bmN0aW9uKGUpe3JldHVybiJodHRwIj09PWV8fCJodHRwcyI9PT1lfSkuZm9yRWFjaChmdW5jdGlvbihlKXtyZXR1cm4gci5hZGQoe2tpbmQ6ZG4uTW9kdWxlLGxhYmVsOm4uZ2V0TGFiZWxGb3JWYWx1ZShlKSxmaWx0ZXJUZXh0Om4uZ2V0RmlsdGVyVGV4dEZvclZhbHVlKGUpLGluc2VydFRleHQ6bi5nZXRJbnNlcnRUZXh0Rm9yVmFsdWUoZSx0KSxpbnNlcnRUZXh0Rm9ybWF0OmduLlNuaXBwZXQsZG9jdW1lbnRhdGlvbjoiIn0pfSl9LG8ucHJvdG90eXBlLmdldExhYmVsRm9yVmFsdWU9ZnVuY3Rpb24oZSl7cmV0dXJuIEpTT04uc3RyaW5naWZ5KGUpfSxvLnByb3RvdHlwZS5nZXRGaWx0ZXJUZXh0Rm9yVmFsdWU9ZnVuY3Rpb24oZSl7cmV0dXJuIEpTT04uc3RyaW5naWZ5KGUpfSxvLnByb3RvdHlwZS5nZXRGaWx0ZXJUZXh0Rm9yU25pcHBldFZhbHVlPWZ1bmN0aW9uKGUpe3JldHVybiBKU09OLnN0cmluZ2lmeShlKS5yZXBsYWNlKC9cJFx7XGQrOihbXn1dKylcfXxcJFxkKy9nLCIkMSIpfSxvLnByb3RvdHlwZS5nZXRMYWJlbEZvclNuaXBwZXRWYWx1ZT1mdW5jdGlvbihlKXtyZXR1cm4gSlNPTi5zdHJpbmdpZnkoZSkucmVwbGFjZSgvXCRce1xkKzooW159XSspXH18XCRcZCsvZywiJDEiKX0sby5wcm90b3R5cGUuZ2V0SW5zZXJ0VGV4dEZvclBsYWluVGV4dD1mdW5jdGlvbihlKXtyZXR1cm4gZS5yZXBsYWNlKC9bXFxcJFx9XS9nLCJcXCQmIil9LG8ucHJvdG90eXBlLmdldEluc2VydFRleHRGb3JWYWx1ZT1mdW5jdGlvbihlLHQpe2U9SlNPTi5zdHJpbmdpZnkoZSxudWxsLCJcdCIpO3JldHVybiJ7fSI9PT1lPyJ7JDF9Iit0OiJbXSI9PT1lPyJbJDFdIit0OnRoaXMuZ2V0SW5zZXJ0VGV4dEZvclBsYWluVGV4dChlK3QpfSxvLnByb3RvdHlwZS5nZXRJbnNlcnRUZXh0Rm9yU25pcHBldFZhbHVlPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGZ1bmN0aW9uIGUodCxyLG4pe2lmKG51bGw9PT10fHwib2JqZWN0IiE9dHlwZW9mIHQpcmV0dXJuIG4odCk7dmFyIGk9cisiXHQiO2lmKEFycmF5LmlzQXJyYXkodCkpe2lmKDA9PT10Lmxlbmd0aClyZXR1cm4iW10iO2Zvcih2YXIgbz0iW1xuIixhPTA7YTx0Lmxlbmd0aDthKyspbys9aStlKHRbYV0saSxuKSxhPHQubGVuZ3RoLTEmJihvKz0iLCIpLG8rPSJcbiI7cmV0dXJuIG8rPXIrIl0ifXZhciBzPU9iamVjdC5rZXlzKHQpO2lmKDA9PT1zLmxlbmd0aClyZXR1cm4ie30iO2ZvcihvPSJ7XG4iLGE9MDthPHMubGVuZ3RoO2ErKyl7dmFyIGw9c1thXTtvKz1pK0pTT04uc3RyaW5naWZ5KGwpKyI6ICIrZSh0W2xdLGksbiksYTxzLmxlbmd0aC0xJiYobys9IiwiKSxvKz0iXG4ifXJldHVybiBvKz1yKyJ9In0oZSwiIixmdW5jdGlvbihlKXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIGUmJiJeIj09PWVbMF0/ZS5zdWJzdHIoMSk6SlNPTi5zdHJpbmdpZnkoZSl9KSt0fSxvLnByb3RvdHlwZS5nZXRJbnNlcnRUZXh0Rm9yR3Vlc3NlZFZhbHVlPWZ1bmN0aW9uKGUsdCl7c3dpdGNoKHR5cGVvZiBlKXtjYXNlIm9iamVjdCI6cmV0dXJuIG51bGw9PT1lPyIkezE6bnVsbH0iK3Q6dGhpcy5nZXRJbnNlcnRUZXh0Rm9yVmFsdWUoZSx0KTtjYXNlInN0cmluZyI6dmFyIHI9KHI9SlNPTi5zdHJpbmdpZnkoZSkpLnN1YnN0cigxLHIubGVuZ3RoLTIpO3JldHVybiciJHsxOicrKHI9dGhpcy5nZXRJbnNlcnRUZXh0Rm9yUGxhaW5UZXh0KHIpKSsnfSInK3Q7Y2FzZSJudW1iZXIiOmNhc2UiYm9vbGVhbiI6cmV0dXJuIiR7MToiK0pTT04uc3RyaW5naWZ5KGUpKyJ9Iit0fXJldHVybiB0aGlzLmdldEluc2VydFRleHRGb3JWYWx1ZShlLHQpfSxvLnByb3RvdHlwZS5nZXRTdWdnZXN0aW9uS2luZD1mdW5jdGlvbihlKXt2YXIgdDtpZighKGU9QXJyYXkuaXNBcnJheShlKT8wPCh0PWUpLmxlbmd0aD90WzBdOnZvaWQgMDplKSlyZXR1cm4gZG4uVmFsdWU7c3dpdGNoKGUpe2Nhc2Uic3RyaW5nIjpyZXR1cm4gZG4uVmFsdWU7Y2FzZSJvYmplY3QiOnJldHVybiBkbi5Nb2R1bGU7Y2FzZSJwcm9wZXJ0eSI6cmV0dXJuIGRuLlByb3BlcnR5O2RlZmF1bHQ6cmV0dXJuIGRuLlZhbHVlfX0sby5wcm90b3R5cGUuZ2V0TGFiZWxUZXh0Rm9yTWF0Y2hpbmdOb2RlPWZ1bmN0aW9uKGUsdCl7c3dpdGNoKGUudHlwZSl7Y2FzZSJhcnJheSI6cmV0dXJuIltdIjtjYXNlIm9iamVjdCI6cmV0dXJuInt9IjtkZWZhdWx0OnJldHVybiB0LmdldFRleHQoKS5zdWJzdHIoZS5vZmZzZXQsZS5sZW5ndGgpfX0sby5wcm90b3R5cGUuZ2V0SW5zZXJ0VGV4dEZvck1hdGNoaW5nTm9kZT1mdW5jdGlvbihlLHQscil7c3dpdGNoKGUudHlwZSl7Y2FzZSJhcnJheSI6cmV0dXJuIHRoaXMuZ2V0SW5zZXJ0VGV4dEZvclZhbHVlKFtdLHIpO2Nhc2Uib2JqZWN0IjpyZXR1cm4gdGhpcy5nZXRJbnNlcnRUZXh0Rm9yVmFsdWUoe30scik7ZGVmYXVsdDp2YXIgbj10LmdldFRleHQoKS5zdWJzdHIoZS5vZmZzZXQsZS5sZW5ndGgpK3I7cmV0dXJuIHRoaXMuZ2V0SW5zZXJ0VGV4dEZvclBsYWluVGV4dChuKX19LG8ucHJvdG90eXBlLmdldEluc2VydFRleHRGb3JQcm9wZXJ0eT1mdW5jdGlvbihlLHQscixuKXt2YXIgaT10aGlzLmdldEluc2VydFRleHRGb3JWYWx1ZShlLCIiKTtpZighcilyZXR1cm4gaTt2YXIgbyxlPWkrIjogIixyPTA7aWYodCYmKEFycmF5LmlzQXJyYXkodC5kZWZhdWx0U25pcHBldHMpJiYoMSE9PXQuZGVmYXVsdFNuaXBwZXRzLmxlbmd0aHx8ZW4oYT10LmRlZmF1bHRTbmlwcGV0c1swXS5ib2R5KSYmKG89dGhpcy5nZXRJbnNlcnRUZXh0Rm9yU25pcHBldFZhbHVlKGEsIiIpKSxyKz10LmRlZmF1bHRTbmlwcGV0cy5sZW5ndGgpLHQuZW51bSYmKG98fDEhPT10LmVudW0ubGVuZ3RofHwobz10aGlzLmdldEluc2VydFRleHRGb3JHdWVzc2VkVmFsdWUodC5lbnVtWzBdLCIiKSkscis9dC5lbnVtLmxlbmd0aCksZW4odC5kZWZhdWx0KSYmKG89b3x8dGhpcy5nZXRJbnNlcnRUZXh0Rm9yR3Vlc3NlZFZhbHVlKHQuZGVmYXVsdCwiIikscisrKSxBcnJheS5pc0FycmF5KHQuZXhhbXBsZXMpJiZ0LmV4YW1wbGVzLmxlbmd0aCYmKG89b3x8dGhpcy5nZXRJbnNlcnRUZXh0Rm9yR3Vlc3NlZFZhbHVlKHQuZXhhbXBsZXNbMF0sIiIpLHIrPXQuZXhhbXBsZXMubGVuZ3RoKSwwPT09cikpe3ZhciBhPUFycmF5LmlzQXJyYXkodC50eXBlKT90LnR5cGVbMF06dC50eXBlO3N3aXRjaChhfHwodC5wcm9wZXJ0aWVzP2E9Im9iamVjdCI6dC5pdGVtcyYmKGE9ImFycmF5IikpLGEpe2Nhc2UiYm9vbGVhbiI6bz0iJDEiO2JyZWFrO2Nhc2Uic3RyaW5nIjpvPSciJDEiJzticmVhaztjYXNlIm9iamVjdCI6bz0ieyQxfSI7YnJlYWs7Y2FzZSJhcnJheSI6bz0iWyQxXSI7YnJlYWs7Y2FzZSJudW1iZXIiOmNhc2UiaW50ZWdlciI6bz0iJHsxOjB9IjticmVhaztjYXNlIm51bGwiOm89IiR7MTpudWxsfSI7YnJlYWs7ZGVmYXVsdDpyZXR1cm4gaX19cmV0dXJuIGUrKG89IW98fDE8cj8iJDEiOm8pK259LG8ucHJvdG90eXBlLmdldEN1cnJlbnRXb3JkPWZ1bmN0aW9uKGUsdCl7Zm9yKHZhciByPXQtMSxuPWUuZ2V0VGV4dCgpOzA8PXImJi0xPT09JyBcdFxuXHJcdiI6e1ssXX0nLmluZGV4T2Yobi5jaGFyQXQocikpOylyLS07cmV0dXJuIG4uc3Vic3RyaW5nKHIrMSx0KX0sby5wcm90b3R5cGUuZXZhbHVhdGVTZXBhcmF0b3JBZnRlcj1mdW5jdGlvbihlLHQpe2U9enIoZS5nZXRUZXh0KCksITApO3N3aXRjaChlLnNldFBvc2l0aW9uKHQpLGUuc2NhbigpKXtjYXNlIDU6Y2FzZSAyOmNhc2UgNDpjYXNlIDE3OnJldHVybiIiO2RlZmF1bHQ6cmV0dXJuIiwifX0sby5wcm90b3R5cGUuZmluZEl0ZW1BdE9mZnNldD1mdW5jdGlvbihlLHQscil7Zm9yKHZhciBuPXpyKHQuZ2V0VGV4dCgpLCEwKSxpPWUuaXRlbXMsbz1pLmxlbmd0aC0xOzA8PW87by0tKXt2YXIgYT1pW29dO2lmKHI+YS5vZmZzZXQrYS5sZW5ndGgpcmV0dXJuIG4uc2V0UG9zaXRpb24oYS5vZmZzZXQrYS5sZW5ndGgpLDU9PT1uLnNjYW4oKSYmcj49bi5nZXRUb2tlbk9mZnNldCgpK24uZ2V0VG9rZW5MZW5ndGgoKT9vKzE6bztpZihyPj1hLm9mZnNldClyZXR1cm4gb31yZXR1cm4gMH0sby5wcm90b3R5cGUuaXNJbkNvbW1lbnQ9ZnVuY3Rpb24oZSx0LHIpe2Zvcih2YXIgbj16cihlLmdldFRleHQoKSwhMSksaT0obi5zZXRQb3NpdGlvbih0KSxuLnNjYW4oKSk7MTchPT1pJiZuLmdldFRva2VuT2Zmc2V0KCkrbi5nZXRUb2tlbkxlbmd0aCgpPHI7KWk9bi5zY2FuKCk7cmV0dXJuKDEyPT09aXx8MTM9PT1pKSYmbi5nZXRUb2tlbk9mZnNldCgpPD1yfSxvLnByb3RvdHlwZS5mcm9tTWFya3VwPWZ1bmN0aW9uKGUpe2lmKGUmJnRoaXMuZG9lc1N1cHBvcnRNYXJrZG93bigpKXJldHVybntraW5kOmNuLk1hcmtkb3duLHZhbHVlOmV9fSxvLnByb3RvdHlwZS5kb2VzU3VwcG9ydE1hcmtkb3duPWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuIGVuKHRoaXMuc3VwcG9ydHNNYXJrZG93bil8fChlPXRoaXMuY2xpZW50Q2FwYWJpbGl0aWVzLnRleHREb2N1bWVudCYmdGhpcy5jbGllbnRDYXBhYmlsaXRpZXMudGV4dERvY3VtZW50LmNvbXBsZXRpb24sdGhpcy5zdXBwb3J0c01hcmtkb3duPWUmJmUuY29tcGxldGlvbkl0ZW0mJkFycmF5LmlzQXJyYXkoZS5jb21wbGV0aW9uSXRlbS5kb2N1bWVudGF0aW9uRm9ybWF0KSYmLTEhPT1lLmNvbXBsZXRpb25JdGVtLmRvY3VtZW50YXRpb25Gb3JtYXQuaW5kZXhPZihjbi5NYXJrZG93bikpLHRoaXMuc3VwcG9ydHNNYXJrZG93bn0sby5wcm90b3R5cGUuZG9lc1N1cHBvcnRzQ29tbWl0Q2hhcmFjdGVycz1mdW5jdGlvbigpe3ZhciBlO3JldHVybiBlbih0aGlzLnN1cHBvcnRzQ29tbWl0Q2hhcmFjdGVycyl8fChlPXRoaXMuY2xpZW50Q2FwYWJpbGl0aWVzLnRleHREb2N1bWVudCYmdGhpcy5jbGllbnRDYXBhYmlsaXRpZXMudGV4dERvY3VtZW50LmNvbXBsZXRpb24sdGhpcy5zdXBwb3J0c0NvbW1pdENoYXJhY3RlcnM9ZSYmZS5jb21wbGV0aW9uSXRlbSYmISFlLmNvbXBsZXRpb25JdGVtLmNvbW1pdENoYXJhY3RlcnNTdXBwb3J0KSx0aGlzLnN1cHBvcnRzQ29tbWl0Q2hhcmFjdGVyc30sbyk7ZnVuY3Rpb24gbyhlLHQscixuKXt2b2lkIDA9PT10JiYodD1bXSksdm9pZCAwPT09ciYmKHI9UHJvbWlzZSksdm9pZCAwPT09biYmKG49e30pLHRoaXMuc2NoZW1hU2VydmljZT1lLHRoaXMuY29udHJpYnV0aW9ucz10LHRoaXMucHJvbWlzZUNvbnN0cnVjdG9yPXIsdGhpcy5jbGllbnRDYXBhYmlsaXRpZXM9bn1UaS5wcm90b3R5cGUuZG9Ib3Zlcj1mdW5jdGlvbihlLHQsYSl7dmFyIHQ9ZS5vZmZzZXRBdCh0KSxzPWEuZ2V0Tm9kZUZyb21PZmZzZXQodCk7aWYoIXN8fCgib2JqZWN0Ij09PXMudHlwZXx8ImFycmF5Ij09PXMudHlwZSkmJnQ+cy5vZmZzZXQrMSYmdDxzLm9mZnNldCtzLmxlbmd0aC0xKXJldHVybiB0aGlzLnByb21pc2UucmVzb2x2ZShudWxsKTt0PXM7aWYoInN0cmluZyI9PT1zLnR5cGUpe3ZhciByPXMucGFyZW50O2lmKHImJiJwcm9wZXJ0eSI9PT1yLnR5cGUmJnIua2V5Tm9kZT09PXMmJiEocz1yLnZhbHVlTm9kZSkpcmV0dXJuIHRoaXMucHJvbWlzZS5yZXNvbHZlKG51bGwpfWZvcih2YXIgbj1Pci5jcmVhdGUoZS5wb3NpdGlvbkF0KHQub2Zmc2V0KSxlLnBvc2l0aW9uQXQodC5vZmZzZXQrdC5sZW5ndGgpKSxsPWZ1bmN0aW9uKGUpe3JldHVybntjb250ZW50czplLHJhbmdlOm59fSxpPVNpKHMpLG89dGhpcy5jb250cmlidXRpb25zLmxlbmd0aC0xOzA8PW87by0tKXt2YXIgYz10aGlzLmNvbnRyaWJ1dGlvbnNbb10uZ2V0SW5mb0NvbnRyaWJ1dGlvbihlLnVyaSxpKTtpZihjKXJldHVybiBjLnRoZW4obCl9cmV0dXJuIHRoaXMuc2NoZW1hU2VydmljZS5nZXRTY2hlbWFGb3JSZXNvdXJjZShlLnVyaSxhKS50aGVuKGZ1bmN0aW9uKGUpe3ZhciByLG4saSxvLHQ7cmV0dXJuIGUmJnM/KGU9YS5nZXRNYXRjaGluZ1NjaGVtYXMoZS5zY2hlbWEscy5vZmZzZXQpLG89aT1uPXI9dm9pZCAwLGUuZXZlcnkoZnVuY3Rpb24oZSl7dmFyIHQ7cmV0dXJuIGUubm9kZT09PXMmJiFlLmludmVydGVkJiZlLnNjaGVtYSYmKHI9cnx8ZS5zY2hlbWEudGl0bGUsbj1ufHxlLnNjaGVtYS5tYXJrZG93bkRlc2NyaXB0aW9ufHxJaShlLnNjaGVtYS5kZXNjcmlwdGlvbiksZS5zY2hlbWEuZW51bSYmKHQ9ZS5zY2hlbWEuZW51bS5pbmRleE9mKF9pKHMpKSxlLnNjaGVtYS5tYXJrZG93bkVudW1EZXNjcmlwdGlvbnM/aT1lLnNjaGVtYS5tYXJrZG93bkVudW1EZXNjcmlwdGlvbnNbdF06ZS5zY2hlbWEuZW51bURlc2NyaXB0aW9ucyYmKGk9SWkoZS5zY2hlbWEuZW51bURlc2NyaXB0aW9uc1t0XSkpLGkmJiJzdHJpbmciIT10eXBlb2Yobz1lLnNjaGVtYS5lbnVtW3RdKSYmKG89SlNPTi5zdHJpbmdpZnkobykpKSksITB9KSxlPSIiLHImJihlPUlpKHIpKSxuJiYoMDxlLmxlbmd0aCYmKGUrPSJcblxuIiksZSs9biksaSYmKDA8ZS5sZW5ndGgmJihlKz0iXG5cbiIpLGUrPSJgIi5jb25jYXQoLTE9PT0odD1vKS5pbmRleE9mKCJgIik/dDoiYGAgIit0KyIgYGAiLCJgOiAiKS5jb25jYXQoaSkpLGwoW2VdKSk6bnVsbH0pfTt2YXIgT2k9VGk7ZnVuY3Rpb24gVGkoZSx0LHIpe3ZvaWQgMD09PXQmJih0PVtdKSx0aGlzLnNjaGVtYVNlcnZpY2U9ZSx0aGlzLmNvbnRyaWJ1dGlvbnM9dCx0aGlzLnByb21pc2U9cnx8UHJvbWlzZX1mdW5jdGlvbiBJaShlKXtpZihlKXJldHVybiBlLnJlcGxhY2UoLyhbXlxuXHJdKShccj9cbikoW15cblxyXSkvZ20sIiQxXG5cbiQzIikucmVwbGFjZSgvW1xcYCpfe31bXF0oKSMrXC0uIV0vZywiXFwkJiIpfXZhciBQaT1xbixWaT0oUmkucHJvdG90eXBlLmNvbmZpZ3VyZT1mdW5jdGlvbihlKXtlJiYodGhpcy52YWxpZGF0aW9uRW5hYmxlZD0hMSE9PWUudmFsaWRhdGUsdGhpcy5jb21tZW50U2V2ZXJpdHk9ZS5hbGxvd0NvbW1lbnRzP3ZvaWQgMDpWci5FcnJvcil9LFJpLnByb3RvdHlwZS5kb1ZhbGlkYXRpb249ZnVuY3Rpb24oaCxmLGQsZSl7dmFyIG09dGhpcztpZighdGhpcy52YWxpZGF0aW9uRW5hYmxlZClyZXR1cm4gdGhpcy5wcm9taXNlLnJlc29sdmUoW10pO2Z1bmN0aW9uIHQoZSl7dmFyIHQscixuPW51bGwhPWQmJmQudHJhaWxpbmdDb21tYXM/RmkoZC50cmFpbGluZ0NvbW1hcyk6VnIuRXJyb3IsaT1udWxsIT1kJiZkLmNvbW1lbnRzP0ZpKGQuY29tbWVudHMpOm0uY29tbWVudFNldmVyaXR5LG89bnVsbCE9ZCYmZC5zY2hlbWFWYWxpZGF0aW9uP0ZpKGQuc2NoZW1hVmFsaWRhdGlvbik6VnIuV2FybmluZyxhPW51bGwhPWQmJmQuc2NoZW1hUmVxdWVzdD9GaShkLnNjaGVtYVJlcXVlc3QpOlZyLldhcm5pbmc7ZSYmKGUuZXJyb3JzLmxlbmd0aCYmZi5yb290JiZhPyh0PSh0PSJvYmplY3QiPT09KHI9Zi5yb290KS50eXBlP3IucHJvcGVydGllc1swXTp2b2lkIDApJiYiJHNjaGVtYSI9PT10LmtleU5vZGUudmFsdWU/KHQ9dC52YWx1ZU5vZGV8fHQsT3IuY3JlYXRlKGgucG9zaXRpb25BdCh0Lm9mZnNldCksaC5wb3NpdGlvbkF0KHQub2Zmc2V0K3QubGVuZ3RoKSkpOk9yLmNyZWF0ZShoLnBvc2l0aW9uQXQoci5vZmZzZXQpLGgucG9zaXRpb25BdChyLm9mZnNldCsxKSkscChSci5jcmVhdGUodCxlLmVycm9yc1swXSxhLGplLlNjaGVtYVJlc29sdmVFcnJvcikpKTohb3x8KHI9Zi52YWxpZGF0ZShoLGUuc2NoZW1hLG8pKSYmci5mb3JFYWNoKHApLGZ1bmN0aW9uIGUodCl7aWYodCYmIm9iamVjdCI9PXR5cGVvZiB0KXtpZih0bih0LmFsbG93Q29tbWVudHMpKXJldHVybiB0LmFsbG93Q29tbWVudHM7aWYodC5hbGxPZilmb3IodmFyIHI9MCxuPXQuYWxsT2Y7cjxuLmxlbmd0aDtyKyspe3ZhciBpPW5bcl0saT1lKGkpO2lmKHRuKGkpKXJldHVybiBpfX1yZXR1cm59KGUuc2NoZW1hKSYmKGk9dm9pZCAwKSxmdW5jdGlvbiBlKHQpe2lmKHQmJiJvYmplY3QiPT10eXBlb2YgdCl7aWYodG4odC5hbGxvd1RyYWlsaW5nQ29tbWFzKSlyZXR1cm4gdC5hbGxvd1RyYWlsaW5nQ29tbWFzO3ZhciByPXQ7aWYodG4oci5hbGxvd3NUcmFpbGluZ0NvbW1hcykpcmV0dXJuIHIuYWxsb3dzVHJhaWxpbmdDb21tYXM7aWYodC5hbGxPZilmb3IodmFyIG49MCxpPXQuYWxsT2Y7bjxpLmxlbmd0aDtuKyspe3ZhciBvPWlbbl0sbz1lKG8pO2lmKHRuKG8pKXJldHVybiBvfX1yZXR1cm59KGUuc2NoZW1hKSYmKG49dm9pZCAwKSk7Zm9yKHZhciBzLGw9MCx1PWYuc3ludGF4RXJyb3JzO2w8dS5sZW5ndGg7bCsrKXt2YXIgYz11W2xdO2lmKGMuY29kZT09PWplLlRyYWlsaW5nQ29tbWEpe2lmKCJudW1iZXIiIT10eXBlb2Ygbiljb250aW51ZTtjLnNldmVyaXR5PW59cChjKX1yZXR1cm4ibnVtYmVyIj09dHlwZW9mIGkmJihzPVBpKCJJbnZhbGlkQ29tbWVudFRva2VuIiwiQ29tbWVudHMgYXJlIG5vdCBwZXJtaXR0ZWQgaW4gSlNPTi4iKSxmLmNvbW1lbnRzLmZvckVhY2goZnVuY3Rpb24oZSl7cChSci5jcmVhdGUoZSxzLGksamUuQ29tbWVudE5vdFBlcm1pdHRlZCkpfSkpLGd9dmFyIHIsZz1bXSxuPXt9LHA9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5yYW5nZS5zdGFydC5saW5lKyIgIitlLnJhbmdlLnN0YXJ0LmNoYXJhY3RlcisiICIrZS5tZXNzYWdlO25bdF18fChuW3RdPSEwLGcucHVzaChlKSl9O3JldHVybiBlPyhyPWUuaWR8fCJzY2hlbWFzZXJ2aWNlOi8vdW50aXRsZWQvIitEaSsrLHRoaXMuanNvblNjaGVtYVNlcnZpY2UucmVnaXN0ZXJFeHRlcm5hbFNjaGVtYShyLFtdLGUpLmdldFJlc29sdmVkU2NoZW1hKCkudGhlbih0KSk6dGhpcy5qc29uU2NoZW1hU2VydmljZS5nZXRTY2hlbWFGb3JSZXNvdXJjZShoLnVyaSxmKS50aGVuKHQpfSxSaS5wcm90b3R5cGUuZ2V0TGFuZ3VhZ2VTdGF0dXM9ZnVuY3Rpb24oZSx0KXtyZXR1cm57c2NoZW1hczp0aGlzLmpzb25TY2hlbWFTZXJ2aWNlLmdldFNjaGVtYVVSSXNGb3JSZXNvdXJjZShlLnVyaSx0KX19LFJpKTtmdW5jdGlvbiBSaShlLHQpe3RoaXMuanNvblNjaGVtYVNlcnZpY2U9ZSx0aGlzLnByb21pc2U9dCx0aGlzLnZhbGlkYXRpb25FbmFibGVkPSEwfXZhciBEaT0wO2Z1bmN0aW9uIEZpKGUpe3N3aXRjaChlKXtjYXNlImVycm9yIjpyZXR1cm4gVnIuRXJyb3I7Y2FzZSJ3YXJuaW5nIjpyZXR1cm4gVnIuV2FybmluZztjYXNlImlnbm9yZSI6cmV0dXJufX12YXIgS2k9NDgsamk9NTcsVWk9NjUscWk9OTcsQmk9MTAyO2Z1bmN0aW9uICRpKGUpe3JldHVybiBlPEtpPzA6ZTw9amk/ZS1LaTooZTxxaSYmKGUrPXFpLVVpKSxxaTw9ZSYmZTw9Qmk/ZS1xaSsxMDowKX1IaS5wcm90b3R5cGUuZmluZERvY3VtZW50U3ltYm9scz1mdW5jdGlvbihvLGUsdCl7dmFyIHU9dGhpcyxlPSh2b2lkIDA9PT10JiYodD17cmVzdWx0TGltaXQ6TnVtYmVyLk1BWF9WQUxVRX0pLGUucm9vdCk7aWYoIWUpcmV0dXJuW107dmFyIGE9dC5yZXN1bHRMaW1pdHx8TnVtYmVyLk1BWF9WQUxVRSxyPW8udXJpO2lmKCgidnNjb2RlOi8vZGVmYXVsdHNldHRpbmdzL2tleWJpbmRpbmdzLmpzb24iPT09cnx8cm4oci50b0xvd2VyQ2FzZSgpLCIvdXNlci9rZXliaW5kaW5ncy5qc29uIikpJiYiYXJyYXkiPT09ZS50eXBlKXtmb3IodmFyIG49W10saT0wLGg9ZS5pdGVtcztpPGgubGVuZ3RoO2krKyl7dmFyIHM9aFtpXTtpZigib2JqZWN0Ij09PXMudHlwZSlmb3IodmFyIGw9MCxmPXMucHJvcGVydGllcztsPGYubGVuZ3RoO2wrKyl7dmFyIGQ9ZltsXTtpZigia2V5Ij09PWQua2V5Tm9kZS52YWx1ZSYmZC52YWx1ZU5vZGUpe3ZhciBtPVRyLmNyZWF0ZShvLnVyaSx6aShvLHMpKTtpZihuLnB1c2goe25hbWU6X2koZC52YWx1ZU5vZGUpLGtpbmQ6eG4uRnVuY3Rpb24sbG9jYXRpb246bX0pLC0tYTw9MClyZXR1cm4gdCYmdC5vblJlc3VsdExpbWl0RXhjZWVkZWQmJnQub25SZXN1bHRMaW1pdEV4Y2VlZGVkKHIpLG59fX1yZXR1cm4gbn1mb3IodmFyIGM9W3tub2RlOmUsY29udGFpbmVyTmFtZToiIn1dLGc9MCxwPSExLGI9W107ZzxjLmxlbmd0aDspe3ZhciB2PWNbZysrXTshZnVuY3Rpb24oZSxpKXsiYXJyYXkiPT09ZS50eXBlP2UuaXRlbXMuZm9yRWFjaChmdW5jdGlvbihlKXtlJiZjLnB1c2goe25vZGU6ZSxjb250YWluZXJOYW1lOml9KX0pOiJvYmplY3QiPT09ZS50eXBlJiZlLnByb3BlcnRpZXMuZm9yRWFjaChmdW5jdGlvbihlKXt2YXIgdCxyLG49ZS52YWx1ZU5vZGU7biYmKDA8YT8oYS0tLHQ9VHIuY3JlYXRlKG8udXJpLHppKG8sZSkpLHI9aT9pKyIuIitlLmtleU5vZGUudmFsdWU6ZS5rZXlOb2RlLnZhbHVlLGIucHVzaCh7bmFtZTp1LmdldEtleUxhYmVsKGUpLGtpbmQ6dS5nZXRTeW1ib2xLaW5kKG4udHlwZSksbG9jYXRpb246dCxjb250YWluZXJOYW1lOml9KSxjLnB1c2goe25vZGU6bixjb250YWluZXJOYW1lOnJ9KSk6cD0hMCl9KX0odi5ub2RlLHYuY29udGFpbmVyTmFtZSl9cmV0dXJuIHAmJnQmJnQub25SZXN1bHRMaW1pdEV4Y2VlZGVkJiZ0Lm9uUmVzdWx0TGltaXRFeGNlZWRlZChyKSxifSxIaS5wcm90b3R5cGUuZmluZERvY3VtZW50U3ltYm9sczI9ZnVuY3Rpb24oYSxlLHQpe3ZhciBzPXRoaXMsZT0odm9pZCAwPT09dCYmKHQ9e3Jlc3VsdExpbWl0Ok51bWJlci5NQVhfVkFMVUV9KSxlLnJvb3QpO2lmKCFlKXJldHVybltdO3ZhciBsPXQucmVzdWx0TGltaXR8fE51bWJlci5NQVhfVkFMVUUscj1hLnVyaTtpZigoInZzY29kZTovL2RlZmF1bHRzZXR0aW5ncy9rZXliaW5kaW5ncy5qc29uIj09PXJ8fHJuKHIudG9Mb3dlckNhc2UoKSwiL3VzZXIva2V5YmluZGluZ3MuanNvbiIpKSYmImFycmF5Ij09PWUudHlwZSl7Zm9yKHZhciBuPVtdLGk9MCx1PWUuaXRlbXM7aTx1Lmxlbmd0aDtpKyspe3ZhciBoPXVbaV07aWYoIm9iamVjdCI9PT1oLnR5cGUpZm9yKHZhciBmPTAsZD1oLnByb3BlcnRpZXM7ZjxkLmxlbmd0aDtmKyspe3ZhciBvPWRbZl07aWYoImtleSI9PT1vLmtleU5vZGUudmFsdWUmJm8udmFsdWVOb2RlKXt2YXIgbT16aShhLGgpLGc9emkoYSxvLmtleU5vZGUpO2lmKG4ucHVzaCh7bmFtZTpfaShvLnZhbHVlTm9kZSksa2luZDp4bi5GdW5jdGlvbixyYW5nZTptLHNlbGVjdGlvblJhbmdlOmd9KSwtLWw8PTApcmV0dXJuIHQmJnQub25SZXN1bHRMaW1pdEV4Y2VlZGVkJiZ0Lm9uUmVzdWx0TGltaXRFeGNlZWRlZChyKSxufX19cmV0dXJuIG59Zm9yKHZhciBwPVtdLGM9W3tub2RlOmUscmVzdWx0OnB9XSxiPTAsdj0hMTtiPGMubGVuZ3RoOyl7dmFyIHk9Y1tiKytdOyFmdW5jdGlvbihlLG8peyJhcnJheSI9PT1lLnR5cGU/ZS5pdGVtcy5mb3JFYWNoKGZ1bmN0aW9uKGUsdCl7dmFyIHIsbjtlJiYoMDxsPyhsLS0sbj1yPXppKGEsZSksdD17bmFtZTpTdHJpbmcodCksa2luZDpzLmdldFN5bWJvbEtpbmQoZS50eXBlKSxyYW5nZTpyLHNlbGVjdGlvblJhbmdlOm4sY2hpbGRyZW46W119LG8ucHVzaCh0KSxjLnB1c2goe3Jlc3VsdDp0LmNoaWxkcmVuLG5vZGU6ZX0pKTp2PSEwKX0pOiJvYmplY3QiPT09ZS50eXBlJiZlLnByb3BlcnRpZXMuZm9yRWFjaChmdW5jdGlvbihlKXt2YXIgdCxyLG4saT1lLnZhbHVlTm9kZTtpJiYoMDxsPyhsLS0sdD16aShhLGUpLHI9emkoYSxlLmtleU5vZGUpLG49W10sZT17bmFtZTpzLmdldEtleUxhYmVsKGUpLGtpbmQ6cy5nZXRTeW1ib2xLaW5kKGkudHlwZSkscmFuZ2U6dCxzZWxlY3Rpb25SYW5nZTpyLGNoaWxkcmVuOm4sZGV0YWlsOnMuZ2V0RGV0YWlsKGkpfSxvLnB1c2goZSksYy5wdXNoKHtyZXN1bHQ6bixub2RlOml9KSk6dj0hMCl9KX0oeS5ub2RlLHkucmVzdWx0KX1yZXR1cm4gdiYmdCYmdC5vblJlc3VsdExpbWl0RXhjZWVkZWQmJnQub25SZXN1bHRMaW1pdEV4Y2VlZGVkKHIpLHB9LEhpLnByb3RvdHlwZS5nZXRTeW1ib2xLaW5kPWZ1bmN0aW9uKGUpe3N3aXRjaChlKXtjYXNlIm9iamVjdCI6cmV0dXJuIHhuLk1vZHVsZTtjYXNlInN0cmluZyI6cmV0dXJuIHhuLlN0cmluZztjYXNlIm51bWJlciI6cmV0dXJuIHhuLk51bWJlcjtjYXNlImFycmF5IjpyZXR1cm4geG4uQXJyYXk7Y2FzZSJib29sZWFuIjpyZXR1cm4geG4uQm9vbGVhbjtkZWZhdWx0OnJldHVybiB4bi5WYXJpYWJsZX19LEhpLnByb3RvdHlwZS5nZXRLZXlMYWJlbD1mdW5jdGlvbihlKXtlPWUua2V5Tm9kZS52YWx1ZTtyZXR1cm4oZT1lJiZlLnJlcGxhY2UoL1tcbl0vZywi4oa1IikpJiZlLnRyaW0oKT9lOiciJy5jb25jYXQoZSwnIicpfSxIaS5wcm90b3R5cGUuZ2V0RGV0YWlsPWZ1bmN0aW9uKGUpe2lmKGUpcmV0dXJuImJvb2xlYW4iPT09ZS50eXBlfHwibnVtYmVyIj09PWUudHlwZXx8Im51bGwiPT09ZS50eXBlfHwic3RyaW5nIj09PWUudHlwZT9TdHJpbmcoZS52YWx1ZSk6ImFycmF5Ij09PWUudHlwZT9lLmNoaWxkcmVuLmxlbmd0aD92b2lkIDA6IltdIjoib2JqZWN0IiE9PWUudHlwZXx8ZS5jaGlsZHJlbi5sZW5ndGg/dm9pZCAwOiJ7fSJ9LEhpLnByb3RvdHlwZS5maW5kRG9jdW1lbnRDb2xvcnM9ZnVuY3Rpb24oYyx1LGgpe3JldHVybiB0aGlzLnNjaGVtYVNlcnZpY2UuZ2V0U2NoZW1hRm9yUmVzb3VyY2UoYy51cmksdSkudGhlbihmdW5jdGlvbihlKXt2YXIgdD1bXTtpZihlKWZvcih2YXIgcj1oJiYibnVtYmVyIj09dHlwZW9mIGgucmVzdWx0TGltaXQ/aC5yZXN1bHRMaW1pdDpOdW1iZXIuTUFYX1ZBTFVFLG49e30saT0wLG89dS5nZXRNYXRjaGluZ1NjaGVtYXMoZS5zY2hlbWEpO2k8by5sZW5ndGg7aSsrKXt2YXIgYT1vW2ldO2lmKCFhLmludmVydGVkJiZhLnNjaGVtYSYmKCJjb2xvciI9PT1hLnNjaGVtYS5mb3JtYXR8fCJjb2xvci1oZXgiPT09YS5zY2hlbWEuZm9ybWF0KSYmYS5ub2RlJiYic3RyaW5nIj09PWEubm9kZS50eXBlKXt2YXIgcz1TdHJpbmcoYS5ub2RlLm9mZnNldCk7aWYoIW5bc10pe3ZhciBsPWZ1bmN0aW9uKGUpe2lmKCIjIj09PWVbMF0pc3dpdGNoKGUubGVuZ3RoKXtjYXNlIDQ6cmV0dXJue3JlZDoxNyokaShlLmNoYXJDb2RlQXQoMSkpLzI1NSxncmVlbjoxNyokaShlLmNoYXJDb2RlQXQoMikpLzI1NSxibHVlOjE3KiRpKGUuY2hhckNvZGVBdCgzKSkvMjU1LGFscGhhOjF9O2Nhc2UgNTpyZXR1cm57cmVkOjE3KiRpKGUuY2hhckNvZGVBdCgxKSkvMjU1LGdyZWVuOjE3KiRpKGUuY2hhckNvZGVBdCgyKSkvMjU1LGJsdWU6MTcqJGkoZS5jaGFyQ29kZUF0KDMpKS8yNTUsYWxwaGE6MTcqJGkoZS5jaGFyQ29kZUF0KDQpKS8yNTV9O2Nhc2UgNzpyZXR1cm57cmVkOigxNiokaShlLmNoYXJDb2RlQXQoMSkpKyRpKGUuY2hhckNvZGVBdCgyKSkpLzI1NSxncmVlbjooMTYqJGkoZS5jaGFyQ29kZUF0KDMpKSskaShlLmNoYXJDb2RlQXQoNCkpKS8yNTUsYmx1ZTooMTYqJGkoZS5jaGFyQ29kZUF0KDUpKSskaShlLmNoYXJDb2RlQXQoNikpKS8yNTUsYWxwaGE6MX07Y2FzZSA5OnJldHVybntyZWQ6KDE2KiRpKGUuY2hhckNvZGVBdCgxKSkrJGkoZS5jaGFyQ29kZUF0KDIpKSkvMjU1LGdyZWVuOigxNiokaShlLmNoYXJDb2RlQXQoMykpKyRpKGUuY2hhckNvZGVBdCg0KSkpLzI1NSxibHVlOigxNiokaShlLmNoYXJDb2RlQXQoNSkpKyRpKGUuY2hhckNvZGVBdCg2KSkpLzI1NSxhbHBoYTooMTYqJGkoZS5jaGFyQ29kZUF0KDcpKSskaShlLmNoYXJDb2RlQXQoOCkpKS8yNTV9fX0oX2koYS5ub2RlKSk7aWYobCYmKGE9emkoYyxhLm5vZGUpLHQucHVzaCh7Y29sb3I6bCxyYW5nZTphfSkpLG5bc109ITAsLS1yPD0wKXJldHVybiBoJiZoLm9uUmVzdWx0TGltaXRFeGNlZWRlZCYmaC5vblJlc3VsdExpbWl0RXhjZWVkZWQoYy51cmkpLHR9fX1yZXR1cm4gdH0pfSxIaS5wcm90b3R5cGUuZ2V0Q29sb3JQcmVzZW50YXRpb25zPWZ1bmN0aW9uKGUsdCxyLG4pe3ZhciBpPVtdLG89TWF0aC5yb3VuZCgyNTUqci5yZWQpLGE9TWF0aC5yb3VuZCgyNTUqci5ncmVlbikscz1NYXRoLnJvdW5kKDI1NSpyLmJsdWUpO2Z1bmN0aW9uIGwoZSl7ZT1lLnRvU3RyaW5nKDE2KTtyZXR1cm4gMiE9PWUubGVuZ3RoPyIwIitlOmV9cmV0dXJuIG89MT09PXIuYWxwaGE/IiMiLmNvbmNhdChsKG8pKS5jb25jYXQobChhKSkuY29uY2F0KGwocykpOiIjIi5jb25jYXQobChvKSkuY29uY2F0KGwoYSkpLmNvbmNhdChsKHMpKS5jb25jYXQobChNYXRoLnJvdW5kKDI1NSpyLmFscGhhKSkpLGkucHVzaCh7bGFiZWw6byx0ZXh0RWRpdDpEci5yZXBsYWNlKG4sSlNPTi5zdHJpbmdpZnkobykpfSksaX07dmFyIFdpPUhpO2Z1bmN0aW9uIEhpKGUpe3RoaXMuc2NoZW1hU2VydmljZT1lfWZ1bmN0aW9uIHppKGUsdCl7cmV0dXJuIE9yLmNyZWF0ZShlLnBvc2l0aW9uQXQodC5vZmZzZXQpLGUucG9zaXRpb25BdCh0Lm9mZnNldCt0Lmxlbmd0aCkpfXZhciBKaSxHaSxaaSxYaSxRaSxZaSxlbyxlPXFuLHRvPXtzY2hlbWFBc3NvY2lhdGlvbnM6W10sc2NoZW1hczp7Imh0dHA6Ly9qc29uLXNjaGVtYS5vcmcvc2NoZW1hIyI6eyRyZWY6Imh0dHA6Ly9qc29uLXNjaGVtYS5vcmcvZHJhZnQtMDcvc2NoZW1hIyJ9LCJodHRwOi8vanNvbi1zY2hlbWEub3JnL2RyYWZ0LTA0L3NjaGVtYSMiOnskc2NoZW1hOiJodHRwOi8vanNvbi1zY2hlbWEub3JnL2RyYWZ0LTA0L3NjaGVtYSMiLGRlZmluaXRpb25zOntzY2hlbWFBcnJheTp7dHlwZToiYXJyYXkiLG1pbkl0ZW1zOjEsaXRlbXM6eyRyZWY6IiMifX0scG9zaXRpdmVJbnRlZ2VyOnt0eXBlOiJpbnRlZ2VyIixtaW5pbXVtOjB9LHBvc2l0aXZlSW50ZWdlckRlZmF1bHQwOnthbGxPZjpbeyRyZWY6IiMvZGVmaW5pdGlvbnMvcG9zaXRpdmVJbnRlZ2VyIn0se2RlZmF1bHQ6MH1dfSxzaW1wbGVUeXBlczp7dHlwZToic3RyaW5nIixlbnVtOlsiYXJyYXkiLCJib29sZWFuIiwiaW50ZWdlciIsIm51bGwiLCJudW1iZXIiLCJvYmplY3QiLCJzdHJpbmciXX0sc3RyaW5nQXJyYXk6e3R5cGU6ImFycmF5IixpdGVtczp7dHlwZToic3RyaW5nIn0sbWluSXRlbXM6MSx1bmlxdWVJdGVtczohMH19LHR5cGU6Im9iamVjdCIscHJvcGVydGllczp7aWQ6e3R5cGU6InN0cmluZyIsZm9ybWF0OiJ1cmkifSwkc2NoZW1hOnt0eXBlOiJzdHJpbmciLGZvcm1hdDoidXJpIn0sdGl0bGU6e3R5cGU6InN0cmluZyJ9LGRlc2NyaXB0aW9uOnt0eXBlOiJzdHJpbmcifSxkZWZhdWx0Ont9LG11bHRpcGxlT2Y6e3R5cGU6Im51bWJlciIsbWluaW11bTowLGV4Y2x1c2l2ZU1pbmltdW06ITB9LG1heGltdW06e3R5cGU6Im51bWJlciJ9LGV4Y2x1c2l2ZU1heGltdW06e3R5cGU6ImJvb2xlYW4iLGRlZmF1bHQ6ITF9LG1pbmltdW06e3R5cGU6Im51bWJlciJ9LGV4Y2x1c2l2ZU1pbmltdW06e3R5cGU6ImJvb2xlYW4iLGRlZmF1bHQ6ITF9LG1heExlbmd0aDp7YWxsT2Y6W3skcmVmOiIjL2RlZmluaXRpb25zL3Bvc2l0aXZlSW50ZWdlciJ9XX0sbWluTGVuZ3RoOnthbGxPZjpbeyRyZWY6IiMvZGVmaW5pdGlvbnMvcG9zaXRpdmVJbnRlZ2VyRGVmYXVsdDAifV19LHBhdHRlcm46e3R5cGU6InN0cmluZyIsZm9ybWF0OiJyZWdleCJ9LGFkZGl0aW9uYWxJdGVtczp7YW55T2Y6W3t0eXBlOiJib29sZWFuIn0seyRyZWY6IiMifV0sZGVmYXVsdDp7fX0saXRlbXM6e2FueU9mOlt7JHJlZjoiIyJ9LHskcmVmOiIjL2RlZmluaXRpb25zL3NjaGVtYUFycmF5In1dLGRlZmF1bHQ6e319LG1heEl0ZW1zOnthbGxPZjpbeyRyZWY6IiMvZGVmaW5pdGlvbnMvcG9zaXRpdmVJbnRlZ2VyIn1dfSxtaW5JdGVtczp7YWxsT2Y6W3skcmVmOiIjL2RlZmluaXRpb25zL3Bvc2l0aXZlSW50ZWdlckRlZmF1bHQwIn1dfSx1bmlxdWVJdGVtczp7dHlwZToiYm9vbGVhbiIsZGVmYXVsdDohMX0sbWF4UHJvcGVydGllczp7YWxsT2Y6W3skcmVmOiIjL2RlZmluaXRpb25zL3Bvc2l0aXZlSW50ZWdlciJ9XX0sbWluUHJvcGVydGllczp7YWxsT2Y6W3skcmVmOiIjL2RlZmluaXRpb25zL3Bvc2l0aXZlSW50ZWdlckRlZmF1bHQwIn1dfSxyZXF1aXJlZDp7YWxsT2Y6W3skcmVmOiIjL2RlZmluaXRpb25zL3N0cmluZ0FycmF5In1dfSxhZGRpdGlvbmFsUHJvcGVydGllczp7YW55T2Y6W3t0eXBlOiJib29sZWFuIn0seyRyZWY6IiMifV0sZGVmYXVsdDp7fX0sZGVmaW5pdGlvbnM6e3R5cGU6Im9iamVjdCIsYWRkaXRpb25hbFByb3BlcnRpZXM6eyRyZWY6IiMifSxkZWZhdWx0Ont9fSxwcm9wZXJ0aWVzOnt0eXBlOiJvYmplY3QiLGFkZGl0aW9uYWxQcm9wZXJ0aWVzOnskcmVmOiIjIn0sZGVmYXVsdDp7fX0scGF0dGVyblByb3BlcnRpZXM6e3R5cGU6Im9iamVjdCIsYWRkaXRpb25hbFByb3BlcnRpZXM6eyRyZWY6IiMifSxkZWZhdWx0Ont9fSxkZXBlbmRlbmNpZXM6e3R5cGU6Im9iamVjdCIsYWRkaXRpb25hbFByb3BlcnRpZXM6e2FueU9mOlt7JHJlZjoiIyJ9LHskcmVmOiIjL2RlZmluaXRpb25zL3N0cmluZ0FycmF5In1dfX0sZW51bTp7dHlwZToiYXJyYXkiLG1pbkl0ZW1zOjEsdW5pcXVlSXRlbXM6ITB9LHR5cGU6e2FueU9mOlt7JHJlZjoiIy9kZWZpbml0aW9ucy9zaW1wbGVUeXBlcyJ9LHt0eXBlOiJhcnJheSIsaXRlbXM6eyRyZWY6IiMvZGVmaW5pdGlvbnMvc2ltcGxlVHlwZXMifSxtaW5JdGVtczoxLHVuaXF1ZUl0ZW1zOiEwfV19LGZvcm1hdDp7YW55T2Y6W3t0eXBlOiJzdHJpbmciLGVudW06WyJkYXRlLXRpbWUiLCJ1cmkiLCJlbWFpbCIsImhvc3RuYW1lIiwiaXB2NCIsImlwdjYiLCJyZWdleCJdfSx7dHlwZToic3RyaW5nIn1dfSxhbGxPZjp7YWxsT2Y6W3skcmVmOiIjL2RlZmluaXRpb25zL3NjaGVtYUFycmF5In1dfSxhbnlPZjp7YWxsT2Y6W3skcmVmOiIjL2RlZmluaXRpb25zL3NjaGVtYUFycmF5In1dfSxvbmVPZjp7YWxsT2Y6W3skcmVmOiIjL2RlZmluaXRpb25zL3NjaGVtYUFycmF5In1dfSxub3Q6e2FsbE9mOlt7JHJlZjoiIyJ9XX19LGRlcGVuZGVuY2llczp7ZXhjbHVzaXZlTWF4aW11bTpbIm1heGltdW0iXSxleGNsdXNpdmVNaW5pbXVtOlsibWluaW11bSJdfSxkZWZhdWx0Ont9fSwiaHR0cDovL2pzb24tc2NoZW1hLm9yZy9kcmFmdC0wNy9zY2hlbWEjIjp7ZGVmaW5pdGlvbnM6e3NjaGVtYUFycmF5Ont0eXBlOiJhcnJheSIsbWluSXRlbXM6MSxpdGVtczp7JHJlZjoiIyJ9fSxub25OZWdhdGl2ZUludGVnZXI6e3R5cGU6ImludGVnZXIiLG1pbmltdW06MH0sbm9uTmVnYXRpdmVJbnRlZ2VyRGVmYXVsdDA6e2FsbE9mOlt7JHJlZjoiIy9kZWZpbml0aW9ucy9ub25OZWdhdGl2ZUludGVnZXIifSx7ZGVmYXVsdDowfV19LHNpbXBsZVR5cGVzOntlbnVtOlsiYXJyYXkiLCJib29sZWFuIiwiaW50ZWdlciIsIm51bGwiLCJudW1iZXIiLCJvYmplY3QiLCJzdHJpbmciXX0sc3RyaW5nQXJyYXk6e3R5cGU6ImFycmF5IixpdGVtczp7dHlwZToic3RyaW5nIn0sdW5pcXVlSXRlbXM6ITAsZGVmYXVsdDpbXX19LHR5cGU6WyJvYmplY3QiLCJib29sZWFuIl0scHJvcGVydGllczp7JGlkOnt0eXBlOiJzdHJpbmciLGZvcm1hdDoidXJpLXJlZmVyZW5jZSJ9LCRzY2hlbWE6e3R5cGU6InN0cmluZyIsZm9ybWF0OiJ1cmkifSwkcmVmOnt0eXBlOiJzdHJpbmciLGZvcm1hdDoidXJpLXJlZmVyZW5jZSJ9LCRjb21tZW50Ont0eXBlOiJzdHJpbmcifSx0aXRsZTp7dHlwZToic3RyaW5nIn0sZGVzY3JpcHRpb246e3R5cGU6InN0cmluZyJ9LGRlZmF1bHQ6ITAscmVhZE9ubHk6e3R5cGU6ImJvb2xlYW4iLGRlZmF1bHQ6ITF9LGV4YW1wbGVzOnt0eXBlOiJhcnJheSIsaXRlbXM6ITB9LG11bHRpcGxlT2Y6e3R5cGU6Im51bWJlciIsZXhjbHVzaXZlTWluaW11bTowfSxtYXhpbXVtOnt0eXBlOiJudW1iZXIifSxleGNsdXNpdmVNYXhpbXVtOnt0eXBlOiJudW1iZXIifSxtaW5pbXVtOnt0eXBlOiJudW1iZXIifSxleGNsdXNpdmVNaW5pbXVtOnt0eXBlOiJudW1iZXIifSxtYXhMZW5ndGg6eyRyZWY6IiMvZGVmaW5pdGlvbnMvbm9uTmVnYXRpdmVJbnRlZ2VyIn0sbWluTGVuZ3RoOnskcmVmOiIjL2RlZmluaXRpb25zL25vbk5lZ2F0aXZlSW50ZWdlckRlZmF1bHQwIn0scGF0dGVybjp7dHlwZToic3RyaW5nIixmb3JtYXQ6InJlZ2V4In0sYWRkaXRpb25hbEl0ZW1zOnskcmVmOiIjIn0saXRlbXM6e2FueU9mOlt7JHJlZjoiIyJ9LHskcmVmOiIjL2RlZmluaXRpb25zL3NjaGVtYUFycmF5In1dLGRlZmF1bHQ6ITB9LG1heEl0ZW1zOnskcmVmOiIjL2RlZmluaXRpb25zL25vbk5lZ2F0aXZlSW50ZWdlciJ9LG1pbkl0ZW1zOnskcmVmOiIjL2RlZmluaXRpb25zL25vbk5lZ2F0aXZlSW50ZWdlckRlZmF1bHQwIn0sdW5pcXVlSXRlbXM6e3R5cGU6ImJvb2xlYW4iLGRlZmF1bHQ6ITF9LGNvbnRhaW5zOnskcmVmOiIjIn0sbWF4UHJvcGVydGllczp7JHJlZjoiIy9kZWZpbml0aW9ucy9ub25OZWdhdGl2ZUludGVnZXIifSxtaW5Qcm9wZXJ0aWVzOnskcmVmOiIjL2RlZmluaXRpb25zL25vbk5lZ2F0aXZlSW50ZWdlckRlZmF1bHQwIn0scmVxdWlyZWQ6eyRyZWY6IiMvZGVmaW5pdGlvbnMvc3RyaW5nQXJyYXkifSxhZGRpdGlvbmFsUHJvcGVydGllczp7JHJlZjoiIyJ9LGRlZmluaXRpb25zOnt0eXBlOiJvYmplY3QiLGFkZGl0aW9uYWxQcm9wZXJ0aWVzOnskcmVmOiIjIn0sZGVmYXVsdDp7fX0scHJvcGVydGllczp7dHlwZToib2JqZWN0IixhZGRpdGlvbmFsUHJvcGVydGllczp7JHJlZjoiIyJ9LGRlZmF1bHQ6e319LHBhdHRlcm5Qcm9wZXJ0aWVzOnt0eXBlOiJvYmplY3QiLGFkZGl0aW9uYWxQcm9wZXJ0aWVzOnskcmVmOiIjIn0scHJvcGVydHlOYW1lczp7Zm9ybWF0OiJyZWdleCJ9LGRlZmF1bHQ6e319LGRlcGVuZGVuY2llczp7dHlwZToib2JqZWN0IixhZGRpdGlvbmFsUHJvcGVydGllczp7YW55T2Y6W3skcmVmOiIjIn0seyRyZWY6IiMvZGVmaW5pdGlvbnMvc3RyaW5nQXJyYXkifV19fSxwcm9wZXJ0eU5hbWVzOnskcmVmOiIjIn0sY29uc3Q6ITAsZW51bTp7dHlwZToiYXJyYXkiLGl0ZW1zOiEwLG1pbkl0ZW1zOjEsdW5pcXVlSXRlbXM6ITB9LHR5cGU6e2FueU9mOlt7JHJlZjoiIy9kZWZpbml0aW9ucy9zaW1wbGVUeXBlcyJ9LHt0eXBlOiJhcnJheSIsaXRlbXM6eyRyZWY6IiMvZGVmaW5pdGlvbnMvc2ltcGxlVHlwZXMifSxtaW5JdGVtczoxLHVuaXF1ZUl0ZW1zOiEwfV19LGZvcm1hdDp7dHlwZToic3RyaW5nIn0sY29udGVudE1lZGlhVHlwZTp7dHlwZToic3RyaW5nIn0sY29udGVudEVuY29kaW5nOnt0eXBlOiJzdHJpbmcifSxpZjp7JHJlZjoiIyJ9LHRoZW46eyRyZWY6IiMifSxlbHNlOnskcmVmOiIjIn0sYWxsT2Y6eyRyZWY6IiMvZGVmaW5pdGlvbnMvc2NoZW1hQXJyYXkifSxhbnlPZjp7JHJlZjoiIy9kZWZpbml0aW9ucy9zY2hlbWFBcnJheSJ9LG9uZU9mOnskcmVmOiIjL2RlZmluaXRpb25zL3NjaGVtYUFycmF5In0sbm90OnskcmVmOiIjIn19LGRlZmF1bHQ6ITB9fX0scm89e2lkOmUoInNjaGVtYS5qc29uLmlkIiwiQSB1bmlxdWUgaWRlbnRpZmllciBmb3IgdGhlIHNjaGVtYS4iKSwkc2NoZW1hOmUoInNjaGVtYS5qc29uLiRzY2hlbWEiLCJUaGUgc2NoZW1hIHRvIHZlcmlmeSB0aGlzIGRvY3VtZW50IGFnYWluc3QuIiksdGl0bGU6ZSgic2NoZW1hLmpzb24udGl0bGUiLCJBIGRlc2NyaXB0aXZlIHRpdGxlIG9mIHRoZSBlbGVtZW50LiIpLGRlc2NyaXB0aW9uOmUoInNjaGVtYS5qc29uLmRlc2NyaXB0aW9uIiwiQSBsb25nIGRlc2NyaXB0aW9uIG9mIHRoZSBlbGVtZW50LiBVc2VkIGluIGhvdmVyIG1lbnVzIGFuZCBzdWdnZXN0aW9ucy4iKSxkZWZhdWx0OmUoInNjaGVtYS5qc29uLmRlZmF1bHQiLCJBIGRlZmF1bHQgdmFsdWUuIFVzZWQgYnkgc3VnZ2VzdGlvbnMuIiksbXVsdGlwbGVPZjplKCJzY2hlbWEuanNvbi5tdWx0aXBsZU9mIiwiQSBudW1iZXIgdGhhdCBzaG91bGQgY2xlYW5seSBkaXZpZGUgdGhlIGN1cnJlbnQgdmFsdWUgKGkuZS4gaGF2ZSBubyByZW1haW5kZXIpLiIpLG1heGltdW06ZSgic2NoZW1hLmpzb24ubWF4aW11bSIsIlRoZSBtYXhpbXVtIG51bWVyaWNhbCB2YWx1ZSwgaW5jbHVzaXZlIGJ5IGRlZmF1bHQuIiksZXhjbHVzaXZlTWF4aW11bTplKCJzY2hlbWEuanNvbi5leGNsdXNpdmVNYXhpbXVtIiwiTWFrZXMgdGhlIG1heGltdW0gcHJvcGVydHkgZXhjbHVzaXZlLiIpLG1pbmltdW06ZSgic2NoZW1hLmpzb24ubWluaW11bSIsIlRoZSBtaW5pbXVtIG51bWVyaWNhbCB2YWx1ZSwgaW5jbHVzaXZlIGJ5IGRlZmF1bHQuIiksZXhjbHVzaXZlTWluaW11bTplKCJzY2hlbWEuanNvbi5leGNsdXNpdmVNaW5pbnVtIiwiTWFrZXMgdGhlIG1pbmltdW0gcHJvcGVydHkgZXhjbHVzaXZlLiIpLG1heExlbmd0aDplKCJzY2hlbWEuanNvbi5tYXhMZW5ndGgiLCJUaGUgbWF4aW11bSBsZW5ndGggb2YgYSBzdHJpbmcuIiksbWluTGVuZ3RoOmUoInNjaGVtYS5qc29uLm1pbkxlbmd0aCIsIlRoZSBtaW5pbXVtIGxlbmd0aCBvZiBhIHN0cmluZy4iKSxwYXR0ZXJuOmUoInNjaGVtYS5qc29uLnBhdHRlcm4iLCJBIHJlZ3VsYXIgZXhwcmVzc2lvbiB0byBtYXRjaCB0aGUgc3RyaW5nIGFnYWluc3QuIEl0IGlzIG5vdCBpbXBsaWNpdGx5IGFuY2hvcmVkLiIpLGFkZGl0aW9uYWxJdGVtczplKCJzY2hlbWEuanNvbi5hZGRpdGlvbmFsSXRlbXMiLCJGb3IgYXJyYXlzLCBvbmx5IHdoZW4gaXRlbXMgaXMgc2V0IGFzIGFuIGFycmF5LiBJZiBpdCBpcyBhIHNjaGVtYSwgdGhlbiB0aGlzIHNjaGVtYSB2YWxpZGF0ZXMgaXRlbXMgYWZ0ZXIgdGhlIG9uZXMgc3BlY2lmaWVkIGJ5IHRoZSBpdGVtcyBhcnJheS4gSWYgaXQgaXMgZmFsc2UsIHRoZW4gYWRkaXRpb25hbCBpdGVtcyB3aWxsIGNhdXNlIHZhbGlkYXRpb24gdG8gZmFpbC4iKSxpdGVtczplKCJzY2hlbWEuanNvbi5pdGVtcyIsIkZvciBhcnJheXMuIENhbiBlaXRoZXIgYmUgYSBzY2hlbWEgdG8gdmFsaWRhdGUgZXZlcnkgZWxlbWVudCBhZ2FpbnN0IG9yIGFuIGFycmF5IG9mIHNjaGVtYXMgdG8gdmFsaWRhdGUgZWFjaCBpdGVtIGFnYWluc3QgaW4gb3JkZXIgKHRoZSBmaXJzdCBzY2hlbWEgd2lsbCB2YWxpZGF0ZSB0aGUgZmlyc3QgZWxlbWVudCwgdGhlIHNlY29uZCBzY2hlbWEgd2lsbCB2YWxpZGF0ZSB0aGUgc2Vjb25kIGVsZW1lbnQsIGFuZCBzbyBvbi4iKSxtYXhJdGVtczplKCJzY2hlbWEuanNvbi5tYXhJdGVtcyIsIlRoZSBtYXhpbXVtIG51bWJlciBvZiBpdGVtcyB0aGF0IGNhbiBiZSBpbnNpZGUgYW4gYXJyYXkuIEluY2x1c2l2ZS4iKSxtaW5JdGVtczplKCJzY2hlbWEuanNvbi5taW5JdGVtcyIsIlRoZSBtaW5pbXVtIG51bWJlciBvZiBpdGVtcyB0aGF0IGNhbiBiZSBpbnNpZGUgYW4gYXJyYXkuIEluY2x1c2l2ZS4iKSx1bmlxdWVJdGVtczplKCJzY2hlbWEuanNvbi51bmlxdWVJdGVtcyIsIklmIGFsbCBvZiB0aGUgaXRlbXMgaW4gdGhlIGFycmF5IG11c3QgYmUgdW5pcXVlLiBEZWZhdWx0cyB0byBmYWxzZS4iKSxtYXhQcm9wZXJ0aWVzOmUoInNjaGVtYS5qc29uLm1heFByb3BlcnRpZXMiLCJUaGUgbWF4aW11bSBudW1iZXIgb2YgcHJvcGVydGllcyBhbiBvYmplY3QgY2FuIGhhdmUuIEluY2x1c2l2ZS4iKSxtaW5Qcm9wZXJ0aWVzOmUoInNjaGVtYS5qc29uLm1pblByb3BlcnRpZXMiLCJUaGUgbWluaW11bSBudW1iZXIgb2YgcHJvcGVydGllcyBhbiBvYmplY3QgY2FuIGhhdmUuIEluY2x1c2l2ZS4iKSxyZXF1aXJlZDplKCJzY2hlbWEuanNvbi5yZXF1aXJlZCIsIkFuIGFycmF5IG9mIHN0cmluZ3MgdGhhdCBsaXN0cyB0aGUgbmFtZXMgb2YgYWxsIHByb3BlcnRpZXMgcmVxdWlyZWQgb24gdGhpcyBvYmplY3QuIiksYWRkaXRpb25hbFByb3BlcnRpZXM6ZSgic2NoZW1hLmpzb24uYWRkaXRpb25hbFByb3BlcnRpZXMiLCJFaXRoZXIgYSBzY2hlbWEgb3IgYSBib29sZWFuLiBJZiBhIHNjaGVtYSwgdGhlbiB1c2VkIHRvIHZhbGlkYXRlIGFsbCBwcm9wZXJ0aWVzIG5vdCBtYXRjaGVkIGJ5ICdwcm9wZXJ0aWVzJyBvciAncGF0dGVyblByb3BlcnRpZXMnLiBJZiBmYWxzZSwgdGhlbiBhbnkgcHJvcGVydGllcyBub3QgbWF0Y2hlZCBieSBlaXRoZXIgd2lsbCBjYXVzZSB0aGlzIHNjaGVtYSB0byBmYWlsLiIpLGRlZmluaXRpb25zOmUoInNjaGVtYS5qc29uLmRlZmluaXRpb25zIiwiTm90IHVzZWQgZm9yIHZhbGlkYXRpb24uIFBsYWNlIHN1YnNjaGVtYXMgaGVyZSB0aGF0IHlvdSB3aXNoIHRvIHJlZmVyZW5jZSBpbmxpbmUgd2l0aCAkcmVmLiIpLHByb3BlcnRpZXM6ZSgic2NoZW1hLmpzb24ucHJvcGVydGllcyIsIkEgbWFwIG9mIHByb3BlcnR5IG5hbWVzIHRvIHNjaGVtYXMgZm9yIGVhY2ggcHJvcGVydHkuIikscGF0dGVyblByb3BlcnRpZXM6ZSgic2NoZW1hLmpzb24ucGF0dGVyblByb3BlcnRpZXMiLCJBIG1hcCBvZiByZWd1bGFyIGV4cHJlc3Npb25zIG9uIHByb3BlcnR5IG5hbWVzIHRvIHNjaGVtYXMgZm9yIG1hdGNoaW5nIHByb3BlcnRpZXMuIiksZGVwZW5kZW5jaWVzOmUoInNjaGVtYS5qc29uLmRlcGVuZGVuY2llcyIsIkEgbWFwIG9mIHByb3BlcnR5IG5hbWVzIHRvIGVpdGhlciBhbiBhcnJheSBvZiBwcm9wZXJ0eSBuYW1lcyBvciBhIHNjaGVtYS4gQW4gYXJyYXkgb2YgcHJvcGVydHkgbmFtZXMgbWVhbnMgdGhlIHByb3BlcnR5IG5hbWVkIGluIHRoZSBrZXkgZGVwZW5kcyBvbiB0aGUgcHJvcGVydGllcyBpbiB0aGUgYXJyYXkgYmVpbmcgcHJlc2VudCBpbiB0aGUgb2JqZWN0IGluIG9yZGVyIHRvIGJlIHZhbGlkLiBJZiB0aGUgdmFsdWUgaXMgYSBzY2hlbWEsIHRoZW4gdGhlIHNjaGVtYSBpcyBvbmx5IGFwcGxpZWQgdG8gdGhlIG9iamVjdCBpZiB0aGUgcHJvcGVydHkgaW4gdGhlIGtleSBleGlzdHMgb24gdGhlIG9iamVjdC4iKSxlbnVtOmUoInNjaGVtYS5qc29uLmVudW0iLCJUaGUgc2V0IG9mIGxpdGVyYWwgdmFsdWVzIHRoYXQgYXJlIHZhbGlkLiIpLHR5cGU6ZSgic2NoZW1hLmpzb24udHlwZSIsIkVpdGhlciBhIHN0cmluZyBvZiBvbmUgb2YgdGhlIGJhc2ljIHNjaGVtYSB0eXBlcyAobnVtYmVyLCBpbnRlZ2VyLCBudWxsLCBhcnJheSwgb2JqZWN0LCBib29sZWFuLCBzdHJpbmcpIG9yIGFuIGFycmF5IG9mIHN0cmluZ3Mgc3BlY2lmeWluZyBhIHN1YnNldCBvZiB0aG9zZSB0eXBlcy4iKSxmb3JtYXQ6ZSgic2NoZW1hLmpzb24uZm9ybWF0IiwiRGVzY3JpYmVzIHRoZSBmb3JtYXQgZXhwZWN0ZWQgZm9yIHRoZSB2YWx1ZS4iKSxhbGxPZjplKCJzY2hlbWEuanNvbi5hbGxPZiIsIkFuIGFycmF5IG9mIHNjaGVtYXMsIGFsbCBvZiB3aGljaCBtdXN0IG1hdGNoLiIpLGFueU9mOmUoInNjaGVtYS5qc29uLmFueU9mIiwiQW4gYXJyYXkgb2Ygc2NoZW1hcywgd2hlcmUgYXQgbGVhc3Qgb25lIG11c3QgbWF0Y2guIiksb25lT2Y6ZSgic2NoZW1hLmpzb24ub25lT2YiLCJBbiBhcnJheSBvZiBzY2hlbWFzLCBleGFjdGx5IG9uZSBvZiB3aGljaCBtdXN0IG1hdGNoLiIpLG5vdDplKCJzY2hlbWEuanNvbi5ub3QiLCJBIHNjaGVtYSB3aGljaCBtdXN0IG5vdCBtYXRjaC4iKSwkaWQ6ZSgic2NoZW1hLmpzb24uJGlkIiwiQSB1bmlxdWUgaWRlbnRpZmllciBmb3IgdGhlIHNjaGVtYS4iKSwkcmVmOmUoInNjaGVtYS5qc29uLiRyZWYiLCJSZWZlcmVuY2UgYSBkZWZpbml0aW9uIGhvc3RlZCBvbiBhbnkgbG9jYXRpb24uIiksJGNvbW1lbnQ6ZSgic2NoZW1hLmpzb24uJGNvbW1lbnQiLCJDb21tZW50cyBmcm9tIHNjaGVtYSBhdXRob3JzIHRvIHJlYWRlcnMgb3IgbWFpbnRhaW5lcnMgb2YgdGhlIHNjaGVtYS4iKSxyZWFkT25seTplKCJzY2hlbWEuanNvbi5yZWFkT25seSIsIkluZGljYXRlcyB0aGF0IHRoZSB2YWx1ZSBvZiB0aGUgaW5zdGFuY2UgaXMgbWFuYWdlZCBleGNsdXNpdmVseSBieSB0aGUgb3duaW5nIGF1dGhvcml0eS4iKSxleGFtcGxlczplKCJzY2hlbWEuanNvbi5leGFtcGxlcyIsIlNhbXBsZSBKU09OIHZhbHVlcyBhc3NvY2lhdGVkIHdpdGggYSBwYXJ0aWN1bGFyIHNjaGVtYSwgZm9yIHRoZSBwdXJwb3NlIG9mIGlsbHVzdHJhdGluZyB1c2FnZS4iKSxjb250YWluczplKCJzY2hlbWEuanNvbi5jb250YWlucyIsJ0FuIGFycmF5IGluc3RhbmNlIGlzIHZhbGlkIGFnYWluc3QgImNvbnRhaW5zIiBpZiBhdCBsZWFzdCBvbmUgb2YgaXRzIGVsZW1lbnRzIGlzIHZhbGlkIGFnYWluc3QgdGhlIGdpdmVuIHNjaGVtYS4nKSxwcm9wZXJ0eU5hbWVzOmUoInNjaGVtYS5qc29uLnByb3BlcnR5TmFtZXMiLCJJZiB0aGUgaW5zdGFuY2UgaXMgYW4gb2JqZWN0LCB0aGlzIGtleXdvcmQgdmFsaWRhdGVzIGlmIGV2ZXJ5IHByb3BlcnR5IG5hbWUgaW4gdGhlIGluc3RhbmNlIHZhbGlkYXRlcyBhZ2FpbnN0IHRoZSBwcm92aWRlZCBzY2hlbWEuIiksY29uc3Q6ZSgic2NoZW1hLmpzb24uY29uc3QiLCJBbiBpbnN0YW5jZSB2YWxpZGF0ZXMgc3VjY2Vzc2Z1bGx5IGFnYWluc3QgdGhpcyBrZXl3b3JkIGlmIGl0cyB2YWx1ZSBpcyBlcXVhbCB0byB0aGUgdmFsdWUgb2YgdGhlIGtleXdvcmQuIiksY29udGVudE1lZGlhVHlwZTplKCJzY2hlbWEuanNvbi5jb250ZW50TWVkaWFUeXBlIiwiRGVzY3JpYmVzIHRoZSBtZWRpYSB0eXBlIG9mIGEgc3RyaW5nIHByb3BlcnR5LiIpLGNvbnRlbnRFbmNvZGluZzplKCJzY2hlbWEuanNvbi5jb250ZW50RW5jb2RpbmciLCJEZXNjcmliZXMgdGhlIGNvbnRlbnQgZW5jb2Rpbmcgb2YgYSBzdHJpbmcgcHJvcGVydHkuIiksaWY6ZSgic2NoZW1hLmpzb24uaWYiLCdUaGUgdmFsaWRhdGlvbiBvdXRjb21lIG9mIHRoZSAiaWYiIHN1YnNjaGVtYSBjb250cm9scyB3aGljaCBvZiB0aGUgInRoZW4iIG9yICJlbHNlIiBrZXl3b3JkcyBhcmUgZXZhbHVhdGVkLicpLHRoZW46ZSgic2NoZW1hLmpzb24udGhlbiIsJ1RoZSAiaWYiIHN1YnNjaGVtYSBpcyB1c2VkIGZvciB2YWxpZGF0aW9uIHdoZW4gdGhlICJpZiIgc3Vic2NoZW1hIHN1Y2NlZWRzLicpLGVsc2U6ZSgic2NoZW1hLmpzb24uZWxzZSIsJ1RoZSAiZWxzZSIgc3Vic2NoZW1hIGlzIHVzZWQgZm9yIHZhbGlkYXRpb24gd2hlbiB0aGUgImlmIiBzdWJzY2hlbWEgZmFpbHMuJyl9O2ZvcihRaSBpbiB0by5zY2hlbWFzKWZvcihYaSBpbihKaT10by5zY2hlbWFzW1FpXSkucHJvcGVydGllcykiYm9vbGVhbiI9PXR5cGVvZihHaT1KaS5wcm9wZXJ0aWVzW1hpXSkmJihHaT1KaS5wcm9wZXJ0aWVzW1hpXT17fSksKFppPXJvW1hpXSk/R2kuZGVzY3JpcHRpb249Wmk6Y29uc29sZS5sb2coIiIuY29uY2F0KFhpLCI6IGxvY2FsaXplKCdzY2hlbWEuanNvbi4iKS5jb25jYXQoWGksYCcsICIiKWApKTtmdW5jdGlvbiBubyhlKXtpZihlb1tlXSlyZXR1cm4gZW9bZV0uZXhwb3J0czt2YXIgdD1lb1tlXT17ZXhwb3J0czp7fX07cmV0dXJuIFlpW2VdKHQsdC5leHBvcnRzLG5vKSx0LmV4cG9ydHN9WWk9ezQ3MDplPT57ZnVuY3Rpb24gZihlKXtpZigic3RyaW5nIiE9dHlwZW9mIGUpdGhyb3cgbmV3IFR5cGVFcnJvcigiUGF0aCBtdXN0IGJlIGEgc3RyaW5nLiBSZWNlaXZlZCAiK0pTT04uc3RyaW5naWZ5KGUpKX1mdW5jdGlvbiBvKGUsdCl7Zm9yKHZhciByLG49IiIsaT0wLG89LTEsYT0wLHM9MDtzPD1lLmxlbmd0aDsrK3Mpe2lmKHM8ZS5sZW5ndGgpcj1lLmNoYXJDb2RlQXQocyk7ZWxzZXtpZig0Nz09PXIpYnJlYWs7cj00N31pZig0Nz09PXIpe2lmKG8hPT1zLTEmJjEhPT1hKWlmKG8hPT1zLTEmJjI9PT1hKXtpZihuLmxlbmd0aDwyfHwyIT09aXx8NDYhPT1uLmNoYXJDb2RlQXQobi5sZW5ndGgtMSl8fDQ2IT09bi5jaGFyQ29kZUF0KG4ubGVuZ3RoLTIpKWlmKDI8bi5sZW5ndGgpe3ZhciBsPW4ubGFzdEluZGV4T2YoIi8iKTtpZihsIT09bi5sZW5ndGgtMSl7aT0tMT09PWw/KG49IiIsMCk6KG49bi5zbGljZSgwLGwpKS5sZW5ndGgtMS1uLmxhc3RJbmRleE9mKCIvIiksbz1zLGE9MDtjb250aW51ZX19ZWxzZSBpZigyPT09bi5sZW5ndGh8fDE9PT1uLmxlbmd0aCl7bj0iIixvPXMsYT1pPTA7Y29udGludWV9dCYmKDA8bi5sZW5ndGg/bis9Ii8uLiI6bj0iLi4iLGk9Mil9ZWxzZSAwPG4ubGVuZ3RoP24rPSIvIitlLnNsaWNlKG8rMSxzKTpuPWUuc2xpY2UobysxLHMpLGk9cy1vLTE7bz1zLGE9MH1lbHNlIDQ2PT09ciYmLTEhPT1hPysrYTphPS0xfXJldHVybiBufXZhciBkPXtyZXNvbHZlOmZ1bmN0aW9uKCl7Zm9yKHZhciBlLHQ9IiIscj0hMSxuPWFyZ3VtZW50cy5sZW5ndGgtMTstMTw9biYmIXI7bi0tKXt2YXIgaT0wPD1uP2FyZ3VtZW50c1tuXTplPXZvaWQgMD09PWU/cHJvY2Vzcy5jd2QoKTplO2YoaSksMCE9PWkubGVuZ3RoJiYodD1pKyIvIit0LHI9NDc9PT1pLmNoYXJDb2RlQXQoMCkpfXJldHVybiB0PW8odCwhcikscj8wPHQubGVuZ3RoPyIvIit0OiIvIjowPHQubGVuZ3RoP3Q6Ii4ifSxub3JtYWxpemU6ZnVuY3Rpb24oZSl7aWYoZihlKSwwPT09ZS5sZW5ndGgpcmV0dXJuIi4iO3ZhciB0PTQ3PT09ZS5jaGFyQ29kZUF0KDApLHI9NDc9PT1lLmNoYXJDb2RlQXQoZS5sZW5ndGgtMSk7cmV0dXJuIDA8KGU9MCE9PShlPW8oZSwhdCkpLmxlbmd0aHx8dD9lOiIuIikubGVuZ3RoJiZyJiYoZSs9Ii8iKSx0PyIvIitlOmV9LGlzQWJzb2x1dGU6ZnVuY3Rpb24oZSl7cmV0dXJuIGYoZSksMDxlLmxlbmd0aCYmNDc9PT1lLmNoYXJDb2RlQXQoMCl9LGpvaW46ZnVuY3Rpb24oKXtpZigwPT09YXJndW1lbnRzLmxlbmd0aClyZXR1cm4iLiI7Zm9yKHZhciBlLHQ9MDt0PGFyZ3VtZW50cy5sZW5ndGg7Kyt0KXt2YXIgcj1hcmd1bWVudHNbdF07ZihyKSwwPHIubGVuZ3RoJiYodm9pZCAwPT09ZT9lPXI6ZSs9Ii8iK3IpfXJldHVybiB2b2lkIDA9PT1lPyIuIjpkLm5vcm1hbGl6ZShlKX0scmVsYXRpdmU6ZnVuY3Rpb24oZSx0KXtpZihmKGUpLGYodCksZT09PXQpcmV0dXJuIiI7aWYoKGU9ZC5yZXNvbHZlKGUpKT09PSh0PWQucmVzb2x2ZSh0KSkpcmV0dXJuIiI7Zm9yKHZhciByPTE7cjxlLmxlbmd0aCYmNDc9PT1lLmNoYXJDb2RlQXQocik7KytyKTtmb3IodmFyIG49ZS5sZW5ndGgsaT1uLXIsbz0xO288dC5sZW5ndGgmJjQ3PT09dC5jaGFyQ29kZUF0KG8pOysrbyk7Zm9yKHZhciB1PXQubGVuZ3RoLW8sYT1pPHU/aTp1LHM9LTEsbD0wO2w8PWE7KytsKXtpZihsPT09YSl7aWYoYTx1KXtpZig0Nz09PXQuY2hhckNvZGVBdChvK2wpKXJldHVybiB0LnNsaWNlKG8rbCsxKTtpZigwPT09bClyZXR1cm4gdC5zbGljZShvK2wpfWVsc2UgYTxpJiYoNDc9PT1lLmNoYXJDb2RlQXQocitsKT9zPWw6MD09PWwmJihzPTApKTticmVha312YXIgaD1lLmNoYXJDb2RlQXQocitsKTtpZihoIT09dC5jaGFyQ29kZUF0KG8rbCkpYnJlYWs7NDc9PT1oJiYocz1sKX1mb3IodmFyIGM9IiIsbD1yK3MrMTtsPD1uOysrbClsIT09biYmNDchPT1lLmNoYXJDb2RlQXQobCl8fCgwPT09Yy5sZW5ndGg/Yys9Ii4uIjpjKz0iLy4uIik7cmV0dXJuIDA8Yy5sZW5ndGg/Yyt0LnNsaWNlKG8rcyk6KDQ3PT09dC5jaGFyQ29kZUF0KG8rPXMpJiYrK28sdC5zbGljZShvKSl9LF9tYWtlTG9uZzpmdW5jdGlvbihlKXtyZXR1cm4gZX0sZGlybmFtZTpmdW5jdGlvbihlKXtpZihmKGUpLDA9PT1lLmxlbmd0aClyZXR1cm4iLiI7Zm9yKHZhciB0PTQ3PT09ZS5jaGFyQ29kZUF0KDApLHI9LTEsbj0hMCxpPWUubGVuZ3RoLTE7MTw9aTstLWkpaWYoNDc9PT1lLmNoYXJDb2RlQXQoaSkpe2lmKCFuKXtyPWk7YnJlYWt9fWVsc2Ugbj0hMTtyZXR1cm4tMT09PXI/dD8iLyI6Ii4iOnQmJjE9PT1yPyIvLyI6ZS5zbGljZSgwLHIpfSxiYXNlbmFtZTpmdW5jdGlvbihlLHQpe2lmKHZvaWQgMCE9PXQmJiJzdHJpbmciIT10eXBlb2YgdCl0aHJvdyBuZXcgVHlwZUVycm9yKCciZXh0IiBhcmd1bWVudCBtdXN0IGJlIGEgc3RyaW5nJyk7ZihlKTt2YXIgcj0wLG49LTEsaT0hMDtpZih2b2lkIDAhPT10JiYwPHQubGVuZ3RoJiZ0Lmxlbmd0aDw9ZS5sZW5ndGgpe2lmKHQubGVuZ3RoPT09ZS5sZW5ndGgmJnQ9PT1lKXJldHVybiIiO2Zvcih2YXIgbz10Lmxlbmd0aC0xLGE9LTEscz1lLmxlbmd0aC0xOzA8PXM7LS1zKXt2YXIgbD1lLmNoYXJDb2RlQXQocyk7aWYoNDc9PT1sKXtpZighaSl7cj1zKzE7YnJlYWt9fWVsc2UtMT09PWEmJihpPSExLGE9cysxKSwwPD1vJiYobD09PXQuY2hhckNvZGVBdChvKT8tMT09LS1vJiYobj1zKToobz0tMSxuPWEpKX1yZXR1cm4gcj09PW4/bj1hOi0xPT09biYmKG49ZS5sZW5ndGgpLGUuc2xpY2UocixuKX1mb3Iocz1lLmxlbmd0aC0xOzA8PXM7LS1zKWlmKDQ3PT09ZS5jaGFyQ29kZUF0KHMpKXtpZighaSl7cj1zKzE7YnJlYWt9fWVsc2UtMT09PW4mJihpPSExLG49cysxKTtyZXR1cm4tMT09PW4/IiI6ZS5zbGljZShyLG4pfSxleHRuYW1lOmZ1bmN0aW9uKGUpe2YoZSk7Zm9yKHZhciB0PS0xLHI9MCxuPS0xLGk9ITAsbz0wLGE9ZS5sZW5ndGgtMTswPD1hOy0tYSl7dmFyIHM9ZS5jaGFyQ29kZUF0KGEpO2lmKDQ3IT09cyktMT09PW4mJihpPSExLG49YSsxKSw0Nj09PXM/LTE9PT10P3Q9YToxIT09byYmKG89MSk6LTEhPT10JiYobz0tMSk7ZWxzZSBpZighaSl7cj1hKzE7YnJlYWt9fXJldHVybi0xPT09dHx8LTE9PT1ufHwwPT09b3x8MT09PW8mJnQ9PT1uLTEmJnQ9PT1yKzE/IiI6ZS5zbGljZSh0LG4pfSxmb3JtYXQ6ZnVuY3Rpb24oZSl7aWYobnVsbD09PWV8fCJvYmplY3QiIT10eXBlb2YgZSl0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgInBhdGhPYmplY3QiIGFyZ3VtZW50IG11c3QgYmUgb2YgdHlwZSBPYmplY3QuIFJlY2VpdmVkIHR5cGUgJyt0eXBlb2YgZSk7cmV0dXJuIHQ9ZS5kaXJ8fGUucm9vdCxyPWUuYmFzZXx8KGUubmFtZXx8IiIpKyhlLmV4dHx8IiIpLHQ/dD09PWUucm9vdD90K3I6dCsiLyIrcjpyO3ZhciB0LHJ9LHBhcnNlOmZ1bmN0aW9uKGUpe2YoZSk7dmFyIHQ9e3Jvb3Q6IiIsZGlyOiIiLGJhc2U6IiIsZXh0OiIiLG5hbWU6IiJ9O2lmKDA9PT1lLmxlbmd0aClyZXR1cm4gdDtmb3IodmFyIHIsbj00Nz09PWUuY2hhckNvZGVBdCgwKSx1PW4/KHQucm9vdD0iLyIsMSk6MCxpPS0xLG89MCxhPS0xLHM9ITAsbD1lLmxlbmd0aC0xLGM9MDt1PD1sOy0tbClpZig0NyE9PShyPWUuY2hhckNvZGVBdChsKSkpLTE9PT1hJiYocz0hMSxhPWwrMSksNDY9PT1yPy0xPT09aT9pPWw6MSE9PWMmJihjPTEpOi0xIT09aSYmKGM9LTEpO2Vsc2UgaWYoIXMpe289bCsxO2JyZWFrfXJldHVybi0xPT09aXx8LTE9PT1hfHwwPT09Y3x8MT09PWMmJmk9PT1hLTEmJmk9PT1vKzE/LTEhPT1hJiYodC5iYXNlPXQubmFtZT0wPT09byYmbj9lLnNsaWNlKDEsYSk6ZS5zbGljZShvLGEpKTooMD09PW8mJm4/KHQubmFtZT1lLnNsaWNlKDEsaSksdC5iYXNlPWUuc2xpY2UoMSxhKSk6KHQubmFtZT1lLnNsaWNlKG8saSksdC5iYXNlPWUuc2xpY2UobyxhKSksdC5leHQ9ZS5zbGljZShpLGEpKSwwPG8/dC5kaXI9ZS5zbGljZSgwLG8tMSk6biYmKHQuZGlyPSIvIiksdH0sc2VwOiIvIixkZWxpbWl0ZXI6IjoiLHdpbjMyOm51bGwscG9zaXg6bnVsbH07ZC5wb3NpeD1kLGUuZXhwb3J0cz1kfSw0NDc6KHUsZSx0KT0+e3ZhciBuO3QucihlKSx0LmQoZSx7VVJJOigpPT5wLFV0aWxzOigpPT5sfSksIm9iamVjdCI9PXR5cGVvZiBwcm9jZXNzP249IndpbjMyIj09PXByb2Nlc3MucGxhdGZvcm06Im9iamVjdCI9PXR5cGVvZiBuYXZpZ2F0b3ImJihuPTA8PW5hdmlnYXRvci51c2VyQWdlbnQuaW5kZXhPZigiV2luZG93cyIpKTtvPWZ1bmN0aW9uKGUsdCl7cmV0dXJuKG89T2JqZWN0LnNldFByb3RvdHlwZU9mfHx7X19wcm90b19fOltdfWluc3RhbmNlb2YgQXJyYXkmJmZ1bmN0aW9uKGUsdCl7ZS5fX3Byb3RvX189dH18fGZ1bmN0aW9uKGUsdCl7Zm9yKHZhciByIGluIHQpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQscikmJihlW3JdPXRbcl0pfSkoZSx0KX07dmFyIG8saD0vXlx3W1x3XGQrLi1dKiQvLGY9L15cLy8sZD0vXlwvXC8vO2Z1bmN0aW9uIG0oZSx0KXtpZighZS5zY2hlbWUmJnQpdGhyb3cgbmV3IEVycm9yKCdbVXJpRXJyb3JdOiBTY2hlbWUgaXMgbWlzc2luZzoge3NjaGVtZTogIiIsIGF1dGhvcml0eTogIicuY29uY2F0KGUuYXV0aG9yaXR5LCciLCBwYXRoOiAiJykuY29uY2F0KGUucGF0aCwnIiwgcXVlcnk6ICInKS5jb25jYXQoZS5xdWVyeSwnIiwgZnJhZ21lbnQ6ICInKS5jb25jYXQoZS5mcmFnbWVudCwnIn0nKSk7aWYoZS5zY2hlbWUmJiFoLnRlc3QoZS5zY2hlbWUpKXRocm93IG5ldyBFcnJvcigiW1VyaUVycm9yXTogU2NoZW1lIGNvbnRhaW5zIGlsbGVnYWwgY2hhcmFjdGVycy4iKTtpZihlLnBhdGgpaWYoZS5hdXRob3JpdHkpe2lmKCFmLnRlc3QoZS5wYXRoKSl0aHJvdyBuZXcgRXJyb3IoJ1tVcmlFcnJvcl06IElmIGEgVVJJIGNvbnRhaW5zIGFuIGF1dGhvcml0eSBjb21wb25lbnQsIHRoZW4gdGhlIHBhdGggY29tcG9uZW50IG11c3QgZWl0aGVyIGJlIGVtcHR5IG9yIGJlZ2luIHdpdGggYSBzbGFzaCAoIi8iKSBjaGFyYWN0ZXInKX1lbHNlIGlmKGQudGVzdChlLnBhdGgpKXRocm93IG5ldyBFcnJvcignW1VyaUVycm9yXTogSWYgYSBVUkkgZG9lcyBub3QgY29udGFpbiBhbiBhdXRob3JpdHkgY29tcG9uZW50LCB0aGVuIHRoZSBwYXRoIGNhbm5vdCBiZWdpbiB3aXRoIHR3byBzbGFzaCBjaGFyYWN0ZXJzICgiLy8iKScpfXZhciBnPS9eKChbXjovPyNdKz8pOik/KFwvXC8oW14vPyNdKikpPyhbXj8jXSopKFw/KFteI10qKSk/KCMoLiopKT8vLHA9KHIuaXNVcmk9ZnVuY3Rpb24oZSl7cmV0dXJuIGUgaW5zdGFuY2VvZiByfHwhIWUmJiJzdHJpbmciPT10eXBlb2YgZS5hdXRob3JpdHkmJiJzdHJpbmciPT10eXBlb2YgZS5mcmFnbWVudCYmInN0cmluZyI9PXR5cGVvZiBlLnBhdGgmJiJzdHJpbmciPT10eXBlb2YgZS5xdWVyeSYmInN0cmluZyI9PXR5cGVvZiBlLnNjaGVtZSYmInN0cmluZyI9PXR5cGVvZiBlLmZzUGF0aCYmImZ1bmN0aW9uIj09dHlwZW9mIGUud2l0aCYmImZ1bmN0aW9uIj09dHlwZW9mIGUudG9TdHJpbmd9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eShyLnByb3RvdHlwZSwiZnNQYXRoIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHcodGhpcywhMSl9LGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEwfSksci5wcm90b3R5cGUud2l0aD1mdW5jdGlvbihlKXtpZighZSlyZXR1cm4gdGhpczt2YXIgdD1lLnNjaGVtZSxyPWUuYXV0aG9yaXR5LG49ZS5wYXRoLGk9ZS5xdWVyeSxlPWUuZnJhZ21lbnQ7cmV0dXJuIHZvaWQgMD09PXQ/dD10aGlzLnNjaGVtZTpudWxsPT09dCYmKHQ9IiIpLHZvaWQgMD09PXI/cj10aGlzLmF1dGhvcml0eTpudWxsPT09ciYmKHI9IiIpLHZvaWQgMD09PW4/bj10aGlzLnBhdGg6bnVsbD09PW4mJihuPSIiKSx2b2lkIDA9PT1pP2k9dGhpcy5xdWVyeTpudWxsPT09aSYmKGk9IiIpLHZvaWQgMD09PWU/ZT10aGlzLmZyYWdtZW50Om51bGw9PT1lJiYoZT0iIiksdD09PXRoaXMuc2NoZW1lJiZyPT09dGhpcy5hdXRob3JpdHkmJm49PT10aGlzLnBhdGgmJmk9PT10aGlzLnF1ZXJ5JiZlPT09dGhpcy5mcmFnbWVudD90aGlzOm5ldyBhKHQscixuLGksZSl9LHIucGFyc2U9ZnVuY3Rpb24oZSx0KXt2b2lkIDA9PT10JiYodD0hMSk7ZT1nLmV4ZWMoZSk7cmV0dXJuIGU/bmV3IGEoZVsyXXx8IiIsaShlWzRdfHwiIiksaShlWzVdfHwiIiksaShlWzddfHwiIiksaShlWzldfHwiIiksdCk6bmV3IGEoIiIsIiIsIiIsIiIsIiIpfSxyLmZpbGU9ZnVuY3Rpb24oZSl7dmFyIHQscj0iIjtyZXR1cm4iLyI9PT0oZT1uP2UucmVwbGFjZSgvXFwvZywiLyIpOmUpWzBdJiYiLyI9PT1lWzFdJiYoZT0tMT09PSh0PWUuaW5kZXhPZigiLyIsMikpPyhyPWUuc3Vic3RyaW5nKDIpLCIvIik6KHI9ZS5zdWJzdHJpbmcoMix0KSxlLnN1YnN0cmluZyh0KXx8Ii8iKSksbmV3IGEoImZpbGUiLHIsZSwiIiwiIil9LHIuZnJvbT1mdW5jdGlvbihlKXtlPW5ldyBhKGUuc2NoZW1lLGUuYXV0aG9yaXR5LGUucGF0aCxlLnF1ZXJ5LGUuZnJhZ21lbnQpO3JldHVybiBtKGUsITApLGV9LHIucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKGUpe3JldHVybiBzKHRoaXMsZT12b2lkIDA9PT1lPyExOmUpfSxyLnByb3RvdHlwZS50b0pTT049ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30sci5yZXZpdmU9ZnVuY3Rpb24oZSl7aWYoZSl7aWYoZSBpbnN0YW5jZW9mIHIpcmV0dXJuIGU7dmFyIHQ9bmV3IGEoZSk7cmV0dXJuIHQuX2Zvcm1hdHRlZD1lLmV4dGVybmFsLHQuX2ZzUGF0aD1lLl9zZXA9PT1iP2UuZnNQYXRoOm51bGwsdH1yZXR1cm4gZX0sciksYj1uPzE6dm9pZCAwLGE9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3ZhciBlPW51bGwhPT10JiZ0LmFwcGx5KHRoaXMsYXJndW1lbnRzKXx8dGhpcztyZXR1cm4gZS5fZm9ybWF0dGVkPW51bGwsZS5fZnNQYXRoPW51bGwsZX12YXIgcj1lLG49dDtpZigiZnVuY3Rpb24iIT10eXBlb2YgbiYmbnVsbCE9PW4pdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2xhc3MgZXh0ZW5kcyB2YWx1ZSAiK1N0cmluZyhuKSsiIGlzIG5vdCBhIGNvbnN0cnVjdG9yIG9yIG51bGwiKTtmdW5jdGlvbiBpKCl7dGhpcy5jb25zdHJ1Y3Rvcj1yfXJldHVybiBvKHIsbiksci5wcm90b3R5cGU9bnVsbD09PW4/T2JqZWN0LmNyZWF0ZShuKTooaS5wcm90b3R5cGU9bi5wcm90b3R5cGUsbmV3IGkpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwiZnNQYXRoIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2ZzUGF0aHx8KHRoaXMuX2ZzUGF0aD13KHRoaXMsITEpKSx0aGlzLl9mc1BhdGh9LGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEwfSksZS5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oZSl7cmV0dXJuKGU9dm9pZCAwPT09ZT8hMTplKT9zKHRoaXMsITApOih0aGlzLl9mb3JtYXR0ZWR8fCh0aGlzLl9mb3JtYXR0ZWQ9cyh0aGlzLCExKSksdGhpcy5fZm9ybWF0dGVkKX0sZS5wcm90b3R5cGUudG9KU09OPWZ1bmN0aW9uKCl7dmFyIGU9eyRtaWQ6MX07cmV0dXJuIHRoaXMuX2ZzUGF0aCYmKGUuZnNQYXRoPXRoaXMuX2ZzUGF0aCxlLl9zZXA9YiksdGhpcy5fZm9ybWF0dGVkJiYoZS5leHRlcm5hbD10aGlzLl9mb3JtYXR0ZWQpLHRoaXMucGF0aCYmKGUucGF0aD10aGlzLnBhdGgpLHRoaXMuc2NoZW1lJiYoZS5zY2hlbWU9dGhpcy5zY2hlbWUpLHRoaXMuYXV0aG9yaXR5JiYoZS5hdXRob3JpdHk9dGhpcy5hdXRob3JpdHkpLHRoaXMucXVlcnkmJihlLnF1ZXJ5PXRoaXMucXVlcnkpLHRoaXMuZnJhZ21lbnQmJihlLmZyYWdtZW50PXRoaXMuZnJhZ21lbnQpLGV9LGV9KHApLHY9KChlPXt9KVs1OF09IiUzQSIsZVs0N109IiUyRiIsZVs2M109IiUzRiIsZVszNV09IiUyMyIsZVs5MV09IiU1QiIsZVs5M109IiU1RCIsZVs2NF09IiU0MCIsZVszM109IiUyMSIsZVszNl09IiUyNCIsZVszOF09IiUyNiIsZVszOV09IiUyNyIsZVs0MF09IiUyOCIsZVs0MV09IiUyOSIsZVs0Ml09IiUyQSIsZVs0M109IiUyQiIsZVs0NF09IiUyQyIsZVs1OV09IiUzQiIsZVs2MV09IiUzRCIsZVszMl09IiUyMCIsZSk7ZnVuY3Rpb24gcihlLHQscixuLGksbyl7dm9pZCAwPT09byYmKG89ITEpLCJvYmplY3QiPT10eXBlb2YgZT8odGhpcy5zY2hlbWU9ZS5zY2hlbWV8fCIiLHRoaXMuYXV0aG9yaXR5PWUuYXV0aG9yaXR5fHwiIix0aGlzLnBhdGg9ZS5wYXRofHwiIix0aGlzLnF1ZXJ5PWUucXVlcnl8fCIiLHRoaXMuZnJhZ21lbnQ9ZS5mcmFnbWVudHx8IiIpOih0aGlzLnNjaGVtZT1lfHxvP2U6ImZpbGUiLHRoaXMuYXV0aG9yaXR5PXR8fCIiLHRoaXMucGF0aD1mdW5jdGlvbihlLHQpe3N3aXRjaChlKXtjYXNlImh0dHBzIjpjYXNlImh0dHAiOmNhc2UiZmlsZSI6dD8iLyIhPT10WzBdJiYodD0iLyIrdCk6dD0iLyJ9cmV0dXJuIHR9KHRoaXMuc2NoZW1lLHJ8fCIiKSx0aGlzLnF1ZXJ5PW58fCIiLHRoaXMuZnJhZ21lbnQ9aXx8IiIsbSh0aGlzLG8pKX1mdW5jdGlvbiB5KGUsdCl7Zm9yKHZhciByPXZvaWQgMCxuPS0xLGk9MDtpPGUubGVuZ3RoO2krKyl7dmFyIG89ZS5jaGFyQ29kZUF0KGkpOzk3PD1vJiZvPD0xMjJ8fDY1PD1vJiZvPD05MHx8NDg8PW8mJm88PTU3fHw0NT09PW98fDQ2PT09b3x8OTU9PT1vfHwxMjY9PT1vfHx0JiY0Nz09PW8/KC0xIT09biYmKHIrPWVuY29kZVVSSUNvbXBvbmVudChlLnN1YnN0cmluZyhuLGkpKSxuPS0xKSx2b2lkIDAhPT1yJiYocis9ZS5jaGFyQXQoaSkpKToodm9pZCAwPT09ciYmKHI9ZS5zdWJzdHIoMCxpKSksdm9pZCAwIT09KG89dltvXSk/KC0xIT09biYmKHIrPWVuY29kZVVSSUNvbXBvbmVudChlLnN1YnN0cmluZyhuLGkpKSxuPS0xKSxyKz1vKTotMT09PW4mJihuPWkpKX1yZXR1cm4tMSE9PW4mJihyKz1lbmNvZGVVUklDb21wb25lbnQoZS5zdWJzdHJpbmcobikpKSx2b2lkIDAhPT1yP3I6ZX1mdW5jdGlvbiBDKGUpe2Zvcih2YXIgdD12b2lkIDAscj0wO3I8ZS5sZW5ndGg7cisrKXt2YXIgbj1lLmNoYXJDb2RlQXQocik7MzU9PT1ufHw2Mz09PW4/KHZvaWQgMD09PXQmJih0PWUuc3Vic3RyKDAscikpLHQrPXZbbl0pOnZvaWQgMCE9PXQmJih0Kz1lW3JdKX1yZXR1cm4gdm9pZCAwIT09dD90OmV9ZnVuY3Rpb24gdyhlLHQpe3Q9ZS5hdXRob3JpdHkmJjE8ZS5wYXRoLmxlbmd0aCYmImZpbGUiPT09ZS5zY2hlbWU/Ii8vIi5jb25jYXQoZS5hdXRob3JpdHkpLmNvbmNhdChlLnBhdGgpOjQ3PT09ZS5wYXRoLmNoYXJDb2RlQXQoMCkmJig2NTw9ZS5wYXRoLmNoYXJDb2RlQXQoMSkmJmUucGF0aC5jaGFyQ29kZUF0KDEpPD05MHx8OTc8PWUucGF0aC5jaGFyQ29kZUF0KDEpJiZlLnBhdGguY2hhckNvZGVBdCgxKTw9MTIyKSYmNTg9PT1lLnBhdGguY2hhckNvZGVBdCgyKT90P2UucGF0aC5zdWJzdHIoMSk6ZS5wYXRoWzFdLnRvTG93ZXJDYXNlKCkrZS5wYXRoLnN1YnN0cigyKTplLnBhdGg7cmV0dXJuIHQ9bj90LnJlcGxhY2UoL1wvL2csIlxcIik6dH1mdW5jdGlvbiBzKGUsdCl7dmFyIHIsbixpPXQ/Qzp5LG89IiIsYT1lLnNjaGVtZSxzPWUuYXV0aG9yaXR5LGw9ZS5wYXRoLGM9ZS5xdWVyeSxlPWUuZnJhZ21lbnQ7cmV0dXJuIGEmJihvPW8rYSsiOiIpLCFzJiYiZmlsZSIhPT1hfHwobys9Ii8vIikscyYmKC0xIT09KGE9cy5pbmRleE9mKCJAIikpJiYocj1zLnN1YnN0cigwLGEpLHM9cy5zdWJzdHIoYSsxKSwtMT09PShhPXIuaW5kZXhPZigiOiIpKT9vKz1pKHIsITEpOm89KG89bytpKHIuc3Vic3RyKDAsYSksITEpKyI6IikraShyLnN1YnN0cihhKzEpLCExKSxvKz0iQCIpLC0xPT09KGE9KHM9cy50b0xvd2VyQ2FzZSgpKS5pbmRleE9mKCI6IikpP28rPWkocywhMSk6bz0obys9aShzLnN1YnN0cigwLGEpLCExKSkrcy5zdWJzdHIoYSkpLGwmJigzPD1sLmxlbmd0aCYmNDc9PT1sLmNoYXJDb2RlQXQoMCkmJjU4PT09bC5jaGFyQ29kZUF0KDIpPzY1PD0obj1sLmNoYXJDb2RlQXQoMSkpJiZuPD05MCYmKGw9Ii8iLmNvbmNhdChTdHJpbmcuZnJvbUNoYXJDb2RlKG4rMzIpLCI6IikuY29uY2F0KGwuc3Vic3RyKDMpKSk6Mjw9bC5sZW5ndGgmJjU4PT09bC5jaGFyQ29kZUF0KDEpJiY2NTw9KG49bC5jaGFyQ29kZUF0KDApKSYmbjw9OTAmJihsPSIiLmNvbmNhdChTdHJpbmcuZnJvbUNoYXJDb2RlKG4rMzIpLCI6IikuY29uY2F0KGwuc3Vic3RyKDIpKSksbys9aShsLCEwKSksYyYmKG89KG8rPSI/IikraShjLCExKSksbz1lPyhvKz0iIyIpKyh0P2U6eShlLCExKSk6b312YXIgXz0vKCVbMC05QS1aYS16XVswLTlBLVphLXpdKSsvZztmdW5jdGlvbiBpKGUpe3JldHVybiBlLm1hdGNoKF8pP2UucmVwbGFjZShfLGZ1bmN0aW9uIHQocil7dHJ5e3JldHVybiBkZWNvZGVVUklDb21wb25lbnQocil9Y2F0Y2goZSl7cmV0dXJuIDM8ci5sZW5ndGg/ci5zdWJzdHIoMCwzKSt0KHIuc3Vic3RyKDMpKTpyfX0pOmV9ZnVuY3Rpb24gUyhlLHQscil7aWYocnx8Mj09PWFyZ3VtZW50cy5sZW5ndGgpZm9yKHZhciBuLGk9MCxvPXQubGVuZ3RoO2k8bztpKyspIW4mJmkgaW4gdHx8KChuPW58fEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHQsMCxpKSlbaV09dFtpXSk7cmV0dXJuIGUuY29uY2F0KG58fEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHQpKX12YXIgbCxlPXQoNDcwKSxjPWUucG9zaXh8fGU7KHQ9bD1sfHx7fSkuam9pblBhdGg9ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PVtdLHI9MTtyPGFyZ3VtZW50cy5sZW5ndGg7cisrKXRbci0xXT1hcmd1bWVudHNbcl07cmV0dXJuIGUud2l0aCh7cGF0aDpjLmpvaW4uYXBwbHkoYyxTKFtlLnBhdGhdLHQsITEpKX0pfSx0LnJlc29sdmVQYXRoPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD1bXSxyPTE7cjxhcmd1bWVudHMubGVuZ3RoO3IrKyl0W3ItMV09YXJndW1lbnRzW3JdO3ZhciBuPWUucGF0aHx8Ii8iO3JldHVybiBlLndpdGgoe3BhdGg6Yy5yZXNvbHZlLmFwcGx5KGMsUyhbbl0sdCwhMSkpfSl9LHQuZGlybmFtZT1mdW5jdGlvbihlKXt2YXIgdD1jLmRpcm5hbWUoZS5wYXRoKTtyZXR1cm4gMT09PXQubGVuZ3RoJiY0Nj09PXQuY2hhckNvZGVBdCgwKT9lOmUud2l0aCh7cGF0aDp0fSl9LHQuYmFzZW5hbWU9ZnVuY3Rpb24oZSl7cmV0dXJuIGMuYmFzZW5hbWUoZS5wYXRoKX0sdC5leHRuYW1lPWZ1bmN0aW9uKGUpe3JldHVybiBjLmV4dG5hbWUoZS5wYXRoKX19fSxlbz17fSxuby5kPShlLHQpPT57Zm9yKHZhciByIGluIHQpbm8ubyh0LHIpJiYhbm8ubyhlLHIpJiZPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxyLHtlbnVtZXJhYmxlOiEwLGdldDp0W3JdfSl9LG5vLm89KGUsdCk9Pk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLHQpLG5vLnI9ZT0+eyJ1bmRlZmluZWQiIT10eXBlb2YgU3ltYm9sJiZTeW1ib2wudG9TdHJpbmdUYWcmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLFN5bWJvbC50b1N0cmluZ1RhZyx7dmFsdWU6Ik1vZHVsZSJ9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSl9O3ZhciBpbz1ubyg0NDcpWyJVUkkiXTt2YXIgb289cW4sYW89KHNvLnByb3RvdHlwZS5tYXRjaGVzUGF0dGVybj1mdW5jdGlvbihlKXtmb3IodmFyIHQ9ITEscj0wLG49dGhpcy5nbG9iV3JhcHBlcnM7cjxuLmxlbmd0aDtyKyspe3ZhciBpPW5bcl0sbz1pLnJlZ2V4cCxpPWkuaW5jbHVkZTtvLnRlc3QoZSkmJih0PWkpfXJldHVybiB0fSxzby5wcm90b3R5cGUuZ2V0VVJJcz1mdW5jdGlvbigpe3JldHVybiB0aGlzLnVyaXN9LHNvKTtmdW5jdGlvbiBzbyhlLHQpe3RoaXMuZ2xvYldyYXBwZXJzPVtdO3RyeXtmb3IodmFyIHI9MCxuPWU7cjxuLmxlbmd0aDtyKyspe3ZhciBpPW5bcl0sbz0iISIhPT1pWzBdOzA8KGk9bz9pOmkuc3Vic3RyaW5nKDEpKS5sZW5ndGgmJigiLyI9PT1pWzBdJiYoaT1pLnN1YnN0cmluZygxKSksdGhpcy5nbG9iV3JhcHBlcnMucHVzaCh7cmVnZXhwOmZ1bmN0aW9uKGUsdCl7aWYoInN0cmluZyIhPXR5cGVvZiBlKXRocm93IG5ldyBUeXBlRXJyb3IoIkV4cGVjdGVkIGEgc3RyaW5nIik7Zm9yKHZhciByLG49U3RyaW5nKGUpLGk9IiIsbz0hIXQmJiEhdC5leHRlbmRlZCx1PSEhdCYmISF0Lmdsb2JzdGFyLGE9ITEsZT10JiYic3RyaW5nIj09dHlwZW9mIHQuZmxhZ3M/dC5mbGFnczoiIixzPTAsaD1uLmxlbmd0aDtzPGg7cysrKXN3aXRjaChyPW5bc10pe2Nhc2UiLyI6Y2FzZSIkIjpjYXNlIl4iOmNhc2UiKyI6Y2FzZSIuIjpjYXNlIigiOmNhc2UiKSI6Y2FzZSI9IjpjYXNlIiEiOmNhc2UifCI6aSs9IlxcIityO2JyZWFrO2Nhc2UiPyI6aWYobyl7aSs9Ii4iO2JyZWFrfWNhc2UiWyI6Y2FzZSJdIjppZihvKXtpKz1yO2JyZWFrfWNhc2UieyI6aWYobyl7YT0hMCxpKz0iKCI7YnJlYWt9Y2FzZSJ9IjppZihvKXthPSExLGkrPSIpIjticmVha31jYXNlIiwiOmlmKGEpe2krPSJ8IjticmVha31pKz0iXFwiK3I7YnJlYWs7Y2FzZSIqIjpmb3IodmFyIGw9bltzLTFdLGY9MTsiKiI9PT1uW3MrMV07KWYrKyxzKys7dmFyIGM9bltzKzFdO3U/MTxmJiYoIi8iPT09bHx8dm9pZCAwPT09bHx8InsiPT09bHx8IiwiPT09bCkmJigiLyI9PT1jfHx2b2lkIDA9PT1jfHwiLCI9PT1jfHwifSI9PT1jKT8oIi8iPT09Yz9zKys6Ii8iPT09bCYmaS5lbmRzV2l0aCgiXFwvIikmJihpPWkuc3Vic3RyKDAsaS5sZW5ndGgtMikpLGkrPSIoKD86W14vXSooPzovfCQpKSopIik6aSs9IihbXi9dKikiOmkrPSIuKiI7YnJlYWs7ZGVmYXVsdDppKz1yfXJldHVybiBlJiZ+ZS5pbmRleE9mKCJnIil8fChpPSJeIitpKyIkIiksbmV3IFJlZ0V4cChpLGUpfSgiKiovIitpLHtleHRlbmRlZDohMCxnbG9ic3RhcjohMH0pLGluY2x1ZGU6b30pKX10aGlzLnVyaXM9dH1jYXRjaChlKXt0aGlzLmdsb2JXcmFwcGVycy5sZW5ndGg9MCx0aGlzLnVyaXM9W119fWNvLnByb3RvdHlwZS5nZXRVbnJlc29sdmVkU2NoZW1hPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudW5yZXNvbHZlZFNjaGVtYXx8KHRoaXMudW5yZXNvbHZlZFNjaGVtYT10aGlzLnNlcnZpY2UubG9hZFNjaGVtYSh0aGlzLnVyaSkpLHRoaXMudW5yZXNvbHZlZFNjaGVtYX0sY28ucHJvdG90eXBlLmdldFJlc29sdmVkU2NoZW1hPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcztyZXR1cm4gdGhpcy5yZXNvbHZlZFNjaGVtYXx8KHRoaXMucmVzb2x2ZWRTY2hlbWE9dGhpcy5nZXRVbnJlc29sdmVkU2NoZW1hKCkudGhlbihmdW5jdGlvbihlKXtyZXR1cm4gdC5zZXJ2aWNlLnJlc29sdmVTY2hlbWFDb250ZW50KGUsdCl9KSksdGhpcy5yZXNvbHZlZFNjaGVtYX0sY28ucHJvdG90eXBlLmNsZWFyU2NoZW1hPWZ1bmN0aW9uKCl7dmFyIGU9ISF0aGlzLnVucmVzb2x2ZWRTY2hlbWE7cmV0dXJuIHRoaXMucmVzb2x2ZWRTY2hlbWE9dm9pZCAwLHRoaXMudW5yZXNvbHZlZFNjaGVtYT12b2lkIDAsdGhpcy5kZXBlbmRlbmNpZXMuY2xlYXIoKSx0aGlzLmFuY2hvcnM9dm9pZCAwLGV9O3ZhciBsbz1jbztmdW5jdGlvbiBjbyhlLHQscil7dGhpcy5zZXJ2aWNlPWUsdGhpcy51cmk9dCx0aGlzLmRlcGVuZGVuY2llcz1uZXcgU2V0LHRoaXMuYW5jaG9ycz12b2lkIDAsciYmKHRoaXMudW5yZXNvbHZlZFNjaGVtYT10aGlzLnNlcnZpY2UucHJvbWlzZS5yZXNvbHZlKG5ldyB1byhyKSkpfXZhciB1bz1mdW5jdGlvbihlLHQpe3ZvaWQgMD09PXQmJih0PVtdKSx0aGlzLnNjaGVtYT1lLHRoaXMuZXJyb3JzPXR9LGhvPShmby5wcm90b3R5cGUuZ2V0U2VjdGlvbj1mdW5jdGlvbihlKXtlPXRoaXMuZ2V0U2VjdGlvblJlY3Vyc2l2ZShlLHRoaXMuc2NoZW1hKTtpZihlKXJldHVybiBnaShlKX0sZm8ucHJvdG90eXBlLmdldFNlY3Rpb25SZWN1cnNpdmU9ZnVuY3Rpb24oZSx0KXtpZighdHx8ImJvb2xlYW4iPT10eXBlb2YgdHx8MD09PWUubGVuZ3RoKXJldHVybiB0O3ZhciByPWUuc2hpZnQoKTtpZih0LnByb3BlcnRpZXMmJih0LnByb3BlcnRpZXNbcl0sMSkpcmV0dXJuIHRoaXMuZ2V0U2VjdGlvblJlY3Vyc2l2ZShlLHQucHJvcGVydGllc1tyXSk7aWYodC5wYXR0ZXJuUHJvcGVydGllcylmb3IodmFyIG49MCxpPU9iamVjdC5rZXlzKHQucGF0dGVyblByb3BlcnRpZXMpO248aS5sZW5ndGg7bisrKXt2YXIgbz1pW25dLGE9bm4obyk7aWYobnVsbCE9YSYmYS50ZXN0KHIpKXJldHVybiB0aGlzLmdldFNlY3Rpb25SZWN1cnNpdmUoZSx0LnBhdHRlcm5Qcm9wZXJ0aWVzW29dKX1lbHNle2lmKCJvYmplY3QiPT10eXBlb2YgdC5hZGRpdGlvbmFsUHJvcGVydGllcylyZXR1cm4gdGhpcy5nZXRTZWN0aW9uUmVjdXJzaXZlKGUsdC5hZGRpdGlvbmFsUHJvcGVydGllcyk7aWYoci5tYXRjaCgiWzAtOV0rIikpaWYoQXJyYXkuaXNBcnJheSh0Lml0ZW1zKSl7dmFyIHM9cGFyc2VJbnQociwxMCk7aWYoIWlzTmFOKHMpJiZ0Lml0ZW1zW3NdKXJldHVybiB0aGlzLmdldFNlY3Rpb25SZWN1cnNpdmUoZSx0Lml0ZW1zW3NdKX1lbHNlIGlmKHQuaXRlbXMpcmV0dXJuIHRoaXMuZ2V0U2VjdGlvblJlY3Vyc2l2ZShlLHQuaXRlbXMpfX0sZm8pO2Z1bmN0aW9uIGZvKGUsdCl7dm9pZCAwPT09dCYmKHQ9W10pLHRoaXMuc2NoZW1hPWUsdGhpcy5lcnJvcnM9dH1nby5wcm90b3R5cGUuZ2V0UmVnaXN0ZXJlZFNjaGVtYUlkcz1mdW5jdGlvbih0KXtyZXR1cm4gT2JqZWN0LmtleXModGhpcy5yZWdpc3RlcmVkU2NoZW1hc0lkcykuZmlsdGVyKGZ1bmN0aW9uKGUpe2U9aW8ucGFyc2UoZSkuc2NoZW1lO3JldHVybiJzY2hlbWFzZXJ2aWNlIiE9PWUmJighdHx8dChlKSl9KX0sT2JqZWN0LmRlZmluZVByb3BlcnR5KGdvLnByb3RvdHlwZSwicHJvbWlzZSIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnByb21pc2VDb25zdHJ1Y3Rvcn0sZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9KSxnby5wcm90b3R5cGUuZGlzcG9zZT1mdW5jdGlvbigpe2Zvcig7MDx0aGlzLmNhbGxPbkRpc3Bvc2UubGVuZ3RoOyl0aGlzLmNhbGxPbkRpc3Bvc2UucG9wKCkoKX0sZ28ucHJvdG90eXBlLm9uUmVzb3VyY2VDaGFuZ2U9ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PXRoaXMscj0odGhpcy5jYWNoZWRTY2hlbWFGb3JSZXNvdXJjZT12b2lkIDAsITEpLG49W2U9dm8oZSldLGk9T2JqZWN0LmtleXModGhpcy5zY2hlbWFzQnlJZCkubWFwKGZ1bmN0aW9uKGUpe3JldHVybiB0LnNjaGVtYXNCeUlkW2VdfSk7bi5sZW5ndGg7KWZvcih2YXIgbz1uLnBvcCgpLGE9MDthPGkubGVuZ3RoO2ErKyl7dmFyIHM9aVthXTtzJiYocy51cmk9PT1vfHxzLmRlcGVuZGVuY2llcy5oYXMobykpJiYocy51cmkhPT1vJiZuLnB1c2gocy51cmkpLHMuY2xlYXJTY2hlbWEoKSYmKHI9ITApLGlbYV09dm9pZCAwKX1yZXR1cm4gcn0sZ28ucHJvdG90eXBlLnNldFNjaGVtYUNvbnRyaWJ1dGlvbnM9ZnVuY3Rpb24oZSl7aWYoZS5zY2hlbWFzKXt2YXIgdCxyPWUuc2NoZW1hcztmb3IodCBpbiByKXt2YXIgbj12byh0KTt0aGlzLmNvbnRyaWJ1dGlvblNjaGVtYXNbbl09dGhpcy5hZGRTY2hlbWFIYW5kbGUobixyW3RdKX19aWYoQXJyYXkuaXNBcnJheShlLnNjaGVtYUFzc29jaWF0aW9ucykpZm9yKHZhciBpPTAsbz1lLnNjaGVtYUFzc29jaWF0aW9ucztpPG8ubGVuZ3RoO2krKyl7dmFyIGE9b1tpXSxzPWEudXJpcy5tYXAodm8pLGE9dGhpcy5hZGRGaWxlUGF0dGVybkFzc29jaWF0aW9uKGEucGF0dGVybixzKTt0aGlzLmNvbnRyaWJ1dGlvbkFzc29jaWF0aW9ucy5wdXNoKGEpfX0sZ28ucHJvdG90eXBlLmFkZFNjaGVtYUhhbmRsZT1mdW5jdGlvbihlLHQpe3Q9bmV3IGxvKHRoaXMsZSx0KTtyZXR1cm4gdGhpcy5zY2hlbWFzQnlJZFtlXT10fSxnby5wcm90b3R5cGUuZ2V0T3JBZGRTY2hlbWFIYW5kbGU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdGhpcy5zY2hlbWFzQnlJZFtlXXx8dGhpcy5hZGRTY2hlbWFIYW5kbGUoZSx0KX0sZ28ucHJvdG90eXBlLmFkZEZpbGVQYXR0ZXJuQXNzb2NpYXRpb249ZnVuY3Rpb24oZSx0KXtlPW5ldyBhbyhlLHQpO3JldHVybiB0aGlzLmZpbGVQYXR0ZXJuQXNzb2NpYXRpb25zLnB1c2goZSksZX0sZ28ucHJvdG90eXBlLnJlZ2lzdGVyRXh0ZXJuYWxTY2hlbWE9ZnVuY3Rpb24oZSx0LHIpe2U9dm8oZSk7cmV0dXJuIHRoaXMucmVnaXN0ZXJlZFNjaGVtYXNJZHNbZV09ITAsdGhpcy5jYWNoZWRTY2hlbWFGb3JSZXNvdXJjZT12b2lkIDAsdCYmdGhpcy5hZGRGaWxlUGF0dGVybkFzc29jaWF0aW9uKHQsW2VdKSxyP3RoaXMuYWRkU2NoZW1hSGFuZGxlKGUscik6dGhpcy5nZXRPckFkZFNjaGVtYUhhbmRsZShlKX0sZ28ucHJvdG90eXBlLmNsZWFyRXh0ZXJuYWxTY2hlbWFzPWZ1bmN0aW9uKCl7Zm9yKHZhciBlIGluIHRoaXMuc2NoZW1hc0J5SWQ9e30sdGhpcy5maWxlUGF0dGVybkFzc29jaWF0aW9ucz1bXSx0aGlzLnJlZ2lzdGVyZWRTY2hlbWFzSWRzPXt9LHRoaXMuY2FjaGVkU2NoZW1hRm9yUmVzb3VyY2U9dm9pZCAwLHRoaXMuY29udHJpYnV0aW9uU2NoZW1hcyl0aGlzLnNjaGVtYXNCeUlkW2VdPXRoaXMuY29udHJpYnV0aW9uU2NoZW1hc1tlXSx0aGlzLnJlZ2lzdGVyZWRTY2hlbWFzSWRzW2VdPSEwO2Zvcih2YXIgdD0wLHI9dGhpcy5jb250cmlidXRpb25Bc3NvY2lhdGlvbnM7dDxyLmxlbmd0aDt0Kyspe3ZhciBuPXJbdF07dGhpcy5maWxlUGF0dGVybkFzc29jaWF0aW9ucy5wdXNoKG4pfX0sZ28ucHJvdG90eXBlLmdldFJlc29sdmVkU2NoZW1hPWZ1bmN0aW9uKGUpe2U9dm8oZSksZT10aGlzLnNjaGVtYXNCeUlkW2VdO3JldHVybiBlP2UuZ2V0UmVzb2x2ZWRTY2hlbWEoKTp0aGlzLnByb21pc2UucmVzb2x2ZSh2b2lkIDApfSxnby5wcm90b3R5cGUubG9hZFNjaGVtYT1mdW5jdGlvbihyKXt2YXIgZTtyZXR1cm4gdGhpcy5yZXF1ZXN0U2VydmljZT90aGlzLnJlcXVlc3RTZXJ2aWNlKHIpLnRoZW4oZnVuY3Rpb24oZSl7aWYoIWUpcmV0dXJuIHQ9b28oImpzb24uc2NoZW1hLm5vY29udGVudCIsIlVuYWJsZSB0byBsb2FkIHNjaGVtYSBmcm9tICd7MH0nOiBObyBjb250ZW50LiIseW8ocikpLG5ldyB1byh7fSxbdF0pO3ZhciB0PVtdLGU9SnIoZSx0KSx0PXQubGVuZ3RoP1tvbygianNvbi5zY2hlbWEuaW52YWxpZEZvcm1hdCIsIlVuYWJsZSB0byBwYXJzZSBjb250ZW50IGZyb20gJ3swfSc6IFBhcnNlIGVycm9yIGF0IG9mZnNldCB7MX0uIix5byhyKSx0WzBdLm9mZnNldCldOltdO3JldHVybiBuZXcgdW8oZSx0KX0sZnVuY3Rpb24oZSl7dmFyIHQ9ZS50b1N0cmluZygpLGU9ZS50b1N0cmluZygpLnNwbGl0KCJFcnJvcjogIik7cmV0dXJuIHJuKHQ9MTxlLmxlbmd0aD9lWzFdOnQsIi4iKSYmKHQ9dC5zdWJzdHIoMCx0Lmxlbmd0aC0xKSksbmV3IHVvKHt9LFtvbygianNvbi5zY2hlbWEubm9jb250ZW50IiwiVW5hYmxlIHRvIGxvYWQgc2NoZW1hIGZyb20gJ3swfSc6IHsxfS4iLHlvKHIpLHQpXSl9KTooZT1vbygianNvbi5zY2hlbWEubm9yZXF1ZXN0c2VydmljZSIsIlVuYWJsZSB0byBsb2FkIHNjaGVtYSBmcm9tICd7MH0nLiBObyBzY2hlbWEgcmVxdWVzdCBzZXJ2aWNlIGF2YWlsYWJsZSIseW8ocikpLHRoaXMucHJvbWlzZS5yZXNvbHZlKG5ldyB1byh7fSxbZV0pKSl9LGdvLnByb3RvdHlwZS5yZXNvbHZlU2NoZW1hQ29udGVudD1mdW5jdGlvbihlLHQpe3ZhciBzPXRoaXMsbD1lLmVycm9ycy5zbGljZSgwKSxyPWUuc2NoZW1hO2lmKHIuJHNjaGVtYSl7ZT12byhyLiRzY2hlbWEpO2lmKCJodHRwOi8vanNvbi1zY2hlbWEub3JnL2RyYWZ0LTAzL3NjaGVtYSI9PT1lKXJldHVybiB0aGlzLnByb21pc2UucmVzb2x2ZShuZXcgaG8oe30sW29vKCJqc29uLnNjaGVtYS5kcmFmdDAzLm5vdHN1cHBvcnRlZCIsIkRyYWZ0LTAzIHNjaGVtYXMgYXJlIG5vdCBzdXBwb3J0ZWQuIildKSk7Imh0dHBzOi8vanNvbi1zY2hlbWEub3JnL2RyYWZ0LzIwMTktMDkvc2NoZW1hIj09PWU/bC5wdXNoKG9vKCJqc29uLnNjaGVtYS5kcmFmdDIwMTkwOS5ub3RzdXBwb3J0ZWQiLCJEcmFmdCAyMDE5LTA5IHNjaGVtYXMgYXJlIG5vdCB5ZXQgZnVsbHkgc3VwcG9ydGVkLiIpKToiaHR0cHM6Ly9qc29uLXNjaGVtYS5vcmcvZHJhZnQvMjAyMC0xMi9zY2hlbWEiPT09ZSYmbC5wdXNoKG9vKCJqc29uLnNjaGVtYS5kcmFmdDIwMjAxMi5ub3RzdXBwb3J0ZWQiLCJEcmFmdCAyMDIwLTEyIHNjaGVtYXMgYXJlIG5vdCB5ZXQgZnVsbHkgc3VwcG9ydGVkLiIpKX12YXIgYz10aGlzLmNvbnRleHRTZXJ2aWNlLGk9ZnVuY3Rpb24oZSx0KXt0PWRlY29kZVVSSUNvbXBvbmVudCh0KTt2YXIgcj1lO3JldHVybih0PSIvIj09PXRbMF0/dC5zdWJzdHJpbmcoMSk6dCkuc3BsaXQoIi8iKS5zb21lKGZ1bmN0aW9uKGUpe3JldHVybiBlPWUucmVwbGFjZSgvfjEvZywiLyIpLnJlcGxhY2UoL34wL2csIn4iKSwhKHI9cltlXSl9KSxyfSxvPWZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gdC5hbmNob3JzfHwodC5hbmNob3JzPW4oZSkpLHQuYW5jaG9ycy5nZXQocil9LGE9ZnVuY3Rpb24oZSx0KXtmb3IodmFyIHIgaW4gdCl0Lmhhc093blByb3BlcnR5KHIpJiYhZS5oYXNPd25Qcm9wZXJ0eShyKSYmImlkIiE9PXImJiIkaWQiIT09ciYmKGVbcl09dFtyXSl9LHU9ZnVuY3Rpb24oZSx0LHIsbil7dD12b2lkIDA9PT1ufHwwPT09bi5sZW5ndGg/dDoiLyI9PT1uLmNoYXJBdCgwKT9pKHQsbik6byh0LHIsbik7dD9hKGUsdCk6bC5wdXNoKG9vKCJqc29uLnNjaGVtYS5pbnZhbGlkaWQiLCIkcmVmICd7MH0nIGluICd7MX0nIGNhbiBub3QgYmUgcmVzb2x2ZWQuIixuLHIudXJpKSl9LGY9ZnVuY3Rpb24ocixuLGksbyl7bj12byhuPWMmJiEvXltBLVphLXpdW0EtWmEtejAtOStcLS4rXSo6XC9cLy4qLy50ZXN0KG4pP2MucmVzb2x2ZVJlbGF0aXZlUGF0aChuLG8udXJpKTpuKTt2YXIgYT1zLmdldE9yQWRkU2NoZW1hSGFuZGxlKG4pO3JldHVybiBhLmdldFVucmVzb2x2ZWRTY2hlbWEoKS50aGVuKGZ1bmN0aW9uKGUpe3ZhciB0O3JldHVybiBvLmRlcGVuZGVuY2llcy5hZGQobiksZS5lcnJvcnMubGVuZ3RoJiYodD1pP24rIiMiK2k6bixsLnB1c2gob28oImpzb24uc2NoZW1hLnByb2JsZW1sb2FkaW5ncmVmIiwiUHJvYmxlbXMgbG9hZGluZyByZWZlcmVuY2UgJ3swfSc6IHsxfSIsdCxlLmVycm9yc1swXSkpKSx1KHIsZS5zY2hlbWEsYSxpKSxoKHIsZS5zY2hlbWEsYSl9KX0saD1mdW5jdGlvbihlLGksbyl7dmFyIGE9W107cmV0dXJuIHMudHJhdmVyc2VOb2RlcyhlLGZ1bmN0aW9uKGUpe2Zvcih2YXIgdD1uZXcgU2V0O2UuJHJlZjspe3ZhciByPWUuJHJlZixuPXIuc3BsaXQoIiMiLDIpO2lmKGRlbGV0ZSBlLiRyZWYsMDxuWzBdLmxlbmd0aClyZXR1cm4gdm9pZCBhLnB1c2goZihlLG5bMF0sblsxXSxvKSk7dC5oYXMocil8fChuPW5bMV0sdShlLGksbyxuKSx0LmFkZChyKSl9fSkscy5wcm9taXNlLmFsbChhKX0sbj1mdW5jdGlvbihlKXt2YXIgbj1uZXcgTWFwO3JldHVybiBzLnRyYXZlcnNlTm9kZXMoZSxmdW5jdGlvbihlKXt2YXIgdCxyPWUuJGlkfHxlLmlkOyJzdHJpbmciPT10eXBlb2YgciYmIiMiPT09ci5jaGFyQXQoMCkmJih0PXIuc3Vic3RyaW5nKDEpLG4uaGFzKHQpP2wucHVzaChvbygianNvbi5zY2hlbWEuZHVwbGljYXRlaWQiLCJEdXBsaWNhdGUgaWQgZGVjbGFyYXRpb246ICd7MH0nIixyKSk6bi5zZXQodCxlKSl9KSxufTtyZXR1cm4gaChyLHIsdCkudGhlbihmdW5jdGlvbihlKXtyZXR1cm4gbmV3IGhvKHIsbCl9KX0sZ28ucHJvdG90eXBlLnRyYXZlcnNlTm9kZXM9ZnVuY3Rpb24oZSx0KXtpZighZXx8Im9iamVjdCIhPXR5cGVvZiBlKXJldHVybiBQcm9taXNlLnJlc29sdmUobnVsbCk7Zm9yKHZhciByPW5ldyBTZXQsbD1bZV0sbj1sLnBvcCgpO247KXIuaGFzKG4pfHwoci5hZGQobiksdChuKSxmdW5jdGlvbigpe2Zvcih2YXIgZT1bXSx0PTA7dDxhcmd1bWVudHMubGVuZ3RoO3QrKyllW3RdPWFyZ3VtZW50c1t0XTtmb3IodmFyIHI9MCxuPWU7cjxuLmxlbmd0aDtyKyspe3ZhciBpPW5bcl07Im9iamVjdCI9PXR5cGVvZiBpJiZsLnB1c2goaSl9fShuLml0ZW1zLG4uYWRkaXRpb25hbEl0ZW1zLG4uYWRkaXRpb25hbFByb3BlcnRpZXMsbi5ub3Qsbi5jb250YWlucyxuLnByb3BlcnR5TmFtZXMsbi5pZixuLnRoZW4sbi5lbHNlKSxmdW5jdGlvbigpe2Zvcih2YXIgZT1bXSx0PTA7dDxhcmd1bWVudHMubGVuZ3RoO3QrKyllW3RdPWFyZ3VtZW50c1t0XTtmb3IodmFyIHI9MCxuPWU7cjxuLmxlbmd0aDtyKyspe3ZhciBpPW5bcl07aWYoIm9iamVjdCI9PXR5cGVvZiBpKWZvcih2YXIgbyBpbiBpKXtvPWlbb107Im9iamVjdCI9PXR5cGVvZiBvJiZsLnB1c2gobyl9fX0obi5kZWZpbml0aW9ucyxuLnByb3BlcnRpZXMsbi5wYXR0ZXJuUHJvcGVydGllcyxuLmRlcGVuZGVuY2llcyksZnVuY3Rpb24oKXtmb3IodmFyIGU9W10sdD0wO3Q8YXJndW1lbnRzLmxlbmd0aDt0KyspZVt0XT1hcmd1bWVudHNbdF07Zm9yKHZhciByPTAsbj1lO3I8bi5sZW5ndGg7cisrKXt2YXIgaT1uW3JdO2lmKEFycmF5LmlzQXJyYXkoaSkpZm9yKHZhciBvPTAsYT1pO288YS5sZW5ndGg7bysrKXt2YXIgcz1hW29dOyJvYmplY3QiPT10eXBlb2YgcyYmbC5wdXNoKHMpfX19KG4uYW55T2Ysbi5hbGxPZixuLm9uZU9mLG4uaXRlbXMpKSxuPWwucG9wKCl9LGdvLnByb3RvdHlwZS5nZXRTY2hlbWFGcm9tUHJvcGVydHk9ZnVuY3Rpb24oZSx0KXt2YXIgcjtpZigib2JqZWN0Ij09PShudWxsPT09KHI9dC5yb290KXx8dm9pZCAwPT09cj92b2lkIDA6ci50eXBlKSlmb3IodmFyIG49MCxpPXQucm9vdC5wcm9wZXJ0aWVzO248aS5sZW5ndGg7bisrKXt2YXIgbyxhPWlbbl07aWYoIiRzY2hlbWEiPT09YS5rZXlOb2RlLnZhbHVlJiYic3RyaW5nIj09PShudWxsPT09KG89YS52YWx1ZU5vZGUpfHx2b2lkIDA9PT1vP3ZvaWQgMDpvLnR5cGUpKXJldHVybiBvPWEudmFsdWVOb2RlLnZhbHVlLHRoaXMuY29udGV4dFNlcnZpY2UmJiEvXlx3W1x3XGQrLi1dKjovLnRlc3Qobyk/dGhpcy5jb250ZXh0U2VydmljZS5yZXNvbHZlUmVsYXRpdmVQYXRoKG8sZSk6b319LGdvLnByb3RvdHlwZS5nZXRBc3NvY2lhdGVkU2NoZW1hcz1mdW5jdGlvbihlKXtmb3IodmFyIHQ9T2JqZWN0LmNyZWF0ZShudWxsKSxyPVtdLG49ZnVuY3Rpb24odCl7dHJ5e3JldHVybiBpby5wYXJzZSh0KS53aXRoKHtmcmFnbWVudDpudWxsLHF1ZXJ5Om51bGx9KS50b1N0cmluZygpfWNhdGNoKGUpe3JldHVybiB0fX0oZSksaT0wLG89dGhpcy5maWxlUGF0dGVybkFzc29jaWF0aW9ucztpPG8ubGVuZ3RoO2krKyl7dmFyIGE9b1tpXTtpZihhLm1hdGNoZXNQYXR0ZXJuKG4pKWZvcih2YXIgcz0wLGw9YS5nZXRVUklzKCk7czxsLmxlbmd0aDtzKyspe3ZhciBjPWxbc107dFtjXXx8KHIucHVzaChjKSx0W2NdPSEwKX19cmV0dXJuIHJ9LGdvLnByb3RvdHlwZS5nZXRTY2hlbWFVUklzRm9yUmVzb3VyY2U9ZnVuY3Rpb24oZSx0KXt0PXQmJnRoaXMuZ2V0U2NoZW1hRnJvbVByb3BlcnR5KGUsdCk7cmV0dXJuIHQ/W3RdOnRoaXMuZ2V0QXNzb2NpYXRlZFNjaGVtYXMoZSl9LGdvLnByb3RvdHlwZS5nZXRTY2hlbWFGb3JSZXNvdXJjZT1mdW5jdGlvbihlLHQpe2lmKHQpe3ZhciB0PXRoaXMuZ2V0U2NoZW1hRnJvbVByb3BlcnR5KGUsdCk7aWYodClyZXR1cm4gdD12byh0KSx0aGlzLmdldE9yQWRkU2NoZW1hSGFuZGxlKHQpLmdldFJlc29sdmVkU2NoZW1hKCl9aWYodGhpcy5jYWNoZWRTY2hlbWFGb3JSZXNvdXJjZSYmdGhpcy5jYWNoZWRTY2hlbWFGb3JSZXNvdXJjZS5yZXNvdXJjZT09PWUpcmV0dXJuIHRoaXMuY2FjaGVkU2NoZW1hRm9yUmVzb3VyY2UucmVzb2x2ZWRTY2hlbWE7dD10aGlzLmdldEFzc29jaWF0ZWRTY2hlbWFzKGUpLHQ9MDx0Lmxlbmd0aD90aGlzLmNyZWF0ZUNvbWJpbmVkU2NoZW1hKGUsdCkuZ2V0UmVzb2x2ZWRTY2hlbWEoKTp0aGlzLnByb21pc2UucmVzb2x2ZSh2b2lkIDApO3JldHVybiB0aGlzLmNhY2hlZFNjaGVtYUZvclJlc291cmNlPXtyZXNvdXJjZTplLHJlc29sdmVkU2NoZW1hOnR9LHR9LGdvLnByb3RvdHlwZS5jcmVhdGVDb21iaW5lZFNjaGVtYT1mdW5jdGlvbihlLHQpe3JldHVybiAxPT09dC5sZW5ndGg/dGhpcy5nZXRPckFkZFNjaGVtYUhhbmRsZSh0WzBdKTooZT0ic2NoZW1hc2VydmljZTovL2NvbWJpbmVkU2NoZW1hLyIrZW5jb2RlVVJJQ29tcG9uZW50KGUpLHQ9e2FsbE9mOnQubWFwKGZ1bmN0aW9uKGUpe3JldHVybnskcmVmOmV9fSl9LHRoaXMuYWRkU2NoZW1hSGFuZGxlKGUsdCkpfSxnby5wcm90b3R5cGUuZ2V0TWF0Y2hpbmdTY2hlbWFzPWZ1bmN0aW9uKGUsdCxyKXt2YXIgbjtyZXR1cm4gcj8obj1yLmlkfHwic2NoZW1hc2VydmljZTovL3VudGl0bGVkL21hdGNoaW5nU2NoZW1hcy8iK2JvKyssdGhpcy5hZGRTY2hlbWFIYW5kbGUobixyKS5nZXRSZXNvbHZlZFNjaGVtYSgpLnRoZW4oZnVuY3Rpb24oZSl7cmV0dXJuIHQuZ2V0TWF0Y2hpbmdTY2hlbWFzKGUuc2NoZW1hKS5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIWUuaW52ZXJ0ZWR9KX0pKTp0aGlzLmdldFNjaGVtYUZvclJlc291cmNlKGUudXJpLHQpLnRoZW4oZnVuY3Rpb24oZSl7cmV0dXJuIGU/dC5nZXRNYXRjaGluZ1NjaGVtYXMoZS5zY2hlbWEpLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4hZS5pbnZlcnRlZH0pOltdfSl9O3ZhciBtbz1nbztmdW5jdGlvbiBnbyhlLHQscil7dGhpcy5jb250ZXh0U2VydmljZT10LHRoaXMucmVxdWVzdFNlcnZpY2U9ZSx0aGlzLnByb21pc2VDb25zdHJ1Y3Rvcj1yfHxQcm9taXNlLHRoaXMuY2FsbE9uRGlzcG9zZT1bXSx0aGlzLmNvbnRyaWJ1dGlvblNjaGVtYXM9e30sdGhpcy5jb250cmlidXRpb25Bc3NvY2lhdGlvbnM9W10sdGhpcy5zY2hlbWFzQnlJZD17fSx0aGlzLmZpbGVQYXR0ZXJuQXNzb2NpYXRpb25zPVtdLHRoaXMucmVnaXN0ZXJlZFNjaGVtYXNJZHM9e319dmFyIHBvLGJvPTA7ZnVuY3Rpb24gdm8odCl7dHJ5e3JldHVybiBpby5wYXJzZSh0KS50b1N0cmluZygpfWNhdGNoKGUpe3JldHVybiB0fX1mdW5jdGlvbiB5byhlKXt0cnl7dmFyIHQ9aW8ucGFyc2UoZSk7aWYoImZpbGUiPT09dC5zY2hlbWUpcmV0dXJuIHQuZnNQYXRofWNhdGNoKGUpe31yZXR1cm4gZX1mdW5jdGlvbiBDbyhlLHQpe3ZhciByPVtdLHU9W10sbj1bXSxoPS0xLGk9enIoZS5nZXRUZXh0KCksITEpLGY9aS5zY2FuKCk7ZnVuY3Rpb24gZChlKXtyLnB1c2goZSksdS5wdXNoKG4ubGVuZ3RoKX1mb3IoOzE3IT09Zjspe3N3aXRjaChmKXtjYXNlIDE6Y2FzZSAzOnZhciBvPXtzdGFydExpbmU6YT1lLnBvc2l0aW9uQXQoaS5nZXRUb2tlbk9mZnNldCgpKS5saW5lLGVuZExpbmU6YSxraW5kOjE9PT1mPyJvYmplY3QiOiJhcnJheSJ9O24ucHVzaChvKTticmVhaztjYXNlIDI6Y2FzZSA0OjA8bi5sZW5ndGgmJm5bbi5sZW5ndGgtMV0ua2luZD09PSgyPT09Zj8ib2JqZWN0IjoiYXJyYXkiKSYmKG89bi5wb3AoKSxzPWUucG9zaXRpb25BdChpLmdldFRva2VuT2Zmc2V0KCkpLmxpbmUsbyYmcz5vLnN0YXJ0TGluZSsxJiZoIT09by5zdGFydExpbmUmJihvLmVuZExpbmU9cy0xLGQobyksaD1vLnN0YXJ0TGluZSkpO2JyZWFrO2Nhc2UgMTM6dmFyIGE9ZS5wb3NpdGlvbkF0KGkuZ2V0VG9rZW5PZmZzZXQoKSkubGluZSxtPWUucG9zaXRpb25BdChpLmdldFRva2VuT2Zmc2V0KCkraS5nZXRUb2tlbkxlbmd0aCgpKS5saW5lOzE9PT1pLmdldFRva2VuRXJyb3IoKSYmYSsxPGUubGluZUNvdW50P2kuc2V0UG9zaXRpb24oZS5vZmZzZXRBdChNci5jcmVhdGUoYSsxLDApKSk6YTxtJiYoZCh7c3RhcnRMaW5lOmEsZW5kTGluZTptLGtpbmQ6SXIuQ29tbWVudH0pLGg9YSk7YnJlYWs7Y2FzZSAxMjptPWUuZ2V0VGV4dCgpLnN1YnN0cihpLmdldFRva2VuT2Zmc2V0KCksaS5nZXRUb2tlbkxlbmd0aCgpKS5tYXRjaCgvXlwvXC9ccyojKHJlZ2lvblxiKXwoZW5kcmVnaW9uXGIpLyk7aWYobSl7dmFyIHM9ZS5wb3NpdGlvbkF0KGkuZ2V0VG9rZW5PZmZzZXQoKSkubGluZTtpZihtWzFdKXtvPXtzdGFydExpbmU6cyxlbmRMaW5lOnMsa2luZDpJci5SZWdpb259O24ucHVzaChvKX1lbHNle2Zvcih2YXIgbD1uLmxlbmd0aC0xOzA8PWwmJm5bbF0ua2luZCE9PUlyLlJlZ2lvbjspbC0tOzA8PWwmJihvPW5bbF0sbi5sZW5ndGg9bCxzPm8uc3RhcnRMaW5lJiZoIT09by5zdGFydExpbmUmJihvLmVuZExpbmU9cyxkKG8pLGg9by5zdGFydExpbmUpKX19fWY9aS5zY2FuKCl9dmFyIGc9dCYmdC5yYW5nZUxpbWl0O2lmKCJudW1iZXIiIT10eXBlb2YgZ3x8ci5sZW5ndGg8PWcpcmV0dXJuIHI7dCYmdC5vblJhbmdlTGltaXRFeGNlZWRlZCYmdC5vblJhbmdlTGltaXRFeGNlZWRlZChlLnVyaSk7Zm9yKHZhciBwPVtdLGI9MCx2PXU7Yjx2Lmxlbmd0aDtiKyspKGM9dltiXSk8MzAmJihwW2NdPShwW2NdfHwwKSsxKTtmb3IodmFyIHk9MCxDPTAsbD0wO2w8cC5sZW5ndGg7bCsrKXt2YXIgdz1wW2xdO2lmKHcpe2lmKGc8dyt5KXtDPWw7YnJlYWt9eSs9d319Zm9yKHZhciBjLF89W10sbD0wO2w8ci5sZW5ndGg7bCsrKSJudW1iZXIiPT10eXBlb2YoYz11W2xdKSYmKGM8Q3x8Yz09PUMmJnkrKzxnKSYmXy5wdXNoKHJbbF0pO3JldHVybiBffWZ1bmN0aW9uIHdvKHUsZSxoKXtmdW5jdGlvbiBmKGUsdCl7cmV0dXJuIE9yLmNyZWF0ZSh1LnBvc2l0aW9uQXQoZSksdS5wb3NpdGlvbkF0KHQpKX12YXIgZD16cih1LmdldFRleHQoKSwhMCk7cmV0dXJuIGUubWFwKGZ1bmN0aW9uKGUpe2Zvcih2YXIgdCxyLG49dS5vZmZzZXRBdChlKSxpPWguZ2V0Tm9kZUZyb21PZmZzZXQobiwhMCksbz1bXTtpOyl7c3dpdGNoKGkudHlwZSl7Y2FzZSJzdHJpbmciOmNhc2Uib2JqZWN0IjpjYXNlImFycmF5Ijp2YXIgYT1pLm9mZnNldCsxLHM9aS5vZmZzZXQraS5sZW5ndGgtMTthPHMmJmE8PW4mJm48PXMmJm8ucHVzaChmKGEscykpLG8ucHVzaChmKGkub2Zmc2V0LGkub2Zmc2V0K2kubGVuZ3RoKSk7YnJlYWs7Y2FzZSJudW1iZXIiOmNhc2UiYm9vbGVhbiI6Y2FzZSJudWxsIjpjYXNlInByb3BlcnR5IjpvLnB1c2goZihpLm9mZnNldCxpLm9mZnNldCtpLmxlbmd0aCkpfSgicHJvcGVydHkiPT09aS50eXBlfHxpLnBhcmVudCYmImFycmF5Ij09PWkucGFyZW50LnR5cGUpJiYodD1pLm9mZnNldCtpLmxlbmd0aCxyPTUsZC5zZXRQb3NpdGlvbih0KSwtMSE9PSh0PWQuc2NhbigpIT09cj8tMTpkLmdldFRva2VuT2Zmc2V0KCkrZC5nZXRUb2tlbkxlbmd0aCgpKSYmby5wdXNoKGYoaS5vZmZzZXQsdCkpKSxpPWkucGFyZW50fWZvcih2YXIgbD12b2lkIDAsYz1vLmxlbmd0aC0xOzA8PWM7Yy0tKWw9a24uY3JlYXRlKG9bY10sbCk7cmV0dXJuIGw9bHx8a24uY3JlYXRlKE9yLmNyZWF0ZShlLGUpKX0pfWZ1bmN0aW9uIF9vKHIsbil7dmFyIGk9W107cmV0dXJuIG4udmlzaXQoZnVuY3Rpb24oZSl7dmFyIHQ7cmV0dXJuInByb3BlcnR5Ij09PWUudHlwZSYmIiRyZWYiPT09ZS5rZXlOb2RlLnZhbHVlJiYic3RyaW5nIj09PShudWxsPT09KHQ9ZS52YWx1ZU5vZGUpfHx2b2lkIDA9PT10P3ZvaWQgMDp0LnR5cGUpJiYodD1lLnZhbHVlTm9kZS52YWx1ZSwodD1mdW5jdGlvbihlLHQpe3Q9ZnVuY3Rpb24oZSl7cmV0dXJuIiMiIT09ZT8iIyI9PT1lWzBdJiYiLyI9PT1lWzFdP2Uuc3Vic3RyaW5nKDIpLnNwbGl0KC9cLy8pLm1hcChTbyk6bnVsbDpbXX0odCk7cmV0dXJuIHQ/ZnVuY3Rpb24gZSh0LHIpe2lmKCFyKXJldHVybiBudWxsO2lmKDA9PT10Lmxlbmd0aClyZXR1cm4gcjt2YXIgbj10LnNoaWZ0KCk7e3ZhciBpO3tpZihyJiYib2JqZWN0Ij09PXIudHlwZSlyZXR1cm4oaT1yLnByb3BlcnRpZXMuZmluZChmdW5jdGlvbihlKXtyZXR1cm4gZS5rZXlOb2RlLnZhbHVlPT09bn0pKT9lKHQsaS52YWx1ZU5vZGUpOm51bGw7aWYociYmImFycmF5Ij09PXIudHlwZSlpZihuLm1hdGNoKC9eKDB8WzEtOV1bMC05XSopJC8pKXJldHVybiBpPU51bWJlci5wYXJzZUludChuKSwocj1yLml0ZW1zW2ldKT9lKHQscik6bnVsbH19cmV0dXJuIG51bGx9KHQsZS5yb290KTpudWxsfShuLHQpKSYmKHQ9ci5wb3NpdGlvbkF0KHQub2Zmc2V0KSxpLnB1c2goe3RhcmdldDoiIi5jb25jYXQoci51cmksIiMiKS5jb25jYXQodC5saW5lKzEsIiwiKS5jb25jYXQodC5jaGFyYWN0ZXIrMSkscmFuZ2U6KHQ9cixlPWUudmFsdWVOb2RlLE9yLmNyZWF0ZSh0LnBvc2l0aW9uQXQoZS5vZmZzZXQrMSksdC5wb3NpdGlvbkF0KGUub2Zmc2V0K2UubGVuZ3RoLTEpKSl9KSkpLCEwfSksUHJvbWlzZS5yZXNvbHZlKGkpfWZ1bmN0aW9uIFNvKGUpe3JldHVybiBlLnJlcGxhY2UoL34xL2csIi8iKS5yZXBsYWNlKC9+MC9nLCJ+Iil9ZnVuY3Rpb24gQW8oZSl7dmFyIHQ9ZS5wcm9taXNlQ29uc3RydWN0b3J8fFByb21pc2Uscj1uZXcgbW8oZS5zY2hlbWFSZXF1ZXN0U2VydmljZSxlLndvcmtzcGFjZUNvbnRleHQsdCksbj0oci5zZXRTY2hlbWFDb250cmlidXRpb25zKHRvKSxuZXcgTWkocixlLmNvbnRyaWJ1dGlvbnMsdCxlLmNsaWVudENhcGFiaWxpdGllcykpLGU9bmV3IE9pKHIsZS5jb250cmlidXRpb25zLHQpLGk9bmV3IFdpKHIpLG89bmV3IFZpKHIsdCk7cmV0dXJue2NvbmZpZ3VyZTpmdW5jdGlvbihlKXtyLmNsZWFyRXh0ZXJuYWxTY2hlbWFzKCksZS5zY2hlbWFzJiZlLnNjaGVtYXMuZm9yRWFjaChmdW5jdGlvbihlKXtyLnJlZ2lzdGVyRXh0ZXJuYWxTY2hlbWEoZS51cmksZS5maWxlTWF0Y2gsZS5zY2hlbWEpfSksby5jb25maWd1cmUoZSl9LHJlc2V0U2NoZW1hOmZ1bmN0aW9uKGUpe3JldHVybiByLm9uUmVzb3VyY2VDaGFuZ2UoZSl9LGRvVmFsaWRhdGlvbjpvLmRvVmFsaWRhdGlvbi5iaW5kKG8pLGdldExhbmd1YWdlU3RhdHVzOm8uZ2V0TGFuZ3VhZ2VTdGF0dXMuYmluZChvKSxwYXJzZUpTT05Eb2N1bWVudDpmdW5jdGlvbihlKXtyZXR1cm4ga2koZSx7Y29sbGVjdENvbW1lbnRzOiEwfSl9LG5ld0pTT05Eb2N1bWVudDpmdW5jdGlvbihlLHQpe3JldHVybiBuZXcgeGkoZSxlPXZvaWQgMD09PShlPXQpP1tdOmUsW10pfSxnZXRNYXRjaGluZ1NjaGVtYXM6ci5nZXRNYXRjaGluZ1NjaGVtYXMuYmluZChyKSxkb1Jlc29sdmU6bi5kb1Jlc29sdmUuYmluZChuKSxkb0NvbXBsZXRlOm4uZG9Db21wbGV0ZS5iaW5kKG4pLGZpbmREb2N1bWVudFN5bWJvbHM6aS5maW5kRG9jdW1lbnRTeW1ib2xzLmJpbmQoaSksZmluZERvY3VtZW50U3ltYm9sczI6aS5maW5kRG9jdW1lbnRTeW1ib2xzMi5iaW5kKGkpLGZpbmREb2N1bWVudENvbG9yczppLmZpbmREb2N1bWVudENvbG9ycy5iaW5kKGkpLGdldENvbG9yUHJlc2VudGF0aW9uczppLmdldENvbG9yUHJlc2VudGF0aW9ucy5iaW5kKGkpLGRvSG92ZXI6ZS5kb0hvdmVyLmJpbmQoZSksZ2V0Rm9sZGluZ1JhbmdlczpDbyxnZXRTZWxlY3Rpb25SYW5nZXM6d28sZmluZERlZmluaXRpb246ZnVuY3Rpb24oKXtyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKFtdKX0sZmluZExpbmtzOl9vLGZvcm1hdDpmdW5jdGlvbih0LGUscil7dmFyIG4saT12b2lkIDAsZT0oZSYmKGk9e29mZnNldDpuPXQub2Zmc2V0QXQoZS5zdGFydCksbGVuZ3RoOnQub2Zmc2V0QXQoZS5lbmQpLW59KSx7dGFiU2l6ZTpyP3IudGFiU2l6ZTo0LGluc2VydFNwYWNlczohMD09PShudWxsPT1yP3ZvaWQgMDpyLmluc2VydFNwYWNlcyksaW5zZXJ0RmluYWxOZXdsaW5lOiEwPT09KG51bGw9PXI/dm9pZCAwOnIuaW5zZXJ0RmluYWxOZXdsaW5lKSxlb2w6IlxuIn0pO3JldHVybiBFcih0LmdldFRleHQoKSxpLGUpLm1hcChmdW5jdGlvbihlKXtyZXR1cm4gRHIucmVwbGFjZShPci5jcmVhdGUodC5wb3NpdGlvbkF0KGUub2Zmc2V0KSx0LnBvc2l0aW9uQXQoZS5vZmZzZXQrZS5sZW5ndGgpKSxlLmNvbnRlbnQpfSl9fX0idW5kZWZpbmVkIiE9dHlwZW9mIGZldGNoJiYocG89ZnVuY3Rpb24oZSl7cmV0dXJuIGZldGNoKGUpLnRoZW4oZT0+ZS50ZXh0KCkpfSk7dmFyIHhvPWNsYXNze19jdHg7X2xhbmd1YWdlU2VydmljZTtfbGFuZ3VhZ2VTZXR0aW5ncztfbGFuZ3VhZ2VJZDtjb25zdHJ1Y3RvcihlLHQpe3RoaXMuX2N0eD1lLHRoaXMuX2xhbmd1YWdlU2V0dGluZ3M9dC5sYW5ndWFnZVNldHRpbmdzLHRoaXMuX2xhbmd1YWdlSWQ9dC5sYW5ndWFnZUlkLHRoaXMuX2xhbmd1YWdlU2VydmljZT1Bbyh7d29ya3NwYWNlQ29udGV4dDp7cmVzb2x2ZVJlbGF0aXZlUGF0aDooZSx0KT0+e3Q9dC5zdWJzdHIoMCx0Lmxhc3RJbmRleE9mKCIvIikrMSk7aWYoZnVuY3Rpb24oZSl7cmV0dXJuIGUuY2hhckNvZGVBdCgwKT09PUVvfShlKSl7Y29uc3QgaT1pby5wYXJzZSh0KTt2YXIgcj1lLnNwbGl0KCIvIik7cmV0dXJuIGkud2l0aCh7cGF0aDprbyhyKX0pLnRvU3RyaW5nKCl9e3I9dCx0PVtlXTtjb25zdCBvPWlvLnBhcnNlKHIpLGE9by5wYXRoLnNwbGl0KCIvIik7Zm9yKHZhciBuIG9mIHQpYS5wdXNoKC4uLm4uc3BsaXQoIi8iKSk7cmV0dXJuIG8ud2l0aCh7cGF0aDprbyhhKX0pLnRvU3RyaW5nKCl9fX0sc2NoZW1hUmVxdWVzdFNlcnZpY2U6dC5lbmFibGVTY2hlbWFSZXF1ZXN0P3BvOnZvaWQgMH0pLHRoaXMuX2xhbmd1YWdlU2VydmljZS5jb25maWd1cmUodGhpcy5fbGFuZ3VhZ2VTZXR0aW5ncyl9YXN5bmMgZG9WYWxpZGF0aW9uKGUpe3ZhciB0LGU9dGhpcy5fZ2V0VGV4dERvY3VtZW50KGUpO3JldHVybiBlPyh0PXRoaXMuX2xhbmd1YWdlU2VydmljZS5wYXJzZUpTT05Eb2N1bWVudChlKSx0aGlzLl9sYW5ndWFnZVNlcnZpY2UuZG9WYWxpZGF0aW9uKGUsdCx0aGlzLl9sYW5ndWFnZVNldHRpbmdzKSk6UHJvbWlzZS5yZXNvbHZlKFtdKX1hc3luYyBkb0NvbXBsZXRlKGUsdCl7ZT10aGlzLl9nZXRUZXh0RG9jdW1lbnQoZSk7aWYoIWUpcmV0dXJuIG51bGw7dmFyIHI9dGhpcy5fbGFuZ3VhZ2VTZXJ2aWNlLnBhcnNlSlNPTkRvY3VtZW50KGUpO3JldHVybiB0aGlzLl9sYW5ndWFnZVNlcnZpY2UuZG9Db21wbGV0ZShlLHQscil9YXN5bmMgZG9SZXNvbHZlKGUpe3JldHVybiB0aGlzLl9sYW5ndWFnZVNlcnZpY2UuZG9SZXNvbHZlKGUpfWFzeW5jIGRvSG92ZXIoZSx0KXtlPXRoaXMuX2dldFRleHREb2N1bWVudChlKTtpZighZSlyZXR1cm4gbnVsbDt2YXIgcj10aGlzLl9sYW5ndWFnZVNlcnZpY2UucGFyc2VKU09ORG9jdW1lbnQoZSk7cmV0dXJuIHRoaXMuX2xhbmd1YWdlU2VydmljZS5kb0hvdmVyKGUsdCxyKX1hc3luYyBmb3JtYXQoZSx0LHIpe2U9dGhpcy5fZ2V0VGV4dERvY3VtZW50KGUpO2lmKCFlKXJldHVybltdO2U9dGhpcy5fbGFuZ3VhZ2VTZXJ2aWNlLmZvcm1hdChlLHQscik7cmV0dXJuIFByb21pc2UucmVzb2x2ZShlKX1hc3luYyByZXNldFNjaGVtYShlKXtyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHRoaXMuX2xhbmd1YWdlU2VydmljZS5yZXNldFNjaGVtYShlKSl9YXN5bmMgZmluZERvY3VtZW50U3ltYm9scyhlKXtlPXRoaXMuX2dldFRleHREb2N1bWVudChlKTtpZighZSlyZXR1cm5bXTt2YXIgdD10aGlzLl9sYW5ndWFnZVNlcnZpY2UucGFyc2VKU09ORG9jdW1lbnQoZSksZT10aGlzLl9sYW5ndWFnZVNlcnZpY2UuZmluZERvY3VtZW50U3ltYm9scyhlLHQpO3JldHVybiBQcm9taXNlLnJlc29sdmUoZSl9YXN5bmMgZmluZERvY3VtZW50Q29sb3JzKGUpe2U9dGhpcy5fZ2V0VGV4dERvY3VtZW50KGUpO2lmKCFlKXJldHVybltdO3ZhciB0PXRoaXMuX2xhbmd1YWdlU2VydmljZS5wYXJzZUpTT05Eb2N1bWVudChlKSxlPXRoaXMuX2xhbmd1YWdlU2VydmljZS5maW5kRG9jdW1lbnRDb2xvcnMoZSx0KTtyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGUpfWFzeW5jIGdldENvbG9yUHJlc2VudGF0aW9ucyhlLHQscil7ZT10aGlzLl9nZXRUZXh0RG9jdW1lbnQoZSk7aWYoIWUpcmV0dXJuW107dmFyIG49dGhpcy5fbGFuZ3VhZ2VTZXJ2aWNlLnBhcnNlSlNPTkRvY3VtZW50KGUpLGU9dGhpcy5fbGFuZ3VhZ2VTZXJ2aWNlLmdldENvbG9yUHJlc2VudGF0aW9ucyhlLG4sdCxyKTtyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGUpfWFzeW5jIGdldEZvbGRpbmdSYW5nZXMoZSx0KXtlPXRoaXMuX2dldFRleHREb2N1bWVudChlKTtpZighZSlyZXR1cm5bXTtlPXRoaXMuX2xhbmd1YWdlU2VydmljZS5nZXRGb2xkaW5nUmFuZ2VzKGUsdCk7cmV0dXJuIFByb21pc2UucmVzb2x2ZShlKX1hc3luYyBnZXRTZWxlY3Rpb25SYW5nZXMoZSx0KXtlPXRoaXMuX2dldFRleHREb2N1bWVudChlKTtpZighZSlyZXR1cm5bXTt2YXIgcj10aGlzLl9sYW5ndWFnZVNlcnZpY2UucGFyc2VKU09ORG9jdW1lbnQoZSksZT10aGlzLl9sYW5ndWFnZVNlcnZpY2UuZ2V0U2VsZWN0aW9uUmFuZ2VzKGUsdCxyKTtyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGUpfV9nZXRUZXh0RG9jdW1lbnQoZSl7dmFyIHQ7Zm9yKHQgb2YgdGhpcy5fY3R4LmdldE1pcnJvck1vZGVscygpKWlmKHQudXJpLnRvU3RyaW5nKCk9PT1lKXJldHVybiBSbi5jcmVhdGUoZSx0aGlzLl9sYW5ndWFnZUlkLHQudmVyc2lvbix0LmdldFZhbHVlKCkpO3JldHVybiBudWxsfX0sRW89Ii8iLmNoYXJDb2RlQXQoMCksTm89Ii4iLmNoYXJDb2RlQXQoMCk7ZnVuY3Rpb24ga28oZSl7Y29uc3QgdD1bXTtmb3IoY29uc3QgbiBvZiBlKTA9PT1uLmxlbmd0aHx8MT09PW4ubGVuZ3RoJiZuLmNoYXJDb2RlQXQoMCk9PT1Ob3x8KDI9PT1uLmxlbmd0aCYmbi5jaGFyQ29kZUF0KDApPT09Tm8mJm4uY2hhckNvZGVBdCgxKT09PU5vP3QucG9wKCk6dC5wdXNoKG4pKTsxPGUubGVuZ3RoJiYwPT09ZVtlLmxlbmd0aC0xXS5sZW5ndGgmJnQucHVzaCgiIik7bGV0IHI9dC5qb2luKCIvIik7cmV0dXJuIHI9MD09PWVbMF0ubGVuZ3RoPyIvIityOnJ9c2VsZi5vbm1lc3NhZ2U9KCk9Pnt3cigoZSx0KT0+bmV3IHhvKGUsdCkpfX0oKTsKCg==', null, false);
4
4
  /* eslint-enable */
5
5
 
6
6
  export { WorkerFactory as default };