@codingame/monaco-editor-wrapper 3.6.0 → 3.7.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.
- package/dist/configuration/index.d.ts +2 -2
- package/dist/css.worker.js +1 -1
- package/dist/html.worker.js +1 -1
- package/dist/json.worker.js +1 -1
- package/package.json +11 -11
- package/stats.html +1 -1
package/dist/json.worker.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { c as createBase64WorkerFactory } from './worker.js';
|
|
2
2
|
|
|
3
|
-
var WorkerFactory = createBase64WorkerFactory('Lyogcm9sbHVwLXBsdWdpbi13ZWItd29ya2VyLWxvYWRlciAqLwohZnVuY3Rpb24oKXsidXNlIHN0cmljdCI7Y29uc3QgZT1uZXcgY2xhc3N7Y29uc3RydWN0b3IoKXt0aGlzLmxpc3RlbmVycz1bXSx0aGlzLnVuZXhwZWN0ZWRFcnJvckhhbmRsZXI9ZnVuY3Rpb24oZSl7c2V0VGltZW91dCgoKCk9PntpZihlLnN0YWNrKXtpZihvLmlzRXJyb3JOb1RlbGVtZXRyeShlKSl0aHJvdyBuZXcgbyhlLm1lc3NhZ2UrIlxuXG4iK2Uuc3RhY2spO3Rocm93IG5ldyBFcnJvcihlLm1lc3NhZ2UrIlxuXG4iK2Uuc3RhY2spfXRocm93IGV9KSwwKX19ZW1pdChlKXt0aGlzLmxpc3RlbmVycy5mb3JFYWNoKCh0PT57dChlKX0pKX1vblVuZXhwZWN0ZWRFcnJvcihlKXt0aGlzLnVuZXhwZWN0ZWRFcnJvckhhbmRsZXIoZSksdGhpcy5lbWl0KGUpfW9uVW5leHBlY3RlZEV4dGVybmFsRXJyb3IoZSl7dGhpcy51bmV4cGVjdGVkRXJyb3JIYW5kbGVyKGUpfX07ZnVuY3Rpb24gdCh0KXsoZnVuY3Rpb24oZSl7aWYoZSBpbnN0YW5jZW9mIGkpcmV0dXJuITA7cmV0dXJuIGUgaW5zdGFuY2VvZiBFcnJvciYmZS5uYW1lPT09ciYmZS5tZXNzYWdlPT09cn0pKHQpfHxlLm9uVW5leHBlY3RlZEVycm9yKHQpfWZ1bmN0aW9uIG4oZSl7aWYoZSBpbnN0YW5jZW9mIEVycm9yKXtjb25zdHtuYW1lOnQsbWVzc2FnZTpufT1lO3JldHVybnskaXNFcnJvcjohMCxuYW1lOnQsbWVzc2FnZTpuLHN0YWNrOmUuc3RhY2t0cmFjZXx8ZS5zdGFjayxub1RlbGVtZXRyeTpvLmlzRXJyb3JOb1RlbGVtZXRyeShlKX19cmV0dXJuIGV9Y29uc3Qgcj0iQ2FuY2VsZWQiO2NsYXNzIGkgZXh0ZW5kcyBFcnJvcntjb25zdHJ1Y3Rvcigpe3N1cGVyKHIpLHRoaXMubmFtZT10aGlzLm1lc3NhZ2V9fWNsYXNzIG8gZXh0ZW5kcyBFcnJvcntjb25zdHJ1Y3RvcihlKXtzdXBlcihlKSx0aGlzLm5hbWU9IkVycm9yTm9UZWxlbWV0cnkifXN0YXRpYyBmcm9tRXJyb3IoZSl7aWYoZSBpbnN0YW5jZW9mIG8pcmV0dXJuIGU7Y29uc3QgdD1uZXcgbztyZXR1cm4gdC5tZXNzYWdlPWUubWVzc2FnZSx0LnN0YWNrPWUuc3RhY2ssdH1zdGF0aWMgaXNFcnJvck5vVGVsZW1ldHJ5KGUpe3JldHVybiJFcnJvck5vVGVsZW1ldHJ5Ij09PWUubmFtZX19ZnVuY3Rpb24gYShlKXtjb25zdCB0PXRoaXM7bGV0IG4scj0hMTtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gcnx8KHI9ITAsbj1lLmFwcGx5KHQsYXJndW1lbnRzKSksbn19dmFyIHM7IWZ1bmN0aW9uKGUpe2UuaXM9ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJiJvYmplY3QiPT10eXBlb2YgZSYmImZ1bmN0aW9uIj09dHlwZW9mIGVbU3ltYm9sLml0ZXJhdG9yXX07Y29uc3QgdD1PYmplY3QuZnJlZXplKFtdKTtmdW5jdGlvbiBuKHQsbj1OdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFkpe2NvbnN0IHI9W107aWYoMD09PW4pcmV0dXJuW3IsdF07Y29uc3QgaT10W1N5bWJvbC5pdGVyYXRvcl0oKTtmb3IobGV0IHQ9MDt0PG47dCsrKXtjb25zdCB0PWkubmV4dCgpO2lmKHQuZG9uZSlyZXR1cm5bcixlLmVtcHR5KCldO3IucHVzaCh0LnZhbHVlKX1yZXR1cm5bcix7W1N5bWJvbC5pdGVyYXRvcl06KCk9Pml9XX1lLmVtcHR5PWZ1bmN0aW9uKCl7cmV0dXJuIHR9LGUuc2luZ2xlPWZ1bmN0aW9uKihlKXt5aWVsZCBlfSxlLmZyb209ZnVuY3Rpb24oZSl7cmV0dXJuIGV8fHR9LGUuaXNFbXB0eT1mdW5jdGlvbihlKXtyZXR1cm4hZXx8ITA9PT1lW1N5bWJvbC5pdGVyYXRvcl0oKS5uZXh0KCkuZG9uZX0sZS5maXJzdD1mdW5jdGlvbihlKXtyZXR1cm4gZVtTeW1ib2wuaXRlcmF0b3JdKCkubmV4dCgpLnZhbHVlfSxlLnNvbWU9ZnVuY3Rpb24oZSx0KXtmb3IoY29uc3QgbiBvZiBlKWlmKHQobikpcmV0dXJuITA7cmV0dXJuITF9LGUuZmluZD1mdW5jdGlvbihlLHQpe2Zvcihjb25zdCBuIG9mIGUpaWYodChuKSlyZXR1cm4gbn0sZS5maWx0ZXI9ZnVuY3Rpb24qKGUsdCl7Zm9yKGNvbnN0IG4gb2YgZSl0KG4pJiYoeWllbGQgbil9LGUubWFwPWZ1bmN0aW9uKihlLHQpe2xldCBuPTA7Zm9yKGNvbnN0IHIgb2YgZSl5aWVsZCB0KHIsbisrKX0sZS5jb25jYXQ9ZnVuY3Rpb24qKC4uLmUpe2Zvcihjb25zdCB0IG9mIGUpZm9yKGNvbnN0IGUgb2YgdCl5aWVsZCBlfSxlLmNvbmNhdE5lc3RlZD1mdW5jdGlvbiooZSl7Zm9yKGNvbnN0IHQgb2YgZSlmb3IoY29uc3QgZSBvZiB0KXlpZWxkIGV9LGUucmVkdWNlPWZ1bmN0aW9uKGUsdCxuKXtsZXQgcj1uO2Zvcihjb25zdCBuIG9mIGUpcj10KHIsbik7cmV0dXJuIHJ9LGUuZm9yRWFjaD1mdW5jdGlvbihlLHQpe2xldCBuPTA7Zm9yKGNvbnN0IHIgb2YgZSl0KHIsbisrKX0sZS5zbGljZT1mdW5jdGlvbiooZSx0LG49ZS5sZW5ndGgpe2Zvcih0PDAmJih0Kz1lLmxlbmd0aCksbjwwP24rPWUubGVuZ3RoOm4+ZS5sZW5ndGgmJihuPWUubGVuZ3RoKTt0PG47dCsrKXlpZWxkIGVbdF19LGUuY29uc3VtZT1uLGUuY29sbGVjdD1mdW5jdGlvbihlKXtyZXR1cm4gbihlKVswXX0sZS5lcXVhbHM9ZnVuY3Rpb24oZSx0LG49KChlLHQpPT5lPT09dCkpe2NvbnN0IHI9ZVtTeW1ib2wuaXRlcmF0b3JdKCksaT10W1N5bWJvbC5pdGVyYXRvcl0oKTtmb3IoOzspe2NvbnN0IGU9ci5uZXh0KCksdD1pLm5leHQoKTtpZihlLmRvbmUhPT10LmRvbmUpcmV0dXJuITE7aWYoZS5kb25lKXJldHVybiEwO2lmKCFuKGUudmFsdWUsdC52YWx1ZSkpcmV0dXJuITF9fX0oc3x8KHM9e30pKTtjbGFzcyBjIGV4dGVuZHMgRXJyb3J7Y29uc3RydWN0b3IoZSl7c3VwZXIoYEVuY291bnRlcmVkIGVycm9ycyB3aGlsZSBkaXNwb3Npbmcgb2Ygc3RvcmUuIEVycm9yczogWyR7ZS5qb2luKCIsICIpfV1gKSx0aGlzLmVycm9ycz1lfX1mdW5jdGlvbiBsKGUpe2lmKHMuaXMoZSkpe2NvbnN0IHQ9W107Zm9yKGNvbnN0IG4gb2YgZSlpZihuKXRyeXtuLmRpc3Bvc2UoKX1jYXRjaChlKXt0LnB1c2goZSl9aWYoMT09PXQubGVuZ3RoKXRocm93IHRbMF07aWYodC5sZW5ndGg+MSl0aHJvdyBuZXcgYyh0KTtyZXR1cm4gQXJyYXkuaXNBcnJheShlKT9bXTplfWlmKGUpcmV0dXJuIGUuZGlzcG9zZSgpLGV9ZnVuY3Rpb24gdShlKXtyZXR1cm57ZGlzcG9zZTphKCgoKT0+e2UoKX0pKX19Y2xhc3MgaHtjb25zdHJ1Y3Rvcigpe3RoaXMuX3RvRGlzcG9zZT1uZXcgU2V0LHRoaXMuX2lzRGlzcG9zZWQ9ITF9ZGlzcG9zZSgpe3RoaXMuX2lzRGlzcG9zZWR8fCh0aGlzLl9pc0Rpc3Bvc2VkPSEwLHRoaXMuY2xlYXIoKSl9Z2V0IGlzRGlzcG9zZWQoKXtyZXR1cm4gdGhpcy5faXNEaXNwb3NlZH1jbGVhcigpe3RyeXtsKHRoaXMuX3RvRGlzcG9zZS52YWx1ZXMoKSl9ZmluYWxseXt0aGlzLl90b0Rpc3Bvc2UuY2xlYXIoKX19YWRkKGUpe2lmKCFlKXJldHVybiBlO2lmKGU9PT10aGlzKXRocm93IG5ldyBFcnJvcigiQ2Fubm90IHJlZ2lzdGVyIGEgZGlzcG9zYWJsZSBvbiBpdHNlbGYhIik7cmV0dXJuIHRoaXMuX2lzRGlzcG9zZWQ/aC5ESVNBQkxFX0RJU1BPU0VEX1dBUk5JTkd8fGNvbnNvbGUud2FybihuZXcgRXJyb3IoIlRyeWluZyB0byBhZGQgYSBkaXNwb3NhYmxlIHRvIGEgRGlzcG9zYWJsZVN0b3JlIHRoYXQgaGFzIGFscmVhZHkgYmVlbiBkaXNwb3NlZCBvZi4gVGhlIGFkZGVkIG9iamVjdCB3aWxsIGJlIGxlYWtlZCEiKS5zdGFjayk6dGhpcy5fdG9EaXNwb3NlLmFkZChlKSxlfX1oLkRJU0FCTEVfRElTUE9TRURfV0FSTklORz0hMTtjbGFzcyBme2NvbnN0cnVjdG9yKCl7dGhpcy5fc3RvcmU9bmV3IGgsdGhpcy5fc3RvcmV9ZGlzcG9zZSgpe3RoaXMuX3N0b3JlLmRpc3Bvc2UoKX1fcmVnaXN0ZXIoZSl7aWYoZT09PXRoaXMpdGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgcmVnaXN0ZXIgYSBkaXNwb3NhYmxlIG9uIGl0c2VsZiEiKTtyZXR1cm4gdGhpcy5fc3RvcmUuYWRkKGUpfX1mLk5vbmU9T2JqZWN0LmZyZWV6ZSh7ZGlzcG9zZSgpe319KTtjbGFzcyBke2NvbnN0cnVjdG9yKCl7dGhpcy5kaXNwb3NlPSgpPT57fSx0aGlzLnVuc2V0PSgpPT57fSx0aGlzLmlzc2V0PSgpPT4hMX1zZXQoZSl7bGV0IHQ9ZTtyZXR1cm4gdGhpcy51bnNldD0oKT0+dD12b2lkIDAsdGhpcy5pc3NldD0oKT0+dm9pZCAwIT09dCx0aGlzLmRpc3Bvc2U9KCk9Pnt0JiYodCgpLHQ9dm9pZCAwKX0sdGhpc319Y2xhc3MgbXtjb25zdHJ1Y3RvcihlKXt0aGlzLmVsZW1lbnQ9ZSx0aGlzLm5leHQ9bS5VbmRlZmluZWQsdGhpcy5wcmV2PW0uVW5kZWZpbmVkfX1tLlVuZGVmaW5lZD1uZXcgbSh2b2lkIDApO2NsYXNzIGd7Y29uc3RydWN0b3IoKXt0aGlzLl9maXJzdD1tLlVuZGVmaW5lZCx0aGlzLl9sYXN0PW0uVW5kZWZpbmVkLHRoaXMuX3NpemU9MH1nZXQgc2l6ZSgpe3JldHVybiB0aGlzLl9zaXplfWlzRW1wdHkoKXtyZXR1cm4gdGhpcy5fZmlyc3Q9PT1tLlVuZGVmaW5lZH1jbGVhcigpe2xldCBlPXRoaXMuX2ZpcnN0O2Zvcig7ZSE9PW0uVW5kZWZpbmVkOyl7Y29uc3QgdD1lLm5leHQ7ZS5wcmV2PW0uVW5kZWZpbmVkLGUubmV4dD1tLlVuZGVmaW5lZCxlPXR9dGhpcy5fZmlyc3Q9bS5VbmRlZmluZWQsdGhpcy5fbGFzdD1tLlVuZGVmaW5lZCx0aGlzLl9zaXplPTB9dW5zaGlmdChlKXtyZXR1cm4gdGhpcy5faW5zZXJ0KGUsITEpfXB1c2goZSl7cmV0dXJuIHRoaXMuX2luc2VydChlLCEwKX1faW5zZXJ0KGUsdCl7Y29uc3Qgbj1uZXcgbShlKTtpZih0aGlzLl9maXJzdD09PW0uVW5kZWZpbmVkKXRoaXMuX2ZpcnN0PW4sdGhpcy5fbGFzdD1uO2Vsc2UgaWYodCl7Y29uc3QgZT10aGlzLl9sYXN0O3RoaXMuX2xhc3Q9bixuLnByZXY9ZSxlLm5leHQ9bn1lbHNle2NvbnN0IGU9dGhpcy5fZmlyc3Q7dGhpcy5fZmlyc3Q9bixuLm5leHQ9ZSxlLnByZXY9bn10aGlzLl9zaXplKz0xO2xldCByPSExO3JldHVybigpPT57cnx8KHI9ITAsdGhpcy5fcmVtb3ZlKG4pKX19c2hpZnQoKXtpZih0aGlzLl9maXJzdCE9PW0uVW5kZWZpbmVkKXtjb25zdCBlPXRoaXMuX2ZpcnN0LmVsZW1lbnQ7cmV0dXJuIHRoaXMuX3JlbW92ZSh0aGlzLl9maXJzdCksZX19cG9wKCl7aWYodGhpcy5fbGFzdCE9PW0uVW5kZWZpbmVkKXtjb25zdCBlPXRoaXMuX2xhc3QuZWxlbWVudDtyZXR1cm4gdGhpcy5fcmVtb3ZlKHRoaXMuX2xhc3QpLGV9fV9yZW1vdmUoZSl7aWYoZS5wcmV2IT09bS5VbmRlZmluZWQmJmUubmV4dCE9PW0uVW5kZWZpbmVkKXtjb25zdCB0PWUucHJldjt0Lm5leHQ9ZS5uZXh0LGUubmV4dC5wcmV2PXR9ZWxzZSBlLnByZXY9PT1tLlVuZGVmaW5lZCYmZS5uZXh0PT09bS5VbmRlZmluZWQ/KHRoaXMuX2ZpcnN0PW0uVW5kZWZpbmVkLHRoaXMuX2xhc3Q9bS5VbmRlZmluZWQpOmUubmV4dD09PW0uVW5kZWZpbmVkPyh0aGlzLl9sYXN0PXRoaXMuX2xhc3QucHJldix0aGlzLl9sYXN0Lm5leHQ9bS5VbmRlZmluZWQpOmUucHJldj09PW0uVW5kZWZpbmVkJiYodGhpcy5fZmlyc3Q9dGhpcy5fZmlyc3QubmV4dCx0aGlzLl9maXJzdC5wcmV2PW0uVW5kZWZpbmVkKTt0aGlzLl9zaXplLT0xfSpbU3ltYm9sLml0ZXJhdG9yXSgpe2xldCBlPXRoaXMuX2ZpcnN0O2Zvcig7ZSE9PW0uVW5kZWZpbmVkOyl5aWVsZCBlLmVsZW1lbnQsZT1lLm5leHR9fWxldCBwPSJ1bmRlZmluZWQiIT10eXBlb2YgZG9jdW1lbnQmJmRvY3VtZW50LmxvY2F0aW9uJiZkb2N1bWVudC5sb2NhdGlvbi5oYXNoLmluZGV4T2YoInBzZXVkbz10cnVlIik+PTA7dmFyIGI7Y29uc3Qgdj0iZW4iO2xldCB5LEMsdyxfPSExLFM9ITEsQT0hMSxFPSExLHg9djtjb25zdCBOPSJvYmplY3QiPT10eXBlb2Ygc2VsZj9zZWxmOiJvYmplY3QiPT10eXBlb2YgZ2xvYmFsP2dsb2JhbDp7fTtsZXQgazt2b2lkIDAhPT1OLnZzY29kZSYmdm9pZCAwIT09Ti52c2NvZGUucHJvY2Vzcz9rPU4udnNjb2RlLnByb2Nlc3M6InVuZGVmaW5lZCIhPXR5cGVvZiBwcm9jZXNzJiYoaz1wcm9jZXNzKTtjb25zdCBMPSJzdHJpbmciPT10eXBlb2YobnVsbD09PShiPW51bGw9PWs/dm9pZCAwOmsudmVyc2lvbnMpfHx2b2lkIDA9PT1iP3ZvaWQgMDpiLmVsZWN0cm9uKSYmInJlbmRlcmVyIj09PShudWxsPT1rP3ZvaWQgMDprLnR5cGUpO2lmKCJvYmplY3QiIT10eXBlb2YgbmF2aWdhdG9yfHxMKWlmKCJvYmplY3QiPT10eXBlb2Ygayl7Xz0id2luMzIiPT09ay5wbGF0Zm9ybSxTPSJkYXJ3aW4iPT09ay5wbGF0Zm9ybSxBPSJsaW51eCI9PT1rLnBsYXRmb3JtLEEmJmsuZW52LlNOQVAmJmsuZW52LlNOQVBfUkVWSVNJT04say5lbnYuQ0l8fGsuZW52LkJVSUxEX0FSVElGQUNUU1RBR0lOR0RJUkVDVE9SWSx5PXYseD12O2NvbnN0IGU9ay5lbnYuVlNDT0RFX05MU19DT05GSUc7aWYoZSl0cnl7Y29uc3QgdD1KU09OLnBhcnNlKGUpLG49dC5hdmFpbGFibGVMYW5ndWFnZXNbIioiXTt5PXQubG9jYWxlLHg9bnx8dixDPXQuX3RyYW5zbGF0aW9uc0NvbmZpZ0ZpbGV9Y2F0Y2goZSl7fX1lbHNlIGNvbnNvbGUuZXJyb3IoIlVuYWJsZSB0byByZXNvbHZlIHBsYXRmb3JtLiIpO2Vsc2Ugdz1uYXZpZ2F0b3IudXNlckFnZW50LF89dy5pbmRleE9mKCJXaW5kb3dzIik+PTAsUz13LmluZGV4T2YoIk1hY2ludG9zaCIpPj0wLCh3LmluZGV4T2YoIk1hY2ludG9zaCIpPj0wfHx3LmluZGV4T2YoImlQYWQiKT49MHx8dy5pbmRleE9mKCJpUGhvbmUiKT49MCkmJm5hdmlnYXRvci5tYXhUb3VjaFBvaW50cyYmbmF2aWdhdG9yLm1heFRvdWNoUG9pbnRzLEE9dy5pbmRleE9mKCJMaW51eCIpPj0wLEU9ITAsZnVuY3Rpb24oZSx0LC4uLm4peyFmdW5jdGlvbihlLHQpe2xldCBuO249MD09PXQubGVuZ3RoP2U6ZS5yZXBsYWNlKC9ceyhcZCspXH0vZywoKGUsbik9Pntjb25zdCByPW5bMF0saT10W3JdO2xldCBvPWU7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBpP289aToibnVtYmVyIiE9dHlwZW9mIGkmJiJib29sZWFuIiE9dHlwZW9mIGkmJm51bGwhPWl8fChvPVN0cmluZyhpKSksb30pKSxwJiYobj0i77y7IituLnJlcGxhY2UoL1thb3VlaV0vZywiJCYkJiIpKyLvvL0iKX0odCxuKX0oMCwiXyIpLHk9dix4PXk7Y29uc3QgVD1fLE89UztFJiZOLmltcG9ydFNjcmlwdHM7Y29uc3QgST13LE09ImZ1bmN0aW9uIj09dHlwZW9mIE4ucG9zdE1lc3NhZ2UmJiFOLmltcG9ydFNjcmlwdHM7KCgpPT57aWYoTSl7Y29uc3QgZT1bXTtOLmFkZEV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLCh0PT57aWYodC5kYXRhJiZ0LmRhdGEudnNjb2RlU2NoZWR1bGVBc3luY1dvcmspZm9yKGxldCBuPTAscj1lLmxlbmd0aDtuPHI7bisrKXtjb25zdCByPWVbbl07aWYoci5pZD09PXQuZGF0YS52c2NvZGVTY2hlZHVsZUFzeW5jV29yaylyZXR1cm4gZS5zcGxpY2UobiwxKSx2b2lkIHIuY2FsbGJhY2soKX19KSk7bGV0IHQ9MDtyZXR1cm4gbj0+e2NvbnN0IHI9Kyt0O2UucHVzaCh7aWQ6cixjYWxsYmFjazpufSksTi5wb3N0TWVzc2FnZSh7dnNjb2RlU2NoZWR1bGVBc3luY1dvcms6cn0sIioiKX19fSkoKTtjb25zdCBQPSEhKEkmJkkuaW5kZXhPZigiQ2hyb21lIik+PTApO0kmJkkuaW5kZXhPZigiRmlyZWZveCIpLCFQJiZJJiZJLmluZGV4T2YoIlNhZmFyaSIpLEkmJkkuaW5kZXhPZigiRWRnLyIpLEkmJkkuaW5kZXhPZigiQW5kcm9pZCIpO2NvbnN0IFI9Ti5wZXJmb3JtYW5jZSYmImZ1bmN0aW9uIj09dHlwZW9mIE4ucGVyZm9ybWFuY2Uubm93O2NsYXNzIFZ7Y29uc3RydWN0b3IoZSl7dGhpcy5faGlnaFJlc29sdXRpb249UiYmZSx0aGlzLl9zdGFydFRpbWU9dGhpcy5fbm93KCksdGhpcy5fc3RvcFRpbWU9LTF9c3RhdGljIGNyZWF0ZShlPSEwKXtyZXR1cm4gbmV3IFYoZSl9c3RvcCgpe3RoaXMuX3N0b3BUaW1lPXRoaXMuX25vdygpfWVsYXBzZWQoKXtyZXR1cm4tMSE9PXRoaXMuX3N0b3BUaW1lP3RoaXMuX3N0b3BUaW1lLXRoaXMuX3N0YXJ0VGltZTp0aGlzLl9ub3coKS10aGlzLl9zdGFydFRpbWV9X25vdygpe3JldHVybiB0aGlzLl9oaWdoUmVzb2x1dGlvbj9OLnBlcmZvcm1hbmNlLm5vdygpOkRhdGUubm93KCl9fXZhciBGLEQ7IWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoZSl7cmV0dXJuKHQsbj1udWxsLHIpPT57bGV0IGksbz0hMTtyZXR1cm4gaT1lKChlPT57aWYoIW8pcmV0dXJuIGk/aS5kaXNwb3NlKCk6bz0hMCx0LmNhbGwobixlKX0pLG51bGwsciksbyYmaS5kaXNwb3NlKCksaX19ZnVuY3Rpb24gbihlLHQsbil7cmV0dXJuIGEoKChuLHI9bnVsbCxpKT0+ZSgoZT0+bi5jYWxsKHIsdChlKSkpLG51bGwsaSkpLG4pfWZ1bmN0aW9uIHIoZSx0LG4pe3JldHVybiBhKCgobixyPW51bGwsaSk9PmUoKGU9Pnt0KGUpLG4uY2FsbChyLGUpfSksbnVsbCxpKSksbil9ZnVuY3Rpb24gaShlLHQsbil7cmV0dXJuIGEoKChuLHI9bnVsbCxpKT0+ZSgoZT0+dChlKSYmbi5jYWxsKHIsZSkpLG51bGwsaSkpLG4pfWZ1bmN0aW9uIG8oZSx0LHIsaSl7bGV0IG89cjtyZXR1cm4gbihlLChlPT4obz10KG8sZSksbykpLGkpfWZ1bmN0aW9uIGEoZSx0KXtsZXQgbjtjb25zdCByPW5ldyBCKHtvbkZpcnN0TGlzdGVuZXJBZGQoKXtuPWUoci5maXJlLHIpfSxvbkxhc3RMaXN0ZW5lclJlbW92ZSgpe251bGw9PW58fG4uZGlzcG9zZSgpfX0pO3JldHVybiBudWxsPT10fHx0LmFkZChyKSxyLmV2ZW50fWZ1bmN0aW9uIHMoZSx0LG49MTAwLHI9ITEsaSxvKXtsZXQgYSxzLGMsbD0wO2NvbnN0IHU9bmV3IEIoe2xlYWtXYXJuaW5nVGhyZXNob2xkOmksb25GaXJzdExpc3RlbmVyQWRkKCl7YT1lKChlPT57bCsrLHM9dChzLGUpLHImJiFjJiYodS5maXJlKHMpLHM9dm9pZCAwKSxjbGVhclRpbWVvdXQoYyksYz1zZXRUaW1lb3V0KCgoKT0+e2NvbnN0IGU9cztzPXZvaWQgMCxjPXZvaWQgMCwoIXJ8fGw+MSkmJnUuZmlyZShlKSxsPTB9KSxuKX0pKX0sb25MYXN0TGlzdGVuZXJSZW1vdmUoKXthLmRpc3Bvc2UoKX19KTtyZXR1cm4gbnVsbD09b3x8by5hZGQodSksdS5ldmVudH1mdW5jdGlvbiBjKGUsdD0oKGUsdCk9PmU9PT10KSxuKXtsZXQgcixvPSEwO3JldHVybiBpKGUsKGU9Pntjb25zdCBuPW98fCF0KGUscik7cmV0dXJuIG89ITEscj1lLG59KSxuKX1lLk5vbmU9KCk9PmYuTm9uZSxlLm9uY2U9dCxlLm1hcD1uLGUuZm9yRWFjaD1yLGUuZmlsdGVyPWksZS5zaWduYWw9ZnVuY3Rpb24oZSl7cmV0dXJuIGV9LGUuYW55PWZ1bmN0aW9uKC4uLmUpe3JldHVybih0LG49bnVsbCxyKT0+ZnVuY3Rpb24oLi4uZSl7cmV0dXJuIHUoKCgpPT5sKGUpKSl9KC4uLmUubWFwKChlPT5lKChlPT50LmNhbGwobixlKSksbnVsbCxyKSkpKX0sZS5yZWR1Y2U9byxlLmRlYm91bmNlPXMsZS5sYXRjaD1jLGUuc3BsaXQ9ZnVuY3Rpb24odCxuLHIpe3JldHVybltlLmZpbHRlcih0LG4sciksZS5maWx0ZXIodCwoZT0+IW4oZSkpLHIpXX0sZS5idWZmZXI9ZnVuY3Rpb24oZSx0PSExLG49W10pe2xldCByPW4uc2xpY2UoKSxpPWUoKGU9PntyP3IucHVzaChlKTphLmZpcmUoZSl9KSk7Y29uc3Qgbz0oKT0+e251bGw9PXJ8fHIuZm9yRWFjaCgoZT0+YS5maXJlKGUpKSkscj1udWxsfSxhPW5ldyBCKHtvbkZpcnN0TGlzdGVuZXJBZGQoKXtpfHwoaT1lKChlPT5hLmZpcmUoZSkpKSl9LG9uRmlyc3RMaXN0ZW5lckRpZEFkZCgpe3ImJih0P3NldFRpbWVvdXQobyk6bygpKX0sb25MYXN0TGlzdGVuZXJSZW1vdmUoKXtpJiZpLmRpc3Bvc2UoKSxpPW51bGx9fSk7cmV0dXJuIGEuZXZlbnR9O2NsYXNzIGR7Y29uc3RydWN0b3IoZSl7dGhpcy5ldmVudD1lLHRoaXMuZGlzcG9zYWJsZXM9bmV3IGh9bWFwKGUpe3JldHVybiBuZXcgZChuKHRoaXMuZXZlbnQsZSx0aGlzLmRpc3Bvc2FibGVzKSl9Zm9yRWFjaChlKXtyZXR1cm4gbmV3IGQocih0aGlzLmV2ZW50LGUsdGhpcy5kaXNwb3NhYmxlcykpfWZpbHRlcihlKXtyZXR1cm4gbmV3IGQoaSh0aGlzLmV2ZW50LGUsdGhpcy5kaXNwb3NhYmxlcykpfXJlZHVjZShlLHQpe3JldHVybiBuZXcgZChvKHRoaXMuZXZlbnQsZSx0LHRoaXMuZGlzcG9zYWJsZXMpKX1sYXRjaCgpe3JldHVybiBuZXcgZChjKHRoaXMuZXZlbnQsdm9pZCAwLHRoaXMuZGlzcG9zYWJsZXMpKX1kZWJvdW5jZShlLHQ9MTAwLG49ITEscil7cmV0dXJuIG5ldyBkKHModGhpcy5ldmVudCxlLHQsbixyLHRoaXMuZGlzcG9zYWJsZXMpKX1vbihlLHQsbil7cmV0dXJuIHRoaXMuZXZlbnQoZSx0LG4pfW9uY2UoZSxuLHIpe3JldHVybiB0KHRoaXMuZXZlbnQpKGUsbixyKX1kaXNwb3NlKCl7dGhpcy5kaXNwb3NhYmxlcy5kaXNwb3NlKCl9fWUuY2hhaW49ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBkKGUpfSxlLmZyb21Ob2RlRXZlbnRFbWl0dGVyPWZ1bmN0aW9uKGUsdCxuPShlPT5lKSl7Y29uc3Qgcj0oLi4uZSk9PmkuZmlyZShuKC4uLmUpKSxpPW5ldyBCKHtvbkZpcnN0TGlzdGVuZXJBZGQ6KCk9PmUub24odCxyKSxvbkxhc3RMaXN0ZW5lclJlbW92ZTooKT0+ZS5yZW1vdmVMaXN0ZW5lcih0LHIpfSk7cmV0dXJuIGkuZXZlbnR9LGUuZnJvbURPTUV2ZW50RW1pdHRlcj1mdW5jdGlvbihlLHQsbj0oZT0+ZSkpe2NvbnN0IHI9KC4uLmUpPT5pLmZpcmUobiguLi5lKSksaT1uZXcgQih7b25GaXJzdExpc3RlbmVyQWRkOigpPT5lLmFkZEV2ZW50TGlzdGVuZXIodCxyKSxvbkxhc3RMaXN0ZW5lclJlbW92ZTooKT0+ZS5yZW1vdmVFdmVudExpc3RlbmVyKHQscil9KTtyZXR1cm4gaS5ldmVudH0sZS50b1Byb21pc2U9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBQcm9taXNlKChuPT50KGUpKG4pKSl9LGUucnVuQW5kU3Vic2NyaWJlPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHQodm9pZCAwKSxlKChlPT50KGUpKSl9LGUucnVuQW5kU3Vic2NyaWJlV2l0aFN0b3JlPWZ1bmN0aW9uKGUsdCl7bGV0IG49bnVsbDtmdW5jdGlvbiByKGUpe251bGw9PW58fG4uZGlzcG9zZSgpLG49bmV3IGgsdChlLG4pfXIodm9pZCAwKTtjb25zdCBpPWUoKGU9PnIoZSkpKTtyZXR1cm4gdSgoKCk9PntpLmRpc3Bvc2UoKSxudWxsPT1ufHxuLmRpc3Bvc2UoKX0pKX07Y2xhc3MgbXtjb25zdHJ1Y3RvcihlLHQpe3RoaXMub2JzPWUsdGhpcy5fY291bnRlcj0wLHRoaXMuX2hhc0NoYW5nZWQ9ITE7Y29uc3Qgbj17b25GaXJzdExpc3RlbmVyQWRkOigpPT57ZS5hZGRPYnNlcnZlcih0aGlzKX0sb25MYXN0TGlzdGVuZXJSZW1vdmU6KCk9PntlLnJlbW92ZU9ic2VydmVyKHRoaXMpfX07dGhpcy5lbWl0dGVyPW5ldyBCKG4pLHQmJnQuYWRkKHRoaXMuZW1pdHRlcil9YmVnaW5VcGRhdGUoZSl7dGhpcy5fY291bnRlcisrfWhhbmRsZUNoYW5nZShlLHQpe3RoaXMuX2hhc0NoYW5nZWQ9ITB9ZW5kVXBkYXRlKGUpezA9PS0tdGhpcy5fY291bnRlciYmdGhpcy5faGFzQ2hhbmdlZCYmKHRoaXMuX2hhc0NoYW5nZWQ9ITEsdGhpcy5lbWl0dGVyLmZpcmUodGhpcy5vYnMuZ2V0KCkpKX19ZS5mcm9tT2JzZXJ2YWJsZT1mdW5jdGlvbihlLHQpe3JldHVybiBuZXcgbShlLHQpLmVtaXR0ZXIuZXZlbnR9fShGfHwoRj17fSkpO2NsYXNzIEt7Y29uc3RydWN0b3IoZSl7dGhpcy5fbGlzdGVuZXJDb3VudD0wLHRoaXMuX2ludm9jYXRpb25Db3VudD0wLHRoaXMuX2VsYXBzZWRPdmVyYWxsPTAsdGhpcy5fbmFtZT1gJHtlfV8ke0suX2lkUG9vbCsrfWB9c3RhcnQoZSl7dGhpcy5fc3RvcFdhdGNoPW5ldyBWKCEwKSx0aGlzLl9saXN0ZW5lckNvdW50PWV9c3RvcCgpe2lmKHRoaXMuX3N0b3BXYXRjaCl7Y29uc3QgZT10aGlzLl9zdG9wV2F0Y2guZWxhcHNlZCgpO3RoaXMuX2VsYXBzZWRPdmVyYWxsKz1lLHRoaXMuX2ludm9jYXRpb25Db3VudCs9MSxjb25zb2xlLmluZm8oYGRpZCBGSVJFICR7dGhpcy5fbmFtZX06IGVsYXBzZWRfbXM6ICR7ZS50b0ZpeGVkKDUpfSwgbGlzdGVuZXI6ICR7dGhpcy5fbGlzdGVuZXJDb3VudH0gKGVsYXBzZWRfb3ZlcmFsbDogJHt0aGlzLl9lbGFwc2VkT3ZlcmFsbC50b0ZpeGVkKDIpfSwgaW52b2NhdGlvbnM6ICR7dGhpcy5faW52b2NhdGlvbkNvdW50fSlgKSx0aGlzLl9zdG9wV2F0Y2g9dm9pZCAwfX19Sy5faWRQb29sPTA7Y2xhc3Mgantjb25zdHJ1Y3RvcihlKXt0aGlzLnZhbHVlPWV9c3RhdGljIGNyZWF0ZSgpe3ZhciBlO3JldHVybiBuZXcgaihudWxsIT09KGU9KG5ldyBFcnJvcikuc3RhY2spJiZ2b2lkIDAhPT1lP2U6IiIpfXByaW50KCl7Y29uc29sZS53YXJuKHRoaXMudmFsdWUuc3BsaXQoIlxuIikuc2xpY2UoMikuam9pbigiXG4iKSl9fWNsYXNzIFV7Y29uc3RydWN0b3IoZSx0LG4pe3RoaXMuY2FsbGJhY2s9ZSx0aGlzLmNhbGxiYWNrVGhpcz10LHRoaXMuc3RhY2s9bix0aGlzLnN1YnNjcmlwdGlvbj1uZXcgZH1pbnZva2UoZSl7dGhpcy5jYWxsYmFjay5jYWxsKHRoaXMuY2FsbGJhY2tUaGlzLGUpfX1jbGFzcyBCe2NvbnN0cnVjdG9yKGUpe3ZhciB0LG47dGhpcy5fZGlzcG9zZWQ9ITEsdGhpcy5fb3B0aW9ucz1lLHRoaXMuX2xlYWthZ2VNb249dm9pZCAwLHRoaXMuX3BlcmZNb249KG51bGw9PT0odD10aGlzLl9vcHRpb25zKXx8dm9pZCAwPT09dD92b2lkIDA6dC5fcHJvZk5hbWUpP25ldyBLKHRoaXMuX29wdGlvbnMuX3Byb2ZOYW1lKTp2b2lkIDAsdGhpcy5fZGVsaXZlcnlRdWV1ZT1udWxsPT09KG49dGhpcy5fb3B0aW9ucyl8fHZvaWQgMD09PW4/dm9pZCAwOm4uZGVsaXZlcnlRdWV1ZX1kaXNwb3NlKCl7dmFyIGUsdCxuLHI7dGhpcy5fZGlzcG9zZWR8fCh0aGlzLl9kaXNwb3NlZD0hMCx0aGlzLl9saXN0ZW5lcnMmJnRoaXMuX2xpc3RlbmVycy5jbGVhcigpLG51bGw9PT0oZT10aGlzLl9kZWxpdmVyeVF1ZXVlKXx8dm9pZCAwPT09ZXx8ZS5jbGVhcih0aGlzKSxudWxsPT09KG49bnVsbD09PSh0PXRoaXMuX29wdGlvbnMpfHx2b2lkIDA9PT10P3ZvaWQgMDp0Lm9uTGFzdExpc3RlbmVyUmVtb3ZlKXx8dm9pZCAwPT09bnx8bi5jYWxsKHQpLG51bGw9PT0ocj10aGlzLl9sZWFrYWdlTW9uKXx8dm9pZCAwPT09cnx8ci5kaXNwb3NlKCkpfWdldCBldmVudCgpe3JldHVybiB0aGlzLl9ldmVudHx8KHRoaXMuX2V2ZW50PShlLHQsbik9Pnt2YXIgcixpLG87dGhpcy5fbGlzdGVuZXJzfHwodGhpcy5fbGlzdGVuZXJzPW5ldyBnKTtjb25zdCBhPXRoaXMuX2xpc3RlbmVycy5pc0VtcHR5KCk7bGV0IHMsYzthJiYobnVsbD09PShyPXRoaXMuX29wdGlvbnMpfHx2b2lkIDA9PT1yP3ZvaWQgMDpyLm9uRmlyc3RMaXN0ZW5lckFkZCkmJnRoaXMuX29wdGlvbnMub25GaXJzdExpc3RlbmVyQWRkKHRoaXMpLHRoaXMuX2xlYWthZ2VNb24mJnRoaXMuX2xpc3RlbmVycy5zaXplPj0zMCYmKGM9ai5jcmVhdGUoKSxzPXRoaXMuX2xlYWthZ2VNb24uY2hlY2soYyx0aGlzLl9saXN0ZW5lcnMuc2l6ZSsxKSk7Y29uc3QgbD1uZXcgVShlLHQsYyksdT10aGlzLl9saXN0ZW5lcnMucHVzaChsKTthJiYobnVsbD09PShpPXRoaXMuX29wdGlvbnMpfHx2b2lkIDA9PT1pP3ZvaWQgMDppLm9uRmlyc3RMaXN0ZW5lckRpZEFkZCkmJnRoaXMuX29wdGlvbnMub25GaXJzdExpc3RlbmVyRGlkQWRkKHRoaXMpLChudWxsPT09KG89dGhpcy5fb3B0aW9ucyl8fHZvaWQgMD09PW8/dm9pZCAwOm8ub25MaXN0ZW5lckRpZEFkZCkmJnRoaXMuX29wdGlvbnMub25MaXN0ZW5lckRpZEFkZCh0aGlzLGUsdCk7Y29uc3QgZj1sLnN1YnNjcmlwdGlvbi5zZXQoKCgpPT57aWYobnVsbD09c3x8cygpLCF0aGlzLl9kaXNwb3NlZCYmKHUoKSx0aGlzLl9vcHRpb25zJiZ0aGlzLl9vcHRpb25zLm9uTGFzdExpc3RlbmVyUmVtb3ZlKSl7dGhpcy5fbGlzdGVuZXJzJiYhdGhpcy5fbGlzdGVuZXJzLmlzRW1wdHkoKXx8dGhpcy5fb3B0aW9ucy5vbkxhc3RMaXN0ZW5lclJlbW92ZSh0aGlzKX19KSk7cmV0dXJuIG4gaW5zdGFuY2VvZiBoP24uYWRkKGYpOkFycmF5LmlzQXJyYXkobikmJm4ucHVzaChmKSxmfSksdGhpcy5fZXZlbnR9ZmlyZShlKXt2YXIgdCxuO2lmKHRoaXMuX2xpc3RlbmVycyl7dGhpcy5fZGVsaXZlcnlRdWV1ZXx8KHRoaXMuX2RlbGl2ZXJ5UXVldWU9bmV3ICQpO2Zvcihjb25zdCB0IG9mIHRoaXMuX2xpc3RlbmVycyl0aGlzLl9kZWxpdmVyeVF1ZXVlLnB1c2godGhpcyx0LGUpO251bGw9PT0odD10aGlzLl9wZXJmTW9uKXx8dm9pZCAwPT09dHx8dC5zdGFydCh0aGlzLl9kZWxpdmVyeVF1ZXVlLnNpemUpLHRoaXMuX2RlbGl2ZXJ5UXVldWUuZGVsaXZlcigpLG51bGw9PT0obj10aGlzLl9wZXJmTW9uKXx8dm9pZCAwPT09bnx8bi5zdG9wKCl9fX1jbGFzcyBxe2NvbnN0cnVjdG9yKCl7dGhpcy5fcXVldWU9bmV3IGd9Z2V0IHNpemUoKXtyZXR1cm4gdGhpcy5fcXVldWUuc2l6ZX1wdXNoKGUsdCxuKXt0aGlzLl9xdWV1ZS5wdXNoKG5ldyBXKGUsdCxuKSl9Y2xlYXIoZSl7Y29uc3QgdD1uZXcgZztmb3IoY29uc3QgbiBvZiB0aGlzLl9xdWV1ZSluLmVtaXR0ZXIhPT1lJiZ0LnB1c2gobik7dGhpcy5fcXVldWU9dH1kZWxpdmVyKCl7Zm9yKDt0aGlzLl9xdWV1ZS5zaXplPjA7KXtjb25zdCBlPXRoaXMuX3F1ZXVlLnNoaWZ0KCk7dHJ5e2UubGlzdGVuZXIuaW52b2tlKGUuZXZlbnQpfWNhdGNoKGUpe3QoZSl9fX19Y2xhc3MgJCBleHRlbmRzIHF7Y2xlYXIoZSl7dGhpcy5fcXVldWUuY2xlYXIoKX19Y2xhc3MgV3tjb25zdHJ1Y3RvcihlLHQsbil7dGhpcy5lbWl0dGVyPWUsdGhpcy5saXN0ZW5lcj10LHRoaXMuZXZlbnQ9bn19ZnVuY3Rpb24gSChlKXtjb25zdCB0PVtdO2Zvcihjb25zdCBuIG9mIGZ1bmN0aW9uKGUpe2xldCB0PVtdLG49T2JqZWN0LmdldFByb3RvdHlwZU9mKGUpO2Zvcig7T2JqZWN0LnByb3RvdHlwZSE9PW47KXQ9dC5jb25jYXQoT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMobikpLG49T2JqZWN0LmdldFByb3RvdHlwZU9mKG4pO3JldHVybiB0fShlKSkiZnVuY3Rpb24iPT10eXBlb2YgZVtuXSYmdC5wdXNoKG4pO3JldHVybiB0fWZ1bmN0aW9uIHooZSx0PSJVbnJlYWNoYWJsZSIpe3Rocm93IG5ldyBFcnJvcih0KX1jbGFzcyBHe2NvbnN0cnVjdG9yKGUpe3RoaXMuZXhlY3V0b3I9ZSx0aGlzLl9kaWRSdW49ITF9aGFzVmFsdWUoKXtyZXR1cm4gdGhpcy5fZGlkUnVufWdldFZhbHVlKCl7aWYoIXRoaXMuX2RpZFJ1bil0cnl7dGhpcy5fdmFsdWU9dGhpcy5leGVjdXRvcigpfWNhdGNoKGUpe3RoaXMuX2Vycm9yPWV9ZmluYWxseXt0aGlzLl9kaWRSdW49ITB9aWYodGhpcy5fZXJyb3IpdGhyb3cgdGhpcy5fZXJyb3I7cmV0dXJuIHRoaXMuX3ZhbHVlfWdldCByYXdWYWx1ZSgpe3JldHVybiB0aGlzLl92YWx1ZX19ZnVuY3Rpb24gSihlKXtyZXR1cm4gZT49NjUmJmU8PTkwfWZ1bmN0aW9uIFgoZSl7cmV0dXJuIDU1Mjk2PD1lJiZlPD01NjMxOX1mdW5jdGlvbiBaKGUsdCxuKXtjb25zdCByPWUuY2hhckNvZGVBdChuKTtpZihYKHIpJiZuKzE8dCl7Y29uc3QgdD1lLmNoYXJDb2RlQXQobisxKTtpZihmdW5jdGlvbihlKXtyZXR1cm4gNTYzMjA8PWUmJmU8PTU3MzQzfSh0KSlyZXR1cm4gdC01NjMyMCsoci01NTI5Njw8MTApKzY1NTM2fXJldHVybiByfWNvbnN0IFk9L15bXHRcblxyXHgyMC1ceDdFXSokLztjbGFzcyBRe2NvbnN0cnVjdG9yKGUpe3RoaXMuY29uZnVzYWJsZURpY3Rpb25hcnk9ZX1zdGF0aWMgZ2V0SW5zdGFuY2UoZSl7cmV0dXJuIFEuY2FjaGUuZ2V0KEFycmF5LmZyb20oZSkpfXN0YXRpYyBnZXRMb2NhbGVzKCl7cmV0dXJuIFEuX2xvY2FsZXMuZ2V0VmFsdWUoKX1pc0FtYmlndW91cyhlKXtyZXR1cm4gdGhpcy5jb25mdXNhYmxlRGljdGlvbmFyeS5oYXMoZSl9Z2V0UHJpbWFyeUNvbmZ1c2FibGUoZSl7cmV0dXJuIHRoaXMuY29uZnVzYWJsZURpY3Rpb25hcnkuZ2V0KGUpfWdldENvbmZ1c2FibGVDb2RlUG9pbnRzKCl7cmV0dXJuIG5ldyBTZXQodGhpcy5jb25mdXNhYmxlRGljdGlvbmFyeS5rZXlzKCkpfX1EPVEsUS5hbWJpZ3VvdXNDaGFyYWN0ZXJEYXRhPW5ldyBHKCgoKT0+SlNPTi5wYXJzZSgneyJfY29tbW9uIjpbODIzMiwzMiw4MjMzLDMyLDU3NjAsMzIsODE5MiwzMiw4MTkzLDMyLDgxOTQsMzIsODE5NSwzMiw4MTk2LDMyLDgxOTcsMzIsODE5OCwzMiw4MjAwLDMyLDgyMDEsMzIsODIwMiwzMiw4Mjg3LDMyLDgxOTksMzIsODIzOSwzMiwyMDQyLDk1LDY1MTAxLDk1LDY1MTAyLDk1LDY1MTAzLDk1LDgyMDgsNDUsODIwOSw0NSw4MjEwLDQ1LDY1MTEyLDQ1LDE3NDgsNDUsODI1OSw0NSw3MjcsNDUsODcyMiw0NSwxMDEzNCw0NSwxMTQ1MCw0NSwxNTQ5LDQ0LDE2NDMsNDQsODIxOCw0NCwxODQsNDQsNDIyMzMsNDQsODk0LDU5LDIzMDcsNTgsMjY5MSw1OCwxNDE3LDU4LDE3OTUsNTgsMTc5Niw1OCw1ODY4LDU4LDY1MDcyLDU4LDYxNDcsNTgsNjE1Myw1OCw4MjgyLDU4LDE0NzUsNTgsNzYwLDU4LDQyODg5LDU4LDg3NTgsNTgsNzIwLDU4LDQyMjM3LDU4LDQ1MSwzMywxMTYwMSwzMyw2NjAsNjMsNTc3LDYzLDI0MjksNjMsNTAzOCw2Myw0MjczMSw2MywxMTkxNDksNDYsODIyOCw0NiwxNzkzLDQ2LDE3OTQsNDYsNDI1MTAsNDYsNjgxNzYsNDYsMTYzMiw0NiwxNzc2LDQ2LDQyMjMyLDQ2LDEzNzMsOTYsNjUyODcsOTYsODIxOSw5Niw4MjQyLDk2LDEzNzAsOTYsMTUyMyw5Niw4MTc1LDk2LDY1MzQ0LDk2LDkwMCw5Niw4MTg5LDk2LDgxMjUsOTYsODEyNyw5Niw4MTkwLDk2LDY5Nyw5Niw4ODQsOTYsNzEyLDk2LDcxNCw5Niw3MTUsOTYsNzU2LDk2LDY5OSw5Niw3MDEsOTYsNzAwLDk2LDcwMiw5Niw0Mjg5Miw5NiwxNDk3LDk2LDIwMzYsOTYsMjAzNyw5Niw1MTk0LDk2LDU4MzYsOTYsOTQwMzMsOTYsOTQwMzQsOTYsNjUzMzksOTEsMTAwODgsNDAsMTAwOTgsNDAsMTIzMDgsNDAsNjQ4MzAsNDAsNjUzNDEsOTMsMTAwODksNDEsMTAwOTksNDEsMTIzMDksNDEsNjQ4MzEsNDEsMTAxMDAsMTIzLDExOTA2MCwxMjMsMTAxMDEsMTI1LDY1MzQyLDk0LDgyNzAsNDIsMTY0NSw0Miw4NzI3LDQyLDY2MzM1LDQyLDU5NDEsNDcsODI1Nyw0Nyw4NzI1LDQ3LDgyNjAsNDcsOTU4NSw0NywxMDE4Nyw0NywxMDc0NCw0NywxMTkzNTQsNDcsMTI3NTUsNDcsMTIzMzksNDcsMTE0NjIsNDcsMjAwMzEsNDcsMTIwMzUsNDcsNjUzNDAsOTIsNjUxMjgsOTIsODcyNiw5MiwxMDE4OSw5MiwxMDc0MSw5MiwxMDc0NSw5MiwxMTkzMTEsOTIsMTE5MzU1LDkyLDEyNzU2LDkyLDIwMDIyLDkyLDEyMDM0LDkyLDQyODcyLDM4LDcwOCw5NCw3MTAsOTQsNTg2OSw0MywxMDEzMyw0Myw2NjIwMyw0Myw4MjQ5LDYwLDEwMDk0LDYwLDcwNiw2MCwxMTkzNTAsNjAsNTE3Niw2MCw1ODEwLDYwLDUxMjAsNjEsMTE4NDAsNjEsMTI0NDgsNjEsNDIyMzksNjEsODI1MCw2MiwxMDA5NSw2Miw3MDcsNjIsMTE5MzUxLDYyLDUxNzEsNjIsOTQwMTUsNjIsODI3NSwxMjYsNzMyLDEyNiw4MTI4LDEyNiw4NzY0LDEyNiw2NTM3MiwxMjQsNjUyOTMsNDUsMTIwNzg0LDUwLDEyMDc5NCw1MCwxMjA4MDQsNTAsMTIwODE0LDUwLDEyMDgyNCw1MCwxMzAwMzQsNTAsNDI4NDIsNTAsNDIzLDUwLDEwMDAsNTAsNDI1NjQsNTAsNTMxMSw1MCw0MjczNSw1MCwxMTkzMDIsNTEsMTIwNzg1LDUxLDEyMDc5NSw1MSwxMjA4MDUsNTEsMTIwODE1LDUxLDEyMDgyNSw1MSwxMzAwMzUsNTEsNDI5MjMsNTEsNTQwLDUxLDQzOSw1MSw0Mjg1OCw1MSwxMTQ2OCw1MSwxMjQ4LDUxLDk0MDExLDUxLDcxODgyLDUxLDEyMDc4Niw1MiwxMjA3OTYsNTIsMTIwODA2LDUyLDEyMDgxNiw1MiwxMjA4MjYsNTIsMTMwMDM2LDUyLDUwNzAsNTIsNzE4NTUsNTIsMTIwNzg3LDUzLDEyMDc5Nyw1MywxMjA4MDcsNTMsMTIwODE3LDUzLDEyMDgyNyw1MywxMzAwMzcsNTMsNDQ0LDUzLDcxODY3LDUzLDEyMDc4OCw1NCwxMjA3OTgsNTQsMTIwODA4LDU0LDEyMDgxOCw1NCwxMjA4MjgsNTQsMTMwMDM4LDU0LDExNDc0LDU0LDUxMDIsNTQsNzE4OTMsNTQsMTE5MzE0LDU1LDEyMDc4OSw1NSwxMjA3OTksNTUsMTIwODA5LDU1LDEyMDgxOSw1NSwxMjA4MjksNTUsMTMwMDM5LDU1LDY2NzcwLDU1LDcxODc4LDU1LDI4MTksNTYsMjUzOCw1NiwyNjY2LDU2LDEyNTEzMSw1NiwxMjA3OTAsNTYsMTIwODAwLDU2LDEyMDgxMCw1NiwxMjA4MjAsNTYsMTIwODMwLDU2LDEzMDA0MCw1Niw1NDcsNTYsNTQ2LDU2LDY2MzMwLDU2LDI2NjMsNTcsMjkyMCw1NywyNTQxLDU3LDM0MzcsNTcsMTIwNzkxLDU3LDEyMDgwMSw1NywxMjA4MTEsNTcsMTIwODIxLDU3LDEyMDgzMSw1NywxMzAwNDEsNTcsNDI4NjIsNTcsMTE0NjYsNTcsNzE4ODQsNTcsNzE4NTIsNTcsNzE4OTQsNTcsOTA4Miw5Nyw2NTM0NSw5NywxMTk4MzQsOTcsMTE5ODg2LDk3LDExOTkzOCw5NywxMTk5OTAsOTcsMTIwMDQyLDk3LDEyMDA5NCw5NywxMjAxNDYsOTcsMTIwMTk4LDk3LDEyMDI1MCw5NywxMjAzMDIsOTcsMTIwMzU0LDk3LDEyMDQwNiw5NywxMjA0NTgsOTcsNTkzLDk3LDk0NSw5NywxMjA1MTQsOTcsMTIwNTcyLDk3LDEyMDYzMCw5NywxMjA2ODgsOTcsMTIwNzQ2LDk3LDY1MzEzLDY1LDExOTgwOCw2NSwxMTk4NjAsNjUsMTE5OTEyLDY1LDExOTk2NCw2NSwxMjAwMTYsNjUsMTIwMDY4LDY1LDEyMDEyMCw2NSwxMjAxNzIsNjUsMTIwMjI0LDY1LDEyMDI3Niw2NSwxMjAzMjgsNjUsMTIwMzgwLDY1LDEyMDQzMiw2NSw5MTMsNjUsMTIwNDg4LDY1LDEyMDU0Niw2NSwxMjA2MDQsNjUsMTIwNjYyLDY1LDEyMDcyMCw2NSw1MDM0LDY1LDU1NzMsNjUsNDIyMjIsNjUsOTQwMTYsNjUsNjYyMDgsNjUsMTE5ODM1LDk4LDExOTg4Nyw5OCwxMTk5MzksOTgsMTE5OTkxLDk4LDEyMDA0Myw5OCwxMjAwOTUsOTgsMTIwMTQ3LDk4LDEyMDE5OSw5OCwxMjAyNTEsOTgsMTIwMzAzLDk4LDEyMDM1NSw5OCwxMjA0MDcsOTgsMTIwNDU5LDk4LDM4OCw5OCw1MDcxLDk4LDUyMzQsOTgsNTU1MSw5OCw2NTMxNCw2Niw4NDkyLDY2LDExOTgwOSw2NiwxMTk4NjEsNjYsMTE5OTEzLDY2LDEyMDAxNyw2NiwxMjAwNjksNjYsMTIwMTIxLDY2LDEyMDE3Myw2NiwxMjAyMjUsNjYsMTIwMjc3LDY2LDEyMDMyOSw2NiwxMjAzODEsNjYsMTIwNDMzLDY2LDQyOTMyLDY2LDkxNCw2NiwxMjA0ODksNjYsMTIwNTQ3LDY2LDEyMDYwNSw2NiwxMjA2NjMsNjYsMTIwNzIxLDY2LDUxMDgsNjYsNTYyMyw2Niw0MjE5Miw2Niw2NjE3OCw2Niw2NjIwOSw2Niw2NjMwNSw2Niw2NTM0Nyw5OSw4NTczLDk5LDExOTgzNiw5OSwxMTk4ODgsOTksMTE5OTQwLDk5LDExOTk5Miw5OSwxMjAwNDQsOTksMTIwMDk2LDk5LDEyMDE0OCw5OSwxMjAyMDAsOTksMTIwMjUyLDk5LDEyMDMwNCw5OSwxMjAzNTYsOTksMTIwNDA4LDk5LDEyMDQ2MCw5OSw3NDI4LDk5LDEwMTAsOTksMTE0MjksOTksNDM5NTEsOTksNjY2MjEsOTksMTI4ODQ0LDY3LDcxOTIyLDY3LDcxOTEzLDY3LDY1MzE1LDY3LDg1NTcsNjcsODQ1MCw2Nyw4NDkzLDY3LDExOTgxMCw2NywxMTk4NjIsNjcsMTE5OTE0LDY3LDExOTk2Niw2NywxMjAwMTgsNjcsMTIwMTc0LDY3LDEyMDIyNiw2NywxMjAyNzgsNjcsMTIwMzMwLDY3LDEyMDM4Miw2NywxMjA0MzQsNjcsMTAxNyw2NywxMTQyOCw2Nyw1MDg3LDY3LDQyMjAyLDY3LDY2MjEwLDY3LDY2MzA2LDY3LDY2NTgxLDY3LDY2ODQ0LDY3LDg1NzQsMTAwLDg1MTgsMTAwLDExOTgzNywxMDAsMTE5ODg5LDEwMCwxMTk5NDEsMTAwLDExOTk5MywxMDAsMTIwMDQ1LDEwMCwxMjAwOTcsMTAwLDEyMDE0OSwxMDAsMTIwMjAxLDEwMCwxMjAyNTMsMTAwLDEyMDMwNSwxMDAsMTIwMzU3LDEwMCwxMjA0MDksMTAwLDEyMDQ2MSwxMDAsMTI4MSwxMDAsNTA5NSwxMDAsNTIzMSwxMDAsNDIxOTQsMTAwLDg1NTgsNjgsODUxNyw2OCwxMTk4MTEsNjgsMTE5ODYzLDY4LDExOTkxNSw2OCwxMTk5NjcsNjgsMTIwMDE5LDY4LDEyMDA3MSw2OCwxMjAxMjMsNjgsMTIwMTc1LDY4LDEyMDIyNyw2OCwxMjAyNzksNjgsMTIwMzMxLDY4LDEyMDM4Myw2OCwxMjA0MzUsNjgsNTAyNCw2OCw1NTk4LDY4LDU2MTAsNjgsNDIxOTUsNjgsODQ5NCwxMDEsNjUzNDksMTAxLDg0OTUsMTAxLDg1MTksMTAxLDExOTgzOCwxMDEsMTE5ODkwLDEwMSwxMTk5NDIsMTAxLDEyMDA0NiwxMDEsMTIwMDk4LDEwMSwxMjAxNTAsMTAxLDEyMDIwMiwxMDEsMTIwMjU0LDEwMSwxMjAzMDYsMTAxLDEyMDM1OCwxMDEsMTIwNDEwLDEwMSwxMjA0NjIsMTAxLDQzODI2LDEwMSwxMjEzLDEwMSw4OTU5LDY5LDY1MzE3LDY5LDg0OTYsNjksMTE5ODEyLDY5LDExOTg2NCw2OSwxMTk5MTYsNjksMTIwMDIwLDY5LDEyMDA3Miw2OSwxMjAxMjQsNjksMTIwMTc2LDY5LDEyMDIyOCw2OSwxMjAyODAsNjksMTIwMzMyLDY5LDEyMDM4NCw2OSwxMjA0MzYsNjksOTE3LDY5LDEyMDQ5Miw2OSwxMjA1NTAsNjksMTIwNjA4LDY5LDEyMDY2Niw2OSwxMjA3MjQsNjksMTE1NzcsNjksNTAzNiw2OSw0MjIyNCw2OSw3MTg0Niw2OSw3MTg1NCw2OSw2NjE4Miw2OSwxMTk4MzksMTAyLDExOTg5MSwxMDIsMTE5OTQzLDEwMiwxMTk5OTUsMTAyLDEyMDA0NywxMDIsMTIwMDk5LDEwMiwxMjAxNTEsMTAyLDEyMDIwMywxMDIsMTIwMjU1LDEwMiwxMjAzMDcsMTAyLDEyMDM1OSwxMDIsMTIwNDExLDEwMiwxMjA0NjMsMTAyLDQzODI5LDEwMiw0MjkwNSwxMDIsMzgzLDEwMiw3ODM3LDEwMiwxNDEyLDEwMiwxMTkzMTUsNzAsODQ5Nyw3MCwxMTk4MTMsNzAsMTE5ODY1LDcwLDExOTkxNyw3MCwxMjAwMjEsNzAsMTIwMDczLDcwLDEyMDEyNSw3MCwxMjAxNzcsNzAsMTIwMjI5LDcwLDEyMDI4MSw3MCwxMjAzMzMsNzAsMTIwMzg1LDcwLDEyMDQzNyw3MCw0MjkwNCw3MCw5ODgsNzAsMTIwNzc4LDcwLDU1NTYsNzAsNDIyMDUsNzAsNzE4NzQsNzAsNzE4NDIsNzAsNjYxODMsNzAsNjYyMTMsNzAsNjY4NTMsNzAsNjUzNTEsMTAzLDg0NTgsMTAzLDExOTg0MCwxMDMsMTE5ODkyLDEwMywxMTk5NDQsMTAzLDEyMDA0OCwxMDMsMTIwMTAwLDEwMywxMjAxNTIsMTAzLDEyMDIwNCwxMDMsMTIwMjU2LDEwMywxMjAzMDgsMTAzLDEyMDM2MCwxMDMsMTIwNDEyLDEwMywxMjA0NjQsMTAzLDYwOSwxMDMsNzU1NSwxMDMsMzk3LDEwMywxNDA5LDEwMywxMTk4MTQsNzEsMTE5ODY2LDcxLDExOTkxOCw3MSwxMTk5NzAsNzEsMTIwMDIyLDcxLDEyMDA3NCw3MSwxMjAxMjYsNzEsMTIwMTc4LDcxLDEyMDIzMCw3MSwxMjAyODIsNzEsMTIwMzM0LDcxLDEyMDM4Niw3MSwxMjA0MzgsNzEsMTI5Miw3MSw1MDU2LDcxLDUxMDcsNzEsNDIxOTgsNzEsNjUzNTIsMTA0LDg0NjIsMTA0LDExOTg0MSwxMDQsMTE5OTQ1LDEwNCwxMTk5OTcsMTA0LDEyMDA0OSwxMDQsMTIwMTAxLDEwNCwxMjAxNTMsMTA0LDEyMDIwNSwxMDQsMTIwMjU3LDEwNCwxMjAzMDksMTA0LDEyMDM2MSwxMDQsMTIwNDEzLDEwNCwxMjA0NjUsMTA0LDEyMTEsMTA0LDEzOTIsMTA0LDUwNTgsMTA0LDY1MzIwLDcyLDg0NTksNzIsODQ2MCw3Miw4NDYxLDcyLDExOTgxNSw3MiwxMTk4NjcsNzIsMTE5OTE5LDcyLDEyMDAyMyw3MiwxMjAxNzksNzIsMTIwMjMxLDcyLDEyMDI4Myw3MiwxMjAzMzUsNzIsMTIwMzg3LDcyLDEyMDQzOSw3Miw5MTksNzIsMTIwNDk0LDcyLDEyMDU1Miw3MiwxMjA2MTAsNzIsMTIwNjY4LDcyLDEyMDcyNiw3MiwxMTQwNiw3Miw1MDUxLDcyLDU1MDAsNzIsNDIyMTUsNzIsNjYyNTUsNzIsNzMxLDEwNSw5MDc1LDEwNSw2NTM1MywxMDUsODU2MCwxMDUsODUwNSwxMDUsODUyMCwxMDUsMTE5ODQyLDEwNSwxMTk4OTQsMTA1LDExOTk0NiwxMDUsMTE5OTk4LDEwNSwxMjAwNTAsMTA1LDEyMDEwMiwxMDUsMTIwMTU0LDEwNSwxMjAyMDYsMTA1LDEyMDI1OCwxMDUsMTIwMzEwLDEwNSwxMjAzNjIsMTA1LDEyMDQxNCwxMDUsMTIwNDY2LDEwNSwxMjA0ODQsMTA1LDYxOCwxMDUsNjE3LDEwNSw5NTMsMTA1LDgxMjYsMTA1LDg5MCwxMDUsMTIwNTIyLDEwNSwxMjA1ODAsMTA1LDEyMDYzOCwxMDUsMTIwNjk2LDEwNSwxMjA3NTQsMTA1LDExMTAsMTA1LDQyNTY3LDEwNSwxMjMxLDEwNSw0Mzg5MywxMDUsNTAyOSwxMDUsNzE4NzUsMTA1LDY1MzU0LDEwNiw4NTIxLDEwNiwxMTk4NDMsMTA2LDExOTg5NSwxMDYsMTE5OTQ3LDEwNiwxMTk5OTksMTA2LDEyMDA1MSwxMDYsMTIwMTAzLDEwNiwxMjAxNTUsMTA2LDEyMDIwNywxMDYsMTIwMjU5LDEwNiwxMjAzMTEsMTA2LDEyMDM2MywxMDYsMTIwNDE1LDEwNiwxMjA0NjcsMTA2LDEwMTEsMTA2LDExMTIsMTA2LDY1MzIyLDc0LDExOTgxNyw3NCwxMTk4NjksNzQsMTE5OTIxLDc0LDExOTk3Myw3NCwxMjAwMjUsNzQsMTIwMDc3LDc0LDEyMDEyOSw3NCwxMjAxODEsNzQsMTIwMjMzLDc0LDEyMDI4NSw3NCwxMjAzMzcsNzQsMTIwMzg5LDc0LDEyMDQ0MSw3NCw0MjkzMCw3NCw4OTUsNzQsMTAzMiw3NCw1MDM1LDc0LDUyNjEsNzQsNDIyMDEsNzQsMTE5ODQ0LDEwNywxMTk4OTYsMTA3LDExOTk0OCwxMDcsMTIwMDAwLDEwNywxMjAwNTIsMTA3LDEyMDEwNCwxMDcsMTIwMTU2LDEwNywxMjAyMDgsMTA3LDEyMDI2MCwxMDcsMTIwMzEyLDEwNywxMjAzNjQsMTA3LDEyMDQxNiwxMDcsMTIwNDY4LDEwNyw4NDkwLDc1LDY1MzIzLDc1LDExOTgxOCw3NSwxMTk4NzAsNzUsMTE5OTIyLDc1LDExOTk3NCw3NSwxMjAwMjYsNzUsMTIwMDc4LDc1LDEyMDEzMCw3NSwxMjAxODIsNzUsMTIwMjM0LDc1LDEyMDI4Niw3NSwxMjAzMzgsNzUsMTIwMzkwLDc1LDEyMDQ0Miw3NSw5MjIsNzUsMTIwNDk3LDc1LDEyMDU1NSw3NSwxMjA2MTMsNzUsMTIwNjcxLDc1LDEyMDcyOSw3NSwxMTQxMiw3NSw1MDk0LDc1LDU4NDUsNzUsNDIxOTksNzUsNjY4NDAsNzUsMTQ3MiwxMDgsODczOSw3Myw5MjEzLDczLDY1NTEyLDczLDE2MzMsMTA4LDE3NzcsNzMsNjYzMzYsMTA4LDEyNTEyNywxMDgsMTIwNzgzLDczLDEyMDc5Myw3MywxMjA4MDMsNzMsMTIwODEzLDczLDEyMDgyMyw3MywxMzAwMzMsNzMsNjUzMjEsNzMsODU0NCw3Myw4NDY0LDczLDg0NjUsNzMsMTE5ODE2LDczLDExOTg2OCw3MywxMTk5MjAsNzMsMTIwMDI0LDczLDEyMDEyOCw3MywxMjAxODAsNzMsMTIwMjMyLDczLDEyMDI4NCw3MywxMjAzMzYsNzMsMTIwMzg4LDczLDEyMDQ0MCw3Myw2NTM1NiwxMDgsODU3Miw3Myw4NDY3LDEwOCwxMTk4NDUsMTA4LDExOTg5NywxMDgsMTE5OTQ5LDEwOCwxMjAwMDEsMTA4LDEyMDA1MywxMDgsMTIwMTA1LDczLDEyMDE1Nyw3MywxMjAyMDksNzMsMTIwMjYxLDczLDEyMDMxMyw3MywxMjAzNjUsNzMsMTIwNDE3LDczLDEyMDQ2OSw3Myw0NDgsNzMsMTIwNDk2LDczLDEyMDU1NCw3MywxMjA2MTIsNzMsMTIwNjcwLDczLDEyMDcyOCw3MywxMTQxMCw3MywxMDMwLDczLDEyMTYsNzMsMTQ5MywxMDgsMTUwMywxMDgsMTU3NSwxMDgsMTI2NDY0LDEwOCwxMjY1OTIsMTA4LDY1MTY2LDEwOCw2NTE2NSwxMDgsMTk5NCwxMDgsMTE1OTksNzMsNTgyNSw3Myw0MjIyNiw3Myw5Mzk5Miw3Myw2NjE4NiwxMjQsNjYzMTMsMTI0LDExOTMzOCw3Niw4NTU2LDc2LDg0NjYsNzYsMTE5ODE5LDc2LDExOTg3MSw3NiwxMTk5MjMsNzYsMTIwMDI3LDc2LDEyMDA3OSw3NiwxMjAxMzEsNzYsMTIwMTgzLDc2LDEyMDIzNSw3NiwxMjAyODcsNzYsMTIwMzM5LDc2LDEyMDM5MSw3NiwxMjA0NDMsNzYsMTE0NzIsNzYsNTA4Niw3Niw1MjkwLDc2LDQyMjA5LDc2LDkzOTc0LDc2LDcxODQzLDc2LDcxODU4LDc2LDY2NTg3LDc2LDY2ODU0LDc2LDY1MzI1LDc3LDg1NTksNzcsODQ5OSw3NywxMTk4MjAsNzcsMTE5ODcyLDc3LDExOTkyNCw3NywxMjAwMjgsNzcsMTIwMDgwLDc3LDEyMDEzMiw3NywxMjAxODQsNzcsMTIwMjM2LDc3LDEyMDI4OCw3NywxMjAzNDAsNzcsMTIwMzkyLDc3LDEyMDQ0NCw3Nyw5MjQsNzcsMTIwNDk5LDc3LDEyMDU1Nyw3NywxMjA2MTUsNzcsMTIwNjczLDc3LDEyMDczMSw3NywxMDE4LDc3LDExNDE2LDc3LDUwNDcsNzcsNTYxNiw3Nyw1ODQ2LDc3LDQyMjA3LDc3LDY2MjI0LDc3LDY2MzIxLDc3LDExOTg0NywxMTAsMTE5ODk5LDExMCwxMTk5NTEsMTEwLDEyMDAwMywxMTAsMTIwMDU1LDExMCwxMjAxMDcsMTEwLDEyMDE1OSwxMTAsMTIwMjExLDExMCwxMjAyNjMsMTEwLDEyMDMxNSwxMTAsMTIwMzY3LDExMCwxMjA0MTksMTEwLDEyMDQ3MSwxMTAsMTQwMCwxMTAsMTQwNCwxMTAsNjUzMjYsNzgsODQ2OSw3OCwxMTk4MjEsNzgsMTE5ODczLDc4LDExOTkyNSw3OCwxMTk5NzcsNzgsMTIwMDI5LDc4LDEyMDA4MSw3OCwxMjAxODUsNzgsMTIwMjM3LDc4LDEyMDI4OSw3OCwxMjAzNDEsNzgsMTIwMzkzLDc4LDEyMDQ0NSw3OCw5MjUsNzgsMTIwNTAwLDc4LDEyMDU1OCw3OCwxMjA2MTYsNzgsMTIwNjc0LDc4LDEyMDczMiw3OCwxMTQxOCw3OCw0MjIwOCw3OCw2NjgzNSw3OCwzMDc0LDExMSwzMjAyLDExMSwzMzMwLDExMSwzNDU4LDExMSwyNDA2LDExMSwyNjYyLDExMSwyNzkwLDExMSwzMDQ2LDExMSwzMTc0LDExMSwzMzAyLDExMSwzNDMwLDExMSwzNjY0LDExMSwzNzkyLDExMSw0MTYwLDExMSwxNjM3LDExMSwxNzgxLDExMSw2NTM1OSwxMTEsODUwMCwxMTEsMTE5ODQ4LDExMSwxMTk5MDAsMTExLDExOTk1MiwxMTEsMTIwMDU2LDExMSwxMjAxMDgsMTExLDEyMDE2MCwxMTEsMTIwMjEyLDExMSwxMjAyNjQsMTExLDEyMDMxNiwxMTEsMTIwMzY4LDExMSwxMjA0MjAsMTExLDEyMDQ3MiwxMTEsNzQzOSwxMTEsNzQ0MSwxMTEsNDM4MzcsMTExLDk1OSwxMTEsMTIwNTI4LDExMSwxMjA1ODYsMTExLDEyMDY0NCwxMTEsMTIwNzAyLDExMSwxMjA3NjAsMTExLDk2MywxMTEsMTIwNTMyLDExMSwxMjA1OTAsMTExLDEyMDY0OCwxMTEsMTIwNzA2LDExMSwxMjA3NjQsMTExLDExNDIzLDExMSw0MzUxLDExMSwxNDEzLDExMSwxNTA1LDExMSwxNjA3LDExMSwxMjY1MDAsMTExLDEyNjU2NCwxMTEsMTI2NTk2LDExMSw2NTI1OSwxMTEsNjUyNjAsMTExLDY1MjU4LDExMSw2NTI1NywxMTEsMTcyNiwxMTEsNjQ0MjgsMTExLDY0NDI5LDExMSw2NDQyNywxMTEsNjQ0MjYsMTExLDE3MjksMTExLDY0NDI0LDExMSw2NDQyNSwxMTEsNjQ0MjMsMTExLDY0NDIyLDExMSwxNzQ5LDExMSwzMzYwLDExMSw0MTI1LDExMSw2Njc5NCwxMTEsNzE4ODAsMTExLDcxODk1LDExMSw2NjYwNCwxMTEsMTk4NCw3OSwyNTM0LDc5LDI5MTgsNzksMTIyOTUsNzksNzA4NjQsNzksNzE5MDQsNzksMTIwNzgyLDc5LDEyMDc5Miw3OSwxMjA4MDIsNzksMTIwODEyLDc5LDEyMDgyMiw3OSwxMzAwMzIsNzksNjUzMjcsNzksMTE5ODIyLDc5LDExOTg3NCw3OSwxMTk5MjYsNzksMTE5OTc4LDc5LDEyMDAzMCw3OSwxMjAwODIsNzksMTIwMTM0LDc5LDEyMDE4Niw3OSwxMjAyMzgsNzksMTIwMjkwLDc5LDEyMDM0Miw3OSwxMjAzOTQsNzksMTIwNDQ2LDc5LDkyNyw3OSwxMjA1MDIsNzksMTIwNTYwLDc5LDEyMDYxOCw3OSwxMjA2NzYsNzksMTIwNzM0LDc5LDExNDIyLDc5LDEzNjUsNzksMTE2MDQsNzksNDgxNiw3OSwyODQ4LDc5LDY2NzU0LDc5LDQyMjI3LDc5LDcxODYxLDc5LDY2MTk0LDc5LDY2MjE5LDc5LDY2NTY0LDc5LDY2ODM4LDc5LDkwNzYsMTEyLDY1MzYwLDExMiwxMTk4NDksMTEyLDExOTkwMSwxMTIsMTE5OTUzLDExMiwxMjAwMDUsMTEyLDEyMDA1NywxMTIsMTIwMTA5LDExMiwxMjAxNjEsMTEyLDEyMDIxMywxMTIsMTIwMjY1LDExMiwxMjAzMTcsMTEyLDEyMDM2OSwxMTIsMTIwNDIxLDExMiwxMjA0NzMsMTEyLDk2MSwxMTIsMTIwNTMwLDExMiwxMjA1NDQsMTEyLDEyMDU4OCwxMTIsMTIwNjAyLDExMiwxMjA2NDYsMTEyLDEyMDY2MCwxMTIsMTIwNzA0LDExMiwxMjA3MTgsMTEyLDEyMDc2MiwxMTIsMTIwNzc2LDExMiwxMTQyNywxMTIsNjUzMjgsODAsODQ3Myw4MCwxMTk4MjMsODAsMTE5ODc1LDgwLDExOTkyNyw4MCwxMTk5NzksODAsMTIwMDMxLDgwLDEyMDA4Myw4MCwxMjAxODcsODAsMTIwMjM5LDgwLDEyMDI5MSw4MCwxMjAzNDMsODAsMTIwMzk1LDgwLDEyMDQ0Nyw4MCw5MjksODAsMTIwNTA0LDgwLDEyMDU2Miw4MCwxMjA2MjAsODAsMTIwNjc4LDgwLDEyMDczNiw4MCwxMTQyNiw4MCw1MDkwLDgwLDUyMjksODAsNDIxOTMsODAsNjYxOTcsODAsMTE5ODUwLDExMywxMTk5MDIsMTEzLDExOTk1NCwxMTMsMTIwMDA2LDExMywxMjAwNTgsMTEzLDEyMDExMCwxMTMsMTIwMTYyLDExMywxMjAyMTQsMTEzLDEyMDI2NiwxMTMsMTIwMzE4LDExMywxMjAzNzAsMTEzLDEyMDQyMiwxMTMsMTIwNDc0LDExMywxMzA3LDExMywxMzc5LDExMywxMzgyLDExMyw4NDc0LDgxLDExOTgyNCw4MSwxMTk4NzYsODEsMTE5OTI4LDgxLDExOTk4MCw4MSwxMjAwMzIsODEsMTIwMDg0LDgxLDEyMDE4OCw4MSwxMjAyNDAsODEsMTIwMjkyLDgxLDEyMDM0NCw4MSwxMjAzOTYsODEsMTIwNDQ4LDgxLDExNjA1LDgxLDExOTg1MSwxMTQsMTE5OTAzLDExNCwxMTk5NTUsMTE0LDEyMDAwNywxMTQsMTIwMDU5LDExNCwxMjAxMTEsMTE0LDEyMDE2MywxMTQsMTIwMjE1LDExNCwxMjAyNjcsMTE0LDEyMDMxOSwxMTQsMTIwMzcxLDExNCwxMjA0MjMsMTE0LDEyMDQ3NSwxMTQsNDM4NDcsMTE0LDQzODQ4LDExNCw3NDYyLDExNCwxMTM5NywxMTQsNDM5MDUsMTE0LDExOTMxOCw4Miw4NDc1LDgyLDg0NzYsODIsODQ3Nyw4MiwxMTk4MjUsODIsMTE5ODc3LDgyLDExOTkyOSw4MiwxMjAwMzMsODIsMTIwMTg5LDgyLDEyMDI0MSw4MiwxMjAyOTMsODIsMTIwMzQ1LDgyLDEyMDM5Nyw4MiwxMjA0NDksODIsNDIyLDgyLDUwMjUsODIsNTA3NCw4Miw2Njc0MCw4Miw1NTExLDgyLDQyMjExLDgyLDk0MDA1LDgyLDY1MzYzLDExNSwxMTk4NTIsMTE1LDExOTkwNCwxMTUsMTE5OTU2LDExNSwxMjAwMDgsMTE1LDEyMDA2MCwxMTUsMTIwMTEyLDExNSwxMjAxNjQsMTE1LDEyMDIxNiwxMTUsMTIwMjY4LDExNSwxMjAzMjAsMTE1LDEyMDM3MiwxMTUsMTIwNDI0LDExNSwxMjA0NzYsMTE1LDQyODAxLDExNSw0NDUsMTE1LDExMDksMTE1LDQzOTQ2LDExNSw3MTg3MywxMTUsNjY2MzIsMTE1LDY1MzMxLDgzLDExOTgyNiw4MywxMTk4NzgsODMsMTE5OTMwLDgzLDExOTk4Miw4MywxMjAwMzQsODMsMTIwMDg2LDgzLDEyMDEzOCw4MywxMjAxOTAsODMsMTIwMjQyLDgzLDEyMDI5NCw4MywxMjAzNDYsODMsMTIwMzk4LDgzLDEyMDQ1MCw4MywxMDI5LDgzLDEzNTksODMsNTA3Nyw4Myw1MDgyLDgzLDQyMjEwLDgzLDk0MDEwLDgzLDY2MTk4LDgzLDY2NTkyLDgzLDExOTg1MywxMTYsMTE5OTA1LDExNiwxMTk5NTcsMTE2LDEyMDAwOSwxMTYsMTIwMDYxLDExNiwxMjAxMTMsMTE2LDEyMDE2NSwxMTYsMTIwMjE3LDExNiwxMjAyNjksMTE2LDEyMDMyMSwxMTYsMTIwMzczLDExNiwxMjA0MjUsMTE2LDEyMDQ3NywxMTYsODg2OCw4NCwxMDIwMSw4NCwxMjg4NzIsODQsNjUzMzIsODQsMTE5ODI3LDg0LDExOTg3OSw4NCwxMTk5MzEsODQsMTE5OTgzLDg0LDEyMDAzNSw4NCwxMjAwODcsODQsMTIwMTM5LDg0LDEyMDE5MSw4NCwxMjAyNDMsODQsMTIwMjk1LDg0LDEyMDM0Nyw4NCwxMjAzOTksODQsMTIwNDUxLDg0LDkzMiw4NCwxMjA1MDcsODQsMTIwNTY1LDg0LDEyMDYyMyw4NCwxMjA2ODEsODQsMTIwNzM5LDg0LDExNDMwLDg0LDUwMjYsODQsNDIxOTYsODQsOTM5NjIsODQsNzE4NjgsODQsNjYxOTksODQsNjYyMjUsODQsNjYzMjUsODQsMTE5ODU0LDExNywxMTk5MDYsMTE3LDExOTk1OCwxMTcsMTIwMDEwLDExNywxMjAwNjIsMTE3LDEyMDExNCwxMTcsMTIwMTY2LDExNywxMjAyMTgsMTE3LDEyMDI3MCwxMTcsMTIwMzIyLDExNywxMjAzNzQsMTE3LDEyMDQyNiwxMTcsMTIwNDc4LDExNyw0MjkxMSwxMTcsNzQ1MiwxMTcsNDM4NTQsMTE3LDQzODU4LDExNyw2NTEsMTE3LDk2NSwxMTcsMTIwNTM0LDExNywxMjA1OTIsMTE3LDEyMDY1MCwxMTcsMTIwNzA4LDExNywxMjA3NjYsMTE3LDE0MDUsMTE3LDY2ODA2LDExNyw3MTg5NiwxMTcsODc0Niw4NSw4ODk5LDg1LDExOTgyOCw4NSwxMTk4ODAsODUsMTE5OTMyLDg1LDExOTk4NCw4NSwxMjAwMzYsODUsMTIwMDg4LDg1LDEyMDE0MCw4NSwxMjAxOTIsODUsMTIwMjQ0LDg1LDEyMDI5Niw4NSwxMjAzNDgsODUsMTIwNDAwLDg1LDEyMDQ1Miw4NSwxMzU3LDg1LDQ2MDgsODUsNjY3NjYsODUsNTE5Niw4NSw0MjIyOCw4NSw5NDAxOCw4NSw3MTg2NCw4NSw4NzQ0LDExOCw4ODk3LDExOCw2NTM2NiwxMTgsODU2NCwxMTgsMTE5ODU1LDExOCwxMTk5MDcsMTE4LDExOTk1OSwxMTgsMTIwMDExLDExOCwxMjAwNjMsMTE4LDEyMDExNSwxMTgsMTIwMTY3LDExOCwxMjAyMTksMTE4LDEyMDI3MSwxMTgsMTIwMzIzLDExOCwxMjAzNzUsMTE4LDEyMDQyNywxMTgsMTIwNDc5LDExOCw3NDU2LDExOCw5NTcsMTE4LDEyMDUyNiwxMTgsMTIwNTg0LDExOCwxMjA2NDIsMTE4LDEyMDcwMCwxMTgsMTIwNzU4LDExOCwxMTQxLDExOCwxNDk2LDExOCw3MTQzMCwxMTgsNDM5NDUsMTE4LDcxODcyLDExOCwxMTkzMDksODYsMTYzOSw4NiwxNzgzLDg2LDg1NDgsODYsMTE5ODI5LDg2LDExOTg4MSw4NiwxMTk5MzMsODYsMTE5OTg1LDg2LDEyMDAzNyw4NiwxMjAwODksODYsMTIwMTQxLDg2LDEyMDE5Myw4NiwxMjAyNDUsODYsMTIwMjk3LDg2LDEyMDM0OSw4NiwxMjA0MDEsODYsMTIwNDUzLDg2LDExNDAsODYsMTE1NzYsODYsNTA4MSw4Niw1MTY3LDg2LDQyNzE5LDg2LDQyMjE0LDg2LDkzOTYwLDg2LDcxODQwLDg2LDY2ODQ1LDg2LDYyMywxMTksMTE5ODU2LDExOSwxMTk5MDgsMTE5LDExOTk2MCwxMTksMTIwMDEyLDExOSwxMjAwNjQsMTE5LDEyMDExNiwxMTksMTIwMTY4LDExOSwxMjAyMjAsMTE5LDEyMDI3MiwxMTksMTIwMzI0LDExOSwxMjAzNzYsMTE5LDEyMDQyOCwxMTksMTIwNDgwLDExOSw3NDU3LDExOSwxMTIxLDExOSwxMzA5LDExOSwxMzc3LDExOSw3MTQzNCwxMTksNzE0MzgsMTE5LDcxNDM5LDExOSw0MzkwNywxMTksNzE5MTksODcsNzE5MTAsODcsMTE5ODMwLDg3LDExOTg4Miw4NywxMTk5MzQsODcsMTE5OTg2LDg3LDEyMDAzOCw4NywxMjAwOTAsODcsMTIwMTQyLDg3LDEyMDE5NCw4NywxMjAyNDYsODcsMTIwMjk4LDg3LDEyMDM1MCw4NywxMjA0MDIsODcsMTIwNDU0LDg3LDEzMDgsODcsNTA0Myw4Nyw1MDc2LDg3LDQyMjE4LDg3LDU3NDIsMTIwLDEwNTM5LDEyMCwxMDU0MCwxMjAsMTA3OTksMTIwLDY1MzY4LDEyMCw4NTY5LDEyMCwxMTk4NTcsMTIwLDExOTkwOSwxMjAsMTE5OTYxLDEyMCwxMjAwMTMsMTIwLDEyMDA2NSwxMjAsMTIwMTE3LDEyMCwxMjAxNjksMTIwLDEyMDIyMSwxMjAsMTIwMjczLDEyMCwxMjAzMjUsMTIwLDEyMDM3NywxMjAsMTIwNDI5LDEyMCwxMjA0ODEsMTIwLDU0NDEsMTIwLDU1MDEsMTIwLDU3NDEsODgsOTU4Nyw4OCw2NjMzOCw4OCw3MTkxNiw4OCw2NTMzNiw4OCw4NTUzLDg4LDExOTgzMSw4OCwxMTk4ODMsODgsMTE5OTM1LDg4LDExOTk4Nyw4OCwxMjAwMzksODgsMTIwMDkxLDg4LDEyMDE0Myw4OCwxMjAxOTUsODgsMTIwMjQ3LDg4LDEyMDI5OSw4OCwxMjAzNTEsODgsMTIwNDAzLDg4LDEyMDQ1NSw4OCw0MjkzMSw4OCw5MzUsODgsMTIwNTEwLDg4LDEyMDU2OCw4OCwxMjA2MjYsODgsMTIwNjg0LDg4LDEyMDc0Miw4OCwxMTQzNiw4OCwxMTYxMyw4OCw1ODE1LDg4LDQyMjE5LDg4LDY2MTkyLDg4LDY2MjI4LDg4LDY2MzI3LDg4LDY2ODU1LDg4LDYxMSwxMjEsNzU2NCwxMjEsNjUzNjksMTIxLDExOTg1OCwxMjEsMTE5OTEwLDEyMSwxMTk5NjIsMTIxLDEyMDAxNCwxMjEsMTIwMDY2LDEyMSwxMjAxMTgsMTIxLDEyMDE3MCwxMjEsMTIwMjIyLDEyMSwxMjAyNzQsMTIxLDEyMDMyNiwxMjEsMTIwMzc4LDEyMSwxMjA0MzAsMTIxLDEyMDQ4MiwxMjEsNjU1LDEyMSw3OTM1LDEyMSw0Mzg2NiwxMjEsOTQ3LDEyMSw4NTA5LDEyMSwxMjA1MTYsMTIxLDEyMDU3NCwxMjEsMTIwNjMyLDEyMSwxMjA2OTAsMTIxLDEyMDc0OCwxMjEsMTE5OSwxMjEsNDMyNywxMjEsNzE5MDAsMTIxLDY1MzM3LDg5LDExOTgzMiw4OSwxMTk4ODQsODksMTE5OTM2LDg5LDExOTk4OCw4OSwxMjAwNDAsODksMTIwMDkyLDg5LDEyMDE0NCw4OSwxMjAxOTYsODksMTIwMjQ4LDg5LDEyMDMwMCw4OSwxMjAzNTIsODksMTIwNDA0LDg5LDEyMDQ1Niw4OSw5MzMsODksOTc4LDg5LDEyMDUwOCw4OSwxMjA1NjYsODksMTIwNjI0LDg5LDEyMDY4Miw4OSwxMjA3NDAsODksMTE0MzIsODksMTE5OCw4OSw1MDMzLDg5LDUwNTMsODksNDIyMjAsODksOTQwMTksODksNzE4NDQsODksNjYyMjYsODksMTE5ODU5LDEyMiwxMTk5MTEsMTIyLDExOTk2MywxMjIsMTIwMDE1LDEyMiwxMjAwNjcsMTIyLDEyMDExOSwxMjIsMTIwMTcxLDEyMiwxMjAyMjMsMTIyLDEyMDI3NSwxMjIsMTIwMzI3LDEyMiwxMjAzNzksMTIyLDEyMDQzMSwxMjIsMTIwNDgzLDEyMiw3NDU4LDEyMiw0MzkyMywxMjIsNzE4NzYsMTIyLDY2MjkzLDkwLDcxOTA5LDkwLDY1MzM4LDkwLDg0ODQsOTAsODQ4OCw5MCwxMTk4MzMsOTAsMTE5ODg1LDkwLDExOTkzNyw5MCwxMTk5ODksOTAsMTIwMDQxLDkwLDEyMDE5Nyw5MCwxMjAyNDksOTAsMTIwMzAxLDkwLDEyMDM1Myw5MCwxMjA0MDUsOTAsMTIwNDU3LDkwLDkxOCw5MCwxMjA0OTMsOTAsMTIwNTUxLDkwLDEyMDYwOSw5MCwxMjA2NjcsOTAsMTIwNzI1LDkwLDUwNTksOTAsNDIyMDQsOTAsNzE4NDksOTAsNjUyODIsMzQsNjUyODQsMzYsNjUyODUsMzcsNjUyODYsMzgsNjUyOTAsNDIsNjUyOTEsNDMsNjUyOTQsNDYsNjUyOTUsNDcsNjUyOTYsNDgsNjUyOTcsNDksNjUyOTgsNTAsNjUyOTksNTEsNjUzMDAsNTIsNjUzMDEsNTMsNjUzMDIsNTQsNjUzMDMsNTUsNjUzMDQsNTYsNjUzMDUsNTcsNjUzMDgsNjAsNjUzMDksNjEsNjUzMTAsNjIsNjUzMTIsNjQsNjUzMTYsNjgsNjUzMTgsNzAsNjUzMTksNzEsNjUzMjQsNzYsNjUzMjksODEsNjUzMzAsODIsNjUzMzMsODUsNjUzMzQsODYsNjUzMzUsODcsNjUzNDMsOTUsNjUzNDYsOTgsNjUzNDgsMTAwLDY1MzUwLDEwMiw2NTM1NSwxMDcsNjUzNTcsMTA5LDY1MzU4LDExMCw2NTM2MSwxMTMsNjUzNjIsMTE0LDY1MzY0LDExNiw2NTM2NSwxMTcsNjUzNjcsMTE5LDY1MzcwLDEyMiw2NTM3MSwxMjMsNjUzNzMsMTI1XSwiX2RlZmF1bHQiOlsxNjAsMzIsODIxMSw0NSw2NTM3NCwxMjYsNjUzMDYsNTgsNjUyODEsMzMsODIxNiw5Niw4MjE3LDk2LDgyNDUsOTYsMTgwLDk2LDEyNDk0LDQ3LDEwNDcsNTEsMTA3Myw1NCwxMDcyLDk3LDEwNDAsNjUsMTA2OCw5OCwxMDQyLDY2LDEwODksOTksMTA1Nyw2NywxMDc3LDEwMSwxMDQ1LDY5LDEwNTMsNzIsMzA1LDEwNSwxMDUwLDc1LDkyMSw3MywxMDUyLDc3LDEwODYsMTExLDEwNTQsNzksMTAwOSwxMTIsMTA4OCwxMTIsMTA1Niw4MCwxMDc1LDExNCwxMDU4LDg0LDIxNSwxMjAsMTA5MywxMjAsMTA2MSw4OCwxMDkxLDEyMSwxMDU5LDg5LDY1MjgzLDM1LDY1Mjg4LDQwLDY1Mjg5LDQxLDY1MjkyLDQ0LDY1MzA3LDU5LDY1MzExLDYzXSwiY3MiOls2NTM3NCwxMjYsNjUzMDYsNTgsNjUyODEsMzMsODIxNiw5Niw4MjE3LDk2LDgyNDUsOTYsMTgwLDk2LDEyNDk0LDQ3LDEwNDcsNTEsMTA3Myw1NCwxMDcyLDk3LDEwNDAsNjUsMTA2OCw5OCwxMDQyLDY2LDEwODksOTksMTA1Nyw2NywxMDc3LDEwMSwxMDQ1LDY5LDEwNTMsNzIsMzA1LDEwNSwxMDUwLDc1LDkyMSw3MywxMDUyLDc3LDEwODYsMTExLDEwNTQsNzksMTAwOSwxMTIsMTA4OCwxMTIsMTA1Niw4MCwxMDc1LDExNCwxMDU4LDg0LDEwOTMsMTIwLDEwNjEsODgsMTA5MSwxMjEsMTA1OSw4OSw2NTI4MywzNSw2NTI4OCw0MCw2NTI4OSw0MSw2NTI5Miw0NCw2NTMwNyw1OSw2NTMxMSw2M10sImRlIjpbNjUzNzQsMTI2LDY1MzA2LDU4LDY1MjgxLDMzLDgyMTYsOTYsODIxNyw5Niw4MjQ1LDk2LDE4MCw5NiwxMjQ5NCw0NywxMDQ3LDUxLDEwNzMsNTQsMTA3Miw5NywxMDQwLDY1LDEwNjgsOTgsMTA0Miw2NiwxMDg5LDk5LDEwNTcsNjcsMTA3NywxMDEsMTA0NSw2OSwxMDUzLDcyLDMwNSwxMDUsMTA1MCw3NSw5MjEsNzMsMTA1Miw3NywxMDg2LDExMSwxMDU0LDc5LDEwMDksMTEyLDEwODgsMTEyLDEwNTYsODAsMTA3NSwxMTQsMTA1OCw4NCwxMDkzLDEyMCwxMDYxLDg4LDEwOTEsMTIxLDEwNTksODksNjUyODMsMzUsNjUyODgsNDAsNjUyODksNDEsNjUyOTIsNDQsNjUzMDcsNTksNjUzMTEsNjNdLCJlcyI6WzgyMTEsNDUsNjUzNzQsMTI2LDY1MzA2LDU4LDY1MjgxLDMzLDgyNDUsOTYsMTgwLDk2LDEyNDk0LDQ3LDEwNDcsNTEsMTA3Myw1NCwxMDcyLDk3LDEwNDAsNjUsMTA2OCw5OCwxMDQyLDY2LDEwODksOTksMTA1Nyw2NywxMDc3LDEwMSwxMDQ1LDY5LDEwNTMsNzIsMzA1LDEwNSwxMDUwLDc1LDEwNTIsNzcsMTA4NiwxMTEsMTA1NCw3OSwxMDA5LDExMiwxMDg4LDExMiwxMDU2LDgwLDEwNzUsMTE0LDEwNTgsODQsMjE1LDEyMCwxMDkzLDEyMCwxMDYxLDg4LDEwOTEsMTIxLDEwNTksODksNjUyODMsMzUsNjUyODgsNDAsNjUyODksNDEsNjUyOTIsNDQsNjUzMDcsNTksNjUzMTEsNjNdLCJmciI6WzY1Mzc0LDEyNiw2NTMwNiw1OCw2NTI4MSwzMyw4MjE2LDk2LDgyNDUsOTYsMTI0OTQsNDcsMTA0Nyw1MSwxMDczLDU0LDEwNzIsOTcsMTA0MCw2NSwxMDY4LDk4LDEwNDIsNjYsMTA4OSw5OSwxMDU3LDY3LDEwNzcsMTAxLDEwNDUsNjksMTA1Myw3MiwzMDUsMTA1LDEwNTAsNzUsOTIxLDczLDEwNTIsNzcsMTA4NiwxMTEsMTA1NCw3OSwxMDA5LDExMiwxMDg4LDExMiwxMDU2LDgwLDEwNzUsMTE0LDEwNTgsODQsMjE1LDEyMCwxMDkzLDEyMCwxMDYxLDg4LDEwOTEsMTIxLDEwNTksODksNjUyODMsMzUsNjUyODgsNDAsNjUyODksNDEsNjUyOTIsNDQsNjUzMDcsNTksNjUzMTEsNjNdLCJpdCI6WzE2MCwzMiw4MjExLDQ1LDY1Mzc0LDEyNiw2NTMwNiw1OCw2NTI4MSwzMyw4MjE2LDk2LDgyNDUsOTYsMTgwLDk2LDEyNDk0LDQ3LDEwNDcsNTEsMTA3Myw1NCwxMDcyLDk3LDEwNDAsNjUsMTA2OCw5OCwxMDQyLDY2LDEwODksOTksMTA1Nyw2NywxMDc3LDEwMSwxMDQ1LDY5LDEwNTMsNzIsMzA1LDEwNSwxMDUwLDc1LDkyMSw3MywxMDUyLDc3LDEwODYsMTExLDEwNTQsNzksMTAwOSwxMTIsMTA4OCwxMTIsMTA1Niw4MCwxMDc1LDExNCwxMDU4LDg0LDIxNSwxMjAsMTA5MywxMjAsMTA2MSw4OCwxMDkxLDEyMSwxMDU5LDg5LDY1MjgzLDM1LDY1Mjg4LDQwLDY1Mjg5LDQxLDY1MjkyLDQ0LDY1MzA3LDU5LDY1MzExLDYzXSwiamEiOls4MjExLDQ1LDY1MzA2LDU4LDY1MjgxLDMzLDgyMTYsOTYsODIxNyw5Niw4MjQ1LDk2LDE4MCw5NiwxMDQ3LDUxLDEwNzMsNTQsMTA3Miw5NywxMDQwLDY1LDEwNjgsOTgsMTA0Miw2NiwxMDg5LDk5LDEwNTcsNjcsMTA3NywxMDEsMTA0NSw2OSwxMDUzLDcyLDMwNSwxMDUsMTA1MCw3NSw5MjEsNzMsMTA1Miw3NywxMDg2LDExMSwxMDU0LDc5LDEwMDksMTEyLDEwODgsMTEyLDEwNTYsODAsMTA3NSwxMTQsMTA1OCw4NCwyMTUsMTIwLDEwOTMsMTIwLDEwNjEsODgsMTA5MSwxMjEsMTA1OSw4OSw2NTI4MywzNSw2NTI5Miw0NCw2NTMwNyw1OV0sImtvIjpbODIxMSw0NSw2NTM3NCwxMjYsNjUzMDYsNTgsNjUyODEsMzMsODI0NSw5NiwxODAsOTYsMTI0OTQsNDcsMTA0Nyw1MSwxMDczLDU0LDEwNzIsOTcsMTA0MCw2NSwxMDY4LDk4LDEwNDIsNjYsMTA4OSw5OSwxMDU3LDY3LDEwNzcsMTAxLDEwNDUsNjksMTA1Myw3MiwzMDUsMTA1LDEwNTAsNzUsOTIxLDczLDEwNTIsNzcsMTA4NiwxMTEsMTA1NCw3OSwxMDA5LDExMiwxMDg4LDExMiwxMDU2LDgwLDEwNzUsMTE0LDEwNTgsODQsMjE1LDEyMCwxMDkzLDEyMCwxMDYxLDg4LDEwOTEsMTIxLDEwNTksODksNjUyODMsMzUsNjUyODgsNDAsNjUyODksNDEsNjUyOTIsNDQsNjUzMDcsNTksNjUzMTEsNjNdLCJwbCI6WzY1Mzc0LDEyNiw2NTMwNiw1OCw2NTI4MSwzMyw4MjE2LDk2LDgyMTcsOTYsODI0NSw5NiwxODAsOTYsMTI0OTQsNDcsMTA0Nyw1MSwxMDczLDU0LDEwNzIsOTcsMTA0MCw2NSwxMDY4LDk4LDEwNDIsNjYsMTA4OSw5OSwxMDU3LDY3LDEwNzcsMTAxLDEwNDUsNjksMTA1Myw3MiwzMDUsMTA1LDEwNTAsNzUsOTIxLDczLDEwNTIsNzcsMTA4NiwxMTEsMTA1NCw3OSwxMDA5LDExMiwxMDg4LDExMiwxMDU2LDgwLDEwNzUsMTE0LDEwNTgsODQsMjE1LDEyMCwxMDkzLDEyMCwxMDYxLDg4LDEwOTEsMTIxLDEwNTksODksNjUyODMsMzUsNjUyODgsNDAsNjUyODksNDEsNjUyOTIsNDQsNjUzMDcsNTksNjUzMTEsNjNdLCJwdC1CUiI6WzY1Mzc0LDEyNiw2NTMwNiw1OCw2NTI4MSwzMyw4MjE2LDk2LDgyMTcsOTYsODI0NSw5NiwxODAsOTYsMTI0OTQsNDcsMTA0Nyw1MSwxMDczLDU0LDEwNzIsOTcsMTA0MCw2NSwxMDY4LDk4LDEwNDIsNjYsMTA4OSw5OSwxMDU3LDY3LDEwNzcsMTAxLDEwNDUsNjksMTA1Myw3MiwzMDUsMTA1LDEwNTAsNzUsOTIxLDczLDEwNTIsNzcsMTA4NiwxMTEsMTA1NCw3OSwxMDA5LDExMiwxMDg4LDExMiwxMDU2LDgwLDEwNzUsMTE0LDEwNTgsODQsMjE1LDEyMCwxMDkzLDEyMCwxMDYxLDg4LDEwOTEsMTIxLDEwNTksODksNjUyODMsMzUsNjUyODgsNDAsNjUyODksNDEsNjUyOTIsNDQsNjUzMDcsNTksNjUzMTEsNjNdLCJxcHMtcGxvYyI6WzE2MCwzMiw4MjExLDQ1LDY1Mzc0LDEyNiw2NTMwNiw1OCw2NTI4MSwzMyw4MjE2LDk2LDgyMTcsOTYsODI0NSw5NiwxODAsOTYsMTI0OTQsNDcsMTA0Nyw1MSwxMDczLDU0LDEwNzIsOTcsMTA0MCw2NSwxMDY4LDk4LDEwNDIsNjYsMTA4OSw5OSwxMDU3LDY3LDEwNzcsMTAxLDEwNDUsNjksMTA1Myw3MiwzMDUsMTA1LDEwNTAsNzUsOTIxLDczLDEwNTIsNzcsMTA4NiwxMTEsMTA1NCw3OSwxMDg4LDExMiwxMDU2LDgwLDEwNzUsMTE0LDEwNTgsODQsMjE1LDEyMCwxMDkzLDEyMCwxMDYxLDg4LDEwOTEsMTIxLDEwNTksODksNjUyODMsMzUsNjUyODgsNDAsNjUyODksNDEsNjUyOTIsNDQsNjUzMDcsNTksNjUzMTEsNjNdLCJydSI6WzY1Mzc0LDEyNiw2NTMwNiw1OCw2NTI4MSwzMyw4MjE2LDk2LDgyMTcsOTYsODI0NSw5NiwxODAsOTYsMTI0OTQsNDcsMzA1LDEwNSw5MjEsNzMsMTAwOSwxMTIsMjE1LDEyMCw2NTI4MywzNSw2NTI4OCw0MCw2NTI4OSw0MSw2NTI5Miw0NCw2NTMwNyw1OSw2NTMxMSw2M10sInRyIjpbMTYwLDMyLDgyMTEsNDUsNjUzNzQsMTI2LDY1MzA2LDU4LDY1MjgxLDMzLDgyNDUsOTYsMTgwLDk2LDEyNDk0LDQ3LDEwNDcsNTEsMTA3Myw1NCwxMDcyLDk3LDEwNDAsNjUsMTA2OCw5OCwxMDQyLDY2LDEwODksOTksMTA1Nyw2NywxMDc3LDEwMSwxMDQ1LDY5LDEwNTMsNzIsMTA1MCw3NSw5MjEsNzMsMTA1Miw3NywxMDg2LDExMSwxMDU0LDc5LDEwMDksMTEyLDEwODgsMTEyLDEwNTYsODAsMTA3NSwxMTQsMTA1OCw4NCwyMTUsMTIwLDEwOTMsMTIwLDEwNjEsODgsMTA5MSwxMjEsMTA1OSw4OSw2NTI4MywzNSw2NTI4OCw0MCw2NTI4OSw0MSw2NTI5Miw0NCw2NTMwNyw1OSw2NTMxMSw2M10sInpoLWhhbnMiOls2NTM3NCwxMjYsNjUzMDYsNTgsNjUyODEsMzMsODI0NSw5NiwxODAsOTYsMTI0OTQsNDcsMTA0Nyw1MSwxMDczLDU0LDEwNzIsOTcsMTA0MCw2NSwxMDY4LDk4LDEwNDIsNjYsMTA4OSw5OSwxMDU3LDY3LDEwNzcsMTAxLDEwNDUsNjksMTA1Myw3MiwzMDUsMTA1LDEwNTAsNzUsOTIxLDczLDEwNTIsNzcsMTA4NiwxMTEsMTA1NCw3OSwxMDA5LDExMiwxMDg4LDExMiwxMDU2LDgwLDEwNzUsMTE0LDEwNTgsODQsMjE1LDEyMCwxMDkzLDEyMCwxMDYxLDg4LDEwOTEsMTIxLDEwNTksODksNjUyODgsNDAsNjUyODksNDFdLCJ6aC1oYW50IjpbODIxMSw0NSw2NTM3NCwxMjYsMTgwLDk2LDEyNDk0LDQ3LDEwNDcsNTEsMTA3Myw1NCwxMDcyLDk3LDEwNDAsNjUsMTA2OCw5OCwxMDQyLDY2LDEwODksOTksMTA1Nyw2NywxMDc3LDEwMSwxMDQ1LDY5LDEwNTMsNzIsMzA1LDEwNSwxMDUwLDc1LDkyMSw3MywxMDUyLDc3LDEwODYsMTExLDEwNTQsNzksMTAwOSwxMTIsMTA4OCwxMTIsMTA1Niw4MCwxMDc1LDExNCwxMDU4LDg0LDIxNSwxMjAsMTA5MywxMjAsMTA2MSw4OCwxMDkxLDEyMSwxMDU5LDg5LDY1MjgzLDM1LDY1MzA3LDU5XX0nKSkpLFEuY2FjaGU9bmV3IGNsYXNze2NvbnN0cnVjdG9yKGUpe3RoaXMuZm49ZSx0aGlzLmxhc3RDYWNoZT12b2lkIDAsdGhpcy5sYXN0QXJnS2V5PXZvaWQgMH1nZXQoZSl7Y29uc3QgdD1KU09OLnN0cmluZ2lmeShlKTtyZXR1cm4gdGhpcy5sYXN0QXJnS2V5IT09dCYmKHRoaXMubGFzdEFyZ0tleT10LHRoaXMubGFzdENhY2hlPXRoaXMuZm4oZSkpLHRoaXMubGFzdENhY2hlfX0oKGU9PntmdW5jdGlvbiB0KGUpe2NvbnN0IHQ9bmV3IE1hcDtmb3IobGV0IG49MDtuPGUubGVuZ3RoO24rPTIpdC5zZXQoZVtuXSxlW24rMV0pO3JldHVybiB0fWZ1bmN0aW9uIG4oZSx0KXtpZighZSlyZXR1cm4gdDtjb25zdCBuPW5ldyBNYXA7Zm9yKGNvbnN0W3IsaV1vZiBlKXQuaGFzKHIpJiZuLnNldChyLGkpO3JldHVybiBufWNvbnN0IHI9RC5hbWJpZ3VvdXNDaGFyYWN0ZXJEYXRhLmdldFZhbHVlKCk7bGV0IGksbz1lLmZpbHRlcigoZT0+IWUuc3RhcnRzV2l0aCgiXyIpJiZlIGluIHIpKTswPT09by5sZW5ndGgmJihvPVsiX2RlZmF1bHQiXSk7Zm9yKGNvbnN0IGUgb2Ygbyl7aT1uKGksdChyW2VdKSl9Y29uc3QgYT1mdW5jdGlvbihlLHQpe2NvbnN0IG49bmV3IE1hcChlKTtmb3IoY29uc3RbZSxyXW9mIHQpbi5zZXQoZSxyKTtyZXR1cm4gbn0odChyLl9jb21tb24pLGkpO3JldHVybiBuZXcgUShhKX0pKSxRLl9sb2NhbGVzPW5ldyBHKCgoKT0+T2JqZWN0LmtleXMoUS5hbWJpZ3VvdXNDaGFyYWN0ZXJEYXRhLmdldFZhbHVlKCkpLmZpbHRlcigoZT0+IWUuc3RhcnRzV2l0aCgiXyIpKSkpKTtjbGFzcyBlZXtzdGF0aWMgZ2V0UmF3RGF0YSgpe3JldHVybiBKU09OLnBhcnNlKCJbOSwxMCwxMSwxMiwxMywzMiwxMjcsMTYwLDE3Myw4NDcsMTU2NCw0NDQ3LDQ0NDgsNjA2OCw2MDY5LDYxNTUsNjE1Niw2MTU3LDYxNTgsNzM1NSw3MzU2LDgxOTIsODE5Myw4MTk0LDgxOTUsODE5Niw4MTk3LDgxOTgsODE5OSw4MjAwLDgyMDEsODIwMiw4MjAzLDgyMDQsODIwNSw4MjA2LDgyMDcsODIzNCw4MjM1LDgyMzYsODIzNyw4MjM4LDgyMzksODI4Nyw4Mjg4LDgyODksODI5MCw4MjkxLDgyOTIsODI5Myw4Mjk0LDgyOTUsODI5Niw4Mjk3LDgyOTgsODI5OSw4MzAwLDgzMDEsODMwMiw4MzAzLDEwMjQwLDEyMjg4LDEyNjQ0LDY1MDI0LDY1MDI1LDY1MDI2LDY1MDI3LDY1MDI4LDY1MDI5LDY1MDMwLDY1MDMxLDY1MDMyLDY1MDMzLDY1MDM0LDY1MDM1LDY1MDM2LDY1MDM3LDY1MDM4LDY1MDM5LDY1Mjc5LDY1NDQwLDY1NTIwLDY1NTIxLDY1NTIyLDY1NTIzLDY1NTI0LDY1NTI1LDY1NTI2LDY1NTI3LDY1NTI4LDY1NTMyLDc4ODQ0LDExOTE1NSwxMTkxNTYsMTE5MTU3LDExOTE1OCwxMTkxNTksMTE5MTYwLDExOTE2MSwxMTkxNjIsOTE3NTA0LDkxNzUwNSw5MTc1MDYsOTE3NTA3LDkxNzUwOCw5MTc1MDksOTE3NTEwLDkxNzUxMSw5MTc1MTIsOTE3NTEzLDkxNzUxNCw5MTc1MTUsOTE3NTE2LDkxNzUxNyw5MTc1MTgsOTE3NTE5LDkxNzUyMCw5MTc1MjEsOTE3NTIyLDkxNzUyMyw5MTc1MjQsOTE3NTI1LDkxNzUyNiw5MTc1MjcsOTE3NTI4LDkxNzUyOSw5MTc1MzAsOTE3NTMxLDkxNzUzMiw5MTc1MzMsOTE3NTM0LDkxNzUzNSw5MTc1MzYsOTE3NTM3LDkxNzUzOCw5MTc1MzksOTE3NTQwLDkxNzU0MSw5MTc1NDIsOTE3NTQzLDkxNzU0NCw5MTc1NDUsOTE3NTQ2LDkxNzU0Nyw5MTc1NDgsOTE3NTQ5LDkxNzU1MCw5MTc1NTEsOTE3NTUyLDkxNzU1Myw5MTc1NTQsOTE3NTU1LDkxNzU1Niw5MTc1NTcsOTE3NTU4LDkxNzU1OSw5MTc1NjAsOTE3NTYxLDkxNzU2Miw5MTc1NjMsOTE3NTY0LDkxNzU2NSw5MTc1NjYsOTE3NTY3LDkxNzU2OCw5MTc1NjksOTE3NTcwLDkxNzU3MSw5MTc1NzIsOTE3NTczLDkxNzU3NCw5MTc1NzUsOTE3NTc2LDkxNzU3Nyw5MTc1NzgsOTE3NTc5LDkxNzU4MCw5MTc1ODEsOTE3NTgyLDkxNzU4Myw5MTc1ODQsOTE3NTg1LDkxNzU4Niw5MTc1ODcsOTE3NTg4LDkxNzU4OSw5MTc1OTAsOTE3NTkxLDkxNzU5Miw5MTc1OTMsOTE3NTk0LDkxNzU5NSw5MTc1OTYsOTE3NTk3LDkxNzU5OCw5MTc1OTksOTE3NjAwLDkxNzYwMSw5MTc2MDIsOTE3NjAzLDkxNzYwNCw5MTc2MDUsOTE3NjA2LDkxNzYwNyw5MTc2MDgsOTE3NjA5LDkxNzYxMCw5MTc2MTEsOTE3NjEyLDkxNzYxMyw5MTc2MTQsOTE3NjE1LDkxNzYxNiw5MTc2MTcsOTE3NjE4LDkxNzYxOSw5MTc2MjAsOTE3NjIxLDkxNzYyMiw5MTc2MjMsOTE3NjI0LDkxNzYyNSw5MTc2MjYsOTE3NjI3LDkxNzYyOCw5MTc2MjksOTE3NjMwLDkxNzYzMSw5MTc3NjAsOTE3NzYxLDkxNzc2Miw5MTc3NjMsOTE3NzY0LDkxNzc2NSw5MTc3NjYsOTE3NzY3LDkxNzc2OCw5MTc3NjksOTE3NzcwLDkxNzc3MSw5MTc3NzIsOTE3NzczLDkxNzc3NCw5MTc3NzUsOTE3Nzc2LDkxNzc3Nyw5MTc3NzgsOTE3Nzc5LDkxNzc4MCw5MTc3ODEsOTE3NzgyLDkxNzc4Myw5MTc3ODQsOTE3Nzg1LDkxNzc4Niw5MTc3ODcsOTE3Nzg4LDkxNzc4OSw5MTc3OTAsOTE3NzkxLDkxNzc5Miw5MTc3OTMsOTE3Nzk0LDkxNzc5NSw5MTc3OTYsOTE3Nzk3LDkxNzc5OCw5MTc3OTksOTE3ODAwLDkxNzgwMSw5MTc4MDIsOTE3ODAzLDkxNzgwNCw5MTc4MDUsOTE3ODA2LDkxNzgwNyw5MTc4MDgsOTE3ODA5LDkxNzgxMCw5MTc4MTEsOTE3ODEyLDkxNzgxMyw5MTc4MTQsOTE3ODE1LDkxNzgxNiw5MTc4MTcsOTE3ODE4LDkxNzgxOSw5MTc4MjAsOTE3ODIxLDkxNzgyMiw5MTc4MjMsOTE3ODI0LDkxNzgyNSw5MTc4MjYsOTE3ODI3LDkxNzgyOCw5MTc4MjksOTE3ODMwLDkxNzgzMSw5MTc4MzIsOTE3ODMzLDkxNzgzNCw5MTc4MzUsOTE3ODM2LDkxNzgzNyw5MTc4MzgsOTE3ODM5LDkxNzg0MCw5MTc4NDEsOTE3ODQyLDkxNzg0Myw5MTc4NDQsOTE3ODQ1LDkxNzg0Niw5MTc4NDcsOTE3ODQ4LDkxNzg0OSw5MTc4NTAsOTE3ODUxLDkxNzg1Miw5MTc4NTMsOTE3ODU0LDkxNzg1NSw5MTc4NTYsOTE3ODU3LDkxNzg1OCw5MTc4NTksOTE3ODYwLDkxNzg2MSw5MTc4NjIsOTE3ODYzLDkxNzg2NCw5MTc4NjUsOTE3ODY2LDkxNzg2Nyw5MTc4NjgsOTE3ODY5LDkxNzg3MCw5MTc4NzEsOTE3ODcyLDkxNzg3Myw5MTc4NzQsOTE3ODc1LDkxNzg3Niw5MTc4NzcsOTE3ODc4LDkxNzg3OSw5MTc4ODAsOTE3ODgxLDkxNzg4Miw5MTc4ODMsOTE3ODg0LDkxNzg4NSw5MTc4ODYsOTE3ODg3LDkxNzg4OCw5MTc4ODksOTE3ODkwLDkxNzg5MSw5MTc4OTIsOTE3ODkzLDkxNzg5NCw5MTc4OTUsOTE3ODk2LDkxNzg5Nyw5MTc4OTgsOTE3ODk5LDkxNzkwMCw5MTc5MDEsOTE3OTAyLDkxNzkwMyw5MTc5MDQsOTE3OTA1LDkxNzkwNiw5MTc5MDcsOTE3OTA4LDkxNzkwOSw5MTc5MTAsOTE3OTExLDkxNzkxMiw5MTc5MTMsOTE3OTE0LDkxNzkxNSw5MTc5MTYsOTE3OTE3LDkxNzkxOCw5MTc5MTksOTE3OTIwLDkxNzkyMSw5MTc5MjIsOTE3OTIzLDkxNzkyNCw5MTc5MjUsOTE3OTI2LDkxNzkyNyw5MTc5MjgsOTE3OTI5LDkxNzkzMCw5MTc5MzEsOTE3OTMyLDkxNzkzMyw5MTc5MzQsOTE3OTM1LDkxNzkzNiw5MTc5MzcsOTE3OTM4LDkxNzkzOSw5MTc5NDAsOTE3OTQxLDkxNzk0Miw5MTc5NDMsOTE3OTQ0LDkxNzk0NSw5MTc5NDYsOTE3OTQ3LDkxNzk0OCw5MTc5NDksOTE3OTUwLDkxNzk1MSw5MTc5NTIsOTE3OTUzLDkxNzk1NCw5MTc5NTUsOTE3OTU2LDkxNzk1Nyw5MTc5NTgsOTE3OTU5LDkxNzk2MCw5MTc5NjEsOTE3OTYyLDkxNzk2Myw5MTc5NjQsOTE3OTY1LDkxNzk2Niw5MTc5NjcsOTE3OTY4LDkxNzk2OSw5MTc5NzAsOTE3OTcxLDkxNzk3Miw5MTc5NzMsOTE3OTc0LDkxNzk3NSw5MTc5NzYsOTE3OTc3LDkxNzk3OCw5MTc5NzksOTE3OTgwLDkxNzk4MSw5MTc5ODIsOTE3OTgzLDkxNzk4NCw5MTc5ODUsOTE3OTg2LDkxNzk4Nyw5MTc5ODgsOTE3OTg5LDkxNzk5MCw5MTc5OTEsOTE3OTkyLDkxNzk5Myw5MTc5OTQsOTE3OTk1LDkxNzk5Niw5MTc5OTcsOTE3OTk4LDkxNzk5OV0iKX1zdGF0aWMgZ2V0RGF0YSgpe3JldHVybiB0aGlzLl9kYXRhfHwodGhpcy5fZGF0YT1uZXcgU2V0KGVlLmdldFJhd0RhdGEoKSkpLHRoaXMuX2RhdGF9c3RhdGljIGlzSW52aXNpYmxlQ2hhcmFjdGVyKGUpe3JldHVybiBlZS5nZXREYXRhKCkuaGFzKGUpfXN0YXRpYyBnZXQgY29kZVBvaW50cygpe3JldHVybiBlZS5nZXREYXRhKCl9fWVlLl9kYXRhPXZvaWQgMDtjbGFzcyB0ZXtjb25zdHJ1Y3RvcihlLHQsbixyKXt0aGlzLnZzV29ya2VyPWUsdGhpcy5yZXE9dCx0aGlzLm1ldGhvZD1uLHRoaXMuYXJncz1yLHRoaXMudHlwZT0wfX1jbGFzcyBuZXtjb25zdHJ1Y3RvcihlLHQsbixyKXt0aGlzLnZzV29ya2VyPWUsdGhpcy5zZXE9dCx0aGlzLnJlcz1uLHRoaXMuZXJyPXIsdGhpcy50eXBlPTF9fWNsYXNzIHJle2NvbnN0cnVjdG9yKGUsdCxuLHIpe3RoaXMudnNXb3JrZXI9ZSx0aGlzLnJlcT10LHRoaXMuZXZlbnROYW1lPW4sdGhpcy5hcmc9cix0aGlzLnR5cGU9Mn19Y2xhc3MgaWV7Y29uc3RydWN0b3IoZSx0LG4pe3RoaXMudnNXb3JrZXI9ZSx0aGlzLnJlcT10LHRoaXMuZXZlbnQ9bix0aGlzLnR5cGU9M319Y2xhc3Mgb2V7Y29uc3RydWN0b3IoZSx0KXt0aGlzLnZzV29ya2VyPWUsdGhpcy5yZXE9dCx0aGlzLnR5cGU9NH19Y2xhc3MgYWV7Y29uc3RydWN0b3IoZSl7dGhpcy5fd29ya2VySWQ9LTEsdGhpcy5faGFuZGxlcj1lLHRoaXMuX2xhc3RTZW50UmVxPTAsdGhpcy5fcGVuZGluZ1JlcGxpZXM9T2JqZWN0LmNyZWF0ZShudWxsKSx0aGlzLl9wZW5kaW5nRW1pdHRlcnM9bmV3IE1hcCx0aGlzLl9wZW5kaW5nRXZlbnRzPW5ldyBNYXB9c2V0V29ya2VySWQoZSl7dGhpcy5fd29ya2VySWQ9ZX1zZW5kTWVzc2FnZShlLHQpe2NvbnN0IG49U3RyaW5nKCsrdGhpcy5fbGFzdFNlbnRSZXEpO3JldHVybiBuZXcgUHJvbWlzZSgoKHIsaSk9Pnt0aGlzLl9wZW5kaW5nUmVwbGllc1tuXT17cmVzb2x2ZTpyLHJlamVjdDppfSx0aGlzLl9zZW5kKG5ldyB0ZSh0aGlzLl93b3JrZXJJZCxuLGUsdCkpfSkpfWxpc3RlbihlLHQpe2xldCBuPW51bGw7Y29uc3Qgcj1uZXcgQih7b25GaXJzdExpc3RlbmVyQWRkOigpPT57bj1TdHJpbmcoKyt0aGlzLl9sYXN0U2VudFJlcSksdGhpcy5fcGVuZGluZ0VtaXR0ZXJzLnNldChuLHIpLHRoaXMuX3NlbmQobmV3IHJlKHRoaXMuX3dvcmtlcklkLG4sZSx0KSl9LG9uTGFzdExpc3RlbmVyUmVtb3ZlOigpPT57dGhpcy5fcGVuZGluZ0VtaXR0ZXJzLmRlbGV0ZShuKSx0aGlzLl9zZW5kKG5ldyBvZSh0aGlzLl93b3JrZXJJZCxuKSksbj1udWxsfX0pO3JldHVybiByLmV2ZW50fWhhbmRsZU1lc3NhZ2UoZSl7ZSYmZS52c1dvcmtlciYmKC0xIT09dGhpcy5fd29ya2VySWQmJmUudnNXb3JrZXIhPT10aGlzLl93b3JrZXJJZHx8dGhpcy5faGFuZGxlTWVzc2FnZShlKSl9X2hhbmRsZU1lc3NhZ2UoZSl7c3dpdGNoKGUudHlwZSl7Y2FzZSAxOnJldHVybiB0aGlzLl9oYW5kbGVSZXBseU1lc3NhZ2UoZSk7Y2FzZSAwOnJldHVybiB0aGlzLl9oYW5kbGVSZXF1ZXN0TWVzc2FnZShlKTtjYXNlIDI6cmV0dXJuIHRoaXMuX2hhbmRsZVN1YnNjcmliZUV2ZW50TWVzc2FnZShlKTtjYXNlIDM6cmV0dXJuIHRoaXMuX2hhbmRsZUV2ZW50TWVzc2FnZShlKTtjYXNlIDQ6cmV0dXJuIHRoaXMuX2hhbmRsZVVuc3Vic2NyaWJlRXZlbnRNZXNzYWdlKGUpfX1faGFuZGxlUmVwbHlNZXNzYWdlKGUpe2lmKCF0aGlzLl9wZW5kaW5nUmVwbGllc1tlLnNlcV0pcmV0dXJuIHZvaWQgY29uc29sZS53YXJuKCJHb3QgcmVwbHkgdG8gdW5rbm93biBzZXEiKTtjb25zdCB0PXRoaXMuX3BlbmRpbmdSZXBsaWVzW2Uuc2VxXTtpZihkZWxldGUgdGhpcy5fcGVuZGluZ1JlcGxpZXNbZS5zZXFdLGUuZXJyKXtsZXQgbj1lLmVycjtyZXR1cm4gZS5lcnIuJGlzRXJyb3ImJihuPW5ldyBFcnJvcixuLm5hbWU9ZS5lcnIubmFtZSxuLm1lc3NhZ2U9ZS5lcnIubWVzc2FnZSxuLnN0YWNrPWUuZXJyLnN0YWNrKSx2b2lkIHQucmVqZWN0KG4pfXQucmVzb2x2ZShlLnJlcyl9X2hhbmRsZVJlcXVlc3RNZXNzYWdlKGUpe2NvbnN0IHQ9ZS5yZXE7dGhpcy5faGFuZGxlci5oYW5kbGVNZXNzYWdlKGUubWV0aG9kLGUuYXJncykudGhlbigoZT0+e3RoaXMuX3NlbmQobmV3IG5lKHRoaXMuX3dvcmtlcklkLHQsZSx2b2lkIDApKX0pLChlPT57ZS5kZXRhaWwgaW5zdGFuY2VvZiBFcnJvciYmKGUuZGV0YWlsPW4oZS5kZXRhaWwpKSx0aGlzLl9zZW5kKG5ldyBuZSh0aGlzLl93b3JrZXJJZCx0LHZvaWQgMCxuKGUpKSl9KSl9X2hhbmRsZVN1YnNjcmliZUV2ZW50TWVzc2FnZShlKXtjb25zdCB0PWUucmVxLG49dGhpcy5faGFuZGxlci5oYW5kbGVFdmVudChlLmV2ZW50TmFtZSxlLmFyZykoKGU9Pnt0aGlzLl9zZW5kKG5ldyBpZSh0aGlzLl93b3JrZXJJZCx0LGUpKX0pKTt0aGlzLl9wZW5kaW5nRXZlbnRzLnNldCh0LG4pfV9oYW5kbGVFdmVudE1lc3NhZ2UoZSl7dGhpcy5fcGVuZGluZ0VtaXR0ZXJzLmhhcyhlLnJlcSk/dGhpcy5fcGVuZGluZ0VtaXR0ZXJzLmdldChlLnJlcSkuZmlyZShlLmV2ZW50KTpjb25zb2xlLndhcm4oIkdvdCBldmVudCBmb3IgdW5rbm93biByZXEiKX1faGFuZGxlVW5zdWJzY3JpYmVFdmVudE1lc3NhZ2UoZSl7dGhpcy5fcGVuZGluZ0V2ZW50cy5oYXMoZS5yZXEpPyh0aGlzLl9wZW5kaW5nRXZlbnRzLmdldChlLnJlcSkuZGlzcG9zZSgpLHRoaXMuX3BlbmRpbmdFdmVudHMuZGVsZXRlKGUucmVxKSk6Y29uc29sZS53YXJuKCJHb3QgdW5zdWJzY3JpYmUgZm9yIHVua25vd24gcmVxIil9X3NlbmQoZSl7Y29uc3QgdD1bXTtpZigwPT09ZS50eXBlKWZvcihsZXQgbj0wO248ZS5hcmdzLmxlbmd0aDtuKyspZS5hcmdzW25daW5zdGFuY2VvZiBBcnJheUJ1ZmZlciYmdC5wdXNoKGUuYXJnc1tuXSk7ZWxzZSAxPT09ZS50eXBlJiZlLnJlcyBpbnN0YW5jZW9mIEFycmF5QnVmZmVyJiZ0LnB1c2goZS5yZXMpO3RoaXMuX2hhbmRsZXIuc2VuZE1lc3NhZ2UoZSx0KX19ZnVuY3Rpb24gc2UoZSl7cmV0dXJuIm8iPT09ZVswXSYmIm4iPT09ZVsxXSYmSihlLmNoYXJDb2RlQXQoMikpfWZ1bmN0aW9uIGNlKGUpe3JldHVybi9eb25EeW5hbWljLy50ZXN0KGUpJiZKKGUuY2hhckNvZGVBdCg5KSl9Y2xhc3MgbGV7Y29uc3RydWN0b3IoZSx0KXt0aGlzLl9yZXF1ZXN0SGFuZGxlckZhY3Rvcnk9dCx0aGlzLl9yZXF1ZXN0SGFuZGxlcj1udWxsLHRoaXMuX3Byb3RvY29sPW5ldyBhZSh7c2VuZE1lc3NhZ2U6KHQsbik9PntlKHQsbil9LGhhbmRsZU1lc3NhZ2U6KGUsdCk9PnRoaXMuX2hhbmRsZU1lc3NhZ2UoZSx0KSxoYW5kbGVFdmVudDooZSx0KT0+dGhpcy5faGFuZGxlRXZlbnQoZSx0KX0pfW9ubWVzc2FnZShlKXt0aGlzLl9wcm90b2NvbC5oYW5kbGVNZXNzYWdlKGUpfV9oYW5kbGVNZXNzYWdlKGUsdCl7aWYoIiRpbml0aWFsaXplIj09PWUpcmV0dXJuIHRoaXMuaW5pdGlhbGl6ZSh0WzBdLHRbMV0sdFsyXSx0WzNdKTtpZighdGhpcy5fcmVxdWVzdEhhbmRsZXJ8fCJmdW5jdGlvbiIhPXR5cGVvZiB0aGlzLl9yZXF1ZXN0SGFuZGxlcltlXSlyZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKCJNaXNzaW5nIHJlcXVlc3RIYW5kbGVyIG9yIG1ldGhvZDogIitlKSk7dHJ5e3JldHVybiBQcm9taXNlLnJlc29sdmUodGhpcy5fcmVxdWVzdEhhbmRsZXJbZV0uYXBwbHkodGhpcy5fcmVxdWVzdEhhbmRsZXIsdCkpfWNhdGNoKGUpe3JldHVybiBQcm9taXNlLnJlamVjdChlKX19X2hhbmRsZUV2ZW50KGUsdCl7aWYoIXRoaXMuX3JlcXVlc3RIYW5kbGVyKXRocm93IG5ldyBFcnJvcigiTWlzc2luZyByZXF1ZXN0SGFuZGxlciIpO2lmKGNlKGUpKXtjb25zdCBuPXRoaXMuX3JlcXVlc3RIYW5kbGVyW2VdLmNhbGwodGhpcy5fcmVxdWVzdEhhbmRsZXIsdCk7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIG4pdGhyb3cgbmV3IEVycm9yKGBNaXNzaW5nIGR5bmFtaWMgZXZlbnQgJHtlfSBvbiByZXF1ZXN0IGhhbmRsZXIuYCk7cmV0dXJuIG59aWYoc2UoZSkpe2NvbnN0IHQ9dGhpcy5fcmVxdWVzdEhhbmRsZXJbZV07aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHQpdGhyb3cgbmV3IEVycm9yKGBNaXNzaW5nIGV2ZW50ICR7ZX0gb24gcmVxdWVzdCBoYW5kbGVyLmApO3JldHVybiB0fXRocm93IG5ldyBFcnJvcihgTWFsZm9ybWVkIGV2ZW50IG5hbWUgJHtlfWApfWluaXRpYWxpemUoZSx0LG4scil7dGhpcy5fcHJvdG9jb2wuc2V0V29ya2VySWQoZSk7Y29uc3QgaT1mdW5jdGlvbihlLHQsbil7Y29uc3Qgcj1lPT5mdW5jdGlvbigpe2NvbnN0IG49QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLDApO3JldHVybiB0KGUsbil9LGk9ZT0+ZnVuY3Rpb24odCl7cmV0dXJuIG4oZSx0KX0sbz17fTtmb3IoY29uc3QgdCBvZiBlKWNlKHQpP29bdF09aSh0KTpzZSh0KT9vW3RdPW4odCx2b2lkIDApOm9bdF09cih0KTtyZXR1cm4gb30ociwoKGUsdCk9PnRoaXMuX3Byb3RvY29sLnNlbmRNZXNzYWdlKGUsdCkpLCgoZSx0KT0+dGhpcy5fcHJvdG9jb2wubGlzdGVuKGUsdCkpKTtyZXR1cm4gdGhpcy5fcmVxdWVzdEhhbmRsZXJGYWN0b3J5Pyh0aGlzLl9yZXF1ZXN0SGFuZGxlcj10aGlzLl9yZXF1ZXN0SGFuZGxlckZhY3RvcnkoaSksUHJvbWlzZS5yZXNvbHZlKEgodGhpcy5fcmVxdWVzdEhhbmRsZXIpKSk6KHQmJih2b2lkIDAhPT10LmJhc2VVcmwmJmRlbGV0ZSB0LmJhc2VVcmwsdm9pZCAwIT09dC5wYXRocyYmdm9pZCAwIT09dC5wYXRocy52cyYmZGVsZXRlIHQucGF0aHMudnMsdm9pZCAwIT09dHlwZW9mIHQudHJ1c3RlZFR5cGVzUG9saWN5JiZkZWxldGUgdC50cnVzdGVkVHlwZXNQb2xpY3ksdC5jYXRjaEVycm9yPSEwLE4ucmVxdWlyZS5jb25maWcodCkpLG5ldyBQcm9taXNlKCgoZSx0KT0+eygwLE4ucmVxdWlyZSkoW25dLChuPT57dGhpcy5fcmVxdWVzdEhhbmRsZXI9bi5jcmVhdGUoaSksdGhpcy5fcmVxdWVzdEhhbmRsZXI/ZShIKHRoaXMuX3JlcXVlc3RIYW5kbGVyKSk6dChuZXcgRXJyb3IoIk5vIFJlcXVlc3RIYW5kbGVyISIpKX0pLHQpfSkpKX19Y2xhc3MgdWV7Y29uc3RydWN0b3IoZSx0LG4scil7dGhpcy5vcmlnaW5hbFN0YXJ0PWUsdGhpcy5vcmlnaW5hbExlbmd0aD10LHRoaXMubW9kaWZpZWRTdGFydD1uLHRoaXMubW9kaWZpZWRMZW5ndGg9cn1nZXRPcmlnaW5hbEVuZCgpe3JldHVybiB0aGlzLm9yaWdpbmFsU3RhcnQrdGhpcy5vcmlnaW5hbExlbmd0aH1nZXRNb2RpZmllZEVuZCgpe3JldHVybiB0aGlzLm1vZGlmaWVkU3RhcnQrdGhpcy5tb2RpZmllZExlbmd0aH19ZnVuY3Rpb24gaGUoZSx0KXtyZXR1cm4odDw8NSktdCtlfDB9ZnVuY3Rpb24gZmUoZSx0KXt0PWhlKDE0OTQxNyx0KTtmb3IobGV0IG49MCxyPWUubGVuZ3RoO248cjtuKyspdD1oZShlLmNoYXJDb2RlQXQobiksdCk7cmV0dXJuIHR9Y2xhc3MgZGV7Y29uc3RydWN0b3IoZSl7dGhpcy5zb3VyY2U9ZX1nZXRFbGVtZW50cygpe2NvbnN0IGU9dGhpcy5zb3VyY2UsdD1uZXcgSW50MzJBcnJheShlLmxlbmd0aCk7Zm9yKGxldCBuPTAscj1lLmxlbmd0aDtuPHI7bisrKXRbbl09ZS5jaGFyQ29kZUF0KG4pO3JldHVybiB0fX1mdW5jdGlvbiBtZShlLHQsbil7cmV0dXJuIG5ldyB2ZShuZXcgZGUoZSksbmV3IGRlKHQpKS5Db21wdXRlRGlmZihuKS5jaGFuZ2VzfWNsYXNzIGdle3N0YXRpYyBBc3NlcnQoZSx0KXtpZighZSl0aHJvdyBuZXcgRXJyb3IodCl9fWNsYXNzIHBle3N0YXRpYyBDb3B5KGUsdCxuLHIsaSl7Zm9yKGxldCBvPTA7bzxpO28rKyluW3Irb109ZVt0K29dfXN0YXRpYyBDb3B5MihlLHQsbixyLGkpe2ZvcihsZXQgbz0wO288aTtvKyspbltyK29dPWVbdCtvXX19Y2xhc3MgYmV7Y29uc3RydWN0b3IoKXt0aGlzLm1fY2hhbmdlcz1bXSx0aGlzLm1fb3JpZ2luYWxTdGFydD0xMDczNzQxODI0LHRoaXMubV9tb2RpZmllZFN0YXJ0PTEwNzM3NDE4MjQsdGhpcy5tX29yaWdpbmFsQ291bnQ9MCx0aGlzLm1fbW9kaWZpZWRDb3VudD0wfU1hcmtOZXh0Q2hhbmdlKCl7KHRoaXMubV9vcmlnaW5hbENvdW50PjB8fHRoaXMubV9tb2RpZmllZENvdW50PjApJiZ0aGlzLm1fY2hhbmdlcy5wdXNoKG5ldyB1ZSh0aGlzLm1fb3JpZ2luYWxTdGFydCx0aGlzLm1fb3JpZ2luYWxDb3VudCx0aGlzLm1fbW9kaWZpZWRTdGFydCx0aGlzLm1fbW9kaWZpZWRDb3VudCkpLHRoaXMubV9vcmlnaW5hbENvdW50PTAsdGhpcy5tX21vZGlmaWVkQ291bnQ9MCx0aGlzLm1fb3JpZ2luYWxTdGFydD0xMDczNzQxODI0LHRoaXMubV9tb2RpZmllZFN0YXJ0PTEwNzM3NDE4MjR9QWRkT3JpZ2luYWxFbGVtZW50KGUsdCl7dGhpcy5tX29yaWdpbmFsU3RhcnQ9TWF0aC5taW4odGhpcy5tX29yaWdpbmFsU3RhcnQsZSksdGhpcy5tX21vZGlmaWVkU3RhcnQ9TWF0aC5taW4odGhpcy5tX21vZGlmaWVkU3RhcnQsdCksdGhpcy5tX29yaWdpbmFsQ291bnQrK31BZGRNb2RpZmllZEVsZW1lbnQoZSx0KXt0aGlzLm1fb3JpZ2luYWxTdGFydD1NYXRoLm1pbih0aGlzLm1fb3JpZ2luYWxTdGFydCxlKSx0aGlzLm1fbW9kaWZpZWRTdGFydD1NYXRoLm1pbih0aGlzLm1fbW9kaWZpZWRTdGFydCx0KSx0aGlzLm1fbW9kaWZpZWRDb3VudCsrfWdldENoYW5nZXMoKXtyZXR1cm4odGhpcy5tX29yaWdpbmFsQ291bnQ+MHx8dGhpcy5tX21vZGlmaWVkQ291bnQ+MCkmJnRoaXMuTWFya05leHRDaGFuZ2UoKSx0aGlzLm1fY2hhbmdlc31nZXRSZXZlcnNlQ2hhbmdlcygpe3JldHVybih0aGlzLm1fb3JpZ2luYWxDb3VudD4wfHx0aGlzLm1fbW9kaWZpZWRDb3VudD4wKSYmdGhpcy5NYXJrTmV4dENoYW5nZSgpLHRoaXMubV9jaGFuZ2VzLnJldmVyc2UoKSx0aGlzLm1fY2hhbmdlc319Y2xhc3MgdmV7Y29uc3RydWN0b3IoZSx0LG49bnVsbCl7dGhpcy5Db250aW51ZVByb2Nlc3NpbmdQcmVkaWNhdGU9bix0aGlzLl9vcmlnaW5hbFNlcXVlbmNlPWUsdGhpcy5fbW9kaWZpZWRTZXF1ZW5jZT10O2NvbnN0W3IsaSxvXT12ZS5fZ2V0RWxlbWVudHMoZSksW2EscyxjXT12ZS5fZ2V0RWxlbWVudHModCk7dGhpcy5faGFzU3RyaW5ncz1vJiZjLHRoaXMuX29yaWdpbmFsU3RyaW5nRWxlbWVudHM9cix0aGlzLl9vcmlnaW5hbEVsZW1lbnRzT3JIYXNoPWksdGhpcy5fbW9kaWZpZWRTdHJpbmdFbGVtZW50cz1hLHRoaXMuX21vZGlmaWVkRWxlbWVudHNPckhhc2g9cyx0aGlzLm1fZm9yd2FyZEhpc3Rvcnk9W10sdGhpcy5tX3JldmVyc2VIaXN0b3J5PVtdfXN0YXRpYyBfaXNTdHJpbmdBcnJheShlKXtyZXR1cm4gZS5sZW5ndGg+MCYmInN0cmluZyI9PXR5cGVvZiBlWzBdfXN0YXRpYyBfZ2V0RWxlbWVudHMoZSl7Y29uc3QgdD1lLmdldEVsZW1lbnRzKCk7aWYodmUuX2lzU3RyaW5nQXJyYXkodCkpe2NvbnN0IGU9bmV3IEludDMyQXJyYXkodC5sZW5ndGgpO2ZvcihsZXQgbj0wLHI9dC5sZW5ndGg7bjxyO24rKyllW25dPWZlKHRbbl0sMCk7cmV0dXJuW3QsZSwhMF19cmV0dXJuIHQgaW5zdGFuY2VvZiBJbnQzMkFycmF5P1tbXSx0LCExXTpbW10sbmV3IEludDMyQXJyYXkodCksITFdfUVsZW1lbnRzQXJlRXF1YWwoZSx0KXtyZXR1cm4gdGhpcy5fb3JpZ2luYWxFbGVtZW50c09ySGFzaFtlXT09PXRoaXMuX21vZGlmaWVkRWxlbWVudHNPckhhc2hbdF0mJighdGhpcy5faGFzU3RyaW5nc3x8dGhpcy5fb3JpZ2luYWxTdHJpbmdFbGVtZW50c1tlXT09PXRoaXMuX21vZGlmaWVkU3RyaW5nRWxlbWVudHNbdF0pfUVsZW1lbnRzQXJlU3RyaWN0RXF1YWwoZSx0KXtpZighdGhpcy5FbGVtZW50c0FyZUVxdWFsKGUsdCkpcmV0dXJuITE7cmV0dXJuIHZlLl9nZXRTdHJpY3RFbGVtZW50KHRoaXMuX29yaWdpbmFsU2VxdWVuY2UsZSk9PT12ZS5fZ2V0U3RyaWN0RWxlbWVudCh0aGlzLl9tb2RpZmllZFNlcXVlbmNlLHQpfXN0YXRpYyBfZ2V0U3RyaWN0RWxlbWVudChlLHQpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBlLmdldFN0cmljdEVsZW1lbnQ/ZS5nZXRTdHJpY3RFbGVtZW50KHQpOm51bGx9T3JpZ2luYWxFbGVtZW50c0FyZUVxdWFsKGUsdCl7cmV0dXJuIHRoaXMuX29yaWdpbmFsRWxlbWVudHNPckhhc2hbZV09PT10aGlzLl9vcmlnaW5hbEVsZW1lbnRzT3JIYXNoW3RdJiYoIXRoaXMuX2hhc1N0cmluZ3N8fHRoaXMuX29yaWdpbmFsU3RyaW5nRWxlbWVudHNbZV09PT10aGlzLl9vcmlnaW5hbFN0cmluZ0VsZW1lbnRzW3RdKX1Nb2RpZmllZEVsZW1lbnRzQXJlRXF1YWwoZSx0KXtyZXR1cm4gdGhpcy5fbW9kaWZpZWRFbGVtZW50c09ySGFzaFtlXT09PXRoaXMuX21vZGlmaWVkRWxlbWVudHNPckhhc2hbdF0mJighdGhpcy5faGFzU3RyaW5nc3x8dGhpcy5fbW9kaWZpZWRTdHJpbmdFbGVtZW50c1tlXT09PXRoaXMuX21vZGlmaWVkU3RyaW5nRWxlbWVudHNbdF0pfUNvbXB1dGVEaWZmKGUpe3JldHVybiB0aGlzLl9Db21wdXRlRGlmZigwLHRoaXMuX29yaWdpbmFsRWxlbWVudHNPckhhc2gubGVuZ3RoLTEsMCx0aGlzLl9tb2RpZmllZEVsZW1lbnRzT3JIYXNoLmxlbmd0aC0xLGUpfV9Db21wdXRlRGlmZihlLHQsbixyLGkpe2NvbnN0IG89WyExXTtsZXQgYT10aGlzLkNvbXB1dGVEaWZmUmVjdXJzaXZlKGUsdCxuLHIsbyk7cmV0dXJuIGkmJihhPXRoaXMuUHJldHRpZnlDaGFuZ2VzKGEpKSx7cXVpdEVhcmx5Om9bMF0sY2hhbmdlczphfX1Db21wdXRlRGlmZlJlY3Vyc2l2ZShlLHQsbixyLGkpe2ZvcihpWzBdPSExO2U8PXQmJm48PXImJnRoaXMuRWxlbWVudHNBcmVFcXVhbChlLG4pOyllKyssbisrO2Zvcig7dD49ZSYmcj49biYmdGhpcy5FbGVtZW50c0FyZUVxdWFsKHQscik7KXQtLSxyLS07aWYoZT50fHxuPnIpe2xldCBpO3JldHVybiBuPD1yPyhnZS5Bc3NlcnQoZT09PXQrMSwib3JpZ2luYWxTdGFydCBzaG91bGQgb25seSBiZSBvbmUgbW9yZSB0aGFuIG9yaWdpbmFsRW5kIiksaT1bbmV3IHVlKGUsMCxuLHItbisxKV0pOmU8PXQ/KGdlLkFzc2VydChuPT09cisxLCJtb2RpZmllZFN0YXJ0IHNob3VsZCBvbmx5IGJlIG9uZSBtb3JlIHRoYW4gbW9kaWZpZWRFbmQiKSxpPVtuZXcgdWUoZSx0LWUrMSxuLDApXSk6KGdlLkFzc2VydChlPT09dCsxLCJvcmlnaW5hbFN0YXJ0IHNob3VsZCBvbmx5IGJlIG9uZSBtb3JlIHRoYW4gb3JpZ2luYWxFbmQiKSxnZS5Bc3NlcnQobj09PXIrMSwibW9kaWZpZWRTdGFydCBzaG91bGQgb25seSBiZSBvbmUgbW9yZSB0aGFuIG1vZGlmaWVkRW5kIiksaT1bXSksaX1jb25zdCBvPVswXSxhPVswXSxzPXRoaXMuQ29tcHV0ZVJlY3Vyc2lvblBvaW50KGUsdCxuLHIsbyxhLGkpLGM9b1swXSxsPWFbMF07aWYobnVsbCE9PXMpcmV0dXJuIHM7aWYoIWlbMF0pe2NvbnN0IG89dGhpcy5Db21wdXRlRGlmZlJlY3Vyc2l2ZShlLGMsbixsLGkpO2xldCBhPVtdO3JldHVybiBhPWlbMF0/W25ldyB1ZShjKzEsdC0oYysxKSsxLGwrMSxyLShsKzEpKzEpXTp0aGlzLkNvbXB1dGVEaWZmUmVjdXJzaXZlKGMrMSx0LGwrMSxyLGkpLHRoaXMuQ29uY2F0ZW5hdGVDaGFuZ2VzKG8sYSl9cmV0dXJuW25ldyB1ZShlLHQtZSsxLG4sci1uKzEpXX1XQUxLVFJBQ0UoZSx0LG4scixpLG8sYSxzLGMsbCx1LGgsZixkLG0sZyxwLGIpe2xldCB2PW51bGwseT1udWxsLEM9bmV3IGJlLHc9dCxfPW4sUz1mWzBdLWdbMF0tcixBPS0xMDczNzQxODI0LEU9dGhpcy5tX2ZvcndhcmRIaXN0b3J5Lmxlbmd0aC0xO2Rve2NvbnN0IHQ9UytlO3Q9PT13fHx0PF8mJmNbdC0xXTxjW3QrMV0/KGQ9KHU9Y1t0KzFdKS1TLXIsdTxBJiZDLk1hcmtOZXh0Q2hhbmdlKCksQT11LEMuQWRkTW9kaWZpZWRFbGVtZW50KHUrMSxkKSxTPXQrMS1lKTooZD0odT1jW3QtMV0rMSktUy1yLHU8QSYmQy5NYXJrTmV4dENoYW5nZSgpLEE9dS0xLEMuQWRkT3JpZ2luYWxFbGVtZW50KHUsZCsxKSxTPXQtMS1lKSxFPj0wJiYoZT0oYz10aGlzLm1fZm9yd2FyZEhpc3RvcnlbRV0pWzBdLHc9MSxfPWMubGVuZ3RoLTEpfXdoaWxlKC0tRT49LTEpO2lmKHY9Qy5nZXRSZXZlcnNlQ2hhbmdlcygpLGJbMF0pe2xldCBlPWZbMF0rMSx0PWdbMF0rMTtpZihudWxsIT09diYmdi5sZW5ndGg+MCl7Y29uc3Qgbj12W3YubGVuZ3RoLTFdO2U9TWF0aC5tYXgoZSxuLmdldE9yaWdpbmFsRW5kKCkpLHQ9TWF0aC5tYXgodCxuLmdldE1vZGlmaWVkRW5kKCkpfXk9W25ldyB1ZShlLGgtZSsxLHQsbS10KzEpXX1lbHNle0M9bmV3IGJlLHc9byxfPWEsUz1mWzBdLWdbMF0tcyxBPTEwNzM3NDE4MjQsRT1wP3RoaXMubV9yZXZlcnNlSGlzdG9yeS5sZW5ndGgtMTp0aGlzLm1fcmV2ZXJzZUhpc3RvcnkubGVuZ3RoLTI7ZG97Y29uc3QgZT1TK2k7ZT09PXd8fGU8XyYmbFtlLTFdPj1sW2UrMV0/KGQ9KHU9bFtlKzFdLTEpLVMtcyx1PkEmJkMuTWFya05leHRDaGFuZ2UoKSxBPXUrMSxDLkFkZE9yaWdpbmFsRWxlbWVudCh1KzEsZCsxKSxTPWUrMS1pKTooZD0odT1sW2UtMV0pLVMtcyx1PkEmJkMuTWFya05leHRDaGFuZ2UoKSxBPXUsQy5BZGRNb2RpZmllZEVsZW1lbnQodSsxLGQrMSksUz1lLTEtaSksRT49MCYmKGk9KGw9dGhpcy5tX3JldmVyc2VIaXN0b3J5W0VdKVswXSx3PTEsXz1sLmxlbmd0aC0xKX13aGlsZSgtLUU+PS0xKTt5PUMuZ2V0Q2hhbmdlcygpfXJldHVybiB0aGlzLkNvbmNhdGVuYXRlQ2hhbmdlcyh2LHkpfUNvbXB1dGVSZWN1cnNpb25Qb2ludChlLHQsbixyLGksbyxhKXtsZXQgcz0wLGM9MCxsPTAsdT0wLGg9MCxmPTA7ZS0tLG4tLSxpWzBdPTAsb1swXT0wLHRoaXMubV9mb3J3YXJkSGlzdG9yeT1bXSx0aGlzLm1fcmV2ZXJzZUhpc3Rvcnk9W107Y29uc3QgZD10LWUrKHItbiksbT1kKzEsZz1uZXcgSW50MzJBcnJheShtKSxwPW5ldyBJbnQzMkFycmF5KG0pLGI9ci1uLHY9dC1lLHk9ZS1uLEM9dC1yLHc9KHYtYiklMj09MDtnW2JdPWUscFt2XT10LGFbMF09ITE7Zm9yKGxldCBfPTE7Xzw9ZC8yKzE7XysrKXtsZXQgZD0wLFM9MDtsPXRoaXMuQ2xpcERpYWdvbmFsQm91bmQoYi1fLF8sYixtKSx1PXRoaXMuQ2xpcERpYWdvbmFsQm91bmQoYitfLF8sYixtKTtmb3IobGV0IGU9bDtlPD11O2UrPTIpe3M9ZT09PWx8fGU8dSYmZ1tlLTFdPGdbZSsxXT9nW2UrMV06Z1tlLTFdKzEsYz1zLShlLWIpLXk7Y29uc3Qgbj1zO2Zvcig7czx0JiZjPHImJnRoaXMuRWxlbWVudHNBcmVFcXVhbChzKzEsYysxKTspcysrLGMrKztpZihnW2VdPXMscytjPmQrUyYmKGQ9cyxTPWMpLCF3JiZNYXRoLmFicyhlLXYpPD1fLTEmJnM+PXBbZV0pcmV0dXJuIGlbMF09cyxvWzBdPWMsbjw9cFtlXSYmXzw9MTQ0OD90aGlzLldBTEtUUkFDRShiLGwsdSx5LHYsaCxmLEMsZyxwLHMsdCxpLGMscixvLHcsYSk6bnVsbH1jb25zdCBBPShkLWUrKFMtbiktXykvMjtpZihudWxsIT09dGhpcy5Db250aW51ZVByb2Nlc3NpbmdQcmVkaWNhdGUmJiF0aGlzLkNvbnRpbnVlUHJvY2Vzc2luZ1ByZWRpY2F0ZShkLEEpKXJldHVybiBhWzBdPSEwLGlbMF09ZCxvWzBdPVMsQT4wJiZfPD0xNDQ4P3RoaXMuV0FMS1RSQUNFKGIsbCx1LHksdixoLGYsQyxnLHAscyx0LGksYyxyLG8sdyxhKTooZSsrLG4rKyxbbmV3IHVlKGUsdC1lKzEsbixyLW4rMSldKTtoPXRoaXMuQ2xpcERpYWdvbmFsQm91bmQodi1fLF8sdixtKSxmPXRoaXMuQ2xpcERpYWdvbmFsQm91bmQoditfLF8sdixtKTtmb3IobGV0IGQ9aDtkPD1mO2QrPTIpe3M9ZD09PWh8fGQ8ZiYmcFtkLTFdPj1wW2QrMV0/cFtkKzFdLTE6cFtkLTFdLGM9cy0oZC12KS1DO2NvbnN0IG09cztmb3IoO3M+ZSYmYz5uJiZ0aGlzLkVsZW1lbnRzQXJlRXF1YWwocyxjKTspcy0tLGMtLTtpZihwW2RdPXMsdyYmTWF0aC5hYnMoZC1iKTw9XyYmczw9Z1tkXSlyZXR1cm4gaVswXT1zLG9bMF09YyxtPj1nW2RdJiZfPD0xNDQ4P3RoaXMuV0FMS1RSQUNFKGIsbCx1LHksdixoLGYsQyxnLHAscyx0LGksYyxyLG8sdyxhKTpudWxsfWlmKF88PTE0NDcpe2xldCBlPW5ldyBJbnQzMkFycmF5KHUtbCsyKTtlWzBdPWItbCsxLHBlLkNvcHkyKGcsbCxlLDEsdS1sKzEpLHRoaXMubV9mb3J3YXJkSGlzdG9yeS5wdXNoKGUpLGU9bmV3IEludDMyQXJyYXkoZi1oKzIpLGVbMF09di1oKzEscGUuQ29weTIocCxoLGUsMSxmLWgrMSksdGhpcy5tX3JldmVyc2VIaXN0b3J5LnB1c2goZSl9fXJldHVybiB0aGlzLldBTEtUUkFDRShiLGwsdSx5LHYsaCxmLEMsZyxwLHMsdCxpLGMscixvLHcsYSl9UHJldHRpZnlDaGFuZ2VzKGUpe2ZvcihsZXQgdD0wO3Q8ZS5sZW5ndGg7dCsrKXtjb25zdCBuPWVbdF0scj10PGUubGVuZ3RoLTE/ZVt0KzFdLm9yaWdpbmFsU3RhcnQ6dGhpcy5fb3JpZ2luYWxFbGVtZW50c09ySGFzaC5sZW5ndGgsaT10PGUubGVuZ3RoLTE/ZVt0KzFdLm1vZGlmaWVkU3RhcnQ6dGhpcy5fbW9kaWZpZWRFbGVtZW50c09ySGFzaC5sZW5ndGgsbz1uLm9yaWdpbmFsTGVuZ3RoPjAsYT1uLm1vZGlmaWVkTGVuZ3RoPjA7Zm9yKDtuLm9yaWdpbmFsU3RhcnQrbi5vcmlnaW5hbExlbmd0aDxyJiZuLm1vZGlmaWVkU3RhcnQrbi5tb2RpZmllZExlbmd0aDxpJiYoIW98fHRoaXMuT3JpZ2luYWxFbGVtZW50c0FyZUVxdWFsKG4ub3JpZ2luYWxTdGFydCxuLm9yaWdpbmFsU3RhcnQrbi5vcmlnaW5hbExlbmd0aCkpJiYoIWF8fHRoaXMuTW9kaWZpZWRFbGVtZW50c0FyZUVxdWFsKG4ubW9kaWZpZWRTdGFydCxuLm1vZGlmaWVkU3RhcnQrbi5tb2RpZmllZExlbmd0aCkpOyl7Y29uc3QgZT10aGlzLkVsZW1lbnRzQXJlU3RyaWN0RXF1YWwobi5vcmlnaW5hbFN0YXJ0LG4ubW9kaWZpZWRTdGFydCk7aWYodGhpcy5FbGVtZW50c0FyZVN0cmljdEVxdWFsKG4ub3JpZ2luYWxTdGFydCtuLm9yaWdpbmFsTGVuZ3RoLG4ubW9kaWZpZWRTdGFydCtuLm1vZGlmaWVkTGVuZ3RoKSYmIWUpYnJlYWs7bi5vcmlnaW5hbFN0YXJ0Kyssbi5tb2RpZmllZFN0YXJ0Kyt9Y29uc3Qgcz1bbnVsbF07dDxlLmxlbmd0aC0xJiZ0aGlzLkNoYW5nZXNPdmVybGFwKGVbdF0sZVt0KzFdLHMpJiYoZVt0XT1zWzBdLGUuc3BsaWNlKHQrMSwxKSx0LS0pfWZvcihsZXQgdD1lLmxlbmd0aC0xO3Q+PTA7dC0tKXtjb25zdCBuPWVbdF07bGV0IHI9MCxpPTA7aWYodD4wKXtjb25zdCBuPWVbdC0xXTtyPW4ub3JpZ2luYWxTdGFydCtuLm9yaWdpbmFsTGVuZ3RoLGk9bi5tb2RpZmllZFN0YXJ0K24ubW9kaWZpZWRMZW5ndGh9Y29uc3Qgbz1uLm9yaWdpbmFsTGVuZ3RoPjAsYT1uLm1vZGlmaWVkTGVuZ3RoPjA7bGV0IHM9MCxjPXRoaXMuX2JvdW5kYXJ5U2NvcmUobi5vcmlnaW5hbFN0YXJ0LG4ub3JpZ2luYWxMZW5ndGgsbi5tb2RpZmllZFN0YXJ0LG4ubW9kaWZpZWRMZW5ndGgpO2ZvcihsZXQgZT0xOztlKyspe2NvbnN0IHQ9bi5vcmlnaW5hbFN0YXJ0LWUsbD1uLm1vZGlmaWVkU3RhcnQtZTtpZih0PHJ8fGw8aSlicmVhaztpZihvJiYhdGhpcy5PcmlnaW5hbEVsZW1lbnRzQXJlRXF1YWwodCx0K24ub3JpZ2luYWxMZW5ndGgpKWJyZWFrO2lmKGEmJiF0aGlzLk1vZGlmaWVkRWxlbWVudHNBcmVFcXVhbChsLGwrbi5tb2RpZmllZExlbmd0aCkpYnJlYWs7Y29uc3QgdT0odD09PXImJmw9PT1pPzU6MCkrdGhpcy5fYm91bmRhcnlTY29yZSh0LG4ub3JpZ2luYWxMZW5ndGgsbCxuLm1vZGlmaWVkTGVuZ3RoKTt1PmMmJihjPXUscz1lKX1uLm9yaWdpbmFsU3RhcnQtPXMsbi5tb2RpZmllZFN0YXJ0LT1zO2NvbnN0IGw9W251bGxdO3Q+MCYmdGhpcy5DaGFuZ2VzT3ZlcmxhcChlW3QtMV0sZVt0XSxsKSYmKGVbdC0xXT1sWzBdLGUuc3BsaWNlKHQsMSksdCsrKX1pZih0aGlzLl9oYXNTdHJpbmdzKWZvcihsZXQgdD0xLG49ZS5sZW5ndGg7dDxuO3QrKyl7Y29uc3Qgbj1lW3QtMV0scj1lW3RdLGk9ci5vcmlnaW5hbFN0YXJ0LW4ub3JpZ2luYWxTdGFydC1uLm9yaWdpbmFsTGVuZ3RoLG89bi5vcmlnaW5hbFN0YXJ0LGE9ci5vcmlnaW5hbFN0YXJ0K3Iub3JpZ2luYWxMZW5ndGgscz1hLW8sYz1uLm1vZGlmaWVkU3RhcnQsbD1yLm1vZGlmaWVkU3RhcnQrci5tb2RpZmllZExlbmd0aCx1PWwtYztpZihpPDUmJnM8MjAmJnU8MjApe2NvbnN0IGU9dGhpcy5fZmluZEJldHRlckNvbnRpZ3VvdXNTZXF1ZW5jZShvLHMsYyx1LGkpO2lmKGUpe2NvbnN0W3Qsb109ZTt0PT09bi5vcmlnaW5hbFN0YXJ0K24ub3JpZ2luYWxMZW5ndGgmJm89PT1uLm1vZGlmaWVkU3RhcnQrbi5tb2RpZmllZExlbmd0aHx8KG4ub3JpZ2luYWxMZW5ndGg9dC1uLm9yaWdpbmFsU3RhcnQsbi5tb2RpZmllZExlbmd0aD1vLW4ubW9kaWZpZWRTdGFydCxyLm9yaWdpbmFsU3RhcnQ9dCtpLHIubW9kaWZpZWRTdGFydD1vK2ksci5vcmlnaW5hbExlbmd0aD1hLXIub3JpZ2luYWxTdGFydCxyLm1vZGlmaWVkTGVuZ3RoPWwtci5tb2RpZmllZFN0YXJ0KX19fXJldHVybiBlfV9maW5kQmV0dGVyQ29udGlndW91c1NlcXVlbmNlKGUsdCxuLHIsaSl7aWYodDxpfHxyPGkpcmV0dXJuIG51bGw7Y29uc3Qgbz1lK3QtaSsxLGE9bityLWkrMTtsZXQgcz0wLGM9MCxsPTA7Zm9yKGxldCB0PWU7dDxvO3QrKylmb3IobGV0IGU9bjtlPGE7ZSsrKXtjb25zdCBuPXRoaXMuX2NvbnRpZ3VvdXNTZXF1ZW5jZVNjb3JlKHQsZSxpKTtuPjAmJm4+cyYmKHM9bixjPXQsbD1lKX1yZXR1cm4gcz4wP1tjLGxdOm51bGx9X2NvbnRpZ3VvdXNTZXF1ZW5jZVNjb3JlKGUsdCxuKXtsZXQgcj0wO2ZvcihsZXQgaT0wO2k8bjtpKyspe2lmKCF0aGlzLkVsZW1lbnRzQXJlRXF1YWwoZStpLHQraSkpcmV0dXJuIDA7cis9dGhpcy5fb3JpZ2luYWxTdHJpbmdFbGVtZW50c1tlK2ldLmxlbmd0aH1yZXR1cm4gcn1fT3JpZ2luYWxJc0JvdW5kYXJ5KGUpe3JldHVybiBlPD0wfHxlPj10aGlzLl9vcmlnaW5hbEVsZW1lbnRzT3JIYXNoLmxlbmd0aC0xfHx0aGlzLl9oYXNTdHJpbmdzJiYvXlxzKiQvLnRlc3QodGhpcy5fb3JpZ2luYWxTdHJpbmdFbGVtZW50c1tlXSl9X09yaWdpbmFsUmVnaW9uSXNCb3VuZGFyeShlLHQpe2lmKHRoaXMuX09yaWdpbmFsSXNCb3VuZGFyeShlKXx8dGhpcy5fT3JpZ2luYWxJc0JvdW5kYXJ5KGUtMSkpcmV0dXJuITA7aWYodD4wKXtjb25zdCBuPWUrdDtpZih0aGlzLl9PcmlnaW5hbElzQm91bmRhcnkobi0xKXx8dGhpcy5fT3JpZ2luYWxJc0JvdW5kYXJ5KG4pKXJldHVybiEwfXJldHVybiExfV9Nb2RpZmllZElzQm91bmRhcnkoZSl7cmV0dXJuIGU8PTB8fGU+PXRoaXMuX21vZGlmaWVkRWxlbWVudHNPckhhc2gubGVuZ3RoLTF8fHRoaXMuX2hhc1N0cmluZ3MmJi9eXHMqJC8udGVzdCh0aGlzLl9tb2RpZmllZFN0cmluZ0VsZW1lbnRzW2VdKX1fTW9kaWZpZWRSZWdpb25Jc0JvdW5kYXJ5KGUsdCl7aWYodGhpcy5fTW9kaWZpZWRJc0JvdW5kYXJ5KGUpfHx0aGlzLl9Nb2RpZmllZElzQm91bmRhcnkoZS0xKSlyZXR1cm4hMDtpZih0PjApe2NvbnN0IG49ZSt0O2lmKHRoaXMuX01vZGlmaWVkSXNCb3VuZGFyeShuLTEpfHx0aGlzLl9Nb2RpZmllZElzQm91bmRhcnkobikpcmV0dXJuITB9cmV0dXJuITF9X2JvdW5kYXJ5U2NvcmUoZSx0LG4scil7cmV0dXJuKHRoaXMuX09yaWdpbmFsUmVnaW9uSXNCb3VuZGFyeShlLHQpPzE6MCkrKHRoaXMuX01vZGlmaWVkUmVnaW9uSXNCb3VuZGFyeShuLHIpPzE6MCl9Q29uY2F0ZW5hdGVDaGFuZ2VzKGUsdCl7Y29uc3Qgbj1bXTtpZigwPT09ZS5sZW5ndGh8fDA9PT10Lmxlbmd0aClyZXR1cm4gdC5sZW5ndGg+MD90OmU7aWYodGhpcy5DaGFuZ2VzT3ZlcmxhcChlW2UubGVuZ3RoLTFdLHRbMF0sbikpe2NvbnN0IHI9bmV3IEFycmF5KGUubGVuZ3RoK3QubGVuZ3RoLTEpO3JldHVybiBwZS5Db3B5KGUsMCxyLDAsZS5sZW5ndGgtMSkscltlLmxlbmd0aC0xXT1uWzBdLHBlLkNvcHkodCwxLHIsZS5sZW5ndGgsdC5sZW5ndGgtMSkscn17Y29uc3Qgbj1uZXcgQXJyYXkoZS5sZW5ndGgrdC5sZW5ndGgpO3JldHVybiBwZS5Db3B5KGUsMCxuLDAsZS5sZW5ndGgpLHBlLkNvcHkodCwwLG4sZS5sZW5ndGgsdC5sZW5ndGgpLG59fUNoYW5nZXNPdmVybGFwKGUsdCxuKXtpZihnZS5Bc3NlcnQoZS5vcmlnaW5hbFN0YXJ0PD10Lm9yaWdpbmFsU3RhcnQsIkxlZnQgY2hhbmdlIGlzIG5vdCBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gcmlnaHQgY2hhbmdlIiksZ2UuQXNzZXJ0KGUubW9kaWZpZWRTdGFydDw9dC5tb2RpZmllZFN0YXJ0LCJMZWZ0IGNoYW5nZSBpcyBub3QgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIHJpZ2h0IGNoYW5nZSIpLGUub3JpZ2luYWxTdGFydCtlLm9yaWdpbmFsTGVuZ3RoPj10Lm9yaWdpbmFsU3RhcnR8fGUubW9kaWZpZWRTdGFydCtlLm1vZGlmaWVkTGVuZ3RoPj10Lm1vZGlmaWVkU3RhcnQpe2NvbnN0IHI9ZS5vcmlnaW5hbFN0YXJ0O2xldCBpPWUub3JpZ2luYWxMZW5ndGg7Y29uc3Qgbz1lLm1vZGlmaWVkU3RhcnQ7bGV0IGE9ZS5tb2RpZmllZExlbmd0aDtyZXR1cm4gZS5vcmlnaW5hbFN0YXJ0K2Uub3JpZ2luYWxMZW5ndGg+PXQub3JpZ2luYWxTdGFydCYmKGk9dC5vcmlnaW5hbFN0YXJ0K3Qub3JpZ2luYWxMZW5ndGgtZS5vcmlnaW5hbFN0YXJ0KSxlLm1vZGlmaWVkU3RhcnQrZS5tb2RpZmllZExlbmd0aD49dC5tb2RpZmllZFN0YXJ0JiYoYT10Lm1vZGlmaWVkU3RhcnQrdC5tb2RpZmllZExlbmd0aC1lLm1vZGlmaWVkU3RhcnQpLG5bMF09bmV3IHVlKHIsaSxvLGEpLCEwfXJldHVybiBuWzBdPW51bGwsITF9Q2xpcERpYWdvbmFsQm91bmQoZSx0LG4scil7aWYoZT49MCYmZTxyKXJldHVybiBlO2NvbnN0IGk9dCUyPT0wO2lmKGU8MCl7cmV0dXJuIGk9PT0obiUyPT0wKT8wOjF9cmV0dXJuIGk9PT0oKHItbi0xKSUyPT0wKT9yLTE6ci0yfX1sZXQgeWU7aWYodm9pZCAwIT09Ti52c2NvZGUmJnZvaWQgMCE9PU4udnNjb2RlLnByb2Nlc3Mpe2NvbnN0IGU9Ti52c2NvZGUucHJvY2Vzczt5ZT17Z2V0IHBsYXRmb3JtKCl7cmV0dXJuIGUucGxhdGZvcm19LGdldCBhcmNoKCl7cmV0dXJuIGUuYXJjaH0sZ2V0IGVudigpe3JldHVybiBlLmVudn0sY3dkOigpPT5lLmN3ZCgpfX1lbHNlIHllPSJ1bmRlZmluZWQiIT10eXBlb2YgcHJvY2Vzcz97Z2V0IHBsYXRmb3JtKCl7cmV0dXJuIHByb2Nlc3MucGxhdGZvcm19LGdldCBhcmNoKCl7cmV0dXJuIHByb2Nlc3MuYXJjaH0sZ2V0IGVudigpe3JldHVybiBwcm9jZXNzLmVudn0sY3dkOigpPT5wcm9jZXNzLmVudi5WU0NPREVfQ1dEfHxwcm9jZXNzLmN3ZCgpfTp7Z2V0IHBsYXRmb3JtKCl7cmV0dXJuIFQ/IndpbjMyIjpPPyJkYXJ3aW4iOiJsaW51eCJ9LGdldCBhcmNoKCl7fSxnZXQgZW52KCl7cmV0dXJue319LGN3ZDooKT0+Ii8ifTtjb25zdCBDZT15ZS5jd2Qsd2U9eWUuZW52LF9lPXllLnBsYXRmb3JtLFNlPTQ2LEFlPTQ3LEVlPTkyLHhlPTU4O2NsYXNzIE5lIGV4dGVuZHMgRXJyb3J7Y29uc3RydWN0b3IoZSx0LG4pe2xldCByOyJzdHJpbmciPT10eXBlb2YgdCYmMD09PXQuaW5kZXhPZigibm90ICIpPyhyPSJtdXN0IG5vdCBiZSIsdD10LnJlcGxhY2UoL15ub3QgLywiIikpOnI9Im11c3QgYmUiO2NvbnN0IGk9LTEhPT1lLmluZGV4T2YoIi4iKT8icHJvcGVydHkiOiJhcmd1bWVudCI7bGV0IG89YFRoZSAiJHtlfSIgJHtpfSAke3J9IG9mIHR5cGUgJHt0fWA7bys9Ii4gUmVjZWl2ZWQgdHlwZSAiK3R5cGVvZiBuLHN1cGVyKG8pLHRoaXMuY29kZT0iRVJSX0lOVkFMSURfQVJHX1RZUEUifX1mdW5jdGlvbiBrZShlLHQpe2lmKCJzdHJpbmciIT10eXBlb2YgZSl0aHJvdyBuZXcgTmUodCwic3RyaW5nIixlKX1mdW5jdGlvbiBMZShlKXtyZXR1cm4gZT09PUFlfHxlPT09RWV9ZnVuY3Rpb24gVGUoZSl7cmV0dXJuIGU9PT1BZX1mdW5jdGlvbiBPZShlKXtyZXR1cm4gZT49NjUmJmU8PTkwfHxlPj05NyYmZTw9MTIyfWZ1bmN0aW9uIEllKGUsdCxuLHIpe2xldCBpPSIiLG89MCxhPS0xLHM9MCxjPTA7Zm9yKGxldCBsPTA7bDw9ZS5sZW5ndGg7KytsKXtpZihsPGUubGVuZ3RoKWM9ZS5jaGFyQ29kZUF0KGwpO2Vsc2V7aWYocihjKSlicmVhaztjPUFlfWlmKHIoYykpe2lmKGE9PT1sLTF8fDE9PT1zKTtlbHNlIGlmKDI9PT1zKXtpZihpLmxlbmd0aDwyfHwyIT09b3x8aS5jaGFyQ29kZUF0KGkubGVuZ3RoLTEpIT09U2V8fGkuY2hhckNvZGVBdChpLmxlbmd0aC0yKSE9PVNlKXtpZihpLmxlbmd0aD4yKXtjb25zdCBlPWkubGFzdEluZGV4T2Yobik7LTE9PT1lPyhpPSIiLG89MCk6KGk9aS5zbGljZSgwLGUpLG89aS5sZW5ndGgtMS1pLmxhc3RJbmRleE9mKG4pKSxhPWwscz0wO2NvbnRpbnVlfWlmKDAhPT1pLmxlbmd0aCl7aT0iIixvPTAsYT1sLHM9MDtjb250aW51ZX19dCYmKGkrPWkubGVuZ3RoPjA/YCR7bn0uLmA6Ii4uIixvPTIpfWVsc2UgaS5sZW5ndGg+MD9pKz1gJHtufSR7ZS5zbGljZShhKzEsbCl9YDppPWUuc2xpY2UoYSsxLGwpLG89bC1hLTE7YT1sLHM9MH1lbHNlIGM9PT1TZSYmLTEhPT1zPysrczpzPS0xfXJldHVybiBpfWZ1bmN0aW9uIE1lKGUsdCl7aWYobnVsbD09PXR8fCJvYmplY3QiIT10eXBlb2YgdCl0aHJvdyBuZXcgTmUoInBhdGhPYmplY3QiLCJPYmplY3QiLHQpO2NvbnN0IG49dC5kaXJ8fHQucm9vdCxyPXQuYmFzZXx8YCR7dC5uYW1lfHwiIn0ke3QuZXh0fHwiIn1gO3JldHVybiBuP249PT10LnJvb3Q/YCR7bn0ke3J9YDpgJHtufSR7ZX0ke3J9YDpyfWNvbnN0IFBlPXtyZXNvbHZlKC4uLmUpe2xldCB0PSIiLG49IiIscj0hMTtmb3IobGV0IGk9ZS5sZW5ndGgtMTtpPj0tMTtpLS0pe2xldCBvO2lmKGk+PTApe2lmKG89ZVtpXSxrZShvLCJwYXRoIiksMD09PW8ubGVuZ3RoKWNvbnRpbnVlfWVsc2UgMD09PXQubGVuZ3RoP289Q2UoKToobz13ZVtgPSR7dH1gXXx8Q2UoKSwodm9pZCAwPT09b3x8by5zbGljZSgwLDIpLnRvTG93ZXJDYXNlKCkhPT10LnRvTG93ZXJDYXNlKCkmJm8uY2hhckNvZGVBdCgyKT09PUVlKSYmKG89YCR7dH1cXGApKTtjb25zdCBhPW8ubGVuZ3RoO2xldCBzPTAsYz0iIixsPSExO2NvbnN0IHU9by5jaGFyQ29kZUF0KDApO2lmKDE9PT1hKUxlKHUpJiYocz0xLGw9ITApO2Vsc2UgaWYoTGUodSkpaWYobD0hMCxMZShvLmNoYXJDb2RlQXQoMSkpKXtsZXQgZT0yLHQ9ZTtmb3IoO2U8YSYmIUxlKG8uY2hhckNvZGVBdChlKSk7KWUrKztpZihlPGEmJmUhPT10KXtjb25zdCBuPW8uc2xpY2UodCxlKTtmb3IodD1lO2U8YSYmTGUoby5jaGFyQ29kZUF0KGUpKTspZSsrO2lmKGU8YSYmZSE9PXQpe2Zvcih0PWU7ZTxhJiYhTGUoby5jaGFyQ29kZUF0KGUpKTspZSsrO2UhPT1hJiZlPT09dHx8KGM9YFxcXFwke259XFwke28uc2xpY2UodCxlKX1gLHM9ZSl9fX1lbHNlIHM9MTtlbHNlIE9lKHUpJiZvLmNoYXJDb2RlQXQoMSk9PT14ZSYmKGM9by5zbGljZSgwLDIpLHM9MixhPjImJkxlKG8uY2hhckNvZGVBdCgyKSkmJihsPSEwLHM9MykpO2lmKGMubGVuZ3RoPjApaWYodC5sZW5ndGg+MCl7aWYoYy50b0xvd2VyQ2FzZSgpIT09dC50b0xvd2VyQ2FzZSgpKWNvbnRpbnVlfWVsc2UgdD1jO2lmKHIpe2lmKHQubGVuZ3RoPjApYnJlYWt9ZWxzZSBpZihuPWAke28uc2xpY2Uocyl9XFwke259YCxyPWwsbCYmdC5sZW5ndGg+MClicmVha31yZXR1cm4gbj1JZShuLCFyLCJcXCIsTGUpLHI/YCR7dH1cXCR7bn1gOmAke3R9JHtufWB8fCIuIn0sbm9ybWFsaXplKGUpe2tlKGUsInBhdGgiKTtjb25zdCB0PWUubGVuZ3RoO2lmKDA9PT10KXJldHVybiIuIjtsZXQgbixyPTAsaT0hMTtjb25zdCBvPWUuY2hhckNvZGVBdCgwKTtpZigxPT09dClyZXR1cm4gVGUobyk/IlxcIjplO2lmKExlKG8pKWlmKGk9ITAsTGUoZS5jaGFyQ29kZUF0KDEpKSl7bGV0IGk9MixvPWk7Zm9yKDtpPHQmJiFMZShlLmNoYXJDb2RlQXQoaSkpOylpKys7aWYoaTx0JiZpIT09byl7Y29uc3QgYT1lLnNsaWNlKG8saSk7Zm9yKG89aTtpPHQmJkxlKGUuY2hhckNvZGVBdChpKSk7KWkrKztpZihpPHQmJmkhPT1vKXtmb3Iobz1pO2k8dCYmIUxlKGUuY2hhckNvZGVBdChpKSk7KWkrKztpZihpPT09dClyZXR1cm5gXFxcXCR7YX1cXCR7ZS5zbGljZShvKX1cXGA7aSE9PW8mJihuPWBcXFxcJHthfVxcJHtlLnNsaWNlKG8saSl9YCxyPWkpfX19ZWxzZSByPTE7ZWxzZSBPZShvKSYmZS5jaGFyQ29kZUF0KDEpPT09eGUmJihuPWUuc2xpY2UoMCwyKSxyPTIsdD4yJiZMZShlLmNoYXJDb2RlQXQoMikpJiYoaT0hMCxyPTMpKTtsZXQgYT1yPHQ/SWUoZS5zbGljZShyKSwhaSwiXFwiLExlKToiIjtyZXR1cm4gMCE9PWEubGVuZ3RofHxpfHwoYT0iLiIpLGEubGVuZ3RoPjAmJkxlKGUuY2hhckNvZGVBdCh0LTEpKSYmKGErPSJcXCIpLHZvaWQgMD09PW4/aT9gXFwke2F9YDphOmk/YCR7bn1cXCR7YX1gOmAke259JHthfWB9LGlzQWJzb2x1dGUoZSl7a2UoZSwicGF0aCIpO2NvbnN0IHQ9ZS5sZW5ndGg7aWYoMD09PXQpcmV0dXJuITE7Y29uc3Qgbj1lLmNoYXJDb2RlQXQoMCk7cmV0dXJuIExlKG4pfHx0PjImJk9lKG4pJiZlLmNoYXJDb2RlQXQoMSk9PT14ZSYmTGUoZS5jaGFyQ29kZUF0KDIpKX0sam9pbiguLi5lKXtpZigwPT09ZS5sZW5ndGgpcmV0dXJuIi4iO2xldCB0LG47Zm9yKGxldCByPTA7cjxlLmxlbmd0aDsrK3Ipe2NvbnN0IGk9ZVtyXTtrZShpLCJwYXRoIiksaS5sZW5ndGg+MCYmKHZvaWQgMD09PXQ/dD1uPWk6dCs9YFxcJHtpfWApfWlmKHZvaWQgMD09PXQpcmV0dXJuIi4iO2xldCByPSEwLGk9MDtpZigic3RyaW5nIj09dHlwZW9mIG4mJkxlKG4uY2hhckNvZGVBdCgwKSkpeysraTtjb25zdCBlPW4ubGVuZ3RoO2U+MSYmTGUobi5jaGFyQ29kZUF0KDEpKSYmKCsraSxlPjImJihMZShuLmNoYXJDb2RlQXQoMikpPysraTpyPSExKSl9aWYocil7Zm9yKDtpPHQubGVuZ3RoJiZMZSh0LmNoYXJDb2RlQXQoaSkpOylpKys7aT49MiYmKHQ9YFxcJHt0LnNsaWNlKGkpfWApfXJldHVybiBQZS5ub3JtYWxpemUodCl9LHJlbGF0aXZlKGUsdCl7aWYoa2UoZSwiZnJvbSIpLGtlKHQsInRvIiksZT09PXQpcmV0dXJuIiI7Y29uc3Qgbj1QZS5yZXNvbHZlKGUpLHI9UGUucmVzb2x2ZSh0KTtpZihuPT09cilyZXR1cm4iIjtpZigoZT1uLnRvTG93ZXJDYXNlKCkpPT09KHQ9ci50b0xvd2VyQ2FzZSgpKSlyZXR1cm4iIjtsZXQgaT0wO2Zvcig7aTxlLmxlbmd0aCYmZS5jaGFyQ29kZUF0KGkpPT09RWU7KWkrKztsZXQgbz1lLmxlbmd0aDtmb3IoO28tMT5pJiZlLmNoYXJDb2RlQXQoby0xKT09PUVlOylvLS07Y29uc3QgYT1vLWk7bGV0IHM9MDtmb3IoO3M8dC5sZW5ndGgmJnQuY2hhckNvZGVBdChzKT09PUVlOylzKys7bGV0IGM9dC5sZW5ndGg7Zm9yKDtjLTE+cyYmdC5jaGFyQ29kZUF0KGMtMSk9PT1FZTspYy0tO2NvbnN0IGw9Yy1zLHU9YTxsP2E6bDtsZXQgaD0tMSxmPTA7Zm9yKDtmPHU7ZisrKXtjb25zdCBuPWUuY2hhckNvZGVBdChpK2YpO2lmKG4hPT10LmNoYXJDb2RlQXQocytmKSlicmVhaztuPT09RWUmJihoPWYpfWlmKGYhPT11KXtpZigtMT09PWgpcmV0dXJuIHJ9ZWxzZXtpZihsPnUpe2lmKHQuY2hhckNvZGVBdChzK2YpPT09RWUpcmV0dXJuIHIuc2xpY2UocytmKzEpO2lmKDI9PT1mKXJldHVybiByLnNsaWNlKHMrZil9YT51JiYoZS5jaGFyQ29kZUF0KGkrZik9PT1FZT9oPWY6Mj09PWYmJihoPTMpKSwtMT09PWgmJihoPTApfWxldCBkPSIiO2ZvcihmPWkraCsxO2Y8PW87KytmKWYhPT1vJiZlLmNoYXJDb2RlQXQoZikhPT1FZXx8KGQrPTA9PT1kLmxlbmd0aD8iLi4iOiJcXC4uIik7cmV0dXJuIHMrPWgsZC5sZW5ndGg+MD9gJHtkfSR7ci5zbGljZShzLGMpfWA6KHIuY2hhckNvZGVBdChzKT09PUVlJiYrK3Msci5zbGljZShzLGMpKX0sdG9OYW1lc3BhY2VkUGF0aChlKXtpZigic3RyaW5nIiE9dHlwZW9mIGUpcmV0dXJuIGU7aWYoMD09PWUubGVuZ3RoKXJldHVybiIiO2NvbnN0IHQ9UGUucmVzb2x2ZShlKTtpZih0Lmxlbmd0aDw9MilyZXR1cm4gZTtpZih0LmNoYXJDb2RlQXQoMCk9PT1FZSl7aWYodC5jaGFyQ29kZUF0KDEpPT09RWUpe2NvbnN0IGU9dC5jaGFyQ29kZUF0KDIpO2lmKDYzIT09ZSYmZSE9PVNlKXJldHVybmBcXFxcP1xcVU5DXFwke3Quc2xpY2UoMil9YH19ZWxzZSBpZihPZSh0LmNoYXJDb2RlQXQoMCkpJiZ0LmNoYXJDb2RlQXQoMSk9PT14ZSYmdC5jaGFyQ29kZUF0KDIpPT09RWUpcmV0dXJuYFxcXFw/XFwke3R9YDtyZXR1cm4gZX0sZGlybmFtZShlKXtrZShlLCJwYXRoIik7Y29uc3QgdD1lLmxlbmd0aDtpZigwPT09dClyZXR1cm4iLiI7bGV0IG49LTEscj0wO2NvbnN0IGk9ZS5jaGFyQ29kZUF0KDApO2lmKDE9PT10KXJldHVybiBMZShpKT9lOiIuIjtpZihMZShpKSl7aWYobj1yPTEsTGUoZS5jaGFyQ29kZUF0KDEpKSl7bGV0IGk9MixvPWk7Zm9yKDtpPHQmJiFMZShlLmNoYXJDb2RlQXQoaSkpOylpKys7aWYoaTx0JiZpIT09byl7Zm9yKG89aTtpPHQmJkxlKGUuY2hhckNvZGVBdChpKSk7KWkrKztpZihpPHQmJmkhPT1vKXtmb3Iobz1pO2k8dCYmIUxlKGUuY2hhckNvZGVBdChpKSk7KWkrKztpZihpPT09dClyZXR1cm4gZTtpIT09byYmKG49cj1pKzEpfX19fWVsc2UgT2UoaSkmJmUuY2hhckNvZGVBdCgxKT09PXhlJiYobj10PjImJkxlKGUuY2hhckNvZGVBdCgyKSk/MzoyLHI9bik7bGV0IG89LTEsYT0hMDtmb3IobGV0IG49dC0xO24+PXI7LS1uKWlmKExlKGUuY2hhckNvZGVBdChuKSkpe2lmKCFhKXtvPW47YnJlYWt9fWVsc2UgYT0hMTtpZigtMT09PW8pe2lmKC0xPT09bilyZXR1cm4iLiI7bz1ufXJldHVybiBlLnNsaWNlKDAsbyl9LGJhc2VuYW1lKGUsdCl7dm9pZCAwIT09dCYma2UodCwiZXh0Iiksa2UoZSwicGF0aCIpO2xldCBuLHI9MCxpPS0xLG89ITA7aWYoZS5sZW5ndGg+PTImJk9lKGUuY2hhckNvZGVBdCgwKSkmJmUuY2hhckNvZGVBdCgxKT09PXhlJiYocj0yKSx2b2lkIDAhPT10JiZ0Lmxlbmd0aD4wJiZ0Lmxlbmd0aDw9ZS5sZW5ndGgpe2lmKHQ9PT1lKXJldHVybiIiO2xldCBhPXQubGVuZ3RoLTEscz0tMTtmb3Iobj1lLmxlbmd0aC0xO24+PXI7LS1uKXtjb25zdCBjPWUuY2hhckNvZGVBdChuKTtpZihMZShjKSl7aWYoIW8pe3I9bisxO2JyZWFrfX1lbHNlLTE9PT1zJiYobz0hMSxzPW4rMSksYT49MCYmKGM9PT10LmNoYXJDb2RlQXQoYSk/LTE9PS0tYSYmKGk9bik6KGE9LTEsaT1zKSl9cmV0dXJuIHI9PT1pP2k9czotMT09PWkmJihpPWUubGVuZ3RoKSxlLnNsaWNlKHIsaSl9Zm9yKG49ZS5sZW5ndGgtMTtuPj1yOy0tbilpZihMZShlLmNoYXJDb2RlQXQobikpKXtpZighbyl7cj1uKzE7YnJlYWt9fWVsc2UtMT09PWkmJihvPSExLGk9bisxKTtyZXR1cm4tMT09PWk/IiI6ZS5zbGljZShyLGkpfSxleHRuYW1lKGUpe2tlKGUsInBhdGgiKTtsZXQgdD0wLG49LTEscj0wLGk9LTEsbz0hMCxhPTA7ZS5sZW5ndGg+PTImJmUuY2hhckNvZGVBdCgxKT09PXhlJiZPZShlLmNoYXJDb2RlQXQoMCkpJiYodD1yPTIpO2ZvcihsZXQgcz1lLmxlbmd0aC0xO3M+PXQ7LS1zKXtjb25zdCB0PWUuY2hhckNvZGVBdChzKTtpZihMZSh0KSl7aWYoIW8pe3I9cysxO2JyZWFrfX1lbHNlLTE9PT1pJiYobz0hMSxpPXMrMSksdD09PVNlPy0xPT09bj9uPXM6MSE9PWEmJihhPTEpOi0xIT09biYmKGE9LTEpfXJldHVybi0xPT09bnx8LTE9PT1pfHwwPT09YXx8MT09PWEmJm49PT1pLTEmJm49PT1yKzE/IiI6ZS5zbGljZShuLGkpfSxmb3JtYXQ6TWUuYmluZChudWxsLCJcXCIpLHBhcnNlKGUpe2tlKGUsInBhdGgiKTtjb25zdCB0PXtyb290OiIiLGRpcjoiIixiYXNlOiIiLGV4dDoiIixuYW1lOiIifTtpZigwPT09ZS5sZW5ndGgpcmV0dXJuIHQ7Y29uc3Qgbj1lLmxlbmd0aDtsZXQgcj0wLGk9ZS5jaGFyQ29kZUF0KDApO2lmKDE9PT1uKXJldHVybiBMZShpKT8odC5yb290PXQuZGlyPWUsdCk6KHQuYmFzZT10Lm5hbWU9ZSx0KTtpZihMZShpKSl7aWYocj0xLExlKGUuY2hhckNvZGVBdCgxKSkpe2xldCB0PTIsaT10O2Zvcig7dDxuJiYhTGUoZS5jaGFyQ29kZUF0KHQpKTspdCsrO2lmKHQ8biYmdCE9PWkpe2ZvcihpPXQ7dDxuJiZMZShlLmNoYXJDb2RlQXQodCkpOyl0Kys7aWYodDxuJiZ0IT09aSl7Zm9yKGk9dDt0PG4mJiFMZShlLmNoYXJDb2RlQXQodCkpOyl0Kys7dD09PW4/cj10OnQhPT1pJiYocj10KzEpfX19fWVsc2UgaWYoT2UoaSkmJmUuY2hhckNvZGVBdCgxKT09PXhlKXtpZihuPD0yKXJldHVybiB0LnJvb3Q9dC5kaXI9ZSx0O2lmKHI9MixMZShlLmNoYXJDb2RlQXQoMikpKXtpZigzPT09bilyZXR1cm4gdC5yb290PXQuZGlyPWUsdDtyPTN9fXI+MCYmKHQucm9vdD1lLnNsaWNlKDAscikpO2xldCBvPS0xLGE9cixzPS0xLGM9ITAsbD1lLmxlbmd0aC0xLHU9MDtmb3IoO2w+PXI7LS1sKWlmKGk9ZS5jaGFyQ29kZUF0KGwpLExlKGkpKXtpZighYyl7YT1sKzE7YnJlYWt9fWVsc2UtMT09PXMmJihjPSExLHM9bCsxKSxpPT09U2U/LTE9PT1vP289bDoxIT09dSYmKHU9MSk6LTEhPT1vJiYodT0tMSk7cmV0dXJuLTEhPT1zJiYoLTE9PT1vfHwwPT09dXx8MT09PXUmJm89PT1zLTEmJm89PT1hKzE/dC5iYXNlPXQubmFtZT1lLnNsaWNlKGEscyk6KHQubmFtZT1lLnNsaWNlKGEsbyksdC5iYXNlPWUuc2xpY2UoYSxzKSx0LmV4dD1lLnNsaWNlKG8scykpKSx0LmRpcj1hPjAmJmEhPT1yP2Uuc2xpY2UoMCxhLTEpOnQucm9vdCx0fSxzZXA6IlxcIixkZWxpbWl0ZXI6IjsiLHdpbjMyOm51bGwscG9zaXg6bnVsbH0sUmU9e3Jlc29sdmUoLi4uZSl7bGV0IHQ9IiIsbj0hMTtmb3IobGV0IHI9ZS5sZW5ndGgtMTtyPj0tMSYmIW47ci0tKXtjb25zdCBpPXI+PTA/ZVtyXTpDZSgpO2tlKGksInBhdGgiKSwwIT09aS5sZW5ndGgmJih0PWAke2l9LyR7dH1gLG49aS5jaGFyQ29kZUF0KDApPT09QWUpfXJldHVybiB0PUllKHQsIW4sIi8iLFRlKSxuP2AvJHt0fWA6dC5sZW5ndGg+MD90OiIuIn0sbm9ybWFsaXplKGUpe2lmKGtlKGUsInBhdGgiKSwwPT09ZS5sZW5ndGgpcmV0dXJuIi4iO2NvbnN0IHQ9ZS5jaGFyQ29kZUF0KDApPT09QWUsbj1lLmNoYXJDb2RlQXQoZS5sZW5ndGgtMSk9PT1BZTtyZXR1cm4gMD09PShlPUllKGUsIXQsIi8iLFRlKSkubGVuZ3RoP3Q/Ii8iOm4/Ii4vIjoiLiI6KG4mJihlKz0iLyIpLHQ/YC8ke2V9YDplKX0saXNBYnNvbHV0ZTplPT4oa2UoZSwicGF0aCIpLGUubGVuZ3RoPjAmJmUuY2hhckNvZGVBdCgwKT09PUFlKSxqb2luKC4uLmUpe2lmKDA9PT1lLmxlbmd0aClyZXR1cm4iLiI7bGV0IHQ7Zm9yKGxldCBuPTA7bjxlLmxlbmd0aDsrK24pe2NvbnN0IHI9ZVtuXTtrZShyLCJwYXRoIiksci5sZW5ndGg+MCYmKHZvaWQgMD09PXQ/dD1yOnQrPWAvJHtyfWApfXJldHVybiB2b2lkIDA9PT10PyIuIjpSZS5ub3JtYWxpemUodCl9LHJlbGF0aXZlKGUsdCl7aWYoa2UoZSwiZnJvbSIpLGtlKHQsInRvIiksZT09PXQpcmV0dXJuIiI7aWYoKGU9UmUucmVzb2x2ZShlKSk9PT0odD1SZS5yZXNvbHZlKHQpKSlyZXR1cm4iIjtjb25zdCBuPWUubGVuZ3RoLHI9bi0xLGk9dC5sZW5ndGgtMSxvPXI8aT9yOmk7bGV0IGE9LTEscz0wO2Zvcig7czxvO3MrKyl7Y29uc3Qgbj1lLmNoYXJDb2RlQXQoMStzKTtpZihuIT09dC5jaGFyQ29kZUF0KDErcykpYnJlYWs7bj09PUFlJiYoYT1zKX1pZihzPT09bylpZihpPm8pe2lmKHQuY2hhckNvZGVBdCgxK3MpPT09QWUpcmV0dXJuIHQuc2xpY2UoMStzKzEpO2lmKDA9PT1zKXJldHVybiB0LnNsaWNlKDErcyl9ZWxzZSByPm8mJihlLmNoYXJDb2RlQXQoMStzKT09PUFlP2E9czowPT09cyYmKGE9MCkpO2xldCBjPSIiO2ZvcihzPTErYSsxO3M8PW47KytzKXMhPT1uJiZlLmNoYXJDb2RlQXQocykhPT1BZXx8KGMrPTA9PT1jLmxlbmd0aD8iLi4iOiIvLi4iKTtyZXR1cm5gJHtjfSR7dC5zbGljZSgxK2EpfWB9LHRvTmFtZXNwYWNlZFBhdGg6ZT0+ZSxkaXJuYW1lKGUpe2lmKGtlKGUsInBhdGgiKSwwPT09ZS5sZW5ndGgpcmV0dXJuIi4iO2NvbnN0IHQ9ZS5jaGFyQ29kZUF0KDApPT09QWU7bGV0IG49LTEscj0hMDtmb3IobGV0IHQ9ZS5sZW5ndGgtMTt0Pj0xOy0tdClpZihlLmNoYXJDb2RlQXQodCk9PT1BZSl7aWYoIXIpe249dDticmVha319ZWxzZSByPSExO3JldHVybi0xPT09bj90PyIvIjoiLiI6dCYmMT09PW4/Ii8vIjplLnNsaWNlKDAsbil9LGJhc2VuYW1lKGUsdCl7dm9pZCAwIT09dCYma2UodCwiZXh0Iiksa2UoZSwicGF0aCIpO2xldCBuLHI9MCxpPS0xLG89ITA7aWYodm9pZCAwIT09dCYmdC5sZW5ndGg+MCYmdC5sZW5ndGg8PWUubGVuZ3RoKXtpZih0PT09ZSlyZXR1cm4iIjtsZXQgYT10Lmxlbmd0aC0xLHM9LTE7Zm9yKG49ZS5sZW5ndGgtMTtuPj0wOy0tbil7Y29uc3QgYz1lLmNoYXJDb2RlQXQobik7aWYoYz09PUFlKXtpZighbyl7cj1uKzE7YnJlYWt9fWVsc2UtMT09PXMmJihvPSExLHM9bisxKSxhPj0wJiYoYz09PXQuY2hhckNvZGVBdChhKT8tMT09LS1hJiYoaT1uKTooYT0tMSxpPXMpKX1yZXR1cm4gcj09PWk/aT1zOi0xPT09aSYmKGk9ZS5sZW5ndGgpLGUuc2xpY2UocixpKX1mb3Iobj1lLmxlbmd0aC0xO24+PTA7LS1uKWlmKGUuY2hhckNvZGVBdChuKT09PUFlKXtpZighbyl7cj1uKzE7YnJlYWt9fWVsc2UtMT09PWkmJihvPSExLGk9bisxKTtyZXR1cm4tMT09PWk/IiI6ZS5zbGljZShyLGkpfSxleHRuYW1lKGUpe2tlKGUsInBhdGgiKTtsZXQgdD0tMSxuPTAscj0tMSxpPSEwLG89MDtmb3IobGV0IGE9ZS5sZW5ndGgtMTthPj0wOy0tYSl7Y29uc3Qgcz1lLmNoYXJDb2RlQXQoYSk7aWYocyE9PUFlKS0xPT09ciYmKGk9ITEscj1hKzEpLHM9PT1TZT8tMT09PXQ/dD1hOjEhPT1vJiYobz0xKTotMSE9PXQmJihvPS0xKTtlbHNlIGlmKCFpKXtuPWErMTticmVha319cmV0dXJuLTE9PT10fHwtMT09PXJ8fDA9PT1vfHwxPT09byYmdD09PXItMSYmdD09PW4rMT8iIjplLnNsaWNlKHQscil9LGZvcm1hdDpNZS5iaW5kKG51bGwsIi8iKSxwYXJzZShlKXtrZShlLCJwYXRoIik7Y29uc3QgdD17cm9vdDoiIixkaXI6IiIsYmFzZToiIixleHQ6IiIsbmFtZToiIn07aWYoMD09PWUubGVuZ3RoKXJldHVybiB0O2NvbnN0IG49ZS5jaGFyQ29kZUF0KDApPT09QWU7bGV0IHI7bj8odC5yb290PSIvIixyPTEpOnI9MDtsZXQgaT0tMSxvPTAsYT0tMSxzPSEwLGM9ZS5sZW5ndGgtMSxsPTA7Zm9yKDtjPj1yOy0tYyl7Y29uc3QgdD1lLmNoYXJDb2RlQXQoYyk7aWYodCE9PUFlKS0xPT09YSYmKHM9ITEsYT1jKzEpLHQ9PT1TZT8tMT09PWk/aT1jOjEhPT1sJiYobD0xKTotMSE9PWkmJihsPS0xKTtlbHNlIGlmKCFzKXtvPWMrMTticmVha319aWYoLTEhPT1hKXtjb25zdCByPTA9PT1vJiZuPzE6bzstMT09PWl8fDA9PT1sfHwxPT09bCYmaT09PWEtMSYmaT09PW8rMT90LmJhc2U9dC5uYW1lPWUuc2xpY2UocixhKToodC5uYW1lPWUuc2xpY2UocixpKSx0LmJhc2U9ZS5zbGljZShyLGEpLHQuZXh0PWUuc2xpY2UoaSxhKSl9cmV0dXJuIG8+MD90LmRpcj1lLnNsaWNlKDAsby0xKTpuJiYodC5kaXI9Ii8iKSx0fSxzZXA6Ii8iLGRlbGltaXRlcjoiOiIsd2luMzI6bnVsbCxwb3NpeDpudWxsfTtSZS53aW4zMj1QZS53aW4zMj1QZSxSZS5wb3NpeD1QZS5wb3NpeD1SZSwid2luMzIiPT09X2U/UGUubm9ybWFsaXplOlJlLm5vcm1hbGl6ZSwid2luMzIiPT09X2U/UGUucmVzb2x2ZTpSZS5yZXNvbHZlLCJ3aW4zMiI9PT1fZT9QZS5yZWxhdGl2ZTpSZS5yZWxhdGl2ZSwid2luMzIiPT09X2U/UGUuZGlybmFtZTpSZS5kaXJuYW1lLCJ3aW4zMiI9PT1fZT9QZS5iYXNlbmFtZTpSZS5iYXNlbmFtZSwid2luMzIiPT09X2U/UGUuZXh0bmFtZTpSZS5leHRuYW1lLCJ3aW4zMiI9PT1fZT9QZS5zZXA6UmUuc2VwO2NvbnN0IFZlPS9eXHdbXHdcZCsuLV0qJC8sRmU9L15cLy8sRGU9L15cL1wvLztmdW5jdGlvbiBLZShlLHQpe2lmKCFlLnNjaGVtZSYmdCl0aHJvdyBuZXcgRXJyb3IoYFtVcmlFcnJvcl06IFNjaGVtZSBpcyBtaXNzaW5nOiB7c2NoZW1lOiAiIiwgYXV0aG9yaXR5OiAiJHtlLmF1dGhvcml0eX0iLCBwYXRoOiAiJHtlLnBhdGh9IiwgcXVlcnk6ICIke2UucXVlcnl9IiwgZnJhZ21lbnQ6ICIke2UuZnJhZ21lbnR9In1gKTtpZihlLnNjaGVtZSYmIVZlLnRlc3QoZS5zY2hlbWUpKXRocm93IG5ldyBFcnJvcigiW1VyaUVycm9yXTogU2NoZW1lIGNvbnRhaW5zIGlsbGVnYWwgY2hhcmFjdGVycy4iKTtpZihlLnBhdGgpaWYoZS5hdXRob3JpdHkpe2lmKCFGZS50ZXN0KGUucGF0aCkpdGhyb3cgbmV3IEVycm9yKCdbVXJpRXJyb3JdOiBJZiBhIFVSSSBjb250YWlucyBhbiBhdXRob3JpdHkgY29tcG9uZW50LCB0aGVuIHRoZSBwYXRoIGNvbXBvbmVudCBtdXN0IGVpdGhlciBiZSBlbXB0eSBvciBiZWdpbiB3aXRoIGEgc2xhc2ggKCIvIikgY2hhcmFjdGVyJyl9ZWxzZSBpZihEZS50ZXN0KGUucGF0aCkpdGhyb3cgbmV3IEVycm9yKCdbVXJpRXJyb3JdOiBJZiBhIFVSSSBkb2VzIG5vdCBjb250YWluIGFuIGF1dGhvcml0eSBjb21wb25lbnQsIHRoZW4gdGhlIHBhdGggY2Fubm90IGJlZ2luIHdpdGggdHdvIHNsYXNoIGNoYXJhY3RlcnMgKCIvLyIpJyl9Y29uc3QgamU9IiIsVWU9Ii8iLEJlPS9eKChbXjovPyNdKz8pOik/KFwvXC8oW14vPyNdKikpPyhbXj8jXSopKFw/KFteI10qKSk/KCMoLiopKT8vO2xldCBxZT1jbGFzc3tjb25zdHJ1Y3RvcihlLHQsbixyLGksbz0hMSl7Im9iamVjdCI9PXR5cGVvZiBlPyh0aGlzLnNjaGVtZT1lLnNjaGVtZXx8amUsdGhpcy5hdXRob3JpdHk9ZS5hdXRob3JpdHl8fGplLHRoaXMucGF0aD1lLnBhdGh8fGplLHRoaXMucXVlcnk9ZS5xdWVyeXx8amUsdGhpcy5mcmFnbWVudD1lLmZyYWdtZW50fHxqZSk6KHRoaXMuc2NoZW1lPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGV8fHQ/ZToiZmlsZSJ9KGUsbyksdGhpcy5hdXRob3JpdHk9dHx8amUsdGhpcy5wYXRoPWZ1bmN0aW9uKGUsdCl7c3dpdGNoKGUpe2Nhc2UiaHR0cHMiOmNhc2UiaHR0cCI6Y2FzZSJmaWxlIjp0P3RbMF0hPT1VZSYmKHQ9VWUrdCk6dD1VZX1yZXR1cm4gdH0odGhpcy5zY2hlbWUsbnx8amUpLHRoaXMucXVlcnk9cnx8amUsdGhpcy5mcmFnbWVudD1pfHxqZSxLZSh0aGlzLG8pKX1zdGF0aWMgaXNVcmkoZSl7cmV0dXJuIGUgaW5zdGFuY2VvZiBxZXx8ISFlJiYoInN0cmluZyI9PXR5cGVvZiBlLmF1dGhvcml0eSYmInN0cmluZyI9PXR5cGVvZiBlLmZyYWdtZW50JiYic3RyaW5nIj09dHlwZW9mIGUucGF0aCYmInN0cmluZyI9PXR5cGVvZiBlLnF1ZXJ5JiYic3RyaW5nIj09dHlwZW9mIGUuc2NoZW1lJiYic3RyaW5nIj09dHlwZW9mIGUuZnNQYXRoJiYiZnVuY3Rpb24iPT10eXBlb2YgZS53aXRoJiYiZnVuY3Rpb24iPT10eXBlb2YgZS50b1N0cmluZyl9Z2V0IGZzUGF0aCgpe3JldHVybiBKZSh0aGlzLCExKX13aXRoKGUpe2lmKCFlKXJldHVybiB0aGlzO2xldHtzY2hlbWU6dCxhdXRob3JpdHk6bixwYXRoOnIscXVlcnk6aSxmcmFnbWVudDpvfT1lO3JldHVybiB2b2lkIDA9PT10P3Q9dGhpcy5zY2hlbWU6bnVsbD09PXQmJih0PWplKSx2b2lkIDA9PT1uP249dGhpcy5hdXRob3JpdHk6bnVsbD09PW4mJihuPWplKSx2b2lkIDA9PT1yP3I9dGhpcy5wYXRoOm51bGw9PT1yJiYocj1qZSksdm9pZCAwPT09aT9pPXRoaXMucXVlcnk6bnVsbD09PWkmJihpPWplKSx2b2lkIDA9PT1vP289dGhpcy5mcmFnbWVudDpudWxsPT09byYmKG89amUpLHQ9PT10aGlzLnNjaGVtZSYmbj09PXRoaXMuYXV0aG9yaXR5JiZyPT09dGhpcy5wYXRoJiZpPT09dGhpcy5xdWVyeSYmbz09PXRoaXMuZnJhZ21lbnQ/dGhpczpuZXcgV2UodCxuLHIsaSxvKX1zdGF0aWMgcGFyc2UoZSx0PSExKXtjb25zdCBuPUJlLmV4ZWMoZSk7cmV0dXJuIG4/bmV3IFdlKG5bMl18fGplLFFlKG5bNF18fGplKSxRZShuWzVdfHxqZSksUWUobls3XXx8amUpLFFlKG5bOV18fGplKSx0KTpuZXcgV2UoamUsamUsamUsamUsamUpfXN0YXRpYyBmaWxlKGUpe2xldCB0PWplO2lmKFQmJihlPWUucmVwbGFjZSgvXFwvZyxVZSkpLGVbMF09PT1VZSYmZVsxXT09PVVlKXtjb25zdCBuPWUuaW5kZXhPZihVZSwyKTstMT09PW4/KHQ9ZS5zdWJzdHJpbmcoMiksZT1VZSk6KHQ9ZS5zdWJzdHJpbmcoMixuKSxlPWUuc3Vic3RyaW5nKG4pfHxVZSl9cmV0dXJuIG5ldyBXZSgiZmlsZSIsdCxlLGplLGplKX1zdGF0aWMgZnJvbShlKXtjb25zdCB0PW5ldyBXZShlLnNjaGVtZSxlLmF1dGhvcml0eSxlLnBhdGgsZS5xdWVyeSxlLmZyYWdtZW50KTtyZXR1cm4gS2UodCwhMCksdH1zdGF0aWMgam9pblBhdGgoZSwuLi50KXtpZighZS5wYXRoKXRocm93IG5ldyBFcnJvcigiW1VyaUVycm9yXTogY2Fubm90IGNhbGwgam9pblBhdGggb24gVVJJIHdpdGhvdXQgcGF0aCIpO2xldCBuO3JldHVybiBuPVQmJiJmaWxlIj09PWUuc2NoZW1lP3FlLmZpbGUoUGUuam9pbihKZShlLCEwKSwuLi50KSkucGF0aDpSZS5qb2luKGUucGF0aCwuLi50KSxlLndpdGgoe3BhdGg6bn0pfXRvU3RyaW5nKGU9ITEpe3JldHVybiBYZSh0aGlzLGUpfXRvSlNPTigpe3JldHVybiB0aGlzfXN0YXRpYyByZXZpdmUoZSl7aWYoZSl7aWYoZSBpbnN0YW5jZW9mIHFlKXJldHVybiBlO3tjb25zdCB0PW5ldyBXZShlKTtyZXR1cm4gdC5fZm9ybWF0dGVkPWUuZXh0ZXJuYWwsdC5fZnNQYXRoPWUuX3NlcD09PSRlP2UuZnNQYXRoOm51bGwsdH19cmV0dXJuIGV9fTtjb25zdCAkZT1UPzE6dm9pZCAwO2NsYXNzIFdlIGV4dGVuZHMgcWV7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuX2Zvcm1hdHRlZD1udWxsLHRoaXMuX2ZzUGF0aD1udWxsfWdldCBmc1BhdGgoKXtyZXR1cm4gdGhpcy5fZnNQYXRofHwodGhpcy5fZnNQYXRoPUplKHRoaXMsITEpKSx0aGlzLl9mc1BhdGh9dG9TdHJpbmcoZT0hMSl7cmV0dXJuIGU/WGUodGhpcywhMCk6KHRoaXMuX2Zvcm1hdHRlZHx8KHRoaXMuX2Zvcm1hdHRlZD1YZSh0aGlzLCExKSksdGhpcy5fZm9ybWF0dGVkKX10b0pTT04oKXtjb25zdCBlPXskbWlkOjF9O3JldHVybiB0aGlzLl9mc1BhdGgmJihlLmZzUGF0aD10aGlzLl9mc1BhdGgsZS5fc2VwPSRlKSx0aGlzLl9mb3JtYXR0ZWQmJihlLmV4dGVybmFsPXRoaXMuX2Zvcm1hdHRlZCksdGhpcy5wYXRoJiYoZS5wYXRoPXRoaXMucGF0aCksdGhpcy5zY2hlbWUmJihlLnNjaGVtZT10aGlzLnNjaGVtZSksdGhpcy5hdXRob3JpdHkmJihlLmF1dGhvcml0eT10aGlzLmF1dGhvcml0eSksdGhpcy5xdWVyeSYmKGUucXVlcnk9dGhpcy5xdWVyeSksdGhpcy5mcmFnbWVudCYmKGUuZnJhZ21lbnQ9dGhpcy5mcmFnbWVudCksZX19Y29uc3QgSGU9ezU4OiIlM0EiLDQ3OiIlMkYiLDYzOiIlM0YiLDM1OiIlMjMiLDkxOiIlNUIiLDkzOiIlNUQiLDY0OiIlNDAiLDMzOiIlMjEiLDM2OiIlMjQiLDM4OiIlMjYiLDM5OiIlMjciLDQwOiIlMjgiLDQxOiIlMjkiLDQyOiIlMkEiLDQzOiIlMkIiLDQ0OiIlMkMiLDU5OiIlM0IiLDYxOiIlM0QiLDMyOiIlMjAifTtmdW5jdGlvbiB6ZShlLHQpe2xldCBuLHI9LTE7Zm9yKGxldCBpPTA7aTxlLmxlbmd0aDtpKyspe2NvbnN0IG89ZS5jaGFyQ29kZUF0KGkpO2lmKG8+PTk3JiZvPD0xMjJ8fG8+PTY1JiZvPD05MHx8bz49NDgmJm88PTU3fHw0NT09PW98fDQ2PT09b3x8OTU9PT1vfHwxMjY9PT1vfHx0JiY0Nz09PW8pLTEhPT1yJiYobis9ZW5jb2RlVVJJQ29tcG9uZW50KGUuc3Vic3RyaW5nKHIsaSkpLHI9LTEpLHZvaWQgMCE9PW4mJihuKz1lLmNoYXJBdChpKSk7ZWxzZXt2b2lkIDA9PT1uJiYobj1lLnN1YnN0cigwLGkpKTtjb25zdCB0PUhlW29dO3ZvaWQgMCE9PXQ/KC0xIT09ciYmKG4rPWVuY29kZVVSSUNvbXBvbmVudChlLnN1YnN0cmluZyhyLGkpKSxyPS0xKSxuKz10KTotMT09PXImJihyPWkpfX1yZXR1cm4tMSE9PXImJihuKz1lbmNvZGVVUklDb21wb25lbnQoZS5zdWJzdHJpbmcocikpKSx2b2lkIDAhPT1uP246ZX1mdW5jdGlvbiBHZShlKXtsZXQgdDtmb3IobGV0IG49MDtuPGUubGVuZ3RoO24rKyl7Y29uc3Qgcj1lLmNoYXJDb2RlQXQobik7MzU9PT1yfHw2Mz09PXI/KHZvaWQgMD09PXQmJih0PWUuc3Vic3RyKDAsbikpLHQrPUhlW3JdKTp2b2lkIDAhPT10JiYodCs9ZVtuXSl9cmV0dXJuIHZvaWQgMCE9PXQ/dDplfWZ1bmN0aW9uIEplKGUsdCl7bGV0IG47cmV0dXJuIG49ZS5hdXRob3JpdHkmJmUucGF0aC5sZW5ndGg+MSYmImZpbGUiPT09ZS5zY2hlbWU/YC8vJHtlLmF1dGhvcml0eX0ke2UucGF0aH1gOjQ3PT09ZS5wYXRoLmNoYXJDb2RlQXQoMCkmJihlLnBhdGguY2hhckNvZGVBdCgxKT49NjUmJmUucGF0aC5jaGFyQ29kZUF0KDEpPD05MHx8ZS5wYXRoLmNoYXJDb2RlQXQoMSk+PTk3JiZlLnBhdGguY2hhckNvZGVBdCgxKTw9MTIyKSYmNTg9PT1lLnBhdGguY2hhckNvZGVBdCgyKT90P2UucGF0aC5zdWJzdHIoMSk6ZS5wYXRoWzFdLnRvTG93ZXJDYXNlKCkrZS5wYXRoLnN1YnN0cigyKTplLnBhdGgsVCYmKG49bi5yZXBsYWNlKC9cLy9nLCJcXCIpKSxufWZ1bmN0aW9uIFhlKGUsdCl7Y29uc3Qgbj10P0dlOnplO2xldCByPSIiLHtzY2hlbWU6aSxhdXRob3JpdHk6byxwYXRoOmEscXVlcnk6cyxmcmFnbWVudDpjfT1lO2lmKGkmJihyKz1pLHIrPSI6IiksKG98fCJmaWxlIj09PWkpJiYocis9VWUscis9VWUpLG8pe2xldCBlPW8uaW5kZXhPZigiQCIpO2lmKC0xIT09ZSl7Y29uc3QgdD1vLnN1YnN0cigwLGUpO289by5zdWJzdHIoZSsxKSxlPXQuaW5kZXhPZigiOiIpLC0xPT09ZT9yKz1uKHQsITEpOihyKz1uKHQuc3Vic3RyKDAsZSksITEpLHIrPSI6IixyKz1uKHQuc3Vic3RyKGUrMSksITEpKSxyKz0iQCJ9bz1vLnRvTG93ZXJDYXNlKCksZT1vLmluZGV4T2YoIjoiKSwtMT09PWU/cis9bihvLCExKToocis9bihvLnN1YnN0cigwLGUpLCExKSxyKz1vLnN1YnN0cihlKSl9aWYoYSl7aWYoYS5sZW5ndGg+PTMmJjQ3PT09YS5jaGFyQ29kZUF0KDApJiY1OD09PWEuY2hhckNvZGVBdCgyKSl7Y29uc3QgZT1hLmNoYXJDb2RlQXQoMSk7ZT49NjUmJmU8PTkwJiYoYT1gLyR7U3RyaW5nLmZyb21DaGFyQ29kZShlKzMyKX06JHthLnN1YnN0cigzKX1gKX1lbHNlIGlmKGEubGVuZ3RoPj0yJiY1OD09PWEuY2hhckNvZGVBdCgxKSl7Y29uc3QgZT1hLmNoYXJDb2RlQXQoMCk7ZT49NjUmJmU8PTkwJiYoYT1gJHtTdHJpbmcuZnJvbUNoYXJDb2RlKGUrMzIpfToke2Euc3Vic3RyKDIpfWApfXIrPW4oYSwhMCl9cmV0dXJuIHMmJihyKz0iPyIscis9bihzLCExKSksYyYmKHIrPSIjIixyKz10P2M6emUoYywhMSkpLHJ9ZnVuY3Rpb24gWmUoZSl7dHJ5e3JldHVybiBkZWNvZGVVUklDb21wb25lbnQoZSl9Y2F0Y2godCl7cmV0dXJuIGUubGVuZ3RoPjM/ZS5zdWJzdHIoMCwzKStaZShlLnN1YnN0cigzKSk6ZX19Y29uc3QgWWU9LyglWzAtOUEtWmEtel1bMC05QS1aYS16XSkrL2c7ZnVuY3Rpb24gUWUoZSl7cmV0dXJuIGUubWF0Y2goWWUpP2UucmVwbGFjZShZZSwoZT0+WmUoZSkpKTplfWxldCBldD1jbGFzc3tjb25zdHJ1Y3RvcihlLHQpe3RoaXMubGluZU51bWJlcj1lLHRoaXMuY29sdW1uPXR9d2l0aChlPXRoaXMubGluZU51bWJlcix0PXRoaXMuY29sdW1uKXtyZXR1cm4gZT09PXRoaXMubGluZU51bWJlciYmdD09PXRoaXMuY29sdW1uP3RoaXM6bmV3IGV0KGUsdCl9ZGVsdGEoZT0wLHQ9MCl7cmV0dXJuIHRoaXMud2l0aCh0aGlzLmxpbmVOdW1iZXIrZSx0aGlzLmNvbHVtbit0KX1lcXVhbHMoZSl7cmV0dXJuIGV0LmVxdWFscyh0aGlzLGUpfXN0YXRpYyBlcXVhbHMoZSx0KXtyZXR1cm4hZSYmIXR8fCEhZSYmISF0JiZlLmxpbmVOdW1iZXI9PT10LmxpbmVOdW1iZXImJmUuY29sdW1uPT09dC5jb2x1bW59aXNCZWZvcmUoZSl7cmV0dXJuIGV0LmlzQmVmb3JlKHRoaXMsZSl9c3RhdGljIGlzQmVmb3JlKGUsdCl7cmV0dXJuIGUubGluZU51bWJlcjx0LmxpbmVOdW1iZXJ8fCEodC5saW5lTnVtYmVyPGUubGluZU51bWJlcikmJmUuY29sdW1uPHQuY29sdW1ufWlzQmVmb3JlT3JFcXVhbChlKXtyZXR1cm4gZXQuaXNCZWZvcmVPckVxdWFsKHRoaXMsZSl9c3RhdGljIGlzQmVmb3JlT3JFcXVhbChlLHQpe3JldHVybiBlLmxpbmVOdW1iZXI8dC5saW5lTnVtYmVyfHwhKHQubGluZU51bWJlcjxlLmxpbmVOdW1iZXIpJiZlLmNvbHVtbjw9dC5jb2x1bW59c3RhdGljIGNvbXBhcmUoZSx0KXtjb25zdCBuPTB8ZS5saW5lTnVtYmVyLHI9MHx0LmxpbmVOdW1iZXI7aWYobj09PXIpe3JldHVybigwfGUuY29sdW1uKS0oMHx0LmNvbHVtbil9cmV0dXJuIG4tcn1jbG9uZSgpe3JldHVybiBuZXcgZXQodGhpcy5saW5lTnVtYmVyLHRoaXMuY29sdW1uKX10b1N0cmluZygpe3JldHVybiIoIit0aGlzLmxpbmVOdW1iZXIrIiwiK3RoaXMuY29sdW1uKyIpIn1zdGF0aWMgbGlmdChlKXtyZXR1cm4gbmV3IGV0KGUubGluZU51bWJlcixlLmNvbHVtbil9c3RhdGljIGlzSVBvc2l0aW9uKGUpe3JldHVybiBlJiYibnVtYmVyIj09dHlwZW9mIGUubGluZU51bWJlciYmIm51bWJlciI9PXR5cGVvZiBlLmNvbHVtbn19LHR0PWNsYXNze2NvbnN0cnVjdG9yKGUsdCxuLHIpe2U+bnx8ZT09PW4mJnQ+cj8odGhpcy5zdGFydExpbmVOdW1iZXI9bix0aGlzLnN0YXJ0Q29sdW1uPXIsdGhpcy5lbmRMaW5lTnVtYmVyPWUsdGhpcy5lbmRDb2x1bW49dCk6KHRoaXMuc3RhcnRMaW5lTnVtYmVyPWUsdGhpcy5zdGFydENvbHVtbj10LHRoaXMuZW5kTGluZU51bWJlcj1uLHRoaXMuZW5kQ29sdW1uPXIpfWlzRW1wdHkoKXtyZXR1cm4gdHQuaXNFbXB0eSh0aGlzKX1zdGF0aWMgaXNFbXB0eShlKXtyZXR1cm4gZS5zdGFydExpbmVOdW1iZXI9PT1lLmVuZExpbmVOdW1iZXImJmUuc3RhcnRDb2x1bW49PT1lLmVuZENvbHVtbn1jb250YWluc1Bvc2l0aW9uKGUpe3JldHVybiB0dC5jb250YWluc1Bvc2l0aW9uKHRoaXMsZSl9c3RhdGljIGNvbnRhaW5zUG9zaXRpb24oZSx0KXtyZXR1cm4hKHQubGluZU51bWJlcjxlLnN0YXJ0TGluZU51bWJlcnx8dC5saW5lTnVtYmVyPmUuZW5kTGluZU51bWJlcikmJighKHQubGluZU51bWJlcj09PWUuc3RhcnRMaW5lTnVtYmVyJiZ0LmNvbHVtbjxlLnN0YXJ0Q29sdW1uKSYmISh0LmxpbmVOdW1iZXI9PT1lLmVuZExpbmVOdW1iZXImJnQuY29sdW1uPmUuZW5kQ29sdW1uKSl9c3RhdGljIHN0cmljdENvbnRhaW5zUG9zaXRpb24oZSx0KXtyZXR1cm4hKHQubGluZU51bWJlcjxlLnN0YXJ0TGluZU51bWJlcnx8dC5saW5lTnVtYmVyPmUuZW5kTGluZU51bWJlcikmJighKHQubGluZU51bWJlcj09PWUuc3RhcnRMaW5lTnVtYmVyJiZ0LmNvbHVtbjw9ZS5zdGFydENvbHVtbikmJiEodC5saW5lTnVtYmVyPT09ZS5lbmRMaW5lTnVtYmVyJiZ0LmNvbHVtbj49ZS5lbmRDb2x1bW4pKX1jb250YWluc1JhbmdlKGUpe3JldHVybiB0dC5jb250YWluc1JhbmdlKHRoaXMsZSl9c3RhdGljIGNvbnRhaW5zUmFuZ2UoZSx0KXtyZXR1cm4hKHQuc3RhcnRMaW5lTnVtYmVyPGUuc3RhcnRMaW5lTnVtYmVyfHx0LmVuZExpbmVOdW1iZXI8ZS5zdGFydExpbmVOdW1iZXIpJiYoISh0LnN0YXJ0TGluZU51bWJlcj5lLmVuZExpbmVOdW1iZXJ8fHQuZW5kTGluZU51bWJlcj5lLmVuZExpbmVOdW1iZXIpJiYoISh0LnN0YXJ0TGluZU51bWJlcj09PWUuc3RhcnRMaW5lTnVtYmVyJiZ0LnN0YXJ0Q29sdW1uPGUuc3RhcnRDb2x1bW4pJiYhKHQuZW5kTGluZU51bWJlcj09PWUuZW5kTGluZU51bWJlciYmdC5lbmRDb2x1bW4+ZS5lbmRDb2x1bW4pKSl9c3RyaWN0Q29udGFpbnNSYW5nZShlKXtyZXR1cm4gdHQuc3RyaWN0Q29udGFpbnNSYW5nZSh0aGlzLGUpfXN0YXRpYyBzdHJpY3RDb250YWluc1JhbmdlKGUsdCl7cmV0dXJuISh0LnN0YXJ0TGluZU51bWJlcjxlLnN0YXJ0TGluZU51bWJlcnx8dC5lbmRMaW5lTnVtYmVyPGUuc3RhcnRMaW5lTnVtYmVyKSYmKCEodC5zdGFydExpbmVOdW1iZXI+ZS5lbmRMaW5lTnVtYmVyfHx0LmVuZExpbmVOdW1iZXI+ZS5lbmRMaW5lTnVtYmVyKSYmKCEodC5zdGFydExpbmVOdW1iZXI9PT1lLnN0YXJ0TGluZU51bWJlciYmdC5zdGFydENvbHVtbjw9ZS5zdGFydENvbHVtbikmJiEodC5lbmRMaW5lTnVtYmVyPT09ZS5lbmRMaW5lTnVtYmVyJiZ0LmVuZENvbHVtbj49ZS5lbmRDb2x1bW4pKSl9cGx1c1JhbmdlKGUpe3JldHVybiB0dC5wbHVzUmFuZ2UodGhpcyxlKX1zdGF0aWMgcGx1c1JhbmdlKGUsdCl7bGV0IG4scixpLG87cmV0dXJuIHQuc3RhcnRMaW5lTnVtYmVyPGUuc3RhcnRMaW5lTnVtYmVyPyhuPXQuc3RhcnRMaW5lTnVtYmVyLHI9dC5zdGFydENvbHVtbik6dC5zdGFydExpbmVOdW1iZXI9PT1lLnN0YXJ0TGluZU51bWJlcj8obj10LnN0YXJ0TGluZU51bWJlcixyPU1hdGgubWluKHQuc3RhcnRDb2x1bW4sZS5zdGFydENvbHVtbikpOihuPWUuc3RhcnRMaW5lTnVtYmVyLHI9ZS5zdGFydENvbHVtbiksdC5lbmRMaW5lTnVtYmVyPmUuZW5kTGluZU51bWJlcj8oaT10LmVuZExpbmVOdW1iZXIsbz10LmVuZENvbHVtbik6dC5lbmRMaW5lTnVtYmVyPT09ZS5lbmRMaW5lTnVtYmVyPyhpPXQuZW5kTGluZU51bWJlcixvPU1hdGgubWF4KHQuZW5kQ29sdW1uLGUuZW5kQ29sdW1uKSk6KGk9ZS5lbmRMaW5lTnVtYmVyLG89ZS5lbmRDb2x1bW4pLG5ldyB0dChuLHIsaSxvKX1pbnRlcnNlY3RSYW5nZXMoZSl7cmV0dXJuIHR0LmludGVyc2VjdFJhbmdlcyh0aGlzLGUpfXN0YXRpYyBpbnRlcnNlY3RSYW5nZXMoZSx0KXtsZXQgbj1lLnN0YXJ0TGluZU51bWJlcixyPWUuc3RhcnRDb2x1bW4saT1lLmVuZExpbmVOdW1iZXIsbz1lLmVuZENvbHVtbjtjb25zdCBhPXQuc3RhcnRMaW5lTnVtYmVyLHM9dC5zdGFydENvbHVtbixjPXQuZW5kTGluZU51bWJlcixsPXQuZW5kQ29sdW1uO3JldHVybiBuPGE/KG49YSxyPXMpOm49PT1hJiYocj1NYXRoLm1heChyLHMpKSxpPmM/KGk9YyxvPWwpOmk9PT1jJiYobz1NYXRoLm1pbihvLGwpKSxuPml8fG49PT1pJiZyPm8/bnVsbDpuZXcgdHQobixyLGksbyl9ZXF1YWxzUmFuZ2UoZSl7cmV0dXJuIHR0LmVxdWFsc1JhbmdlKHRoaXMsZSl9c3RhdGljIGVxdWFsc1JhbmdlKGUsdCl7cmV0dXJuISFlJiYhIXQmJmUuc3RhcnRMaW5lTnVtYmVyPT09dC5zdGFydExpbmVOdW1iZXImJmUuc3RhcnRDb2x1bW49PT10LnN0YXJ0Q29sdW1uJiZlLmVuZExpbmVOdW1iZXI9PT10LmVuZExpbmVOdW1iZXImJmUuZW5kQ29sdW1uPT09dC5lbmRDb2x1bW59Z2V0RW5kUG9zaXRpb24oKXtyZXR1cm4gdHQuZ2V0RW5kUG9zaXRpb24odGhpcyl9c3RhdGljIGdldEVuZFBvc2l0aW9uKGUpe3JldHVybiBuZXcgZXQoZS5lbmRMaW5lTnVtYmVyLGUuZW5kQ29sdW1uKX1nZXRTdGFydFBvc2l0aW9uKCl7cmV0dXJuIHR0LmdldFN0YXJ0UG9zaXRpb24odGhpcyl9c3RhdGljIGdldFN0YXJ0UG9zaXRpb24oZSl7cmV0dXJuIG5ldyBldChlLnN0YXJ0TGluZU51bWJlcixlLnN0YXJ0Q29sdW1uKX10b1N0cmluZygpe3JldHVybiJbIit0aGlzLnN0YXJ0TGluZU51bWJlcisiLCIrdGhpcy5zdGFydENvbHVtbisiIC0+ICIrdGhpcy5lbmRMaW5lTnVtYmVyKyIsIit0aGlzLmVuZENvbHVtbisiXSJ9c2V0RW5kUG9zaXRpb24oZSx0KXtyZXR1cm4gbmV3IHR0KHRoaXMuc3RhcnRMaW5lTnVtYmVyLHRoaXMuc3RhcnRDb2x1bW4sZSx0KX1zZXRTdGFydFBvc2l0aW9uKGUsdCl7cmV0dXJuIG5ldyB0dChlLHQsdGhpcy5lbmRMaW5lTnVtYmVyLHRoaXMuZW5kQ29sdW1uKX1jb2xsYXBzZVRvU3RhcnQoKXtyZXR1cm4gdHQuY29sbGFwc2VUb1N0YXJ0KHRoaXMpfXN0YXRpYyBjb2xsYXBzZVRvU3RhcnQoZSl7cmV0dXJuIG5ldyB0dChlLnN0YXJ0TGluZU51bWJlcixlLnN0YXJ0Q29sdW1uLGUuc3RhcnRMaW5lTnVtYmVyLGUuc3RhcnRDb2x1bW4pfXN0YXRpYyBmcm9tUG9zaXRpb25zKGUsdD1lKXtyZXR1cm4gbmV3IHR0KGUubGluZU51bWJlcixlLmNvbHVtbix0LmxpbmVOdW1iZXIsdC5jb2x1bW4pfXN0YXRpYyBsaWZ0KGUpe3JldHVybiBlP25ldyB0dChlLnN0YXJ0TGluZU51bWJlcixlLnN0YXJ0Q29sdW1uLGUuZW5kTGluZU51bWJlcixlLmVuZENvbHVtbik6bnVsbH1zdGF0aWMgaXNJUmFuZ2UoZSl7cmV0dXJuIGUmJiJudW1iZXIiPT10eXBlb2YgZS5zdGFydExpbmVOdW1iZXImJiJudW1iZXIiPT10eXBlb2YgZS5zdGFydENvbHVtbiYmIm51bWJlciI9PXR5cGVvZiBlLmVuZExpbmVOdW1iZXImJiJudW1iZXIiPT10eXBlb2YgZS5lbmRDb2x1bW59c3RhdGljIGFyZUludGVyc2VjdGluZ09yVG91Y2hpbmcoZSx0KXtyZXR1cm4hKGUuZW5kTGluZU51bWJlcjx0LnN0YXJ0TGluZU51bWJlcnx8ZS5lbmRMaW5lTnVtYmVyPT09dC5zdGFydExpbmVOdW1iZXImJmUuZW5kQ29sdW1uPHQuc3RhcnRDb2x1bW4pJiYhKHQuZW5kTGluZU51bWJlcjxlLnN0YXJ0TGluZU51bWJlcnx8dC5lbmRMaW5lTnVtYmVyPT09ZS5zdGFydExpbmVOdW1iZXImJnQuZW5kQ29sdW1uPGUuc3RhcnRDb2x1bW4pfXN0YXRpYyBhcmVJbnRlcnNlY3RpbmcoZSx0KXtyZXR1cm4hKGUuZW5kTGluZU51bWJlcjx0LnN0YXJ0TGluZU51bWJlcnx8ZS5lbmRMaW5lTnVtYmVyPT09dC5zdGFydExpbmVOdW1iZXImJmUuZW5kQ29sdW1uPD10LnN0YXJ0Q29sdW1uKSYmISh0LmVuZExpbmVOdW1iZXI8ZS5zdGFydExpbmVOdW1iZXJ8fHQuZW5kTGluZU51bWJlcj09PWUuc3RhcnRMaW5lTnVtYmVyJiZ0LmVuZENvbHVtbjw9ZS5zdGFydENvbHVtbil9c3RhdGljIGNvbXBhcmVSYW5nZXNVc2luZ1N0YXJ0cyhlLHQpe2lmKGUmJnQpe2NvbnN0IG49MHxlLnN0YXJ0TGluZU51bWJlcixyPTB8dC5zdGFydExpbmVOdW1iZXI7aWYobj09PXIpe2NvbnN0IG49MHxlLnN0YXJ0Q29sdW1uLHI9MHx0LnN0YXJ0Q29sdW1uO2lmKG49PT1yKXtjb25zdCBuPTB8ZS5lbmRMaW5lTnVtYmVyLHI9MHx0LmVuZExpbmVOdW1iZXI7aWYobj09PXIpe3JldHVybigwfGUuZW5kQ29sdW1uKS0oMHx0LmVuZENvbHVtbil9cmV0dXJuIG4tcn1yZXR1cm4gbi1yfXJldHVybiBuLXJ9cmV0dXJuKGU/MTowKS0odD8xOjApfXN0YXRpYyBjb21wYXJlUmFuZ2VzVXNpbmdFbmRzKGUsdCl7cmV0dXJuIGUuZW5kTGluZU51bWJlcj09PXQuZW5kTGluZU51bWJlcj9lLmVuZENvbHVtbj09PXQuZW5kQ29sdW1uP2Uuc3RhcnRMaW5lTnVtYmVyPT09dC5zdGFydExpbmVOdW1iZXI/ZS5zdGFydENvbHVtbi10LnN0YXJ0Q29sdW1uOmUuc3RhcnRMaW5lTnVtYmVyLXQuc3RhcnRMaW5lTnVtYmVyOmUuZW5kQ29sdW1uLXQuZW5kQ29sdW1uOmUuZW5kTGluZU51bWJlci10LmVuZExpbmVOdW1iZXJ9c3RhdGljIHNwYW5zTXVsdGlwbGVMaW5lcyhlKXtyZXR1cm4gZS5lbmRMaW5lTnVtYmVyPmUuc3RhcnRMaW5lTnVtYmVyfXRvSlNPTigpe3JldHVybiB0aGlzfX07ZnVuY3Rpb24gbnQoZSx0LG4scil7cmV0dXJuIG5ldyB2ZShlLHQsbikuQ29tcHV0ZURpZmYocil9Y2xhc3MgcnR7Y29uc3RydWN0b3IoZSl7Y29uc3QgdD1bXSxuPVtdO2ZvcihsZXQgcj0wLGk9ZS5sZW5ndGg7cjxpO3IrKyl0W3JdPWN0KGVbcl0sMSksbltyXT1sdChlW3JdLDEpO3RoaXMubGluZXM9ZSx0aGlzLl9zdGFydENvbHVtbnM9dCx0aGlzLl9lbmRDb2x1bW5zPW59Z2V0RWxlbWVudHMoKXtjb25zdCBlPVtdO2ZvcihsZXQgdD0wLG49dGhpcy5saW5lcy5sZW5ndGg7dDxuO3QrKyllW3RdPXRoaXMubGluZXNbdF0uc3Vic3RyaW5nKHRoaXMuX3N0YXJ0Q29sdW1uc1t0XS0xLHRoaXMuX2VuZENvbHVtbnNbdF0tMSk7cmV0dXJuIGV9Z2V0U3RyaWN0RWxlbWVudChlKXtyZXR1cm4gdGhpcy5saW5lc1tlXX1nZXRTdGFydExpbmVOdW1iZXIoZSl7cmV0dXJuIGUrMX1nZXRFbmRMaW5lTnVtYmVyKGUpe3JldHVybiBlKzF9Y3JlYXRlQ2hhclNlcXVlbmNlKGUsdCxuKXtjb25zdCByPVtdLGk9W10sbz1bXTtsZXQgYT0wO2ZvcihsZXQgcz10O3M8PW47cysrKXtjb25zdCB0PXRoaXMubGluZXNbc10sYz1lP3RoaXMuX3N0YXJ0Q29sdW1uc1tzXToxLGw9ZT90aGlzLl9lbmRDb2x1bW5zW3NdOnQubGVuZ3RoKzE7Zm9yKGxldCBlPWM7ZTxsO2UrKylyW2FdPXQuY2hhckNvZGVBdChlLTEpLGlbYV09cysxLG9bYV09ZSxhKys7IWUmJnM8biYmKHJbYV09MTAsaVthXT1zKzEsb1thXT10Lmxlbmd0aCsxLGErKyl9cmV0dXJuIG5ldyBpdChyLGksbyl9fWNsYXNzIGl0e2NvbnN0cnVjdG9yKGUsdCxuKXt0aGlzLl9jaGFyQ29kZXM9ZSx0aGlzLl9saW5lTnVtYmVycz10LHRoaXMuX2NvbHVtbnM9bn10b1N0cmluZygpe3JldHVybiJbIit0aGlzLl9jaGFyQ29kZXMubWFwKCgoZSx0KT0+KDEwPT09ZT8iXFxuIjpTdHJpbmcuZnJvbUNoYXJDb2RlKGUpKStgLSgke3RoaXMuX2xpbmVOdW1iZXJzW3RdfSwke3RoaXMuX2NvbHVtbnNbdF19KWApKS5qb2luKCIsICIpKyJdIn1fYXNzZXJ0SW5kZXgoZSx0KXtpZihlPDB8fGU+PXQubGVuZ3RoKXRocm93IG5ldyBFcnJvcigiSWxsZWdhbCBpbmRleCIpfWdldEVsZW1lbnRzKCl7cmV0dXJuIHRoaXMuX2NoYXJDb2Rlc31nZXRTdGFydExpbmVOdW1iZXIoZSl7cmV0dXJuIGU+MCYmZT09PXRoaXMuX2xpbmVOdW1iZXJzLmxlbmd0aD90aGlzLmdldEVuZExpbmVOdW1iZXIoZS0xKToodGhpcy5fYXNzZXJ0SW5kZXgoZSx0aGlzLl9saW5lTnVtYmVycyksdGhpcy5fbGluZU51bWJlcnNbZV0pfWdldEVuZExpbmVOdW1iZXIoZSl7cmV0dXJuLTE9PT1lP3RoaXMuZ2V0U3RhcnRMaW5lTnVtYmVyKGUrMSk6KHRoaXMuX2Fzc2VydEluZGV4KGUsdGhpcy5fbGluZU51bWJlcnMpLDEwPT09dGhpcy5fY2hhckNvZGVzW2VdP3RoaXMuX2xpbmVOdW1iZXJzW2VdKzE6dGhpcy5fbGluZU51bWJlcnNbZV0pfWdldFN0YXJ0Q29sdW1uKGUpe3JldHVybiBlPjAmJmU9PT10aGlzLl9jb2x1bW5zLmxlbmd0aD90aGlzLmdldEVuZENvbHVtbihlLTEpOih0aGlzLl9hc3NlcnRJbmRleChlLHRoaXMuX2NvbHVtbnMpLHRoaXMuX2NvbHVtbnNbZV0pfWdldEVuZENvbHVtbihlKXtyZXR1cm4tMT09PWU/dGhpcy5nZXRTdGFydENvbHVtbihlKzEpOih0aGlzLl9hc3NlcnRJbmRleChlLHRoaXMuX2NvbHVtbnMpLDEwPT09dGhpcy5fY2hhckNvZGVzW2VdPzE6dGhpcy5fY29sdW1uc1tlXSsxKX19Y2xhc3Mgb3R7Y29uc3RydWN0b3IoZSx0LG4scixpLG8sYSxzKXt0aGlzLm9yaWdpbmFsU3RhcnRMaW5lTnVtYmVyPWUsdGhpcy5vcmlnaW5hbFN0YXJ0Q29sdW1uPXQsdGhpcy5vcmlnaW5hbEVuZExpbmVOdW1iZXI9bix0aGlzLm9yaWdpbmFsRW5kQ29sdW1uPXIsdGhpcy5tb2RpZmllZFN0YXJ0TGluZU51bWJlcj1pLHRoaXMubW9kaWZpZWRTdGFydENvbHVtbj1vLHRoaXMubW9kaWZpZWRFbmRMaW5lTnVtYmVyPWEsdGhpcy5tb2RpZmllZEVuZENvbHVtbj1zfXN0YXRpYyBjcmVhdGVGcm9tRGlmZkNoYW5nZShlLHQsbil7Y29uc3Qgcj10LmdldFN0YXJ0TGluZU51bWJlcihlLm9yaWdpbmFsU3RhcnQpLGk9dC5nZXRTdGFydENvbHVtbihlLm9yaWdpbmFsU3RhcnQpLG89dC5nZXRFbmRMaW5lTnVtYmVyKGUub3JpZ2luYWxTdGFydCtlLm9yaWdpbmFsTGVuZ3RoLTEpLGE9dC5nZXRFbmRDb2x1bW4oZS5vcmlnaW5hbFN0YXJ0K2Uub3JpZ2luYWxMZW5ndGgtMSkscz1uLmdldFN0YXJ0TGluZU51bWJlcihlLm1vZGlmaWVkU3RhcnQpLGM9bi5nZXRTdGFydENvbHVtbihlLm1vZGlmaWVkU3RhcnQpLGw9bi5nZXRFbmRMaW5lTnVtYmVyKGUubW9kaWZpZWRTdGFydCtlLm1vZGlmaWVkTGVuZ3RoLTEpLHU9bi5nZXRFbmRDb2x1bW4oZS5tb2RpZmllZFN0YXJ0K2UubW9kaWZpZWRMZW5ndGgtMSk7cmV0dXJuIG5ldyBvdChyLGksbyxhLHMsYyxsLHUpfX1jbGFzcyBhdHtjb25zdHJ1Y3RvcihlLHQsbixyLGkpe3RoaXMub3JpZ2luYWxTdGFydExpbmVOdW1iZXI9ZSx0aGlzLm9yaWdpbmFsRW5kTGluZU51bWJlcj10LHRoaXMubW9kaWZpZWRTdGFydExpbmVOdW1iZXI9bix0aGlzLm1vZGlmaWVkRW5kTGluZU51bWJlcj1yLHRoaXMuY2hhckNoYW5nZXM9aX1zdGF0aWMgY3JlYXRlRnJvbURpZmZSZXN1bHQoZSx0LG4scixpLG8sYSl7bGV0IHMsYyxsLHUsaDtpZigwPT09dC5vcmlnaW5hbExlbmd0aD8ocz1uLmdldFN0YXJ0TGluZU51bWJlcih0Lm9yaWdpbmFsU3RhcnQpLTEsYz0wKToocz1uLmdldFN0YXJ0TGluZU51bWJlcih0Lm9yaWdpbmFsU3RhcnQpLGM9bi5nZXRFbmRMaW5lTnVtYmVyKHQub3JpZ2luYWxTdGFydCt0Lm9yaWdpbmFsTGVuZ3RoLTEpKSwwPT09dC5tb2RpZmllZExlbmd0aD8obD1yLmdldFN0YXJ0TGluZU51bWJlcih0Lm1vZGlmaWVkU3RhcnQpLTEsdT0wKToobD1yLmdldFN0YXJ0TGluZU51bWJlcih0Lm1vZGlmaWVkU3RhcnQpLHU9ci5nZXRFbmRMaW5lTnVtYmVyKHQubW9kaWZpZWRTdGFydCt0Lm1vZGlmaWVkTGVuZ3RoLTEpKSxvJiZ0Lm9yaWdpbmFsTGVuZ3RoPjAmJnQub3JpZ2luYWxMZW5ndGg8MjAmJnQubW9kaWZpZWRMZW5ndGg+MCYmdC5tb2RpZmllZExlbmd0aDwyMCYmaSgpKXtjb25zdCBvPW4uY3JlYXRlQ2hhclNlcXVlbmNlKGUsdC5vcmlnaW5hbFN0YXJ0LHQub3JpZ2luYWxTdGFydCt0Lm9yaWdpbmFsTGVuZ3RoLTEpLHM9ci5jcmVhdGVDaGFyU2VxdWVuY2UoZSx0Lm1vZGlmaWVkU3RhcnQsdC5tb2RpZmllZFN0YXJ0K3QubW9kaWZpZWRMZW5ndGgtMSk7aWYoby5nZXRFbGVtZW50cygpLmxlbmd0aD4wJiZzLmdldEVsZW1lbnRzKCkubGVuZ3RoPjApe2xldCBlPW50KG8scyxpLCEwKS5jaGFuZ2VzO2EmJihlPWZ1bmN0aW9uKGUpe2lmKGUubGVuZ3RoPD0xKXJldHVybiBlO2NvbnN0IHQ9W2VbMF1dO2xldCBuPXRbMF07Zm9yKGxldCByPTEsaT1lLmxlbmd0aDtyPGk7cisrKXtjb25zdCBpPWVbcl0sbz1pLm9yaWdpbmFsU3RhcnQtKG4ub3JpZ2luYWxTdGFydCtuLm9yaWdpbmFsTGVuZ3RoKSxhPWkubW9kaWZpZWRTdGFydC0obi5tb2RpZmllZFN0YXJ0K24ubW9kaWZpZWRMZW5ndGgpO01hdGgubWluKG8sYSk8Mz8obi5vcmlnaW5hbExlbmd0aD1pLm9yaWdpbmFsU3RhcnQraS5vcmlnaW5hbExlbmd0aC1uLm9yaWdpbmFsU3RhcnQsbi5tb2RpZmllZExlbmd0aD1pLm1vZGlmaWVkU3RhcnQraS5tb2RpZmllZExlbmd0aC1uLm1vZGlmaWVkU3RhcnQpOih0LnB1c2goaSksbj1pKX1yZXR1cm4gdH0oZSkpLGg9W107Zm9yKGxldCB0PTAsbj1lLmxlbmd0aDt0PG47dCsrKWgucHVzaChvdC5jcmVhdGVGcm9tRGlmZkNoYW5nZShlW3RdLG8scykpfX1yZXR1cm4gbmV3IGF0KHMsYyxsLHUsaCl9fWNsYXNzIHN0e2NvbnN0cnVjdG9yKGUsdCxuKXt0aGlzLnNob3VsZENvbXB1dGVDaGFyQ2hhbmdlcz1uLnNob3VsZENvbXB1dGVDaGFyQ2hhbmdlcyx0aGlzLnNob3VsZFBvc3RQcm9jZXNzQ2hhckNoYW5nZXM9bi5zaG91bGRQb3N0UHJvY2Vzc0NoYXJDaGFuZ2VzLHRoaXMuc2hvdWxkSWdub3JlVHJpbVdoaXRlc3BhY2U9bi5zaG91bGRJZ25vcmVUcmltV2hpdGVzcGFjZSx0aGlzLnNob3VsZE1ha2VQcmV0dHlEaWZmPW4uc2hvdWxkTWFrZVByZXR0eURpZmYsdGhpcy5vcmlnaW5hbExpbmVzPWUsdGhpcy5tb2RpZmllZExpbmVzPXQsdGhpcy5vcmlnaW5hbD1uZXcgcnQoZSksdGhpcy5tb2RpZmllZD1uZXcgcnQodCksdGhpcy5jb250aW51ZUxpbmVEaWZmPXV0KG4ubWF4Q29tcHV0YXRpb25UaW1lKSx0aGlzLmNvbnRpbnVlQ2hhckRpZmY9dXQoMD09PW4ubWF4Q29tcHV0YXRpb25UaW1lPzA6TWF0aC5taW4obi5tYXhDb21wdXRhdGlvblRpbWUsNWUzKSl9Y29tcHV0ZURpZmYoKXtpZigxPT09dGhpcy5vcmlnaW5hbC5saW5lcy5sZW5ndGgmJjA9PT10aGlzLm9yaWdpbmFsLmxpbmVzWzBdLmxlbmd0aClyZXR1cm4gMT09PXRoaXMubW9kaWZpZWQubGluZXMubGVuZ3RoJiYwPT09dGhpcy5tb2RpZmllZC5saW5lc1swXS5sZW5ndGg/e3F1aXRFYXJseTohMSxjaGFuZ2VzOltdfTp7cXVpdEVhcmx5OiExLGNoYW5nZXM6W3tvcmlnaW5hbFN0YXJ0TGluZU51bWJlcjoxLG9yaWdpbmFsRW5kTGluZU51bWJlcjoxLG1vZGlmaWVkU3RhcnRMaW5lTnVtYmVyOjEsbW9kaWZpZWRFbmRMaW5lTnVtYmVyOnRoaXMubW9kaWZpZWQubGluZXMubGVuZ3RoLGNoYXJDaGFuZ2VzOlt7bW9kaWZpZWRFbmRDb2x1bW46MCxtb2RpZmllZEVuZExpbmVOdW1iZXI6MCxtb2RpZmllZFN0YXJ0Q29sdW1uOjAsbW9kaWZpZWRTdGFydExpbmVOdW1iZXI6MCxvcmlnaW5hbEVuZENvbHVtbjowLG9yaWdpbmFsRW5kTGluZU51bWJlcjowLG9yaWdpbmFsU3RhcnRDb2x1bW46MCxvcmlnaW5hbFN0YXJ0TGluZU51bWJlcjowfV19XX07aWYoMT09PXRoaXMubW9kaWZpZWQubGluZXMubGVuZ3RoJiYwPT09dGhpcy5tb2RpZmllZC5saW5lc1swXS5sZW5ndGgpcmV0dXJue3F1aXRFYXJseTohMSxjaGFuZ2VzOlt7b3JpZ2luYWxTdGFydExpbmVOdW1iZXI6MSxvcmlnaW5hbEVuZExpbmVOdW1iZXI6dGhpcy5vcmlnaW5hbC5saW5lcy5sZW5ndGgsbW9kaWZpZWRTdGFydExpbmVOdW1iZXI6MSxtb2RpZmllZEVuZExpbmVOdW1iZXI6MSxjaGFyQ2hhbmdlczpbe21vZGlmaWVkRW5kQ29sdW1uOjAsbW9kaWZpZWRFbmRMaW5lTnVtYmVyOjAsbW9kaWZpZWRTdGFydENvbHVtbjowLG1vZGlmaWVkU3RhcnRMaW5lTnVtYmVyOjAsb3JpZ2luYWxFbmRDb2x1bW46MCxvcmlnaW5hbEVuZExpbmVOdW1iZXI6MCxvcmlnaW5hbFN0YXJ0Q29sdW1uOjAsb3JpZ2luYWxTdGFydExpbmVOdW1iZXI6MH1dfV19O2NvbnN0IGU9bnQodGhpcy5vcmlnaW5hbCx0aGlzLm1vZGlmaWVkLHRoaXMuY29udGludWVMaW5lRGlmZix0aGlzLnNob3VsZE1ha2VQcmV0dHlEaWZmKSx0PWUuY2hhbmdlcyxuPWUucXVpdEVhcmx5O2lmKHRoaXMuc2hvdWxkSWdub3JlVHJpbVdoaXRlc3BhY2Upe2NvbnN0IGU9W107Zm9yKGxldCBuPTAscj10Lmxlbmd0aDtuPHI7bisrKWUucHVzaChhdC5jcmVhdGVGcm9tRGlmZlJlc3VsdCh0aGlzLnNob3VsZElnbm9yZVRyaW1XaGl0ZXNwYWNlLHRbbl0sdGhpcy5vcmlnaW5hbCx0aGlzLm1vZGlmaWVkLHRoaXMuY29udGludWVDaGFyRGlmZix0aGlzLnNob3VsZENvbXB1dGVDaGFyQ2hhbmdlcyx0aGlzLnNob3VsZFBvc3RQcm9jZXNzQ2hhckNoYW5nZXMpKTtyZXR1cm57cXVpdEVhcmx5Om4sY2hhbmdlczplfX1jb25zdCByPVtdO2xldCBpPTAsbz0wO2ZvcihsZXQgZT0tMSxuPXQubGVuZ3RoO2U8bjtlKyspe2NvbnN0IGE9ZSsxPG4/dFtlKzFdOm51bGwscz1hP2Eub3JpZ2luYWxTdGFydDp0aGlzLm9yaWdpbmFsTGluZXMubGVuZ3RoLGM9YT9hLm1vZGlmaWVkU3RhcnQ6dGhpcy5tb2RpZmllZExpbmVzLmxlbmd0aDtmb3IoO2k8cyYmbzxjOyl7Y29uc3QgZT10aGlzLm9yaWdpbmFsTGluZXNbaV0sdD10aGlzLm1vZGlmaWVkTGluZXNbb107aWYoZSE9PXQpe3tsZXQgbj1jdChlLDEpLGE9Y3QodCwxKTtmb3IoO24+MSYmYT4xOyl7aWYoZS5jaGFyQ29kZUF0KG4tMikhPT10LmNoYXJDb2RlQXQoYS0yKSlicmVhaztuLS0sYS0tfShuPjF8fGE+MSkmJnRoaXMuX3B1c2hUcmltV2hpdGVzcGFjZUNoYXJDaGFuZ2UocixpKzEsMSxuLG8rMSwxLGEpfXtsZXQgbj1sdChlLDEpLGE9bHQodCwxKTtjb25zdCBzPWUubGVuZ3RoKzEsYz10Lmxlbmd0aCsxO2Zvcig7bjxzJiZhPGM7KXtpZihlLmNoYXJDb2RlQXQobi0xKSE9PWUuY2hhckNvZGVBdChhLTEpKWJyZWFrO24rKyxhKyt9KG48c3x8YTxjKSYmdGhpcy5fcHVzaFRyaW1XaGl0ZXNwYWNlQ2hhckNoYW5nZShyLGkrMSxuLHMsbysxLGEsYyl9fWkrKyxvKyt9YSYmKHIucHVzaChhdC5jcmVhdGVGcm9tRGlmZlJlc3VsdCh0aGlzLnNob3VsZElnbm9yZVRyaW1XaGl0ZXNwYWNlLGEsdGhpcy5vcmlnaW5hbCx0aGlzLm1vZGlmaWVkLHRoaXMuY29udGludWVDaGFyRGlmZix0aGlzLnNob3VsZENvbXB1dGVDaGFyQ2hhbmdlcyx0aGlzLnNob3VsZFBvc3RQcm9jZXNzQ2hhckNoYW5nZXMpKSxpKz1hLm9yaWdpbmFsTGVuZ3RoLG8rPWEubW9kaWZpZWRMZW5ndGgpfXJldHVybntxdWl0RWFybHk6bixjaGFuZ2VzOnJ9fV9wdXNoVHJpbVdoaXRlc3BhY2VDaGFyQ2hhbmdlKGUsdCxuLHIsaSxvLGEpe2lmKHRoaXMuX21lcmdlVHJpbVdoaXRlc3BhY2VDaGFyQ2hhbmdlKGUsdCxuLHIsaSxvLGEpKXJldHVybjtsZXQgczt0aGlzLnNob3VsZENvbXB1dGVDaGFyQ2hhbmdlcyYmKHM9W25ldyBvdCh0LG4sdCxyLGksbyxpLGEpXSksZS5wdXNoKG5ldyBhdCh0LHQsaSxpLHMpKX1fbWVyZ2VUcmltV2hpdGVzcGFjZUNoYXJDaGFuZ2UoZSx0LG4scixpLG8sYSl7Y29uc3Qgcz1lLmxlbmd0aDtpZigwPT09cylyZXR1cm4hMTtjb25zdCBjPWVbcy0xXTtyZXR1cm4gMCE9PWMub3JpZ2luYWxFbmRMaW5lTnVtYmVyJiYwIT09Yy5tb2RpZmllZEVuZExpbmVOdW1iZXImJihjLm9yaWdpbmFsRW5kTGluZU51bWJlcisxPT09dCYmYy5tb2RpZmllZEVuZExpbmVOdW1iZXIrMT09PWkmJihjLm9yaWdpbmFsRW5kTGluZU51bWJlcj10LGMubW9kaWZpZWRFbmRMaW5lTnVtYmVyPWksdGhpcy5zaG91bGRDb21wdXRlQ2hhckNoYW5nZXMmJmMuY2hhckNoYW5nZXMmJmMuY2hhckNoYW5nZXMucHVzaChuZXcgb3QodCxuLHQscixpLG8saSxhKSksITApKX19ZnVuY3Rpb24gY3QoZSx0KXtjb25zdCBuPWZ1bmN0aW9uKGUpe2ZvcihsZXQgdD0wLG49ZS5sZW5ndGg7dDxuO3QrKyl7Y29uc3Qgbj1lLmNoYXJDb2RlQXQodCk7aWYoMzIhPT1uJiY5IT09bilyZXR1cm4gdH1yZXR1cm4tMX0oZSk7cmV0dXJuLTE9PT1uP3Q6bisxfWZ1bmN0aW9uIGx0KGUsdCl7Y29uc3Qgbj1mdW5jdGlvbihlLHQ9ZS5sZW5ndGgtMSl7Zm9yKGxldCBuPXQ7bj49MDtuLS0pe2NvbnN0IHQ9ZS5jaGFyQ29kZUF0KG4pO2lmKDMyIT09dCYmOSE9PXQpcmV0dXJuIG59cmV0dXJuLTF9KGUpO3JldHVybi0xPT09bj90Om4rMn1mdW5jdGlvbiB1dChlKXtpZigwPT09ZSlyZXR1cm4oKT0+ITA7Y29uc3QgdD1EYXRlLm5vdygpO3JldHVybigpPT5EYXRlLm5vdygpLXQ8ZX12YXIgaHQ7ZnVuY3Rpb24gZnQoZSl7cmV0dXJuIGU8MD8wOmU+MjU1PzI1NTowfGV9ZnVuY3Rpb24gZHQoZSl7cmV0dXJuIGU8MD8wOmU+NDI5NDk2NzI5NT80Mjk0OTY3Mjk1OjB8ZX0hZnVuY3Rpb24oZSl7ZS5pc0xlc3NUaGFuPWZ1bmN0aW9uKGUpe3JldHVybiBlPDB9LGUuaXNHcmVhdGVyVGhhbj1mdW5jdGlvbihlKXtyZXR1cm4gZT4wfSxlLmlzTmVpdGhlckxlc3NPckdyZWF0ZXJUaGFuPWZ1bmN0aW9uKGUpe3JldHVybiAwPT09ZX0sZS5ncmVhdGVyVGhhbj0xLGUubGVzc1RoYW49LTEsZS5uZWl0aGVyTGVzc09yR3JlYXRlclRoYW49MH0oaHR8fChodD17fSkpO2NsYXNzIG10e2NvbnN0cnVjdG9yKGUpe3RoaXMudmFsdWVzPWUsdGhpcy5wcmVmaXhTdW09bmV3IFVpbnQzMkFycmF5KGUubGVuZ3RoKSx0aGlzLnByZWZpeFN1bVZhbGlkSW5kZXg9bmV3IEludDMyQXJyYXkoMSksdGhpcy5wcmVmaXhTdW1WYWxpZEluZGV4WzBdPS0xfWluc2VydFZhbHVlcyhlLHQpe2U9ZHQoZSk7Y29uc3Qgbj10aGlzLnZhbHVlcyxyPXRoaXMucHJlZml4U3VtLGk9dC5sZW5ndGg7cmV0dXJuIDAhPT1pJiYodGhpcy52YWx1ZXM9bmV3IFVpbnQzMkFycmF5KG4ubGVuZ3RoK2kpLHRoaXMudmFsdWVzLnNldChuLnN1YmFycmF5KDAsZSksMCksdGhpcy52YWx1ZXMuc2V0KG4uc3ViYXJyYXkoZSksZStpKSx0aGlzLnZhbHVlcy5zZXQodCxlKSxlLTE8dGhpcy5wcmVmaXhTdW1WYWxpZEluZGV4WzBdJiYodGhpcy5wcmVmaXhTdW1WYWxpZEluZGV4WzBdPWUtMSksdGhpcy5wcmVmaXhTdW09bmV3IFVpbnQzMkFycmF5KHRoaXMudmFsdWVzLmxlbmd0aCksdGhpcy5wcmVmaXhTdW1WYWxpZEluZGV4WzBdPj0wJiZ0aGlzLnByZWZpeFN1bS5zZXQoci5zdWJhcnJheSgwLHRoaXMucHJlZml4U3VtVmFsaWRJbmRleFswXSsxKSksITApfXNldFZhbHVlKGUsdCl7cmV0dXJuIGU9ZHQoZSksdD1kdCh0KSx0aGlzLnZhbHVlc1tlXSE9PXQmJih0aGlzLnZhbHVlc1tlXT10LGUtMTx0aGlzLnByZWZpeFN1bVZhbGlkSW5kZXhbMF0mJih0aGlzLnByZWZpeFN1bVZhbGlkSW5kZXhbMF09ZS0xKSwhMCl9cmVtb3ZlVmFsdWVzKGUsdCl7ZT1kdChlKSx0PWR0KHQpO2NvbnN0IG49dGhpcy52YWx1ZXMscj10aGlzLnByZWZpeFN1bTtpZihlPj1uLmxlbmd0aClyZXR1cm4hMTtjb25zdCBpPW4ubGVuZ3RoLWU7cmV0dXJuIHQ+PWkmJih0PWkpLDAhPT10JiYodGhpcy52YWx1ZXM9bmV3IFVpbnQzMkFycmF5KG4ubGVuZ3RoLXQpLHRoaXMudmFsdWVzLnNldChuLnN1YmFycmF5KDAsZSksMCksdGhpcy52YWx1ZXMuc2V0KG4uc3ViYXJyYXkoZSt0KSxlKSx0aGlzLnByZWZpeFN1bT1uZXcgVWludDMyQXJyYXkodGhpcy52YWx1ZXMubGVuZ3RoKSxlLTE8dGhpcy5wcmVmaXhTdW1WYWxpZEluZGV4WzBdJiYodGhpcy5wcmVmaXhTdW1WYWxpZEluZGV4WzBdPWUtMSksdGhpcy5wcmVmaXhTdW1WYWxpZEluZGV4WzBdPj0wJiZ0aGlzLnByZWZpeFN1bS5zZXQoci5zdWJhcnJheSgwLHRoaXMucHJlZml4U3VtVmFsaWRJbmRleFswXSsxKSksITApfWdldFRvdGFsU3VtKCl7cmV0dXJuIDA9PT10aGlzLnZhbHVlcy5sZW5ndGg/MDp0aGlzLl9nZXRQcmVmaXhTdW0odGhpcy52YWx1ZXMubGVuZ3RoLTEpfWdldFByZWZpeFN1bShlKXtyZXR1cm4gZTwwPzA6KGU9ZHQoZSksdGhpcy5fZ2V0UHJlZml4U3VtKGUpKX1fZ2V0UHJlZml4U3VtKGUpe2lmKGU8PXRoaXMucHJlZml4U3VtVmFsaWRJbmRleFswXSlyZXR1cm4gdGhpcy5wcmVmaXhTdW1bZV07bGV0IHQ9dGhpcy5wcmVmaXhTdW1WYWxpZEluZGV4WzBdKzE7MD09PXQmJih0aGlzLnByZWZpeFN1bVswXT10aGlzLnZhbHVlc1swXSx0KyspLGU+PXRoaXMudmFsdWVzLmxlbmd0aCYmKGU9dGhpcy52YWx1ZXMubGVuZ3RoLTEpO2ZvcihsZXQgbj10O248PWU7bisrKXRoaXMucHJlZml4U3VtW25dPXRoaXMucHJlZml4U3VtW24tMV0rdGhpcy52YWx1ZXNbbl07cmV0dXJuIHRoaXMucHJlZml4U3VtVmFsaWRJbmRleFswXT1NYXRoLm1heCh0aGlzLnByZWZpeFN1bVZhbGlkSW5kZXhbMF0sZSksdGhpcy5wcmVmaXhTdW1bZV19Z2V0SW5kZXhPZihlKXtlPU1hdGguZmxvb3IoZSksdGhpcy5nZXRUb3RhbFN1bSgpO2xldCB0PTAsbj10aGlzLnZhbHVlcy5sZW5ndGgtMSxyPTAsaT0wLG89MDtmb3IoO3Q8PW47KWlmKHI9dCsobi10KS8yfDAsaT10aGlzLnByZWZpeFN1bVtyXSxvPWktdGhpcy52YWx1ZXNbcl0sZTxvKW49ci0xO2Vsc2V7aWYoIShlPj1pKSlicmVhazt0PXIrMX1yZXR1cm4gbmV3IGd0KHIsZS1vKX19Y2xhc3MgZ3R7Y29uc3RydWN0b3IoZSx0KXt0aGlzLmluZGV4PWUsdGhpcy5yZW1haW5kZXI9dCx0aGlzLl9wcmVmaXhTdW1JbmRleE9mUmVzdWx0QnJhbmQ9dm9pZCAwLHRoaXMuaW5kZXg9ZSx0aGlzLnJlbWFpbmRlcj10fX1jbGFzcyBwdHtjb25zdHJ1Y3RvcihlLHQsbixyKXt0aGlzLl91cmk9ZSx0aGlzLl9saW5lcz10LHRoaXMuX2VvbD1uLHRoaXMuX3ZlcnNpb25JZD1yLHRoaXMuX2xpbmVTdGFydHM9bnVsbCx0aGlzLl9jYWNoZWRUZXh0VmFsdWU9bnVsbH1kaXNwb3NlKCl7dGhpcy5fbGluZXMubGVuZ3RoPTB9Z2V0IHZlcnNpb24oKXtyZXR1cm4gdGhpcy5fdmVyc2lvbklkfWdldFRleHQoKXtyZXR1cm4gbnVsbD09PXRoaXMuX2NhY2hlZFRleHRWYWx1ZSYmKHRoaXMuX2NhY2hlZFRleHRWYWx1ZT10aGlzLl9saW5lcy5qb2luKHRoaXMuX2VvbCkpLHRoaXMuX2NhY2hlZFRleHRWYWx1ZX1vbkV2ZW50cyhlKXtlLmVvbCYmZS5lb2whPT10aGlzLl9lb2wmJih0aGlzLl9lb2w9ZS5lb2wsdGhpcy5fbGluZVN0YXJ0cz1udWxsKTtjb25zdCB0PWUuY2hhbmdlcztmb3IoY29uc3QgZSBvZiB0KXRoaXMuX2FjY2VwdERlbGV0ZVJhbmdlKGUucmFuZ2UpLHRoaXMuX2FjY2VwdEluc2VydFRleHQobmV3IGV0KGUucmFuZ2Uuc3RhcnRMaW5lTnVtYmVyLGUucmFuZ2Uuc3RhcnRDb2x1bW4pLGUudGV4dCk7dGhpcy5fdmVyc2lvbklkPWUudmVyc2lvbklkLHRoaXMuX2NhY2hlZFRleHRWYWx1ZT1udWxsfV9lbnN1cmVMaW5lU3RhcnRzKCl7aWYoIXRoaXMuX2xpbmVTdGFydHMpe2NvbnN0IGU9dGhpcy5fZW9sLmxlbmd0aCx0PXRoaXMuX2xpbmVzLmxlbmd0aCxuPW5ldyBVaW50MzJBcnJheSh0KTtmb3IobGV0IHI9MDtyPHQ7cisrKW5bcl09dGhpcy5fbGluZXNbcl0ubGVuZ3RoK2U7dGhpcy5fbGluZVN0YXJ0cz1uZXcgbXQobil9fV9zZXRMaW5lVGV4dChlLHQpe3RoaXMuX2xpbmVzW2VdPXQsdGhpcy5fbGluZVN0YXJ0cyYmdGhpcy5fbGluZVN0YXJ0cy5zZXRWYWx1ZShlLHRoaXMuX2xpbmVzW2VdLmxlbmd0aCt0aGlzLl9lb2wubGVuZ3RoKX1fYWNjZXB0RGVsZXRlUmFuZ2UoZSl7aWYoZS5zdGFydExpbmVOdW1iZXIhPT1lLmVuZExpbmVOdW1iZXIpdGhpcy5fc2V0TGluZVRleHQoZS5zdGFydExpbmVOdW1iZXItMSx0aGlzLl9saW5lc1tlLnN0YXJ0TGluZU51bWJlci0xXS5zdWJzdHJpbmcoMCxlLnN0YXJ0Q29sdW1uLTEpK3RoaXMuX2xpbmVzW2UuZW5kTGluZU51bWJlci0xXS5zdWJzdHJpbmcoZS5lbmRDb2x1bW4tMSkpLHRoaXMuX2xpbmVzLnNwbGljZShlLnN0YXJ0TGluZU51bWJlcixlLmVuZExpbmVOdW1iZXItZS5zdGFydExpbmVOdW1iZXIpLHRoaXMuX2xpbmVTdGFydHMmJnRoaXMuX2xpbmVTdGFydHMucmVtb3ZlVmFsdWVzKGUuc3RhcnRMaW5lTnVtYmVyLGUuZW5kTGluZU51bWJlci1lLnN0YXJ0TGluZU51bWJlcik7ZWxzZXtpZihlLnN0YXJ0Q29sdW1uPT09ZS5lbmRDb2x1bW4pcmV0dXJuO3RoaXMuX3NldExpbmVUZXh0KGUuc3RhcnRMaW5lTnVtYmVyLTEsdGhpcy5fbGluZXNbZS5zdGFydExpbmVOdW1iZXItMV0uc3Vic3RyaW5nKDAsZS5zdGFydENvbHVtbi0xKSt0aGlzLl9saW5lc1tlLnN0YXJ0TGluZU51bWJlci0xXS5zdWJzdHJpbmcoZS5lbmRDb2x1bW4tMSkpfX1fYWNjZXB0SW5zZXJ0VGV4dChlLHQpe2lmKDA9PT10Lmxlbmd0aClyZXR1cm47Y29uc3Qgbj10LnNwbGl0KC9cclxufFxyfFxuLyk7aWYoMT09PW4ubGVuZ3RoKXJldHVybiB2b2lkIHRoaXMuX3NldExpbmVUZXh0KGUubGluZU51bWJlci0xLHRoaXMuX2xpbmVzW2UubGluZU51bWJlci0xXS5zdWJzdHJpbmcoMCxlLmNvbHVtbi0xKStuWzBdK3RoaXMuX2xpbmVzW2UubGluZU51bWJlci0xXS5zdWJzdHJpbmcoZS5jb2x1bW4tMSkpO25bbi5sZW5ndGgtMV0rPXRoaXMuX2xpbmVzW2UubGluZU51bWJlci0xXS5zdWJzdHJpbmcoZS5jb2x1bW4tMSksdGhpcy5fc2V0TGluZVRleHQoZS5saW5lTnVtYmVyLTEsdGhpcy5fbGluZXNbZS5saW5lTnVtYmVyLTFdLnN1YnN0cmluZygwLGUuY29sdW1uLTEpK25bMF0pO2NvbnN0IHI9bmV3IFVpbnQzMkFycmF5KG4ubGVuZ3RoLTEpO2ZvcihsZXQgdD0xO3Q8bi5sZW5ndGg7dCsrKXRoaXMuX2xpbmVzLnNwbGljZShlLmxpbmVOdW1iZXIrdC0xLDAsblt0XSksclt0LTFdPW5bdF0ubGVuZ3RoK3RoaXMuX2VvbC5sZW5ndGg7dGhpcy5fbGluZVN0YXJ0cyYmdGhpcy5fbGluZVN0YXJ0cy5pbnNlcnRWYWx1ZXMoZS5saW5lTnVtYmVyLHIpfX1jb25zdCBidD1mdW5jdGlvbihlPSIiKXtsZXQgdD0iKC0/XFxkKlxcLlxcZFxcdyopfChbXiI7Zm9yKGNvbnN0IG4gb2YiYH4hQCMkJV4mKigpLT0rW3tdfVxcfDs6J1wiLC48Pi8/IillLmluZGV4T2Yobik+PTB8fCh0Kz0iXFwiK24pO3JldHVybiB0Kz0iXFxzXSspIixuZXcgUmVnRXhwKHQsImciKX0oKTtjb25zdCB2dD1uZXcgZztmdW5jdGlvbiB5dChlLHQsbixyLGkpe2lmKGl8fChpPXMuZmlyc3QodnQpKSxuLmxlbmd0aD5pLm1heExlbil7bGV0IG89ZS1pLm1heExlbi8yO3JldHVybiBvPDA/bz0wOnIrPW8seXQoZSx0LG49bi5zdWJzdHJpbmcobyxlK2kubWF4TGVuLzIpLHIsaSl9Y29uc3Qgbz1EYXRlLm5vdygpLGE9ZS0xLXI7bGV0IGM9LTEsbD1udWxsO2ZvcihsZXQgZT0xOyEoRGF0ZS5ub3coKS1vPj1pLnRpbWVCdWRnZXQpO2UrKyl7Y29uc3Qgcj1hLWkud2luZG93U2l6ZSplO3QubGFzdEluZGV4PU1hdGgubWF4KDAscik7Y29uc3Qgbz1DdCh0LG4sYSxjKTtpZighbyYmbClicmVhaztpZihsPW8scjw9MClicmVhaztjPXJ9aWYobCl7Y29uc3QgZT17d29yZDpsWzBdLHN0YXJ0Q29sdW1uOnIrMStsLmluZGV4LGVuZENvbHVtbjpyKzErbC5pbmRleCtsWzBdLmxlbmd0aH07cmV0dXJuIHQubGFzdEluZGV4PTAsZX1yZXR1cm4gbnVsbH1mdW5jdGlvbiBDdChlLHQsbixyKXtsZXQgaTtmb3IoO2k9ZS5leGVjKHQpOyl7Y29uc3QgdD1pLmluZGV4fHwwO2lmKHQ8PW4mJmUubGFzdEluZGV4Pj1uKXJldHVybiBpO2lmKHI+MCYmdD5yKXJldHVybiBudWxsfXJldHVybiBudWxsfXZ0LnVuc2hpZnQoe21heExlbjoxZTMsd2luZG93U2l6ZToxNSx0aW1lQnVkZ2V0OjE1MH0pO2NsYXNzIHd0e2NvbnN0cnVjdG9yKGUpe2NvbnN0IHQ9ZnQoZSk7dGhpcy5fZGVmYXVsdFZhbHVlPXQsdGhpcy5fYXNjaWlNYXA9d3QuX2NyZWF0ZUFzY2lpTWFwKHQpLHRoaXMuX21hcD1uZXcgTWFwfXN0YXRpYyBfY3JlYXRlQXNjaWlNYXAoZSl7Y29uc3QgdD1uZXcgVWludDhBcnJheSgyNTYpO2ZvcihsZXQgbj0wO248MjU2O24rKyl0W25dPWU7cmV0dXJuIHR9c2V0KGUsdCl7Y29uc3Qgbj1mdCh0KTtlPj0wJiZlPDI1Nj90aGlzLl9hc2NpaU1hcFtlXT1uOnRoaXMuX21hcC5zZXQoZSxuKX1nZXQoZSl7cmV0dXJuIGU+PTAmJmU8MjU2P3RoaXMuX2FzY2lpTWFwW2VdOnRoaXMuX21hcC5nZXQoZSl8fHRoaXMuX2RlZmF1bHRWYWx1ZX19Y2xhc3MgX3R7Y29uc3RydWN0b3IoZSx0LG4pe2NvbnN0IHI9bmV3IFVpbnQ4QXJyYXkoZSp0KTtmb3IobGV0IGk9MCxvPWUqdDtpPG87aSsrKXJbaV09bjt0aGlzLl9kYXRhPXIsdGhpcy5yb3dzPWUsdGhpcy5jb2xzPXR9Z2V0KGUsdCl7cmV0dXJuIHRoaXMuX2RhdGFbZSp0aGlzLmNvbHMrdF19c2V0KGUsdCxuKXt0aGlzLl9kYXRhW2UqdGhpcy5jb2xzK3RdPW59fWNsYXNzIFN0e2NvbnN0cnVjdG9yKGUpe2xldCB0PTAsbj0wO2ZvcihsZXQgcj0wLGk9ZS5sZW5ndGg7cjxpO3IrKyl7Y29uc3RbaSxvLGFdPWVbcl07bz50JiYodD1vKSxpPm4mJihuPWkpLGE+biYmKG49YSl9dCsrLG4rKztjb25zdCByPW5ldyBfdChuLHQsMCk7Zm9yKGxldCB0PTAsbj1lLmxlbmd0aDt0PG47dCsrKXtjb25zdFtuLGksb109ZVt0XTtyLnNldChuLGksbyl9dGhpcy5fc3RhdGVzPXIsdGhpcy5fbWF4Q2hhckNvZGU9dH1uZXh0U3RhdGUoZSx0KXtyZXR1cm4gdDwwfHx0Pj10aGlzLl9tYXhDaGFyQ29kZT8wOnRoaXMuX3N0YXRlcy5nZXQoZSx0KX19bGV0IEF0PW51bGw7bGV0IEV0PW51bGw7Y2xhc3MgeHR7c3RhdGljIF9jcmVhdGVMaW5rKGUsdCxuLHIsaSl7bGV0IG89aS0xO2Rve2NvbnN0IG49dC5jaGFyQ29kZUF0KG8pO2lmKDIhPT1lLmdldChuKSlicmVhaztvLS19d2hpbGUobz5yKTtpZihyPjApe2NvbnN0IGU9dC5jaGFyQ29kZUF0KHItMSksbj10LmNoYXJDb2RlQXQobyk7KDQwPT09ZSYmNDE9PT1ufHw5MT09PWUmJjkzPT09bnx8MTIzPT09ZSYmMTI1PT09bikmJm8tLX1yZXR1cm57cmFuZ2U6e3N0YXJ0TGluZU51bWJlcjpuLHN0YXJ0Q29sdW1uOnIrMSxlbmRMaW5lTnVtYmVyOm4sZW5kQ29sdW1uOm8rMn0sdXJsOnQuc3Vic3RyaW5nKHIsbysxKX19c3RhdGljIGNvbXB1dGVMaW5rcyhlLHQ9ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbD09PUF0JiYoQXQ9bmV3IFN0KFtbMSwxMDQsMl0sWzEsNzIsMl0sWzEsMTAyLDZdLFsxLDcwLDZdLFsyLDExNiwzXSxbMiw4NCwzXSxbMywxMTYsNF0sWzMsODQsNF0sWzQsMTEyLDVdLFs0LDgwLDVdLFs1LDExNSw5XSxbNSw4Myw5XSxbNSw1OCwxMF0sWzYsMTA1LDddLFs2LDczLDddLFs3LDEwOCw4XSxbNyw3Niw4XSxbOCwxMDEsOV0sWzgsNjksOV0sWzksNTgsMTBdLFsxMCw0NywxMV0sWzExLDQ3LDEyXV0pKSxBdH0oKSl7Y29uc3Qgbj1mdW5jdGlvbigpe2lmKG51bGw9PT1FdCl7RXQ9bmV3IHd0KDApO2NvbnN0IGU9IiBcdDw+J1wi44CB44CC772h772k77yM77yO77ya77yb4oCY44CI44CM44CO44CU77yI77y7772b772i772j772d77y977yJ44CV44CP44CN44CJ4oCZ772A772e4oCmIjtmb3IobGV0IHQ9MDt0PGUubGVuZ3RoO3QrKylFdC5zZXQoZS5jaGFyQ29kZUF0KHQpLDEpO2NvbnN0IHQ9Ii4sOzoiO2ZvcihsZXQgZT0wO2U8dC5sZW5ndGg7ZSsrKUV0LnNldCh0LmNoYXJDb2RlQXQoZSksMil9cmV0dXJuIEV0fSgpLHI9W107Zm9yKGxldCBpPTEsbz1lLmdldExpbmVDb3VudCgpO2k8PW87aSsrKXtjb25zdCBvPWUuZ2V0TGluZUNvbnRlbnQoaSksYT1vLmxlbmd0aDtsZXQgcz0wLGM9MCxsPTAsdT0xLGg9ITEsZj0hMSxkPSExLG09ITE7Zm9yKDtzPGE7KXtsZXQgZT0hMTtjb25zdCBhPW8uY2hhckNvZGVBdChzKTtpZigxMz09PXUpe2xldCB0O3N3aXRjaChhKXtjYXNlIDQwOmg9ITAsdD0wO2JyZWFrO2Nhc2UgNDE6dD1oPzA6MTticmVhaztjYXNlIDkxOmQ9ITAsZj0hMCx0PTA7YnJlYWs7Y2FzZSA5MzpkPSExLHQ9Zj8wOjE7YnJlYWs7Y2FzZSAxMjM6bT0hMCx0PTA7YnJlYWs7Y2FzZSAxMjU6dD1tPzA6MTticmVhaztjYXNlIDM5OnQ9Mzk9PT1sPzE6MDticmVhaztjYXNlIDM0OnQ9MzQ9PT1sPzE6MDticmVhaztjYXNlIDk2OnQ9OTY9PT1sPzE6MDticmVhaztjYXNlIDQyOnQ9NDI9PT1sPzE6MDticmVhaztjYXNlIDEyNDp0PTEyND09PWw/MTowO2JyZWFrO2Nhc2UgMzI6dD1kPzA6MTticmVhaztkZWZhdWx0OnQ9bi5nZXQoYSl9MT09PXQmJihyLnB1c2goeHQuX2NyZWF0ZUxpbmsobixvLGksYyxzKSksZT0hMCl9ZWxzZSBpZigxMj09PXUpe2xldCB0OzkxPT09YT8oZj0hMCx0PTApOnQ9bi5nZXQoYSksMT09PXQ/ZT0hMDp1PTEzfWVsc2UgdT10Lm5leHRTdGF0ZSh1LGEpLDA9PT11JiYoZT0hMCk7ZSYmKHU9MSxoPSExLGY9ITEsbT0hMSxjPXMrMSxsPWEpLHMrK30xMz09PXUmJnIucHVzaCh4dC5fY3JlYXRlTGluayhuLG8saSxjLGEpKX1yZXR1cm4gcn19Y2xhc3MgTnR7Y29uc3RydWN0b3IoKXt0aGlzLl9kZWZhdWx0VmFsdWVTZXQ9W1sidHJ1ZSIsImZhbHNlIl0sWyJUcnVlIiwiRmFsc2UiXSxbIlByaXZhdGUiLCJQdWJsaWMiLCJGcmllbmQiLCJSZWFkT25seSIsIlBhcnRpYWwiLCJQcm90ZWN0ZWQiLCJXcml0ZU9ubHkiXSxbInB1YmxpYyIsInByb3RlY3RlZCIsInByaXZhdGUiXV19bmF2aWdhdGVWYWx1ZVNldChlLHQsbixyLGkpe2lmKGUmJnQpe2NvbnN0IG49dGhpcy5kb05hdmlnYXRlVmFsdWVTZXQodCxpKTtpZihuKXJldHVybntyYW5nZTplLHZhbHVlOm59fWlmKG4mJnIpe2NvbnN0IGU9dGhpcy5kb05hdmlnYXRlVmFsdWVTZXQocixpKTtpZihlKXJldHVybntyYW5nZTpuLHZhbHVlOmV9fXJldHVybiBudWxsfWRvTmF2aWdhdGVWYWx1ZVNldChlLHQpe2NvbnN0IG49dGhpcy5udW1iZXJSZXBsYWNlKGUsdCk7cmV0dXJuIG51bGwhPT1uP246dGhpcy50ZXh0UmVwbGFjZShlLHQpfW51bWJlclJlcGxhY2UoZSx0KXtjb25zdCBuPU1hdGgucG93KDEwLGUubGVuZ3RoLShlLmxhc3RJbmRleE9mKCIuIikrMSkpO2xldCByPU51bWJlcihlKTtjb25zdCBpPXBhcnNlRmxvYXQoZSk7cmV0dXJuIGlzTmFOKHIpfHxpc05hTihpKXx8ciE9PWk/bnVsbDowIT09cnx8dD8ocj1NYXRoLmZsb29yKHIqbikscis9dD9uOi1uLFN0cmluZyhyL24pKTpudWxsfXRleHRSZXBsYWNlKGUsdCl7cmV0dXJuIHRoaXMudmFsdWVTZXRzUmVwbGFjZSh0aGlzLl9kZWZhdWx0VmFsdWVTZXQsZSx0KX12YWx1ZVNldHNSZXBsYWNlKGUsdCxuKXtsZXQgcj1udWxsO2ZvcihsZXQgaT0wLG89ZS5sZW5ndGg7bnVsbD09PXImJmk8bztpKyspcj10aGlzLnZhbHVlU2V0UmVwbGFjZShlW2ldLHQsbik7cmV0dXJuIHJ9dmFsdWVTZXRSZXBsYWNlKGUsdCxuKXtsZXQgcj1lLmluZGV4T2YodCk7cmV0dXJuIHI+PTA/KHIrPW4/MTotMSxyPDA/cj1lLmxlbmd0aC0xOnIlPWUubGVuZ3RoLGVbcl0pOm51bGx9fU50LklOU1RBTkNFPW5ldyBOdDtjb25zdCBrdD1PYmplY3QuZnJlZXplKChmdW5jdGlvbihlLHQpe2NvbnN0IG49c2V0VGltZW91dChlLmJpbmQodCksMCk7cmV0dXJue2Rpc3Bvc2UoKXtjbGVhclRpbWVvdXQobil9fX0pKTt2YXIgTHQ7IWZ1bmN0aW9uKGUpe2UuaXNDYW5jZWxsYXRpb25Ub2tlbj1mdW5jdGlvbih0KXtyZXR1cm4gdD09PWUuTm9uZXx8dD09PWUuQ2FuY2VsbGVkfHwodCBpbnN0YW5jZW9mIFR0fHwhKCF0fHwib2JqZWN0IiE9dHlwZW9mIHQpJiYoImJvb2xlYW4iPT10eXBlb2YgdC5pc0NhbmNlbGxhdGlvblJlcXVlc3RlZCYmImZ1bmN0aW9uIj09dHlwZW9mIHQub25DYW5jZWxsYXRpb25SZXF1ZXN0ZWQpKX0sZS5Ob25lPU9iamVjdC5mcmVlemUoe2lzQ2FuY2VsbGF0aW9uUmVxdWVzdGVkOiExLG9uQ2FuY2VsbGF0aW9uUmVxdWVzdGVkOkYuTm9uZX0pLGUuQ2FuY2VsbGVkPU9iamVjdC5mcmVlemUoe2lzQ2FuY2VsbGF0aW9uUmVxdWVzdGVkOiEwLG9uQ2FuY2VsbGF0aW9uUmVxdWVzdGVkOmt0fSl9KEx0fHwoTHQ9e30pKTtjbGFzcyBUdHtjb25zdHJ1Y3Rvcigpe3RoaXMuX2lzQ2FuY2VsbGVkPSExLHRoaXMuX2VtaXR0ZXI9bnVsbH1jYW5jZWwoKXt0aGlzLl9pc0NhbmNlbGxlZHx8KHRoaXMuX2lzQ2FuY2VsbGVkPSEwLHRoaXMuX2VtaXR0ZXImJih0aGlzLl9lbWl0dGVyLmZpcmUodm9pZCAwKSx0aGlzLmRpc3Bvc2UoKSkpfWdldCBpc0NhbmNlbGxhdGlvblJlcXVlc3RlZCgpe3JldHVybiB0aGlzLl9pc0NhbmNlbGxlZH1nZXQgb25DYW5jZWxsYXRpb25SZXF1ZXN0ZWQoKXtyZXR1cm4gdGhpcy5faXNDYW5jZWxsZWQ/a3Q6KHRoaXMuX2VtaXR0ZXJ8fCh0aGlzLl9lbWl0dGVyPW5ldyBCKSx0aGlzLl9lbWl0dGVyLmV2ZW50KX1kaXNwb3NlKCl7dGhpcy5fZW1pdHRlciYmKHRoaXMuX2VtaXR0ZXIuZGlzcG9zZSgpLHRoaXMuX2VtaXR0ZXI9bnVsbCl9fWNsYXNzIE90e2NvbnN0cnVjdG9yKGUpe3RoaXMuX3Rva2VuPXZvaWQgMCx0aGlzLl9wYXJlbnRMaXN0ZW5lcj12b2lkIDAsdGhpcy5fcGFyZW50TGlzdGVuZXI9ZSYmZS5vbkNhbmNlbGxhdGlvblJlcXVlc3RlZCh0aGlzLmNhbmNlbCx0aGlzKX1nZXQgdG9rZW4oKXtyZXR1cm4gdGhpcy5fdG9rZW58fCh0aGlzLl90b2tlbj1uZXcgVHQpLHRoaXMuX3Rva2VufWNhbmNlbCgpe3RoaXMuX3Rva2VuP3RoaXMuX3Rva2VuIGluc3RhbmNlb2YgVHQmJnRoaXMuX3Rva2VuLmNhbmNlbCgpOnRoaXMuX3Rva2VuPUx0LkNhbmNlbGxlZH1kaXNwb3NlKGU9ITEpe2UmJnRoaXMuY2FuY2VsKCksdGhpcy5fcGFyZW50TGlzdGVuZXImJnRoaXMuX3BhcmVudExpc3RlbmVyLmRpc3Bvc2UoKSx0aGlzLl90b2tlbj90aGlzLl90b2tlbiBpbnN0YW5jZW9mIFR0JiZ0aGlzLl90b2tlbi5kaXNwb3NlKCk6dGhpcy5fdG9rZW49THQuTm9uZX19Y2xhc3MgSXR7Y29uc3RydWN0b3IoKXt0aGlzLl9rZXlDb2RlVG9TdHI9W10sdGhpcy5fc3RyVG9LZXlDb2RlPU9iamVjdC5jcmVhdGUobnVsbCl9ZGVmaW5lKGUsdCl7dGhpcy5fa2V5Q29kZVRvU3RyW2VdPXQsdGhpcy5fc3RyVG9LZXlDb2RlW3QudG9Mb3dlckNhc2UoKV09ZX1rZXlDb2RlVG9TdHIoZSl7cmV0dXJuIHRoaXMuX2tleUNvZGVUb1N0cltlXX1zdHJUb0tleUNvZGUoZSl7cmV0dXJuIHRoaXMuX3N0clRvS2V5Q29kZVtlLnRvTG93ZXJDYXNlKCldfHwwfX1jb25zdCBNdD1uZXcgSXQsUHQ9bmV3IEl0LFJ0PW5ldyBJdCxWdD1uZXcgQXJyYXkoMjMwKSxGdD1PYmplY3QuY3JlYXRlKG51bGwpLER0PU9iamVjdC5jcmVhdGUobnVsbCk7dmFyIEt0LGp0OyFmdW5jdGlvbigpe2NvbnN0IGU9IiIsdD1bWzAsMSwwLCJOb25lIiwwLCJ1bmtub3duIiwwLCJWS19VTktOT1dOIixlLGVdLFswLDEsMSwiSHlwZXIiLDAsZSwwLGUsZSxlXSxbMCwxLDIsIlN1cGVyIiwwLGUsMCxlLGUsZV0sWzAsMSwzLCJGbiIsMCxlLDAsZSxlLGVdLFswLDEsNCwiRm5Mb2NrIiwwLGUsMCxlLGUsZV0sWzAsMSw1LCJTdXNwZW5kIiwwLGUsMCxlLGUsZV0sWzAsMSw2LCJSZXN1bWUiLDAsZSwwLGUsZSxlXSxbMCwxLDcsIlR1cmJvIiwwLGUsMCxlLGUsZV0sWzAsMSw4LCJTbGVlcCIsMCxlLDAsIlZLX1NMRUVQIixlLGVdLFswLDEsOSwiV2FrZVVwIiwwLGUsMCxlLGUsZV0sWzMxLDAsMTAsIktleUEiLDMxLCJBIiw2NSwiVktfQSIsZSxlXSxbMzIsMCwxMSwiS2V5QiIsMzIsIkIiLDY2LCJWS19CIixlLGVdLFszMywwLDEyLCJLZXlDIiwzMywiQyIsNjcsIlZLX0MiLGUsZV0sWzM0LDAsMTMsIktleUQiLDM0LCJEIiw2OCwiVktfRCIsZSxlXSxbMzUsMCwxNCwiS2V5RSIsMzUsIkUiLDY5LCJWS19FIixlLGVdLFszNiwwLDE1LCJLZXlGIiwzNiwiRiIsNzAsIlZLX0YiLGUsZV0sWzM3LDAsMTYsIktleUciLDM3LCJHIiw3MSwiVktfRyIsZSxlXSxbMzgsMCwxNywiS2V5SCIsMzgsIkgiLDcyLCJWS19IIixlLGVdLFszOSwwLDE4LCJLZXlJIiwzOSwiSSIsNzMsIlZLX0kiLGUsZV0sWzQwLDAsMTksIktleUoiLDQwLCJKIiw3NCwiVktfSiIsZSxlXSxbNDEsMCwyMCwiS2V5SyIsNDEsIksiLDc1LCJWS19LIixlLGVdLFs0MiwwLDIxLCJLZXlMIiw0MiwiTCIsNzYsIlZLX0wiLGUsZV0sWzQzLDAsMjIsIktleU0iLDQzLCJNIiw3NywiVktfTSIsZSxlXSxbNDQsMCwyMywiS2V5TiIsNDQsIk4iLDc4LCJWS19OIixlLGVdLFs0NSwwLDI0LCJLZXlPIiw0NSwiTyIsNzksIlZLX08iLGUsZV0sWzQ2LDAsMjUsIktleVAiLDQ2LCJQIiw4MCwiVktfUCIsZSxlXSxbNDcsMCwyNiwiS2V5USIsNDcsIlEiLDgxLCJWS19RIixlLGVdLFs0OCwwLDI3LCJLZXlSIiw0OCwiUiIsODIsIlZLX1IiLGUsZV0sWzQ5LDAsMjgsIktleVMiLDQ5LCJTIiw4MywiVktfUyIsZSxlXSxbNTAsMCwyOSwiS2V5VCIsNTAsIlQiLDg0LCJWS19UIixlLGVdLFs1MSwwLDMwLCJLZXlVIiw1MSwiVSIsODUsIlZLX1UiLGUsZV0sWzUyLDAsMzEsIktleVYiLDUyLCJWIiw4NiwiVktfViIsZSxlXSxbNTMsMCwzMiwiS2V5VyIsNTMsIlciLDg3LCJWS19XIixlLGVdLFs1NCwwLDMzLCJLZXlYIiw1NCwiWCIsODgsIlZLX1giLGUsZV0sWzU1LDAsMzQsIktleVkiLDU1LCJZIiw4OSwiVktfWSIsZSxlXSxbNTYsMCwzNSwiS2V5WiIsNTYsIloiLDkwLCJWS19aIixlLGVdLFsyMiwwLDM2LCJEaWdpdDEiLDIyLCIxIiw0OSwiVktfMSIsZSxlXSxbMjMsMCwzNywiRGlnaXQyIiwyMywiMiIsNTAsIlZLXzIiLGUsZV0sWzI0LDAsMzgsIkRpZ2l0MyIsMjQsIjMiLDUxLCJWS18zIixlLGVdLFsyNSwwLDM5LCJEaWdpdDQiLDI1LCI0Iiw1MiwiVktfNCIsZSxlXSxbMjYsMCw0MCwiRGlnaXQ1IiwyNiwiNSIsNTMsIlZLXzUiLGUsZV0sWzI3LDAsNDEsIkRpZ2l0NiIsMjcsIjYiLDU0LCJWS182IixlLGVdLFsyOCwwLDQyLCJEaWdpdDciLDI4LCI3Iiw1NSwiVktfNyIsZSxlXSxbMjksMCw0MywiRGlnaXQ4IiwyOSwiOCIsNTYsIlZLXzgiLGUsZV0sWzMwLDAsNDQsIkRpZ2l0OSIsMzAsIjkiLDU3LCJWS185IixlLGVdLFsyMSwwLDQ1LCJEaWdpdDAiLDIxLCIwIiw0OCwiVktfMCIsZSxlXSxbMywxLDQ2LCJFbnRlciIsMywiRW50ZXIiLDEzLCJWS19SRVRVUk4iLGUsZV0sWzksMSw0NywiRXNjYXBlIiw5LCJFc2NhcGUiLDI3LCJWS19FU0NBUEUiLGUsZV0sWzEsMSw0OCwiQmFja3NwYWNlIiwxLCJCYWNrc3BhY2UiLDgsIlZLX0JBQ0siLGUsZV0sWzIsMSw0OSwiVGFiIiwyLCJUYWIiLDksIlZLX1RBQiIsZSxlXSxbMTAsMSw1MCwiU3BhY2UiLDEwLCJTcGFjZSIsMzIsIlZLX1NQQUNFIixlLGVdLFs4MywwLDUxLCJNaW51cyIsODMsIi0iLDE4OSwiVktfT0VNX01JTlVTIiwiLSIsIk9FTV9NSU5VUyJdLFs4MSwwLDUyLCJFcXVhbCIsODEsIj0iLDE4NywiVktfT0VNX1BMVVMiLCI9IiwiT0VNX1BMVVMiXSxbODcsMCw1MywiQnJhY2tldExlZnQiLDg3LCJbIiwyMTksIlZLX09FTV80IiwiWyIsIk9FTV80Il0sWzg5LDAsNTQsIkJyYWNrZXRSaWdodCIsODksIl0iLDIyMSwiVktfT0VNXzYiLCJdIiwiT0VNXzYiXSxbODgsMCw1NSwiQmFja3NsYXNoIiw4OCwiXFwiLDIyMCwiVktfT0VNXzUiLCJcXCIsIk9FTV81Il0sWzAsMCw1NiwiSW50bEhhc2giLDAsZSwwLGUsZSxlXSxbODAsMCw1NywiU2VtaWNvbG9uIiw4MCwiOyIsMTg2LCJWS19PRU1fMSIsIjsiLCJPRU1fMSJdLFs5MCwwLDU4LCJRdW90ZSIsOTAsIiciLDIyMiwiVktfT0VNXzciLCInIiwiT0VNXzciXSxbODYsMCw1OSwiQmFja3F1b3RlIiw4NiwiYCIsMTkyLCJWS19PRU1fMyIsImAiLCJPRU1fMyJdLFs4MiwwLDYwLCJDb21tYSIsODIsIiwiLDE4OCwiVktfT0VNX0NPTU1BIiwiLCIsIk9FTV9DT01NQSJdLFs4NCwwLDYxLCJQZXJpb2QiLDg0LCIuIiwxOTAsIlZLX09FTV9QRVJJT0QiLCIuIiwiT0VNX1BFUklPRCJdLFs4NSwwLDYyLCJTbGFzaCIsODUsIi8iLDE5MSwiVktfT0VNXzIiLCIvIiwiT0VNXzIiXSxbOCwxLDYzLCJDYXBzTG9jayIsOCwiQ2Fwc0xvY2siLDIwLCJWS19DQVBJVEFMIixlLGVdLFs1OSwxLDY0LCJGMSIsNTksIkYxIiwxMTIsIlZLX0YxIixlLGVdLFs2MCwxLDY1LCJGMiIsNjAsIkYyIiwxMTMsIlZLX0YyIixlLGVdLFs2MSwxLDY2LCJGMyIsNjEsIkYzIiwxMTQsIlZLX0YzIixlLGVdLFs2MiwxLDY3LCJGNCIsNjIsIkY0IiwxMTUsIlZLX0Y0IixlLGVdLFs2MywxLDY4LCJGNSIsNjMsIkY1IiwxMTYsIlZLX0Y1IixlLGVdLFs2NCwxLDY5LCJGNiIsNjQsIkY2IiwxMTcsIlZLX0Y2IixlLGVdLFs2NSwxLDcwLCJGNyIsNjUsIkY3IiwxMTgsIlZLX0Y3IixlLGVdLFs2NiwxLDcxLCJGOCIsNjYsIkY4IiwxMTksIlZLX0Y4IixlLGVdLFs2NywxLDcyLCJGOSIsNjcsIkY5IiwxMjAsIlZLX0Y5IixlLGVdLFs2OCwxLDczLCJGMTAiLDY4LCJGMTAiLDEyMSwiVktfRjEwIixlLGVdLFs2OSwxLDc0LCJGMTEiLDY5LCJGMTEiLDEyMiwiVktfRjExIixlLGVdLFs3MCwxLDc1LCJGMTIiLDcwLCJGMTIiLDEyMywiVktfRjEyIixlLGVdLFswLDEsNzYsIlByaW50U2NyZWVuIiwwLGUsMCxlLGUsZV0sWzc5LDEsNzcsIlNjcm9sbExvY2siLDc5LCJTY3JvbGxMb2NrIiwxNDUsIlZLX1NDUk9MTCIsZSxlXSxbNywxLDc4LCJQYXVzZSIsNywiUGF1c2VCcmVhayIsMTksIlZLX1BBVVNFIixlLGVdLFsxOSwxLDc5LCJJbnNlcnQiLDE5LCJJbnNlcnQiLDQ1LCJWS19JTlNFUlQiLGUsZV0sWzE0LDEsODAsIkhvbWUiLDE0LCJIb21lIiwzNiwiVktfSE9NRSIsZSxlXSxbMTEsMSw4MSwiUGFnZVVwIiwxMSwiUGFnZVVwIiwzMywiVktfUFJJT1IiLGUsZV0sWzIwLDEsODIsIkRlbGV0ZSIsMjAsIkRlbGV0ZSIsNDYsIlZLX0RFTEVURSIsZSxlXSxbMTMsMSw4MywiRW5kIiwxMywiRW5kIiwzNSwiVktfRU5EIixlLGVdLFsxMiwxLDg0LCJQYWdlRG93biIsMTIsIlBhZ2VEb3duIiwzNCwiVktfTkVYVCIsZSxlXSxbMTcsMSw4NSwiQXJyb3dSaWdodCIsMTcsIlJpZ2h0QXJyb3ciLDM5LCJWS19SSUdIVCIsIlJpZ2h0IixlXSxbMTUsMSw4NiwiQXJyb3dMZWZ0IiwxNSwiTGVmdEFycm93IiwzNywiVktfTEVGVCIsIkxlZnQiLGVdLFsxOCwxLDg3LCJBcnJvd0Rvd24iLDE4LCJEb3duQXJyb3ciLDQwLCJWS19ET1dOIiwiRG93biIsZV0sWzE2LDEsODgsIkFycm93VXAiLDE2LCJVcEFycm93IiwzOCwiVktfVVAiLCJVcCIsZV0sWzc4LDEsODksIk51bUxvY2siLDc4LCJOdW1Mb2NrIiwxNDQsIlZLX05VTUxPQ0siLGUsZV0sWzEwOCwxLDkwLCJOdW1wYWREaXZpZGUiLDEwOCwiTnVtUGFkX0RpdmlkZSIsMTExLCJWS19ESVZJREUiLGUsZV0sWzEwMywxLDkxLCJOdW1wYWRNdWx0aXBseSIsMTAzLCJOdW1QYWRfTXVsdGlwbHkiLDEwNiwiVktfTVVMVElQTFkiLGUsZV0sWzEwNiwxLDkyLCJOdW1wYWRTdWJ0cmFjdCIsMTA2LCJOdW1QYWRfU3VidHJhY3QiLDEwOSwiVktfU1VCVFJBQ1QiLGUsZV0sWzEwNCwxLDkzLCJOdW1wYWRBZGQiLDEwNCwiTnVtUGFkX0FkZCIsMTA3LCJWS19BREQiLGUsZV0sWzMsMSw5NCwiTnVtcGFkRW50ZXIiLDMsZSwwLGUsZSxlXSxbOTQsMSw5NSwiTnVtcGFkMSIsOTQsIk51bVBhZDEiLDk3LCJWS19OVU1QQUQxIixlLGVdLFs5NSwxLDk2LCJOdW1wYWQyIiw5NSwiTnVtUGFkMiIsOTgsIlZLX05VTVBBRDIiLGUsZV0sWzk2LDEsOTcsIk51bXBhZDMiLDk2LCJOdW1QYWQzIiw5OSwiVktfTlVNUEFEMyIsZSxlXSxbOTcsMSw5OCwiTnVtcGFkNCIsOTcsIk51bVBhZDQiLDEwMCwiVktfTlVNUEFENCIsZSxlXSxbOTgsMSw5OSwiTnVtcGFkNSIsOTgsIk51bVBhZDUiLDEwMSwiVktfTlVNUEFENSIsZSxlXSxbOTksMSwxMDAsIk51bXBhZDYiLDk5LCJOdW1QYWQ2IiwxMDIsIlZLX05VTVBBRDYiLGUsZV0sWzEwMCwxLDEwMSwiTnVtcGFkNyIsMTAwLCJOdW1QYWQ3IiwxMDMsIlZLX05VTVBBRDciLGUsZV0sWzEwMSwxLDEwMiwiTnVtcGFkOCIsMTAxLCJOdW1QYWQ4IiwxMDQsIlZLX05VTVBBRDgiLGUsZV0sWzEwMiwxLDEwMywiTnVtcGFkOSIsMTAyLCJOdW1QYWQ5IiwxMDUsIlZLX05VTVBBRDkiLGUsZV0sWzkzLDEsMTA0LCJOdW1wYWQwIiw5MywiTnVtUGFkMCIsOTYsIlZLX05VTVBBRDAiLGUsZV0sWzEwNywxLDEwNSwiTnVtcGFkRGVjaW1hbCIsMTA3LCJOdW1QYWRfRGVjaW1hbCIsMTEwLCJWS19ERUNJTUFMIixlLGVdLFs5MiwwLDEwNiwiSW50bEJhY2tzbGFzaCIsOTIsIk9FTV8xMDIiLDIyNiwiVktfT0VNXzEwMiIsZSxlXSxbNTgsMSwxMDcsIkNvbnRleHRNZW51Iiw1OCwiQ29udGV4dE1lbnUiLDkzLGUsZSxlXSxbMCwxLDEwOCwiUG93ZXIiLDAsZSwwLGUsZSxlXSxbMCwxLDEwOSwiTnVtcGFkRXF1YWwiLDAsZSwwLGUsZSxlXSxbNzEsMSwxMTAsIkYxMyIsNzEsIkYxMyIsMTI0LCJWS19GMTMiLGUsZV0sWzcyLDEsMTExLCJGMTQiLDcyLCJGMTQiLDEyNSwiVktfRjE0IixlLGVdLFs3MywxLDExMiwiRjE1Iiw3MywiRjE1IiwxMjYsIlZLX0YxNSIsZSxlXSxbNzQsMSwxMTMsIkYxNiIsNzQsIkYxNiIsMTI3LCJWS19GMTYiLGUsZV0sWzc1LDEsMTE0LCJGMTciLDc1LCJGMTciLDEyOCwiVktfRjE3IixlLGVdLFs3NiwxLDExNSwiRjE4Iiw3NiwiRjE4IiwxMjksIlZLX0YxOCIsZSxlXSxbNzcsMSwxMTYsIkYxOSIsNzcsIkYxOSIsMTMwLCJWS19GMTkiLGUsZV0sWzAsMSwxMTcsIkYyMCIsMCxlLDAsIlZLX0YyMCIsZSxlXSxbMCwxLDExOCwiRjIxIiwwLGUsMCwiVktfRjIxIixlLGVdLFswLDEsMTE5LCJGMjIiLDAsZSwwLCJWS19GMjIiLGUsZV0sWzAsMSwxMjAsIkYyMyIsMCxlLDAsIlZLX0YyMyIsZSxlXSxbMCwxLDEyMSwiRjI0IiwwLGUsMCwiVktfRjI0IixlLGVdLFswLDEsMTIyLCJPcGVuIiwwLGUsMCxlLGUsZV0sWzAsMSwxMjMsIkhlbHAiLDAsZSwwLGUsZSxlXSxbMCwxLDEyNCwiU2VsZWN0IiwwLGUsMCxlLGUsZV0sWzAsMSwxMjUsIkFnYWluIiwwLGUsMCxlLGUsZV0sWzAsMSwxMjYsIlVuZG8iLDAsZSwwLGUsZSxlXSxbMCwxLDEyNywiQ3V0IiwwLGUsMCxlLGUsZV0sWzAsMSwxMjgsIkNvcHkiLDAsZSwwLGUsZSxlXSxbMCwxLDEyOSwiUGFzdGUiLDAsZSwwLGUsZSxlXSxbMCwxLDEzMCwiRmluZCIsMCxlLDAsZSxlLGVdLFswLDEsMTMxLCJBdWRpb1ZvbHVtZU11dGUiLDExMiwiQXVkaW9Wb2x1bWVNdXRlIiwxNzMsIlZLX1ZPTFVNRV9NVVRFIixlLGVdLFswLDEsMTMyLCJBdWRpb1ZvbHVtZVVwIiwxMTMsIkF1ZGlvVm9sdW1lVXAiLDE3NSwiVktfVk9MVU1FX1VQIixlLGVdLFswLDEsMTMzLCJBdWRpb1ZvbHVtZURvd24iLDExNCwiQXVkaW9Wb2x1bWVEb3duIiwxNzQsIlZLX1ZPTFVNRV9ET1dOIixlLGVdLFsxMDUsMSwxMzQsIk51bXBhZENvbW1hIiwxMDUsIk51bVBhZF9TZXBhcmF0b3IiLDEwOCwiVktfU0VQQVJBVE9SIixlLGVdLFsxMTAsMCwxMzUsIkludGxSbyIsMTEwLCJBQk5UX0MxIiwxOTMsIlZLX0FCTlRfQzEiLGUsZV0sWzAsMSwxMzYsIkthbmFNb2RlIiwwLGUsMCxlLGUsZV0sWzAsMCwxMzcsIkludGxZZW4iLDAsZSwwLGUsZSxlXSxbMCwxLDEzOCwiQ29udmVydCIsMCxlLDAsZSxlLGVdLFswLDEsMTM5LCJOb25Db252ZXJ0IiwwLGUsMCxlLGUsZV0sWzAsMSwxNDAsIkxhbmcxIiwwLGUsMCxlLGUsZV0sWzAsMSwxNDEsIkxhbmcyIiwwLGUsMCxlLGUsZV0sWzAsMSwxNDIsIkxhbmczIiwwLGUsMCxlLGUsZV0sWzAsMSwxNDMsIkxhbmc0IiwwLGUsMCxlLGUsZV0sWzAsMSwxNDQsIkxhbmc1IiwwLGUsMCxlLGUsZV0sWzAsMSwxNDUsIkFib3J0IiwwLGUsMCxlLGUsZV0sWzAsMSwxNDYsIlByb3BzIiwwLGUsMCxlLGUsZV0sWzAsMSwxNDcsIk51bXBhZFBhcmVuTGVmdCIsMCxlLDAsZSxlLGVdLFswLDEsMTQ4LCJOdW1wYWRQYXJlblJpZ2h0IiwwLGUsMCxlLGUsZV0sWzAsMSwxNDksIk51bXBhZEJhY2tzcGFjZSIsMCxlLDAsZSxlLGVdLFswLDEsMTUwLCJOdW1wYWRNZW1vcnlTdG9yZSIsMCxlLDAsZSxlLGVdLFswLDEsMTUxLCJOdW1wYWRNZW1vcnlSZWNhbGwiLDAsZSwwLGUsZSxlXSxbMCwxLDE1MiwiTnVtcGFkTWVtb3J5Q2xlYXIiLDAsZSwwLGUsZSxlXSxbMCwxLDE1MywiTnVtcGFkTWVtb3J5QWRkIiwwLGUsMCxlLGUsZV0sWzAsMSwxNTQsIk51bXBhZE1lbW9yeVN1YnRyYWN0IiwwLGUsMCxlLGUsZV0sWzAsMSwxNTUsIk51bXBhZENsZWFyIiwxMjYsIkNsZWFyIiwxMiwiVktfQ0xFQVIiLGUsZV0sWzAsMSwxNTYsIk51bXBhZENsZWFyRW50cnkiLDAsZSwwLGUsZSxlXSxbNSwxLDAsZSw1LCJDdHJsIiwxNywiVktfQ09OVFJPTCIsZSxlXSxbNCwxLDAsZSw0LCJTaGlmdCIsMTYsIlZLX1NISUZUIixlLGVdLFs2LDEsMCxlLDYsIkFsdCIsMTgsIlZLX01FTlUiLGUsZV0sWzU3LDEsMCxlLDU3LCJNZXRhIiwwLCJWS19DT01NQU5EIixlLGVdLFs1LDEsMTU3LCJDb250cm9sTGVmdCIsNSxlLDAsIlZLX0xDT05UUk9MIixlLGVdLFs0LDEsMTU4LCJTaGlmdExlZnQiLDQsZSwwLCJWS19MU0hJRlQiLGUsZV0sWzYsMSwxNTksIkFsdExlZnQiLDYsZSwwLCJWS19MTUVOVSIsZSxlXSxbNTcsMSwxNjAsIk1ldGFMZWZ0Iiw1NyxlLDAsIlZLX0xXSU4iLGUsZV0sWzUsMSwxNjEsIkNvbnRyb2xSaWdodCIsNSxlLDAsIlZLX1JDT05UUk9MIixlLGVdLFs0LDEsMTYyLCJTaGlmdFJpZ2h0Iiw0LGUsMCwiVktfUlNISUZUIixlLGVdLFs2LDEsMTYzLCJBbHRSaWdodCIsNixlLDAsIlZLX1JNRU5VIixlLGVdLFs1NywxLDE2NCwiTWV0YVJpZ2h0Iiw1NyxlLDAsIlZLX1JXSU4iLGUsZV0sWzAsMSwxNjUsIkJyaWdodG5lc3NVcCIsMCxlLDAsZSxlLGVdLFswLDEsMTY2LCJCcmlnaHRuZXNzRG93biIsMCxlLDAsZSxlLGVdLFswLDEsMTY3LCJNZWRpYVBsYXkiLDAsZSwwLGUsZSxlXSxbMCwxLDE2OCwiTWVkaWFSZWNvcmQiLDAsZSwwLGUsZSxlXSxbMCwxLDE2OSwiTWVkaWFGYXN0Rm9yd2FyZCIsMCxlLDAsZSxlLGVdLFswLDEsMTcwLCJNZWRpYVJld2luZCIsMCxlLDAsZSxlLGVdLFsxMTQsMSwxNzEsIk1lZGlhVHJhY2tOZXh0IiwxMTksIk1lZGlhVHJhY2tOZXh0IiwxNzYsIlZLX01FRElBX05FWFRfVFJBQ0siLGUsZV0sWzExNSwxLDE3MiwiTWVkaWFUcmFja1ByZXZpb3VzIiwxMjAsIk1lZGlhVHJhY2tQcmV2aW91cyIsMTc3LCJWS19NRURJQV9QUkVWX1RSQUNLIixlLGVdLFsxMTYsMSwxNzMsIk1lZGlhU3RvcCIsMTIxLCJNZWRpYVN0b3AiLDE3OCwiVktfTUVESUFfU1RPUCIsZSxlXSxbMCwxLDE3NCwiRWplY3QiLDAsZSwwLGUsZSxlXSxbMTE3LDEsMTc1LCJNZWRpYVBsYXlQYXVzZSIsMTIyLCJNZWRpYVBsYXlQYXVzZSIsMTc5LCJWS19NRURJQV9QTEFZX1BBVVNFIixlLGVdLFswLDEsMTc2LCJNZWRpYVNlbGVjdCIsMTIzLCJMYXVuY2hNZWRpYVBsYXllciIsMTgxLCJWS19NRURJQV9MQVVOQ0hfTUVESUFfU0VMRUNUIixlLGVdLFswLDEsMTc3LCJMYXVuY2hNYWlsIiwxMjQsIkxhdW5jaE1haWwiLDE4MCwiVktfTUVESUFfTEFVTkNIX01BSUwiLGUsZV0sWzAsMSwxNzgsIkxhdW5jaEFwcDIiLDEyNSwiTGF1bmNoQXBwMiIsMTgzLCJWS19NRURJQV9MQVVOQ0hfQVBQMiIsZSxlXSxbMCwxLDE3OSwiTGF1bmNoQXBwMSIsMCxlLDAsIlZLX01FRElBX0xBVU5DSF9BUFAxIixlLGVdLFswLDEsMTgwLCJTZWxlY3RUYXNrIiwwLGUsMCxlLGUsZV0sWzAsMSwxODEsIkxhdW5jaFNjcmVlblNhdmVyIiwwLGUsMCxlLGUsZV0sWzAsMSwxODIsIkJyb3dzZXJTZWFyY2giLDExNSwiQnJvd3NlclNlYXJjaCIsMTcwLCJWS19CUk9XU0VSX1NFQVJDSCIsZSxlXSxbMCwxLDE4MywiQnJvd3NlckhvbWUiLDExNiwiQnJvd3NlckhvbWUiLDE3MiwiVktfQlJPV1NFUl9IT01FIixlLGVdLFsxMTIsMSwxODQsIkJyb3dzZXJCYWNrIiwxMTcsIkJyb3dzZXJCYWNrIiwxNjYsIlZLX0JST1dTRVJfQkFDSyIsZSxlXSxbMTEzLDEsMTg1LCJCcm93c2VyRm9yd2FyZCIsMTE4LCJCcm93c2VyRm9yd2FyZCIsMTY3LCJWS19CUk9XU0VSX0ZPUldBUkQiLGUsZV0sWzAsMSwxODYsIkJyb3dzZXJTdG9wIiwwLGUsMCwiVktfQlJPV1NFUl9TVE9QIixlLGVdLFswLDEsMTg3LCJCcm93c2VyUmVmcmVzaCIsMCxlLDAsIlZLX0JST1dTRVJfUkVGUkVTSCIsZSxlXSxbMCwxLDE4OCwiQnJvd3NlckZhdm9yaXRlcyIsMCxlLDAsIlZLX0JST1dTRVJfRkFWT1JJVEVTIixlLGVdLFswLDEsMTg5LCJab29tVG9nZ2xlIiwwLGUsMCxlLGUsZV0sWzAsMSwxOTAsIk1haWxSZXBseSIsMCxlLDAsZSxlLGVdLFswLDEsMTkxLCJNYWlsRm9yd2FyZCIsMCxlLDAsZSxlLGVdLFswLDEsMTkyLCJNYWlsU2VuZCIsMCxlLDAsZSxlLGVdLFsxMDksMSwwLGUsMTA5LCJLZXlJbkNvbXBvc2l0aW9uIiwyMjksZSxlLGVdLFsxMTEsMSwwLGUsMTExLCJBQk5UX0MyIiwxOTQsIlZLX0FCTlRfQzIiLGUsZV0sWzkxLDEsMCxlLDkxLCJPRU1fOCIsMjIzLCJWS19PRU1fOCIsZSxlXSxbMCwxLDAsZSwwLGUsMCwiVktfS0FOQSIsZSxlXSxbMCwxLDAsZSwwLGUsMCwiVktfSEFOR1VMIixlLGVdLFswLDEsMCxlLDAsZSwwLCJWS19KVU5KQSIsZSxlXSxbMCwxLDAsZSwwLGUsMCwiVktfRklOQUwiLGUsZV0sWzAsMSwwLGUsMCxlLDAsIlZLX0hBTkpBIixlLGVdLFswLDEsMCxlLDAsZSwwLCJWS19LQU5KSSIsZSxlXSxbMCwxLDAsZSwwLGUsMCwiVktfQ09OVkVSVCIsZSxlXSxbMCwxLDAsZSwwLGUsMCwiVktfTk9OQ09OVkVSVCIsZSxlXSxbMCwxLDAsZSwwLGUsMCwiVktfQUNDRVBUIixlLGVdLFswLDEsMCxlLDAsZSwwLCJWS19NT0RFQ0hBTkdFIixlLGVdLFswLDEsMCxlLDAsZSwwLCJWS19TRUxFQ1QiLGUsZV0sWzAsMSwwLGUsMCxlLDAsIlZLX1BSSU5UIixlLGVdLFswLDEsMCxlLDAsZSwwLCJWS19FWEVDVVRFIixlLGVdLFswLDEsMCxlLDAsZSwwLCJWS19TTkFQU0hPVCIsZSxlXSxbMCwxLDAsZSwwLGUsMCwiVktfSEVMUCIsZSxlXSxbMCwxLDAsZSwwLGUsMCwiVktfQVBQUyIsZSxlXSxbMCwxLDAsZSwwLGUsMCwiVktfUFJPQ0VTU0tFWSIsZSxlXSxbMCwxLDAsZSwwLGUsMCwiVktfUEFDS0VUIixlLGVdLFswLDEsMCxlLDAsZSwwLCJWS19EQkVfU0JDU0NIQVIiLGUsZV0sWzAsMSwwLGUsMCxlLDAsIlZLX0RCRV9EQkNTQ0hBUiIsZSxlXSxbMCwxLDAsZSwwLGUsMCwiVktfQVRUTiIsZSxlXSxbMCwxLDAsZSwwLGUsMCwiVktfQ1JTRUwiLGUsZV0sWzAsMSwwLGUsMCxlLDAsIlZLX0VYU0VMIixlLGVdLFswLDEsMCxlLDAsZSwwLCJWS19FUkVPRiIsZSxlXSxbMCwxLDAsZSwwLGUsMCwiVktfUExBWSIsZSxlXSxbMCwxLDAsZSwwLGUsMCwiVktfWk9PTSIsZSxlXSxbMCwxLDAsZSwwLGUsMCwiVktfTk9OQU1FIixlLGVdLFswLDEsMCxlLDAsZSwwLCJWS19QQTEiLGUsZV0sWzAsMSwwLGUsMCxlLDAsIlZLX09FTV9DTEVBUiIsZSxlXV0sbj1bXSxyPVtdO2Zvcihjb25zdCBlIG9mIHQpe2NvbnN0W3QsaSxvLGEscyxjLGwsdSxoLGZdPWU7aWYocltvXXx8KHJbb109ITAsRnRbYV09byxEdFthLnRvTG93ZXJDYXNlKCldPW8pLCFuW3NdKXtpZihuW3NdPSEwLCFjKXRocm93IG5ldyBFcnJvcihgU3RyaW5nIHJlcHJlc2VudGF0aW9uIG1pc3NpbmcgZm9yIGtleSBjb2RlICR7c30gYXJvdW5kIHNjYW4gY29kZSAke2F9YCk7TXQuZGVmaW5lKHMsYyksUHQuZGVmaW5lKHMsaHx8YyksUnQuZGVmaW5lKHMsZnx8aHx8Yyl9bCYmKFZ0W2xdPXMpfX0oKSxmdW5jdGlvbihlKXtlLnRvU3RyaW5nPWZ1bmN0aW9uKGUpe3JldHVybiBNdC5rZXlDb2RlVG9TdHIoZSl9LGUuZnJvbVN0cmluZz1mdW5jdGlvbihlKXtyZXR1cm4gTXQuc3RyVG9LZXlDb2RlKGUpfSxlLnRvVXNlclNldHRpbmdzVVM9ZnVuY3Rpb24oZSl7cmV0dXJuIFB0LmtleUNvZGVUb1N0cihlKX0sZS50b1VzZXJTZXR0aW5nc0dlbmVyYWw9ZnVuY3Rpb24oZSl7cmV0dXJuIFJ0LmtleUNvZGVUb1N0cihlKX0sZS5mcm9tVXNlclNldHRpbmdzPWZ1bmN0aW9uKGUpe3JldHVybiBQdC5zdHJUb0tleUNvZGUoZSl8fFJ0LnN0clRvS2V5Q29kZShlKX0sZS50b0VsZWN0cm9uQWNjZWxlcmF0b3I9ZnVuY3Rpb24oZSl7aWYoZT49OTMmJmU8PTEwOClyZXR1cm4gbnVsbDtzd2l0Y2goZSl7Y2FzZSAxNjpyZXR1cm4iVXAiO2Nhc2UgMTg6cmV0dXJuIkRvd24iO2Nhc2UgMTU6cmV0dXJuIkxlZnQiO2Nhc2UgMTc6cmV0dXJuIlJpZ2h0In1yZXR1cm4gTXQua2V5Q29kZVRvU3RyKGUpfX0oS3R8fChLdD17fSkpO2NsYXNzIFV0IGV4dGVuZHMgdHR7Y29uc3RydWN0b3IoZSx0LG4scil7c3VwZXIoZSx0LG4sciksdGhpcy5zZWxlY3Rpb25TdGFydExpbmVOdW1iZXI9ZSx0aGlzLnNlbGVjdGlvblN0YXJ0Q29sdW1uPXQsdGhpcy5wb3NpdGlvbkxpbmVOdW1iZXI9bix0aGlzLnBvc2l0aW9uQ29sdW1uPXJ9dG9TdHJpbmcoKXtyZXR1cm4iWyIrdGhpcy5zZWxlY3Rpb25TdGFydExpbmVOdW1iZXIrIiwiK3RoaXMuc2VsZWN0aW9uU3RhcnRDb2x1bW4rIiAtPiAiK3RoaXMucG9zaXRpb25MaW5lTnVtYmVyKyIsIit0aGlzLnBvc2l0aW9uQ29sdW1uKyJdIn1lcXVhbHNTZWxlY3Rpb24oZSl7cmV0dXJuIFV0LnNlbGVjdGlvbnNFcXVhbCh0aGlzLGUpfXN0YXRpYyBzZWxlY3Rpb25zRXF1YWwoZSx0KXtyZXR1cm4gZS5zZWxlY3Rpb25TdGFydExpbmVOdW1iZXI9PT10LnNlbGVjdGlvblN0YXJ0TGluZU51bWJlciYmZS5zZWxlY3Rpb25TdGFydENvbHVtbj09PXQuc2VsZWN0aW9uU3RhcnRDb2x1bW4mJmUucG9zaXRpb25MaW5lTnVtYmVyPT09dC5wb3NpdGlvbkxpbmVOdW1iZXImJmUucG9zaXRpb25Db2x1bW49PT10LnBvc2l0aW9uQ29sdW1ufWdldERpcmVjdGlvbigpe3JldHVybiB0aGlzLnNlbGVjdGlvblN0YXJ0TGluZU51bWJlcj09PXRoaXMuc3RhcnRMaW5lTnVtYmVyJiZ0aGlzLnNlbGVjdGlvblN0YXJ0Q29sdW1uPT09dGhpcy5zdGFydENvbHVtbj8wOjF9c2V0RW5kUG9zaXRpb24oZSx0KXtyZXR1cm4gMD09PXRoaXMuZ2V0RGlyZWN0aW9uKCk/bmV3IFV0KHRoaXMuc3RhcnRMaW5lTnVtYmVyLHRoaXMuc3RhcnRDb2x1bW4sZSx0KTpuZXcgVXQoZSx0LHRoaXMuc3RhcnRMaW5lTnVtYmVyLHRoaXMuc3RhcnRDb2x1bW4pfWdldFBvc2l0aW9uKCl7cmV0dXJuIG5ldyBldCh0aGlzLnBvc2l0aW9uTGluZU51bWJlcix0aGlzLnBvc2l0aW9uQ29sdW1uKX1nZXRTZWxlY3Rpb25TdGFydCgpe3JldHVybiBuZXcgZXQodGhpcy5zZWxlY3Rpb25TdGFydExpbmVOdW1iZXIsdGhpcy5zZWxlY3Rpb25TdGFydENvbHVtbil9c2V0U3RhcnRQb3NpdGlvbihlLHQpe3JldHVybiAwPT09dGhpcy5nZXREaXJlY3Rpb24oKT9uZXcgVXQoZSx0LHRoaXMuZW5kTGluZU51bWJlcix0aGlzLmVuZENvbHVtbik6bmV3IFV0KHRoaXMuZW5kTGluZU51bWJlcix0aGlzLmVuZENvbHVtbixlLHQpfXN0YXRpYyBmcm9tUG9zaXRpb25zKGUsdD1lKXtyZXR1cm4gbmV3IFV0KGUubGluZU51bWJlcixlLmNvbHVtbix0LmxpbmVOdW1iZXIsdC5jb2x1bW4pfXN0YXRpYyBmcm9tUmFuZ2UoZSx0KXtyZXR1cm4gMD09PXQ/bmV3IFV0KGUuc3RhcnRMaW5lTnVtYmVyLGUuc3RhcnRDb2x1bW4sZS5lbmRMaW5lTnVtYmVyLGUuZW5kQ29sdW1uKTpuZXcgVXQoZS5lbmRMaW5lTnVtYmVyLGUuZW5kQ29sdW1uLGUuc3RhcnRMaW5lTnVtYmVyLGUuc3RhcnRDb2x1bW4pfXN0YXRpYyBsaWZ0U2VsZWN0aW9uKGUpe3JldHVybiBuZXcgVXQoZS5zZWxlY3Rpb25TdGFydExpbmVOdW1iZXIsZS5zZWxlY3Rpb25TdGFydENvbHVtbixlLnBvc2l0aW9uTGluZU51bWJlcixlLnBvc2l0aW9uQ29sdW1uKX1zdGF0aWMgc2VsZWN0aW9uc0FyckVxdWFsKGUsdCl7aWYoZSYmIXR8fCFlJiZ0KXJldHVybiExO2lmKCFlJiYhdClyZXR1cm4hMDtpZihlLmxlbmd0aCE9PXQubGVuZ3RoKXJldHVybiExO2ZvcihsZXQgbj0wLHI9ZS5sZW5ndGg7bjxyO24rKylpZighdGhpcy5zZWxlY3Rpb25zRXF1YWwoZVtuXSx0W25dKSlyZXR1cm4hMTtyZXR1cm4hMH1zdGF0aWMgaXNJU2VsZWN0aW9uKGUpe3JldHVybiBlJiYibnVtYmVyIj09dHlwZW9mIGUuc2VsZWN0aW9uU3RhcnRMaW5lTnVtYmVyJiYibnVtYmVyIj09dHlwZW9mIGUuc2VsZWN0aW9uU3RhcnRDb2x1bW4mJiJudW1iZXIiPT10eXBlb2YgZS5wb3NpdGlvbkxpbmVOdW1iZXImJiJudW1iZXIiPT10eXBlb2YgZS5wb3NpdGlvbkNvbHVtbn1zdGF0aWMgY3JlYXRlV2l0aERpcmVjdGlvbihlLHQsbixyLGkpe3JldHVybiAwPT09aT9uZXcgVXQoZSx0LG4scik6bmV3IFV0KG4scixlLHQpfX1jbGFzcyBCdHtjb25zdHJ1Y3RvcihlLHQsbil7dGhpcy5pZD1lLHRoaXMuZGVmaW5pdGlvbj10LHRoaXMuZGVzY3JpcHRpb249bixCdC5fYWxsQ29kaWNvbnMucHVzaCh0aGlzKX1nZXQgY2xhc3NOYW1lcygpe3JldHVybiJjb2RpY29uIGNvZGljb24tIit0aGlzLmlkfWdldCBjbGFzc05hbWVzQXJyYXkoKXtyZXR1cm5bImNvZGljb24iLCJjb2RpY29uLSIrdGhpcy5pZF19Z2V0IGNzc1NlbGVjdG9yKCl7cmV0dXJuIi5jb2RpY29uLmNvZGljb24tIit0aGlzLmlkfXN0YXRpYyBnZXRBbGwoKXtyZXR1cm4gQnQuX2FsbENvZGljb25zfX1CdC5fYWxsQ29kaWNvbnM9W10sQnQuYWRkPW5ldyBCdCgiYWRkIix7Zm9udENoYXJhY3RlcjoiXFxlYTYwIn0pLEJ0LnBsdXM9bmV3IEJ0KCJwbHVzIixCdC5hZGQuZGVmaW5pdGlvbiksQnQuZ2lzdE5ldz1uZXcgQnQoImdpc3QtbmV3IixCdC5hZGQuZGVmaW5pdGlvbiksQnQucmVwb0NyZWF0ZT1uZXcgQnQoInJlcG8tY3JlYXRlIixCdC5hZGQuZGVmaW5pdGlvbiksQnQubGlnaHRidWxiPW5ldyBCdCgibGlnaHRidWxiIix7Zm9udENoYXJhY3RlcjoiXFxlYTYxIn0pLEJ0LmxpZ2h0QnVsYj1uZXcgQnQoImxpZ2h0LWJ1bGIiLHtmb250Q2hhcmFjdGVyOiJcXGVhNjEifSksQnQucmVwbz1uZXcgQnQoInJlcG8iLHtmb250Q2hhcmFjdGVyOiJcXGVhNjIifSksQnQucmVwb0RlbGV0ZT1uZXcgQnQoInJlcG8tZGVsZXRlIix7Zm9udENoYXJhY3RlcjoiXFxlYTYyIn0pLEJ0Lmdpc3RGb3JrPW5ldyBCdCgiZ2lzdC1mb3JrIix7Zm9udENoYXJhY3RlcjoiXFxlYTYzIn0pLEJ0LnJlcG9Gb3JrZWQ9bmV3IEJ0KCJyZXBvLWZvcmtlZCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE2MyJ9KSxCdC5naXRQdWxsUmVxdWVzdD1uZXcgQnQoImdpdC1wdWxsLXJlcXVlc3QiLHtmb250Q2hhcmFjdGVyOiJcXGVhNjQifSksQnQuZ2l0UHVsbFJlcXVlc3RBYmFuZG9uZWQ9bmV3IEJ0KCJnaXQtcHVsbC1yZXF1ZXN0LWFiYW5kb25lZCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE2NCJ9KSxCdC5yZWNvcmRLZXlzPW5ldyBCdCgicmVjb3JkLWtleXMiLHtmb250Q2hhcmFjdGVyOiJcXGVhNjUifSksQnQua2V5Ym9hcmQ9bmV3IEJ0KCJrZXlib2FyZCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE2NSJ9KSxCdC50YWc9bmV3IEJ0KCJ0YWciLHtmb250Q2hhcmFjdGVyOiJcXGVhNjYifSksQnQudGFnQWRkPW5ldyBCdCgidGFnLWFkZCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE2NiJ9KSxCdC50YWdSZW1vdmU9bmV3IEJ0KCJ0YWctcmVtb3ZlIix7Zm9udENoYXJhY3RlcjoiXFxlYTY2In0pLEJ0LnBlcnNvbj1uZXcgQnQoInBlcnNvbiIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE2NyJ9KSxCdC5wZXJzb25Gb2xsb3c9bmV3IEJ0KCJwZXJzb24tZm9sbG93Iix7Zm9udENoYXJhY3RlcjoiXFxlYTY3In0pLEJ0LnBlcnNvbk91dGxpbmU9bmV3IEJ0KCJwZXJzb24tb3V0bGluZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE2NyJ9KSxCdC5wZXJzb25GaWxsZWQ9bmV3IEJ0KCJwZXJzb24tZmlsbGVkIix7Zm9udENoYXJhY3RlcjoiXFxlYTY3In0pLEJ0LmdpdEJyYW5jaD1uZXcgQnQoImdpdC1icmFuY2giLHtmb250Q2hhcmFjdGVyOiJcXGVhNjgifSksQnQuZ2l0QnJhbmNoQ3JlYXRlPW5ldyBCdCgiZ2l0LWJyYW5jaC1jcmVhdGUiLHtmb250Q2hhcmFjdGVyOiJcXGVhNjgifSksQnQuZ2l0QnJhbmNoRGVsZXRlPW5ldyBCdCgiZ2l0LWJyYW5jaC1kZWxldGUiLHtmb250Q2hhcmFjdGVyOiJcXGVhNjgifSksQnQuc291cmNlQ29udHJvbD1uZXcgQnQoInNvdXJjZS1jb250cm9sIix7Zm9udENoYXJhY3RlcjoiXFxlYTY4In0pLEJ0Lm1pcnJvcj1uZXcgQnQoIm1pcnJvciIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE2OSJ9KSxCdC5taXJyb3JQdWJsaWM9bmV3IEJ0KCJtaXJyb3ItcHVibGljIix7Zm9udENoYXJhY3RlcjoiXFxlYTY5In0pLEJ0LnN0YXI9bmV3IEJ0KCJzdGFyIix7Zm9udENoYXJhY3RlcjoiXFxlYTZhIn0pLEJ0LnN0YXJBZGQ9bmV3IEJ0KCJzdGFyLWFkZCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE2YSJ9KSxCdC5zdGFyRGVsZXRlPW5ldyBCdCgic3Rhci1kZWxldGUiLHtmb250Q2hhcmFjdGVyOiJcXGVhNmEifSksQnQuc3RhckVtcHR5PW5ldyBCdCgic3Rhci1lbXB0eSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE2YSJ9KSxCdC5jb21tZW50PW5ldyBCdCgiY29tbWVudCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE2YiJ9KSxCdC5jb21tZW50QWRkPW5ldyBCdCgiY29tbWVudC1hZGQiLHtmb250Q2hhcmFjdGVyOiJcXGVhNmIifSksQnQuYWxlcnQ9bmV3IEJ0KCJhbGVydCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE2YyJ9KSxCdC53YXJuaW5nPW5ldyBCdCgid2FybmluZyIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE2YyJ9KSxCdC5zZWFyY2g9bmV3IEJ0KCJzZWFyY2giLHtmb250Q2hhcmFjdGVyOiJcXGVhNmQifSksQnQuc2VhcmNoU2F2ZT1uZXcgQnQoInNlYXJjaC1zYXZlIix7Zm9udENoYXJhY3RlcjoiXFxlYTZkIn0pLEJ0LmxvZ091dD1uZXcgQnQoImxvZy1vdXQiLHtmb250Q2hhcmFjdGVyOiJcXGVhNmUifSksQnQuc2lnbk91dD1uZXcgQnQoInNpZ24tb3V0Iix7Zm9udENoYXJhY3RlcjoiXFxlYTZlIn0pLEJ0LmxvZ0luPW5ldyBCdCgibG9nLWluIix7Zm9udENoYXJhY3RlcjoiXFxlYTZmIn0pLEJ0LnNpZ25Jbj1uZXcgQnQoInNpZ24taW4iLHtmb250Q2hhcmFjdGVyOiJcXGVhNmYifSksQnQuZXllPW5ldyBCdCgiZXllIix7Zm9udENoYXJhY3RlcjoiXFxlYTcwIn0pLEJ0LmV5ZVVud2F0Y2g9bmV3IEJ0KCJleWUtdW53YXRjaCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE3MCJ9KSxCdC5leWVXYXRjaD1uZXcgQnQoImV5ZS13YXRjaCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE3MCJ9KSxCdC5jaXJjbGVGaWxsZWQ9bmV3IEJ0KCJjaXJjbGUtZmlsbGVkIix7Zm9udENoYXJhY3RlcjoiXFxlYTcxIn0pLEJ0LnByaW1pdGl2ZURvdD1uZXcgQnQoInByaW1pdGl2ZS1kb3QiLHtmb250Q2hhcmFjdGVyOiJcXGVhNzEifSksQnQuY2xvc2VEaXJ0eT1uZXcgQnQoImNsb3NlLWRpcnR5Iix7Zm9udENoYXJhY3RlcjoiXFxlYTcxIn0pLEJ0LmRlYnVnQnJlYWtwb2ludD1uZXcgQnQoImRlYnVnLWJyZWFrcG9pbnQiLHtmb250Q2hhcmFjdGVyOiJcXGVhNzEifSksQnQuZGVidWdCcmVha3BvaW50RGlzYWJsZWQ9bmV3IEJ0KCJkZWJ1Zy1icmVha3BvaW50LWRpc2FibGVkIix7Zm9udENoYXJhY3RlcjoiXFxlYTcxIn0pLEJ0LmRlYnVnSGludD1uZXcgQnQoImRlYnVnLWhpbnQiLHtmb250Q2hhcmFjdGVyOiJcXGVhNzEifSksQnQucHJpbWl0aXZlU3F1YXJlPW5ldyBCdCgicHJpbWl0aXZlLXNxdWFyZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE3MiJ9KSxCdC5lZGl0PW5ldyBCdCgiZWRpdCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE3MyJ9KSxCdC5wZW5jaWw9bmV3IEJ0KCJwZW5jaWwiLHtmb250Q2hhcmFjdGVyOiJcXGVhNzMifSksQnQuaW5mbz1uZXcgQnQoImluZm8iLHtmb250Q2hhcmFjdGVyOiJcXGVhNzQifSksQnQuaXNzdWVPcGVuZWQ9bmV3IEJ0KCJpc3N1ZS1vcGVuZWQiLHtmb250Q2hhcmFjdGVyOiJcXGVhNzQifSksQnQuZ2lzdFByaXZhdGU9bmV3IEJ0KCJnaXN0LXByaXZhdGUiLHtmb250Q2hhcmFjdGVyOiJcXGVhNzUifSksQnQuZ2l0Rm9ya1ByaXZhdGU9bmV3IEJ0KCJnaXQtZm9yay1wcml2YXRlIix7Zm9udENoYXJhY3RlcjoiXFxlYTc1In0pLEJ0LmxvY2s9bmV3IEJ0KCJsb2NrIix7Zm9udENoYXJhY3RlcjoiXFxlYTc1In0pLEJ0Lm1pcnJvclByaXZhdGU9bmV3IEJ0KCJtaXJyb3ItcHJpdmF0ZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE3NSJ9KSxCdC5jbG9zZT1uZXcgQnQoImNsb3NlIix7Zm9udENoYXJhY3RlcjoiXFxlYTc2In0pLEJ0LnJlbW92ZUNsb3NlPW5ldyBCdCgicmVtb3ZlLWNsb3NlIix7Zm9udENoYXJhY3RlcjoiXFxlYTc2In0pLEJ0Lng9bmV3IEJ0KCJ4Iix7Zm9udENoYXJhY3RlcjoiXFxlYTc2In0pLEJ0LnJlcG9TeW5jPW5ldyBCdCgicmVwby1zeW5jIix7Zm9udENoYXJhY3RlcjoiXFxlYTc3In0pLEJ0LnN5bmM9bmV3IEJ0KCJzeW5jIix7Zm9udENoYXJhY3RlcjoiXFxlYTc3In0pLEJ0LmNsb25lPW5ldyBCdCgiY2xvbmUiLHtmb250Q2hhcmFjdGVyOiJcXGVhNzgifSksQnQuZGVza3RvcERvd25sb2FkPW5ldyBCdCgiZGVza3RvcC1kb3dubG9hZCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE3OCJ9KSxCdC5iZWFrZXI9bmV3IEJ0KCJiZWFrZXIiLHtmb250Q2hhcmFjdGVyOiJcXGVhNzkifSksQnQubWljcm9zY29wZT1uZXcgQnQoIm1pY3Jvc2NvcGUiLHtmb250Q2hhcmFjdGVyOiJcXGVhNzkifSksQnQudm09bmV3IEJ0KCJ2bSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE3YSJ9KSxCdC5kZXZpY2VEZXNrdG9wPW5ldyBCdCgiZGV2aWNlLWRlc2t0b3AiLHtmb250Q2hhcmFjdGVyOiJcXGVhN2EifSksQnQuZmlsZT1uZXcgQnQoImZpbGUiLHtmb250Q2hhcmFjdGVyOiJcXGVhN2IifSksQnQuZmlsZVRleHQ9bmV3IEJ0KCJmaWxlLXRleHQiLHtmb250Q2hhcmFjdGVyOiJcXGVhN2IifSksQnQubW9yZT1uZXcgQnQoIm1vcmUiLHtmb250Q2hhcmFjdGVyOiJcXGVhN2MifSksQnQuZWxsaXBzaXM9bmV3IEJ0KCJlbGxpcHNpcyIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE3YyJ9KSxCdC5rZWJhYkhvcml6b250YWw9bmV3IEJ0KCJrZWJhYi1ob3Jpem9udGFsIix7Zm9udENoYXJhY3RlcjoiXFxlYTdjIn0pLEJ0Lm1haWxSZXBseT1uZXcgQnQoIm1haWwtcmVwbHkiLHtmb250Q2hhcmFjdGVyOiJcXGVhN2QifSksQnQucmVwbHk9bmV3IEJ0KCJyZXBseSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE3ZCJ9KSxCdC5vcmdhbml6YXRpb249bmV3IEJ0KCJvcmdhbml6YXRpb24iLHtmb250Q2hhcmFjdGVyOiJcXGVhN2UifSksQnQub3JnYW5pemF0aW9uRmlsbGVkPW5ldyBCdCgib3JnYW5pemF0aW9uLWZpbGxlZCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE3ZSJ9KSxCdC5vcmdhbml6YXRpb25PdXRsaW5lPW5ldyBCdCgib3JnYW5pemF0aW9uLW91dGxpbmUiLHtmb250Q2hhcmFjdGVyOiJcXGVhN2UifSksQnQubmV3RmlsZT1uZXcgQnQoIm5ldy1maWxlIix7Zm9udENoYXJhY3RlcjoiXFxlYTdmIn0pLEJ0LmZpbGVBZGQ9bmV3IEJ0KCJmaWxlLWFkZCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE3ZiJ9KSxCdC5uZXdGb2xkZXI9bmV3IEJ0KCJuZXctZm9sZGVyIix7Zm9udENoYXJhY3RlcjoiXFxlYTgwIn0pLEJ0LmZpbGVEaXJlY3RvcnlDcmVhdGU9bmV3IEJ0KCJmaWxlLWRpcmVjdG9yeS1jcmVhdGUiLHtmb250Q2hhcmFjdGVyOiJcXGVhODAifSksQnQudHJhc2g9bmV3IEJ0KCJ0cmFzaCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE4MSJ9KSxCdC50cmFzaGNhbj1uZXcgQnQoInRyYXNoY2FuIix7Zm9udENoYXJhY3RlcjoiXFxlYTgxIn0pLEJ0Lmhpc3Rvcnk9bmV3IEJ0KCJoaXN0b3J5Iix7Zm9udENoYXJhY3RlcjoiXFxlYTgyIn0pLEJ0LmNsb2NrPW5ldyBCdCgiY2xvY2siLHtmb250Q2hhcmFjdGVyOiJcXGVhODIifSksQnQuZm9sZGVyPW5ldyBCdCgiZm9sZGVyIix7Zm9udENoYXJhY3RlcjoiXFxlYTgzIn0pLEJ0LmZpbGVEaXJlY3Rvcnk9bmV3IEJ0KCJmaWxlLWRpcmVjdG9yeSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE4MyJ9KSxCdC5zeW1ib2xGb2xkZXI9bmV3IEJ0KCJzeW1ib2wtZm9sZGVyIix7Zm9udENoYXJhY3RlcjoiXFxlYTgzIn0pLEJ0LmxvZ29HaXRodWI9bmV3IEJ0KCJsb2dvLWdpdGh1YiIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE4NCJ9KSxCdC5tYXJrR2l0aHViPW5ldyBCdCgibWFyay1naXRodWIiLHtmb250Q2hhcmFjdGVyOiJcXGVhODQifSksQnQuZ2l0aHViPW5ldyBCdCgiZ2l0aHViIix7Zm9udENoYXJhY3RlcjoiXFxlYTg0In0pLEJ0LnRlcm1pbmFsPW5ldyBCdCgidGVybWluYWwiLHtmb250Q2hhcmFjdGVyOiJcXGVhODUifSksQnQuY29uc29sZT1uZXcgQnQoImNvbnNvbGUiLHtmb250Q2hhcmFjdGVyOiJcXGVhODUifSksQnQucmVwbD1uZXcgQnQoInJlcGwiLHtmb250Q2hhcmFjdGVyOiJcXGVhODUifSksQnQuemFwPW5ldyBCdCgiemFwIix7Zm9udENoYXJhY3RlcjoiXFxlYTg2In0pLEJ0LnN5bWJvbEV2ZW50PW5ldyBCdCgic3ltYm9sLWV2ZW50Iix7Zm9udENoYXJhY3RlcjoiXFxlYTg2In0pLEJ0LmVycm9yPW5ldyBCdCgiZXJyb3IiLHtmb250Q2hhcmFjdGVyOiJcXGVhODcifSksQnQuc3RvcD1uZXcgQnQoInN0b3AiLHtmb250Q2hhcmFjdGVyOiJcXGVhODcifSksQnQudmFyaWFibGU9bmV3IEJ0KCJ2YXJpYWJsZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE4OCJ9KSxCdC5zeW1ib2xWYXJpYWJsZT1uZXcgQnQoInN5bWJvbC12YXJpYWJsZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE4OCJ9KSxCdC5hcnJheT1uZXcgQnQoImFycmF5Iix7Zm9udENoYXJhY3RlcjoiXFxlYThhIn0pLEJ0LnN5bWJvbEFycmF5PW5ldyBCdCgic3ltYm9sLWFycmF5Iix7Zm9udENoYXJhY3RlcjoiXFxlYThhIn0pLEJ0LnN5bWJvbE1vZHVsZT1uZXcgQnQoInN5bWJvbC1tb2R1bGUiLHtmb250Q2hhcmFjdGVyOiJcXGVhOGIifSksQnQuc3ltYm9sUGFja2FnZT1uZXcgQnQoInN5bWJvbC1wYWNrYWdlIix7Zm9udENoYXJhY3RlcjoiXFxlYThiIn0pLEJ0LnN5bWJvbE5hbWVzcGFjZT1uZXcgQnQoInN5bWJvbC1uYW1lc3BhY2UiLHtmb250Q2hhcmFjdGVyOiJcXGVhOGIifSksQnQuc3ltYm9sT2JqZWN0PW5ldyBCdCgic3ltYm9sLW9iamVjdCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE4YiJ9KSxCdC5zeW1ib2xNZXRob2Q9bmV3IEJ0KCJzeW1ib2wtbWV0aG9kIix7Zm9udENoYXJhY3RlcjoiXFxlYThjIn0pLEJ0LnN5bWJvbEZ1bmN0aW9uPW5ldyBCdCgic3ltYm9sLWZ1bmN0aW9uIix7Zm9udENoYXJhY3RlcjoiXFxlYThjIn0pLEJ0LnN5bWJvbENvbnN0cnVjdG9yPW5ldyBCdCgic3ltYm9sLWNvbnN0cnVjdG9yIix7Zm9udENoYXJhY3RlcjoiXFxlYThjIn0pLEJ0LnN5bWJvbEJvb2xlYW49bmV3IEJ0KCJzeW1ib2wtYm9vbGVhbiIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE4ZiJ9KSxCdC5zeW1ib2xOdWxsPW5ldyBCdCgic3ltYm9sLW51bGwiLHtmb250Q2hhcmFjdGVyOiJcXGVhOGYifSksQnQuc3ltYm9sTnVtZXJpYz1uZXcgQnQoInN5bWJvbC1udW1lcmljIix7Zm9udENoYXJhY3RlcjoiXFxlYTkwIn0pLEJ0LnN5bWJvbE51bWJlcj1uZXcgQnQoInN5bWJvbC1udW1iZXIiLHtmb250Q2hhcmFjdGVyOiJcXGVhOTAifSksQnQuc3ltYm9sU3RydWN0dXJlPW5ldyBCdCgic3ltYm9sLXN0cnVjdHVyZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE5MSJ9KSxCdC5zeW1ib2xTdHJ1Y3Q9bmV3IEJ0KCJzeW1ib2wtc3RydWN0Iix7Zm9udENoYXJhY3RlcjoiXFxlYTkxIn0pLEJ0LnN5bWJvbFBhcmFtZXRlcj1uZXcgQnQoInN5bWJvbC1wYXJhbWV0ZXIiLHtmb250Q2hhcmFjdGVyOiJcXGVhOTIifSksQnQuc3ltYm9sVHlwZVBhcmFtZXRlcj1uZXcgQnQoInN5bWJvbC10eXBlLXBhcmFtZXRlciIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE5MiJ9KSxCdC5zeW1ib2xLZXk9bmV3IEJ0KCJzeW1ib2wta2V5Iix7Zm9udENoYXJhY3RlcjoiXFxlYTkzIn0pLEJ0LnN5bWJvbFRleHQ9bmV3IEJ0KCJzeW1ib2wtdGV4dCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE5MyJ9KSxCdC5zeW1ib2xSZWZlcmVuY2U9bmV3IEJ0KCJzeW1ib2wtcmVmZXJlbmNlIix7Zm9udENoYXJhY3RlcjoiXFxlYTk0In0pLEJ0LmdvVG9GaWxlPW5ldyBCdCgiZ28tdG8tZmlsZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE5NCJ9KSxCdC5zeW1ib2xFbnVtPW5ldyBCdCgic3ltYm9sLWVudW0iLHtmb250Q2hhcmFjdGVyOiJcXGVhOTUifSksQnQuc3ltYm9sVmFsdWU9bmV3IEJ0KCJzeW1ib2wtdmFsdWUiLHtmb250Q2hhcmFjdGVyOiJcXGVhOTUifSksQnQuc3ltYm9sUnVsZXI9bmV3IEJ0KCJzeW1ib2wtcnVsZXIiLHtmb250Q2hhcmFjdGVyOiJcXGVhOTYifSksQnQuc3ltYm9sVW5pdD1uZXcgQnQoInN5bWJvbC11bml0Iix7Zm9udENoYXJhY3RlcjoiXFxlYTk2In0pLEJ0LmFjdGl2YXRlQnJlYWtwb2ludHM9bmV3IEJ0KCJhY3RpdmF0ZS1icmVha3BvaW50cyIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE5NyJ9KSxCdC5hcmNoaXZlPW5ldyBCdCgiYXJjaGl2ZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE5OCJ9KSxCdC5hcnJvd0JvdGg9bmV3IEJ0KCJhcnJvdy1ib3RoIix7Zm9udENoYXJhY3RlcjoiXFxlYTk5In0pLEJ0LmFycm93RG93bj1uZXcgQnQoImFycm93LWRvd24iLHtmb250Q2hhcmFjdGVyOiJcXGVhOWEifSksQnQuYXJyb3dMZWZ0PW5ldyBCdCgiYXJyb3ctbGVmdCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE5YiJ9KSxCdC5hcnJvd1JpZ2h0PW5ldyBCdCgiYXJyb3ctcmlnaHQiLHtmb250Q2hhcmFjdGVyOiJcXGVhOWMifSksQnQuYXJyb3dTbWFsbERvd249bmV3IEJ0KCJhcnJvdy1zbWFsbC1kb3duIix7Zm9udENoYXJhY3RlcjoiXFxlYTlkIn0pLEJ0LmFycm93U21hbGxMZWZ0PW5ldyBCdCgiYXJyb3ctc21hbGwtbGVmdCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE5ZSJ9KSxCdC5hcnJvd1NtYWxsUmlnaHQ9bmV3IEJ0KCJhcnJvdy1zbWFsbC1yaWdodCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE5ZiJ9KSxCdC5hcnJvd1NtYWxsVXA9bmV3IEJ0KCJhcnJvdy1zbWFsbC11cCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFhMCJ9KSxCdC5hcnJvd1VwPW5ldyBCdCgiYXJyb3ctdXAiLHtmb250Q2hhcmFjdGVyOiJcXGVhYTEifSksQnQuYmVsbD1uZXcgQnQoImJlbGwiLHtmb250Q2hhcmFjdGVyOiJcXGVhYTIifSksQnQuYm9sZD1uZXcgQnQoImJvbGQiLHtmb250Q2hhcmFjdGVyOiJcXGVhYTMifSksQnQuYm9vaz1uZXcgQnQoImJvb2siLHtmb250Q2hhcmFjdGVyOiJcXGVhYTQifSksQnQuYm9va21hcms9bmV3IEJ0KCJib29rbWFyayIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFhNSJ9KSxCdC5kZWJ1Z0JyZWFrcG9pbnRDb25kaXRpb25hbFVudmVyaWZpZWQ9bmV3IEJ0KCJkZWJ1Zy1icmVha3BvaW50LWNvbmRpdGlvbmFsLXVudmVyaWZpZWQiLHtmb250Q2hhcmFjdGVyOiJcXGVhYTYifSksQnQuZGVidWdCcmVha3BvaW50Q29uZGl0aW9uYWw9bmV3IEJ0KCJkZWJ1Zy1icmVha3BvaW50LWNvbmRpdGlvbmFsIix7Zm9udENoYXJhY3RlcjoiXFxlYWE3In0pLEJ0LmRlYnVnQnJlYWtwb2ludENvbmRpdGlvbmFsRGlzYWJsZWQ9bmV3IEJ0KCJkZWJ1Zy1icmVha3BvaW50LWNvbmRpdGlvbmFsLWRpc2FibGVkIix7Zm9udENoYXJhY3RlcjoiXFxlYWE3In0pLEJ0LmRlYnVnQnJlYWtwb2ludERhdGFVbnZlcmlmaWVkPW5ldyBCdCgiZGVidWctYnJlYWtwb2ludC1kYXRhLXVudmVyaWZpZWQiLHtmb250Q2hhcmFjdGVyOiJcXGVhYTgifSksQnQuZGVidWdCcmVha3BvaW50RGF0YT1uZXcgQnQoImRlYnVnLWJyZWFrcG9pbnQtZGF0YSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFhOSJ9KSxCdC5kZWJ1Z0JyZWFrcG9pbnREYXRhRGlzYWJsZWQ9bmV3IEJ0KCJkZWJ1Zy1icmVha3BvaW50LWRhdGEtZGlzYWJsZWQiLHtmb250Q2hhcmFjdGVyOiJcXGVhYTkifSksQnQuZGVidWdCcmVha3BvaW50TG9nVW52ZXJpZmllZD1uZXcgQnQoImRlYnVnLWJyZWFrcG9pbnQtbG9nLXVudmVyaWZpZWQiLHtmb250Q2hhcmFjdGVyOiJcXGVhYWEifSksQnQuZGVidWdCcmVha3BvaW50TG9nPW5ldyBCdCgiZGVidWctYnJlYWtwb2ludC1sb2ciLHtmb250Q2hhcmFjdGVyOiJcXGVhYWIifSksQnQuZGVidWdCcmVha3BvaW50TG9nRGlzYWJsZWQ9bmV3IEJ0KCJkZWJ1Zy1icmVha3BvaW50LWxvZy1kaXNhYmxlZCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFhYiJ9KSxCdC5icmllZmNhc2U9bmV3IEJ0KCJicmllZmNhc2UiLHtmb250Q2hhcmFjdGVyOiJcXGVhYWMifSksQnQuYnJvYWRjYXN0PW5ldyBCdCgiYnJvYWRjYXN0Iix7Zm9udENoYXJhY3RlcjoiXFxlYWFkIn0pLEJ0LmJyb3dzZXI9bmV3IEJ0KCJicm93c2VyIix7Zm9udENoYXJhY3RlcjoiXFxlYWFlIn0pLEJ0LmJ1Zz1uZXcgQnQoImJ1ZyIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFhZiJ9KSxCdC5jYWxlbmRhcj1uZXcgQnQoImNhbGVuZGFyIix7Zm9udENoYXJhY3RlcjoiXFxlYWIwIn0pLEJ0LmNhc2VTZW5zaXRpdmU9bmV3IEJ0KCJjYXNlLXNlbnNpdGl2ZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFiMSJ9KSxCdC5jaGVjaz1uZXcgQnQoImNoZWNrIix7Zm9udENoYXJhY3RlcjoiXFxlYWIyIn0pLEJ0LmNoZWNrbGlzdD1uZXcgQnQoImNoZWNrbGlzdCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFiMyJ9KSxCdC5jaGV2cm9uRG93bj1uZXcgQnQoImNoZXZyb24tZG93biIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFiNCJ9KSxCdC5kcm9wRG93bkJ1dHRvbj1uZXcgQnQoImRyb3AtZG93bi1idXR0b24iLEJ0LmNoZXZyb25Eb3duLmRlZmluaXRpb24pLEJ0LmNoZXZyb25MZWZ0PW5ldyBCdCgiY2hldnJvbi1sZWZ0Iix7Zm9udENoYXJhY3RlcjoiXFxlYWI1In0pLEJ0LmNoZXZyb25SaWdodD1uZXcgQnQoImNoZXZyb24tcmlnaHQiLHtmb250Q2hhcmFjdGVyOiJcXGVhYjYifSksQnQuY2hldnJvblVwPW5ldyBCdCgiY2hldnJvbi11cCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFiNyJ9KSxCdC5jaHJvbWVDbG9zZT1uZXcgQnQoImNocm9tZS1jbG9zZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFiOCJ9KSxCdC5jaHJvbWVNYXhpbWl6ZT1uZXcgQnQoImNocm9tZS1tYXhpbWl6ZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFiOSJ9KSxCdC5jaHJvbWVNaW5pbWl6ZT1uZXcgQnQoImNocm9tZS1taW5pbWl6ZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFiYSJ9KSxCdC5jaHJvbWVSZXN0b3JlPW5ldyBCdCgiY2hyb21lLXJlc3RvcmUiLHtmb250Q2hhcmFjdGVyOiJcXGVhYmIifSksQnQuY2lyY2xlT3V0bGluZT1uZXcgQnQoImNpcmNsZS1vdXRsaW5lIix7Zm9udENoYXJhY3RlcjoiXFxlYWJjIn0pLEJ0LmRlYnVnQnJlYWtwb2ludFVudmVyaWZpZWQ9bmV3IEJ0KCJkZWJ1Zy1icmVha3BvaW50LXVudmVyaWZpZWQiLHtmb250Q2hhcmFjdGVyOiJcXGVhYmMifSksQnQuY2lyY2xlU2xhc2g9bmV3IEJ0KCJjaXJjbGUtc2xhc2giLHtmb250Q2hhcmFjdGVyOiJcXGVhYmQifSksQnQuY2lyY3VpdEJvYXJkPW5ldyBCdCgiY2lyY3VpdC1ib2FyZCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFiZSJ9KSxCdC5jbGVhckFsbD1uZXcgQnQoImNsZWFyLWFsbCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFiZiJ9KSxCdC5jbGlwcHk9bmV3IEJ0KCJjbGlwcHkiLHtmb250Q2hhcmFjdGVyOiJcXGVhYzAifSksQnQuY2xvc2VBbGw9bmV3IEJ0KCJjbG9zZS1hbGwiLHtmb250Q2hhcmFjdGVyOiJcXGVhYzEifSksQnQuY2xvdWREb3dubG9hZD1uZXcgQnQoImNsb3VkLWRvd25sb2FkIix7Zm9udENoYXJhY3RlcjoiXFxlYWMyIn0pLEJ0LmNsb3VkVXBsb2FkPW5ldyBCdCgiY2xvdWQtdXBsb2FkIix7Zm9udENoYXJhY3RlcjoiXFxlYWMzIn0pLEJ0LmNvZGU9bmV3IEJ0KCJjb2RlIix7Zm9udENoYXJhY3RlcjoiXFxlYWM0In0pLEJ0LmNvbGxhcHNlQWxsPW5ldyBCdCgiY29sbGFwc2UtYWxsIix7Zm9udENoYXJhY3RlcjoiXFxlYWM1In0pLEJ0LmNvbG9yTW9kZT1uZXcgQnQoImNvbG9yLW1vZGUiLHtmb250Q2hhcmFjdGVyOiJcXGVhYzYifSksQnQuY29tbWVudERpc2N1c3Npb249bmV3IEJ0KCJjb21tZW50LWRpc2N1c3Npb24iLHtmb250Q2hhcmFjdGVyOiJcXGVhYzcifSksQnQuY29tcGFyZUNoYW5nZXM9bmV3IEJ0KCJjb21wYXJlLWNoYW5nZXMiLHtmb250Q2hhcmFjdGVyOiJcXGVhZmQifSksQnQuY3JlZGl0Q2FyZD1uZXcgQnQoImNyZWRpdC1jYXJkIix7Zm9udENoYXJhY3RlcjoiXFxlYWM5In0pLEJ0LmRhc2g9bmV3IEJ0KCJkYXNoIix7Zm9udENoYXJhY3RlcjoiXFxlYWNjIn0pLEJ0LmRhc2hib2FyZD1uZXcgQnQoImRhc2hib2FyZCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFjZCJ9KSxCdC5kYXRhYmFzZT1uZXcgQnQoImRhdGFiYXNlIix7Zm9udENoYXJhY3RlcjoiXFxlYWNlIn0pLEJ0LmRlYnVnQ29udGludWU9bmV3IEJ0KCJkZWJ1Zy1jb250aW51ZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFjZiJ9KSxCdC5kZWJ1Z0Rpc2Nvbm5lY3Q9bmV3IEJ0KCJkZWJ1Zy1kaXNjb25uZWN0Iix7Zm9udENoYXJhY3RlcjoiXFxlYWQwIn0pLEJ0LmRlYnVnUGF1c2U9bmV3IEJ0KCJkZWJ1Zy1wYXVzZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFkMSJ9KSxCdC5kZWJ1Z1Jlc3RhcnQ9bmV3IEJ0KCJkZWJ1Zy1yZXN0YXJ0Iix7Zm9udENoYXJhY3RlcjoiXFxlYWQyIn0pLEJ0LmRlYnVnU3RhcnQ9bmV3IEJ0KCJkZWJ1Zy1zdGFydCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFkMyJ9KSxCdC5kZWJ1Z1N0ZXBJbnRvPW5ldyBCdCgiZGVidWctc3RlcC1pbnRvIix7Zm9udENoYXJhY3RlcjoiXFxlYWQ0In0pLEJ0LmRlYnVnU3RlcE91dD1uZXcgQnQoImRlYnVnLXN0ZXAtb3V0Iix7Zm9udENoYXJhY3RlcjoiXFxlYWQ1In0pLEJ0LmRlYnVnU3RlcE92ZXI9bmV3IEJ0KCJkZWJ1Zy1zdGVwLW92ZXIiLHtmb250Q2hhcmFjdGVyOiJcXGVhZDYifSksQnQuZGVidWdTdG9wPW5ldyBCdCgiZGVidWctc3RvcCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFkNyJ9KSxCdC5kZWJ1Zz1uZXcgQnQoImRlYnVnIix7Zm9udENoYXJhY3RlcjoiXFxlYWQ4In0pLEJ0LmRldmljZUNhbWVyYVZpZGVvPW5ldyBCdCgiZGV2aWNlLWNhbWVyYS12aWRlbyIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFkOSJ9KSxCdC5kZXZpY2VDYW1lcmE9bmV3IEJ0KCJkZXZpY2UtY2FtZXJhIix7Zm9udENoYXJhY3RlcjoiXFxlYWRhIn0pLEJ0LmRldmljZU1vYmlsZT1uZXcgQnQoImRldmljZS1tb2JpbGUiLHtmb250Q2hhcmFjdGVyOiJcXGVhZGIifSksQnQuZGlmZkFkZGVkPW5ldyBCdCgiZGlmZi1hZGRlZCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFkYyJ9KSxCdC5kaWZmSWdub3JlZD1uZXcgQnQoImRpZmYtaWdub3JlZCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFkZCJ9KSxCdC5kaWZmTW9kaWZpZWQ9bmV3IEJ0KCJkaWZmLW1vZGlmaWVkIix7Zm9udENoYXJhY3RlcjoiXFxlYWRlIn0pLEJ0LmRpZmZSZW1vdmVkPW5ldyBCdCgiZGlmZi1yZW1vdmVkIix7Zm9udENoYXJhY3RlcjoiXFxlYWRmIn0pLEJ0LmRpZmZSZW5hbWVkPW5ldyBCdCgiZGlmZi1yZW5hbWVkIix7Zm9udENoYXJhY3RlcjoiXFxlYWUwIn0pLEJ0LmRpZmY9bmV3IEJ0KCJkaWZmIix7Zm9udENoYXJhY3RlcjoiXFxlYWUxIn0pLEJ0LmRpc2NhcmQ9bmV3IEJ0KCJkaXNjYXJkIix7Zm9udENoYXJhY3RlcjoiXFxlYWUyIn0pLEJ0LmVkaXRvckxheW91dD1uZXcgQnQoImVkaXRvci1sYXlvdXQiLHtmb250Q2hhcmFjdGVyOiJcXGVhZTMifSksQnQuZW1wdHlXaW5kb3c9bmV3IEJ0KCJlbXB0eS13aW5kb3ciLHtmb250Q2hhcmFjdGVyOiJcXGVhZTQifSksQnQuZXhjbHVkZT1uZXcgQnQoImV4Y2x1ZGUiLHtmb250Q2hhcmFjdGVyOiJcXGVhZTUifSksQnQuZXh0ZW5zaW9ucz1uZXcgQnQoImV4dGVuc2lvbnMiLHtmb250Q2hhcmFjdGVyOiJcXGVhZTYifSksQnQuZXllQ2xvc2VkPW5ldyBCdCgiZXllLWNsb3NlZCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFlNyJ9KSxCdC5maWxlQmluYXJ5PW5ldyBCdCgiZmlsZS1iaW5hcnkiLHtmb250Q2hhcmFjdGVyOiJcXGVhZTgifSksQnQuZmlsZUNvZGU9bmV3IEJ0KCJmaWxlLWNvZGUiLHtmb250Q2hhcmFjdGVyOiJcXGVhZTkifSksQnQuZmlsZU1lZGlhPW5ldyBCdCgiZmlsZS1tZWRpYSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFlYSJ9KSxCdC5maWxlUGRmPW5ldyBCdCgiZmlsZS1wZGYiLHtmb250Q2hhcmFjdGVyOiJcXGVhZWIifSksQnQuZmlsZVN1Ym1vZHVsZT1uZXcgQnQoImZpbGUtc3VibW9kdWxlIix7Zm9udENoYXJhY3RlcjoiXFxlYWVjIn0pLEJ0LmZpbGVTeW1saW5rRGlyZWN0b3J5PW5ldyBCdCgiZmlsZS1zeW1saW5rLWRpcmVjdG9yeSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFlZCJ9KSxCdC5maWxlU3ltbGlua0ZpbGU9bmV3IEJ0KCJmaWxlLXN5bWxpbmstZmlsZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFlZSJ9KSxCdC5maWxlWmlwPW5ldyBCdCgiZmlsZS16aXAiLHtmb250Q2hhcmFjdGVyOiJcXGVhZWYifSksQnQuZmlsZXM9bmV3IEJ0KCJmaWxlcyIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFmMCJ9KSxCdC5maWx0ZXI9bmV3IEJ0KCJmaWx0ZXIiLHtmb250Q2hhcmFjdGVyOiJcXGVhZjEifSksQnQuZmxhbWU9bmV3IEJ0KCJmbGFtZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFmMiJ9KSxCdC5mb2xkRG93bj1uZXcgQnQoImZvbGQtZG93biIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFmMyJ9KSxCdC5mb2xkVXA9bmV3IEJ0KCJmb2xkLXVwIix7Zm9udENoYXJhY3RlcjoiXFxlYWY0In0pLEJ0LmZvbGQ9bmV3IEJ0KCJmb2xkIix7Zm9udENoYXJhY3RlcjoiXFxlYWY1In0pLEJ0LmZvbGRlckFjdGl2ZT1uZXcgQnQoImZvbGRlci1hY3RpdmUiLHtmb250Q2hhcmFjdGVyOiJcXGVhZjYifSksQnQuZm9sZGVyT3BlbmVkPW5ldyBCdCgiZm9sZGVyLW9wZW5lZCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFmNyJ9KSxCdC5nZWFyPW5ldyBCdCgiZ2VhciIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFmOCJ9KSxCdC5naWZ0PW5ldyBCdCgiZ2lmdCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFmOSJ9KSxCdC5naXN0U2VjcmV0PW5ldyBCdCgiZ2lzdC1zZWNyZXQiLHtmb250Q2hhcmFjdGVyOiJcXGVhZmEifSksQnQuZ2lzdD1uZXcgQnQoImdpc3QiLHtmb250Q2hhcmFjdGVyOiJcXGVhZmIifSksQnQuZ2l0Q29tbWl0PW5ldyBCdCgiZ2l0LWNvbW1pdCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFmYyJ9KSxCdC5naXRDb21wYXJlPW5ldyBCdCgiZ2l0LWNvbXBhcmUiLHtmb250Q2hhcmFjdGVyOiJcXGVhZmQifSksQnQuZ2l0TWVyZ2U9bmV3IEJ0KCJnaXQtbWVyZ2UiLHtmb250Q2hhcmFjdGVyOiJcXGVhZmUifSksQnQuZ2l0aHViQWN0aW9uPW5ldyBCdCgiZ2l0aHViLWFjdGlvbiIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFmZiJ9KSxCdC5naXRodWJBbHQ9bmV3IEJ0KCJnaXRodWItYWx0Iix7Zm9udENoYXJhY3RlcjoiXFxlYjAwIn0pLEJ0Lmdsb2JlPW5ldyBCdCgiZ2xvYmUiLHtmb250Q2hhcmFjdGVyOiJcXGViMDEifSksQnQuZ3JhYmJlcj1uZXcgQnQoImdyYWJiZXIiLHtmb250Q2hhcmFjdGVyOiJcXGViMDIifSksQnQuZ3JhcGg9bmV3IEJ0KCJncmFwaCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWIwMyJ9KSxCdC5ncmlwcGVyPW5ldyBCdCgiZ3JpcHBlciIse2ZvbnRDaGFyYWN0ZXI6IlxcZWIwNCJ9KSxCdC5oZWFydD1uZXcgQnQoImhlYXJ0Iix7Zm9udENoYXJhY3RlcjoiXFxlYjA1In0pLEJ0LmhvbWU9bmV3IEJ0KCJob21lIix7Zm9udENoYXJhY3RlcjoiXFxlYjA2In0pLEJ0Lmhvcml6b250YWxSdWxlPW5ldyBCdCgiaG9yaXpvbnRhbC1ydWxlIix7Zm9udENoYXJhY3RlcjoiXFxlYjA3In0pLEJ0Lmh1Ym90PW5ldyBCdCgiaHVib3QiLHtmb250Q2hhcmFjdGVyOiJcXGViMDgifSksQnQuaW5ib3g9bmV3IEJ0KCJpbmJveCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWIwOSJ9KSxCdC5pc3N1ZUNsb3NlZD1uZXcgQnQoImlzc3VlLWNsb3NlZCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJhNCJ9KSxCdC5pc3N1ZVJlb3BlbmVkPW5ldyBCdCgiaXNzdWUtcmVvcGVuZWQiLHtmb250Q2hhcmFjdGVyOiJcXGViMGIifSksQnQuaXNzdWVzPW5ldyBCdCgiaXNzdWVzIix7Zm9udENoYXJhY3RlcjoiXFxlYjBjIn0pLEJ0Lml0YWxpYz1uZXcgQnQoIml0YWxpYyIse2ZvbnRDaGFyYWN0ZXI6IlxcZWIwZCJ9KSxCdC5qZXJzZXk9bmV3IEJ0KCJqZXJzZXkiLHtmb250Q2hhcmFjdGVyOiJcXGViMGUifSksQnQuanNvbj1uZXcgQnQoImpzb24iLHtmb250Q2hhcmFjdGVyOiJcXGViMGYifSksQnQua2ViYWJWZXJ0aWNhbD1uZXcgQnQoImtlYmFiLXZlcnRpY2FsIix7Zm9udENoYXJhY3RlcjoiXFxlYjEwIn0pLEJ0LmtleT1uZXcgQnQoImtleSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWIxMSJ9KSxCdC5sYXc9bmV3IEJ0KCJsYXciLHtmb250Q2hhcmFjdGVyOiJcXGViMTIifSksQnQubGlnaHRidWxiQXV0b2ZpeD1uZXcgQnQoImxpZ2h0YnVsYi1hdXRvZml4Iix7Zm9udENoYXJhY3RlcjoiXFxlYjEzIn0pLEJ0LmxpbmtFeHRlcm5hbD1uZXcgQnQoImxpbmstZXh0ZXJuYWwiLHtmb250Q2hhcmFjdGVyOiJcXGViMTQifSksQnQubGluaz1uZXcgQnQoImxpbmsiLHtmb250Q2hhcmFjdGVyOiJcXGViMTUifSksQnQubGlzdE9yZGVyZWQ9bmV3IEJ0KCJsaXN0LW9yZGVyZWQiLHtmb250Q2hhcmFjdGVyOiJcXGViMTYifSksQnQubGlzdFVub3JkZXJlZD1uZXcgQnQoImxpc3QtdW5vcmRlcmVkIix7Zm9udENoYXJhY3RlcjoiXFxlYjE3In0pLEJ0LmxpdmVTaGFyZT1uZXcgQnQoImxpdmUtc2hhcmUiLHtmb250Q2hhcmFjdGVyOiJcXGViMTgifSksQnQubG9hZGluZz1uZXcgQnQoImxvYWRpbmciLHtmb250Q2hhcmFjdGVyOiJcXGViMTkifSksQnQubG9jYXRpb249bmV3IEJ0KCJsb2NhdGlvbiIse2ZvbnRDaGFyYWN0ZXI6IlxcZWIxYSJ9KSxCdC5tYWlsUmVhZD1uZXcgQnQoIm1haWwtcmVhZCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWIxYiJ9KSxCdC5tYWlsPW5ldyBCdCgibWFpbCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWIxYyJ9KSxCdC5tYXJrZG93bj1uZXcgQnQoIm1hcmtkb3duIix7Zm9udENoYXJhY3RlcjoiXFxlYjFkIn0pLEJ0Lm1lZ2FwaG9uZT1uZXcgQnQoIm1lZ2FwaG9uZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWIxZSJ9KSxCdC5tZW50aW9uPW5ldyBCdCgibWVudGlvbiIse2ZvbnRDaGFyYWN0ZXI6IlxcZWIxZiJ9KSxCdC5taWxlc3RvbmU9bmV3IEJ0KCJtaWxlc3RvbmUiLHtmb250Q2hhcmFjdGVyOiJcXGViMjAifSksQnQubW9ydGFyQm9hcmQ9bmV3IEJ0KCJtb3J0YXItYm9hcmQiLHtmb250Q2hhcmFjdGVyOiJcXGViMjEifSksQnQubW92ZT1uZXcgQnQoIm1vdmUiLHtmb250Q2hhcmFjdGVyOiJcXGViMjIifSksQnQubXVsdGlwbGVXaW5kb3dzPW5ldyBCdCgibXVsdGlwbGUtd2luZG93cyIse2ZvbnRDaGFyYWN0ZXI6IlxcZWIyMyJ9KSxCdC5tdXRlPW5ldyBCdCgibXV0ZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWIyNCJ9KSxCdC5ub05ld2xpbmU9bmV3IEJ0KCJuby1uZXdsaW5lIix7Zm9udENoYXJhY3RlcjoiXFxlYjI1In0pLEJ0Lm5vdGU9bmV3IEJ0KCJub3RlIix7Zm9udENoYXJhY3RlcjoiXFxlYjI2In0pLEJ0Lm9jdG9mYWNlPW5ldyBCdCgib2N0b2ZhY2UiLHtmb250Q2hhcmFjdGVyOiJcXGViMjcifSksQnQub3BlblByZXZpZXc9bmV3IEJ0KCJvcGVuLXByZXZpZXciLHtmb250Q2hhcmFjdGVyOiJcXGViMjgifSksQnQucGFja2FnZV89bmV3IEJ0KCJwYWNrYWdlIix7Zm9udENoYXJhY3RlcjoiXFxlYjI5In0pLEJ0LnBhaW50Y2FuPW5ldyBCdCgicGFpbnRjYW4iLHtmb250Q2hhcmFjdGVyOiJcXGViMmEifSksQnQucGluPW5ldyBCdCgicGluIix7Zm9udENoYXJhY3RlcjoiXFxlYjJiIn0pLEJ0LnBsYXk9bmV3IEJ0KCJwbGF5Iix7Zm9udENoYXJhY3RlcjoiXFxlYjJjIn0pLEJ0LnJ1bj1uZXcgQnQoInJ1biIse2ZvbnRDaGFyYWN0ZXI6IlxcZWIyYyJ9KSxCdC5wbHVnPW5ldyBCdCgicGx1ZyIse2ZvbnRDaGFyYWN0ZXI6IlxcZWIyZCJ9KSxCdC5wcmVzZXJ2ZUNhc2U9bmV3IEJ0KCJwcmVzZXJ2ZS1jYXNlIix7Zm9udENoYXJhY3RlcjoiXFxlYjJlIn0pLEJ0LnByZXZpZXc9bmV3IEJ0KCJwcmV2aWV3Iix7Zm9udENoYXJhY3RlcjoiXFxlYjJmIn0pLEJ0LnByb2plY3Q9bmV3IEJ0KCJwcm9qZWN0Iix7Zm9udENoYXJhY3RlcjoiXFxlYjMwIn0pLEJ0LnB1bHNlPW5ldyBCdCgicHVsc2UiLHtmb250Q2hhcmFjdGVyOiJcXGViMzEifSksQnQucXVlc3Rpb249bmV3IEJ0KCJxdWVzdGlvbiIse2ZvbnRDaGFyYWN0ZXI6IlxcZWIzMiJ9KSxCdC5xdW90ZT1uZXcgQnQoInF1b3RlIix7Zm9udENoYXJhY3RlcjoiXFxlYjMzIn0pLEJ0LnJhZGlvVG93ZXI9bmV3IEJ0KCJyYWRpby10b3dlciIse2ZvbnRDaGFyYWN0ZXI6IlxcZWIzNCJ9KSxCdC5yZWFjdGlvbnM9bmV3IEJ0KCJyZWFjdGlvbnMiLHtmb250Q2hhcmFjdGVyOiJcXGViMzUifSksQnQucmVmZXJlbmNlcz1uZXcgQnQoInJlZmVyZW5jZXMiLHtmb250Q2hhcmFjdGVyOiJcXGViMzYifSksQnQucmVmcmVzaD1uZXcgQnQoInJlZnJlc2giLHtmb250Q2hhcmFjdGVyOiJcXGViMzcifSksQnQucmVnZXg9bmV3IEJ0KCJyZWdleCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWIzOCJ9KSxCdC5yZW1vdGVFeHBsb3Jlcj1uZXcgQnQoInJlbW90ZS1leHBsb3JlciIse2ZvbnRDaGFyYWN0ZXI6IlxcZWIzOSJ9KSxCdC5yZW1vdGU9bmV3IEJ0KCJyZW1vdGUiLHtmb250Q2hhcmFjdGVyOiJcXGViM2EifSksQnQucmVtb3ZlPW5ldyBCdCgicmVtb3ZlIix7Zm9udENoYXJhY3RlcjoiXFxlYjNiIn0pLEJ0LnJlcGxhY2VBbGw9bmV3IEJ0KCJyZXBsYWNlLWFsbCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWIzYyJ9KSxCdC5yZXBsYWNlPW5ldyBCdCgicmVwbGFjZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWIzZCJ9KSxCdC5yZXBvQ2xvbmU9bmV3IEJ0KCJyZXBvLWNsb25lIix7Zm9udENoYXJhY3RlcjoiXFxlYjNlIn0pLEJ0LnJlcG9Gb3JjZVB1c2g9bmV3IEJ0KCJyZXBvLWZvcmNlLXB1c2giLHtmb250Q2hhcmFjdGVyOiJcXGViM2YifSksQnQucmVwb1B1bGw9bmV3IEJ0KCJyZXBvLXB1bGwiLHtmb250Q2hhcmFjdGVyOiJcXGViNDAifSksQnQucmVwb1B1c2g9bmV3IEJ0KCJyZXBvLXB1c2giLHtmb250Q2hhcmFjdGVyOiJcXGViNDEifSksQnQucmVwb3J0PW5ldyBCdCgicmVwb3J0Iix7Zm9udENoYXJhY3RlcjoiXFxlYjQyIn0pLEJ0LnJlcXVlc3RDaGFuZ2VzPW5ldyBCdCgicmVxdWVzdC1jaGFuZ2VzIix7Zm9udENoYXJhY3RlcjoiXFxlYjQzIn0pLEJ0LnJvY2tldD1uZXcgQnQoInJvY2tldCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI0NCJ9KSxCdC5yb290Rm9sZGVyT3BlbmVkPW5ldyBCdCgicm9vdC1mb2xkZXItb3BlbmVkIix7Zm9udENoYXJhY3RlcjoiXFxlYjQ1In0pLEJ0LnJvb3RGb2xkZXI9bmV3IEJ0KCJyb290LWZvbGRlciIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI0NiJ9KSxCdC5yc3M9bmV3IEJ0KCJyc3MiLHtmb250Q2hhcmFjdGVyOiJcXGViNDcifSksQnQucnVieT1uZXcgQnQoInJ1YnkiLHtmb250Q2hhcmFjdGVyOiJcXGViNDgifSksQnQuc2F2ZUFsbD1uZXcgQnQoInNhdmUtYWxsIix7Zm9udENoYXJhY3RlcjoiXFxlYjQ5In0pLEJ0LnNhdmVBcz1uZXcgQnQoInNhdmUtYXMiLHtmb250Q2hhcmFjdGVyOiJcXGViNGEifSksQnQuc2F2ZT1uZXcgQnQoInNhdmUiLHtmb250Q2hhcmFjdGVyOiJcXGViNGIifSksQnQuc2NyZWVuRnVsbD1uZXcgQnQoInNjcmVlbi1mdWxsIix7Zm9udENoYXJhY3RlcjoiXFxlYjRjIn0pLEJ0LnNjcmVlbk5vcm1hbD1uZXcgQnQoInNjcmVlbi1ub3JtYWwiLHtmb250Q2hhcmFjdGVyOiJcXGViNGQifSksQnQuc2VhcmNoU3RvcD1uZXcgQnQoInNlYXJjaC1zdG9wIix7Zm9udENoYXJhY3RlcjoiXFxlYjRlIn0pLEJ0LnNlcnZlcj1uZXcgQnQoInNlcnZlciIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI1MCJ9KSxCdC5zZXR0aW5nc0dlYXI9bmV3IEJ0KCJzZXR0aW5ncy1nZWFyIix7Zm9udENoYXJhY3RlcjoiXFxlYjUxIn0pLEJ0LnNldHRpbmdzPW5ldyBCdCgic2V0dGluZ3MiLHtmb250Q2hhcmFjdGVyOiJcXGViNTIifSksQnQuc2hpZWxkPW5ldyBCdCgic2hpZWxkIix7Zm9udENoYXJhY3RlcjoiXFxlYjUzIn0pLEJ0LnNtaWxleT1uZXcgQnQoInNtaWxleSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI1NCJ9KSxCdC5zb3J0UHJlY2VkZW5jZT1uZXcgQnQoInNvcnQtcHJlY2VkZW5jZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI1NSJ9KSxCdC5zcGxpdEhvcml6b250YWw9bmV3IEJ0KCJzcGxpdC1ob3Jpem9udGFsIix7Zm9udENoYXJhY3RlcjoiXFxlYjU2In0pLEJ0LnNwbGl0VmVydGljYWw9bmV3IEJ0KCJzcGxpdC12ZXJ0aWNhbCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI1NyJ9KSxCdC5zcXVpcnJlbD1uZXcgQnQoInNxdWlycmVsIix7Zm9udENoYXJhY3RlcjoiXFxlYjU4In0pLEJ0LnN0YXJGdWxsPW5ldyBCdCgic3Rhci1mdWxsIix7Zm9udENoYXJhY3RlcjoiXFxlYjU5In0pLEJ0LnN0YXJIYWxmPW5ldyBCdCgic3Rhci1oYWxmIix7Zm9udENoYXJhY3RlcjoiXFxlYjVhIn0pLEJ0LnN5bWJvbENsYXNzPW5ldyBCdCgic3ltYm9sLWNsYXNzIix7Zm9udENoYXJhY3RlcjoiXFxlYjViIn0pLEJ0LnN5bWJvbENvbG9yPW5ldyBCdCgic3ltYm9sLWNvbG9yIix7Zm9udENoYXJhY3RlcjoiXFxlYjVjIn0pLEJ0LnN5bWJvbEN1c3RvbUNvbG9yPW5ldyBCdCgic3ltYm9sLWN1c3RvbWNvbG9yIix7Zm9udENoYXJhY3RlcjoiXFxlYjVjIn0pLEJ0LnN5bWJvbENvbnN0YW50PW5ldyBCdCgic3ltYm9sLWNvbnN0YW50Iix7Zm9udENoYXJhY3RlcjoiXFxlYjVkIn0pLEJ0LnN5bWJvbEVudW1NZW1iZXI9bmV3IEJ0KCJzeW1ib2wtZW51bS1tZW1iZXIiLHtmb250Q2hhcmFjdGVyOiJcXGViNWUifSksQnQuc3ltYm9sRmllbGQ9bmV3IEJ0KCJzeW1ib2wtZmllbGQiLHtmb250Q2hhcmFjdGVyOiJcXGViNWYifSksQnQuc3ltYm9sRmlsZT1uZXcgQnQoInN5bWJvbC1maWxlIix7Zm9udENoYXJhY3RlcjoiXFxlYjYwIn0pLEJ0LnN5bWJvbEludGVyZmFjZT1uZXcgQnQoInN5bWJvbC1pbnRlcmZhY2UiLHtmb250Q2hhcmFjdGVyOiJcXGViNjEifSksQnQuc3ltYm9sS2V5d29yZD1uZXcgQnQoInN5bWJvbC1rZXl3b3JkIix7Zm9udENoYXJhY3RlcjoiXFxlYjYyIn0pLEJ0LnN5bWJvbE1pc2M9bmV3IEJ0KCJzeW1ib2wtbWlzYyIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI2MyJ9KSxCdC5zeW1ib2xPcGVyYXRvcj1uZXcgQnQoInN5bWJvbC1vcGVyYXRvciIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI2NCJ9KSxCdC5zeW1ib2xQcm9wZXJ0eT1uZXcgQnQoInN5bWJvbC1wcm9wZXJ0eSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI2NSJ9KSxCdC53cmVuY2g9bmV3IEJ0KCJ3cmVuY2giLHtmb250Q2hhcmFjdGVyOiJcXGViNjUifSksQnQud3JlbmNoU3ViYWN0aW9uPW5ldyBCdCgid3JlbmNoLXN1YmFjdGlvbiIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI2NSJ9KSxCdC5zeW1ib2xTbmlwcGV0PW5ldyBCdCgic3ltYm9sLXNuaXBwZXQiLHtmb250Q2hhcmFjdGVyOiJcXGViNjYifSksQnQudGFza2xpc3Q9bmV3IEJ0KCJ0YXNrbGlzdCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI2NyJ9KSxCdC50ZWxlc2NvcGU9bmV3IEJ0KCJ0ZWxlc2NvcGUiLHtmb250Q2hhcmFjdGVyOiJcXGViNjgifSksQnQudGV4dFNpemU9bmV3IEJ0KCJ0ZXh0LXNpemUiLHtmb250Q2hhcmFjdGVyOiJcXGViNjkifSksQnQudGhyZWVCYXJzPW5ldyBCdCgidGhyZWUtYmFycyIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI2YSJ9KSxCdC50aHVtYnNkb3duPW5ldyBCdCgidGh1bWJzZG93biIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI2YiJ9KSxCdC50aHVtYnN1cD1uZXcgQnQoInRodW1ic3VwIix7Zm9udENoYXJhY3RlcjoiXFxlYjZjIn0pLEJ0LnRvb2xzPW5ldyBCdCgidG9vbHMiLHtmb250Q2hhcmFjdGVyOiJcXGViNmQifSksQnQudHJpYW5nbGVEb3duPW5ldyBCdCgidHJpYW5nbGUtZG93biIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI2ZSJ9KSxCdC50cmlhbmdsZUxlZnQ9bmV3IEJ0KCJ0cmlhbmdsZS1sZWZ0Iix7Zm9udENoYXJhY3RlcjoiXFxlYjZmIn0pLEJ0LnRyaWFuZ2xlUmlnaHQ9bmV3IEJ0KCJ0cmlhbmdsZS1yaWdodCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI3MCJ9KSxCdC50cmlhbmdsZVVwPW5ldyBCdCgidHJpYW5nbGUtdXAiLHtmb250Q2hhcmFjdGVyOiJcXGViNzEifSksQnQudHdpdHRlcj1uZXcgQnQoInR3aXR0ZXIiLHtmb250Q2hhcmFjdGVyOiJcXGViNzIifSksQnQudW5mb2xkPW5ldyBCdCgidW5mb2xkIix7Zm9udENoYXJhY3RlcjoiXFxlYjczIn0pLEJ0LnVubG9jaz1uZXcgQnQoInVubG9jayIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI3NCJ9KSxCdC51bm11dGU9bmV3IEJ0KCJ1bm11dGUiLHtmb250Q2hhcmFjdGVyOiJcXGViNzUifSksQnQudW52ZXJpZmllZD1uZXcgQnQoInVudmVyaWZpZWQiLHtmb250Q2hhcmFjdGVyOiJcXGViNzYifSksQnQudmVyaWZpZWQ9bmV3IEJ0KCJ2ZXJpZmllZCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI3NyJ9KSxCdC52ZXJzaW9ucz1uZXcgQnQoInZlcnNpb25zIix7Zm9udENoYXJhY3RlcjoiXFxlYjc4In0pLEJ0LnZtQWN0aXZlPW5ldyBCdCgidm0tYWN0aXZlIix7Zm9udENoYXJhY3RlcjoiXFxlYjc5In0pLEJ0LnZtT3V0bGluZT1uZXcgQnQoInZtLW91dGxpbmUiLHtmb250Q2hhcmFjdGVyOiJcXGViN2EifSksQnQudm1SdW5uaW5nPW5ldyBCdCgidm0tcnVubmluZyIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI3YiJ9KSxCdC53YXRjaD1uZXcgQnQoIndhdGNoIix7Zm9udENoYXJhY3RlcjoiXFxlYjdjIn0pLEJ0LndoaXRlc3BhY2U9bmV3IEJ0KCJ3aGl0ZXNwYWNlIix7Zm9udENoYXJhY3RlcjoiXFxlYjdkIn0pLEJ0Lndob2xlV29yZD1uZXcgQnQoIndob2xlLXdvcmQiLHtmb250Q2hhcmFjdGVyOiJcXGViN2UifSksQnQud2luZG93PW5ldyBCdCgid2luZG93Iix7Zm9udENoYXJhY3RlcjoiXFxlYjdmIn0pLEJ0LndvcmRXcmFwPW5ldyBCdCgid29yZC13cmFwIix7Zm9udENoYXJhY3RlcjoiXFxlYjgwIn0pLEJ0Lnpvb21Jbj1uZXcgQnQoInpvb20taW4iLHtmb250Q2hhcmFjdGVyOiJcXGViODEifSksQnQuem9vbU91dD1uZXcgQnQoInpvb20tb3V0Iix7Zm9udENoYXJhY3RlcjoiXFxlYjgyIn0pLEJ0Lmxpc3RGaWx0ZXI9bmV3IEJ0KCJsaXN0LWZpbHRlciIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI4MyJ9KSxCdC5saXN0RmxhdD1uZXcgQnQoImxpc3QtZmxhdCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI4NCJ9KSxCdC5saXN0U2VsZWN0aW9uPW5ldyBCdCgibGlzdC1zZWxlY3Rpb24iLHtmb250Q2hhcmFjdGVyOiJcXGViODUifSksQnQuc2VsZWN0aW9uPW5ldyBCdCgic2VsZWN0aW9uIix7Zm9udENoYXJhY3RlcjoiXFxlYjg1In0pLEJ0Lmxpc3RUcmVlPW5ldyBCdCgibGlzdC10cmVlIix7Zm9udENoYXJhY3RlcjoiXFxlYjg2In0pLEJ0LmRlYnVnQnJlYWtwb2ludEZ1bmN0aW9uVW52ZXJpZmllZD1uZXcgQnQoImRlYnVnLWJyZWFrcG9pbnQtZnVuY3Rpb24tdW52ZXJpZmllZCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI4NyJ9KSxCdC5kZWJ1Z0JyZWFrcG9pbnRGdW5jdGlvbj1uZXcgQnQoImRlYnVnLWJyZWFrcG9pbnQtZnVuY3Rpb24iLHtmb250Q2hhcmFjdGVyOiJcXGViODgifSksQnQuZGVidWdCcmVha3BvaW50RnVuY3Rpb25EaXNhYmxlZD1uZXcgQnQoImRlYnVnLWJyZWFrcG9pbnQtZnVuY3Rpb24tZGlzYWJsZWQiLHtmb250Q2hhcmFjdGVyOiJcXGViODgifSksQnQuZGVidWdTdGFja2ZyYW1lQWN0aXZlPW5ldyBCdCgiZGVidWctc3RhY2tmcmFtZS1hY3RpdmUiLHtmb250Q2hhcmFjdGVyOiJcXGViODkifSksQnQuY2lyY2xlU21hbGxGaWxsZWQ9bmV3IEJ0KCJjaXJjbGUtc21hbGwtZmlsbGVkIix7Zm9udENoYXJhY3RlcjoiXFxlYjhhIn0pLEJ0LmRlYnVnU3RhY2tmcmFtZURvdD1uZXcgQnQoImRlYnVnLXN0YWNrZnJhbWUtZG90IixCdC5jaXJjbGVTbWFsbEZpbGxlZC5kZWZpbml0aW9uKSxCdC5kZWJ1Z1N0YWNrZnJhbWU9bmV3IEJ0KCJkZWJ1Zy1zdGFja2ZyYW1lIix7Zm9udENoYXJhY3RlcjoiXFxlYjhiIn0pLEJ0LmRlYnVnU3RhY2tmcmFtZUZvY3VzZWQ9bmV3IEJ0KCJkZWJ1Zy1zdGFja2ZyYW1lLWZvY3VzZWQiLHtmb250Q2hhcmFjdGVyOiJcXGViOGIifSksQnQuZGVidWdCcmVha3BvaW50VW5zdXBwb3J0ZWQ9bmV3IEJ0KCJkZWJ1Zy1icmVha3BvaW50LXVuc3VwcG9ydGVkIix7Zm9udENoYXJhY3RlcjoiXFxlYjhjIn0pLEJ0LnN5bWJvbFN0cmluZz1uZXcgQnQoInN5bWJvbC1zdHJpbmciLHtmb250Q2hhcmFjdGVyOiJcXGViOGQifSksQnQuZGVidWdSZXZlcnNlQ29udGludWU9bmV3IEJ0KCJkZWJ1Zy1yZXZlcnNlLWNvbnRpbnVlIix7Zm9udENoYXJhY3RlcjoiXFxlYjhlIn0pLEJ0LmRlYnVnU3RlcEJhY2s9bmV3IEJ0KCJkZWJ1Zy1zdGVwLWJhY2siLHtmb250Q2hhcmFjdGVyOiJcXGViOGYifSksQnQuZGVidWdSZXN0YXJ0RnJhbWU9bmV3IEJ0KCJkZWJ1Zy1yZXN0YXJ0LWZyYW1lIix7Zm9udENoYXJhY3RlcjoiXFxlYjkwIn0pLEJ0LmNhbGxJbmNvbWluZz1uZXcgQnQoImNhbGwtaW5jb21pbmciLHtmb250Q2hhcmFjdGVyOiJcXGViOTIifSksQnQuY2FsbE91dGdvaW5nPW5ldyBCdCgiY2FsbC1vdXRnb2luZyIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI5MyJ9KSxCdC5tZW51PW5ldyBCdCgibWVudSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI5NCJ9KSxCdC5leHBhbmRBbGw9bmV3IEJ0KCJleHBhbmQtYWxsIix7Zm9udENoYXJhY3RlcjoiXFxlYjk1In0pLEJ0LmZlZWRiYWNrPW5ldyBCdCgiZmVlZGJhY2siLHtmb250Q2hhcmFjdGVyOiJcXGViOTYifSksQnQuZ3JvdXBCeVJlZlR5cGU9bmV3IEJ0KCJncm91cC1ieS1yZWYtdHlwZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI5NyJ9KSxCdC51bmdyb3VwQnlSZWZUeXBlPW5ldyBCdCgidW5ncm91cC1ieS1yZWYtdHlwZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI5OCJ9KSxCdC5hY2NvdW50PW5ldyBCdCgiYWNjb3VudCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI5OSJ9KSxCdC5iZWxsRG90PW5ldyBCdCgiYmVsbC1kb3QiLHtmb250Q2hhcmFjdGVyOiJcXGViOWEifSksQnQuZGVidWdDb25zb2xlPW5ldyBCdCgiZGVidWctY29uc29sZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI5YiJ9KSxCdC5saWJyYXJ5PW5ldyBCdCgibGlicmFyeSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI5YyJ9KSxCdC5vdXRwdXQ9bmV3IEJ0KCJvdXRwdXQiLHtmb250Q2hhcmFjdGVyOiJcXGViOWQifSksQnQucnVuQWxsPW5ldyBCdCgicnVuLWFsbCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI5ZSJ9KSxCdC5zeW5jSWdub3JlZD1uZXcgQnQoInN5bmMtaWdub3JlZCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI5ZiJ9KSxCdC5waW5uZWQ9bmV3IEJ0KCJwaW5uZWQiLHtmb250Q2hhcmFjdGVyOiJcXGViYTAifSksQnQuZ2l0aHViSW52ZXJ0ZWQ9bmV3IEJ0KCJnaXRodWItaW52ZXJ0ZWQiLHtmb250Q2hhcmFjdGVyOiJcXGViYTEifSksQnQuZGVidWdBbHQ9bmV3IEJ0KCJkZWJ1Zy1hbHQiLHtmb250Q2hhcmFjdGVyOiJcXGViOTEifSksQnQuc2VydmVyUHJvY2Vzcz1uZXcgQnQoInNlcnZlci1wcm9jZXNzIix7Zm9udENoYXJhY3RlcjoiXFxlYmEyIn0pLEJ0LnNlcnZlckVudmlyb25tZW50PW5ldyBCdCgic2VydmVyLWVudmlyb25tZW50Iix7Zm9udENoYXJhY3RlcjoiXFxlYmEzIn0pLEJ0LnBhc3M9bmV3IEJ0KCJwYXNzIix7Zm9udENoYXJhY3RlcjoiXFxlYmE0In0pLEJ0LnN0b3BDaXJjbGU9bmV3IEJ0KCJzdG9wLWNpcmNsZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJhNSJ9KSxCdC5wbGF5Q2lyY2xlPW5ldyBCdCgicGxheS1jaXJjbGUiLHtmb250Q2hhcmFjdGVyOiJcXGViYTYifSksQnQucmVjb3JkPW5ldyBCdCgicmVjb3JkIix7Zm9udENoYXJhY3RlcjoiXFxlYmE3In0pLEJ0LmRlYnVnQWx0U21hbGw9bmV3IEJ0KCJkZWJ1Zy1hbHQtc21hbGwiLHtmb250Q2hhcmFjdGVyOiJcXGViYTgifSksQnQudm1Db25uZWN0PW5ldyBCdCgidm0tY29ubmVjdCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJhOSJ9KSxCdC5jbG91ZD1uZXcgQnQoImNsb3VkIix7Zm9udENoYXJhY3RlcjoiXFxlYmFhIn0pLEJ0Lm1lcmdlPW5ldyBCdCgibWVyZ2UiLHtmb250Q2hhcmFjdGVyOiJcXGViYWIifSksQnQuZXhwb3J0SWNvbj1uZXcgQnQoImV4cG9ydCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJhYyJ9KSxCdC5ncmFwaExlZnQ9bmV3IEJ0KCJncmFwaC1sZWZ0Iix7Zm9udENoYXJhY3RlcjoiXFxlYmFkIn0pLEJ0Lm1hZ25ldD1uZXcgQnQoIm1hZ25ldCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJhZSJ9KSxCdC5ub3RlYm9vaz1uZXcgQnQoIm5vdGVib29rIix7Zm9udENoYXJhY3RlcjoiXFxlYmFmIn0pLEJ0LnJlZG89bmV3IEJ0KCJyZWRvIix7Zm9udENoYXJhY3RlcjoiXFxlYmIwIn0pLEJ0LmNoZWNrQWxsPW5ldyBCdCgiY2hlY2stYWxsIix7Zm9udENoYXJhY3RlcjoiXFxlYmIxIn0pLEJ0LnBpbm5lZERpcnR5PW5ldyBCdCgicGlubmVkLWRpcnR5Iix7Zm9udENoYXJhY3RlcjoiXFxlYmIyIn0pLEJ0LnBhc3NGaWxsZWQ9bmV3IEJ0KCJwYXNzLWZpbGxlZCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJiMyJ9KSxCdC5jaXJjbGVMYXJnZUZpbGxlZD1uZXcgQnQoImNpcmNsZS1sYXJnZS1maWxsZWQiLHtmb250Q2hhcmFjdGVyOiJcXGViYjQifSksQnQuY2lyY2xlTGFyZ2VPdXRsaW5lPW5ldyBCdCgiY2lyY2xlLWxhcmdlLW91dGxpbmUiLHtmb250Q2hhcmFjdGVyOiJcXGViYjUifSksQnQuY29tYmluZT1uZXcgQnQoImNvbWJpbmUiLHtmb250Q2hhcmFjdGVyOiJcXGViYjYifSksQnQuZ2F0aGVyPW5ldyBCdCgiZ2F0aGVyIix7Zm9udENoYXJhY3RlcjoiXFxlYmI2In0pLEJ0LnRhYmxlPW5ldyBCdCgidGFibGUiLHtmb250Q2hhcmFjdGVyOiJcXGViYjcifSksQnQudmFyaWFibGVHcm91cD1uZXcgQnQoInZhcmlhYmxlLWdyb3VwIix7Zm9udENoYXJhY3RlcjoiXFxlYmI4In0pLEJ0LnR5cGVIaWVyYXJjaHk9bmV3IEJ0KCJ0eXBlLWhpZXJhcmNoeSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJiOSJ9KSxCdC50eXBlSGllcmFyY2h5U3ViPW5ldyBCdCgidHlwZS1oaWVyYXJjaHktc3ViIix7Zm9udENoYXJhY3RlcjoiXFxlYmJhIn0pLEJ0LnR5cGVIaWVyYXJjaHlTdXBlcj1uZXcgQnQoInR5cGUtaGllcmFyY2h5LXN1cGVyIix7Zm9udENoYXJhY3RlcjoiXFxlYmJiIn0pLEJ0LmdpdFB1bGxSZXF1ZXN0Q3JlYXRlPW5ldyBCdCgiZ2l0LXB1bGwtcmVxdWVzdC1jcmVhdGUiLHtmb250Q2hhcmFjdGVyOiJcXGViYmMifSksQnQucnVuQWJvdmU9bmV3IEJ0KCJydW4tYWJvdmUiLHtmb250Q2hhcmFjdGVyOiJcXGViYmQifSksQnQucnVuQmVsb3c9bmV3IEJ0KCJydW4tYmVsb3ciLHtmb250Q2hhcmFjdGVyOiJcXGViYmUifSksQnQubm90ZWJvb2tUZW1wbGF0ZT1uZXcgQnQoIm5vdGVib29rLXRlbXBsYXRlIix7Zm9udENoYXJhY3RlcjoiXFxlYmJmIn0pLEJ0LmRlYnVnUmVydW49bmV3IEJ0KCJkZWJ1Zy1yZXJ1biIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJjMCJ9KSxCdC53b3Jrc3BhY2VUcnVzdGVkPW5ldyBCdCgid29ya3NwYWNlLXRydXN0ZWQiLHtmb250Q2hhcmFjdGVyOiJcXGViYzEifSksQnQud29ya3NwYWNlVW50cnVzdGVkPW5ldyBCdCgid29ya3NwYWNlLXVudHJ1c3RlZCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJjMiJ9KSxCdC53b3Jrc3BhY2VVbnNwZWNpZmllZD1uZXcgQnQoIndvcmtzcGFjZS11bnNwZWNpZmllZCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJjMyJ9KSxCdC50ZXJtaW5hbENtZD1uZXcgQnQoInRlcm1pbmFsLWNtZCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJjNCJ9KSxCdC50ZXJtaW5hbERlYmlhbj1uZXcgQnQoInRlcm1pbmFsLWRlYmlhbiIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJjNSJ9KSxCdC50ZXJtaW5hbExpbnV4PW5ldyBCdCgidGVybWluYWwtbGludXgiLHtmb250Q2hhcmFjdGVyOiJcXGViYzYifSksQnQudGVybWluYWxQb3dlcnNoZWxsPW5ldyBCdCgidGVybWluYWwtcG93ZXJzaGVsbCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJjNyJ9KSxCdC50ZXJtaW5hbFRtdXg9bmV3IEJ0KCJ0ZXJtaW5hbC10bXV4Iix7Zm9udENoYXJhY3RlcjoiXFxlYmM4In0pLEJ0LnRlcm1pbmFsVWJ1bnR1PW5ldyBCdCgidGVybWluYWwtdWJ1bnR1Iix7Zm9udENoYXJhY3RlcjoiXFxlYmM5In0pLEJ0LnRlcm1pbmFsQmFzaD1uZXcgQnQoInRlcm1pbmFsLWJhc2giLHtmb250Q2hhcmFjdGVyOiJcXGViY2EifSksQnQuYXJyb3dTd2FwPW5ldyBCdCgiYXJyb3ctc3dhcCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJjYiJ9KSxCdC5jb3B5PW5ldyBCdCgiY29weSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJjYyJ9KSxCdC5wZXJzb25BZGQ9bmV3IEJ0KCJwZXJzb24tYWRkIix7Zm9udENoYXJhY3RlcjoiXFxlYmNkIn0pLEJ0LmZpbHRlckZpbGxlZD1uZXcgQnQoImZpbHRlci1maWxsZWQiLHtmb250Q2hhcmFjdGVyOiJcXGViY2UifSksQnQud2FuZD1uZXcgQnQoIndhbmQiLHtmb250Q2hhcmFjdGVyOiJcXGViY2YifSksQnQuZGVidWdMaW5lQnlMaW5lPW5ldyBCdCgiZGVidWctbGluZS1ieS1saW5lIix7Zm9udENoYXJhY3RlcjoiXFxlYmQwIn0pLEJ0Lmluc3BlY3Q9bmV3IEJ0KCJpbnNwZWN0Iix7Zm9udENoYXJhY3RlcjoiXFxlYmQxIn0pLEJ0LmxheWVycz1uZXcgQnQoImxheWVycyIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJkMiJ9KSxCdC5sYXllcnNEb3Q9bmV3IEJ0KCJsYXllcnMtZG90Iix7Zm9udENoYXJhY3RlcjoiXFxlYmQzIn0pLEJ0LmxheWVyc0FjdGl2ZT1uZXcgQnQoImxheWVycy1hY3RpdmUiLHtmb250Q2hhcmFjdGVyOiJcXGViZDQifSksQnQuY29tcGFzcz1uZXcgQnQoImNvbXBhc3MiLHtmb250Q2hhcmFjdGVyOiJcXGViZDUifSksQnQuY29tcGFzc0RvdD1uZXcgQnQoImNvbXBhc3MtZG90Iix7Zm9udENoYXJhY3RlcjoiXFxlYmQ2In0pLEJ0LmNvbXBhc3NBY3RpdmU9bmV3IEJ0KCJjb21wYXNzLWFjdGl2ZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJkNyJ9KSxCdC5henVyZT1uZXcgQnQoImF6dXJlIix7Zm9udENoYXJhY3RlcjoiXFxlYmQ4In0pLEJ0Lmlzc3VlRHJhZnQ9bmV3IEJ0KCJpc3N1ZS1kcmFmdCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJkOSJ9KSxCdC5naXRQdWxsUmVxdWVzdENsb3NlZD1uZXcgQnQoImdpdC1wdWxsLXJlcXVlc3QtY2xvc2VkIix7Zm9udENoYXJhY3RlcjoiXFxlYmRhIn0pLEJ0LmdpdFB1bGxSZXF1ZXN0RHJhZnQ9bmV3IEJ0KCJnaXQtcHVsbC1yZXF1ZXN0LWRyYWZ0Iix7Zm9udENoYXJhY3RlcjoiXFxlYmRiIn0pLEJ0LmRlYnVnQWxsPW5ldyBCdCgiZGVidWctYWxsIix7Zm9udENoYXJhY3RlcjoiXFxlYmRjIn0pLEJ0LmRlYnVnQ292ZXJhZ2U9bmV3IEJ0KCJkZWJ1Zy1jb3ZlcmFnZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJkZCJ9KSxCdC5ydW5FcnJvcnM9bmV3IEJ0KCJydW4tZXJyb3JzIix7Zm9udENoYXJhY3RlcjoiXFxlYmRlIn0pLEJ0LmZvbGRlckxpYnJhcnk9bmV3IEJ0KCJmb2xkZXItbGlicmFyeSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJkZiJ9KSxCdC5kZWJ1Z0NvbnRpbnVlU21hbGw9bmV3IEJ0KCJkZWJ1Zy1jb250aW51ZS1zbWFsbCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJlMCJ9KSxCdC5iZWFrZXJTdG9wPW5ldyBCdCgiYmVha2VyLXN0b3AiLHtmb250Q2hhcmFjdGVyOiJcXGViZTEifSksQnQuZ3JhcGhMaW5lPW5ldyBCdCgiZ3JhcGgtbGluZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJlMiJ9KSxCdC5ncmFwaFNjYXR0ZXI9bmV3IEJ0KCJncmFwaC1zY2F0dGVyIix7Zm9udENoYXJhY3RlcjoiXFxlYmUzIn0pLEJ0LnBpZUNoYXJ0PW5ldyBCdCgicGllLWNoYXJ0Iix7Zm9udENoYXJhY3RlcjoiXFxlYmU0In0pLEJ0LmJyYWNrZXQ9bmV3IEJ0KCJicmFja2V0IixCdC5qc29uLmRlZmluaXRpb24pLEJ0LmJyYWNrZXREb3Q9bmV3IEJ0KCJicmFja2V0LWRvdCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJlNSJ9KSxCdC5icmFja2V0RXJyb3I9bmV3IEJ0KCJicmFja2V0LWVycm9yIix7Zm9udENoYXJhY3RlcjoiXFxlYmU2In0pLEJ0LmxvY2tTbWFsbD1uZXcgQnQoImxvY2stc21hbGwiLHtmb250Q2hhcmFjdGVyOiJcXGViZTcifSksQnQuYXp1cmVEZXZvcHM9bmV3IEJ0KCJhenVyZS1kZXZvcHMiLHtmb250Q2hhcmFjdGVyOiJcXGViZTgifSksQnQudmVyaWZpZWRGaWxsZWQ9bmV3IEJ0KCJ2ZXJpZmllZC1maWxsZWQiLHtmb250Q2hhcmFjdGVyOiJcXGViZTkifSksQnQubmV3TGluZT1uZXcgQnQoIm5ld2xpbmUiLHtmb250Q2hhcmFjdGVyOiJcXGViZWEifSksQnQubGF5b3V0PW5ldyBCdCgibGF5b3V0Iix7Zm9udENoYXJhY3RlcjoiXFxlYmViIn0pLEJ0LmxheW91dEFjdGl2aXR5YmFyTGVmdD1uZXcgQnQoImxheW91dC1hY3Rpdml0eWJhci1sZWZ0Iix7Zm9udENoYXJhY3RlcjoiXFxlYmVjIn0pLEJ0LmxheW91dEFjdGl2aXR5YmFyUmlnaHQ9bmV3IEJ0KCJsYXlvdXQtYWN0aXZpdHliYXItcmlnaHQiLHtmb250Q2hhcmFjdGVyOiJcXGViZWQifSksQnQubGF5b3V0UGFuZWxMZWZ0PW5ldyBCdCgibGF5b3V0LXBhbmVsLWxlZnQiLHtmb250Q2hhcmFjdGVyOiJcXGViZWUifSksQnQubGF5b3V0UGFuZWxDZW50ZXI9bmV3IEJ0KCJsYXlvdXQtcGFuZWwtY2VudGVyIix7Zm9udENoYXJhY3RlcjoiXFxlYmVmIn0pLEJ0LmxheW91dFBhbmVsSnVzdGlmeT1uZXcgQnQoImxheW91dC1wYW5lbC1qdXN0aWZ5Iix7Zm9udENoYXJhY3RlcjoiXFxlYmYwIn0pLEJ0LmxheW91dFBhbmVsUmlnaHQ9bmV3IEJ0KCJsYXlvdXQtcGFuZWwtcmlnaHQiLHtmb250Q2hhcmFjdGVyOiJcXGViZjEifSksQnQubGF5b3V0UGFuZWw9bmV3IEJ0KCJsYXlvdXQtcGFuZWwiLHtmb250Q2hhcmFjdGVyOiJcXGViZjIifSksQnQubGF5b3V0U2lkZWJhckxlZnQ9bmV3IEJ0KCJsYXlvdXQtc2lkZWJhci1sZWZ0Iix7Zm9udENoYXJhY3RlcjoiXFxlYmYzIn0pLEJ0LmxheW91dFNpZGViYXJSaWdodD1uZXcgQnQoImxheW91dC1zaWRlYmFyLXJpZ2h0Iix7Zm9udENoYXJhY3RlcjoiXFxlYmY0In0pLEJ0LmxheW91dFN0YXR1c2Jhcj1uZXcgQnQoImxheW91dC1zdGF0dXNiYXIiLHtmb250Q2hhcmFjdGVyOiJcXGViZjUifSksQnQubGF5b3V0TWVudWJhcj1uZXcgQnQoImxheW91dC1tZW51YmFyIix7Zm9udENoYXJhY3RlcjoiXFxlYmY2In0pLEJ0LmxheW91dENlbnRlcmVkPW5ldyBCdCgibGF5b3V0LWNlbnRlcmVkIix7Zm9udENoYXJhY3RlcjoiXFxlYmY3In0pLEJ0LmxheW91dFNpZGViYXJSaWdodE9mZj1uZXcgQnQoImxheW91dC1zaWRlYmFyLXJpZ2h0LW9mZiIse2ZvbnRDaGFyYWN0ZXI6IlxcZWMwMCJ9KSxCdC5sYXlvdXRQYW5lbE9mZj1uZXcgQnQoImxheW91dC1wYW5lbC1vZmYiLHtmb250Q2hhcmFjdGVyOiJcXGVjMDEifSksQnQubGF5b3V0U2lkZWJhckxlZnRPZmY9bmV3IEJ0KCJsYXlvdXQtc2lkZWJhci1sZWZ0LW9mZiIse2ZvbnRDaGFyYWN0ZXI6IlxcZWMwMiJ9KSxCdC50YXJnZXQ9bmV3IEJ0KCJ0YXJnZXQiLHtmb250Q2hhcmFjdGVyOiJcXGViZjgifSksQnQuaW5kZW50PW5ldyBCdCgiaW5kZW50Iix7Zm9udENoYXJhY3RlcjoiXFxlYmY5In0pLEJ0LnJlY29yZFNtYWxsPW5ldyBCdCgicmVjb3JkLXNtYWxsIix7Zm9udENoYXJhY3RlcjoiXFxlYmZhIn0pLEJ0LmVycm9yU21hbGw9bmV3IEJ0KCJlcnJvci1zbWFsbCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJmYiJ9KSxCdC5hcnJvd0NpcmNsZURvd249bmV3IEJ0KCJhcnJvdy1jaXJjbGUtZG93biIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJmYyJ9KSxCdC5hcnJvd0NpcmNsZUxlZnQ9bmV3IEJ0KCJhcnJvdy1jaXJjbGUtbGVmdCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJmZCJ9KSxCdC5hcnJvd0NpcmNsZVJpZ2h0PW5ldyBCdCgiYXJyb3ctY2lyY2xlLXJpZ2h0Iix7Zm9udENoYXJhY3RlcjoiXFxlYmZlIn0pLEJ0LmFycm93Q2lyY2xlVXA9bmV3IEJ0KCJhcnJvdy1jaXJjbGUtdXAiLHtmb250Q2hhcmFjdGVyOiJcXGViZmYifSksQnQuaGVhcnRGaWxsZWQ9bmV3IEJ0KCJoZWFydC1maWxsZWQiLHtmb250Q2hhcmFjdGVyOiJcXGVjMDQifSksQnQubWFwPW5ldyBCdCgibWFwIix7Zm9udENoYXJhY3RlcjoiXFxlYzA1In0pLEJ0Lm1hcEZpbGxlZD1uZXcgQnQoIm1hcC1maWxsZWQiLHtmb250Q2hhcmFjdGVyOiJcXGVjMDYifSksQnQuY2lyY2xlU21hbGw9bmV3IEJ0KCJjaXJjbGUtc21hbGwiLHtmb250Q2hhcmFjdGVyOiJcXGVjMDcifSksQnQuYmVsbFNsYXNoPW5ldyBCdCgiYmVsbC1zbGFzaCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWMwOCJ9KSxCdC5iZWxsU2xhc2hEb3Q9bmV3IEJ0KCJiZWxsLXNsYXNoLWRvdCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWMwOSJ9KSxCdC5jb21tZW50VW5yZXNvbHZlZD1uZXcgQnQoImNvbW1lbnQtdW5yZXNvbHZlZCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWMwYSJ9KSxCdC5naXRQdWxsUmVxdWVzdEdvVG9DaGFuZ2VzPW5ldyBCdCgiZ2l0LXB1bGwtcmVxdWVzdC1nby10by1jaGFuZ2VzIix7Zm9udENoYXJhY3RlcjoiXFxlYzBiIn0pLEJ0LmdpdFB1bGxSZXF1ZXN0TmV3Q2hhbmdlcz1uZXcgQnQoImdpdC1wdWxsLXJlcXVlc3QtbmV3LWNoYW5nZXMiLHtmb250Q2hhcmFjdGVyOiJcXGVjMGMifSksQnQuZGlhbG9nRXJyb3I9bmV3IEJ0KCJkaWFsb2ctZXJyb3IiLEJ0LmVycm9yLmRlZmluaXRpb24pLEJ0LmRpYWxvZ1dhcm5pbmc9bmV3IEJ0KCJkaWFsb2ctd2FybmluZyIsQnQud2FybmluZy5kZWZpbml0aW9uKSxCdC5kaWFsb2dJbmZvPW5ldyBCdCgiZGlhbG9nLWluZm8iLEJ0LmluZm8uZGVmaW5pdGlvbiksQnQuZGlhbG9nQ2xvc2U9bmV3IEJ0KCJkaWFsb2ctY2xvc2UiLEJ0LmNsb3NlLmRlZmluaXRpb24pLEJ0LnRyZWVJdGVtRXhwYW5kZWQ9bmV3IEJ0KCJ0cmVlLWl0ZW0tZXhwYW5kZWQiLEJ0LmNoZXZyb25Eb3duLmRlZmluaXRpb24pLEJ0LnRyZWVGaWx0ZXJPblR5cGVPbj1uZXcgQnQoInRyZWUtZmlsdGVyLW9uLXR5cGUtb24iLEJ0Lmxpc3RGaWx0ZXIuZGVmaW5pdGlvbiksQnQudHJlZUZpbHRlck9uVHlwZU9mZj1uZXcgQnQoInRyZWUtZmlsdGVyLW9uLXR5cGUtb2ZmIixCdC5saXN0U2VsZWN0aW9uLmRlZmluaXRpb24pLEJ0LnRyZWVGaWx0ZXJDbGVhcj1uZXcgQnQoInRyZWUtZmlsdGVyLWNsZWFyIixCdC5jbG9zZS5kZWZpbml0aW9uKSxCdC50cmVlSXRlbUxvYWRpbmc9bmV3IEJ0KCJ0cmVlLWl0ZW0tbG9hZGluZyIsQnQubG9hZGluZy5kZWZpbml0aW9uKSxCdC5tZW51U2VsZWN0aW9uPW5ldyBCdCgibWVudS1zZWxlY3Rpb24iLEJ0LmNoZWNrLmRlZmluaXRpb24pLEJ0Lm1lbnVTdWJtZW51PW5ldyBCdCgibWVudS1zdWJtZW51IixCdC5jaGV2cm9uUmlnaHQuZGVmaW5pdGlvbiksQnQubWVudUJhck1vcmU9bmV3IEJ0KCJtZW51YmFyLW1vcmUiLEJ0Lm1vcmUuZGVmaW5pdGlvbiksQnQuc2Nyb2xsYmFyQnV0dG9uTGVmdD1uZXcgQnQoInNjcm9sbGJhci1idXR0b24tbGVmdCIsQnQudHJpYW5nbGVMZWZ0LmRlZmluaXRpb24pLEJ0LnNjcm9sbGJhckJ1dHRvblJpZ2h0PW5ldyBCdCgic2Nyb2xsYmFyLWJ1dHRvbi1yaWdodCIsQnQudHJpYW5nbGVSaWdodC5kZWZpbml0aW9uKSxCdC5zY3JvbGxiYXJCdXR0b25VcD1uZXcgQnQoInNjcm9sbGJhci1idXR0b24tdXAiLEJ0LnRyaWFuZ2xlVXAuZGVmaW5pdGlvbiksQnQuc2Nyb2xsYmFyQnV0dG9uRG93bj1uZXcgQnQoInNjcm9sbGJhci1idXR0b24tZG93biIsQnQudHJpYW5nbGVEb3duLmRlZmluaXRpb24pLEJ0LnRvb2xCYXJNb3JlPW5ldyBCdCgidG9vbGJhci1tb3JlIixCdC5tb3JlLmRlZmluaXRpb24pLEJ0LnF1aWNrSW5wdXRCYWNrPW5ldyBCdCgicXVpY2staW5wdXQtYmFjayIsQnQuYXJyb3dMZWZ0LmRlZmluaXRpb24pLGZ1bmN0aW9uKGUpe2UuaWNvbk5hbWVTZWdtZW50PSJbQS1aYS16MC05XSsiLGUuaWNvbk5hbWVFeHByZXNzaW9uPSJbQS1aYS16MC05LV0rIixlLmljb25Nb2RpZmllckV4cHJlc3Npb249In5bQS1aYS16XSsiLGUuaWNvbk5hbWVDaGFyYWN0ZXI9IltBLVphLXowLTl+LV0iO2NvbnN0IHQ9bmV3IFJlZ0V4cChgXigke2UuaWNvbk5hbWVFeHByZXNzaW9ufSkoJHtlLmljb25Nb2RpZmllckV4cHJlc3Npb259KT8kYCk7ZnVuY3Rpb24gbihlKXtpZihlIGluc3RhbmNlb2YgQnQpcmV0dXJuWyJjb2RpY29uIiwiY29kaWNvbi0iK2UuaWRdO2NvbnN0IHI9dC5leGVjKGUuaWQpO2lmKCFyKXJldHVybiBuKEJ0LmVycm9yKTtjb25zdFssaSxvXT1yLGE9WyJjb2RpY29uIiwiY29kaWNvbi0iK2ldO3JldHVybiBvJiZhLnB1c2goImNvZGljb24tbW9kaWZpZXItIitvLnN1YnN0cigxKSksYX1lLmFzQ2xhc3NOYW1lQXJyYXk9bixlLmFzQ2xhc3NOYW1lPWZ1bmN0aW9uKGUpe3JldHVybiBuKGUpLmpvaW4oIiAiKX0sZS5hc0NTU1NlbGVjdG9yPWZ1bmN0aW9uKGUpe3JldHVybiIuIituKGUpLmpvaW4oIi4iKX19KGp0fHwoanQ9e30pKTt2YXIgcXQsJHQsV3QsSHQsenQsR3QsSnQsWHQsWnQsWXQsUXQsZW4sdG4sbm4scm4sb24sYW4sc24sY24sbG4sdW4saG4sZm4sZG4sbW4sZ24scG4sYm4sdm4seW4sQ24sd24sX24sU24sQW4sRW4seG4sTm4sa24sTG4sVG4sT24sSW4sTW4sUG4sUm4sVm4sRm4sRG49ZnVuY3Rpb24oZSx0LG4scil7cmV0dXJuIG5ldyhufHwobj1Qcm9taXNlKSkoKGZ1bmN0aW9uKGksbyl7ZnVuY3Rpb24gYShlKXt0cnl7YyhyLm5leHQoZSkpfWNhdGNoKGUpe28oZSl9fWZ1bmN0aW9uIHMoZSl7dHJ5e2Moci50aHJvdyhlKSl9Y2F0Y2goZSl7byhlKX19ZnVuY3Rpb24gYyhlKXt2YXIgdDtlLmRvbmU/aShlLnZhbHVlKToodD1lLnZhbHVlLHQgaW5zdGFuY2VvZiBuP3Q6bmV3IG4oKGZ1bmN0aW9uKGUpe2UodCl9KSkpLnRoZW4oYSxzKX1jKChyPXIuYXBwbHkoZSx0fHxbXSkpLm5leHQoKSl9KSl9O2NsYXNzIEtuIGV4dGVuZHMgZntjb25zdHJ1Y3RvcihlLHQsbil7c3VwZXIoKSx0aGlzLl9yZWdpc3RyeT1lLHRoaXMuX2xhbmd1YWdlSWQ9dCx0aGlzLl9mYWN0b3J5PW4sdGhpcy5faXNEaXNwb3NlZD0hMSx0aGlzLl9yZXNvbHZlUHJvbWlzZT1udWxsLHRoaXMuX2lzUmVzb2x2ZWQ9ITF9Z2V0IGlzUmVzb2x2ZWQoKXtyZXR1cm4gdGhpcy5faXNSZXNvbHZlZH1kaXNwb3NlKCl7dGhpcy5faXNEaXNwb3NlZD0hMCxzdXBlci5kaXNwb3NlKCl9cmVzb2x2ZSgpe3JldHVybiBEbih0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiB0aGlzLl9yZXNvbHZlUHJvbWlzZXx8KHRoaXMuX3Jlc29sdmVQcm9taXNlPXRoaXMuX2NyZWF0ZSgpKSx0aGlzLl9yZXNvbHZlUHJvbWlzZX0pKX1fY3JlYXRlKCl7cmV0dXJuIERuKHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3QgZT15aWVsZCBQcm9taXNlLnJlc29sdmUodGhpcy5fZmFjdG9yeS5jcmVhdGVUb2tlbml6YXRpb25TdXBwb3J0KCkpO3RoaXMuX2lzUmVzb2x2ZWQ9ITAsZSYmIXRoaXMuX2lzRGlzcG9zZWQmJnRoaXMuX3JlZ2lzdGVyKHRoaXMuX3JlZ2lzdHJ5LnJlZ2lzdGVyKHRoaXMuX2xhbmd1YWdlSWQsZSkpfSkpfX1jbGFzcyBqbntjb25zdHJ1Y3RvcihlLHQsbil7dGhpcy5fdG9rZW5CcmFuZD12b2lkIDAsdGhpcy5vZmZzZXQ9ZSx0aGlzLnR5cGU9dCx0aGlzLmxhbmd1YWdlPW59dG9TdHJpbmcoKXtyZXR1cm4iKCIrdGhpcy5vZmZzZXQrIiwgIit0aGlzLnR5cGUrIikifX0hZnVuY3Rpb24oZSl7Y29uc3QgdD1uZXcgTWFwO3Quc2V0KDAsQnQuc3ltYm9sTWV0aG9kKSx0LnNldCgxLEJ0LnN5bWJvbEZ1bmN0aW9uKSx0LnNldCgyLEJ0LnN5bWJvbENvbnN0cnVjdG9yKSx0LnNldCgzLEJ0LnN5bWJvbEZpZWxkKSx0LnNldCg0LEJ0LnN5bWJvbFZhcmlhYmxlKSx0LnNldCg1LEJ0LnN5bWJvbENsYXNzKSx0LnNldCg2LEJ0LnN5bWJvbFN0cnVjdCksdC5zZXQoNyxCdC5zeW1ib2xJbnRlcmZhY2UpLHQuc2V0KDgsQnQuc3ltYm9sTW9kdWxlKSx0LnNldCg5LEJ0LnN5bWJvbFByb3BlcnR5KSx0LnNldCgxMCxCdC5zeW1ib2xFdmVudCksdC5zZXQoMTEsQnQuc3ltYm9sT3BlcmF0b3IpLHQuc2V0KDEyLEJ0LnN5bWJvbFVuaXQpLHQuc2V0KDEzLEJ0LnN5bWJvbFZhbHVlKSx0LnNldCgxNSxCdC5zeW1ib2xFbnVtKSx0LnNldCgxNCxCdC5zeW1ib2xDb25zdGFudCksdC5zZXQoMTUsQnQuc3ltYm9sRW51bSksdC5zZXQoMTYsQnQuc3ltYm9sRW51bU1lbWJlciksdC5zZXQoMTcsQnQuc3ltYm9sS2V5d29yZCksdC5zZXQoMjcsQnQuc3ltYm9sU25pcHBldCksdC5zZXQoMTgsQnQuc3ltYm9sVGV4dCksdC5zZXQoMTksQnQuc3ltYm9sQ29sb3IpLHQuc2V0KDIwLEJ0LnN5bWJvbEZpbGUpLHQuc2V0KDIxLEJ0LnN5bWJvbFJlZmVyZW5jZSksdC5zZXQoMjIsQnQuc3ltYm9sQ3VzdG9tQ29sb3IpLHQuc2V0KDIzLEJ0LnN5bWJvbEZvbGRlciksdC5zZXQoMjQsQnQuc3ltYm9sVHlwZVBhcmFtZXRlciksdC5zZXQoMjUsQnQuYWNjb3VudCksdC5zZXQoMjYsQnQuaXNzdWVzKSxlLnRvSWNvbj1mdW5jdGlvbihlKXtsZXQgbj10LmdldChlKTtyZXR1cm4gbnx8KGNvbnNvbGUuaW5mbygiTm8gY29kaWNvbiBmb3VuZCBmb3IgQ29tcGxldGlvbkl0ZW1LaW5kICIrZSksbj1CdC5zeW1ib2xQcm9wZXJ0eSksbn07Y29uc3Qgbj1uZXcgTWFwO24uc2V0KCJtZXRob2QiLDApLG4uc2V0KCJmdW5jdGlvbiIsMSksbi5zZXQoImNvbnN0cnVjdG9yIiwyKSxuLnNldCgiZmllbGQiLDMpLG4uc2V0KCJ2YXJpYWJsZSIsNCksbi5zZXQoImNsYXNzIiw1KSxuLnNldCgic3RydWN0Iiw2KSxuLnNldCgiaW50ZXJmYWNlIiw3KSxuLnNldCgibW9kdWxlIiw4KSxuLnNldCgicHJvcGVydHkiLDkpLG4uc2V0KCJldmVudCIsMTApLG4uc2V0KCJvcGVyYXRvciIsMTEpLG4uc2V0KCJ1bml0IiwxMiksbi5zZXQoInZhbHVlIiwxMyksbi5zZXQoImNvbnN0YW50IiwxNCksbi5zZXQoImVudW0iLDE1KSxuLnNldCgiZW51bS1tZW1iZXIiLDE2KSxuLnNldCgiZW51bU1lbWJlciIsMTYpLG4uc2V0KCJrZXl3b3JkIiwxNyksbi5zZXQoInNuaXBwZXQiLDI3KSxuLnNldCgidGV4dCIsMTgpLG4uc2V0KCJjb2xvciIsMTkpLG4uc2V0KCJmaWxlIiwyMCksbi5zZXQoInJlZmVyZW5jZSIsMjEpLG4uc2V0KCJjdXN0b21jb2xvciIsMjIpLG4uc2V0KCJmb2xkZXIiLDIzKSxuLnNldCgidHlwZS1wYXJhbWV0ZXIiLDI0KSxuLnNldCgidHlwZVBhcmFtZXRlciIsMjQpLG4uc2V0KCJhY2NvdW50IiwyNSksbi5zZXQoImlzc3VlIiwyNiksZS5mcm9tU3RyaW5nPWZ1bmN0aW9uKGUsdCl7bGV0IHI9bi5nZXQoZSk7cmV0dXJuIHZvaWQgMCE9PXJ8fHR8fChyPTkpLHJ9fShxdHx8KHF0PXt9KSksZnVuY3Rpb24oZSl7ZVtlLkF1dG9tYXRpYz0wXT0iQXV0b21hdGljIixlW2UuRXhwbGljaXQ9MV09IkV4cGxpY2l0In0oJHR8fCgkdD17fSkpLGZ1bmN0aW9uKGUpe2VbZS5JbnZva2U9MV09Ikludm9rZSIsZVtlLlRyaWdnZXJDaGFyYWN0ZXI9Ml09IlRyaWdnZXJDaGFyYWN0ZXIiLGVbZS5Db250ZW50Q2hhbmdlPTNdPSJDb250ZW50Q2hhbmdlIn0oV3R8fChXdD17fSkpLGZ1bmN0aW9uKGUpe2VbZS5UZXh0PTBdPSJUZXh0IixlW2UuUmVhZD0xXT0iUmVhZCIsZVtlLldyaXRlPTJdPSJXcml0ZSJ9KEh0fHwoSHQ9e30pKSxmdW5jdGlvbihlKXtjb25zdCB0PW5ldyBNYXA7dC5zZXQoMCxCdC5zeW1ib2xGaWxlKSx0LnNldCgxLEJ0LnN5bWJvbE1vZHVsZSksdC5zZXQoMixCdC5zeW1ib2xOYW1lc3BhY2UpLHQuc2V0KDMsQnQuc3ltYm9sUGFja2FnZSksdC5zZXQoNCxCdC5zeW1ib2xDbGFzcyksdC5zZXQoNSxCdC5zeW1ib2xNZXRob2QpLHQuc2V0KDYsQnQuc3ltYm9sUHJvcGVydHkpLHQuc2V0KDcsQnQuc3ltYm9sRmllbGQpLHQuc2V0KDgsQnQuc3ltYm9sQ29uc3RydWN0b3IpLHQuc2V0KDksQnQuc3ltYm9sRW51bSksdC5zZXQoMTAsQnQuc3ltYm9sSW50ZXJmYWNlKSx0LnNldCgxMSxCdC5zeW1ib2xGdW5jdGlvbiksdC5zZXQoMTIsQnQuc3ltYm9sVmFyaWFibGUpLHQuc2V0KDEzLEJ0LnN5bWJvbENvbnN0YW50KSx0LnNldCgxNCxCdC5zeW1ib2xTdHJpbmcpLHQuc2V0KDE1LEJ0LnN5bWJvbE51bWJlciksdC5zZXQoMTYsQnQuc3ltYm9sQm9vbGVhbiksdC5zZXQoMTcsQnQuc3ltYm9sQXJyYXkpLHQuc2V0KDE4LEJ0LnN5bWJvbE9iamVjdCksdC5zZXQoMTksQnQuc3ltYm9sS2V5KSx0LnNldCgyMCxCdC5zeW1ib2xOdWxsKSx0LnNldCgyMSxCdC5zeW1ib2xFbnVtTWVtYmVyKSx0LnNldCgyMixCdC5zeW1ib2xTdHJ1Y3QpLHQuc2V0KDIzLEJ0LnN5bWJvbEV2ZW50KSx0LnNldCgyNCxCdC5zeW1ib2xPcGVyYXRvciksdC5zZXQoMjUsQnQuc3ltYm9sVHlwZVBhcmFtZXRlciksZS50b0ljb249ZnVuY3Rpb24oZSl7bGV0IG49dC5nZXQoZSk7cmV0dXJuIG58fChjb25zb2xlLmluZm8oIk5vIGNvZGljb24gZm91bmQgZm9yIFN5bWJvbEtpbmQgIitlKSxuPUJ0LnN5bWJvbFByb3BlcnR5KSxufX0oenR8fCh6dD17fSkpLGZ1bmN0aW9uKGUpe2UuaXM9ZnVuY3Rpb24oZSl7cmV0dXJuISghZXx8Im9iamVjdCIhPXR5cGVvZiBlKSYmKCJzdHJpbmciPT10eXBlb2YgZS5pZCYmInN0cmluZyI9PXR5cGVvZiBlLnRpdGxlKX19KEd0fHwoR3Q9e30pKSxmdW5jdGlvbihlKXtlW2UuVHlwZT0xXT0iVHlwZSIsZVtlLlBhcmFtZXRlcj0yXT0iUGFyYW1ldGVyIn0oSnR8fChKdD17fSkpLG5ldyBjbGFzc3tjb25zdHJ1Y3Rvcigpe3RoaXMuX21hcD1uZXcgTWFwLHRoaXMuX2ZhY3Rvcmllcz1uZXcgTWFwLHRoaXMuX29uRGlkQ2hhbmdlPW5ldyBCLHRoaXMub25EaWRDaGFuZ2U9dGhpcy5fb25EaWRDaGFuZ2UuZXZlbnQsdGhpcy5fY29sb3JNYXA9bnVsbH1maXJlKGUpe3RoaXMuX29uRGlkQ2hhbmdlLmZpcmUoe2NoYW5nZWRMYW5ndWFnZXM6ZSxjaGFuZ2VkQ29sb3JNYXA6ITF9KX1yZWdpc3RlcihlLHQpe3JldHVybiB0aGlzLl9tYXAuc2V0KGUsdCksdGhpcy5maXJlKFtlXSksdSgoKCk9Pnt0aGlzLl9tYXAuZ2V0KGUpPT09dCYmKHRoaXMuX21hcC5kZWxldGUoZSksdGhpcy5maXJlKFtlXSkpfSkpfXJlZ2lzdGVyRmFjdG9yeShlLHQpe3ZhciBuO251bGw9PT0obj10aGlzLl9mYWN0b3JpZXMuZ2V0KGUpKXx8dm9pZCAwPT09bnx8bi5kaXNwb3NlKCk7Y29uc3Qgcj1uZXcgS24odGhpcyxlLHQpO3JldHVybiB0aGlzLl9mYWN0b3JpZXMuc2V0KGUsciksdSgoKCk9Pntjb25zdCB0PXRoaXMuX2ZhY3Rvcmllcy5nZXQoZSk7dCYmdD09PXImJih0aGlzLl9mYWN0b3JpZXMuZGVsZXRlKGUpLHQuZGlzcG9zZSgpKX0pKX1nZXRPckNyZWF0ZShlKXtyZXR1cm4gRG4odGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtjb25zdCB0PXRoaXMuZ2V0KGUpO2lmKHQpcmV0dXJuIHQ7Y29uc3Qgbj10aGlzLl9mYWN0b3JpZXMuZ2V0KGUpO3JldHVybiFufHxuLmlzUmVzb2x2ZWQ/bnVsbDooeWllbGQgbi5yZXNvbHZlKCksdGhpcy5nZXQoZSkpfSkpfWdldChlKXtyZXR1cm4gdGhpcy5fbWFwLmdldChlKXx8bnVsbH1pc1Jlc29sdmVkKGUpe2lmKHRoaXMuZ2V0KGUpKXJldHVybiEwO2NvbnN0IHQ9dGhpcy5fZmFjdG9yaWVzLmdldChlKTtyZXR1cm4hKHQmJiF0LmlzUmVzb2x2ZWQpfXNldENvbG9yTWFwKGUpe3RoaXMuX2NvbG9yTWFwPWUsdGhpcy5fb25EaWRDaGFuZ2UuZmlyZSh7Y2hhbmdlZExhbmd1YWdlczpBcnJheS5mcm9tKHRoaXMuX21hcC5rZXlzKCkpLGNoYW5nZWRDb2xvck1hcDohMH0pfWdldENvbG9yTWFwKCl7cmV0dXJuIHRoaXMuX2NvbG9yTWFwfWdldERlZmF1bHRCYWNrZ3JvdW5kKCl7cmV0dXJuIHRoaXMuX2NvbG9yTWFwJiZ0aGlzLl9jb2xvck1hcC5sZW5ndGg+Mj90aGlzLl9jb2xvck1hcFsyXTpudWxsfX0sZnVuY3Rpb24oZSl7ZVtlLlVua25vd249MF09IlVua25vd24iLGVbZS5EaXNhYmxlZD0xXT0iRGlzYWJsZWQiLGVbZS5FbmFibGVkPTJdPSJFbmFibGVkIn0oWHR8fChYdD17fSkpLGZ1bmN0aW9uKGUpe2VbZS5JbnZva2U9MV09Ikludm9rZSIsZVtlLkF1dG89Ml09IkF1dG8ifShadHx8KFp0PXt9KSksZnVuY3Rpb24oZSl7ZVtlLktlZXBXaGl0ZXNwYWNlPTFdPSJLZWVwV2hpdGVzcGFjZSIsZVtlLkluc2VydEFzU25pcHBldD00XT0iSW5zZXJ0QXNTbmlwcGV0In0oWXR8fChZdD17fSkpLGZ1bmN0aW9uKGUpe2VbZS5NZXRob2Q9MF09Ik1ldGhvZCIsZVtlLkZ1bmN0aW9uPTFdPSJGdW5jdGlvbiIsZVtlLkNvbnN0cnVjdG9yPTJdPSJDb25zdHJ1Y3RvciIsZVtlLkZpZWxkPTNdPSJGaWVsZCIsZVtlLlZhcmlhYmxlPTRdPSJWYXJpYWJsZSIsZVtlLkNsYXNzPTVdPSJDbGFzcyIsZVtlLlN0cnVjdD02XT0iU3RydWN0IixlW2UuSW50ZXJmYWNlPTddPSJJbnRlcmZhY2UiLGVbZS5Nb2R1bGU9OF09Ik1vZHVsZSIsZVtlLlByb3BlcnR5PTldPSJQcm9wZXJ0eSIsZVtlLkV2ZW50PTEwXT0iRXZlbnQiLGVbZS5PcGVyYXRvcj0xMV09Ik9wZXJhdG9yIixlW2UuVW5pdD0xMl09IlVuaXQiLGVbZS5WYWx1ZT0xM109IlZhbHVlIixlW2UuQ29uc3RhbnQ9MTRdPSJDb25zdGFudCIsZVtlLkVudW09MTVdPSJFbnVtIixlW2UuRW51bU1lbWJlcj0xNl09IkVudW1NZW1iZXIiLGVbZS5LZXl3b3JkPTE3XT0iS2V5d29yZCIsZVtlLlRleHQ9MThdPSJUZXh0IixlW2UuQ29sb3I9MTldPSJDb2xvciIsZVtlLkZpbGU9MjBdPSJGaWxlIixlW2UuUmVmZXJlbmNlPTIxXT0iUmVmZXJlbmNlIixlW2UuQ3VzdG9tY29sb3I9MjJdPSJDdXN0b21jb2xvciIsZVtlLkZvbGRlcj0yM109IkZvbGRlciIsZVtlLlR5cGVQYXJhbWV0ZXI9MjRdPSJUeXBlUGFyYW1ldGVyIixlW2UuVXNlcj0yNV09IlVzZXIiLGVbZS5Jc3N1ZT0yNl09Iklzc3VlIixlW2UuU25pcHBldD0yN109IlNuaXBwZXQifShRdHx8KFF0PXt9KSksZnVuY3Rpb24oZSl7ZVtlLkRlcHJlY2F0ZWQ9MV09IkRlcHJlY2F0ZWQifShlbnx8KGVuPXt9KSksZnVuY3Rpb24oZSl7ZVtlLkludm9rZT0wXT0iSW52b2tlIixlW2UuVHJpZ2dlckNoYXJhY3Rlcj0xXT0iVHJpZ2dlckNoYXJhY3RlciIsZVtlLlRyaWdnZXJGb3JJbmNvbXBsZXRlQ29tcGxldGlvbnM9Ml09IlRyaWdnZXJGb3JJbmNvbXBsZXRlQ29tcGxldGlvbnMifSh0bnx8KHRuPXt9KSksZnVuY3Rpb24oZSl7ZVtlLkVYQUNUPTBdPSJFWEFDVCIsZVtlLkFCT1ZFPTFdPSJBQk9WRSIsZVtlLkJFTE9XPTJdPSJCRUxPVyJ9KG5ufHwobm49e30pKSxmdW5jdGlvbihlKXtlW2UuTm90U2V0PTBdPSJOb3RTZXQiLGVbZS5Db250ZW50Rmx1c2g9MV09IkNvbnRlbnRGbHVzaCIsZVtlLlJlY292ZXJGcm9tTWFya2Vycz0yXT0iUmVjb3ZlckZyb21NYXJrZXJzIixlW2UuRXhwbGljaXQ9M109IkV4cGxpY2l0IixlW2UuUGFzdGU9NF09IlBhc3RlIixlW2UuVW5kbz01XT0iVW5kbyIsZVtlLlJlZG89Nl09IlJlZG8ifShybnx8KHJuPXt9KSksZnVuY3Rpb24oZSl7ZVtlLkxGPTFdPSJMRiIsZVtlLkNSTEY9Ml09IkNSTEYifShvbnx8KG9uPXt9KSksZnVuY3Rpb24oZSl7ZVtlLlRleHQ9MF09IlRleHQiLGVbZS5SZWFkPTFdPSJSZWFkIixlW2UuV3JpdGU9Ml09IldyaXRlIn0oYW58fChhbj17fSkpLGZ1bmN0aW9uKGUpe2VbZS5Ob25lPTBdPSJOb25lIixlW2UuS2VlcD0xXT0iS2VlcCIsZVtlLkJyYWNrZXRzPTJdPSJCcmFja2V0cyIsZVtlLkFkdmFuY2VkPTNdPSJBZHZhbmNlZCIsZVtlLkZ1bGw9NF09IkZ1bGwifShzbnx8KHNuPXt9KSksZnVuY3Rpb24oZSl7ZVtlLmFjY2VwdFN1Z2dlc3Rpb25PbkNvbW1pdENoYXJhY3Rlcj0wXT0iYWNjZXB0U3VnZ2VzdGlvbk9uQ29tbWl0Q2hhcmFjdGVyIixlW2UuYWNjZXB0U3VnZ2VzdGlvbk9uRW50ZXI9MV09ImFjY2VwdFN1Z2dlc3Rpb25PbkVudGVyIixlW2UuYWNjZXNzaWJpbGl0eVN1cHBvcnQ9Ml09ImFjY2Vzc2liaWxpdHlTdXBwb3J0IixlW2UuYWNjZXNzaWJpbGl0eVBhZ2VTaXplPTNdPSJhY2Nlc3NpYmlsaXR5UGFnZVNpemUiLGVbZS5hcmlhTGFiZWw9NF09ImFyaWFMYWJlbCIsZVtlLmF1dG9DbG9zaW5nQnJhY2tldHM9NV09ImF1dG9DbG9zaW5nQnJhY2tldHMiLGVbZS5hdXRvQ2xvc2luZ0RlbGV0ZT02XT0iYXV0b0Nsb3NpbmdEZWxldGUiLGVbZS5hdXRvQ2xvc2luZ092ZXJ0eXBlPTddPSJhdXRvQ2xvc2luZ092ZXJ0eXBlIixlW2UuYXV0b0Nsb3NpbmdRdW90ZXM9OF09ImF1dG9DbG9zaW5nUXVvdGVzIixlW2UuYXV0b0luZGVudD05XT0iYXV0b0luZGVudCIsZVtlLmF1dG9tYXRpY0xheW91dD0xMF09ImF1dG9tYXRpY0xheW91dCIsZVtlLmF1dG9TdXJyb3VuZD0xMV09ImF1dG9TdXJyb3VuZCIsZVtlLmJyYWNrZXRQYWlyQ29sb3JpemF0aW9uPTEyXT0iYnJhY2tldFBhaXJDb2xvcml6YXRpb24iLGVbZS5ndWlkZXM9MTNdPSJndWlkZXMiLGVbZS5jb2RlTGVucz0xNF09ImNvZGVMZW5zIixlW2UuY29kZUxlbnNGb250RmFtaWx5PTE1XT0iY29kZUxlbnNGb250RmFtaWx5IixlW2UuY29kZUxlbnNGb250U2l6ZT0xNl09ImNvZGVMZW5zRm9udFNpemUiLGVbZS5jb2xvckRlY29yYXRvcnM9MTddPSJjb2xvckRlY29yYXRvcnMiLGVbZS5jb2x1bW5TZWxlY3Rpb249MThdPSJjb2x1bW5TZWxlY3Rpb24iLGVbZS5jb21tZW50cz0xOV09ImNvbW1lbnRzIixlW2UuY29udGV4dG1lbnU9MjBdPSJjb250ZXh0bWVudSIsZVtlLmNvcHlXaXRoU3ludGF4SGlnaGxpZ2h0aW5nPTIxXT0iY29weVdpdGhTeW50YXhIaWdobGlnaHRpbmciLGVbZS5jdXJzb3JCbGlua2luZz0yMl09ImN1cnNvckJsaW5raW5nIixlW2UuY3Vyc29yU21vb3RoQ2FyZXRBbmltYXRpb249MjNdPSJjdXJzb3JTbW9vdGhDYXJldEFuaW1hdGlvbiIsZVtlLmN1cnNvclN0eWxlPTI0XT0iY3Vyc29yU3R5bGUiLGVbZS5jdXJzb3JTdXJyb3VuZGluZ0xpbmVzPTI1XT0iY3Vyc29yU3Vycm91bmRpbmdMaW5lcyIsZVtlLmN1cnNvclN1cnJvdW5kaW5nTGluZXNTdHlsZT0yNl09ImN1cnNvclN1cnJvdW5kaW5nTGluZXNTdHlsZSIsZVtlLmN1cnNvcldpZHRoPTI3XT0iY3Vyc29yV2lkdGgiLGVbZS5kaXNhYmxlTGF5ZXJIaW50aW5nPTI4XT0iZGlzYWJsZUxheWVySGludGluZyIsZVtlLmRpc2FibGVNb25vc3BhY2VPcHRpbWl6YXRpb25zPTI5XT0iZGlzYWJsZU1vbm9zcGFjZU9wdGltaXphdGlvbnMiLGVbZS5kb21SZWFkT25seT0zMF09ImRvbVJlYWRPbmx5IixlW2UuZHJhZ0FuZERyb3A9MzFdPSJkcmFnQW5kRHJvcCIsZVtlLmRyb3BJbnRvRWRpdG9yPTMyXT0iZHJvcEludG9FZGl0b3IiLGVbZS5lbXB0eVNlbGVjdGlvbkNsaXBib2FyZD0zM109ImVtcHR5U2VsZWN0aW9uQ2xpcGJvYXJkIixlW2UuZXhwZXJpbWVudGFsPTM0XT0iZXhwZXJpbWVudGFsIixlW2UuZXh0cmFFZGl0b3JDbGFzc05hbWU9MzVdPSJleHRyYUVkaXRvckNsYXNzTmFtZSIsZVtlLmZhc3RTY3JvbGxTZW5zaXRpdml0eT0zNl09ImZhc3RTY3JvbGxTZW5zaXRpdml0eSIsZVtlLmZpbmQ9MzddPSJmaW5kIixlW2UuZml4ZWRPdmVyZmxvd1dpZGdldHM9MzhdPSJmaXhlZE92ZXJmbG93V2lkZ2V0cyIsZVtlLmZvbGRpbmc9MzldPSJmb2xkaW5nIixlW2UuZm9sZGluZ1N0cmF0ZWd5PTQwXT0iZm9sZGluZ1N0cmF0ZWd5IixlW2UuZm9sZGluZ0hpZ2hsaWdodD00MV09ImZvbGRpbmdIaWdobGlnaHQiLGVbZS5mb2xkaW5nSW1wb3J0c0J5RGVmYXVsdD00Ml09ImZvbGRpbmdJbXBvcnRzQnlEZWZhdWx0IixlW2UuZm9sZGluZ01heGltdW1SZWdpb25zPTQzXT0iZm9sZGluZ01heGltdW1SZWdpb25zIixlW2UudW5mb2xkT25DbGlja0FmdGVyRW5kT2ZMaW5lPTQ0XT0idW5mb2xkT25DbGlja0FmdGVyRW5kT2ZMaW5lIixlW2UuZm9udEZhbWlseT00NV09ImZvbnRGYW1pbHkiLGVbZS5mb250SW5mbz00Nl09ImZvbnRJbmZvIixlW2UuZm9udExpZ2F0dXJlcz00N109ImZvbnRMaWdhdHVyZXMiLGVbZS5mb250U2l6ZT00OF09ImZvbnRTaXplIixlW2UuZm9udFdlaWdodD00OV09ImZvbnRXZWlnaHQiLGVbZS5mb3JtYXRPblBhc3RlPTUwXT0iZm9ybWF0T25QYXN0ZSIsZVtlLmZvcm1hdE9uVHlwZT01MV09ImZvcm1hdE9uVHlwZSIsZVtlLmdseXBoTWFyZ2luPTUyXT0iZ2x5cGhNYXJnaW4iLGVbZS5nb3RvTG9jYXRpb249NTNdPSJnb3RvTG9jYXRpb24iLGVbZS5oaWRlQ3Vyc29ySW5PdmVydmlld1J1bGVyPTU0XT0iaGlkZUN1cnNvckluT3ZlcnZpZXdSdWxlciIsZVtlLmhvdmVyPTU1XT0iaG92ZXIiLGVbZS5pbkRpZmZFZGl0b3I9NTZdPSJpbkRpZmZFZGl0b3IiLGVbZS5pbmxpbmVTdWdnZXN0PTU3XT0iaW5saW5lU3VnZ2VzdCIsZVtlLmxldHRlclNwYWNpbmc9NThdPSJsZXR0ZXJTcGFjaW5nIixlW2UubGlnaHRidWxiPTU5XT0ibGlnaHRidWxiIixlW2UubGluZURlY29yYXRpb25zV2lkdGg9NjBdPSJsaW5lRGVjb3JhdGlvbnNXaWR0aCIsZVtlLmxpbmVIZWlnaHQ9NjFdPSJsaW5lSGVpZ2h0IixlW2UubGluZU51bWJlcnM9NjJdPSJsaW5lTnVtYmVycyIsZVtlLmxpbmVOdW1iZXJzTWluQ2hhcnM9NjNdPSJsaW5lTnVtYmVyc01pbkNoYXJzIixlW2UubGlua2VkRWRpdGluZz02NF09ImxpbmtlZEVkaXRpbmciLGVbZS5saW5rcz02NV09ImxpbmtzIixlW2UubWF0Y2hCcmFja2V0cz02Nl09Im1hdGNoQnJhY2tldHMiLGVbZS5taW5pbWFwPTY3XT0ibWluaW1hcCIsZVtlLm1vdXNlU3R5bGU9NjhdPSJtb3VzZVN0eWxlIixlW2UubW91c2VXaGVlbFNjcm9sbFNlbnNpdGl2aXR5PTY5XT0ibW91c2VXaGVlbFNjcm9sbFNlbnNpdGl2aXR5IixlW2UubW91c2VXaGVlbFpvb209NzBdPSJtb3VzZVdoZWVsWm9vbSIsZVtlLm11bHRpQ3Vyc29yTWVyZ2VPdmVybGFwcGluZz03MV09Im11bHRpQ3Vyc29yTWVyZ2VPdmVybGFwcGluZyIsZVtlLm11bHRpQ3Vyc29yTW9kaWZpZXI9NzJdPSJtdWx0aUN1cnNvck1vZGlmaWVyIixlW2UubXVsdGlDdXJzb3JQYXN0ZT03M109Im11bHRpQ3Vyc29yUGFzdGUiLGVbZS5vY2N1cnJlbmNlc0hpZ2hsaWdodD03NF09Im9jY3VycmVuY2VzSGlnaGxpZ2h0IixlW2Uub3ZlcnZpZXdSdWxlckJvcmRlcj03NV09Im92ZXJ2aWV3UnVsZXJCb3JkZXIiLGVbZS5vdmVydmlld1J1bGVyTGFuZXM9NzZdPSJvdmVydmlld1J1bGVyTGFuZXMiLGVbZS5wYWRkaW5nPTc3XT0icGFkZGluZyIsZVtlLnBhcmFtZXRlckhpbnRzPTc4XT0icGFyYW1ldGVySGludHMiLGVbZS5wZWVrV2lkZ2V0RGVmYXVsdEZvY3VzPTc5XT0icGVla1dpZGdldERlZmF1bHRGb2N1cyIsZVtlLmRlZmluaXRpb25MaW5rT3BlbnNJblBlZWs9ODBdPSJkZWZpbml0aW9uTGlua09wZW5zSW5QZWVrIixlW2UucXVpY2tTdWdnZXN0aW9ucz04MV09InF1aWNrU3VnZ2VzdGlvbnMiLGVbZS5xdWlja1N1Z2dlc3Rpb25zRGVsYXk9ODJdPSJxdWlja1N1Z2dlc3Rpb25zRGVsYXkiLGVbZS5yZWFkT25seT04M109InJlYWRPbmx5IixlW2UucmVuYW1lT25UeXBlPTg0XT0icmVuYW1lT25UeXBlIixlW2UucmVuZGVyQ29udHJvbENoYXJhY3RlcnM9ODVdPSJyZW5kZXJDb250cm9sQ2hhcmFjdGVycyIsZVtlLnJlbmRlckZpbmFsTmV3bGluZT04Nl09InJlbmRlckZpbmFsTmV3bGluZSIsZVtlLnJlbmRlckxpbmVIaWdobGlnaHQ9ODddPSJyZW5kZXJMaW5lSGlnaGxpZ2h0IixlW2UucmVuZGVyTGluZUhpZ2hsaWdodE9ubHlXaGVuRm9jdXM9ODhdPSJyZW5kZXJMaW5lSGlnaGxpZ2h0T25seVdoZW5Gb2N1cyIsZVtlLnJlbmRlclZhbGlkYXRpb25EZWNvcmF0aW9ucz04OV09InJlbmRlclZhbGlkYXRpb25EZWNvcmF0aW9ucyIsZVtlLnJlbmRlcldoaXRlc3BhY2U9OTBdPSJyZW5kZXJXaGl0ZXNwYWNlIixlW2UucmV2ZWFsSG9yaXpvbnRhbFJpZ2h0UGFkZGluZz05MV09InJldmVhbEhvcml6b250YWxSaWdodFBhZGRpbmciLGVbZS5yb3VuZGVkU2VsZWN0aW9uPTkyXT0icm91bmRlZFNlbGVjdGlvbiIsZVtlLnJ1bGVycz05M109InJ1bGVycyIsZVtlLnNjcm9sbGJhcj05NF09InNjcm9sbGJhciIsZVtlLnNjcm9sbEJleW9uZExhc3RDb2x1bW49OTVdPSJzY3JvbGxCZXlvbmRMYXN0Q29sdW1uIixlW2Uuc2Nyb2xsQmV5b25kTGFzdExpbmU9OTZdPSJzY3JvbGxCZXlvbmRMYXN0TGluZSIsZVtlLnNjcm9sbFByZWRvbWluYW50QXhpcz05N109InNjcm9sbFByZWRvbWluYW50QXhpcyIsZVtlLnNlbGVjdGlvbkNsaXBib2FyZD05OF09InNlbGVjdGlvbkNsaXBib2FyZCIsZVtlLnNlbGVjdGlvbkhpZ2hsaWdodD05OV09InNlbGVjdGlvbkhpZ2hsaWdodCIsZVtlLnNlbGVjdE9uTGluZU51bWJlcnM9MTAwXT0ic2VsZWN0T25MaW5lTnVtYmVycyIsZVtlLnNob3dGb2xkaW5nQ29udHJvbHM9MTAxXT0ic2hvd0ZvbGRpbmdDb250cm9scyIsZVtlLnNob3dVbnVzZWQ9MTAyXT0ic2hvd1VudXNlZCIsZVtlLnNuaXBwZXRTdWdnZXN0aW9ucz0xMDNdPSJzbmlwcGV0U3VnZ2VzdGlvbnMiLGVbZS5zbWFydFNlbGVjdD0xMDRdPSJzbWFydFNlbGVjdCIsZVtlLnNtb290aFNjcm9sbGluZz0xMDVdPSJzbW9vdGhTY3JvbGxpbmciLGVbZS5zdGlja3lUYWJTdG9wcz0xMDZdPSJzdGlja3lUYWJTdG9wcyIsZVtlLnN0b3BSZW5kZXJpbmdMaW5lQWZ0ZXI9MTA3XT0ic3RvcFJlbmRlcmluZ0xpbmVBZnRlciIsZVtlLnN1Z2dlc3Q9MTA4XT0ic3VnZ2VzdCIsZVtlLnN1Z2dlc3RGb250U2l6ZT0xMDldPSJzdWdnZXN0Rm9udFNpemUiLGVbZS5zdWdnZXN0TGluZUhlaWdodD0xMTBdPSJzdWdnZXN0TGluZUhlaWdodCIsZVtlLnN1Z2dlc3RPblRyaWdnZXJDaGFyYWN0ZXJzPTExMV09InN1Z2dlc3RPblRyaWdnZXJDaGFyYWN0ZXJzIixlW2Uuc3VnZ2VzdFNlbGVjdGlvbj0xMTJdPSJzdWdnZXN0U2VsZWN0aW9uIixlW2UudGFiQ29tcGxldGlvbj0xMTNdPSJ0YWJDb21wbGV0aW9uIixlW2UudGFiSW5kZXg9MTE0XT0idGFiSW5kZXgiLGVbZS51bmljb2RlSGlnaGxpZ2h0aW5nPTExNV09InVuaWNvZGVIaWdobGlnaHRpbmciLGVbZS51bnVzdWFsTGluZVRlcm1pbmF0b3JzPTExNl09InVudXN1YWxMaW5lVGVybWluYXRvcnMiLGVbZS51c2VTaGFkb3dET009MTE3XT0idXNlU2hhZG93RE9NIixlW2UudXNlVGFiU3RvcHM9MTE4XT0idXNlVGFiU3RvcHMiLGVbZS53b3JkU2VwYXJhdG9ycz0xMTldPSJ3b3JkU2VwYXJhdG9ycyIsZVtlLndvcmRXcmFwPTEyMF09IndvcmRXcmFwIixlW2Uud29yZFdyYXBCcmVha0FmdGVyQ2hhcmFjdGVycz0xMjFdPSJ3b3JkV3JhcEJyZWFrQWZ0ZXJDaGFyYWN0ZXJzIixlW2Uud29yZFdyYXBCcmVha0JlZm9yZUNoYXJhY3RlcnM9MTIyXT0id29yZFdyYXBCcmVha0JlZm9yZUNoYXJhY3RlcnMiLGVbZS53b3JkV3JhcENvbHVtbj0xMjNdPSJ3b3JkV3JhcENvbHVtbiIsZVtlLndvcmRXcmFwT3ZlcnJpZGUxPTEyNF09IndvcmRXcmFwT3ZlcnJpZGUxIixlW2Uud29yZFdyYXBPdmVycmlkZTI9MTI1XT0id29yZFdyYXBPdmVycmlkZTIiLGVbZS53cmFwcGluZ0luZGVudD0xMjZdPSJ3cmFwcGluZ0luZGVudCIsZVtlLndyYXBwaW5nU3RyYXRlZ3k9MTI3XT0id3JhcHBpbmdTdHJhdGVneSIsZVtlLnNob3dEZXByZWNhdGVkPTEyOF09InNob3dEZXByZWNhdGVkIixlW2UuaW5sYXlIaW50cz0xMjldPSJpbmxheUhpbnRzIixlW2UuZWRpdG9yQ2xhc3NOYW1lPTEzMF09ImVkaXRvckNsYXNzTmFtZSIsZVtlLnBpeGVsUmF0aW89MTMxXT0icGl4ZWxSYXRpbyIsZVtlLnRhYkZvY3VzTW9kZT0xMzJdPSJ0YWJGb2N1c01vZGUiLGVbZS5sYXlvdXRJbmZvPTEzM109ImxheW91dEluZm8iLGVbZS53cmFwcGluZ0luZm89MTM0XT0id3JhcHBpbmdJbmZvIn0oY258fChjbj17fSkpLGZ1bmN0aW9uKGUpe2VbZS5UZXh0RGVmaW5lZD0wXT0iVGV4dERlZmluZWQiLGVbZS5MRj0xXT0iTEYiLGVbZS5DUkxGPTJdPSJDUkxGIn0obG58fChsbj17fSkpLGZ1bmN0aW9uKGUpe2VbZS5MRj0wXT0iTEYiLGVbZS5DUkxGPTFdPSJDUkxGIn0odW58fCh1bj17fSkpLGZ1bmN0aW9uKGUpe2VbZS5Ob25lPTBdPSJOb25lIixlW2UuSW5kZW50PTFdPSJJbmRlbnQiLGVbZS5JbmRlbnRPdXRkZW50PTJdPSJJbmRlbnRPdXRkZW50IixlW2UuT3V0ZGVudD0zXT0iT3V0ZGVudCJ9KGhufHwoaG49e30pKSxmdW5jdGlvbihlKXtlW2UuQm90aD0wXT0iQm90aCIsZVtlLlJpZ2h0PTFdPSJSaWdodCIsZVtlLkxlZnQ9Ml09IkxlZnQiLGVbZS5Ob25lPTNdPSJOb25lIn0oZm58fChmbj17fSkpLGZ1bmN0aW9uKGUpe2VbZS5UeXBlPTFdPSJUeXBlIixlW2UuUGFyYW1ldGVyPTJdPSJQYXJhbWV0ZXIifShkbnx8KGRuPXt9KSksZnVuY3Rpb24oZSl7ZVtlLkF1dG9tYXRpYz0wXT0iQXV0b21hdGljIixlW2UuRXhwbGljaXQ9MV09IkV4cGxpY2l0In0obW58fChtbj17fSkpLGZ1bmN0aW9uKGUpe2VbZS5EZXBlbmRzT25LYkxheW91dD0tMV09IkRlcGVuZHNPbktiTGF5b3V0IixlW2UuVW5rbm93bj0wXT0iVW5rbm93biIsZVtlLkJhY2tzcGFjZT0xXT0iQmFja3NwYWNlIixlW2UuVGFiPTJdPSJUYWIiLGVbZS5FbnRlcj0zXT0iRW50ZXIiLGVbZS5TaGlmdD00XT0iU2hpZnQiLGVbZS5DdHJsPTVdPSJDdHJsIixlW2UuQWx0PTZdPSJBbHQiLGVbZS5QYXVzZUJyZWFrPTddPSJQYXVzZUJyZWFrIixlW2UuQ2Fwc0xvY2s9OF09IkNhcHNMb2NrIixlW2UuRXNjYXBlPTldPSJFc2NhcGUiLGVbZS5TcGFjZT0xMF09IlNwYWNlIixlW2UuUGFnZVVwPTExXT0iUGFnZVVwIixlW2UuUGFnZURvd249MTJdPSJQYWdlRG93biIsZVtlLkVuZD0xM109IkVuZCIsZVtlLkhvbWU9MTRdPSJIb21lIixlW2UuTGVmdEFycm93PTE1XT0iTGVmdEFycm93IixlW2UuVXBBcnJvdz0xNl09IlVwQXJyb3ciLGVbZS5SaWdodEFycm93PTE3XT0iUmlnaHRBcnJvdyIsZVtlLkRvd25BcnJvdz0xOF09IkRvd25BcnJvdyIsZVtlLkluc2VydD0xOV09Ikluc2VydCIsZVtlLkRlbGV0ZT0yMF09IkRlbGV0ZSIsZVtlLkRpZ2l0MD0yMV09IkRpZ2l0MCIsZVtlLkRpZ2l0MT0yMl09IkRpZ2l0MSIsZVtlLkRpZ2l0Mj0yM109IkRpZ2l0MiIsZVtlLkRpZ2l0Mz0yNF09IkRpZ2l0MyIsZVtlLkRpZ2l0ND0yNV09IkRpZ2l0NCIsZVtlLkRpZ2l0NT0yNl09IkRpZ2l0NSIsZVtlLkRpZ2l0Nj0yN109IkRpZ2l0NiIsZVtlLkRpZ2l0Nz0yOF09IkRpZ2l0NyIsZVtlLkRpZ2l0OD0yOV09IkRpZ2l0OCIsZVtlLkRpZ2l0OT0zMF09IkRpZ2l0OSIsZVtlLktleUE9MzFdPSJLZXlBIixlW2UuS2V5Qj0zMl09IktleUIiLGVbZS5LZXlDPTMzXT0iS2V5QyIsZVtlLktleUQ9MzRdPSJLZXlEIixlW2UuS2V5RT0zNV09IktleUUiLGVbZS5LZXlGPTM2XT0iS2V5RiIsZVtlLktleUc9MzddPSJLZXlHIixlW2UuS2V5SD0zOF09IktleUgiLGVbZS5LZXlJPTM5XT0iS2V5SSIsZVtlLktleUo9NDBdPSJLZXlKIixlW2UuS2V5Sz00MV09IktleUsiLGVbZS5LZXlMPTQyXT0iS2V5TCIsZVtlLktleU09NDNdPSJLZXlNIixlW2UuS2V5Tj00NF09IktleU4iLGVbZS5LZXlPPTQ1XT0iS2V5TyIsZVtlLktleVA9NDZdPSJLZXlQIixlW2UuS2V5UT00N109IktleVEiLGVbZS5LZXlSPTQ4XT0iS2V5UiIsZVtlLktleVM9NDldPSJLZXlTIixlW2UuS2V5VD01MF09IktleVQiLGVbZS5LZXlVPTUxXT0iS2V5VSIsZVtlLktleVY9NTJdPSJLZXlWIixlW2UuS2V5Vz01M109IktleVciLGVbZS5LZXlYPTU0XT0iS2V5WCIsZVtlLktleVk9NTVdPSJLZXlZIixlW2UuS2V5Wj01Nl09IktleVoiLGVbZS5NZXRhPTU3XT0iTWV0YSIsZVtlLkNvbnRleHRNZW51PTU4XT0iQ29udGV4dE1lbnUiLGVbZS5GMT01OV09IkYxIixlW2UuRjI9NjBdPSJGMiIsZVtlLkYzPTYxXT0iRjMiLGVbZS5GND02Ml09IkY0IixlW2UuRjU9NjNdPSJGNSIsZVtlLkY2PTY0XT0iRjYiLGVbZS5GNz02NV09IkY3IixlW2UuRjg9NjZdPSJGOCIsZVtlLkY5PTY3XT0iRjkiLGVbZS5GMTA9NjhdPSJGMTAiLGVbZS5GMTE9NjldPSJGMTEiLGVbZS5GMTI9NzBdPSJGMTIiLGVbZS5GMTM9NzFdPSJGMTMiLGVbZS5GMTQ9NzJdPSJGMTQiLGVbZS5GMTU9NzNdPSJGMTUiLGVbZS5GMTY9NzRdPSJGMTYiLGVbZS5GMTc9NzVdPSJGMTciLGVbZS5GMTg9NzZdPSJGMTgiLGVbZS5GMTk9NzddPSJGMTkiLGVbZS5OdW1Mb2NrPTc4XT0iTnVtTG9jayIsZVtlLlNjcm9sbExvY2s9NzldPSJTY3JvbGxMb2NrIixlW2UuU2VtaWNvbG9uPTgwXT0iU2VtaWNvbG9uIixlW2UuRXF1YWw9ODFdPSJFcXVhbCIsZVtlLkNvbW1hPTgyXT0iQ29tbWEiLGVbZS5NaW51cz04M109Ik1pbnVzIixlW2UuUGVyaW9kPTg0XT0iUGVyaW9kIixlW2UuU2xhc2g9ODVdPSJTbGFzaCIsZVtlLkJhY2txdW90ZT04Nl09IkJhY2txdW90ZSIsZVtlLkJyYWNrZXRMZWZ0PTg3XT0iQnJhY2tldExlZnQiLGVbZS5CYWNrc2xhc2g9ODhdPSJCYWNrc2xhc2giLGVbZS5CcmFja2V0UmlnaHQ9ODldPSJCcmFja2V0UmlnaHQiLGVbZS5RdW90ZT05MF09IlF1b3RlIixlW2UuT0VNXzg9OTFdPSJPRU1fOCIsZVtlLkludGxCYWNrc2xhc2g9OTJdPSJJbnRsQmFja3NsYXNoIixlW2UuTnVtcGFkMD05M109Ik51bXBhZDAiLGVbZS5OdW1wYWQxPTk0XT0iTnVtcGFkMSIsZVtlLk51bXBhZDI9OTVdPSJOdW1wYWQyIixlW2UuTnVtcGFkMz05Nl09Ik51bXBhZDMiLGVbZS5OdW1wYWQ0PTk3XT0iTnVtcGFkNCIsZVtlLk51bXBhZDU9OThdPSJOdW1wYWQ1IixlW2UuTnVtcGFkNj05OV09Ik51bXBhZDYiLGVbZS5OdW1wYWQ3PTEwMF09Ik51bXBhZDciLGVbZS5OdW1wYWQ4PTEwMV09Ik51bXBhZDgiLGVbZS5OdW1wYWQ5PTEwMl09Ik51bXBhZDkiLGVbZS5OdW1wYWRNdWx0aXBseT0xMDNdPSJOdW1wYWRNdWx0aXBseSIsZVtlLk51bXBhZEFkZD0xMDRdPSJOdW1wYWRBZGQiLGVbZS5OVU1QQURfU0VQQVJBVE9SPTEwNV09Ik5VTVBBRF9TRVBBUkFUT1IiLGVbZS5OdW1wYWRTdWJ0cmFjdD0xMDZdPSJOdW1wYWRTdWJ0cmFjdCIsZVtlLk51bXBhZERlY2ltYWw9MTA3XT0iTnVtcGFkRGVjaW1hbCIsZVtlLk51bXBhZERpdmlkZT0xMDhdPSJOdW1wYWREaXZpZGUiLGVbZS5LRVlfSU5fQ09NUE9TSVRJT049MTA5XT0iS0VZX0lOX0NPTVBPU0lUSU9OIixlW2UuQUJOVF9DMT0xMTBdPSJBQk5UX0MxIixlW2UuQUJOVF9DMj0xMTFdPSJBQk5UX0MyIixlW2UuQXVkaW9Wb2x1bWVNdXRlPTExMl09IkF1ZGlvVm9sdW1lTXV0ZSIsZVtlLkF1ZGlvVm9sdW1lVXA9MTEzXT0iQXVkaW9Wb2x1bWVVcCIsZVtlLkF1ZGlvVm9sdW1lRG93bj0xMTRdPSJBdWRpb1ZvbHVtZURvd24iLGVbZS5Ccm93c2VyU2VhcmNoPTExNV09IkJyb3dzZXJTZWFyY2giLGVbZS5Ccm93c2VySG9tZT0xMTZdPSJCcm93c2VySG9tZSIsZVtlLkJyb3dzZXJCYWNrPTExN109IkJyb3dzZXJCYWNrIixlW2UuQnJvd3NlckZvcndhcmQ9MTE4XT0iQnJvd3NlckZvcndhcmQiLGVbZS5NZWRpYVRyYWNrTmV4dD0xMTldPSJNZWRpYVRyYWNrTmV4dCIsZVtlLk1lZGlhVHJhY2tQcmV2aW91cz0xMjBdPSJNZWRpYVRyYWNrUHJldmlvdXMiLGVbZS5NZWRpYVN0b3A9MTIxXT0iTWVkaWFTdG9wIixlW2UuTWVkaWFQbGF5UGF1c2U9MTIyXT0iTWVkaWFQbGF5UGF1c2UiLGVbZS5MYXVuY2hNZWRpYVBsYXllcj0xMjNdPSJMYXVuY2hNZWRpYVBsYXllciIsZVtlLkxhdW5jaE1haWw9MTI0XT0iTGF1bmNoTWFpbCIsZVtlLkxhdW5jaEFwcDI9MTI1XT0iTGF1bmNoQXBwMiIsZVtlLkNsZWFyPTEyNl09IkNsZWFyIixlW2UuTUFYX1ZBTFVFPTEyN109Ik1BWF9WQUxVRSJ9KGdufHwoZ249e30pKSxmdW5jdGlvbihlKXtlW2UuSGludD0xXT0iSGludCIsZVtlLkluZm89Ml09IkluZm8iLGVbZS5XYXJuaW5nPTRdPSJXYXJuaW5nIixlW2UuRXJyb3I9OF09IkVycm9yIn0ocG58fChwbj17fSkpLGZ1bmN0aW9uKGUpe2VbZS5Vbm5lY2Vzc2FyeT0xXT0iVW5uZWNlc3NhcnkiLGVbZS5EZXByZWNhdGVkPTJdPSJEZXByZWNhdGVkIn0oYm58fChibj17fSkpLGZ1bmN0aW9uKGUpe2VbZS5JbmxpbmU9MV09IklubGluZSIsZVtlLkd1dHRlcj0yXT0iR3V0dGVyIn0odm58fCh2bj17fSkpLGZ1bmN0aW9uKGUpe2VbZS5VTktOT1dOPTBdPSJVTktOT1dOIixlW2UuVEVYVEFSRUE9MV09IlRFWFRBUkVBIixlW2UuR1VUVEVSX0dMWVBIX01BUkdJTj0yXT0iR1VUVEVSX0dMWVBIX01BUkdJTiIsZVtlLkdVVFRFUl9MSU5FX05VTUJFUlM9M109IkdVVFRFUl9MSU5FX05VTUJFUlMiLGVbZS5HVVRURVJfTElORV9ERUNPUkFUSU9OUz00XT0iR1VUVEVSX0xJTkVfREVDT1JBVElPTlMiLGVbZS5HVVRURVJfVklFV19aT05FPTVdPSJHVVRURVJfVklFV19aT05FIixlW2UuQ09OVEVOVF9URVhUPTZdPSJDT05URU5UX1RFWFQiLGVbZS5DT05URU5UX0VNUFRZPTddPSJDT05URU5UX0VNUFRZIixlW2UuQ09OVEVOVF9WSUVXX1pPTkU9OF09IkNPTlRFTlRfVklFV19aT05FIixlW2UuQ09OVEVOVF9XSURHRVQ9OV09IkNPTlRFTlRfV0lER0VUIixlW2UuT1ZFUlZJRVdfUlVMRVI9MTBdPSJPVkVSVklFV19SVUxFUiIsZVtlLlNDUk9MTEJBUj0xMV09IlNDUk9MTEJBUiIsZVtlLk9WRVJMQVlfV0lER0VUPTEyXT0iT1ZFUkxBWV9XSURHRVQiLGVbZS5PVVRTSURFX0VESVRPUj0xM109Ik9VVFNJREVfRURJVE9SIn0oeW58fCh5bj17fSkpLGZ1bmN0aW9uKGUpe2VbZS5UT1BfUklHSFRfQ09STkVSPTBdPSJUT1BfUklHSFRfQ09STkVSIixlW2UuQk9UVE9NX1JJR0hUX0NPUk5FUj0xXT0iQk9UVE9NX1JJR0hUX0NPUk5FUiIsZVtlLlRPUF9DRU5URVI9Ml09IlRPUF9DRU5URVIifShDbnx8KENuPXt9KSksZnVuY3Rpb24oZSl7ZVtlLkxlZnQ9MV09IkxlZnQiLGVbZS5DZW50ZXI9Ml09IkNlbnRlciIsZVtlLlJpZ2h0PTRdPSJSaWdodCIsZVtlLkZ1bGw9N109IkZ1bGwifSh3bnx8KHduPXt9KSksZnVuY3Rpb24oZSl7ZVtlLkxlZnQ9MF09IkxlZnQiLGVbZS5SaWdodD0xXT0iUmlnaHQiLGVbZS5Ob25lPTJdPSJOb25lIixlW2UuTGVmdE9mSW5qZWN0ZWRUZXh0PTNdPSJMZWZ0T2ZJbmplY3RlZFRleHQiLGVbZS5SaWdodE9mSW5qZWN0ZWRUZXh0PTRdPSJSaWdodE9mSW5qZWN0ZWRUZXh0In0oX258fChfbj17fSkpLGZ1bmN0aW9uKGUpe2VbZS5PZmY9MF09Ik9mZiIsZVtlLk9uPTFdPSJPbiIsZVtlLlJlbGF0aXZlPTJdPSJSZWxhdGl2ZSIsZVtlLkludGVydmFsPTNdPSJJbnRlcnZhbCIsZVtlLkN1c3RvbT00XT0iQ3VzdG9tIn0oU258fChTbj17fSkpLGZ1bmN0aW9uKGUpe2VbZS5Ob25lPTBdPSJOb25lIixlW2UuVGV4dD0xXT0iVGV4dCIsZVtlLkJsb2Nrcz0yXT0iQmxvY2tzIn0oQW58fChBbj17fSkpLGZ1bmN0aW9uKGUpe2VbZS5TbW9vdGg9MF09IlNtb290aCIsZVtlLkltbWVkaWF0ZT0xXT0iSW1tZWRpYXRlIn0oRW58fChFbj17fSkpLGZ1bmN0aW9uKGUpe2VbZS5BdXRvPTFdPSJBdXRvIixlW2UuSGlkZGVuPTJdPSJIaWRkZW4iLGVbZS5WaXNpYmxlPTNdPSJWaXNpYmxlIn0oeG58fCh4bj17fSkpLGZ1bmN0aW9uKGUpe2VbZS5MVFI9MF09IkxUUiIsZVtlLlJUTD0xXT0iUlRMIn0oTm58fChObj17fSkpLGZ1bmN0aW9uKGUpe2VbZS5JbnZva2U9MV09Ikludm9rZSIsZVtlLlRyaWdnZXJDaGFyYWN0ZXI9Ml09IlRyaWdnZXJDaGFyYWN0ZXIiLGVbZS5Db250ZW50Q2hhbmdlPTNdPSJDb250ZW50Q2hhbmdlIn0oa258fChrbj17fSkpLGZ1bmN0aW9uKGUpe2VbZS5GaWxlPTBdPSJGaWxlIixlW2UuTW9kdWxlPTFdPSJNb2R1bGUiLGVbZS5OYW1lc3BhY2U9Ml09Ik5hbWVzcGFjZSIsZVtlLlBhY2thZ2U9M109IlBhY2thZ2UiLGVbZS5DbGFzcz00XT0iQ2xhc3MiLGVbZS5NZXRob2Q9NV09Ik1ldGhvZCIsZVtlLlByb3BlcnR5PTZdPSJQcm9wZXJ0eSIsZVtlLkZpZWxkPTddPSJGaWVsZCIsZVtlLkNvbnN0cnVjdG9yPThdPSJDb25zdHJ1Y3RvciIsZVtlLkVudW09OV09IkVudW0iLGVbZS5JbnRlcmZhY2U9MTBdPSJJbnRlcmZhY2UiLGVbZS5GdW5jdGlvbj0xMV09IkZ1bmN0aW9uIixlW2UuVmFyaWFibGU9MTJdPSJWYXJpYWJsZSIsZVtlLkNvbnN0YW50PTEzXT0iQ29uc3RhbnQiLGVbZS5TdHJpbmc9MTRdPSJTdHJpbmciLGVbZS5OdW1iZXI9MTVdPSJOdW1iZXIiLGVbZS5Cb29sZWFuPTE2XT0iQm9vbGVhbiIsZVtlLkFycmF5PTE3XT0iQXJyYXkiLGVbZS5PYmplY3Q9MThdPSJPYmplY3QiLGVbZS5LZXk9MTldPSJLZXkiLGVbZS5OdWxsPTIwXT0iTnVsbCIsZVtlLkVudW1NZW1iZXI9MjFdPSJFbnVtTWVtYmVyIixlW2UuU3RydWN0PTIyXT0iU3RydWN0IixlW2UuRXZlbnQ9MjNdPSJFdmVudCIsZVtlLk9wZXJhdG9yPTI0XT0iT3BlcmF0b3IiLGVbZS5UeXBlUGFyYW1ldGVyPTI1XT0iVHlwZVBhcmFtZXRlciJ9KExufHwoTG49e30pKSxmdW5jdGlvbihlKXtlW2UuRGVwcmVjYXRlZD0xXT0iRGVwcmVjYXRlZCJ9KFRufHwoVG49e30pKSxmdW5jdGlvbihlKXtlW2UuSGlkZGVuPTBdPSJIaWRkZW4iLGVbZS5CbGluaz0xXT0iQmxpbmsiLGVbZS5TbW9vdGg9Ml09IlNtb290aCIsZVtlLlBoYXNlPTNdPSJQaGFzZSIsZVtlLkV4cGFuZD00XT0iRXhwYW5kIixlW2UuU29saWQ9NV09IlNvbGlkIn0oT258fChPbj17fSkpLGZ1bmN0aW9uKGUpe2VbZS5MaW5lPTFdPSJMaW5lIixlW2UuQmxvY2s9Ml09IkJsb2NrIixlW2UuVW5kZXJsaW5lPTNdPSJVbmRlcmxpbmUiLGVbZS5MaW5lVGhpbj00XT0iTGluZVRoaW4iLGVbZS5CbG9ja091dGxpbmU9NV09IkJsb2NrT3V0bGluZSIsZVtlLlVuZGVybGluZVRoaW49Nl09IlVuZGVybGluZVRoaW4ifShJbnx8KEluPXt9KSksZnVuY3Rpb24oZSl7ZVtlLkFsd2F5c0dyb3dzV2hlblR5cGluZ0F0RWRnZXM9MF09IkFsd2F5c0dyb3dzV2hlblR5cGluZ0F0RWRnZXMiLGVbZS5OZXZlckdyb3dzV2hlblR5cGluZ0F0RWRnZXM9MV09Ik5ldmVyR3Jvd3NXaGVuVHlwaW5nQXRFZGdlcyIsZVtlLkdyb3dzT25seVdoZW5UeXBpbmdCZWZvcmU9Ml09Ikdyb3dzT25seVdoZW5UeXBpbmdCZWZvcmUiLGVbZS5Hcm93c09ubHlXaGVuVHlwaW5nQWZ0ZXI9M109Ikdyb3dzT25seVdoZW5UeXBpbmdBZnRlciJ9KE1ufHwoTW49e30pKSxmdW5jdGlvbihlKXtlW2UuTm9uZT0wXT0iTm9uZSIsZVtlLlNhbWU9MV09IlNhbWUiLGVbZS5JbmRlbnQ9Ml09IkluZGVudCIsZVtlLkRlZXBJbmRlbnQ9M109IkRlZXBJbmRlbnQifShQbnx8KFBuPXt9KSk7Y2xhc3MgVW57c3RhdGljIGNob3JkKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKGUsdCl7cmV0dXJuKGV8KDY1NTM1JnQpPDwxNj4+PjApPj4+MH0oZSx0KX19ZnVuY3Rpb24gQm4oZSx0LG4scixpKXtyZXR1cm4gZnVuY3Rpb24oZSx0LG4scixpKXtpZigwPT09cilyZXR1cm4hMDtjb25zdCBvPXQuY2hhckNvZGVBdChyLTEpO2lmKDAhPT1lLmdldChvKSlyZXR1cm4hMDtpZigxMz09PW98fDEwPT09bylyZXR1cm4hMDtpZihpPjApe2NvbnN0IG49dC5jaGFyQ29kZUF0KHIpO2lmKDAhPT1lLmdldChuKSlyZXR1cm4hMH1yZXR1cm4hMX0oZSx0LDAscixpKSYmZnVuY3Rpb24oZSx0LG4scixpKXtpZihyK2k9PT1uKXJldHVybiEwO2NvbnN0IG89dC5jaGFyQ29kZUF0KHIraSk7aWYoMCE9PWUuZ2V0KG8pKXJldHVybiEwO2lmKDEzPT09b3x8MTA9PT1vKXJldHVybiEwO2lmKGk+MCl7Y29uc3Qgbj10LmNoYXJDb2RlQXQocitpLTEpO2lmKDAhPT1lLmdldChuKSlyZXR1cm4hMH1yZXR1cm4hMX0oZSx0LG4scixpKX1Vbi5DdHJsQ21kPTIwNDgsVW4uU2hpZnQ9MTAyNCxVbi5BbHQ9NTEyLFVuLldpbkN0cmw9MjU2LGZ1bmN0aW9uKGUpe2VbZS5MZWZ0PTFdPSJMZWZ0IixlW2UuQ2VudGVyPTJdPSJDZW50ZXIiLGVbZS5SaWdodD00XT0iUmlnaHQiLGVbZS5GdWxsPTddPSJGdWxsIn0oUm58fChSbj17fSkpLGZ1bmN0aW9uKGUpe2VbZS5JbmxpbmU9MV09IklubGluZSIsZVtlLkd1dHRlcj0yXT0iR3V0dGVyIn0oVm58fChWbj17fSkpLGZ1bmN0aW9uKGUpe2VbZS5Cb3RoPTBdPSJCb3RoIixlW2UuUmlnaHQ9MV09IlJpZ2h0IixlW2UuTGVmdD0yXT0iTGVmdCIsZVtlLk5vbmU9M109Ik5vbmUifShGbnx8KEZuPXt9KSk7Y2xhc3MgcW57Y29uc3RydWN0b3IoZSx0KXt0aGlzLl93b3JkU2VwYXJhdG9ycz1lLHRoaXMuX3NlYXJjaFJlZ2V4PXQsdGhpcy5fcHJldk1hdGNoU3RhcnRJbmRleD0tMSx0aGlzLl9wcmV2TWF0Y2hMZW5ndGg9MH1yZXNldChlKXt0aGlzLl9zZWFyY2hSZWdleC5sYXN0SW5kZXg9ZSx0aGlzLl9wcmV2TWF0Y2hTdGFydEluZGV4PS0xLHRoaXMuX3ByZXZNYXRjaExlbmd0aD0wfW5leHQoZSl7Y29uc3QgdD1lLmxlbmd0aDtsZXQgbjtkb3tpZih0aGlzLl9wcmV2TWF0Y2hTdGFydEluZGV4K3RoaXMuX3ByZXZNYXRjaExlbmd0aD09PXQpcmV0dXJuIG51bGw7aWYobj10aGlzLl9zZWFyY2hSZWdleC5leGVjKGUpLCFuKXJldHVybiBudWxsO2NvbnN0IHI9bi5pbmRleCxpPW5bMF0ubGVuZ3RoO2lmKHI9PT10aGlzLl9wcmV2TWF0Y2hTdGFydEluZGV4JiZpPT09dGhpcy5fcHJldk1hdGNoTGVuZ3RoKXtpZigwPT09aSl7WihlLHQsdGhpcy5fc2VhcmNoUmVnZXgubGFzdEluZGV4KT42NTUzNT90aGlzLl9zZWFyY2hSZWdleC5sYXN0SW5kZXgrPTI6dGhpcy5fc2VhcmNoUmVnZXgubGFzdEluZGV4Kz0xO2NvbnRpbnVlfXJldHVybiBudWxsfWlmKHRoaXMuX3ByZXZNYXRjaFN0YXJ0SW5kZXg9cix0aGlzLl9wcmV2TWF0Y2hMZW5ndGg9aSwhdGhpcy5fd29yZFNlcGFyYXRvcnN8fEJuKHRoaXMuX3dvcmRTZXBhcmF0b3JzLGUsdCxyLGkpKXJldHVybiBufXdoaWxlKG4pO3JldHVybiBudWxsfX1jbGFzcyAkbntzdGF0aWMgY29tcHV0ZVVuaWNvZGVIaWdobGlnaHRzKGUsdCxuKXtjb25zdCByPW4/bi5zdGFydExpbmVOdW1iZXI6MSxpPW4/bi5lbmRMaW5lTnVtYmVyOmUuZ2V0TGluZUNvdW50KCksbz1uZXcgV24odCksYT1vLmdldENhbmRpZGF0ZUNvZGVQb2ludHMoKTtsZXQgczt2YXIgYyxsO3M9ImFsbE5vbkJhc2ljQXNjaWkiPT09YT9uZXcgUmVnRXhwKCJbXlxcdFxcblxcclxceDIwLVxceDdFXSIsImciKTpuZXcgUmVnRXhwKCIiKyhjPUFycmF5LmZyb20oYSksYFske2w9Yy5tYXAoKGU9PlN0cmluZy5mcm9tQ29kZVBvaW50KGUpKSkuam9pbigiIiksbC5yZXBsYWNlKC9bXFxce1x9XCpcK1w/XHxcXlwkXC5cW1xdXChcKV0vZywiXFwkJiIpfV1gKSwiZyIpO2NvbnN0IHU9bmV3IHFuKG51bGwscyksaD1bXTtsZXQgZixkPSExLG09MCxnPTAscD0wO2U6Zm9yKGxldCB0PXIsbj1pO3Q8PW47dCsrKXtjb25zdCBuPWUuZ2V0TGluZUNvbnRlbnQodCkscj1uLmxlbmd0aDt1LnJlc2V0KDApO2Rve2lmKGY9dS5uZXh0KG4pLGYpe2xldCBlPWYuaW5kZXgsaT1mLmluZGV4K2ZbMF0ubGVuZ3RoO2lmKGU+MCl7WChuLmNoYXJDb2RlQXQoZS0xKSkmJmUtLX1pZihpKzE8cil7WChuLmNoYXJDb2RlQXQoaS0xKSkmJmkrK31jb25zdCBhPW4uc3Vic3RyaW5nKGUsaSkscz15dChlKzEsYnQsbiwwKSxjPW8uc2hvdWxkSGlnaGxpZ2h0Tm9uQmFzaWNBU0NJSShhLHM/cy53b3JkOm51bGwpO2lmKDAhPT1jKXszPT09Yz9tKys6Mj09PWM/ZysrOjE9PT1jP3ArKzp6KCk7Y29uc3Qgbj0xZTM7aWYoaC5sZW5ndGg+PW4pe2Q9ITA7YnJlYWsgZX1oLnB1c2gobmV3IHR0KHQsZSsxLHQsaSsxKSl9fX13aGlsZShmKX1yZXR1cm57cmFuZ2VzOmgsaGFzTW9yZTpkLGFtYmlndW91c0NoYXJhY3RlckNvdW50Om0saW52aXNpYmxlQ2hhcmFjdGVyQ291bnQ6Zyxub25CYXNpY0FzY2lpQ2hhcmFjdGVyQ291bnQ6cH19c3RhdGljIGNvbXB1dGVVbmljb2RlSGlnaGxpZ2h0UmVhc29uKGUsdCl7Y29uc3Qgbj1uZXcgV24odCk7c3dpdGNoKG4uc2hvdWxkSGlnaGxpZ2h0Tm9uQmFzaWNBU0NJSShlLG51bGwpKXtjYXNlIDA6cmV0dXJuIG51bGw7Y2FzZSAyOnJldHVybntraW5kOjF9O2Nhc2UgMzp7Y29uc3Qgcj1lLmNvZGVQb2ludEF0KDApLGk9bi5hbWJpZ3VvdXNDaGFyYWN0ZXJzLmdldFByaW1hcnlDb25mdXNhYmxlKHIpLG89US5nZXRMb2NhbGVzKCkuZmlsdGVyKChlPT4hUS5nZXRJbnN0YW5jZShuZXcgU2V0KFsuLi50LmFsbG93ZWRMb2NhbGVzLGVdKSkuaXNBbWJpZ3VvdXMocikpKTtyZXR1cm57a2luZDowLGNvbmZ1c2FibGVXaXRoOlN0cmluZy5mcm9tQ29kZVBvaW50KGkpLG5vdEFtYmlndW91c0luTG9jYWxlczpvfX1jYXNlIDE6cmV0dXJue2tpbmQ6Mn19fX1jbGFzcyBXbntjb25zdHJ1Y3RvcihlKXt0aGlzLm9wdGlvbnM9ZSx0aGlzLmFsbG93ZWRDb2RlUG9pbnRzPW5ldyBTZXQoZS5hbGxvd2VkQ29kZVBvaW50cyksdGhpcy5hbWJpZ3VvdXNDaGFyYWN0ZXJzPVEuZ2V0SW5zdGFuY2UobmV3IFNldChlLmFsbG93ZWRMb2NhbGVzKSl9Z2V0Q2FuZGlkYXRlQ29kZVBvaW50cygpe2lmKHRoaXMub3B0aW9ucy5ub25CYXNpY0FTQ0lJKXJldHVybiJhbGxOb25CYXNpY0FzY2lpIjtjb25zdCBlPW5ldyBTZXQ7aWYodGhpcy5vcHRpb25zLmludmlzaWJsZUNoYXJhY3RlcnMpZm9yKGNvbnN0IHQgb2YgZWUuY29kZVBvaW50cylIbihTdHJpbmcuZnJvbUNvZGVQb2ludCh0KSl8fGUuYWRkKHQpO2lmKHRoaXMub3B0aW9ucy5hbWJpZ3VvdXNDaGFyYWN0ZXJzKWZvcihjb25zdCB0IG9mIHRoaXMuYW1iaWd1b3VzQ2hhcmFjdGVycy5nZXRDb25mdXNhYmxlQ29kZVBvaW50cygpKWUuYWRkKHQpO2Zvcihjb25zdCB0IG9mIHRoaXMuYWxsb3dlZENvZGVQb2ludHMpZS5kZWxldGUodCk7cmV0dXJuIGV9c2hvdWxkSGlnaGxpZ2h0Tm9uQmFzaWNBU0NJSShlLHQpe2NvbnN0IG49ZS5jb2RlUG9pbnRBdCgwKTtpZih0aGlzLmFsbG93ZWRDb2RlUG9pbnRzLmhhcyhuKSlyZXR1cm4gMDtpZih0aGlzLm9wdGlvbnMubm9uQmFzaWNBU0NJSSlyZXR1cm4gMTtsZXQgcj0hMSxpPSExO2lmKHQpZm9yKGNvbnN0IGUgb2YgdCl7Y29uc3QgdD1lLmNvZGVQb2ludEF0KDApLG49KG89ZSxZLnRlc3QobykpO3I9cnx8bixufHx0aGlzLmFtYmlndW91c0NoYXJhY3RlcnMuaXNBbWJpZ3VvdXModCl8fGVlLmlzSW52aXNpYmxlQ2hhcmFjdGVyKHQpfHwoaT0hMCl9dmFyIG87cmV0dXJuIXImJmk/MDp0aGlzLm9wdGlvbnMuaW52aXNpYmxlQ2hhcmFjdGVycyYmIUhuKGUpJiZlZS5pc0ludmlzaWJsZUNoYXJhY3RlcihuKT8yOnRoaXMub3B0aW9ucy5hbWJpZ3VvdXNDaGFyYWN0ZXJzJiZ0aGlzLmFtYmlndW91c0NoYXJhY3RlcnMuaXNBbWJpZ3VvdXMobik/MzowfX1mdW5jdGlvbiBIbihlKXtyZXR1cm4iICI9PT1lfHwiXG4iPT09ZXx8Ilx0Ij09PWV9dmFyIHpuPWZ1bmN0aW9uKGUsdCxuLHIpe3JldHVybiBuZXcobnx8KG49UHJvbWlzZSkpKChmdW5jdGlvbihpLG8pe2Z1bmN0aW9uIGEoZSl7dHJ5e2Moci5uZXh0KGUpKX1jYXRjaChlKXtvKGUpfX1mdW5jdGlvbiBzKGUpe3RyeXtjKHIudGhyb3coZSkpfWNhdGNoKGUpe28oZSl9fWZ1bmN0aW9uIGMoZSl7dmFyIHQ7ZS5kb25lP2koZS52YWx1ZSk6KHQ9ZS52YWx1ZSx0IGluc3RhbmNlb2Ygbj90Om5ldyBuKChmdW5jdGlvbihlKXtlKHQpfSkpKS50aGVuKGEscyl9Yygocj1yLmFwcGx5KGUsdHx8W10pKS5uZXh0KCkpfSkpfTtjbGFzcyBHbiBleHRlbmRzIHB0e2dldCB1cmkoKXtyZXR1cm4gdGhpcy5fdXJpfWdldCBlb2woKXtyZXR1cm4gdGhpcy5fZW9sfWdldFZhbHVlKCl7cmV0dXJuIHRoaXMuZ2V0VGV4dCgpfWdldExpbmVzQ29udGVudCgpe3JldHVybiB0aGlzLl9saW5lcy5zbGljZSgwKX1nZXRMaW5lQ291bnQoKXtyZXR1cm4gdGhpcy5fbGluZXMubGVuZ3RofWdldExpbmVDb250ZW50KGUpe3JldHVybiB0aGlzLl9saW5lc1tlLTFdfWdldFdvcmRBdFBvc2l0aW9uKGUsdCl7Y29uc3Qgbj15dChlLmNvbHVtbixmdW5jdGlvbihlKXtsZXQgdD1idDtpZihlJiZlIGluc3RhbmNlb2YgUmVnRXhwKWlmKGUuZ2xvYmFsKXQ9ZTtlbHNle2xldCBuPSJnIjtlLmlnbm9yZUNhc2UmJihuKz0iaSIpLGUubXVsdGlsaW5lJiYobis9Im0iKSxlLnVuaWNvZGUmJihuKz0idSIpLHQ9bmV3IFJlZ0V4cChlLnNvdXJjZSxuKX1yZXR1cm4gdC5sYXN0SW5kZXg9MCx0fSh0KSx0aGlzLl9saW5lc1tlLmxpbmVOdW1iZXItMV0sMCk7cmV0dXJuIG4/bmV3IHR0KGUubGluZU51bWJlcixuLnN0YXJ0Q29sdW1uLGUubGluZU51bWJlcixuLmVuZENvbHVtbik6bnVsbH13b3JkcyhlKXtjb25zdCB0PXRoaXMuX2xpbmVzLG49dGhpcy5fd29yZGVuaXplLmJpbmQodGhpcyk7bGV0IHI9MCxpPSIiLG89MCxhPVtdO3JldHVybnsqW1N5bWJvbC5pdGVyYXRvcl0oKXtmb3IoOzspaWYobzxhLmxlbmd0aCl7Y29uc3QgZT1pLnN1YnN0cmluZyhhW29dLnN0YXJ0LGFbb10uZW5kKTtvKz0xLHlpZWxkIGV9ZWxzZXtpZighKHI8dC5sZW5ndGgpKWJyZWFrO2k9dFtyXSxhPW4oaSxlKSxvPTAscis9MX19fX1nZXRMaW5lV29yZHMoZSx0KXtjb25zdCBuPXRoaXMuX2xpbmVzW2UtMV0scj10aGlzLl93b3JkZW5pemUobix0KSxpPVtdO2Zvcihjb25zdCBlIG9mIHIpaS5wdXNoKHt3b3JkOm4uc3Vic3RyaW5nKGUuc3RhcnQsZS5lbmQpLHN0YXJ0Q29sdW1uOmUuc3RhcnQrMSxlbmRDb2x1bW46ZS5lbmQrMX0pO3JldHVybiBpfV93b3JkZW5pemUoZSx0KXtjb25zdCBuPVtdO2xldCByO2Zvcih0Lmxhc3RJbmRleD0wOyhyPXQuZXhlYyhlKSkmJjAhPT1yWzBdLmxlbmd0aDspbi5wdXNoKHtzdGFydDpyLmluZGV4LGVuZDpyLmluZGV4K3JbMF0ubGVuZ3RofSk7cmV0dXJuIG59Z2V0VmFsdWVJblJhbmdlKGUpe2lmKChlPXRoaXMuX3ZhbGlkYXRlUmFuZ2UoZSkpLnN0YXJ0TGluZU51bWJlcj09PWUuZW5kTGluZU51bWJlcilyZXR1cm4gdGhpcy5fbGluZXNbZS5zdGFydExpbmVOdW1iZXItMV0uc3Vic3RyaW5nKGUuc3RhcnRDb2x1bW4tMSxlLmVuZENvbHVtbi0xKTtjb25zdCB0PXRoaXMuX2VvbCxuPWUuc3RhcnRMaW5lTnVtYmVyLTEscj1lLmVuZExpbmVOdW1iZXItMSxpPVtdO2kucHVzaCh0aGlzLl9saW5lc1tuXS5zdWJzdHJpbmcoZS5zdGFydENvbHVtbi0xKSk7Zm9yKGxldCBlPW4rMTtlPHI7ZSsrKWkucHVzaCh0aGlzLl9saW5lc1tlXSk7cmV0dXJuIGkucHVzaCh0aGlzLl9saW5lc1tyXS5zdWJzdHJpbmcoMCxlLmVuZENvbHVtbi0xKSksaS5qb2luKHQpfW9mZnNldEF0KGUpe3JldHVybiBlPXRoaXMuX3ZhbGlkYXRlUG9zaXRpb24oZSksdGhpcy5fZW5zdXJlTGluZVN0YXJ0cygpLHRoaXMuX2xpbmVTdGFydHMuZ2V0UHJlZml4U3VtKGUubGluZU51bWJlci0yKSsoZS5jb2x1bW4tMSl9cG9zaXRpb25BdChlKXtlPU1hdGguZmxvb3IoZSksZT1NYXRoLm1heCgwLGUpLHRoaXMuX2Vuc3VyZUxpbmVTdGFydHMoKTtjb25zdCB0PXRoaXMuX2xpbmVTdGFydHMuZ2V0SW5kZXhPZihlKSxuPXRoaXMuX2xpbmVzW3QuaW5kZXhdLmxlbmd0aDtyZXR1cm57bGluZU51bWJlcjoxK3QuaW5kZXgsY29sdW1uOjErTWF0aC5taW4odC5yZW1haW5kZXIsbil9fV92YWxpZGF0ZVJhbmdlKGUpe2NvbnN0IHQ9dGhpcy5fdmFsaWRhdGVQb3NpdGlvbih7bGluZU51bWJlcjplLnN0YXJ0TGluZU51bWJlcixjb2x1bW46ZS5zdGFydENvbHVtbn0pLG49dGhpcy5fdmFsaWRhdGVQb3NpdGlvbih7bGluZU51bWJlcjplLmVuZExpbmVOdW1iZXIsY29sdW1uOmUuZW5kQ29sdW1ufSk7cmV0dXJuIHQubGluZU51bWJlciE9PWUuc3RhcnRMaW5lTnVtYmVyfHx0LmNvbHVtbiE9PWUuc3RhcnRDb2x1bW58fG4ubGluZU51bWJlciE9PWUuZW5kTGluZU51bWJlcnx8bi5jb2x1bW4hPT1lLmVuZENvbHVtbj97c3RhcnRMaW5lTnVtYmVyOnQubGluZU51bWJlcixzdGFydENvbHVtbjp0LmNvbHVtbixlbmRMaW5lTnVtYmVyOm4ubGluZU51bWJlcixlbmRDb2x1bW46bi5jb2x1bW59OmV9X3ZhbGlkYXRlUG9zaXRpb24oZSl7aWYoIWV0LmlzSVBvc2l0aW9uKGUpKXRocm93IG5ldyBFcnJvcigiYmFkIHBvc2l0aW9uIik7bGV0e2xpbmVOdW1iZXI6dCxjb2x1bW46bn09ZSxyPSExO2lmKHQ8MSl0PTEsbj0xLHI9ITA7ZWxzZSBpZih0PnRoaXMuX2xpbmVzLmxlbmd0aCl0PXRoaXMuX2xpbmVzLmxlbmd0aCxuPXRoaXMuX2xpbmVzW3QtMV0ubGVuZ3RoKzEscj0hMDtlbHNle2NvbnN0IGU9dGhpcy5fbGluZXNbdC0xXS5sZW5ndGgrMTtuPDE/KG49MSxyPSEwKTpuPmUmJihuPWUscj0hMCl9cmV0dXJuIHI/e2xpbmVOdW1iZXI6dCxjb2x1bW46bn06ZX19Y2xhc3MgSm57Y29uc3RydWN0b3IoZSx0KXt0aGlzLl9ob3N0PWUsdGhpcy5fbW9kZWxzPU9iamVjdC5jcmVhdGUobnVsbCksdGhpcy5fZm9yZWlnbk1vZHVsZUZhY3Rvcnk9dCx0aGlzLl9mb3JlaWduTW9kdWxlPW51bGx9ZGlzcG9zZSgpe3RoaXMuX21vZGVscz1PYmplY3QuY3JlYXRlKG51bGwpfV9nZXRNb2RlbChlKXtyZXR1cm4gdGhpcy5fbW9kZWxzW2VdfV9nZXRNb2RlbHMoKXtjb25zdCBlPVtdO3JldHVybiBPYmplY3Qua2V5cyh0aGlzLl9tb2RlbHMpLmZvckVhY2goKHQ9PmUucHVzaCh0aGlzLl9tb2RlbHNbdF0pKSksZX1hY2NlcHROZXdNb2RlbChlKXt0aGlzLl9tb2RlbHNbZS51cmxdPW5ldyBHbihxZS5wYXJzZShlLnVybCksZS5saW5lcyxlLkVPTCxlLnZlcnNpb25JZCl9YWNjZXB0TW9kZWxDaGFuZ2VkKGUsdCl7aWYoIXRoaXMuX21vZGVsc1tlXSlyZXR1cm47dGhpcy5fbW9kZWxzW2VdLm9uRXZlbnRzKHQpfWFjY2VwdFJlbW92ZWRNb2RlbChlKXt0aGlzLl9tb2RlbHNbZV0mJmRlbGV0ZSB0aGlzLl9tb2RlbHNbZV19Y29tcHV0ZVVuaWNvZGVIaWdobGlnaHRzKGUsdCxuKXtyZXR1cm4gem4odGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtjb25zdCByPXRoaXMuX2dldE1vZGVsKGUpO3JldHVybiByPyRuLmNvbXB1dGVVbmljb2RlSGlnaGxpZ2h0cyhyLHQsbik6e3JhbmdlczpbXSxoYXNNb3JlOiExLGFtYmlndW91c0NoYXJhY3RlckNvdW50OjAsaW52aXNpYmxlQ2hhcmFjdGVyQ291bnQ6MCxub25CYXNpY0FzY2lpQ2hhcmFjdGVyQ291bnQ6MH19KSl9Y29tcHV0ZURpZmYoZSx0LG4scil7cmV0dXJuIHpuKHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3QgaT10aGlzLl9nZXRNb2RlbChlKSxvPXRoaXMuX2dldE1vZGVsKHQpO3JldHVybiBpJiZvP0puLmNvbXB1dGVEaWZmKGksbyxuLHIpOm51bGx9KSl9c3RhdGljIGNvbXB1dGVEaWZmKGUsdCxuLHIpe2NvbnN0IGk9ZS5nZXRMaW5lc0NvbnRlbnQoKSxvPXQuZ2V0TGluZXNDb250ZW50KCksYT1uZXcgc3QoaSxvLHtzaG91bGRDb21wdXRlQ2hhckNoYW5nZXM6ITAsc2hvdWxkUG9zdFByb2Nlc3NDaGFyQ2hhbmdlczohMCxzaG91bGRJZ25vcmVUcmltV2hpdGVzcGFjZTpuLHNob3VsZE1ha2VQcmV0dHlEaWZmOiEwLG1heENvbXB1dGF0aW9uVGltZTpyfSkuY29tcHV0ZURpZmYoKSxzPSEoYS5jaGFuZ2VzLmxlbmd0aD4wKSYmdGhpcy5fbW9kZWxzQXJlSWRlbnRpY2FsKGUsdCk7cmV0dXJue3F1aXRFYXJseTphLnF1aXRFYXJseSxpZGVudGljYWw6cyxjaGFuZ2VzOmEuY2hhbmdlc319c3RhdGljIF9tb2RlbHNBcmVJZGVudGljYWwoZSx0KXtjb25zdCBuPWUuZ2V0TGluZUNvdW50KCk7aWYobiE9PXQuZ2V0TGluZUNvdW50KCkpcmV0dXJuITE7Zm9yKGxldCByPTE7cjw9bjtyKyspe2lmKGUuZ2V0TGluZUNvbnRlbnQocikhPT10LmdldExpbmVDb250ZW50KHIpKXJldHVybiExfXJldHVybiEwfWNvbXB1dGVNb3JlTWluaW1hbEVkaXRzKGUsdCl7cmV0dXJuIHpuKHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3Qgbj10aGlzLl9nZXRNb2RlbChlKTtpZighbilyZXR1cm4gdDtjb25zdCByPVtdO2xldCBpO3Q9dC5zbGljZSgwKS5zb3J0KCgoZSx0KT0+e2lmKGUucmFuZ2UmJnQucmFuZ2UpcmV0dXJuIHR0LmNvbXBhcmVSYW5nZXNVc2luZ1N0YXJ0cyhlLnJhbmdlLHQucmFuZ2UpO3JldHVybihlLnJhbmdlPzA6MSktKHQucmFuZ2U/MDoxKX0pKTtmb3IobGV0e3JhbmdlOmUsdGV4dDpvLGVvbDphfW9mIHQpe2lmKCJudW1iZXIiPT10eXBlb2YgYSYmKGk9YSksdHQuaXNFbXB0eShlKSYmIW8pY29udGludWU7Y29uc3QgdD1uLmdldFZhbHVlSW5SYW5nZShlKTtpZihvPW8ucmVwbGFjZSgvXHJcbnxcbnxcci9nLG4uZW9sKSx0PT09byljb250aW51ZTtpZihNYXRoLm1heChvLmxlbmd0aCx0Lmxlbmd0aCk+Sm4uX2RpZmZMaW1pdCl7ci5wdXNoKHtyYW5nZTplLHRleHQ6b30pO2NvbnRpbnVlfWNvbnN0IHM9bWUodCxvLCExKSxjPW4ub2Zmc2V0QXQodHQubGlmdChlKS5nZXRTdGFydFBvc2l0aW9uKCkpO2Zvcihjb25zdCBlIG9mIHMpe2NvbnN0IHQ9bi5wb3NpdGlvbkF0KGMrZS5vcmlnaW5hbFN0YXJ0KSxpPW4ucG9zaXRpb25BdChjK2Uub3JpZ2luYWxTdGFydCtlLm9yaWdpbmFsTGVuZ3RoKSxhPXt0ZXh0Om8uc3Vic3RyKGUubW9kaWZpZWRTdGFydCxlLm1vZGlmaWVkTGVuZ3RoKSxyYW5nZTp7c3RhcnRMaW5lTnVtYmVyOnQubGluZU51bWJlcixzdGFydENvbHVtbjp0LmNvbHVtbixlbmRMaW5lTnVtYmVyOmkubGluZU51bWJlcixlbmRDb2x1bW46aS5jb2x1bW59fTtuLmdldFZhbHVlSW5SYW5nZShhLnJhbmdlKSE9PWEudGV4dCYmci5wdXNoKGEpfX1yZXR1cm4ibnVtYmVyIj09dHlwZW9mIGkmJnIucHVzaCh7ZW9sOmksdGV4dDoiIixyYW5nZTp7c3RhcnRMaW5lTnVtYmVyOjAsc3RhcnRDb2x1bW46MCxlbmRMaW5lTnVtYmVyOjAsZW5kQ29sdW1uOjB9fSkscn0pKX1jb21wdXRlTGlua3MoZSl7cmV0dXJuIHpuKHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3QgdD10aGlzLl9nZXRNb2RlbChlKTtyZXR1cm4gdD9mdW5jdGlvbihlKXtyZXR1cm4gZSYmImZ1bmN0aW9uIj09dHlwZW9mIGUuZ2V0TGluZUNvdW50JiYiZnVuY3Rpb24iPT10eXBlb2YgZS5nZXRMaW5lQ29udGVudD94dC5jb21wdXRlTGlua3MoZSk6W119KHQpOm51bGx9KSl9dGV4dHVhbFN1Z2dlc3QoZSx0LG4scil7cmV0dXJuIHpuKHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3QgaT1uZXcgVighMCksbz1uZXcgUmVnRXhwKG4sciksYT1uZXcgU2V0O2U6Zm9yKGNvbnN0IG4gb2YgZSl7Y29uc3QgZT10aGlzLl9nZXRNb2RlbChuKTtpZihlKWZvcihjb25zdCBuIG9mIGUud29yZHMobykpaWYobiE9PXQmJmlzTmFOKE51bWJlcihuKSkmJihhLmFkZChuKSxhLnNpemU+Sm4uX3N1Z2dlc3Rpb25zTGltaXQpKWJyZWFrIGV9cmV0dXJue3dvcmRzOkFycmF5LmZyb20oYSksZHVyYXRpb246aS5lbGFwc2VkKCl9fSkpfWNvbXB1dGVXb3JkUmFuZ2VzKGUsdCxuLHIpe3JldHVybiB6bih0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2NvbnN0IGk9dGhpcy5fZ2V0TW9kZWwoZSk7aWYoIWkpcmV0dXJuIE9iamVjdC5jcmVhdGUobnVsbCk7Y29uc3Qgbz1uZXcgUmVnRXhwKG4sciksYT1PYmplY3QuY3JlYXRlKG51bGwpO2ZvcihsZXQgZT10LnN0YXJ0TGluZU51bWJlcjtlPHQuZW5kTGluZU51bWJlcjtlKyspe2NvbnN0IHQ9aS5nZXRMaW5lV29yZHMoZSxvKTtmb3IoY29uc3QgbiBvZiB0KXtpZighaXNOYU4oTnVtYmVyKG4ud29yZCkpKWNvbnRpbnVlO2xldCB0PWFbbi53b3JkXTt0fHwodD1bXSxhW24ud29yZF09dCksdC5wdXNoKHtzdGFydExpbmVOdW1iZXI6ZSxzdGFydENvbHVtbjpuLnN0YXJ0Q29sdW1uLGVuZExpbmVOdW1iZXI6ZSxlbmRDb2x1bW46bi5lbmRDb2x1bW59KX19cmV0dXJuIGF9KSl9bmF2aWdhdGVWYWx1ZVNldChlLHQsbixyLGkpe3JldHVybiB6bih0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2NvbnN0IG89dGhpcy5fZ2V0TW9kZWwoZSk7aWYoIW8pcmV0dXJuIG51bGw7Y29uc3QgYT1uZXcgUmVnRXhwKHIsaSk7dC5zdGFydENvbHVtbj09PXQuZW5kQ29sdW1uJiYodD17c3RhcnRMaW5lTnVtYmVyOnQuc3RhcnRMaW5lTnVtYmVyLHN0YXJ0Q29sdW1uOnQuc3RhcnRDb2x1bW4sZW5kTGluZU51bWJlcjp0LmVuZExpbmVOdW1iZXIsZW5kQ29sdW1uOnQuZW5kQ29sdW1uKzF9KTtjb25zdCBzPW8uZ2V0VmFsdWVJblJhbmdlKHQpLGM9by5nZXRXb3JkQXRQb3NpdGlvbih7bGluZU51bWJlcjp0LnN0YXJ0TGluZU51bWJlcixjb2x1bW46dC5zdGFydENvbHVtbn0sYSk7aWYoIWMpcmV0dXJuIG51bGw7Y29uc3QgbD1vLmdldFZhbHVlSW5SYW5nZShjKTtyZXR1cm4gTnQuSU5TVEFOQ0UubmF2aWdhdGVWYWx1ZVNldCh0LHMsYyxsLG4pfSkpfWxvYWRGb3JlaWduTW9kdWxlKGUsdCxuKXtjb25zdCByPWZ1bmN0aW9uKGUsdCl7Y29uc3Qgbj1lPT5mdW5jdGlvbigpe2NvbnN0IG49QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLDApO3JldHVybiB0KGUsbil9LHI9e307Zm9yKGNvbnN0IHQgb2YgZSlyW3RdPW4odCk7cmV0dXJuIHJ9KG4sKChlLHQpPT50aGlzLl9ob3N0LmZocihlLHQpKSksaT17aG9zdDpyLGdldE1pcnJvck1vZGVsczooKT0+dGhpcy5fZ2V0TW9kZWxzKCl9O3JldHVybiB0aGlzLl9mb3JlaWduTW9kdWxlRmFjdG9yeT8odGhpcy5fZm9yZWlnbk1vZHVsZT10aGlzLl9mb3JlaWduTW9kdWxlRmFjdG9yeShpLHQpLFByb21pc2UucmVzb2x2ZShIKHRoaXMuX2ZvcmVpZ25Nb2R1bGUpKSk6UHJvbWlzZS5yZWplY3QobmV3IEVycm9yKCJVbmV4cGVjdGVkIHVzYWdlIikpfWZtcihlLHQpe2lmKCF0aGlzLl9mb3JlaWduTW9kdWxlfHwiZnVuY3Rpb24iIT10eXBlb2YgdGhpcy5fZm9yZWlnbk1vZHVsZVtlXSlyZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKCJNaXNzaW5nIHJlcXVlc3RIYW5kbGVyIG9yIG1ldGhvZDogIitlKSk7dHJ5e3JldHVybiBQcm9taXNlLnJlc29sdmUodGhpcy5fZm9yZWlnbk1vZHVsZVtlXS5hcHBseSh0aGlzLl9mb3JlaWduTW9kdWxlLHQpKX1jYXRjaChlKXtyZXR1cm4gUHJvbWlzZS5yZWplY3QoZSl9fX1Kbi5fZGlmZkxpbWl0PTFlNSxKbi5fc3VnZ2VzdGlvbnNMaW1pdD0xZTQsImZ1bmN0aW9uIj09dHlwZW9mIGltcG9ydFNjcmlwdHMmJihOLm1vbmFjbz17ZWRpdG9yOnZvaWQgMCxsYW5ndWFnZXM6dm9pZCAwLENhbmNlbGxhdGlvblRva2VuU291cmNlOk90LEVtaXR0ZXI6QixLZXlDb2RlOmduLEtleU1vZDpVbixQb3NpdGlvbjpldCxSYW5nZTp0dCxTZWxlY3Rpb246VXQsU2VsZWN0aW9uRGlyZWN0aW9uOk5uLE1hcmtlclNldmVyaXR5OnBuLE1hcmtlclRhZzpibixVcmk6cWUsVG9rZW46am59KTtsZXQgWG49ITE7ZnVuY3Rpb24gWm4oZSl7aWYoWG4pcmV0dXJuO1huPSEwO2NvbnN0IHQ9bmV3IGxlKChlPT57c2VsZi5wb3N0TWVzc2FnZShlKX0pLCh0PT5uZXcgSm4odCxlKSkpO3NlbGYub25tZXNzYWdlPWU9Pnt0Lm9ubWVzc2FnZShlLmRhdGEpfX0KLyohLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICAqIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICAgICogVmVyc2lvbjogMC4zNC4wKGYxYWQ5NTFmMjZhZmIzYmE2NDMyN2I3MGMzMDU2Y2FiYzM4NTE0OTIpCiAgICAgKiBSZWxlYXNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UKICAgICAqIGh0dHBzOi8vZ2l0aHViLmNvbS9taWNyb3NvZnQvbW9uYWNvLWVkaXRvci9ibG9iL21haW4vTElDRU5TRS50eHQKICAgICAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwpmdW5jdGlvbiBZbihlLHQpe3ZvaWQgMD09PXQmJih0PSExKTt2YXIgbj1lLmxlbmd0aCxyPTAsaT0iIixvPTAsYT0xNixzPTAsYz0wLGw9MCx1PTAsaD0wO2Z1bmN0aW9uIGYodCxuKXtmb3IodmFyIGk9MCxvPTA7aTx0fHwhbjspe3ZhciBhPWUuY2hhckNvZGVBdChyKTtpZihhPj00OCYmYTw9NTcpbz0xNipvK2EtNDg7ZWxzZSBpZihhPj02NSYmYTw9NzApbz0xNipvK2EtNjUrMTA7ZWxzZXtpZighKGE+PTk3JiZhPD0xMDIpKWJyZWFrO289MTYqbythLTk3KzEwfXIrKyxpKyt9cmV0dXJuIGk8dCYmKG89LTEpLG99ZnVuY3Rpb24gZCgpe2lmKGk9IiIsaD0wLG89cixjPXMsdT1sLHI+PW4pcmV0dXJuIG89bixhPTE3O3ZhciB0PWUuY2hhckNvZGVBdChyKTtpZihRbih0KSl7ZG97cisrLGkrPVN0cmluZy5mcm9tQ2hhckNvZGUodCksdD1lLmNoYXJDb2RlQXQocil9d2hpbGUoUW4odCkpO3JldHVybiBhPTE1fWlmKGVyKHQpKXJldHVybiByKyssaSs9U3RyaW5nLmZyb21DaGFyQ29kZSh0KSwxMz09PXQmJjEwPT09ZS5jaGFyQ29kZUF0KHIpJiYocisrLGkrPSJcbiIpLHMrKyxsPXIsYT0xNDtzd2l0Y2godCl7Y2FzZSAxMjM6cmV0dXJuIHIrKyxhPTE7Y2FzZSAxMjU6cmV0dXJuIHIrKyxhPTI7Y2FzZSA5MTpyZXR1cm4gcisrLGE9MztjYXNlIDkzOnJldHVybiByKyssYT00O2Nhc2UgNTg6cmV0dXJuIHIrKyxhPTY7Y2FzZSA0NDpyZXR1cm4gcisrLGE9NTtjYXNlIDM0OnJldHVybiByKyssaT1mdW5jdGlvbigpe2Zvcih2YXIgdD0iIixpPXI7Oyl7aWYocj49bil7dCs9ZS5zdWJzdHJpbmcoaSxyKSxoPTI7YnJlYWt9dmFyIG89ZS5jaGFyQ29kZUF0KHIpO2lmKDM0PT09byl7dCs9ZS5zdWJzdHJpbmcoaSxyKSxyKys7YnJlYWt9aWYoOTIhPT1vKXtpZihvPj0wJiZvPD0zMSl7aWYoZXIobykpe3QrPWUuc3Vic3RyaW5nKGksciksaD0yO2JyZWFrfWg9Nn1yKyt9ZWxzZXtpZih0Kz1lLnN1YnN0cmluZyhpLHIpLCsrcj49bil7aD0yO2JyZWFrfXN3aXRjaChlLmNoYXJDb2RlQXQocisrKSl7Y2FzZSAzNDp0Kz0nIic7YnJlYWs7Y2FzZSA5Mjp0Kz0iXFwiO2JyZWFrO2Nhc2UgNDc6dCs9Ii8iO2JyZWFrO2Nhc2UgOTg6dCs9IlxiIjticmVhaztjYXNlIDEwMjp0Kz0iXGYiO2JyZWFrO2Nhc2UgMTEwOnQrPSJcbiI7YnJlYWs7Y2FzZSAxMTQ6dCs9IlxyIjticmVhaztjYXNlIDExNjp0Kz0iXHQiO2JyZWFrO2Nhc2UgMTE3OnZhciBhPWYoNCwhMCk7YT49MD90Kz1TdHJpbmcuZnJvbUNoYXJDb2RlKGEpOmg9NDticmVhaztkZWZhdWx0Omg9NX1pPXJ9fXJldHVybiB0fSgpLGE9MTA7Y2FzZSA0Nzp2YXIgZD1yLTE7aWYoNDc9PT1lLmNoYXJDb2RlQXQocisxKSl7Zm9yKHIrPTI7cjxuJiYhZXIoZS5jaGFyQ29kZUF0KHIpKTspcisrO3JldHVybiBpPWUuc3Vic3RyaW5nKGQsciksYT0xMn1pZig0Mj09PWUuY2hhckNvZGVBdChyKzEpKXtyKz0yO2Zvcih2YXIgZz1uLTEscD0hMTtyPGc7KXt2YXIgYj1lLmNoYXJDb2RlQXQocik7aWYoNDI9PT1iJiY0Nz09PWUuY2hhckNvZGVBdChyKzEpKXtyKz0yLHA9ITA7YnJlYWt9cisrLGVyKGIpJiYoMTM9PT1iJiYxMD09PWUuY2hhckNvZGVBdChyKSYmcisrLHMrKyxsPXIpfXJldHVybiBwfHwocisrLGg9MSksaT1lLnN1YnN0cmluZyhkLHIpLGE9MTN9cmV0dXJuIGkrPVN0cmluZy5mcm9tQ2hhckNvZGUodCkscisrLGE9MTY7Y2FzZSA0NTppZihpKz1TdHJpbmcuZnJvbUNoYXJDb2RlKHQpLCsrcj09PW58fCF0cihlLmNoYXJDb2RlQXQocikpKXJldHVybiBhPTE2O2Nhc2UgNDg6Y2FzZSA0OTpjYXNlIDUwOmNhc2UgNTE6Y2FzZSA1MjpjYXNlIDUzOmNhc2UgNTQ6Y2FzZSA1NTpjYXNlIDU2OmNhc2UgNTc6cmV0dXJuIGkrPWZ1bmN0aW9uKCl7dmFyIHQ9cjtpZig0OD09PWUuY2hhckNvZGVBdChyKSlyKys7ZWxzZSBmb3IocisrO3I8ZS5sZW5ndGgmJnRyKGUuY2hhckNvZGVBdChyKSk7KXIrKztpZihyPGUubGVuZ3RoJiY0Nj09PWUuY2hhckNvZGVBdChyKSl7aWYoISgrK3I8ZS5sZW5ndGgmJnRyKGUuY2hhckNvZGVBdChyKSkpKXJldHVybiBoPTMsZS5zdWJzdHJpbmcodCxyKTtmb3IocisrO3I8ZS5sZW5ndGgmJnRyKGUuY2hhckNvZGVBdChyKSk7KXIrK312YXIgbj1yO2lmKHI8ZS5sZW5ndGgmJig2OT09PWUuY2hhckNvZGVBdChyKXx8MTAxPT09ZS5jaGFyQ29kZUF0KHIpKSlpZigoKytyPGUubGVuZ3RoJiY0Mz09PWUuY2hhckNvZGVBdChyKXx8NDU9PT1lLmNoYXJDb2RlQXQocikpJiZyKysscjxlLmxlbmd0aCYmdHIoZS5jaGFyQ29kZUF0KHIpKSl7Zm9yKHIrKztyPGUubGVuZ3RoJiZ0cihlLmNoYXJDb2RlQXQocikpOylyKys7bj1yfWVsc2UgaD0zO3JldHVybiBlLnN1YnN0cmluZyh0LG4pfSgpLGE9MTE7ZGVmYXVsdDpmb3IoO3I8biYmbSh0KTspcisrLHQ9ZS5jaGFyQ29kZUF0KHIpO2lmKG8hPT1yKXtzd2l0Y2goaT1lLnN1YnN0cmluZyhvLHIpKXtjYXNlInRydWUiOnJldHVybiBhPTg7Y2FzZSJmYWxzZSI6cmV0dXJuIGE9OTtjYXNlIm51bGwiOnJldHVybiBhPTd9cmV0dXJuIGE9MTZ9cmV0dXJuIGkrPVN0cmluZy5mcm9tQ2hhckNvZGUodCkscisrLGE9MTZ9fWZ1bmN0aW9uIG0oZSl7aWYoUW4oZSl8fGVyKGUpKXJldHVybiExO3N3aXRjaChlKXtjYXNlIDEyNTpjYXNlIDkzOmNhc2UgMTIzOmNhc2UgOTE6Y2FzZSAzNDpjYXNlIDU4OmNhc2UgNDQ6Y2FzZSA0NzpyZXR1cm4hMX1yZXR1cm4hMH1yZXR1cm57c2V0UG9zaXRpb246ZnVuY3Rpb24oZSl7cj1lLGk9IiIsbz0wLGE9MTYsaD0wfSxnZXRQb3NpdGlvbjpmdW5jdGlvbigpe3JldHVybiByfSxzY2FuOnQ/ZnVuY3Rpb24oKXt2YXIgZTtkb3tlPWQoKX13aGlsZShlPj0xMiYmZTw9MTUpO3JldHVybiBlfTpkLGdldFRva2VuOmZ1bmN0aW9uKCl7cmV0dXJuIGF9LGdldFRva2VuVmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gaX0sZ2V0VG9rZW5PZmZzZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gb30sZ2V0VG9rZW5MZW5ndGg6ZnVuY3Rpb24oKXtyZXR1cm4gci1vfSxnZXRUb2tlblN0YXJ0TGluZTpmdW5jdGlvbigpe3JldHVybiBjfSxnZXRUb2tlblN0YXJ0Q2hhcmFjdGVyOmZ1bmN0aW9uKCl7cmV0dXJuIG8tdX0sZ2V0VG9rZW5FcnJvcjpmdW5jdGlvbigpe3JldHVybiBofX19ZnVuY3Rpb24gUW4oZSl7cmV0dXJuIDMyPT09ZXx8OT09PWV8fDExPT09ZXx8MTI9PT1lfHwxNjA9PT1lfHw1NzYwPT09ZXx8ZT49ODE5MiYmZTw9ODIwM3x8ODIzOT09PWV8fDgyODc9PT1lfHwxMjI4OD09PWV8fDY1Mjc5PT09ZX1mdW5jdGlvbiBlcihlKXtyZXR1cm4gMTA9PT1lfHwxMz09PWV8fDgyMzI9PT1lfHw4MjMzPT09ZX1mdW5jdGlvbiB0cihlKXtyZXR1cm4gZT49NDgmJmU8PTU3fWZ1bmN0aW9uIG5yKGUsdCxuKXt2YXIgcixpLG8sYSxzO2lmKHQpe2ZvcihhPXQub2Zmc2V0LHM9YSt0Lmxlbmd0aCxvPWE7bz4wJiYhaXIoZSxvLTEpOylvLS07Zm9yKHZhciBjPXM7YzxlLmxlbmd0aCYmIWlyKGUsYyk7KWMrKztpPWUuc3Vic3RyaW5nKG8sYykscj1mdW5jdGlvbihlLHQpe3ZhciBuPTAscj0wLGk9dC50YWJTaXplfHw0O2Zvcig7bjxlLmxlbmd0aDspe3ZhciBvPWUuY2hhckF0KG4pO2lmKCIgIj09PW8pcisrO2Vsc2V7aWYoIlx0IiE9PW8pYnJlYWs7cis9aX1uKyt9cmV0dXJuIE1hdGguZmxvb3Ioci9pKX0oaSxuKX1lbHNlIGk9ZSxyPTAsbz0wLGE9MCxzPWUubGVuZ3RoO3ZhciBsLHU9ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG49MDtuPHQubGVuZ3RoO24rKyl7dmFyIHI9dC5jaGFyQXQobik7aWYoIlxyIj09PXIpcmV0dXJuIG4rMTx0Lmxlbmd0aCYmIlxuIj09PXQuY2hhckF0KG4rMSk/IlxyXG4iOiJcciI7aWYoIlxuIj09PXIpcmV0dXJuIlxuIn1yZXR1cm4gZSYmZS5lb2x8fCJcbiJ9KG4sZSksaD0hMSxmPTA7bD1uLmluc2VydFNwYWNlcz9ycigiICIsbi50YWJTaXplfHw0KToiXHQiO3ZhciBkPVluKGksITEpLG09ITE7ZnVuY3Rpb24gZygpe3JldHVybiB1K3JyKGwscitmKX1mdW5jdGlvbiBwKCl7dmFyIGU9ZC5zY2FuKCk7Zm9yKGg9ITE7MTU9PT1lfHwxND09PWU7KWg9aHx8MTQ9PT1lLGU9ZC5zY2FuKCk7cmV0dXJuIG09MTY9PT1lfHwwIT09ZC5nZXRUb2tlbkVycm9yKCksZX12YXIgYj1bXTtmdW5jdGlvbiB2KG4scixpKXttfHx0JiYhKHI8cyYmaT5hKXx8ZS5zdWJzdHJpbmcocixpKT09PW58fGIucHVzaCh7b2Zmc2V0OnIsbGVuZ3RoOmktcixjb250ZW50Om59KX12YXIgeT1wKCk7aWYoMTchPT15KXt2YXIgQz1kLmdldFRva2VuT2Zmc2V0KCkrbzt2KHJyKGwsciksbyxDKX1mb3IoOzE3IT09eTspe2Zvcih2YXIgdz1kLmdldFRva2VuT2Zmc2V0KCkrZC5nZXRUb2tlbkxlbmd0aCgpK28sXz1wKCksUz0iIixBPSExOyFoJiYoMTI9PT1ffHwxMz09PV8pOyl7digiICIsdyxkLmdldFRva2VuT2Zmc2V0KCkrbyksdz1kLmdldFRva2VuT2Zmc2V0KCkrZC5nZXRUb2tlbkxlbmd0aCgpK28sUz0oQT0xMj09PV8pP2coKToiIixfPXAoKX1pZigyPT09XykxIT09eSYmKGYtLSxTPWcoKSk7ZWxzZSBpZig0PT09XykzIT09eSYmKGYtLSxTPWcoKSk7ZWxzZXtzd2l0Y2goeSl7Y2FzZSAzOmNhc2UgMTpmKyssUz1nKCk7YnJlYWs7Y2FzZSA1OmNhc2UgMTI6Uz1nKCk7YnJlYWs7Y2FzZSAxMzpoP1M9ZygpOkF8fChTPSIgIik7YnJlYWs7Y2FzZSA2OkF8fChTPSIgIik7YnJlYWs7Y2FzZSAxMDppZig2PT09Xyl7QXx8KFM9IiIpO2JyZWFrfWNhc2UgNzpjYXNlIDg6Y2FzZSA5OmNhc2UgMTE6Y2FzZSAyOmNhc2UgNDoxMj09PV98fDEzPT09Xz9BfHwoUz0iICIpOjUhPT1fJiYxNyE9PV8mJihtPSEwKTticmVhaztjYXNlIDE2Om09ITB9IWh8fDEyIT09XyYmMTMhPT1ffHwoUz1nKCkpfTE3PT09XyYmKFM9bi5pbnNlcnRGaW5hbE5ld2xpbmU/dToiIiksdihTLHcsZC5nZXRUb2tlbk9mZnNldCgpK28pLHk9X31yZXR1cm4gYn1mdW5jdGlvbiBycihlLHQpe2Zvcih2YXIgbj0iIixyPTA7cjx0O3IrKyluKz1lO3JldHVybiBufWZ1bmN0aW9uIGlyKGUsdCl7cmV0dXJuLTEhPT0iXHJcbiIuaW5kZXhPZihlLmNoYXJBdCh0KSl9dmFyIG9yO3NlbGYub25tZXNzYWdlPWU9PntYbnx8Wm4obnVsbCl9LChvcnx8KG9yPXt9KSkuREVGQVVMVD17YWxsb3dUcmFpbGluZ0NvbW1hOiExfTt2YXIgYXIsc3IsY3IsbHIsdXIsaHIsZnIsZHIsbXIsZ3IscHIsYnIsdnIseXIsQ3Isd3IsX3IsU3IsQXIsRXIseHIsTnIsa3IsTHIsVHIsT3IsSXIsTXIsUHIsUnIsVnIsRnIsRHIsS3IsanIsVXIsQnIscXIsJHIsV3IsSHIsenIsR3IsSnIsWHIsWnIsWXIsUXIsZWksdGk9WW4sbmk9ZnVuY3Rpb24oZSx0LG4pe3ZvaWQgMD09PXQmJih0PVtdKSx2b2lkIDA9PT1uJiYobj1vci5ERUZBVUxUKTt2YXIgcj1udWxsLGk9W10sbz1bXTtmdW5jdGlvbiBhKGUpe0FycmF5LmlzQXJyYXkoaSk/aS5wdXNoKGUpOm51bGwhPT1yJiYoaVtyXT1lKX1yZXR1cm4gZnVuY3Rpb24oZSx0LG4pe3ZvaWQgMD09PW4mJihuPW9yLkRFRkFVTFQpO3ZhciByPVluKGUsITEpO2Z1bmN0aW9uIGkoZSl7cmV0dXJuIGU/ZnVuY3Rpb24oKXtyZXR1cm4gZShyLmdldFRva2VuT2Zmc2V0KCksci5nZXRUb2tlbkxlbmd0aCgpLHIuZ2V0VG9rZW5TdGFydExpbmUoKSxyLmdldFRva2VuU3RhcnRDaGFyYWN0ZXIoKSl9OmZ1bmN0aW9uKCl7cmV0dXJuITB9fWZ1bmN0aW9uIG8oZSl7cmV0dXJuIGU/ZnVuY3Rpb24odCl7cmV0dXJuIGUodCxyLmdldFRva2VuT2Zmc2V0KCksci5nZXRUb2tlbkxlbmd0aCgpLHIuZ2V0VG9rZW5TdGFydExpbmUoKSxyLmdldFRva2VuU3RhcnRDaGFyYWN0ZXIoKSl9OmZ1bmN0aW9uKCl7cmV0dXJuITB9fXZhciBhPWkodC5vbk9iamVjdEJlZ2luKSxzPW8odC5vbk9iamVjdFByb3BlcnR5KSxjPWkodC5vbk9iamVjdEVuZCksbD1pKHQub25BcnJheUJlZ2luKSx1PWkodC5vbkFycmF5RW5kKSxoPW8odC5vbkxpdGVyYWxWYWx1ZSksZj1vKHQub25TZXBhcmF0b3IpLGQ9aSh0Lm9uQ29tbWVudCksbT1vKHQub25FcnJvciksZz1uJiZuLmRpc2FsbG93Q29tbWVudHMscD1uJiZuLmFsbG93VHJhaWxpbmdDb21tYTtmdW5jdGlvbiBiKCl7Zm9yKDs7KXt2YXIgZT1yLnNjYW4oKTtzd2l0Y2goci5nZXRUb2tlbkVycm9yKCkpe2Nhc2UgNDp2KDE0KTticmVhaztjYXNlIDU6digxNSk7YnJlYWs7Y2FzZSAzOnYoMTMpO2JyZWFrO2Nhc2UgMTpnfHx2KDExKTticmVhaztjYXNlIDI6digxMik7YnJlYWs7Y2FzZSA2OnYoMTYpfXN3aXRjaChlKXtjYXNlIDEyOmNhc2UgMTM6Zz92KDEwKTpkKCk7YnJlYWs7Y2FzZSAxNjp2KDEpO2JyZWFrO2Nhc2UgMTU6Y2FzZSAxNDpicmVhaztkZWZhdWx0OnJldHVybiBlfX19ZnVuY3Rpb24gdihlLHQsbil7aWYodm9pZCAwPT09dCYmKHQ9W10pLHZvaWQgMD09PW4mJihuPVtdKSxtKGUpLHQubGVuZ3RoK24ubGVuZ3RoPjApZm9yKHZhciBpPXIuZ2V0VG9rZW4oKTsxNyE9PWk7KXtpZigtMSE9PXQuaW5kZXhPZihpKSl7YigpO2JyZWFrfWlmKC0xIT09bi5pbmRleE9mKGkpKWJyZWFrO2k9YigpfX1mdW5jdGlvbiB5KGUpe3ZhciB0PXIuZ2V0VG9rZW5WYWx1ZSgpO3JldHVybiBlP2godCk6cyh0KSxiKCksITB9ZnVuY3Rpb24gQygpe3N3aXRjaChyLmdldFRva2VuKCkpe2Nhc2UgMTE6dmFyIGU9ci5nZXRUb2tlblZhbHVlKCksdD1OdW1iZXIoZSk7aXNOYU4odCkmJih2KDIpLHQ9MCksaCh0KTticmVhaztjYXNlIDc6aChudWxsKTticmVhaztjYXNlIDg6aCghMCk7YnJlYWs7Y2FzZSA5OmgoITEpO2JyZWFrO2RlZmF1bHQ6cmV0dXJuITF9cmV0dXJuIGIoKSwhMH1mdW5jdGlvbiB3KCl7cmV0dXJuIDEwIT09ci5nZXRUb2tlbigpPyh2KDMsW10sWzIsNV0pLCExKTooeSghMSksNj09PXIuZ2V0VG9rZW4oKT8oZigiOiIpLGIoKSxBKCl8fHYoNCxbXSxbMiw1XSkpOnYoNSxbXSxbMiw1XSksITApfWZ1bmN0aW9uIF8oKXthKCksYigpO2Zvcih2YXIgZT0hMTsyIT09ci5nZXRUb2tlbigpJiYxNyE9PXIuZ2V0VG9rZW4oKTspe2lmKDU9PT1yLmdldFRva2VuKCkpe2lmKGV8fHYoNCxbXSxbXSksZigiLCIpLGIoKSwyPT09ci5nZXRUb2tlbigpJiZwKWJyZWFrfWVsc2UgZSYmdig2LFtdLFtdKTt3KCl8fHYoNCxbXSxbMiw1XSksZT0hMH1yZXR1cm4gYygpLDIhPT1yLmdldFRva2VuKCk/dig3LFsyXSxbXSk6YigpLCEwfWZ1bmN0aW9uIFMoKXtsKCksYigpO2Zvcih2YXIgZT0hMTs0IT09ci5nZXRUb2tlbigpJiYxNyE9PXIuZ2V0VG9rZW4oKTspe2lmKDU9PT1yLmdldFRva2VuKCkpe2lmKGV8fHYoNCxbXSxbXSksZigiLCIpLGIoKSw0PT09ci5nZXRUb2tlbigpJiZwKWJyZWFrfWVsc2UgZSYmdig2LFtdLFtdKTtBKCl8fHYoNCxbXSxbNCw1XSksZT0hMH1yZXR1cm4gdSgpLDQhPT1yLmdldFRva2VuKCk/dig4LFs0XSxbXSk6YigpLCEwfWZ1bmN0aW9uIEEoKXtzd2l0Y2goci5nZXRUb2tlbigpKXtjYXNlIDM6cmV0dXJuIFMoKTtjYXNlIDE6cmV0dXJuIF8oKTtjYXNlIDEwOnJldHVybiB5KCEwKTtkZWZhdWx0OnJldHVybiBDKCl9fWlmKGIoKSwxNz09PXIuZ2V0VG9rZW4oKSlyZXR1cm4hIW4uYWxsb3dFbXB0eUNvbnRlbnR8fCh2KDQsW10sW10pLCExKTtpZighQSgpKXJldHVybiB2KDQsW10sW10pLCExOzE3IT09ci5nZXRUb2tlbigpJiZ2KDksW10sW10pfShlLHtvbk9iamVjdEJlZ2luOmZ1bmN0aW9uKCl7dmFyIGU9e307YShlKSxvLnB1c2goaSksaT1lLHI9bnVsbH0sb25PYmplY3RQcm9wZXJ0eTpmdW5jdGlvbihlKXtyPWV9LG9uT2JqZWN0RW5kOmZ1bmN0aW9uKCl7aT1vLnBvcCgpfSxvbkFycmF5QmVnaW46ZnVuY3Rpb24oKXt2YXIgZT1bXTthKGUpLG8ucHVzaChpKSxpPWUscj1udWxsfSxvbkFycmF5RW5kOmZ1bmN0aW9uKCl7aT1vLnBvcCgpfSxvbkxpdGVyYWxWYWx1ZTphLG9uRXJyb3I6ZnVuY3Rpb24oZSxuLHIpe3QucHVzaCh7ZXJyb3I6ZSxvZmZzZXQ6bixsZW5ndGg6cn0pfX0sbiksaVswXX0scmk9ZnVuY3Rpb24gZSh0LG4scil7aWYodm9pZCAwPT09ciYmKHI9ITEpLGZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gdm9pZCAwPT09biYmKG49ITEpLHQ+PWUub2Zmc2V0JiZ0PGUub2Zmc2V0K2UubGVuZ3RofHxuJiZ0PT09ZS5vZmZzZXQrZS5sZW5ndGh9KHQsbixyKSl7dmFyIGk9dC5jaGlsZHJlbjtpZihBcnJheS5pc0FycmF5KGkpKWZvcih2YXIgbz0wO288aS5sZW5ndGgmJmlbb10ub2Zmc2V0PD1uO28rKyl7dmFyIGE9ZShpW29dLG4scik7aWYoYSlyZXR1cm4gYX1yZXR1cm4gdH19LGlpPWZ1bmN0aW9uIGUodCl7aWYoIXQucGFyZW50fHwhdC5wYXJlbnQuY2hpbGRyZW4pcmV0dXJuW107dmFyIG49ZSh0LnBhcmVudCk7aWYoInByb3BlcnR5Ij09PXQucGFyZW50LnR5cGUpe3ZhciByPXQucGFyZW50LmNoaWxkcmVuWzBdLnZhbHVlO24ucHVzaChyKX1lbHNlIGlmKCJhcnJheSI9PT10LnBhcmVudC50eXBlKXt2YXIgaT10LnBhcmVudC5jaGlsZHJlbi5pbmRleE9mKHQpOy0xIT09aSYmbi5wdXNoKGkpfXJldHVybiBufSxvaT1mdW5jdGlvbiBlKHQpe3N3aXRjaCh0LnR5cGUpe2Nhc2UiYXJyYXkiOnJldHVybiB0LmNoaWxkcmVuLm1hcChlKTtjYXNlIm9iamVjdCI6Zm9yKHZhciBuPU9iamVjdC5jcmVhdGUobnVsbCkscj0wLGk9dC5jaGlsZHJlbjtyPGkubGVuZ3RoO3IrKyl7dmFyIG89aVtyXSxhPW8uY2hpbGRyZW5bMV07YSYmKG5bby5jaGlsZHJlblswXS52YWx1ZV09ZShhKSl9cmV0dXJuIG47Y2FzZSJudWxsIjpjYXNlInN0cmluZyI6Y2FzZSJudW1iZXIiOmNhc2UiYm9vbGVhbiI6cmV0dXJuIHQudmFsdWU7ZGVmYXVsdDpyZXR1cm59fTtmdW5jdGlvbiBhaShlLHQpe2lmKGU9PT10KXJldHVybiEwO2lmKG51bGw9PWV8fG51bGw9PXQpcmV0dXJuITE7aWYodHlwZW9mIGUhPXR5cGVvZiB0KXJldHVybiExO2lmKCJvYmplY3QiIT10eXBlb2YgZSlyZXR1cm4hMTtpZihBcnJheS5pc0FycmF5KGUpIT09QXJyYXkuaXNBcnJheSh0KSlyZXR1cm4hMTt2YXIgbixyO2lmKEFycmF5LmlzQXJyYXkoZSkpe2lmKGUubGVuZ3RoIT09dC5sZW5ndGgpcmV0dXJuITE7Zm9yKG49MDtuPGUubGVuZ3RoO24rKylpZighYWkoZVtuXSx0W25dKSlyZXR1cm4hMX1lbHNle3ZhciBpPVtdO2ZvcihyIGluIGUpaS5wdXNoKHIpO2kuc29ydCgpO3ZhciBvPVtdO2ZvcihyIGluIHQpby5wdXNoKHIpO2lmKG8uc29ydCgpLCFhaShpLG8pKXJldHVybiExO2ZvcihuPTA7bjxpLmxlbmd0aDtuKyspaWYoIWFpKGVbaVtuXV0sdFtpW25dXSkpcmV0dXJuITF9cmV0dXJuITB9ZnVuY3Rpb24gc2koZSl7cmV0dXJuIm51bWJlciI9PXR5cGVvZiBlfWZ1bmN0aW9uIGNpKGUpe3JldHVybiB2b2lkIDAhPT1lfWZ1bmN0aW9uIGxpKGUpe3JldHVybiJib29sZWFuIj09dHlwZW9mIGV9ZnVuY3Rpb24gdWkoZSx0KXt2YXIgbj1lLmxlbmd0aC10Lmxlbmd0aDtyZXR1cm4gbj4wP2UubGFzdEluZGV4T2YodCk9PT1uOjA9PT1uJiZlPT09dH1mdW5jdGlvbiBoaShlKXt2YXIgdD0iIjsoZnVuY3Rpb24oZSx0KXtpZihlLmxlbmd0aDx0Lmxlbmd0aClyZXR1cm4hMTtmb3IodmFyIG49MDtuPHQubGVuZ3RoO24rKylpZihlW25dIT09dFtuXSlyZXR1cm4hMTtyZXR1cm4hMH0pKGUsIig/aSkiKSYmKGU9ZS5zdWJzdHJpbmcoNCksdD0iaSIpO3RyeXtyZXR1cm4gbmV3IFJlZ0V4cChlLHQrInUiKX1jYXRjaChuKXt0cnl7cmV0dXJuIG5ldyBSZWdFeHAoZSx0KX1jYXRjaChlKXtyZXR1cm59fX0oc3I9YXJ8fChhcj17fSkpLk1JTl9WQUxVRT0tMjE0NzQ4MzY0OCxzci5NQVhfVkFMVUU9MjE0NzQ4MzY0NywobHI9Y3J8fChjcj17fSkpLk1JTl9WQUxVRT0wLGxyLk1BWF9WQUxVRT0yMTQ3NDgzNjQ3LChocj11cnx8KHVyPXt9KSkuY3JlYXRlPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGU9PT1OdW1iZXIuTUFYX1ZBTFVFJiYoZT1jci5NQVhfVkFMVUUpLHQ9PT1OdW1iZXIuTUFYX1ZBTFVFJiYodD1jci5NQVhfVkFMVUUpLHtsaW5lOmUsY2hhcmFjdGVyOnR9fSxoci5pcz1mdW5jdGlvbihlKXt2YXIgdD1lO3JldHVybiBoby5vYmplY3RMaXRlcmFsKHQpJiZoby51aW50ZWdlcih0LmxpbmUpJiZoby51aW50ZWdlcih0LmNoYXJhY3Rlcil9LChkcj1mcnx8KGZyPXt9KSkuY3JlYXRlPWZ1bmN0aW9uKGUsdCxuLHIpe2lmKGhvLnVpbnRlZ2VyKGUpJiZoby51aW50ZWdlcih0KSYmaG8udWludGVnZXIobikmJmhvLnVpbnRlZ2VyKHIpKXJldHVybntzdGFydDp1ci5jcmVhdGUoZSx0KSxlbmQ6dXIuY3JlYXRlKG4scil9O2lmKHVyLmlzKGUpJiZ1ci5pcyh0KSlyZXR1cm57c3RhcnQ6ZSxlbmQ6dH07dGhyb3cgbmV3IEVycm9yKCJSYW5nZSNjcmVhdGUgY2FsbGVkIHdpdGggaW52YWxpZCBhcmd1bWVudHNbIitlKyIsICIrdCsiLCAiK24rIiwgIityKyJdIil9LGRyLmlzPWZ1bmN0aW9uKGUpe3ZhciB0PWU7cmV0dXJuIGhvLm9iamVjdExpdGVyYWwodCkmJnVyLmlzKHQuc3RhcnQpJiZ1ci5pcyh0LmVuZCl9LChncj1tcnx8KG1yPXt9KSkuY3JlYXRlPWZ1bmN0aW9uKGUsdCl7cmV0dXJue3VyaTplLHJhbmdlOnR9fSxnci5pcz1mdW5jdGlvbihlKXt2YXIgdD1lO3JldHVybiBoby5kZWZpbmVkKHQpJiZmci5pcyh0LnJhbmdlKSYmKGhvLnN0cmluZyh0LnVyaSl8fGhvLnVuZGVmaW5lZCh0LnVyaSkpfSwoYnI9cHJ8fChwcj17fSkpLmNyZWF0ZT1mdW5jdGlvbihlLHQsbixyKXtyZXR1cm57dGFyZ2V0VXJpOmUsdGFyZ2V0UmFuZ2U6dCx0YXJnZXRTZWxlY3Rpb25SYW5nZTpuLG9yaWdpblNlbGVjdGlvblJhbmdlOnJ9fSxici5pcz1mdW5jdGlvbihlKXt2YXIgdD1lO3JldHVybiBoby5kZWZpbmVkKHQpJiZmci5pcyh0LnRhcmdldFJhbmdlKSYmaG8uc3RyaW5nKHQudGFyZ2V0VXJpKSYmKGZyLmlzKHQudGFyZ2V0U2VsZWN0aW9uUmFuZ2UpfHxoby51bmRlZmluZWQodC50YXJnZXRTZWxlY3Rpb25SYW5nZSkpJiYoZnIuaXModC5vcmlnaW5TZWxlY3Rpb25SYW5nZSl8fGhvLnVuZGVmaW5lZCh0Lm9yaWdpblNlbGVjdGlvblJhbmdlKSl9LCh5cj12cnx8KHZyPXt9KSkuY3JlYXRlPWZ1bmN0aW9uKGUsdCxuLHIpe3JldHVybntyZWQ6ZSxncmVlbjp0LGJsdWU6bixhbHBoYTpyfX0seXIuaXM9ZnVuY3Rpb24oZSl7dmFyIHQ9ZTtyZXR1cm4gaG8ubnVtYmVyUmFuZ2UodC5yZWQsMCwxKSYmaG8ubnVtYmVyUmFuZ2UodC5ncmVlbiwwLDEpJiZoby5udW1iZXJSYW5nZSh0LmJsdWUsMCwxKSYmaG8ubnVtYmVyUmFuZ2UodC5hbHBoYSwwLDEpfSwod3I9Q3J8fChDcj17fSkpLmNyZWF0ZT1mdW5jdGlvbihlLHQpe3JldHVybntyYW5nZTplLGNvbG9yOnR9fSx3ci5pcz1mdW5jdGlvbihlKXt2YXIgdD1lO3JldHVybiBmci5pcyh0LnJhbmdlKSYmdnIuaXModC5jb2xvcil9LChTcj1fcnx8KF9yPXt9KSkuY3JlYXRlPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm57bGFiZWw6ZSx0ZXh0RWRpdDp0LGFkZGl0aW9uYWxUZXh0RWRpdHM6bn19LFNyLmlzPWZ1bmN0aW9uKGUpe3ZhciB0PWU7cmV0dXJuIGhvLnN0cmluZyh0LmxhYmVsKSYmKGhvLnVuZGVmaW5lZCh0LnRleHRFZGl0KXx8S3IuaXModCkpJiYoaG8udW5kZWZpbmVkKHQuYWRkaXRpb25hbFRleHRFZGl0cyl8fGhvLnR5cGVkQXJyYXkodC5hZGRpdGlvbmFsVGV4dEVkaXRzLEtyLmlzKSl9LChFcj1Bcnx8KEFyPXt9KSkuQ29tbWVudD0iY29tbWVudCIsRXIuSW1wb3J0cz0iaW1wb3J0cyIsRXIuUmVnaW9uPSJyZWdpb24iLChOcj14cnx8KHhyPXt9KSkuY3JlYXRlPWZ1bmN0aW9uKGUsdCxuLHIsaSl7dmFyIG89e3N0YXJ0TGluZTplLGVuZExpbmU6dH07cmV0dXJuIGhvLmRlZmluZWQobikmJihvLnN0YXJ0Q2hhcmFjdGVyPW4pLGhvLmRlZmluZWQocikmJihvLmVuZENoYXJhY3Rlcj1yKSxoby5kZWZpbmVkKGkpJiYoby5raW5kPWkpLG99LE5yLmlzPWZ1bmN0aW9uKGUpe3ZhciB0PWU7cmV0dXJuIGhvLnVpbnRlZ2VyKHQuc3RhcnRMaW5lKSYmaG8udWludGVnZXIodC5zdGFydExpbmUpJiYoaG8udW5kZWZpbmVkKHQuc3RhcnRDaGFyYWN0ZXIpfHxoby51aW50ZWdlcih0LnN0YXJ0Q2hhcmFjdGVyKSkmJihoby51bmRlZmluZWQodC5lbmRDaGFyYWN0ZXIpfHxoby51aW50ZWdlcih0LmVuZENoYXJhY3RlcikpJiYoaG8udW5kZWZpbmVkKHQua2luZCl8fGhvLnN0cmluZyh0LmtpbmQpKX0sKExyPWtyfHwoa3I9e30pKS5jcmVhdGU9ZnVuY3Rpb24oZSx0KXtyZXR1cm57bG9jYXRpb246ZSxtZXNzYWdlOnR9fSxMci5pcz1mdW5jdGlvbihlKXt2YXIgdD1lO3JldHVybiBoby5kZWZpbmVkKHQpJiZtci5pcyh0LmxvY2F0aW9uKSYmaG8uc3RyaW5nKHQubWVzc2FnZSl9LChPcj1Ucnx8KFRyPXt9KSkuRXJyb3I9MSxPci5XYXJuaW5nPTIsT3IuSW5mb3JtYXRpb249MyxPci5IaW50PTQsKE1yPUlyfHwoSXI9e30pKS5Vbm5lY2Vzc2FyeT0xLE1yLkRlcHJlY2F0ZWQ9MiwoUHJ8fChQcj17fSkpLmlzPWZ1bmN0aW9uKGUpe3ZhciB0PWU7cmV0dXJuIG51bGwhPXQmJmhvLnN0cmluZyh0LmhyZWYpfSwoVnI9UnJ8fChScj17fSkpLmNyZWF0ZT1mdW5jdGlvbihlLHQsbixyLGksbyl7dmFyIGE9e3JhbmdlOmUsbWVzc2FnZTp0fTtyZXR1cm4gaG8uZGVmaW5lZChuKSYmKGEuc2V2ZXJpdHk9biksaG8uZGVmaW5lZChyKSYmKGEuY29kZT1yKSxoby5kZWZpbmVkKGkpJiYoYS5zb3VyY2U9aSksaG8uZGVmaW5lZChvKSYmKGEucmVsYXRlZEluZm9ybWF0aW9uPW8pLGF9LFZyLmlzPWZ1bmN0aW9uKGUpe3ZhciB0LG49ZTtyZXR1cm4gaG8uZGVmaW5lZChuKSYmZnIuaXMobi5yYW5nZSkmJmhvLnN0cmluZyhuLm1lc3NhZ2UpJiYoaG8ubnVtYmVyKG4uc2V2ZXJpdHkpfHxoby51bmRlZmluZWQobi5zZXZlcml0eSkpJiYoaG8uaW50ZWdlcihuLmNvZGUpfHxoby5zdHJpbmcobi5jb2RlKXx8aG8udW5kZWZpbmVkKG4uY29kZSkpJiYoaG8udW5kZWZpbmVkKG4uY29kZURlc2NyaXB0aW9uKXx8aG8uc3RyaW5nKG51bGw9PT0odD1uLmNvZGVEZXNjcmlwdGlvbil8fHZvaWQgMD09PXQ/dm9pZCAwOnQuaHJlZikpJiYoaG8uc3RyaW5nKG4uc291cmNlKXx8aG8udW5kZWZpbmVkKG4uc291cmNlKSkmJihoby51bmRlZmluZWQobi5yZWxhdGVkSW5mb3JtYXRpb24pfHxoby50eXBlZEFycmF5KG4ucmVsYXRlZEluZm9ybWF0aW9uLGtyLmlzKSl9LChEcj1Gcnx8KEZyPXt9KSkuY3JlYXRlPWZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuPVtdLHI9MjtyPGFyZ3VtZW50cy5sZW5ndGg7cisrKW5bci0yXT1hcmd1bWVudHNbcl07dmFyIGk9e3RpdGxlOmUsY29tbWFuZDp0fTtyZXR1cm4gaG8uZGVmaW5lZChuKSYmbi5sZW5ndGg+MCYmKGkuYXJndW1lbnRzPW4pLGl9LERyLmlzPWZ1bmN0aW9uKGUpe3ZhciB0PWU7cmV0dXJuIGhvLmRlZmluZWQodCkmJmhvLnN0cmluZyh0LnRpdGxlKSYmaG8uc3RyaW5nKHQuY29tbWFuZCl9LChqcj1Lcnx8KEtyPXt9KSkucmVwbGFjZT1mdW5jdGlvbihlLHQpe3JldHVybntyYW5nZTplLG5ld1RleHQ6dH19LGpyLmluc2VydD1mdW5jdGlvbihlLHQpe3JldHVybntyYW5nZTp7c3RhcnQ6ZSxlbmQ6ZX0sbmV3VGV4dDp0fX0sanIuZGVsPWZ1bmN0aW9uKGUpe3JldHVybntyYW5nZTplLG5ld1RleHQ6IiJ9fSxqci5pcz1mdW5jdGlvbihlKXt2YXIgdD1lO3JldHVybiBoby5vYmplY3RMaXRlcmFsKHQpJiZoby5zdHJpbmcodC5uZXdUZXh0KSYmZnIuaXModC5yYW5nZSl9LChCcj1Vcnx8KFVyPXt9KSkuY3JlYXRlPWZ1bmN0aW9uKGUsdCxuKXt2YXIgcj17bGFiZWw6ZX07cmV0dXJuIHZvaWQgMCE9PXQmJihyLm5lZWRzQ29uZmlybWF0aW9uPXQpLHZvaWQgMCE9PW4mJihyLmRlc2NyaXB0aW9uPW4pLHJ9LEJyLmlzPWZ1bmN0aW9uKGUpe3ZhciB0PWU7cmV0dXJuIHZvaWQgMCE9PXQmJmhvLm9iamVjdExpdGVyYWwodCkmJmhvLnN0cmluZyh0LmxhYmVsKSYmKGhvLmJvb2xlYW4odC5uZWVkc0NvbmZpcm1hdGlvbil8fHZvaWQgMD09PXQubmVlZHNDb25maXJtYXRpb24pJiYoaG8uc3RyaW5nKHQuZGVzY3JpcHRpb24pfHx2b2lkIDA9PT10LmRlc2NyaXB0aW9uKX0sKHFyfHwocXI9e30pKS5pcz1mdW5jdGlvbihlKXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIGV9LChXcj0kcnx8KCRyPXt9KSkucmVwbGFjZT1mdW5jdGlvbihlLHQsbil7cmV0dXJue3JhbmdlOmUsbmV3VGV4dDp0LGFubm90YXRpb25JZDpufX0sV3IuaW5zZXJ0PWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm57cmFuZ2U6e3N0YXJ0OmUsZW5kOmV9LG5ld1RleHQ6dCxhbm5vdGF0aW9uSWQ6bn19LFdyLmRlbD1mdW5jdGlvbihlLHQpe3JldHVybntyYW5nZTplLG5ld1RleHQ6IiIsYW5ub3RhdGlvbklkOnR9fSxXci5pcz1mdW5jdGlvbihlKXt2YXIgdD1lO3JldHVybiBLci5pcyh0KSYmKFVyLmlzKHQuYW5ub3RhdGlvbklkKXx8cXIuaXModC5hbm5vdGF0aW9uSWQpKX0sKHpyPUhyfHwoSHI9e30pKS5jcmVhdGU9ZnVuY3Rpb24oZSx0KXtyZXR1cm57dGV4dERvY3VtZW50OmUsZWRpdHM6dH19LHpyLmlzPWZ1bmN0aW9uKGUpe3ZhciB0PWU7cmV0dXJuIGhvLmRlZmluZWQodCkmJnBpLmlzKHQudGV4dERvY3VtZW50KSYmQXJyYXkuaXNBcnJheSh0LmVkaXRzKX0sKEpyPUdyfHwoR3I9e30pKS5jcmVhdGU9ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXtraW5kOiJjcmVhdGUiLHVyaTplfTtyZXR1cm4gdm9pZCAwPT09dHx8dm9pZCAwPT09dC5vdmVyd3JpdGUmJnZvaWQgMD09PXQuaWdub3JlSWZFeGlzdHN8fChyLm9wdGlvbnM9dCksdm9pZCAwIT09biYmKHIuYW5ub3RhdGlvbklkPW4pLHJ9LEpyLmlzPWZ1bmN0aW9uKGUpe3ZhciB0PWU7cmV0dXJuIHQmJiJjcmVhdGUiPT09dC5raW5kJiZoby5zdHJpbmcodC51cmkpJiYodm9pZCAwPT09dC5vcHRpb25zfHwodm9pZCAwPT09dC5vcHRpb25zLm92ZXJ3cml0ZXx8aG8uYm9vbGVhbih0Lm9wdGlvbnMub3ZlcndyaXRlKSkmJih2b2lkIDA9PT10Lm9wdGlvbnMuaWdub3JlSWZFeGlzdHN8fGhvLmJvb2xlYW4odC5vcHRpb25zLmlnbm9yZUlmRXhpc3RzKSkpJiYodm9pZCAwPT09dC5hbm5vdGF0aW9uSWR8fHFyLmlzKHQuYW5ub3RhdGlvbklkKSl9LChacj1Ycnx8KFhyPXt9KSkuY3JlYXRlPWZ1bmN0aW9uKGUsdCxuLHIpe3ZhciBpPXtraW5kOiJyZW5hbWUiLG9sZFVyaTplLG5ld1VyaTp0fTtyZXR1cm4gdm9pZCAwPT09bnx8dm9pZCAwPT09bi5vdmVyd3JpdGUmJnZvaWQgMD09PW4uaWdub3JlSWZFeGlzdHN8fChpLm9wdGlvbnM9biksdm9pZCAwIT09ciYmKGkuYW5ub3RhdGlvbklkPXIpLGl9LFpyLmlzPWZ1bmN0aW9uKGUpe3ZhciB0PWU7cmV0dXJuIHQmJiJyZW5hbWUiPT09dC5raW5kJiZoby5zdHJpbmcodC5vbGRVcmkpJiZoby5zdHJpbmcodC5uZXdVcmkpJiYodm9pZCAwPT09dC5vcHRpb25zfHwodm9pZCAwPT09dC5vcHRpb25zLm92ZXJ3cml0ZXx8aG8uYm9vbGVhbih0Lm9wdGlvbnMub3ZlcndyaXRlKSkmJih2b2lkIDA9PT10Lm9wdGlvbnMuaWdub3JlSWZFeGlzdHN8fGhvLmJvb2xlYW4odC5vcHRpb25zLmlnbm9yZUlmRXhpc3RzKSkpJiYodm9pZCAwPT09dC5hbm5vdGF0aW9uSWR8fHFyLmlzKHQuYW5ub3RhdGlvbklkKSl9LChRcj1Zcnx8KFlyPXt9KSkuY3JlYXRlPWZ1bmN0aW9uKGUsdCxuKXt2YXIgcj17a2luZDoiZGVsZXRlIix1cmk6ZX07cmV0dXJuIHZvaWQgMD09PXR8fHZvaWQgMD09PXQucmVjdXJzaXZlJiZ2b2lkIDA9PT10Lmlnbm9yZUlmTm90RXhpc3RzfHwoci5vcHRpb25zPXQpLHZvaWQgMCE9PW4mJihyLmFubm90YXRpb25JZD1uKSxyfSxRci5pcz1mdW5jdGlvbihlKXt2YXIgdD1lO3JldHVybiB0JiYiZGVsZXRlIj09PXQua2luZCYmaG8uc3RyaW5nKHQudXJpKSYmKHZvaWQgMD09PXQub3B0aW9uc3x8KHZvaWQgMD09PXQub3B0aW9ucy5yZWN1cnNpdmV8fGhvLmJvb2xlYW4odC5vcHRpb25zLnJlY3Vyc2l2ZSkpJiYodm9pZCAwPT09dC5vcHRpb25zLmlnbm9yZUlmTm90RXhpc3RzfHxoby5ib29sZWFuKHQub3B0aW9ucy5pZ25vcmVJZk5vdEV4aXN0cykpKSYmKHZvaWQgMD09PXQuYW5ub3RhdGlvbklkfHxxci5pcyh0LmFubm90YXRpb25JZCkpfSwoZWl8fChlaT17fSkpLmlzPWZ1bmN0aW9uKGUpe3ZhciB0PWU7cmV0dXJuIHQmJih2b2lkIDAhPT10LmNoYW5nZXN8fHZvaWQgMCE9PXQuZG9jdW1lbnRDaGFuZ2VzKSYmKHZvaWQgMD09PXQuZG9jdW1lbnRDaGFuZ2VzfHx0LmRvY3VtZW50Q2hhbmdlcy5ldmVyeSgoZnVuY3Rpb24oZSl7cmV0dXJuIGhvLnN0cmluZyhlLmtpbmQpP0dyLmlzKGUpfHxYci5pcyhlKXx8WXIuaXMoZSk6SHIuaXMoZSl9KSkpfTt2YXIgZmksZGksbWksZ2kscGksYmksdmkseWksQ2ksd2ksX2ksU2ksQWksRWkseGksTmksa2ksTGksVGksT2ksSWksTWksUGksUmksVmksRmksRGksS2ksamksVWksQmkscWksJGksV2ksSGksemksR2ksSmksWGksWmksWWksUWksZW8sdG8sbm8scm8saW8sb28sYW8sc28sY28sbG89ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsdCl7dGhpcy5lZGl0cz1lLHRoaXMuY2hhbmdlQW5ub3RhdGlvbnM9dH1yZXR1cm4gZS5wcm90b3R5cGUuaW5zZXJ0PWZ1bmN0aW9uKGUsdCxuKXt2YXIgcixpO2lmKHZvaWQgMD09PW4/cj1Lci5pbnNlcnQoZSx0KTpxci5pcyhuKT8oaT1uLHI9JHIuaW5zZXJ0KGUsdCxuKSk6KHRoaXMuYXNzZXJ0Q2hhbmdlQW5ub3RhdGlvbnModGhpcy5jaGFuZ2VBbm5vdGF0aW9ucyksaT10aGlzLmNoYW5nZUFubm90YXRpb25zLm1hbmFnZShuKSxyPSRyLmluc2VydChlLHQsaSkpLHRoaXMuZWRpdHMucHVzaChyKSx2b2lkIDAhPT1pKXJldHVybiBpfSxlLnByb3RvdHlwZS5yZXBsYWNlPWZ1bmN0aW9uKGUsdCxuKXt2YXIgcixpO2lmKHZvaWQgMD09PW4/cj1Lci5yZXBsYWNlKGUsdCk6cXIuaXMobik/KGk9bixyPSRyLnJlcGxhY2UoZSx0LG4pKToodGhpcy5hc3NlcnRDaGFuZ2VBbm5vdGF0aW9ucyh0aGlzLmNoYW5nZUFubm90YXRpb25zKSxpPXRoaXMuY2hhbmdlQW5ub3RhdGlvbnMubWFuYWdlKG4pLHI9JHIucmVwbGFjZShlLHQsaSkpLHRoaXMuZWRpdHMucHVzaChyKSx2b2lkIDAhPT1pKXJldHVybiBpfSxlLnByb3RvdHlwZS5kZWxldGU9ZnVuY3Rpb24oZSx0KXt2YXIgbixyO2lmKHZvaWQgMD09PXQ/bj1Lci5kZWwoZSk6cXIuaXModCk/KHI9dCxuPSRyLmRlbChlLHQpKToodGhpcy5hc3NlcnRDaGFuZ2VBbm5vdGF0aW9ucyh0aGlzLmNoYW5nZUFubm90YXRpb25zKSxyPXRoaXMuY2hhbmdlQW5ub3RhdGlvbnMubWFuYWdlKHQpLG49JHIuZGVsKGUscikpLHRoaXMuZWRpdHMucHVzaChuKSx2b2lkIDAhPT1yKXJldHVybiByfSxlLnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24oZSl7dGhpcy5lZGl0cy5wdXNoKGUpfSxlLnByb3RvdHlwZS5hbGw9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lZGl0c30sZS5wcm90b3R5cGUuY2xlYXI9ZnVuY3Rpb24oKXt0aGlzLmVkaXRzLnNwbGljZSgwLHRoaXMuZWRpdHMubGVuZ3RoKX0sZS5wcm90b3R5cGUuYXNzZXJ0Q2hhbmdlQW5ub3RhdGlvbnM9ZnVuY3Rpb24oZSl7aWYodm9pZCAwPT09ZSl0aHJvdyBuZXcgRXJyb3IoIlRleHQgZWRpdCBjaGFuZ2UgaXMgbm90IGNvbmZpZ3VyZWQgdG8gbWFuYWdlIGNoYW5nZSBhbm5vdGF0aW9ucy4iKX0sZX0oKSx1bz1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSl7dGhpcy5fYW5ub3RhdGlvbnM9dm9pZCAwPT09ZT9PYmplY3QuY3JlYXRlKG51bGwpOmUsdGhpcy5fY291bnRlcj0wLHRoaXMuX3NpemU9MH1yZXR1cm4gZS5wcm90b3R5cGUuYWxsPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2Fubm90YXRpb25zfSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsInNpemUiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc2l6ZX0sZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9KSxlLnByb3RvdHlwZS5tYW5hZ2U9ZnVuY3Rpb24oZSx0KXt2YXIgbjtpZihxci5pcyhlKT9uPWU6KG49dGhpcy5uZXh0SWQoKSx0PWUpLHZvaWQgMCE9PXRoaXMuX2Fubm90YXRpb25zW25dKXRocm93IG5ldyBFcnJvcigiSWQgIituKyIgaXMgYWxyZWFkeSBpbiB1c2UuIik7aWYodm9pZCAwPT09dCl0aHJvdyBuZXcgRXJyb3IoIk5vIGFubm90YXRpb24gcHJvdmlkZWQgZm9yIGlkICIrbik7cmV0dXJuIHRoaXMuX2Fubm90YXRpb25zW25dPXQsdGhpcy5fc2l6ZSsrLG59LGUucHJvdG90eXBlLm5leHRJZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9jb3VudGVyKyssdGhpcy5fY291bnRlci50b1N0cmluZygpfSxlfSgpOyFmdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSl7dmFyIHQ9dGhpczt0aGlzLl90ZXh0RWRpdENoYW5nZXM9T2JqZWN0LmNyZWF0ZShudWxsKSx2b2lkIDAhPT1lPyh0aGlzLl93b3Jrc3BhY2VFZGl0PWUsZS5kb2N1bWVudENoYW5nZXM/KHRoaXMuX2NoYW5nZUFubm90YXRpb25zPW5ldyB1byhlLmNoYW5nZUFubm90YXRpb25zKSxlLmNoYW5nZUFubm90YXRpb25zPXRoaXMuX2NoYW5nZUFubm90YXRpb25zLmFsbCgpLGUuZG9jdW1lbnRDaGFuZ2VzLmZvckVhY2goKGZ1bmN0aW9uKGUpe2lmKEhyLmlzKGUpKXt2YXIgbj1uZXcgbG8oZS5lZGl0cyx0Ll9jaGFuZ2VBbm5vdGF0aW9ucyk7dC5fdGV4dEVkaXRDaGFuZ2VzW2UudGV4dERvY3VtZW50LnVyaV09bn19KSkpOmUuY2hhbmdlcyYmT2JqZWN0LmtleXMoZS5jaGFuZ2VzKS5mb3JFYWNoKChmdW5jdGlvbihuKXt2YXIgcj1uZXcgbG8oZS5jaGFuZ2VzW25dKTt0Ll90ZXh0RWRpdENoYW5nZXNbbl09cn0pKSk6dGhpcy5fd29ya3NwYWNlRWRpdD17fX1PYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsImVkaXQiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pbml0RG9jdW1lbnRDaGFuZ2VzKCksdm9pZCAwIT09dGhpcy5fY2hhbmdlQW5ub3RhdGlvbnMmJigwPT09dGhpcy5fY2hhbmdlQW5ub3RhdGlvbnMuc2l6ZT90aGlzLl93b3Jrc3BhY2VFZGl0LmNoYW5nZUFubm90YXRpb25zPXZvaWQgMDp0aGlzLl93b3Jrc3BhY2VFZGl0LmNoYW5nZUFubm90YXRpb25zPXRoaXMuX2NoYW5nZUFubm90YXRpb25zLmFsbCgpKSx0aGlzLl93b3Jrc3BhY2VFZGl0fSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLGUucHJvdG90eXBlLmdldFRleHRFZGl0Q2hhbmdlPWZ1bmN0aW9uKGUpe2lmKHBpLmlzKGUpKXtpZih0aGlzLmluaXREb2N1bWVudENoYW5nZXMoKSx2b2lkIDA9PT10aGlzLl93b3Jrc3BhY2VFZGl0LmRvY3VtZW50Q2hhbmdlcyl0aHJvdyBuZXcgRXJyb3IoIldvcmtzcGFjZSBlZGl0IGlzIG5vdCBjb25maWd1cmVkIGZvciBkb2N1bWVudCBjaGFuZ2VzLiIpO3ZhciB0PXt1cmk6ZS51cmksdmVyc2lvbjplLnZlcnNpb259O2lmKCEocj10aGlzLl90ZXh0RWRpdENoYW5nZXNbdC51cmldKSl7dmFyIG49e3RleHREb2N1bWVudDp0LGVkaXRzOmk9W119O3RoaXMuX3dvcmtzcGFjZUVkaXQuZG9jdW1lbnRDaGFuZ2VzLnB1c2gobikscj1uZXcgbG8oaSx0aGlzLl9jaGFuZ2VBbm5vdGF0aW9ucyksdGhpcy5fdGV4dEVkaXRDaGFuZ2VzW3QudXJpXT1yfXJldHVybiByfWlmKHRoaXMuaW5pdENoYW5nZXMoKSx2b2lkIDA9PT10aGlzLl93b3Jrc3BhY2VFZGl0LmNoYW5nZXMpdGhyb3cgbmV3IEVycm9yKCJXb3Jrc3BhY2UgZWRpdCBpcyBub3QgY29uZmlndXJlZCBmb3Igbm9ybWFsIHRleHQgZWRpdCBjaGFuZ2VzLiIpO3ZhciByO2lmKCEocj10aGlzLl90ZXh0RWRpdENoYW5nZXNbZV0pKXt2YXIgaT1bXTt0aGlzLl93b3Jrc3BhY2VFZGl0LmNoYW5nZXNbZV09aSxyPW5ldyBsbyhpKSx0aGlzLl90ZXh0RWRpdENoYW5nZXNbZV09cn1yZXR1cm4gcn0sZS5wcm90b3R5cGUuaW5pdERvY3VtZW50Q2hhbmdlcz1mdW5jdGlvbigpe3ZvaWQgMD09PXRoaXMuX3dvcmtzcGFjZUVkaXQuZG9jdW1lbnRDaGFuZ2VzJiZ2b2lkIDA9PT10aGlzLl93b3Jrc3BhY2VFZGl0LmNoYW5nZXMmJih0aGlzLl9jaGFuZ2VBbm5vdGF0aW9ucz1uZXcgdW8sdGhpcy5fd29ya3NwYWNlRWRpdC5kb2N1bWVudENoYW5nZXM9W10sdGhpcy5fd29ya3NwYWNlRWRpdC5jaGFuZ2VBbm5vdGF0aW9ucz10aGlzLl9jaGFuZ2VBbm5vdGF0aW9ucy5hbGwoKSl9LGUucHJvdG90eXBlLmluaXRDaGFuZ2VzPWZ1bmN0aW9uKCl7dm9pZCAwPT09dGhpcy5fd29ya3NwYWNlRWRpdC5kb2N1bWVudENoYW5nZXMmJnZvaWQgMD09PXRoaXMuX3dvcmtzcGFjZUVkaXQuY2hhbmdlcyYmKHRoaXMuX3dvcmtzcGFjZUVkaXQuY2hhbmdlcz1PYmplY3QuY3JlYXRlKG51bGwpKX0sZS5wcm90b3R5cGUuY3JlYXRlRmlsZT1mdW5jdGlvbihlLHQsbil7aWYodGhpcy5pbml0RG9jdW1lbnRDaGFuZ2VzKCksdm9pZCAwPT09dGhpcy5fd29ya3NwYWNlRWRpdC5kb2N1bWVudENoYW5nZXMpdGhyb3cgbmV3IEVycm9yKCJXb3Jrc3BhY2UgZWRpdCBpcyBub3QgY29uZmlndXJlZCBmb3IgZG9jdW1lbnQgY2hhbmdlcy4iKTt2YXIgcixpLG87aWYoVXIuaXModCl8fHFyLmlzKHQpP3I9dDpuPXQsdm9pZCAwPT09cj9pPUdyLmNyZWF0ZShlLG4pOihvPXFyLmlzKHIpP3I6dGhpcy5fY2hhbmdlQW5ub3RhdGlvbnMubWFuYWdlKHIpLGk9R3IuY3JlYXRlKGUsbixvKSksdGhpcy5fd29ya3NwYWNlRWRpdC5kb2N1bWVudENoYW5nZXMucHVzaChpKSx2b2lkIDAhPT1vKXJldHVybiBvfSxlLnByb3RvdHlwZS5yZW5hbWVGaWxlPWZ1bmN0aW9uKGUsdCxuLHIpe2lmKHRoaXMuaW5pdERvY3VtZW50Q2hhbmdlcygpLHZvaWQgMD09PXRoaXMuX3dvcmtzcGFjZUVkaXQuZG9jdW1lbnRDaGFuZ2VzKXRocm93IG5ldyBFcnJvcigiV29ya3NwYWNlIGVkaXQgaXMgbm90IGNvbmZpZ3VyZWQgZm9yIGRvY3VtZW50IGNoYW5nZXMuIik7dmFyIGksbyxhO2lmKFVyLmlzKG4pfHxxci5pcyhuKT9pPW46cj1uLHZvaWQgMD09PWk/bz1Yci5jcmVhdGUoZSx0LHIpOihhPXFyLmlzKGkpP2k6dGhpcy5fY2hhbmdlQW5ub3RhdGlvbnMubWFuYWdlKGkpLG89WHIuY3JlYXRlKGUsdCxyLGEpKSx0aGlzLl93b3Jrc3BhY2VFZGl0LmRvY3VtZW50Q2hhbmdlcy5wdXNoKG8pLHZvaWQgMCE9PWEpcmV0dXJuIGF9LGUucHJvdG90eXBlLmRlbGV0ZUZpbGU9ZnVuY3Rpb24oZSx0LG4pe2lmKHRoaXMuaW5pdERvY3VtZW50Q2hhbmdlcygpLHZvaWQgMD09PXRoaXMuX3dvcmtzcGFjZUVkaXQuZG9jdW1lbnRDaGFuZ2VzKXRocm93IG5ldyBFcnJvcigiV29ya3NwYWNlIGVkaXQgaXMgbm90IGNvbmZpZ3VyZWQgZm9yIGRvY3VtZW50IGNoYW5nZXMuIik7dmFyIHIsaSxvO2lmKFVyLmlzKHQpfHxxci5pcyh0KT9yPXQ6bj10LHZvaWQgMD09PXI/aT1Zci5jcmVhdGUoZSxuKToobz1xci5pcyhyKT9yOnRoaXMuX2NoYW5nZUFubm90YXRpb25zLm1hbmFnZShyKSxpPVlyLmNyZWF0ZShlLG4sbykpLHRoaXMuX3dvcmtzcGFjZUVkaXQuZG9jdW1lbnRDaGFuZ2VzLnB1c2goaSksdm9pZCAwIT09bylyZXR1cm4gb319KCksKGRpPWZpfHwoZmk9e30pKS5jcmVhdGU9ZnVuY3Rpb24oZSl7cmV0dXJue3VyaTplfX0sZGkuaXM9ZnVuY3Rpb24oZSl7dmFyIHQ9ZTtyZXR1cm4gaG8uZGVmaW5lZCh0KSYmaG8uc3RyaW5nKHQudXJpKX0sKGdpPW1pfHwobWk9e30pKS5jcmVhdGU9ZnVuY3Rpb24oZSx0KXtyZXR1cm57dXJpOmUsdmVyc2lvbjp0fX0sZ2kuaXM9ZnVuY3Rpb24oZSl7dmFyIHQ9ZTtyZXR1cm4gaG8uZGVmaW5lZCh0KSYmaG8uc3RyaW5nKHQudXJpKSYmaG8uaW50ZWdlcih0LnZlcnNpb24pfSwoYmk9cGl8fChwaT17fSkpLmNyZWF0ZT1mdW5jdGlvbihlLHQpe3JldHVybnt1cmk6ZSx2ZXJzaW9uOnR9fSxiaS5pcz1mdW5jdGlvbihlKXt2YXIgdD1lO3JldHVybiBoby5kZWZpbmVkKHQpJiZoby5zdHJpbmcodC51cmkpJiYobnVsbD09PXQudmVyc2lvbnx8aG8uaW50ZWdlcih0LnZlcnNpb24pKX0sKHlpPXZpfHwodmk9e30pKS5jcmVhdGU9ZnVuY3Rpb24oZSx0LG4scil7cmV0dXJue3VyaTplLGxhbmd1YWdlSWQ6dCx2ZXJzaW9uOm4sdGV4dDpyfX0seWkuaXM9ZnVuY3Rpb24oZSl7dmFyIHQ9ZTtyZXR1cm4gaG8uZGVmaW5lZCh0KSYmaG8uc3RyaW5nKHQudXJpKSYmaG8uc3RyaW5nKHQubGFuZ3VhZ2VJZCkmJmhvLmludGVnZXIodC52ZXJzaW9uKSYmaG8uc3RyaW5nKHQudGV4dCl9LCh3aT1DaXx8KENpPXt9KSkuUGxhaW5UZXh0PSJwbGFpbnRleHQiLHdpLk1hcmtkb3duPSJtYXJrZG93biIsZnVuY3Rpb24oZSl7ZS5pcz1mdW5jdGlvbih0KXt2YXIgbj10O3JldHVybiBuPT09ZS5QbGFpblRleHR8fG49PT1lLk1hcmtkb3dufX0oQ2l8fChDaT17fSkpLChfaXx8KF9pPXt9KSkuaXM9ZnVuY3Rpb24oZSl7dmFyIHQ9ZTtyZXR1cm4gaG8ub2JqZWN0TGl0ZXJhbChlKSYmQ2kuaXModC5raW5kKSYmaG8uc3RyaW5nKHQudmFsdWUpfSwoQWk9U2l8fChTaT17fSkpLlRleHQ9MSxBaS5NZXRob2Q9MixBaS5GdW5jdGlvbj0zLEFpLkNvbnN0cnVjdG9yPTQsQWkuRmllbGQ9NSxBaS5WYXJpYWJsZT02LEFpLkNsYXNzPTcsQWkuSW50ZXJmYWNlPTgsQWkuTW9kdWxlPTksQWkuUHJvcGVydHk9MTAsQWkuVW5pdD0xMSxBaS5WYWx1ZT0xMixBaS5FbnVtPTEzLEFpLktleXdvcmQ9MTQsQWkuU25pcHBldD0xNSxBaS5Db2xvcj0xNixBaS5GaWxlPTE3LEFpLlJlZmVyZW5jZT0xOCxBaS5Gb2xkZXI9MTksQWkuRW51bU1lbWJlcj0yMCxBaS5Db25zdGFudD0yMSxBaS5TdHJ1Y3Q9MjIsQWkuRXZlbnQ9MjMsQWkuT3BlcmF0b3I9MjQsQWkuVHlwZVBhcmFtZXRlcj0yNSwoeGk9RWl8fChFaT17fSkpLlBsYWluVGV4dD0xLHhpLlNuaXBwZXQ9MiwoTml8fChOaT17fSkpLkRlcHJlY2F0ZWQ9MSwoTGk9a2l8fChraT17fSkpLmNyZWF0ZT1mdW5jdGlvbihlLHQsbil7cmV0dXJue25ld1RleHQ6ZSxpbnNlcnQ6dCxyZXBsYWNlOm59fSxMaS5pcz1mdW5jdGlvbihlKXt2YXIgdD1lO3JldHVybiB0JiZoby5zdHJpbmcodC5uZXdUZXh0KSYmZnIuaXModC5pbnNlcnQpJiZmci5pcyh0LnJlcGxhY2UpfSwoT2k9VGl8fChUaT17fSkpLmFzSXM9MSxPaS5hZGp1c3RJbmRlbnRhdGlvbj0yLChJaXx8KElpPXt9KSkuY3JlYXRlPWZ1bmN0aW9uKGUpe3JldHVybntsYWJlbDplfX0sKE1pfHwoTWk9e30pKS5jcmVhdGU9ZnVuY3Rpb24oZSx0KXtyZXR1cm57aXRlbXM6ZXx8W10saXNJbmNvbXBsZXRlOiEhdH19LChSaT1QaXx8KFBpPXt9KSkuZnJvbVBsYWluVGV4dD1mdW5jdGlvbihlKXtyZXR1cm4gZS5yZXBsYWNlKC9bXFxgKl97fVtcXSgpIytcLS4hXS9nLCJcXCQmIil9LFJpLmlzPWZ1bmN0aW9uKGUpe3ZhciB0PWU7cmV0dXJuIGhvLnN0cmluZyh0KXx8aG8ub2JqZWN0TGl0ZXJhbCh0KSYmaG8uc3RyaW5nKHQubGFuZ3VhZ2UpJiZoby5zdHJpbmcodC52YWx1ZSl9LChWaXx8KFZpPXt9KSkuaXM9ZnVuY3Rpb24oZSl7dmFyIHQ9ZTtyZXR1cm4hIXQmJmhvLm9iamVjdExpdGVyYWwodCkmJihfaS5pcyh0LmNvbnRlbnRzKXx8UGkuaXModC5jb250ZW50cyl8fGhvLnR5cGVkQXJyYXkodC5jb250ZW50cyxQaS5pcykpJiYodm9pZCAwPT09ZS5yYW5nZXx8ZnIuaXMoZS5yYW5nZSkpfSwoRml8fChGaT17fSkpLmNyZWF0ZT1mdW5jdGlvbihlLHQpe3JldHVybiB0P3tsYWJlbDplLGRvY3VtZW50YXRpb246dH06e2xhYmVsOmV9fSwoRGl8fChEaT17fSkpLmNyZWF0ZT1mdW5jdGlvbihlLHQpe2Zvcih2YXIgbj1bXSxyPTI7cjxhcmd1bWVudHMubGVuZ3RoO3IrKyluW3ItMl09YXJndW1lbnRzW3JdO3ZhciBpPXtsYWJlbDplfTtyZXR1cm4gaG8uZGVmaW5lZCh0KSYmKGkuZG9jdW1lbnRhdGlvbj10KSxoby5kZWZpbmVkKG4pP2kucGFyYW1ldGVycz1uOmkucGFyYW1ldGVycz1bXSxpfSwoamk9S2l8fChLaT17fSkpLlRleHQ9MSxqaS5SZWFkPTIsamkuV3JpdGU9MywoVWl8fChVaT17fSkpLmNyZWF0ZT1mdW5jdGlvbihlLHQpe3ZhciBuPXtyYW5nZTplfTtyZXR1cm4gaG8ubnVtYmVyKHQpJiYobi5raW5kPXQpLG59LChxaT1CaXx8KEJpPXt9KSkuRmlsZT0xLHFpLk1vZHVsZT0yLHFpLk5hbWVzcGFjZT0zLHFpLlBhY2thZ2U9NCxxaS5DbGFzcz01LHFpLk1ldGhvZD02LHFpLlByb3BlcnR5PTcscWkuRmllbGQ9OCxxaS5Db25zdHJ1Y3Rvcj05LHFpLkVudW09MTAscWkuSW50ZXJmYWNlPTExLHFpLkZ1bmN0aW9uPTEyLHFpLlZhcmlhYmxlPTEzLHFpLkNvbnN0YW50PTE0LHFpLlN0cmluZz0xNSxxaS5OdW1iZXI9MTYscWkuQm9vbGVhbj0xNyxxaS5BcnJheT0xOCxxaS5PYmplY3Q9MTkscWkuS2V5PTIwLHFpLk51bGw9MjEscWkuRW51bU1lbWJlcj0yMixxaS5TdHJ1Y3Q9MjMscWkuRXZlbnQ9MjQscWkuT3BlcmF0b3I9MjUscWkuVHlwZVBhcmFtZXRlcj0yNiwoJGl8fCgkaT17fSkpLkRlcHJlY2F0ZWQ9MSwoV2l8fChXaT17fSkpLmNyZWF0ZT1mdW5jdGlvbihlLHQsbixyLGkpe3ZhciBvPXtuYW1lOmUsa2luZDp0LGxvY2F0aW9uOnt1cmk6cixyYW5nZTpufX07cmV0dXJuIGkmJihvLmNvbnRhaW5lck5hbWU9aSksb30sKHppPUhpfHwoSGk9e30pKS5jcmVhdGU9ZnVuY3Rpb24oZSx0LG4scixpLG8pe3ZhciBhPXtuYW1lOmUsZGV0YWlsOnQsa2luZDpuLHJhbmdlOnIsc2VsZWN0aW9uUmFuZ2U6aX07cmV0dXJuIHZvaWQgMCE9PW8mJihhLmNoaWxkcmVuPW8pLGF9LHppLmlzPWZ1bmN0aW9uKGUpe3ZhciB0PWU7cmV0dXJuIHQmJmhvLnN0cmluZyh0Lm5hbWUpJiZoby5udW1iZXIodC5raW5kKSYmZnIuaXModC5yYW5nZSkmJmZyLmlzKHQuc2VsZWN0aW9uUmFuZ2UpJiYodm9pZCAwPT09dC5kZXRhaWx8fGhvLnN0cmluZyh0LmRldGFpbCkpJiYodm9pZCAwPT09dC5kZXByZWNhdGVkfHxoby5ib29sZWFuKHQuZGVwcmVjYXRlZCkpJiYodm9pZCAwPT09dC5jaGlsZHJlbnx8QXJyYXkuaXNBcnJheSh0LmNoaWxkcmVuKSkmJih2b2lkIDA9PT10LnRhZ3N8fEFycmF5LmlzQXJyYXkodC50YWdzKSl9LChKaT1HaXx8KEdpPXt9KSkuRW1wdHk9IiIsSmkuUXVpY2tGaXg9InF1aWNrZml4IixKaS5SZWZhY3Rvcj0icmVmYWN0b3IiLEppLlJlZmFjdG9yRXh0cmFjdD0icmVmYWN0b3IuZXh0cmFjdCIsSmkuUmVmYWN0b3JJbmxpbmU9InJlZmFjdG9yLmlubGluZSIsSmkuUmVmYWN0b3JSZXdyaXRlPSJyZWZhY3Rvci5yZXdyaXRlIixKaS5Tb3VyY2U9InNvdXJjZSIsSmkuU291cmNlT3JnYW5pemVJbXBvcnRzPSJzb3VyY2Uub3JnYW5pemVJbXBvcnRzIixKaS5Tb3VyY2VGaXhBbGw9InNvdXJjZS5maXhBbGwiLChaaT1YaXx8KFhpPXt9KSkuY3JlYXRlPWZ1bmN0aW9uKGUsdCl7dmFyIG49e2RpYWdub3N0aWNzOmV9O3JldHVybiBudWxsIT10JiYobi5vbmx5PXQpLG59LFppLmlzPWZ1bmN0aW9uKGUpe3ZhciB0PWU7cmV0dXJuIGhvLmRlZmluZWQodCkmJmhvLnR5cGVkQXJyYXkodC5kaWFnbm9zdGljcyxSci5pcykmJih2b2lkIDA9PT10Lm9ubHl8fGhvLnR5cGVkQXJyYXkodC5vbmx5LGhvLnN0cmluZykpfSwoUWk9WWl8fChZaT17fSkpLmNyZWF0ZT1mdW5jdGlvbihlLHQsbil7dmFyIHI9e3RpdGxlOmV9LGk9ITA7cmV0dXJuInN0cmluZyI9PXR5cGVvZiB0PyhpPSExLHIua2luZD10KTpGci5pcyh0KT9yLmNvbW1hbmQ9dDpyLmVkaXQ9dCxpJiZ2b2lkIDAhPT1uJiYoci5raW5kPW4pLHJ9LFFpLmlzPWZ1bmN0aW9uKGUpe3ZhciB0PWU7cmV0dXJuIHQmJmhvLnN0cmluZyh0LnRpdGxlKSYmKHZvaWQgMD09PXQuZGlhZ25vc3RpY3N8fGhvLnR5cGVkQXJyYXkodC5kaWFnbm9zdGljcyxSci5pcykpJiYodm9pZCAwPT09dC5raW5kfHxoby5zdHJpbmcodC5raW5kKSkmJih2b2lkIDAhPT10LmVkaXR8fHZvaWQgMCE9PXQuY29tbWFuZCkmJih2b2lkIDA9PT10LmNvbW1hbmR8fEZyLmlzKHQuY29tbWFuZCkpJiYodm9pZCAwPT09dC5pc1ByZWZlcnJlZHx8aG8uYm9vbGVhbih0LmlzUHJlZmVycmVkKSkmJih2b2lkIDA9PT10LmVkaXR8fGVpLmlzKHQuZWRpdCkpfSwodG89ZW98fChlbz17fSkpLmNyZWF0ZT1mdW5jdGlvbihlLHQpe3ZhciBuPXtyYW5nZTplfTtyZXR1cm4gaG8uZGVmaW5lZCh0KSYmKG4uZGF0YT10KSxufSx0by5pcz1mdW5jdGlvbihlKXt2YXIgdD1lO3JldHVybiBoby5kZWZpbmVkKHQpJiZmci5pcyh0LnJhbmdlKSYmKGhvLnVuZGVmaW5lZCh0LmNvbW1hbmQpfHxGci5pcyh0LmNvbW1hbmQpKX0sKHJvPW5vfHwobm89e30pKS5jcmVhdGU9ZnVuY3Rpb24oZSx0KXtyZXR1cm57dGFiU2l6ZTplLGluc2VydFNwYWNlczp0fX0scm8uaXM9ZnVuY3Rpb24oZSl7dmFyIHQ9ZTtyZXR1cm4gaG8uZGVmaW5lZCh0KSYmaG8udWludGVnZXIodC50YWJTaXplKSYmaG8uYm9vbGVhbih0Lmluc2VydFNwYWNlcyl9LChvbz1pb3x8KGlvPXt9KSkuY3JlYXRlPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm57cmFuZ2U6ZSx0YXJnZXQ6dCxkYXRhOm59fSxvby5pcz1mdW5jdGlvbihlKXt2YXIgdD1lO3JldHVybiBoby5kZWZpbmVkKHQpJiZmci5pcyh0LnJhbmdlKSYmKGhvLnVuZGVmaW5lZCh0LnRhcmdldCl8fGhvLnN0cmluZyh0LnRhcmdldCkpfSwoc289YW98fChhbz17fSkpLmNyZWF0ZT1mdW5jdGlvbihlLHQpe3JldHVybntyYW5nZTplLHBhcmVudDp0fX0sc28uaXM9ZnVuY3Rpb24oZSl7dmFyIHQ9ZTtyZXR1cm4gdm9pZCAwIT09dCYmZnIuaXModC5yYW5nZSkmJih2b2lkIDA9PT10LnBhcmVudHx8c28uaXModC5wYXJlbnQpKX0sZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdChlLG4pe2lmKGUubGVuZ3RoPD0xKXJldHVybiBlO3ZhciByPWUubGVuZ3RoLzJ8MCxpPWUuc2xpY2UoMCxyKSxvPWUuc2xpY2Uocik7dChpLG4pLHQobyxuKTtmb3IodmFyIGE9MCxzPTAsYz0wO2E8aS5sZW5ndGgmJnM8by5sZW5ndGg7KXt2YXIgbD1uKGlbYV0sb1tzXSk7ZVtjKytdPWw8PTA/aVthKytdOm9bcysrXX1mb3IoO2E8aS5sZW5ndGg7KWVbYysrXT1pW2ErK107Zm9yKDtzPG8ubGVuZ3RoOyllW2MrK109b1tzKytdO3JldHVybiBlfWUuY3JlYXRlPWZ1bmN0aW9uKGUsdCxuLHIpe3JldHVybiBuZXcgZ28oZSx0LG4scil9LGUuaXM9ZnVuY3Rpb24oZSl7dmFyIHQ9ZTtyZXR1cm4hIShoby5kZWZpbmVkKHQpJiZoby5zdHJpbmcodC51cmkpJiYoaG8udW5kZWZpbmVkKHQubGFuZ3VhZ2VJZCl8fGhvLnN0cmluZyh0Lmxhbmd1YWdlSWQpKSYmaG8udWludGVnZXIodC5saW5lQ291bnQpJiZoby5mdW5jKHQuZ2V0VGV4dCkmJmhvLmZ1bmModC5wb3NpdGlvbkF0KSYmaG8uZnVuYyh0Lm9mZnNldEF0KSl9LGUuYXBwbHlFZGl0cz1mdW5jdGlvbihlLG4pe2Zvcih2YXIgcj1lLmdldFRleHQoKSxpPXQobiwoZnVuY3Rpb24oZSx0KXt2YXIgbj1lLnJhbmdlLnN0YXJ0LmxpbmUtdC5yYW5nZS5zdGFydC5saW5lO3JldHVybiAwPT09bj9lLnJhbmdlLnN0YXJ0LmNoYXJhY3Rlci10LnJhbmdlLnN0YXJ0LmNoYXJhY3RlcjpufSkpLG89ci5sZW5ndGgsYT1pLmxlbmd0aC0xO2E+PTA7YS0tKXt2YXIgcz1pW2FdLGM9ZS5vZmZzZXRBdChzLnJhbmdlLnN0YXJ0KSxsPWUub2Zmc2V0QXQocy5yYW5nZS5lbmQpO2lmKCEobDw9bykpdGhyb3cgbmV3IEVycm9yKCJPdmVybGFwcGluZyBlZGl0Iik7cj1yLnN1YnN0cmluZygwLGMpK3MubmV3VGV4dCtyLnN1YnN0cmluZyhsLHIubGVuZ3RoKSxvPWN9cmV0dXJuIHJ9fShjb3x8KGNvPXt9KSk7dmFyIGhvLGZvLG1vLGdvPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHQsbixyKXt0aGlzLl91cmk9ZSx0aGlzLl9sYW5ndWFnZUlkPXQsdGhpcy5fdmVyc2lvbj1uLHRoaXMuX2NvbnRlbnQ9cix0aGlzLl9saW5lT2Zmc2V0cz12b2lkIDB9cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwidXJpIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3VyaX0sZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsImxhbmd1YWdlSWQiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbGFuZ3VhZ2VJZH0sZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsInZlcnNpb24iLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fdmVyc2lvbn0sZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9KSxlLnByb3RvdHlwZS5nZXRUZXh0PWZ1bmN0aW9uKGUpe2lmKGUpe3ZhciB0PXRoaXMub2Zmc2V0QXQoZS5zdGFydCksbj10aGlzLm9mZnNldEF0KGUuZW5kKTtyZXR1cm4gdGhpcy5fY29udGVudC5zdWJzdHJpbmcodCxuKX1yZXR1cm4gdGhpcy5fY29udGVudH0sZS5wcm90b3R5cGUudXBkYXRlPWZ1bmN0aW9uKGUsdCl7dGhpcy5fY29udGVudD1lLnRleHQsdGhpcy5fdmVyc2lvbj10LHRoaXMuX2xpbmVPZmZzZXRzPXZvaWQgMH0sZS5wcm90b3R5cGUuZ2V0TGluZU9mZnNldHM9ZnVuY3Rpb24oKXtpZih2b2lkIDA9PT10aGlzLl9saW5lT2Zmc2V0cyl7Zm9yKHZhciBlPVtdLHQ9dGhpcy5fY29udGVudCxuPSEwLHI9MDtyPHQubGVuZ3RoO3IrKyl7biYmKGUucHVzaChyKSxuPSExKTt2YXIgaT10LmNoYXJBdChyKTtuPSJcciI9PT1pfHwiXG4iPT09aSwiXHIiPT09aSYmcisxPHQubGVuZ3RoJiYiXG4iPT09dC5jaGFyQXQocisxKSYmcisrfW4mJnQubGVuZ3RoPjAmJmUucHVzaCh0Lmxlbmd0aCksdGhpcy5fbGluZU9mZnNldHM9ZX1yZXR1cm4gdGhpcy5fbGluZU9mZnNldHN9LGUucHJvdG90eXBlLnBvc2l0aW9uQXQ9ZnVuY3Rpb24oZSl7ZT1NYXRoLm1heChNYXRoLm1pbihlLHRoaXMuX2NvbnRlbnQubGVuZ3RoKSwwKTt2YXIgdD10aGlzLmdldExpbmVPZmZzZXRzKCksbj0wLHI9dC5sZW5ndGg7aWYoMD09PXIpcmV0dXJuIHVyLmNyZWF0ZSgwLGUpO2Zvcig7bjxyOyl7dmFyIGk9TWF0aC5mbG9vcigobityKS8yKTt0W2ldPmU/cj1pOm49aSsxfXZhciBvPW4tMTtyZXR1cm4gdXIuY3JlYXRlKG8sZS10W29dKX0sZS5wcm90b3R5cGUub2Zmc2V0QXQ9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5nZXRMaW5lT2Zmc2V0cygpO2lmKGUubGluZT49dC5sZW5ndGgpcmV0dXJuIHRoaXMuX2NvbnRlbnQubGVuZ3RoO2lmKGUubGluZTwwKXJldHVybiAwO3ZhciBuPXRbZS5saW5lXSxyPWUubGluZSsxPHQubGVuZ3RoP3RbZS5saW5lKzFdOnRoaXMuX2NvbnRlbnQubGVuZ3RoO3JldHVybiBNYXRoLm1heChNYXRoLm1pbihuK2UuY2hhcmFjdGVyLHIpLG4pfSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsImxpbmVDb3VudCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmdldExpbmVPZmZzZXRzKCkubGVuZ3RofSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLGV9KCk7Zm89aG98fChobz17fSksbW89T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZyxmby5kZWZpbmVkPWZ1bmN0aW9uKGUpe3JldHVybiB2b2lkIDAhPT1lfSxmby51bmRlZmluZWQ9ZnVuY3Rpb24oZSl7cmV0dXJuIHZvaWQgMD09PWV9LGZvLmJvb2xlYW49ZnVuY3Rpb24oZSl7cmV0dXJuITA9PT1lfHwhMT09PWV9LGZvLnN0cmluZz1mdW5jdGlvbihlKXtyZXR1cm4iW29iamVjdCBTdHJpbmddIj09PW1vLmNhbGwoZSl9LGZvLm51bWJlcj1mdW5jdGlvbihlKXtyZXR1cm4iW29iamVjdCBOdW1iZXJdIj09PW1vLmNhbGwoZSl9LGZvLm51bWJlclJhbmdlPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4iW29iamVjdCBOdW1iZXJdIj09PW1vLmNhbGwoZSkmJnQ8PWUmJmU8PW59LGZvLmludGVnZXI9ZnVuY3Rpb24oZSl7cmV0dXJuIltvYmplY3QgTnVtYmVyXSI9PT1tby5jYWxsKGUpJiYtMjE0NzQ4MzY0ODw9ZSYmZTw9MjE0NzQ4MzY0N30sZm8udWludGVnZXI9ZnVuY3Rpb24oZSl7cmV0dXJuIltvYmplY3QgTnVtYmVyXSI9PT1tby5jYWxsKGUpJiYwPD1lJiZlPD0yMTQ3NDgzNjQ3fSxmby5mdW5jPWZ1bmN0aW9uKGUpe3JldHVybiJbb2JqZWN0IEZ1bmN0aW9uXSI9PT1tby5jYWxsKGUpfSxmby5vYmplY3RMaXRlcmFsPWZ1bmN0aW9uKGUpe3JldHVybiBudWxsIT09ZSYmIm9iamVjdCI9PXR5cGVvZiBlfSxmby50eXBlZEFycmF5PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIEFycmF5LmlzQXJyYXkoZSkmJmUuZXZlcnkodCl9O3ZhciBwbyxibyx2byx5byxDbyx3bz1jbGFzc3tjb25zdHJ1Y3RvcihlLHQsbixyKXt0aGlzLl91cmk9ZSx0aGlzLl9sYW5ndWFnZUlkPXQsdGhpcy5fdmVyc2lvbj1uLHRoaXMuX2NvbnRlbnQ9cix0aGlzLl9saW5lT2Zmc2V0cz12b2lkIDB9Z2V0IHVyaSgpe3JldHVybiB0aGlzLl91cml9Z2V0IGxhbmd1YWdlSWQoKXtyZXR1cm4gdGhpcy5fbGFuZ3VhZ2VJZH1nZXQgdmVyc2lvbigpe3JldHVybiB0aGlzLl92ZXJzaW9ufWdldFRleHQoZSl7aWYoZSl7Y29uc3QgdD10aGlzLm9mZnNldEF0KGUuc3RhcnQpLG49dGhpcy5vZmZzZXRBdChlLmVuZCk7cmV0dXJuIHRoaXMuX2NvbnRlbnQuc3Vic3RyaW5nKHQsbil9cmV0dXJuIHRoaXMuX2NvbnRlbnR9dXBkYXRlKGUsdCl7Zm9yKGxldCB0IG9mIGUpaWYod28uaXNJbmNyZW1lbnRhbCh0KSl7Y29uc3QgZT1Bbyh0LnJhbmdlKSxuPXRoaXMub2Zmc2V0QXQoZS5zdGFydCkscj10aGlzLm9mZnNldEF0KGUuZW5kKTt0aGlzLl9jb250ZW50PXRoaXMuX2NvbnRlbnQuc3Vic3RyaW5nKDAsbikrdC50ZXh0K3RoaXMuX2NvbnRlbnQuc3Vic3RyaW5nKHIsdGhpcy5fY29udGVudC5sZW5ndGgpO2NvbnN0IGk9TWF0aC5tYXgoZS5zdGFydC5saW5lLDApLG89TWF0aC5tYXgoZS5lbmQubGluZSwwKTtsZXQgYT10aGlzLl9saW5lT2Zmc2V0cztjb25zdCBzPVNvKHQudGV4dCwhMSxuKTtpZihvLWk9PT1zLmxlbmd0aClmb3IobGV0IGU9MCx0PXMubGVuZ3RoO2U8dDtlKyspYVtlK2krMV09c1tlXTtlbHNlIHMubGVuZ3RoPDFlND9hLnNwbGljZShpKzEsby1pLC4uLnMpOnRoaXMuX2xpbmVPZmZzZXRzPWE9YS5zbGljZSgwLGkrMSkuY29uY2F0KHMsYS5zbGljZShvKzEpKTtjb25zdCBjPXQudGV4dC5sZW5ndGgtKHItbik7aWYoMCE9PWMpZm9yKGxldCBlPWkrMStzLmxlbmd0aCx0PWEubGVuZ3RoO2U8dDtlKyspYVtlXT1hW2VdK2N9ZWxzZXtpZighd28uaXNGdWxsKHQpKXRocm93IG5ldyBFcnJvcigiVW5rbm93biBjaGFuZ2UgZXZlbnQgcmVjZWl2ZWQiKTt0aGlzLl9jb250ZW50PXQudGV4dCx0aGlzLl9saW5lT2Zmc2V0cz12b2lkIDB9dGhpcy5fdmVyc2lvbj10fWdldExpbmVPZmZzZXRzKCl7cmV0dXJuIHZvaWQgMD09PXRoaXMuX2xpbmVPZmZzZXRzJiYodGhpcy5fbGluZU9mZnNldHM9U28odGhpcy5fY29udGVudCwhMCkpLHRoaXMuX2xpbmVPZmZzZXRzfXBvc2l0aW9uQXQoZSl7ZT1NYXRoLm1heChNYXRoLm1pbihlLHRoaXMuX2NvbnRlbnQubGVuZ3RoKSwwKTtsZXQgdD10aGlzLmdldExpbmVPZmZzZXRzKCksbj0wLHI9dC5sZW5ndGg7aWYoMD09PXIpcmV0dXJue2xpbmU6MCxjaGFyYWN0ZXI6ZX07Zm9yKDtuPHI7KXtsZXQgaT1NYXRoLmZsb29yKChuK3IpLzIpO3RbaV0+ZT9yPWk6bj1pKzF9bGV0IGk9bi0xO3JldHVybntsaW5lOmksY2hhcmFjdGVyOmUtdFtpXX19b2Zmc2V0QXQoZSl7bGV0IHQ9dGhpcy5nZXRMaW5lT2Zmc2V0cygpO2lmKGUubGluZT49dC5sZW5ndGgpcmV0dXJuIHRoaXMuX2NvbnRlbnQubGVuZ3RoO2lmKGUubGluZTwwKXJldHVybiAwO2xldCBuPXRbZS5saW5lXSxyPWUubGluZSsxPHQubGVuZ3RoP3RbZS5saW5lKzFdOnRoaXMuX2NvbnRlbnQubGVuZ3RoO3JldHVybiBNYXRoLm1heChNYXRoLm1pbihuK2UuY2hhcmFjdGVyLHIpLG4pfWdldCBsaW5lQ291bnQoKXtyZXR1cm4gdGhpcy5nZXRMaW5lT2Zmc2V0cygpLmxlbmd0aH1zdGF0aWMgaXNJbmNyZW1lbnRhbChlKXtsZXQgdD1lO3JldHVybiBudWxsIT10JiYic3RyaW5nIj09dHlwZW9mIHQudGV4dCYmdm9pZCAwIT09dC5yYW5nZSYmKHZvaWQgMD09PXQucmFuZ2VMZW5ndGh8fCJudW1iZXIiPT10eXBlb2YgdC5yYW5nZUxlbmd0aCl9c3RhdGljIGlzRnVsbChlKXtsZXQgdD1lO3JldHVybiBudWxsIT10JiYic3RyaW5nIj09dHlwZW9mIHQudGV4dCYmdm9pZCAwPT09dC5yYW5nZSYmdm9pZCAwPT09dC5yYW5nZUxlbmd0aH19O2Z1bmN0aW9uIF9vKGUsdCl7aWYoZS5sZW5ndGg8PTEpcmV0dXJuIGU7Y29uc3Qgbj1lLmxlbmd0aC8yfDAscj1lLnNsaWNlKDAsbiksaT1lLnNsaWNlKG4pO19vKHIsdCksX28oaSx0KTtsZXQgbz0wLGE9MCxzPTA7Zm9yKDtvPHIubGVuZ3RoJiZhPGkubGVuZ3RoOyl7bGV0IG49dChyW29dLGlbYV0pO2VbcysrXT1uPD0wP3JbbysrXTppW2ErK119Zm9yKDtvPHIubGVuZ3RoOyllW3MrK109cltvKytdO2Zvcig7YTxpLmxlbmd0aDspZVtzKytdPWlbYSsrXTtyZXR1cm4gZX1mdW5jdGlvbiBTbyhlLHQsbj0wKXtjb25zdCByPXQ/W25dOltdO2ZvcihsZXQgdD0wO3Q8ZS5sZW5ndGg7dCsrKXtsZXQgaT1lLmNoYXJDb2RlQXQodCk7MTMhPT1pJiYxMCE9PWl8fCgxMz09PWkmJnQrMTxlLmxlbmd0aCYmMTA9PT1lLmNoYXJDb2RlQXQodCsxKSYmdCsrLHIucHVzaChuK3QrMSkpfXJldHVybiByfWZ1bmN0aW9uIEFvKGUpe2NvbnN0IHQ9ZS5zdGFydCxuPWUuZW5kO3JldHVybiB0LmxpbmU+bi5saW5lfHx0LmxpbmU9PT1uLmxpbmUmJnQuY2hhcmFjdGVyPm4uY2hhcmFjdGVyP3tzdGFydDpuLGVuZDp0fTplfWZ1bmN0aW9uIEVvKGUpe2NvbnN0IHQ9QW8oZS5yYW5nZSk7cmV0dXJuIHQhPT1lLnJhbmdlP3tuZXdUZXh0OmUubmV3VGV4dCxyYW5nZTp0fTplfWZ1bmN0aW9uIHhvKGUsdCwuLi5uKXtyZXR1cm4gZnVuY3Rpb24oZSx0KXtsZXQgbjtyZXR1cm4gbj0wPT09dC5sZW5ndGg/ZTplLnJlcGxhY2UoL1x7KFxkKylcfS9nLCgoZSxuKT0+e2xldCByPW5bMF07cmV0dXJuIHZvaWQgMCE9PXRbcl0/dFtyXTplfSkpLG59KHQsbil9ZnVuY3Rpb24gTm8oZSl7cmV0dXJuIHhvfShibz1wb3x8KHBvPXt9KSkuY3JlYXRlPWZ1bmN0aW9uKGUsdCxuLHIpe3JldHVybiBuZXcgd28oZSx0LG4scil9LGJvLnVwZGF0ZT1mdW5jdGlvbihlLHQsbil7aWYoZSBpbnN0YW5jZW9mIHdvKXJldHVybiBlLnVwZGF0ZSh0LG4pLGU7dGhyb3cgbmV3IEVycm9yKCJUZXh0RG9jdW1lbnQudXBkYXRlOiBkb2N1bWVudCBtdXN0IGJlIGNyZWF0ZWQgYnkgVGV4dERvY3VtZW50LmNyZWF0ZSIpfSxiby5hcHBseUVkaXRzPWZ1bmN0aW9uKGUsdCl7bGV0IG49ZS5nZXRUZXh0KCkscj1fbyh0Lm1hcChFbyksKChlLHQpPT57bGV0IG49ZS5yYW5nZS5zdGFydC5saW5lLXQucmFuZ2Uuc3RhcnQubGluZTtyZXR1cm4gMD09PW4/ZS5yYW5nZS5zdGFydC5jaGFyYWN0ZXItdC5yYW5nZS5zdGFydC5jaGFyYWN0ZXI6bn0pKSxpPTA7Y29uc3Qgbz1bXTtmb3IoY29uc3QgdCBvZiByKXtsZXQgcj1lLm9mZnNldEF0KHQucmFuZ2Uuc3RhcnQpO2lmKHI8aSl0aHJvdyBuZXcgRXJyb3IoIk92ZXJsYXBwaW5nIGVkaXQiKTtyPmkmJm8ucHVzaChuLnN1YnN0cmluZyhpLHIpKSx0Lm5ld1RleHQubGVuZ3RoJiZvLnB1c2godC5uZXdUZXh0KSxpPWUub2Zmc2V0QXQodC5yYW5nZS5lbmQpfXJldHVybiBvLnB1c2gobi5zdWJzdHIoaSkpLG8uam9pbigiIil9LCh5bz12b3x8KHZvPXt9KSlbeW8uVW5kZWZpbmVkPTBdPSJVbmRlZmluZWQiLHlvW3lvLkVudW1WYWx1ZU1pc21hdGNoPTFdPSJFbnVtVmFsdWVNaXNtYXRjaCIseW9beW8uRGVwcmVjYXRlZD0yXT0iRGVwcmVjYXRlZCIseW9beW8uVW5leHBlY3RlZEVuZE9mQ29tbWVudD0yNTddPSJVbmV4cGVjdGVkRW5kT2ZDb21tZW50Iix5b1t5by5VbmV4cGVjdGVkRW5kT2ZTdHJpbmc9MjU4XT0iVW5leHBlY3RlZEVuZE9mU3RyaW5nIix5b1t5by5VbmV4cGVjdGVkRW5kT2ZOdW1iZXI9MjU5XT0iVW5leHBlY3RlZEVuZE9mTnVtYmVyIix5b1t5by5JbnZhbGlkVW5pY29kZT0yNjBdPSJJbnZhbGlkVW5pY29kZSIseW9beW8uSW52YWxpZEVzY2FwZUNoYXJhY3Rlcj0yNjFdPSJJbnZhbGlkRXNjYXBlQ2hhcmFjdGVyIix5b1t5by5JbnZhbGlkQ2hhcmFjdGVyPTI2Ml09IkludmFsaWRDaGFyYWN0ZXIiLHlvW3lvLlByb3BlcnR5RXhwZWN0ZWQ9NTEzXT0iUHJvcGVydHlFeHBlY3RlZCIseW9beW8uQ29tbWFFeHBlY3RlZD01MTRdPSJDb21tYUV4cGVjdGVkIix5b1t5by5Db2xvbkV4cGVjdGVkPTUxNV09IkNvbG9uRXhwZWN0ZWQiLHlvW3lvLlZhbHVlRXhwZWN0ZWQ9NTE2XT0iVmFsdWVFeHBlY3RlZCIseW9beW8uQ29tbWFPckNsb3NlQmFja2V0RXhwZWN0ZWQ9NTE3XT0iQ29tbWFPckNsb3NlQmFja2V0RXhwZWN0ZWQiLHlvW3lvLkNvbW1hT3JDbG9zZUJyYWNlRXhwZWN0ZWQ9NTE4XT0iQ29tbWFPckNsb3NlQnJhY2VFeHBlY3RlZCIseW9beW8uVHJhaWxpbmdDb21tYT01MTldPSJUcmFpbGluZ0NvbW1hIix5b1t5by5EdXBsaWNhdGVLZXk9NTIwXT0iRHVwbGljYXRlS2V5Iix5b1t5by5Db21tZW50Tm90UGVybWl0dGVkPTUyMV09IkNvbW1lbnROb3RQZXJtaXR0ZWQiLHlvW3lvLlNjaGVtYVJlc29sdmVFcnJvcj03NjhdPSJTY2hlbWFSZXNvbHZlRXJyb3IiLChDb3x8KENvPXt9KSkuTEFURVNUPXt0ZXh0RG9jdW1lbnQ6e2NvbXBsZXRpb246e2NvbXBsZXRpb25JdGVtOntkb2N1bWVudGF0aW9uRm9ybWF0OltDaS5NYXJrZG93bixDaS5QbGFpblRleHRdLGNvbW1pdENoYXJhY3RlcnNTdXBwb3J0OiEwfX19fTt2YXIga28sTG8sVG8sT289KGtvPWZ1bmN0aW9uKGUsdCl7cmV0dXJuKGtvPU9iamVjdC5zZXRQcm90b3R5cGVPZnx8e19fcHJvdG9fXzpbXX1pbnN0YW5jZW9mIEFycmF5JiZmdW5jdGlvbihlLHQpe2UuX19wcm90b19fPXR9fHxmdW5jdGlvbihlLHQpe2Zvcih2YXIgbiBpbiB0KU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0LG4pJiYoZVtuXT10W25dKX0pKGUsdCl9LGZ1bmN0aW9uKGUsdCl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHQmJm51bGwhPT10KXRocm93IG5ldyBUeXBlRXJyb3IoIkNsYXNzIGV4dGVuZHMgdmFsdWUgIitTdHJpbmcodCkrIiBpcyBub3QgYSBjb25zdHJ1Y3RvciBvciBudWxsIik7ZnVuY3Rpb24gbigpe3RoaXMuY29uc3RydWN0b3I9ZX1rbyhlLHQpLGUucHJvdG90eXBlPW51bGw9PT10P09iamVjdC5jcmVhdGUodCk6KG4ucHJvdG90eXBlPXQucHJvdG90eXBlLG5ldyBuKX0pLElvPU5vKCksTW89eyJjb2xvci1oZXgiOntlcnJvck1lc3NhZ2U6SW8oImNvbG9ySGV4Rm9ybWF0V2FybmluZyIsIkludmFsaWQgY29sb3IgZm9ybWF0LiBVc2UgI1JHQiwgI1JHQkEsICNSUkdHQkIgb3IgI1JSR0dCQkFBLiIpLHBhdHRlcm46L14jKFswLTlBLUZhLWZdezMsNH18KFswLTlBLUZhLWZdezJ9KXszLDR9KSQvfSwiZGF0ZS10aW1lIjp7ZXJyb3JNZXNzYWdlOklvKCJkYXRlVGltZUZvcm1hdFdhcm5pbmciLCJTdHJpbmcgaXMgbm90IGEgUkZDMzMzOSBkYXRlLXRpbWUuIikscGF0dGVybjovXihcZHs0fSktKDBbMS05XXwxWzAtMl0pLSgwWzEtOV18WzEyXVswLTldfDNbMDFdKVQoWzAxXVswLTldfDJbMC0zXSk6KFswLTVdWzAtOV0pOihbMC01XVswLTldfDYwKShcLlswLTldKyk/KFp8KFwrfC0pKFswMV1bMC05XXwyWzAtM10pOihbMC01XVswLTldKSkkL2l9LGRhdGU6e2Vycm9yTWVzc2FnZTpJbygiZGF0ZUZvcm1hdFdhcm5pbmciLCJTdHJpbmcgaXMgbm90IGEgUkZDMzMzOSBkYXRlLiIpLHBhdHRlcm46L14oXGR7NH0pLSgwWzEtOV18MVswLTJdKS0oMFsxLTldfFsxMl1bMC05XXwzWzAxXSkkL2l9LHRpbWU6e2Vycm9yTWVzc2FnZTpJbygidGltZUZvcm1hdFdhcm5pbmciLCJTdHJpbmcgaXMgbm90IGEgUkZDMzMzOSB0aW1lLiIpLHBhdHRlcm46L14oWzAxXVswLTldfDJbMC0zXSk6KFswLTVdWzAtOV0pOihbMC01XVswLTldfDYwKShcLlswLTldKyk/KFp8KFwrfC0pKFswMV1bMC05XXwyWzAtM10pOihbMC01XVswLTldKSkkL2l9LGVtYWlsOntlcnJvck1lc3NhZ2U6SW8oImVtYWlsRm9ybWF0V2FybmluZyIsIlN0cmluZyBpcyBub3QgYW4gZS1tYWlsIGFkZHJlc3MuIikscGF0dGVybjovXigoW148PigpXFtcXVxcLiw7OlxzQCJdKyhcLltePD4oKVxbXF1cXC4sOzpcc0AiXSspKil8KCIuKyIpKUAoKFxbWzAtOV17MSwzfVwuWzAtOV17MSwzfVwuWzAtOV17MSwzfVwuWzAtOV17MSwzfV0pfCgoW2EtekEtWjAtOS1dK1wuKStbYS16QS1aXXsyLH0pKSQvfSxob3N0bmFtZTp7ZXJyb3JNZXNzYWdlOklvKCJob3N0bmFtZUZvcm1hdFdhcm5pbmciLCJTdHJpbmcgaXMgbm90IGEgaG9zdG5hbWUuIikscGF0dGVybjovXig/PS57MSwyNTN9XC4/JClbYS16MC05XSg/OlthLXowLTktXXswLDYxfVthLXowLTldKT8oPzpcLlthLXowLTldKD86Wy0wLTlhLXpdezAsNjF9WzAtOWEtel0pPykqXC4/JC9pfSxpcHY0OntlcnJvck1lc3NhZ2U6SW8oImlwdjRGb3JtYXRXYXJuaW5nIiwiU3RyaW5nIGlzIG5vdCBhbiBJUHY0IGFkZHJlc3MuIikscGF0dGVybjovXig/Oig/OjI1WzAtNV18MlswLTRdXGR8MVxkXGR8WzEtOV0/XGQpXC4pezN9KD86MjVbMC01XXwyWzAtNF1cZHwxXGRcZHxbMS05XT9cZCkkL30saXB2Njp7ZXJyb3JNZXNzYWdlOklvKCJpcHY2Rm9ybWF0V2FybmluZyIsIlN0cmluZyBpcyBub3QgYW4gSVB2NiBhZGRyZXNzLiIpLHBhdHRlcm46L14oKChbMC05YS1mXXsxLDR9Oil7N30oWzAtOWEtZl17MSw0fXw6KSl8KChbMC05YS1mXXsxLDR9Oil7Nn0oOlswLTlhLWZdezEsNH18KCgyNVswLTVdfDJbMC00XVxkfDFcZFxkfFsxLTldP1xkKShcLigyNVswLTVdfDJbMC00XVxkfDFcZFxkfFsxLTldP1xkKSl7M30pfDopKXwoKFswLTlhLWZdezEsNH06KXs1fSgoKDpbMC05YS1mXXsxLDR9KXsxLDJ9KXw6KCgyNVswLTVdfDJbMC00XVxkfDFcZFxkfFsxLTldP1xkKShcLigyNVswLTVdfDJbMC00XVxkfDFcZFxkfFsxLTldP1xkKSl7M30pfDopKXwoKFswLTlhLWZdezEsNH06KXs0fSgoKDpbMC05YS1mXXsxLDR9KXsxLDN9KXwoKDpbMC05YS1mXXsxLDR9KT86KCgyNVswLTVdfDJbMC00XVxkfDFcZFxkfFsxLTldP1xkKShcLigyNVswLTVdfDJbMC00XVxkfDFcZFxkfFsxLTldP1xkKSl7M30pKXw6KSl8KChbMC05YS1mXXsxLDR9Oil7M30oKCg6WzAtOWEtZl17MSw0fSl7MSw0fSl8KCg6WzAtOWEtZl17MSw0fSl7MCwyfTooKDI1WzAtNV18MlswLTRdXGR8MVxkXGR8WzEtOV0/XGQpKFwuKDI1WzAtNV18MlswLTRdXGR8MVxkXGR8WzEtOV0/XGQpKXszfSkpfDopKXwoKFswLTlhLWZdezEsNH06KXsyfSgoKDpbMC05YS1mXXsxLDR9KXsxLDV9KXwoKDpbMC05YS1mXXsxLDR9KXswLDN9OigoMjVbMC01XXwyWzAtNF1cZHwxXGRcZHxbMS05XT9cZCkoXC4oMjVbMC01XXwyWzAtNF1cZHwxXGRcZHxbMS05XT9cZCkpezN9KSl8OikpfCgoWzAtOWEtZl17MSw0fTopezF9KCgoOlswLTlhLWZdezEsNH0pezEsNn0pfCgoOlswLTlhLWZdezEsNH0pezAsNH06KCgyNVswLTVdfDJbMC00XVxkfDFcZFxkfFsxLTldP1xkKShcLigyNVswLTVdfDJbMC00XVxkfDFcZFxkfFsxLTldP1xkKSl7M30pKXw6KSl8KDooKCg6WzAtOWEtZl17MSw0fSl7MSw3fSl8KCg6WzAtOWEtZl17MSw0fSl7MCw1fTooKDI1WzAtNV18MlswLTRdXGR8MVxkXGR8WzEtOV0/XGQpKFwuKDI1WzAtNV18MlswLTRdXGR8MVxkXGR8WzEtOV0/XGQpKXszfSkpfDopKSkkL2l9fSxQbz1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSx0LG4pe3ZvaWQgMD09PW4mJihuPTApLHRoaXMub2Zmc2V0PXQsdGhpcy5sZW5ndGg9bix0aGlzLnBhcmVudD1lfXJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsImNoaWxkcmVuIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuW119LGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEwfSksZS5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4idHlwZTogIit0aGlzLnR5cGUrIiAoIit0aGlzLm9mZnNldCsiLyIrdGhpcy5sZW5ndGgrIikiKyh0aGlzLnBhcmVudD8iIHBhcmVudDogeyIrdGhpcy5wYXJlbnQudG9TdHJpbmcoKSsifSI6IiIpfSxlfSgpLFJvPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQodCxuKXt2YXIgcj1lLmNhbGwodGhpcyx0LG4pfHx0aGlzO3JldHVybiByLnR5cGU9Im51bGwiLHIudmFsdWU9bnVsbCxyfXJldHVybiBPbyh0LGUpLHR9KFBvKSxWbz1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KHQsbixyKXt2YXIgaT1lLmNhbGwodGhpcyx0LHIpfHx0aGlzO3JldHVybiBpLnR5cGU9ImJvb2xlYW4iLGkudmFsdWU9bixpfXJldHVybiBPbyh0LGUpLHR9KFBvKSxGbz1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KHQsbil7dmFyIHI9ZS5jYWxsKHRoaXMsdCxuKXx8dGhpcztyZXR1cm4gci50eXBlPSJhcnJheSIsci5pdGVtcz1bXSxyfXJldHVybiBPbyh0LGUpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwiY2hpbGRyZW4iLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pdGVtc30sZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9KSx0fShQbyksRG89ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdCh0LG4pe3ZhciByPWUuY2FsbCh0aGlzLHQsbil8fHRoaXM7cmV0dXJuIHIudHlwZT0ibnVtYmVyIixyLmlzSW50ZWdlcj0hMCxyLnZhbHVlPU51bWJlci5OYU4scn1yZXR1cm4gT28odCxlKSx0fShQbyksS289ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdCh0LG4scil7dmFyIGk9ZS5jYWxsKHRoaXMsdCxuLHIpfHx0aGlzO3JldHVybiBpLnR5cGU9InN0cmluZyIsaS52YWx1ZT0iIixpfXJldHVybiBPbyh0LGUpLHR9KFBvKSxqbz1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KHQsbixyKXt2YXIgaT1lLmNhbGwodGhpcyx0LG4pfHx0aGlzO3JldHVybiBpLnR5cGU9InByb3BlcnR5IixpLmNvbG9uT2Zmc2V0PS0xLGkua2V5Tm9kZT1yLGl9cmV0dXJuIE9vKHQsZSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJjaGlsZHJlbiIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnZhbHVlTm9kZT9bdGhpcy5rZXlOb2RlLHRoaXMudmFsdWVOb2RlXTpbdGhpcy5rZXlOb2RlXX0sZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9KSx0fShQbyksVW89ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdCh0LG4pe3ZhciByPWUuY2FsbCh0aGlzLHQsbil8fHRoaXM7cmV0dXJuIHIudHlwZT0ib2JqZWN0IixyLnByb3BlcnRpZXM9W10scn1yZXR1cm4gT28odCxlKSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsImNoaWxkcmVuIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucHJvcGVydGllc30sZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9KSx0fShQbyk7ZnVuY3Rpb24gQm8oZSl7cmV0dXJuIGxpKGUpP2U/e306e25vdDp7fX06ZX0oVG89TG98fChMbz17fSkpW1RvLktleT0wXT0iS2V5IixUb1tUby5FbnVtPTFdPSJFbnVtIjt2YXIgcW89ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsdCl7dm9pZCAwPT09ZSYmKGU9LTEpLHRoaXMuZm9jdXNPZmZzZXQ9ZSx0aGlzLmV4Y2x1ZGU9dCx0aGlzLnNjaGVtYXM9W119cmV0dXJuIGUucHJvdG90eXBlLmFkZD1mdW5jdGlvbihlKXt0aGlzLnNjaGVtYXMucHVzaChlKX0sZS5wcm90b3R5cGUubWVyZ2U9ZnVuY3Rpb24oZSl7QXJyYXkucHJvdG90eXBlLnB1c2guYXBwbHkodGhpcy5zY2hlbWFzLGUuc2NoZW1hcyl9LGUucHJvdG90eXBlLmluY2x1ZGU9ZnVuY3Rpb24oZSl7cmV0dXJuKC0xPT09dGhpcy5mb2N1c09mZnNldHx8R28oZSx0aGlzLmZvY3VzT2Zmc2V0KSkmJmUhPT10aGlzLmV4Y2x1ZGV9LGUucHJvdG90eXBlLm5ld1N1Yj1mdW5jdGlvbigpe3JldHVybiBuZXcgZSgtMSx0aGlzLmV4Y2x1ZGUpfSxlfSgpLCRvPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe31yZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJzY2hlbWFzIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuW119LGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEwfSksZS5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKGUpe30sZS5wcm90b3R5cGUubWVyZ2U9ZnVuY3Rpb24oZSl7fSxlLnByb3RvdHlwZS5pbmNsdWRlPWZ1bmN0aW9uKGUpe3JldHVybiEwfSxlLnByb3RvdHlwZS5uZXdTdWI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30sZS5pbnN0YW5jZT1uZXcgZSxlfSgpLFdvPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe3RoaXMucHJvYmxlbXM9W10sdGhpcy5wcm9wZXJ0aWVzTWF0Y2hlcz0wLHRoaXMucHJvcGVydGllc1ZhbHVlTWF0Y2hlcz0wLHRoaXMucHJpbWFyeVZhbHVlTWF0Y2hlcz0wLHRoaXMuZW51bVZhbHVlTWF0Y2g9ITEsdGhpcy5lbnVtVmFsdWVzPXZvaWQgMH1yZXR1cm4gZS5wcm90b3R5cGUuaGFzUHJvYmxlbXM9ZnVuY3Rpb24oKXtyZXR1cm4hIXRoaXMucHJvYmxlbXMubGVuZ3RofSxlLnByb3RvdHlwZS5tZXJnZUFsbD1mdW5jdGlvbihlKXtmb3IodmFyIHQ9MCxuPWU7dDxuLmxlbmd0aDt0Kyspe3ZhciByPW5bdF07dGhpcy5tZXJnZShyKX19LGUucHJvdG90eXBlLm1lcmdlPWZ1bmN0aW9uKGUpe3RoaXMucHJvYmxlbXM9dGhpcy5wcm9ibGVtcy5jb25jYXQoZS5wcm9ibGVtcyl9LGUucHJvdG90eXBlLm1lcmdlRW51bVZhbHVlcz1mdW5jdGlvbihlKXtpZighdGhpcy5lbnVtVmFsdWVNYXRjaCYmIWUuZW51bVZhbHVlTWF0Y2gmJnRoaXMuZW51bVZhbHVlcyYmZS5lbnVtVmFsdWVzKXt0aGlzLmVudW1WYWx1ZXM9dGhpcy5lbnVtVmFsdWVzLmNvbmNhdChlLmVudW1WYWx1ZXMpO2Zvcih2YXIgdD0wLG49dGhpcy5wcm9ibGVtczt0PG4ubGVuZ3RoO3QrKyl7dmFyIHI9blt0XTtyLmNvZGU9PT12by5FbnVtVmFsdWVNaXNtYXRjaCYmKHIubWVzc2FnZT1JbygiZW51bVdhcm5pbmciLCJWYWx1ZSBpcyBub3QgYWNjZXB0ZWQuIFZhbGlkIHZhbHVlczogezB9LiIsdGhpcy5lbnVtVmFsdWVzLm1hcCgoZnVuY3Rpb24oZSl7cmV0dXJuIEpTT04uc3RyaW5naWZ5KGUpfSkpLmpvaW4oIiwgIikpKX19fSxlLnByb3RvdHlwZS5tZXJnZVByb3BlcnR5TWF0Y2g9ZnVuY3Rpb24oZSl7dGhpcy5tZXJnZShlKSx0aGlzLnByb3BlcnRpZXNNYXRjaGVzKyssKGUuZW51bVZhbHVlTWF0Y2h8fCFlLmhhc1Byb2JsZW1zKCkmJmUucHJvcGVydGllc01hdGNoZXMpJiZ0aGlzLnByb3BlcnRpZXNWYWx1ZU1hdGNoZXMrKyxlLmVudW1WYWx1ZU1hdGNoJiZlLmVudW1WYWx1ZXMmJjE9PT1lLmVudW1WYWx1ZXMubGVuZ3RoJiZ0aGlzLnByaW1hcnlWYWx1ZU1hdGNoZXMrK30sZS5wcm90b3R5cGUuY29tcGFyZT1mdW5jdGlvbihlKXt2YXIgdD10aGlzLmhhc1Byb2JsZW1zKCk7cmV0dXJuIHQhPT1lLmhhc1Byb2JsZW1zKCk/dD8tMToxOnRoaXMuZW51bVZhbHVlTWF0Y2ghPT1lLmVudW1WYWx1ZU1hdGNoP2UuZW51bVZhbHVlTWF0Y2g/LTE6MTp0aGlzLnByaW1hcnlWYWx1ZU1hdGNoZXMhPT1lLnByaW1hcnlWYWx1ZU1hdGNoZXM/dGhpcy5wcmltYXJ5VmFsdWVNYXRjaGVzLWUucHJpbWFyeVZhbHVlTWF0Y2hlczp0aGlzLnByb3BlcnRpZXNWYWx1ZU1hdGNoZXMhPT1lLnByb3BlcnRpZXNWYWx1ZU1hdGNoZXM/dGhpcy5wcm9wZXJ0aWVzVmFsdWVNYXRjaGVzLWUucHJvcGVydGllc1ZhbHVlTWF0Y2hlczp0aGlzLnByb3BlcnRpZXNNYXRjaGVzLWUucHJvcGVydGllc01hdGNoZXN9LGV9KCk7ZnVuY3Rpb24gSG8oZSl7cmV0dXJuIG9pKGUpfWZ1bmN0aW9uIHpvKGUpe3JldHVybiBpaShlKX1mdW5jdGlvbiBHbyhlLHQsbil7cmV0dXJuIHZvaWQgMD09PW4mJihuPSExKSx0Pj1lLm9mZnNldCYmdDxlLm9mZnNldCtlLmxlbmd0aHx8biYmdD09PWUub2Zmc2V0K2UubGVuZ3RofXZhciBKbz1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSx0LG4pe3ZvaWQgMD09PXQmJih0PVtdKSx2b2lkIDA9PT1uJiYobj1bXSksdGhpcy5yb290PWUsdGhpcy5zeW50YXhFcnJvcnM9dCx0aGlzLmNvbW1lbnRzPW59cmV0dXJuIGUucHJvdG90eXBlLmdldE5vZGVGcm9tT2Zmc2V0PWZ1bmN0aW9uKGUsdCl7aWYodm9pZCAwPT09dCYmKHQ9ITEpLHRoaXMucm9vdClyZXR1cm4gcmkodGhpcy5yb290LGUsdCl9LGUucHJvdG90eXBlLnZpc2l0PWZ1bmN0aW9uKGUpe2lmKHRoaXMucm9vdCl7dmFyIHQ9ZnVuY3Rpb24obil7dmFyIHI9ZShuKSxpPW4uY2hpbGRyZW47aWYoQXJyYXkuaXNBcnJheShpKSlmb3IodmFyIG89MDtvPGkubGVuZ3RoJiZyO28rKylyPXQoaVtvXSk7cmV0dXJuIHJ9O3QodGhpcy5yb290KX19LGUucHJvdG90eXBlLnZhbGlkYXRlPWZ1bmN0aW9uKGUsdCxuKXtpZih2b2lkIDA9PT1uJiYobj1Uci5XYXJuaW5nKSx0aGlzLnJvb3QmJnQpe3ZhciByPW5ldyBXbztyZXR1cm4gWG8odGhpcy5yb290LHQsciwkby5pbnN0YW5jZSksci5wcm9ibGVtcy5tYXAoKGZ1bmN0aW9uKHQpe3ZhciByLGk9ZnIuY3JlYXRlKGUucG9zaXRpb25BdCh0LmxvY2F0aW9uLm9mZnNldCksZS5wb3NpdGlvbkF0KHQubG9jYXRpb24ub2Zmc2V0K3QubG9jYXRpb24ubGVuZ3RoKSk7cmV0dXJuIFJyLmNyZWF0ZShpLHQubWVzc2FnZSxudWxsIT09KHI9dC5zZXZlcml0eSkmJnZvaWQgMCE9PXI/cjpuLHQuY29kZSl9KSl9fSxlLnByb3RvdHlwZS5nZXRNYXRjaGluZ1NjaGVtYXM9ZnVuY3Rpb24oZSx0LG4pe3ZvaWQgMD09PXQmJih0PS0xKTt2YXIgcj1uZXcgcW8odCxuKTtyZXR1cm4gdGhpcy5yb290JiZlJiZYbyh0aGlzLnJvb3QsZSxuZXcgV28sciksci5zY2hlbWFzfSxlfSgpO2Z1bmN0aW9uIFhvKGUsdCxuLHIpe2lmKGUmJnIuaW5jbHVkZShlKSl7dmFyIGk9ZTtzd2l0Y2goaS50eXBlKXtjYXNlIm9iamVjdCI6IWZ1bmN0aW9uKGUsdCxuLHIpe2Zvcih2YXIgaT1PYmplY3QuY3JlYXRlKG51bGwpLG89W10sYT0wLHM9ZS5wcm9wZXJ0aWVzO2E8cy5sZW5ndGg7YSsrKXtpW0s9KHA9c1thXSkua2V5Tm9kZS52YWx1ZV09cC52YWx1ZU5vZGUsby5wdXNoKEspfWlmKEFycmF5LmlzQXJyYXkodC5yZXF1aXJlZCkpZm9yKHZhciBjPTAsbD10LnJlcXVpcmVkO2M8bC5sZW5ndGg7YysrKXtpZighaVtTPWxbY11dKXt2YXIgdT1lLnBhcmVudCYmInByb3BlcnR5Ij09PWUucGFyZW50LnR5cGUmJmUucGFyZW50LmtleU5vZGUsaD11P3tvZmZzZXQ6dS5vZmZzZXQsbGVuZ3RoOnUubGVuZ3RofTp7b2Zmc2V0OmUub2Zmc2V0LGxlbmd0aDoxfTtuLnByb2JsZW1zLnB1c2goe2xvY2F0aW9uOmgsbWVzc2FnZTpJbygiTWlzc2luZ1JlcXVpcmVkUHJvcFdhcm5pbmciLCdNaXNzaW5nIHByb3BlcnR5ICJ7MH0iLicsUyl9KX19dmFyIGY9ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PW8uaW5kZXhPZihlKTt0Pj0wOylvLnNwbGljZSh0LDEpLHQ9by5pbmRleE9mKGUpfTtpZih0LnByb3BlcnRpZXMpZm9yKHZhciBkPTAsbT1PYmplY3Qua2V5cyh0LnByb3BlcnRpZXMpO2Q8bS5sZW5ndGg7ZCsrKXtmKFM9bVtkXSk7dmFyIGc9dC5wcm9wZXJ0aWVzW1NdO2lmKEw9aVtTXSlpZihsaShnKSlpZihnKW4ucHJvcGVydGllc01hdGNoZXMrKyxuLnByb3BlcnRpZXNWYWx1ZU1hdGNoZXMrKztlbHNle3ZhciBwPUwucGFyZW50O24ucHJvYmxlbXMucHVzaCh7bG9jYXRpb246e29mZnNldDpwLmtleU5vZGUub2Zmc2V0LGxlbmd0aDpwLmtleU5vZGUubGVuZ3RofSxtZXNzYWdlOnQuZXJyb3JNZXNzYWdlfHxJbygiRGlzYWxsb3dlZEV4dHJhUHJvcFdhcm5pbmciLCJQcm9wZXJ0eSB7MH0gaXMgbm90IGFsbG93ZWQuIixTKX0pfWVsc2UgWG8oTCxnLHg9bmV3IFdvLHIpLG4ubWVyZ2VQcm9wZXJ0eU1hdGNoKHgpfWlmKHQucGF0dGVyblByb3BlcnRpZXMpZm9yKHZhciBiPTAsdj1PYmplY3Qua2V5cyh0LnBhdHRlcm5Qcm9wZXJ0aWVzKTtiPHYubGVuZ3RoO2IrKylmb3IodmFyIHk9dltiXSxDPWhpKHkpLHc9MCxfPW8uc2xpY2UoMCk7dzxfLmxlbmd0aDt3Kyspe3ZhciBTPV9bd107aWYobnVsbD09Qz92b2lkIDA6Qy50ZXN0KFMpKWlmKGYoUyksTD1pW1NdKWlmKGxpKGc9dC5wYXR0ZXJuUHJvcGVydGllc1t5XSkpaWYoZyluLnByb3BlcnRpZXNNYXRjaGVzKyssbi5wcm9wZXJ0aWVzVmFsdWVNYXRjaGVzKys7ZWxzZXtwPUwucGFyZW50O24ucHJvYmxlbXMucHVzaCh7bG9jYXRpb246e29mZnNldDpwLmtleU5vZGUub2Zmc2V0LGxlbmd0aDpwLmtleU5vZGUubGVuZ3RofSxtZXNzYWdlOnQuZXJyb3JNZXNzYWdlfHxJbygiRGlzYWxsb3dlZEV4dHJhUHJvcFdhcm5pbmciLCJQcm9wZXJ0eSB7MH0gaXMgbm90IGFsbG93ZWQuIixTKX0pfWVsc2UgWG8oTCxnLHg9bmV3IFdvLHIpLG4ubWVyZ2VQcm9wZXJ0eU1hdGNoKHgpfWlmKCJvYmplY3QiPT10eXBlb2YgdC5hZGRpdGlvbmFsUHJvcGVydGllcylmb3IodmFyIEE9MCxFPW87QTxFLmxlbmd0aDtBKyspe2lmKEw9aVtTPUVbQV1dKXt2YXIgeD1uZXcgV287WG8oTCx0LmFkZGl0aW9uYWxQcm9wZXJ0aWVzLHgsciksbi5tZXJnZVByb3BlcnR5TWF0Y2goeCl9fWVsc2UgaWYoITE9PT10LmFkZGl0aW9uYWxQcm9wZXJ0aWVzJiZvLmxlbmd0aD4wKWZvcih2YXIgTj0wLGs9bztOPGsubGVuZ3RoO04rKyl7dmFyIEw7aWYoTD1pW1M9a1tOXV0pe3A9TC5wYXJlbnQ7bi5wcm9ibGVtcy5wdXNoKHtsb2NhdGlvbjp7b2Zmc2V0OnAua2V5Tm9kZS5vZmZzZXQsbGVuZ3RoOnAua2V5Tm9kZS5sZW5ndGh9LG1lc3NhZ2U6dC5lcnJvck1lc3NhZ2V8fElvKCJEaXNhbGxvd2VkRXh0cmFQcm9wV2FybmluZyIsIlByb3BlcnR5IHswfSBpcyBub3QgYWxsb3dlZC4iLFMpfSl9fXNpKHQubWF4UHJvcGVydGllcykmJmUucHJvcGVydGllcy5sZW5ndGg+dC5tYXhQcm9wZXJ0aWVzJiZuLnByb2JsZW1zLnB1c2goe2xvY2F0aW9uOntvZmZzZXQ6ZS5vZmZzZXQsbGVuZ3RoOmUubGVuZ3RofSxtZXNzYWdlOklvKCJNYXhQcm9wV2FybmluZyIsIk9iamVjdCBoYXMgbW9yZSBwcm9wZXJ0aWVzIHRoYW4gbGltaXQgb2YgezB9LiIsdC5tYXhQcm9wZXJ0aWVzKX0pO3NpKHQubWluUHJvcGVydGllcykmJmUucHJvcGVydGllcy5sZW5ndGg8dC5taW5Qcm9wZXJ0aWVzJiZuLnByb2JsZW1zLnB1c2goe2xvY2F0aW9uOntvZmZzZXQ6ZS5vZmZzZXQsbGVuZ3RoOmUubGVuZ3RofSxtZXNzYWdlOklvKCJNaW5Qcm9wV2FybmluZyIsIk9iamVjdCBoYXMgZmV3ZXIgcHJvcGVydGllcyB0aGFuIHRoZSByZXF1aXJlZCBudW1iZXIgb2YgezB9Iix0Lm1pblByb3BlcnRpZXMpfSk7aWYodC5kZXBlbmRlbmNpZXMpZm9yKHZhciBUPTAsTz1PYmplY3Qua2V5cyh0LmRlcGVuZGVuY2llcyk7VDxPLmxlbmd0aDtUKyspe2lmKGlbSz1PW1RdXSl7dmFyIEk9dC5kZXBlbmRlbmNpZXNbS107aWYoQXJyYXkuaXNBcnJheShJKSlmb3IodmFyIE09MCxQPUk7TTxQLmxlbmd0aDtNKyspe3ZhciBSPVBbTV07aVtSXT9uLnByb3BlcnRpZXNWYWx1ZU1hdGNoZXMrKzpuLnByb2JsZW1zLnB1c2goe2xvY2F0aW9uOntvZmZzZXQ6ZS5vZmZzZXQsbGVuZ3RoOmUubGVuZ3RofSxtZXNzYWdlOklvKCJSZXF1aXJlZERlcGVuZGVudFByb3BXYXJuaW5nIiwiT2JqZWN0IGlzIG1pc3NpbmcgcHJvcGVydHkgezB9IHJlcXVpcmVkIGJ5IHByb3BlcnR5IHsxfS4iLFIsSyl9KX1lbHNlIGlmKGc9Qm8oSSkpWG8oZSxnLHg9bmV3IFdvLHIpLG4ubWVyZ2VQcm9wZXJ0eU1hdGNoKHgpfX12YXIgVj1Cbyh0LnByb3BlcnR5TmFtZXMpO2lmKFYpZm9yKHZhciBGPTAsRD1lLnByb3BlcnRpZXM7RjxELmxlbmd0aDtGKyspe3ZhciBLOyhLPURbRl0ua2V5Tm9kZSkmJlhvKEssVixuLCRvLmluc3RhbmNlKX19KGksdCxuLHIpO2JyZWFrO2Nhc2UiYXJyYXkiOiFmdW5jdGlvbihlLHQsbixyKXtpZihBcnJheS5pc0FycmF5KHQuaXRlbXMpKXtmb3IodmFyIGk9dC5pdGVtcyxvPTA7bzxpLmxlbmd0aDtvKyspe3ZhciBhPUJvKGlbb10pLHM9bmV3IFdvOyhmPWUuaXRlbXNbb10pPyhYbyhmLGEscyxyKSxuLm1lcmdlUHJvcGVydHlNYXRjaChzKSk6ZS5pdGVtcy5sZW5ndGg+PWkubGVuZ3RoJiZuLnByb3BlcnRpZXNWYWx1ZU1hdGNoZXMrK31pZihlLml0ZW1zLmxlbmd0aD5pLmxlbmd0aClpZigib2JqZWN0Ij09dHlwZW9mIHQuYWRkaXRpb25hbEl0ZW1zKWZvcih2YXIgYz1pLmxlbmd0aDtjPGUuaXRlbXMubGVuZ3RoO2MrKyl7cz1uZXcgV287WG8oZS5pdGVtc1tjXSx0LmFkZGl0aW9uYWxJdGVtcyxzLHIpLG4ubWVyZ2VQcm9wZXJ0eU1hdGNoKHMpfWVsc2UhMT09PXQuYWRkaXRpb25hbEl0ZW1zJiZuLnByb2JsZW1zLnB1c2goe2xvY2F0aW9uOntvZmZzZXQ6ZS5vZmZzZXQsbGVuZ3RoOmUubGVuZ3RofSxtZXNzYWdlOklvKCJhZGRpdGlvbmFsSXRlbXNXYXJuaW5nIiwiQXJyYXkgaGFzIHRvbyBtYW55IGl0ZW1zIGFjY29yZGluZyB0byBzY2hlbWEuIEV4cGVjdGVkIHswfSBvciBmZXdlci4iLGkubGVuZ3RoKX0pfWVsc2V7dmFyIGw9Qm8odC5pdGVtcyk7aWYobClmb3IodmFyIHU9MCxoPWUuaXRlbXM7dTxoLmxlbmd0aDt1Kyspe3ZhciBmO1hvKGY9aFt1XSxsLHM9bmV3IFdvLHIpLG4ubWVyZ2VQcm9wZXJ0eU1hdGNoKHMpfX12YXIgZD1Cbyh0LmNvbnRhaW5zKTtpZihkKXtlLml0ZW1zLnNvbWUoKGZ1bmN0aW9uKGUpe3ZhciB0PW5ldyBXbztyZXR1cm4gWG8oZSxkLHQsJG8uaW5zdGFuY2UpLCF0Lmhhc1Byb2JsZW1zKCl9KSl8fG4ucHJvYmxlbXMucHVzaCh7bG9jYXRpb246e29mZnNldDplLm9mZnNldCxsZW5ndGg6ZS5sZW5ndGh9LG1lc3NhZ2U6dC5lcnJvck1lc3NhZ2V8fElvKCJyZXF1aXJlZEl0ZW1NaXNzaW5nV2FybmluZyIsIkFycmF5IGRvZXMgbm90IGNvbnRhaW4gcmVxdWlyZWQgaXRlbS4iKX0pfXNpKHQubWluSXRlbXMpJiZlLml0ZW1zLmxlbmd0aDx0Lm1pbkl0ZW1zJiZuLnByb2JsZW1zLnB1c2goe2xvY2F0aW9uOntvZmZzZXQ6ZS5vZmZzZXQsbGVuZ3RoOmUubGVuZ3RofSxtZXNzYWdlOklvKCJtaW5JdGVtc1dhcm5pbmciLCJBcnJheSBoYXMgdG9vIGZldyBpdGVtcy4gRXhwZWN0ZWQgezB9IG9yIG1vcmUuIix0Lm1pbkl0ZW1zKX0pO3NpKHQubWF4SXRlbXMpJiZlLml0ZW1zLmxlbmd0aD50Lm1heEl0ZW1zJiZuLnByb2JsZW1zLnB1c2goe2xvY2F0aW9uOntvZmZzZXQ6ZS5vZmZzZXQsbGVuZ3RoOmUubGVuZ3RofSxtZXNzYWdlOklvKCJtYXhJdGVtc1dhcm5pbmciLCJBcnJheSBoYXMgdG9vIG1hbnkgaXRlbXMuIEV4cGVjdGVkIHswfSBvciBmZXdlci4iLHQubWF4SXRlbXMpfSk7aWYoITA9PT10LnVuaXF1ZUl0ZW1zKXt2YXIgbT1IbyhlKTttLnNvbWUoKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIHQhPT1tLmxhc3RJbmRleE9mKGUpfSkpJiZuLnByb2JsZW1zLnB1c2goe2xvY2F0aW9uOntvZmZzZXQ6ZS5vZmZzZXQsbGVuZ3RoOmUubGVuZ3RofSxtZXNzYWdlOklvKCJ1bmlxdWVJdGVtc1dhcm5pbmciLCJBcnJheSBoYXMgZHVwbGljYXRlIGl0ZW1zLiIpfSl9fShpLHQsbixyKTticmVhaztjYXNlInN0cmluZyI6IWZ1bmN0aW9uKGUsdCxuLHIpe3NpKHQubWluTGVuZ3RoKSYmZS52YWx1ZS5sZW5ndGg8dC5taW5MZW5ndGgmJm4ucHJvYmxlbXMucHVzaCh7bG9jYXRpb246e29mZnNldDplLm9mZnNldCxsZW5ndGg6ZS5sZW5ndGh9LG1lc3NhZ2U6SW8oIm1pbkxlbmd0aFdhcm5pbmciLCJTdHJpbmcgaXMgc2hvcnRlciB0aGFuIHRoZSBtaW5pbXVtIGxlbmd0aCBvZiB7MH0uIix0Lm1pbkxlbmd0aCl9KTtzaSh0Lm1heExlbmd0aCkmJmUudmFsdWUubGVuZ3RoPnQubWF4TGVuZ3RoJiZuLnByb2JsZW1zLnB1c2goe2xvY2F0aW9uOntvZmZzZXQ6ZS5vZmZzZXQsbGVuZ3RoOmUubGVuZ3RofSxtZXNzYWdlOklvKCJtYXhMZW5ndGhXYXJuaW5nIiwiU3RyaW5nIGlzIGxvbmdlciB0aGFuIHRoZSBtYXhpbXVtIGxlbmd0aCBvZiB7MH0uIix0Lm1heExlbmd0aCl9KTtpZihvPXQucGF0dGVybiwic3RyaW5nIj09dHlwZW9mIG8pe3ZhciBpPWhpKHQucGF0dGVybik7KG51bGw9PWk/dm9pZCAwOmkudGVzdChlLnZhbHVlKSl8fG4ucHJvYmxlbXMucHVzaCh7bG9jYXRpb246e29mZnNldDplLm9mZnNldCxsZW5ndGg6ZS5sZW5ndGh9LG1lc3NhZ2U6dC5wYXR0ZXJuRXJyb3JNZXNzYWdlfHx0LmVycm9yTWVzc2FnZXx8SW8oInBhdHRlcm5XYXJuaW5nIiwnU3RyaW5nIGRvZXMgbm90IG1hdGNoIHRoZSBwYXR0ZXJuIG9mICJ7MH0iLicsdC5wYXR0ZXJuKX0pfXZhciBvO2lmKHQuZm9ybWF0KXN3aXRjaCh0LmZvcm1hdCl7Y2FzZSJ1cmkiOmNhc2UidXJpLXJlZmVyZW5jZSI6dmFyIGE9dm9pZCAwO2lmKGUudmFsdWUpe3ZhciBzPS9eKChbXjovPyNdKz8pOik/KFwvXC8oW14vPyNdKikpPyhbXj8jXSopKFw/KFteI10qKSk/KCMoLiopKT8vLmV4ZWMoZS52YWx1ZSk7cz9zWzJdfHwidXJpIiE9PXQuZm9ybWF0fHwoYT1JbygidXJpU2NoZW1lTWlzc2luZyIsIlVSSSB3aXRoIGEgc2NoZW1lIGlzIGV4cGVjdGVkLiIpKTphPUlvKCJ1cmlNaXNzaW5nIiwiVVJJIGlzIGV4cGVjdGVkLiIpfWVsc2UgYT1JbygidXJpRW1wdHkiLCJVUkkgZXhwZWN0ZWQuIik7YSYmbi5wcm9ibGVtcy5wdXNoKHtsb2NhdGlvbjp7b2Zmc2V0OmUub2Zmc2V0LGxlbmd0aDplLmxlbmd0aH0sbWVzc2FnZTp0LnBhdHRlcm5FcnJvck1lc3NhZ2V8fHQuZXJyb3JNZXNzYWdlfHxJbygidXJpRm9ybWF0V2FybmluZyIsIlN0cmluZyBpcyBub3QgYSBVUkk6IHswfSIsYSl9KTticmVhaztjYXNlImNvbG9yLWhleCI6Y2FzZSJkYXRlLXRpbWUiOmNhc2UiZGF0ZSI6Y2FzZSJ0aW1lIjpjYXNlImVtYWlsIjpjYXNlImhvc3RuYW1lIjpjYXNlImlwdjQiOmNhc2UiaXB2NiI6dmFyIGM9TW9bdC5mb3JtYXRdO2UudmFsdWUmJmMucGF0dGVybi5leGVjKGUudmFsdWUpfHxuLnByb2JsZW1zLnB1c2goe2xvY2F0aW9uOntvZmZzZXQ6ZS5vZmZzZXQsbGVuZ3RoOmUubGVuZ3RofSxtZXNzYWdlOnQucGF0dGVybkVycm9yTWVzc2FnZXx8dC5lcnJvck1lc3NhZ2V8fGMuZXJyb3JNZXNzYWdlfSl9fShpLHQsbik7YnJlYWs7Y2FzZSJudW1iZXIiOiFmdW5jdGlvbihlLHQsbixyKXt2YXIgaT1lLnZhbHVlO2Z1bmN0aW9uIG8oZSl7dmFyIHQsbj0vXigtP1xkKykoPzpcLihcZCspKT8oPzplKFstK11cZCspKT8kLy5leGVjKGUudG9TdHJpbmcoKSk7cmV0dXJuIG4mJnt2YWx1ZTpOdW1iZXIoblsxXSsoblsyXXx8IiIpKSxtdWx0aXBsaWVyOigobnVsbD09PSh0PW5bMl0pfHx2b2lkIDA9PT10P3ZvaWQgMDp0Lmxlbmd0aCl8fDApLShwYXJzZUludChuWzNdKXx8MCl9fWlmKHNpKHQubXVsdGlwbGVPZikpe3ZhciBhPS0xO2lmKE51bWJlci5pc0ludGVnZXIodC5tdWx0aXBsZU9mKSlhPWkldC5tdWx0aXBsZU9mO2Vsc2V7dmFyIHM9byh0Lm11bHRpcGxlT2YpLGM9byhpKTtpZihzJiZjKXt2YXIgbD1NYXRoLnBvdygxMCxNYXRoLmFicyhjLm11bHRpcGxpZXItcy5tdWx0aXBsaWVyKSk7Yy5tdWx0aXBsaWVyPHMubXVsdGlwbGllcj9jLnZhbHVlKj1sOnMudmFsdWUqPWwsYT1jLnZhbHVlJXMudmFsdWV9fTAhPT1hJiZuLnByb2JsZW1zLnB1c2goe2xvY2F0aW9uOntvZmZzZXQ6ZS5vZmZzZXQsbGVuZ3RoOmUubGVuZ3RofSxtZXNzYWdlOklvKCJtdWx0aXBsZU9mV2FybmluZyIsIlZhbHVlIGlzIG5vdCBkaXZpc2libGUgYnkgezB9LiIsdC5tdWx0aXBsZU9mKX0pfWZ1bmN0aW9uIHUoZSx0KXtyZXR1cm4gc2kodCk/dDpsaSh0KSYmdD9lOnZvaWQgMH1mdW5jdGlvbiBoKGUsdCl7aWYoIWxpKHQpfHwhdClyZXR1cm4gZX12YXIgZj11KHQubWluaW11bSx0LmV4Y2x1c2l2ZU1pbmltdW0pO3NpKGYpJiZpPD1mJiZuLnByb2JsZW1zLnB1c2goe2xvY2F0aW9uOntvZmZzZXQ6ZS5vZmZzZXQsbGVuZ3RoOmUubGVuZ3RofSxtZXNzYWdlOklvKCJleGNsdXNpdmVNaW5pbXVtV2FybmluZyIsIlZhbHVlIGlzIGJlbG93IHRoZSBleGNsdXNpdmUgbWluaW11bSBvZiB7MH0uIixmKX0pO3ZhciBkPXUodC5tYXhpbXVtLHQuZXhjbHVzaXZlTWF4aW11bSk7c2koZCkmJmk+PWQmJm4ucHJvYmxlbXMucHVzaCh7bG9jYXRpb246e29mZnNldDplLm9mZnNldCxsZW5ndGg6ZS5sZW5ndGh9LG1lc3NhZ2U6SW8oImV4Y2x1c2l2ZU1heGltdW1XYXJuaW5nIiwiVmFsdWUgaXMgYWJvdmUgdGhlIGV4Y2x1c2l2ZSBtYXhpbXVtIG9mIHswfS4iLGQpfSk7dmFyIG09aCh0Lm1pbmltdW0sdC5leGNsdXNpdmVNaW5pbXVtKTtzaShtKSYmaTxtJiZuLnByb2JsZW1zLnB1c2goe2xvY2F0aW9uOntvZmZzZXQ6ZS5vZmZzZXQsbGVuZ3RoOmUubGVuZ3RofSxtZXNzYWdlOklvKCJtaW5pbXVtV2FybmluZyIsIlZhbHVlIGlzIGJlbG93IHRoZSBtaW5pbXVtIG9mIHswfS4iLG0pfSk7dmFyIGc9aCh0Lm1heGltdW0sdC5leGNsdXNpdmVNYXhpbXVtKTtzaShnKSYmaT5nJiZuLnByb2JsZW1zLnB1c2goe2xvY2F0aW9uOntvZmZzZXQ6ZS5vZmZzZXQsbGVuZ3RoOmUubGVuZ3RofSxtZXNzYWdlOklvKCJtYXhpbXVtV2FybmluZyIsIlZhbHVlIGlzIGFib3ZlIHRoZSBtYXhpbXVtIG9mIHswfS4iLGcpfSl9KGksdCxuKTticmVhaztjYXNlInByb3BlcnR5IjpyZXR1cm4gWG8oaS52YWx1ZU5vZGUsdCxuLHIpfSFmdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSl7cmV0dXJuIGkudHlwZT09PWV8fCJpbnRlZ2VyIj09PWUmJiJudW1iZXIiPT09aS50eXBlJiZpLmlzSW50ZWdlcn1BcnJheS5pc0FycmF5KHQudHlwZSk/dC50eXBlLnNvbWUoZSl8fG4ucHJvYmxlbXMucHVzaCh7bG9jYXRpb246e29mZnNldDppLm9mZnNldCxsZW5ndGg6aS5sZW5ndGh9LG1lc3NhZ2U6dC5lcnJvck1lc3NhZ2V8fElvKCJ0eXBlQXJyYXlNaXNtYXRjaFdhcm5pbmciLCJJbmNvcnJlY3QgdHlwZS4gRXhwZWN0ZWQgb25lIG9mIHswfS4iLHQudHlwZS5qb2luKCIsICIpKX0pOnQudHlwZSYmKGUodC50eXBlKXx8bi5wcm9ibGVtcy5wdXNoKHtsb2NhdGlvbjp7b2Zmc2V0Omkub2Zmc2V0LGxlbmd0aDppLmxlbmd0aH0sbWVzc2FnZTp0LmVycm9yTWVzc2FnZXx8SW8oInR5cGVNaXNtYXRjaFdhcm5pbmciLCdJbmNvcnJlY3QgdHlwZS4gRXhwZWN0ZWQgInswfSIuJyx0LnR5cGUpfSkpO2lmKEFycmF5LmlzQXJyYXkodC5hbGxPZikpZm9yKHZhciBvPTAsYT10LmFsbE9mO288YS5sZW5ndGg7bysrKXt2YXIgcz1hW29dO1hvKGksQm8ocyksbixyKX12YXIgYz1Cbyh0Lm5vdCk7aWYoYyl7dmFyIGw9bmV3IFdvLHU9ci5uZXdTdWIoKTtYbyhpLGMsbCx1KSxsLmhhc1Byb2JsZW1zKCl8fG4ucHJvYmxlbXMucHVzaCh7bG9jYXRpb246e29mZnNldDppLm9mZnNldCxsZW5ndGg6aS5sZW5ndGh9LG1lc3NhZ2U6SW8oIm5vdFNjaGVtYVdhcm5pbmciLCJNYXRjaGVzIGEgc2NoZW1hIHRoYXQgaXMgbm90IGFsbG93ZWQuIil9KTtmb3IodmFyIGg9MCxmPXUuc2NoZW1hcztoPGYubGVuZ3RoO2grKyl7dmFyIGQ9ZltoXTtkLmludmVydGVkPSFkLmludmVydGVkLHIuYWRkKGQpfX12YXIgbT1mdW5jdGlvbihlLHQpe2Zvcih2YXIgbz1bXSxhPXZvaWQgMCxzPTAsYz1lO3M8Yy5sZW5ndGg7cysrKXt2YXIgbD1CbyhjW3NdKSx1PW5ldyBXbyxoPXIubmV3U3ViKCk7aWYoWG8oaSxsLHUsaCksdS5oYXNQcm9ibGVtcygpfHxvLnB1c2gobCksYSlpZih0fHx1Lmhhc1Byb2JsZW1zKCl8fGEudmFsaWRhdGlvblJlc3VsdC5oYXNQcm9ibGVtcygpKXt2YXIgZj11LmNvbXBhcmUoYS52YWxpZGF0aW9uUmVzdWx0KTtmPjA/YT17c2NoZW1hOmwsdmFsaWRhdGlvblJlc3VsdDp1LG1hdGNoaW5nU2NoZW1hczpofTowPT09ZiYmKGEubWF0Y2hpbmdTY2hlbWFzLm1lcmdlKGgpLGEudmFsaWRhdGlvblJlc3VsdC5tZXJnZUVudW1WYWx1ZXModSkpfWVsc2UgYS5tYXRjaGluZ1NjaGVtYXMubWVyZ2UoaCksYS52YWxpZGF0aW9uUmVzdWx0LnByb3BlcnRpZXNNYXRjaGVzKz11LnByb3BlcnRpZXNNYXRjaGVzLGEudmFsaWRhdGlvblJlc3VsdC5wcm9wZXJ0aWVzVmFsdWVNYXRjaGVzKz11LnByb3BlcnRpZXNWYWx1ZU1hdGNoZXM7ZWxzZSBhPXtzY2hlbWE6bCx2YWxpZGF0aW9uUmVzdWx0OnUsbWF0Y2hpbmdTY2hlbWFzOmh9fXJldHVybiBvLmxlbmd0aD4xJiZ0JiZuLnByb2JsZW1zLnB1c2goe2xvY2F0aW9uOntvZmZzZXQ6aS5vZmZzZXQsbGVuZ3RoOjF9LG1lc3NhZ2U6SW8oIm9uZU9mV2FybmluZyIsIk1hdGNoZXMgbXVsdGlwbGUgc2NoZW1hcyB3aGVuIG9ubHkgb25lIG11c3QgdmFsaWRhdGUuIil9KSxhJiYobi5tZXJnZShhLnZhbGlkYXRpb25SZXN1bHQpLG4ucHJvcGVydGllc01hdGNoZXMrPWEudmFsaWRhdGlvblJlc3VsdC5wcm9wZXJ0aWVzTWF0Y2hlcyxuLnByb3BlcnRpZXNWYWx1ZU1hdGNoZXMrPWEudmFsaWRhdGlvblJlc3VsdC5wcm9wZXJ0aWVzVmFsdWVNYXRjaGVzLHIubWVyZ2UoYS5tYXRjaGluZ1NjaGVtYXMpKSxvLmxlbmd0aH07QXJyYXkuaXNBcnJheSh0LmFueU9mKSYmbSh0LmFueU9mLCExKTtBcnJheS5pc0FycmF5KHQub25lT2YpJiZtKHQub25lT2YsITApO3ZhciBnPWZ1bmN0aW9uKGUpe3ZhciB0PW5ldyBXbyxvPXIubmV3U3ViKCk7WG8oaSxCbyhlKSx0LG8pLG4ubWVyZ2UodCksbi5wcm9wZXJ0aWVzTWF0Y2hlcys9dC5wcm9wZXJ0aWVzTWF0Y2hlcyxuLnByb3BlcnRpZXNWYWx1ZU1hdGNoZXMrPXQucHJvcGVydGllc1ZhbHVlTWF0Y2hlcyxyLm1lcmdlKG8pfSxwPUJvKHQuaWYpO3AmJihiPXAsdj1Cbyh0LnRoZW4pLHk9Qm8odC5lbHNlKSxDPUJvKGIpLHc9bmV3IFdvLF89ci5uZXdTdWIoKSxYbyhpLEMsdyxfKSxyLm1lcmdlKF8pLHcuaGFzUHJvYmxlbXMoKT95JiZnKHkpOnYmJmcodikpO3ZhciBiLHYseSxDLHcsXztpZihBcnJheS5pc0FycmF5KHQuZW51bSkpe2Zvcih2YXIgUz1IbyhpKSxBPSExLEU9MCx4PXQuZW51bTtFPHgubGVuZ3RoO0UrKyl7dmFyIE49eFtFXTtpZihhaShTLE4pKXtBPSEwO2JyZWFrfX1uLmVudW1WYWx1ZXM9dC5lbnVtLG4uZW51bVZhbHVlTWF0Y2g9QSxBfHxuLnByb2JsZW1zLnB1c2goe2xvY2F0aW9uOntvZmZzZXQ6aS5vZmZzZXQsbGVuZ3RoOmkubGVuZ3RofSxjb2RlOnZvLkVudW1WYWx1ZU1pc21hdGNoLG1lc3NhZ2U6dC5lcnJvck1lc3NhZ2V8fElvKCJlbnVtV2FybmluZyIsIlZhbHVlIGlzIG5vdCBhY2NlcHRlZC4gVmFsaWQgdmFsdWVzOiB7MH0uIix0LmVudW0ubWFwKChmdW5jdGlvbihlKXtyZXR1cm4gSlNPTi5zdHJpbmdpZnkoZSl9KSkuam9pbigiLCAiKSl9KX1pZihjaSh0LmNvbnN0KSl7YWkoUz1IbyhpKSx0LmNvbnN0KT9uLmVudW1WYWx1ZU1hdGNoPSEwOihuLnByb2JsZW1zLnB1c2goe2xvY2F0aW9uOntvZmZzZXQ6aS5vZmZzZXQsbGVuZ3RoOmkubGVuZ3RofSxjb2RlOnZvLkVudW1WYWx1ZU1pc21hdGNoLG1lc3NhZ2U6dC5lcnJvck1lc3NhZ2V8fElvKCJjb25zdFdhcm5pbmciLCJWYWx1ZSBtdXN0IGJlIHswfS4iLEpTT04uc3RyaW5naWZ5KHQuY29uc3QpKX0pLG4uZW51bVZhbHVlTWF0Y2g9ITEpLG4uZW51bVZhbHVlcz1bdC5jb25zdF19dC5kZXByZWNhdGlvbk1lc3NhZ2UmJmkucGFyZW50JiZuLnByb2JsZW1zLnB1c2goe2xvY2F0aW9uOntvZmZzZXQ6aS5wYXJlbnQub2Zmc2V0LGxlbmd0aDppLnBhcmVudC5sZW5ndGh9LHNldmVyaXR5OlRyLldhcm5pbmcsbWVzc2FnZTp0LmRlcHJlY2F0aW9uTWVzc2FnZSxjb2RlOnZvLkRlcHJlY2F0ZWR9KX0oKSxyLmFkZCh7bm9kZTppLHNjaGVtYTp0fSl9fWZ1bmN0aW9uIFpvKGUsdCl7dmFyIG49W10scj0tMSxpPWUuZ2V0VGV4dCgpLG89dGkoaSwhMSksYT10JiZ0LmNvbGxlY3RDb21tZW50cz9bXTp2b2lkIDA7ZnVuY3Rpb24gcygpe2Zvcig7Oyl7dmFyIHQ9by5zY2FuKCk7c3dpdGNoKHUoKSx0KXtjYXNlIDEyOmNhc2UgMTM6QXJyYXkuaXNBcnJheShhKSYmYS5wdXNoKGZyLmNyZWF0ZShlLnBvc2l0aW9uQXQoby5nZXRUb2tlbk9mZnNldCgpKSxlLnBvc2l0aW9uQXQoby5nZXRUb2tlbk9mZnNldCgpK28uZ2V0VG9rZW5MZW5ndGgoKSkpKTticmVhaztjYXNlIDE1OmNhc2UgMTQ6YnJlYWs7ZGVmYXVsdDpyZXR1cm4gdH19fWZ1bmN0aW9uIGModCxpLG8sYSxzKXtpZih2b2lkIDA9PT1zJiYocz1Uci5FcnJvciksMD09PW4ubGVuZ3RofHxvIT09cil7dmFyIGM9ZnIuY3JlYXRlKGUucG9zaXRpb25BdChvKSxlLnBvc2l0aW9uQXQoYSkpO24ucHVzaChSci5jcmVhdGUoYyx0LHMsaSxlLmxhbmd1YWdlSWQpKSxyPW99fWZ1bmN0aW9uIGwoZSx0LG4scixhKXt2b2lkIDA9PT1uJiYobj12b2lkIDApLHZvaWQgMD09PXImJihyPVtdKSx2b2lkIDA9PT1hJiYoYT1bXSk7dmFyIGw9by5nZXRUb2tlbk9mZnNldCgpLHU9by5nZXRUb2tlbk9mZnNldCgpK28uZ2V0VG9rZW5MZW5ndGgoKTtpZihsPT09dSYmbD4wKXtmb3IobC0tO2w+MCYmL1xzLy50ZXN0KGkuY2hhckF0KGwpKTspbC0tO3U9bCsxfWlmKGMoZSx0LGwsdSksbiYmaChuLCExKSxyLmxlbmd0aCthLmxlbmd0aD4wKWZvcih2YXIgZj1vLmdldFRva2VuKCk7MTchPT1mOyl7aWYoLTEhPT1yLmluZGV4T2YoZikpe3MoKTticmVha31pZigtMSE9PWEuaW5kZXhPZihmKSlicmVhaztmPXMoKX1yZXR1cm4gbn1mdW5jdGlvbiB1KCl7c3dpdGNoKG8uZ2V0VG9rZW5FcnJvcigpKXtjYXNlIDQ6cmV0dXJuIGwoSW8oIkludmFsaWRVbmljb2RlIiwiSW52YWxpZCB1bmljb2RlIHNlcXVlbmNlIGluIHN0cmluZy4iKSx2by5JbnZhbGlkVW5pY29kZSksITA7Y2FzZSA1OnJldHVybiBsKElvKCJJbnZhbGlkRXNjYXBlQ2hhcmFjdGVyIiwiSW52YWxpZCBlc2NhcGUgY2hhcmFjdGVyIGluIHN0cmluZy4iKSx2by5JbnZhbGlkRXNjYXBlQ2hhcmFjdGVyKSwhMDtjYXNlIDM6cmV0dXJuIGwoSW8oIlVuZXhwZWN0ZWRFbmRPZk51bWJlciIsIlVuZXhwZWN0ZWQgZW5kIG9mIG51bWJlci4iKSx2by5VbmV4cGVjdGVkRW5kT2ZOdW1iZXIpLCEwO2Nhc2UgMTpyZXR1cm4gbChJbygiVW5leHBlY3RlZEVuZE9mQ29tbWVudCIsIlVuZXhwZWN0ZWQgZW5kIG9mIGNvbW1lbnQuIiksdm8uVW5leHBlY3RlZEVuZE9mQ29tbWVudCksITA7Y2FzZSAyOnJldHVybiBsKElvKCJVbmV4cGVjdGVkRW5kT2ZTdHJpbmciLCJVbmV4cGVjdGVkIGVuZCBvZiBzdHJpbmcuIiksdm8uVW5leHBlY3RlZEVuZE9mU3RyaW5nKSwhMDtjYXNlIDY6cmV0dXJuIGwoSW8oIkludmFsaWRDaGFyYWN0ZXIiLCJJbnZhbGlkIGNoYXJhY3RlcnMgaW4gc3RyaW5nLiBDb250cm9sIGNoYXJhY3RlcnMgbXVzdCBiZSBlc2NhcGVkLiIpLHZvLkludmFsaWRDaGFyYWN0ZXIpLCEwfXJldHVybiExfWZ1bmN0aW9uIGgoZSx0KXtyZXR1cm4gZS5sZW5ndGg9by5nZXRUb2tlbk9mZnNldCgpK28uZ2V0VG9rZW5MZW5ndGgoKS1lLm9mZnNldCx0JiZzKCksZX12YXIgZj1uZXcgS28odm9pZCAwLDAsMCk7ZnVuY3Rpb24gZCh0LG4pe3ZhciByPW5ldyBqbyh0LG8uZ2V0VG9rZW5PZmZzZXQoKSxmKSxpPW0ocik7aWYoIWkpe2lmKDE2IT09by5nZXRUb2tlbigpKXJldHVybjtsKElvKCJEb3VibGVRdW90ZXNFeHBlY3RlZCIsIlByb3BlcnR5IGtleXMgbXVzdCBiZSBkb3VibGVxdW90ZWQiKSx2by5VbmRlZmluZWQpO3ZhciBhPW5ldyBLbyhyLG8uZ2V0VG9rZW5PZmZzZXQoKSxvLmdldFRva2VuTGVuZ3RoKCkpO2EudmFsdWU9by5nZXRUb2tlblZhbHVlKCksaT1hLHMoKX1yLmtleU5vZGU9aTt2YXIgdT1uW2kudmFsdWVdO2lmKHU/KGMoSW8oIkR1cGxpY2F0ZUtleVdhcm5pbmciLCJEdXBsaWNhdGUgb2JqZWN0IGtleSIpLHZvLkR1cGxpY2F0ZUtleSxyLmtleU5vZGUub2Zmc2V0LHIua2V5Tm9kZS5vZmZzZXQrci5rZXlOb2RlLmxlbmd0aCxUci5XYXJuaW5nKSwib2JqZWN0Ij09dHlwZW9mIHUmJmMoSW8oIkR1cGxpY2F0ZUtleVdhcm5pbmciLCJEdXBsaWNhdGUgb2JqZWN0IGtleSIpLHZvLkR1cGxpY2F0ZUtleSx1LmtleU5vZGUub2Zmc2V0LHUua2V5Tm9kZS5vZmZzZXQrdS5rZXlOb2RlLmxlbmd0aCxUci5XYXJuaW5nKSxuW2kudmFsdWVdPSEwKTpuW2kudmFsdWVdPXIsNj09PW8uZ2V0VG9rZW4oKSlyLmNvbG9uT2Zmc2V0PW8uZ2V0VG9rZW5PZmZzZXQoKSxzKCk7ZWxzZSBpZihsKElvKCJDb2xvbkV4cGVjdGVkIiwiQ29sb24gZXhwZWN0ZWQiKSx2by5Db2xvbkV4cGVjdGVkKSwxMD09PW8uZ2V0VG9rZW4oKSYmZS5wb3NpdGlvbkF0KGkub2Zmc2V0K2kubGVuZ3RoKS5saW5lPGUucG9zaXRpb25BdChvLmdldFRva2VuT2Zmc2V0KCkpLmxpbmUpcmV0dXJuIHIubGVuZ3RoPWkubGVuZ3RoLHI7dmFyIGg9ZyhyKTtyZXR1cm4gaD8oci52YWx1ZU5vZGU9aCxyLmxlbmd0aD1oLm9mZnNldCtoLmxlbmd0aC1yLm9mZnNldCxyKTpsKElvKCJWYWx1ZUV4cGVjdGVkIiwiVmFsdWUgZXhwZWN0ZWQiKSx2by5WYWx1ZUV4cGVjdGVkLHIsW10sWzIsNV0pfWZ1bmN0aW9uIG0oZSl7aWYoMTA9PT1vLmdldFRva2VuKCkpe3ZhciB0PW5ldyBLbyhlLG8uZ2V0VG9rZW5PZmZzZXQoKSk7cmV0dXJuIHQudmFsdWU9by5nZXRUb2tlblZhbHVlKCksaCh0LCEwKX19ZnVuY3Rpb24gZyhlKXtyZXR1cm4gZnVuY3Rpb24oZSl7aWYoMz09PW8uZ2V0VG9rZW4oKSl7dmFyIHQ9bmV3IEZvKGUsby5nZXRUb2tlbk9mZnNldCgpKTtzKCk7Zm9yKHZhciBuPSExOzQhPT1vLmdldFRva2VuKCkmJjE3IT09by5nZXRUb2tlbigpOyl7aWYoNT09PW8uZ2V0VG9rZW4oKSl7bnx8bChJbygiVmFsdWVFeHBlY3RlZCIsIlZhbHVlIGV4cGVjdGVkIiksdm8uVmFsdWVFeHBlY3RlZCk7dmFyIHI9by5nZXRUb2tlbk9mZnNldCgpO2lmKHMoKSw0PT09by5nZXRUb2tlbigpKXtuJiZjKElvKCJUcmFpbGluZ0NvbW1hIiwiVHJhaWxpbmcgY29tbWEiKSx2by5UcmFpbGluZ0NvbW1hLHIscisxKTtjb250aW51ZX19ZWxzZSBuJiZsKElvKCJFeHBlY3RlZENvbW1hIiwiRXhwZWN0ZWQgY29tbWEiKSx2by5Db21tYUV4cGVjdGVkKTt2YXIgaT1nKHQpO2k/dC5pdGVtcy5wdXNoKGkpOmwoSW8oIlByb3BlcnR5RXhwZWN0ZWQiLCJWYWx1ZSBleHBlY3RlZCIpLHZvLlZhbHVlRXhwZWN0ZWQsdm9pZCAwLFtdLFs0LDVdKSxuPSEwfXJldHVybiA0IT09by5nZXRUb2tlbigpP2woSW8oIkV4cGVjdGVkQ2xvc2VCcmFja2V0IiwiRXhwZWN0ZWQgY29tbWEgb3IgY2xvc2luZyBicmFja2V0Iiksdm8uQ29tbWFPckNsb3NlQmFja2V0RXhwZWN0ZWQsdCk6aCh0LCEwKX19KGUpfHxmdW5jdGlvbihlKXtpZigxPT09by5nZXRUb2tlbigpKXt2YXIgdD1uZXcgVW8oZSxvLmdldFRva2VuT2Zmc2V0KCkpLG49T2JqZWN0LmNyZWF0ZShudWxsKTtzKCk7Zm9yKHZhciByPSExOzIhPT1vLmdldFRva2VuKCkmJjE3IT09by5nZXRUb2tlbigpOyl7aWYoNT09PW8uZ2V0VG9rZW4oKSl7cnx8bChJbygiUHJvcGVydHlFeHBlY3RlZCIsIlByb3BlcnR5IGV4cGVjdGVkIiksdm8uUHJvcGVydHlFeHBlY3RlZCk7dmFyIGk9by5nZXRUb2tlbk9mZnNldCgpO2lmKHMoKSwyPT09by5nZXRUb2tlbigpKXtyJiZjKElvKCJUcmFpbGluZ0NvbW1hIiwiVHJhaWxpbmcgY29tbWEiKSx2by5UcmFpbGluZ0NvbW1hLGksaSsxKTtjb250aW51ZX19ZWxzZSByJiZsKElvKCJFeHBlY3RlZENvbW1hIiwiRXhwZWN0ZWQgY29tbWEiKSx2by5Db21tYUV4cGVjdGVkKTt2YXIgYT1kKHQsbik7YT90LnByb3BlcnRpZXMucHVzaChhKTpsKElvKCJQcm9wZXJ0eUV4cGVjdGVkIiwiUHJvcGVydHkgZXhwZWN0ZWQiKSx2by5Qcm9wZXJ0eUV4cGVjdGVkLHZvaWQgMCxbXSxbMiw1XSkscj0hMH1yZXR1cm4gMiE9PW8uZ2V0VG9rZW4oKT9sKElvKCJFeHBlY3RlZENsb3NlQnJhY2UiLCJFeHBlY3RlZCBjb21tYSBvciBjbG9zaW5nIGJyYWNlIiksdm8uQ29tbWFPckNsb3NlQnJhY2VFeHBlY3RlZCx0KTpoKHQsITApfX0oZSl8fG0oZSl8fGZ1bmN0aW9uKGUpe2lmKDExPT09by5nZXRUb2tlbigpKXt2YXIgdD1uZXcgRG8oZSxvLmdldFRva2VuT2Zmc2V0KCkpO2lmKDA9PT1vLmdldFRva2VuRXJyb3IoKSl7dmFyIG49by5nZXRUb2tlblZhbHVlKCk7dHJ5e3ZhciByPUpTT04ucGFyc2Uobik7aWYoIXNpKHIpKXJldHVybiBsKElvKCJJbnZhbGlkTnVtYmVyRm9ybWF0IiwiSW52YWxpZCBudW1iZXIgZm9ybWF0LiIpLHZvLlVuZGVmaW5lZCx0KTt0LnZhbHVlPXJ9Y2F0Y2goZSl7cmV0dXJuIGwoSW8oIkludmFsaWROdW1iZXJGb3JtYXQiLCJJbnZhbGlkIG51bWJlciBmb3JtYXQuIiksdm8uVW5kZWZpbmVkLHQpfXQuaXNJbnRlZ2VyPS0xPT09bi5pbmRleE9mKCIuIil9cmV0dXJuIGgodCwhMCl9fShlKXx8ZnVuY3Rpb24oZSl7c3dpdGNoKG8uZ2V0VG9rZW4oKSl7Y2FzZSA3OnJldHVybiBoKG5ldyBSbyhlLG8uZ2V0VG9rZW5PZmZzZXQoKSksITApO2Nhc2UgODpyZXR1cm4gaChuZXcgVm8oZSwhMCxvLmdldFRva2VuT2Zmc2V0KCkpLCEwKTtjYXNlIDk6cmV0dXJuIGgobmV3IFZvKGUsITEsby5nZXRUb2tlbk9mZnNldCgpKSwhMCk7ZGVmYXVsdDpyZXR1cm59fShlKX12YXIgcD12b2lkIDA7cmV0dXJuIDE3IT09cygpJiYoKHA9ZyhwKSk/MTchPT1vLmdldFRva2VuKCkmJmwoSW8oIkVuZCBvZiBmaWxlIGV4cGVjdGVkIiwiRW5kIG9mIGZpbGUgZXhwZWN0ZWQuIiksdm8uVW5kZWZpbmVkKTpsKElvKCJJbnZhbGlkIHN5bWJvbCIsIkV4cGVjdGVkIGEgSlNPTiBvYmplY3QsIGFycmF5IG9yIGxpdGVyYWwuIiksdm8uVW5kZWZpbmVkKSksbmV3IEpvKHAsbixhKX1mdW5jdGlvbiBZbyhlLHQsbil7aWYobnVsbCE9PWUmJiJvYmplY3QiPT10eXBlb2YgZSl7dmFyIHI9dCsiXHQiO2lmKEFycmF5LmlzQXJyYXkoZSkpe2lmKDA9PT1lLmxlbmd0aClyZXR1cm4iW10iO2Zvcih2YXIgaT0iW1xuIixvPTA7bzxlLmxlbmd0aDtvKyspaSs9citZbyhlW29dLHIsbiksbzxlLmxlbmd0aC0xJiYoaSs9IiwiKSxpKz0iXG4iO3JldHVybiBpKz10KyJdIn12YXIgYT1PYmplY3Qua2V5cyhlKTtpZigwPT09YS5sZW5ndGgpcmV0dXJuInt9Ijtmb3IoaT0ie1xuIixvPTA7bzxhLmxlbmd0aDtvKyspe3ZhciBzPWFbb107aSs9citKU09OLnN0cmluZ2lmeShzKSsiOiAiK1lvKGVbc10scixuKSxvPGEubGVuZ3RoLTEmJihpKz0iLCIpLGkrPSJcbiJ9cmV0dXJuIGkrPXQrIn0ifXJldHVybiBuKGUpfXZhciBRbz1ObygpLGVhPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHQsbixyKXt2b2lkIDA9PT10JiYodD1bXSksdm9pZCAwPT09biYmKG49UHJvbWlzZSksdm9pZCAwPT09ciYmKHI9e30pLHRoaXMuc2NoZW1hU2VydmljZT1lLHRoaXMuY29udHJpYnV0aW9ucz10LHRoaXMucHJvbWlzZUNvbnN0cnVjdG9yPW4sdGhpcy5jbGllbnRDYXBhYmlsaXRpZXM9cn1yZXR1cm4gZS5wcm90b3R5cGUuZG9SZXNvbHZlPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD10aGlzLmNvbnRyaWJ1dGlvbnMubGVuZ3RoLTE7dD49MDt0LS0pe3ZhciBuPXRoaXMuY29udHJpYnV0aW9uc1t0XS5yZXNvbHZlQ29tcGxldGlvbjtpZihuKXt2YXIgcj1uKGUpO2lmKHIpcmV0dXJuIHJ9fXJldHVybiB0aGlzLnByb21pc2VDb25zdHJ1Y3Rvci5yZXNvbHZlKGUpfSxlLnByb3RvdHlwZS5kb0NvbXBsZXRlPWZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzLGk9e2l0ZW1zOltdLGlzSW5jb21wbGV0ZTohMX0sbz1lLmdldFRleHQoKSxhPWUub2Zmc2V0QXQodCkscz1uLmdldE5vZGVGcm9tT2Zmc2V0KGEsITApO2lmKHRoaXMuaXNJbkNvbW1lbnQoZSxzP3Mub2Zmc2V0OjAsYSkpcmV0dXJuIFByb21pc2UucmVzb2x2ZShpKTtpZihzJiZhPT09cy5vZmZzZXQrcy5sZW5ndGgmJmE+MCl7dmFyIGM9b1thLTFdOygib2JqZWN0Ij09PXMudHlwZSYmIn0iPT09Y3x8ImFycmF5Ij09PXMudHlwZSYmIl0iPT09YykmJihzPXMucGFyZW50KX12YXIgbCx1PXRoaXMuZ2V0Q3VycmVudFdvcmQoZSxhKTtpZighc3x8InN0cmluZyIhPT1zLnR5cGUmJiJudW1iZXIiIT09cy50eXBlJiYiYm9vbGVhbiIhPT1zLnR5cGUmJiJudWxsIiE9PXMudHlwZSl7dmFyIGg9YS11Lmxlbmd0aDtoPjAmJiciJz09PW9baC0xXSYmaC0tLGw9ZnIuY3JlYXRlKGUucG9zaXRpb25BdChoKSx0KX1lbHNlIGw9ZnIuY3JlYXRlKGUucG9zaXRpb25BdChzLm9mZnNldCksZS5wb3NpdGlvbkF0KHMub2Zmc2V0K3MubGVuZ3RoKSk7dmFyIGY9e30sZD17YWRkOmZ1bmN0aW9uKGUpe3ZhciB0PWUubGFiZWwsbj1mW3RdO2lmKG4pbi5kb2N1bWVudGF0aW9ufHwobi5kb2N1bWVudGF0aW9uPWUuZG9jdW1lbnRhdGlvbiksbi5kZXRhaWx8fChuLmRldGFpbD1lLmRldGFpbCk7ZWxzZXtpZigodD10LnJlcGxhY2UoL1tcbl0vZywi4oa1IikpLmxlbmd0aD42MCl7dmFyIHI9dC5zdWJzdHIoMCw1NykudHJpbSgpKyIuLi4iO2Zbcl18fCh0PXIpfWwmJnZvaWQgMCE9PWUuaW5zZXJ0VGV4dCYmKGUudGV4dEVkaXQ9S3IucmVwbGFjZShsLGUuaW5zZXJ0VGV4dCkpLGUubGFiZWw9dCxmW3RdPWUsaS5pdGVtcy5wdXNoKGUpfX0sc2V0QXNJbmNvbXBsZXRlOmZ1bmN0aW9uKCl7aS5pc0luY29tcGxldGU9ITB9LGVycm9yOmZ1bmN0aW9uKGUpe2NvbnNvbGUuZXJyb3IoZSl9LGxvZzpmdW5jdGlvbihlKXtjb25zb2xlLmxvZyhlKX0sZ2V0TnVtYmVyT2ZQcm9wb3NhbHM6ZnVuY3Rpb24oKXtyZXR1cm4gaS5pdGVtcy5sZW5ndGh9fTtyZXR1cm4gdGhpcy5zY2hlbWFTZXJ2aWNlLmdldFNjaGVtYUZvclJlc291cmNlKGUudXJpLG4pLnRoZW4oKGZ1bmN0aW9uKHQpe3ZhciBjPVtdLGg9ITAsbT0iIixnPXZvaWQgMDtpZihzJiYic3RyaW5nIj09PXMudHlwZSl7dmFyIHA9cy5wYXJlbnQ7cCYmInByb3BlcnR5Ij09PXAudHlwZSYmcC5rZXlOb2RlPT09cyYmKGg9IXAudmFsdWVOb2RlLGc9cCxtPW8uc3Vic3RyKHMub2Zmc2V0KzEscy5sZW5ndGgtMikscCYmKHM9cC5wYXJlbnQpKX1pZihzJiYib2JqZWN0Ij09PXMudHlwZSl7aWYocy5vZmZzZXQ9PT1hKXJldHVybiBpO3MucHJvcGVydGllcy5mb3JFYWNoKChmdW5jdGlvbihlKXtnJiZnPT09ZXx8KGZbZS5rZXlOb2RlLnZhbHVlXT1JaS5jcmVhdGUoIl9fIikpfSkpO3ZhciBiPSIiO2gmJihiPXIuZXZhbHVhdGVTZXBhcmF0b3JBZnRlcihlLGUub2Zmc2V0QXQobC5lbmQpKSksdD9yLmdldFByb3BlcnR5Q29tcGxldGlvbnModCxuLHMsaCxiLGQpOnIuZ2V0U2NoZW1hTGVzc1Byb3BlcnR5Q29tcGxldGlvbnMobixzLG0sZCk7dmFyIHY9em8ocyk7ci5jb250cmlidXRpb25zLmZvckVhY2goKGZ1bmN0aW9uKHQpe3ZhciBuPXQuY29sbGVjdFByb3BlcnR5Q29tcGxldGlvbnMoZS51cmksdix1LGgsIiI9PT1iLGQpO24mJmMucHVzaChuKX0pKSwhdCYmdS5sZW5ndGg+MCYmJyInIT09by5jaGFyQXQoYS11Lmxlbmd0aC0xKSYmKGQuYWRkKHtraW5kOlNpLlByb3BlcnR5LGxhYmVsOnIuZ2V0TGFiZWxGb3JWYWx1ZSh1KSxpbnNlcnRUZXh0OnIuZ2V0SW5zZXJ0VGV4dEZvclByb3BlcnR5KHUsdm9pZCAwLCExLGIpLGluc2VydFRleHRGb3JtYXQ6RWkuU25pcHBldCxkb2N1bWVudGF0aW9uOiIifSksZC5zZXRBc0luY29tcGxldGUoKSl9dmFyIHk9e307cmV0dXJuIHQ/ci5nZXRWYWx1ZUNvbXBsZXRpb25zKHQsbixzLGEsZSxkLHkpOnIuZ2V0U2NoZW1hTGVzc1ZhbHVlQ29tcGxldGlvbnMobixzLGEsZSxkKSxyLmNvbnRyaWJ1dGlvbnMubGVuZ3RoPjAmJnIuZ2V0Q29udHJpYnV0ZWRWYWx1ZUNvbXBsZXRpb25zKG4scyxhLGUsZCxjKSxyLnByb21pc2VDb25zdHJ1Y3Rvci5hbGwoYykudGhlbigoZnVuY3Rpb24oKXtpZigwPT09ZC5nZXROdW1iZXJPZlByb3Bvc2FscygpKXt2YXIgdD1hOyFzfHwic3RyaW5nIiE9PXMudHlwZSYmIm51bWJlciIhPT1zLnR5cGUmJiJib29sZWFuIiE9PXMudHlwZSYmIm51bGwiIT09cy50eXBlfHwodD1zLm9mZnNldCtzLmxlbmd0aCk7dmFyIG49ci5ldmFsdWF0ZVNlcGFyYXRvckFmdGVyKGUsdCk7ci5hZGRGaWxsZXJWYWx1ZUNvbXBsZXRpb25zKHksbixkKX1yZXR1cm4gaX0pKX0pKX0sZS5wcm90b3R5cGUuZ2V0UHJvcGVydHlDb21wbGV0aW9ucz1mdW5jdGlvbihlLHQsbixyLGksbyl7dmFyIGE9dGhpczt0LmdldE1hdGNoaW5nU2NoZW1hcyhlLnNjaGVtYSxuLm9mZnNldCkuZm9yRWFjaCgoZnVuY3Rpb24oZSl7aWYoZS5ub2RlPT09biYmIWUuaW52ZXJ0ZWQpe3ZhciB0PWUuc2NoZW1hLnByb3BlcnRpZXM7dCYmT2JqZWN0LmtleXModCkuZm9yRWFjaCgoZnVuY3Rpb24oZSl7dmFyIG49dFtlXTtpZigib2JqZWN0Ij09dHlwZW9mIG4mJiFuLmRlcHJlY2F0aW9uTWVzc2FnZSYmIW4uZG9Ob3RTdWdnZXN0KXt2YXIgcz17a2luZDpTaS5Qcm9wZXJ0eSxsYWJlbDplLGluc2VydFRleHQ6YS5nZXRJbnNlcnRUZXh0Rm9yUHJvcGVydHkoZSxuLHIsaSksaW5zZXJ0VGV4dEZvcm1hdDpFaS5TbmlwcGV0LGZpbHRlclRleHQ6YS5nZXRGaWx0ZXJUZXh0Rm9yVmFsdWUoZSksZG9jdW1lbnRhdGlvbjphLmZyb21NYXJrdXAobi5tYXJrZG93bkRlc2NyaXB0aW9uKXx8bi5kZXNjcmlwdGlvbnx8IiJ9O3ZvaWQgMCE9PW4uc3VnZ2VzdFNvcnRUZXh0JiYocy5zb3J0VGV4dD1uLnN1Z2dlc3RTb3J0VGV4dCkscy5pbnNlcnRUZXh0JiZ1aShzLmluc2VydFRleHQsIiQxIi5jb25jYXQoaSkpJiYocy5jb21tYW5kPXt0aXRsZToiU3VnZ2VzdCIsY29tbWFuZDoiZWRpdG9yLmFjdGlvbi50cmlnZ2VyU3VnZ2VzdCJ9KSxvLmFkZChzKX19KSk7dmFyIHM9ZS5zY2hlbWEucHJvcGVydHlOYW1lcztpZigib2JqZWN0Ij09dHlwZW9mIHMmJiFzLmRlcHJlY2F0aW9uTWVzc2FnZSYmIXMuZG9Ob3RTdWdnZXN0KXt2YXIgYz1mdW5jdGlvbihlLHQpe3ZvaWQgMD09PXQmJih0PXZvaWQgMCk7dmFyIG49e2tpbmQ6U2kuUHJvcGVydHksbGFiZWw6ZSxpbnNlcnRUZXh0OmEuZ2V0SW5zZXJ0VGV4dEZvclByb3BlcnR5KGUsdm9pZCAwLHIsaSksaW5zZXJ0VGV4dEZvcm1hdDpFaS5TbmlwcGV0LGZpbHRlclRleHQ6YS5nZXRGaWx0ZXJUZXh0Rm9yVmFsdWUoZSksZG9jdW1lbnRhdGlvbjp0fHxhLmZyb21NYXJrdXAocy5tYXJrZG93bkRlc2NyaXB0aW9uKXx8cy5kZXNjcmlwdGlvbnx8IiJ9O3ZvaWQgMCE9PXMuc3VnZ2VzdFNvcnRUZXh0JiYobi5zb3J0VGV4dD1zLnN1Z2dlc3RTb3J0VGV4dCksbi5pbnNlcnRUZXh0JiZ1aShuLmluc2VydFRleHQsIiQxIi5jb25jYXQoaSkpJiYobi5jb21tYW5kPXt0aXRsZToiU3VnZ2VzdCIsY29tbWFuZDoiZWRpdG9yLmFjdGlvbi50cmlnZ2VyU3VnZ2VzdCJ9KSxvLmFkZChuKX07aWYocy5lbnVtKWZvcih2YXIgbD0wO2w8cy5lbnVtLmxlbmd0aDtsKyspe3ZhciB1PXZvaWQgMDtzLm1hcmtkb3duRW51bURlc2NyaXB0aW9ucyYmbDxzLm1hcmtkb3duRW51bURlc2NyaXB0aW9ucy5sZW5ndGg/dT1hLmZyb21NYXJrdXAocy5tYXJrZG93bkVudW1EZXNjcmlwdGlvbnNbbF0pOnMuZW51bURlc2NyaXB0aW9ucyYmbDxzLmVudW1EZXNjcmlwdGlvbnMubGVuZ3RoJiYodT1zLmVudW1EZXNjcmlwdGlvbnNbbF0pLGMocy5lbnVtW2xdLHUpfXMuY29uc3QmJmMocy5jb25zdCl9fX0pKX0sZS5wcm90b3R5cGUuZ2V0U2NoZW1hTGVzc1Byb3BlcnR5Q29tcGxldGlvbnM9ZnVuY3Rpb24oZSx0LG4scil7dmFyIGk9dGhpcyxvPWZ1bmN0aW9uKGUpe2UucHJvcGVydGllcy5mb3JFYWNoKChmdW5jdGlvbihlKXt2YXIgdD1lLmtleU5vZGUudmFsdWU7ci5hZGQoe2tpbmQ6U2kuUHJvcGVydHksbGFiZWw6dCxpbnNlcnRUZXh0OmkuZ2V0SW5zZXJ0VGV4dEZvclZhbHVlKHQsIiIpLGluc2VydFRleHRGb3JtYXQ6RWkuU25pcHBldCxmaWx0ZXJUZXh0OmkuZ2V0RmlsdGVyVGV4dEZvclZhbHVlKHQpLGRvY3VtZW50YXRpb246IiJ9KX0pKX07aWYodC5wYXJlbnQpaWYoInByb3BlcnR5Ij09PXQucGFyZW50LnR5cGUpe3ZhciBhPXQucGFyZW50LmtleU5vZGUudmFsdWU7ZS52aXNpdCgoZnVuY3Rpb24oZSl7cmV0dXJuInByb3BlcnR5Ij09PWUudHlwZSYmZSE9PXQucGFyZW50JiZlLmtleU5vZGUudmFsdWU9PT1hJiZlLnZhbHVlTm9kZSYmIm9iamVjdCI9PT1lLnZhbHVlTm9kZS50eXBlJiZvKGUudmFsdWVOb2RlKSwhMH0pKX1lbHNlImFycmF5Ij09PXQucGFyZW50LnR5cGUmJnQucGFyZW50Lml0ZW1zLmZvckVhY2goKGZ1bmN0aW9uKGUpeyJvYmplY3QiPT09ZS50eXBlJiZlIT09dCYmbyhlKX0pKTtlbHNlIm9iamVjdCI9PT10LnR5cGUmJnIuYWRkKHtraW5kOlNpLlByb3BlcnR5LGxhYmVsOiIkc2NoZW1hIixpbnNlcnRUZXh0OnRoaXMuZ2V0SW5zZXJ0VGV4dEZvclByb3BlcnR5KCIkc2NoZW1hIix2b2lkIDAsITAsIiIpLGluc2VydFRleHRGb3JtYXQ6RWkuU25pcHBldCxkb2N1bWVudGF0aW9uOiIiLGZpbHRlclRleHQ6dGhpcy5nZXRGaWx0ZXJUZXh0Rm9yVmFsdWUoIiRzY2hlbWEiKX0pfSxlLnByb3RvdHlwZS5nZXRTY2hlbWFMZXNzVmFsdWVDb21wbGV0aW9ucz1mdW5jdGlvbihlLHQsbixyLGkpe3ZhciBvPXRoaXMsYT1uO2lmKCF0fHwic3RyaW5nIiE9PXQudHlwZSYmIm51bWJlciIhPT10LnR5cGUmJiJib29sZWFuIiE9PXQudHlwZSYmIm51bGwiIT09dC50eXBlfHwoYT10Lm9mZnNldCt0Lmxlbmd0aCx0PXQucGFyZW50KSwhdClyZXR1cm4gaS5hZGQoe2tpbmQ6dGhpcy5nZXRTdWdnZXN0aW9uS2luZCgib2JqZWN0IiksbGFiZWw6IkVtcHR5IG9iamVjdCIsaW5zZXJ0VGV4dDp0aGlzLmdldEluc2VydFRleHRGb3JWYWx1ZSh7fSwiIiksaW5zZXJ0VGV4dEZvcm1hdDpFaS5TbmlwcGV0LGRvY3VtZW50YXRpb246IiJ9KSx2b2lkIGkuYWRkKHtraW5kOnRoaXMuZ2V0U3VnZ2VzdGlvbktpbmQoImFycmF5IiksbGFiZWw6IkVtcHR5IGFycmF5IixpbnNlcnRUZXh0OnRoaXMuZ2V0SW5zZXJ0VGV4dEZvclZhbHVlKFtdLCIiKSxpbnNlcnRUZXh0Rm9ybWF0OkVpLlNuaXBwZXQsZG9jdW1lbnRhdGlvbjoiIn0pO3ZhciBzPXRoaXMuZXZhbHVhdGVTZXBhcmF0b3JBZnRlcihyLGEpLGM9ZnVuY3Rpb24oZSl7ZS5wYXJlbnQmJiFHbyhlLnBhcmVudCxuLCEwKSYmaS5hZGQoe2tpbmQ6by5nZXRTdWdnZXN0aW9uS2luZChlLnR5cGUpLGxhYmVsOm8uZ2V0TGFiZWxUZXh0Rm9yTWF0Y2hpbmdOb2RlKGUsciksaW5zZXJ0VGV4dDpvLmdldEluc2VydFRleHRGb3JNYXRjaGluZ05vZGUoZSxyLHMpLGluc2VydFRleHRGb3JtYXQ6RWkuU25pcHBldCxkb2N1bWVudGF0aW9uOiIifSksImJvb2xlYW4iPT09ZS50eXBlJiZvLmFkZEJvb2xlYW5WYWx1ZUNvbXBsZXRpb24oIWUudmFsdWUscyxpKX07aWYoInByb3BlcnR5Ij09PXQudHlwZSYmbj4odC5jb2xvbk9mZnNldHx8MCkpe3ZhciBsPXQudmFsdWVOb2RlO2lmKGwmJihuPmwub2Zmc2V0K2wubGVuZ3RofHwib2JqZWN0Ij09PWwudHlwZXx8ImFycmF5Ij09PWwudHlwZSkpcmV0dXJuO3ZhciB1PXQua2V5Tm9kZS52YWx1ZTtlLnZpc2l0KChmdW5jdGlvbihlKXtyZXR1cm4icHJvcGVydHkiPT09ZS50eXBlJiZlLmtleU5vZGUudmFsdWU9PT11JiZlLnZhbHVlTm9kZSYmYyhlLnZhbHVlTm9kZSksITB9KSksIiRzY2hlbWEiPT09dSYmdC5wYXJlbnQmJiF0LnBhcmVudC5wYXJlbnQmJnRoaXMuYWRkRG9sbGFyU2NoZW1hQ29tcGxldGlvbnMocyxpKX1pZigiYXJyYXkiPT09dC50eXBlKWlmKHQucGFyZW50JiYicHJvcGVydHkiPT09dC5wYXJlbnQudHlwZSl7dmFyIGg9dC5wYXJlbnQua2V5Tm9kZS52YWx1ZTtlLnZpc2l0KChmdW5jdGlvbihlKXtyZXR1cm4icHJvcGVydHkiPT09ZS50eXBlJiZlLmtleU5vZGUudmFsdWU9PT1oJiZlLnZhbHVlTm9kZSYmImFycmF5Ij09PWUudmFsdWVOb2RlLnR5cGUmJmUudmFsdWVOb2RlLml0ZW1zLmZvckVhY2goYyksITB9KSl9ZWxzZSB0Lml0ZW1zLmZvckVhY2goYyl9LGUucHJvdG90eXBlLmdldFZhbHVlQ29tcGxldGlvbnM9ZnVuY3Rpb24oZSx0LG4scixpLG8sYSl7dmFyIHM9cixjPXZvaWQgMCxsPXZvaWQgMDtpZighbnx8InN0cmluZyIhPT1uLnR5cGUmJiJudW1iZXIiIT09bi50eXBlJiYiYm9vbGVhbiIhPT1uLnR5cGUmJiJudWxsIiE9PW4udHlwZXx8KHM9bi5vZmZzZXQrbi5sZW5ndGgsbD1uLG49bi5wYXJlbnQpLG4pe2lmKCJwcm9wZXJ0eSI9PT1uLnR5cGUmJnI+KG4uY29sb25PZmZzZXR8fDApKXt2YXIgdT1uLnZhbHVlTm9kZTtpZih1JiZyPnUub2Zmc2V0K3UubGVuZ3RoKXJldHVybjtjPW4ua2V5Tm9kZS52YWx1ZSxuPW4ucGFyZW50fWlmKG4mJih2b2lkIDAhPT1jfHwiYXJyYXkiPT09bi50eXBlKSl7Zm9yKHZhciBoPXRoaXMuZXZhbHVhdGVTZXBhcmF0b3JBZnRlcihpLHMpLGY9MCxkPXQuZ2V0TWF0Y2hpbmdTY2hlbWFzKGUuc2NoZW1hLG4ub2Zmc2V0LGwpO2Y8ZC5sZW5ndGg7ZisrKXt2YXIgbT1kW2ZdO2lmKG0ubm9kZT09PW4mJiFtLmludmVydGVkJiZtLnNjaGVtYSl7aWYoImFycmF5Ij09PW4udHlwZSYmbS5zY2hlbWEuaXRlbXMpaWYoQXJyYXkuaXNBcnJheShtLnNjaGVtYS5pdGVtcykpe3ZhciBnPXRoaXMuZmluZEl0ZW1BdE9mZnNldChuLGkscik7ZzxtLnNjaGVtYS5pdGVtcy5sZW5ndGgmJnRoaXMuYWRkU2NoZW1hVmFsdWVDb21wbGV0aW9ucyhtLnNjaGVtYS5pdGVtc1tnXSxoLG8sYSl9ZWxzZSB0aGlzLmFkZFNjaGVtYVZhbHVlQ29tcGxldGlvbnMobS5zY2hlbWEuaXRlbXMsaCxvLGEpO2lmKHZvaWQgMCE9PWMpe3ZhciBwPSExO2lmKG0uc2NoZW1hLnByb3BlcnRpZXMpKHc9bS5zY2hlbWEucHJvcGVydGllc1tjXSkmJihwPSEwLHRoaXMuYWRkU2NoZW1hVmFsdWVDb21wbGV0aW9ucyh3LGgsbyxhKSk7aWYobS5zY2hlbWEucGF0dGVyblByb3BlcnRpZXMmJiFwKWZvcih2YXIgYj0wLHY9T2JqZWN0LmtleXMobS5zY2hlbWEucGF0dGVyblByb3BlcnRpZXMpO2I8di5sZW5ndGg7YisrKXt2YXIgeT12W2JdLEM9aGkoeSk7aWYobnVsbD09Qz92b2lkIDA6Qy50ZXN0KGMpKXtwPSEwO3ZhciB3PW0uc2NoZW1hLnBhdHRlcm5Qcm9wZXJ0aWVzW3ldO3RoaXMuYWRkU2NoZW1hVmFsdWVDb21wbGV0aW9ucyh3LGgsbyxhKX19aWYobS5zY2hlbWEuYWRkaXRpb25hbFByb3BlcnRpZXMmJiFwKXt3PW0uc2NoZW1hLmFkZGl0aW9uYWxQcm9wZXJ0aWVzO3RoaXMuYWRkU2NoZW1hVmFsdWVDb21wbGV0aW9ucyh3LGgsbyxhKX19fX0iJHNjaGVtYSIhPT1jfHxuLnBhcmVudHx8dGhpcy5hZGREb2xsYXJTY2hlbWFDb21wbGV0aW9ucyhoLG8pLGEuYm9vbGVhbiYmKHRoaXMuYWRkQm9vbGVhblZhbHVlQ29tcGxldGlvbighMCxoLG8pLHRoaXMuYWRkQm9vbGVhblZhbHVlQ29tcGxldGlvbighMSxoLG8pKSxhLm51bGwmJnRoaXMuYWRkTnVsbFZhbHVlQ29tcGxldGlvbihoLG8pfX1lbHNlIHRoaXMuYWRkU2NoZW1hVmFsdWVDb21wbGV0aW9ucyhlLnNjaGVtYSwiIixvLGEpfSxlLnByb3RvdHlwZS5nZXRDb250cmlidXRlZFZhbHVlQ29tcGxldGlvbnM9ZnVuY3Rpb24oZSx0LG4scixpLG8pe2lmKHQpe2lmKCJzdHJpbmciIT09dC50eXBlJiYibnVtYmVyIiE9PXQudHlwZSYmImJvb2xlYW4iIT09dC50eXBlJiYibnVsbCIhPT10LnR5cGV8fCh0PXQucGFyZW50KSx0JiYicHJvcGVydHkiPT09dC50eXBlJiZuPih0LmNvbG9uT2Zmc2V0fHwwKSl7dmFyIGE9dC5rZXlOb2RlLnZhbHVlLHM9dC52YWx1ZU5vZGU7aWYoKCFzfHxuPD1zLm9mZnNldCtzLmxlbmd0aCkmJnQucGFyZW50KXt2YXIgYz16byh0LnBhcmVudCk7dGhpcy5jb250cmlidXRpb25zLmZvckVhY2goKGZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sbGVjdFZhbHVlQ29tcGxldGlvbnMoci51cmksYyxhLGkpO3QmJm8ucHVzaCh0KX0pKX19fWVsc2UgdGhpcy5jb250cmlidXRpb25zLmZvckVhY2goKGZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sbGVjdERlZmF1bHRDb21wbGV0aW9ucyhyLnVyaSxpKTt0JiZvLnB1c2godCl9KSl9LGUucHJvdG90eXBlLmFkZFNjaGVtYVZhbHVlQ29tcGxldGlvbnM9ZnVuY3Rpb24oZSx0LG4scil7dmFyIGk9dGhpczsib2JqZWN0Ij09dHlwZW9mIGUmJih0aGlzLmFkZEVudW1WYWx1ZUNvbXBsZXRpb25zKGUsdCxuKSx0aGlzLmFkZERlZmF1bHRWYWx1ZUNvbXBsZXRpb25zKGUsdCxuKSx0aGlzLmNvbGxlY3RUeXBlcyhlLHIpLEFycmF5LmlzQXJyYXkoZS5hbGxPZikmJmUuYWxsT2YuZm9yRWFjaCgoZnVuY3Rpb24oZSl7cmV0dXJuIGkuYWRkU2NoZW1hVmFsdWVDb21wbGV0aW9ucyhlLHQsbixyKX0pKSxBcnJheS5pc0FycmF5KGUuYW55T2YpJiZlLmFueU9mLmZvckVhY2goKGZ1bmN0aW9uKGUpe3JldHVybiBpLmFkZFNjaGVtYVZhbHVlQ29tcGxldGlvbnMoZSx0LG4scil9KSksQXJyYXkuaXNBcnJheShlLm9uZU9mKSYmZS5vbmVPZi5mb3JFYWNoKChmdW5jdGlvbihlKXtyZXR1cm4gaS5hZGRTY2hlbWFWYWx1ZUNvbXBsZXRpb25zKGUsdCxuLHIpfSkpKX0sZS5wcm90b3R5cGUuYWRkRGVmYXVsdFZhbHVlQ29tcGxldGlvbnM9ZnVuY3Rpb24oZSx0LG4scil7dmFyIGk9dGhpczt2b2lkIDA9PT1yJiYocj0wKTt2YXIgbz0hMTtpZihjaShlLmRlZmF1bHQpKXtmb3IodmFyIGE9ZS50eXBlLHM9ZS5kZWZhdWx0LGM9cjtjPjA7Yy0tKXM9W3NdLGE9ImFycmF5IjtuLmFkZCh7a2luZDp0aGlzLmdldFN1Z2dlc3Rpb25LaW5kKGEpLGxhYmVsOnRoaXMuZ2V0TGFiZWxGb3JWYWx1ZShzKSxpbnNlcnRUZXh0OnRoaXMuZ2V0SW5zZXJ0VGV4dEZvclZhbHVlKHMsdCksaW5zZXJ0VGV4dEZvcm1hdDpFaS5TbmlwcGV0LGRldGFpbDpRbygianNvbi5zdWdnZXN0LmRlZmF1bHQiLCJEZWZhdWx0IHZhbHVlIil9KSxvPSEwfUFycmF5LmlzQXJyYXkoZS5leGFtcGxlcykmJmUuZXhhbXBsZXMuZm9yRWFjaCgoZnVuY3Rpb24oYSl7Zm9yKHZhciBzPWUudHlwZSxjPWEsbD1yO2w+MDtsLS0pYz1bY10scz0iYXJyYXkiO24uYWRkKHtraW5kOmkuZ2V0U3VnZ2VzdGlvbktpbmQocyksbGFiZWw6aS5nZXRMYWJlbEZvclZhbHVlKGMpLGluc2VydFRleHQ6aS5nZXRJbnNlcnRUZXh0Rm9yVmFsdWUoYyx0KSxpbnNlcnRUZXh0Rm9ybWF0OkVpLlNuaXBwZXR9KSxvPSEwfSkpLEFycmF5LmlzQXJyYXkoZS5kZWZhdWx0U25pcHBldHMpJiZlLmRlZmF1bHRTbmlwcGV0cy5mb3JFYWNoKChmdW5jdGlvbihhKXt2YXIgcyxjLGw9ZS50eXBlLHU9YS5ib2R5LGg9YS5sYWJlbDtpZihjaSh1KSl7ZS50eXBlO2Zvcih2YXIgZj1yO2Y+MDtmLS0pdT1bdV07cz1pLmdldEluc2VydFRleHRGb3JTbmlwcGV0VmFsdWUodSx0KSxjPWkuZ2V0RmlsdGVyVGV4dEZvclNuaXBwZXRWYWx1ZSh1KSxoPWh8fGkuZ2V0TGFiZWxGb3JTbmlwcGV0VmFsdWUodSl9ZWxzZXtpZigic3RyaW5nIiE9dHlwZW9mIGEuYm9keVRleHQpcmV0dXJuO3ZhciBkPSIiLG09IiIsZz0iIjtmb3IoZj1yO2Y+MDtmLS0pZD1kK2crIltcbiIsbT1tKyJcbiIrZysiXSIsZys9Ilx0IixsPSJhcnJheSI7cz1kK2crYS5ib2R5VGV4dC5zcGxpdCgiXG4iKS5qb2luKCJcbiIrZykrbSt0LGg9aHx8cyxjPXMucmVwbGFjZSgvW1xuXS9nLCIiKX1uLmFkZCh7a2luZDppLmdldFN1Z2dlc3Rpb25LaW5kKGwpLGxhYmVsOmgsZG9jdW1lbnRhdGlvbjppLmZyb21NYXJrdXAoYS5tYXJrZG93bkRlc2NyaXB0aW9uKXx8YS5kZXNjcmlwdGlvbixpbnNlcnRUZXh0OnMsaW5zZXJ0VGV4dEZvcm1hdDpFaS5TbmlwcGV0LGZpbHRlclRleHQ6Y30pLG89ITB9KSksIW8mJiJvYmplY3QiPT10eXBlb2YgZS5pdGVtcyYmIUFycmF5LmlzQXJyYXkoZS5pdGVtcykmJnI8NSYmdGhpcy5hZGREZWZhdWx0VmFsdWVDb21wbGV0aW9ucyhlLml0ZW1zLHQsbixyKzEpfSxlLnByb3RvdHlwZS5hZGRFbnVtVmFsdWVDb21wbGV0aW9ucz1mdW5jdGlvbihlLHQsbil7aWYoY2koZS5jb25zdCkmJm4uYWRkKHtraW5kOnRoaXMuZ2V0U3VnZ2VzdGlvbktpbmQoZS50eXBlKSxsYWJlbDp0aGlzLmdldExhYmVsRm9yVmFsdWUoZS5jb25zdCksaW5zZXJ0VGV4dDp0aGlzLmdldEluc2VydFRleHRGb3JWYWx1ZShlLmNvbnN0LHQpLGluc2VydFRleHRGb3JtYXQ6RWkuU25pcHBldCxkb2N1bWVudGF0aW9uOnRoaXMuZnJvbU1hcmt1cChlLm1hcmtkb3duRGVzY3JpcHRpb24pfHxlLmRlc2NyaXB0aW9ufSksQXJyYXkuaXNBcnJheShlLmVudW0pKWZvcih2YXIgcj0wLGk9ZS5lbnVtLmxlbmd0aDtyPGk7cisrKXt2YXIgbz1lLmVudW1bcl0sYT10aGlzLmZyb21NYXJrdXAoZS5tYXJrZG93bkRlc2NyaXB0aW9uKXx8ZS5kZXNjcmlwdGlvbjtlLm1hcmtkb3duRW51bURlc2NyaXB0aW9ucyYmcjxlLm1hcmtkb3duRW51bURlc2NyaXB0aW9ucy5sZW5ndGgmJnRoaXMuZG9lc1N1cHBvcnRNYXJrZG93bigpP2E9dGhpcy5mcm9tTWFya3VwKGUubWFya2Rvd25FbnVtRGVzY3JpcHRpb25zW3JdKTplLmVudW1EZXNjcmlwdGlvbnMmJnI8ZS5lbnVtRGVzY3JpcHRpb25zLmxlbmd0aCYmKGE9ZS5lbnVtRGVzY3JpcHRpb25zW3JdKSxuLmFkZCh7a2luZDp0aGlzLmdldFN1Z2dlc3Rpb25LaW5kKGUudHlwZSksbGFiZWw6dGhpcy5nZXRMYWJlbEZvclZhbHVlKG8pLGluc2VydFRleHQ6dGhpcy5nZXRJbnNlcnRUZXh0Rm9yVmFsdWUobyx0KSxpbnNlcnRUZXh0Rm9ybWF0OkVpLlNuaXBwZXQsZG9jdW1lbnRhdGlvbjphfSl9fSxlLnByb3RvdHlwZS5jb2xsZWN0VHlwZXM9ZnVuY3Rpb24oZSx0KXtpZighQXJyYXkuaXNBcnJheShlLmVudW0pJiYhY2koZS5jb25zdCkpe3ZhciBuPWUudHlwZTtBcnJheS5pc0FycmF5KG4pP24uZm9yRWFjaCgoZnVuY3Rpb24oZSl7cmV0dXJuIHRbZV09ITB9KSk6biYmKHRbbl09ITApfX0sZS5wcm90b3R5cGUuYWRkRmlsbGVyVmFsdWVDb21wbGV0aW9ucz1mdW5jdGlvbihlLHQsbil7ZS5vYmplY3QmJm4uYWRkKHtraW5kOnRoaXMuZ2V0U3VnZ2VzdGlvbktpbmQoIm9iamVjdCIpLGxhYmVsOiJ7fSIsaW5zZXJ0VGV4dDp0aGlzLmdldEluc2VydFRleHRGb3JHdWVzc2VkVmFsdWUoe30sdCksaW5zZXJ0VGV4dEZvcm1hdDpFaS5TbmlwcGV0LGRldGFpbDpRbygiZGVmYXVsdHMub2JqZWN0IiwiTmV3IG9iamVjdCIpLGRvY3VtZW50YXRpb246IiJ9KSxlLmFycmF5JiZuLmFkZCh7a2luZDp0aGlzLmdldFN1Z2dlc3Rpb25LaW5kKCJhcnJheSIpLGxhYmVsOiJbXSIsaW5zZXJ0VGV4dDp0aGlzLmdldEluc2VydFRleHRGb3JHdWVzc2VkVmFsdWUoW10sdCksaW5zZXJ0VGV4dEZvcm1hdDpFaS5TbmlwcGV0LGRldGFpbDpRbygiZGVmYXVsdHMuYXJyYXkiLCJOZXcgYXJyYXkiKSxkb2N1bWVudGF0aW9uOiIifSl9LGUucHJvdG90eXBlLmFkZEJvb2xlYW5WYWx1ZUNvbXBsZXRpb249ZnVuY3Rpb24oZSx0LG4pe24uYWRkKHtraW5kOnRoaXMuZ2V0U3VnZ2VzdGlvbktpbmQoImJvb2xlYW4iKSxsYWJlbDplPyJ0cnVlIjoiZmFsc2UiLGluc2VydFRleHQ6dGhpcy5nZXRJbnNlcnRUZXh0Rm9yVmFsdWUoZSx0KSxpbnNlcnRUZXh0Rm9ybWF0OkVpLlNuaXBwZXQsZG9jdW1lbnRhdGlvbjoiIn0pfSxlLnByb3RvdHlwZS5hZGROdWxsVmFsdWVDb21wbGV0aW9uPWZ1bmN0aW9uKGUsdCl7dC5hZGQoe2tpbmQ6dGhpcy5nZXRTdWdnZXN0aW9uS2luZCgibnVsbCIpLGxhYmVsOiJudWxsIixpbnNlcnRUZXh0OiJudWxsIitlLGluc2VydFRleHRGb3JtYXQ6RWkuU25pcHBldCxkb2N1bWVudGF0aW9uOiIifSl9LGUucHJvdG90eXBlLmFkZERvbGxhclNjaGVtYUNvbXBsZXRpb25zPWZ1bmN0aW9uKGUsdCl7dmFyIG49dGhpcyxyPXRoaXMuc2NoZW1hU2VydmljZS5nZXRSZWdpc3RlcmVkU2NoZW1hSWRzKChmdW5jdGlvbihlKXtyZXR1cm4iaHR0cCI9PT1lfHwiaHR0cHMiPT09ZX0pKTtyLmZvckVhY2goKGZ1bmN0aW9uKHIpe3JldHVybiB0LmFkZCh7a2luZDpTaS5Nb2R1bGUsbGFiZWw6bi5nZXRMYWJlbEZvclZhbHVlKHIpLGZpbHRlclRleHQ6bi5nZXRGaWx0ZXJUZXh0Rm9yVmFsdWUociksaW5zZXJ0VGV4dDpuLmdldEluc2VydFRleHRGb3JWYWx1ZShyLGUpLGluc2VydFRleHRGb3JtYXQ6RWkuU25pcHBldCxkb2N1bWVudGF0aW9uOiIifSl9KSl9LGUucHJvdG90eXBlLmdldExhYmVsRm9yVmFsdWU9ZnVuY3Rpb24oZSl7cmV0dXJuIEpTT04uc3RyaW5naWZ5KGUpfSxlLnByb3RvdHlwZS5nZXRGaWx0ZXJUZXh0Rm9yVmFsdWU9ZnVuY3Rpb24oZSl7cmV0dXJuIEpTT04uc3RyaW5naWZ5KGUpfSxlLnByb3RvdHlwZS5nZXRGaWx0ZXJUZXh0Rm9yU25pcHBldFZhbHVlPWZ1bmN0aW9uKGUpe3JldHVybiBKU09OLnN0cmluZ2lmeShlKS5yZXBsYWNlKC9cJFx7XGQrOihbXn1dKylcfXxcJFxkKy9nLCIkMSIpfSxlLnByb3RvdHlwZS5nZXRMYWJlbEZvclNuaXBwZXRWYWx1ZT1mdW5jdGlvbihlKXtyZXR1cm4gSlNPTi5zdHJpbmdpZnkoZSkucmVwbGFjZSgvXCRce1xkKzooW159XSspXH18XCRcZCsvZywiJDEiKX0sZS5wcm90b3R5cGUuZ2V0SW5zZXJ0VGV4dEZvclBsYWluVGV4dD1mdW5jdGlvbihlKXtyZXR1cm4gZS5yZXBsYWNlKC9bXFxcJFx9XS9nLCJcXCQmIil9LGUucHJvdG90eXBlLmdldEluc2VydFRleHRGb3JWYWx1ZT1mdW5jdGlvbihlLHQpe3ZhciBuPUpTT04uc3RyaW5naWZ5KGUsbnVsbCwiXHQiKTtyZXR1cm4ie30iPT09bj8ieyQxfSIrdDoiW10iPT09bj8iWyQxXSIrdDp0aGlzLmdldEluc2VydFRleHRGb3JQbGFpblRleHQobit0KX0sZS5wcm90b3R5cGUuZ2V0SW5zZXJ0VGV4dEZvclNuaXBwZXRWYWx1ZT1mdW5jdGlvbihlLHQpe3JldHVybiBZbyhlLCIiLChmdW5jdGlvbihlKXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIGUmJiJeIj09PWVbMF0/ZS5zdWJzdHIoMSk6SlNPTi5zdHJpbmdpZnkoZSl9KSkrdH0sZS5wcm90b3R5cGUuZ2V0SW5zZXJ0VGV4dEZvckd1ZXNzZWRWYWx1ZT1mdW5jdGlvbihlLHQpe3N3aXRjaCh0eXBlb2YgZSl7Y2FzZSJvYmplY3QiOnJldHVybiBudWxsPT09ZT8iJHsxOm51bGx9Iit0OnRoaXMuZ2V0SW5zZXJ0VGV4dEZvclZhbHVlKGUsdCk7Y2FzZSJzdHJpbmciOnZhciBuPUpTT04uc3RyaW5naWZ5KGUpO3JldHVybiBuPW4uc3Vic3RyKDEsbi5sZW5ndGgtMiksJyIkezE6Jysobj10aGlzLmdldEluc2VydFRleHRGb3JQbGFpblRleHQobikpKyd9IicrdDtjYXNlIm51bWJlciI6Y2FzZSJib29sZWFuIjpyZXR1cm4iJHsxOiIrSlNPTi5zdHJpbmdpZnkoZSkrIn0iK3R9cmV0dXJuIHRoaXMuZ2V0SW5zZXJ0VGV4dEZvclZhbHVlKGUsdCl9LGUucHJvdG90eXBlLmdldFN1Z2dlc3Rpb25LaW5kPWZ1bmN0aW9uKGUpe2lmKEFycmF5LmlzQXJyYXkoZSkpe3ZhciB0PWU7ZT10Lmxlbmd0aD4wP3RbMF06dm9pZCAwfWlmKCFlKXJldHVybiBTaS5WYWx1ZTtzd2l0Y2goZSl7Y2FzZSJzdHJpbmciOmRlZmF1bHQ6cmV0dXJuIFNpLlZhbHVlO2Nhc2Uib2JqZWN0IjpyZXR1cm4gU2kuTW9kdWxlO2Nhc2UicHJvcGVydHkiOnJldHVybiBTaS5Qcm9wZXJ0eX19LGUucHJvdG90eXBlLmdldExhYmVsVGV4dEZvck1hdGNoaW5nTm9kZT1mdW5jdGlvbihlLHQpe3N3aXRjaChlLnR5cGUpe2Nhc2UiYXJyYXkiOnJldHVybiJbXSI7Y2FzZSJvYmplY3QiOnJldHVybiJ7fSI7ZGVmYXVsdDpyZXR1cm4gdC5nZXRUZXh0KCkuc3Vic3RyKGUub2Zmc2V0LGUubGVuZ3RoKX19LGUucHJvdG90eXBlLmdldEluc2VydFRleHRGb3JNYXRjaGluZ05vZGU9ZnVuY3Rpb24oZSx0LG4pe3N3aXRjaChlLnR5cGUpe2Nhc2UiYXJyYXkiOnJldHVybiB0aGlzLmdldEluc2VydFRleHRGb3JWYWx1ZShbXSxuKTtjYXNlIm9iamVjdCI6cmV0dXJuIHRoaXMuZ2V0SW5zZXJ0VGV4dEZvclZhbHVlKHt9LG4pO2RlZmF1bHQ6dmFyIHI9dC5nZXRUZXh0KCkuc3Vic3RyKGUub2Zmc2V0LGUubGVuZ3RoKStuO3JldHVybiB0aGlzLmdldEluc2VydFRleHRGb3JQbGFpblRleHQocil9fSxlLnByb3RvdHlwZS5nZXRJbnNlcnRUZXh0Rm9yUHJvcGVydHk9ZnVuY3Rpb24oZSx0LG4scil7dmFyIGk9dGhpcy5nZXRJbnNlcnRUZXh0Rm9yVmFsdWUoZSwiIik7aWYoIW4pcmV0dXJuIGk7dmFyIG8sYT1pKyI6ICIscz0wO2lmKHQpe2lmKEFycmF5LmlzQXJyYXkodC5kZWZhdWx0U25pcHBldHMpKXtpZigxPT09dC5kZWZhdWx0U25pcHBldHMubGVuZ3RoKXt2YXIgYz10LmRlZmF1bHRTbmlwcGV0c1swXS5ib2R5O2NpKGMpJiYobz10aGlzLmdldEluc2VydFRleHRGb3JTbmlwcGV0VmFsdWUoYywiIikpfXMrPXQuZGVmYXVsdFNuaXBwZXRzLmxlbmd0aH1pZih0LmVudW0mJihvfHwxIT09dC5lbnVtLmxlbmd0aHx8KG89dGhpcy5nZXRJbnNlcnRUZXh0Rm9yR3Vlc3NlZFZhbHVlKHQuZW51bVswXSwiIikpLHMrPXQuZW51bS5sZW5ndGgpLGNpKHQuZGVmYXVsdCkmJihvfHwobz10aGlzLmdldEluc2VydFRleHRGb3JHdWVzc2VkVmFsdWUodC5kZWZhdWx0LCIiKSkscysrKSxBcnJheS5pc0FycmF5KHQuZXhhbXBsZXMpJiZ0LmV4YW1wbGVzLmxlbmd0aCYmKG98fChvPXRoaXMuZ2V0SW5zZXJ0VGV4dEZvckd1ZXNzZWRWYWx1ZSh0LmV4YW1wbGVzWzBdLCIiKSkscys9dC5leGFtcGxlcy5sZW5ndGgpLDA9PT1zKXt2YXIgbD1BcnJheS5pc0FycmF5KHQudHlwZSk/dC50eXBlWzBdOnQudHlwZTtzd2l0Y2gobHx8KHQucHJvcGVydGllcz9sPSJvYmplY3QiOnQuaXRlbXMmJihsPSJhcnJheSIpKSxsKXtjYXNlImJvb2xlYW4iOm89IiQxIjticmVhaztjYXNlInN0cmluZyI6bz0nIiQxIic7YnJlYWs7Y2FzZSJvYmplY3QiOm89InskMX0iO2JyZWFrO2Nhc2UiYXJyYXkiOm89IlskMV0iO2JyZWFrO2Nhc2UibnVtYmVyIjpjYXNlImludGVnZXIiOm89IiR7MTowfSI7YnJlYWs7Y2FzZSJudWxsIjpvPSIkezE6bnVsbH0iO2JyZWFrO2RlZmF1bHQ6cmV0dXJuIGl9fX1yZXR1cm4oIW98fHM+MSkmJihvPSIkMSIpLGErbytyfSxlLnByb3RvdHlwZS5nZXRDdXJyZW50V29yZD1mdW5jdGlvbihlLHQpe2Zvcih2YXIgbj10LTEscj1lLmdldFRleHQoKTtuPj0wJiYtMT09PScgXHRcblxyXHYiOntbLF19Jy5pbmRleE9mKHIuY2hhckF0KG4pKTspbi0tO3JldHVybiByLnN1YnN0cmluZyhuKzEsdCl9LGUucHJvdG90eXBlLmV2YWx1YXRlU2VwYXJhdG9yQWZ0ZXI9ZnVuY3Rpb24oZSx0KXt2YXIgbj10aShlLmdldFRleHQoKSwhMCk7c3dpdGNoKG4uc2V0UG9zaXRpb24odCksbi5zY2FuKCkpe2Nhc2UgNTpjYXNlIDI6Y2FzZSA0OmNhc2UgMTc6cmV0dXJuIiI7ZGVmYXVsdDpyZXR1cm4iLCJ9fSxlLnByb3RvdHlwZS5maW5kSXRlbUF0T2Zmc2V0PWZ1bmN0aW9uKGUsdCxuKXtmb3IodmFyIHI9dGkodC5nZXRUZXh0KCksITApLGk9ZS5pdGVtcyxvPWkubGVuZ3RoLTE7bz49MDtvLS0pe3ZhciBhPWlbb107aWYobj5hLm9mZnNldCthLmxlbmd0aClyZXR1cm4gci5zZXRQb3NpdGlvbihhLm9mZnNldCthLmxlbmd0aCksNT09PXIuc2NhbigpJiZuPj1yLmdldFRva2VuT2Zmc2V0KCkrci5nZXRUb2tlbkxlbmd0aCgpP28rMTpvO2lmKG4+PWEub2Zmc2V0KXJldHVybiBvfXJldHVybiAwfSxlLnByb3RvdHlwZS5pc0luQ29tbWVudD1mdW5jdGlvbihlLHQsbil7dmFyIHI9dGkoZS5nZXRUZXh0KCksITEpO3Iuc2V0UG9zaXRpb24odCk7Zm9yKHZhciBpPXIuc2NhbigpOzE3IT09aSYmci5nZXRUb2tlbk9mZnNldCgpK3IuZ2V0VG9rZW5MZW5ndGgoKTxuOylpPXIuc2NhbigpO3JldHVybigxMj09PWl8fDEzPT09aSkmJnIuZ2V0VG9rZW5PZmZzZXQoKTw9bn0sZS5wcm90b3R5cGUuZnJvbU1hcmt1cD1mdW5jdGlvbihlKXtpZihlJiZ0aGlzLmRvZXNTdXBwb3J0TWFya2Rvd24oKSlyZXR1cm57a2luZDpDaS5NYXJrZG93bix2YWx1ZTplfX0sZS5wcm90b3R5cGUuZG9lc1N1cHBvcnRNYXJrZG93bj1mdW5jdGlvbigpe2lmKCFjaSh0aGlzLnN1cHBvcnRzTWFya2Rvd24pKXt2YXIgZT10aGlzLmNsaWVudENhcGFiaWxpdGllcy50ZXh0RG9jdW1lbnQmJnRoaXMuY2xpZW50Q2FwYWJpbGl0aWVzLnRleHREb2N1bWVudC5jb21wbGV0aW9uO3RoaXMuc3VwcG9ydHNNYXJrZG93bj1lJiZlLmNvbXBsZXRpb25JdGVtJiZBcnJheS5pc0FycmF5KGUuY29tcGxldGlvbkl0ZW0uZG9jdW1lbnRhdGlvbkZvcm1hdCkmJi0xIT09ZS5jb21wbGV0aW9uSXRlbS5kb2N1bWVudGF0aW9uRm9ybWF0LmluZGV4T2YoQ2kuTWFya2Rvd24pfXJldHVybiB0aGlzLnN1cHBvcnRzTWFya2Rvd259LGUucHJvdG90eXBlLmRvZXNTdXBwb3J0c0NvbW1pdENoYXJhY3RlcnM9ZnVuY3Rpb24oKXtpZighY2kodGhpcy5zdXBwb3J0c0NvbW1pdENoYXJhY3RlcnMpKXt2YXIgZT10aGlzLmNsaWVudENhcGFiaWxpdGllcy50ZXh0RG9jdW1lbnQmJnRoaXMuY2xpZW50Q2FwYWJpbGl0aWVzLnRleHREb2N1bWVudC5jb21wbGV0aW9uO3RoaXMuc3VwcG9ydHNDb21taXRDaGFyYWN0ZXJzPWUmJmUuY29tcGxldGlvbkl0ZW0mJiEhZS5jb21wbGV0aW9uSXRlbS5jb21taXRDaGFyYWN0ZXJzU3VwcG9ydH1yZXR1cm4gdGhpcy5zdXBwb3J0c0NvbW1pdENoYXJhY3RlcnN9LGV9KCksdGE9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsdCxuKXt2b2lkIDA9PT10JiYodD1bXSksdGhpcy5zY2hlbWFTZXJ2aWNlPWUsdGhpcy5jb250cmlidXRpb25zPXQsdGhpcy5wcm9taXNlPW58fFByb21pc2V9cmV0dXJuIGUucHJvdG90eXBlLmRvSG92ZXI9ZnVuY3Rpb24oZSx0LG4pe3ZhciByPWUub2Zmc2V0QXQodCksaT1uLmdldE5vZGVGcm9tT2Zmc2V0KHIpO2lmKCFpfHwoIm9iamVjdCI9PT1pLnR5cGV8fCJhcnJheSI9PT1pLnR5cGUpJiZyPmkub2Zmc2V0KzEmJnI8aS5vZmZzZXQraS5sZW5ndGgtMSlyZXR1cm4gdGhpcy5wcm9taXNlLnJlc29sdmUobnVsbCk7dmFyIG89aTtpZigic3RyaW5nIj09PWkudHlwZSl7dmFyIGE9aS5wYXJlbnQ7aWYoYSYmInByb3BlcnR5Ij09PWEudHlwZSYmYS5rZXlOb2RlPT09aSYmIShpPWEudmFsdWVOb2RlKSlyZXR1cm4gdGhpcy5wcm9taXNlLnJlc29sdmUobnVsbCl9Zm9yKHZhciBzPWZyLmNyZWF0ZShlLnBvc2l0aW9uQXQoby5vZmZzZXQpLGUucG9zaXRpb25BdChvLm9mZnNldCtvLmxlbmd0aCkpLGM9ZnVuY3Rpb24oZSl7cmV0dXJue2NvbnRlbnRzOmUscmFuZ2U6c319LGw9em8oaSksdT10aGlzLmNvbnRyaWJ1dGlvbnMubGVuZ3RoLTE7dT49MDt1LS0pe3ZhciBoPXRoaXMuY29udHJpYnV0aW9uc1t1XS5nZXRJbmZvQ29udHJpYnV0aW9uKGUudXJpLGwpO2lmKGgpcmV0dXJuIGgudGhlbigoZnVuY3Rpb24oZSl7cmV0dXJuIGMoZSl9KSl9cmV0dXJuIHRoaXMuc2NoZW1hU2VydmljZS5nZXRTY2hlbWFGb3JSZXNvdXJjZShlLnVyaSxuKS50aGVuKChmdW5jdGlvbihlKXtpZihlJiZpKXt2YXIgdD1uLmdldE1hdGNoaW5nU2NoZW1hcyhlLnNjaGVtYSxpLm9mZnNldCkscj12b2lkIDAsbz12b2lkIDAsYT12b2lkIDAscz12b2lkIDA7dC5ldmVyeSgoZnVuY3Rpb24oZSl7aWYoZS5ub2RlPT09aSYmIWUuaW52ZXJ0ZWQmJmUuc2NoZW1hJiYocj1yfHxlLnNjaGVtYS50aXRsZSxvPW98fGUuc2NoZW1hLm1hcmtkb3duRGVzY3JpcHRpb258fG5hKGUuc2NoZW1hLmRlc2NyaXB0aW9uKSxlLnNjaGVtYS5lbnVtKSl7dmFyIHQ9ZS5zY2hlbWEuZW51bS5pbmRleE9mKEhvKGkpKTtlLnNjaGVtYS5tYXJrZG93bkVudW1EZXNjcmlwdGlvbnM/YT1lLnNjaGVtYS5tYXJrZG93bkVudW1EZXNjcmlwdGlvbnNbdF06ZS5zY2hlbWEuZW51bURlc2NyaXB0aW9ucyYmKGE9bmEoZS5zY2hlbWEuZW51bURlc2NyaXB0aW9uc1t0XSkpLGEmJiJzdHJpbmciIT10eXBlb2Yocz1lLnNjaGVtYS5lbnVtW3RdKSYmKHM9SlNPTi5zdHJpbmdpZnkocykpfXJldHVybiEwfSkpO3ZhciBsPSIiO3JldHVybiByJiYobD1uYShyKSksbyYmKGwubGVuZ3RoPjAmJihsKz0iXG5cbiIpLGwrPW8pLGEmJihsLmxlbmd0aD4wJiYobCs9IlxuXG4iKSxsKz0iYCIuY29uY2F0KGZ1bmN0aW9uKGUpe2lmKC0xIT09ZS5pbmRleE9mKCJgIikpcmV0dXJuImBgICIrZSsiIGBgIjtyZXR1cm4gZX0ocyksImA6ICIpLmNvbmNhdChhKSksYyhbbF0pfXJldHVybiBudWxsfSkpfSxlfSgpO2Z1bmN0aW9uIG5hKGUpe2lmKGUpcmV0dXJuIGUucmVwbGFjZSgvKFteXG5ccl0pKFxyP1xuKShbXlxuXHJdKS9nbSwiJDFcblxuJDMiKS5yZXBsYWNlKC9bXFxgKl97fVtcXSgpIytcLS4hXS9nLCJcXCQmIil9dmFyIHJhPU5vKCksaWE9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsdCl7dGhpcy5qc29uU2NoZW1hU2VydmljZT1lLHRoaXMucHJvbWlzZT10LHRoaXMudmFsaWRhdGlvbkVuYWJsZWQ9ITB9cmV0dXJuIGUucHJvdG90eXBlLmNvbmZpZ3VyZT1mdW5jdGlvbihlKXtlJiYodGhpcy52YWxpZGF0aW9uRW5hYmxlZD0hMSE9PWUudmFsaWRhdGUsdGhpcy5jb21tZW50U2V2ZXJpdHk9ZS5hbGxvd0NvbW1lbnRzP3ZvaWQgMDpUci5FcnJvcil9LGUucHJvdG90eXBlLmRvVmFsaWRhdGlvbj1mdW5jdGlvbihlLHQsbixyKXt2YXIgaT10aGlzO2lmKCF0aGlzLnZhbGlkYXRpb25FbmFibGVkKXJldHVybiB0aGlzLnByb21pc2UucmVzb2x2ZShbXSk7dmFyIG89W10sYT17fSxzPWZ1bmN0aW9uKGUpe3ZhciB0PWUucmFuZ2Uuc3RhcnQubGluZSsiICIrZS5yYW5nZS5zdGFydC5jaGFyYWN0ZXIrIiAiK2UubWVzc2FnZTthW3RdfHwoYVt0XT0hMCxvLnB1c2goZSkpfSxjPWZ1bmN0aW9uKHIpe3ZhciBhPShudWxsPT1uP3ZvaWQgMDpuLnRyYWlsaW5nQ29tbWFzKT9jYShuLnRyYWlsaW5nQ29tbWFzKTpUci5FcnJvcixjPShudWxsPT1uP3ZvaWQgMDpuLmNvbW1lbnRzKT9jYShuLmNvbW1lbnRzKTppLmNvbW1lbnRTZXZlcml0eSxsPShudWxsPT1uP3ZvaWQgMDpuLnNjaGVtYVZhbGlkYXRpb24pP2NhKG4uc2NoZW1hVmFsaWRhdGlvbik6VHIuV2FybmluZyx1PShudWxsPT1uP3ZvaWQgMDpuLnNjaGVtYVJlcXVlc3QpP2NhKG4uc2NoZW1hUmVxdWVzdCk6VHIuV2FybmluZztpZihyKXtpZihyLmVycm9ycy5sZW5ndGgmJnQucm9vdCYmdSl7dmFyIGg9dC5yb290LGY9Im9iamVjdCI9PT1oLnR5cGU/aC5wcm9wZXJ0aWVzWzBdOnZvaWQgMDtpZihmJiYiJHNjaGVtYSI9PT1mLmtleU5vZGUudmFsdWUpe3ZhciBkPWYudmFsdWVOb2RlfHxmLG09ZnIuY3JlYXRlKGUucG9zaXRpb25BdChkLm9mZnNldCksZS5wb3NpdGlvbkF0KGQub2Zmc2V0K2QubGVuZ3RoKSk7cyhSci5jcmVhdGUobSxyLmVycm9yc1swXSx1LHZvLlNjaGVtYVJlc29sdmVFcnJvcikpfWVsc2V7bT1mci5jcmVhdGUoZS5wb3NpdGlvbkF0KGgub2Zmc2V0KSxlLnBvc2l0aW9uQXQoaC5vZmZzZXQrMSkpO3MoUnIuY3JlYXRlKG0sci5lcnJvcnNbMF0sdSx2by5TY2hlbWFSZXNvbHZlRXJyb3IpKX19ZWxzZSBpZihsKXt2YXIgZz10LnZhbGlkYXRlKGUsci5zY2hlbWEsbCk7ZyYmZy5mb3JFYWNoKHMpfWFhKHIuc2NoZW1hKSYmKGM9dm9pZCAwKSxzYShyLnNjaGVtYSkmJihhPXZvaWQgMCl9Zm9yKHZhciBwPTAsYj10LnN5bnRheEVycm9ycztwPGIubGVuZ3RoO3ArKyl7dmFyIHY9YltwXTtpZih2LmNvZGU9PT12by5UcmFpbGluZ0NvbW1hKXtpZigibnVtYmVyIiE9dHlwZW9mIGEpY29udGludWU7di5zZXZlcml0eT1hfXModil9aWYoIm51bWJlciI9PXR5cGVvZiBjKXt2YXIgeT1yYSgiSW52YWxpZENvbW1lbnRUb2tlbiIsIkNvbW1lbnRzIGFyZSBub3QgcGVybWl0dGVkIGluIEpTT04uIik7dC5jb21tZW50cy5mb3JFYWNoKChmdW5jdGlvbihlKXtzKFJyLmNyZWF0ZShlLHksYyx2by5Db21tZW50Tm90UGVybWl0dGVkKSl9KSl9cmV0dXJuIG99O2lmKHIpe3ZhciBsPXIuaWR8fCJzY2hlbWFzZXJ2aWNlOi8vdW50aXRsZWQvIitvYSsrO3JldHVybiB0aGlzLmpzb25TY2hlbWFTZXJ2aWNlLnJlZ2lzdGVyRXh0ZXJuYWxTY2hlbWEobCxbXSxyKS5nZXRSZXNvbHZlZFNjaGVtYSgpLnRoZW4oKGZ1bmN0aW9uKGUpe3JldHVybiBjKGUpfSkpfXJldHVybiB0aGlzLmpzb25TY2hlbWFTZXJ2aWNlLmdldFNjaGVtYUZvclJlc291cmNlKGUudXJpLHQpLnRoZW4oKGZ1bmN0aW9uKGUpe3JldHVybiBjKGUpfSkpfSxlLnByb3RvdHlwZS5nZXRMYW5ndWFnZVN0YXR1cz1mdW5jdGlvbihlLHQpe3JldHVybntzY2hlbWFzOnRoaXMuanNvblNjaGVtYVNlcnZpY2UuZ2V0U2NoZW1hVVJJc0ZvclJlc291cmNlKGUudXJpLHQpfX0sZX0oKSxvYT0wO2Z1bmN0aW9uIGFhKGUpe2lmKGUmJiJvYmplY3QiPT10eXBlb2YgZSl7aWYobGkoZS5hbGxvd0NvbW1lbnRzKSlyZXR1cm4gZS5hbGxvd0NvbW1lbnRzO2lmKGUuYWxsT2YpZm9yKHZhciB0PTAsbj1lLmFsbE9mO3Q8bi5sZW5ndGg7dCsrKXt2YXIgcj1hYShuW3RdKTtpZihsaShyKSlyZXR1cm4gcn19fWZ1bmN0aW9uIHNhKGUpe2lmKGUmJiJvYmplY3QiPT10eXBlb2YgZSl7aWYobGkoZS5hbGxvd1RyYWlsaW5nQ29tbWFzKSlyZXR1cm4gZS5hbGxvd1RyYWlsaW5nQ29tbWFzO3ZhciB0PWU7aWYobGkodC5hbGxvd3NUcmFpbGluZ0NvbW1hcykpcmV0dXJuIHQuYWxsb3dzVHJhaWxpbmdDb21tYXM7aWYoZS5hbGxPZilmb3IodmFyIG49MCxyPWUuYWxsT2Y7bjxyLmxlbmd0aDtuKyspe3ZhciBpPXNhKHJbbl0pO2lmKGxpKGkpKXJldHVybiBpfX19ZnVuY3Rpb24gY2EoZSl7c3dpdGNoKGUpe2Nhc2UiZXJyb3IiOnJldHVybiBUci5FcnJvcjtjYXNlIndhcm5pbmciOnJldHVybiBUci5XYXJuaW5nO2Nhc2UiaWdub3JlIjpyZXR1cm59fWZ1bmN0aW9uIGxhKGUpe3JldHVybiBlPDQ4PzA6ZTw9NTc/ZS00ODooZTw5NyYmKGUrPTMyKSxlPj05NyYmZTw9MTAyP2UtOTcrMTA6MCl9ZnVuY3Rpb24gdWEoZSl7aWYoIiMiPT09ZVswXSlzd2l0Y2goZS5sZW5ndGgpe2Nhc2UgNDpyZXR1cm57cmVkOjE3KmxhKGUuY2hhckNvZGVBdCgxKSkvMjU1LGdyZWVuOjE3KmxhKGUuY2hhckNvZGVBdCgyKSkvMjU1LGJsdWU6MTcqbGEoZS5jaGFyQ29kZUF0KDMpKS8yNTUsYWxwaGE6MX07Y2FzZSA1OnJldHVybntyZWQ6MTcqbGEoZS5jaGFyQ29kZUF0KDEpKS8yNTUsZ3JlZW46MTcqbGEoZS5jaGFyQ29kZUF0KDIpKS8yNTUsYmx1ZToxNypsYShlLmNoYXJDb2RlQXQoMykpLzI1NSxhbHBoYToxNypsYShlLmNoYXJDb2RlQXQoNCkpLzI1NX07Y2FzZSA3OnJldHVybntyZWQ6KDE2KmxhKGUuY2hhckNvZGVBdCgxKSkrbGEoZS5jaGFyQ29kZUF0KDIpKSkvMjU1LGdyZWVuOigxNipsYShlLmNoYXJDb2RlQXQoMykpK2xhKGUuY2hhckNvZGVBdCg0KSkpLzI1NSxibHVlOigxNipsYShlLmNoYXJDb2RlQXQoNSkpK2xhKGUuY2hhckNvZGVBdCg2KSkpLzI1NSxhbHBoYToxfTtjYXNlIDk6cmV0dXJue3JlZDooMTYqbGEoZS5jaGFyQ29kZUF0KDEpKStsYShlLmNoYXJDb2RlQXQoMikpKS8yNTUsZ3JlZW46KDE2KmxhKGUuY2hhckNvZGVBdCgzKSkrbGEoZS5jaGFyQ29kZUF0KDQpKSkvMjU1LGJsdWU6KDE2KmxhKGUuY2hhckNvZGVBdCg1KSkrbGEoZS5jaGFyQ29kZUF0KDYpKSkvMjU1LGFscGhhOigxNipsYShlLmNoYXJDb2RlQXQoNykpK2xhKGUuY2hhckNvZGVBdCg4KSkpLzI1NX19fXZhciBoYT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSl7dGhpcy5zY2hlbWFTZXJ2aWNlPWV9cmV0dXJuIGUucHJvdG90eXBlLmZpbmREb2N1bWVudFN5bWJvbHM9ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXM7dm9pZCAwPT09biYmKG49e3Jlc3VsdExpbWl0Ok51bWJlci5NQVhfVkFMVUV9KTt2YXIgaT10LnJvb3Q7aWYoIWkpcmV0dXJuW107dmFyIG89bi5yZXN1bHRMaW1pdHx8TnVtYmVyLk1BWF9WQUxVRSxhPWUudXJpO2lmKCgidnNjb2RlOi8vZGVmYXVsdHNldHRpbmdzL2tleWJpbmRpbmdzLmpzb24iPT09YXx8dWkoYS50b0xvd2VyQ2FzZSgpLCIvdXNlci9rZXliaW5kaW5ncy5qc29uIikpJiYiYXJyYXkiPT09aS50eXBlKXtmb3IodmFyIHM9W10sYz0wLGw9aS5pdGVtcztjPGwubGVuZ3RoO2MrKyl7dmFyIHU9bFtjXTtpZigib2JqZWN0Ij09PXUudHlwZSlmb3IodmFyIGg9MCxmPXUucHJvcGVydGllcztoPGYubGVuZ3RoO2grKyl7dmFyIGQ9ZltoXTtpZigia2V5Ij09PWQua2V5Tm9kZS52YWx1ZSYmZC52YWx1ZU5vZGUpe3ZhciBtPW1yLmNyZWF0ZShlLnVyaSxmYShlLHUpKTtpZihzLnB1c2goe25hbWU6SG8oZC52YWx1ZU5vZGUpLGtpbmQ6QmkuRnVuY3Rpb24sbG9jYXRpb246bX0pLC0tbzw9MClyZXR1cm4gbiYmbi5vblJlc3VsdExpbWl0RXhjZWVkZWQmJm4ub25SZXN1bHRMaW1pdEV4Y2VlZGVkKGEpLHN9fX1yZXR1cm4gc31mb3IodmFyIGc9W3tub2RlOmksY29udGFpbmVyTmFtZToiIn1dLHA9MCxiPSExLHY9W10seT1mdW5jdGlvbih0LG4peyJhcnJheSI9PT10LnR5cGU/dC5pdGVtcy5mb3JFYWNoKChmdW5jdGlvbihlKXtlJiZnLnB1c2goe25vZGU6ZSxjb250YWluZXJOYW1lOm59KX0pKToib2JqZWN0Ij09PXQudHlwZSYmdC5wcm9wZXJ0aWVzLmZvckVhY2goKGZ1bmN0aW9uKHQpe3ZhciBpPXQudmFsdWVOb2RlO2lmKGkpaWYobz4wKXtvLS07dmFyIGE9bXIuY3JlYXRlKGUudXJpLGZhKGUsdCkpLHM9bj9uKyIuIit0LmtleU5vZGUudmFsdWU6dC5rZXlOb2RlLnZhbHVlO3YucHVzaCh7bmFtZTpyLmdldEtleUxhYmVsKHQpLGtpbmQ6ci5nZXRTeW1ib2xLaW5kKGkudHlwZSksbG9jYXRpb246YSxjb250YWluZXJOYW1lOm59KSxnLnB1c2goe25vZGU6aSxjb250YWluZXJOYW1lOnN9KX1lbHNlIGI9ITB9KSl9O3A8Zy5sZW5ndGg7KXt2YXIgQz1nW3ArK107eShDLm5vZGUsQy5jb250YWluZXJOYW1lKX1yZXR1cm4gYiYmbiYmbi5vblJlc3VsdExpbWl0RXhjZWVkZWQmJm4ub25SZXN1bHRMaW1pdEV4Y2VlZGVkKGEpLHZ9LGUucHJvdG90eXBlLmZpbmREb2N1bWVudFN5bWJvbHMyPWZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzO3ZvaWQgMD09PW4mJihuPXtyZXN1bHRMaW1pdDpOdW1iZXIuTUFYX1ZBTFVFfSk7dmFyIGk9dC5yb290O2lmKCFpKXJldHVybltdO3ZhciBvPW4ucmVzdWx0TGltaXR8fE51bWJlci5NQVhfVkFMVUUsYT1lLnVyaTtpZigoInZzY29kZTovL2RlZmF1bHRzZXR0aW5ncy9rZXliaW5kaW5ncy5qc29uIj09PWF8fHVpKGEudG9Mb3dlckNhc2UoKSwiL3VzZXIva2V5YmluZGluZ3MuanNvbiIpKSYmImFycmF5Ij09PWkudHlwZSl7Zm9yKHZhciBzPVtdLGM9MCxsPWkuaXRlbXM7YzxsLmxlbmd0aDtjKyspe3ZhciB1PWxbY107aWYoIm9iamVjdCI9PT11LnR5cGUpZm9yKHZhciBoPTAsZj11LnByb3BlcnRpZXM7aDxmLmxlbmd0aDtoKyspe3ZhciBkPWZbaF07aWYoImtleSI9PT1kLmtleU5vZGUudmFsdWUmJmQudmFsdWVOb2RlKXt2YXIgbT1mYShlLHUpLGc9ZmEoZSxkLmtleU5vZGUpO2lmKHMucHVzaCh7bmFtZTpIbyhkLnZhbHVlTm9kZSksa2luZDpCaS5GdW5jdGlvbixyYW5nZTptLHNlbGVjdGlvblJhbmdlOmd9KSwtLW88PTApcmV0dXJuIG4mJm4ub25SZXN1bHRMaW1pdEV4Y2VlZGVkJiZuLm9uUmVzdWx0TGltaXRFeGNlZWRlZChhKSxzfX19cmV0dXJuIHN9Zm9yKHZhciBwPVtdLGI9W3tub2RlOmkscmVzdWx0OnB9XSx2PTAseT0hMSxDPWZ1bmN0aW9uKHQsbil7ImFycmF5Ij09PXQudHlwZT90Lml0ZW1zLmZvckVhY2goKGZ1bmN0aW9uKHQsaSl7aWYodClpZihvPjApe28tLTt2YXIgYT1mYShlLHQpLHM9YSxjPXtuYW1lOlN0cmluZyhpKSxraW5kOnIuZ2V0U3ltYm9sS2luZCh0LnR5cGUpLHJhbmdlOmEsc2VsZWN0aW9uUmFuZ2U6cyxjaGlsZHJlbjpbXX07bi5wdXNoKGMpLGIucHVzaCh7cmVzdWx0OmMuY2hpbGRyZW4sbm9kZTp0fSl9ZWxzZSB5PSEwfSkpOiJvYmplY3QiPT09dC50eXBlJiZ0LnByb3BlcnRpZXMuZm9yRWFjaCgoZnVuY3Rpb24odCl7dmFyIGk9dC52YWx1ZU5vZGU7aWYoaSlpZihvPjApe28tLTt2YXIgYT1mYShlLHQpLHM9ZmEoZSx0LmtleU5vZGUpLGM9W10sbD17bmFtZTpyLmdldEtleUxhYmVsKHQpLGtpbmQ6ci5nZXRTeW1ib2xLaW5kKGkudHlwZSkscmFuZ2U6YSxzZWxlY3Rpb25SYW5nZTpzLGNoaWxkcmVuOmMsZGV0YWlsOnIuZ2V0RGV0YWlsKGkpfTtuLnB1c2gobCksYi5wdXNoKHtyZXN1bHQ6Yyxub2RlOml9KX1lbHNlIHk9ITB9KSl9O3Y8Yi5sZW5ndGg7KXt2YXIgdz1iW3YrK107Qyh3Lm5vZGUsdy5yZXN1bHQpfXJldHVybiB5JiZuJiZuLm9uUmVzdWx0TGltaXRFeGNlZWRlZCYmbi5vblJlc3VsdExpbWl0RXhjZWVkZWQoYSkscH0sZS5wcm90b3R5cGUuZ2V0U3ltYm9sS2luZD1mdW5jdGlvbihlKXtzd2l0Y2goZSl7Y2FzZSJvYmplY3QiOnJldHVybiBCaS5Nb2R1bGU7Y2FzZSJzdHJpbmciOnJldHVybiBCaS5TdHJpbmc7Y2FzZSJudW1iZXIiOnJldHVybiBCaS5OdW1iZXI7Y2FzZSJhcnJheSI6cmV0dXJuIEJpLkFycmF5O2Nhc2UiYm9vbGVhbiI6cmV0dXJuIEJpLkJvb2xlYW47ZGVmYXVsdDpyZXR1cm4gQmkuVmFyaWFibGV9fSxlLnByb3RvdHlwZS5nZXRLZXlMYWJlbD1mdW5jdGlvbihlKXt2YXIgdD1lLmtleU5vZGUudmFsdWU7cmV0dXJuIHQmJih0PXQucmVwbGFjZSgvW1xuXS9nLCLihrUiKSksdCYmdC50cmltKCk/dDonIicuY29uY2F0KHQsJyInKX0sZS5wcm90b3R5cGUuZ2V0RGV0YWlsPWZ1bmN0aW9uKGUpe2lmKGUpcmV0dXJuImJvb2xlYW4iPT09ZS50eXBlfHwibnVtYmVyIj09PWUudHlwZXx8Im51bGwiPT09ZS50eXBlfHwic3RyaW5nIj09PWUudHlwZT9TdHJpbmcoZS52YWx1ZSk6ImFycmF5Ij09PWUudHlwZT9lLmNoaWxkcmVuLmxlbmd0aD92b2lkIDA6IltdIjoib2JqZWN0Ij09PWUudHlwZT9lLmNoaWxkcmVuLmxlbmd0aD92b2lkIDA6Int9Ijp2b2lkIDB9LGUucHJvdG90eXBlLmZpbmREb2N1bWVudENvbG9ycz1mdW5jdGlvbihlLHQsbil7cmV0dXJuIHRoaXMuc2NoZW1hU2VydmljZS5nZXRTY2hlbWFGb3JSZXNvdXJjZShlLnVyaSx0KS50aGVuKChmdW5jdGlvbihyKXt2YXIgaT1bXTtpZihyKWZvcih2YXIgbz1uJiYibnVtYmVyIj09dHlwZW9mIG4ucmVzdWx0TGltaXQ/bi5yZXN1bHRMaW1pdDpOdW1iZXIuTUFYX1ZBTFVFLGE9e30scz0wLGM9dC5nZXRNYXRjaGluZ1NjaGVtYXMoci5zY2hlbWEpO3M8Yy5sZW5ndGg7cysrKXt2YXIgbD1jW3NdO2lmKCFsLmludmVydGVkJiZsLnNjaGVtYSYmKCJjb2xvciI9PT1sLnNjaGVtYS5mb3JtYXR8fCJjb2xvci1oZXgiPT09bC5zY2hlbWEuZm9ybWF0KSYmbC5ub2RlJiYic3RyaW5nIj09PWwubm9kZS50eXBlKXt2YXIgdT1TdHJpbmcobC5ub2RlLm9mZnNldCk7aWYoIWFbdV0pe3ZhciBoPXVhKEhvKGwubm9kZSkpO2lmKGgpe3ZhciBmPWZhKGUsbC5ub2RlKTtpLnB1c2goe2NvbG9yOmgscmFuZ2U6Zn0pfWlmKGFbdV09ITAsLS1vPD0wKXJldHVybiBuJiZuLm9uUmVzdWx0TGltaXRFeGNlZWRlZCYmbi5vblJlc3VsdExpbWl0RXhjZWVkZWQoZS51cmkpLGl9fX1yZXR1cm4gaX0pKX0sZS5wcm90b3R5cGUuZ2V0Q29sb3JQcmVzZW50YXRpb25zPWZ1bmN0aW9uKGUsdCxuLHIpe3ZhciBpLG89W10sYT1NYXRoLnJvdW5kKDI1NSpuLnJlZCkscz1NYXRoLnJvdW5kKDI1NSpuLmdyZWVuKSxjPU1hdGgucm91bmQoMjU1Km4uYmx1ZSk7ZnVuY3Rpb24gbChlKXt2YXIgdD1lLnRvU3RyaW5nKDE2KTtyZXR1cm4gMiE9PXQubGVuZ3RoPyIwIit0OnR9cmV0dXJuIGk9MT09PW4uYWxwaGE/IiMiLmNvbmNhdChsKGEpKS5jb25jYXQobChzKSkuY29uY2F0KGwoYykpOiIjIi5jb25jYXQobChhKSkuY29uY2F0KGwocykpLmNvbmNhdChsKGMpKS5jb25jYXQobChNYXRoLnJvdW5kKDI1NSpuLmFscGhhKSkpLG8ucHVzaCh7bGFiZWw6aSx0ZXh0RWRpdDpLci5yZXBsYWNlKHIsSlNPTi5zdHJpbmdpZnkoaSkpfSksb30sZX0oKTtmdW5jdGlvbiBmYShlLHQpe3JldHVybiBmci5jcmVhdGUoZS5wb3NpdGlvbkF0KHQub2Zmc2V0KSxlLnBvc2l0aW9uQXQodC5vZmZzZXQrdC5sZW5ndGgpKX12YXIgZGEsbWEsZ2EscGEsYmEsdmEseWE9Tm8oKSxDYT17c2NoZW1hQXNzb2NpYXRpb25zOltdLHNjaGVtYXM6eyJodHRwOi8vanNvbi1zY2hlbWEub3JnL3NjaGVtYSMiOnskcmVmOiJodHRwOi8vanNvbi1zY2hlbWEub3JnL2RyYWZ0LTA3L3NjaGVtYSMifSwiaHR0cDovL2pzb24tc2NoZW1hLm9yZy9kcmFmdC0wNC9zY2hlbWEjIjp7JHNjaGVtYToiaHR0cDovL2pzb24tc2NoZW1hLm9yZy9kcmFmdC0wNC9zY2hlbWEjIixkZWZpbml0aW9uczp7c2NoZW1hQXJyYXk6e3R5cGU6ImFycmF5IixtaW5JdGVtczoxLGl0ZW1zOnskcmVmOiIjIn19LHBvc2l0aXZlSW50ZWdlcjp7dHlwZToiaW50ZWdlciIsbWluaW11bTowfSxwb3NpdGl2ZUludGVnZXJEZWZhdWx0MDp7YWxsT2Y6W3skcmVmOiIjL2RlZmluaXRpb25zL3Bvc2l0aXZlSW50ZWdlciJ9LHtkZWZhdWx0OjB9XX0sc2ltcGxlVHlwZXM6e3R5cGU6InN0cmluZyIsZW51bTpbImFycmF5IiwiYm9vbGVhbiIsImludGVnZXIiLCJudWxsIiwibnVtYmVyIiwib2JqZWN0Iiwic3RyaW5nIl19LHN0cmluZ0FycmF5Ont0eXBlOiJhcnJheSIsaXRlbXM6e3R5cGU6InN0cmluZyJ9LG1pbkl0ZW1zOjEsdW5pcXVlSXRlbXM6ITB9fSx0eXBlOiJvYmplY3QiLHByb3BlcnRpZXM6e2lkOnt0eXBlOiJzdHJpbmciLGZvcm1hdDoidXJpIn0sJHNjaGVtYTp7dHlwZToic3RyaW5nIixmb3JtYXQ6InVyaSJ9LHRpdGxlOnt0eXBlOiJzdHJpbmcifSxkZXNjcmlwdGlvbjp7dHlwZToic3RyaW5nIn0sZGVmYXVsdDp7fSxtdWx0aXBsZU9mOnt0eXBlOiJudW1iZXIiLG1pbmltdW06MCxleGNsdXNpdmVNaW5pbXVtOiEwfSxtYXhpbXVtOnt0eXBlOiJudW1iZXIifSxleGNsdXNpdmVNYXhpbXVtOnt0eXBlOiJib29sZWFuIixkZWZhdWx0OiExfSxtaW5pbXVtOnt0eXBlOiJudW1iZXIifSxleGNsdXNpdmVNaW5pbXVtOnt0eXBlOiJib29sZWFuIixkZWZhdWx0OiExfSxtYXhMZW5ndGg6e2FsbE9mOlt7JHJlZjoiIy9kZWZpbml0aW9ucy9wb3NpdGl2ZUludGVnZXIifV19LG1pbkxlbmd0aDp7YWxsT2Y6W3skcmVmOiIjL2RlZmluaXRpb25zL3Bvc2l0aXZlSW50ZWdlckRlZmF1bHQwIn1dfSxwYXR0ZXJuOnt0eXBlOiJzdHJpbmciLGZvcm1hdDoicmVnZXgifSxhZGRpdGlvbmFsSXRlbXM6e2FueU9mOlt7dHlwZToiYm9vbGVhbiJ9LHskcmVmOiIjIn1dLGRlZmF1bHQ6e319LGl0ZW1zOnthbnlPZjpbeyRyZWY6IiMifSx7JHJlZjoiIy9kZWZpbml0aW9ucy9zY2hlbWFBcnJheSJ9XSxkZWZhdWx0Ont9fSxtYXhJdGVtczp7YWxsT2Y6W3skcmVmOiIjL2RlZmluaXRpb25zL3Bvc2l0aXZlSW50ZWdlciJ9XX0sbWluSXRlbXM6e2FsbE9mOlt7JHJlZjoiIy9kZWZpbml0aW9ucy9wb3NpdGl2ZUludGVnZXJEZWZhdWx0MCJ9XX0sdW5pcXVlSXRlbXM6e3R5cGU6ImJvb2xlYW4iLGRlZmF1bHQ6ITF9LG1heFByb3BlcnRpZXM6e2FsbE9mOlt7JHJlZjoiIy9kZWZpbml0aW9ucy9wb3NpdGl2ZUludGVnZXIifV19LG1pblByb3BlcnRpZXM6e2FsbE9mOlt7JHJlZjoiIy9kZWZpbml0aW9ucy9wb3NpdGl2ZUludGVnZXJEZWZhdWx0MCJ9XX0scmVxdWlyZWQ6e2FsbE9mOlt7JHJlZjoiIy9kZWZpbml0aW9ucy9zdHJpbmdBcnJheSJ9XX0sYWRkaXRpb25hbFByb3BlcnRpZXM6e2FueU9mOlt7dHlwZToiYm9vbGVhbiJ9LHskcmVmOiIjIn1dLGRlZmF1bHQ6e319LGRlZmluaXRpb25zOnt0eXBlOiJvYmplY3QiLGFkZGl0aW9uYWxQcm9wZXJ0aWVzOnskcmVmOiIjIn0sZGVmYXVsdDp7fX0scHJvcGVydGllczp7dHlwZToib2JqZWN0IixhZGRpdGlvbmFsUHJvcGVydGllczp7JHJlZjoiIyJ9LGRlZmF1bHQ6e319LHBhdHRlcm5Qcm9wZXJ0aWVzOnt0eXBlOiJvYmplY3QiLGFkZGl0aW9uYWxQcm9wZXJ0aWVzOnskcmVmOiIjIn0sZGVmYXVsdDp7fX0sZGVwZW5kZW5jaWVzOnt0eXBlOiJvYmplY3QiLGFkZGl0aW9uYWxQcm9wZXJ0aWVzOnthbnlPZjpbeyRyZWY6IiMifSx7JHJlZjoiIy9kZWZpbml0aW9ucy9zdHJpbmdBcnJheSJ9XX19LGVudW06e3R5cGU6ImFycmF5IixtaW5JdGVtczoxLHVuaXF1ZUl0ZW1zOiEwfSx0eXBlOnthbnlPZjpbeyRyZWY6IiMvZGVmaW5pdGlvbnMvc2ltcGxlVHlwZXMifSx7dHlwZToiYXJyYXkiLGl0ZW1zOnskcmVmOiIjL2RlZmluaXRpb25zL3NpbXBsZVR5cGVzIn0sbWluSXRlbXM6MSx1bmlxdWVJdGVtczohMH1dfSxmb3JtYXQ6e2FueU9mOlt7dHlwZToic3RyaW5nIixlbnVtOlsiZGF0ZS10aW1lIiwidXJpIiwiZW1haWwiLCJob3N0bmFtZSIsImlwdjQiLCJpcHY2IiwicmVnZXgiXX0se3R5cGU6InN0cmluZyJ9XX0sYWxsT2Y6e2FsbE9mOlt7JHJlZjoiIy9kZWZpbml0aW9ucy9zY2hlbWFBcnJheSJ9XX0sYW55T2Y6e2FsbE9mOlt7JHJlZjoiIy9kZWZpbml0aW9ucy9zY2hlbWFBcnJheSJ9XX0sb25lT2Y6e2FsbE9mOlt7JHJlZjoiIy9kZWZpbml0aW9ucy9zY2hlbWFBcnJheSJ9XX0sbm90OnthbGxPZjpbeyRyZWY6IiMifV19fSxkZXBlbmRlbmNpZXM6e2V4Y2x1c2l2ZU1heGltdW06WyJtYXhpbXVtIl0sZXhjbHVzaXZlTWluaW11bTpbIm1pbmltdW0iXX0sZGVmYXVsdDp7fX0sImh0dHA6Ly9qc29uLXNjaGVtYS5vcmcvZHJhZnQtMDcvc2NoZW1hIyI6e2RlZmluaXRpb25zOntzY2hlbWFBcnJheTp7dHlwZToiYXJyYXkiLG1pbkl0ZW1zOjEsaXRlbXM6eyRyZWY6IiMifX0sbm9uTmVnYXRpdmVJbnRlZ2VyOnt0eXBlOiJpbnRlZ2VyIixtaW5pbXVtOjB9LG5vbk5lZ2F0aXZlSW50ZWdlckRlZmF1bHQwOnthbGxPZjpbeyRyZWY6IiMvZGVmaW5pdGlvbnMvbm9uTmVnYXRpdmVJbnRlZ2VyIn0se2RlZmF1bHQ6MH1dfSxzaW1wbGVUeXBlczp7ZW51bTpbImFycmF5IiwiYm9vbGVhbiIsImludGVnZXIiLCJudWxsIiwibnVtYmVyIiwib2JqZWN0Iiwic3RyaW5nIl19LHN0cmluZ0FycmF5Ont0eXBlOiJhcnJheSIsaXRlbXM6e3R5cGU6InN0cmluZyJ9LHVuaXF1ZUl0ZW1zOiEwLGRlZmF1bHQ6W119fSx0eXBlOlsib2JqZWN0IiwiYm9vbGVhbiJdLHByb3BlcnRpZXM6eyRpZDp7dHlwZToic3RyaW5nIixmb3JtYXQ6InVyaS1yZWZlcmVuY2UifSwkc2NoZW1hOnt0eXBlOiJzdHJpbmciLGZvcm1hdDoidXJpIn0sJHJlZjp7dHlwZToic3RyaW5nIixmb3JtYXQ6InVyaS1yZWZlcmVuY2UifSwkY29tbWVudDp7dHlwZToic3RyaW5nIn0sdGl0bGU6e3R5cGU6InN0cmluZyJ9LGRlc2NyaXB0aW9uOnt0eXBlOiJzdHJpbmcifSxkZWZhdWx0OiEwLHJlYWRPbmx5Ont0eXBlOiJib29sZWFuIixkZWZhdWx0OiExfSxleGFtcGxlczp7dHlwZToiYXJyYXkiLGl0ZW1zOiEwfSxtdWx0aXBsZU9mOnt0eXBlOiJudW1iZXIiLGV4Y2x1c2l2ZU1pbmltdW06MH0sbWF4aW11bTp7dHlwZToibnVtYmVyIn0sZXhjbHVzaXZlTWF4aW11bTp7dHlwZToibnVtYmVyIn0sbWluaW11bTp7dHlwZToibnVtYmVyIn0sZXhjbHVzaXZlTWluaW11bTp7dHlwZToibnVtYmVyIn0sbWF4TGVuZ3RoOnskcmVmOiIjL2RlZmluaXRpb25zL25vbk5lZ2F0aXZlSW50ZWdlciJ9LG1pbkxlbmd0aDp7JHJlZjoiIy9kZWZpbml0aW9ucy9ub25OZWdhdGl2ZUludGVnZXJEZWZhdWx0MCJ9LHBhdHRlcm46e3R5cGU6InN0cmluZyIsZm9ybWF0OiJyZWdleCJ9LGFkZGl0aW9uYWxJdGVtczp7JHJlZjoiIyJ9LGl0ZW1zOnthbnlPZjpbeyRyZWY6IiMifSx7JHJlZjoiIy9kZWZpbml0aW9ucy9zY2hlbWFBcnJheSJ9XSxkZWZhdWx0OiEwfSxtYXhJdGVtczp7JHJlZjoiIy9kZWZpbml0aW9ucy9ub25OZWdhdGl2ZUludGVnZXIifSxtaW5JdGVtczp7JHJlZjoiIy9kZWZpbml0aW9ucy9ub25OZWdhdGl2ZUludGVnZXJEZWZhdWx0MCJ9LHVuaXF1ZUl0ZW1zOnt0eXBlOiJib29sZWFuIixkZWZhdWx0OiExfSxjb250YWluczp7JHJlZjoiIyJ9LG1heFByb3BlcnRpZXM6eyRyZWY6IiMvZGVmaW5pdGlvbnMvbm9uTmVnYXRpdmVJbnRlZ2VyIn0sbWluUHJvcGVydGllczp7JHJlZjoiIy9kZWZpbml0aW9ucy9ub25OZWdhdGl2ZUludGVnZXJEZWZhdWx0MCJ9LHJlcXVpcmVkOnskcmVmOiIjL2RlZmluaXRpb25zL3N0cmluZ0FycmF5In0sYWRkaXRpb25hbFByb3BlcnRpZXM6eyRyZWY6IiMifSxkZWZpbml0aW9uczp7dHlwZToib2JqZWN0IixhZGRpdGlvbmFsUHJvcGVydGllczp7JHJlZjoiIyJ9LGRlZmF1bHQ6e319LHByb3BlcnRpZXM6e3R5cGU6Im9iamVjdCIsYWRkaXRpb25hbFByb3BlcnRpZXM6eyRyZWY6IiMifSxkZWZhdWx0Ont9fSxwYXR0ZXJuUHJvcGVydGllczp7dHlwZToib2JqZWN0IixhZGRpdGlvbmFsUHJvcGVydGllczp7JHJlZjoiIyJ9LHByb3BlcnR5TmFtZXM6e2Zvcm1hdDoicmVnZXgifSxkZWZhdWx0Ont9fSxkZXBlbmRlbmNpZXM6e3R5cGU6Im9iamVjdCIsYWRkaXRpb25hbFByb3BlcnRpZXM6e2FueU9mOlt7JHJlZjoiIyJ9LHskcmVmOiIjL2RlZmluaXRpb25zL3N0cmluZ0FycmF5In1dfX0scHJvcGVydHlOYW1lczp7JHJlZjoiIyJ9LGNvbnN0OiEwLGVudW06e3R5cGU6ImFycmF5IixpdGVtczohMCxtaW5JdGVtczoxLHVuaXF1ZUl0ZW1zOiEwfSx0eXBlOnthbnlPZjpbeyRyZWY6IiMvZGVmaW5pdGlvbnMvc2ltcGxlVHlwZXMifSx7dHlwZToiYXJyYXkiLGl0ZW1zOnskcmVmOiIjL2RlZmluaXRpb25zL3NpbXBsZVR5cGVzIn0sbWluSXRlbXM6MSx1bmlxdWVJdGVtczohMH1dfSxmb3JtYXQ6e3R5cGU6InN0cmluZyJ9LGNvbnRlbnRNZWRpYVR5cGU6e3R5cGU6InN0cmluZyJ9LGNvbnRlbnRFbmNvZGluZzp7dHlwZToic3RyaW5nIn0saWY6eyRyZWY6IiMifSx0aGVuOnskcmVmOiIjIn0sZWxzZTp7JHJlZjoiIyJ9LGFsbE9mOnskcmVmOiIjL2RlZmluaXRpb25zL3NjaGVtYUFycmF5In0sYW55T2Y6eyRyZWY6IiMvZGVmaW5pdGlvbnMvc2NoZW1hQXJyYXkifSxvbmVPZjp7JHJlZjoiIy9kZWZpbml0aW9ucy9zY2hlbWFBcnJheSJ9LG5vdDp7JHJlZjoiIyJ9fSxkZWZhdWx0OiEwfX19LHdhPXtpZDp5YSgic2NoZW1hLmpzb24uaWQiLCJBIHVuaXF1ZSBpZGVudGlmaWVyIGZvciB0aGUgc2NoZW1hLiIpLCRzY2hlbWE6eWEoInNjaGVtYS5qc29uLiRzY2hlbWEiLCJUaGUgc2NoZW1hIHRvIHZlcmlmeSB0aGlzIGRvY3VtZW50IGFnYWluc3QuIiksdGl0bGU6eWEoInNjaGVtYS5qc29uLnRpdGxlIiwiQSBkZXNjcmlwdGl2ZSB0aXRsZSBvZiB0aGUgZWxlbWVudC4iKSxkZXNjcmlwdGlvbjp5YSgic2NoZW1hLmpzb24uZGVzY3JpcHRpb24iLCJBIGxvbmcgZGVzY3JpcHRpb24gb2YgdGhlIGVsZW1lbnQuIFVzZWQgaW4gaG92ZXIgbWVudXMgYW5kIHN1Z2dlc3Rpb25zLiIpLGRlZmF1bHQ6eWEoInNjaGVtYS5qc29uLmRlZmF1bHQiLCJBIGRlZmF1bHQgdmFsdWUuIFVzZWQgYnkgc3VnZ2VzdGlvbnMuIiksbXVsdGlwbGVPZjp5YSgic2NoZW1hLmpzb24ubXVsdGlwbGVPZiIsIkEgbnVtYmVyIHRoYXQgc2hvdWxkIGNsZWFubHkgZGl2aWRlIHRoZSBjdXJyZW50IHZhbHVlIChpLmUuIGhhdmUgbm8gcmVtYWluZGVyKS4iKSxtYXhpbXVtOnlhKCJzY2hlbWEuanNvbi5tYXhpbXVtIiwiVGhlIG1heGltdW0gbnVtZXJpY2FsIHZhbHVlLCBpbmNsdXNpdmUgYnkgZGVmYXVsdC4iKSxleGNsdXNpdmVNYXhpbXVtOnlhKCJzY2hlbWEuanNvbi5leGNsdXNpdmVNYXhpbXVtIiwiTWFrZXMgdGhlIG1heGltdW0gcHJvcGVydHkgZXhjbHVzaXZlLiIpLG1pbmltdW06eWEoInNjaGVtYS5qc29uLm1pbmltdW0iLCJUaGUgbWluaW11bSBudW1lcmljYWwgdmFsdWUsIGluY2x1c2l2ZSBieSBkZWZhdWx0LiIpLGV4Y2x1c2l2ZU1pbmltdW06eWEoInNjaGVtYS5qc29uLmV4Y2x1c2l2ZU1pbmludW0iLCJNYWtlcyB0aGUgbWluaW11bSBwcm9wZXJ0eSBleGNsdXNpdmUuIiksbWF4TGVuZ3RoOnlhKCJzY2hlbWEuanNvbi5tYXhMZW5ndGgiLCJUaGUgbWF4aW11bSBsZW5ndGggb2YgYSBzdHJpbmcuIiksbWluTGVuZ3RoOnlhKCJzY2hlbWEuanNvbi5taW5MZW5ndGgiLCJUaGUgbWluaW11bSBsZW5ndGggb2YgYSBzdHJpbmcuIikscGF0dGVybjp5YSgic2NoZW1hLmpzb24ucGF0dGVybiIsIkEgcmVndWxhciBleHByZXNzaW9uIHRvIG1hdGNoIHRoZSBzdHJpbmcgYWdhaW5zdC4gSXQgaXMgbm90IGltcGxpY2l0bHkgYW5jaG9yZWQuIiksYWRkaXRpb25hbEl0ZW1zOnlhKCJzY2hlbWEuanNvbi5hZGRpdGlvbmFsSXRlbXMiLCJGb3IgYXJyYXlzLCBvbmx5IHdoZW4gaXRlbXMgaXMgc2V0IGFzIGFuIGFycmF5LiBJZiBpdCBpcyBhIHNjaGVtYSwgdGhlbiB0aGlzIHNjaGVtYSB2YWxpZGF0ZXMgaXRlbXMgYWZ0ZXIgdGhlIG9uZXMgc3BlY2lmaWVkIGJ5IHRoZSBpdGVtcyBhcnJheS4gSWYgaXQgaXMgZmFsc2UsIHRoZW4gYWRkaXRpb25hbCBpdGVtcyB3aWxsIGNhdXNlIHZhbGlkYXRpb24gdG8gZmFpbC4iKSxpdGVtczp5YSgic2NoZW1hLmpzb24uaXRlbXMiLCJGb3IgYXJyYXlzLiBDYW4gZWl0aGVyIGJlIGEgc2NoZW1hIHRvIHZhbGlkYXRlIGV2ZXJ5IGVsZW1lbnQgYWdhaW5zdCBvciBhbiBhcnJheSBvZiBzY2hlbWFzIHRvIHZhbGlkYXRlIGVhY2ggaXRlbSBhZ2FpbnN0IGluIG9yZGVyICh0aGUgZmlyc3Qgc2NoZW1hIHdpbGwgdmFsaWRhdGUgdGhlIGZpcnN0IGVsZW1lbnQsIHRoZSBzZWNvbmQgc2NoZW1hIHdpbGwgdmFsaWRhdGUgdGhlIHNlY29uZCBlbGVtZW50LCBhbmQgc28gb24uIiksbWF4SXRlbXM6eWEoInNjaGVtYS5qc29uLm1heEl0ZW1zIiwiVGhlIG1heGltdW0gbnVtYmVyIG9mIGl0ZW1zIHRoYXQgY2FuIGJlIGluc2lkZSBhbiBhcnJheS4gSW5jbHVzaXZlLiIpLG1pbkl0ZW1zOnlhKCJzY2hlbWEuanNvbi5taW5JdGVtcyIsIlRoZSBtaW5pbXVtIG51bWJlciBvZiBpdGVtcyB0aGF0IGNhbiBiZSBpbnNpZGUgYW4gYXJyYXkuIEluY2x1c2l2ZS4iKSx1bmlxdWVJdGVtczp5YSgic2NoZW1hLmpzb24udW5pcXVlSXRlbXMiLCJJZiBhbGwgb2YgdGhlIGl0ZW1zIGluIHRoZSBhcnJheSBtdXN0IGJlIHVuaXF1ZS4gRGVmYXVsdHMgdG8gZmFsc2UuIiksbWF4UHJvcGVydGllczp5YSgic2NoZW1hLmpzb24ubWF4UHJvcGVydGllcyIsIlRoZSBtYXhpbXVtIG51bWJlciBvZiBwcm9wZXJ0aWVzIGFuIG9iamVjdCBjYW4gaGF2ZS4gSW5jbHVzaXZlLiIpLG1pblByb3BlcnRpZXM6eWEoInNjaGVtYS5qc29uLm1pblByb3BlcnRpZXMiLCJUaGUgbWluaW11bSBudW1iZXIgb2YgcHJvcGVydGllcyBhbiBvYmplY3QgY2FuIGhhdmUuIEluY2x1c2l2ZS4iKSxyZXF1aXJlZDp5YSgic2NoZW1hLmpzb24ucmVxdWlyZWQiLCJBbiBhcnJheSBvZiBzdHJpbmdzIHRoYXQgbGlzdHMgdGhlIG5hbWVzIG9mIGFsbCBwcm9wZXJ0aWVzIHJlcXVpcmVkIG9uIHRoaXMgb2JqZWN0LiIpLGFkZGl0aW9uYWxQcm9wZXJ0aWVzOnlhKCJzY2hlbWEuanNvbi5hZGRpdGlvbmFsUHJvcGVydGllcyIsIkVpdGhlciBhIHNjaGVtYSBvciBhIGJvb2xlYW4uIElmIGEgc2NoZW1hLCB0aGVuIHVzZWQgdG8gdmFsaWRhdGUgYWxsIHByb3BlcnRpZXMgbm90IG1hdGNoZWQgYnkgJ3Byb3BlcnRpZXMnIG9yICdwYXR0ZXJuUHJvcGVydGllcycuIElmIGZhbHNlLCB0aGVuIGFueSBwcm9wZXJ0aWVzIG5vdCBtYXRjaGVkIGJ5IGVpdGhlciB3aWxsIGNhdXNlIHRoaXMgc2NoZW1hIHRvIGZhaWwuIiksZGVmaW5pdGlvbnM6eWEoInNjaGVtYS5qc29uLmRlZmluaXRpb25zIiwiTm90IHVzZWQgZm9yIHZhbGlkYXRpb24uIFBsYWNlIHN1YnNjaGVtYXMgaGVyZSB0aGF0IHlvdSB3aXNoIHRvIHJlZmVyZW5jZSBpbmxpbmUgd2l0aCAkcmVmLiIpLHByb3BlcnRpZXM6eWEoInNjaGVtYS5qc29uLnByb3BlcnRpZXMiLCJBIG1hcCBvZiBwcm9wZXJ0eSBuYW1lcyB0byBzY2hlbWFzIGZvciBlYWNoIHByb3BlcnR5LiIpLHBhdHRlcm5Qcm9wZXJ0aWVzOnlhKCJzY2hlbWEuanNvbi5wYXR0ZXJuUHJvcGVydGllcyIsIkEgbWFwIG9mIHJlZ3VsYXIgZXhwcmVzc2lvbnMgb24gcHJvcGVydHkgbmFtZXMgdG8gc2NoZW1hcyBmb3IgbWF0Y2hpbmcgcHJvcGVydGllcy4iKSxkZXBlbmRlbmNpZXM6eWEoInNjaGVtYS5qc29uLmRlcGVuZGVuY2llcyIsIkEgbWFwIG9mIHByb3BlcnR5IG5hbWVzIHRvIGVpdGhlciBhbiBhcnJheSBvZiBwcm9wZXJ0eSBuYW1lcyBvciBhIHNjaGVtYS4gQW4gYXJyYXkgb2YgcHJvcGVydHkgbmFtZXMgbWVhbnMgdGhlIHByb3BlcnR5IG5hbWVkIGluIHRoZSBrZXkgZGVwZW5kcyBvbiB0aGUgcHJvcGVydGllcyBpbiB0aGUgYXJyYXkgYmVpbmcgcHJlc2VudCBpbiB0aGUgb2JqZWN0IGluIG9yZGVyIHRvIGJlIHZhbGlkLiBJZiB0aGUgdmFsdWUgaXMgYSBzY2hlbWEsIHRoZW4gdGhlIHNjaGVtYSBpcyBvbmx5IGFwcGxpZWQgdG8gdGhlIG9iamVjdCBpZiB0aGUgcHJvcGVydHkgaW4gdGhlIGtleSBleGlzdHMgb24gdGhlIG9iamVjdC4iKSxlbnVtOnlhKCJzY2hlbWEuanNvbi5lbnVtIiwiVGhlIHNldCBvZiBsaXRlcmFsIHZhbHVlcyB0aGF0IGFyZSB2YWxpZC4iKSx0eXBlOnlhKCJzY2hlbWEuanNvbi50eXBlIiwiRWl0aGVyIGEgc3RyaW5nIG9mIG9uZSBvZiB0aGUgYmFzaWMgc2NoZW1hIHR5cGVzIChudW1iZXIsIGludGVnZXIsIG51bGwsIGFycmF5LCBvYmplY3QsIGJvb2xlYW4sIHN0cmluZykgb3IgYW4gYXJyYXkgb2Ygc3RyaW5ncyBzcGVjaWZ5aW5nIGEgc3Vic2V0IG9mIHRob3NlIHR5cGVzLiIpLGZvcm1hdDp5YSgic2NoZW1hLmpzb24uZm9ybWF0IiwiRGVzY3JpYmVzIHRoZSBmb3JtYXQgZXhwZWN0ZWQgZm9yIHRoZSB2YWx1ZS4iKSxhbGxPZjp5YSgic2NoZW1hLmpzb24uYWxsT2YiLCJBbiBhcnJheSBvZiBzY2hlbWFzLCBhbGwgb2Ygd2hpY2ggbXVzdCBtYXRjaC4iKSxhbnlPZjp5YSgic2NoZW1hLmpzb24uYW55T2YiLCJBbiBhcnJheSBvZiBzY2hlbWFzLCB3aGVyZSBhdCBsZWFzdCBvbmUgbXVzdCBtYXRjaC4iKSxvbmVPZjp5YSgic2NoZW1hLmpzb24ub25lT2YiLCJBbiBhcnJheSBvZiBzY2hlbWFzLCBleGFjdGx5IG9uZSBvZiB3aGljaCBtdXN0IG1hdGNoLiIpLG5vdDp5YSgic2NoZW1hLmpzb24ubm90IiwiQSBzY2hlbWEgd2hpY2ggbXVzdCBub3QgbWF0Y2guIiksJGlkOnlhKCJzY2hlbWEuanNvbi4kaWQiLCJBIHVuaXF1ZSBpZGVudGlmaWVyIGZvciB0aGUgc2NoZW1hLiIpLCRyZWY6eWEoInNjaGVtYS5qc29uLiRyZWYiLCJSZWZlcmVuY2UgYSBkZWZpbml0aW9uIGhvc3RlZCBvbiBhbnkgbG9jYXRpb24uIiksJGNvbW1lbnQ6eWEoInNjaGVtYS5qc29uLiRjb21tZW50IiwiQ29tbWVudHMgZnJvbSBzY2hlbWEgYXV0aG9ycyB0byByZWFkZXJzIG9yIG1haW50YWluZXJzIG9mIHRoZSBzY2hlbWEuIikscmVhZE9ubHk6eWEoInNjaGVtYS5qc29uLnJlYWRPbmx5IiwiSW5kaWNhdGVzIHRoYXQgdGhlIHZhbHVlIG9mIHRoZSBpbnN0YW5jZSBpcyBtYW5hZ2VkIGV4Y2x1c2l2ZWx5IGJ5IHRoZSBvd25pbmcgYXV0aG9yaXR5LiIpLGV4YW1wbGVzOnlhKCJzY2hlbWEuanNvbi5leGFtcGxlcyIsIlNhbXBsZSBKU09OIHZhbHVlcyBhc3NvY2lhdGVkIHdpdGggYSBwYXJ0aWN1bGFyIHNjaGVtYSwgZm9yIHRoZSBwdXJwb3NlIG9mIGlsbHVzdHJhdGluZyB1c2FnZS4iKSxjb250YWluczp5YSgic2NoZW1hLmpzb24uY29udGFpbnMiLCdBbiBhcnJheSBpbnN0YW5jZSBpcyB2YWxpZCBhZ2FpbnN0ICJjb250YWlucyIgaWYgYXQgbGVhc3Qgb25lIG9mIGl0cyBlbGVtZW50cyBpcyB2YWxpZCBhZ2FpbnN0IHRoZSBnaXZlbiBzY2hlbWEuJykscHJvcGVydHlOYW1lczp5YSgic2NoZW1hLmpzb24ucHJvcGVydHlOYW1lcyIsIklmIHRoZSBpbnN0YW5jZSBpcyBhbiBvYmplY3QsIHRoaXMga2V5d29yZCB2YWxpZGF0ZXMgaWYgZXZlcnkgcHJvcGVydHkgbmFtZSBpbiB0aGUgaW5zdGFuY2UgdmFsaWRhdGVzIGFnYWluc3QgdGhlIHByb3ZpZGVkIHNjaGVtYS4iKSxjb25zdDp5YSgic2NoZW1hLmpzb24uY29uc3QiLCJBbiBpbnN0YW5jZSB2YWxpZGF0ZXMgc3VjY2Vzc2Z1bGx5IGFnYWluc3QgdGhpcyBrZXl3b3JkIGlmIGl0cyB2YWx1ZSBpcyBlcXVhbCB0byB0aGUgdmFsdWUgb2YgdGhlIGtleXdvcmQuIiksY29udGVudE1lZGlhVHlwZTp5YSgic2NoZW1hLmpzb24uY29udGVudE1lZGlhVHlwZSIsIkRlc2NyaWJlcyB0aGUgbWVkaWEgdHlwZSBvZiBhIHN0cmluZyBwcm9wZXJ0eS4iKSxjb250ZW50RW5jb2Rpbmc6eWEoInNjaGVtYS5qc29uLmNvbnRlbnRFbmNvZGluZyIsIkRlc2NyaWJlcyB0aGUgY29udGVudCBlbmNvZGluZyBvZiBhIHN0cmluZyBwcm9wZXJ0eS4iKSxpZjp5YSgic2NoZW1hLmpzb24uaWYiLCdUaGUgdmFsaWRhdGlvbiBvdXRjb21lIG9mIHRoZSAiaWYiIHN1YnNjaGVtYSBjb250cm9scyB3aGljaCBvZiB0aGUgInRoZW4iIG9yICJlbHNlIiBrZXl3b3JkcyBhcmUgZXZhbHVhdGVkLicpLHRoZW46eWEoInNjaGVtYS5qc29uLnRoZW4iLCdUaGUgImlmIiBzdWJzY2hlbWEgaXMgdXNlZCBmb3IgdmFsaWRhdGlvbiB3aGVuIHRoZSAiaWYiIHN1YnNjaGVtYSBzdWNjZWVkcy4nKSxlbHNlOnlhKCJzY2hlbWEuanNvbi5lbHNlIiwnVGhlICJlbHNlIiBzdWJzY2hlbWEgaXMgdXNlZCBmb3IgdmFsaWRhdGlvbiB3aGVuIHRoZSAiaWYiIHN1YnNjaGVtYSBmYWlscy4nKX07Zm9yKGJhIGluIENhLnNjaGVtYXMpZm9yKHBhIGluKGRhPUNhLnNjaGVtYXNbYmFdKS5wcm9wZXJ0aWVzKSJib29sZWFuIj09dHlwZW9mKG1hPWRhLnByb3BlcnRpZXNbcGFdKSYmKG1hPWRhLnByb3BlcnRpZXNbcGFdPXt9KSwoZ2E9d2FbcGFdKT9tYS5kZXNjcmlwdGlvbj1nYTpjb25zb2xlLmxvZygiIi5jb25jYXQocGEsIjogbG9jYWxpemUoJ3NjaGVtYS5qc29uLiIpLmNvbmNhdChwYSwnXCcsICIiKScpKTt2YT0oKCk9Pnt2YXIgZT17NDcwOmU9PntmdW5jdGlvbiB0KGUpe2lmKCJzdHJpbmciIT10eXBlb2YgZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJQYXRoIG11c3QgYmUgYSBzdHJpbmcuIFJlY2VpdmVkICIrSlNPTi5zdHJpbmdpZnkoZSkpfWZ1bmN0aW9uIG4oZSx0KXtmb3IodmFyIG4scj0iIixpPTAsbz0tMSxhPTAscz0wO3M8PWUubGVuZ3RoOysrcyl7aWYoczxlLmxlbmd0aCluPWUuY2hhckNvZGVBdChzKTtlbHNle2lmKDQ3PT09bilicmVhaztuPTQ3fWlmKDQ3PT09bil7aWYobz09PXMtMXx8MT09PWEpO2Vsc2UgaWYobyE9PXMtMSYmMj09PWEpe2lmKHIubGVuZ3RoPDJ8fDIhPT1pfHw0NiE9PXIuY2hhckNvZGVBdChyLmxlbmd0aC0xKXx8NDYhPT1yLmNoYXJDb2RlQXQoci5sZW5ndGgtMikpaWYoci5sZW5ndGg+Mil7dmFyIGM9ci5sYXN0SW5kZXhPZigiLyIpO2lmKGMhPT1yLmxlbmd0aC0xKXstMT09PWM/KHI9IiIsaT0wKTppPShyPXIuc2xpY2UoMCxjKSkubGVuZ3RoLTEtci5sYXN0SW5kZXhPZigiLyIpLG89cyxhPTA7Y29udGludWV9fWVsc2UgaWYoMj09PXIubGVuZ3RofHwxPT09ci5sZW5ndGgpe3I9IiIsaT0wLG89cyxhPTA7Y29udGludWV9dCYmKHIubGVuZ3RoPjA/cis9Ii8uLiI6cj0iLi4iLGk9Mil9ZWxzZSByLmxlbmd0aD4wP3IrPSIvIitlLnNsaWNlKG8rMSxzKTpyPWUuc2xpY2UobysxLHMpLGk9cy1vLTE7bz1zLGE9MH1lbHNlIDQ2PT09biYmLTEhPT1hPysrYTphPS0xfXJldHVybiByfXZhciByPXtyZXNvbHZlOmZ1bmN0aW9uKCl7Zm9yKHZhciBlLHI9IiIsaT0hMSxvPWFyZ3VtZW50cy5sZW5ndGgtMTtvPj0tMSYmIWk7by0tKXt2YXIgYTtvPj0wP2E9YXJndW1lbnRzW29dOih2b2lkIDA9PT1lJiYoZT1wcm9jZXNzLmN3ZCgpKSxhPWUpLHQoYSksMCE9PWEubGVuZ3RoJiYocj1hKyIvIityLGk9NDc9PT1hLmNoYXJDb2RlQXQoMCkpfXJldHVybiByPW4ociwhaSksaT9yLmxlbmd0aD4wPyIvIityOiIvIjpyLmxlbmd0aD4wP3I6Ii4ifSxub3JtYWxpemU6ZnVuY3Rpb24oZSl7aWYodChlKSwwPT09ZS5sZW5ndGgpcmV0dXJuIi4iO3ZhciByPTQ3PT09ZS5jaGFyQ29kZUF0KDApLGk9NDc9PT1lLmNoYXJDb2RlQXQoZS5sZW5ndGgtMSk7cmV0dXJuIDAhPT0oZT1uKGUsIXIpKS5sZW5ndGh8fHJ8fChlPSIuIiksZS5sZW5ndGg+MCYmaSYmKGUrPSIvIikscj8iLyIrZTplfSxpc0Fic29sdXRlOmZ1bmN0aW9uKGUpe3JldHVybiB0KGUpLGUubGVuZ3RoPjAmJjQ3PT09ZS5jaGFyQ29kZUF0KDApfSxqb2luOmZ1bmN0aW9uKCl7aWYoMD09PWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIi4iO2Zvcih2YXIgZSxuPTA7bjxhcmd1bWVudHMubGVuZ3RoOysrbil7dmFyIGk9YXJndW1lbnRzW25dO3QoaSksaS5sZW5ndGg+MCYmKHZvaWQgMD09PWU/ZT1pOmUrPSIvIitpKX1yZXR1cm4gdm9pZCAwPT09ZT8iLiI6ci5ub3JtYWxpemUoZSl9LHJlbGF0aXZlOmZ1bmN0aW9uKGUsbil7aWYodChlKSx0KG4pLGU9PT1uKXJldHVybiIiO2lmKChlPXIucmVzb2x2ZShlKSk9PT0obj1yLnJlc29sdmUobikpKXJldHVybiIiO2Zvcih2YXIgaT0xO2k8ZS5sZW5ndGgmJjQ3PT09ZS5jaGFyQ29kZUF0KGkpOysraSk7Zm9yKHZhciBvPWUubGVuZ3RoLGE9by1pLHM9MTtzPG4ubGVuZ3RoJiY0Nz09PW4uY2hhckNvZGVBdChzKTsrK3MpO2Zvcih2YXIgYz1uLmxlbmd0aC1zLGw9YTxjP2E6Yyx1PS0xLGg9MDtoPD1sOysraCl7aWYoaD09PWwpe2lmKGM+bCl7aWYoNDc9PT1uLmNoYXJDb2RlQXQocytoKSlyZXR1cm4gbi5zbGljZShzK2grMSk7aWYoMD09PWgpcmV0dXJuIG4uc2xpY2UocytoKX1lbHNlIGE+bCYmKDQ3PT09ZS5jaGFyQ29kZUF0KGkraCk/dT1oOjA9PT1oJiYodT0wKSk7YnJlYWt9dmFyIGY9ZS5jaGFyQ29kZUF0KGkraCk7aWYoZiE9PW4uY2hhckNvZGVBdChzK2gpKWJyZWFrOzQ3PT09ZiYmKHU9aCl9dmFyIGQ9IiI7Zm9yKGg9aSt1KzE7aDw9bzsrK2gpaCE9PW8mJjQ3IT09ZS5jaGFyQ29kZUF0KGgpfHwoMD09PWQubGVuZ3RoP2QrPSIuLiI6ZCs9Ii8uLiIpO3JldHVybiBkLmxlbmd0aD4wP2Qrbi5zbGljZShzK3UpOihzKz11LDQ3PT09bi5jaGFyQ29kZUF0KHMpJiYrK3Msbi5zbGljZShzKSl9LF9tYWtlTG9uZzpmdW5jdGlvbihlKXtyZXR1cm4gZX0sZGlybmFtZTpmdW5jdGlvbihlKXtpZih0KGUpLDA9PT1lLmxlbmd0aClyZXR1cm4iLiI7Zm9yKHZhciBuPWUuY2hhckNvZGVBdCgwKSxyPTQ3PT09bixpPS0xLG89ITAsYT1lLmxlbmd0aC0xO2E+PTE7LS1hKWlmKDQ3PT09KG49ZS5jaGFyQ29kZUF0KGEpKSl7aWYoIW8pe2k9YTticmVha319ZWxzZSBvPSExO3JldHVybi0xPT09aT9yPyIvIjoiLiI6ciYmMT09PWk/Ii8vIjplLnNsaWNlKDAsaSl9LGJhc2VuYW1lOmZ1bmN0aW9uKGUsbil7aWYodm9pZCAwIT09biYmInN0cmluZyIhPXR5cGVvZiBuKXRocm93IG5ldyBUeXBlRXJyb3IoJyJleHQiIGFyZ3VtZW50IG11c3QgYmUgYSBzdHJpbmcnKTt0KGUpO3ZhciByLGk9MCxvPS0xLGE9ITA7aWYodm9pZCAwIT09biYmbi5sZW5ndGg+MCYmbi5sZW5ndGg8PWUubGVuZ3RoKXtpZihuLmxlbmd0aD09PWUubGVuZ3RoJiZuPT09ZSlyZXR1cm4iIjt2YXIgcz1uLmxlbmd0aC0xLGM9LTE7Zm9yKHI9ZS5sZW5ndGgtMTtyPj0wOy0tcil7dmFyIGw9ZS5jaGFyQ29kZUF0KHIpO2lmKDQ3PT09bCl7aWYoIWEpe2k9cisxO2JyZWFrfX1lbHNlLTE9PT1jJiYoYT0hMSxjPXIrMSkscz49MCYmKGw9PT1uLmNoYXJDb2RlQXQocyk/LTE9PS0tcyYmKG89cik6KHM9LTEsbz1jKSl9cmV0dXJuIGk9PT1vP289YzotMT09PW8mJihvPWUubGVuZ3RoKSxlLnNsaWNlKGksbyl9Zm9yKHI9ZS5sZW5ndGgtMTtyPj0wOy0tcilpZig0Nz09PWUuY2hhckNvZGVBdChyKSl7aWYoIWEpe2k9cisxO2JyZWFrfX1lbHNlLTE9PT1vJiYoYT0hMSxvPXIrMSk7cmV0dXJuLTE9PT1vPyIiOmUuc2xpY2UoaSxvKX0sZXh0bmFtZTpmdW5jdGlvbihlKXt0KGUpO2Zvcih2YXIgbj0tMSxyPTAsaT0tMSxvPSEwLGE9MCxzPWUubGVuZ3RoLTE7cz49MDstLXMpe3ZhciBjPWUuY2hhckNvZGVBdChzKTtpZig0NyE9PWMpLTE9PT1pJiYobz0hMSxpPXMrMSksNDY9PT1jPy0xPT09bj9uPXM6MSE9PWEmJihhPTEpOi0xIT09biYmKGE9LTEpO2Vsc2UgaWYoIW8pe3I9cysxO2JyZWFrfX1yZXR1cm4tMT09PW58fC0xPT09aXx8MD09PWF8fDE9PT1hJiZuPT09aS0xJiZuPT09cisxPyIiOmUuc2xpY2UobixpKX0sZm9ybWF0OmZ1bmN0aW9uKGUpe2lmKG51bGw9PT1lfHwib2JqZWN0IiE9dHlwZW9mIGUpdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlICJwYXRoT2JqZWN0IiBhcmd1bWVudCBtdXN0IGJlIG9mIHR5cGUgT2JqZWN0LiBSZWNlaXZlZCB0eXBlICcrdHlwZW9mIGUpO3JldHVybiBuPSh0PWUpLmRpcnx8dC5yb290LHI9dC5iYXNlfHwodC5uYW1lfHwiIikrKHQuZXh0fHwiIiksbj9uPT09dC5yb290P24rcjpuKyIvIityOnI7dmFyIHQsbixyfSxwYXJzZTpmdW5jdGlvbihlKXt0KGUpO3ZhciBuPXtyb290OiIiLGRpcjoiIixiYXNlOiIiLGV4dDoiIixuYW1lOiIifTtpZigwPT09ZS5sZW5ndGgpcmV0dXJuIG47dmFyIHIsaT1lLmNoYXJDb2RlQXQoMCksbz00Nz09PWk7bz8obi5yb290PSIvIixyPTEpOnI9MDtmb3IodmFyIGE9LTEscz0wLGM9LTEsbD0hMCx1PWUubGVuZ3RoLTEsaD0wO3U+PXI7LS11KWlmKDQ3IT09KGk9ZS5jaGFyQ29kZUF0KHUpKSktMT09PWMmJihsPSExLGM9dSsxKSw0Nj09PWk/LTE9PT1hP2E9dToxIT09aCYmKGg9MSk6LTEhPT1hJiYoaD0tMSk7ZWxzZSBpZighbCl7cz11KzE7YnJlYWt9cmV0dXJuLTE9PT1hfHwtMT09PWN8fDA9PT1ofHwxPT09aCYmYT09PWMtMSYmYT09PXMrMT8tMSE9PWMmJihuLmJhc2U9bi5uYW1lPTA9PT1zJiZvP2Uuc2xpY2UoMSxjKTplLnNsaWNlKHMsYykpOigwPT09cyYmbz8obi5uYW1lPWUuc2xpY2UoMSxhKSxuLmJhc2U9ZS5zbGljZSgxLGMpKToobi5uYW1lPWUuc2xpY2UocyxhKSxuLmJhc2U9ZS5zbGljZShzLGMpKSxuLmV4dD1lLnNsaWNlKGEsYykpLHM+MD9uLmRpcj1lLnNsaWNlKDAscy0xKTpvJiYobi5kaXI9Ii8iKSxufSxzZXA6Ii8iLGRlbGltaXRlcjoiOiIsd2luMzI6bnVsbCxwb3NpeDpudWxsfTtyLnBvc2l4PXIsZS5leHBvcnRzPXJ9LDQ0NzooZSx0LG4pPT57dmFyIHI7aWYobi5yKHQpLG4uZCh0LHtVUkk6KCk9PmcsVXRpbHM6KCk9Pnh9KSwib2JqZWN0Ij09dHlwZW9mIHByb2Nlc3Mpcj0id2luMzIiPT09cHJvY2Vzcy5wbGF0Zm9ybTtlbHNlIGlmKCJvYmplY3QiPT10eXBlb2YgbmF2aWdhdG9yKXt2YXIgaT1uYXZpZ2F0b3IudXNlckFnZW50O3I9aS5pbmRleE9mKCJXaW5kb3dzIik+PTB9dmFyIG8sYSxzPShvPWZ1bmN0aW9uKGUsdCl7cmV0dXJuKG89T2JqZWN0LnNldFByb3RvdHlwZU9mfHx7X19wcm90b19fOltdfWluc3RhbmNlb2YgQXJyYXkmJmZ1bmN0aW9uKGUsdCl7ZS5fX3Byb3RvX189dH18fGZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuIGluIHQpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsbikmJihlW25dPXRbbl0pfSkoZSx0KX0sZnVuY3Rpb24oZSx0KXtpZigiZnVuY3Rpb24iIT10eXBlb2YgdCYmbnVsbCE9PXQpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2xhc3MgZXh0ZW5kcyB2YWx1ZSAiK1N0cmluZyh0KSsiIGlzIG5vdCBhIGNvbnN0cnVjdG9yIG9yIG51bGwiKTtmdW5jdGlvbiBuKCl7dGhpcy5jb25zdHJ1Y3Rvcj1lfW8oZSx0KSxlLnByb3RvdHlwZT1udWxsPT09dD9PYmplY3QuY3JlYXRlKHQpOihuLnByb3RvdHlwZT10LnByb3RvdHlwZSxuZXcgbil9KSxjPS9eXHdbXHdcZCsuLV0qJC8sbD0vXlwvLyx1PS9eXC9cLy87ZnVuY3Rpb24gaChlLHQpe2lmKCFlLnNjaGVtZSYmdCl0aHJvdyBuZXcgRXJyb3IoJ1tVcmlFcnJvcl06IFNjaGVtZSBpcyBtaXNzaW5nOiB7c2NoZW1lOiAiIiwgYXV0aG9yaXR5OiAiJy5jb25jYXQoZS5hdXRob3JpdHksJyIsIHBhdGg6ICInKS5jb25jYXQoZS5wYXRoLCciLCBxdWVyeTogIicpLmNvbmNhdChlLnF1ZXJ5LCciLCBmcmFnbWVudDogIicpLmNvbmNhdChlLmZyYWdtZW50LCcifScpKTtpZihlLnNjaGVtZSYmIWMudGVzdChlLnNjaGVtZSkpdGhyb3cgbmV3IEVycm9yKCJbVXJpRXJyb3JdOiBTY2hlbWUgY29udGFpbnMgaWxsZWdhbCBjaGFyYWN0ZXJzLiIpO2lmKGUucGF0aClpZihlLmF1dGhvcml0eSl7aWYoIWwudGVzdChlLnBhdGgpKXRocm93IG5ldyBFcnJvcignW1VyaUVycm9yXTogSWYgYSBVUkkgY29udGFpbnMgYW4gYXV0aG9yaXR5IGNvbXBvbmVudCwgdGhlbiB0aGUgcGF0aCBjb21wb25lbnQgbXVzdCBlaXRoZXIgYmUgZW1wdHkgb3IgYmVnaW4gd2l0aCBhIHNsYXNoICgiLyIpIGNoYXJhY3RlcicpfWVsc2UgaWYodS50ZXN0KGUucGF0aCkpdGhyb3cgbmV3IEVycm9yKCdbVXJpRXJyb3JdOiBJZiBhIFVSSSBkb2VzIG5vdCBjb250YWluIGFuIGF1dGhvcml0eSBjb21wb25lbnQsIHRoZW4gdGhlIHBhdGggY2Fubm90IGJlZ2luIHdpdGggdHdvIHNsYXNoIGNoYXJhY3RlcnMgKCIvLyIpJyl9dmFyIGY9IiIsZD0iLyIsbT0vXigoW146Lz8jXSs/KTopPyhcL1wvKFteLz8jXSopKT8oW14/I10qKShcPyhbXiNdKikpPygjKC4qKSk/LyxnPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHQsbixyLGksbyl7dmFyIGEsczt2b2lkIDA9PT1vJiYobz0hMSksIm9iamVjdCI9PXR5cGVvZiBlPyh0aGlzLnNjaGVtZT1lLnNjaGVtZXx8Zix0aGlzLmF1dGhvcml0eT1lLmF1dGhvcml0eXx8Zix0aGlzLnBhdGg9ZS5wYXRofHxmLHRoaXMucXVlcnk9ZS5xdWVyeXx8Zix0aGlzLmZyYWdtZW50PWUuZnJhZ21lbnR8fGYpOih0aGlzLnNjaGVtZT0ocz1vLChhPWUpfHxzP2E6ImZpbGUiKSx0aGlzLmF1dGhvcml0eT10fHxmLHRoaXMucGF0aD1mdW5jdGlvbihlLHQpe3N3aXRjaChlKXtjYXNlImh0dHBzIjpjYXNlImh0dHAiOmNhc2UiZmlsZSI6dD90WzBdIT09ZCYmKHQ9ZCt0KTp0PWR9cmV0dXJuIHR9KHRoaXMuc2NoZW1lLG58fGYpLHRoaXMucXVlcnk9cnx8Zix0aGlzLmZyYWdtZW50PWl8fGYsaCh0aGlzLG8pKX1yZXR1cm4gZS5pc1VyaT1mdW5jdGlvbih0KXtyZXR1cm4gdCBpbnN0YW5jZW9mIGV8fCEhdCYmInN0cmluZyI9PXR5cGVvZiB0LmF1dGhvcml0eSYmInN0cmluZyI9PXR5cGVvZiB0LmZyYWdtZW50JiYic3RyaW5nIj09dHlwZW9mIHQucGF0aCYmInN0cmluZyI9PXR5cGVvZiB0LnF1ZXJ5JiYic3RyaW5nIj09dHlwZW9mIHQuc2NoZW1lJiYic3RyaW5nIj09dHlwZW9mIHQuZnNQYXRoJiYiZnVuY3Rpb24iPT10eXBlb2YgdC53aXRoJiYiZnVuY3Rpb24iPT10eXBlb2YgdC50b1N0cmluZ30sT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJmc1BhdGgiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdyh0aGlzLCExKX0sZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9KSxlLnByb3RvdHlwZS53aXRoPWZ1bmN0aW9uKGUpe2lmKCFlKXJldHVybiB0aGlzO3ZhciB0PWUuc2NoZW1lLG49ZS5hdXRob3JpdHkscj1lLnBhdGgsaT1lLnF1ZXJ5LG89ZS5mcmFnbWVudDtyZXR1cm4gdm9pZCAwPT09dD90PXRoaXMuc2NoZW1lOm51bGw9PT10JiYodD1mKSx2b2lkIDA9PT1uP249dGhpcy5hdXRob3JpdHk6bnVsbD09PW4mJihuPWYpLHZvaWQgMD09PXI/cj10aGlzLnBhdGg6bnVsbD09PXImJihyPWYpLHZvaWQgMD09PWk/aT10aGlzLnF1ZXJ5Om51bGw9PT1pJiYoaT1mKSx2b2lkIDA9PT1vP289dGhpcy5mcmFnbWVudDpudWxsPT09byYmKG89ZiksdD09PXRoaXMuc2NoZW1lJiZuPT09dGhpcy5hdXRob3JpdHkmJnI9PT10aGlzLnBhdGgmJmk9PT10aGlzLnF1ZXJ5JiZvPT09dGhpcy5mcmFnbWVudD90aGlzOm5ldyBiKHQsbixyLGksbyl9LGUucGFyc2U9ZnVuY3Rpb24oZSx0KXt2b2lkIDA9PT10JiYodD0hMSk7dmFyIG49bS5leGVjKGUpO3JldHVybiBuP25ldyBiKG5bMl18fGYsRShuWzRdfHxmKSxFKG5bNV18fGYpLEUobls3XXx8ZiksRShuWzldfHxmKSx0KTpuZXcgYihmLGYsZixmLGYpfSxlLmZpbGU9ZnVuY3Rpb24oZSl7dmFyIHQ9ZjtpZihyJiYoZT1lLnJlcGxhY2UoL1xcL2csZCkpLGVbMF09PT1kJiZlWzFdPT09ZCl7dmFyIG49ZS5pbmRleE9mKGQsMik7LTE9PT1uPyh0PWUuc3Vic3RyaW5nKDIpLGU9ZCk6KHQ9ZS5zdWJzdHJpbmcoMixuKSxlPWUuc3Vic3RyaW5nKG4pfHxkKX1yZXR1cm4gbmV3IGIoImZpbGUiLHQsZSxmLGYpfSxlLmZyb209ZnVuY3Rpb24oZSl7dmFyIHQ9bmV3IGIoZS5zY2hlbWUsZS5hdXRob3JpdHksZS5wYXRoLGUucXVlcnksZS5mcmFnbWVudCk7cmV0dXJuIGgodCwhMCksdH0sZS5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oZSl7cmV0dXJuIHZvaWQgMD09PWUmJihlPSExKSxfKHRoaXMsZSl9LGUucHJvdG90eXBlLnRvSlNPTj1mdW5jdGlvbigpe3JldHVybiB0aGlzfSxlLnJldml2ZT1mdW5jdGlvbih0KXtpZih0KXtpZih0IGluc3RhbmNlb2YgZSlyZXR1cm4gdDt2YXIgbj1uZXcgYih0KTtyZXR1cm4gbi5fZm9ybWF0dGVkPXQuZXh0ZXJuYWwsbi5fZnNQYXRoPXQuX3NlcD09PXA/dC5mc1BhdGg6bnVsbCxufXJldHVybiB0fSxlfSgpLHA9cj8xOnZvaWQgMCxiPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoKXt2YXIgdD1udWxsIT09ZSYmZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl8fHRoaXM7cmV0dXJuIHQuX2Zvcm1hdHRlZD1udWxsLHQuX2ZzUGF0aD1udWxsLHR9cmV0dXJuIHModCxlKSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsImZzUGF0aCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9mc1BhdGh8fCh0aGlzLl9mc1BhdGg9dyh0aGlzLCExKSksdGhpcy5fZnNQYXRofSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLHQucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKGUpe3JldHVybiB2b2lkIDA9PT1lJiYoZT0hMSksZT9fKHRoaXMsITApOih0aGlzLl9mb3JtYXR0ZWR8fCh0aGlzLl9mb3JtYXR0ZWQ9Xyh0aGlzLCExKSksdGhpcy5fZm9ybWF0dGVkKX0sdC5wcm90b3R5cGUudG9KU09OPWZ1bmN0aW9uKCl7dmFyIGU9eyRtaWQ6MX07cmV0dXJuIHRoaXMuX2ZzUGF0aCYmKGUuZnNQYXRoPXRoaXMuX2ZzUGF0aCxlLl9zZXA9cCksdGhpcy5fZm9ybWF0dGVkJiYoZS5leHRlcm5hbD10aGlzLl9mb3JtYXR0ZWQpLHRoaXMucGF0aCYmKGUucGF0aD10aGlzLnBhdGgpLHRoaXMuc2NoZW1lJiYoZS5zY2hlbWU9dGhpcy5zY2hlbWUpLHRoaXMuYXV0aG9yaXR5JiYoZS5hdXRob3JpdHk9dGhpcy5hdXRob3JpdHkpLHRoaXMucXVlcnkmJihlLnF1ZXJ5PXRoaXMucXVlcnkpLHRoaXMuZnJhZ21lbnQmJihlLmZyYWdtZW50PXRoaXMuZnJhZ21lbnQpLGV9LHR9KGcpLHY9KChhPXt9KVs1OF09IiUzQSIsYVs0N109IiUyRiIsYVs2M109IiUzRiIsYVszNV09IiUyMyIsYVs5MV09IiU1QiIsYVs5M109IiU1RCIsYVs2NF09IiU0MCIsYVszM109IiUyMSIsYVszNl09IiUyNCIsYVszOF09IiUyNiIsYVszOV09IiUyNyIsYVs0MF09IiUyOCIsYVs0MV09IiUyOSIsYVs0Ml09IiUyQSIsYVs0M109IiUyQiIsYVs0NF09IiUyQyIsYVs1OV09IiUzQiIsYVs2MV09IiUzRCIsYVszMl09IiUyMCIsYSk7ZnVuY3Rpb24geShlLHQpe2Zvcih2YXIgbj12b2lkIDAscj0tMSxpPTA7aTxlLmxlbmd0aDtpKyspe3ZhciBvPWUuY2hhckNvZGVBdChpKTtpZihvPj05NyYmbzw9MTIyfHxvPj02NSYmbzw9OTB8fG8+PTQ4JiZvPD01N3x8NDU9PT1vfHw0Nj09PW98fDk1PT09b3x8MTI2PT09b3x8dCYmNDc9PT1vKS0xIT09ciYmKG4rPWVuY29kZVVSSUNvbXBvbmVudChlLnN1YnN0cmluZyhyLGkpKSxyPS0xKSx2b2lkIDAhPT1uJiYobis9ZS5jaGFyQXQoaSkpO2Vsc2V7dm9pZCAwPT09biYmKG49ZS5zdWJzdHIoMCxpKSk7dmFyIGE9dltvXTt2b2lkIDAhPT1hPygtMSE9PXImJihuKz1lbmNvZGVVUklDb21wb25lbnQoZS5zdWJzdHJpbmcocixpKSkscj0tMSksbis9YSk6LTE9PT1yJiYocj1pKX19cmV0dXJuLTEhPT1yJiYobis9ZW5jb2RlVVJJQ29tcG9uZW50KGUuc3Vic3RyaW5nKHIpKSksdm9pZCAwIT09bj9uOmV9ZnVuY3Rpb24gQyhlKXtmb3IodmFyIHQ9dm9pZCAwLG49MDtuPGUubGVuZ3RoO24rKyl7dmFyIHI9ZS5jaGFyQ29kZUF0KG4pOzM1PT09cnx8NjM9PT1yPyh2b2lkIDA9PT10JiYodD1lLnN1YnN0cigwLG4pKSx0Kz12W3JdKTp2b2lkIDAhPT10JiYodCs9ZVtuXSl9cmV0dXJuIHZvaWQgMCE9PXQ/dDplfWZ1bmN0aW9uIHcoZSx0KXt2YXIgbjtyZXR1cm4gbj1lLmF1dGhvcml0eSYmZS5wYXRoLmxlbmd0aD4xJiYiZmlsZSI9PT1lLnNjaGVtZT8iLy8iLmNvbmNhdChlLmF1dGhvcml0eSkuY29uY2F0KGUucGF0aCk6NDc9PT1lLnBhdGguY2hhckNvZGVBdCgwKSYmKGUucGF0aC5jaGFyQ29kZUF0KDEpPj02NSYmZS5wYXRoLmNoYXJDb2RlQXQoMSk8PTkwfHxlLnBhdGguY2hhckNvZGVBdCgxKT49OTcmJmUucGF0aC5jaGFyQ29kZUF0KDEpPD0xMjIpJiY1OD09PWUucGF0aC5jaGFyQ29kZUF0KDIpP3Q/ZS5wYXRoLnN1YnN0cigxKTplLnBhdGhbMV0udG9Mb3dlckNhc2UoKStlLnBhdGguc3Vic3RyKDIpOmUucGF0aCxyJiYobj1uLnJlcGxhY2UoL1wvL2csIlxcIikpLG59ZnVuY3Rpb24gXyhlLHQpe3ZhciBuPXQ/Qzp5LHI9IiIsaT1lLnNjaGVtZSxvPWUuYXV0aG9yaXR5LGE9ZS5wYXRoLHM9ZS5xdWVyeSxjPWUuZnJhZ21lbnQ7aWYoaSYmKHIrPWkscis9IjoiKSwob3x8ImZpbGUiPT09aSkmJihyKz1kLHIrPWQpLG8pe3ZhciBsPW8uaW5kZXhPZigiQCIpO2lmKC0xIT09bCl7dmFyIHU9by5zdWJzdHIoMCxsKTtvPW8uc3Vic3RyKGwrMSksLTE9PT0obD11LmluZGV4T2YoIjoiKSk/cis9bih1LCExKToocis9bih1LnN1YnN0cigwLGwpLCExKSxyKz0iOiIscis9bih1LnN1YnN0cihsKzEpLCExKSkscis9IkAifS0xPT09KGw9KG89by50b0xvd2VyQ2FzZSgpKS5pbmRleE9mKCI6IikpP3IrPW4obywhMSk6KHIrPW4oby5zdWJzdHIoMCxsKSwhMSkscis9by5zdWJzdHIobCkpfWlmKGEpe2lmKGEubGVuZ3RoPj0zJiY0Nz09PWEuY2hhckNvZGVBdCgwKSYmNTg9PT1hLmNoYXJDb2RlQXQoMikpKGg9YS5jaGFyQ29kZUF0KDEpKT49NjUmJmg8PTkwJiYoYT0iLyIuY29uY2F0KFN0cmluZy5mcm9tQ2hhckNvZGUoaCszMiksIjoiKS5jb25jYXQoYS5zdWJzdHIoMykpKTtlbHNlIGlmKGEubGVuZ3RoPj0yJiY1OD09PWEuY2hhckNvZGVBdCgxKSl7dmFyIGg7KGg9YS5jaGFyQ29kZUF0KDApKT49NjUmJmg8PTkwJiYoYT0iIi5jb25jYXQoU3RyaW5nLmZyb21DaGFyQ29kZShoKzMyKSwiOiIpLmNvbmNhdChhLnN1YnN0cigyKSkpfXIrPW4oYSwhMCl9cmV0dXJuIHMmJihyKz0iPyIscis9bihzLCExKSksYyYmKHIrPSIjIixyKz10P2M6eShjLCExKSkscn1mdW5jdGlvbiBTKGUpe3RyeXtyZXR1cm4gZGVjb2RlVVJJQ29tcG9uZW50KGUpfWNhdGNoKHQpe3JldHVybiBlLmxlbmd0aD4zP2Uuc3Vic3RyKDAsMykrUyhlLnN1YnN0cigzKSk6ZX19dmFyIEE9LyglWzAtOUEtWmEtel1bMC05QS1aYS16XSkrL2c7ZnVuY3Rpb24gRShlKXtyZXR1cm4gZS5tYXRjaChBKT9lLnJlcGxhY2UoQSwoZnVuY3Rpb24oZSl7cmV0dXJuIFMoZSl9KSk6ZX12YXIgeCxOLGs9big0NzApLEw9ZnVuY3Rpb24oZSx0LG4pe2lmKG58fDI9PT1hcmd1bWVudHMubGVuZ3RoKWZvcih2YXIgcixpPTAsbz10Lmxlbmd0aDtpPG87aSsrKSFyJiZpIGluIHR8fChyfHwocj1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbCh0LDAsaSkpLHJbaV09dFtpXSk7cmV0dXJuIGUuY29uY2F0KHJ8fEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHQpKX0sVD1rLnBvc2l4fHxrOyhOPXh8fCh4PXt9KSkuam9pblBhdGg9ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PVtdLG49MTtuPGFyZ3VtZW50cy5sZW5ndGg7bisrKXRbbi0xXT1hcmd1bWVudHNbbl07cmV0dXJuIGUud2l0aCh7cGF0aDpULmpvaW4uYXBwbHkoVCxMKFtlLnBhdGhdLHQsITEpKX0pfSxOLnJlc29sdmVQYXRoPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD1bXSxuPTE7bjxhcmd1bWVudHMubGVuZ3RoO24rKyl0W24tMV09YXJndW1lbnRzW25dO3ZhciByPWUucGF0aHx8Ii8iO3JldHVybiBlLndpdGgoe3BhdGg6VC5yZXNvbHZlLmFwcGx5KFQsTChbcl0sdCwhMSkpfSl9LE4uZGlybmFtZT1mdW5jdGlvbihlKXt2YXIgdD1ULmRpcm5hbWUoZS5wYXRoKTtyZXR1cm4gMT09PXQubGVuZ3RoJiY0Nj09PXQuY2hhckNvZGVBdCgwKT9lOmUud2l0aCh7cGF0aDp0fSl9LE4uYmFzZW5hbWU9ZnVuY3Rpb24oZSl7cmV0dXJuIFQuYmFzZW5hbWUoZS5wYXRoKX0sTi5leHRuYW1lPWZ1bmN0aW9uKGUpe3JldHVybiBULmV4dG5hbWUoZS5wYXRoKX19fSx0PXt9O2Z1bmN0aW9uIG4ocil7aWYodFtyXSlyZXR1cm4gdFtyXS5leHBvcnRzO3ZhciBpPXRbcl09e2V4cG9ydHM6e319O3JldHVybiBlW3JdKGksaS5leHBvcnRzLG4pLGkuZXhwb3J0c31yZXR1cm4gbi5kPShlLHQpPT57Zm9yKHZhciByIGluIHQpbi5vKHQscikmJiFuLm8oZSxyKSYmT2JqZWN0LmRlZmluZVByb3BlcnR5KGUscix7ZW51bWVyYWJsZTohMCxnZXQ6dFtyXX0pfSxuLm89KGUsdCk9Pk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLHQpLG4ucj1lPT57InVuZGVmaW5lZCIhPXR5cGVvZiBTeW1ib2wmJlN5bWJvbC50b1N0cmluZ1RhZyYmT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsU3ltYm9sLnRvU3RyaW5nVGFnLHt2YWx1ZToiTW9kdWxlIn0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KX0sbig0NDcpfSkoKTt2YXJ7VVJJOl9hLFV0aWxzOlNhfT12YTtmdW5jdGlvbiBBYShlLHQpe2lmKCJzdHJpbmciIT10eXBlb2YgZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJFeHBlY3RlZCBhIHN0cmluZyIpO2Zvcih2YXIgbixyPVN0cmluZyhlKSxpPSIiLG89ISF0JiYhIXQuZXh0ZW5kZWQsYT0hIXQmJiEhdC5nbG9ic3RhcixzPSExLGM9dCYmInN0cmluZyI9PXR5cGVvZiB0LmZsYWdzP3QuZmxhZ3M6IiIsbD0wLHU9ci5sZW5ndGg7bDx1O2wrKylzd2l0Y2gobj1yW2xdKXtjYXNlIi8iOmNhc2UiJCI6Y2FzZSJeIjpjYXNlIisiOmNhc2UiLiI6Y2FzZSIoIjpjYXNlIikiOmNhc2UiPSI6Y2FzZSIhIjpjYXNlInwiOmkrPSJcXCIrbjticmVhaztjYXNlIj8iOmlmKG8pe2krPSIuIjticmVha31jYXNlIlsiOmNhc2UiXSI6aWYobyl7aSs9bjticmVha31jYXNlInsiOmlmKG8pe3M9ITAsaSs9IigiO2JyZWFrfWNhc2UifSI6aWYobyl7cz0hMSxpKz0iKSI7YnJlYWt9Y2FzZSIsIjppZihzKXtpKz0ifCI7YnJlYWt9aSs9IlxcIituO2JyZWFrO2Nhc2UiKiI6Zm9yKHZhciBoPXJbbC0xXSxmPTE7IioiPT09cltsKzFdOylmKyssbCsrO3ZhciBkPXJbbCsxXTtpZihhKWY+MSYmKCIvIj09PWh8fHZvaWQgMD09PWh8fCJ7Ij09PWh8fCIsIj09PWgpJiYoIi8iPT09ZHx8dm9pZCAwPT09ZHx8IiwiPT09ZHx8In0iPT09ZCk/KCIvIj09PWQ/bCsrOiIvIj09PWgmJmkuZW5kc1dpdGgoIlxcLyIpJiYoaT1pLnN1YnN0cigwLGkubGVuZ3RoLTIpKSxpKz0iKCg/OlteL10qKD86L3wkKSkqKSIpOmkrPSIoW14vXSopIjtlbHNlIGkrPSIuKiI7YnJlYWs7ZGVmYXVsdDppKz1ufXJldHVybiBjJiZ+Yy5pbmRleE9mKCJnIil8fChpPSJeIitpKyIkIiksbmV3IFJlZ0V4cChpLGMpfXZhciBFYSx4YT1ObygpLE5hPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHQpe3RoaXMuZ2xvYldyYXBwZXJzPVtdO3RyeXtmb3IodmFyIG49MCxyPWU7bjxyLmxlbmd0aDtuKyspe3ZhciBpPXJbbl0sbz0iISIhPT1pWzBdO298fChpPWkuc3Vic3RyaW5nKDEpKSxpLmxlbmd0aD4wJiYoIi8iPT09aVswXSYmKGk9aS5zdWJzdHJpbmcoMSkpLHRoaXMuZ2xvYldyYXBwZXJzLnB1c2goe3JlZ2V4cDpBYSgiKiovIitpLHtleHRlbmRlZDohMCxnbG9ic3RhcjohMH0pLGluY2x1ZGU6b30pKX10aGlzLnVyaXM9dH1jYXRjaChlKXt0aGlzLmdsb2JXcmFwcGVycy5sZW5ndGg9MCx0aGlzLnVyaXM9W119fXJldHVybiBlLnByb3RvdHlwZS5tYXRjaGVzUGF0dGVybj1mdW5jdGlvbihlKXtmb3IodmFyIHQ9ITEsbj0wLHI9dGhpcy5nbG9iV3JhcHBlcnM7bjxyLmxlbmd0aDtuKyspe3ZhciBpPXJbbl0sbz1pLnJlZ2V4cCxhPWkuaW5jbHVkZTtvLnRlc3QoZSkmJih0PWEpfXJldHVybiB0fSxlLnByb3RvdHlwZS5nZXRVUklzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudXJpc30sZX0oKSxrYT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSx0LG4pe3RoaXMuc2VydmljZT1lLHRoaXMudXJpPXQsdGhpcy5kZXBlbmRlbmNpZXM9bmV3IFNldCx0aGlzLmFuY2hvcnM9dm9pZCAwLG4mJih0aGlzLnVucmVzb2x2ZWRTY2hlbWE9dGhpcy5zZXJ2aWNlLnByb21pc2UucmVzb2x2ZShuZXcgTGEobikpKX1yZXR1cm4gZS5wcm90b3R5cGUuZ2V0VW5yZXNvbHZlZFNjaGVtYT1mdW5jdGlvbigpe3JldHVybiB0aGlzLnVucmVzb2x2ZWRTY2hlbWF8fCh0aGlzLnVucmVzb2x2ZWRTY2hlbWE9dGhpcy5zZXJ2aWNlLmxvYWRTY2hlbWEodGhpcy51cmkpKSx0aGlzLnVucmVzb2x2ZWRTY2hlbWF9LGUucHJvdG90eXBlLmdldFJlc29sdmVkU2NoZW1hPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcztyZXR1cm4gdGhpcy5yZXNvbHZlZFNjaGVtYXx8KHRoaXMucmVzb2x2ZWRTY2hlbWE9dGhpcy5nZXRVbnJlc29sdmVkU2NoZW1hKCkudGhlbigoZnVuY3Rpb24odCl7cmV0dXJuIGUuc2VydmljZS5yZXNvbHZlU2NoZW1hQ29udGVudCh0LGUpfSkpKSx0aGlzLnJlc29sdmVkU2NoZW1hfSxlLnByb3RvdHlwZS5jbGVhclNjaGVtYT1mdW5jdGlvbigpe3ZhciBlPSEhdGhpcy51bnJlc29sdmVkU2NoZW1hO3JldHVybiB0aGlzLnJlc29sdmVkU2NoZW1hPXZvaWQgMCx0aGlzLnVucmVzb2x2ZWRTY2hlbWE9dm9pZCAwLHRoaXMuZGVwZW5kZW5jaWVzLmNsZWFyKCksdGhpcy5hbmNob3JzPXZvaWQgMCxlfSxlfSgpLExhPWZ1bmN0aW9uKGUsdCl7dm9pZCAwPT09dCYmKHQ9W10pLHRoaXMuc2NoZW1hPWUsdGhpcy5lcnJvcnM9dH0sVGE9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsdCl7dm9pZCAwPT09dCYmKHQ9W10pLHRoaXMuc2NoZW1hPWUsdGhpcy5lcnJvcnM9dH1yZXR1cm4gZS5wcm90b3R5cGUuZ2V0U2VjdGlvbj1mdW5jdGlvbihlKXt2YXIgdD10aGlzLmdldFNlY3Rpb25SZWN1cnNpdmUoZSx0aGlzLnNjaGVtYSk7aWYodClyZXR1cm4gQm8odCl9LGUucHJvdG90eXBlLmdldFNlY3Rpb25SZWN1cnNpdmU9ZnVuY3Rpb24oZSx0KXtpZighdHx8ImJvb2xlYW4iPT10eXBlb2YgdHx8MD09PWUubGVuZ3RoKXJldHVybiB0O3ZhciBuPWUuc2hpZnQoKTtpZih0LnByb3BlcnRpZXMmJih0LnByb3BlcnRpZXNbbl0sMSkpcmV0dXJuIHRoaXMuZ2V0U2VjdGlvblJlY3Vyc2l2ZShlLHQucHJvcGVydGllc1tuXSk7aWYodC5wYXR0ZXJuUHJvcGVydGllcylmb3IodmFyIHI9MCxpPU9iamVjdC5rZXlzKHQucGF0dGVyblByb3BlcnRpZXMpO3I8aS5sZW5ndGg7cisrKXt2YXIgbz1pW3JdLGE9aGkobyk7aWYobnVsbD09YT92b2lkIDA6YS50ZXN0KG4pKXJldHVybiB0aGlzLmdldFNlY3Rpb25SZWN1cnNpdmUoZSx0LnBhdHRlcm5Qcm9wZXJ0aWVzW29dKX1lbHNle2lmKCJvYmplY3QiPT10eXBlb2YgdC5hZGRpdGlvbmFsUHJvcGVydGllcylyZXR1cm4gdGhpcy5nZXRTZWN0aW9uUmVjdXJzaXZlKGUsdC5hZGRpdGlvbmFsUHJvcGVydGllcyk7aWYobi5tYXRjaCgiWzAtOV0rIikpaWYoQXJyYXkuaXNBcnJheSh0Lml0ZW1zKSl7dmFyIHM9cGFyc2VJbnQobiwxMCk7aWYoIWlzTmFOKHMpJiZ0Lml0ZW1zW3NdKXJldHVybiB0aGlzLmdldFNlY3Rpb25SZWN1cnNpdmUoZSx0Lml0ZW1zW3NdKX1lbHNlIGlmKHQuaXRlbXMpcmV0dXJuIHRoaXMuZ2V0U2VjdGlvblJlY3Vyc2l2ZShlLHQuaXRlbXMpfX0sZX0oKSxPYT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSx0LG4pe3RoaXMuY29udGV4dFNlcnZpY2U9dCx0aGlzLnJlcXVlc3RTZXJ2aWNlPWUsdGhpcy5wcm9taXNlQ29uc3RydWN0b3I9bnx8UHJvbWlzZSx0aGlzLmNhbGxPbkRpc3Bvc2U9W10sdGhpcy5jb250cmlidXRpb25TY2hlbWFzPXt9LHRoaXMuY29udHJpYnV0aW9uQXNzb2NpYXRpb25zPVtdLHRoaXMuc2NoZW1hc0J5SWQ9e30sdGhpcy5maWxlUGF0dGVybkFzc29jaWF0aW9ucz1bXSx0aGlzLnJlZ2lzdGVyZWRTY2hlbWFzSWRzPXt9fXJldHVybiBlLnByb3RvdHlwZS5nZXRSZWdpc3RlcmVkU2NoZW1hSWRzPWZ1bmN0aW9uKGUpe3JldHVybiBPYmplY3Qua2V5cyh0aGlzLnJlZ2lzdGVyZWRTY2hlbWFzSWRzKS5maWx0ZXIoKGZ1bmN0aW9uKHQpe3ZhciBuPV9hLnBhcnNlKHQpLnNjaGVtZTtyZXR1cm4ic2NoZW1hc2VydmljZSIhPT1uJiYoIWV8fGUobikpfSkpfSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsInByb21pc2UiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wcm9taXNlQ29uc3RydWN0b3J9LGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEwfSksZS5wcm90b3R5cGUuZGlzcG9zZT1mdW5jdGlvbigpe2Zvcig7dGhpcy5jYWxsT25EaXNwb3NlLmxlbmd0aD4wOyl0aGlzLmNhbGxPbkRpc3Bvc2UucG9wKCkoKX0sZS5wcm90b3R5cGUub25SZXNvdXJjZUNoYW5nZT1mdW5jdGlvbihlKXt2YXIgdD10aGlzO3RoaXMuY2FjaGVkU2NoZW1hRm9yUmVzb3VyY2U9dm9pZCAwO2Zvcih2YXIgbj0hMSxyPVtlPU1hKGUpXSxpPU9iamVjdC5rZXlzKHRoaXMuc2NoZW1hc0J5SWQpLm1hcCgoZnVuY3Rpb24oZSl7cmV0dXJuIHQuc2NoZW1hc0J5SWRbZV19KSk7ci5sZW5ndGg7KWZvcih2YXIgbz1yLnBvcCgpLGE9MDthPGkubGVuZ3RoO2ErKyl7dmFyIHM9aVthXTtzJiYocy51cmk9PT1vfHxzLmRlcGVuZGVuY2llcy5oYXMobykpJiYocy51cmkhPT1vJiZyLnB1c2gocy51cmkpLHMuY2xlYXJTY2hlbWEoKSYmKG49ITApLGlbYV09dm9pZCAwKX1yZXR1cm4gbn0sZS5wcm90b3R5cGUuc2V0U2NoZW1hQ29udHJpYnV0aW9ucz1mdW5jdGlvbihlKXtpZihlLnNjaGVtYXMpe3ZhciB0PWUuc2NoZW1hcztmb3IodmFyIG4gaW4gdCl7dmFyIHI9TWEobik7dGhpcy5jb250cmlidXRpb25TY2hlbWFzW3JdPXRoaXMuYWRkU2NoZW1hSGFuZGxlKHIsdFtuXSl9fWlmKEFycmF5LmlzQXJyYXkoZS5zY2hlbWFBc3NvY2lhdGlvbnMpKWZvcih2YXIgaT0wLG89ZS5zY2hlbWFBc3NvY2lhdGlvbnM7aTxvLmxlbmd0aDtpKyspe3ZhciBhPW9baV0scz1hLnVyaXMubWFwKE1hKSxjPXRoaXMuYWRkRmlsZVBhdHRlcm5Bc3NvY2lhdGlvbihhLnBhdHRlcm4scyk7dGhpcy5jb250cmlidXRpb25Bc3NvY2lhdGlvbnMucHVzaChjKX19LGUucHJvdG90eXBlLmFkZFNjaGVtYUhhbmRsZT1mdW5jdGlvbihlLHQpe3ZhciBuPW5ldyBrYSh0aGlzLGUsdCk7cmV0dXJuIHRoaXMuc2NoZW1hc0J5SWRbZV09bixufSxlLnByb3RvdHlwZS5nZXRPckFkZFNjaGVtYUhhbmRsZT1mdW5jdGlvbihlLHQpe3JldHVybiB0aGlzLnNjaGVtYXNCeUlkW2VdfHx0aGlzLmFkZFNjaGVtYUhhbmRsZShlLHQpfSxlLnByb3RvdHlwZS5hZGRGaWxlUGF0dGVybkFzc29jaWF0aW9uPWZ1bmN0aW9uKGUsdCl7dmFyIG49bmV3IE5hKGUsdCk7cmV0dXJuIHRoaXMuZmlsZVBhdHRlcm5Bc3NvY2lhdGlvbnMucHVzaChuKSxufSxlLnByb3RvdHlwZS5yZWdpc3RlckV4dGVybmFsU2NoZW1hPWZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1NYShlKTtyZXR1cm4gdGhpcy5yZWdpc3RlcmVkU2NoZW1hc0lkc1tyXT0hMCx0aGlzLmNhY2hlZFNjaGVtYUZvclJlc291cmNlPXZvaWQgMCx0JiZ0aGlzLmFkZEZpbGVQYXR0ZXJuQXNzb2NpYXRpb24odCxbcl0pLG4/dGhpcy5hZGRTY2hlbWFIYW5kbGUocixuKTp0aGlzLmdldE9yQWRkU2NoZW1hSGFuZGxlKHIpfSxlLnByb3RvdHlwZS5jbGVhckV4dGVybmFsU2NoZW1hcz1mdW5jdGlvbigpe2Zvcih2YXIgZSBpbiB0aGlzLnNjaGVtYXNCeUlkPXt9LHRoaXMuZmlsZVBhdHRlcm5Bc3NvY2lhdGlvbnM9W10sdGhpcy5yZWdpc3RlcmVkU2NoZW1hc0lkcz17fSx0aGlzLmNhY2hlZFNjaGVtYUZvclJlc291cmNlPXZvaWQgMCx0aGlzLmNvbnRyaWJ1dGlvblNjaGVtYXMpdGhpcy5zY2hlbWFzQnlJZFtlXT10aGlzLmNvbnRyaWJ1dGlvblNjaGVtYXNbZV0sdGhpcy5yZWdpc3RlcmVkU2NoZW1hc0lkc1tlXT0hMDtmb3IodmFyIHQ9MCxuPXRoaXMuY29udHJpYnV0aW9uQXNzb2NpYXRpb25zO3Q8bi5sZW5ndGg7dCsrKXt2YXIgcj1uW3RdO3RoaXMuZmlsZVBhdHRlcm5Bc3NvY2lhdGlvbnMucHVzaChyKX19LGUucHJvdG90eXBlLmdldFJlc29sdmVkU2NoZW1hPWZ1bmN0aW9uKGUpe3ZhciB0PU1hKGUpLG49dGhpcy5zY2hlbWFzQnlJZFt0XTtyZXR1cm4gbj9uLmdldFJlc29sdmVkU2NoZW1hKCk6dGhpcy5wcm9taXNlLnJlc29sdmUodm9pZCAwKX0sZS5wcm90b3R5cGUubG9hZFNjaGVtYT1mdW5jdGlvbihlKXtpZighdGhpcy5yZXF1ZXN0U2VydmljZSl7dmFyIHQ9eGEoImpzb24uc2NoZW1hLm5vcmVxdWVzdHNlcnZpY2UiLCJVbmFibGUgdG8gbG9hZCBzY2hlbWEgZnJvbSAnezB9Jy4gTm8gc2NoZW1hIHJlcXVlc3Qgc2VydmljZSBhdmFpbGFibGUiLFBhKGUpKTtyZXR1cm4gdGhpcy5wcm9taXNlLnJlc29sdmUobmV3IExhKHt9LFt0XSkpfXJldHVybiB0aGlzLnJlcXVlc3RTZXJ2aWNlKGUpLnRoZW4oKGZ1bmN0aW9uKHQpe2lmKCF0KXt2YXIgbj14YSgianNvbi5zY2hlbWEubm9jb250ZW50IiwiVW5hYmxlIHRvIGxvYWQgc2NoZW1hIGZyb20gJ3swfSc6IE5vIGNvbnRlbnQuIixQYShlKSk7cmV0dXJuIG5ldyBMYSh7fSxbbl0pfXZhciByLGk9W107cj1uaSh0LGkpO3ZhciBvPWkubGVuZ3RoP1t4YSgianNvbi5zY2hlbWEuaW52YWxpZEZvcm1hdCIsIlVuYWJsZSB0byBwYXJzZSBjb250ZW50IGZyb20gJ3swfSc6IFBhcnNlIGVycm9yIGF0IG9mZnNldCB7MX0uIixQYShlKSxpWzBdLm9mZnNldCldOltdO3JldHVybiBuZXcgTGEocixvKX0pLChmdW5jdGlvbih0KXt2YXIgbj10LnRvU3RyaW5nKCkscj10LnRvU3RyaW5nKCkuc3BsaXQoIkVycm9yOiAiKTtyZXR1cm4gci5sZW5ndGg+MSYmKG49clsxXSksdWkobiwiLiIpJiYobj1uLnN1YnN0cigwLG4ubGVuZ3RoLTEpKSxuZXcgTGEoe30sW3hhKCJqc29uLnNjaGVtYS5ub2NvbnRlbnQiLCJVbmFibGUgdG8gbG9hZCBzY2hlbWEgZnJvbSAnezB9JzogezF9LiIsUGEoZSksbildKX0pKX0sZS5wcm90b3R5cGUucmVzb2x2ZVNjaGVtYUNvbnRlbnQ9ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzLHI9ZS5lcnJvcnMuc2xpY2UoMCksaT1lLnNjaGVtYTtpZihpLiRzY2hlbWEpe3ZhciBvPU1hKGkuJHNjaGVtYSk7aWYoImh0dHA6Ly9qc29uLXNjaGVtYS5vcmcvZHJhZnQtMDMvc2NoZW1hIj09PW8pcmV0dXJuIHRoaXMucHJvbWlzZS5yZXNvbHZlKG5ldyBUYSh7fSxbeGEoImpzb24uc2NoZW1hLmRyYWZ0MDMubm90c3VwcG9ydGVkIiwiRHJhZnQtMDMgc2NoZW1hcyBhcmUgbm90IHN1cHBvcnRlZC4iKV0pKTsiaHR0cHM6Ly9qc29uLXNjaGVtYS5vcmcvZHJhZnQvMjAxOS0wOS9zY2hlbWEiPT09bz9yLnB1c2goeGEoImpzb24uc2NoZW1hLmRyYWZ0MjAxOTA5Lm5vdHN1cHBvcnRlZCIsIkRyYWZ0IDIwMTktMDkgc2NoZW1hcyBhcmUgbm90IHlldCBmdWxseSBzdXBwb3J0ZWQuIikpOiJodHRwczovL2pzb24tc2NoZW1hLm9yZy9kcmFmdC8yMDIwLTEyL3NjaGVtYSI9PT1vJiZyLnB1c2goeGEoImpzb24uc2NoZW1hLmRyYWZ0MjAyMDEyLm5vdHN1cHBvcnRlZCIsIkRyYWZ0IDIwMjAtMTIgc2NoZW1hcyBhcmUgbm90IHlldCBmdWxseSBzdXBwb3J0ZWQuIikpfXZhciBhPXRoaXMuY29udGV4dFNlcnZpY2Uscz1mdW5jdGlvbihlLHQsbixpKXt2YXIgbyxhLHMsYzt2b2lkIDA9PT1pfHwwPT09aS5sZW5ndGg/bz10OiIvIj09PWkuY2hhckF0KDApP289ZnVuY3Rpb24oZSx0KXt0PWRlY29kZVVSSUNvbXBvbmVudCh0KTt2YXIgbj1lO3JldHVybiIvIj09PXRbMF0mJih0PXQuc3Vic3RyaW5nKDEpKSx0LnNwbGl0KCIvIikuc29tZSgoZnVuY3Rpb24oZSl7cmV0dXJuIGU9ZS5yZXBsYWNlKC9+MS9nLCIvIikucmVwbGFjZSgvfjAvZywifiIpLCEobj1uW2VdKX0pKSxufSh0LGkpOihhPXQsYz1pLChzPW4pLmFuY2hvcnN8fChzLmFuY2hvcnM9dShhKSksbz1zLmFuY2hvcnMuZ2V0KGMpKSxvP2Z1bmN0aW9uKGUsdCl7Zm9yKHZhciBuIGluIHQpdC5oYXNPd25Qcm9wZXJ0eShuKSYmIWUuaGFzT3duUHJvcGVydHkobikmJiJpZCIhPT1uJiYiJGlkIiE9PW4mJihlW25dPXRbbl0pfShlLG8pOnIucHVzaCh4YSgianNvbi5zY2hlbWEuaW52YWxpZGlkIiwiJHJlZiAnezB9JyBpbiAnezF9JyBjYW4gbm90IGJlIHJlc29sdmVkLiIsaSxuLnVyaSkpfSxjPWZ1bmN0aW9uKGUsdCxpLG8pe2EmJiEvXltBLVphLXpdW0EtWmEtejAtOStcLS4rXSo6XC9cLy4qLy50ZXN0KHQpJiYodD1hLnJlc29sdmVSZWxhdGl2ZVBhdGgodCxvLnVyaSkpLHQ9TWEodCk7dmFyIGM9bi5nZXRPckFkZFNjaGVtYUhhbmRsZSh0KTtyZXR1cm4gYy5nZXRVbnJlc29sdmVkU2NoZW1hKCkudGhlbigoZnVuY3Rpb24obil7aWYoby5kZXBlbmRlbmNpZXMuYWRkKHQpLG4uZXJyb3JzLmxlbmd0aCl7dmFyIGE9aT90KyIjIitpOnQ7ci5wdXNoKHhhKCJqc29uLnNjaGVtYS5wcm9ibGVtbG9hZGluZ3JlZiIsIlByb2JsZW1zIGxvYWRpbmcgcmVmZXJlbmNlICd7MH0nOiB7MX0iLGEsbi5lcnJvcnNbMF0pKX1yZXR1cm4gcyhlLG4uc2NoZW1hLGMsaSksbChlLG4uc2NoZW1hLGMpfSkpfSxsPWZ1bmN0aW9uKGUsdCxyKXt2YXIgaT1bXTtyZXR1cm4gbi50cmF2ZXJzZU5vZGVzKGUsKGZ1bmN0aW9uKGUpe2Zvcih2YXIgbj1uZXcgU2V0O2UuJHJlZjspe3ZhciBvPWUuJHJlZixhPW8uc3BsaXQoIiMiLDIpO2lmKGRlbGV0ZSBlLiRyZWYsYVswXS5sZW5ndGg+MClyZXR1cm4gdm9pZCBpLnB1c2goYyhlLGFbMF0sYVsxXSxyKSk7aWYoIW4uaGFzKG8pKXt2YXIgbD1hWzFdO3MoZSx0LHIsbCksbi5hZGQobyl9fX0pKSxuLnByb21pc2UuYWxsKGkpfSx1PWZ1bmN0aW9uKGUpe3ZhciB0PW5ldyBNYXA7cmV0dXJuIG4udHJhdmVyc2VOb2RlcyhlLChmdW5jdGlvbihlKXt2YXIgbj1lLiRpZHx8ZS5pZDtpZigic3RyaW5nIj09dHlwZW9mIG4mJiIjIj09PW4uY2hhckF0KDApKXt2YXIgaT1uLnN1YnN0cmluZygxKTt0LmhhcyhpKT9yLnB1c2goeGEoImpzb24uc2NoZW1hLmR1cGxpY2F0ZWlkIiwiRHVwbGljYXRlIGlkIGRlY2xhcmF0aW9uOiAnezB9JyIsbikpOnQuc2V0KGksZSl9fSkpLHR9O3JldHVybiBsKGksaSx0KS50aGVuKChmdW5jdGlvbihlKXtyZXR1cm4gbmV3IFRhKGkscil9KSl9LGUucHJvdG90eXBlLnRyYXZlcnNlTm9kZXM9ZnVuY3Rpb24oZSx0KXtpZighZXx8Im9iamVjdCIhPXR5cGVvZiBlKXJldHVybiBQcm9taXNlLnJlc29sdmUobnVsbCk7Zm9yKHZhciBuPW5ldyBTZXQscj1mdW5jdGlvbigpe2Zvcih2YXIgZT1bXSx0PTA7dDxhcmd1bWVudHMubGVuZ3RoO3QrKyllW3RdPWFyZ3VtZW50c1t0XTtmb3IodmFyIG49MCxyPWU7bjxyLmxlbmd0aDtuKyspe3ZhciBpPXJbbl07Im9iamVjdCI9PXR5cGVvZiBpJiZhLnB1c2goaSl9fSxpPWZ1bmN0aW9uKCl7Zm9yKHZhciBlPVtdLHQ9MDt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKWVbdF09YXJndW1lbnRzW3RdO2Zvcih2YXIgbj0wLHI9ZTtuPHIubGVuZ3RoO24rKyl7dmFyIGk9cltuXTtpZigib2JqZWN0Ij09dHlwZW9mIGkpZm9yKHZhciBvIGluIGkpe3ZhciBzPW8sYz1pW3NdOyJvYmplY3QiPT10eXBlb2YgYyYmYS5wdXNoKGMpfX19LG89ZnVuY3Rpb24oKXtmb3IodmFyIGU9W10sdD0wO3Q8YXJndW1lbnRzLmxlbmd0aDt0KyspZVt0XT1hcmd1bWVudHNbdF07Zm9yKHZhciBuPTAscj1lO248ci5sZW5ndGg7bisrKXt2YXIgaT1yW25dO2lmKEFycmF5LmlzQXJyYXkoaSkpZm9yKHZhciBvPTAscz1pO288cy5sZW5ndGg7bysrKXt2YXIgYz1zW29dOyJvYmplY3QiPT10eXBlb2YgYyYmYS5wdXNoKGMpfX19LGE9W2VdLHM9YS5wb3AoKTtzOyluLmhhcyhzKXx8KG4uYWRkKHMpLHQocykscihzLml0ZW1zLHMuYWRkaXRpb25hbEl0ZW1zLHMuYWRkaXRpb25hbFByb3BlcnRpZXMscy5ub3Qscy5jb250YWlucyxzLnByb3BlcnR5TmFtZXMscy5pZixzLnRoZW4scy5lbHNlKSxpKHMuZGVmaW5pdGlvbnMscy5wcm9wZXJ0aWVzLHMucGF0dGVyblByb3BlcnRpZXMscy5kZXBlbmRlbmNpZXMpLG8ocy5hbnlPZixzLmFsbE9mLHMub25lT2Yscy5pdGVtcykpLHM9YS5wb3AoKX0sZS5wcm90b3R5cGUuZ2V0U2NoZW1hRnJvbVByb3BlcnR5PWZ1bmN0aW9uKGUsdCl7dmFyIG4scjtpZigib2JqZWN0Ij09PShudWxsPT09KG49dC5yb290KXx8dm9pZCAwPT09bj92b2lkIDA6bi50eXBlKSlmb3IodmFyIGk9MCxvPXQucm9vdC5wcm9wZXJ0aWVzO2k8by5sZW5ndGg7aSsrKXt2YXIgYT1vW2ldO2lmKCIkc2NoZW1hIj09PWEua2V5Tm9kZS52YWx1ZSYmInN0cmluZyI9PT0obnVsbD09PShyPWEudmFsdWVOb2RlKXx8dm9pZCAwPT09cj92b2lkIDA6ci50eXBlKSl7dmFyIHM9YS52YWx1ZU5vZGUudmFsdWU7cmV0dXJuIHRoaXMuY29udGV4dFNlcnZpY2UmJiEvXlx3W1x3XGQrLi1dKjovLnRlc3QocykmJihzPXRoaXMuY29udGV4dFNlcnZpY2UucmVzb2x2ZVJlbGF0aXZlUGF0aChzLGUpKSxzfX19LGUucHJvdG90eXBlLmdldEFzc29jaWF0ZWRTY2hlbWFzPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD1PYmplY3QuY3JlYXRlKG51bGwpLG49W10scj1mdW5jdGlvbihlKXt0cnl7cmV0dXJuIF9hLnBhcnNlKGUpLndpdGgoe2ZyYWdtZW50Om51bGwscXVlcnk6bnVsbH0pLnRvU3RyaW5nKCEwKX1jYXRjaCh0KXtyZXR1cm4gZX19KGUpLGk9MCxvPXRoaXMuZmlsZVBhdHRlcm5Bc3NvY2lhdGlvbnM7aTxvLmxlbmd0aDtpKyspe3ZhciBhPW9baV07aWYoYS5tYXRjaGVzUGF0dGVybihyKSlmb3IodmFyIHM9MCxjPWEuZ2V0VVJJcygpO3M8Yy5sZW5ndGg7cysrKXt2YXIgbD1jW3NdO3RbbF18fChuLnB1c2gobCksdFtsXT0hMCl9fXJldHVybiBufSxlLnByb3RvdHlwZS5nZXRTY2hlbWFVUklzRm9yUmVzb3VyY2U9ZnVuY3Rpb24oZSx0KXt2YXIgbj10JiZ0aGlzLmdldFNjaGVtYUZyb21Qcm9wZXJ0eShlLHQpO3JldHVybiBuP1tuXTp0aGlzLmdldEFzc29jaWF0ZWRTY2hlbWFzKGUpfSxlLnByb3RvdHlwZS5nZXRTY2hlbWFGb3JSZXNvdXJjZT1mdW5jdGlvbihlLHQpe2lmKHQpe3ZhciBuPXRoaXMuZ2V0U2NoZW1hRnJvbVByb3BlcnR5KGUsdCk7aWYobil7dmFyIHI9TWEobik7cmV0dXJuIHRoaXMuZ2V0T3JBZGRTY2hlbWFIYW5kbGUocikuZ2V0UmVzb2x2ZWRTY2hlbWEoKX19aWYodGhpcy5jYWNoZWRTY2hlbWFGb3JSZXNvdXJjZSYmdGhpcy5jYWNoZWRTY2hlbWFGb3JSZXNvdXJjZS5yZXNvdXJjZT09PWUpcmV0dXJuIHRoaXMuY2FjaGVkU2NoZW1hRm9yUmVzb3VyY2UucmVzb2x2ZWRTY2hlbWE7dmFyIGk9dGhpcy5nZXRBc3NvY2lhdGVkU2NoZW1hcyhlKSxvPWkubGVuZ3RoPjA/dGhpcy5jcmVhdGVDb21iaW5lZFNjaGVtYShlLGkpLmdldFJlc29sdmVkU2NoZW1hKCk6dGhpcy5wcm9taXNlLnJlc29sdmUodm9pZCAwKTtyZXR1cm4gdGhpcy5jYWNoZWRTY2hlbWFGb3JSZXNvdXJjZT17cmVzb3VyY2U6ZSxyZXNvbHZlZFNjaGVtYTpvfSxvfSxlLnByb3RvdHlwZS5jcmVhdGVDb21iaW5lZFNjaGVtYT1mdW5jdGlvbihlLHQpe2lmKDE9PT10Lmxlbmd0aClyZXR1cm4gdGhpcy5nZXRPckFkZFNjaGVtYUhhbmRsZSh0WzBdKTt2YXIgbj0ic2NoZW1hc2VydmljZTovL2NvbWJpbmVkU2NoZW1hLyIrZW5jb2RlVVJJQ29tcG9uZW50KGUpLHI9e2FsbE9mOnQubWFwKChmdW5jdGlvbihlKXtyZXR1cm57JHJlZjplfX0pKX07cmV0dXJuIHRoaXMuYWRkU2NoZW1hSGFuZGxlKG4scil9LGUucHJvdG90eXBlLmdldE1hdGNoaW5nU2NoZW1hcz1mdW5jdGlvbihlLHQsbil7aWYobil7dmFyIHI9bi5pZHx8InNjaGVtYXNlcnZpY2U6Ly91bnRpdGxlZC9tYXRjaGluZ1NjaGVtYXMvIitJYSsrO3JldHVybiB0aGlzLmFkZFNjaGVtYUhhbmRsZShyLG4pLmdldFJlc29sdmVkU2NoZW1hKCkudGhlbigoZnVuY3Rpb24oZSl7cmV0dXJuIHQuZ2V0TWF0Y2hpbmdTY2hlbWFzKGUuc2NoZW1hKS5maWx0ZXIoKGZ1bmN0aW9uKGUpe3JldHVybiFlLmludmVydGVkfSkpfSkpfXJldHVybiB0aGlzLmdldFNjaGVtYUZvclJlc291cmNlKGUudXJpLHQpLnRoZW4oKGZ1bmN0aW9uKGUpe3JldHVybiBlP3QuZ2V0TWF0Y2hpbmdTY2hlbWFzKGUuc2NoZW1hKS5maWx0ZXIoKGZ1bmN0aW9uKGUpe3JldHVybiFlLmludmVydGVkfSkpOltdfSkpfSxlfSgpLElhPTA7ZnVuY3Rpb24gTWEoZSl7dHJ5e3JldHVybiBfYS5wYXJzZShlKS50b1N0cmluZyghMCl9Y2F0Y2godCl7cmV0dXJuIGV9fWZ1bmN0aW9uIFBhKGUpe3RyeXt2YXIgdD1fYS5wYXJzZShlKTtpZigiZmlsZSI9PT10LnNjaGVtZSlyZXR1cm4gdC5mc1BhdGh9Y2F0Y2goZSl7fXJldHVybiBlfWZ1bmN0aW9uIFJhKGUsdCl7dmFyIG49W10scj1bXSxpPVtdLG89LTEsYT10aShlLmdldFRleHQoKSwhMSkscz1hLnNjYW4oKTtmdW5jdGlvbiBjKGUpe24ucHVzaChlKSxyLnB1c2goaS5sZW5ndGgpfWZvcig7MTchPT1zOyl7c3dpdGNoKHMpe2Nhc2UgMTpjYXNlIDM6dmFyIGw9e3N0YXJ0TGluZTpmPWUucG9zaXRpb25BdChhLmdldFRva2VuT2Zmc2V0KCkpLmxpbmUsZW5kTGluZTpmLGtpbmQ6MT09PXM/Im9iamVjdCI6ImFycmF5In07aS5wdXNoKGwpO2JyZWFrO2Nhc2UgMjpjYXNlIDQ6dmFyIHU9Mj09PXM/Im9iamVjdCI6ImFycmF5IjtpZihpLmxlbmd0aD4wJiZpW2kubGVuZ3RoLTFdLmtpbmQ9PT11KXtsPWkucG9wKCk7dmFyIGg9ZS5wb3NpdGlvbkF0KGEuZ2V0VG9rZW5PZmZzZXQoKSkubGluZTtsJiZoPmwuc3RhcnRMaW5lKzEmJm8hPT1sLnN0YXJ0TGluZSYmKGwuZW5kTGluZT1oLTEsYyhsKSxvPWwuc3RhcnRMaW5lKX1icmVhaztjYXNlIDEzOnZhciBmPWUucG9zaXRpb25BdChhLmdldFRva2VuT2Zmc2V0KCkpLmxpbmUsZD1lLnBvc2l0aW9uQXQoYS5nZXRUb2tlbk9mZnNldCgpK2EuZ2V0VG9rZW5MZW5ndGgoKSkubGluZTsxPT09YS5nZXRUb2tlbkVycm9yKCkmJmYrMTxlLmxpbmVDb3VudD9hLnNldFBvc2l0aW9uKGUub2Zmc2V0QXQodXIuY3JlYXRlKGYrMSwwKSkpOmY8ZCYmKGMoe3N0YXJ0TGluZTpmLGVuZExpbmU6ZCxraW5kOkFyLkNvbW1lbnR9KSxvPWYpO2JyZWFrO2Nhc2UgMTI6dmFyIG09ZS5nZXRUZXh0KCkuc3Vic3RyKGEuZ2V0VG9rZW5PZmZzZXQoKSxhLmdldFRva2VuTGVuZ3RoKCkpLm1hdGNoKC9eXC9cL1xzKiMocmVnaW9uXGIpfChlbmRyZWdpb25cYikvKTtpZihtKXtoPWUucG9zaXRpb25BdChhLmdldFRva2VuT2Zmc2V0KCkpLmxpbmU7aWYobVsxXSl7bD17c3RhcnRMaW5lOmgsZW5kTGluZTpoLGtpbmQ6QXIuUmVnaW9ufTtpLnB1c2gobCl9ZWxzZXtmb3IodmFyIGc9aS5sZW5ndGgtMTtnPj0wJiZpW2ddLmtpbmQhPT1Bci5SZWdpb247KWctLTtpZihnPj0wKXtsPWlbZ107aS5sZW5ndGg9ZyxoPmwuc3RhcnRMaW5lJiZvIT09bC5zdGFydExpbmUmJihsLmVuZExpbmU9aCxjKGwpLG89bC5zdGFydExpbmUpfX19fXM9YS5zY2FuKCl9dmFyIHA9dCYmdC5yYW5nZUxpbWl0O2lmKCJudW1iZXIiIT10eXBlb2YgcHx8bi5sZW5ndGg8PXApcmV0dXJuIG47dCYmdC5vblJhbmdlTGltaXRFeGNlZWRlZCYmdC5vblJhbmdlTGltaXRFeGNlZWRlZChlLnVyaSk7Zm9yKHZhciBiPVtdLHY9MCx5PXI7djx5Lmxlbmd0aDt2KyspeyhBPXlbdl0pPDMwJiYoYltBXT0oYltBXXx8MCkrMSl9dmFyIEM9MCx3PTA7Zm9yKGc9MDtnPGIubGVuZ3RoO2crKyl7dmFyIF89YltnXTtpZihfKXtpZihfK0M+cCl7dz1nO2JyZWFrfUMrPV99fXZhciBTPVtdO2ZvcihnPTA7ZzxuLmxlbmd0aDtnKyspe3ZhciBBOyJudW1iZXIiPT10eXBlb2YoQT1yW2ddKSYmKEE8d3x8QT09PXcmJkMrKzxwKSYmUy5wdXNoKG5bZ10pfXJldHVybiBTfWZ1bmN0aW9uIFZhKGUsdCxuKXtmdW5jdGlvbiByKHQsbil7cmV0dXJuIGZyLmNyZWF0ZShlLnBvc2l0aW9uQXQodCksZS5wb3NpdGlvbkF0KG4pKX12YXIgaT10aShlLmdldFRleHQoKSwhMCk7ZnVuY3Rpb24gbyhlLHQpe3JldHVybiBpLnNldFBvc2l0aW9uKGUpLGkuc2NhbigpPT09dD9pLmdldFRva2VuT2Zmc2V0KCkraS5nZXRUb2tlbkxlbmd0aCgpOi0xfXJldHVybiB0Lm1hcCgoZnVuY3Rpb24odCl7Zm9yKHZhciBpPWUub2Zmc2V0QXQodCksYT1uLmdldE5vZGVGcm9tT2Zmc2V0KGksITApLHM9W107YTspe3N3aXRjaChhLnR5cGUpe2Nhc2Uic3RyaW5nIjpjYXNlIm9iamVjdCI6Y2FzZSJhcnJheSI6dmFyIGM9YS5vZmZzZXQrMSxsPWEub2Zmc2V0K2EubGVuZ3RoLTE7YzxsJiZpPj1jJiZpPD1sJiZzLnB1c2gocihjLGwpKSxzLnB1c2gocihhLm9mZnNldCxhLm9mZnNldCthLmxlbmd0aCkpO2JyZWFrO2Nhc2UibnVtYmVyIjpjYXNlImJvb2xlYW4iOmNhc2UibnVsbCI6Y2FzZSJwcm9wZXJ0eSI6cy5wdXNoKHIoYS5vZmZzZXQsYS5vZmZzZXQrYS5sZW5ndGgpKX1pZigicHJvcGVydHkiPT09YS50eXBlfHxhLnBhcmVudCYmImFycmF5Ij09PWEucGFyZW50LnR5cGUpe3ZhciB1PW8oYS5vZmZzZXQrYS5sZW5ndGgsNSk7LTEhPT11JiZzLnB1c2gocihhLm9mZnNldCx1KSl9YT1hLnBhcmVudH1mb3IodmFyIGg9dm9pZCAwLGY9cy5sZW5ndGgtMTtmPj0wO2YtLSloPWFvLmNyZWF0ZShzW2ZdLGgpO3JldHVybiBofHwoaD1hby5jcmVhdGUoZnIuY3JlYXRlKHQsdCkpKSxofSkpfWZ1bmN0aW9uIEZhKGUsdCl7dmFyIG49W107cmV0dXJuIHQudmlzaXQoKGZ1bmN0aW9uKHIpe3ZhciBpO2lmKCJwcm9wZXJ0eSI9PT1yLnR5cGUmJiIkcmVmIj09PXIua2V5Tm9kZS52YWx1ZSYmInN0cmluZyI9PT0obnVsbD09PShpPXIudmFsdWVOb2RlKXx8dm9pZCAwPT09aT92b2lkIDA6aS50eXBlKSl7dmFyIG89ci52YWx1ZU5vZGUudmFsdWUsYT1mdW5jdGlvbihlLHQpe3ZhciBuPWZ1bmN0aW9uKGUpe2lmKCIjIj09PWUpcmV0dXJuW107aWYoIiMiIT09ZVswXXx8Ii8iIT09ZVsxXSlyZXR1cm4gbnVsbDtyZXR1cm4gZS5zdWJzdHJpbmcoMikuc3BsaXQoL1wvLykubWFwKGphKX0odCk7aWYoIW4pcmV0dXJuIG51bGw7cmV0dXJuIEthKG4sZS5yb290KX0odCxvKTtpZihhKXt2YXIgcz1lLnBvc2l0aW9uQXQoYS5vZmZzZXQpO24ucHVzaCh7dGFyZ2V0OiIiLmNvbmNhdChlLnVyaSwiIyIpLmNvbmNhdChzLmxpbmUrMSwiLCIpLmNvbmNhdChzLmNoYXJhY3RlcisxKSxyYW5nZTpEYShlLHIudmFsdWVOb2RlKX0pfX1yZXR1cm4hMH0pKSxQcm9taXNlLnJlc29sdmUobil9ZnVuY3Rpb24gRGEoZSx0KXtyZXR1cm4gZnIuY3JlYXRlKGUucG9zaXRpb25BdCh0Lm9mZnNldCsxKSxlLnBvc2l0aW9uQXQodC5vZmZzZXQrdC5sZW5ndGgtMSkpfWZ1bmN0aW9uIEthKGUsdCl7aWYoIXQpcmV0dXJuIG51bGw7aWYoMD09PWUubGVuZ3RoKXJldHVybiB0O3ZhciBuPWUuc2hpZnQoKTtpZih0JiYib2JqZWN0Ij09PXQudHlwZSl7dmFyIHI9dC5wcm9wZXJ0aWVzLmZpbmQoKGZ1bmN0aW9uKGUpe3JldHVybiBlLmtleU5vZGUudmFsdWU9PT1ufSkpO3JldHVybiByP0thKGUsci52YWx1ZU5vZGUpOm51bGx9aWYodCYmImFycmF5Ij09PXQudHlwZSYmbi5tYXRjaCgvXigwfFsxLTldWzAtOV0qKSQvKSl7dmFyIGk9TnVtYmVyLnBhcnNlSW50KG4pLG89dC5pdGVtc1tpXTtyZXR1cm4gbz9LYShlLG8pOm51bGx9cmV0dXJuIG51bGx9ZnVuY3Rpb24gamEoZSl7cmV0dXJuIGUucmVwbGFjZSgvfjEvZywiLyIpLnJlcGxhY2UoL34wL2csIn4iKX1mdW5jdGlvbiBVYShlKXt2YXIgdD1lLnByb21pc2VDb25zdHJ1Y3Rvcnx8UHJvbWlzZSxuPW5ldyBPYShlLnNjaGVtYVJlcXVlc3RTZXJ2aWNlLGUud29ya3NwYWNlQ29udGV4dCx0KTtuLnNldFNjaGVtYUNvbnRyaWJ1dGlvbnMoQ2EpO3ZhciByPW5ldyBlYShuLGUuY29udHJpYnV0aW9ucyx0LGUuY2xpZW50Q2FwYWJpbGl0aWVzKSxpPW5ldyB0YShuLGUuY29udHJpYnV0aW9ucyx0KSxvPW5ldyBoYShuKSxhPW5ldyBpYShuLHQpO3JldHVybntjb25maWd1cmU6ZnVuY3Rpb24oZSl7bi5jbGVhckV4dGVybmFsU2NoZW1hcygpLGUuc2NoZW1hcyYmZS5zY2hlbWFzLmZvckVhY2goKGZ1bmN0aW9uKGUpe24ucmVnaXN0ZXJFeHRlcm5hbFNjaGVtYShlLnVyaSxlLmZpbGVNYXRjaCxlLnNjaGVtYSl9KSksYS5jb25maWd1cmUoZSl9LHJlc2V0U2NoZW1hOmZ1bmN0aW9uKGUpe3JldHVybiBuLm9uUmVzb3VyY2VDaGFuZ2UoZSl9LGRvVmFsaWRhdGlvbjphLmRvVmFsaWRhdGlvbi5iaW5kKGEpLGdldExhbmd1YWdlU3RhdHVzOmEuZ2V0TGFuZ3VhZ2VTdGF0dXMuYmluZChhKSxwYXJzZUpTT05Eb2N1bWVudDpmdW5jdGlvbihlKXtyZXR1cm4gWm8oZSx7Y29sbGVjdENvbW1lbnRzOiEwfSl9LG5ld0pTT05Eb2N1bWVudDpmdW5jdGlvbihlLHQpe3JldHVybiBmdW5jdGlvbihlLHQpe3JldHVybiB2b2lkIDA9PT10JiYodD1bXSksbmV3IEpvKGUsdCxbXSl9KGUsdCl9LGdldE1hdGNoaW5nU2NoZW1hczpuLmdldE1hdGNoaW5nU2NoZW1hcy5iaW5kKG4pLGRvUmVzb2x2ZTpyLmRvUmVzb2x2ZS5iaW5kKHIpLGRvQ29tcGxldGU6ci5kb0NvbXBsZXRlLmJpbmQociksZmluZERvY3VtZW50U3ltYm9sczpvLmZpbmREb2N1bWVudFN5bWJvbHMuYmluZChvKSxmaW5kRG9jdW1lbnRTeW1ib2xzMjpvLmZpbmREb2N1bWVudFN5bWJvbHMyLmJpbmQobyksZmluZERvY3VtZW50Q29sb3JzOm8uZmluZERvY3VtZW50Q29sb3JzLmJpbmQobyksZ2V0Q29sb3JQcmVzZW50YXRpb25zOm8uZ2V0Q29sb3JQcmVzZW50YXRpb25zLmJpbmQobyksZG9Ib3ZlcjppLmRvSG92ZXIuYmluZChpKSxnZXRGb2xkaW5nUmFuZ2VzOlJhLGdldFNlbGVjdGlvblJhbmdlczpWYSxmaW5kRGVmaW5pdGlvbjpmdW5jdGlvbigpe3JldHVybiBQcm9taXNlLnJlc29sdmUoW10pfSxmaW5kTGlua3M6RmEsZm9ybWF0OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj12b2lkIDA7aWYodCl7dmFyIGk9ZS5vZmZzZXRBdCh0LnN0YXJ0KTtyPXtvZmZzZXQ6aSxsZW5ndGg6ZS5vZmZzZXRBdCh0LmVuZCktaX19dmFyIG89e3RhYlNpemU6bj9uLnRhYlNpemU6NCxpbnNlcnRTcGFjZXM6ITA9PT0obnVsbD09bj92b2lkIDA6bi5pbnNlcnRTcGFjZXMpLGluc2VydEZpbmFsTmV3bGluZTohMD09PShudWxsPT1uP3ZvaWQgMDpuLmluc2VydEZpbmFsTmV3bGluZSksZW9sOiJcbiJ9O3JldHVybiBmdW5jdGlvbihlLHQsbil7cmV0dXJuIG5yKGUsdCxuKX0oZS5nZXRUZXh0KCkscixvKS5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiBLci5yZXBsYWNlKGZyLmNyZWF0ZShlLnBvc2l0aW9uQXQodC5vZmZzZXQpLGUucG9zaXRpb25BdCh0Lm9mZnNldCt0Lmxlbmd0aCkpLHQuY29udGVudCl9KSl9fX0idW5kZWZpbmVkIiE9dHlwZW9mIGZldGNoJiYoRWE9ZnVuY3Rpb24oZSl7cmV0dXJuIGZldGNoKGUpLnRoZW4oKGU9PmUudGV4dCgpKSl9KTt2YXIgQmE9Ii8iLmNoYXJDb2RlQXQoMCkscWE9Ii4iLmNoYXJDb2RlQXQoMCk7ZnVuY3Rpb24gJGEoZSl7Y29uc3QgdD1bXTtmb3IoY29uc3QgbiBvZiBlKTA9PT1uLmxlbmd0aHx8MT09PW4ubGVuZ3RoJiZuLmNoYXJDb2RlQXQoMCk9PT1xYXx8KDI9PT1uLmxlbmd0aCYmbi5jaGFyQ29kZUF0KDApPT09cWEmJm4uY2hhckNvZGVBdCgxKT09PXFhP3QucG9wKCk6dC5wdXNoKG4pKTtlLmxlbmd0aD4xJiYwPT09ZVtlLmxlbmd0aC0xXS5sZW5ndGgmJnQucHVzaCgiIik7bGV0IG49dC5qb2luKCIvIik7cmV0dXJuIDA9PT1lWzBdLmxlbmd0aCYmKG49Ii8iK24pLG59c2VsZi5vbm1lc3NhZ2U9KCk9PntabigoKGUsdCk9Pm5ldyBjbGFzc3tfY3R4O19sYW5ndWFnZVNlcnZpY2U7X2xhbmd1YWdlU2V0dGluZ3M7X2xhbmd1YWdlSWQ7Y29uc3RydWN0b3IoZSx0KXt0aGlzLl9jdHg9ZSx0aGlzLl9sYW5ndWFnZVNldHRpbmdzPXQubGFuZ3VhZ2VTZXR0aW5ncyx0aGlzLl9sYW5ndWFnZUlkPXQubGFuZ3VhZ2VJZCx0aGlzLl9sYW5ndWFnZVNlcnZpY2U9VWEoe3dvcmtzcGFjZUNvbnRleHQ6e3Jlc29sdmVSZWxhdGl2ZVBhdGg6KGUsdCk9PmZ1bmN0aW9uKGUsdCl7aWYoZnVuY3Rpb24oZSl7cmV0dXJuIGUuY2hhckNvZGVBdCgwKT09PUJhfSh0KSl7Y29uc3Qgbj1fYS5wYXJzZShlKSxyPXQuc3BsaXQoIi8iKTtyZXR1cm4gbi53aXRoKHtwYXRoOiRhKHIpfSkudG9TdHJpbmcoKX1yZXR1cm4gZnVuY3Rpb24oZSwuLi50KXtjb25zdCBuPV9hLnBhcnNlKGUpLHI9bi5wYXRoLnNwbGl0KCIvIik7Zm9yKGxldCBlIG9mIHQpci5wdXNoKC4uLmUuc3BsaXQoIi8iKSk7cmV0dXJuIG4ud2l0aCh7cGF0aDokYShyKX0pLnRvU3RyaW5nKCl9KGUsdCl9KHQuc3Vic3RyKDAsdC5sYXN0SW5kZXhPZigiLyIpKzEpLGUpfSxzY2hlbWFSZXF1ZXN0U2VydmljZTp0LmVuYWJsZVNjaGVtYVJlcXVlc3Q/RWE6dm9pZCAwfSksdGhpcy5fbGFuZ3VhZ2VTZXJ2aWNlLmNvbmZpZ3VyZSh0aGlzLl9sYW5ndWFnZVNldHRpbmdzKX1hc3luYyBkb1ZhbGlkYXRpb24oZSl7bGV0IHQ9dGhpcy5fZ2V0VGV4dERvY3VtZW50KGUpO2lmKHQpe2xldCBlPXRoaXMuX2xhbmd1YWdlU2VydmljZS5wYXJzZUpTT05Eb2N1bWVudCh0KTtyZXR1cm4gdGhpcy5fbGFuZ3VhZ2VTZXJ2aWNlLmRvVmFsaWRhdGlvbih0LGUsdGhpcy5fbGFuZ3VhZ2VTZXR0aW5ncyl9cmV0dXJuIFByb21pc2UucmVzb2x2ZShbXSl9YXN5bmMgZG9Db21wbGV0ZShlLHQpe2xldCBuPXRoaXMuX2dldFRleHREb2N1bWVudChlKTtpZighbilyZXR1cm4gbnVsbDtsZXQgcj10aGlzLl9sYW5ndWFnZVNlcnZpY2UucGFyc2VKU09ORG9jdW1lbnQobik7cmV0dXJuIHRoaXMuX2xhbmd1YWdlU2VydmljZS5kb0NvbXBsZXRlKG4sdCxyKX1hc3luYyBkb1Jlc29sdmUoZSl7cmV0dXJuIHRoaXMuX2xhbmd1YWdlU2VydmljZS5kb1Jlc29sdmUoZSl9YXN5bmMgZG9Ib3ZlcihlLHQpe2xldCBuPXRoaXMuX2dldFRleHREb2N1bWVudChlKTtpZighbilyZXR1cm4gbnVsbDtsZXQgcj10aGlzLl9sYW5ndWFnZVNlcnZpY2UucGFyc2VKU09ORG9jdW1lbnQobik7cmV0dXJuIHRoaXMuX2xhbmd1YWdlU2VydmljZS5kb0hvdmVyKG4sdCxyKX1hc3luYyBmb3JtYXQoZSx0LG4pe2xldCByPXRoaXMuX2dldFRleHREb2N1bWVudChlKTtpZighcilyZXR1cm5bXTtsZXQgaT10aGlzLl9sYW5ndWFnZVNlcnZpY2UuZm9ybWF0KHIsdCxuKTtyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGkpfWFzeW5jIHJlc2V0U2NoZW1hKGUpe3JldHVybiBQcm9taXNlLnJlc29sdmUodGhpcy5fbGFuZ3VhZ2VTZXJ2aWNlLnJlc2V0U2NoZW1hKGUpKX1hc3luYyBmaW5kRG9jdW1lbnRTeW1ib2xzKGUpe2xldCB0PXRoaXMuX2dldFRleHREb2N1bWVudChlKTtpZighdClyZXR1cm5bXTtsZXQgbj10aGlzLl9sYW5ndWFnZVNlcnZpY2UucGFyc2VKU09ORG9jdW1lbnQodCkscj10aGlzLl9sYW5ndWFnZVNlcnZpY2UuZmluZERvY3VtZW50U3ltYm9scyh0LG4pO3JldHVybiBQcm9taXNlLnJlc29sdmUocil9YXN5bmMgZmluZERvY3VtZW50Q29sb3JzKGUpe2xldCB0PXRoaXMuX2dldFRleHREb2N1bWVudChlKTtpZighdClyZXR1cm5bXTtsZXQgbj10aGlzLl9sYW5ndWFnZVNlcnZpY2UucGFyc2VKU09ORG9jdW1lbnQodCkscj10aGlzLl9sYW5ndWFnZVNlcnZpY2UuZmluZERvY3VtZW50Q29sb3JzKHQsbik7cmV0dXJuIFByb21pc2UucmVzb2x2ZShyKX1hc3luYyBnZXRDb2xvclByZXNlbnRhdGlvbnMoZSx0LG4pe2xldCByPXRoaXMuX2dldFRleHREb2N1bWVudChlKTtpZighcilyZXR1cm5bXTtsZXQgaT10aGlzLl9sYW5ndWFnZVNlcnZpY2UucGFyc2VKU09ORG9jdW1lbnQociksbz10aGlzLl9sYW5ndWFnZVNlcnZpY2UuZ2V0Q29sb3JQcmVzZW50YXRpb25zKHIsaSx0LG4pO3JldHVybiBQcm9taXNlLnJlc29sdmUobyl9YXN5bmMgZ2V0Rm9sZGluZ1JhbmdlcyhlLHQpe2xldCBuPXRoaXMuX2dldFRleHREb2N1bWVudChlKTtpZighbilyZXR1cm5bXTtsZXQgcj10aGlzLl9sYW5ndWFnZVNlcnZpY2UuZ2V0Rm9sZGluZ1JhbmdlcyhuLHQpO3JldHVybiBQcm9taXNlLnJlc29sdmUocil9YXN5bmMgZ2V0U2VsZWN0aW9uUmFuZ2VzKGUsdCl7bGV0IG49dGhpcy5fZ2V0VGV4dERvY3VtZW50KGUpO2lmKCFuKXJldHVybltdO2xldCByPXRoaXMuX2xhbmd1YWdlU2VydmljZS5wYXJzZUpTT05Eb2N1bWVudChuKSxpPXRoaXMuX2xhbmd1YWdlU2VydmljZS5nZXRTZWxlY3Rpb25SYW5nZXMobix0LHIpO3JldHVybiBQcm9taXNlLnJlc29sdmUoaSl9X2dldFRleHREb2N1bWVudChlKXtsZXQgdD10aGlzLl9jdHguZ2V0TWlycm9yTW9kZWxzKCk7Zm9yKGxldCBuIG9mIHQpaWYobi51cmkudG9TdHJpbmcoKT09PWUpcmV0dXJuIHBvLmNyZWF0ZShlLHRoaXMuX2xhbmd1YWdlSWQsbi52ZXJzaW9uLG4uZ2V0VmFsdWUoKSk7cmV0dXJuIG51bGx9fShlLHQpKSl9fSgpOwovLyMgc291cmNlTWFwcGluZ1VSTD1qc29uLndvcmtlci5qcy5tYXAKCg==', null, false);
|
|
3
|
+
var WorkerFactory = createBase64WorkerFactory('Lyogcm9sbHVwLXBsdWdpbi13ZWItd29ya2VyLWxvYWRlciAqLwohZnVuY3Rpb24oKXsidXNlIHN0cmljdCI7Y29uc3QgZT1uZXcgY2xhc3N7Y29uc3RydWN0b3IoKXt0aGlzLmxpc3RlbmVycz1bXSx0aGlzLnVuZXhwZWN0ZWRFcnJvckhhbmRsZXI9ZnVuY3Rpb24oZSl7c2V0VGltZW91dCgoKCk9PntpZihlLnN0YWNrKXtpZihvLmlzRXJyb3JOb1RlbGVtZXRyeShlKSl0aHJvdyBuZXcgbyhlLm1lc3NhZ2UrIlxuXG4iK2Uuc3RhY2spO3Rocm93IG5ldyBFcnJvcihlLm1lc3NhZ2UrIlxuXG4iK2Uuc3RhY2spfXRocm93IGV9KSwwKX19ZW1pdChlKXt0aGlzLmxpc3RlbmVycy5mb3JFYWNoKCh0PT57dChlKX0pKX1vblVuZXhwZWN0ZWRFcnJvcihlKXt0aGlzLnVuZXhwZWN0ZWRFcnJvckhhbmRsZXIoZSksdGhpcy5lbWl0KGUpfW9uVW5leHBlY3RlZEV4dGVybmFsRXJyb3IoZSl7dGhpcy51bmV4cGVjdGVkRXJyb3JIYW5kbGVyKGUpfX07ZnVuY3Rpb24gdCh0KXsoZnVuY3Rpb24oZSl7aWYoZSBpbnN0YW5jZW9mIGkpcmV0dXJuITA7cmV0dXJuIGUgaW5zdGFuY2VvZiBFcnJvciYmZS5uYW1lPT09ciYmZS5tZXNzYWdlPT09cn0pKHQpfHxlLm9uVW5leHBlY3RlZEVycm9yKHQpfWZ1bmN0aW9uIG4oZSl7aWYoZSBpbnN0YW5jZW9mIEVycm9yKXtjb25zdHtuYW1lOnQsbWVzc2FnZTpufT1lO3JldHVybnskaXNFcnJvcjohMCxuYW1lOnQsbWVzc2FnZTpuLHN0YWNrOmUuc3RhY2t0cmFjZXx8ZS5zdGFjayxub1RlbGVtZXRyeTpvLmlzRXJyb3JOb1RlbGVtZXRyeShlKX19cmV0dXJuIGV9Y29uc3Qgcj0iQ2FuY2VsZWQiO2NsYXNzIGkgZXh0ZW5kcyBFcnJvcntjb25zdHJ1Y3Rvcigpe3N1cGVyKHIpLHRoaXMubmFtZT10aGlzLm1lc3NhZ2V9fWNsYXNzIG8gZXh0ZW5kcyBFcnJvcntjb25zdHJ1Y3RvcihlKXtzdXBlcihlKSx0aGlzLm5hbWU9IkVycm9yTm9UZWxlbWV0cnkifXN0YXRpYyBmcm9tRXJyb3IoZSl7aWYoZSBpbnN0YW5jZW9mIG8pcmV0dXJuIGU7Y29uc3QgdD1uZXcgbztyZXR1cm4gdC5tZXNzYWdlPWUubWVzc2FnZSx0LnN0YWNrPWUuc3RhY2ssdH1zdGF0aWMgaXNFcnJvck5vVGVsZW1ldHJ5KGUpe3JldHVybiJFcnJvck5vVGVsZW1ldHJ5Ij09PWUubmFtZX19ZnVuY3Rpb24gYShlKXtjb25zdCB0PXRoaXM7bGV0IG4scj0hMTtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gcnx8KHI9ITAsbj1lLmFwcGx5KHQsYXJndW1lbnRzKSksbn19dmFyIHM7IWZ1bmN0aW9uKGUpe2UuaXM9ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJiJvYmplY3QiPT10eXBlb2YgZSYmImZ1bmN0aW9uIj09dHlwZW9mIGVbU3ltYm9sLml0ZXJhdG9yXX07Y29uc3QgdD1PYmplY3QuZnJlZXplKFtdKTtmdW5jdGlvbiBuKHQsbj1OdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFkpe2NvbnN0IHI9W107aWYoMD09PW4pcmV0dXJuW3IsdF07Y29uc3QgaT10W1N5bWJvbC5pdGVyYXRvcl0oKTtmb3IobGV0IHQ9MDt0PG47dCsrKXtjb25zdCB0PWkubmV4dCgpO2lmKHQuZG9uZSlyZXR1cm5bcixlLmVtcHR5KCldO3IucHVzaCh0LnZhbHVlKX1yZXR1cm5bcix7W1N5bWJvbC5pdGVyYXRvcl06KCk9Pml9XX1lLmVtcHR5PWZ1bmN0aW9uKCl7cmV0dXJuIHR9LGUuc2luZ2xlPWZ1bmN0aW9uKihlKXt5aWVsZCBlfSxlLmZyb209ZnVuY3Rpb24oZSl7cmV0dXJuIGV8fHR9LGUuaXNFbXB0eT1mdW5jdGlvbihlKXtyZXR1cm4hZXx8ITA9PT1lW1N5bWJvbC5pdGVyYXRvcl0oKS5uZXh0KCkuZG9uZX0sZS5maXJzdD1mdW5jdGlvbihlKXtyZXR1cm4gZVtTeW1ib2wuaXRlcmF0b3JdKCkubmV4dCgpLnZhbHVlfSxlLnNvbWU9ZnVuY3Rpb24oZSx0KXtmb3IoY29uc3QgbiBvZiBlKWlmKHQobikpcmV0dXJuITA7cmV0dXJuITF9LGUuZmluZD1mdW5jdGlvbihlLHQpe2Zvcihjb25zdCBuIG9mIGUpaWYodChuKSlyZXR1cm4gbn0sZS5maWx0ZXI9ZnVuY3Rpb24qKGUsdCl7Zm9yKGNvbnN0IG4gb2YgZSl0KG4pJiYoeWllbGQgbil9LGUubWFwPWZ1bmN0aW9uKihlLHQpe2xldCBuPTA7Zm9yKGNvbnN0IHIgb2YgZSl5aWVsZCB0KHIsbisrKX0sZS5jb25jYXQ9ZnVuY3Rpb24qKC4uLmUpe2Zvcihjb25zdCB0IG9mIGUpZm9yKGNvbnN0IGUgb2YgdCl5aWVsZCBlfSxlLmNvbmNhdE5lc3RlZD1mdW5jdGlvbiooZSl7Zm9yKGNvbnN0IHQgb2YgZSlmb3IoY29uc3QgZSBvZiB0KXlpZWxkIGV9LGUucmVkdWNlPWZ1bmN0aW9uKGUsdCxuKXtsZXQgcj1uO2Zvcihjb25zdCBuIG9mIGUpcj10KHIsbik7cmV0dXJuIHJ9LGUuZm9yRWFjaD1mdW5jdGlvbihlLHQpe2xldCBuPTA7Zm9yKGNvbnN0IHIgb2YgZSl0KHIsbisrKX0sZS5zbGljZT1mdW5jdGlvbiooZSx0LG49ZS5sZW5ndGgpe2Zvcih0PDAmJih0Kz1lLmxlbmd0aCksbjwwP24rPWUubGVuZ3RoOm4+ZS5sZW5ndGgmJihuPWUubGVuZ3RoKTt0PG47dCsrKXlpZWxkIGVbdF19LGUuY29uc3VtZT1uLGUuY29sbGVjdD1mdW5jdGlvbihlKXtyZXR1cm4gbihlKVswXX0sZS5lcXVhbHM9ZnVuY3Rpb24oZSx0LG49KChlLHQpPT5lPT09dCkpe2NvbnN0IHI9ZVtTeW1ib2wuaXRlcmF0b3JdKCksaT10W1N5bWJvbC5pdGVyYXRvcl0oKTtmb3IoOzspe2NvbnN0IGU9ci5uZXh0KCksdD1pLm5leHQoKTtpZihlLmRvbmUhPT10LmRvbmUpcmV0dXJuITE7aWYoZS5kb25lKXJldHVybiEwO2lmKCFuKGUudmFsdWUsdC52YWx1ZSkpcmV0dXJuITF9fX0oc3x8KHM9e30pKTtjbGFzcyBjIGV4dGVuZHMgRXJyb3J7Y29uc3RydWN0b3IoZSl7c3VwZXIoYEVuY291bnRlcmVkIGVycm9ycyB3aGlsZSBkaXNwb3Npbmcgb2Ygc3RvcmUuIEVycm9yczogWyR7ZS5qb2luKCIsICIpfV1gKSx0aGlzLmVycm9ycz1lfX1mdW5jdGlvbiBsKGUpe2lmKHMuaXMoZSkpe2NvbnN0IHQ9W107Zm9yKGNvbnN0IG4gb2YgZSlpZihuKXRyeXtuLmRpc3Bvc2UoKX1jYXRjaChlKXt0LnB1c2goZSl9aWYoMT09PXQubGVuZ3RoKXRocm93IHRbMF07aWYodC5sZW5ndGg+MSl0aHJvdyBuZXcgYyh0KTtyZXR1cm4gQXJyYXkuaXNBcnJheShlKT9bXTplfWlmKGUpcmV0dXJuIGUuZGlzcG9zZSgpLGV9ZnVuY3Rpb24gdShlKXtyZXR1cm57ZGlzcG9zZTphKCgoKT0+e2UoKX0pKX19Y2xhc3MgaHtjb25zdHJ1Y3Rvcigpe3RoaXMuX3RvRGlzcG9zZT1uZXcgU2V0LHRoaXMuX2lzRGlzcG9zZWQ9ITF9ZGlzcG9zZSgpe3RoaXMuX2lzRGlzcG9zZWR8fCh0aGlzLl9pc0Rpc3Bvc2VkPSEwLHRoaXMuY2xlYXIoKSl9Z2V0IGlzRGlzcG9zZWQoKXtyZXR1cm4gdGhpcy5faXNEaXNwb3NlZH1jbGVhcigpe3RyeXtsKHRoaXMuX3RvRGlzcG9zZS52YWx1ZXMoKSl9ZmluYWxseXt0aGlzLl90b0Rpc3Bvc2UuY2xlYXIoKX19YWRkKGUpe2lmKCFlKXJldHVybiBlO2lmKGU9PT10aGlzKXRocm93IG5ldyBFcnJvcigiQ2Fubm90IHJlZ2lzdGVyIGEgZGlzcG9zYWJsZSBvbiBpdHNlbGYhIik7cmV0dXJuIHRoaXMuX2lzRGlzcG9zZWQ/aC5ESVNBQkxFX0RJU1BPU0VEX1dBUk5JTkd8fGNvbnNvbGUud2FybihuZXcgRXJyb3IoIlRyeWluZyB0byBhZGQgYSBkaXNwb3NhYmxlIHRvIGEgRGlzcG9zYWJsZVN0b3JlIHRoYXQgaGFzIGFscmVhZHkgYmVlbiBkaXNwb3NlZCBvZi4gVGhlIGFkZGVkIG9iamVjdCB3aWxsIGJlIGxlYWtlZCEiKS5zdGFjayk6dGhpcy5fdG9EaXNwb3NlLmFkZChlKSxlfX1oLkRJU0FCTEVfRElTUE9TRURfV0FSTklORz0hMTtjbGFzcyBme2NvbnN0cnVjdG9yKCl7dGhpcy5fc3RvcmU9bmV3IGgsdGhpcy5fc3RvcmV9ZGlzcG9zZSgpe3RoaXMuX3N0b3JlLmRpc3Bvc2UoKX1fcmVnaXN0ZXIoZSl7aWYoZT09PXRoaXMpdGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgcmVnaXN0ZXIgYSBkaXNwb3NhYmxlIG9uIGl0c2VsZiEiKTtyZXR1cm4gdGhpcy5fc3RvcmUuYWRkKGUpfX1mLk5vbmU9T2JqZWN0LmZyZWV6ZSh7ZGlzcG9zZSgpe319KTtjbGFzcyBke2NvbnN0cnVjdG9yKCl7dGhpcy5kaXNwb3NlPSgpPT57fSx0aGlzLnVuc2V0PSgpPT57fSx0aGlzLmlzc2V0PSgpPT4hMX1zZXQoZSl7bGV0IHQ9ZTtyZXR1cm4gdGhpcy51bnNldD0oKT0+dD12b2lkIDAsdGhpcy5pc3NldD0oKT0+dm9pZCAwIT09dCx0aGlzLmRpc3Bvc2U9KCk9Pnt0JiYodCgpLHQ9dm9pZCAwKX0sdGhpc319Y2xhc3MgbXtjb25zdHJ1Y3RvcihlKXt0aGlzLmVsZW1lbnQ9ZSx0aGlzLm5leHQ9bS5VbmRlZmluZWQsdGhpcy5wcmV2PW0uVW5kZWZpbmVkfX1tLlVuZGVmaW5lZD1uZXcgbSh2b2lkIDApO2NsYXNzIGd7Y29uc3RydWN0b3IoKXt0aGlzLl9maXJzdD1tLlVuZGVmaW5lZCx0aGlzLl9sYXN0PW0uVW5kZWZpbmVkLHRoaXMuX3NpemU9MH1nZXQgc2l6ZSgpe3JldHVybiB0aGlzLl9zaXplfWlzRW1wdHkoKXtyZXR1cm4gdGhpcy5fZmlyc3Q9PT1tLlVuZGVmaW5lZH1jbGVhcigpe2xldCBlPXRoaXMuX2ZpcnN0O2Zvcig7ZSE9PW0uVW5kZWZpbmVkOyl7Y29uc3QgdD1lLm5leHQ7ZS5wcmV2PW0uVW5kZWZpbmVkLGUubmV4dD1tLlVuZGVmaW5lZCxlPXR9dGhpcy5fZmlyc3Q9bS5VbmRlZmluZWQsdGhpcy5fbGFzdD1tLlVuZGVmaW5lZCx0aGlzLl9zaXplPTB9dW5zaGlmdChlKXtyZXR1cm4gdGhpcy5faW5zZXJ0KGUsITEpfXB1c2goZSl7cmV0dXJuIHRoaXMuX2luc2VydChlLCEwKX1faW5zZXJ0KGUsdCl7Y29uc3Qgbj1uZXcgbShlKTtpZih0aGlzLl9maXJzdD09PW0uVW5kZWZpbmVkKXRoaXMuX2ZpcnN0PW4sdGhpcy5fbGFzdD1uO2Vsc2UgaWYodCl7Y29uc3QgZT10aGlzLl9sYXN0O3RoaXMuX2xhc3Q9bixuLnByZXY9ZSxlLm5leHQ9bn1lbHNle2NvbnN0IGU9dGhpcy5fZmlyc3Q7dGhpcy5fZmlyc3Q9bixuLm5leHQ9ZSxlLnByZXY9bn10aGlzLl9zaXplKz0xO2xldCByPSExO3JldHVybigpPT57cnx8KHI9ITAsdGhpcy5fcmVtb3ZlKG4pKX19c2hpZnQoKXtpZih0aGlzLl9maXJzdCE9PW0uVW5kZWZpbmVkKXtjb25zdCBlPXRoaXMuX2ZpcnN0LmVsZW1lbnQ7cmV0dXJuIHRoaXMuX3JlbW92ZSh0aGlzLl9maXJzdCksZX19cG9wKCl7aWYodGhpcy5fbGFzdCE9PW0uVW5kZWZpbmVkKXtjb25zdCBlPXRoaXMuX2xhc3QuZWxlbWVudDtyZXR1cm4gdGhpcy5fcmVtb3ZlKHRoaXMuX2xhc3QpLGV9fV9yZW1vdmUoZSl7aWYoZS5wcmV2IT09bS5VbmRlZmluZWQmJmUubmV4dCE9PW0uVW5kZWZpbmVkKXtjb25zdCB0PWUucHJldjt0Lm5leHQ9ZS5uZXh0LGUubmV4dC5wcmV2PXR9ZWxzZSBlLnByZXY9PT1tLlVuZGVmaW5lZCYmZS5uZXh0PT09bS5VbmRlZmluZWQ/KHRoaXMuX2ZpcnN0PW0uVW5kZWZpbmVkLHRoaXMuX2xhc3Q9bS5VbmRlZmluZWQpOmUubmV4dD09PW0uVW5kZWZpbmVkPyh0aGlzLl9sYXN0PXRoaXMuX2xhc3QucHJldix0aGlzLl9sYXN0Lm5leHQ9bS5VbmRlZmluZWQpOmUucHJldj09PW0uVW5kZWZpbmVkJiYodGhpcy5fZmlyc3Q9dGhpcy5fZmlyc3QubmV4dCx0aGlzLl9maXJzdC5wcmV2PW0uVW5kZWZpbmVkKTt0aGlzLl9zaXplLT0xfSpbU3ltYm9sLml0ZXJhdG9yXSgpe2xldCBlPXRoaXMuX2ZpcnN0O2Zvcig7ZSE9PW0uVW5kZWZpbmVkOyl5aWVsZCBlLmVsZW1lbnQsZT1lLm5leHR9fWxldCBwPSJ1bmRlZmluZWQiIT10eXBlb2YgZG9jdW1lbnQmJmRvY3VtZW50LmxvY2F0aW9uJiZkb2N1bWVudC5sb2NhdGlvbi5oYXNoLmluZGV4T2YoInBzZXVkbz10cnVlIik+PTA7dmFyIGI7Y29uc3Qgdj0iZW4iO2xldCB5LEMsdyxfPSExLFM9ITEsQT0hMSxFPSExLHg9djtjb25zdCBOPSJvYmplY3QiPT10eXBlb2Ygc2VsZj9zZWxmOiJvYmplY3QiPT10eXBlb2YgZ2xvYmFsP2dsb2JhbDp7fTtsZXQgazt2b2lkIDAhPT1OLnZzY29kZSYmdm9pZCAwIT09Ti52c2NvZGUucHJvY2Vzcz9rPU4udnNjb2RlLnByb2Nlc3M6InVuZGVmaW5lZCIhPXR5cGVvZiBwcm9jZXNzJiYoaz1wcm9jZXNzKTtjb25zdCBMPSJzdHJpbmciPT10eXBlb2YobnVsbD09PShiPW51bGw9PWs/dm9pZCAwOmsudmVyc2lvbnMpfHx2b2lkIDA9PT1iP3ZvaWQgMDpiLmVsZWN0cm9uKSYmInJlbmRlcmVyIj09PShudWxsPT1rP3ZvaWQgMDprLnR5cGUpO2lmKCJvYmplY3QiIT10eXBlb2YgbmF2aWdhdG9yfHxMKWlmKCJvYmplY3QiPT10eXBlb2Ygayl7Xz0id2luMzIiPT09ay5wbGF0Zm9ybSxTPSJkYXJ3aW4iPT09ay5wbGF0Zm9ybSxBPSJsaW51eCI9PT1rLnBsYXRmb3JtLEEmJmsuZW52LlNOQVAmJmsuZW52LlNOQVBfUkVWSVNJT04say5lbnYuQ0l8fGsuZW52LkJVSUxEX0FSVElGQUNUU1RBR0lOR0RJUkVDVE9SWSx5PXYseD12O2NvbnN0IGU9ay5lbnYuVlNDT0RFX05MU19DT05GSUc7aWYoZSl0cnl7Y29uc3QgdD1KU09OLnBhcnNlKGUpLG49dC5hdmFpbGFibGVMYW5ndWFnZXNbIioiXTt5PXQubG9jYWxlLHg9bnx8dixDPXQuX3RyYW5zbGF0aW9uc0NvbmZpZ0ZpbGV9Y2F0Y2goZSl7fX1lbHNlIGNvbnNvbGUuZXJyb3IoIlVuYWJsZSB0byByZXNvbHZlIHBsYXRmb3JtLiIpO2Vsc2Ugdz1uYXZpZ2F0b3IudXNlckFnZW50LF89dy5pbmRleE9mKCJXaW5kb3dzIik+PTAsUz13LmluZGV4T2YoIk1hY2ludG9zaCIpPj0wLCh3LmluZGV4T2YoIk1hY2ludG9zaCIpPj0wfHx3LmluZGV4T2YoImlQYWQiKT49MHx8dy5pbmRleE9mKCJpUGhvbmUiKT49MCkmJm5hdmlnYXRvci5tYXhUb3VjaFBvaW50cyYmbmF2aWdhdG9yLm1heFRvdWNoUG9pbnRzLEE9dy5pbmRleE9mKCJMaW51eCIpPj0wLEU9ITAsZnVuY3Rpb24oZSx0LC4uLm4peyFmdW5jdGlvbihlLHQpe2xldCBuO249MD09PXQubGVuZ3RoP2U6ZS5yZXBsYWNlKC9ceyhcZCspXH0vZywoKGUsbik9Pntjb25zdCByPW5bMF0saT10W3JdO2xldCBvPWU7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBpP289aToibnVtYmVyIiE9dHlwZW9mIGkmJiJib29sZWFuIiE9dHlwZW9mIGkmJm51bGwhPWl8fChvPVN0cmluZyhpKSksb30pKSxwJiYobj0i77y7IituLnJlcGxhY2UoL1thb3VlaV0vZywiJCYkJiIpKyLvvL0iKX0odCxuKX0oMCwiXyIpLHk9dix4PXk7Y29uc3QgVD1fLE89UztFJiZOLmltcG9ydFNjcmlwdHM7Y29uc3QgST13LE09ImZ1bmN0aW9uIj09dHlwZW9mIE4ucG9zdE1lc3NhZ2UmJiFOLmltcG9ydFNjcmlwdHM7KCgpPT57aWYoTSl7Y29uc3QgZT1bXTtOLmFkZEV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLCh0PT57aWYodC5kYXRhJiZ0LmRhdGEudnNjb2RlU2NoZWR1bGVBc3luY1dvcmspZm9yKGxldCBuPTAscj1lLmxlbmd0aDtuPHI7bisrKXtjb25zdCByPWVbbl07aWYoci5pZD09PXQuZGF0YS52c2NvZGVTY2hlZHVsZUFzeW5jV29yaylyZXR1cm4gZS5zcGxpY2UobiwxKSx2b2lkIHIuY2FsbGJhY2soKX19KSk7bGV0IHQ9MDtyZXR1cm4gbj0+e2NvbnN0IHI9Kyt0O2UucHVzaCh7aWQ6cixjYWxsYmFjazpufSksTi5wb3N0TWVzc2FnZSh7dnNjb2RlU2NoZWR1bGVBc3luY1dvcms6cn0sIioiKX19fSkoKTtjb25zdCBQPSEhKEkmJkkuaW5kZXhPZigiQ2hyb21lIik+PTApO0kmJkkuaW5kZXhPZigiRmlyZWZveCIpLCFQJiZJJiZJLmluZGV4T2YoIlNhZmFyaSIpLEkmJkkuaW5kZXhPZigiRWRnLyIpLEkmJkkuaW5kZXhPZigiQW5kcm9pZCIpO2NvbnN0IFI9Ti5wZXJmb3JtYW5jZSYmImZ1bmN0aW9uIj09dHlwZW9mIE4ucGVyZm9ybWFuY2Uubm93O2NsYXNzIFZ7Y29uc3RydWN0b3IoZSl7dGhpcy5faGlnaFJlc29sdXRpb249UiYmZSx0aGlzLl9zdGFydFRpbWU9dGhpcy5fbm93KCksdGhpcy5fc3RvcFRpbWU9LTF9c3RhdGljIGNyZWF0ZShlPSEwKXtyZXR1cm4gbmV3IFYoZSl9c3RvcCgpe3RoaXMuX3N0b3BUaW1lPXRoaXMuX25vdygpfWVsYXBzZWQoKXtyZXR1cm4tMSE9PXRoaXMuX3N0b3BUaW1lP3RoaXMuX3N0b3BUaW1lLXRoaXMuX3N0YXJ0VGltZTp0aGlzLl9ub3coKS10aGlzLl9zdGFydFRpbWV9X25vdygpe3JldHVybiB0aGlzLl9oaWdoUmVzb2x1dGlvbj9OLnBlcmZvcm1hbmNlLm5vdygpOkRhdGUubm93KCl9fXZhciBGLEQ7IWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoZSl7cmV0dXJuKHQsbj1udWxsLHIpPT57bGV0IGksbz0hMTtyZXR1cm4gaT1lKChlPT57aWYoIW8pcmV0dXJuIGk/aS5kaXNwb3NlKCk6bz0hMCx0LmNhbGwobixlKX0pLG51bGwsciksbyYmaS5kaXNwb3NlKCksaX19ZnVuY3Rpb24gbihlLHQsbil7cmV0dXJuIGEoKChuLHI9bnVsbCxpKT0+ZSgoZT0+bi5jYWxsKHIsdChlKSkpLG51bGwsaSkpLG4pfWZ1bmN0aW9uIHIoZSx0LG4pe3JldHVybiBhKCgobixyPW51bGwsaSk9PmUoKGU9Pnt0KGUpLG4uY2FsbChyLGUpfSksbnVsbCxpKSksbil9ZnVuY3Rpb24gaShlLHQsbil7cmV0dXJuIGEoKChuLHI9bnVsbCxpKT0+ZSgoZT0+dChlKSYmbi5jYWxsKHIsZSkpLG51bGwsaSkpLG4pfWZ1bmN0aW9uIG8oZSx0LHIsaSl7bGV0IG89cjtyZXR1cm4gbihlLChlPT4obz10KG8sZSksbykpLGkpfWZ1bmN0aW9uIGEoZSx0KXtsZXQgbjtjb25zdCByPW5ldyBCKHtvbkZpcnN0TGlzdGVuZXJBZGQoKXtuPWUoci5maXJlLHIpfSxvbkxhc3RMaXN0ZW5lclJlbW92ZSgpe251bGw9PW58fG4uZGlzcG9zZSgpfX0pO3JldHVybiBudWxsPT10fHx0LmFkZChyKSxyLmV2ZW50fWZ1bmN0aW9uIHMoZSx0LG49MTAwLHI9ITEsaSxvKXtsZXQgYSxzLGMsbD0wO2NvbnN0IHU9bmV3IEIoe2xlYWtXYXJuaW5nVGhyZXNob2xkOmksb25GaXJzdExpc3RlbmVyQWRkKCl7YT1lKChlPT57bCsrLHM9dChzLGUpLHImJiFjJiYodS5maXJlKHMpLHM9dm9pZCAwKSxjbGVhclRpbWVvdXQoYyksYz1zZXRUaW1lb3V0KCgoKT0+e2NvbnN0IGU9cztzPXZvaWQgMCxjPXZvaWQgMCwoIXJ8fGw+MSkmJnUuZmlyZShlKSxsPTB9KSxuKX0pKX0sb25MYXN0TGlzdGVuZXJSZW1vdmUoKXthLmRpc3Bvc2UoKX19KTtyZXR1cm4gbnVsbD09b3x8by5hZGQodSksdS5ldmVudH1mdW5jdGlvbiBjKGUsdD0oKGUsdCk9PmU9PT10KSxuKXtsZXQgcixvPSEwO3JldHVybiBpKGUsKGU9Pntjb25zdCBuPW98fCF0KGUscik7cmV0dXJuIG89ITEscj1lLG59KSxuKX1lLk5vbmU9KCk9PmYuTm9uZSxlLm9uY2U9dCxlLm1hcD1uLGUuZm9yRWFjaD1yLGUuZmlsdGVyPWksZS5zaWduYWw9ZnVuY3Rpb24oZSl7cmV0dXJuIGV9LGUuYW55PWZ1bmN0aW9uKC4uLmUpe3JldHVybih0LG49bnVsbCxyKT0+ZnVuY3Rpb24oLi4uZSl7cmV0dXJuIHUoKCgpPT5sKGUpKSl9KC4uLmUubWFwKChlPT5lKChlPT50LmNhbGwobixlKSksbnVsbCxyKSkpKX0sZS5yZWR1Y2U9byxlLmRlYm91bmNlPXMsZS5sYXRjaD1jLGUuc3BsaXQ9ZnVuY3Rpb24odCxuLHIpe3JldHVybltlLmZpbHRlcih0LG4sciksZS5maWx0ZXIodCwoZT0+IW4oZSkpLHIpXX0sZS5idWZmZXI9ZnVuY3Rpb24oZSx0PSExLG49W10pe2xldCByPW4uc2xpY2UoKSxpPWUoKGU9PntyP3IucHVzaChlKTphLmZpcmUoZSl9KSk7Y29uc3Qgbz0oKT0+e251bGw9PXJ8fHIuZm9yRWFjaCgoZT0+YS5maXJlKGUpKSkscj1udWxsfSxhPW5ldyBCKHtvbkZpcnN0TGlzdGVuZXJBZGQoKXtpfHwoaT1lKChlPT5hLmZpcmUoZSkpKSl9LG9uRmlyc3RMaXN0ZW5lckRpZEFkZCgpe3ImJih0P3NldFRpbWVvdXQobyk6bygpKX0sb25MYXN0TGlzdGVuZXJSZW1vdmUoKXtpJiZpLmRpc3Bvc2UoKSxpPW51bGx9fSk7cmV0dXJuIGEuZXZlbnR9O2NsYXNzIGR7Y29uc3RydWN0b3IoZSl7dGhpcy5ldmVudD1lLHRoaXMuZGlzcG9zYWJsZXM9bmV3IGh9bWFwKGUpe3JldHVybiBuZXcgZChuKHRoaXMuZXZlbnQsZSx0aGlzLmRpc3Bvc2FibGVzKSl9Zm9yRWFjaChlKXtyZXR1cm4gbmV3IGQocih0aGlzLmV2ZW50LGUsdGhpcy5kaXNwb3NhYmxlcykpfWZpbHRlcihlKXtyZXR1cm4gbmV3IGQoaSh0aGlzLmV2ZW50LGUsdGhpcy5kaXNwb3NhYmxlcykpfXJlZHVjZShlLHQpe3JldHVybiBuZXcgZChvKHRoaXMuZXZlbnQsZSx0LHRoaXMuZGlzcG9zYWJsZXMpKX1sYXRjaCgpe3JldHVybiBuZXcgZChjKHRoaXMuZXZlbnQsdm9pZCAwLHRoaXMuZGlzcG9zYWJsZXMpKX1kZWJvdW5jZShlLHQ9MTAwLG49ITEscil7cmV0dXJuIG5ldyBkKHModGhpcy5ldmVudCxlLHQsbixyLHRoaXMuZGlzcG9zYWJsZXMpKX1vbihlLHQsbil7cmV0dXJuIHRoaXMuZXZlbnQoZSx0LG4pfW9uY2UoZSxuLHIpe3JldHVybiB0KHRoaXMuZXZlbnQpKGUsbixyKX1kaXNwb3NlKCl7dGhpcy5kaXNwb3NhYmxlcy5kaXNwb3NlKCl9fWUuY2hhaW49ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBkKGUpfSxlLmZyb21Ob2RlRXZlbnRFbWl0dGVyPWZ1bmN0aW9uKGUsdCxuPShlPT5lKSl7Y29uc3Qgcj0oLi4uZSk9PmkuZmlyZShuKC4uLmUpKSxpPW5ldyBCKHtvbkZpcnN0TGlzdGVuZXJBZGQ6KCk9PmUub24odCxyKSxvbkxhc3RMaXN0ZW5lclJlbW92ZTooKT0+ZS5yZW1vdmVMaXN0ZW5lcih0LHIpfSk7cmV0dXJuIGkuZXZlbnR9LGUuZnJvbURPTUV2ZW50RW1pdHRlcj1mdW5jdGlvbihlLHQsbj0oZT0+ZSkpe2NvbnN0IHI9KC4uLmUpPT5pLmZpcmUobiguLi5lKSksaT1uZXcgQih7b25GaXJzdExpc3RlbmVyQWRkOigpPT5lLmFkZEV2ZW50TGlzdGVuZXIodCxyKSxvbkxhc3RMaXN0ZW5lclJlbW92ZTooKT0+ZS5yZW1vdmVFdmVudExpc3RlbmVyKHQscil9KTtyZXR1cm4gaS5ldmVudH0sZS50b1Byb21pc2U9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBQcm9taXNlKChuPT50KGUpKG4pKSl9LGUucnVuQW5kU3Vic2NyaWJlPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHQodm9pZCAwKSxlKChlPT50KGUpKSl9LGUucnVuQW5kU3Vic2NyaWJlV2l0aFN0b3JlPWZ1bmN0aW9uKGUsdCl7bGV0IG49bnVsbDtmdW5jdGlvbiByKGUpe251bGw9PW58fG4uZGlzcG9zZSgpLG49bmV3IGgsdChlLG4pfXIodm9pZCAwKTtjb25zdCBpPWUoKGU9PnIoZSkpKTtyZXR1cm4gdSgoKCk9PntpLmRpc3Bvc2UoKSxudWxsPT1ufHxuLmRpc3Bvc2UoKX0pKX07Y2xhc3MgbXtjb25zdHJ1Y3RvcihlLHQpe3RoaXMub2JzPWUsdGhpcy5fY291bnRlcj0wLHRoaXMuX2hhc0NoYW5nZWQ9ITE7Y29uc3Qgbj17b25GaXJzdExpc3RlbmVyQWRkOigpPT57ZS5hZGRPYnNlcnZlcih0aGlzKX0sb25MYXN0TGlzdGVuZXJSZW1vdmU6KCk9PntlLnJlbW92ZU9ic2VydmVyKHRoaXMpfX07dGhpcy5lbWl0dGVyPW5ldyBCKG4pLHQmJnQuYWRkKHRoaXMuZW1pdHRlcil9YmVnaW5VcGRhdGUoZSl7dGhpcy5fY291bnRlcisrfWhhbmRsZUNoYW5nZShlLHQpe3RoaXMuX2hhc0NoYW5nZWQ9ITB9ZW5kVXBkYXRlKGUpezA9PS0tdGhpcy5fY291bnRlciYmdGhpcy5faGFzQ2hhbmdlZCYmKHRoaXMuX2hhc0NoYW5nZWQ9ITEsdGhpcy5lbWl0dGVyLmZpcmUodGhpcy5vYnMuZ2V0KCkpKX19ZS5mcm9tT2JzZXJ2YWJsZT1mdW5jdGlvbihlLHQpe3JldHVybiBuZXcgbShlLHQpLmVtaXR0ZXIuZXZlbnR9fShGfHwoRj17fSkpO2NsYXNzIEt7Y29uc3RydWN0b3IoZSl7dGhpcy5fbGlzdGVuZXJDb3VudD0wLHRoaXMuX2ludm9jYXRpb25Db3VudD0wLHRoaXMuX2VsYXBzZWRPdmVyYWxsPTAsdGhpcy5fbmFtZT1gJHtlfV8ke0suX2lkUG9vbCsrfWB9c3RhcnQoZSl7dGhpcy5fc3RvcFdhdGNoPW5ldyBWKCEwKSx0aGlzLl9saXN0ZW5lckNvdW50PWV9c3RvcCgpe2lmKHRoaXMuX3N0b3BXYXRjaCl7Y29uc3QgZT10aGlzLl9zdG9wV2F0Y2guZWxhcHNlZCgpO3RoaXMuX2VsYXBzZWRPdmVyYWxsKz1lLHRoaXMuX2ludm9jYXRpb25Db3VudCs9MSxjb25zb2xlLmluZm8oYGRpZCBGSVJFICR7dGhpcy5fbmFtZX06IGVsYXBzZWRfbXM6ICR7ZS50b0ZpeGVkKDUpfSwgbGlzdGVuZXI6ICR7dGhpcy5fbGlzdGVuZXJDb3VudH0gKGVsYXBzZWRfb3ZlcmFsbDogJHt0aGlzLl9lbGFwc2VkT3ZlcmFsbC50b0ZpeGVkKDIpfSwgaW52b2NhdGlvbnM6ICR7dGhpcy5faW52b2NhdGlvbkNvdW50fSlgKSx0aGlzLl9zdG9wV2F0Y2g9dm9pZCAwfX19Sy5faWRQb29sPTA7Y2xhc3Mgantjb25zdHJ1Y3RvcihlKXt0aGlzLnZhbHVlPWV9c3RhdGljIGNyZWF0ZSgpe3ZhciBlO3JldHVybiBuZXcgaihudWxsIT09KGU9KG5ldyBFcnJvcikuc3RhY2spJiZ2b2lkIDAhPT1lP2U6IiIpfXByaW50KCl7Y29uc29sZS53YXJuKHRoaXMudmFsdWUuc3BsaXQoIlxuIikuc2xpY2UoMikuam9pbigiXG4iKSl9fWNsYXNzIFV7Y29uc3RydWN0b3IoZSx0LG4pe3RoaXMuY2FsbGJhY2s9ZSx0aGlzLmNhbGxiYWNrVGhpcz10LHRoaXMuc3RhY2s9bix0aGlzLnN1YnNjcmlwdGlvbj1uZXcgZH1pbnZva2UoZSl7dGhpcy5jYWxsYmFjay5jYWxsKHRoaXMuY2FsbGJhY2tUaGlzLGUpfX1jbGFzcyBCe2NvbnN0cnVjdG9yKGUpe3ZhciB0LG47dGhpcy5fZGlzcG9zZWQ9ITEsdGhpcy5fb3B0aW9ucz1lLHRoaXMuX2xlYWthZ2VNb249dm9pZCAwLHRoaXMuX3BlcmZNb249KG51bGw9PT0odD10aGlzLl9vcHRpb25zKXx8dm9pZCAwPT09dD92b2lkIDA6dC5fcHJvZk5hbWUpP25ldyBLKHRoaXMuX29wdGlvbnMuX3Byb2ZOYW1lKTp2b2lkIDAsdGhpcy5fZGVsaXZlcnlRdWV1ZT1udWxsPT09KG49dGhpcy5fb3B0aW9ucyl8fHZvaWQgMD09PW4/dm9pZCAwOm4uZGVsaXZlcnlRdWV1ZX1kaXNwb3NlKCl7dmFyIGUsdCxuLHI7dGhpcy5fZGlzcG9zZWR8fCh0aGlzLl9kaXNwb3NlZD0hMCx0aGlzLl9saXN0ZW5lcnMmJnRoaXMuX2xpc3RlbmVycy5jbGVhcigpLG51bGw9PT0oZT10aGlzLl9kZWxpdmVyeVF1ZXVlKXx8dm9pZCAwPT09ZXx8ZS5jbGVhcih0aGlzKSxudWxsPT09KG49bnVsbD09PSh0PXRoaXMuX29wdGlvbnMpfHx2b2lkIDA9PT10P3ZvaWQgMDp0Lm9uTGFzdExpc3RlbmVyUmVtb3ZlKXx8dm9pZCAwPT09bnx8bi5jYWxsKHQpLG51bGw9PT0ocj10aGlzLl9sZWFrYWdlTW9uKXx8dm9pZCAwPT09cnx8ci5kaXNwb3NlKCkpfWdldCBldmVudCgpe3JldHVybiB0aGlzLl9ldmVudHx8KHRoaXMuX2V2ZW50PShlLHQsbik9Pnt2YXIgcixpLG87dGhpcy5fbGlzdGVuZXJzfHwodGhpcy5fbGlzdGVuZXJzPW5ldyBnKTtjb25zdCBhPXRoaXMuX2xpc3RlbmVycy5pc0VtcHR5KCk7bGV0IHMsYzthJiYobnVsbD09PShyPXRoaXMuX29wdGlvbnMpfHx2b2lkIDA9PT1yP3ZvaWQgMDpyLm9uRmlyc3RMaXN0ZW5lckFkZCkmJnRoaXMuX29wdGlvbnMub25GaXJzdExpc3RlbmVyQWRkKHRoaXMpLHRoaXMuX2xlYWthZ2VNb24mJnRoaXMuX2xpc3RlbmVycy5zaXplPj0zMCYmKGM9ai5jcmVhdGUoKSxzPXRoaXMuX2xlYWthZ2VNb24uY2hlY2soYyx0aGlzLl9saXN0ZW5lcnMuc2l6ZSsxKSk7Y29uc3QgbD1uZXcgVShlLHQsYyksdT10aGlzLl9saXN0ZW5lcnMucHVzaChsKTthJiYobnVsbD09PShpPXRoaXMuX29wdGlvbnMpfHx2b2lkIDA9PT1pP3ZvaWQgMDppLm9uRmlyc3RMaXN0ZW5lckRpZEFkZCkmJnRoaXMuX29wdGlvbnMub25GaXJzdExpc3RlbmVyRGlkQWRkKHRoaXMpLChudWxsPT09KG89dGhpcy5fb3B0aW9ucyl8fHZvaWQgMD09PW8/dm9pZCAwOm8ub25MaXN0ZW5lckRpZEFkZCkmJnRoaXMuX29wdGlvbnMub25MaXN0ZW5lckRpZEFkZCh0aGlzLGUsdCk7Y29uc3QgZj1sLnN1YnNjcmlwdGlvbi5zZXQoKCgpPT57aWYobnVsbD09c3x8cygpLCF0aGlzLl9kaXNwb3NlZCYmKHUoKSx0aGlzLl9vcHRpb25zJiZ0aGlzLl9vcHRpb25zLm9uTGFzdExpc3RlbmVyUmVtb3ZlKSl7dGhpcy5fbGlzdGVuZXJzJiYhdGhpcy5fbGlzdGVuZXJzLmlzRW1wdHkoKXx8dGhpcy5fb3B0aW9ucy5vbkxhc3RMaXN0ZW5lclJlbW92ZSh0aGlzKX19KSk7cmV0dXJuIG4gaW5zdGFuY2VvZiBoP24uYWRkKGYpOkFycmF5LmlzQXJyYXkobikmJm4ucHVzaChmKSxmfSksdGhpcy5fZXZlbnR9ZmlyZShlKXt2YXIgdCxuO2lmKHRoaXMuX2xpc3RlbmVycyl7dGhpcy5fZGVsaXZlcnlRdWV1ZXx8KHRoaXMuX2RlbGl2ZXJ5UXVldWU9bmV3ICQpO2Zvcihjb25zdCB0IG9mIHRoaXMuX2xpc3RlbmVycyl0aGlzLl9kZWxpdmVyeVF1ZXVlLnB1c2godGhpcyx0LGUpO251bGw9PT0odD10aGlzLl9wZXJmTW9uKXx8dm9pZCAwPT09dHx8dC5zdGFydCh0aGlzLl9kZWxpdmVyeVF1ZXVlLnNpemUpLHRoaXMuX2RlbGl2ZXJ5UXVldWUuZGVsaXZlcigpLG51bGw9PT0obj10aGlzLl9wZXJmTW9uKXx8dm9pZCAwPT09bnx8bi5zdG9wKCl9fX1jbGFzcyBxe2NvbnN0cnVjdG9yKCl7dGhpcy5fcXVldWU9bmV3IGd9Z2V0IHNpemUoKXtyZXR1cm4gdGhpcy5fcXVldWUuc2l6ZX1wdXNoKGUsdCxuKXt0aGlzLl9xdWV1ZS5wdXNoKG5ldyBXKGUsdCxuKSl9Y2xlYXIoZSl7Y29uc3QgdD1uZXcgZztmb3IoY29uc3QgbiBvZiB0aGlzLl9xdWV1ZSluLmVtaXR0ZXIhPT1lJiZ0LnB1c2gobik7dGhpcy5fcXVldWU9dH1kZWxpdmVyKCl7Zm9yKDt0aGlzLl9xdWV1ZS5zaXplPjA7KXtjb25zdCBlPXRoaXMuX3F1ZXVlLnNoaWZ0KCk7dHJ5e2UubGlzdGVuZXIuaW52b2tlKGUuZXZlbnQpfWNhdGNoKGUpe3QoZSl9fX19Y2xhc3MgJCBleHRlbmRzIHF7Y2xlYXIoZSl7dGhpcy5fcXVldWUuY2xlYXIoKX19Y2xhc3MgV3tjb25zdHJ1Y3RvcihlLHQsbil7dGhpcy5lbWl0dGVyPWUsdGhpcy5saXN0ZW5lcj10LHRoaXMuZXZlbnQ9bn19ZnVuY3Rpb24gSChlKXtjb25zdCB0PVtdO2Zvcihjb25zdCBuIG9mIGZ1bmN0aW9uKGUpe2xldCB0PVtdLG49T2JqZWN0LmdldFByb3RvdHlwZU9mKGUpO2Zvcig7T2JqZWN0LnByb3RvdHlwZSE9PW47KXQ9dC5jb25jYXQoT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMobikpLG49T2JqZWN0LmdldFByb3RvdHlwZU9mKG4pO3JldHVybiB0fShlKSkiZnVuY3Rpb24iPT10eXBlb2YgZVtuXSYmdC5wdXNoKG4pO3JldHVybiB0fWZ1bmN0aW9uIHooZSx0PSJVbnJlYWNoYWJsZSIpe3Rocm93IG5ldyBFcnJvcih0KX1jbGFzcyBHe2NvbnN0cnVjdG9yKGUpe3RoaXMuZXhlY3V0b3I9ZSx0aGlzLl9kaWRSdW49ITF9aGFzVmFsdWUoKXtyZXR1cm4gdGhpcy5fZGlkUnVufWdldFZhbHVlKCl7aWYoIXRoaXMuX2RpZFJ1bil0cnl7dGhpcy5fdmFsdWU9dGhpcy5leGVjdXRvcigpfWNhdGNoKGUpe3RoaXMuX2Vycm9yPWV9ZmluYWxseXt0aGlzLl9kaWRSdW49ITB9aWYodGhpcy5fZXJyb3IpdGhyb3cgdGhpcy5fZXJyb3I7cmV0dXJuIHRoaXMuX3ZhbHVlfWdldCByYXdWYWx1ZSgpe3JldHVybiB0aGlzLl92YWx1ZX19ZnVuY3Rpb24gSihlKXtyZXR1cm4gZT49NjUmJmU8PTkwfWZ1bmN0aW9uIFgoZSl7cmV0dXJuIDU1Mjk2PD1lJiZlPD01NjMxOX1mdW5jdGlvbiBaKGUsdCxuKXtjb25zdCByPWUuY2hhckNvZGVBdChuKTtpZihYKHIpJiZuKzE8dCl7Y29uc3QgdD1lLmNoYXJDb2RlQXQobisxKTtpZihmdW5jdGlvbihlKXtyZXR1cm4gNTYzMjA8PWUmJmU8PTU3MzQzfSh0KSlyZXR1cm4gdC01NjMyMCsoci01NTI5Njw8MTApKzY1NTM2fXJldHVybiByfWNvbnN0IFk9L15bXHRcblxyXHgyMC1ceDdFXSokLztjbGFzcyBRe2NvbnN0cnVjdG9yKGUpe3RoaXMuY29uZnVzYWJsZURpY3Rpb25hcnk9ZX1zdGF0aWMgZ2V0SW5zdGFuY2UoZSl7cmV0dXJuIFEuY2FjaGUuZ2V0KEFycmF5LmZyb20oZSkpfXN0YXRpYyBnZXRMb2NhbGVzKCl7cmV0dXJuIFEuX2xvY2FsZXMuZ2V0VmFsdWUoKX1pc0FtYmlndW91cyhlKXtyZXR1cm4gdGhpcy5jb25mdXNhYmxlRGljdGlvbmFyeS5oYXMoZSl9Z2V0UHJpbWFyeUNvbmZ1c2FibGUoZSl7cmV0dXJuIHRoaXMuY29uZnVzYWJsZURpY3Rpb25hcnkuZ2V0KGUpfWdldENvbmZ1c2FibGVDb2RlUG9pbnRzKCl7cmV0dXJuIG5ldyBTZXQodGhpcy5jb25mdXNhYmxlRGljdGlvbmFyeS5rZXlzKCkpfX1EPVEsUS5hbWJpZ3VvdXNDaGFyYWN0ZXJEYXRhPW5ldyBHKCgoKT0+SlNPTi5wYXJzZSgneyJfY29tbW9uIjpbODIzMiwzMiw4MjMzLDMyLDU3NjAsMzIsODE5MiwzMiw4MTkzLDMyLDgxOTQsMzIsODE5NSwzMiw4MTk2LDMyLDgxOTcsMzIsODE5OCwzMiw4MjAwLDMyLDgyMDEsMzIsODIwMiwzMiw4Mjg3LDMyLDgxOTksMzIsODIzOSwzMiwyMDQyLDk1LDY1MTAxLDk1LDY1MTAyLDk1LDY1MTAzLDk1LDgyMDgsNDUsODIwOSw0NSw4MjEwLDQ1LDY1MTEyLDQ1LDE3NDgsNDUsODI1OSw0NSw3MjcsNDUsODcyMiw0NSwxMDEzNCw0NSwxMTQ1MCw0NSwxNTQ5LDQ0LDE2NDMsNDQsODIxOCw0NCwxODQsNDQsNDIyMzMsNDQsODk0LDU5LDIzMDcsNTgsMjY5MSw1OCwxNDE3LDU4LDE3OTUsNTgsMTc5Niw1OCw1ODY4LDU4LDY1MDcyLDU4LDYxNDcsNTgsNjE1Myw1OCw4MjgyLDU4LDE0NzUsNTgsNzYwLDU4LDQyODg5LDU4LDg3NTgsNTgsNzIwLDU4LDQyMjM3LDU4LDQ1MSwzMywxMTYwMSwzMyw2NjAsNjMsNTc3LDYzLDI0MjksNjMsNTAzOCw2Myw0MjczMSw2MywxMTkxNDksNDYsODIyOCw0NiwxNzkzLDQ2LDE3OTQsNDYsNDI1MTAsNDYsNjgxNzYsNDYsMTYzMiw0NiwxNzc2LDQ2LDQyMjMyLDQ2LDEzNzMsOTYsNjUyODcsOTYsODIxOSw5Niw4MjQyLDk2LDEzNzAsOTYsMTUyMyw5Niw4MTc1LDk2LDY1MzQ0LDk2LDkwMCw5Niw4MTg5LDk2LDgxMjUsOTYsODEyNyw5Niw4MTkwLDk2LDY5Nyw5Niw4ODQsOTYsNzEyLDk2LDcxNCw5Niw3MTUsOTYsNzU2LDk2LDY5OSw5Niw3MDEsOTYsNzAwLDk2LDcwMiw5Niw0Mjg5Miw5NiwxNDk3LDk2LDIwMzYsOTYsMjAzNyw5Niw1MTk0LDk2LDU4MzYsOTYsOTQwMzMsOTYsOTQwMzQsOTYsNjUzMzksOTEsMTAwODgsNDAsMTAwOTgsNDAsMTIzMDgsNDAsNjQ4MzAsNDAsNjUzNDEsOTMsMTAwODksNDEsMTAwOTksNDEsMTIzMDksNDEsNjQ4MzEsNDEsMTAxMDAsMTIzLDExOTA2MCwxMjMsMTAxMDEsMTI1LDY1MzQyLDk0LDgyNzAsNDIsMTY0NSw0Miw4NzI3LDQyLDY2MzM1LDQyLDU5NDEsNDcsODI1Nyw0Nyw4NzI1LDQ3LDgyNjAsNDcsOTU4NSw0NywxMDE4Nyw0NywxMDc0NCw0NywxMTkzNTQsNDcsMTI3NTUsNDcsMTIzMzksNDcsMTE0NjIsNDcsMjAwMzEsNDcsMTIwMzUsNDcsNjUzNDAsOTIsNjUxMjgsOTIsODcyNiw5MiwxMDE4OSw5MiwxMDc0MSw5MiwxMDc0NSw5MiwxMTkzMTEsOTIsMTE5MzU1LDkyLDEyNzU2LDkyLDIwMDIyLDkyLDEyMDM0LDkyLDQyODcyLDM4LDcwOCw5NCw3MTAsOTQsNTg2OSw0MywxMDEzMyw0Myw2NjIwMyw0Myw4MjQ5LDYwLDEwMDk0LDYwLDcwNiw2MCwxMTkzNTAsNjAsNTE3Niw2MCw1ODEwLDYwLDUxMjAsNjEsMTE4NDAsNjEsMTI0NDgsNjEsNDIyMzksNjEsODI1MCw2MiwxMDA5NSw2Miw3MDcsNjIsMTE5MzUxLDYyLDUxNzEsNjIsOTQwMTUsNjIsODI3NSwxMjYsNzMyLDEyNiw4MTI4LDEyNiw4NzY0LDEyNiw2NTM3MiwxMjQsNjUyOTMsNDUsMTIwNzg0LDUwLDEyMDc5NCw1MCwxMjA4MDQsNTAsMTIwODE0LDUwLDEyMDgyNCw1MCwxMzAwMzQsNTAsNDI4NDIsNTAsNDIzLDUwLDEwMDAsNTAsNDI1NjQsNTAsNTMxMSw1MCw0MjczNSw1MCwxMTkzMDIsNTEsMTIwNzg1LDUxLDEyMDc5NSw1MSwxMjA4MDUsNTEsMTIwODE1LDUxLDEyMDgyNSw1MSwxMzAwMzUsNTEsNDI5MjMsNTEsNTQwLDUxLDQzOSw1MSw0Mjg1OCw1MSwxMTQ2OCw1MSwxMjQ4LDUxLDk0MDExLDUxLDcxODgyLDUxLDEyMDc4Niw1MiwxMjA3OTYsNTIsMTIwODA2LDUyLDEyMDgxNiw1MiwxMjA4MjYsNTIsMTMwMDM2LDUyLDUwNzAsNTIsNzE4NTUsNTIsMTIwNzg3LDUzLDEyMDc5Nyw1MywxMjA4MDcsNTMsMTIwODE3LDUzLDEyMDgyNyw1MywxMzAwMzcsNTMsNDQ0LDUzLDcxODY3LDUzLDEyMDc4OCw1NCwxMjA3OTgsNTQsMTIwODA4LDU0LDEyMDgxOCw1NCwxMjA4MjgsNTQsMTMwMDM4LDU0LDExNDc0LDU0LDUxMDIsNTQsNzE4OTMsNTQsMTE5MzE0LDU1LDEyMDc4OSw1NSwxMjA3OTksNTUsMTIwODA5LDU1LDEyMDgxOSw1NSwxMjA4MjksNTUsMTMwMDM5LDU1LDY2NzcwLDU1LDcxODc4LDU1LDI4MTksNTYsMjUzOCw1NiwyNjY2LDU2LDEyNTEzMSw1NiwxMjA3OTAsNTYsMTIwODAwLDU2LDEyMDgxMCw1NiwxMjA4MjAsNTYsMTIwODMwLDU2LDEzMDA0MCw1Niw1NDcsNTYsNTQ2LDU2LDY2MzMwLDU2LDI2NjMsNTcsMjkyMCw1NywyNTQxLDU3LDM0MzcsNTcsMTIwNzkxLDU3LDEyMDgwMSw1NywxMjA4MTEsNTcsMTIwODIxLDU3LDEyMDgzMSw1NywxMzAwNDEsNTcsNDI4NjIsNTcsMTE0NjYsNTcsNzE4ODQsNTcsNzE4NTIsNTcsNzE4OTQsNTcsOTA4Miw5Nyw2NTM0NSw5NywxMTk4MzQsOTcsMTE5ODg2LDk3LDExOTkzOCw5NywxMTk5OTAsOTcsMTIwMDQyLDk3LDEyMDA5NCw5NywxMjAxNDYsOTcsMTIwMTk4LDk3LDEyMDI1MCw5NywxMjAzMDIsOTcsMTIwMzU0LDk3LDEyMDQwNiw5NywxMjA0NTgsOTcsNTkzLDk3LDk0NSw5NywxMjA1MTQsOTcsMTIwNTcyLDk3LDEyMDYzMCw5NywxMjA2ODgsOTcsMTIwNzQ2LDk3LDY1MzEzLDY1LDExOTgwOCw2NSwxMTk4NjAsNjUsMTE5OTEyLDY1LDExOTk2NCw2NSwxMjAwMTYsNjUsMTIwMDY4LDY1LDEyMDEyMCw2NSwxMjAxNzIsNjUsMTIwMjI0LDY1LDEyMDI3Niw2NSwxMjAzMjgsNjUsMTIwMzgwLDY1LDEyMDQzMiw2NSw5MTMsNjUsMTIwNDg4LDY1LDEyMDU0Niw2NSwxMjA2MDQsNjUsMTIwNjYyLDY1LDEyMDcyMCw2NSw1MDM0LDY1LDU1NzMsNjUsNDIyMjIsNjUsOTQwMTYsNjUsNjYyMDgsNjUsMTE5ODM1LDk4LDExOTg4Nyw5OCwxMTk5MzksOTgsMTE5OTkxLDk4LDEyMDA0Myw5OCwxMjAwOTUsOTgsMTIwMTQ3LDk4LDEyMDE5OSw5OCwxMjAyNTEsOTgsMTIwMzAzLDk4LDEyMDM1NSw5OCwxMjA0MDcsOTgsMTIwNDU5LDk4LDM4OCw5OCw1MDcxLDk4LDUyMzQsOTgsNTU1MSw5OCw2NTMxNCw2Niw4NDkyLDY2LDExOTgwOSw2NiwxMTk4NjEsNjYsMTE5OTEzLDY2LDEyMDAxNyw2NiwxMjAwNjksNjYsMTIwMTIxLDY2LDEyMDE3Myw2NiwxMjAyMjUsNjYsMTIwMjc3LDY2LDEyMDMyOSw2NiwxMjAzODEsNjYsMTIwNDMzLDY2LDQyOTMyLDY2LDkxNCw2NiwxMjA0ODksNjYsMTIwNTQ3LDY2LDEyMDYwNSw2NiwxMjA2NjMsNjYsMTIwNzIxLDY2LDUxMDgsNjYsNTYyMyw2Niw0MjE5Miw2Niw2NjE3OCw2Niw2NjIwOSw2Niw2NjMwNSw2Niw2NTM0Nyw5OSw4NTczLDk5LDExOTgzNiw5OSwxMTk4ODgsOTksMTE5OTQwLDk5LDExOTk5Miw5OSwxMjAwNDQsOTksMTIwMDk2LDk5LDEyMDE0OCw5OSwxMjAyMDAsOTksMTIwMjUyLDk5LDEyMDMwNCw5OSwxMjAzNTYsOTksMTIwNDA4LDk5LDEyMDQ2MCw5OSw3NDI4LDk5LDEwMTAsOTksMTE0MjksOTksNDM5NTEsOTksNjY2MjEsOTksMTI4ODQ0LDY3LDcxOTIyLDY3LDcxOTEzLDY3LDY1MzE1LDY3LDg1NTcsNjcsODQ1MCw2Nyw4NDkzLDY3LDExOTgxMCw2NywxMTk4NjIsNjcsMTE5OTE0LDY3LDExOTk2Niw2NywxMjAwMTgsNjcsMTIwMTc0LDY3LDEyMDIyNiw2NywxMjAyNzgsNjcsMTIwMzMwLDY3LDEyMDM4Miw2NywxMjA0MzQsNjcsMTAxNyw2NywxMTQyOCw2Nyw1MDg3LDY3LDQyMjAyLDY3LDY2MjEwLDY3LDY2MzA2LDY3LDY2NTgxLDY3LDY2ODQ0LDY3LDg1NzQsMTAwLDg1MTgsMTAwLDExOTgzNywxMDAsMTE5ODg5LDEwMCwxMTk5NDEsMTAwLDExOTk5MywxMDAsMTIwMDQ1LDEwMCwxMjAwOTcsMTAwLDEyMDE0OSwxMDAsMTIwMjAxLDEwMCwxMjAyNTMsMTAwLDEyMDMwNSwxMDAsMTIwMzU3LDEwMCwxMjA0MDksMTAwLDEyMDQ2MSwxMDAsMTI4MSwxMDAsNTA5NSwxMDAsNTIzMSwxMDAsNDIxOTQsMTAwLDg1NTgsNjgsODUxNyw2OCwxMTk4MTEsNjgsMTE5ODYzLDY4LDExOTkxNSw2OCwxMTk5NjcsNjgsMTIwMDE5LDY4LDEyMDA3MSw2OCwxMjAxMjMsNjgsMTIwMTc1LDY4LDEyMDIyNyw2OCwxMjAyNzksNjgsMTIwMzMxLDY4LDEyMDM4Myw2OCwxMjA0MzUsNjgsNTAyNCw2OCw1NTk4LDY4LDU2MTAsNjgsNDIxOTUsNjgsODQ5NCwxMDEsNjUzNDksMTAxLDg0OTUsMTAxLDg1MTksMTAxLDExOTgzOCwxMDEsMTE5ODkwLDEwMSwxMTk5NDIsMTAxLDEyMDA0NiwxMDEsMTIwMDk4LDEwMSwxMjAxNTAsMTAxLDEyMDIwMiwxMDEsMTIwMjU0LDEwMSwxMjAzMDYsMTAxLDEyMDM1OCwxMDEsMTIwNDEwLDEwMSwxMjA0NjIsMTAxLDQzODI2LDEwMSwxMjEzLDEwMSw4OTU5LDY5LDY1MzE3LDY5LDg0OTYsNjksMTE5ODEyLDY5LDExOTg2NCw2OSwxMTk5MTYsNjksMTIwMDIwLDY5LDEyMDA3Miw2OSwxMjAxMjQsNjksMTIwMTc2LDY5LDEyMDIyOCw2OSwxMjAyODAsNjksMTIwMzMyLDY5LDEyMDM4NCw2OSwxMjA0MzYsNjksOTE3LDY5LDEyMDQ5Miw2OSwxMjA1NTAsNjksMTIwNjA4LDY5LDEyMDY2Niw2OSwxMjA3MjQsNjksMTE1NzcsNjksNTAzNiw2OSw0MjIyNCw2OSw3MTg0Niw2OSw3MTg1NCw2OSw2NjE4Miw2OSwxMTk4MzksMTAyLDExOTg5MSwxMDIsMTE5OTQzLDEwMiwxMTk5OTUsMTAyLDEyMDA0NywxMDIsMTIwMDk5LDEwMiwxMjAxNTEsMTAyLDEyMDIwMywxMDIsMTIwMjU1LDEwMiwxMjAzMDcsMTAyLDEyMDM1OSwxMDIsMTIwNDExLDEwMiwxMjA0NjMsMTAyLDQzODI5LDEwMiw0MjkwNSwxMDIsMzgzLDEwMiw3ODM3LDEwMiwxNDEyLDEwMiwxMTkzMTUsNzAsODQ5Nyw3MCwxMTk4MTMsNzAsMTE5ODY1LDcwLDExOTkxNyw3MCwxMjAwMjEsNzAsMTIwMDczLDcwLDEyMDEyNSw3MCwxMjAxNzcsNzAsMTIwMjI5LDcwLDEyMDI4MSw3MCwxMjAzMzMsNzAsMTIwMzg1LDcwLDEyMDQzNyw3MCw0MjkwNCw3MCw5ODgsNzAsMTIwNzc4LDcwLDU1NTYsNzAsNDIyMDUsNzAsNzE4NzQsNzAsNzE4NDIsNzAsNjYxODMsNzAsNjYyMTMsNzAsNjY4NTMsNzAsNjUzNTEsMTAzLDg0NTgsMTAzLDExOTg0MCwxMDMsMTE5ODkyLDEwMywxMTk5NDQsMTAzLDEyMDA0OCwxMDMsMTIwMTAwLDEwMywxMjAxNTIsMTAzLDEyMDIwNCwxMDMsMTIwMjU2LDEwMywxMjAzMDgsMTAzLDEyMDM2MCwxMDMsMTIwNDEyLDEwMywxMjA0NjQsMTAzLDYwOSwxMDMsNzU1NSwxMDMsMzk3LDEwMywxNDA5LDEwMywxMTk4MTQsNzEsMTE5ODY2LDcxLDExOTkxOCw3MSwxMTk5NzAsNzEsMTIwMDIyLDcxLDEyMDA3NCw3MSwxMjAxMjYsNzEsMTIwMTc4LDcxLDEyMDIzMCw3MSwxMjAyODIsNzEsMTIwMzM0LDcxLDEyMDM4Niw3MSwxMjA0MzgsNzEsMTI5Miw3MSw1MDU2LDcxLDUxMDcsNzEsNDIxOTgsNzEsNjUzNTIsMTA0LDg0NjIsMTA0LDExOTg0MSwxMDQsMTE5OTQ1LDEwNCwxMTk5OTcsMTA0LDEyMDA0OSwxMDQsMTIwMTAxLDEwNCwxMjAxNTMsMTA0LDEyMDIwNSwxMDQsMTIwMjU3LDEwNCwxMjAzMDksMTA0LDEyMDM2MSwxMDQsMTIwNDEzLDEwNCwxMjA0NjUsMTA0LDEyMTEsMTA0LDEzOTIsMTA0LDUwNTgsMTA0LDY1MzIwLDcyLDg0NTksNzIsODQ2MCw3Miw4NDYxLDcyLDExOTgxNSw3MiwxMTk4NjcsNzIsMTE5OTE5LDcyLDEyMDAyMyw3MiwxMjAxNzksNzIsMTIwMjMxLDcyLDEyMDI4Myw3MiwxMjAzMzUsNzIsMTIwMzg3LDcyLDEyMDQzOSw3Miw5MTksNzIsMTIwNDk0LDcyLDEyMDU1Miw3MiwxMjA2MTAsNzIsMTIwNjY4LDcyLDEyMDcyNiw3MiwxMTQwNiw3Miw1MDUxLDcyLDU1MDAsNzIsNDIyMTUsNzIsNjYyNTUsNzIsNzMxLDEwNSw5MDc1LDEwNSw2NTM1MywxMDUsODU2MCwxMDUsODUwNSwxMDUsODUyMCwxMDUsMTE5ODQyLDEwNSwxMTk4OTQsMTA1LDExOTk0NiwxMDUsMTE5OTk4LDEwNSwxMjAwNTAsMTA1LDEyMDEwMiwxMDUsMTIwMTU0LDEwNSwxMjAyMDYsMTA1LDEyMDI1OCwxMDUsMTIwMzEwLDEwNSwxMjAzNjIsMTA1LDEyMDQxNCwxMDUsMTIwNDY2LDEwNSwxMjA0ODQsMTA1LDYxOCwxMDUsNjE3LDEwNSw5NTMsMTA1LDgxMjYsMTA1LDg5MCwxMDUsMTIwNTIyLDEwNSwxMjA1ODAsMTA1LDEyMDYzOCwxMDUsMTIwNjk2LDEwNSwxMjA3NTQsMTA1LDExMTAsMTA1LDQyNTY3LDEwNSwxMjMxLDEwNSw0Mzg5MywxMDUsNTAyOSwxMDUsNzE4NzUsMTA1LDY1MzU0LDEwNiw4NTIxLDEwNiwxMTk4NDMsMTA2LDExOTg5NSwxMDYsMTE5OTQ3LDEwNiwxMTk5OTksMTA2LDEyMDA1MSwxMDYsMTIwMTAzLDEwNiwxMjAxNTUsMTA2LDEyMDIwNywxMDYsMTIwMjU5LDEwNiwxMjAzMTEsMTA2LDEyMDM2MywxMDYsMTIwNDE1LDEwNiwxMjA0NjcsMTA2LDEwMTEsMTA2LDExMTIsMTA2LDY1MzIyLDc0LDExOTgxNyw3NCwxMTk4NjksNzQsMTE5OTIxLDc0LDExOTk3Myw3NCwxMjAwMjUsNzQsMTIwMDc3LDc0LDEyMDEyOSw3NCwxMjAxODEsNzQsMTIwMjMzLDc0LDEyMDI4NSw3NCwxMjAzMzcsNzQsMTIwMzg5LDc0LDEyMDQ0MSw3NCw0MjkzMCw3NCw4OTUsNzQsMTAzMiw3NCw1MDM1LDc0LDUyNjEsNzQsNDIyMDEsNzQsMTE5ODQ0LDEwNywxMTk4OTYsMTA3LDExOTk0OCwxMDcsMTIwMDAwLDEwNywxMjAwNTIsMTA3LDEyMDEwNCwxMDcsMTIwMTU2LDEwNywxMjAyMDgsMTA3LDEyMDI2MCwxMDcsMTIwMzEyLDEwNywxMjAzNjQsMTA3LDEyMDQxNiwxMDcsMTIwNDY4LDEwNyw4NDkwLDc1LDY1MzIzLDc1LDExOTgxOCw3NSwxMTk4NzAsNzUsMTE5OTIyLDc1LDExOTk3NCw3NSwxMjAwMjYsNzUsMTIwMDc4LDc1LDEyMDEzMCw3NSwxMjAxODIsNzUsMTIwMjM0LDc1LDEyMDI4Niw3NSwxMjAzMzgsNzUsMTIwMzkwLDc1LDEyMDQ0Miw3NSw5MjIsNzUsMTIwNDk3LDc1LDEyMDU1NSw3NSwxMjA2MTMsNzUsMTIwNjcxLDc1LDEyMDcyOSw3NSwxMTQxMiw3NSw1MDk0LDc1LDU4NDUsNzUsNDIxOTksNzUsNjY4NDAsNzUsMTQ3MiwxMDgsODczOSw3Myw5MjEzLDczLDY1NTEyLDczLDE2MzMsMTA4LDE3NzcsNzMsNjYzMzYsMTA4LDEyNTEyNywxMDgsMTIwNzgzLDczLDEyMDc5Myw3MywxMjA4MDMsNzMsMTIwODEzLDczLDEyMDgyMyw3MywxMzAwMzMsNzMsNjUzMjEsNzMsODU0NCw3Myw4NDY0LDczLDg0NjUsNzMsMTE5ODE2LDczLDExOTg2OCw3MywxMTk5MjAsNzMsMTIwMDI0LDczLDEyMDEyOCw3MywxMjAxODAsNzMsMTIwMjMyLDczLDEyMDI4NCw3MywxMjAzMzYsNzMsMTIwMzg4LDczLDEyMDQ0MCw3Myw2NTM1NiwxMDgsODU3Miw3Myw4NDY3LDEwOCwxMTk4NDUsMTA4LDExOTg5NywxMDgsMTE5OTQ5LDEwOCwxMjAwMDEsMTA4LDEyMDA1MywxMDgsMTIwMTA1LDczLDEyMDE1Nyw3MywxMjAyMDksNzMsMTIwMjYxLDczLDEyMDMxMyw3MywxMjAzNjUsNzMsMTIwNDE3LDczLDEyMDQ2OSw3Myw0NDgsNzMsMTIwNDk2LDczLDEyMDU1NCw3MywxMjA2MTIsNzMsMTIwNjcwLDczLDEyMDcyOCw3MywxMTQxMCw3MywxMDMwLDczLDEyMTYsNzMsMTQ5MywxMDgsMTUwMywxMDgsMTU3NSwxMDgsMTI2NDY0LDEwOCwxMjY1OTIsMTA4LDY1MTY2LDEwOCw2NTE2NSwxMDgsMTk5NCwxMDgsMTE1OTksNzMsNTgyNSw3Myw0MjIyNiw3Myw5Mzk5Miw3Myw2NjE4NiwxMjQsNjYzMTMsMTI0LDExOTMzOCw3Niw4NTU2LDc2LDg0NjYsNzYsMTE5ODE5LDc2LDExOTg3MSw3NiwxMTk5MjMsNzYsMTIwMDI3LDc2LDEyMDA3OSw3NiwxMjAxMzEsNzYsMTIwMTgzLDc2LDEyMDIzNSw3NiwxMjAyODcsNzYsMTIwMzM5LDc2LDEyMDM5MSw3NiwxMjA0NDMsNzYsMTE0NzIsNzYsNTA4Niw3Niw1MjkwLDc2LDQyMjA5LDc2LDkzOTc0LDc2LDcxODQzLDc2LDcxODU4LDc2LDY2NTg3LDc2LDY2ODU0LDc2LDY1MzI1LDc3LDg1NTksNzcsODQ5OSw3NywxMTk4MjAsNzcsMTE5ODcyLDc3LDExOTkyNCw3NywxMjAwMjgsNzcsMTIwMDgwLDc3LDEyMDEzMiw3NywxMjAxODQsNzcsMTIwMjM2LDc3LDEyMDI4OCw3NywxMjAzNDAsNzcsMTIwMzkyLDc3LDEyMDQ0NCw3Nyw5MjQsNzcsMTIwNDk5LDc3LDEyMDU1Nyw3NywxMjA2MTUsNzcsMTIwNjczLDc3LDEyMDczMSw3NywxMDE4LDc3LDExNDE2LDc3LDUwNDcsNzcsNTYxNiw3Nyw1ODQ2LDc3LDQyMjA3LDc3LDY2MjI0LDc3LDY2MzIxLDc3LDExOTg0NywxMTAsMTE5ODk5LDExMCwxMTk5NTEsMTEwLDEyMDAwMywxMTAsMTIwMDU1LDExMCwxMjAxMDcsMTEwLDEyMDE1OSwxMTAsMTIwMjExLDExMCwxMjAyNjMsMTEwLDEyMDMxNSwxMTAsMTIwMzY3LDExMCwxMjA0MTksMTEwLDEyMDQ3MSwxMTAsMTQwMCwxMTAsMTQwNCwxMTAsNjUzMjYsNzgsODQ2OSw3OCwxMTk4MjEsNzgsMTE5ODczLDc4LDExOTkyNSw3OCwxMTk5NzcsNzgsMTIwMDI5LDc4LDEyMDA4MSw3OCwxMjAxODUsNzgsMTIwMjM3LDc4LDEyMDI4OSw3OCwxMjAzNDEsNzgsMTIwMzkzLDc4LDEyMDQ0NSw3OCw5MjUsNzgsMTIwNTAwLDc4LDEyMDU1OCw3OCwxMjA2MTYsNzgsMTIwNjc0LDc4LDEyMDczMiw3OCwxMTQxOCw3OCw0MjIwOCw3OCw2NjgzNSw3OCwzMDc0LDExMSwzMjAyLDExMSwzMzMwLDExMSwzNDU4LDExMSwyNDA2LDExMSwyNjYyLDExMSwyNzkwLDExMSwzMDQ2LDExMSwzMTc0LDExMSwzMzAyLDExMSwzNDMwLDExMSwzNjY0LDExMSwzNzkyLDExMSw0MTYwLDExMSwxNjM3LDExMSwxNzgxLDExMSw2NTM1OSwxMTEsODUwMCwxMTEsMTE5ODQ4LDExMSwxMTk5MDAsMTExLDExOTk1MiwxMTEsMTIwMDU2LDExMSwxMjAxMDgsMTExLDEyMDE2MCwxMTEsMTIwMjEyLDExMSwxMjAyNjQsMTExLDEyMDMxNiwxMTEsMTIwMzY4LDExMSwxMjA0MjAsMTExLDEyMDQ3MiwxMTEsNzQzOSwxMTEsNzQ0MSwxMTEsNDM4MzcsMTExLDk1OSwxMTEsMTIwNTI4LDExMSwxMjA1ODYsMTExLDEyMDY0NCwxMTEsMTIwNzAyLDExMSwxMjA3NjAsMTExLDk2MywxMTEsMTIwNTMyLDExMSwxMjA1OTAsMTExLDEyMDY0OCwxMTEsMTIwNzA2LDExMSwxMjA3NjQsMTExLDExNDIzLDExMSw0MzUxLDExMSwxNDEzLDExMSwxNTA1LDExMSwxNjA3LDExMSwxMjY1MDAsMTExLDEyNjU2NCwxMTEsMTI2NTk2LDExMSw2NTI1OSwxMTEsNjUyNjAsMTExLDY1MjU4LDExMSw2NTI1NywxMTEsMTcyNiwxMTEsNjQ0MjgsMTExLDY0NDI5LDExMSw2NDQyNywxMTEsNjQ0MjYsMTExLDE3MjksMTExLDY0NDI0LDExMSw2NDQyNSwxMTEsNjQ0MjMsMTExLDY0NDIyLDExMSwxNzQ5LDExMSwzMzYwLDExMSw0MTI1LDExMSw2Njc5NCwxMTEsNzE4ODAsMTExLDcxODk1LDExMSw2NjYwNCwxMTEsMTk4NCw3OSwyNTM0LDc5LDI5MTgsNzksMTIyOTUsNzksNzA4NjQsNzksNzE5MDQsNzksMTIwNzgyLDc5LDEyMDc5Miw3OSwxMjA4MDIsNzksMTIwODEyLDc5LDEyMDgyMiw3OSwxMzAwMzIsNzksNjUzMjcsNzksMTE5ODIyLDc5LDExOTg3NCw3OSwxMTk5MjYsNzksMTE5OTc4LDc5LDEyMDAzMCw3OSwxMjAwODIsNzksMTIwMTM0LDc5LDEyMDE4Niw3OSwxMjAyMzgsNzksMTIwMjkwLDc5LDEyMDM0Miw3OSwxMjAzOTQsNzksMTIwNDQ2LDc5LDkyNyw3OSwxMjA1MDIsNzksMTIwNTYwLDc5LDEyMDYxOCw3OSwxMjA2NzYsNzksMTIwNzM0LDc5LDExNDIyLDc5LDEzNjUsNzksMTE2MDQsNzksNDgxNiw3OSwyODQ4LDc5LDY2NzU0LDc5LDQyMjI3LDc5LDcxODYxLDc5LDY2MTk0LDc5LDY2MjE5LDc5LDY2NTY0LDc5LDY2ODM4LDc5LDkwNzYsMTEyLDY1MzYwLDExMiwxMTk4NDksMTEyLDExOTkwMSwxMTIsMTE5OTUzLDExMiwxMjAwMDUsMTEyLDEyMDA1NywxMTIsMTIwMTA5LDExMiwxMjAxNjEsMTEyLDEyMDIxMywxMTIsMTIwMjY1LDExMiwxMjAzMTcsMTEyLDEyMDM2OSwxMTIsMTIwNDIxLDExMiwxMjA0NzMsMTEyLDk2MSwxMTIsMTIwNTMwLDExMiwxMjA1NDQsMTEyLDEyMDU4OCwxMTIsMTIwNjAyLDExMiwxMjA2NDYsMTEyLDEyMDY2MCwxMTIsMTIwNzA0LDExMiwxMjA3MTgsMTEyLDEyMDc2MiwxMTIsMTIwNzc2LDExMiwxMTQyNywxMTIsNjUzMjgsODAsODQ3Myw4MCwxMTk4MjMsODAsMTE5ODc1LDgwLDExOTkyNyw4MCwxMTk5NzksODAsMTIwMDMxLDgwLDEyMDA4Myw4MCwxMjAxODcsODAsMTIwMjM5LDgwLDEyMDI5MSw4MCwxMjAzNDMsODAsMTIwMzk1LDgwLDEyMDQ0Nyw4MCw5MjksODAsMTIwNTA0LDgwLDEyMDU2Miw4MCwxMjA2MjAsODAsMTIwNjc4LDgwLDEyMDczNiw4MCwxMTQyNiw4MCw1MDkwLDgwLDUyMjksODAsNDIxOTMsODAsNjYxOTcsODAsMTE5ODUwLDExMywxMTk5MDIsMTEzLDExOTk1NCwxMTMsMTIwMDA2LDExMywxMjAwNTgsMTEzLDEyMDExMCwxMTMsMTIwMTYyLDExMywxMjAyMTQsMTEzLDEyMDI2NiwxMTMsMTIwMzE4LDExMywxMjAzNzAsMTEzLDEyMDQyMiwxMTMsMTIwNDc0LDExMywxMzA3LDExMywxMzc5LDExMywxMzgyLDExMyw4NDc0LDgxLDExOTgyNCw4MSwxMTk4NzYsODEsMTE5OTI4LDgxLDExOTk4MCw4MSwxMjAwMzIsODEsMTIwMDg0LDgxLDEyMDE4OCw4MSwxMjAyNDAsODEsMTIwMjkyLDgxLDEyMDM0NCw4MSwxMjAzOTYsODEsMTIwNDQ4LDgxLDExNjA1LDgxLDExOTg1MSwxMTQsMTE5OTAzLDExNCwxMTk5NTUsMTE0LDEyMDAwNywxMTQsMTIwMDU5LDExNCwxMjAxMTEsMTE0LDEyMDE2MywxMTQsMTIwMjE1LDExNCwxMjAyNjcsMTE0LDEyMDMxOSwxMTQsMTIwMzcxLDExNCwxMjA0MjMsMTE0LDEyMDQ3NSwxMTQsNDM4NDcsMTE0LDQzODQ4LDExNCw3NDYyLDExNCwxMTM5NywxMTQsNDM5MDUsMTE0LDExOTMxOCw4Miw4NDc1LDgyLDg0NzYsODIsODQ3Nyw4MiwxMTk4MjUsODIsMTE5ODc3LDgyLDExOTkyOSw4MiwxMjAwMzMsODIsMTIwMTg5LDgyLDEyMDI0MSw4MiwxMjAyOTMsODIsMTIwMzQ1LDgyLDEyMDM5Nyw4MiwxMjA0NDksODIsNDIyLDgyLDUwMjUsODIsNTA3NCw4Miw2Njc0MCw4Miw1NTExLDgyLDQyMjExLDgyLDk0MDA1LDgyLDY1MzYzLDExNSwxMTk4NTIsMTE1LDExOTkwNCwxMTUsMTE5OTU2LDExNSwxMjAwMDgsMTE1LDEyMDA2MCwxMTUsMTIwMTEyLDExNSwxMjAxNjQsMTE1LDEyMDIxNiwxMTUsMTIwMjY4LDExNSwxMjAzMjAsMTE1LDEyMDM3MiwxMTUsMTIwNDI0LDExNSwxMjA0NzYsMTE1LDQyODAxLDExNSw0NDUsMTE1LDExMDksMTE1LDQzOTQ2LDExNSw3MTg3MywxMTUsNjY2MzIsMTE1LDY1MzMxLDgzLDExOTgyNiw4MywxMTk4NzgsODMsMTE5OTMwLDgzLDExOTk4Miw4MywxMjAwMzQsODMsMTIwMDg2LDgzLDEyMDEzOCw4MywxMjAxOTAsODMsMTIwMjQyLDgzLDEyMDI5NCw4MywxMjAzNDYsODMsMTIwMzk4LDgzLDEyMDQ1MCw4MywxMDI5LDgzLDEzNTksODMsNTA3Nyw4Myw1MDgyLDgzLDQyMjEwLDgzLDk0MDEwLDgzLDY2MTk4LDgzLDY2NTkyLDgzLDExOTg1MywxMTYsMTE5OTA1LDExNiwxMTk5NTcsMTE2LDEyMDAwOSwxMTYsMTIwMDYxLDExNiwxMjAxMTMsMTE2LDEyMDE2NSwxMTYsMTIwMjE3LDExNiwxMjAyNjksMTE2LDEyMDMyMSwxMTYsMTIwMzczLDExNiwxMjA0MjUsMTE2LDEyMDQ3NywxMTYsODg2OCw4NCwxMDIwMSw4NCwxMjg4NzIsODQsNjUzMzIsODQsMTE5ODI3LDg0LDExOTg3OSw4NCwxMTk5MzEsODQsMTE5OTgzLDg0LDEyMDAzNSw4NCwxMjAwODcsODQsMTIwMTM5LDg0LDEyMDE5MSw4NCwxMjAyNDMsODQsMTIwMjk1LDg0LDEyMDM0Nyw4NCwxMjAzOTksODQsMTIwNDUxLDg0LDkzMiw4NCwxMjA1MDcsODQsMTIwNTY1LDg0LDEyMDYyMyw4NCwxMjA2ODEsODQsMTIwNzM5LDg0LDExNDMwLDg0LDUwMjYsODQsNDIxOTYsODQsOTM5NjIsODQsNzE4NjgsODQsNjYxOTksODQsNjYyMjUsODQsNjYzMjUsODQsMTE5ODU0LDExNywxMTk5MDYsMTE3LDExOTk1OCwxMTcsMTIwMDEwLDExNywxMjAwNjIsMTE3LDEyMDExNCwxMTcsMTIwMTY2LDExNywxMjAyMTgsMTE3LDEyMDI3MCwxMTcsMTIwMzIyLDExNywxMjAzNzQsMTE3LDEyMDQyNiwxMTcsMTIwNDc4LDExNyw0MjkxMSwxMTcsNzQ1MiwxMTcsNDM4NTQsMTE3LDQzODU4LDExNyw2NTEsMTE3LDk2NSwxMTcsMTIwNTM0LDExNywxMjA1OTIsMTE3LDEyMDY1MCwxMTcsMTIwNzA4LDExNywxMjA3NjYsMTE3LDE0MDUsMTE3LDY2ODA2LDExNyw3MTg5NiwxMTcsODc0Niw4NSw4ODk5LDg1LDExOTgyOCw4NSwxMTk4ODAsODUsMTE5OTMyLDg1LDExOTk4NCw4NSwxMjAwMzYsODUsMTIwMDg4LDg1LDEyMDE0MCw4NSwxMjAxOTIsODUsMTIwMjQ0LDg1LDEyMDI5Niw4NSwxMjAzNDgsODUsMTIwNDAwLDg1LDEyMDQ1Miw4NSwxMzU3LDg1LDQ2MDgsODUsNjY3NjYsODUsNTE5Niw4NSw0MjIyOCw4NSw5NDAxOCw4NSw3MTg2NCw4NSw4NzQ0LDExOCw4ODk3LDExOCw2NTM2NiwxMTgsODU2NCwxMTgsMTE5ODU1LDExOCwxMTk5MDcsMTE4LDExOTk1OSwxMTgsMTIwMDExLDExOCwxMjAwNjMsMTE4LDEyMDExNSwxMTgsMTIwMTY3LDExOCwxMjAyMTksMTE4LDEyMDI3MSwxMTgsMTIwMzIzLDExOCwxMjAzNzUsMTE4LDEyMDQyNywxMTgsMTIwNDc5LDExOCw3NDU2LDExOCw5NTcsMTE4LDEyMDUyNiwxMTgsMTIwNTg0LDExOCwxMjA2NDIsMTE4LDEyMDcwMCwxMTgsMTIwNzU4LDExOCwxMTQxLDExOCwxNDk2LDExOCw3MTQzMCwxMTgsNDM5NDUsMTE4LDcxODcyLDExOCwxMTkzMDksODYsMTYzOSw4NiwxNzgzLDg2LDg1NDgsODYsMTE5ODI5LDg2LDExOTg4MSw4NiwxMTk5MzMsODYsMTE5OTg1LDg2LDEyMDAzNyw4NiwxMjAwODksODYsMTIwMTQxLDg2LDEyMDE5Myw4NiwxMjAyNDUsODYsMTIwMjk3LDg2LDEyMDM0OSw4NiwxMjA0MDEsODYsMTIwNDUzLDg2LDExNDAsODYsMTE1NzYsODYsNTA4MSw4Niw1MTY3LDg2LDQyNzE5LDg2LDQyMjE0LDg2LDkzOTYwLDg2LDcxODQwLDg2LDY2ODQ1LDg2LDYyMywxMTksMTE5ODU2LDExOSwxMTk5MDgsMTE5LDExOTk2MCwxMTksMTIwMDEyLDExOSwxMjAwNjQsMTE5LDEyMDExNiwxMTksMTIwMTY4LDExOSwxMjAyMjAsMTE5LDEyMDI3MiwxMTksMTIwMzI0LDExOSwxMjAzNzYsMTE5LDEyMDQyOCwxMTksMTIwNDgwLDExOSw3NDU3LDExOSwxMTIxLDExOSwxMzA5LDExOSwxMzc3LDExOSw3MTQzNCwxMTksNzE0MzgsMTE5LDcxNDM5LDExOSw0MzkwNywxMTksNzE5MTksODcsNzE5MTAsODcsMTE5ODMwLDg3LDExOTg4Miw4NywxMTk5MzQsODcsMTE5OTg2LDg3LDEyMDAzOCw4NywxMjAwOTAsODcsMTIwMTQyLDg3LDEyMDE5NCw4NywxMjAyNDYsODcsMTIwMjk4LDg3LDEyMDM1MCw4NywxMjA0MDIsODcsMTIwNDU0LDg3LDEzMDgsODcsNTA0Myw4Nyw1MDc2LDg3LDQyMjE4LDg3LDU3NDIsMTIwLDEwNTM5LDEyMCwxMDU0MCwxMjAsMTA3OTksMTIwLDY1MzY4LDEyMCw4NTY5LDEyMCwxMTk4NTcsMTIwLDExOTkwOSwxMjAsMTE5OTYxLDEyMCwxMjAwMTMsMTIwLDEyMDA2NSwxMjAsMTIwMTE3LDEyMCwxMjAxNjksMTIwLDEyMDIyMSwxMjAsMTIwMjczLDEyMCwxMjAzMjUsMTIwLDEyMDM3NywxMjAsMTIwNDI5LDEyMCwxMjA0ODEsMTIwLDU0NDEsMTIwLDU1MDEsMTIwLDU3NDEsODgsOTU4Nyw4OCw2NjMzOCw4OCw3MTkxNiw4OCw2NTMzNiw4OCw4NTUzLDg4LDExOTgzMSw4OCwxMTk4ODMsODgsMTE5OTM1LDg4LDExOTk4Nyw4OCwxMjAwMzksODgsMTIwMDkxLDg4LDEyMDE0Myw4OCwxMjAxOTUsODgsMTIwMjQ3LDg4LDEyMDI5OSw4OCwxMjAzNTEsODgsMTIwNDAzLDg4LDEyMDQ1NSw4OCw0MjkzMSw4OCw5MzUsODgsMTIwNTEwLDg4LDEyMDU2OCw4OCwxMjA2MjYsODgsMTIwNjg0LDg4LDEyMDc0Miw4OCwxMTQzNiw4OCwxMTYxMyw4OCw1ODE1LDg4LDQyMjE5LDg4LDY2MTkyLDg4LDY2MjI4LDg4LDY2MzI3LDg4LDY2ODU1LDg4LDYxMSwxMjEsNzU2NCwxMjEsNjUzNjksMTIxLDExOTg1OCwxMjEsMTE5OTEwLDEyMSwxMTk5NjIsMTIxLDEyMDAxNCwxMjEsMTIwMDY2LDEyMSwxMjAxMTgsMTIxLDEyMDE3MCwxMjEsMTIwMjIyLDEyMSwxMjAyNzQsMTIxLDEyMDMyNiwxMjEsMTIwMzc4LDEyMSwxMjA0MzAsMTIxLDEyMDQ4MiwxMjEsNjU1LDEyMSw3OTM1LDEyMSw0Mzg2NiwxMjEsOTQ3LDEyMSw4NTA5LDEyMSwxMjA1MTYsMTIxLDEyMDU3NCwxMjEsMTIwNjMyLDEyMSwxMjA2OTAsMTIxLDEyMDc0OCwxMjEsMTE5OSwxMjEsNDMyNywxMjEsNzE5MDAsMTIxLDY1MzM3LDg5LDExOTgzMiw4OSwxMTk4ODQsODksMTE5OTM2LDg5LDExOTk4OCw4OSwxMjAwNDAsODksMTIwMDkyLDg5LDEyMDE0NCw4OSwxMjAxOTYsODksMTIwMjQ4LDg5LDEyMDMwMCw4OSwxMjAzNTIsODksMTIwNDA0LDg5LDEyMDQ1Niw4OSw5MzMsODksOTc4LDg5LDEyMDUwOCw4OSwxMjA1NjYsODksMTIwNjI0LDg5LDEyMDY4Miw4OSwxMjA3NDAsODksMTE0MzIsODksMTE5OCw4OSw1MDMzLDg5LDUwNTMsODksNDIyMjAsODksOTQwMTksODksNzE4NDQsODksNjYyMjYsODksMTE5ODU5LDEyMiwxMTk5MTEsMTIyLDExOTk2MywxMjIsMTIwMDE1LDEyMiwxMjAwNjcsMTIyLDEyMDExOSwxMjIsMTIwMTcxLDEyMiwxMjAyMjMsMTIyLDEyMDI3NSwxMjIsMTIwMzI3LDEyMiwxMjAzNzksMTIyLDEyMDQzMSwxMjIsMTIwNDgzLDEyMiw3NDU4LDEyMiw0MzkyMywxMjIsNzE4NzYsMTIyLDY2MjkzLDkwLDcxOTA5LDkwLDY1MzM4LDkwLDg0ODQsOTAsODQ4OCw5MCwxMTk4MzMsOTAsMTE5ODg1LDkwLDExOTkzNyw5MCwxMTk5ODksOTAsMTIwMDQxLDkwLDEyMDE5Nyw5MCwxMjAyNDksOTAsMTIwMzAxLDkwLDEyMDM1Myw5MCwxMjA0MDUsOTAsMTIwNDU3LDkwLDkxOCw5MCwxMjA0OTMsOTAsMTIwNTUxLDkwLDEyMDYwOSw5MCwxMjA2NjcsOTAsMTIwNzI1LDkwLDUwNTksOTAsNDIyMDQsOTAsNzE4NDksOTAsNjUyODIsMzQsNjUyODQsMzYsNjUyODUsMzcsNjUyODYsMzgsNjUyOTAsNDIsNjUyOTEsNDMsNjUyOTQsNDYsNjUyOTUsNDcsNjUyOTYsNDgsNjUyOTcsNDksNjUyOTgsNTAsNjUyOTksNTEsNjUzMDAsNTIsNjUzMDEsNTMsNjUzMDIsNTQsNjUzMDMsNTUsNjUzMDQsNTYsNjUzMDUsNTcsNjUzMDgsNjAsNjUzMDksNjEsNjUzMTAsNjIsNjUzMTIsNjQsNjUzMTYsNjgsNjUzMTgsNzAsNjUzMTksNzEsNjUzMjQsNzYsNjUzMjksODEsNjUzMzAsODIsNjUzMzMsODUsNjUzMzQsODYsNjUzMzUsODcsNjUzNDMsOTUsNjUzNDYsOTgsNjUzNDgsMTAwLDY1MzUwLDEwMiw2NTM1NSwxMDcsNjUzNTcsMTA5LDY1MzU4LDExMCw2NTM2MSwxMTMsNjUzNjIsMTE0LDY1MzY0LDExNiw2NTM2NSwxMTcsNjUzNjcsMTE5LDY1MzcwLDEyMiw2NTM3MSwxMjMsNjUzNzMsMTI1XSwiX2RlZmF1bHQiOlsxNjAsMzIsODIxMSw0NSw2NTM3NCwxMjYsNjUzMDYsNTgsNjUyODEsMzMsODIxNiw5Niw4MjE3LDk2LDgyNDUsOTYsMTgwLDk2LDEyNDk0LDQ3LDEwNDcsNTEsMTA3Myw1NCwxMDcyLDk3LDEwNDAsNjUsMTA2OCw5OCwxMDQyLDY2LDEwODksOTksMTA1Nyw2NywxMDc3LDEwMSwxMDQ1LDY5LDEwNTMsNzIsMzA1LDEwNSwxMDUwLDc1LDkyMSw3MywxMDUyLDc3LDEwODYsMTExLDEwNTQsNzksMTAwOSwxMTIsMTA4OCwxMTIsMTA1Niw4MCwxMDc1LDExNCwxMDU4LDg0LDIxNSwxMjAsMTA5MywxMjAsMTA2MSw4OCwxMDkxLDEyMSwxMDU5LDg5LDY1MjgzLDM1LDY1Mjg4LDQwLDY1Mjg5LDQxLDY1MjkyLDQ0LDY1MzA3LDU5LDY1MzExLDYzXSwiY3MiOls2NTM3NCwxMjYsNjUzMDYsNTgsNjUyODEsMzMsODIxNiw5Niw4MjE3LDk2LDgyNDUsOTYsMTgwLDk2LDEyNDk0LDQ3LDEwNDcsNTEsMTA3Myw1NCwxMDcyLDk3LDEwNDAsNjUsMTA2OCw5OCwxMDQyLDY2LDEwODksOTksMTA1Nyw2NywxMDc3LDEwMSwxMDQ1LDY5LDEwNTMsNzIsMzA1LDEwNSwxMDUwLDc1LDkyMSw3MywxMDUyLDc3LDEwODYsMTExLDEwNTQsNzksMTAwOSwxMTIsMTA4OCwxMTIsMTA1Niw4MCwxMDc1LDExNCwxMDU4LDg0LDEwOTMsMTIwLDEwNjEsODgsMTA5MSwxMjEsMTA1OSw4OSw2NTI4MywzNSw2NTI4OCw0MCw2NTI4OSw0MSw2NTI5Miw0NCw2NTMwNyw1OSw2NTMxMSw2M10sImRlIjpbNjUzNzQsMTI2LDY1MzA2LDU4LDY1MjgxLDMzLDgyMTYsOTYsODIxNyw5Niw4MjQ1LDk2LDE4MCw5NiwxMjQ5NCw0NywxMDQ3LDUxLDEwNzMsNTQsMTA3Miw5NywxMDQwLDY1LDEwNjgsOTgsMTA0Miw2NiwxMDg5LDk5LDEwNTcsNjcsMTA3NywxMDEsMTA0NSw2OSwxMDUzLDcyLDMwNSwxMDUsMTA1MCw3NSw5MjEsNzMsMTA1Miw3NywxMDg2LDExMSwxMDU0LDc5LDEwMDksMTEyLDEwODgsMTEyLDEwNTYsODAsMTA3NSwxMTQsMTA1OCw4NCwxMDkzLDEyMCwxMDYxLDg4LDEwOTEsMTIxLDEwNTksODksNjUyODMsMzUsNjUyODgsNDAsNjUyODksNDEsNjUyOTIsNDQsNjUzMDcsNTksNjUzMTEsNjNdLCJlcyI6WzgyMTEsNDUsNjUzNzQsMTI2LDY1MzA2LDU4LDY1MjgxLDMzLDgyNDUsOTYsMTgwLDk2LDEyNDk0LDQ3LDEwNDcsNTEsMTA3Myw1NCwxMDcyLDk3LDEwNDAsNjUsMTA2OCw5OCwxMDQyLDY2LDEwODksOTksMTA1Nyw2NywxMDc3LDEwMSwxMDQ1LDY5LDEwNTMsNzIsMzA1LDEwNSwxMDUwLDc1LDEwNTIsNzcsMTA4NiwxMTEsMTA1NCw3OSwxMDA5LDExMiwxMDg4LDExMiwxMDU2LDgwLDEwNzUsMTE0LDEwNTgsODQsMjE1LDEyMCwxMDkzLDEyMCwxMDYxLDg4LDEwOTEsMTIxLDEwNTksODksNjUyODMsMzUsNjUyODgsNDAsNjUyODksNDEsNjUyOTIsNDQsNjUzMDcsNTksNjUzMTEsNjNdLCJmciI6WzY1Mzc0LDEyNiw2NTMwNiw1OCw2NTI4MSwzMyw4MjE2LDk2LDgyNDUsOTYsMTI0OTQsNDcsMTA0Nyw1MSwxMDczLDU0LDEwNzIsOTcsMTA0MCw2NSwxMDY4LDk4LDEwNDIsNjYsMTA4OSw5OSwxMDU3LDY3LDEwNzcsMTAxLDEwNDUsNjksMTA1Myw3MiwzMDUsMTA1LDEwNTAsNzUsOTIxLDczLDEwNTIsNzcsMTA4NiwxMTEsMTA1NCw3OSwxMDA5LDExMiwxMDg4LDExMiwxMDU2LDgwLDEwNzUsMTE0LDEwNTgsODQsMjE1LDEyMCwxMDkzLDEyMCwxMDYxLDg4LDEwOTEsMTIxLDEwNTksODksNjUyODMsMzUsNjUyODgsNDAsNjUyODksNDEsNjUyOTIsNDQsNjUzMDcsNTksNjUzMTEsNjNdLCJpdCI6WzE2MCwzMiw4MjExLDQ1LDY1Mzc0LDEyNiw2NTMwNiw1OCw2NTI4MSwzMyw4MjE2LDk2LDgyNDUsOTYsMTgwLDk2LDEyNDk0LDQ3LDEwNDcsNTEsMTA3Myw1NCwxMDcyLDk3LDEwNDAsNjUsMTA2OCw5OCwxMDQyLDY2LDEwODksOTksMTA1Nyw2NywxMDc3LDEwMSwxMDQ1LDY5LDEwNTMsNzIsMzA1LDEwNSwxMDUwLDc1LDkyMSw3MywxMDUyLDc3LDEwODYsMTExLDEwNTQsNzksMTAwOSwxMTIsMTA4OCwxMTIsMTA1Niw4MCwxMDc1LDExNCwxMDU4LDg0LDIxNSwxMjAsMTA5MywxMjAsMTA2MSw4OCwxMDkxLDEyMSwxMDU5LDg5LDY1MjgzLDM1LDY1Mjg4LDQwLDY1Mjg5LDQxLDY1MjkyLDQ0LDY1MzA3LDU5LDY1MzExLDYzXSwiamEiOls4MjExLDQ1LDY1MzA2LDU4LDY1MjgxLDMzLDgyMTYsOTYsODIxNyw5Niw4MjQ1LDk2LDE4MCw5NiwxMDQ3LDUxLDEwNzMsNTQsMTA3Miw5NywxMDQwLDY1LDEwNjgsOTgsMTA0Miw2NiwxMDg5LDk5LDEwNTcsNjcsMTA3NywxMDEsMTA0NSw2OSwxMDUzLDcyLDMwNSwxMDUsMTA1MCw3NSw5MjEsNzMsMTA1Miw3NywxMDg2LDExMSwxMDU0LDc5LDEwMDksMTEyLDEwODgsMTEyLDEwNTYsODAsMTA3NSwxMTQsMTA1OCw4NCwyMTUsMTIwLDEwOTMsMTIwLDEwNjEsODgsMTA5MSwxMjEsMTA1OSw4OSw2NTI4MywzNSw2NTI5Miw0NCw2NTMwNyw1OV0sImtvIjpbODIxMSw0NSw2NTM3NCwxMjYsNjUzMDYsNTgsNjUyODEsMzMsODI0NSw5NiwxODAsOTYsMTI0OTQsNDcsMTA0Nyw1MSwxMDczLDU0LDEwNzIsOTcsMTA0MCw2NSwxMDY4LDk4LDEwNDIsNjYsMTA4OSw5OSwxMDU3LDY3LDEwNzcsMTAxLDEwNDUsNjksMTA1Myw3MiwzMDUsMTA1LDEwNTAsNzUsOTIxLDczLDEwNTIsNzcsMTA4NiwxMTEsMTA1NCw3OSwxMDA5LDExMiwxMDg4LDExMiwxMDU2LDgwLDEwNzUsMTE0LDEwNTgsODQsMjE1LDEyMCwxMDkzLDEyMCwxMDYxLDg4LDEwOTEsMTIxLDEwNTksODksNjUyODMsMzUsNjUyODgsNDAsNjUyODksNDEsNjUyOTIsNDQsNjUzMDcsNTksNjUzMTEsNjNdLCJwbCI6WzY1Mzc0LDEyNiw2NTMwNiw1OCw2NTI4MSwzMyw4MjE2LDk2LDgyMTcsOTYsODI0NSw5NiwxODAsOTYsMTI0OTQsNDcsMTA0Nyw1MSwxMDczLDU0LDEwNzIsOTcsMTA0MCw2NSwxMDY4LDk4LDEwNDIsNjYsMTA4OSw5OSwxMDU3LDY3LDEwNzcsMTAxLDEwNDUsNjksMTA1Myw3MiwzMDUsMTA1LDEwNTAsNzUsOTIxLDczLDEwNTIsNzcsMTA4NiwxMTEsMTA1NCw3OSwxMDA5LDExMiwxMDg4LDExMiwxMDU2LDgwLDEwNzUsMTE0LDEwNTgsODQsMjE1LDEyMCwxMDkzLDEyMCwxMDYxLDg4LDEwOTEsMTIxLDEwNTksODksNjUyODMsMzUsNjUyODgsNDAsNjUyODksNDEsNjUyOTIsNDQsNjUzMDcsNTksNjUzMTEsNjNdLCJwdC1CUiI6WzY1Mzc0LDEyNiw2NTMwNiw1OCw2NTI4MSwzMyw4MjE2LDk2LDgyMTcsOTYsODI0NSw5NiwxODAsOTYsMTI0OTQsNDcsMTA0Nyw1MSwxMDczLDU0LDEwNzIsOTcsMTA0MCw2NSwxMDY4LDk4LDEwNDIsNjYsMTA4OSw5OSwxMDU3LDY3LDEwNzcsMTAxLDEwNDUsNjksMTA1Myw3MiwzMDUsMTA1LDEwNTAsNzUsOTIxLDczLDEwNTIsNzcsMTA4NiwxMTEsMTA1NCw3OSwxMDA5LDExMiwxMDg4LDExMiwxMDU2LDgwLDEwNzUsMTE0LDEwNTgsODQsMjE1LDEyMCwxMDkzLDEyMCwxMDYxLDg4LDEwOTEsMTIxLDEwNTksODksNjUyODMsMzUsNjUyODgsNDAsNjUyODksNDEsNjUyOTIsNDQsNjUzMDcsNTksNjUzMTEsNjNdLCJxcHMtcGxvYyI6WzE2MCwzMiw4MjExLDQ1LDY1Mzc0LDEyNiw2NTMwNiw1OCw2NTI4MSwzMyw4MjE2LDk2LDgyMTcsOTYsODI0NSw5NiwxODAsOTYsMTI0OTQsNDcsMTA0Nyw1MSwxMDczLDU0LDEwNzIsOTcsMTA0MCw2NSwxMDY4LDk4LDEwNDIsNjYsMTA4OSw5OSwxMDU3LDY3LDEwNzcsMTAxLDEwNDUsNjksMTA1Myw3MiwzMDUsMTA1LDEwNTAsNzUsOTIxLDczLDEwNTIsNzcsMTA4NiwxMTEsMTA1NCw3OSwxMDg4LDExMiwxMDU2LDgwLDEwNzUsMTE0LDEwNTgsODQsMjE1LDEyMCwxMDkzLDEyMCwxMDYxLDg4LDEwOTEsMTIxLDEwNTksODksNjUyODMsMzUsNjUyODgsNDAsNjUyODksNDEsNjUyOTIsNDQsNjUzMDcsNTksNjUzMTEsNjNdLCJydSI6WzY1Mzc0LDEyNiw2NTMwNiw1OCw2NTI4MSwzMyw4MjE2LDk2LDgyMTcsOTYsODI0NSw5NiwxODAsOTYsMTI0OTQsNDcsMzA1LDEwNSw5MjEsNzMsMTAwOSwxMTIsMjE1LDEyMCw2NTI4MywzNSw2NTI4OCw0MCw2NTI4OSw0MSw2NTI5Miw0NCw2NTMwNyw1OSw2NTMxMSw2M10sInRyIjpbMTYwLDMyLDgyMTEsNDUsNjUzNzQsMTI2LDY1MzA2LDU4LDY1MjgxLDMzLDgyNDUsOTYsMTgwLDk2LDEyNDk0LDQ3LDEwNDcsNTEsMTA3Myw1NCwxMDcyLDk3LDEwNDAsNjUsMTA2OCw5OCwxMDQyLDY2LDEwODksOTksMTA1Nyw2NywxMDc3LDEwMSwxMDQ1LDY5LDEwNTMsNzIsMTA1MCw3NSw5MjEsNzMsMTA1Miw3NywxMDg2LDExMSwxMDU0LDc5LDEwMDksMTEyLDEwODgsMTEyLDEwNTYsODAsMTA3NSwxMTQsMTA1OCw4NCwyMTUsMTIwLDEwOTMsMTIwLDEwNjEsODgsMTA5MSwxMjEsMTA1OSw4OSw2NTI4MywzNSw2NTI4OCw0MCw2NTI4OSw0MSw2NTI5Miw0NCw2NTMwNyw1OSw2NTMxMSw2M10sInpoLWhhbnMiOls2NTM3NCwxMjYsNjUzMDYsNTgsNjUyODEsMzMsODI0NSw5NiwxODAsOTYsMTI0OTQsNDcsMTA0Nyw1MSwxMDczLDU0LDEwNzIsOTcsMTA0MCw2NSwxMDY4LDk4LDEwNDIsNjYsMTA4OSw5OSwxMDU3LDY3LDEwNzcsMTAxLDEwNDUsNjksMTA1Myw3MiwzMDUsMTA1LDEwNTAsNzUsOTIxLDczLDEwNTIsNzcsMTA4NiwxMTEsMTA1NCw3OSwxMDA5LDExMiwxMDg4LDExMiwxMDU2LDgwLDEwNzUsMTE0LDEwNTgsODQsMjE1LDEyMCwxMDkzLDEyMCwxMDYxLDg4LDEwOTEsMTIxLDEwNTksODksNjUyODgsNDAsNjUyODksNDFdLCJ6aC1oYW50IjpbODIxMSw0NSw2NTM3NCwxMjYsMTgwLDk2LDEyNDk0LDQ3LDEwNDcsNTEsMTA3Myw1NCwxMDcyLDk3LDEwNDAsNjUsMTA2OCw5OCwxMDQyLDY2LDEwODksOTksMTA1Nyw2NywxMDc3LDEwMSwxMDQ1LDY5LDEwNTMsNzIsMzA1LDEwNSwxMDUwLDc1LDkyMSw3MywxMDUyLDc3LDEwODYsMTExLDEwNTQsNzksMTAwOSwxMTIsMTA4OCwxMTIsMTA1Niw4MCwxMDc1LDExNCwxMDU4LDg0LDIxNSwxMjAsMTA5MywxMjAsMTA2MSw4OCwxMDkxLDEyMSwxMDU5LDg5LDY1MjgzLDM1LDY1MzA3LDU5XX0nKSkpLFEuY2FjaGU9bmV3IGNsYXNze2NvbnN0cnVjdG9yKGUpe3RoaXMuZm49ZSx0aGlzLmxhc3RDYWNoZT12b2lkIDAsdGhpcy5sYXN0QXJnS2V5PXZvaWQgMH1nZXQoZSl7Y29uc3QgdD1KU09OLnN0cmluZ2lmeShlKTtyZXR1cm4gdGhpcy5sYXN0QXJnS2V5IT09dCYmKHRoaXMubGFzdEFyZ0tleT10LHRoaXMubGFzdENhY2hlPXRoaXMuZm4oZSkpLHRoaXMubGFzdENhY2hlfX0oKGU9PntmdW5jdGlvbiB0KGUpe2NvbnN0IHQ9bmV3IE1hcDtmb3IobGV0IG49MDtuPGUubGVuZ3RoO24rPTIpdC5zZXQoZVtuXSxlW24rMV0pO3JldHVybiB0fWZ1bmN0aW9uIG4oZSx0KXtpZighZSlyZXR1cm4gdDtjb25zdCBuPW5ldyBNYXA7Zm9yKGNvbnN0W3IsaV1vZiBlKXQuaGFzKHIpJiZuLnNldChyLGkpO3JldHVybiBufWNvbnN0IHI9RC5hbWJpZ3VvdXNDaGFyYWN0ZXJEYXRhLmdldFZhbHVlKCk7bGV0IGksbz1lLmZpbHRlcigoZT0+IWUuc3RhcnRzV2l0aCgiXyIpJiZlIGluIHIpKTswPT09by5sZW5ndGgmJihvPVsiX2RlZmF1bHQiXSk7Zm9yKGNvbnN0IGUgb2Ygbyl7aT1uKGksdChyW2VdKSl9Y29uc3QgYT1mdW5jdGlvbihlLHQpe2NvbnN0IG49bmV3IE1hcChlKTtmb3IoY29uc3RbZSxyXW9mIHQpbi5zZXQoZSxyKTtyZXR1cm4gbn0odChyLl9jb21tb24pLGkpO3JldHVybiBuZXcgUShhKX0pKSxRLl9sb2NhbGVzPW5ldyBHKCgoKT0+T2JqZWN0LmtleXMoUS5hbWJpZ3VvdXNDaGFyYWN0ZXJEYXRhLmdldFZhbHVlKCkpLmZpbHRlcigoZT0+IWUuc3RhcnRzV2l0aCgiXyIpKSkpKTtjbGFzcyBlZXtzdGF0aWMgZ2V0UmF3RGF0YSgpe3JldHVybiBKU09OLnBhcnNlKCJbOSwxMCwxMSwxMiwxMywzMiwxMjcsMTYwLDE3Myw4NDcsMTU2NCw0NDQ3LDQ0NDgsNjA2OCw2MDY5LDYxNTUsNjE1Niw2MTU3LDYxNTgsNzM1NSw3MzU2LDgxOTIsODE5Myw4MTk0LDgxOTUsODE5Niw4MTk3LDgxOTgsODE5OSw4MjAwLDgyMDEsODIwMiw4MjAzLDgyMDQsODIwNSw4MjA2LDgyMDcsODIzNCw4MjM1LDgyMzYsODIzNyw4MjM4LDgyMzksODI4Nyw4Mjg4LDgyODksODI5MCw4MjkxLDgyOTIsODI5Myw4Mjk0LDgyOTUsODI5Niw4Mjk3LDgyOTgsODI5OSw4MzAwLDgzMDEsODMwMiw4MzAzLDEwMjQwLDEyMjg4LDEyNjQ0LDY1MDI0LDY1MDI1LDY1MDI2LDY1MDI3LDY1MDI4LDY1MDI5LDY1MDMwLDY1MDMxLDY1MDMyLDY1MDMzLDY1MDM0LDY1MDM1LDY1MDM2LDY1MDM3LDY1MDM4LDY1MDM5LDY1Mjc5LDY1NDQwLDY1NTIwLDY1NTIxLDY1NTIyLDY1NTIzLDY1NTI0LDY1NTI1LDY1NTI2LDY1NTI3LDY1NTI4LDY1NTMyLDc4ODQ0LDExOTE1NSwxMTkxNTYsMTE5MTU3LDExOTE1OCwxMTkxNTksMTE5MTYwLDExOTE2MSwxMTkxNjIsOTE3NTA0LDkxNzUwNSw5MTc1MDYsOTE3NTA3LDkxNzUwOCw5MTc1MDksOTE3NTEwLDkxNzUxMSw5MTc1MTIsOTE3NTEzLDkxNzUxNCw5MTc1MTUsOTE3NTE2LDkxNzUxNyw5MTc1MTgsOTE3NTE5LDkxNzUyMCw5MTc1MjEsOTE3NTIyLDkxNzUyMyw5MTc1MjQsOTE3NTI1LDkxNzUyNiw5MTc1MjcsOTE3NTI4LDkxNzUyOSw5MTc1MzAsOTE3NTMxLDkxNzUzMiw5MTc1MzMsOTE3NTM0LDkxNzUzNSw5MTc1MzYsOTE3NTM3LDkxNzUzOCw5MTc1MzksOTE3NTQwLDkxNzU0MSw5MTc1NDIsOTE3NTQzLDkxNzU0NCw5MTc1NDUsOTE3NTQ2LDkxNzU0Nyw5MTc1NDgsOTE3NTQ5LDkxNzU1MCw5MTc1NTEsOTE3NTUyLDkxNzU1Myw5MTc1NTQsOTE3NTU1LDkxNzU1Niw5MTc1NTcsOTE3NTU4LDkxNzU1OSw5MTc1NjAsOTE3NTYxLDkxNzU2Miw5MTc1NjMsOTE3NTY0LDkxNzU2NSw5MTc1NjYsOTE3NTY3LDkxNzU2OCw5MTc1NjksOTE3NTcwLDkxNzU3MSw5MTc1NzIsOTE3NTczLDkxNzU3NCw5MTc1NzUsOTE3NTc2LDkxNzU3Nyw5MTc1NzgsOTE3NTc5LDkxNzU4MCw5MTc1ODEsOTE3NTgyLDkxNzU4Myw5MTc1ODQsOTE3NTg1LDkxNzU4Niw5MTc1ODcsOTE3NTg4LDkxNzU4OSw5MTc1OTAsOTE3NTkxLDkxNzU5Miw5MTc1OTMsOTE3NTk0LDkxNzU5NSw5MTc1OTYsOTE3NTk3LDkxNzU5OCw5MTc1OTksOTE3NjAwLDkxNzYwMSw5MTc2MDIsOTE3NjAzLDkxNzYwNCw5MTc2MDUsOTE3NjA2LDkxNzYwNyw5MTc2MDgsOTE3NjA5LDkxNzYxMCw5MTc2MTEsOTE3NjEyLDkxNzYxMyw5MTc2MTQsOTE3NjE1LDkxNzYxNiw5MTc2MTcsOTE3NjE4LDkxNzYxOSw5MTc2MjAsOTE3NjIxLDkxNzYyMiw5MTc2MjMsOTE3NjI0LDkxNzYyNSw5MTc2MjYsOTE3NjI3LDkxNzYyOCw5MTc2MjksOTE3NjMwLDkxNzYzMSw5MTc3NjAsOTE3NzYxLDkxNzc2Miw5MTc3NjMsOTE3NzY0LDkxNzc2NSw5MTc3NjYsOTE3NzY3LDkxNzc2OCw5MTc3NjksOTE3NzcwLDkxNzc3MSw5MTc3NzIsOTE3NzczLDkxNzc3NCw5MTc3NzUsOTE3Nzc2LDkxNzc3Nyw5MTc3NzgsOTE3Nzc5LDkxNzc4MCw5MTc3ODEsOTE3NzgyLDkxNzc4Myw5MTc3ODQsOTE3Nzg1LDkxNzc4Niw5MTc3ODcsOTE3Nzg4LDkxNzc4OSw5MTc3OTAsOTE3NzkxLDkxNzc5Miw5MTc3OTMsOTE3Nzk0LDkxNzc5NSw5MTc3OTYsOTE3Nzk3LDkxNzc5OCw5MTc3OTksOTE3ODAwLDkxNzgwMSw5MTc4MDIsOTE3ODAzLDkxNzgwNCw5MTc4MDUsOTE3ODA2LDkxNzgwNyw5MTc4MDgsOTE3ODA5LDkxNzgxMCw5MTc4MTEsOTE3ODEyLDkxNzgxMyw5MTc4MTQsOTE3ODE1LDkxNzgxNiw5MTc4MTcsOTE3ODE4LDkxNzgxOSw5MTc4MjAsOTE3ODIxLDkxNzgyMiw5MTc4MjMsOTE3ODI0LDkxNzgyNSw5MTc4MjYsOTE3ODI3LDkxNzgyOCw5MTc4MjksOTE3ODMwLDkxNzgzMSw5MTc4MzIsOTE3ODMzLDkxNzgzNCw5MTc4MzUsOTE3ODM2LDkxNzgzNyw5MTc4MzgsOTE3ODM5LDkxNzg0MCw5MTc4NDEsOTE3ODQyLDkxNzg0Myw5MTc4NDQsOTE3ODQ1LDkxNzg0Niw5MTc4NDcsOTE3ODQ4LDkxNzg0OSw5MTc4NTAsOTE3ODUxLDkxNzg1Miw5MTc4NTMsOTE3ODU0LDkxNzg1NSw5MTc4NTYsOTE3ODU3LDkxNzg1OCw5MTc4NTksOTE3ODYwLDkxNzg2MSw5MTc4NjIsOTE3ODYzLDkxNzg2NCw5MTc4NjUsOTE3ODY2LDkxNzg2Nyw5MTc4NjgsOTE3ODY5LDkxNzg3MCw5MTc4NzEsOTE3ODcyLDkxNzg3Myw5MTc4NzQsOTE3ODc1LDkxNzg3Niw5MTc4NzcsOTE3ODc4LDkxNzg3OSw5MTc4ODAsOTE3ODgxLDkxNzg4Miw5MTc4ODMsOTE3ODg0LDkxNzg4NSw5MTc4ODYsOTE3ODg3LDkxNzg4OCw5MTc4ODksOTE3ODkwLDkxNzg5MSw5MTc4OTIsOTE3ODkzLDkxNzg5NCw5MTc4OTUsOTE3ODk2LDkxNzg5Nyw5MTc4OTgsOTE3ODk5LDkxNzkwMCw5MTc5MDEsOTE3OTAyLDkxNzkwMyw5MTc5MDQsOTE3OTA1LDkxNzkwNiw5MTc5MDcsOTE3OTA4LDkxNzkwOSw5MTc5MTAsOTE3OTExLDkxNzkxMiw5MTc5MTMsOTE3OTE0LDkxNzkxNSw5MTc5MTYsOTE3OTE3LDkxNzkxOCw5MTc5MTksOTE3OTIwLDkxNzkyMSw5MTc5MjIsOTE3OTIzLDkxNzkyNCw5MTc5MjUsOTE3OTI2LDkxNzkyNyw5MTc5MjgsOTE3OTI5LDkxNzkzMCw5MTc5MzEsOTE3OTMyLDkxNzkzMyw5MTc5MzQsOTE3OTM1LDkxNzkzNiw5MTc5MzcsOTE3OTM4LDkxNzkzOSw5MTc5NDAsOTE3OTQxLDkxNzk0Miw5MTc5NDMsOTE3OTQ0LDkxNzk0NSw5MTc5NDYsOTE3OTQ3LDkxNzk0OCw5MTc5NDksOTE3OTUwLDkxNzk1MSw5MTc5NTIsOTE3OTUzLDkxNzk1NCw5MTc5NTUsOTE3OTU2LDkxNzk1Nyw5MTc5NTgsOTE3OTU5LDkxNzk2MCw5MTc5NjEsOTE3OTYyLDkxNzk2Myw5MTc5NjQsOTE3OTY1LDkxNzk2Niw5MTc5NjcsOTE3OTY4LDkxNzk2OSw5MTc5NzAsOTE3OTcxLDkxNzk3Miw5MTc5NzMsOTE3OTc0LDkxNzk3NSw5MTc5NzYsOTE3OTc3LDkxNzk3OCw5MTc5NzksOTE3OTgwLDkxNzk4MSw5MTc5ODIsOTE3OTgzLDkxNzk4NCw5MTc5ODUsOTE3OTg2LDkxNzk4Nyw5MTc5ODgsOTE3OTg5LDkxNzk5MCw5MTc5OTEsOTE3OTkyLDkxNzk5Myw5MTc5OTQsOTE3OTk1LDkxNzk5Niw5MTc5OTcsOTE3OTk4LDkxNzk5OV0iKX1zdGF0aWMgZ2V0RGF0YSgpe3JldHVybiB0aGlzLl9kYXRhfHwodGhpcy5fZGF0YT1uZXcgU2V0KGVlLmdldFJhd0RhdGEoKSkpLHRoaXMuX2RhdGF9c3RhdGljIGlzSW52aXNpYmxlQ2hhcmFjdGVyKGUpe3JldHVybiBlZS5nZXREYXRhKCkuaGFzKGUpfXN0YXRpYyBnZXQgY29kZVBvaW50cygpe3JldHVybiBlZS5nZXREYXRhKCl9fWVlLl9kYXRhPXZvaWQgMDtjbGFzcyB0ZXtjb25zdHJ1Y3RvcihlLHQsbixyKXt0aGlzLnZzV29ya2VyPWUsdGhpcy5yZXE9dCx0aGlzLm1ldGhvZD1uLHRoaXMuYXJncz1yLHRoaXMudHlwZT0wfX1jbGFzcyBuZXtjb25zdHJ1Y3RvcihlLHQsbixyKXt0aGlzLnZzV29ya2VyPWUsdGhpcy5zZXE9dCx0aGlzLnJlcz1uLHRoaXMuZXJyPXIsdGhpcy50eXBlPTF9fWNsYXNzIHJle2NvbnN0cnVjdG9yKGUsdCxuLHIpe3RoaXMudnNXb3JrZXI9ZSx0aGlzLnJlcT10LHRoaXMuZXZlbnROYW1lPW4sdGhpcy5hcmc9cix0aGlzLnR5cGU9Mn19Y2xhc3MgaWV7Y29uc3RydWN0b3IoZSx0LG4pe3RoaXMudnNXb3JrZXI9ZSx0aGlzLnJlcT10LHRoaXMuZXZlbnQ9bix0aGlzLnR5cGU9M319Y2xhc3Mgb2V7Y29uc3RydWN0b3IoZSx0KXt0aGlzLnZzV29ya2VyPWUsdGhpcy5yZXE9dCx0aGlzLnR5cGU9NH19Y2xhc3MgYWV7Y29uc3RydWN0b3IoZSl7dGhpcy5fd29ya2VySWQ9LTEsdGhpcy5faGFuZGxlcj1lLHRoaXMuX2xhc3RTZW50UmVxPTAsdGhpcy5fcGVuZGluZ1JlcGxpZXM9T2JqZWN0LmNyZWF0ZShudWxsKSx0aGlzLl9wZW5kaW5nRW1pdHRlcnM9bmV3IE1hcCx0aGlzLl9wZW5kaW5nRXZlbnRzPW5ldyBNYXB9c2V0V29ya2VySWQoZSl7dGhpcy5fd29ya2VySWQ9ZX1zZW5kTWVzc2FnZShlLHQpe2NvbnN0IG49U3RyaW5nKCsrdGhpcy5fbGFzdFNlbnRSZXEpO3JldHVybiBuZXcgUHJvbWlzZSgoKHIsaSk9Pnt0aGlzLl9wZW5kaW5nUmVwbGllc1tuXT17cmVzb2x2ZTpyLHJlamVjdDppfSx0aGlzLl9zZW5kKG5ldyB0ZSh0aGlzLl93b3JrZXJJZCxuLGUsdCkpfSkpfWxpc3RlbihlLHQpe2xldCBuPW51bGw7Y29uc3Qgcj1uZXcgQih7b25GaXJzdExpc3RlbmVyQWRkOigpPT57bj1TdHJpbmcoKyt0aGlzLl9sYXN0U2VudFJlcSksdGhpcy5fcGVuZGluZ0VtaXR0ZXJzLnNldChuLHIpLHRoaXMuX3NlbmQobmV3IHJlKHRoaXMuX3dvcmtlcklkLG4sZSx0KSl9LG9uTGFzdExpc3RlbmVyUmVtb3ZlOigpPT57dGhpcy5fcGVuZGluZ0VtaXR0ZXJzLmRlbGV0ZShuKSx0aGlzLl9zZW5kKG5ldyBvZSh0aGlzLl93b3JrZXJJZCxuKSksbj1udWxsfX0pO3JldHVybiByLmV2ZW50fWhhbmRsZU1lc3NhZ2UoZSl7ZSYmZS52c1dvcmtlciYmKC0xIT09dGhpcy5fd29ya2VySWQmJmUudnNXb3JrZXIhPT10aGlzLl93b3JrZXJJZHx8dGhpcy5faGFuZGxlTWVzc2FnZShlKSl9X2hhbmRsZU1lc3NhZ2UoZSl7c3dpdGNoKGUudHlwZSl7Y2FzZSAxOnJldHVybiB0aGlzLl9oYW5kbGVSZXBseU1lc3NhZ2UoZSk7Y2FzZSAwOnJldHVybiB0aGlzLl9oYW5kbGVSZXF1ZXN0TWVzc2FnZShlKTtjYXNlIDI6cmV0dXJuIHRoaXMuX2hhbmRsZVN1YnNjcmliZUV2ZW50TWVzc2FnZShlKTtjYXNlIDM6cmV0dXJuIHRoaXMuX2hhbmRsZUV2ZW50TWVzc2FnZShlKTtjYXNlIDQ6cmV0dXJuIHRoaXMuX2hhbmRsZVVuc3Vic2NyaWJlRXZlbnRNZXNzYWdlKGUpfX1faGFuZGxlUmVwbHlNZXNzYWdlKGUpe2lmKCF0aGlzLl9wZW5kaW5nUmVwbGllc1tlLnNlcV0pcmV0dXJuIHZvaWQgY29uc29sZS53YXJuKCJHb3QgcmVwbHkgdG8gdW5rbm93biBzZXEiKTtjb25zdCB0PXRoaXMuX3BlbmRpbmdSZXBsaWVzW2Uuc2VxXTtpZihkZWxldGUgdGhpcy5fcGVuZGluZ1JlcGxpZXNbZS5zZXFdLGUuZXJyKXtsZXQgbj1lLmVycjtyZXR1cm4gZS5lcnIuJGlzRXJyb3ImJihuPW5ldyBFcnJvcixuLm5hbWU9ZS5lcnIubmFtZSxuLm1lc3NhZ2U9ZS5lcnIubWVzc2FnZSxuLnN0YWNrPWUuZXJyLnN0YWNrKSx2b2lkIHQucmVqZWN0KG4pfXQucmVzb2x2ZShlLnJlcyl9X2hhbmRsZVJlcXVlc3RNZXNzYWdlKGUpe2NvbnN0IHQ9ZS5yZXE7dGhpcy5faGFuZGxlci5oYW5kbGVNZXNzYWdlKGUubWV0aG9kLGUuYXJncykudGhlbigoZT0+e3RoaXMuX3NlbmQobmV3IG5lKHRoaXMuX3dvcmtlcklkLHQsZSx2b2lkIDApKX0pLChlPT57ZS5kZXRhaWwgaW5zdGFuY2VvZiBFcnJvciYmKGUuZGV0YWlsPW4oZS5kZXRhaWwpKSx0aGlzLl9zZW5kKG5ldyBuZSh0aGlzLl93b3JrZXJJZCx0LHZvaWQgMCxuKGUpKSl9KSl9X2hhbmRsZVN1YnNjcmliZUV2ZW50TWVzc2FnZShlKXtjb25zdCB0PWUucmVxLG49dGhpcy5faGFuZGxlci5oYW5kbGVFdmVudChlLmV2ZW50TmFtZSxlLmFyZykoKGU9Pnt0aGlzLl9zZW5kKG5ldyBpZSh0aGlzLl93b3JrZXJJZCx0LGUpKX0pKTt0aGlzLl9wZW5kaW5nRXZlbnRzLnNldCh0LG4pfV9oYW5kbGVFdmVudE1lc3NhZ2UoZSl7dGhpcy5fcGVuZGluZ0VtaXR0ZXJzLmhhcyhlLnJlcSk/dGhpcy5fcGVuZGluZ0VtaXR0ZXJzLmdldChlLnJlcSkuZmlyZShlLmV2ZW50KTpjb25zb2xlLndhcm4oIkdvdCBldmVudCBmb3IgdW5rbm93biByZXEiKX1faGFuZGxlVW5zdWJzY3JpYmVFdmVudE1lc3NhZ2UoZSl7dGhpcy5fcGVuZGluZ0V2ZW50cy5oYXMoZS5yZXEpPyh0aGlzLl9wZW5kaW5nRXZlbnRzLmdldChlLnJlcSkuZGlzcG9zZSgpLHRoaXMuX3BlbmRpbmdFdmVudHMuZGVsZXRlKGUucmVxKSk6Y29uc29sZS53YXJuKCJHb3QgdW5zdWJzY3JpYmUgZm9yIHVua25vd24gcmVxIil9X3NlbmQoZSl7Y29uc3QgdD1bXTtpZigwPT09ZS50eXBlKWZvcihsZXQgbj0wO248ZS5hcmdzLmxlbmd0aDtuKyspZS5hcmdzW25daW5zdGFuY2VvZiBBcnJheUJ1ZmZlciYmdC5wdXNoKGUuYXJnc1tuXSk7ZWxzZSAxPT09ZS50eXBlJiZlLnJlcyBpbnN0YW5jZW9mIEFycmF5QnVmZmVyJiZ0LnB1c2goZS5yZXMpO3RoaXMuX2hhbmRsZXIuc2VuZE1lc3NhZ2UoZSx0KX19ZnVuY3Rpb24gc2UoZSl7cmV0dXJuIm8iPT09ZVswXSYmIm4iPT09ZVsxXSYmSihlLmNoYXJDb2RlQXQoMikpfWZ1bmN0aW9uIGNlKGUpe3JldHVybi9eb25EeW5hbWljLy50ZXN0KGUpJiZKKGUuY2hhckNvZGVBdCg5KSl9Y2xhc3MgbGV7Y29uc3RydWN0b3IoZSx0KXt0aGlzLl9yZXF1ZXN0SGFuZGxlckZhY3Rvcnk9dCx0aGlzLl9yZXF1ZXN0SGFuZGxlcj1udWxsLHRoaXMuX3Byb3RvY29sPW5ldyBhZSh7c2VuZE1lc3NhZ2U6KHQsbik9PntlKHQsbil9LGhhbmRsZU1lc3NhZ2U6KGUsdCk9PnRoaXMuX2hhbmRsZU1lc3NhZ2UoZSx0KSxoYW5kbGVFdmVudDooZSx0KT0+dGhpcy5faGFuZGxlRXZlbnQoZSx0KX0pfW9ubWVzc2FnZShlKXt0aGlzLl9wcm90b2NvbC5oYW5kbGVNZXNzYWdlKGUpfV9oYW5kbGVNZXNzYWdlKGUsdCl7aWYoIiRpbml0aWFsaXplIj09PWUpcmV0dXJuIHRoaXMuaW5pdGlhbGl6ZSh0WzBdLHRbMV0sdFsyXSx0WzNdKTtpZighdGhpcy5fcmVxdWVzdEhhbmRsZXJ8fCJmdW5jdGlvbiIhPXR5cGVvZiB0aGlzLl9yZXF1ZXN0SGFuZGxlcltlXSlyZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKCJNaXNzaW5nIHJlcXVlc3RIYW5kbGVyIG9yIG1ldGhvZDogIitlKSk7dHJ5e3JldHVybiBQcm9taXNlLnJlc29sdmUodGhpcy5fcmVxdWVzdEhhbmRsZXJbZV0uYXBwbHkodGhpcy5fcmVxdWVzdEhhbmRsZXIsdCkpfWNhdGNoKGUpe3JldHVybiBQcm9taXNlLnJlamVjdChlKX19X2hhbmRsZUV2ZW50KGUsdCl7aWYoIXRoaXMuX3JlcXVlc3RIYW5kbGVyKXRocm93IG5ldyBFcnJvcigiTWlzc2luZyByZXF1ZXN0SGFuZGxlciIpO2lmKGNlKGUpKXtjb25zdCBuPXRoaXMuX3JlcXVlc3RIYW5kbGVyW2VdLmNhbGwodGhpcy5fcmVxdWVzdEhhbmRsZXIsdCk7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIG4pdGhyb3cgbmV3IEVycm9yKGBNaXNzaW5nIGR5bmFtaWMgZXZlbnQgJHtlfSBvbiByZXF1ZXN0IGhhbmRsZXIuYCk7cmV0dXJuIG59aWYoc2UoZSkpe2NvbnN0IHQ9dGhpcy5fcmVxdWVzdEhhbmRsZXJbZV07aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHQpdGhyb3cgbmV3IEVycm9yKGBNaXNzaW5nIGV2ZW50ICR7ZX0gb24gcmVxdWVzdCBoYW5kbGVyLmApO3JldHVybiB0fXRocm93IG5ldyBFcnJvcihgTWFsZm9ybWVkIGV2ZW50IG5hbWUgJHtlfWApfWluaXRpYWxpemUoZSx0LG4scil7dGhpcy5fcHJvdG9jb2wuc2V0V29ya2VySWQoZSk7Y29uc3QgaT1mdW5jdGlvbihlLHQsbil7Y29uc3Qgcj1lPT5mdW5jdGlvbigpe2NvbnN0IG49QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLDApO3JldHVybiB0KGUsbil9LGk9ZT0+ZnVuY3Rpb24odCl7cmV0dXJuIG4oZSx0KX0sbz17fTtmb3IoY29uc3QgdCBvZiBlKWNlKHQpP29bdF09aSh0KTpzZSh0KT9vW3RdPW4odCx2b2lkIDApOm9bdF09cih0KTtyZXR1cm4gb30ociwoKGUsdCk9PnRoaXMuX3Byb3RvY29sLnNlbmRNZXNzYWdlKGUsdCkpLCgoZSx0KT0+dGhpcy5fcHJvdG9jb2wubGlzdGVuKGUsdCkpKTtyZXR1cm4gdGhpcy5fcmVxdWVzdEhhbmRsZXJGYWN0b3J5Pyh0aGlzLl9yZXF1ZXN0SGFuZGxlcj10aGlzLl9yZXF1ZXN0SGFuZGxlckZhY3RvcnkoaSksUHJvbWlzZS5yZXNvbHZlKEgodGhpcy5fcmVxdWVzdEhhbmRsZXIpKSk6KHQmJih2b2lkIDAhPT10LmJhc2VVcmwmJmRlbGV0ZSB0LmJhc2VVcmwsdm9pZCAwIT09dC5wYXRocyYmdm9pZCAwIT09dC5wYXRocy52cyYmZGVsZXRlIHQucGF0aHMudnMsdm9pZCAwIT09dHlwZW9mIHQudHJ1c3RlZFR5cGVzUG9saWN5JiZkZWxldGUgdC50cnVzdGVkVHlwZXNQb2xpY3ksdC5jYXRjaEVycm9yPSEwLE4ucmVxdWlyZS5jb25maWcodCkpLG5ldyBQcm9taXNlKCgoZSx0KT0+eygwLE4ucmVxdWlyZSkoW25dLChuPT57dGhpcy5fcmVxdWVzdEhhbmRsZXI9bi5jcmVhdGUoaSksdGhpcy5fcmVxdWVzdEhhbmRsZXI/ZShIKHRoaXMuX3JlcXVlc3RIYW5kbGVyKSk6dChuZXcgRXJyb3IoIk5vIFJlcXVlc3RIYW5kbGVyISIpKX0pLHQpfSkpKX19Y2xhc3MgdWV7Y29uc3RydWN0b3IoZSx0LG4scil7dGhpcy5vcmlnaW5hbFN0YXJ0PWUsdGhpcy5vcmlnaW5hbExlbmd0aD10LHRoaXMubW9kaWZpZWRTdGFydD1uLHRoaXMubW9kaWZpZWRMZW5ndGg9cn1nZXRPcmlnaW5hbEVuZCgpe3JldHVybiB0aGlzLm9yaWdpbmFsU3RhcnQrdGhpcy5vcmlnaW5hbExlbmd0aH1nZXRNb2RpZmllZEVuZCgpe3JldHVybiB0aGlzLm1vZGlmaWVkU3RhcnQrdGhpcy5tb2RpZmllZExlbmd0aH19ZnVuY3Rpb24gaGUoZSx0KXtyZXR1cm4odDw8NSktdCtlfDB9ZnVuY3Rpb24gZmUoZSx0KXt0PWhlKDE0OTQxNyx0KTtmb3IobGV0IG49MCxyPWUubGVuZ3RoO248cjtuKyspdD1oZShlLmNoYXJDb2RlQXQobiksdCk7cmV0dXJuIHR9Y2xhc3MgZGV7Y29uc3RydWN0b3IoZSl7dGhpcy5zb3VyY2U9ZX1nZXRFbGVtZW50cygpe2NvbnN0IGU9dGhpcy5zb3VyY2UsdD1uZXcgSW50MzJBcnJheShlLmxlbmd0aCk7Zm9yKGxldCBuPTAscj1lLmxlbmd0aDtuPHI7bisrKXRbbl09ZS5jaGFyQ29kZUF0KG4pO3JldHVybiB0fX1mdW5jdGlvbiBtZShlLHQsbil7cmV0dXJuIG5ldyB2ZShuZXcgZGUoZSksbmV3IGRlKHQpKS5Db21wdXRlRGlmZihuKS5jaGFuZ2VzfWNsYXNzIGdle3N0YXRpYyBBc3NlcnQoZSx0KXtpZighZSl0aHJvdyBuZXcgRXJyb3IodCl9fWNsYXNzIHBle3N0YXRpYyBDb3B5KGUsdCxuLHIsaSl7Zm9yKGxldCBvPTA7bzxpO28rKyluW3Irb109ZVt0K29dfXN0YXRpYyBDb3B5MihlLHQsbixyLGkpe2ZvcihsZXQgbz0wO288aTtvKyspbltyK29dPWVbdCtvXX19Y2xhc3MgYmV7Y29uc3RydWN0b3IoKXt0aGlzLm1fY2hhbmdlcz1bXSx0aGlzLm1fb3JpZ2luYWxTdGFydD0xMDczNzQxODI0LHRoaXMubV9tb2RpZmllZFN0YXJ0PTEwNzM3NDE4MjQsdGhpcy5tX29yaWdpbmFsQ291bnQ9MCx0aGlzLm1fbW9kaWZpZWRDb3VudD0wfU1hcmtOZXh0Q2hhbmdlKCl7KHRoaXMubV9vcmlnaW5hbENvdW50PjB8fHRoaXMubV9tb2RpZmllZENvdW50PjApJiZ0aGlzLm1fY2hhbmdlcy5wdXNoKG5ldyB1ZSh0aGlzLm1fb3JpZ2luYWxTdGFydCx0aGlzLm1fb3JpZ2luYWxDb3VudCx0aGlzLm1fbW9kaWZpZWRTdGFydCx0aGlzLm1fbW9kaWZpZWRDb3VudCkpLHRoaXMubV9vcmlnaW5hbENvdW50PTAsdGhpcy5tX21vZGlmaWVkQ291bnQ9MCx0aGlzLm1fb3JpZ2luYWxTdGFydD0xMDczNzQxODI0LHRoaXMubV9tb2RpZmllZFN0YXJ0PTEwNzM3NDE4MjR9QWRkT3JpZ2luYWxFbGVtZW50KGUsdCl7dGhpcy5tX29yaWdpbmFsU3RhcnQ9TWF0aC5taW4odGhpcy5tX29yaWdpbmFsU3RhcnQsZSksdGhpcy5tX21vZGlmaWVkU3RhcnQ9TWF0aC5taW4odGhpcy5tX21vZGlmaWVkU3RhcnQsdCksdGhpcy5tX29yaWdpbmFsQ291bnQrK31BZGRNb2RpZmllZEVsZW1lbnQoZSx0KXt0aGlzLm1fb3JpZ2luYWxTdGFydD1NYXRoLm1pbih0aGlzLm1fb3JpZ2luYWxTdGFydCxlKSx0aGlzLm1fbW9kaWZpZWRTdGFydD1NYXRoLm1pbih0aGlzLm1fbW9kaWZpZWRTdGFydCx0KSx0aGlzLm1fbW9kaWZpZWRDb3VudCsrfWdldENoYW5nZXMoKXtyZXR1cm4odGhpcy5tX29yaWdpbmFsQ291bnQ+MHx8dGhpcy5tX21vZGlmaWVkQ291bnQ+MCkmJnRoaXMuTWFya05leHRDaGFuZ2UoKSx0aGlzLm1fY2hhbmdlc31nZXRSZXZlcnNlQ2hhbmdlcygpe3JldHVybih0aGlzLm1fb3JpZ2luYWxDb3VudD4wfHx0aGlzLm1fbW9kaWZpZWRDb3VudD4wKSYmdGhpcy5NYXJrTmV4dENoYW5nZSgpLHRoaXMubV9jaGFuZ2VzLnJldmVyc2UoKSx0aGlzLm1fY2hhbmdlc319Y2xhc3MgdmV7Y29uc3RydWN0b3IoZSx0LG49bnVsbCl7dGhpcy5Db250aW51ZVByb2Nlc3NpbmdQcmVkaWNhdGU9bix0aGlzLl9vcmlnaW5hbFNlcXVlbmNlPWUsdGhpcy5fbW9kaWZpZWRTZXF1ZW5jZT10O2NvbnN0W3IsaSxvXT12ZS5fZ2V0RWxlbWVudHMoZSksW2EscyxjXT12ZS5fZ2V0RWxlbWVudHModCk7dGhpcy5faGFzU3RyaW5ncz1vJiZjLHRoaXMuX29yaWdpbmFsU3RyaW5nRWxlbWVudHM9cix0aGlzLl9vcmlnaW5hbEVsZW1lbnRzT3JIYXNoPWksdGhpcy5fbW9kaWZpZWRTdHJpbmdFbGVtZW50cz1hLHRoaXMuX21vZGlmaWVkRWxlbWVudHNPckhhc2g9cyx0aGlzLm1fZm9yd2FyZEhpc3Rvcnk9W10sdGhpcy5tX3JldmVyc2VIaXN0b3J5PVtdfXN0YXRpYyBfaXNTdHJpbmdBcnJheShlKXtyZXR1cm4gZS5sZW5ndGg+MCYmInN0cmluZyI9PXR5cGVvZiBlWzBdfXN0YXRpYyBfZ2V0RWxlbWVudHMoZSl7Y29uc3QgdD1lLmdldEVsZW1lbnRzKCk7aWYodmUuX2lzU3RyaW5nQXJyYXkodCkpe2NvbnN0IGU9bmV3IEludDMyQXJyYXkodC5sZW5ndGgpO2ZvcihsZXQgbj0wLHI9dC5sZW5ndGg7bjxyO24rKyllW25dPWZlKHRbbl0sMCk7cmV0dXJuW3QsZSwhMF19cmV0dXJuIHQgaW5zdGFuY2VvZiBJbnQzMkFycmF5P1tbXSx0LCExXTpbW10sbmV3IEludDMyQXJyYXkodCksITFdfUVsZW1lbnRzQXJlRXF1YWwoZSx0KXtyZXR1cm4gdGhpcy5fb3JpZ2luYWxFbGVtZW50c09ySGFzaFtlXT09PXRoaXMuX21vZGlmaWVkRWxlbWVudHNPckhhc2hbdF0mJighdGhpcy5faGFzU3RyaW5nc3x8dGhpcy5fb3JpZ2luYWxTdHJpbmdFbGVtZW50c1tlXT09PXRoaXMuX21vZGlmaWVkU3RyaW5nRWxlbWVudHNbdF0pfUVsZW1lbnRzQXJlU3RyaWN0RXF1YWwoZSx0KXtpZighdGhpcy5FbGVtZW50c0FyZUVxdWFsKGUsdCkpcmV0dXJuITE7cmV0dXJuIHZlLl9nZXRTdHJpY3RFbGVtZW50KHRoaXMuX29yaWdpbmFsU2VxdWVuY2UsZSk9PT12ZS5fZ2V0U3RyaWN0RWxlbWVudCh0aGlzLl9tb2RpZmllZFNlcXVlbmNlLHQpfXN0YXRpYyBfZ2V0U3RyaWN0RWxlbWVudChlLHQpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBlLmdldFN0cmljdEVsZW1lbnQ/ZS5nZXRTdHJpY3RFbGVtZW50KHQpOm51bGx9T3JpZ2luYWxFbGVtZW50c0FyZUVxdWFsKGUsdCl7cmV0dXJuIHRoaXMuX29yaWdpbmFsRWxlbWVudHNPckhhc2hbZV09PT10aGlzLl9vcmlnaW5hbEVsZW1lbnRzT3JIYXNoW3RdJiYoIXRoaXMuX2hhc1N0cmluZ3N8fHRoaXMuX29yaWdpbmFsU3RyaW5nRWxlbWVudHNbZV09PT10aGlzLl9vcmlnaW5hbFN0cmluZ0VsZW1lbnRzW3RdKX1Nb2RpZmllZEVsZW1lbnRzQXJlRXF1YWwoZSx0KXtyZXR1cm4gdGhpcy5fbW9kaWZpZWRFbGVtZW50c09ySGFzaFtlXT09PXRoaXMuX21vZGlmaWVkRWxlbWVudHNPckhhc2hbdF0mJighdGhpcy5faGFzU3RyaW5nc3x8dGhpcy5fbW9kaWZpZWRTdHJpbmdFbGVtZW50c1tlXT09PXRoaXMuX21vZGlmaWVkU3RyaW5nRWxlbWVudHNbdF0pfUNvbXB1dGVEaWZmKGUpe3JldHVybiB0aGlzLl9Db21wdXRlRGlmZigwLHRoaXMuX29yaWdpbmFsRWxlbWVudHNPckhhc2gubGVuZ3RoLTEsMCx0aGlzLl9tb2RpZmllZEVsZW1lbnRzT3JIYXNoLmxlbmd0aC0xLGUpfV9Db21wdXRlRGlmZihlLHQsbixyLGkpe2NvbnN0IG89WyExXTtsZXQgYT10aGlzLkNvbXB1dGVEaWZmUmVjdXJzaXZlKGUsdCxuLHIsbyk7cmV0dXJuIGkmJihhPXRoaXMuUHJldHRpZnlDaGFuZ2VzKGEpKSx7cXVpdEVhcmx5Om9bMF0sY2hhbmdlczphfX1Db21wdXRlRGlmZlJlY3Vyc2l2ZShlLHQsbixyLGkpe2ZvcihpWzBdPSExO2U8PXQmJm48PXImJnRoaXMuRWxlbWVudHNBcmVFcXVhbChlLG4pOyllKyssbisrO2Zvcig7dD49ZSYmcj49biYmdGhpcy5FbGVtZW50c0FyZUVxdWFsKHQscik7KXQtLSxyLS07aWYoZT50fHxuPnIpe2xldCBpO3JldHVybiBuPD1yPyhnZS5Bc3NlcnQoZT09PXQrMSwib3JpZ2luYWxTdGFydCBzaG91bGQgb25seSBiZSBvbmUgbW9yZSB0aGFuIG9yaWdpbmFsRW5kIiksaT1bbmV3IHVlKGUsMCxuLHItbisxKV0pOmU8PXQ/KGdlLkFzc2VydChuPT09cisxLCJtb2RpZmllZFN0YXJ0IHNob3VsZCBvbmx5IGJlIG9uZSBtb3JlIHRoYW4gbW9kaWZpZWRFbmQiKSxpPVtuZXcgdWUoZSx0LWUrMSxuLDApXSk6KGdlLkFzc2VydChlPT09dCsxLCJvcmlnaW5hbFN0YXJ0IHNob3VsZCBvbmx5IGJlIG9uZSBtb3JlIHRoYW4gb3JpZ2luYWxFbmQiKSxnZS5Bc3NlcnQobj09PXIrMSwibW9kaWZpZWRTdGFydCBzaG91bGQgb25seSBiZSBvbmUgbW9yZSB0aGFuIG1vZGlmaWVkRW5kIiksaT1bXSksaX1jb25zdCBvPVswXSxhPVswXSxzPXRoaXMuQ29tcHV0ZVJlY3Vyc2lvblBvaW50KGUsdCxuLHIsbyxhLGkpLGM9b1swXSxsPWFbMF07aWYobnVsbCE9PXMpcmV0dXJuIHM7aWYoIWlbMF0pe2NvbnN0IG89dGhpcy5Db21wdXRlRGlmZlJlY3Vyc2l2ZShlLGMsbixsLGkpO2xldCBhPVtdO3JldHVybiBhPWlbMF0/W25ldyB1ZShjKzEsdC0oYysxKSsxLGwrMSxyLShsKzEpKzEpXTp0aGlzLkNvbXB1dGVEaWZmUmVjdXJzaXZlKGMrMSx0LGwrMSxyLGkpLHRoaXMuQ29uY2F0ZW5hdGVDaGFuZ2VzKG8sYSl9cmV0dXJuW25ldyB1ZShlLHQtZSsxLG4sci1uKzEpXX1XQUxLVFJBQ0UoZSx0LG4scixpLG8sYSxzLGMsbCx1LGgsZixkLG0sZyxwLGIpe2xldCB2PW51bGwseT1udWxsLEM9bmV3IGJlLHc9dCxfPW4sUz1mWzBdLWdbMF0tcixBPS0xMDczNzQxODI0LEU9dGhpcy5tX2ZvcndhcmRIaXN0b3J5Lmxlbmd0aC0xO2Rve2NvbnN0IHQ9UytlO3Q9PT13fHx0PF8mJmNbdC0xXTxjW3QrMV0/KGQ9KHU9Y1t0KzFdKS1TLXIsdTxBJiZDLk1hcmtOZXh0Q2hhbmdlKCksQT11LEMuQWRkTW9kaWZpZWRFbGVtZW50KHUrMSxkKSxTPXQrMS1lKTooZD0odT1jW3QtMV0rMSktUy1yLHU8QSYmQy5NYXJrTmV4dENoYW5nZSgpLEE9dS0xLEMuQWRkT3JpZ2luYWxFbGVtZW50KHUsZCsxKSxTPXQtMS1lKSxFPj0wJiYoZT0oYz10aGlzLm1fZm9yd2FyZEhpc3RvcnlbRV0pWzBdLHc9MSxfPWMubGVuZ3RoLTEpfXdoaWxlKC0tRT49LTEpO2lmKHY9Qy5nZXRSZXZlcnNlQ2hhbmdlcygpLGJbMF0pe2xldCBlPWZbMF0rMSx0PWdbMF0rMTtpZihudWxsIT09diYmdi5sZW5ndGg+MCl7Y29uc3Qgbj12W3YubGVuZ3RoLTFdO2U9TWF0aC5tYXgoZSxuLmdldE9yaWdpbmFsRW5kKCkpLHQ9TWF0aC5tYXgodCxuLmdldE1vZGlmaWVkRW5kKCkpfXk9W25ldyB1ZShlLGgtZSsxLHQsbS10KzEpXX1lbHNle0M9bmV3IGJlLHc9byxfPWEsUz1mWzBdLWdbMF0tcyxBPTEwNzM3NDE4MjQsRT1wP3RoaXMubV9yZXZlcnNlSGlzdG9yeS5sZW5ndGgtMTp0aGlzLm1fcmV2ZXJzZUhpc3RvcnkubGVuZ3RoLTI7ZG97Y29uc3QgZT1TK2k7ZT09PXd8fGU8XyYmbFtlLTFdPj1sW2UrMV0/KGQ9KHU9bFtlKzFdLTEpLVMtcyx1PkEmJkMuTWFya05leHRDaGFuZ2UoKSxBPXUrMSxDLkFkZE9yaWdpbmFsRWxlbWVudCh1KzEsZCsxKSxTPWUrMS1pKTooZD0odT1sW2UtMV0pLVMtcyx1PkEmJkMuTWFya05leHRDaGFuZ2UoKSxBPXUsQy5BZGRNb2RpZmllZEVsZW1lbnQodSsxLGQrMSksUz1lLTEtaSksRT49MCYmKGk9KGw9dGhpcy5tX3JldmVyc2VIaXN0b3J5W0VdKVswXSx3PTEsXz1sLmxlbmd0aC0xKX13aGlsZSgtLUU+PS0xKTt5PUMuZ2V0Q2hhbmdlcygpfXJldHVybiB0aGlzLkNvbmNhdGVuYXRlQ2hhbmdlcyh2LHkpfUNvbXB1dGVSZWN1cnNpb25Qb2ludChlLHQsbixyLGksbyxhKXtsZXQgcz0wLGM9MCxsPTAsdT0wLGg9MCxmPTA7ZS0tLG4tLSxpWzBdPTAsb1swXT0wLHRoaXMubV9mb3J3YXJkSGlzdG9yeT1bXSx0aGlzLm1fcmV2ZXJzZUhpc3Rvcnk9W107Y29uc3QgZD10LWUrKHItbiksbT1kKzEsZz1uZXcgSW50MzJBcnJheShtKSxwPW5ldyBJbnQzMkFycmF5KG0pLGI9ci1uLHY9dC1lLHk9ZS1uLEM9dC1yLHc9KHYtYiklMj09MDtnW2JdPWUscFt2XT10LGFbMF09ITE7Zm9yKGxldCBfPTE7Xzw9ZC8yKzE7XysrKXtsZXQgZD0wLFM9MDtsPXRoaXMuQ2xpcERpYWdvbmFsQm91bmQoYi1fLF8sYixtKSx1PXRoaXMuQ2xpcERpYWdvbmFsQm91bmQoYitfLF8sYixtKTtmb3IobGV0IGU9bDtlPD11O2UrPTIpe3M9ZT09PWx8fGU8dSYmZ1tlLTFdPGdbZSsxXT9nW2UrMV06Z1tlLTFdKzEsYz1zLShlLWIpLXk7Y29uc3Qgbj1zO2Zvcig7czx0JiZjPHImJnRoaXMuRWxlbWVudHNBcmVFcXVhbChzKzEsYysxKTspcysrLGMrKztpZihnW2VdPXMscytjPmQrUyYmKGQ9cyxTPWMpLCF3JiZNYXRoLmFicyhlLXYpPD1fLTEmJnM+PXBbZV0pcmV0dXJuIGlbMF09cyxvWzBdPWMsbjw9cFtlXSYmXzw9MTQ0OD90aGlzLldBTEtUUkFDRShiLGwsdSx5LHYsaCxmLEMsZyxwLHMsdCxpLGMscixvLHcsYSk6bnVsbH1jb25zdCBBPShkLWUrKFMtbiktXykvMjtpZihudWxsIT09dGhpcy5Db250aW51ZVByb2Nlc3NpbmdQcmVkaWNhdGUmJiF0aGlzLkNvbnRpbnVlUHJvY2Vzc2luZ1ByZWRpY2F0ZShkLEEpKXJldHVybiBhWzBdPSEwLGlbMF09ZCxvWzBdPVMsQT4wJiZfPD0xNDQ4P3RoaXMuV0FMS1RSQUNFKGIsbCx1LHksdixoLGYsQyxnLHAscyx0LGksYyxyLG8sdyxhKTooZSsrLG4rKyxbbmV3IHVlKGUsdC1lKzEsbixyLW4rMSldKTtoPXRoaXMuQ2xpcERpYWdvbmFsQm91bmQodi1fLF8sdixtKSxmPXRoaXMuQ2xpcERpYWdvbmFsQm91bmQoditfLF8sdixtKTtmb3IobGV0IGQ9aDtkPD1mO2QrPTIpe3M9ZD09PWh8fGQ8ZiYmcFtkLTFdPj1wW2QrMV0/cFtkKzFdLTE6cFtkLTFdLGM9cy0oZC12KS1DO2NvbnN0IG09cztmb3IoO3M+ZSYmYz5uJiZ0aGlzLkVsZW1lbnRzQXJlRXF1YWwocyxjKTspcy0tLGMtLTtpZihwW2RdPXMsdyYmTWF0aC5hYnMoZC1iKTw9XyYmczw9Z1tkXSlyZXR1cm4gaVswXT1zLG9bMF09YyxtPj1nW2RdJiZfPD0xNDQ4P3RoaXMuV0FMS1RSQUNFKGIsbCx1LHksdixoLGYsQyxnLHAscyx0LGksYyxyLG8sdyxhKTpudWxsfWlmKF88PTE0NDcpe2xldCBlPW5ldyBJbnQzMkFycmF5KHUtbCsyKTtlWzBdPWItbCsxLHBlLkNvcHkyKGcsbCxlLDEsdS1sKzEpLHRoaXMubV9mb3J3YXJkSGlzdG9yeS5wdXNoKGUpLGU9bmV3IEludDMyQXJyYXkoZi1oKzIpLGVbMF09di1oKzEscGUuQ29weTIocCxoLGUsMSxmLWgrMSksdGhpcy5tX3JldmVyc2VIaXN0b3J5LnB1c2goZSl9fXJldHVybiB0aGlzLldBTEtUUkFDRShiLGwsdSx5LHYsaCxmLEMsZyxwLHMsdCxpLGMscixvLHcsYSl9UHJldHRpZnlDaGFuZ2VzKGUpe2ZvcihsZXQgdD0wO3Q8ZS5sZW5ndGg7dCsrKXtjb25zdCBuPWVbdF0scj10PGUubGVuZ3RoLTE/ZVt0KzFdLm9yaWdpbmFsU3RhcnQ6dGhpcy5fb3JpZ2luYWxFbGVtZW50c09ySGFzaC5sZW5ndGgsaT10PGUubGVuZ3RoLTE/ZVt0KzFdLm1vZGlmaWVkU3RhcnQ6dGhpcy5fbW9kaWZpZWRFbGVtZW50c09ySGFzaC5sZW5ndGgsbz1uLm9yaWdpbmFsTGVuZ3RoPjAsYT1uLm1vZGlmaWVkTGVuZ3RoPjA7Zm9yKDtuLm9yaWdpbmFsU3RhcnQrbi5vcmlnaW5hbExlbmd0aDxyJiZuLm1vZGlmaWVkU3RhcnQrbi5tb2RpZmllZExlbmd0aDxpJiYoIW98fHRoaXMuT3JpZ2luYWxFbGVtZW50c0FyZUVxdWFsKG4ub3JpZ2luYWxTdGFydCxuLm9yaWdpbmFsU3RhcnQrbi5vcmlnaW5hbExlbmd0aCkpJiYoIWF8fHRoaXMuTW9kaWZpZWRFbGVtZW50c0FyZUVxdWFsKG4ubW9kaWZpZWRTdGFydCxuLm1vZGlmaWVkU3RhcnQrbi5tb2RpZmllZExlbmd0aCkpOyl7Y29uc3QgZT10aGlzLkVsZW1lbnRzQXJlU3RyaWN0RXF1YWwobi5vcmlnaW5hbFN0YXJ0LG4ubW9kaWZpZWRTdGFydCk7aWYodGhpcy5FbGVtZW50c0FyZVN0cmljdEVxdWFsKG4ub3JpZ2luYWxTdGFydCtuLm9yaWdpbmFsTGVuZ3RoLG4ubW9kaWZpZWRTdGFydCtuLm1vZGlmaWVkTGVuZ3RoKSYmIWUpYnJlYWs7bi5vcmlnaW5hbFN0YXJ0Kyssbi5tb2RpZmllZFN0YXJ0Kyt9Y29uc3Qgcz1bbnVsbF07dDxlLmxlbmd0aC0xJiZ0aGlzLkNoYW5nZXNPdmVybGFwKGVbdF0sZVt0KzFdLHMpJiYoZVt0XT1zWzBdLGUuc3BsaWNlKHQrMSwxKSx0LS0pfWZvcihsZXQgdD1lLmxlbmd0aC0xO3Q+PTA7dC0tKXtjb25zdCBuPWVbdF07bGV0IHI9MCxpPTA7aWYodD4wKXtjb25zdCBuPWVbdC0xXTtyPW4ub3JpZ2luYWxTdGFydCtuLm9yaWdpbmFsTGVuZ3RoLGk9bi5tb2RpZmllZFN0YXJ0K24ubW9kaWZpZWRMZW5ndGh9Y29uc3Qgbz1uLm9yaWdpbmFsTGVuZ3RoPjAsYT1uLm1vZGlmaWVkTGVuZ3RoPjA7bGV0IHM9MCxjPXRoaXMuX2JvdW5kYXJ5U2NvcmUobi5vcmlnaW5hbFN0YXJ0LG4ub3JpZ2luYWxMZW5ndGgsbi5tb2RpZmllZFN0YXJ0LG4ubW9kaWZpZWRMZW5ndGgpO2ZvcihsZXQgZT0xOztlKyspe2NvbnN0IHQ9bi5vcmlnaW5hbFN0YXJ0LWUsbD1uLm1vZGlmaWVkU3RhcnQtZTtpZih0PHJ8fGw8aSlicmVhaztpZihvJiYhdGhpcy5PcmlnaW5hbEVsZW1lbnRzQXJlRXF1YWwodCx0K24ub3JpZ2luYWxMZW5ndGgpKWJyZWFrO2lmKGEmJiF0aGlzLk1vZGlmaWVkRWxlbWVudHNBcmVFcXVhbChsLGwrbi5tb2RpZmllZExlbmd0aCkpYnJlYWs7Y29uc3QgdT0odD09PXImJmw9PT1pPzU6MCkrdGhpcy5fYm91bmRhcnlTY29yZSh0LG4ub3JpZ2luYWxMZW5ndGgsbCxuLm1vZGlmaWVkTGVuZ3RoKTt1PmMmJihjPXUscz1lKX1uLm9yaWdpbmFsU3RhcnQtPXMsbi5tb2RpZmllZFN0YXJ0LT1zO2NvbnN0IGw9W251bGxdO3Q+MCYmdGhpcy5DaGFuZ2VzT3ZlcmxhcChlW3QtMV0sZVt0XSxsKSYmKGVbdC0xXT1sWzBdLGUuc3BsaWNlKHQsMSksdCsrKX1pZih0aGlzLl9oYXNTdHJpbmdzKWZvcihsZXQgdD0xLG49ZS5sZW5ndGg7dDxuO3QrKyl7Y29uc3Qgbj1lW3QtMV0scj1lW3RdLGk9ci5vcmlnaW5hbFN0YXJ0LW4ub3JpZ2luYWxTdGFydC1uLm9yaWdpbmFsTGVuZ3RoLG89bi5vcmlnaW5hbFN0YXJ0LGE9ci5vcmlnaW5hbFN0YXJ0K3Iub3JpZ2luYWxMZW5ndGgscz1hLW8sYz1uLm1vZGlmaWVkU3RhcnQsbD1yLm1vZGlmaWVkU3RhcnQrci5tb2RpZmllZExlbmd0aCx1PWwtYztpZihpPDUmJnM8MjAmJnU8MjApe2NvbnN0IGU9dGhpcy5fZmluZEJldHRlckNvbnRpZ3VvdXNTZXF1ZW5jZShvLHMsYyx1LGkpO2lmKGUpe2NvbnN0W3Qsb109ZTt0PT09bi5vcmlnaW5hbFN0YXJ0K24ub3JpZ2luYWxMZW5ndGgmJm89PT1uLm1vZGlmaWVkU3RhcnQrbi5tb2RpZmllZExlbmd0aHx8KG4ub3JpZ2luYWxMZW5ndGg9dC1uLm9yaWdpbmFsU3RhcnQsbi5tb2RpZmllZExlbmd0aD1vLW4ubW9kaWZpZWRTdGFydCxyLm9yaWdpbmFsU3RhcnQ9dCtpLHIubW9kaWZpZWRTdGFydD1vK2ksci5vcmlnaW5hbExlbmd0aD1hLXIub3JpZ2luYWxTdGFydCxyLm1vZGlmaWVkTGVuZ3RoPWwtci5tb2RpZmllZFN0YXJ0KX19fXJldHVybiBlfV9maW5kQmV0dGVyQ29udGlndW91c1NlcXVlbmNlKGUsdCxuLHIsaSl7aWYodDxpfHxyPGkpcmV0dXJuIG51bGw7Y29uc3Qgbz1lK3QtaSsxLGE9bityLWkrMTtsZXQgcz0wLGM9MCxsPTA7Zm9yKGxldCB0PWU7dDxvO3QrKylmb3IobGV0IGU9bjtlPGE7ZSsrKXtjb25zdCBuPXRoaXMuX2NvbnRpZ3VvdXNTZXF1ZW5jZVNjb3JlKHQsZSxpKTtuPjAmJm4+cyYmKHM9bixjPXQsbD1lKX1yZXR1cm4gcz4wP1tjLGxdOm51bGx9X2NvbnRpZ3VvdXNTZXF1ZW5jZVNjb3JlKGUsdCxuKXtsZXQgcj0wO2ZvcihsZXQgaT0wO2k8bjtpKyspe2lmKCF0aGlzLkVsZW1lbnRzQXJlRXF1YWwoZStpLHQraSkpcmV0dXJuIDA7cis9dGhpcy5fb3JpZ2luYWxTdHJpbmdFbGVtZW50c1tlK2ldLmxlbmd0aH1yZXR1cm4gcn1fT3JpZ2luYWxJc0JvdW5kYXJ5KGUpe3JldHVybiBlPD0wfHxlPj10aGlzLl9vcmlnaW5hbEVsZW1lbnRzT3JIYXNoLmxlbmd0aC0xfHx0aGlzLl9oYXNTdHJpbmdzJiYvXlxzKiQvLnRlc3QodGhpcy5fb3JpZ2luYWxTdHJpbmdFbGVtZW50c1tlXSl9X09yaWdpbmFsUmVnaW9uSXNCb3VuZGFyeShlLHQpe2lmKHRoaXMuX09yaWdpbmFsSXNCb3VuZGFyeShlKXx8dGhpcy5fT3JpZ2luYWxJc0JvdW5kYXJ5KGUtMSkpcmV0dXJuITA7aWYodD4wKXtjb25zdCBuPWUrdDtpZih0aGlzLl9PcmlnaW5hbElzQm91bmRhcnkobi0xKXx8dGhpcy5fT3JpZ2luYWxJc0JvdW5kYXJ5KG4pKXJldHVybiEwfXJldHVybiExfV9Nb2RpZmllZElzQm91bmRhcnkoZSl7cmV0dXJuIGU8PTB8fGU+PXRoaXMuX21vZGlmaWVkRWxlbWVudHNPckhhc2gubGVuZ3RoLTF8fHRoaXMuX2hhc1N0cmluZ3MmJi9eXHMqJC8udGVzdCh0aGlzLl9tb2RpZmllZFN0cmluZ0VsZW1lbnRzW2VdKX1fTW9kaWZpZWRSZWdpb25Jc0JvdW5kYXJ5KGUsdCl7aWYodGhpcy5fTW9kaWZpZWRJc0JvdW5kYXJ5KGUpfHx0aGlzLl9Nb2RpZmllZElzQm91bmRhcnkoZS0xKSlyZXR1cm4hMDtpZih0PjApe2NvbnN0IG49ZSt0O2lmKHRoaXMuX01vZGlmaWVkSXNCb3VuZGFyeShuLTEpfHx0aGlzLl9Nb2RpZmllZElzQm91bmRhcnkobikpcmV0dXJuITB9cmV0dXJuITF9X2JvdW5kYXJ5U2NvcmUoZSx0LG4scil7cmV0dXJuKHRoaXMuX09yaWdpbmFsUmVnaW9uSXNCb3VuZGFyeShlLHQpPzE6MCkrKHRoaXMuX01vZGlmaWVkUmVnaW9uSXNCb3VuZGFyeShuLHIpPzE6MCl9Q29uY2F0ZW5hdGVDaGFuZ2VzKGUsdCl7Y29uc3Qgbj1bXTtpZigwPT09ZS5sZW5ndGh8fDA9PT10Lmxlbmd0aClyZXR1cm4gdC5sZW5ndGg+MD90OmU7aWYodGhpcy5DaGFuZ2VzT3ZlcmxhcChlW2UubGVuZ3RoLTFdLHRbMF0sbikpe2NvbnN0IHI9bmV3IEFycmF5KGUubGVuZ3RoK3QubGVuZ3RoLTEpO3JldHVybiBwZS5Db3B5KGUsMCxyLDAsZS5sZW5ndGgtMSkscltlLmxlbmd0aC0xXT1uWzBdLHBlLkNvcHkodCwxLHIsZS5sZW5ndGgsdC5sZW5ndGgtMSkscn17Y29uc3Qgbj1uZXcgQXJyYXkoZS5sZW5ndGgrdC5sZW5ndGgpO3JldHVybiBwZS5Db3B5KGUsMCxuLDAsZS5sZW5ndGgpLHBlLkNvcHkodCwwLG4sZS5sZW5ndGgsdC5sZW5ndGgpLG59fUNoYW5nZXNPdmVybGFwKGUsdCxuKXtpZihnZS5Bc3NlcnQoZS5vcmlnaW5hbFN0YXJ0PD10Lm9yaWdpbmFsU3RhcnQsIkxlZnQgY2hhbmdlIGlzIG5vdCBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gcmlnaHQgY2hhbmdlIiksZ2UuQXNzZXJ0KGUubW9kaWZpZWRTdGFydDw9dC5tb2RpZmllZFN0YXJ0LCJMZWZ0IGNoYW5nZSBpcyBub3QgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIHJpZ2h0IGNoYW5nZSIpLGUub3JpZ2luYWxTdGFydCtlLm9yaWdpbmFsTGVuZ3RoPj10Lm9yaWdpbmFsU3RhcnR8fGUubW9kaWZpZWRTdGFydCtlLm1vZGlmaWVkTGVuZ3RoPj10Lm1vZGlmaWVkU3RhcnQpe2NvbnN0IHI9ZS5vcmlnaW5hbFN0YXJ0O2xldCBpPWUub3JpZ2luYWxMZW5ndGg7Y29uc3Qgbz1lLm1vZGlmaWVkU3RhcnQ7bGV0IGE9ZS5tb2RpZmllZExlbmd0aDtyZXR1cm4gZS5vcmlnaW5hbFN0YXJ0K2Uub3JpZ2luYWxMZW5ndGg+PXQub3JpZ2luYWxTdGFydCYmKGk9dC5vcmlnaW5hbFN0YXJ0K3Qub3JpZ2luYWxMZW5ndGgtZS5vcmlnaW5hbFN0YXJ0KSxlLm1vZGlmaWVkU3RhcnQrZS5tb2RpZmllZExlbmd0aD49dC5tb2RpZmllZFN0YXJ0JiYoYT10Lm1vZGlmaWVkU3RhcnQrdC5tb2RpZmllZExlbmd0aC1lLm1vZGlmaWVkU3RhcnQpLG5bMF09bmV3IHVlKHIsaSxvLGEpLCEwfXJldHVybiBuWzBdPW51bGwsITF9Q2xpcERpYWdvbmFsQm91bmQoZSx0LG4scil7aWYoZT49MCYmZTxyKXJldHVybiBlO2NvbnN0IGk9dCUyPT0wO2lmKGU8MCl7cmV0dXJuIGk9PT0obiUyPT0wKT8wOjF9cmV0dXJuIGk9PT0oKHItbi0xKSUyPT0wKT9yLTE6ci0yfX1sZXQgeWU7aWYodm9pZCAwIT09Ti52c2NvZGUmJnZvaWQgMCE9PU4udnNjb2RlLnByb2Nlc3Mpe2NvbnN0IGU9Ti52c2NvZGUucHJvY2Vzczt5ZT17Z2V0IHBsYXRmb3JtKCl7cmV0dXJuIGUucGxhdGZvcm19LGdldCBhcmNoKCl7cmV0dXJuIGUuYXJjaH0sZ2V0IGVudigpe3JldHVybiBlLmVudn0sY3dkOigpPT5lLmN3ZCgpfX1lbHNlIHllPSJ1bmRlZmluZWQiIT10eXBlb2YgcHJvY2Vzcz97Z2V0IHBsYXRmb3JtKCl7cmV0dXJuIHByb2Nlc3MucGxhdGZvcm19LGdldCBhcmNoKCl7cmV0dXJuIHByb2Nlc3MuYXJjaH0sZ2V0IGVudigpe3JldHVybiBwcm9jZXNzLmVudn0sY3dkOigpPT5wcm9jZXNzLmVudi5WU0NPREVfQ1dEfHxwcm9jZXNzLmN3ZCgpfTp7Z2V0IHBsYXRmb3JtKCl7cmV0dXJuIFQ/IndpbjMyIjpPPyJkYXJ3aW4iOiJsaW51eCJ9LGdldCBhcmNoKCl7fSxnZXQgZW52KCl7cmV0dXJue319LGN3ZDooKT0+Ii8ifTtjb25zdCBDZT15ZS5jd2Qsd2U9eWUuZW52LF9lPXllLnBsYXRmb3JtLFNlPTQ2LEFlPTQ3LEVlPTkyLHhlPTU4O2NsYXNzIE5lIGV4dGVuZHMgRXJyb3J7Y29uc3RydWN0b3IoZSx0LG4pe2xldCByOyJzdHJpbmciPT10eXBlb2YgdCYmMD09PXQuaW5kZXhPZigibm90ICIpPyhyPSJtdXN0IG5vdCBiZSIsdD10LnJlcGxhY2UoL15ub3QgLywiIikpOnI9Im11c3QgYmUiO2NvbnN0IGk9LTEhPT1lLmluZGV4T2YoIi4iKT8icHJvcGVydHkiOiJhcmd1bWVudCI7bGV0IG89YFRoZSAiJHtlfSIgJHtpfSAke3J9IG9mIHR5cGUgJHt0fWA7bys9Ii4gUmVjZWl2ZWQgdHlwZSAiK3R5cGVvZiBuLHN1cGVyKG8pLHRoaXMuY29kZT0iRVJSX0lOVkFMSURfQVJHX1RZUEUifX1mdW5jdGlvbiBrZShlLHQpe2lmKCJzdHJpbmciIT10eXBlb2YgZSl0aHJvdyBuZXcgTmUodCwic3RyaW5nIixlKX1mdW5jdGlvbiBMZShlKXtyZXR1cm4gZT09PUFlfHxlPT09RWV9ZnVuY3Rpb24gVGUoZSl7cmV0dXJuIGU9PT1BZX1mdW5jdGlvbiBPZShlKXtyZXR1cm4gZT49NjUmJmU8PTkwfHxlPj05NyYmZTw9MTIyfWZ1bmN0aW9uIEllKGUsdCxuLHIpe2xldCBpPSIiLG89MCxhPS0xLHM9MCxjPTA7Zm9yKGxldCBsPTA7bDw9ZS5sZW5ndGg7KytsKXtpZihsPGUubGVuZ3RoKWM9ZS5jaGFyQ29kZUF0KGwpO2Vsc2V7aWYocihjKSlicmVhaztjPUFlfWlmKHIoYykpe2lmKGE9PT1sLTF8fDE9PT1zKTtlbHNlIGlmKDI9PT1zKXtpZihpLmxlbmd0aDwyfHwyIT09b3x8aS5jaGFyQ29kZUF0KGkubGVuZ3RoLTEpIT09U2V8fGkuY2hhckNvZGVBdChpLmxlbmd0aC0yKSE9PVNlKXtpZihpLmxlbmd0aD4yKXtjb25zdCBlPWkubGFzdEluZGV4T2Yobik7LTE9PT1lPyhpPSIiLG89MCk6KGk9aS5zbGljZSgwLGUpLG89aS5sZW5ndGgtMS1pLmxhc3RJbmRleE9mKG4pKSxhPWwscz0wO2NvbnRpbnVlfWlmKDAhPT1pLmxlbmd0aCl7aT0iIixvPTAsYT1sLHM9MDtjb250aW51ZX19dCYmKGkrPWkubGVuZ3RoPjA/YCR7bn0uLmA6Ii4uIixvPTIpfWVsc2UgaS5sZW5ndGg+MD9pKz1gJHtufSR7ZS5zbGljZShhKzEsbCl9YDppPWUuc2xpY2UoYSsxLGwpLG89bC1hLTE7YT1sLHM9MH1lbHNlIGM9PT1TZSYmLTEhPT1zPysrczpzPS0xfXJldHVybiBpfWZ1bmN0aW9uIE1lKGUsdCl7aWYobnVsbD09PXR8fCJvYmplY3QiIT10eXBlb2YgdCl0aHJvdyBuZXcgTmUoInBhdGhPYmplY3QiLCJPYmplY3QiLHQpO2NvbnN0IG49dC5kaXJ8fHQucm9vdCxyPXQuYmFzZXx8YCR7dC5uYW1lfHwiIn0ke3QuZXh0fHwiIn1gO3JldHVybiBuP249PT10LnJvb3Q/YCR7bn0ke3J9YDpgJHtufSR7ZX0ke3J9YDpyfWNvbnN0IFBlPXtyZXNvbHZlKC4uLmUpe2xldCB0PSIiLG49IiIscj0hMTtmb3IobGV0IGk9ZS5sZW5ndGgtMTtpPj0tMTtpLS0pe2xldCBvO2lmKGk+PTApe2lmKG89ZVtpXSxrZShvLCJwYXRoIiksMD09PW8ubGVuZ3RoKWNvbnRpbnVlfWVsc2UgMD09PXQubGVuZ3RoP289Q2UoKToobz13ZVtgPSR7dH1gXXx8Q2UoKSwodm9pZCAwPT09b3x8by5zbGljZSgwLDIpLnRvTG93ZXJDYXNlKCkhPT10LnRvTG93ZXJDYXNlKCkmJm8uY2hhckNvZGVBdCgyKT09PUVlKSYmKG89YCR7dH1cXGApKTtjb25zdCBhPW8ubGVuZ3RoO2xldCBzPTAsYz0iIixsPSExO2NvbnN0IHU9by5jaGFyQ29kZUF0KDApO2lmKDE9PT1hKUxlKHUpJiYocz0xLGw9ITApO2Vsc2UgaWYoTGUodSkpaWYobD0hMCxMZShvLmNoYXJDb2RlQXQoMSkpKXtsZXQgZT0yLHQ9ZTtmb3IoO2U8YSYmIUxlKG8uY2hhckNvZGVBdChlKSk7KWUrKztpZihlPGEmJmUhPT10KXtjb25zdCBuPW8uc2xpY2UodCxlKTtmb3IodD1lO2U8YSYmTGUoby5jaGFyQ29kZUF0KGUpKTspZSsrO2lmKGU8YSYmZSE9PXQpe2Zvcih0PWU7ZTxhJiYhTGUoby5jaGFyQ29kZUF0KGUpKTspZSsrO2UhPT1hJiZlPT09dHx8KGM9YFxcXFwke259XFwke28uc2xpY2UodCxlKX1gLHM9ZSl9fX1lbHNlIHM9MTtlbHNlIE9lKHUpJiZvLmNoYXJDb2RlQXQoMSk9PT14ZSYmKGM9by5zbGljZSgwLDIpLHM9MixhPjImJkxlKG8uY2hhckNvZGVBdCgyKSkmJihsPSEwLHM9MykpO2lmKGMubGVuZ3RoPjApaWYodC5sZW5ndGg+MCl7aWYoYy50b0xvd2VyQ2FzZSgpIT09dC50b0xvd2VyQ2FzZSgpKWNvbnRpbnVlfWVsc2UgdD1jO2lmKHIpe2lmKHQubGVuZ3RoPjApYnJlYWt9ZWxzZSBpZihuPWAke28uc2xpY2Uocyl9XFwke259YCxyPWwsbCYmdC5sZW5ndGg+MClicmVha31yZXR1cm4gbj1JZShuLCFyLCJcXCIsTGUpLHI/YCR7dH1cXCR7bn1gOmAke3R9JHtufWB8fCIuIn0sbm9ybWFsaXplKGUpe2tlKGUsInBhdGgiKTtjb25zdCB0PWUubGVuZ3RoO2lmKDA9PT10KXJldHVybiIuIjtsZXQgbixyPTAsaT0hMTtjb25zdCBvPWUuY2hhckNvZGVBdCgwKTtpZigxPT09dClyZXR1cm4gVGUobyk/IlxcIjplO2lmKExlKG8pKWlmKGk9ITAsTGUoZS5jaGFyQ29kZUF0KDEpKSl7bGV0IGk9MixvPWk7Zm9yKDtpPHQmJiFMZShlLmNoYXJDb2RlQXQoaSkpOylpKys7aWYoaTx0JiZpIT09byl7Y29uc3QgYT1lLnNsaWNlKG8saSk7Zm9yKG89aTtpPHQmJkxlKGUuY2hhckNvZGVBdChpKSk7KWkrKztpZihpPHQmJmkhPT1vKXtmb3Iobz1pO2k8dCYmIUxlKGUuY2hhckNvZGVBdChpKSk7KWkrKztpZihpPT09dClyZXR1cm5gXFxcXCR7YX1cXCR7ZS5zbGljZShvKX1cXGA7aSE9PW8mJihuPWBcXFxcJHthfVxcJHtlLnNsaWNlKG8saSl9YCxyPWkpfX19ZWxzZSByPTE7ZWxzZSBPZShvKSYmZS5jaGFyQ29kZUF0KDEpPT09eGUmJihuPWUuc2xpY2UoMCwyKSxyPTIsdD4yJiZMZShlLmNoYXJDb2RlQXQoMikpJiYoaT0hMCxyPTMpKTtsZXQgYT1yPHQ/SWUoZS5zbGljZShyKSwhaSwiXFwiLExlKToiIjtyZXR1cm4gMCE9PWEubGVuZ3RofHxpfHwoYT0iLiIpLGEubGVuZ3RoPjAmJkxlKGUuY2hhckNvZGVBdCh0LTEpKSYmKGErPSJcXCIpLHZvaWQgMD09PW4/aT9gXFwke2F9YDphOmk/YCR7bn1cXCR7YX1gOmAke259JHthfWB9LGlzQWJzb2x1dGUoZSl7a2UoZSwicGF0aCIpO2NvbnN0IHQ9ZS5sZW5ndGg7aWYoMD09PXQpcmV0dXJuITE7Y29uc3Qgbj1lLmNoYXJDb2RlQXQoMCk7cmV0dXJuIExlKG4pfHx0PjImJk9lKG4pJiZlLmNoYXJDb2RlQXQoMSk9PT14ZSYmTGUoZS5jaGFyQ29kZUF0KDIpKX0sam9pbiguLi5lKXtpZigwPT09ZS5sZW5ndGgpcmV0dXJuIi4iO2xldCB0LG47Zm9yKGxldCByPTA7cjxlLmxlbmd0aDsrK3Ipe2NvbnN0IGk9ZVtyXTtrZShpLCJwYXRoIiksaS5sZW5ndGg+MCYmKHZvaWQgMD09PXQ/dD1uPWk6dCs9YFxcJHtpfWApfWlmKHZvaWQgMD09PXQpcmV0dXJuIi4iO2xldCByPSEwLGk9MDtpZigic3RyaW5nIj09dHlwZW9mIG4mJkxlKG4uY2hhckNvZGVBdCgwKSkpeysraTtjb25zdCBlPW4ubGVuZ3RoO2U+MSYmTGUobi5jaGFyQ29kZUF0KDEpKSYmKCsraSxlPjImJihMZShuLmNoYXJDb2RlQXQoMikpPysraTpyPSExKSl9aWYocil7Zm9yKDtpPHQubGVuZ3RoJiZMZSh0LmNoYXJDb2RlQXQoaSkpOylpKys7aT49MiYmKHQ9YFxcJHt0LnNsaWNlKGkpfWApfXJldHVybiBQZS5ub3JtYWxpemUodCl9LHJlbGF0aXZlKGUsdCl7aWYoa2UoZSwiZnJvbSIpLGtlKHQsInRvIiksZT09PXQpcmV0dXJuIiI7Y29uc3Qgbj1QZS5yZXNvbHZlKGUpLHI9UGUucmVzb2x2ZSh0KTtpZihuPT09cilyZXR1cm4iIjtpZigoZT1uLnRvTG93ZXJDYXNlKCkpPT09KHQ9ci50b0xvd2VyQ2FzZSgpKSlyZXR1cm4iIjtsZXQgaT0wO2Zvcig7aTxlLmxlbmd0aCYmZS5jaGFyQ29kZUF0KGkpPT09RWU7KWkrKztsZXQgbz1lLmxlbmd0aDtmb3IoO28tMT5pJiZlLmNoYXJDb2RlQXQoby0xKT09PUVlOylvLS07Y29uc3QgYT1vLWk7bGV0IHM9MDtmb3IoO3M8dC5sZW5ndGgmJnQuY2hhckNvZGVBdChzKT09PUVlOylzKys7bGV0IGM9dC5sZW5ndGg7Zm9yKDtjLTE+cyYmdC5jaGFyQ29kZUF0KGMtMSk9PT1FZTspYy0tO2NvbnN0IGw9Yy1zLHU9YTxsP2E6bDtsZXQgaD0tMSxmPTA7Zm9yKDtmPHU7ZisrKXtjb25zdCBuPWUuY2hhckNvZGVBdChpK2YpO2lmKG4hPT10LmNoYXJDb2RlQXQocytmKSlicmVhaztuPT09RWUmJihoPWYpfWlmKGYhPT11KXtpZigtMT09PWgpcmV0dXJuIHJ9ZWxzZXtpZihsPnUpe2lmKHQuY2hhckNvZGVBdChzK2YpPT09RWUpcmV0dXJuIHIuc2xpY2UocytmKzEpO2lmKDI9PT1mKXJldHVybiByLnNsaWNlKHMrZil9YT51JiYoZS5jaGFyQ29kZUF0KGkrZik9PT1FZT9oPWY6Mj09PWYmJihoPTMpKSwtMT09PWgmJihoPTApfWxldCBkPSIiO2ZvcihmPWkraCsxO2Y8PW87KytmKWYhPT1vJiZlLmNoYXJDb2RlQXQoZikhPT1FZXx8KGQrPTA9PT1kLmxlbmd0aD8iLi4iOiJcXC4uIik7cmV0dXJuIHMrPWgsZC5sZW5ndGg+MD9gJHtkfSR7ci5zbGljZShzLGMpfWA6KHIuY2hhckNvZGVBdChzKT09PUVlJiYrK3Msci5zbGljZShzLGMpKX0sdG9OYW1lc3BhY2VkUGF0aChlKXtpZigic3RyaW5nIiE9dHlwZW9mIGUpcmV0dXJuIGU7aWYoMD09PWUubGVuZ3RoKXJldHVybiIiO2NvbnN0IHQ9UGUucmVzb2x2ZShlKTtpZih0Lmxlbmd0aDw9MilyZXR1cm4gZTtpZih0LmNoYXJDb2RlQXQoMCk9PT1FZSl7aWYodC5jaGFyQ29kZUF0KDEpPT09RWUpe2NvbnN0IGU9dC5jaGFyQ29kZUF0KDIpO2lmKDYzIT09ZSYmZSE9PVNlKXJldHVybmBcXFxcP1xcVU5DXFwke3Quc2xpY2UoMil9YH19ZWxzZSBpZihPZSh0LmNoYXJDb2RlQXQoMCkpJiZ0LmNoYXJDb2RlQXQoMSk9PT14ZSYmdC5jaGFyQ29kZUF0KDIpPT09RWUpcmV0dXJuYFxcXFw/XFwke3R9YDtyZXR1cm4gZX0sZGlybmFtZShlKXtrZShlLCJwYXRoIik7Y29uc3QgdD1lLmxlbmd0aDtpZigwPT09dClyZXR1cm4iLiI7bGV0IG49LTEscj0wO2NvbnN0IGk9ZS5jaGFyQ29kZUF0KDApO2lmKDE9PT10KXJldHVybiBMZShpKT9lOiIuIjtpZihMZShpKSl7aWYobj1yPTEsTGUoZS5jaGFyQ29kZUF0KDEpKSl7bGV0IGk9MixvPWk7Zm9yKDtpPHQmJiFMZShlLmNoYXJDb2RlQXQoaSkpOylpKys7aWYoaTx0JiZpIT09byl7Zm9yKG89aTtpPHQmJkxlKGUuY2hhckNvZGVBdChpKSk7KWkrKztpZihpPHQmJmkhPT1vKXtmb3Iobz1pO2k8dCYmIUxlKGUuY2hhckNvZGVBdChpKSk7KWkrKztpZihpPT09dClyZXR1cm4gZTtpIT09byYmKG49cj1pKzEpfX19fWVsc2UgT2UoaSkmJmUuY2hhckNvZGVBdCgxKT09PXhlJiYobj10PjImJkxlKGUuY2hhckNvZGVBdCgyKSk/MzoyLHI9bik7bGV0IG89LTEsYT0hMDtmb3IobGV0IG49dC0xO24+PXI7LS1uKWlmKExlKGUuY2hhckNvZGVBdChuKSkpe2lmKCFhKXtvPW47YnJlYWt9fWVsc2UgYT0hMTtpZigtMT09PW8pe2lmKC0xPT09bilyZXR1cm4iLiI7bz1ufXJldHVybiBlLnNsaWNlKDAsbyl9LGJhc2VuYW1lKGUsdCl7dm9pZCAwIT09dCYma2UodCwiZXh0Iiksa2UoZSwicGF0aCIpO2xldCBuLHI9MCxpPS0xLG89ITA7aWYoZS5sZW5ndGg+PTImJk9lKGUuY2hhckNvZGVBdCgwKSkmJmUuY2hhckNvZGVBdCgxKT09PXhlJiYocj0yKSx2b2lkIDAhPT10JiZ0Lmxlbmd0aD4wJiZ0Lmxlbmd0aDw9ZS5sZW5ndGgpe2lmKHQ9PT1lKXJldHVybiIiO2xldCBhPXQubGVuZ3RoLTEscz0tMTtmb3Iobj1lLmxlbmd0aC0xO24+PXI7LS1uKXtjb25zdCBjPWUuY2hhckNvZGVBdChuKTtpZihMZShjKSl7aWYoIW8pe3I9bisxO2JyZWFrfX1lbHNlLTE9PT1zJiYobz0hMSxzPW4rMSksYT49MCYmKGM9PT10LmNoYXJDb2RlQXQoYSk/LTE9PS0tYSYmKGk9bik6KGE9LTEsaT1zKSl9cmV0dXJuIHI9PT1pP2k9czotMT09PWkmJihpPWUubGVuZ3RoKSxlLnNsaWNlKHIsaSl9Zm9yKG49ZS5sZW5ndGgtMTtuPj1yOy0tbilpZihMZShlLmNoYXJDb2RlQXQobikpKXtpZighbyl7cj1uKzE7YnJlYWt9fWVsc2UtMT09PWkmJihvPSExLGk9bisxKTtyZXR1cm4tMT09PWk/IiI6ZS5zbGljZShyLGkpfSxleHRuYW1lKGUpe2tlKGUsInBhdGgiKTtsZXQgdD0wLG49LTEscj0wLGk9LTEsbz0hMCxhPTA7ZS5sZW5ndGg+PTImJmUuY2hhckNvZGVBdCgxKT09PXhlJiZPZShlLmNoYXJDb2RlQXQoMCkpJiYodD1yPTIpO2ZvcihsZXQgcz1lLmxlbmd0aC0xO3M+PXQ7LS1zKXtjb25zdCB0PWUuY2hhckNvZGVBdChzKTtpZihMZSh0KSl7aWYoIW8pe3I9cysxO2JyZWFrfX1lbHNlLTE9PT1pJiYobz0hMSxpPXMrMSksdD09PVNlPy0xPT09bj9uPXM6MSE9PWEmJihhPTEpOi0xIT09biYmKGE9LTEpfXJldHVybi0xPT09bnx8LTE9PT1pfHwwPT09YXx8MT09PWEmJm49PT1pLTEmJm49PT1yKzE/IiI6ZS5zbGljZShuLGkpfSxmb3JtYXQ6TWUuYmluZChudWxsLCJcXCIpLHBhcnNlKGUpe2tlKGUsInBhdGgiKTtjb25zdCB0PXtyb290OiIiLGRpcjoiIixiYXNlOiIiLGV4dDoiIixuYW1lOiIifTtpZigwPT09ZS5sZW5ndGgpcmV0dXJuIHQ7Y29uc3Qgbj1lLmxlbmd0aDtsZXQgcj0wLGk9ZS5jaGFyQ29kZUF0KDApO2lmKDE9PT1uKXJldHVybiBMZShpKT8odC5yb290PXQuZGlyPWUsdCk6KHQuYmFzZT10Lm5hbWU9ZSx0KTtpZihMZShpKSl7aWYocj0xLExlKGUuY2hhckNvZGVBdCgxKSkpe2xldCB0PTIsaT10O2Zvcig7dDxuJiYhTGUoZS5jaGFyQ29kZUF0KHQpKTspdCsrO2lmKHQ8biYmdCE9PWkpe2ZvcihpPXQ7dDxuJiZMZShlLmNoYXJDb2RlQXQodCkpOyl0Kys7aWYodDxuJiZ0IT09aSl7Zm9yKGk9dDt0PG4mJiFMZShlLmNoYXJDb2RlQXQodCkpOyl0Kys7dD09PW4/cj10OnQhPT1pJiYocj10KzEpfX19fWVsc2UgaWYoT2UoaSkmJmUuY2hhckNvZGVBdCgxKT09PXhlKXtpZihuPD0yKXJldHVybiB0LnJvb3Q9dC5kaXI9ZSx0O2lmKHI9MixMZShlLmNoYXJDb2RlQXQoMikpKXtpZigzPT09bilyZXR1cm4gdC5yb290PXQuZGlyPWUsdDtyPTN9fXI+MCYmKHQucm9vdD1lLnNsaWNlKDAscikpO2xldCBvPS0xLGE9cixzPS0xLGM9ITAsbD1lLmxlbmd0aC0xLHU9MDtmb3IoO2w+PXI7LS1sKWlmKGk9ZS5jaGFyQ29kZUF0KGwpLExlKGkpKXtpZighYyl7YT1sKzE7YnJlYWt9fWVsc2UtMT09PXMmJihjPSExLHM9bCsxKSxpPT09U2U/LTE9PT1vP289bDoxIT09dSYmKHU9MSk6LTEhPT1vJiYodT0tMSk7cmV0dXJuLTEhPT1zJiYoLTE9PT1vfHwwPT09dXx8MT09PXUmJm89PT1zLTEmJm89PT1hKzE/dC5iYXNlPXQubmFtZT1lLnNsaWNlKGEscyk6KHQubmFtZT1lLnNsaWNlKGEsbyksdC5iYXNlPWUuc2xpY2UoYSxzKSx0LmV4dD1lLnNsaWNlKG8scykpKSx0LmRpcj1hPjAmJmEhPT1yP2Uuc2xpY2UoMCxhLTEpOnQucm9vdCx0fSxzZXA6IlxcIixkZWxpbWl0ZXI6IjsiLHdpbjMyOm51bGwscG9zaXg6bnVsbH0sUmU9e3Jlc29sdmUoLi4uZSl7bGV0IHQ9IiIsbj0hMTtmb3IobGV0IHI9ZS5sZW5ndGgtMTtyPj0tMSYmIW47ci0tKXtjb25zdCBpPXI+PTA/ZVtyXTpDZSgpO2tlKGksInBhdGgiKSwwIT09aS5sZW5ndGgmJih0PWAke2l9LyR7dH1gLG49aS5jaGFyQ29kZUF0KDApPT09QWUpfXJldHVybiB0PUllKHQsIW4sIi8iLFRlKSxuP2AvJHt0fWA6dC5sZW5ndGg+MD90OiIuIn0sbm9ybWFsaXplKGUpe2lmKGtlKGUsInBhdGgiKSwwPT09ZS5sZW5ndGgpcmV0dXJuIi4iO2NvbnN0IHQ9ZS5jaGFyQ29kZUF0KDApPT09QWUsbj1lLmNoYXJDb2RlQXQoZS5sZW5ndGgtMSk9PT1BZTtyZXR1cm4gMD09PShlPUllKGUsIXQsIi8iLFRlKSkubGVuZ3RoP3Q/Ii8iOm4/Ii4vIjoiLiI6KG4mJihlKz0iLyIpLHQ/YC8ke2V9YDplKX0saXNBYnNvbHV0ZTplPT4oa2UoZSwicGF0aCIpLGUubGVuZ3RoPjAmJmUuY2hhckNvZGVBdCgwKT09PUFlKSxqb2luKC4uLmUpe2lmKDA9PT1lLmxlbmd0aClyZXR1cm4iLiI7bGV0IHQ7Zm9yKGxldCBuPTA7bjxlLmxlbmd0aDsrK24pe2NvbnN0IHI9ZVtuXTtrZShyLCJwYXRoIiksci5sZW5ndGg+MCYmKHZvaWQgMD09PXQ/dD1yOnQrPWAvJHtyfWApfXJldHVybiB2b2lkIDA9PT10PyIuIjpSZS5ub3JtYWxpemUodCl9LHJlbGF0aXZlKGUsdCl7aWYoa2UoZSwiZnJvbSIpLGtlKHQsInRvIiksZT09PXQpcmV0dXJuIiI7aWYoKGU9UmUucmVzb2x2ZShlKSk9PT0odD1SZS5yZXNvbHZlKHQpKSlyZXR1cm4iIjtjb25zdCBuPWUubGVuZ3RoLHI9bi0xLGk9dC5sZW5ndGgtMSxvPXI8aT9yOmk7bGV0IGE9LTEscz0wO2Zvcig7czxvO3MrKyl7Y29uc3Qgbj1lLmNoYXJDb2RlQXQoMStzKTtpZihuIT09dC5jaGFyQ29kZUF0KDErcykpYnJlYWs7bj09PUFlJiYoYT1zKX1pZihzPT09bylpZihpPm8pe2lmKHQuY2hhckNvZGVBdCgxK3MpPT09QWUpcmV0dXJuIHQuc2xpY2UoMStzKzEpO2lmKDA9PT1zKXJldHVybiB0LnNsaWNlKDErcyl9ZWxzZSByPm8mJihlLmNoYXJDb2RlQXQoMStzKT09PUFlP2E9czowPT09cyYmKGE9MCkpO2xldCBjPSIiO2ZvcihzPTErYSsxO3M8PW47KytzKXMhPT1uJiZlLmNoYXJDb2RlQXQocykhPT1BZXx8KGMrPTA9PT1jLmxlbmd0aD8iLi4iOiIvLi4iKTtyZXR1cm5gJHtjfSR7dC5zbGljZSgxK2EpfWB9LHRvTmFtZXNwYWNlZFBhdGg6ZT0+ZSxkaXJuYW1lKGUpe2lmKGtlKGUsInBhdGgiKSwwPT09ZS5sZW5ndGgpcmV0dXJuIi4iO2NvbnN0IHQ9ZS5jaGFyQ29kZUF0KDApPT09QWU7bGV0IG49LTEscj0hMDtmb3IobGV0IHQ9ZS5sZW5ndGgtMTt0Pj0xOy0tdClpZihlLmNoYXJDb2RlQXQodCk9PT1BZSl7aWYoIXIpe249dDticmVha319ZWxzZSByPSExO3JldHVybi0xPT09bj90PyIvIjoiLiI6dCYmMT09PW4/Ii8vIjplLnNsaWNlKDAsbil9LGJhc2VuYW1lKGUsdCl7dm9pZCAwIT09dCYma2UodCwiZXh0Iiksa2UoZSwicGF0aCIpO2xldCBuLHI9MCxpPS0xLG89ITA7aWYodm9pZCAwIT09dCYmdC5sZW5ndGg+MCYmdC5sZW5ndGg8PWUubGVuZ3RoKXtpZih0PT09ZSlyZXR1cm4iIjtsZXQgYT10Lmxlbmd0aC0xLHM9LTE7Zm9yKG49ZS5sZW5ndGgtMTtuPj0wOy0tbil7Y29uc3QgYz1lLmNoYXJDb2RlQXQobik7aWYoYz09PUFlKXtpZighbyl7cj1uKzE7YnJlYWt9fWVsc2UtMT09PXMmJihvPSExLHM9bisxKSxhPj0wJiYoYz09PXQuY2hhckNvZGVBdChhKT8tMT09LS1hJiYoaT1uKTooYT0tMSxpPXMpKX1yZXR1cm4gcj09PWk/aT1zOi0xPT09aSYmKGk9ZS5sZW5ndGgpLGUuc2xpY2UocixpKX1mb3Iobj1lLmxlbmd0aC0xO24+PTA7LS1uKWlmKGUuY2hhckNvZGVBdChuKT09PUFlKXtpZighbyl7cj1uKzE7YnJlYWt9fWVsc2UtMT09PWkmJihvPSExLGk9bisxKTtyZXR1cm4tMT09PWk/IiI6ZS5zbGljZShyLGkpfSxleHRuYW1lKGUpe2tlKGUsInBhdGgiKTtsZXQgdD0tMSxuPTAscj0tMSxpPSEwLG89MDtmb3IobGV0IGE9ZS5sZW5ndGgtMTthPj0wOy0tYSl7Y29uc3Qgcz1lLmNoYXJDb2RlQXQoYSk7aWYocyE9PUFlKS0xPT09ciYmKGk9ITEscj1hKzEpLHM9PT1TZT8tMT09PXQ/dD1hOjEhPT1vJiYobz0xKTotMSE9PXQmJihvPS0xKTtlbHNlIGlmKCFpKXtuPWErMTticmVha319cmV0dXJuLTE9PT10fHwtMT09PXJ8fDA9PT1vfHwxPT09byYmdD09PXItMSYmdD09PW4rMT8iIjplLnNsaWNlKHQscil9LGZvcm1hdDpNZS5iaW5kKG51bGwsIi8iKSxwYXJzZShlKXtrZShlLCJwYXRoIik7Y29uc3QgdD17cm9vdDoiIixkaXI6IiIsYmFzZToiIixleHQ6IiIsbmFtZToiIn07aWYoMD09PWUubGVuZ3RoKXJldHVybiB0O2NvbnN0IG49ZS5jaGFyQ29kZUF0KDApPT09QWU7bGV0IHI7bj8odC5yb290PSIvIixyPTEpOnI9MDtsZXQgaT0tMSxvPTAsYT0tMSxzPSEwLGM9ZS5sZW5ndGgtMSxsPTA7Zm9yKDtjPj1yOy0tYyl7Y29uc3QgdD1lLmNoYXJDb2RlQXQoYyk7aWYodCE9PUFlKS0xPT09YSYmKHM9ITEsYT1jKzEpLHQ9PT1TZT8tMT09PWk/aT1jOjEhPT1sJiYobD0xKTotMSE9PWkmJihsPS0xKTtlbHNlIGlmKCFzKXtvPWMrMTticmVha319aWYoLTEhPT1hKXtjb25zdCByPTA9PT1vJiZuPzE6bzstMT09PWl8fDA9PT1sfHwxPT09bCYmaT09PWEtMSYmaT09PW8rMT90LmJhc2U9dC5uYW1lPWUuc2xpY2UocixhKToodC5uYW1lPWUuc2xpY2UocixpKSx0LmJhc2U9ZS5zbGljZShyLGEpLHQuZXh0PWUuc2xpY2UoaSxhKSl9cmV0dXJuIG8+MD90LmRpcj1lLnNsaWNlKDAsby0xKTpuJiYodC5kaXI9Ii8iKSx0fSxzZXA6Ii8iLGRlbGltaXRlcjoiOiIsd2luMzI6bnVsbCxwb3NpeDpudWxsfTtSZS53aW4zMj1QZS53aW4zMj1QZSxSZS5wb3NpeD1QZS5wb3NpeD1SZSwid2luMzIiPT09X2U/UGUubm9ybWFsaXplOlJlLm5vcm1hbGl6ZSwid2luMzIiPT09X2U/UGUucmVzb2x2ZTpSZS5yZXNvbHZlLCJ3aW4zMiI9PT1fZT9QZS5yZWxhdGl2ZTpSZS5yZWxhdGl2ZSwid2luMzIiPT09X2U/UGUuZGlybmFtZTpSZS5kaXJuYW1lLCJ3aW4zMiI9PT1fZT9QZS5iYXNlbmFtZTpSZS5iYXNlbmFtZSwid2luMzIiPT09X2U/UGUuZXh0bmFtZTpSZS5leHRuYW1lLCJ3aW4zMiI9PT1fZT9QZS5zZXA6UmUuc2VwO2NvbnN0IFZlPS9eXHdbXHdcZCsuLV0qJC8sRmU9L15cLy8sRGU9L15cL1wvLztmdW5jdGlvbiBLZShlLHQpe2lmKCFlLnNjaGVtZSYmdCl0aHJvdyBuZXcgRXJyb3IoYFtVcmlFcnJvcl06IFNjaGVtZSBpcyBtaXNzaW5nOiB7c2NoZW1lOiAiIiwgYXV0aG9yaXR5OiAiJHtlLmF1dGhvcml0eX0iLCBwYXRoOiAiJHtlLnBhdGh9IiwgcXVlcnk6ICIke2UucXVlcnl9IiwgZnJhZ21lbnQ6ICIke2UuZnJhZ21lbnR9In1gKTtpZihlLnNjaGVtZSYmIVZlLnRlc3QoZS5zY2hlbWUpKXRocm93IG5ldyBFcnJvcigiW1VyaUVycm9yXTogU2NoZW1lIGNvbnRhaW5zIGlsbGVnYWwgY2hhcmFjdGVycy4iKTtpZihlLnBhdGgpaWYoZS5hdXRob3JpdHkpe2lmKCFGZS50ZXN0KGUucGF0aCkpdGhyb3cgbmV3IEVycm9yKCdbVXJpRXJyb3JdOiBJZiBhIFVSSSBjb250YWlucyBhbiBhdXRob3JpdHkgY29tcG9uZW50LCB0aGVuIHRoZSBwYXRoIGNvbXBvbmVudCBtdXN0IGVpdGhlciBiZSBlbXB0eSBvciBiZWdpbiB3aXRoIGEgc2xhc2ggKCIvIikgY2hhcmFjdGVyJyl9ZWxzZSBpZihEZS50ZXN0KGUucGF0aCkpdGhyb3cgbmV3IEVycm9yKCdbVXJpRXJyb3JdOiBJZiBhIFVSSSBkb2VzIG5vdCBjb250YWluIGFuIGF1dGhvcml0eSBjb21wb25lbnQsIHRoZW4gdGhlIHBhdGggY2Fubm90IGJlZ2luIHdpdGggdHdvIHNsYXNoIGNoYXJhY3RlcnMgKCIvLyIpJyl9Y29uc3QgamU9IiIsVWU9Ii8iLEJlPS9eKChbXjovPyNdKz8pOik/KFwvXC8oW14vPyNdKikpPyhbXj8jXSopKFw/KFteI10qKSk/KCMoLiopKT8vO2xldCBxZT1jbGFzcyBle2NvbnN0cnVjdG9yKGUsdCxuLHIsaSxvPSExKXsib2JqZWN0Ij09dHlwZW9mIGU/KHRoaXMuc2NoZW1lPWUuc2NoZW1lfHxqZSx0aGlzLmF1dGhvcml0eT1lLmF1dGhvcml0eXx8amUsdGhpcy5wYXRoPWUucGF0aHx8amUsdGhpcy5xdWVyeT1lLnF1ZXJ5fHxqZSx0aGlzLmZyYWdtZW50PWUuZnJhZ21lbnR8fGplKToodGhpcy5zY2hlbWU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZXx8dD9lOiJmaWxlIn0oZSxvKSx0aGlzLmF1dGhvcml0eT10fHxqZSx0aGlzLnBhdGg9ZnVuY3Rpb24oZSx0KXtzd2l0Y2goZSl7Y2FzZSJodHRwcyI6Y2FzZSJodHRwIjpjYXNlImZpbGUiOnQ/dFswXSE9PVVlJiYodD1VZSt0KTp0PVVlfXJldHVybiB0fSh0aGlzLnNjaGVtZSxufHxqZSksdGhpcy5xdWVyeT1yfHxqZSx0aGlzLmZyYWdtZW50PWl8fGplLEtlKHRoaXMsbykpfXN0YXRpYyBpc1VyaSh0KXtyZXR1cm4gdCBpbnN0YW5jZW9mIGV8fCEhdCYmKCJzdHJpbmciPT10eXBlb2YgdC5hdXRob3JpdHkmJiJzdHJpbmciPT10eXBlb2YgdC5mcmFnbWVudCYmInN0cmluZyI9PXR5cGVvZiB0LnBhdGgmJiJzdHJpbmciPT10eXBlb2YgdC5xdWVyeSYmInN0cmluZyI9PXR5cGVvZiB0LnNjaGVtZSYmInN0cmluZyI9PXR5cGVvZiB0LmZzUGF0aCYmImZ1bmN0aW9uIj09dHlwZW9mIHQud2l0aCYmImZ1bmN0aW9uIj09dHlwZW9mIHQudG9TdHJpbmcpfWdldCBmc1BhdGgoKXtyZXR1cm4gSmUodGhpcywhMSl9d2l0aChlKXtpZighZSlyZXR1cm4gdGhpcztsZXR7c2NoZW1lOnQsYXV0aG9yaXR5Om4scGF0aDpyLHF1ZXJ5OmksZnJhZ21lbnQ6b309ZTtyZXR1cm4gdm9pZCAwPT09dD90PXRoaXMuc2NoZW1lOm51bGw9PT10JiYodD1qZSksdm9pZCAwPT09bj9uPXRoaXMuYXV0aG9yaXR5Om51bGw9PT1uJiYobj1qZSksdm9pZCAwPT09cj9yPXRoaXMucGF0aDpudWxsPT09ciYmKHI9amUpLHZvaWQgMD09PWk/aT10aGlzLnF1ZXJ5Om51bGw9PT1pJiYoaT1qZSksdm9pZCAwPT09bz9vPXRoaXMuZnJhZ21lbnQ6bnVsbD09PW8mJihvPWplKSx0PT09dGhpcy5zY2hlbWUmJm49PT10aGlzLmF1dGhvcml0eSYmcj09PXRoaXMucGF0aCYmaT09PXRoaXMucXVlcnkmJm89PT10aGlzLmZyYWdtZW50P3RoaXM6bmV3IFdlKHQsbixyLGksbyl9c3RhdGljIHBhcnNlKGUsdD0hMSl7Y29uc3Qgbj1CZS5leGVjKGUpO3JldHVybiBuP25ldyBXZShuWzJdfHxqZSxRZShuWzRdfHxqZSksUWUobls1XXx8amUpLFFlKG5bN118fGplKSxRZShuWzldfHxqZSksdCk6bmV3IFdlKGplLGplLGplLGplLGplKX1zdGF0aWMgZmlsZShlKXtsZXQgdD1qZTtpZihUJiYoZT1lLnJlcGxhY2UoL1xcL2csVWUpKSxlWzBdPT09VWUmJmVbMV09PT1VZSl7Y29uc3Qgbj1lLmluZGV4T2YoVWUsMik7LTE9PT1uPyh0PWUuc3Vic3RyaW5nKDIpLGU9VWUpOih0PWUuc3Vic3RyaW5nKDIsbiksZT1lLnN1YnN0cmluZyhuKXx8VWUpfXJldHVybiBuZXcgV2UoImZpbGUiLHQsZSxqZSxqZSl9c3RhdGljIGZyb20oZSl7Y29uc3QgdD1uZXcgV2UoZS5zY2hlbWUsZS5hdXRob3JpdHksZS5wYXRoLGUucXVlcnksZS5mcmFnbWVudCk7cmV0dXJuIEtlKHQsITApLHR9c3RhdGljIGpvaW5QYXRoKHQsLi4ubil7aWYoIXQucGF0aCl0aHJvdyBuZXcgRXJyb3IoIltVcmlFcnJvcl06IGNhbm5vdCBjYWxsIGpvaW5QYXRoIG9uIFVSSSB3aXRob3V0IHBhdGgiKTtsZXQgcjtyZXR1cm4gcj1UJiYiZmlsZSI9PT10LnNjaGVtZT9lLmZpbGUoUGUuam9pbihKZSh0LCEwKSwuLi5uKSkucGF0aDpSZS5qb2luKHQucGF0aCwuLi5uKSx0LndpdGgoe3BhdGg6cn0pfXRvU3RyaW5nKGU9ITEpe3JldHVybiBYZSh0aGlzLGUpfXRvSlNPTigpe3JldHVybiB0aGlzfXN0YXRpYyByZXZpdmUodCl7aWYodCl7aWYodCBpbnN0YW5jZW9mIGUpcmV0dXJuIHQ7e2NvbnN0IGU9bmV3IFdlKHQpO3JldHVybiBlLl9mb3JtYXR0ZWQ9dC5leHRlcm5hbCxlLl9mc1BhdGg9dC5fc2VwPT09JGU/dC5mc1BhdGg6bnVsbCxlfX1yZXR1cm4gdH19O2NvbnN0ICRlPVQ/MTp2b2lkIDA7Y2xhc3MgV2UgZXh0ZW5kcyBxZXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5fZm9ybWF0dGVkPW51bGwsdGhpcy5fZnNQYXRoPW51bGx9Z2V0IGZzUGF0aCgpe3JldHVybiB0aGlzLl9mc1BhdGh8fCh0aGlzLl9mc1BhdGg9SmUodGhpcywhMSkpLHRoaXMuX2ZzUGF0aH10b1N0cmluZyhlPSExKXtyZXR1cm4gZT9YZSh0aGlzLCEwKToodGhpcy5fZm9ybWF0dGVkfHwodGhpcy5fZm9ybWF0dGVkPVhlKHRoaXMsITEpKSx0aGlzLl9mb3JtYXR0ZWQpfXRvSlNPTigpe2NvbnN0IGU9eyRtaWQ6MX07cmV0dXJuIHRoaXMuX2ZzUGF0aCYmKGUuZnNQYXRoPXRoaXMuX2ZzUGF0aCxlLl9zZXA9JGUpLHRoaXMuX2Zvcm1hdHRlZCYmKGUuZXh0ZXJuYWw9dGhpcy5fZm9ybWF0dGVkKSx0aGlzLnBhdGgmJihlLnBhdGg9dGhpcy5wYXRoKSx0aGlzLnNjaGVtZSYmKGUuc2NoZW1lPXRoaXMuc2NoZW1lKSx0aGlzLmF1dGhvcml0eSYmKGUuYXV0aG9yaXR5PXRoaXMuYXV0aG9yaXR5KSx0aGlzLnF1ZXJ5JiYoZS5xdWVyeT10aGlzLnF1ZXJ5KSx0aGlzLmZyYWdtZW50JiYoZS5mcmFnbWVudD10aGlzLmZyYWdtZW50KSxlfX1jb25zdCBIZT17NTg6IiUzQSIsNDc6IiUyRiIsNjM6IiUzRiIsMzU6IiUyMyIsOTE6IiU1QiIsOTM6IiU1RCIsNjQ6IiU0MCIsMzM6IiUyMSIsMzY6IiUyNCIsMzg6IiUyNiIsMzk6IiUyNyIsNDA6IiUyOCIsNDE6IiUyOSIsNDI6IiUyQSIsNDM6IiUyQiIsNDQ6IiUyQyIsNTk6IiUzQiIsNjE6IiUzRCIsMzI6IiUyMCJ9O2Z1bmN0aW9uIHplKGUsdCl7bGV0IG4scj0tMTtmb3IobGV0IGk9MDtpPGUubGVuZ3RoO2krKyl7Y29uc3Qgbz1lLmNoYXJDb2RlQXQoaSk7aWYobz49OTcmJm88PTEyMnx8bz49NjUmJm88PTkwfHxvPj00OCYmbzw9NTd8fDQ1PT09b3x8NDY9PT1vfHw5NT09PW98fDEyNj09PW98fHQmJjQ3PT09byktMSE9PXImJihuKz1lbmNvZGVVUklDb21wb25lbnQoZS5zdWJzdHJpbmcocixpKSkscj0tMSksdm9pZCAwIT09biYmKG4rPWUuY2hhckF0KGkpKTtlbHNle3ZvaWQgMD09PW4mJihuPWUuc3Vic3RyKDAsaSkpO2NvbnN0IHQ9SGVbb107dm9pZCAwIT09dD8oLTEhPT1yJiYobis9ZW5jb2RlVVJJQ29tcG9uZW50KGUuc3Vic3RyaW5nKHIsaSkpLHI9LTEpLG4rPXQpOi0xPT09ciYmKHI9aSl9fXJldHVybi0xIT09ciYmKG4rPWVuY29kZVVSSUNvbXBvbmVudChlLnN1YnN0cmluZyhyKSkpLHZvaWQgMCE9PW4/bjplfWZ1bmN0aW9uIEdlKGUpe2xldCB0O2ZvcihsZXQgbj0wO248ZS5sZW5ndGg7bisrKXtjb25zdCByPWUuY2hhckNvZGVBdChuKTszNT09PXJ8fDYzPT09cj8odm9pZCAwPT09dCYmKHQ9ZS5zdWJzdHIoMCxuKSksdCs9SGVbcl0pOnZvaWQgMCE9PXQmJih0Kz1lW25dKX1yZXR1cm4gdm9pZCAwIT09dD90OmV9ZnVuY3Rpb24gSmUoZSx0KXtsZXQgbjtyZXR1cm4gbj1lLmF1dGhvcml0eSYmZS5wYXRoLmxlbmd0aD4xJiYiZmlsZSI9PT1lLnNjaGVtZT9gLy8ke2UuYXV0aG9yaXR5fSR7ZS5wYXRofWA6NDc9PT1lLnBhdGguY2hhckNvZGVBdCgwKSYmKGUucGF0aC5jaGFyQ29kZUF0KDEpPj02NSYmZS5wYXRoLmNoYXJDb2RlQXQoMSk8PTkwfHxlLnBhdGguY2hhckNvZGVBdCgxKT49OTcmJmUucGF0aC5jaGFyQ29kZUF0KDEpPD0xMjIpJiY1OD09PWUucGF0aC5jaGFyQ29kZUF0KDIpP3Q/ZS5wYXRoLnN1YnN0cigxKTplLnBhdGhbMV0udG9Mb3dlckNhc2UoKStlLnBhdGguc3Vic3RyKDIpOmUucGF0aCxUJiYobj1uLnJlcGxhY2UoL1wvL2csIlxcIikpLG59ZnVuY3Rpb24gWGUoZSx0KXtjb25zdCBuPXQ/R2U6emU7bGV0IHI9IiIse3NjaGVtZTppLGF1dGhvcml0eTpvLHBhdGg6YSxxdWVyeTpzLGZyYWdtZW50OmN9PWU7aWYoaSYmKHIrPWkscis9IjoiKSwob3x8ImZpbGUiPT09aSkmJihyKz1VZSxyKz1VZSksbyl7bGV0IGU9by5pbmRleE9mKCJAIik7aWYoLTEhPT1lKXtjb25zdCB0PW8uc3Vic3RyKDAsZSk7bz1vLnN1YnN0cihlKzEpLGU9dC5pbmRleE9mKCI6IiksLTE9PT1lP3IrPW4odCwhMSk6KHIrPW4odC5zdWJzdHIoMCxlKSwhMSkscis9IjoiLHIrPW4odC5zdWJzdHIoZSsxKSwhMSkpLHIrPSJAIn1vPW8udG9Mb3dlckNhc2UoKSxlPW8uaW5kZXhPZigiOiIpLC0xPT09ZT9yKz1uKG8sITEpOihyKz1uKG8uc3Vic3RyKDAsZSksITEpLHIrPW8uc3Vic3RyKGUpKX1pZihhKXtpZihhLmxlbmd0aD49MyYmNDc9PT1hLmNoYXJDb2RlQXQoMCkmJjU4PT09YS5jaGFyQ29kZUF0KDIpKXtjb25zdCBlPWEuY2hhckNvZGVBdCgxKTtlPj02NSYmZTw9OTAmJihhPWAvJHtTdHJpbmcuZnJvbUNoYXJDb2RlKGUrMzIpfToke2Euc3Vic3RyKDMpfWApfWVsc2UgaWYoYS5sZW5ndGg+PTImJjU4PT09YS5jaGFyQ29kZUF0KDEpKXtjb25zdCBlPWEuY2hhckNvZGVBdCgwKTtlPj02NSYmZTw9OTAmJihhPWAke1N0cmluZy5mcm9tQ2hhckNvZGUoZSszMil9OiR7YS5zdWJzdHIoMil9YCl9cis9bihhLCEwKX1yZXR1cm4gcyYmKHIrPSI/IixyKz1uKHMsITEpKSxjJiYocis9IiMiLHIrPXQ/Yzp6ZShjLCExKSkscn1mdW5jdGlvbiBaZShlKXt0cnl7cmV0dXJuIGRlY29kZVVSSUNvbXBvbmVudChlKX1jYXRjaCh0KXtyZXR1cm4gZS5sZW5ndGg+Mz9lLnN1YnN0cigwLDMpK1plKGUuc3Vic3RyKDMpKTplfX1jb25zdCBZZT0vKCVbMC05QS1aYS16XVswLTlBLVphLXpdKSsvZztmdW5jdGlvbiBRZShlKXtyZXR1cm4gZS5tYXRjaChZZSk/ZS5yZXBsYWNlKFllLChlPT5aZShlKSkpOmV9bGV0IGV0PWNsYXNzIGV7Y29uc3RydWN0b3IoZSx0KXt0aGlzLmxpbmVOdW1iZXI9ZSx0aGlzLmNvbHVtbj10fXdpdGgodD10aGlzLmxpbmVOdW1iZXIsbj10aGlzLmNvbHVtbil7cmV0dXJuIHQ9PT10aGlzLmxpbmVOdW1iZXImJm49PT10aGlzLmNvbHVtbj90aGlzOm5ldyBlKHQsbil9ZGVsdGEoZT0wLHQ9MCl7cmV0dXJuIHRoaXMud2l0aCh0aGlzLmxpbmVOdW1iZXIrZSx0aGlzLmNvbHVtbit0KX1lcXVhbHModCl7cmV0dXJuIGUuZXF1YWxzKHRoaXMsdCl9c3RhdGljIGVxdWFscyhlLHQpe3JldHVybiFlJiYhdHx8ISFlJiYhIXQmJmUubGluZU51bWJlcj09PXQubGluZU51bWJlciYmZS5jb2x1bW49PT10LmNvbHVtbn1pc0JlZm9yZSh0KXtyZXR1cm4gZS5pc0JlZm9yZSh0aGlzLHQpfXN0YXRpYyBpc0JlZm9yZShlLHQpe3JldHVybiBlLmxpbmVOdW1iZXI8dC5saW5lTnVtYmVyfHwhKHQubGluZU51bWJlcjxlLmxpbmVOdW1iZXIpJiZlLmNvbHVtbjx0LmNvbHVtbn1pc0JlZm9yZU9yRXF1YWwodCl7cmV0dXJuIGUuaXNCZWZvcmVPckVxdWFsKHRoaXMsdCl9c3RhdGljIGlzQmVmb3JlT3JFcXVhbChlLHQpe3JldHVybiBlLmxpbmVOdW1iZXI8dC5saW5lTnVtYmVyfHwhKHQubGluZU51bWJlcjxlLmxpbmVOdW1iZXIpJiZlLmNvbHVtbjw9dC5jb2x1bW59c3RhdGljIGNvbXBhcmUoZSx0KXtjb25zdCBuPTB8ZS5saW5lTnVtYmVyLHI9MHx0LmxpbmVOdW1iZXI7aWYobj09PXIpe3JldHVybigwfGUuY29sdW1uKS0oMHx0LmNvbHVtbil9cmV0dXJuIG4tcn1jbG9uZSgpe3JldHVybiBuZXcgZSh0aGlzLmxpbmVOdW1iZXIsdGhpcy5jb2x1bW4pfXRvU3RyaW5nKCl7cmV0dXJuIigiK3RoaXMubGluZU51bWJlcisiLCIrdGhpcy5jb2x1bW4rIikifXN0YXRpYyBsaWZ0KHQpe3JldHVybiBuZXcgZSh0LmxpbmVOdW1iZXIsdC5jb2x1bW4pfXN0YXRpYyBpc0lQb3NpdGlvbihlKXtyZXR1cm4gZSYmIm51bWJlciI9PXR5cGVvZiBlLmxpbmVOdW1iZXImJiJudW1iZXIiPT10eXBlb2YgZS5jb2x1bW59fSx0dD1jbGFzcyBle2NvbnN0cnVjdG9yKGUsdCxuLHIpe2U+bnx8ZT09PW4mJnQ+cj8odGhpcy5zdGFydExpbmVOdW1iZXI9bix0aGlzLnN0YXJ0Q29sdW1uPXIsdGhpcy5lbmRMaW5lTnVtYmVyPWUsdGhpcy5lbmRDb2x1bW49dCk6KHRoaXMuc3RhcnRMaW5lTnVtYmVyPWUsdGhpcy5zdGFydENvbHVtbj10LHRoaXMuZW5kTGluZU51bWJlcj1uLHRoaXMuZW5kQ29sdW1uPXIpfWlzRW1wdHkoKXtyZXR1cm4gZS5pc0VtcHR5KHRoaXMpfXN0YXRpYyBpc0VtcHR5KGUpe3JldHVybiBlLnN0YXJ0TGluZU51bWJlcj09PWUuZW5kTGluZU51bWJlciYmZS5zdGFydENvbHVtbj09PWUuZW5kQ29sdW1ufWNvbnRhaW5zUG9zaXRpb24odCl7cmV0dXJuIGUuY29udGFpbnNQb3NpdGlvbih0aGlzLHQpfXN0YXRpYyBjb250YWluc1Bvc2l0aW9uKGUsdCl7cmV0dXJuISh0LmxpbmVOdW1iZXI8ZS5zdGFydExpbmVOdW1iZXJ8fHQubGluZU51bWJlcj5lLmVuZExpbmVOdW1iZXIpJiYoISh0LmxpbmVOdW1iZXI9PT1lLnN0YXJ0TGluZU51bWJlciYmdC5jb2x1bW48ZS5zdGFydENvbHVtbikmJiEodC5saW5lTnVtYmVyPT09ZS5lbmRMaW5lTnVtYmVyJiZ0LmNvbHVtbj5lLmVuZENvbHVtbikpfXN0YXRpYyBzdHJpY3RDb250YWluc1Bvc2l0aW9uKGUsdCl7cmV0dXJuISh0LmxpbmVOdW1iZXI8ZS5zdGFydExpbmVOdW1iZXJ8fHQubGluZU51bWJlcj5lLmVuZExpbmVOdW1iZXIpJiYoISh0LmxpbmVOdW1iZXI9PT1lLnN0YXJ0TGluZU51bWJlciYmdC5jb2x1bW48PWUuc3RhcnRDb2x1bW4pJiYhKHQubGluZU51bWJlcj09PWUuZW5kTGluZU51bWJlciYmdC5jb2x1bW4+PWUuZW5kQ29sdW1uKSl9Y29udGFpbnNSYW5nZSh0KXtyZXR1cm4gZS5jb250YWluc1JhbmdlKHRoaXMsdCl9c3RhdGljIGNvbnRhaW5zUmFuZ2UoZSx0KXtyZXR1cm4hKHQuc3RhcnRMaW5lTnVtYmVyPGUuc3RhcnRMaW5lTnVtYmVyfHx0LmVuZExpbmVOdW1iZXI8ZS5zdGFydExpbmVOdW1iZXIpJiYoISh0LnN0YXJ0TGluZU51bWJlcj5lLmVuZExpbmVOdW1iZXJ8fHQuZW5kTGluZU51bWJlcj5lLmVuZExpbmVOdW1iZXIpJiYoISh0LnN0YXJ0TGluZU51bWJlcj09PWUuc3RhcnRMaW5lTnVtYmVyJiZ0LnN0YXJ0Q29sdW1uPGUuc3RhcnRDb2x1bW4pJiYhKHQuZW5kTGluZU51bWJlcj09PWUuZW5kTGluZU51bWJlciYmdC5lbmRDb2x1bW4+ZS5lbmRDb2x1bW4pKSl9c3RyaWN0Q29udGFpbnNSYW5nZSh0KXtyZXR1cm4gZS5zdHJpY3RDb250YWluc1JhbmdlKHRoaXMsdCl9c3RhdGljIHN0cmljdENvbnRhaW5zUmFuZ2UoZSx0KXtyZXR1cm4hKHQuc3RhcnRMaW5lTnVtYmVyPGUuc3RhcnRMaW5lTnVtYmVyfHx0LmVuZExpbmVOdW1iZXI8ZS5zdGFydExpbmVOdW1iZXIpJiYoISh0LnN0YXJ0TGluZU51bWJlcj5lLmVuZExpbmVOdW1iZXJ8fHQuZW5kTGluZU51bWJlcj5lLmVuZExpbmVOdW1iZXIpJiYoISh0LnN0YXJ0TGluZU51bWJlcj09PWUuc3RhcnRMaW5lTnVtYmVyJiZ0LnN0YXJ0Q29sdW1uPD1lLnN0YXJ0Q29sdW1uKSYmISh0LmVuZExpbmVOdW1iZXI9PT1lLmVuZExpbmVOdW1iZXImJnQuZW5kQ29sdW1uPj1lLmVuZENvbHVtbikpKX1wbHVzUmFuZ2UodCl7cmV0dXJuIGUucGx1c1JhbmdlKHRoaXMsdCl9c3RhdGljIHBsdXNSYW5nZSh0LG4pe2xldCByLGksbyxhO3JldHVybiBuLnN0YXJ0TGluZU51bWJlcjx0LnN0YXJ0TGluZU51bWJlcj8ocj1uLnN0YXJ0TGluZU51bWJlcixpPW4uc3RhcnRDb2x1bW4pOm4uc3RhcnRMaW5lTnVtYmVyPT09dC5zdGFydExpbmVOdW1iZXI/KHI9bi5zdGFydExpbmVOdW1iZXIsaT1NYXRoLm1pbihuLnN0YXJ0Q29sdW1uLHQuc3RhcnRDb2x1bW4pKToocj10LnN0YXJ0TGluZU51bWJlcixpPXQuc3RhcnRDb2x1bW4pLG4uZW5kTGluZU51bWJlcj50LmVuZExpbmVOdW1iZXI/KG89bi5lbmRMaW5lTnVtYmVyLGE9bi5lbmRDb2x1bW4pOm4uZW5kTGluZU51bWJlcj09PXQuZW5kTGluZU51bWJlcj8obz1uLmVuZExpbmVOdW1iZXIsYT1NYXRoLm1heChuLmVuZENvbHVtbix0LmVuZENvbHVtbikpOihvPXQuZW5kTGluZU51bWJlcixhPXQuZW5kQ29sdW1uKSxuZXcgZShyLGksbyxhKX1pbnRlcnNlY3RSYW5nZXModCl7cmV0dXJuIGUuaW50ZXJzZWN0UmFuZ2VzKHRoaXMsdCl9c3RhdGljIGludGVyc2VjdFJhbmdlcyh0LG4pe2xldCByPXQuc3RhcnRMaW5lTnVtYmVyLGk9dC5zdGFydENvbHVtbixvPXQuZW5kTGluZU51bWJlcixhPXQuZW5kQ29sdW1uO2NvbnN0IHM9bi5zdGFydExpbmVOdW1iZXIsYz1uLnN0YXJ0Q29sdW1uLGw9bi5lbmRMaW5lTnVtYmVyLHU9bi5lbmRDb2x1bW47cmV0dXJuIHI8cz8ocj1zLGk9Yyk6cj09PXMmJihpPU1hdGgubWF4KGksYykpLG8+bD8obz1sLGE9dSk6bz09PWwmJihhPU1hdGgubWluKGEsdSkpLHI+b3x8cj09PW8mJmk+YT9udWxsOm5ldyBlKHIsaSxvLGEpfWVxdWFsc1JhbmdlKHQpe3JldHVybiBlLmVxdWFsc1JhbmdlKHRoaXMsdCl9c3RhdGljIGVxdWFsc1JhbmdlKGUsdCl7cmV0dXJuISFlJiYhIXQmJmUuc3RhcnRMaW5lTnVtYmVyPT09dC5zdGFydExpbmVOdW1iZXImJmUuc3RhcnRDb2x1bW49PT10LnN0YXJ0Q29sdW1uJiZlLmVuZExpbmVOdW1iZXI9PT10LmVuZExpbmVOdW1iZXImJmUuZW5kQ29sdW1uPT09dC5lbmRDb2x1bW59Z2V0RW5kUG9zaXRpb24oKXtyZXR1cm4gZS5nZXRFbmRQb3NpdGlvbih0aGlzKX1zdGF0aWMgZ2V0RW5kUG9zaXRpb24oZSl7cmV0dXJuIG5ldyBldChlLmVuZExpbmVOdW1iZXIsZS5lbmRDb2x1bW4pfWdldFN0YXJ0UG9zaXRpb24oKXtyZXR1cm4gZS5nZXRTdGFydFBvc2l0aW9uKHRoaXMpfXN0YXRpYyBnZXRTdGFydFBvc2l0aW9uKGUpe3JldHVybiBuZXcgZXQoZS5zdGFydExpbmVOdW1iZXIsZS5zdGFydENvbHVtbil9dG9TdHJpbmcoKXtyZXR1cm4iWyIrdGhpcy5zdGFydExpbmVOdW1iZXIrIiwiK3RoaXMuc3RhcnRDb2x1bW4rIiAtPiAiK3RoaXMuZW5kTGluZU51bWJlcisiLCIrdGhpcy5lbmRDb2x1bW4rIl0ifXNldEVuZFBvc2l0aW9uKHQsbil7cmV0dXJuIG5ldyBlKHRoaXMuc3RhcnRMaW5lTnVtYmVyLHRoaXMuc3RhcnRDb2x1bW4sdCxuKX1zZXRTdGFydFBvc2l0aW9uKHQsbil7cmV0dXJuIG5ldyBlKHQsbix0aGlzLmVuZExpbmVOdW1iZXIsdGhpcy5lbmRDb2x1bW4pfWNvbGxhcHNlVG9TdGFydCgpe3JldHVybiBlLmNvbGxhcHNlVG9TdGFydCh0aGlzKX1zdGF0aWMgY29sbGFwc2VUb1N0YXJ0KHQpe3JldHVybiBuZXcgZSh0LnN0YXJ0TGluZU51bWJlcix0LnN0YXJ0Q29sdW1uLHQuc3RhcnRMaW5lTnVtYmVyLHQuc3RhcnRDb2x1bW4pfXN0YXRpYyBmcm9tUG9zaXRpb25zKHQsbj10KXtyZXR1cm4gbmV3IGUodC5saW5lTnVtYmVyLHQuY29sdW1uLG4ubGluZU51bWJlcixuLmNvbHVtbil9c3RhdGljIGxpZnQodCl7cmV0dXJuIHQ/bmV3IGUodC5zdGFydExpbmVOdW1iZXIsdC5zdGFydENvbHVtbix0LmVuZExpbmVOdW1iZXIsdC5lbmRDb2x1bW4pOm51bGx9c3RhdGljIGlzSVJhbmdlKGUpe3JldHVybiBlJiYibnVtYmVyIj09dHlwZW9mIGUuc3RhcnRMaW5lTnVtYmVyJiYibnVtYmVyIj09dHlwZW9mIGUuc3RhcnRDb2x1bW4mJiJudW1iZXIiPT10eXBlb2YgZS5lbmRMaW5lTnVtYmVyJiYibnVtYmVyIj09dHlwZW9mIGUuZW5kQ29sdW1ufXN0YXRpYyBhcmVJbnRlcnNlY3RpbmdPclRvdWNoaW5nKGUsdCl7cmV0dXJuIShlLmVuZExpbmVOdW1iZXI8dC5zdGFydExpbmVOdW1iZXJ8fGUuZW5kTGluZU51bWJlcj09PXQuc3RhcnRMaW5lTnVtYmVyJiZlLmVuZENvbHVtbjx0LnN0YXJ0Q29sdW1uKSYmISh0LmVuZExpbmVOdW1iZXI8ZS5zdGFydExpbmVOdW1iZXJ8fHQuZW5kTGluZU51bWJlcj09PWUuc3RhcnRMaW5lTnVtYmVyJiZ0LmVuZENvbHVtbjxlLnN0YXJ0Q29sdW1uKX1zdGF0aWMgYXJlSW50ZXJzZWN0aW5nKGUsdCl7cmV0dXJuIShlLmVuZExpbmVOdW1iZXI8dC5zdGFydExpbmVOdW1iZXJ8fGUuZW5kTGluZU51bWJlcj09PXQuc3RhcnRMaW5lTnVtYmVyJiZlLmVuZENvbHVtbjw9dC5zdGFydENvbHVtbikmJiEodC5lbmRMaW5lTnVtYmVyPGUuc3RhcnRMaW5lTnVtYmVyfHx0LmVuZExpbmVOdW1iZXI9PT1lLnN0YXJ0TGluZU51bWJlciYmdC5lbmRDb2x1bW48PWUuc3RhcnRDb2x1bW4pfXN0YXRpYyBjb21wYXJlUmFuZ2VzVXNpbmdTdGFydHMoZSx0KXtpZihlJiZ0KXtjb25zdCBuPTB8ZS5zdGFydExpbmVOdW1iZXIscj0wfHQuc3RhcnRMaW5lTnVtYmVyO2lmKG49PT1yKXtjb25zdCBuPTB8ZS5zdGFydENvbHVtbixyPTB8dC5zdGFydENvbHVtbjtpZihuPT09cil7Y29uc3Qgbj0wfGUuZW5kTGluZU51bWJlcixyPTB8dC5lbmRMaW5lTnVtYmVyO2lmKG49PT1yKXtyZXR1cm4oMHxlLmVuZENvbHVtbiktKDB8dC5lbmRDb2x1bW4pfXJldHVybiBuLXJ9cmV0dXJuIG4tcn1yZXR1cm4gbi1yfXJldHVybihlPzE6MCktKHQ/MTowKX1zdGF0aWMgY29tcGFyZVJhbmdlc1VzaW5nRW5kcyhlLHQpe3JldHVybiBlLmVuZExpbmVOdW1iZXI9PT10LmVuZExpbmVOdW1iZXI/ZS5lbmRDb2x1bW49PT10LmVuZENvbHVtbj9lLnN0YXJ0TGluZU51bWJlcj09PXQuc3RhcnRMaW5lTnVtYmVyP2Uuc3RhcnRDb2x1bW4tdC5zdGFydENvbHVtbjplLnN0YXJ0TGluZU51bWJlci10LnN0YXJ0TGluZU51bWJlcjplLmVuZENvbHVtbi10LmVuZENvbHVtbjplLmVuZExpbmVOdW1iZXItdC5lbmRMaW5lTnVtYmVyfXN0YXRpYyBzcGFuc011bHRpcGxlTGluZXMoZSl7cmV0dXJuIGUuZW5kTGluZU51bWJlcj5lLnN0YXJ0TGluZU51bWJlcn10b0pTT04oKXtyZXR1cm4gdGhpc319O2Z1bmN0aW9uIG50KGUsdCxuLHIpe3JldHVybiBuZXcgdmUoZSx0LG4pLkNvbXB1dGVEaWZmKHIpfWNsYXNzIHJ0e2NvbnN0cnVjdG9yKGUpe2NvbnN0IHQ9W10sbj1bXTtmb3IobGV0IHI9MCxpPWUubGVuZ3RoO3I8aTtyKyspdFtyXT1jdChlW3JdLDEpLG5bcl09bHQoZVtyXSwxKTt0aGlzLmxpbmVzPWUsdGhpcy5fc3RhcnRDb2x1bW5zPXQsdGhpcy5fZW5kQ29sdW1ucz1ufWdldEVsZW1lbnRzKCl7Y29uc3QgZT1bXTtmb3IobGV0IHQ9MCxuPXRoaXMubGluZXMubGVuZ3RoO3Q8bjt0KyspZVt0XT10aGlzLmxpbmVzW3RdLnN1YnN0cmluZyh0aGlzLl9zdGFydENvbHVtbnNbdF0tMSx0aGlzLl9lbmRDb2x1bW5zW3RdLTEpO3JldHVybiBlfWdldFN0cmljdEVsZW1lbnQoZSl7cmV0dXJuIHRoaXMubGluZXNbZV19Z2V0U3RhcnRMaW5lTnVtYmVyKGUpe3JldHVybiBlKzF9Z2V0RW5kTGluZU51bWJlcihlKXtyZXR1cm4gZSsxfWNyZWF0ZUNoYXJTZXF1ZW5jZShlLHQsbil7Y29uc3Qgcj1bXSxpPVtdLG89W107bGV0IGE9MDtmb3IobGV0IHM9dDtzPD1uO3MrKyl7Y29uc3QgdD10aGlzLmxpbmVzW3NdLGM9ZT90aGlzLl9zdGFydENvbHVtbnNbc106MSxsPWU/dGhpcy5fZW5kQ29sdW1uc1tzXTp0Lmxlbmd0aCsxO2ZvcihsZXQgZT1jO2U8bDtlKyspclthXT10LmNoYXJDb2RlQXQoZS0xKSxpW2FdPXMrMSxvW2FdPWUsYSsrOyFlJiZzPG4mJihyW2FdPTEwLGlbYV09cysxLG9bYV09dC5sZW5ndGgrMSxhKyspfXJldHVybiBuZXcgaXQocixpLG8pfX1jbGFzcyBpdHtjb25zdHJ1Y3RvcihlLHQsbil7dGhpcy5fY2hhckNvZGVzPWUsdGhpcy5fbGluZU51bWJlcnM9dCx0aGlzLl9jb2x1bW5zPW59dG9TdHJpbmcoKXtyZXR1cm4iWyIrdGhpcy5fY2hhckNvZGVzLm1hcCgoKGUsdCk9PigxMD09PWU/IlxcbiI6U3RyaW5nLmZyb21DaGFyQ29kZShlKSkrYC0oJHt0aGlzLl9saW5lTnVtYmVyc1t0XX0sJHt0aGlzLl9jb2x1bW5zW3RdfSlgKSkuam9pbigiLCAiKSsiXSJ9X2Fzc2VydEluZGV4KGUsdCl7aWYoZTwwfHxlPj10Lmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoIklsbGVnYWwgaW5kZXgiKX1nZXRFbGVtZW50cygpe3JldHVybiB0aGlzLl9jaGFyQ29kZXN9Z2V0U3RhcnRMaW5lTnVtYmVyKGUpe3JldHVybiBlPjAmJmU9PT10aGlzLl9saW5lTnVtYmVycy5sZW5ndGg/dGhpcy5nZXRFbmRMaW5lTnVtYmVyKGUtMSk6KHRoaXMuX2Fzc2VydEluZGV4KGUsdGhpcy5fbGluZU51bWJlcnMpLHRoaXMuX2xpbmVOdW1iZXJzW2VdKX1nZXRFbmRMaW5lTnVtYmVyKGUpe3JldHVybi0xPT09ZT90aGlzLmdldFN0YXJ0TGluZU51bWJlcihlKzEpOih0aGlzLl9hc3NlcnRJbmRleChlLHRoaXMuX2xpbmVOdW1iZXJzKSwxMD09PXRoaXMuX2NoYXJDb2Rlc1tlXT90aGlzLl9saW5lTnVtYmVyc1tlXSsxOnRoaXMuX2xpbmVOdW1iZXJzW2VdKX1nZXRTdGFydENvbHVtbihlKXtyZXR1cm4gZT4wJiZlPT09dGhpcy5fY29sdW1ucy5sZW5ndGg/dGhpcy5nZXRFbmRDb2x1bW4oZS0xKToodGhpcy5fYXNzZXJ0SW5kZXgoZSx0aGlzLl9jb2x1bW5zKSx0aGlzLl9jb2x1bW5zW2VdKX1nZXRFbmRDb2x1bW4oZSl7cmV0dXJuLTE9PT1lP3RoaXMuZ2V0U3RhcnRDb2x1bW4oZSsxKToodGhpcy5fYXNzZXJ0SW5kZXgoZSx0aGlzLl9jb2x1bW5zKSwxMD09PXRoaXMuX2NoYXJDb2Rlc1tlXT8xOnRoaXMuX2NvbHVtbnNbZV0rMSl9fWNsYXNzIG90e2NvbnN0cnVjdG9yKGUsdCxuLHIsaSxvLGEscyl7dGhpcy5vcmlnaW5hbFN0YXJ0TGluZU51bWJlcj1lLHRoaXMub3JpZ2luYWxTdGFydENvbHVtbj10LHRoaXMub3JpZ2luYWxFbmRMaW5lTnVtYmVyPW4sdGhpcy5vcmlnaW5hbEVuZENvbHVtbj1yLHRoaXMubW9kaWZpZWRTdGFydExpbmVOdW1iZXI9aSx0aGlzLm1vZGlmaWVkU3RhcnRDb2x1bW49byx0aGlzLm1vZGlmaWVkRW5kTGluZU51bWJlcj1hLHRoaXMubW9kaWZpZWRFbmRDb2x1bW49c31zdGF0aWMgY3JlYXRlRnJvbURpZmZDaGFuZ2UoZSx0LG4pe2NvbnN0IHI9dC5nZXRTdGFydExpbmVOdW1iZXIoZS5vcmlnaW5hbFN0YXJ0KSxpPXQuZ2V0U3RhcnRDb2x1bW4oZS5vcmlnaW5hbFN0YXJ0KSxvPXQuZ2V0RW5kTGluZU51bWJlcihlLm9yaWdpbmFsU3RhcnQrZS5vcmlnaW5hbExlbmd0aC0xKSxhPXQuZ2V0RW5kQ29sdW1uKGUub3JpZ2luYWxTdGFydCtlLm9yaWdpbmFsTGVuZ3RoLTEpLHM9bi5nZXRTdGFydExpbmVOdW1iZXIoZS5tb2RpZmllZFN0YXJ0KSxjPW4uZ2V0U3RhcnRDb2x1bW4oZS5tb2RpZmllZFN0YXJ0KSxsPW4uZ2V0RW5kTGluZU51bWJlcihlLm1vZGlmaWVkU3RhcnQrZS5tb2RpZmllZExlbmd0aC0xKSx1PW4uZ2V0RW5kQ29sdW1uKGUubW9kaWZpZWRTdGFydCtlLm1vZGlmaWVkTGVuZ3RoLTEpO3JldHVybiBuZXcgb3QocixpLG8sYSxzLGMsbCx1KX19Y2xhc3MgYXR7Y29uc3RydWN0b3IoZSx0LG4scixpKXt0aGlzLm9yaWdpbmFsU3RhcnRMaW5lTnVtYmVyPWUsdGhpcy5vcmlnaW5hbEVuZExpbmVOdW1iZXI9dCx0aGlzLm1vZGlmaWVkU3RhcnRMaW5lTnVtYmVyPW4sdGhpcy5tb2RpZmllZEVuZExpbmVOdW1iZXI9cix0aGlzLmNoYXJDaGFuZ2VzPWl9c3RhdGljIGNyZWF0ZUZyb21EaWZmUmVzdWx0KGUsdCxuLHIsaSxvLGEpe2xldCBzLGMsbCx1LGg7aWYoMD09PXQub3JpZ2luYWxMZW5ndGg/KHM9bi5nZXRTdGFydExpbmVOdW1iZXIodC5vcmlnaW5hbFN0YXJ0KS0xLGM9MCk6KHM9bi5nZXRTdGFydExpbmVOdW1iZXIodC5vcmlnaW5hbFN0YXJ0KSxjPW4uZ2V0RW5kTGluZU51bWJlcih0Lm9yaWdpbmFsU3RhcnQrdC5vcmlnaW5hbExlbmd0aC0xKSksMD09PXQubW9kaWZpZWRMZW5ndGg/KGw9ci5nZXRTdGFydExpbmVOdW1iZXIodC5tb2RpZmllZFN0YXJ0KS0xLHU9MCk6KGw9ci5nZXRTdGFydExpbmVOdW1iZXIodC5tb2RpZmllZFN0YXJ0KSx1PXIuZ2V0RW5kTGluZU51bWJlcih0Lm1vZGlmaWVkU3RhcnQrdC5tb2RpZmllZExlbmd0aC0xKSksbyYmdC5vcmlnaW5hbExlbmd0aD4wJiZ0Lm9yaWdpbmFsTGVuZ3RoPDIwJiZ0Lm1vZGlmaWVkTGVuZ3RoPjAmJnQubW9kaWZpZWRMZW5ndGg8MjAmJmkoKSl7Y29uc3Qgbz1uLmNyZWF0ZUNoYXJTZXF1ZW5jZShlLHQub3JpZ2luYWxTdGFydCx0Lm9yaWdpbmFsU3RhcnQrdC5vcmlnaW5hbExlbmd0aC0xKSxzPXIuY3JlYXRlQ2hhclNlcXVlbmNlKGUsdC5tb2RpZmllZFN0YXJ0LHQubW9kaWZpZWRTdGFydCt0Lm1vZGlmaWVkTGVuZ3RoLTEpO2lmKG8uZ2V0RWxlbWVudHMoKS5sZW5ndGg+MCYmcy5nZXRFbGVtZW50cygpLmxlbmd0aD4wKXtsZXQgZT1udChvLHMsaSwhMCkuY2hhbmdlczthJiYoZT1mdW5jdGlvbihlKXtpZihlLmxlbmd0aDw9MSlyZXR1cm4gZTtjb25zdCB0PVtlWzBdXTtsZXQgbj10WzBdO2ZvcihsZXQgcj0xLGk9ZS5sZW5ndGg7cjxpO3IrKyl7Y29uc3QgaT1lW3JdLG89aS5vcmlnaW5hbFN0YXJ0LShuLm9yaWdpbmFsU3RhcnQrbi5vcmlnaW5hbExlbmd0aCksYT1pLm1vZGlmaWVkU3RhcnQtKG4ubW9kaWZpZWRTdGFydCtuLm1vZGlmaWVkTGVuZ3RoKTtNYXRoLm1pbihvLGEpPDM/KG4ub3JpZ2luYWxMZW5ndGg9aS5vcmlnaW5hbFN0YXJ0K2kub3JpZ2luYWxMZW5ndGgtbi5vcmlnaW5hbFN0YXJ0LG4ubW9kaWZpZWRMZW5ndGg9aS5tb2RpZmllZFN0YXJ0K2kubW9kaWZpZWRMZW5ndGgtbi5tb2RpZmllZFN0YXJ0KToodC5wdXNoKGkpLG49aSl9cmV0dXJuIHR9KGUpKSxoPVtdO2ZvcihsZXQgdD0wLG49ZS5sZW5ndGg7dDxuO3QrKyloLnB1c2gob3QuY3JlYXRlRnJvbURpZmZDaGFuZ2UoZVt0XSxvLHMpKX19cmV0dXJuIG5ldyBhdChzLGMsbCx1LGgpfX1jbGFzcyBzdHtjb25zdHJ1Y3RvcihlLHQsbil7dGhpcy5zaG91bGRDb21wdXRlQ2hhckNoYW5nZXM9bi5zaG91bGRDb21wdXRlQ2hhckNoYW5nZXMsdGhpcy5zaG91bGRQb3N0UHJvY2Vzc0NoYXJDaGFuZ2VzPW4uc2hvdWxkUG9zdFByb2Nlc3NDaGFyQ2hhbmdlcyx0aGlzLnNob3VsZElnbm9yZVRyaW1XaGl0ZXNwYWNlPW4uc2hvdWxkSWdub3JlVHJpbVdoaXRlc3BhY2UsdGhpcy5zaG91bGRNYWtlUHJldHR5RGlmZj1uLnNob3VsZE1ha2VQcmV0dHlEaWZmLHRoaXMub3JpZ2luYWxMaW5lcz1lLHRoaXMubW9kaWZpZWRMaW5lcz10LHRoaXMub3JpZ2luYWw9bmV3IHJ0KGUpLHRoaXMubW9kaWZpZWQ9bmV3IHJ0KHQpLHRoaXMuY29udGludWVMaW5lRGlmZj11dChuLm1heENvbXB1dGF0aW9uVGltZSksdGhpcy5jb250aW51ZUNoYXJEaWZmPXV0KDA9PT1uLm1heENvbXB1dGF0aW9uVGltZT8wOk1hdGgubWluKG4ubWF4Q29tcHV0YXRpb25UaW1lLDVlMykpfWNvbXB1dGVEaWZmKCl7aWYoMT09PXRoaXMub3JpZ2luYWwubGluZXMubGVuZ3RoJiYwPT09dGhpcy5vcmlnaW5hbC5saW5lc1swXS5sZW5ndGgpcmV0dXJuIDE9PT10aGlzLm1vZGlmaWVkLmxpbmVzLmxlbmd0aCYmMD09PXRoaXMubW9kaWZpZWQubGluZXNbMF0ubGVuZ3RoP3txdWl0RWFybHk6ITEsY2hhbmdlczpbXX06e3F1aXRFYXJseTohMSxjaGFuZ2VzOlt7b3JpZ2luYWxTdGFydExpbmVOdW1iZXI6MSxvcmlnaW5hbEVuZExpbmVOdW1iZXI6MSxtb2RpZmllZFN0YXJ0TGluZU51bWJlcjoxLG1vZGlmaWVkRW5kTGluZU51bWJlcjp0aGlzLm1vZGlmaWVkLmxpbmVzLmxlbmd0aCxjaGFyQ2hhbmdlczpbe21vZGlmaWVkRW5kQ29sdW1uOjAsbW9kaWZpZWRFbmRMaW5lTnVtYmVyOjAsbW9kaWZpZWRTdGFydENvbHVtbjowLG1vZGlmaWVkU3RhcnRMaW5lTnVtYmVyOjAsb3JpZ2luYWxFbmRDb2x1bW46MCxvcmlnaW5hbEVuZExpbmVOdW1iZXI6MCxvcmlnaW5hbFN0YXJ0Q29sdW1uOjAsb3JpZ2luYWxTdGFydExpbmVOdW1iZXI6MH1dfV19O2lmKDE9PT10aGlzLm1vZGlmaWVkLmxpbmVzLmxlbmd0aCYmMD09PXRoaXMubW9kaWZpZWQubGluZXNbMF0ubGVuZ3RoKXJldHVybntxdWl0RWFybHk6ITEsY2hhbmdlczpbe29yaWdpbmFsU3RhcnRMaW5lTnVtYmVyOjEsb3JpZ2luYWxFbmRMaW5lTnVtYmVyOnRoaXMub3JpZ2luYWwubGluZXMubGVuZ3RoLG1vZGlmaWVkU3RhcnRMaW5lTnVtYmVyOjEsbW9kaWZpZWRFbmRMaW5lTnVtYmVyOjEsY2hhckNoYW5nZXM6W3ttb2RpZmllZEVuZENvbHVtbjowLG1vZGlmaWVkRW5kTGluZU51bWJlcjowLG1vZGlmaWVkU3RhcnRDb2x1bW46MCxtb2RpZmllZFN0YXJ0TGluZU51bWJlcjowLG9yaWdpbmFsRW5kQ29sdW1uOjAsb3JpZ2luYWxFbmRMaW5lTnVtYmVyOjAsb3JpZ2luYWxTdGFydENvbHVtbjowLG9yaWdpbmFsU3RhcnRMaW5lTnVtYmVyOjB9XX1dfTtjb25zdCBlPW50KHRoaXMub3JpZ2luYWwsdGhpcy5tb2RpZmllZCx0aGlzLmNvbnRpbnVlTGluZURpZmYsdGhpcy5zaG91bGRNYWtlUHJldHR5RGlmZiksdD1lLmNoYW5nZXMsbj1lLnF1aXRFYXJseTtpZih0aGlzLnNob3VsZElnbm9yZVRyaW1XaGl0ZXNwYWNlKXtjb25zdCBlPVtdO2ZvcihsZXQgbj0wLHI9dC5sZW5ndGg7bjxyO24rKyllLnB1c2goYXQuY3JlYXRlRnJvbURpZmZSZXN1bHQodGhpcy5zaG91bGRJZ25vcmVUcmltV2hpdGVzcGFjZSx0W25dLHRoaXMub3JpZ2luYWwsdGhpcy5tb2RpZmllZCx0aGlzLmNvbnRpbnVlQ2hhckRpZmYsdGhpcy5zaG91bGRDb21wdXRlQ2hhckNoYW5nZXMsdGhpcy5zaG91bGRQb3N0UHJvY2Vzc0NoYXJDaGFuZ2VzKSk7cmV0dXJue3F1aXRFYXJseTpuLGNoYW5nZXM6ZX19Y29uc3Qgcj1bXTtsZXQgaT0wLG89MDtmb3IobGV0IGU9LTEsbj10Lmxlbmd0aDtlPG47ZSsrKXtjb25zdCBhPWUrMTxuP3RbZSsxXTpudWxsLHM9YT9hLm9yaWdpbmFsU3RhcnQ6dGhpcy5vcmlnaW5hbExpbmVzLmxlbmd0aCxjPWE/YS5tb2RpZmllZFN0YXJ0OnRoaXMubW9kaWZpZWRMaW5lcy5sZW5ndGg7Zm9yKDtpPHMmJm88Yzspe2NvbnN0IGU9dGhpcy5vcmlnaW5hbExpbmVzW2ldLHQ9dGhpcy5tb2RpZmllZExpbmVzW29dO2lmKGUhPT10KXt7bGV0IG49Y3QoZSwxKSxhPWN0KHQsMSk7Zm9yKDtuPjEmJmE+MTspe2lmKGUuY2hhckNvZGVBdChuLTIpIT09dC5jaGFyQ29kZUF0KGEtMikpYnJlYWs7bi0tLGEtLX0obj4xfHxhPjEpJiZ0aGlzLl9wdXNoVHJpbVdoaXRlc3BhY2VDaGFyQ2hhbmdlKHIsaSsxLDEsbixvKzEsMSxhKX17bGV0IG49bHQoZSwxKSxhPWx0KHQsMSk7Y29uc3Qgcz1lLmxlbmd0aCsxLGM9dC5sZW5ndGgrMTtmb3IoO248cyYmYTxjOyl7aWYoZS5jaGFyQ29kZUF0KG4tMSkhPT1lLmNoYXJDb2RlQXQoYS0xKSlicmVhaztuKyssYSsrfShuPHN8fGE8YykmJnRoaXMuX3B1c2hUcmltV2hpdGVzcGFjZUNoYXJDaGFuZ2UocixpKzEsbixzLG8rMSxhLGMpfX1pKyssbysrfWEmJihyLnB1c2goYXQuY3JlYXRlRnJvbURpZmZSZXN1bHQodGhpcy5zaG91bGRJZ25vcmVUcmltV2hpdGVzcGFjZSxhLHRoaXMub3JpZ2luYWwsdGhpcy5tb2RpZmllZCx0aGlzLmNvbnRpbnVlQ2hhckRpZmYsdGhpcy5zaG91bGRDb21wdXRlQ2hhckNoYW5nZXMsdGhpcy5zaG91bGRQb3N0UHJvY2Vzc0NoYXJDaGFuZ2VzKSksaSs9YS5vcmlnaW5hbExlbmd0aCxvKz1hLm1vZGlmaWVkTGVuZ3RoKX1yZXR1cm57cXVpdEVhcmx5Om4sY2hhbmdlczpyfX1fcHVzaFRyaW1XaGl0ZXNwYWNlQ2hhckNoYW5nZShlLHQsbixyLGksbyxhKXtpZih0aGlzLl9tZXJnZVRyaW1XaGl0ZXNwYWNlQ2hhckNoYW5nZShlLHQsbixyLGksbyxhKSlyZXR1cm47bGV0IHM7dGhpcy5zaG91bGRDb21wdXRlQ2hhckNoYW5nZXMmJihzPVtuZXcgb3QodCxuLHQscixpLG8saSxhKV0pLGUucHVzaChuZXcgYXQodCx0LGksaSxzKSl9X21lcmdlVHJpbVdoaXRlc3BhY2VDaGFyQ2hhbmdlKGUsdCxuLHIsaSxvLGEpe2NvbnN0IHM9ZS5sZW5ndGg7aWYoMD09PXMpcmV0dXJuITE7Y29uc3QgYz1lW3MtMV07cmV0dXJuIDAhPT1jLm9yaWdpbmFsRW5kTGluZU51bWJlciYmMCE9PWMubW9kaWZpZWRFbmRMaW5lTnVtYmVyJiYoYy5vcmlnaW5hbEVuZExpbmVOdW1iZXIrMT09PXQmJmMubW9kaWZpZWRFbmRMaW5lTnVtYmVyKzE9PT1pJiYoYy5vcmlnaW5hbEVuZExpbmVOdW1iZXI9dCxjLm1vZGlmaWVkRW5kTGluZU51bWJlcj1pLHRoaXMuc2hvdWxkQ29tcHV0ZUNoYXJDaGFuZ2VzJiZjLmNoYXJDaGFuZ2VzJiZjLmNoYXJDaGFuZ2VzLnB1c2gobmV3IG90KHQsbix0LHIsaSxvLGksYSkpLCEwKSl9fWZ1bmN0aW9uIGN0KGUsdCl7Y29uc3Qgbj1mdW5jdGlvbihlKXtmb3IobGV0IHQ9MCxuPWUubGVuZ3RoO3Q8bjt0Kyspe2NvbnN0IG49ZS5jaGFyQ29kZUF0KHQpO2lmKDMyIT09biYmOSE9PW4pcmV0dXJuIHR9cmV0dXJuLTF9KGUpO3JldHVybi0xPT09bj90Om4rMX1mdW5jdGlvbiBsdChlLHQpe2NvbnN0IG49ZnVuY3Rpb24oZSx0PWUubGVuZ3RoLTEpe2ZvcihsZXQgbj10O24+PTA7bi0tKXtjb25zdCB0PWUuY2hhckNvZGVBdChuKTtpZigzMiE9PXQmJjkhPT10KXJldHVybiBufXJldHVybi0xfShlKTtyZXR1cm4tMT09PW4/dDpuKzJ9ZnVuY3Rpb24gdXQoZSl7aWYoMD09PWUpcmV0dXJuKCk9PiEwO2NvbnN0IHQ9RGF0ZS5ub3coKTtyZXR1cm4oKT0+RGF0ZS5ub3coKS10PGV9dmFyIGh0O2Z1bmN0aW9uIGZ0KGUpe3JldHVybiBlPDA/MDplPjI1NT8yNTU6MHxlfWZ1bmN0aW9uIGR0KGUpe3JldHVybiBlPDA/MDplPjQyOTQ5NjcyOTU/NDI5NDk2NzI5NTowfGV9IWZ1bmN0aW9uKGUpe2UuaXNMZXNzVGhhbj1mdW5jdGlvbihlKXtyZXR1cm4gZTwwfSxlLmlzR3JlYXRlclRoYW49ZnVuY3Rpb24oZSl7cmV0dXJuIGU+MH0sZS5pc05laXRoZXJMZXNzT3JHcmVhdGVyVGhhbj1mdW5jdGlvbihlKXtyZXR1cm4gMD09PWV9LGUuZ3JlYXRlclRoYW49MSxlLmxlc3NUaGFuPS0xLGUubmVpdGhlckxlc3NPckdyZWF0ZXJUaGFuPTB9KGh0fHwoaHQ9e30pKTtjbGFzcyBtdHtjb25zdHJ1Y3RvcihlKXt0aGlzLnZhbHVlcz1lLHRoaXMucHJlZml4U3VtPW5ldyBVaW50MzJBcnJheShlLmxlbmd0aCksdGhpcy5wcmVmaXhTdW1WYWxpZEluZGV4PW5ldyBJbnQzMkFycmF5KDEpLHRoaXMucHJlZml4U3VtVmFsaWRJbmRleFswXT0tMX1pbnNlcnRWYWx1ZXMoZSx0KXtlPWR0KGUpO2NvbnN0IG49dGhpcy52YWx1ZXMscj10aGlzLnByZWZpeFN1bSxpPXQubGVuZ3RoO3JldHVybiAwIT09aSYmKHRoaXMudmFsdWVzPW5ldyBVaW50MzJBcnJheShuLmxlbmd0aCtpKSx0aGlzLnZhbHVlcy5zZXQobi5zdWJhcnJheSgwLGUpLDApLHRoaXMudmFsdWVzLnNldChuLnN1YmFycmF5KGUpLGUraSksdGhpcy52YWx1ZXMuc2V0KHQsZSksZS0xPHRoaXMucHJlZml4U3VtVmFsaWRJbmRleFswXSYmKHRoaXMucHJlZml4U3VtVmFsaWRJbmRleFswXT1lLTEpLHRoaXMucHJlZml4U3VtPW5ldyBVaW50MzJBcnJheSh0aGlzLnZhbHVlcy5sZW5ndGgpLHRoaXMucHJlZml4U3VtVmFsaWRJbmRleFswXT49MCYmdGhpcy5wcmVmaXhTdW0uc2V0KHIuc3ViYXJyYXkoMCx0aGlzLnByZWZpeFN1bVZhbGlkSW5kZXhbMF0rMSkpLCEwKX1zZXRWYWx1ZShlLHQpe3JldHVybiBlPWR0KGUpLHQ9ZHQodCksdGhpcy52YWx1ZXNbZV0hPT10JiYodGhpcy52YWx1ZXNbZV09dCxlLTE8dGhpcy5wcmVmaXhTdW1WYWxpZEluZGV4WzBdJiYodGhpcy5wcmVmaXhTdW1WYWxpZEluZGV4WzBdPWUtMSksITApfXJlbW92ZVZhbHVlcyhlLHQpe2U9ZHQoZSksdD1kdCh0KTtjb25zdCBuPXRoaXMudmFsdWVzLHI9dGhpcy5wcmVmaXhTdW07aWYoZT49bi5sZW5ndGgpcmV0dXJuITE7Y29uc3QgaT1uLmxlbmd0aC1lO3JldHVybiB0Pj1pJiYodD1pKSwwIT09dCYmKHRoaXMudmFsdWVzPW5ldyBVaW50MzJBcnJheShuLmxlbmd0aC10KSx0aGlzLnZhbHVlcy5zZXQobi5zdWJhcnJheSgwLGUpLDApLHRoaXMudmFsdWVzLnNldChuLnN1YmFycmF5KGUrdCksZSksdGhpcy5wcmVmaXhTdW09bmV3IFVpbnQzMkFycmF5KHRoaXMudmFsdWVzLmxlbmd0aCksZS0xPHRoaXMucHJlZml4U3VtVmFsaWRJbmRleFswXSYmKHRoaXMucHJlZml4U3VtVmFsaWRJbmRleFswXT1lLTEpLHRoaXMucHJlZml4U3VtVmFsaWRJbmRleFswXT49MCYmdGhpcy5wcmVmaXhTdW0uc2V0KHIuc3ViYXJyYXkoMCx0aGlzLnByZWZpeFN1bVZhbGlkSW5kZXhbMF0rMSkpLCEwKX1nZXRUb3RhbFN1bSgpe3JldHVybiAwPT09dGhpcy52YWx1ZXMubGVuZ3RoPzA6dGhpcy5fZ2V0UHJlZml4U3VtKHRoaXMudmFsdWVzLmxlbmd0aC0xKX1nZXRQcmVmaXhTdW0oZSl7cmV0dXJuIGU8MD8wOihlPWR0KGUpLHRoaXMuX2dldFByZWZpeFN1bShlKSl9X2dldFByZWZpeFN1bShlKXtpZihlPD10aGlzLnByZWZpeFN1bVZhbGlkSW5kZXhbMF0pcmV0dXJuIHRoaXMucHJlZml4U3VtW2VdO2xldCB0PXRoaXMucHJlZml4U3VtVmFsaWRJbmRleFswXSsxOzA9PT10JiYodGhpcy5wcmVmaXhTdW1bMF09dGhpcy52YWx1ZXNbMF0sdCsrKSxlPj10aGlzLnZhbHVlcy5sZW5ndGgmJihlPXRoaXMudmFsdWVzLmxlbmd0aC0xKTtmb3IobGV0IG49dDtuPD1lO24rKyl0aGlzLnByZWZpeFN1bVtuXT10aGlzLnByZWZpeFN1bVtuLTFdK3RoaXMudmFsdWVzW25dO3JldHVybiB0aGlzLnByZWZpeFN1bVZhbGlkSW5kZXhbMF09TWF0aC5tYXgodGhpcy5wcmVmaXhTdW1WYWxpZEluZGV4WzBdLGUpLHRoaXMucHJlZml4U3VtW2VdfWdldEluZGV4T2YoZSl7ZT1NYXRoLmZsb29yKGUpLHRoaXMuZ2V0VG90YWxTdW0oKTtsZXQgdD0wLG49dGhpcy52YWx1ZXMubGVuZ3RoLTEscj0wLGk9MCxvPTA7Zm9yKDt0PD1uOylpZihyPXQrKG4tdCkvMnwwLGk9dGhpcy5wcmVmaXhTdW1bcl0sbz1pLXRoaXMudmFsdWVzW3JdLGU8byluPXItMTtlbHNle2lmKCEoZT49aSkpYnJlYWs7dD1yKzF9cmV0dXJuIG5ldyBndChyLGUtbyl9fWNsYXNzIGd0e2NvbnN0cnVjdG9yKGUsdCl7dGhpcy5pbmRleD1lLHRoaXMucmVtYWluZGVyPXQsdGhpcy5fcHJlZml4U3VtSW5kZXhPZlJlc3VsdEJyYW5kPXZvaWQgMCx0aGlzLmluZGV4PWUsdGhpcy5yZW1haW5kZXI9dH19Y2xhc3MgcHR7Y29uc3RydWN0b3IoZSx0LG4scil7dGhpcy5fdXJpPWUsdGhpcy5fbGluZXM9dCx0aGlzLl9lb2w9bix0aGlzLl92ZXJzaW9uSWQ9cix0aGlzLl9saW5lU3RhcnRzPW51bGwsdGhpcy5fY2FjaGVkVGV4dFZhbHVlPW51bGx9ZGlzcG9zZSgpe3RoaXMuX2xpbmVzLmxlbmd0aD0wfWdldCB2ZXJzaW9uKCl7cmV0dXJuIHRoaXMuX3ZlcnNpb25JZH1nZXRUZXh0KCl7cmV0dXJuIG51bGw9PT10aGlzLl9jYWNoZWRUZXh0VmFsdWUmJih0aGlzLl9jYWNoZWRUZXh0VmFsdWU9dGhpcy5fbGluZXMuam9pbih0aGlzLl9lb2wpKSx0aGlzLl9jYWNoZWRUZXh0VmFsdWV9b25FdmVudHMoZSl7ZS5lb2wmJmUuZW9sIT09dGhpcy5fZW9sJiYodGhpcy5fZW9sPWUuZW9sLHRoaXMuX2xpbmVTdGFydHM9bnVsbCk7Y29uc3QgdD1lLmNoYW5nZXM7Zm9yKGNvbnN0IGUgb2YgdCl0aGlzLl9hY2NlcHREZWxldGVSYW5nZShlLnJhbmdlKSx0aGlzLl9hY2NlcHRJbnNlcnRUZXh0KG5ldyBldChlLnJhbmdlLnN0YXJ0TGluZU51bWJlcixlLnJhbmdlLnN0YXJ0Q29sdW1uKSxlLnRleHQpO3RoaXMuX3ZlcnNpb25JZD1lLnZlcnNpb25JZCx0aGlzLl9jYWNoZWRUZXh0VmFsdWU9bnVsbH1fZW5zdXJlTGluZVN0YXJ0cygpe2lmKCF0aGlzLl9saW5lU3RhcnRzKXtjb25zdCBlPXRoaXMuX2VvbC5sZW5ndGgsdD10aGlzLl9saW5lcy5sZW5ndGgsbj1uZXcgVWludDMyQXJyYXkodCk7Zm9yKGxldCByPTA7cjx0O3IrKyluW3JdPXRoaXMuX2xpbmVzW3JdLmxlbmd0aCtlO3RoaXMuX2xpbmVTdGFydHM9bmV3IG10KG4pfX1fc2V0TGluZVRleHQoZSx0KXt0aGlzLl9saW5lc1tlXT10LHRoaXMuX2xpbmVTdGFydHMmJnRoaXMuX2xpbmVTdGFydHMuc2V0VmFsdWUoZSx0aGlzLl9saW5lc1tlXS5sZW5ndGgrdGhpcy5fZW9sLmxlbmd0aCl9X2FjY2VwdERlbGV0ZVJhbmdlKGUpe2lmKGUuc3RhcnRMaW5lTnVtYmVyIT09ZS5lbmRMaW5lTnVtYmVyKXRoaXMuX3NldExpbmVUZXh0KGUuc3RhcnRMaW5lTnVtYmVyLTEsdGhpcy5fbGluZXNbZS5zdGFydExpbmVOdW1iZXItMV0uc3Vic3RyaW5nKDAsZS5zdGFydENvbHVtbi0xKSt0aGlzLl9saW5lc1tlLmVuZExpbmVOdW1iZXItMV0uc3Vic3RyaW5nKGUuZW5kQ29sdW1uLTEpKSx0aGlzLl9saW5lcy5zcGxpY2UoZS5zdGFydExpbmVOdW1iZXIsZS5lbmRMaW5lTnVtYmVyLWUuc3RhcnRMaW5lTnVtYmVyKSx0aGlzLl9saW5lU3RhcnRzJiZ0aGlzLl9saW5lU3RhcnRzLnJlbW92ZVZhbHVlcyhlLnN0YXJ0TGluZU51bWJlcixlLmVuZExpbmVOdW1iZXItZS5zdGFydExpbmVOdW1iZXIpO2Vsc2V7aWYoZS5zdGFydENvbHVtbj09PWUuZW5kQ29sdW1uKXJldHVybjt0aGlzLl9zZXRMaW5lVGV4dChlLnN0YXJ0TGluZU51bWJlci0xLHRoaXMuX2xpbmVzW2Uuc3RhcnRMaW5lTnVtYmVyLTFdLnN1YnN0cmluZygwLGUuc3RhcnRDb2x1bW4tMSkrdGhpcy5fbGluZXNbZS5zdGFydExpbmVOdW1iZXItMV0uc3Vic3RyaW5nKGUuZW5kQ29sdW1uLTEpKX19X2FjY2VwdEluc2VydFRleHQoZSx0KXtpZigwPT09dC5sZW5ndGgpcmV0dXJuO2NvbnN0IG49dC5zcGxpdCgvXHJcbnxccnxcbi8pO2lmKDE9PT1uLmxlbmd0aClyZXR1cm4gdm9pZCB0aGlzLl9zZXRMaW5lVGV4dChlLmxpbmVOdW1iZXItMSx0aGlzLl9saW5lc1tlLmxpbmVOdW1iZXItMV0uc3Vic3RyaW5nKDAsZS5jb2x1bW4tMSkrblswXSt0aGlzLl9saW5lc1tlLmxpbmVOdW1iZXItMV0uc3Vic3RyaW5nKGUuY29sdW1uLTEpKTtuW24ubGVuZ3RoLTFdKz10aGlzLl9saW5lc1tlLmxpbmVOdW1iZXItMV0uc3Vic3RyaW5nKGUuY29sdW1uLTEpLHRoaXMuX3NldExpbmVUZXh0KGUubGluZU51bWJlci0xLHRoaXMuX2xpbmVzW2UubGluZU51bWJlci0xXS5zdWJzdHJpbmcoMCxlLmNvbHVtbi0xKStuWzBdKTtjb25zdCByPW5ldyBVaW50MzJBcnJheShuLmxlbmd0aC0xKTtmb3IobGV0IHQ9MTt0PG4ubGVuZ3RoO3QrKyl0aGlzLl9saW5lcy5zcGxpY2UoZS5saW5lTnVtYmVyK3QtMSwwLG5bdF0pLHJbdC0xXT1uW3RdLmxlbmd0aCt0aGlzLl9lb2wubGVuZ3RoO3RoaXMuX2xpbmVTdGFydHMmJnRoaXMuX2xpbmVTdGFydHMuaW5zZXJ0VmFsdWVzKGUubGluZU51bWJlcixyKX19Y29uc3QgYnQ9ZnVuY3Rpb24oZT0iIil7bGV0IHQ9IigtP1xcZCpcXC5cXGRcXHcqKXwoW14iO2Zvcihjb25zdCBuIG9mImB+IUAjJCVeJiooKS09K1t7XX1cXHw7OidcIiwuPD4vPyIpZS5pbmRleE9mKG4pPj0wfHwodCs9IlxcIituKTtyZXR1cm4gdCs9Ilxcc10rKSIsbmV3IFJlZ0V4cCh0LCJnIil9KCk7Y29uc3QgdnQ9bmV3IGc7ZnVuY3Rpb24geXQoZSx0LG4scixpKXtpZihpfHwoaT1zLmZpcnN0KHZ0KSksbi5sZW5ndGg+aS5tYXhMZW4pe2xldCBvPWUtaS5tYXhMZW4vMjtyZXR1cm4gbzwwP289MDpyKz1vLHl0KGUsdCxuPW4uc3Vic3RyaW5nKG8sZStpLm1heExlbi8yKSxyLGkpfWNvbnN0IG89RGF0ZS5ub3coKSxhPWUtMS1yO2xldCBjPS0xLGw9bnVsbDtmb3IobGV0IGU9MTshKERhdGUubm93KCktbz49aS50aW1lQnVkZ2V0KTtlKyspe2NvbnN0IHI9YS1pLndpbmRvd1NpemUqZTt0Lmxhc3RJbmRleD1NYXRoLm1heCgwLHIpO2NvbnN0IG89Q3QodCxuLGEsYyk7aWYoIW8mJmwpYnJlYWs7aWYobD1vLHI8PTApYnJlYWs7Yz1yfWlmKGwpe2NvbnN0IGU9e3dvcmQ6bFswXSxzdGFydENvbHVtbjpyKzErbC5pbmRleCxlbmRDb2x1bW46cisxK2wuaW5kZXgrbFswXS5sZW5ndGh9O3JldHVybiB0Lmxhc3RJbmRleD0wLGV9cmV0dXJuIG51bGx9ZnVuY3Rpb24gQ3QoZSx0LG4scil7bGV0IGk7Zm9yKDtpPWUuZXhlYyh0KTspe2NvbnN0IHQ9aS5pbmRleHx8MDtpZih0PD1uJiZlLmxhc3RJbmRleD49bilyZXR1cm4gaTtpZihyPjAmJnQ+cilyZXR1cm4gbnVsbH1yZXR1cm4gbnVsbH12dC51bnNoaWZ0KHttYXhMZW46MWUzLHdpbmRvd1NpemU6MTUsdGltZUJ1ZGdldDoxNTB9KTtjbGFzcyB3dHtjb25zdHJ1Y3RvcihlKXtjb25zdCB0PWZ0KGUpO3RoaXMuX2RlZmF1bHRWYWx1ZT10LHRoaXMuX2FzY2lpTWFwPXd0Ll9jcmVhdGVBc2NpaU1hcCh0KSx0aGlzLl9tYXA9bmV3IE1hcH1zdGF0aWMgX2NyZWF0ZUFzY2lpTWFwKGUpe2NvbnN0IHQ9bmV3IFVpbnQ4QXJyYXkoMjU2KTtmb3IobGV0IG49MDtuPDI1NjtuKyspdFtuXT1lO3JldHVybiB0fXNldChlLHQpe2NvbnN0IG49ZnQodCk7ZT49MCYmZTwyNTY/dGhpcy5fYXNjaWlNYXBbZV09bjp0aGlzLl9tYXAuc2V0KGUsbil9Z2V0KGUpe3JldHVybiBlPj0wJiZlPDI1Nj90aGlzLl9hc2NpaU1hcFtlXTp0aGlzLl9tYXAuZ2V0KGUpfHx0aGlzLl9kZWZhdWx0VmFsdWV9fWNsYXNzIF90e2NvbnN0cnVjdG9yKGUsdCxuKXtjb25zdCByPW5ldyBVaW50OEFycmF5KGUqdCk7Zm9yKGxldCBpPTAsbz1lKnQ7aTxvO2krKylyW2ldPW47dGhpcy5fZGF0YT1yLHRoaXMucm93cz1lLHRoaXMuY29scz10fWdldChlLHQpe3JldHVybiB0aGlzLl9kYXRhW2UqdGhpcy5jb2xzK3RdfXNldChlLHQsbil7dGhpcy5fZGF0YVtlKnRoaXMuY29scyt0XT1ufX1jbGFzcyBTdHtjb25zdHJ1Y3RvcihlKXtsZXQgdD0wLG49MDtmb3IobGV0IHI9MCxpPWUubGVuZ3RoO3I8aTtyKyspe2NvbnN0W2ksbyxhXT1lW3JdO28+dCYmKHQ9byksaT5uJiYobj1pKSxhPm4mJihuPWEpfXQrKyxuKys7Y29uc3Qgcj1uZXcgX3Qobix0LDApO2ZvcihsZXQgdD0wLG49ZS5sZW5ndGg7dDxuO3QrKyl7Y29uc3RbbixpLG9dPWVbdF07ci5zZXQobixpLG8pfXRoaXMuX3N0YXRlcz1yLHRoaXMuX21heENoYXJDb2RlPXR9bmV4dFN0YXRlKGUsdCl7cmV0dXJuIHQ8MHx8dD49dGhpcy5fbWF4Q2hhckNvZGU/MDp0aGlzLl9zdGF0ZXMuZ2V0KGUsdCl9fWxldCBBdD1udWxsO2xldCBFdD1udWxsO2NsYXNzIHh0e3N0YXRpYyBfY3JlYXRlTGluayhlLHQsbixyLGkpe2xldCBvPWktMTtkb3tjb25zdCBuPXQuY2hhckNvZGVBdChvKTtpZigyIT09ZS5nZXQobikpYnJlYWs7by0tfXdoaWxlKG8+cik7aWYocj4wKXtjb25zdCBlPXQuY2hhckNvZGVBdChyLTEpLG49dC5jaGFyQ29kZUF0KG8pOyg0MD09PWUmJjQxPT09bnx8OTE9PT1lJiY5Mz09PW58fDEyMz09PWUmJjEyNT09PW4pJiZvLS19cmV0dXJue3JhbmdlOntzdGFydExpbmVOdW1iZXI6bixzdGFydENvbHVtbjpyKzEsZW5kTGluZU51bWJlcjpuLGVuZENvbHVtbjpvKzJ9LHVybDp0LnN1YnN0cmluZyhyLG8rMSl9fXN0YXRpYyBjb21wdXRlTGlua3MoZSx0PWZ1bmN0aW9uKCl7cmV0dXJuIG51bGw9PT1BdCYmKEF0PW5ldyBTdChbWzEsMTA0LDJdLFsxLDcyLDJdLFsxLDEwMiw2XSxbMSw3MCw2XSxbMiwxMTYsM10sWzIsODQsM10sWzMsMTE2LDRdLFszLDg0LDRdLFs0LDExMiw1XSxbNCw4MCw1XSxbNSwxMTUsOV0sWzUsODMsOV0sWzUsNTgsMTBdLFs2LDEwNSw3XSxbNiw3Myw3XSxbNywxMDgsOF0sWzcsNzYsOF0sWzgsMTAxLDldLFs4LDY5LDldLFs5LDU4LDEwXSxbMTAsNDcsMTFdLFsxMSw0NywxMl1dKSksQXR9KCkpe2NvbnN0IG49ZnVuY3Rpb24oKXtpZihudWxsPT09RXQpe0V0PW5ldyB3dCgwKTtjb25zdCBlPSIgXHQ8PidcIuOAgeOAgu+9oe+9pO+8jO+8ju+8mu+8m+KAmOOAiOOAjOOAjuOAlO+8iO+8u++9m++9ou+9o++9ne+8ve+8ieOAleOAj+OAjeOAieKAme+9gO+9nuKApiI7Zm9yKGxldCB0PTA7dDxlLmxlbmd0aDt0KyspRXQuc2V0KGUuY2hhckNvZGVBdCh0KSwxKTtjb25zdCB0PSIuLDs6Ijtmb3IobGV0IGU9MDtlPHQubGVuZ3RoO2UrKylFdC5zZXQodC5jaGFyQ29kZUF0KGUpLDIpfXJldHVybiBFdH0oKSxyPVtdO2ZvcihsZXQgaT0xLG89ZS5nZXRMaW5lQ291bnQoKTtpPD1vO2krKyl7Y29uc3Qgbz1lLmdldExpbmVDb250ZW50KGkpLGE9by5sZW5ndGg7bGV0IHM9MCxjPTAsbD0wLHU9MSxoPSExLGY9ITEsZD0hMSxtPSExO2Zvcig7czxhOyl7bGV0IGU9ITE7Y29uc3QgYT1vLmNoYXJDb2RlQXQocyk7aWYoMTM9PT11KXtsZXQgdDtzd2l0Y2goYSl7Y2FzZSA0MDpoPSEwLHQ9MDticmVhaztjYXNlIDQxOnQ9aD8wOjE7YnJlYWs7Y2FzZSA5MTpkPSEwLGY9ITAsdD0wO2JyZWFrO2Nhc2UgOTM6ZD0hMSx0PWY/MDoxO2JyZWFrO2Nhc2UgMTIzOm09ITAsdD0wO2JyZWFrO2Nhc2UgMTI1OnQ9bT8wOjE7YnJlYWs7Y2FzZSAzOTp0PTM5PT09bD8xOjA7YnJlYWs7Y2FzZSAzNDp0PTM0PT09bD8xOjA7YnJlYWs7Y2FzZSA5Njp0PTk2PT09bD8xOjA7YnJlYWs7Y2FzZSA0Mjp0PTQyPT09bD8xOjA7YnJlYWs7Y2FzZSAxMjQ6dD0xMjQ9PT1sPzE6MDticmVhaztjYXNlIDMyOnQ9ZD8wOjE7YnJlYWs7ZGVmYXVsdDp0PW4uZ2V0KGEpfTE9PT10JiYoci5wdXNoKHh0Ll9jcmVhdGVMaW5rKG4sbyxpLGMscykpLGU9ITApfWVsc2UgaWYoMTI9PT11KXtsZXQgdDs5MT09PWE/KGY9ITAsdD0wKTp0PW4uZ2V0KGEpLDE9PT10P2U9ITA6dT0xM31lbHNlIHU9dC5uZXh0U3RhdGUodSxhKSwwPT09dSYmKGU9ITApO2UmJih1PTEsaD0hMSxmPSExLG09ITEsYz1zKzEsbD1hKSxzKyt9MTM9PT11JiZyLnB1c2goeHQuX2NyZWF0ZUxpbmsobixvLGksYyxhKSl9cmV0dXJuIHJ9fWNsYXNzIE50e2NvbnN0cnVjdG9yKCl7dGhpcy5fZGVmYXVsdFZhbHVlU2V0PVtbInRydWUiLCJmYWxzZSJdLFsiVHJ1ZSIsIkZhbHNlIl0sWyJQcml2YXRlIiwiUHVibGljIiwiRnJpZW5kIiwiUmVhZE9ubHkiLCJQYXJ0aWFsIiwiUHJvdGVjdGVkIiwiV3JpdGVPbmx5Il0sWyJwdWJsaWMiLCJwcm90ZWN0ZWQiLCJwcml2YXRlIl1dfW5hdmlnYXRlVmFsdWVTZXQoZSx0LG4scixpKXtpZihlJiZ0KXtjb25zdCBuPXRoaXMuZG9OYXZpZ2F0ZVZhbHVlU2V0KHQsaSk7aWYobilyZXR1cm57cmFuZ2U6ZSx2YWx1ZTpufX1pZihuJiZyKXtjb25zdCBlPXRoaXMuZG9OYXZpZ2F0ZVZhbHVlU2V0KHIsaSk7aWYoZSlyZXR1cm57cmFuZ2U6bix2YWx1ZTplfX1yZXR1cm4gbnVsbH1kb05hdmlnYXRlVmFsdWVTZXQoZSx0KXtjb25zdCBuPXRoaXMubnVtYmVyUmVwbGFjZShlLHQpO3JldHVybiBudWxsIT09bj9uOnRoaXMudGV4dFJlcGxhY2UoZSx0KX1udW1iZXJSZXBsYWNlKGUsdCl7Y29uc3Qgbj1NYXRoLnBvdygxMCxlLmxlbmd0aC0oZS5sYXN0SW5kZXhPZigiLiIpKzEpKTtsZXQgcj1OdW1iZXIoZSk7Y29uc3QgaT1wYXJzZUZsb2F0KGUpO3JldHVybiBpc05hTihyKXx8aXNOYU4oaSl8fHIhPT1pP251bGw6MCE9PXJ8fHQ/KHI9TWF0aC5mbG9vcihyKm4pLHIrPXQ/bjotbixTdHJpbmcoci9uKSk6bnVsbH10ZXh0UmVwbGFjZShlLHQpe3JldHVybiB0aGlzLnZhbHVlU2V0c1JlcGxhY2UodGhpcy5fZGVmYXVsdFZhbHVlU2V0LGUsdCl9dmFsdWVTZXRzUmVwbGFjZShlLHQsbil7bGV0IHI9bnVsbDtmb3IobGV0IGk9MCxvPWUubGVuZ3RoO251bGw9PT1yJiZpPG87aSsrKXI9dGhpcy52YWx1ZVNldFJlcGxhY2UoZVtpXSx0LG4pO3JldHVybiByfXZhbHVlU2V0UmVwbGFjZShlLHQsbil7bGV0IHI9ZS5pbmRleE9mKHQpO3JldHVybiByPj0wPyhyKz1uPzE6LTEscjwwP3I9ZS5sZW5ndGgtMTpyJT1lLmxlbmd0aCxlW3JdKTpudWxsfX1OdC5JTlNUQU5DRT1uZXcgTnQ7Y29uc3Qga3Q9T2JqZWN0LmZyZWV6ZSgoZnVuY3Rpb24oZSx0KXtjb25zdCBuPXNldFRpbWVvdXQoZS5iaW5kKHQpLDApO3JldHVybntkaXNwb3NlKCl7Y2xlYXJUaW1lb3V0KG4pfX19KSk7dmFyIEx0OyFmdW5jdGlvbihlKXtlLmlzQ2FuY2VsbGF0aW9uVG9rZW49ZnVuY3Rpb24odCl7cmV0dXJuIHQ9PT1lLk5vbmV8fHQ9PT1lLkNhbmNlbGxlZHx8KHQgaW5zdGFuY2VvZiBUdHx8ISghdHx8Im9iamVjdCIhPXR5cGVvZiB0KSYmKCJib29sZWFuIj09dHlwZW9mIHQuaXNDYW5jZWxsYXRpb25SZXF1ZXN0ZWQmJiJmdW5jdGlvbiI9PXR5cGVvZiB0Lm9uQ2FuY2VsbGF0aW9uUmVxdWVzdGVkKSl9LGUuTm9uZT1PYmplY3QuZnJlZXplKHtpc0NhbmNlbGxhdGlvblJlcXVlc3RlZDohMSxvbkNhbmNlbGxhdGlvblJlcXVlc3RlZDpGLk5vbmV9KSxlLkNhbmNlbGxlZD1PYmplY3QuZnJlZXplKHtpc0NhbmNlbGxhdGlvblJlcXVlc3RlZDohMCxvbkNhbmNlbGxhdGlvblJlcXVlc3RlZDprdH0pfShMdHx8KEx0PXt9KSk7Y2xhc3MgVHR7Y29uc3RydWN0b3IoKXt0aGlzLl9pc0NhbmNlbGxlZD0hMSx0aGlzLl9lbWl0dGVyPW51bGx9Y2FuY2VsKCl7dGhpcy5faXNDYW5jZWxsZWR8fCh0aGlzLl9pc0NhbmNlbGxlZD0hMCx0aGlzLl9lbWl0dGVyJiYodGhpcy5fZW1pdHRlci5maXJlKHZvaWQgMCksdGhpcy5kaXNwb3NlKCkpKX1nZXQgaXNDYW5jZWxsYXRpb25SZXF1ZXN0ZWQoKXtyZXR1cm4gdGhpcy5faXNDYW5jZWxsZWR9Z2V0IG9uQ2FuY2VsbGF0aW9uUmVxdWVzdGVkKCl7cmV0dXJuIHRoaXMuX2lzQ2FuY2VsbGVkP2t0Oih0aGlzLl9lbWl0dGVyfHwodGhpcy5fZW1pdHRlcj1uZXcgQiksdGhpcy5fZW1pdHRlci5ldmVudCl9ZGlzcG9zZSgpe3RoaXMuX2VtaXR0ZXImJih0aGlzLl9lbWl0dGVyLmRpc3Bvc2UoKSx0aGlzLl9lbWl0dGVyPW51bGwpfX1jbGFzcyBPdHtjb25zdHJ1Y3RvcihlKXt0aGlzLl90b2tlbj12b2lkIDAsdGhpcy5fcGFyZW50TGlzdGVuZXI9dm9pZCAwLHRoaXMuX3BhcmVudExpc3RlbmVyPWUmJmUub25DYW5jZWxsYXRpb25SZXF1ZXN0ZWQodGhpcy5jYW5jZWwsdGhpcyl9Z2V0IHRva2VuKCl7cmV0dXJuIHRoaXMuX3Rva2VufHwodGhpcy5fdG9rZW49bmV3IFR0KSx0aGlzLl90b2tlbn1jYW5jZWwoKXt0aGlzLl90b2tlbj90aGlzLl90b2tlbiBpbnN0YW5jZW9mIFR0JiZ0aGlzLl90b2tlbi5jYW5jZWwoKTp0aGlzLl90b2tlbj1MdC5DYW5jZWxsZWR9ZGlzcG9zZShlPSExKXtlJiZ0aGlzLmNhbmNlbCgpLHRoaXMuX3BhcmVudExpc3RlbmVyJiZ0aGlzLl9wYXJlbnRMaXN0ZW5lci5kaXNwb3NlKCksdGhpcy5fdG9rZW4/dGhpcy5fdG9rZW4gaW5zdGFuY2VvZiBUdCYmdGhpcy5fdG9rZW4uZGlzcG9zZSgpOnRoaXMuX3Rva2VuPUx0Lk5vbmV9fWNsYXNzIEl0e2NvbnN0cnVjdG9yKCl7dGhpcy5fa2V5Q29kZVRvU3RyPVtdLHRoaXMuX3N0clRvS2V5Q29kZT1PYmplY3QuY3JlYXRlKG51bGwpfWRlZmluZShlLHQpe3RoaXMuX2tleUNvZGVUb1N0cltlXT10LHRoaXMuX3N0clRvS2V5Q29kZVt0LnRvTG93ZXJDYXNlKCldPWV9a2V5Q29kZVRvU3RyKGUpe3JldHVybiB0aGlzLl9rZXlDb2RlVG9TdHJbZV19c3RyVG9LZXlDb2RlKGUpe3JldHVybiB0aGlzLl9zdHJUb0tleUNvZGVbZS50b0xvd2VyQ2FzZSgpXXx8MH19Y29uc3QgTXQ9bmV3IEl0LFB0PW5ldyBJdCxSdD1uZXcgSXQsVnQ9bmV3IEFycmF5KDIzMCksRnQ9T2JqZWN0LmNyZWF0ZShudWxsKSxEdD1PYmplY3QuY3JlYXRlKG51bGwpO3ZhciBLdCxqdDshZnVuY3Rpb24oKXtjb25zdCBlPSIiLHQ9W1swLDEsMCwiTm9uZSIsMCwidW5rbm93biIsMCwiVktfVU5LTk9XTiIsZSxlXSxbMCwxLDEsIkh5cGVyIiwwLGUsMCxlLGUsZV0sWzAsMSwyLCJTdXBlciIsMCxlLDAsZSxlLGVdLFswLDEsMywiRm4iLDAsZSwwLGUsZSxlXSxbMCwxLDQsIkZuTG9jayIsMCxlLDAsZSxlLGVdLFswLDEsNSwiU3VzcGVuZCIsMCxlLDAsZSxlLGVdLFswLDEsNiwiUmVzdW1lIiwwLGUsMCxlLGUsZV0sWzAsMSw3LCJUdXJibyIsMCxlLDAsZSxlLGVdLFswLDEsOCwiU2xlZXAiLDAsZSwwLCJWS19TTEVFUCIsZSxlXSxbMCwxLDksIldha2VVcCIsMCxlLDAsZSxlLGVdLFszMSwwLDEwLCJLZXlBIiwzMSwiQSIsNjUsIlZLX0EiLGUsZV0sWzMyLDAsMTEsIktleUIiLDMyLCJCIiw2NiwiVktfQiIsZSxlXSxbMzMsMCwxMiwiS2V5QyIsMzMsIkMiLDY3LCJWS19DIixlLGVdLFszNCwwLDEzLCJLZXlEIiwzNCwiRCIsNjgsIlZLX0QiLGUsZV0sWzM1LDAsMTQsIktleUUiLDM1LCJFIiw2OSwiVktfRSIsZSxlXSxbMzYsMCwxNSwiS2V5RiIsMzYsIkYiLDcwLCJWS19GIixlLGVdLFszNywwLDE2LCJLZXlHIiwzNywiRyIsNzEsIlZLX0ciLGUsZV0sWzM4LDAsMTcsIktleUgiLDM4LCJIIiw3MiwiVktfSCIsZSxlXSxbMzksMCwxOCwiS2V5SSIsMzksIkkiLDczLCJWS19JIixlLGVdLFs0MCwwLDE5LCJLZXlKIiw0MCwiSiIsNzQsIlZLX0oiLGUsZV0sWzQxLDAsMjAsIktleUsiLDQxLCJLIiw3NSwiVktfSyIsZSxlXSxbNDIsMCwyMSwiS2V5TCIsNDIsIkwiLDc2LCJWS19MIixlLGVdLFs0MywwLDIyLCJLZXlNIiw0MywiTSIsNzcsIlZLX00iLGUsZV0sWzQ0LDAsMjMsIktleU4iLDQ0LCJOIiw3OCwiVktfTiIsZSxlXSxbNDUsMCwyNCwiS2V5TyIsNDUsIk8iLDc5LCJWS19PIixlLGVdLFs0NiwwLDI1LCJLZXlQIiw0NiwiUCIsODAsIlZLX1AiLGUsZV0sWzQ3LDAsMjYsIktleVEiLDQ3LCJRIiw4MSwiVktfUSIsZSxlXSxbNDgsMCwyNywiS2V5UiIsNDgsIlIiLDgyLCJWS19SIixlLGVdLFs0OSwwLDI4LCJLZXlTIiw0OSwiUyIsODMsIlZLX1MiLGUsZV0sWzUwLDAsMjksIktleVQiLDUwLCJUIiw4NCwiVktfVCIsZSxlXSxbNTEsMCwzMCwiS2V5VSIsNTEsIlUiLDg1LCJWS19VIixlLGVdLFs1MiwwLDMxLCJLZXlWIiw1MiwiViIsODYsIlZLX1YiLGUsZV0sWzUzLDAsMzIsIktleVciLDUzLCJXIiw4NywiVktfVyIsZSxlXSxbNTQsMCwzMywiS2V5WCIsNTQsIlgiLDg4LCJWS19YIixlLGVdLFs1NSwwLDM0LCJLZXlZIiw1NSwiWSIsODksIlZLX1kiLGUsZV0sWzU2LDAsMzUsIktleVoiLDU2LCJaIiw5MCwiVktfWiIsZSxlXSxbMjIsMCwzNiwiRGlnaXQxIiwyMiwiMSIsNDksIlZLXzEiLGUsZV0sWzIzLDAsMzcsIkRpZ2l0MiIsMjMsIjIiLDUwLCJWS18yIixlLGVdLFsyNCwwLDM4LCJEaWdpdDMiLDI0LCIzIiw1MSwiVktfMyIsZSxlXSxbMjUsMCwzOSwiRGlnaXQ0IiwyNSwiNCIsNTIsIlZLXzQiLGUsZV0sWzI2LDAsNDAsIkRpZ2l0NSIsMjYsIjUiLDUzLCJWS181IixlLGVdLFsyNywwLDQxLCJEaWdpdDYiLDI3LCI2Iiw1NCwiVktfNiIsZSxlXSxbMjgsMCw0MiwiRGlnaXQ3IiwyOCwiNyIsNTUsIlZLXzciLGUsZV0sWzI5LDAsNDMsIkRpZ2l0OCIsMjksIjgiLDU2LCJWS184IixlLGVdLFszMCwwLDQ0LCJEaWdpdDkiLDMwLCI5Iiw1NywiVktfOSIsZSxlXSxbMjEsMCw0NSwiRGlnaXQwIiwyMSwiMCIsNDgsIlZLXzAiLGUsZV0sWzMsMSw0NiwiRW50ZXIiLDMsIkVudGVyIiwxMywiVktfUkVUVVJOIixlLGVdLFs5LDEsNDcsIkVzY2FwZSIsOSwiRXNjYXBlIiwyNywiVktfRVNDQVBFIixlLGVdLFsxLDEsNDgsIkJhY2tzcGFjZSIsMSwiQmFja3NwYWNlIiw4LCJWS19CQUNLIixlLGVdLFsyLDEsNDksIlRhYiIsMiwiVGFiIiw5LCJWS19UQUIiLGUsZV0sWzEwLDEsNTAsIlNwYWNlIiwxMCwiU3BhY2UiLDMyLCJWS19TUEFDRSIsZSxlXSxbODMsMCw1MSwiTWludXMiLDgzLCItIiwxODksIlZLX09FTV9NSU5VUyIsIi0iLCJPRU1fTUlOVVMiXSxbODEsMCw1MiwiRXF1YWwiLDgxLCI9IiwxODcsIlZLX09FTV9QTFVTIiwiPSIsIk9FTV9QTFVTIl0sWzg3LDAsNTMsIkJyYWNrZXRMZWZ0Iiw4NywiWyIsMjE5LCJWS19PRU1fNCIsIlsiLCJPRU1fNCJdLFs4OSwwLDU0LCJCcmFja2V0UmlnaHQiLDg5LCJdIiwyMjEsIlZLX09FTV82IiwiXSIsIk9FTV82Il0sWzg4LDAsNTUsIkJhY2tzbGFzaCIsODgsIlxcIiwyMjAsIlZLX09FTV81IiwiXFwiLCJPRU1fNSJdLFswLDAsNTYsIkludGxIYXNoIiwwLGUsMCxlLGUsZV0sWzgwLDAsNTcsIlNlbWljb2xvbiIsODAsIjsiLDE4NiwiVktfT0VNXzEiLCI7IiwiT0VNXzEiXSxbOTAsMCw1OCwiUXVvdGUiLDkwLCInIiwyMjIsIlZLX09FTV83IiwiJyIsIk9FTV83Il0sWzg2LDAsNTksIkJhY2txdW90ZSIsODYsImAiLDE5MiwiVktfT0VNXzMiLCJgIiwiT0VNXzMiXSxbODIsMCw2MCwiQ29tbWEiLDgyLCIsIiwxODgsIlZLX09FTV9DT01NQSIsIiwiLCJPRU1fQ09NTUEiXSxbODQsMCw2MSwiUGVyaW9kIiw4NCwiLiIsMTkwLCJWS19PRU1fUEVSSU9EIiwiLiIsIk9FTV9QRVJJT0QiXSxbODUsMCw2MiwiU2xhc2giLDg1LCIvIiwxOTEsIlZLX09FTV8yIiwiLyIsIk9FTV8yIl0sWzgsMSw2MywiQ2Fwc0xvY2siLDgsIkNhcHNMb2NrIiwyMCwiVktfQ0FQSVRBTCIsZSxlXSxbNTksMSw2NCwiRjEiLDU5LCJGMSIsMTEyLCJWS19GMSIsZSxlXSxbNjAsMSw2NSwiRjIiLDYwLCJGMiIsMTEzLCJWS19GMiIsZSxlXSxbNjEsMSw2NiwiRjMiLDYxLCJGMyIsMTE0LCJWS19GMyIsZSxlXSxbNjIsMSw2NywiRjQiLDYyLCJGNCIsMTE1LCJWS19GNCIsZSxlXSxbNjMsMSw2OCwiRjUiLDYzLCJGNSIsMTE2LCJWS19GNSIsZSxlXSxbNjQsMSw2OSwiRjYiLDY0LCJGNiIsMTE3LCJWS19GNiIsZSxlXSxbNjUsMSw3MCwiRjciLDY1LCJGNyIsMTE4LCJWS19GNyIsZSxlXSxbNjYsMSw3MSwiRjgiLDY2LCJGOCIsMTE5LCJWS19GOCIsZSxlXSxbNjcsMSw3MiwiRjkiLDY3LCJGOSIsMTIwLCJWS19GOSIsZSxlXSxbNjgsMSw3MywiRjEwIiw2OCwiRjEwIiwxMjEsIlZLX0YxMCIsZSxlXSxbNjksMSw3NCwiRjExIiw2OSwiRjExIiwxMjIsIlZLX0YxMSIsZSxlXSxbNzAsMSw3NSwiRjEyIiw3MCwiRjEyIiwxMjMsIlZLX0YxMiIsZSxlXSxbMCwxLDc2LCJQcmludFNjcmVlbiIsMCxlLDAsZSxlLGVdLFs3OSwxLDc3LCJTY3JvbGxMb2NrIiw3OSwiU2Nyb2xsTG9jayIsMTQ1LCJWS19TQ1JPTEwiLGUsZV0sWzcsMSw3OCwiUGF1c2UiLDcsIlBhdXNlQnJlYWsiLDE5LCJWS19QQVVTRSIsZSxlXSxbMTksMSw3OSwiSW5zZXJ0IiwxOSwiSW5zZXJ0Iiw0NSwiVktfSU5TRVJUIixlLGVdLFsxNCwxLDgwLCJIb21lIiwxNCwiSG9tZSIsMzYsIlZLX0hPTUUiLGUsZV0sWzExLDEsODEsIlBhZ2VVcCIsMTEsIlBhZ2VVcCIsMzMsIlZLX1BSSU9SIixlLGVdLFsyMCwxLDgyLCJEZWxldGUiLDIwLCJEZWxldGUiLDQ2LCJWS19ERUxFVEUiLGUsZV0sWzEzLDEsODMsIkVuZCIsMTMsIkVuZCIsMzUsIlZLX0VORCIsZSxlXSxbMTIsMSw4NCwiUGFnZURvd24iLDEyLCJQYWdlRG93biIsMzQsIlZLX05FWFQiLGUsZV0sWzE3LDEsODUsIkFycm93UmlnaHQiLDE3LCJSaWdodEFycm93IiwzOSwiVktfUklHSFQiLCJSaWdodCIsZV0sWzE1LDEsODYsIkFycm93TGVmdCIsMTUsIkxlZnRBcnJvdyIsMzcsIlZLX0xFRlQiLCJMZWZ0IixlXSxbMTgsMSw4NywiQXJyb3dEb3duIiwxOCwiRG93bkFycm93Iiw0MCwiVktfRE9XTiIsIkRvd24iLGVdLFsxNiwxLDg4LCJBcnJvd1VwIiwxNiwiVXBBcnJvdyIsMzgsIlZLX1VQIiwiVXAiLGVdLFs3OCwxLDg5LCJOdW1Mb2NrIiw3OCwiTnVtTG9jayIsMTQ0LCJWS19OVU1MT0NLIixlLGVdLFsxMDgsMSw5MCwiTnVtcGFkRGl2aWRlIiwxMDgsIk51bVBhZF9EaXZpZGUiLDExMSwiVktfRElWSURFIixlLGVdLFsxMDMsMSw5MSwiTnVtcGFkTXVsdGlwbHkiLDEwMywiTnVtUGFkX011bHRpcGx5IiwxMDYsIlZLX01VTFRJUExZIixlLGVdLFsxMDYsMSw5MiwiTnVtcGFkU3VidHJhY3QiLDEwNiwiTnVtUGFkX1N1YnRyYWN0IiwxMDksIlZLX1NVQlRSQUNUIixlLGVdLFsxMDQsMSw5MywiTnVtcGFkQWRkIiwxMDQsIk51bVBhZF9BZGQiLDEwNywiVktfQUREIixlLGVdLFszLDEsOTQsIk51bXBhZEVudGVyIiwzLGUsMCxlLGUsZV0sWzk0LDEsOTUsIk51bXBhZDEiLDk0LCJOdW1QYWQxIiw5NywiVktfTlVNUEFEMSIsZSxlXSxbOTUsMSw5NiwiTnVtcGFkMiIsOTUsIk51bVBhZDIiLDk4LCJWS19OVU1QQUQyIixlLGVdLFs5NiwxLDk3LCJOdW1wYWQzIiw5NiwiTnVtUGFkMyIsOTksIlZLX05VTVBBRDMiLGUsZV0sWzk3LDEsOTgsIk51bXBhZDQiLDk3LCJOdW1QYWQ0IiwxMDAsIlZLX05VTVBBRDQiLGUsZV0sWzk4LDEsOTksIk51bXBhZDUiLDk4LCJOdW1QYWQ1IiwxMDEsIlZLX05VTVBBRDUiLGUsZV0sWzk5LDEsMTAwLCJOdW1wYWQ2Iiw5OSwiTnVtUGFkNiIsMTAyLCJWS19OVU1QQUQ2IixlLGVdLFsxMDAsMSwxMDEsIk51bXBhZDciLDEwMCwiTnVtUGFkNyIsMTAzLCJWS19OVU1QQUQ3IixlLGVdLFsxMDEsMSwxMDIsIk51bXBhZDgiLDEwMSwiTnVtUGFkOCIsMTA0LCJWS19OVU1QQUQ4IixlLGVdLFsxMDIsMSwxMDMsIk51bXBhZDkiLDEwMiwiTnVtUGFkOSIsMTA1LCJWS19OVU1QQUQ5IixlLGVdLFs5MywxLDEwNCwiTnVtcGFkMCIsOTMsIk51bVBhZDAiLDk2LCJWS19OVU1QQUQwIixlLGVdLFsxMDcsMSwxMDUsIk51bXBhZERlY2ltYWwiLDEwNywiTnVtUGFkX0RlY2ltYWwiLDExMCwiVktfREVDSU1BTCIsZSxlXSxbOTIsMCwxMDYsIkludGxCYWNrc2xhc2giLDkyLCJPRU1fMTAyIiwyMjYsIlZLX09FTV8xMDIiLGUsZV0sWzU4LDEsMTA3LCJDb250ZXh0TWVudSIsNTgsIkNvbnRleHRNZW51Iiw5MyxlLGUsZV0sWzAsMSwxMDgsIlBvd2VyIiwwLGUsMCxlLGUsZV0sWzAsMSwxMDksIk51bXBhZEVxdWFsIiwwLGUsMCxlLGUsZV0sWzcxLDEsMTEwLCJGMTMiLDcxLCJGMTMiLDEyNCwiVktfRjEzIixlLGVdLFs3MiwxLDExMSwiRjE0Iiw3MiwiRjE0IiwxMjUsIlZLX0YxNCIsZSxlXSxbNzMsMSwxMTIsIkYxNSIsNzMsIkYxNSIsMTI2LCJWS19GMTUiLGUsZV0sWzc0LDEsMTEzLCJGMTYiLDc0LCJGMTYiLDEyNywiVktfRjE2IixlLGVdLFs3NSwxLDExNCwiRjE3Iiw3NSwiRjE3IiwxMjgsIlZLX0YxNyIsZSxlXSxbNzYsMSwxMTUsIkYxOCIsNzYsIkYxOCIsMTI5LCJWS19GMTgiLGUsZV0sWzc3LDEsMTE2LCJGMTkiLDc3LCJGMTkiLDEzMCwiVktfRjE5IixlLGVdLFswLDEsMTE3LCJGMjAiLDAsZSwwLCJWS19GMjAiLGUsZV0sWzAsMSwxMTgsIkYyMSIsMCxlLDAsIlZLX0YyMSIsZSxlXSxbMCwxLDExOSwiRjIyIiwwLGUsMCwiVktfRjIyIixlLGVdLFswLDEsMTIwLCJGMjMiLDAsZSwwLCJWS19GMjMiLGUsZV0sWzAsMSwxMjEsIkYyNCIsMCxlLDAsIlZLX0YyNCIsZSxlXSxbMCwxLDEyMiwiT3BlbiIsMCxlLDAsZSxlLGVdLFswLDEsMTIzLCJIZWxwIiwwLGUsMCxlLGUsZV0sWzAsMSwxMjQsIlNlbGVjdCIsMCxlLDAsZSxlLGVdLFswLDEsMTI1LCJBZ2FpbiIsMCxlLDAsZSxlLGVdLFswLDEsMTI2LCJVbmRvIiwwLGUsMCxlLGUsZV0sWzAsMSwxMjcsIkN1dCIsMCxlLDAsZSxlLGVdLFswLDEsMTI4LCJDb3B5IiwwLGUsMCxlLGUsZV0sWzAsMSwxMjksIlBhc3RlIiwwLGUsMCxlLGUsZV0sWzAsMSwxMzAsIkZpbmQiLDAsZSwwLGUsZSxlXSxbMCwxLDEzMSwiQXVkaW9Wb2x1bWVNdXRlIiwxMTIsIkF1ZGlvVm9sdW1lTXV0ZSIsMTczLCJWS19WT0xVTUVfTVVURSIsZSxlXSxbMCwxLDEzMiwiQXVkaW9Wb2x1bWVVcCIsMTEzLCJBdWRpb1ZvbHVtZVVwIiwxNzUsIlZLX1ZPTFVNRV9VUCIsZSxlXSxbMCwxLDEzMywiQXVkaW9Wb2x1bWVEb3duIiwxMTQsIkF1ZGlvVm9sdW1lRG93biIsMTc0LCJWS19WT0xVTUVfRE9XTiIsZSxlXSxbMTA1LDEsMTM0LCJOdW1wYWRDb21tYSIsMTA1LCJOdW1QYWRfU2VwYXJhdG9yIiwxMDgsIlZLX1NFUEFSQVRPUiIsZSxlXSxbMTEwLDAsMTM1LCJJbnRsUm8iLDExMCwiQUJOVF9DMSIsMTkzLCJWS19BQk5UX0MxIixlLGVdLFswLDEsMTM2LCJLYW5hTW9kZSIsMCxlLDAsZSxlLGVdLFswLDAsMTM3LCJJbnRsWWVuIiwwLGUsMCxlLGUsZV0sWzAsMSwxMzgsIkNvbnZlcnQiLDAsZSwwLGUsZSxlXSxbMCwxLDEzOSwiTm9uQ29udmVydCIsMCxlLDAsZSxlLGVdLFswLDEsMTQwLCJMYW5nMSIsMCxlLDAsZSxlLGVdLFswLDEsMTQxLCJMYW5nMiIsMCxlLDAsZSxlLGVdLFswLDEsMTQyLCJMYW5nMyIsMCxlLDAsZSxlLGVdLFswLDEsMTQzLCJMYW5nNCIsMCxlLDAsZSxlLGVdLFswLDEsMTQ0LCJMYW5nNSIsMCxlLDAsZSxlLGVdLFswLDEsMTQ1LCJBYm9ydCIsMCxlLDAsZSxlLGVdLFswLDEsMTQ2LCJQcm9wcyIsMCxlLDAsZSxlLGVdLFswLDEsMTQ3LCJOdW1wYWRQYXJlbkxlZnQiLDAsZSwwLGUsZSxlXSxbMCwxLDE0OCwiTnVtcGFkUGFyZW5SaWdodCIsMCxlLDAsZSxlLGVdLFswLDEsMTQ5LCJOdW1wYWRCYWNrc3BhY2UiLDAsZSwwLGUsZSxlXSxbMCwxLDE1MCwiTnVtcGFkTWVtb3J5U3RvcmUiLDAsZSwwLGUsZSxlXSxbMCwxLDE1MSwiTnVtcGFkTWVtb3J5UmVjYWxsIiwwLGUsMCxlLGUsZV0sWzAsMSwxNTIsIk51bXBhZE1lbW9yeUNsZWFyIiwwLGUsMCxlLGUsZV0sWzAsMSwxNTMsIk51bXBhZE1lbW9yeUFkZCIsMCxlLDAsZSxlLGVdLFswLDEsMTU0LCJOdW1wYWRNZW1vcnlTdWJ0cmFjdCIsMCxlLDAsZSxlLGVdLFswLDEsMTU1LCJOdW1wYWRDbGVhciIsMTI2LCJDbGVhciIsMTIsIlZLX0NMRUFSIixlLGVdLFswLDEsMTU2LCJOdW1wYWRDbGVhckVudHJ5IiwwLGUsMCxlLGUsZV0sWzUsMSwwLGUsNSwiQ3RybCIsMTcsIlZLX0NPTlRST0wiLGUsZV0sWzQsMSwwLGUsNCwiU2hpZnQiLDE2LCJWS19TSElGVCIsZSxlXSxbNiwxLDAsZSw2LCJBbHQiLDE4LCJWS19NRU5VIixlLGVdLFs1NywxLDAsZSw1NywiTWV0YSIsMCwiVktfQ09NTUFORCIsZSxlXSxbNSwxLDE1NywiQ29udHJvbExlZnQiLDUsZSwwLCJWS19MQ09OVFJPTCIsZSxlXSxbNCwxLDE1OCwiU2hpZnRMZWZ0Iiw0LGUsMCwiVktfTFNISUZUIixlLGVdLFs2LDEsMTU5LCJBbHRMZWZ0Iiw2LGUsMCwiVktfTE1FTlUiLGUsZV0sWzU3LDEsMTYwLCJNZXRhTGVmdCIsNTcsZSwwLCJWS19MV0lOIixlLGVdLFs1LDEsMTYxLCJDb250cm9sUmlnaHQiLDUsZSwwLCJWS19SQ09OVFJPTCIsZSxlXSxbNCwxLDE2MiwiU2hpZnRSaWdodCIsNCxlLDAsIlZLX1JTSElGVCIsZSxlXSxbNiwxLDE2MywiQWx0UmlnaHQiLDYsZSwwLCJWS19STUVOVSIsZSxlXSxbNTcsMSwxNjQsIk1ldGFSaWdodCIsNTcsZSwwLCJWS19SV0lOIixlLGVdLFswLDEsMTY1LCJCcmlnaHRuZXNzVXAiLDAsZSwwLGUsZSxlXSxbMCwxLDE2NiwiQnJpZ2h0bmVzc0Rvd24iLDAsZSwwLGUsZSxlXSxbMCwxLDE2NywiTWVkaWFQbGF5IiwwLGUsMCxlLGUsZV0sWzAsMSwxNjgsIk1lZGlhUmVjb3JkIiwwLGUsMCxlLGUsZV0sWzAsMSwxNjksIk1lZGlhRmFzdEZvcndhcmQiLDAsZSwwLGUsZSxlXSxbMCwxLDE3MCwiTWVkaWFSZXdpbmQiLDAsZSwwLGUsZSxlXSxbMTE0LDEsMTcxLCJNZWRpYVRyYWNrTmV4dCIsMTE5LCJNZWRpYVRyYWNrTmV4dCIsMTc2LCJWS19NRURJQV9ORVhUX1RSQUNLIixlLGVdLFsxMTUsMSwxNzIsIk1lZGlhVHJhY2tQcmV2aW91cyIsMTIwLCJNZWRpYVRyYWNrUHJldmlvdXMiLDE3NywiVktfTUVESUFfUFJFVl9UUkFDSyIsZSxlXSxbMTE2LDEsMTczLCJNZWRpYVN0b3AiLDEyMSwiTWVkaWFTdG9wIiwxNzgsIlZLX01FRElBX1NUT1AiLGUsZV0sWzAsMSwxNzQsIkVqZWN0IiwwLGUsMCxlLGUsZV0sWzExNywxLDE3NSwiTWVkaWFQbGF5UGF1c2UiLDEyMiwiTWVkaWFQbGF5UGF1c2UiLDE3OSwiVktfTUVESUFfUExBWV9QQVVTRSIsZSxlXSxbMCwxLDE3NiwiTWVkaWFTZWxlY3QiLDEyMywiTGF1bmNoTWVkaWFQbGF5ZXIiLDE4MSwiVktfTUVESUFfTEFVTkNIX01FRElBX1NFTEVDVCIsZSxlXSxbMCwxLDE3NywiTGF1bmNoTWFpbCIsMTI0LCJMYXVuY2hNYWlsIiwxODAsIlZLX01FRElBX0xBVU5DSF9NQUlMIixlLGVdLFswLDEsMTc4LCJMYXVuY2hBcHAyIiwxMjUsIkxhdW5jaEFwcDIiLDE4MywiVktfTUVESUFfTEFVTkNIX0FQUDIiLGUsZV0sWzAsMSwxNzksIkxhdW5jaEFwcDEiLDAsZSwwLCJWS19NRURJQV9MQVVOQ0hfQVBQMSIsZSxlXSxbMCwxLDE4MCwiU2VsZWN0VGFzayIsMCxlLDAsZSxlLGVdLFswLDEsMTgxLCJMYXVuY2hTY3JlZW5TYXZlciIsMCxlLDAsZSxlLGVdLFswLDEsMTgyLCJCcm93c2VyU2VhcmNoIiwxMTUsIkJyb3dzZXJTZWFyY2giLDE3MCwiVktfQlJPV1NFUl9TRUFSQ0giLGUsZV0sWzAsMSwxODMsIkJyb3dzZXJIb21lIiwxMTYsIkJyb3dzZXJIb21lIiwxNzIsIlZLX0JST1dTRVJfSE9NRSIsZSxlXSxbMTEyLDEsMTg0LCJCcm93c2VyQmFjayIsMTE3LCJCcm93c2VyQmFjayIsMTY2LCJWS19CUk9XU0VSX0JBQ0siLGUsZV0sWzExMywxLDE4NSwiQnJvd3NlckZvcndhcmQiLDExOCwiQnJvd3NlckZvcndhcmQiLDE2NywiVktfQlJPV1NFUl9GT1JXQVJEIixlLGVdLFswLDEsMTg2LCJCcm93c2VyU3RvcCIsMCxlLDAsIlZLX0JST1dTRVJfU1RPUCIsZSxlXSxbMCwxLDE4NywiQnJvd3NlclJlZnJlc2giLDAsZSwwLCJWS19CUk9XU0VSX1JFRlJFU0giLGUsZV0sWzAsMSwxODgsIkJyb3dzZXJGYXZvcml0ZXMiLDAsZSwwLCJWS19CUk9XU0VSX0ZBVk9SSVRFUyIsZSxlXSxbMCwxLDE4OSwiWm9vbVRvZ2dsZSIsMCxlLDAsZSxlLGVdLFswLDEsMTkwLCJNYWlsUmVwbHkiLDAsZSwwLGUsZSxlXSxbMCwxLDE5MSwiTWFpbEZvcndhcmQiLDAsZSwwLGUsZSxlXSxbMCwxLDE5MiwiTWFpbFNlbmQiLDAsZSwwLGUsZSxlXSxbMTA5LDEsMCxlLDEwOSwiS2V5SW5Db21wb3NpdGlvbiIsMjI5LGUsZSxlXSxbMTExLDEsMCxlLDExMSwiQUJOVF9DMiIsMTk0LCJWS19BQk5UX0MyIixlLGVdLFs5MSwxLDAsZSw5MSwiT0VNXzgiLDIyMywiVktfT0VNXzgiLGUsZV0sWzAsMSwwLGUsMCxlLDAsIlZLX0tBTkEiLGUsZV0sWzAsMSwwLGUsMCxlLDAsIlZLX0hBTkdVTCIsZSxlXSxbMCwxLDAsZSwwLGUsMCwiVktfSlVOSkEiLGUsZV0sWzAsMSwwLGUsMCxlLDAsIlZLX0ZJTkFMIixlLGVdLFswLDEsMCxlLDAsZSwwLCJWS19IQU5KQSIsZSxlXSxbMCwxLDAsZSwwLGUsMCwiVktfS0FOSkkiLGUsZV0sWzAsMSwwLGUsMCxlLDAsIlZLX0NPTlZFUlQiLGUsZV0sWzAsMSwwLGUsMCxlLDAsIlZLX05PTkNPTlZFUlQiLGUsZV0sWzAsMSwwLGUsMCxlLDAsIlZLX0FDQ0VQVCIsZSxlXSxbMCwxLDAsZSwwLGUsMCwiVktfTU9ERUNIQU5HRSIsZSxlXSxbMCwxLDAsZSwwLGUsMCwiVktfU0VMRUNUIixlLGVdLFswLDEsMCxlLDAsZSwwLCJWS19QUklOVCIsZSxlXSxbMCwxLDAsZSwwLGUsMCwiVktfRVhFQ1VURSIsZSxlXSxbMCwxLDAsZSwwLGUsMCwiVktfU05BUFNIT1QiLGUsZV0sWzAsMSwwLGUsMCxlLDAsIlZLX0hFTFAiLGUsZV0sWzAsMSwwLGUsMCxlLDAsIlZLX0FQUFMiLGUsZV0sWzAsMSwwLGUsMCxlLDAsIlZLX1BST0NFU1NLRVkiLGUsZV0sWzAsMSwwLGUsMCxlLDAsIlZLX1BBQ0tFVCIsZSxlXSxbMCwxLDAsZSwwLGUsMCwiVktfREJFX1NCQ1NDSEFSIixlLGVdLFswLDEsMCxlLDAsZSwwLCJWS19EQkVfREJDU0NIQVIiLGUsZV0sWzAsMSwwLGUsMCxlLDAsIlZLX0FUVE4iLGUsZV0sWzAsMSwwLGUsMCxlLDAsIlZLX0NSU0VMIixlLGVdLFswLDEsMCxlLDAsZSwwLCJWS19FWFNFTCIsZSxlXSxbMCwxLDAsZSwwLGUsMCwiVktfRVJFT0YiLGUsZV0sWzAsMSwwLGUsMCxlLDAsIlZLX1BMQVkiLGUsZV0sWzAsMSwwLGUsMCxlLDAsIlZLX1pPT00iLGUsZV0sWzAsMSwwLGUsMCxlLDAsIlZLX05PTkFNRSIsZSxlXSxbMCwxLDAsZSwwLGUsMCwiVktfUEExIixlLGVdLFswLDEsMCxlLDAsZSwwLCJWS19PRU1fQ0xFQVIiLGUsZV1dLG49W10scj1bXTtmb3IoY29uc3QgZSBvZiB0KXtjb25zdFt0LGksbyxhLHMsYyxsLHUsaCxmXT1lO2lmKHJbb118fChyW29dPSEwLEZ0W2FdPW8sRHRbYS50b0xvd2VyQ2FzZSgpXT1vKSwhbltzXSl7aWYobltzXT0hMCwhYyl0aHJvdyBuZXcgRXJyb3IoYFN0cmluZyByZXByZXNlbnRhdGlvbiBtaXNzaW5nIGZvciBrZXkgY29kZSAke3N9IGFyb3VuZCBzY2FuIGNvZGUgJHthfWApO010LmRlZmluZShzLGMpLFB0LmRlZmluZShzLGh8fGMpLFJ0LmRlZmluZShzLGZ8fGh8fGMpfWwmJihWdFtsXT1zKX19KCksZnVuY3Rpb24oZSl7ZS50b1N0cmluZz1mdW5jdGlvbihlKXtyZXR1cm4gTXQua2V5Q29kZVRvU3RyKGUpfSxlLmZyb21TdHJpbmc9ZnVuY3Rpb24oZSl7cmV0dXJuIE10LnN0clRvS2V5Q29kZShlKX0sZS50b1VzZXJTZXR0aW5nc1VTPWZ1bmN0aW9uKGUpe3JldHVybiBQdC5rZXlDb2RlVG9TdHIoZSl9LGUudG9Vc2VyU2V0dGluZ3NHZW5lcmFsPWZ1bmN0aW9uKGUpe3JldHVybiBSdC5rZXlDb2RlVG9TdHIoZSl9LGUuZnJvbVVzZXJTZXR0aW5ncz1mdW5jdGlvbihlKXtyZXR1cm4gUHQuc3RyVG9LZXlDb2RlKGUpfHxSdC5zdHJUb0tleUNvZGUoZSl9LGUudG9FbGVjdHJvbkFjY2VsZXJhdG9yPWZ1bmN0aW9uKGUpe2lmKGU+PTkzJiZlPD0xMDgpcmV0dXJuIG51bGw7c3dpdGNoKGUpe2Nhc2UgMTY6cmV0dXJuIlVwIjtjYXNlIDE4OnJldHVybiJEb3duIjtjYXNlIDE1OnJldHVybiJMZWZ0IjtjYXNlIDE3OnJldHVybiJSaWdodCJ9cmV0dXJuIE10LmtleUNvZGVUb1N0cihlKX19KEt0fHwoS3Q9e30pKTtjbGFzcyBVdCBleHRlbmRzIHR0e2NvbnN0cnVjdG9yKGUsdCxuLHIpe3N1cGVyKGUsdCxuLHIpLHRoaXMuc2VsZWN0aW9uU3RhcnRMaW5lTnVtYmVyPWUsdGhpcy5zZWxlY3Rpb25TdGFydENvbHVtbj10LHRoaXMucG9zaXRpb25MaW5lTnVtYmVyPW4sdGhpcy5wb3NpdGlvbkNvbHVtbj1yfXRvU3RyaW5nKCl7cmV0dXJuIlsiK3RoaXMuc2VsZWN0aW9uU3RhcnRMaW5lTnVtYmVyKyIsIit0aGlzLnNlbGVjdGlvblN0YXJ0Q29sdW1uKyIgLT4gIit0aGlzLnBvc2l0aW9uTGluZU51bWJlcisiLCIrdGhpcy5wb3NpdGlvbkNvbHVtbisiXSJ9ZXF1YWxzU2VsZWN0aW9uKGUpe3JldHVybiBVdC5zZWxlY3Rpb25zRXF1YWwodGhpcyxlKX1zdGF0aWMgc2VsZWN0aW9uc0VxdWFsKGUsdCl7cmV0dXJuIGUuc2VsZWN0aW9uU3RhcnRMaW5lTnVtYmVyPT09dC5zZWxlY3Rpb25TdGFydExpbmVOdW1iZXImJmUuc2VsZWN0aW9uU3RhcnRDb2x1bW49PT10LnNlbGVjdGlvblN0YXJ0Q29sdW1uJiZlLnBvc2l0aW9uTGluZU51bWJlcj09PXQucG9zaXRpb25MaW5lTnVtYmVyJiZlLnBvc2l0aW9uQ29sdW1uPT09dC5wb3NpdGlvbkNvbHVtbn1nZXREaXJlY3Rpb24oKXtyZXR1cm4gdGhpcy5zZWxlY3Rpb25TdGFydExpbmVOdW1iZXI9PT10aGlzLnN0YXJ0TGluZU51bWJlciYmdGhpcy5zZWxlY3Rpb25TdGFydENvbHVtbj09PXRoaXMuc3RhcnRDb2x1bW4/MDoxfXNldEVuZFBvc2l0aW9uKGUsdCl7cmV0dXJuIDA9PT10aGlzLmdldERpcmVjdGlvbigpP25ldyBVdCh0aGlzLnN0YXJ0TGluZU51bWJlcix0aGlzLnN0YXJ0Q29sdW1uLGUsdCk6bmV3IFV0KGUsdCx0aGlzLnN0YXJ0TGluZU51bWJlcix0aGlzLnN0YXJ0Q29sdW1uKX1nZXRQb3NpdGlvbigpe3JldHVybiBuZXcgZXQodGhpcy5wb3NpdGlvbkxpbmVOdW1iZXIsdGhpcy5wb3NpdGlvbkNvbHVtbil9Z2V0U2VsZWN0aW9uU3RhcnQoKXtyZXR1cm4gbmV3IGV0KHRoaXMuc2VsZWN0aW9uU3RhcnRMaW5lTnVtYmVyLHRoaXMuc2VsZWN0aW9uU3RhcnRDb2x1bW4pfXNldFN0YXJ0UG9zaXRpb24oZSx0KXtyZXR1cm4gMD09PXRoaXMuZ2V0RGlyZWN0aW9uKCk/bmV3IFV0KGUsdCx0aGlzLmVuZExpbmVOdW1iZXIsdGhpcy5lbmRDb2x1bW4pOm5ldyBVdCh0aGlzLmVuZExpbmVOdW1iZXIsdGhpcy5lbmRDb2x1bW4sZSx0KX1zdGF0aWMgZnJvbVBvc2l0aW9ucyhlLHQ9ZSl7cmV0dXJuIG5ldyBVdChlLmxpbmVOdW1iZXIsZS5jb2x1bW4sdC5saW5lTnVtYmVyLHQuY29sdW1uKX1zdGF0aWMgZnJvbVJhbmdlKGUsdCl7cmV0dXJuIDA9PT10P25ldyBVdChlLnN0YXJ0TGluZU51bWJlcixlLnN0YXJ0Q29sdW1uLGUuZW5kTGluZU51bWJlcixlLmVuZENvbHVtbik6bmV3IFV0KGUuZW5kTGluZU51bWJlcixlLmVuZENvbHVtbixlLnN0YXJ0TGluZU51bWJlcixlLnN0YXJ0Q29sdW1uKX1zdGF0aWMgbGlmdFNlbGVjdGlvbihlKXtyZXR1cm4gbmV3IFV0KGUuc2VsZWN0aW9uU3RhcnRMaW5lTnVtYmVyLGUuc2VsZWN0aW9uU3RhcnRDb2x1bW4sZS5wb3NpdGlvbkxpbmVOdW1iZXIsZS5wb3NpdGlvbkNvbHVtbil9c3RhdGljIHNlbGVjdGlvbnNBcnJFcXVhbChlLHQpe2lmKGUmJiF0fHwhZSYmdClyZXR1cm4hMTtpZighZSYmIXQpcmV0dXJuITA7aWYoZS5sZW5ndGghPT10Lmxlbmd0aClyZXR1cm4hMTtmb3IobGV0IG49MCxyPWUubGVuZ3RoO248cjtuKyspaWYoIXRoaXMuc2VsZWN0aW9uc0VxdWFsKGVbbl0sdFtuXSkpcmV0dXJuITE7cmV0dXJuITB9c3RhdGljIGlzSVNlbGVjdGlvbihlKXtyZXR1cm4gZSYmIm51bWJlciI9PXR5cGVvZiBlLnNlbGVjdGlvblN0YXJ0TGluZU51bWJlciYmIm51bWJlciI9PXR5cGVvZiBlLnNlbGVjdGlvblN0YXJ0Q29sdW1uJiYibnVtYmVyIj09dHlwZW9mIGUucG9zaXRpb25MaW5lTnVtYmVyJiYibnVtYmVyIj09dHlwZW9mIGUucG9zaXRpb25Db2x1bW59c3RhdGljIGNyZWF0ZVdpdGhEaXJlY3Rpb24oZSx0LG4scixpKXtyZXR1cm4gMD09PWk/bmV3IFV0KGUsdCxuLHIpOm5ldyBVdChuLHIsZSx0KX19Y2xhc3MgQnR7Y29uc3RydWN0b3IoZSx0LG4pe3RoaXMuaWQ9ZSx0aGlzLmRlZmluaXRpb249dCx0aGlzLmRlc2NyaXB0aW9uPW4sQnQuX2FsbENvZGljb25zLnB1c2godGhpcyl9Z2V0IGNsYXNzTmFtZXMoKXtyZXR1cm4iY29kaWNvbiBjb2RpY29uLSIrdGhpcy5pZH1nZXQgY2xhc3NOYW1lc0FycmF5KCl7cmV0dXJuWyJjb2RpY29uIiwiY29kaWNvbi0iK3RoaXMuaWRdfWdldCBjc3NTZWxlY3Rvcigpe3JldHVybiIuY29kaWNvbi5jb2RpY29uLSIrdGhpcy5pZH1zdGF0aWMgZ2V0QWxsKCl7cmV0dXJuIEJ0Ll9hbGxDb2RpY29uc319QnQuX2FsbENvZGljb25zPVtdLEJ0LmFkZD1uZXcgQnQoImFkZCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE2MCJ9KSxCdC5wbHVzPW5ldyBCdCgicGx1cyIsQnQuYWRkLmRlZmluaXRpb24pLEJ0Lmdpc3ROZXc9bmV3IEJ0KCJnaXN0LW5ldyIsQnQuYWRkLmRlZmluaXRpb24pLEJ0LnJlcG9DcmVhdGU9bmV3IEJ0KCJyZXBvLWNyZWF0ZSIsQnQuYWRkLmRlZmluaXRpb24pLEJ0LmxpZ2h0YnVsYj1uZXcgQnQoImxpZ2h0YnVsYiIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE2MSJ9KSxCdC5saWdodEJ1bGI9bmV3IEJ0KCJsaWdodC1idWxiIix7Zm9udENoYXJhY3RlcjoiXFxlYTYxIn0pLEJ0LnJlcG89bmV3IEJ0KCJyZXBvIix7Zm9udENoYXJhY3RlcjoiXFxlYTYyIn0pLEJ0LnJlcG9EZWxldGU9bmV3IEJ0KCJyZXBvLWRlbGV0ZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE2MiJ9KSxCdC5naXN0Rm9yaz1uZXcgQnQoImdpc3QtZm9yayIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE2MyJ9KSxCdC5yZXBvRm9ya2VkPW5ldyBCdCgicmVwby1mb3JrZWQiLHtmb250Q2hhcmFjdGVyOiJcXGVhNjMifSksQnQuZ2l0UHVsbFJlcXVlc3Q9bmV3IEJ0KCJnaXQtcHVsbC1yZXF1ZXN0Iix7Zm9udENoYXJhY3RlcjoiXFxlYTY0In0pLEJ0LmdpdFB1bGxSZXF1ZXN0QWJhbmRvbmVkPW5ldyBCdCgiZ2l0LXB1bGwtcmVxdWVzdC1hYmFuZG9uZWQiLHtmb250Q2hhcmFjdGVyOiJcXGVhNjQifSksQnQucmVjb3JkS2V5cz1uZXcgQnQoInJlY29yZC1rZXlzIix7Zm9udENoYXJhY3RlcjoiXFxlYTY1In0pLEJ0LmtleWJvYXJkPW5ldyBCdCgia2V5Ym9hcmQiLHtmb250Q2hhcmFjdGVyOiJcXGVhNjUifSksQnQudGFnPW5ldyBCdCgidGFnIix7Zm9udENoYXJhY3RlcjoiXFxlYTY2In0pLEJ0LnRhZ0FkZD1uZXcgQnQoInRhZy1hZGQiLHtmb250Q2hhcmFjdGVyOiJcXGVhNjYifSksQnQudGFnUmVtb3ZlPW5ldyBCdCgidGFnLXJlbW92ZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE2NiJ9KSxCdC5wZXJzb249bmV3IEJ0KCJwZXJzb24iLHtmb250Q2hhcmFjdGVyOiJcXGVhNjcifSksQnQucGVyc29uRm9sbG93PW5ldyBCdCgicGVyc29uLWZvbGxvdyIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE2NyJ9KSxCdC5wZXJzb25PdXRsaW5lPW5ldyBCdCgicGVyc29uLW91dGxpbmUiLHtmb250Q2hhcmFjdGVyOiJcXGVhNjcifSksQnQucGVyc29uRmlsbGVkPW5ldyBCdCgicGVyc29uLWZpbGxlZCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE2NyJ9KSxCdC5naXRCcmFuY2g9bmV3IEJ0KCJnaXQtYnJhbmNoIix7Zm9udENoYXJhY3RlcjoiXFxlYTY4In0pLEJ0LmdpdEJyYW5jaENyZWF0ZT1uZXcgQnQoImdpdC1icmFuY2gtY3JlYXRlIix7Zm9udENoYXJhY3RlcjoiXFxlYTY4In0pLEJ0LmdpdEJyYW5jaERlbGV0ZT1uZXcgQnQoImdpdC1icmFuY2gtZGVsZXRlIix7Zm9udENoYXJhY3RlcjoiXFxlYTY4In0pLEJ0LnNvdXJjZUNvbnRyb2w9bmV3IEJ0KCJzb3VyY2UtY29udHJvbCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE2OCJ9KSxCdC5taXJyb3I9bmV3IEJ0KCJtaXJyb3IiLHtmb250Q2hhcmFjdGVyOiJcXGVhNjkifSksQnQubWlycm9yUHVibGljPW5ldyBCdCgibWlycm9yLXB1YmxpYyIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE2OSJ9KSxCdC5zdGFyPW5ldyBCdCgic3RhciIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE2YSJ9KSxCdC5zdGFyQWRkPW5ldyBCdCgic3Rhci1hZGQiLHtmb250Q2hhcmFjdGVyOiJcXGVhNmEifSksQnQuc3RhckRlbGV0ZT1uZXcgQnQoInN0YXItZGVsZXRlIix7Zm9udENoYXJhY3RlcjoiXFxlYTZhIn0pLEJ0LnN0YXJFbXB0eT1uZXcgQnQoInN0YXItZW1wdHkiLHtmb250Q2hhcmFjdGVyOiJcXGVhNmEifSksQnQuY29tbWVudD1uZXcgQnQoImNvbW1lbnQiLHtmb250Q2hhcmFjdGVyOiJcXGVhNmIifSksQnQuY29tbWVudEFkZD1uZXcgQnQoImNvbW1lbnQtYWRkIix7Zm9udENoYXJhY3RlcjoiXFxlYTZiIn0pLEJ0LmFsZXJ0PW5ldyBCdCgiYWxlcnQiLHtmb250Q2hhcmFjdGVyOiJcXGVhNmMifSksQnQud2FybmluZz1uZXcgQnQoIndhcm5pbmciLHtmb250Q2hhcmFjdGVyOiJcXGVhNmMifSksQnQuc2VhcmNoPW5ldyBCdCgic2VhcmNoIix7Zm9udENoYXJhY3RlcjoiXFxlYTZkIn0pLEJ0LnNlYXJjaFNhdmU9bmV3IEJ0KCJzZWFyY2gtc2F2ZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE2ZCJ9KSxCdC5sb2dPdXQ9bmV3IEJ0KCJsb2ctb3V0Iix7Zm9udENoYXJhY3RlcjoiXFxlYTZlIn0pLEJ0LnNpZ25PdXQ9bmV3IEJ0KCJzaWduLW91dCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE2ZSJ9KSxCdC5sb2dJbj1uZXcgQnQoImxvZy1pbiIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE2ZiJ9KSxCdC5zaWduSW49bmV3IEJ0KCJzaWduLWluIix7Zm9udENoYXJhY3RlcjoiXFxlYTZmIn0pLEJ0LmV5ZT1uZXcgQnQoImV5ZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE3MCJ9KSxCdC5leWVVbndhdGNoPW5ldyBCdCgiZXllLXVud2F0Y2giLHtmb250Q2hhcmFjdGVyOiJcXGVhNzAifSksQnQuZXllV2F0Y2g9bmV3IEJ0KCJleWUtd2F0Y2giLHtmb250Q2hhcmFjdGVyOiJcXGVhNzAifSksQnQuY2lyY2xlRmlsbGVkPW5ldyBCdCgiY2lyY2xlLWZpbGxlZCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE3MSJ9KSxCdC5wcmltaXRpdmVEb3Q9bmV3IEJ0KCJwcmltaXRpdmUtZG90Iix7Zm9udENoYXJhY3RlcjoiXFxlYTcxIn0pLEJ0LmNsb3NlRGlydHk9bmV3IEJ0KCJjbG9zZS1kaXJ0eSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE3MSJ9KSxCdC5kZWJ1Z0JyZWFrcG9pbnQ9bmV3IEJ0KCJkZWJ1Zy1icmVha3BvaW50Iix7Zm9udENoYXJhY3RlcjoiXFxlYTcxIn0pLEJ0LmRlYnVnQnJlYWtwb2ludERpc2FibGVkPW5ldyBCdCgiZGVidWctYnJlYWtwb2ludC1kaXNhYmxlZCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE3MSJ9KSxCdC5kZWJ1Z0hpbnQ9bmV3IEJ0KCJkZWJ1Zy1oaW50Iix7Zm9udENoYXJhY3RlcjoiXFxlYTcxIn0pLEJ0LnByaW1pdGl2ZVNxdWFyZT1uZXcgQnQoInByaW1pdGl2ZS1zcXVhcmUiLHtmb250Q2hhcmFjdGVyOiJcXGVhNzIifSksQnQuZWRpdD1uZXcgQnQoImVkaXQiLHtmb250Q2hhcmFjdGVyOiJcXGVhNzMifSksQnQucGVuY2lsPW5ldyBCdCgicGVuY2lsIix7Zm9udENoYXJhY3RlcjoiXFxlYTczIn0pLEJ0LmluZm89bmV3IEJ0KCJpbmZvIix7Zm9udENoYXJhY3RlcjoiXFxlYTc0In0pLEJ0Lmlzc3VlT3BlbmVkPW5ldyBCdCgiaXNzdWUtb3BlbmVkIix7Zm9udENoYXJhY3RlcjoiXFxlYTc0In0pLEJ0Lmdpc3RQcml2YXRlPW5ldyBCdCgiZ2lzdC1wcml2YXRlIix7Zm9udENoYXJhY3RlcjoiXFxlYTc1In0pLEJ0LmdpdEZvcmtQcml2YXRlPW5ldyBCdCgiZ2l0LWZvcmstcHJpdmF0ZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE3NSJ9KSxCdC5sb2NrPW5ldyBCdCgibG9jayIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE3NSJ9KSxCdC5taXJyb3JQcml2YXRlPW5ldyBCdCgibWlycm9yLXByaXZhdGUiLHtmb250Q2hhcmFjdGVyOiJcXGVhNzUifSksQnQuY2xvc2U9bmV3IEJ0KCJjbG9zZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE3NiJ9KSxCdC5yZW1vdmVDbG9zZT1uZXcgQnQoInJlbW92ZS1jbG9zZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE3NiJ9KSxCdC54PW5ldyBCdCgieCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE3NiJ9KSxCdC5yZXBvU3luYz1uZXcgQnQoInJlcG8tc3luYyIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE3NyJ9KSxCdC5zeW5jPW5ldyBCdCgic3luYyIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE3NyJ9KSxCdC5jbG9uZT1uZXcgQnQoImNsb25lIix7Zm9udENoYXJhY3RlcjoiXFxlYTc4In0pLEJ0LmRlc2t0b3BEb3dubG9hZD1uZXcgQnQoImRlc2t0b3AtZG93bmxvYWQiLHtmb250Q2hhcmFjdGVyOiJcXGVhNzgifSksQnQuYmVha2VyPW5ldyBCdCgiYmVha2VyIix7Zm9udENoYXJhY3RlcjoiXFxlYTc5In0pLEJ0Lm1pY3Jvc2NvcGU9bmV3IEJ0KCJtaWNyb3Njb3BlIix7Zm9udENoYXJhY3RlcjoiXFxlYTc5In0pLEJ0LnZtPW5ldyBCdCgidm0iLHtmb250Q2hhcmFjdGVyOiJcXGVhN2EifSksQnQuZGV2aWNlRGVza3RvcD1uZXcgQnQoImRldmljZS1kZXNrdG9wIix7Zm9udENoYXJhY3RlcjoiXFxlYTdhIn0pLEJ0LmZpbGU9bmV3IEJ0KCJmaWxlIix7Zm9udENoYXJhY3RlcjoiXFxlYTdiIn0pLEJ0LmZpbGVUZXh0PW5ldyBCdCgiZmlsZS10ZXh0Iix7Zm9udENoYXJhY3RlcjoiXFxlYTdiIn0pLEJ0Lm1vcmU9bmV3IEJ0KCJtb3JlIix7Zm9udENoYXJhY3RlcjoiXFxlYTdjIn0pLEJ0LmVsbGlwc2lzPW5ldyBCdCgiZWxsaXBzaXMiLHtmb250Q2hhcmFjdGVyOiJcXGVhN2MifSksQnQua2ViYWJIb3Jpem9udGFsPW5ldyBCdCgia2ViYWItaG9yaXpvbnRhbCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE3YyJ9KSxCdC5tYWlsUmVwbHk9bmV3IEJ0KCJtYWlsLXJlcGx5Iix7Zm9udENoYXJhY3RlcjoiXFxlYTdkIn0pLEJ0LnJlcGx5PW5ldyBCdCgicmVwbHkiLHtmb250Q2hhcmFjdGVyOiJcXGVhN2QifSksQnQub3JnYW5pemF0aW9uPW5ldyBCdCgib3JnYW5pemF0aW9uIix7Zm9udENoYXJhY3RlcjoiXFxlYTdlIn0pLEJ0Lm9yZ2FuaXphdGlvbkZpbGxlZD1uZXcgQnQoIm9yZ2FuaXphdGlvbi1maWxsZWQiLHtmb250Q2hhcmFjdGVyOiJcXGVhN2UifSksQnQub3JnYW5pemF0aW9uT3V0bGluZT1uZXcgQnQoIm9yZ2FuaXphdGlvbi1vdXRsaW5lIix7Zm9udENoYXJhY3RlcjoiXFxlYTdlIn0pLEJ0Lm5ld0ZpbGU9bmV3IEJ0KCJuZXctZmlsZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE3ZiJ9KSxCdC5maWxlQWRkPW5ldyBCdCgiZmlsZS1hZGQiLHtmb250Q2hhcmFjdGVyOiJcXGVhN2YifSksQnQubmV3Rm9sZGVyPW5ldyBCdCgibmV3LWZvbGRlciIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE4MCJ9KSxCdC5maWxlRGlyZWN0b3J5Q3JlYXRlPW5ldyBCdCgiZmlsZS1kaXJlY3RvcnktY3JlYXRlIix7Zm9udENoYXJhY3RlcjoiXFxlYTgwIn0pLEJ0LnRyYXNoPW5ldyBCdCgidHJhc2giLHtmb250Q2hhcmFjdGVyOiJcXGVhODEifSksQnQudHJhc2hjYW49bmV3IEJ0KCJ0cmFzaGNhbiIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE4MSJ9KSxCdC5oaXN0b3J5PW5ldyBCdCgiaGlzdG9yeSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE4MiJ9KSxCdC5jbG9jaz1uZXcgQnQoImNsb2NrIix7Zm9udENoYXJhY3RlcjoiXFxlYTgyIn0pLEJ0LmZvbGRlcj1uZXcgQnQoImZvbGRlciIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE4MyJ9KSxCdC5maWxlRGlyZWN0b3J5PW5ldyBCdCgiZmlsZS1kaXJlY3RvcnkiLHtmb250Q2hhcmFjdGVyOiJcXGVhODMifSksQnQuc3ltYm9sRm9sZGVyPW5ldyBCdCgic3ltYm9sLWZvbGRlciIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE4MyJ9KSxCdC5sb2dvR2l0aHViPW5ldyBCdCgibG9nby1naXRodWIiLHtmb250Q2hhcmFjdGVyOiJcXGVhODQifSksQnQubWFya0dpdGh1Yj1uZXcgQnQoIm1hcmstZ2l0aHViIix7Zm9udENoYXJhY3RlcjoiXFxlYTg0In0pLEJ0LmdpdGh1Yj1uZXcgQnQoImdpdGh1YiIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE4NCJ9KSxCdC50ZXJtaW5hbD1uZXcgQnQoInRlcm1pbmFsIix7Zm9udENoYXJhY3RlcjoiXFxlYTg1In0pLEJ0LmNvbnNvbGU9bmV3IEJ0KCJjb25zb2xlIix7Zm9udENoYXJhY3RlcjoiXFxlYTg1In0pLEJ0LnJlcGw9bmV3IEJ0KCJyZXBsIix7Zm9udENoYXJhY3RlcjoiXFxlYTg1In0pLEJ0LnphcD1uZXcgQnQoInphcCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE4NiJ9KSxCdC5zeW1ib2xFdmVudD1uZXcgQnQoInN5bWJvbC1ldmVudCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE4NiJ9KSxCdC5lcnJvcj1uZXcgQnQoImVycm9yIix7Zm9udENoYXJhY3RlcjoiXFxlYTg3In0pLEJ0LnN0b3A9bmV3IEJ0KCJzdG9wIix7Zm9udENoYXJhY3RlcjoiXFxlYTg3In0pLEJ0LnZhcmlhYmxlPW5ldyBCdCgidmFyaWFibGUiLHtmb250Q2hhcmFjdGVyOiJcXGVhODgifSksQnQuc3ltYm9sVmFyaWFibGU9bmV3IEJ0KCJzeW1ib2wtdmFyaWFibGUiLHtmb250Q2hhcmFjdGVyOiJcXGVhODgifSksQnQuYXJyYXk9bmV3IEJ0KCJhcnJheSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE4YSJ9KSxCdC5zeW1ib2xBcnJheT1uZXcgQnQoInN5bWJvbC1hcnJheSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE4YSJ9KSxCdC5zeW1ib2xNb2R1bGU9bmV3IEJ0KCJzeW1ib2wtbW9kdWxlIix7Zm9udENoYXJhY3RlcjoiXFxlYThiIn0pLEJ0LnN5bWJvbFBhY2thZ2U9bmV3IEJ0KCJzeW1ib2wtcGFja2FnZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE4YiJ9KSxCdC5zeW1ib2xOYW1lc3BhY2U9bmV3IEJ0KCJzeW1ib2wtbmFtZXNwYWNlIix7Zm9udENoYXJhY3RlcjoiXFxlYThiIn0pLEJ0LnN5bWJvbE9iamVjdD1uZXcgQnQoInN5bWJvbC1vYmplY3QiLHtmb250Q2hhcmFjdGVyOiJcXGVhOGIifSksQnQuc3ltYm9sTWV0aG9kPW5ldyBCdCgic3ltYm9sLW1ldGhvZCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE4YyJ9KSxCdC5zeW1ib2xGdW5jdGlvbj1uZXcgQnQoInN5bWJvbC1mdW5jdGlvbiIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE4YyJ9KSxCdC5zeW1ib2xDb25zdHJ1Y3Rvcj1uZXcgQnQoInN5bWJvbC1jb25zdHJ1Y3RvciIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE4YyJ9KSxCdC5zeW1ib2xCb29sZWFuPW5ldyBCdCgic3ltYm9sLWJvb2xlYW4iLHtmb250Q2hhcmFjdGVyOiJcXGVhOGYifSksQnQuc3ltYm9sTnVsbD1uZXcgQnQoInN5bWJvbC1udWxsIix7Zm9udENoYXJhY3RlcjoiXFxlYThmIn0pLEJ0LnN5bWJvbE51bWVyaWM9bmV3IEJ0KCJzeW1ib2wtbnVtZXJpYyIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE5MCJ9KSxCdC5zeW1ib2xOdW1iZXI9bmV3IEJ0KCJzeW1ib2wtbnVtYmVyIix7Zm9udENoYXJhY3RlcjoiXFxlYTkwIn0pLEJ0LnN5bWJvbFN0cnVjdHVyZT1uZXcgQnQoInN5bWJvbC1zdHJ1Y3R1cmUiLHtmb250Q2hhcmFjdGVyOiJcXGVhOTEifSksQnQuc3ltYm9sU3RydWN0PW5ldyBCdCgic3ltYm9sLXN0cnVjdCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE5MSJ9KSxCdC5zeW1ib2xQYXJhbWV0ZXI9bmV3IEJ0KCJzeW1ib2wtcGFyYW1ldGVyIix7Zm9udENoYXJhY3RlcjoiXFxlYTkyIn0pLEJ0LnN5bWJvbFR5cGVQYXJhbWV0ZXI9bmV3IEJ0KCJzeW1ib2wtdHlwZS1wYXJhbWV0ZXIiLHtmb250Q2hhcmFjdGVyOiJcXGVhOTIifSksQnQuc3ltYm9sS2V5PW5ldyBCdCgic3ltYm9sLWtleSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE5MyJ9KSxCdC5zeW1ib2xUZXh0PW5ldyBCdCgic3ltYm9sLXRleHQiLHtmb250Q2hhcmFjdGVyOiJcXGVhOTMifSksQnQuc3ltYm9sUmVmZXJlbmNlPW5ldyBCdCgic3ltYm9sLXJlZmVyZW5jZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE5NCJ9KSxCdC5nb1RvRmlsZT1uZXcgQnQoImdvLXRvLWZpbGUiLHtmb250Q2hhcmFjdGVyOiJcXGVhOTQifSksQnQuc3ltYm9sRW51bT1uZXcgQnQoInN5bWJvbC1lbnVtIix7Zm9udENoYXJhY3RlcjoiXFxlYTk1In0pLEJ0LnN5bWJvbFZhbHVlPW5ldyBCdCgic3ltYm9sLXZhbHVlIix7Zm9udENoYXJhY3RlcjoiXFxlYTk1In0pLEJ0LnN5bWJvbFJ1bGVyPW5ldyBCdCgic3ltYm9sLXJ1bGVyIix7Zm9udENoYXJhY3RlcjoiXFxlYTk2In0pLEJ0LnN5bWJvbFVuaXQ9bmV3IEJ0KCJzeW1ib2wtdW5pdCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE5NiJ9KSxCdC5hY3RpdmF0ZUJyZWFrcG9pbnRzPW5ldyBCdCgiYWN0aXZhdGUtYnJlYWtwb2ludHMiLHtmb250Q2hhcmFjdGVyOiJcXGVhOTcifSksQnQuYXJjaGl2ZT1uZXcgQnQoImFyY2hpdmUiLHtmb250Q2hhcmFjdGVyOiJcXGVhOTgifSksQnQuYXJyb3dCb3RoPW5ldyBCdCgiYXJyb3ctYm90aCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE5OSJ9KSxCdC5hcnJvd0Rvd249bmV3IEJ0KCJhcnJvdy1kb3duIix7Zm9udENoYXJhY3RlcjoiXFxlYTlhIn0pLEJ0LmFycm93TGVmdD1uZXcgQnQoImFycm93LWxlZnQiLHtmb250Q2hhcmFjdGVyOiJcXGVhOWIifSksQnQuYXJyb3dSaWdodD1uZXcgQnQoImFycm93LXJpZ2h0Iix7Zm9udENoYXJhY3RlcjoiXFxlYTljIn0pLEJ0LmFycm93U21hbGxEb3duPW5ldyBCdCgiYXJyb3ctc21hbGwtZG93biIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE5ZCJ9KSxCdC5hcnJvd1NtYWxsTGVmdD1uZXcgQnQoImFycm93LXNtYWxsLWxlZnQiLHtmb250Q2hhcmFjdGVyOiJcXGVhOWUifSksQnQuYXJyb3dTbWFsbFJpZ2h0PW5ldyBCdCgiYXJyb3ctc21hbGwtcmlnaHQiLHtmb250Q2hhcmFjdGVyOiJcXGVhOWYifSksQnQuYXJyb3dTbWFsbFVwPW5ldyBCdCgiYXJyb3ctc21hbGwtdXAiLHtmb250Q2hhcmFjdGVyOiJcXGVhYTAifSksQnQuYXJyb3dVcD1uZXcgQnQoImFycm93LXVwIix7Zm9udENoYXJhY3RlcjoiXFxlYWExIn0pLEJ0LmJlbGw9bmV3IEJ0KCJiZWxsIix7Zm9udENoYXJhY3RlcjoiXFxlYWEyIn0pLEJ0LmJvbGQ9bmV3IEJ0KCJib2xkIix7Zm9udENoYXJhY3RlcjoiXFxlYWEzIn0pLEJ0LmJvb2s9bmV3IEJ0KCJib29rIix7Zm9udENoYXJhY3RlcjoiXFxlYWE0In0pLEJ0LmJvb2ttYXJrPW5ldyBCdCgiYm9va21hcmsiLHtmb250Q2hhcmFjdGVyOiJcXGVhYTUifSksQnQuZGVidWdCcmVha3BvaW50Q29uZGl0aW9uYWxVbnZlcmlmaWVkPW5ldyBCdCgiZGVidWctYnJlYWtwb2ludC1jb25kaXRpb25hbC11bnZlcmlmaWVkIix7Zm9udENoYXJhY3RlcjoiXFxlYWE2In0pLEJ0LmRlYnVnQnJlYWtwb2ludENvbmRpdGlvbmFsPW5ldyBCdCgiZGVidWctYnJlYWtwb2ludC1jb25kaXRpb25hbCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFhNyJ9KSxCdC5kZWJ1Z0JyZWFrcG9pbnRDb25kaXRpb25hbERpc2FibGVkPW5ldyBCdCgiZGVidWctYnJlYWtwb2ludC1jb25kaXRpb25hbC1kaXNhYmxlZCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFhNyJ9KSxCdC5kZWJ1Z0JyZWFrcG9pbnREYXRhVW52ZXJpZmllZD1uZXcgQnQoImRlYnVnLWJyZWFrcG9pbnQtZGF0YS11bnZlcmlmaWVkIix7Zm9udENoYXJhY3RlcjoiXFxlYWE4In0pLEJ0LmRlYnVnQnJlYWtwb2ludERhdGE9bmV3IEJ0KCJkZWJ1Zy1icmVha3BvaW50LWRhdGEiLHtmb250Q2hhcmFjdGVyOiJcXGVhYTkifSksQnQuZGVidWdCcmVha3BvaW50RGF0YURpc2FibGVkPW5ldyBCdCgiZGVidWctYnJlYWtwb2ludC1kYXRhLWRpc2FibGVkIix7Zm9udENoYXJhY3RlcjoiXFxlYWE5In0pLEJ0LmRlYnVnQnJlYWtwb2ludExvZ1VudmVyaWZpZWQ9bmV3IEJ0KCJkZWJ1Zy1icmVha3BvaW50LWxvZy11bnZlcmlmaWVkIix7Zm9udENoYXJhY3RlcjoiXFxlYWFhIn0pLEJ0LmRlYnVnQnJlYWtwb2ludExvZz1uZXcgQnQoImRlYnVnLWJyZWFrcG9pbnQtbG9nIix7Zm9udENoYXJhY3RlcjoiXFxlYWFiIn0pLEJ0LmRlYnVnQnJlYWtwb2ludExvZ0Rpc2FibGVkPW5ldyBCdCgiZGVidWctYnJlYWtwb2ludC1sb2ctZGlzYWJsZWQiLHtmb250Q2hhcmFjdGVyOiJcXGVhYWIifSksQnQuYnJpZWZjYXNlPW5ldyBCdCgiYnJpZWZjYXNlIix7Zm9udENoYXJhY3RlcjoiXFxlYWFjIn0pLEJ0LmJyb2FkY2FzdD1uZXcgQnQoImJyb2FkY2FzdCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFhZCJ9KSxCdC5icm93c2VyPW5ldyBCdCgiYnJvd3NlciIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFhZSJ9KSxCdC5idWc9bmV3IEJ0KCJidWciLHtmb250Q2hhcmFjdGVyOiJcXGVhYWYifSksQnQuY2FsZW5kYXI9bmV3IEJ0KCJjYWxlbmRhciIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFiMCJ9KSxCdC5jYXNlU2Vuc2l0aXZlPW5ldyBCdCgiY2FzZS1zZW5zaXRpdmUiLHtmb250Q2hhcmFjdGVyOiJcXGVhYjEifSksQnQuY2hlY2s9bmV3IEJ0KCJjaGVjayIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFiMiJ9KSxCdC5jaGVja2xpc3Q9bmV3IEJ0KCJjaGVja2xpc3QiLHtmb250Q2hhcmFjdGVyOiJcXGVhYjMifSksQnQuY2hldnJvbkRvd249bmV3IEJ0KCJjaGV2cm9uLWRvd24iLHtmb250Q2hhcmFjdGVyOiJcXGVhYjQifSksQnQuZHJvcERvd25CdXR0b249bmV3IEJ0KCJkcm9wLWRvd24tYnV0dG9uIixCdC5jaGV2cm9uRG93bi5kZWZpbml0aW9uKSxCdC5jaGV2cm9uTGVmdD1uZXcgQnQoImNoZXZyb24tbGVmdCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFiNSJ9KSxCdC5jaGV2cm9uUmlnaHQ9bmV3IEJ0KCJjaGV2cm9uLXJpZ2h0Iix7Zm9udENoYXJhY3RlcjoiXFxlYWI2In0pLEJ0LmNoZXZyb25VcD1uZXcgQnQoImNoZXZyb24tdXAiLHtmb250Q2hhcmFjdGVyOiJcXGVhYjcifSksQnQuY2hyb21lQ2xvc2U9bmV3IEJ0KCJjaHJvbWUtY2xvc2UiLHtmb250Q2hhcmFjdGVyOiJcXGVhYjgifSksQnQuY2hyb21lTWF4aW1pemU9bmV3IEJ0KCJjaHJvbWUtbWF4aW1pemUiLHtmb250Q2hhcmFjdGVyOiJcXGVhYjkifSksQnQuY2hyb21lTWluaW1pemU9bmV3IEJ0KCJjaHJvbWUtbWluaW1pemUiLHtmb250Q2hhcmFjdGVyOiJcXGVhYmEifSksQnQuY2hyb21lUmVzdG9yZT1uZXcgQnQoImNocm9tZS1yZXN0b3JlIix7Zm9udENoYXJhY3RlcjoiXFxlYWJiIn0pLEJ0LmNpcmNsZU91dGxpbmU9bmV3IEJ0KCJjaXJjbGUtb3V0bGluZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFiYyJ9KSxCdC5kZWJ1Z0JyZWFrcG9pbnRVbnZlcmlmaWVkPW5ldyBCdCgiZGVidWctYnJlYWtwb2ludC11bnZlcmlmaWVkIix7Zm9udENoYXJhY3RlcjoiXFxlYWJjIn0pLEJ0LmNpcmNsZVNsYXNoPW5ldyBCdCgiY2lyY2xlLXNsYXNoIix7Zm9udENoYXJhY3RlcjoiXFxlYWJkIn0pLEJ0LmNpcmN1aXRCb2FyZD1uZXcgQnQoImNpcmN1aXQtYm9hcmQiLHtmb250Q2hhcmFjdGVyOiJcXGVhYmUifSksQnQuY2xlYXJBbGw9bmV3IEJ0KCJjbGVhci1hbGwiLHtmb250Q2hhcmFjdGVyOiJcXGVhYmYifSksQnQuY2xpcHB5PW5ldyBCdCgiY2xpcHB5Iix7Zm9udENoYXJhY3RlcjoiXFxlYWMwIn0pLEJ0LmNsb3NlQWxsPW5ldyBCdCgiY2xvc2UtYWxsIix7Zm9udENoYXJhY3RlcjoiXFxlYWMxIn0pLEJ0LmNsb3VkRG93bmxvYWQ9bmV3IEJ0KCJjbG91ZC1kb3dubG9hZCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFjMiJ9KSxCdC5jbG91ZFVwbG9hZD1uZXcgQnQoImNsb3VkLXVwbG9hZCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFjMyJ9KSxCdC5jb2RlPW5ldyBCdCgiY29kZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFjNCJ9KSxCdC5jb2xsYXBzZUFsbD1uZXcgQnQoImNvbGxhcHNlLWFsbCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFjNSJ9KSxCdC5jb2xvck1vZGU9bmV3IEJ0KCJjb2xvci1tb2RlIix7Zm9udENoYXJhY3RlcjoiXFxlYWM2In0pLEJ0LmNvbW1lbnREaXNjdXNzaW9uPW5ldyBCdCgiY29tbWVudC1kaXNjdXNzaW9uIix7Zm9udENoYXJhY3RlcjoiXFxlYWM3In0pLEJ0LmNvbXBhcmVDaGFuZ2VzPW5ldyBCdCgiY29tcGFyZS1jaGFuZ2VzIix7Zm9udENoYXJhY3RlcjoiXFxlYWZkIn0pLEJ0LmNyZWRpdENhcmQ9bmV3IEJ0KCJjcmVkaXQtY2FyZCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFjOSJ9KSxCdC5kYXNoPW5ldyBCdCgiZGFzaCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFjYyJ9KSxCdC5kYXNoYm9hcmQ9bmV3IEJ0KCJkYXNoYm9hcmQiLHtmb250Q2hhcmFjdGVyOiJcXGVhY2QifSksQnQuZGF0YWJhc2U9bmV3IEJ0KCJkYXRhYmFzZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFjZSJ9KSxCdC5kZWJ1Z0NvbnRpbnVlPW5ldyBCdCgiZGVidWctY29udGludWUiLHtmb250Q2hhcmFjdGVyOiJcXGVhY2YifSksQnQuZGVidWdEaXNjb25uZWN0PW5ldyBCdCgiZGVidWctZGlzY29ubmVjdCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFkMCJ9KSxCdC5kZWJ1Z1BhdXNlPW5ldyBCdCgiZGVidWctcGF1c2UiLHtmb250Q2hhcmFjdGVyOiJcXGVhZDEifSksQnQuZGVidWdSZXN0YXJ0PW5ldyBCdCgiZGVidWctcmVzdGFydCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFkMiJ9KSxCdC5kZWJ1Z1N0YXJ0PW5ldyBCdCgiZGVidWctc3RhcnQiLHtmb250Q2hhcmFjdGVyOiJcXGVhZDMifSksQnQuZGVidWdTdGVwSW50bz1uZXcgQnQoImRlYnVnLXN0ZXAtaW50byIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFkNCJ9KSxCdC5kZWJ1Z1N0ZXBPdXQ9bmV3IEJ0KCJkZWJ1Zy1zdGVwLW91dCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFkNSJ9KSxCdC5kZWJ1Z1N0ZXBPdmVyPW5ldyBCdCgiZGVidWctc3RlcC1vdmVyIix7Zm9udENoYXJhY3RlcjoiXFxlYWQ2In0pLEJ0LmRlYnVnU3RvcD1uZXcgQnQoImRlYnVnLXN0b3AiLHtmb250Q2hhcmFjdGVyOiJcXGVhZDcifSksQnQuZGVidWc9bmV3IEJ0KCJkZWJ1ZyIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFkOCJ9KSxCdC5kZXZpY2VDYW1lcmFWaWRlbz1uZXcgQnQoImRldmljZS1jYW1lcmEtdmlkZW8iLHtmb250Q2hhcmFjdGVyOiJcXGVhZDkifSksQnQuZGV2aWNlQ2FtZXJhPW5ldyBCdCgiZGV2aWNlLWNhbWVyYSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFkYSJ9KSxCdC5kZXZpY2VNb2JpbGU9bmV3IEJ0KCJkZXZpY2UtbW9iaWxlIix7Zm9udENoYXJhY3RlcjoiXFxlYWRiIn0pLEJ0LmRpZmZBZGRlZD1uZXcgQnQoImRpZmYtYWRkZWQiLHtmb250Q2hhcmFjdGVyOiJcXGVhZGMifSksQnQuZGlmZklnbm9yZWQ9bmV3IEJ0KCJkaWZmLWlnbm9yZWQiLHtmb250Q2hhcmFjdGVyOiJcXGVhZGQifSksQnQuZGlmZk1vZGlmaWVkPW5ldyBCdCgiZGlmZi1tb2RpZmllZCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFkZSJ9KSxCdC5kaWZmUmVtb3ZlZD1uZXcgQnQoImRpZmYtcmVtb3ZlZCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFkZiJ9KSxCdC5kaWZmUmVuYW1lZD1uZXcgQnQoImRpZmYtcmVuYW1lZCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFlMCJ9KSxCdC5kaWZmPW5ldyBCdCgiZGlmZiIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFlMSJ9KSxCdC5kaXNjYXJkPW5ldyBCdCgiZGlzY2FyZCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFlMiJ9KSxCdC5lZGl0b3JMYXlvdXQ9bmV3IEJ0KCJlZGl0b3ItbGF5b3V0Iix7Zm9udENoYXJhY3RlcjoiXFxlYWUzIn0pLEJ0LmVtcHR5V2luZG93PW5ldyBCdCgiZW1wdHktd2luZG93Iix7Zm9udENoYXJhY3RlcjoiXFxlYWU0In0pLEJ0LmV4Y2x1ZGU9bmV3IEJ0KCJleGNsdWRlIix7Zm9udENoYXJhY3RlcjoiXFxlYWU1In0pLEJ0LmV4dGVuc2lvbnM9bmV3IEJ0KCJleHRlbnNpb25zIix7Zm9udENoYXJhY3RlcjoiXFxlYWU2In0pLEJ0LmV5ZUNsb3NlZD1uZXcgQnQoImV5ZS1jbG9zZWQiLHtmb250Q2hhcmFjdGVyOiJcXGVhZTcifSksQnQuZmlsZUJpbmFyeT1uZXcgQnQoImZpbGUtYmluYXJ5Iix7Zm9udENoYXJhY3RlcjoiXFxlYWU4In0pLEJ0LmZpbGVDb2RlPW5ldyBCdCgiZmlsZS1jb2RlIix7Zm9udENoYXJhY3RlcjoiXFxlYWU5In0pLEJ0LmZpbGVNZWRpYT1uZXcgQnQoImZpbGUtbWVkaWEiLHtmb250Q2hhcmFjdGVyOiJcXGVhZWEifSksQnQuZmlsZVBkZj1uZXcgQnQoImZpbGUtcGRmIix7Zm9udENoYXJhY3RlcjoiXFxlYWViIn0pLEJ0LmZpbGVTdWJtb2R1bGU9bmV3IEJ0KCJmaWxlLXN1Ym1vZHVsZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFlYyJ9KSxCdC5maWxlU3ltbGlua0RpcmVjdG9yeT1uZXcgQnQoImZpbGUtc3ltbGluay1kaXJlY3RvcnkiLHtmb250Q2hhcmFjdGVyOiJcXGVhZWQifSksQnQuZmlsZVN5bWxpbmtGaWxlPW5ldyBCdCgiZmlsZS1zeW1saW5rLWZpbGUiLHtmb250Q2hhcmFjdGVyOiJcXGVhZWUifSksQnQuZmlsZVppcD1uZXcgQnQoImZpbGUtemlwIix7Zm9udENoYXJhY3RlcjoiXFxlYWVmIn0pLEJ0LmZpbGVzPW5ldyBCdCgiZmlsZXMiLHtmb250Q2hhcmFjdGVyOiJcXGVhZjAifSksQnQuZmlsdGVyPW5ldyBCdCgiZmlsdGVyIix7Zm9udENoYXJhY3RlcjoiXFxlYWYxIn0pLEJ0LmZsYW1lPW5ldyBCdCgiZmxhbWUiLHtmb250Q2hhcmFjdGVyOiJcXGVhZjIifSksQnQuZm9sZERvd249bmV3IEJ0KCJmb2xkLWRvd24iLHtmb250Q2hhcmFjdGVyOiJcXGVhZjMifSksQnQuZm9sZFVwPW5ldyBCdCgiZm9sZC11cCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFmNCJ9KSxCdC5mb2xkPW5ldyBCdCgiZm9sZCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFmNSJ9KSxCdC5mb2xkZXJBY3RpdmU9bmV3IEJ0KCJmb2xkZXItYWN0aXZlIix7Zm9udENoYXJhY3RlcjoiXFxlYWY2In0pLEJ0LmZvbGRlck9wZW5lZD1uZXcgQnQoImZvbGRlci1vcGVuZWQiLHtmb250Q2hhcmFjdGVyOiJcXGVhZjcifSksQnQuZ2Vhcj1uZXcgQnQoImdlYXIiLHtmb250Q2hhcmFjdGVyOiJcXGVhZjgifSksQnQuZ2lmdD1uZXcgQnQoImdpZnQiLHtmb250Q2hhcmFjdGVyOiJcXGVhZjkifSksQnQuZ2lzdFNlY3JldD1uZXcgQnQoImdpc3Qtc2VjcmV0Iix7Zm9udENoYXJhY3RlcjoiXFxlYWZhIn0pLEJ0Lmdpc3Q9bmV3IEJ0KCJnaXN0Iix7Zm9udENoYXJhY3RlcjoiXFxlYWZiIn0pLEJ0LmdpdENvbW1pdD1uZXcgQnQoImdpdC1jb21taXQiLHtmb250Q2hhcmFjdGVyOiJcXGVhZmMifSksQnQuZ2l0Q29tcGFyZT1uZXcgQnQoImdpdC1jb21wYXJlIix7Zm9udENoYXJhY3RlcjoiXFxlYWZkIn0pLEJ0LmdpdE1lcmdlPW5ldyBCdCgiZ2l0LW1lcmdlIix7Zm9udENoYXJhY3RlcjoiXFxlYWZlIn0pLEJ0LmdpdGh1YkFjdGlvbj1uZXcgQnQoImdpdGh1Yi1hY3Rpb24iLHtmb250Q2hhcmFjdGVyOiJcXGVhZmYifSksQnQuZ2l0aHViQWx0PW5ldyBCdCgiZ2l0aHViLWFsdCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWIwMCJ9KSxCdC5nbG9iZT1uZXcgQnQoImdsb2JlIix7Zm9udENoYXJhY3RlcjoiXFxlYjAxIn0pLEJ0LmdyYWJiZXI9bmV3IEJ0KCJncmFiYmVyIix7Zm9udENoYXJhY3RlcjoiXFxlYjAyIn0pLEJ0LmdyYXBoPW5ldyBCdCgiZ3JhcGgiLHtmb250Q2hhcmFjdGVyOiJcXGViMDMifSksQnQuZ3JpcHBlcj1uZXcgQnQoImdyaXBwZXIiLHtmb250Q2hhcmFjdGVyOiJcXGViMDQifSksQnQuaGVhcnQ9bmV3IEJ0KCJoZWFydCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWIwNSJ9KSxCdC5ob21lPW5ldyBCdCgiaG9tZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWIwNiJ9KSxCdC5ob3Jpem9udGFsUnVsZT1uZXcgQnQoImhvcml6b250YWwtcnVsZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWIwNyJ9KSxCdC5odWJvdD1uZXcgQnQoImh1Ym90Iix7Zm9udENoYXJhY3RlcjoiXFxlYjA4In0pLEJ0LmluYm94PW5ldyBCdCgiaW5ib3giLHtmb250Q2hhcmFjdGVyOiJcXGViMDkifSksQnQuaXNzdWVDbG9zZWQ9bmV3IEJ0KCJpc3N1ZS1jbG9zZWQiLHtmb250Q2hhcmFjdGVyOiJcXGViYTQifSksQnQuaXNzdWVSZW9wZW5lZD1uZXcgQnQoImlzc3VlLXJlb3BlbmVkIix7Zm9udENoYXJhY3RlcjoiXFxlYjBiIn0pLEJ0Lmlzc3Vlcz1uZXcgQnQoImlzc3VlcyIse2ZvbnRDaGFyYWN0ZXI6IlxcZWIwYyJ9KSxCdC5pdGFsaWM9bmV3IEJ0KCJpdGFsaWMiLHtmb250Q2hhcmFjdGVyOiJcXGViMGQifSksQnQuamVyc2V5PW5ldyBCdCgiamVyc2V5Iix7Zm9udENoYXJhY3RlcjoiXFxlYjBlIn0pLEJ0Lmpzb249bmV3IEJ0KCJqc29uIix7Zm9udENoYXJhY3RlcjoiXFxlYjBmIn0pLEJ0LmtlYmFiVmVydGljYWw9bmV3IEJ0KCJrZWJhYi12ZXJ0aWNhbCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWIxMCJ9KSxCdC5rZXk9bmV3IEJ0KCJrZXkiLHtmb250Q2hhcmFjdGVyOiJcXGViMTEifSksQnQubGF3PW5ldyBCdCgibGF3Iix7Zm9udENoYXJhY3RlcjoiXFxlYjEyIn0pLEJ0LmxpZ2h0YnVsYkF1dG9maXg9bmV3IEJ0KCJsaWdodGJ1bGItYXV0b2ZpeCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWIxMyJ9KSxCdC5saW5rRXh0ZXJuYWw9bmV3IEJ0KCJsaW5rLWV4dGVybmFsIix7Zm9udENoYXJhY3RlcjoiXFxlYjE0In0pLEJ0Lmxpbms9bmV3IEJ0KCJsaW5rIix7Zm9udENoYXJhY3RlcjoiXFxlYjE1In0pLEJ0Lmxpc3RPcmRlcmVkPW5ldyBCdCgibGlzdC1vcmRlcmVkIix7Zm9udENoYXJhY3RlcjoiXFxlYjE2In0pLEJ0Lmxpc3RVbm9yZGVyZWQ9bmV3IEJ0KCJsaXN0LXVub3JkZXJlZCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWIxNyJ9KSxCdC5saXZlU2hhcmU9bmV3IEJ0KCJsaXZlLXNoYXJlIix7Zm9udENoYXJhY3RlcjoiXFxlYjE4In0pLEJ0LmxvYWRpbmc9bmV3IEJ0KCJsb2FkaW5nIix7Zm9udENoYXJhY3RlcjoiXFxlYjE5In0pLEJ0LmxvY2F0aW9uPW5ldyBCdCgibG9jYXRpb24iLHtmb250Q2hhcmFjdGVyOiJcXGViMWEifSksQnQubWFpbFJlYWQ9bmV3IEJ0KCJtYWlsLXJlYWQiLHtmb250Q2hhcmFjdGVyOiJcXGViMWIifSksQnQubWFpbD1uZXcgQnQoIm1haWwiLHtmb250Q2hhcmFjdGVyOiJcXGViMWMifSksQnQubWFya2Rvd249bmV3IEJ0KCJtYXJrZG93biIse2ZvbnRDaGFyYWN0ZXI6IlxcZWIxZCJ9KSxCdC5tZWdhcGhvbmU9bmV3IEJ0KCJtZWdhcGhvbmUiLHtmb250Q2hhcmFjdGVyOiJcXGViMWUifSksQnQubWVudGlvbj1uZXcgQnQoIm1lbnRpb24iLHtmb250Q2hhcmFjdGVyOiJcXGViMWYifSksQnQubWlsZXN0b25lPW5ldyBCdCgibWlsZXN0b25lIix7Zm9udENoYXJhY3RlcjoiXFxlYjIwIn0pLEJ0Lm1vcnRhckJvYXJkPW5ldyBCdCgibW9ydGFyLWJvYXJkIix7Zm9udENoYXJhY3RlcjoiXFxlYjIxIn0pLEJ0Lm1vdmU9bmV3IEJ0KCJtb3ZlIix7Zm9udENoYXJhY3RlcjoiXFxlYjIyIn0pLEJ0Lm11bHRpcGxlV2luZG93cz1uZXcgQnQoIm11bHRpcGxlLXdpbmRvd3MiLHtmb250Q2hhcmFjdGVyOiJcXGViMjMifSksQnQubXV0ZT1uZXcgQnQoIm11dGUiLHtmb250Q2hhcmFjdGVyOiJcXGViMjQifSksQnQubm9OZXdsaW5lPW5ldyBCdCgibm8tbmV3bGluZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWIyNSJ9KSxCdC5ub3RlPW5ldyBCdCgibm90ZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWIyNiJ9KSxCdC5vY3RvZmFjZT1uZXcgQnQoIm9jdG9mYWNlIix7Zm9udENoYXJhY3RlcjoiXFxlYjI3In0pLEJ0Lm9wZW5QcmV2aWV3PW5ldyBCdCgib3Blbi1wcmV2aWV3Iix7Zm9udENoYXJhY3RlcjoiXFxlYjI4In0pLEJ0LnBhY2thZ2VfPW5ldyBCdCgicGFja2FnZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWIyOSJ9KSxCdC5wYWludGNhbj1uZXcgQnQoInBhaW50Y2FuIix7Zm9udENoYXJhY3RlcjoiXFxlYjJhIn0pLEJ0LnBpbj1uZXcgQnQoInBpbiIse2ZvbnRDaGFyYWN0ZXI6IlxcZWIyYiJ9KSxCdC5wbGF5PW5ldyBCdCgicGxheSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWIyYyJ9KSxCdC5ydW49bmV3IEJ0KCJydW4iLHtmb250Q2hhcmFjdGVyOiJcXGViMmMifSksQnQucGx1Zz1uZXcgQnQoInBsdWciLHtmb250Q2hhcmFjdGVyOiJcXGViMmQifSksQnQucHJlc2VydmVDYXNlPW5ldyBCdCgicHJlc2VydmUtY2FzZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWIyZSJ9KSxCdC5wcmV2aWV3PW5ldyBCdCgicHJldmlldyIse2ZvbnRDaGFyYWN0ZXI6IlxcZWIyZiJ9KSxCdC5wcm9qZWN0PW5ldyBCdCgicHJvamVjdCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWIzMCJ9KSxCdC5wdWxzZT1uZXcgQnQoInB1bHNlIix7Zm9udENoYXJhY3RlcjoiXFxlYjMxIn0pLEJ0LnF1ZXN0aW9uPW5ldyBCdCgicXVlc3Rpb24iLHtmb250Q2hhcmFjdGVyOiJcXGViMzIifSksQnQucXVvdGU9bmV3IEJ0KCJxdW90ZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWIzMyJ9KSxCdC5yYWRpb1Rvd2VyPW5ldyBCdCgicmFkaW8tdG93ZXIiLHtmb250Q2hhcmFjdGVyOiJcXGViMzQifSksQnQucmVhY3Rpb25zPW5ldyBCdCgicmVhY3Rpb25zIix7Zm9udENoYXJhY3RlcjoiXFxlYjM1In0pLEJ0LnJlZmVyZW5jZXM9bmV3IEJ0KCJyZWZlcmVuY2VzIix7Zm9udENoYXJhY3RlcjoiXFxlYjM2In0pLEJ0LnJlZnJlc2g9bmV3IEJ0KCJyZWZyZXNoIix7Zm9udENoYXJhY3RlcjoiXFxlYjM3In0pLEJ0LnJlZ2V4PW5ldyBCdCgicmVnZXgiLHtmb250Q2hhcmFjdGVyOiJcXGViMzgifSksQnQucmVtb3RlRXhwbG9yZXI9bmV3IEJ0KCJyZW1vdGUtZXhwbG9yZXIiLHtmb250Q2hhcmFjdGVyOiJcXGViMzkifSksQnQucmVtb3RlPW5ldyBCdCgicmVtb3RlIix7Zm9udENoYXJhY3RlcjoiXFxlYjNhIn0pLEJ0LnJlbW92ZT1uZXcgQnQoInJlbW92ZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWIzYiJ9KSxCdC5yZXBsYWNlQWxsPW5ldyBCdCgicmVwbGFjZS1hbGwiLHtmb250Q2hhcmFjdGVyOiJcXGViM2MifSksQnQucmVwbGFjZT1uZXcgQnQoInJlcGxhY2UiLHtmb250Q2hhcmFjdGVyOiJcXGViM2QifSksQnQucmVwb0Nsb25lPW5ldyBCdCgicmVwby1jbG9uZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWIzZSJ9KSxCdC5yZXBvRm9yY2VQdXNoPW5ldyBCdCgicmVwby1mb3JjZS1wdXNoIix7Zm9udENoYXJhY3RlcjoiXFxlYjNmIn0pLEJ0LnJlcG9QdWxsPW5ldyBCdCgicmVwby1wdWxsIix7Zm9udENoYXJhY3RlcjoiXFxlYjQwIn0pLEJ0LnJlcG9QdXNoPW5ldyBCdCgicmVwby1wdXNoIix7Zm9udENoYXJhY3RlcjoiXFxlYjQxIn0pLEJ0LnJlcG9ydD1uZXcgQnQoInJlcG9ydCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI0MiJ9KSxCdC5yZXF1ZXN0Q2hhbmdlcz1uZXcgQnQoInJlcXVlc3QtY2hhbmdlcyIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI0MyJ9KSxCdC5yb2NrZXQ9bmV3IEJ0KCJyb2NrZXQiLHtmb250Q2hhcmFjdGVyOiJcXGViNDQifSksQnQucm9vdEZvbGRlck9wZW5lZD1uZXcgQnQoInJvb3QtZm9sZGVyLW9wZW5lZCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI0NSJ9KSxCdC5yb290Rm9sZGVyPW5ldyBCdCgicm9vdC1mb2xkZXIiLHtmb250Q2hhcmFjdGVyOiJcXGViNDYifSksQnQucnNzPW5ldyBCdCgicnNzIix7Zm9udENoYXJhY3RlcjoiXFxlYjQ3In0pLEJ0LnJ1Ynk9bmV3IEJ0KCJydWJ5Iix7Zm9udENoYXJhY3RlcjoiXFxlYjQ4In0pLEJ0LnNhdmVBbGw9bmV3IEJ0KCJzYXZlLWFsbCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI0OSJ9KSxCdC5zYXZlQXM9bmV3IEJ0KCJzYXZlLWFzIix7Zm9udENoYXJhY3RlcjoiXFxlYjRhIn0pLEJ0LnNhdmU9bmV3IEJ0KCJzYXZlIix7Zm9udENoYXJhY3RlcjoiXFxlYjRiIn0pLEJ0LnNjcmVlbkZ1bGw9bmV3IEJ0KCJzY3JlZW4tZnVsbCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI0YyJ9KSxCdC5zY3JlZW5Ob3JtYWw9bmV3IEJ0KCJzY3JlZW4tbm9ybWFsIix7Zm9udENoYXJhY3RlcjoiXFxlYjRkIn0pLEJ0LnNlYXJjaFN0b3A9bmV3IEJ0KCJzZWFyY2gtc3RvcCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI0ZSJ9KSxCdC5zZXJ2ZXI9bmV3IEJ0KCJzZXJ2ZXIiLHtmb250Q2hhcmFjdGVyOiJcXGViNTAifSksQnQuc2V0dGluZ3NHZWFyPW5ldyBCdCgic2V0dGluZ3MtZ2VhciIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI1MSJ9KSxCdC5zZXR0aW5ncz1uZXcgQnQoInNldHRpbmdzIix7Zm9udENoYXJhY3RlcjoiXFxlYjUyIn0pLEJ0LnNoaWVsZD1uZXcgQnQoInNoaWVsZCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI1MyJ9KSxCdC5zbWlsZXk9bmV3IEJ0KCJzbWlsZXkiLHtmb250Q2hhcmFjdGVyOiJcXGViNTQifSksQnQuc29ydFByZWNlZGVuY2U9bmV3IEJ0KCJzb3J0LXByZWNlZGVuY2UiLHtmb250Q2hhcmFjdGVyOiJcXGViNTUifSksQnQuc3BsaXRIb3Jpem9udGFsPW5ldyBCdCgic3BsaXQtaG9yaXpvbnRhbCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI1NiJ9KSxCdC5zcGxpdFZlcnRpY2FsPW5ldyBCdCgic3BsaXQtdmVydGljYWwiLHtmb250Q2hhcmFjdGVyOiJcXGViNTcifSksQnQuc3F1aXJyZWw9bmV3IEJ0KCJzcXVpcnJlbCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI1OCJ9KSxCdC5zdGFyRnVsbD1uZXcgQnQoInN0YXItZnVsbCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI1OSJ9KSxCdC5zdGFySGFsZj1uZXcgQnQoInN0YXItaGFsZiIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI1YSJ9KSxCdC5zeW1ib2xDbGFzcz1uZXcgQnQoInN5bWJvbC1jbGFzcyIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI1YiJ9KSxCdC5zeW1ib2xDb2xvcj1uZXcgQnQoInN5bWJvbC1jb2xvciIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI1YyJ9KSxCdC5zeW1ib2xDdXN0b21Db2xvcj1uZXcgQnQoInN5bWJvbC1jdXN0b21jb2xvciIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI1YyJ9KSxCdC5zeW1ib2xDb25zdGFudD1uZXcgQnQoInN5bWJvbC1jb25zdGFudCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI1ZCJ9KSxCdC5zeW1ib2xFbnVtTWVtYmVyPW5ldyBCdCgic3ltYm9sLWVudW0tbWVtYmVyIix7Zm9udENoYXJhY3RlcjoiXFxlYjVlIn0pLEJ0LnN5bWJvbEZpZWxkPW5ldyBCdCgic3ltYm9sLWZpZWxkIix7Zm9udENoYXJhY3RlcjoiXFxlYjVmIn0pLEJ0LnN5bWJvbEZpbGU9bmV3IEJ0KCJzeW1ib2wtZmlsZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI2MCJ9KSxCdC5zeW1ib2xJbnRlcmZhY2U9bmV3IEJ0KCJzeW1ib2wtaW50ZXJmYWNlIix7Zm9udENoYXJhY3RlcjoiXFxlYjYxIn0pLEJ0LnN5bWJvbEtleXdvcmQ9bmV3IEJ0KCJzeW1ib2wta2V5d29yZCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI2MiJ9KSxCdC5zeW1ib2xNaXNjPW5ldyBCdCgic3ltYm9sLW1pc2MiLHtmb250Q2hhcmFjdGVyOiJcXGViNjMifSksQnQuc3ltYm9sT3BlcmF0b3I9bmV3IEJ0KCJzeW1ib2wtb3BlcmF0b3IiLHtmb250Q2hhcmFjdGVyOiJcXGViNjQifSksQnQuc3ltYm9sUHJvcGVydHk9bmV3IEJ0KCJzeW1ib2wtcHJvcGVydHkiLHtmb250Q2hhcmFjdGVyOiJcXGViNjUifSksQnQud3JlbmNoPW5ldyBCdCgid3JlbmNoIix7Zm9udENoYXJhY3RlcjoiXFxlYjY1In0pLEJ0LndyZW5jaFN1YmFjdGlvbj1uZXcgQnQoIndyZW5jaC1zdWJhY3Rpb24iLHtmb250Q2hhcmFjdGVyOiJcXGViNjUifSksQnQuc3ltYm9sU25pcHBldD1uZXcgQnQoInN5bWJvbC1zbmlwcGV0Iix7Zm9udENoYXJhY3RlcjoiXFxlYjY2In0pLEJ0LnRhc2tsaXN0PW5ldyBCdCgidGFza2xpc3QiLHtmb250Q2hhcmFjdGVyOiJcXGViNjcifSksQnQudGVsZXNjb3BlPW5ldyBCdCgidGVsZXNjb3BlIix7Zm9udENoYXJhY3RlcjoiXFxlYjY4In0pLEJ0LnRleHRTaXplPW5ldyBCdCgidGV4dC1zaXplIix7Zm9udENoYXJhY3RlcjoiXFxlYjY5In0pLEJ0LnRocmVlQmFycz1uZXcgQnQoInRocmVlLWJhcnMiLHtmb250Q2hhcmFjdGVyOiJcXGViNmEifSksQnQudGh1bWJzZG93bj1uZXcgQnQoInRodW1ic2Rvd24iLHtmb250Q2hhcmFjdGVyOiJcXGViNmIifSksQnQudGh1bWJzdXA9bmV3IEJ0KCJ0aHVtYnN1cCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI2YyJ9KSxCdC50b29scz1uZXcgQnQoInRvb2xzIix7Zm9udENoYXJhY3RlcjoiXFxlYjZkIn0pLEJ0LnRyaWFuZ2xlRG93bj1uZXcgQnQoInRyaWFuZ2xlLWRvd24iLHtmb250Q2hhcmFjdGVyOiJcXGViNmUifSksQnQudHJpYW5nbGVMZWZ0PW5ldyBCdCgidHJpYW5nbGUtbGVmdCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI2ZiJ9KSxCdC50cmlhbmdsZVJpZ2h0PW5ldyBCdCgidHJpYW5nbGUtcmlnaHQiLHtmb250Q2hhcmFjdGVyOiJcXGViNzAifSksQnQudHJpYW5nbGVVcD1uZXcgQnQoInRyaWFuZ2xlLXVwIix7Zm9udENoYXJhY3RlcjoiXFxlYjcxIn0pLEJ0LnR3aXR0ZXI9bmV3IEJ0KCJ0d2l0dGVyIix7Zm9udENoYXJhY3RlcjoiXFxlYjcyIn0pLEJ0LnVuZm9sZD1uZXcgQnQoInVuZm9sZCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI3MyJ9KSxCdC51bmxvY2s9bmV3IEJ0KCJ1bmxvY2siLHtmb250Q2hhcmFjdGVyOiJcXGViNzQifSksQnQudW5tdXRlPW5ldyBCdCgidW5tdXRlIix7Zm9udENoYXJhY3RlcjoiXFxlYjc1In0pLEJ0LnVudmVyaWZpZWQ9bmV3IEJ0KCJ1bnZlcmlmaWVkIix7Zm9udENoYXJhY3RlcjoiXFxlYjc2In0pLEJ0LnZlcmlmaWVkPW5ldyBCdCgidmVyaWZpZWQiLHtmb250Q2hhcmFjdGVyOiJcXGViNzcifSksQnQudmVyc2lvbnM9bmV3IEJ0KCJ2ZXJzaW9ucyIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI3OCJ9KSxCdC52bUFjdGl2ZT1uZXcgQnQoInZtLWFjdGl2ZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI3OSJ9KSxCdC52bU91dGxpbmU9bmV3IEJ0KCJ2bS1vdXRsaW5lIix7Zm9udENoYXJhY3RlcjoiXFxlYjdhIn0pLEJ0LnZtUnVubmluZz1uZXcgQnQoInZtLXJ1bm5pbmciLHtmb250Q2hhcmFjdGVyOiJcXGViN2IifSksQnQud2F0Y2g9bmV3IEJ0KCJ3YXRjaCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI3YyJ9KSxCdC53aGl0ZXNwYWNlPW5ldyBCdCgid2hpdGVzcGFjZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI3ZCJ9KSxCdC53aG9sZVdvcmQ9bmV3IEJ0KCJ3aG9sZS13b3JkIix7Zm9udENoYXJhY3RlcjoiXFxlYjdlIn0pLEJ0LndpbmRvdz1uZXcgQnQoIndpbmRvdyIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI3ZiJ9KSxCdC53b3JkV3JhcD1uZXcgQnQoIndvcmQtd3JhcCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI4MCJ9KSxCdC56b29tSW49bmV3IEJ0KCJ6b29tLWluIix7Zm9udENoYXJhY3RlcjoiXFxlYjgxIn0pLEJ0Lnpvb21PdXQ9bmV3IEJ0KCJ6b29tLW91dCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI4MiJ9KSxCdC5saXN0RmlsdGVyPW5ldyBCdCgibGlzdC1maWx0ZXIiLHtmb250Q2hhcmFjdGVyOiJcXGViODMifSksQnQubGlzdEZsYXQ9bmV3IEJ0KCJsaXN0LWZsYXQiLHtmb250Q2hhcmFjdGVyOiJcXGViODQifSksQnQubGlzdFNlbGVjdGlvbj1uZXcgQnQoImxpc3Qtc2VsZWN0aW9uIix7Zm9udENoYXJhY3RlcjoiXFxlYjg1In0pLEJ0LnNlbGVjdGlvbj1uZXcgQnQoInNlbGVjdGlvbiIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI4NSJ9KSxCdC5saXN0VHJlZT1uZXcgQnQoImxpc3QtdHJlZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI4NiJ9KSxCdC5kZWJ1Z0JyZWFrcG9pbnRGdW5jdGlvblVudmVyaWZpZWQ9bmV3IEJ0KCJkZWJ1Zy1icmVha3BvaW50LWZ1bmN0aW9uLXVudmVyaWZpZWQiLHtmb250Q2hhcmFjdGVyOiJcXGViODcifSksQnQuZGVidWdCcmVha3BvaW50RnVuY3Rpb249bmV3IEJ0KCJkZWJ1Zy1icmVha3BvaW50LWZ1bmN0aW9uIix7Zm9udENoYXJhY3RlcjoiXFxlYjg4In0pLEJ0LmRlYnVnQnJlYWtwb2ludEZ1bmN0aW9uRGlzYWJsZWQ9bmV3IEJ0KCJkZWJ1Zy1icmVha3BvaW50LWZ1bmN0aW9uLWRpc2FibGVkIix7Zm9udENoYXJhY3RlcjoiXFxlYjg4In0pLEJ0LmRlYnVnU3RhY2tmcmFtZUFjdGl2ZT1uZXcgQnQoImRlYnVnLXN0YWNrZnJhbWUtYWN0aXZlIix7Zm9udENoYXJhY3RlcjoiXFxlYjg5In0pLEJ0LmNpcmNsZVNtYWxsRmlsbGVkPW5ldyBCdCgiY2lyY2xlLXNtYWxsLWZpbGxlZCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI4YSJ9KSxCdC5kZWJ1Z1N0YWNrZnJhbWVEb3Q9bmV3IEJ0KCJkZWJ1Zy1zdGFja2ZyYW1lLWRvdCIsQnQuY2lyY2xlU21hbGxGaWxsZWQuZGVmaW5pdGlvbiksQnQuZGVidWdTdGFja2ZyYW1lPW5ldyBCdCgiZGVidWctc3RhY2tmcmFtZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI4YiJ9KSxCdC5kZWJ1Z1N0YWNrZnJhbWVGb2N1c2VkPW5ldyBCdCgiZGVidWctc3RhY2tmcmFtZS1mb2N1c2VkIix7Zm9udENoYXJhY3RlcjoiXFxlYjhiIn0pLEJ0LmRlYnVnQnJlYWtwb2ludFVuc3VwcG9ydGVkPW5ldyBCdCgiZGVidWctYnJlYWtwb2ludC11bnN1cHBvcnRlZCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI4YyJ9KSxCdC5zeW1ib2xTdHJpbmc9bmV3IEJ0KCJzeW1ib2wtc3RyaW5nIix7Zm9udENoYXJhY3RlcjoiXFxlYjhkIn0pLEJ0LmRlYnVnUmV2ZXJzZUNvbnRpbnVlPW5ldyBCdCgiZGVidWctcmV2ZXJzZS1jb250aW51ZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI4ZSJ9KSxCdC5kZWJ1Z1N0ZXBCYWNrPW5ldyBCdCgiZGVidWctc3RlcC1iYWNrIix7Zm9udENoYXJhY3RlcjoiXFxlYjhmIn0pLEJ0LmRlYnVnUmVzdGFydEZyYW1lPW5ldyBCdCgiZGVidWctcmVzdGFydC1mcmFtZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI5MCJ9KSxCdC5jYWxsSW5jb21pbmc9bmV3IEJ0KCJjYWxsLWluY29taW5nIix7Zm9udENoYXJhY3RlcjoiXFxlYjkyIn0pLEJ0LmNhbGxPdXRnb2luZz1uZXcgQnQoImNhbGwtb3V0Z29pbmciLHtmb250Q2hhcmFjdGVyOiJcXGViOTMifSksQnQubWVudT1uZXcgQnQoIm1lbnUiLHtmb250Q2hhcmFjdGVyOiJcXGViOTQifSksQnQuZXhwYW5kQWxsPW5ldyBCdCgiZXhwYW5kLWFsbCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI5NSJ9KSxCdC5mZWVkYmFjaz1uZXcgQnQoImZlZWRiYWNrIix7Zm9udENoYXJhY3RlcjoiXFxlYjk2In0pLEJ0Lmdyb3VwQnlSZWZUeXBlPW5ldyBCdCgiZ3JvdXAtYnktcmVmLXR5cGUiLHtmb250Q2hhcmFjdGVyOiJcXGViOTcifSksQnQudW5ncm91cEJ5UmVmVHlwZT1uZXcgQnQoInVuZ3JvdXAtYnktcmVmLXR5cGUiLHtmb250Q2hhcmFjdGVyOiJcXGViOTgifSksQnQuYWNjb3VudD1uZXcgQnQoImFjY291bnQiLHtmb250Q2hhcmFjdGVyOiJcXGViOTkifSksQnQuYmVsbERvdD1uZXcgQnQoImJlbGwtZG90Iix7Zm9udENoYXJhY3RlcjoiXFxlYjlhIn0pLEJ0LmRlYnVnQ29uc29sZT1uZXcgQnQoImRlYnVnLWNvbnNvbGUiLHtmb250Q2hhcmFjdGVyOiJcXGViOWIifSksQnQubGlicmFyeT1uZXcgQnQoImxpYnJhcnkiLHtmb250Q2hhcmFjdGVyOiJcXGViOWMifSksQnQub3V0cHV0PW5ldyBCdCgib3V0cHV0Iix7Zm9udENoYXJhY3RlcjoiXFxlYjlkIn0pLEJ0LnJ1bkFsbD1uZXcgQnQoInJ1bi1hbGwiLHtmb250Q2hhcmFjdGVyOiJcXGViOWUifSksQnQuc3luY0lnbm9yZWQ9bmV3IEJ0KCJzeW5jLWlnbm9yZWQiLHtmb250Q2hhcmFjdGVyOiJcXGViOWYifSksQnQucGlubmVkPW5ldyBCdCgicGlubmVkIix7Zm9udENoYXJhY3RlcjoiXFxlYmEwIn0pLEJ0LmdpdGh1YkludmVydGVkPW5ldyBCdCgiZ2l0aHViLWludmVydGVkIix7Zm9udENoYXJhY3RlcjoiXFxlYmExIn0pLEJ0LmRlYnVnQWx0PW5ldyBCdCgiZGVidWctYWx0Iix7Zm9udENoYXJhY3RlcjoiXFxlYjkxIn0pLEJ0LnNlcnZlclByb2Nlc3M9bmV3IEJ0KCJzZXJ2ZXItcHJvY2VzcyIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJhMiJ9KSxCdC5zZXJ2ZXJFbnZpcm9ubWVudD1uZXcgQnQoInNlcnZlci1lbnZpcm9ubWVudCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJhMyJ9KSxCdC5wYXNzPW5ldyBCdCgicGFzcyIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJhNCJ9KSxCdC5zdG9wQ2lyY2xlPW5ldyBCdCgic3RvcC1jaXJjbGUiLHtmb250Q2hhcmFjdGVyOiJcXGViYTUifSksQnQucGxheUNpcmNsZT1uZXcgQnQoInBsYXktY2lyY2xlIix7Zm9udENoYXJhY3RlcjoiXFxlYmE2In0pLEJ0LnJlY29yZD1uZXcgQnQoInJlY29yZCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJhNyJ9KSxCdC5kZWJ1Z0FsdFNtYWxsPW5ldyBCdCgiZGVidWctYWx0LXNtYWxsIix7Zm9udENoYXJhY3RlcjoiXFxlYmE4In0pLEJ0LnZtQ29ubmVjdD1uZXcgQnQoInZtLWNvbm5lY3QiLHtmb250Q2hhcmFjdGVyOiJcXGViYTkifSksQnQuY2xvdWQ9bmV3IEJ0KCJjbG91ZCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJhYSJ9KSxCdC5tZXJnZT1uZXcgQnQoIm1lcmdlIix7Zm9udENoYXJhY3RlcjoiXFxlYmFiIn0pLEJ0LmV4cG9ydEljb249bmV3IEJ0KCJleHBvcnQiLHtmb250Q2hhcmFjdGVyOiJcXGViYWMifSksQnQuZ3JhcGhMZWZ0PW5ldyBCdCgiZ3JhcGgtbGVmdCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJhZCJ9KSxCdC5tYWduZXQ9bmV3IEJ0KCJtYWduZXQiLHtmb250Q2hhcmFjdGVyOiJcXGViYWUifSksQnQubm90ZWJvb2s9bmV3IEJ0KCJub3RlYm9vayIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJhZiJ9KSxCdC5yZWRvPW5ldyBCdCgicmVkbyIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJiMCJ9KSxCdC5jaGVja0FsbD1uZXcgQnQoImNoZWNrLWFsbCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJiMSJ9KSxCdC5waW5uZWREaXJ0eT1uZXcgQnQoInBpbm5lZC1kaXJ0eSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJiMiJ9KSxCdC5wYXNzRmlsbGVkPW5ldyBCdCgicGFzcy1maWxsZWQiLHtmb250Q2hhcmFjdGVyOiJcXGViYjMifSksQnQuY2lyY2xlTGFyZ2VGaWxsZWQ9bmV3IEJ0KCJjaXJjbGUtbGFyZ2UtZmlsbGVkIix7Zm9udENoYXJhY3RlcjoiXFxlYmI0In0pLEJ0LmNpcmNsZUxhcmdlT3V0bGluZT1uZXcgQnQoImNpcmNsZS1sYXJnZS1vdXRsaW5lIix7Zm9udENoYXJhY3RlcjoiXFxlYmI1In0pLEJ0LmNvbWJpbmU9bmV3IEJ0KCJjb21iaW5lIix7Zm9udENoYXJhY3RlcjoiXFxlYmI2In0pLEJ0LmdhdGhlcj1uZXcgQnQoImdhdGhlciIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJiNiJ9KSxCdC50YWJsZT1uZXcgQnQoInRhYmxlIix7Zm9udENoYXJhY3RlcjoiXFxlYmI3In0pLEJ0LnZhcmlhYmxlR3JvdXA9bmV3IEJ0KCJ2YXJpYWJsZS1ncm91cCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJiOCJ9KSxCdC50eXBlSGllcmFyY2h5PW5ldyBCdCgidHlwZS1oaWVyYXJjaHkiLHtmb250Q2hhcmFjdGVyOiJcXGViYjkifSksQnQudHlwZUhpZXJhcmNoeVN1Yj1uZXcgQnQoInR5cGUtaGllcmFyY2h5LXN1YiIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJiYSJ9KSxCdC50eXBlSGllcmFyY2h5U3VwZXI9bmV3IEJ0KCJ0eXBlLWhpZXJhcmNoeS1zdXBlciIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJiYiJ9KSxCdC5naXRQdWxsUmVxdWVzdENyZWF0ZT1uZXcgQnQoImdpdC1wdWxsLXJlcXVlc3QtY3JlYXRlIix7Zm9udENoYXJhY3RlcjoiXFxlYmJjIn0pLEJ0LnJ1bkFib3ZlPW5ldyBCdCgicnVuLWFib3ZlIix7Zm9udENoYXJhY3RlcjoiXFxlYmJkIn0pLEJ0LnJ1bkJlbG93PW5ldyBCdCgicnVuLWJlbG93Iix7Zm9udENoYXJhY3RlcjoiXFxlYmJlIn0pLEJ0Lm5vdGVib29rVGVtcGxhdGU9bmV3IEJ0KCJub3RlYm9vay10ZW1wbGF0ZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJiZiJ9KSxCdC5kZWJ1Z1JlcnVuPW5ldyBCdCgiZGVidWctcmVydW4iLHtmb250Q2hhcmFjdGVyOiJcXGViYzAifSksQnQud29ya3NwYWNlVHJ1c3RlZD1uZXcgQnQoIndvcmtzcGFjZS10cnVzdGVkIix7Zm9udENoYXJhY3RlcjoiXFxlYmMxIn0pLEJ0LndvcmtzcGFjZVVudHJ1c3RlZD1uZXcgQnQoIndvcmtzcGFjZS11bnRydXN0ZWQiLHtmb250Q2hhcmFjdGVyOiJcXGViYzIifSksQnQud29ya3NwYWNlVW5zcGVjaWZpZWQ9bmV3IEJ0KCJ3b3Jrc3BhY2UtdW5zcGVjaWZpZWQiLHtmb250Q2hhcmFjdGVyOiJcXGViYzMifSksQnQudGVybWluYWxDbWQ9bmV3IEJ0KCJ0ZXJtaW5hbC1jbWQiLHtmb250Q2hhcmFjdGVyOiJcXGViYzQifSksQnQudGVybWluYWxEZWJpYW49bmV3IEJ0KCJ0ZXJtaW5hbC1kZWJpYW4iLHtmb250Q2hhcmFjdGVyOiJcXGViYzUifSksQnQudGVybWluYWxMaW51eD1uZXcgQnQoInRlcm1pbmFsLWxpbnV4Iix7Zm9udENoYXJhY3RlcjoiXFxlYmM2In0pLEJ0LnRlcm1pbmFsUG93ZXJzaGVsbD1uZXcgQnQoInRlcm1pbmFsLXBvd2Vyc2hlbGwiLHtmb250Q2hhcmFjdGVyOiJcXGViYzcifSksQnQudGVybWluYWxUbXV4PW5ldyBCdCgidGVybWluYWwtdG11eCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJjOCJ9KSxCdC50ZXJtaW5hbFVidW50dT1uZXcgQnQoInRlcm1pbmFsLXVidW50dSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJjOSJ9KSxCdC50ZXJtaW5hbEJhc2g9bmV3IEJ0KCJ0ZXJtaW5hbC1iYXNoIix7Zm9udENoYXJhY3RlcjoiXFxlYmNhIn0pLEJ0LmFycm93U3dhcD1uZXcgQnQoImFycm93LXN3YXAiLHtmb250Q2hhcmFjdGVyOiJcXGViY2IifSksQnQuY29weT1uZXcgQnQoImNvcHkiLHtmb250Q2hhcmFjdGVyOiJcXGViY2MifSksQnQucGVyc29uQWRkPW5ldyBCdCgicGVyc29uLWFkZCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJjZCJ9KSxCdC5maWx0ZXJGaWxsZWQ9bmV3IEJ0KCJmaWx0ZXItZmlsbGVkIix7Zm9udENoYXJhY3RlcjoiXFxlYmNlIn0pLEJ0LndhbmQ9bmV3IEJ0KCJ3YW5kIix7Zm9udENoYXJhY3RlcjoiXFxlYmNmIn0pLEJ0LmRlYnVnTGluZUJ5TGluZT1uZXcgQnQoImRlYnVnLWxpbmUtYnktbGluZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJkMCJ9KSxCdC5pbnNwZWN0PW5ldyBCdCgiaW5zcGVjdCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJkMSJ9KSxCdC5sYXllcnM9bmV3IEJ0KCJsYXllcnMiLHtmb250Q2hhcmFjdGVyOiJcXGViZDIifSksQnQubGF5ZXJzRG90PW5ldyBCdCgibGF5ZXJzLWRvdCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJkMyJ9KSxCdC5sYXllcnNBY3RpdmU9bmV3IEJ0KCJsYXllcnMtYWN0aXZlIix7Zm9udENoYXJhY3RlcjoiXFxlYmQ0In0pLEJ0LmNvbXBhc3M9bmV3IEJ0KCJjb21wYXNzIix7Zm9udENoYXJhY3RlcjoiXFxlYmQ1In0pLEJ0LmNvbXBhc3NEb3Q9bmV3IEJ0KCJjb21wYXNzLWRvdCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJkNiJ9KSxCdC5jb21wYXNzQWN0aXZlPW5ldyBCdCgiY29tcGFzcy1hY3RpdmUiLHtmb250Q2hhcmFjdGVyOiJcXGViZDcifSksQnQuYXp1cmU9bmV3IEJ0KCJhenVyZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJkOCJ9KSxCdC5pc3N1ZURyYWZ0PW5ldyBCdCgiaXNzdWUtZHJhZnQiLHtmb250Q2hhcmFjdGVyOiJcXGViZDkifSksQnQuZ2l0UHVsbFJlcXVlc3RDbG9zZWQ9bmV3IEJ0KCJnaXQtcHVsbC1yZXF1ZXN0LWNsb3NlZCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJkYSJ9KSxCdC5naXRQdWxsUmVxdWVzdERyYWZ0PW5ldyBCdCgiZ2l0LXB1bGwtcmVxdWVzdC1kcmFmdCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJkYiJ9KSxCdC5kZWJ1Z0FsbD1uZXcgQnQoImRlYnVnLWFsbCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJkYyJ9KSxCdC5kZWJ1Z0NvdmVyYWdlPW5ldyBCdCgiZGVidWctY292ZXJhZ2UiLHtmb250Q2hhcmFjdGVyOiJcXGViZGQifSksQnQucnVuRXJyb3JzPW5ldyBCdCgicnVuLWVycm9ycyIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJkZSJ9KSxCdC5mb2xkZXJMaWJyYXJ5PW5ldyBCdCgiZm9sZGVyLWxpYnJhcnkiLHtmb250Q2hhcmFjdGVyOiJcXGViZGYifSksQnQuZGVidWdDb250aW51ZVNtYWxsPW5ldyBCdCgiZGVidWctY29udGludWUtc21hbGwiLHtmb250Q2hhcmFjdGVyOiJcXGViZTAifSksQnQuYmVha2VyU3RvcD1uZXcgQnQoImJlYWtlci1zdG9wIix7Zm9udENoYXJhY3RlcjoiXFxlYmUxIn0pLEJ0LmdyYXBoTGluZT1uZXcgQnQoImdyYXBoLWxpbmUiLHtmb250Q2hhcmFjdGVyOiJcXGViZTIifSksQnQuZ3JhcGhTY2F0dGVyPW5ldyBCdCgiZ3JhcGgtc2NhdHRlciIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJlMyJ9KSxCdC5waWVDaGFydD1uZXcgQnQoInBpZS1jaGFydCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJlNCJ9KSxCdC5icmFja2V0PW5ldyBCdCgiYnJhY2tldCIsQnQuanNvbi5kZWZpbml0aW9uKSxCdC5icmFja2V0RG90PW5ldyBCdCgiYnJhY2tldC1kb3QiLHtmb250Q2hhcmFjdGVyOiJcXGViZTUifSksQnQuYnJhY2tldEVycm9yPW5ldyBCdCgiYnJhY2tldC1lcnJvciIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJlNiJ9KSxCdC5sb2NrU21hbGw9bmV3IEJ0KCJsb2NrLXNtYWxsIix7Zm9udENoYXJhY3RlcjoiXFxlYmU3In0pLEJ0LmF6dXJlRGV2b3BzPW5ldyBCdCgiYXp1cmUtZGV2b3BzIix7Zm9udENoYXJhY3RlcjoiXFxlYmU4In0pLEJ0LnZlcmlmaWVkRmlsbGVkPW5ldyBCdCgidmVyaWZpZWQtZmlsbGVkIix7Zm9udENoYXJhY3RlcjoiXFxlYmU5In0pLEJ0Lm5ld0xpbmU9bmV3IEJ0KCJuZXdsaW5lIix7Zm9udENoYXJhY3RlcjoiXFxlYmVhIn0pLEJ0LmxheW91dD1uZXcgQnQoImxheW91dCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJlYiJ9KSxCdC5sYXlvdXRBY3Rpdml0eWJhckxlZnQ9bmV3IEJ0KCJsYXlvdXQtYWN0aXZpdHliYXItbGVmdCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJlYyJ9KSxCdC5sYXlvdXRBY3Rpdml0eWJhclJpZ2h0PW5ldyBCdCgibGF5b3V0LWFjdGl2aXR5YmFyLXJpZ2h0Iix7Zm9udENoYXJhY3RlcjoiXFxlYmVkIn0pLEJ0LmxheW91dFBhbmVsTGVmdD1uZXcgQnQoImxheW91dC1wYW5lbC1sZWZ0Iix7Zm9udENoYXJhY3RlcjoiXFxlYmVlIn0pLEJ0LmxheW91dFBhbmVsQ2VudGVyPW5ldyBCdCgibGF5b3V0LXBhbmVsLWNlbnRlciIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJlZiJ9KSxCdC5sYXlvdXRQYW5lbEp1c3RpZnk9bmV3IEJ0KCJsYXlvdXQtcGFuZWwtanVzdGlmeSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJmMCJ9KSxCdC5sYXlvdXRQYW5lbFJpZ2h0PW5ldyBCdCgibGF5b3V0LXBhbmVsLXJpZ2h0Iix7Zm9udENoYXJhY3RlcjoiXFxlYmYxIn0pLEJ0LmxheW91dFBhbmVsPW5ldyBCdCgibGF5b3V0LXBhbmVsIix7Zm9udENoYXJhY3RlcjoiXFxlYmYyIn0pLEJ0LmxheW91dFNpZGViYXJMZWZ0PW5ldyBCdCgibGF5b3V0LXNpZGViYXItbGVmdCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJmMyJ9KSxCdC5sYXlvdXRTaWRlYmFyUmlnaHQ9bmV3IEJ0KCJsYXlvdXQtc2lkZWJhci1yaWdodCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJmNCJ9KSxCdC5sYXlvdXRTdGF0dXNiYXI9bmV3IEJ0KCJsYXlvdXQtc3RhdHVzYmFyIix7Zm9udENoYXJhY3RlcjoiXFxlYmY1In0pLEJ0LmxheW91dE1lbnViYXI9bmV3IEJ0KCJsYXlvdXQtbWVudWJhciIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJmNiJ9KSxCdC5sYXlvdXRDZW50ZXJlZD1uZXcgQnQoImxheW91dC1jZW50ZXJlZCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJmNyJ9KSxCdC5sYXlvdXRTaWRlYmFyUmlnaHRPZmY9bmV3IEJ0KCJsYXlvdXQtc2lkZWJhci1yaWdodC1vZmYiLHtmb250Q2hhcmFjdGVyOiJcXGVjMDAifSksQnQubGF5b3V0UGFuZWxPZmY9bmV3IEJ0KCJsYXlvdXQtcGFuZWwtb2ZmIix7Zm9udENoYXJhY3RlcjoiXFxlYzAxIn0pLEJ0LmxheW91dFNpZGViYXJMZWZ0T2ZmPW5ldyBCdCgibGF5b3V0LXNpZGViYXItbGVmdC1vZmYiLHtmb250Q2hhcmFjdGVyOiJcXGVjMDIifSksQnQudGFyZ2V0PW5ldyBCdCgidGFyZ2V0Iix7Zm9udENoYXJhY3RlcjoiXFxlYmY4In0pLEJ0LmluZGVudD1uZXcgQnQoImluZGVudCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJmOSJ9KSxCdC5yZWNvcmRTbWFsbD1uZXcgQnQoInJlY29yZC1zbWFsbCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJmYSJ9KSxCdC5lcnJvclNtYWxsPW5ldyBCdCgiZXJyb3Itc21hbGwiLHtmb250Q2hhcmFjdGVyOiJcXGViZmIifSksQnQuYXJyb3dDaXJjbGVEb3duPW5ldyBCdCgiYXJyb3ctY2lyY2xlLWRvd24iLHtmb250Q2hhcmFjdGVyOiJcXGViZmMifSksQnQuYXJyb3dDaXJjbGVMZWZ0PW5ldyBCdCgiYXJyb3ctY2lyY2xlLWxlZnQiLHtmb250Q2hhcmFjdGVyOiJcXGViZmQifSksQnQuYXJyb3dDaXJjbGVSaWdodD1uZXcgQnQoImFycm93LWNpcmNsZS1yaWdodCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJmZSJ9KSxCdC5hcnJvd0NpcmNsZVVwPW5ldyBCdCgiYXJyb3ctY2lyY2xlLXVwIix7Zm9udENoYXJhY3RlcjoiXFxlYmZmIn0pLEJ0LmhlYXJ0RmlsbGVkPW5ldyBCdCgiaGVhcnQtZmlsbGVkIix7Zm9udENoYXJhY3RlcjoiXFxlYzA0In0pLEJ0Lm1hcD1uZXcgQnQoIm1hcCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWMwNSJ9KSxCdC5tYXBGaWxsZWQ9bmV3IEJ0KCJtYXAtZmlsbGVkIix7Zm9udENoYXJhY3RlcjoiXFxlYzA2In0pLEJ0LmNpcmNsZVNtYWxsPW5ldyBCdCgiY2lyY2xlLXNtYWxsIix7Zm9udENoYXJhY3RlcjoiXFxlYzA3In0pLEJ0LmJlbGxTbGFzaD1uZXcgQnQoImJlbGwtc2xhc2giLHtmb250Q2hhcmFjdGVyOiJcXGVjMDgifSksQnQuYmVsbFNsYXNoRG90PW5ldyBCdCgiYmVsbC1zbGFzaC1kb3QiLHtmb250Q2hhcmFjdGVyOiJcXGVjMDkifSksQnQuY29tbWVudFVucmVzb2x2ZWQ9bmV3IEJ0KCJjb21tZW50LXVucmVzb2x2ZWQiLHtmb250Q2hhcmFjdGVyOiJcXGVjMGEifSksQnQuZ2l0UHVsbFJlcXVlc3RHb1RvQ2hhbmdlcz1uZXcgQnQoImdpdC1wdWxsLXJlcXVlc3QtZ28tdG8tY2hhbmdlcyIse2ZvbnRDaGFyYWN0ZXI6IlxcZWMwYiJ9KSxCdC5naXRQdWxsUmVxdWVzdE5ld0NoYW5nZXM9bmV3IEJ0KCJnaXQtcHVsbC1yZXF1ZXN0LW5ldy1jaGFuZ2VzIix7Zm9udENoYXJhY3RlcjoiXFxlYzBjIn0pLEJ0LmRpYWxvZ0Vycm9yPW5ldyBCdCgiZGlhbG9nLWVycm9yIixCdC5lcnJvci5kZWZpbml0aW9uKSxCdC5kaWFsb2dXYXJuaW5nPW5ldyBCdCgiZGlhbG9nLXdhcm5pbmciLEJ0Lndhcm5pbmcuZGVmaW5pdGlvbiksQnQuZGlhbG9nSW5mbz1uZXcgQnQoImRpYWxvZy1pbmZvIixCdC5pbmZvLmRlZmluaXRpb24pLEJ0LmRpYWxvZ0Nsb3NlPW5ldyBCdCgiZGlhbG9nLWNsb3NlIixCdC5jbG9zZS5kZWZpbml0aW9uKSxCdC50cmVlSXRlbUV4cGFuZGVkPW5ldyBCdCgidHJlZS1pdGVtLWV4cGFuZGVkIixCdC5jaGV2cm9uRG93bi5kZWZpbml0aW9uKSxCdC50cmVlRmlsdGVyT25UeXBlT249bmV3IEJ0KCJ0cmVlLWZpbHRlci1vbi10eXBlLW9uIixCdC5saXN0RmlsdGVyLmRlZmluaXRpb24pLEJ0LnRyZWVGaWx0ZXJPblR5cGVPZmY9bmV3IEJ0KCJ0cmVlLWZpbHRlci1vbi10eXBlLW9mZiIsQnQubGlzdFNlbGVjdGlvbi5kZWZpbml0aW9uKSxCdC50cmVlRmlsdGVyQ2xlYXI9bmV3IEJ0KCJ0cmVlLWZpbHRlci1jbGVhciIsQnQuY2xvc2UuZGVmaW5pdGlvbiksQnQudHJlZUl0ZW1Mb2FkaW5nPW5ldyBCdCgidHJlZS1pdGVtLWxvYWRpbmciLEJ0LmxvYWRpbmcuZGVmaW5pdGlvbiksQnQubWVudVNlbGVjdGlvbj1uZXcgQnQoIm1lbnUtc2VsZWN0aW9uIixCdC5jaGVjay5kZWZpbml0aW9uKSxCdC5tZW51U3VibWVudT1uZXcgQnQoIm1lbnUtc3VibWVudSIsQnQuY2hldnJvblJpZ2h0LmRlZmluaXRpb24pLEJ0Lm1lbnVCYXJNb3JlPW5ldyBCdCgibWVudWJhci1tb3JlIixCdC5tb3JlLmRlZmluaXRpb24pLEJ0LnNjcm9sbGJhckJ1dHRvbkxlZnQ9bmV3IEJ0KCJzY3JvbGxiYXItYnV0dG9uLWxlZnQiLEJ0LnRyaWFuZ2xlTGVmdC5kZWZpbml0aW9uKSxCdC5zY3JvbGxiYXJCdXR0b25SaWdodD1uZXcgQnQoInNjcm9sbGJhci1idXR0b24tcmlnaHQiLEJ0LnRyaWFuZ2xlUmlnaHQuZGVmaW5pdGlvbiksQnQuc2Nyb2xsYmFyQnV0dG9uVXA9bmV3IEJ0KCJzY3JvbGxiYXItYnV0dG9uLXVwIixCdC50cmlhbmdsZVVwLmRlZmluaXRpb24pLEJ0LnNjcm9sbGJhckJ1dHRvbkRvd249bmV3IEJ0KCJzY3JvbGxiYXItYnV0dG9uLWRvd24iLEJ0LnRyaWFuZ2xlRG93bi5kZWZpbml0aW9uKSxCdC50b29sQmFyTW9yZT1uZXcgQnQoInRvb2xiYXItbW9yZSIsQnQubW9yZS5kZWZpbml0aW9uKSxCdC5xdWlja0lucHV0QmFjaz1uZXcgQnQoInF1aWNrLWlucHV0LWJhY2siLEJ0LmFycm93TGVmdC5kZWZpbml0aW9uKSxmdW5jdGlvbihlKXtlLmljb25OYW1lU2VnbWVudD0iW0EtWmEtejAtOV0rIixlLmljb25OYW1lRXhwcmVzc2lvbj0iW0EtWmEtejAtOS1dKyIsZS5pY29uTW9kaWZpZXJFeHByZXNzaW9uPSJ+W0EtWmEtel0rIixlLmljb25OYW1lQ2hhcmFjdGVyPSJbQS1aYS16MC05fi1dIjtjb25zdCB0PW5ldyBSZWdFeHAoYF4oJHtlLmljb25OYW1lRXhwcmVzc2lvbn0pKCR7ZS5pY29uTW9kaWZpZXJFeHByZXNzaW9ufSk/JGApO2Z1bmN0aW9uIG4oZSl7aWYoZSBpbnN0YW5jZW9mIEJ0KXJldHVyblsiY29kaWNvbiIsImNvZGljb24tIitlLmlkXTtjb25zdCByPXQuZXhlYyhlLmlkKTtpZighcilyZXR1cm4gbihCdC5lcnJvcik7Y29uc3RbLGksb109cixhPVsiY29kaWNvbiIsImNvZGljb24tIitpXTtyZXR1cm4gbyYmYS5wdXNoKCJjb2RpY29uLW1vZGlmaWVyLSIrby5zdWJzdHIoMSkpLGF9ZS5hc0NsYXNzTmFtZUFycmF5PW4sZS5hc0NsYXNzTmFtZT1mdW5jdGlvbihlKXtyZXR1cm4gbihlKS5qb2luKCIgIil9LGUuYXNDU1NTZWxlY3Rvcj1mdW5jdGlvbihlKXtyZXR1cm4iLiIrbihlKS5qb2luKCIuIil9fShqdHx8KGp0PXt9KSk7dmFyIHF0LCR0LFd0LEh0LHp0LEd0LEp0LFh0LFp0LFl0LFF0LGVuLHRuLG5uLHJuLG9uLGFuLHNuLGNuLGxuLHVuLGhuLGZuLGRuLG1uLGduLHBuLGJuLHZuLHluLENuLHduLF9uLFNuLEFuLEVuLHhuLE5uLGtuLExuLFRuLE9uLEluLE1uLFBuLFJuLFZuLEZuLERuPWZ1bmN0aW9uKGUsdCxuLHIpe3JldHVybiBuZXcobnx8KG49UHJvbWlzZSkpKChmdW5jdGlvbihpLG8pe2Z1bmN0aW9uIGEoZSl7dHJ5e2Moci5uZXh0KGUpKX1jYXRjaChlKXtvKGUpfX1mdW5jdGlvbiBzKGUpe3RyeXtjKHIudGhyb3coZSkpfWNhdGNoKGUpe28oZSl9fWZ1bmN0aW9uIGMoZSl7dmFyIHQ7ZS5kb25lP2koZS52YWx1ZSk6KHQ9ZS52YWx1ZSx0IGluc3RhbmNlb2Ygbj90Om5ldyBuKChmdW5jdGlvbihlKXtlKHQpfSkpKS50aGVuKGEscyl9Yygocj1yLmFwcGx5KGUsdHx8W10pKS5uZXh0KCkpfSkpfTtjbGFzcyBLbiBleHRlbmRzIGZ7Y29uc3RydWN0b3IoZSx0LG4pe3N1cGVyKCksdGhpcy5fcmVnaXN0cnk9ZSx0aGlzLl9sYW5ndWFnZUlkPXQsdGhpcy5fZmFjdG9yeT1uLHRoaXMuX2lzRGlzcG9zZWQ9ITEsdGhpcy5fcmVzb2x2ZVByb21pc2U9bnVsbCx0aGlzLl9pc1Jlc29sdmVkPSExfWdldCBpc1Jlc29sdmVkKCl7cmV0dXJuIHRoaXMuX2lzUmVzb2x2ZWR9ZGlzcG9zZSgpe3RoaXMuX2lzRGlzcG9zZWQ9ITAsc3VwZXIuZGlzcG9zZSgpfXJlc29sdmUoKXtyZXR1cm4gRG4odGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4gdGhpcy5fcmVzb2x2ZVByb21pc2V8fCh0aGlzLl9yZXNvbHZlUHJvbWlzZT10aGlzLl9jcmVhdGUoKSksdGhpcy5fcmVzb2x2ZVByb21pc2V9KSl9X2NyZWF0ZSgpe3JldHVybiBEbih0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2NvbnN0IGU9eWllbGQgUHJvbWlzZS5yZXNvbHZlKHRoaXMuX2ZhY3RvcnkuY3JlYXRlVG9rZW5pemF0aW9uU3VwcG9ydCgpKTt0aGlzLl9pc1Jlc29sdmVkPSEwLGUmJiF0aGlzLl9pc0Rpc3Bvc2VkJiZ0aGlzLl9yZWdpc3Rlcih0aGlzLl9yZWdpc3RyeS5yZWdpc3Rlcih0aGlzLl9sYW5ndWFnZUlkLGUpKX0pKX19Y2xhc3Mgam57Y29uc3RydWN0b3IoZSx0LG4pe3RoaXMuX3Rva2VuQnJhbmQ9dm9pZCAwLHRoaXMub2Zmc2V0PWUsdGhpcy50eXBlPXQsdGhpcy5sYW5ndWFnZT1ufXRvU3RyaW5nKCl7cmV0dXJuIigiK3RoaXMub2Zmc2V0KyIsICIrdGhpcy50eXBlKyIpIn19IWZ1bmN0aW9uKGUpe2NvbnN0IHQ9bmV3IE1hcDt0LnNldCgwLEJ0LnN5bWJvbE1ldGhvZCksdC5zZXQoMSxCdC5zeW1ib2xGdW5jdGlvbiksdC5zZXQoMixCdC5zeW1ib2xDb25zdHJ1Y3RvciksdC5zZXQoMyxCdC5zeW1ib2xGaWVsZCksdC5zZXQoNCxCdC5zeW1ib2xWYXJpYWJsZSksdC5zZXQoNSxCdC5zeW1ib2xDbGFzcyksdC5zZXQoNixCdC5zeW1ib2xTdHJ1Y3QpLHQuc2V0KDcsQnQuc3ltYm9sSW50ZXJmYWNlKSx0LnNldCg4LEJ0LnN5bWJvbE1vZHVsZSksdC5zZXQoOSxCdC5zeW1ib2xQcm9wZXJ0eSksdC5zZXQoMTAsQnQuc3ltYm9sRXZlbnQpLHQuc2V0KDExLEJ0LnN5bWJvbE9wZXJhdG9yKSx0LnNldCgxMixCdC5zeW1ib2xVbml0KSx0LnNldCgxMyxCdC5zeW1ib2xWYWx1ZSksdC5zZXQoMTUsQnQuc3ltYm9sRW51bSksdC5zZXQoMTQsQnQuc3ltYm9sQ29uc3RhbnQpLHQuc2V0KDE1LEJ0LnN5bWJvbEVudW0pLHQuc2V0KDE2LEJ0LnN5bWJvbEVudW1NZW1iZXIpLHQuc2V0KDE3LEJ0LnN5bWJvbEtleXdvcmQpLHQuc2V0KDI3LEJ0LnN5bWJvbFNuaXBwZXQpLHQuc2V0KDE4LEJ0LnN5bWJvbFRleHQpLHQuc2V0KDE5LEJ0LnN5bWJvbENvbG9yKSx0LnNldCgyMCxCdC5zeW1ib2xGaWxlKSx0LnNldCgyMSxCdC5zeW1ib2xSZWZlcmVuY2UpLHQuc2V0KDIyLEJ0LnN5bWJvbEN1c3RvbUNvbG9yKSx0LnNldCgyMyxCdC5zeW1ib2xGb2xkZXIpLHQuc2V0KDI0LEJ0LnN5bWJvbFR5cGVQYXJhbWV0ZXIpLHQuc2V0KDI1LEJ0LmFjY291bnQpLHQuc2V0KDI2LEJ0Lmlzc3VlcyksZS50b0ljb249ZnVuY3Rpb24oZSl7bGV0IG49dC5nZXQoZSk7cmV0dXJuIG58fChjb25zb2xlLmluZm8oIk5vIGNvZGljb24gZm91bmQgZm9yIENvbXBsZXRpb25JdGVtS2luZCAiK2UpLG49QnQuc3ltYm9sUHJvcGVydHkpLG59O2NvbnN0IG49bmV3IE1hcDtuLnNldCgibWV0aG9kIiwwKSxuLnNldCgiZnVuY3Rpb24iLDEpLG4uc2V0KCJjb25zdHJ1Y3RvciIsMiksbi5zZXQoImZpZWxkIiwzKSxuLnNldCgidmFyaWFibGUiLDQpLG4uc2V0KCJjbGFzcyIsNSksbi5zZXQoInN0cnVjdCIsNiksbi5zZXQoImludGVyZmFjZSIsNyksbi5zZXQoIm1vZHVsZSIsOCksbi5zZXQoInByb3BlcnR5Iiw5KSxuLnNldCgiZXZlbnQiLDEwKSxuLnNldCgib3BlcmF0b3IiLDExKSxuLnNldCgidW5pdCIsMTIpLG4uc2V0KCJ2YWx1ZSIsMTMpLG4uc2V0KCJjb25zdGFudCIsMTQpLG4uc2V0KCJlbnVtIiwxNSksbi5zZXQoImVudW0tbWVtYmVyIiwxNiksbi5zZXQoImVudW1NZW1iZXIiLDE2KSxuLnNldCgia2V5d29yZCIsMTcpLG4uc2V0KCJzbmlwcGV0IiwyNyksbi5zZXQoInRleHQiLDE4KSxuLnNldCgiY29sb3IiLDE5KSxuLnNldCgiZmlsZSIsMjApLG4uc2V0KCJyZWZlcmVuY2UiLDIxKSxuLnNldCgiY3VzdG9tY29sb3IiLDIyKSxuLnNldCgiZm9sZGVyIiwyMyksbi5zZXQoInR5cGUtcGFyYW1ldGVyIiwyNCksbi5zZXQoInR5cGVQYXJhbWV0ZXIiLDI0KSxuLnNldCgiYWNjb3VudCIsMjUpLG4uc2V0KCJpc3N1ZSIsMjYpLGUuZnJvbVN0cmluZz1mdW5jdGlvbihlLHQpe2xldCByPW4uZ2V0KGUpO3JldHVybiB2b2lkIDAhPT1yfHx0fHwocj05KSxyfX0ocXR8fChxdD17fSkpLGZ1bmN0aW9uKGUpe2VbZS5BdXRvbWF0aWM9MF09IkF1dG9tYXRpYyIsZVtlLkV4cGxpY2l0PTFdPSJFeHBsaWNpdCJ9KCR0fHwoJHQ9e30pKSxmdW5jdGlvbihlKXtlW2UuSW52b2tlPTFdPSJJbnZva2UiLGVbZS5UcmlnZ2VyQ2hhcmFjdGVyPTJdPSJUcmlnZ2VyQ2hhcmFjdGVyIixlW2UuQ29udGVudENoYW5nZT0zXT0iQ29udGVudENoYW5nZSJ9KFd0fHwoV3Q9e30pKSxmdW5jdGlvbihlKXtlW2UuVGV4dD0wXT0iVGV4dCIsZVtlLlJlYWQ9MV09IlJlYWQiLGVbZS5Xcml0ZT0yXT0iV3JpdGUifShIdHx8KEh0PXt9KSksZnVuY3Rpb24oZSl7Y29uc3QgdD1uZXcgTWFwO3Quc2V0KDAsQnQuc3ltYm9sRmlsZSksdC5zZXQoMSxCdC5zeW1ib2xNb2R1bGUpLHQuc2V0KDIsQnQuc3ltYm9sTmFtZXNwYWNlKSx0LnNldCgzLEJ0LnN5bWJvbFBhY2thZ2UpLHQuc2V0KDQsQnQuc3ltYm9sQ2xhc3MpLHQuc2V0KDUsQnQuc3ltYm9sTWV0aG9kKSx0LnNldCg2LEJ0LnN5bWJvbFByb3BlcnR5KSx0LnNldCg3LEJ0LnN5bWJvbEZpZWxkKSx0LnNldCg4LEJ0LnN5bWJvbENvbnN0cnVjdG9yKSx0LnNldCg5LEJ0LnN5bWJvbEVudW0pLHQuc2V0KDEwLEJ0LnN5bWJvbEludGVyZmFjZSksdC5zZXQoMTEsQnQuc3ltYm9sRnVuY3Rpb24pLHQuc2V0KDEyLEJ0LnN5bWJvbFZhcmlhYmxlKSx0LnNldCgxMyxCdC5zeW1ib2xDb25zdGFudCksdC5zZXQoMTQsQnQuc3ltYm9sU3RyaW5nKSx0LnNldCgxNSxCdC5zeW1ib2xOdW1iZXIpLHQuc2V0KDE2LEJ0LnN5bWJvbEJvb2xlYW4pLHQuc2V0KDE3LEJ0LnN5bWJvbEFycmF5KSx0LnNldCgxOCxCdC5zeW1ib2xPYmplY3QpLHQuc2V0KDE5LEJ0LnN5bWJvbEtleSksdC5zZXQoMjAsQnQuc3ltYm9sTnVsbCksdC5zZXQoMjEsQnQuc3ltYm9sRW51bU1lbWJlciksdC5zZXQoMjIsQnQuc3ltYm9sU3RydWN0KSx0LnNldCgyMyxCdC5zeW1ib2xFdmVudCksdC5zZXQoMjQsQnQuc3ltYm9sT3BlcmF0b3IpLHQuc2V0KDI1LEJ0LnN5bWJvbFR5cGVQYXJhbWV0ZXIpLGUudG9JY29uPWZ1bmN0aW9uKGUpe2xldCBuPXQuZ2V0KGUpO3JldHVybiBufHwoY29uc29sZS5pbmZvKCJObyBjb2RpY29uIGZvdW5kIGZvciBTeW1ib2xLaW5kICIrZSksbj1CdC5zeW1ib2xQcm9wZXJ0eSksbn19KHp0fHwoenQ9e30pKSxmdW5jdGlvbihlKXtlLmlzPWZ1bmN0aW9uKGUpe3JldHVybiEoIWV8fCJvYmplY3QiIT10eXBlb2YgZSkmJigic3RyaW5nIj09dHlwZW9mIGUuaWQmJiJzdHJpbmciPT10eXBlb2YgZS50aXRsZSl9fShHdHx8KEd0PXt9KSksZnVuY3Rpb24oZSl7ZVtlLlR5cGU9MV09IlR5cGUiLGVbZS5QYXJhbWV0ZXI9Ml09IlBhcmFtZXRlciJ9KEp0fHwoSnQ9e30pKSxuZXcgY2xhc3N7Y29uc3RydWN0b3IoKXt0aGlzLl9tYXA9bmV3IE1hcCx0aGlzLl9mYWN0b3JpZXM9bmV3IE1hcCx0aGlzLl9vbkRpZENoYW5nZT1uZXcgQix0aGlzLm9uRGlkQ2hhbmdlPXRoaXMuX29uRGlkQ2hhbmdlLmV2ZW50LHRoaXMuX2NvbG9yTWFwPW51bGx9ZmlyZShlKXt0aGlzLl9vbkRpZENoYW5nZS5maXJlKHtjaGFuZ2VkTGFuZ3VhZ2VzOmUsY2hhbmdlZENvbG9yTWFwOiExfSl9cmVnaXN0ZXIoZSx0KXtyZXR1cm4gdGhpcy5fbWFwLnNldChlLHQpLHRoaXMuZmlyZShbZV0pLHUoKCgpPT57dGhpcy5fbWFwLmdldChlKT09PXQmJih0aGlzLl9tYXAuZGVsZXRlKGUpLHRoaXMuZmlyZShbZV0pKX0pKX1yZWdpc3RlckZhY3RvcnkoZSx0KXt2YXIgbjtudWxsPT09KG49dGhpcy5fZmFjdG9yaWVzLmdldChlKSl8fHZvaWQgMD09PW58fG4uZGlzcG9zZSgpO2NvbnN0IHI9bmV3IEtuKHRoaXMsZSx0KTtyZXR1cm4gdGhpcy5fZmFjdG9yaWVzLnNldChlLHIpLHUoKCgpPT57Y29uc3QgdD10aGlzLl9mYWN0b3JpZXMuZ2V0KGUpO3QmJnQ9PT1yJiYodGhpcy5fZmFjdG9yaWVzLmRlbGV0ZShlKSx0LmRpc3Bvc2UoKSl9KSl9Z2V0T3JDcmVhdGUoZSl7cmV0dXJuIERuKHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3QgdD10aGlzLmdldChlKTtpZih0KXJldHVybiB0O2NvbnN0IG49dGhpcy5fZmFjdG9yaWVzLmdldChlKTtyZXR1cm4hbnx8bi5pc1Jlc29sdmVkP251bGw6KHlpZWxkIG4ucmVzb2x2ZSgpLHRoaXMuZ2V0KGUpKX0pKX1nZXQoZSl7cmV0dXJuIHRoaXMuX21hcC5nZXQoZSl8fG51bGx9aXNSZXNvbHZlZChlKXtpZih0aGlzLmdldChlKSlyZXR1cm4hMDtjb25zdCB0PXRoaXMuX2ZhY3Rvcmllcy5nZXQoZSk7cmV0dXJuISh0JiYhdC5pc1Jlc29sdmVkKX1zZXRDb2xvck1hcChlKXt0aGlzLl9jb2xvck1hcD1lLHRoaXMuX29uRGlkQ2hhbmdlLmZpcmUoe2NoYW5nZWRMYW5ndWFnZXM6QXJyYXkuZnJvbSh0aGlzLl9tYXAua2V5cygpKSxjaGFuZ2VkQ29sb3JNYXA6ITB9KX1nZXRDb2xvck1hcCgpe3JldHVybiB0aGlzLl9jb2xvck1hcH1nZXREZWZhdWx0QmFja2dyb3VuZCgpe3JldHVybiB0aGlzLl9jb2xvck1hcCYmdGhpcy5fY29sb3JNYXAubGVuZ3RoPjI/dGhpcy5fY29sb3JNYXBbMl06bnVsbH19LGZ1bmN0aW9uKGUpe2VbZS5Vbmtub3duPTBdPSJVbmtub3duIixlW2UuRGlzYWJsZWQ9MV09IkRpc2FibGVkIixlW2UuRW5hYmxlZD0yXT0iRW5hYmxlZCJ9KFh0fHwoWHQ9e30pKSxmdW5jdGlvbihlKXtlW2UuSW52b2tlPTFdPSJJbnZva2UiLGVbZS5BdXRvPTJdPSJBdXRvIn0oWnR8fChadD17fSkpLGZ1bmN0aW9uKGUpe2VbZS5LZWVwV2hpdGVzcGFjZT0xXT0iS2VlcFdoaXRlc3BhY2UiLGVbZS5JbnNlcnRBc1NuaXBwZXQ9NF09Ikluc2VydEFzU25pcHBldCJ9KFl0fHwoWXQ9e30pKSxmdW5jdGlvbihlKXtlW2UuTWV0aG9kPTBdPSJNZXRob2QiLGVbZS5GdW5jdGlvbj0xXT0iRnVuY3Rpb24iLGVbZS5Db25zdHJ1Y3Rvcj0yXT0iQ29uc3RydWN0b3IiLGVbZS5GaWVsZD0zXT0iRmllbGQiLGVbZS5WYXJpYWJsZT00XT0iVmFyaWFibGUiLGVbZS5DbGFzcz01XT0iQ2xhc3MiLGVbZS5TdHJ1Y3Q9Nl09IlN0cnVjdCIsZVtlLkludGVyZmFjZT03XT0iSW50ZXJmYWNlIixlW2UuTW9kdWxlPThdPSJNb2R1bGUiLGVbZS5Qcm9wZXJ0eT05XT0iUHJvcGVydHkiLGVbZS5FdmVudD0xMF09IkV2ZW50IixlW2UuT3BlcmF0b3I9MTFdPSJPcGVyYXRvciIsZVtlLlVuaXQ9MTJdPSJVbml0IixlW2UuVmFsdWU9MTNdPSJWYWx1ZSIsZVtlLkNvbnN0YW50PTE0XT0iQ29uc3RhbnQiLGVbZS5FbnVtPTE1XT0iRW51bSIsZVtlLkVudW1NZW1iZXI9MTZdPSJFbnVtTWVtYmVyIixlW2UuS2V5d29yZD0xN109IktleXdvcmQiLGVbZS5UZXh0PTE4XT0iVGV4dCIsZVtlLkNvbG9yPTE5XT0iQ29sb3IiLGVbZS5GaWxlPTIwXT0iRmlsZSIsZVtlLlJlZmVyZW5jZT0yMV09IlJlZmVyZW5jZSIsZVtlLkN1c3RvbWNvbG9yPTIyXT0iQ3VzdG9tY29sb3IiLGVbZS5Gb2xkZXI9MjNdPSJGb2xkZXIiLGVbZS5UeXBlUGFyYW1ldGVyPTI0XT0iVHlwZVBhcmFtZXRlciIsZVtlLlVzZXI9MjVdPSJVc2VyIixlW2UuSXNzdWU9MjZdPSJJc3N1ZSIsZVtlLlNuaXBwZXQ9MjddPSJTbmlwcGV0In0oUXR8fChRdD17fSkpLGZ1bmN0aW9uKGUpe2VbZS5EZXByZWNhdGVkPTFdPSJEZXByZWNhdGVkIn0oZW58fChlbj17fSkpLGZ1bmN0aW9uKGUpe2VbZS5JbnZva2U9MF09Ikludm9rZSIsZVtlLlRyaWdnZXJDaGFyYWN0ZXI9MV09IlRyaWdnZXJDaGFyYWN0ZXIiLGVbZS5UcmlnZ2VyRm9ySW5jb21wbGV0ZUNvbXBsZXRpb25zPTJdPSJUcmlnZ2VyRm9ySW5jb21wbGV0ZUNvbXBsZXRpb25zIn0odG58fCh0bj17fSkpLGZ1bmN0aW9uKGUpe2VbZS5FWEFDVD0wXT0iRVhBQ1QiLGVbZS5BQk9WRT0xXT0iQUJPVkUiLGVbZS5CRUxPVz0yXT0iQkVMT1cifShubnx8KG5uPXt9KSksZnVuY3Rpb24oZSl7ZVtlLk5vdFNldD0wXT0iTm90U2V0IixlW2UuQ29udGVudEZsdXNoPTFdPSJDb250ZW50Rmx1c2giLGVbZS5SZWNvdmVyRnJvbU1hcmtlcnM9Ml09IlJlY292ZXJGcm9tTWFya2VycyIsZVtlLkV4cGxpY2l0PTNdPSJFeHBsaWNpdCIsZVtlLlBhc3RlPTRdPSJQYXN0ZSIsZVtlLlVuZG89NV09IlVuZG8iLGVbZS5SZWRvPTZdPSJSZWRvIn0ocm58fChybj17fSkpLGZ1bmN0aW9uKGUpe2VbZS5MRj0xXT0iTEYiLGVbZS5DUkxGPTJdPSJDUkxGIn0ob258fChvbj17fSkpLGZ1bmN0aW9uKGUpe2VbZS5UZXh0PTBdPSJUZXh0IixlW2UuUmVhZD0xXT0iUmVhZCIsZVtlLldyaXRlPTJdPSJXcml0ZSJ9KGFufHwoYW49e30pKSxmdW5jdGlvbihlKXtlW2UuTm9uZT0wXT0iTm9uZSIsZVtlLktlZXA9MV09IktlZXAiLGVbZS5CcmFja2V0cz0yXT0iQnJhY2tldHMiLGVbZS5BZHZhbmNlZD0zXT0iQWR2YW5jZWQiLGVbZS5GdWxsPTRdPSJGdWxsIn0oc258fChzbj17fSkpLGZ1bmN0aW9uKGUpe2VbZS5hY2NlcHRTdWdnZXN0aW9uT25Db21taXRDaGFyYWN0ZXI9MF09ImFjY2VwdFN1Z2dlc3Rpb25PbkNvbW1pdENoYXJhY3RlciIsZVtlLmFjY2VwdFN1Z2dlc3Rpb25PbkVudGVyPTFdPSJhY2NlcHRTdWdnZXN0aW9uT25FbnRlciIsZVtlLmFjY2Vzc2liaWxpdHlTdXBwb3J0PTJdPSJhY2Nlc3NpYmlsaXR5U3VwcG9ydCIsZVtlLmFjY2Vzc2liaWxpdHlQYWdlU2l6ZT0zXT0iYWNjZXNzaWJpbGl0eVBhZ2VTaXplIixlW2UuYXJpYUxhYmVsPTRdPSJhcmlhTGFiZWwiLGVbZS5hdXRvQ2xvc2luZ0JyYWNrZXRzPTVdPSJhdXRvQ2xvc2luZ0JyYWNrZXRzIixlW2UuYXV0b0Nsb3NpbmdEZWxldGU9Nl09ImF1dG9DbG9zaW5nRGVsZXRlIixlW2UuYXV0b0Nsb3NpbmdPdmVydHlwZT03XT0iYXV0b0Nsb3NpbmdPdmVydHlwZSIsZVtlLmF1dG9DbG9zaW5nUXVvdGVzPThdPSJhdXRvQ2xvc2luZ1F1b3RlcyIsZVtlLmF1dG9JbmRlbnQ9OV09ImF1dG9JbmRlbnQiLGVbZS5hdXRvbWF0aWNMYXlvdXQ9MTBdPSJhdXRvbWF0aWNMYXlvdXQiLGVbZS5hdXRvU3Vycm91bmQ9MTFdPSJhdXRvU3Vycm91bmQiLGVbZS5icmFja2V0UGFpckNvbG9yaXphdGlvbj0xMl09ImJyYWNrZXRQYWlyQ29sb3JpemF0aW9uIixlW2UuZ3VpZGVzPTEzXT0iZ3VpZGVzIixlW2UuY29kZUxlbnM9MTRdPSJjb2RlTGVucyIsZVtlLmNvZGVMZW5zRm9udEZhbWlseT0xNV09ImNvZGVMZW5zRm9udEZhbWlseSIsZVtlLmNvZGVMZW5zRm9udFNpemU9MTZdPSJjb2RlTGVuc0ZvbnRTaXplIixlW2UuY29sb3JEZWNvcmF0b3JzPTE3XT0iY29sb3JEZWNvcmF0b3JzIixlW2UuY29sdW1uU2VsZWN0aW9uPTE4XT0iY29sdW1uU2VsZWN0aW9uIixlW2UuY29tbWVudHM9MTldPSJjb21tZW50cyIsZVtlLmNvbnRleHRtZW51PTIwXT0iY29udGV4dG1lbnUiLGVbZS5jb3B5V2l0aFN5bnRheEhpZ2hsaWdodGluZz0yMV09ImNvcHlXaXRoU3ludGF4SGlnaGxpZ2h0aW5nIixlW2UuY3Vyc29yQmxpbmtpbmc9MjJdPSJjdXJzb3JCbGlua2luZyIsZVtlLmN1cnNvclNtb290aENhcmV0QW5pbWF0aW9uPTIzXT0iY3Vyc29yU21vb3RoQ2FyZXRBbmltYXRpb24iLGVbZS5jdXJzb3JTdHlsZT0yNF09ImN1cnNvclN0eWxlIixlW2UuY3Vyc29yU3Vycm91bmRpbmdMaW5lcz0yNV09ImN1cnNvclN1cnJvdW5kaW5nTGluZXMiLGVbZS5jdXJzb3JTdXJyb3VuZGluZ0xpbmVzU3R5bGU9MjZdPSJjdXJzb3JTdXJyb3VuZGluZ0xpbmVzU3R5bGUiLGVbZS5jdXJzb3JXaWR0aD0yN109ImN1cnNvcldpZHRoIixlW2UuZGlzYWJsZUxheWVySGludGluZz0yOF09ImRpc2FibGVMYXllckhpbnRpbmciLGVbZS5kaXNhYmxlTW9ub3NwYWNlT3B0aW1pemF0aW9ucz0yOV09ImRpc2FibGVNb25vc3BhY2VPcHRpbWl6YXRpb25zIixlW2UuZG9tUmVhZE9ubHk9MzBdPSJkb21SZWFkT25seSIsZVtlLmRyYWdBbmREcm9wPTMxXT0iZHJhZ0FuZERyb3AiLGVbZS5kcm9wSW50b0VkaXRvcj0zMl09ImRyb3BJbnRvRWRpdG9yIixlW2UuZW1wdHlTZWxlY3Rpb25DbGlwYm9hcmQ9MzNdPSJlbXB0eVNlbGVjdGlvbkNsaXBib2FyZCIsZVtlLmV4cGVyaW1lbnRhbD0zNF09ImV4cGVyaW1lbnRhbCIsZVtlLmV4dHJhRWRpdG9yQ2xhc3NOYW1lPTM1XT0iZXh0cmFFZGl0b3JDbGFzc05hbWUiLGVbZS5mYXN0U2Nyb2xsU2Vuc2l0aXZpdHk9MzZdPSJmYXN0U2Nyb2xsU2Vuc2l0aXZpdHkiLGVbZS5maW5kPTM3XT0iZmluZCIsZVtlLmZpeGVkT3ZlcmZsb3dXaWRnZXRzPTM4XT0iZml4ZWRPdmVyZmxvd1dpZGdldHMiLGVbZS5mb2xkaW5nPTM5XT0iZm9sZGluZyIsZVtlLmZvbGRpbmdTdHJhdGVneT00MF09ImZvbGRpbmdTdHJhdGVneSIsZVtlLmZvbGRpbmdIaWdobGlnaHQ9NDFdPSJmb2xkaW5nSGlnaGxpZ2h0IixlW2UuZm9sZGluZ0ltcG9ydHNCeURlZmF1bHQ9NDJdPSJmb2xkaW5nSW1wb3J0c0J5RGVmYXVsdCIsZVtlLmZvbGRpbmdNYXhpbXVtUmVnaW9ucz00M109ImZvbGRpbmdNYXhpbXVtUmVnaW9ucyIsZVtlLnVuZm9sZE9uQ2xpY2tBZnRlckVuZE9mTGluZT00NF09InVuZm9sZE9uQ2xpY2tBZnRlckVuZE9mTGluZSIsZVtlLmZvbnRGYW1pbHk9NDVdPSJmb250RmFtaWx5IixlW2UuZm9udEluZm89NDZdPSJmb250SW5mbyIsZVtlLmZvbnRMaWdhdHVyZXM9NDddPSJmb250TGlnYXR1cmVzIixlW2UuZm9udFNpemU9NDhdPSJmb250U2l6ZSIsZVtlLmZvbnRXZWlnaHQ9NDldPSJmb250V2VpZ2h0IixlW2UuZm9ybWF0T25QYXN0ZT01MF09ImZvcm1hdE9uUGFzdGUiLGVbZS5mb3JtYXRPblR5cGU9NTFdPSJmb3JtYXRPblR5cGUiLGVbZS5nbHlwaE1hcmdpbj01Ml09ImdseXBoTWFyZ2luIixlW2UuZ290b0xvY2F0aW9uPTUzXT0iZ290b0xvY2F0aW9uIixlW2UuaGlkZUN1cnNvckluT3ZlcnZpZXdSdWxlcj01NF09ImhpZGVDdXJzb3JJbk92ZXJ2aWV3UnVsZXIiLGVbZS5ob3Zlcj01NV09ImhvdmVyIixlW2UuaW5EaWZmRWRpdG9yPTU2XT0iaW5EaWZmRWRpdG9yIixlW2UuaW5saW5lU3VnZ2VzdD01N109ImlubGluZVN1Z2dlc3QiLGVbZS5sZXR0ZXJTcGFjaW5nPTU4XT0ibGV0dGVyU3BhY2luZyIsZVtlLmxpZ2h0YnVsYj01OV09ImxpZ2h0YnVsYiIsZVtlLmxpbmVEZWNvcmF0aW9uc1dpZHRoPTYwXT0ibGluZURlY29yYXRpb25zV2lkdGgiLGVbZS5saW5lSGVpZ2h0PTYxXT0ibGluZUhlaWdodCIsZVtlLmxpbmVOdW1iZXJzPTYyXT0ibGluZU51bWJlcnMiLGVbZS5saW5lTnVtYmVyc01pbkNoYXJzPTYzXT0ibGluZU51bWJlcnNNaW5DaGFycyIsZVtlLmxpbmtlZEVkaXRpbmc9NjRdPSJsaW5rZWRFZGl0aW5nIixlW2UubGlua3M9NjVdPSJsaW5rcyIsZVtlLm1hdGNoQnJhY2tldHM9NjZdPSJtYXRjaEJyYWNrZXRzIixlW2UubWluaW1hcD02N109Im1pbmltYXAiLGVbZS5tb3VzZVN0eWxlPTY4XT0ibW91c2VTdHlsZSIsZVtlLm1vdXNlV2hlZWxTY3JvbGxTZW5zaXRpdml0eT02OV09Im1vdXNlV2hlZWxTY3JvbGxTZW5zaXRpdml0eSIsZVtlLm1vdXNlV2hlZWxab29tPTcwXT0ibW91c2VXaGVlbFpvb20iLGVbZS5tdWx0aUN1cnNvck1lcmdlT3ZlcmxhcHBpbmc9NzFdPSJtdWx0aUN1cnNvck1lcmdlT3ZlcmxhcHBpbmciLGVbZS5tdWx0aUN1cnNvck1vZGlmaWVyPTcyXT0ibXVsdGlDdXJzb3JNb2RpZmllciIsZVtlLm11bHRpQ3Vyc29yUGFzdGU9NzNdPSJtdWx0aUN1cnNvclBhc3RlIixlW2Uub2NjdXJyZW5jZXNIaWdobGlnaHQ9NzRdPSJvY2N1cnJlbmNlc0hpZ2hsaWdodCIsZVtlLm92ZXJ2aWV3UnVsZXJCb3JkZXI9NzVdPSJvdmVydmlld1J1bGVyQm9yZGVyIixlW2Uub3ZlcnZpZXdSdWxlckxhbmVzPTc2XT0ib3ZlcnZpZXdSdWxlckxhbmVzIixlW2UucGFkZGluZz03N109InBhZGRpbmciLGVbZS5wYXJhbWV0ZXJIaW50cz03OF09InBhcmFtZXRlckhpbnRzIixlW2UucGVla1dpZGdldERlZmF1bHRGb2N1cz03OV09InBlZWtXaWRnZXREZWZhdWx0Rm9jdXMiLGVbZS5kZWZpbml0aW9uTGlua09wZW5zSW5QZWVrPTgwXT0iZGVmaW5pdGlvbkxpbmtPcGVuc0luUGVlayIsZVtlLnF1aWNrU3VnZ2VzdGlvbnM9ODFdPSJxdWlja1N1Z2dlc3Rpb25zIixlW2UucXVpY2tTdWdnZXN0aW9uc0RlbGF5PTgyXT0icXVpY2tTdWdnZXN0aW9uc0RlbGF5IixlW2UucmVhZE9ubHk9ODNdPSJyZWFkT25seSIsZVtlLnJlbmFtZU9uVHlwZT04NF09InJlbmFtZU9uVHlwZSIsZVtlLnJlbmRlckNvbnRyb2xDaGFyYWN0ZXJzPTg1XT0icmVuZGVyQ29udHJvbENoYXJhY3RlcnMiLGVbZS5yZW5kZXJGaW5hbE5ld2xpbmU9ODZdPSJyZW5kZXJGaW5hbE5ld2xpbmUiLGVbZS5yZW5kZXJMaW5lSGlnaGxpZ2h0PTg3XT0icmVuZGVyTGluZUhpZ2hsaWdodCIsZVtlLnJlbmRlckxpbmVIaWdobGlnaHRPbmx5V2hlbkZvY3VzPTg4XT0icmVuZGVyTGluZUhpZ2hsaWdodE9ubHlXaGVuRm9jdXMiLGVbZS5yZW5kZXJWYWxpZGF0aW9uRGVjb3JhdGlvbnM9ODldPSJyZW5kZXJWYWxpZGF0aW9uRGVjb3JhdGlvbnMiLGVbZS5yZW5kZXJXaGl0ZXNwYWNlPTkwXT0icmVuZGVyV2hpdGVzcGFjZSIsZVtlLnJldmVhbEhvcml6b250YWxSaWdodFBhZGRpbmc9OTFdPSJyZXZlYWxIb3Jpem9udGFsUmlnaHRQYWRkaW5nIixlW2Uucm91bmRlZFNlbGVjdGlvbj05Ml09InJvdW5kZWRTZWxlY3Rpb24iLGVbZS5ydWxlcnM9OTNdPSJydWxlcnMiLGVbZS5zY3JvbGxiYXI9OTRdPSJzY3JvbGxiYXIiLGVbZS5zY3JvbGxCZXlvbmRMYXN0Q29sdW1uPTk1XT0ic2Nyb2xsQmV5b25kTGFzdENvbHVtbiIsZVtlLnNjcm9sbEJleW9uZExhc3RMaW5lPTk2XT0ic2Nyb2xsQmV5b25kTGFzdExpbmUiLGVbZS5zY3JvbGxQcmVkb21pbmFudEF4aXM9OTddPSJzY3JvbGxQcmVkb21pbmFudEF4aXMiLGVbZS5zZWxlY3Rpb25DbGlwYm9hcmQ9OThdPSJzZWxlY3Rpb25DbGlwYm9hcmQiLGVbZS5zZWxlY3Rpb25IaWdobGlnaHQ9OTldPSJzZWxlY3Rpb25IaWdobGlnaHQiLGVbZS5zZWxlY3RPbkxpbmVOdW1iZXJzPTEwMF09InNlbGVjdE9uTGluZU51bWJlcnMiLGVbZS5zaG93Rm9sZGluZ0NvbnRyb2xzPTEwMV09InNob3dGb2xkaW5nQ29udHJvbHMiLGVbZS5zaG93VW51c2VkPTEwMl09InNob3dVbnVzZWQiLGVbZS5zbmlwcGV0U3VnZ2VzdGlvbnM9MTAzXT0ic25pcHBldFN1Z2dlc3Rpb25zIixlW2Uuc21hcnRTZWxlY3Q9MTA0XT0ic21hcnRTZWxlY3QiLGVbZS5zbW9vdGhTY3JvbGxpbmc9MTA1XT0ic21vb3RoU2Nyb2xsaW5nIixlW2Uuc3RpY2t5VGFiU3RvcHM9MTA2XT0ic3RpY2t5VGFiU3RvcHMiLGVbZS5zdG9wUmVuZGVyaW5nTGluZUFmdGVyPTEwN109InN0b3BSZW5kZXJpbmdMaW5lQWZ0ZXIiLGVbZS5zdWdnZXN0PTEwOF09InN1Z2dlc3QiLGVbZS5zdWdnZXN0Rm9udFNpemU9MTA5XT0ic3VnZ2VzdEZvbnRTaXplIixlW2Uuc3VnZ2VzdExpbmVIZWlnaHQ9MTEwXT0ic3VnZ2VzdExpbmVIZWlnaHQiLGVbZS5zdWdnZXN0T25UcmlnZ2VyQ2hhcmFjdGVycz0xMTFdPSJzdWdnZXN0T25UcmlnZ2VyQ2hhcmFjdGVycyIsZVtlLnN1Z2dlc3RTZWxlY3Rpb249MTEyXT0ic3VnZ2VzdFNlbGVjdGlvbiIsZVtlLnRhYkNvbXBsZXRpb249MTEzXT0idGFiQ29tcGxldGlvbiIsZVtlLnRhYkluZGV4PTExNF09InRhYkluZGV4IixlW2UudW5pY29kZUhpZ2hsaWdodGluZz0xMTVdPSJ1bmljb2RlSGlnaGxpZ2h0aW5nIixlW2UudW51c3VhbExpbmVUZXJtaW5hdG9ycz0xMTZdPSJ1bnVzdWFsTGluZVRlcm1pbmF0b3JzIixlW2UudXNlU2hhZG93RE9NPTExN109InVzZVNoYWRvd0RPTSIsZVtlLnVzZVRhYlN0b3BzPTExOF09InVzZVRhYlN0b3BzIixlW2Uud29yZFNlcGFyYXRvcnM9MTE5XT0id29yZFNlcGFyYXRvcnMiLGVbZS53b3JkV3JhcD0xMjBdPSJ3b3JkV3JhcCIsZVtlLndvcmRXcmFwQnJlYWtBZnRlckNoYXJhY3RlcnM9MTIxXT0id29yZFdyYXBCcmVha0FmdGVyQ2hhcmFjdGVycyIsZVtlLndvcmRXcmFwQnJlYWtCZWZvcmVDaGFyYWN0ZXJzPTEyMl09IndvcmRXcmFwQnJlYWtCZWZvcmVDaGFyYWN0ZXJzIixlW2Uud29yZFdyYXBDb2x1bW49MTIzXT0id29yZFdyYXBDb2x1bW4iLGVbZS53b3JkV3JhcE92ZXJyaWRlMT0xMjRdPSJ3b3JkV3JhcE92ZXJyaWRlMSIsZVtlLndvcmRXcmFwT3ZlcnJpZGUyPTEyNV09IndvcmRXcmFwT3ZlcnJpZGUyIixlW2Uud3JhcHBpbmdJbmRlbnQ9MTI2XT0id3JhcHBpbmdJbmRlbnQiLGVbZS53cmFwcGluZ1N0cmF0ZWd5PTEyN109IndyYXBwaW5nU3RyYXRlZ3kiLGVbZS5zaG93RGVwcmVjYXRlZD0xMjhdPSJzaG93RGVwcmVjYXRlZCIsZVtlLmlubGF5SGludHM9MTI5XT0iaW5sYXlIaW50cyIsZVtlLmVkaXRvckNsYXNzTmFtZT0xMzBdPSJlZGl0b3JDbGFzc05hbWUiLGVbZS5waXhlbFJhdGlvPTEzMV09InBpeGVsUmF0aW8iLGVbZS50YWJGb2N1c01vZGU9MTMyXT0idGFiRm9jdXNNb2RlIixlW2UubGF5b3V0SW5mbz0xMzNdPSJsYXlvdXRJbmZvIixlW2Uud3JhcHBpbmdJbmZvPTEzNF09IndyYXBwaW5nSW5mbyJ9KGNufHwoY249e30pKSxmdW5jdGlvbihlKXtlW2UuVGV4dERlZmluZWQ9MF09IlRleHREZWZpbmVkIixlW2UuTEY9MV09IkxGIixlW2UuQ1JMRj0yXT0iQ1JMRiJ9KGxufHwobG49e30pKSxmdW5jdGlvbihlKXtlW2UuTEY9MF09IkxGIixlW2UuQ1JMRj0xXT0iQ1JMRiJ9KHVufHwodW49e30pKSxmdW5jdGlvbihlKXtlW2UuTm9uZT0wXT0iTm9uZSIsZVtlLkluZGVudD0xXT0iSW5kZW50IixlW2UuSW5kZW50T3V0ZGVudD0yXT0iSW5kZW50T3V0ZGVudCIsZVtlLk91dGRlbnQ9M109Ik91dGRlbnQifShobnx8KGhuPXt9KSksZnVuY3Rpb24oZSl7ZVtlLkJvdGg9MF09IkJvdGgiLGVbZS5SaWdodD0xXT0iUmlnaHQiLGVbZS5MZWZ0PTJdPSJMZWZ0IixlW2UuTm9uZT0zXT0iTm9uZSJ9KGZufHwoZm49e30pKSxmdW5jdGlvbihlKXtlW2UuVHlwZT0xXT0iVHlwZSIsZVtlLlBhcmFtZXRlcj0yXT0iUGFyYW1ldGVyIn0oZG58fChkbj17fSkpLGZ1bmN0aW9uKGUpe2VbZS5BdXRvbWF0aWM9MF09IkF1dG9tYXRpYyIsZVtlLkV4cGxpY2l0PTFdPSJFeHBsaWNpdCJ9KG1ufHwobW49e30pKSxmdW5jdGlvbihlKXtlW2UuRGVwZW5kc09uS2JMYXlvdXQ9LTFdPSJEZXBlbmRzT25LYkxheW91dCIsZVtlLlVua25vd249MF09IlVua25vd24iLGVbZS5CYWNrc3BhY2U9MV09IkJhY2tzcGFjZSIsZVtlLlRhYj0yXT0iVGFiIixlW2UuRW50ZXI9M109IkVudGVyIixlW2UuU2hpZnQ9NF09IlNoaWZ0IixlW2UuQ3RybD01XT0iQ3RybCIsZVtlLkFsdD02XT0iQWx0IixlW2UuUGF1c2VCcmVhaz03XT0iUGF1c2VCcmVhayIsZVtlLkNhcHNMb2NrPThdPSJDYXBzTG9jayIsZVtlLkVzY2FwZT05XT0iRXNjYXBlIixlW2UuU3BhY2U9MTBdPSJTcGFjZSIsZVtlLlBhZ2VVcD0xMV09IlBhZ2VVcCIsZVtlLlBhZ2VEb3duPTEyXT0iUGFnZURvd24iLGVbZS5FbmQ9MTNdPSJFbmQiLGVbZS5Ib21lPTE0XT0iSG9tZSIsZVtlLkxlZnRBcnJvdz0xNV09IkxlZnRBcnJvdyIsZVtlLlVwQXJyb3c9MTZdPSJVcEFycm93IixlW2UuUmlnaHRBcnJvdz0xN109IlJpZ2h0QXJyb3ciLGVbZS5Eb3duQXJyb3c9MThdPSJEb3duQXJyb3ciLGVbZS5JbnNlcnQ9MTldPSJJbnNlcnQiLGVbZS5EZWxldGU9MjBdPSJEZWxldGUiLGVbZS5EaWdpdDA9MjFdPSJEaWdpdDAiLGVbZS5EaWdpdDE9MjJdPSJEaWdpdDEiLGVbZS5EaWdpdDI9MjNdPSJEaWdpdDIiLGVbZS5EaWdpdDM9MjRdPSJEaWdpdDMiLGVbZS5EaWdpdDQ9MjVdPSJEaWdpdDQiLGVbZS5EaWdpdDU9MjZdPSJEaWdpdDUiLGVbZS5EaWdpdDY9MjddPSJEaWdpdDYiLGVbZS5EaWdpdDc9MjhdPSJEaWdpdDciLGVbZS5EaWdpdDg9MjldPSJEaWdpdDgiLGVbZS5EaWdpdDk9MzBdPSJEaWdpdDkiLGVbZS5LZXlBPTMxXT0iS2V5QSIsZVtlLktleUI9MzJdPSJLZXlCIixlW2UuS2V5Qz0zM109IktleUMiLGVbZS5LZXlEPTM0XT0iS2V5RCIsZVtlLktleUU9MzVdPSJLZXlFIixlW2UuS2V5Rj0zNl09IktleUYiLGVbZS5LZXlHPTM3XT0iS2V5RyIsZVtlLktleUg9MzhdPSJLZXlIIixlW2UuS2V5ST0zOV09IktleUkiLGVbZS5LZXlKPTQwXT0iS2V5SiIsZVtlLktleUs9NDFdPSJLZXlLIixlW2UuS2V5TD00Ml09IktleUwiLGVbZS5LZXlNPTQzXT0iS2V5TSIsZVtlLktleU49NDRdPSJLZXlOIixlW2UuS2V5Tz00NV09IktleU8iLGVbZS5LZXlQPTQ2XT0iS2V5UCIsZVtlLktleVE9NDddPSJLZXlRIixlW2UuS2V5Uj00OF09IktleVIiLGVbZS5LZXlTPTQ5XT0iS2V5UyIsZVtlLktleVQ9NTBdPSJLZXlUIixlW2UuS2V5VT01MV09IktleVUiLGVbZS5LZXlWPTUyXT0iS2V5ViIsZVtlLktleVc9NTNdPSJLZXlXIixlW2UuS2V5WD01NF09IktleVgiLGVbZS5LZXlZPTU1XT0iS2V5WSIsZVtlLktleVo9NTZdPSJLZXlaIixlW2UuTWV0YT01N109Ik1ldGEiLGVbZS5Db250ZXh0TWVudT01OF09IkNvbnRleHRNZW51IixlW2UuRjE9NTldPSJGMSIsZVtlLkYyPTYwXT0iRjIiLGVbZS5GMz02MV09IkYzIixlW2UuRjQ9NjJdPSJGNCIsZVtlLkY1PTYzXT0iRjUiLGVbZS5GNj02NF09IkY2IixlW2UuRjc9NjVdPSJGNyIsZVtlLkY4PTY2XT0iRjgiLGVbZS5GOT02N109IkY5IixlW2UuRjEwPTY4XT0iRjEwIixlW2UuRjExPTY5XT0iRjExIixlW2UuRjEyPTcwXT0iRjEyIixlW2UuRjEzPTcxXT0iRjEzIixlW2UuRjE0PTcyXT0iRjE0IixlW2UuRjE1PTczXT0iRjE1IixlW2UuRjE2PTc0XT0iRjE2IixlW2UuRjE3PTc1XT0iRjE3IixlW2UuRjE4PTc2XT0iRjE4IixlW2UuRjE5PTc3XT0iRjE5IixlW2UuTnVtTG9jaz03OF09Ik51bUxvY2siLGVbZS5TY3JvbGxMb2NrPTc5XT0iU2Nyb2xsTG9jayIsZVtlLlNlbWljb2xvbj04MF09IlNlbWljb2xvbiIsZVtlLkVxdWFsPTgxXT0iRXF1YWwiLGVbZS5Db21tYT04Ml09IkNvbW1hIixlW2UuTWludXM9ODNdPSJNaW51cyIsZVtlLlBlcmlvZD04NF09IlBlcmlvZCIsZVtlLlNsYXNoPTg1XT0iU2xhc2giLGVbZS5CYWNrcXVvdGU9ODZdPSJCYWNrcXVvdGUiLGVbZS5CcmFja2V0TGVmdD04N109IkJyYWNrZXRMZWZ0IixlW2UuQmFja3NsYXNoPTg4XT0iQmFja3NsYXNoIixlW2UuQnJhY2tldFJpZ2h0PTg5XT0iQnJhY2tldFJpZ2h0IixlW2UuUXVvdGU9OTBdPSJRdW90ZSIsZVtlLk9FTV84PTkxXT0iT0VNXzgiLGVbZS5JbnRsQmFja3NsYXNoPTkyXT0iSW50bEJhY2tzbGFzaCIsZVtlLk51bXBhZDA9OTNdPSJOdW1wYWQwIixlW2UuTnVtcGFkMT05NF09Ik51bXBhZDEiLGVbZS5OdW1wYWQyPTk1XT0iTnVtcGFkMiIsZVtlLk51bXBhZDM9OTZdPSJOdW1wYWQzIixlW2UuTnVtcGFkND05N109Ik51bXBhZDQiLGVbZS5OdW1wYWQ1PTk4XT0iTnVtcGFkNSIsZVtlLk51bXBhZDY9OTldPSJOdW1wYWQ2IixlW2UuTnVtcGFkNz0xMDBdPSJOdW1wYWQ3IixlW2UuTnVtcGFkOD0xMDFdPSJOdW1wYWQ4IixlW2UuTnVtcGFkOT0xMDJdPSJOdW1wYWQ5IixlW2UuTnVtcGFkTXVsdGlwbHk9MTAzXT0iTnVtcGFkTXVsdGlwbHkiLGVbZS5OdW1wYWRBZGQ9MTA0XT0iTnVtcGFkQWRkIixlW2UuTlVNUEFEX1NFUEFSQVRPUj0xMDVdPSJOVU1QQURfU0VQQVJBVE9SIixlW2UuTnVtcGFkU3VidHJhY3Q9MTA2XT0iTnVtcGFkU3VidHJhY3QiLGVbZS5OdW1wYWREZWNpbWFsPTEwN109Ik51bXBhZERlY2ltYWwiLGVbZS5OdW1wYWREaXZpZGU9MTA4XT0iTnVtcGFkRGl2aWRlIixlW2UuS0VZX0lOX0NPTVBPU0lUSU9OPTEwOV09IktFWV9JTl9DT01QT1NJVElPTiIsZVtlLkFCTlRfQzE9MTEwXT0iQUJOVF9DMSIsZVtlLkFCTlRfQzI9MTExXT0iQUJOVF9DMiIsZVtlLkF1ZGlvVm9sdW1lTXV0ZT0xMTJdPSJBdWRpb1ZvbHVtZU11dGUiLGVbZS5BdWRpb1ZvbHVtZVVwPTExM109IkF1ZGlvVm9sdW1lVXAiLGVbZS5BdWRpb1ZvbHVtZURvd249MTE0XT0iQXVkaW9Wb2x1bWVEb3duIixlW2UuQnJvd3NlclNlYXJjaD0xMTVdPSJCcm93c2VyU2VhcmNoIixlW2UuQnJvd3NlckhvbWU9MTE2XT0iQnJvd3NlckhvbWUiLGVbZS5Ccm93c2VyQmFjaz0xMTddPSJCcm93c2VyQmFjayIsZVtlLkJyb3dzZXJGb3J3YXJkPTExOF09IkJyb3dzZXJGb3J3YXJkIixlW2UuTWVkaWFUcmFja05leHQ9MTE5XT0iTWVkaWFUcmFja05leHQiLGVbZS5NZWRpYVRyYWNrUHJldmlvdXM9MTIwXT0iTWVkaWFUcmFja1ByZXZpb3VzIixlW2UuTWVkaWFTdG9wPTEyMV09Ik1lZGlhU3RvcCIsZVtlLk1lZGlhUGxheVBhdXNlPTEyMl09Ik1lZGlhUGxheVBhdXNlIixlW2UuTGF1bmNoTWVkaWFQbGF5ZXI9MTIzXT0iTGF1bmNoTWVkaWFQbGF5ZXIiLGVbZS5MYXVuY2hNYWlsPTEyNF09IkxhdW5jaE1haWwiLGVbZS5MYXVuY2hBcHAyPTEyNV09IkxhdW5jaEFwcDIiLGVbZS5DbGVhcj0xMjZdPSJDbGVhciIsZVtlLk1BWF9WQUxVRT0xMjddPSJNQVhfVkFMVUUifShnbnx8KGduPXt9KSksZnVuY3Rpb24oZSl7ZVtlLkhpbnQ9MV09IkhpbnQiLGVbZS5JbmZvPTJdPSJJbmZvIixlW2UuV2FybmluZz00XT0iV2FybmluZyIsZVtlLkVycm9yPThdPSJFcnJvciJ9KHBufHwocG49e30pKSxmdW5jdGlvbihlKXtlW2UuVW5uZWNlc3Nhcnk9MV09IlVubmVjZXNzYXJ5IixlW2UuRGVwcmVjYXRlZD0yXT0iRGVwcmVjYXRlZCJ9KGJufHwoYm49e30pKSxmdW5jdGlvbihlKXtlW2UuSW5saW5lPTFdPSJJbmxpbmUiLGVbZS5HdXR0ZXI9Ml09Ikd1dHRlciJ9KHZufHwodm49e30pKSxmdW5jdGlvbihlKXtlW2UuVU5LTk9XTj0wXT0iVU5LTk9XTiIsZVtlLlRFWFRBUkVBPTFdPSJURVhUQVJFQSIsZVtlLkdVVFRFUl9HTFlQSF9NQVJHSU49Ml09IkdVVFRFUl9HTFlQSF9NQVJHSU4iLGVbZS5HVVRURVJfTElORV9OVU1CRVJTPTNdPSJHVVRURVJfTElORV9OVU1CRVJTIixlW2UuR1VUVEVSX0xJTkVfREVDT1JBVElPTlM9NF09IkdVVFRFUl9MSU5FX0RFQ09SQVRJT05TIixlW2UuR1VUVEVSX1ZJRVdfWk9ORT01XT0iR1VUVEVSX1ZJRVdfWk9ORSIsZVtlLkNPTlRFTlRfVEVYVD02XT0iQ09OVEVOVF9URVhUIixlW2UuQ09OVEVOVF9FTVBUWT03XT0iQ09OVEVOVF9FTVBUWSIsZVtlLkNPTlRFTlRfVklFV19aT05FPThdPSJDT05URU5UX1ZJRVdfWk9ORSIsZVtlLkNPTlRFTlRfV0lER0VUPTldPSJDT05URU5UX1dJREdFVCIsZVtlLk9WRVJWSUVXX1JVTEVSPTEwXT0iT1ZFUlZJRVdfUlVMRVIiLGVbZS5TQ1JPTExCQVI9MTFdPSJTQ1JPTExCQVIiLGVbZS5PVkVSTEFZX1dJREdFVD0xMl09Ik9WRVJMQVlfV0lER0VUIixlW2UuT1VUU0lERV9FRElUT1I9MTNdPSJPVVRTSURFX0VESVRPUiJ9KHlufHwoeW49e30pKSxmdW5jdGlvbihlKXtlW2UuVE9QX1JJR0hUX0NPUk5FUj0wXT0iVE9QX1JJR0hUX0NPUk5FUiIsZVtlLkJPVFRPTV9SSUdIVF9DT1JORVI9MV09IkJPVFRPTV9SSUdIVF9DT1JORVIiLGVbZS5UT1BfQ0VOVEVSPTJdPSJUT1BfQ0VOVEVSIn0oQ258fChDbj17fSkpLGZ1bmN0aW9uKGUpe2VbZS5MZWZ0PTFdPSJMZWZ0IixlW2UuQ2VudGVyPTJdPSJDZW50ZXIiLGVbZS5SaWdodD00XT0iUmlnaHQiLGVbZS5GdWxsPTddPSJGdWxsIn0od258fCh3bj17fSkpLGZ1bmN0aW9uKGUpe2VbZS5MZWZ0PTBdPSJMZWZ0IixlW2UuUmlnaHQ9MV09IlJpZ2h0IixlW2UuTm9uZT0yXT0iTm9uZSIsZVtlLkxlZnRPZkluamVjdGVkVGV4dD0zXT0iTGVmdE9mSW5qZWN0ZWRUZXh0IixlW2UuUmlnaHRPZkluamVjdGVkVGV4dD00XT0iUmlnaHRPZkluamVjdGVkVGV4dCJ9KF9ufHwoX249e30pKSxmdW5jdGlvbihlKXtlW2UuT2ZmPTBdPSJPZmYiLGVbZS5Pbj0xXT0iT24iLGVbZS5SZWxhdGl2ZT0yXT0iUmVsYXRpdmUiLGVbZS5JbnRlcnZhbD0zXT0iSW50ZXJ2YWwiLGVbZS5DdXN0b209NF09IkN1c3RvbSJ9KFNufHwoU249e30pKSxmdW5jdGlvbihlKXtlW2UuTm9uZT0wXT0iTm9uZSIsZVtlLlRleHQ9MV09IlRleHQiLGVbZS5CbG9ja3M9Ml09IkJsb2NrcyJ9KEFufHwoQW49e30pKSxmdW5jdGlvbihlKXtlW2UuU21vb3RoPTBdPSJTbW9vdGgiLGVbZS5JbW1lZGlhdGU9MV09IkltbWVkaWF0ZSJ9KEVufHwoRW49e30pKSxmdW5jdGlvbihlKXtlW2UuQXV0bz0xXT0iQXV0byIsZVtlLkhpZGRlbj0yXT0iSGlkZGVuIixlW2UuVmlzaWJsZT0zXT0iVmlzaWJsZSJ9KHhufHwoeG49e30pKSxmdW5jdGlvbihlKXtlW2UuTFRSPTBdPSJMVFIiLGVbZS5SVEw9MV09IlJUTCJ9KE5ufHwoTm49e30pKSxmdW5jdGlvbihlKXtlW2UuSW52b2tlPTFdPSJJbnZva2UiLGVbZS5UcmlnZ2VyQ2hhcmFjdGVyPTJdPSJUcmlnZ2VyQ2hhcmFjdGVyIixlW2UuQ29udGVudENoYW5nZT0zXT0iQ29udGVudENoYW5nZSJ9KGtufHwoa249e30pKSxmdW5jdGlvbihlKXtlW2UuRmlsZT0wXT0iRmlsZSIsZVtlLk1vZHVsZT0xXT0iTW9kdWxlIixlW2UuTmFtZXNwYWNlPTJdPSJOYW1lc3BhY2UiLGVbZS5QYWNrYWdlPTNdPSJQYWNrYWdlIixlW2UuQ2xhc3M9NF09IkNsYXNzIixlW2UuTWV0aG9kPTVdPSJNZXRob2QiLGVbZS5Qcm9wZXJ0eT02XT0iUHJvcGVydHkiLGVbZS5GaWVsZD03XT0iRmllbGQiLGVbZS5Db25zdHJ1Y3Rvcj04XT0iQ29uc3RydWN0b3IiLGVbZS5FbnVtPTldPSJFbnVtIixlW2UuSW50ZXJmYWNlPTEwXT0iSW50ZXJmYWNlIixlW2UuRnVuY3Rpb249MTFdPSJGdW5jdGlvbiIsZVtlLlZhcmlhYmxlPTEyXT0iVmFyaWFibGUiLGVbZS5Db25zdGFudD0xM109IkNvbnN0YW50IixlW2UuU3RyaW5nPTE0XT0iU3RyaW5nIixlW2UuTnVtYmVyPTE1XT0iTnVtYmVyIixlW2UuQm9vbGVhbj0xNl09IkJvb2xlYW4iLGVbZS5BcnJheT0xN109IkFycmF5IixlW2UuT2JqZWN0PTE4XT0iT2JqZWN0IixlW2UuS2V5PTE5XT0iS2V5IixlW2UuTnVsbD0yMF09Ik51bGwiLGVbZS5FbnVtTWVtYmVyPTIxXT0iRW51bU1lbWJlciIsZVtlLlN0cnVjdD0yMl09IlN0cnVjdCIsZVtlLkV2ZW50PTIzXT0iRXZlbnQiLGVbZS5PcGVyYXRvcj0yNF09Ik9wZXJhdG9yIixlW2UuVHlwZVBhcmFtZXRlcj0yNV09IlR5cGVQYXJhbWV0ZXIifShMbnx8KExuPXt9KSksZnVuY3Rpb24oZSl7ZVtlLkRlcHJlY2F0ZWQ9MV09IkRlcHJlY2F0ZWQifShUbnx8KFRuPXt9KSksZnVuY3Rpb24oZSl7ZVtlLkhpZGRlbj0wXT0iSGlkZGVuIixlW2UuQmxpbms9MV09IkJsaW5rIixlW2UuU21vb3RoPTJdPSJTbW9vdGgiLGVbZS5QaGFzZT0zXT0iUGhhc2UiLGVbZS5FeHBhbmQ9NF09IkV4cGFuZCIsZVtlLlNvbGlkPTVdPSJTb2xpZCJ9KE9ufHwoT249e30pKSxmdW5jdGlvbihlKXtlW2UuTGluZT0xXT0iTGluZSIsZVtlLkJsb2NrPTJdPSJCbG9jayIsZVtlLlVuZGVybGluZT0zXT0iVW5kZXJsaW5lIixlW2UuTGluZVRoaW49NF09IkxpbmVUaGluIixlW2UuQmxvY2tPdXRsaW5lPTVdPSJCbG9ja091dGxpbmUiLGVbZS5VbmRlcmxpbmVUaGluPTZdPSJVbmRlcmxpbmVUaGluIn0oSW58fChJbj17fSkpLGZ1bmN0aW9uKGUpe2VbZS5BbHdheXNHcm93c1doZW5UeXBpbmdBdEVkZ2VzPTBdPSJBbHdheXNHcm93c1doZW5UeXBpbmdBdEVkZ2VzIixlW2UuTmV2ZXJHcm93c1doZW5UeXBpbmdBdEVkZ2VzPTFdPSJOZXZlckdyb3dzV2hlblR5cGluZ0F0RWRnZXMiLGVbZS5Hcm93c09ubHlXaGVuVHlwaW5nQmVmb3JlPTJdPSJHcm93c09ubHlXaGVuVHlwaW5nQmVmb3JlIixlW2UuR3Jvd3NPbmx5V2hlblR5cGluZ0FmdGVyPTNdPSJHcm93c09ubHlXaGVuVHlwaW5nQWZ0ZXIifShNbnx8KE1uPXt9KSksZnVuY3Rpb24oZSl7ZVtlLk5vbmU9MF09Ik5vbmUiLGVbZS5TYW1lPTFdPSJTYW1lIixlW2UuSW5kZW50PTJdPSJJbmRlbnQiLGVbZS5EZWVwSW5kZW50PTNdPSJEZWVwSW5kZW50In0oUG58fChQbj17fSkpO2NsYXNzIFVue3N0YXRpYyBjaG9yZChlLHQpe3JldHVybiBmdW5jdGlvbihlLHQpe3JldHVybihlfCg2NTUzNSZ0KTw8MTY+Pj4wKT4+PjB9KGUsdCl9fWZ1bmN0aW9uIEJuKGUsdCxuLHIsaSl7cmV0dXJuIGZ1bmN0aW9uKGUsdCxuLHIsaSl7aWYoMD09PXIpcmV0dXJuITA7Y29uc3Qgbz10LmNoYXJDb2RlQXQoci0xKTtpZigwIT09ZS5nZXQobykpcmV0dXJuITA7aWYoMTM9PT1vfHwxMD09PW8pcmV0dXJuITA7aWYoaT4wKXtjb25zdCBuPXQuY2hhckNvZGVBdChyKTtpZigwIT09ZS5nZXQobikpcmV0dXJuITB9cmV0dXJuITF9KGUsdCwwLHIsaSkmJmZ1bmN0aW9uKGUsdCxuLHIsaSl7aWYocitpPT09bilyZXR1cm4hMDtjb25zdCBvPXQuY2hhckNvZGVBdChyK2kpO2lmKDAhPT1lLmdldChvKSlyZXR1cm4hMDtpZigxMz09PW98fDEwPT09bylyZXR1cm4hMDtpZihpPjApe2NvbnN0IG49dC5jaGFyQ29kZUF0KHIraS0xKTtpZigwIT09ZS5nZXQobikpcmV0dXJuITB9cmV0dXJuITF9KGUsdCxuLHIsaSl9VW4uQ3RybENtZD0yMDQ4LFVuLlNoaWZ0PTEwMjQsVW4uQWx0PTUxMixVbi5XaW5DdHJsPTI1NixmdW5jdGlvbihlKXtlW2UuTGVmdD0xXT0iTGVmdCIsZVtlLkNlbnRlcj0yXT0iQ2VudGVyIixlW2UuUmlnaHQ9NF09IlJpZ2h0IixlW2UuRnVsbD03XT0iRnVsbCJ9KFJufHwoUm49e30pKSxmdW5jdGlvbihlKXtlW2UuSW5saW5lPTFdPSJJbmxpbmUiLGVbZS5HdXR0ZXI9Ml09Ikd1dHRlciJ9KFZufHwoVm49e30pKSxmdW5jdGlvbihlKXtlW2UuQm90aD0wXT0iQm90aCIsZVtlLlJpZ2h0PTFdPSJSaWdodCIsZVtlLkxlZnQ9Ml09IkxlZnQiLGVbZS5Ob25lPTNdPSJOb25lIn0oRm58fChGbj17fSkpO2NsYXNzIHFue2NvbnN0cnVjdG9yKGUsdCl7dGhpcy5fd29yZFNlcGFyYXRvcnM9ZSx0aGlzLl9zZWFyY2hSZWdleD10LHRoaXMuX3ByZXZNYXRjaFN0YXJ0SW5kZXg9LTEsdGhpcy5fcHJldk1hdGNoTGVuZ3RoPTB9cmVzZXQoZSl7dGhpcy5fc2VhcmNoUmVnZXgubGFzdEluZGV4PWUsdGhpcy5fcHJldk1hdGNoU3RhcnRJbmRleD0tMSx0aGlzLl9wcmV2TWF0Y2hMZW5ndGg9MH1uZXh0KGUpe2NvbnN0IHQ9ZS5sZW5ndGg7bGV0IG47ZG97aWYodGhpcy5fcHJldk1hdGNoU3RhcnRJbmRleCt0aGlzLl9wcmV2TWF0Y2hMZW5ndGg9PT10KXJldHVybiBudWxsO2lmKG49dGhpcy5fc2VhcmNoUmVnZXguZXhlYyhlKSwhbilyZXR1cm4gbnVsbDtjb25zdCByPW4uaW5kZXgsaT1uWzBdLmxlbmd0aDtpZihyPT09dGhpcy5fcHJldk1hdGNoU3RhcnRJbmRleCYmaT09PXRoaXMuX3ByZXZNYXRjaExlbmd0aCl7aWYoMD09PWkpe1ooZSx0LHRoaXMuX3NlYXJjaFJlZ2V4Lmxhc3RJbmRleCk+NjU1MzU/dGhpcy5fc2VhcmNoUmVnZXgubGFzdEluZGV4Kz0yOnRoaXMuX3NlYXJjaFJlZ2V4Lmxhc3RJbmRleCs9MTtjb250aW51ZX1yZXR1cm4gbnVsbH1pZih0aGlzLl9wcmV2TWF0Y2hTdGFydEluZGV4PXIsdGhpcy5fcHJldk1hdGNoTGVuZ3RoPWksIXRoaXMuX3dvcmRTZXBhcmF0b3JzfHxCbih0aGlzLl93b3JkU2VwYXJhdG9ycyxlLHQscixpKSlyZXR1cm4gbn13aGlsZShuKTtyZXR1cm4gbnVsbH19Y2xhc3MgJG57c3RhdGljIGNvbXB1dGVVbmljb2RlSGlnaGxpZ2h0cyhlLHQsbil7Y29uc3Qgcj1uP24uc3RhcnRMaW5lTnVtYmVyOjEsaT1uP24uZW5kTGluZU51bWJlcjplLmdldExpbmVDb3VudCgpLG89bmV3IFduKHQpLGE9by5nZXRDYW5kaWRhdGVDb2RlUG9pbnRzKCk7bGV0IHM7dmFyIGMsbDtzPSJhbGxOb25CYXNpY0FzY2lpIj09PWE/bmV3IFJlZ0V4cCgiW15cXHRcXG5cXHJcXHgyMC1cXHg3RV0iLCJnIik6bmV3IFJlZ0V4cCgiIisoYz1BcnJheS5mcm9tKGEpLGBbJHtsPWMubWFwKChlPT5TdHJpbmcuZnJvbUNvZGVQb2ludChlKSkpLmpvaW4oIiIpLGwucmVwbGFjZSgvW1xcXHtcfVwqXCtcP1x8XF5cJFwuXFtcXVwoXCldL2csIlxcJCYiKX1dYCksImciKTtjb25zdCB1PW5ldyBxbihudWxsLHMpLGg9W107bGV0IGYsZD0hMSxtPTAsZz0wLHA9MDtlOmZvcihsZXQgdD1yLG49aTt0PD1uO3QrKyl7Y29uc3Qgbj1lLmdldExpbmVDb250ZW50KHQpLHI9bi5sZW5ndGg7dS5yZXNldCgwKTtkb3tpZihmPXUubmV4dChuKSxmKXtsZXQgZT1mLmluZGV4LGk9Zi5pbmRleCtmWzBdLmxlbmd0aDtpZihlPjApe1gobi5jaGFyQ29kZUF0KGUtMSkpJiZlLS19aWYoaSsxPHIpe1gobi5jaGFyQ29kZUF0KGktMSkpJiZpKyt9Y29uc3QgYT1uLnN1YnN0cmluZyhlLGkpLHM9eXQoZSsxLGJ0LG4sMCksYz1vLnNob3VsZEhpZ2hsaWdodE5vbkJhc2ljQVNDSUkoYSxzP3Mud29yZDpudWxsKTtpZigwIT09Yyl7Mz09PWM/bSsrOjI9PT1jP2crKzoxPT09Yz9wKys6eigpO2NvbnN0IG49MWUzO2lmKGgubGVuZ3RoPj1uKXtkPSEwO2JyZWFrIGV9aC5wdXNoKG5ldyB0dCh0LGUrMSx0LGkrMSkpfX19d2hpbGUoZil9cmV0dXJue3JhbmdlczpoLGhhc01vcmU6ZCxhbWJpZ3VvdXNDaGFyYWN0ZXJDb3VudDptLGludmlzaWJsZUNoYXJhY3RlckNvdW50Omcsbm9uQmFzaWNBc2NpaUNoYXJhY3RlckNvdW50OnB9fXN0YXRpYyBjb21wdXRlVW5pY29kZUhpZ2hsaWdodFJlYXNvbihlLHQpe2NvbnN0IG49bmV3IFduKHQpO3N3aXRjaChuLnNob3VsZEhpZ2hsaWdodE5vbkJhc2ljQVNDSUkoZSxudWxsKSl7Y2FzZSAwOnJldHVybiBudWxsO2Nhc2UgMjpyZXR1cm57a2luZDoxfTtjYXNlIDM6e2NvbnN0IHI9ZS5jb2RlUG9pbnRBdCgwKSxpPW4uYW1iaWd1b3VzQ2hhcmFjdGVycy5nZXRQcmltYXJ5Q29uZnVzYWJsZShyKSxvPVEuZ2V0TG9jYWxlcygpLmZpbHRlcigoZT0+IVEuZ2V0SW5zdGFuY2UobmV3IFNldChbLi4udC5hbGxvd2VkTG9jYWxlcyxlXSkpLmlzQW1iaWd1b3VzKHIpKSk7cmV0dXJue2tpbmQ6MCxjb25mdXNhYmxlV2l0aDpTdHJpbmcuZnJvbUNvZGVQb2ludChpKSxub3RBbWJpZ3VvdXNJbkxvY2FsZXM6b319Y2FzZSAxOnJldHVybntraW5kOjJ9fX19Y2xhc3MgV257Y29uc3RydWN0b3IoZSl7dGhpcy5vcHRpb25zPWUsdGhpcy5hbGxvd2VkQ29kZVBvaW50cz1uZXcgU2V0KGUuYWxsb3dlZENvZGVQb2ludHMpLHRoaXMuYW1iaWd1b3VzQ2hhcmFjdGVycz1RLmdldEluc3RhbmNlKG5ldyBTZXQoZS5hbGxvd2VkTG9jYWxlcykpfWdldENhbmRpZGF0ZUNvZGVQb2ludHMoKXtpZih0aGlzLm9wdGlvbnMubm9uQmFzaWNBU0NJSSlyZXR1cm4iYWxsTm9uQmFzaWNBc2NpaSI7Y29uc3QgZT1uZXcgU2V0O2lmKHRoaXMub3B0aW9ucy5pbnZpc2libGVDaGFyYWN0ZXJzKWZvcihjb25zdCB0IG9mIGVlLmNvZGVQb2ludHMpSG4oU3RyaW5nLmZyb21Db2RlUG9pbnQodCkpfHxlLmFkZCh0KTtpZih0aGlzLm9wdGlvbnMuYW1iaWd1b3VzQ2hhcmFjdGVycylmb3IoY29uc3QgdCBvZiB0aGlzLmFtYmlndW91c0NoYXJhY3RlcnMuZ2V0Q29uZnVzYWJsZUNvZGVQb2ludHMoKSllLmFkZCh0KTtmb3IoY29uc3QgdCBvZiB0aGlzLmFsbG93ZWRDb2RlUG9pbnRzKWUuZGVsZXRlKHQpO3JldHVybiBlfXNob3VsZEhpZ2hsaWdodE5vbkJhc2ljQVNDSUkoZSx0KXtjb25zdCBuPWUuY29kZVBvaW50QXQoMCk7aWYodGhpcy5hbGxvd2VkQ29kZVBvaW50cy5oYXMobikpcmV0dXJuIDA7aWYodGhpcy5vcHRpb25zLm5vbkJhc2ljQVNDSUkpcmV0dXJuIDE7bGV0IHI9ITEsaT0hMTtpZih0KWZvcihjb25zdCBlIG9mIHQpe2NvbnN0IHQ9ZS5jb2RlUG9pbnRBdCgwKSxuPShvPWUsWS50ZXN0KG8pKTtyPXJ8fG4sbnx8dGhpcy5hbWJpZ3VvdXNDaGFyYWN0ZXJzLmlzQW1iaWd1b3VzKHQpfHxlZS5pc0ludmlzaWJsZUNoYXJhY3Rlcih0KXx8KGk9ITApfXZhciBvO3JldHVybiFyJiZpPzA6dGhpcy5vcHRpb25zLmludmlzaWJsZUNoYXJhY3RlcnMmJiFIbihlKSYmZWUuaXNJbnZpc2libGVDaGFyYWN0ZXIobik/Mjp0aGlzLm9wdGlvbnMuYW1iaWd1b3VzQ2hhcmFjdGVycyYmdGhpcy5hbWJpZ3VvdXNDaGFyYWN0ZXJzLmlzQW1iaWd1b3VzKG4pPzM6MH19ZnVuY3Rpb24gSG4oZSl7cmV0dXJuIiAiPT09ZXx8IlxuIj09PWV8fCJcdCI9PT1lfXZhciB6bj1mdW5jdGlvbihlLHQsbixyKXtyZXR1cm4gbmV3KG58fChuPVByb21pc2UpKSgoZnVuY3Rpb24oaSxvKXtmdW5jdGlvbiBhKGUpe3RyeXtjKHIubmV4dChlKSl9Y2F0Y2goZSl7byhlKX19ZnVuY3Rpb24gcyhlKXt0cnl7YyhyLnRocm93KGUpKX1jYXRjaChlKXtvKGUpfX1mdW5jdGlvbiBjKGUpe3ZhciB0O2UuZG9uZT9pKGUudmFsdWUpOih0PWUudmFsdWUsdCBpbnN0YW5jZW9mIG4/dDpuZXcgbigoZnVuY3Rpb24oZSl7ZSh0KX0pKSkudGhlbihhLHMpfWMoKHI9ci5hcHBseShlLHR8fFtdKSkubmV4dCgpKX0pKX07Y2xhc3MgR24gZXh0ZW5kcyBwdHtnZXQgdXJpKCl7cmV0dXJuIHRoaXMuX3VyaX1nZXQgZW9sKCl7cmV0dXJuIHRoaXMuX2VvbH1nZXRWYWx1ZSgpe3JldHVybiB0aGlzLmdldFRleHQoKX1nZXRMaW5lc0NvbnRlbnQoKXtyZXR1cm4gdGhpcy5fbGluZXMuc2xpY2UoMCl9Z2V0TGluZUNvdW50KCl7cmV0dXJuIHRoaXMuX2xpbmVzLmxlbmd0aH1nZXRMaW5lQ29udGVudChlKXtyZXR1cm4gdGhpcy5fbGluZXNbZS0xXX1nZXRXb3JkQXRQb3NpdGlvbihlLHQpe2NvbnN0IG49eXQoZS5jb2x1bW4sZnVuY3Rpb24oZSl7bGV0IHQ9YnQ7aWYoZSYmZSBpbnN0YW5jZW9mIFJlZ0V4cClpZihlLmdsb2JhbCl0PWU7ZWxzZXtsZXQgbj0iZyI7ZS5pZ25vcmVDYXNlJiYobis9ImkiKSxlLm11bHRpbGluZSYmKG4rPSJtIiksZS51bmljb2RlJiYobis9InUiKSx0PW5ldyBSZWdFeHAoZS5zb3VyY2Usbil9cmV0dXJuIHQubGFzdEluZGV4PTAsdH0odCksdGhpcy5fbGluZXNbZS5saW5lTnVtYmVyLTFdLDApO3JldHVybiBuP25ldyB0dChlLmxpbmVOdW1iZXIsbi5zdGFydENvbHVtbixlLmxpbmVOdW1iZXIsbi5lbmRDb2x1bW4pOm51bGx9d29yZHMoZSl7Y29uc3QgdD10aGlzLl9saW5lcyxuPXRoaXMuX3dvcmRlbml6ZS5iaW5kKHRoaXMpO2xldCByPTAsaT0iIixvPTAsYT1bXTtyZXR1cm57KltTeW1ib2wuaXRlcmF0b3JdKCl7Zm9yKDs7KWlmKG88YS5sZW5ndGgpe2NvbnN0IGU9aS5zdWJzdHJpbmcoYVtvXS5zdGFydCxhW29dLmVuZCk7bys9MSx5aWVsZCBlfWVsc2V7aWYoIShyPHQubGVuZ3RoKSlicmVhaztpPXRbcl0sYT1uKGksZSksbz0wLHIrPTF9fX19Z2V0TGluZVdvcmRzKGUsdCl7Y29uc3Qgbj10aGlzLl9saW5lc1tlLTFdLHI9dGhpcy5fd29yZGVuaXplKG4sdCksaT1bXTtmb3IoY29uc3QgZSBvZiByKWkucHVzaCh7d29yZDpuLnN1YnN0cmluZyhlLnN0YXJ0LGUuZW5kKSxzdGFydENvbHVtbjplLnN0YXJ0KzEsZW5kQ29sdW1uOmUuZW5kKzF9KTtyZXR1cm4gaX1fd29yZGVuaXplKGUsdCl7Y29uc3Qgbj1bXTtsZXQgcjtmb3IodC5sYXN0SW5kZXg9MDsocj10LmV4ZWMoZSkpJiYwIT09clswXS5sZW5ndGg7KW4ucHVzaCh7c3RhcnQ6ci5pbmRleCxlbmQ6ci5pbmRleCtyWzBdLmxlbmd0aH0pO3JldHVybiBufWdldFZhbHVlSW5SYW5nZShlKXtpZigoZT10aGlzLl92YWxpZGF0ZVJhbmdlKGUpKS5zdGFydExpbmVOdW1iZXI9PT1lLmVuZExpbmVOdW1iZXIpcmV0dXJuIHRoaXMuX2xpbmVzW2Uuc3RhcnRMaW5lTnVtYmVyLTFdLnN1YnN0cmluZyhlLnN0YXJ0Q29sdW1uLTEsZS5lbmRDb2x1bW4tMSk7Y29uc3QgdD10aGlzLl9lb2wsbj1lLnN0YXJ0TGluZU51bWJlci0xLHI9ZS5lbmRMaW5lTnVtYmVyLTEsaT1bXTtpLnB1c2godGhpcy5fbGluZXNbbl0uc3Vic3RyaW5nKGUuc3RhcnRDb2x1bW4tMSkpO2ZvcihsZXQgZT1uKzE7ZTxyO2UrKylpLnB1c2godGhpcy5fbGluZXNbZV0pO3JldHVybiBpLnB1c2godGhpcy5fbGluZXNbcl0uc3Vic3RyaW5nKDAsZS5lbmRDb2x1bW4tMSkpLGkuam9pbih0KX1vZmZzZXRBdChlKXtyZXR1cm4gZT10aGlzLl92YWxpZGF0ZVBvc2l0aW9uKGUpLHRoaXMuX2Vuc3VyZUxpbmVTdGFydHMoKSx0aGlzLl9saW5lU3RhcnRzLmdldFByZWZpeFN1bShlLmxpbmVOdW1iZXItMikrKGUuY29sdW1uLTEpfXBvc2l0aW9uQXQoZSl7ZT1NYXRoLmZsb29yKGUpLGU9TWF0aC5tYXgoMCxlKSx0aGlzLl9lbnN1cmVMaW5lU3RhcnRzKCk7Y29uc3QgdD10aGlzLl9saW5lU3RhcnRzLmdldEluZGV4T2YoZSksbj10aGlzLl9saW5lc1t0LmluZGV4XS5sZW5ndGg7cmV0dXJue2xpbmVOdW1iZXI6MSt0LmluZGV4LGNvbHVtbjoxK01hdGgubWluKHQucmVtYWluZGVyLG4pfX1fdmFsaWRhdGVSYW5nZShlKXtjb25zdCB0PXRoaXMuX3ZhbGlkYXRlUG9zaXRpb24oe2xpbmVOdW1iZXI6ZS5zdGFydExpbmVOdW1iZXIsY29sdW1uOmUuc3RhcnRDb2x1bW59KSxuPXRoaXMuX3ZhbGlkYXRlUG9zaXRpb24oe2xpbmVOdW1iZXI6ZS5lbmRMaW5lTnVtYmVyLGNvbHVtbjplLmVuZENvbHVtbn0pO3JldHVybiB0LmxpbmVOdW1iZXIhPT1lLnN0YXJ0TGluZU51bWJlcnx8dC5jb2x1bW4hPT1lLnN0YXJ0Q29sdW1ufHxuLmxpbmVOdW1iZXIhPT1lLmVuZExpbmVOdW1iZXJ8fG4uY29sdW1uIT09ZS5lbmRDb2x1bW4/e3N0YXJ0TGluZU51bWJlcjp0LmxpbmVOdW1iZXIsc3RhcnRDb2x1bW46dC5jb2x1bW4sZW5kTGluZU51bWJlcjpuLmxpbmVOdW1iZXIsZW5kQ29sdW1uOm4uY29sdW1ufTplfV92YWxpZGF0ZVBvc2l0aW9uKGUpe2lmKCFldC5pc0lQb3NpdGlvbihlKSl0aHJvdyBuZXcgRXJyb3IoImJhZCBwb3NpdGlvbiIpO2xldHtsaW5lTnVtYmVyOnQsY29sdW1uOm59PWUscj0hMTtpZih0PDEpdD0xLG49MSxyPSEwO2Vsc2UgaWYodD50aGlzLl9saW5lcy5sZW5ndGgpdD10aGlzLl9saW5lcy5sZW5ndGgsbj10aGlzLl9saW5lc1t0LTFdLmxlbmd0aCsxLHI9ITA7ZWxzZXtjb25zdCBlPXRoaXMuX2xpbmVzW3QtMV0ubGVuZ3RoKzE7bjwxPyhuPTEscj0hMCk6bj5lJiYobj1lLHI9ITApfXJldHVybiByP3tsaW5lTnVtYmVyOnQsY29sdW1uOm59OmV9fWNsYXNzIEpue2NvbnN0cnVjdG9yKGUsdCl7dGhpcy5faG9zdD1lLHRoaXMuX21vZGVscz1PYmplY3QuY3JlYXRlKG51bGwpLHRoaXMuX2ZvcmVpZ25Nb2R1bGVGYWN0b3J5PXQsdGhpcy5fZm9yZWlnbk1vZHVsZT1udWxsfWRpc3Bvc2UoKXt0aGlzLl9tb2RlbHM9T2JqZWN0LmNyZWF0ZShudWxsKX1fZ2V0TW9kZWwoZSl7cmV0dXJuIHRoaXMuX21vZGVsc1tlXX1fZ2V0TW9kZWxzKCl7Y29uc3QgZT1bXTtyZXR1cm4gT2JqZWN0LmtleXModGhpcy5fbW9kZWxzKS5mb3JFYWNoKCh0PT5lLnB1c2godGhpcy5fbW9kZWxzW3RdKSkpLGV9YWNjZXB0TmV3TW9kZWwoZSl7dGhpcy5fbW9kZWxzW2UudXJsXT1uZXcgR24ocWUucGFyc2UoZS51cmwpLGUubGluZXMsZS5FT0wsZS52ZXJzaW9uSWQpfWFjY2VwdE1vZGVsQ2hhbmdlZChlLHQpe2lmKCF0aGlzLl9tb2RlbHNbZV0pcmV0dXJuO3RoaXMuX21vZGVsc1tlXS5vbkV2ZW50cyh0KX1hY2NlcHRSZW1vdmVkTW9kZWwoZSl7dGhpcy5fbW9kZWxzW2VdJiZkZWxldGUgdGhpcy5fbW9kZWxzW2VdfWNvbXB1dGVVbmljb2RlSGlnaGxpZ2h0cyhlLHQsbil7cmV0dXJuIHpuKHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3Qgcj10aGlzLl9nZXRNb2RlbChlKTtyZXR1cm4gcj8kbi5jb21wdXRlVW5pY29kZUhpZ2hsaWdodHMocix0LG4pOntyYW5nZXM6W10saGFzTW9yZTohMSxhbWJpZ3VvdXNDaGFyYWN0ZXJDb3VudDowLGludmlzaWJsZUNoYXJhY3RlckNvdW50OjAsbm9uQmFzaWNBc2NpaUNoYXJhY3RlckNvdW50OjB9fSkpfWNvbXB1dGVEaWZmKGUsdCxuLHIpe3JldHVybiB6bih0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2NvbnN0IGk9dGhpcy5fZ2V0TW9kZWwoZSksbz10aGlzLl9nZXRNb2RlbCh0KTtyZXR1cm4gaSYmbz9Kbi5jb21wdXRlRGlmZihpLG8sbixyKTpudWxsfSkpfXN0YXRpYyBjb21wdXRlRGlmZihlLHQsbixyKXtjb25zdCBpPWUuZ2V0TGluZXNDb250ZW50KCksbz10LmdldExpbmVzQ29udGVudCgpLGE9bmV3IHN0KGksbyx7c2hvdWxkQ29tcHV0ZUNoYXJDaGFuZ2VzOiEwLHNob3VsZFBvc3RQcm9jZXNzQ2hhckNoYW5nZXM6ITAsc2hvdWxkSWdub3JlVHJpbVdoaXRlc3BhY2U6bixzaG91bGRNYWtlUHJldHR5RGlmZjohMCxtYXhDb21wdXRhdGlvblRpbWU6cn0pLmNvbXB1dGVEaWZmKCkscz0hKGEuY2hhbmdlcy5sZW5ndGg+MCkmJnRoaXMuX21vZGVsc0FyZUlkZW50aWNhbChlLHQpO3JldHVybntxdWl0RWFybHk6YS5xdWl0RWFybHksaWRlbnRpY2FsOnMsY2hhbmdlczphLmNoYW5nZXN9fXN0YXRpYyBfbW9kZWxzQXJlSWRlbnRpY2FsKGUsdCl7Y29uc3Qgbj1lLmdldExpbmVDb3VudCgpO2lmKG4hPT10LmdldExpbmVDb3VudCgpKXJldHVybiExO2ZvcihsZXQgcj0xO3I8PW47cisrKXtpZihlLmdldExpbmVDb250ZW50KHIpIT09dC5nZXRMaW5lQ29udGVudChyKSlyZXR1cm4hMX1yZXR1cm4hMH1jb21wdXRlTW9yZU1pbmltYWxFZGl0cyhlLHQpe3JldHVybiB6bih0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2NvbnN0IG49dGhpcy5fZ2V0TW9kZWwoZSk7aWYoIW4pcmV0dXJuIHQ7Y29uc3Qgcj1bXTtsZXQgaTt0PXQuc2xpY2UoMCkuc29ydCgoKGUsdCk9PntpZihlLnJhbmdlJiZ0LnJhbmdlKXJldHVybiB0dC5jb21wYXJlUmFuZ2VzVXNpbmdTdGFydHMoZS5yYW5nZSx0LnJhbmdlKTtyZXR1cm4oZS5yYW5nZT8wOjEpLSh0LnJhbmdlPzA6MSl9KSk7Zm9yKGxldHtyYW5nZTplLHRleHQ6byxlb2w6YX1vZiB0KXtpZigibnVtYmVyIj09dHlwZW9mIGEmJihpPWEpLHR0LmlzRW1wdHkoZSkmJiFvKWNvbnRpbnVlO2NvbnN0IHQ9bi5nZXRWYWx1ZUluUmFuZ2UoZSk7aWYobz1vLnJlcGxhY2UoL1xyXG58XG58XHIvZyxuLmVvbCksdD09PW8pY29udGludWU7aWYoTWF0aC5tYXgoby5sZW5ndGgsdC5sZW5ndGgpPkpuLl9kaWZmTGltaXQpe3IucHVzaCh7cmFuZ2U6ZSx0ZXh0Om99KTtjb250aW51ZX1jb25zdCBzPW1lKHQsbywhMSksYz1uLm9mZnNldEF0KHR0LmxpZnQoZSkuZ2V0U3RhcnRQb3NpdGlvbigpKTtmb3IoY29uc3QgZSBvZiBzKXtjb25zdCB0PW4ucG9zaXRpb25BdChjK2Uub3JpZ2luYWxTdGFydCksaT1uLnBvc2l0aW9uQXQoYytlLm9yaWdpbmFsU3RhcnQrZS5vcmlnaW5hbExlbmd0aCksYT17dGV4dDpvLnN1YnN0cihlLm1vZGlmaWVkU3RhcnQsZS5tb2RpZmllZExlbmd0aCkscmFuZ2U6e3N0YXJ0TGluZU51bWJlcjp0LmxpbmVOdW1iZXIsc3RhcnRDb2x1bW46dC5jb2x1bW4sZW5kTGluZU51bWJlcjppLmxpbmVOdW1iZXIsZW5kQ29sdW1uOmkuY29sdW1ufX07bi5nZXRWYWx1ZUluUmFuZ2UoYS5yYW5nZSkhPT1hLnRleHQmJnIucHVzaChhKX19cmV0dXJuIm51bWJlciI9PXR5cGVvZiBpJiZyLnB1c2goe2VvbDppLHRleHQ6IiIscmFuZ2U6e3N0YXJ0TGluZU51bWJlcjowLHN0YXJ0Q29sdW1uOjAsZW5kTGluZU51bWJlcjowLGVuZENvbHVtbjowfX0pLHJ9KSl9Y29tcHV0ZUxpbmtzKGUpe3JldHVybiB6bih0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2NvbnN0IHQ9dGhpcy5fZ2V0TW9kZWwoZSk7cmV0dXJuIHQ/ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJiJmdW5jdGlvbiI9PXR5cGVvZiBlLmdldExpbmVDb3VudCYmImZ1bmN0aW9uIj09dHlwZW9mIGUuZ2V0TGluZUNvbnRlbnQ/eHQuY29tcHV0ZUxpbmtzKGUpOltdfSh0KTpudWxsfSkpfXRleHR1YWxTdWdnZXN0KGUsdCxuLHIpe3JldHVybiB6bih0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2NvbnN0IGk9bmV3IFYoITApLG89bmV3IFJlZ0V4cChuLHIpLGE9bmV3IFNldDtlOmZvcihjb25zdCBuIG9mIGUpe2NvbnN0IGU9dGhpcy5fZ2V0TW9kZWwobik7aWYoZSlmb3IoY29uc3QgbiBvZiBlLndvcmRzKG8pKWlmKG4hPT10JiZpc05hTihOdW1iZXIobikpJiYoYS5hZGQobiksYS5zaXplPkpuLl9zdWdnZXN0aW9uc0xpbWl0KSlicmVhayBlfXJldHVybnt3b3JkczpBcnJheS5mcm9tKGEpLGR1cmF0aW9uOmkuZWxhcHNlZCgpfX0pKX1jb21wdXRlV29yZFJhbmdlcyhlLHQsbixyKXtyZXR1cm4gem4odGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtjb25zdCBpPXRoaXMuX2dldE1vZGVsKGUpO2lmKCFpKXJldHVybiBPYmplY3QuY3JlYXRlKG51bGwpO2NvbnN0IG89bmV3IFJlZ0V4cChuLHIpLGE9T2JqZWN0LmNyZWF0ZShudWxsKTtmb3IobGV0IGU9dC5zdGFydExpbmVOdW1iZXI7ZTx0LmVuZExpbmVOdW1iZXI7ZSsrKXtjb25zdCB0PWkuZ2V0TGluZVdvcmRzKGUsbyk7Zm9yKGNvbnN0IG4gb2YgdCl7aWYoIWlzTmFOKE51bWJlcihuLndvcmQpKSljb250aW51ZTtsZXQgdD1hW24ud29yZF07dHx8KHQ9W10sYVtuLndvcmRdPXQpLHQucHVzaCh7c3RhcnRMaW5lTnVtYmVyOmUsc3RhcnRDb2x1bW46bi5zdGFydENvbHVtbixlbmRMaW5lTnVtYmVyOmUsZW5kQ29sdW1uOm4uZW5kQ29sdW1ufSl9fXJldHVybiBhfSkpfW5hdmlnYXRlVmFsdWVTZXQoZSx0LG4scixpKXtyZXR1cm4gem4odGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtjb25zdCBvPXRoaXMuX2dldE1vZGVsKGUpO2lmKCFvKXJldHVybiBudWxsO2NvbnN0IGE9bmV3IFJlZ0V4cChyLGkpO3Quc3RhcnRDb2x1bW49PT10LmVuZENvbHVtbiYmKHQ9e3N0YXJ0TGluZU51bWJlcjp0LnN0YXJ0TGluZU51bWJlcixzdGFydENvbHVtbjp0LnN0YXJ0Q29sdW1uLGVuZExpbmVOdW1iZXI6dC5lbmRMaW5lTnVtYmVyLGVuZENvbHVtbjp0LmVuZENvbHVtbisxfSk7Y29uc3Qgcz1vLmdldFZhbHVlSW5SYW5nZSh0KSxjPW8uZ2V0V29yZEF0UG9zaXRpb24oe2xpbmVOdW1iZXI6dC5zdGFydExpbmVOdW1iZXIsY29sdW1uOnQuc3RhcnRDb2x1bW59LGEpO2lmKCFjKXJldHVybiBudWxsO2NvbnN0IGw9by5nZXRWYWx1ZUluUmFuZ2UoYyk7cmV0dXJuIE50LklOU1RBTkNFLm5hdmlnYXRlVmFsdWVTZXQodCxzLGMsbCxuKX0pKX1sb2FkRm9yZWlnbk1vZHVsZShlLHQsbil7Y29uc3Qgcj1mdW5jdGlvbihlLHQpe2NvbnN0IG49ZT0+ZnVuY3Rpb24oKXtjb25zdCBuPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywwKTtyZXR1cm4gdChlLG4pfSxyPXt9O2Zvcihjb25zdCB0IG9mIGUpclt0XT1uKHQpO3JldHVybiByfShuLCgoZSx0KT0+dGhpcy5faG9zdC5maHIoZSx0KSkpLGk9e2hvc3Q6cixnZXRNaXJyb3JNb2RlbHM6KCk9PnRoaXMuX2dldE1vZGVscygpfTtyZXR1cm4gdGhpcy5fZm9yZWlnbk1vZHVsZUZhY3Rvcnk/KHRoaXMuX2ZvcmVpZ25Nb2R1bGU9dGhpcy5fZm9yZWlnbk1vZHVsZUZhY3RvcnkoaSx0KSxQcm9taXNlLnJlc29sdmUoSCh0aGlzLl9mb3JlaWduTW9kdWxlKSkpOlByb21pc2UucmVqZWN0KG5ldyBFcnJvcigiVW5leHBlY3RlZCB1c2FnZSIpKX1mbXIoZSx0KXtpZighdGhpcy5fZm9yZWlnbk1vZHVsZXx8ImZ1bmN0aW9uIiE9dHlwZW9mIHRoaXMuX2ZvcmVpZ25Nb2R1bGVbZV0pcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcigiTWlzc2luZyByZXF1ZXN0SGFuZGxlciBvciBtZXRob2Q6ICIrZSkpO3RyeXtyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHRoaXMuX2ZvcmVpZ25Nb2R1bGVbZV0uYXBwbHkodGhpcy5fZm9yZWlnbk1vZHVsZSx0KSl9Y2F0Y2goZSl7cmV0dXJuIFByb21pc2UucmVqZWN0KGUpfX19Sm4uX2RpZmZMaW1pdD0xZTUsSm4uX3N1Z2dlc3Rpb25zTGltaXQ9MWU0LCJmdW5jdGlvbiI9PXR5cGVvZiBpbXBvcnRTY3JpcHRzJiYoTi5tb25hY289e2VkaXRvcjp2b2lkIDAsbGFuZ3VhZ2VzOnZvaWQgMCxDYW5jZWxsYXRpb25Ub2tlblNvdXJjZTpPdCxFbWl0dGVyOkIsS2V5Q29kZTpnbixLZXlNb2Q6VW4sUG9zaXRpb246ZXQsUmFuZ2U6dHQsU2VsZWN0aW9uOlV0LFNlbGVjdGlvbkRpcmVjdGlvbjpObixNYXJrZXJTZXZlcml0eTpwbixNYXJrZXJUYWc6Ym4sVXJpOnFlLFRva2VuOmpufSk7bGV0IFhuPSExO2Z1bmN0aW9uIFpuKGUpe2lmKFhuKXJldHVybjtYbj0hMDtjb25zdCB0PW5ldyBsZSgoZT0+e3NlbGYucG9zdE1lc3NhZ2UoZSl9KSwodD0+bmV3IEpuKHQsZSkpKTtzZWxmLm9ubWVzc2FnZT1lPT57dC5vbm1lc3NhZ2UoZS5kYXRhKX19Ci8qIS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgKiBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAgICAqIFZlcnNpb246IDAuMzQuMChmMWFkOTUxZjI2YWZiM2JhNjQzMjdiNzBjMzA1NmNhYmMzODUxNDkyKQogICAgICogUmVsZWFzZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlCiAgICAgKiBodHRwczovL2dpdGh1Yi5jb20vbWljcm9zb2Z0L21vbmFjby1lZGl0b3IvYmxvYi9tYWluL0xJQ0VOU0UudHh0CiAgICAgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KZnVuY3Rpb24gWW4oZSx0KXt2b2lkIDA9PT10JiYodD0hMSk7dmFyIG49ZS5sZW5ndGgscj0wLGk9IiIsbz0wLGE9MTYscz0wLGM9MCxsPTAsdT0wLGg9MDtmdW5jdGlvbiBmKHQsbil7Zm9yKHZhciBpPTAsbz0wO2k8dHx8IW47KXt2YXIgYT1lLmNoYXJDb2RlQXQocik7aWYoYT49NDgmJmE8PTU3KW89MTYqbythLTQ4O2Vsc2UgaWYoYT49NjUmJmE8PTcwKW89MTYqbythLTY1KzEwO2Vsc2V7aWYoIShhPj05NyYmYTw9MTAyKSlicmVhaztvPTE2Km8rYS05NysxMH1yKyssaSsrfXJldHVybiBpPHQmJihvPS0xKSxvfWZ1bmN0aW9uIGQoKXtpZihpPSIiLGg9MCxvPXIsYz1zLHU9bCxyPj1uKXJldHVybiBvPW4sYT0xNzt2YXIgdD1lLmNoYXJDb2RlQXQocik7aWYoUW4odCkpe2Rve3IrKyxpKz1TdHJpbmcuZnJvbUNoYXJDb2RlKHQpLHQ9ZS5jaGFyQ29kZUF0KHIpfXdoaWxlKFFuKHQpKTtyZXR1cm4gYT0xNX1pZihlcih0KSlyZXR1cm4gcisrLGkrPVN0cmluZy5mcm9tQ2hhckNvZGUodCksMTM9PT10JiYxMD09PWUuY2hhckNvZGVBdChyKSYmKHIrKyxpKz0iXG4iKSxzKyssbD1yLGE9MTQ7c3dpdGNoKHQpe2Nhc2UgMTIzOnJldHVybiByKyssYT0xO2Nhc2UgMTI1OnJldHVybiByKyssYT0yO2Nhc2UgOTE6cmV0dXJuIHIrKyxhPTM7Y2FzZSA5MzpyZXR1cm4gcisrLGE9NDtjYXNlIDU4OnJldHVybiByKyssYT02O2Nhc2UgNDQ6cmV0dXJuIHIrKyxhPTU7Y2FzZSAzNDpyZXR1cm4gcisrLGk9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9IiIsaT1yOzspe2lmKHI+PW4pe3QrPWUuc3Vic3RyaW5nKGksciksaD0yO2JyZWFrfXZhciBvPWUuY2hhckNvZGVBdChyKTtpZigzND09PW8pe3QrPWUuc3Vic3RyaW5nKGkscikscisrO2JyZWFrfWlmKDkyIT09byl7aWYobz49MCYmbzw9MzEpe2lmKGVyKG8pKXt0Kz1lLnN1YnN0cmluZyhpLHIpLGg9MjticmVha31oPTZ9cisrfWVsc2V7aWYodCs9ZS5zdWJzdHJpbmcoaSxyKSwrK3I+PW4pe2g9MjticmVha31zd2l0Y2goZS5jaGFyQ29kZUF0KHIrKykpe2Nhc2UgMzQ6dCs9JyInO2JyZWFrO2Nhc2UgOTI6dCs9IlxcIjticmVhaztjYXNlIDQ3OnQrPSIvIjticmVhaztjYXNlIDk4OnQrPSJcYiI7YnJlYWs7Y2FzZSAxMDI6dCs9IlxmIjticmVhaztjYXNlIDExMDp0Kz0iXG4iO2JyZWFrO2Nhc2UgMTE0OnQrPSJcciI7YnJlYWs7Y2FzZSAxMTY6dCs9Ilx0IjticmVhaztjYXNlIDExNzp2YXIgYT1mKDQsITApO2E+PTA/dCs9U3RyaW5nLmZyb21DaGFyQ29kZShhKTpoPTQ7YnJlYWs7ZGVmYXVsdDpoPTV9aT1yfX1yZXR1cm4gdH0oKSxhPTEwO2Nhc2UgNDc6dmFyIGQ9ci0xO2lmKDQ3PT09ZS5jaGFyQ29kZUF0KHIrMSkpe2ZvcihyKz0yO3I8biYmIWVyKGUuY2hhckNvZGVBdChyKSk7KXIrKztyZXR1cm4gaT1lLnN1YnN0cmluZyhkLHIpLGE9MTJ9aWYoNDI9PT1lLmNoYXJDb2RlQXQocisxKSl7cis9Mjtmb3IodmFyIGc9bi0xLHA9ITE7cjxnOyl7dmFyIGI9ZS5jaGFyQ29kZUF0KHIpO2lmKDQyPT09YiYmNDc9PT1lLmNoYXJDb2RlQXQocisxKSl7cis9MixwPSEwO2JyZWFrfXIrKyxlcihiKSYmKDEzPT09YiYmMTA9PT1lLmNoYXJDb2RlQXQocikmJnIrKyxzKyssbD1yKX1yZXR1cm4gcHx8KHIrKyxoPTEpLGk9ZS5zdWJzdHJpbmcoZCxyKSxhPTEzfXJldHVybiBpKz1TdHJpbmcuZnJvbUNoYXJDb2RlKHQpLHIrKyxhPTE2O2Nhc2UgNDU6aWYoaSs9U3RyaW5nLmZyb21DaGFyQ29kZSh0KSwrK3I9PT1ufHwhdHIoZS5jaGFyQ29kZUF0KHIpKSlyZXR1cm4gYT0xNjtjYXNlIDQ4OmNhc2UgNDk6Y2FzZSA1MDpjYXNlIDUxOmNhc2UgNTI6Y2FzZSA1MzpjYXNlIDU0OmNhc2UgNTU6Y2FzZSA1NjpjYXNlIDU3OnJldHVybiBpKz1mdW5jdGlvbigpe3ZhciB0PXI7aWYoNDg9PT1lLmNoYXJDb2RlQXQocikpcisrO2Vsc2UgZm9yKHIrKztyPGUubGVuZ3RoJiZ0cihlLmNoYXJDb2RlQXQocikpOylyKys7aWYocjxlLmxlbmd0aCYmNDY9PT1lLmNoYXJDb2RlQXQocikpe2lmKCEoKytyPGUubGVuZ3RoJiZ0cihlLmNoYXJDb2RlQXQocikpKSlyZXR1cm4gaD0zLGUuc3Vic3RyaW5nKHQscik7Zm9yKHIrKztyPGUubGVuZ3RoJiZ0cihlLmNoYXJDb2RlQXQocikpOylyKyt9dmFyIG49cjtpZihyPGUubGVuZ3RoJiYoNjk9PT1lLmNoYXJDb2RlQXQocil8fDEwMT09PWUuY2hhckNvZGVBdChyKSkpaWYoKCsrcjxlLmxlbmd0aCYmNDM9PT1lLmNoYXJDb2RlQXQocil8fDQ1PT09ZS5jaGFyQ29kZUF0KHIpKSYmcisrLHI8ZS5sZW5ndGgmJnRyKGUuY2hhckNvZGVBdChyKSkpe2ZvcihyKys7cjxlLmxlbmd0aCYmdHIoZS5jaGFyQ29kZUF0KHIpKTspcisrO249cn1lbHNlIGg9MztyZXR1cm4gZS5zdWJzdHJpbmcodCxuKX0oKSxhPTExO2RlZmF1bHQ6Zm9yKDtyPG4mJm0odCk7KXIrKyx0PWUuY2hhckNvZGVBdChyKTtpZihvIT09cil7c3dpdGNoKGk9ZS5zdWJzdHJpbmcobyxyKSl7Y2FzZSJ0cnVlIjpyZXR1cm4gYT04O2Nhc2UiZmFsc2UiOnJldHVybiBhPTk7Y2FzZSJudWxsIjpyZXR1cm4gYT03fXJldHVybiBhPTE2fXJldHVybiBpKz1TdHJpbmcuZnJvbUNoYXJDb2RlKHQpLHIrKyxhPTE2fX1mdW5jdGlvbiBtKGUpe2lmKFFuKGUpfHxlcihlKSlyZXR1cm4hMTtzd2l0Y2goZSl7Y2FzZSAxMjU6Y2FzZSA5MzpjYXNlIDEyMzpjYXNlIDkxOmNhc2UgMzQ6Y2FzZSA1ODpjYXNlIDQ0OmNhc2UgNDc6cmV0dXJuITF9cmV0dXJuITB9cmV0dXJue3NldFBvc2l0aW9uOmZ1bmN0aW9uKGUpe3I9ZSxpPSIiLG89MCxhPTE2LGg9MH0sZ2V0UG9zaXRpb246ZnVuY3Rpb24oKXtyZXR1cm4gcn0sc2Nhbjp0P2Z1bmN0aW9uKCl7dmFyIGU7ZG97ZT1kKCl9d2hpbGUoZT49MTImJmU8PTE1KTtyZXR1cm4gZX06ZCxnZXRUb2tlbjpmdW5jdGlvbigpe3JldHVybiBhfSxnZXRUb2tlblZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIGl9LGdldFRva2VuT2Zmc2V0OmZ1bmN0aW9uKCl7cmV0dXJuIG99LGdldFRva2VuTGVuZ3RoOmZ1bmN0aW9uKCl7cmV0dXJuIHItb30sZ2V0VG9rZW5TdGFydExpbmU6ZnVuY3Rpb24oKXtyZXR1cm4gY30sZ2V0VG9rZW5TdGFydENoYXJhY3RlcjpmdW5jdGlvbigpe3JldHVybiBvLXV9LGdldFRva2VuRXJyb3I6ZnVuY3Rpb24oKXtyZXR1cm4gaH19fWZ1bmN0aW9uIFFuKGUpe3JldHVybiAzMj09PWV8fDk9PT1lfHwxMT09PWV8fDEyPT09ZXx8MTYwPT09ZXx8NTc2MD09PWV8fGU+PTgxOTImJmU8PTgyMDN8fDgyMzk9PT1lfHw4Mjg3PT09ZXx8MTIyODg9PT1lfHw2NTI3OT09PWV9ZnVuY3Rpb24gZXIoZSl7cmV0dXJuIDEwPT09ZXx8MTM9PT1lfHw4MjMyPT09ZXx8ODIzMz09PWV9ZnVuY3Rpb24gdHIoZSl7cmV0dXJuIGU+PTQ4JiZlPD01N31mdW5jdGlvbiBucihlLHQsbil7dmFyIHIsaSxvLGEscztpZih0KXtmb3IoYT10Lm9mZnNldCxzPWErdC5sZW5ndGgsbz1hO28+MCYmIWlyKGUsby0xKTspby0tO2Zvcih2YXIgYz1zO2M8ZS5sZW5ndGgmJiFpcihlLGMpOyljKys7aT1lLnN1YnN0cmluZyhvLGMpLHI9ZnVuY3Rpb24oZSx0KXt2YXIgbj0wLHI9MCxpPXQudGFiU2l6ZXx8NDtmb3IoO248ZS5sZW5ndGg7KXt2YXIgbz1lLmNoYXJBdChuKTtpZigiICI9PT1vKXIrKztlbHNle2lmKCJcdCIhPT1vKWJyZWFrO3IrPWl9bisrfXJldHVybiBNYXRoLmZsb29yKHIvaSl9KGksbil9ZWxzZSBpPWUscj0wLG89MCxhPTAscz1lLmxlbmd0aDt2YXIgbCx1PWZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuPTA7bjx0Lmxlbmd0aDtuKyspe3ZhciByPXQuY2hhckF0KG4pO2lmKCJcciI9PT1yKXJldHVybiBuKzE8dC5sZW5ndGgmJiJcbiI9PT10LmNoYXJBdChuKzEpPyJcclxuIjoiXHIiO2lmKCJcbiI9PT1yKXJldHVybiJcbiJ9cmV0dXJuIGUmJmUuZW9sfHwiXG4ifShuLGUpLGg9ITEsZj0wO2w9bi5pbnNlcnRTcGFjZXM/cnIoIiAiLG4udGFiU2l6ZXx8NCk6Ilx0Ijt2YXIgZD1ZbihpLCExKSxtPSExO2Z1bmN0aW9uIGcoKXtyZXR1cm4gdStycihsLHIrZil9ZnVuY3Rpb24gcCgpe3ZhciBlPWQuc2NhbigpO2ZvcihoPSExOzE1PT09ZXx8MTQ9PT1lOyloPWh8fDE0PT09ZSxlPWQuc2NhbigpO3JldHVybiBtPTE2PT09ZXx8MCE9PWQuZ2V0VG9rZW5FcnJvcigpLGV9dmFyIGI9W107ZnVuY3Rpb24gdihuLHIsaSl7bXx8dCYmIShyPHMmJmk+YSl8fGUuc3Vic3RyaW5nKHIsaSk9PT1ufHxiLnB1c2goe29mZnNldDpyLGxlbmd0aDppLXIsY29udGVudDpufSl9dmFyIHk9cCgpO2lmKDE3IT09eSl7dmFyIEM9ZC5nZXRUb2tlbk9mZnNldCgpK287dihycihsLHIpLG8sQyl9Zm9yKDsxNyE9PXk7KXtmb3IodmFyIHc9ZC5nZXRUb2tlbk9mZnNldCgpK2QuZ2V0VG9rZW5MZW5ndGgoKStvLF89cCgpLFM9IiIsQT0hMTshaCYmKDEyPT09X3x8MTM9PT1fKTspe3YoIiAiLHcsZC5nZXRUb2tlbk9mZnNldCgpK28pLHc9ZC5nZXRUb2tlbk9mZnNldCgpK2QuZ2V0VG9rZW5MZW5ndGgoKStvLFM9KEE9MTI9PT1fKT9nKCk6IiIsXz1wKCl9aWYoMj09PV8pMSE9PXkmJihmLS0sUz1nKCkpO2Vsc2UgaWYoND09PV8pMyE9PXkmJihmLS0sUz1nKCkpO2Vsc2V7c3dpdGNoKHkpe2Nhc2UgMzpjYXNlIDE6ZisrLFM9ZygpO2JyZWFrO2Nhc2UgNTpjYXNlIDEyOlM9ZygpO2JyZWFrO2Nhc2UgMTM6aD9TPWcoKTpBfHwoUz0iICIpO2JyZWFrO2Nhc2UgNjpBfHwoUz0iICIpO2JyZWFrO2Nhc2UgMTA6aWYoNj09PV8pe0F8fChTPSIiKTticmVha31jYXNlIDc6Y2FzZSA4OmNhc2UgOTpjYXNlIDExOmNhc2UgMjpjYXNlIDQ6MTI9PT1ffHwxMz09PV8/QXx8KFM9IiAiKTo1IT09XyYmMTchPT1fJiYobT0hMCk7YnJlYWs7Y2FzZSAxNjptPSEwfSFofHwxMiE9PV8mJjEzIT09X3x8KFM9ZygpKX0xNz09PV8mJihTPW4uaW5zZXJ0RmluYWxOZXdsaW5lP3U6IiIpLHYoUyx3LGQuZ2V0VG9rZW5PZmZzZXQoKStvKSx5PV99cmV0dXJuIGJ9ZnVuY3Rpb24gcnIoZSx0KXtmb3IodmFyIG49IiIscj0wO3I8dDtyKyspbis9ZTtyZXR1cm4gbn1mdW5jdGlvbiBpcihlLHQpe3JldHVybi0xIT09IlxyXG4iLmluZGV4T2YoZS5jaGFyQXQodCkpfXZhciBvcjtzZWxmLm9ubWVzc2FnZT1lPT57WG58fFpuKG51bGwpfSwob3J8fChvcj17fSkpLkRFRkFVTFQ9e2FsbG93VHJhaWxpbmdDb21tYTohMX07dmFyIGFyLHNyLGNyLGxyLHVyLGhyLGZyLGRyLG1yLGdyLHByLGJyLHZyLHlyLENyLHdyLF9yLFNyLEFyLEVyLHhyLE5yLGtyLExyLFRyLE9yLElyLE1yLFByLFJyLFZyLEZyLERyLEtyLGpyLFVyLEJyLHFyLCRyLFdyLEhyLHpyLEdyLEpyLFhyLFpyLFlyLFFyLGVpLHRpPVluLG5pPWZ1bmN0aW9uKGUsdCxuKXt2b2lkIDA9PT10JiYodD1bXSksdm9pZCAwPT09biYmKG49b3IuREVGQVVMVCk7dmFyIHI9bnVsbCxpPVtdLG89W107ZnVuY3Rpb24gYShlKXtBcnJheS5pc0FycmF5KGkpP2kucHVzaChlKTpudWxsIT09ciYmKGlbcl09ZSl9cmV0dXJuIGZ1bmN0aW9uKGUsdCxuKXt2b2lkIDA9PT1uJiYobj1vci5ERUZBVUxUKTt2YXIgcj1ZbihlLCExKTtmdW5jdGlvbiBpKGUpe3JldHVybiBlP2Z1bmN0aW9uKCl7cmV0dXJuIGUoci5nZXRUb2tlbk9mZnNldCgpLHIuZ2V0VG9rZW5MZW5ndGgoKSxyLmdldFRva2VuU3RhcnRMaW5lKCksci5nZXRUb2tlblN0YXJ0Q2hhcmFjdGVyKCkpfTpmdW5jdGlvbigpe3JldHVybiEwfX1mdW5jdGlvbiBvKGUpe3JldHVybiBlP2Z1bmN0aW9uKHQpe3JldHVybiBlKHQsci5nZXRUb2tlbk9mZnNldCgpLHIuZ2V0VG9rZW5MZW5ndGgoKSxyLmdldFRva2VuU3RhcnRMaW5lKCksci5nZXRUb2tlblN0YXJ0Q2hhcmFjdGVyKCkpfTpmdW5jdGlvbigpe3JldHVybiEwfX12YXIgYT1pKHQub25PYmplY3RCZWdpbikscz1vKHQub25PYmplY3RQcm9wZXJ0eSksYz1pKHQub25PYmplY3RFbmQpLGw9aSh0Lm9uQXJyYXlCZWdpbiksdT1pKHQub25BcnJheUVuZCksaD1vKHQub25MaXRlcmFsVmFsdWUpLGY9byh0Lm9uU2VwYXJhdG9yKSxkPWkodC5vbkNvbW1lbnQpLG09byh0Lm9uRXJyb3IpLGc9biYmbi5kaXNhbGxvd0NvbW1lbnRzLHA9biYmbi5hbGxvd1RyYWlsaW5nQ29tbWE7ZnVuY3Rpb24gYigpe2Zvcig7Oyl7dmFyIGU9ci5zY2FuKCk7c3dpdGNoKHIuZ2V0VG9rZW5FcnJvcigpKXtjYXNlIDQ6digxNCk7YnJlYWs7Y2FzZSA1OnYoMTUpO2JyZWFrO2Nhc2UgMzp2KDEzKTticmVhaztjYXNlIDE6Z3x8digxMSk7YnJlYWs7Y2FzZSAyOnYoMTIpO2JyZWFrO2Nhc2UgNjp2KDE2KX1zd2l0Y2goZSl7Y2FzZSAxMjpjYXNlIDEzOmc/digxMCk6ZCgpO2JyZWFrO2Nhc2UgMTY6digxKTticmVhaztjYXNlIDE1OmNhc2UgMTQ6YnJlYWs7ZGVmYXVsdDpyZXR1cm4gZX19fWZ1bmN0aW9uIHYoZSx0LG4pe2lmKHZvaWQgMD09PXQmJih0PVtdKSx2b2lkIDA9PT1uJiYobj1bXSksbShlKSx0Lmxlbmd0aCtuLmxlbmd0aD4wKWZvcih2YXIgaT1yLmdldFRva2VuKCk7MTchPT1pOyl7aWYoLTEhPT10LmluZGV4T2YoaSkpe2IoKTticmVha31pZigtMSE9PW4uaW5kZXhPZihpKSlicmVhaztpPWIoKX19ZnVuY3Rpb24geShlKXt2YXIgdD1yLmdldFRva2VuVmFsdWUoKTtyZXR1cm4gZT9oKHQpOnModCksYigpLCEwfWZ1bmN0aW9uIEMoKXtzd2l0Y2goci5nZXRUb2tlbigpKXtjYXNlIDExOnZhciBlPXIuZ2V0VG9rZW5WYWx1ZSgpLHQ9TnVtYmVyKGUpO2lzTmFOKHQpJiYodigyKSx0PTApLGgodCk7YnJlYWs7Y2FzZSA3OmgobnVsbCk7YnJlYWs7Y2FzZSA4OmgoITApO2JyZWFrO2Nhc2UgOTpoKCExKTticmVhaztkZWZhdWx0OnJldHVybiExfXJldHVybiBiKCksITB9ZnVuY3Rpb24gdygpe3JldHVybiAxMCE9PXIuZ2V0VG9rZW4oKT8odigzLFtdLFsyLDVdKSwhMSk6KHkoITEpLDY9PT1yLmdldFRva2VuKCk/KGYoIjoiKSxiKCksQSgpfHx2KDQsW10sWzIsNV0pKTp2KDUsW10sWzIsNV0pLCEwKX1mdW5jdGlvbiBfKCl7YSgpLGIoKTtmb3IodmFyIGU9ITE7MiE9PXIuZ2V0VG9rZW4oKSYmMTchPT1yLmdldFRva2VuKCk7KXtpZig1PT09ci5nZXRUb2tlbigpKXtpZihlfHx2KDQsW10sW10pLGYoIiwiKSxiKCksMj09PXIuZ2V0VG9rZW4oKSYmcClicmVha31lbHNlIGUmJnYoNixbXSxbXSk7dygpfHx2KDQsW10sWzIsNV0pLGU9ITB9cmV0dXJuIGMoKSwyIT09ci5nZXRUb2tlbigpP3YoNyxbMl0sW10pOmIoKSwhMH1mdW5jdGlvbiBTKCl7bCgpLGIoKTtmb3IodmFyIGU9ITE7NCE9PXIuZ2V0VG9rZW4oKSYmMTchPT1yLmdldFRva2VuKCk7KXtpZig1PT09ci5nZXRUb2tlbigpKXtpZihlfHx2KDQsW10sW10pLGYoIiwiKSxiKCksND09PXIuZ2V0VG9rZW4oKSYmcClicmVha31lbHNlIGUmJnYoNixbXSxbXSk7QSgpfHx2KDQsW10sWzQsNV0pLGU9ITB9cmV0dXJuIHUoKSw0IT09ci5nZXRUb2tlbigpP3YoOCxbNF0sW10pOmIoKSwhMH1mdW5jdGlvbiBBKCl7c3dpdGNoKHIuZ2V0VG9rZW4oKSl7Y2FzZSAzOnJldHVybiBTKCk7Y2FzZSAxOnJldHVybiBfKCk7Y2FzZSAxMDpyZXR1cm4geSghMCk7ZGVmYXVsdDpyZXR1cm4gQygpfX1pZihiKCksMTc9PT1yLmdldFRva2VuKCkpcmV0dXJuISFuLmFsbG93RW1wdHlDb250ZW50fHwodig0LFtdLFtdKSwhMSk7aWYoIUEoKSlyZXR1cm4gdig0LFtdLFtdKSwhMTsxNyE9PXIuZ2V0VG9rZW4oKSYmdig5LFtdLFtdKX0oZSx7b25PYmplY3RCZWdpbjpmdW5jdGlvbigpe3ZhciBlPXt9O2EoZSksby5wdXNoKGkpLGk9ZSxyPW51bGx9LG9uT2JqZWN0UHJvcGVydHk6ZnVuY3Rpb24oZSl7cj1lfSxvbk9iamVjdEVuZDpmdW5jdGlvbigpe2k9by5wb3AoKX0sb25BcnJheUJlZ2luOmZ1bmN0aW9uKCl7dmFyIGU9W107YShlKSxvLnB1c2goaSksaT1lLHI9bnVsbH0sb25BcnJheUVuZDpmdW5jdGlvbigpe2k9by5wb3AoKX0sb25MaXRlcmFsVmFsdWU6YSxvbkVycm9yOmZ1bmN0aW9uKGUsbixyKXt0LnB1c2goe2Vycm9yOmUsb2Zmc2V0Om4sbGVuZ3RoOnJ9KX19LG4pLGlbMF19LHJpPWZ1bmN0aW9uIGUodCxuLHIpe2lmKHZvaWQgMD09PXImJihyPSExKSxmdW5jdGlvbihlLHQsbil7cmV0dXJuIHZvaWQgMD09PW4mJihuPSExKSx0Pj1lLm9mZnNldCYmdDxlLm9mZnNldCtlLmxlbmd0aHx8biYmdD09PWUub2Zmc2V0K2UubGVuZ3RofSh0LG4scikpe3ZhciBpPXQuY2hpbGRyZW47aWYoQXJyYXkuaXNBcnJheShpKSlmb3IodmFyIG89MDtvPGkubGVuZ3RoJiZpW29dLm9mZnNldDw9bjtvKyspe3ZhciBhPWUoaVtvXSxuLHIpO2lmKGEpcmV0dXJuIGF9cmV0dXJuIHR9fSxpaT1mdW5jdGlvbiBlKHQpe2lmKCF0LnBhcmVudHx8IXQucGFyZW50LmNoaWxkcmVuKXJldHVybltdO3ZhciBuPWUodC5wYXJlbnQpO2lmKCJwcm9wZXJ0eSI9PT10LnBhcmVudC50eXBlKXt2YXIgcj10LnBhcmVudC5jaGlsZHJlblswXS52YWx1ZTtuLnB1c2gocil9ZWxzZSBpZigiYXJyYXkiPT09dC5wYXJlbnQudHlwZSl7dmFyIGk9dC5wYXJlbnQuY2hpbGRyZW4uaW5kZXhPZih0KTstMSE9PWkmJm4ucHVzaChpKX1yZXR1cm4gbn0sb2k9ZnVuY3Rpb24gZSh0KXtzd2l0Y2godC50eXBlKXtjYXNlImFycmF5IjpyZXR1cm4gdC5jaGlsZHJlbi5tYXAoZSk7Y2FzZSJvYmplY3QiOmZvcih2YXIgbj1PYmplY3QuY3JlYXRlKG51bGwpLHI9MCxpPXQuY2hpbGRyZW47cjxpLmxlbmd0aDtyKyspe3ZhciBvPWlbcl0sYT1vLmNoaWxkcmVuWzFdO2EmJihuW28uY2hpbGRyZW5bMF0udmFsdWVdPWUoYSkpfXJldHVybiBuO2Nhc2UibnVsbCI6Y2FzZSJzdHJpbmciOmNhc2UibnVtYmVyIjpjYXNlImJvb2xlYW4iOnJldHVybiB0LnZhbHVlO2RlZmF1bHQ6cmV0dXJufX07ZnVuY3Rpb24gYWkoZSx0KXtpZihlPT09dClyZXR1cm4hMDtpZihudWxsPT1lfHxudWxsPT10KXJldHVybiExO2lmKHR5cGVvZiBlIT10eXBlb2YgdClyZXR1cm4hMTtpZigib2JqZWN0IiE9dHlwZW9mIGUpcmV0dXJuITE7aWYoQXJyYXkuaXNBcnJheShlKSE9PUFycmF5LmlzQXJyYXkodCkpcmV0dXJuITE7dmFyIG4scjtpZihBcnJheS5pc0FycmF5KGUpKXtpZihlLmxlbmd0aCE9PXQubGVuZ3RoKXJldHVybiExO2ZvcihuPTA7bjxlLmxlbmd0aDtuKyspaWYoIWFpKGVbbl0sdFtuXSkpcmV0dXJuITF9ZWxzZXt2YXIgaT1bXTtmb3IociBpbiBlKWkucHVzaChyKTtpLnNvcnQoKTt2YXIgbz1bXTtmb3IociBpbiB0KW8ucHVzaChyKTtpZihvLnNvcnQoKSwhYWkoaSxvKSlyZXR1cm4hMTtmb3Iobj0wO248aS5sZW5ndGg7bisrKWlmKCFhaShlW2lbbl1dLHRbaVtuXV0pKXJldHVybiExfXJldHVybiEwfWZ1bmN0aW9uIHNpKGUpe3JldHVybiJudW1iZXIiPT10eXBlb2YgZX1mdW5jdGlvbiBjaShlKXtyZXR1cm4gdm9pZCAwIT09ZX1mdW5jdGlvbiBsaShlKXtyZXR1cm4iYm9vbGVhbiI9PXR5cGVvZiBlfWZ1bmN0aW9uIHVpKGUsdCl7dmFyIG49ZS5sZW5ndGgtdC5sZW5ndGg7cmV0dXJuIG4+MD9lLmxhc3RJbmRleE9mKHQpPT09bjowPT09biYmZT09PXR9ZnVuY3Rpb24gaGkoZSl7dmFyIHQ9IiI7KGZ1bmN0aW9uKGUsdCl7aWYoZS5sZW5ndGg8dC5sZW5ndGgpcmV0dXJuITE7Zm9yKHZhciBuPTA7bjx0Lmxlbmd0aDtuKyspaWYoZVtuXSE9PXRbbl0pcmV0dXJuITE7cmV0dXJuITB9KShlLCIoP2kpIikmJihlPWUuc3Vic3RyaW5nKDQpLHQ9ImkiKTt0cnl7cmV0dXJuIG5ldyBSZWdFeHAoZSx0KyJ1Iil9Y2F0Y2gobil7dHJ5e3JldHVybiBuZXcgUmVnRXhwKGUsdCl9Y2F0Y2goZSl7cmV0dXJufX19KHNyPWFyfHwoYXI9e30pKS5NSU5fVkFMVUU9LTIxNDc0ODM2NDgsc3IuTUFYX1ZBTFVFPTIxNDc0ODM2NDcsKGxyPWNyfHwoY3I9e30pKS5NSU5fVkFMVUU9MCxsci5NQVhfVkFMVUU9MjE0NzQ4MzY0NywoaHI9dXJ8fCh1cj17fSkpLmNyZWF0ZT1mdW5jdGlvbihlLHQpe3JldHVybiBlPT09TnVtYmVyLk1BWF9WQUxVRSYmKGU9Y3IuTUFYX1ZBTFVFKSx0PT09TnVtYmVyLk1BWF9WQUxVRSYmKHQ9Y3IuTUFYX1ZBTFVFKSx7bGluZTplLGNoYXJhY3Rlcjp0fX0saHIuaXM9ZnVuY3Rpb24oZSl7dmFyIHQ9ZTtyZXR1cm4gaG8ub2JqZWN0TGl0ZXJhbCh0KSYmaG8udWludGVnZXIodC5saW5lKSYmaG8udWludGVnZXIodC5jaGFyYWN0ZXIpfSwoZHI9ZnJ8fChmcj17fSkpLmNyZWF0ZT1mdW5jdGlvbihlLHQsbixyKXtpZihoby51aW50ZWdlcihlKSYmaG8udWludGVnZXIodCkmJmhvLnVpbnRlZ2VyKG4pJiZoby51aW50ZWdlcihyKSlyZXR1cm57c3RhcnQ6dXIuY3JlYXRlKGUsdCksZW5kOnVyLmNyZWF0ZShuLHIpfTtpZih1ci5pcyhlKSYmdXIuaXModCkpcmV0dXJue3N0YXJ0OmUsZW5kOnR9O3Rocm93IG5ldyBFcnJvcigiUmFuZ2UjY3JlYXRlIGNhbGxlZCB3aXRoIGludmFsaWQgYXJndW1lbnRzWyIrZSsiLCAiK3QrIiwgIituKyIsICIrcisiXSIpfSxkci5pcz1mdW5jdGlvbihlKXt2YXIgdD1lO3JldHVybiBoby5vYmplY3RMaXRlcmFsKHQpJiZ1ci5pcyh0LnN0YXJ0KSYmdXIuaXModC5lbmQpfSwoZ3I9bXJ8fChtcj17fSkpLmNyZWF0ZT1mdW5jdGlvbihlLHQpe3JldHVybnt1cmk6ZSxyYW5nZTp0fX0sZ3IuaXM9ZnVuY3Rpb24oZSl7dmFyIHQ9ZTtyZXR1cm4gaG8uZGVmaW5lZCh0KSYmZnIuaXModC5yYW5nZSkmJihoby5zdHJpbmcodC51cmkpfHxoby51bmRlZmluZWQodC51cmkpKX0sKGJyPXByfHwocHI9e30pKS5jcmVhdGU9ZnVuY3Rpb24oZSx0LG4scil7cmV0dXJue3RhcmdldFVyaTplLHRhcmdldFJhbmdlOnQsdGFyZ2V0U2VsZWN0aW9uUmFuZ2U6bixvcmlnaW5TZWxlY3Rpb25SYW5nZTpyfX0sYnIuaXM9ZnVuY3Rpb24oZSl7dmFyIHQ9ZTtyZXR1cm4gaG8uZGVmaW5lZCh0KSYmZnIuaXModC50YXJnZXRSYW5nZSkmJmhvLnN0cmluZyh0LnRhcmdldFVyaSkmJihmci5pcyh0LnRhcmdldFNlbGVjdGlvblJhbmdlKXx8aG8udW5kZWZpbmVkKHQudGFyZ2V0U2VsZWN0aW9uUmFuZ2UpKSYmKGZyLmlzKHQub3JpZ2luU2VsZWN0aW9uUmFuZ2UpfHxoby51bmRlZmluZWQodC5vcmlnaW5TZWxlY3Rpb25SYW5nZSkpfSwoeXI9dnJ8fCh2cj17fSkpLmNyZWF0ZT1mdW5jdGlvbihlLHQsbixyKXtyZXR1cm57cmVkOmUsZ3JlZW46dCxibHVlOm4sYWxwaGE6cn19LHlyLmlzPWZ1bmN0aW9uKGUpe3ZhciB0PWU7cmV0dXJuIGhvLm51bWJlclJhbmdlKHQucmVkLDAsMSkmJmhvLm51bWJlclJhbmdlKHQuZ3JlZW4sMCwxKSYmaG8ubnVtYmVyUmFuZ2UodC5ibHVlLDAsMSkmJmhvLm51bWJlclJhbmdlKHQuYWxwaGEsMCwxKX0sKHdyPUNyfHwoQ3I9e30pKS5jcmVhdGU9ZnVuY3Rpb24oZSx0KXtyZXR1cm57cmFuZ2U6ZSxjb2xvcjp0fX0sd3IuaXM9ZnVuY3Rpb24oZSl7dmFyIHQ9ZTtyZXR1cm4gZnIuaXModC5yYW5nZSkmJnZyLmlzKHQuY29sb3IpfSwoU3I9X3J8fChfcj17fSkpLmNyZWF0ZT1mdW5jdGlvbihlLHQsbil7cmV0dXJue2xhYmVsOmUsdGV4dEVkaXQ6dCxhZGRpdGlvbmFsVGV4dEVkaXRzOm59fSxTci5pcz1mdW5jdGlvbihlKXt2YXIgdD1lO3JldHVybiBoby5zdHJpbmcodC5sYWJlbCkmJihoby51bmRlZmluZWQodC50ZXh0RWRpdCl8fEtyLmlzKHQpKSYmKGhvLnVuZGVmaW5lZCh0LmFkZGl0aW9uYWxUZXh0RWRpdHMpfHxoby50eXBlZEFycmF5KHQuYWRkaXRpb25hbFRleHRFZGl0cyxLci5pcykpfSwoRXI9QXJ8fChBcj17fSkpLkNvbW1lbnQ9ImNvbW1lbnQiLEVyLkltcG9ydHM9ImltcG9ydHMiLEVyLlJlZ2lvbj0icmVnaW9uIiwoTnI9eHJ8fCh4cj17fSkpLmNyZWF0ZT1mdW5jdGlvbihlLHQsbixyLGkpe3ZhciBvPXtzdGFydExpbmU6ZSxlbmRMaW5lOnR9O3JldHVybiBoby5kZWZpbmVkKG4pJiYoby5zdGFydENoYXJhY3Rlcj1uKSxoby5kZWZpbmVkKHIpJiYoby5lbmRDaGFyYWN0ZXI9ciksaG8uZGVmaW5lZChpKSYmKG8ua2luZD1pKSxvfSxOci5pcz1mdW5jdGlvbihlKXt2YXIgdD1lO3JldHVybiBoby51aW50ZWdlcih0LnN0YXJ0TGluZSkmJmhvLnVpbnRlZ2VyKHQuc3RhcnRMaW5lKSYmKGhvLnVuZGVmaW5lZCh0LnN0YXJ0Q2hhcmFjdGVyKXx8aG8udWludGVnZXIodC5zdGFydENoYXJhY3RlcikpJiYoaG8udW5kZWZpbmVkKHQuZW5kQ2hhcmFjdGVyKXx8aG8udWludGVnZXIodC5lbmRDaGFyYWN0ZXIpKSYmKGhvLnVuZGVmaW5lZCh0LmtpbmQpfHxoby5zdHJpbmcodC5raW5kKSl9LChMcj1rcnx8KGtyPXt9KSkuY3JlYXRlPWZ1bmN0aW9uKGUsdCl7cmV0dXJue2xvY2F0aW9uOmUsbWVzc2FnZTp0fX0sTHIuaXM9ZnVuY3Rpb24oZSl7dmFyIHQ9ZTtyZXR1cm4gaG8uZGVmaW5lZCh0KSYmbXIuaXModC5sb2NhdGlvbikmJmhvLnN0cmluZyh0Lm1lc3NhZ2UpfSwoT3I9VHJ8fChUcj17fSkpLkVycm9yPTEsT3IuV2FybmluZz0yLE9yLkluZm9ybWF0aW9uPTMsT3IuSGludD00LChNcj1Jcnx8KElyPXt9KSkuVW5uZWNlc3Nhcnk9MSxNci5EZXByZWNhdGVkPTIsKFByfHwoUHI9e30pKS5pcz1mdW5jdGlvbihlKXt2YXIgdD1lO3JldHVybiBudWxsIT10JiZoby5zdHJpbmcodC5ocmVmKX0sKFZyPVJyfHwoUnI9e30pKS5jcmVhdGU9ZnVuY3Rpb24oZSx0LG4scixpLG8pe3ZhciBhPXtyYW5nZTplLG1lc3NhZ2U6dH07cmV0dXJuIGhvLmRlZmluZWQobikmJihhLnNldmVyaXR5PW4pLGhvLmRlZmluZWQocikmJihhLmNvZGU9ciksaG8uZGVmaW5lZChpKSYmKGEuc291cmNlPWkpLGhvLmRlZmluZWQobykmJihhLnJlbGF0ZWRJbmZvcm1hdGlvbj1vKSxhfSxWci5pcz1mdW5jdGlvbihlKXt2YXIgdCxuPWU7cmV0dXJuIGhvLmRlZmluZWQobikmJmZyLmlzKG4ucmFuZ2UpJiZoby5zdHJpbmcobi5tZXNzYWdlKSYmKGhvLm51bWJlcihuLnNldmVyaXR5KXx8aG8udW5kZWZpbmVkKG4uc2V2ZXJpdHkpKSYmKGhvLmludGVnZXIobi5jb2RlKXx8aG8uc3RyaW5nKG4uY29kZSl8fGhvLnVuZGVmaW5lZChuLmNvZGUpKSYmKGhvLnVuZGVmaW5lZChuLmNvZGVEZXNjcmlwdGlvbil8fGhvLnN0cmluZyhudWxsPT09KHQ9bi5jb2RlRGVzY3JpcHRpb24pfHx2b2lkIDA9PT10P3ZvaWQgMDp0LmhyZWYpKSYmKGhvLnN0cmluZyhuLnNvdXJjZSl8fGhvLnVuZGVmaW5lZChuLnNvdXJjZSkpJiYoaG8udW5kZWZpbmVkKG4ucmVsYXRlZEluZm9ybWF0aW9uKXx8aG8udHlwZWRBcnJheShuLnJlbGF0ZWRJbmZvcm1hdGlvbixrci5pcykpfSwoRHI9RnJ8fChGcj17fSkpLmNyZWF0ZT1mdW5jdGlvbihlLHQpe2Zvcih2YXIgbj1bXSxyPTI7cjxhcmd1bWVudHMubGVuZ3RoO3IrKyluW3ItMl09YXJndW1lbnRzW3JdO3ZhciBpPXt0aXRsZTplLGNvbW1hbmQ6dH07cmV0dXJuIGhvLmRlZmluZWQobikmJm4ubGVuZ3RoPjAmJihpLmFyZ3VtZW50cz1uKSxpfSxEci5pcz1mdW5jdGlvbihlKXt2YXIgdD1lO3JldHVybiBoby5kZWZpbmVkKHQpJiZoby5zdHJpbmcodC50aXRsZSkmJmhvLnN0cmluZyh0LmNvbW1hbmQpfSwoanI9S3J8fChLcj17fSkpLnJlcGxhY2U9ZnVuY3Rpb24oZSx0KXtyZXR1cm57cmFuZ2U6ZSxuZXdUZXh0OnR9fSxqci5pbnNlcnQ9ZnVuY3Rpb24oZSx0KXtyZXR1cm57cmFuZ2U6e3N0YXJ0OmUsZW5kOmV9LG5ld1RleHQ6dH19LGpyLmRlbD1mdW5jdGlvbihlKXtyZXR1cm57cmFuZ2U6ZSxuZXdUZXh0OiIifX0sanIuaXM9ZnVuY3Rpb24oZSl7dmFyIHQ9ZTtyZXR1cm4gaG8ub2JqZWN0TGl0ZXJhbCh0KSYmaG8uc3RyaW5nKHQubmV3VGV4dCkmJmZyLmlzKHQucmFuZ2UpfSwoQnI9VXJ8fChVcj17fSkpLmNyZWF0ZT1mdW5jdGlvbihlLHQsbil7dmFyIHI9e2xhYmVsOmV9O3JldHVybiB2b2lkIDAhPT10JiYoci5uZWVkc0NvbmZpcm1hdGlvbj10KSx2b2lkIDAhPT1uJiYoci5kZXNjcmlwdGlvbj1uKSxyfSxCci5pcz1mdW5jdGlvbihlKXt2YXIgdD1lO3JldHVybiB2b2lkIDAhPT10JiZoby5vYmplY3RMaXRlcmFsKHQpJiZoby5zdHJpbmcodC5sYWJlbCkmJihoby5ib29sZWFuKHQubmVlZHNDb25maXJtYXRpb24pfHx2b2lkIDA9PT10Lm5lZWRzQ29uZmlybWF0aW9uKSYmKGhvLnN0cmluZyh0LmRlc2NyaXB0aW9uKXx8dm9pZCAwPT09dC5kZXNjcmlwdGlvbil9LChxcnx8KHFyPXt9KSkuaXM9ZnVuY3Rpb24oZSl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBlfSwoV3I9JHJ8fCgkcj17fSkpLnJlcGxhY2U9ZnVuY3Rpb24oZSx0LG4pe3JldHVybntyYW5nZTplLG5ld1RleHQ6dCxhbm5vdGF0aW9uSWQ6bn19LFdyLmluc2VydD1mdW5jdGlvbihlLHQsbil7cmV0dXJue3JhbmdlOntzdGFydDplLGVuZDplfSxuZXdUZXh0OnQsYW5ub3RhdGlvbklkOm59fSxXci5kZWw9ZnVuY3Rpb24oZSx0KXtyZXR1cm57cmFuZ2U6ZSxuZXdUZXh0OiIiLGFubm90YXRpb25JZDp0fX0sV3IuaXM9ZnVuY3Rpb24oZSl7dmFyIHQ9ZTtyZXR1cm4gS3IuaXModCkmJihVci5pcyh0LmFubm90YXRpb25JZCl8fHFyLmlzKHQuYW5ub3RhdGlvbklkKSl9LCh6cj1Icnx8KEhyPXt9KSkuY3JlYXRlPWZ1bmN0aW9uKGUsdCl7cmV0dXJue3RleHREb2N1bWVudDplLGVkaXRzOnR9fSx6ci5pcz1mdW5jdGlvbihlKXt2YXIgdD1lO3JldHVybiBoby5kZWZpbmVkKHQpJiZwaS5pcyh0LnRleHREb2N1bWVudCkmJkFycmF5LmlzQXJyYXkodC5lZGl0cyl9LChKcj1Hcnx8KEdyPXt9KSkuY3JlYXRlPWZ1bmN0aW9uKGUsdCxuKXt2YXIgcj17a2luZDoiY3JlYXRlIix1cmk6ZX07cmV0dXJuIHZvaWQgMD09PXR8fHZvaWQgMD09PXQub3ZlcndyaXRlJiZ2b2lkIDA9PT10Lmlnbm9yZUlmRXhpc3RzfHwoci5vcHRpb25zPXQpLHZvaWQgMCE9PW4mJihyLmFubm90YXRpb25JZD1uKSxyfSxKci5pcz1mdW5jdGlvbihlKXt2YXIgdD1lO3JldHVybiB0JiYiY3JlYXRlIj09PXQua2luZCYmaG8uc3RyaW5nKHQudXJpKSYmKHZvaWQgMD09PXQub3B0aW9uc3x8KHZvaWQgMD09PXQub3B0aW9ucy5vdmVyd3JpdGV8fGhvLmJvb2xlYW4odC5vcHRpb25zLm92ZXJ3cml0ZSkpJiYodm9pZCAwPT09dC5vcHRpb25zLmlnbm9yZUlmRXhpc3RzfHxoby5ib29sZWFuKHQub3B0aW9ucy5pZ25vcmVJZkV4aXN0cykpKSYmKHZvaWQgMD09PXQuYW5ub3RhdGlvbklkfHxxci5pcyh0LmFubm90YXRpb25JZCkpfSwoWnI9WHJ8fChYcj17fSkpLmNyZWF0ZT1mdW5jdGlvbihlLHQsbixyKXt2YXIgaT17a2luZDoicmVuYW1lIixvbGRVcmk6ZSxuZXdVcmk6dH07cmV0dXJuIHZvaWQgMD09PW58fHZvaWQgMD09PW4ub3ZlcndyaXRlJiZ2b2lkIDA9PT1uLmlnbm9yZUlmRXhpc3RzfHwoaS5vcHRpb25zPW4pLHZvaWQgMCE9PXImJihpLmFubm90YXRpb25JZD1yKSxpfSxaci5pcz1mdW5jdGlvbihlKXt2YXIgdD1lO3JldHVybiB0JiYicmVuYW1lIj09PXQua2luZCYmaG8uc3RyaW5nKHQub2xkVXJpKSYmaG8uc3RyaW5nKHQubmV3VXJpKSYmKHZvaWQgMD09PXQub3B0aW9uc3x8KHZvaWQgMD09PXQub3B0aW9ucy5vdmVyd3JpdGV8fGhvLmJvb2xlYW4odC5vcHRpb25zLm92ZXJ3cml0ZSkpJiYodm9pZCAwPT09dC5vcHRpb25zLmlnbm9yZUlmRXhpc3RzfHxoby5ib29sZWFuKHQub3B0aW9ucy5pZ25vcmVJZkV4aXN0cykpKSYmKHZvaWQgMD09PXQuYW5ub3RhdGlvbklkfHxxci5pcyh0LmFubm90YXRpb25JZCkpfSwoUXI9WXJ8fChZcj17fSkpLmNyZWF0ZT1mdW5jdGlvbihlLHQsbil7dmFyIHI9e2tpbmQ6ImRlbGV0ZSIsdXJpOmV9O3JldHVybiB2b2lkIDA9PT10fHx2b2lkIDA9PT10LnJlY3Vyc2l2ZSYmdm9pZCAwPT09dC5pZ25vcmVJZk5vdEV4aXN0c3x8KHIub3B0aW9ucz10KSx2b2lkIDAhPT1uJiYoci5hbm5vdGF0aW9uSWQ9bikscn0sUXIuaXM9ZnVuY3Rpb24oZSl7dmFyIHQ9ZTtyZXR1cm4gdCYmImRlbGV0ZSI9PT10LmtpbmQmJmhvLnN0cmluZyh0LnVyaSkmJih2b2lkIDA9PT10Lm9wdGlvbnN8fCh2b2lkIDA9PT10Lm9wdGlvbnMucmVjdXJzaXZlfHxoby5ib29sZWFuKHQub3B0aW9ucy5yZWN1cnNpdmUpKSYmKHZvaWQgMD09PXQub3B0aW9ucy5pZ25vcmVJZk5vdEV4aXN0c3x8aG8uYm9vbGVhbih0Lm9wdGlvbnMuaWdub3JlSWZOb3RFeGlzdHMpKSkmJih2b2lkIDA9PT10LmFubm90YXRpb25JZHx8cXIuaXModC5hbm5vdGF0aW9uSWQpKX0sKGVpfHwoZWk9e30pKS5pcz1mdW5jdGlvbihlKXt2YXIgdD1lO3JldHVybiB0JiYodm9pZCAwIT09dC5jaGFuZ2VzfHx2b2lkIDAhPT10LmRvY3VtZW50Q2hhbmdlcykmJih2b2lkIDA9PT10LmRvY3VtZW50Q2hhbmdlc3x8dC5kb2N1bWVudENoYW5nZXMuZXZlcnkoKGZ1bmN0aW9uKGUpe3JldHVybiBoby5zdHJpbmcoZS5raW5kKT9Hci5pcyhlKXx8WHIuaXMoZSl8fFlyLmlzKGUpOkhyLmlzKGUpfSkpKX07dmFyIGZpLGRpLG1pLGdpLHBpLGJpLHZpLHlpLENpLHdpLF9pLFNpLEFpLEVpLHhpLE5pLGtpLExpLFRpLE9pLElpLE1pLFBpLFJpLFZpLEZpLERpLEtpLGppLFVpLEJpLHFpLCRpLFdpLEhpLHppLEdpLEppLFhpLFppLFlpLFFpLGVvLHRvLG5vLHJvLGlvLG9vLGFvLHNvLGNvLGxvPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHQpe3RoaXMuZWRpdHM9ZSx0aGlzLmNoYW5nZUFubm90YXRpb25zPXR9cmV0dXJuIGUucHJvdG90eXBlLmluc2VydD1mdW5jdGlvbihlLHQsbil7dmFyIHIsaTtpZih2b2lkIDA9PT1uP3I9S3IuaW5zZXJ0KGUsdCk6cXIuaXMobik/KGk9bixyPSRyLmluc2VydChlLHQsbikpOih0aGlzLmFzc2VydENoYW5nZUFubm90YXRpb25zKHRoaXMuY2hhbmdlQW5ub3RhdGlvbnMpLGk9dGhpcy5jaGFuZ2VBbm5vdGF0aW9ucy5tYW5hZ2Uobikscj0kci5pbnNlcnQoZSx0LGkpKSx0aGlzLmVkaXRzLnB1c2gociksdm9pZCAwIT09aSlyZXR1cm4gaX0sZS5wcm90b3R5cGUucmVwbGFjZT1mdW5jdGlvbihlLHQsbil7dmFyIHIsaTtpZih2b2lkIDA9PT1uP3I9S3IucmVwbGFjZShlLHQpOnFyLmlzKG4pPyhpPW4scj0kci5yZXBsYWNlKGUsdCxuKSk6KHRoaXMuYXNzZXJ0Q2hhbmdlQW5ub3RhdGlvbnModGhpcy5jaGFuZ2VBbm5vdGF0aW9ucyksaT10aGlzLmNoYW5nZUFubm90YXRpb25zLm1hbmFnZShuKSxyPSRyLnJlcGxhY2UoZSx0LGkpKSx0aGlzLmVkaXRzLnB1c2gociksdm9pZCAwIT09aSlyZXR1cm4gaX0sZS5wcm90b3R5cGUuZGVsZXRlPWZ1bmN0aW9uKGUsdCl7dmFyIG4scjtpZih2b2lkIDA9PT10P249S3IuZGVsKGUpOnFyLmlzKHQpPyhyPXQsbj0kci5kZWwoZSx0KSk6KHRoaXMuYXNzZXJ0Q2hhbmdlQW5ub3RhdGlvbnModGhpcy5jaGFuZ2VBbm5vdGF0aW9ucykscj10aGlzLmNoYW5nZUFubm90YXRpb25zLm1hbmFnZSh0KSxuPSRyLmRlbChlLHIpKSx0aGlzLmVkaXRzLnB1c2gobiksdm9pZCAwIT09cilyZXR1cm4gcn0sZS5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKGUpe3RoaXMuZWRpdHMucHVzaChlKX0sZS5wcm90b3R5cGUuYWxsPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWRpdHN9LGUucHJvdG90eXBlLmNsZWFyPWZ1bmN0aW9uKCl7dGhpcy5lZGl0cy5zcGxpY2UoMCx0aGlzLmVkaXRzLmxlbmd0aCl9LGUucHJvdG90eXBlLmFzc2VydENoYW5nZUFubm90YXRpb25zPWZ1bmN0aW9uKGUpe2lmKHZvaWQgMD09PWUpdGhyb3cgbmV3IEVycm9yKCJUZXh0IGVkaXQgY2hhbmdlIGlzIG5vdCBjb25maWd1cmVkIHRvIG1hbmFnZSBjaGFuZ2UgYW5ub3RhdGlvbnMuIil9LGV9KCksdW89ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUpe3RoaXMuX2Fubm90YXRpb25zPXZvaWQgMD09PWU/T2JqZWN0LmNyZWF0ZShudWxsKTplLHRoaXMuX2NvdW50ZXI9MCx0aGlzLl9zaXplPTB9cmV0dXJuIGUucHJvdG90eXBlLmFsbD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9hbm5vdGF0aW9uc30sT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJzaXplIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3NpemV9LGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEwfSksZS5wcm90b3R5cGUubWFuYWdlPWZ1bmN0aW9uKGUsdCl7dmFyIG47aWYocXIuaXMoZSk/bj1lOihuPXRoaXMubmV4dElkKCksdD1lKSx2b2lkIDAhPT10aGlzLl9hbm5vdGF0aW9uc1tuXSl0aHJvdyBuZXcgRXJyb3IoIklkICIrbisiIGlzIGFscmVhZHkgaW4gdXNlLiIpO2lmKHZvaWQgMD09PXQpdGhyb3cgbmV3IEVycm9yKCJObyBhbm5vdGF0aW9uIHByb3ZpZGVkIGZvciBpZCAiK24pO3JldHVybiB0aGlzLl9hbm5vdGF0aW9uc1tuXT10LHRoaXMuX3NpemUrKyxufSxlLnByb3RvdHlwZS5uZXh0SWQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY291bnRlcisrLHRoaXMuX2NvdW50ZXIudG9TdHJpbmcoKX0sZX0oKTshZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUpe3ZhciB0PXRoaXM7dGhpcy5fdGV4dEVkaXRDaGFuZ2VzPU9iamVjdC5jcmVhdGUobnVsbCksdm9pZCAwIT09ZT8odGhpcy5fd29ya3NwYWNlRWRpdD1lLGUuZG9jdW1lbnRDaGFuZ2VzPyh0aGlzLl9jaGFuZ2VBbm5vdGF0aW9ucz1uZXcgdW8oZS5jaGFuZ2VBbm5vdGF0aW9ucyksZS5jaGFuZ2VBbm5vdGF0aW9ucz10aGlzLl9jaGFuZ2VBbm5vdGF0aW9ucy5hbGwoKSxlLmRvY3VtZW50Q2hhbmdlcy5mb3JFYWNoKChmdW5jdGlvbihlKXtpZihIci5pcyhlKSl7dmFyIG49bmV3IGxvKGUuZWRpdHMsdC5fY2hhbmdlQW5ub3RhdGlvbnMpO3QuX3RleHRFZGl0Q2hhbmdlc1tlLnRleHREb2N1bWVudC51cmldPW59fSkpKTplLmNoYW5nZXMmJk9iamVjdC5rZXlzKGUuY2hhbmdlcykuZm9yRWFjaCgoZnVuY3Rpb24obil7dmFyIHI9bmV3IGxvKGUuY2hhbmdlc1tuXSk7dC5fdGV4dEVkaXRDaGFuZ2VzW25dPXJ9KSkpOnRoaXMuX3dvcmtzcGFjZUVkaXQ9e319T2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJlZGl0Iix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaW5pdERvY3VtZW50Q2hhbmdlcygpLHZvaWQgMCE9PXRoaXMuX2NoYW5nZUFubm90YXRpb25zJiYoMD09PXRoaXMuX2NoYW5nZUFubm90YXRpb25zLnNpemU/dGhpcy5fd29ya3NwYWNlRWRpdC5jaGFuZ2VBbm5vdGF0aW9ucz12b2lkIDA6dGhpcy5fd29ya3NwYWNlRWRpdC5jaGFuZ2VBbm5vdGF0aW9ucz10aGlzLl9jaGFuZ2VBbm5vdGF0aW9ucy5hbGwoKSksdGhpcy5fd29ya3NwYWNlRWRpdH0sZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9KSxlLnByb3RvdHlwZS5nZXRUZXh0RWRpdENoYW5nZT1mdW5jdGlvbihlKXtpZihwaS5pcyhlKSl7aWYodGhpcy5pbml0RG9jdW1lbnRDaGFuZ2VzKCksdm9pZCAwPT09dGhpcy5fd29ya3NwYWNlRWRpdC5kb2N1bWVudENoYW5nZXMpdGhyb3cgbmV3IEVycm9yKCJXb3Jrc3BhY2UgZWRpdCBpcyBub3QgY29uZmlndXJlZCBmb3IgZG9jdW1lbnQgY2hhbmdlcy4iKTt2YXIgdD17dXJpOmUudXJpLHZlcnNpb246ZS52ZXJzaW9ufTtpZighKHI9dGhpcy5fdGV4dEVkaXRDaGFuZ2VzW3QudXJpXSkpe3ZhciBuPXt0ZXh0RG9jdW1lbnQ6dCxlZGl0czppPVtdfTt0aGlzLl93b3Jrc3BhY2VFZGl0LmRvY3VtZW50Q2hhbmdlcy5wdXNoKG4pLHI9bmV3IGxvKGksdGhpcy5fY2hhbmdlQW5ub3RhdGlvbnMpLHRoaXMuX3RleHRFZGl0Q2hhbmdlc1t0LnVyaV09cn1yZXR1cm4gcn1pZih0aGlzLmluaXRDaGFuZ2VzKCksdm9pZCAwPT09dGhpcy5fd29ya3NwYWNlRWRpdC5jaGFuZ2VzKXRocm93IG5ldyBFcnJvcigiV29ya3NwYWNlIGVkaXQgaXMgbm90IGNvbmZpZ3VyZWQgZm9yIG5vcm1hbCB0ZXh0IGVkaXQgY2hhbmdlcy4iKTt2YXIgcjtpZighKHI9dGhpcy5fdGV4dEVkaXRDaGFuZ2VzW2VdKSl7dmFyIGk9W107dGhpcy5fd29ya3NwYWNlRWRpdC5jaGFuZ2VzW2VdPWkscj1uZXcgbG8oaSksdGhpcy5fdGV4dEVkaXRDaGFuZ2VzW2VdPXJ9cmV0dXJuIHJ9LGUucHJvdG90eXBlLmluaXREb2N1bWVudENoYW5nZXM9ZnVuY3Rpb24oKXt2b2lkIDA9PT10aGlzLl93b3Jrc3BhY2VFZGl0LmRvY3VtZW50Q2hhbmdlcyYmdm9pZCAwPT09dGhpcy5fd29ya3NwYWNlRWRpdC5jaGFuZ2VzJiYodGhpcy5fY2hhbmdlQW5ub3RhdGlvbnM9bmV3IHVvLHRoaXMuX3dvcmtzcGFjZUVkaXQuZG9jdW1lbnRDaGFuZ2VzPVtdLHRoaXMuX3dvcmtzcGFjZUVkaXQuY2hhbmdlQW5ub3RhdGlvbnM9dGhpcy5fY2hhbmdlQW5ub3RhdGlvbnMuYWxsKCkpfSxlLnByb3RvdHlwZS5pbml0Q2hhbmdlcz1mdW5jdGlvbigpe3ZvaWQgMD09PXRoaXMuX3dvcmtzcGFjZUVkaXQuZG9jdW1lbnRDaGFuZ2VzJiZ2b2lkIDA9PT10aGlzLl93b3Jrc3BhY2VFZGl0LmNoYW5nZXMmJih0aGlzLl93b3Jrc3BhY2VFZGl0LmNoYW5nZXM9T2JqZWN0LmNyZWF0ZShudWxsKSl9LGUucHJvdG90eXBlLmNyZWF0ZUZpbGU9ZnVuY3Rpb24oZSx0LG4pe2lmKHRoaXMuaW5pdERvY3VtZW50Q2hhbmdlcygpLHZvaWQgMD09PXRoaXMuX3dvcmtzcGFjZUVkaXQuZG9jdW1lbnRDaGFuZ2VzKXRocm93IG5ldyBFcnJvcigiV29ya3NwYWNlIGVkaXQgaXMgbm90IGNvbmZpZ3VyZWQgZm9yIGRvY3VtZW50IGNoYW5nZXMuIik7dmFyIHIsaSxvO2lmKFVyLmlzKHQpfHxxci5pcyh0KT9yPXQ6bj10LHZvaWQgMD09PXI/aT1Hci5jcmVhdGUoZSxuKToobz1xci5pcyhyKT9yOnRoaXMuX2NoYW5nZUFubm90YXRpb25zLm1hbmFnZShyKSxpPUdyLmNyZWF0ZShlLG4sbykpLHRoaXMuX3dvcmtzcGFjZUVkaXQuZG9jdW1lbnRDaGFuZ2VzLnB1c2goaSksdm9pZCAwIT09bylyZXR1cm4gb30sZS5wcm90b3R5cGUucmVuYW1lRmlsZT1mdW5jdGlvbihlLHQsbixyKXtpZih0aGlzLmluaXREb2N1bWVudENoYW5nZXMoKSx2b2lkIDA9PT10aGlzLl93b3Jrc3BhY2VFZGl0LmRvY3VtZW50Q2hhbmdlcyl0aHJvdyBuZXcgRXJyb3IoIldvcmtzcGFjZSBlZGl0IGlzIG5vdCBjb25maWd1cmVkIGZvciBkb2N1bWVudCBjaGFuZ2VzLiIpO3ZhciBpLG8sYTtpZihVci5pcyhuKXx8cXIuaXMobik/aT1uOnI9bix2b2lkIDA9PT1pP289WHIuY3JlYXRlKGUsdCxyKTooYT1xci5pcyhpKT9pOnRoaXMuX2NoYW5nZUFubm90YXRpb25zLm1hbmFnZShpKSxvPVhyLmNyZWF0ZShlLHQscixhKSksdGhpcy5fd29ya3NwYWNlRWRpdC5kb2N1bWVudENoYW5nZXMucHVzaChvKSx2b2lkIDAhPT1hKXJldHVybiBhfSxlLnByb3RvdHlwZS5kZWxldGVGaWxlPWZ1bmN0aW9uKGUsdCxuKXtpZih0aGlzLmluaXREb2N1bWVudENoYW5nZXMoKSx2b2lkIDA9PT10aGlzLl93b3Jrc3BhY2VFZGl0LmRvY3VtZW50Q2hhbmdlcyl0aHJvdyBuZXcgRXJyb3IoIldvcmtzcGFjZSBlZGl0IGlzIG5vdCBjb25maWd1cmVkIGZvciBkb2N1bWVudCBjaGFuZ2VzLiIpO3ZhciByLGksbztpZihVci5pcyh0KXx8cXIuaXModCk/cj10Om49dCx2b2lkIDA9PT1yP2k9WXIuY3JlYXRlKGUsbik6KG89cXIuaXMocik/cjp0aGlzLl9jaGFuZ2VBbm5vdGF0aW9ucy5tYW5hZ2UociksaT1Zci5jcmVhdGUoZSxuLG8pKSx0aGlzLl93b3Jrc3BhY2VFZGl0LmRvY3VtZW50Q2hhbmdlcy5wdXNoKGkpLHZvaWQgMCE9PW8pcmV0dXJuIG99fSgpLChkaT1maXx8KGZpPXt9KSkuY3JlYXRlPWZ1bmN0aW9uKGUpe3JldHVybnt1cmk6ZX19LGRpLmlzPWZ1bmN0aW9uKGUpe3ZhciB0PWU7cmV0dXJuIGhvLmRlZmluZWQodCkmJmhvLnN0cmluZyh0LnVyaSl9LChnaT1taXx8KG1pPXt9KSkuY3JlYXRlPWZ1bmN0aW9uKGUsdCl7cmV0dXJue3VyaTplLHZlcnNpb246dH19LGdpLmlzPWZ1bmN0aW9uKGUpe3ZhciB0PWU7cmV0dXJuIGhvLmRlZmluZWQodCkmJmhvLnN0cmluZyh0LnVyaSkmJmhvLmludGVnZXIodC52ZXJzaW9uKX0sKGJpPXBpfHwocGk9e30pKS5jcmVhdGU9ZnVuY3Rpb24oZSx0KXtyZXR1cm57dXJpOmUsdmVyc2lvbjp0fX0sYmkuaXM9ZnVuY3Rpb24oZSl7dmFyIHQ9ZTtyZXR1cm4gaG8uZGVmaW5lZCh0KSYmaG8uc3RyaW5nKHQudXJpKSYmKG51bGw9PT10LnZlcnNpb258fGhvLmludGVnZXIodC52ZXJzaW9uKSl9LCh5aT12aXx8KHZpPXt9KSkuY3JlYXRlPWZ1bmN0aW9uKGUsdCxuLHIpe3JldHVybnt1cmk6ZSxsYW5ndWFnZUlkOnQsdmVyc2lvbjpuLHRleHQ6cn19LHlpLmlzPWZ1bmN0aW9uKGUpe3ZhciB0PWU7cmV0dXJuIGhvLmRlZmluZWQodCkmJmhvLnN0cmluZyh0LnVyaSkmJmhvLnN0cmluZyh0Lmxhbmd1YWdlSWQpJiZoby5pbnRlZ2VyKHQudmVyc2lvbikmJmhvLnN0cmluZyh0LnRleHQpfSwod2k9Q2l8fChDaT17fSkpLlBsYWluVGV4dD0icGxhaW50ZXh0Iix3aS5NYXJrZG93bj0ibWFya2Rvd24iLGZ1bmN0aW9uKGUpe2UuaXM9ZnVuY3Rpb24odCl7dmFyIG49dDtyZXR1cm4gbj09PWUuUGxhaW5UZXh0fHxuPT09ZS5NYXJrZG93bn19KENpfHwoQ2k9e30pKSwoX2l8fChfaT17fSkpLmlzPWZ1bmN0aW9uKGUpe3ZhciB0PWU7cmV0dXJuIGhvLm9iamVjdExpdGVyYWwoZSkmJkNpLmlzKHQua2luZCkmJmhvLnN0cmluZyh0LnZhbHVlKX0sKEFpPVNpfHwoU2k9e30pKS5UZXh0PTEsQWkuTWV0aG9kPTIsQWkuRnVuY3Rpb249MyxBaS5Db25zdHJ1Y3Rvcj00LEFpLkZpZWxkPTUsQWkuVmFyaWFibGU9NixBaS5DbGFzcz03LEFpLkludGVyZmFjZT04LEFpLk1vZHVsZT05LEFpLlByb3BlcnR5PTEwLEFpLlVuaXQ9MTEsQWkuVmFsdWU9MTIsQWkuRW51bT0xMyxBaS5LZXl3b3JkPTE0LEFpLlNuaXBwZXQ9MTUsQWkuQ29sb3I9MTYsQWkuRmlsZT0xNyxBaS5SZWZlcmVuY2U9MTgsQWkuRm9sZGVyPTE5LEFpLkVudW1NZW1iZXI9MjAsQWkuQ29uc3RhbnQ9MjEsQWkuU3RydWN0PTIyLEFpLkV2ZW50PTIzLEFpLk9wZXJhdG9yPTI0LEFpLlR5cGVQYXJhbWV0ZXI9MjUsKHhpPUVpfHwoRWk9e30pKS5QbGFpblRleHQ9MSx4aS5TbmlwcGV0PTIsKE5pfHwoTmk9e30pKS5EZXByZWNhdGVkPTEsKExpPWtpfHwoa2k9e30pKS5jcmVhdGU9ZnVuY3Rpb24oZSx0LG4pe3JldHVybntuZXdUZXh0OmUsaW5zZXJ0OnQscmVwbGFjZTpufX0sTGkuaXM9ZnVuY3Rpb24oZSl7dmFyIHQ9ZTtyZXR1cm4gdCYmaG8uc3RyaW5nKHQubmV3VGV4dCkmJmZyLmlzKHQuaW5zZXJ0KSYmZnIuaXModC5yZXBsYWNlKX0sKE9pPVRpfHwoVGk9e30pKS5hc0lzPTEsT2kuYWRqdXN0SW5kZW50YXRpb249MiwoSWl8fChJaT17fSkpLmNyZWF0ZT1mdW5jdGlvbihlKXtyZXR1cm57bGFiZWw6ZX19LChNaXx8KE1pPXt9KSkuY3JlYXRlPWZ1bmN0aW9uKGUsdCl7cmV0dXJue2l0ZW1zOmV8fFtdLGlzSW5jb21wbGV0ZTohIXR9fSwoUmk9UGl8fChQaT17fSkpLmZyb21QbGFpblRleHQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGUucmVwbGFjZSgvW1xcYCpfe31bXF0oKSMrXC0uIV0vZywiXFwkJiIpfSxSaS5pcz1mdW5jdGlvbihlKXt2YXIgdD1lO3JldHVybiBoby5zdHJpbmcodCl8fGhvLm9iamVjdExpdGVyYWwodCkmJmhvLnN0cmluZyh0Lmxhbmd1YWdlKSYmaG8uc3RyaW5nKHQudmFsdWUpfSwoVml8fChWaT17fSkpLmlzPWZ1bmN0aW9uKGUpe3ZhciB0PWU7cmV0dXJuISF0JiZoby5vYmplY3RMaXRlcmFsKHQpJiYoX2kuaXModC5jb250ZW50cyl8fFBpLmlzKHQuY29udGVudHMpfHxoby50eXBlZEFycmF5KHQuY29udGVudHMsUGkuaXMpKSYmKHZvaWQgMD09PWUucmFuZ2V8fGZyLmlzKGUucmFuZ2UpKX0sKEZpfHwoRmk9e30pKS5jcmVhdGU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdD97bGFiZWw6ZSxkb2N1bWVudGF0aW9uOnR9OntsYWJlbDplfX0sKERpfHwoRGk9e30pKS5jcmVhdGU9ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG49W10scj0yO3I8YXJndW1lbnRzLmxlbmd0aDtyKyspbltyLTJdPWFyZ3VtZW50c1tyXTt2YXIgaT17bGFiZWw6ZX07cmV0dXJuIGhvLmRlZmluZWQodCkmJihpLmRvY3VtZW50YXRpb249dCksaG8uZGVmaW5lZChuKT9pLnBhcmFtZXRlcnM9bjppLnBhcmFtZXRlcnM9W10saX0sKGppPUtpfHwoS2k9e30pKS5UZXh0PTEsamkuUmVhZD0yLGppLldyaXRlPTMsKFVpfHwoVWk9e30pKS5jcmVhdGU9ZnVuY3Rpb24oZSx0KXt2YXIgbj17cmFuZ2U6ZX07cmV0dXJuIGhvLm51bWJlcih0KSYmKG4ua2luZD10KSxufSwocWk9Qml8fChCaT17fSkpLkZpbGU9MSxxaS5Nb2R1bGU9MixxaS5OYW1lc3BhY2U9MyxxaS5QYWNrYWdlPTQscWkuQ2xhc3M9NSxxaS5NZXRob2Q9NixxaS5Qcm9wZXJ0eT03LHFpLkZpZWxkPTgscWkuQ29uc3RydWN0b3I9OSxxaS5FbnVtPTEwLHFpLkludGVyZmFjZT0xMSxxaS5GdW5jdGlvbj0xMixxaS5WYXJpYWJsZT0xMyxxaS5Db25zdGFudD0xNCxxaS5TdHJpbmc9MTUscWkuTnVtYmVyPTE2LHFpLkJvb2xlYW49MTcscWkuQXJyYXk9MTgscWkuT2JqZWN0PTE5LHFpLktleT0yMCxxaS5OdWxsPTIxLHFpLkVudW1NZW1iZXI9MjIscWkuU3RydWN0PTIzLHFpLkV2ZW50PTI0LHFpLk9wZXJhdG9yPTI1LHFpLlR5cGVQYXJhbWV0ZXI9MjYsKCRpfHwoJGk9e30pKS5EZXByZWNhdGVkPTEsKFdpfHwoV2k9e30pKS5jcmVhdGU9ZnVuY3Rpb24oZSx0LG4scixpKXt2YXIgbz17bmFtZTplLGtpbmQ6dCxsb2NhdGlvbjp7dXJpOnIscmFuZ2U6bn19O3JldHVybiBpJiYoby5jb250YWluZXJOYW1lPWkpLG99LCh6aT1IaXx8KEhpPXt9KSkuY3JlYXRlPWZ1bmN0aW9uKGUsdCxuLHIsaSxvKXt2YXIgYT17bmFtZTplLGRldGFpbDp0LGtpbmQ6bixyYW5nZTpyLHNlbGVjdGlvblJhbmdlOml9O3JldHVybiB2b2lkIDAhPT1vJiYoYS5jaGlsZHJlbj1vKSxhfSx6aS5pcz1mdW5jdGlvbihlKXt2YXIgdD1lO3JldHVybiB0JiZoby5zdHJpbmcodC5uYW1lKSYmaG8ubnVtYmVyKHQua2luZCkmJmZyLmlzKHQucmFuZ2UpJiZmci5pcyh0LnNlbGVjdGlvblJhbmdlKSYmKHZvaWQgMD09PXQuZGV0YWlsfHxoby5zdHJpbmcodC5kZXRhaWwpKSYmKHZvaWQgMD09PXQuZGVwcmVjYXRlZHx8aG8uYm9vbGVhbih0LmRlcHJlY2F0ZWQpKSYmKHZvaWQgMD09PXQuY2hpbGRyZW58fEFycmF5LmlzQXJyYXkodC5jaGlsZHJlbikpJiYodm9pZCAwPT09dC50YWdzfHxBcnJheS5pc0FycmF5KHQudGFncykpfSwoSmk9R2l8fChHaT17fSkpLkVtcHR5PSIiLEppLlF1aWNrRml4PSJxdWlja2ZpeCIsSmkuUmVmYWN0b3I9InJlZmFjdG9yIixKaS5SZWZhY3RvckV4dHJhY3Q9InJlZmFjdG9yLmV4dHJhY3QiLEppLlJlZmFjdG9ySW5saW5lPSJyZWZhY3Rvci5pbmxpbmUiLEppLlJlZmFjdG9yUmV3cml0ZT0icmVmYWN0b3IucmV3cml0ZSIsSmkuU291cmNlPSJzb3VyY2UiLEppLlNvdXJjZU9yZ2FuaXplSW1wb3J0cz0ic291cmNlLm9yZ2FuaXplSW1wb3J0cyIsSmkuU291cmNlRml4QWxsPSJzb3VyY2UuZml4QWxsIiwoWmk9WGl8fChYaT17fSkpLmNyZWF0ZT1mdW5jdGlvbihlLHQpe3ZhciBuPXtkaWFnbm9zdGljczplfTtyZXR1cm4gbnVsbCE9dCYmKG4ub25seT10KSxufSxaaS5pcz1mdW5jdGlvbihlKXt2YXIgdD1lO3JldHVybiBoby5kZWZpbmVkKHQpJiZoby50eXBlZEFycmF5KHQuZGlhZ25vc3RpY3MsUnIuaXMpJiYodm9pZCAwPT09dC5vbmx5fHxoby50eXBlZEFycmF5KHQub25seSxoby5zdHJpbmcpKX0sKFFpPVlpfHwoWWk9e30pKS5jcmVhdGU9ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXt0aXRsZTplfSxpPSEwO3JldHVybiJzdHJpbmciPT10eXBlb2YgdD8oaT0hMSxyLmtpbmQ9dCk6RnIuaXModCk/ci5jb21tYW5kPXQ6ci5lZGl0PXQsaSYmdm9pZCAwIT09biYmKHIua2luZD1uKSxyfSxRaS5pcz1mdW5jdGlvbihlKXt2YXIgdD1lO3JldHVybiB0JiZoby5zdHJpbmcodC50aXRsZSkmJih2b2lkIDA9PT10LmRpYWdub3N0aWNzfHxoby50eXBlZEFycmF5KHQuZGlhZ25vc3RpY3MsUnIuaXMpKSYmKHZvaWQgMD09PXQua2luZHx8aG8uc3RyaW5nKHQua2luZCkpJiYodm9pZCAwIT09dC5lZGl0fHx2b2lkIDAhPT10LmNvbW1hbmQpJiYodm9pZCAwPT09dC5jb21tYW5kfHxGci5pcyh0LmNvbW1hbmQpKSYmKHZvaWQgMD09PXQuaXNQcmVmZXJyZWR8fGhvLmJvb2xlYW4odC5pc1ByZWZlcnJlZCkpJiYodm9pZCAwPT09dC5lZGl0fHxlaS5pcyh0LmVkaXQpKX0sKHRvPWVvfHwoZW89e30pKS5jcmVhdGU9ZnVuY3Rpb24oZSx0KXt2YXIgbj17cmFuZ2U6ZX07cmV0dXJuIGhvLmRlZmluZWQodCkmJihuLmRhdGE9dCksbn0sdG8uaXM9ZnVuY3Rpb24oZSl7dmFyIHQ9ZTtyZXR1cm4gaG8uZGVmaW5lZCh0KSYmZnIuaXModC5yYW5nZSkmJihoby51bmRlZmluZWQodC5jb21tYW5kKXx8RnIuaXModC5jb21tYW5kKSl9LChybz1ub3x8KG5vPXt9KSkuY3JlYXRlPWZ1bmN0aW9uKGUsdCl7cmV0dXJue3RhYlNpemU6ZSxpbnNlcnRTcGFjZXM6dH19LHJvLmlzPWZ1bmN0aW9uKGUpe3ZhciB0PWU7cmV0dXJuIGhvLmRlZmluZWQodCkmJmhvLnVpbnRlZ2VyKHQudGFiU2l6ZSkmJmhvLmJvb2xlYW4odC5pbnNlcnRTcGFjZXMpfSwob289aW98fChpbz17fSkpLmNyZWF0ZT1mdW5jdGlvbihlLHQsbil7cmV0dXJue3JhbmdlOmUsdGFyZ2V0OnQsZGF0YTpufX0sb28uaXM9ZnVuY3Rpb24oZSl7dmFyIHQ9ZTtyZXR1cm4gaG8uZGVmaW5lZCh0KSYmZnIuaXModC5yYW5nZSkmJihoby51bmRlZmluZWQodC50YXJnZXQpfHxoby5zdHJpbmcodC50YXJnZXQpKX0sKHNvPWFvfHwoYW89e30pKS5jcmVhdGU9ZnVuY3Rpb24oZSx0KXtyZXR1cm57cmFuZ2U6ZSxwYXJlbnQ6dH19LHNvLmlzPWZ1bmN0aW9uKGUpe3ZhciB0PWU7cmV0dXJuIHZvaWQgMCE9PXQmJmZyLmlzKHQucmFuZ2UpJiYodm9pZCAwPT09dC5wYXJlbnR8fHNvLmlzKHQucGFyZW50KSl9LGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoZSxuKXtpZihlLmxlbmd0aDw9MSlyZXR1cm4gZTt2YXIgcj1lLmxlbmd0aC8yfDAsaT1lLnNsaWNlKDAsciksbz1lLnNsaWNlKHIpO3QoaSxuKSx0KG8sbik7Zm9yKHZhciBhPTAscz0wLGM9MDthPGkubGVuZ3RoJiZzPG8ubGVuZ3RoOyl7dmFyIGw9bihpW2FdLG9bc10pO2VbYysrXT1sPD0wP2lbYSsrXTpvW3MrK119Zm9yKDthPGkubGVuZ3RoOyllW2MrK109aVthKytdO2Zvcig7czxvLmxlbmd0aDspZVtjKytdPW9bcysrXTtyZXR1cm4gZX1lLmNyZWF0ZT1mdW5jdGlvbihlLHQsbixyKXtyZXR1cm4gbmV3IGdvKGUsdCxuLHIpfSxlLmlzPWZ1bmN0aW9uKGUpe3ZhciB0PWU7cmV0dXJuISEoaG8uZGVmaW5lZCh0KSYmaG8uc3RyaW5nKHQudXJpKSYmKGhvLnVuZGVmaW5lZCh0Lmxhbmd1YWdlSWQpfHxoby5zdHJpbmcodC5sYW5ndWFnZUlkKSkmJmhvLnVpbnRlZ2VyKHQubGluZUNvdW50KSYmaG8uZnVuYyh0LmdldFRleHQpJiZoby5mdW5jKHQucG9zaXRpb25BdCkmJmhvLmZ1bmModC5vZmZzZXRBdCkpfSxlLmFwcGx5RWRpdHM9ZnVuY3Rpb24oZSxuKXtmb3IodmFyIHI9ZS5nZXRUZXh0KCksaT10KG4sKGZ1bmN0aW9uKGUsdCl7dmFyIG49ZS5yYW5nZS5zdGFydC5saW5lLXQucmFuZ2Uuc3RhcnQubGluZTtyZXR1cm4gMD09PW4/ZS5yYW5nZS5zdGFydC5jaGFyYWN0ZXItdC5yYW5nZS5zdGFydC5jaGFyYWN0ZXI6bn0pKSxvPXIubGVuZ3RoLGE9aS5sZW5ndGgtMTthPj0wO2EtLSl7dmFyIHM9aVthXSxjPWUub2Zmc2V0QXQocy5yYW5nZS5zdGFydCksbD1lLm9mZnNldEF0KHMucmFuZ2UuZW5kKTtpZighKGw8PW8pKXRocm93IG5ldyBFcnJvcigiT3ZlcmxhcHBpbmcgZWRpdCIpO3I9ci5zdWJzdHJpbmcoMCxjKStzLm5ld1RleHQrci5zdWJzdHJpbmcobCxyLmxlbmd0aCksbz1jfXJldHVybiByfX0oY298fChjbz17fSkpO3ZhciBobyxmbyxtbyxnbz1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSx0LG4scil7dGhpcy5fdXJpPWUsdGhpcy5fbGFuZ3VhZ2VJZD10LHRoaXMuX3ZlcnNpb249bix0aGlzLl9jb250ZW50PXIsdGhpcy5fbGluZU9mZnNldHM9dm9pZCAwfXJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsInVyaSIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl91cml9LGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJsYW5ndWFnZUlkIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2xhbmd1YWdlSWR9LGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJ2ZXJzaW9uIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3ZlcnNpb259LGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEwfSksZS5wcm90b3R5cGUuZ2V0VGV4dD1mdW5jdGlvbihlKXtpZihlKXt2YXIgdD10aGlzLm9mZnNldEF0KGUuc3RhcnQpLG49dGhpcy5vZmZzZXRBdChlLmVuZCk7cmV0dXJuIHRoaXMuX2NvbnRlbnQuc3Vic3RyaW5nKHQsbil9cmV0dXJuIHRoaXMuX2NvbnRlbnR9LGUucHJvdG90eXBlLnVwZGF0ZT1mdW5jdGlvbihlLHQpe3RoaXMuX2NvbnRlbnQ9ZS50ZXh0LHRoaXMuX3ZlcnNpb249dCx0aGlzLl9saW5lT2Zmc2V0cz12b2lkIDB9LGUucHJvdG90eXBlLmdldExpbmVPZmZzZXRzPWZ1bmN0aW9uKCl7aWYodm9pZCAwPT09dGhpcy5fbGluZU9mZnNldHMpe2Zvcih2YXIgZT1bXSx0PXRoaXMuX2NvbnRlbnQsbj0hMCxyPTA7cjx0Lmxlbmd0aDtyKyspe24mJihlLnB1c2gociksbj0hMSk7dmFyIGk9dC5jaGFyQXQocik7bj0iXHIiPT09aXx8IlxuIj09PWksIlxyIj09PWkmJnIrMTx0Lmxlbmd0aCYmIlxuIj09PXQuY2hhckF0KHIrMSkmJnIrK31uJiZ0Lmxlbmd0aD4wJiZlLnB1c2godC5sZW5ndGgpLHRoaXMuX2xpbmVPZmZzZXRzPWV9cmV0dXJuIHRoaXMuX2xpbmVPZmZzZXRzfSxlLnByb3RvdHlwZS5wb3NpdGlvbkF0PWZ1bmN0aW9uKGUpe2U9TWF0aC5tYXgoTWF0aC5taW4oZSx0aGlzLl9jb250ZW50Lmxlbmd0aCksMCk7dmFyIHQ9dGhpcy5nZXRMaW5lT2Zmc2V0cygpLG49MCxyPXQubGVuZ3RoO2lmKDA9PT1yKXJldHVybiB1ci5jcmVhdGUoMCxlKTtmb3IoO248cjspe3ZhciBpPU1hdGguZmxvb3IoKG4rcikvMik7dFtpXT5lP3I9aTpuPWkrMX12YXIgbz1uLTE7cmV0dXJuIHVyLmNyZWF0ZShvLGUtdFtvXSl9LGUucHJvdG90eXBlLm9mZnNldEF0PWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuZ2V0TGluZU9mZnNldHMoKTtpZihlLmxpbmU+PXQubGVuZ3RoKXJldHVybiB0aGlzLl9jb250ZW50Lmxlbmd0aDtpZihlLmxpbmU8MClyZXR1cm4gMDt2YXIgbj10W2UubGluZV0scj1lLmxpbmUrMTx0Lmxlbmd0aD90W2UubGluZSsxXTp0aGlzLl9jb250ZW50Lmxlbmd0aDtyZXR1cm4gTWF0aC5tYXgoTWF0aC5taW4obitlLmNoYXJhY3RlcixyKSxuKX0sT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJsaW5lQ291bnQiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXRMaW5lT2Zmc2V0cygpLmxlbmd0aH0sZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9KSxlfSgpO2ZvPWhvfHwoaG89e30pLG1vPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcsZm8uZGVmaW5lZD1mdW5jdGlvbihlKXtyZXR1cm4gdm9pZCAwIT09ZX0sZm8udW5kZWZpbmVkPWZ1bmN0aW9uKGUpe3JldHVybiB2b2lkIDA9PT1lfSxmby5ib29sZWFuPWZ1bmN0aW9uKGUpe3JldHVybiEwPT09ZXx8ITE9PT1lfSxmby5zdHJpbmc9ZnVuY3Rpb24oZSl7cmV0dXJuIltvYmplY3QgU3RyaW5nXSI9PT1tby5jYWxsKGUpfSxmby5udW1iZXI9ZnVuY3Rpb24oZSl7cmV0dXJuIltvYmplY3QgTnVtYmVyXSI9PT1tby5jYWxsKGUpfSxmby5udW1iZXJSYW5nZT1mdW5jdGlvbihlLHQsbil7cmV0dXJuIltvYmplY3QgTnVtYmVyXSI9PT1tby5jYWxsKGUpJiZ0PD1lJiZlPD1ufSxmby5pbnRlZ2VyPWZ1bmN0aW9uKGUpe3JldHVybiJbb2JqZWN0IE51bWJlcl0iPT09bW8uY2FsbChlKSYmLTIxNDc0ODM2NDg8PWUmJmU8PTIxNDc0ODM2NDd9LGZvLnVpbnRlZ2VyPWZ1bmN0aW9uKGUpe3JldHVybiJbb2JqZWN0IE51bWJlcl0iPT09bW8uY2FsbChlKSYmMDw9ZSYmZTw9MjE0NzQ4MzY0N30sZm8uZnVuYz1mdW5jdGlvbihlKXtyZXR1cm4iW29iamVjdCBGdW5jdGlvbl0iPT09bW8uY2FsbChlKX0sZm8ub2JqZWN0TGl0ZXJhbD1mdW5jdGlvbihlKXtyZXR1cm4gbnVsbCE9PWUmJiJvYmplY3QiPT10eXBlb2YgZX0sZm8udHlwZWRBcnJheT1mdW5jdGlvbihlLHQpe3JldHVybiBBcnJheS5pc0FycmF5KGUpJiZlLmV2ZXJ5KHQpfTt2YXIgcG8sYm8sdm8seW8sQ28sd289Y2xhc3N7Y29uc3RydWN0b3IoZSx0LG4scil7dGhpcy5fdXJpPWUsdGhpcy5fbGFuZ3VhZ2VJZD10LHRoaXMuX3ZlcnNpb249bix0aGlzLl9jb250ZW50PXIsdGhpcy5fbGluZU9mZnNldHM9dm9pZCAwfWdldCB1cmkoKXtyZXR1cm4gdGhpcy5fdXJpfWdldCBsYW5ndWFnZUlkKCl7cmV0dXJuIHRoaXMuX2xhbmd1YWdlSWR9Z2V0IHZlcnNpb24oKXtyZXR1cm4gdGhpcy5fdmVyc2lvbn1nZXRUZXh0KGUpe2lmKGUpe2NvbnN0IHQ9dGhpcy5vZmZzZXRBdChlLnN0YXJ0KSxuPXRoaXMub2Zmc2V0QXQoZS5lbmQpO3JldHVybiB0aGlzLl9jb250ZW50LnN1YnN0cmluZyh0LG4pfXJldHVybiB0aGlzLl9jb250ZW50fXVwZGF0ZShlLHQpe2ZvcihsZXQgdCBvZiBlKWlmKHdvLmlzSW5jcmVtZW50YWwodCkpe2NvbnN0IGU9QW8odC5yYW5nZSksbj10aGlzLm9mZnNldEF0KGUuc3RhcnQpLHI9dGhpcy5vZmZzZXRBdChlLmVuZCk7dGhpcy5fY29udGVudD10aGlzLl9jb250ZW50LnN1YnN0cmluZygwLG4pK3QudGV4dCt0aGlzLl9jb250ZW50LnN1YnN0cmluZyhyLHRoaXMuX2NvbnRlbnQubGVuZ3RoKTtjb25zdCBpPU1hdGgubWF4KGUuc3RhcnQubGluZSwwKSxvPU1hdGgubWF4KGUuZW5kLmxpbmUsMCk7bGV0IGE9dGhpcy5fbGluZU9mZnNldHM7Y29uc3Qgcz1Tbyh0LnRleHQsITEsbik7aWYoby1pPT09cy5sZW5ndGgpZm9yKGxldCBlPTAsdD1zLmxlbmd0aDtlPHQ7ZSsrKWFbZStpKzFdPXNbZV07ZWxzZSBzLmxlbmd0aDwxZTQ/YS5zcGxpY2UoaSsxLG8taSwuLi5zKTp0aGlzLl9saW5lT2Zmc2V0cz1hPWEuc2xpY2UoMCxpKzEpLmNvbmNhdChzLGEuc2xpY2UobysxKSk7Y29uc3QgYz10LnRleHQubGVuZ3RoLShyLW4pO2lmKDAhPT1jKWZvcihsZXQgZT1pKzErcy5sZW5ndGgsdD1hLmxlbmd0aDtlPHQ7ZSsrKWFbZV09YVtlXStjfWVsc2V7aWYoIXdvLmlzRnVsbCh0KSl0aHJvdyBuZXcgRXJyb3IoIlVua25vd24gY2hhbmdlIGV2ZW50IHJlY2VpdmVkIik7dGhpcy5fY29udGVudD10LnRleHQsdGhpcy5fbGluZU9mZnNldHM9dm9pZCAwfXRoaXMuX3ZlcnNpb249dH1nZXRMaW5lT2Zmc2V0cygpe3JldHVybiB2b2lkIDA9PT10aGlzLl9saW5lT2Zmc2V0cyYmKHRoaXMuX2xpbmVPZmZzZXRzPVNvKHRoaXMuX2NvbnRlbnQsITApKSx0aGlzLl9saW5lT2Zmc2V0c31wb3NpdGlvbkF0KGUpe2U9TWF0aC5tYXgoTWF0aC5taW4oZSx0aGlzLl9jb250ZW50Lmxlbmd0aCksMCk7bGV0IHQ9dGhpcy5nZXRMaW5lT2Zmc2V0cygpLG49MCxyPXQubGVuZ3RoO2lmKDA9PT1yKXJldHVybntsaW5lOjAsY2hhcmFjdGVyOmV9O2Zvcig7bjxyOyl7bGV0IGk9TWF0aC5mbG9vcigobityKS8yKTt0W2ldPmU/cj1pOm49aSsxfWxldCBpPW4tMTtyZXR1cm57bGluZTppLGNoYXJhY3RlcjplLXRbaV19fW9mZnNldEF0KGUpe2xldCB0PXRoaXMuZ2V0TGluZU9mZnNldHMoKTtpZihlLmxpbmU+PXQubGVuZ3RoKXJldHVybiB0aGlzLl9jb250ZW50Lmxlbmd0aDtpZihlLmxpbmU8MClyZXR1cm4gMDtsZXQgbj10W2UubGluZV0scj1lLmxpbmUrMTx0Lmxlbmd0aD90W2UubGluZSsxXTp0aGlzLl9jb250ZW50Lmxlbmd0aDtyZXR1cm4gTWF0aC5tYXgoTWF0aC5taW4obitlLmNoYXJhY3RlcixyKSxuKX1nZXQgbGluZUNvdW50KCl7cmV0dXJuIHRoaXMuZ2V0TGluZU9mZnNldHMoKS5sZW5ndGh9c3RhdGljIGlzSW5jcmVtZW50YWwoZSl7bGV0IHQ9ZTtyZXR1cm4gbnVsbCE9dCYmInN0cmluZyI9PXR5cGVvZiB0LnRleHQmJnZvaWQgMCE9PXQucmFuZ2UmJih2b2lkIDA9PT10LnJhbmdlTGVuZ3RofHwibnVtYmVyIj09dHlwZW9mIHQucmFuZ2VMZW5ndGgpfXN0YXRpYyBpc0Z1bGwoZSl7bGV0IHQ9ZTtyZXR1cm4gbnVsbCE9dCYmInN0cmluZyI9PXR5cGVvZiB0LnRleHQmJnZvaWQgMD09PXQucmFuZ2UmJnZvaWQgMD09PXQucmFuZ2VMZW5ndGh9fTtmdW5jdGlvbiBfbyhlLHQpe2lmKGUubGVuZ3RoPD0xKXJldHVybiBlO2NvbnN0IG49ZS5sZW5ndGgvMnwwLHI9ZS5zbGljZSgwLG4pLGk9ZS5zbGljZShuKTtfbyhyLHQpLF9vKGksdCk7bGV0IG89MCxhPTAscz0wO2Zvcig7bzxyLmxlbmd0aCYmYTxpLmxlbmd0aDspe2xldCBuPXQocltvXSxpW2FdKTtlW3MrK109bjw9MD9yW28rK106aVthKytdfWZvcig7bzxyLmxlbmd0aDspZVtzKytdPXJbbysrXTtmb3IoO2E8aS5sZW5ndGg7KWVbcysrXT1pW2ErK107cmV0dXJuIGV9ZnVuY3Rpb24gU28oZSx0LG49MCl7Y29uc3Qgcj10P1tuXTpbXTtmb3IobGV0IHQ9MDt0PGUubGVuZ3RoO3QrKyl7bGV0IGk9ZS5jaGFyQ29kZUF0KHQpOzEzIT09aSYmMTAhPT1pfHwoMTM9PT1pJiZ0KzE8ZS5sZW5ndGgmJjEwPT09ZS5jaGFyQ29kZUF0KHQrMSkmJnQrKyxyLnB1c2gobit0KzEpKX1yZXR1cm4gcn1mdW5jdGlvbiBBbyhlKXtjb25zdCB0PWUuc3RhcnQsbj1lLmVuZDtyZXR1cm4gdC5saW5lPm4ubGluZXx8dC5saW5lPT09bi5saW5lJiZ0LmNoYXJhY3Rlcj5uLmNoYXJhY3Rlcj97c3RhcnQ6bixlbmQ6dH06ZX1mdW5jdGlvbiBFbyhlKXtjb25zdCB0PUFvKGUucmFuZ2UpO3JldHVybiB0IT09ZS5yYW5nZT97bmV3VGV4dDplLm5ld1RleHQscmFuZ2U6dH06ZX1mdW5jdGlvbiB4byhlLHQsLi4ubil7cmV0dXJuIGZ1bmN0aW9uKGUsdCl7bGV0IG47cmV0dXJuIG49MD09PXQubGVuZ3RoP2U6ZS5yZXBsYWNlKC9ceyhcZCspXH0vZywoKGUsbik9PntsZXQgcj1uWzBdO3JldHVybiB2b2lkIDAhPT10W3JdP3Rbcl06ZX0pKSxufSh0LG4pfWZ1bmN0aW9uIE5vKGUpe3JldHVybiB4b30oYm89cG98fChwbz17fSkpLmNyZWF0ZT1mdW5jdGlvbihlLHQsbixyKXtyZXR1cm4gbmV3IHdvKGUsdCxuLHIpfSxiby51cGRhdGU9ZnVuY3Rpb24oZSx0LG4pe2lmKGUgaW5zdGFuY2VvZiB3bylyZXR1cm4gZS51cGRhdGUodCxuKSxlO3Rocm93IG5ldyBFcnJvcigiVGV4dERvY3VtZW50LnVwZGF0ZTogZG9jdW1lbnQgbXVzdCBiZSBjcmVhdGVkIGJ5IFRleHREb2N1bWVudC5jcmVhdGUiKX0sYm8uYXBwbHlFZGl0cz1mdW5jdGlvbihlLHQpe2xldCBuPWUuZ2V0VGV4dCgpLHI9X28odC5tYXAoRW8pLCgoZSx0KT0+e2xldCBuPWUucmFuZ2Uuc3RhcnQubGluZS10LnJhbmdlLnN0YXJ0LmxpbmU7cmV0dXJuIDA9PT1uP2UucmFuZ2Uuc3RhcnQuY2hhcmFjdGVyLXQucmFuZ2Uuc3RhcnQuY2hhcmFjdGVyOm59KSksaT0wO2NvbnN0IG89W107Zm9yKGNvbnN0IHQgb2Ygcil7bGV0IHI9ZS5vZmZzZXRBdCh0LnJhbmdlLnN0YXJ0KTtpZihyPGkpdGhyb3cgbmV3IEVycm9yKCJPdmVybGFwcGluZyBlZGl0Iik7cj5pJiZvLnB1c2gobi5zdWJzdHJpbmcoaSxyKSksdC5uZXdUZXh0Lmxlbmd0aCYmby5wdXNoKHQubmV3VGV4dCksaT1lLm9mZnNldEF0KHQucmFuZ2UuZW5kKX1yZXR1cm4gby5wdXNoKG4uc3Vic3RyKGkpKSxvLmpvaW4oIiIpfSwoeW89dm98fCh2bz17fSkpW3lvLlVuZGVmaW5lZD0wXT0iVW5kZWZpbmVkIix5b1t5by5FbnVtVmFsdWVNaXNtYXRjaD0xXT0iRW51bVZhbHVlTWlzbWF0Y2giLHlvW3lvLkRlcHJlY2F0ZWQ9Ml09IkRlcHJlY2F0ZWQiLHlvW3lvLlVuZXhwZWN0ZWRFbmRPZkNvbW1lbnQ9MjU3XT0iVW5leHBlY3RlZEVuZE9mQ29tbWVudCIseW9beW8uVW5leHBlY3RlZEVuZE9mU3RyaW5nPTI1OF09IlVuZXhwZWN0ZWRFbmRPZlN0cmluZyIseW9beW8uVW5leHBlY3RlZEVuZE9mTnVtYmVyPTI1OV09IlVuZXhwZWN0ZWRFbmRPZk51bWJlciIseW9beW8uSW52YWxpZFVuaWNvZGU9MjYwXT0iSW52YWxpZFVuaWNvZGUiLHlvW3lvLkludmFsaWRFc2NhcGVDaGFyYWN0ZXI9MjYxXT0iSW52YWxpZEVzY2FwZUNoYXJhY3RlciIseW9beW8uSW52YWxpZENoYXJhY3Rlcj0yNjJdPSJJbnZhbGlkQ2hhcmFjdGVyIix5b1t5by5Qcm9wZXJ0eUV4cGVjdGVkPTUxM109IlByb3BlcnR5RXhwZWN0ZWQiLHlvW3lvLkNvbW1hRXhwZWN0ZWQ9NTE0XT0iQ29tbWFFeHBlY3RlZCIseW9beW8uQ29sb25FeHBlY3RlZD01MTVdPSJDb2xvbkV4cGVjdGVkIix5b1t5by5WYWx1ZUV4cGVjdGVkPTUxNl09IlZhbHVlRXhwZWN0ZWQiLHlvW3lvLkNvbW1hT3JDbG9zZUJhY2tldEV4cGVjdGVkPTUxN109IkNvbW1hT3JDbG9zZUJhY2tldEV4cGVjdGVkIix5b1t5by5Db21tYU9yQ2xvc2VCcmFjZUV4cGVjdGVkPTUxOF09IkNvbW1hT3JDbG9zZUJyYWNlRXhwZWN0ZWQiLHlvW3lvLlRyYWlsaW5nQ29tbWE9NTE5XT0iVHJhaWxpbmdDb21tYSIseW9beW8uRHVwbGljYXRlS2V5PTUyMF09IkR1cGxpY2F0ZUtleSIseW9beW8uQ29tbWVudE5vdFBlcm1pdHRlZD01MjFdPSJDb21tZW50Tm90UGVybWl0dGVkIix5b1t5by5TY2hlbWFSZXNvbHZlRXJyb3I9NzY4XT0iU2NoZW1hUmVzb2x2ZUVycm9yIiwoQ298fChDbz17fSkpLkxBVEVTVD17dGV4dERvY3VtZW50Ontjb21wbGV0aW9uOntjb21wbGV0aW9uSXRlbTp7ZG9jdW1lbnRhdGlvbkZvcm1hdDpbQ2kuTWFya2Rvd24sQ2kuUGxhaW5UZXh0XSxjb21taXRDaGFyYWN0ZXJzU3VwcG9ydDohMH19fX07dmFyIGtvLExvLFRvLE9vPShrbz1mdW5jdGlvbihlLHQpe3JldHVybihrbz1PYmplY3Quc2V0UHJvdG90eXBlT2Z8fHtfX3Byb3RvX186W119aW5zdGFuY2VvZiBBcnJheSYmZnVuY3Rpb24oZSx0KXtlLl9fcHJvdG9fXz10fXx8ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG4gaW4gdClPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodCxuKSYmKGVbbl09dFtuXSl9KShlLHQpfSxmdW5jdGlvbihlLHQpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiB0JiZudWxsIT09dCl0aHJvdyBuZXcgVHlwZUVycm9yKCJDbGFzcyBleHRlbmRzIHZhbHVlICIrU3RyaW5nKHQpKyIgaXMgbm90IGEgY29uc3RydWN0b3Igb3IgbnVsbCIpO2Z1bmN0aW9uIG4oKXt0aGlzLmNvbnN0cnVjdG9yPWV9a28oZSx0KSxlLnByb3RvdHlwZT1udWxsPT09dD9PYmplY3QuY3JlYXRlKHQpOihuLnByb3RvdHlwZT10LnByb3RvdHlwZSxuZXcgbil9KSxJbz1ObygpLE1vPXsiY29sb3ItaGV4Ijp7ZXJyb3JNZXNzYWdlOklvKCJjb2xvckhleEZvcm1hdFdhcm5pbmciLCJJbnZhbGlkIGNvbG9yIGZvcm1hdC4gVXNlICNSR0IsICNSR0JBLCAjUlJHR0JCIG9yICNSUkdHQkJBQS4iKSxwYXR0ZXJuOi9eIyhbMC05QS1GYS1mXXszLDR9fChbMC05QS1GYS1mXXsyfSl7Myw0fSkkL30sImRhdGUtdGltZSI6e2Vycm9yTWVzc2FnZTpJbygiZGF0ZVRpbWVGb3JtYXRXYXJuaW5nIiwiU3RyaW5nIGlzIG5vdCBhIFJGQzMzMzkgZGF0ZS10aW1lLiIpLHBhdHRlcm46L14oXGR7NH0pLSgwWzEtOV18MVswLTJdKS0oMFsxLTldfFsxMl1bMC05XXwzWzAxXSlUKFswMV1bMC05XXwyWzAtM10pOihbMC01XVswLTldKTooWzAtNV1bMC05XXw2MCkoXC5bMC05XSspPyhafChcK3wtKShbMDFdWzAtOV18MlswLTNdKTooWzAtNV1bMC05XSkpJC9pfSxkYXRlOntlcnJvck1lc3NhZ2U6SW8oImRhdGVGb3JtYXRXYXJuaW5nIiwiU3RyaW5nIGlzIG5vdCBhIFJGQzMzMzkgZGF0ZS4iKSxwYXR0ZXJuOi9eKFxkezR9KS0oMFsxLTldfDFbMC0yXSktKDBbMS05XXxbMTJdWzAtOV18M1swMV0pJC9pfSx0aW1lOntlcnJvck1lc3NhZ2U6SW8oInRpbWVGb3JtYXRXYXJuaW5nIiwiU3RyaW5nIGlzIG5vdCBhIFJGQzMzMzkgdGltZS4iKSxwYXR0ZXJuOi9eKFswMV1bMC05XXwyWzAtM10pOihbMC01XVswLTldKTooWzAtNV1bMC05XXw2MCkoXC5bMC05XSspPyhafChcK3wtKShbMDFdWzAtOV18MlswLTNdKTooWzAtNV1bMC05XSkpJC9pfSxlbWFpbDp7ZXJyb3JNZXNzYWdlOklvKCJlbWFpbEZvcm1hdFdhcm5pbmciLCJTdHJpbmcgaXMgbm90IGFuIGUtbWFpbCBhZGRyZXNzLiIpLHBhdHRlcm46L14oKFtePD4oKVxbXF1cXC4sOzpcc0AiXSsoXC5bXjw+KClcW1xdXFwuLDs6XHNAIl0rKSopfCgiLisiKSlAKChcW1swLTldezEsM31cLlswLTldezEsM31cLlswLTldezEsM31cLlswLTldezEsM31dKXwoKFthLXpBLVowLTktXStcLikrW2EtekEtWl17Mix9KSkkL30saG9zdG5hbWU6e2Vycm9yTWVzc2FnZTpJbygiaG9zdG5hbWVGb3JtYXRXYXJuaW5nIiwiU3RyaW5nIGlzIG5vdCBhIGhvc3RuYW1lLiIpLHBhdHRlcm46L14oPz0uezEsMjUzfVwuPyQpW2EtejAtOV0oPzpbYS16MC05LV17MCw2MX1bYS16MC05XSk/KD86XC5bYS16MC05XSg/OlstMC05YS16XXswLDYxfVswLTlhLXpdKT8pKlwuPyQvaX0saXB2NDp7ZXJyb3JNZXNzYWdlOklvKCJpcHY0Rm9ybWF0V2FybmluZyIsIlN0cmluZyBpcyBub3QgYW4gSVB2NCBhZGRyZXNzLiIpLHBhdHRlcm46L14oPzooPzoyNVswLTVdfDJbMC00XVxkfDFcZFxkfFsxLTldP1xkKVwuKXszfSg/OjI1WzAtNV18MlswLTRdXGR8MVxkXGR8WzEtOV0/XGQpJC99LGlwdjY6e2Vycm9yTWVzc2FnZTpJbygiaXB2NkZvcm1hdFdhcm5pbmciLCJTdHJpbmcgaXMgbm90IGFuIElQdjYgYWRkcmVzcy4iKSxwYXR0ZXJuOi9eKCgoWzAtOWEtZl17MSw0fTopezd9KFswLTlhLWZdezEsNH18OikpfCgoWzAtOWEtZl17MSw0fTopezZ9KDpbMC05YS1mXXsxLDR9fCgoMjVbMC01XXwyWzAtNF1cZHwxXGRcZHxbMS05XT9cZCkoXC4oMjVbMC01XXwyWzAtNF1cZHwxXGRcZHxbMS05XT9cZCkpezN9KXw6KSl8KChbMC05YS1mXXsxLDR9Oil7NX0oKCg6WzAtOWEtZl17MSw0fSl7MSwyfSl8OigoMjVbMC01XXwyWzAtNF1cZHwxXGRcZHxbMS05XT9cZCkoXC4oMjVbMC01XXwyWzAtNF1cZHwxXGRcZHxbMS05XT9cZCkpezN9KXw6KSl8KChbMC05YS1mXXsxLDR9Oil7NH0oKCg6WzAtOWEtZl17MSw0fSl7MSwzfSl8KCg6WzAtOWEtZl17MSw0fSk/OigoMjVbMC01XXwyWzAtNF1cZHwxXGRcZHxbMS05XT9cZCkoXC4oMjVbMC01XXwyWzAtNF1cZHwxXGRcZHxbMS05XT9cZCkpezN9KSl8OikpfCgoWzAtOWEtZl17MSw0fTopezN9KCgoOlswLTlhLWZdezEsNH0pezEsNH0pfCgoOlswLTlhLWZdezEsNH0pezAsMn06KCgyNVswLTVdfDJbMC00XVxkfDFcZFxkfFsxLTldP1xkKShcLigyNVswLTVdfDJbMC00XVxkfDFcZFxkfFsxLTldP1xkKSl7M30pKXw6KSl8KChbMC05YS1mXXsxLDR9Oil7Mn0oKCg6WzAtOWEtZl17MSw0fSl7MSw1fSl8KCg6WzAtOWEtZl17MSw0fSl7MCwzfTooKDI1WzAtNV18MlswLTRdXGR8MVxkXGR8WzEtOV0/XGQpKFwuKDI1WzAtNV18MlswLTRdXGR8MVxkXGR8WzEtOV0/XGQpKXszfSkpfDopKXwoKFswLTlhLWZdezEsNH06KXsxfSgoKDpbMC05YS1mXXsxLDR9KXsxLDZ9KXwoKDpbMC05YS1mXXsxLDR9KXswLDR9OigoMjVbMC01XXwyWzAtNF1cZHwxXGRcZHxbMS05XT9cZCkoXC4oMjVbMC01XXwyWzAtNF1cZHwxXGRcZHxbMS05XT9cZCkpezN9KSl8OikpfCg6KCgoOlswLTlhLWZdezEsNH0pezEsN30pfCgoOlswLTlhLWZdezEsNH0pezAsNX06KCgyNVswLTVdfDJbMC00XVxkfDFcZFxkfFsxLTldP1xkKShcLigyNVswLTVdfDJbMC00XVxkfDFcZFxkfFsxLTldP1xkKSl7M30pKXw6KSkpJC9pfX0sUG89ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsdCxuKXt2b2lkIDA9PT1uJiYobj0wKSx0aGlzLm9mZnNldD10LHRoaXMubGVuZ3RoPW4sdGhpcy5wYXJlbnQ9ZX1yZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJjaGlsZHJlbiIse2dldDpmdW5jdGlvbigpe3JldHVybltdfSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLGUucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuInR5cGU6ICIrdGhpcy50eXBlKyIgKCIrdGhpcy5vZmZzZXQrIi8iK3RoaXMubGVuZ3RoKyIpIisodGhpcy5wYXJlbnQ/IiBwYXJlbnQ6IHsiK3RoaXMucGFyZW50LnRvU3RyaW5nKCkrIn0iOiIiKX0sZX0oKSxSbz1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KHQsbil7dmFyIHI9ZS5jYWxsKHRoaXMsdCxuKXx8dGhpcztyZXR1cm4gci50eXBlPSJudWxsIixyLnZhbHVlPW51bGwscn1yZXR1cm4gT28odCxlKSx0fShQbyksVm89ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdCh0LG4scil7dmFyIGk9ZS5jYWxsKHRoaXMsdCxyKXx8dGhpcztyZXR1cm4gaS50eXBlPSJib29sZWFuIixpLnZhbHVlPW4saX1yZXR1cm4gT28odCxlKSx0fShQbyksRm89ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdCh0LG4pe3ZhciByPWUuY2FsbCh0aGlzLHQsbil8fHRoaXM7cmV0dXJuIHIudHlwZT0iYXJyYXkiLHIuaXRlbXM9W10scn1yZXR1cm4gT28odCxlKSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsImNoaWxkcmVuIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXRlbXN9LGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEwfSksdH0oUG8pLERvPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQodCxuKXt2YXIgcj1lLmNhbGwodGhpcyx0LG4pfHx0aGlzO3JldHVybiByLnR5cGU9Im51bWJlciIsci5pc0ludGVnZXI9ITAsci52YWx1ZT1OdW1iZXIuTmFOLHJ9cmV0dXJuIE9vKHQsZSksdH0oUG8pLEtvPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQodCxuLHIpe3ZhciBpPWUuY2FsbCh0aGlzLHQsbixyKXx8dGhpcztyZXR1cm4gaS50eXBlPSJzdHJpbmciLGkudmFsdWU9IiIsaX1yZXR1cm4gT28odCxlKSx0fShQbyksam89ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdCh0LG4scil7dmFyIGk9ZS5jYWxsKHRoaXMsdCxuKXx8dGhpcztyZXR1cm4gaS50eXBlPSJwcm9wZXJ0eSIsaS5jb2xvbk9mZnNldD0tMSxpLmtleU5vZGU9cixpfXJldHVybiBPbyh0LGUpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwiY2hpbGRyZW4iLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy52YWx1ZU5vZGU/W3RoaXMua2V5Tm9kZSx0aGlzLnZhbHVlTm9kZV06W3RoaXMua2V5Tm9kZV19LGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEwfSksdH0oUG8pLFVvPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQodCxuKXt2YXIgcj1lLmNhbGwodGhpcyx0LG4pfHx0aGlzO3JldHVybiByLnR5cGU9Im9iamVjdCIsci5wcm9wZXJ0aWVzPVtdLHJ9cmV0dXJuIE9vKHQsZSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJjaGlsZHJlbiIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnByb3BlcnRpZXN9LGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEwfSksdH0oUG8pO2Z1bmN0aW9uIEJvKGUpe3JldHVybiBsaShlKT9lP3t9Ontub3Q6e319OmV9KFRvPUxvfHwoTG89e30pKVtUby5LZXk9MF09IktleSIsVG9bVG8uRW51bT0xXT0iRW51bSI7dmFyIHFvPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHQpe3ZvaWQgMD09PWUmJihlPS0xKSx0aGlzLmZvY3VzT2Zmc2V0PWUsdGhpcy5leGNsdWRlPXQsdGhpcy5zY2hlbWFzPVtdfXJldHVybiBlLnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24oZSl7dGhpcy5zY2hlbWFzLnB1c2goZSl9LGUucHJvdG90eXBlLm1lcmdlPWZ1bmN0aW9uKGUpe0FycmF5LnByb3RvdHlwZS5wdXNoLmFwcGx5KHRoaXMuc2NoZW1hcyxlLnNjaGVtYXMpfSxlLnByb3RvdHlwZS5pbmNsdWRlPWZ1bmN0aW9uKGUpe3JldHVybigtMT09PXRoaXMuZm9jdXNPZmZzZXR8fEdvKGUsdGhpcy5mb2N1c09mZnNldCkpJiZlIT09dGhpcy5leGNsdWRlfSxlLnByb3RvdHlwZS5uZXdTdWI9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGUoLTEsdGhpcy5leGNsdWRlKX0sZX0oKSwkbz1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXt9cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwic2NoZW1hcyIse2dldDpmdW5jdGlvbigpe3JldHVybltdfSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLGUucHJvdG90eXBlLmFkZD1mdW5jdGlvbihlKXt9LGUucHJvdG90eXBlLm1lcmdlPWZ1bmN0aW9uKGUpe30sZS5wcm90b3R5cGUuaW5jbHVkZT1mdW5jdGlvbihlKXtyZXR1cm4hMH0sZS5wcm90b3R5cGUubmV3U3ViPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9LGUuaW5zdGFuY2U9bmV3IGUsZX0oKSxXbz1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXt0aGlzLnByb2JsZW1zPVtdLHRoaXMucHJvcGVydGllc01hdGNoZXM9MCx0aGlzLnByb3BlcnRpZXNWYWx1ZU1hdGNoZXM9MCx0aGlzLnByaW1hcnlWYWx1ZU1hdGNoZXM9MCx0aGlzLmVudW1WYWx1ZU1hdGNoPSExLHRoaXMuZW51bVZhbHVlcz12b2lkIDB9cmV0dXJuIGUucHJvdG90eXBlLmhhc1Byb2JsZW1zPWZ1bmN0aW9uKCl7cmV0dXJuISF0aGlzLnByb2JsZW1zLmxlbmd0aH0sZS5wcm90b3R5cGUubWVyZ2VBbGw9ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PTAsbj1lO3Q8bi5sZW5ndGg7dCsrKXt2YXIgcj1uW3RdO3RoaXMubWVyZ2Uocil9fSxlLnByb3RvdHlwZS5tZXJnZT1mdW5jdGlvbihlKXt0aGlzLnByb2JsZW1zPXRoaXMucHJvYmxlbXMuY29uY2F0KGUucHJvYmxlbXMpfSxlLnByb3RvdHlwZS5tZXJnZUVudW1WYWx1ZXM9ZnVuY3Rpb24oZSl7aWYoIXRoaXMuZW51bVZhbHVlTWF0Y2gmJiFlLmVudW1WYWx1ZU1hdGNoJiZ0aGlzLmVudW1WYWx1ZXMmJmUuZW51bVZhbHVlcyl7dGhpcy5lbnVtVmFsdWVzPXRoaXMuZW51bVZhbHVlcy5jb25jYXQoZS5lbnVtVmFsdWVzKTtmb3IodmFyIHQ9MCxuPXRoaXMucHJvYmxlbXM7dDxuLmxlbmd0aDt0Kyspe3ZhciByPW5bdF07ci5jb2RlPT09dm8uRW51bVZhbHVlTWlzbWF0Y2gmJihyLm1lc3NhZ2U9SW8oImVudW1XYXJuaW5nIiwiVmFsdWUgaXMgbm90IGFjY2VwdGVkLiBWYWxpZCB2YWx1ZXM6IHswfS4iLHRoaXMuZW51bVZhbHVlcy5tYXAoKGZ1bmN0aW9uKGUpe3JldHVybiBKU09OLnN0cmluZ2lmeShlKX0pKS5qb2luKCIsICIpKSl9fX0sZS5wcm90b3R5cGUubWVyZ2VQcm9wZXJ0eU1hdGNoPWZ1bmN0aW9uKGUpe3RoaXMubWVyZ2UoZSksdGhpcy5wcm9wZXJ0aWVzTWF0Y2hlcysrLChlLmVudW1WYWx1ZU1hdGNofHwhZS5oYXNQcm9ibGVtcygpJiZlLnByb3BlcnRpZXNNYXRjaGVzKSYmdGhpcy5wcm9wZXJ0aWVzVmFsdWVNYXRjaGVzKyssZS5lbnVtVmFsdWVNYXRjaCYmZS5lbnVtVmFsdWVzJiYxPT09ZS5lbnVtVmFsdWVzLmxlbmd0aCYmdGhpcy5wcmltYXJ5VmFsdWVNYXRjaGVzKyt9LGUucHJvdG90eXBlLmNvbXBhcmU9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5oYXNQcm9ibGVtcygpO3JldHVybiB0IT09ZS5oYXNQcm9ibGVtcygpP3Q/LTE6MTp0aGlzLmVudW1WYWx1ZU1hdGNoIT09ZS5lbnVtVmFsdWVNYXRjaD9lLmVudW1WYWx1ZU1hdGNoPy0xOjE6dGhpcy5wcmltYXJ5VmFsdWVNYXRjaGVzIT09ZS5wcmltYXJ5VmFsdWVNYXRjaGVzP3RoaXMucHJpbWFyeVZhbHVlTWF0Y2hlcy1lLnByaW1hcnlWYWx1ZU1hdGNoZXM6dGhpcy5wcm9wZXJ0aWVzVmFsdWVNYXRjaGVzIT09ZS5wcm9wZXJ0aWVzVmFsdWVNYXRjaGVzP3RoaXMucHJvcGVydGllc1ZhbHVlTWF0Y2hlcy1lLnByb3BlcnRpZXNWYWx1ZU1hdGNoZXM6dGhpcy5wcm9wZXJ0aWVzTWF0Y2hlcy1lLnByb3BlcnRpZXNNYXRjaGVzfSxlfSgpO2Z1bmN0aW9uIEhvKGUpe3JldHVybiBvaShlKX1mdW5jdGlvbiB6byhlKXtyZXR1cm4gaWkoZSl9ZnVuY3Rpb24gR28oZSx0LG4pe3JldHVybiB2b2lkIDA9PT1uJiYobj0hMSksdD49ZS5vZmZzZXQmJnQ8ZS5vZmZzZXQrZS5sZW5ndGh8fG4mJnQ9PT1lLm9mZnNldCtlLmxlbmd0aH12YXIgSm89ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsdCxuKXt2b2lkIDA9PT10JiYodD1bXSksdm9pZCAwPT09biYmKG49W10pLHRoaXMucm9vdD1lLHRoaXMuc3ludGF4RXJyb3JzPXQsdGhpcy5jb21tZW50cz1ufXJldHVybiBlLnByb3RvdHlwZS5nZXROb2RlRnJvbU9mZnNldD1mdW5jdGlvbihlLHQpe2lmKHZvaWQgMD09PXQmJih0PSExKSx0aGlzLnJvb3QpcmV0dXJuIHJpKHRoaXMucm9vdCxlLHQpfSxlLnByb3RvdHlwZS52aXNpdD1mdW5jdGlvbihlKXtpZih0aGlzLnJvb3Qpe3ZhciB0PWZ1bmN0aW9uKG4pe3ZhciByPWUobiksaT1uLmNoaWxkcmVuO2lmKEFycmF5LmlzQXJyYXkoaSkpZm9yKHZhciBvPTA7bzxpLmxlbmd0aCYmcjtvKyspcj10KGlbb10pO3JldHVybiByfTt0KHRoaXMucm9vdCl9fSxlLnByb3RvdHlwZS52YWxpZGF0ZT1mdW5jdGlvbihlLHQsbil7aWYodm9pZCAwPT09biYmKG49VHIuV2FybmluZyksdGhpcy5yb290JiZ0KXt2YXIgcj1uZXcgV287cmV0dXJuIFhvKHRoaXMucm9vdCx0LHIsJG8uaW5zdGFuY2UpLHIucHJvYmxlbXMubWFwKChmdW5jdGlvbih0KXt2YXIgcixpPWZyLmNyZWF0ZShlLnBvc2l0aW9uQXQodC5sb2NhdGlvbi5vZmZzZXQpLGUucG9zaXRpb25BdCh0LmxvY2F0aW9uLm9mZnNldCt0LmxvY2F0aW9uLmxlbmd0aCkpO3JldHVybiBSci5jcmVhdGUoaSx0Lm1lc3NhZ2UsbnVsbCE9PShyPXQuc2V2ZXJpdHkpJiZ2b2lkIDAhPT1yP3I6bix0LmNvZGUpfSkpfX0sZS5wcm90b3R5cGUuZ2V0TWF0Y2hpbmdTY2hlbWFzPWZ1bmN0aW9uKGUsdCxuKXt2b2lkIDA9PT10JiYodD0tMSk7dmFyIHI9bmV3IHFvKHQsbik7cmV0dXJuIHRoaXMucm9vdCYmZSYmWG8odGhpcy5yb290LGUsbmV3IFdvLHIpLHIuc2NoZW1hc30sZX0oKTtmdW5jdGlvbiBYbyhlLHQsbixyKXtpZihlJiZyLmluY2x1ZGUoZSkpe3ZhciBpPWU7c3dpdGNoKGkudHlwZSl7Y2FzZSJvYmplY3QiOiFmdW5jdGlvbihlLHQsbixyKXtmb3IodmFyIGk9T2JqZWN0LmNyZWF0ZShudWxsKSxvPVtdLGE9MCxzPWUucHJvcGVydGllczthPHMubGVuZ3RoO2ErKyl7aVtLPShwPXNbYV0pLmtleU5vZGUudmFsdWVdPXAudmFsdWVOb2RlLG8ucHVzaChLKX1pZihBcnJheS5pc0FycmF5KHQucmVxdWlyZWQpKWZvcih2YXIgYz0wLGw9dC5yZXF1aXJlZDtjPGwubGVuZ3RoO2MrKyl7aWYoIWlbUz1sW2NdXSl7dmFyIHU9ZS5wYXJlbnQmJiJwcm9wZXJ0eSI9PT1lLnBhcmVudC50eXBlJiZlLnBhcmVudC5rZXlOb2RlLGg9dT97b2Zmc2V0OnUub2Zmc2V0LGxlbmd0aDp1Lmxlbmd0aH06e29mZnNldDplLm9mZnNldCxsZW5ndGg6MX07bi5wcm9ibGVtcy5wdXNoKHtsb2NhdGlvbjpoLG1lc3NhZ2U6SW8oIk1pc3NpbmdSZXF1aXJlZFByb3BXYXJuaW5nIiwnTWlzc2luZyBwcm9wZXJ0eSAiezB9Ii4nLFMpfSl9fXZhciBmPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD1vLmluZGV4T2YoZSk7dD49MDspby5zcGxpY2UodCwxKSx0PW8uaW5kZXhPZihlKX07aWYodC5wcm9wZXJ0aWVzKWZvcih2YXIgZD0wLG09T2JqZWN0LmtleXModC5wcm9wZXJ0aWVzKTtkPG0ubGVuZ3RoO2QrKyl7ZihTPW1bZF0pO3ZhciBnPXQucHJvcGVydGllc1tTXTtpZihMPWlbU10paWYobGkoZykpaWYoZyluLnByb3BlcnRpZXNNYXRjaGVzKyssbi5wcm9wZXJ0aWVzVmFsdWVNYXRjaGVzKys7ZWxzZXt2YXIgcD1MLnBhcmVudDtuLnByb2JsZW1zLnB1c2goe2xvY2F0aW9uOntvZmZzZXQ6cC5rZXlOb2RlLm9mZnNldCxsZW5ndGg6cC5rZXlOb2RlLmxlbmd0aH0sbWVzc2FnZTp0LmVycm9yTWVzc2FnZXx8SW8oIkRpc2FsbG93ZWRFeHRyYVByb3BXYXJuaW5nIiwiUHJvcGVydHkgezB9IGlzIG5vdCBhbGxvd2VkLiIsUyl9KX1lbHNlIFhvKEwsZyx4PW5ldyBXbyxyKSxuLm1lcmdlUHJvcGVydHlNYXRjaCh4KX1pZih0LnBhdHRlcm5Qcm9wZXJ0aWVzKWZvcih2YXIgYj0wLHY9T2JqZWN0LmtleXModC5wYXR0ZXJuUHJvcGVydGllcyk7Yjx2Lmxlbmd0aDtiKyspZm9yKHZhciB5PXZbYl0sQz1oaSh5KSx3PTAsXz1vLnNsaWNlKDApO3c8Xy5sZW5ndGg7dysrKXt2YXIgUz1fW3ddO2lmKG51bGw9PUM/dm9pZCAwOkMudGVzdChTKSlpZihmKFMpLEw9aVtTXSlpZihsaShnPXQucGF0dGVyblByb3BlcnRpZXNbeV0pKWlmKGcpbi5wcm9wZXJ0aWVzTWF0Y2hlcysrLG4ucHJvcGVydGllc1ZhbHVlTWF0Y2hlcysrO2Vsc2V7cD1MLnBhcmVudDtuLnByb2JsZW1zLnB1c2goe2xvY2F0aW9uOntvZmZzZXQ6cC5rZXlOb2RlLm9mZnNldCxsZW5ndGg6cC5rZXlOb2RlLmxlbmd0aH0sbWVzc2FnZTp0LmVycm9yTWVzc2FnZXx8SW8oIkRpc2FsbG93ZWRFeHRyYVByb3BXYXJuaW5nIiwiUHJvcGVydHkgezB9IGlzIG5vdCBhbGxvd2VkLiIsUyl9KX1lbHNlIFhvKEwsZyx4PW5ldyBXbyxyKSxuLm1lcmdlUHJvcGVydHlNYXRjaCh4KX1pZigib2JqZWN0Ij09dHlwZW9mIHQuYWRkaXRpb25hbFByb3BlcnRpZXMpZm9yKHZhciBBPTAsRT1vO0E8RS5sZW5ndGg7QSsrKXtpZihMPWlbUz1FW0FdXSl7dmFyIHg9bmV3IFdvO1hvKEwsdC5hZGRpdGlvbmFsUHJvcGVydGllcyx4LHIpLG4ubWVyZ2VQcm9wZXJ0eU1hdGNoKHgpfX1lbHNlIGlmKCExPT09dC5hZGRpdGlvbmFsUHJvcGVydGllcyYmby5sZW5ndGg+MClmb3IodmFyIE49MCxrPW87TjxrLmxlbmd0aDtOKyspe3ZhciBMO2lmKEw9aVtTPWtbTl1dKXtwPUwucGFyZW50O24ucHJvYmxlbXMucHVzaCh7bG9jYXRpb246e29mZnNldDpwLmtleU5vZGUub2Zmc2V0LGxlbmd0aDpwLmtleU5vZGUubGVuZ3RofSxtZXNzYWdlOnQuZXJyb3JNZXNzYWdlfHxJbygiRGlzYWxsb3dlZEV4dHJhUHJvcFdhcm5pbmciLCJQcm9wZXJ0eSB7MH0gaXMgbm90IGFsbG93ZWQuIixTKX0pfX1zaSh0Lm1heFByb3BlcnRpZXMpJiZlLnByb3BlcnRpZXMubGVuZ3RoPnQubWF4UHJvcGVydGllcyYmbi5wcm9ibGVtcy5wdXNoKHtsb2NhdGlvbjp7b2Zmc2V0OmUub2Zmc2V0LGxlbmd0aDplLmxlbmd0aH0sbWVzc2FnZTpJbygiTWF4UHJvcFdhcm5pbmciLCJPYmplY3QgaGFzIG1vcmUgcHJvcGVydGllcyB0aGFuIGxpbWl0IG9mIHswfS4iLHQubWF4UHJvcGVydGllcyl9KTtzaSh0Lm1pblByb3BlcnRpZXMpJiZlLnByb3BlcnRpZXMubGVuZ3RoPHQubWluUHJvcGVydGllcyYmbi5wcm9ibGVtcy5wdXNoKHtsb2NhdGlvbjp7b2Zmc2V0OmUub2Zmc2V0LGxlbmd0aDplLmxlbmd0aH0sbWVzc2FnZTpJbygiTWluUHJvcFdhcm5pbmciLCJPYmplY3QgaGFzIGZld2VyIHByb3BlcnRpZXMgdGhhbiB0aGUgcmVxdWlyZWQgbnVtYmVyIG9mIHswfSIsdC5taW5Qcm9wZXJ0aWVzKX0pO2lmKHQuZGVwZW5kZW5jaWVzKWZvcih2YXIgVD0wLE89T2JqZWN0LmtleXModC5kZXBlbmRlbmNpZXMpO1Q8Ty5sZW5ndGg7VCsrKXtpZihpW0s9T1tUXV0pe3ZhciBJPXQuZGVwZW5kZW5jaWVzW0tdO2lmKEFycmF5LmlzQXJyYXkoSSkpZm9yKHZhciBNPTAsUD1JO008UC5sZW5ndGg7TSsrKXt2YXIgUj1QW01dO2lbUl0/bi5wcm9wZXJ0aWVzVmFsdWVNYXRjaGVzKys6bi5wcm9ibGVtcy5wdXNoKHtsb2NhdGlvbjp7b2Zmc2V0OmUub2Zmc2V0LGxlbmd0aDplLmxlbmd0aH0sbWVzc2FnZTpJbygiUmVxdWlyZWREZXBlbmRlbnRQcm9wV2FybmluZyIsIk9iamVjdCBpcyBtaXNzaW5nIHByb3BlcnR5IHswfSByZXF1aXJlZCBieSBwcm9wZXJ0eSB7MX0uIixSLEspfSl9ZWxzZSBpZihnPUJvKEkpKVhvKGUsZyx4PW5ldyBXbyxyKSxuLm1lcmdlUHJvcGVydHlNYXRjaCh4KX19dmFyIFY9Qm8odC5wcm9wZXJ0eU5hbWVzKTtpZihWKWZvcih2YXIgRj0wLEQ9ZS5wcm9wZXJ0aWVzO0Y8RC5sZW5ndGg7RisrKXt2YXIgSzsoSz1EW0ZdLmtleU5vZGUpJiZYbyhLLFYsbiwkby5pbnN0YW5jZSl9fShpLHQsbixyKTticmVhaztjYXNlImFycmF5IjohZnVuY3Rpb24oZSx0LG4scil7aWYoQXJyYXkuaXNBcnJheSh0Lml0ZW1zKSl7Zm9yKHZhciBpPXQuaXRlbXMsbz0wO288aS5sZW5ndGg7bysrKXt2YXIgYT1CbyhpW29dKSxzPW5ldyBXbzsoZj1lLml0ZW1zW29dKT8oWG8oZixhLHMsciksbi5tZXJnZVByb3BlcnR5TWF0Y2gocykpOmUuaXRlbXMubGVuZ3RoPj1pLmxlbmd0aCYmbi5wcm9wZXJ0aWVzVmFsdWVNYXRjaGVzKyt9aWYoZS5pdGVtcy5sZW5ndGg+aS5sZW5ndGgpaWYoIm9iamVjdCI9PXR5cGVvZiB0LmFkZGl0aW9uYWxJdGVtcylmb3IodmFyIGM9aS5sZW5ndGg7YzxlLml0ZW1zLmxlbmd0aDtjKyspe3M9bmV3IFdvO1hvKGUuaXRlbXNbY10sdC5hZGRpdGlvbmFsSXRlbXMscyxyKSxuLm1lcmdlUHJvcGVydHlNYXRjaChzKX1lbHNlITE9PT10LmFkZGl0aW9uYWxJdGVtcyYmbi5wcm9ibGVtcy5wdXNoKHtsb2NhdGlvbjp7b2Zmc2V0OmUub2Zmc2V0LGxlbmd0aDplLmxlbmd0aH0sbWVzc2FnZTpJbygiYWRkaXRpb25hbEl0ZW1zV2FybmluZyIsIkFycmF5IGhhcyB0b28gbWFueSBpdGVtcyBhY2NvcmRpbmcgdG8gc2NoZW1hLiBFeHBlY3RlZCB7MH0gb3IgZmV3ZXIuIixpLmxlbmd0aCl9KX1lbHNle3ZhciBsPUJvKHQuaXRlbXMpO2lmKGwpZm9yKHZhciB1PTAsaD1lLml0ZW1zO3U8aC5sZW5ndGg7dSsrKXt2YXIgZjtYbyhmPWhbdV0sbCxzPW5ldyBXbyxyKSxuLm1lcmdlUHJvcGVydHlNYXRjaChzKX19dmFyIGQ9Qm8odC5jb250YWlucyk7aWYoZCl7ZS5pdGVtcy5zb21lKChmdW5jdGlvbihlKXt2YXIgdD1uZXcgV287cmV0dXJuIFhvKGUsZCx0LCRvLmluc3RhbmNlKSwhdC5oYXNQcm9ibGVtcygpfSkpfHxuLnByb2JsZW1zLnB1c2goe2xvY2F0aW9uOntvZmZzZXQ6ZS5vZmZzZXQsbGVuZ3RoOmUubGVuZ3RofSxtZXNzYWdlOnQuZXJyb3JNZXNzYWdlfHxJbygicmVxdWlyZWRJdGVtTWlzc2luZ1dhcm5pbmciLCJBcnJheSBkb2VzIG5vdCBjb250YWluIHJlcXVpcmVkIGl0ZW0uIil9KX1zaSh0Lm1pbkl0ZW1zKSYmZS5pdGVtcy5sZW5ndGg8dC5taW5JdGVtcyYmbi5wcm9ibGVtcy5wdXNoKHtsb2NhdGlvbjp7b2Zmc2V0OmUub2Zmc2V0LGxlbmd0aDplLmxlbmd0aH0sbWVzc2FnZTpJbygibWluSXRlbXNXYXJuaW5nIiwiQXJyYXkgaGFzIHRvbyBmZXcgaXRlbXMuIEV4cGVjdGVkIHswfSBvciBtb3JlLiIsdC5taW5JdGVtcyl9KTtzaSh0Lm1heEl0ZW1zKSYmZS5pdGVtcy5sZW5ndGg+dC5tYXhJdGVtcyYmbi5wcm9ibGVtcy5wdXNoKHtsb2NhdGlvbjp7b2Zmc2V0OmUub2Zmc2V0LGxlbmd0aDplLmxlbmd0aH0sbWVzc2FnZTpJbygibWF4SXRlbXNXYXJuaW5nIiwiQXJyYXkgaGFzIHRvbyBtYW55IGl0ZW1zLiBFeHBlY3RlZCB7MH0gb3IgZmV3ZXIuIix0Lm1heEl0ZW1zKX0pO2lmKCEwPT09dC51bmlxdWVJdGVtcyl7dmFyIG09SG8oZSk7bS5zb21lKChmdW5jdGlvbihlLHQpe3JldHVybiB0IT09bS5sYXN0SW5kZXhPZihlKX0pKSYmbi5wcm9ibGVtcy5wdXNoKHtsb2NhdGlvbjp7b2Zmc2V0OmUub2Zmc2V0LGxlbmd0aDplLmxlbmd0aH0sbWVzc2FnZTpJbygidW5pcXVlSXRlbXNXYXJuaW5nIiwiQXJyYXkgaGFzIGR1cGxpY2F0ZSBpdGVtcy4iKX0pfX0oaSx0LG4scik7YnJlYWs7Y2FzZSJzdHJpbmciOiFmdW5jdGlvbihlLHQsbixyKXtzaSh0Lm1pbkxlbmd0aCkmJmUudmFsdWUubGVuZ3RoPHQubWluTGVuZ3RoJiZuLnByb2JsZW1zLnB1c2goe2xvY2F0aW9uOntvZmZzZXQ6ZS5vZmZzZXQsbGVuZ3RoOmUubGVuZ3RofSxtZXNzYWdlOklvKCJtaW5MZW5ndGhXYXJuaW5nIiwiU3RyaW5nIGlzIHNob3J0ZXIgdGhhbiB0aGUgbWluaW11bSBsZW5ndGggb2YgezB9LiIsdC5taW5MZW5ndGgpfSk7c2kodC5tYXhMZW5ndGgpJiZlLnZhbHVlLmxlbmd0aD50Lm1heExlbmd0aCYmbi5wcm9ibGVtcy5wdXNoKHtsb2NhdGlvbjp7b2Zmc2V0OmUub2Zmc2V0LGxlbmd0aDplLmxlbmd0aH0sbWVzc2FnZTpJbygibWF4TGVuZ3RoV2FybmluZyIsIlN0cmluZyBpcyBsb25nZXIgdGhhbiB0aGUgbWF4aW11bSBsZW5ndGggb2YgezB9LiIsdC5tYXhMZW5ndGgpfSk7aWYobz10LnBhdHRlcm4sInN0cmluZyI9PXR5cGVvZiBvKXt2YXIgaT1oaSh0LnBhdHRlcm4pOyhudWxsPT1pP3ZvaWQgMDppLnRlc3QoZS52YWx1ZSkpfHxuLnByb2JsZW1zLnB1c2goe2xvY2F0aW9uOntvZmZzZXQ6ZS5vZmZzZXQsbGVuZ3RoOmUubGVuZ3RofSxtZXNzYWdlOnQucGF0dGVybkVycm9yTWVzc2FnZXx8dC5lcnJvck1lc3NhZ2V8fElvKCJwYXR0ZXJuV2FybmluZyIsJ1N0cmluZyBkb2VzIG5vdCBtYXRjaCB0aGUgcGF0dGVybiBvZiAiezB9Ii4nLHQucGF0dGVybil9KX12YXIgbztpZih0LmZvcm1hdClzd2l0Y2godC5mb3JtYXQpe2Nhc2UidXJpIjpjYXNlInVyaS1yZWZlcmVuY2UiOnZhciBhPXZvaWQgMDtpZihlLnZhbHVlKXt2YXIgcz0vXigoW146Lz8jXSs/KTopPyhcL1wvKFteLz8jXSopKT8oW14/I10qKShcPyhbXiNdKikpPygjKC4qKSk/Ly5leGVjKGUudmFsdWUpO3M/c1syXXx8InVyaSIhPT10LmZvcm1hdHx8KGE9SW8oInVyaVNjaGVtZU1pc3NpbmciLCJVUkkgd2l0aCBhIHNjaGVtZSBpcyBleHBlY3RlZC4iKSk6YT1JbygidXJpTWlzc2luZyIsIlVSSSBpcyBleHBlY3RlZC4iKX1lbHNlIGE9SW8oInVyaUVtcHR5IiwiVVJJIGV4cGVjdGVkLiIpO2EmJm4ucHJvYmxlbXMucHVzaCh7bG9jYXRpb246e29mZnNldDplLm9mZnNldCxsZW5ndGg6ZS5sZW5ndGh9LG1lc3NhZ2U6dC5wYXR0ZXJuRXJyb3JNZXNzYWdlfHx0LmVycm9yTWVzc2FnZXx8SW8oInVyaUZvcm1hdFdhcm5pbmciLCJTdHJpbmcgaXMgbm90IGEgVVJJOiB7MH0iLGEpfSk7YnJlYWs7Y2FzZSJjb2xvci1oZXgiOmNhc2UiZGF0ZS10aW1lIjpjYXNlImRhdGUiOmNhc2UidGltZSI6Y2FzZSJlbWFpbCI6Y2FzZSJob3N0bmFtZSI6Y2FzZSJpcHY0IjpjYXNlImlwdjYiOnZhciBjPU1vW3QuZm9ybWF0XTtlLnZhbHVlJiZjLnBhdHRlcm4uZXhlYyhlLnZhbHVlKXx8bi5wcm9ibGVtcy5wdXNoKHtsb2NhdGlvbjp7b2Zmc2V0OmUub2Zmc2V0LGxlbmd0aDplLmxlbmd0aH0sbWVzc2FnZTp0LnBhdHRlcm5FcnJvck1lc3NhZ2V8fHQuZXJyb3JNZXNzYWdlfHxjLmVycm9yTWVzc2FnZX0pfX0oaSx0LG4pO2JyZWFrO2Nhc2UibnVtYmVyIjohZnVuY3Rpb24oZSx0LG4scil7dmFyIGk9ZS52YWx1ZTtmdW5jdGlvbiBvKGUpe3ZhciB0LG49L14oLT9cZCspKD86XC4oXGQrKSk/KD86ZShbLStdXGQrKSk/JC8uZXhlYyhlLnRvU3RyaW5nKCkpO3JldHVybiBuJiZ7dmFsdWU6TnVtYmVyKG5bMV0rKG5bMl18fCIiKSksbXVsdGlwbGllcjooKG51bGw9PT0odD1uWzJdKXx8dm9pZCAwPT09dD92b2lkIDA6dC5sZW5ndGgpfHwwKS0ocGFyc2VJbnQoblszXSl8fDApfX1pZihzaSh0Lm11bHRpcGxlT2YpKXt2YXIgYT0tMTtpZihOdW1iZXIuaXNJbnRlZ2VyKHQubXVsdGlwbGVPZikpYT1pJXQubXVsdGlwbGVPZjtlbHNle3ZhciBzPW8odC5tdWx0aXBsZU9mKSxjPW8oaSk7aWYocyYmYyl7dmFyIGw9TWF0aC5wb3coMTAsTWF0aC5hYnMoYy5tdWx0aXBsaWVyLXMubXVsdGlwbGllcikpO2MubXVsdGlwbGllcjxzLm11bHRpcGxpZXI/Yy52YWx1ZSo9bDpzLnZhbHVlKj1sLGE9Yy52YWx1ZSVzLnZhbHVlfX0wIT09YSYmbi5wcm9ibGVtcy5wdXNoKHtsb2NhdGlvbjp7b2Zmc2V0OmUub2Zmc2V0LGxlbmd0aDplLmxlbmd0aH0sbWVzc2FnZTpJbygibXVsdGlwbGVPZldhcm5pbmciLCJWYWx1ZSBpcyBub3QgZGl2aXNpYmxlIGJ5IHswfS4iLHQubXVsdGlwbGVPZil9KX1mdW5jdGlvbiB1KGUsdCl7cmV0dXJuIHNpKHQpP3Q6bGkodCkmJnQ/ZTp2b2lkIDB9ZnVuY3Rpb24gaChlLHQpe2lmKCFsaSh0KXx8IXQpcmV0dXJuIGV9dmFyIGY9dSh0Lm1pbmltdW0sdC5leGNsdXNpdmVNaW5pbXVtKTtzaShmKSYmaTw9ZiYmbi5wcm9ibGVtcy5wdXNoKHtsb2NhdGlvbjp7b2Zmc2V0OmUub2Zmc2V0LGxlbmd0aDplLmxlbmd0aH0sbWVzc2FnZTpJbygiZXhjbHVzaXZlTWluaW11bVdhcm5pbmciLCJWYWx1ZSBpcyBiZWxvdyB0aGUgZXhjbHVzaXZlIG1pbmltdW0gb2YgezB9LiIsZil9KTt2YXIgZD11KHQubWF4aW11bSx0LmV4Y2x1c2l2ZU1heGltdW0pO3NpKGQpJiZpPj1kJiZuLnByb2JsZW1zLnB1c2goe2xvY2F0aW9uOntvZmZzZXQ6ZS5vZmZzZXQsbGVuZ3RoOmUubGVuZ3RofSxtZXNzYWdlOklvKCJleGNsdXNpdmVNYXhpbXVtV2FybmluZyIsIlZhbHVlIGlzIGFib3ZlIHRoZSBleGNsdXNpdmUgbWF4aW11bSBvZiB7MH0uIixkKX0pO3ZhciBtPWgodC5taW5pbXVtLHQuZXhjbHVzaXZlTWluaW11bSk7c2kobSkmJmk8bSYmbi5wcm9ibGVtcy5wdXNoKHtsb2NhdGlvbjp7b2Zmc2V0OmUub2Zmc2V0LGxlbmd0aDplLmxlbmd0aH0sbWVzc2FnZTpJbygibWluaW11bVdhcm5pbmciLCJWYWx1ZSBpcyBiZWxvdyB0aGUgbWluaW11bSBvZiB7MH0uIixtKX0pO3ZhciBnPWgodC5tYXhpbXVtLHQuZXhjbHVzaXZlTWF4aW11bSk7c2koZykmJmk+ZyYmbi5wcm9ibGVtcy5wdXNoKHtsb2NhdGlvbjp7b2Zmc2V0OmUub2Zmc2V0LGxlbmd0aDplLmxlbmd0aH0sbWVzc2FnZTpJbygibWF4aW11bVdhcm5pbmciLCJWYWx1ZSBpcyBhYm92ZSB0aGUgbWF4aW11bSBvZiB7MH0uIixnKX0pfShpLHQsbik7YnJlYWs7Y2FzZSJwcm9wZXJ0eSI6cmV0dXJuIFhvKGkudmFsdWVOb2RlLHQsbixyKX0hZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUpe3JldHVybiBpLnR5cGU9PT1lfHwiaW50ZWdlciI9PT1lJiYibnVtYmVyIj09PWkudHlwZSYmaS5pc0ludGVnZXJ9QXJyYXkuaXNBcnJheSh0LnR5cGUpP3QudHlwZS5zb21lKGUpfHxuLnByb2JsZW1zLnB1c2goe2xvY2F0aW9uOntvZmZzZXQ6aS5vZmZzZXQsbGVuZ3RoOmkubGVuZ3RofSxtZXNzYWdlOnQuZXJyb3JNZXNzYWdlfHxJbygidHlwZUFycmF5TWlzbWF0Y2hXYXJuaW5nIiwiSW5jb3JyZWN0IHR5cGUuIEV4cGVjdGVkIG9uZSBvZiB7MH0uIix0LnR5cGUuam9pbigiLCAiKSl9KTp0LnR5cGUmJihlKHQudHlwZSl8fG4ucHJvYmxlbXMucHVzaCh7bG9jYXRpb246e29mZnNldDppLm9mZnNldCxsZW5ndGg6aS5sZW5ndGh9LG1lc3NhZ2U6dC5lcnJvck1lc3NhZ2V8fElvKCJ0eXBlTWlzbWF0Y2hXYXJuaW5nIiwnSW5jb3JyZWN0IHR5cGUuIEV4cGVjdGVkICJ7MH0iLicsdC50eXBlKX0pKTtpZihBcnJheS5pc0FycmF5KHQuYWxsT2YpKWZvcih2YXIgbz0wLGE9dC5hbGxPZjtvPGEubGVuZ3RoO28rKyl7dmFyIHM9YVtvXTtYbyhpLEJvKHMpLG4scil9dmFyIGM9Qm8odC5ub3QpO2lmKGMpe3ZhciBsPW5ldyBXbyx1PXIubmV3U3ViKCk7WG8oaSxjLGwsdSksbC5oYXNQcm9ibGVtcygpfHxuLnByb2JsZW1zLnB1c2goe2xvY2F0aW9uOntvZmZzZXQ6aS5vZmZzZXQsbGVuZ3RoOmkubGVuZ3RofSxtZXNzYWdlOklvKCJub3RTY2hlbWFXYXJuaW5nIiwiTWF0Y2hlcyBhIHNjaGVtYSB0aGF0IGlzIG5vdCBhbGxvd2VkLiIpfSk7Zm9yKHZhciBoPTAsZj11LnNjaGVtYXM7aDxmLmxlbmd0aDtoKyspe3ZhciBkPWZbaF07ZC5pbnZlcnRlZD0hZC5pbnZlcnRlZCxyLmFkZChkKX19dmFyIG09ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG89W10sYT12b2lkIDAscz0wLGM9ZTtzPGMubGVuZ3RoO3MrKyl7dmFyIGw9Qm8oY1tzXSksdT1uZXcgV28saD1yLm5ld1N1YigpO2lmKFhvKGksbCx1LGgpLHUuaGFzUHJvYmxlbXMoKXx8by5wdXNoKGwpLGEpaWYodHx8dS5oYXNQcm9ibGVtcygpfHxhLnZhbGlkYXRpb25SZXN1bHQuaGFzUHJvYmxlbXMoKSl7dmFyIGY9dS5jb21wYXJlKGEudmFsaWRhdGlvblJlc3VsdCk7Zj4wP2E9e3NjaGVtYTpsLHZhbGlkYXRpb25SZXN1bHQ6dSxtYXRjaGluZ1NjaGVtYXM6aH06MD09PWYmJihhLm1hdGNoaW5nU2NoZW1hcy5tZXJnZShoKSxhLnZhbGlkYXRpb25SZXN1bHQubWVyZ2VFbnVtVmFsdWVzKHUpKX1lbHNlIGEubWF0Y2hpbmdTY2hlbWFzLm1lcmdlKGgpLGEudmFsaWRhdGlvblJlc3VsdC5wcm9wZXJ0aWVzTWF0Y2hlcys9dS5wcm9wZXJ0aWVzTWF0Y2hlcyxhLnZhbGlkYXRpb25SZXN1bHQucHJvcGVydGllc1ZhbHVlTWF0Y2hlcys9dS5wcm9wZXJ0aWVzVmFsdWVNYXRjaGVzO2Vsc2UgYT17c2NoZW1hOmwsdmFsaWRhdGlvblJlc3VsdDp1LG1hdGNoaW5nU2NoZW1hczpofX1yZXR1cm4gby5sZW5ndGg+MSYmdCYmbi5wcm9ibGVtcy5wdXNoKHtsb2NhdGlvbjp7b2Zmc2V0Omkub2Zmc2V0LGxlbmd0aDoxfSxtZXNzYWdlOklvKCJvbmVPZldhcm5pbmciLCJNYXRjaGVzIG11bHRpcGxlIHNjaGVtYXMgd2hlbiBvbmx5IG9uZSBtdXN0IHZhbGlkYXRlLiIpfSksYSYmKG4ubWVyZ2UoYS52YWxpZGF0aW9uUmVzdWx0KSxuLnByb3BlcnRpZXNNYXRjaGVzKz1hLnZhbGlkYXRpb25SZXN1bHQucHJvcGVydGllc01hdGNoZXMsbi5wcm9wZXJ0aWVzVmFsdWVNYXRjaGVzKz1hLnZhbGlkYXRpb25SZXN1bHQucHJvcGVydGllc1ZhbHVlTWF0Y2hlcyxyLm1lcmdlKGEubWF0Y2hpbmdTY2hlbWFzKSksby5sZW5ndGh9O0FycmF5LmlzQXJyYXkodC5hbnlPZikmJm0odC5hbnlPZiwhMSk7QXJyYXkuaXNBcnJheSh0Lm9uZU9mKSYmbSh0Lm9uZU9mLCEwKTt2YXIgZz1mdW5jdGlvbihlKXt2YXIgdD1uZXcgV28sbz1yLm5ld1N1YigpO1hvKGksQm8oZSksdCxvKSxuLm1lcmdlKHQpLG4ucHJvcGVydGllc01hdGNoZXMrPXQucHJvcGVydGllc01hdGNoZXMsbi5wcm9wZXJ0aWVzVmFsdWVNYXRjaGVzKz10LnByb3BlcnRpZXNWYWx1ZU1hdGNoZXMsci5tZXJnZShvKX0scD1Cbyh0LmlmKTtwJiYoYj1wLHY9Qm8odC50aGVuKSx5PUJvKHQuZWxzZSksQz1CbyhiKSx3PW5ldyBXbyxfPXIubmV3U3ViKCksWG8oaSxDLHcsXyksci5tZXJnZShfKSx3Lmhhc1Byb2JsZW1zKCk/eSYmZyh5KTp2JiZnKHYpKTt2YXIgYix2LHksQyx3LF87aWYoQXJyYXkuaXNBcnJheSh0LmVudW0pKXtmb3IodmFyIFM9SG8oaSksQT0hMSxFPTAseD10LmVudW07RTx4Lmxlbmd0aDtFKyspe3ZhciBOPXhbRV07aWYoYWkoUyxOKSl7QT0hMDticmVha319bi5lbnVtVmFsdWVzPXQuZW51bSxuLmVudW1WYWx1ZU1hdGNoPUEsQXx8bi5wcm9ibGVtcy5wdXNoKHtsb2NhdGlvbjp7b2Zmc2V0Omkub2Zmc2V0LGxlbmd0aDppLmxlbmd0aH0sY29kZTp2by5FbnVtVmFsdWVNaXNtYXRjaCxtZXNzYWdlOnQuZXJyb3JNZXNzYWdlfHxJbygiZW51bVdhcm5pbmciLCJWYWx1ZSBpcyBub3QgYWNjZXB0ZWQuIFZhbGlkIHZhbHVlczogezB9LiIsdC5lbnVtLm1hcCgoZnVuY3Rpb24oZSl7cmV0dXJuIEpTT04uc3RyaW5naWZ5KGUpfSkpLmpvaW4oIiwgIikpfSl9aWYoY2kodC5jb25zdCkpe2FpKFM9SG8oaSksdC5jb25zdCk/bi5lbnVtVmFsdWVNYXRjaD0hMDoobi5wcm9ibGVtcy5wdXNoKHtsb2NhdGlvbjp7b2Zmc2V0Omkub2Zmc2V0LGxlbmd0aDppLmxlbmd0aH0sY29kZTp2by5FbnVtVmFsdWVNaXNtYXRjaCxtZXNzYWdlOnQuZXJyb3JNZXNzYWdlfHxJbygiY29uc3RXYXJuaW5nIiwiVmFsdWUgbXVzdCBiZSB7MH0uIixKU09OLnN0cmluZ2lmeSh0LmNvbnN0KSl9KSxuLmVudW1WYWx1ZU1hdGNoPSExKSxuLmVudW1WYWx1ZXM9W3QuY29uc3RdfXQuZGVwcmVjYXRpb25NZXNzYWdlJiZpLnBhcmVudCYmbi5wcm9ibGVtcy5wdXNoKHtsb2NhdGlvbjp7b2Zmc2V0OmkucGFyZW50Lm9mZnNldCxsZW5ndGg6aS5wYXJlbnQubGVuZ3RofSxzZXZlcml0eTpUci5XYXJuaW5nLG1lc3NhZ2U6dC5kZXByZWNhdGlvbk1lc3NhZ2UsY29kZTp2by5EZXByZWNhdGVkfSl9KCksci5hZGQoe25vZGU6aSxzY2hlbWE6dH0pfX1mdW5jdGlvbiBabyhlLHQpe3ZhciBuPVtdLHI9LTEsaT1lLmdldFRleHQoKSxvPXRpKGksITEpLGE9dCYmdC5jb2xsZWN0Q29tbWVudHM/W106dm9pZCAwO2Z1bmN0aW9uIHMoKXtmb3IoOzspe3ZhciB0PW8uc2NhbigpO3N3aXRjaCh1KCksdCl7Y2FzZSAxMjpjYXNlIDEzOkFycmF5LmlzQXJyYXkoYSkmJmEucHVzaChmci5jcmVhdGUoZS5wb3NpdGlvbkF0KG8uZ2V0VG9rZW5PZmZzZXQoKSksZS5wb3NpdGlvbkF0KG8uZ2V0VG9rZW5PZmZzZXQoKStvLmdldFRva2VuTGVuZ3RoKCkpKSk7YnJlYWs7Y2FzZSAxNTpjYXNlIDE0OmJyZWFrO2RlZmF1bHQ6cmV0dXJuIHR9fX1mdW5jdGlvbiBjKHQsaSxvLGEscyl7aWYodm9pZCAwPT09cyYmKHM9VHIuRXJyb3IpLDA9PT1uLmxlbmd0aHx8byE9PXIpe3ZhciBjPWZyLmNyZWF0ZShlLnBvc2l0aW9uQXQobyksZS5wb3NpdGlvbkF0KGEpKTtuLnB1c2goUnIuY3JlYXRlKGMsdCxzLGksZS5sYW5ndWFnZUlkKSkscj1vfX1mdW5jdGlvbiBsKGUsdCxuLHIsYSl7dm9pZCAwPT09biYmKG49dm9pZCAwKSx2b2lkIDA9PT1yJiYocj1bXSksdm9pZCAwPT09YSYmKGE9W10pO3ZhciBsPW8uZ2V0VG9rZW5PZmZzZXQoKSx1PW8uZ2V0VG9rZW5PZmZzZXQoKStvLmdldFRva2VuTGVuZ3RoKCk7aWYobD09PXUmJmw+MCl7Zm9yKGwtLTtsPjAmJi9ccy8udGVzdChpLmNoYXJBdChsKSk7KWwtLTt1PWwrMX1pZihjKGUsdCxsLHUpLG4mJmgobiwhMSksci5sZW5ndGgrYS5sZW5ndGg+MClmb3IodmFyIGY9by5nZXRUb2tlbigpOzE3IT09Zjspe2lmKC0xIT09ci5pbmRleE9mKGYpKXtzKCk7YnJlYWt9aWYoLTEhPT1hLmluZGV4T2YoZikpYnJlYWs7Zj1zKCl9cmV0dXJuIG59ZnVuY3Rpb24gdSgpe3N3aXRjaChvLmdldFRva2VuRXJyb3IoKSl7Y2FzZSA0OnJldHVybiBsKElvKCJJbnZhbGlkVW5pY29kZSIsIkludmFsaWQgdW5pY29kZSBzZXF1ZW5jZSBpbiBzdHJpbmcuIiksdm8uSW52YWxpZFVuaWNvZGUpLCEwO2Nhc2UgNTpyZXR1cm4gbChJbygiSW52YWxpZEVzY2FwZUNoYXJhY3RlciIsIkludmFsaWQgZXNjYXBlIGNoYXJhY3RlciBpbiBzdHJpbmcuIiksdm8uSW52YWxpZEVzY2FwZUNoYXJhY3RlciksITA7Y2FzZSAzOnJldHVybiBsKElvKCJVbmV4cGVjdGVkRW5kT2ZOdW1iZXIiLCJVbmV4cGVjdGVkIGVuZCBvZiBudW1iZXIuIiksdm8uVW5leHBlY3RlZEVuZE9mTnVtYmVyKSwhMDtjYXNlIDE6cmV0dXJuIGwoSW8oIlVuZXhwZWN0ZWRFbmRPZkNvbW1lbnQiLCJVbmV4cGVjdGVkIGVuZCBvZiBjb21tZW50LiIpLHZvLlVuZXhwZWN0ZWRFbmRPZkNvbW1lbnQpLCEwO2Nhc2UgMjpyZXR1cm4gbChJbygiVW5leHBlY3RlZEVuZE9mU3RyaW5nIiwiVW5leHBlY3RlZCBlbmQgb2Ygc3RyaW5nLiIpLHZvLlVuZXhwZWN0ZWRFbmRPZlN0cmluZyksITA7Y2FzZSA2OnJldHVybiBsKElvKCJJbnZhbGlkQ2hhcmFjdGVyIiwiSW52YWxpZCBjaGFyYWN0ZXJzIGluIHN0cmluZy4gQ29udHJvbCBjaGFyYWN0ZXJzIG11c3QgYmUgZXNjYXBlZC4iKSx2by5JbnZhbGlkQ2hhcmFjdGVyKSwhMH1yZXR1cm4hMX1mdW5jdGlvbiBoKGUsdCl7cmV0dXJuIGUubGVuZ3RoPW8uZ2V0VG9rZW5PZmZzZXQoKStvLmdldFRva2VuTGVuZ3RoKCktZS5vZmZzZXQsdCYmcygpLGV9dmFyIGY9bmV3IEtvKHZvaWQgMCwwLDApO2Z1bmN0aW9uIGQodCxuKXt2YXIgcj1uZXcgam8odCxvLmdldFRva2VuT2Zmc2V0KCksZiksaT1tKHIpO2lmKCFpKXtpZigxNiE9PW8uZ2V0VG9rZW4oKSlyZXR1cm47bChJbygiRG91YmxlUXVvdGVzRXhwZWN0ZWQiLCJQcm9wZXJ0eSBrZXlzIG11c3QgYmUgZG91YmxlcXVvdGVkIiksdm8uVW5kZWZpbmVkKTt2YXIgYT1uZXcgS28ocixvLmdldFRva2VuT2Zmc2V0KCksby5nZXRUb2tlbkxlbmd0aCgpKTthLnZhbHVlPW8uZ2V0VG9rZW5WYWx1ZSgpLGk9YSxzKCl9ci5rZXlOb2RlPWk7dmFyIHU9bltpLnZhbHVlXTtpZih1PyhjKElvKCJEdXBsaWNhdGVLZXlXYXJuaW5nIiwiRHVwbGljYXRlIG9iamVjdCBrZXkiKSx2by5EdXBsaWNhdGVLZXksci5rZXlOb2RlLm9mZnNldCxyLmtleU5vZGUub2Zmc2V0K3Iua2V5Tm9kZS5sZW5ndGgsVHIuV2FybmluZyksIm9iamVjdCI9PXR5cGVvZiB1JiZjKElvKCJEdXBsaWNhdGVLZXlXYXJuaW5nIiwiRHVwbGljYXRlIG9iamVjdCBrZXkiKSx2by5EdXBsaWNhdGVLZXksdS5rZXlOb2RlLm9mZnNldCx1LmtleU5vZGUub2Zmc2V0K3Uua2V5Tm9kZS5sZW5ndGgsVHIuV2FybmluZyksbltpLnZhbHVlXT0hMCk6bltpLnZhbHVlXT1yLDY9PT1vLmdldFRva2VuKCkpci5jb2xvbk9mZnNldD1vLmdldFRva2VuT2Zmc2V0KCkscygpO2Vsc2UgaWYobChJbygiQ29sb25FeHBlY3RlZCIsIkNvbG9uIGV4cGVjdGVkIiksdm8uQ29sb25FeHBlY3RlZCksMTA9PT1vLmdldFRva2VuKCkmJmUucG9zaXRpb25BdChpLm9mZnNldCtpLmxlbmd0aCkubGluZTxlLnBvc2l0aW9uQXQoby5nZXRUb2tlbk9mZnNldCgpKS5saW5lKXJldHVybiByLmxlbmd0aD1pLmxlbmd0aCxyO3ZhciBoPWcocik7cmV0dXJuIGg/KHIudmFsdWVOb2RlPWgsci5sZW5ndGg9aC5vZmZzZXQraC5sZW5ndGgtci5vZmZzZXQscik6bChJbygiVmFsdWVFeHBlY3RlZCIsIlZhbHVlIGV4cGVjdGVkIiksdm8uVmFsdWVFeHBlY3RlZCxyLFtdLFsyLDVdKX1mdW5jdGlvbiBtKGUpe2lmKDEwPT09by5nZXRUb2tlbigpKXt2YXIgdD1uZXcgS28oZSxvLmdldFRva2VuT2Zmc2V0KCkpO3JldHVybiB0LnZhbHVlPW8uZ2V0VG9rZW5WYWx1ZSgpLGgodCwhMCl9fWZ1bmN0aW9uIGcoZSl7cmV0dXJuIGZ1bmN0aW9uKGUpe2lmKDM9PT1vLmdldFRva2VuKCkpe3ZhciB0PW5ldyBGbyhlLG8uZ2V0VG9rZW5PZmZzZXQoKSk7cygpO2Zvcih2YXIgbj0hMTs0IT09by5nZXRUb2tlbigpJiYxNyE9PW8uZ2V0VG9rZW4oKTspe2lmKDU9PT1vLmdldFRva2VuKCkpe258fGwoSW8oIlZhbHVlRXhwZWN0ZWQiLCJWYWx1ZSBleHBlY3RlZCIpLHZvLlZhbHVlRXhwZWN0ZWQpO3ZhciByPW8uZ2V0VG9rZW5PZmZzZXQoKTtpZihzKCksND09PW8uZ2V0VG9rZW4oKSl7biYmYyhJbygiVHJhaWxpbmdDb21tYSIsIlRyYWlsaW5nIGNvbW1hIiksdm8uVHJhaWxpbmdDb21tYSxyLHIrMSk7Y29udGludWV9fWVsc2UgbiYmbChJbygiRXhwZWN0ZWRDb21tYSIsIkV4cGVjdGVkIGNvbW1hIiksdm8uQ29tbWFFeHBlY3RlZCk7dmFyIGk9Zyh0KTtpP3QuaXRlbXMucHVzaChpKTpsKElvKCJQcm9wZXJ0eUV4cGVjdGVkIiwiVmFsdWUgZXhwZWN0ZWQiKSx2by5WYWx1ZUV4cGVjdGVkLHZvaWQgMCxbXSxbNCw1XSksbj0hMH1yZXR1cm4gNCE9PW8uZ2V0VG9rZW4oKT9sKElvKCJFeHBlY3RlZENsb3NlQnJhY2tldCIsIkV4cGVjdGVkIGNvbW1hIG9yIGNsb3NpbmcgYnJhY2tldCIpLHZvLkNvbW1hT3JDbG9zZUJhY2tldEV4cGVjdGVkLHQpOmgodCwhMCl9fShlKXx8ZnVuY3Rpb24oZSl7aWYoMT09PW8uZ2V0VG9rZW4oKSl7dmFyIHQ9bmV3IFVvKGUsby5nZXRUb2tlbk9mZnNldCgpKSxuPU9iamVjdC5jcmVhdGUobnVsbCk7cygpO2Zvcih2YXIgcj0hMTsyIT09by5nZXRUb2tlbigpJiYxNyE9PW8uZ2V0VG9rZW4oKTspe2lmKDU9PT1vLmdldFRva2VuKCkpe3J8fGwoSW8oIlByb3BlcnR5RXhwZWN0ZWQiLCJQcm9wZXJ0eSBleHBlY3RlZCIpLHZvLlByb3BlcnR5RXhwZWN0ZWQpO3ZhciBpPW8uZ2V0VG9rZW5PZmZzZXQoKTtpZihzKCksMj09PW8uZ2V0VG9rZW4oKSl7ciYmYyhJbygiVHJhaWxpbmdDb21tYSIsIlRyYWlsaW5nIGNvbW1hIiksdm8uVHJhaWxpbmdDb21tYSxpLGkrMSk7Y29udGludWV9fWVsc2UgciYmbChJbygiRXhwZWN0ZWRDb21tYSIsIkV4cGVjdGVkIGNvbW1hIiksdm8uQ29tbWFFeHBlY3RlZCk7dmFyIGE9ZCh0LG4pO2E/dC5wcm9wZXJ0aWVzLnB1c2goYSk6bChJbygiUHJvcGVydHlFeHBlY3RlZCIsIlByb3BlcnR5IGV4cGVjdGVkIiksdm8uUHJvcGVydHlFeHBlY3RlZCx2b2lkIDAsW10sWzIsNV0pLHI9ITB9cmV0dXJuIDIhPT1vLmdldFRva2VuKCk/bChJbygiRXhwZWN0ZWRDbG9zZUJyYWNlIiwiRXhwZWN0ZWQgY29tbWEgb3IgY2xvc2luZyBicmFjZSIpLHZvLkNvbW1hT3JDbG9zZUJyYWNlRXhwZWN0ZWQsdCk6aCh0LCEwKX19KGUpfHxtKGUpfHxmdW5jdGlvbihlKXtpZigxMT09PW8uZ2V0VG9rZW4oKSl7dmFyIHQ9bmV3IERvKGUsby5nZXRUb2tlbk9mZnNldCgpKTtpZigwPT09by5nZXRUb2tlbkVycm9yKCkpe3ZhciBuPW8uZ2V0VG9rZW5WYWx1ZSgpO3RyeXt2YXIgcj1KU09OLnBhcnNlKG4pO2lmKCFzaShyKSlyZXR1cm4gbChJbygiSW52YWxpZE51bWJlckZvcm1hdCIsIkludmFsaWQgbnVtYmVyIGZvcm1hdC4iKSx2by5VbmRlZmluZWQsdCk7dC52YWx1ZT1yfWNhdGNoKGUpe3JldHVybiBsKElvKCJJbnZhbGlkTnVtYmVyRm9ybWF0IiwiSW52YWxpZCBudW1iZXIgZm9ybWF0LiIpLHZvLlVuZGVmaW5lZCx0KX10LmlzSW50ZWdlcj0tMT09PW4uaW5kZXhPZigiLiIpfXJldHVybiBoKHQsITApfX0oZSl8fGZ1bmN0aW9uKGUpe3N3aXRjaChvLmdldFRva2VuKCkpe2Nhc2UgNzpyZXR1cm4gaChuZXcgUm8oZSxvLmdldFRva2VuT2Zmc2V0KCkpLCEwKTtjYXNlIDg6cmV0dXJuIGgobmV3IFZvKGUsITAsby5nZXRUb2tlbk9mZnNldCgpKSwhMCk7Y2FzZSA5OnJldHVybiBoKG5ldyBWbyhlLCExLG8uZ2V0VG9rZW5PZmZzZXQoKSksITApO2RlZmF1bHQ6cmV0dXJufX0oZSl9dmFyIHA9dm9pZCAwO3JldHVybiAxNyE9PXMoKSYmKChwPWcocCkpPzE3IT09by5nZXRUb2tlbigpJiZsKElvKCJFbmQgb2YgZmlsZSBleHBlY3RlZCIsIkVuZCBvZiBmaWxlIGV4cGVjdGVkLiIpLHZvLlVuZGVmaW5lZCk6bChJbygiSW52YWxpZCBzeW1ib2wiLCJFeHBlY3RlZCBhIEpTT04gb2JqZWN0LCBhcnJheSBvciBsaXRlcmFsLiIpLHZvLlVuZGVmaW5lZCkpLG5ldyBKbyhwLG4sYSl9ZnVuY3Rpb24gWW8oZSx0LG4pe2lmKG51bGwhPT1lJiYib2JqZWN0Ij09dHlwZW9mIGUpe3ZhciByPXQrIlx0IjtpZihBcnJheS5pc0FycmF5KGUpKXtpZigwPT09ZS5sZW5ndGgpcmV0dXJuIltdIjtmb3IodmFyIGk9IltcbiIsbz0wO288ZS5sZW5ndGg7bysrKWkrPXIrWW8oZVtvXSxyLG4pLG88ZS5sZW5ndGgtMSYmKGkrPSIsIiksaSs9IlxuIjtyZXR1cm4gaSs9dCsiXSJ9dmFyIGE9T2JqZWN0LmtleXMoZSk7aWYoMD09PWEubGVuZ3RoKXJldHVybiJ7fSI7Zm9yKGk9IntcbiIsbz0wO288YS5sZW5ndGg7bysrKXt2YXIgcz1hW29dO2krPXIrSlNPTi5zdHJpbmdpZnkocykrIjogIitZbyhlW3NdLHIsbiksbzxhLmxlbmd0aC0xJiYoaSs9IiwiKSxpKz0iXG4ifXJldHVybiBpKz10KyJ9In1yZXR1cm4gbihlKX12YXIgUW89Tm8oKSxlYT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSx0LG4scil7dm9pZCAwPT09dCYmKHQ9W10pLHZvaWQgMD09PW4mJihuPVByb21pc2UpLHZvaWQgMD09PXImJihyPXt9KSx0aGlzLnNjaGVtYVNlcnZpY2U9ZSx0aGlzLmNvbnRyaWJ1dGlvbnM9dCx0aGlzLnByb21pc2VDb25zdHJ1Y3Rvcj1uLHRoaXMuY2xpZW50Q2FwYWJpbGl0aWVzPXJ9cmV0dXJuIGUucHJvdG90eXBlLmRvUmVzb2x2ZT1mdW5jdGlvbihlKXtmb3IodmFyIHQ9dGhpcy5jb250cmlidXRpb25zLmxlbmd0aC0xO3Q+PTA7dC0tKXt2YXIgbj10aGlzLmNvbnRyaWJ1dGlvbnNbdF0ucmVzb2x2ZUNvbXBsZXRpb247aWYobil7dmFyIHI9bihlKTtpZihyKXJldHVybiByfX1yZXR1cm4gdGhpcy5wcm9taXNlQ29uc3RydWN0b3IucmVzb2x2ZShlKX0sZS5wcm90b3R5cGUuZG9Db21wbGV0ZT1mdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyxpPXtpdGVtczpbXSxpc0luY29tcGxldGU6ITF9LG89ZS5nZXRUZXh0KCksYT1lLm9mZnNldEF0KHQpLHM9bi5nZXROb2RlRnJvbU9mZnNldChhLCEwKTtpZih0aGlzLmlzSW5Db21tZW50KGUscz9zLm9mZnNldDowLGEpKXJldHVybiBQcm9taXNlLnJlc29sdmUoaSk7aWYocyYmYT09PXMub2Zmc2V0K3MubGVuZ3RoJiZhPjApe3ZhciBjPW9bYS0xXTsoIm9iamVjdCI9PT1zLnR5cGUmJiJ9Ij09PWN8fCJhcnJheSI9PT1zLnR5cGUmJiJdIj09PWMpJiYocz1zLnBhcmVudCl9dmFyIGwsdT10aGlzLmdldEN1cnJlbnRXb3JkKGUsYSk7aWYoIXN8fCJzdHJpbmciIT09cy50eXBlJiYibnVtYmVyIiE9PXMudHlwZSYmImJvb2xlYW4iIT09cy50eXBlJiYibnVsbCIhPT1zLnR5cGUpe3ZhciBoPWEtdS5sZW5ndGg7aD4wJiYnIic9PT1vW2gtMV0mJmgtLSxsPWZyLmNyZWF0ZShlLnBvc2l0aW9uQXQoaCksdCl9ZWxzZSBsPWZyLmNyZWF0ZShlLnBvc2l0aW9uQXQocy5vZmZzZXQpLGUucG9zaXRpb25BdChzLm9mZnNldCtzLmxlbmd0aCkpO3ZhciBmPXt9LGQ9e2FkZDpmdW5jdGlvbihlKXt2YXIgdD1lLmxhYmVsLG49Zlt0XTtpZihuKW4uZG9jdW1lbnRhdGlvbnx8KG4uZG9jdW1lbnRhdGlvbj1lLmRvY3VtZW50YXRpb24pLG4uZGV0YWlsfHwobi5kZXRhaWw9ZS5kZXRhaWwpO2Vsc2V7aWYoKHQ9dC5yZXBsYWNlKC9bXG5dL2csIuKGtSIpKS5sZW5ndGg+NjApe3ZhciByPXQuc3Vic3RyKDAsNTcpLnRyaW0oKSsiLi4uIjtmW3JdfHwodD1yKX1sJiZ2b2lkIDAhPT1lLmluc2VydFRleHQmJihlLnRleHRFZGl0PUtyLnJlcGxhY2UobCxlLmluc2VydFRleHQpKSxlLmxhYmVsPXQsZlt0XT1lLGkuaXRlbXMucHVzaChlKX19LHNldEFzSW5jb21wbGV0ZTpmdW5jdGlvbigpe2kuaXNJbmNvbXBsZXRlPSEwfSxlcnJvcjpmdW5jdGlvbihlKXtjb25zb2xlLmVycm9yKGUpfSxsb2c6ZnVuY3Rpb24oZSl7Y29uc29sZS5sb2coZSl9LGdldE51bWJlck9mUHJvcG9zYWxzOmZ1bmN0aW9uKCl7cmV0dXJuIGkuaXRlbXMubGVuZ3RofX07cmV0dXJuIHRoaXMuc2NoZW1hU2VydmljZS5nZXRTY2hlbWFGb3JSZXNvdXJjZShlLnVyaSxuKS50aGVuKChmdW5jdGlvbih0KXt2YXIgYz1bXSxoPSEwLG09IiIsZz12b2lkIDA7aWYocyYmInN0cmluZyI9PT1zLnR5cGUpe3ZhciBwPXMucGFyZW50O3AmJiJwcm9wZXJ0eSI9PT1wLnR5cGUmJnAua2V5Tm9kZT09PXMmJihoPSFwLnZhbHVlTm9kZSxnPXAsbT1vLnN1YnN0cihzLm9mZnNldCsxLHMubGVuZ3RoLTIpLHAmJihzPXAucGFyZW50KSl9aWYocyYmIm9iamVjdCI9PT1zLnR5cGUpe2lmKHMub2Zmc2V0PT09YSlyZXR1cm4gaTtzLnByb3BlcnRpZXMuZm9yRWFjaCgoZnVuY3Rpb24oZSl7ZyYmZz09PWV8fChmW2Uua2V5Tm9kZS52YWx1ZV09SWkuY3JlYXRlKCJfXyIpKX0pKTt2YXIgYj0iIjtoJiYoYj1yLmV2YWx1YXRlU2VwYXJhdG9yQWZ0ZXIoZSxlLm9mZnNldEF0KGwuZW5kKSkpLHQ/ci5nZXRQcm9wZXJ0eUNvbXBsZXRpb25zKHQsbixzLGgsYixkKTpyLmdldFNjaGVtYUxlc3NQcm9wZXJ0eUNvbXBsZXRpb25zKG4scyxtLGQpO3ZhciB2PXpvKHMpO3IuY29udHJpYnV0aW9ucy5mb3JFYWNoKChmdW5jdGlvbih0KXt2YXIgbj10LmNvbGxlY3RQcm9wZXJ0eUNvbXBsZXRpb25zKGUudXJpLHYsdSxoLCIiPT09YixkKTtuJiZjLnB1c2gobil9KSksIXQmJnUubGVuZ3RoPjAmJiciJyE9PW8uY2hhckF0KGEtdS5sZW5ndGgtMSkmJihkLmFkZCh7a2luZDpTaS5Qcm9wZXJ0eSxsYWJlbDpyLmdldExhYmVsRm9yVmFsdWUodSksaW5zZXJ0VGV4dDpyLmdldEluc2VydFRleHRGb3JQcm9wZXJ0eSh1LHZvaWQgMCwhMSxiKSxpbnNlcnRUZXh0Rm9ybWF0OkVpLlNuaXBwZXQsZG9jdW1lbnRhdGlvbjoiIn0pLGQuc2V0QXNJbmNvbXBsZXRlKCkpfXZhciB5PXt9O3JldHVybiB0P3IuZ2V0VmFsdWVDb21wbGV0aW9ucyh0LG4scyxhLGUsZCx5KTpyLmdldFNjaGVtYUxlc3NWYWx1ZUNvbXBsZXRpb25zKG4scyxhLGUsZCksci5jb250cmlidXRpb25zLmxlbmd0aD4wJiZyLmdldENvbnRyaWJ1dGVkVmFsdWVDb21wbGV0aW9ucyhuLHMsYSxlLGQsYyksci5wcm9taXNlQ29uc3RydWN0b3IuYWxsKGMpLnRoZW4oKGZ1bmN0aW9uKCl7aWYoMD09PWQuZ2V0TnVtYmVyT2ZQcm9wb3NhbHMoKSl7dmFyIHQ9YTshc3x8InN0cmluZyIhPT1zLnR5cGUmJiJudW1iZXIiIT09cy50eXBlJiYiYm9vbGVhbiIhPT1zLnR5cGUmJiJudWxsIiE9PXMudHlwZXx8KHQ9cy5vZmZzZXQrcy5sZW5ndGgpO3ZhciBuPXIuZXZhbHVhdGVTZXBhcmF0b3JBZnRlcihlLHQpO3IuYWRkRmlsbGVyVmFsdWVDb21wbGV0aW9ucyh5LG4sZCl9cmV0dXJuIGl9KSl9KSl9LGUucHJvdG90eXBlLmdldFByb3BlcnR5Q29tcGxldGlvbnM9ZnVuY3Rpb24oZSx0LG4scixpLG8pe3ZhciBhPXRoaXM7dC5nZXRNYXRjaGluZ1NjaGVtYXMoZS5zY2hlbWEsbi5vZmZzZXQpLmZvckVhY2goKGZ1bmN0aW9uKGUpe2lmKGUubm9kZT09PW4mJiFlLmludmVydGVkKXt2YXIgdD1lLnNjaGVtYS5wcm9wZXJ0aWVzO3QmJk9iamVjdC5rZXlzKHQpLmZvckVhY2goKGZ1bmN0aW9uKGUpe3ZhciBuPXRbZV07aWYoIm9iamVjdCI9PXR5cGVvZiBuJiYhbi5kZXByZWNhdGlvbk1lc3NhZ2UmJiFuLmRvTm90U3VnZ2VzdCl7dmFyIHM9e2tpbmQ6U2kuUHJvcGVydHksbGFiZWw6ZSxpbnNlcnRUZXh0OmEuZ2V0SW5zZXJ0VGV4dEZvclByb3BlcnR5KGUsbixyLGkpLGluc2VydFRleHRGb3JtYXQ6RWkuU25pcHBldCxmaWx0ZXJUZXh0OmEuZ2V0RmlsdGVyVGV4dEZvclZhbHVlKGUpLGRvY3VtZW50YXRpb246YS5mcm9tTWFya3VwKG4ubWFya2Rvd25EZXNjcmlwdGlvbil8fG4uZGVzY3JpcHRpb258fCIifTt2b2lkIDAhPT1uLnN1Z2dlc3RTb3J0VGV4dCYmKHMuc29ydFRleHQ9bi5zdWdnZXN0U29ydFRleHQpLHMuaW5zZXJ0VGV4dCYmdWkocy5pbnNlcnRUZXh0LCIkMSIuY29uY2F0KGkpKSYmKHMuY29tbWFuZD17dGl0bGU6IlN1Z2dlc3QiLGNvbW1hbmQ6ImVkaXRvci5hY3Rpb24udHJpZ2dlclN1Z2dlc3QifSksby5hZGQocyl9fSkpO3ZhciBzPWUuc2NoZW1hLnByb3BlcnR5TmFtZXM7aWYoIm9iamVjdCI9PXR5cGVvZiBzJiYhcy5kZXByZWNhdGlvbk1lc3NhZ2UmJiFzLmRvTm90U3VnZ2VzdCl7dmFyIGM9ZnVuY3Rpb24oZSx0KXt2b2lkIDA9PT10JiYodD12b2lkIDApO3ZhciBuPXtraW5kOlNpLlByb3BlcnR5LGxhYmVsOmUsaW5zZXJ0VGV4dDphLmdldEluc2VydFRleHRGb3JQcm9wZXJ0eShlLHZvaWQgMCxyLGkpLGluc2VydFRleHRGb3JtYXQ6RWkuU25pcHBldCxmaWx0ZXJUZXh0OmEuZ2V0RmlsdGVyVGV4dEZvclZhbHVlKGUpLGRvY3VtZW50YXRpb246dHx8YS5mcm9tTWFya3VwKHMubWFya2Rvd25EZXNjcmlwdGlvbil8fHMuZGVzY3JpcHRpb258fCIifTt2b2lkIDAhPT1zLnN1Z2dlc3RTb3J0VGV4dCYmKG4uc29ydFRleHQ9cy5zdWdnZXN0U29ydFRleHQpLG4uaW5zZXJ0VGV4dCYmdWkobi5pbnNlcnRUZXh0LCIkMSIuY29uY2F0KGkpKSYmKG4uY29tbWFuZD17dGl0bGU6IlN1Z2dlc3QiLGNvbW1hbmQ6ImVkaXRvci5hY3Rpb24udHJpZ2dlclN1Z2dlc3QifSksby5hZGQobil9O2lmKHMuZW51bSlmb3IodmFyIGw9MDtsPHMuZW51bS5sZW5ndGg7bCsrKXt2YXIgdT12b2lkIDA7cy5tYXJrZG93bkVudW1EZXNjcmlwdGlvbnMmJmw8cy5tYXJrZG93bkVudW1EZXNjcmlwdGlvbnMubGVuZ3RoP3U9YS5mcm9tTWFya3VwKHMubWFya2Rvd25FbnVtRGVzY3JpcHRpb25zW2xdKTpzLmVudW1EZXNjcmlwdGlvbnMmJmw8cy5lbnVtRGVzY3JpcHRpb25zLmxlbmd0aCYmKHU9cy5lbnVtRGVzY3JpcHRpb25zW2xdKSxjKHMuZW51bVtsXSx1KX1zLmNvbnN0JiZjKHMuY29uc3QpfX19KSl9LGUucHJvdG90eXBlLmdldFNjaGVtYUxlc3NQcm9wZXJ0eUNvbXBsZXRpb25zPWZ1bmN0aW9uKGUsdCxuLHIpe3ZhciBpPXRoaXMsbz1mdW5jdGlvbihlKXtlLnByb3BlcnRpZXMuZm9yRWFjaCgoZnVuY3Rpb24oZSl7dmFyIHQ9ZS5rZXlOb2RlLnZhbHVlO3IuYWRkKHtraW5kOlNpLlByb3BlcnR5LGxhYmVsOnQsaW5zZXJ0VGV4dDppLmdldEluc2VydFRleHRGb3JWYWx1ZSh0LCIiKSxpbnNlcnRUZXh0Rm9ybWF0OkVpLlNuaXBwZXQsZmlsdGVyVGV4dDppLmdldEZpbHRlclRleHRGb3JWYWx1ZSh0KSxkb2N1bWVudGF0aW9uOiIifSl9KSl9O2lmKHQucGFyZW50KWlmKCJwcm9wZXJ0eSI9PT10LnBhcmVudC50eXBlKXt2YXIgYT10LnBhcmVudC5rZXlOb2RlLnZhbHVlO2UudmlzaXQoKGZ1bmN0aW9uKGUpe3JldHVybiJwcm9wZXJ0eSI9PT1lLnR5cGUmJmUhPT10LnBhcmVudCYmZS5rZXlOb2RlLnZhbHVlPT09YSYmZS52YWx1ZU5vZGUmJiJvYmplY3QiPT09ZS52YWx1ZU5vZGUudHlwZSYmbyhlLnZhbHVlTm9kZSksITB9KSl9ZWxzZSJhcnJheSI9PT10LnBhcmVudC50eXBlJiZ0LnBhcmVudC5pdGVtcy5mb3JFYWNoKChmdW5jdGlvbihlKXsib2JqZWN0Ij09PWUudHlwZSYmZSE9PXQmJm8oZSl9KSk7ZWxzZSJvYmplY3QiPT09dC50eXBlJiZyLmFkZCh7a2luZDpTaS5Qcm9wZXJ0eSxsYWJlbDoiJHNjaGVtYSIsaW5zZXJ0VGV4dDp0aGlzLmdldEluc2VydFRleHRGb3JQcm9wZXJ0eSgiJHNjaGVtYSIsdm9pZCAwLCEwLCIiKSxpbnNlcnRUZXh0Rm9ybWF0OkVpLlNuaXBwZXQsZG9jdW1lbnRhdGlvbjoiIixmaWx0ZXJUZXh0OnRoaXMuZ2V0RmlsdGVyVGV4dEZvclZhbHVlKCIkc2NoZW1hIil9KX0sZS5wcm90b3R5cGUuZ2V0U2NoZW1hTGVzc1ZhbHVlQ29tcGxldGlvbnM9ZnVuY3Rpb24oZSx0LG4scixpKXt2YXIgbz10aGlzLGE9bjtpZighdHx8InN0cmluZyIhPT10LnR5cGUmJiJudW1iZXIiIT09dC50eXBlJiYiYm9vbGVhbiIhPT10LnR5cGUmJiJudWxsIiE9PXQudHlwZXx8KGE9dC5vZmZzZXQrdC5sZW5ndGgsdD10LnBhcmVudCksIXQpcmV0dXJuIGkuYWRkKHtraW5kOnRoaXMuZ2V0U3VnZ2VzdGlvbktpbmQoIm9iamVjdCIpLGxhYmVsOiJFbXB0eSBvYmplY3QiLGluc2VydFRleHQ6dGhpcy5nZXRJbnNlcnRUZXh0Rm9yVmFsdWUoe30sIiIpLGluc2VydFRleHRGb3JtYXQ6RWkuU25pcHBldCxkb2N1bWVudGF0aW9uOiIifSksdm9pZCBpLmFkZCh7a2luZDp0aGlzLmdldFN1Z2dlc3Rpb25LaW5kKCJhcnJheSIpLGxhYmVsOiJFbXB0eSBhcnJheSIsaW5zZXJ0VGV4dDp0aGlzLmdldEluc2VydFRleHRGb3JWYWx1ZShbXSwiIiksaW5zZXJ0VGV4dEZvcm1hdDpFaS5TbmlwcGV0LGRvY3VtZW50YXRpb246IiJ9KTt2YXIgcz10aGlzLmV2YWx1YXRlU2VwYXJhdG9yQWZ0ZXIocixhKSxjPWZ1bmN0aW9uKGUpe2UucGFyZW50JiYhR28oZS5wYXJlbnQsbiwhMCkmJmkuYWRkKHtraW5kOm8uZ2V0U3VnZ2VzdGlvbktpbmQoZS50eXBlKSxsYWJlbDpvLmdldExhYmVsVGV4dEZvck1hdGNoaW5nTm9kZShlLHIpLGluc2VydFRleHQ6by5nZXRJbnNlcnRUZXh0Rm9yTWF0Y2hpbmdOb2RlKGUscixzKSxpbnNlcnRUZXh0Rm9ybWF0OkVpLlNuaXBwZXQsZG9jdW1lbnRhdGlvbjoiIn0pLCJib29sZWFuIj09PWUudHlwZSYmby5hZGRCb29sZWFuVmFsdWVDb21wbGV0aW9uKCFlLnZhbHVlLHMsaSl9O2lmKCJwcm9wZXJ0eSI9PT10LnR5cGUmJm4+KHQuY29sb25PZmZzZXR8fDApKXt2YXIgbD10LnZhbHVlTm9kZTtpZihsJiYobj5sLm9mZnNldCtsLmxlbmd0aHx8Im9iamVjdCI9PT1sLnR5cGV8fCJhcnJheSI9PT1sLnR5cGUpKXJldHVybjt2YXIgdT10LmtleU5vZGUudmFsdWU7ZS52aXNpdCgoZnVuY3Rpb24oZSl7cmV0dXJuInByb3BlcnR5Ij09PWUudHlwZSYmZS5rZXlOb2RlLnZhbHVlPT09dSYmZS52YWx1ZU5vZGUmJmMoZS52YWx1ZU5vZGUpLCEwfSkpLCIkc2NoZW1hIj09PXUmJnQucGFyZW50JiYhdC5wYXJlbnQucGFyZW50JiZ0aGlzLmFkZERvbGxhclNjaGVtYUNvbXBsZXRpb25zKHMsaSl9aWYoImFycmF5Ij09PXQudHlwZSlpZih0LnBhcmVudCYmInByb3BlcnR5Ij09PXQucGFyZW50LnR5cGUpe3ZhciBoPXQucGFyZW50LmtleU5vZGUudmFsdWU7ZS52aXNpdCgoZnVuY3Rpb24oZSl7cmV0dXJuInByb3BlcnR5Ij09PWUudHlwZSYmZS5rZXlOb2RlLnZhbHVlPT09aCYmZS52YWx1ZU5vZGUmJiJhcnJheSI9PT1lLnZhbHVlTm9kZS50eXBlJiZlLnZhbHVlTm9kZS5pdGVtcy5mb3JFYWNoKGMpLCEwfSkpfWVsc2UgdC5pdGVtcy5mb3JFYWNoKGMpfSxlLnByb3RvdHlwZS5nZXRWYWx1ZUNvbXBsZXRpb25zPWZ1bmN0aW9uKGUsdCxuLHIsaSxvLGEpe3ZhciBzPXIsYz12b2lkIDAsbD12b2lkIDA7aWYoIW58fCJzdHJpbmciIT09bi50eXBlJiYibnVtYmVyIiE9PW4udHlwZSYmImJvb2xlYW4iIT09bi50eXBlJiYibnVsbCIhPT1uLnR5cGV8fChzPW4ub2Zmc2V0K24ubGVuZ3RoLGw9bixuPW4ucGFyZW50KSxuKXtpZigicHJvcGVydHkiPT09bi50eXBlJiZyPihuLmNvbG9uT2Zmc2V0fHwwKSl7dmFyIHU9bi52YWx1ZU5vZGU7aWYodSYmcj51Lm9mZnNldCt1Lmxlbmd0aClyZXR1cm47Yz1uLmtleU5vZGUudmFsdWUsbj1uLnBhcmVudH1pZihuJiYodm9pZCAwIT09Y3x8ImFycmF5Ij09PW4udHlwZSkpe2Zvcih2YXIgaD10aGlzLmV2YWx1YXRlU2VwYXJhdG9yQWZ0ZXIoaSxzKSxmPTAsZD10LmdldE1hdGNoaW5nU2NoZW1hcyhlLnNjaGVtYSxuLm9mZnNldCxsKTtmPGQubGVuZ3RoO2YrKyl7dmFyIG09ZFtmXTtpZihtLm5vZGU9PT1uJiYhbS5pbnZlcnRlZCYmbS5zY2hlbWEpe2lmKCJhcnJheSI9PT1uLnR5cGUmJm0uc2NoZW1hLml0ZW1zKWlmKEFycmF5LmlzQXJyYXkobS5zY2hlbWEuaXRlbXMpKXt2YXIgZz10aGlzLmZpbmRJdGVtQXRPZmZzZXQobixpLHIpO2c8bS5zY2hlbWEuaXRlbXMubGVuZ3RoJiZ0aGlzLmFkZFNjaGVtYVZhbHVlQ29tcGxldGlvbnMobS5zY2hlbWEuaXRlbXNbZ10saCxvLGEpfWVsc2UgdGhpcy5hZGRTY2hlbWFWYWx1ZUNvbXBsZXRpb25zKG0uc2NoZW1hLml0ZW1zLGgsbyxhKTtpZih2b2lkIDAhPT1jKXt2YXIgcD0hMTtpZihtLnNjaGVtYS5wcm9wZXJ0aWVzKSh3PW0uc2NoZW1hLnByb3BlcnRpZXNbY10pJiYocD0hMCx0aGlzLmFkZFNjaGVtYVZhbHVlQ29tcGxldGlvbnModyxoLG8sYSkpO2lmKG0uc2NoZW1hLnBhdHRlcm5Qcm9wZXJ0aWVzJiYhcClmb3IodmFyIGI9MCx2PU9iamVjdC5rZXlzKG0uc2NoZW1hLnBhdHRlcm5Qcm9wZXJ0aWVzKTtiPHYubGVuZ3RoO2IrKyl7dmFyIHk9dltiXSxDPWhpKHkpO2lmKG51bGw9PUM/dm9pZCAwOkMudGVzdChjKSl7cD0hMDt2YXIgdz1tLnNjaGVtYS5wYXR0ZXJuUHJvcGVydGllc1t5XTt0aGlzLmFkZFNjaGVtYVZhbHVlQ29tcGxldGlvbnModyxoLG8sYSl9fWlmKG0uc2NoZW1hLmFkZGl0aW9uYWxQcm9wZXJ0aWVzJiYhcCl7dz1tLnNjaGVtYS5hZGRpdGlvbmFsUHJvcGVydGllczt0aGlzLmFkZFNjaGVtYVZhbHVlQ29tcGxldGlvbnModyxoLG8sYSl9fX19IiRzY2hlbWEiIT09Y3x8bi5wYXJlbnR8fHRoaXMuYWRkRG9sbGFyU2NoZW1hQ29tcGxldGlvbnMoaCxvKSxhLmJvb2xlYW4mJih0aGlzLmFkZEJvb2xlYW5WYWx1ZUNvbXBsZXRpb24oITAsaCxvKSx0aGlzLmFkZEJvb2xlYW5WYWx1ZUNvbXBsZXRpb24oITEsaCxvKSksYS5udWxsJiZ0aGlzLmFkZE51bGxWYWx1ZUNvbXBsZXRpb24oaCxvKX19ZWxzZSB0aGlzLmFkZFNjaGVtYVZhbHVlQ29tcGxldGlvbnMoZS5zY2hlbWEsIiIsbyxhKX0sZS5wcm90b3R5cGUuZ2V0Q29udHJpYnV0ZWRWYWx1ZUNvbXBsZXRpb25zPWZ1bmN0aW9uKGUsdCxuLHIsaSxvKXtpZih0KXtpZigic3RyaW5nIiE9PXQudHlwZSYmIm51bWJlciIhPT10LnR5cGUmJiJib29sZWFuIiE9PXQudHlwZSYmIm51bGwiIT09dC50eXBlfHwodD10LnBhcmVudCksdCYmInByb3BlcnR5Ij09PXQudHlwZSYmbj4odC5jb2xvbk9mZnNldHx8MCkpe3ZhciBhPXQua2V5Tm9kZS52YWx1ZSxzPXQudmFsdWVOb2RlO2lmKCghc3x8bjw9cy5vZmZzZXQrcy5sZW5ndGgpJiZ0LnBhcmVudCl7dmFyIGM9em8odC5wYXJlbnQpO3RoaXMuY29udHJpYnV0aW9ucy5mb3JFYWNoKChmdW5jdGlvbihlKXt2YXIgdD1lLmNvbGxlY3RWYWx1ZUNvbXBsZXRpb25zKHIudXJpLGMsYSxpKTt0JiZvLnB1c2godCl9KSl9fX1lbHNlIHRoaXMuY29udHJpYnV0aW9ucy5mb3JFYWNoKChmdW5jdGlvbihlKXt2YXIgdD1lLmNvbGxlY3REZWZhdWx0Q29tcGxldGlvbnMoci51cmksaSk7dCYmby5wdXNoKHQpfSkpfSxlLnByb3RvdHlwZS5hZGRTY2hlbWFWYWx1ZUNvbXBsZXRpb25zPWZ1bmN0aW9uKGUsdCxuLHIpe3ZhciBpPXRoaXM7Im9iamVjdCI9PXR5cGVvZiBlJiYodGhpcy5hZGRFbnVtVmFsdWVDb21wbGV0aW9ucyhlLHQsbiksdGhpcy5hZGREZWZhdWx0VmFsdWVDb21wbGV0aW9ucyhlLHQsbiksdGhpcy5jb2xsZWN0VHlwZXMoZSxyKSxBcnJheS5pc0FycmF5KGUuYWxsT2YpJiZlLmFsbE9mLmZvckVhY2goKGZ1bmN0aW9uKGUpe3JldHVybiBpLmFkZFNjaGVtYVZhbHVlQ29tcGxldGlvbnMoZSx0LG4scil9KSksQXJyYXkuaXNBcnJheShlLmFueU9mKSYmZS5hbnlPZi5mb3JFYWNoKChmdW5jdGlvbihlKXtyZXR1cm4gaS5hZGRTY2hlbWFWYWx1ZUNvbXBsZXRpb25zKGUsdCxuLHIpfSkpLEFycmF5LmlzQXJyYXkoZS5vbmVPZikmJmUub25lT2YuZm9yRWFjaCgoZnVuY3Rpb24oZSl7cmV0dXJuIGkuYWRkU2NoZW1hVmFsdWVDb21wbGV0aW9ucyhlLHQsbixyKX0pKSl9LGUucHJvdG90eXBlLmFkZERlZmF1bHRWYWx1ZUNvbXBsZXRpb25zPWZ1bmN0aW9uKGUsdCxuLHIpe3ZhciBpPXRoaXM7dm9pZCAwPT09ciYmKHI9MCk7dmFyIG89ITE7aWYoY2koZS5kZWZhdWx0KSl7Zm9yKHZhciBhPWUudHlwZSxzPWUuZGVmYXVsdCxjPXI7Yz4wO2MtLSlzPVtzXSxhPSJhcnJheSI7bi5hZGQoe2tpbmQ6dGhpcy5nZXRTdWdnZXN0aW9uS2luZChhKSxsYWJlbDp0aGlzLmdldExhYmVsRm9yVmFsdWUocyksaW5zZXJ0VGV4dDp0aGlzLmdldEluc2VydFRleHRGb3JWYWx1ZShzLHQpLGluc2VydFRleHRGb3JtYXQ6RWkuU25pcHBldCxkZXRhaWw6UW8oImpzb24uc3VnZ2VzdC5kZWZhdWx0IiwiRGVmYXVsdCB2YWx1ZSIpfSksbz0hMH1BcnJheS5pc0FycmF5KGUuZXhhbXBsZXMpJiZlLmV4YW1wbGVzLmZvckVhY2goKGZ1bmN0aW9uKGEpe2Zvcih2YXIgcz1lLnR5cGUsYz1hLGw9cjtsPjA7bC0tKWM9W2NdLHM9ImFycmF5IjtuLmFkZCh7a2luZDppLmdldFN1Z2dlc3Rpb25LaW5kKHMpLGxhYmVsOmkuZ2V0TGFiZWxGb3JWYWx1ZShjKSxpbnNlcnRUZXh0OmkuZ2V0SW5zZXJ0VGV4dEZvclZhbHVlKGMsdCksaW5zZXJ0VGV4dEZvcm1hdDpFaS5TbmlwcGV0fSksbz0hMH0pKSxBcnJheS5pc0FycmF5KGUuZGVmYXVsdFNuaXBwZXRzKSYmZS5kZWZhdWx0U25pcHBldHMuZm9yRWFjaCgoZnVuY3Rpb24oYSl7dmFyIHMsYyxsPWUudHlwZSx1PWEuYm9keSxoPWEubGFiZWw7aWYoY2kodSkpe2UudHlwZTtmb3IodmFyIGY9cjtmPjA7Zi0tKXU9W3VdO3M9aS5nZXRJbnNlcnRUZXh0Rm9yU25pcHBldFZhbHVlKHUsdCksYz1pLmdldEZpbHRlclRleHRGb3JTbmlwcGV0VmFsdWUodSksaD1ofHxpLmdldExhYmVsRm9yU25pcHBldFZhbHVlKHUpfWVsc2V7aWYoInN0cmluZyIhPXR5cGVvZiBhLmJvZHlUZXh0KXJldHVybjt2YXIgZD0iIixtPSIiLGc9IiI7Zm9yKGY9cjtmPjA7Zi0tKWQ9ZCtnKyJbXG4iLG09bSsiXG4iK2crIl0iLGcrPSJcdCIsbD0iYXJyYXkiO3M9ZCtnK2EuYm9keVRleHQuc3BsaXQoIlxuIikuam9pbigiXG4iK2cpK20rdCxoPWh8fHMsYz1zLnJlcGxhY2UoL1tcbl0vZywiIil9bi5hZGQoe2tpbmQ6aS5nZXRTdWdnZXN0aW9uS2luZChsKSxsYWJlbDpoLGRvY3VtZW50YXRpb246aS5mcm9tTWFya3VwKGEubWFya2Rvd25EZXNjcmlwdGlvbil8fGEuZGVzY3JpcHRpb24saW5zZXJ0VGV4dDpzLGluc2VydFRleHRGb3JtYXQ6RWkuU25pcHBldCxmaWx0ZXJUZXh0OmN9KSxvPSEwfSkpLCFvJiYib2JqZWN0Ij09dHlwZW9mIGUuaXRlbXMmJiFBcnJheS5pc0FycmF5KGUuaXRlbXMpJiZyPDUmJnRoaXMuYWRkRGVmYXVsdFZhbHVlQ29tcGxldGlvbnMoZS5pdGVtcyx0LG4scisxKX0sZS5wcm90b3R5cGUuYWRkRW51bVZhbHVlQ29tcGxldGlvbnM9ZnVuY3Rpb24oZSx0LG4pe2lmKGNpKGUuY29uc3QpJiZuLmFkZCh7a2luZDp0aGlzLmdldFN1Z2dlc3Rpb25LaW5kKGUudHlwZSksbGFiZWw6dGhpcy5nZXRMYWJlbEZvclZhbHVlKGUuY29uc3QpLGluc2VydFRleHQ6dGhpcy5nZXRJbnNlcnRUZXh0Rm9yVmFsdWUoZS5jb25zdCx0KSxpbnNlcnRUZXh0Rm9ybWF0OkVpLlNuaXBwZXQsZG9jdW1lbnRhdGlvbjp0aGlzLmZyb21NYXJrdXAoZS5tYXJrZG93bkRlc2NyaXB0aW9uKXx8ZS5kZXNjcmlwdGlvbn0pLEFycmF5LmlzQXJyYXkoZS5lbnVtKSlmb3IodmFyIHI9MCxpPWUuZW51bS5sZW5ndGg7cjxpO3IrKyl7dmFyIG89ZS5lbnVtW3JdLGE9dGhpcy5mcm9tTWFya3VwKGUubWFya2Rvd25EZXNjcmlwdGlvbil8fGUuZGVzY3JpcHRpb247ZS5tYXJrZG93bkVudW1EZXNjcmlwdGlvbnMmJnI8ZS5tYXJrZG93bkVudW1EZXNjcmlwdGlvbnMubGVuZ3RoJiZ0aGlzLmRvZXNTdXBwb3J0TWFya2Rvd24oKT9hPXRoaXMuZnJvbU1hcmt1cChlLm1hcmtkb3duRW51bURlc2NyaXB0aW9uc1tyXSk6ZS5lbnVtRGVzY3JpcHRpb25zJiZyPGUuZW51bURlc2NyaXB0aW9ucy5sZW5ndGgmJihhPWUuZW51bURlc2NyaXB0aW9uc1tyXSksbi5hZGQoe2tpbmQ6dGhpcy5nZXRTdWdnZXN0aW9uS2luZChlLnR5cGUpLGxhYmVsOnRoaXMuZ2V0TGFiZWxGb3JWYWx1ZShvKSxpbnNlcnRUZXh0OnRoaXMuZ2V0SW5zZXJ0VGV4dEZvclZhbHVlKG8sdCksaW5zZXJ0VGV4dEZvcm1hdDpFaS5TbmlwcGV0LGRvY3VtZW50YXRpb246YX0pfX0sZS5wcm90b3R5cGUuY29sbGVjdFR5cGVzPWZ1bmN0aW9uKGUsdCl7aWYoIUFycmF5LmlzQXJyYXkoZS5lbnVtKSYmIWNpKGUuY29uc3QpKXt2YXIgbj1lLnR5cGU7QXJyYXkuaXNBcnJheShuKT9uLmZvckVhY2goKGZ1bmN0aW9uKGUpe3JldHVybiB0W2VdPSEwfSkpOm4mJih0W25dPSEwKX19LGUucHJvdG90eXBlLmFkZEZpbGxlclZhbHVlQ29tcGxldGlvbnM9ZnVuY3Rpb24oZSx0LG4pe2Uub2JqZWN0JiZuLmFkZCh7a2luZDp0aGlzLmdldFN1Z2dlc3Rpb25LaW5kKCJvYmplY3QiKSxsYWJlbDoie30iLGluc2VydFRleHQ6dGhpcy5nZXRJbnNlcnRUZXh0Rm9yR3Vlc3NlZFZhbHVlKHt9LHQpLGluc2VydFRleHRGb3JtYXQ6RWkuU25pcHBldCxkZXRhaWw6UW8oImRlZmF1bHRzLm9iamVjdCIsIk5ldyBvYmplY3QiKSxkb2N1bWVudGF0aW9uOiIifSksZS5hcnJheSYmbi5hZGQoe2tpbmQ6dGhpcy5nZXRTdWdnZXN0aW9uS2luZCgiYXJyYXkiKSxsYWJlbDoiW10iLGluc2VydFRleHQ6dGhpcy5nZXRJbnNlcnRUZXh0Rm9yR3Vlc3NlZFZhbHVlKFtdLHQpLGluc2VydFRleHRGb3JtYXQ6RWkuU25pcHBldCxkZXRhaWw6UW8oImRlZmF1bHRzLmFycmF5IiwiTmV3IGFycmF5IiksZG9jdW1lbnRhdGlvbjoiIn0pfSxlLnByb3RvdHlwZS5hZGRCb29sZWFuVmFsdWVDb21wbGV0aW9uPWZ1bmN0aW9uKGUsdCxuKXtuLmFkZCh7a2luZDp0aGlzLmdldFN1Z2dlc3Rpb25LaW5kKCJib29sZWFuIiksbGFiZWw6ZT8idHJ1ZSI6ImZhbHNlIixpbnNlcnRUZXh0OnRoaXMuZ2V0SW5zZXJ0VGV4dEZvclZhbHVlKGUsdCksaW5zZXJ0VGV4dEZvcm1hdDpFaS5TbmlwcGV0LGRvY3VtZW50YXRpb246IiJ9KX0sZS5wcm90b3R5cGUuYWRkTnVsbFZhbHVlQ29tcGxldGlvbj1mdW5jdGlvbihlLHQpe3QuYWRkKHtraW5kOnRoaXMuZ2V0U3VnZ2VzdGlvbktpbmQoIm51bGwiKSxsYWJlbDoibnVsbCIsaW5zZXJ0VGV4dDoibnVsbCIrZSxpbnNlcnRUZXh0Rm9ybWF0OkVpLlNuaXBwZXQsZG9jdW1lbnRhdGlvbjoiIn0pfSxlLnByb3RvdHlwZS5hZGREb2xsYXJTY2hlbWFDb21wbGV0aW9ucz1mdW5jdGlvbihlLHQpe3ZhciBuPXRoaXMscj10aGlzLnNjaGVtYVNlcnZpY2UuZ2V0UmVnaXN0ZXJlZFNjaGVtYUlkcygoZnVuY3Rpb24oZSl7cmV0dXJuImh0dHAiPT09ZXx8Imh0dHBzIj09PWV9KSk7ci5mb3JFYWNoKChmdW5jdGlvbihyKXtyZXR1cm4gdC5hZGQoe2tpbmQ6U2kuTW9kdWxlLGxhYmVsOm4uZ2V0TGFiZWxGb3JWYWx1ZShyKSxmaWx0ZXJUZXh0Om4uZ2V0RmlsdGVyVGV4dEZvclZhbHVlKHIpLGluc2VydFRleHQ6bi5nZXRJbnNlcnRUZXh0Rm9yVmFsdWUocixlKSxpbnNlcnRUZXh0Rm9ybWF0OkVpLlNuaXBwZXQsZG9jdW1lbnRhdGlvbjoiIn0pfSkpfSxlLnByb3RvdHlwZS5nZXRMYWJlbEZvclZhbHVlPWZ1bmN0aW9uKGUpe3JldHVybiBKU09OLnN0cmluZ2lmeShlKX0sZS5wcm90b3R5cGUuZ2V0RmlsdGVyVGV4dEZvclZhbHVlPWZ1bmN0aW9uKGUpe3JldHVybiBKU09OLnN0cmluZ2lmeShlKX0sZS5wcm90b3R5cGUuZ2V0RmlsdGVyVGV4dEZvclNuaXBwZXRWYWx1ZT1mdW5jdGlvbihlKXtyZXR1cm4gSlNPTi5zdHJpbmdpZnkoZSkucmVwbGFjZSgvXCRce1xkKzooW159XSspXH18XCRcZCsvZywiJDEiKX0sZS5wcm90b3R5cGUuZ2V0TGFiZWxGb3JTbmlwcGV0VmFsdWU9ZnVuY3Rpb24oZSl7cmV0dXJuIEpTT04uc3RyaW5naWZ5KGUpLnJlcGxhY2UoL1wkXHtcZCs6KFtefV0rKVx9fFwkXGQrL2csIiQxIil9LGUucHJvdG90eXBlLmdldEluc2VydFRleHRGb3JQbGFpblRleHQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGUucmVwbGFjZSgvW1xcXCRcfV0vZywiXFwkJiIpfSxlLnByb3RvdHlwZS5nZXRJbnNlcnRUZXh0Rm9yVmFsdWU9ZnVuY3Rpb24oZSx0KXt2YXIgbj1KU09OLnN0cmluZ2lmeShlLG51bGwsIlx0Iik7cmV0dXJuInt9Ij09PW4/InskMX0iK3Q6IltdIj09PW4/IlskMV0iK3Q6dGhpcy5nZXRJbnNlcnRUZXh0Rm9yUGxhaW5UZXh0KG4rdCl9LGUucHJvdG90eXBlLmdldEluc2VydFRleHRGb3JTbmlwcGV0VmFsdWU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gWW8oZSwiIiwoZnVuY3Rpb24oZSl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBlJiYiXiI9PT1lWzBdP2Uuc3Vic3RyKDEpOkpTT04uc3RyaW5naWZ5KGUpfSkpK3R9LGUucHJvdG90eXBlLmdldEluc2VydFRleHRGb3JHdWVzc2VkVmFsdWU9ZnVuY3Rpb24oZSx0KXtzd2l0Y2godHlwZW9mIGUpe2Nhc2Uib2JqZWN0IjpyZXR1cm4gbnVsbD09PWU/IiR7MTpudWxsfSIrdDp0aGlzLmdldEluc2VydFRleHRGb3JWYWx1ZShlLHQpO2Nhc2Uic3RyaW5nIjp2YXIgbj1KU09OLnN0cmluZ2lmeShlKTtyZXR1cm4gbj1uLnN1YnN0cigxLG4ubGVuZ3RoLTIpLCciJHsxOicrKG49dGhpcy5nZXRJbnNlcnRUZXh0Rm9yUGxhaW5UZXh0KG4pKSsnfSInK3Q7Y2FzZSJudW1iZXIiOmNhc2UiYm9vbGVhbiI6cmV0dXJuIiR7MToiK0pTT04uc3RyaW5naWZ5KGUpKyJ9Iit0fXJldHVybiB0aGlzLmdldEluc2VydFRleHRGb3JWYWx1ZShlLHQpfSxlLnByb3RvdHlwZS5nZXRTdWdnZXN0aW9uS2luZD1mdW5jdGlvbihlKXtpZihBcnJheS5pc0FycmF5KGUpKXt2YXIgdD1lO2U9dC5sZW5ndGg+MD90WzBdOnZvaWQgMH1pZighZSlyZXR1cm4gU2kuVmFsdWU7c3dpdGNoKGUpe2Nhc2Uic3RyaW5nIjpkZWZhdWx0OnJldHVybiBTaS5WYWx1ZTtjYXNlIm9iamVjdCI6cmV0dXJuIFNpLk1vZHVsZTtjYXNlInByb3BlcnR5IjpyZXR1cm4gU2kuUHJvcGVydHl9fSxlLnByb3RvdHlwZS5nZXRMYWJlbFRleHRGb3JNYXRjaGluZ05vZGU9ZnVuY3Rpb24oZSx0KXtzd2l0Y2goZS50eXBlKXtjYXNlImFycmF5IjpyZXR1cm4iW10iO2Nhc2Uib2JqZWN0IjpyZXR1cm4ie30iO2RlZmF1bHQ6cmV0dXJuIHQuZ2V0VGV4dCgpLnN1YnN0cihlLm9mZnNldCxlLmxlbmd0aCl9fSxlLnByb3RvdHlwZS5nZXRJbnNlcnRUZXh0Rm9yTWF0Y2hpbmdOb2RlPWZ1bmN0aW9uKGUsdCxuKXtzd2l0Y2goZS50eXBlKXtjYXNlImFycmF5IjpyZXR1cm4gdGhpcy5nZXRJbnNlcnRUZXh0Rm9yVmFsdWUoW10sbik7Y2FzZSJvYmplY3QiOnJldHVybiB0aGlzLmdldEluc2VydFRleHRGb3JWYWx1ZSh7fSxuKTtkZWZhdWx0OnZhciByPXQuZ2V0VGV4dCgpLnN1YnN0cihlLm9mZnNldCxlLmxlbmd0aCkrbjtyZXR1cm4gdGhpcy5nZXRJbnNlcnRUZXh0Rm9yUGxhaW5UZXh0KHIpfX0sZS5wcm90b3R5cGUuZ2V0SW5zZXJ0VGV4dEZvclByb3BlcnR5PWZ1bmN0aW9uKGUsdCxuLHIpe3ZhciBpPXRoaXMuZ2V0SW5zZXJ0VGV4dEZvclZhbHVlKGUsIiIpO2lmKCFuKXJldHVybiBpO3ZhciBvLGE9aSsiOiAiLHM9MDtpZih0KXtpZihBcnJheS5pc0FycmF5KHQuZGVmYXVsdFNuaXBwZXRzKSl7aWYoMT09PXQuZGVmYXVsdFNuaXBwZXRzLmxlbmd0aCl7dmFyIGM9dC5kZWZhdWx0U25pcHBldHNbMF0uYm9keTtjaShjKSYmKG89dGhpcy5nZXRJbnNlcnRUZXh0Rm9yU25pcHBldFZhbHVlKGMsIiIpKX1zKz10LmRlZmF1bHRTbmlwcGV0cy5sZW5ndGh9aWYodC5lbnVtJiYob3x8MSE9PXQuZW51bS5sZW5ndGh8fChvPXRoaXMuZ2V0SW5zZXJ0VGV4dEZvckd1ZXNzZWRWYWx1ZSh0LmVudW1bMF0sIiIpKSxzKz10LmVudW0ubGVuZ3RoKSxjaSh0LmRlZmF1bHQpJiYob3x8KG89dGhpcy5nZXRJbnNlcnRUZXh0Rm9yR3Vlc3NlZFZhbHVlKHQuZGVmYXVsdCwiIikpLHMrKyksQXJyYXkuaXNBcnJheSh0LmV4YW1wbGVzKSYmdC5leGFtcGxlcy5sZW5ndGgmJihvfHwobz10aGlzLmdldEluc2VydFRleHRGb3JHdWVzc2VkVmFsdWUodC5leGFtcGxlc1swXSwiIikpLHMrPXQuZXhhbXBsZXMubGVuZ3RoKSwwPT09cyl7dmFyIGw9QXJyYXkuaXNBcnJheSh0LnR5cGUpP3QudHlwZVswXTp0LnR5cGU7c3dpdGNoKGx8fCh0LnByb3BlcnRpZXM/bD0ib2JqZWN0Ijp0Lml0ZW1zJiYobD0iYXJyYXkiKSksbCl7Y2FzZSJib29sZWFuIjpvPSIkMSI7YnJlYWs7Y2FzZSJzdHJpbmciOm89JyIkMSInO2JyZWFrO2Nhc2Uib2JqZWN0IjpvPSJ7JDF9IjticmVhaztjYXNlImFycmF5IjpvPSJbJDFdIjticmVhaztjYXNlIm51bWJlciI6Y2FzZSJpbnRlZ2VyIjpvPSIkezE6MH0iO2JyZWFrO2Nhc2UibnVsbCI6bz0iJHsxOm51bGx9IjticmVhaztkZWZhdWx0OnJldHVybiBpfX19cmV0dXJuKCFvfHxzPjEpJiYobz0iJDEiKSxhK28rcn0sZS5wcm90b3R5cGUuZ2V0Q3VycmVudFdvcmQ9ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG49dC0xLHI9ZS5nZXRUZXh0KCk7bj49MCYmLTE9PT0nIFx0XG5cclx2Ijp7WyxdfScuaW5kZXhPZihyLmNoYXJBdChuKSk7KW4tLTtyZXR1cm4gci5zdWJzdHJpbmcobisxLHQpfSxlLnByb3RvdHlwZS5ldmFsdWF0ZVNlcGFyYXRvckFmdGVyPWZ1bmN0aW9uKGUsdCl7dmFyIG49dGkoZS5nZXRUZXh0KCksITApO3N3aXRjaChuLnNldFBvc2l0aW9uKHQpLG4uc2NhbigpKXtjYXNlIDU6Y2FzZSAyOmNhc2UgNDpjYXNlIDE3OnJldHVybiIiO2RlZmF1bHQ6cmV0dXJuIiwifX0sZS5wcm90b3R5cGUuZmluZEl0ZW1BdE9mZnNldD1mdW5jdGlvbihlLHQsbil7Zm9yKHZhciByPXRpKHQuZ2V0VGV4dCgpLCEwKSxpPWUuaXRlbXMsbz1pLmxlbmd0aC0xO28+PTA7by0tKXt2YXIgYT1pW29dO2lmKG4+YS5vZmZzZXQrYS5sZW5ndGgpcmV0dXJuIHIuc2V0UG9zaXRpb24oYS5vZmZzZXQrYS5sZW5ndGgpLDU9PT1yLnNjYW4oKSYmbj49ci5nZXRUb2tlbk9mZnNldCgpK3IuZ2V0VG9rZW5MZW5ndGgoKT9vKzE6bztpZihuPj1hLm9mZnNldClyZXR1cm4gb31yZXR1cm4gMH0sZS5wcm90b3R5cGUuaXNJbkNvbW1lbnQ9ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRpKGUuZ2V0VGV4dCgpLCExKTtyLnNldFBvc2l0aW9uKHQpO2Zvcih2YXIgaT1yLnNjYW4oKTsxNyE9PWkmJnIuZ2V0VG9rZW5PZmZzZXQoKStyLmdldFRva2VuTGVuZ3RoKCk8bjspaT1yLnNjYW4oKTtyZXR1cm4oMTI9PT1pfHwxMz09PWkpJiZyLmdldFRva2VuT2Zmc2V0KCk8PW59LGUucHJvdG90eXBlLmZyb21NYXJrdXA9ZnVuY3Rpb24oZSl7aWYoZSYmdGhpcy5kb2VzU3VwcG9ydE1hcmtkb3duKCkpcmV0dXJue2tpbmQ6Q2kuTWFya2Rvd24sdmFsdWU6ZX19LGUucHJvdG90eXBlLmRvZXNTdXBwb3J0TWFya2Rvd249ZnVuY3Rpb24oKXtpZighY2kodGhpcy5zdXBwb3J0c01hcmtkb3duKSl7dmFyIGU9dGhpcy5jbGllbnRDYXBhYmlsaXRpZXMudGV4dERvY3VtZW50JiZ0aGlzLmNsaWVudENhcGFiaWxpdGllcy50ZXh0RG9jdW1lbnQuY29tcGxldGlvbjt0aGlzLnN1cHBvcnRzTWFya2Rvd249ZSYmZS5jb21wbGV0aW9uSXRlbSYmQXJyYXkuaXNBcnJheShlLmNvbXBsZXRpb25JdGVtLmRvY3VtZW50YXRpb25Gb3JtYXQpJiYtMSE9PWUuY29tcGxldGlvbkl0ZW0uZG9jdW1lbnRhdGlvbkZvcm1hdC5pbmRleE9mKENpLk1hcmtkb3duKX1yZXR1cm4gdGhpcy5zdXBwb3J0c01hcmtkb3dufSxlLnByb3RvdHlwZS5kb2VzU3VwcG9ydHNDb21taXRDaGFyYWN0ZXJzPWZ1bmN0aW9uKCl7aWYoIWNpKHRoaXMuc3VwcG9ydHNDb21taXRDaGFyYWN0ZXJzKSl7dmFyIGU9dGhpcy5jbGllbnRDYXBhYmlsaXRpZXMudGV4dERvY3VtZW50JiZ0aGlzLmNsaWVudENhcGFiaWxpdGllcy50ZXh0RG9jdW1lbnQuY29tcGxldGlvbjt0aGlzLnN1cHBvcnRzQ29tbWl0Q2hhcmFjdGVycz1lJiZlLmNvbXBsZXRpb25JdGVtJiYhIWUuY29tcGxldGlvbkl0ZW0uY29tbWl0Q2hhcmFjdGVyc1N1cHBvcnR9cmV0dXJuIHRoaXMuc3VwcG9ydHNDb21taXRDaGFyYWN0ZXJzfSxlfSgpLHRhPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHQsbil7dm9pZCAwPT09dCYmKHQ9W10pLHRoaXMuc2NoZW1hU2VydmljZT1lLHRoaXMuY29udHJpYnV0aW9ucz10LHRoaXMucHJvbWlzZT1ufHxQcm9taXNlfXJldHVybiBlLnByb3RvdHlwZS5kb0hvdmVyPWZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1lLm9mZnNldEF0KHQpLGk9bi5nZXROb2RlRnJvbU9mZnNldChyKTtpZighaXx8KCJvYmplY3QiPT09aS50eXBlfHwiYXJyYXkiPT09aS50eXBlKSYmcj5pLm9mZnNldCsxJiZyPGkub2Zmc2V0K2kubGVuZ3RoLTEpcmV0dXJuIHRoaXMucHJvbWlzZS5yZXNvbHZlKG51bGwpO3ZhciBvPWk7aWYoInN0cmluZyI9PT1pLnR5cGUpe3ZhciBhPWkucGFyZW50O2lmKGEmJiJwcm9wZXJ0eSI9PT1hLnR5cGUmJmEua2V5Tm9kZT09PWkmJiEoaT1hLnZhbHVlTm9kZSkpcmV0dXJuIHRoaXMucHJvbWlzZS5yZXNvbHZlKG51bGwpfWZvcih2YXIgcz1mci5jcmVhdGUoZS5wb3NpdGlvbkF0KG8ub2Zmc2V0KSxlLnBvc2l0aW9uQXQoby5vZmZzZXQrby5sZW5ndGgpKSxjPWZ1bmN0aW9uKGUpe3JldHVybntjb250ZW50czplLHJhbmdlOnN9fSxsPXpvKGkpLHU9dGhpcy5jb250cmlidXRpb25zLmxlbmd0aC0xO3U+PTA7dS0tKXt2YXIgaD10aGlzLmNvbnRyaWJ1dGlvbnNbdV0uZ2V0SW5mb0NvbnRyaWJ1dGlvbihlLnVyaSxsKTtpZihoKXJldHVybiBoLnRoZW4oKGZ1bmN0aW9uKGUpe3JldHVybiBjKGUpfSkpfXJldHVybiB0aGlzLnNjaGVtYVNlcnZpY2UuZ2V0U2NoZW1hRm9yUmVzb3VyY2UoZS51cmksbikudGhlbigoZnVuY3Rpb24oZSl7aWYoZSYmaSl7dmFyIHQ9bi5nZXRNYXRjaGluZ1NjaGVtYXMoZS5zY2hlbWEsaS5vZmZzZXQpLHI9dm9pZCAwLG89dm9pZCAwLGE9dm9pZCAwLHM9dm9pZCAwO3QuZXZlcnkoKGZ1bmN0aW9uKGUpe2lmKGUubm9kZT09PWkmJiFlLmludmVydGVkJiZlLnNjaGVtYSYmKHI9cnx8ZS5zY2hlbWEudGl0bGUsbz1vfHxlLnNjaGVtYS5tYXJrZG93bkRlc2NyaXB0aW9ufHxuYShlLnNjaGVtYS5kZXNjcmlwdGlvbiksZS5zY2hlbWEuZW51bSkpe3ZhciB0PWUuc2NoZW1hLmVudW0uaW5kZXhPZihIbyhpKSk7ZS5zY2hlbWEubWFya2Rvd25FbnVtRGVzY3JpcHRpb25zP2E9ZS5zY2hlbWEubWFya2Rvd25FbnVtRGVzY3JpcHRpb25zW3RdOmUuc2NoZW1hLmVudW1EZXNjcmlwdGlvbnMmJihhPW5hKGUuc2NoZW1hLmVudW1EZXNjcmlwdGlvbnNbdF0pKSxhJiYic3RyaW5nIiE9dHlwZW9mKHM9ZS5zY2hlbWEuZW51bVt0XSkmJihzPUpTT04uc3RyaW5naWZ5KHMpKX1yZXR1cm4hMH0pKTt2YXIgbD0iIjtyZXR1cm4gciYmKGw9bmEocikpLG8mJihsLmxlbmd0aD4wJiYobCs9IlxuXG4iKSxsKz1vKSxhJiYobC5sZW5ndGg+MCYmKGwrPSJcblxuIiksbCs9ImAiLmNvbmNhdChmdW5jdGlvbihlKXtpZigtMSE9PWUuaW5kZXhPZigiYCIpKXJldHVybiJgYCAiK2UrIiBgYCI7cmV0dXJuIGV9KHMpLCJgOiAiKS5jb25jYXQoYSkpLGMoW2xdKX1yZXR1cm4gbnVsbH0pKX0sZX0oKTtmdW5jdGlvbiBuYShlKXtpZihlKXJldHVybiBlLnJlcGxhY2UoLyhbXlxuXHJdKShccj9cbikoW15cblxyXSkvZ20sIiQxXG5cbiQzIikucmVwbGFjZSgvW1xcYCpfe31bXF0oKSMrXC0uIV0vZywiXFwkJiIpfXZhciByYT1ObygpLGlhPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHQpe3RoaXMuanNvblNjaGVtYVNlcnZpY2U9ZSx0aGlzLnByb21pc2U9dCx0aGlzLnZhbGlkYXRpb25FbmFibGVkPSEwfXJldHVybiBlLnByb3RvdHlwZS5jb25maWd1cmU9ZnVuY3Rpb24oZSl7ZSYmKHRoaXMudmFsaWRhdGlvbkVuYWJsZWQ9ITEhPT1lLnZhbGlkYXRlLHRoaXMuY29tbWVudFNldmVyaXR5PWUuYWxsb3dDb21tZW50cz92b2lkIDA6VHIuRXJyb3IpfSxlLnByb3RvdHlwZS5kb1ZhbGlkYXRpb249ZnVuY3Rpb24oZSx0LG4scil7dmFyIGk9dGhpcztpZighdGhpcy52YWxpZGF0aW9uRW5hYmxlZClyZXR1cm4gdGhpcy5wcm9taXNlLnJlc29sdmUoW10pO3ZhciBvPVtdLGE9e30scz1mdW5jdGlvbihlKXt2YXIgdD1lLnJhbmdlLnN0YXJ0LmxpbmUrIiAiK2UucmFuZ2Uuc3RhcnQuY2hhcmFjdGVyKyIgIitlLm1lc3NhZ2U7YVt0XXx8KGFbdF09ITAsby5wdXNoKGUpKX0sYz1mdW5jdGlvbihyKXt2YXIgYT0obnVsbD09bj92b2lkIDA6bi50cmFpbGluZ0NvbW1hcyk/Y2Eobi50cmFpbGluZ0NvbW1hcyk6VHIuRXJyb3IsYz0obnVsbD09bj92b2lkIDA6bi5jb21tZW50cyk/Y2Eobi5jb21tZW50cyk6aS5jb21tZW50U2V2ZXJpdHksbD0obnVsbD09bj92b2lkIDA6bi5zY2hlbWFWYWxpZGF0aW9uKT9jYShuLnNjaGVtYVZhbGlkYXRpb24pOlRyLldhcm5pbmcsdT0obnVsbD09bj92b2lkIDA6bi5zY2hlbWFSZXF1ZXN0KT9jYShuLnNjaGVtYVJlcXVlc3QpOlRyLldhcm5pbmc7aWYocil7aWYoci5lcnJvcnMubGVuZ3RoJiZ0LnJvb3QmJnUpe3ZhciBoPXQucm9vdCxmPSJvYmplY3QiPT09aC50eXBlP2gucHJvcGVydGllc1swXTp2b2lkIDA7aWYoZiYmIiRzY2hlbWEiPT09Zi5rZXlOb2RlLnZhbHVlKXt2YXIgZD1mLnZhbHVlTm9kZXx8ZixtPWZyLmNyZWF0ZShlLnBvc2l0aW9uQXQoZC5vZmZzZXQpLGUucG9zaXRpb25BdChkLm9mZnNldCtkLmxlbmd0aCkpO3MoUnIuY3JlYXRlKG0sci5lcnJvcnNbMF0sdSx2by5TY2hlbWFSZXNvbHZlRXJyb3IpKX1lbHNle209ZnIuY3JlYXRlKGUucG9zaXRpb25BdChoLm9mZnNldCksZS5wb3NpdGlvbkF0KGgub2Zmc2V0KzEpKTtzKFJyLmNyZWF0ZShtLHIuZXJyb3JzWzBdLHUsdm8uU2NoZW1hUmVzb2x2ZUVycm9yKSl9fWVsc2UgaWYobCl7dmFyIGc9dC52YWxpZGF0ZShlLHIuc2NoZW1hLGwpO2cmJmcuZm9yRWFjaChzKX1hYShyLnNjaGVtYSkmJihjPXZvaWQgMCksc2Eoci5zY2hlbWEpJiYoYT12b2lkIDApfWZvcih2YXIgcD0wLGI9dC5zeW50YXhFcnJvcnM7cDxiLmxlbmd0aDtwKyspe3ZhciB2PWJbcF07aWYodi5jb2RlPT09dm8uVHJhaWxpbmdDb21tYSl7aWYoIm51bWJlciIhPXR5cGVvZiBhKWNvbnRpbnVlO3Yuc2V2ZXJpdHk9YX1zKHYpfWlmKCJudW1iZXIiPT10eXBlb2YgYyl7dmFyIHk9cmEoIkludmFsaWRDb21tZW50VG9rZW4iLCJDb21tZW50cyBhcmUgbm90IHBlcm1pdHRlZCBpbiBKU09OLiIpO3QuY29tbWVudHMuZm9yRWFjaCgoZnVuY3Rpb24oZSl7cyhSci5jcmVhdGUoZSx5LGMsdm8uQ29tbWVudE5vdFBlcm1pdHRlZCkpfSkpfXJldHVybiBvfTtpZihyKXt2YXIgbD1yLmlkfHwic2NoZW1hc2VydmljZTovL3VudGl0bGVkLyIrb2ErKztyZXR1cm4gdGhpcy5qc29uU2NoZW1hU2VydmljZS5yZWdpc3RlckV4dGVybmFsU2NoZW1hKGwsW10scikuZ2V0UmVzb2x2ZWRTY2hlbWEoKS50aGVuKChmdW5jdGlvbihlKXtyZXR1cm4gYyhlKX0pKX1yZXR1cm4gdGhpcy5qc29uU2NoZW1hU2VydmljZS5nZXRTY2hlbWFGb3JSZXNvdXJjZShlLnVyaSx0KS50aGVuKChmdW5jdGlvbihlKXtyZXR1cm4gYyhlKX0pKX0sZS5wcm90b3R5cGUuZ2V0TGFuZ3VhZ2VTdGF0dXM9ZnVuY3Rpb24oZSx0KXtyZXR1cm57c2NoZW1hczp0aGlzLmpzb25TY2hlbWFTZXJ2aWNlLmdldFNjaGVtYVVSSXNGb3JSZXNvdXJjZShlLnVyaSx0KX19LGV9KCksb2E9MDtmdW5jdGlvbiBhYShlKXtpZihlJiYib2JqZWN0Ij09dHlwZW9mIGUpe2lmKGxpKGUuYWxsb3dDb21tZW50cykpcmV0dXJuIGUuYWxsb3dDb21tZW50cztpZihlLmFsbE9mKWZvcih2YXIgdD0wLG49ZS5hbGxPZjt0PG4ubGVuZ3RoO3QrKyl7dmFyIHI9YWEoblt0XSk7aWYobGkocikpcmV0dXJuIHJ9fX1mdW5jdGlvbiBzYShlKXtpZihlJiYib2JqZWN0Ij09dHlwZW9mIGUpe2lmKGxpKGUuYWxsb3dUcmFpbGluZ0NvbW1hcykpcmV0dXJuIGUuYWxsb3dUcmFpbGluZ0NvbW1hczt2YXIgdD1lO2lmKGxpKHQuYWxsb3dzVHJhaWxpbmdDb21tYXMpKXJldHVybiB0LmFsbG93c1RyYWlsaW5nQ29tbWFzO2lmKGUuYWxsT2YpZm9yKHZhciBuPTAscj1lLmFsbE9mO248ci5sZW5ndGg7bisrKXt2YXIgaT1zYShyW25dKTtpZihsaShpKSlyZXR1cm4gaX19fWZ1bmN0aW9uIGNhKGUpe3N3aXRjaChlKXtjYXNlImVycm9yIjpyZXR1cm4gVHIuRXJyb3I7Y2FzZSJ3YXJuaW5nIjpyZXR1cm4gVHIuV2FybmluZztjYXNlImlnbm9yZSI6cmV0dXJufX1mdW5jdGlvbiBsYShlKXtyZXR1cm4gZTw0OD8wOmU8PTU3P2UtNDg6KGU8OTcmJihlKz0zMiksZT49OTcmJmU8PTEwMj9lLTk3KzEwOjApfWZ1bmN0aW9uIHVhKGUpe2lmKCIjIj09PWVbMF0pc3dpdGNoKGUubGVuZ3RoKXtjYXNlIDQ6cmV0dXJue3JlZDoxNypsYShlLmNoYXJDb2RlQXQoMSkpLzI1NSxncmVlbjoxNypsYShlLmNoYXJDb2RlQXQoMikpLzI1NSxibHVlOjE3KmxhKGUuY2hhckNvZGVBdCgzKSkvMjU1LGFscGhhOjF9O2Nhc2UgNTpyZXR1cm57cmVkOjE3KmxhKGUuY2hhckNvZGVBdCgxKSkvMjU1LGdyZWVuOjE3KmxhKGUuY2hhckNvZGVBdCgyKSkvMjU1LGJsdWU6MTcqbGEoZS5jaGFyQ29kZUF0KDMpKS8yNTUsYWxwaGE6MTcqbGEoZS5jaGFyQ29kZUF0KDQpKS8yNTV9O2Nhc2UgNzpyZXR1cm57cmVkOigxNipsYShlLmNoYXJDb2RlQXQoMSkpK2xhKGUuY2hhckNvZGVBdCgyKSkpLzI1NSxncmVlbjooMTYqbGEoZS5jaGFyQ29kZUF0KDMpKStsYShlLmNoYXJDb2RlQXQoNCkpKS8yNTUsYmx1ZTooMTYqbGEoZS5jaGFyQ29kZUF0KDUpKStsYShlLmNoYXJDb2RlQXQoNikpKS8yNTUsYWxwaGE6MX07Y2FzZSA5OnJldHVybntyZWQ6KDE2KmxhKGUuY2hhckNvZGVBdCgxKSkrbGEoZS5jaGFyQ29kZUF0KDIpKSkvMjU1LGdyZWVuOigxNipsYShlLmNoYXJDb2RlQXQoMykpK2xhKGUuY2hhckNvZGVBdCg0KSkpLzI1NSxibHVlOigxNipsYShlLmNoYXJDb2RlQXQoNSkpK2xhKGUuY2hhckNvZGVBdCg2KSkpLzI1NSxhbHBoYTooMTYqbGEoZS5jaGFyQ29kZUF0KDcpKStsYShlLmNoYXJDb2RlQXQoOCkpKS8yNTV9fX12YXIgaGE9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUpe3RoaXMuc2NoZW1hU2VydmljZT1lfXJldHVybiBlLnByb3RvdHlwZS5maW5kRG9jdW1lbnRTeW1ib2xzPWZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzO3ZvaWQgMD09PW4mJihuPXtyZXN1bHRMaW1pdDpOdW1iZXIuTUFYX1ZBTFVFfSk7dmFyIGk9dC5yb290O2lmKCFpKXJldHVybltdO3ZhciBvPW4ucmVzdWx0TGltaXR8fE51bWJlci5NQVhfVkFMVUUsYT1lLnVyaTtpZigoInZzY29kZTovL2RlZmF1bHRzZXR0aW5ncy9rZXliaW5kaW5ncy5qc29uIj09PWF8fHVpKGEudG9Mb3dlckNhc2UoKSwiL3VzZXIva2V5YmluZGluZ3MuanNvbiIpKSYmImFycmF5Ij09PWkudHlwZSl7Zm9yKHZhciBzPVtdLGM9MCxsPWkuaXRlbXM7YzxsLmxlbmd0aDtjKyspe3ZhciB1PWxbY107aWYoIm9iamVjdCI9PT11LnR5cGUpZm9yKHZhciBoPTAsZj11LnByb3BlcnRpZXM7aDxmLmxlbmd0aDtoKyspe3ZhciBkPWZbaF07aWYoImtleSI9PT1kLmtleU5vZGUudmFsdWUmJmQudmFsdWVOb2RlKXt2YXIgbT1tci5jcmVhdGUoZS51cmksZmEoZSx1KSk7aWYocy5wdXNoKHtuYW1lOkhvKGQudmFsdWVOb2RlKSxraW5kOkJpLkZ1bmN0aW9uLGxvY2F0aW9uOm19KSwtLW88PTApcmV0dXJuIG4mJm4ub25SZXN1bHRMaW1pdEV4Y2VlZGVkJiZuLm9uUmVzdWx0TGltaXRFeGNlZWRlZChhKSxzfX19cmV0dXJuIHN9Zm9yKHZhciBnPVt7bm9kZTppLGNvbnRhaW5lck5hbWU6IiJ9XSxwPTAsYj0hMSx2PVtdLHk9ZnVuY3Rpb24odCxuKXsiYXJyYXkiPT09dC50eXBlP3QuaXRlbXMuZm9yRWFjaCgoZnVuY3Rpb24oZSl7ZSYmZy5wdXNoKHtub2RlOmUsY29udGFpbmVyTmFtZTpufSl9KSk6Im9iamVjdCI9PT10LnR5cGUmJnQucHJvcGVydGllcy5mb3JFYWNoKChmdW5jdGlvbih0KXt2YXIgaT10LnZhbHVlTm9kZTtpZihpKWlmKG8+MCl7by0tO3ZhciBhPW1yLmNyZWF0ZShlLnVyaSxmYShlLHQpKSxzPW4/bisiLiIrdC5rZXlOb2RlLnZhbHVlOnQua2V5Tm9kZS52YWx1ZTt2LnB1c2goe25hbWU6ci5nZXRLZXlMYWJlbCh0KSxraW5kOnIuZ2V0U3ltYm9sS2luZChpLnR5cGUpLGxvY2F0aW9uOmEsY29udGFpbmVyTmFtZTpufSksZy5wdXNoKHtub2RlOmksY29udGFpbmVyTmFtZTpzfSl9ZWxzZSBiPSEwfSkpfTtwPGcubGVuZ3RoOyl7dmFyIEM9Z1twKytdO3koQy5ub2RlLEMuY29udGFpbmVyTmFtZSl9cmV0dXJuIGImJm4mJm4ub25SZXN1bHRMaW1pdEV4Y2VlZGVkJiZuLm9uUmVzdWx0TGltaXRFeGNlZWRlZChhKSx2fSxlLnByb3RvdHlwZS5maW5kRG9jdW1lbnRTeW1ib2xzMj1mdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpczt2b2lkIDA9PT1uJiYobj17cmVzdWx0TGltaXQ6TnVtYmVyLk1BWF9WQUxVRX0pO3ZhciBpPXQucm9vdDtpZighaSlyZXR1cm5bXTt2YXIgbz1uLnJlc3VsdExpbWl0fHxOdW1iZXIuTUFYX1ZBTFVFLGE9ZS51cmk7aWYoKCJ2c2NvZGU6Ly9kZWZhdWx0c2V0dGluZ3Mva2V5YmluZGluZ3MuanNvbiI9PT1hfHx1aShhLnRvTG93ZXJDYXNlKCksIi91c2VyL2tleWJpbmRpbmdzLmpzb24iKSkmJiJhcnJheSI9PT1pLnR5cGUpe2Zvcih2YXIgcz1bXSxjPTAsbD1pLml0ZW1zO2M8bC5sZW5ndGg7YysrKXt2YXIgdT1sW2NdO2lmKCJvYmplY3QiPT09dS50eXBlKWZvcih2YXIgaD0wLGY9dS5wcm9wZXJ0aWVzO2g8Zi5sZW5ndGg7aCsrKXt2YXIgZD1mW2hdO2lmKCJrZXkiPT09ZC5rZXlOb2RlLnZhbHVlJiZkLnZhbHVlTm9kZSl7dmFyIG09ZmEoZSx1KSxnPWZhKGUsZC5rZXlOb2RlKTtpZihzLnB1c2goe25hbWU6SG8oZC52YWx1ZU5vZGUpLGtpbmQ6QmkuRnVuY3Rpb24scmFuZ2U6bSxzZWxlY3Rpb25SYW5nZTpnfSksLS1vPD0wKXJldHVybiBuJiZuLm9uUmVzdWx0TGltaXRFeGNlZWRlZCYmbi5vblJlc3VsdExpbWl0RXhjZWVkZWQoYSksc319fXJldHVybiBzfWZvcih2YXIgcD1bXSxiPVt7bm9kZTppLHJlc3VsdDpwfV0sdj0wLHk9ITEsQz1mdW5jdGlvbih0LG4peyJhcnJheSI9PT10LnR5cGU/dC5pdGVtcy5mb3JFYWNoKChmdW5jdGlvbih0LGkpe2lmKHQpaWYobz4wKXtvLS07dmFyIGE9ZmEoZSx0KSxzPWEsYz17bmFtZTpTdHJpbmcoaSksa2luZDpyLmdldFN5bWJvbEtpbmQodC50eXBlKSxyYW5nZTphLHNlbGVjdGlvblJhbmdlOnMsY2hpbGRyZW46W119O24ucHVzaChjKSxiLnB1c2goe3Jlc3VsdDpjLmNoaWxkcmVuLG5vZGU6dH0pfWVsc2UgeT0hMH0pKToib2JqZWN0Ij09PXQudHlwZSYmdC5wcm9wZXJ0aWVzLmZvckVhY2goKGZ1bmN0aW9uKHQpe3ZhciBpPXQudmFsdWVOb2RlO2lmKGkpaWYobz4wKXtvLS07dmFyIGE9ZmEoZSx0KSxzPWZhKGUsdC5rZXlOb2RlKSxjPVtdLGw9e25hbWU6ci5nZXRLZXlMYWJlbCh0KSxraW5kOnIuZ2V0U3ltYm9sS2luZChpLnR5cGUpLHJhbmdlOmEsc2VsZWN0aW9uUmFuZ2U6cyxjaGlsZHJlbjpjLGRldGFpbDpyLmdldERldGFpbChpKX07bi5wdXNoKGwpLGIucHVzaCh7cmVzdWx0OmMsbm9kZTppfSl9ZWxzZSB5PSEwfSkpfTt2PGIubGVuZ3RoOyl7dmFyIHc9Ylt2KytdO0Mody5ub2RlLHcucmVzdWx0KX1yZXR1cm4geSYmbiYmbi5vblJlc3VsdExpbWl0RXhjZWVkZWQmJm4ub25SZXN1bHRMaW1pdEV4Y2VlZGVkKGEpLHB9LGUucHJvdG90eXBlLmdldFN5bWJvbEtpbmQ9ZnVuY3Rpb24oZSl7c3dpdGNoKGUpe2Nhc2Uib2JqZWN0IjpyZXR1cm4gQmkuTW9kdWxlO2Nhc2Uic3RyaW5nIjpyZXR1cm4gQmkuU3RyaW5nO2Nhc2UibnVtYmVyIjpyZXR1cm4gQmkuTnVtYmVyO2Nhc2UiYXJyYXkiOnJldHVybiBCaS5BcnJheTtjYXNlImJvb2xlYW4iOnJldHVybiBCaS5Cb29sZWFuO2RlZmF1bHQ6cmV0dXJuIEJpLlZhcmlhYmxlfX0sZS5wcm90b3R5cGUuZ2V0S2V5TGFiZWw9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5rZXlOb2RlLnZhbHVlO3JldHVybiB0JiYodD10LnJlcGxhY2UoL1tcbl0vZywi4oa1IikpLHQmJnQudHJpbSgpP3Q6JyInLmNvbmNhdCh0LCciJyl9LGUucHJvdG90eXBlLmdldERldGFpbD1mdW5jdGlvbihlKXtpZihlKXJldHVybiJib29sZWFuIj09PWUudHlwZXx8Im51bWJlciI9PT1lLnR5cGV8fCJudWxsIj09PWUudHlwZXx8InN0cmluZyI9PT1lLnR5cGU/U3RyaW5nKGUudmFsdWUpOiJhcnJheSI9PT1lLnR5cGU/ZS5jaGlsZHJlbi5sZW5ndGg/dm9pZCAwOiJbXSI6Im9iamVjdCI9PT1lLnR5cGU/ZS5jaGlsZHJlbi5sZW5ndGg/dm9pZCAwOiJ7fSI6dm9pZCAwfSxlLnByb3RvdHlwZS5maW5kRG9jdW1lbnRDb2xvcnM9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiB0aGlzLnNjaGVtYVNlcnZpY2UuZ2V0U2NoZW1hRm9yUmVzb3VyY2UoZS51cmksdCkudGhlbigoZnVuY3Rpb24ocil7dmFyIGk9W107aWYocilmb3IodmFyIG89biYmIm51bWJlciI9PXR5cGVvZiBuLnJlc3VsdExpbWl0P24ucmVzdWx0TGltaXQ6TnVtYmVyLk1BWF9WQUxVRSxhPXt9LHM9MCxjPXQuZ2V0TWF0Y2hpbmdTY2hlbWFzKHIuc2NoZW1hKTtzPGMubGVuZ3RoO3MrKyl7dmFyIGw9Y1tzXTtpZighbC5pbnZlcnRlZCYmbC5zY2hlbWEmJigiY29sb3IiPT09bC5zY2hlbWEuZm9ybWF0fHwiY29sb3ItaGV4Ij09PWwuc2NoZW1hLmZvcm1hdCkmJmwubm9kZSYmInN0cmluZyI9PT1sLm5vZGUudHlwZSl7dmFyIHU9U3RyaW5nKGwubm9kZS5vZmZzZXQpO2lmKCFhW3VdKXt2YXIgaD11YShIbyhsLm5vZGUpKTtpZihoKXt2YXIgZj1mYShlLGwubm9kZSk7aS5wdXNoKHtjb2xvcjpoLHJhbmdlOmZ9KX1pZihhW3VdPSEwLC0tbzw9MClyZXR1cm4gbiYmbi5vblJlc3VsdExpbWl0RXhjZWVkZWQmJm4ub25SZXN1bHRMaW1pdEV4Y2VlZGVkKGUudXJpKSxpfX19cmV0dXJuIGl9KSl9LGUucHJvdG90eXBlLmdldENvbG9yUHJlc2VudGF0aW9ucz1mdW5jdGlvbihlLHQsbixyKXt2YXIgaSxvPVtdLGE9TWF0aC5yb3VuZCgyNTUqbi5yZWQpLHM9TWF0aC5yb3VuZCgyNTUqbi5ncmVlbiksYz1NYXRoLnJvdW5kKDI1NSpuLmJsdWUpO2Z1bmN0aW9uIGwoZSl7dmFyIHQ9ZS50b1N0cmluZygxNik7cmV0dXJuIDIhPT10Lmxlbmd0aD8iMCIrdDp0fXJldHVybiBpPTE9PT1uLmFscGhhPyIjIi5jb25jYXQobChhKSkuY29uY2F0KGwocykpLmNvbmNhdChsKGMpKToiIyIuY29uY2F0KGwoYSkpLmNvbmNhdChsKHMpKS5jb25jYXQobChjKSkuY29uY2F0KGwoTWF0aC5yb3VuZCgyNTUqbi5hbHBoYSkpKSxvLnB1c2goe2xhYmVsOmksdGV4dEVkaXQ6S3IucmVwbGFjZShyLEpTT04uc3RyaW5naWZ5KGkpKX0pLG99LGV9KCk7ZnVuY3Rpb24gZmEoZSx0KXtyZXR1cm4gZnIuY3JlYXRlKGUucG9zaXRpb25BdCh0Lm9mZnNldCksZS5wb3NpdGlvbkF0KHQub2Zmc2V0K3QubGVuZ3RoKSl9dmFyIGRhLG1hLGdhLHBhLGJhLHZhLHlhPU5vKCksQ2E9e3NjaGVtYUFzc29jaWF0aW9uczpbXSxzY2hlbWFzOnsiaHR0cDovL2pzb24tc2NoZW1hLm9yZy9zY2hlbWEjIjp7JHJlZjoiaHR0cDovL2pzb24tc2NoZW1hLm9yZy9kcmFmdC0wNy9zY2hlbWEjIn0sImh0dHA6Ly9qc29uLXNjaGVtYS5vcmcvZHJhZnQtMDQvc2NoZW1hIyI6eyRzY2hlbWE6Imh0dHA6Ly9qc29uLXNjaGVtYS5vcmcvZHJhZnQtMDQvc2NoZW1hIyIsZGVmaW5pdGlvbnM6e3NjaGVtYUFycmF5Ont0eXBlOiJhcnJheSIsbWluSXRlbXM6MSxpdGVtczp7JHJlZjoiIyJ9fSxwb3NpdGl2ZUludGVnZXI6e3R5cGU6ImludGVnZXIiLG1pbmltdW06MH0scG9zaXRpdmVJbnRlZ2VyRGVmYXVsdDA6e2FsbE9mOlt7JHJlZjoiIy9kZWZpbml0aW9ucy9wb3NpdGl2ZUludGVnZXIifSx7ZGVmYXVsdDowfV19LHNpbXBsZVR5cGVzOnt0eXBlOiJzdHJpbmciLGVudW06WyJhcnJheSIsImJvb2xlYW4iLCJpbnRlZ2VyIiwibnVsbCIsIm51bWJlciIsIm9iamVjdCIsInN0cmluZyJdfSxzdHJpbmdBcnJheTp7dHlwZToiYXJyYXkiLGl0ZW1zOnt0eXBlOiJzdHJpbmcifSxtaW5JdGVtczoxLHVuaXF1ZUl0ZW1zOiEwfX0sdHlwZToib2JqZWN0Iixwcm9wZXJ0aWVzOntpZDp7dHlwZToic3RyaW5nIixmb3JtYXQ6InVyaSJ9LCRzY2hlbWE6e3R5cGU6InN0cmluZyIsZm9ybWF0OiJ1cmkifSx0aXRsZTp7dHlwZToic3RyaW5nIn0sZGVzY3JpcHRpb246e3R5cGU6InN0cmluZyJ9LGRlZmF1bHQ6e30sbXVsdGlwbGVPZjp7dHlwZToibnVtYmVyIixtaW5pbXVtOjAsZXhjbHVzaXZlTWluaW11bTohMH0sbWF4aW11bTp7dHlwZToibnVtYmVyIn0sZXhjbHVzaXZlTWF4aW11bTp7dHlwZToiYm9vbGVhbiIsZGVmYXVsdDohMX0sbWluaW11bTp7dHlwZToibnVtYmVyIn0sZXhjbHVzaXZlTWluaW11bTp7dHlwZToiYm9vbGVhbiIsZGVmYXVsdDohMX0sbWF4TGVuZ3RoOnthbGxPZjpbeyRyZWY6IiMvZGVmaW5pdGlvbnMvcG9zaXRpdmVJbnRlZ2VyIn1dfSxtaW5MZW5ndGg6e2FsbE9mOlt7JHJlZjoiIy9kZWZpbml0aW9ucy9wb3NpdGl2ZUludGVnZXJEZWZhdWx0MCJ9XX0scGF0dGVybjp7dHlwZToic3RyaW5nIixmb3JtYXQ6InJlZ2V4In0sYWRkaXRpb25hbEl0ZW1zOnthbnlPZjpbe3R5cGU6ImJvb2xlYW4ifSx7JHJlZjoiIyJ9XSxkZWZhdWx0Ont9fSxpdGVtczp7YW55T2Y6W3skcmVmOiIjIn0seyRyZWY6IiMvZGVmaW5pdGlvbnMvc2NoZW1hQXJyYXkifV0sZGVmYXVsdDp7fX0sbWF4SXRlbXM6e2FsbE9mOlt7JHJlZjoiIy9kZWZpbml0aW9ucy9wb3NpdGl2ZUludGVnZXIifV19LG1pbkl0ZW1zOnthbGxPZjpbeyRyZWY6IiMvZGVmaW5pdGlvbnMvcG9zaXRpdmVJbnRlZ2VyRGVmYXVsdDAifV19LHVuaXF1ZUl0ZW1zOnt0eXBlOiJib29sZWFuIixkZWZhdWx0OiExfSxtYXhQcm9wZXJ0aWVzOnthbGxPZjpbeyRyZWY6IiMvZGVmaW5pdGlvbnMvcG9zaXRpdmVJbnRlZ2VyIn1dfSxtaW5Qcm9wZXJ0aWVzOnthbGxPZjpbeyRyZWY6IiMvZGVmaW5pdGlvbnMvcG9zaXRpdmVJbnRlZ2VyRGVmYXVsdDAifV19LHJlcXVpcmVkOnthbGxPZjpbeyRyZWY6IiMvZGVmaW5pdGlvbnMvc3RyaW5nQXJyYXkifV19LGFkZGl0aW9uYWxQcm9wZXJ0aWVzOnthbnlPZjpbe3R5cGU6ImJvb2xlYW4ifSx7JHJlZjoiIyJ9XSxkZWZhdWx0Ont9fSxkZWZpbml0aW9uczp7dHlwZToib2JqZWN0IixhZGRpdGlvbmFsUHJvcGVydGllczp7JHJlZjoiIyJ9LGRlZmF1bHQ6e319LHByb3BlcnRpZXM6e3R5cGU6Im9iamVjdCIsYWRkaXRpb25hbFByb3BlcnRpZXM6eyRyZWY6IiMifSxkZWZhdWx0Ont9fSxwYXR0ZXJuUHJvcGVydGllczp7dHlwZToib2JqZWN0IixhZGRpdGlvbmFsUHJvcGVydGllczp7JHJlZjoiIyJ9LGRlZmF1bHQ6e319LGRlcGVuZGVuY2llczp7dHlwZToib2JqZWN0IixhZGRpdGlvbmFsUHJvcGVydGllczp7YW55T2Y6W3skcmVmOiIjIn0seyRyZWY6IiMvZGVmaW5pdGlvbnMvc3RyaW5nQXJyYXkifV19fSxlbnVtOnt0eXBlOiJhcnJheSIsbWluSXRlbXM6MSx1bmlxdWVJdGVtczohMH0sdHlwZTp7YW55T2Y6W3skcmVmOiIjL2RlZmluaXRpb25zL3NpbXBsZVR5cGVzIn0se3R5cGU6ImFycmF5IixpdGVtczp7JHJlZjoiIy9kZWZpbml0aW9ucy9zaW1wbGVUeXBlcyJ9LG1pbkl0ZW1zOjEsdW5pcXVlSXRlbXM6ITB9XX0sZm9ybWF0OnthbnlPZjpbe3R5cGU6InN0cmluZyIsZW51bTpbImRhdGUtdGltZSIsInVyaSIsImVtYWlsIiwiaG9zdG5hbWUiLCJpcHY0IiwiaXB2NiIsInJlZ2V4Il19LHt0eXBlOiJzdHJpbmcifV19LGFsbE9mOnthbGxPZjpbeyRyZWY6IiMvZGVmaW5pdGlvbnMvc2NoZW1hQXJyYXkifV19LGFueU9mOnthbGxPZjpbeyRyZWY6IiMvZGVmaW5pdGlvbnMvc2NoZW1hQXJyYXkifV19LG9uZU9mOnthbGxPZjpbeyRyZWY6IiMvZGVmaW5pdGlvbnMvc2NoZW1hQXJyYXkifV19LG5vdDp7YWxsT2Y6W3skcmVmOiIjIn1dfX0sZGVwZW5kZW5jaWVzOntleGNsdXNpdmVNYXhpbXVtOlsibWF4aW11bSJdLGV4Y2x1c2l2ZU1pbmltdW06WyJtaW5pbXVtIl19LGRlZmF1bHQ6e319LCJodHRwOi8vanNvbi1zY2hlbWEub3JnL2RyYWZ0LTA3L3NjaGVtYSMiOntkZWZpbml0aW9uczp7c2NoZW1hQXJyYXk6e3R5cGU6ImFycmF5IixtaW5JdGVtczoxLGl0ZW1zOnskcmVmOiIjIn19LG5vbk5lZ2F0aXZlSW50ZWdlcjp7dHlwZToiaW50ZWdlciIsbWluaW11bTowfSxub25OZWdhdGl2ZUludGVnZXJEZWZhdWx0MDp7YWxsT2Y6W3skcmVmOiIjL2RlZmluaXRpb25zL25vbk5lZ2F0aXZlSW50ZWdlciJ9LHtkZWZhdWx0OjB9XX0sc2ltcGxlVHlwZXM6e2VudW06WyJhcnJheSIsImJvb2xlYW4iLCJpbnRlZ2VyIiwibnVsbCIsIm51bWJlciIsIm9iamVjdCIsInN0cmluZyJdfSxzdHJpbmdBcnJheTp7dHlwZToiYXJyYXkiLGl0ZW1zOnt0eXBlOiJzdHJpbmcifSx1bmlxdWVJdGVtczohMCxkZWZhdWx0OltdfX0sdHlwZTpbIm9iamVjdCIsImJvb2xlYW4iXSxwcm9wZXJ0aWVzOnskaWQ6e3R5cGU6InN0cmluZyIsZm9ybWF0OiJ1cmktcmVmZXJlbmNlIn0sJHNjaGVtYTp7dHlwZToic3RyaW5nIixmb3JtYXQ6InVyaSJ9LCRyZWY6e3R5cGU6InN0cmluZyIsZm9ybWF0OiJ1cmktcmVmZXJlbmNlIn0sJGNvbW1lbnQ6e3R5cGU6InN0cmluZyJ9LHRpdGxlOnt0eXBlOiJzdHJpbmcifSxkZXNjcmlwdGlvbjp7dHlwZToic3RyaW5nIn0sZGVmYXVsdDohMCxyZWFkT25seTp7dHlwZToiYm9vbGVhbiIsZGVmYXVsdDohMX0sZXhhbXBsZXM6e3R5cGU6ImFycmF5IixpdGVtczohMH0sbXVsdGlwbGVPZjp7dHlwZToibnVtYmVyIixleGNsdXNpdmVNaW5pbXVtOjB9LG1heGltdW06e3R5cGU6Im51bWJlciJ9LGV4Y2x1c2l2ZU1heGltdW06e3R5cGU6Im51bWJlciJ9LG1pbmltdW06e3R5cGU6Im51bWJlciJ9LGV4Y2x1c2l2ZU1pbmltdW06e3R5cGU6Im51bWJlciJ9LG1heExlbmd0aDp7JHJlZjoiIy9kZWZpbml0aW9ucy9ub25OZWdhdGl2ZUludGVnZXIifSxtaW5MZW5ndGg6eyRyZWY6IiMvZGVmaW5pdGlvbnMvbm9uTmVnYXRpdmVJbnRlZ2VyRGVmYXVsdDAifSxwYXR0ZXJuOnt0eXBlOiJzdHJpbmciLGZvcm1hdDoicmVnZXgifSxhZGRpdGlvbmFsSXRlbXM6eyRyZWY6IiMifSxpdGVtczp7YW55T2Y6W3skcmVmOiIjIn0seyRyZWY6IiMvZGVmaW5pdGlvbnMvc2NoZW1hQXJyYXkifV0sZGVmYXVsdDohMH0sbWF4SXRlbXM6eyRyZWY6IiMvZGVmaW5pdGlvbnMvbm9uTmVnYXRpdmVJbnRlZ2VyIn0sbWluSXRlbXM6eyRyZWY6IiMvZGVmaW5pdGlvbnMvbm9uTmVnYXRpdmVJbnRlZ2VyRGVmYXVsdDAifSx1bmlxdWVJdGVtczp7dHlwZToiYm9vbGVhbiIsZGVmYXVsdDohMX0sY29udGFpbnM6eyRyZWY6IiMifSxtYXhQcm9wZXJ0aWVzOnskcmVmOiIjL2RlZmluaXRpb25zL25vbk5lZ2F0aXZlSW50ZWdlciJ9LG1pblByb3BlcnRpZXM6eyRyZWY6IiMvZGVmaW5pdGlvbnMvbm9uTmVnYXRpdmVJbnRlZ2VyRGVmYXVsdDAifSxyZXF1aXJlZDp7JHJlZjoiIy9kZWZpbml0aW9ucy9zdHJpbmdBcnJheSJ9LGFkZGl0aW9uYWxQcm9wZXJ0aWVzOnskcmVmOiIjIn0sZGVmaW5pdGlvbnM6e3R5cGU6Im9iamVjdCIsYWRkaXRpb25hbFByb3BlcnRpZXM6eyRyZWY6IiMifSxkZWZhdWx0Ont9fSxwcm9wZXJ0aWVzOnt0eXBlOiJvYmplY3QiLGFkZGl0aW9uYWxQcm9wZXJ0aWVzOnskcmVmOiIjIn0sZGVmYXVsdDp7fX0scGF0dGVyblByb3BlcnRpZXM6e3R5cGU6Im9iamVjdCIsYWRkaXRpb25hbFByb3BlcnRpZXM6eyRyZWY6IiMifSxwcm9wZXJ0eU5hbWVzOntmb3JtYXQ6InJlZ2V4In0sZGVmYXVsdDp7fX0sZGVwZW5kZW5jaWVzOnt0eXBlOiJvYmplY3QiLGFkZGl0aW9uYWxQcm9wZXJ0aWVzOnthbnlPZjpbeyRyZWY6IiMifSx7JHJlZjoiIy9kZWZpbml0aW9ucy9zdHJpbmdBcnJheSJ9XX19LHByb3BlcnR5TmFtZXM6eyRyZWY6IiMifSxjb25zdDohMCxlbnVtOnt0eXBlOiJhcnJheSIsaXRlbXM6ITAsbWluSXRlbXM6MSx1bmlxdWVJdGVtczohMH0sdHlwZTp7YW55T2Y6W3skcmVmOiIjL2RlZmluaXRpb25zL3NpbXBsZVR5cGVzIn0se3R5cGU6ImFycmF5IixpdGVtczp7JHJlZjoiIy9kZWZpbml0aW9ucy9zaW1wbGVUeXBlcyJ9LG1pbkl0ZW1zOjEsdW5pcXVlSXRlbXM6ITB9XX0sZm9ybWF0Ont0eXBlOiJzdHJpbmcifSxjb250ZW50TWVkaWFUeXBlOnt0eXBlOiJzdHJpbmcifSxjb250ZW50RW5jb2Rpbmc6e3R5cGU6InN0cmluZyJ9LGlmOnskcmVmOiIjIn0sdGhlbjp7JHJlZjoiIyJ9LGVsc2U6eyRyZWY6IiMifSxhbGxPZjp7JHJlZjoiIy9kZWZpbml0aW9ucy9zY2hlbWFBcnJheSJ9LGFueU9mOnskcmVmOiIjL2RlZmluaXRpb25zL3NjaGVtYUFycmF5In0sb25lT2Y6eyRyZWY6IiMvZGVmaW5pdGlvbnMvc2NoZW1hQXJyYXkifSxub3Q6eyRyZWY6IiMifX0sZGVmYXVsdDohMH19fSx3YT17aWQ6eWEoInNjaGVtYS5qc29uLmlkIiwiQSB1bmlxdWUgaWRlbnRpZmllciBmb3IgdGhlIHNjaGVtYS4iKSwkc2NoZW1hOnlhKCJzY2hlbWEuanNvbi4kc2NoZW1hIiwiVGhlIHNjaGVtYSB0byB2ZXJpZnkgdGhpcyBkb2N1bWVudCBhZ2FpbnN0LiIpLHRpdGxlOnlhKCJzY2hlbWEuanNvbi50aXRsZSIsIkEgZGVzY3JpcHRpdmUgdGl0bGUgb2YgdGhlIGVsZW1lbnQuIiksZGVzY3JpcHRpb246eWEoInNjaGVtYS5qc29uLmRlc2NyaXB0aW9uIiwiQSBsb25nIGRlc2NyaXB0aW9uIG9mIHRoZSBlbGVtZW50LiBVc2VkIGluIGhvdmVyIG1lbnVzIGFuZCBzdWdnZXN0aW9ucy4iKSxkZWZhdWx0OnlhKCJzY2hlbWEuanNvbi5kZWZhdWx0IiwiQSBkZWZhdWx0IHZhbHVlLiBVc2VkIGJ5IHN1Z2dlc3Rpb25zLiIpLG11bHRpcGxlT2Y6eWEoInNjaGVtYS5qc29uLm11bHRpcGxlT2YiLCJBIG51bWJlciB0aGF0IHNob3VsZCBjbGVhbmx5IGRpdmlkZSB0aGUgY3VycmVudCB2YWx1ZSAoaS5lLiBoYXZlIG5vIHJlbWFpbmRlcikuIiksbWF4aW11bTp5YSgic2NoZW1hLmpzb24ubWF4aW11bSIsIlRoZSBtYXhpbXVtIG51bWVyaWNhbCB2YWx1ZSwgaW5jbHVzaXZlIGJ5IGRlZmF1bHQuIiksZXhjbHVzaXZlTWF4aW11bTp5YSgic2NoZW1hLmpzb24uZXhjbHVzaXZlTWF4aW11bSIsIk1ha2VzIHRoZSBtYXhpbXVtIHByb3BlcnR5IGV4Y2x1c2l2ZS4iKSxtaW5pbXVtOnlhKCJzY2hlbWEuanNvbi5taW5pbXVtIiwiVGhlIG1pbmltdW0gbnVtZXJpY2FsIHZhbHVlLCBpbmNsdXNpdmUgYnkgZGVmYXVsdC4iKSxleGNsdXNpdmVNaW5pbXVtOnlhKCJzY2hlbWEuanNvbi5leGNsdXNpdmVNaW5pbnVtIiwiTWFrZXMgdGhlIG1pbmltdW0gcHJvcGVydHkgZXhjbHVzaXZlLiIpLG1heExlbmd0aDp5YSgic2NoZW1hLmpzb24ubWF4TGVuZ3RoIiwiVGhlIG1heGltdW0gbGVuZ3RoIG9mIGEgc3RyaW5nLiIpLG1pbkxlbmd0aDp5YSgic2NoZW1hLmpzb24ubWluTGVuZ3RoIiwiVGhlIG1pbmltdW0gbGVuZ3RoIG9mIGEgc3RyaW5nLiIpLHBhdHRlcm46eWEoInNjaGVtYS5qc29uLnBhdHRlcm4iLCJBIHJlZ3VsYXIgZXhwcmVzc2lvbiB0byBtYXRjaCB0aGUgc3RyaW5nIGFnYWluc3QuIEl0IGlzIG5vdCBpbXBsaWNpdGx5IGFuY2hvcmVkLiIpLGFkZGl0aW9uYWxJdGVtczp5YSgic2NoZW1hLmpzb24uYWRkaXRpb25hbEl0ZW1zIiwiRm9yIGFycmF5cywgb25seSB3aGVuIGl0ZW1zIGlzIHNldCBhcyBhbiBhcnJheS4gSWYgaXQgaXMgYSBzY2hlbWEsIHRoZW4gdGhpcyBzY2hlbWEgdmFsaWRhdGVzIGl0ZW1zIGFmdGVyIHRoZSBvbmVzIHNwZWNpZmllZCBieSB0aGUgaXRlbXMgYXJyYXkuIElmIGl0IGlzIGZhbHNlLCB0aGVuIGFkZGl0aW9uYWwgaXRlbXMgd2lsbCBjYXVzZSB2YWxpZGF0aW9uIHRvIGZhaWwuIiksaXRlbXM6eWEoInNjaGVtYS5qc29uLml0ZW1zIiwiRm9yIGFycmF5cy4gQ2FuIGVpdGhlciBiZSBhIHNjaGVtYSB0byB2YWxpZGF0ZSBldmVyeSBlbGVtZW50IGFnYWluc3Qgb3IgYW4gYXJyYXkgb2Ygc2NoZW1hcyB0byB2YWxpZGF0ZSBlYWNoIGl0ZW0gYWdhaW5zdCBpbiBvcmRlciAodGhlIGZpcnN0IHNjaGVtYSB3aWxsIHZhbGlkYXRlIHRoZSBmaXJzdCBlbGVtZW50LCB0aGUgc2Vjb25kIHNjaGVtYSB3aWxsIHZhbGlkYXRlIHRoZSBzZWNvbmQgZWxlbWVudCwgYW5kIHNvIG9uLiIpLG1heEl0ZW1zOnlhKCJzY2hlbWEuanNvbi5tYXhJdGVtcyIsIlRoZSBtYXhpbXVtIG51bWJlciBvZiBpdGVtcyB0aGF0IGNhbiBiZSBpbnNpZGUgYW4gYXJyYXkuIEluY2x1c2l2ZS4iKSxtaW5JdGVtczp5YSgic2NoZW1hLmpzb24ubWluSXRlbXMiLCJUaGUgbWluaW11bSBudW1iZXIgb2YgaXRlbXMgdGhhdCBjYW4gYmUgaW5zaWRlIGFuIGFycmF5LiBJbmNsdXNpdmUuIiksdW5pcXVlSXRlbXM6eWEoInNjaGVtYS5qc29uLnVuaXF1ZUl0ZW1zIiwiSWYgYWxsIG9mIHRoZSBpdGVtcyBpbiB0aGUgYXJyYXkgbXVzdCBiZSB1bmlxdWUuIERlZmF1bHRzIHRvIGZhbHNlLiIpLG1heFByb3BlcnRpZXM6eWEoInNjaGVtYS5qc29uLm1heFByb3BlcnRpZXMiLCJUaGUgbWF4aW11bSBudW1iZXIgb2YgcHJvcGVydGllcyBhbiBvYmplY3QgY2FuIGhhdmUuIEluY2x1c2l2ZS4iKSxtaW5Qcm9wZXJ0aWVzOnlhKCJzY2hlbWEuanNvbi5taW5Qcm9wZXJ0aWVzIiwiVGhlIG1pbmltdW0gbnVtYmVyIG9mIHByb3BlcnRpZXMgYW4gb2JqZWN0IGNhbiBoYXZlLiBJbmNsdXNpdmUuIikscmVxdWlyZWQ6eWEoInNjaGVtYS5qc29uLnJlcXVpcmVkIiwiQW4gYXJyYXkgb2Ygc3RyaW5ncyB0aGF0IGxpc3RzIHRoZSBuYW1lcyBvZiBhbGwgcHJvcGVydGllcyByZXF1aXJlZCBvbiB0aGlzIG9iamVjdC4iKSxhZGRpdGlvbmFsUHJvcGVydGllczp5YSgic2NoZW1hLmpzb24uYWRkaXRpb25hbFByb3BlcnRpZXMiLCJFaXRoZXIgYSBzY2hlbWEgb3IgYSBib29sZWFuLiBJZiBhIHNjaGVtYSwgdGhlbiB1c2VkIHRvIHZhbGlkYXRlIGFsbCBwcm9wZXJ0aWVzIG5vdCBtYXRjaGVkIGJ5ICdwcm9wZXJ0aWVzJyBvciAncGF0dGVyblByb3BlcnRpZXMnLiBJZiBmYWxzZSwgdGhlbiBhbnkgcHJvcGVydGllcyBub3QgbWF0Y2hlZCBieSBlaXRoZXIgd2lsbCBjYXVzZSB0aGlzIHNjaGVtYSB0byBmYWlsLiIpLGRlZmluaXRpb25zOnlhKCJzY2hlbWEuanNvbi5kZWZpbml0aW9ucyIsIk5vdCB1c2VkIGZvciB2YWxpZGF0aW9uLiBQbGFjZSBzdWJzY2hlbWFzIGhlcmUgdGhhdCB5b3Ugd2lzaCB0byByZWZlcmVuY2UgaW5saW5lIHdpdGggJHJlZi4iKSxwcm9wZXJ0aWVzOnlhKCJzY2hlbWEuanNvbi5wcm9wZXJ0aWVzIiwiQSBtYXAgb2YgcHJvcGVydHkgbmFtZXMgdG8gc2NoZW1hcyBmb3IgZWFjaCBwcm9wZXJ0eS4iKSxwYXR0ZXJuUHJvcGVydGllczp5YSgic2NoZW1hLmpzb24ucGF0dGVyblByb3BlcnRpZXMiLCJBIG1hcCBvZiByZWd1bGFyIGV4cHJlc3Npb25zIG9uIHByb3BlcnR5IG5hbWVzIHRvIHNjaGVtYXMgZm9yIG1hdGNoaW5nIHByb3BlcnRpZXMuIiksZGVwZW5kZW5jaWVzOnlhKCJzY2hlbWEuanNvbi5kZXBlbmRlbmNpZXMiLCJBIG1hcCBvZiBwcm9wZXJ0eSBuYW1lcyB0byBlaXRoZXIgYW4gYXJyYXkgb2YgcHJvcGVydHkgbmFtZXMgb3IgYSBzY2hlbWEuIEFuIGFycmF5IG9mIHByb3BlcnR5IG5hbWVzIG1lYW5zIHRoZSBwcm9wZXJ0eSBuYW1lZCBpbiB0aGUga2V5IGRlcGVuZHMgb24gdGhlIHByb3BlcnRpZXMgaW4gdGhlIGFycmF5IGJlaW5nIHByZXNlbnQgaW4gdGhlIG9iamVjdCBpbiBvcmRlciB0byBiZSB2YWxpZC4gSWYgdGhlIHZhbHVlIGlzIGEgc2NoZW1hLCB0aGVuIHRoZSBzY2hlbWEgaXMgb25seSBhcHBsaWVkIHRvIHRoZSBvYmplY3QgaWYgdGhlIHByb3BlcnR5IGluIHRoZSBrZXkgZXhpc3RzIG9uIHRoZSBvYmplY3QuIiksZW51bTp5YSgic2NoZW1hLmpzb24uZW51bSIsIlRoZSBzZXQgb2YgbGl0ZXJhbCB2YWx1ZXMgdGhhdCBhcmUgdmFsaWQuIiksdHlwZTp5YSgic2NoZW1hLmpzb24udHlwZSIsIkVpdGhlciBhIHN0cmluZyBvZiBvbmUgb2YgdGhlIGJhc2ljIHNjaGVtYSB0eXBlcyAobnVtYmVyLCBpbnRlZ2VyLCBudWxsLCBhcnJheSwgb2JqZWN0LCBib29sZWFuLCBzdHJpbmcpIG9yIGFuIGFycmF5IG9mIHN0cmluZ3Mgc3BlY2lmeWluZyBhIHN1YnNldCBvZiB0aG9zZSB0eXBlcy4iKSxmb3JtYXQ6eWEoInNjaGVtYS5qc29uLmZvcm1hdCIsIkRlc2NyaWJlcyB0aGUgZm9ybWF0IGV4cGVjdGVkIGZvciB0aGUgdmFsdWUuIiksYWxsT2Y6eWEoInNjaGVtYS5qc29uLmFsbE9mIiwiQW4gYXJyYXkgb2Ygc2NoZW1hcywgYWxsIG9mIHdoaWNoIG11c3QgbWF0Y2guIiksYW55T2Y6eWEoInNjaGVtYS5qc29uLmFueU9mIiwiQW4gYXJyYXkgb2Ygc2NoZW1hcywgd2hlcmUgYXQgbGVhc3Qgb25lIG11c3QgbWF0Y2guIiksb25lT2Y6eWEoInNjaGVtYS5qc29uLm9uZU9mIiwiQW4gYXJyYXkgb2Ygc2NoZW1hcywgZXhhY3RseSBvbmUgb2Ygd2hpY2ggbXVzdCBtYXRjaC4iKSxub3Q6eWEoInNjaGVtYS5qc29uLm5vdCIsIkEgc2NoZW1hIHdoaWNoIG11c3Qgbm90IG1hdGNoLiIpLCRpZDp5YSgic2NoZW1hLmpzb24uJGlkIiwiQSB1bmlxdWUgaWRlbnRpZmllciBmb3IgdGhlIHNjaGVtYS4iKSwkcmVmOnlhKCJzY2hlbWEuanNvbi4kcmVmIiwiUmVmZXJlbmNlIGEgZGVmaW5pdGlvbiBob3N0ZWQgb24gYW55IGxvY2F0aW9uLiIpLCRjb21tZW50OnlhKCJzY2hlbWEuanNvbi4kY29tbWVudCIsIkNvbW1lbnRzIGZyb20gc2NoZW1hIGF1dGhvcnMgdG8gcmVhZGVycyBvciBtYWludGFpbmVycyBvZiB0aGUgc2NoZW1hLiIpLHJlYWRPbmx5OnlhKCJzY2hlbWEuanNvbi5yZWFkT25seSIsIkluZGljYXRlcyB0aGF0IHRoZSB2YWx1ZSBvZiB0aGUgaW5zdGFuY2UgaXMgbWFuYWdlZCBleGNsdXNpdmVseSBieSB0aGUgb3duaW5nIGF1dGhvcml0eS4iKSxleGFtcGxlczp5YSgic2NoZW1hLmpzb24uZXhhbXBsZXMiLCJTYW1wbGUgSlNPTiB2YWx1ZXMgYXNzb2NpYXRlZCB3aXRoIGEgcGFydGljdWxhciBzY2hlbWEsIGZvciB0aGUgcHVycG9zZSBvZiBpbGx1c3RyYXRpbmcgdXNhZ2UuIiksY29udGFpbnM6eWEoInNjaGVtYS5qc29uLmNvbnRhaW5zIiwnQW4gYXJyYXkgaW5zdGFuY2UgaXMgdmFsaWQgYWdhaW5zdCAiY29udGFpbnMiIGlmIGF0IGxlYXN0IG9uZSBvZiBpdHMgZWxlbWVudHMgaXMgdmFsaWQgYWdhaW5zdCB0aGUgZ2l2ZW4gc2NoZW1hLicpLHByb3BlcnR5TmFtZXM6eWEoInNjaGVtYS5qc29uLnByb3BlcnR5TmFtZXMiLCJJZiB0aGUgaW5zdGFuY2UgaXMgYW4gb2JqZWN0LCB0aGlzIGtleXdvcmQgdmFsaWRhdGVzIGlmIGV2ZXJ5IHByb3BlcnR5IG5hbWUgaW4gdGhlIGluc3RhbmNlIHZhbGlkYXRlcyBhZ2FpbnN0IHRoZSBwcm92aWRlZCBzY2hlbWEuIiksY29uc3Q6eWEoInNjaGVtYS5qc29uLmNvbnN0IiwiQW4gaW5zdGFuY2UgdmFsaWRhdGVzIHN1Y2Nlc3NmdWxseSBhZ2FpbnN0IHRoaXMga2V5d29yZCBpZiBpdHMgdmFsdWUgaXMgZXF1YWwgdG8gdGhlIHZhbHVlIG9mIHRoZSBrZXl3b3JkLiIpLGNvbnRlbnRNZWRpYVR5cGU6eWEoInNjaGVtYS5qc29uLmNvbnRlbnRNZWRpYVR5cGUiLCJEZXNjcmliZXMgdGhlIG1lZGlhIHR5cGUgb2YgYSBzdHJpbmcgcHJvcGVydHkuIiksY29udGVudEVuY29kaW5nOnlhKCJzY2hlbWEuanNvbi5jb250ZW50RW5jb2RpbmciLCJEZXNjcmliZXMgdGhlIGNvbnRlbnQgZW5jb2Rpbmcgb2YgYSBzdHJpbmcgcHJvcGVydHkuIiksaWY6eWEoInNjaGVtYS5qc29uLmlmIiwnVGhlIHZhbGlkYXRpb24gb3V0Y29tZSBvZiB0aGUgImlmIiBzdWJzY2hlbWEgY29udHJvbHMgd2hpY2ggb2YgdGhlICJ0aGVuIiBvciAiZWxzZSIga2V5d29yZHMgYXJlIGV2YWx1YXRlZC4nKSx0aGVuOnlhKCJzY2hlbWEuanNvbi50aGVuIiwnVGhlICJpZiIgc3Vic2NoZW1hIGlzIHVzZWQgZm9yIHZhbGlkYXRpb24gd2hlbiB0aGUgImlmIiBzdWJzY2hlbWEgc3VjY2VlZHMuJyksZWxzZTp5YSgic2NoZW1hLmpzb24uZWxzZSIsJ1RoZSAiZWxzZSIgc3Vic2NoZW1hIGlzIHVzZWQgZm9yIHZhbGlkYXRpb24gd2hlbiB0aGUgImlmIiBzdWJzY2hlbWEgZmFpbHMuJyl9O2ZvcihiYSBpbiBDYS5zY2hlbWFzKWZvcihwYSBpbihkYT1DYS5zY2hlbWFzW2JhXSkucHJvcGVydGllcykiYm9vbGVhbiI9PXR5cGVvZihtYT1kYS5wcm9wZXJ0aWVzW3BhXSkmJihtYT1kYS5wcm9wZXJ0aWVzW3BhXT17fSksKGdhPXdhW3BhXSk/bWEuZGVzY3JpcHRpb249Z2E6Y29uc29sZS5sb2coIiIuY29uY2F0KHBhLCI6IGxvY2FsaXplKCdzY2hlbWEuanNvbi4iKS5jb25jYXQocGEsJ1wnLCAiIiknKSk7dmE9KCgpPT57dmFyIGU9ezQ3MDplPT57ZnVuY3Rpb24gdChlKXtpZigic3RyaW5nIiE9dHlwZW9mIGUpdGhyb3cgbmV3IFR5cGVFcnJvcigiUGF0aCBtdXN0IGJlIGEgc3RyaW5nLiBSZWNlaXZlZCAiK0pTT04uc3RyaW5naWZ5KGUpKX1mdW5jdGlvbiBuKGUsdCl7Zm9yKHZhciBuLHI9IiIsaT0wLG89LTEsYT0wLHM9MDtzPD1lLmxlbmd0aDsrK3Mpe2lmKHM8ZS5sZW5ndGgpbj1lLmNoYXJDb2RlQXQocyk7ZWxzZXtpZig0Nz09PW4pYnJlYWs7bj00N31pZig0Nz09PW4pe2lmKG89PT1zLTF8fDE9PT1hKTtlbHNlIGlmKG8hPT1zLTEmJjI9PT1hKXtpZihyLmxlbmd0aDwyfHwyIT09aXx8NDYhPT1yLmNoYXJDb2RlQXQoci5sZW5ndGgtMSl8fDQ2IT09ci5jaGFyQ29kZUF0KHIubGVuZ3RoLTIpKWlmKHIubGVuZ3RoPjIpe3ZhciBjPXIubGFzdEluZGV4T2YoIi8iKTtpZihjIT09ci5sZW5ndGgtMSl7LTE9PT1jPyhyPSIiLGk9MCk6aT0ocj1yLnNsaWNlKDAsYykpLmxlbmd0aC0xLXIubGFzdEluZGV4T2YoIi8iKSxvPXMsYT0wO2NvbnRpbnVlfX1lbHNlIGlmKDI9PT1yLmxlbmd0aHx8MT09PXIubGVuZ3RoKXtyPSIiLGk9MCxvPXMsYT0wO2NvbnRpbnVlfXQmJihyLmxlbmd0aD4wP3IrPSIvLi4iOnI9Ii4uIixpPTIpfWVsc2Ugci5sZW5ndGg+MD9yKz0iLyIrZS5zbGljZShvKzEscyk6cj1lLnNsaWNlKG8rMSxzKSxpPXMtby0xO289cyxhPTB9ZWxzZSA0Nj09PW4mJi0xIT09YT8rK2E6YT0tMX1yZXR1cm4gcn12YXIgcj17cmVzb2x2ZTpmdW5jdGlvbigpe2Zvcih2YXIgZSxyPSIiLGk9ITEsbz1hcmd1bWVudHMubGVuZ3RoLTE7bz49LTEmJiFpO28tLSl7dmFyIGE7bz49MD9hPWFyZ3VtZW50c1tvXToodm9pZCAwPT09ZSYmKGU9cHJvY2Vzcy5jd2QoKSksYT1lKSx0KGEpLDAhPT1hLmxlbmd0aCYmKHI9YSsiLyIrcixpPTQ3PT09YS5jaGFyQ29kZUF0KDApKX1yZXR1cm4gcj1uKHIsIWkpLGk/ci5sZW5ndGg+MD8iLyIrcjoiLyI6ci5sZW5ndGg+MD9yOiIuIn0sbm9ybWFsaXplOmZ1bmN0aW9uKGUpe2lmKHQoZSksMD09PWUubGVuZ3RoKXJldHVybiIuIjt2YXIgcj00Nz09PWUuY2hhckNvZGVBdCgwKSxpPTQ3PT09ZS5jaGFyQ29kZUF0KGUubGVuZ3RoLTEpO3JldHVybiAwIT09KGU9bihlLCFyKSkubGVuZ3RofHxyfHwoZT0iLiIpLGUubGVuZ3RoPjAmJmkmJihlKz0iLyIpLHI/Ii8iK2U6ZX0saXNBYnNvbHV0ZTpmdW5jdGlvbihlKXtyZXR1cm4gdChlKSxlLmxlbmd0aD4wJiY0Nz09PWUuY2hhckNvZGVBdCgwKX0sam9pbjpmdW5jdGlvbigpe2lmKDA9PT1hcmd1bWVudHMubGVuZ3RoKXJldHVybiIuIjtmb3IodmFyIGUsbj0wO248YXJndW1lbnRzLmxlbmd0aDsrK24pe3ZhciBpPWFyZ3VtZW50c1tuXTt0KGkpLGkubGVuZ3RoPjAmJih2b2lkIDA9PT1lP2U9aTplKz0iLyIraSl9cmV0dXJuIHZvaWQgMD09PWU/Ii4iOnIubm9ybWFsaXplKGUpfSxyZWxhdGl2ZTpmdW5jdGlvbihlLG4pe2lmKHQoZSksdChuKSxlPT09bilyZXR1cm4iIjtpZigoZT1yLnJlc29sdmUoZSkpPT09KG49ci5yZXNvbHZlKG4pKSlyZXR1cm4iIjtmb3IodmFyIGk9MTtpPGUubGVuZ3RoJiY0Nz09PWUuY2hhckNvZGVBdChpKTsrK2kpO2Zvcih2YXIgbz1lLmxlbmd0aCxhPW8taSxzPTE7czxuLmxlbmd0aCYmNDc9PT1uLmNoYXJDb2RlQXQocyk7KytzKTtmb3IodmFyIGM9bi5sZW5ndGgtcyxsPWE8Yz9hOmMsdT0tMSxoPTA7aDw9bDsrK2gpe2lmKGg9PT1sKXtpZihjPmwpe2lmKDQ3PT09bi5jaGFyQ29kZUF0KHMraCkpcmV0dXJuIG4uc2xpY2UocytoKzEpO2lmKDA9PT1oKXJldHVybiBuLnNsaWNlKHMraCl9ZWxzZSBhPmwmJig0Nz09PWUuY2hhckNvZGVBdChpK2gpP3U9aDowPT09aCYmKHU9MCkpO2JyZWFrfXZhciBmPWUuY2hhckNvZGVBdChpK2gpO2lmKGYhPT1uLmNoYXJDb2RlQXQocytoKSlicmVhazs0Nz09PWYmJih1PWgpfXZhciBkPSIiO2ZvcihoPWkrdSsxO2g8PW87KytoKWghPT1vJiY0NyE9PWUuY2hhckNvZGVBdChoKXx8KDA9PT1kLmxlbmd0aD9kKz0iLi4iOmQrPSIvLi4iKTtyZXR1cm4gZC5sZW5ndGg+MD9kK24uc2xpY2Uocyt1KToocys9dSw0Nz09PW4uY2hhckNvZGVBdChzKSYmKytzLG4uc2xpY2UocykpfSxfbWFrZUxvbmc6ZnVuY3Rpb24oZSl7cmV0dXJuIGV9LGRpcm5hbWU6ZnVuY3Rpb24oZSl7aWYodChlKSwwPT09ZS5sZW5ndGgpcmV0dXJuIi4iO2Zvcih2YXIgbj1lLmNoYXJDb2RlQXQoMCkscj00Nz09PW4saT0tMSxvPSEwLGE9ZS5sZW5ndGgtMTthPj0xOy0tYSlpZig0Nz09PShuPWUuY2hhckNvZGVBdChhKSkpe2lmKCFvKXtpPWE7YnJlYWt9fWVsc2Ugbz0hMTtyZXR1cm4tMT09PWk/cj8iLyI6Ii4iOnImJjE9PT1pPyIvLyI6ZS5zbGljZSgwLGkpfSxiYXNlbmFtZTpmdW5jdGlvbihlLG4pe2lmKHZvaWQgMCE9PW4mJiJzdHJpbmciIT10eXBlb2Ygbil0aHJvdyBuZXcgVHlwZUVycm9yKCciZXh0IiBhcmd1bWVudCBtdXN0IGJlIGEgc3RyaW5nJyk7dChlKTt2YXIgcixpPTAsbz0tMSxhPSEwO2lmKHZvaWQgMCE9PW4mJm4ubGVuZ3RoPjAmJm4ubGVuZ3RoPD1lLmxlbmd0aCl7aWYobi5sZW5ndGg9PT1lLmxlbmd0aCYmbj09PWUpcmV0dXJuIiI7dmFyIHM9bi5sZW5ndGgtMSxjPS0xO2ZvcihyPWUubGVuZ3RoLTE7cj49MDstLXIpe3ZhciBsPWUuY2hhckNvZGVBdChyKTtpZig0Nz09PWwpe2lmKCFhKXtpPXIrMTticmVha319ZWxzZS0xPT09YyYmKGE9ITEsYz1yKzEpLHM+PTAmJihsPT09bi5jaGFyQ29kZUF0KHMpPy0xPT0tLXMmJihvPXIpOihzPS0xLG89YykpfXJldHVybiBpPT09bz9vPWM6LTE9PT1vJiYobz1lLmxlbmd0aCksZS5zbGljZShpLG8pfWZvcihyPWUubGVuZ3RoLTE7cj49MDstLXIpaWYoNDc9PT1lLmNoYXJDb2RlQXQocikpe2lmKCFhKXtpPXIrMTticmVha319ZWxzZS0xPT09byYmKGE9ITEsbz1yKzEpO3JldHVybi0xPT09bz8iIjplLnNsaWNlKGksbyl9LGV4dG5hbWU6ZnVuY3Rpb24oZSl7dChlKTtmb3IodmFyIG49LTEscj0wLGk9LTEsbz0hMCxhPTAscz1lLmxlbmd0aC0xO3M+PTA7LS1zKXt2YXIgYz1lLmNoYXJDb2RlQXQocyk7aWYoNDchPT1jKS0xPT09aSYmKG89ITEsaT1zKzEpLDQ2PT09Yz8tMT09PW4/bj1zOjEhPT1hJiYoYT0xKTotMSE9PW4mJihhPS0xKTtlbHNlIGlmKCFvKXtyPXMrMTticmVha319cmV0dXJuLTE9PT1ufHwtMT09PWl8fDA9PT1hfHwxPT09YSYmbj09PWktMSYmbj09PXIrMT8iIjplLnNsaWNlKG4saSl9LGZvcm1hdDpmdW5jdGlvbihlKXtpZihudWxsPT09ZXx8Im9iamVjdCIhPXR5cGVvZiBlKXRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSAicGF0aE9iamVjdCIgYXJndW1lbnQgbXVzdCBiZSBvZiB0eXBlIE9iamVjdC4gUmVjZWl2ZWQgdHlwZSAnK3R5cGVvZiBlKTtyZXR1cm4gbj0odD1lKS5kaXJ8fHQucm9vdCxyPXQuYmFzZXx8KHQubmFtZXx8IiIpKyh0LmV4dHx8IiIpLG4/bj09PXQucm9vdD9uK3I6bisiLyIrcjpyO3ZhciB0LG4scn0scGFyc2U6ZnVuY3Rpb24oZSl7dChlKTt2YXIgbj17cm9vdDoiIixkaXI6IiIsYmFzZToiIixleHQ6IiIsbmFtZToiIn07aWYoMD09PWUubGVuZ3RoKXJldHVybiBuO3ZhciByLGk9ZS5jaGFyQ29kZUF0KDApLG89NDc9PT1pO28/KG4ucm9vdD0iLyIscj0xKTpyPTA7Zm9yKHZhciBhPS0xLHM9MCxjPS0xLGw9ITAsdT1lLmxlbmd0aC0xLGg9MDt1Pj1yOy0tdSlpZig0NyE9PShpPWUuY2hhckNvZGVBdCh1KSkpLTE9PT1jJiYobD0hMSxjPXUrMSksNDY9PT1pPy0xPT09YT9hPXU6MSE9PWgmJihoPTEpOi0xIT09YSYmKGg9LTEpO2Vsc2UgaWYoIWwpe3M9dSsxO2JyZWFrfXJldHVybi0xPT09YXx8LTE9PT1jfHwwPT09aHx8MT09PWgmJmE9PT1jLTEmJmE9PT1zKzE/LTEhPT1jJiYobi5iYXNlPW4ubmFtZT0wPT09cyYmbz9lLnNsaWNlKDEsYyk6ZS5zbGljZShzLGMpKTooMD09PXMmJm8/KG4ubmFtZT1lLnNsaWNlKDEsYSksbi5iYXNlPWUuc2xpY2UoMSxjKSk6KG4ubmFtZT1lLnNsaWNlKHMsYSksbi5iYXNlPWUuc2xpY2UocyxjKSksbi5leHQ9ZS5zbGljZShhLGMpKSxzPjA/bi5kaXI9ZS5zbGljZSgwLHMtMSk6byYmKG4uZGlyPSIvIiksbn0sc2VwOiIvIixkZWxpbWl0ZXI6IjoiLHdpbjMyOm51bGwscG9zaXg6bnVsbH07ci5wb3NpeD1yLGUuZXhwb3J0cz1yfSw0NDc6KGUsdCxuKT0+e3ZhciByO2lmKG4ucih0KSxuLmQodCx7VVJJOigpPT5nLFV0aWxzOigpPT54fSksIm9iamVjdCI9PXR5cGVvZiBwcm9jZXNzKXI9IndpbjMyIj09PXByb2Nlc3MucGxhdGZvcm07ZWxzZSBpZigib2JqZWN0Ij09dHlwZW9mIG5hdmlnYXRvcil7dmFyIGk9bmF2aWdhdG9yLnVzZXJBZ2VudDtyPWkuaW5kZXhPZigiV2luZG93cyIpPj0wfXZhciBvLGEscz0obz1mdW5jdGlvbihlLHQpe3JldHVybihvPU9iamVjdC5zZXRQcm90b3R5cGVPZnx8e19fcHJvdG9fXzpbXX1pbnN0YW5jZW9mIEFycmF5JiZmdW5jdGlvbihlLHQpe2UuX19wcm90b19fPXR9fHxmdW5jdGlvbihlLHQpe2Zvcih2YXIgbiBpbiB0KU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0LG4pJiYoZVtuXT10W25dKX0pKGUsdCl9LGZ1bmN0aW9uKGUsdCl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHQmJm51bGwhPT10KXRocm93IG5ldyBUeXBlRXJyb3IoIkNsYXNzIGV4dGVuZHMgdmFsdWUgIitTdHJpbmcodCkrIiBpcyBub3QgYSBjb25zdHJ1Y3RvciBvciBudWxsIik7ZnVuY3Rpb24gbigpe3RoaXMuY29uc3RydWN0b3I9ZX1vKGUsdCksZS5wcm90b3R5cGU9bnVsbD09PXQ/T2JqZWN0LmNyZWF0ZSh0KToobi5wcm90b3R5cGU9dC5wcm90b3R5cGUsbmV3IG4pfSksYz0vXlx3W1x3XGQrLi1dKiQvLGw9L15cLy8sdT0vXlwvXC8vO2Z1bmN0aW9uIGgoZSx0KXtpZighZS5zY2hlbWUmJnQpdGhyb3cgbmV3IEVycm9yKCdbVXJpRXJyb3JdOiBTY2hlbWUgaXMgbWlzc2luZzoge3NjaGVtZTogIiIsIGF1dGhvcml0eTogIicuY29uY2F0KGUuYXV0aG9yaXR5LCciLCBwYXRoOiAiJykuY29uY2F0KGUucGF0aCwnIiwgcXVlcnk6ICInKS5jb25jYXQoZS5xdWVyeSwnIiwgZnJhZ21lbnQ6ICInKS5jb25jYXQoZS5mcmFnbWVudCwnIn0nKSk7aWYoZS5zY2hlbWUmJiFjLnRlc3QoZS5zY2hlbWUpKXRocm93IG5ldyBFcnJvcigiW1VyaUVycm9yXTogU2NoZW1lIGNvbnRhaW5zIGlsbGVnYWwgY2hhcmFjdGVycy4iKTtpZihlLnBhdGgpaWYoZS5hdXRob3JpdHkpe2lmKCFsLnRlc3QoZS5wYXRoKSl0aHJvdyBuZXcgRXJyb3IoJ1tVcmlFcnJvcl06IElmIGEgVVJJIGNvbnRhaW5zIGFuIGF1dGhvcml0eSBjb21wb25lbnQsIHRoZW4gdGhlIHBhdGggY29tcG9uZW50IG11c3QgZWl0aGVyIGJlIGVtcHR5IG9yIGJlZ2luIHdpdGggYSBzbGFzaCAoIi8iKSBjaGFyYWN0ZXInKX1lbHNlIGlmKHUudGVzdChlLnBhdGgpKXRocm93IG5ldyBFcnJvcignW1VyaUVycm9yXTogSWYgYSBVUkkgZG9lcyBub3QgY29udGFpbiBhbiBhdXRob3JpdHkgY29tcG9uZW50LCB0aGVuIHRoZSBwYXRoIGNhbm5vdCBiZWdpbiB3aXRoIHR3byBzbGFzaCBjaGFyYWN0ZXJzICgiLy8iKScpfXZhciBmPSIiLGQ9Ii8iLG09L14oKFteOi8/I10rPyk6KT8oXC9cLyhbXi8/I10qKSk/KFtePyNdKikoXD8oW14jXSopKT8oIyguKikpPy8sZz1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSx0LG4scixpLG8pe3ZhciBhLHM7dm9pZCAwPT09byYmKG89ITEpLCJvYmplY3QiPT10eXBlb2YgZT8odGhpcy5zY2hlbWU9ZS5zY2hlbWV8fGYsdGhpcy5hdXRob3JpdHk9ZS5hdXRob3JpdHl8fGYsdGhpcy5wYXRoPWUucGF0aHx8Zix0aGlzLnF1ZXJ5PWUucXVlcnl8fGYsdGhpcy5mcmFnbWVudD1lLmZyYWdtZW50fHxmKToodGhpcy5zY2hlbWU9KHM9bywoYT1lKXx8cz9hOiJmaWxlIiksdGhpcy5hdXRob3JpdHk9dHx8Zix0aGlzLnBhdGg9ZnVuY3Rpb24oZSx0KXtzd2l0Y2goZSl7Y2FzZSJodHRwcyI6Y2FzZSJodHRwIjpjYXNlImZpbGUiOnQ/dFswXSE9PWQmJih0PWQrdCk6dD1kfXJldHVybiB0fSh0aGlzLnNjaGVtZSxufHxmKSx0aGlzLnF1ZXJ5PXJ8fGYsdGhpcy5mcmFnbWVudD1pfHxmLGgodGhpcyxvKSl9cmV0dXJuIGUuaXNVcmk9ZnVuY3Rpb24odCl7cmV0dXJuIHQgaW5zdGFuY2VvZiBlfHwhIXQmJiJzdHJpbmciPT10eXBlb2YgdC5hdXRob3JpdHkmJiJzdHJpbmciPT10eXBlb2YgdC5mcmFnbWVudCYmInN0cmluZyI9PXR5cGVvZiB0LnBhdGgmJiJzdHJpbmciPT10eXBlb2YgdC5xdWVyeSYmInN0cmluZyI9PXR5cGVvZiB0LnNjaGVtZSYmInN0cmluZyI9PXR5cGVvZiB0LmZzUGF0aCYmImZ1bmN0aW9uIj09dHlwZW9mIHQud2l0aCYmImZ1bmN0aW9uIj09dHlwZW9mIHQudG9TdHJpbmd9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwiZnNQYXRoIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHcodGhpcywhMSl9LGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEwfSksZS5wcm90b3R5cGUud2l0aD1mdW5jdGlvbihlKXtpZighZSlyZXR1cm4gdGhpczt2YXIgdD1lLnNjaGVtZSxuPWUuYXV0aG9yaXR5LHI9ZS5wYXRoLGk9ZS5xdWVyeSxvPWUuZnJhZ21lbnQ7cmV0dXJuIHZvaWQgMD09PXQ/dD10aGlzLnNjaGVtZTpudWxsPT09dCYmKHQ9Ziksdm9pZCAwPT09bj9uPXRoaXMuYXV0aG9yaXR5Om51bGw9PT1uJiYobj1mKSx2b2lkIDA9PT1yP3I9dGhpcy5wYXRoOm51bGw9PT1yJiYocj1mKSx2b2lkIDA9PT1pP2k9dGhpcy5xdWVyeTpudWxsPT09aSYmKGk9Ziksdm9pZCAwPT09bz9vPXRoaXMuZnJhZ21lbnQ6bnVsbD09PW8mJihvPWYpLHQ9PT10aGlzLnNjaGVtZSYmbj09PXRoaXMuYXV0aG9yaXR5JiZyPT09dGhpcy5wYXRoJiZpPT09dGhpcy5xdWVyeSYmbz09PXRoaXMuZnJhZ21lbnQ/dGhpczpuZXcgYih0LG4scixpLG8pfSxlLnBhcnNlPWZ1bmN0aW9uKGUsdCl7dm9pZCAwPT09dCYmKHQ9ITEpO3ZhciBuPW0uZXhlYyhlKTtyZXR1cm4gbj9uZXcgYihuWzJdfHxmLEUobls0XXx8ZiksRShuWzVdfHxmKSxFKG5bN118fGYpLEUobls5XXx8ZiksdCk6bmV3IGIoZixmLGYsZixmKX0sZS5maWxlPWZ1bmN0aW9uKGUpe3ZhciB0PWY7aWYociYmKGU9ZS5yZXBsYWNlKC9cXC9nLGQpKSxlWzBdPT09ZCYmZVsxXT09PWQpe3ZhciBuPWUuaW5kZXhPZihkLDIpOy0xPT09bj8odD1lLnN1YnN0cmluZygyKSxlPWQpOih0PWUuc3Vic3RyaW5nKDIsbiksZT1lLnN1YnN0cmluZyhuKXx8ZCl9cmV0dXJuIG5ldyBiKCJmaWxlIix0LGUsZixmKX0sZS5mcm9tPWZ1bmN0aW9uKGUpe3ZhciB0PW5ldyBiKGUuc2NoZW1lLGUuYXV0aG9yaXR5LGUucGF0aCxlLnF1ZXJ5LGUuZnJhZ21lbnQpO3JldHVybiBoKHQsITApLHR9LGUucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKGUpe3JldHVybiB2b2lkIDA9PT1lJiYoZT0hMSksXyh0aGlzLGUpfSxlLnByb3RvdHlwZS50b0pTT049ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30sZS5yZXZpdmU9ZnVuY3Rpb24odCl7aWYodCl7aWYodCBpbnN0YW5jZW9mIGUpcmV0dXJuIHQ7dmFyIG49bmV3IGIodCk7cmV0dXJuIG4uX2Zvcm1hdHRlZD10LmV4dGVybmFsLG4uX2ZzUGF0aD10Ll9zZXA9PT1wP3QuZnNQYXRoOm51bGwsbn1yZXR1cm4gdH0sZX0oKSxwPXI/MTp2b2lkIDAsYj1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KCl7dmFyIHQ9bnVsbCE9PWUmJmUuYXBwbHkodGhpcyxhcmd1bWVudHMpfHx0aGlzO3JldHVybiB0Ll9mb3JtYXR0ZWQ9bnVsbCx0Ll9mc1BhdGg9bnVsbCx0fXJldHVybiBzKHQsZSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJmc1BhdGgiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZnNQYXRofHwodGhpcy5fZnNQYXRoPXcodGhpcywhMSkpLHRoaXMuX2ZzUGF0aH0sZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9KSx0LnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbihlKXtyZXR1cm4gdm9pZCAwPT09ZSYmKGU9ITEpLGU/Xyh0aGlzLCEwKToodGhpcy5fZm9ybWF0dGVkfHwodGhpcy5fZm9ybWF0dGVkPV8odGhpcywhMSkpLHRoaXMuX2Zvcm1hdHRlZCl9LHQucHJvdG90eXBlLnRvSlNPTj1mdW5jdGlvbigpe3ZhciBlPXskbWlkOjF9O3JldHVybiB0aGlzLl9mc1BhdGgmJihlLmZzUGF0aD10aGlzLl9mc1BhdGgsZS5fc2VwPXApLHRoaXMuX2Zvcm1hdHRlZCYmKGUuZXh0ZXJuYWw9dGhpcy5fZm9ybWF0dGVkKSx0aGlzLnBhdGgmJihlLnBhdGg9dGhpcy5wYXRoKSx0aGlzLnNjaGVtZSYmKGUuc2NoZW1lPXRoaXMuc2NoZW1lKSx0aGlzLmF1dGhvcml0eSYmKGUuYXV0aG9yaXR5PXRoaXMuYXV0aG9yaXR5KSx0aGlzLnF1ZXJ5JiYoZS5xdWVyeT10aGlzLnF1ZXJ5KSx0aGlzLmZyYWdtZW50JiYoZS5mcmFnbWVudD10aGlzLmZyYWdtZW50KSxlfSx0fShnKSx2PSgoYT17fSlbNThdPSIlM0EiLGFbNDddPSIlMkYiLGFbNjNdPSIlM0YiLGFbMzVdPSIlMjMiLGFbOTFdPSIlNUIiLGFbOTNdPSIlNUQiLGFbNjRdPSIlNDAiLGFbMzNdPSIlMjEiLGFbMzZdPSIlMjQiLGFbMzhdPSIlMjYiLGFbMzldPSIlMjciLGFbNDBdPSIlMjgiLGFbNDFdPSIlMjkiLGFbNDJdPSIlMkEiLGFbNDNdPSIlMkIiLGFbNDRdPSIlMkMiLGFbNTldPSIlM0IiLGFbNjFdPSIlM0QiLGFbMzJdPSIlMjAiLGEpO2Z1bmN0aW9uIHkoZSx0KXtmb3IodmFyIG49dm9pZCAwLHI9LTEsaT0wO2k8ZS5sZW5ndGg7aSsrKXt2YXIgbz1lLmNoYXJDb2RlQXQoaSk7aWYobz49OTcmJm88PTEyMnx8bz49NjUmJm88PTkwfHxvPj00OCYmbzw9NTd8fDQ1PT09b3x8NDY9PT1vfHw5NT09PW98fDEyNj09PW98fHQmJjQ3PT09byktMSE9PXImJihuKz1lbmNvZGVVUklDb21wb25lbnQoZS5zdWJzdHJpbmcocixpKSkscj0tMSksdm9pZCAwIT09biYmKG4rPWUuY2hhckF0KGkpKTtlbHNle3ZvaWQgMD09PW4mJihuPWUuc3Vic3RyKDAsaSkpO3ZhciBhPXZbb107dm9pZCAwIT09YT8oLTEhPT1yJiYobis9ZW5jb2RlVVJJQ29tcG9uZW50KGUuc3Vic3RyaW5nKHIsaSkpLHI9LTEpLG4rPWEpOi0xPT09ciYmKHI9aSl9fXJldHVybi0xIT09ciYmKG4rPWVuY29kZVVSSUNvbXBvbmVudChlLnN1YnN0cmluZyhyKSkpLHZvaWQgMCE9PW4/bjplfWZ1bmN0aW9uIEMoZSl7Zm9yKHZhciB0PXZvaWQgMCxuPTA7bjxlLmxlbmd0aDtuKyspe3ZhciByPWUuY2hhckNvZGVBdChuKTszNT09PXJ8fDYzPT09cj8odm9pZCAwPT09dCYmKHQ9ZS5zdWJzdHIoMCxuKSksdCs9dltyXSk6dm9pZCAwIT09dCYmKHQrPWVbbl0pfXJldHVybiB2b2lkIDAhPT10P3Q6ZX1mdW5jdGlvbiB3KGUsdCl7dmFyIG47cmV0dXJuIG49ZS5hdXRob3JpdHkmJmUucGF0aC5sZW5ndGg+MSYmImZpbGUiPT09ZS5zY2hlbWU/Ii8vIi5jb25jYXQoZS5hdXRob3JpdHkpLmNvbmNhdChlLnBhdGgpOjQ3PT09ZS5wYXRoLmNoYXJDb2RlQXQoMCkmJihlLnBhdGguY2hhckNvZGVBdCgxKT49NjUmJmUucGF0aC5jaGFyQ29kZUF0KDEpPD05MHx8ZS5wYXRoLmNoYXJDb2RlQXQoMSk+PTk3JiZlLnBhdGguY2hhckNvZGVBdCgxKTw9MTIyKSYmNTg9PT1lLnBhdGguY2hhckNvZGVBdCgyKT90P2UucGF0aC5zdWJzdHIoMSk6ZS5wYXRoWzFdLnRvTG93ZXJDYXNlKCkrZS5wYXRoLnN1YnN0cigyKTplLnBhdGgsciYmKG49bi5yZXBsYWNlKC9cLy9nLCJcXCIpKSxufWZ1bmN0aW9uIF8oZSx0KXt2YXIgbj10P0M6eSxyPSIiLGk9ZS5zY2hlbWUsbz1lLmF1dGhvcml0eSxhPWUucGF0aCxzPWUucXVlcnksYz1lLmZyYWdtZW50O2lmKGkmJihyKz1pLHIrPSI6IiksKG98fCJmaWxlIj09PWkpJiYocis9ZCxyKz1kKSxvKXt2YXIgbD1vLmluZGV4T2YoIkAiKTtpZigtMSE9PWwpe3ZhciB1PW8uc3Vic3RyKDAsbCk7bz1vLnN1YnN0cihsKzEpLC0xPT09KGw9dS5pbmRleE9mKCI6IikpP3IrPW4odSwhMSk6KHIrPW4odS5zdWJzdHIoMCxsKSwhMSkscis9IjoiLHIrPW4odS5zdWJzdHIobCsxKSwhMSkpLHIrPSJAIn0tMT09PShsPShvPW8udG9Mb3dlckNhc2UoKSkuaW5kZXhPZigiOiIpKT9yKz1uKG8sITEpOihyKz1uKG8uc3Vic3RyKDAsbCksITEpLHIrPW8uc3Vic3RyKGwpKX1pZihhKXtpZihhLmxlbmd0aD49MyYmNDc9PT1hLmNoYXJDb2RlQXQoMCkmJjU4PT09YS5jaGFyQ29kZUF0KDIpKShoPWEuY2hhckNvZGVBdCgxKSk+PTY1JiZoPD05MCYmKGE9Ii8iLmNvbmNhdChTdHJpbmcuZnJvbUNoYXJDb2RlKGgrMzIpLCI6IikuY29uY2F0KGEuc3Vic3RyKDMpKSk7ZWxzZSBpZihhLmxlbmd0aD49MiYmNTg9PT1hLmNoYXJDb2RlQXQoMSkpe3ZhciBoOyhoPWEuY2hhckNvZGVBdCgwKSk+PTY1JiZoPD05MCYmKGE9IiIuY29uY2F0KFN0cmluZy5mcm9tQ2hhckNvZGUoaCszMiksIjoiKS5jb25jYXQoYS5zdWJzdHIoMikpKX1yKz1uKGEsITApfXJldHVybiBzJiYocis9Ij8iLHIrPW4ocywhMSkpLGMmJihyKz0iIyIscis9dD9jOnkoYywhMSkpLHJ9ZnVuY3Rpb24gUyhlKXt0cnl7cmV0dXJuIGRlY29kZVVSSUNvbXBvbmVudChlKX1jYXRjaCh0KXtyZXR1cm4gZS5sZW5ndGg+Mz9lLnN1YnN0cigwLDMpK1MoZS5zdWJzdHIoMykpOmV9fXZhciBBPS8oJVswLTlBLVphLXpdWzAtOUEtWmEtel0pKy9nO2Z1bmN0aW9uIEUoZSl7cmV0dXJuIGUubWF0Y2goQSk/ZS5yZXBsYWNlKEEsKGZ1bmN0aW9uKGUpe3JldHVybiBTKGUpfSkpOmV9dmFyIHgsTixrPW4oNDcwKSxMPWZ1bmN0aW9uKGUsdCxuKXtpZihufHwyPT09YXJndW1lbnRzLmxlbmd0aClmb3IodmFyIHIsaT0wLG89dC5sZW5ndGg7aTxvO2krKykhciYmaSBpbiB0fHwocnx8KHI9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwodCwwLGkpKSxyW2ldPXRbaV0pO3JldHVybiBlLmNvbmNhdChyfHxBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbCh0KSl9LFQ9ay5wb3NpeHx8azsoTj14fHwoeD17fSkpLmpvaW5QYXRoPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD1bXSxuPTE7bjxhcmd1bWVudHMubGVuZ3RoO24rKyl0W24tMV09YXJndW1lbnRzW25dO3JldHVybiBlLndpdGgoe3BhdGg6VC5qb2luLmFwcGx5KFQsTChbZS5wYXRoXSx0LCExKSl9KX0sTi5yZXNvbHZlUGF0aD1mdW5jdGlvbihlKXtmb3IodmFyIHQ9W10sbj0xO248YXJndW1lbnRzLmxlbmd0aDtuKyspdFtuLTFdPWFyZ3VtZW50c1tuXTt2YXIgcj1lLnBhdGh8fCIvIjtyZXR1cm4gZS53aXRoKHtwYXRoOlQucmVzb2x2ZS5hcHBseShULEwoW3JdLHQsITEpKX0pfSxOLmRpcm5hbWU9ZnVuY3Rpb24oZSl7dmFyIHQ9VC5kaXJuYW1lKGUucGF0aCk7cmV0dXJuIDE9PT10Lmxlbmd0aCYmNDY9PT10LmNoYXJDb2RlQXQoMCk/ZTplLndpdGgoe3BhdGg6dH0pfSxOLmJhc2VuYW1lPWZ1bmN0aW9uKGUpe3JldHVybiBULmJhc2VuYW1lKGUucGF0aCl9LE4uZXh0bmFtZT1mdW5jdGlvbihlKXtyZXR1cm4gVC5leHRuYW1lKGUucGF0aCl9fX0sdD17fTtmdW5jdGlvbiBuKHIpe2lmKHRbcl0pcmV0dXJuIHRbcl0uZXhwb3J0czt2YXIgaT10W3JdPXtleHBvcnRzOnt9fTtyZXR1cm4gZVtyXShpLGkuZXhwb3J0cyxuKSxpLmV4cG9ydHN9cmV0dXJuIG4uZD0oZSx0KT0+e2Zvcih2YXIgciBpbiB0KW4ubyh0LHIpJiYhbi5vKGUscikmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHIse2VudW1lcmFibGU6ITAsZ2V0OnRbcl19KX0sbi5vPShlLHQpPT5PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSx0KSxuLnI9ZT0+eyJ1bmRlZmluZWQiIT10eXBlb2YgU3ltYm9sJiZTeW1ib2wudG9TdHJpbmdUYWcmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLFN5bWJvbC50b1N0cmluZ1RhZyx7dmFsdWU6Ik1vZHVsZSJ9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSl9LG4oNDQ3KX0pKCk7dmFye1VSSTpfYSxVdGlsczpTYX09dmE7ZnVuY3Rpb24gQWEoZSx0KXtpZigic3RyaW5nIiE9dHlwZW9mIGUpdGhyb3cgbmV3IFR5cGVFcnJvcigiRXhwZWN0ZWQgYSBzdHJpbmciKTtmb3IodmFyIG4scj1TdHJpbmcoZSksaT0iIixvPSEhdCYmISF0LmV4dGVuZGVkLGE9ISF0JiYhIXQuZ2xvYnN0YXIscz0hMSxjPXQmJiJzdHJpbmciPT10eXBlb2YgdC5mbGFncz90LmZsYWdzOiIiLGw9MCx1PXIubGVuZ3RoO2w8dTtsKyspc3dpdGNoKG49cltsXSl7Y2FzZSIvIjpjYXNlIiQiOmNhc2UiXiI6Y2FzZSIrIjpjYXNlIi4iOmNhc2UiKCI6Y2FzZSIpIjpjYXNlIj0iOmNhc2UiISI6Y2FzZSJ8IjppKz0iXFwiK247YnJlYWs7Y2FzZSI/IjppZihvKXtpKz0iLiI7YnJlYWt9Y2FzZSJbIjpjYXNlIl0iOmlmKG8pe2krPW47YnJlYWt9Y2FzZSJ7IjppZihvKXtzPSEwLGkrPSIoIjticmVha31jYXNlIn0iOmlmKG8pe3M9ITEsaSs9IikiO2JyZWFrfWNhc2UiLCI6aWYocyl7aSs9InwiO2JyZWFrfWkrPSJcXCIrbjticmVhaztjYXNlIioiOmZvcih2YXIgaD1yW2wtMV0sZj0xOyIqIj09PXJbbCsxXTspZisrLGwrKzt2YXIgZD1yW2wrMV07aWYoYSlmPjEmJigiLyI9PT1ofHx2b2lkIDA9PT1ofHwieyI9PT1ofHwiLCI9PT1oKSYmKCIvIj09PWR8fHZvaWQgMD09PWR8fCIsIj09PWR8fCJ9Ij09PWQpPygiLyI9PT1kP2wrKzoiLyI9PT1oJiZpLmVuZHNXaXRoKCJcXC8iKSYmKGk9aS5zdWJzdHIoMCxpLmxlbmd0aC0yKSksaSs9IigoPzpbXi9dKig/Oi98JCkpKikiKTppKz0iKFteL10qKSI7ZWxzZSBpKz0iLioiO2JyZWFrO2RlZmF1bHQ6aSs9bn1yZXR1cm4gYyYmfmMuaW5kZXhPZigiZyIpfHwoaT0iXiIraSsiJCIpLG5ldyBSZWdFeHAoaSxjKX12YXIgRWEseGE9Tm8oKSxOYT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSx0KXt0aGlzLmdsb2JXcmFwcGVycz1bXTt0cnl7Zm9yKHZhciBuPTAscj1lO248ci5sZW5ndGg7bisrKXt2YXIgaT1yW25dLG89IiEiIT09aVswXTtvfHwoaT1pLnN1YnN0cmluZygxKSksaS5sZW5ndGg+MCYmKCIvIj09PWlbMF0mJihpPWkuc3Vic3RyaW5nKDEpKSx0aGlzLmdsb2JXcmFwcGVycy5wdXNoKHtyZWdleHA6QWEoIioqLyIraSx7ZXh0ZW5kZWQ6ITAsZ2xvYnN0YXI6ITB9KSxpbmNsdWRlOm99KSl9dGhpcy51cmlzPXR9Y2F0Y2goZSl7dGhpcy5nbG9iV3JhcHBlcnMubGVuZ3RoPTAsdGhpcy51cmlzPVtdfX1yZXR1cm4gZS5wcm90b3R5cGUubWF0Y2hlc1BhdHRlcm49ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PSExLG49MCxyPXRoaXMuZ2xvYldyYXBwZXJzO248ci5sZW5ndGg7bisrKXt2YXIgaT1yW25dLG89aS5yZWdleHAsYT1pLmluY2x1ZGU7by50ZXN0KGUpJiYodD1hKX1yZXR1cm4gdH0sZS5wcm90b3R5cGUuZ2V0VVJJcz1mdW5jdGlvbigpe3JldHVybiB0aGlzLnVyaXN9LGV9KCksa2E9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsdCxuKXt0aGlzLnNlcnZpY2U9ZSx0aGlzLnVyaT10LHRoaXMuZGVwZW5kZW5jaWVzPW5ldyBTZXQsdGhpcy5hbmNob3JzPXZvaWQgMCxuJiYodGhpcy51bnJlc29sdmVkU2NoZW1hPXRoaXMuc2VydmljZS5wcm9taXNlLnJlc29sdmUobmV3IExhKG4pKSl9cmV0dXJuIGUucHJvdG90eXBlLmdldFVucmVzb2x2ZWRTY2hlbWE9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy51bnJlc29sdmVkU2NoZW1hfHwodGhpcy51bnJlc29sdmVkU2NoZW1hPXRoaXMuc2VydmljZS5sb2FkU2NoZW1hKHRoaXMudXJpKSksdGhpcy51bnJlc29sdmVkU2NoZW1hfSxlLnByb3RvdHlwZS5nZXRSZXNvbHZlZFNjaGVtYT1mdW5jdGlvbigpe3ZhciBlPXRoaXM7cmV0dXJuIHRoaXMucmVzb2x2ZWRTY2hlbWF8fCh0aGlzLnJlc29sdmVkU2NoZW1hPXRoaXMuZ2V0VW5yZXNvbHZlZFNjaGVtYSgpLnRoZW4oKGZ1bmN0aW9uKHQpe3JldHVybiBlLnNlcnZpY2UucmVzb2x2ZVNjaGVtYUNvbnRlbnQodCxlKX0pKSksdGhpcy5yZXNvbHZlZFNjaGVtYX0sZS5wcm90b3R5cGUuY2xlYXJTY2hlbWE9ZnVuY3Rpb24oKXt2YXIgZT0hIXRoaXMudW5yZXNvbHZlZFNjaGVtYTtyZXR1cm4gdGhpcy5yZXNvbHZlZFNjaGVtYT12b2lkIDAsdGhpcy51bnJlc29sdmVkU2NoZW1hPXZvaWQgMCx0aGlzLmRlcGVuZGVuY2llcy5jbGVhcigpLHRoaXMuYW5jaG9ycz12b2lkIDAsZX0sZX0oKSxMYT1mdW5jdGlvbihlLHQpe3ZvaWQgMD09PXQmJih0PVtdKSx0aGlzLnNjaGVtYT1lLHRoaXMuZXJyb3JzPXR9LFRhPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHQpe3ZvaWQgMD09PXQmJih0PVtdKSx0aGlzLnNjaGVtYT1lLHRoaXMuZXJyb3JzPXR9cmV0dXJuIGUucHJvdG90eXBlLmdldFNlY3Rpb249ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5nZXRTZWN0aW9uUmVjdXJzaXZlKGUsdGhpcy5zY2hlbWEpO2lmKHQpcmV0dXJuIEJvKHQpfSxlLnByb3RvdHlwZS5nZXRTZWN0aW9uUmVjdXJzaXZlPWZ1bmN0aW9uKGUsdCl7aWYoIXR8fCJib29sZWFuIj09dHlwZW9mIHR8fDA9PT1lLmxlbmd0aClyZXR1cm4gdDt2YXIgbj1lLnNoaWZ0KCk7aWYodC5wcm9wZXJ0aWVzJiYodC5wcm9wZXJ0aWVzW25dLDEpKXJldHVybiB0aGlzLmdldFNlY3Rpb25SZWN1cnNpdmUoZSx0LnByb3BlcnRpZXNbbl0pO2lmKHQucGF0dGVyblByb3BlcnRpZXMpZm9yKHZhciByPTAsaT1PYmplY3Qua2V5cyh0LnBhdHRlcm5Qcm9wZXJ0aWVzKTtyPGkubGVuZ3RoO3IrKyl7dmFyIG89aVtyXSxhPWhpKG8pO2lmKG51bGw9PWE/dm9pZCAwOmEudGVzdChuKSlyZXR1cm4gdGhpcy5nZXRTZWN0aW9uUmVjdXJzaXZlKGUsdC5wYXR0ZXJuUHJvcGVydGllc1tvXSl9ZWxzZXtpZigib2JqZWN0Ij09dHlwZW9mIHQuYWRkaXRpb25hbFByb3BlcnRpZXMpcmV0dXJuIHRoaXMuZ2V0U2VjdGlvblJlY3Vyc2l2ZShlLHQuYWRkaXRpb25hbFByb3BlcnRpZXMpO2lmKG4ubWF0Y2goIlswLTldKyIpKWlmKEFycmF5LmlzQXJyYXkodC5pdGVtcykpe3ZhciBzPXBhcnNlSW50KG4sMTApO2lmKCFpc05hTihzKSYmdC5pdGVtc1tzXSlyZXR1cm4gdGhpcy5nZXRTZWN0aW9uUmVjdXJzaXZlKGUsdC5pdGVtc1tzXSl9ZWxzZSBpZih0Lml0ZW1zKXJldHVybiB0aGlzLmdldFNlY3Rpb25SZWN1cnNpdmUoZSx0Lml0ZW1zKX19LGV9KCksT2E9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsdCxuKXt0aGlzLmNvbnRleHRTZXJ2aWNlPXQsdGhpcy5yZXF1ZXN0U2VydmljZT1lLHRoaXMucHJvbWlzZUNvbnN0cnVjdG9yPW58fFByb21pc2UsdGhpcy5jYWxsT25EaXNwb3NlPVtdLHRoaXMuY29udHJpYnV0aW9uU2NoZW1hcz17fSx0aGlzLmNvbnRyaWJ1dGlvbkFzc29jaWF0aW9ucz1bXSx0aGlzLnNjaGVtYXNCeUlkPXt9LHRoaXMuZmlsZVBhdHRlcm5Bc3NvY2lhdGlvbnM9W10sdGhpcy5yZWdpc3RlcmVkU2NoZW1hc0lkcz17fX1yZXR1cm4gZS5wcm90b3R5cGUuZ2V0UmVnaXN0ZXJlZFNjaGVtYUlkcz1mdW5jdGlvbihlKXtyZXR1cm4gT2JqZWN0LmtleXModGhpcy5yZWdpc3RlcmVkU2NoZW1hc0lkcykuZmlsdGVyKChmdW5jdGlvbih0KXt2YXIgbj1fYS5wYXJzZSh0KS5zY2hlbWU7cmV0dXJuInNjaGVtYXNlcnZpY2UiIT09biYmKCFlfHxlKG4pKX0pKX0sT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJwcm9taXNlIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucHJvbWlzZUNvbnN0cnVjdG9yfSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLGUucHJvdG90eXBlLmRpc3Bvc2U9ZnVuY3Rpb24oKXtmb3IoO3RoaXMuY2FsbE9uRGlzcG9zZS5sZW5ndGg+MDspdGhpcy5jYWxsT25EaXNwb3NlLnBvcCgpKCl9LGUucHJvdG90eXBlLm9uUmVzb3VyY2VDaGFuZ2U9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpczt0aGlzLmNhY2hlZFNjaGVtYUZvclJlc291cmNlPXZvaWQgMDtmb3IodmFyIG49ITEscj1bZT1NYShlKV0saT1PYmplY3Qua2V5cyh0aGlzLnNjaGVtYXNCeUlkKS5tYXAoKGZ1bmN0aW9uKGUpe3JldHVybiB0LnNjaGVtYXNCeUlkW2VdfSkpO3IubGVuZ3RoOylmb3IodmFyIG89ci5wb3AoKSxhPTA7YTxpLmxlbmd0aDthKyspe3ZhciBzPWlbYV07cyYmKHMudXJpPT09b3x8cy5kZXBlbmRlbmNpZXMuaGFzKG8pKSYmKHMudXJpIT09byYmci5wdXNoKHMudXJpKSxzLmNsZWFyU2NoZW1hKCkmJihuPSEwKSxpW2FdPXZvaWQgMCl9cmV0dXJuIG59LGUucHJvdG90eXBlLnNldFNjaGVtYUNvbnRyaWJ1dGlvbnM9ZnVuY3Rpb24oZSl7aWYoZS5zY2hlbWFzKXt2YXIgdD1lLnNjaGVtYXM7Zm9yKHZhciBuIGluIHQpe3ZhciByPU1hKG4pO3RoaXMuY29udHJpYnV0aW9uU2NoZW1hc1tyXT10aGlzLmFkZFNjaGVtYUhhbmRsZShyLHRbbl0pfX1pZihBcnJheS5pc0FycmF5KGUuc2NoZW1hQXNzb2NpYXRpb25zKSlmb3IodmFyIGk9MCxvPWUuc2NoZW1hQXNzb2NpYXRpb25zO2k8by5sZW5ndGg7aSsrKXt2YXIgYT1vW2ldLHM9YS51cmlzLm1hcChNYSksYz10aGlzLmFkZEZpbGVQYXR0ZXJuQXNzb2NpYXRpb24oYS5wYXR0ZXJuLHMpO3RoaXMuY29udHJpYnV0aW9uQXNzb2NpYXRpb25zLnB1c2goYyl9fSxlLnByb3RvdHlwZS5hZGRTY2hlbWFIYW5kbGU9ZnVuY3Rpb24oZSx0KXt2YXIgbj1uZXcga2EodGhpcyxlLHQpO3JldHVybiB0aGlzLnNjaGVtYXNCeUlkW2VdPW4sbn0sZS5wcm90b3R5cGUuZ2V0T3JBZGRTY2hlbWFIYW5kbGU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdGhpcy5zY2hlbWFzQnlJZFtlXXx8dGhpcy5hZGRTY2hlbWFIYW5kbGUoZSx0KX0sZS5wcm90b3R5cGUuYWRkRmlsZVBhdHRlcm5Bc3NvY2lhdGlvbj1mdW5jdGlvbihlLHQpe3ZhciBuPW5ldyBOYShlLHQpO3JldHVybiB0aGlzLmZpbGVQYXR0ZXJuQXNzb2NpYXRpb25zLnB1c2gobiksbn0sZS5wcm90b3R5cGUucmVnaXN0ZXJFeHRlcm5hbFNjaGVtYT1mdW5jdGlvbihlLHQsbil7dmFyIHI9TWEoZSk7cmV0dXJuIHRoaXMucmVnaXN0ZXJlZFNjaGVtYXNJZHNbcl09ITAsdGhpcy5jYWNoZWRTY2hlbWFGb3JSZXNvdXJjZT12b2lkIDAsdCYmdGhpcy5hZGRGaWxlUGF0dGVybkFzc29jaWF0aW9uKHQsW3JdKSxuP3RoaXMuYWRkU2NoZW1hSGFuZGxlKHIsbik6dGhpcy5nZXRPckFkZFNjaGVtYUhhbmRsZShyKX0sZS5wcm90b3R5cGUuY2xlYXJFeHRlcm5hbFNjaGVtYXM9ZnVuY3Rpb24oKXtmb3IodmFyIGUgaW4gdGhpcy5zY2hlbWFzQnlJZD17fSx0aGlzLmZpbGVQYXR0ZXJuQXNzb2NpYXRpb25zPVtdLHRoaXMucmVnaXN0ZXJlZFNjaGVtYXNJZHM9e30sdGhpcy5jYWNoZWRTY2hlbWFGb3JSZXNvdXJjZT12b2lkIDAsdGhpcy5jb250cmlidXRpb25TY2hlbWFzKXRoaXMuc2NoZW1hc0J5SWRbZV09dGhpcy5jb250cmlidXRpb25TY2hlbWFzW2VdLHRoaXMucmVnaXN0ZXJlZFNjaGVtYXNJZHNbZV09ITA7Zm9yKHZhciB0PTAsbj10aGlzLmNvbnRyaWJ1dGlvbkFzc29jaWF0aW9uczt0PG4ubGVuZ3RoO3QrKyl7dmFyIHI9blt0XTt0aGlzLmZpbGVQYXR0ZXJuQXNzb2NpYXRpb25zLnB1c2gocil9fSxlLnByb3RvdHlwZS5nZXRSZXNvbHZlZFNjaGVtYT1mdW5jdGlvbihlKXt2YXIgdD1NYShlKSxuPXRoaXMuc2NoZW1hc0J5SWRbdF07cmV0dXJuIG4/bi5nZXRSZXNvbHZlZFNjaGVtYSgpOnRoaXMucHJvbWlzZS5yZXNvbHZlKHZvaWQgMCl9LGUucHJvdG90eXBlLmxvYWRTY2hlbWE9ZnVuY3Rpb24oZSl7aWYoIXRoaXMucmVxdWVzdFNlcnZpY2Upe3ZhciB0PXhhKCJqc29uLnNjaGVtYS5ub3JlcXVlc3RzZXJ2aWNlIiwiVW5hYmxlIHRvIGxvYWQgc2NoZW1hIGZyb20gJ3swfScuIE5vIHNjaGVtYSByZXF1ZXN0IHNlcnZpY2UgYXZhaWxhYmxlIixQYShlKSk7cmV0dXJuIHRoaXMucHJvbWlzZS5yZXNvbHZlKG5ldyBMYSh7fSxbdF0pKX1yZXR1cm4gdGhpcy5yZXF1ZXN0U2VydmljZShlKS50aGVuKChmdW5jdGlvbih0KXtpZighdCl7dmFyIG49eGEoImpzb24uc2NoZW1hLm5vY29udGVudCIsIlVuYWJsZSB0byBsb2FkIHNjaGVtYSBmcm9tICd7MH0nOiBObyBjb250ZW50LiIsUGEoZSkpO3JldHVybiBuZXcgTGEoe30sW25dKX12YXIgcixpPVtdO3I9bmkodCxpKTt2YXIgbz1pLmxlbmd0aD9beGEoImpzb24uc2NoZW1hLmludmFsaWRGb3JtYXQiLCJVbmFibGUgdG8gcGFyc2UgY29udGVudCBmcm9tICd7MH0nOiBQYXJzZSBlcnJvciBhdCBvZmZzZXQgezF9LiIsUGEoZSksaVswXS5vZmZzZXQpXTpbXTtyZXR1cm4gbmV3IExhKHIsbyl9KSwoZnVuY3Rpb24odCl7dmFyIG49dC50b1N0cmluZygpLHI9dC50b1N0cmluZygpLnNwbGl0KCJFcnJvcjogIik7cmV0dXJuIHIubGVuZ3RoPjEmJihuPXJbMV0pLHVpKG4sIi4iKSYmKG49bi5zdWJzdHIoMCxuLmxlbmd0aC0xKSksbmV3IExhKHt9LFt4YSgianNvbi5zY2hlbWEubm9jb250ZW50IiwiVW5hYmxlIHRvIGxvYWQgc2NoZW1hIGZyb20gJ3swfSc6IHsxfS4iLFBhKGUpLG4pXSl9KSl9LGUucHJvdG90eXBlLnJlc29sdmVTY2hlbWFDb250ZW50PWZ1bmN0aW9uKGUsdCl7dmFyIG49dGhpcyxyPWUuZXJyb3JzLnNsaWNlKDApLGk9ZS5zY2hlbWE7aWYoaS4kc2NoZW1hKXt2YXIgbz1NYShpLiRzY2hlbWEpO2lmKCJodHRwOi8vanNvbi1zY2hlbWEub3JnL2RyYWZ0LTAzL3NjaGVtYSI9PT1vKXJldHVybiB0aGlzLnByb21pc2UucmVzb2x2ZShuZXcgVGEoe30sW3hhKCJqc29uLnNjaGVtYS5kcmFmdDAzLm5vdHN1cHBvcnRlZCIsIkRyYWZ0LTAzIHNjaGVtYXMgYXJlIG5vdCBzdXBwb3J0ZWQuIildKSk7Imh0dHBzOi8vanNvbi1zY2hlbWEub3JnL2RyYWZ0LzIwMTktMDkvc2NoZW1hIj09PW8/ci5wdXNoKHhhKCJqc29uLnNjaGVtYS5kcmFmdDIwMTkwOS5ub3RzdXBwb3J0ZWQiLCJEcmFmdCAyMDE5LTA5IHNjaGVtYXMgYXJlIG5vdCB5ZXQgZnVsbHkgc3VwcG9ydGVkLiIpKToiaHR0cHM6Ly9qc29uLXNjaGVtYS5vcmcvZHJhZnQvMjAyMC0xMi9zY2hlbWEiPT09byYmci5wdXNoKHhhKCJqc29uLnNjaGVtYS5kcmFmdDIwMjAxMi5ub3RzdXBwb3J0ZWQiLCJEcmFmdCAyMDIwLTEyIHNjaGVtYXMgYXJlIG5vdCB5ZXQgZnVsbHkgc3VwcG9ydGVkLiIpKX12YXIgYT10aGlzLmNvbnRleHRTZXJ2aWNlLHM9ZnVuY3Rpb24oZSx0LG4saSl7dmFyIG8sYSxzLGM7dm9pZCAwPT09aXx8MD09PWkubGVuZ3RoP289dDoiLyI9PT1pLmNoYXJBdCgwKT9vPWZ1bmN0aW9uKGUsdCl7dD1kZWNvZGVVUklDb21wb25lbnQodCk7dmFyIG49ZTtyZXR1cm4iLyI9PT10WzBdJiYodD10LnN1YnN0cmluZygxKSksdC5zcGxpdCgiLyIpLnNvbWUoKGZ1bmN0aW9uKGUpe3JldHVybiBlPWUucmVwbGFjZSgvfjEvZywiLyIpLnJlcGxhY2UoL34wL2csIn4iKSwhKG49bltlXSl9KSksbn0odCxpKTooYT10LGM9aSwocz1uKS5hbmNob3JzfHwocy5hbmNob3JzPXUoYSkpLG89cy5hbmNob3JzLmdldChjKSksbz9mdW5jdGlvbihlLHQpe2Zvcih2YXIgbiBpbiB0KXQuaGFzT3duUHJvcGVydHkobikmJiFlLmhhc093blByb3BlcnR5KG4pJiYiaWQiIT09biYmIiRpZCIhPT1uJiYoZVtuXT10W25dKX0oZSxvKTpyLnB1c2goeGEoImpzb24uc2NoZW1hLmludmFsaWRpZCIsIiRyZWYgJ3swfScgaW4gJ3sxfScgY2FuIG5vdCBiZSByZXNvbHZlZC4iLGksbi51cmkpKX0sYz1mdW5jdGlvbihlLHQsaSxvKXthJiYhL15bQS1aYS16XVtBLVphLXowLTkrXC0uK10qOlwvXC8uKi8udGVzdCh0KSYmKHQ9YS5yZXNvbHZlUmVsYXRpdmVQYXRoKHQsby51cmkpKSx0PU1hKHQpO3ZhciBjPW4uZ2V0T3JBZGRTY2hlbWFIYW5kbGUodCk7cmV0dXJuIGMuZ2V0VW5yZXNvbHZlZFNjaGVtYSgpLnRoZW4oKGZ1bmN0aW9uKG4pe2lmKG8uZGVwZW5kZW5jaWVzLmFkZCh0KSxuLmVycm9ycy5sZW5ndGgpe3ZhciBhPWk/dCsiIyIraTp0O3IucHVzaCh4YSgianNvbi5zY2hlbWEucHJvYmxlbWxvYWRpbmdyZWYiLCJQcm9ibGVtcyBsb2FkaW5nIHJlZmVyZW5jZSAnezB9JzogezF9IixhLG4uZXJyb3JzWzBdKSl9cmV0dXJuIHMoZSxuLnNjaGVtYSxjLGkpLGwoZSxuLnNjaGVtYSxjKX0pKX0sbD1mdW5jdGlvbihlLHQscil7dmFyIGk9W107cmV0dXJuIG4udHJhdmVyc2VOb2RlcyhlLChmdW5jdGlvbihlKXtmb3IodmFyIG49bmV3IFNldDtlLiRyZWY7KXt2YXIgbz1lLiRyZWYsYT1vLnNwbGl0KCIjIiwyKTtpZihkZWxldGUgZS4kcmVmLGFbMF0ubGVuZ3RoPjApcmV0dXJuIHZvaWQgaS5wdXNoKGMoZSxhWzBdLGFbMV0scikpO2lmKCFuLmhhcyhvKSl7dmFyIGw9YVsxXTtzKGUsdCxyLGwpLG4uYWRkKG8pfX19KSksbi5wcm9taXNlLmFsbChpKX0sdT1mdW5jdGlvbihlKXt2YXIgdD1uZXcgTWFwO3JldHVybiBuLnRyYXZlcnNlTm9kZXMoZSwoZnVuY3Rpb24oZSl7dmFyIG49ZS4kaWR8fGUuaWQ7aWYoInN0cmluZyI9PXR5cGVvZiBuJiYiIyI9PT1uLmNoYXJBdCgwKSl7dmFyIGk9bi5zdWJzdHJpbmcoMSk7dC5oYXMoaSk/ci5wdXNoKHhhKCJqc29uLnNjaGVtYS5kdXBsaWNhdGVpZCIsIkR1cGxpY2F0ZSBpZCBkZWNsYXJhdGlvbjogJ3swfSciLG4pKTp0LnNldChpLGUpfX0pKSx0fTtyZXR1cm4gbChpLGksdCkudGhlbigoZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBUYShpLHIpfSkpfSxlLnByb3RvdHlwZS50cmF2ZXJzZU5vZGVzPWZ1bmN0aW9uKGUsdCl7aWYoIWV8fCJvYmplY3QiIT10eXBlb2YgZSlyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG51bGwpO2Zvcih2YXIgbj1uZXcgU2V0LHI9ZnVuY3Rpb24oKXtmb3IodmFyIGU9W10sdD0wO3Q8YXJndW1lbnRzLmxlbmd0aDt0KyspZVt0XT1hcmd1bWVudHNbdF07Zm9yKHZhciBuPTAscj1lO248ci5sZW5ndGg7bisrKXt2YXIgaT1yW25dOyJvYmplY3QiPT10eXBlb2YgaSYmYS5wdXNoKGkpfX0saT1mdW5jdGlvbigpe2Zvcih2YXIgZT1bXSx0PTA7dDxhcmd1bWVudHMubGVuZ3RoO3QrKyllW3RdPWFyZ3VtZW50c1t0XTtmb3IodmFyIG49MCxyPWU7bjxyLmxlbmd0aDtuKyspe3ZhciBpPXJbbl07aWYoIm9iamVjdCI9PXR5cGVvZiBpKWZvcih2YXIgbyBpbiBpKXt2YXIgcz1vLGM9aVtzXTsib2JqZWN0Ij09dHlwZW9mIGMmJmEucHVzaChjKX19fSxvPWZ1bmN0aW9uKCl7Zm9yKHZhciBlPVtdLHQ9MDt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKWVbdF09YXJndW1lbnRzW3RdO2Zvcih2YXIgbj0wLHI9ZTtuPHIubGVuZ3RoO24rKyl7dmFyIGk9cltuXTtpZihBcnJheS5pc0FycmF5KGkpKWZvcih2YXIgbz0wLHM9aTtvPHMubGVuZ3RoO28rKyl7dmFyIGM9c1tvXTsib2JqZWN0Ij09dHlwZW9mIGMmJmEucHVzaChjKX19fSxhPVtlXSxzPWEucG9wKCk7czspbi5oYXMocyl8fChuLmFkZChzKSx0KHMpLHIocy5pdGVtcyxzLmFkZGl0aW9uYWxJdGVtcyxzLmFkZGl0aW9uYWxQcm9wZXJ0aWVzLHMubm90LHMuY29udGFpbnMscy5wcm9wZXJ0eU5hbWVzLHMuaWYscy50aGVuLHMuZWxzZSksaShzLmRlZmluaXRpb25zLHMucHJvcGVydGllcyxzLnBhdHRlcm5Qcm9wZXJ0aWVzLHMuZGVwZW5kZW5jaWVzKSxvKHMuYW55T2Yscy5hbGxPZixzLm9uZU9mLHMuaXRlbXMpKSxzPWEucG9wKCl9LGUucHJvdG90eXBlLmdldFNjaGVtYUZyb21Qcm9wZXJ0eT1mdW5jdGlvbihlLHQpe3ZhciBuLHI7aWYoIm9iamVjdCI9PT0obnVsbD09PShuPXQucm9vdCl8fHZvaWQgMD09PW4/dm9pZCAwOm4udHlwZSkpZm9yKHZhciBpPTAsbz10LnJvb3QucHJvcGVydGllcztpPG8ubGVuZ3RoO2krKyl7dmFyIGE9b1tpXTtpZigiJHNjaGVtYSI9PT1hLmtleU5vZGUudmFsdWUmJiJzdHJpbmciPT09KG51bGw9PT0ocj1hLnZhbHVlTm9kZSl8fHZvaWQgMD09PXI/dm9pZCAwOnIudHlwZSkpe3ZhciBzPWEudmFsdWVOb2RlLnZhbHVlO3JldHVybiB0aGlzLmNvbnRleHRTZXJ2aWNlJiYhL15cd1tcd1xkKy4tXSo6Ly50ZXN0KHMpJiYocz10aGlzLmNvbnRleHRTZXJ2aWNlLnJlc29sdmVSZWxhdGl2ZVBhdGgocyxlKSksc319fSxlLnByb3RvdHlwZS5nZXRBc3NvY2lhdGVkU2NoZW1hcz1mdW5jdGlvbihlKXtmb3IodmFyIHQ9T2JqZWN0LmNyZWF0ZShudWxsKSxuPVtdLHI9ZnVuY3Rpb24oZSl7dHJ5e3JldHVybiBfYS5wYXJzZShlKS53aXRoKHtmcmFnbWVudDpudWxsLHF1ZXJ5Om51bGx9KS50b1N0cmluZyghMCl9Y2F0Y2godCl7cmV0dXJuIGV9fShlKSxpPTAsbz10aGlzLmZpbGVQYXR0ZXJuQXNzb2NpYXRpb25zO2k8by5sZW5ndGg7aSsrKXt2YXIgYT1vW2ldO2lmKGEubWF0Y2hlc1BhdHRlcm4ocikpZm9yKHZhciBzPTAsYz1hLmdldFVSSXMoKTtzPGMubGVuZ3RoO3MrKyl7dmFyIGw9Y1tzXTt0W2xdfHwobi5wdXNoKGwpLHRbbF09ITApfX1yZXR1cm4gbn0sZS5wcm90b3R5cGUuZ2V0U2NoZW1hVVJJc0ZvclJlc291cmNlPWZ1bmN0aW9uKGUsdCl7dmFyIG49dCYmdGhpcy5nZXRTY2hlbWFGcm9tUHJvcGVydHkoZSx0KTtyZXR1cm4gbj9bbl06dGhpcy5nZXRBc3NvY2lhdGVkU2NoZW1hcyhlKX0sZS5wcm90b3R5cGUuZ2V0U2NoZW1hRm9yUmVzb3VyY2U9ZnVuY3Rpb24oZSx0KXtpZih0KXt2YXIgbj10aGlzLmdldFNjaGVtYUZyb21Qcm9wZXJ0eShlLHQpO2lmKG4pe3ZhciByPU1hKG4pO3JldHVybiB0aGlzLmdldE9yQWRkU2NoZW1hSGFuZGxlKHIpLmdldFJlc29sdmVkU2NoZW1hKCl9fWlmKHRoaXMuY2FjaGVkU2NoZW1hRm9yUmVzb3VyY2UmJnRoaXMuY2FjaGVkU2NoZW1hRm9yUmVzb3VyY2UucmVzb3VyY2U9PT1lKXJldHVybiB0aGlzLmNhY2hlZFNjaGVtYUZvclJlc291cmNlLnJlc29sdmVkU2NoZW1hO3ZhciBpPXRoaXMuZ2V0QXNzb2NpYXRlZFNjaGVtYXMoZSksbz1pLmxlbmd0aD4wP3RoaXMuY3JlYXRlQ29tYmluZWRTY2hlbWEoZSxpKS5nZXRSZXNvbHZlZFNjaGVtYSgpOnRoaXMucHJvbWlzZS5yZXNvbHZlKHZvaWQgMCk7cmV0dXJuIHRoaXMuY2FjaGVkU2NoZW1hRm9yUmVzb3VyY2U9e3Jlc291cmNlOmUscmVzb2x2ZWRTY2hlbWE6b30sb30sZS5wcm90b3R5cGUuY3JlYXRlQ29tYmluZWRTY2hlbWE9ZnVuY3Rpb24oZSx0KXtpZigxPT09dC5sZW5ndGgpcmV0dXJuIHRoaXMuZ2V0T3JBZGRTY2hlbWFIYW5kbGUodFswXSk7dmFyIG49InNjaGVtYXNlcnZpY2U6Ly9jb21iaW5lZFNjaGVtYS8iK2VuY29kZVVSSUNvbXBvbmVudChlKSxyPXthbGxPZjp0Lm1hcCgoZnVuY3Rpb24oZSl7cmV0dXJueyRyZWY6ZX19KSl9O3JldHVybiB0aGlzLmFkZFNjaGVtYUhhbmRsZShuLHIpfSxlLnByb3RvdHlwZS5nZXRNYXRjaGluZ1NjaGVtYXM9ZnVuY3Rpb24oZSx0LG4pe2lmKG4pe3ZhciByPW4uaWR8fCJzY2hlbWFzZXJ2aWNlOi8vdW50aXRsZWQvbWF0Y2hpbmdTY2hlbWFzLyIrSWErKztyZXR1cm4gdGhpcy5hZGRTY2hlbWFIYW5kbGUocixuKS5nZXRSZXNvbHZlZFNjaGVtYSgpLnRoZW4oKGZ1bmN0aW9uKGUpe3JldHVybiB0LmdldE1hdGNoaW5nU2NoZW1hcyhlLnNjaGVtYSkuZmlsdGVyKChmdW5jdGlvbihlKXtyZXR1cm4hZS5pbnZlcnRlZH0pKX0pKX1yZXR1cm4gdGhpcy5nZXRTY2hlbWFGb3JSZXNvdXJjZShlLnVyaSx0KS50aGVuKChmdW5jdGlvbihlKXtyZXR1cm4gZT90LmdldE1hdGNoaW5nU2NoZW1hcyhlLnNjaGVtYSkuZmlsdGVyKChmdW5jdGlvbihlKXtyZXR1cm4hZS5pbnZlcnRlZH0pKTpbXX0pKX0sZX0oKSxJYT0wO2Z1bmN0aW9uIE1hKGUpe3RyeXtyZXR1cm4gX2EucGFyc2UoZSkudG9TdHJpbmcoITApfWNhdGNoKHQpe3JldHVybiBlfX1mdW5jdGlvbiBQYShlKXt0cnl7dmFyIHQ9X2EucGFyc2UoZSk7aWYoImZpbGUiPT09dC5zY2hlbWUpcmV0dXJuIHQuZnNQYXRofWNhdGNoKGUpe31yZXR1cm4gZX1mdW5jdGlvbiBSYShlLHQpe3ZhciBuPVtdLHI9W10saT1bXSxvPS0xLGE9dGkoZS5nZXRUZXh0KCksITEpLHM9YS5zY2FuKCk7ZnVuY3Rpb24gYyhlKXtuLnB1c2goZSksci5wdXNoKGkubGVuZ3RoKX1mb3IoOzE3IT09czspe3N3aXRjaChzKXtjYXNlIDE6Y2FzZSAzOnZhciBsPXtzdGFydExpbmU6Zj1lLnBvc2l0aW9uQXQoYS5nZXRUb2tlbk9mZnNldCgpKS5saW5lLGVuZExpbmU6ZixraW5kOjE9PT1zPyJvYmplY3QiOiJhcnJheSJ9O2kucHVzaChsKTticmVhaztjYXNlIDI6Y2FzZSA0OnZhciB1PTI9PT1zPyJvYmplY3QiOiJhcnJheSI7aWYoaS5sZW5ndGg+MCYmaVtpLmxlbmd0aC0xXS5raW5kPT09dSl7bD1pLnBvcCgpO3ZhciBoPWUucG9zaXRpb25BdChhLmdldFRva2VuT2Zmc2V0KCkpLmxpbmU7bCYmaD5sLnN0YXJ0TGluZSsxJiZvIT09bC5zdGFydExpbmUmJihsLmVuZExpbmU9aC0xLGMobCksbz1sLnN0YXJ0TGluZSl9YnJlYWs7Y2FzZSAxMzp2YXIgZj1lLnBvc2l0aW9uQXQoYS5nZXRUb2tlbk9mZnNldCgpKS5saW5lLGQ9ZS5wb3NpdGlvbkF0KGEuZ2V0VG9rZW5PZmZzZXQoKSthLmdldFRva2VuTGVuZ3RoKCkpLmxpbmU7MT09PWEuZ2V0VG9rZW5FcnJvcigpJiZmKzE8ZS5saW5lQ291bnQ/YS5zZXRQb3NpdGlvbihlLm9mZnNldEF0KHVyLmNyZWF0ZShmKzEsMCkpKTpmPGQmJihjKHtzdGFydExpbmU6ZixlbmRMaW5lOmQsa2luZDpBci5Db21tZW50fSksbz1mKTticmVhaztjYXNlIDEyOnZhciBtPWUuZ2V0VGV4dCgpLnN1YnN0cihhLmdldFRva2VuT2Zmc2V0KCksYS5nZXRUb2tlbkxlbmd0aCgpKS5tYXRjaCgvXlwvXC9ccyojKHJlZ2lvblxiKXwoZW5kcmVnaW9uXGIpLyk7aWYobSl7aD1lLnBvc2l0aW9uQXQoYS5nZXRUb2tlbk9mZnNldCgpKS5saW5lO2lmKG1bMV0pe2w9e3N0YXJ0TGluZTpoLGVuZExpbmU6aCxraW5kOkFyLlJlZ2lvbn07aS5wdXNoKGwpfWVsc2V7Zm9yKHZhciBnPWkubGVuZ3RoLTE7Zz49MCYmaVtnXS5raW5kIT09QXIuUmVnaW9uOylnLS07aWYoZz49MCl7bD1pW2ddO2kubGVuZ3RoPWcsaD5sLnN0YXJ0TGluZSYmbyE9PWwuc3RhcnRMaW5lJiYobC5lbmRMaW5lPWgsYyhsKSxvPWwuc3RhcnRMaW5lKX19fX1zPWEuc2NhbigpfXZhciBwPXQmJnQucmFuZ2VMaW1pdDtpZigibnVtYmVyIiE9dHlwZW9mIHB8fG4ubGVuZ3RoPD1wKXJldHVybiBuO3QmJnQub25SYW5nZUxpbWl0RXhjZWVkZWQmJnQub25SYW5nZUxpbWl0RXhjZWVkZWQoZS51cmkpO2Zvcih2YXIgYj1bXSx2PTAseT1yO3Y8eS5sZW5ndGg7disrKXsoQT15W3ZdKTwzMCYmKGJbQV09KGJbQV18fDApKzEpfXZhciBDPTAsdz0wO2ZvcihnPTA7ZzxiLmxlbmd0aDtnKyspe3ZhciBfPWJbZ107aWYoXyl7aWYoXytDPnApe3c9ZzticmVha31DKz1ffX12YXIgUz1bXTtmb3IoZz0wO2c8bi5sZW5ndGg7ZysrKXt2YXIgQTsibnVtYmVyIj09dHlwZW9mKEE9cltnXSkmJihBPHd8fEE9PT13JiZDKys8cCkmJlMucHVzaChuW2ddKX1yZXR1cm4gU31mdW5jdGlvbiBWYShlLHQsbil7ZnVuY3Rpb24gcih0LG4pe3JldHVybiBmci5jcmVhdGUoZS5wb3NpdGlvbkF0KHQpLGUucG9zaXRpb25BdChuKSl9dmFyIGk9dGkoZS5nZXRUZXh0KCksITApO2Z1bmN0aW9uIG8oZSx0KXtyZXR1cm4gaS5zZXRQb3NpdGlvbihlKSxpLnNjYW4oKT09PXQ/aS5nZXRUb2tlbk9mZnNldCgpK2kuZ2V0VG9rZW5MZW5ndGgoKTotMX1yZXR1cm4gdC5tYXAoKGZ1bmN0aW9uKHQpe2Zvcih2YXIgaT1lLm9mZnNldEF0KHQpLGE9bi5nZXROb2RlRnJvbU9mZnNldChpLCEwKSxzPVtdO2E7KXtzd2l0Y2goYS50eXBlKXtjYXNlInN0cmluZyI6Y2FzZSJvYmplY3QiOmNhc2UiYXJyYXkiOnZhciBjPWEub2Zmc2V0KzEsbD1hLm9mZnNldCthLmxlbmd0aC0xO2M8bCYmaT49YyYmaTw9bCYmcy5wdXNoKHIoYyxsKSkscy5wdXNoKHIoYS5vZmZzZXQsYS5vZmZzZXQrYS5sZW5ndGgpKTticmVhaztjYXNlIm51bWJlciI6Y2FzZSJib29sZWFuIjpjYXNlIm51bGwiOmNhc2UicHJvcGVydHkiOnMucHVzaChyKGEub2Zmc2V0LGEub2Zmc2V0K2EubGVuZ3RoKSl9aWYoInByb3BlcnR5Ij09PWEudHlwZXx8YS5wYXJlbnQmJiJhcnJheSI9PT1hLnBhcmVudC50eXBlKXt2YXIgdT1vKGEub2Zmc2V0K2EubGVuZ3RoLDUpOy0xIT09dSYmcy5wdXNoKHIoYS5vZmZzZXQsdSkpfWE9YS5wYXJlbnR9Zm9yKHZhciBoPXZvaWQgMCxmPXMubGVuZ3RoLTE7Zj49MDtmLS0paD1hby5jcmVhdGUoc1tmXSxoKTtyZXR1cm4gaHx8KGg9YW8uY3JlYXRlKGZyLmNyZWF0ZSh0LHQpKSksaH0pKX1mdW5jdGlvbiBGYShlLHQpe3ZhciBuPVtdO3JldHVybiB0LnZpc2l0KChmdW5jdGlvbihyKXt2YXIgaTtpZigicHJvcGVydHkiPT09ci50eXBlJiYiJHJlZiI9PT1yLmtleU5vZGUudmFsdWUmJiJzdHJpbmciPT09KG51bGw9PT0oaT1yLnZhbHVlTm9kZSl8fHZvaWQgMD09PWk/dm9pZCAwOmkudHlwZSkpe3ZhciBvPXIudmFsdWVOb2RlLnZhbHVlLGE9ZnVuY3Rpb24oZSx0KXt2YXIgbj1mdW5jdGlvbihlKXtpZigiIyI9PT1lKXJldHVybltdO2lmKCIjIiE9PWVbMF18fCIvIiE9PWVbMV0pcmV0dXJuIG51bGw7cmV0dXJuIGUuc3Vic3RyaW5nKDIpLnNwbGl0KC9cLy8pLm1hcChqYSl9KHQpO2lmKCFuKXJldHVybiBudWxsO3JldHVybiBLYShuLGUucm9vdCl9KHQsbyk7aWYoYSl7dmFyIHM9ZS5wb3NpdGlvbkF0KGEub2Zmc2V0KTtuLnB1c2goe3RhcmdldDoiIi5jb25jYXQoZS51cmksIiMiKS5jb25jYXQocy5saW5lKzEsIiwiKS5jb25jYXQocy5jaGFyYWN0ZXIrMSkscmFuZ2U6RGEoZSxyLnZhbHVlTm9kZSl9KX19cmV0dXJuITB9KSksUHJvbWlzZS5yZXNvbHZlKG4pfWZ1bmN0aW9uIERhKGUsdCl7cmV0dXJuIGZyLmNyZWF0ZShlLnBvc2l0aW9uQXQodC5vZmZzZXQrMSksZS5wb3NpdGlvbkF0KHQub2Zmc2V0K3QubGVuZ3RoLTEpKX1mdW5jdGlvbiBLYShlLHQpe2lmKCF0KXJldHVybiBudWxsO2lmKDA9PT1lLmxlbmd0aClyZXR1cm4gdDt2YXIgbj1lLnNoaWZ0KCk7aWYodCYmIm9iamVjdCI9PT10LnR5cGUpe3ZhciByPXQucHJvcGVydGllcy5maW5kKChmdW5jdGlvbihlKXtyZXR1cm4gZS5rZXlOb2RlLnZhbHVlPT09bn0pKTtyZXR1cm4gcj9LYShlLHIudmFsdWVOb2RlKTpudWxsfWlmKHQmJiJhcnJheSI9PT10LnR5cGUmJm4ubWF0Y2goL14oMHxbMS05XVswLTldKikkLykpe3ZhciBpPU51bWJlci5wYXJzZUludChuKSxvPXQuaXRlbXNbaV07cmV0dXJuIG8/S2EoZSxvKTpudWxsfXJldHVybiBudWxsfWZ1bmN0aW9uIGphKGUpe3JldHVybiBlLnJlcGxhY2UoL34xL2csIi8iKS5yZXBsYWNlKC9+MC9nLCJ+Iil9ZnVuY3Rpb24gVWEoZSl7dmFyIHQ9ZS5wcm9taXNlQ29uc3RydWN0b3J8fFByb21pc2Usbj1uZXcgT2EoZS5zY2hlbWFSZXF1ZXN0U2VydmljZSxlLndvcmtzcGFjZUNvbnRleHQsdCk7bi5zZXRTY2hlbWFDb250cmlidXRpb25zKENhKTt2YXIgcj1uZXcgZWEobixlLmNvbnRyaWJ1dGlvbnMsdCxlLmNsaWVudENhcGFiaWxpdGllcyksaT1uZXcgdGEobixlLmNvbnRyaWJ1dGlvbnMsdCksbz1uZXcgaGEobiksYT1uZXcgaWEobix0KTtyZXR1cm57Y29uZmlndXJlOmZ1bmN0aW9uKGUpe24uY2xlYXJFeHRlcm5hbFNjaGVtYXMoKSxlLnNjaGVtYXMmJmUuc2NoZW1hcy5mb3JFYWNoKChmdW5jdGlvbihlKXtuLnJlZ2lzdGVyRXh0ZXJuYWxTY2hlbWEoZS51cmksZS5maWxlTWF0Y2gsZS5zY2hlbWEpfSkpLGEuY29uZmlndXJlKGUpfSxyZXNldFNjaGVtYTpmdW5jdGlvbihlKXtyZXR1cm4gbi5vblJlc291cmNlQ2hhbmdlKGUpfSxkb1ZhbGlkYXRpb246YS5kb1ZhbGlkYXRpb24uYmluZChhKSxnZXRMYW5ndWFnZVN0YXR1czphLmdldExhbmd1YWdlU3RhdHVzLmJpbmQoYSkscGFyc2VKU09ORG9jdW1lbnQ6ZnVuY3Rpb24oZSl7cmV0dXJuIFpvKGUse2NvbGxlY3RDb21tZW50czohMH0pfSxuZXdKU09ORG9jdW1lbnQ6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZnVuY3Rpb24oZSx0KXtyZXR1cm4gdm9pZCAwPT09dCYmKHQ9W10pLG5ldyBKbyhlLHQsW10pfShlLHQpfSxnZXRNYXRjaGluZ1NjaGVtYXM6bi5nZXRNYXRjaGluZ1NjaGVtYXMuYmluZChuKSxkb1Jlc29sdmU6ci5kb1Jlc29sdmUuYmluZChyKSxkb0NvbXBsZXRlOnIuZG9Db21wbGV0ZS5iaW5kKHIpLGZpbmREb2N1bWVudFN5bWJvbHM6by5maW5kRG9jdW1lbnRTeW1ib2xzLmJpbmQobyksZmluZERvY3VtZW50U3ltYm9sczI6by5maW5kRG9jdW1lbnRTeW1ib2xzMi5iaW5kKG8pLGZpbmREb2N1bWVudENvbG9yczpvLmZpbmREb2N1bWVudENvbG9ycy5iaW5kKG8pLGdldENvbG9yUHJlc2VudGF0aW9uczpvLmdldENvbG9yUHJlc2VudGF0aW9ucy5iaW5kKG8pLGRvSG92ZXI6aS5kb0hvdmVyLmJpbmQoaSksZ2V0Rm9sZGluZ1JhbmdlczpSYSxnZXRTZWxlY3Rpb25SYW5nZXM6VmEsZmluZERlZmluaXRpb246ZnVuY3Rpb24oKXtyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKFtdKX0sZmluZExpbmtzOkZhLGZvcm1hdDpmdW5jdGlvbihlLHQsbil7dmFyIHI9dm9pZCAwO2lmKHQpe3ZhciBpPWUub2Zmc2V0QXQodC5zdGFydCk7cj17b2Zmc2V0OmksbGVuZ3RoOmUub2Zmc2V0QXQodC5lbmQpLWl9fXZhciBvPXt0YWJTaXplOm4/bi50YWJTaXplOjQsaW5zZXJ0U3BhY2VzOiEwPT09KG51bGw9PW4/dm9pZCAwOm4uaW5zZXJ0U3BhY2VzKSxpbnNlcnRGaW5hbE5ld2xpbmU6ITA9PT0obnVsbD09bj92b2lkIDA6bi5pbnNlcnRGaW5hbE5ld2xpbmUpLGVvbDoiXG4ifTtyZXR1cm4gZnVuY3Rpb24oZSx0LG4pe3JldHVybiBucihlLHQsbil9KGUuZ2V0VGV4dCgpLHIsbykubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gS3IucmVwbGFjZShmci5jcmVhdGUoZS5wb3NpdGlvbkF0KHQub2Zmc2V0KSxlLnBvc2l0aW9uQXQodC5vZmZzZXQrdC5sZW5ndGgpKSx0LmNvbnRlbnQpfSkpfX19InVuZGVmaW5lZCIhPXR5cGVvZiBmZXRjaCYmKEVhPWZ1bmN0aW9uKGUpe3JldHVybiBmZXRjaChlKS50aGVuKChlPT5lLnRleHQoKSkpfSk7dmFyIEJhPSIvIi5jaGFyQ29kZUF0KDApLHFhPSIuIi5jaGFyQ29kZUF0KDApO2Z1bmN0aW9uICRhKGUpe2NvbnN0IHQ9W107Zm9yKGNvbnN0IG4gb2YgZSkwPT09bi5sZW5ndGh8fDE9PT1uLmxlbmd0aCYmbi5jaGFyQ29kZUF0KDApPT09cWF8fCgyPT09bi5sZW5ndGgmJm4uY2hhckNvZGVBdCgwKT09PXFhJiZuLmNoYXJDb2RlQXQoMSk9PT1xYT90LnBvcCgpOnQucHVzaChuKSk7ZS5sZW5ndGg+MSYmMD09PWVbZS5sZW5ndGgtMV0ubGVuZ3RoJiZ0LnB1c2goIiIpO2xldCBuPXQuam9pbigiLyIpO3JldHVybiAwPT09ZVswXS5sZW5ndGgmJihuPSIvIituKSxufXNlbGYub25tZXNzYWdlPSgpPT57Wm4oKChlLHQpPT5uZXcgY2xhc3N7X2N0eDtfbGFuZ3VhZ2VTZXJ2aWNlO19sYW5ndWFnZVNldHRpbmdzO19sYW5ndWFnZUlkO2NvbnN0cnVjdG9yKGUsdCl7dGhpcy5fY3R4PWUsdGhpcy5fbGFuZ3VhZ2VTZXR0aW5ncz10Lmxhbmd1YWdlU2V0dGluZ3MsdGhpcy5fbGFuZ3VhZ2VJZD10Lmxhbmd1YWdlSWQsdGhpcy5fbGFuZ3VhZ2VTZXJ2aWNlPVVhKHt3b3Jrc3BhY2VDb250ZXh0OntyZXNvbHZlUmVsYXRpdmVQYXRoOihlLHQpPT5mdW5jdGlvbihlLHQpe2lmKGZ1bmN0aW9uKGUpe3JldHVybiBlLmNoYXJDb2RlQXQoMCk9PT1CYX0odCkpe2NvbnN0IG49X2EucGFyc2UoZSkscj10LnNwbGl0KCIvIik7cmV0dXJuIG4ud2l0aCh7cGF0aDokYShyKX0pLnRvU3RyaW5nKCl9cmV0dXJuIGZ1bmN0aW9uKGUsLi4udCl7Y29uc3Qgbj1fYS5wYXJzZShlKSxyPW4ucGF0aC5zcGxpdCgiLyIpO2ZvcihsZXQgZSBvZiB0KXIucHVzaCguLi5lLnNwbGl0KCIvIikpO3JldHVybiBuLndpdGgoe3BhdGg6JGEocil9KS50b1N0cmluZygpfShlLHQpfSh0LnN1YnN0cigwLHQubGFzdEluZGV4T2YoIi8iKSsxKSxlKX0sc2NoZW1hUmVxdWVzdFNlcnZpY2U6dC5lbmFibGVTY2hlbWFSZXF1ZXN0P0VhOnZvaWQgMH0pLHRoaXMuX2xhbmd1YWdlU2VydmljZS5jb25maWd1cmUodGhpcy5fbGFuZ3VhZ2VTZXR0aW5ncyl9YXN5bmMgZG9WYWxpZGF0aW9uKGUpe2xldCB0PXRoaXMuX2dldFRleHREb2N1bWVudChlKTtpZih0KXtsZXQgZT10aGlzLl9sYW5ndWFnZVNlcnZpY2UucGFyc2VKU09ORG9jdW1lbnQodCk7cmV0dXJuIHRoaXMuX2xhbmd1YWdlU2VydmljZS5kb1ZhbGlkYXRpb24odCxlLHRoaXMuX2xhbmd1YWdlU2V0dGluZ3MpfXJldHVybiBQcm9taXNlLnJlc29sdmUoW10pfWFzeW5jIGRvQ29tcGxldGUoZSx0KXtsZXQgbj10aGlzLl9nZXRUZXh0RG9jdW1lbnQoZSk7aWYoIW4pcmV0dXJuIG51bGw7bGV0IHI9dGhpcy5fbGFuZ3VhZ2VTZXJ2aWNlLnBhcnNlSlNPTkRvY3VtZW50KG4pO3JldHVybiB0aGlzLl9sYW5ndWFnZVNlcnZpY2UuZG9Db21wbGV0ZShuLHQscil9YXN5bmMgZG9SZXNvbHZlKGUpe3JldHVybiB0aGlzLl9sYW5ndWFnZVNlcnZpY2UuZG9SZXNvbHZlKGUpfWFzeW5jIGRvSG92ZXIoZSx0KXtsZXQgbj10aGlzLl9nZXRUZXh0RG9jdW1lbnQoZSk7aWYoIW4pcmV0dXJuIG51bGw7bGV0IHI9dGhpcy5fbGFuZ3VhZ2VTZXJ2aWNlLnBhcnNlSlNPTkRvY3VtZW50KG4pO3JldHVybiB0aGlzLl9sYW5ndWFnZVNlcnZpY2UuZG9Ib3ZlcihuLHQscil9YXN5bmMgZm9ybWF0KGUsdCxuKXtsZXQgcj10aGlzLl9nZXRUZXh0RG9jdW1lbnQoZSk7aWYoIXIpcmV0dXJuW107bGV0IGk9dGhpcy5fbGFuZ3VhZ2VTZXJ2aWNlLmZvcm1hdChyLHQsbik7cmV0dXJuIFByb21pc2UucmVzb2x2ZShpKX1hc3luYyByZXNldFNjaGVtYShlKXtyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHRoaXMuX2xhbmd1YWdlU2VydmljZS5yZXNldFNjaGVtYShlKSl9YXN5bmMgZmluZERvY3VtZW50U3ltYm9scyhlKXtsZXQgdD10aGlzLl9nZXRUZXh0RG9jdW1lbnQoZSk7aWYoIXQpcmV0dXJuW107bGV0IG49dGhpcy5fbGFuZ3VhZ2VTZXJ2aWNlLnBhcnNlSlNPTkRvY3VtZW50KHQpLHI9dGhpcy5fbGFuZ3VhZ2VTZXJ2aWNlLmZpbmREb2N1bWVudFN5bWJvbHModCxuKTtyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHIpfWFzeW5jIGZpbmREb2N1bWVudENvbG9ycyhlKXtsZXQgdD10aGlzLl9nZXRUZXh0RG9jdW1lbnQoZSk7aWYoIXQpcmV0dXJuW107bGV0IG49dGhpcy5fbGFuZ3VhZ2VTZXJ2aWNlLnBhcnNlSlNPTkRvY3VtZW50KHQpLHI9dGhpcy5fbGFuZ3VhZ2VTZXJ2aWNlLmZpbmREb2N1bWVudENvbG9ycyh0LG4pO3JldHVybiBQcm9taXNlLnJlc29sdmUocil9YXN5bmMgZ2V0Q29sb3JQcmVzZW50YXRpb25zKGUsdCxuKXtsZXQgcj10aGlzLl9nZXRUZXh0RG9jdW1lbnQoZSk7aWYoIXIpcmV0dXJuW107bGV0IGk9dGhpcy5fbGFuZ3VhZ2VTZXJ2aWNlLnBhcnNlSlNPTkRvY3VtZW50KHIpLG89dGhpcy5fbGFuZ3VhZ2VTZXJ2aWNlLmdldENvbG9yUHJlc2VudGF0aW9ucyhyLGksdCxuKTtyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG8pfWFzeW5jIGdldEZvbGRpbmdSYW5nZXMoZSx0KXtsZXQgbj10aGlzLl9nZXRUZXh0RG9jdW1lbnQoZSk7aWYoIW4pcmV0dXJuW107bGV0IHI9dGhpcy5fbGFuZ3VhZ2VTZXJ2aWNlLmdldEZvbGRpbmdSYW5nZXMobix0KTtyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHIpfWFzeW5jIGdldFNlbGVjdGlvblJhbmdlcyhlLHQpe2xldCBuPXRoaXMuX2dldFRleHREb2N1bWVudChlKTtpZighbilyZXR1cm5bXTtsZXQgcj10aGlzLl9sYW5ndWFnZVNlcnZpY2UucGFyc2VKU09ORG9jdW1lbnQobiksaT10aGlzLl9sYW5ndWFnZVNlcnZpY2UuZ2V0U2VsZWN0aW9uUmFuZ2VzKG4sdCxyKTtyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGkpfV9nZXRUZXh0RG9jdW1lbnQoZSl7bGV0IHQ9dGhpcy5fY3R4LmdldE1pcnJvck1vZGVscygpO2ZvcihsZXQgbiBvZiB0KWlmKG4udXJpLnRvU3RyaW5nKCk9PT1lKXJldHVybiBwby5jcmVhdGUoZSx0aGlzLl9sYW5ndWFnZUlkLG4udmVyc2lvbixuLmdldFZhbHVlKCkpO3JldHVybiBudWxsfX0oZSx0KSkpfX0oKTsKLy8jIHNvdXJjZU1hcHBpbmdVUkw9anNvbi53b3JrZXIuanMubWFwCgo=', null, false);
|
|
4
4
|
/* eslint-enable */
|
|
5
5
|
|
|
6
6
|
export { WorkerFactory as default };
|