@vtj/designer 0.9.0-alpha.2 → 0.9.0-alpha.3
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/{Editor-D0h3sJZq.js → Editor-C1dy1R3N.js} +4 -4
- package/dist/css.worker-BkwH8iYE.js +25 -0
- package/dist/editor.worker-C8k3yDdT.js +25 -0
- package/dist/html.worker-DefZQYbA.js +25 -0
- package/dist/index.mjs +5217 -10048
- package/dist/json.worker-05I1Fjzo.js +25 -0
- package/dist/{ts.worker-DPxAurls.js → ts.worker-Dn3IQaLA.js} +1 -1
- package/package.json +7 -7
- package/types/version.d.ts +2 -2
- package/dist/css.worker-Cb_0heaR.js +0 -25
- package/dist/editor.worker-BtL2_YLX.js +0 -25
- package/dist/html.worker-CwsDGkIP.js +0 -25
- package/dist/json.worker-DsbU5PJ7.js +0 -25
@@ -1,25 +0,0 @@
|
|
1
|
-
const d = "dmFyIGhoPU9iamVjdC5kZWZpbmVQcm9wZXJ0eTt2YXIgZGg9KFplLERlLExlKT0+RGUgaW4gWmU/aGgoWmUsRGUse2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwLHZhbHVlOkxlfSk6WmVbRGVdPUxlO3ZhciBRZT0oWmUsRGUsTGUpPT5kaChaZSx0eXBlb2YgRGUhPSJzeW1ib2wiP0RlKyIiOkRlLExlKTsoZnVuY3Rpb24oKXsidXNlIHN0cmljdCI7dmFyIEJlLGNlLFg7Y2xhc3MgWmV7Y29uc3RydWN0b3IoKXt0aGlzLmxpc3RlbmVycz1bXSx0aGlzLnVuZXhwZWN0ZWRFcnJvckhhbmRsZXI9ZnVuY3Rpb24odCl7c2V0VGltZW91dCgoKT0+e3Rocm93IHQuc3RhY2s/bnQuaXNFcnJvck5vVGVsZW1ldHJ5KHQpP25ldyBudCh0Lm1lc3NhZ2UrYAoKYCt0LnN0YWNrKTpuZXcgRXJyb3IodC5tZXNzYWdlK2AKCmArdC5zdGFjayk6dH0sMCl9fWVtaXQodCl7dGhpcy5saXN0ZW5lcnMuZm9yRWFjaChuPT57bih0KX0pfW9uVW5leHBlY3RlZEVycm9yKHQpe3RoaXMudW5leHBlY3RlZEVycm9ySGFuZGxlcih0KSx0aGlzLmVtaXQodCl9b25VbmV4cGVjdGVkRXh0ZXJuYWxFcnJvcih0KXt0aGlzLnVuZXhwZWN0ZWRFcnJvckhhbmRsZXIodCl9fWNvbnN0IERlPW5ldyBaZTtmdW5jdGlvbiBMZShlKXtibyhlKXx8RGUub25VbmV4cGVjdGVkRXJyb3IoZSl9ZnVuY3Rpb24gUGkoZSl7aWYoZSBpbnN0YW5jZW9mIEVycm9yKXtjb25zdHtuYW1lOnQsbWVzc2FnZTpufT1lLGk9ZS5zdGFja3RyYWNlfHxlLnN0YWNrO3JldHVybnskaXNFcnJvcjohMCxuYW1lOnQsbWVzc2FnZTpuLHN0YWNrOmksbm9UZWxlbWV0cnk6bnQuaXNFcnJvck5vVGVsZW1ldHJ5KGUpfX1yZXR1cm4gZX1jb25zdCBDbj0iQ2FuY2VsZWQiO2Z1bmN0aW9uIGJvKGUpe3JldHVybiBlIGluc3RhbmNlb2YgX28/ITA6ZSBpbnN0YW5jZW9mIEVycm9yJiZlLm5hbWU9PT1DbiYmZS5tZXNzYWdlPT09Q259Y2xhc3MgX28gZXh0ZW5kcyBFcnJvcntjb25zdHJ1Y3Rvcigpe3N1cGVyKENuKSx0aGlzLm5hbWU9dGhpcy5tZXNzYWdlfX1jbGFzcyBudCBleHRlbmRzIEVycm9ye2NvbnN0cnVjdG9yKHQpe3N1cGVyKHQpLHRoaXMubmFtZT0iQ29kZUV4cGVjdGVkRXJyb3IifXN0YXRpYyBmcm9tRXJyb3IodCl7aWYodCBpbnN0YW5jZW9mIG50KXJldHVybiB0O2NvbnN0IG49bmV3IG50O3JldHVybiBuLm1lc3NhZ2U9dC5tZXNzYWdlLG4uc3RhY2s9dC5zdGFjayxufXN0YXRpYyBpc0Vycm9yTm9UZWxlbWV0cnkodCl7cmV0dXJuIHQubmFtZT09PSJDb2RlRXhwZWN0ZWRFcnJvciJ9fWNsYXNzIGZlIGV4dGVuZHMgRXJyb3J7Y29uc3RydWN0b3IodCl7c3VwZXIodHx8IkFuIHVuZXhwZWN0ZWQgYnVnIG9jY3VycmVkLiIpLE9iamVjdC5zZXRQcm90b3R5cGVPZih0aGlzLGZlLnByb3RvdHlwZSl9fWZ1bmN0aW9uIHdvKGUsdCl7Y29uc3Qgbj10aGlzO2xldCBpPSExLHI7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGl8fChpPSEwLHI9ZS5hcHBseShuLGFyZ3VtZW50cykpLHJ9fXZhciBGdDsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdChNKXtyZXR1cm4gTSYmdHlwZW9mIE09PSJvYmplY3QiJiZ0eXBlb2YgTVtTeW1ib2wuaXRlcmF0b3JdPT0iZnVuY3Rpb24ifWUuaXM9dDtjb25zdCBuPU9iamVjdC5mcmVlemUoW10pO2Z1bmN0aW9uIGkoKXtyZXR1cm4gbn1lLmVtcHR5PWk7ZnVuY3Rpb24qcihNKXt5aWVsZCBNfWUuc2luZ2xlPXI7ZnVuY3Rpb24gcyhNKXtyZXR1cm4gdChNKT9NOnIoTSl9ZS53cmFwPXM7ZnVuY3Rpb24gYShNKXtyZXR1cm4gTXx8bn1lLmZyb209YTtmdW5jdGlvbipsKE0pe2ZvcihsZXQgRD1NLmxlbmd0aC0xO0Q+PTA7RC0tKXlpZWxkIE1bRF19ZS5yZXZlcnNlPWw7ZnVuY3Rpb24gbyhNKXtyZXR1cm4hTXx8TVtTeW1ib2wuaXRlcmF0b3JdKCkubmV4dCgpLmRvbmU9PT0hMH1lLmlzRW1wdHk9bztmdW5jdGlvbiB1KE0pe3JldHVybiBNW1N5bWJvbC5pdGVyYXRvcl0oKS5uZXh0KCkudmFsdWV9ZS5maXJzdD11O2Z1bmN0aW9uIGMoTSxEKXtsZXQgTj0wO2Zvcihjb25zdCBiIG9mIE0paWYoRChiLE4rKykpcmV0dXJuITA7cmV0dXJuITF9ZS5zb21lPWM7ZnVuY3Rpb24gZChNLEQpe2Zvcihjb25zdCBOIG9mIE0paWYoRChOKSlyZXR1cm4gTn1lLmZpbmQ9ZDtmdW5jdGlvbiptKE0sRCl7Zm9yKGNvbnN0IE4gb2YgTSlEKE4pJiYoeWllbGQgTil9ZS5maWx0ZXI9bTtmdW5jdGlvbipmKE0sRCl7bGV0IE49MDtmb3IoY29uc3QgYiBvZiBNKXlpZWxkIEQoYixOKyspfWUubWFwPWY7ZnVuY3Rpb24qXyhNLEQpe2xldCBOPTA7Zm9yKGNvbnN0IGIgb2YgTSl5aWVsZCpEKGIsTisrKX1lLmZsYXRNYXA9XztmdW5jdGlvbipnKC4uLk0pe2Zvcihjb25zdCBEIG9mIE0peWllbGQqRH1lLmNvbmNhdD1nO2Z1bmN0aW9uIGsoTSxELE4pe2xldCBiPU47Zm9yKGNvbnN0IHAgb2YgTSliPUQoYixwKTtyZXR1cm4gYn1lLnJlZHVjZT1rO2Z1bmN0aW9uKnkoTSxELE49TS5sZW5ndGgpe2ZvcihEPDAmJihEKz1NLmxlbmd0aCksTjwwP04rPU0ubGVuZ3RoOk4+TS5sZW5ndGgmJihOPU0ubGVuZ3RoKTtEPE47RCsrKXlpZWxkIE1bRF19ZS5zbGljZT15O2Z1bmN0aW9uIHYoTSxEPU51bWJlci5QT1NJVElWRV9JTkZJTklUWSl7Y29uc3QgTj1bXTtpZihEPT09MClyZXR1cm5bTixNXTtjb25zdCBiPU1bU3ltYm9sLml0ZXJhdG9yXSgpO2ZvcihsZXQgcD0wO3A8RDtwKyspe2NvbnN0IHg9Yi5uZXh0KCk7aWYoeC5kb25lKXJldHVybltOLGUuZW1wdHkoKV07Ti5wdXNoKHgudmFsdWUpfXJldHVybltOLHtbU3ltYm9sLml0ZXJhdG9yXSgpe3JldHVybiBifX1dfWUuY29uc3VtZT12O2FzeW5jIGZ1bmN0aW9uIEUoTSl7Y29uc3QgRD1bXTtmb3IgYXdhaXQoY29uc3QgTiBvZiBNKUQucHVzaChOKTtyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKEQpfWUuYXN5bmNUb0FycmF5PUV9KShGdHx8KEZ0PXt9KSk7ZnVuY3Rpb24gbWgoZSl7cmV0dXJuIGV9ZnVuY3Rpb24gZmgoZSx0KXt9ZnVuY3Rpb24gQmkoZSl7aWYoRnQuaXMoZSkpe2NvbnN0IHQ9W107Zm9yKGNvbnN0IG4gb2YgZSlpZihuKXRyeXtuLmRpc3Bvc2UoKX1jYXRjaChpKXt0LnB1c2goaSl9aWYodC5sZW5ndGg9PT0xKXRocm93IHRbMF07aWYodC5sZW5ndGg+MSl0aHJvdyBuZXcgQWdncmVnYXRlRXJyb3IodCwiRW5jb3VudGVyZWQgZXJyb3JzIHdoaWxlIGRpc3Bvc2luZyBvZiBzdG9yZSIpO3JldHVybiBBcnJheS5pc0FycmF5KGUpP1tdOmV9ZWxzZSBpZihlKXJldHVybiBlLmRpc3Bvc2UoKSxlfWZ1bmN0aW9uIHZvKC4uLmUpe3JldHVybiBQdCgoKT0+QmkoZSkpfWZ1bmN0aW9uIFB0KGUpe3JldHVybntkaXNwb3NlOndvKCgpPT57ZSgpfSl9fWNvbnN0IHduPWNsYXNzIHdue2NvbnN0cnVjdG9yKCl7dGhpcy5fdG9EaXNwb3NlPW5ldyBTZXQsdGhpcy5faXNEaXNwb3NlZD0hMX1kaXNwb3NlKCl7dGhpcy5faXNEaXNwb3NlZHx8KHRoaXMuX2lzRGlzcG9zZWQ9ITAsdGhpcy5jbGVhcigpKX1nZXQgaXNEaXNwb3NlZCgpe3JldHVybiB0aGlzLl9pc0Rpc3Bvc2VkfWNsZWFyKCl7aWYodGhpcy5fdG9EaXNwb3NlLnNpemUhPT0wKXRyeXtCaSh0aGlzLl90b0Rpc3Bvc2UpfWZpbmFsbHl7dGhpcy5fdG9EaXNwb3NlLmNsZWFyKCl9fWFkZCh0KXtpZighdClyZXR1cm4gdDtpZih0PT09dGhpcyl0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCByZWdpc3RlciBhIGRpc3Bvc2FibGUgb24gaXRzZWxmISIpO3JldHVybiB0aGlzLl9pc0Rpc3Bvc2VkP3duLkRJU0FCTEVfRElTUE9TRURfV0FSTklOR3x8Y29uc29sZS53YXJuKG5ldyBFcnJvcigiVHJ5aW5nIHRvIGFkZCBhIGRpc3Bvc2FibGUgdG8gYSBEaXNwb3NhYmxlU3RvcmUgdGhhdCBoYXMgYWxyZWFkeSBiZWVuIGRpc3Bvc2VkIG9mLiBUaGUgYWRkZWQgb2JqZWN0IHdpbGwgYmUgbGVha2VkISIpLnN0YWNrKTp0aGlzLl90b0Rpc3Bvc2UuYWRkKHQpLHR9ZGVsZXRlQW5kTGVhayh0KXt0JiZ0aGlzLl90b0Rpc3Bvc2UuaGFzKHQpJiZ0aGlzLl90b0Rpc3Bvc2UuZGVsZXRlKHQpfX07d24uRElTQUJMRV9ESVNQT1NFRF9XQVJOSU5HPSExO2xldCB5dD13bjtjb25zdCBIaT1jbGFzcyBIaXtjb25zdHJ1Y3Rvcigpe3RoaXMuX3N0b3JlPW5ldyB5dCx0aGlzLl9zdG9yZX1kaXNwb3NlKCl7dGhpcy5fc3RvcmUuZGlzcG9zZSgpfV9yZWdpc3Rlcih0KXtpZih0PT09dGhpcyl0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCByZWdpc3RlciBhIGRpc3Bvc2FibGUgb24gaXRzZWxmISIpO3JldHVybiB0aGlzLl9zdG9yZS5hZGQodCl9fTtIaS5Ob25lPU9iamVjdC5mcmVlemUoe2Rpc3Bvc2UoKXt9fSk7bGV0IGl0PUhpLFo9KEJlPWNsYXNze2NvbnN0cnVjdG9yKHQpe3RoaXMuZWxlbWVudD10LHRoaXMubmV4dD1CZS5VbmRlZmluZWQsdGhpcy5wcmV2PUJlLlVuZGVmaW5lZH19LEJlLlVuZGVmaW5lZD1uZXcgQmUodm9pZCAwKSxCZSk7Y2xhc3MgeW97Y29uc3RydWN0b3IoKXt0aGlzLl9maXJzdD1aLlVuZGVmaW5lZCx0aGlzLl9sYXN0PVouVW5kZWZpbmVkLHRoaXMuX3NpemU9MH1nZXQgc2l6ZSgpe3JldHVybiB0aGlzLl9zaXplfWlzRW1wdHkoKXtyZXR1cm4gdGhpcy5fZmlyc3Q9PT1aLlVuZGVmaW5lZH1jbGVhcigpe2xldCB0PXRoaXMuX2ZpcnN0O2Zvcig7dCE9PVouVW5kZWZpbmVkOyl7Y29uc3Qgbj10Lm5leHQ7dC5wcmV2PVouVW5kZWZpbmVkLHQubmV4dD1aLlVuZGVmaW5lZCx0PW59dGhpcy5fZmlyc3Q9Wi5VbmRlZmluZWQsdGhpcy5fbGFzdD1aLlVuZGVmaW5lZCx0aGlzLl9zaXplPTB9dW5zaGlmdCh0KXtyZXR1cm4gdGhpcy5faW5zZXJ0KHQsITEpfXB1c2godCl7cmV0dXJuIHRoaXMuX2luc2VydCh0LCEwKX1faW5zZXJ0KHQsbil7Y29uc3QgaT1uZXcgWih0KTtpZih0aGlzLl9maXJzdD09PVouVW5kZWZpbmVkKXRoaXMuX2ZpcnN0PWksdGhpcy5fbGFzdD1pO2Vsc2UgaWYobil7Y29uc3Qgcz10aGlzLl9sYXN0O3RoaXMuX2xhc3Q9aSxpLnByZXY9cyxzLm5leHQ9aX1lbHNle2NvbnN0IHM9dGhpcy5fZmlyc3Q7dGhpcy5fZmlyc3Q9aSxpLm5leHQ9cyxzLnByZXY9aX10aGlzLl9zaXplKz0xO2xldCByPSExO3JldHVybigpPT57cnx8KHI9ITAsdGhpcy5fcmVtb3ZlKGkpKX19c2hpZnQoKXtpZih0aGlzLl9maXJzdCE9PVouVW5kZWZpbmVkKXtjb25zdCB0PXRoaXMuX2ZpcnN0LmVsZW1lbnQ7cmV0dXJuIHRoaXMuX3JlbW92ZSh0aGlzLl9maXJzdCksdH19cG9wKCl7aWYodGhpcy5fbGFzdCE9PVouVW5kZWZpbmVkKXtjb25zdCB0PXRoaXMuX2xhc3QuZWxlbWVudDtyZXR1cm4gdGhpcy5fcmVtb3ZlKHRoaXMuX2xhc3QpLHR9fV9yZW1vdmUodCl7aWYodC5wcmV2IT09Wi5VbmRlZmluZWQmJnQubmV4dCE9PVouVW5kZWZpbmVkKXtjb25zdCBuPXQucHJldjtuLm5leHQ9dC5uZXh0LHQubmV4dC5wcmV2PW59ZWxzZSB0LnByZXY9PT1aLlVuZGVmaW5lZCYmdC5uZXh0PT09Wi5VbmRlZmluZWQ/KHRoaXMuX2ZpcnN0PVouVW5kZWZpbmVkLHRoaXMuX2xhc3Q9Wi5VbmRlZmluZWQpOnQubmV4dD09PVouVW5kZWZpbmVkPyh0aGlzLl9sYXN0PXRoaXMuX2xhc3QucHJldix0aGlzLl9sYXN0Lm5leHQ9Wi5VbmRlZmluZWQpOnQucHJldj09PVouVW5kZWZpbmVkJiYodGhpcy5fZmlyc3Q9dGhpcy5fZmlyc3QubmV4dCx0aGlzLl9maXJzdC5wcmV2PVouVW5kZWZpbmVkKTt0aGlzLl9zaXplLT0xfSpbU3ltYm9sLml0ZXJhdG9yXSgpe2xldCB0PXRoaXMuX2ZpcnN0O2Zvcig7dCE9PVouVW5kZWZpbmVkOyl5aWVsZCB0LmVsZW1lbnQsdD10Lm5leHR9fWNvbnN0IHhvPWdsb2JhbFRoaXMucGVyZm9ybWFuY2UmJnR5cGVvZiBnbG9iYWxUaGlzLnBlcmZvcm1hbmNlLm5vdz09ImZ1bmN0aW9uIjtjbGFzcyBCdHtzdGF0aWMgY3JlYXRlKHQpe3JldHVybiBuZXcgQnQodCl9Y29uc3RydWN0b3IodCl7dGhpcy5fbm93PXhvJiZ0PT09ITE/RGF0ZS5ub3c6Z2xvYmFsVGhpcy5wZXJmb3JtYW5jZS5ub3cuYmluZChnbG9iYWxUaGlzLnBlcmZvcm1hbmNlKSx0aGlzLl9zdGFydFRpbWU9dGhpcy5fbm93KCksdGhpcy5fc3RvcFRpbWU9LTF9c3RvcCgpe3RoaXMuX3N0b3BUaW1lPXRoaXMuX25vdygpfXJlc2V0KCl7dGhpcy5fc3RhcnRUaW1lPXRoaXMuX25vdygpLHRoaXMuX3N0b3BUaW1lPS0xfWVsYXBzZWQoKXtyZXR1cm4gdGhpcy5fc3RvcFRpbWUhPT0tMT90aGlzLl9zdG9wVGltZS10aGlzLl9zdGFydFRpbWU6dGhpcy5fbm93KCktdGhpcy5fc3RhcnRUaW1lfX12YXIgcXQ7KGZ1bmN0aW9uKGUpe2UuTm9uZT0oKT0+aXQuTm9uZTtmdW5jdGlvbiB0KFMsdyl7cmV0dXJuIG0oUywoKT0+e30sMCx2b2lkIDAsITAsdm9pZCAwLHcpfWUuZGVmZXI9dDtmdW5jdGlvbiBuKFMpe3JldHVybih3LEE9bnVsbCxSKT0+e2xldCBJPSExLEY7cmV0dXJuIEY9UyhIPT57aWYoIUkpcmV0dXJuIEY/Ri5kaXNwb3NlKCk6ST0hMCx3LmNhbGwoQSxIKX0sbnVsbCxSKSxJJiZGLmRpc3Bvc2UoKSxGfX1lLm9uY2U9bjtmdW5jdGlvbiBpKFMsdyl7cmV0dXJuIGUub25jZShlLmZpbHRlcihTLHcpKX1lLm9uY2VJZj1pO2Z1bmN0aW9uIHIoUyx3LEEpe3JldHVybiBjKChSLEk9bnVsbCxGKT0+UyhIPT5SLmNhbGwoSSx3KEgpKSxudWxsLEYpLEEpfWUubWFwPXI7ZnVuY3Rpb24gcyhTLHcsQSl7cmV0dXJuIGMoKFIsST1udWxsLEYpPT5TKEg9Pnt3KEgpLFIuY2FsbChJLEgpfSxudWxsLEYpLEEpfWUuZm9yRWFjaD1zO2Z1bmN0aW9uIGEoUyx3LEEpe3JldHVybiBjKChSLEk9bnVsbCxGKT0+UyhIPT53KEgpJiZSLmNhbGwoSSxIKSxudWxsLEYpLEEpfWUuZmlsdGVyPWE7ZnVuY3Rpb24gbChTKXtyZXR1cm4gU31lLnNpZ25hbD1sO2Z1bmN0aW9uIG8oLi4uUyl7cmV0dXJuKHcsQT1udWxsLFIpPT57Y29uc3QgST12byguLi5TLm1hcChGPT5GKEg9PncuY2FsbChBLEgpKSkpO3JldHVybiBkKEksUil9fWUuYW55PW87ZnVuY3Rpb24gdShTLHcsQSxSKXtsZXQgST1BO3JldHVybiByKFMsRj0+KEk9dyhJLEYpLEkpLFIpfWUucmVkdWNlPXU7ZnVuY3Rpb24gYyhTLHcpe2xldCBBO2NvbnN0IFI9e29uV2lsbEFkZEZpcnN0TGlzdGVuZXIoKXtBPVMoSS5maXJlLEkpfSxvbkRpZFJlbW92ZUxhc3RMaXN0ZW5lcigpe0E/LmRpc3Bvc2UoKX19LEk9bmV3IHdlKFIpO3JldHVybiB3Py5hZGQoSSksSS5ldmVudH1mdW5jdGlvbiBkKFMsdyl7cmV0dXJuIHcgaW5zdGFuY2VvZiBBcnJheT93LnB1c2goUyk6dyYmdy5hZGQoUyksU31mdW5jdGlvbiBtKFMsdyxBPTEwMCxSPSExLEk9ITEsRixIKXtsZXQgVyxxLEosb2U9MCx4ZTtjb25zdCBXaT17bGVha1dhcm5pbmdUaHJlc2hvbGQ6RixvbldpbGxBZGRGaXJzdExpc3RlbmVyKCl7Vz1TKHVoPT57b2UrKyxxPXcocSx1aCksUiYmIUomJihTbi5maXJlKHEpLHE9dm9pZCAwKSx4ZT0oKT0+e2NvbnN0IGNoPXE7cT12b2lkIDAsSj12b2lkIDAsKCFSfHxvZT4xKSYmU24uZmlyZShjaCksb2U9MH0sdHlwZW9mIEE9PSJudW1iZXIiPyhjbGVhclRpbWVvdXQoSiksSj1zZXRUaW1lb3V0KHhlLEEpKTpKPT09dm9pZCAwJiYoSj0wLHF1ZXVlTWljcm90YXNrKHhlKSl9KX0sb25XaWxsUmVtb3ZlTGlzdGVuZXIoKXtJJiZvZT4wJiZ4ZT8uKCl9LG9uRGlkUmVtb3ZlTGFzdExpc3RlbmVyKCl7eGU9dm9pZCAwLFcuZGlzcG9zZSgpfX0sU249bmV3IHdlKFdpKTtyZXR1cm4gSD8uYWRkKFNuKSxTbi5ldmVudH1lLmRlYm91bmNlPW07ZnVuY3Rpb24gZihTLHc9MCxBKXtyZXR1cm4gZS5kZWJvdW5jZShTLChSLEkpPT5SPyhSLnB1c2goSSksUik6W0ldLHcsdm9pZCAwLCEwLHZvaWQgMCxBKX1lLmFjY3VtdWxhdGU9ZjtmdW5jdGlvbiBfKFMsdz0oUixJKT0+Uj09PUksQSl7bGV0IFI9ITAsSTtyZXR1cm4gYShTLEY9Pntjb25zdCBIPVJ8fCF3KEYsSSk7cmV0dXJuIFI9ITEsST1GLEh9LEEpfWUubGF0Y2g9XztmdW5jdGlvbiBnKFMsdyxBKXtyZXR1cm5bZS5maWx0ZXIoUyx3LEEpLGUuZmlsdGVyKFMsUj0+IXcoUiksQSldfWUuc3BsaXQ9ZztmdW5jdGlvbiBrKFMsdz0hMSxBPVtdLFIpe2xldCBJPUEuc2xpY2UoKSxGPVMocT0+e0k/SS5wdXNoKHEpOlcuZmlyZShxKX0pO1ImJlIuYWRkKEYpO2NvbnN0IEg9KCk9PntJPy5mb3JFYWNoKHE9PlcuZmlyZShxKSksST1udWxsfSxXPW5ldyB3ZSh7b25XaWxsQWRkRmlyc3RMaXN0ZW5lcigpe0Z8fChGPVMocT0+Vy5maXJlKHEpKSxSJiZSLmFkZChGKSl9LG9uRGlkQWRkRmlyc3RMaXN0ZW5lcigpe0kmJih3P3NldFRpbWVvdXQoSCk6SCgpKX0sb25EaWRSZW1vdmVMYXN0TGlzdGVuZXIoKXtGJiZGLmRpc3Bvc2UoKSxGPW51bGx9fSk7cmV0dXJuIFImJlIuYWRkKFcpLFcuZXZlbnR9ZS5idWZmZXI9aztmdW5jdGlvbiB5KFMsdyl7cmV0dXJuKFIsSSxGKT0+e2NvbnN0IEg9dyhuZXcgRSk7cmV0dXJuIFMoZnVuY3Rpb24oVyl7Y29uc3QgcT1ILmV2YWx1YXRlKFcpO3EhPT12JiZSLmNhbGwoSSxxKX0sdm9pZCAwLEYpfX1lLmNoYWluPXk7Y29uc3Qgdj1TeW1ib2woIkhhbHRDaGFpbmFibGUiKTtjbGFzcyBFe2NvbnN0cnVjdG9yKCl7dGhpcy5zdGVwcz1bXX1tYXAodyl7cmV0dXJuIHRoaXMuc3RlcHMucHVzaCh3KSx0aGlzfWZvckVhY2godyl7cmV0dXJuIHRoaXMuc3RlcHMucHVzaChBPT4odyhBKSxBKSksdGhpc31maWx0ZXIodyl7cmV0dXJuIHRoaXMuc3RlcHMucHVzaChBPT53KEEpP0E6diksdGhpc31yZWR1Y2UodyxBKXtsZXQgUj1BO3JldHVybiB0aGlzLnN0ZXBzLnB1c2goST0+KFI9dyhSLEkpLFIpKSx0aGlzfWxhdGNoKHc9KEEsUik9PkE9PT1SKXtsZXQgQT0hMCxSO3JldHVybiB0aGlzLnN0ZXBzLnB1c2goST0+e2NvbnN0IEY9QXx8IXcoSSxSKTtyZXR1cm4gQT0hMSxSPUksRj9JOnZ9KSx0aGlzfWV2YWx1YXRlKHcpe2Zvcihjb25zdCBBIG9mIHRoaXMuc3RlcHMpaWYodz1BKHcpLHc9PT12KWJyZWFrO3JldHVybiB3fX1mdW5jdGlvbiBNKFMsdyxBPVI9PlIpe2NvbnN0IFI9KC4uLlcpPT5ILmZpcmUoQSguLi5XKSksST0oKT0+Uy5vbih3LFIpLEY9KCk9PlMucmVtb3ZlTGlzdGVuZXIodyxSKSxIPW5ldyB3ZSh7b25XaWxsQWRkRmlyc3RMaXN0ZW5lcjpJLG9uRGlkUmVtb3ZlTGFzdExpc3RlbmVyOkZ9KTtyZXR1cm4gSC5ldmVudH1lLmZyb21Ob2RlRXZlbnRFbWl0dGVyPU07ZnVuY3Rpb24gRChTLHcsQT1SPT5SKXtjb25zdCBSPSguLi5XKT0+SC5maXJlKEEoLi4uVykpLEk9KCk9PlMuYWRkRXZlbnRMaXN0ZW5lcih3LFIpLEY9KCk9PlMucmVtb3ZlRXZlbnRMaXN0ZW5lcih3LFIpLEg9bmV3IHdlKHtvbldpbGxBZGRGaXJzdExpc3RlbmVyOkksb25EaWRSZW1vdmVMYXN0TGlzdGVuZXI6Rn0pO3JldHVybiBILmV2ZW50fWUuZnJvbURPTUV2ZW50RW1pdHRlcj1EO2Z1bmN0aW9uIE4oUyl7cmV0dXJuIG5ldyBQcm9taXNlKHc9Pm4oUykodykpfWUudG9Qcm9taXNlPU47ZnVuY3Rpb24gYihTKXtjb25zdCB3PW5ldyB3ZTtyZXR1cm4gUy50aGVuKEE9Pnt3LmZpcmUoQSl9LCgpPT57dy5maXJlKHZvaWQgMCl9KS5maW5hbGx5KCgpPT57dy5kaXNwb3NlKCl9KSx3LmV2ZW50fWUuZnJvbVByb21pc2U9YjtmdW5jdGlvbiBwKFMsdyl7cmV0dXJuIFMoQT0+dy5maXJlKEEpKX1lLmZvcndhcmQ9cDtmdW5jdGlvbiB4KFMsdyxBKXtyZXR1cm4gdyhBKSxTKFI9PncoUikpfWUucnVuQW5kU3Vic2NyaWJlPXg7Y2xhc3MgVXtjb25zdHJ1Y3Rvcih3LEEpe3RoaXMuX29ic2VydmFibGU9dyx0aGlzLl9jb3VudGVyPTAsdGhpcy5faGFzQ2hhbmdlZD0hMTtjb25zdCBSPXtvbldpbGxBZGRGaXJzdExpc3RlbmVyOigpPT57dy5hZGRPYnNlcnZlcih0aGlzKSx0aGlzLl9vYnNlcnZhYmxlLnJlcG9ydENoYW5nZXMoKX0sb25EaWRSZW1vdmVMYXN0TGlzdGVuZXI6KCk9Pnt3LnJlbW92ZU9ic2VydmVyKHRoaXMpfX07dGhpcy5lbWl0dGVyPW5ldyB3ZShSKSxBJiZBLmFkZCh0aGlzLmVtaXR0ZXIpfWJlZ2luVXBkYXRlKHcpe3RoaXMuX2NvdW50ZXIrK31oYW5kbGVQb3NzaWJsZUNoYW5nZSh3KXt9aGFuZGxlQ2hhbmdlKHcsQSl7dGhpcy5faGFzQ2hhbmdlZD0hMH1lbmRVcGRhdGUodyl7dGhpcy5fY291bnRlci0tLHRoaXMuX2NvdW50ZXI9PT0wJiYodGhpcy5fb2JzZXJ2YWJsZS5yZXBvcnRDaGFuZ2VzKCksdGhpcy5faGFzQ2hhbmdlZCYmKHRoaXMuX2hhc0NoYW5nZWQ9ITEsdGhpcy5lbWl0dGVyLmZpcmUodGhpcy5fb2JzZXJ2YWJsZS5nZXQoKSkpKX19ZnVuY3Rpb24gTChTLHcpe3JldHVybiBuZXcgVShTLHcpLmVtaXR0ZXIuZXZlbnR9ZS5mcm9tT2JzZXJ2YWJsZT1MO2Z1bmN0aW9uIFQoUyl7cmV0dXJuKHcsQSxSKT0+e2xldCBJPTAsRj0hMTtjb25zdCBIPXtiZWdpblVwZGF0ZSgpe0krK30sZW5kVXBkYXRlKCl7SS0tLEk9PT0wJiYoUy5yZXBvcnRDaGFuZ2VzKCksRiYmKEY9ITEsdy5jYWxsKEEpKSl9LGhhbmRsZVBvc3NpYmxlQ2hhbmdlKCl7fSxoYW5kbGVDaGFuZ2UoKXtGPSEwfX07Uy5hZGRPYnNlcnZlcihIKSxTLnJlcG9ydENoYW5nZXMoKTtjb25zdCBXPXtkaXNwb3NlKCl7Uy5yZW1vdmVPYnNlcnZlcihIKX19O3JldHVybiBSIGluc3RhbmNlb2YgeXQ/Ui5hZGQoVyk6QXJyYXkuaXNBcnJheShSKSYmUi5wdXNoKFcpLFd9fWUuZnJvbU9ic2VydmFibGVMaWdodD1UfSkocXR8fChxdD17fSkpO2NvbnN0IGJ0PWNsYXNzIGJ0e2NvbnN0cnVjdG9yKHQpe3RoaXMubGlzdGVuZXJDb3VudD0wLHRoaXMuaW52b2NhdGlvbkNvdW50PTAsdGhpcy5lbGFwc2VkT3ZlcmFsbD0wLHRoaXMuZHVyYXRpb25zPVtdLHRoaXMubmFtZT1gJHt0fV8ke2J0Ll9pZFBvb2wrK31gLGJ0LmFsbC5hZGQodGhpcyl9c3RhcnQodCl7dGhpcy5fc3RvcFdhdGNoPW5ldyBCdCx0aGlzLmxpc3RlbmVyQ291bnQ9dH1zdG9wKCl7aWYodGhpcy5fc3RvcFdhdGNoKXtjb25zdCB0PXRoaXMuX3N0b3BXYXRjaC5lbGFwc2VkKCk7dGhpcy5kdXJhdGlvbnMucHVzaCh0KSx0aGlzLmVsYXBzZWRPdmVyYWxsKz10LHRoaXMuaW52b2NhdGlvbkNvdW50Kz0xLHRoaXMuX3N0b3BXYXRjaD12b2lkIDB9fX07YnQuYWxsPW5ldyBTZXQsYnQuX2lkUG9vbD0wO2xldCBFbj1idCxxaT0tMTtjb25zdCB2bj1jbGFzcyB2bntjb25zdHJ1Y3Rvcih0LG4saT0odm4uX2lkUG9vbCsrKS50b1N0cmluZygxNikucGFkU3RhcnQoMywiMCIpKXt0aGlzLl9lcnJvckhhbmRsZXI9dCx0aGlzLnRocmVzaG9sZD1uLHRoaXMubmFtZT1pLHRoaXMuX3dhcm5Db3VudGRvd249MH1kaXNwb3NlKCl7dGhpcy5fc3RhY2tzPy5jbGVhcigpfWNoZWNrKHQsbil7Y29uc3QgaT10aGlzLnRocmVzaG9sZDtpZihpPD0wfHxuPGkpcmV0dXJuO3RoaXMuX3N0YWNrc3x8KHRoaXMuX3N0YWNrcz1uZXcgTWFwKTtjb25zdCByPXRoaXMuX3N0YWNrcy5nZXQodC52YWx1ZSl8fDA7aWYodGhpcy5fc3RhY2tzLnNldCh0LnZhbHVlLHIrMSksdGhpcy5fd2FybkNvdW50ZG93bi09MSx0aGlzLl93YXJuQ291bnRkb3duPD0wKXt0aGlzLl93YXJuQ291bnRkb3duPWkqLjU7Y29uc3RbcyxhXT10aGlzLmdldE1vc3RGcmVxdWVudFN0YWNrKCksbD1gWyR7dGhpcy5uYW1lfV0gcG90ZW50aWFsIGxpc3RlbmVyIExFQUsgZGV0ZWN0ZWQsIGhhdmluZyAke259IGxpc3RlbmVycyBhbHJlYWR5LiBNT1NUIGZyZXF1ZW50IGxpc3RlbmVyICgke2F9KTpgO2NvbnNvbGUud2FybihsKSxjb25zb2xlLndhcm4ocyk7Y29uc3Qgbz1uZXcgVG8obCxzKTt0aGlzLl9lcnJvckhhbmRsZXIobyl9cmV0dXJuKCk9Pntjb25zdCBzPXRoaXMuX3N0YWNrcy5nZXQodC52YWx1ZSl8fDA7dGhpcy5fc3RhY2tzLnNldCh0LnZhbHVlLHMtMSl9fWdldE1vc3RGcmVxdWVudFN0YWNrKCl7aWYoIXRoaXMuX3N0YWNrcylyZXR1cm47bGV0IHQsbj0wO2Zvcihjb25zdFtpLHJdb2YgdGhpcy5fc3RhY2tzKSghdHx8bjxyKSYmKHQ9W2kscl0sbj1yKTtyZXR1cm4gdH19O3ZuLl9pZFBvb2w9MTtsZXQgUm49dm47Y2xhc3MgTW57c3RhdGljIGNyZWF0ZSgpe2NvbnN0IHQ9bmV3IEVycm9yO3JldHVybiBuZXcgTW4odC5zdGFjaz8/IiIpfWNvbnN0cnVjdG9yKHQpe3RoaXMudmFsdWU9dH1wcmludCgpe2NvbnNvbGUud2Fybih0aGlzLnZhbHVlLnNwbGl0KGAKYCkuc2xpY2UoMikuam9pbihgCmApKX19Y2xhc3MgVG8gZXh0ZW5kcyBFcnJvcntjb25zdHJ1Y3Rvcih0LG4pe3N1cGVyKHQpLHRoaXMubmFtZT0iTGlzdGVuZXJMZWFrRXJyb3IiLHRoaXMuc3RhY2s9bn19Y2xhc3Mga28gZXh0ZW5kcyBFcnJvcntjb25zdHJ1Y3Rvcih0LG4pe3N1cGVyKHQpLHRoaXMubmFtZT0iTGlzdGVuZXJSZWZ1c2FsRXJyb3IiLHRoaXMuc3RhY2s9bn19Y2xhc3MgTm57Y29uc3RydWN0b3IodCl7dGhpcy52YWx1ZT10fX1jb25zdCBBbz0yO2xldCBEbjtjbGFzcyB3ZXtjb25zdHJ1Y3Rvcih0KXt0aGlzLl9zaXplPTAsdGhpcy5fb3B0aW9ucz10LHRoaXMuX2xlYWthZ2VNb249cWk+MHx8dGhpcy5fb3B0aW9ucz8ubGVha1dhcm5pbmdUaHJlc2hvbGQ/bmV3IFJuKHQ/Lm9uTGlzdGVuZXJFcnJvcj8/TGUsdGhpcy5fb3B0aW9ucz8ubGVha1dhcm5pbmdUaHJlc2hvbGQ/P3FpKTp2b2lkIDAsdGhpcy5fcGVyZk1vbj10aGlzLl9vcHRpb25zPy5fcHJvZk5hbWU/bmV3IEVuKHRoaXMuX29wdGlvbnMuX3Byb2ZOYW1lKTp2b2lkIDAsdGhpcy5fZGVsaXZlcnlRdWV1ZT10aGlzLl9vcHRpb25zPy5kZWxpdmVyeVF1ZXVlfWRpc3Bvc2UoKXt0aGlzLl9kaXNwb3NlZHx8KHRoaXMuX2Rpc3Bvc2VkPSEwLHRoaXMuX2RlbGl2ZXJ5UXVldWU/LmN1cnJlbnQ9PT10aGlzJiZ0aGlzLl9kZWxpdmVyeVF1ZXVlLnJlc2V0KCksdGhpcy5fbGlzdGVuZXJzJiYodGhpcy5fbGlzdGVuZXJzPXZvaWQgMCx0aGlzLl9zaXplPTApLHRoaXMuX29wdGlvbnM/Lm9uRGlkUmVtb3ZlTGFzdExpc3RlbmVyPy4oKSx0aGlzLl9sZWFrYWdlTW9uPy5kaXNwb3NlKCkpfWdldCBldmVudCgpe3JldHVybiB0aGlzLl9ldmVudD8/KHRoaXMuX2V2ZW50PSh0LG4saSk9PntpZih0aGlzLl9sZWFrYWdlTW9uJiZ0aGlzLl9zaXplPnRoaXMuX2xlYWthZ2VNb24udGhyZXNob2xkKioyKXtjb25zdCBsPWBbJHt0aGlzLl9sZWFrYWdlTW9uLm5hbWV9XSBSRUZVU0VTIHRvIGFjY2VwdCBuZXcgbGlzdGVuZXJzIGJlY2F1c2UgaXQgZXhjZWVkZWQgaXRzIHRocmVzaG9sZCBieSBmYXIgKCR7dGhpcy5fc2l6ZX0gdnMgJHt0aGlzLl9sZWFrYWdlTW9uLnRocmVzaG9sZH0pYDtjb25zb2xlLndhcm4obCk7Y29uc3Qgbz10aGlzLl9sZWFrYWdlTW9uLmdldE1vc3RGcmVxdWVudFN0YWNrKCk/P1siVU5LTk9XTiBzdGFjayIsLTFdLHU9bmV3IGtvKGAke2x9LiBISU5UOiBTdGFjayBzaG93cyBtb3N0IGZyZXF1ZW50IGxpc3RlbmVyICgke29bMV19LXRpbWVzKWAsb1swXSk7cmV0dXJuKHRoaXMuX29wdGlvbnM/Lm9uTGlzdGVuZXJFcnJvcnx8TGUpKHUpLGl0Lk5vbmV9aWYodGhpcy5fZGlzcG9zZWQpcmV0dXJuIGl0Lk5vbmU7biYmKHQ9dC5iaW5kKG4pKTtjb25zdCByPW5ldyBObih0KTtsZXQgczt0aGlzLl9sZWFrYWdlTW9uJiZ0aGlzLl9zaXplPj1NYXRoLmNlaWwodGhpcy5fbGVha2FnZU1vbi50aHJlc2hvbGQqLjIpJiYoci5zdGFjaz1Nbi5jcmVhdGUoKSxzPXRoaXMuX2xlYWthZ2VNb24uY2hlY2soci5zdGFjayx0aGlzLl9zaXplKzEpKSx0aGlzLl9saXN0ZW5lcnM/dGhpcy5fbGlzdGVuZXJzIGluc3RhbmNlb2YgTm4/KHRoaXMuX2RlbGl2ZXJ5UXVldWU/Pyh0aGlzLl9kZWxpdmVyeVF1ZXVlPW5ldyBTbyksdGhpcy5fbGlzdGVuZXJzPVt0aGlzLl9saXN0ZW5lcnMscl0pOnRoaXMuX2xpc3RlbmVycy5wdXNoKHIpOih0aGlzLl9vcHRpb25zPy5vbldpbGxBZGRGaXJzdExpc3RlbmVyPy4odGhpcyksdGhpcy5fbGlzdGVuZXJzPXIsdGhpcy5fb3B0aW9ucz8ub25EaWRBZGRGaXJzdExpc3RlbmVyPy4odGhpcykpLHRoaXMuX3NpemUrKztjb25zdCBhPVB0KCgpPT57RG4/LnVucmVnaXN0ZXIoYSkscz8uKCksdGhpcy5fcmVtb3ZlTGlzdGVuZXIocil9KTtpZihpIGluc3RhbmNlb2YgeXQ/aS5hZGQoYSk6QXJyYXkuaXNBcnJheShpKSYmaS5wdXNoKGEpLERuKXtjb25zdCBsPW5ldyBFcnJvcigpLnN0YWNrLnNwbGl0KGAKYCkuc2xpY2UoMiwzKS5qb2luKGAKYCkudHJpbSgpLG89LyhmaWxlOnx2c2NvZGUtZmlsZTpcL1wvdnNjb2RlLWFwcCk/KFwvW146XSo6XGQrOlxkKykvLmV4ZWMobCk7RG4ucmVnaXN0ZXIoYSxvPy5bMl0/P2wsYSl9cmV0dXJuIGF9KSx0aGlzLl9ldmVudH1fcmVtb3ZlTGlzdGVuZXIodCl7aWYodGhpcy5fb3B0aW9ucz8ub25XaWxsUmVtb3ZlTGlzdGVuZXI/Lih0aGlzKSwhdGhpcy5fbGlzdGVuZXJzKXJldHVybjtpZih0aGlzLl9zaXplPT09MSl7dGhpcy5fbGlzdGVuZXJzPXZvaWQgMCx0aGlzLl9vcHRpb25zPy5vbkRpZFJlbW92ZUxhc3RMaXN0ZW5lcj8uKHRoaXMpLHRoaXMuX3NpemU9MDtyZXR1cm59Y29uc3Qgbj10aGlzLl9saXN0ZW5lcnMsaT1uLmluZGV4T2YodCk7aWYoaT09PS0xKXRocm93IGNvbnNvbGUubG9nKCJkaXNwb3NlZD8iLHRoaXMuX2Rpc3Bvc2VkKSxjb25zb2xlLmxvZygic2l6ZT8iLHRoaXMuX3NpemUpLGNvbnNvbGUubG9nKCJhcnI/IixKU09OLnN0cmluZ2lmeSh0aGlzLl9saXN0ZW5lcnMpKSxuZXcgRXJyb3IoIkF0dGVtcHRlZCB0byBkaXNwb3NlIHVua25vd24gbGlzdGVuZXIiKTt0aGlzLl9zaXplLS0sbltpXT12b2lkIDA7Y29uc3Qgcj10aGlzLl9kZWxpdmVyeVF1ZXVlLmN1cnJlbnQ9PT10aGlzO2lmKHRoaXMuX3NpemUqQW88PW4ubGVuZ3RoKXtsZXQgcz0wO2ZvcihsZXQgYT0wO2E8bi5sZW5ndGg7YSsrKW5bYV0/bltzKytdPW5bYV06ciYmKHRoaXMuX2RlbGl2ZXJ5UXVldWUuZW5kLS0sczx0aGlzLl9kZWxpdmVyeVF1ZXVlLmkmJnRoaXMuX2RlbGl2ZXJ5UXVldWUuaS0tKTtuLmxlbmd0aD1zfX1fZGVsaXZlcih0LG4pe2lmKCF0KXJldHVybjtjb25zdCBpPXRoaXMuX29wdGlvbnM/Lm9uTGlzdGVuZXJFcnJvcnx8TGU7aWYoIWkpe3QudmFsdWUobik7cmV0dXJufXRyeXt0LnZhbHVlKG4pfWNhdGNoKHIpe2kocil9fV9kZWxpdmVyUXVldWUodCl7Y29uc3Qgbj10LmN1cnJlbnQuX2xpc3RlbmVycztmb3IoO3QuaTx0LmVuZDspdGhpcy5fZGVsaXZlcihuW3QuaSsrXSx0LnZhbHVlKTt0LnJlc2V0KCl9ZmlyZSh0KXtpZih0aGlzLl9kZWxpdmVyeVF1ZXVlPy5jdXJyZW50JiYodGhpcy5fZGVsaXZlclF1ZXVlKHRoaXMuX2RlbGl2ZXJ5UXVldWUpLHRoaXMuX3BlcmZNb24/LnN0b3AoKSksdGhpcy5fcGVyZk1vbj8uc3RhcnQodGhpcy5fc2l6ZSksdGhpcy5fbGlzdGVuZXJzKWlmKHRoaXMuX2xpc3RlbmVycyBpbnN0YW5jZW9mIE5uKXRoaXMuX2RlbGl2ZXIodGhpcy5fbGlzdGVuZXJzLHQpO2Vsc2V7Y29uc3Qgbj10aGlzLl9kZWxpdmVyeVF1ZXVlO24uZW5xdWV1ZSh0aGlzLHQsdGhpcy5fbGlzdGVuZXJzLmxlbmd0aCksdGhpcy5fZGVsaXZlclF1ZXVlKG4pfXRoaXMuX3BlcmZNb24/LnN0b3AoKX1oYXNMaXN0ZW5lcnMoKXtyZXR1cm4gdGhpcy5fc2l6ZT4wfX1jbGFzcyBTb3tjb25zdHJ1Y3Rvcigpe3RoaXMuaT0tMSx0aGlzLmVuZD0wfWVucXVldWUodCxuLGkpe3RoaXMuaT0wLHRoaXMuZW5kPWksdGhpcy5jdXJyZW50PXQsdGhpcy52YWx1ZT1ufXJlc2V0KCl7dGhpcy5pPXRoaXMuZW5kLHRoaXMuY3VycmVudD12b2lkIDAsdGhpcy52YWx1ZT12b2lkIDB9fWZ1bmN0aW9uIExvKCl7cmV0dXJuIGdsb2JhbFRoaXMuX1ZTQ09ERV9OTFNfTUVTU0FHRVN9ZnVuY3Rpb24gT2koKXtyZXR1cm4gZ2xvYmFsVGhpcy5fVlNDT0RFX05MU19MQU5HVUFHRX1jb25zdCBDbz1PaSgpPT09InBzZXVkbyJ8fHR5cGVvZiBkb2N1bWVudDwidSImJmRvY3VtZW50LmxvY2F0aW9uJiZkb2N1bWVudC5sb2NhdGlvbi5oYXNoLmluZGV4T2YoInBzZXVkbz10cnVlIik+PTA7ZnVuY3Rpb24gVmkoZSx0KXtsZXQgbjtyZXR1cm4gdC5sZW5ndGg9PT0wfHwobj1lLnJlcGxhY2UoL1x7KFxkKylcfS9nLChpLHIpPT57Y29uc3Qgcz1yWzBdLGE9dFtzXTtsZXQgbD1pO3JldHVybiB0eXBlb2YgYT09InN0cmluZyI/bD1hOih0eXBlb2YgYT09Im51bWJlciJ8fHR5cGVvZiBhPT0iYm9vbGVhbiJ8fGE9PT12b2lkIDB8fGE9PT1udWxsKSYmKGw9U3RyaW5nKGEpKSxsfSkpLENvJiYobj0i77y7IituLnJlcGxhY2UoL1thb3VlaV0vZywiJCYkJiIpKyLvvL0iKSxufWZ1bmN0aW9uIFEoZSx0LC4uLm4pe3JldHVybiBWaSh0eXBlb2YgZT09Im51bWJlciI/RW8oZSx0KTp0LG4pfWZ1bmN0aW9uIEVvKGUsdCl7Y29uc3Qgbj1MbygpPy5bZV07aWYodHlwZW9mIG4hPSJzdHJpbmciKXtpZih0eXBlb2YgdD09InN0cmluZyIpcmV0dXJuIHQ7dGhyb3cgbmV3IEVycm9yKGAhISEgTkxTIE1JU1NJTkc6ICR7ZX0gISEhYCl9cmV0dXJuIG59Y29uc3QgcnQ9ImVuIjtsZXQgSW49ITEsem49ITEsVW49ITEsamk9ITEsSG49ITEsT3QsV249cnQsJGk9cnQsUm8sSWU7Y29uc3QgemU9Z2xvYmFsVGhpcztsZXQgcGU7dHlwZW9mIHplLnZzY29kZTwidSImJnR5cGVvZiB6ZS52c2NvZGUucHJvY2VzczwidSI/cGU9emUudnNjb2RlLnByb2Nlc3M6dHlwZW9mIHByb2Nlc3M8InUiJiZ0eXBlb2YgcHJvY2Vzcz8udmVyc2lvbnM/Lm5vZGU9PSJzdHJpbmciJiYocGU9cHJvY2Vzcyk7Y29uc3QgTW89dHlwZW9mIHBlPy52ZXJzaW9ucz8uZWxlY3Ryb249PSJzdHJpbmciJiZwZT8udHlwZT09PSJyZW5kZXJlciI7aWYodHlwZW9mIHBlPT0ib2JqZWN0Iil7SW49cGUucGxhdGZvcm09PT0id2luMzIiLHpuPXBlLnBsYXRmb3JtPT09ImRhcndpbiIsVW49cGUucGxhdGZvcm09PT0ibGludXgiLFVuJiZwZS5lbnYuU05BUCYmcGUuZW52LlNOQVBfUkVWSVNJT04scGUuZW52LkNJfHxwZS5lbnYuQlVJTERfQVJUSUZBQ1RTVEFHSU5HRElSRUNUT1JZLE90PXJ0LFduPXJ0O2NvbnN0IGU9cGUuZW52LlZTQ09ERV9OTFNfQ09ORklHO2lmKGUpdHJ5e2NvbnN0IHQ9SlNPTi5wYXJzZShlKTtPdD10LnVzZXJMb2NhbGUsJGk9dC5vc0xvY2FsZSxXbj10LnJlc29sdmVkTGFuZ3VhZ2V8fHJ0LFJvPXQubGFuZ3VhZ2VQYWNrPy50cmFuc2xhdGlvbnNDb25maWdGaWxlfWNhdGNoe31qaT0hMH1lbHNlIHR5cGVvZiBuYXZpZ2F0b3I9PSJvYmplY3QiJiYhTW8/KEllPW5hdmlnYXRvci51c2VyQWdlbnQsSW49SWUuaW5kZXhPZigiV2luZG93cyIpPj0wLHpuPUllLmluZGV4T2YoIk1hY2ludG9zaCIpPj0wLChJZS5pbmRleE9mKCJNYWNpbnRvc2giKT49MHx8SWUuaW5kZXhPZigiaVBhZCIpPj0wfHxJZS5pbmRleE9mKCJpUGhvbmUiKT49MCkmJm5hdmlnYXRvci5tYXhUb3VjaFBvaW50cyYmbmF2aWdhdG9yLm1heFRvdWNoUG9pbnRzPjAsVW49SWUuaW5kZXhPZigiTGludXgiKT49MCxJZT8uaW5kZXhPZigiTW9iaSIpPj0wLEhuPSEwLFduPU9pKCl8fHJ0LE90PW5hdmlnYXRvci5sYW5ndWFnZS50b0xvd2VyQ2FzZSgpLCRpPU90KTpjb25zb2xlLmVycm9yKCJVbmFibGUgdG8gcmVzb2x2ZSBwbGF0Zm9ybS4iKTtjb25zdCB4dD1JbixObz16bixEbz1qaSxJbz1Ibix6bz1IbiYmdHlwZW9mIHplLmltcG9ydFNjcmlwdHM9PSJmdW5jdGlvbiI/emUub3JpZ2luOnZvaWQgMCxDZT1JZSxVbz10eXBlb2YgemUucG9zdE1lc3NhZ2U9PSJmdW5jdGlvbiImJiF6ZS5pbXBvcnRTY3JpcHRzOygoKT0+e2lmKFVvKXtjb25zdCBlPVtdO3plLmFkZEV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLG49PntpZihuLmRhdGEmJm4uZGF0YS52c2NvZGVTY2hlZHVsZUFzeW5jV29yaylmb3IobGV0IGk9MCxyPWUubGVuZ3RoO2k8cjtpKyspe2NvbnN0IHM9ZVtpXTtpZihzLmlkPT09bi5kYXRhLnZzY29kZVNjaGVkdWxlQXN5bmNXb3JrKXtlLnNwbGljZShpLDEpLHMuY2FsbGJhY2soKTtyZXR1cm59fX0pO2xldCB0PTA7cmV0dXJuIG49Pntjb25zdCBpPSsrdDtlLnB1c2goe2lkOmksY2FsbGJhY2s6bn0pLHplLnBvc3RNZXNzYWdlKHt2c2NvZGVTY2hlZHVsZUFzeW5jV29yazppfSwiKiIpfX1yZXR1cm4gZT0+c2V0VGltZW91dChlKX0pKCk7Y29uc3QgSG89ISEoQ2UmJkNlLmluZGV4T2YoIkNocm9tZSIpPj0wKTtDZSYmQ2UuaW5kZXhPZigiRmlyZWZveCIpPj0wLCFIbyYmQ2UmJkNlLmluZGV4T2YoIlNhZmFyaSIpPj0wLENlJiZDZS5pbmRleE9mKCJFZGcvIik+PTAsQ2UmJkNlLmluZGV4T2YoIkFuZHJvaWQiKT49MDtmdW5jdGlvbiBXbyhlKXtyZXR1cm4gZX1jbGFzcyBGb3tjb25zdHJ1Y3Rvcih0LG4pe3RoaXMubGFzdENhY2hlPXZvaWQgMCx0aGlzLmxhc3RBcmdLZXk9dm9pZCAwLHR5cGVvZiB0PT0iZnVuY3Rpb24iPyh0aGlzLl9mbj10LHRoaXMuX2NvbXB1dGVLZXk9V28pOih0aGlzLl9mbj1uLHRoaXMuX2NvbXB1dGVLZXk9dC5nZXRDYWNoZUtleSl9Z2V0KHQpe2NvbnN0IG49dGhpcy5fY29tcHV0ZUtleSh0KTtyZXR1cm4gdGhpcy5sYXN0QXJnS2V5IT09biYmKHRoaXMubGFzdEFyZ0tleT1uLHRoaXMubGFzdENhY2hlPXRoaXMuX2ZuKHQpKSx0aGlzLmxhc3RDYWNoZX19Y2xhc3MgR2l7Y29uc3RydWN0b3IodCl7dGhpcy5leGVjdXRvcj10LHRoaXMuX2RpZFJ1bj0hMX1nZXQgdmFsdWUoKXtpZighdGhpcy5fZGlkUnVuKXRyeXt0aGlzLl92YWx1ZT10aGlzLmV4ZWN1dG9yKCl9Y2F0Y2godCl7dGhpcy5fZXJyb3I9dH1maW5hbGx5e3RoaXMuX2RpZFJ1bj0hMH1pZih0aGlzLl9lcnJvcil0aHJvdyB0aGlzLl9lcnJvcjtyZXR1cm4gdGhpcy5fdmFsdWV9Z2V0IHJhd1ZhbHVlKCl7cmV0dXJuIHRoaXMuX3ZhbHVlfX1mdW5jdGlvbiBQbyhlKXtyZXR1cm4gZS5yZXBsYWNlKC9bXFxce1x9XCpcK1w/XHxcXlwkXC5cW1xdXChcKV0vZywiXFwkJiIpfWZ1bmN0aW9uIEJvKGUpe3JldHVybiBlLnNwbGl0KC9cclxufFxyfFxuLyl9ZnVuY3Rpb24gcW8oZSl7Zm9yKGxldCB0PTAsbj1lLmxlbmd0aDt0PG47dCsrKXtjb25zdCBpPWUuY2hhckNvZGVBdCh0KTtpZihpIT09MzImJmkhPT05KXJldHVybiB0fXJldHVybi0xfWZ1bmN0aW9uIE9vKGUsdD1lLmxlbmd0aC0xKXtmb3IobGV0IG49dDtuPj0wO24tLSl7Y29uc3QgaT1lLmNoYXJDb2RlQXQobik7aWYoaSE9PTMyJiZpIT09OSlyZXR1cm4gbn1yZXR1cm4tMX1mdW5jdGlvbiBYaShlKXtyZXR1cm4gZT49NjUmJmU8PTkwfWZ1bmN0aW9uIFZ0KGUpe3JldHVybiA1NTI5Njw9ZSYmZTw9NTYzMTl9ZnVuY3Rpb24gRm4oZSl7cmV0dXJuIDU2MzIwPD1lJiZlPD01NzM0M31mdW5jdGlvbiBKaShlLHQpe3JldHVybihlLTU1Mjk2PDwxMCkrKHQtNTYzMjApKzY1NTM2fWZ1bmN0aW9uIFZvKGUsdCxuKXtjb25zdCBpPWUuY2hhckNvZGVBdChuKTtpZihWdChpKSYmbisxPHQpe2NvbnN0IHI9ZS5jaGFyQ29kZUF0KG4rMSk7aWYoRm4ocikpcmV0dXJuIEppKGkscil9cmV0dXJuIGl9Y29uc3Qgam89L15bXHRcblxyXHgyMC1ceDdFXSokLztmdW5jdGlvbiAkbyhlKXtyZXR1cm4gam8udGVzdChlKX1jb25zdCBOZT1jbGFzcyBOZXtzdGF0aWMgZ2V0SW5zdGFuY2UodCl7cmV0dXJuIE5lLmNhY2hlLmdldChBcnJheS5mcm9tKHQpKX1zdGF0aWMgZ2V0TG9jYWxlcygpe3JldHVybiBOZS5fbG9jYWxlcy52YWx1ZX1jb25zdHJ1Y3Rvcih0KXt0aGlzLmNvbmZ1c2FibGVEaWN0aW9uYXJ5PXR9aXNBbWJpZ3VvdXModCl7cmV0dXJuIHRoaXMuY29uZnVzYWJsZURpY3Rpb25hcnkuaGFzKHQpfWdldFByaW1hcnlDb25mdXNhYmxlKHQpe3JldHVybiB0aGlzLmNvbmZ1c2FibGVEaWN0aW9uYXJ5LmdldCh0KX1nZXRDb25mdXNhYmxlQ29kZVBvaW50cygpe3JldHVybiBuZXcgU2V0KHRoaXMuY29uZnVzYWJsZURpY3Rpb25hcnkua2V5cygpKX19O05lLmFtYmlndW91c0NoYXJhY3RlckRhdGE9bmV3IEdpKCgpPT5KU09OLnBhcnNlKCd7Il9jb21tb24iOls4MjMyLDMyLDgyMzMsMzIsNTc2MCwzMiw4MTkyLDMyLDgxOTMsMzIsODE5NCwzMiw4MTk1LDMyLDgxOTYsMzIsODE5NywzMiw4MTk4LDMyLDgyMDAsMzIsODIwMSwzMiw4MjAyLDMyLDgyODcsMzIsODE5OSwzMiw4MjM5LDMyLDIwNDIsOTUsNjUxMDEsOTUsNjUxMDIsOTUsNjUxMDMsOTUsODIwOCw0NSw4MjA5LDQ1LDgyMTAsNDUsNjUxMTIsNDUsMTc0OCw0NSw4MjU5LDQ1LDcyNyw0NSw4NzIyLDQ1LDEwMTM0LDQ1LDExNDUwLDQ1LDE1NDksNDQsMTY0Myw0NCw4MjE4LDQ0LDE4NCw0NCw0MjIzMyw0NCw4OTQsNTksMjMwNyw1OCwyNjkxLDU4LDE0MTcsNTgsMTc5NSw1OCwxNzk2LDU4LDU4NjgsNTgsNjUwNzIsNTgsNjE0Nyw1OCw2MTUzLDU4LDgyODIsNTgsMTQ3NSw1OCw3NjAsNTgsNDI4ODksNTgsODc1OCw1OCw3MjAsNTgsNDIyMzcsNTgsNDUxLDMzLDExNjAxLDMzLDY2MCw2Myw1NzcsNjMsMjQyOSw2Myw1MDM4LDYzLDQyNzMxLDYzLDExOTE0OSw0Niw4MjI4LDQ2LDE3OTMsNDYsMTc5NCw0Niw0MjUxMCw0Niw2ODE3Niw0NiwxNjMyLDQ2LDE3NzYsNDYsNDIyMzIsNDYsMTM3Myw5Niw2NTI4Nyw5Niw4MjE5LDk2LDgyNDIsOTYsMTM3MCw5NiwxNTIzLDk2LDgxNzUsOTYsNjUzNDQsOTYsOTAwLDk2LDgxODksOTYsODEyNSw5Niw4MTI3LDk2LDgxOTAsOTYsNjk3LDk2LDg4NCw5Niw3MTIsOTYsNzE0LDk2LDcxNSw5Niw3NTYsOTYsNjk5LDk2LDcwMSw5Niw3MDAsOTYsNzAyLDk2LDQyODkyLDk2LDE0OTcsOTYsMjAzNiw5NiwyMDM3LDk2LDUxOTQsOTYsNTgzNiw5Niw5NDAzMyw5Niw5NDAzNCw5Niw2NTMzOSw5MSwxMDA4OCw0MCwxMDA5OCw0MCwxMjMwOCw0MCw2NDgzMCw0MCw2NTM0MSw5MywxMDA4OSw0MSwxMDA5OSw0MSwxMjMwOSw0MSw2NDgzMSw0MSwxMDEwMCwxMjMsMTE5MDYwLDEyMywxMDEwMSwxMjUsNjUzNDIsOTQsODI3MCw0MiwxNjQ1LDQyLDg3MjcsNDIsNjYzMzUsNDIsNTk0MSw0Nyw4MjU3LDQ3LDg3MjUsNDcsODI2MCw0Nyw5NTg1LDQ3LDEwMTg3LDQ3LDEwNzQ0LDQ3LDExOTM1NCw0NywxMjc1NSw0NywxMjMzOSw0NywxMTQ2Miw0NywyMDAzMSw0NywxMjAzNSw0Nyw2NTM0MCw5Miw2NTEyOCw5Miw4NzI2LDkyLDEwMTg5LDkyLDEwNzQxLDkyLDEwNzQ1LDkyLDExOTMxMSw5MiwxMTkzNTUsOTIsMTI3NTYsOTIsMjAwMjIsOTIsMTIwMzQsOTIsNDI4NzIsMzgsNzA4LDk0LDcxMCw5NCw1ODY5LDQzLDEwMTMzLDQzLDY2MjAzLDQzLDgyNDksNjAsMTAwOTQsNjAsNzA2LDYwLDExOTM1MCw2MCw1MTc2LDYwLDU4MTAsNjAsNTEyMCw2MSwxMTg0MCw2MSwxMjQ0OCw2MSw0MjIzOSw2MSw4MjUwLDYyLDEwMDk1LDYyLDcwNyw2MiwxMTkzNTEsNjIsNTE3MSw2Miw5NDAxNSw2Miw4Mjc1LDEyNiw3MzIsMTI2LDgxMjgsMTI2LDg3NjQsMTI2LDY1MzcyLDEyNCw2NTI5Myw0NSwxMjA3ODQsNTAsMTIwNzk0LDUwLDEyMDgwNCw1MCwxMjA4MTQsNTAsMTIwODI0LDUwLDEzMDAzNCw1MCw0Mjg0Miw1MCw0MjMsNTAsMTAwMCw1MCw0MjU2NCw1MCw1MzExLDUwLDQyNzM1LDUwLDExOTMwMiw1MSwxMjA3ODUsNTEsMTIwNzk1LDUxLDEyMDgwNSw1MSwxMjA4MTUsNTEsMTIwODI1LDUxLDEzMDAzNSw1MSw0MjkyMyw1MSw1NDAsNTEsNDM5LDUxLDQyODU4LDUxLDExNDY4LDUxLDEyNDgsNTEsOTQwMTEsNTEsNzE4ODIsNTEsMTIwNzg2LDUyLDEyMDc5Niw1MiwxMjA4MDYsNTIsMTIwODE2LDUyLDEyMDgyNiw1MiwxMzAwMzYsNTIsNTA3MCw1Miw3MTg1NSw1MiwxMjA3ODcsNTMsMTIwNzk3LDUzLDEyMDgwNyw1MywxMjA4MTcsNTMsMTIwODI3LDUzLDEzMDAzNyw1Myw0NDQsNTMsNzE4NjcsNTMsMTIwNzg4LDU0LDEyMDc5OCw1NCwxMjA4MDgsNTQsMTIwODE4LDU0LDEyMDgyOCw1NCwxMzAwMzgsNTQsMTE0NzQsNTQsNTEwMiw1NCw3MTg5Myw1NCwxMTkzMTQsNTUsMTIwNzg5LDU1LDEyMDc5OSw1NSwxMjA4MDksNTUsMTIwODE5LDU1LDEyMDgyOSw1NSwxMzAwMzksNTUsNjY3NzAsNTUsNzE4NzgsNTUsMjgxOSw1NiwyNTM4LDU2LDI2NjYsNTYsMTI1MTMxLDU2LDEyMDc5MCw1NiwxMjA4MDAsNTYsMTIwODEwLDU2LDEyMDgyMCw1NiwxMjA4MzAsNTYsMTMwMDQwLDU2LDU0Nyw1Niw1NDYsNTYsNjYzMzAsNTYsMjY2Myw1NywyOTIwLDU3LDI1NDEsNTcsMzQzNyw1NywxMjA3OTEsNTcsMTIwODAxLDU3LDEyMDgxMSw1NywxMjA4MjEsNTcsMTIwODMxLDU3LDEzMDA0MSw1Nyw0Mjg2Miw1NywxMTQ2Niw1Nyw3MTg4NCw1Nyw3MTg1Miw1Nyw3MTg5NCw1Nyw5MDgyLDk3LDY1MzQ1LDk3LDExOTgzNCw5NywxMTk4ODYsOTcsMTE5OTM4LDk3LDExOTk5MCw5NywxMjAwNDIsOTcsMTIwMDk0LDk3LDEyMDE0Niw5NywxMjAxOTgsOTcsMTIwMjUwLDk3LDEyMDMwMiw5NywxMjAzNTQsOTcsMTIwNDA2LDk3LDEyMDQ1OCw5Nyw1OTMsOTcsOTQ1LDk3LDEyMDUxNCw5NywxMjA1NzIsOTcsMTIwNjMwLDk3LDEyMDY4OCw5NywxMjA3NDYsOTcsNjUzMTMsNjUsMTE5ODA4LDY1LDExOTg2MCw2NSwxMTk5MTIsNjUsMTE5OTY0LDY1LDEyMDAxNiw2NSwxMjAwNjgsNjUsMTIwMTIwLDY1LDEyMDE3Miw2NSwxMjAyMjQsNjUsMTIwMjc2LDY1LDEyMDMyOCw2NSwxMjAzODAsNjUsMTIwNDMyLDY1LDkxMyw2NSwxMjA0ODgsNjUsMTIwNTQ2LDY1LDEyMDYwNCw2NSwxMjA2NjIsNjUsMTIwNzIwLDY1LDUwMzQsNjUsNTU3Myw2NSw0MjIyMiw2NSw5NDAxNiw2NSw2NjIwOCw2NSwxMTk4MzUsOTgsMTE5ODg3LDk4LDExOTkzOSw5OCwxMTk5OTEsOTgsMTIwMDQzLDk4LDEyMDA5NSw5OCwxMjAxNDcsOTgsMTIwMTk5LDk4LDEyMDI1MSw5OCwxMjAzMDMsOTgsMTIwMzU1LDk4LDEyMDQwNyw5OCwxMjA0NTksOTgsMzg4LDk4LDUwNzEsOTgsNTIzNCw5OCw1NTUxLDk4LDY1MzE0LDY2LDg0OTIsNjYsMTE5ODA5LDY2LDExOTg2MSw2NiwxMTk5MTMsNjYsMTIwMDE3LDY2LDEyMDA2OSw2NiwxMjAxMjEsNjYsMTIwMTczLDY2LDEyMDIyNSw2NiwxMjAyNzcsNjYsMTIwMzI5LDY2LDEyMDM4MSw2NiwxMjA0MzMsNjYsNDI5MzIsNjYsOTE0LDY2LDEyMDQ4OSw2NiwxMjA1NDcsNjYsMTIwNjA1LDY2LDEyMDY2Myw2NiwxMjA3MjEsNjYsNTEwOCw2Niw1NjIzLDY2LDQyMTkyLDY2LDY2MTc4LDY2LDY2MjA5LDY2LDY2MzA1LDY2LDY1MzQ3LDk5LDg1NzMsOTksMTE5ODM2LDk5LDExOTg4OCw5OSwxMTk5NDAsOTksMTE5OTkyLDk5LDEyMDA0NCw5OSwxMjAwOTYsOTksMTIwMTQ4LDk5LDEyMDIwMCw5OSwxMjAyNTIsOTksMTIwMzA0LDk5LDEyMDM1Niw5OSwxMjA0MDgsOTksMTIwNDYwLDk5LDc0MjgsOTksMTAxMCw5OSwxMTQyOSw5OSw0Mzk1MSw5OSw2NjYyMSw5OSwxMjg4NDQsNjcsNzE5MjIsNjcsNzE5MTMsNjcsNjUzMTUsNjcsODU1Nyw2Nyw4NDUwLDY3LDg0OTMsNjcsMTE5ODEwLDY3LDExOTg2Miw2NywxMTk5MTQsNjcsMTE5OTY2LDY3LDEyMDAxOCw2NywxMjAxNzQsNjcsMTIwMjI2LDY3LDEyMDI3OCw2NywxMjAzMzAsNjcsMTIwMzgyLDY3LDEyMDQzNCw2NywxMDE3LDY3LDExNDI4LDY3LDUwODcsNjcsNDIyMDIsNjcsNjYyMTAsNjcsNjYzMDYsNjcsNjY1ODEsNjcsNjY4NDQsNjcsODU3NCwxMDAsODUxOCwxMDAsMTE5ODM3LDEwMCwxMTk4ODksMTAwLDExOTk0MSwxMDAsMTE5OTkzLDEwMCwxMjAwNDUsMTAwLDEyMDA5NywxMDAsMTIwMTQ5LDEwMCwxMjAyMDEsMTAwLDEyMDI1MywxMDAsMTIwMzA1LDEwMCwxMjAzNTcsMTAwLDEyMDQwOSwxMDAsMTIwNDYxLDEwMCwxMjgxLDEwMCw1MDk1LDEwMCw1MjMxLDEwMCw0MjE5NCwxMDAsODU1OCw2OCw4NTE3LDY4LDExOTgxMSw2OCwxMTk4NjMsNjgsMTE5OTE1LDY4LDExOTk2Nyw2OCwxMjAwMTksNjgsMTIwMDcxLDY4LDEyMDEyMyw2OCwxMjAxNzUsNjgsMTIwMjI3LDY4LDEyMDI3OSw2OCwxMjAzMzEsNjgsMTIwMzgzLDY4LDEyMDQzNSw2OCw1MDI0LDY4LDU1OTgsNjgsNTYxMCw2OCw0MjE5NSw2OCw4NDk0LDEwMSw2NTM0OSwxMDEsODQ5NSwxMDEsODUxOSwxMDEsMTE5ODM4LDEwMSwxMTk4OTAsMTAxLDExOTk0MiwxMDEsMTIwMDQ2LDEwMSwxMjAwOTgsMTAxLDEyMDE1MCwxMDEsMTIwMjAyLDEwMSwxMjAyNTQsMTAxLDEyMDMwNiwxMDEsMTIwMzU4LDEwMSwxMjA0MTAsMTAxLDEyMDQ2MiwxMDEsNDM4MjYsMTAxLDEyMTMsMTAxLDg5NTksNjksNjUzMTcsNjksODQ5Niw2OSwxMTk4MTIsNjksMTE5ODY0LDY5LDExOTkxNiw2OSwxMjAwMjAsNjksMTIwMDcyLDY5LDEyMDEyNCw2OSwxMjAxNzYsNjksMTIwMjI4LDY5LDEyMDI4MCw2OSwxMjAzMzIsNjksMTIwMzg0LDY5LDEyMDQzNiw2OSw5MTcsNjksMTIwNDkyLDY5LDEyMDU1MCw2OSwxMjA2MDgsNjksMTIwNjY2LDY5LDEyMDcyNCw2OSwxMTU3Nyw2OSw1MDM2LDY5LDQyMjI0LDY5LDcxODQ2LDY5LDcxODU0LDY5LDY2MTgyLDY5LDExOTgzOSwxMDIsMTE5ODkxLDEwMiwxMTk5NDMsMTAyLDExOTk5NSwxMDIsMTIwMDQ3LDEwMiwxMjAwOTksMTAyLDEyMDE1MSwxMDIsMTIwMjAzLDEwMiwxMjAyNTUsMTAyLDEyMDMwNywxMDIsMTIwMzU5LDEwMiwxMjA0MTEsMTAyLDEyMDQ2MywxMDIsNDM4MjksMTAyLDQyOTA1LDEwMiwzODMsMTAyLDc4MzcsMTAyLDE0MTIsMTAyLDExOTMxNSw3MCw4NDk3LDcwLDExOTgxMyw3MCwxMTk4NjUsNzAsMTE5OTE3LDcwLDEyMDAyMSw3MCwxMjAwNzMsNzAsMTIwMTI1LDcwLDEyMDE3Nyw3MCwxMjAyMjksNzAsMTIwMjgxLDcwLDEyMDMzMyw3MCwxMjAzODUsNzAsMTIwNDM3LDcwLDQyOTA0LDcwLDk4OCw3MCwxMjA3NzgsNzAsNTU1Niw3MCw0MjIwNSw3MCw3MTg3NCw3MCw3MTg0Miw3MCw2NjE4Myw3MCw2NjIxMyw3MCw2Njg1Myw3MCw2NTM1MSwxMDMsODQ1OCwxMDMsMTE5ODQwLDEwMywxMTk4OTIsMTAzLDExOTk0NCwxMDMsMTIwMDQ4LDEwMywxMjAxMDAsMTAzLDEyMDE1MiwxMDMsMTIwMjA0LDEwMywxMjAyNTYsMTAzLDEyMDMwOCwxMDMsMTIwMzYwLDEwMywxMjA0MTIsMTAzLDEyMDQ2NCwxMDMsNjA5LDEwMyw3NTU1LDEwMywzOTcsMTAzLDE0MDksMTAzLDExOTgxNCw3MSwxMTk4NjYsNzEsMTE5OTE4LDcxLDExOTk3MCw3MSwxMjAwMjIsNzEsMTIwMDc0LDcxLDEyMDEyNiw3MSwxMjAxNzgsNzEsMTIwMjMwLDcxLDEyMDI4Miw3MSwxMjAzMzQsNzEsMTIwMzg2LDcxLDEyMDQzOCw3MSwxMjkyLDcxLDUwNTYsNzEsNTEwNyw3MSw0MjE5OCw3MSw2NTM1MiwxMDQsODQ2MiwxMDQsMTE5ODQxLDEwNCwxMTk5NDUsMTA0LDExOTk5NywxMDQsMTIwMDQ5LDEwNCwxMjAxMDEsMTA0LDEyMDE1MywxMDQsMTIwMjA1LDEwNCwxMjAyNTcsMTA0LDEyMDMwOSwxMDQsMTIwMzYxLDEwNCwxMjA0MTMsMTA0LDEyMDQ2NSwxMDQsMTIxMSwxMDQsMTM5MiwxMDQsNTA1OCwxMDQsNjUzMjAsNzIsODQ1OSw3Miw4NDYwLDcyLDg0NjEsNzIsMTE5ODE1LDcyLDExOTg2Nyw3MiwxMTk5MTksNzIsMTIwMDIzLDcyLDEyMDE3OSw3MiwxMjAyMzEsNzIsMTIwMjgzLDcyLDEyMDMzNSw3MiwxMjAzODcsNzIsMTIwNDM5LDcyLDkxOSw3MiwxMjA0OTQsNzIsMTIwNTUyLDcyLDEyMDYxMCw3MiwxMjA2NjgsNzIsMTIwNzI2LDcyLDExNDA2LDcyLDUwNTEsNzIsNTUwMCw3Miw0MjIxNSw3Miw2NjI1NSw3Miw3MzEsMTA1LDkwNzUsMTA1LDY1MzUzLDEwNSw4NTYwLDEwNSw4NTA1LDEwNSw4NTIwLDEwNSwxMTk4NDIsMTA1LDExOTg5NCwxMDUsMTE5OTQ2LDEwNSwxMTk5OTgsMTA1LDEyMDA1MCwxMDUsMTIwMTAyLDEwNSwxMjAxNTQsMTA1LDEyMDIwNiwxMDUsMTIwMjU4LDEwNSwxMjAzMTAsMTA1LDEyMDM2MiwxMDUsMTIwNDE0LDEwNSwxMjA0NjYsMTA1LDEyMDQ4NCwxMDUsNjE4LDEwNSw2MTcsMTA1LDk1MywxMDUsODEyNiwxMDUsODkwLDEwNSwxMjA1MjIsMTA1LDEyMDU4MCwxMDUsMTIwNjM4LDEwNSwxMjA2OTYsMTA1LDEyMDc1NCwxMDUsMTExMCwxMDUsNDI1NjcsMTA1LDEyMzEsMTA1LDQzODkzLDEwNSw1MDI5LDEwNSw3MTg3NSwxMDUsNjUzNTQsMTA2LDg1MjEsMTA2LDExOTg0MywxMDYsMTE5ODk1LDEwNiwxMTk5NDcsMTA2LDExOTk5OSwxMDYsMTIwMDUxLDEwNiwxMjAxMDMsMTA2LDEyMDE1NSwxMDYsMTIwMjA3LDEwNiwxMjAyNTksMTA2LDEyMDMxMSwxMDYsMTIwMzYzLDEwNiwxMjA0MTUsMTA2LDEyMDQ2NywxMDYsMTAxMSwxMDYsMTExMiwxMDYsNjUzMjIsNzQsMTE5ODE3LDc0LDExOTg2OSw3NCwxMTk5MjEsNzQsMTE5OTczLDc0LDEyMDAyNSw3NCwxMjAwNzcsNzQsMTIwMTI5LDc0LDEyMDE4MSw3NCwxMjAyMzMsNzQsMTIwMjg1LDc0LDEyMDMzNyw3NCwxMjAzODksNzQsMTIwNDQxLDc0LDQyOTMwLDc0LDg5NSw3NCwxMDMyLDc0LDUwMzUsNzQsNTI2MSw3NCw0MjIwMSw3NCwxMTk4NDQsMTA3LDExOTg5NiwxMDcsMTE5OTQ4LDEwNywxMjAwMDAsMTA3LDEyMDA1MiwxMDcsMTIwMTA0LDEwNywxMjAxNTYsMTA3LDEyMDIwOCwxMDcsMTIwMjYwLDEwNywxMjAzMTIsMTA3LDEyMDM2NCwxMDcsMTIwNDE2LDEwNywxMjA0NjgsMTA3LDg0OTAsNzUsNjUzMjMsNzUsMTE5ODE4LDc1LDExOTg3MCw3NSwxMTk5MjIsNzUsMTE5OTc0LDc1LDEyMDAyNiw3NSwxMjAwNzgsNzUsMTIwMTMwLDc1LDEyMDE4Miw3NSwxMjAyMzQsNzUsMTIwMjg2LDc1LDEyMDMzOCw3NSwxMjAzOTAsNzUsMTIwNDQyLDc1LDkyMiw3NSwxMjA0OTcsNzUsMTIwNTU1LDc1LDEyMDYxMyw3NSwxMjA2NzEsNzUsMTIwNzI5LDc1LDExNDEyLDc1LDUwOTQsNzUsNTg0NSw3NSw0MjE5OSw3NSw2Njg0MCw3NSwxNDcyLDEwOCw4NzM5LDczLDkyMTMsNzMsNjU1MTIsNzMsMTYzMywxMDgsMTc3Nyw3Myw2NjMzNiwxMDgsMTI1MTI3LDEwOCwxMjA3ODMsNzMsMTIwNzkzLDczLDEyMDgwMyw3MywxMjA4MTMsNzMsMTIwODIzLDczLDEzMDAzMyw3Myw2NTMyMSw3Myw4NTQ0LDczLDg0NjQsNzMsODQ2NSw3MywxMTk4MTYsNzMsMTE5ODY4LDczLDExOTkyMCw3MywxMjAwMjQsNzMsMTIwMTI4LDczLDEyMDE4MCw3MywxMjAyMzIsNzMsMTIwMjg0LDczLDEyMDMzNiw3MywxMjAzODgsNzMsMTIwNDQwLDczLDY1MzU2LDEwOCw4NTcyLDczLDg0NjcsMTA4LDExOTg0NSwxMDgsMTE5ODk3LDEwOCwxMTk5NDksMTA4LDEyMDAwMSwxMDgsMTIwMDUzLDEwOCwxMjAxMDUsNzMsMTIwMTU3LDczLDEyMDIwOSw3MywxMjAyNjEsNzMsMTIwMzEzLDczLDEyMDM2NSw3MywxMjA0MTcsNzMsMTIwNDY5LDczLDQ0OCw3MywxMjA0OTYsNzMsMTIwNTU0LDczLDEyMDYxMiw3MywxMjA2NzAsNzMsMTIwNzI4LDczLDExNDEwLDczLDEwMzAsNzMsMTIxNiw3MywxNDkzLDEwOCwxNTAzLDEwOCwxNTc1LDEwOCwxMjY0NjQsMTA4LDEyNjU5MiwxMDgsNjUxNjYsMTA4LDY1MTY1LDEwOCwxOTk0LDEwOCwxMTU5OSw3Myw1ODI1LDczLDQyMjI2LDczLDkzOTkyLDczLDY2MTg2LDEyNCw2NjMxMywxMjQsMTE5MzM4LDc2LDg1NTYsNzYsODQ2Niw3NiwxMTk4MTksNzYsMTE5ODcxLDc2LDExOTkyMyw3NiwxMjAwMjcsNzYsMTIwMDc5LDc2LDEyMDEzMSw3NiwxMjAxODMsNzYsMTIwMjM1LDc2LDEyMDI4Nyw3NiwxMjAzMzksNzYsMTIwMzkxLDc2LDEyMDQ0Myw3NiwxMTQ3Miw3Niw1MDg2LDc2LDUyOTAsNzYsNDIyMDksNzYsOTM5NzQsNzYsNzE4NDMsNzYsNzE4NTgsNzYsNjY1ODcsNzYsNjY4NTQsNzYsNjUzMjUsNzcsODU1OSw3Nyw4NDk5LDc3LDExOTgyMCw3NywxMTk4NzIsNzcsMTE5OTI0LDc3LDEyMDAyOCw3NywxMjAwODAsNzcsMTIwMTMyLDc3LDEyMDE4NCw3NywxMjAyMzYsNzcsMTIwMjg4LDc3LDEyMDM0MCw3NywxMjAzOTIsNzcsMTIwNDQ0LDc3LDkyNCw3NywxMjA0OTksNzcsMTIwNTU3LDc3LDEyMDYxNSw3NywxMjA2NzMsNzcsMTIwNzMxLDc3LDEwMTgsNzcsMTE0MTYsNzcsNTA0Nyw3Nyw1NjE2LDc3LDU4NDYsNzcsNDIyMDcsNzcsNjYyMjQsNzcsNjYzMjEsNzcsMTE5ODQ3LDExMCwxMTk4OTksMTEwLDExOTk1MSwxMTAsMTIwMDAzLDExMCwxMjAwNTUsMTEwLDEyMDEwNywxMTAsMTIwMTU5LDExMCwxMjAyMTEsMTEwLDEyMDI2MywxMTAsMTIwMzE1LDExMCwxMjAzNjcsMTEwLDEyMDQxOSwxMTAsMTIwNDcxLDExMCwxNDAwLDExMCwxNDA0LDExMCw2NTMyNiw3OCw4NDY5LDc4LDExOTgyMSw3OCwxMTk4NzMsNzgsMTE5OTI1LDc4LDExOTk3Nyw3OCwxMjAwMjksNzgsMTIwMDgxLDc4LDEyMDE4NSw3OCwxMjAyMzcsNzgsMTIwMjg5LDc4LDEyMDM0MSw3OCwxMjAzOTMsNzgsMTIwNDQ1LDc4LDkyNSw3OCwxMjA1MDAsNzgsMTIwNTU4LDc4LDEyMDYxNiw3OCwxMjA2NzQsNzgsMTIwNzMyLDc4LDExNDE4LDc4LDQyMjA4LDc4LDY2ODM1LDc4LDMwNzQsMTExLDMyMDIsMTExLDMzMzAsMTExLDM0NTgsMTExLDI0MDYsMTExLDI2NjIsMTExLDI3OTAsMTExLDMwNDYsMTExLDMxNzQsMTExLDMzMDIsMTExLDM0MzAsMTExLDM2NjQsMTExLDM3OTIsMTExLDQxNjAsMTExLDE2MzcsMTExLDE3ODEsMTExLDY1MzU5LDExMSw4NTAwLDExMSwxMTk4NDgsMTExLDExOTkwMCwxMTEsMTE5OTUyLDExMSwxMjAwNTYsMTExLDEyMDEwOCwxMTEsMTIwMTYwLDExMSwxMjAyMTIsMTExLDEyMDI2NCwxMTEsMTIwMzE2LDExMSwxMjAzNjgsMTExLDEyMDQyMCwxMTEsMTIwNDcyLDExMSw3NDM5LDExMSw3NDQxLDExMSw0MzgzNywxMTEsOTU5LDExMSwxMjA1MjgsMTExLDEyMDU4NiwxMTEsMTIwNjQ0LDExMSwxMjA3MDIsMTExLDEyMDc2MCwxMTEsOTYzLDExMSwxMjA1MzIsMTExLDEyMDU5MCwxMTEsMTIwNjQ4LDExMSwxMjA3MDYsMTExLDEyMDc2NCwxMTEsMTE0MjMsMTExLDQzNTEsMTExLDE0MTMsMTExLDE1MDUsMTExLDE2MDcsMTExLDEyNjUwMCwxMTEsMTI2NTY0LDExMSwxMjY1OTYsMTExLDY1MjU5LDExMSw2NTI2MCwxMTEsNjUyNTgsMTExLDY1MjU3LDExMSwxNzI2LDExMSw2NDQyOCwxMTEsNjQ0MjksMTExLDY0NDI3LDExMSw2NDQyNiwxMTEsMTcyOSwxMTEsNjQ0MjQsMTExLDY0NDI1LDExMSw2NDQyMywxMTEsNjQ0MjIsMTExLDE3NDksMTExLDMzNjAsMTExLDQxMjUsMTExLDY2Nzk0LDExMSw3MTg4MCwxMTEsNzE4OTUsMTExLDY2NjA0LDExMSwxOTg0LDc5LDI1MzQsNzksMjkxOCw3OSwxMjI5NSw3OSw3MDg2NCw3OSw3MTkwNCw3OSwxMjA3ODIsNzksMTIwNzkyLDc5LDEyMDgwMiw3OSwxMjA4MTIsNzksMTIwODIyLDc5LDEzMDAzMiw3OSw2NTMyNyw3OSwxMTk4MjIsNzksMTE5ODc0LDc5LDExOTkyNiw3OSwxMTk5NzgsNzksMTIwMDMwLDc5LDEyMDA4Miw3OSwxMjAxMzQsNzksMTIwMTg2LDc5LDEyMDIzOCw3OSwxMjAyOTAsNzksMTIwMzQyLDc5LDEyMDM5NCw3OSwxMjA0NDYsNzksOTI3LDc5LDEyMDUwMiw3OSwxMjA1NjAsNzksMTIwNjE4LDc5LDEyMDY3Niw3OSwxMjA3MzQsNzksMTE0MjIsNzksMTM2NSw3OSwxMTYwNCw3OSw0ODE2LDc5LDI4NDgsNzksNjY3NTQsNzksNDIyMjcsNzksNzE4NjEsNzksNjYxOTQsNzksNjYyMTksNzksNjY1NjQsNzksNjY4MzgsNzksOTA3NiwxMTIsNjUzNjAsMTEyLDExOTg0OSwxMTIsMTE5OTAxLDExMiwxMTk5NTMsMTEyLDEyMDAwNSwxMTIsMTIwMDU3LDExMiwxMjAxMDksMTEyLDEyMDE2MSwxMTIsMTIwMjEzLDExMiwxMjAyNjUsMTEyLDEyMDMxNywxMTIsMTIwMzY5LDExMiwxMjA0MjEsMTEyLDEyMDQ3MywxMTIsOTYxLDExMiwxMjA1MzAsMTEyLDEyMDU0NCwxMTIsMTIwNTg4LDExMiwxMjA2MDIsMTEyLDEyMDY0NiwxMTIsMTIwNjYwLDExMiwxMjA3MDQsMTEyLDEyMDcxOCwxMTIsMTIwNzYyLDExMiwxMjA3NzYsMTEyLDExNDI3LDExMiw2NTMyOCw4MCw4NDczLDgwLDExOTgyMyw4MCwxMTk4NzUsODAsMTE5OTI3LDgwLDExOTk3OSw4MCwxMjAwMzEsODAsMTIwMDgzLDgwLDEyMDE4Nyw4MCwxMjAyMzksODAsMTIwMjkxLDgwLDEyMDM0Myw4MCwxMjAzOTUsODAsMTIwNDQ3LDgwLDkyOSw4MCwxMjA1MDQsODAsMTIwNTYyLDgwLDEyMDYyMCw4MCwxMjA2NzgsODAsMTIwNzM2LDgwLDExNDI2LDgwLDUwOTAsODAsNTIyOSw4MCw0MjE5Myw4MCw2NjE5Nyw4MCwxMTk4NTAsMTEzLDExOTkwMiwxMTMsMTE5OTU0LDExMywxMjAwMDYsMTEzLDEyMDA1OCwxMTMsMTIwMTEwLDExMywxMjAxNjIsMTEzLDEyMDIxNCwxMTMsMTIwMjY2LDExMywxMjAzMTgsMTEzLDEyMDM3MCwxMTMsMTIwNDIyLDExMywxMjA0NzQsMTEzLDEzMDcsMTEzLDEzNzksMTEzLDEzODIsMTEzLDg0NzQsODEsMTE5ODI0LDgxLDExOTg3Niw4MSwxMTk5MjgsODEsMTE5OTgwLDgxLDEyMDAzMiw4MSwxMjAwODQsODEsMTIwMTg4LDgxLDEyMDI0MCw4MSwxMjAyOTIsODEsMTIwMzQ0LDgxLDEyMDM5Niw4MSwxMjA0NDgsODEsMTE2MDUsODEsMTE5ODUxLDExNCwxMTk5MDMsMTE0LDExOTk1NSwxMTQsMTIwMDA3LDExNCwxMjAwNTksMTE0LDEyMDExMSwxMTQsMTIwMTYzLDExNCwxMjAyMTUsMTE0LDEyMDI2NywxMTQsMTIwMzE5LDExNCwxMjAzNzEsMTE0LDEyMDQyMywxMTQsMTIwNDc1LDExNCw0Mzg0NywxMTQsNDM4NDgsMTE0LDc0NjIsMTE0LDExMzk3LDExNCw0MzkwNSwxMTQsMTE5MzE4LDgyLDg0NzUsODIsODQ3Niw4Miw4NDc3LDgyLDExOTgyNSw4MiwxMTk4NzcsODIsMTE5OTI5LDgyLDEyMDAzMyw4MiwxMjAxODksODIsMTIwMjQxLDgyLDEyMDI5Myw4MiwxMjAzNDUsODIsMTIwMzk3LDgyLDEyMDQ0OSw4Miw0MjIsODIsNTAyNSw4Miw1MDc0LDgyLDY2NzQwLDgyLDU1MTEsODIsNDIyMTEsODIsOTQwMDUsODIsNjUzNjMsMTE1LDExOTg1MiwxMTUsMTE5OTA0LDExNSwxMTk5NTYsMTE1LDEyMDAwOCwxMTUsMTIwMDYwLDExNSwxMjAxMTIsMTE1LDEyMDE2NCwxMTUsMTIwMjE2LDExNSwxMjAyNjgsMTE1LDEyMDMyMCwxMTUsMTIwMzcyLDExNSwxMjA0MjQsMTE1LDEyMDQ3NiwxMTUsNDI4MDEsMTE1LDQ0NSwxMTUsMTEwOSwxMTUsNDM5NDYsMTE1LDcxODczLDExNSw2NjYzMiwxMTUsNjUzMzEsODMsMTE5ODI2LDgzLDExOTg3OCw4MywxMTk5MzAsODMsMTE5OTgyLDgzLDEyMDAzNCw4MywxMjAwODYsODMsMTIwMTM4LDgzLDEyMDE5MCw4MywxMjAyNDIsODMsMTIwMjk0LDgzLDEyMDM0Niw4MywxMjAzOTgsODMsMTIwNDUwLDgzLDEwMjksODMsMTM1OSw4Myw1MDc3LDgzLDUwODIsODMsNDIyMTAsODMsOTQwMTAsODMsNjYxOTgsODMsNjY1OTIsODMsMTE5ODUzLDExNiwxMTk5MDUsMTE2LDExOTk1NywxMTYsMTIwMDA5LDExNiwxMjAwNjEsMTE2LDEyMDExMywxMTYsMTIwMTY1LDExNiwxMjAyMTcsMTE2LDEyMDI2OSwxMTYsMTIwMzIxLDExNiwxMjAzNzMsMTE2LDEyMDQyNSwxMTYsMTIwNDc3LDExNiw4ODY4LDg0LDEwMjAxLDg0LDEyODg3Miw4NCw2NTMzMiw4NCwxMTk4MjcsODQsMTE5ODc5LDg0LDExOTkzMSw4NCwxMTk5ODMsODQsMTIwMDM1LDg0LDEyMDA4Nyw4NCwxMjAxMzksODQsMTIwMTkxLDg0LDEyMDI0Myw4NCwxMjAyOTUsODQsMTIwMzQ3LDg0LDEyMDM5OSw4NCwxMjA0NTEsODQsOTMyLDg0LDEyMDUwNyw4NCwxMjA1NjUsODQsMTIwNjIzLDg0LDEyMDY4MSw4NCwxMjA3MzksODQsMTE0MzAsODQsNTAyNiw4NCw0MjE5Niw4NCw5Mzk2Miw4NCw3MTg2OCw4NCw2NjE5OSw4NCw2NjIyNSw4NCw2NjMyNSw4NCwxMTk4NTQsMTE3LDExOTkwNiwxMTcsMTE5OTU4LDExNywxMjAwMTAsMTE3LDEyMDA2MiwxMTcsMTIwMTE0LDExNywxMjAxNjYsMTE3LDEyMDIxOCwxMTcsMTIwMjcwLDExNywxMjAzMjIsMTE3LDEyMDM3NCwxMTcsMTIwNDI2LDExNywxMjA0NzgsMTE3LDQyOTExLDExNyw3NDUyLDExNyw0Mzg1NCwxMTcsNDM4NTgsMTE3LDY1MSwxMTcsOTY1LDExNywxMjA1MzQsMTE3LDEyMDU5MiwxMTcsMTIwNjUwLDExNywxMjA3MDgsMTE3LDEyMDc2NiwxMTcsMTQwNSwxMTcsNjY4MDYsMTE3LDcxODk2LDExNyw4NzQ2LDg1LDg4OTksODUsMTE5ODI4LDg1LDExOTg4MCw4NSwxMTk5MzIsODUsMTE5OTg0LDg1LDEyMDAzNiw4NSwxMjAwODgsODUsMTIwMTQwLDg1LDEyMDE5Miw4NSwxMjAyNDQsODUsMTIwMjk2LDg1LDEyMDM0OCw4NSwxMjA0MDAsODUsMTIwNDUyLDg1LDEzNTcsODUsNDYwOCw4NSw2Njc2Niw4NSw1MTk2LDg1LDQyMjI4LDg1LDk0MDE4LDg1LDcxODY0LDg1LDg3NDQsMTE4LDg4OTcsMTE4LDY1MzY2LDExOCw4NTY0LDExOCwxMTk4NTUsMTE4LDExOTkwNywxMTgsMTE5OTU5LDExOCwxMjAwMTEsMTE4LDEyMDA2MywxMTgsMTIwMTE1LDExOCwxMjAxNjcsMTE4LDEyMDIxOSwxMTgsMTIwMjcxLDExOCwxMjAzMjMsMTE4LDEyMDM3NSwxMTgsMTIwNDI3LDExOCwxMjA0NzksMTE4LDc0NTYsMTE4LDk1NywxMTgsMTIwNTI2LDExOCwxMjA1ODQsMTE4LDEyMDY0MiwxMTgsMTIwNzAwLDExOCwxMjA3NTgsMTE4LDExNDEsMTE4LDE0OTYsMTE4LDcxNDMwLDExOCw0Mzk0NSwxMTgsNzE4NzIsMTE4LDExOTMwOSw4NiwxNjM5LDg2LDE3ODMsODYsODU0OCw4NiwxMTk4MjksODYsMTE5ODgxLDg2LDExOTkzMyw4NiwxMTk5ODUsODYsMTIwMDM3LDg2LDEyMDA4OSw4NiwxMjAxNDEsODYsMTIwMTkzLDg2LDEyMDI0NSw4NiwxMjAyOTcsODYsMTIwMzQ5LDg2LDEyMDQwMSw4NiwxMjA0NTMsODYsMTE0MCw4NiwxMTU3Niw4Niw1MDgxLDg2LDUxNjcsODYsNDI3MTksODYsNDIyMTQsODYsOTM5NjAsODYsNzE4NDAsODYsNjY4NDUsODYsNjIzLDExOSwxMTk4NTYsMTE5LDExOTkwOCwxMTksMTE5OTYwLDExOSwxMjAwMTIsMTE5LDEyMDA2NCwxMTksMTIwMTE2LDExOSwxMjAxNjgsMTE5LDEyMDIyMCwxMTksMTIwMjcyLDExOSwxMjAzMjQsMTE5LDEyMDM3NiwxMTksMTIwNDI4LDExOSwxMjA0ODAsMTE5LDc0NTcsMTE5LDExMjEsMTE5LDEzMDksMTE5LDEzNzcsMTE5LDcxNDM0LDExOSw3MTQzOCwxMTksNzE0MzksMTE5LDQzOTA3LDExOSw3MTkxOSw4Nyw3MTkxMCw4NywxMTk4MzAsODcsMTE5ODgyLDg3LDExOTkzNCw4NywxMTk5ODYsODcsMTIwMDM4LDg3LDEyMDA5MCw4NywxMjAxNDIsODcsMTIwMTk0LDg3LDEyMDI0Niw4NywxMjAyOTgsODcsMTIwMzUwLDg3LDEyMDQwMiw4NywxMjA0NTQsODcsMTMwOCw4Nyw1MDQzLDg3LDUwNzYsODcsNDIyMTgsODcsNTc0MiwxMjAsMTA1MzksMTIwLDEwNTQwLDEyMCwxMDc5OSwxMjAsNjUzNjgsMTIwLDg1NjksMTIwLDExOTg1NywxMjAsMTE5OTA5LDEyMCwxMTk5NjEsMTIwLDEyMDAxMywxMjAsMTIwMDY1LDEyMCwxMjAxMTcsMTIwLDEyMDE2OSwxMjAsMTIwMjIxLDEyMCwxMjAyNzMsMTIwLDEyMDMyNSwxMjAsMTIwMzc3LDEyMCwxMjA0MjksMTIwLDEyMDQ4MSwxMjAsNTQ0MSwxMjAsNTUwMSwxMjAsNTc0MSw4OCw5NTg3LDg4LDY2MzM4LDg4LDcxOTE2LDg4LDY1MzM2LDg4LDg1NTMsODgsMTE5ODMxLDg4LDExOTg4Myw4OCwxMTk5MzUsODgsMTE5OTg3LDg4LDEyMDAzOSw4OCwxMjAwOTEsODgsMTIwMTQzLDg4LDEyMDE5NSw4OCwxMjAyNDcsODgsMTIwMjk5LDg4LDEyMDM1MSw4OCwxMjA0MDMsODgsMTIwNDU1LDg4LDQyOTMxLDg4LDkzNSw4OCwxMjA1MTAsODgsMTIwNTY4LDg4LDEyMDYyNiw4OCwxMjA2ODQsODgsMTIwNzQyLDg4LDExNDM2LDg4LDExNjEzLDg4LDU4MTUsODgsNDIyMTksODgsNjYxOTIsODgsNjYyMjgsODgsNjYzMjcsODgsNjY4NTUsODgsNjExLDEyMSw3NTY0LDEyMSw2NTM2OSwxMjEsMTE5ODU4LDEyMSwxMTk5MTAsMTIxLDExOTk2MiwxMjEsMTIwMDE0LDEyMSwxMjAwNjYsMTIxLDEyMDExOCwxMjEsMTIwMTcwLDEyMSwxMjAyMjIsMTIxLDEyMDI3NCwxMjEsMTIwMzI2LDEyMSwxMjAzNzgsMTIxLDEyMDQzMCwxMjEsMTIwNDgyLDEyMSw2NTUsMTIxLDc5MzUsMTIxLDQzODY2LDEyMSw5NDcsMTIxLDg1MDksMTIxLDEyMDUxNiwxMjEsMTIwNTc0LDEyMSwxMjA2MzIsMTIxLDEyMDY5MCwxMjEsMTIwNzQ4LDEyMSwxMTk5LDEyMSw0MzI3LDEyMSw3MTkwMCwxMjEsNjUzMzcsODksMTE5ODMyLDg5LDExOTg4NCw4OSwxMTk5MzYsODksMTE5OTg4LDg5LDEyMDA0MCw4OSwxMjAwOTIsODksMTIwMTQ0LDg5LDEyMDE5Niw4OSwxMjAyNDgsODksMTIwMzAwLDg5LDEyMDM1Miw4OSwxMjA0MDQsODksMTIwNDU2LDg5LDkzMyw4OSw5NzgsODksMTIwNTA4LDg5LDEyMDU2Niw4OSwxMjA2MjQsODksMTIwNjgyLDg5LDEyMDc0MCw4OSwxMTQzMiw4OSwxMTk4LDg5LDUwMzMsODksNTA1Myw4OSw0MjIyMCw4OSw5NDAxOSw4OSw3MTg0NCw4OSw2NjIyNiw4OSwxMTk4NTksMTIyLDExOTkxMSwxMjIsMTE5OTYzLDEyMiwxMjAwMTUsMTIyLDEyMDA2NywxMjIsMTIwMTE5LDEyMiwxMjAxNzEsMTIyLDEyMDIyMywxMjIsMTIwMjc1LDEyMiwxMjAzMjcsMTIyLDEyMDM3OSwxMjIsMTIwNDMxLDEyMiwxMjA0ODMsMTIyLDc0NTgsMTIyLDQzOTIzLDEyMiw3MTg3NiwxMjIsNjYyOTMsOTAsNzE5MDksOTAsNjUzMzgsOTAsODQ4NCw5MCw4NDg4LDkwLDExOTgzMyw5MCwxMTk4ODUsOTAsMTE5OTM3LDkwLDExOTk4OSw5MCwxMjAwNDEsOTAsMTIwMTk3LDkwLDEyMDI0OSw5MCwxMjAzMDEsOTAsMTIwMzUzLDkwLDEyMDQwNSw5MCwxMjA0NTcsOTAsOTE4LDkwLDEyMDQ5Myw5MCwxMjA1NTEsOTAsMTIwNjA5LDkwLDEyMDY2Nyw5MCwxMjA3MjUsOTAsNTA1OSw5MCw0MjIwNCw5MCw3MTg0OSw5MCw2NTI4MiwzNCw2NTI4NCwzNiw2NTI4NSwzNyw2NTI4NiwzOCw2NTI5MCw0Miw2NTI5MSw0Myw2NTI5NCw0Niw2NTI5NSw0Nyw2NTI5Niw0OCw2NTI5Nyw0OSw2NTI5OCw1MCw2NTI5OSw1MSw2NTMwMCw1Miw2NTMwMSw1Myw2NTMwMiw1NCw2NTMwMyw1NSw2NTMwNCw1Niw2NTMwNSw1Nyw2NTMwOCw2MCw2NTMwOSw2MSw2NTMxMCw2Miw2NTMxMiw2NCw2NTMxNiw2OCw2NTMxOCw3MCw2NTMxOSw3MSw2NTMyNCw3Niw2NTMyOSw4MSw2NTMzMCw4Miw2NTMzMyw4NSw2NTMzNCw4Niw2NTMzNSw4Nyw2NTM0Myw5NSw2NTM0Niw5OCw2NTM0OCwxMDAsNjUzNTAsMTAyLDY1MzU1LDEwNyw2NTM1NywxMDksNjUzNTgsMTEwLDY1MzYxLDExMyw2NTM2MiwxMTQsNjUzNjQsMTE2LDY1MzY1LDExNyw2NTM2NywxMTksNjUzNzAsMTIyLDY1MzcxLDEyMyw2NTM3MywxMjUsMTE5ODQ2LDEwOV0sIl9kZWZhdWx0IjpbMTYwLDMyLDgyMTEsNDUsNjUzNzQsMTI2LDY1MzA2LDU4LDY1MjgxLDMzLDgyMTYsOTYsODIxNyw5Niw4MjQ1LDk2LDE4MCw5NiwxMjQ5NCw0NywxMDQ3LDUxLDEwNzMsNTQsMTA3Miw5NywxMDQwLDY1LDEwNjgsOTgsMTA0Miw2NiwxMDg5LDk5LDEwNTcsNjcsMTA3NywxMDEsMTA0NSw2OSwxMDUzLDcyLDMwNSwxMDUsMTA1MCw3NSw5MjEsNzMsMTA1Miw3NywxMDg2LDExMSwxMDU0LDc5LDEwMDksMTEyLDEwODgsMTEyLDEwNTYsODAsMTA3NSwxMTQsMTA1OCw4NCwyMTUsMTIwLDEwOTMsMTIwLDEwNjEsODgsMTA5MSwxMjEsMTA1OSw4OSw2NTI4MywzNSw2NTI4OCw0MCw2NTI4OSw0MSw2NTI5Miw0NCw2NTMwNyw1OSw2NTMxMSw2M10sImNzIjpbNjUzNzQsMTI2LDY1MzA2LDU4LDY1MjgxLDMzLDgyMTYsOTYsODIxNyw5Niw4MjQ1LDk2LDE4MCw5NiwxMjQ5NCw0NywxMDQ3LDUxLDEwNzMsNTQsMTA3Miw5NywxMDQwLDY1LDEwNjgsOTgsMTA0Miw2NiwxMDg5LDk5LDEwNTcsNjcsMTA3NywxMDEsMTA0NSw2OSwxMDUzLDcyLDMwNSwxMDUsMTA1MCw3NSw5MjEsNzMsMTA1Miw3NywxMDg2LDExMSwxMDU0LDc5LDEwMDksMTEyLDEwODgsMTEyLDEwNTYsODAsMTA3NSwxMTQsMTA1OCw4NCwxMDkzLDEyMCwxMDYxLDg4LDEwOTEsMTIxLDEwNTksODksNjUyODMsMzUsNjUyODgsNDAsNjUyODksNDEsNjUyOTIsNDQsNjUzMDcsNTksNjUzMTEsNjNdLCJkZSI6WzY1Mzc0LDEyNiw2NTMwNiw1OCw2NTI4MSwzMyw4MjE2LDk2LDgyMTcsOTYsODI0NSw5NiwxODAsOTYsMTI0OTQsNDcsMTA0Nyw1MSwxMDczLDU0LDEwNzIsOTcsMTA0MCw2NSwxMDY4LDk4LDEwNDIsNjYsMTA4OSw5OSwxMDU3LDY3LDEwNzcsMTAxLDEwNDUsNjksMTA1Myw3MiwzMDUsMTA1LDEwNTAsNzUsOTIxLDczLDEwNTIsNzcsMTA4NiwxMTEsMTA1NCw3OSwxMDA5LDExMiwxMDg4LDExMiwxMDU2LDgwLDEwNzUsMTE0LDEwNTgsODQsMTA5MywxMjAsMTA2MSw4OCwxMDkxLDEyMSwxMDU5LDg5LDY1MjgzLDM1LDY1Mjg4LDQwLDY1Mjg5LDQxLDY1MjkyLDQ0LDY1MzA3LDU5LDY1MzExLDYzXSwiZXMiOls4MjExLDQ1LDY1Mzc0LDEyNiw2NTMwNiw1OCw2NTI4MSwzMyw4MjQ1LDk2LDE4MCw5NiwxMjQ5NCw0NywxMDQ3LDUxLDEwNzMsNTQsMTA3Miw5NywxMDQwLDY1LDEwNjgsOTgsMTA0Miw2NiwxMDg5LDk5LDEwNTcsNjcsMTA3NywxMDEsMTA0NSw2OSwxMDUzLDcyLDMwNSwxMDUsMTA1MCw3NSwxMDUyLDc3LDEwODYsMTExLDEwNTQsNzksMTAwOSwxMTIsMTA4OCwxMTIsMTA1Niw4MCwxMDc1LDExNCwxMDU4LDg0LDIxNSwxMjAsMTA5MywxMjAsMTA2MSw4OCwxMDkxLDEyMSwxMDU5LDg5LDY1MjgzLDM1LDY1Mjg4LDQwLDY1Mjg5LDQxLDY1MjkyLDQ0LDY1MzA3LDU5LDY1MzExLDYzXSwiZnIiOls2NTM3NCwxMjYsNjUzMDYsNTgsNjUyODEsMzMsODIxNiw5Niw4MjQ1LDk2LDEyNDk0LDQ3LDEwNDcsNTEsMTA3Myw1NCwxMDcyLDk3LDEwNDAsNjUsMTA2OCw5OCwxMDQyLDY2LDEwODksOTksMTA1Nyw2NywxMDc3LDEwMSwxMDQ1LDY5LDEwNTMsNzIsMzA1LDEwNSwxMDUwLDc1LDkyMSw3MywxMDUyLDc3LDEwODYsMTExLDEwNTQsNzksMTAwOSwxMTIsMTA4OCwxMTIsMTA1Niw4MCwxMDc1LDExNCwxMDU4LDg0LDIxNSwxMjAsMTA5MywxMjAsMTA2MSw4OCwxMDkxLDEyMSwxMDU5LDg5LDY1MjgzLDM1LDY1Mjg4LDQwLDY1Mjg5LDQxLDY1MjkyLDQ0LDY1MzA3LDU5LDY1MzExLDYzXSwiaXQiOlsxNjAsMzIsODIxMSw0NSw2NTM3NCwxMjYsNjUzMDYsNTgsNjUyODEsMzMsODIxNiw5Niw4MjQ1LDk2LDE4MCw5NiwxMjQ5NCw0NywxMDQ3LDUxLDEwNzMsNTQsMTA3Miw5NywxMDQwLDY1LDEwNjgsOTgsMTA0Miw2NiwxMDg5LDk5LDEwNTcsNjcsMTA3NywxMDEsMTA0NSw2OSwxMDUzLDcyLDMwNSwxMDUsMTA1MCw3NSw5MjEsNzMsMTA1Miw3NywxMDg2LDExMSwxMDU0LDc5LDEwMDksMTEyLDEwODgsMTEyLDEwNTYsODAsMTA3NSwxMTQsMTA1OCw4NCwyMTUsMTIwLDEwOTMsMTIwLDEwNjEsODgsMTA5MSwxMjEsMTA1OSw4OSw2NTI4MywzNSw2NTI4OCw0MCw2NTI4OSw0MSw2NTI5Miw0NCw2NTMwNyw1OSw2NTMxMSw2M10sImphIjpbODIxMSw0NSw2NTMwNiw1OCw2NTI4MSwzMyw4MjE2LDk2LDgyMTcsOTYsODI0NSw5NiwxODAsOTYsMTA0Nyw1MSwxMDczLDU0LDEwNzIsOTcsMTA0MCw2NSwxMDY4LDk4LDEwNDIsNjYsMTA4OSw5OSwxMDU3LDY3LDEwNzcsMTAxLDEwNDUsNjksMTA1Myw3MiwzMDUsMTA1LDEwNTAsNzUsOTIxLDczLDEwNTIsNzcsMTA4NiwxMTEsMTA1NCw3OSwxMDA5LDExMiwxMDg4LDExMiwxMDU2LDgwLDEwNzUsMTE0LDEwNTgsODQsMjE1LDEyMCwxMDkzLDEyMCwxMDYxLDg4LDEwOTEsMTIxLDEwNTksODksNjUyODMsMzUsNjUyOTIsNDQsNjUzMDcsNTldLCJrbyI6WzgyMTEsNDUsNjUzNzQsMTI2LDY1MzA2LDU4LDY1MjgxLDMzLDgyNDUsOTYsMTgwLDk2LDEyNDk0LDQ3LDEwNDcsNTEsMTA3Myw1NCwxMDcyLDk3LDEwNDAsNjUsMTA2OCw5OCwxMDQyLDY2LDEwODksOTksMTA1Nyw2NywxMDc3LDEwMSwxMDQ1LDY5LDEwNTMsNzIsMzA1LDEwNSwxMDUwLDc1LDkyMSw3MywxMDUyLDc3LDEwODYsMTExLDEwNTQsNzksMTAwOSwxMTIsMTA4OCwxMTIsMTA1Niw4MCwxMDc1LDExNCwxMDU4LDg0LDIxNSwxMjAsMTA5MywxMjAsMTA2MSw4OCwxMDkxLDEyMSwxMDU5LDg5LDY1MjgzLDM1LDY1Mjg4LDQwLDY1Mjg5LDQxLDY1MjkyLDQ0LDY1MzA3LDU5LDY1MzExLDYzXSwicGwiOls2NTM3NCwxMjYsNjUzMDYsNTgsNjUyODEsMzMsODIxNiw5Niw4MjE3LDk2LDgyNDUsOTYsMTgwLDk2LDEyNDk0LDQ3LDEwNDcsNTEsMTA3Myw1NCwxMDcyLDk3LDEwNDAsNjUsMTA2OCw5OCwxMDQyLDY2LDEwODksOTksMTA1Nyw2NywxMDc3LDEwMSwxMDQ1LDY5LDEwNTMsNzIsMzA1LDEwNSwxMDUwLDc1LDkyMSw3MywxMDUyLDc3LDEwODYsMTExLDEwNTQsNzksMTAwOSwxMTIsMTA4OCwxMTIsMTA1Niw4MCwxMDc1LDExNCwxMDU4LDg0LDIxNSwxMjAsMTA5MywxMjAsMTA2MSw4OCwxMDkxLDEyMSwxMDU5LDg5LDY1MjgzLDM1LDY1Mjg4LDQwLDY1Mjg5LDQxLDY1MjkyLDQ0LDY1MzA3LDU5LDY1MzExLDYzXSwicHQtQlIiOls2NTM3NCwxMjYsNjUzMDYsNTgsNjUyODEsMzMsODIxNiw5Niw4MjE3LDk2LDgyNDUsOTYsMTgwLDk2LDEyNDk0LDQ3LDEwNDcsNTEsMTA3Myw1NCwxMDcyLDk3LDEwNDAsNjUsMTA2OCw5OCwxMDQyLDY2LDEwODksOTksMTA1Nyw2NywxMDc3LDEwMSwxMDQ1LDY5LDEwNTMsNzIsMzA1LDEwNSwxMDUwLDc1LDkyMSw3MywxMDUyLDc3LDEwODYsMTExLDEwNTQsNzksMTAwOSwxMTIsMTA4OCwxMTIsMTA1Niw4MCwxMDc1LDExNCwxMDU4LDg0LDIxNSwxMjAsMTA5MywxMjAsMTA2MSw4OCwxMDkxLDEyMSwxMDU5LDg5LDY1MjgzLDM1LDY1Mjg4LDQwLDY1Mjg5LDQxLDY1MjkyLDQ0LDY1MzA3LDU5LDY1MzExLDYzXSwicXBzLXBsb2MiOlsxNjAsMzIsODIxMSw0NSw2NTM3NCwxMjYsNjUzMDYsNTgsNjUyODEsMzMsODIxNiw5Niw4MjE3LDk2LDgyNDUsOTYsMTgwLDk2LDEyNDk0LDQ3LDEwNDcsNTEsMTA3Myw1NCwxMDcyLDk3LDEwNDAsNjUsMTA2OCw5OCwxMDQyLDY2LDEwODksOTksMTA1Nyw2NywxMDc3LDEwMSwxMDQ1LDY5LDEwNTMsNzIsMzA1LDEwNSwxMDUwLDc1LDkyMSw3MywxMDUyLDc3LDEwODYsMTExLDEwNTQsNzksMTA4OCwxMTIsMTA1Niw4MCwxMDc1LDExNCwxMDU4LDg0LDIxNSwxMjAsMTA5MywxMjAsMTA2MSw4OCwxMDkxLDEyMSwxMDU5LDg5LDY1MjgzLDM1LDY1Mjg4LDQwLDY1Mjg5LDQxLDY1MjkyLDQ0LDY1MzA3LDU5LDY1MzExLDYzXSwicnUiOls2NTM3NCwxMjYsNjUzMDYsNTgsNjUyODEsMzMsODIxNiw5Niw4MjE3LDk2LDgyNDUsOTYsMTgwLDk2LDEyNDk0LDQ3LDMwNSwxMDUsOTIxLDczLDEwMDksMTEyLDIxNSwxMjAsNjUyODMsMzUsNjUyODgsNDAsNjUyODksNDEsNjUyOTIsNDQsNjUzMDcsNTksNjUzMTEsNjNdLCJ0ciI6WzE2MCwzMiw4MjExLDQ1LDY1Mzc0LDEyNiw2NTMwNiw1OCw2NTI4MSwzMyw4MjQ1LDk2LDE4MCw5NiwxMjQ5NCw0NywxMDQ3LDUxLDEwNzMsNTQsMTA3Miw5NywxMDQwLDY1LDEwNjgsOTgsMTA0Miw2NiwxMDg5LDk5LDEwNTcsNjcsMTA3NywxMDEsMTA0NSw2OSwxMDUzLDcyLDEwNTAsNzUsOTIxLDczLDEwNTIsNzcsMTA4NiwxMTEsMTA1NCw3OSwxMDA5LDExMiwxMDg4LDExMiwxMDU2LDgwLDEwNzUsMTE0LDEwNTgsODQsMjE1LDEyMCwxMDkzLDEyMCwxMDYxLDg4LDEwOTEsMTIxLDEwNTksODksNjUyODMsMzUsNjUyODgsNDAsNjUyODksNDEsNjUyOTIsNDQsNjUzMDcsNTksNjUzMTEsNjNdLCJ6aC1oYW5zIjpbNjUzNzQsMTI2LDY1MzA2LDU4LDY1MjgxLDMzLDgyNDUsOTYsMTgwLDk2LDEyNDk0LDQ3LDEwNDcsNTEsMTA3Myw1NCwxMDcyLDk3LDEwNDAsNjUsMTA2OCw5OCwxMDQyLDY2LDEwODksOTksMTA1Nyw2NywxMDc3LDEwMSwxMDQ1LDY5LDEwNTMsNzIsMzA1LDEwNSwxMDUwLDc1LDkyMSw3MywxMDUyLDc3LDEwODYsMTExLDEwNTQsNzksMTAwOSwxMTIsMTA4OCwxMTIsMTA1Niw4MCwxMDc1LDExNCwxMDU4LDg0LDIxNSwxMjAsMTA5MywxMjAsMTA2MSw4OCwxMDkxLDEyMSwxMDU5LDg5LDY1Mjg4LDQwLDY1Mjg5LDQxXSwiemgtaGFudCI6WzgyMTEsNDUsNjUzNzQsMTI2LDE4MCw5NiwxMjQ5NCw0NywxMDQ3LDUxLDEwNzMsNTQsMTA3Miw5NywxMDQwLDY1LDEwNjgsOTgsMTA0Miw2NiwxMDg5LDk5LDEwNTcsNjcsMTA3NywxMDEsMTA0NSw2OSwxMDUzLDcyLDMwNSwxMDUsMTA1MCw3NSw5MjEsNzMsMTA1Miw3NywxMDg2LDExMSwxMDU0LDc5LDEwMDksMTEyLDEwODgsMTEyLDEwNTYsODAsMTA3NSwxMTQsMTA1OCw4NCwyMTUsMTIwLDEwOTMsMTIwLDEwNjEsODgsMTA5MSwxMjEsMTA1OSw4OSw2NTI4MywzNSw2NTMwNyw1OV19JykpLE5lLmNhY2hlPW5ldyBGbyh7Z2V0Q2FjaGVLZXk6SlNPTi5zdHJpbmdpZnl9LHQ9PntmdW5jdGlvbiBuKGMpe2NvbnN0IGQ9bmV3IE1hcDtmb3IobGV0IG09MDttPGMubGVuZ3RoO20rPTIpZC5zZXQoY1ttXSxjW20rMV0pO3JldHVybiBkfWZ1bmN0aW9uIGkoYyxkKXtjb25zdCBtPW5ldyBNYXAoYyk7Zm9yKGNvbnN0W2YsX11vZiBkKW0uc2V0KGYsXyk7cmV0dXJuIG19ZnVuY3Rpb24gcihjLGQpe2lmKCFjKXJldHVybiBkO2NvbnN0IG09bmV3IE1hcDtmb3IoY29uc3RbZixfXW9mIGMpZC5oYXMoZikmJm0uc2V0KGYsXyk7cmV0dXJuIG19Y29uc3Qgcz1OZS5hbWJpZ3VvdXNDaGFyYWN0ZXJEYXRhLnZhbHVlO2xldCBhPXQuZmlsdGVyKGM9PiFjLnN0YXJ0c1dpdGgoIl8iKSYmYyBpbiBzKTthLmxlbmd0aD09PTAmJihhPVsiX2RlZmF1bHQiXSk7bGV0IGw7Zm9yKGNvbnN0IGMgb2YgYSl7Y29uc3QgZD1uKHNbY10pO2w9cihsLGQpfWNvbnN0IG89bihzLl9jb21tb24pLHU9aShvLGwpO3JldHVybiBuZXcgTmUodSl9KSxOZS5fbG9jYWxlcz1uZXcgR2koKCk9Pk9iamVjdC5rZXlzKE5lLmFtYmlndW91c0NoYXJhY3RlckRhdGEudmFsdWUpLmZpbHRlcih0PT4hdC5zdGFydHNXaXRoKCJfIikpKTtsZXQgVHQ9TmU7Y29uc3QgX3Q9Y2xhc3MgX3R7c3RhdGljIGdldFJhd0RhdGEoKXtyZXR1cm4gSlNPTi5wYXJzZSgiWzksMTAsMTEsMTIsMTMsMzIsMTI3LDE2MCwxNzMsODQ3LDE1NjQsNDQ0Nyw0NDQ4LDYwNjgsNjA2OSw2MTU1LDYxNTYsNjE1Nyw2MTU4LDczNTUsNzM1Niw4MTkyLDgxOTMsODE5NCw4MTk1LDgxOTYsODE5Nyw4MTk4LDgxOTksODIwMCw4MjAxLDgyMDIsODIwMyw4MjA0LDgyMDUsODIwNiw4MjA3LDgyMzQsODIzNSw4MjM2LDgyMzcsODIzOCw4MjM5LDgyODcsODI4OCw4Mjg5LDgyOTAsODI5MSw4MjkyLDgyOTMsODI5NCw4Mjk1LDgyOTYsODI5Nyw4Mjk4LDgyOTksODMwMCw4MzAxLDgzMDIsODMwMywxMDI0MCwxMjI4OCwxMjY0NCw2NTAyNCw2NTAyNSw2NTAyNiw2NTAyNyw2NTAyOCw2NTAyOSw2NTAzMCw2NTAzMSw2NTAzMiw2NTAzMyw2NTAzNCw2NTAzNSw2NTAzNiw2NTAzNyw2NTAzOCw2NTAzOSw2NTI3OSw2NTQ0MCw2NTUyMCw2NTUyMSw2NTUyMiw2NTUyMyw2NTUyNCw2NTUyNSw2NTUyNiw2NTUyNyw2NTUyOCw2NTUzMiw3ODg0NCwxMTkxNTUsMTE5MTU2LDExOTE1NywxMTkxNTgsMTE5MTU5LDExOTE2MCwxMTkxNjEsMTE5MTYyLDkxNzUwNCw5MTc1MDUsOTE3NTA2LDkxNzUwNyw5MTc1MDgsOTE3NTA5LDkxNzUxMCw5MTc1MTEsOTE3NTEyLDkxNzUxMyw5MTc1MTQsOTE3NTE1LDkxNzUxNiw5MTc1MTcsOTE3NTE4LDkxNzUxOSw5MTc1MjAsOTE3NTIxLDkxNzUyMiw5MTc1MjMsOTE3NTI0LDkxNzUyNSw5MTc1MjYsOTE3NTI3LDkxNzUyOCw5MTc1MjksOTE3NTMwLDkxNzUzMSw5MTc1MzIsOTE3NTMzLDkxNzUzNCw5MTc1MzUsOTE3NTM2LDkxNzUzNyw5MTc1MzgsOTE3NTM5LDkxNzU0MCw5MTc1NDEsOTE3NTQyLDkxNzU0Myw5MTc1NDQsOTE3NTQ1LDkxNzU0Niw5MTc1NDcsOTE3NTQ4LDkxNzU0OSw5MTc1NTAsOTE3NTUxLDkxNzU1Miw5MTc1NTMsOTE3NTU0LDkxNzU1NSw5MTc1NTYsOTE3NTU3LDkxNzU1OCw5MTc1NTksOTE3NTYwLDkxNzU2MSw5MTc1NjIsOTE3NTYzLDkxNzU2NCw5MTc1NjUsOTE3NTY2LDkxNzU2Nyw5MTc1NjgsOTE3NTY5LDkxNzU3MCw5MTc1NzEsOTE3NTcyLDkxNzU3Myw5MTc1NzQsOTE3NTc1LDkxNzU3Niw5MTc1NzcsOTE3NTc4LDkxNzU3OSw5MTc1ODAsOTE3NTgxLDkxNzU4Miw5MTc1ODMsOTE3NTg0LDkxNzU4NSw5MTc1ODYsOTE3NTg3LDkxNzU4OCw5MTc1ODksOTE3NTkwLDkxNzU5MSw5MTc1OTIsOTE3NTkzLDkxNzU5NCw5MTc1OTUsOTE3NTk2LDkxNzU5Nyw5MTc1OTgsOTE3NTk5LDkxNzYwMCw5MTc2MDEsOTE3NjAyLDkxNzYwMyw5MTc2MDQsOTE3NjA1LDkxNzYwNiw5MTc2MDcsOTE3NjA4LDkxNzYwOSw5MTc2MTAsOTE3NjExLDkxNzYxMiw5MTc2MTMsOTE3NjE0LDkxNzYxNSw5MTc2MTYsOTE3NjE3LDkxNzYxOCw5MTc2MTksOTE3NjIwLDkxNzYyMSw5MTc2MjIsOTE3NjIzLDkxNzYyNCw5MTc2MjUsOTE3NjI2LDkxNzYyNyw5MTc2MjgsOTE3NjI5LDkxNzYzMCw5MTc2MzEsOTE3NzYwLDkxNzc2MSw5MTc3NjIsOTE3NzYzLDkxNzc2NCw5MTc3NjUsOTE3NzY2LDkxNzc2Nyw5MTc3NjgsOTE3NzY5LDkxNzc3MCw5MTc3NzEsOTE3NzcyLDkxNzc3Myw5MTc3NzQsOTE3Nzc1LDkxNzc3Niw5MTc3NzcsOTE3Nzc4LDkxNzc3OSw5MTc3ODAsOTE3NzgxLDkxNzc4Miw5MTc3ODMsOTE3Nzg0LDkxNzc4NSw5MTc3ODYsOTE3Nzg3LDkxNzc4OCw5MTc3ODksOTE3NzkwLDkxNzc5MSw5MTc3OTIsOTE3NzkzLDkxNzc5NCw5MTc3OTUsOTE3Nzk2LDkxNzc5Nyw5MTc3OTgsOTE3Nzk5LDkxNzgwMCw5MTc4MDEsOTE3ODAyLDkxNzgwMyw5MTc4MDQsOTE3ODA1LDkxNzgwNiw5MTc4MDcsOTE3ODA4LDkxNzgwOSw5MTc4MTAsOTE3ODExLDkxNzgxMiw5MTc4MTMsOTE3ODE0LDkxNzgxNSw5MTc4MTYsOTE3ODE3LDkxNzgxOCw5MTc4MTksOTE3ODIwLDkxNzgyMSw5MTc4MjIsOTE3ODIzLDkxNzgyNCw5MTc4MjUsOTE3ODI2LDkxNzgyNyw5MTc4MjgsOTE3ODI5LDkxNzgzMCw5MTc4MzEsOTE3ODMyLDkxNzgzMyw5MTc4MzQsOTE3ODM1LDkxNzgzNiw5MTc4MzcsOTE3ODM4LDkxNzgzOSw5MTc4NDAsOTE3ODQxLDkxNzg0Miw5MTc4NDMsOTE3ODQ0LDkxNzg0NSw5MTc4NDYsOTE3ODQ3LDkxNzg0OCw5MTc4NDksOTE3ODUwLDkxNzg1MSw5MTc4NTIsOTE3ODUzLDkxNzg1NCw5MTc4NTUsOTE3ODU2LDkxNzg1Nyw5MTc4NTgsOTE3ODU5LDkxNzg2MCw5MTc4NjEsOTE3ODYyLDkxNzg2Myw5MTc4NjQsOTE3ODY1LDkxNzg2Niw5MTc4NjcsOTE3ODY4LDkxNzg2OSw5MTc4NzAsOTE3ODcxLDkxNzg3Miw5MTc4NzMsOTE3ODc0LDkxNzg3NSw5MTc4NzYsOTE3ODc3LDkxNzg3OCw5MTc4NzksOTE3ODgwLDkxNzg4MSw5MTc4ODIsOTE3ODgzLDkxNzg4NCw5MTc4ODUsOTE3ODg2LDkxNzg4Nyw5MTc4ODgsOTE3ODg5LDkxNzg5MCw5MTc4OTEsOTE3ODkyLDkxNzg5Myw5MTc4OTQsOTE3ODk1LDkxNzg5Niw5MTc4OTcsOTE3ODk4LDkxNzg5OSw5MTc5MDAsOTE3OTAxLDkxNzkwMiw5MTc5MDMsOTE3OTA0LDkxNzkwNSw5MTc5MDYsOTE3OTA3LDkxNzkwOCw5MTc5MDksOTE3OTEwLDkxNzkxMSw5MTc5MTIsOTE3OTEzLDkxNzkxNCw5MTc5MTUsOTE3OTE2LDkxNzkxNyw5MTc5MTgsOTE3OTE5LDkxNzkyMCw5MTc5MjEsOTE3OTIyLDkxNzkyMyw5MTc5MjQsOTE3OTI1LDkxNzkyNiw5MTc5MjcsOTE3OTI4LDkxNzkyOSw5MTc5MzAsOTE3OTMxLDkxNzkzMiw5MTc5MzMsOTE3OTM0LDkxNzkzNSw5MTc5MzYsOTE3OTM3LDkxNzkzOCw5MTc5MzksOTE3OTQwLDkxNzk0MSw5MTc5NDIsOTE3OTQzLDkxNzk0NCw5MTc5NDUsOTE3OTQ2LDkxNzk0Nyw5MTc5NDgsOTE3OTQ5LDkxNzk1MCw5MTc5NTEsOTE3OTUyLDkxNzk1Myw5MTc5NTQsOTE3OTU1LDkxNzk1Niw5MTc5NTcsOTE3OTU4LDkxNzk1OSw5MTc5NjAsOTE3OTYxLDkxNzk2Miw5MTc5NjMsOTE3OTY0LDkxNzk2NSw5MTc5NjYsOTE3OTY3LDkxNzk2OCw5MTc5NjksOTE3OTcwLDkxNzk3MSw5MTc5NzIsOTE3OTczLDkxNzk3NCw5MTc5NzUsOTE3OTc2LDkxNzk3Nyw5MTc5NzgsOTE3OTc5LDkxNzk4MCw5MTc5ODEsOTE3OTgyLDkxNzk4Myw5MTc5ODQsOTE3OTg1LDkxNzk4Niw5MTc5ODcsOTE3OTg4LDkxNzk4OSw5MTc5OTAsOTE3OTkxLDkxNzk5Miw5MTc5OTMsOTE3OTk0LDkxNzk5NSw5MTc5OTYsOTE3OTk3LDkxNzk5OCw5MTc5OTldIil9c3RhdGljIGdldERhdGEoKXtyZXR1cm4gdGhpcy5fZGF0YXx8KHRoaXMuX2RhdGE9bmV3IFNldChfdC5nZXRSYXdEYXRhKCkpKSx0aGlzLl9kYXRhfXN0YXRpYyBpc0ludmlzaWJsZUNoYXJhY3Rlcih0KXtyZXR1cm4gX3QuZ2V0RGF0YSgpLmhhcyh0KX1zdGF0aWMgZ2V0IGNvZGVQb2ludHMoKXtyZXR1cm4gX3QuZ2V0RGF0YSgpfX07X3QuX2RhdGE9dm9pZCAwO2xldCBrdD1fdDt2YXIgWWk9e0VOVl9UWVBFOiJsb2NhbCIsTk9ERV9FTlY6InByb2R1Y3Rpb24ifTtsZXQgc3Q7Y29uc3QgUG49Z2xvYmFsVGhpcy52c2NvZGU7aWYodHlwZW9mIFBuPCJ1IiYmdHlwZW9mIFBuLnByb2Nlc3M8InUiKXtjb25zdCBlPVBuLnByb2Nlc3M7c3Q9e2dldCBwbGF0Zm9ybSgpe3JldHVybiBlLnBsYXRmb3JtfSxnZXQgYXJjaCgpe3JldHVybiBlLmFyY2h9LGdldCBlbnYoKXtyZXR1cm4gZS5lbnZ9LGN3ZCgpe3JldHVybiBlLmN3ZCgpfX19ZWxzZSB0eXBlb2YgcHJvY2VzczwidSImJnR5cGVvZiBwcm9jZXNzPy52ZXJzaW9ucz8ubm9kZT09InN0cmluZyI/c3Q9e2dldCBwbGF0Zm9ybSgpe3JldHVybiBwcm9jZXNzLnBsYXRmb3JtfSxnZXQgYXJjaCgpe3JldHVybiBwcm9jZXNzLmFyY2h9LGdldCBlbnYoKXtyZXR1cm4gWWl9LGN3ZCgpe3JldHVybiBZaS5WU0NPREVfQ1dEfHxwcm9jZXNzLmN3ZCgpfX06c3Q9e2dldCBwbGF0Zm9ybSgpe3JldHVybiB4dD8id2luMzIiOk5vPyJkYXJ3aW4iOiJsaW51eCJ9LGdldCBhcmNoKCl7fSxnZXQgZW52KCl7cmV0dXJue319LGN3ZCgpe3JldHVybiIvIn19O2NvbnN0IGp0PXN0LmN3ZCxHbz1zdC5lbnYsWG89c3QucGxhdGZvcm0sSm89NjUsWW89OTcsUW89OTAsWm89MTIyLHFlPTQ2LHNlPTQ3LGRlPTkyLE9lPTU4LEtvPTYzO2NsYXNzIFFpIGV4dGVuZHMgRXJyb3J7Y29uc3RydWN0b3IodCxuLGkpe2xldCByO3R5cGVvZiBuPT0ic3RyaW5nIiYmbi5pbmRleE9mKCJub3QgIik9PT0wPyhyPSJtdXN0IG5vdCBiZSIsbj1uLnJlcGxhY2UoL15ub3QgLywiIikpOnI9Im11c3QgYmUiO2NvbnN0IHM9dC5pbmRleE9mKCIuIikhPT0tMT8icHJvcGVydHkiOiJhcmd1bWVudCI7bGV0IGE9YFRoZSAiJHt0fSIgJHtzfSAke3J9IG9mIHR5cGUgJHtufWA7YSs9YC4gUmVjZWl2ZWQgdHlwZSAke3R5cGVvZiBpfWAsc3VwZXIoYSksdGhpcy5jb2RlPSJFUlJfSU5WQUxJRF9BUkdfVFlQRSJ9fWZ1bmN0aW9uIGVsKGUsdCl7aWYoZT09PW51bGx8fHR5cGVvZiBlIT0ib2JqZWN0Iil0aHJvdyBuZXcgUWkodCwiT2JqZWN0IixlKX1mdW5jdGlvbiBlZShlLHQpe2lmKHR5cGVvZiBlIT0ic3RyaW5nIil0aHJvdyBuZXcgUWkodCwic3RyaW5nIixlKX1jb25zdCBVZT1Ybz09PSJ3aW4zMiI7ZnVuY3Rpb24gVihlKXtyZXR1cm4gZT09PXNlfHxlPT09ZGV9ZnVuY3Rpb24gQm4oZSl7cmV0dXJuIGU9PT1zZX1mdW5jdGlvbiBWZShlKXtyZXR1cm4gZT49Sm8mJmU8PVFvfHxlPj1ZbyYmZTw9Wm99ZnVuY3Rpb24gJHQoZSx0LG4saSl7bGV0IHI9IiIscz0wLGE9LTEsbD0wLG89MDtmb3IobGV0IHU9MDt1PD1lLmxlbmd0aDsrK3Upe2lmKHU8ZS5sZW5ndGgpbz1lLmNoYXJDb2RlQXQodSk7ZWxzZXtpZihpKG8pKWJyZWFrO289c2V9aWYoaShvKSl7aWYoIShhPT09dS0xfHxsPT09MSkpaWYobD09PTIpe2lmKHIubGVuZ3RoPDJ8fHMhPT0yfHxyLmNoYXJDb2RlQXQoci5sZW5ndGgtMSkhPT1xZXx8ci5jaGFyQ29kZUF0KHIubGVuZ3RoLTIpIT09cWUpe2lmKHIubGVuZ3RoPjIpe2NvbnN0IGM9ci5sYXN0SW5kZXhPZihuKTtjPT09LTE/KHI9IiIscz0wKToocj1yLnNsaWNlKDAsYykscz1yLmxlbmd0aC0xLXIubGFzdEluZGV4T2YobikpLGE9dSxsPTA7Y29udGludWV9ZWxzZSBpZihyLmxlbmd0aCE9PTApe3I9IiIscz0wLGE9dSxsPTA7Y29udGludWV9fXQmJihyKz1yLmxlbmd0aD4wP2Ake259Li5gOiIuLiIscz0yKX1lbHNlIHIubGVuZ3RoPjA/cis9YCR7bn0ke2Uuc2xpY2UoYSsxLHUpfWA6cj1lLnNsaWNlKGErMSx1KSxzPXUtYS0xO2E9dSxsPTB9ZWxzZSBvPT09cWUmJmwhPT0tMT8rK2w6bD0tMX1yZXR1cm4gcn1mdW5jdGlvbiB0bChlKXtyZXR1cm4gZT9gJHtlWzBdPT09Ii4iPyIiOiIuIn0ke2V9YDoiIn1mdW5jdGlvbiBaaShlLHQpe2VsKHQsInBhdGhPYmplY3QiKTtjb25zdCBuPXQuZGlyfHx0LnJvb3QsaT10LmJhc2V8fGAke3QubmFtZXx8IiJ9JHt0bCh0LmV4dCl9YDtyZXR1cm4gbj9uPT09dC5yb290P2Ake259JHtpfWA6YCR7bn0ke2V9JHtpfWA6aX1jb25zdCBsZT17cmVzb2x2ZSguLi5lKXtsZXQgdD0iIixuPSIiLGk9ITE7Zm9yKGxldCByPWUubGVuZ3RoLTE7cj49LTE7ci0tKXtsZXQgcztpZihyPj0wKXtpZihzPWVbcl0sZWUocyxgcGF0aHNbJHtyfV1gKSxzLmxlbmd0aD09PTApY29udGludWV9ZWxzZSB0Lmxlbmd0aD09PTA/cz1qdCgpOihzPUdvW2A9JHt0fWBdfHxqdCgpLChzPT09dm9pZCAwfHxzLnNsaWNlKDAsMikudG9Mb3dlckNhc2UoKSE9PXQudG9Mb3dlckNhc2UoKSYmcy5jaGFyQ29kZUF0KDIpPT09ZGUpJiYocz1gJHt0fVxcYCkpO2NvbnN0IGE9cy5sZW5ndGg7bGV0IGw9MCxvPSIiLHU9ITE7Y29uc3QgYz1zLmNoYXJDb2RlQXQoMCk7aWYoYT09PTEpVihjKSYmKGw9MSx1PSEwKTtlbHNlIGlmKFYoYykpaWYodT0hMCxWKHMuY2hhckNvZGVBdCgxKSkpe2xldCBkPTIsbT1kO2Zvcig7ZDxhJiYhVihzLmNoYXJDb2RlQXQoZCkpOylkKys7aWYoZDxhJiZkIT09bSl7Y29uc3QgZj1zLnNsaWNlKG0sZCk7Zm9yKG09ZDtkPGEmJlYocy5jaGFyQ29kZUF0KGQpKTspZCsrO2lmKGQ8YSYmZCE9PW0pe2ZvcihtPWQ7ZDxhJiYhVihzLmNoYXJDb2RlQXQoZCkpOylkKys7KGQ9PT1hfHxkIT09bSkmJihvPWBcXFxcJHtmfVxcJHtzLnNsaWNlKG0sZCl9YCxsPWQpfX19ZWxzZSBsPTE7ZWxzZSBWZShjKSYmcy5jaGFyQ29kZUF0KDEpPT09T2UmJihvPXMuc2xpY2UoMCwyKSxsPTIsYT4yJiZWKHMuY2hhckNvZGVBdCgyKSkmJih1PSEwLGw9MykpO2lmKG8ubGVuZ3RoPjApaWYodC5sZW5ndGg+MCl7aWYoby50b0xvd2VyQ2FzZSgpIT09dC50b0xvd2VyQ2FzZSgpKWNvbnRpbnVlfWVsc2UgdD1vO2lmKGkpe2lmKHQubGVuZ3RoPjApYnJlYWt9ZWxzZSBpZihuPWAke3Muc2xpY2UobCl9XFwke259YCxpPXUsdSYmdC5sZW5ndGg+MClicmVha31yZXR1cm4gbj0kdChuLCFpLCJcXCIsViksaT9gJHt0fVxcJHtufWA6YCR7dH0ke259YHx8Ii4ifSxub3JtYWxpemUoZSl7ZWUoZSwicGF0aCIpO2NvbnN0IHQ9ZS5sZW5ndGg7aWYodD09PTApcmV0dXJuIi4iO2xldCBuPTAsaSxyPSExO2NvbnN0IHM9ZS5jaGFyQ29kZUF0KDApO2lmKHQ9PT0xKXJldHVybiBCbihzKT8iXFwiOmU7aWYoVihzKSlpZihyPSEwLFYoZS5jaGFyQ29kZUF0KDEpKSl7bGV0IGw9MixvPWw7Zm9yKDtsPHQmJiFWKGUuY2hhckNvZGVBdChsKSk7KWwrKztpZihsPHQmJmwhPT1vKXtjb25zdCB1PWUuc2xpY2UobyxsKTtmb3Iobz1sO2w8dCYmVihlLmNoYXJDb2RlQXQobCkpOylsKys7aWYobDx0JiZsIT09byl7Zm9yKG89bDtsPHQmJiFWKGUuY2hhckNvZGVBdChsKSk7KWwrKztpZihsPT09dClyZXR1cm5gXFxcXCR7dX1cXCR7ZS5zbGljZShvKX1cXGA7bCE9PW8mJihpPWBcXFxcJHt1fVxcJHtlLnNsaWNlKG8sbCl9YCxuPWwpfX19ZWxzZSBuPTE7ZWxzZSBWZShzKSYmZS5jaGFyQ29kZUF0KDEpPT09T2UmJihpPWUuc2xpY2UoMCwyKSxuPTIsdD4yJiZWKGUuY2hhckNvZGVBdCgyKSkmJihyPSEwLG49MykpO2xldCBhPW48dD8kdChlLnNsaWNlKG4pLCFyLCJcXCIsVik6IiI7cmV0dXJuIGEubGVuZ3RoPT09MCYmIXImJihhPSIuIiksYS5sZW5ndGg+MCYmVihlLmNoYXJDb2RlQXQodC0xKSkmJihhKz0iXFwiKSxpPT09dm9pZCAwP3I/YFxcJHthfWA6YTpyP2Ake2l9XFwke2F9YDpgJHtpfSR7YX1gfSxpc0Fic29sdXRlKGUpe2VlKGUsInBhdGgiKTtjb25zdCB0PWUubGVuZ3RoO2lmKHQ9PT0wKXJldHVybiExO2NvbnN0IG49ZS5jaGFyQ29kZUF0KDApO3JldHVybiBWKG4pfHx0PjImJlZlKG4pJiZlLmNoYXJDb2RlQXQoMSk9PT1PZSYmVihlLmNoYXJDb2RlQXQoMikpfSxqb2luKC4uLmUpe2lmKGUubGVuZ3RoPT09MClyZXR1cm4iLiI7bGV0IHQsbjtmb3IobGV0IHM9MDtzPGUubGVuZ3RoOysrcyl7Y29uc3QgYT1lW3NdO2VlKGEsInBhdGgiKSxhLmxlbmd0aD4wJiYodD09PXZvaWQgMD90PW49YTp0Kz1gXFwke2F9YCl9aWYodD09PXZvaWQgMClyZXR1cm4iLiI7bGV0IGk9ITAscj0wO2lmKHR5cGVvZiBuPT0ic3RyaW5nIiYmVihuLmNoYXJDb2RlQXQoMCkpKXsrK3I7Y29uc3Qgcz1uLmxlbmd0aDtzPjEmJlYobi5jaGFyQ29kZUF0KDEpKSYmKCsrcixzPjImJihWKG4uY2hhckNvZGVBdCgyKSk/KytyOmk9ITEpKX1pZihpKXtmb3IoO3I8dC5sZW5ndGgmJlYodC5jaGFyQ29kZUF0KHIpKTspcisrO3I+PTImJih0PWBcXCR7dC5zbGljZShyKX1gKX1yZXR1cm4gbGUubm9ybWFsaXplKHQpfSxyZWxhdGl2ZShlLHQpe2lmKGVlKGUsImZyb20iKSxlZSh0LCJ0byIpLGU9PT10KXJldHVybiIiO2NvbnN0IG49bGUucmVzb2x2ZShlKSxpPWxlLnJlc29sdmUodCk7aWYobj09PWl8fChlPW4udG9Mb3dlckNhc2UoKSx0PWkudG9Mb3dlckNhc2UoKSxlPT09dCkpcmV0dXJuIiI7bGV0IHI9MDtmb3IoO3I8ZS5sZW5ndGgmJmUuY2hhckNvZGVBdChyKT09PWRlOylyKys7bGV0IHM9ZS5sZW5ndGg7Zm9yKDtzLTE+ciYmZS5jaGFyQ29kZUF0KHMtMSk9PT1kZTspcy0tO2NvbnN0IGE9cy1yO2xldCBsPTA7Zm9yKDtsPHQubGVuZ3RoJiZ0LmNoYXJDb2RlQXQobCk9PT1kZTspbCsrO2xldCBvPXQubGVuZ3RoO2Zvcig7by0xPmwmJnQuY2hhckNvZGVBdChvLTEpPT09ZGU7KW8tLTtjb25zdCB1PW8tbCxjPWE8dT9hOnU7bGV0IGQ9LTEsbT0wO2Zvcig7bTxjO20rKyl7Y29uc3QgXz1lLmNoYXJDb2RlQXQocittKTtpZihfIT09dC5jaGFyQ29kZUF0KGwrbSkpYnJlYWs7Xz09PWRlJiYoZD1tKX1pZihtIT09Yyl7aWYoZD09PS0xKXJldHVybiBpfWVsc2V7aWYodT5jKXtpZih0LmNoYXJDb2RlQXQobCttKT09PWRlKXJldHVybiBpLnNsaWNlKGwrbSsxKTtpZihtPT09MilyZXR1cm4gaS5zbGljZShsK20pfWE+YyYmKGUuY2hhckNvZGVBdChyK20pPT09ZGU/ZD1tOm09PT0yJiYoZD0zKSksZD09PS0xJiYoZD0wKX1sZXQgZj0iIjtmb3IobT1yK2QrMTttPD1zOysrbSkobT09PXN8fGUuY2hhckNvZGVBdChtKT09PWRlKSYmKGYrPWYubGVuZ3RoPT09MD8iLi4iOiJcXC4uIik7cmV0dXJuIGwrPWQsZi5sZW5ndGg+MD9gJHtmfSR7aS5zbGljZShsLG8pfWA6KGkuY2hhckNvZGVBdChsKT09PWRlJiYrK2wsaS5zbGljZShsLG8pKX0sdG9OYW1lc3BhY2VkUGF0aChlKXtpZih0eXBlb2YgZSE9InN0cmluZyJ8fGUubGVuZ3RoPT09MClyZXR1cm4gZTtjb25zdCB0PWxlLnJlc29sdmUoZSk7aWYodC5sZW5ndGg8PTIpcmV0dXJuIGU7aWYodC5jaGFyQ29kZUF0KDApPT09ZGUpe2lmKHQuY2hhckNvZGVBdCgxKT09PWRlKXtjb25zdCBuPXQuY2hhckNvZGVBdCgyKTtpZihuIT09S28mJm4hPT1xZSlyZXR1cm5gXFxcXD9cXFVOQ1xcJHt0LnNsaWNlKDIpfWB9fWVsc2UgaWYoVmUodC5jaGFyQ29kZUF0KDApKSYmdC5jaGFyQ29kZUF0KDEpPT09T2UmJnQuY2hhckNvZGVBdCgyKT09PWRlKXJldHVybmBcXFxcP1xcJHt0fWA7cmV0dXJuIGV9LGRpcm5hbWUoZSl7ZWUoZSwicGF0aCIpO2NvbnN0IHQ9ZS5sZW5ndGg7aWYodD09PTApcmV0dXJuIi4iO2xldCBuPS0xLGk9MDtjb25zdCByPWUuY2hhckNvZGVBdCgwKTtpZih0PT09MSlyZXR1cm4gVihyKT9lOiIuIjtpZihWKHIpKXtpZihuPWk9MSxWKGUuY2hhckNvZGVBdCgxKSkpe2xldCBsPTIsbz1sO2Zvcig7bDx0JiYhVihlLmNoYXJDb2RlQXQobCkpOylsKys7aWYobDx0JiZsIT09byl7Zm9yKG89bDtsPHQmJlYoZS5jaGFyQ29kZUF0KGwpKTspbCsrO2lmKGw8dCYmbCE9PW8pe2ZvcihvPWw7bDx0JiYhVihlLmNoYXJDb2RlQXQobCkpOylsKys7aWYobD09PXQpcmV0dXJuIGU7bCE9PW8mJihuPWk9bCsxKX19fX1lbHNlIFZlKHIpJiZlLmNoYXJDb2RlQXQoMSk9PT1PZSYmKG49dD4yJiZWKGUuY2hhckNvZGVBdCgyKSk/MzoyLGk9bik7bGV0IHM9LTEsYT0hMDtmb3IobGV0IGw9dC0xO2w+PWk7LS1sKWlmKFYoZS5jaGFyQ29kZUF0KGwpKSl7aWYoIWEpe3M9bDticmVha319ZWxzZSBhPSExO2lmKHM9PT0tMSl7aWYobj09PS0xKXJldHVybiIuIjtzPW59cmV0dXJuIGUuc2xpY2UoMCxzKX0sYmFzZW5hbWUoZSx0KXt0IT09dm9pZCAwJiZlZSh0LCJzdWZmaXgiKSxlZShlLCJwYXRoIik7bGV0IG49MCxpPS0xLHI9ITAscztpZihlLmxlbmd0aD49MiYmVmUoZS5jaGFyQ29kZUF0KDApKSYmZS5jaGFyQ29kZUF0KDEpPT09T2UmJihuPTIpLHQhPT12b2lkIDAmJnQubGVuZ3RoPjAmJnQubGVuZ3RoPD1lLmxlbmd0aCl7aWYodD09PWUpcmV0dXJuIiI7bGV0IGE9dC5sZW5ndGgtMSxsPS0xO2ZvcihzPWUubGVuZ3RoLTE7cz49bjstLXMpe2NvbnN0IG89ZS5jaGFyQ29kZUF0KHMpO2lmKFYobykpe2lmKCFyKXtuPXMrMTticmVha319ZWxzZSBsPT09LTEmJihyPSExLGw9cysxKSxhPj0wJiYobz09PXQuY2hhckNvZGVBdChhKT8tLWE9PT0tMSYmKGk9cyk6KGE9LTEsaT1sKSl9cmV0dXJuIG49PT1pP2k9bDppPT09LTEmJihpPWUubGVuZ3RoKSxlLnNsaWNlKG4saSl9Zm9yKHM9ZS5sZW5ndGgtMTtzPj1uOy0tcylpZihWKGUuY2hhckNvZGVBdChzKSkpe2lmKCFyKXtuPXMrMTticmVha319ZWxzZSBpPT09LTEmJihyPSExLGk9cysxKTtyZXR1cm4gaT09PS0xPyIiOmUuc2xpY2UobixpKX0sZXh0bmFtZShlKXtlZShlLCJwYXRoIik7bGV0IHQ9MCxuPS0xLGk9MCxyPS0xLHM9ITAsYT0wO2UubGVuZ3RoPj0yJiZlLmNoYXJDb2RlQXQoMSk9PT1PZSYmVmUoZS5jaGFyQ29kZUF0KDApKSYmKHQ9aT0yKTtmb3IobGV0IGw9ZS5sZW5ndGgtMTtsPj10Oy0tbCl7Y29uc3Qgbz1lLmNoYXJDb2RlQXQobCk7aWYoVihvKSl7aWYoIXMpe2k9bCsxO2JyZWFrfWNvbnRpbnVlfXI9PT0tMSYmKHM9ITEscj1sKzEpLG89PT1xZT9uPT09LTE/bj1sOmEhPT0xJiYoYT0xKTpuIT09LTEmJihhPS0xKX1yZXR1cm4gbj09PS0xfHxyPT09LTF8fGE9PT0wfHxhPT09MSYmbj09PXItMSYmbj09PWkrMT8iIjplLnNsaWNlKG4scil9LGZvcm1hdDpaaS5iaW5kKG51bGwsIlxcIikscGFyc2UoZSl7ZWUoZSwicGF0aCIpO2NvbnN0IHQ9e3Jvb3Q6IiIsZGlyOiIiLGJhc2U6IiIsZXh0OiIiLG5hbWU6IiJ9O2lmKGUubGVuZ3RoPT09MClyZXR1cm4gdDtjb25zdCBuPWUubGVuZ3RoO2xldCBpPTAscj1lLmNoYXJDb2RlQXQoMCk7aWYobj09PTEpcmV0dXJuIFYocik/KHQucm9vdD10LmRpcj1lLHQpOih0LmJhc2U9dC5uYW1lPWUsdCk7aWYoVihyKSl7aWYoaT0xLFYoZS5jaGFyQ29kZUF0KDEpKSl7bGV0IGQ9MixtPWQ7Zm9yKDtkPG4mJiFWKGUuY2hhckNvZGVBdChkKSk7KWQrKztpZihkPG4mJmQhPT1tKXtmb3IobT1kO2Q8biYmVihlLmNoYXJDb2RlQXQoZCkpOylkKys7aWYoZDxuJiZkIT09bSl7Zm9yKG09ZDtkPG4mJiFWKGUuY2hhckNvZGVBdChkKSk7KWQrKztkPT09bj9pPWQ6ZCE9PW0mJihpPWQrMSl9fX19ZWxzZSBpZihWZShyKSYmZS5jaGFyQ29kZUF0KDEpPT09T2Upe2lmKG48PTIpcmV0dXJuIHQucm9vdD10LmRpcj1lLHQ7aWYoaT0yLFYoZS5jaGFyQ29kZUF0KDIpKSl7aWYobj09PTMpcmV0dXJuIHQucm9vdD10LmRpcj1lLHQ7aT0zfX1pPjAmJih0LnJvb3Q9ZS5zbGljZSgwLGkpKTtsZXQgcz0tMSxhPWksbD0tMSxvPSEwLHU9ZS5sZW5ndGgtMSxjPTA7Zm9yKDt1Pj1pOy0tdSl7aWYocj1lLmNoYXJDb2RlQXQodSksVihyKSl7aWYoIW8pe2E9dSsxO2JyZWFrfWNvbnRpbnVlfWw9PT0tMSYmKG89ITEsbD11KzEpLHI9PT1xZT9zPT09LTE/cz11OmMhPT0xJiYoYz0xKTpzIT09LTEmJihjPS0xKX1yZXR1cm4gbCE9PS0xJiYocz09PS0xfHxjPT09MHx8Yz09PTEmJnM9PT1sLTEmJnM9PT1hKzE/dC5iYXNlPXQubmFtZT1lLnNsaWNlKGEsbCk6KHQubmFtZT1lLnNsaWNlKGEscyksdC5iYXNlPWUuc2xpY2UoYSxsKSx0LmV4dD1lLnNsaWNlKHMsbCkpKSxhPjAmJmEhPT1pP3QuZGlyPWUuc2xpY2UoMCxhLTEpOnQuZGlyPXQucm9vdCx0fSxzZXA6IlxcIixkZWxpbWl0ZXI6IjsiLHdpbjMyOm51bGwscG9zaXg6bnVsbH0sbmw9KCgpPT57aWYoVWUpe2NvbnN0IGU9L1xcL2c7cmV0dXJuKCk9Pntjb25zdCB0PWp0KCkucmVwbGFjZShlLCIvIik7cmV0dXJuIHQuc2xpY2UodC5pbmRleE9mKCIvIikpfX1yZXR1cm4oKT0+anQoKX0pKCksdWU9e3Jlc29sdmUoLi4uZSl7bGV0IHQ9IiIsbj0hMTtmb3IobGV0IGk9ZS5sZW5ndGgtMTtpPj0tMSYmIW47aS0tKXtjb25zdCByPWk+PTA/ZVtpXTpubCgpO2VlKHIsYHBhdGhzWyR7aX1dYCksci5sZW5ndGghPT0wJiYodD1gJHtyfS8ke3R9YCxuPXIuY2hhckNvZGVBdCgwKT09PXNlKX1yZXR1cm4gdD0kdCh0LCFuLCIvIixCbiksbj9gLyR7dH1gOnQubGVuZ3RoPjA/dDoiLiJ9LG5vcm1hbGl6ZShlKXtpZihlZShlLCJwYXRoIiksZS5sZW5ndGg9PT0wKXJldHVybiIuIjtjb25zdCB0PWUuY2hhckNvZGVBdCgwKT09PXNlLG49ZS5jaGFyQ29kZUF0KGUubGVuZ3RoLTEpPT09c2U7cmV0dXJuIGU9JHQoZSwhdCwiLyIsQm4pLGUubGVuZ3RoPT09MD90PyIvIjpuPyIuLyI6Ii4iOihuJiYoZSs9Ii8iKSx0P2AvJHtlfWA6ZSl9LGlzQWJzb2x1dGUoZSl7cmV0dXJuIGVlKGUsInBhdGgiKSxlLmxlbmd0aD4wJiZlLmNoYXJDb2RlQXQoMCk9PT1zZX0sam9pbiguLi5lKXtpZihlLmxlbmd0aD09PTApcmV0dXJuIi4iO2xldCB0O2ZvcihsZXQgbj0wO248ZS5sZW5ndGg7KytuKXtjb25zdCBpPWVbbl07ZWUoaSwicGF0aCIpLGkubGVuZ3RoPjAmJih0PT09dm9pZCAwP3Q9aTp0Kz1gLyR7aX1gKX1yZXR1cm4gdD09PXZvaWQgMD8iLiI6dWUubm9ybWFsaXplKHQpfSxyZWxhdGl2ZShlLHQpe2lmKGVlKGUsImZyb20iKSxlZSh0LCJ0byIpLGU9PT10fHwoZT11ZS5yZXNvbHZlKGUpLHQ9dWUucmVzb2x2ZSh0KSxlPT09dCkpcmV0dXJuIiI7Y29uc3Qgbj0xLGk9ZS5sZW5ndGgscj1pLW4scz0xLGE9dC5sZW5ndGgtcyxsPXI8YT9yOmE7bGV0IG89LTEsdT0wO2Zvcig7dTxsO3UrKyl7Y29uc3QgZD1lLmNoYXJDb2RlQXQobit1KTtpZihkIT09dC5jaGFyQ29kZUF0KHMrdSkpYnJlYWs7ZD09PXNlJiYobz11KX1pZih1PT09bClpZihhPmwpe2lmKHQuY2hhckNvZGVBdChzK3UpPT09c2UpcmV0dXJuIHQuc2xpY2Uocyt1KzEpO2lmKHU9PT0wKXJldHVybiB0LnNsaWNlKHMrdSl9ZWxzZSByPmwmJihlLmNoYXJDb2RlQXQobit1KT09PXNlP289dTp1PT09MCYmKG89MCkpO2xldCBjPSIiO2Zvcih1PW4rbysxO3U8PWk7Kyt1KSh1PT09aXx8ZS5jaGFyQ29kZUF0KHUpPT09c2UpJiYoYys9Yy5sZW5ndGg9PT0wPyIuLiI6Ii8uLiIpO3JldHVybmAke2N9JHt0LnNsaWNlKHMrbyl9YH0sdG9OYW1lc3BhY2VkUGF0aChlKXtyZXR1cm4gZX0sZGlybmFtZShlKXtpZihlZShlLCJwYXRoIiksZS5sZW5ndGg9PT0wKXJldHVybiIuIjtjb25zdCB0PWUuY2hhckNvZGVBdCgwKT09PXNlO2xldCBuPS0xLGk9ITA7Zm9yKGxldCByPWUubGVuZ3RoLTE7cj49MTstLXIpaWYoZS5jaGFyQ29kZUF0KHIpPT09c2Upe2lmKCFpKXtuPXI7YnJlYWt9fWVsc2UgaT0hMTtyZXR1cm4gbj09PS0xP3Q/Ii8iOiIuIjp0JiZuPT09MT8iLy8iOmUuc2xpY2UoMCxuKX0sYmFzZW5hbWUoZSx0KXt0IT09dm9pZCAwJiZlZSh0LCJleHQiKSxlZShlLCJwYXRoIik7bGV0IG49MCxpPS0xLHI9ITAscztpZih0IT09dm9pZCAwJiZ0Lmxlbmd0aD4wJiZ0Lmxlbmd0aDw9ZS5sZW5ndGgpe2lmKHQ9PT1lKXJldHVybiIiO2xldCBhPXQubGVuZ3RoLTEsbD0tMTtmb3Iocz1lLmxlbmd0aC0xO3M+PTA7LS1zKXtjb25zdCBvPWUuY2hhckNvZGVBdChzKTtpZihvPT09c2Upe2lmKCFyKXtuPXMrMTticmVha319ZWxzZSBsPT09LTEmJihyPSExLGw9cysxKSxhPj0wJiYobz09PXQuY2hhckNvZGVBdChhKT8tLWE9PT0tMSYmKGk9cyk6KGE9LTEsaT1sKSl9cmV0dXJuIG49PT1pP2k9bDppPT09LTEmJihpPWUubGVuZ3RoKSxlLnNsaWNlKG4saSl9Zm9yKHM9ZS5sZW5ndGgtMTtzPj0wOy0tcylpZihlLmNoYXJDb2RlQXQocyk9PT1zZSl7aWYoIXIpe249cysxO2JyZWFrfX1lbHNlIGk9PT0tMSYmKHI9ITEsaT1zKzEpO3JldHVybiBpPT09LTE/IiI6ZS5zbGljZShuLGkpfSxleHRuYW1lKGUpe2VlKGUsInBhdGgiKTtsZXQgdD0tMSxuPTAsaT0tMSxyPSEwLHM9MDtmb3IobGV0IGE9ZS5sZW5ndGgtMTthPj0wOy0tYSl7Y29uc3QgbD1lLmNoYXJDb2RlQXQoYSk7aWYobD09PXNlKXtpZighcil7bj1hKzE7YnJlYWt9Y29udGludWV9aT09PS0xJiYocj0hMSxpPWErMSksbD09PXFlP3Q9PT0tMT90PWE6cyE9PTEmJihzPTEpOnQhPT0tMSYmKHM9LTEpfXJldHVybiB0PT09LTF8fGk9PT0tMXx8cz09PTB8fHM9PT0xJiZ0PT09aS0xJiZ0PT09bisxPyIiOmUuc2xpY2UodCxpKX0sZm9ybWF0OlppLmJpbmQobnVsbCwiLyIpLHBhcnNlKGUpe2VlKGUsInBhdGgiKTtjb25zdCB0PXtyb290OiIiLGRpcjoiIixiYXNlOiIiLGV4dDoiIixuYW1lOiIifTtpZihlLmxlbmd0aD09PTApcmV0dXJuIHQ7Y29uc3Qgbj1lLmNoYXJDb2RlQXQoMCk9PT1zZTtsZXQgaTtuPyh0LnJvb3Q9Ii8iLGk9MSk6aT0wO2xldCByPS0xLHM9MCxhPS0xLGw9ITAsbz1lLmxlbmd0aC0xLHU9MDtmb3IoO28+PWk7LS1vKXtjb25zdCBjPWUuY2hhckNvZGVBdChvKTtpZihjPT09c2Upe2lmKCFsKXtzPW8rMTticmVha31jb250aW51ZX1hPT09LTEmJihsPSExLGE9bysxKSxjPT09cWU/cj09PS0xP3I9bzp1IT09MSYmKHU9MSk6ciE9PS0xJiYodT0tMSl9aWYoYSE9PS0xKXtjb25zdCBjPXM9PT0wJiZuPzE6cztyPT09LTF8fHU9PT0wfHx1PT09MSYmcj09PWEtMSYmcj09PXMrMT90LmJhc2U9dC5uYW1lPWUuc2xpY2UoYyxhKToodC5uYW1lPWUuc2xpY2UoYyxyKSx0LmJhc2U9ZS5zbGljZShjLGEpLHQuZXh0PWUuc2xpY2UocixhKSl9cmV0dXJuIHM+MD90LmRpcj1lLnNsaWNlKDAscy0xKTpuJiYodC5kaXI9Ii8iKSx0fSxzZXA6Ii8iLGRlbGltaXRlcjoiOiIsd2luMzI6bnVsbCxwb3NpeDpudWxsfTt1ZS53aW4zMj1sZS53aW4zMj1sZSx1ZS5wb3NpeD1sZS5wb3NpeD11ZSxVZT9sZS5ub3JtYWxpemU6dWUubm9ybWFsaXplO2NvbnN0IGlsPVVlP2xlLmpvaW46dWUuam9pbjtVZT9sZS5yZXNvbHZlOnVlLnJlc29sdmUsVWU/bGUucmVsYXRpdmU6dWUucmVsYXRpdmUsVWU/bGUuZGlybmFtZTp1ZS5kaXJuYW1lLFVlP2xlLmJhc2VuYW1lOnVlLmJhc2VuYW1lLFVlP2xlLmV4dG5hbWU6dWUuZXh0bmFtZSxVZT9sZS5zZXA6dWUuc2VwO2NvbnN0IHJsPS9eXHdbXHdcZCsuLV0qJC8sc2w9L15cLy8sYWw9L15cL1wvLztmdW5jdGlvbiBvbChlLHQpe2lmKCFlLnNjaGVtZSYmdCl0aHJvdyBuZXcgRXJyb3IoYFtVcmlFcnJvcl06IFNjaGVtZSBpcyBtaXNzaW5nOiB7c2NoZW1lOiAiIiwgYXV0aG9yaXR5OiAiJHtlLmF1dGhvcml0eX0iLCBwYXRoOiAiJHtlLnBhdGh9IiwgcXVlcnk6ICIke2UucXVlcnl9IiwgZnJhZ21lbnQ6ICIke2UuZnJhZ21lbnR9In1gKTtpZihlLnNjaGVtZSYmIXJsLnRlc3QoZS5zY2hlbWUpKXRocm93IG5ldyBFcnJvcigiW1VyaUVycm9yXTogU2NoZW1lIGNvbnRhaW5zIGlsbGVnYWwgY2hhcmFjdGVycy4iKTtpZihlLnBhdGgpe2lmKGUuYXV0aG9yaXR5KXtpZighc2wudGVzdChlLnBhdGgpKXRocm93IG5ldyBFcnJvcignW1VyaUVycm9yXTogSWYgYSBVUkkgY29udGFpbnMgYW4gYXV0aG9yaXR5IGNvbXBvbmVudCwgdGhlbiB0aGUgcGF0aCBjb21wb25lbnQgbXVzdCBlaXRoZXIgYmUgZW1wdHkgb3IgYmVnaW4gd2l0aCBhIHNsYXNoICgiLyIpIGNoYXJhY3RlcicpfWVsc2UgaWYoYWwudGVzdChlLnBhdGgpKXRocm93IG5ldyBFcnJvcignW1VyaUVycm9yXTogSWYgYSBVUkkgZG9lcyBub3QgY29udGFpbiBhbiBhdXRob3JpdHkgY29tcG9uZW50LCB0aGVuIHRoZSBwYXRoIGNhbm5vdCBiZWdpbiB3aXRoIHR3byBzbGFzaCBjaGFyYWN0ZXJzICgiLy8iKScpfX1mdW5jdGlvbiBsbChlLHQpe3JldHVybiFlJiYhdD8iZmlsZSI6ZX1mdW5jdGlvbiB1bChlLHQpe3N3aXRjaChlKXtjYXNlImh0dHBzIjpjYXNlImh0dHAiOmNhc2UiZmlsZSI6dD90WzBdIT09VGUmJih0PVRlK3QpOnQ9VGU7YnJlYWt9cmV0dXJuIHR9Y29uc3QgWT0iIixUZT0iLyIsY2w9L14oKFteOi8/I10rPyk6KT8oXC9cLyhbXi8/I10qKSk/KFtePyNdKikoXD8oW14jXSopKT8oIyguKikpPy87bGV0IEVlPWNsYXNzIExue3N0YXRpYyBpc1VyaSh0KXtyZXR1cm4gdCBpbnN0YW5jZW9mIExuPyEwOnQ/dHlwZW9mIHQuYXV0aG9yaXR5PT0ic3RyaW5nIiYmdHlwZW9mIHQuZnJhZ21lbnQ9PSJzdHJpbmciJiZ0eXBlb2YgdC5wYXRoPT0ic3RyaW5nIiYmdHlwZW9mIHQucXVlcnk9PSJzdHJpbmciJiZ0eXBlb2YgdC5zY2hlbWU9PSJzdHJpbmciJiZ0eXBlb2YgdC5mc1BhdGg9PSJzdHJpbmciJiZ0eXBlb2YgdC53aXRoPT0iZnVuY3Rpb24iJiZ0eXBlb2YgdC50b1N0cmluZz09ImZ1bmN0aW9uIjohMX1jb25zdHJ1Y3Rvcih0LG4saSxyLHMsYT0hMSl7dHlwZW9mIHQ9PSJvYmplY3QiPyh0aGlzLnNjaGVtZT10LnNjaGVtZXx8WSx0aGlzLmF1dGhvcml0eT10LmF1dGhvcml0eXx8WSx0aGlzLnBhdGg9dC5wYXRofHxZLHRoaXMucXVlcnk9dC5xdWVyeXx8WSx0aGlzLmZyYWdtZW50PXQuZnJhZ21lbnR8fFkpOih0aGlzLnNjaGVtZT1sbCh0LGEpLHRoaXMuYXV0aG9yaXR5PW58fFksdGhpcy5wYXRoPXVsKHRoaXMuc2NoZW1lLGl8fFkpLHRoaXMucXVlcnk9cnx8WSx0aGlzLmZyYWdtZW50PXN8fFksb2wodGhpcyxhKSl9Z2V0IGZzUGF0aCgpe3JldHVybiBxbih0aGlzLCExKX13aXRoKHQpe2lmKCF0KXJldHVybiB0aGlzO2xldHtzY2hlbWU6bixhdXRob3JpdHk6aSxwYXRoOnIscXVlcnk6cyxmcmFnbWVudDphfT10O3JldHVybiBuPT09dm9pZCAwP249dGhpcy5zY2hlbWU6bj09PW51bGwmJihuPVkpLGk9PT12b2lkIDA/aT10aGlzLmF1dGhvcml0eTppPT09bnVsbCYmKGk9WSkscj09PXZvaWQgMD9yPXRoaXMucGF0aDpyPT09bnVsbCYmKHI9WSkscz09PXZvaWQgMD9zPXRoaXMucXVlcnk6cz09PW51bGwmJihzPVkpLGE9PT12b2lkIDA/YT10aGlzLmZyYWdtZW50OmE9PT1udWxsJiYoYT1ZKSxuPT09dGhpcy5zY2hlbWUmJmk9PT10aGlzLmF1dGhvcml0eSYmcj09PXRoaXMucGF0aCYmcz09PXRoaXMucXVlcnkmJmE9PT10aGlzLmZyYWdtZW50P3RoaXM6bmV3IGF0KG4saSxyLHMsYSl9c3RhdGljIHBhcnNlKHQsbj0hMSl7Y29uc3QgaT1jbC5leGVjKHQpO3JldHVybiBpP25ldyBhdChpWzJdfHxZLEd0KGlbNF18fFkpLEd0KGlbNV18fFkpLEd0KGlbN118fFkpLEd0KGlbOV18fFkpLG4pOm5ldyBhdChZLFksWSxZLFkpfXN0YXRpYyBmaWxlKHQpe2xldCBuPVk7aWYoeHQmJih0PXQucmVwbGFjZSgvXFwvZyxUZSkpLHRbMF09PT1UZSYmdFsxXT09PVRlKXtjb25zdCBpPXQuaW5kZXhPZihUZSwyKTtpPT09LTE/KG49dC5zdWJzdHJpbmcoMiksdD1UZSk6KG49dC5zdWJzdHJpbmcoMixpKSx0PXQuc3Vic3RyaW5nKGkpfHxUZSl9cmV0dXJuIG5ldyBhdCgiZmlsZSIsbix0LFksWSl9c3RhdGljIGZyb20odCxuKXtyZXR1cm4gbmV3IGF0KHQuc2NoZW1lLHQuYXV0aG9yaXR5LHQucGF0aCx0LnF1ZXJ5LHQuZnJhZ21lbnQsbil9c3RhdGljIGpvaW5QYXRoKHQsLi4ubil7aWYoIXQucGF0aCl0aHJvdyBuZXcgRXJyb3IoIltVcmlFcnJvcl06IGNhbm5vdCBjYWxsIGpvaW5QYXRoIG9uIFVSSSB3aXRob3V0IHBhdGgiKTtsZXQgaTtyZXR1cm4geHQmJnQuc2NoZW1lPT09ImZpbGUiP2k9TG4uZmlsZShsZS5qb2luKHFuKHQsITApLC4uLm4pKS5wYXRoOmk9dWUuam9pbih0LnBhdGgsLi4ubiksdC53aXRoKHtwYXRoOml9KX10b1N0cmluZyh0PSExKXtyZXR1cm4gT24odGhpcyx0KX10b0pTT04oKXtyZXR1cm4gdGhpc31zdGF0aWMgcmV2aXZlKHQpe2lmKHQpe2lmKHQgaW5zdGFuY2VvZiBMbilyZXR1cm4gdDt7Y29uc3Qgbj1uZXcgYXQodCk7cmV0dXJuIG4uX2Zvcm1hdHRlZD10LmV4dGVybmFsPz9udWxsLG4uX2ZzUGF0aD10Ll9zZXA9PT1LaT90LmZzUGF0aD8/bnVsbDpudWxsLG59fWVsc2UgcmV0dXJuIHR9fTtjb25zdCBLaT14dD8xOnZvaWQgMDtjbGFzcyBhdCBleHRlbmRzIEVle2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLl9mb3JtYXR0ZWQ9bnVsbCx0aGlzLl9mc1BhdGg9bnVsbH1nZXQgZnNQYXRoKCl7cmV0dXJuIHRoaXMuX2ZzUGF0aHx8KHRoaXMuX2ZzUGF0aD1xbih0aGlzLCExKSksdGhpcy5fZnNQYXRofXRvU3RyaW5nKHQ9ITEpe3JldHVybiB0P09uKHRoaXMsITApOih0aGlzLl9mb3JtYXR0ZWR8fCh0aGlzLl9mb3JtYXR0ZWQ9T24odGhpcywhMSkpLHRoaXMuX2Zvcm1hdHRlZCl9dG9KU09OKCl7Y29uc3QgdD17JG1pZDoxfTtyZXR1cm4gdGhpcy5fZnNQYXRoJiYodC5mc1BhdGg9dGhpcy5fZnNQYXRoLHQuX3NlcD1LaSksdGhpcy5fZm9ybWF0dGVkJiYodC5leHRlcm5hbD10aGlzLl9mb3JtYXR0ZWQpLHRoaXMucGF0aCYmKHQucGF0aD10aGlzLnBhdGgpLHRoaXMuc2NoZW1lJiYodC5zY2hlbWU9dGhpcy5zY2hlbWUpLHRoaXMuYXV0aG9yaXR5JiYodC5hdXRob3JpdHk9dGhpcy5hdXRob3JpdHkpLHRoaXMucXVlcnkmJih0LnF1ZXJ5PXRoaXMucXVlcnkpLHRoaXMuZnJhZ21lbnQmJih0LmZyYWdtZW50PXRoaXMuZnJhZ21lbnQpLHR9fWNvbnN0IGVyPXs1ODoiJTNBIiw0NzoiJTJGIiw2MzoiJTNGIiwzNToiJTIzIiw5MToiJTVCIiw5MzoiJTVEIiw2NDoiJTQwIiwzMzoiJTIxIiwzNjoiJTI0IiwzODoiJTI2IiwzOToiJTI3Iiw0MDoiJTI4Iiw0MToiJTI5Iiw0MjoiJTJBIiw0MzoiJTJCIiw0NDoiJTJDIiw1OToiJTNCIiw2MToiJTNEIiwzMjoiJTIwIn07ZnVuY3Rpb24gdHIoZSx0LG4pe2xldCBpLHI9LTE7Zm9yKGxldCBzPTA7czxlLmxlbmd0aDtzKyspe2NvbnN0IGE9ZS5jaGFyQ29kZUF0KHMpO2lmKGE+PTk3JiZhPD0xMjJ8fGE+PTY1JiZhPD05MHx8YT49NDgmJmE8PTU3fHxhPT09NDV8fGE9PT00Nnx8YT09PTk1fHxhPT09MTI2fHx0JiZhPT09NDd8fG4mJmE9PT05MXx8biYmYT09PTkzfHxuJiZhPT09NTgpciE9PS0xJiYoaSs9ZW5jb2RlVVJJQ29tcG9uZW50KGUuc3Vic3RyaW5nKHIscykpLHI9LTEpLGkhPT12b2lkIDAmJihpKz1lLmNoYXJBdChzKSk7ZWxzZXtpPT09dm9pZCAwJiYoaT1lLnN1YnN0cigwLHMpKTtjb25zdCBsPWVyW2FdO2whPT12b2lkIDA/KHIhPT0tMSYmKGkrPWVuY29kZVVSSUNvbXBvbmVudChlLnN1YnN0cmluZyhyLHMpKSxyPS0xKSxpKz1sKTpyPT09LTEmJihyPXMpfX1yZXR1cm4gciE9PS0xJiYoaSs9ZW5jb2RlVVJJQ29tcG9uZW50KGUuc3Vic3RyaW5nKHIpKSksaSE9PXZvaWQgMD9pOmV9ZnVuY3Rpb24gaGwoZSl7bGV0IHQ7Zm9yKGxldCBuPTA7bjxlLmxlbmd0aDtuKyspe2NvbnN0IGk9ZS5jaGFyQ29kZUF0KG4pO2k9PT0zNXx8aT09PTYzPyh0PT09dm9pZCAwJiYodD1lLnN1YnN0cigwLG4pKSx0Kz1lcltpXSk6dCE9PXZvaWQgMCYmKHQrPWVbbl0pfXJldHVybiB0IT09dm9pZCAwP3Q6ZX1mdW5jdGlvbiBxbihlLHQpe2xldCBuO3JldHVybiBlLmF1dGhvcml0eSYmZS5wYXRoLmxlbmd0aD4xJiZlLnNjaGVtZT09PSJmaWxlIj9uPWAvLyR7ZS5hdXRob3JpdHl9JHtlLnBhdGh9YDplLnBhdGguY2hhckNvZGVBdCgwKT09PTQ3JiYoZS5wYXRoLmNoYXJDb2RlQXQoMSk+PTY1JiZlLnBhdGguY2hhckNvZGVBdCgxKTw9OTB8fGUucGF0aC5jaGFyQ29kZUF0KDEpPj05NyYmZS5wYXRoLmNoYXJDb2RlQXQoMSk8PTEyMikmJmUucGF0aC5jaGFyQ29kZUF0KDIpPT09NTg/dD9uPWUucGF0aC5zdWJzdHIoMSk6bj1lLnBhdGhbMV0udG9Mb3dlckNhc2UoKStlLnBhdGguc3Vic3RyKDIpOm49ZS5wYXRoLHh0JiYobj1uLnJlcGxhY2UoL1wvL2csIlxcIikpLG59ZnVuY3Rpb24gT24oZSx0KXtjb25zdCBuPXQ/aGw6dHI7bGV0IGk9IiIse3NjaGVtZTpyLGF1dGhvcml0eTpzLHBhdGg6YSxxdWVyeTpsLGZyYWdtZW50Om99PWU7aWYociYmKGkrPXIsaSs9IjoiKSwoc3x8cj09PSJmaWxlIikmJihpKz1UZSxpKz1UZSkscyl7bGV0IHU9cy5pbmRleE9mKCJAIik7aWYodSE9PS0xKXtjb25zdCBjPXMuc3Vic3RyKDAsdSk7cz1zLnN1YnN0cih1KzEpLHU9Yy5sYXN0SW5kZXhPZigiOiIpLHU9PT0tMT9pKz1uKGMsITEsITEpOihpKz1uKGMuc3Vic3RyKDAsdSksITEsITEpLGkrPSI6IixpKz1uKGMuc3Vic3RyKHUrMSksITEsITApKSxpKz0iQCJ9cz1zLnRvTG93ZXJDYXNlKCksdT1zLmxhc3RJbmRleE9mKCI6IiksdT09PS0xP2krPW4ocywhMSwhMCk6KGkrPW4ocy5zdWJzdHIoMCx1KSwhMSwhMCksaSs9cy5zdWJzdHIodSkpfWlmKGEpe2lmKGEubGVuZ3RoPj0zJiZhLmNoYXJDb2RlQXQoMCk9PT00NyYmYS5jaGFyQ29kZUF0KDIpPT09NTgpe2NvbnN0IHU9YS5jaGFyQ29kZUF0KDEpO3U+PTY1JiZ1PD05MCYmKGE9YC8ke1N0cmluZy5mcm9tQ2hhckNvZGUodSszMil9OiR7YS5zdWJzdHIoMyl9YCl9ZWxzZSBpZihhLmxlbmd0aD49MiYmYS5jaGFyQ29kZUF0KDEpPT09NTgpe2NvbnN0IHU9YS5jaGFyQ29kZUF0KDApO3U+PTY1JiZ1PD05MCYmKGE9YCR7U3RyaW5nLmZyb21DaGFyQ29kZSh1KzMyKX06JHthLnN1YnN0cigyKX1gKX1pKz1uKGEsITAsITEpfXJldHVybiBsJiYoaSs9Ij8iLGkrPW4obCwhMSwhMSkpLG8mJihpKz0iIyIsaSs9dD9vOnRyKG8sITEsITEpKSxpfWZ1bmN0aW9uIG5yKGUpe3RyeXtyZXR1cm4gZGVjb2RlVVJJQ29tcG9uZW50KGUpfWNhdGNoe3JldHVybiBlLmxlbmd0aD4zP2Uuc3Vic3RyKDAsMykrbnIoZS5zdWJzdHIoMykpOmV9fWNvbnN0IGlyPS8oJVswLTlBLVphLXpdWzAtOUEtWmEtel0pKy9nO2Z1bmN0aW9uIEd0KGUpe3JldHVybiBlLm1hdGNoKGlyKT9lLnJlcGxhY2UoaXIsdD0+bnIodCkpOmV9dmFyIGplOyhmdW5jdGlvbihlKXtlLmluTWVtb3J5PSJpbm1lbW9yeSIsZS52c2NvZGU9InZzY29kZSIsZS5pbnRlcm5hbD0icHJpdmF0ZSIsZS53YWxrVGhyb3VnaD0id2Fsa1Rocm91Z2giLGUud2Fsa1Rocm91Z2hTbmlwcGV0PSJ3YWxrVGhyb3VnaFNuaXBwZXQiLGUuaHR0cD0iaHR0cCIsZS5odHRwcz0iaHR0cHMiLGUuZmlsZT0iZmlsZSIsZS5tYWlsdG89Im1haWx0byIsZS51bnRpdGxlZD0idW50aXRsZWQiLGUuZGF0YT0iZGF0YSIsZS5jb21tYW5kPSJjb21tYW5kIixlLnZzY29kZVJlbW90ZT0idnNjb2RlLXJlbW90ZSIsZS52c2NvZGVSZW1vdGVSZXNvdXJjZT0idnNjb2RlLXJlbW90ZS1yZXNvdXJjZSIsZS52c2NvZGVNYW5hZ2VkUmVtb3RlUmVzb3VyY2U9InZzY29kZS1tYW5hZ2VkLXJlbW90ZS1yZXNvdXJjZSIsZS52c2NvZGVVc2VyRGF0YT0idnNjb2RlLXVzZXJkYXRhIixlLnZzY29kZUN1c3RvbUVkaXRvcj0idnNjb2RlLWN1c3RvbS1lZGl0b3IiLGUudnNjb2RlTm90ZWJvb2tDZWxsPSJ2c2NvZGUtbm90ZWJvb2stY2VsbCIsZS52c2NvZGVOb3RlYm9va0NlbGxNZXRhZGF0YT0idnNjb2RlLW5vdGVib29rLWNlbGwtbWV0YWRhdGEiLGUudnNjb2RlTm90ZWJvb2tDZWxsTWV0YWRhdGFEaWZmPSJ2c2NvZGUtbm90ZWJvb2stY2VsbC1tZXRhZGF0YS1kaWZmIixlLnZzY29kZU5vdGVib29rQ2VsbE91dHB1dD0idnNjb2RlLW5vdGVib29rLWNlbGwtb3V0cHV0IixlLnZzY29kZU5vdGVib29rQ2VsbE91dHB1dERpZmY9InZzY29kZS1ub3RlYm9vay1jZWxsLW91dHB1dC1kaWZmIixlLnZzY29kZU5vdGVib29rTWV0YWRhdGE9InZzY29kZS1ub3RlYm9vay1tZXRhZGF0YSIsZS52c2NvZGVJbnRlcmFjdGl2ZUlucHV0PSJ2c2NvZGUtaW50ZXJhY3RpdmUtaW5wdXQiLGUudnNjb2RlU2V0dGluZ3M9InZzY29kZS1zZXR0aW5ncyIsZS52c2NvZGVXb3Jrc3BhY2VUcnVzdD0idnNjb2RlLXdvcmtzcGFjZS10cnVzdCIsZS52c2NvZGVUZXJtaW5hbD0idnNjb2RlLXRlcm1pbmFsIixlLnZzY29kZUNoYXRDb2RlQmxvY2s9InZzY29kZS1jaGF0LWNvZGUtYmxvY2siLGUudnNjb2RlQ2hhdENvZGVDb21wYXJlQmxvY2s9InZzY29kZS1jaGF0LWNvZGUtY29tcGFyZS1ibG9jayIsZS52c2NvZGVDaGF0U2Vzc3Npb249InZzY29kZS1jaGF0LWVkaXRvciIsZS53ZWJ2aWV3UGFuZWw9IndlYnZpZXctcGFuZWwiLGUudnNjb2RlV2Vidmlldz0idnNjb2RlLXdlYnZpZXciLGUuZXh0ZW5zaW9uPSJleHRlbnNpb24iLGUudnNjb2RlRmlsZVJlc291cmNlPSJ2c2NvZGUtZmlsZSIsZS50bXA9InRtcCIsZS52c2xzPSJ2c2xzIixlLnZzY29kZVNvdXJjZUNvbnRyb2w9InZzY29kZS1zY20iLGUuY29tbWVudHNJbnB1dD0iY29tbWVudCIsZS5jb2RlU2V0dGluZz0iY29kZS1zZXR0aW5nIixlLm91dHB1dENoYW5uZWw9Im91dHB1dCJ9KShqZXx8KGplPXt9KSk7Y29uc3QgZGw9InRrbiI7Y2xhc3MgbWx7Y29uc3RydWN0b3IoKXt0aGlzLl9ob3N0cz1PYmplY3QuY3JlYXRlKG51bGwpLHRoaXMuX3BvcnRzPU9iamVjdC5jcmVhdGUobnVsbCksdGhpcy5fY29ubmVjdGlvblRva2Vucz1PYmplY3QuY3JlYXRlKG51bGwpLHRoaXMuX3ByZWZlcnJlZFdlYlNjaGVtYT0iaHR0cCIsdGhpcy5fZGVsZWdhdGU9bnVsbCx0aGlzLl9zZXJ2ZXJSb290UGF0aD0iLyJ9c2V0UHJlZmVycmVkV2ViU2NoZW1hKHQpe3RoaXMuX3ByZWZlcnJlZFdlYlNjaGVtYT10fWdldCBfcmVtb3RlUmVzb3VyY2VzUGF0aCgpe3JldHVybiB1ZS5qb2luKHRoaXMuX3NlcnZlclJvb3RQYXRoLGplLnZzY29kZVJlbW90ZVJlc291cmNlKX1yZXdyaXRlKHQpe2lmKHRoaXMuX2RlbGVnYXRlKXRyeXtyZXR1cm4gdGhpcy5fZGVsZWdhdGUodCl9Y2F0Y2gobCl7cmV0dXJuIExlKGwpLHR9Y29uc3Qgbj10LmF1dGhvcml0eTtsZXQgaT10aGlzLl9ob3N0c1tuXTtpJiZpLmluZGV4T2YoIjoiKSE9PS0xJiZpLmluZGV4T2YoIlsiKT09PS0xJiYoaT1gWyR7aX1dYCk7Y29uc3Qgcj10aGlzLl9wb3J0c1tuXSxzPXRoaXMuX2Nvbm5lY3Rpb25Ub2tlbnNbbl07bGV0IGE9YHBhdGg9JHtlbmNvZGVVUklDb21wb25lbnQodC5wYXRoKX1gO3JldHVybiB0eXBlb2Ygcz09InN0cmluZyImJihhKz1gJiR7ZGx9PSR7ZW5jb2RlVVJJQ29tcG9uZW50KHMpfWApLEVlLmZyb20oe3NjaGVtZTpJbz90aGlzLl9wcmVmZXJyZWRXZWJTY2hlbWE6amUudnNjb2RlUmVtb3RlUmVzb3VyY2UsYXV0aG9yaXR5OmAke2l9OiR7cn1gLHBhdGg6dGhpcy5fcmVtb3RlUmVzb3VyY2VzUGF0aCxxdWVyeTphfSl9fWNvbnN0IGZsPW5ldyBtbCxwbD0idnNjb2RlLWFwcCIsVXQ9Y2xhc3MgVXR7YXNCcm93c2VyVXJpKHQpe2NvbnN0IG49dGhpcy50b1VyaSh0KTtyZXR1cm4gdGhpcy51cmlUb0Jyb3dzZXJVcmkobil9dXJpVG9Ccm93c2VyVXJpKHQpe3JldHVybiB0LnNjaGVtZT09PWplLnZzY29kZVJlbW90ZT9mbC5yZXdyaXRlKHQpOnQuc2NoZW1lPT09amUuZmlsZSYmKERvfHx6bz09PWAke2plLnZzY29kZUZpbGVSZXNvdXJjZX06Ly8ke1V0LkZBTExCQUNLX0FVVEhPUklUWX1gKT90LndpdGgoe3NjaGVtZTpqZS52c2NvZGVGaWxlUmVzb3VyY2UsYXV0aG9yaXR5OnQuYXV0aG9yaXR5fHxVdC5GQUxMQkFDS19BVVRIT1JJVFkscXVlcnk6bnVsbCxmcmFnbWVudDpudWxsfSk6dH10b1VyaSh0LG4pe2lmKEVlLmlzVXJpKHQpKXJldHVybiB0O2lmKGdsb2JhbFRoaXMuX1ZTQ09ERV9GSUxFX1JPT1Qpe2NvbnN0IGk9Z2xvYmFsVGhpcy5fVlNDT0RFX0ZJTEVfUk9PVDtpZigvXlx3W1x3XGQrLi1dKjpcL1wvLy50ZXN0KGkpKXJldHVybiBFZS5qb2luUGF0aChFZS5wYXJzZShpLCEwKSx0KTtjb25zdCByPWlsKGksdCk7cmV0dXJuIEVlLmZpbGUocil9cmV0dXJuIEVlLnBhcnNlKG4udG9VcmwodCkpfX07VXQuRkFMTEJBQ0tfQVVUSE9SSVRZPXBsO2xldCBWbj1VdDtjb25zdCBycj1uZXcgVm47dmFyIHNyOyhmdW5jdGlvbihlKXtjb25zdCB0PW5ldyBNYXAoW1siMSIseyJDcm9zcy1PcmlnaW4tT3BlbmVyLVBvbGljeSI6InNhbWUtb3JpZ2luIn1dLFsiMiIseyJDcm9zcy1PcmlnaW4tRW1iZWRkZXItUG9saWN5IjoicmVxdWlyZS1jb3JwIn1dLFsiMyIseyJDcm9zcy1PcmlnaW4tT3BlbmVyLVBvbGljeSI6InNhbWUtb3JpZ2luIiwiQ3Jvc3MtT3JpZ2luLUVtYmVkZGVyLVBvbGljeSI6InJlcXVpcmUtY29ycCJ9XV0pO2UuQ29vcEFuZENvZXA9T2JqZWN0LmZyZWV6ZSh0LmdldCgiMyIpKTtjb25zdCBuPSJ2c2NvZGUtY29pIjtmdW5jdGlvbiBpKHMpe2xldCBhO3R5cGVvZiBzPT0ic3RyaW5nIj9hPW5ldyBVUkwocykuc2VhcmNoUGFyYW1zOnMgaW5zdGFuY2VvZiBVUkw/YT1zLnNlYXJjaFBhcmFtczpFZS5pc1VyaShzKSYmKGE9bmV3IFVSTChzLnRvU3RyaW5nKCEwKSkuc2VhcmNoUGFyYW1zKTtjb25zdCBsPWE/LmdldChuKTtpZihsKXJldHVybiB0LmdldChsKX1lLmdldEhlYWRlcnNGcm9tUXVlcnk9aTtmdW5jdGlvbiByKHMsYSxsKXtpZighZ2xvYmFsVGhpcy5jcm9zc09yaWdpbklzb2xhdGVkKXJldHVybjtjb25zdCBvPWEmJmw/IjMiOmw/IjIiOiIxIjtzIGluc3RhbmNlb2YgVVJMU2VhcmNoUGFyYW1zP3Muc2V0KG4sbyk6c1tuXT1vfWUuYWRkU2VhcmNoUGFyYW09cn0pKHNyfHwoc3I9e30pKTtjb25zdCBqbj0iZGVmYXVsdCIsZ2w9IiRpbml0aWFsaXplIjtjbGFzcyBibHtjb25zdHJ1Y3Rvcih0LG4saSxyLHMpe3RoaXMudnNXb3JrZXI9dCx0aGlzLnJlcT1uLHRoaXMuY2hhbm5lbD1pLHRoaXMubWV0aG9kPXIsdGhpcy5hcmdzPXMsdGhpcy50eXBlPTB9fWNsYXNzIGFye2NvbnN0cnVjdG9yKHQsbixpLHIpe3RoaXMudnNXb3JrZXI9dCx0aGlzLnNlcT1uLHRoaXMucmVzPWksdGhpcy5lcnI9cix0aGlzLnR5cGU9MX19Y2xhc3MgX2x7Y29uc3RydWN0b3IodCxuLGkscixzKXt0aGlzLnZzV29ya2VyPXQsdGhpcy5yZXE9bix0aGlzLmNoYW5uZWw9aSx0aGlzLmV2ZW50TmFtZT1yLHRoaXMuYXJnPXMsdGhpcy50eXBlPTJ9fWNsYXNzIHdse2NvbnN0cnVjdG9yKHQsbixpKXt0aGlzLnZzV29ya2VyPXQsdGhpcy5yZXE9bix0aGlzLmV2ZW50PWksdGhpcy50eXBlPTN9fWNsYXNzIHZse2NvbnN0cnVjdG9yKHQsbil7dGhpcy52c1dvcmtlcj10LHRoaXMucmVxPW4sdGhpcy50eXBlPTR9fWNsYXNzIHlse2NvbnN0cnVjdG9yKHQpe3RoaXMuX3dvcmtlcklkPS0xLHRoaXMuX2hhbmRsZXI9dCx0aGlzLl9sYXN0U2VudFJlcT0wLHRoaXMuX3BlbmRpbmdSZXBsaWVzPU9iamVjdC5jcmVhdGUobnVsbCksdGhpcy5fcGVuZGluZ0VtaXR0ZXJzPW5ldyBNYXAsdGhpcy5fcGVuZGluZ0V2ZW50cz1uZXcgTWFwfXNldFdvcmtlcklkKHQpe3RoaXMuX3dvcmtlcklkPXR9c2VuZE1lc3NhZ2UodCxuLGkpe2NvbnN0IHI9U3RyaW5nKCsrdGhpcy5fbGFzdFNlbnRSZXEpO3JldHVybiBuZXcgUHJvbWlzZSgocyxhKT0+e3RoaXMuX3BlbmRpbmdSZXBsaWVzW3JdPXtyZXNvbHZlOnMscmVqZWN0OmF9LHRoaXMuX3NlbmQobmV3IGJsKHRoaXMuX3dvcmtlcklkLHIsdCxuLGkpKX0pfWxpc3Rlbih0LG4saSl7bGV0IHI9bnVsbDtjb25zdCBzPW5ldyB3ZSh7b25XaWxsQWRkRmlyc3RMaXN0ZW5lcjooKT0+e3I9U3RyaW5nKCsrdGhpcy5fbGFzdFNlbnRSZXEpLHRoaXMuX3BlbmRpbmdFbWl0dGVycy5zZXQocixzKSx0aGlzLl9zZW5kKG5ldyBfbCh0aGlzLl93b3JrZXJJZCxyLHQsbixpKSl9LG9uRGlkUmVtb3ZlTGFzdExpc3RlbmVyOigpPT57dGhpcy5fcGVuZGluZ0VtaXR0ZXJzLmRlbGV0ZShyKSx0aGlzLl9zZW5kKG5ldyB2bCh0aGlzLl93b3JrZXJJZCxyKSkscj1udWxsfX0pO3JldHVybiBzLmV2ZW50fWhhbmRsZU1lc3NhZ2UodCl7IXR8fCF0LnZzV29ya2VyfHx0aGlzLl93b3JrZXJJZCE9PS0xJiZ0LnZzV29ya2VyIT09dGhpcy5fd29ya2VySWR8fHRoaXMuX2hhbmRsZU1lc3NhZ2UodCl9Y3JlYXRlUHJveHlUb1JlbW90ZUNoYW5uZWwodCxuKXtjb25zdCBpPXtnZXQ6KHIscyk9Pih0eXBlb2Ygcz09InN0cmluZyImJiFyW3NdJiYobHIocyk/cltzXT1hPT50aGlzLmxpc3Rlbih0LHMsYSk6b3Iocyk/cltzXT10aGlzLmxpc3Rlbih0LHMsdm9pZCAwKTpzLmNoYXJDb2RlQXQoMCk9PT0zNiYmKHJbc109YXN5bmMoLi4uYSk9Pihhd2FpdCBuPy4oKSx0aGlzLnNlbmRNZXNzYWdlKHQscyxhKSkpKSxyW3NdKX07cmV0dXJuIG5ldyBQcm94eShPYmplY3QuY3JlYXRlKG51bGwpLGkpfV9oYW5kbGVNZXNzYWdlKHQpe3N3aXRjaCh0LnR5cGUpe2Nhc2UgMTpyZXR1cm4gdGhpcy5faGFuZGxlUmVwbHlNZXNzYWdlKHQpO2Nhc2UgMDpyZXR1cm4gdGhpcy5faGFuZGxlUmVxdWVzdE1lc3NhZ2UodCk7Y2FzZSAyOnJldHVybiB0aGlzLl9oYW5kbGVTdWJzY3JpYmVFdmVudE1lc3NhZ2UodCk7Y2FzZSAzOnJldHVybiB0aGlzLl9oYW5kbGVFdmVudE1lc3NhZ2UodCk7Y2FzZSA0OnJldHVybiB0aGlzLl9oYW5kbGVVbnN1YnNjcmliZUV2ZW50TWVzc2FnZSh0KX19X2hhbmRsZVJlcGx5TWVzc2FnZSh0KXtpZighdGhpcy5fcGVuZGluZ1JlcGxpZXNbdC5zZXFdKXtjb25zb2xlLndhcm4oIkdvdCByZXBseSB0byB1bmtub3duIHNlcSIpO3JldHVybn1jb25zdCBuPXRoaXMuX3BlbmRpbmdSZXBsaWVzW3Quc2VxXTtpZihkZWxldGUgdGhpcy5fcGVuZGluZ1JlcGxpZXNbdC5zZXFdLHQuZXJyKXtsZXQgaT10LmVycjt0LmVyci4kaXNFcnJvciYmKGk9bmV3IEVycm9yLGkubmFtZT10LmVyci5uYW1lLGkubWVzc2FnZT10LmVyci5tZXNzYWdlLGkuc3RhY2s9dC5lcnIuc3RhY2spLG4ucmVqZWN0KGkpO3JldHVybn1uLnJlc29sdmUodC5yZXMpfV9oYW5kbGVSZXF1ZXN0TWVzc2FnZSh0KXtjb25zdCBuPXQucmVxO3RoaXMuX2hhbmRsZXIuaGFuZGxlTWVzc2FnZSh0LmNoYW5uZWwsdC5tZXRob2QsdC5hcmdzKS50aGVuKHI9Pnt0aGlzLl9zZW5kKG5ldyBhcih0aGlzLl93b3JrZXJJZCxuLHIsdm9pZCAwKSl9LHI9PntyLmRldGFpbCBpbnN0YW5jZW9mIEVycm9yJiYoci5kZXRhaWw9UGkoci5kZXRhaWwpKSx0aGlzLl9zZW5kKG5ldyBhcih0aGlzLl93b3JrZXJJZCxuLHZvaWQgMCxQaShyKSkpfSl9X2hhbmRsZVN1YnNjcmliZUV2ZW50TWVzc2FnZSh0KXtjb25zdCBuPXQucmVxLGk9dGhpcy5faGFuZGxlci5oYW5kbGVFdmVudCh0LmNoYW5uZWwsdC5ldmVudE5hbWUsdC5hcmcpKHI9Pnt0aGlzLl9zZW5kKG5ldyB3bCh0aGlzLl93b3JrZXJJZCxuLHIpKX0pO3RoaXMuX3BlbmRpbmdFdmVudHMuc2V0KG4saSl9X2hhbmRsZUV2ZW50TWVzc2FnZSh0KXtpZighdGhpcy5fcGVuZGluZ0VtaXR0ZXJzLmhhcyh0LnJlcSkpe2NvbnNvbGUud2FybigiR290IGV2ZW50IGZvciB1bmtub3duIHJlcSIpO3JldHVybn10aGlzLl9wZW5kaW5nRW1pdHRlcnMuZ2V0KHQucmVxKS5maXJlKHQuZXZlbnQpfV9oYW5kbGVVbnN1YnNjcmliZUV2ZW50TWVzc2FnZSh0KXtpZighdGhpcy5fcGVuZGluZ0V2ZW50cy5oYXModC5yZXEpKXtjb25zb2xlLndhcm4oIkdvdCB1bnN1YnNjcmliZSBmb3IgdW5rbm93biByZXEiKTtyZXR1cm59dGhpcy5fcGVuZGluZ0V2ZW50cy5nZXQodC5yZXEpLmRpc3Bvc2UoKSx0aGlzLl9wZW5kaW5nRXZlbnRzLmRlbGV0ZSh0LnJlcSl9X3NlbmQodCl7Y29uc3Qgbj1bXTtpZih0LnR5cGU9PT0wKWZvcihsZXQgaT0wO2k8dC5hcmdzLmxlbmd0aDtpKyspdC5hcmdzW2ldaW5zdGFuY2VvZiBBcnJheUJ1ZmZlciYmbi5wdXNoKHQuYXJnc1tpXSk7ZWxzZSB0LnR5cGU9PT0xJiZ0LnJlcyBpbnN0YW5jZW9mIEFycmF5QnVmZmVyJiZuLnB1c2godC5yZXMpO3RoaXMuX2hhbmRsZXIuc2VuZE1lc3NhZ2UodCxuKX19ZnVuY3Rpb24gb3IoZSl7cmV0dXJuIGVbMF09PT0ibyImJmVbMV09PT0ibiImJlhpKGUuY2hhckNvZGVBdCgyKSl9ZnVuY3Rpb24gbHIoZSl7cmV0dXJuL15vbkR5bmFtaWMvLnRlc3QoZSkmJlhpKGUuY2hhckNvZGVBdCg5KSl9Y2xhc3MgeGx7Y29uc3RydWN0b3IodCxuKXt0aGlzLl9sb2NhbENoYW5uZWxzPW5ldyBNYXAsdGhpcy5fcmVtb3RlQ2hhbm5lbHM9bmV3IE1hcCx0aGlzLl9yZXF1ZXN0SGFuZGxlckZhY3Rvcnk9bix0aGlzLl9yZXF1ZXN0SGFuZGxlcj1udWxsLHRoaXMuX3Byb3RvY29sPW5ldyB5bCh7c2VuZE1lc3NhZ2U6KGkscik9Pnt0KGkscil9LGhhbmRsZU1lc3NhZ2U6KGkscixzKT0+dGhpcy5faGFuZGxlTWVzc2FnZShpLHIscyksaGFuZGxlRXZlbnQ6KGkscixzKT0+dGhpcy5faGFuZGxlRXZlbnQoaSxyLHMpfSl9b25tZXNzYWdlKHQpe3RoaXMuX3Byb3RvY29sLmhhbmRsZU1lc3NhZ2UodCl9X2hhbmRsZU1lc3NhZ2UodCxuLGkpe2lmKHQ9PT1qbiYmbj09PWdsKXJldHVybiB0aGlzLmluaXRpYWxpemUoaVswXSxpWzFdLGlbMl0pO2NvbnN0IHI9dD09PWpuP3RoaXMuX3JlcXVlc3RIYW5kbGVyOnRoaXMuX2xvY2FsQ2hhbm5lbHMuZ2V0KHQpO2lmKCFyKXJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoYE1pc3NpbmcgY2hhbm5lbCAke3R9IG9uIHdvcmtlciB0aHJlYWRgKSk7aWYodHlwZW9mIHJbbl0hPSJmdW5jdGlvbiIpcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihgTWlzc2luZyBtZXRob2QgJHtufSBvbiB3b3JrZXIgdGhyZWFkIGNoYW5uZWwgJHt0fWApKTt0cnl7cmV0dXJuIFByb21pc2UucmVzb2x2ZShyW25dLmFwcGx5KHIsaSkpfWNhdGNoKHMpe3JldHVybiBQcm9taXNlLnJlamVjdChzKX19X2hhbmRsZUV2ZW50KHQsbixpKXtjb25zdCByPXQ9PT1qbj90aGlzLl9yZXF1ZXN0SGFuZGxlcjp0aGlzLl9sb2NhbENoYW5uZWxzLmdldCh0KTtpZighcil0aHJvdyBuZXcgRXJyb3IoYE1pc3NpbmcgY2hhbm5lbCAke3R9IG9uIHdvcmtlciB0aHJlYWRgKTtpZihscihuKSl7Y29uc3Qgcz1yW25dLmNhbGwocixpKTtpZih0eXBlb2YgcyE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgRXJyb3IoYE1pc3NpbmcgZHluYW1pYyBldmVudCAke259IG9uIHJlcXVlc3QgaGFuZGxlci5gKTtyZXR1cm4gc31pZihvcihuKSl7Y29uc3Qgcz1yW25dO2lmKHR5cGVvZiBzIT0iZnVuY3Rpb24iKXRocm93IG5ldyBFcnJvcihgTWlzc2luZyBldmVudCAke259IG9uIHJlcXVlc3QgaGFuZGxlci5gKTtyZXR1cm4gc310aHJvdyBuZXcgRXJyb3IoYE1hbGZvcm1lZCBldmVudCBuYW1lICR7bn1gKX1nZXRDaGFubmVsKHQpe2lmKCF0aGlzLl9yZW1vdGVDaGFubmVscy5oYXModCkpe2NvbnN0IG49dGhpcy5fcHJvdG9jb2wuY3JlYXRlUHJveHlUb1JlbW90ZUNoYW5uZWwodCk7dGhpcy5fcmVtb3RlQ2hhbm5lbHMuc2V0KHQsbil9cmV0dXJuIHRoaXMuX3JlbW90ZUNoYW5uZWxzLmdldCh0KX1hc3luYyBpbml0aWFsaXplKHQsbixpKXtpZih0aGlzLl9wcm90b2NvbC5zZXRXb3JrZXJJZCh0KSx0aGlzLl9yZXF1ZXN0SGFuZGxlckZhY3Rvcnkpe3RoaXMuX3JlcXVlc3RIYW5kbGVyPXRoaXMuX3JlcXVlc3RIYW5kbGVyRmFjdG9yeSh0aGlzKTtyZXR1cm59cmV0dXJuIG4mJih0eXBlb2Ygbi5iYXNlVXJsPCJ1IiYmZGVsZXRlIG4uYmFzZVVybCx0eXBlb2Ygbi5wYXRoczwidSImJnR5cGVvZiBuLnBhdGhzLnZzPCJ1IiYmZGVsZXRlIG4ucGF0aHMudnMsdHlwZW9mIG4udHJ1c3RlZFR5cGVzUG9saWN5PCJ1IiYmZGVsZXRlIG4udHJ1c3RlZFR5cGVzUG9saWN5LG4uY2F0Y2hFcnJvcj0hMCxnbG9iYWxUaGlzLnJlcXVpcmUuY29uZmlnKG4pKSxpbXBvcnQoYCR7cnIuYXNCcm93c2VyVXJpKGAke2l9LmpzYCkudG9TdHJpbmcoITApfWApLnRoZW4ocz0+e2lmKHRoaXMuX3JlcXVlc3RIYW5kbGVyPXMuY3JlYXRlKHRoaXMpLCF0aGlzLl9yZXF1ZXN0SGFuZGxlcil0aHJvdyBuZXcgRXJyb3IoIk5vIFJlcXVlc3RIYW5kbGVyISIpfSl9fWNsYXNzICRle2NvbnN0cnVjdG9yKHQsbixpLHIpe3RoaXMub3JpZ2luYWxTdGFydD10LHRoaXMub3JpZ2luYWxMZW5ndGg9bix0aGlzLm1vZGlmaWVkU3RhcnQ9aSx0aGlzLm1vZGlmaWVkTGVuZ3RoPXJ9Z2V0T3JpZ2luYWxFbmQoKXtyZXR1cm4gdGhpcy5vcmlnaW5hbFN0YXJ0K3RoaXMub3JpZ2luYWxMZW5ndGh9Z2V0TW9kaWZpZWRFbmQoKXtyZXR1cm4gdGhpcy5tb2RpZmllZFN0YXJ0K3RoaXMubW9kaWZpZWRMZW5ndGh9fWZ1bmN0aW9uIHVyKGUsdCl7cmV0dXJuKHQ8PDUpLXQrZXwwfWZ1bmN0aW9uIFRsKGUsdCl7dD11cigxNDk0MTcsdCk7Zm9yKGxldCBuPTAsaT1lLmxlbmd0aDtuPGk7bisrKXQ9dXIoZS5jaGFyQ29kZUF0KG4pLHQpO3JldHVybiB0fWZ1bmN0aW9uICRuKGUsdCxuPTMyKXtjb25zdCBpPW4tdCxyPX4oKDE8PGkpLTEpO3JldHVybihlPDx0fChyJmUpPj4+aSk+Pj4wfWZ1bmN0aW9uIGNyKGUsdD0wLG49ZS5ieXRlTGVuZ3RoLGk9MCl7Zm9yKGxldCByPTA7cjxuO3IrKyllW3Qrcl09aX1mdW5jdGlvbiBrbChlLHQsbj0iMCIpe2Zvcig7ZS5sZW5ndGg8dDspZT1uK2U7cmV0dXJuIGV9ZnVuY3Rpb24gQXQoZSx0PTMyKXtyZXR1cm4gZSBpbnN0YW5jZW9mIEFycmF5QnVmZmVyP0FycmF5LmZyb20obmV3IFVpbnQ4QXJyYXkoZSkpLm1hcChuPT5uLnRvU3RyaW5nKDE2KS5wYWRTdGFydCgyLCIwIikpLmpvaW4oIiIpOmtsKChlPj4+MCkudG9TdHJpbmcoMTYpLHQvNCl9Y29uc3QgeW49Y2xhc3MgeW57Y29uc3RydWN0b3IoKXt0aGlzLl9oMD0xNzMyNTg0MTkzLHRoaXMuX2gxPTQwMjMyMzM0MTcsdGhpcy5faDI9MjU2MjM4MzEwMix0aGlzLl9oMz0yNzE3MzM4NzgsdGhpcy5faDQ9MzI4NTM3NzUyMCx0aGlzLl9idWZmPW5ldyBVaW50OEFycmF5KDY3KSx0aGlzLl9idWZmRFY9bmV3IERhdGFWaWV3KHRoaXMuX2J1ZmYuYnVmZmVyKSx0aGlzLl9idWZmTGVuPTAsdGhpcy5fdG90YWxMZW49MCx0aGlzLl9sZWZ0b3ZlckhpZ2hTdXJyb2dhdGU9MCx0aGlzLl9maW5pc2hlZD0hMX11cGRhdGUodCl7Y29uc3Qgbj10Lmxlbmd0aDtpZihuPT09MClyZXR1cm47Y29uc3QgaT10aGlzLl9idWZmO2xldCByPXRoaXMuX2J1ZmZMZW4scz10aGlzLl9sZWZ0b3ZlckhpZ2hTdXJyb2dhdGUsYSxsO2ZvcihzIT09MD8oYT1zLGw9LTEscz0wKTooYT10LmNoYXJDb2RlQXQoMCksbD0wKTs7KXtsZXQgbz1hO2lmKFZ0KGEpKWlmKGwrMTxuKXtjb25zdCB1PXQuY2hhckNvZGVBdChsKzEpO0ZuKHUpPyhsKyssbz1KaShhLHUpKTpvPTY1NTMzfWVsc2V7cz1hO2JyZWFrfWVsc2UgRm4oYSkmJihvPTY1NTMzKTtpZihyPXRoaXMuX3B1c2goaSxyLG8pLGwrKyxsPG4pYT10LmNoYXJDb2RlQXQobCk7ZWxzZSBicmVha310aGlzLl9idWZmTGVuPXIsdGhpcy5fbGVmdG92ZXJIaWdoU3Vycm9nYXRlPXN9X3B1c2godCxuLGkpe3JldHVybiBpPDEyOD90W24rK109aTppPDIwNDg/KHRbbisrXT0xOTJ8KGkmMTk4NCk+Pj42LHRbbisrXT0xMjh8KGkmNjMpPj4+MCk6aTw2NTUzNj8odFtuKytdPTIyNHwoaSY2MTQ0MCk+Pj4xMix0W24rK109MTI4fChpJjQwMzIpPj4+Nix0W24rK109MTI4fChpJjYzKT4+PjApOih0W24rK109MjQwfChpJjE4MzUwMDgpPj4+MTgsdFtuKytdPTEyOHwoaSYyNTgwNDgpPj4+MTIsdFtuKytdPTEyOHwoaSY0MDMyKT4+PjYsdFtuKytdPTEyOHwoaSY2Myk+Pj4wKSxuPj02NCYmKHRoaXMuX3N0ZXAoKSxuLT02NCx0aGlzLl90b3RhbExlbis9NjQsdFswXT10WzY0XSx0WzFdPXRbNjVdLHRbMl09dFs2Nl0pLG59ZGlnZXN0KCl7cmV0dXJuIHRoaXMuX2ZpbmlzaGVkfHwodGhpcy5fZmluaXNoZWQ9ITAsdGhpcy5fbGVmdG92ZXJIaWdoU3Vycm9nYXRlJiYodGhpcy5fbGVmdG92ZXJIaWdoU3Vycm9nYXRlPTAsdGhpcy5fYnVmZkxlbj10aGlzLl9wdXNoKHRoaXMuX2J1ZmYsdGhpcy5fYnVmZkxlbiw2NTUzMykpLHRoaXMuX3RvdGFsTGVuKz10aGlzLl9idWZmTGVuLHRoaXMuX3dyYXBVcCgpKSxBdCh0aGlzLl9oMCkrQXQodGhpcy5faDEpK0F0KHRoaXMuX2gyKStBdCh0aGlzLl9oMykrQXQodGhpcy5faDQpfV93cmFwVXAoKXt0aGlzLl9idWZmW3RoaXMuX2J1ZmZMZW4rK109MTI4LGNyKHRoaXMuX2J1ZmYsdGhpcy5fYnVmZkxlbiksdGhpcy5fYnVmZkxlbj41NiYmKHRoaXMuX3N0ZXAoKSxjcih0aGlzLl9idWZmKSk7Y29uc3QgdD04KnRoaXMuX3RvdGFsTGVuO3RoaXMuX2J1ZmZEVi5zZXRVaW50MzIoNTYsTWF0aC5mbG9vcih0LzQyOTQ5NjcyOTYpLCExKSx0aGlzLl9idWZmRFYuc2V0VWludDMyKDYwLHQlNDI5NDk2NzI5NiwhMSksdGhpcy5fc3RlcCgpfV9zdGVwKCl7Y29uc3QgdD15bi5fYmlnQmxvY2szMixuPXRoaXMuX2J1ZmZEVjtmb3IobGV0IGQ9MDtkPDY0O2QrPTQpdC5zZXRVaW50MzIoZCxuLmdldFVpbnQzMihkLCExKSwhMSk7Zm9yKGxldCBkPTY0O2Q8MzIwO2QrPTQpdC5zZXRVaW50MzIoZCwkbih0LmdldFVpbnQzMihkLTEyLCExKV50LmdldFVpbnQzMihkLTMyLCExKV50LmdldFVpbnQzMihkLTU2LCExKV50LmdldFVpbnQzMihkLTY0LCExKSwxKSwhMSk7bGV0IGk9dGhpcy5faDAscj10aGlzLl9oMSxzPXRoaXMuX2gyLGE9dGhpcy5faDMsbD10aGlzLl9oNCxvLHUsYztmb3IobGV0IGQ9MDtkPDgwO2QrKylkPDIwPyhvPXImc3x+ciZhLHU9MTUxODUwMDI0OSk6ZDw0MD8obz1yXnNeYSx1PTE4NTk3NzUzOTMpOmQ8NjA/KG89ciZzfHImYXxzJmEsdT0yNDAwOTU5NzA4KToobz1yXnNeYSx1PTMzOTU0Njk3ODIpLGM9JG4oaSw1KStvK2wrdSt0LmdldFVpbnQzMihkKjQsITEpJjQyOTQ5NjcyOTUsbD1hLGE9cyxzPSRuKHIsMzApLHI9aSxpPWM7dGhpcy5faDA9dGhpcy5faDAraSY0Mjk0OTY3Mjk1LHRoaXMuX2gxPXRoaXMuX2gxK3ImNDI5NDk2NzI5NSx0aGlzLl9oMj10aGlzLl9oMitzJjQyOTQ5NjcyOTUsdGhpcy5faDM9dGhpcy5faDMrYSY0Mjk0OTY3Mjk1LHRoaXMuX2g0PXRoaXMuX2g0K2wmNDI5NDk2NzI5NX19O3luLl9iaWdCbG9jazMyPW5ldyBEYXRhVmlldyhuZXcgQXJyYXlCdWZmZXIoMzIwKSk7bGV0IGhyPXluO2NsYXNzIGRye2NvbnN0cnVjdG9yKHQpe3RoaXMuc291cmNlPXR9Z2V0RWxlbWVudHMoKXtjb25zdCB0PXRoaXMuc291cmNlLG49bmV3IEludDMyQXJyYXkodC5sZW5ndGgpO2ZvcihsZXQgaT0wLHI9dC5sZW5ndGg7aTxyO2krKyluW2ldPXQuY2hhckNvZGVBdChpKTtyZXR1cm4gbn19ZnVuY3Rpb24gQWwoZSx0LG4pe3JldHVybiBuZXcgR2UobmV3IGRyKGUpLG5ldyBkcih0KSkuQ29tcHV0ZURpZmYobikuY2hhbmdlc31jbGFzcyBvdHtzdGF0aWMgQXNzZXJ0KHQsbil7aWYoIXQpdGhyb3cgbmV3IEVycm9yKG4pfX1jbGFzcyBsdHtzdGF0aWMgQ29weSh0LG4saSxyLHMpe2ZvcihsZXQgYT0wO2E8czthKyspaVtyK2FdPXRbbithXX1zdGF0aWMgQ29weTIodCxuLGkscixzKXtmb3IobGV0IGE9MDthPHM7YSsrKWlbcithXT10W24rYV19fWNsYXNzIG1ye2NvbnN0cnVjdG9yKCl7dGhpcy5tX2NoYW5nZXM9W10sdGhpcy5tX29yaWdpbmFsU3RhcnQ9MTA3Mzc0MTgyNCx0aGlzLm1fbW9kaWZpZWRTdGFydD0xMDczNzQxODI0LHRoaXMubV9vcmlnaW5hbENvdW50PTAsdGhpcy5tX21vZGlmaWVkQ291bnQ9MH1NYXJrTmV4dENoYW5nZSgpeyh0aGlzLm1fb3JpZ2luYWxDb3VudD4wfHx0aGlzLm1fbW9kaWZpZWRDb3VudD4wKSYmdGhpcy5tX2NoYW5nZXMucHVzaChuZXcgJGUodGhpcy5tX29yaWdpbmFsU3RhcnQsdGhpcy5tX29yaWdpbmFsQ291bnQsdGhpcy5tX21vZGlmaWVkU3RhcnQsdGhpcy5tX21vZGlmaWVkQ291bnQpKSx0aGlzLm1fb3JpZ2luYWxDb3VudD0wLHRoaXMubV9tb2RpZmllZENvdW50PTAsdGhpcy5tX29yaWdpbmFsU3RhcnQ9MTA3Mzc0MTgyNCx0aGlzLm1fbW9kaWZpZWRTdGFydD0xMDczNzQxODI0fUFkZE9yaWdpbmFsRWxlbWVudCh0LG4pe3RoaXMubV9vcmlnaW5hbFN0YXJ0PU1hdGgubWluKHRoaXMubV9vcmlnaW5hbFN0YXJ0LHQpLHRoaXMubV9tb2RpZmllZFN0YXJ0PU1hdGgubWluKHRoaXMubV9tb2RpZmllZFN0YXJ0LG4pLHRoaXMubV9vcmlnaW5hbENvdW50Kyt9QWRkTW9kaWZpZWRFbGVtZW50KHQsbil7dGhpcy5tX29yaWdpbmFsU3RhcnQ9TWF0aC5taW4odGhpcy5tX29yaWdpbmFsU3RhcnQsdCksdGhpcy5tX21vZGlmaWVkU3RhcnQ9TWF0aC5taW4odGhpcy5tX21vZGlmaWVkU3RhcnQsbiksdGhpcy5tX21vZGlmaWVkQ291bnQrK31nZXRDaGFuZ2VzKCl7cmV0dXJuKHRoaXMubV9vcmlnaW5hbENvdW50PjB8fHRoaXMubV9tb2RpZmllZENvdW50PjApJiZ0aGlzLk1hcmtOZXh0Q2hhbmdlKCksdGhpcy5tX2NoYW5nZXN9Z2V0UmV2ZXJzZUNoYW5nZXMoKXtyZXR1cm4odGhpcy5tX29yaWdpbmFsQ291bnQ+MHx8dGhpcy5tX21vZGlmaWVkQ291bnQ+MCkmJnRoaXMuTWFya05leHRDaGFuZ2UoKSx0aGlzLm1fY2hhbmdlcy5yZXZlcnNlKCksdGhpcy5tX2NoYW5nZXN9fWNsYXNzIEdle2NvbnN0cnVjdG9yKHQsbixpPW51bGwpe3RoaXMuQ29udGludWVQcm9jZXNzaW5nUHJlZGljYXRlPWksdGhpcy5fb3JpZ2luYWxTZXF1ZW5jZT10LHRoaXMuX21vZGlmaWVkU2VxdWVuY2U9bjtjb25zdFtyLHMsYV09R2UuX2dldEVsZW1lbnRzKHQpLFtsLG8sdV09R2UuX2dldEVsZW1lbnRzKG4pO3RoaXMuX2hhc1N0cmluZ3M9YSYmdSx0aGlzLl9vcmlnaW5hbFN0cmluZ0VsZW1lbnRzPXIsdGhpcy5fb3JpZ2luYWxFbGVtZW50c09ySGFzaD1zLHRoaXMuX21vZGlmaWVkU3RyaW5nRWxlbWVudHM9bCx0aGlzLl9tb2RpZmllZEVsZW1lbnRzT3JIYXNoPW8sdGhpcy5tX2ZvcndhcmRIaXN0b3J5PVtdLHRoaXMubV9yZXZlcnNlSGlzdG9yeT1bXX1zdGF0aWMgX2lzU3RyaW5nQXJyYXkodCl7cmV0dXJuIHQubGVuZ3RoPjAmJnR5cGVvZiB0WzBdPT0ic3RyaW5nIn1zdGF0aWMgX2dldEVsZW1lbnRzKHQpe2NvbnN0IG49dC5nZXRFbGVtZW50cygpO2lmKEdlLl9pc1N0cmluZ0FycmF5KG4pKXtjb25zdCBpPW5ldyBJbnQzMkFycmF5KG4ubGVuZ3RoKTtmb3IobGV0IHI9MCxzPW4ubGVuZ3RoO3I8cztyKyspaVtyXT1UbChuW3JdLDApO3JldHVybltuLGksITBdfXJldHVybiBuIGluc3RhbmNlb2YgSW50MzJBcnJheT9bW10sbiwhMV06W1tdLG5ldyBJbnQzMkFycmF5KG4pLCExXX1FbGVtZW50c0FyZUVxdWFsKHQsbil7cmV0dXJuIHRoaXMuX29yaWdpbmFsRWxlbWVudHNPckhhc2hbdF0hPT10aGlzLl9tb2RpZmllZEVsZW1lbnRzT3JIYXNoW25dPyExOnRoaXMuX2hhc1N0cmluZ3M/dGhpcy5fb3JpZ2luYWxTdHJpbmdFbGVtZW50c1t0XT09PXRoaXMuX21vZGlmaWVkU3RyaW5nRWxlbWVudHNbbl06ITB9RWxlbWVudHNBcmVTdHJpY3RFcXVhbCh0LG4pe2lmKCF0aGlzLkVsZW1lbnRzQXJlRXF1YWwodCxuKSlyZXR1cm4hMTtjb25zdCBpPUdlLl9nZXRTdHJpY3RFbGVtZW50KHRoaXMuX29yaWdpbmFsU2VxdWVuY2UsdCkscj1HZS5fZ2V0U3RyaWN0RWxlbWVudCh0aGlzLl9tb2RpZmllZFNlcXVlbmNlLG4pO3JldHVybiBpPT09cn1zdGF0aWMgX2dldFN0cmljdEVsZW1lbnQodCxuKXtyZXR1cm4gdHlwZW9mIHQuZ2V0U3RyaWN0RWxlbWVudD09ImZ1bmN0aW9uIj90LmdldFN0cmljdEVsZW1lbnQobik6bnVsbH1PcmlnaW5hbEVsZW1lbnRzQXJlRXF1YWwodCxuKXtyZXR1cm4gdGhpcy5fb3JpZ2luYWxFbGVtZW50c09ySGFzaFt0XSE9PXRoaXMuX29yaWdpbmFsRWxlbWVudHNPckhhc2hbbl0/ITE6dGhpcy5faGFzU3RyaW5ncz90aGlzLl9vcmlnaW5hbFN0cmluZ0VsZW1lbnRzW3RdPT09dGhpcy5fb3JpZ2luYWxTdHJpbmdFbGVtZW50c1tuXTohMH1Nb2RpZmllZEVsZW1lbnRzQXJlRXF1YWwodCxuKXtyZXR1cm4gdGhpcy5fbW9kaWZpZWRFbGVtZW50c09ySGFzaFt0XSE9PXRoaXMuX21vZGlmaWVkRWxlbWVudHNPckhhc2hbbl0/ITE6dGhpcy5faGFzU3RyaW5ncz90aGlzLl9tb2RpZmllZFN0cmluZ0VsZW1lbnRzW3RdPT09dGhpcy5fbW9kaWZpZWRTdHJpbmdFbGVtZW50c1tuXTohMH1Db21wdXRlRGlmZih0KXtyZXR1cm4gdGhpcy5fQ29tcHV0ZURpZmYoMCx0aGlzLl9vcmlnaW5hbEVsZW1lbnRzT3JIYXNoLmxlbmd0aC0xLDAsdGhpcy5fbW9kaWZpZWRFbGVtZW50c09ySGFzaC5sZW5ndGgtMSx0KX1fQ29tcHV0ZURpZmYodCxuLGkscixzKXtjb25zdCBhPVshMV07bGV0IGw9dGhpcy5Db21wdXRlRGlmZlJlY3Vyc2l2ZSh0LG4saSxyLGEpO3JldHVybiBzJiYobD10aGlzLlByZXR0aWZ5Q2hhbmdlcyhsKSkse3F1aXRFYXJseTphWzBdLGNoYW5nZXM6bH19Q29tcHV0ZURpZmZSZWN1cnNpdmUodCxuLGkscixzKXtmb3Ioc1swXT0hMTt0PD1uJiZpPD1yJiZ0aGlzLkVsZW1lbnRzQXJlRXF1YWwodCxpKTspdCsrLGkrKztmb3IoO24+PXQmJnI+PWkmJnRoaXMuRWxlbWVudHNBcmVFcXVhbChuLHIpOyluLS0sci0tO2lmKHQ+bnx8aT5yKXtsZXQgZDtyZXR1cm4gaTw9cj8ob3QuQXNzZXJ0KHQ9PT1uKzEsIm9yaWdpbmFsU3RhcnQgc2hvdWxkIG9ubHkgYmUgb25lIG1vcmUgdGhhbiBvcmlnaW5hbEVuZCIpLGQ9W25ldyAkZSh0LDAsaSxyLWkrMSldKTp0PD1uPyhvdC5Bc3NlcnQoaT09PXIrMSwibW9kaWZpZWRTdGFydCBzaG91bGQgb25seSBiZSBvbmUgbW9yZSB0aGFuIG1vZGlmaWVkRW5kIiksZD1bbmV3ICRlKHQsbi10KzEsaSwwKV0pOihvdC5Bc3NlcnQodD09PW4rMSwib3JpZ2luYWxTdGFydCBzaG91bGQgb25seSBiZSBvbmUgbW9yZSB0aGFuIG9yaWdpbmFsRW5kIiksb3QuQXNzZXJ0KGk9PT1yKzEsIm1vZGlmaWVkU3RhcnQgc2hvdWxkIG9ubHkgYmUgb25lIG1vcmUgdGhhbiBtb2RpZmllZEVuZCIpLGQ9W10pLGR9Y29uc3QgYT1bMF0sbD1bMF0sbz10aGlzLkNvbXB1dGVSZWN1cnNpb25Qb2ludCh0LG4saSxyLGEsbCxzKSx1PWFbMF0sYz1sWzBdO2lmKG8hPT1udWxsKXJldHVybiBvO2lmKCFzWzBdKXtjb25zdCBkPXRoaXMuQ29tcHV0ZURpZmZSZWN1cnNpdmUodCx1LGksYyxzKTtsZXQgbT1bXTtyZXR1cm4gc1swXT9tPVtuZXcgJGUodSsxLG4tKHUrMSkrMSxjKzEsci0oYysxKSsxKV06bT10aGlzLkNvbXB1dGVEaWZmUmVjdXJzaXZlKHUrMSxuLGMrMSxyLHMpLHRoaXMuQ29uY2F0ZW5hdGVDaGFuZ2VzKGQsbSl9cmV0dXJuW25ldyAkZSh0LG4tdCsxLGksci1pKzEpXX1XQUxLVFJBQ0UodCxuLGkscixzLGEsbCxvLHUsYyxkLG0sZixfLGcsayx5LHYpe2xldCBFPW51bGwsTT1udWxsLEQ9bmV3IG1yLE49bixiPWkscD1mWzBdLWtbMF0tcix4PS0xMDczNzQxODI0LFU9dGhpcy5tX2ZvcndhcmRIaXN0b3J5Lmxlbmd0aC0xO2Rve2NvbnN0IEw9cCt0O0w9PT1OfHxMPGImJnVbTC0xXTx1W0wrMV0/KGQ9dVtMKzFdLF89ZC1wLXIsZDx4JiZELk1hcmtOZXh0Q2hhbmdlKCkseD1kLEQuQWRkTW9kaWZpZWRFbGVtZW50KGQrMSxfKSxwPUwrMS10KTooZD11W0wtMV0rMSxfPWQtcC1yLGQ8eCYmRC5NYXJrTmV4dENoYW5nZSgpLHg9ZC0xLEQuQWRkT3JpZ2luYWxFbGVtZW50KGQsXysxKSxwPUwtMS10KSxVPj0wJiYodT10aGlzLm1fZm9yd2FyZEhpc3RvcnlbVV0sdD11WzBdLE49MSxiPXUubGVuZ3RoLTEpfXdoaWxlKC0tVT49LTEpO2lmKEU9RC5nZXRSZXZlcnNlQ2hhbmdlcygpLHZbMF0pe2xldCBMPWZbMF0rMSxUPWtbMF0rMTtpZihFIT09bnVsbCYmRS5sZW5ndGg+MCl7Y29uc3QgUz1FW0UubGVuZ3RoLTFdO0w9TWF0aC5tYXgoTCxTLmdldE9yaWdpbmFsRW5kKCkpLFQ9TWF0aC5tYXgoVCxTLmdldE1vZGlmaWVkRW5kKCkpfU09W25ldyAkZShMLG0tTCsxLFQsZy1UKzEpXX1lbHNle0Q9bmV3IG1yLE49YSxiPWwscD1mWzBdLWtbMF0tbyx4PTEwNzM3NDE4MjQsVT15P3RoaXMubV9yZXZlcnNlSGlzdG9yeS5sZW5ndGgtMTp0aGlzLm1fcmV2ZXJzZUhpc3RvcnkubGVuZ3RoLTI7ZG97Y29uc3QgTD1wK3M7TD09PU58fEw8YiYmY1tMLTFdPj1jW0wrMV0/KGQ9Y1tMKzFdLTEsXz1kLXAtbyxkPngmJkQuTWFya05leHRDaGFuZ2UoKSx4PWQrMSxELkFkZE9yaWdpbmFsRWxlbWVudChkKzEsXysxKSxwPUwrMS1zKTooZD1jW0wtMV0sXz1kLXAtbyxkPngmJkQuTWFya05leHRDaGFuZ2UoKSx4PWQsRC5BZGRNb2RpZmllZEVsZW1lbnQoZCsxLF8rMSkscD1MLTEtcyksVT49MCYmKGM9dGhpcy5tX3JldmVyc2VIaXN0b3J5W1VdLHM9Y1swXSxOPTEsYj1jLmxlbmd0aC0xKX13aGlsZSgtLVU+PS0xKTtNPUQuZ2V0Q2hhbmdlcygpfXJldHVybiB0aGlzLkNvbmNhdGVuYXRlQ2hhbmdlcyhFLE0pfUNvbXB1dGVSZWN1cnNpb25Qb2ludCh0LG4saSxyLHMsYSxsKXtsZXQgbz0wLHU9MCxjPTAsZD0wLG09MCxmPTA7dC0tLGktLSxzWzBdPTAsYVswXT0wLHRoaXMubV9mb3J3YXJkSGlzdG9yeT1bXSx0aGlzLm1fcmV2ZXJzZUhpc3Rvcnk9W107Y29uc3QgXz1uLXQrKHItaSksZz1fKzEsaz1uZXcgSW50MzJBcnJheShnKSx5PW5ldyBJbnQzMkFycmF5KGcpLHY9ci1pLEU9bi10LE09dC1pLEQ9bi1yLGI9KEUtdiklMj09PTA7a1t2XT10LHlbRV09bixsWzBdPSExO2ZvcihsZXQgcD0xO3A8PV8vMisxO3ArKyl7bGV0IHg9MCxVPTA7Yz10aGlzLkNsaXBEaWFnb25hbEJvdW5kKHYtcCxwLHYsZyksZD10aGlzLkNsaXBEaWFnb25hbEJvdW5kKHYrcCxwLHYsZyk7Zm9yKGxldCBUPWM7VDw9ZDtUKz0yKXtUPT09Y3x8VDxkJiZrW1QtMV08a1tUKzFdP289a1tUKzFdOm89a1tULTFdKzEsdT1vLShULXYpLU07Y29uc3QgUz1vO2Zvcig7bzxuJiZ1PHImJnRoaXMuRWxlbWVudHNBcmVFcXVhbChvKzEsdSsxKTspbysrLHUrKztpZihrW1RdPW8sbyt1PngrVSYmKHg9byxVPXUpLCFiJiZNYXRoLmFicyhULUUpPD1wLTEmJm8+PXlbVF0pcmV0dXJuIHNbMF09byxhWzBdPXUsUzw9eVtUXSYmcDw9MTQ0OD90aGlzLldBTEtUUkFDRSh2LGMsZCxNLEUsbSxmLEQsayx5LG8sbixzLHUscixhLGIsbCk6bnVsbH1jb25zdCBMPSh4LXQrKFUtaSktcCkvMjtpZih0aGlzLkNvbnRpbnVlUHJvY2Vzc2luZ1ByZWRpY2F0ZSE9PW51bGwmJiF0aGlzLkNvbnRpbnVlUHJvY2Vzc2luZ1ByZWRpY2F0ZSh4LEwpKXJldHVybiBsWzBdPSEwLHNbMF09eCxhWzBdPVUsTD4wJiZwPD0xNDQ4P3RoaXMuV0FMS1RSQUNFKHYsYyxkLE0sRSxtLGYsRCxrLHksbyxuLHMsdSxyLGEsYixsKToodCsrLGkrKyxbbmV3ICRlKHQsbi10KzEsaSxyLWkrMSldKTttPXRoaXMuQ2xpcERpYWdvbmFsQm91bmQoRS1wLHAsRSxnKSxmPXRoaXMuQ2xpcERpYWdvbmFsQm91bmQoRStwLHAsRSxnKTtmb3IobGV0IFQ9bTtUPD1mO1QrPTIpe1Q9PT1tfHxUPGYmJnlbVC0xXT49eVtUKzFdP289eVtUKzFdLTE6bz15W1QtMV0sdT1vLShULUUpLUQ7Y29uc3QgUz1vO2Zvcig7bz50JiZ1PmkmJnRoaXMuRWxlbWVudHNBcmVFcXVhbChvLHUpOylvLS0sdS0tO2lmKHlbVF09byxiJiZNYXRoLmFicyhULXYpPD1wJiZvPD1rW1RdKXJldHVybiBzWzBdPW8sYVswXT11LFM+PWtbVF0mJnA8PTE0NDg/dGhpcy5XQUxLVFJBQ0UodixjLGQsTSxFLG0sZixELGsseSxvLG4scyx1LHIsYSxiLGwpOm51bGx9aWYocDw9MTQ0Nyl7bGV0IFQ9bmV3IEludDMyQXJyYXkoZC1jKzIpO1RbMF09di1jKzEsbHQuQ29weTIoayxjLFQsMSxkLWMrMSksdGhpcy5tX2ZvcndhcmRIaXN0b3J5LnB1c2goVCksVD1uZXcgSW50MzJBcnJheShmLW0rMiksVFswXT1FLW0rMSxsdC5Db3B5Mih5LG0sVCwxLGYtbSsxKSx0aGlzLm1fcmV2ZXJzZUhpc3RvcnkucHVzaChUKX19cmV0dXJuIHRoaXMuV0FMS1RSQUNFKHYsYyxkLE0sRSxtLGYsRCxrLHksbyxuLHMsdSxyLGEsYixsKX1QcmV0dGlmeUNoYW5nZXModCl7Zm9yKGxldCBuPTA7bjx0Lmxlbmd0aDtuKyspe2NvbnN0IGk9dFtuXSxyPW48dC5sZW5ndGgtMT90W24rMV0ub3JpZ2luYWxTdGFydDp0aGlzLl9vcmlnaW5hbEVsZW1lbnRzT3JIYXNoLmxlbmd0aCxzPW48dC5sZW5ndGgtMT90W24rMV0ubW9kaWZpZWRTdGFydDp0aGlzLl9tb2RpZmllZEVsZW1lbnRzT3JIYXNoLmxlbmd0aCxhPWkub3JpZ2luYWxMZW5ndGg+MCxsPWkubW9kaWZpZWRMZW5ndGg+MDtmb3IoO2kub3JpZ2luYWxTdGFydCtpLm9yaWdpbmFsTGVuZ3RoPHImJmkubW9kaWZpZWRTdGFydCtpLm1vZGlmaWVkTGVuZ3RoPHMmJighYXx8dGhpcy5PcmlnaW5hbEVsZW1lbnRzQXJlRXF1YWwoaS5vcmlnaW5hbFN0YXJ0LGkub3JpZ2luYWxTdGFydCtpLm9yaWdpbmFsTGVuZ3RoKSkmJighbHx8dGhpcy5Nb2RpZmllZEVsZW1lbnRzQXJlRXF1YWwoaS5tb2RpZmllZFN0YXJ0LGkubW9kaWZpZWRTdGFydCtpLm1vZGlmaWVkTGVuZ3RoKSk7KXtjb25zdCB1PXRoaXMuRWxlbWVudHNBcmVTdHJpY3RFcXVhbChpLm9yaWdpbmFsU3RhcnQsaS5tb2RpZmllZFN0YXJ0KTtpZih0aGlzLkVsZW1lbnRzQXJlU3RyaWN0RXF1YWwoaS5vcmlnaW5hbFN0YXJ0K2kub3JpZ2luYWxMZW5ndGgsaS5tb2RpZmllZFN0YXJ0K2kubW9kaWZpZWRMZW5ndGgpJiYhdSlicmVhaztpLm9yaWdpbmFsU3RhcnQrKyxpLm1vZGlmaWVkU3RhcnQrK31jb25zdCBvPVtudWxsXTtpZihuPHQubGVuZ3RoLTEmJnRoaXMuQ2hhbmdlc092ZXJsYXAodFtuXSx0W24rMV0sbykpe3Rbbl09b1swXSx0LnNwbGljZShuKzEsMSksbi0tO2NvbnRpbnVlfX1mb3IobGV0IG49dC5sZW5ndGgtMTtuPj0wO24tLSl7Y29uc3QgaT10W25dO2xldCByPTAscz0wO2lmKG4+MCl7Y29uc3QgZD10W24tMV07cj1kLm9yaWdpbmFsU3RhcnQrZC5vcmlnaW5hbExlbmd0aCxzPWQubW9kaWZpZWRTdGFydCtkLm1vZGlmaWVkTGVuZ3RofWNvbnN0IGE9aS5vcmlnaW5hbExlbmd0aD4wLGw9aS5tb2RpZmllZExlbmd0aD4wO2xldCBvPTAsdT10aGlzLl9ib3VuZGFyeVNjb3JlKGkub3JpZ2luYWxTdGFydCxpLm9yaWdpbmFsTGVuZ3RoLGkubW9kaWZpZWRTdGFydCxpLm1vZGlmaWVkTGVuZ3RoKTtmb3IobGV0IGQ9MTs7ZCsrKXtjb25zdCBtPWkub3JpZ2luYWxTdGFydC1kLGY9aS5tb2RpZmllZFN0YXJ0LWQ7aWYobTxyfHxmPHN8fGEmJiF0aGlzLk9yaWdpbmFsRWxlbWVudHNBcmVFcXVhbChtLG0raS5vcmlnaW5hbExlbmd0aCl8fGwmJiF0aGlzLk1vZGlmaWVkRWxlbWVudHNBcmVFcXVhbChmLGYraS5tb2RpZmllZExlbmd0aCkpYnJlYWs7Y29uc3QgZz0obT09PXImJmY9PT1zPzU6MCkrdGhpcy5fYm91bmRhcnlTY29yZShtLGkub3JpZ2luYWxMZW5ndGgsZixpLm1vZGlmaWVkTGVuZ3RoKTtnPnUmJih1PWcsbz1kKX1pLm9yaWdpbmFsU3RhcnQtPW8saS5tb2RpZmllZFN0YXJ0LT1vO2NvbnN0IGM9W251bGxdO2lmKG4+MCYmdGhpcy5DaGFuZ2VzT3ZlcmxhcCh0W24tMV0sdFtuXSxjKSl7dFtuLTFdPWNbMF0sdC5zcGxpY2UobiwxKSxuKys7Y29udGludWV9fWlmKHRoaXMuX2hhc1N0cmluZ3MpZm9yKGxldCBuPTEsaT10Lmxlbmd0aDtuPGk7bisrKXtjb25zdCByPXRbbi0xXSxzPXRbbl0sYT1zLm9yaWdpbmFsU3RhcnQtci5vcmlnaW5hbFN0YXJ0LXIub3JpZ2luYWxMZW5ndGgsbD1yLm9yaWdpbmFsU3RhcnQsbz1zLm9yaWdpbmFsU3RhcnQrcy5vcmlnaW5hbExlbmd0aCx1PW8tbCxjPXIubW9kaWZpZWRTdGFydCxkPXMubW9kaWZpZWRTdGFydCtzLm1vZGlmaWVkTGVuZ3RoLG09ZC1jO2lmKGE8NSYmdTwyMCYmbTwyMCl7Y29uc3QgZj10aGlzLl9maW5kQmV0dGVyQ29udGlndW91c1NlcXVlbmNlKGwsdSxjLG0sYSk7aWYoZil7Y29uc3RbXyxnXT1mOyhfIT09ci5vcmlnaW5hbFN0YXJ0K3Iub3JpZ2luYWxMZW5ndGh8fGchPT1yLm1vZGlmaWVkU3RhcnQrci5tb2RpZmllZExlbmd0aCkmJihyLm9yaWdpbmFsTGVuZ3RoPV8tci5vcmlnaW5hbFN0YXJ0LHIubW9kaWZpZWRMZW5ndGg9Zy1yLm1vZGlmaWVkU3RhcnQscy5vcmlnaW5hbFN0YXJ0PV8rYSxzLm1vZGlmaWVkU3RhcnQ9ZythLHMub3JpZ2luYWxMZW5ndGg9by1zLm9yaWdpbmFsU3RhcnQscy5tb2RpZmllZExlbmd0aD1kLXMubW9kaWZpZWRTdGFydCl9fX1yZXR1cm4gdH1fZmluZEJldHRlckNvbnRpZ3VvdXNTZXF1ZW5jZSh0LG4saSxyLHMpe2lmKG48c3x8cjxzKXJldHVybiBudWxsO2NvbnN0IGE9dCtuLXMrMSxsPWkrci1zKzE7bGV0IG89MCx1PTAsYz0wO2ZvcihsZXQgZD10O2Q8YTtkKyspZm9yKGxldCBtPWk7bTxsO20rKyl7Y29uc3QgZj10aGlzLl9jb250aWd1b3VzU2VxdWVuY2VTY29yZShkLG0scyk7Zj4wJiZmPm8mJihvPWYsdT1kLGM9bSl9cmV0dXJuIG8+MD9bdSxjXTpudWxsfV9jb250aWd1b3VzU2VxdWVuY2VTY29yZSh0LG4saSl7bGV0IHI9MDtmb3IobGV0IHM9MDtzPGk7cysrKXtpZighdGhpcy5FbGVtZW50c0FyZUVxdWFsKHQrcyxuK3MpKXJldHVybiAwO3IrPXRoaXMuX29yaWdpbmFsU3RyaW5nRWxlbWVudHNbdCtzXS5sZW5ndGh9cmV0dXJuIHJ9X09yaWdpbmFsSXNCb3VuZGFyeSh0KXtyZXR1cm4gdDw9MHx8dD49dGhpcy5fb3JpZ2luYWxFbGVtZW50c09ySGFzaC5sZW5ndGgtMT8hMDp0aGlzLl9oYXNTdHJpbmdzJiYvXlxzKiQvLnRlc3QodGhpcy5fb3JpZ2luYWxTdHJpbmdFbGVtZW50c1t0XSl9X09yaWdpbmFsUmVnaW9uSXNCb3VuZGFyeSh0LG4pe2lmKHRoaXMuX09yaWdpbmFsSXNCb3VuZGFyeSh0KXx8dGhpcy5fT3JpZ2luYWxJc0JvdW5kYXJ5KHQtMSkpcmV0dXJuITA7aWYobj4wKXtjb25zdCBpPXQrbjtpZih0aGlzLl9PcmlnaW5hbElzQm91bmRhcnkoaS0xKXx8dGhpcy5fT3JpZ2luYWxJc0JvdW5kYXJ5KGkpKXJldHVybiEwfXJldHVybiExfV9Nb2RpZmllZElzQm91bmRhcnkodCl7cmV0dXJuIHQ8PTB8fHQ+PXRoaXMuX21vZGlmaWVkRWxlbWVudHNPckhhc2gubGVuZ3RoLTE/ITA6dGhpcy5faGFzU3RyaW5ncyYmL15ccyokLy50ZXN0KHRoaXMuX21vZGlmaWVkU3RyaW5nRWxlbWVudHNbdF0pfV9Nb2RpZmllZFJlZ2lvbklzQm91bmRhcnkodCxuKXtpZih0aGlzLl9Nb2RpZmllZElzQm91bmRhcnkodCl8fHRoaXMuX01vZGlmaWVkSXNCb3VuZGFyeSh0LTEpKXJldHVybiEwO2lmKG4+MCl7Y29uc3QgaT10K247aWYodGhpcy5fTW9kaWZpZWRJc0JvdW5kYXJ5KGktMSl8fHRoaXMuX01vZGlmaWVkSXNCb3VuZGFyeShpKSlyZXR1cm4hMH1yZXR1cm4hMX1fYm91bmRhcnlTY29yZSh0LG4saSxyKXtjb25zdCBzPXRoaXMuX09yaWdpbmFsUmVnaW9uSXNCb3VuZGFyeSh0LG4pPzE6MCxhPXRoaXMuX01vZGlmaWVkUmVnaW9uSXNCb3VuZGFyeShpLHIpPzE6MDtyZXR1cm4gcythfUNvbmNhdGVuYXRlQ2hhbmdlcyh0LG4pe2NvbnN0IGk9W107aWYodC5sZW5ndGg9PT0wfHxuLmxlbmd0aD09PTApcmV0dXJuIG4ubGVuZ3RoPjA/bjp0O2lmKHRoaXMuQ2hhbmdlc092ZXJsYXAodFt0Lmxlbmd0aC0xXSxuWzBdLGkpKXtjb25zdCByPW5ldyBBcnJheSh0Lmxlbmd0aCtuLmxlbmd0aC0xKTtyZXR1cm4gbHQuQ29weSh0LDAsciwwLHQubGVuZ3RoLTEpLHJbdC5sZW5ndGgtMV09aVswXSxsdC5Db3B5KG4sMSxyLHQubGVuZ3RoLG4ubGVuZ3RoLTEpLHJ9ZWxzZXtjb25zdCByPW5ldyBBcnJheSh0Lmxlbmd0aCtuLmxlbmd0aCk7cmV0dXJuIGx0LkNvcHkodCwwLHIsMCx0Lmxlbmd0aCksbHQuQ29weShuLDAscix0Lmxlbmd0aCxuLmxlbmd0aCkscn19Q2hhbmdlc092ZXJsYXAodCxuLGkpe2lmKG90LkFzc2VydCh0Lm9yaWdpbmFsU3RhcnQ8PW4ub3JpZ2luYWxTdGFydCwiTGVmdCBjaGFuZ2UgaXMgbm90IGxlc3MgdGhhbiBvciBlcXVhbCB0byByaWdodCBjaGFuZ2UiKSxvdC5Bc3NlcnQodC5tb2RpZmllZFN0YXJ0PD1uLm1vZGlmaWVkU3RhcnQsIkxlZnQgY2hhbmdlIGlzIG5vdCBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gcmlnaHQgY2hhbmdlIiksdC5vcmlnaW5hbFN0YXJ0K3Qub3JpZ2luYWxMZW5ndGg+PW4ub3JpZ2luYWxTdGFydHx8dC5tb2RpZmllZFN0YXJ0K3QubW9kaWZpZWRMZW5ndGg+PW4ubW9kaWZpZWRTdGFydCl7Y29uc3Qgcj10Lm9yaWdpbmFsU3RhcnQ7bGV0IHM9dC5vcmlnaW5hbExlbmd0aDtjb25zdCBhPXQubW9kaWZpZWRTdGFydDtsZXQgbD10Lm1vZGlmaWVkTGVuZ3RoO3JldHVybiB0Lm9yaWdpbmFsU3RhcnQrdC5vcmlnaW5hbExlbmd0aD49bi5vcmlnaW5hbFN0YXJ0JiYocz1uLm9yaWdpbmFsU3RhcnQrbi5vcmlnaW5hbExlbmd0aC10Lm9yaWdpbmFsU3RhcnQpLHQubW9kaWZpZWRTdGFydCt0Lm1vZGlmaWVkTGVuZ3RoPj1uLm1vZGlmaWVkU3RhcnQmJihsPW4ubW9kaWZpZWRTdGFydCtuLm1vZGlmaWVkTGVuZ3RoLXQubW9kaWZpZWRTdGFydCksaVswXT1uZXcgJGUocixzLGEsbCksITB9ZWxzZSByZXR1cm4gaVswXT1udWxsLCExfUNsaXBEaWFnb25hbEJvdW5kKHQsbixpLHIpe2lmKHQ+PTAmJnQ8cilyZXR1cm4gdDtjb25zdCBzPWksYT1yLWktMSxsPW4lMj09PTA7aWYodDwwKXtjb25zdCBvPXMlMj09PTA7cmV0dXJuIGw9PT1vPzA6MX1lbHNle2NvbnN0IG89YSUyPT09MDtyZXR1cm4gbD09PW8/ci0xOnItMn19fWxldCB0ZT1jbGFzcyB0dHtjb25zdHJ1Y3Rvcih0LG4pe3RoaXMubGluZU51bWJlcj10LHRoaXMuY29sdW1uPW59d2l0aCh0PXRoaXMubGluZU51bWJlcixuPXRoaXMuY29sdW1uKXtyZXR1cm4gdD09PXRoaXMubGluZU51bWJlciYmbj09PXRoaXMuY29sdW1uP3RoaXM6bmV3IHR0KHQsbil9ZGVsdGEodD0wLG49MCl7cmV0dXJuIHRoaXMud2l0aCh0aGlzLmxpbmVOdW1iZXIrdCx0aGlzLmNvbHVtbituKX1lcXVhbHModCl7cmV0dXJuIHR0LmVxdWFscyh0aGlzLHQpfXN0YXRpYyBlcXVhbHModCxuKXtyZXR1cm4hdCYmIW4/ITA6ISF0JiYhIW4mJnQubGluZU51bWJlcj09PW4ubGluZU51bWJlciYmdC5jb2x1bW49PT1uLmNvbHVtbn1pc0JlZm9yZSh0KXtyZXR1cm4gdHQuaXNCZWZvcmUodGhpcyx0KX1zdGF0aWMgaXNCZWZvcmUodCxuKXtyZXR1cm4gdC5saW5lTnVtYmVyPG4ubGluZU51bWJlcj8hMDpuLmxpbmVOdW1iZXI8dC5saW5lTnVtYmVyPyExOnQuY29sdW1uPG4uY29sdW1ufWlzQmVmb3JlT3JFcXVhbCh0KXtyZXR1cm4gdHQuaXNCZWZvcmVPckVxdWFsKHRoaXMsdCl9c3RhdGljIGlzQmVmb3JlT3JFcXVhbCh0LG4pe3JldHVybiB0LmxpbmVOdW1iZXI8bi5saW5lTnVtYmVyPyEwOm4ubGluZU51bWJlcjx0LmxpbmVOdW1iZXI/ITE6dC5jb2x1bW48PW4uY29sdW1ufXN0YXRpYyBjb21wYXJlKHQsbil7Y29uc3QgaT10LmxpbmVOdW1iZXJ8MCxyPW4ubGluZU51bWJlcnwwO2lmKGk9PT1yKXtjb25zdCBzPXQuY29sdW1ufDAsYT1uLmNvbHVtbnwwO3JldHVybiBzLWF9cmV0dXJuIGktcn1jbG9uZSgpe3JldHVybiBuZXcgdHQodGhpcy5saW5lTnVtYmVyLHRoaXMuY29sdW1uKX10b1N0cmluZygpe3JldHVybiIoIit0aGlzLmxpbmVOdW1iZXIrIiwiK3RoaXMuY29sdW1uKyIpIn1zdGF0aWMgbGlmdCh0KXtyZXR1cm4gbmV3IHR0KHQubGluZU51bWJlcix0LmNvbHVtbil9c3RhdGljIGlzSVBvc2l0aW9uKHQpe3JldHVybiB0JiZ0eXBlb2YgdC5saW5lTnVtYmVyPT0ibnVtYmVyIiYmdHlwZW9mIHQuY29sdW1uPT0ibnVtYmVyIn10b0pTT04oKXtyZXR1cm57bGluZU51bWJlcjp0aGlzLmxpbmVOdW1iZXIsY29sdW1uOnRoaXMuY29sdW1ufX19LEc9Y2xhc3MgbmV7Y29uc3RydWN0b3IodCxuLGkscil7dD5pfHx0PT09aSYmbj5yPyh0aGlzLnN0YXJ0TGluZU51bWJlcj1pLHRoaXMuc3RhcnRDb2x1bW49cix0aGlzLmVuZExpbmVOdW1iZXI9dCx0aGlzLmVuZENvbHVtbj1uKToodGhpcy5zdGFydExpbmVOdW1iZXI9dCx0aGlzLnN0YXJ0Q29sdW1uPW4sdGhpcy5lbmRMaW5lTnVtYmVyPWksdGhpcy5lbmRDb2x1bW49cil9aXNFbXB0eSgpe3JldHVybiBuZS5pc0VtcHR5KHRoaXMpfXN0YXRpYyBpc0VtcHR5KHQpe3JldHVybiB0LnN0YXJ0TGluZU51bWJlcj09PXQuZW5kTGluZU51bWJlciYmdC5zdGFydENvbHVtbj09PXQuZW5kQ29sdW1ufWNvbnRhaW5zUG9zaXRpb24odCl7cmV0dXJuIG5lLmNvbnRhaW5zUG9zaXRpb24odGhpcyx0KX1zdGF0aWMgY29udGFpbnNQb3NpdGlvbih0LG4pe3JldHVybiEobi5saW5lTnVtYmVyPHQuc3RhcnRMaW5lTnVtYmVyfHxuLmxpbmVOdW1iZXI+dC5lbmRMaW5lTnVtYmVyfHxuLmxpbmVOdW1iZXI9PT10LnN0YXJ0TGluZU51bWJlciYmbi5jb2x1bW48dC5zdGFydENvbHVtbnx8bi5saW5lTnVtYmVyPT09dC5lbmRMaW5lTnVtYmVyJiZuLmNvbHVtbj50LmVuZENvbHVtbil9c3RhdGljIHN0cmljdENvbnRhaW5zUG9zaXRpb24odCxuKXtyZXR1cm4hKG4ubGluZU51bWJlcjx0LnN0YXJ0TGluZU51bWJlcnx8bi5saW5lTnVtYmVyPnQuZW5kTGluZU51bWJlcnx8bi5saW5lTnVtYmVyPT09dC5zdGFydExpbmVOdW1iZXImJm4uY29sdW1uPD10LnN0YXJ0Q29sdW1ufHxuLmxpbmVOdW1iZXI9PT10LmVuZExpbmVOdW1iZXImJm4uY29sdW1uPj10LmVuZENvbHVtbil9Y29udGFpbnNSYW5nZSh0KXtyZXR1cm4gbmUuY29udGFpbnNSYW5nZSh0aGlzLHQpfXN0YXRpYyBjb250YWluc1JhbmdlKHQsbil7cmV0dXJuIShuLnN0YXJ0TGluZU51bWJlcjx0LnN0YXJ0TGluZU51bWJlcnx8bi5lbmRMaW5lTnVtYmVyPHQuc3RhcnRMaW5lTnVtYmVyfHxuLnN0YXJ0TGluZU51bWJlcj50LmVuZExpbmVOdW1iZXJ8fG4uZW5kTGluZU51bWJlcj50LmVuZExpbmVOdW1iZXJ8fG4uc3RhcnRMaW5lTnVtYmVyPT09dC5zdGFydExpbmVOdW1iZXImJm4uc3RhcnRDb2x1bW48dC5zdGFydENvbHVtbnx8bi5lbmRMaW5lTnVtYmVyPT09dC5lbmRMaW5lTnVtYmVyJiZuLmVuZENvbHVtbj50LmVuZENvbHVtbil9c3RyaWN0Q29udGFpbnNSYW5nZSh0KXtyZXR1cm4gbmUuc3RyaWN0Q29udGFpbnNSYW5nZSh0aGlzLHQpfXN0YXRpYyBzdHJpY3RDb250YWluc1JhbmdlKHQsbil7cmV0dXJuIShuLnN0YXJ0TGluZU51bWJlcjx0LnN0YXJ0TGluZU51bWJlcnx8bi5lbmRMaW5lTnVtYmVyPHQuc3RhcnRMaW5lTnVtYmVyfHxuLnN0YXJ0TGluZU51bWJlcj50LmVuZExpbmVOdW1iZXJ8fG4uZW5kTGluZU51bWJlcj50LmVuZExpbmVOdW1iZXJ8fG4uc3RhcnRMaW5lTnVtYmVyPT09dC5zdGFydExpbmVOdW1iZXImJm4uc3RhcnRDb2x1bW48PXQuc3RhcnRDb2x1bW58fG4uZW5kTGluZU51bWJlcj09PXQuZW5kTGluZU51bWJlciYmbi5lbmRDb2x1bW4+PXQuZW5kQ29sdW1uKX1wbHVzUmFuZ2UodCl7cmV0dXJuIG5lLnBsdXNSYW5nZSh0aGlzLHQpfXN0YXRpYyBwbHVzUmFuZ2UodCxuKXtsZXQgaSxyLHMsYTtyZXR1cm4gbi5zdGFydExpbmVOdW1iZXI8dC5zdGFydExpbmVOdW1iZXI/KGk9bi5zdGFydExpbmVOdW1iZXIscj1uLnN0YXJ0Q29sdW1uKTpuLnN0YXJ0TGluZU51bWJlcj09PXQuc3RhcnRMaW5lTnVtYmVyPyhpPW4uc3RhcnRMaW5lTnVtYmVyLHI9TWF0aC5taW4obi5zdGFydENvbHVtbix0LnN0YXJ0Q29sdW1uKSk6KGk9dC5zdGFydExpbmVOdW1iZXIscj10LnN0YXJ0Q29sdW1uKSxuLmVuZExpbmVOdW1iZXI+dC5lbmRMaW5lTnVtYmVyPyhzPW4uZW5kTGluZU51bWJlcixhPW4uZW5kQ29sdW1uKTpuLmVuZExpbmVOdW1iZXI9PT10LmVuZExpbmVOdW1iZXI/KHM9bi5lbmRMaW5lTnVtYmVyLGE9TWF0aC5tYXgobi5lbmRDb2x1bW4sdC5lbmRDb2x1bW4pKToocz10LmVuZExpbmVOdW1iZXIsYT10LmVuZENvbHVtbiksbmV3IG5lKGkscixzLGEpfWludGVyc2VjdFJhbmdlcyh0KXtyZXR1cm4gbmUuaW50ZXJzZWN0UmFuZ2VzKHRoaXMsdCl9c3RhdGljIGludGVyc2VjdFJhbmdlcyh0LG4pe2xldCBpPXQuc3RhcnRMaW5lTnVtYmVyLHI9dC5zdGFydENvbHVtbixzPXQuZW5kTGluZU51bWJlcixhPXQuZW5kQ29sdW1uO2NvbnN0IGw9bi5zdGFydExpbmVOdW1iZXIsbz1uLnN0YXJ0Q29sdW1uLHU9bi5lbmRMaW5lTnVtYmVyLGM9bi5lbmRDb2x1bW47cmV0dXJuIGk8bD8oaT1sLHI9byk6aT09PWwmJihyPU1hdGgubWF4KHIsbykpLHM+dT8ocz11LGE9Yyk6cz09PXUmJihhPU1hdGgubWluKGEsYykpLGk+c3x8aT09PXMmJnI+YT9udWxsOm5ldyBuZShpLHIscyxhKX1lcXVhbHNSYW5nZSh0KXtyZXR1cm4gbmUuZXF1YWxzUmFuZ2UodGhpcyx0KX1zdGF0aWMgZXF1YWxzUmFuZ2UodCxuKXtyZXR1cm4hdCYmIW4/ITA6ISF0JiYhIW4mJnQuc3RhcnRMaW5lTnVtYmVyPT09bi5zdGFydExpbmVOdW1iZXImJnQuc3RhcnRDb2x1bW49PT1uLnN0YXJ0Q29sdW1uJiZ0LmVuZExpbmVOdW1iZXI9PT1uLmVuZExpbmVOdW1iZXImJnQuZW5kQ29sdW1uPT09bi5lbmRDb2x1bW59Z2V0RW5kUG9zaXRpb24oKXtyZXR1cm4gbmUuZ2V0RW5kUG9zaXRpb24odGhpcyl9c3RhdGljIGdldEVuZFBvc2l0aW9uKHQpe3JldHVybiBuZXcgdGUodC5lbmRMaW5lTnVtYmVyLHQuZW5kQ29sdW1uKX1nZXRTdGFydFBvc2l0aW9uKCl7cmV0dXJuIG5lLmdldFN0YXJ0UG9zaXRpb24odGhpcyl9c3RhdGljIGdldFN0YXJ0UG9zaXRpb24odCl7cmV0dXJuIG5ldyB0ZSh0LnN0YXJ0TGluZU51bWJlcix0LnN0YXJ0Q29sdW1uKX10b1N0cmluZygpe3JldHVybiJbIit0aGlzLnN0YXJ0TGluZU51bWJlcisiLCIrdGhpcy5zdGFydENvbHVtbisiIC0+ICIrdGhpcy5lbmRMaW5lTnVtYmVyKyIsIit0aGlzLmVuZENvbHVtbisiXSJ9c2V0RW5kUG9zaXRpb24odCxuKXtyZXR1cm4gbmV3IG5lKHRoaXMuc3RhcnRMaW5lTnVtYmVyLHRoaXMuc3RhcnRDb2x1bW4sdCxuKX1zZXRTdGFydFBvc2l0aW9uKHQsbil7cmV0dXJuIG5ldyBuZSh0LG4sdGhpcy5lbmRMaW5lTnVtYmVyLHRoaXMuZW5kQ29sdW1uKX1jb2xsYXBzZVRvU3RhcnQoKXtyZXR1cm4gbmUuY29sbGFwc2VUb1N0YXJ0KHRoaXMpfXN0YXRpYyBjb2xsYXBzZVRvU3RhcnQodCl7cmV0dXJuIG5ldyBuZSh0LnN0YXJ0TGluZU51bWJlcix0LnN0YXJ0Q29sdW1uLHQuc3RhcnRMaW5lTnVtYmVyLHQuc3RhcnRDb2x1bW4pfWNvbGxhcHNlVG9FbmQoKXtyZXR1cm4gbmUuY29sbGFwc2VUb0VuZCh0aGlzKX1zdGF0aWMgY29sbGFwc2VUb0VuZCh0KXtyZXR1cm4gbmV3IG5lKHQuZW5kTGluZU51bWJlcix0LmVuZENvbHVtbix0LmVuZExpbmVOdW1iZXIsdC5lbmRDb2x1bW4pfWRlbHRhKHQpe3JldHVybiBuZXcgbmUodGhpcy5zdGFydExpbmVOdW1iZXIrdCx0aGlzLnN0YXJ0Q29sdW1uLHRoaXMuZW5kTGluZU51bWJlcit0LHRoaXMuZW5kQ29sdW1uKX1zdGF0aWMgZnJvbVBvc2l0aW9ucyh0LG49dCl7cmV0dXJuIG5ldyBuZSh0LmxpbmVOdW1iZXIsdC5jb2x1bW4sbi5saW5lTnVtYmVyLG4uY29sdW1uKX1zdGF0aWMgbGlmdCh0KXtyZXR1cm4gdD9uZXcgbmUodC5zdGFydExpbmVOdW1iZXIsdC5zdGFydENvbHVtbix0LmVuZExpbmVOdW1iZXIsdC5lbmRDb2x1bW4pOm51bGx9c3RhdGljIGlzSVJhbmdlKHQpe3JldHVybiB0JiZ0eXBlb2YgdC5zdGFydExpbmVOdW1iZXI9PSJudW1iZXIiJiZ0eXBlb2YgdC5zdGFydENvbHVtbj09Im51bWJlciImJnR5cGVvZiB0LmVuZExpbmVOdW1iZXI9PSJudW1iZXIiJiZ0eXBlb2YgdC5lbmRDb2x1bW49PSJudW1iZXIifXN0YXRpYyBhcmVJbnRlcnNlY3RpbmdPclRvdWNoaW5nKHQsbil7cmV0dXJuISh0LmVuZExpbmVOdW1iZXI8bi5zdGFydExpbmVOdW1iZXJ8fHQuZW5kTGluZU51bWJlcj09PW4uc3RhcnRMaW5lTnVtYmVyJiZ0LmVuZENvbHVtbjxuLnN0YXJ0Q29sdW1ufHxuLmVuZExpbmVOdW1iZXI8dC5zdGFydExpbmVOdW1iZXJ8fG4uZW5kTGluZU51bWJlcj09PXQuc3RhcnRMaW5lTnVtYmVyJiZuLmVuZENvbHVtbjx0LnN0YXJ0Q29sdW1uKX1zdGF0aWMgYXJlSW50ZXJzZWN0aW5nKHQsbil7cmV0dXJuISh0LmVuZExpbmVOdW1iZXI8bi5zdGFydExpbmVOdW1iZXJ8fHQuZW5kTGluZU51bWJlcj09PW4uc3RhcnRMaW5lTnVtYmVyJiZ0LmVuZENvbHVtbjw9bi5zdGFydENvbHVtbnx8bi5lbmRMaW5lTnVtYmVyPHQuc3RhcnRMaW5lTnVtYmVyfHxuLmVuZExpbmVOdW1iZXI9PT10LnN0YXJ0TGluZU51bWJlciYmbi5lbmRDb2x1bW48PXQuc3RhcnRDb2x1bW4pfXN0YXRpYyBjb21wYXJlUmFuZ2VzVXNpbmdTdGFydHModCxuKXtpZih0JiZuKXtjb25zdCBzPXQuc3RhcnRMaW5lTnVtYmVyfDAsYT1uLnN0YXJ0TGluZU51bWJlcnwwO2lmKHM9PT1hKXtjb25zdCBsPXQuc3RhcnRDb2x1bW58MCxvPW4uc3RhcnRDb2x1bW58MDtpZihsPT09byl7Y29uc3QgdT10LmVuZExpbmVOdW1iZXJ8MCxjPW4uZW5kTGluZU51bWJlcnwwO2lmKHU9PT1jKXtjb25zdCBkPXQuZW5kQ29sdW1ufDAsbT1uLmVuZENvbHVtbnwwO3JldHVybiBkLW19cmV0dXJuIHUtY31yZXR1cm4gbC1vfXJldHVybiBzLWF9cmV0dXJuKHQ/MTowKS0obj8xOjApfXN0YXRpYyBjb21wYXJlUmFuZ2VzVXNpbmdFbmRzKHQsbil7cmV0dXJuIHQuZW5kTGluZU51bWJlcj09PW4uZW5kTGluZU51bWJlcj90LmVuZENvbHVtbj09PW4uZW5kQ29sdW1uP3Quc3RhcnRMaW5lTnVtYmVyPT09bi5zdGFydExpbmVOdW1iZXI/dC5zdGFydENvbHVtbi1uLnN0YXJ0Q29sdW1uOnQuc3RhcnRMaW5lTnVtYmVyLW4uc3RhcnRMaW5lTnVtYmVyOnQuZW5kQ29sdW1uLW4uZW5kQ29sdW1uOnQuZW5kTGluZU51bWJlci1uLmVuZExpbmVOdW1iZXJ9c3RhdGljIHNwYW5zTXVsdGlwbGVMaW5lcyh0KXtyZXR1cm4gdC5lbmRMaW5lTnVtYmVyPnQuc3RhcnRMaW5lTnVtYmVyfXRvSlNPTigpe3JldHVybiB0aGlzfX07ZnVuY3Rpb24gZnIoZSl7cmV0dXJuIGU8MD8wOmU+MjU1PzI1NTplfDB9ZnVuY3Rpb24gdXQoZSl7cmV0dXJuIGU8MD8wOmU+NDI5NDk2NzI5NT80Mjk0OTY3Mjk1OmV8MH1jbGFzcyBHbntjb25zdHJ1Y3Rvcih0KXtjb25zdCBuPWZyKHQpO3RoaXMuX2RlZmF1bHRWYWx1ZT1uLHRoaXMuX2FzY2lpTWFwPUduLl9jcmVhdGVBc2NpaU1hcChuKSx0aGlzLl9tYXA9bmV3IE1hcH1zdGF0aWMgX2NyZWF0ZUFzY2lpTWFwKHQpe2NvbnN0IG49bmV3IFVpbnQ4QXJyYXkoMjU2KTtyZXR1cm4gbi5maWxsKHQpLG59c2V0KHQsbil7Y29uc3QgaT1mcihuKTt0Pj0wJiZ0PDI1Nj90aGlzLl9hc2NpaU1hcFt0XT1pOnRoaXMuX21hcC5zZXQodCxpKX1nZXQodCl7cmV0dXJuIHQ+PTAmJnQ8MjU2P3RoaXMuX2FzY2lpTWFwW3RdOnRoaXMuX21hcC5nZXQodCl8fHRoaXMuX2RlZmF1bHRWYWx1ZX1jbGVhcigpe3RoaXMuX2FzY2lpTWFwLmZpbGwodGhpcy5fZGVmYXVsdFZhbHVlKSx0aGlzLl9tYXAuY2xlYXIoKX19Y2xhc3MgU2x7Y29uc3RydWN0b3IodCxuLGkpe2NvbnN0IHI9bmV3IFVpbnQ4QXJyYXkodCpuKTtmb3IobGV0IHM9MCxhPXQqbjtzPGE7cysrKXJbc109aTt0aGlzLl9kYXRhPXIsdGhpcy5yb3dzPXQsdGhpcy5jb2xzPW59Z2V0KHQsbil7cmV0dXJuIHRoaXMuX2RhdGFbdCp0aGlzLmNvbHMrbl19c2V0KHQsbixpKXt0aGlzLl9kYXRhW3QqdGhpcy5jb2xzK25dPWl9fWNsYXNzIExse2NvbnN0cnVjdG9yKHQpe2xldCBuPTAsaT0wO2ZvcihsZXQgcz0wLGE9dC5sZW5ndGg7czxhO3MrKyl7Y29uc3RbbCxvLHVdPXRbc107bz5uJiYobj1vKSxsPmkmJihpPWwpLHU+aSYmKGk9dSl9bisrLGkrKztjb25zdCByPW5ldyBTbChpLG4sMCk7Zm9yKGxldCBzPTAsYT10Lmxlbmd0aDtzPGE7cysrKXtjb25zdFtsLG8sdV09dFtzXTtyLnNldChsLG8sdSl9dGhpcy5fc3RhdGVzPXIsdGhpcy5fbWF4Q2hhckNvZGU9bn1uZXh0U3RhdGUodCxuKXtyZXR1cm4gbjwwfHxuPj10aGlzLl9tYXhDaGFyQ29kZT8wOnRoaXMuX3N0YXRlcy5nZXQodCxuKX19bGV0IFhuPW51bGw7ZnVuY3Rpb24gQ2woKXtyZXR1cm4gWG49PT1udWxsJiYoWG49bmV3IExsKFtbMSwxMDQsMl0sWzEsNzIsMl0sWzEsMTAyLDZdLFsxLDcwLDZdLFsyLDExNiwzXSxbMiw4NCwzXSxbMywxMTYsNF0sWzMsODQsNF0sWzQsMTEyLDVdLFs0LDgwLDVdLFs1LDExNSw5XSxbNSw4Myw5XSxbNSw1OCwxMF0sWzYsMTA1LDddLFs2LDczLDddLFs3LDEwOCw4XSxbNyw3Niw4XSxbOCwxMDEsOV0sWzgsNjksOV0sWzksNTgsMTBdLFsxMCw0NywxMV0sWzExLDQ3LDEyXV0pKSxYbn1sZXQgU3Q9bnVsbDtmdW5jdGlvbiBFbCgpe2lmKFN0PT09bnVsbCl7U3Q9bmV3IEduKDApO2NvbnN0IGU9YCAJPD4nIuOAgeOAgu+9oe+9pO+8jO+8ju+8mu+8m+KAmOOAiOOAjOOAjuOAlO+8iO+8u++9m++9ou+9o++9ne+8ve+8ieOAleOAj+OAjeOAieKAme+9gO+9nuKApmA7Zm9yKGxldCBuPTA7bjxlLmxlbmd0aDtuKyspU3Quc2V0KGUuY2hhckNvZGVBdChuKSwxKTtjb25zdCB0PSIuLDs6Ijtmb3IobGV0IG49MDtuPHQubGVuZ3RoO24rKylTdC5zZXQodC5jaGFyQ29kZUF0KG4pLDIpfXJldHVybiBTdH1jbGFzcyBYdHtzdGF0aWMgX2NyZWF0ZUxpbmsodCxuLGkscixzKXtsZXQgYT1zLTE7ZG97Y29uc3QgbD1uLmNoYXJDb2RlQXQoYSk7aWYodC5nZXQobCkhPT0yKWJyZWFrO2EtLX13aGlsZShhPnIpO2lmKHI+MCl7Y29uc3QgbD1uLmNoYXJDb2RlQXQoci0xKSxvPW4uY2hhckNvZGVBdChhKTsobD09PTQwJiZvPT09NDF8fGw9PT05MSYmbz09PTkzfHxsPT09MTIzJiZvPT09MTI1KSYmYS0tfXJldHVybntyYW5nZTp7c3RhcnRMaW5lTnVtYmVyOmksc3RhcnRDb2x1bW46cisxLGVuZExpbmVOdW1iZXI6aSxlbmRDb2x1bW46YSsyfSx1cmw6bi5zdWJzdHJpbmcocixhKzEpfX1zdGF0aWMgY29tcHV0ZUxpbmtzKHQsbj1DbCgpKXtjb25zdCBpPUVsKCkscj1bXTtmb3IobGV0IHM9MSxhPXQuZ2V0TGluZUNvdW50KCk7czw9YTtzKyspe2NvbnN0IGw9dC5nZXRMaW5lQ29udGVudChzKSxvPWwubGVuZ3RoO2xldCB1PTAsYz0wLGQ9MCxtPTEsZj0hMSxfPSExLGc9ITEsaz0hMTtmb3IoO3U8bzspe2xldCB5PSExO2NvbnN0IHY9bC5jaGFyQ29kZUF0KHUpO2lmKG09PT0xMyl7bGV0IEU7c3dpdGNoKHYpe2Nhc2UgNDA6Zj0hMCxFPTA7YnJlYWs7Y2FzZSA0MTpFPWY/MDoxO2JyZWFrO2Nhc2UgOTE6Zz0hMCxfPSEwLEU9MDticmVhaztjYXNlIDkzOmc9ITEsRT1fPzA6MTticmVhaztjYXNlIDEyMzprPSEwLEU9MDticmVhaztjYXNlIDEyNTpFPWs/MDoxO2JyZWFrO2Nhc2UgMzk6Y2FzZSAzNDpjYXNlIDk2OmQ9PT12P0U9MTpkPT09Mzl8fGQ9PT0zNHx8ZD09PTk2P0U9MDpFPTE7YnJlYWs7Y2FzZSA0MjpFPWQ9PT00Mj8xOjA7YnJlYWs7Y2FzZSAxMjQ6RT1kPT09MTI0PzE6MDticmVhaztjYXNlIDMyOkU9Zz8wOjE7YnJlYWs7ZGVmYXVsdDpFPWkuZ2V0KHYpfUU9PT0xJiYoci5wdXNoKFh0Ll9jcmVhdGVMaW5rKGksbCxzLGMsdSkpLHk9ITApfWVsc2UgaWYobT09PTEyKXtsZXQgRTt2PT09OTE/KF89ITAsRT0wKTpFPWkuZ2V0KHYpLEU9PT0xP3k9ITA6bT0xM31lbHNlIG09bi5uZXh0U3RhdGUobSx2KSxtPT09MCYmKHk9ITApO3kmJihtPTEsZj0hMSxfPSExLGs9ITEsYz11KzEsZD12KSx1Kyt9bT09PTEzJiZyLnB1c2goWHQuX2NyZWF0ZUxpbmsoaSxsLHMsYyxvKSl9cmV0dXJuIHJ9fWZ1bmN0aW9uIFJsKGUpe3JldHVybiFlfHx0eXBlb2YgZS5nZXRMaW5lQ291bnQhPSJmdW5jdGlvbiJ8fHR5cGVvZiBlLmdldExpbmVDb250ZW50IT0iZnVuY3Rpb24iP1tdOlh0LmNvbXB1dGVMaW5rcyhlKX1jb25zdCB4bj1jbGFzcyB4bntjb25zdHJ1Y3Rvcigpe3RoaXMuX2RlZmF1bHRWYWx1ZVNldD1bWyJ0cnVlIiwiZmFsc2UiXSxbIlRydWUiLCJGYWxzZSJdLFsiUHJpdmF0ZSIsIlB1YmxpYyIsIkZyaWVuZCIsIlJlYWRPbmx5IiwiUGFydGlhbCIsIlByb3RlY3RlZCIsIldyaXRlT25seSJdLFsicHVibGljIiwicHJvdGVjdGVkIiwicHJpdmF0ZSJdXX1uYXZpZ2F0ZVZhbHVlU2V0KHQsbixpLHIscyl7aWYodCYmbil7Y29uc3QgYT10aGlzLmRvTmF2aWdhdGVWYWx1ZVNldChuLHMpO2lmKGEpcmV0dXJue3JhbmdlOnQsdmFsdWU6YX19aWYoaSYmcil7Y29uc3QgYT10aGlzLmRvTmF2aWdhdGVWYWx1ZVNldChyLHMpO2lmKGEpcmV0dXJue3JhbmdlOmksdmFsdWU6YX19cmV0dXJuIG51bGx9ZG9OYXZpZ2F0ZVZhbHVlU2V0KHQsbil7Y29uc3QgaT10aGlzLm51bWJlclJlcGxhY2UodCxuKTtyZXR1cm4gaSE9PW51bGw/aTp0aGlzLnRleHRSZXBsYWNlKHQsbil9bnVtYmVyUmVwbGFjZSh0LG4pe2NvbnN0IGk9TWF0aC5wb3coMTAsdC5sZW5ndGgtKHQubGFzdEluZGV4T2YoIi4iKSsxKSk7bGV0IHI9TnVtYmVyKHQpO2NvbnN0IHM9cGFyc2VGbG9hdCh0KTtyZXR1cm4haXNOYU4ocikmJiFpc05hTihzKSYmcj09PXM/cj09PTAmJiFuP251bGw6KHI9TWF0aC5mbG9vcihyKmkpLHIrPW4/aTotaSxTdHJpbmcoci9pKSk6bnVsbH10ZXh0UmVwbGFjZSh0LG4pe3JldHVybiB0aGlzLnZhbHVlU2V0c1JlcGxhY2UodGhpcy5fZGVmYXVsdFZhbHVlU2V0LHQsbil9dmFsdWVTZXRzUmVwbGFjZSh0LG4saSl7bGV0IHI9bnVsbDtmb3IobGV0IHM9MCxhPXQubGVuZ3RoO3I9PT1udWxsJiZzPGE7cysrKXI9dGhpcy52YWx1ZVNldFJlcGxhY2UodFtzXSxuLGkpO3JldHVybiByfXZhbHVlU2V0UmVwbGFjZSh0LG4saSl7bGV0IHI9dC5pbmRleE9mKG4pO3JldHVybiByPj0wPyhyKz1pPzE6LTEscjwwP3I9dC5sZW5ndGgtMTpyJT10Lmxlbmd0aCx0W3JdKTpudWxsfX07eG4uSU5TVEFOQ0U9bmV3IHhuO2xldCBKbj14bjtjb25zdCBwcj1PYmplY3QuZnJlZXplKGZ1bmN0aW9uKGUsdCl7Y29uc3Qgbj1zZXRUaW1lb3V0KGUuYmluZCh0KSwwKTtyZXR1cm57ZGlzcG9zZSgpe2NsZWFyVGltZW91dChuKX19fSk7dmFyIEp0OyhmdW5jdGlvbihlKXtmdW5jdGlvbiB0KG4pe3JldHVybiBuPT09ZS5Ob25lfHxuPT09ZS5DYW5jZWxsZWR8fG4gaW5zdGFuY2VvZiBZdD8hMDohbnx8dHlwZW9mIG4hPSJvYmplY3QiPyExOnR5cGVvZiBuLmlzQ2FuY2VsbGF0aW9uUmVxdWVzdGVkPT0iYm9vbGVhbiImJnR5cGVvZiBuLm9uQ2FuY2VsbGF0aW9uUmVxdWVzdGVkPT0iZnVuY3Rpb24ifWUuaXNDYW5jZWxsYXRpb25Ub2tlbj10LGUuTm9uZT1PYmplY3QuZnJlZXplKHtpc0NhbmNlbGxhdGlvblJlcXVlc3RlZDohMSxvbkNhbmNlbGxhdGlvblJlcXVlc3RlZDpxdC5Ob25lfSksZS5DYW5jZWxsZWQ9T2JqZWN0LmZyZWV6ZSh7aXNDYW5jZWxsYXRpb25SZXF1ZXN0ZWQ6ITAsb25DYW5jZWxsYXRpb25SZXF1ZXN0ZWQ6cHJ9KX0pKEp0fHwoSnQ9e30pKTtjbGFzcyBZdHtjb25zdHJ1Y3Rvcigpe3RoaXMuX2lzQ2FuY2VsbGVkPSExLHRoaXMuX2VtaXR0ZXI9bnVsbH1jYW5jZWwoKXt0aGlzLl9pc0NhbmNlbGxlZHx8KHRoaXMuX2lzQ2FuY2VsbGVkPSEwLHRoaXMuX2VtaXR0ZXImJih0aGlzLl9lbWl0dGVyLmZpcmUodm9pZCAwKSx0aGlzLmRpc3Bvc2UoKSkpfWdldCBpc0NhbmNlbGxhdGlvblJlcXVlc3RlZCgpe3JldHVybiB0aGlzLl9pc0NhbmNlbGxlZH1nZXQgb25DYW5jZWxsYXRpb25SZXF1ZXN0ZWQoKXtyZXR1cm4gdGhpcy5faXNDYW5jZWxsZWQ/cHI6KHRoaXMuX2VtaXR0ZXJ8fCh0aGlzLl9lbWl0dGVyPW5ldyB3ZSksdGhpcy5fZW1pdHRlci5ldmVudCl9ZGlzcG9zZSgpe3RoaXMuX2VtaXR0ZXImJih0aGlzLl9lbWl0dGVyLmRpc3Bvc2UoKSx0aGlzLl9lbWl0dGVyPW51bGwpfX1jbGFzcyBNbHtjb25zdHJ1Y3Rvcih0KXt0aGlzLl90b2tlbj12b2lkIDAsdGhpcy5fcGFyZW50TGlzdGVuZXI9dm9pZCAwLHRoaXMuX3BhcmVudExpc3RlbmVyPXQmJnQub25DYW5jZWxsYXRpb25SZXF1ZXN0ZWQodGhpcy5jYW5jZWwsdGhpcyl9Z2V0IHRva2VuKCl7cmV0dXJuIHRoaXMuX3Rva2VufHwodGhpcy5fdG9rZW49bmV3IFl0KSx0aGlzLl90b2tlbn1jYW5jZWwoKXt0aGlzLl90b2tlbj90aGlzLl90b2tlbiBpbnN0YW5jZW9mIFl0JiZ0aGlzLl90b2tlbi5jYW5jZWwoKTp0aGlzLl90b2tlbj1KdC5DYW5jZWxsZWR9ZGlzcG9zZSh0PSExKXt0JiZ0aGlzLmNhbmNlbCgpLHRoaXMuX3BhcmVudExpc3RlbmVyPy5kaXNwb3NlKCksdGhpcy5fdG9rZW4/dGhpcy5fdG9rZW4gaW5zdGFuY2VvZiBZdCYmdGhpcy5fdG9rZW4uZGlzcG9zZSgpOnRoaXMuX3Rva2VuPUp0Lk5vbmV9fWNsYXNzIFlue2NvbnN0cnVjdG9yKCl7dGhpcy5fa2V5Q29kZVRvU3RyPVtdLHRoaXMuX3N0clRvS2V5Q29kZT1PYmplY3QuY3JlYXRlKG51bGwpfWRlZmluZSh0LG4pe3RoaXMuX2tleUNvZGVUb1N0clt0XT1uLHRoaXMuX3N0clRvS2V5Q29kZVtuLnRvTG93ZXJDYXNlKCldPXR9a2V5Q29kZVRvU3RyKHQpe3JldHVybiB0aGlzLl9rZXlDb2RlVG9TdHJbdF19c3RyVG9LZXlDb2RlKHQpe3JldHVybiB0aGlzLl9zdHJUb0tleUNvZGVbdC50b0xvd2VyQ2FzZSgpXXx8MH19Y29uc3QgUXQ9bmV3IFluLFFuPW5ldyBZbixabj1uZXcgWW4sTmw9bmV3IEFycmF5KDIzMCksRGw9T2JqZWN0LmNyZWF0ZShudWxsKSxJbD1PYmplY3QuY3JlYXRlKG51bGwpOyhmdW5jdGlvbigpe2NvbnN0IGU9IiIsdD1bWzEsMCwiTm9uZSIsMCwidW5rbm93biIsMCwiVktfVU5LTk9XTiIsZSxlXSxbMSwxLCJIeXBlciIsMCxlLDAsZSxlLGVdLFsxLDIsIlN1cGVyIiwwLGUsMCxlLGUsZV0sWzEsMywiRm4iLDAsZSwwLGUsZSxlXSxbMSw0LCJGbkxvY2siLDAsZSwwLGUsZSxlXSxbMSw1LCJTdXNwZW5kIiwwLGUsMCxlLGUsZV0sWzEsNiwiUmVzdW1lIiwwLGUsMCxlLGUsZV0sWzEsNywiVHVyYm8iLDAsZSwwLGUsZSxlXSxbMSw4LCJTbGVlcCIsMCxlLDAsIlZLX1NMRUVQIixlLGVdLFsxLDksIldha2VVcCIsMCxlLDAsZSxlLGVdLFswLDEwLCJLZXlBIiwzMSwiQSIsNjUsIlZLX0EiLGUsZV0sWzAsMTEsIktleUIiLDMyLCJCIiw2NiwiVktfQiIsZSxlXSxbMCwxMiwiS2V5QyIsMzMsIkMiLDY3LCJWS19DIixlLGVdLFswLDEzLCJLZXlEIiwzNCwiRCIsNjgsIlZLX0QiLGUsZV0sWzAsMTQsIktleUUiLDM1LCJFIiw2OSwiVktfRSIsZSxlXSxbMCwxNSwiS2V5RiIsMzYsIkYiLDcwLCJWS19GIixlLGVdLFswLDE2LCJLZXlHIiwzNywiRyIsNzEsIlZLX0ciLGUsZV0sWzAsMTcsIktleUgiLDM4LCJIIiw3MiwiVktfSCIsZSxlXSxbMCwxOCwiS2V5SSIsMzksIkkiLDczLCJWS19JIixlLGVdLFswLDE5LCJLZXlKIiw0MCwiSiIsNzQsIlZLX0oiLGUsZV0sWzAsMjAsIktleUsiLDQxLCJLIiw3NSwiVktfSyIsZSxlXSxbMCwyMSwiS2V5TCIsNDIsIkwiLDc2LCJWS19MIixlLGVdLFswLDIyLCJLZXlNIiw0MywiTSIsNzcsIlZLX00iLGUsZV0sWzAsMjMsIktleU4iLDQ0LCJOIiw3OCwiVktfTiIsZSxlXSxbMCwyNCwiS2V5TyIsNDUsIk8iLDc5LCJWS19PIixlLGVdLFswLDI1LCJLZXlQIiw0NiwiUCIsODAsIlZLX1AiLGUsZV0sWzAsMjYsIktleVEiLDQ3LCJRIiw4MSwiVktfUSIsZSxlXSxbMCwyNywiS2V5UiIsNDgsIlIiLDgyLCJWS19SIixlLGVdLFswLDI4LCJLZXlTIiw0OSwiUyIsODMsIlZLX1MiLGUsZV0sWzAsMjksIktleVQiLDUwLCJUIiw4NCwiVktfVCIsZSxlXSxbMCwzMCwiS2V5VSIsNTEsIlUiLDg1LCJWS19VIixlLGVdLFswLDMxLCJLZXlWIiw1MiwiViIsODYsIlZLX1YiLGUsZV0sWzAsMzIsIktleVciLDUzLCJXIiw4NywiVktfVyIsZSxlXSxbMCwzMywiS2V5WCIsNTQsIlgiLDg4LCJWS19YIixlLGVdLFswLDM0LCJLZXlZIiw1NSwiWSIsODksIlZLX1kiLGUsZV0sWzAsMzUsIktleVoiLDU2LCJaIiw5MCwiVktfWiIsZSxlXSxbMCwzNiwiRGlnaXQxIiwyMiwiMSIsNDksIlZLXzEiLGUsZV0sWzAsMzcsIkRpZ2l0MiIsMjMsIjIiLDUwLCJWS18yIixlLGVdLFswLDM4LCJEaWdpdDMiLDI0LCIzIiw1MSwiVktfMyIsZSxlXSxbMCwzOSwiRGlnaXQ0IiwyNSwiNCIsNTIsIlZLXzQiLGUsZV0sWzAsNDAsIkRpZ2l0NSIsMjYsIjUiLDUzLCJWS181IixlLGVdLFswLDQxLCJEaWdpdDYiLDI3LCI2Iiw1NCwiVktfNiIsZSxlXSxbMCw0MiwiRGlnaXQ3IiwyOCwiNyIsNTUsIlZLXzciLGUsZV0sWzAsNDMsIkRpZ2l0OCIsMjksIjgiLDU2LCJWS184IixlLGVdLFswLDQ0LCJEaWdpdDkiLDMwLCI5Iiw1NywiVktfOSIsZSxlXSxbMCw0NSwiRGlnaXQwIiwyMSwiMCIsNDgsIlZLXzAiLGUsZV0sWzEsNDYsIkVudGVyIiwzLCJFbnRlciIsMTMsIlZLX1JFVFVSTiIsZSxlXSxbMSw0NywiRXNjYXBlIiw5LCJFc2NhcGUiLDI3LCJWS19FU0NBUEUiLGUsZV0sWzEsNDgsIkJhY2tzcGFjZSIsMSwiQmFja3NwYWNlIiw4LCJWS19CQUNLIixlLGVdLFsxLDQ5LCJUYWIiLDIsIlRhYiIsOSwiVktfVEFCIixlLGVdLFsxLDUwLCJTcGFjZSIsMTAsIlNwYWNlIiwzMiwiVktfU1BBQ0UiLGUsZV0sWzAsNTEsIk1pbnVzIiw4OCwiLSIsMTg5LCJWS19PRU1fTUlOVVMiLCItIiwiT0VNX01JTlVTIl0sWzAsNTIsIkVxdWFsIiw4NiwiPSIsMTg3LCJWS19PRU1fUExVUyIsIj0iLCJPRU1fUExVUyJdLFswLDUzLCJCcmFja2V0TGVmdCIsOTIsIlsiLDIxOSwiVktfT0VNXzQiLCJbIiwiT0VNXzQiXSxbMCw1NCwiQnJhY2tldFJpZ2h0Iiw5NCwiXSIsMjIxLCJWS19PRU1fNiIsIl0iLCJPRU1fNiJdLFswLDU1LCJCYWNrc2xhc2giLDkzLCJcXCIsMjIwLCJWS19PRU1fNSIsIlxcIiwiT0VNXzUiXSxbMCw1NiwiSW50bEhhc2giLDAsZSwwLGUsZSxlXSxbMCw1NywiU2VtaWNvbG9uIiw4NSwiOyIsMTg2LCJWS19PRU1fMSIsIjsiLCJPRU1fMSJdLFswLDU4LCJRdW90ZSIsOTUsIiciLDIyMiwiVktfT0VNXzciLCInIiwiT0VNXzciXSxbMCw1OSwiQmFja3F1b3RlIiw5MSwiYCIsMTkyLCJWS19PRU1fMyIsImAiLCJPRU1fMyJdLFswLDYwLCJDb21tYSIsODcsIiwiLDE4OCwiVktfT0VNX0NPTU1BIiwiLCIsIk9FTV9DT01NQSJdLFswLDYxLCJQZXJpb2QiLDg5LCIuIiwxOTAsIlZLX09FTV9QRVJJT0QiLCIuIiwiT0VNX1BFUklPRCJdLFswLDYyLCJTbGFzaCIsOTAsIi8iLDE5MSwiVktfT0VNXzIiLCIvIiwiT0VNXzIiXSxbMSw2MywiQ2Fwc0xvY2siLDgsIkNhcHNMb2NrIiwyMCwiVktfQ0FQSVRBTCIsZSxlXSxbMSw2NCwiRjEiLDU5LCJGMSIsMTEyLCJWS19GMSIsZSxlXSxbMSw2NSwiRjIiLDYwLCJGMiIsMTEzLCJWS19GMiIsZSxlXSxbMSw2NiwiRjMiLDYxLCJGMyIsMTE0LCJWS19GMyIsZSxlXSxbMSw2NywiRjQiLDYyLCJGNCIsMTE1LCJWS19GNCIsZSxlXSxbMSw2OCwiRjUiLDYzLCJGNSIsMTE2LCJWS19GNSIsZSxlXSxbMSw2OSwiRjYiLDY0LCJGNiIsMTE3LCJWS19GNiIsZSxlXSxbMSw3MCwiRjciLDY1LCJGNyIsMTE4LCJWS19GNyIsZSxlXSxbMSw3MSwiRjgiLDY2LCJGOCIsMTE5LCJWS19GOCIsZSxlXSxbMSw3MiwiRjkiLDY3LCJGOSIsMTIwLCJWS19GOSIsZSxlXSxbMSw3MywiRjEwIiw2OCwiRjEwIiwxMjEsIlZLX0YxMCIsZSxlXSxbMSw3NCwiRjExIiw2OSwiRjExIiwxMjIsIlZLX0YxMSIsZSxlXSxbMSw3NSwiRjEyIiw3MCwiRjEyIiwxMjMsIlZLX0YxMiIsZSxlXSxbMSw3NiwiUHJpbnRTY3JlZW4iLDAsZSwwLGUsZSxlXSxbMSw3NywiU2Nyb2xsTG9jayIsODQsIlNjcm9sbExvY2siLDE0NSwiVktfU0NST0xMIixlLGVdLFsxLDc4LCJQYXVzZSIsNywiUGF1c2VCcmVhayIsMTksIlZLX1BBVVNFIixlLGVdLFsxLDc5LCJJbnNlcnQiLDE5LCJJbnNlcnQiLDQ1LCJWS19JTlNFUlQiLGUsZV0sWzEsODAsIkhvbWUiLDE0LCJIb21lIiwzNiwiVktfSE9NRSIsZSxlXSxbMSw4MSwiUGFnZVVwIiwxMSwiUGFnZVVwIiwzMywiVktfUFJJT1IiLGUsZV0sWzEsODIsIkRlbGV0ZSIsMjAsIkRlbGV0ZSIsNDYsIlZLX0RFTEVURSIsZSxlXSxbMSw4MywiRW5kIiwxMywiRW5kIiwzNSwiVktfRU5EIixlLGVdLFsxLDg0LCJQYWdlRG93biIsMTIsIlBhZ2VEb3duIiwzNCwiVktfTkVYVCIsZSxlXSxbMSw4NSwiQXJyb3dSaWdodCIsMTcsIlJpZ2h0QXJyb3ciLDM5LCJWS19SSUdIVCIsIlJpZ2h0IixlXSxbMSw4NiwiQXJyb3dMZWZ0IiwxNSwiTGVmdEFycm93IiwzNywiVktfTEVGVCIsIkxlZnQiLGVdLFsxLDg3LCJBcnJvd0Rvd24iLDE4LCJEb3duQXJyb3ciLDQwLCJWS19ET1dOIiwiRG93biIsZV0sWzEsODgsIkFycm93VXAiLDE2LCJVcEFycm93IiwzOCwiVktfVVAiLCJVcCIsZV0sWzEsODksIk51bUxvY2siLDgzLCJOdW1Mb2NrIiwxNDQsIlZLX05VTUxPQ0siLGUsZV0sWzEsOTAsIk51bXBhZERpdmlkZSIsMTEzLCJOdW1QYWRfRGl2aWRlIiwxMTEsIlZLX0RJVklERSIsZSxlXSxbMSw5MSwiTnVtcGFkTXVsdGlwbHkiLDEwOCwiTnVtUGFkX011bHRpcGx5IiwxMDYsIlZLX01VTFRJUExZIixlLGVdLFsxLDkyLCJOdW1wYWRTdWJ0cmFjdCIsMTExLCJOdW1QYWRfU3VidHJhY3QiLDEwOSwiVktfU1VCVFJBQ1QiLGUsZV0sWzEsOTMsIk51bXBhZEFkZCIsMTA5LCJOdW1QYWRfQWRkIiwxMDcsIlZLX0FERCIsZSxlXSxbMSw5NCwiTnVtcGFkRW50ZXIiLDMsZSwwLGUsZSxlXSxbMSw5NSwiTnVtcGFkMSIsOTksIk51bVBhZDEiLDk3LCJWS19OVU1QQUQxIixlLGVdLFsxLDk2LCJOdW1wYWQyIiwxMDAsIk51bVBhZDIiLDk4LCJWS19OVU1QQUQyIixlLGVdLFsxLDk3LCJOdW1wYWQzIiwxMDEsIk51bVBhZDMiLDk5LCJWS19OVU1QQUQzIixlLGVdLFsxLDk4LCJOdW1wYWQ0IiwxMDIsIk51bVBhZDQiLDEwMCwiVktfTlVNUEFENCIsZSxlXSxbMSw5OSwiTnVtcGFkNSIsMTAzLCJOdW1QYWQ1IiwxMDEsIlZLX05VTVBBRDUiLGUsZV0sWzEsMTAwLCJOdW1wYWQ2IiwxMDQsIk51bVBhZDYiLDEwMiwiVktfTlVNUEFENiIsZSxlXSxbMSwxMDEsIk51bXBhZDciLDEwNSwiTnVtUGFkNyIsMTAzLCJWS19OVU1QQUQ3IixlLGVdLFsxLDEwMiwiTnVtcGFkOCIsMTA2LCJOdW1QYWQ4IiwxMDQsIlZLX05VTVBBRDgiLGUsZV0sWzEsMTAzLCJOdW1wYWQ5IiwxMDcsIk51bVBhZDkiLDEwNSwiVktfTlVNUEFEOSIsZSxlXSxbMSwxMDQsIk51bXBhZDAiLDk4LCJOdW1QYWQwIiw5NiwiVktfTlVNUEFEMCIsZSxlXSxbMSwxMDUsIk51bXBhZERlY2ltYWwiLDExMiwiTnVtUGFkX0RlY2ltYWwiLDExMCwiVktfREVDSU1BTCIsZSxlXSxbMCwxMDYsIkludGxCYWNrc2xhc2giLDk3LCJPRU1fMTAyIiwyMjYsIlZLX09FTV8xMDIiLGUsZV0sWzEsMTA3LCJDb250ZXh0TWVudSIsNTgsIkNvbnRleHRNZW51Iiw5MyxlLGUsZV0sWzEsMTA4LCJQb3dlciIsMCxlLDAsZSxlLGVdLFsxLDEwOSwiTnVtcGFkRXF1YWwiLDAsZSwwLGUsZSxlXSxbMSwxMTAsIkYxMyIsNzEsIkYxMyIsMTI0LCJWS19GMTMiLGUsZV0sWzEsMTExLCJGMTQiLDcyLCJGMTQiLDEyNSwiVktfRjE0IixlLGVdLFsxLDExMiwiRjE1Iiw3MywiRjE1IiwxMjYsIlZLX0YxNSIsZSxlXSxbMSwxMTMsIkYxNiIsNzQsIkYxNiIsMTI3LCJWS19GMTYiLGUsZV0sWzEsMTE0LCJGMTciLDc1LCJGMTciLDEyOCwiVktfRjE3IixlLGVdLFsxLDExNSwiRjE4Iiw3NiwiRjE4IiwxMjksIlZLX0YxOCIsZSxlXSxbMSwxMTYsIkYxOSIsNzcsIkYxOSIsMTMwLCJWS19GMTkiLGUsZV0sWzEsMTE3LCJGMjAiLDc4LCJGMjAiLDEzMSwiVktfRjIwIixlLGVdLFsxLDExOCwiRjIxIiw3OSwiRjIxIiwxMzIsIlZLX0YyMSIsZSxlXSxbMSwxMTksIkYyMiIsODAsIkYyMiIsMTMzLCJWS19GMjIiLGUsZV0sWzEsMTIwLCJGMjMiLDgxLCJGMjMiLDEzNCwiVktfRjIzIixlLGVdLFsxLDEyMSwiRjI0Iiw4MiwiRjI0IiwxMzUsIlZLX0YyNCIsZSxlXSxbMSwxMjIsIk9wZW4iLDAsZSwwLGUsZSxlXSxbMSwxMjMsIkhlbHAiLDAsZSwwLGUsZSxlXSxbMSwxMjQsIlNlbGVjdCIsMCxlLDAsZSxlLGVdLFsxLDEyNSwiQWdhaW4iLDAsZSwwLGUsZSxlXSxbMSwxMjYsIlVuZG8iLDAsZSwwLGUsZSxlXSxbMSwxMjcsIkN1dCIsMCxlLDAsZSxlLGVdLFsxLDEyOCwiQ29weSIsMCxlLDAsZSxlLGVdLFsxLDEyOSwiUGFzdGUiLDAsZSwwLGUsZSxlXSxbMSwxMzAsIkZpbmQiLDAsZSwwLGUsZSxlXSxbMSwxMzEsIkF1ZGlvVm9sdW1lTXV0ZSIsMTE3LCJBdWRpb1ZvbHVtZU11dGUiLDE3MywiVktfVk9MVU1FX01VVEUiLGUsZV0sWzEsMTMyLCJBdWRpb1ZvbHVtZVVwIiwxMTgsIkF1ZGlvVm9sdW1lVXAiLDE3NSwiVktfVk9MVU1FX1VQIixlLGVdLFsxLDEzMywiQXVkaW9Wb2x1bWVEb3duIiwxMTksIkF1ZGlvVm9sdW1lRG93biIsMTc0LCJWS19WT0xVTUVfRE9XTiIsZSxlXSxbMSwxMzQsIk51bXBhZENvbW1hIiwxMTAsIk51bVBhZF9TZXBhcmF0b3IiLDEwOCwiVktfU0VQQVJBVE9SIixlLGVdLFswLDEzNSwiSW50bFJvIiwxMTUsIkFCTlRfQzEiLDE5MywiVktfQUJOVF9DMSIsZSxlXSxbMSwxMzYsIkthbmFNb2RlIiwwLGUsMCxlLGUsZV0sWzAsMTM3LCJJbnRsWWVuIiwwLGUsMCxlLGUsZV0sWzEsMTM4LCJDb252ZXJ0IiwwLGUsMCxlLGUsZV0sWzEsMTM5LCJOb25Db252ZXJ0IiwwLGUsMCxlLGUsZV0sWzEsMTQwLCJMYW5nMSIsMCxlLDAsZSxlLGVdLFsxLDE0MSwiTGFuZzIiLDAsZSwwLGUsZSxlXSxbMSwxNDIsIkxhbmczIiwwLGUsMCxlLGUsZV0sWzEsMTQzLCJMYW5nNCIsMCxlLDAsZSxlLGVdLFsxLDE0NCwiTGFuZzUiLDAsZSwwLGUsZSxlXSxbMSwxNDUsIkFib3J0IiwwLGUsMCxlLGUsZV0sWzEsMTQ2LCJQcm9wcyIsMCxlLDAsZSxlLGVdLFsxLDE0NywiTnVtcGFkUGFyZW5MZWZ0IiwwLGUsMCxlLGUsZV0sWzEsMTQ4LCJOdW1wYWRQYXJlblJpZ2h0IiwwLGUsMCxlLGUsZV0sWzEsMTQ5LCJOdW1wYWRCYWNrc3BhY2UiLDAsZSwwLGUsZSxlXSxbMSwxNTAsIk51bXBhZE1lbW9yeVN0b3JlIiwwLGUsMCxlLGUsZV0sWzEsMTUxLCJOdW1wYWRNZW1vcnlSZWNhbGwiLDAsZSwwLGUsZSxlXSxbMSwxNTIsIk51bXBhZE1lbW9yeUNsZWFyIiwwLGUsMCxlLGUsZV0sWzEsMTUzLCJOdW1wYWRNZW1vcnlBZGQiLDAsZSwwLGUsZSxlXSxbMSwxNTQsIk51bXBhZE1lbW9yeVN1YnRyYWN0IiwwLGUsMCxlLGUsZV0sWzEsMTU1LCJOdW1wYWRDbGVhciIsMTMxLCJDbGVhciIsMTIsIlZLX0NMRUFSIixlLGVdLFsxLDE1NiwiTnVtcGFkQ2xlYXJFbnRyeSIsMCxlLDAsZSxlLGVdLFsxLDAsZSw1LCJDdHJsIiwxNywiVktfQ09OVFJPTCIsZSxlXSxbMSwwLGUsNCwiU2hpZnQiLDE2LCJWS19TSElGVCIsZSxlXSxbMSwwLGUsNiwiQWx0IiwxOCwiVktfTUVOVSIsZSxlXSxbMSwwLGUsNTcsIk1ldGEiLDkxLCJWS19DT01NQU5EIixlLGVdLFsxLDE1NywiQ29udHJvbExlZnQiLDUsZSwwLCJWS19MQ09OVFJPTCIsZSxlXSxbMSwxNTgsIlNoaWZ0TGVmdCIsNCxlLDAsIlZLX0xTSElGVCIsZSxlXSxbMSwxNTksIkFsdExlZnQiLDYsZSwwLCJWS19MTUVOVSIsZSxlXSxbMSwxNjAsIk1ldGFMZWZ0Iiw1NyxlLDAsIlZLX0xXSU4iLGUsZV0sWzEsMTYxLCJDb250cm9sUmlnaHQiLDUsZSwwLCJWS19SQ09OVFJPTCIsZSxlXSxbMSwxNjIsIlNoaWZ0UmlnaHQiLDQsZSwwLCJWS19SU0hJRlQiLGUsZV0sWzEsMTYzLCJBbHRSaWdodCIsNixlLDAsIlZLX1JNRU5VIixlLGVdLFsxLDE2NCwiTWV0YVJpZ2h0Iiw1NyxlLDAsIlZLX1JXSU4iLGUsZV0sWzEsMTY1LCJCcmlnaHRuZXNzVXAiLDAsZSwwLGUsZSxlXSxbMSwxNjYsIkJyaWdodG5lc3NEb3duIiwwLGUsMCxlLGUsZV0sWzEsMTY3LCJNZWRpYVBsYXkiLDAsZSwwLGUsZSxlXSxbMSwxNjgsIk1lZGlhUmVjb3JkIiwwLGUsMCxlLGUsZV0sWzEsMTY5LCJNZWRpYUZhc3RGb3J3YXJkIiwwLGUsMCxlLGUsZV0sWzEsMTcwLCJNZWRpYVJld2luZCIsMCxlLDAsZSxlLGVdLFsxLDE3MSwiTWVkaWFUcmFja05leHQiLDEyNCwiTWVkaWFUcmFja05leHQiLDE3NiwiVktfTUVESUFfTkVYVF9UUkFDSyIsZSxlXSxbMSwxNzIsIk1lZGlhVHJhY2tQcmV2aW91cyIsMTI1LCJNZWRpYVRyYWNrUHJldmlvdXMiLDE3NywiVktfTUVESUFfUFJFVl9UUkFDSyIsZSxlXSxbMSwxNzMsIk1lZGlhU3RvcCIsMTI2LCJNZWRpYVN0b3AiLDE3OCwiVktfTUVESUFfU1RPUCIsZSxlXSxbMSwxNzQsIkVqZWN0IiwwLGUsMCxlLGUsZV0sWzEsMTc1LCJNZWRpYVBsYXlQYXVzZSIsMTI3LCJNZWRpYVBsYXlQYXVzZSIsMTc5LCJWS19NRURJQV9QTEFZX1BBVVNFIixlLGVdLFsxLDE3NiwiTWVkaWFTZWxlY3QiLDEyOCwiTGF1bmNoTWVkaWFQbGF5ZXIiLDE4MSwiVktfTUVESUFfTEFVTkNIX01FRElBX1NFTEVDVCIsZSxlXSxbMSwxNzcsIkxhdW5jaE1haWwiLDEyOSwiTGF1bmNoTWFpbCIsMTgwLCJWS19NRURJQV9MQVVOQ0hfTUFJTCIsZSxlXSxbMSwxNzgsIkxhdW5jaEFwcDIiLDEzMCwiTGF1bmNoQXBwMiIsMTgzLCJWS19NRURJQV9MQVVOQ0hfQVBQMiIsZSxlXSxbMSwxNzksIkxhdW5jaEFwcDEiLDAsZSwwLCJWS19NRURJQV9MQVVOQ0hfQVBQMSIsZSxlXSxbMSwxODAsIlNlbGVjdFRhc2siLDAsZSwwLGUsZSxlXSxbMSwxODEsIkxhdW5jaFNjcmVlblNhdmVyIiwwLGUsMCxlLGUsZV0sWzEsMTgyLCJCcm93c2VyU2VhcmNoIiwxMjAsIkJyb3dzZXJTZWFyY2giLDE3MCwiVktfQlJPV1NFUl9TRUFSQ0giLGUsZV0sWzEsMTgzLCJCcm93c2VySG9tZSIsMTIxLCJCcm93c2VySG9tZSIsMTcyLCJWS19CUk9XU0VSX0hPTUUiLGUsZV0sWzEsMTg0LCJCcm93c2VyQmFjayIsMTIyLCJCcm93c2VyQmFjayIsMTY2LCJWS19CUk9XU0VSX0JBQ0siLGUsZV0sWzEsMTg1LCJCcm93c2VyRm9yd2FyZCIsMTIzLCJCcm93c2VyRm9yd2FyZCIsMTY3LCJWS19CUk9XU0VSX0ZPUldBUkQiLGUsZV0sWzEsMTg2LCJCcm93c2VyU3RvcCIsMCxlLDAsIlZLX0JST1dTRVJfU1RPUCIsZSxlXSxbMSwxODcsIkJyb3dzZXJSZWZyZXNoIiwwLGUsMCwiVktfQlJPV1NFUl9SRUZSRVNIIixlLGVdLFsxLDE4OCwiQnJvd3NlckZhdm9yaXRlcyIsMCxlLDAsIlZLX0JST1dTRVJfRkFWT1JJVEVTIixlLGVdLFsxLDE4OSwiWm9vbVRvZ2dsZSIsMCxlLDAsZSxlLGVdLFsxLDE5MCwiTWFpbFJlcGx5IiwwLGUsMCxlLGUsZV0sWzEsMTkxLCJNYWlsRm9yd2FyZCIsMCxlLDAsZSxlLGVdLFsxLDE5MiwiTWFpbFNlbmQiLDAsZSwwLGUsZSxlXSxbMSwwLGUsMTE0LCJLZXlJbkNvbXBvc2l0aW9uIiwyMjksZSxlLGVdLFsxLDAsZSwxMTYsIkFCTlRfQzIiLDE5NCwiVktfQUJOVF9DMiIsZSxlXSxbMSwwLGUsOTYsIk9FTV84IiwyMjMsIlZLX09FTV84IixlLGVdLFsxLDAsZSwwLGUsMCwiVktfS0FOQSIsZSxlXSxbMSwwLGUsMCxlLDAsIlZLX0hBTkdVTCIsZSxlXSxbMSwwLGUsMCxlLDAsIlZLX0pVTkpBIixlLGVdLFsxLDAsZSwwLGUsMCwiVktfRklOQUwiLGUsZV0sWzEsMCxlLDAsZSwwLCJWS19IQU5KQSIsZSxlXSxbMSwwLGUsMCxlLDAsIlZLX0tBTkpJIixlLGVdLFsxLDAsZSwwLGUsMCwiVktfQ09OVkVSVCIsZSxlXSxbMSwwLGUsMCxlLDAsIlZLX05PTkNPTlZFUlQiLGUsZV0sWzEsMCxlLDAsZSwwLCJWS19BQ0NFUFQiLGUsZV0sWzEsMCxlLDAsZSwwLCJWS19NT0RFQ0hBTkdFIixlLGVdLFsxLDAsZSwwLGUsMCwiVktfU0VMRUNUIixlLGVdLFsxLDAsZSwwLGUsMCwiVktfUFJJTlQiLGUsZV0sWzEsMCxlLDAsZSwwLCJWS19FWEVDVVRFIixlLGVdLFsxLDAsZSwwLGUsMCwiVktfU05BUFNIT1QiLGUsZV0sWzEsMCxlLDAsZSwwLCJWS19IRUxQIixlLGVdLFsxLDAsZSwwLGUsMCwiVktfQVBQUyIsZSxlXSxbMSwwLGUsMCxlLDAsIlZLX1BST0NFU1NLRVkiLGUsZV0sWzEsMCxlLDAsZSwwLCJWS19QQUNLRVQiLGUsZV0sWzEsMCxlLDAsZSwwLCJWS19EQkVfU0JDU0NIQVIiLGUsZV0sWzEsMCxlLDAsZSwwLCJWS19EQkVfREJDU0NIQVIiLGUsZV0sWzEsMCxlLDAsZSwwLCJWS19BVFROIixlLGVdLFsxLDAsZSwwLGUsMCwiVktfQ1JTRUwiLGUsZV0sWzEsMCxlLDAsZSwwLCJWS19FWFNFTCIsZSxlXSxbMSwwLGUsMCxlLDAsIlZLX0VSRU9GIixlLGVdLFsxLDAsZSwwLGUsMCwiVktfUExBWSIsZSxlXSxbMSwwLGUsMCxlLDAsIlZLX1pPT00iLGUsZV0sWzEsMCxlLDAsZSwwLCJWS19OT05BTUUiLGUsZV0sWzEsMCxlLDAsZSwwLCJWS19QQTEiLGUsZV0sWzEsMCxlLDAsZSwwLCJWS19PRU1fQ0xFQVIiLGUsZV1dLG49W10saT1bXTtmb3IoY29uc3QgciBvZiB0KXtjb25zdFtzLGEsbCxvLHUsYyxkLG0sZl09cjtpZihpW2FdfHwoaVthXT0hMCxEbFtsXT1hLElsW2wudG9Mb3dlckNhc2UoKV09YSksIW5bb10pe2lmKG5bb109ITAsIXUpdGhyb3cgbmV3IEVycm9yKGBTdHJpbmcgcmVwcmVzZW50YXRpb24gbWlzc2luZyBmb3Iga2V5IGNvZGUgJHtvfSBhcm91bmQgc2NhbiBjb2RlICR7bH1gKTtRdC5kZWZpbmUobyx1KSxRbi5kZWZpbmUobyxtfHx1KSxabi5kZWZpbmUobyxmfHxtfHx1KX1jJiYoTmxbY109byl9fSkoKTt2YXIgZ3I7KGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQobCl7cmV0dXJuIFF0LmtleUNvZGVUb1N0cihsKX1lLnRvU3RyaW5nPXQ7ZnVuY3Rpb24gbihsKXtyZXR1cm4gUXQuc3RyVG9LZXlDb2RlKGwpfWUuZnJvbVN0cmluZz1uO2Z1bmN0aW9uIGkobCl7cmV0dXJuIFFuLmtleUNvZGVUb1N0cihsKX1lLnRvVXNlclNldHRpbmdzVVM9aTtmdW5jdGlvbiByKGwpe3JldHVybiBabi5rZXlDb2RlVG9TdHIobCl9ZS50b1VzZXJTZXR0aW5nc0dlbmVyYWw9cjtmdW5jdGlvbiBzKGwpe3JldHVybiBRbi5zdHJUb0tleUNvZGUobCl8fFpuLnN0clRvS2V5Q29kZShsKX1lLmZyb21Vc2VyU2V0dGluZ3M9cztmdW5jdGlvbiBhKGwpe2lmKGw+PTk4JiZsPD0xMTMpcmV0dXJuIG51bGw7c3dpdGNoKGwpe2Nhc2UgMTY6cmV0dXJuIlVwIjtjYXNlIDE4OnJldHVybiJEb3duIjtjYXNlIDE1OnJldHVybiJMZWZ0IjtjYXNlIDE3OnJldHVybiJSaWdodCJ9cmV0dXJuIFF0LmtleUNvZGVUb1N0cihsKX1lLnRvRWxlY3Ryb25BY2NlbGVyYXRvcj1hfSkoZ3J8fChncj17fSkpO2Z1bmN0aW9uIHpsKGUsdCl7Y29uc3Qgbj0odCY2NTUzNSk8PDE2Pj4+MDtyZXR1cm4oZXxuKT4+PjB9Y2xhc3MgZ2UgZXh0ZW5kcyBHe2NvbnN0cnVjdG9yKHQsbixpLHIpe3N1cGVyKHQsbixpLHIpLHRoaXMuc2VsZWN0aW9uU3RhcnRMaW5lTnVtYmVyPXQsdGhpcy5zZWxlY3Rpb25TdGFydENvbHVtbj1uLHRoaXMucG9zaXRpb25MaW5lTnVtYmVyPWksdGhpcy5wb3NpdGlvbkNvbHVtbj1yfXRvU3RyaW5nKCl7cmV0dXJuIlsiK3RoaXMuc2VsZWN0aW9uU3RhcnRMaW5lTnVtYmVyKyIsIit0aGlzLnNlbGVjdGlvblN0YXJ0Q29sdW1uKyIgLT4gIit0aGlzLnBvc2l0aW9uTGluZU51bWJlcisiLCIrdGhpcy5wb3NpdGlvbkNvbHVtbisiXSJ9ZXF1YWxzU2VsZWN0aW9uKHQpe3JldHVybiBnZS5zZWxlY3Rpb25zRXF1YWwodGhpcyx0KX1zdGF0aWMgc2VsZWN0aW9uc0VxdWFsKHQsbil7cmV0dXJuIHQuc2VsZWN0aW9uU3RhcnRMaW5lTnVtYmVyPT09bi5zZWxlY3Rpb25TdGFydExpbmVOdW1iZXImJnQuc2VsZWN0aW9uU3RhcnRDb2x1bW49PT1uLnNlbGVjdGlvblN0YXJ0Q29sdW1uJiZ0LnBvc2l0aW9uTGluZU51bWJlcj09PW4ucG9zaXRpb25MaW5lTnVtYmVyJiZ0LnBvc2l0aW9uQ29sdW1uPT09bi5wb3NpdGlvbkNvbHVtbn1nZXREaXJlY3Rpb24oKXtyZXR1cm4gdGhpcy5zZWxlY3Rpb25TdGFydExpbmVOdW1iZXI9PT10aGlzLnN0YXJ0TGluZU51bWJlciYmdGhpcy5zZWxlY3Rpb25TdGFydENvbHVtbj09PXRoaXMuc3RhcnRDb2x1bW4/MDoxfXNldEVuZFBvc2l0aW9uKHQsbil7cmV0dXJuIHRoaXMuZ2V0RGlyZWN0aW9uKCk9PT0wP25ldyBnZSh0aGlzLnN0YXJ0TGluZU51bWJlcix0aGlzLnN0YXJ0Q29sdW1uLHQsbik6bmV3IGdlKHQsbix0aGlzLnN0YXJ0TGluZU51bWJlcix0aGlzLnN0YXJ0Q29sdW1uKX1nZXRQb3NpdGlvbigpe3JldHVybiBuZXcgdGUodGhpcy5wb3NpdGlvbkxpbmVOdW1iZXIsdGhpcy5wb3NpdGlvbkNvbHVtbil9Z2V0U2VsZWN0aW9uU3RhcnQoKXtyZXR1cm4gbmV3IHRlKHRoaXMuc2VsZWN0aW9uU3RhcnRMaW5lTnVtYmVyLHRoaXMuc2VsZWN0aW9uU3RhcnRDb2x1bW4pfXNldFN0YXJ0UG9zaXRpb24odCxuKXtyZXR1cm4gdGhpcy5nZXREaXJlY3Rpb24oKT09PTA/bmV3IGdlKHQsbix0aGlzLmVuZExpbmVOdW1iZXIsdGhpcy5lbmRDb2x1bW4pOm5ldyBnZSh0aGlzLmVuZExpbmVOdW1iZXIsdGhpcy5lbmRDb2x1bW4sdCxuKX1zdGF0aWMgZnJvbVBvc2l0aW9ucyh0LG49dCl7cmV0dXJuIG5ldyBnZSh0LmxpbmVOdW1iZXIsdC5jb2x1bW4sbi5saW5lTnVtYmVyLG4uY29sdW1uKX1zdGF0aWMgZnJvbVJhbmdlKHQsbil7cmV0dXJuIG49PT0wP25ldyBnZSh0LnN0YXJ0TGluZU51bWJlcix0LnN0YXJ0Q29sdW1uLHQuZW5kTGluZU51bWJlcix0LmVuZENvbHVtbik6bmV3IGdlKHQuZW5kTGluZU51bWJlcix0LmVuZENvbHVtbix0LnN0YXJ0TGluZU51bWJlcix0LnN0YXJ0Q29sdW1uKX1zdGF0aWMgbGlmdFNlbGVjdGlvbih0KXtyZXR1cm4gbmV3IGdlKHQuc2VsZWN0aW9uU3RhcnRMaW5lTnVtYmVyLHQuc2VsZWN0aW9uU3RhcnRDb2x1bW4sdC5wb3NpdGlvbkxpbmVOdW1iZXIsdC5wb3NpdGlvbkNvbHVtbil9c3RhdGljIHNlbGVjdGlvbnNBcnJFcXVhbCh0LG4pe2lmKHQmJiFufHwhdCYmbilyZXR1cm4hMTtpZighdCYmIW4pcmV0dXJuITA7aWYodC5sZW5ndGghPT1uLmxlbmd0aClyZXR1cm4hMTtmb3IobGV0IGk9MCxyPXQubGVuZ3RoO2k8cjtpKyspaWYoIXRoaXMuc2VsZWN0aW9uc0VxdWFsKHRbaV0sbltpXSkpcmV0dXJuITE7cmV0dXJuITB9c3RhdGljIGlzSVNlbGVjdGlvbih0KXtyZXR1cm4gdCYmdHlwZW9mIHQuc2VsZWN0aW9uU3RhcnRMaW5lTnVtYmVyPT0ibnVtYmVyIiYmdHlwZW9mIHQuc2VsZWN0aW9uU3RhcnRDb2x1bW49PSJudW1iZXIiJiZ0eXBlb2YgdC5wb3NpdGlvbkxpbmVOdW1iZXI9PSJudW1iZXIiJiZ0eXBlb2YgdC5wb3NpdGlvbkNvbHVtbj09Im51bWJlciJ9c3RhdGljIGNyZWF0ZVdpdGhEaXJlY3Rpb24odCxuLGkscixzKXtyZXR1cm4gcz09PTA/bmV3IGdlKHQsbixpLHIpOm5ldyBnZShpLHIsdCxuKX19ZnVuY3Rpb24gVWwoZSl7cmV0dXJuIHR5cGVvZiBlPT0ic3RyaW5nIn1jb25zdCBicj1PYmplY3QuY3JlYXRlKG51bGwpO2Z1bmN0aW9uIGgoZSx0KXtpZihVbCh0KSl7Y29uc3Qgbj1iclt0XTtpZihuPT09dm9pZCAwKXRocm93IG5ldyBFcnJvcihgJHtlfSByZWZlcmVuY2VzIGFuIHVua25vd24gY29kaWNvbjogJHt0fWApO3Q9bn1yZXR1cm4gYnJbZV09dCx7aWQ6ZX19Y29uc3QgSGw9e2FkZDpoKCJhZGQiLDZlNCkscGx1czpoKCJwbHVzIiw2ZTQpLGdpc3ROZXc6aCgiZ2lzdC1uZXciLDZlNCkscmVwb0NyZWF0ZTpoKCJyZXBvLWNyZWF0ZSIsNmU0KSxsaWdodGJ1bGI6aCgibGlnaHRidWxiIiw2MDAwMSksbGlnaHRCdWxiOmgoImxpZ2h0LWJ1bGIiLDYwMDAxKSxyZXBvOmgoInJlcG8iLDYwMDAyKSxyZXBvRGVsZXRlOmgoInJlcG8tZGVsZXRlIiw2MDAwMiksZ2lzdEZvcms6aCgiZ2lzdC1mb3JrIiw2MDAwMykscmVwb0ZvcmtlZDpoKCJyZXBvLWZvcmtlZCIsNjAwMDMpLGdpdFB1bGxSZXF1ZXN0OmgoImdpdC1wdWxsLXJlcXVlc3QiLDYwMDA0KSxnaXRQdWxsUmVxdWVzdEFiYW5kb25lZDpoKCJnaXQtcHVsbC1yZXF1ZXN0LWFiYW5kb25lZCIsNjAwMDQpLHJlY29yZEtleXM6aCgicmVjb3JkLWtleXMiLDYwMDA1KSxrZXlib2FyZDpoKCJrZXlib2FyZCIsNjAwMDUpLHRhZzpoKCJ0YWciLDYwMDA2KSxnaXRQdWxsUmVxdWVzdExhYmVsOmgoImdpdC1wdWxsLXJlcXVlc3QtbGFiZWwiLDYwMDA2KSx0YWdBZGQ6aCgidGFnLWFkZCIsNjAwMDYpLHRhZ1JlbW92ZTpoKCJ0YWctcmVtb3ZlIiw2MDAwNikscGVyc29uOmgoInBlcnNvbiIsNjAwMDcpLHBlcnNvbkZvbGxvdzpoKCJwZXJzb24tZm9sbG93Iiw2MDAwNykscGVyc29uT3V0bGluZTpoKCJwZXJzb24tb3V0bGluZSIsNjAwMDcpLHBlcnNvbkZpbGxlZDpoKCJwZXJzb24tZmlsbGVkIiw2MDAwNyksZ2l0QnJhbmNoOmgoImdpdC1icmFuY2giLDYwMDA4KSxnaXRCcmFuY2hDcmVhdGU6aCgiZ2l0LWJyYW5jaC1jcmVhdGUiLDYwMDA4KSxnaXRCcmFuY2hEZWxldGU6aCgiZ2l0LWJyYW5jaC1kZWxldGUiLDYwMDA4KSxzb3VyY2VDb250cm9sOmgoInNvdXJjZS1jb250cm9sIiw2MDAwOCksbWlycm9yOmgoIm1pcnJvciIsNjAwMDkpLG1pcnJvclB1YmxpYzpoKCJtaXJyb3ItcHVibGljIiw2MDAwOSksc3RhcjpoKCJzdGFyIiw2MDAxMCksc3RhckFkZDpoKCJzdGFyLWFkZCIsNjAwMTApLHN0YXJEZWxldGU6aCgic3Rhci1kZWxldGUiLDYwMDEwKSxzdGFyRW1wdHk6aCgic3Rhci1lbXB0eSIsNjAwMTApLGNvbW1lbnQ6aCgiY29tbWVudCIsNjAwMTEpLGNvbW1lbnRBZGQ6aCgiY29tbWVudC1hZGQiLDYwMDExKSxhbGVydDpoKCJhbGVydCIsNjAwMTIpLHdhcm5pbmc6aCgid2FybmluZyIsNjAwMTIpLHNlYXJjaDpoKCJzZWFyY2giLDYwMDEzKSxzZWFyY2hTYXZlOmgoInNlYXJjaC1zYXZlIiw2MDAxMyksbG9nT3V0OmgoImxvZy1vdXQiLDYwMDE0KSxzaWduT3V0OmgoInNpZ24tb3V0Iiw2MDAxNCksbG9nSW46aCgibG9nLWluIiw2MDAxNSksc2lnbkluOmgoInNpZ24taW4iLDYwMDE1KSxleWU6aCgiZXllIiw2MDAxNiksZXllVW53YXRjaDpoKCJleWUtdW53YXRjaCIsNjAwMTYpLGV5ZVdhdGNoOmgoImV5ZS13YXRjaCIsNjAwMTYpLGNpcmNsZUZpbGxlZDpoKCJjaXJjbGUtZmlsbGVkIiw2MDAxNykscHJpbWl0aXZlRG90OmgoInByaW1pdGl2ZS1kb3QiLDYwMDE3KSxjbG9zZURpcnR5OmgoImNsb3NlLWRpcnR5Iiw2MDAxNyksZGVidWdCcmVha3BvaW50OmgoImRlYnVnLWJyZWFrcG9pbnQiLDYwMDE3KSxkZWJ1Z0JyZWFrcG9pbnREaXNhYmxlZDpoKCJkZWJ1Zy1icmVha3BvaW50LWRpc2FibGVkIiw2MDAxNyksZGVidWdIaW50OmgoImRlYnVnLWhpbnQiLDYwMDE3KSx0ZXJtaW5hbERlY29yYXRpb25TdWNjZXNzOmgoInRlcm1pbmFsLWRlY29yYXRpb24tc3VjY2VzcyIsNjAwMTcpLHByaW1pdGl2ZVNxdWFyZTpoKCJwcmltaXRpdmUtc3F1YXJlIiw2MDAxOCksZWRpdDpoKCJlZGl0Iiw2MDAxOSkscGVuY2lsOmgoInBlbmNpbCIsNjAwMTkpLGluZm86aCgiaW5mbyIsNjAwMjApLGlzc3VlT3BlbmVkOmgoImlzc3VlLW9wZW5lZCIsNjAwMjApLGdpc3RQcml2YXRlOmgoImdpc3QtcHJpdmF0ZSIsNjAwMjEpLGdpdEZvcmtQcml2YXRlOmgoImdpdC1mb3JrLXByaXZhdGUiLDYwMDIxKSxsb2NrOmgoImxvY2siLDYwMDIxKSxtaXJyb3JQcml2YXRlOmgoIm1pcnJvci1wcml2YXRlIiw2MDAyMSksY2xvc2U6aCgiY2xvc2UiLDYwMDIyKSxyZW1vdmVDbG9zZTpoKCJyZW1vdmUtY2xvc2UiLDYwMDIyKSx4OmgoIngiLDYwMDIyKSxyZXBvU3luYzpoKCJyZXBvLXN5bmMiLDYwMDIzKSxzeW5jOmgoInN5bmMiLDYwMDIzKSxjbG9uZTpoKCJjbG9uZSIsNjAwMjQpLGRlc2t0b3BEb3dubG9hZDpoKCJkZXNrdG9wLWRvd25sb2FkIiw2MDAyNCksYmVha2VyOmgoImJlYWtlciIsNjAwMjUpLG1pY3Jvc2NvcGU6aCgibWljcm9zY29wZSIsNjAwMjUpLHZtOmgoInZtIiw2MDAyNiksZGV2aWNlRGVza3RvcDpoKCJkZXZpY2UtZGVza3RvcCIsNjAwMjYpLGZpbGU6aCgiZmlsZSIsNjAwMjcpLGZpbGVUZXh0OmgoImZpbGUtdGV4dCIsNjAwMjcpLG1vcmU6aCgibW9yZSIsNjAwMjgpLGVsbGlwc2lzOmgoImVsbGlwc2lzIiw2MDAyOCksa2ViYWJIb3Jpem9udGFsOmgoImtlYmFiLWhvcml6b250YWwiLDYwMDI4KSxtYWlsUmVwbHk6aCgibWFpbC1yZXBseSIsNjAwMjkpLHJlcGx5OmgoInJlcGx5Iiw2MDAyOSksb3JnYW5pemF0aW9uOmgoIm9yZ2FuaXphdGlvbiIsNjAwMzApLG9yZ2FuaXphdGlvbkZpbGxlZDpoKCJvcmdhbml6YXRpb24tZmlsbGVkIiw2MDAzMCksb3JnYW5pemF0aW9uT3V0bGluZTpoKCJvcmdhbml6YXRpb24tb3V0bGluZSIsNjAwMzApLG5ld0ZpbGU6aCgibmV3LWZpbGUiLDYwMDMxKSxmaWxlQWRkOmgoImZpbGUtYWRkIiw2MDAzMSksbmV3Rm9sZGVyOmgoIm5ldy1mb2xkZXIiLDYwMDMyKSxmaWxlRGlyZWN0b3J5Q3JlYXRlOmgoImZpbGUtZGlyZWN0b3J5LWNyZWF0ZSIsNjAwMzIpLHRyYXNoOmgoInRyYXNoIiw2MDAzMyksdHJhc2hjYW46aCgidHJhc2hjYW4iLDYwMDMzKSxoaXN0b3J5OmgoImhpc3RvcnkiLDYwMDM0KSxjbG9jazpoKCJjbG9jayIsNjAwMzQpLGZvbGRlcjpoKCJmb2xkZXIiLDYwMDM1KSxmaWxlRGlyZWN0b3J5OmgoImZpbGUtZGlyZWN0b3J5Iiw2MDAzNSksc3ltYm9sRm9sZGVyOmgoInN5bWJvbC1mb2xkZXIiLDYwMDM1KSxsb2dvR2l0aHViOmgoImxvZ28tZ2l0aHViIiw2MDAzNiksbWFya0dpdGh1YjpoKCJtYXJrLWdpdGh1YiIsNjAwMzYpLGdpdGh1YjpoKCJnaXRodWIiLDYwMDM2KSx0ZXJtaW5hbDpoKCJ0ZXJtaW5hbCIsNjAwMzcpLGNvbnNvbGU6aCgiY29uc29sZSIsNjAwMzcpLHJlcGw6aCgicmVwbCIsNjAwMzcpLHphcDpoKCJ6YXAiLDYwMDM4KSxzeW1ib2xFdmVudDpoKCJzeW1ib2wtZXZlbnQiLDYwMDM4KSxlcnJvcjpoKCJlcnJvciIsNjAwMzkpLHN0b3A6aCgic3RvcCIsNjAwMzkpLHZhcmlhYmxlOmgoInZhcmlhYmxlIiw2MDA0MCksc3ltYm9sVmFyaWFibGU6aCgic3ltYm9sLXZhcmlhYmxlIiw2MDA0MCksYXJyYXk6aCgiYXJyYXkiLDYwMDQyKSxzeW1ib2xBcnJheTpoKCJzeW1ib2wtYXJyYXkiLDYwMDQyKSxzeW1ib2xNb2R1bGU6aCgic3ltYm9sLW1vZHVsZSIsNjAwNDMpLHN5bWJvbFBhY2thZ2U6aCgic3ltYm9sLXBhY2thZ2UiLDYwMDQzKSxzeW1ib2xOYW1lc3BhY2U6aCgic3ltYm9sLW5hbWVzcGFjZSIsNjAwNDMpLHN5bWJvbE9iamVjdDpoKCJzeW1ib2wtb2JqZWN0Iiw2MDA0Myksc3ltYm9sTWV0aG9kOmgoInN5bWJvbC1tZXRob2QiLDYwMDQ0KSxzeW1ib2xGdW5jdGlvbjpoKCJzeW1ib2wtZnVuY3Rpb24iLDYwMDQ0KSxzeW1ib2xDb25zdHJ1Y3RvcjpoKCJzeW1ib2wtY29uc3RydWN0b3IiLDYwMDQ0KSxzeW1ib2xCb29sZWFuOmgoInN5bWJvbC1ib29sZWFuIiw2MDA0Nyksc3ltYm9sTnVsbDpoKCJzeW1ib2wtbnVsbCIsNjAwNDcpLHN5bWJvbE51bWVyaWM6aCgic3ltYm9sLW51bWVyaWMiLDYwMDQ4KSxzeW1ib2xOdW1iZXI6aCgic3ltYm9sLW51bWJlciIsNjAwNDgpLHN5bWJvbFN0cnVjdHVyZTpoKCJzeW1ib2wtc3RydWN0dXJlIiw2MDA0OSksc3ltYm9sU3RydWN0OmgoInN5bWJvbC1zdHJ1Y3QiLDYwMDQ5KSxzeW1ib2xQYXJhbWV0ZXI6aCgic3ltYm9sLXBhcmFtZXRlciIsNjAwNTApLHN5bWJvbFR5cGVQYXJhbWV0ZXI6aCgic3ltYm9sLXR5cGUtcGFyYW1ldGVyIiw2MDA1MCksc3ltYm9sS2V5OmgoInN5bWJvbC1rZXkiLDYwMDUxKSxzeW1ib2xUZXh0OmgoInN5bWJvbC10ZXh0Iiw2MDA1MSksc3ltYm9sUmVmZXJlbmNlOmgoInN5bWJvbC1yZWZlcmVuY2UiLDYwMDUyKSxnb1RvRmlsZTpoKCJnby10by1maWxlIiw2MDA1Miksc3ltYm9sRW51bTpoKCJzeW1ib2wtZW51bSIsNjAwNTMpLHN5bWJvbFZhbHVlOmgoInN5bWJvbC12YWx1ZSIsNjAwNTMpLHN5bWJvbFJ1bGVyOmgoInN5bWJvbC1ydWxlciIsNjAwNTQpLHN5bWJvbFVuaXQ6aCgic3ltYm9sLXVuaXQiLDYwMDU0KSxhY3RpdmF0ZUJyZWFrcG9pbnRzOmgoImFjdGl2YXRlLWJyZWFrcG9pbnRzIiw2MDA1NSksYXJjaGl2ZTpoKCJhcmNoaXZlIiw2MDA1NiksYXJyb3dCb3RoOmgoImFycm93LWJvdGgiLDYwMDU3KSxhcnJvd0Rvd246aCgiYXJyb3ctZG93biIsNjAwNTgpLGFycm93TGVmdDpoKCJhcnJvdy1sZWZ0Iiw2MDA1OSksYXJyb3dSaWdodDpoKCJhcnJvdy1yaWdodCIsNjAwNjApLGFycm93U21hbGxEb3duOmgoImFycm93LXNtYWxsLWRvd24iLDYwMDYxKSxhcnJvd1NtYWxsTGVmdDpoKCJhcnJvdy1zbWFsbC1sZWZ0Iiw2MDA2MiksYXJyb3dTbWFsbFJpZ2h0OmgoImFycm93LXNtYWxsLXJpZ2h0Iiw2MDA2MyksYXJyb3dTbWFsbFVwOmgoImFycm93LXNtYWxsLXVwIiw2MDA2NCksYXJyb3dVcDpoKCJhcnJvdy11cCIsNjAwNjUpLGJlbGw6aCgiYmVsbCIsNjAwNjYpLGJvbGQ6aCgiYm9sZCIsNjAwNjcpLGJvb2s6aCgiYm9vayIsNjAwNjgpLGJvb2ttYXJrOmgoImJvb2ttYXJrIiw2MDA2OSksZGVidWdCcmVha3BvaW50Q29uZGl0aW9uYWxVbnZlcmlmaWVkOmgoImRlYnVnLWJyZWFrcG9pbnQtY29uZGl0aW9uYWwtdW52ZXJpZmllZCIsNjAwNzApLGRlYnVnQnJlYWtwb2ludENvbmRpdGlvbmFsOmgoImRlYnVnLWJyZWFrcG9pbnQtY29uZGl0aW9uYWwiLDYwMDcxKSxkZWJ1Z0JyZWFrcG9pbnRDb25kaXRpb25hbERpc2FibGVkOmgoImRlYnVnLWJyZWFrcG9pbnQtY29uZGl0aW9uYWwtZGlzYWJsZWQiLDYwMDcxKSxkZWJ1Z0JyZWFrcG9pbnREYXRhVW52ZXJpZmllZDpoKCJkZWJ1Zy1icmVha3BvaW50LWRhdGEtdW52ZXJpZmllZCIsNjAwNzIpLGRlYnVnQnJlYWtwb2ludERhdGE6aCgiZGVidWctYnJlYWtwb2ludC1kYXRhIiw2MDA3MyksZGVidWdCcmVha3BvaW50RGF0YURpc2FibGVkOmgoImRlYnVnLWJyZWFrcG9pbnQtZGF0YS1kaXNhYmxlZCIsNjAwNzMpLGRlYnVnQnJlYWtwb2ludExvZ1VudmVyaWZpZWQ6aCgiZGVidWctYnJlYWtwb2ludC1sb2ctdW52ZXJpZmllZCIsNjAwNzQpLGRlYnVnQnJlYWtwb2ludExvZzpoKCJkZWJ1Zy1icmVha3BvaW50LWxvZyIsNjAwNzUpLGRlYnVnQnJlYWtwb2ludExvZ0Rpc2FibGVkOmgoImRlYnVnLWJyZWFrcG9pbnQtbG9nLWRpc2FibGVkIiw2MDA3NSksYnJpZWZjYXNlOmgoImJyaWVmY2FzZSIsNjAwNzYpLGJyb2FkY2FzdDpoKCJicm9hZGNhc3QiLDYwMDc3KSxicm93c2VyOmgoImJyb3dzZXIiLDYwMDc4KSxidWc6aCgiYnVnIiw2MDA3OSksY2FsZW5kYXI6aCgiY2FsZW5kYXIiLDYwMDgwKSxjYXNlU2Vuc2l0aXZlOmgoImNhc2Utc2Vuc2l0aXZlIiw2MDA4MSksY2hlY2s6aCgiY2hlY2siLDYwMDgyKSxjaGVja2xpc3Q6aCgiY2hlY2tsaXN0Iiw2MDA4MyksY2hldnJvbkRvd246aCgiY2hldnJvbi1kb3duIiw2MDA4NCksY2hldnJvbkxlZnQ6aCgiY2hldnJvbi1sZWZ0Iiw2MDA4NSksY2hldnJvblJpZ2h0OmgoImNoZXZyb24tcmlnaHQiLDYwMDg2KSxjaGV2cm9uVXA6aCgiY2hldnJvbi11cCIsNjAwODcpLGNocm9tZUNsb3NlOmgoImNocm9tZS1jbG9zZSIsNjAwODgpLGNocm9tZU1heGltaXplOmgoImNocm9tZS1tYXhpbWl6ZSIsNjAwODkpLGNocm9tZU1pbmltaXplOmgoImNocm9tZS1taW5pbWl6ZSIsNjAwOTApLGNocm9tZVJlc3RvcmU6aCgiY2hyb21lLXJlc3RvcmUiLDYwMDkxKSxjaXJjbGVPdXRsaW5lOmgoImNpcmNsZS1vdXRsaW5lIiw2MDA5MiksY2lyY2xlOmgoImNpcmNsZSIsNjAwOTIpLGRlYnVnQnJlYWtwb2ludFVudmVyaWZpZWQ6aCgiZGVidWctYnJlYWtwb2ludC11bnZlcmlmaWVkIiw2MDA5MiksdGVybWluYWxEZWNvcmF0aW9uSW5jb21wbGV0ZTpoKCJ0ZXJtaW5hbC1kZWNvcmF0aW9uLWluY29tcGxldGUiLDYwMDkyKSxjaXJjbGVTbGFzaDpoKCJjaXJjbGUtc2xhc2giLDYwMDkzKSxjaXJjdWl0Qm9hcmQ6aCgiY2lyY3VpdC1ib2FyZCIsNjAwOTQpLGNsZWFyQWxsOmgoImNsZWFyLWFsbCIsNjAwOTUpLGNsaXBweTpoKCJjbGlwcHkiLDYwMDk2KSxjbG9zZUFsbDpoKCJjbG9zZS1hbGwiLDYwMDk3KSxjbG91ZERvd25sb2FkOmgoImNsb3VkLWRvd25sb2FkIiw2MDA5OCksY2xvdWRVcGxvYWQ6aCgiY2xvdWQtdXBsb2FkIiw2MDA5OSksY29kZTpoKCJjb2RlIiw2MDEwMCksY29sbGFwc2VBbGw6aCgiY29sbGFwc2UtYWxsIiw2MDEwMSksY29sb3JNb2RlOmgoImNvbG9yLW1vZGUiLDYwMTAyKSxjb21tZW50RGlzY3Vzc2lvbjpoKCJjb21tZW50LWRpc2N1c3Npb24iLDYwMTAzKSxjcmVkaXRDYXJkOmgoImNyZWRpdC1jYXJkIiw2MDEwNSksZGFzaDpoKCJkYXNoIiw2MDEwOCksZGFzaGJvYXJkOmgoImRhc2hib2FyZCIsNjAxMDkpLGRhdGFiYXNlOmgoImRhdGFiYXNlIiw2MDExMCksZGVidWdDb250aW51ZTpoKCJkZWJ1Zy1jb250aW51ZSIsNjAxMTEpLGRlYnVnRGlzY29ubmVjdDpoKCJkZWJ1Zy1kaXNjb25uZWN0Iiw2MDExMiksZGVidWdQYXVzZTpoKCJkZWJ1Zy1wYXVzZSIsNjAxMTMpLGRlYnVnUmVzdGFydDpoKCJkZWJ1Zy1yZXN0YXJ0Iiw2MDExNCksZGVidWdTdGFydDpoKCJkZWJ1Zy1zdGFydCIsNjAxMTUpLGRlYnVnU3RlcEludG86aCgiZGVidWctc3RlcC1pbnRvIiw2MDExNiksZGVidWdTdGVwT3V0OmgoImRlYnVnLXN0ZXAtb3V0Iiw2MDExNyksZGVidWdTdGVwT3ZlcjpoKCJkZWJ1Zy1zdGVwLW92ZXIiLDYwMTE4KSxkZWJ1Z1N0b3A6aCgiZGVidWctc3RvcCIsNjAxMTkpLGRlYnVnOmgoImRlYnVnIiw2MDEyMCksZGV2aWNlQ2FtZXJhVmlkZW86aCgiZGV2aWNlLWNhbWVyYS12aWRlbyIsNjAxMjEpLGRldmljZUNhbWVyYTpoKCJkZXZpY2UtY2FtZXJhIiw2MDEyMiksZGV2aWNlTW9iaWxlOmgoImRldmljZS1tb2JpbGUiLDYwMTIzKSxkaWZmQWRkZWQ6aCgiZGlmZi1hZGRlZCIsNjAxMjQpLGRpZmZJZ25vcmVkOmgoImRpZmYtaWdub3JlZCIsNjAxMjUpLGRpZmZNb2RpZmllZDpoKCJkaWZmLW1vZGlmaWVkIiw2MDEyNiksZGlmZlJlbW92ZWQ6aCgiZGlmZi1yZW1vdmVkIiw2MDEyNyksZGlmZlJlbmFtZWQ6aCgiZGlmZi1yZW5hbWVkIiw2MDEyOCksZGlmZjpoKCJkaWZmIiw2MDEyOSksZGlmZlNpZGVieXNpZGU6aCgiZGlmZi1zaWRlYnlzaWRlIiw2MDEyOSksZGlzY2FyZDpoKCJkaXNjYXJkIiw2MDEzMCksZWRpdG9yTGF5b3V0OmgoImVkaXRvci1sYXlvdXQiLDYwMTMxKSxlbXB0eVdpbmRvdzpoKCJlbXB0eS13aW5kb3ciLDYwMTMyKSxleGNsdWRlOmgoImV4Y2x1ZGUiLDYwMTMzKSxleHRlbnNpb25zOmgoImV4dGVuc2lvbnMiLDYwMTM0KSxleWVDbG9zZWQ6aCgiZXllLWNsb3NlZCIsNjAxMzUpLGZpbGVCaW5hcnk6aCgiZmlsZS1iaW5hcnkiLDYwMTM2KSxmaWxlQ29kZTpoKCJmaWxlLWNvZGUiLDYwMTM3KSxmaWxlTWVkaWE6aCgiZmlsZS1tZWRpYSIsNjAxMzgpLGZpbGVQZGY6aCgiZmlsZS1wZGYiLDYwMTM5KSxmaWxlU3VibW9kdWxlOmgoImZpbGUtc3VibW9kdWxlIiw2MDE0MCksZmlsZVN5bWxpbmtEaXJlY3Rvcnk6aCgiZmlsZS1zeW1saW5rLWRpcmVjdG9yeSIsNjAxNDEpLGZpbGVTeW1saW5rRmlsZTpoKCJmaWxlLXN5bWxpbmstZmlsZSIsNjAxNDIpLGZpbGVaaXA6aCgiZmlsZS16aXAiLDYwMTQzKSxmaWxlczpoKCJmaWxlcyIsNjAxNDQpLGZpbHRlcjpoKCJmaWx0ZXIiLDYwMTQ1KSxmbGFtZTpoKCJmbGFtZSIsNjAxNDYpLGZvbGREb3duOmgoImZvbGQtZG93biIsNjAxNDcpLGZvbGRVcDpoKCJmb2xkLXVwIiw2MDE0OCksZm9sZDpoKCJmb2xkIiw2MDE0OSksZm9sZGVyQWN0aXZlOmgoImZvbGRlci1hY3RpdmUiLDYwMTUwKSxmb2xkZXJPcGVuZWQ6aCgiZm9sZGVyLW9wZW5lZCIsNjAxNTEpLGdlYXI6aCgiZ2VhciIsNjAxNTIpLGdpZnQ6aCgiZ2lmdCIsNjAxNTMpLGdpc3RTZWNyZXQ6aCgiZ2lzdC1zZWNyZXQiLDYwMTU0KSxnaXN0OmgoImdpc3QiLDYwMTU1KSxnaXRDb21taXQ6aCgiZ2l0LWNvbW1pdCIsNjAxNTYpLGdpdENvbXBhcmU6aCgiZ2l0LWNvbXBhcmUiLDYwMTU3KSxjb21wYXJlQ2hhbmdlczpoKCJjb21wYXJlLWNoYW5nZXMiLDYwMTU3KSxnaXRNZXJnZTpoKCJnaXQtbWVyZ2UiLDYwMTU4KSxnaXRodWJBY3Rpb246aCgiZ2l0aHViLWFjdGlvbiIsNjAxNTkpLGdpdGh1YkFsdDpoKCJnaXRodWItYWx0Iiw2MDE2MCksZ2xvYmU6aCgiZ2xvYmUiLDYwMTYxKSxncmFiYmVyOmgoImdyYWJiZXIiLDYwMTYyKSxncmFwaDpoKCJncmFwaCIsNjAxNjMpLGdyaXBwZXI6aCgiZ3JpcHBlciIsNjAxNjQpLGhlYXJ0OmgoImhlYXJ0Iiw2MDE2NSksaG9tZTpoKCJob21lIiw2MDE2NiksaG9yaXpvbnRhbFJ1bGU6aCgiaG9yaXpvbnRhbC1ydWxlIiw2MDE2NyksaHVib3Q6aCgiaHVib3QiLDYwMTY4KSxpbmJveDpoKCJpbmJveCIsNjAxNjkpLGlzc3VlUmVvcGVuZWQ6aCgiaXNzdWUtcmVvcGVuZWQiLDYwMTcxKSxpc3N1ZXM6aCgiaXNzdWVzIiw2MDE3MiksaXRhbGljOmgoIml0YWxpYyIsNjAxNzMpLGplcnNleTpoKCJqZXJzZXkiLDYwMTc0KSxqc29uOmgoImpzb24iLDYwMTc1KSxrZWJhYlZlcnRpY2FsOmgoImtlYmFiLXZlcnRpY2FsIiw2MDE3Niksa2V5OmgoImtleSIsNjAxNzcpLGxhdzpoKCJsYXciLDYwMTc4KSxsaWdodGJ1bGJBdXRvZml4OmgoImxpZ2h0YnVsYi1hdXRvZml4Iiw2MDE3OSksbGlua0V4dGVybmFsOmgoImxpbmstZXh0ZXJuYWwiLDYwMTgwKSxsaW5rOmgoImxpbmsiLDYwMTgxKSxsaXN0T3JkZXJlZDpoKCJsaXN0LW9yZGVyZWQiLDYwMTgyKSxsaXN0VW5vcmRlcmVkOmgoImxpc3QtdW5vcmRlcmVkIiw2MDE4MyksbGl2ZVNoYXJlOmgoImxpdmUtc2hhcmUiLDYwMTg0KSxsb2FkaW5nOmgoImxvYWRpbmciLDYwMTg1KSxsb2NhdGlvbjpoKCJsb2NhdGlvbiIsNjAxODYpLG1haWxSZWFkOmgoIm1haWwtcmVhZCIsNjAxODcpLG1haWw6aCgibWFpbCIsNjAxODgpLG1hcmtkb3duOmgoIm1hcmtkb3duIiw2MDE4OSksbWVnYXBob25lOmgoIm1lZ2FwaG9uZSIsNjAxOTApLG1lbnRpb246aCgibWVudGlvbiIsNjAxOTEpLG1pbGVzdG9uZTpoKCJtaWxlc3RvbmUiLDYwMTkyKSxnaXRQdWxsUmVxdWVzdE1pbGVzdG9uZTpoKCJnaXQtcHVsbC1yZXF1ZXN0LW1pbGVzdG9uZSIsNjAxOTIpLG1vcnRhckJvYXJkOmgoIm1vcnRhci1ib2FyZCIsNjAxOTMpLG1vdmU6aCgibW92ZSIsNjAxOTQpLG11bHRpcGxlV2luZG93czpoKCJtdWx0aXBsZS13aW5kb3dzIiw2MDE5NSksbXV0ZTpoKCJtdXRlIiw2MDE5Niksbm9OZXdsaW5lOmgoIm5vLW5ld2xpbmUiLDYwMTk3KSxub3RlOmgoIm5vdGUiLDYwMTk4KSxvY3RvZmFjZTpoKCJvY3RvZmFjZSIsNjAxOTkpLG9wZW5QcmV2aWV3OmgoIm9wZW4tcHJldmlldyIsNjAyMDApLHBhY2thZ2U6aCgicGFja2FnZSIsNjAyMDEpLHBhaW50Y2FuOmgoInBhaW50Y2FuIiw2MDIwMikscGluOmgoInBpbiIsNjAyMDMpLHBsYXk6aCgicGxheSIsNjAyMDQpLHJ1bjpoKCJydW4iLDYwMjA0KSxwbHVnOmgoInBsdWciLDYwMjA1KSxwcmVzZXJ2ZUNhc2U6aCgicHJlc2VydmUtY2FzZSIsNjAyMDYpLHByZXZpZXc6aCgicHJldmlldyIsNjAyMDcpLHByb2plY3Q6aCgicHJvamVjdCIsNjAyMDgpLHB1bHNlOmgoInB1bHNlIiw2MDIwOSkscXVlc3Rpb246aCgicXVlc3Rpb24iLDYwMjEwKSxxdW90ZTpoKCJxdW90ZSIsNjAyMTEpLHJhZGlvVG93ZXI6aCgicmFkaW8tdG93ZXIiLDYwMjEyKSxyZWFjdGlvbnM6aCgicmVhY3Rpb25zIiw2MDIxMykscmVmZXJlbmNlczpoKCJyZWZlcmVuY2VzIiw2MDIxNCkscmVmcmVzaDpoKCJyZWZyZXNoIiw2MDIxNSkscmVnZXg6aCgicmVnZXgiLDYwMjE2KSxyZW1vdGVFeHBsb3JlcjpoKCJyZW1vdGUtZXhwbG9yZXIiLDYwMjE3KSxyZW1vdGU6aCgicmVtb3RlIiw2MDIxOCkscmVtb3ZlOmgoInJlbW92ZSIsNjAyMTkpLHJlcGxhY2VBbGw6aCgicmVwbGFjZS1hbGwiLDYwMjIwKSxyZXBsYWNlOmgoInJlcGxhY2UiLDYwMjIxKSxyZXBvQ2xvbmU6aCgicmVwby1jbG9uZSIsNjAyMjIpLHJlcG9Gb3JjZVB1c2g6aCgicmVwby1mb3JjZS1wdXNoIiw2MDIyMykscmVwb1B1bGw6aCgicmVwby1wdWxsIiw2MDIyNCkscmVwb1B1c2g6aCgicmVwby1wdXNoIiw2MDIyNSkscmVwb3J0OmgoInJlcG9ydCIsNjAyMjYpLHJlcXVlc3RDaGFuZ2VzOmgoInJlcXVlc3QtY2hhbmdlcyIsNjAyMjcpLHJvY2tldDpoKCJyb2NrZXQiLDYwMjI4KSxyb290Rm9sZGVyT3BlbmVkOmgoInJvb3QtZm9sZGVyLW9wZW5lZCIsNjAyMjkpLHJvb3RGb2xkZXI6aCgicm9vdC1mb2xkZXIiLDYwMjMwKSxyc3M6aCgicnNzIiw2MDIzMSkscnVieTpoKCJydWJ5Iiw2MDIzMiksc2F2ZUFsbDpoKCJzYXZlLWFsbCIsNjAyMzMpLHNhdmVBczpoKCJzYXZlLWFzIiw2MDIzNCksc2F2ZTpoKCJzYXZlIiw2MDIzNSksc2NyZWVuRnVsbDpoKCJzY3JlZW4tZnVsbCIsNjAyMzYpLHNjcmVlbk5vcm1hbDpoKCJzY3JlZW4tbm9ybWFsIiw2MDIzNyksc2VhcmNoU3RvcDpoKCJzZWFyY2gtc3RvcCIsNjAyMzgpLHNlcnZlcjpoKCJzZXJ2ZXIiLDYwMjQwKSxzZXR0aW5nc0dlYXI6aCgic2V0dGluZ3MtZ2VhciIsNjAyNDEpLHNldHRpbmdzOmgoInNldHRpbmdzIiw2MDI0Miksc2hpZWxkOmgoInNoaWVsZCIsNjAyNDMpLHNtaWxleTpoKCJzbWlsZXkiLDYwMjQ0KSxzb3J0UHJlY2VkZW5jZTpoKCJzb3J0LXByZWNlZGVuY2UiLDYwMjQ1KSxzcGxpdEhvcml6b250YWw6aCgic3BsaXQtaG9yaXpvbnRhbCIsNjAyNDYpLHNwbGl0VmVydGljYWw6aCgic3BsaXQtdmVydGljYWwiLDYwMjQ3KSxzcXVpcnJlbDpoKCJzcXVpcnJlbCIsNjAyNDgpLHN0YXJGdWxsOmgoInN0YXItZnVsbCIsNjAyNDkpLHN0YXJIYWxmOmgoInN0YXItaGFsZiIsNjAyNTApLHN5bWJvbENsYXNzOmgoInN5bWJvbC1jbGFzcyIsNjAyNTEpLHN5bWJvbENvbG9yOmgoInN5bWJvbC1jb2xvciIsNjAyNTIpLHN5bWJvbENvbnN0YW50OmgoInN5bWJvbC1jb25zdGFudCIsNjAyNTMpLHN5bWJvbEVudW1NZW1iZXI6aCgic3ltYm9sLWVudW0tbWVtYmVyIiw2MDI1NCksc3ltYm9sRmllbGQ6aCgic3ltYm9sLWZpZWxkIiw2MDI1NSksc3ltYm9sRmlsZTpoKCJzeW1ib2wtZmlsZSIsNjAyNTYpLHN5bWJvbEludGVyZmFjZTpoKCJzeW1ib2wtaW50ZXJmYWNlIiw2MDI1Nyksc3ltYm9sS2V5d29yZDpoKCJzeW1ib2wta2V5d29yZCIsNjAyNTgpLHN5bWJvbE1pc2M6aCgic3ltYm9sLW1pc2MiLDYwMjU5KSxzeW1ib2xPcGVyYXRvcjpoKCJzeW1ib2wtb3BlcmF0b3IiLDYwMjYwKSxzeW1ib2xQcm9wZXJ0eTpoKCJzeW1ib2wtcHJvcGVydHkiLDYwMjYxKSx3cmVuY2g6aCgid3JlbmNoIiw2MDI2MSksd3JlbmNoU3ViYWN0aW9uOmgoIndyZW5jaC1zdWJhY3Rpb24iLDYwMjYxKSxzeW1ib2xTbmlwcGV0OmgoInN5bWJvbC1zbmlwcGV0Iiw2MDI2MiksdGFza2xpc3Q6aCgidGFza2xpc3QiLDYwMjYzKSx0ZWxlc2NvcGU6aCgidGVsZXNjb3BlIiw2MDI2NCksdGV4dFNpemU6aCgidGV4dC1zaXplIiw2MDI2NSksdGhyZWVCYXJzOmgoInRocmVlLWJhcnMiLDYwMjY2KSx0aHVtYnNkb3duOmgoInRodW1ic2Rvd24iLDYwMjY3KSx0aHVtYnN1cDpoKCJ0aHVtYnN1cCIsNjAyNjgpLHRvb2xzOmgoInRvb2xzIiw2MDI2OSksdHJpYW5nbGVEb3duOmgoInRyaWFuZ2xlLWRvd24iLDYwMjcwKSx0cmlhbmdsZUxlZnQ6aCgidHJpYW5nbGUtbGVmdCIsNjAyNzEpLHRyaWFuZ2xlUmlnaHQ6aCgidHJpYW5nbGUtcmlnaHQiLDYwMjcyKSx0cmlhbmdsZVVwOmgoInRyaWFuZ2xlLXVwIiw2MDI3MyksdHdpdHRlcjpoKCJ0d2l0dGVyIiw2MDI3NCksdW5mb2xkOmgoInVuZm9sZCIsNjAyNzUpLHVubG9jazpoKCJ1bmxvY2siLDYwMjc2KSx1bm11dGU6aCgidW5tdXRlIiw2MDI3NyksdW52ZXJpZmllZDpoKCJ1bnZlcmlmaWVkIiw2MDI3OCksdmVyaWZpZWQ6aCgidmVyaWZpZWQiLDYwMjc5KSx2ZXJzaW9uczpoKCJ2ZXJzaW9ucyIsNjAyODApLHZtQWN0aXZlOmgoInZtLWFjdGl2ZSIsNjAyODEpLHZtT3V0bGluZTpoKCJ2bS1vdXRsaW5lIiw2MDI4Miksdm1SdW5uaW5nOmgoInZtLXJ1bm5pbmciLDYwMjgzKSx3YXRjaDpoKCJ3YXRjaCIsNjAyODQpLHdoaXRlc3BhY2U6aCgid2hpdGVzcGFjZSIsNjAyODUpLHdob2xlV29yZDpoKCJ3aG9sZS13b3JkIiw2MDI4Niksd2luZG93OmgoIndpbmRvdyIsNjAyODcpLHdvcmRXcmFwOmgoIndvcmQtd3JhcCIsNjAyODgpLHpvb21JbjpoKCJ6b29tLWluIiw2MDI4OSksem9vbU91dDpoKCJ6b29tLW91dCIsNjAyOTApLGxpc3RGaWx0ZXI6aCgibGlzdC1maWx0ZXIiLDYwMjkxKSxsaXN0RmxhdDpoKCJsaXN0LWZsYXQiLDYwMjkyKSxsaXN0U2VsZWN0aW9uOmgoImxpc3Qtc2VsZWN0aW9uIiw2MDI5Myksc2VsZWN0aW9uOmgoInNlbGVjdGlvbiIsNjAyOTMpLGxpc3RUcmVlOmgoImxpc3QtdHJlZSIsNjAyOTQpLGRlYnVnQnJlYWtwb2ludEZ1bmN0aW9uVW52ZXJpZmllZDpoKCJkZWJ1Zy1icmVha3BvaW50LWZ1bmN0aW9uLXVudmVyaWZpZWQiLDYwMjk1KSxkZWJ1Z0JyZWFrcG9pbnRGdW5jdGlvbjpoKCJkZWJ1Zy1icmVha3BvaW50LWZ1bmN0aW9uIiw2MDI5NiksZGVidWdCcmVha3BvaW50RnVuY3Rpb25EaXNhYmxlZDpoKCJkZWJ1Zy1icmVha3BvaW50LWZ1bmN0aW9uLWRpc2FibGVkIiw2MDI5NiksZGVidWdTdGFja2ZyYW1lQWN0aXZlOmgoImRlYnVnLXN0YWNrZnJhbWUtYWN0aXZlIiw2MDI5NyksY2lyY2xlU21hbGxGaWxsZWQ6aCgiY2lyY2xlLXNtYWxsLWZpbGxlZCIsNjAyOTgpLGRlYnVnU3RhY2tmcmFtZURvdDpoKCJkZWJ1Zy1zdGFja2ZyYW1lLWRvdCIsNjAyOTgpLHRlcm1pbmFsRGVjb3JhdGlvbk1hcms6aCgidGVybWluYWwtZGVjb3JhdGlvbi1tYXJrIiw2MDI5OCksZGVidWdTdGFja2ZyYW1lOmgoImRlYnVnLXN0YWNrZnJhbWUiLDYwMjk5KSxkZWJ1Z1N0YWNrZnJhbWVGb2N1c2VkOmgoImRlYnVnLXN0YWNrZnJhbWUtZm9jdXNlZCIsNjAyOTkpLGRlYnVnQnJlYWtwb2ludFVuc3VwcG9ydGVkOmgoImRlYnVnLWJyZWFrcG9pbnQtdW5zdXBwb3J0ZWQiLDYwMzAwKSxzeW1ib2xTdHJpbmc6aCgic3ltYm9sLXN0cmluZyIsNjAzMDEpLGRlYnVnUmV2ZXJzZUNvbnRpbnVlOmgoImRlYnVnLXJldmVyc2UtY29udGludWUiLDYwMzAyKSxkZWJ1Z1N0ZXBCYWNrOmgoImRlYnVnLXN0ZXAtYmFjayIsNjAzMDMpLGRlYnVnUmVzdGFydEZyYW1lOmgoImRlYnVnLXJlc3RhcnQtZnJhbWUiLDYwMzA0KSxkZWJ1Z0FsdDpoKCJkZWJ1Zy1hbHQiLDYwMzA1KSxjYWxsSW5jb21pbmc6aCgiY2FsbC1pbmNvbWluZyIsNjAzMDYpLGNhbGxPdXRnb2luZzpoKCJjYWxsLW91dGdvaW5nIiw2MDMwNyksbWVudTpoKCJtZW51Iiw2MDMwOCksZXhwYW5kQWxsOmgoImV4cGFuZC1hbGwiLDYwMzA5KSxmZWVkYmFjazpoKCJmZWVkYmFjayIsNjAzMTApLGdpdFB1bGxSZXF1ZXN0UmV2aWV3ZXI6aCgiZ2l0LXB1bGwtcmVxdWVzdC1yZXZpZXdlciIsNjAzMTApLGdyb3VwQnlSZWZUeXBlOmgoImdyb3VwLWJ5LXJlZi10eXBlIiw2MDMxMSksdW5ncm91cEJ5UmVmVHlwZTpoKCJ1bmdyb3VwLWJ5LXJlZi10eXBlIiw2MDMxMiksYWNjb3VudDpoKCJhY2NvdW50Iiw2MDMxMyksZ2l0UHVsbFJlcXVlc3RBc3NpZ25lZTpoKCJnaXQtcHVsbC1yZXF1ZXN0LWFzc2lnbmVlIiw2MDMxMyksYmVsbERvdDpoKCJiZWxsLWRvdCIsNjAzMTQpLGRlYnVnQ29uc29sZTpoKCJkZWJ1Zy1jb25zb2xlIiw2MDMxNSksbGlicmFyeTpoKCJsaWJyYXJ5Iiw2MDMxNiksb3V0cHV0OmgoIm91dHB1dCIsNjAzMTcpLHJ1bkFsbDpoKCJydW4tYWxsIiw2MDMxOCksc3luY0lnbm9yZWQ6aCgic3luYy1pZ25vcmVkIiw2MDMxOSkscGlubmVkOmgoInBpbm5lZCIsNjAzMjApLGdpdGh1YkludmVydGVkOmgoImdpdGh1Yi1pbnZlcnRlZCIsNjAzMjEpLHNlcnZlclByb2Nlc3M6aCgic2VydmVyLXByb2Nlc3MiLDYwMzIyKSxzZXJ2ZXJFbnZpcm9ubWVudDpoKCJzZXJ2ZXItZW52aXJvbm1lbnQiLDYwMzIzKSxwYXNzOmgoInBhc3MiLDYwMzI0KSxpc3N1ZUNsb3NlZDpoKCJpc3N1ZS1jbG9zZWQiLDYwMzI0KSxzdG9wQ2lyY2xlOmgoInN0b3AtY2lyY2xlIiw2MDMyNSkscGxheUNpcmNsZTpoKCJwbGF5LWNpcmNsZSIsNjAzMjYpLHJlY29yZDpoKCJyZWNvcmQiLDYwMzI3KSxkZWJ1Z0FsdFNtYWxsOmgoImRlYnVnLWFsdC1zbWFsbCIsNjAzMjgpLHZtQ29ubmVjdDpoKCJ2bS1jb25uZWN0Iiw2MDMyOSksY2xvdWQ6aCgiY2xvdWQiLDYwMzMwKSxtZXJnZTpoKCJtZXJnZSIsNjAzMzEpLGV4cG9ydDpoKCJleHBvcnQiLDYwMzMyKSxncmFwaExlZnQ6aCgiZ3JhcGgtbGVmdCIsNjAzMzMpLG1hZ25ldDpoKCJtYWduZXQiLDYwMzM0KSxub3RlYm9vazpoKCJub3RlYm9vayIsNjAzMzUpLHJlZG86aCgicmVkbyIsNjAzMzYpLGNoZWNrQWxsOmgoImNoZWNrLWFsbCIsNjAzMzcpLHBpbm5lZERpcnR5OmgoInBpbm5lZC1kaXJ0eSIsNjAzMzgpLHBhc3NGaWxsZWQ6aCgicGFzcy1maWxsZWQiLDYwMzM5KSxjaXJjbGVMYXJnZUZpbGxlZDpoKCJjaXJjbGUtbGFyZ2UtZmlsbGVkIiw2MDM0MCksY2lyY2xlTGFyZ2U6aCgiY2lyY2xlLWxhcmdlIiw2MDM0MSksY2lyY2xlTGFyZ2VPdXRsaW5lOmgoImNpcmNsZS1sYXJnZS1vdXRsaW5lIiw2MDM0MSksY29tYmluZTpoKCJjb21iaW5lIiw2MDM0MiksZ2F0aGVyOmgoImdhdGhlciIsNjAzNDIpLHRhYmxlOmgoInRhYmxlIiw2MDM0MyksdmFyaWFibGVHcm91cDpoKCJ2YXJpYWJsZS1ncm91cCIsNjAzNDQpLHR5cGVIaWVyYXJjaHk6aCgidHlwZS1oaWVyYXJjaHkiLDYwMzQ1KSx0eXBlSGllcmFyY2h5U3ViOmgoInR5cGUtaGllcmFyY2h5LXN1YiIsNjAzNDYpLHR5cGVIaWVyYXJjaHlTdXBlcjpoKCJ0eXBlLWhpZXJhcmNoeS1zdXBlciIsNjAzNDcpLGdpdFB1bGxSZXF1ZXN0Q3JlYXRlOmgoImdpdC1wdWxsLXJlcXVlc3QtY3JlYXRlIiw2MDM0OCkscnVuQWJvdmU6aCgicnVuLWFib3ZlIiw2MDM0OSkscnVuQmVsb3c6aCgicnVuLWJlbG93Iiw2MDM1MCksbm90ZWJvb2tUZW1wbGF0ZTpoKCJub3RlYm9vay10ZW1wbGF0ZSIsNjAzNTEpLGRlYnVnUmVydW46aCgiZGVidWctcmVydW4iLDYwMzUyKSx3b3Jrc3BhY2VUcnVzdGVkOmgoIndvcmtzcGFjZS10cnVzdGVkIiw2MDM1Myksd29ya3NwYWNlVW50cnVzdGVkOmgoIndvcmtzcGFjZS11bnRydXN0ZWQiLDYwMzU0KSx3b3Jrc3BhY2VVbmtub3duOmgoIndvcmtzcGFjZS11bmtub3duIiw2MDM1NSksdGVybWluYWxDbWQ6aCgidGVybWluYWwtY21kIiw2MDM1NiksdGVybWluYWxEZWJpYW46aCgidGVybWluYWwtZGViaWFuIiw2MDM1NyksdGVybWluYWxMaW51eDpoKCJ0ZXJtaW5hbC1saW51eCIsNjAzNTgpLHRlcm1pbmFsUG93ZXJzaGVsbDpoKCJ0ZXJtaW5hbC1wb3dlcnNoZWxsIiw2MDM1OSksdGVybWluYWxUbXV4OmgoInRlcm1pbmFsLXRtdXgiLDYwMzYwKSx0ZXJtaW5hbFVidW50dTpoKCJ0ZXJtaW5hbC11YnVudHUiLDYwMzYxKSx0ZXJtaW5hbEJhc2g6aCgidGVybWluYWwtYmFzaCIsNjAzNjIpLGFycm93U3dhcDpoKCJhcnJvdy1zd2FwIiw2MDM2MyksY29weTpoKCJjb3B5Iiw2MDM2NCkscGVyc29uQWRkOmgoInBlcnNvbi1hZGQiLDYwMzY1KSxmaWx0ZXJGaWxsZWQ6aCgiZmlsdGVyLWZpbGxlZCIsNjAzNjYpLHdhbmQ6aCgid2FuZCIsNjAzNjcpLGRlYnVnTGluZUJ5TGluZTpoKCJkZWJ1Zy1saW5lLWJ5LWxpbmUiLDYwMzY4KSxpbnNwZWN0OmgoImluc3BlY3QiLDYwMzY5KSxsYXllcnM6aCgibGF5ZXJzIiw2MDM3MCksbGF5ZXJzRG90OmgoImxheWVycy1kb3QiLDYwMzcxKSxsYXllcnNBY3RpdmU6aCgibGF5ZXJzLWFjdGl2ZSIsNjAzNzIpLGNvbXBhc3M6aCgiY29tcGFzcyIsNjAzNzMpLGNvbXBhc3NEb3Q6aCgiY29tcGFzcy1kb3QiLDYwMzc0KSxjb21wYXNzQWN0aXZlOmgoImNvbXBhc3MtYWN0aXZlIiw2MDM3NSksYXp1cmU6aCgiYXp1cmUiLDYwMzc2KSxpc3N1ZURyYWZ0OmgoImlzc3VlLWRyYWZ0Iiw2MDM3NyksZ2l0UHVsbFJlcXVlc3RDbG9zZWQ6aCgiZ2l0LXB1bGwtcmVxdWVzdC1jbG9zZWQiLDYwMzc4KSxnaXRQdWxsUmVxdWVzdERyYWZ0OmgoImdpdC1wdWxsLXJlcXVlc3QtZHJhZnQiLDYwMzc5KSxkZWJ1Z0FsbDpoKCJkZWJ1Zy1hbGwiLDYwMzgwKSxkZWJ1Z0NvdmVyYWdlOmgoImRlYnVnLWNvdmVyYWdlIiw2MDM4MSkscnVuRXJyb3JzOmgoInJ1bi1lcnJvcnMiLDYwMzgyKSxmb2xkZXJMaWJyYXJ5OmgoImZvbGRlci1saWJyYXJ5Iiw2MDM4MyksZGVidWdDb250aW51ZVNtYWxsOmgoImRlYnVnLWNvbnRpbnVlLXNtYWxsIiw2MDM4NCksYmVha2VyU3RvcDpoKCJiZWFrZXItc3RvcCIsNjAzODUpLGdyYXBoTGluZTpoKCJncmFwaC1saW5lIiw2MDM4NiksZ3JhcGhTY2F0dGVyOmgoImdyYXBoLXNjYXR0ZXIiLDYwMzg3KSxwaWVDaGFydDpoKCJwaWUtY2hhcnQiLDYwMzg4KSxicmFja2V0OmgoImJyYWNrZXQiLDYwMTc1KSxicmFja2V0RG90OmgoImJyYWNrZXQtZG90Iiw2MDM4OSksYnJhY2tldEVycm9yOmgoImJyYWNrZXQtZXJyb3IiLDYwMzkwKSxsb2NrU21hbGw6aCgibG9jay1zbWFsbCIsNjAzOTEpLGF6dXJlRGV2b3BzOmgoImF6dXJlLWRldm9wcyIsNjAzOTIpLHZlcmlmaWVkRmlsbGVkOmgoInZlcmlmaWVkLWZpbGxlZCIsNjAzOTMpLG5ld2xpbmU6aCgibmV3bGluZSIsNjAzOTQpLGxheW91dDpoKCJsYXlvdXQiLDYwMzk1KSxsYXlvdXRBY3Rpdml0eWJhckxlZnQ6aCgibGF5b3V0LWFjdGl2aXR5YmFyLWxlZnQiLDYwMzk2KSxsYXlvdXRBY3Rpdml0eWJhclJpZ2h0OmgoImxheW91dC1hY3Rpdml0eWJhci1yaWdodCIsNjAzOTcpLGxheW91dFBhbmVsTGVmdDpoKCJsYXlvdXQtcGFuZWwtbGVmdCIsNjAzOTgpLGxheW91dFBhbmVsQ2VudGVyOmgoImxheW91dC1wYW5lbC1jZW50ZXIiLDYwMzk5KSxsYXlvdXRQYW5lbEp1c3RpZnk6aCgibGF5b3V0LXBhbmVsLWp1c3RpZnkiLDYwNDAwKSxsYXlvdXRQYW5lbFJpZ2h0OmgoImxheW91dC1wYW5lbC1yaWdodCIsNjA0MDEpLGxheW91dFBhbmVsOmgoImxheW91dC1wYW5lbCIsNjA0MDIpLGxheW91dFNpZGViYXJMZWZ0OmgoImxheW91dC1zaWRlYmFyLWxlZnQiLDYwNDAzKSxsYXlvdXRTaWRlYmFyUmlnaHQ6aCgibGF5b3V0LXNpZGViYXItcmlnaHQiLDYwNDA0KSxsYXlvdXRTdGF0dXNiYXI6aCgibGF5b3V0LXN0YXR1c2JhciIsNjA0MDUpLGxheW91dE1lbnViYXI6aCgibGF5b3V0LW1lbnViYXIiLDYwNDA2KSxsYXlvdXRDZW50ZXJlZDpoKCJsYXlvdXQtY2VudGVyZWQiLDYwNDA3KSx0YXJnZXQ6aCgidGFyZ2V0Iiw2MDQwOCksaW5kZW50OmgoImluZGVudCIsNjA0MDkpLHJlY29yZFNtYWxsOmgoInJlY29yZC1zbWFsbCIsNjA0MTApLGVycm9yU21hbGw6aCgiZXJyb3Itc21hbGwiLDYwNDExKSx0ZXJtaW5hbERlY29yYXRpb25FcnJvcjpoKCJ0ZXJtaW5hbC1kZWNvcmF0aW9uLWVycm9yIiw2MDQxMSksYXJyb3dDaXJjbGVEb3duOmgoImFycm93LWNpcmNsZS1kb3duIiw2MDQxMiksYXJyb3dDaXJjbGVMZWZ0OmgoImFycm93LWNpcmNsZS1sZWZ0Iiw2MDQxMyksYXJyb3dDaXJjbGVSaWdodDpoKCJhcnJvdy1jaXJjbGUtcmlnaHQiLDYwNDE0KSxhcnJvd0NpcmNsZVVwOmgoImFycm93LWNpcmNsZS11cCIsNjA0MTUpLGxheW91dFNpZGViYXJSaWdodE9mZjpoKCJsYXlvdXQtc2lkZWJhci1yaWdodC1vZmYiLDYwNDE2KSxsYXlvdXRQYW5lbE9mZjpoKCJsYXlvdXQtcGFuZWwtb2ZmIiw2MDQxNyksbGF5b3V0U2lkZWJhckxlZnRPZmY6aCgibGF5b3V0LXNpZGViYXItbGVmdC1vZmYiLDYwNDE4KSxibGFuazpoKCJibGFuayIsNjA0MTkpLGhlYXJ0RmlsbGVkOmgoImhlYXJ0LWZpbGxlZCIsNjA0MjApLG1hcDpoKCJtYXAiLDYwNDIxKSxtYXBIb3Jpem9udGFsOmgoIm1hcC1ob3Jpem9udGFsIiw2MDQyMSksZm9sZEhvcml6b250YWw6aCgiZm9sZC1ob3Jpem9udGFsIiw2MDQyMSksbWFwRmlsbGVkOmgoIm1hcC1maWxsZWQiLDYwNDIyKSxtYXBIb3Jpem9udGFsRmlsbGVkOmgoIm1hcC1ob3Jpem9udGFsLWZpbGxlZCIsNjA0MjIpLGZvbGRIb3Jpem9udGFsRmlsbGVkOmgoImZvbGQtaG9yaXpvbnRhbC1maWxsZWQiLDYwNDIyKSxjaXJjbGVTbWFsbDpoKCJjaXJjbGUtc21hbGwiLDYwNDIzKSxiZWxsU2xhc2g6aCgiYmVsbC1zbGFzaCIsNjA0MjQpLGJlbGxTbGFzaERvdDpoKCJiZWxsLXNsYXNoLWRvdCIsNjA0MjUpLGNvbW1lbnRVbnJlc29sdmVkOmgoImNvbW1lbnQtdW5yZXNvbHZlZCIsNjA0MjYpLGdpdFB1bGxSZXF1ZXN0R29Ub0NoYW5nZXM6aCgiZ2l0LXB1bGwtcmVxdWVzdC1nby10by1jaGFuZ2VzIiw2MDQyNyksZ2l0UHVsbFJlcXVlc3ROZXdDaGFuZ2VzOmgoImdpdC1wdWxsLXJlcXVlc3QtbmV3LWNoYW5nZXMiLDYwNDI4KSxzZWFyY2hGdXp6eTpoKCJzZWFyY2gtZnV6enkiLDYwNDI5KSxjb21tZW50RHJhZnQ6aCgiY29tbWVudC1kcmFmdCIsNjA0MzApLHNlbmQ6aCgic2VuZCIsNjA0MzEpLHNwYXJrbGU6aCgic3BhcmtsZSIsNjA0MzIpLGluc2VydDpoKCJpbnNlcnQiLDYwNDMzKSxtaWM6aCgibWljIiw2MDQzNCksdGh1bWJzZG93bkZpbGxlZDpoKCJ0aHVtYnNkb3duLWZpbGxlZCIsNjA0MzUpLHRodW1ic3VwRmlsbGVkOmgoInRodW1ic3VwLWZpbGxlZCIsNjA0MzYpLGNvZmZlZTpoKCJjb2ZmZWUiLDYwNDM3KSxzbmFrZTpoKCJzbmFrZSIsNjA0MzgpLGdhbWU6aCgiZ2FtZSIsNjA0MzkpLHZyOmgoInZyIiw2MDQ0MCksY2hpcDpoKCJjaGlwIiw2MDQ0MSkscGlhbm86aCgicGlhbm8iLDYwNDQyKSxtdXNpYzpoKCJtdXNpYyIsNjA0NDMpLG1pY0ZpbGxlZDpoKCJtaWMtZmlsbGVkIiw2MDQ0NCkscmVwb0ZldGNoOmgoInJlcG8tZmV0Y2giLDYwNDQ1KSxjb3BpbG90OmgoImNvcGlsb3QiLDYwNDQ2KSxsaWdodGJ1bGJTcGFya2xlOmgoImxpZ2h0YnVsYi1zcGFya2xlIiw2MDQ0Nykscm9ib3Q6aCgicm9ib3QiLDYwNDQ4KSxzcGFya2xlRmlsbGVkOmgoInNwYXJrbGUtZmlsbGVkIiw2MDQ0OSksZGlmZlNpbmdsZTpoKCJkaWZmLXNpbmdsZSIsNjA0NTApLGRpZmZNdWx0aXBsZTpoKCJkaWZmLW11bHRpcGxlIiw2MDQ1MSksc3Vycm91bmRXaXRoOmgoInN1cnJvdW5kLXdpdGgiLDYwNDUyKSxzaGFyZTpoKCJzaGFyZSIsNjA0NTMpLGdpdFN0YXNoOmgoImdpdC1zdGFzaCIsNjA0NTQpLGdpdFN0YXNoQXBwbHk6aCgiZ2l0LXN0YXNoLWFwcGx5Iiw2MDQ1NSksZ2l0U3Rhc2hQb3A6aCgiZ2l0LXN0YXNoLXBvcCIsNjA0NTYpLHZzY29kZTpoKCJ2c2NvZGUiLDYwNDU3KSx2c2NvZGVJbnNpZGVyczpoKCJ2c2NvZGUtaW5zaWRlcnMiLDYwNDU4KSxjb2RlT3NzOmgoImNvZGUtb3NzIiw2MDQ1OSkscnVuQ292ZXJhZ2U6aCgicnVuLWNvdmVyYWdlIiw2MDQ2MCkscnVuQWxsQ292ZXJhZ2U6aCgicnVuLWFsbC1jb3ZlcmFnZSIsNjA0NjEpLGNvdmVyYWdlOmgoImNvdmVyYWdlIiw2MDQ2MiksZ2l0aHViUHJvamVjdDpoKCJnaXRodWItcHJvamVjdCIsNjA0NjMpLG1hcFZlcnRpY2FsOmgoIm1hcC12ZXJ0aWNhbCIsNjA0NjQpLGZvbGRWZXJ0aWNhbDpoKCJmb2xkLXZlcnRpY2FsIiw2MDQ2NCksbWFwVmVydGljYWxGaWxsZWQ6aCgibWFwLXZlcnRpY2FsLWZpbGxlZCIsNjA0NjUpLGZvbGRWZXJ0aWNhbEZpbGxlZDpoKCJmb2xkLXZlcnRpY2FsLWZpbGxlZCIsNjA0NjUpLGdvVG9TZWFyY2g6aCgiZ28tdG8tc2VhcmNoIiw2MDQ2NikscGVyY2VudGFnZTpoKCJwZXJjZW50YWdlIiw2MDQ2Nyksc29ydFBlcmNlbnRhZ2U6aCgic29ydC1wZXJjZW50YWdlIiw2MDQ2NyksYXR0YWNoOmgoImF0dGFjaCIsNjA0NjgpfSxXbD17ZGlhbG9nRXJyb3I6aCgiZGlhbG9nLWVycm9yIiwiZXJyb3IiKSxkaWFsb2dXYXJuaW5nOmgoImRpYWxvZy13YXJuaW5nIiwid2FybmluZyIpLGRpYWxvZ0luZm86aCgiZGlhbG9nLWluZm8iLCJpbmZvIiksZGlhbG9nQ2xvc2U6aCgiZGlhbG9nLWNsb3NlIiwiY2xvc2UiKSx0cmVlSXRlbUV4cGFuZGVkOmgoInRyZWUtaXRlbS1leHBhbmRlZCIsImNoZXZyb24tZG93biIpLHRyZWVGaWx0ZXJPblR5cGVPbjpoKCJ0cmVlLWZpbHRlci1vbi10eXBlLW9uIiwibGlzdC1maWx0ZXIiKSx0cmVlRmlsdGVyT25UeXBlT2ZmOmgoInRyZWUtZmlsdGVyLW9uLXR5cGUtb2ZmIiwibGlzdC1zZWxlY3Rpb24iKSx0cmVlRmlsdGVyQ2xlYXI6aCgidHJlZS1maWx0ZXItY2xlYXIiLCJjbG9zZSIpLHRyZWVJdGVtTG9hZGluZzpoKCJ0cmVlLWl0ZW0tbG9hZGluZyIsImxvYWRpbmciKSxtZW51U2VsZWN0aW9uOmgoIm1lbnUtc2VsZWN0aW9uIiwiY2hlY2siKSxtZW51U3VibWVudTpoKCJtZW51LXN1Ym1lbnUiLCJjaGV2cm9uLXJpZ2h0IiksbWVudUJhck1vcmU6aCgibWVudWJhci1tb3JlIiwibW9yZSIpLHNjcm9sbGJhckJ1dHRvbkxlZnQ6aCgic2Nyb2xsYmFyLWJ1dHRvbi1sZWZ0IiwidHJpYW5nbGUtbGVmdCIpLHNjcm9sbGJhckJ1dHRvblJpZ2h0OmgoInNjcm9sbGJhci1idXR0b24tcmlnaHQiLCJ0cmlhbmdsZS1yaWdodCIpLHNjcm9sbGJhckJ1dHRvblVwOmgoInNjcm9sbGJhci1idXR0b24tdXAiLCJ0cmlhbmdsZS11cCIpLHNjcm9sbGJhckJ1dHRvbkRvd246aCgic2Nyb2xsYmFyLWJ1dHRvbi1kb3duIiwidHJpYW5nbGUtZG93biIpLHRvb2xCYXJNb3JlOmgoInRvb2xiYXItbW9yZSIsIm1vcmUiKSxxdWlja0lucHV0QmFjazpoKCJxdWljay1pbnB1dC1iYWNrIiwiYXJyb3ctbGVmdCIpLGRyb3BEb3duQnV0dG9uOmgoImRyb3AtZG93bi1idXR0b24iLDYwMDg0KSxzeW1ib2xDdXN0b21Db2xvcjpoKCJzeW1ib2wtY3VzdG9tY29sb3IiLDYwMjUyKSxleHBvcnRJY29uOmgoImV4cG9ydCIsNjAzMzIpLHdvcmtzcGFjZVVuc3BlY2lmaWVkOmgoIndvcmtzcGFjZS11bnNwZWNpZmllZCIsNjAzNTUpLG5ld0xpbmU6aCgibmV3bGluZSIsNjAzOTQpLHRodW1ic0Rvd25GaWxsZWQ6aCgidGh1bWJzZG93bi1maWxsZWQiLDYwNDM1KSx0aHVtYnNVcEZpbGxlZDpoKCJ0aHVtYnN1cC1maWxsZWQiLDYwNDM2KSxnaXRGZXRjaDpoKCJnaXQtZmV0Y2giLDYwNDQ1KSxsaWdodGJ1bGJTcGFya2xlQXV0b2ZpeDpoKCJsaWdodGJ1bGItc3BhcmtsZS1hdXRvZml4Iiw2MDQ0NyksZGVidWdCcmVha3BvaW50UGVuZGluZzpoKCJkZWJ1Zy1icmVha3BvaW50LXBlbmRpbmciLDYwMzc3KX0sUD17Li4uSGwsLi4uV2x9O2NsYXNzIF9ye2NvbnN0cnVjdG9yKCl7dGhpcy5fdG9rZW5pemF0aW9uU3VwcG9ydHM9bmV3IE1hcCx0aGlzLl9mYWN0b3JpZXM9bmV3IE1hcCx0aGlzLl9vbkRpZENoYW5nZT1uZXcgd2UsdGhpcy5vbkRpZENoYW5nZT10aGlzLl9vbkRpZENoYW5nZS5ldmVudCx0aGlzLl9jb2xvck1hcD1udWxsfWhhbmRsZUNoYW5nZSh0KXt0aGlzLl9vbkRpZENoYW5nZS5maXJlKHtjaGFuZ2VkTGFuZ3VhZ2VzOnQsY2hhbmdlZENvbG9yTWFwOiExfSl9cmVnaXN0ZXIodCxuKXtyZXR1cm4gdGhpcy5fdG9rZW5pemF0aW9uU3VwcG9ydHMuc2V0KHQsbiksdGhpcy5oYW5kbGVDaGFuZ2UoW3RdKSxQdCgoKT0+e3RoaXMuX3Rva2VuaXphdGlvblN1cHBvcnRzLmdldCh0KT09PW4mJih0aGlzLl90b2tlbml6YXRpb25TdXBwb3J0cy5kZWxldGUodCksdGhpcy5oYW5kbGVDaGFuZ2UoW3RdKSl9KX1nZXQodCl7cmV0dXJuIHRoaXMuX3Rva2VuaXphdGlvblN1cHBvcnRzLmdldCh0KXx8bnVsbH1yZWdpc3RlckZhY3RvcnkodCxuKXt0aGlzLl9mYWN0b3JpZXMuZ2V0KHQpPy5kaXNwb3NlKCk7Y29uc3QgaT1uZXcgRmwodGhpcyx0LG4pO3JldHVybiB0aGlzLl9mYWN0b3JpZXMuc2V0KHQsaSksUHQoKCk9Pntjb25zdCByPXRoaXMuX2ZhY3Rvcmllcy5nZXQodCk7IXJ8fHIhPT1pfHwodGhpcy5fZmFjdG9yaWVzLmRlbGV0ZSh0KSxyLmRpc3Bvc2UoKSl9KX1hc3luYyBnZXRPckNyZWF0ZSh0KXtjb25zdCBuPXRoaXMuZ2V0KHQpO2lmKG4pcmV0dXJuIG47Y29uc3QgaT10aGlzLl9mYWN0b3JpZXMuZ2V0KHQpO3JldHVybiFpfHxpLmlzUmVzb2x2ZWQ/bnVsbDooYXdhaXQgaS5yZXNvbHZlKCksdGhpcy5nZXQodCkpfWlzUmVzb2x2ZWQodCl7aWYodGhpcy5nZXQodCkpcmV0dXJuITA7Y29uc3QgaT10aGlzLl9mYWN0b3JpZXMuZ2V0KHQpO3JldHVybiEhKCFpfHxpLmlzUmVzb2x2ZWQpfXNldENvbG9yTWFwKHQpe3RoaXMuX2NvbG9yTWFwPXQsdGhpcy5fb25EaWRDaGFuZ2UuZmlyZSh7Y2hhbmdlZExhbmd1YWdlczpBcnJheS5mcm9tKHRoaXMuX3Rva2VuaXphdGlvblN1cHBvcnRzLmtleXMoKSksY2hhbmdlZENvbG9yTWFwOiEwfSl9Z2V0Q29sb3JNYXAoKXtyZXR1cm4gdGhpcy5fY29sb3JNYXB9Z2V0RGVmYXVsdEJhY2tncm91bmQoKXtyZXR1cm4gdGhpcy5fY29sb3JNYXAmJnRoaXMuX2NvbG9yTWFwLmxlbmd0aD4yP3RoaXMuX2NvbG9yTWFwWzJdOm51bGx9fWNsYXNzIEZsIGV4dGVuZHMgaXR7Z2V0IGlzUmVzb2x2ZWQoKXtyZXR1cm4gdGhpcy5faXNSZXNvbHZlZH1jb25zdHJ1Y3Rvcih0LG4saSl7c3VwZXIoKSx0aGlzLl9yZWdpc3RyeT10LHRoaXMuX2xhbmd1YWdlSWQ9bix0aGlzLl9mYWN0b3J5PWksdGhpcy5faXNEaXNwb3NlZD0hMSx0aGlzLl9yZXNvbHZlUHJvbWlzZT1udWxsLHRoaXMuX2lzUmVzb2x2ZWQ9ITF9ZGlzcG9zZSgpe3RoaXMuX2lzRGlzcG9zZWQ9ITAsc3VwZXIuZGlzcG9zZSgpfWFzeW5jIHJlc29sdmUoKXtyZXR1cm4gdGhpcy5fcmVzb2x2ZVByb21pc2V8fCh0aGlzLl9yZXNvbHZlUHJvbWlzZT10aGlzLl9jcmVhdGUoKSksdGhpcy5fcmVzb2x2ZVByb21pc2V9YXN5bmMgX2NyZWF0ZSgpe2NvbnN0IHQ9YXdhaXQgdGhpcy5fZmFjdG9yeS50b2tlbml6YXRpb25TdXBwb3J0O3RoaXMuX2lzUmVzb2x2ZWQ9ITAsdCYmIXRoaXMuX2lzRGlzcG9zZWQmJnRoaXMuX3JlZ2lzdGVyKHRoaXMuX3JlZ2lzdHJ5LnJlZ2lzdGVyKHRoaXMuX2xhbmd1YWdlSWQsdCkpfX1jbGFzcyBQbHtjb25zdHJ1Y3Rvcih0LG4saSl7dGhpcy5vZmZzZXQ9dCx0aGlzLnR5cGU9bix0aGlzLmxhbmd1YWdlPWksdGhpcy5fdG9rZW5CcmFuZD12b2lkIDB9dG9TdHJpbmcoKXtyZXR1cm4iKCIrdGhpcy5vZmZzZXQrIiwgIit0aGlzLnR5cGUrIikifX12YXIgd3I7KGZ1bmN0aW9uKGUpe2VbZS5JbmNyZWFzZT0wXT0iSW5jcmVhc2UiLGVbZS5EZWNyZWFzZT0xXT0iRGVjcmVhc2UifSkod3J8fCh3cj17fSkpO3ZhciB2cjsoZnVuY3Rpb24oZSl7Y29uc3QgdD1uZXcgTWFwO3Quc2V0KDAsUC5zeW1ib2xNZXRob2QpLHQuc2V0KDEsUC5zeW1ib2xGdW5jdGlvbiksdC5zZXQoMixQLnN5bWJvbENvbnN0cnVjdG9yKSx0LnNldCgzLFAuc3ltYm9sRmllbGQpLHQuc2V0KDQsUC5zeW1ib2xWYXJpYWJsZSksdC5zZXQoNSxQLnN5bWJvbENsYXNzKSx0LnNldCg2LFAuc3ltYm9sU3RydWN0KSx0LnNldCg3LFAuc3ltYm9sSW50ZXJmYWNlKSx0LnNldCg4LFAuc3ltYm9sTW9kdWxlKSx0LnNldCg5LFAuc3ltYm9sUHJvcGVydHkpLHQuc2V0KDEwLFAuc3ltYm9sRXZlbnQpLHQuc2V0KDExLFAuc3ltYm9sT3BlcmF0b3IpLHQuc2V0KDEyLFAuc3ltYm9sVW5pdCksdC5zZXQoMTMsUC5zeW1ib2xWYWx1ZSksdC5zZXQoMTUsUC5zeW1ib2xFbnVtKSx0LnNldCgxNCxQLnN5bWJvbENvbnN0YW50KSx0LnNldCgxNSxQLnN5bWJvbEVudW0pLHQuc2V0KDE2LFAuc3ltYm9sRW51bU1lbWJlciksdC5zZXQoMTcsUC5zeW1ib2xLZXl3b3JkKSx0LnNldCgyNyxQLnN5bWJvbFNuaXBwZXQpLHQuc2V0KDE4LFAuc3ltYm9sVGV4dCksdC5zZXQoMTksUC5zeW1ib2xDb2xvciksdC5zZXQoMjAsUC5zeW1ib2xGaWxlKSx0LnNldCgyMSxQLnN5bWJvbFJlZmVyZW5jZSksdC5zZXQoMjIsUC5zeW1ib2xDdXN0b21Db2xvciksdC5zZXQoMjMsUC5zeW1ib2xGb2xkZXIpLHQuc2V0KDI0LFAuc3ltYm9sVHlwZVBhcmFtZXRlciksdC5zZXQoMjUsUC5hY2NvdW50KSx0LnNldCgyNixQLmlzc3Vlcyk7ZnVuY3Rpb24gbihzKXtsZXQgYT10LmdldChzKTtyZXR1cm4gYXx8KGNvbnNvbGUuaW5mbygiTm8gY29kaWNvbiBmb3VuZCBmb3IgQ29tcGxldGlvbkl0ZW1LaW5kICIrcyksYT1QLnN5bWJvbFByb3BlcnR5KSxhfWUudG9JY29uPW47Y29uc3QgaT1uZXcgTWFwO2kuc2V0KCJtZXRob2QiLDApLGkuc2V0KCJmdW5jdGlvbiIsMSksaS5zZXQoImNvbnN0cnVjdG9yIiwyKSxpLnNldCgiZmllbGQiLDMpLGkuc2V0KCJ2YXJpYWJsZSIsNCksaS5zZXQoImNsYXNzIiw1KSxpLnNldCgic3RydWN0Iiw2KSxpLnNldCgiaW50ZXJmYWNlIiw3KSxpLnNldCgibW9kdWxlIiw4KSxpLnNldCgicHJvcGVydHkiLDkpLGkuc2V0KCJldmVudCIsMTApLGkuc2V0KCJvcGVyYXRvciIsMTEpLGkuc2V0KCJ1bml0IiwxMiksaS5zZXQoInZhbHVlIiwxMyksaS5zZXQoImNvbnN0YW50IiwxNCksaS5zZXQoImVudW0iLDE1KSxpLnNldCgiZW51bS1tZW1iZXIiLDE2KSxpLnNldCgiZW51bU1lbWJlciIsMTYpLGkuc2V0KCJrZXl3b3JkIiwxNyksaS5zZXQoInNuaXBwZXQiLDI3KSxpLnNldCgidGV4dCIsMTgpLGkuc2V0KCJjb2xvciIsMTkpLGkuc2V0KCJmaWxlIiwyMCksaS5zZXQoInJlZmVyZW5jZSIsMjEpLGkuc2V0KCJjdXN0b21jb2xvciIsMjIpLGkuc2V0KCJmb2xkZXIiLDIzKSxpLnNldCgidHlwZS1wYXJhbWV0ZXIiLDI0KSxpLnNldCgidHlwZVBhcmFtZXRlciIsMjQpLGkuc2V0KCJhY2NvdW50IiwyNSksaS5zZXQoImlzc3VlIiwyNik7ZnVuY3Rpb24gcihzLGEpe2xldCBsPWkuZ2V0KHMpO3JldHVybiB0eXBlb2YgbD4idSImJiFhJiYobD05KSxsfWUuZnJvbVN0cmluZz1yfSkodnJ8fCh2cj17fSkpO3ZhciB5cjsoZnVuY3Rpb24oZSl7ZVtlLkF1dG9tYXRpYz0wXT0iQXV0b21hdGljIixlW2UuRXhwbGljaXQ9MV09IkV4cGxpY2l0In0pKHlyfHwoeXI9e30pKTt2YXIgeHI7KGZ1bmN0aW9uKGUpe2VbZS5BdXRvbWF0aWM9MF09IkF1dG9tYXRpYyIsZVtlLlBhc3RlQXM9MV09IlBhc3RlQXMifSkoeHJ8fCh4cj17fSkpO3ZhciBUcjsoZnVuY3Rpb24oZSl7ZVtlLkludm9rZT0xXT0iSW52b2tlIixlW2UuVHJpZ2dlckNoYXJhY3Rlcj0yXT0iVHJpZ2dlckNoYXJhY3RlciIsZVtlLkNvbnRlbnRDaGFuZ2U9M109IkNvbnRlbnRDaGFuZ2UifSkoVHJ8fChUcj17fSkpO3ZhciBrcjsoZnVuY3Rpb24oZSl7ZVtlLlRleHQ9MF09IlRleHQiLGVbZS5SZWFkPTFdPSJSZWFkIixlW2UuV3JpdGU9Ml09IldyaXRlIn0pKGtyfHwoa3I9e30pKSxRKCJBcnJheSIsImFycmF5IiksUSgiQm9vbGVhbiIsImJvb2xlYW4iKSxRKCJDbGFzcyIsImNsYXNzIiksUSgiQ29uc3RhbnQiLCJjb25zdGFudCIpLFEoIkNvbnN0cnVjdG9yIiwiY29uc3RydWN0b3IiKSxRKCJFbnVtIiwiZW51bWVyYXRpb24iKSxRKCJFbnVtTWVtYmVyIiwiZW51bWVyYXRpb24gbWVtYmVyIiksUSgiRXZlbnQiLCJldmVudCIpLFEoIkZpZWxkIiwiZmllbGQiKSxRKCJGaWxlIiwiZmlsZSIpLFEoIkZ1bmN0aW9uIiwiZnVuY3Rpb24iKSxRKCJJbnRlcmZhY2UiLCJpbnRlcmZhY2UiKSxRKCJLZXkiLCJrZXkiKSxRKCJNZXRob2QiLCJtZXRob2QiKSxRKCJNb2R1bGUiLCJtb2R1bGUiKSxRKCJOYW1lc3BhY2UiLCJuYW1lc3BhY2UiKSxRKCJOdWxsIiwibnVsbCIpLFEoIk51bWJlciIsIm51bWJlciIpLFEoIk9iamVjdCIsIm9iamVjdCIpLFEoIk9wZXJhdG9yIiwib3BlcmF0b3IiKSxRKCJQYWNrYWdlIiwicGFja2FnZSIpLFEoIlByb3BlcnR5IiwicHJvcGVydHkiKSxRKCJTdHJpbmciLCJzdHJpbmciKSxRKCJTdHJ1Y3QiLCJzdHJ1Y3QiKSxRKCJUeXBlUGFyYW1ldGVyIiwidHlwZSBwYXJhbWV0ZXIiKSxRKCJWYXJpYWJsZSIsInZhcmlhYmxlIik7dmFyIEFyOyhmdW5jdGlvbihlKXtjb25zdCB0PW5ldyBNYXA7dC5zZXQoMCxQLnN5bWJvbEZpbGUpLHQuc2V0KDEsUC5zeW1ib2xNb2R1bGUpLHQuc2V0KDIsUC5zeW1ib2xOYW1lc3BhY2UpLHQuc2V0KDMsUC5zeW1ib2xQYWNrYWdlKSx0LnNldCg0LFAuc3ltYm9sQ2xhc3MpLHQuc2V0KDUsUC5zeW1ib2xNZXRob2QpLHQuc2V0KDYsUC5zeW1ib2xQcm9wZXJ0eSksdC5zZXQoNyxQLnN5bWJvbEZpZWxkKSx0LnNldCg4LFAuc3ltYm9sQ29uc3RydWN0b3IpLHQuc2V0KDksUC5zeW1ib2xFbnVtKSx0LnNldCgxMCxQLnN5bWJvbEludGVyZmFjZSksdC5zZXQoMTEsUC5zeW1ib2xGdW5jdGlvbiksdC5zZXQoMTIsUC5zeW1ib2xWYXJpYWJsZSksdC5zZXQoMTMsUC5zeW1ib2xDb25zdGFudCksdC5zZXQoMTQsUC5zeW1ib2xTdHJpbmcpLHQuc2V0KDE1LFAuc3ltYm9sTnVtYmVyKSx0LnNldCgxNixQLnN5bWJvbEJvb2xlYW4pLHQuc2V0KDE3LFAuc3ltYm9sQXJyYXkpLHQuc2V0KDE4LFAuc3ltYm9sT2JqZWN0KSx0LnNldCgxOSxQLnN5bWJvbEtleSksdC5zZXQoMjAsUC5zeW1ib2xOdWxsKSx0LnNldCgyMSxQLnN5bWJvbEVudW1NZW1iZXIpLHQuc2V0KDIyLFAuc3ltYm9sU3RydWN0KSx0LnNldCgyMyxQLnN5bWJvbEV2ZW50KSx0LnNldCgyNCxQLnN5bWJvbE9wZXJhdG9yKSx0LnNldCgyNSxQLnN5bWJvbFR5cGVQYXJhbWV0ZXIpO2Z1bmN0aW9uIG4oaSl7bGV0IHI9dC5nZXQoaSk7cmV0dXJuIHJ8fChjb25zb2xlLmluZm8oIk5vIGNvZGljb24gZm91bmQgZm9yIFN5bWJvbEtpbmQgIitpKSxyPVAuc3ltYm9sUHJvcGVydHkpLHJ9ZS50b0ljb249bn0pKEFyfHwoQXI9e30pKTtsZXQgYmg9KGNlPWNsYXNze3N0YXRpYyBmcm9tVmFsdWUodCl7c3dpdGNoKHQpe2Nhc2UiY29tbWVudCI6cmV0dXJuIGNlLkNvbW1lbnQ7Y2FzZSJpbXBvcnRzIjpyZXR1cm4gY2UuSW1wb3J0cztjYXNlInJlZ2lvbiI6cmV0dXJuIGNlLlJlZ2lvbn1yZXR1cm4gbmV3IGNlKHQpfWNvbnN0cnVjdG9yKHQpe3RoaXMudmFsdWU9dH19LGNlLkNvbW1lbnQ9bmV3IGNlKCJjb21tZW50IiksY2UuSW1wb3J0cz1uZXcgY2UoImltcG9ydHMiKSxjZS5SZWdpb249bmV3IGNlKCJyZWdpb24iKSxjZSk7dmFyIFNyOyhmdW5jdGlvbihlKXtlW2UuQUlHZW5lcmF0ZWQ9MV09IkFJR2VuZXJhdGVkIn0pKFNyfHwoU3I9e30pKTt2YXIgTHI7KGZ1bmN0aW9uKGUpe2VbZS5JbnZva2U9MF09Ikludm9rZSIsZVtlLkF1dG9tYXRpYz0xXT0iQXV0b21hdGljIn0pKExyfHwoTHI9e30pKTt2YXIgQ3I7KGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQobil7cmV0dXJuIW58fHR5cGVvZiBuIT0ib2JqZWN0Ij8hMTp0eXBlb2Ygbi5pZD09InN0cmluZyImJnR5cGVvZiBuLnRpdGxlPT0ic3RyaW5nIn1lLmlzPXR9KShDcnx8KENyPXt9KSk7dmFyIEVyOyhmdW5jdGlvbihlKXtlW2UuVHlwZT0xXT0iVHlwZSIsZVtlLlBhcmFtZXRlcj0yXT0iUGFyYW1ldGVyIn0pKEVyfHwoRXI9e30pKSxuZXcgX3IsbmV3IF9yO3ZhciBScjsoZnVuY3Rpb24oZSl7ZVtlLkludm9rZT0wXT0iSW52b2tlIixlW2UuQXV0b21hdGljPTFdPSJBdXRvbWF0aWMifSkoUnJ8fChScj17fSkpO3ZhciBNcjsoZnVuY3Rpb24oZSl7ZVtlLlVua25vd249MF09IlVua25vd24iLGVbZS5EaXNhYmxlZD0xXT0iRGlzYWJsZWQiLGVbZS5FbmFibGVkPTJdPSJFbmFibGVkIn0pKE1yfHwoTXI9e30pKTt2YXIgTnI7KGZ1bmN0aW9uKGUpe2VbZS5JbnZva2U9MV09Ikludm9rZSIsZVtlLkF1dG89Ml09IkF1dG8ifSkoTnJ8fChOcj17fSkpO3ZhciBEcjsoZnVuY3Rpb24oZSl7ZVtlLk5vbmU9MF09Ik5vbmUiLGVbZS5LZWVwV2hpdGVzcGFjZT0xXT0iS2VlcFdoaXRlc3BhY2UiLGVbZS5JbnNlcnRBc1NuaXBwZXQ9NF09Ikluc2VydEFzU25pcHBldCJ9KShEcnx8KERyPXt9KSk7dmFyIElyOyhmdW5jdGlvbihlKXtlW2UuTWV0aG9kPTBdPSJNZXRob2QiLGVbZS5GdW5jdGlvbj0xXT0iRnVuY3Rpb24iLGVbZS5Db25zdHJ1Y3Rvcj0yXT0iQ29uc3RydWN0b3IiLGVbZS5GaWVsZD0zXT0iRmllbGQiLGVbZS5WYXJpYWJsZT00XT0iVmFyaWFibGUiLGVbZS5DbGFzcz01XT0iQ2xhc3MiLGVbZS5TdHJ1Y3Q9Nl09IlN0cnVjdCIsZVtlLkludGVyZmFjZT03XT0iSW50ZXJmYWNlIixlW2UuTW9kdWxlPThdPSJNb2R1bGUiLGVbZS5Qcm9wZXJ0eT05XT0iUHJvcGVydHkiLGVbZS5FdmVudD0xMF09IkV2ZW50IixlW2UuT3BlcmF0b3I9MTFdPSJPcGVyYXRvciIsZVtlLlVuaXQ9MTJdPSJVbml0IixlW2UuVmFsdWU9MTNdPSJWYWx1ZSIsZVtlLkNvbnN0YW50PTE0XT0iQ29uc3RhbnQiLGVbZS5FbnVtPTE1XT0iRW51bSIsZVtlLkVudW1NZW1iZXI9MTZdPSJFbnVtTWVtYmVyIixlW2UuS2V5d29yZD0xN109IktleXdvcmQiLGVbZS5UZXh0PTE4XT0iVGV4dCIsZVtlLkNvbG9yPTE5XT0iQ29sb3IiLGVbZS5GaWxlPTIwXT0iRmlsZSIsZVtlLlJlZmVyZW5jZT0yMV09IlJlZmVyZW5jZSIsZVtlLkN1c3RvbWNvbG9yPTIyXT0iQ3VzdG9tY29sb3IiLGVbZS5Gb2xkZXI9MjNdPSJGb2xkZXIiLGVbZS5UeXBlUGFyYW1ldGVyPTI0XT0iVHlwZVBhcmFtZXRlciIsZVtlLlVzZXI9MjVdPSJVc2VyIixlW2UuSXNzdWU9MjZdPSJJc3N1ZSIsZVtlLlNuaXBwZXQ9MjddPSJTbmlwcGV0In0pKElyfHwoSXI9e30pKTt2YXIgenI7KGZ1bmN0aW9uKGUpe2VbZS5EZXByZWNhdGVkPTFdPSJEZXByZWNhdGVkIn0pKHpyfHwoenI9e30pKTt2YXIgVXI7KGZ1bmN0aW9uKGUpe2VbZS5JbnZva2U9MF09Ikludm9rZSIsZVtlLlRyaWdnZXJDaGFyYWN0ZXI9MV09IlRyaWdnZXJDaGFyYWN0ZXIiLGVbZS5UcmlnZ2VyRm9ySW5jb21wbGV0ZUNvbXBsZXRpb25zPTJdPSJUcmlnZ2VyRm9ySW5jb21wbGV0ZUNvbXBsZXRpb25zIn0pKFVyfHwoVXI9e30pKTt2YXIgSHI7KGZ1bmN0aW9uKGUpe2VbZS5FWEFDVD0wXT0iRVhBQ1QiLGVbZS5BQk9WRT0xXT0iQUJPVkUiLGVbZS5CRUxPVz0yXT0iQkVMT1cifSkoSHJ8fChIcj17fSkpO3ZhciBXcjsoZnVuY3Rpb24oZSl7ZVtlLk5vdFNldD0wXT0iTm90U2V0IixlW2UuQ29udGVudEZsdXNoPTFdPSJDb250ZW50Rmx1c2giLGVbZS5SZWNvdmVyRnJvbU1hcmtlcnM9Ml09IlJlY292ZXJGcm9tTWFya2VycyIsZVtlLkV4cGxpY2l0PTNdPSJFeHBsaWNpdCIsZVtlLlBhc3RlPTRdPSJQYXN0ZSIsZVtlLlVuZG89NV09IlVuZG8iLGVbZS5SZWRvPTZdPSJSZWRvIn0pKFdyfHwoV3I9e30pKTt2YXIgRnI7KGZ1bmN0aW9uKGUpe2VbZS5MRj0xXT0iTEYiLGVbZS5DUkxGPTJdPSJDUkxGIn0pKEZyfHwoRnI9e30pKTt2YXIgUHI7KGZ1bmN0aW9uKGUpe2VbZS5UZXh0PTBdPSJUZXh0IixlW2UuUmVhZD0xXT0iUmVhZCIsZVtlLldyaXRlPTJdPSJXcml0ZSJ9KShQcnx8KFByPXt9KSk7dmFyIEJyOyhmdW5jdGlvbihlKXtlW2UuTm9uZT0wXT0iTm9uZSIsZVtlLktlZXA9MV09IktlZXAiLGVbZS5CcmFja2V0cz0yXT0iQnJhY2tldHMiLGVbZS5BZHZhbmNlZD0zXT0iQWR2YW5jZWQiLGVbZS5GdWxsPTRdPSJGdWxsIn0pKEJyfHwoQnI9e30pKTt2YXIgcXI7KGZ1bmN0aW9uKGUpe2VbZS5hY2NlcHRTdWdnZXN0aW9uT25Db21taXRDaGFyYWN0ZXI9MF09ImFjY2VwdFN1Z2dlc3Rpb25PbkNvbW1pdENoYXJhY3RlciIsZVtlLmFjY2VwdFN1Z2dlc3Rpb25PbkVudGVyPTFdPSJhY2NlcHRTdWdnZXN0aW9uT25FbnRlciIsZVtlLmFjY2Vzc2liaWxpdHlTdXBwb3J0PTJdPSJhY2Nlc3NpYmlsaXR5U3VwcG9ydCIsZVtlLmFjY2Vzc2liaWxpdHlQYWdlU2l6ZT0zXT0iYWNjZXNzaWJpbGl0eVBhZ2VTaXplIixlW2UuYXJpYUxhYmVsPTRdPSJhcmlhTGFiZWwiLGVbZS5hcmlhUmVxdWlyZWQ9NV09ImFyaWFSZXF1aXJlZCIsZVtlLmF1dG9DbG9zaW5nQnJhY2tldHM9Nl09ImF1dG9DbG9zaW5nQnJhY2tldHMiLGVbZS5hdXRvQ2xvc2luZ0NvbW1lbnRzPTddPSJhdXRvQ2xvc2luZ0NvbW1lbnRzIixlW2Uuc2NyZWVuUmVhZGVyQW5ub3VuY2VJbmxpbmVTdWdnZXN0aW9uPThdPSJzY3JlZW5SZWFkZXJBbm5vdW5jZUlubGluZVN1Z2dlc3Rpb24iLGVbZS5hdXRvQ2xvc2luZ0RlbGV0ZT05XT0iYXV0b0Nsb3NpbmdEZWxldGUiLGVbZS5hdXRvQ2xvc2luZ092ZXJ0eXBlPTEwXT0iYXV0b0Nsb3NpbmdPdmVydHlwZSIsZVtlLmF1dG9DbG9zaW5nUXVvdGVzPTExXT0iYXV0b0Nsb3NpbmdRdW90ZXMiLGVbZS5hdXRvSW5kZW50PTEyXT0iYXV0b0luZGVudCIsZVtlLmF1dG9tYXRpY0xheW91dD0xM109ImF1dG9tYXRpY0xheW91dCIsZVtlLmF1dG9TdXJyb3VuZD0xNF09ImF1dG9TdXJyb3VuZCIsZVtlLmJyYWNrZXRQYWlyQ29sb3JpemF0aW9uPTE1XT0iYnJhY2tldFBhaXJDb2xvcml6YXRpb24iLGVbZS5ndWlkZXM9MTZdPSJndWlkZXMiLGVbZS5jb2RlTGVucz0xN109ImNvZGVMZW5zIixlW2UuY29kZUxlbnNGb250RmFtaWx5PTE4XT0iY29kZUxlbnNGb250RmFtaWx5IixlW2UuY29kZUxlbnNGb250U2l6ZT0xOV09ImNvZGVMZW5zRm9udFNpemUiLGVbZS5jb2xvckRlY29yYXRvcnM9MjBdPSJjb2xvckRlY29yYXRvcnMiLGVbZS5jb2xvckRlY29yYXRvcnNMaW1pdD0yMV09ImNvbG9yRGVjb3JhdG9yc0xpbWl0IixlW2UuY29sdW1uU2VsZWN0aW9uPTIyXT0iY29sdW1uU2VsZWN0aW9uIixlW2UuY29tbWVudHM9MjNdPSJjb21tZW50cyIsZVtlLmNvbnRleHRtZW51PTI0XT0iY29udGV4dG1lbnUiLGVbZS5jb3B5V2l0aFN5bnRheEhpZ2hsaWdodGluZz0yNV09ImNvcHlXaXRoU3ludGF4SGlnaGxpZ2h0aW5nIixlW2UuY3Vyc29yQmxpbmtpbmc9MjZdPSJjdXJzb3JCbGlua2luZyIsZVtlLmN1cnNvclNtb290aENhcmV0QW5pbWF0aW9uPTI3XT0iY3Vyc29yU21vb3RoQ2FyZXRBbmltYXRpb24iLGVbZS5jdXJzb3JTdHlsZT0yOF09ImN1cnNvclN0eWxlIixlW2UuY3Vyc29yU3Vycm91bmRpbmdMaW5lcz0yOV09ImN1cnNvclN1cnJvdW5kaW5nTGluZXMiLGVbZS5jdXJzb3JTdXJyb3VuZGluZ0xpbmVzU3R5bGU9MzBdPSJjdXJzb3JTdXJyb3VuZGluZ0xpbmVzU3R5bGUiLGVbZS5jdXJzb3JXaWR0aD0zMV09ImN1cnNvcldpZHRoIixlW2UuZGlzYWJsZUxheWVySGludGluZz0zMl09ImRpc2FibGVMYXllckhpbnRpbmciLGVbZS5kaXNhYmxlTW9ub3NwYWNlT3B0aW1pemF0aW9ucz0zM109ImRpc2FibGVNb25vc3BhY2VPcHRpbWl6YXRpb25zIixlW2UuZG9tUmVhZE9ubHk9MzRdPSJkb21SZWFkT25seSIsZVtlLmRyYWdBbmREcm9wPTM1XT0iZHJhZ0FuZERyb3AiLGVbZS5kcm9wSW50b0VkaXRvcj0zNl09ImRyb3BJbnRvRWRpdG9yIixlW2UuZW1wdHlTZWxlY3Rpb25DbGlwYm9hcmQ9MzddPSJlbXB0eVNlbGVjdGlvbkNsaXBib2FyZCIsZVtlLmV4cGVyaW1lbnRhbFdoaXRlc3BhY2VSZW5kZXJpbmc9MzhdPSJleHBlcmltZW50YWxXaGl0ZXNwYWNlUmVuZGVyaW5nIixlW2UuZXh0cmFFZGl0b3JDbGFzc05hbWU9MzldPSJleHRyYUVkaXRvckNsYXNzTmFtZSIsZVtlLmZhc3RTY3JvbGxTZW5zaXRpdml0eT00MF09ImZhc3RTY3JvbGxTZW5zaXRpdml0eSIsZVtlLmZpbmQ9NDFdPSJmaW5kIixlW2UuZml4ZWRPdmVyZmxvd1dpZGdldHM9NDJdPSJmaXhlZE92ZXJmbG93V2lkZ2V0cyIsZVtlLmZvbGRpbmc9NDNdPSJmb2xkaW5nIixlW2UuZm9sZGluZ1N0cmF0ZWd5PTQ0XT0iZm9sZGluZ1N0cmF0ZWd5IixlW2UuZm9sZGluZ0hpZ2hsaWdodD00NV09ImZvbGRpbmdIaWdobGlnaHQiLGVbZS5mb2xkaW5nSW1wb3J0c0J5RGVmYXVsdD00Nl09ImZvbGRpbmdJbXBvcnRzQnlEZWZhdWx0IixlW2UuZm9sZGluZ01heGltdW1SZWdpb25zPTQ3XT0iZm9sZGluZ01heGltdW1SZWdpb25zIixlW2UudW5mb2xkT25DbGlja0FmdGVyRW5kT2ZMaW5lPTQ4XT0idW5mb2xkT25DbGlja0FmdGVyRW5kT2ZMaW5lIixlW2UuZm9udEZhbWlseT00OV09ImZvbnRGYW1pbHkiLGVbZS5mb250SW5mbz01MF09ImZvbnRJbmZvIixlW2UuZm9udExpZ2F0dXJlcz01MV09ImZvbnRMaWdhdHVyZXMiLGVbZS5mb250U2l6ZT01Ml09ImZvbnRTaXplIixlW2UuZm9udFdlaWdodD01M109ImZvbnRXZWlnaHQiLGVbZS5mb250VmFyaWF0aW9ucz01NF09ImZvbnRWYXJpYXRpb25zIixlW2UuZm9ybWF0T25QYXN0ZT01NV09ImZvcm1hdE9uUGFzdGUiLGVbZS5mb3JtYXRPblR5cGU9NTZdPSJmb3JtYXRPblR5cGUiLGVbZS5nbHlwaE1hcmdpbj01N109ImdseXBoTWFyZ2luIixlW2UuZ290b0xvY2F0aW9uPTU4XT0iZ290b0xvY2F0aW9uIixlW2UuaGlkZUN1cnNvckluT3ZlcnZpZXdSdWxlcj01OV09ImhpZGVDdXJzb3JJbk92ZXJ2aWV3UnVsZXIiLGVbZS5ob3Zlcj02MF09ImhvdmVyIixlW2UuaW5EaWZmRWRpdG9yPTYxXT0iaW5EaWZmRWRpdG9yIixlW2UuaW5saW5lU3VnZ2VzdD02Ml09ImlubGluZVN1Z2dlc3QiLGVbZS5pbmxpbmVFZGl0PTYzXT0iaW5saW5lRWRpdCIsZVtlLmxldHRlclNwYWNpbmc9NjRdPSJsZXR0ZXJTcGFjaW5nIixlW2UubGlnaHRidWxiPTY1XT0ibGlnaHRidWxiIixlW2UubGluZURlY29yYXRpb25zV2lkdGg9NjZdPSJsaW5lRGVjb3JhdGlvbnNXaWR0aCIsZVtlLmxpbmVIZWlnaHQ9NjddPSJsaW5lSGVpZ2h0IixlW2UubGluZU51bWJlcnM9NjhdPSJsaW5lTnVtYmVycyIsZVtlLmxpbmVOdW1iZXJzTWluQ2hhcnM9NjldPSJsaW5lTnVtYmVyc01pbkNoYXJzIixlW2UubGlua2VkRWRpdGluZz03MF09ImxpbmtlZEVkaXRpbmciLGVbZS5saW5rcz03MV09ImxpbmtzIixlW2UubWF0Y2hCcmFja2V0cz03Ml09Im1hdGNoQnJhY2tldHMiLGVbZS5taW5pbWFwPTczXT0ibWluaW1hcCIsZVtlLm1vdXNlU3R5bGU9NzRdPSJtb3VzZVN0eWxlIixlW2UubW91c2VXaGVlbFNjcm9sbFNlbnNpdGl2aXR5PTc1XT0ibW91c2VXaGVlbFNjcm9sbFNlbnNpdGl2aXR5IixlW2UubW91c2VXaGVlbFpvb209NzZdPSJtb3VzZVdoZWVsWm9vbSIsZVtlLm11bHRpQ3Vyc29yTWVyZ2VPdmVybGFwcGluZz03N109Im11bHRpQ3Vyc29yTWVyZ2VPdmVybGFwcGluZyIsZVtlLm11bHRpQ3Vyc29yTW9kaWZpZXI9NzhdPSJtdWx0aUN1cnNvck1vZGlmaWVyIixlW2UubXVsdGlDdXJzb3JQYXN0ZT03OV09Im11bHRpQ3Vyc29yUGFzdGUiLGVbZS5tdWx0aUN1cnNvckxpbWl0PTgwXT0ibXVsdGlDdXJzb3JMaW1pdCIsZVtlLm9jY3VycmVuY2VzSGlnaGxpZ2h0PTgxXT0ib2NjdXJyZW5jZXNIaWdobGlnaHQiLGVbZS5vdmVydmlld1J1bGVyQm9yZGVyPTgyXT0ib3ZlcnZpZXdSdWxlckJvcmRlciIsZVtlLm92ZXJ2aWV3UnVsZXJMYW5lcz04M109Im92ZXJ2aWV3UnVsZXJMYW5lcyIsZVtlLnBhZGRpbmc9ODRdPSJwYWRkaW5nIixlW2UucGFzdGVBcz04NV09InBhc3RlQXMiLGVbZS5wYXJhbWV0ZXJIaW50cz04Nl09InBhcmFtZXRlckhpbnRzIixlW2UucGVla1dpZGdldERlZmF1bHRGb2N1cz04N109InBlZWtXaWRnZXREZWZhdWx0Rm9jdXMiLGVbZS5wbGFjZWhvbGRlcj04OF09InBsYWNlaG9sZGVyIixlW2UuZGVmaW5pdGlvbkxpbmtPcGVuc0luUGVlaz04OV09ImRlZmluaXRpb25MaW5rT3BlbnNJblBlZWsiLGVbZS5xdWlja1N1Z2dlc3Rpb25zPTkwXT0icXVpY2tTdWdnZXN0aW9ucyIsZVtlLnF1aWNrU3VnZ2VzdGlvbnNEZWxheT05MV09InF1aWNrU3VnZ2VzdGlvbnNEZWxheSIsZVtlLnJlYWRPbmx5PTkyXT0icmVhZE9ubHkiLGVbZS5yZWFkT25seU1lc3NhZ2U9OTNdPSJyZWFkT25seU1lc3NhZ2UiLGVbZS5yZW5hbWVPblR5cGU9OTRdPSJyZW5hbWVPblR5cGUiLGVbZS5yZW5kZXJDb250cm9sQ2hhcmFjdGVycz05NV09InJlbmRlckNvbnRyb2xDaGFyYWN0ZXJzIixlW2UucmVuZGVyRmluYWxOZXdsaW5lPTk2XT0icmVuZGVyRmluYWxOZXdsaW5lIixlW2UucmVuZGVyTGluZUhpZ2hsaWdodD05N109InJlbmRlckxpbmVIaWdobGlnaHQiLGVbZS5yZW5kZXJMaW5lSGlnaGxpZ2h0T25seVdoZW5Gb2N1cz05OF09InJlbmRlckxpbmVIaWdobGlnaHRPbmx5V2hlbkZvY3VzIixlW2UucmVuZGVyVmFsaWRhdGlvbkRlY29yYXRpb25zPTk5XT0icmVuZGVyVmFsaWRhdGlvbkRlY29yYXRpb25zIixlW2UucmVuZGVyV2hpdGVzcGFjZT0xMDBdPSJyZW5kZXJXaGl0ZXNwYWNlIixlW2UucmV2ZWFsSG9yaXpvbnRhbFJpZ2h0UGFkZGluZz0xMDFdPSJyZXZlYWxIb3Jpem9udGFsUmlnaHRQYWRkaW5nIixlW2Uucm91bmRlZFNlbGVjdGlvbj0xMDJdPSJyb3VuZGVkU2VsZWN0aW9uIixlW2UucnVsZXJzPTEwM109InJ1bGVycyIsZVtlLnNjcm9sbGJhcj0xMDRdPSJzY3JvbGxiYXIiLGVbZS5zY3JvbGxCZXlvbmRMYXN0Q29sdW1uPTEwNV09InNjcm9sbEJleW9uZExhc3RDb2x1bW4iLGVbZS5zY3JvbGxCZXlvbmRMYXN0TGluZT0xMDZdPSJzY3JvbGxCZXlvbmRMYXN0TGluZSIsZVtlLnNjcm9sbFByZWRvbWluYW50QXhpcz0xMDddPSJzY3JvbGxQcmVkb21pbmFudEF4aXMiLGVbZS5zZWxlY3Rpb25DbGlwYm9hcmQ9MTA4XT0ic2VsZWN0aW9uQ2xpcGJvYXJkIixlW2Uuc2VsZWN0aW9uSGlnaGxpZ2h0PTEwOV09InNlbGVjdGlvbkhpZ2hsaWdodCIsZVtlLnNlbGVjdE9uTGluZU51bWJlcnM9MTEwXT0ic2VsZWN0T25MaW5lTnVtYmVycyIsZVtlLnNob3dGb2xkaW5nQ29udHJvbHM9MTExXT0ic2hvd0ZvbGRpbmdDb250cm9scyIsZVtlLnNob3dVbnVzZWQ9MTEyXT0ic2hvd1VudXNlZCIsZVtlLnNuaXBwZXRTdWdnZXN0aW9ucz0xMTNdPSJzbmlwcGV0U3VnZ2VzdGlvbnMiLGVbZS5zbWFydFNlbGVjdD0xMTRdPSJzbWFydFNlbGVjdCIsZVtlLnNtb290aFNjcm9sbGluZz0xMTVdPSJzbW9vdGhTY3JvbGxpbmciLGVbZS5zdGlja3lTY3JvbGw9MTE2XT0ic3RpY2t5U2Nyb2xsIixlW2Uuc3RpY2t5VGFiU3RvcHM9MTE3XT0ic3RpY2t5VGFiU3RvcHMiLGVbZS5zdG9wUmVuZGVyaW5nTGluZUFmdGVyPTExOF09InN0b3BSZW5kZXJpbmdMaW5lQWZ0ZXIiLGVbZS5zdWdnZXN0PTExOV09InN1Z2dlc3QiLGVbZS5zdWdnZXN0Rm9udFNpemU9MTIwXT0ic3VnZ2VzdEZvbnRTaXplIixlW2Uuc3VnZ2VzdExpbmVIZWlnaHQ9MTIxXT0ic3VnZ2VzdExpbmVIZWlnaHQiLGVbZS5zdWdnZXN0T25UcmlnZ2VyQ2hhcmFjdGVycz0xMjJdPSJzdWdnZXN0T25UcmlnZ2VyQ2hhcmFjdGVycyIsZVtlLnN1Z2dlc3RTZWxlY3Rpb249MTIzXT0ic3VnZ2VzdFNlbGVjdGlvbiIsZVtlLnRhYkNvbXBsZXRpb249MTI0XT0idGFiQ29tcGxldGlvbiIsZVtlLnRhYkluZGV4PTEyNV09InRhYkluZGV4IixlW2UudW5pY29kZUhpZ2hsaWdodGluZz0xMjZdPSJ1bmljb2RlSGlnaGxpZ2h0aW5nIixlW2UudW51c3VhbExpbmVUZXJtaW5hdG9ycz0xMjddPSJ1bnVzdWFsTGluZVRlcm1pbmF0b3JzIixlW2UudXNlU2hhZG93RE9NPTEyOF09InVzZVNoYWRvd0RPTSIsZVtlLnVzZVRhYlN0b3BzPTEyOV09InVzZVRhYlN0b3BzIixlW2Uud29yZEJyZWFrPTEzMF09IndvcmRCcmVhayIsZVtlLndvcmRTZWdtZW50ZXJMb2NhbGVzPTEzMV09IndvcmRTZWdtZW50ZXJMb2NhbGVzIixlW2Uud29yZFNlcGFyYXRvcnM9MTMyXT0id29yZFNlcGFyYXRvcnMiLGVbZS53b3JkV3JhcD0xMzNdPSJ3b3JkV3JhcCIsZVtlLndvcmRXcmFwQnJlYWtBZnRlckNoYXJhY3RlcnM9MTM0XT0id29yZFdyYXBCcmVha0FmdGVyQ2hhcmFjdGVycyIsZVtlLndvcmRXcmFwQnJlYWtCZWZvcmVDaGFyYWN0ZXJzPTEzNV09IndvcmRXcmFwQnJlYWtCZWZvcmVDaGFyYWN0ZXJzIixlW2Uud29yZFdyYXBDb2x1bW49MTM2XT0id29yZFdyYXBDb2x1bW4iLGVbZS53b3JkV3JhcE92ZXJyaWRlMT0xMzddPSJ3b3JkV3JhcE92ZXJyaWRlMSIsZVtlLndvcmRXcmFwT3ZlcnJpZGUyPTEzOF09IndvcmRXcmFwT3ZlcnJpZGUyIixlW2Uud3JhcHBpbmdJbmRlbnQ9MTM5XT0id3JhcHBpbmdJbmRlbnQiLGVbZS53cmFwcGluZ1N0cmF0ZWd5PTE0MF09IndyYXBwaW5nU3RyYXRlZ3kiLGVbZS5zaG93RGVwcmVjYXRlZD0xNDFdPSJzaG93RGVwcmVjYXRlZCIsZVtlLmlubGF5SGludHM9MTQyXT0iaW5sYXlIaW50cyIsZVtlLmVkaXRvckNsYXNzTmFtZT0xNDNdPSJlZGl0b3JDbGFzc05hbWUiLGVbZS5waXhlbFJhdGlvPTE0NF09InBpeGVsUmF0aW8iLGVbZS50YWJGb2N1c01vZGU9MTQ1XT0idGFiRm9jdXNNb2RlIixlW2UubGF5b3V0SW5mbz0xNDZdPSJsYXlvdXRJbmZvIixlW2Uud3JhcHBpbmdJbmZvPTE0N109IndyYXBwaW5nSW5mbyIsZVtlLmRlZmF1bHRDb2xvckRlY29yYXRvcnM9MTQ4XT0iZGVmYXVsdENvbG9yRGVjb3JhdG9ycyIsZVtlLmNvbG9yRGVjb3JhdG9yc0FjdGl2YXRlZE9uPTE0OV09ImNvbG9yRGVjb3JhdG9yc0FjdGl2YXRlZE9uIixlW2UuaW5saW5lQ29tcGxldGlvbnNBY2Nlc3NpYmlsaXR5VmVyYm9zZT0xNTBdPSJpbmxpbmVDb21wbGV0aW9uc0FjY2Vzc2liaWxpdHlWZXJib3NlIn0pKHFyfHwocXI9e30pKTt2YXIgT3I7KGZ1bmN0aW9uKGUpe2VbZS5UZXh0RGVmaW5lZD0wXT0iVGV4dERlZmluZWQiLGVbZS5MRj0xXT0iTEYiLGVbZS5DUkxGPTJdPSJDUkxGIn0pKE9yfHwoT3I9e30pKTt2YXIgVnI7KGZ1bmN0aW9uKGUpe2VbZS5MRj0wXT0iTEYiLGVbZS5DUkxGPTFdPSJDUkxGIn0pKFZyfHwoVnI9e30pKTt2YXIganI7KGZ1bmN0aW9uKGUpe2VbZS5MZWZ0PTFdPSJMZWZ0IixlW2UuQ2VudGVyPTJdPSJDZW50ZXIiLGVbZS5SaWdodD0zXT0iUmlnaHQifSkoanJ8fChqcj17fSkpO3ZhciAkcjsoZnVuY3Rpb24oZSl7ZVtlLkluY3JlYXNlPTBdPSJJbmNyZWFzZSIsZVtlLkRlY3JlYXNlPTFdPSJEZWNyZWFzZSJ9KSgkcnx8KCRyPXt9KSk7dmFyIEdyOyhmdW5jdGlvbihlKXtlW2UuTm9uZT0wXT0iTm9uZSIsZVtlLkluZGVudD0xXT0iSW5kZW50IixlW2UuSW5kZW50T3V0ZGVudD0yXT0iSW5kZW50T3V0ZGVudCIsZVtlLk91dGRlbnQ9M109Ik91dGRlbnQifSkoR3J8fChHcj17fSkpO3ZhciBYcjsoZnVuY3Rpb24oZSl7ZVtlLkJvdGg9MF09IkJvdGgiLGVbZS5SaWdodD0xXT0iUmlnaHQiLGVbZS5MZWZ0PTJdPSJMZWZ0IixlW2UuTm9uZT0zXT0iTm9uZSJ9KShYcnx8KFhyPXt9KSk7dmFyIEpyOyhmdW5jdGlvbihlKXtlW2UuVHlwZT0xXT0iVHlwZSIsZVtlLlBhcmFtZXRlcj0yXT0iUGFyYW1ldGVyIn0pKEpyfHwoSnI9e30pKTt2YXIgWXI7KGZ1bmN0aW9uKGUpe2VbZS5BdXRvbWF0aWM9MF09IkF1dG9tYXRpYyIsZVtlLkV4cGxpY2l0PTFdPSJFeHBsaWNpdCJ9KShZcnx8KFlyPXt9KSk7dmFyIFFyOyhmdW5jdGlvbihlKXtlW2UuSW52b2tlPTBdPSJJbnZva2UiLGVbZS5BdXRvbWF0aWM9MV09IkF1dG9tYXRpYyJ9KShRcnx8KFFyPXt9KSk7dmFyIEtuOyhmdW5jdGlvbihlKXtlW2UuRGVwZW5kc09uS2JMYXlvdXQ9LTFdPSJEZXBlbmRzT25LYkxheW91dCIsZVtlLlVua25vd249MF09IlVua25vd24iLGVbZS5CYWNrc3BhY2U9MV09IkJhY2tzcGFjZSIsZVtlLlRhYj0yXT0iVGFiIixlW2UuRW50ZXI9M109IkVudGVyIixlW2UuU2hpZnQ9NF09IlNoaWZ0IixlW2UuQ3RybD01XT0iQ3RybCIsZVtlLkFsdD02XT0iQWx0IixlW2UuUGF1c2VCcmVhaz03XT0iUGF1c2VCcmVhayIsZVtlLkNhcHNMb2NrPThdPSJDYXBzTG9jayIsZVtlLkVzY2FwZT05XT0iRXNjYXBlIixlW2UuU3BhY2U9MTBdPSJTcGFjZSIsZVtlLlBhZ2VVcD0xMV09IlBhZ2VVcCIsZVtlLlBhZ2VEb3duPTEyXT0iUGFnZURvd24iLGVbZS5FbmQ9MTNdPSJFbmQiLGVbZS5Ib21lPTE0XT0iSG9tZSIsZVtlLkxlZnRBcnJvdz0xNV09IkxlZnRBcnJvdyIsZVtlLlVwQXJyb3c9MTZdPSJVcEFycm93IixlW2UuUmlnaHRBcnJvdz0xN109IlJpZ2h0QXJyb3ciLGVbZS5Eb3duQXJyb3c9MThdPSJEb3duQXJyb3ciLGVbZS5JbnNlcnQ9MTldPSJJbnNlcnQiLGVbZS5EZWxldGU9MjBdPSJEZWxldGUiLGVbZS5EaWdpdDA9MjFdPSJEaWdpdDAiLGVbZS5EaWdpdDE9MjJdPSJEaWdpdDEiLGVbZS5EaWdpdDI9MjNdPSJEaWdpdDIiLGVbZS5EaWdpdDM9MjRdPSJEaWdpdDMiLGVbZS5EaWdpdDQ9MjVdPSJEaWdpdDQiLGVbZS5EaWdpdDU9MjZdPSJEaWdpdDUiLGVbZS5EaWdpdDY9MjddPSJEaWdpdDYiLGVbZS5EaWdpdDc9MjhdPSJEaWdpdDciLGVbZS5EaWdpdDg9MjldPSJEaWdpdDgiLGVbZS5EaWdpdDk9MzBdPSJEaWdpdDkiLGVbZS5LZXlBPTMxXT0iS2V5QSIsZVtlLktleUI9MzJdPSJLZXlCIixlW2UuS2V5Qz0zM109IktleUMiLGVbZS5LZXlEPTM0XT0iS2V5RCIsZVtlLktleUU9MzVdPSJLZXlFIixlW2UuS2V5Rj0zNl09IktleUYiLGVbZS5LZXlHPTM3XT0iS2V5RyIsZVtlLktleUg9MzhdPSJLZXlIIixlW2UuS2V5ST0zOV09IktleUkiLGVbZS5LZXlKPTQwXT0iS2V5SiIsZVtlLktleUs9NDFdPSJLZXlLIixlW2UuS2V5TD00Ml09IktleUwiLGVbZS5LZXlNPTQzXT0iS2V5TSIsZVtlLktleU49NDRdPSJLZXlOIixlW2UuS2V5Tz00NV09IktleU8iLGVbZS5LZXlQPTQ2XT0iS2V5UCIsZVtlLktleVE9NDddPSJLZXlRIixlW2UuS2V5Uj00OF09IktleVIiLGVbZS5LZXlTPTQ5XT0iS2V5UyIsZVtlLktleVQ9NTBdPSJLZXlUIixlW2UuS2V5VT01MV09IktleVUiLGVbZS5LZXlWPTUyXT0iS2V5ViIsZVtlLktleVc9NTNdPSJLZXlXIixlW2UuS2V5WD01NF09IktleVgiLGVbZS5LZXlZPTU1XT0iS2V5WSIsZVtlLktleVo9NTZdPSJLZXlaIixlW2UuTWV0YT01N109Ik1ldGEiLGVbZS5Db250ZXh0TWVudT01OF09IkNvbnRleHRNZW51IixlW2UuRjE9NTldPSJGMSIsZVtlLkYyPTYwXT0iRjIiLGVbZS5GMz02MV09IkYzIixlW2UuRjQ9NjJdPSJGNCIsZVtlLkY1PTYzXT0iRjUiLGVbZS5GNj02NF09IkY2IixlW2UuRjc9NjVdPSJGNyIsZVtlLkY4PTY2XT0iRjgiLGVbZS5GOT02N109IkY5IixlW2UuRjEwPTY4XT0iRjEwIixlW2UuRjExPTY5XT0iRjExIixlW2UuRjEyPTcwXT0iRjEyIixlW2UuRjEzPTcxXT0iRjEzIixlW2UuRjE0PTcyXT0iRjE0IixlW2UuRjE1PTczXT0iRjE1IixlW2UuRjE2PTc0XT0iRjE2IixlW2UuRjE3PTc1XT0iRjE3IixlW2UuRjE4PTc2XT0iRjE4IixlW2UuRjE5PTc3XT0iRjE5IixlW2UuRjIwPTc4XT0iRjIwIixlW2UuRjIxPTc5XT0iRjIxIixlW2UuRjIyPTgwXT0iRjIyIixlW2UuRjIzPTgxXT0iRjIzIixlW2UuRjI0PTgyXT0iRjI0IixlW2UuTnVtTG9jaz04M109Ik51bUxvY2siLGVbZS5TY3JvbGxMb2NrPTg0XT0iU2Nyb2xsTG9jayIsZVtlLlNlbWljb2xvbj04NV09IlNlbWljb2xvbiIsZVtlLkVxdWFsPTg2XT0iRXF1YWwiLGVbZS5Db21tYT04N109IkNvbW1hIixlW2UuTWludXM9ODhdPSJNaW51cyIsZVtlLlBlcmlvZD04OV09IlBlcmlvZCIsZVtlLlNsYXNoPTkwXT0iU2xhc2giLGVbZS5CYWNrcXVvdGU9OTFdPSJCYWNrcXVvdGUiLGVbZS5CcmFja2V0TGVmdD05Ml09IkJyYWNrZXRMZWZ0IixlW2UuQmFja3NsYXNoPTkzXT0iQmFja3NsYXNoIixlW2UuQnJhY2tldFJpZ2h0PTk0XT0iQnJhY2tldFJpZ2h0IixlW2UuUXVvdGU9OTVdPSJRdW90ZSIsZVtlLk9FTV84PTk2XT0iT0VNXzgiLGVbZS5JbnRsQmFja3NsYXNoPTk3XT0iSW50bEJhY2tzbGFzaCIsZVtlLk51bXBhZDA9OThdPSJOdW1wYWQwIixlW2UuTnVtcGFkMT05OV09Ik51bXBhZDEiLGVbZS5OdW1wYWQyPTEwMF09Ik51bXBhZDIiLGVbZS5OdW1wYWQzPTEwMV09Ik51bXBhZDMiLGVbZS5OdW1wYWQ0PTEwMl09Ik51bXBhZDQiLGVbZS5OdW1wYWQ1PTEwM109Ik51bXBhZDUiLGVbZS5OdW1wYWQ2PTEwNF09Ik51bXBhZDYiLGVbZS5OdW1wYWQ3PTEwNV09Ik51bXBhZDciLGVbZS5OdW1wYWQ4PTEwNl09Ik51bXBhZDgiLGVbZS5OdW1wYWQ5PTEwN109Ik51bXBhZDkiLGVbZS5OdW1wYWRNdWx0aXBseT0xMDhdPSJOdW1wYWRNdWx0aXBseSIsZVtlLk51bXBhZEFkZD0xMDldPSJOdW1wYWRBZGQiLGVbZS5OVU1QQURfU0VQQVJBVE9SPTExMF09Ik5VTVBBRF9TRVBBUkFUT1IiLGVbZS5OdW1wYWRTdWJ0cmFjdD0xMTFdPSJOdW1wYWRTdWJ0cmFjdCIsZVtlLk51bXBhZERlY2ltYWw9MTEyXT0iTnVtcGFkRGVjaW1hbCIsZVtlLk51bXBhZERpdmlkZT0xMTNdPSJOdW1wYWREaXZpZGUiLGVbZS5LRVlfSU5fQ09NUE9TSVRJT049MTE0XT0iS0VZX0lOX0NPTVBPU0lUSU9OIixlW2UuQUJOVF9DMT0xMTVdPSJBQk5UX0MxIixlW2UuQUJOVF9DMj0xMTZdPSJBQk5UX0MyIixlW2UuQXVkaW9Wb2x1bWVNdXRlPTExN109IkF1ZGlvVm9sdW1lTXV0ZSIsZVtlLkF1ZGlvVm9sdW1lVXA9MTE4XT0iQXVkaW9Wb2x1bWVVcCIsZVtlLkF1ZGlvVm9sdW1lRG93bj0xMTldPSJBdWRpb1ZvbHVtZURvd24iLGVbZS5Ccm93c2VyU2VhcmNoPTEyMF09IkJyb3dzZXJTZWFyY2giLGVbZS5Ccm93c2VySG9tZT0xMjFdPSJCcm93c2VySG9tZSIsZVtlLkJyb3dzZXJCYWNrPTEyMl09IkJyb3dzZXJCYWNrIixlW2UuQnJvd3NlckZvcndhcmQ9MTIzXT0iQnJvd3NlckZvcndhcmQiLGVbZS5NZWRpYVRyYWNrTmV4dD0xMjRdPSJNZWRpYVRyYWNrTmV4dCIsZVtlLk1lZGlhVHJhY2tQcmV2aW91cz0xMjVdPSJNZWRpYVRyYWNrUHJldmlvdXMiLGVbZS5NZWRpYVN0b3A9MTI2XT0iTWVkaWFTdG9wIixlW2UuTWVkaWFQbGF5UGF1c2U9MTI3XT0iTWVkaWFQbGF5UGF1c2UiLGVbZS5MYXVuY2hNZWRpYVBsYXllcj0xMjhdPSJMYXVuY2hNZWRpYVBsYXllciIsZVtlLkxhdW5jaE1haWw9MTI5XT0iTGF1bmNoTWFpbCIsZVtlLkxhdW5jaEFwcDI9MTMwXT0iTGF1bmNoQXBwMiIsZVtlLkNsZWFyPTEzMV09IkNsZWFyIixlW2UuTUFYX1ZBTFVFPTEzMl09Ik1BWF9WQUxVRSJ9KShLbnx8KEtuPXt9KSk7dmFyIGVpOyhmdW5jdGlvbihlKXtlW2UuSGludD0xXT0iSGludCIsZVtlLkluZm89Ml09IkluZm8iLGVbZS5XYXJuaW5nPTRdPSJXYXJuaW5nIixlW2UuRXJyb3I9OF09IkVycm9yIn0pKGVpfHwoZWk9e30pKTt2YXIgdGk7KGZ1bmN0aW9uKGUpe2VbZS5Vbm5lY2Vzc2FyeT0xXT0iVW5uZWNlc3NhcnkiLGVbZS5EZXByZWNhdGVkPTJdPSJEZXByZWNhdGVkIn0pKHRpfHwodGk9e30pKTt2YXIgWnI7KGZ1bmN0aW9uKGUpe2VbZS5JbmxpbmU9MV09IklubGluZSIsZVtlLkd1dHRlcj0yXT0iR3V0dGVyIn0pKFpyfHwoWnI9e30pKTt2YXIgS3I7KGZ1bmN0aW9uKGUpe2VbZS5Ob3JtYWw9MV09Ik5vcm1hbCIsZVtlLlVuZGVybGluZWQ9Ml09IlVuZGVybGluZWQifSkoS3J8fChLcj17fSkpO3ZhciBlczsoZnVuY3Rpb24oZSl7ZVtlLlVOS05PV049MF09IlVOS05PV04iLGVbZS5URVhUQVJFQT0xXT0iVEVYVEFSRUEiLGVbZS5HVVRURVJfR0xZUEhfTUFSR0lOPTJdPSJHVVRURVJfR0xZUEhfTUFSR0lOIixlW2UuR1VUVEVSX0xJTkVfTlVNQkVSUz0zXT0iR1VUVEVSX0xJTkVfTlVNQkVSUyIsZVtlLkdVVFRFUl9MSU5FX0RFQ09SQVRJT05TPTRdPSJHVVRURVJfTElORV9ERUNPUkFUSU9OUyIsZVtlLkdVVFRFUl9WSUVXX1pPTkU9NV09IkdVVFRFUl9WSUVXX1pPTkUiLGVbZS5DT05URU5UX1RFWFQ9Nl09IkNPTlRFTlRfVEVYVCIsZVtlLkNPTlRFTlRfRU1QVFk9N109IkNPTlRFTlRfRU1QVFkiLGVbZS5DT05URU5UX1ZJRVdfWk9ORT04XT0iQ09OVEVOVF9WSUVXX1pPTkUiLGVbZS5DT05URU5UX1dJREdFVD05XT0iQ09OVEVOVF9XSURHRVQiLGVbZS5PVkVSVklFV19SVUxFUj0xMF09Ik9WRVJWSUVXX1JVTEVSIixlW2UuU0NST0xMQkFSPTExXT0iU0NST0xMQkFSIixlW2UuT1ZFUkxBWV9XSURHRVQ9MTJdPSJPVkVSTEFZX1dJREdFVCIsZVtlLk9VVFNJREVfRURJVE9SPTEzXT0iT1VUU0lERV9FRElUT1IifSkoZXN8fChlcz17fSkpO3ZhciB0czsoZnVuY3Rpb24oZSl7ZVtlLkFJR2VuZXJhdGVkPTFdPSJBSUdlbmVyYXRlZCJ9KSh0c3x8KHRzPXt9KSk7dmFyIG5zOyhmdW5jdGlvbihlKXtlW2UuSW52b2tlPTBdPSJJbnZva2UiLGVbZS5BdXRvbWF0aWM9MV09IkF1dG9tYXRpYyJ9KShuc3x8KG5zPXt9KSk7dmFyIGlzOyhmdW5jdGlvbihlKXtlW2UuVE9QX1JJR0hUX0NPUk5FUj0wXT0iVE9QX1JJR0hUX0NPUk5FUiIsZVtlLkJPVFRPTV9SSUdIVF9DT1JORVI9MV09IkJPVFRPTV9SSUdIVF9DT1JORVIiLGVbZS5UT1BfQ0VOVEVSPTJdPSJUT1BfQ0VOVEVSIn0pKGlzfHwoaXM9e30pKTt2YXIgcnM7KGZ1bmN0aW9uKGUpe2VbZS5MZWZ0PTFdPSJMZWZ0IixlW2UuQ2VudGVyPTJdPSJDZW50ZXIiLGVbZS5SaWdodD00XT0iUmlnaHQiLGVbZS5GdWxsPTddPSJGdWxsIn0pKHJzfHwocnM9e30pKTt2YXIgc3M7KGZ1bmN0aW9uKGUpe2VbZS5Xb3JkPTBdPSJXb3JkIixlW2UuTGluZT0xXT0iTGluZSIsZVtlLlN1Z2dlc3Q9Ml09IlN1Z2dlc3QifSkoc3N8fChzcz17fSkpO3ZhciBhczsoZnVuY3Rpb24oZSl7ZVtlLkxlZnQ9MF09IkxlZnQiLGVbZS5SaWdodD0xXT0iUmlnaHQiLGVbZS5Ob25lPTJdPSJOb25lIixlW2UuTGVmdE9mSW5qZWN0ZWRUZXh0PTNdPSJMZWZ0T2ZJbmplY3RlZFRleHQiLGVbZS5SaWdodE9mSW5qZWN0ZWRUZXh0PTRdPSJSaWdodE9mSW5qZWN0ZWRUZXh0In0pKGFzfHwoYXM9e30pKTt2YXIgb3M7KGZ1bmN0aW9uKGUpe2VbZS5PZmY9MF09Ik9mZiIsZVtlLk9uPTFdPSJPbiIsZVtlLlJlbGF0aXZlPTJdPSJSZWxhdGl2ZSIsZVtlLkludGVydmFsPTNdPSJJbnRlcnZhbCIsZVtlLkN1c3RvbT00XT0iQ3VzdG9tIn0pKG9zfHwob3M9e30pKTt2YXIgbHM7KGZ1bmN0aW9uKGUpe2VbZS5Ob25lPTBdPSJOb25lIixlW2UuVGV4dD0xXT0iVGV4dCIsZVtlLkJsb2Nrcz0yXT0iQmxvY2tzIn0pKGxzfHwobHM9e30pKTt2YXIgdXM7KGZ1bmN0aW9uKGUpe2VbZS5TbW9vdGg9MF09IlNtb290aCIsZVtlLkltbWVkaWF0ZT0xXT0iSW1tZWRpYXRlIn0pKHVzfHwodXM9e30pKTt2YXIgY3M7KGZ1bmN0aW9uKGUpe2VbZS5BdXRvPTFdPSJBdXRvIixlW2UuSGlkZGVuPTJdPSJIaWRkZW4iLGVbZS5WaXNpYmxlPTNdPSJWaXNpYmxlIn0pKGNzfHwoY3M9e30pKTt2YXIgbmk7KGZ1bmN0aW9uKGUpe2VbZS5MVFI9MF09IkxUUiIsZVtlLlJUTD0xXT0iUlRMIn0pKG5pfHwobmk9e30pKTt2YXIgaHM7KGZ1bmN0aW9uKGUpe2UuT2ZmPSJvZmYiLGUuT25Db2RlPSJvbkNvZGUiLGUuT249Im9uIn0pKGhzfHwoaHM9e30pKTt2YXIgZHM7KGZ1bmN0aW9uKGUpe2VbZS5JbnZva2U9MV09Ikludm9rZSIsZVtlLlRyaWdnZXJDaGFyYWN0ZXI9Ml09IlRyaWdnZXJDaGFyYWN0ZXIiLGVbZS5Db250ZW50Q2hhbmdlPTNdPSJDb250ZW50Q2hhbmdlIn0pKGRzfHwoZHM9e30pKTt2YXIgbXM7KGZ1bmN0aW9uKGUpe2VbZS5GaWxlPTBdPSJGaWxlIixlW2UuTW9kdWxlPTFdPSJNb2R1bGUiLGVbZS5OYW1lc3BhY2U9Ml09Ik5hbWVzcGFjZSIsZVtlLlBhY2thZ2U9M109IlBhY2thZ2UiLGVbZS5DbGFzcz00XT0iQ2xhc3MiLGVbZS5NZXRob2Q9NV09Ik1ldGhvZCIsZVtlLlByb3BlcnR5PTZdPSJQcm9wZXJ0eSIsZVtlLkZpZWxkPTddPSJGaWVsZCIsZVtlLkNvbnN0cnVjdG9yPThdPSJDb25zdHJ1Y3RvciIsZVtlLkVudW09OV09IkVudW0iLGVbZS5JbnRlcmZhY2U9MTBdPSJJbnRlcmZhY2UiLGVbZS5GdW5jdGlvbj0xMV09IkZ1bmN0aW9uIixlW2UuVmFyaWFibGU9MTJdPSJWYXJpYWJsZSIsZVtlLkNvbnN0YW50PTEzXT0iQ29uc3RhbnQiLGVbZS5TdHJpbmc9MTRdPSJTdHJpbmciLGVbZS5OdW1iZXI9MTVdPSJOdW1iZXIiLGVbZS5Cb29sZWFuPTE2XT0iQm9vbGVhbiIsZVtlLkFycmF5PTE3XT0iQXJyYXkiLGVbZS5PYmplY3Q9MThdPSJPYmplY3QiLGVbZS5LZXk9MTldPSJLZXkiLGVbZS5OdWxsPTIwXT0iTnVsbCIsZVtlLkVudW1NZW1iZXI9MjFdPSJFbnVtTWVtYmVyIixlW2UuU3RydWN0PTIyXT0iU3RydWN0IixlW2UuRXZlbnQ9MjNdPSJFdmVudCIsZVtlLk9wZXJhdG9yPTI0XT0iT3BlcmF0b3IiLGVbZS5UeXBlUGFyYW1ldGVyPTI1XT0iVHlwZVBhcmFtZXRlciJ9KShtc3x8KG1zPXt9KSk7dmFyIGZzOyhmdW5jdGlvbihlKXtlW2UuRGVwcmVjYXRlZD0xXT0iRGVwcmVjYXRlZCJ9KShmc3x8KGZzPXt9KSk7dmFyIHBzOyhmdW5jdGlvbihlKXtlW2UuSGlkZGVuPTBdPSJIaWRkZW4iLGVbZS5CbGluaz0xXT0iQmxpbmsiLGVbZS5TbW9vdGg9Ml09IlNtb290aCIsZVtlLlBoYXNlPTNdPSJQaGFzZSIsZVtlLkV4cGFuZD00XT0iRXhwYW5kIixlW2UuU29saWQ9NV09IlNvbGlkIn0pKHBzfHwocHM9e30pKTt2YXIgZ3M7KGZ1bmN0aW9uKGUpe2VbZS5MaW5lPTFdPSJMaW5lIixlW2UuQmxvY2s9Ml09IkJsb2NrIixlW2UuVW5kZXJsaW5lPTNdPSJVbmRlcmxpbmUiLGVbZS5MaW5lVGhpbj00XT0iTGluZVRoaW4iLGVbZS5CbG9ja091dGxpbmU9NV09IkJsb2NrT3V0bGluZSIsZVtlLlVuZGVybGluZVRoaW49Nl09IlVuZGVybGluZVRoaW4ifSkoZ3N8fChncz17fSkpO3ZhciBiczsoZnVuY3Rpb24oZSl7ZVtlLkFsd2F5c0dyb3dzV2hlblR5cGluZ0F0RWRnZXM9MF09IkFsd2F5c0dyb3dzV2hlblR5cGluZ0F0RWRnZXMiLGVbZS5OZXZlckdyb3dzV2hlblR5cGluZ0F0RWRnZXM9MV09Ik5ldmVyR3Jvd3NXaGVuVHlwaW5nQXRFZGdlcyIsZVtlLkdyb3dzT25seVdoZW5UeXBpbmdCZWZvcmU9Ml09Ikdyb3dzT25seVdoZW5UeXBpbmdCZWZvcmUiLGVbZS5Hcm93c09ubHlXaGVuVHlwaW5nQWZ0ZXI9M109Ikdyb3dzT25seVdoZW5UeXBpbmdBZnRlciJ9KShic3x8KGJzPXt9KSk7dmFyIF9zOyhmdW5jdGlvbihlKXtlW2UuTm9uZT0wXT0iTm9uZSIsZVtlLlNhbWU9MV09IlNhbWUiLGVbZS5JbmRlbnQ9Ml09IkluZGVudCIsZVtlLkRlZXBJbmRlbnQ9M109IkRlZXBJbmRlbnQifSkoX3N8fChfcz17fSkpO2NvbnN0IHd0PWNsYXNzIHd0e3N0YXRpYyBjaG9yZCh0LG4pe3JldHVybiB6bCh0LG4pfX07d3QuQ3RybENtZD0yMDQ4LHd0LlNoaWZ0PTEwMjQsd3QuQWx0PTUxMix3dC5XaW5DdHJsPTI1NjtsZXQgaWk9d3Q7ZnVuY3Rpb24gQmwoKXtyZXR1cm57ZWRpdG9yOnZvaWQgMCxsYW5ndWFnZXM6dm9pZCAwLENhbmNlbGxhdGlvblRva2VuU291cmNlOk1sLEVtaXR0ZXI6d2UsS2V5Q29kZTpLbixLZXlNb2Q6aWksUG9zaXRpb246dGUsUmFuZ2U6RyxTZWxlY3Rpb246Z2UsU2VsZWN0aW9uRGlyZWN0aW9uOm5pLE1hcmtlclNldmVyaXR5OmVpLE1hcmtlclRhZzp0aSxVcmk6RWUsVG9rZW46UGx9fWNvbnN0IEh0PWNsYXNzIEh0e3N0YXRpYyBnZXRDaGFubmVsKHQpe3JldHVybiB0LmdldENoYW5uZWwoSHQuQ0hBTk5FTF9OQU1FKX1zdGF0aWMgc2V0Q2hhbm5lbCh0LG4pe3Quc2V0Q2hhbm5lbChIdC5DSEFOTkVMX05BTUUsbil9fTtIdC5DSEFOTkVMX05BTUU9ImVkaXRvcldvcmtlckhvc3QiO2xldCByaT1IdDt2YXIgd3M7Y2xhc3MgcWx7Y29uc3RydWN0b3IoKXt0aGlzW3dzXT0iTGlua2VkTWFwIix0aGlzLl9tYXA9bmV3IE1hcCx0aGlzLl9oZWFkPXZvaWQgMCx0aGlzLl90YWlsPXZvaWQgMCx0aGlzLl9zaXplPTAsdGhpcy5fc3RhdGU9MH1jbGVhcigpe3RoaXMuX21hcC5jbGVhcigpLHRoaXMuX2hlYWQ9dm9pZCAwLHRoaXMuX3RhaWw9dm9pZCAwLHRoaXMuX3NpemU9MCx0aGlzLl9zdGF0ZSsrfWlzRW1wdHkoKXtyZXR1cm4hdGhpcy5faGVhZCYmIXRoaXMuX3RhaWx9Z2V0IHNpemUoKXtyZXR1cm4gdGhpcy5fc2l6ZX1nZXQgZmlyc3QoKXtyZXR1cm4gdGhpcy5faGVhZD8udmFsdWV9Z2V0IGxhc3QoKXtyZXR1cm4gdGhpcy5fdGFpbD8udmFsdWV9aGFzKHQpe3JldHVybiB0aGlzLl9tYXAuaGFzKHQpfWdldCh0LG49MCl7Y29uc3QgaT10aGlzLl9tYXAuZ2V0KHQpO2lmKGkpcmV0dXJuIG4hPT0wJiZ0aGlzLnRvdWNoKGksbiksaS52YWx1ZX1zZXQodCxuLGk9MCl7bGV0IHI9dGhpcy5fbWFwLmdldCh0KTtpZihyKXIudmFsdWU9bixpIT09MCYmdGhpcy50b3VjaChyLGkpO2Vsc2V7c3dpdGNoKHI9e2tleTp0LHZhbHVlOm4sbmV4dDp2b2lkIDAscHJldmlvdXM6dm9pZCAwfSxpKXtjYXNlIDA6dGhpcy5hZGRJdGVtTGFzdChyKTticmVhaztjYXNlIDE6dGhpcy5hZGRJdGVtRmlyc3Qocik7YnJlYWs7Y2FzZSAyOnRoaXMuYWRkSXRlbUxhc3Qocik7YnJlYWs7ZGVmYXVsdDp0aGlzLmFkZEl0ZW1MYXN0KHIpO2JyZWFrfXRoaXMuX21hcC5zZXQodCxyKSx0aGlzLl9zaXplKyt9cmV0dXJuIHRoaXN9ZGVsZXRlKHQpe3JldHVybiEhdGhpcy5yZW1vdmUodCl9cmVtb3ZlKHQpe2NvbnN0IG49dGhpcy5fbWFwLmdldCh0KTtpZihuKXJldHVybiB0aGlzLl9tYXAuZGVsZXRlKHQpLHRoaXMucmVtb3ZlSXRlbShuKSx0aGlzLl9zaXplLS0sbi52YWx1ZX1zaGlmdCgpe2lmKCF0aGlzLl9oZWFkJiYhdGhpcy5fdGFpbClyZXR1cm47aWYoIXRoaXMuX2hlYWR8fCF0aGlzLl90YWlsKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBsaXN0Iik7Y29uc3QgdD10aGlzLl9oZWFkO3JldHVybiB0aGlzLl9tYXAuZGVsZXRlKHQua2V5KSx0aGlzLnJlbW92ZUl0ZW0odCksdGhpcy5fc2l6ZS0tLHQudmFsdWV9Zm9yRWFjaCh0LG4pe2NvbnN0IGk9dGhpcy5fc3RhdGU7bGV0IHI9dGhpcy5faGVhZDtmb3IoO3I7KXtpZihuP3QuYmluZChuKShyLnZhbHVlLHIua2V5LHRoaXMpOnQoci52YWx1ZSxyLmtleSx0aGlzKSx0aGlzLl9zdGF0ZSE9PWkpdGhyb3cgbmV3IEVycm9yKCJMaW5rZWRNYXAgZ290IG1vZGlmaWVkIGR1cmluZyBpdGVyYXRpb24uIik7cj1yLm5leHR9fWtleXMoKXtjb25zdCB0PXRoaXMsbj10aGlzLl9zdGF0ZTtsZXQgaT10aGlzLl9oZWFkO2NvbnN0IHI9e1tTeW1ib2wuaXRlcmF0b3JdKCl7cmV0dXJuIHJ9LG5leHQoKXtpZih0Ll9zdGF0ZSE9PW4pdGhyb3cgbmV3IEVycm9yKCJMaW5rZWRNYXAgZ290IG1vZGlmaWVkIGR1cmluZyBpdGVyYXRpb24uIik7aWYoaSl7Y29uc3Qgcz17dmFsdWU6aS5rZXksZG9uZTohMX07cmV0dXJuIGk9aS5uZXh0LHN9ZWxzZSByZXR1cm57dmFsdWU6dm9pZCAwLGRvbmU6ITB9fX07cmV0dXJuIHJ9dmFsdWVzKCl7Y29uc3QgdD10aGlzLG49dGhpcy5fc3RhdGU7bGV0IGk9dGhpcy5faGVhZDtjb25zdCByPXtbU3ltYm9sLml0ZXJhdG9yXSgpe3JldHVybiByfSxuZXh0KCl7aWYodC5fc3RhdGUhPT1uKXRocm93IG5ldyBFcnJvcigiTGlua2VkTWFwIGdvdCBtb2RpZmllZCBkdXJpbmcgaXRlcmF0aW9uLiIpO2lmKGkpe2NvbnN0IHM9e3ZhbHVlOmkudmFsdWUsZG9uZTohMX07cmV0dXJuIGk9aS5uZXh0LHN9ZWxzZSByZXR1cm57dmFsdWU6dm9pZCAwLGRvbmU6ITB9fX07cmV0dXJuIHJ9ZW50cmllcygpe2NvbnN0IHQ9dGhpcyxuPXRoaXMuX3N0YXRlO2xldCBpPXRoaXMuX2hlYWQ7Y29uc3Qgcj17W1N5bWJvbC5pdGVyYXRvcl0oKXtyZXR1cm4gcn0sbmV4dCgpe2lmKHQuX3N0YXRlIT09bil0aHJvdyBuZXcgRXJyb3IoIkxpbmtlZE1hcCBnb3QgbW9kaWZpZWQgZHVyaW5nIGl0ZXJhdGlvbi4iKTtpZihpKXtjb25zdCBzPXt2YWx1ZTpbaS5rZXksaS52YWx1ZV0sZG9uZTohMX07cmV0dXJuIGk9aS5uZXh0LHN9ZWxzZSByZXR1cm57dmFsdWU6dm9pZCAwLGRvbmU6ITB9fX07cmV0dXJuIHJ9Wyh3cz1TeW1ib2wudG9TdHJpbmdUYWcsU3ltYm9sLml0ZXJhdG9yKV0oKXtyZXR1cm4gdGhpcy5lbnRyaWVzKCl9dHJpbU9sZCh0KXtpZih0Pj10aGlzLnNpemUpcmV0dXJuO2lmKHQ9PT0wKXt0aGlzLmNsZWFyKCk7cmV0dXJufWxldCBuPXRoaXMuX2hlYWQsaT10aGlzLnNpemU7Zm9yKDtuJiZpPnQ7KXRoaXMuX21hcC5kZWxldGUobi5rZXkpLG49bi5uZXh0LGktLTt0aGlzLl9oZWFkPW4sdGhpcy5fc2l6ZT1pLG4mJihuLnByZXZpb3VzPXZvaWQgMCksdGhpcy5fc3RhdGUrK310cmltTmV3KHQpe2lmKHQ+PXRoaXMuc2l6ZSlyZXR1cm47aWYodD09PTApe3RoaXMuY2xlYXIoKTtyZXR1cm59bGV0IG49dGhpcy5fdGFpbCxpPXRoaXMuc2l6ZTtmb3IoO24mJmk+dDspdGhpcy5fbWFwLmRlbGV0ZShuLmtleSksbj1uLnByZXZpb3VzLGktLTt0aGlzLl90YWlsPW4sdGhpcy5fc2l6ZT1pLG4mJihuLm5leHQ9dm9pZCAwKSx0aGlzLl9zdGF0ZSsrfWFkZEl0ZW1GaXJzdCh0KXtpZighdGhpcy5faGVhZCYmIXRoaXMuX3RhaWwpdGhpcy5fdGFpbD10O2Vsc2UgaWYodGhpcy5faGVhZCl0Lm5leHQ9dGhpcy5faGVhZCx0aGlzLl9oZWFkLnByZXZpb3VzPXQ7ZWxzZSB0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgbGlzdCIpO3RoaXMuX2hlYWQ9dCx0aGlzLl9zdGF0ZSsrfWFkZEl0ZW1MYXN0KHQpe2lmKCF0aGlzLl9oZWFkJiYhdGhpcy5fdGFpbCl0aGlzLl9oZWFkPXQ7ZWxzZSBpZih0aGlzLl90YWlsKXQucHJldmlvdXM9dGhpcy5fdGFpbCx0aGlzLl90YWlsLm5leHQ9dDtlbHNlIHRocm93IG5ldyBFcnJvcigiSW52YWxpZCBsaXN0Iik7dGhpcy5fdGFpbD10LHRoaXMuX3N0YXRlKyt9cmVtb3ZlSXRlbSh0KXtpZih0PT09dGhpcy5faGVhZCYmdD09PXRoaXMuX3RhaWwpdGhpcy5faGVhZD12b2lkIDAsdGhpcy5fdGFpbD12b2lkIDA7ZWxzZSBpZih0PT09dGhpcy5faGVhZCl7aWYoIXQubmV4dCl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgbGlzdCIpO3QubmV4dC5wcmV2aW91cz12b2lkIDAsdGhpcy5faGVhZD10Lm5leHR9ZWxzZSBpZih0PT09dGhpcy5fdGFpbCl7aWYoIXQucHJldmlvdXMpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIGxpc3QiKTt0LnByZXZpb3VzLm5leHQ9dm9pZCAwLHRoaXMuX3RhaWw9dC5wcmV2aW91c31lbHNle2NvbnN0IG49dC5uZXh0LGk9dC5wcmV2aW91cztpZighbnx8IWkpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIGxpc3QiKTtuLnByZXZpb3VzPWksaS5uZXh0PW59dC5uZXh0PXZvaWQgMCx0LnByZXZpb3VzPXZvaWQgMCx0aGlzLl9zdGF0ZSsrfXRvdWNoKHQsbil7aWYoIXRoaXMuX2hlYWR8fCF0aGlzLl90YWlsKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBsaXN0Iik7aWYoIShuIT09MSYmbiE9PTIpKXtpZihuPT09MSl7aWYodD09PXRoaXMuX2hlYWQpcmV0dXJuO2NvbnN0IGk9dC5uZXh0LHI9dC5wcmV2aW91czt0PT09dGhpcy5fdGFpbD8oci5uZXh0PXZvaWQgMCx0aGlzLl90YWlsPXIpOihpLnByZXZpb3VzPXIsci5uZXh0PWkpLHQucHJldmlvdXM9dm9pZCAwLHQubmV4dD10aGlzLl9oZWFkLHRoaXMuX2hlYWQucHJldmlvdXM9dCx0aGlzLl9oZWFkPXQsdGhpcy5fc3RhdGUrK31lbHNlIGlmKG49PT0yKXtpZih0PT09dGhpcy5fdGFpbClyZXR1cm47Y29uc3QgaT10Lm5leHQscj10LnByZXZpb3VzO3Q9PT10aGlzLl9oZWFkPyhpLnByZXZpb3VzPXZvaWQgMCx0aGlzLl9oZWFkPWkpOihpLnByZXZpb3VzPXIsci5uZXh0PWkpLHQubmV4dD12b2lkIDAsdC5wcmV2aW91cz10aGlzLl90YWlsLHRoaXMuX3RhaWwubmV4dD10LHRoaXMuX3RhaWw9dCx0aGlzLl9zdGF0ZSsrfX19dG9KU09OKCl7Y29uc3QgdD1bXTtyZXR1cm4gdGhpcy5mb3JFYWNoKChuLGkpPT57dC5wdXNoKFtpLG5dKX0pLHR9ZnJvbUpTT04odCl7dGhpcy5jbGVhcigpO2Zvcihjb25zdFtuLGldb2YgdCl0aGlzLnNldChuLGkpfX1jbGFzcyBPbCBleHRlbmRzIHFse2NvbnN0cnVjdG9yKHQsbj0xKXtzdXBlcigpLHRoaXMuX2xpbWl0PXQsdGhpcy5fcmF0aW89TWF0aC5taW4oTWF0aC5tYXgoMCxuKSwxKX1nZXQgbGltaXQoKXtyZXR1cm4gdGhpcy5fbGltaXR9c2V0IGxpbWl0KHQpe3RoaXMuX2xpbWl0PXQsdGhpcy5jaGVja1RyaW0oKX1nZXQodCxuPTIpe3JldHVybiBzdXBlci5nZXQodCxuKX1wZWVrKHQpe3JldHVybiBzdXBlci5nZXQodCwwKX1zZXQodCxuKXtyZXR1cm4gc3VwZXIuc2V0KHQsbiwyKSx0aGlzfWNoZWNrVHJpbSgpe3RoaXMuc2l6ZT50aGlzLl9saW1pdCYmdGhpcy50cmltKE1hdGgucm91bmQodGhpcy5fbGltaXQqdGhpcy5fcmF0aW8pKX19Y2xhc3MgVmwgZXh0ZW5kcyBPbHtjb25zdHJ1Y3Rvcih0LG49MSl7c3VwZXIodCxuKX10cmltKHQpe3RoaXMudHJpbU9sZCh0KX1zZXQodCxuKXtyZXR1cm4gc3VwZXIuc2V0KHQsbiksdGhpcy5jaGVja1RyaW0oKSx0aGlzfX1jbGFzcyBqbHtjb25zdHJ1Y3Rvcigpe3RoaXMubWFwPW5ldyBNYXB9YWRkKHQsbil7bGV0IGk9dGhpcy5tYXAuZ2V0KHQpO2l8fChpPW5ldyBTZXQsdGhpcy5tYXAuc2V0KHQsaSkpLGkuYWRkKG4pfWRlbGV0ZSh0LG4pe2NvbnN0IGk9dGhpcy5tYXAuZ2V0KHQpO2kmJihpLmRlbGV0ZShuKSxpLnNpemU9PT0wJiZ0aGlzLm1hcC5kZWxldGUodCkpfWZvckVhY2godCxuKXtjb25zdCBpPXRoaXMubWFwLmdldCh0KTtpJiZpLmZvckVhY2gobil9Z2V0KHQpe2NvbnN0IG49dGhpcy5tYXAuZ2V0KHQpO3JldHVybiBufHxuZXcgU2V0fX1uZXcgVmwoMTApO2Z1bmN0aW9uICRsKGUpe2xldCB0PVtdO2Zvcig7T2JqZWN0LnByb3RvdHlwZSE9PWU7KXQ9dC5jb25jYXQoT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoZSkpLGU9T2JqZWN0LmdldFByb3RvdHlwZU9mKGUpO3JldHVybiB0fWZ1bmN0aW9uIHZzKGUpe2NvbnN0IHQ9W107Zm9yKGNvbnN0IG4gb2YgJGwoZSkpdHlwZW9mIGVbbl09PSJmdW5jdGlvbiImJnQucHVzaChuKTtyZXR1cm4gdH1mdW5jdGlvbiBHbChlLHQpe2NvbnN0IG49cj0+ZnVuY3Rpb24oKXtjb25zdCBzPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywwKTtyZXR1cm4gdChyLHMpfSxpPXt9O2Zvcihjb25zdCByIG9mIGUpaVtyXT1uKHIpO3JldHVybiBpfXZhciB5czsoZnVuY3Rpb24oZSl7ZVtlLkxlZnQ9MV09IkxlZnQiLGVbZS5DZW50ZXI9Ml09IkNlbnRlciIsZVtlLlJpZ2h0PTRdPSJSaWdodCIsZVtlLkZ1bGw9N109IkZ1bGwifSkoeXN8fCh5cz17fSkpO3ZhciB4czsoZnVuY3Rpb24oZSl7ZVtlLkxlZnQ9MV09IkxlZnQiLGVbZS5DZW50ZXI9Ml09IkNlbnRlciIsZVtlLlJpZ2h0PTNdPSJSaWdodCJ9KSh4c3x8KHhzPXt9KSk7dmFyIFRzOyhmdW5jdGlvbihlKXtlW2UuQm90aD0wXT0iQm90aCIsZVtlLlJpZ2h0PTFdPSJSaWdodCIsZVtlLkxlZnQ9Ml09IkxlZnQiLGVbZS5Ob25lPTNdPSJOb25lIn0pKFRzfHwoVHM9e30pKTtmdW5jdGlvbiBYbChlLHQsbixpLHIpe2lmKGk9PT0wKXJldHVybiEwO2NvbnN0IHM9dC5jaGFyQ29kZUF0KGktMSk7aWYoZS5nZXQocykhPT0wfHxzPT09MTN8fHM9PT0xMClyZXR1cm4hMDtpZihyPjApe2NvbnN0IGE9dC5jaGFyQ29kZUF0KGkpO2lmKGUuZ2V0KGEpIT09MClyZXR1cm4hMH1yZXR1cm4hMX1mdW5jdGlvbiBKbChlLHQsbixpLHIpe2lmKGkrcj09PW4pcmV0dXJuITA7Y29uc3Qgcz10LmNoYXJDb2RlQXQoaStyKTtpZihlLmdldChzKSE9PTB8fHM9PT0xM3x8cz09PTEwKXJldHVybiEwO2lmKHI+MCl7Y29uc3QgYT10LmNoYXJDb2RlQXQoaStyLTEpO2lmKGUuZ2V0KGEpIT09MClyZXR1cm4hMH1yZXR1cm4hMX1mdW5jdGlvbiBZbChlLHQsbixpLHIpe3JldHVybiBYbChlLHQsbixpLHIpJiZKbChlLHQsbixpLHIpfWNsYXNzIFFse2NvbnN0cnVjdG9yKHQsbil7dGhpcy5fd29yZFNlcGFyYXRvcnM9dCx0aGlzLl9zZWFyY2hSZWdleD1uLHRoaXMuX3ByZXZNYXRjaFN0YXJ0SW5kZXg9LTEsdGhpcy5fcHJldk1hdGNoTGVuZ3RoPTB9cmVzZXQodCl7dGhpcy5fc2VhcmNoUmVnZXgubGFzdEluZGV4PXQsdGhpcy5fcHJldk1hdGNoU3RhcnRJbmRleD0tMSx0aGlzLl9wcmV2TWF0Y2hMZW5ndGg9MH1uZXh0KHQpe2NvbnN0IG49dC5sZW5ndGg7bGV0IGk7ZG97aWYodGhpcy5fcHJldk1hdGNoU3RhcnRJbmRleCt0aGlzLl9wcmV2TWF0Y2hMZW5ndGg9PT1ufHwoaT10aGlzLl9zZWFyY2hSZWdleC5leGVjKHQpLCFpKSlyZXR1cm4gbnVsbDtjb25zdCByPWkuaW5kZXgscz1pWzBdLmxlbmd0aDtpZihyPT09dGhpcy5fcHJldk1hdGNoU3RhcnRJbmRleCYmcz09PXRoaXMuX3ByZXZNYXRjaExlbmd0aCl7aWYocz09PTApe1ZvKHQsbix0aGlzLl9zZWFyY2hSZWdleC5sYXN0SW5kZXgpPjY1NTM1P3RoaXMuX3NlYXJjaFJlZ2V4Lmxhc3RJbmRleCs9Mjp0aGlzLl9zZWFyY2hSZWdleC5sYXN0SW5kZXgrPTE7Y29udGludWV9cmV0dXJuIG51bGx9aWYodGhpcy5fcHJldk1hdGNoU3RhcnRJbmRleD1yLHRoaXMuX3ByZXZNYXRjaExlbmd0aD1zLCF0aGlzLl93b3JkU2VwYXJhdG9yc3x8WWwodGhpcy5fd29yZFNlcGFyYXRvcnMsdCxuLHIscykpcmV0dXJuIGl9d2hpbGUoaSk7cmV0dXJuIG51bGx9fWZ1bmN0aW9uIFpsKGUsdD0iVW5yZWFjaGFibGUiKXt0aHJvdyBuZXcgRXJyb3IodCl9ZnVuY3Rpb24gWnQoZSl7aWYoIWUoKSl7ZGVidWdnZXI7ZSgpLExlKG5ldyBmZSgiQXNzZXJ0aW9uIEZhaWxlZCIpKX19ZnVuY3Rpb24ga3MoZSx0KXtsZXQgbj0wO2Zvcig7bjxlLmxlbmd0aC0xOyl7Y29uc3QgaT1lW25dLHI9ZVtuKzFdO2lmKCF0KGkscikpcmV0dXJuITE7bisrfXJldHVybiEwfWNvbnN0IEtsPSJgfiFAIyQlXiYqKCktPStbe119XFx8OzonXCIsLjw+Lz8iO2Z1bmN0aW9uIGV1KGU9IiIpe2xldCB0PSIoLT9cXGQqXFwuXFxkXFx3Kil8KFteIjtmb3IoY29uc3QgbiBvZiBLbCllLmluZGV4T2Yobik+PTB8fCh0Kz0iXFwiK24pO3JldHVybiB0Kz0iXFxzXSspIixuZXcgUmVnRXhwKHQsImciKX1jb25zdCBBcz1ldSgpO2Z1bmN0aW9uIFNzKGUpe2xldCB0PUFzO2lmKGUmJmUgaW5zdGFuY2VvZiBSZWdFeHApaWYoZS5nbG9iYWwpdD1lO2Vsc2V7bGV0IG49ImciO2UuaWdub3JlQ2FzZSYmKG4rPSJpIiksZS5tdWx0aWxpbmUmJihuKz0ibSIpLGUudW5pY29kZSYmKG4rPSJ1IiksdD1uZXcgUmVnRXhwKGUuc291cmNlLG4pfXJldHVybiB0Lmxhc3RJbmRleD0wLHR9Y29uc3QgTHM9bmV3IHlvO0xzLnVuc2hpZnQoe21heExlbjoxZTMsd2luZG93U2l6ZToxNSx0aW1lQnVkZ2V0OjE1MH0pO2Z1bmN0aW9uIHNpKGUsdCxuLGkscil7aWYodD1Tcyh0KSxyfHwocj1GdC5maXJzdChMcykpLG4ubGVuZ3RoPnIubWF4TGVuKXtsZXQgdT1lLXIubWF4TGVuLzI7cmV0dXJuIHU8MD91PTA6aSs9dSxuPW4uc3Vic3RyaW5nKHUsZStyLm1heExlbi8yKSxzaShlLHQsbixpLHIpfWNvbnN0IHM9RGF0ZS5ub3coKSxhPWUtMS1pO2xldCBsPS0xLG89bnVsbDtmb3IobGV0IHU9MTshKERhdGUubm93KCktcz49ci50aW1lQnVkZ2V0KTt1Kyspe2NvbnN0IGM9YS1yLndpbmRvd1NpemUqdTt0Lmxhc3RJbmRleD1NYXRoLm1heCgwLGMpO2NvbnN0IGQ9dHUodCxuLGEsbCk7aWYoIWQmJm98fChvPWQsYzw9MCkpYnJlYWs7bD1jfWlmKG8pe2NvbnN0IHU9e3dvcmQ6b1swXSxzdGFydENvbHVtbjppKzErby5pbmRleCxlbmRDb2x1bW46aSsxK28uaW5kZXgrb1swXS5sZW5ndGh9O3JldHVybiB0Lmxhc3RJbmRleD0wLHV9cmV0dXJuIG51bGx9ZnVuY3Rpb24gdHUoZSx0LG4saSl7bGV0IHI7Zm9yKDtyPWUuZXhlYyh0KTspe2NvbnN0IHM9ci5pbmRleHx8MDtpZihzPD1uJiZlLmxhc3RJbmRleD49bilyZXR1cm4gcjtpZihpPjAmJnM+aSlyZXR1cm4gbnVsbH1yZXR1cm4gbnVsbH1jbGFzcyBudXtzdGF0aWMgY29tcHV0ZVVuaWNvZGVIaWdobGlnaHRzKHQsbixpKXtjb25zdCByPWk/aS5zdGFydExpbmVOdW1iZXI6MSxzPWk/aS5lbmRMaW5lTnVtYmVyOnQuZ2V0TGluZUNvdW50KCksYT1uZXcgQ3MobiksbD1hLmdldENhbmRpZGF0ZUNvZGVQb2ludHMoKTtsZXQgbztsPT09ImFsbE5vbkJhc2ljQXNjaWkiP289bmV3IFJlZ0V4cCgiW15cXHRcXG5cXHJcXHgyMC1cXHg3RV0iLCJnIik6bz1uZXcgUmVnRXhwKGAke2l1KEFycmF5LmZyb20obCkpfWAsImciKTtjb25zdCB1PW5ldyBRbChudWxsLG8pLGM9W107bGV0IGQ9ITEsbSxmPTAsXz0wLGc9MDtlOmZvcihsZXQgaz1yLHk9cztrPD15O2srKyl7Y29uc3Qgdj10LmdldExpbmVDb250ZW50KGspLEU9di5sZW5ndGg7dS5yZXNldCgwKTtkbyBpZihtPXUubmV4dCh2KSxtKXtsZXQgTT1tLmluZGV4LEQ9bS5pbmRleCttWzBdLmxlbmd0aDtpZihNPjApe2NvbnN0IHg9di5jaGFyQ29kZUF0KE0tMSk7VnQoeCkmJk0tLX1pZihEKzE8RSl7Y29uc3QgeD12LmNoYXJDb2RlQXQoRC0xKTtWdCh4KSYmRCsrfWNvbnN0IE49di5zdWJzdHJpbmcoTSxEKTtsZXQgYj1zaShNKzEsQXMsdiwwKTtiJiZiLmVuZENvbHVtbjw9TSsxJiYoYj1udWxsKTtjb25zdCBwPWEuc2hvdWxkSGlnaGxpZ2h0Tm9uQmFzaWNBU0NJSShOLGI/Yi53b3JkOm51bGwpO2lmKHAhPT0wKXtpZihwPT09Mz9mKys6cD09PTI/XysrOnA9PT0xP2crKzpabCgpLGMubGVuZ3RoPj0xZTMpe2Q9ITA7YnJlYWsgZX1jLnB1c2gobmV3IEcoayxNKzEsayxEKzEpKX19d2hpbGUobSl9cmV0dXJue3JhbmdlczpjLGhhc01vcmU6ZCxhbWJpZ3VvdXNDaGFyYWN0ZXJDb3VudDpmLGludmlzaWJsZUNoYXJhY3RlckNvdW50Ol8sbm9uQmFzaWNBc2NpaUNoYXJhY3RlckNvdW50Omd9fXN0YXRpYyBjb21wdXRlVW5pY29kZUhpZ2hsaWdodFJlYXNvbih0LG4pe2NvbnN0IGk9bmV3IENzKG4pO3N3aXRjaChpLnNob3VsZEhpZ2hsaWdodE5vbkJhc2ljQVNDSUkodCxudWxsKSl7Y2FzZSAwOnJldHVybiBudWxsO2Nhc2UgMjpyZXR1cm57a2luZDoxfTtjYXNlIDM6e2NvbnN0IHM9dC5jb2RlUG9pbnRBdCgwKSxhPWkuYW1iaWd1b3VzQ2hhcmFjdGVycy5nZXRQcmltYXJ5Q29uZnVzYWJsZShzKSxsPVR0LmdldExvY2FsZXMoKS5maWx0ZXIobz0+IVR0LmdldEluc3RhbmNlKG5ldyBTZXQoWy4uLm4uYWxsb3dlZExvY2FsZXMsb10pKS5pc0FtYmlndW91cyhzKSk7cmV0dXJue2tpbmQ6MCxjb25mdXNhYmxlV2l0aDpTdHJpbmcuZnJvbUNvZGVQb2ludChhKSxub3RBbWJpZ3VvdXNJbkxvY2FsZXM6bH19Y2FzZSAxOnJldHVybntraW5kOjJ9fX19ZnVuY3Rpb24gaXUoZSx0KXtyZXR1cm5gWyR7UG8oZS5tYXAoaT0+U3RyaW5nLmZyb21Db2RlUG9pbnQoaSkpLmpvaW4oIiIpKX1dYH1jbGFzcyBDc3tjb25zdHJ1Y3Rvcih0KXt0aGlzLm9wdGlvbnM9dCx0aGlzLmFsbG93ZWRDb2RlUG9pbnRzPW5ldyBTZXQodC5hbGxvd2VkQ29kZVBvaW50cyksdGhpcy5hbWJpZ3VvdXNDaGFyYWN0ZXJzPVR0LmdldEluc3RhbmNlKG5ldyBTZXQodC5hbGxvd2VkTG9jYWxlcykpfWdldENhbmRpZGF0ZUNvZGVQb2ludHMoKXtpZih0aGlzLm9wdGlvbnMubm9uQmFzaWNBU0NJSSlyZXR1cm4iYWxsTm9uQmFzaWNBc2NpaSI7Y29uc3QgdD1uZXcgU2V0O2lmKHRoaXMub3B0aW9ucy5pbnZpc2libGVDaGFyYWN0ZXJzKWZvcihjb25zdCBuIG9mIGt0LmNvZGVQb2ludHMpRXMoU3RyaW5nLmZyb21Db2RlUG9pbnQobikpfHx0LmFkZChuKTtpZih0aGlzLm9wdGlvbnMuYW1iaWd1b3VzQ2hhcmFjdGVycylmb3IoY29uc3QgbiBvZiB0aGlzLmFtYmlndW91c0NoYXJhY3RlcnMuZ2V0Q29uZnVzYWJsZUNvZGVQb2ludHMoKSl0LmFkZChuKTtmb3IoY29uc3QgbiBvZiB0aGlzLmFsbG93ZWRDb2RlUG9pbnRzKXQuZGVsZXRlKG4pO3JldHVybiB0fXNob3VsZEhpZ2hsaWdodE5vbkJhc2ljQVNDSUkodCxuKXtjb25zdCBpPXQuY29kZVBvaW50QXQoMCk7aWYodGhpcy5hbGxvd2VkQ29kZVBvaW50cy5oYXMoaSkpcmV0dXJuIDA7aWYodGhpcy5vcHRpb25zLm5vbkJhc2ljQVNDSUkpcmV0dXJuIDE7bGV0IHI9ITEscz0hMTtpZihuKWZvcihjb25zdCBhIG9mIG4pe2NvbnN0IGw9YS5jb2RlUG9pbnRBdCgwKSxvPSRvKGEpO3I9cnx8bywhbyYmIXRoaXMuYW1iaWd1b3VzQ2hhcmFjdGVycy5pc0FtYmlndW91cyhsKSYmIWt0LmlzSW52aXNpYmxlQ2hhcmFjdGVyKGwpJiYocz0hMCl9cmV0dXJuIXImJnM/MDp0aGlzLm9wdGlvbnMuaW52aXNpYmxlQ2hhcmFjdGVycyYmIUVzKHQpJiZrdC5pc0ludmlzaWJsZUNoYXJhY3RlcihpKT8yOnRoaXMub3B0aW9ucy5hbWJpZ3VvdXNDaGFyYWN0ZXJzJiZ0aGlzLmFtYmlndW91c0NoYXJhY3RlcnMuaXNBbWJpZ3VvdXMoaSk/MzowfX1mdW5jdGlvbiBFcyhlKXtyZXR1cm4gZT09PSIgInx8ZT09PWAKYHx8ZT09PSIJIn1jbGFzcyBLdHtjb25zdHJ1Y3Rvcih0LG4saSl7dGhpcy5jaGFuZ2VzPXQsdGhpcy5tb3Zlcz1uLHRoaXMuaGl0VGltZW91dD1pfX1jbGFzcyBydXtjb25zdHJ1Y3Rvcih0LG4pe3RoaXMubGluZVJhbmdlTWFwcGluZz10LHRoaXMuY2hhbmdlcz1ufX1jbGFzcyBqe3N0YXRpYyBhZGRSYW5nZSh0LG4pe2xldCBpPTA7Zm9yKDtpPG4ubGVuZ3RoJiZuW2ldLmVuZEV4Y2x1c2l2ZTx0LnN0YXJ0OylpKys7bGV0IHI9aTtmb3IoO3I8bi5sZW5ndGgmJm5bcl0uc3RhcnQ8PXQuZW5kRXhjbHVzaXZlOylyKys7aWYoaT09PXIpbi5zcGxpY2UoaSwwLHQpO2Vsc2V7Y29uc3Qgcz1NYXRoLm1pbih0LnN0YXJ0LG5baV0uc3RhcnQpLGE9TWF0aC5tYXgodC5lbmRFeGNsdXNpdmUsbltyLTFdLmVuZEV4Y2x1c2l2ZSk7bi5zcGxpY2UoaSxyLWksbmV3IGoocyxhKSl9fXN0YXRpYyB0cnlDcmVhdGUodCxuKXtpZighKHQ+bikpcmV0dXJuIG5ldyBqKHQsbil9c3RhdGljIG9mTGVuZ3RoKHQpe3JldHVybiBuZXcgaigwLHQpfXN0YXRpYyBvZlN0YXJ0QW5kTGVuZ3RoKHQsbil7cmV0dXJuIG5ldyBqKHQsdCtuKX1jb25zdHJ1Y3Rvcih0LG4pe2lmKHRoaXMuc3RhcnQ9dCx0aGlzLmVuZEV4Y2x1c2l2ZT1uLHQ+bil0aHJvdyBuZXcgZmUoYEludmFsaWQgcmFuZ2U6ICR7dGhpcy50b1N0cmluZygpfWApfWdldCBpc0VtcHR5KCl7cmV0dXJuIHRoaXMuc3RhcnQ9PT10aGlzLmVuZEV4Y2x1c2l2ZX1kZWx0YSh0KXtyZXR1cm4gbmV3IGoodGhpcy5zdGFydCt0LHRoaXMuZW5kRXhjbHVzaXZlK3QpfWRlbHRhU3RhcnQodCl7cmV0dXJuIG5ldyBqKHRoaXMuc3RhcnQrdCx0aGlzLmVuZEV4Y2x1c2l2ZSl9ZGVsdGFFbmQodCl7cmV0dXJuIG5ldyBqKHRoaXMuc3RhcnQsdGhpcy5lbmRFeGNsdXNpdmUrdCl9Z2V0IGxlbmd0aCgpe3JldHVybiB0aGlzLmVuZEV4Y2x1c2l2ZS10aGlzLnN0YXJ0fXRvU3RyaW5nKCl7cmV0dXJuYFske3RoaXMuc3RhcnR9LCAke3RoaXMuZW5kRXhjbHVzaXZlfSlgfWNvbnRhaW5zKHQpe3JldHVybiB0aGlzLnN0YXJ0PD10JiZ0PHRoaXMuZW5kRXhjbHVzaXZlfWpvaW4odCl7cmV0dXJuIG5ldyBqKE1hdGgubWluKHRoaXMuc3RhcnQsdC5zdGFydCksTWF0aC5tYXgodGhpcy5lbmRFeGNsdXNpdmUsdC5lbmRFeGNsdXNpdmUpKX1pbnRlcnNlY3QodCl7Y29uc3Qgbj1NYXRoLm1heCh0aGlzLnN0YXJ0LHQuc3RhcnQpLGk9TWF0aC5taW4odGhpcy5lbmRFeGNsdXNpdmUsdC5lbmRFeGNsdXNpdmUpO2lmKG48PWkpcmV0dXJuIG5ldyBqKG4saSl9aW50ZXJzZWN0cyh0KXtjb25zdCBuPU1hdGgubWF4KHRoaXMuc3RhcnQsdC5zdGFydCksaT1NYXRoLm1pbih0aGlzLmVuZEV4Y2x1c2l2ZSx0LmVuZEV4Y2x1c2l2ZSk7cmV0dXJuIG48aX1pc0JlZm9yZSh0KXtyZXR1cm4gdGhpcy5lbmRFeGNsdXNpdmU8PXQuc3RhcnR9aXNBZnRlcih0KXtyZXR1cm4gdGhpcy5zdGFydD49dC5lbmRFeGNsdXNpdmV9c2xpY2UodCl7cmV0dXJuIHQuc2xpY2UodGhpcy5zdGFydCx0aGlzLmVuZEV4Y2x1c2l2ZSl9c3Vic3RyaW5nKHQpe3JldHVybiB0LnN1YnN0cmluZyh0aGlzLnN0YXJ0LHRoaXMuZW5kRXhjbHVzaXZlKX1jbGlwKHQpe2lmKHRoaXMuaXNFbXB0eSl0aHJvdyBuZXcgZmUoYEludmFsaWQgY2xpcHBpbmcgcmFuZ2U6ICR7dGhpcy50b1N0cmluZygpfWApO3JldHVybiBNYXRoLm1heCh0aGlzLnN0YXJ0LE1hdGgubWluKHRoaXMuZW5kRXhjbHVzaXZlLTEsdCkpfWNsaXBDeWNsaWModCl7aWYodGhpcy5pc0VtcHR5KXRocm93IG5ldyBmZShgSW52YWxpZCBjbGlwcGluZyByYW5nZTogJHt0aGlzLnRvU3RyaW5nKCl9YCk7cmV0dXJuIHQ8dGhpcy5zdGFydD90aGlzLmVuZEV4Y2x1c2l2ZS0odGhpcy5zdGFydC10KSV0aGlzLmxlbmd0aDp0Pj10aGlzLmVuZEV4Y2x1c2l2ZT90aGlzLnN0YXJ0Kyh0LXRoaXMuc3RhcnQpJXRoaXMubGVuZ3RoOnR9Zm9yRWFjaCh0KXtmb3IobGV0IG49dGhpcy5zdGFydDtuPHRoaXMuZW5kRXhjbHVzaXZlO24rKyl0KG4pfX1mdW5jdGlvbiBjdChlLHQpe2NvbnN0IG49THQoZSx0KTtyZXR1cm4gbj09PS0xP3ZvaWQgMDplW25dfWZ1bmN0aW9uIEx0KGUsdCxuPTAsaT1lLmxlbmd0aCl7bGV0IHI9bixzPWk7Zm9yKDtyPHM7KXtjb25zdCBhPU1hdGguZmxvb3IoKHIrcykvMik7dChlW2FdKT9yPWErMTpzPWF9cmV0dXJuIHItMX1mdW5jdGlvbiBzdShlLHQpe2NvbnN0IG49YWkoZSx0KTtyZXR1cm4gbj09PWUubGVuZ3RoP3ZvaWQgMDplW25dfWZ1bmN0aW9uIGFpKGUsdCxuPTAsaT1lLmxlbmd0aCl7bGV0IHI9bixzPWk7Zm9yKDtyPHM7KXtjb25zdCBhPU1hdGguZmxvb3IoKHIrcykvMik7dChlW2FdKT9zPWE6cj1hKzF9cmV0dXJuIHJ9Y29uc3QgVG49Y2xhc3MgVG57Y29uc3RydWN0b3IodCl7dGhpcy5fYXJyYXk9dCx0aGlzLl9maW5kTGFzdE1vbm90b25vdXNMYXN0SWR4PTB9ZmluZExhc3RNb25vdG9ub3VzKHQpe2lmKFRuLmFzc2VydEludmFyaWFudHMpe2lmKHRoaXMuX3ByZXZGaW5kTGFzdFByZWRpY2F0ZSl7Zm9yKGNvbnN0IGkgb2YgdGhpcy5fYXJyYXkpaWYodGhpcy5fcHJldkZpbmRMYXN0UHJlZGljYXRlKGkpJiYhdChpKSl0aHJvdyBuZXcgRXJyb3IoIk1vbm90b25vdXNBcnJheTogY3VycmVudCBwcmVkaWNhdGUgbXVzdCBiZSB3ZWFrZXIgdGhhbiAob3IgZXF1YWwgdG8pIHRoZSBwcmV2aW91cyBwcmVkaWNhdGUuIil9dGhpcy5fcHJldkZpbmRMYXN0UHJlZGljYXRlPXR9Y29uc3Qgbj1MdCh0aGlzLl9hcnJheSx0LHRoaXMuX2ZpbmRMYXN0TW9ub3Rvbm91c0xhc3RJZHgpO3JldHVybiB0aGlzLl9maW5kTGFzdE1vbm90b25vdXNMYXN0SWR4PW4rMSxuPT09LTE/dm9pZCAwOnRoaXMuX2FycmF5W25dfX07VG4uYXNzZXJ0SW52YXJpYW50cz0hMTtsZXQgZW49VG47Y2xhc3MgT3tzdGF0aWMgZnJvbVJhbmdlSW5jbHVzaXZlKHQpe3JldHVybiBuZXcgTyh0LnN0YXJ0TGluZU51bWJlcix0LmVuZExpbmVOdW1iZXIrMSl9c3RhdGljIGpvaW5NYW55KHQpe2lmKHQubGVuZ3RoPT09MClyZXR1cm5bXTtsZXQgbj1uZXcgUmUodFswXS5zbGljZSgpKTtmb3IobGV0IGk9MTtpPHQubGVuZ3RoO2krKyluPW4uZ2V0VW5pb24obmV3IFJlKHRbaV0uc2xpY2UoKSkpO3JldHVybiBuLnJhbmdlc31zdGF0aWMgam9pbih0KXtpZih0Lmxlbmd0aD09PTApdGhyb3cgbmV3IGZlKCJsaW5lUmFuZ2VzIGNhbm5vdCBiZSBlbXB0eSIpO2xldCBuPXRbMF0uc3RhcnRMaW5lTnVtYmVyLGk9dFswXS5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlO2ZvcihsZXQgcj0xO3I8dC5sZW5ndGg7cisrKW49TWF0aC5taW4obix0W3JdLnN0YXJ0TGluZU51bWJlciksaT1NYXRoLm1heChpLHRbcl0uZW5kTGluZU51bWJlckV4Y2x1c2l2ZSk7cmV0dXJuIG5ldyBPKG4saSl9c3RhdGljIG9mTGVuZ3RoKHQsbil7cmV0dXJuIG5ldyBPKHQsdCtuKX1zdGF0aWMgZGVzZXJpYWxpemUodCl7cmV0dXJuIG5ldyBPKHRbMF0sdFsxXSl9Y29uc3RydWN0b3IodCxuKXtpZih0Pm4pdGhyb3cgbmV3IGZlKGBzdGFydExpbmVOdW1iZXIgJHt0fSBjYW5ub3QgYmUgYWZ0ZXIgZW5kTGluZU51bWJlckV4Y2x1c2l2ZSAke259YCk7dGhpcy5zdGFydExpbmVOdW1iZXI9dCx0aGlzLmVuZExpbmVOdW1iZXJFeGNsdXNpdmU9bn1jb250YWlucyh0KXtyZXR1cm4gdGhpcy5zdGFydExpbmVOdW1iZXI8PXQmJnQ8dGhpcy5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlfWdldCBpc0VtcHR5KCl7cmV0dXJuIHRoaXMuc3RhcnRMaW5lTnVtYmVyPT09dGhpcy5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlfWRlbHRhKHQpe3JldHVybiBuZXcgTyh0aGlzLnN0YXJ0TGluZU51bWJlcit0LHRoaXMuZW5kTGluZU51bWJlckV4Y2x1c2l2ZSt0KX1kZWx0YUxlbmd0aCh0KXtyZXR1cm4gbmV3IE8odGhpcy5zdGFydExpbmVOdW1iZXIsdGhpcy5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlK3QpfWdldCBsZW5ndGgoKXtyZXR1cm4gdGhpcy5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlLXRoaXMuc3RhcnRMaW5lTnVtYmVyfWpvaW4odCl7cmV0dXJuIG5ldyBPKE1hdGgubWluKHRoaXMuc3RhcnRMaW5lTnVtYmVyLHQuc3RhcnRMaW5lTnVtYmVyKSxNYXRoLm1heCh0aGlzLmVuZExpbmVOdW1iZXJFeGNsdXNpdmUsdC5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlKSl9dG9TdHJpbmcoKXtyZXR1cm5gWyR7dGhpcy5zdGFydExpbmVOdW1iZXJ9LCR7dGhpcy5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlfSlgfWludGVyc2VjdCh0KXtjb25zdCBuPU1hdGgubWF4KHRoaXMuc3RhcnRMaW5lTnVtYmVyLHQuc3RhcnRMaW5lTnVtYmVyKSxpPU1hdGgubWluKHRoaXMuZW5kTGluZU51bWJlckV4Y2x1c2l2ZSx0LmVuZExpbmVOdW1iZXJFeGNsdXNpdmUpO2lmKG48PWkpcmV0dXJuIG5ldyBPKG4saSl9aW50ZXJzZWN0c1N0cmljdCh0KXtyZXR1cm4gdGhpcy5zdGFydExpbmVOdW1iZXI8dC5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlJiZ0LnN0YXJ0TGluZU51bWJlcjx0aGlzLmVuZExpbmVOdW1iZXJFeGNsdXNpdmV9b3ZlcmxhcE9yVG91Y2godCl7cmV0dXJuIHRoaXMuc3RhcnRMaW5lTnVtYmVyPD10LmVuZExpbmVOdW1iZXJFeGNsdXNpdmUmJnQuc3RhcnRMaW5lTnVtYmVyPD10aGlzLmVuZExpbmVOdW1iZXJFeGNsdXNpdmV9ZXF1YWxzKHQpe3JldHVybiB0aGlzLnN0YXJ0TGluZU51bWJlcj09PXQuc3RhcnRMaW5lTnVtYmVyJiZ0aGlzLmVuZExpbmVOdW1iZXJFeGNsdXNpdmU9PT10LmVuZExpbmVOdW1iZXJFeGNsdXNpdmV9dG9JbmNsdXNpdmVSYW5nZSgpe3JldHVybiB0aGlzLmlzRW1wdHk/bnVsbDpuZXcgRyh0aGlzLnN0YXJ0TGluZU51bWJlciwxLHRoaXMuZW5kTGluZU51bWJlckV4Y2x1c2l2ZS0xLE51bWJlci5NQVhfU0FGRV9JTlRFR0VSKX10b0V4Y2x1c2l2ZVJhbmdlKCl7cmV0dXJuIG5ldyBHKHRoaXMuc3RhcnRMaW5lTnVtYmVyLDEsdGhpcy5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlLDEpfW1hcFRvTGluZUFycmF5KHQpe2NvbnN0IG49W107Zm9yKGxldCBpPXRoaXMuc3RhcnRMaW5lTnVtYmVyO2k8dGhpcy5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlO2krKyluLnB1c2godChpKSk7cmV0dXJuIG59Zm9yRWFjaCh0KXtmb3IobGV0IG49dGhpcy5zdGFydExpbmVOdW1iZXI7bjx0aGlzLmVuZExpbmVOdW1iZXJFeGNsdXNpdmU7bisrKXQobil9c2VyaWFsaXplKCl7cmV0dXJuW3RoaXMuc3RhcnRMaW5lTnVtYmVyLHRoaXMuZW5kTGluZU51bWJlckV4Y2x1c2l2ZV19aW5jbHVkZXModCl7cmV0dXJuIHRoaXMuc3RhcnRMaW5lTnVtYmVyPD10JiZ0PHRoaXMuZW5kTGluZU51bWJlckV4Y2x1c2l2ZX10b09mZnNldFJhbmdlKCl7cmV0dXJuIG5ldyBqKHRoaXMuc3RhcnRMaW5lTnVtYmVyLTEsdGhpcy5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlLTEpfX1jbGFzcyBSZXtjb25zdHJ1Y3Rvcih0PVtdKXt0aGlzLl9ub3JtYWxpemVkUmFuZ2VzPXR9Z2V0IHJhbmdlcygpe3JldHVybiB0aGlzLl9ub3JtYWxpemVkUmFuZ2VzfWFkZFJhbmdlKHQpe2lmKHQubGVuZ3RoPT09MClyZXR1cm47Y29uc3Qgbj1haSh0aGlzLl9ub3JtYWxpemVkUmFuZ2VzLHI9PnIuZW5kTGluZU51bWJlckV4Y2x1c2l2ZT49dC5zdGFydExpbmVOdW1iZXIpLGk9THQodGhpcy5fbm9ybWFsaXplZFJhbmdlcyxyPT5yLnN0YXJ0TGluZU51bWJlcjw9dC5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlKSsxO2lmKG49PT1pKXRoaXMuX25vcm1hbGl6ZWRSYW5nZXMuc3BsaWNlKG4sMCx0KTtlbHNlIGlmKG49PT1pLTEpe2NvbnN0IHI9dGhpcy5fbm9ybWFsaXplZFJhbmdlc1tuXTt0aGlzLl9ub3JtYWxpemVkUmFuZ2VzW25dPXIuam9pbih0KX1lbHNle2NvbnN0IHI9dGhpcy5fbm9ybWFsaXplZFJhbmdlc1tuXS5qb2luKHRoaXMuX25vcm1hbGl6ZWRSYW5nZXNbaS0xXSkuam9pbih0KTt0aGlzLl9ub3JtYWxpemVkUmFuZ2VzLnNwbGljZShuLGktbixyKX19Y29udGFpbnModCl7Y29uc3Qgbj1jdCh0aGlzLl9ub3JtYWxpemVkUmFuZ2VzLGk9Pmkuc3RhcnRMaW5lTnVtYmVyPD10KTtyZXR1cm4hIW4mJm4uZW5kTGluZU51bWJlckV4Y2x1c2l2ZT50fWludGVyc2VjdHModCl7Y29uc3Qgbj1jdCh0aGlzLl9ub3JtYWxpemVkUmFuZ2VzLGk9Pmkuc3RhcnRMaW5lTnVtYmVyPHQuZW5kTGluZU51bWJlckV4Y2x1c2l2ZSk7cmV0dXJuISFuJiZuLmVuZExpbmVOdW1iZXJFeGNsdXNpdmU+dC5zdGFydExpbmVOdW1iZXJ9Z2V0VW5pb24odCl7aWYodGhpcy5fbm9ybWFsaXplZFJhbmdlcy5sZW5ndGg9PT0wKXJldHVybiB0O2lmKHQuX25vcm1hbGl6ZWRSYW5nZXMubGVuZ3RoPT09MClyZXR1cm4gdGhpcztjb25zdCBuPVtdO2xldCBpPTAscj0wLHM9bnVsbDtmb3IoO2k8dGhpcy5fbm9ybWFsaXplZFJhbmdlcy5sZW5ndGh8fHI8dC5fbm9ybWFsaXplZFJhbmdlcy5sZW5ndGg7KXtsZXQgYT1udWxsO2lmKGk8dGhpcy5fbm9ybWFsaXplZFJhbmdlcy5sZW5ndGgmJnI8dC5fbm9ybWFsaXplZFJhbmdlcy5sZW5ndGgpe2NvbnN0IGw9dGhpcy5fbm9ybWFsaXplZFJhbmdlc1tpXSxvPXQuX25vcm1hbGl6ZWRSYW5nZXNbcl07bC5zdGFydExpbmVOdW1iZXI8by5zdGFydExpbmVOdW1iZXI/KGE9bCxpKyspOihhPW8scisrKX1lbHNlIGk8dGhpcy5fbm9ybWFsaXplZFJhbmdlcy5sZW5ndGg/KGE9dGhpcy5fbm9ybWFsaXplZFJhbmdlc1tpXSxpKyspOihhPXQuX25vcm1hbGl6ZWRSYW5nZXNbcl0scisrKTtzPT09bnVsbD9zPWE6cy5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlPj1hLnN0YXJ0TGluZU51bWJlcj9zPW5ldyBPKHMuc3RhcnRMaW5lTnVtYmVyLE1hdGgubWF4KHMuZW5kTGluZU51bWJlckV4Y2x1c2l2ZSxhLmVuZExpbmVOdW1iZXJFeGNsdXNpdmUpKToobi5wdXNoKHMpLHM9YSl9cmV0dXJuIHMhPT1udWxsJiZuLnB1c2gocyksbmV3IFJlKG4pfXN1YnRyYWN0RnJvbSh0KXtjb25zdCBuPWFpKHRoaXMuX25vcm1hbGl6ZWRSYW5nZXMsYT0+YS5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlPj10LnN0YXJ0TGluZU51bWJlciksaT1MdCh0aGlzLl9ub3JtYWxpemVkUmFuZ2VzLGE9PmEuc3RhcnRMaW5lTnVtYmVyPD10LmVuZExpbmVOdW1iZXJFeGNsdXNpdmUpKzE7aWYobj09PWkpcmV0dXJuIG5ldyBSZShbdF0pO2NvbnN0IHI9W107bGV0IHM9dC5zdGFydExpbmVOdW1iZXI7Zm9yKGxldCBhPW47YTxpO2ErKyl7Y29uc3QgbD10aGlzLl9ub3JtYWxpemVkUmFuZ2VzW2FdO2wuc3RhcnRMaW5lTnVtYmVyPnMmJnIucHVzaChuZXcgTyhzLGwuc3RhcnRMaW5lTnVtYmVyKSkscz1sLmVuZExpbmVOdW1iZXJFeGNsdXNpdmV9cmV0dXJuIHM8dC5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlJiZyLnB1c2gobmV3IE8ocyx0LmVuZExpbmVOdW1iZXJFeGNsdXNpdmUpKSxuZXcgUmUocil9dG9TdHJpbmcoKXtyZXR1cm4gdGhpcy5fbm9ybWFsaXplZFJhbmdlcy5tYXAodD0+dC50b1N0cmluZygpKS5qb2luKCIsICIpfWdldEludGVyc2VjdGlvbih0KXtjb25zdCBuPVtdO2xldCBpPTAscj0wO2Zvcig7aTx0aGlzLl9ub3JtYWxpemVkUmFuZ2VzLmxlbmd0aCYmcjx0Ll9ub3JtYWxpemVkUmFuZ2VzLmxlbmd0aDspe2NvbnN0IHM9dGhpcy5fbm9ybWFsaXplZFJhbmdlc1tpXSxhPXQuX25vcm1hbGl6ZWRSYW5nZXNbcl0sbD1zLmludGVyc2VjdChhKTtsJiYhbC5pc0VtcHR5JiZuLnB1c2gobCkscy5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlPGEuZW5kTGluZU51bWJlckV4Y2x1c2l2ZT9pKys6cisrfXJldHVybiBuZXcgUmUobil9Z2V0V2l0aERlbHRhKHQpe3JldHVybiBuZXcgUmUodGhpcy5fbm9ybWFsaXplZFJhbmdlcy5tYXAobj0+bi5kZWx0YSh0KSkpfX1jb25zdCBZZT1jbGFzcyBZZXtzdGF0aWMgYmV0d2VlblBvc2l0aW9ucyh0LG4pe3JldHVybiB0LmxpbmVOdW1iZXI9PT1uLmxpbmVOdW1iZXI/bmV3IFllKDAsbi5jb2x1bW4tdC5jb2x1bW4pOm5ldyBZZShuLmxpbmVOdW1iZXItdC5saW5lTnVtYmVyLG4uY29sdW1uLTEpfXN0YXRpYyBvZlJhbmdlKHQpe3JldHVybiBZZS5iZXR3ZWVuUG9zaXRpb25zKHQuZ2V0U3RhcnRQb3NpdGlvbigpLHQuZ2V0RW5kUG9zaXRpb24oKSl9c3RhdGljIG9mVGV4dCh0KXtsZXQgbj0wLGk9MDtmb3IoY29uc3QgciBvZiB0KXI9PT1gCmA/KG4rKyxpPTApOmkrKztyZXR1cm4gbmV3IFllKG4saSl9Y29uc3RydWN0b3IodCxuKXt0aGlzLmxpbmVDb3VudD10LHRoaXMuY29sdW1uQ291bnQ9bn1pc0dyZWF0ZXJUaGFuT3JFcXVhbFRvKHQpe3JldHVybiB0aGlzLmxpbmVDb3VudCE9PXQubGluZUNvdW50P3RoaXMubGluZUNvdW50PnQubGluZUNvdW50OnRoaXMuY29sdW1uQ291bnQ+PXQuY29sdW1uQ291bnR9Y3JlYXRlUmFuZ2UodCl7cmV0dXJuIHRoaXMubGluZUNvdW50PT09MD9uZXcgRyh0LmxpbmVOdW1iZXIsdC5jb2x1bW4sdC5saW5lTnVtYmVyLHQuY29sdW1uK3RoaXMuY29sdW1uQ291bnQpOm5ldyBHKHQubGluZU51bWJlcix0LmNvbHVtbix0LmxpbmVOdW1iZXIrdGhpcy5saW5lQ291bnQsdGhpcy5jb2x1bW5Db3VudCsxKX1hZGRUb1Bvc2l0aW9uKHQpe3JldHVybiB0aGlzLmxpbmVDb3VudD09PTA/bmV3IHRlKHQubGluZU51bWJlcix0LmNvbHVtbit0aGlzLmNvbHVtbkNvdW50KTpuZXcgdGUodC5saW5lTnVtYmVyK3RoaXMubGluZUNvdW50LHRoaXMuY29sdW1uQ291bnQrMSl9dG9TdHJpbmcoKXtyZXR1cm5gJHt0aGlzLmxpbmVDb3VudH0sJHt0aGlzLmNvbHVtbkNvdW50fWB9fTtZZS56ZXJvPW5ldyBZZSgwLDApO2xldCBScz1ZZTtjbGFzcyBhdXtjb25zdHJ1Y3Rvcih0LG4pe3RoaXMucmFuZ2U9dCx0aGlzLnRleHQ9bn10b1NpbmdsZUVkaXRPcGVyYXRpb24oKXtyZXR1cm57cmFuZ2U6dGhpcy5yYW5nZSx0ZXh0OnRoaXMudGV4dH19fWNsYXNzIHZle3N0YXRpYyBpbnZlcnNlKHQsbixpKXtjb25zdCByPVtdO2xldCBzPTEsYT0xO2Zvcihjb25zdCBvIG9mIHQpe2NvbnN0IHU9bmV3IHZlKG5ldyBPKHMsby5vcmlnaW5hbC5zdGFydExpbmVOdW1iZXIpLG5ldyBPKGEsby5tb2RpZmllZC5zdGFydExpbmVOdW1iZXIpKTt1Lm1vZGlmaWVkLmlzRW1wdHl8fHIucHVzaCh1KSxzPW8ub3JpZ2luYWwuZW5kTGluZU51bWJlckV4Y2x1c2l2ZSxhPW8ubW9kaWZpZWQuZW5kTGluZU51bWJlckV4Y2x1c2l2ZX1jb25zdCBsPW5ldyB2ZShuZXcgTyhzLG4rMSksbmV3IE8oYSxpKzEpKTtyZXR1cm4gbC5tb2RpZmllZC5pc0VtcHR5fHxyLnB1c2gobCkscn1zdGF0aWMgY2xpcCh0LG4saSl7Y29uc3Qgcj1bXTtmb3IoY29uc3QgcyBvZiB0KXtjb25zdCBhPXMub3JpZ2luYWwuaW50ZXJzZWN0KG4pLGw9cy5tb2RpZmllZC5pbnRlcnNlY3QoaSk7YSYmIWEuaXNFbXB0eSYmbCYmIWwuaXNFbXB0eSYmci5wdXNoKG5ldyB2ZShhLGwpKX1yZXR1cm4gcn1jb25zdHJ1Y3Rvcih0LG4pe3RoaXMub3JpZ2luYWw9dCx0aGlzLm1vZGlmaWVkPW59dG9TdHJpbmcoKXtyZXR1cm5geyR7dGhpcy5vcmlnaW5hbC50b1N0cmluZygpfS0+JHt0aGlzLm1vZGlmaWVkLnRvU3RyaW5nKCl9fWB9ZmxpcCgpe3JldHVybiBuZXcgdmUodGhpcy5tb2RpZmllZCx0aGlzLm9yaWdpbmFsKX1qb2luKHQpe3JldHVybiBuZXcgdmUodGhpcy5vcmlnaW5hbC5qb2luKHQub3JpZ2luYWwpLHRoaXMubW9kaWZpZWQuam9pbih0Lm1vZGlmaWVkKSl9dG9SYW5nZU1hcHBpbmcoKXtjb25zdCB0PXRoaXMub3JpZ2luYWwudG9JbmNsdXNpdmVSYW5nZSgpLG49dGhpcy5tb2RpZmllZC50b0luY2x1c2l2ZVJhbmdlKCk7aWYodCYmbilyZXR1cm4gbmV3IGtlKHQsbik7aWYodGhpcy5vcmlnaW5hbC5zdGFydExpbmVOdW1iZXI9PT0xfHx0aGlzLm1vZGlmaWVkLnN0YXJ0TGluZU51bWJlcj09PTEpe2lmKCEodGhpcy5tb2RpZmllZC5zdGFydExpbmVOdW1iZXI9PT0xJiZ0aGlzLm9yaWdpbmFsLnN0YXJ0TGluZU51bWJlcj09PTEpKXRocm93IG5ldyBmZSgibm90IGEgdmFsaWQgZGlmZiIpO3JldHVybiBuZXcga2UobmV3IEcodGhpcy5vcmlnaW5hbC5zdGFydExpbmVOdW1iZXIsMSx0aGlzLm9yaWdpbmFsLmVuZExpbmVOdW1iZXJFeGNsdXNpdmUsMSksbmV3IEcodGhpcy5tb2RpZmllZC5zdGFydExpbmVOdW1iZXIsMSx0aGlzLm1vZGlmaWVkLmVuZExpbmVOdW1iZXJFeGNsdXNpdmUsMSkpfWVsc2UgcmV0dXJuIG5ldyBrZShuZXcgRyh0aGlzLm9yaWdpbmFsLnN0YXJ0TGluZU51bWJlci0xLE51bWJlci5NQVhfU0FGRV9JTlRFR0VSLHRoaXMub3JpZ2luYWwuZW5kTGluZU51bWJlckV4Y2x1c2l2ZS0xLE51bWJlci5NQVhfU0FGRV9JTlRFR0VSKSxuZXcgRyh0aGlzLm1vZGlmaWVkLnN0YXJ0TGluZU51bWJlci0xLE51bWJlci5NQVhfU0FGRV9JTlRFR0VSLHRoaXMubW9kaWZpZWQuZW5kTGluZU51bWJlckV4Y2x1c2l2ZS0xLE51bWJlci5NQVhfU0FGRV9JTlRFR0VSKSl9dG9SYW5nZU1hcHBpbmcyKHQsbil7aWYoTXModGhpcy5vcmlnaW5hbC5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlLHQpJiZNcyh0aGlzLm1vZGlmaWVkLmVuZExpbmVOdW1iZXJFeGNsdXNpdmUsbikpcmV0dXJuIG5ldyBrZShuZXcgRyh0aGlzLm9yaWdpbmFsLnN0YXJ0TGluZU51bWJlciwxLHRoaXMub3JpZ2luYWwuZW5kTGluZU51bWJlckV4Y2x1c2l2ZSwxKSxuZXcgRyh0aGlzLm1vZGlmaWVkLnN0YXJ0TGluZU51bWJlciwxLHRoaXMubW9kaWZpZWQuZW5kTGluZU51bWJlckV4Y2x1c2l2ZSwxKSk7aWYoIXRoaXMub3JpZ2luYWwuaXNFbXB0eSYmIXRoaXMubW9kaWZpZWQuaXNFbXB0eSlyZXR1cm4gbmV3IGtlKEcuZnJvbVBvc2l0aW9ucyhuZXcgdGUodGhpcy5vcmlnaW5hbC5zdGFydExpbmVOdW1iZXIsMSksaHQobmV3IHRlKHRoaXMub3JpZ2luYWwuZW5kTGluZU51bWJlckV4Y2x1c2l2ZS0xLE51bWJlci5NQVhfU0FGRV9JTlRFR0VSKSx0KSksRy5mcm9tUG9zaXRpb25zKG5ldyB0ZSh0aGlzLm1vZGlmaWVkLnN0YXJ0TGluZU51bWJlciwxKSxodChuZXcgdGUodGhpcy5tb2RpZmllZC5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlLTEsTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIpLG4pKSk7aWYodGhpcy5vcmlnaW5hbC5zdGFydExpbmVOdW1iZXI+MSYmdGhpcy5tb2RpZmllZC5zdGFydExpbmVOdW1iZXI+MSlyZXR1cm4gbmV3IGtlKEcuZnJvbVBvc2l0aW9ucyhodChuZXcgdGUodGhpcy5vcmlnaW5hbC5zdGFydExpbmVOdW1iZXItMSxOdW1iZXIuTUFYX1NBRkVfSU5URUdFUiksdCksaHQobmV3IHRlKHRoaXMub3JpZ2luYWwuZW5kTGluZU51bWJlckV4Y2x1c2l2ZS0xLE51bWJlci5NQVhfU0FGRV9JTlRFR0VSKSx0KSksRy5mcm9tUG9zaXRpb25zKGh0KG5ldyB0ZSh0aGlzLm1vZGlmaWVkLnN0YXJ0TGluZU51bWJlci0xLE51bWJlci5NQVhfU0FGRV9JTlRFR0VSKSxuKSxodChuZXcgdGUodGhpcy5tb2RpZmllZC5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlLTEsTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIpLG4pKSk7dGhyb3cgbmV3IGZlfX1mdW5jdGlvbiBodChlLHQpe2lmKGUubGluZU51bWJlcjwxKXJldHVybiBuZXcgdGUoMSwxKTtpZihlLmxpbmVOdW1iZXI+dC5sZW5ndGgpcmV0dXJuIG5ldyB0ZSh0Lmxlbmd0aCx0W3QubGVuZ3RoLTFdLmxlbmd0aCsxKTtjb25zdCBuPXRbZS5saW5lTnVtYmVyLTFdO3JldHVybiBlLmNvbHVtbj5uLmxlbmd0aCsxP25ldyB0ZShlLmxpbmVOdW1iZXIsbi5sZW5ndGgrMSk6ZX1mdW5jdGlvbiBNcyhlLHQpe3JldHVybiBlPj0xJiZlPD10Lmxlbmd0aH1jbGFzcyBIZSBleHRlbmRzIHZle3N0YXRpYyBmcm9tUmFuZ2VNYXBwaW5ncyh0KXtjb25zdCBuPU8uam9pbih0Lm1hcChyPT5PLmZyb21SYW5nZUluY2x1c2l2ZShyLm9yaWdpbmFsUmFuZ2UpKSksaT1PLmpvaW4odC5tYXAocj0+Ty5mcm9tUmFuZ2VJbmNsdXNpdmUoci5tb2RpZmllZFJhbmdlKSkpO3JldHVybiBuZXcgSGUobixpLHQpfWNvbnN0cnVjdG9yKHQsbixpKXtzdXBlcih0LG4pLHRoaXMuaW5uZXJDaGFuZ2VzPWl9ZmxpcCgpe3JldHVybiBuZXcgSGUodGhpcy5tb2RpZmllZCx0aGlzLm9yaWdpbmFsLHRoaXMuaW5uZXJDaGFuZ2VzPy5tYXAodD0+dC5mbGlwKCkpKX13aXRoSW5uZXJDaGFuZ2VzRnJvbUxpbmVSYW5nZXMoKXtyZXR1cm4gbmV3IEhlKHRoaXMub3JpZ2luYWwsdGhpcy5tb2RpZmllZCxbdGhpcy50b1JhbmdlTWFwcGluZygpXSl9fWNsYXNzIGtle3N0YXRpYyBhc3NlcnRTb3J0ZWQodCl7Zm9yKGxldCBuPTE7bjx0Lmxlbmd0aDtuKyspe2NvbnN0IGk9dFtuLTFdLHI9dFtuXTtpZighKGkub3JpZ2luYWxSYW5nZS5nZXRFbmRQb3NpdGlvbigpLmlzQmVmb3JlT3JFcXVhbChyLm9yaWdpbmFsUmFuZ2UuZ2V0U3RhcnRQb3NpdGlvbigpKSYmaS5tb2RpZmllZFJhbmdlLmdldEVuZFBvc2l0aW9uKCkuaXNCZWZvcmVPckVxdWFsKHIubW9kaWZpZWRSYW5nZS5nZXRTdGFydFBvc2l0aW9uKCkpKSl0aHJvdyBuZXcgZmUoIlJhbmdlIG1hcHBpbmdzIG11c3QgYmUgc29ydGVkIil9fWNvbnN0cnVjdG9yKHQsbil7dGhpcy5vcmlnaW5hbFJhbmdlPXQsdGhpcy5tb2RpZmllZFJhbmdlPW59dG9TdHJpbmcoKXtyZXR1cm5geyR7dGhpcy5vcmlnaW5hbFJhbmdlLnRvU3RyaW5nKCl9LT4ke3RoaXMubW9kaWZpZWRSYW5nZS50b1N0cmluZygpfX1gfWZsaXAoKXtyZXR1cm4gbmV3IGtlKHRoaXMubW9kaWZpZWRSYW5nZSx0aGlzLm9yaWdpbmFsUmFuZ2UpfXRvVGV4dEVkaXQodCl7Y29uc3Qgbj10LmdldFZhbHVlT2ZSYW5nZSh0aGlzLm1vZGlmaWVkUmFuZ2UpO3JldHVybiBuZXcgYXUodGhpcy5vcmlnaW5hbFJhbmdlLG4pfX1jb25zdCBvdT0zO2NsYXNzIGx1e2NvbXB1dGVEaWZmKHQsbixpKXtjb25zdCBzPW5ldyBodSh0LG4se21heENvbXB1dGF0aW9uVGltZTppLm1heENvbXB1dGF0aW9uVGltZU1zLHNob3VsZElnbm9yZVRyaW1XaGl0ZXNwYWNlOmkuaWdub3JlVHJpbVdoaXRlc3BhY2Usc2hvdWxkQ29tcHV0ZUNoYXJDaGFuZ2VzOiEwLHNob3VsZE1ha2VQcmV0dHlEaWZmOiEwLHNob3VsZFBvc3RQcm9jZXNzQ2hhckNoYW5nZXM6ITB9KS5jb21wdXRlRGlmZigpLGE9W107bGV0IGw9bnVsbDtmb3IoY29uc3QgbyBvZiBzLmNoYW5nZXMpe2xldCB1O28ub3JpZ2luYWxFbmRMaW5lTnVtYmVyPT09MD91PW5ldyBPKG8ub3JpZ2luYWxTdGFydExpbmVOdW1iZXIrMSxvLm9yaWdpbmFsU3RhcnRMaW5lTnVtYmVyKzEpOnU9bmV3IE8oby5vcmlnaW5hbFN0YXJ0TGluZU51bWJlcixvLm9yaWdpbmFsRW5kTGluZU51bWJlcisxKTtsZXQgYztvLm1vZGlmaWVkRW5kTGluZU51bWJlcj09PTA/Yz1uZXcgTyhvLm1vZGlmaWVkU3RhcnRMaW5lTnVtYmVyKzEsby5tb2RpZmllZFN0YXJ0TGluZU51bWJlcisxKTpjPW5ldyBPKG8ubW9kaWZpZWRTdGFydExpbmVOdW1iZXIsby5tb2RpZmllZEVuZExpbmVOdW1iZXIrMSk7bGV0IGQ9bmV3IEhlKHUsYyxvLmNoYXJDaGFuZ2VzPy5tYXAobT0+bmV3IGtlKG5ldyBHKG0ub3JpZ2luYWxTdGFydExpbmVOdW1iZXIsbS5vcmlnaW5hbFN0YXJ0Q29sdW1uLG0ub3JpZ2luYWxFbmRMaW5lTnVtYmVyLG0ub3JpZ2luYWxFbmRDb2x1bW4pLG5ldyBHKG0ubW9kaWZpZWRTdGFydExpbmVOdW1iZXIsbS5tb2RpZmllZFN0YXJ0Q29sdW1uLG0ubW9kaWZpZWRFbmRMaW5lTnVtYmVyLG0ubW9kaWZpZWRFbmRDb2x1bW4pKSkpO2wmJihsLm1vZGlmaWVkLmVuZExpbmVOdW1iZXJFeGNsdXNpdmU9PT1kLm1vZGlmaWVkLnN0YXJ0TGluZU51bWJlcnx8bC5vcmlnaW5hbC5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlPT09ZC5vcmlnaW5hbC5zdGFydExpbmVOdW1iZXIpJiYoZD1uZXcgSGUobC5vcmlnaW5hbC5qb2luKGQub3JpZ2luYWwpLGwubW9kaWZpZWQuam9pbihkLm1vZGlmaWVkKSxsLmlubmVyQ2hhbmdlcyYmZC5pbm5lckNoYW5nZXM/bC5pbm5lckNoYW5nZXMuY29uY2F0KGQuaW5uZXJDaGFuZ2VzKTp2b2lkIDApLGEucG9wKCkpLGEucHVzaChkKSxsPWR9cmV0dXJuIFp0KCgpPT5rcyhhLChvLHUpPT51Lm9yaWdpbmFsLnN0YXJ0TGluZU51bWJlci1vLm9yaWdpbmFsLmVuZExpbmVOdW1iZXJFeGNsdXNpdmU9PT11Lm1vZGlmaWVkLnN0YXJ0TGluZU51bWJlci1vLm1vZGlmaWVkLmVuZExpbmVOdW1iZXJFeGNsdXNpdmUmJm8ub3JpZ2luYWwuZW5kTGluZU51bWJlckV4Y2x1c2l2ZTx1Lm9yaWdpbmFsLnN0YXJ0TGluZU51bWJlciYmby5tb2RpZmllZC5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlPHUubW9kaWZpZWQuc3RhcnRMaW5lTnVtYmVyKSksbmV3IEt0KGEsW10scy5xdWl0RWFybHkpfX1mdW5jdGlvbiBOcyhlLHQsbixpKXtyZXR1cm4gbmV3IEdlKGUsdCxuKS5Db21wdXRlRGlmZihpKX1sZXQgRHM9Y2xhc3N7Y29uc3RydWN0b3IodCl7Y29uc3Qgbj1bXSxpPVtdO2ZvcihsZXQgcj0wLHM9dC5sZW5ndGg7cjxzO3IrKyluW3JdPW9pKHRbcl0sMSksaVtyXT1saSh0W3JdLDEpO3RoaXMubGluZXM9dCx0aGlzLl9zdGFydENvbHVtbnM9bix0aGlzLl9lbmRDb2x1bW5zPWl9Z2V0RWxlbWVudHMoKXtjb25zdCB0PVtdO2ZvcihsZXQgbj0wLGk9dGhpcy5saW5lcy5sZW5ndGg7bjxpO24rKyl0W25dPXRoaXMubGluZXNbbl0uc3Vic3RyaW5nKHRoaXMuX3N0YXJ0Q29sdW1uc1tuXS0xLHRoaXMuX2VuZENvbHVtbnNbbl0tMSk7cmV0dXJuIHR9Z2V0U3RyaWN0RWxlbWVudCh0KXtyZXR1cm4gdGhpcy5saW5lc1t0XX1nZXRTdGFydExpbmVOdW1iZXIodCl7cmV0dXJuIHQrMX1nZXRFbmRMaW5lTnVtYmVyKHQpe3JldHVybiB0KzF9Y3JlYXRlQ2hhclNlcXVlbmNlKHQsbixpKXtjb25zdCByPVtdLHM9W10sYT1bXTtsZXQgbD0wO2ZvcihsZXQgbz1uO288PWk7bysrKXtjb25zdCB1PXRoaXMubGluZXNbb10sYz10P3RoaXMuX3N0YXJ0Q29sdW1uc1tvXToxLGQ9dD90aGlzLl9lbmRDb2x1bW5zW29dOnUubGVuZ3RoKzE7Zm9yKGxldCBtPWM7bTxkO20rKylyW2xdPXUuY2hhckNvZGVBdChtLTEpLHNbbF09bysxLGFbbF09bSxsKys7IXQmJm88aSYmKHJbbF09MTAsc1tsXT1vKzEsYVtsXT11Lmxlbmd0aCsxLGwrKyl9cmV0dXJuIG5ldyB1dShyLHMsYSl9fTtjbGFzcyB1dXtjb25zdHJ1Y3Rvcih0LG4saSl7dGhpcy5fY2hhckNvZGVzPXQsdGhpcy5fbGluZU51bWJlcnM9bix0aGlzLl9jb2x1bW5zPWl9dG9TdHJpbmcoKXtyZXR1cm4iWyIrdGhpcy5fY2hhckNvZGVzLm1hcCgodCxuKT0+KHQ9PT0xMD8iXFxuIjpTdHJpbmcuZnJvbUNoYXJDb2RlKHQpKStgLSgke3RoaXMuX2xpbmVOdW1iZXJzW25dfSwke3RoaXMuX2NvbHVtbnNbbl19KWApLmpvaW4oIiwgIikrIl0ifV9hc3NlcnRJbmRleCh0LG4pe2lmKHQ8MHx8dD49bi5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKCJJbGxlZ2FsIGluZGV4Iil9Z2V0RWxlbWVudHMoKXtyZXR1cm4gdGhpcy5fY2hhckNvZGVzfWdldFN0YXJ0TGluZU51bWJlcih0KXtyZXR1cm4gdD4wJiZ0PT09dGhpcy5fbGluZU51bWJlcnMubGVuZ3RoP3RoaXMuZ2V0RW5kTGluZU51bWJlcih0LTEpOih0aGlzLl9hc3NlcnRJbmRleCh0LHRoaXMuX2xpbmVOdW1iZXJzKSx0aGlzLl9saW5lTnVtYmVyc1t0XSl9Z2V0RW5kTGluZU51bWJlcih0KXtyZXR1cm4gdD09PS0xP3RoaXMuZ2V0U3RhcnRMaW5lTnVtYmVyKHQrMSk6KHRoaXMuX2Fzc2VydEluZGV4KHQsdGhpcy5fbGluZU51bWJlcnMpLHRoaXMuX2NoYXJDb2Rlc1t0XT09PTEwP3RoaXMuX2xpbmVOdW1iZXJzW3RdKzE6dGhpcy5fbGluZU51bWJlcnNbdF0pfWdldFN0YXJ0Q29sdW1uKHQpe3JldHVybiB0PjAmJnQ9PT10aGlzLl9jb2x1bW5zLmxlbmd0aD90aGlzLmdldEVuZENvbHVtbih0LTEpOih0aGlzLl9hc3NlcnRJbmRleCh0LHRoaXMuX2NvbHVtbnMpLHRoaXMuX2NvbHVtbnNbdF0pfWdldEVuZENvbHVtbih0KXtyZXR1cm4gdD09PS0xP3RoaXMuZ2V0U3RhcnRDb2x1bW4odCsxKToodGhpcy5fYXNzZXJ0SW5kZXgodCx0aGlzLl9jb2x1bW5zKSx0aGlzLl9jaGFyQ29kZXNbdF09PT0xMD8xOnRoaXMuX2NvbHVtbnNbdF0rMSl9fWNsYXNzIGR0e2NvbnN0cnVjdG9yKHQsbixpLHIscyxhLGwsbyl7dGhpcy5vcmlnaW5hbFN0YXJ0TGluZU51bWJlcj10LHRoaXMub3JpZ2luYWxTdGFydENvbHVtbj1uLHRoaXMub3JpZ2luYWxFbmRMaW5lTnVtYmVyPWksdGhpcy5vcmlnaW5hbEVuZENvbHVtbj1yLHRoaXMubW9kaWZpZWRTdGFydExpbmVOdW1iZXI9cyx0aGlzLm1vZGlmaWVkU3RhcnRDb2x1bW49YSx0aGlzLm1vZGlmaWVkRW5kTGluZU51bWJlcj1sLHRoaXMubW9kaWZpZWRFbmRDb2x1bW49b31zdGF0aWMgY3JlYXRlRnJvbURpZmZDaGFuZ2UodCxuLGkpe2NvbnN0IHI9bi5nZXRTdGFydExpbmVOdW1iZXIodC5vcmlnaW5hbFN0YXJ0KSxzPW4uZ2V0U3RhcnRDb2x1bW4odC5vcmlnaW5hbFN0YXJ0KSxhPW4uZ2V0RW5kTGluZU51bWJlcih0Lm9yaWdpbmFsU3RhcnQrdC5vcmlnaW5hbExlbmd0aC0xKSxsPW4uZ2V0RW5kQ29sdW1uKHQub3JpZ2luYWxTdGFydCt0Lm9yaWdpbmFsTGVuZ3RoLTEpLG89aS5nZXRTdGFydExpbmVOdW1iZXIodC5tb2RpZmllZFN0YXJ0KSx1PWkuZ2V0U3RhcnRDb2x1bW4odC5tb2RpZmllZFN0YXJ0KSxjPWkuZ2V0RW5kTGluZU51bWJlcih0Lm1vZGlmaWVkU3RhcnQrdC5tb2RpZmllZExlbmd0aC0xKSxkPWkuZ2V0RW5kQ29sdW1uKHQubW9kaWZpZWRTdGFydCt0Lm1vZGlmaWVkTGVuZ3RoLTEpO3JldHVybiBuZXcgZHQocixzLGEsbCxvLHUsYyxkKX19ZnVuY3Rpb24gY3UoZSl7aWYoZS5sZW5ndGg8PTEpcmV0dXJuIGU7Y29uc3QgdD1bZVswXV07bGV0IG49dFswXTtmb3IobGV0IGk9MSxyPWUubGVuZ3RoO2k8cjtpKyspe2NvbnN0IHM9ZVtpXSxhPXMub3JpZ2luYWxTdGFydC0obi5vcmlnaW5hbFN0YXJ0K24ub3JpZ2luYWxMZW5ndGgpLGw9cy5tb2RpZmllZFN0YXJ0LShuLm1vZGlmaWVkU3RhcnQrbi5tb2RpZmllZExlbmd0aCk7TWF0aC5taW4oYSxsKTxvdT8obi5vcmlnaW5hbExlbmd0aD1zLm9yaWdpbmFsU3RhcnQrcy5vcmlnaW5hbExlbmd0aC1uLm9yaWdpbmFsU3RhcnQsbi5tb2RpZmllZExlbmd0aD1zLm1vZGlmaWVkU3RhcnQrcy5tb2RpZmllZExlbmd0aC1uLm1vZGlmaWVkU3RhcnQpOih0LnB1c2gocyksbj1zKX1yZXR1cm4gdH1jbGFzcyBDdHtjb25zdHJ1Y3Rvcih0LG4saSxyLHMpe3RoaXMub3JpZ2luYWxTdGFydExpbmVOdW1iZXI9dCx0aGlzLm9yaWdpbmFsRW5kTGluZU51bWJlcj1uLHRoaXMubW9kaWZpZWRTdGFydExpbmVOdW1iZXI9aSx0aGlzLm1vZGlmaWVkRW5kTGluZU51bWJlcj1yLHRoaXMuY2hhckNoYW5nZXM9c31zdGF0aWMgY3JlYXRlRnJvbURpZmZSZXN1bHQodCxuLGkscixzLGEsbCl7bGV0IG8sdSxjLGQsbTtpZihuLm9yaWdpbmFsTGVuZ3RoPT09MD8obz1pLmdldFN0YXJ0TGluZU51bWJlcihuLm9yaWdpbmFsU3RhcnQpLTEsdT0wKToobz1pLmdldFN0YXJ0TGluZU51bWJlcihuLm9yaWdpbmFsU3RhcnQpLHU9aS5nZXRFbmRMaW5lTnVtYmVyKG4ub3JpZ2luYWxTdGFydCtuLm9yaWdpbmFsTGVuZ3RoLTEpKSxuLm1vZGlmaWVkTGVuZ3RoPT09MD8oYz1yLmdldFN0YXJ0TGluZU51bWJlcihuLm1vZGlmaWVkU3RhcnQpLTEsZD0wKTooYz1yLmdldFN0YXJ0TGluZU51bWJlcihuLm1vZGlmaWVkU3RhcnQpLGQ9ci5nZXRFbmRMaW5lTnVtYmVyKG4ubW9kaWZpZWRTdGFydCtuLm1vZGlmaWVkTGVuZ3RoLTEpKSxhJiZuLm9yaWdpbmFsTGVuZ3RoPjAmJm4ub3JpZ2luYWxMZW5ndGg8MjAmJm4ubW9kaWZpZWRMZW5ndGg+MCYmbi5tb2RpZmllZExlbmd0aDwyMCYmcygpKXtjb25zdCBmPWkuY3JlYXRlQ2hhclNlcXVlbmNlKHQsbi5vcmlnaW5hbFN0YXJ0LG4ub3JpZ2luYWxTdGFydCtuLm9yaWdpbmFsTGVuZ3RoLTEpLF89ci5jcmVhdGVDaGFyU2VxdWVuY2UodCxuLm1vZGlmaWVkU3RhcnQsbi5tb2RpZmllZFN0YXJ0K24ubW9kaWZpZWRMZW5ndGgtMSk7aWYoZi5nZXRFbGVtZW50cygpLmxlbmd0aD4wJiZfLmdldEVsZW1lbnRzKCkubGVuZ3RoPjApe2xldCBnPU5zKGYsXyxzLCEwKS5jaGFuZ2VzO2wmJihnPWN1KGcpKSxtPVtdO2ZvcihsZXQgaz0wLHk9Zy5sZW5ndGg7azx5O2srKyltLnB1c2goZHQuY3JlYXRlRnJvbURpZmZDaGFuZ2UoZ1trXSxmLF8pKX19cmV0dXJuIG5ldyBDdChvLHUsYyxkLG0pfX1jbGFzcyBodXtjb25zdHJ1Y3Rvcih0LG4saSl7dGhpcy5zaG91bGRDb21wdXRlQ2hhckNoYW5nZXM9aS5zaG91bGRDb21wdXRlQ2hhckNoYW5nZXMsdGhpcy5zaG91bGRQb3N0UHJvY2Vzc0NoYXJDaGFuZ2VzPWkuc2hvdWxkUG9zdFByb2Nlc3NDaGFyQ2hhbmdlcyx0aGlzLnNob3VsZElnbm9yZVRyaW1XaGl0ZXNwYWNlPWkuc2hvdWxkSWdub3JlVHJpbVdoaXRlc3BhY2UsdGhpcy5zaG91bGRNYWtlUHJldHR5RGlmZj1pLnNob3VsZE1ha2VQcmV0dHlEaWZmLHRoaXMub3JpZ2luYWxMaW5lcz10LHRoaXMubW9kaWZpZWRMaW5lcz1uLHRoaXMub3JpZ2luYWw9bmV3IERzKHQpLHRoaXMubW9kaWZpZWQ9bmV3IERzKG4pLHRoaXMuY29udGludWVMaW5lRGlmZj1JcyhpLm1heENvbXB1dGF0aW9uVGltZSksdGhpcy5jb250aW51ZUNoYXJEaWZmPUlzKGkubWF4Q29tcHV0YXRpb25UaW1lPT09MD8wOk1hdGgubWluKGkubWF4Q29tcHV0YXRpb25UaW1lLDVlMykpfWNvbXB1dGVEaWZmKCl7aWYodGhpcy5vcmlnaW5hbC5saW5lcy5sZW5ndGg9PT0xJiZ0aGlzLm9yaWdpbmFsLmxpbmVzWzBdLmxlbmd0aD09PTApcmV0dXJuIHRoaXMubW9kaWZpZWQubGluZXMubGVuZ3RoPT09MSYmdGhpcy5tb2RpZmllZC5saW5lc1swXS5sZW5ndGg9PT0wP3txdWl0RWFybHk6ITEsY2hhbmdlczpbXX06e3F1aXRFYXJseTohMSxjaGFuZ2VzOlt7b3JpZ2luYWxTdGFydExpbmVOdW1iZXI6MSxvcmlnaW5hbEVuZExpbmVOdW1iZXI6MSxtb2RpZmllZFN0YXJ0TGluZU51bWJlcjoxLG1vZGlmaWVkRW5kTGluZU51bWJlcjp0aGlzLm1vZGlmaWVkLmxpbmVzLmxlbmd0aCxjaGFyQ2hhbmdlczp2b2lkIDB9XX07aWYodGhpcy5tb2RpZmllZC5saW5lcy5sZW5ndGg9PT0xJiZ0aGlzLm1vZGlmaWVkLmxpbmVzWzBdLmxlbmd0aD09PTApcmV0dXJue3F1aXRFYXJseTohMSxjaGFuZ2VzOlt7b3JpZ2luYWxTdGFydExpbmVOdW1iZXI6MSxvcmlnaW5hbEVuZExpbmVOdW1iZXI6dGhpcy5vcmlnaW5hbC5saW5lcy5sZW5ndGgsbW9kaWZpZWRTdGFydExpbmVOdW1iZXI6MSxtb2RpZmllZEVuZExpbmVOdW1iZXI6MSxjaGFyQ2hhbmdlczp2b2lkIDB9XX07Y29uc3QgdD1Ocyh0aGlzLm9yaWdpbmFsLHRoaXMubW9kaWZpZWQsdGhpcy5jb250aW51ZUxpbmVEaWZmLHRoaXMuc2hvdWxkTWFrZVByZXR0eURpZmYpLG49dC5jaGFuZ2VzLGk9dC5xdWl0RWFybHk7aWYodGhpcy5zaG91bGRJZ25vcmVUcmltV2hpdGVzcGFjZSl7Y29uc3QgbD1bXTtmb3IobGV0IG89MCx1PW4ubGVuZ3RoO288dTtvKyspbC5wdXNoKEN0LmNyZWF0ZUZyb21EaWZmUmVzdWx0KHRoaXMuc2hvdWxkSWdub3JlVHJpbVdoaXRlc3BhY2UsbltvXSx0aGlzLm9yaWdpbmFsLHRoaXMubW9kaWZpZWQsdGhpcy5jb250aW51ZUNoYXJEaWZmLHRoaXMuc2hvdWxkQ29tcHV0ZUNoYXJDaGFuZ2VzLHRoaXMuc2hvdWxkUG9zdFByb2Nlc3NDaGFyQ2hhbmdlcykpO3JldHVybntxdWl0RWFybHk6aSxjaGFuZ2VzOmx9fWNvbnN0IHI9W107bGV0IHM9MCxhPTA7Zm9yKGxldCBsPS0xLG89bi5sZW5ndGg7bDxvO2wrKyl7Y29uc3QgdT1sKzE8bz9uW2wrMV06bnVsbCxjPXU/dS5vcmlnaW5hbFN0YXJ0OnRoaXMub3JpZ2luYWxMaW5lcy5sZW5ndGgsZD11P3UubW9kaWZpZWRTdGFydDp0aGlzLm1vZGlmaWVkTGluZXMubGVuZ3RoO2Zvcig7czxjJiZhPGQ7KXtjb25zdCBtPXRoaXMub3JpZ2luYWxMaW5lc1tzXSxmPXRoaXMubW9kaWZpZWRMaW5lc1thXTtpZihtIT09Zil7e2xldCBfPW9pKG0sMSksZz1vaShmLDEpO2Zvcig7Xz4xJiZnPjE7KXtjb25zdCBrPW0uY2hhckNvZGVBdChfLTIpLHk9Zi5jaGFyQ29kZUF0KGctMik7aWYoayE9PXkpYnJlYWs7Xy0tLGctLX0oXz4xfHxnPjEpJiZ0aGlzLl9wdXNoVHJpbVdoaXRlc3BhY2VDaGFyQ2hhbmdlKHIscysxLDEsXyxhKzEsMSxnKX17bGV0IF89bGkobSwxKSxnPWxpKGYsMSk7Y29uc3Qgaz1tLmxlbmd0aCsxLHk9Zi5sZW5ndGgrMTtmb3IoO188ayYmZzx5Oyl7Y29uc3Qgdj1tLmNoYXJDb2RlQXQoXy0xKSxFPW0uY2hhckNvZGVBdChnLTEpO2lmKHYhPT1FKWJyZWFrO18rKyxnKyt9KF88a3x8Zzx5KSYmdGhpcy5fcHVzaFRyaW1XaGl0ZXNwYWNlQ2hhckNoYW5nZShyLHMrMSxfLGssYSsxLGcseSl9fXMrKyxhKyt9dSYmKHIucHVzaChDdC5jcmVhdGVGcm9tRGlmZlJlc3VsdCh0aGlzLnNob3VsZElnbm9yZVRyaW1XaGl0ZXNwYWNlLHUsdGhpcy5vcmlnaW5hbCx0aGlzLm1vZGlmaWVkLHRoaXMuY29udGludWVDaGFyRGlmZix0aGlzLnNob3VsZENvbXB1dGVDaGFyQ2hhbmdlcyx0aGlzLnNob3VsZFBvc3RQcm9jZXNzQ2hhckNoYW5nZXMpKSxzKz11Lm9yaWdpbmFsTGVuZ3RoLGErPXUubW9kaWZpZWRMZW5ndGgpfXJldHVybntxdWl0RWFybHk6aSxjaGFuZ2VzOnJ9fV9wdXNoVHJpbVdoaXRlc3BhY2VDaGFyQ2hhbmdlKHQsbixpLHIscyxhLGwpe2lmKHRoaXMuX21lcmdlVHJpbVdoaXRlc3BhY2VDaGFyQ2hhbmdlKHQsbixpLHIscyxhLGwpKXJldHVybjtsZXQgbzt0aGlzLnNob3VsZENvbXB1dGVDaGFyQ2hhbmdlcyYmKG89W25ldyBkdChuLGksbixyLHMsYSxzLGwpXSksdC5wdXNoKG5ldyBDdChuLG4scyxzLG8pKX1fbWVyZ2VUcmltV2hpdGVzcGFjZUNoYXJDaGFuZ2UodCxuLGkscixzLGEsbCl7Y29uc3Qgbz10Lmxlbmd0aDtpZihvPT09MClyZXR1cm4hMTtjb25zdCB1PXRbby0xXTtyZXR1cm4gdS5vcmlnaW5hbEVuZExpbmVOdW1iZXI9PT0wfHx1Lm1vZGlmaWVkRW5kTGluZU51bWJlcj09PTA/ITE6dS5vcmlnaW5hbEVuZExpbmVOdW1iZXI9PT1uJiZ1Lm1vZGlmaWVkRW5kTGluZU51bWJlcj09PXM/KHRoaXMuc2hvdWxkQ29tcHV0ZUNoYXJDaGFuZ2VzJiZ1LmNoYXJDaGFuZ2VzJiZ1LmNoYXJDaGFuZ2VzLnB1c2gobmV3IGR0KG4saSxuLHIscyxhLHMsbCkpLCEwKTp1Lm9yaWdpbmFsRW5kTGluZU51bWJlcisxPT09biYmdS5tb2RpZmllZEVuZExpbmVOdW1iZXIrMT09PXM/KHUub3JpZ2luYWxFbmRMaW5lTnVtYmVyPW4sdS5tb2RpZmllZEVuZExpbmVOdW1iZXI9cyx0aGlzLnNob3VsZENvbXB1dGVDaGFyQ2hhbmdlcyYmdS5jaGFyQ2hhbmdlcyYmdS5jaGFyQ2hhbmdlcy5wdXNoKG5ldyBkdChuLGksbixyLHMsYSxzLGwpKSwhMCk6ITF9fWZ1bmN0aW9uIG9pKGUsdCl7Y29uc3Qgbj1xbyhlKTtyZXR1cm4gbj09PS0xP3Q6bisxfWZ1bmN0aW9uIGxpKGUsdCl7Y29uc3Qgbj1PbyhlKTtyZXR1cm4gbj09PS0xP3Q6bisyfWZ1bmN0aW9uIElzKGUpe2lmKGU9PT0wKXJldHVybigpPT4hMDtjb25zdCB0PURhdGUubm93KCk7cmV0dXJuKCk9PkRhdGUubm93KCktdDxlfWZ1bmN0aW9uIGR1KGUsdCxuPShpLHIpPT5pPT09cil7aWYoZT09PXQpcmV0dXJuITA7aWYoIWV8fCF0fHxlLmxlbmd0aCE9PXQubGVuZ3RoKXJldHVybiExO2ZvcihsZXQgaT0wLHI9ZS5sZW5ndGg7aTxyO2krKylpZighbihlW2ldLHRbaV0pKXJldHVybiExO3JldHVybiEwfWZ1bmN0aW9uKm11KGUsdCl7bGV0IG4saTtmb3IoY29uc3QgciBvZiBlKWkhPT12b2lkIDAmJnQoaSxyKT9uLnB1c2gocik6KG4mJih5aWVsZCBuKSxuPVtyXSksaT1yO24mJih5aWVsZCBuKX1mdW5jdGlvbiBmdShlLHQpe2ZvcihsZXQgbj0wO248PWUubGVuZ3RoO24rKyl0KG49PT0wP3ZvaWQgMDplW24tMV0sbj09PWUubGVuZ3RoP3ZvaWQgMDplW25dKX1mdW5jdGlvbiBwdShlLHQpe2ZvcihsZXQgbj0wO248ZS5sZW5ndGg7bisrKXQobj09PTA/dm9pZCAwOmVbbi0xXSxlW25dLG4rMT09PWUubGVuZ3RoP3ZvaWQgMDplW24rMV0pfWZ1bmN0aW9uIGd1KGUsdCl7Zm9yKGNvbnN0IG4gb2YgdCllLnB1c2gobil9dmFyIHVpOyhmdW5jdGlvbihlKXtmdW5jdGlvbiB0KHMpe3JldHVybiBzPDB9ZS5pc0xlc3NUaGFuPXQ7ZnVuY3Rpb24gbihzKXtyZXR1cm4gczw9MH1lLmlzTGVzc1RoYW5PckVxdWFsPW47ZnVuY3Rpb24gaShzKXtyZXR1cm4gcz4wfWUuaXNHcmVhdGVyVGhhbj1pO2Z1bmN0aW9uIHIocyl7cmV0dXJuIHM9PT0wfWUuaXNOZWl0aGVyTGVzc09yR3JlYXRlclRoYW49cixlLmdyZWF0ZXJUaGFuPTEsZS5sZXNzVGhhbj0tMSxlLm5laXRoZXJMZXNzT3JHcmVhdGVyVGhhbj0wfSkodWl8fCh1aT17fSkpO2Z1bmN0aW9uIHRuKGUsdCl7cmV0dXJuKG4saSk9PnQoZShuKSxlKGkpKX1jb25zdCBubj0oZSx0KT0+ZS10O2Z1bmN0aW9uIGJ1KGUpe3JldHVybih0LG4pPT4tZSh0LG4pfWNvbnN0IHZ0PWNsYXNzIHZ0e2NvbnN0cnVjdG9yKHQpe3RoaXMuaXRlcmF0ZT10fXRvQXJyYXkoKXtjb25zdCB0PVtdO3JldHVybiB0aGlzLml0ZXJhdGUobj0+KHQucHVzaChuKSwhMCkpLHR9ZmlsdGVyKHQpe3JldHVybiBuZXcgdnQobj0+dGhpcy5pdGVyYXRlKGk9PnQoaSk/bihpKTohMCkpfW1hcCh0KXtyZXR1cm4gbmV3IHZ0KG49PnRoaXMuaXRlcmF0ZShpPT5uKHQoaSkpKSl9ZmluZExhc3QodCl7bGV0IG47cmV0dXJuIHRoaXMuaXRlcmF0ZShpPT4odChpKSYmKG49aSksITApKSxufWZpbmRMYXN0TWF4QnkodCl7bGV0IG4saT0hMDtyZXR1cm4gdGhpcy5pdGVyYXRlKHI9PigoaXx8dWkuaXNHcmVhdGVyVGhhbih0KHIsbikpKSYmKGk9ITEsbj1yKSwhMCkpLG59fTt2dC5lbXB0eT1uZXcgdnQodD0+e30pO2xldCB6cz12dDtjbGFzcyBXZXtzdGF0aWMgdHJpdmlhbCh0LG4pe3JldHVybiBuZXcgV2UoW25ldyBLKGoub2ZMZW5ndGgodC5sZW5ndGgpLGoub2ZMZW5ndGgobi5sZW5ndGgpKV0sITEpfXN0YXRpYyB0cml2aWFsVGltZWRPdXQodCxuKXtyZXR1cm4gbmV3IFdlKFtuZXcgSyhqLm9mTGVuZ3RoKHQubGVuZ3RoKSxqLm9mTGVuZ3RoKG4ubGVuZ3RoKSldLCEwKX1jb25zdHJ1Y3Rvcih0LG4pe3RoaXMuZGlmZnM9dCx0aGlzLmhpdFRpbWVvdXQ9bn19Y2xhc3MgS3tzdGF0aWMgaW52ZXJ0KHQsbil7Y29uc3QgaT1bXTtyZXR1cm4gZnUodCwocixzKT0+e2kucHVzaChLLmZyb21PZmZzZXRQYWlycyhyP3IuZ2V0RW5kRXhjbHVzaXZlcygpOkZlLnplcm8scz9zLmdldFN0YXJ0cygpOm5ldyBGZShuLChyP3Iuc2VxMlJhbmdlLmVuZEV4Y2x1c2l2ZS1yLnNlcTFSYW5nZS5lbmRFeGNsdXNpdmU6MCkrbikpKX0pLGl9c3RhdGljIGZyb21PZmZzZXRQYWlycyh0LG4pe3JldHVybiBuZXcgSyhuZXcgaih0Lm9mZnNldDEsbi5vZmZzZXQxKSxuZXcgaih0Lm9mZnNldDIsbi5vZmZzZXQyKSl9c3RhdGljIGFzc2VydFNvcnRlZCh0KXtsZXQgbjtmb3IoY29uc3QgaSBvZiB0KXtpZihuJiYhKG4uc2VxMVJhbmdlLmVuZEV4Y2x1c2l2ZTw9aS5zZXExUmFuZ2Uuc3RhcnQmJm4uc2VxMlJhbmdlLmVuZEV4Y2x1c2l2ZTw9aS5zZXEyUmFuZ2Uuc3RhcnQpKXRocm93IG5ldyBmZSgiU2VxdWVuY2UgZGlmZnMgbXVzdCBiZSBzb3J0ZWQiKTtuPWl9fWNvbnN0cnVjdG9yKHQsbil7dGhpcy5zZXExUmFuZ2U9dCx0aGlzLnNlcTJSYW5nZT1ufXN3YXAoKXtyZXR1cm4gbmV3IEsodGhpcy5zZXEyUmFuZ2UsdGhpcy5zZXExUmFuZ2UpfXRvU3RyaW5nKCl7cmV0dXJuYCR7dGhpcy5zZXExUmFuZ2V9IDwtPiAke3RoaXMuc2VxMlJhbmdlfWB9am9pbih0KXtyZXR1cm4gbmV3IEsodGhpcy5zZXExUmFuZ2Uuam9pbih0LnNlcTFSYW5nZSksdGhpcy5zZXEyUmFuZ2Uuam9pbih0LnNlcTJSYW5nZSkpfWRlbHRhKHQpe3JldHVybiB0PT09MD90aGlzOm5ldyBLKHRoaXMuc2VxMVJhbmdlLmRlbHRhKHQpLHRoaXMuc2VxMlJhbmdlLmRlbHRhKHQpKX1kZWx0YVN0YXJ0KHQpe3JldHVybiB0PT09MD90aGlzOm5ldyBLKHRoaXMuc2VxMVJhbmdlLmRlbHRhU3RhcnQodCksdGhpcy5zZXEyUmFuZ2UuZGVsdGFTdGFydCh0KSl9ZGVsdGFFbmQodCl7cmV0dXJuIHQ9PT0wP3RoaXM6bmV3IEsodGhpcy5zZXExUmFuZ2UuZGVsdGFFbmQodCksdGhpcy5zZXEyUmFuZ2UuZGVsdGFFbmQodCkpfWludGVyc2VjdCh0KXtjb25zdCBuPXRoaXMuc2VxMVJhbmdlLmludGVyc2VjdCh0LnNlcTFSYW5nZSksaT10aGlzLnNlcTJSYW5nZS5pbnRlcnNlY3QodC5zZXEyUmFuZ2UpO2lmKCEoIW58fCFpKSlyZXR1cm4gbmV3IEsobixpKX1nZXRTdGFydHMoKXtyZXR1cm4gbmV3IEZlKHRoaXMuc2VxMVJhbmdlLnN0YXJ0LHRoaXMuc2VxMlJhbmdlLnN0YXJ0KX1nZXRFbmRFeGNsdXNpdmVzKCl7cmV0dXJuIG5ldyBGZSh0aGlzLnNlcTFSYW5nZS5lbmRFeGNsdXNpdmUsdGhpcy5zZXEyUmFuZ2UuZW5kRXhjbHVzaXZlKX19Y29uc3QgZXQ9Y2xhc3MgZXR7Y29uc3RydWN0b3IodCxuKXt0aGlzLm9mZnNldDE9dCx0aGlzLm9mZnNldDI9bn10b1N0cmluZygpe3JldHVybmAke3RoaXMub2Zmc2V0MX0gPC0+ICR7dGhpcy5vZmZzZXQyfWB9ZGVsdGEodCl7cmV0dXJuIHQ9PT0wP3RoaXM6bmV3IGV0KHRoaXMub2Zmc2V0MSt0LHRoaXMub2Zmc2V0Mit0KX1lcXVhbHModCl7cmV0dXJuIHRoaXMub2Zmc2V0MT09PXQub2Zmc2V0MSYmdGhpcy5vZmZzZXQyPT09dC5vZmZzZXQyfX07ZXQuemVybz1uZXcgZXQoMCwwKSxldC5tYXg9bmV3IGV0KE51bWJlci5NQVhfU0FGRV9JTlRFR0VSLE51bWJlci5NQVhfU0FGRV9JTlRFR0VSKTtsZXQgRmU9ZXQ7Y29uc3Qga249Y2xhc3Mga257aXNWYWxpZCgpe3JldHVybiEwfX07a24uaW5zdGFuY2U9bmV3IGtuO2xldCBFdD1rbjtjbGFzcyBfdXtjb25zdHJ1Y3Rvcih0KXtpZih0aGlzLnRpbWVvdXQ9dCx0aGlzLnN0YXJ0VGltZT1EYXRlLm5vdygpLHRoaXMudmFsaWQ9ITAsdDw9MCl0aHJvdyBuZXcgZmUoInRpbWVvdXQgbXVzdCBiZSBwb3NpdGl2ZSIpfWlzVmFsaWQoKXtpZighKERhdGUubm93KCktdGhpcy5zdGFydFRpbWU8dGhpcy50aW1lb3V0KSYmdGhpcy52YWxpZCl7dGhpcy52YWxpZD0hMTtkZWJ1Z2dlcn1yZXR1cm4gdGhpcy52YWxpZH19Y2xhc3MgY2l7Y29uc3RydWN0b3IodCxuKXt0aGlzLndpZHRoPXQsdGhpcy5oZWlnaHQ9bix0aGlzLmFycmF5PVtdLHRoaXMuYXJyYXk9bmV3IEFycmF5KHQqbil9Z2V0KHQsbil7cmV0dXJuIHRoaXMuYXJyYXlbdCtuKnRoaXMud2lkdGhdfXNldCh0LG4saSl7dGhpcy5hcnJheVt0K24qdGhpcy53aWR0aF09aX19ZnVuY3Rpb24gaGkoZSl7cmV0dXJuIGU9PT0zMnx8ZT09PTl9Y29uc3QgV3Q9Y2xhc3MgV3R7c3RhdGljIGdldEtleSh0KXtsZXQgbj10aGlzLmNocktleXMuZ2V0KHQpO3JldHVybiBuPT09dm9pZCAwJiYobj10aGlzLmNocktleXMuc2l6ZSx0aGlzLmNocktleXMuc2V0KHQsbikpLG59Y29uc3RydWN0b3IodCxuLGkpe3RoaXMucmFuZ2U9dCx0aGlzLmxpbmVzPW4sdGhpcy5zb3VyY2U9aSx0aGlzLmhpc3RvZ3JhbT1bXTtsZXQgcj0wO2ZvcihsZXQgcz10LnN0YXJ0TGluZU51bWJlci0xO3M8dC5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlLTE7cysrKXtjb25zdCBhPW5bc107Zm9yKGxldCBvPTA7bzxhLmxlbmd0aDtvKyspe3IrKztjb25zdCB1PWFbb10sYz1XdC5nZXRLZXkodSk7dGhpcy5oaXN0b2dyYW1bY109KHRoaXMuaGlzdG9ncmFtW2NdfHwwKSsxfXIrKztjb25zdCBsPVd0LmdldEtleShgCmApO3RoaXMuaGlzdG9ncmFtW2xdPSh0aGlzLmhpc3RvZ3JhbVtsXXx8MCkrMX10aGlzLnRvdGFsQ291bnQ9cn1jb21wdXRlU2ltaWxhcml0eSh0KXtsZXQgbj0wO2NvbnN0IGk9TWF0aC5tYXgodGhpcy5oaXN0b2dyYW0ubGVuZ3RoLHQuaGlzdG9ncmFtLmxlbmd0aCk7Zm9yKGxldCByPTA7cjxpO3IrKyluKz1NYXRoLmFicygodGhpcy5oaXN0b2dyYW1bcl0/PzApLSh0Lmhpc3RvZ3JhbVtyXT8/MCkpO3JldHVybiAxLW4vKHRoaXMudG90YWxDb3VudCt0LnRvdGFsQ291bnQpfX07V3QuY2hyS2V5cz1uZXcgTWFwO2xldCBybj1XdDtjbGFzcyB3dXtjb21wdXRlKHQsbixpPUV0Lmluc3RhbmNlLHIpe2lmKHQubGVuZ3RoPT09MHx8bi5sZW5ndGg9PT0wKXJldHVybiBXZS50cml2aWFsKHQsbik7Y29uc3Qgcz1uZXcgY2kodC5sZW5ndGgsbi5sZW5ndGgpLGE9bmV3IGNpKHQubGVuZ3RoLG4ubGVuZ3RoKSxsPW5ldyBjaSh0Lmxlbmd0aCxuLmxlbmd0aCk7Zm9yKGxldCBfPTA7Xzx0Lmxlbmd0aDtfKyspZm9yKGxldCBnPTA7ZzxuLmxlbmd0aDtnKyspe2lmKCFpLmlzVmFsaWQoKSlyZXR1cm4gV2UudHJpdmlhbFRpbWVkT3V0KHQsbik7Y29uc3Qgaz1fPT09MD8wOnMuZ2V0KF8tMSxnKSx5PWc9PT0wPzA6cy5nZXQoXyxnLTEpO2xldCB2O3QuZ2V0RWxlbWVudChfKT09PW4uZ2V0RWxlbWVudChnKT8oXz09PTB8fGc9PT0wP3Y9MDp2PXMuZ2V0KF8tMSxnLTEpLF8+MCYmZz4wJiZhLmdldChfLTEsZy0xKT09PTMmJih2Kz1sLmdldChfLTEsZy0xKSksdis9cj9yKF8sZyk6MSk6dj0tMTtjb25zdCBFPU1hdGgubWF4KGsseSx2KTtpZihFPT09dil7Y29uc3QgTT1fPjAmJmc+MD9sLmdldChfLTEsZy0xKTowO2wuc2V0KF8sZyxNKzEpLGEuc2V0KF8sZywzKX1lbHNlIEU9PT1rPyhsLnNldChfLGcsMCksYS5zZXQoXyxnLDEpKTpFPT09eSYmKGwuc2V0KF8sZywwKSxhLnNldChfLGcsMikpO3Muc2V0KF8sZyxFKX1jb25zdCBvPVtdO2xldCB1PXQubGVuZ3RoLGM9bi5sZW5ndGg7ZnVuY3Rpb24gZChfLGcpeyhfKzEhPT11fHxnKzEhPT1jKSYmby5wdXNoKG5ldyBLKG5ldyBqKF8rMSx1KSxuZXcgaihnKzEsYykpKSx1PV8sYz1nfWxldCBtPXQubGVuZ3RoLTEsZj1uLmxlbmd0aC0xO2Zvcig7bT49MCYmZj49MDspYS5nZXQobSxmKT09PTM/KGQobSxmKSxtLS0sZi0tKTphLmdldChtLGYpPT09MT9tLS06Zi0tO3JldHVybiBkKC0xLC0xKSxvLnJldmVyc2UoKSxuZXcgV2UobywhMSl9fWNsYXNzIFVze2NvbXB1dGUodCxuLGk9RXQuaW5zdGFuY2Upe2lmKHQubGVuZ3RoPT09MHx8bi5sZW5ndGg9PT0wKXJldHVybiBXZS50cml2aWFsKHQsbik7Y29uc3Qgcj10LHM9bjtmdW5jdGlvbiBhKGcsayl7Zm9yKDtnPHIubGVuZ3RoJiZrPHMubGVuZ3RoJiZyLmdldEVsZW1lbnQoZyk9PT1zLmdldEVsZW1lbnQoayk7KWcrKyxrKys7cmV0dXJuIGd9bGV0IGw9MDtjb25zdCBvPW5ldyB2dTtvLnNldCgwLGEoMCwwKSk7Y29uc3QgdT1uZXcgeXU7dS5zZXQoMCxvLmdldCgwKT09PTA/bnVsbDpuZXcgSHMobnVsbCwwLDAsby5nZXQoMCkpKTtsZXQgYz0wO2U6Zm9yKDs7KXtpZihsKyssIWkuaXNWYWxpZCgpKXJldHVybiBXZS50cml2aWFsVGltZWRPdXQocixzKTtjb25zdCBnPS1NYXRoLm1pbihsLHMubGVuZ3RoK2wlMiksaz1NYXRoLm1pbihsLHIubGVuZ3RoK2wlMik7Zm9yKGM9ZztjPD1rO2MrPTIpe2NvbnN0IHk9Yz09PWs/LTE6by5nZXQoYysxKSx2PWM9PT1nPy0xOm8uZ2V0KGMtMSkrMSxFPU1hdGgubWluKE1hdGgubWF4KHksdiksci5sZW5ndGgpLE09RS1jO2lmKEU+ci5sZW5ndGh8fE0+cy5sZW5ndGgpY29udGludWU7Y29uc3QgRD1hKEUsTSk7by5zZXQoYyxEKTtjb25zdCBOPUU9PT15P3UuZ2V0KGMrMSk6dS5nZXQoYy0xKTtpZih1LnNldChjLEQhPT1FP25ldyBIcyhOLEUsTSxELUUpOk4pLG8uZ2V0KGMpPT09ci5sZW5ndGgmJm8uZ2V0KGMpLWM9PT1zLmxlbmd0aClicmVhayBlfX1sZXQgZD11LmdldChjKTtjb25zdCBtPVtdO2xldCBmPXIubGVuZ3RoLF89cy5sZW5ndGg7Zm9yKDs7KXtjb25zdCBnPWQ/ZC54K2QubGVuZ3RoOjAsaz1kP2QueStkLmxlbmd0aDowO2lmKChnIT09Znx8ayE9PV8pJiZtLnB1c2gobmV3IEsobmV3IGooZyxmKSxuZXcgaihrLF8pKSksIWQpYnJlYWs7Zj1kLngsXz1kLnksZD1kLnByZXZ9cmV0dXJuIG0ucmV2ZXJzZSgpLG5ldyBXZShtLCExKX19Y2xhc3MgSHN7Y29uc3RydWN0b3IodCxuLGkscil7dGhpcy5wcmV2PXQsdGhpcy54PW4sdGhpcy55PWksdGhpcy5sZW5ndGg9cn19Y2xhc3MgdnV7Y29uc3RydWN0b3IoKXt0aGlzLnBvc2l0aXZlQXJyPW5ldyBJbnQzMkFycmF5KDEwKSx0aGlzLm5lZ2F0aXZlQXJyPW5ldyBJbnQzMkFycmF5KDEwKX1nZXQodCl7cmV0dXJuIHQ8MD8odD0tdC0xLHRoaXMubmVnYXRpdmVBcnJbdF0pOnRoaXMucG9zaXRpdmVBcnJbdF19c2V0KHQsbil7aWYodDwwKXtpZih0PS10LTEsdD49dGhpcy5uZWdhdGl2ZUFyci5sZW5ndGgpe2NvbnN0IGk9dGhpcy5uZWdhdGl2ZUFycjt0aGlzLm5lZ2F0aXZlQXJyPW5ldyBJbnQzMkFycmF5KGkubGVuZ3RoKjIpLHRoaXMubmVnYXRpdmVBcnIuc2V0KGkpfXRoaXMubmVnYXRpdmVBcnJbdF09bn1lbHNle2lmKHQ+PXRoaXMucG9zaXRpdmVBcnIubGVuZ3RoKXtjb25zdCBpPXRoaXMucG9zaXRpdmVBcnI7dGhpcy5wb3NpdGl2ZUFycj1uZXcgSW50MzJBcnJheShpLmxlbmd0aCoyKSx0aGlzLnBvc2l0aXZlQXJyLnNldChpKX10aGlzLnBvc2l0aXZlQXJyW3RdPW59fX1jbGFzcyB5dXtjb25zdHJ1Y3Rvcigpe3RoaXMucG9zaXRpdmVBcnI9W10sdGhpcy5uZWdhdGl2ZUFycj1bXX1nZXQodCl7cmV0dXJuIHQ8MD8odD0tdC0xLHRoaXMubmVnYXRpdmVBcnJbdF0pOnRoaXMucG9zaXRpdmVBcnJbdF19c2V0KHQsbil7dDwwPyh0PS10LTEsdGhpcy5uZWdhdGl2ZUFyclt0XT1uKTp0aGlzLnBvc2l0aXZlQXJyW3RdPW59fWNsYXNzIHNue2NvbnN0cnVjdG9yKHQsbixpKXt0aGlzLmxpbmVzPXQsdGhpcy5yYW5nZT1uLHRoaXMuY29uc2lkZXJXaGl0ZXNwYWNlQ2hhbmdlcz1pLHRoaXMuZWxlbWVudHM9W10sdGhpcy5maXJzdEVsZW1lbnRPZmZzZXRCeUxpbmVJZHg9W10sdGhpcy5saW5lU3RhcnRPZmZzZXRzPVtdLHRoaXMudHJpbW1lZFdzTGVuZ3Roc0J5TGluZUlkeD1bXSx0aGlzLmZpcnN0RWxlbWVudE9mZnNldEJ5TGluZUlkeC5wdXNoKDApO2ZvcihsZXQgcj10aGlzLnJhbmdlLnN0YXJ0TGluZU51bWJlcjtyPD10aGlzLnJhbmdlLmVuZExpbmVOdW1iZXI7cisrKXtsZXQgcz10W3ItMV0sYT0wO3I9PT10aGlzLnJhbmdlLnN0YXJ0TGluZU51bWJlciYmdGhpcy5yYW5nZS5zdGFydENvbHVtbj4xJiYoYT10aGlzLnJhbmdlLnN0YXJ0Q29sdW1uLTEscz1zLnN1YnN0cmluZyhhKSksdGhpcy5saW5lU3RhcnRPZmZzZXRzLnB1c2goYSk7bGV0IGw9MDtpZighaSl7Y29uc3QgdT1zLnRyaW1TdGFydCgpO2w9cy5sZW5ndGgtdS5sZW5ndGgscz11LnRyaW1FbmQoKX10aGlzLnRyaW1tZWRXc0xlbmd0aHNCeUxpbmVJZHgucHVzaChsKTtjb25zdCBvPXI9PT10aGlzLnJhbmdlLmVuZExpbmVOdW1iZXI/TWF0aC5taW4odGhpcy5yYW5nZS5lbmRDb2x1bW4tMS1hLWwscy5sZW5ndGgpOnMubGVuZ3RoO2ZvcihsZXQgdT0wO3U8bzt1KyspdGhpcy5lbGVtZW50cy5wdXNoKHMuY2hhckNvZGVBdCh1KSk7cjx0aGlzLnJhbmdlLmVuZExpbmVOdW1iZXImJih0aGlzLmVsZW1lbnRzLnB1c2goMTApLHRoaXMuZmlyc3RFbGVtZW50T2Zmc2V0QnlMaW5lSWR4LnB1c2godGhpcy5lbGVtZW50cy5sZW5ndGgpKX19dG9TdHJpbmcoKXtyZXR1cm5gU2xpY2U6ICIke3RoaXMudGV4dH0iYH1nZXQgdGV4dCgpe3JldHVybiB0aGlzLmdldFRleHQobmV3IGooMCx0aGlzLmxlbmd0aCkpfWdldFRleHQodCl7cmV0dXJuIHRoaXMuZWxlbWVudHMuc2xpY2UodC5zdGFydCx0LmVuZEV4Y2x1c2l2ZSkubWFwKG49PlN0cmluZy5mcm9tQ2hhckNvZGUobikpLmpvaW4oIiIpfWdldEVsZW1lbnQodCl7cmV0dXJuIHRoaXMuZWxlbWVudHNbdF19Z2V0IGxlbmd0aCgpe3JldHVybiB0aGlzLmVsZW1lbnRzLmxlbmd0aH1nZXRCb3VuZGFyeVNjb3JlKHQpe2NvbnN0IG49RnModD4wP3RoaXMuZWxlbWVudHNbdC0xXTotMSksaT1Gcyh0PHRoaXMuZWxlbWVudHMubGVuZ3RoP3RoaXMuZWxlbWVudHNbdF06LTEpO2lmKG49PT03JiZpPT09OClyZXR1cm4gMDtpZihuPT09OClyZXR1cm4gMTUwO2xldCByPTA7cmV0dXJuIG4hPT1pJiYocis9MTAsbj09PTAmJmk9PT0xJiYocis9MSkpLHIrPVdzKG4pLHIrPVdzKGkpLHJ9dHJhbnNsYXRlT2Zmc2V0KHQsbj0icmlnaHQiKXtjb25zdCBpPUx0KHRoaXMuZmlyc3RFbGVtZW50T2Zmc2V0QnlMaW5lSWR4LHM9PnM8PXQpLHI9dC10aGlzLmZpcnN0RWxlbWVudE9mZnNldEJ5TGluZUlkeFtpXTtyZXR1cm4gbmV3IHRlKHRoaXMucmFuZ2Uuc3RhcnRMaW5lTnVtYmVyK2ksMSt0aGlzLmxpbmVTdGFydE9mZnNldHNbaV0rcisocj09PTAmJm49PT0ibGVmdCI/MDp0aGlzLnRyaW1tZWRXc0xlbmd0aHNCeUxpbmVJZHhbaV0pKX10cmFuc2xhdGVSYW5nZSh0KXtjb25zdCBuPXRoaXMudHJhbnNsYXRlT2Zmc2V0KHQuc3RhcnQsInJpZ2h0IiksaT10aGlzLnRyYW5zbGF0ZU9mZnNldCh0LmVuZEV4Y2x1c2l2ZSwibGVmdCIpO3JldHVybiBpLmlzQmVmb3JlKG4pP0cuZnJvbVBvc2l0aW9ucyhpLGkpOkcuZnJvbVBvc2l0aW9ucyhuLGkpfWZpbmRXb3JkQ29udGFpbmluZyh0KXtpZih0PDB8fHQ+PXRoaXMuZWxlbWVudHMubGVuZ3RofHwhZGkodGhpcy5lbGVtZW50c1t0XSkpcmV0dXJuO2xldCBuPXQ7Zm9yKDtuPjAmJmRpKHRoaXMuZWxlbWVudHNbbi0xXSk7KW4tLTtsZXQgaT10O2Zvcig7aTx0aGlzLmVsZW1lbnRzLmxlbmd0aCYmZGkodGhpcy5lbGVtZW50c1tpXSk7KWkrKztyZXR1cm4gbmV3IGoobixpKX1jb3VudExpbmVzSW4odCl7cmV0dXJuIHRoaXMudHJhbnNsYXRlT2Zmc2V0KHQuZW5kRXhjbHVzaXZlKS5saW5lTnVtYmVyLXRoaXMudHJhbnNsYXRlT2Zmc2V0KHQuc3RhcnQpLmxpbmVOdW1iZXJ9aXNTdHJvbmdseUVxdWFsKHQsbil7cmV0dXJuIHRoaXMuZWxlbWVudHNbdF09PT10aGlzLmVsZW1lbnRzW25dfWV4dGVuZFRvRnVsbExpbmVzKHQpe2NvbnN0IG49Y3QodGhpcy5maXJzdEVsZW1lbnRPZmZzZXRCeUxpbmVJZHgscj0+cjw9dC5zdGFydCk/PzAsaT1zdSh0aGlzLmZpcnN0RWxlbWVudE9mZnNldEJ5TGluZUlkeCxyPT50LmVuZEV4Y2x1c2l2ZTw9cik/P3RoaXMuZWxlbWVudHMubGVuZ3RoO3JldHVybiBuZXcgaihuLGkpfX1mdW5jdGlvbiBkaShlKXtyZXR1cm4gZT49OTcmJmU8PTEyMnx8ZT49NjUmJmU8PTkwfHxlPj00OCYmZTw9NTd9Y29uc3QgeHU9ezA6MCwxOjAsMjowLDM6MTAsNDoyLDU6MzAsNjozLDc6MTAsODoxMH07ZnVuY3Rpb24gV3MoZSl7cmV0dXJuIHh1W2VdfWZ1bmN0aW9uIEZzKGUpe3JldHVybiBlPT09MTA/ODplPT09MTM/NzpoaShlKT82OmU+PTk3JiZlPD0xMjI/MDplPj02NSYmZTw9OTA/MTplPj00OCYmZTw9NTc/MjplPT09LTE/MzplPT09NDR8fGU9PT01OT81OjR9ZnVuY3Rpb24gVHUoZSx0LG4saSxyLHMpe2xldHttb3ZlczphLGV4Y2x1ZGVkQ2hhbmdlczpsfT1BdShlLHQsbixzKTtpZighcy5pc1ZhbGlkKCkpcmV0dXJuW107Y29uc3Qgbz1lLmZpbHRlcihjPT4hbC5oYXMoYykpLHU9U3UobyxpLHIsdCxuLHMpO3JldHVybiBndShhLHUpLGE9THUoYSksYT1hLmZpbHRlcihjPT57Y29uc3QgZD1jLm9yaWdpbmFsLnRvT2Zmc2V0UmFuZ2UoKS5zbGljZSh0KS5tYXAoZj0+Zi50cmltKCkpO3JldHVybiBkLmpvaW4oYApgKS5sZW5ndGg+PTE1JiZrdShkLGY9PmYubGVuZ3RoPj0yKT49Mn0pLGE9Q3UoZSxhKSxhfWZ1bmN0aW9uIGt1KGUsdCl7bGV0IG49MDtmb3IoY29uc3QgaSBvZiBlKXQoaSkmJm4rKztyZXR1cm4gbn1mdW5jdGlvbiBBdShlLHQsbixpKXtjb25zdCByPVtdLHM9ZS5maWx0ZXIobz0+by5tb2RpZmllZC5pc0VtcHR5JiZvLm9yaWdpbmFsLmxlbmd0aD49MykubWFwKG89Pm5ldyBybihvLm9yaWdpbmFsLHQsbykpLGE9bmV3IFNldChlLmZpbHRlcihvPT5vLm9yaWdpbmFsLmlzRW1wdHkmJm8ubW9kaWZpZWQubGVuZ3RoPj0zKS5tYXAobz0+bmV3IHJuKG8ubW9kaWZpZWQsbixvKSkpLGw9bmV3IFNldDtmb3IoY29uc3QgbyBvZiBzKXtsZXQgdT0tMSxjO2Zvcihjb25zdCBkIG9mIGEpe2NvbnN0IG09by5jb21wdXRlU2ltaWxhcml0eShkKTttPnUmJih1PW0sYz1kKX1pZih1Pi45JiZjJiYoYS5kZWxldGUoYyksci5wdXNoKG5ldyB2ZShvLnJhbmdlLGMucmFuZ2UpKSxsLmFkZChvLnNvdXJjZSksbC5hZGQoYy5zb3VyY2UpKSwhaS5pc1ZhbGlkKCkpcmV0dXJue21vdmVzOnIsZXhjbHVkZWRDaGFuZ2VzOmx9fXJldHVybnttb3ZlczpyLGV4Y2x1ZGVkQ2hhbmdlczpsfX1mdW5jdGlvbiBTdShlLHQsbixpLHIscyl7Y29uc3QgYT1bXSxsPW5ldyBqbDtmb3IoY29uc3QgbSBvZiBlKWZvcihsZXQgZj1tLm9yaWdpbmFsLnN0YXJ0TGluZU51bWJlcjtmPG0ub3JpZ2luYWwuZW5kTGluZU51bWJlckV4Y2x1c2l2ZS0yO2YrKyl7Y29uc3QgXz1gJHt0W2YtMV19OiR7dFtmKzEtMV19OiR7dFtmKzItMV19YDtsLmFkZChfLHtyYW5nZTpuZXcgTyhmLGYrMyl9KX1jb25zdCBvPVtdO2Uuc29ydCh0bihtPT5tLm1vZGlmaWVkLnN0YXJ0TGluZU51bWJlcixubikpO2Zvcihjb25zdCBtIG9mIGUpe2xldCBmPVtdO2ZvcihsZXQgXz1tLm1vZGlmaWVkLnN0YXJ0TGluZU51bWJlcjtfPG0ubW9kaWZpZWQuZW5kTGluZU51bWJlckV4Y2x1c2l2ZS0yO18rKyl7Y29uc3QgZz1gJHtuW18tMV19OiR7bltfKzEtMV19OiR7bltfKzItMV19YCxrPW5ldyBPKF8sXyszKSx5PVtdO2wuZm9yRWFjaChnLCh7cmFuZ2U6dn0pPT57Zm9yKGNvbnN0IE0gb2YgZilpZihNLm9yaWdpbmFsTGluZVJhbmdlLmVuZExpbmVOdW1iZXJFeGNsdXNpdmUrMT09PXYuZW5kTGluZU51bWJlckV4Y2x1c2l2ZSYmTS5tb2RpZmllZExpbmVSYW5nZS5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlKzE9PT1rLmVuZExpbmVOdW1iZXJFeGNsdXNpdmUpe00ub3JpZ2luYWxMaW5lUmFuZ2U9bmV3IE8oTS5vcmlnaW5hbExpbmVSYW5nZS5zdGFydExpbmVOdW1iZXIsdi5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlKSxNLm1vZGlmaWVkTGluZVJhbmdlPW5ldyBPKE0ubW9kaWZpZWRMaW5lUmFuZ2Uuc3RhcnRMaW5lTnVtYmVyLGsuZW5kTGluZU51bWJlckV4Y2x1c2l2ZSkseS5wdXNoKE0pO3JldHVybn1jb25zdCBFPXttb2RpZmllZExpbmVSYW5nZTprLG9yaWdpbmFsTGluZVJhbmdlOnZ9O28ucHVzaChFKSx5LnB1c2goRSl9KSxmPXl9aWYoIXMuaXNWYWxpZCgpKXJldHVybltdfW8uc29ydChidSh0bihtPT5tLm1vZGlmaWVkTGluZVJhbmdlLmxlbmd0aCxubikpKTtjb25zdCB1PW5ldyBSZSxjPW5ldyBSZTtmb3IoY29uc3QgbSBvZiBvKXtjb25zdCBmPW0ubW9kaWZpZWRMaW5lUmFuZ2Uuc3RhcnRMaW5lTnVtYmVyLW0ub3JpZ2luYWxMaW5lUmFuZ2Uuc3RhcnRMaW5lTnVtYmVyLF89dS5zdWJ0cmFjdEZyb20obS5tb2RpZmllZExpbmVSYW5nZSksZz1jLnN1YnRyYWN0RnJvbShtLm9yaWdpbmFsTGluZVJhbmdlKS5nZXRXaXRoRGVsdGEoZiksaz1fLmdldEludGVyc2VjdGlvbihnKTtmb3IoY29uc3QgeSBvZiBrLnJhbmdlcyl7aWYoeS5sZW5ndGg8Myljb250aW51ZTtjb25zdCB2PXksRT15LmRlbHRhKC1mKTthLnB1c2gobmV3IHZlKEUsdikpLHUuYWRkUmFuZ2UodiksYy5hZGRSYW5nZShFKX19YS5zb3J0KHRuKG09Pm0ub3JpZ2luYWwuc3RhcnRMaW5lTnVtYmVyLG5uKSk7Y29uc3QgZD1uZXcgZW4oZSk7Zm9yKGxldCBtPTA7bTxhLmxlbmd0aDttKyspe2NvbnN0IGY9YVttXSxfPWQuZmluZExhc3RNb25vdG9ub3VzKE49Pk4ub3JpZ2luYWwuc3RhcnRMaW5lTnVtYmVyPD1mLm9yaWdpbmFsLnN0YXJ0TGluZU51bWJlciksZz1jdChlLE49Pk4ubW9kaWZpZWQuc3RhcnRMaW5lTnVtYmVyPD1mLm1vZGlmaWVkLnN0YXJ0TGluZU51bWJlciksaz1NYXRoLm1heChmLm9yaWdpbmFsLnN0YXJ0TGluZU51bWJlci1fLm9yaWdpbmFsLnN0YXJ0TGluZU51bWJlcixmLm1vZGlmaWVkLnN0YXJ0TGluZU51bWJlci1nLm1vZGlmaWVkLnN0YXJ0TGluZU51bWJlcikseT1kLmZpbmRMYXN0TW9ub3Rvbm91cyhOPT5OLm9yaWdpbmFsLnN0YXJ0TGluZU51bWJlcjxmLm9yaWdpbmFsLmVuZExpbmVOdW1iZXJFeGNsdXNpdmUpLHY9Y3QoZSxOPT5OLm1vZGlmaWVkLnN0YXJ0TGluZU51bWJlcjxmLm1vZGlmaWVkLmVuZExpbmVOdW1iZXJFeGNsdXNpdmUpLEU9TWF0aC5tYXgoeS5vcmlnaW5hbC5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlLWYub3JpZ2luYWwuZW5kTGluZU51bWJlckV4Y2x1c2l2ZSx2Lm1vZGlmaWVkLmVuZExpbmVOdW1iZXJFeGNsdXNpdmUtZi5tb2RpZmllZC5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlKTtsZXQgTTtmb3IoTT0wO008aztNKyspe2NvbnN0IE49Zi5vcmlnaW5hbC5zdGFydExpbmVOdW1iZXItTS0xLGI9Zi5tb2RpZmllZC5zdGFydExpbmVOdW1iZXItTS0xO2lmKE4+aS5sZW5ndGh8fGI+ci5sZW5ndGh8fHUuY29udGFpbnMoYil8fGMuY29udGFpbnMoTil8fCFQcyhpW04tMV0scltiLTFdLHMpKWJyZWFrfU0+MCYmKGMuYWRkUmFuZ2UobmV3IE8oZi5vcmlnaW5hbC5zdGFydExpbmVOdW1iZXItTSxmLm9yaWdpbmFsLnN0YXJ0TGluZU51bWJlcikpLHUuYWRkUmFuZ2UobmV3IE8oZi5tb2RpZmllZC5zdGFydExpbmVOdW1iZXItTSxmLm1vZGlmaWVkLnN0YXJ0TGluZU51bWJlcikpKTtsZXQgRDtmb3IoRD0wO0Q8RTtEKyspe2NvbnN0IE49Zi5vcmlnaW5hbC5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlK0QsYj1mLm1vZGlmaWVkLmVuZExpbmVOdW1iZXJFeGNsdXNpdmUrRDtpZihOPmkubGVuZ3RofHxiPnIubGVuZ3RofHx1LmNvbnRhaW5zKGIpfHxjLmNvbnRhaW5zKE4pfHwhUHMoaVtOLTFdLHJbYi0xXSxzKSlicmVha31EPjAmJihjLmFkZFJhbmdlKG5ldyBPKGYub3JpZ2luYWwuZW5kTGluZU51bWJlckV4Y2x1c2l2ZSxmLm9yaWdpbmFsLmVuZExpbmVOdW1iZXJFeGNsdXNpdmUrRCkpLHUuYWRkUmFuZ2UobmV3IE8oZi5tb2RpZmllZC5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlLGYubW9kaWZpZWQuZW5kTGluZU51bWJlckV4Y2x1c2l2ZStEKSkpLChNPjB8fEQ+MCkmJihhW21dPW5ldyB2ZShuZXcgTyhmLm9yaWdpbmFsLnN0YXJ0TGluZU51bWJlci1NLGYub3JpZ2luYWwuZW5kTGluZU51bWJlckV4Y2x1c2l2ZStEKSxuZXcgTyhmLm1vZGlmaWVkLnN0YXJ0TGluZU51bWJlci1NLGYubW9kaWZpZWQuZW5kTGluZU51bWJlckV4Y2x1c2l2ZStEKSkpfXJldHVybiBhfWZ1bmN0aW9uIFBzKGUsdCxuKXtpZihlLnRyaW0oKT09PXQudHJpbSgpKXJldHVybiEwO2lmKGUubGVuZ3RoPjMwMCYmdC5sZW5ndGg+MzAwKXJldHVybiExO2NvbnN0IHI9bmV3IFVzKCkuY29tcHV0ZShuZXcgc24oW2VdLG5ldyBHKDEsMSwxLGUubGVuZ3RoKSwhMSksbmV3IHNuKFt0XSxuZXcgRygxLDEsMSx0Lmxlbmd0aCksITEpLG4pO2xldCBzPTA7Y29uc3QgYT1LLmludmVydChyLmRpZmZzLGUubGVuZ3RoKTtmb3IoY29uc3QgYyBvZiBhKWMuc2VxMVJhbmdlLmZvckVhY2goZD0+e2hpKGUuY2hhckNvZGVBdChkKSl8fHMrK30pO2Z1bmN0aW9uIGwoYyl7bGV0IGQ9MDtmb3IobGV0IG09MDttPGUubGVuZ3RoO20rKyloaShjLmNoYXJDb2RlQXQobSkpfHxkKys7cmV0dXJuIGR9Y29uc3Qgbz1sKGUubGVuZ3RoPnQubGVuZ3RoP2U6dCk7cmV0dXJuIHMvbz4uNiYmbz4xMH1mdW5jdGlvbiBMdShlKXtpZihlLmxlbmd0aD09PTApcmV0dXJuIGU7ZS5zb3J0KHRuKG49Pm4ub3JpZ2luYWwuc3RhcnRMaW5lTnVtYmVyLG5uKSk7Y29uc3QgdD1bZVswXV07Zm9yKGxldCBuPTE7bjxlLmxlbmd0aDtuKyspe2NvbnN0IGk9dFt0Lmxlbmd0aC0xXSxyPWVbbl0scz1yLm9yaWdpbmFsLnN0YXJ0TGluZU51bWJlci1pLm9yaWdpbmFsLmVuZExpbmVOdW1iZXJFeGNsdXNpdmUsYT1yLm1vZGlmaWVkLnN0YXJ0TGluZU51bWJlci1pLm1vZGlmaWVkLmVuZExpbmVOdW1iZXJFeGNsdXNpdmU7aWYocz49MCYmYT49MCYmcythPD0yKXt0W3QubGVuZ3RoLTFdPWkuam9pbihyKTtjb250aW51ZX10LnB1c2gocil9cmV0dXJuIHR9ZnVuY3Rpb24gQ3UoZSx0KXtjb25zdCBuPW5ldyBlbihlKTtyZXR1cm4gdD10LmZpbHRlcihpPT57Y29uc3Qgcj1uLmZpbmRMYXN0TW9ub3Rvbm91cyhsPT5sLm9yaWdpbmFsLnN0YXJ0TGluZU51bWJlcjxpLm9yaWdpbmFsLmVuZExpbmVOdW1iZXJFeGNsdXNpdmUpfHxuZXcgdmUobmV3IE8oMSwxKSxuZXcgTygxLDEpKSxzPWN0KGUsbD0+bC5tb2RpZmllZC5zdGFydExpbmVOdW1iZXI8aS5tb2RpZmllZC5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlKTtyZXR1cm4gciE9PXN9KSx0fWZ1bmN0aW9uIEJzKGUsdCxuKXtsZXQgaT1uO3JldHVybiBpPXFzKGUsdCxpKSxpPXFzKGUsdCxpKSxpPUV1KGUsdCxpKSxpfWZ1bmN0aW9uIHFzKGUsdCxuKXtpZihuLmxlbmd0aD09PTApcmV0dXJuIG47Y29uc3QgaT1bXTtpLnB1c2goblswXSk7Zm9yKGxldCBzPTE7czxuLmxlbmd0aDtzKyspe2NvbnN0IGE9aVtpLmxlbmd0aC0xXTtsZXQgbD1uW3NdO2lmKGwuc2VxMVJhbmdlLmlzRW1wdHl8fGwuc2VxMlJhbmdlLmlzRW1wdHkpe2NvbnN0IG89bC5zZXExUmFuZ2Uuc3RhcnQtYS5zZXExUmFuZ2UuZW5kRXhjbHVzaXZlO2xldCB1O2Zvcih1PTE7dTw9byYmIShlLmdldEVsZW1lbnQobC5zZXExUmFuZ2Uuc3RhcnQtdSkhPT1lLmdldEVsZW1lbnQobC5zZXExUmFuZ2UuZW5kRXhjbHVzaXZlLXUpfHx0LmdldEVsZW1lbnQobC5zZXEyUmFuZ2Uuc3RhcnQtdSkhPT10LmdldEVsZW1lbnQobC5zZXEyUmFuZ2UuZW5kRXhjbHVzaXZlLXUpKTt1KyspO2lmKHUtLSx1PT09byl7aVtpLmxlbmd0aC0xXT1uZXcgSyhuZXcgaihhLnNlcTFSYW5nZS5zdGFydCxsLnNlcTFSYW5nZS5lbmRFeGNsdXNpdmUtbyksbmV3IGooYS5zZXEyUmFuZ2Uuc3RhcnQsbC5zZXEyUmFuZ2UuZW5kRXhjbHVzaXZlLW8pKTtjb250aW51ZX1sPWwuZGVsdGEoLXUpfWkucHVzaChsKX1jb25zdCByPVtdO2ZvcihsZXQgcz0wO3M8aS5sZW5ndGgtMTtzKyspe2NvbnN0IGE9aVtzKzFdO2xldCBsPWlbc107aWYobC5zZXExUmFuZ2UuaXNFbXB0eXx8bC5zZXEyUmFuZ2UuaXNFbXB0eSl7Y29uc3Qgbz1hLnNlcTFSYW5nZS5zdGFydC1sLnNlcTFSYW5nZS5lbmRFeGNsdXNpdmU7bGV0IHU7Zm9yKHU9MDt1PG8mJiEoIWUuaXNTdHJvbmdseUVxdWFsKGwuc2VxMVJhbmdlLnN0YXJ0K3UsbC5zZXExUmFuZ2UuZW5kRXhjbHVzaXZlK3UpfHwhdC5pc1N0cm9uZ2x5RXF1YWwobC5zZXEyUmFuZ2Uuc3RhcnQrdSxsLnNlcTJSYW5nZS5lbmRFeGNsdXNpdmUrdSkpO3UrKyk7aWYodT09PW8pe2lbcysxXT1uZXcgSyhuZXcgaihsLnNlcTFSYW5nZS5zdGFydCtvLGEuc2VxMVJhbmdlLmVuZEV4Y2x1c2l2ZSksbmV3IGoobC5zZXEyUmFuZ2Uuc3RhcnQrbyxhLnNlcTJSYW5nZS5lbmRFeGNsdXNpdmUpKTtjb250aW51ZX11PjAmJihsPWwuZGVsdGEodSkpfXIucHVzaChsKX1yZXR1cm4gaS5sZW5ndGg+MCYmci5wdXNoKGlbaS5sZW5ndGgtMV0pLHJ9ZnVuY3Rpb24gRXUoZSx0LG4pe2lmKCFlLmdldEJvdW5kYXJ5U2NvcmV8fCF0LmdldEJvdW5kYXJ5U2NvcmUpcmV0dXJuIG47Zm9yKGxldCBpPTA7aTxuLmxlbmd0aDtpKyspe2NvbnN0IHI9aT4wP25baS0xXTp2b2lkIDAscz1uW2ldLGE9aSsxPG4ubGVuZ3RoP25baSsxXTp2b2lkIDAsbD1uZXcgaihyP3Iuc2VxMVJhbmdlLmVuZEV4Y2x1c2l2ZSsxOjAsYT9hLnNlcTFSYW5nZS5zdGFydC0xOmUubGVuZ3RoKSxvPW5ldyBqKHI/ci5zZXEyUmFuZ2UuZW5kRXhjbHVzaXZlKzE6MCxhP2Euc2VxMlJhbmdlLnN0YXJ0LTE6dC5sZW5ndGgpO3Muc2VxMVJhbmdlLmlzRW1wdHk/bltpXT1PcyhzLGUsdCxsLG8pOnMuc2VxMlJhbmdlLmlzRW1wdHkmJihuW2ldPU9zKHMuc3dhcCgpLHQsZSxvLGwpLnN3YXAoKSl9cmV0dXJuIG59ZnVuY3Rpb24gT3MoZSx0LG4saSxyKXtsZXQgYT0xO2Zvcig7ZS5zZXExUmFuZ2Uuc3RhcnQtYT49aS5zdGFydCYmZS5zZXEyUmFuZ2Uuc3RhcnQtYT49ci5zdGFydCYmbi5pc1N0cm9uZ2x5RXF1YWwoZS5zZXEyUmFuZ2Uuc3RhcnQtYSxlLnNlcTJSYW5nZS5lbmRFeGNsdXNpdmUtYSkmJmE8MTAwOylhKys7YS0tO2xldCBsPTA7Zm9yKDtlLnNlcTFSYW5nZS5zdGFydCtsPGkuZW5kRXhjbHVzaXZlJiZlLnNlcTJSYW5nZS5lbmRFeGNsdXNpdmUrbDxyLmVuZEV4Y2x1c2l2ZSYmbi5pc1N0cm9uZ2x5RXF1YWwoZS5zZXEyUmFuZ2Uuc3RhcnQrbCxlLnNlcTJSYW5nZS5lbmRFeGNsdXNpdmUrbCkmJmw8MTAwOylsKys7aWYoYT09PTAmJmw9PT0wKXJldHVybiBlO2xldCBvPTAsdT0tMTtmb3IobGV0IGM9LWE7Yzw9bDtjKyspe2NvbnN0IGQ9ZS5zZXEyUmFuZ2Uuc3RhcnQrYyxtPWUuc2VxMlJhbmdlLmVuZEV4Y2x1c2l2ZStjLGY9ZS5zZXExUmFuZ2Uuc3RhcnQrYyxfPXQuZ2V0Qm91bmRhcnlTY29yZShmKStuLmdldEJvdW5kYXJ5U2NvcmUoZCkrbi5nZXRCb3VuZGFyeVNjb3JlKG0pO18+dSYmKHU9XyxvPWMpfXJldHVybiBlLmRlbHRhKG8pfWZ1bmN0aW9uIFJ1KGUsdCxuKXtjb25zdCBpPVtdO2Zvcihjb25zdCByIG9mIG4pe2NvbnN0IHM9aVtpLmxlbmd0aC0xXTtpZighcyl7aS5wdXNoKHIpO2NvbnRpbnVlfXIuc2VxMVJhbmdlLnN0YXJ0LXMuc2VxMVJhbmdlLmVuZEV4Y2x1c2l2ZTw9Mnx8ci5zZXEyUmFuZ2Uuc3RhcnQtcy5zZXEyUmFuZ2UuZW5kRXhjbHVzaXZlPD0yP2lbaS5sZW5ndGgtMV09bmV3IEsocy5zZXExUmFuZ2Uuam9pbihyLnNlcTFSYW5nZSkscy5zZXEyUmFuZ2Uuam9pbihyLnNlcTJSYW5nZSkpOmkucHVzaChyKX1yZXR1cm4gaX1mdW5jdGlvbiBNdShlLHQsbil7Y29uc3QgaT1LLmludmVydChuLGUubGVuZ3RoKSxyPVtdO2xldCBzPW5ldyBGZSgwLDApO2Z1bmN0aW9uIGEobyx1KXtpZihvLm9mZnNldDE8cy5vZmZzZXQxfHxvLm9mZnNldDI8cy5vZmZzZXQyKXJldHVybjtjb25zdCBjPWUuZmluZFdvcmRDb250YWluaW5nKG8ub2Zmc2V0MSksZD10LmZpbmRXb3JkQ29udGFpbmluZyhvLm9mZnNldDIpO2lmKCFjfHwhZClyZXR1cm47bGV0IG09bmV3IEsoYyxkKTtjb25zdCBmPW0uaW50ZXJzZWN0KHUpO2xldCBfPWYuc2VxMVJhbmdlLmxlbmd0aCxnPWYuc2VxMlJhbmdlLmxlbmd0aDtmb3IoO2kubGVuZ3RoPjA7KXtjb25zdCBrPWlbMF07aWYoIShrLnNlcTFSYW5nZS5pbnRlcnNlY3RzKG0uc2VxMVJhbmdlKXx8ay5zZXEyUmFuZ2UuaW50ZXJzZWN0cyhtLnNlcTJSYW5nZSkpKWJyZWFrO2NvbnN0IHY9ZS5maW5kV29yZENvbnRhaW5pbmcoay5zZXExUmFuZ2Uuc3RhcnQpLEU9dC5maW5kV29yZENvbnRhaW5pbmcoay5zZXEyUmFuZ2Uuc3RhcnQpLE09bmV3IEsodixFKSxEPU0uaW50ZXJzZWN0KGspO2lmKF8rPUQuc2VxMVJhbmdlLmxlbmd0aCxnKz1ELnNlcTJSYW5nZS5sZW5ndGgsbT1tLmpvaW4oTSksbS5zZXExUmFuZ2UuZW5kRXhjbHVzaXZlPj1rLnNlcTFSYW5nZS5lbmRFeGNsdXNpdmUpaS5zaGlmdCgpO2Vsc2UgYnJlYWt9XytnPChtLnNlcTFSYW5nZS5sZW5ndGgrbS5zZXEyUmFuZ2UubGVuZ3RoKSoyLzMmJnIucHVzaChtKSxzPW0uZ2V0RW5kRXhjbHVzaXZlcygpfWZvcig7aS5sZW5ndGg+MDspe2NvbnN0IG89aS5zaGlmdCgpO28uc2VxMVJhbmdlLmlzRW1wdHl8fChhKG8uZ2V0U3RhcnRzKCksbyksYShvLmdldEVuZEV4Y2x1c2l2ZXMoKS5kZWx0YSgtMSksbykpfXJldHVybiBOdShuLHIpfWZ1bmN0aW9uIE51KGUsdCl7Y29uc3Qgbj1bXTtmb3IoO2UubGVuZ3RoPjB8fHQubGVuZ3RoPjA7KXtjb25zdCBpPWVbMF0scj10WzBdO2xldCBzO2kmJighcnx8aS5zZXExUmFuZ2Uuc3RhcnQ8ci5zZXExUmFuZ2Uuc3RhcnQpP3M9ZS5zaGlmdCgpOnM9dC5zaGlmdCgpLG4ubGVuZ3RoPjAmJm5bbi5sZW5ndGgtMV0uc2VxMVJhbmdlLmVuZEV4Y2x1c2l2ZT49cy5zZXExUmFuZ2Uuc3RhcnQ/bltuLmxlbmd0aC0xXT1uW24ubGVuZ3RoLTFdLmpvaW4ocyk6bi5wdXNoKHMpfXJldHVybiBufWZ1bmN0aW9uIER1KGUsdCxuKXtsZXQgaT1uO2lmKGkubGVuZ3RoPT09MClyZXR1cm4gaTtsZXQgcj0wLHM7ZG97cz0hMTtjb25zdCBhPVtpWzBdXTtmb3IobGV0IGw9MTtsPGkubGVuZ3RoO2wrKyl7bGV0IGM9ZnVuY3Rpb24obSxmKXtjb25zdCBfPW5ldyBqKHUuc2VxMVJhbmdlLmVuZEV4Y2x1c2l2ZSxvLnNlcTFSYW5nZS5zdGFydCk7cmV0dXJuIGUuZ2V0VGV4dChfKS5yZXBsYWNlKC9ccy9nLCIiKS5sZW5ndGg8PTQmJihtLnNlcTFSYW5nZS5sZW5ndGgrbS5zZXEyUmFuZ2UubGVuZ3RoPjV8fGYuc2VxMVJhbmdlLmxlbmd0aCtmLnNlcTJSYW5nZS5sZW5ndGg+NSl9O2NvbnN0IG89aVtsXSx1PWFbYS5sZW5ndGgtMV07Yyh1LG8pPyhzPSEwLGFbYS5sZW5ndGgtMV09YVthLmxlbmd0aC0xXS5qb2luKG8pKTphLnB1c2gobyl9aT1hfXdoaWxlKHIrKzwxMCYmcyk7cmV0dXJuIGl9ZnVuY3Rpb24gSXUoZSx0LG4pe2xldCBpPW47aWYoaS5sZW5ndGg9PT0wKXJldHVybiBpO2xldCByPTAscztkb3tzPSExO2NvbnN0IGw9W2lbMF1dO2ZvcihsZXQgbz0xO288aS5sZW5ndGg7bysrKXtsZXQgZD1mdW5jdGlvbihmLF8pe2NvbnN0IGc9bmV3IGooYy5zZXExUmFuZ2UuZW5kRXhjbHVzaXZlLHUuc2VxMVJhbmdlLnN0YXJ0KTtpZihlLmNvdW50TGluZXNJbihnKT41fHxnLmxlbmd0aD41MDApcmV0dXJuITE7Y29uc3QgeT1lLmdldFRleHQoZykudHJpbSgpO2lmKHkubGVuZ3RoPjIwfHx5LnNwbGl0KC9cclxufFxyfFxuLykubGVuZ3RoPjEpcmV0dXJuITE7Y29uc3Qgdj1lLmNvdW50TGluZXNJbihmLnNlcTFSYW5nZSksRT1mLnNlcTFSYW5nZS5sZW5ndGgsTT10LmNvdW50TGluZXNJbihmLnNlcTJSYW5nZSksRD1mLnNlcTJSYW5nZS5sZW5ndGgsTj1lLmNvdW50TGluZXNJbihfLnNlcTFSYW5nZSksYj1fLnNlcTFSYW5nZS5sZW5ndGgscD10LmNvdW50TGluZXNJbihfLnNlcTJSYW5nZSkseD1fLnNlcTJSYW5nZS5sZW5ndGgsVT0yKjQwKzUwO2Z1bmN0aW9uIEwoVCl7cmV0dXJuIE1hdGgubWluKFQsVSl9cmV0dXJuIE1hdGgucG93KE1hdGgucG93KEwodio0MCtFKSwxLjUpK01hdGgucG93KEwoTSo0MCtEKSwxLjUpLDEuNSkrTWF0aC5wb3coTWF0aC5wb3coTChOKjQwK2IpLDEuNSkrTWF0aC5wb3coTChwKjQwK3gpLDEuNSksMS41KT4oVSoqMS41KSoqMS41KjEuM307Y29uc3QgdT1pW29dLGM9bFtsLmxlbmd0aC0xXTtkKGMsdSk/KHM9ITAsbFtsLmxlbmd0aC0xXT1sW2wubGVuZ3RoLTFdLmpvaW4odSkpOmwucHVzaCh1KX1pPWx9d2hpbGUocisrPDEwJiZzKTtjb25zdCBhPVtdO3JldHVybiBwdShpLChsLG8sdSk9PntsZXQgYz1vO2Z1bmN0aW9uIGQoeSl7cmV0dXJuIHkubGVuZ3RoPjAmJnkudHJpbSgpLmxlbmd0aDw9MyYmby5zZXExUmFuZ2UubGVuZ3RoK28uc2VxMlJhbmdlLmxlbmd0aD4xMDB9Y29uc3QgbT1lLmV4dGVuZFRvRnVsbExpbmVzKG8uc2VxMVJhbmdlKSxmPWUuZ2V0VGV4dChuZXcgaihtLnN0YXJ0LG8uc2VxMVJhbmdlLnN0YXJ0KSk7ZChmKSYmKGM9Yy5kZWx0YVN0YXJ0KC1mLmxlbmd0aCkpO2NvbnN0IF89ZS5nZXRUZXh0KG5ldyBqKG8uc2VxMVJhbmdlLmVuZEV4Y2x1c2l2ZSxtLmVuZEV4Y2x1c2l2ZSkpO2QoXykmJihjPWMuZGVsdGFFbmQoXy5sZW5ndGgpKTtjb25zdCBnPUsuZnJvbU9mZnNldFBhaXJzKGw/bC5nZXRFbmRFeGNsdXNpdmVzKCk6RmUuemVybyx1P3UuZ2V0U3RhcnRzKCk6RmUubWF4KSxrPWMuaW50ZXJzZWN0KGcpO2EubGVuZ3RoPjAmJmsuZ2V0U3RhcnRzKCkuZXF1YWxzKGFbYS5sZW5ndGgtMV0uZ2V0RW5kRXhjbHVzaXZlcygpKT9hW2EubGVuZ3RoLTFdPWFbYS5sZW5ndGgtMV0uam9pbihrKTphLnB1c2goayl9KSxhfWNsYXNzIFZze2NvbnN0cnVjdG9yKHQsbil7dGhpcy50cmltbWVkSGFzaD10LHRoaXMubGluZXM9bn1nZXRFbGVtZW50KHQpe3JldHVybiB0aGlzLnRyaW1tZWRIYXNoW3RdfWdldCBsZW5ndGgoKXtyZXR1cm4gdGhpcy50cmltbWVkSGFzaC5sZW5ndGh9Z2V0Qm91bmRhcnlTY29yZSh0KXtjb25zdCBuPXQ9PT0wPzA6anModGhpcy5saW5lc1t0LTFdKSxpPXQ9PT10aGlzLmxpbmVzLmxlbmd0aD8wOmpzKHRoaXMubGluZXNbdF0pO3JldHVybiAxZTMtKG4raSl9Z2V0VGV4dCh0KXtyZXR1cm4gdGhpcy5saW5lcy5zbGljZSh0LnN0YXJ0LHQuZW5kRXhjbHVzaXZlKS5qb2luKGAKYCl9aXNTdHJvbmdseUVxdWFsKHQsbil7cmV0dXJuIHRoaXMubGluZXNbdF09PT10aGlzLmxpbmVzW25dfX1mdW5jdGlvbiBqcyhlKXtsZXQgdD0wO2Zvcig7dDxlLmxlbmd0aCYmKGUuY2hhckNvZGVBdCh0KT09PTMyfHxlLmNoYXJDb2RlQXQodCk9PT05KTspdCsrO3JldHVybiB0fWNsYXNzIHp1e2NvbnN0cnVjdG9yKCl7dGhpcy5keW5hbWljUHJvZ3JhbW1pbmdEaWZmaW5nPW5ldyB3dSx0aGlzLm15ZXJzRGlmZmluZ0FsZ29yaXRobT1uZXcgVXN9Y29tcHV0ZURpZmYodCxuLGkpe2lmKHQubGVuZ3RoPD0xJiZkdSh0LG4sKEQsTik9PkQ9PT1OKSlyZXR1cm4gbmV3IEt0KFtdLFtdLCExKTtpZih0Lmxlbmd0aD09PTEmJnRbMF0ubGVuZ3RoPT09MHx8bi5sZW5ndGg9PT0xJiZuWzBdLmxlbmd0aD09PTApcmV0dXJuIG5ldyBLdChbbmV3IEhlKG5ldyBPKDEsdC5sZW5ndGgrMSksbmV3IE8oMSxuLmxlbmd0aCsxKSxbbmV3IGtlKG5ldyBHKDEsMSx0Lmxlbmd0aCx0W3QubGVuZ3RoLTFdLmxlbmd0aCsxKSxuZXcgRygxLDEsbi5sZW5ndGgsbltuLmxlbmd0aC0xXS5sZW5ndGgrMSkpXSldLFtdLCExKTtjb25zdCByPWkubWF4Q29tcHV0YXRpb25UaW1lTXM9PT0wP0V0Lmluc3RhbmNlOm5ldyBfdShpLm1heENvbXB1dGF0aW9uVGltZU1zKSxzPSFpLmlnbm9yZVRyaW1XaGl0ZXNwYWNlLGE9bmV3IE1hcDtmdW5jdGlvbiBsKEQpe2xldCBOPWEuZ2V0KEQpO3JldHVybiBOPT09dm9pZCAwJiYoTj1hLnNpemUsYS5zZXQoRCxOKSksTn1jb25zdCBvPXQubWFwKEQ9PmwoRC50cmltKCkpKSx1PW4ubWFwKEQ9PmwoRC50cmltKCkpKSxjPW5ldyBWcyhvLHQpLGQ9bmV3IFZzKHUsbiksbT1jLmxlbmd0aCtkLmxlbmd0aDwxNzAwP3RoaXMuZHluYW1pY1Byb2dyYW1taW5nRGlmZmluZy5jb21wdXRlKGMsZCxyLChELE4pPT50W0RdPT09bltOXT9uW05dLmxlbmd0aD09PTA/LjE6MStNYXRoLmxvZygxK25bTl0ubGVuZ3RoKTouOTkpOnRoaXMubXllcnNEaWZmaW5nQWxnb3JpdGhtLmNvbXB1dGUoYyxkLHIpO2xldCBmPW0uZGlmZnMsXz1tLmhpdFRpbWVvdXQ7Zj1CcyhjLGQsZiksZj1EdShjLGQsZik7Y29uc3QgZz1bXSxrPUQ9PntpZihzKWZvcihsZXQgTj0wO048RDtOKyspe2NvbnN0IGI9eStOLHA9ditOO2lmKHRbYl0hPT1uW3BdKXtjb25zdCB4PXRoaXMucmVmaW5lRGlmZih0LG4sbmV3IEsobmV3IGooYixiKzEpLG5ldyBqKHAscCsxKSkscixzKTtmb3IoY29uc3QgVSBvZiB4Lm1hcHBpbmdzKWcucHVzaChVKTt4LmhpdFRpbWVvdXQmJihfPSEwKX19fTtsZXQgeT0wLHY9MDtmb3IoY29uc3QgRCBvZiBmKXtadCgoKT0+RC5zZXExUmFuZ2Uuc3RhcnQteT09PUQuc2VxMlJhbmdlLnN0YXJ0LXYpO2NvbnN0IE49RC5zZXExUmFuZ2Uuc3RhcnQteTtrKE4pLHk9RC5zZXExUmFuZ2UuZW5kRXhjbHVzaXZlLHY9RC5zZXEyUmFuZ2UuZW5kRXhjbHVzaXZlO2NvbnN0IGI9dGhpcy5yZWZpbmVEaWZmKHQsbixELHIscyk7Yi5oaXRUaW1lb3V0JiYoXz0hMCk7Zm9yKGNvbnN0IHAgb2YgYi5tYXBwaW5ncylnLnB1c2gocCl9ayh0Lmxlbmd0aC15KTtjb25zdCBFPSRzKGcsdCxuKTtsZXQgTT1bXTtyZXR1cm4gaS5jb21wdXRlTW92ZXMmJihNPXRoaXMuY29tcHV0ZU1vdmVzKEUsdCxuLG8sdSxyLHMpKSxadCgoKT0+e2Z1bmN0aW9uIEQoYixwKXtpZihiLmxpbmVOdW1iZXI8MXx8Yi5saW5lTnVtYmVyPnAubGVuZ3RoKXJldHVybiExO2NvbnN0IHg9cFtiLmxpbmVOdW1iZXItMV07cmV0dXJuIShiLmNvbHVtbjwxfHxiLmNvbHVtbj54Lmxlbmd0aCsxKX1mdW5jdGlvbiBOKGIscCl7cmV0dXJuIShiLnN0YXJ0TGluZU51bWJlcjwxfHxiLnN0YXJ0TGluZU51bWJlcj5wLmxlbmd0aCsxfHxiLmVuZExpbmVOdW1iZXJFeGNsdXNpdmU8MXx8Yi5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlPnAubGVuZ3RoKzEpfWZvcihjb25zdCBiIG9mIEUpe2lmKCFiLmlubmVyQ2hhbmdlcylyZXR1cm4hMTtmb3IoY29uc3QgcCBvZiBiLmlubmVyQ2hhbmdlcylpZighKEQocC5tb2RpZmllZFJhbmdlLmdldFN0YXJ0UG9zaXRpb24oKSxuKSYmRChwLm1vZGlmaWVkUmFuZ2UuZ2V0RW5kUG9zaXRpb24oKSxuKSYmRChwLm9yaWdpbmFsUmFuZ2UuZ2V0U3RhcnRQb3NpdGlvbigpLHQpJiZEKHAub3JpZ2luYWxSYW5nZS5nZXRFbmRQb3NpdGlvbigpLHQpKSlyZXR1cm4hMTtpZighTihiLm1vZGlmaWVkLG4pfHwhTihiLm9yaWdpbmFsLHQpKXJldHVybiExfXJldHVybiEwfSksbmV3IEt0KEUsTSxfKX1jb21wdXRlTW92ZXModCxuLGkscixzLGEsbCl7cmV0dXJuIFR1KHQsbixpLHIscyxhKS5tYXAoYz0+e2NvbnN0IGQ9dGhpcy5yZWZpbmVEaWZmKG4saSxuZXcgSyhjLm9yaWdpbmFsLnRvT2Zmc2V0UmFuZ2UoKSxjLm1vZGlmaWVkLnRvT2Zmc2V0UmFuZ2UoKSksYSxsKSxtPSRzKGQubWFwcGluZ3MsbixpLCEwKTtyZXR1cm4gbmV3IHJ1KGMsbSl9KX1yZWZpbmVEaWZmKHQsbixpLHIscyl7Y29uc3QgbD1IdShpKS50b1JhbmdlTWFwcGluZzIodCxuKSxvPW5ldyBzbih0LGwub3JpZ2luYWxSYW5nZSxzKSx1PW5ldyBzbihuLGwubW9kaWZpZWRSYW5nZSxzKSxjPW8ubGVuZ3RoK3UubGVuZ3RoPDUwMD90aGlzLmR5bmFtaWNQcm9ncmFtbWluZ0RpZmZpbmcuY29tcHV0ZShvLHUscik6dGhpcy5teWVyc0RpZmZpbmdBbGdvcml0aG0uY29tcHV0ZShvLHUscik7bGV0IGQ9Yy5kaWZmcztyZXR1cm4gZD1CcyhvLHUsZCksZD1NdShvLHUsZCksZD1SdShvLHUsZCksZD1JdShvLHUsZCkse21hcHBpbmdzOmQubWFwKGY9Pm5ldyBrZShvLnRyYW5zbGF0ZVJhbmdlKGYuc2VxMVJhbmdlKSx1LnRyYW5zbGF0ZVJhbmdlKGYuc2VxMlJhbmdlKSkpLGhpdFRpbWVvdXQ6Yy5oaXRUaW1lb3V0fX19ZnVuY3Rpb24gJHMoZSx0LG4saT0hMSl7Y29uc3Qgcj1bXTtmb3IoY29uc3QgcyBvZiBtdShlLm1hcChhPT5VdShhLHQsbikpLChhLGwpPT5hLm9yaWdpbmFsLm92ZXJsYXBPclRvdWNoKGwub3JpZ2luYWwpfHxhLm1vZGlmaWVkLm92ZXJsYXBPclRvdWNoKGwubW9kaWZpZWQpKSl7Y29uc3QgYT1zWzBdLGw9c1tzLmxlbmd0aC0xXTtyLnB1c2gobmV3IEhlKGEub3JpZ2luYWwuam9pbihsLm9yaWdpbmFsKSxhLm1vZGlmaWVkLmpvaW4obC5tb2RpZmllZCkscy5tYXAobz0+by5pbm5lckNoYW5nZXNbMF0pKSl9cmV0dXJuIFp0KCgpPT4haSYmci5sZW5ndGg+MCYmKHJbMF0ubW9kaWZpZWQuc3RhcnRMaW5lTnVtYmVyIT09clswXS5vcmlnaW5hbC5zdGFydExpbmVOdW1iZXJ8fG4ubGVuZ3RoLXJbci5sZW5ndGgtMV0ubW9kaWZpZWQuZW5kTGluZU51bWJlckV4Y2x1c2l2ZSE9PXQubGVuZ3RoLXJbci5sZW5ndGgtMV0ub3JpZ2luYWwuZW5kTGluZU51bWJlckV4Y2x1c2l2ZSk/ITE6a3MociwocyxhKT0+YS5vcmlnaW5hbC5zdGFydExpbmVOdW1iZXItcy5vcmlnaW5hbC5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlPT09YS5tb2RpZmllZC5zdGFydExpbmVOdW1iZXItcy5tb2RpZmllZC5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlJiZzLm9yaWdpbmFsLmVuZExpbmVOdW1iZXJFeGNsdXNpdmU8YS5vcmlnaW5hbC5zdGFydExpbmVOdW1iZXImJnMubW9kaWZpZWQuZW5kTGluZU51bWJlckV4Y2x1c2l2ZTxhLm1vZGlmaWVkLnN0YXJ0TGluZU51bWJlcikpLHJ9ZnVuY3Rpb24gVXUoZSx0LG4pe2xldCBpPTAscj0wO2UubW9kaWZpZWRSYW5nZS5lbmRDb2x1bW49PT0xJiZlLm9yaWdpbmFsUmFuZ2UuZW5kQ29sdW1uPT09MSYmZS5vcmlnaW5hbFJhbmdlLnN0YXJ0TGluZU51bWJlcitpPD1lLm9yaWdpbmFsUmFuZ2UuZW5kTGluZU51bWJlciYmZS5tb2RpZmllZFJhbmdlLnN0YXJ0TGluZU51bWJlcitpPD1lLm1vZGlmaWVkUmFuZ2UuZW5kTGluZU51bWJlciYmKHI9LTEpLGUubW9kaWZpZWRSYW5nZS5zdGFydENvbHVtbi0xPj1uW2UubW9kaWZpZWRSYW5nZS5zdGFydExpbmVOdW1iZXItMV0ubGVuZ3RoJiZlLm9yaWdpbmFsUmFuZ2Uuc3RhcnRDb2x1bW4tMT49dFtlLm9yaWdpbmFsUmFuZ2Uuc3RhcnRMaW5lTnVtYmVyLTFdLmxlbmd0aCYmZS5vcmlnaW5hbFJhbmdlLnN0YXJ0TGluZU51bWJlcjw9ZS5vcmlnaW5hbFJhbmdlLmVuZExpbmVOdW1iZXIrciYmZS5tb2RpZmllZFJhbmdlLnN0YXJ0TGluZU51bWJlcjw9ZS5tb2RpZmllZFJhbmdlLmVuZExpbmVOdW1iZXIrciYmKGk9MSk7Y29uc3Qgcz1uZXcgTyhlLm9yaWdpbmFsUmFuZ2Uuc3RhcnRMaW5lTnVtYmVyK2ksZS5vcmlnaW5hbFJhbmdlLmVuZExpbmVOdW1iZXIrMStyKSxhPW5ldyBPKGUubW9kaWZpZWRSYW5nZS5zdGFydExpbmVOdW1iZXIraSxlLm1vZGlmaWVkUmFuZ2UuZW5kTGluZU51bWJlcisxK3IpO3JldHVybiBuZXcgSGUocyxhLFtlXSl9ZnVuY3Rpb24gSHUoZSl7cmV0dXJuIG5ldyB2ZShuZXcgTyhlLnNlcTFSYW5nZS5zdGFydCsxLGUuc2VxMVJhbmdlLmVuZEV4Y2x1c2l2ZSsxKSxuZXcgTyhlLnNlcTJSYW5nZS5zdGFydCsxLGUuc2VxMlJhbmdlLmVuZEV4Y2x1c2l2ZSsxKSl9Y29uc3QgR3M9e2dldExlZ2FjeTooKT0+bmV3IGx1LGdldERlZmF1bHQ6KCk9Pm5ldyB6dX07ZnVuY3Rpb24gWGUoZSx0KXtjb25zdCBuPU1hdGgucG93KDEwLHQpO3JldHVybiBNYXRoLnJvdW5kKGUqbikvbn1jbGFzcyBpZXtjb25zdHJ1Y3Rvcih0LG4saSxyPTEpe3RoaXMuX3JnYmFCcmFuZD12b2lkIDAsdGhpcy5yPU1hdGgubWluKDI1NSxNYXRoLm1heCgwLHQpKXwwLHRoaXMuZz1NYXRoLm1pbigyNTUsTWF0aC5tYXgoMCxuKSl8MCx0aGlzLmI9TWF0aC5taW4oMjU1LE1hdGgubWF4KDAsaSkpfDAsdGhpcy5hPVhlKE1hdGgubWF4KE1hdGgubWluKDEsciksMCksMyl9c3RhdGljIGVxdWFscyh0LG4pe3JldHVybiB0LnI9PT1uLnImJnQuZz09PW4uZyYmdC5iPT09bi5iJiZ0LmE9PT1uLmF9fWNsYXNzIHlle2NvbnN0cnVjdG9yKHQsbixpLHIpe3RoaXMuX2hzbGFCcmFuZD12b2lkIDAsdGhpcy5oPU1hdGgubWF4KE1hdGgubWluKDM2MCx0KSwwKXwwLHRoaXMucz1YZShNYXRoLm1heChNYXRoLm1pbigxLG4pLDApLDMpLHRoaXMubD1YZShNYXRoLm1heChNYXRoLm1pbigxLGkpLDApLDMpLHRoaXMuYT1YZShNYXRoLm1heChNYXRoLm1pbigxLHIpLDApLDMpfXN0YXRpYyBlcXVhbHModCxuKXtyZXR1cm4gdC5oPT09bi5oJiZ0LnM9PT1uLnMmJnQubD09PW4ubCYmdC5hPT09bi5hfXN0YXRpYyBmcm9tUkdCQSh0KXtjb25zdCBuPXQuci8yNTUsaT10LmcvMjU1LHI9dC5iLzI1NSxzPXQuYSxhPU1hdGgubWF4KG4saSxyKSxsPU1hdGgubWluKG4saSxyKTtsZXQgbz0wLHU9MDtjb25zdCBjPShsK2EpLzIsZD1hLWw7aWYoZD4wKXtzd2l0Y2godT1NYXRoLm1pbihjPD0uNT9kLygyKmMpOmQvKDItMipjKSwxKSxhKXtjYXNlIG46bz0oaS1yKS9kKyhpPHI/NjowKTticmVhaztjYXNlIGk6bz0oci1uKS9kKzI7YnJlYWs7Y2FzZSByOm89KG4taSkvZCs0O2JyZWFrfW8qPTYwLG89TWF0aC5yb3VuZChvKX1yZXR1cm4gbmV3IHllKG8sdSxjLHMpfXN0YXRpYyBfaHVlMnJnYih0LG4saSl7cmV0dXJuIGk8MCYmKGkrPTEpLGk+MSYmKGktPTEpLGk8MS82P3QrKG4tdCkqNippOmk8MS8yP246aTwyLzM/dCsobi10KSooMi8zLWkpKjY6dH1zdGF0aWMgdG9SR0JBKHQpe2NvbnN0IG49dC5oLzM2MCx7czppLGw6cixhOnN9PXQ7bGV0IGEsbCxvO2lmKGk9PT0wKWE9bD1vPXI7ZWxzZXtjb25zdCB1PXI8LjU/ciooMStpKTpyK2ktcippLGM9MipyLXU7YT15ZS5faHVlMnJnYihjLHUsbisxLzMpLGw9eWUuX2h1ZTJyZ2IoYyx1LG4pLG89eWUuX2h1ZTJyZ2IoYyx1LG4tMS8zKX1yZXR1cm4gbmV3IGllKE1hdGgucm91bmQoYSoyNTUpLE1hdGgucm91bmQobCoyNTUpLE1hdGgucm91bmQobyoyNTUpLHMpfX1jbGFzcyBtdHtjb25zdHJ1Y3Rvcih0LG4saSxyKXt0aGlzLl9oc3ZhQnJhbmQ9dm9pZCAwLHRoaXMuaD1NYXRoLm1heChNYXRoLm1pbigzNjAsdCksMCl8MCx0aGlzLnM9WGUoTWF0aC5tYXgoTWF0aC5taW4oMSxuKSwwKSwzKSx0aGlzLnY9WGUoTWF0aC5tYXgoTWF0aC5taW4oMSxpKSwwKSwzKSx0aGlzLmE9WGUoTWF0aC5tYXgoTWF0aC5taW4oMSxyKSwwKSwzKX1zdGF0aWMgZXF1YWxzKHQsbil7cmV0dXJuIHQuaD09PW4uaCYmdC5zPT09bi5zJiZ0LnY9PT1uLnYmJnQuYT09PW4uYX1zdGF0aWMgZnJvbVJHQkEodCl7Y29uc3Qgbj10LnIvMjU1LGk9dC5nLzI1NSxyPXQuYi8yNTUscz1NYXRoLm1heChuLGksciksYT1NYXRoLm1pbihuLGksciksbD1zLWEsbz1zPT09MD8wOmwvcztsZXQgdTtyZXR1cm4gbD09PTA/dT0wOnM9PT1uP3U9KChpLXIpL2wlNis2KSU2OnM9PT1pP3U9KHItbikvbCsyOnU9KG4taSkvbCs0LG5ldyBtdChNYXRoLnJvdW5kKHUqNjApLG8scyx0LmEpfXN0YXRpYyB0b1JHQkEodCl7Y29uc3R7aDpuLHM6aSx2OnIsYTpzfT10LGE9cippLGw9YSooMS1NYXRoLmFicyhuLzYwJTItMSkpLG89ci1hO2xldFt1LGMsZF09WzAsMCwwXTtyZXR1cm4gbjw2MD8odT1hLGM9bCk6bjwxMjA/KHU9bCxjPWEpOm48MTgwPyhjPWEsZD1sKTpuPDI0MD8oYz1sLGQ9YSk6bjwzMDA/KHU9bCxkPWEpOm48PTM2MCYmKHU9YSxkPWwpLHU9TWF0aC5yb3VuZCgodStvKSoyNTUpLGM9TWF0aC5yb3VuZCgoYytvKSoyNTUpLGQ9TWF0aC5yb3VuZCgoZCtvKSoyNTUpLG5ldyBpZSh1LGMsZCxzKX19bGV0IGFuPShYPWNsYXNze3N0YXRpYyBmcm9tSGV4KHQpe3JldHVybiBYLkZvcm1hdC5DU1MucGFyc2VIZXgodCl8fFgucmVkfXN0YXRpYyBlcXVhbHModCxuKXtyZXR1cm4hdCYmIW4/ITA6IXR8fCFuPyExOnQuZXF1YWxzKG4pfWdldCBoc2xhKCl7cmV0dXJuIHRoaXMuX2hzbGE/dGhpcy5faHNsYTp5ZS5mcm9tUkdCQSh0aGlzLnJnYmEpfWdldCBoc3ZhKCl7cmV0dXJuIHRoaXMuX2hzdmE/dGhpcy5faHN2YTptdC5mcm9tUkdCQSh0aGlzLnJnYmEpfWNvbnN0cnVjdG9yKHQpe2lmKHQpaWYodCBpbnN0YW5jZW9mIGllKXRoaXMucmdiYT10O2Vsc2UgaWYodCBpbnN0YW5jZW9mIHllKXRoaXMuX2hzbGE9dCx0aGlzLnJnYmE9eWUudG9SR0JBKHQpO2Vsc2UgaWYodCBpbnN0YW5jZW9mIG10KXRoaXMuX2hzdmE9dCx0aGlzLnJnYmE9bXQudG9SR0JBKHQpO2Vsc2UgdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIGNvbG9yIGN0b3IgYXJndW1lbnQiKTtlbHNlIHRocm93IG5ldyBFcnJvcigiQ29sb3IgbmVlZHMgYSB2YWx1ZSIpfWVxdWFscyh0KXtyZXR1cm4hIXQmJmllLmVxdWFscyh0aGlzLnJnYmEsdC5yZ2JhKSYmeWUuZXF1YWxzKHRoaXMuaHNsYSx0LmhzbGEpJiZtdC5lcXVhbHModGhpcy5oc3ZhLHQuaHN2YSl9Z2V0UmVsYXRpdmVMdW1pbmFuY2UoKXtjb25zdCB0PVguX3JlbGF0aXZlTHVtaW5hbmNlRm9yQ29tcG9uZW50KHRoaXMucmdiYS5yKSxuPVguX3JlbGF0aXZlTHVtaW5hbmNlRm9yQ29tcG9uZW50KHRoaXMucmdiYS5nKSxpPVguX3JlbGF0aXZlTHVtaW5hbmNlRm9yQ29tcG9uZW50KHRoaXMucmdiYS5iKSxyPS4yMTI2KnQrLjcxNTIqbisuMDcyMippO3JldHVybiBYZShyLDQpfXN0YXRpYyBfcmVsYXRpdmVMdW1pbmFuY2VGb3JDb21wb25lbnQodCl7Y29uc3Qgbj10LzI1NTtyZXR1cm4gbjw9LjAzOTI4P24vMTIuOTI6TWF0aC5wb3coKG4rLjA1NSkvMS4wNTUsMi40KX1pc0xpZ2h0ZXIoKXtyZXR1cm4odGhpcy5yZ2JhLnIqMjk5K3RoaXMucmdiYS5nKjU4Nyt0aGlzLnJnYmEuYioxMTQpLzFlMz49MTI4fWlzTGlnaHRlclRoYW4odCl7Y29uc3Qgbj10aGlzLmdldFJlbGF0aXZlTHVtaW5hbmNlKCksaT10LmdldFJlbGF0aXZlTHVtaW5hbmNlKCk7cmV0dXJuIG4+aX1pc0RhcmtlclRoYW4odCl7Y29uc3Qgbj10aGlzLmdldFJlbGF0aXZlTHVtaW5hbmNlKCksaT10LmdldFJlbGF0aXZlTHVtaW5hbmNlKCk7cmV0dXJuIG48aX1saWdodGVuKHQpe3JldHVybiBuZXcgWChuZXcgeWUodGhpcy5oc2xhLmgsdGhpcy5oc2xhLnMsdGhpcy5oc2xhLmwrdGhpcy5oc2xhLmwqdCx0aGlzLmhzbGEuYSkpfWRhcmtlbih0KXtyZXR1cm4gbmV3IFgobmV3IHllKHRoaXMuaHNsYS5oLHRoaXMuaHNsYS5zLHRoaXMuaHNsYS5sLXRoaXMuaHNsYS5sKnQsdGhpcy5oc2xhLmEpKX10cmFuc3BhcmVudCh0KXtjb25zdHtyOm4sZzppLGI6cixhOnN9PXRoaXMucmdiYTtyZXR1cm4gbmV3IFgobmV3IGllKG4saSxyLHMqdCkpfWlzVHJhbnNwYXJlbnQoKXtyZXR1cm4gdGhpcy5yZ2JhLmE9PT0wfWlzT3BhcXVlKCl7cmV0dXJuIHRoaXMucmdiYS5hPT09MX1vcHBvc2l0ZSgpe3JldHVybiBuZXcgWChuZXcgaWUoMjU1LXRoaXMucmdiYS5yLDI1NS10aGlzLnJnYmEuZywyNTUtdGhpcy5yZ2JhLmIsdGhpcy5yZ2JhLmEpKX1tYWtlT3BhcXVlKHQpe2lmKHRoaXMuaXNPcGFxdWUoKXx8dC5yZ2JhLmEhPT0xKXJldHVybiB0aGlzO2NvbnN0e3I6bixnOmksYjpyLGE6c309dGhpcy5yZ2JhO3JldHVybiBuZXcgWChuZXcgaWUodC5yZ2JhLnItcyoodC5yZ2JhLnItbiksdC5yZ2JhLmctcyoodC5yZ2JhLmctaSksdC5yZ2JhLmItcyoodC5yZ2JhLmItciksMSkpfXRvU3RyaW5nKCl7cmV0dXJuIHRoaXMuX3RvU3RyaW5nfHwodGhpcy5fdG9TdHJpbmc9WC5Gb3JtYXQuQ1NTLmZvcm1hdCh0aGlzKSksdGhpcy5fdG9TdHJpbmd9c3RhdGljIGdldExpZ2h0ZXJDb2xvcih0LG4saSl7aWYodC5pc0xpZ2h0ZXJUaGFuKG4pKXJldHVybiB0O2k9aXx8LjU7Y29uc3Qgcj10LmdldFJlbGF0aXZlTHVtaW5hbmNlKCkscz1uLmdldFJlbGF0aXZlTHVtaW5hbmNlKCk7cmV0dXJuIGk9aSoocy1yKS9zLHQubGlnaHRlbihpKX1zdGF0aWMgZ2V0RGFya2VyQ29sb3IodCxuLGkpe2lmKHQuaXNEYXJrZXJUaGFuKG4pKXJldHVybiB0O2k9aXx8LjU7Y29uc3Qgcj10LmdldFJlbGF0aXZlTHVtaW5hbmNlKCkscz1uLmdldFJlbGF0aXZlTHVtaW5hbmNlKCk7cmV0dXJuIGk9aSooci1zKS9yLHQuZGFya2VuKGkpfX0sWC53aGl0ZT1uZXcgWChuZXcgaWUoMjU1LDI1NSwyNTUsMSkpLFguYmxhY2s9bmV3IFgobmV3IGllKDAsMCwwLDEpKSxYLnJlZD1uZXcgWChuZXcgaWUoMjU1LDAsMCwxKSksWC5ibHVlPW5ldyBYKG5ldyBpZSgwLDAsMjU1LDEpKSxYLmdyZWVuPW5ldyBYKG5ldyBpZSgwLDI1NSwwLDEpKSxYLmN5YW49bmV3IFgobmV3IGllKDAsMjU1LDI1NSwxKSksWC5saWdodGdyZXk9bmV3IFgobmV3IGllKDIxMSwyMTEsMjExLDEpKSxYLnRyYW5zcGFyZW50PW5ldyBYKG5ldyBpZSgwLDAsMCwwKSksWCk7KGZ1bmN0aW9uKGUpeyhmdW5jdGlvbih0KXsoZnVuY3Rpb24obil7ZnVuY3Rpb24gaShmKXtyZXR1cm4gZi5yZ2JhLmE9PT0xP2ByZ2IoJHtmLnJnYmEucn0sICR7Zi5yZ2JhLmd9LCAke2YucmdiYS5ifSlgOmUuRm9ybWF0LkNTUy5mb3JtYXRSR0JBKGYpfW4uZm9ybWF0UkdCPWk7ZnVuY3Rpb24gcihmKXtyZXR1cm5gcmdiYSgke2YucmdiYS5yfSwgJHtmLnJnYmEuZ30sICR7Zi5yZ2JhLmJ9LCAkeytmLnJnYmEuYS50b0ZpeGVkKDIpfSlgfW4uZm9ybWF0UkdCQT1yO2Z1bmN0aW9uIHMoZil7cmV0dXJuIGYuaHNsYS5hPT09MT9gaHNsKCR7Zi5oc2xhLmh9LCAkeyhmLmhzbGEucyoxMDApLnRvRml4ZWQoMil9JSwgJHsoZi5oc2xhLmwqMTAwKS50b0ZpeGVkKDIpfSUpYDplLkZvcm1hdC5DU1MuZm9ybWF0SFNMQShmKX1uLmZvcm1hdEhTTD1zO2Z1bmN0aW9uIGEoZil7cmV0dXJuYGhzbGEoJHtmLmhzbGEuaH0sICR7KGYuaHNsYS5zKjEwMCkudG9GaXhlZCgyKX0lLCAkeyhmLmhzbGEubCoxMDApLnRvRml4ZWQoMil9JSwgJHtmLmhzbGEuYS50b0ZpeGVkKDIpfSlgfW4uZm9ybWF0SFNMQT1hO2Z1bmN0aW9uIGwoZil7Y29uc3QgXz1mLnRvU3RyaW5nKDE2KTtyZXR1cm4gXy5sZW5ndGghPT0yPyIwIitfOl99ZnVuY3Rpb24gbyhmKXtyZXR1cm5gIyR7bChmLnJnYmEucil9JHtsKGYucmdiYS5nKX0ke2woZi5yZ2JhLmIpfWB9bi5mb3JtYXRIZXg9bztmdW5jdGlvbiB1KGYsXz0hMSl7cmV0dXJuIF8mJmYucmdiYS5hPT09MT9lLkZvcm1hdC5DU1MuZm9ybWF0SGV4KGYpOmAjJHtsKGYucmdiYS5yKX0ke2woZi5yZ2JhLmcpfSR7bChmLnJnYmEuYil9JHtsKE1hdGgucm91bmQoZi5yZ2JhLmEqMjU1KSl9YH1uLmZvcm1hdEhleEE9dTtmdW5jdGlvbiBjKGYpe3JldHVybiBmLmlzT3BhcXVlKCk/ZS5Gb3JtYXQuQ1NTLmZvcm1hdEhleChmKTplLkZvcm1hdC5DU1MuZm9ybWF0UkdCQShmKX1uLmZvcm1hdD1jO2Z1bmN0aW9uIGQoZil7Y29uc3QgXz1mLmxlbmd0aDtpZihfPT09MHx8Zi5jaGFyQ29kZUF0KDApIT09MzUpcmV0dXJuIG51bGw7aWYoXz09PTcpe2NvbnN0IGc9MTYqbShmLmNoYXJDb2RlQXQoMSkpK20oZi5jaGFyQ29kZUF0KDIpKSxrPTE2Km0oZi5jaGFyQ29kZUF0KDMpKSttKGYuY2hhckNvZGVBdCg0KSkseT0xNiptKGYuY2hhckNvZGVBdCg1KSkrbShmLmNoYXJDb2RlQXQoNikpO3JldHVybiBuZXcgZShuZXcgaWUoZyxrLHksMSkpfWlmKF89PT05KXtjb25zdCBnPTE2Km0oZi5jaGFyQ29kZUF0KDEpKSttKGYuY2hhckNvZGVBdCgyKSksaz0xNiptKGYuY2hhckNvZGVBdCgzKSkrbShmLmNoYXJDb2RlQXQoNCkpLHk9MTYqbShmLmNoYXJDb2RlQXQoNSkpK20oZi5jaGFyQ29kZUF0KDYpKSx2PTE2Km0oZi5jaGFyQ29kZUF0KDcpKSttKGYuY2hhckNvZGVBdCg4KSk7cmV0dXJuIG5ldyBlKG5ldyBpZShnLGsseSx2LzI1NSkpfWlmKF89PT00KXtjb25zdCBnPW0oZi5jaGFyQ29kZUF0KDEpKSxrPW0oZi5jaGFyQ29kZUF0KDIpKSx5PW0oZi5jaGFyQ29kZUF0KDMpKTtyZXR1cm4gbmV3IGUobmV3IGllKDE2KmcrZywxNiprK2ssMTYqeSt5KSl9aWYoXz09PTUpe2NvbnN0IGc9bShmLmNoYXJDb2RlQXQoMSkpLGs9bShmLmNoYXJDb2RlQXQoMikpLHk9bShmLmNoYXJDb2RlQXQoMykpLHY9bShmLmNoYXJDb2RlQXQoNCkpO3JldHVybiBuZXcgZShuZXcgaWUoMTYqZytnLDE2KmsraywxNip5K3ksKDE2KnYrdikvMjU1KSl9cmV0dXJuIG51bGx9bi5wYXJzZUhleD1kO2Z1bmN0aW9uIG0oZil7c3dpdGNoKGYpe2Nhc2UgNDg6cmV0dXJuIDA7Y2FzZSA0OTpyZXR1cm4gMTtjYXNlIDUwOnJldHVybiAyO2Nhc2UgNTE6cmV0dXJuIDM7Y2FzZSA1MjpyZXR1cm4gNDtjYXNlIDUzOnJldHVybiA1O2Nhc2UgNTQ6cmV0dXJuIDY7Y2FzZSA1NTpyZXR1cm4gNztjYXNlIDU2OnJldHVybiA4O2Nhc2UgNTc6cmV0dXJuIDk7Y2FzZSA5NzpyZXR1cm4gMTA7Y2FzZSA2NTpyZXR1cm4gMTA7Y2FzZSA5ODpyZXR1cm4gMTE7Y2FzZSA2NjpyZXR1cm4gMTE7Y2FzZSA5OTpyZXR1cm4gMTI7Y2FzZSA2NzpyZXR1cm4gMTI7Y2FzZSAxMDA6cmV0dXJuIDEzO2Nhc2UgNjg6cmV0dXJuIDEzO2Nhc2UgMTAxOnJldHVybiAxNDtjYXNlIDY5OnJldHVybiAxNDtjYXNlIDEwMjpyZXR1cm4gMTU7Y2FzZSA3MDpyZXR1cm4gMTV9cmV0dXJuIDB9fSkodC5DU1N8fCh0LkNTUz17fSkpfSkoZS5Gb3JtYXR8fChlLkZvcm1hdD17fSkpfSkoYW58fChhbj17fSkpO2Z1bmN0aW9uIFhzKGUpe2NvbnN0IHQ9W107Zm9yKGNvbnN0IG4gb2YgZSl7Y29uc3QgaT1OdW1iZXIobik7KGl8fGk9PT0wJiZuLnJlcGxhY2UoL1xzL2csIiIpIT09IiIpJiZ0LnB1c2goaSl9cmV0dXJuIHR9ZnVuY3Rpb24gbWkoZSx0LG4saSl7cmV0dXJue3JlZDplLzI1NSxibHVlOm4vMjU1LGdyZWVuOnQvMjU1LGFscGhhOml9fWZ1bmN0aW9uIFJ0KGUsdCl7Y29uc3Qgbj10LmluZGV4LGk9dFswXS5sZW5ndGg7aWYoIW4pcmV0dXJuO2NvbnN0IHI9ZS5wb3NpdGlvbkF0KG4pO3JldHVybntzdGFydExpbmVOdW1iZXI6ci5saW5lTnVtYmVyLHN0YXJ0Q29sdW1uOnIuY29sdW1uLGVuZExpbmVOdW1iZXI6ci5saW5lTnVtYmVyLGVuZENvbHVtbjpyLmNvbHVtbitpfX1mdW5jdGlvbiBXdShlLHQpe2lmKCFlKXJldHVybjtjb25zdCBuPWFuLkZvcm1hdC5DU1MucGFyc2VIZXgodCk7aWYobilyZXR1cm57cmFuZ2U6ZSxjb2xvcjptaShuLnJnYmEucixuLnJnYmEuZyxuLnJnYmEuYixuLnJnYmEuYSl9fWZ1bmN0aW9uIEpzKGUsdCxuKXtpZighZXx8dC5sZW5ndGghPT0xKXJldHVybjtjb25zdCByPXRbMF0udmFsdWVzKCkscz1YcyhyKTtyZXR1cm57cmFuZ2U6ZSxjb2xvcjptaShzWzBdLHNbMV0sc1syXSxuP3NbM106MSl9fWZ1bmN0aW9uIFlzKGUsdCxuKXtpZighZXx8dC5sZW5ndGghPT0xKXJldHVybjtjb25zdCByPXRbMF0udmFsdWVzKCkscz1YcyhyKSxhPW5ldyBhbihuZXcgeWUoc1swXSxzWzFdLzEwMCxzWzJdLzEwMCxuP3NbM106MSkpO3JldHVybntyYW5nZTplLGNvbG9yOm1pKGEucmdiYS5yLGEucmdiYS5nLGEucmdiYS5iLGEucmdiYS5hKX19ZnVuY3Rpb24gTXQoZSx0KXtyZXR1cm4gdHlwZW9mIGU9PSJzdHJpbmciP1suLi5lLm1hdGNoQWxsKHQpXTplLmZpbmRNYXRjaGVzKHQpfWZ1bmN0aW9uIEZ1KGUpe2NvbnN0IHQ9W10saT1NdChlLC9cYihyZ2J8cmdiYXxoc2x8aHNsYSkoXChbMC05XHMsLlwlXSpcKSl8KCMpKFtBLUZhLWYwLTldezN9KVxifCgjKShbQS1GYS1mMC05XXs0fSlcYnwoIykoW0EtRmEtZjAtOV17Nn0pXGJ8KCMpKFtBLUZhLWYwLTldezh9KVxiL2dtKTtpZihpLmxlbmd0aD4wKWZvcihjb25zdCByIG9mIGkpe2NvbnN0IHM9ci5maWx0ZXIodT0+dSE9PXZvaWQgMCksYT1zWzFdLGw9c1syXTtpZighbCljb250aW51ZTtsZXQgbztpZihhPT09InJnYiIpe2NvbnN0IHU9L15cKFxzKigyNVswLTVdfDJbMC00XVswLTldfDFbMC05XXsyfXxbMS05XVswLTldfFswLTldKVxzKixccyooMjVbMC01XXwyWzAtNF1bMC05XXwxWzAtOV17Mn18WzEtOV1bMC05XXxbMC05XSlccyosXHMqKDI1WzAtNV18MlswLTRdWzAtOV18MVswLTldezJ9fFsxLTldWzAtOV18WzAtOV0pXHMqXCkkL2dtO289SnMoUnQoZSxyKSxNdChsLHUpLCExKX1lbHNlIGlmKGE9PT0icmdiYSIpe2NvbnN0IHU9L15cKFxzKigyNVswLTVdfDJbMC00XVswLTldfDFbMC05XXsyfXxbMS05XVswLTldfFswLTldKVxzKixccyooMjVbMC01XXwyWzAtNF1bMC05XXwxWzAtOV17Mn18WzEtOV1bMC05XXxbMC05XSlccyosXHMqKDI1WzAtNV18MlswLTRdWzAtOV18MVswLTldezJ9fFsxLTldWzAtOV18WzAtOV0pXHMqLFxzKigwWy5dWzAtOV0rfFsuXVswLTldK3xbMDFdWy5dfFswMV0pXHMqXCkkL2dtO289SnMoUnQoZSxyKSxNdChsLHUpLCEwKX1lbHNlIGlmKGE9PT0iaHNsIil7Y29uc3QgdT0vXlwoXHMqKDM2WzBdfDNbMC01XVswLTldfFsxMl1bMC05XVswLTldfFsxLTldP1swLTldKVxzKixccyooMTAwfFxkezEsMn1bLl1cZCp8XGR7MSwyfSklXHMqLFxzKigxMDB8XGR7MSwyfVsuXVxkKnxcZHsxLDJ9KSVccypcKSQvZ207bz1ZcyhSdChlLHIpLE10KGwsdSksITEpfWVsc2UgaWYoYT09PSJoc2xhIil7Y29uc3QgdT0vXlwoXHMqKDM2WzBdfDNbMC01XVswLTldfFsxMl1bMC05XVswLTldfFsxLTldP1swLTldKVxzKixccyooMTAwfFxkezEsMn1bLl1cZCp8XGR7MSwyfSklXHMqLFxzKigxMDB8XGR7MSwyfVsuXVxkKnxcZHsxLDJ9KSVccyosXHMqKDBbLl1bMC05XSt8Wy5dWzAtOV0rfFswMV1bLl18WzAxXSlccypcKSQvZ207bz1ZcyhSdChlLHIpLE10KGwsdSksITApfWVsc2UgYT09PSIjIiYmKG89V3UoUnQoZSxyKSxhK2wpKTtvJiZ0LnB1c2gobyl9cmV0dXJuIHR9ZnVuY3Rpb24gUHUoZSl7cmV0dXJuIWV8fHR5cGVvZiBlLmdldFZhbHVlIT0iZnVuY3Rpb24ifHx0eXBlb2YgZS5wb3NpdGlvbkF0IT0iZnVuY3Rpb24iP1tdOkZ1KGUpfWNvbnN0IFFzPW5ldyBSZWdFeHAoIlxcYk1BUks6XFxzKiguKikkIiwiZCIpLEJ1PS9eLSt8LSskL2c7ZnVuY3Rpb24gcXUoZSx0KXtsZXQgbj1bXTtpZih0LmZpbmRSZWdpb25TZWN0aW9uSGVhZGVycyYmdC5mb2xkaW5nUnVsZXM/Lm1hcmtlcnMpe2NvbnN0IGk9T3UoZSx0KTtuPW4uY29uY2F0KGkpfWlmKHQuZmluZE1hcmtTZWN0aW9uSGVhZGVycyl7Y29uc3QgaT1WdShlKTtuPW4uY29uY2F0KGkpfXJldHVybiBufWZ1bmN0aW9uIE91KGUsdCl7Y29uc3Qgbj1bXSxpPWUuZ2V0TGluZUNvdW50KCk7Zm9yKGxldCByPTE7cjw9aTtyKyspe2NvbnN0IHM9ZS5nZXRMaW5lQ29udGVudChyKSxhPXMubWF0Y2godC5mb2xkaW5nUnVsZXMubWFya2Vycy5zdGFydCk7aWYoYSl7Y29uc3QgbD17c3RhcnRMaW5lTnVtYmVyOnIsc3RhcnRDb2x1bW46YVswXS5sZW5ndGgrMSxlbmRMaW5lTnVtYmVyOnIsZW5kQ29sdW1uOnMubGVuZ3RoKzF9O2lmKGwuZW5kQ29sdW1uPmwuc3RhcnRDb2x1bW4pe2NvbnN0IG89e3JhbmdlOmwsLi4uWnMocy5zdWJzdHJpbmcoYVswXS5sZW5ndGgpKSxzaG91bGRCZUluQ29tbWVudHM6ITF9OyhvLnRleHR8fG8uaGFzU2VwYXJhdG9yTGluZSkmJm4ucHVzaChvKX19fXJldHVybiBufWZ1bmN0aW9uIFZ1KGUpe2NvbnN0IHQ9W10sbj1lLmdldExpbmVDb3VudCgpO2ZvcihsZXQgaT0xO2k8PW47aSsrKXtjb25zdCByPWUuZ2V0TGluZUNvbnRlbnQoaSk7anUocixpLHQpfXJldHVybiB0fWZ1bmN0aW9uIGp1KGUsdCxuKXtRcy5sYXN0SW5kZXg9MDtjb25zdCBpPVFzLmV4ZWMoZSk7aWYoaSl7Y29uc3Qgcj1pLmluZGljZXNbMV1bMF0rMSxzPWkuaW5kaWNlc1sxXVsxXSsxLGE9e3N0YXJ0TGluZU51bWJlcjp0LHN0YXJ0Q29sdW1uOnIsZW5kTGluZU51bWJlcjp0LGVuZENvbHVtbjpzfTtpZihhLmVuZENvbHVtbj5hLnN0YXJ0Q29sdW1uKXtjb25zdCBsPXtyYW5nZTphLC4uLlpzKGlbMV0pLHNob3VsZEJlSW5Db21tZW50czohMH07KGwudGV4dHx8bC5oYXNTZXBhcmF0b3JMaW5lKSYmbi5wdXNoKGwpfX19ZnVuY3Rpb24gWnMoZSl7ZT1lLnRyaW0oKTtjb25zdCB0PWUuc3RhcnRzV2l0aCgiLSIpO3JldHVybiBlPWUucmVwbGFjZShCdSwiIikse3RleHQ6ZSxoYXNTZXBhcmF0b3JMaW5lOnR9fXZhciBLczsoZnVuY3Rpb24oZSl7YXN5bmMgZnVuY3Rpb24gdChpKXtsZXQgcjtjb25zdCBzPWF3YWl0IFByb21pc2UuYWxsKGkubWFwKGE9PmEudGhlbihsPT5sLGw9PntyfHwocj1sKX0pKSk7aWYodHlwZW9mIHI8InUiKXRocm93IHI7cmV0dXJuIHN9ZS5zZXR0bGVkPXQ7ZnVuY3Rpb24gbihpKXtyZXR1cm4gbmV3IFByb21pc2UoYXN5bmMocixzKT0+e3RyeXthd2FpdCBpKHIscyl9Y2F0Y2goYSl7cyhhKX19KX1lLndpdGhBc3luY0JvZHk9bn0pKEtzfHwoS3M9e30pKTtjb25zdCBoZT1jbGFzcyBoZXtzdGF0aWMgZnJvbUFycmF5KHQpe3JldHVybiBuZXcgaGUobj0+e24uZW1pdE1hbnkodCl9KX1zdGF0aWMgZnJvbVByb21pc2UodCl7cmV0dXJuIG5ldyBoZShhc3luYyBuPT57bi5lbWl0TWFueShhd2FpdCB0KX0pfXN0YXRpYyBmcm9tUHJvbWlzZXModCl7cmV0dXJuIG5ldyBoZShhc3luYyBuPT57YXdhaXQgUHJvbWlzZS5hbGwodC5tYXAoYXN5bmMgaT0+bi5lbWl0T25lKGF3YWl0IGkpKSl9KX1zdGF0aWMgbWVyZ2UodCl7cmV0dXJuIG5ldyBoZShhc3luYyBuPT57YXdhaXQgUHJvbWlzZS5hbGwodC5tYXAoYXN5bmMgaT0+e2ZvciBhd2FpdChjb25zdCByIG9mIGkpbi5lbWl0T25lKHIpfSkpfSl9Y29uc3RydWN0b3IodCxuKXt0aGlzLl9zdGF0ZT0wLHRoaXMuX3Jlc3VsdHM9W10sdGhpcy5fZXJyb3I9bnVsbCx0aGlzLl9vblJldHVybj1uLHRoaXMuX29uU3RhdGVDaGFuZ2VkPW5ldyB3ZSxxdWV1ZU1pY3JvdGFzayhhc3luYygpPT57Y29uc3QgaT17ZW1pdE9uZTpyPT50aGlzLmVtaXRPbmUociksZW1pdE1hbnk6cj0+dGhpcy5lbWl0TWFueShyKSxyZWplY3Q6cj0+dGhpcy5yZWplY3Qocil9O3RyeXthd2FpdCBQcm9taXNlLnJlc29sdmUodChpKSksdGhpcy5yZXNvbHZlKCl9Y2F0Y2gocil7dGhpcy5yZWplY3Qocil9ZmluYWxseXtpLmVtaXRPbmU9dm9pZCAwLGkuZW1pdE1hbnk9dm9pZCAwLGkucmVqZWN0PXZvaWQgMH19KX1bU3ltYm9sLmFzeW5jSXRlcmF0b3JdKCl7bGV0IHQ9MDtyZXR1cm57bmV4dDphc3luYygpPT57ZG97aWYodGhpcy5fc3RhdGU9PT0yKXRocm93IHRoaXMuX2Vycm9yO2lmKHQ8dGhpcy5fcmVzdWx0cy5sZW5ndGgpcmV0dXJue2RvbmU6ITEsdmFsdWU6dGhpcy5fcmVzdWx0c1t0KytdfTtpZih0aGlzLl9zdGF0ZT09PTEpcmV0dXJue2RvbmU6ITAsdmFsdWU6dm9pZCAwfTthd2FpdCBxdC50b1Byb21pc2UodGhpcy5fb25TdGF0ZUNoYW5nZWQuZXZlbnQpfXdoaWxlKCEwKX0scmV0dXJuOmFzeW5jKCk9Pih0aGlzLl9vblJldHVybj8uKCkse2RvbmU6ITAsdmFsdWU6dm9pZCAwfSl9fXN0YXRpYyBtYXAodCxuKXtyZXR1cm4gbmV3IGhlKGFzeW5jIGk9Pntmb3IgYXdhaXQoY29uc3QgciBvZiB0KWkuZW1pdE9uZShuKHIpKX0pfW1hcCh0KXtyZXR1cm4gaGUubWFwKHRoaXMsdCl9c3RhdGljIGZpbHRlcih0LG4pe3JldHVybiBuZXcgaGUoYXN5bmMgaT0+e2ZvciBhd2FpdChjb25zdCByIG9mIHQpbihyKSYmaS5lbWl0T25lKHIpfSl9ZmlsdGVyKHQpe3JldHVybiBoZS5maWx0ZXIodGhpcyx0KX1zdGF0aWMgY29hbGVzY2UodCl7cmV0dXJuIGhlLmZpbHRlcih0LG49PiEhbil9Y29hbGVzY2UoKXtyZXR1cm4gaGUuY29hbGVzY2UodGhpcyl9c3RhdGljIGFzeW5jIHRvUHJvbWlzZSh0KXtjb25zdCBuPVtdO2ZvciBhd2FpdChjb25zdCBpIG9mIHQpbi5wdXNoKGkpO3JldHVybiBufXRvUHJvbWlzZSgpe3JldHVybiBoZS50b1Byb21pc2UodGhpcyl9ZW1pdE9uZSh0KXt0aGlzLl9zdGF0ZT09PTAmJih0aGlzLl9yZXN1bHRzLnB1c2godCksdGhpcy5fb25TdGF0ZUNoYW5nZWQuZmlyZSgpKX1lbWl0TWFueSh0KXt0aGlzLl9zdGF0ZT09PTAmJih0aGlzLl9yZXN1bHRzPXRoaXMuX3Jlc3VsdHMuY29uY2F0KHQpLHRoaXMuX29uU3RhdGVDaGFuZ2VkLmZpcmUoKSl9cmVzb2x2ZSgpe3RoaXMuX3N0YXRlPT09MCYmKHRoaXMuX3N0YXRlPTEsdGhpcy5fb25TdGF0ZUNoYW5nZWQuZmlyZSgpKX1yZWplY3QodCl7dGhpcy5fc3RhdGU9PT0wJiYodGhpcy5fc3RhdGU9Mix0aGlzLl9lcnJvcj10LHRoaXMuX29uU3RhdGVDaGFuZ2VkLmZpcmUoKSl9fTtoZS5FTVBUWT1oZS5mcm9tQXJyYXkoW10pO2xldCBlYT1oZTtjbGFzcyAkdXtjb25zdHJ1Y3Rvcih0KXt0aGlzLnZhbHVlcz10LHRoaXMucHJlZml4U3VtPW5ldyBVaW50MzJBcnJheSh0Lmxlbmd0aCksdGhpcy5wcmVmaXhTdW1WYWxpZEluZGV4PW5ldyBJbnQzMkFycmF5KDEpLHRoaXMucHJlZml4U3VtVmFsaWRJbmRleFswXT0tMX1pbnNlcnRWYWx1ZXModCxuKXt0PXV0KHQpO2NvbnN0IGk9dGhpcy52YWx1ZXMscj10aGlzLnByZWZpeFN1bSxzPW4ubGVuZ3RoO3JldHVybiBzPT09MD8hMToodGhpcy52YWx1ZXM9bmV3IFVpbnQzMkFycmF5KGkubGVuZ3RoK3MpLHRoaXMudmFsdWVzLnNldChpLnN1YmFycmF5KDAsdCksMCksdGhpcy52YWx1ZXMuc2V0KGkuc3ViYXJyYXkodCksdCtzKSx0aGlzLnZhbHVlcy5zZXQobix0KSx0LTE8dGhpcy5wcmVmaXhTdW1WYWxpZEluZGV4WzBdJiYodGhpcy5wcmVmaXhTdW1WYWxpZEluZGV4WzBdPXQtMSksdGhpcy5wcmVmaXhTdW09bmV3IFVpbnQzMkFycmF5KHRoaXMudmFsdWVzLmxlbmd0aCksdGhpcy5wcmVmaXhTdW1WYWxpZEluZGV4WzBdPj0wJiZ0aGlzLnByZWZpeFN1bS5zZXQoci5zdWJhcnJheSgwLHRoaXMucHJlZml4U3VtVmFsaWRJbmRleFswXSsxKSksITApfXNldFZhbHVlKHQsbil7cmV0dXJuIHQ9dXQodCksbj11dChuKSx0aGlzLnZhbHVlc1t0XT09PW4/ITE6KHRoaXMudmFsdWVzW3RdPW4sdC0xPHRoaXMucHJlZml4U3VtVmFsaWRJbmRleFswXSYmKHRoaXMucHJlZml4U3VtVmFsaWRJbmRleFswXT10LTEpLCEwKX1yZW1vdmVWYWx1ZXModCxuKXt0PXV0KHQpLG49dXQobik7Y29uc3QgaT10aGlzLnZhbHVlcyxyPXRoaXMucHJlZml4U3VtO2lmKHQ+PWkubGVuZ3RoKXJldHVybiExO2NvbnN0IHM9aS5sZW5ndGgtdDtyZXR1cm4gbj49cyYmKG49cyksbj09PTA/ITE6KHRoaXMudmFsdWVzPW5ldyBVaW50MzJBcnJheShpLmxlbmd0aC1uKSx0aGlzLnZhbHVlcy5zZXQoaS5zdWJhcnJheSgwLHQpLDApLHRoaXMudmFsdWVzLnNldChpLnN1YmFycmF5KHQrbiksdCksdGhpcy5wcmVmaXhTdW09bmV3IFVpbnQzMkFycmF5KHRoaXMudmFsdWVzLmxlbmd0aCksdC0xPHRoaXMucHJlZml4U3VtVmFsaWRJbmRleFswXSYmKHRoaXMucHJlZml4U3VtVmFsaWRJbmRleFswXT10LTEpLHRoaXMucHJlZml4U3VtVmFsaWRJbmRleFswXT49MCYmdGhpcy5wcmVmaXhTdW0uc2V0KHIuc3ViYXJyYXkoMCx0aGlzLnByZWZpeFN1bVZhbGlkSW5kZXhbMF0rMSkpLCEwKX1nZXRUb3RhbFN1bSgpe3JldHVybiB0aGlzLnZhbHVlcy5sZW5ndGg9PT0wPzA6dGhpcy5fZ2V0UHJlZml4U3VtKHRoaXMudmFsdWVzLmxlbmd0aC0xKX1nZXRQcmVmaXhTdW0odCl7cmV0dXJuIHQ8MD8wOih0PXV0KHQpLHRoaXMuX2dldFByZWZpeFN1bSh0KSl9X2dldFByZWZpeFN1bSh0KXtpZih0PD10aGlzLnByZWZpeFN1bVZhbGlkSW5kZXhbMF0pcmV0dXJuIHRoaXMucHJlZml4U3VtW3RdO2xldCBuPXRoaXMucHJlZml4U3VtVmFsaWRJbmRleFswXSsxO249PT0wJiYodGhpcy5wcmVmaXhTdW1bMF09dGhpcy52YWx1ZXNbMF0sbisrKSx0Pj10aGlzLnZhbHVlcy5sZW5ndGgmJih0PXRoaXMudmFsdWVzLmxlbmd0aC0xKTtmb3IobGV0IGk9bjtpPD10O2krKyl0aGlzLnByZWZpeFN1bVtpXT10aGlzLnByZWZpeFN1bVtpLTFdK3RoaXMudmFsdWVzW2ldO3JldHVybiB0aGlzLnByZWZpeFN1bVZhbGlkSW5kZXhbMF09TWF0aC5tYXgodGhpcy5wcmVmaXhTdW1WYWxpZEluZGV4WzBdLHQpLHRoaXMucHJlZml4U3VtW3RdfWdldEluZGV4T2YodCl7dD1NYXRoLmZsb29yKHQpLHRoaXMuZ2V0VG90YWxTdW0oKTtsZXQgbj0wLGk9dGhpcy52YWx1ZXMubGVuZ3RoLTEscj0wLHM9MCxhPTA7Zm9yKDtuPD1pOylpZihyPW4rKGktbikvMnwwLHM9dGhpcy5wcmVmaXhTdW1bcl0sYT1zLXRoaXMudmFsdWVzW3JdLHQ8YSlpPXItMTtlbHNlIGlmKHQ+PXMpbj1yKzE7ZWxzZSBicmVhaztyZXR1cm4gbmV3IEd1KHIsdC1hKX19Y2xhc3MgR3V7Y29uc3RydWN0b3IodCxuKXt0aGlzLmluZGV4PXQsdGhpcy5yZW1haW5kZXI9bix0aGlzLl9wcmVmaXhTdW1JbmRleE9mUmVzdWx0QnJhbmQ9dm9pZCAwLHRoaXMuaW5kZXg9dCx0aGlzLnJlbWFpbmRlcj1ufX1jbGFzcyBYdXtjb25zdHJ1Y3Rvcih0LG4saSxyKXt0aGlzLl91cmk9dCx0aGlzLl9saW5lcz1uLHRoaXMuX2VvbD1pLHRoaXMuX3ZlcnNpb25JZD1yLHRoaXMuX2xpbmVTdGFydHM9bnVsbCx0aGlzLl9jYWNoZWRUZXh0VmFsdWU9bnVsbH1kaXNwb3NlKCl7dGhpcy5fbGluZXMubGVuZ3RoPTB9Z2V0IHZlcnNpb24oKXtyZXR1cm4gdGhpcy5fdmVyc2lvbklkfWdldFRleHQoKXtyZXR1cm4gdGhpcy5fY2FjaGVkVGV4dFZhbHVlPT09bnVsbCYmKHRoaXMuX2NhY2hlZFRleHRWYWx1ZT10aGlzLl9saW5lcy5qb2luKHRoaXMuX2VvbCkpLHRoaXMuX2NhY2hlZFRleHRWYWx1ZX1vbkV2ZW50cyh0KXt0LmVvbCYmdC5lb2whPT10aGlzLl9lb2wmJih0aGlzLl9lb2w9dC5lb2wsdGhpcy5fbGluZVN0YXJ0cz1udWxsKTtjb25zdCBuPXQuY2hhbmdlcztmb3IoY29uc3QgaSBvZiBuKXRoaXMuX2FjY2VwdERlbGV0ZVJhbmdlKGkucmFuZ2UpLHRoaXMuX2FjY2VwdEluc2VydFRleHQobmV3IHRlKGkucmFuZ2Uuc3RhcnRMaW5lTnVtYmVyLGkucmFuZ2Uuc3RhcnRDb2x1bW4pLGkudGV4dCk7dGhpcy5fdmVyc2lvbklkPXQudmVyc2lvbklkLHRoaXMuX2NhY2hlZFRleHRWYWx1ZT1udWxsfV9lbnN1cmVMaW5lU3RhcnRzKCl7aWYoIXRoaXMuX2xpbmVTdGFydHMpe2NvbnN0IHQ9dGhpcy5fZW9sLmxlbmd0aCxuPXRoaXMuX2xpbmVzLmxlbmd0aCxpPW5ldyBVaW50MzJBcnJheShuKTtmb3IobGV0IHI9MDtyPG47cisrKWlbcl09dGhpcy5fbGluZXNbcl0ubGVuZ3RoK3Q7dGhpcy5fbGluZVN0YXJ0cz1uZXcgJHUoaSl9fV9zZXRMaW5lVGV4dCh0LG4pe3RoaXMuX2xpbmVzW3RdPW4sdGhpcy5fbGluZVN0YXJ0cyYmdGhpcy5fbGluZVN0YXJ0cy5zZXRWYWx1ZSh0LHRoaXMuX2xpbmVzW3RdLmxlbmd0aCt0aGlzLl9lb2wubGVuZ3RoKX1fYWNjZXB0RGVsZXRlUmFuZ2UodCl7aWYodC5zdGFydExpbmVOdW1iZXI9PT10LmVuZExpbmVOdW1iZXIpe2lmKHQuc3RhcnRDb2x1bW49PT10LmVuZENvbHVtbilyZXR1cm47dGhpcy5fc2V0TGluZVRleHQodC5zdGFydExpbmVOdW1iZXItMSx0aGlzLl9saW5lc1t0LnN0YXJ0TGluZU51bWJlci0xXS5zdWJzdHJpbmcoMCx0LnN0YXJ0Q29sdW1uLTEpK3RoaXMuX2xpbmVzW3Quc3RhcnRMaW5lTnVtYmVyLTFdLnN1YnN0cmluZyh0LmVuZENvbHVtbi0xKSk7cmV0dXJufXRoaXMuX3NldExpbmVUZXh0KHQuc3RhcnRMaW5lTnVtYmVyLTEsdGhpcy5fbGluZXNbdC5zdGFydExpbmVOdW1iZXItMV0uc3Vic3RyaW5nKDAsdC5zdGFydENvbHVtbi0xKSt0aGlzLl9saW5lc1t0LmVuZExpbmVOdW1iZXItMV0uc3Vic3RyaW5nKHQuZW5kQ29sdW1uLTEpKSx0aGlzLl9saW5lcy5zcGxpY2UodC5zdGFydExpbmVOdW1iZXIsdC5lbmRMaW5lTnVtYmVyLXQuc3RhcnRMaW5lTnVtYmVyKSx0aGlzLl9saW5lU3RhcnRzJiZ0aGlzLl9saW5lU3RhcnRzLnJlbW92ZVZhbHVlcyh0LnN0YXJ0TGluZU51bWJlcix0LmVuZExpbmVOdW1iZXItdC5zdGFydExpbmVOdW1iZXIpfV9hY2NlcHRJbnNlcnRUZXh0KHQsbil7aWYobi5sZW5ndGg9PT0wKXJldHVybjtjb25zdCBpPUJvKG4pO2lmKGkubGVuZ3RoPT09MSl7dGhpcy5fc2V0TGluZVRleHQodC5saW5lTnVtYmVyLTEsdGhpcy5fbGluZXNbdC5saW5lTnVtYmVyLTFdLnN1YnN0cmluZygwLHQuY29sdW1uLTEpK2lbMF0rdGhpcy5fbGluZXNbdC5saW5lTnVtYmVyLTFdLnN1YnN0cmluZyh0LmNvbHVtbi0xKSk7cmV0dXJufWlbaS5sZW5ndGgtMV0rPXRoaXMuX2xpbmVzW3QubGluZU51bWJlci0xXS5zdWJzdHJpbmcodC5jb2x1bW4tMSksdGhpcy5fc2V0TGluZVRleHQodC5saW5lTnVtYmVyLTEsdGhpcy5fbGluZXNbdC5saW5lTnVtYmVyLTFdLnN1YnN0cmluZygwLHQuY29sdW1uLTEpK2lbMF0pO2NvbnN0IHI9bmV3IFVpbnQzMkFycmF5KGkubGVuZ3RoLTEpO2ZvcihsZXQgcz0xO3M8aS5sZW5ndGg7cysrKXRoaXMuX2xpbmVzLnNwbGljZSh0LmxpbmVOdW1iZXIrcy0xLDAsaVtzXSkscltzLTFdPWlbc10ubGVuZ3RoK3RoaXMuX2VvbC5sZW5ndGg7dGhpcy5fbGluZVN0YXJ0cyYmdGhpcy5fbGluZVN0YXJ0cy5pbnNlcnRWYWx1ZXModC5saW5lTnVtYmVyLHIpfX1jbGFzcyBKdXtjb25zdHJ1Y3Rvcigpe3RoaXMuX21vZGVscz1PYmplY3QuY3JlYXRlKG51bGwpfWdldE1vZGVsKHQpe3JldHVybiB0aGlzLl9tb2RlbHNbdF19Z2V0TW9kZWxzKCl7Y29uc3QgdD1bXTtyZXR1cm4gT2JqZWN0LmtleXModGhpcy5fbW9kZWxzKS5mb3JFYWNoKG49PnQucHVzaCh0aGlzLl9tb2RlbHNbbl0pKSx0fSRhY2NlcHROZXdNb2RlbCh0KXt0aGlzLl9tb2RlbHNbdC51cmxdPW5ldyBZdShFZS5wYXJzZSh0LnVybCksdC5saW5lcyx0LkVPTCx0LnZlcnNpb25JZCl9JGFjY2VwdE1vZGVsQ2hhbmdlZCh0LG4pe2lmKCF0aGlzLl9tb2RlbHNbdF0pcmV0dXJuO3RoaXMuX21vZGVsc1t0XS5vbkV2ZW50cyhuKX0kYWNjZXB0UmVtb3ZlZE1vZGVsKHQpe3RoaXMuX21vZGVsc1t0XSYmZGVsZXRlIHRoaXMuX21vZGVsc1t0XX19Y2xhc3MgWXUgZXh0ZW5kcyBYdXtnZXQgdXJpKCl7cmV0dXJuIHRoaXMuX3VyaX1nZXQgZW9sKCl7cmV0dXJuIHRoaXMuX2VvbH1nZXRWYWx1ZSgpe3JldHVybiB0aGlzLmdldFRleHQoKX1maW5kTWF0Y2hlcyh0KXtjb25zdCBuPVtdO2ZvcihsZXQgaT0wO2k8dGhpcy5fbGluZXMubGVuZ3RoO2krKyl7Y29uc3Qgcj10aGlzLl9saW5lc1tpXSxzPXRoaXMub2Zmc2V0QXQobmV3IHRlKGkrMSwxKSksYT1yLm1hdGNoQWxsKHQpO2Zvcihjb25zdCBsIG9mIGEpKGwuaW5kZXh8fGwuaW5kZXg9PT0wKSYmKGwuaW5kZXg9bC5pbmRleCtzKSxuLnB1c2gobCl9cmV0dXJuIG59Z2V0TGluZXNDb250ZW50KCl7cmV0dXJuIHRoaXMuX2xpbmVzLnNsaWNlKDApfWdldExpbmVDb3VudCgpe3JldHVybiB0aGlzLl9saW5lcy5sZW5ndGh9Z2V0TGluZUNvbnRlbnQodCl7cmV0dXJuIHRoaXMuX2xpbmVzW3QtMV19Z2V0V29yZEF0UG9zaXRpb24odCxuKXtjb25zdCBpPXNpKHQuY29sdW1uLFNzKG4pLHRoaXMuX2xpbmVzW3QubGluZU51bWJlci0xXSwwKTtyZXR1cm4gaT9uZXcgRyh0LmxpbmVOdW1iZXIsaS5zdGFydENvbHVtbix0LmxpbmVOdW1iZXIsaS5lbmRDb2x1bW4pOm51bGx9d29yZHModCl7Y29uc3Qgbj10aGlzLl9saW5lcyxpPXRoaXMuX3dvcmRlbml6ZS5iaW5kKHRoaXMpO2xldCByPTAscz0iIixhPTAsbD1bXTtyZXR1cm57KltTeW1ib2wuaXRlcmF0b3JdKCl7Zm9yKDs7KWlmKGE8bC5sZW5ndGgpe2NvbnN0IG89cy5zdWJzdHJpbmcobFthXS5zdGFydCxsW2FdLmVuZCk7YSs9MSx5aWVsZCBvfWVsc2UgaWYocjxuLmxlbmd0aClzPW5bcl0sbD1pKHMsdCksYT0wLHIrPTE7ZWxzZSBicmVha319fWdldExpbmVXb3Jkcyh0LG4pe2NvbnN0IGk9dGhpcy5fbGluZXNbdC0xXSxyPXRoaXMuX3dvcmRlbml6ZShpLG4pLHM9W107Zm9yKGNvbnN0IGEgb2YgcilzLnB1c2goe3dvcmQ6aS5zdWJzdHJpbmcoYS5zdGFydCxhLmVuZCksc3RhcnRDb2x1bW46YS5zdGFydCsxLGVuZENvbHVtbjphLmVuZCsxfSk7cmV0dXJuIHN9X3dvcmRlbml6ZSh0LG4pe2NvbnN0IGk9W107bGV0IHI7Zm9yKG4ubGFzdEluZGV4PTA7KHI9bi5leGVjKHQpKSYmclswXS5sZW5ndGghPT0wOylpLnB1c2goe3N0YXJ0OnIuaW5kZXgsZW5kOnIuaW5kZXgrclswXS5sZW5ndGh9KTtyZXR1cm4gaX1nZXRWYWx1ZUluUmFuZ2UodCl7aWYodD10aGlzLl92YWxpZGF0ZVJhbmdlKHQpLHQuc3RhcnRMaW5lTnVtYmVyPT09dC5lbmRMaW5lTnVtYmVyKXJldHVybiB0aGlzLl9saW5lc1t0LnN0YXJ0TGluZU51bWJlci0xXS5zdWJzdHJpbmcodC5zdGFydENvbHVtbi0xLHQuZW5kQ29sdW1uLTEpO2NvbnN0IG49dGhpcy5fZW9sLGk9dC5zdGFydExpbmVOdW1iZXItMSxyPXQuZW5kTGluZU51bWJlci0xLHM9W107cy5wdXNoKHRoaXMuX2xpbmVzW2ldLnN1YnN0cmluZyh0LnN0YXJ0Q29sdW1uLTEpKTtmb3IobGV0IGE9aSsxO2E8cjthKyspcy5wdXNoKHRoaXMuX2xpbmVzW2FdKTtyZXR1cm4gcy5wdXNoKHRoaXMuX2xpbmVzW3JdLnN1YnN0cmluZygwLHQuZW5kQ29sdW1uLTEpKSxzLmpvaW4obil9b2Zmc2V0QXQodCl7cmV0dXJuIHQ9dGhpcy5fdmFsaWRhdGVQb3NpdGlvbih0KSx0aGlzLl9lbnN1cmVMaW5lU3RhcnRzKCksdGhpcy5fbGluZVN0YXJ0cy5nZXRQcmVmaXhTdW0odC5saW5lTnVtYmVyLTIpKyh0LmNvbHVtbi0xKX1wb3NpdGlvbkF0KHQpe3Q9TWF0aC5mbG9vcih0KSx0PU1hdGgubWF4KDAsdCksdGhpcy5fZW5zdXJlTGluZVN0YXJ0cygpO2NvbnN0IG49dGhpcy5fbGluZVN0YXJ0cy5nZXRJbmRleE9mKHQpLGk9dGhpcy5fbGluZXNbbi5pbmRleF0ubGVuZ3RoO3JldHVybntsaW5lTnVtYmVyOjErbi5pbmRleCxjb2x1bW46MStNYXRoLm1pbihuLnJlbWFpbmRlcixpKX19X3ZhbGlkYXRlUmFuZ2UodCl7Y29uc3Qgbj10aGlzLl92YWxpZGF0ZVBvc2l0aW9uKHtsaW5lTnVtYmVyOnQuc3RhcnRMaW5lTnVtYmVyLGNvbHVtbjp0LnN0YXJ0Q29sdW1ufSksaT10aGlzLl92YWxpZGF0ZVBvc2l0aW9uKHtsaW5lTnVtYmVyOnQuZW5kTGluZU51bWJlcixjb2x1bW46dC5lbmRDb2x1bW59KTtyZXR1cm4gbi5saW5lTnVtYmVyIT09dC5zdGFydExpbmVOdW1iZXJ8fG4uY29sdW1uIT09dC5zdGFydENvbHVtbnx8aS5saW5lTnVtYmVyIT09dC5lbmRMaW5lTnVtYmVyfHxpLmNvbHVtbiE9PXQuZW5kQ29sdW1uP3tzdGFydExpbmVOdW1iZXI6bi5saW5lTnVtYmVyLHN0YXJ0Q29sdW1uOm4uY29sdW1uLGVuZExpbmVOdW1iZXI6aS5saW5lTnVtYmVyLGVuZENvbHVtbjppLmNvbHVtbn06dH1fdmFsaWRhdGVQb3NpdGlvbih0KXtpZighdGUuaXNJUG9zaXRpb24odCkpdGhyb3cgbmV3IEVycm9yKCJiYWQgcG9zaXRpb24iKTtsZXR7bGluZU51bWJlcjpuLGNvbHVtbjppfT10LHI9ITE7aWYobjwxKW49MSxpPTEscj0hMDtlbHNlIGlmKG4+dGhpcy5fbGluZXMubGVuZ3RoKW49dGhpcy5fbGluZXMubGVuZ3RoLGk9dGhpcy5fbGluZXNbbi0xXS5sZW5ndGgrMSxyPSEwO2Vsc2V7Y29uc3Qgcz10aGlzLl9saW5lc1tuLTFdLmxlbmd0aCsxO2k8MT8oaT0xLHI9ITApOmk+cyYmKGk9cyxyPSEwKX1yZXR1cm4gcj97bGluZU51bWJlcjpuLGNvbHVtbjppfTp0fX1jb25zdCBBbj1jbGFzcyBBbntjb25zdHJ1Y3Rvcigpe3RoaXMuX3dvcmtlclRleHRNb2RlbFN5bmNTZXJ2ZXI9bmV3IEp1fWRpc3Bvc2UoKXt9X2dldE1vZGVsKHQpe3JldHVybiB0aGlzLl93b3JrZXJUZXh0TW9kZWxTeW5jU2VydmVyLmdldE1vZGVsKHQpfV9nZXRNb2RlbHMoKXtyZXR1cm4gdGhpcy5fd29ya2VyVGV4dE1vZGVsU3luY1NlcnZlci5nZXRNb2RlbHMoKX0kYWNjZXB0TmV3TW9kZWwodCl7dGhpcy5fd29ya2VyVGV4dE1vZGVsU3luY1NlcnZlci4kYWNjZXB0TmV3TW9kZWwodCl9JGFjY2VwdE1vZGVsQ2hhbmdlZCh0LG4pe3RoaXMuX3dvcmtlclRleHRNb2RlbFN5bmNTZXJ2ZXIuJGFjY2VwdE1vZGVsQ2hhbmdlZCh0LG4pfSRhY2NlcHRSZW1vdmVkTW9kZWwodCl7dGhpcy5fd29ya2VyVGV4dE1vZGVsU3luY1NlcnZlci4kYWNjZXB0UmVtb3ZlZE1vZGVsKHQpfWFzeW5jICRjb21wdXRlVW5pY29kZUhpZ2hsaWdodHModCxuLGkpe2NvbnN0IHI9dGhpcy5fZ2V0TW9kZWwodCk7cmV0dXJuIHI/bnUuY29tcHV0ZVVuaWNvZGVIaWdobGlnaHRzKHIsbixpKTp7cmFuZ2VzOltdLGhhc01vcmU6ITEsYW1iaWd1b3VzQ2hhcmFjdGVyQ291bnQ6MCxpbnZpc2libGVDaGFyYWN0ZXJDb3VudDowLG5vbkJhc2ljQXNjaWlDaGFyYWN0ZXJDb3VudDowfX1hc3luYyAkZmluZFNlY3Rpb25IZWFkZXJzKHQsbil7Y29uc3QgaT10aGlzLl9nZXRNb2RlbCh0KTtyZXR1cm4gaT9xdShpLG4pOltdfWFzeW5jICRjb21wdXRlRGlmZih0LG4saSxyKXtjb25zdCBzPXRoaXMuX2dldE1vZGVsKHQpLGE9dGhpcy5fZ2V0TW9kZWwobik7cmV0dXJuIXN8fCFhP251bGw6b24uY29tcHV0ZURpZmYocyxhLGkscil9c3RhdGljIGNvbXB1dGVEaWZmKHQsbixpLHIpe2NvbnN0IHM9cj09PSJhZHZhbmNlZCI/R3MuZ2V0RGVmYXVsdCgpOkdzLmdldExlZ2FjeSgpLGE9dC5nZXRMaW5lc0NvbnRlbnQoKSxsPW4uZ2V0TGluZXNDb250ZW50KCksbz1zLmNvbXB1dGVEaWZmKGEsbCxpKSx1PW8uY2hhbmdlcy5sZW5ndGg+MD8hMTp0aGlzLl9tb2RlbHNBcmVJZGVudGljYWwodCxuKTtmdW5jdGlvbiBjKGQpe3JldHVybiBkLm1hcChtPT5bbS5vcmlnaW5hbC5zdGFydExpbmVOdW1iZXIsbS5vcmlnaW5hbC5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlLG0ubW9kaWZpZWQuc3RhcnRMaW5lTnVtYmVyLG0ubW9kaWZpZWQuZW5kTGluZU51bWJlckV4Y2x1c2l2ZSxtLmlubmVyQ2hhbmdlcz8ubWFwKGY9PltmLm9yaWdpbmFsUmFuZ2Uuc3RhcnRMaW5lTnVtYmVyLGYub3JpZ2luYWxSYW5nZS5zdGFydENvbHVtbixmLm9yaWdpbmFsUmFuZ2UuZW5kTGluZU51bWJlcixmLm9yaWdpbmFsUmFuZ2UuZW5kQ29sdW1uLGYubW9kaWZpZWRSYW5nZS5zdGFydExpbmVOdW1iZXIsZi5tb2RpZmllZFJhbmdlLnN0YXJ0Q29sdW1uLGYubW9kaWZpZWRSYW5nZS5lbmRMaW5lTnVtYmVyLGYubW9kaWZpZWRSYW5nZS5lbmRDb2x1bW5dKV0pfXJldHVybntpZGVudGljYWw6dSxxdWl0RWFybHk6by5oaXRUaW1lb3V0LGNoYW5nZXM6YyhvLmNoYW5nZXMpLG1vdmVzOm8ubW92ZXMubWFwKGQ9PltkLmxpbmVSYW5nZU1hcHBpbmcub3JpZ2luYWwuc3RhcnRMaW5lTnVtYmVyLGQubGluZVJhbmdlTWFwcGluZy5vcmlnaW5hbC5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlLGQubGluZVJhbmdlTWFwcGluZy5tb2RpZmllZC5zdGFydExpbmVOdW1iZXIsZC5saW5lUmFuZ2VNYXBwaW5nLm1vZGlmaWVkLmVuZExpbmVOdW1iZXJFeGNsdXNpdmUsYyhkLmNoYW5nZXMpXSl9fXN0YXRpYyBfbW9kZWxzQXJlSWRlbnRpY2FsKHQsbil7Y29uc3QgaT10LmdldExpbmVDb3VudCgpLHI9bi5nZXRMaW5lQ291bnQoKTtpZihpIT09cilyZXR1cm4hMTtmb3IobGV0IHM9MTtzPD1pO3MrKyl7Y29uc3QgYT10LmdldExpbmVDb250ZW50KHMpLGw9bi5nZXRMaW5lQ29udGVudChzKTtpZihhIT09bClyZXR1cm4hMX1yZXR1cm4hMH1hc3luYyAkY29tcHV0ZU1vcmVNaW5pbWFsRWRpdHModCxuLGkpe2NvbnN0IHI9dGhpcy5fZ2V0TW9kZWwodCk7aWYoIXIpcmV0dXJuIG47Y29uc3Qgcz1bXTtsZXQgYTtuPW4uc2xpY2UoMCkuc29ydCgobyx1KT0+e2lmKG8ucmFuZ2UmJnUucmFuZ2UpcmV0dXJuIEcuY29tcGFyZVJhbmdlc1VzaW5nU3RhcnRzKG8ucmFuZ2UsdS5yYW5nZSk7Y29uc3QgYz1vLnJhbmdlPzA6MSxkPXUucmFuZ2U/MDoxO3JldHVybiBjLWR9KTtsZXQgbD0wO2ZvcihsZXQgbz0xO288bi5sZW5ndGg7bysrKUcuZ2V0RW5kUG9zaXRpb24obltsXS5yYW5nZSkuZXF1YWxzKEcuZ2V0U3RhcnRQb3NpdGlvbihuW29dLnJhbmdlKSk/KG5bbF0ucmFuZ2U9Ry5mcm9tUG9zaXRpb25zKEcuZ2V0U3RhcnRQb3NpdGlvbihuW2xdLnJhbmdlKSxHLmdldEVuZFBvc2l0aW9uKG5bb10ucmFuZ2UpKSxuW2xdLnRleHQrPW5bb10udGV4dCk6KGwrKyxuW2xdPW5bb10pO24ubGVuZ3RoPWwrMTtmb3IobGV0e3JhbmdlOm8sdGV4dDp1LGVvbDpjfW9mIG4pe2lmKHR5cGVvZiBjPT0ibnVtYmVyIiYmKGE9YyksRy5pc0VtcHR5KG8pJiYhdSljb250aW51ZTtjb25zdCBkPXIuZ2V0VmFsdWVJblJhbmdlKG8pO2lmKHU9dS5yZXBsYWNlKC9cclxufFxufFxyL2csci5lb2wpLGQ9PT11KWNvbnRpbnVlO2lmKE1hdGgubWF4KHUubGVuZ3RoLGQubGVuZ3RoKT5vbi5fZGlmZkxpbWl0KXtzLnB1c2goe3JhbmdlOm8sdGV4dDp1fSk7Y29udGludWV9Y29uc3QgbT1BbChkLHUsaSksZj1yLm9mZnNldEF0KEcubGlmdChvKS5nZXRTdGFydFBvc2l0aW9uKCkpO2Zvcihjb25zdCBfIG9mIG0pe2NvbnN0IGc9ci5wb3NpdGlvbkF0KGYrXy5vcmlnaW5hbFN0YXJ0KSxrPXIucG9zaXRpb25BdChmK18ub3JpZ2luYWxTdGFydCtfLm9yaWdpbmFsTGVuZ3RoKSx5PXt0ZXh0OnUuc3Vic3RyKF8ubW9kaWZpZWRTdGFydCxfLm1vZGlmaWVkTGVuZ3RoKSxyYW5nZTp7c3RhcnRMaW5lTnVtYmVyOmcubGluZU51bWJlcixzdGFydENvbHVtbjpnLmNvbHVtbixlbmRMaW5lTnVtYmVyOmsubGluZU51bWJlcixlbmRDb2x1bW46ay5jb2x1bW59fTtyLmdldFZhbHVlSW5SYW5nZSh5LnJhbmdlKSE9PXkudGV4dCYmcy5wdXNoKHkpfX1yZXR1cm4gdHlwZW9mIGE9PSJudW1iZXIiJiZzLnB1c2goe2VvbDphLHRleHQ6IiIscmFuZ2U6e3N0YXJ0TGluZU51bWJlcjowLHN0YXJ0Q29sdW1uOjAsZW5kTGluZU51bWJlcjowLGVuZENvbHVtbjowfX0pLHN9YXN5bmMgJGNvbXB1dGVMaW5rcyh0KXtjb25zdCBuPXRoaXMuX2dldE1vZGVsKHQpO3JldHVybiBuP1JsKG4pOm51bGx9YXN5bmMgJGNvbXB1dGVEZWZhdWx0RG9jdW1lbnRDb2xvcnModCl7Y29uc3Qgbj10aGlzLl9nZXRNb2RlbCh0KTtyZXR1cm4gbj9QdShuKTpudWxsfWFzeW5jICR0ZXh0dWFsU3VnZ2VzdCh0LG4saSxyKXtjb25zdCBzPW5ldyBCdCxhPW5ldyBSZWdFeHAoaSxyKSxsPW5ldyBTZXQ7ZTpmb3IoY29uc3QgbyBvZiB0KXtjb25zdCB1PXRoaXMuX2dldE1vZGVsKG8pO2lmKHUpe2Zvcihjb25zdCBjIG9mIHUud29yZHMoYSkpaWYoIShjPT09bnx8IWlzTmFOKE51bWJlcihjKSkpJiYobC5hZGQoYyksbC5zaXplPm9uLl9zdWdnZXN0aW9uc0xpbWl0KSlicmVhayBlfX1yZXR1cm57d29yZHM6QXJyYXkuZnJvbShsKSxkdXJhdGlvbjpzLmVsYXBzZWQoKX19YXN5bmMgJGNvbXB1dGVXb3JkUmFuZ2VzKHQsbixpLHIpe2NvbnN0IHM9dGhpcy5fZ2V0TW9kZWwodCk7aWYoIXMpcmV0dXJuIE9iamVjdC5jcmVhdGUobnVsbCk7Y29uc3QgYT1uZXcgUmVnRXhwKGksciksbD1PYmplY3QuY3JlYXRlKG51bGwpO2ZvcihsZXQgbz1uLnN0YXJ0TGluZU51bWJlcjtvPG4uZW5kTGluZU51bWJlcjtvKyspe2NvbnN0IHU9cy5nZXRMaW5lV29yZHMobyxhKTtmb3IoY29uc3QgYyBvZiB1KXtpZighaXNOYU4oTnVtYmVyKGMud29yZCkpKWNvbnRpbnVlO2xldCBkPWxbYy53b3JkXTtkfHwoZD1bXSxsW2Mud29yZF09ZCksZC5wdXNoKHtzdGFydExpbmVOdW1iZXI6byxzdGFydENvbHVtbjpjLnN0YXJ0Q29sdW1uLGVuZExpbmVOdW1iZXI6byxlbmRDb2x1bW46Yy5lbmRDb2x1bW59KX19cmV0dXJuIGx9YXN5bmMgJG5hdmlnYXRlVmFsdWVTZXQodCxuLGkscixzKXtjb25zdCBhPXRoaXMuX2dldE1vZGVsKHQpO2lmKCFhKXJldHVybiBudWxsO2NvbnN0IGw9bmV3IFJlZ0V4cChyLHMpO24uc3RhcnRDb2x1bW49PT1uLmVuZENvbHVtbiYmKG49e3N0YXJ0TGluZU51bWJlcjpuLnN0YXJ0TGluZU51bWJlcixzdGFydENvbHVtbjpuLnN0YXJ0Q29sdW1uLGVuZExpbmVOdW1iZXI6bi5lbmRMaW5lTnVtYmVyLGVuZENvbHVtbjpuLmVuZENvbHVtbisxfSk7Y29uc3Qgbz1hLmdldFZhbHVlSW5SYW5nZShuKSx1PWEuZ2V0V29yZEF0UG9zaXRpb24oe2xpbmVOdW1iZXI6bi5zdGFydExpbmVOdW1iZXIsY29sdW1uOm4uc3RhcnRDb2x1bW59LGwpO2lmKCF1KXJldHVybiBudWxsO2NvbnN0IGM9YS5nZXRWYWx1ZUluUmFuZ2UodSk7cmV0dXJuIEpuLklOU1RBTkNFLm5hdmlnYXRlVmFsdWVTZXQobixvLHUsYyxpKX19O0FuLl9kaWZmTGltaXQ9MWU1LEFuLl9zdWdnZXN0aW9uc0xpbWl0PTFlNDtsZXQgZmk9QW47Y2xhc3Mgb24gZXh0ZW5kcyBmaXtjb25zdHJ1Y3Rvcih0LG4pe3N1cGVyKCksdGhpcy5faG9zdD10LHRoaXMuX2ZvcmVpZ25Nb2R1bGVGYWN0b3J5PW4sdGhpcy5fZm9yZWlnbk1vZHVsZT1udWxsfWFzeW5jICRwaW5nKCl7cmV0dXJuInBvbmcifSRsb2FkRm9yZWlnbk1vZHVsZSh0LG4saSl7Y29uc3QgYT17aG9zdDpHbChpLChsLG8pPT50aGlzLl9ob3N0LiRmaHIobCxvKSksZ2V0TWlycm9yTW9kZWxzOigpPT50aGlzLl9nZXRNb2RlbHMoKX07cmV0dXJuIHRoaXMuX2ZvcmVpZ25Nb2R1bGVGYWN0b3J5Pyh0aGlzLl9mb3JlaWduTW9kdWxlPXRoaXMuX2ZvcmVpZ25Nb2R1bGVGYWN0b3J5KGEsbiksUHJvbWlzZS5yZXNvbHZlKHZzKHRoaXMuX2ZvcmVpZ25Nb2R1bGUpKSk6bmV3IFByb21pc2UoKGwsbyk9Pntjb25zdCB1PWM9Pnt0aGlzLl9mb3JlaWduTW9kdWxlPWMuY3JlYXRlKGEsbiksbCh2cyh0aGlzLl9mb3JlaWduTW9kdWxlKSl9O2ltcG9ydChgJHtyci5hc0Jyb3dzZXJVcmkoYCR7dH0uanNgKS50b1N0cmluZyghMCl9YCkudGhlbih1KS5jYXRjaChvKX0pfSRmbXIodCxuKXtpZighdGhpcy5fZm9yZWlnbk1vZHVsZXx8dHlwZW9mIHRoaXMuX2ZvcmVpZ25Nb2R1bGVbdF0hPSJmdW5jdGlvbiIpcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcigiTWlzc2luZyByZXF1ZXN0SGFuZGxlciBvciBtZXRob2Q6ICIrdCkpO3RyeXtyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHRoaXMuX2ZvcmVpZ25Nb2R1bGVbdF0uYXBwbHkodGhpcy5fZm9yZWlnbk1vZHVsZSxuKSl9Y2F0Y2goaSl7cmV0dXJuIFByb21pc2UucmVqZWN0KGkpfX19dHlwZW9mIGltcG9ydFNjcmlwdHM9PSJmdW5jdGlvbiImJihnbG9iYWxUaGlzLm1vbmFjbz1CbCgpKTtsZXQgcGk9ITE7ZnVuY3Rpb24gdGEoZSl7aWYocGkpcmV0dXJuO3BpPSEwO2NvbnN0IHQ9bmV3IHhsKG49PntnbG9iYWxUaGlzLnBvc3RNZXNzYWdlKG4pfSxuPT5uZXcgb24ocmkuZ2V0Q2hhbm5lbChuKSxlKSk7Z2xvYmFsVGhpcy5vbm1lc3NhZ2U9bj0+e3Qub25tZXNzYWdlKG4uZGF0YSl9fWdsb2JhbFRoaXMub25tZXNzYWdlPWU9PntwaXx8dGEobnVsbCl9Oy8qIS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAqIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogKiBWZXJzaW9uOiAwLjUyLjAoZjZkYzBlYjhmY2U2N2U1N2Y2MDM2ZjQ3NjlkOTJjMTY2NmNkZjU0NikKICogUmVsZWFzZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlCiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9taWNyb3NvZnQvbW9uYWNvLWVkaXRvci9ibG9iL21haW4vTElDRU5TRS50eHQKICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovZnVuY3Rpb24gQWUoLi4uZSl7Y29uc3QgdD1lWzBdO2xldCBuLGkscjtpZih0eXBlb2YgdD09InN0cmluZyIpbj10LGk9dCxlLnNwbGljZSgwLDEpLHI9IWV8fHR5cGVvZiBlWzBdIT0ib2JqZWN0Ij9lOmVbMF07ZWxzZSBpZih0IGluc3RhbmNlb2YgQXJyYXkpe2NvbnN0IHM9ZS5zbGljZSgxKTtpZih0Lmxlbmd0aCE9PXMubGVuZ3RoKzEpdGhyb3cgbmV3IEVycm9yKCJleHBlY3RlZCBhIHN0cmluZyBhcyB0aGUgZmlyc3QgYXJndW1lbnQgdG8gbDEwbi50Iik7bGV0IGE9dFswXTtmb3IobGV0IGw9MTtsPHQubGVuZ3RoO2wrKylhKz1geyR7bC0xfX1gK3RbbF07cmV0dXJuIEFlKGEsLi4ucyl9ZWxzZSBpPXQubWVzc2FnZSxuPWksdC5jb21tZW50JiZ0LmNvbW1lbnQubGVuZ3RoPjAmJihuKz1gLyR7QXJyYXkuaXNBcnJheSh0LmNvbW1lbnQpP3QuY29tbWVudC5qb2luKCIiKTp0LmNvbW1lbnR9YCkscj10LmFyZ3M/P3t9O3JldHVybiBadShpLHIpfXZhciBRdT0veyhbXn1dKyl9L2c7ZnVuY3Rpb24gWnUoZSx0KXtyZXR1cm4gT2JqZWN0LmtleXModCkubGVuZ3RoPT09MD9lOmUucmVwbGFjZShRdSwobixpKT0+dFtpXT8/bil9dmFyIG5hOyhmdW5jdGlvbihlKXtmdW5jdGlvbiB0KG4pe3JldHVybiB0eXBlb2Ygbj09InN0cmluZyJ9ZS5pcz10fSkobmF8fChuYT17fSkpO3ZhciBnaTsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdChuKXtyZXR1cm4gdHlwZW9mIG49PSJzdHJpbmcifWUuaXM9dH0pKGdpfHwoZ2k9e30pKTt2YXIgaWE7KGZ1bmN0aW9uKGUpe2UuTUlOX1ZBTFVFPS0yMTQ3NDgzNjQ4LGUuTUFYX1ZBTFVFPTIxNDc0ODM2NDc7ZnVuY3Rpb24gdChuKXtyZXR1cm4gdHlwZW9mIG49PSJudW1iZXIiJiZlLk1JTl9WQUxVRTw9biYmbjw9ZS5NQVhfVkFMVUV9ZS5pcz10fSkoaWF8fChpYT17fSkpO3ZhciBsbjsoZnVuY3Rpb24oZSl7ZS5NSU5fVkFMVUU9MCxlLk1BWF9WQUxVRT0yMTQ3NDgzNjQ3O2Z1bmN0aW9uIHQobil7cmV0dXJuIHR5cGVvZiBuPT0ibnVtYmVyIiYmZS5NSU5fVkFMVUU8PW4mJm48PWUuTUFYX1ZBTFVFfWUuaXM9dH0pKGxufHwobG49e30pKTt2YXIgcmU7KGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoaSxyKXtyZXR1cm4gaT09PU51bWJlci5NQVhfVkFMVUUmJihpPWxuLk1BWF9WQUxVRSkscj09PU51bWJlci5NQVhfVkFMVUUmJihyPWxuLk1BWF9WQUxVRSkse2xpbmU6aSxjaGFyYWN0ZXI6cn19ZS5jcmVhdGU9dDtmdW5jdGlvbiBuKGkpe2xldCByPWk7cmV0dXJuIEMub2JqZWN0TGl0ZXJhbChyKSYmQy51aW50ZWdlcihyLmxpbmUpJiZDLnVpbnRlZ2VyKHIuY2hhcmFjdGVyKX1lLmlzPW59KShyZXx8KHJlPXt9KSk7dmFyICQ7KGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoaSxyLHMsYSl7aWYoQy51aW50ZWdlcihpKSYmQy51aW50ZWdlcihyKSYmQy51aW50ZWdlcihzKSYmQy51aW50ZWdlcihhKSlyZXR1cm57c3RhcnQ6cmUuY3JlYXRlKGksciksZW5kOnJlLmNyZWF0ZShzLGEpfTtpZihyZS5pcyhpKSYmcmUuaXMocikpcmV0dXJue3N0YXJ0OmksZW5kOnJ9O3Rocm93IG5ldyBFcnJvcihgUmFuZ2UjY3JlYXRlIGNhbGxlZCB3aXRoIGludmFsaWQgYXJndW1lbnRzWyR7aX0sICR7cn0sICR7c30sICR7YX1dYCl9ZS5jcmVhdGU9dDtmdW5jdGlvbiBuKGkpe2xldCByPWk7cmV0dXJuIEMub2JqZWN0TGl0ZXJhbChyKSYmcmUuaXMoci5zdGFydCkmJnJlLmlzKHIuZW5kKX1lLmlzPW59KSgkfHwoJD17fSkpO3ZhciB1bjsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdChpLHIpe3JldHVybnt1cmk6aSxyYW5nZTpyfX1lLmNyZWF0ZT10O2Z1bmN0aW9uIG4oaSl7bGV0IHI9aTtyZXR1cm4gQy5vYmplY3RMaXRlcmFsKHIpJiYkLmlzKHIucmFuZ2UpJiYoQy5zdHJpbmcoci51cmkpfHxDLnVuZGVmaW5lZChyLnVyaSkpfWUuaXM9bn0pKHVufHwodW49e30pKTt2YXIgcmE7KGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoaSxyLHMsYSl7cmV0dXJue3RhcmdldFVyaTppLHRhcmdldFJhbmdlOnIsdGFyZ2V0U2VsZWN0aW9uUmFuZ2U6cyxvcmlnaW5TZWxlY3Rpb25SYW5nZTphfX1lLmNyZWF0ZT10O2Z1bmN0aW9uIG4oaSl7bGV0IHI9aTtyZXR1cm4gQy5vYmplY3RMaXRlcmFsKHIpJiYkLmlzKHIudGFyZ2V0UmFuZ2UpJiZDLnN0cmluZyhyLnRhcmdldFVyaSkmJiQuaXMoci50YXJnZXRTZWxlY3Rpb25SYW5nZSkmJigkLmlzKHIub3JpZ2luU2VsZWN0aW9uUmFuZ2UpfHxDLnVuZGVmaW5lZChyLm9yaWdpblNlbGVjdGlvblJhbmdlKSl9ZS5pcz1ufSkocmF8fChyYT17fSkpO3ZhciBiaTsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdChpLHIscyxhKXtyZXR1cm57cmVkOmksZ3JlZW46cixibHVlOnMsYWxwaGE6YX19ZS5jcmVhdGU9dDtmdW5jdGlvbiBuKGkpe2NvbnN0IHI9aTtyZXR1cm4gQy5vYmplY3RMaXRlcmFsKHIpJiZDLm51bWJlclJhbmdlKHIucmVkLDAsMSkmJkMubnVtYmVyUmFuZ2Uoci5ncmVlbiwwLDEpJiZDLm51bWJlclJhbmdlKHIuYmx1ZSwwLDEpJiZDLm51bWJlclJhbmdlKHIuYWxwaGEsMCwxKX1lLmlzPW59KShiaXx8KGJpPXt9KSk7dmFyIHNhOyhmdW5jdGlvbihlKXtmdW5jdGlvbiB0KGkscil7cmV0dXJue3JhbmdlOmksY29sb3I6cn19ZS5jcmVhdGU9dDtmdW5jdGlvbiBuKGkpe2NvbnN0IHI9aTtyZXR1cm4gQy5vYmplY3RMaXRlcmFsKHIpJiYkLmlzKHIucmFuZ2UpJiZiaS5pcyhyLmNvbG9yKX1lLmlzPW59KShzYXx8KHNhPXt9KSk7dmFyIGFhOyhmdW5jdGlvbihlKXtmdW5jdGlvbiB0KGkscixzKXtyZXR1cm57bGFiZWw6aSx0ZXh0RWRpdDpyLGFkZGl0aW9uYWxUZXh0RWRpdHM6c319ZS5jcmVhdGU9dDtmdW5jdGlvbiBuKGkpe2NvbnN0IHI9aTtyZXR1cm4gQy5vYmplY3RMaXRlcmFsKHIpJiZDLnN0cmluZyhyLmxhYmVsKSYmKEMudW5kZWZpbmVkKHIudGV4dEVkaXQpfHxhZS5pcyhyKSkmJihDLnVuZGVmaW5lZChyLmFkZGl0aW9uYWxUZXh0RWRpdHMpfHxDLnR5cGVkQXJyYXkoci5hZGRpdGlvbmFsVGV4dEVkaXRzLGFlLmlzKSl9ZS5pcz1ufSkoYWF8fChhYT17fSkpO3ZhciBjbjsoZnVuY3Rpb24oZSl7ZS5Db21tZW50PSJjb21tZW50IixlLkltcG9ydHM9ImltcG9ydHMiLGUuUmVnaW9uPSJyZWdpb24ifSkoY258fChjbj17fSkpO3ZhciBvYTsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdChpLHIscyxhLGwsbyl7Y29uc3QgdT17c3RhcnRMaW5lOmksZW5kTGluZTpyfTtyZXR1cm4gQy5kZWZpbmVkKHMpJiYodS5zdGFydENoYXJhY3Rlcj1zKSxDLmRlZmluZWQoYSkmJih1LmVuZENoYXJhY3Rlcj1hKSxDLmRlZmluZWQobCkmJih1LmtpbmQ9bCksQy5kZWZpbmVkKG8pJiYodS5jb2xsYXBzZWRUZXh0PW8pLHV9ZS5jcmVhdGU9dDtmdW5jdGlvbiBuKGkpe2NvbnN0IHI9aTtyZXR1cm4gQy5vYmplY3RMaXRlcmFsKHIpJiZDLnVpbnRlZ2VyKHIuc3RhcnRMaW5lKSYmQy51aW50ZWdlcihyLnN0YXJ0TGluZSkmJihDLnVuZGVmaW5lZChyLnN0YXJ0Q2hhcmFjdGVyKXx8Qy51aW50ZWdlcihyLnN0YXJ0Q2hhcmFjdGVyKSkmJihDLnVuZGVmaW5lZChyLmVuZENoYXJhY3Rlcil8fEMudWludGVnZXIoci5lbmRDaGFyYWN0ZXIpKSYmKEMudW5kZWZpbmVkKHIua2luZCl8fEMuc3RyaW5nKHIua2luZCkpfWUuaXM9bn0pKG9hfHwob2E9e30pKTt2YXIgX2k7KGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoaSxyKXtyZXR1cm57bG9jYXRpb246aSxtZXNzYWdlOnJ9fWUuY3JlYXRlPXQ7ZnVuY3Rpb24gbihpKXtsZXQgcj1pO3JldHVybiBDLmRlZmluZWQocikmJnVuLmlzKHIubG9jYXRpb24pJiZDLnN0cmluZyhyLm1lc3NhZ2UpfWUuaXM9bn0pKF9pfHwoX2k9e30pKTt2YXIgbGE7KGZ1bmN0aW9uKGUpe2UuRXJyb3I9MSxlLldhcm5pbmc9MixlLkluZm9ybWF0aW9uPTMsZS5IaW50PTR9KShsYXx8KGxhPXt9KSk7dmFyIHVhOyhmdW5jdGlvbihlKXtlLlVubmVjZXNzYXJ5PTEsZS5EZXByZWNhdGVkPTJ9KSh1YXx8KHVhPXt9KSk7dmFyIGNhOyhmdW5jdGlvbihlKXtmdW5jdGlvbiB0KG4pe2NvbnN0IGk9bjtyZXR1cm4gQy5vYmplY3RMaXRlcmFsKGkpJiZDLnN0cmluZyhpLmhyZWYpfWUuaXM9dH0pKGNhfHwoY2E9e30pKTt2YXIgaG47KGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoaSxyLHMsYSxsLG8pe2xldCB1PXtyYW5nZTppLG1lc3NhZ2U6cn07cmV0dXJuIEMuZGVmaW5lZChzKSYmKHUuc2V2ZXJpdHk9cyksQy5kZWZpbmVkKGEpJiYodS5jb2RlPWEpLEMuZGVmaW5lZChsKSYmKHUuc291cmNlPWwpLEMuZGVmaW5lZChvKSYmKHUucmVsYXRlZEluZm9ybWF0aW9uPW8pLHV9ZS5jcmVhdGU9dDtmdW5jdGlvbiBuKGkpe3ZhciByO2xldCBzPWk7cmV0dXJuIEMuZGVmaW5lZChzKSYmJC5pcyhzLnJhbmdlKSYmQy5zdHJpbmcocy5tZXNzYWdlKSYmKEMubnVtYmVyKHMuc2V2ZXJpdHkpfHxDLnVuZGVmaW5lZChzLnNldmVyaXR5KSkmJihDLmludGVnZXIocy5jb2RlKXx8Qy5zdHJpbmcocy5jb2RlKXx8Qy51bmRlZmluZWQocy5jb2RlKSkmJihDLnVuZGVmaW5lZChzLmNvZGVEZXNjcmlwdGlvbil8fEMuc3RyaW5nKChyPXMuY29kZURlc2NyaXB0aW9uKT09PW51bGx8fHI9PT12b2lkIDA/dm9pZCAwOnIuaHJlZikpJiYoQy5zdHJpbmcocy5zb3VyY2UpfHxDLnVuZGVmaW5lZChzLnNvdXJjZSkpJiYoQy51bmRlZmluZWQocy5yZWxhdGVkSW5mb3JtYXRpb24pfHxDLnR5cGVkQXJyYXkocy5yZWxhdGVkSW5mb3JtYXRpb24sX2kuaXMpKX1lLmlzPW59KShobnx8KGhuPXt9KSk7dmFyIGZ0OyhmdW5jdGlvbihlKXtmdW5jdGlvbiB0KGksciwuLi5zKXtsZXQgYT17dGl0bGU6aSxjb21tYW5kOnJ9O3JldHVybiBDLmRlZmluZWQocykmJnMubGVuZ3RoPjAmJihhLmFyZ3VtZW50cz1zKSxhfWUuY3JlYXRlPXQ7ZnVuY3Rpb24gbihpKXtsZXQgcj1pO3JldHVybiBDLmRlZmluZWQocikmJkMuc3RyaW5nKHIudGl0bGUpJiZDLnN0cmluZyhyLmNvbW1hbmQpfWUuaXM9bn0pKGZ0fHwoZnQ9e30pKTt2YXIgYWU7KGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQocyxhKXtyZXR1cm57cmFuZ2U6cyxuZXdUZXh0OmF9fWUucmVwbGFjZT10O2Z1bmN0aW9uIG4ocyxhKXtyZXR1cm57cmFuZ2U6e3N0YXJ0OnMsZW5kOnN9LG5ld1RleHQ6YX19ZS5pbnNlcnQ9bjtmdW5jdGlvbiBpKHMpe3JldHVybntyYW5nZTpzLG5ld1RleHQ6IiJ9fWUuZGVsPWk7ZnVuY3Rpb24gcihzKXtjb25zdCBhPXM7cmV0dXJuIEMub2JqZWN0TGl0ZXJhbChhKSYmQy5zdHJpbmcoYS5uZXdUZXh0KSYmJC5pcyhhLnJhbmdlKX1lLmlzPXJ9KShhZXx8KGFlPXt9KSk7dmFyIHdpOyhmdW5jdGlvbihlKXtmdW5jdGlvbiB0KGkscixzKXtjb25zdCBhPXtsYWJlbDppfTtyZXR1cm4gciE9PXZvaWQgMCYmKGEubmVlZHNDb25maXJtYXRpb249cikscyE9PXZvaWQgMCYmKGEuZGVzY3JpcHRpb249cyksYX1lLmNyZWF0ZT10O2Z1bmN0aW9uIG4oaSl7Y29uc3Qgcj1pO3JldHVybiBDLm9iamVjdExpdGVyYWwocikmJkMuc3RyaW5nKHIubGFiZWwpJiYoQy5ib29sZWFuKHIubmVlZHNDb25maXJtYXRpb24pfHxyLm5lZWRzQ29uZmlybWF0aW9uPT09dm9pZCAwKSYmKEMuc3RyaW5nKHIuZGVzY3JpcHRpb24pfHxyLmRlc2NyaXB0aW9uPT09dm9pZCAwKX1lLmlzPW59KSh3aXx8KHdpPXt9KSk7dmFyIHB0OyhmdW5jdGlvbihlKXtmdW5jdGlvbiB0KG4pe2NvbnN0IGk9bjtyZXR1cm4gQy5zdHJpbmcoaSl9ZS5pcz10fSkocHR8fChwdD17fSkpO3ZhciBoYTsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdChzLGEsbCl7cmV0dXJue3JhbmdlOnMsbmV3VGV4dDphLGFubm90YXRpb25JZDpsfX1lLnJlcGxhY2U9dDtmdW5jdGlvbiBuKHMsYSxsKXtyZXR1cm57cmFuZ2U6e3N0YXJ0OnMsZW5kOnN9LG5ld1RleHQ6YSxhbm5vdGF0aW9uSWQ6bH19ZS5pbnNlcnQ9bjtmdW5jdGlvbiBpKHMsYSl7cmV0dXJue3JhbmdlOnMsbmV3VGV4dDoiIixhbm5vdGF0aW9uSWQ6YX19ZS5kZWw9aTtmdW5jdGlvbiByKHMpe2NvbnN0IGE9cztyZXR1cm4gYWUuaXMoYSkmJih3aS5pcyhhLmFubm90YXRpb25JZCl8fHB0LmlzKGEuYW5ub3RhdGlvbklkKSl9ZS5pcz1yfSkoaGF8fChoYT17fSkpO3ZhciB2aTsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdChpLHIpe3JldHVybnt0ZXh0RG9jdW1lbnQ6aSxlZGl0czpyfX1lLmNyZWF0ZT10O2Z1bmN0aW9uIG4oaSl7bGV0IHI9aTtyZXR1cm4gQy5kZWZpbmVkKHIpJiZBaS5pcyhyLnRleHREb2N1bWVudCkmJkFycmF5LmlzQXJyYXkoci5lZGl0cyl9ZS5pcz1ufSkodml8fCh2aT17fSkpO3ZhciB5aTsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdChpLHIscyl7bGV0IGE9e2tpbmQ6ImNyZWF0ZSIsdXJpOml9O3JldHVybiByIT09dm9pZCAwJiYoci5vdmVyd3JpdGUhPT12b2lkIDB8fHIuaWdub3JlSWZFeGlzdHMhPT12b2lkIDApJiYoYS5vcHRpb25zPXIpLHMhPT12b2lkIDAmJihhLmFubm90YXRpb25JZD1zKSxhfWUuY3JlYXRlPXQ7ZnVuY3Rpb24gbihpKXtsZXQgcj1pO3JldHVybiByJiZyLmtpbmQ9PT0iY3JlYXRlIiYmQy5zdHJpbmcoci51cmkpJiYoci5vcHRpb25zPT09dm9pZCAwfHwoci5vcHRpb25zLm92ZXJ3cml0ZT09PXZvaWQgMHx8Qy5ib29sZWFuKHIub3B0aW9ucy5vdmVyd3JpdGUpKSYmKHIub3B0aW9ucy5pZ25vcmVJZkV4aXN0cz09PXZvaWQgMHx8Qy5ib29sZWFuKHIub3B0aW9ucy5pZ25vcmVJZkV4aXN0cykpKSYmKHIuYW5ub3RhdGlvbklkPT09dm9pZCAwfHxwdC5pcyhyLmFubm90YXRpb25JZCkpfWUuaXM9bn0pKHlpfHwoeWk9e30pKTt2YXIgeGk7KGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoaSxyLHMsYSl7bGV0IGw9e2tpbmQ6InJlbmFtZSIsb2xkVXJpOmksbmV3VXJpOnJ9O3JldHVybiBzIT09dm9pZCAwJiYocy5vdmVyd3JpdGUhPT12b2lkIDB8fHMuaWdub3JlSWZFeGlzdHMhPT12b2lkIDApJiYobC5vcHRpb25zPXMpLGEhPT12b2lkIDAmJihsLmFubm90YXRpb25JZD1hKSxsfWUuY3JlYXRlPXQ7ZnVuY3Rpb24gbihpKXtsZXQgcj1pO3JldHVybiByJiZyLmtpbmQ9PT0icmVuYW1lIiYmQy5zdHJpbmcoci5vbGRVcmkpJiZDLnN0cmluZyhyLm5ld1VyaSkmJihyLm9wdGlvbnM9PT12b2lkIDB8fChyLm9wdGlvbnMub3ZlcndyaXRlPT09dm9pZCAwfHxDLmJvb2xlYW4oci5vcHRpb25zLm92ZXJ3cml0ZSkpJiYoci5vcHRpb25zLmlnbm9yZUlmRXhpc3RzPT09dm9pZCAwfHxDLmJvb2xlYW4oci5vcHRpb25zLmlnbm9yZUlmRXhpc3RzKSkpJiYoci5hbm5vdGF0aW9uSWQ9PT12b2lkIDB8fHB0LmlzKHIuYW5ub3RhdGlvbklkKSl9ZS5pcz1ufSkoeGl8fCh4aT17fSkpO3ZhciBUaTsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdChpLHIscyl7bGV0IGE9e2tpbmQ6ImRlbGV0ZSIsdXJpOml9O3JldHVybiByIT09dm9pZCAwJiYoci5yZWN1cnNpdmUhPT12b2lkIDB8fHIuaWdub3JlSWZOb3RFeGlzdHMhPT12b2lkIDApJiYoYS5vcHRpb25zPXIpLHMhPT12b2lkIDAmJihhLmFubm90YXRpb25JZD1zKSxhfWUuY3JlYXRlPXQ7ZnVuY3Rpb24gbihpKXtsZXQgcj1pO3JldHVybiByJiZyLmtpbmQ9PT0iZGVsZXRlIiYmQy5zdHJpbmcoci51cmkpJiYoci5vcHRpb25zPT09dm9pZCAwfHwoci5vcHRpb25zLnJlY3Vyc2l2ZT09PXZvaWQgMHx8Qy5ib29sZWFuKHIub3B0aW9ucy5yZWN1cnNpdmUpKSYmKHIub3B0aW9ucy5pZ25vcmVJZk5vdEV4aXN0cz09PXZvaWQgMHx8Qy5ib29sZWFuKHIub3B0aW9ucy5pZ25vcmVJZk5vdEV4aXN0cykpKSYmKHIuYW5ub3RhdGlvbklkPT09dm9pZCAwfHxwdC5pcyhyLmFubm90YXRpb25JZCkpfWUuaXM9bn0pKFRpfHwoVGk9e30pKTt2YXIga2k7KGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQobil7bGV0IGk9bjtyZXR1cm4gaSYmKGkuY2hhbmdlcyE9PXZvaWQgMHx8aS5kb2N1bWVudENoYW5nZXMhPT12b2lkIDApJiYoaS5kb2N1bWVudENoYW5nZXM9PT12b2lkIDB8fGkuZG9jdW1lbnRDaGFuZ2VzLmV2ZXJ5KHI9PkMuc3RyaW5nKHIua2luZCk/eWkuaXMocil8fHhpLmlzKHIpfHxUaS5pcyhyKTp2aS5pcyhyKSkpfWUuaXM9dH0pKGtpfHwoa2k9e30pKTt2YXIgZGE7KGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoaSl7cmV0dXJue3VyaTppfX1lLmNyZWF0ZT10O2Z1bmN0aW9uIG4oaSl7bGV0IHI9aTtyZXR1cm4gQy5kZWZpbmVkKHIpJiZDLnN0cmluZyhyLnVyaSl9ZS5pcz1ufSkoZGF8fChkYT17fSkpO3ZhciBtYTsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdChpLHIpe3JldHVybnt1cmk6aSx2ZXJzaW9uOnJ9fWUuY3JlYXRlPXQ7ZnVuY3Rpb24gbihpKXtsZXQgcj1pO3JldHVybiBDLmRlZmluZWQocikmJkMuc3RyaW5nKHIudXJpKSYmQy5pbnRlZ2VyKHIudmVyc2lvbil9ZS5pcz1ufSkobWF8fChtYT17fSkpO3ZhciBBaTsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdChpLHIpe3JldHVybnt1cmk6aSx2ZXJzaW9uOnJ9fWUuY3JlYXRlPXQ7ZnVuY3Rpb24gbihpKXtsZXQgcj1pO3JldHVybiBDLmRlZmluZWQocikmJkMuc3RyaW5nKHIudXJpKSYmKHIudmVyc2lvbj09PW51bGx8fEMuaW50ZWdlcihyLnZlcnNpb24pKX1lLmlzPW59KShBaXx8KEFpPXt9KSk7dmFyIGZhOyhmdW5jdGlvbihlKXtmdW5jdGlvbiB0KGkscixzLGEpe3JldHVybnt1cmk6aSxsYW5ndWFnZUlkOnIsdmVyc2lvbjpzLHRleHQ6YX19ZS5jcmVhdGU9dDtmdW5jdGlvbiBuKGkpe2xldCByPWk7cmV0dXJuIEMuZGVmaW5lZChyKSYmQy5zdHJpbmcoci51cmkpJiZDLnN0cmluZyhyLmxhbmd1YWdlSWQpJiZDLmludGVnZXIoci52ZXJzaW9uKSYmQy5zdHJpbmcoci50ZXh0KX1lLmlzPW59KShmYXx8KGZhPXt9KSk7dmFyIFBlOyhmdW5jdGlvbihlKXtlLlBsYWluVGV4dD0icGxhaW50ZXh0IixlLk1hcmtkb3duPSJtYXJrZG93biI7ZnVuY3Rpb24gdChuKXtjb25zdCBpPW47cmV0dXJuIGk9PT1lLlBsYWluVGV4dHx8aT09PWUuTWFya2Rvd259ZS5pcz10fSkoUGV8fChQZT17fSkpO3ZhciBOdDsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdChuKXtjb25zdCBpPW47cmV0dXJuIEMub2JqZWN0TGl0ZXJhbChuKSYmUGUuaXMoaS5raW5kKSYmQy5zdHJpbmcoaS52YWx1ZSl9ZS5pcz10fSkoTnR8fChOdD17fSkpO3ZhciBtZTsoZnVuY3Rpb24oZSl7ZS5UZXh0PTEsZS5NZXRob2Q9MixlLkZ1bmN0aW9uPTMsZS5Db25zdHJ1Y3Rvcj00LGUuRmllbGQ9NSxlLlZhcmlhYmxlPTYsZS5DbGFzcz03LGUuSW50ZXJmYWNlPTgsZS5Nb2R1bGU9OSxlLlByb3BlcnR5PTEwLGUuVW5pdD0xMSxlLlZhbHVlPTEyLGUuRW51bT0xMyxlLktleXdvcmQ9MTQsZS5TbmlwcGV0PTE1LGUuQ29sb3I9MTYsZS5GaWxlPTE3LGUuUmVmZXJlbmNlPTE4LGUuRm9sZGVyPTE5LGUuRW51bU1lbWJlcj0yMCxlLkNvbnN0YW50PTIxLGUuU3RydWN0PTIyLGUuRXZlbnQ9MjMsZS5PcGVyYXRvcj0yNCxlLlR5cGVQYXJhbWV0ZXI9MjV9KShtZXx8KG1lPXt9KSk7dmFyIFNlOyhmdW5jdGlvbihlKXtlLlBsYWluVGV4dD0xLGUuU25pcHBldD0yfSkoU2V8fChTZT17fSkpO3ZhciBwYTsoZnVuY3Rpb24oZSl7ZS5EZXByZWNhdGVkPTF9KShwYXx8KHBhPXt9KSk7dmFyIGdhOyhmdW5jdGlvbihlKXtmdW5jdGlvbiB0KGkscixzKXtyZXR1cm57bmV3VGV4dDppLGluc2VydDpyLHJlcGxhY2U6c319ZS5jcmVhdGU9dDtmdW5jdGlvbiBuKGkpe2NvbnN0IHI9aTtyZXR1cm4gciYmQy5zdHJpbmcoci5uZXdUZXh0KSYmJC5pcyhyLmluc2VydCkmJiQuaXMoci5yZXBsYWNlKX1lLmlzPW59KShnYXx8KGdhPXt9KSk7dmFyIGJhOyhmdW5jdGlvbihlKXtlLmFzSXM9MSxlLmFkanVzdEluZGVudGF0aW9uPTJ9KShiYXx8KGJhPXt9KSk7dmFyIF9hOyhmdW5jdGlvbihlKXtmdW5jdGlvbiB0KG4pe2NvbnN0IGk9bjtyZXR1cm4gaSYmKEMuc3RyaW5nKGkuZGV0YWlsKXx8aS5kZXRhaWw9PT12b2lkIDApJiYoQy5zdHJpbmcoaS5kZXNjcmlwdGlvbil8fGkuZGVzY3JpcHRpb249PT12b2lkIDApfWUuaXM9dH0pKF9hfHwoX2E9e30pKTt2YXIgd2E7KGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQobil7cmV0dXJue2xhYmVsOm59fWUuY3JlYXRlPXR9KSh3YXx8KHdhPXt9KSk7dmFyIHZhOyhmdW5jdGlvbihlKXtmdW5jdGlvbiB0KG4saSl7cmV0dXJue2l0ZW1zOm58fFtdLGlzSW5jb21wbGV0ZTohIWl9fWUuY3JlYXRlPXR9KSh2YXx8KHZhPXt9KSk7dmFyIGRuOyhmdW5jdGlvbihlKXtmdW5jdGlvbiB0KGkpe3JldHVybiBpLnJlcGxhY2UoL1tcXGAqX3t9W1xdKCkjK1wtLiFdL2csIlxcJCYiKX1lLmZyb21QbGFpblRleHQ9dDtmdW5jdGlvbiBuKGkpe2NvbnN0IHI9aTtyZXR1cm4gQy5zdHJpbmcocil8fEMub2JqZWN0TGl0ZXJhbChyKSYmQy5zdHJpbmcoci5sYW5ndWFnZSkmJkMuc3RyaW5nKHIudmFsdWUpfWUuaXM9bn0pKGRufHwoZG49e30pKTt2YXIgeWE7KGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQobil7bGV0IGk9bjtyZXR1cm4hIWkmJkMub2JqZWN0TGl0ZXJhbChpKSYmKE50LmlzKGkuY29udGVudHMpfHxkbi5pcyhpLmNvbnRlbnRzKXx8Qy50eXBlZEFycmF5KGkuY29udGVudHMsZG4uaXMpKSYmKG4ucmFuZ2U9PT12b2lkIDB8fCQuaXMobi5yYW5nZSkpfWUuaXM9dH0pKHlhfHwoeWE9e30pKTt2YXIgeGE7KGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQobixpKXtyZXR1cm4gaT97bGFiZWw6bixkb2N1bWVudGF0aW9uOml9OntsYWJlbDpufX1lLmNyZWF0ZT10fSkoeGF8fCh4YT17fSkpO3ZhciBUYTsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdChuLGksLi4ucil7bGV0IHM9e2xhYmVsOm59O3JldHVybiBDLmRlZmluZWQoaSkmJihzLmRvY3VtZW50YXRpb249aSksQy5kZWZpbmVkKHIpP3MucGFyYW1ldGVycz1yOnMucGFyYW1ldGVycz1bXSxzfWUuY3JlYXRlPXR9KShUYXx8KFRhPXt9KSk7dmFyIG1uOyhmdW5jdGlvbihlKXtlLlRleHQ9MSxlLlJlYWQ9MixlLldyaXRlPTN9KShtbnx8KG1uPXt9KSk7dmFyIGthOyhmdW5jdGlvbihlKXtmdW5jdGlvbiB0KG4saSl7bGV0IHI9e3JhbmdlOm59O3JldHVybiBDLm51bWJlcihpKSYmKHIua2luZD1pKSxyfWUuY3JlYXRlPXR9KShrYXx8KGthPXt9KSk7dmFyIFNpOyhmdW5jdGlvbihlKXtlLkZpbGU9MSxlLk1vZHVsZT0yLGUuTmFtZXNwYWNlPTMsZS5QYWNrYWdlPTQsZS5DbGFzcz01LGUuTWV0aG9kPTYsZS5Qcm9wZXJ0eT03LGUuRmllbGQ9OCxlLkNvbnN0cnVjdG9yPTksZS5FbnVtPTEwLGUuSW50ZXJmYWNlPTExLGUuRnVuY3Rpb249MTIsZS5WYXJpYWJsZT0xMyxlLkNvbnN0YW50PTE0LGUuU3RyaW5nPTE1LGUuTnVtYmVyPTE2LGUuQm9vbGVhbj0xNyxlLkFycmF5PTE4LGUuT2JqZWN0PTE5LGUuS2V5PTIwLGUuTnVsbD0yMSxlLkVudW1NZW1iZXI9MjIsZS5TdHJ1Y3Q9MjMsZS5FdmVudD0yNCxlLk9wZXJhdG9yPTI1LGUuVHlwZVBhcmFtZXRlcj0yNn0pKFNpfHwoU2k9e30pKTt2YXIgQWE7KGZ1bmN0aW9uKGUpe2UuRGVwcmVjYXRlZD0xfSkoQWF8fChBYT17fSkpO3ZhciBMaTsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdChuLGkscixzLGEpe2xldCBsPXtuYW1lOm4sa2luZDppLGxvY2F0aW9uOnt1cmk6cyxyYW5nZTpyfX07cmV0dXJuIGEmJihsLmNvbnRhaW5lck5hbWU9YSksbH1lLmNyZWF0ZT10fSkoTGl8fChMaT17fSkpO3ZhciBTYTsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdChuLGkscixzKXtyZXR1cm4gcyE9PXZvaWQgMD97bmFtZTpuLGtpbmQ6aSxsb2NhdGlvbjp7dXJpOnIscmFuZ2U6c319OntuYW1lOm4sa2luZDppLGxvY2F0aW9uOnt1cmk6cn19fWUuY3JlYXRlPXR9KShTYXx8KFNhPXt9KSk7dmFyIENpOyhmdW5jdGlvbihlKXtmdW5jdGlvbiB0KGkscixzLGEsbCxvKXtsZXQgdT17bmFtZTppLGRldGFpbDpyLGtpbmQ6cyxyYW5nZTphLHNlbGVjdGlvblJhbmdlOmx9O3JldHVybiBvIT09dm9pZCAwJiYodS5jaGlsZHJlbj1vKSx1fWUuY3JlYXRlPXQ7ZnVuY3Rpb24gbihpKXtsZXQgcj1pO3JldHVybiByJiZDLnN0cmluZyhyLm5hbWUpJiZDLm51bWJlcihyLmtpbmQpJiYkLmlzKHIucmFuZ2UpJiYkLmlzKHIuc2VsZWN0aW9uUmFuZ2UpJiYoci5kZXRhaWw9PT12b2lkIDB8fEMuc3RyaW5nKHIuZGV0YWlsKSkmJihyLmRlcHJlY2F0ZWQ9PT12b2lkIDB8fEMuYm9vbGVhbihyLmRlcHJlY2F0ZWQpKSYmKHIuY2hpbGRyZW49PT12b2lkIDB8fEFycmF5LmlzQXJyYXkoci5jaGlsZHJlbikpJiYoci50YWdzPT09dm9pZCAwfHxBcnJheS5pc0FycmF5KHIudGFncykpfWUuaXM9bn0pKENpfHwoQ2k9e30pKTt2YXIgTGE7KGZ1bmN0aW9uKGUpe2UuRW1wdHk9IiIsZS5RdWlja0ZpeD0icXVpY2tmaXgiLGUuUmVmYWN0b3I9InJlZmFjdG9yIixlLlJlZmFjdG9yRXh0cmFjdD0icmVmYWN0b3IuZXh0cmFjdCIsZS5SZWZhY3RvcklubGluZT0icmVmYWN0b3IuaW5saW5lIixlLlJlZmFjdG9yUmV3cml0ZT0icmVmYWN0b3IucmV3cml0ZSIsZS5Tb3VyY2U9InNvdXJjZSIsZS5Tb3VyY2VPcmdhbml6ZUltcG9ydHM9InNvdXJjZS5vcmdhbml6ZUltcG9ydHMiLGUuU291cmNlRml4QWxsPSJzb3VyY2UuZml4QWxsIn0pKExhfHwoTGE9e30pKTt2YXIgZm47KGZ1bmN0aW9uKGUpe2UuSW52b2tlZD0xLGUuQXV0b21hdGljPTJ9KShmbnx8KGZuPXt9KSk7dmFyIENhOyhmdW5jdGlvbihlKXtmdW5jdGlvbiB0KGkscixzKXtsZXQgYT17ZGlhZ25vc3RpY3M6aX07cmV0dXJuIHIhPW51bGwmJihhLm9ubHk9cikscyE9bnVsbCYmKGEudHJpZ2dlcktpbmQ9cyksYX1lLmNyZWF0ZT10O2Z1bmN0aW9uIG4oaSl7bGV0IHI9aTtyZXR1cm4gQy5kZWZpbmVkKHIpJiZDLnR5cGVkQXJyYXkoci5kaWFnbm9zdGljcyxobi5pcykmJihyLm9ubHk9PT12b2lkIDB8fEMudHlwZWRBcnJheShyLm9ubHksQy5zdHJpbmcpKSYmKHIudHJpZ2dlcktpbmQ9PT12b2lkIDB8fHIudHJpZ2dlcktpbmQ9PT1mbi5JbnZva2VkfHxyLnRyaWdnZXJLaW5kPT09Zm4uQXV0b21hdGljKX1lLmlzPW59KShDYXx8KENhPXt9KSk7dmFyIEVhOyhmdW5jdGlvbihlKXtmdW5jdGlvbiB0KGkscixzKXtsZXQgYT17dGl0bGU6aX0sbD0hMDtyZXR1cm4gdHlwZW9mIHI9PSJzdHJpbmciPyhsPSExLGEua2luZD1yKTpmdC5pcyhyKT9hLmNvbW1hbmQ9cjphLmVkaXQ9cixsJiZzIT09dm9pZCAwJiYoYS5raW5kPXMpLGF9ZS5jcmVhdGU9dDtmdW5jdGlvbiBuKGkpe2xldCByPWk7cmV0dXJuIHImJkMuc3RyaW5nKHIudGl0bGUpJiYoci5kaWFnbm9zdGljcz09PXZvaWQgMHx8Qy50eXBlZEFycmF5KHIuZGlhZ25vc3RpY3MsaG4uaXMpKSYmKHIua2luZD09PXZvaWQgMHx8Qy5zdHJpbmcoci5raW5kKSkmJihyLmVkaXQhPT12b2lkIDB8fHIuY29tbWFuZCE9PXZvaWQgMCkmJihyLmNvbW1hbmQ9PT12b2lkIDB8fGZ0LmlzKHIuY29tbWFuZCkpJiYoci5pc1ByZWZlcnJlZD09PXZvaWQgMHx8Qy5ib29sZWFuKHIuaXNQcmVmZXJyZWQpKSYmKHIuZWRpdD09PXZvaWQgMHx8a2kuaXMoci5lZGl0KSl9ZS5pcz1ufSkoRWF8fChFYT17fSkpO3ZhciBSYTsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdChpLHIpe2xldCBzPXtyYW5nZTppfTtyZXR1cm4gQy5kZWZpbmVkKHIpJiYocy5kYXRhPXIpLHN9ZS5jcmVhdGU9dDtmdW5jdGlvbiBuKGkpe2xldCByPWk7cmV0dXJuIEMuZGVmaW5lZChyKSYmJC5pcyhyLnJhbmdlKSYmKEMudW5kZWZpbmVkKHIuY29tbWFuZCl8fGZ0LmlzKHIuY29tbWFuZCkpfWUuaXM9bn0pKFJhfHwoUmE9e30pKTt2YXIgTWE7KGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoaSxyKXtyZXR1cm57dGFiU2l6ZTppLGluc2VydFNwYWNlczpyfX1lLmNyZWF0ZT10O2Z1bmN0aW9uIG4oaSl7bGV0IHI9aTtyZXR1cm4gQy5kZWZpbmVkKHIpJiZDLnVpbnRlZ2VyKHIudGFiU2l6ZSkmJkMuYm9vbGVhbihyLmluc2VydFNwYWNlcyl9ZS5pcz1ufSkoTWF8fChNYT17fSkpO3ZhciBOYTsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdChpLHIscyl7cmV0dXJue3JhbmdlOmksdGFyZ2V0OnIsZGF0YTpzfX1lLmNyZWF0ZT10O2Z1bmN0aW9uIG4oaSl7bGV0IHI9aTtyZXR1cm4gQy5kZWZpbmVkKHIpJiYkLmlzKHIucmFuZ2UpJiYoQy51bmRlZmluZWQoci50YXJnZXQpfHxDLnN0cmluZyhyLnRhcmdldCkpfWUuaXM9bn0pKE5hfHwoTmE9e30pKTt2YXIgcG47KGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoaSxyKXtyZXR1cm57cmFuZ2U6aSxwYXJlbnQ6cn19ZS5jcmVhdGU9dDtmdW5jdGlvbiBuKGkpe2xldCByPWk7cmV0dXJuIEMub2JqZWN0TGl0ZXJhbChyKSYmJC5pcyhyLnJhbmdlKSYmKHIucGFyZW50PT09dm9pZCAwfHxlLmlzKHIucGFyZW50KSl9ZS5pcz1ufSkocG58fChwbj17fSkpO3ZhciBEYTsoZnVuY3Rpb24oZSl7ZS5uYW1lc3BhY2U9Im5hbWVzcGFjZSIsZS50eXBlPSJ0eXBlIixlLmNsYXNzPSJjbGFzcyIsZS5lbnVtPSJlbnVtIixlLmludGVyZmFjZT0iaW50ZXJmYWNlIixlLnN0cnVjdD0ic3RydWN0IixlLnR5cGVQYXJhbWV0ZXI9InR5cGVQYXJhbWV0ZXIiLGUucGFyYW1ldGVyPSJwYXJhbWV0ZXIiLGUudmFyaWFibGU9InZhcmlhYmxlIixlLnByb3BlcnR5PSJwcm9wZXJ0eSIsZS5lbnVtTWVtYmVyPSJlbnVtTWVtYmVyIixlLmV2ZW50PSJldmVudCIsZS5mdW5jdGlvbj0iZnVuY3Rpb24iLGUubWV0aG9kPSJtZXRob2QiLGUubWFjcm89Im1hY3JvIixlLmtleXdvcmQ9ImtleXdvcmQiLGUubW9kaWZpZXI9Im1vZGlmaWVyIixlLmNvbW1lbnQ9ImNvbW1lbnQiLGUuc3RyaW5nPSJzdHJpbmciLGUubnVtYmVyPSJudW1iZXIiLGUucmVnZXhwPSJyZWdleHAiLGUub3BlcmF0b3I9Im9wZXJhdG9yIixlLmRlY29yYXRvcj0iZGVjb3JhdG9yIn0pKERhfHwoRGE9e30pKTt2YXIgSWE7KGZ1bmN0aW9uKGUpe2UuZGVjbGFyYXRpb249ImRlY2xhcmF0aW9uIixlLmRlZmluaXRpb249ImRlZmluaXRpb24iLGUucmVhZG9ubHk9InJlYWRvbmx5IixlLnN0YXRpYz0ic3RhdGljIixlLmRlcHJlY2F0ZWQ9ImRlcHJlY2F0ZWQiLGUuYWJzdHJhY3Q9ImFic3RyYWN0IixlLmFzeW5jPSJhc3luYyIsZS5tb2RpZmljYXRpb249Im1vZGlmaWNhdGlvbiIsZS5kb2N1bWVudGF0aW9uPSJkb2N1bWVudGF0aW9uIixlLmRlZmF1bHRMaWJyYXJ5PSJkZWZhdWx0TGlicmFyeSJ9KShJYXx8KElhPXt9KSk7dmFyIHphOyhmdW5jdGlvbihlKXtmdW5jdGlvbiB0KG4pe2NvbnN0IGk9bjtyZXR1cm4gQy5vYmplY3RMaXRlcmFsKGkpJiYoaS5yZXN1bHRJZD09PXZvaWQgMHx8dHlwZW9mIGkucmVzdWx0SWQ9PSJzdHJpbmciKSYmQXJyYXkuaXNBcnJheShpLmRhdGEpJiYoaS5kYXRhLmxlbmd0aD09PTB8fHR5cGVvZiBpLmRhdGFbMF09PSJudW1iZXIiKX1lLmlzPXR9KSh6YXx8KHphPXt9KSk7dmFyIFVhOyhmdW5jdGlvbihlKXtmdW5jdGlvbiB0KGkscil7cmV0dXJue3JhbmdlOmksdGV4dDpyfX1lLmNyZWF0ZT10O2Z1bmN0aW9uIG4oaSl7Y29uc3Qgcj1pO3JldHVybiByIT1udWxsJiYkLmlzKHIucmFuZ2UpJiZDLnN0cmluZyhyLnRleHQpfWUuaXM9bn0pKFVhfHwoVWE9e30pKTt2YXIgSGE7KGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoaSxyLHMpe3JldHVybntyYW5nZTppLHZhcmlhYmxlTmFtZTpyLGNhc2VTZW5zaXRpdmVMb29rdXA6c319ZS5jcmVhdGU9dDtmdW5jdGlvbiBuKGkpe2NvbnN0IHI9aTtyZXR1cm4gciE9bnVsbCYmJC5pcyhyLnJhbmdlKSYmQy5ib29sZWFuKHIuY2FzZVNlbnNpdGl2ZUxvb2t1cCkmJihDLnN0cmluZyhyLnZhcmlhYmxlTmFtZSl8fHIudmFyaWFibGVOYW1lPT09dm9pZCAwKX1lLmlzPW59KShIYXx8KEhhPXt9KSk7dmFyIFdhOyhmdW5jdGlvbihlKXtmdW5jdGlvbiB0KGkscil7cmV0dXJue3JhbmdlOmksZXhwcmVzc2lvbjpyfX1lLmNyZWF0ZT10O2Z1bmN0aW9uIG4oaSl7Y29uc3Qgcj1pO3JldHVybiByIT1udWxsJiYkLmlzKHIucmFuZ2UpJiYoQy5zdHJpbmcoci5leHByZXNzaW9uKXx8ci5leHByZXNzaW9uPT09dm9pZCAwKX1lLmlzPW59KShXYXx8KFdhPXt9KSk7dmFyIEZhOyhmdW5jdGlvbihlKXtmdW5jdGlvbiB0KGkscil7cmV0dXJue2ZyYW1lSWQ6aSxzdG9wcGVkTG9jYXRpb246cn19ZS5jcmVhdGU9dDtmdW5jdGlvbiBuKGkpe2NvbnN0IHI9aTtyZXR1cm4gQy5kZWZpbmVkKHIpJiYkLmlzKGkuc3RvcHBlZExvY2F0aW9uKX1lLmlzPW59KShGYXx8KEZhPXt9KSk7dmFyIEVpOyhmdW5jdGlvbihlKXtlLlR5cGU9MSxlLlBhcmFtZXRlcj0yO2Z1bmN0aW9uIHQobil7cmV0dXJuIG49PT0xfHxuPT09Mn1lLmlzPXR9KShFaXx8KEVpPXt9KSk7dmFyIFJpOyhmdW5jdGlvbihlKXtmdW5jdGlvbiB0KGkpe3JldHVybnt2YWx1ZTppfX1lLmNyZWF0ZT10O2Z1bmN0aW9uIG4oaSl7Y29uc3Qgcj1pO3JldHVybiBDLm9iamVjdExpdGVyYWwocikmJihyLnRvb2x0aXA9PT12b2lkIDB8fEMuc3RyaW5nKHIudG9vbHRpcCl8fE50LmlzKHIudG9vbHRpcCkpJiYoci5sb2NhdGlvbj09PXZvaWQgMHx8dW4uaXMoci5sb2NhdGlvbikpJiYoci5jb21tYW5kPT09dm9pZCAwfHxmdC5pcyhyLmNvbW1hbmQpKX1lLmlzPW59KShSaXx8KFJpPXt9KSk7dmFyIFBhOyhmdW5jdGlvbihlKXtmdW5jdGlvbiB0KGkscixzKXtjb25zdCBhPXtwb3NpdGlvbjppLGxhYmVsOnJ9O3JldHVybiBzIT09dm9pZCAwJiYoYS5raW5kPXMpLGF9ZS5jcmVhdGU9dDtmdW5jdGlvbiBuKGkpe2NvbnN0IHI9aTtyZXR1cm4gQy5vYmplY3RMaXRlcmFsKHIpJiZyZS5pcyhyLnBvc2l0aW9uKSYmKEMuc3RyaW5nKHIubGFiZWwpfHxDLnR5cGVkQXJyYXkoci5sYWJlbCxSaS5pcykpJiYoci5raW5kPT09dm9pZCAwfHxFaS5pcyhyLmtpbmQpKSYmci50ZXh0RWRpdHM9PT12b2lkIDB8fEMudHlwZWRBcnJheShyLnRleHRFZGl0cyxhZS5pcykmJihyLnRvb2x0aXA9PT12b2lkIDB8fEMuc3RyaW5nKHIudG9vbHRpcCl8fE50LmlzKHIudG9vbHRpcCkpJiYoci5wYWRkaW5nTGVmdD09PXZvaWQgMHx8Qy5ib29sZWFuKHIucGFkZGluZ0xlZnQpKSYmKHIucGFkZGluZ1JpZ2h0PT09dm9pZCAwfHxDLmJvb2xlYW4oci5wYWRkaW5nUmlnaHQpKX1lLmlzPW59KShQYXx8KFBhPXt9KSk7dmFyIEJhOyhmdW5jdGlvbihlKXtmdW5jdGlvbiB0KG4pe3JldHVybntraW5kOiJzbmlwcGV0Iix2YWx1ZTpufX1lLmNyZWF0ZVNuaXBwZXQ9dH0pKEJhfHwoQmE9e30pKTt2YXIgcWE7KGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQobixpLHIscyl7cmV0dXJue2luc2VydFRleHQ6bixmaWx0ZXJUZXh0OmkscmFuZ2U6cixjb21tYW5kOnN9fWUuY3JlYXRlPXR9KShxYXx8KHFhPXt9KSk7dmFyIE9hOyhmdW5jdGlvbihlKXtmdW5jdGlvbiB0KG4pe3JldHVybntpdGVtczpufX1lLmNyZWF0ZT10fSkoT2F8fChPYT17fSkpO3ZhciBWYTsoZnVuY3Rpb24oZSl7ZS5JbnZva2VkPTAsZS5BdXRvbWF0aWM9MX0pKFZhfHwoVmE9e30pKTt2YXIgamE7KGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQobixpKXtyZXR1cm57cmFuZ2U6bix0ZXh0Oml9fWUuY3JlYXRlPXR9KShqYXx8KGphPXt9KSk7dmFyICRhOyhmdW5jdGlvbihlKXtmdW5jdGlvbiB0KG4saSl7cmV0dXJue3RyaWdnZXJLaW5kOm4sc2VsZWN0ZWRDb21wbGV0aW9uSW5mbzppfX1lLmNyZWF0ZT10fSkoJGF8fCgkYT17fSkpO3ZhciBHYTsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdChuKXtjb25zdCBpPW47cmV0dXJuIEMub2JqZWN0TGl0ZXJhbChpKSYmZ2kuaXMoaS51cmkpJiZDLnN0cmluZyhpLm5hbWUpfWUuaXM9dH0pKEdhfHwoR2E9e30pKTt2YXIgWGE7KGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQocyxhLGwsbyl7cmV0dXJuIG5ldyBLdShzLGEsbCxvKX1lLmNyZWF0ZT10O2Z1bmN0aW9uIG4ocyl7bGV0IGE9cztyZXR1cm4hIShDLmRlZmluZWQoYSkmJkMuc3RyaW5nKGEudXJpKSYmKEMudW5kZWZpbmVkKGEubGFuZ3VhZ2VJZCl8fEMuc3RyaW5nKGEubGFuZ3VhZ2VJZCkpJiZDLnVpbnRlZ2VyKGEubGluZUNvdW50KSYmQy5mdW5jKGEuZ2V0VGV4dCkmJkMuZnVuYyhhLnBvc2l0aW9uQXQpJiZDLmZ1bmMoYS5vZmZzZXRBdCkpfWUuaXM9bjtmdW5jdGlvbiBpKHMsYSl7bGV0IGw9cy5nZXRUZXh0KCksbz1yKGEsKGMsZCk9PntsZXQgbT1jLnJhbmdlLnN0YXJ0LmxpbmUtZC5yYW5nZS5zdGFydC5saW5lO3JldHVybiBtPT09MD9jLnJhbmdlLnN0YXJ0LmNoYXJhY3Rlci1kLnJhbmdlLnN0YXJ0LmNoYXJhY3RlcjptfSksdT1sLmxlbmd0aDtmb3IobGV0IGM9by5sZW5ndGgtMTtjPj0wO2MtLSl7bGV0IGQ9b1tjXSxtPXMub2Zmc2V0QXQoZC5yYW5nZS5zdGFydCksZj1zLm9mZnNldEF0KGQucmFuZ2UuZW5kKTtpZihmPD11KWw9bC5zdWJzdHJpbmcoMCxtKStkLm5ld1RleHQrbC5zdWJzdHJpbmcoZixsLmxlbmd0aCk7ZWxzZSB0aHJvdyBuZXcgRXJyb3IoIk92ZXJsYXBwaW5nIGVkaXQiKTt1PW19cmV0dXJuIGx9ZS5hcHBseUVkaXRzPWk7ZnVuY3Rpb24gcihzLGEpe2lmKHMubGVuZ3RoPD0xKXJldHVybiBzO2NvbnN0IGw9cy5sZW5ndGgvMnwwLG89cy5zbGljZSgwLGwpLHU9cy5zbGljZShsKTtyKG8sYSkscih1LGEpO2xldCBjPTAsZD0wLG09MDtmb3IoO2M8by5sZW5ndGgmJmQ8dS5sZW5ndGg7KWEob1tjXSx1W2RdKTw9MD9zW20rK109b1tjKytdOnNbbSsrXT11W2QrK107Zm9yKDtjPG8ubGVuZ3RoOylzW20rK109b1tjKytdO2Zvcig7ZDx1Lmxlbmd0aDspc1ttKytdPXVbZCsrXTtyZXR1cm4gc319KShYYXx8KFhhPXt9KSk7dmFyIEt1PWNsYXNze2NvbnN0cnVjdG9yKGUsdCxuLGkpe3RoaXMuX3VyaT1lLHRoaXMuX2xhbmd1YWdlSWQ9dCx0aGlzLl92ZXJzaW9uPW4sdGhpcy5fY29udGVudD1pLHRoaXMuX2xpbmVPZmZzZXRzPXZvaWQgMH1nZXQgdXJpKCl7cmV0dXJuIHRoaXMuX3VyaX1nZXQgbGFuZ3VhZ2VJZCgpe3JldHVybiB0aGlzLl9sYW5ndWFnZUlkfWdldCB2ZXJzaW9uKCl7cmV0dXJuIHRoaXMuX3ZlcnNpb259Z2V0VGV4dChlKXtpZihlKXtsZXQgdD10aGlzLm9mZnNldEF0KGUuc3RhcnQpLG49dGhpcy5vZmZzZXRBdChlLmVuZCk7cmV0dXJuIHRoaXMuX2NvbnRlbnQuc3Vic3RyaW5nKHQsbil9cmV0dXJuIHRoaXMuX2NvbnRlbnR9dXBkYXRlKGUsdCl7dGhpcy5fY29udGVudD1lLnRleHQsdGhpcy5fdmVyc2lvbj10LHRoaXMuX2xpbmVPZmZzZXRzPXZvaWQgMH1nZXRMaW5lT2Zmc2V0cygpe2lmKHRoaXMuX2xpbmVPZmZzZXRzPT09dm9pZCAwKXtsZXQgZT1bXSx0PXRoaXMuX2NvbnRlbnQsbj0hMDtmb3IobGV0IGk9MDtpPHQubGVuZ3RoO2krKyl7biYmKGUucHVzaChpKSxuPSExKTtsZXQgcj10LmNoYXJBdChpKTtuPXI9PT0iXHIifHxyPT09YApgLHI9PT0iXHIiJiZpKzE8dC5sZW5ndGgmJnQuY2hhckF0KGkrMSk9PT1gCmAmJmkrK31uJiZ0Lmxlbmd0aD4wJiZlLnB1c2godC5sZW5ndGgpLHRoaXMuX2xpbmVPZmZzZXRzPWV9cmV0dXJuIHRoaXMuX2xpbmVPZmZzZXRzfXBvc2l0aW9uQXQoZSl7ZT1NYXRoLm1heChNYXRoLm1pbihlLHRoaXMuX2NvbnRlbnQubGVuZ3RoKSwwKTtsZXQgdD10aGlzLmdldExpbmVPZmZzZXRzKCksbj0wLGk9dC5sZW5ndGg7aWYoaT09PTApcmV0dXJuIHJlLmNyZWF0ZSgwLGUpO2Zvcig7bjxpOyl7bGV0IHM9TWF0aC5mbG9vcigobitpKS8yKTt0W3NdPmU/aT1zOm49cysxfWxldCByPW4tMTtyZXR1cm4gcmUuY3JlYXRlKHIsZS10W3JdKX1vZmZzZXRBdChlKXtsZXQgdD10aGlzLmdldExpbmVPZmZzZXRzKCk7aWYoZS5saW5lPj10Lmxlbmd0aClyZXR1cm4gdGhpcy5fY29udGVudC5sZW5ndGg7aWYoZS5saW5lPDApcmV0dXJuIDA7bGV0IG49dFtlLmxpbmVdLGk9ZS5saW5lKzE8dC5sZW5ndGg/dFtlLmxpbmUrMV06dGhpcy5fY29udGVudC5sZW5ndGg7cmV0dXJuIE1hdGgubWF4KE1hdGgubWluKG4rZS5jaGFyYWN0ZXIsaSksbil9Z2V0IGxpbmVDb3VudCgpe3JldHVybiB0aGlzLmdldExpbmVPZmZzZXRzKCkubGVuZ3RofX0sQzsoZnVuY3Rpb24oZSl7Y29uc3QgdD1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO2Z1bmN0aW9uIG4oZil7cmV0dXJuIHR5cGVvZiBmPCJ1In1lLmRlZmluZWQ9bjtmdW5jdGlvbiBpKGYpe3JldHVybiB0eXBlb2YgZj4idSJ9ZS51bmRlZmluZWQ9aTtmdW5jdGlvbiByKGYpe3JldHVybiBmPT09ITB8fGY9PT0hMX1lLmJvb2xlYW49cjtmdW5jdGlvbiBzKGYpe3JldHVybiB0LmNhbGwoZik9PT0iW29iamVjdCBTdHJpbmddIn1lLnN0cmluZz1zO2Z1bmN0aW9uIGEoZil7cmV0dXJuIHQuY2FsbChmKT09PSJbb2JqZWN0IE51bWJlcl0ifWUubnVtYmVyPWE7ZnVuY3Rpb24gbChmLF8sZyl7cmV0dXJuIHQuY2FsbChmKT09PSJbb2JqZWN0IE51bWJlcl0iJiZfPD1mJiZmPD1nfWUubnVtYmVyUmFuZ2U9bDtmdW5jdGlvbiBvKGYpe3JldHVybiB0LmNhbGwoZik9PT0iW29iamVjdCBOdW1iZXJdIiYmLTIxNDc0ODM2NDg8PWYmJmY8PTIxNDc0ODM2NDd9ZS5pbnRlZ2VyPW87ZnVuY3Rpb24gdShmKXtyZXR1cm4gdC5jYWxsKGYpPT09IltvYmplY3QgTnVtYmVyXSImJjA8PWYmJmY8PTIxNDc0ODM2NDd9ZS51aW50ZWdlcj11O2Z1bmN0aW9uIGMoZil7cmV0dXJuIHQuY2FsbChmKT09PSJbb2JqZWN0IEZ1bmN0aW9uXSJ9ZS5mdW5jPWM7ZnVuY3Rpb24gZChmKXtyZXR1cm4gZiE9PW51bGwmJnR5cGVvZiBmPT0ib2JqZWN0In1lLm9iamVjdExpdGVyYWw9ZDtmdW5jdGlvbiBtKGYsXyl7cmV0dXJuIEFycmF5LmlzQXJyYXkoZikmJmYuZXZlcnkoXyl9ZS50eXBlZEFycmF5PW19KShDfHwoQz17fSkpO3ZhciBKYT1jbGFzcyBGaXtjb25zdHJ1Y3Rvcih0LG4saSxyKXt0aGlzLl91cmk9dCx0aGlzLl9sYW5ndWFnZUlkPW4sdGhpcy5fdmVyc2lvbj1pLHRoaXMuX2NvbnRlbnQ9cix0aGlzLl9saW5lT2Zmc2V0cz12b2lkIDB9Z2V0IHVyaSgpe3JldHVybiB0aGlzLl91cml9Z2V0IGxhbmd1YWdlSWQoKXtyZXR1cm4gdGhpcy5fbGFuZ3VhZ2VJZH1nZXQgdmVyc2lvbigpe3JldHVybiB0aGlzLl92ZXJzaW9ufWdldFRleHQodCl7aWYodCl7Y29uc3Qgbj10aGlzLm9mZnNldEF0KHQuc3RhcnQpLGk9dGhpcy5vZmZzZXRBdCh0LmVuZCk7cmV0dXJuIHRoaXMuX2NvbnRlbnQuc3Vic3RyaW5nKG4saSl9cmV0dXJuIHRoaXMuX2NvbnRlbnR9dXBkYXRlKHQsbil7Zm9yKGxldCBpIG9mIHQpaWYoRmkuaXNJbmNyZW1lbnRhbChpKSl7Y29uc3Qgcj1RYShpLnJhbmdlKSxzPXRoaXMub2Zmc2V0QXQoci5zdGFydCksYT10aGlzLm9mZnNldEF0KHIuZW5kKTt0aGlzLl9jb250ZW50PXRoaXMuX2NvbnRlbnQuc3Vic3RyaW5nKDAscykraS50ZXh0K3RoaXMuX2NvbnRlbnQuc3Vic3RyaW5nKGEsdGhpcy5fY29udGVudC5sZW5ndGgpO2NvbnN0IGw9TWF0aC5tYXgoci5zdGFydC5saW5lLDApLG89TWF0aC5tYXgoci5lbmQubGluZSwwKTtsZXQgdT10aGlzLl9saW5lT2Zmc2V0cztjb25zdCBjPVlhKGkudGV4dCwhMSxzKTtpZihvLWw9PT1jLmxlbmd0aClmb3IobGV0IG09MCxmPWMubGVuZ3RoO208ZjttKyspdVttK2wrMV09Y1ttXTtlbHNlIGMubGVuZ3RoPDFlND91LnNwbGljZShsKzEsby1sLC4uLmMpOnRoaXMuX2xpbmVPZmZzZXRzPXU9dS5zbGljZSgwLGwrMSkuY29uY2F0KGMsdS5zbGljZShvKzEpKTtjb25zdCBkPWkudGV4dC5sZW5ndGgtKGEtcyk7aWYoZCE9PTApZm9yKGxldCBtPWwrMStjLmxlbmd0aCxmPXUubGVuZ3RoO208ZjttKyspdVttXT11W21dK2R9ZWxzZSBpZihGaS5pc0Z1bGwoaSkpdGhpcy5fY29udGVudD1pLnRleHQsdGhpcy5fbGluZU9mZnNldHM9dm9pZCAwO2Vsc2UgdGhyb3cgbmV3IEVycm9yKCJVbmtub3duIGNoYW5nZSBldmVudCByZWNlaXZlZCIpO3RoaXMuX3ZlcnNpb249bn1nZXRMaW5lT2Zmc2V0cygpe3JldHVybiB0aGlzLl9saW5lT2Zmc2V0cz09PXZvaWQgMCYmKHRoaXMuX2xpbmVPZmZzZXRzPVlhKHRoaXMuX2NvbnRlbnQsITApKSx0aGlzLl9saW5lT2Zmc2V0c31wb3NpdGlvbkF0KHQpe3Q9TWF0aC5tYXgoTWF0aC5taW4odCx0aGlzLl9jb250ZW50Lmxlbmd0aCksMCk7bGV0IG49dGhpcy5nZXRMaW5lT2Zmc2V0cygpLGk9MCxyPW4ubGVuZ3RoO2lmKHI9PT0wKXJldHVybntsaW5lOjAsY2hhcmFjdGVyOnR9O2Zvcig7aTxyOyl7bGV0IGE9TWF0aC5mbG9vcigoaStyKS8yKTtuW2FdPnQ/cj1hOmk9YSsxfWxldCBzPWktMTtyZXR1cm57bGluZTpzLGNoYXJhY3Rlcjp0LW5bc119fW9mZnNldEF0KHQpe2xldCBuPXRoaXMuZ2V0TGluZU9mZnNldHMoKTtpZih0LmxpbmU+PW4ubGVuZ3RoKXJldHVybiB0aGlzLl9jb250ZW50Lmxlbmd0aDtpZih0LmxpbmU8MClyZXR1cm4gMDtsZXQgaT1uW3QubGluZV0scj10LmxpbmUrMTxuLmxlbmd0aD9uW3QubGluZSsxXTp0aGlzLl9jb250ZW50Lmxlbmd0aDtyZXR1cm4gTWF0aC5tYXgoTWF0aC5taW4oaSt0LmNoYXJhY3RlcixyKSxpKX1nZXQgbGluZUNvdW50KCl7cmV0dXJuIHRoaXMuZ2V0TGluZU9mZnNldHMoKS5sZW5ndGh9c3RhdGljIGlzSW5jcmVtZW50YWwodCl7bGV0IG49dDtyZXR1cm4gbiE9bnVsbCYmdHlwZW9mIG4udGV4dD09InN0cmluZyImJm4ucmFuZ2UhPT12b2lkIDAmJihuLnJhbmdlTGVuZ3RoPT09dm9pZCAwfHx0eXBlb2Ygbi5yYW5nZUxlbmd0aD09Im51bWJlciIpfXN0YXRpYyBpc0Z1bGwodCl7bGV0IG49dDtyZXR1cm4gbiE9bnVsbCYmdHlwZW9mIG4udGV4dD09InN0cmluZyImJm4ucmFuZ2U9PT12b2lkIDAmJm4ucmFuZ2VMZW5ndGg9PT12b2lkIDB9fSxNaTsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdChyLHMsYSxsKXtyZXR1cm4gbmV3IEphKHIscyxhLGwpfWUuY3JlYXRlPXQ7ZnVuY3Rpb24gbihyLHMsYSl7aWYociBpbnN0YW5jZW9mIEphKXJldHVybiByLnVwZGF0ZShzLGEpLHI7dGhyb3cgbmV3IEVycm9yKCJUZXh0RG9jdW1lbnQudXBkYXRlOiBkb2N1bWVudCBtdXN0IGJlIGNyZWF0ZWQgYnkgVGV4dERvY3VtZW50LmNyZWF0ZSIpfWUudXBkYXRlPW47ZnVuY3Rpb24gaShyLHMpe2xldCBhPXIuZ2V0VGV4dCgpLGw9Tmkocy5tYXAoZWMpLChjLGQpPT57bGV0IG09Yy5yYW5nZS5zdGFydC5saW5lLWQucmFuZ2Uuc3RhcnQubGluZTtyZXR1cm4gbT09PTA/Yy5yYW5nZS5zdGFydC5jaGFyYWN0ZXItZC5yYW5nZS5zdGFydC5jaGFyYWN0ZXI6bX0pLG89MDtjb25zdCB1PVtdO2Zvcihjb25zdCBjIG9mIGwpe2xldCBkPXIub2Zmc2V0QXQoYy5yYW5nZS5zdGFydCk7aWYoZDxvKXRocm93IG5ldyBFcnJvcigiT3ZlcmxhcHBpbmcgZWRpdCIpO2Q+byYmdS5wdXNoKGEuc3Vic3RyaW5nKG8sZCkpLGMubmV3VGV4dC5sZW5ndGgmJnUucHVzaChjLm5ld1RleHQpLG89ci5vZmZzZXRBdChjLnJhbmdlLmVuZCl9cmV0dXJuIHUucHVzaChhLnN1YnN0cihvKSksdS5qb2luKCIiKX1lLmFwcGx5RWRpdHM9aX0pKE1pfHwoTWk9e30pKTtmdW5jdGlvbiBOaShlLHQpe2lmKGUubGVuZ3RoPD0xKXJldHVybiBlO2NvbnN0IG49ZS5sZW5ndGgvMnwwLGk9ZS5zbGljZSgwLG4pLHI9ZS5zbGljZShuKTtOaShpLHQpLE5pKHIsdCk7bGV0IHM9MCxhPTAsbD0wO2Zvcig7czxpLmxlbmd0aCYmYTxyLmxlbmd0aDspdChpW3NdLHJbYV0pPD0wP2VbbCsrXT1pW3MrK106ZVtsKytdPXJbYSsrXTtmb3IoO3M8aS5sZW5ndGg7KWVbbCsrXT1pW3MrK107Zm9yKDthPHIubGVuZ3RoOyllW2wrK109clthKytdO3JldHVybiBlfWZ1bmN0aW9uIFlhKGUsdCxuPTApe2NvbnN0IGk9dD9bbl06W107Zm9yKGxldCByPTA7cjxlLmxlbmd0aDtyKyspe2xldCBzPWUuY2hhckNvZGVBdChyKTsocz09PTEzfHxzPT09MTApJiYocz09PTEzJiZyKzE8ZS5sZW5ndGgmJmUuY2hhckNvZGVBdChyKzEpPT09MTAmJnIrKyxpLnB1c2gobityKzEpKX1yZXR1cm4gaX1mdW5jdGlvbiBRYShlKXtjb25zdCB0PWUuc3RhcnQsbj1lLmVuZDtyZXR1cm4gdC5saW5lPm4ubGluZXx8dC5saW5lPT09bi5saW5lJiZ0LmNoYXJhY3Rlcj5uLmNoYXJhY3Rlcj97c3RhcnQ6bixlbmQ6dH06ZX1mdW5jdGlvbiBlYyhlKXtjb25zdCB0PVFhKGUucmFuZ2UpO3JldHVybiB0IT09ZS5yYW5nZT97bmV3VGV4dDplLm5ld1RleHQscmFuZ2U6dH06ZX12YXIgejsoZnVuY3Rpb24oZSl7ZVtlLlN0YXJ0Q29tbWVudFRhZz0wXT0iU3RhcnRDb21tZW50VGFnIixlW2UuQ29tbWVudD0xXT0iQ29tbWVudCIsZVtlLkVuZENvbW1lbnRUYWc9Ml09IkVuZENvbW1lbnRUYWciLGVbZS5TdGFydFRhZ09wZW49M109IlN0YXJ0VGFnT3BlbiIsZVtlLlN0YXJ0VGFnQ2xvc2U9NF09IlN0YXJ0VGFnQ2xvc2UiLGVbZS5TdGFydFRhZ1NlbGZDbG9zZT01XT0iU3RhcnRUYWdTZWxmQ2xvc2UiLGVbZS5TdGFydFRhZz02XT0iU3RhcnRUYWciLGVbZS5FbmRUYWdPcGVuPTddPSJFbmRUYWdPcGVuIixlW2UuRW5kVGFnQ2xvc2U9OF09IkVuZFRhZ0Nsb3NlIixlW2UuRW5kVGFnPTldPSJFbmRUYWciLGVbZS5EZWxpbWl0ZXJBc3NpZ249MTBdPSJEZWxpbWl0ZXJBc3NpZ24iLGVbZS5BdHRyaWJ1dGVOYW1lPTExXT0iQXR0cmlidXRlTmFtZSIsZVtlLkF0dHJpYnV0ZVZhbHVlPTEyXT0iQXR0cmlidXRlVmFsdWUiLGVbZS5TdGFydERvY3R5cGVUYWc9MTNdPSJTdGFydERvY3R5cGVUYWciLGVbZS5Eb2N0eXBlPTE0XT0iRG9jdHlwZSIsZVtlLkVuZERvY3R5cGVUYWc9MTVdPSJFbmREb2N0eXBlVGFnIixlW2UuQ29udGVudD0xNl09IkNvbnRlbnQiLGVbZS5XaGl0ZXNwYWNlPTE3XT0iV2hpdGVzcGFjZSIsZVtlLlVua25vd249MThdPSJVbmtub3duIixlW2UuU2NyaXB0PTE5XT0iU2NyaXB0IixlW2UuU3R5bGVzPTIwXT0iU3R5bGVzIixlW2UuRU9TPTIxXT0iRU9TIn0pKHp8fCh6PXt9KSk7dmFyIEI7KGZ1bmN0aW9uKGUpe2VbZS5XaXRoaW5Db250ZW50PTBdPSJXaXRoaW5Db250ZW50IixlW2UuQWZ0ZXJPcGVuaW5nU3RhcnRUYWc9MV09IkFmdGVyT3BlbmluZ1N0YXJ0VGFnIixlW2UuQWZ0ZXJPcGVuaW5nRW5kVGFnPTJdPSJBZnRlck9wZW5pbmdFbmRUYWciLGVbZS5XaXRoaW5Eb2N0eXBlPTNdPSJXaXRoaW5Eb2N0eXBlIixlW2UuV2l0aGluVGFnPTRdPSJXaXRoaW5UYWciLGVbZS5XaXRoaW5FbmRUYWc9NV09IldpdGhpbkVuZFRhZyIsZVtlLldpdGhpbkNvbW1lbnQ9Nl09IldpdGhpbkNvbW1lbnQiLGVbZS5XaXRoaW5TY3JpcHRDb250ZW50PTddPSJXaXRoaW5TY3JpcHRDb250ZW50IixlW2UuV2l0aGluU3R5bGVDb250ZW50PThdPSJXaXRoaW5TdHlsZUNvbnRlbnQiLGVbZS5BZnRlckF0dHJpYnV0ZU5hbWU9OV09IkFmdGVyQXR0cmlidXRlTmFtZSIsZVtlLkJlZm9yZUF0dHJpYnV0ZVZhbHVlPTEwXT0iQmVmb3JlQXR0cmlidXRlVmFsdWUifSkoQnx8KEI9e30pKTt2YXIgWmE7KGZ1bmN0aW9uKGUpe2UuTEFURVNUPXt0ZXh0RG9jdW1lbnQ6e2NvbXBsZXRpb246e2NvbXBsZXRpb25JdGVtOntkb2N1bWVudGF0aW9uRm9ybWF0OltQZS5NYXJrZG93bixQZS5QbGFpblRleHRdfX0saG92ZXI6e2NvbnRlbnRGb3JtYXQ6W1BlLk1hcmtkb3duLFBlLlBsYWluVGV4dF19fX19KShaYXx8KFphPXt9KSk7dmFyIERpOyhmdW5jdGlvbihlKXtlW2UuVW5rbm93bj0wXT0iVW5rbm93biIsZVtlLkZpbGU9MV09IkZpbGUiLGVbZS5EaXJlY3Rvcnk9Ml09IkRpcmVjdG9yeSIsZVtlLlN5bWJvbGljTGluaz02NF09IlN5bWJvbGljTGluayJ9KShEaXx8KERpPXt9KSk7dmFyIHRjPWNsYXNze2NvbnN0cnVjdG9yKGUsdCl7dGhpcy5zb3VyY2U9ZSx0aGlzLmxlbj1lLmxlbmd0aCx0aGlzLnBvc2l0aW9uPXR9ZW9zKCl7cmV0dXJuIHRoaXMubGVuPD10aGlzLnBvc2l0aW9ufWdldFNvdXJjZSgpe3JldHVybiB0aGlzLnNvdXJjZX1wb3MoKXtyZXR1cm4gdGhpcy5wb3NpdGlvbn1nb0JhY2tUbyhlKXt0aGlzLnBvc2l0aW9uPWV9Z29CYWNrKGUpe3RoaXMucG9zaXRpb24tPWV9YWR2YW5jZShlKXt0aGlzLnBvc2l0aW9uKz1lfWdvVG9FbmQoKXt0aGlzLnBvc2l0aW9uPXRoaXMuc291cmNlLmxlbmd0aH1uZXh0Q2hhcigpe3JldHVybiB0aGlzLnNvdXJjZS5jaGFyQ29kZUF0KHRoaXMucG9zaXRpb24rKyl8fDB9cGVla0NoYXIoZT0wKXtyZXR1cm4gdGhpcy5zb3VyY2UuY2hhckNvZGVBdCh0aGlzLnBvc2l0aW9uK2UpfHwwfWFkdmFuY2VJZkNoYXIoZSl7cmV0dXJuIGU9PT10aGlzLnNvdXJjZS5jaGFyQ29kZUF0KHRoaXMucG9zaXRpb24pPyh0aGlzLnBvc2l0aW9uKyssITApOiExfWFkdmFuY2VJZkNoYXJzKGUpe2xldCB0O2lmKHRoaXMucG9zaXRpb24rZS5sZW5ndGg+dGhpcy5zb3VyY2UubGVuZ3RoKXJldHVybiExO2Zvcih0PTA7dDxlLmxlbmd0aDt0KyspaWYodGhpcy5zb3VyY2UuY2hhckNvZGVBdCh0aGlzLnBvc2l0aW9uK3QpIT09ZVt0XSlyZXR1cm4hMTtyZXR1cm4gdGhpcy5hZHZhbmNlKHQpLCEwfWFkdmFuY2VJZlJlZ0V4cChlKXtjb25zdCBuPXRoaXMuc291cmNlLnN1YnN0cih0aGlzLnBvc2l0aW9uKS5tYXRjaChlKTtyZXR1cm4gbj8odGhpcy5wb3NpdGlvbj10aGlzLnBvc2l0aW9uK24uaW5kZXgrblswXS5sZW5ndGgsblswXSk6IiJ9YWR2YW5jZVVudGlsUmVnRXhwKGUpe2NvbnN0IG49dGhpcy5zb3VyY2Uuc3Vic3RyKHRoaXMucG9zaXRpb24pLm1hdGNoKGUpO3JldHVybiBuPyh0aGlzLnBvc2l0aW9uPXRoaXMucG9zaXRpb24rbi5pbmRleCxuWzBdKToodGhpcy5nb1RvRW5kKCksIiIpfWFkdmFuY2VVbnRpbENoYXIoZSl7Zm9yKDt0aGlzLnBvc2l0aW9uPHRoaXMuc291cmNlLmxlbmd0aDspe2lmKHRoaXMuc291cmNlLmNoYXJDb2RlQXQodGhpcy5wb3NpdGlvbik9PT1lKXJldHVybiEwO3RoaXMuYWR2YW5jZSgxKX1yZXR1cm4hMX1hZHZhbmNlVW50aWxDaGFycyhlKXtmb3IoO3RoaXMucG9zaXRpb24rZS5sZW5ndGg8PXRoaXMuc291cmNlLmxlbmd0aDspe2xldCB0PTA7Zm9yKDt0PGUubGVuZ3RoJiZ0aGlzLnNvdXJjZS5jaGFyQ29kZUF0KHRoaXMucG9zaXRpb24rdCk9PT1lW3RdO3QrKyk7aWYodD09PWUubGVuZ3RoKXJldHVybiEwO3RoaXMuYWR2YW5jZSgxKX1yZXR1cm4gdGhpcy5nb1RvRW5kKCksITF9c2tpcFdoaXRlc3BhY2UoKXtyZXR1cm4gdGhpcy5hZHZhbmNlV2hpbGVDaGFyKHQ9PnQ9PT1sY3x8dD09PXVjfHx0PT09c2N8fHQ9PT1vY3x8dD09PWFjKT4wfWFkdmFuY2VXaGlsZUNoYXIoZSl7Y29uc3QgdD10aGlzLnBvc2l0aW9uO2Zvcig7dGhpcy5wb3NpdGlvbjx0aGlzLmxlbiYmZSh0aGlzLnNvdXJjZS5jaGFyQ29kZUF0KHRoaXMucG9zaXRpb24pKTspdGhpcy5wb3NpdGlvbisrO3JldHVybiB0aGlzLnBvc2l0aW9uLXR9fSxLYT0zMyxndD00NSxnbj02MCxNZT02MixJaT00NyxuYz02MSxpYz0zNCxyYz0zOSxzYz0xMCxhYz0xMyxvYz0xMixsYz0zMix1Yz05LGNjPXsidGV4dC94LWhhbmRsZWJhcnMtdGVtcGxhdGUiOiEwLCJ0ZXh0L2h0bWwiOiEwfTtmdW5jdGlvbiBiZShlLHQ9MCxuPUIuV2l0aGluQ29udGVudCxpPSExKXtjb25zdCByPW5ldyB0YyhlLHQpO2xldCBzPW4sYT0wLGw9ei5Vbmtub3duLG8sdSxjLGQsbTtmdW5jdGlvbiBmKCl7cmV0dXJuIHIuYWR2YW5jZUlmUmVnRXhwKC9eW186XHddW186XHctLlxkXSovKS50b0xvd2VyQ2FzZSgpfWZ1bmN0aW9uIF8oKXtyZXR1cm4gci5hZHZhbmNlSWZSZWdFeHAoL15bXlxzIic+PC89XHgwMC1ceDBGXHg3Rlx4ODAtXHg5Rl0qLykudG9Mb3dlckNhc2UoKX1mdW5jdGlvbiBnKHYsRSxNKXtyZXR1cm4gbD1FLGE9dixvPU0sRX1mdW5jdGlvbiBrKCl7Y29uc3Qgdj1yLnBvcygpLEU9cyxNPXkoKTtyZXR1cm4gTSE9PXouRU9TJiZ2PT09ci5wb3MoKSYmIShpJiYoTT09PXouU3RhcnRUYWdDbG9zZXx8TT09PXouRW5kVGFnQ2xvc2UpKT8oY29uc29sZS53YXJuKCJTY2FubmVyLnNjYW4gaGFzIG5vdCBhZHZhbmNlZCBhdCBvZmZzZXQgIit2KyIsIHN0YXRlIGJlZm9yZTogIitFKyIgYWZ0ZXI6ICIrcyksci5hZHZhbmNlKDEpLGcodix6LlVua25vd24pKTpNfWZ1bmN0aW9uIHkoKXtjb25zdCB2PXIucG9zKCk7aWYoci5lb3MoKSlyZXR1cm4gZyh2LHouRU9TKTtsZXQgRTtzd2l0Y2gocyl7Y2FzZSBCLldpdGhpbkNvbW1lbnQ6cmV0dXJuIHIuYWR2YW5jZUlmQ2hhcnMoW2d0LGd0LE1lXSk/KHM9Qi5XaXRoaW5Db250ZW50LGcodix6LkVuZENvbW1lbnRUYWcpKTooci5hZHZhbmNlVW50aWxDaGFycyhbZ3QsZ3QsTWVdKSxnKHYsei5Db21tZW50KSk7Y2FzZSBCLldpdGhpbkRvY3R5cGU6cmV0dXJuIHIuYWR2YW5jZUlmQ2hhcihNZSk/KHM9Qi5XaXRoaW5Db250ZW50LGcodix6LkVuZERvY3R5cGVUYWcpKTooci5hZHZhbmNlVW50aWxDaGFyKE1lKSxnKHYsei5Eb2N0eXBlKSk7Y2FzZSBCLldpdGhpbkNvbnRlbnQ6aWYoci5hZHZhbmNlSWZDaGFyKGduKSl7aWYoIXIuZW9zKCkmJnIucGVla0NoYXIoKT09PUthKXtpZihyLmFkdmFuY2VJZkNoYXJzKFtLYSxndCxndF0pKXJldHVybiBzPUIuV2l0aGluQ29tbWVudCxnKHYsei5TdGFydENvbW1lbnRUYWcpO2lmKHIuYWR2YW5jZUlmUmVnRXhwKC9eIWRvY3R5cGUvaSkpcmV0dXJuIHM9Qi5XaXRoaW5Eb2N0eXBlLGcodix6LlN0YXJ0RG9jdHlwZVRhZyl9cmV0dXJuIHIuYWR2YW5jZUlmQ2hhcihJaSk/KHM9Qi5BZnRlck9wZW5pbmdFbmRUYWcsZyh2LHouRW5kVGFnT3BlbikpOihzPUIuQWZ0ZXJPcGVuaW5nU3RhcnRUYWcsZyh2LHouU3RhcnRUYWdPcGVuKSl9cmV0dXJuIHIuYWR2YW5jZVVudGlsQ2hhcihnbiksZyh2LHouQ29udGVudCk7Y2FzZSBCLkFmdGVyT3BlbmluZ0VuZFRhZzpyZXR1cm4gZigpLmxlbmd0aD4wPyhzPUIuV2l0aGluRW5kVGFnLGcodix6LkVuZFRhZykpOnIuc2tpcFdoaXRlc3BhY2UoKT9nKHYsei5XaGl0ZXNwYWNlLEFlKCJUYWcgbmFtZSBtdXN0IGRpcmVjdGx5IGZvbGxvdyB0aGUgb3BlbiBicmFja2V0LiIpKToocz1CLldpdGhpbkVuZFRhZyxyLmFkdmFuY2VVbnRpbENoYXIoTWUpLHY8ci5wb3MoKT9nKHYsei5Vbmtub3duLEFlKCJFbmQgdGFnIG5hbWUgZXhwZWN0ZWQuIikpOnkoKSk7Y2FzZSBCLldpdGhpbkVuZFRhZzppZihyLnNraXBXaGl0ZXNwYWNlKCkpcmV0dXJuIGcodix6LldoaXRlc3BhY2UpO2lmKHIuYWR2YW5jZUlmQ2hhcihNZSkpcmV0dXJuIHM9Qi5XaXRoaW5Db250ZW50LGcodix6LkVuZFRhZ0Nsb3NlKTtpZihpJiZyLnBlZWtDaGFyKCk9PT1nbilyZXR1cm4gcz1CLldpdGhpbkNvbnRlbnQsZyh2LHouRW5kVGFnQ2xvc2UsQWUoIkNsb3NpbmcgYnJhY2tldCBtaXNzaW5nLiIpKTtFPUFlKCJDbG9zaW5nIGJyYWNrZXQgZXhwZWN0ZWQuIik7YnJlYWs7Y2FzZSBCLkFmdGVyT3BlbmluZ1N0YXJ0VGFnOnJldHVybiBjPWYoKSxtPXZvaWQgMCxkPXZvaWQgMCxjLmxlbmd0aD4wPyh1PSExLHM9Qi5XaXRoaW5UYWcsZyh2LHouU3RhcnRUYWcpKTpyLnNraXBXaGl0ZXNwYWNlKCk/Zyh2LHouV2hpdGVzcGFjZSxBZSgiVGFnIG5hbWUgbXVzdCBkaXJlY3RseSBmb2xsb3cgdGhlIG9wZW4gYnJhY2tldC4iKSk6KHM9Qi5XaXRoaW5UYWcsci5hZHZhbmNlVW50aWxDaGFyKE1lKSx2PHIucG9zKCk/Zyh2LHouVW5rbm93bixBZSgiU3RhcnQgdGFnIG5hbWUgZXhwZWN0ZWQuIikpOnkoKSk7Y2FzZSBCLldpdGhpblRhZzpyZXR1cm4gci5za2lwV2hpdGVzcGFjZSgpPyh1PSEwLGcodix6LldoaXRlc3BhY2UpKTp1JiYoZD1fKCksZC5sZW5ndGg+MCk/KHM9Qi5BZnRlckF0dHJpYnV0ZU5hbWUsdT0hMSxnKHYsei5BdHRyaWJ1dGVOYW1lKSk6ci5hZHZhbmNlSWZDaGFycyhbSWksTWVdKT8ocz1CLldpdGhpbkNvbnRlbnQsZyh2LHouU3RhcnRUYWdTZWxmQ2xvc2UpKTpyLmFkdmFuY2VJZkNoYXIoTWUpPyhjPT09InNjcmlwdCI/bSYmY2NbbV0/cz1CLldpdGhpbkNvbnRlbnQ6cz1CLldpdGhpblNjcmlwdENvbnRlbnQ6Yz09PSJzdHlsZSI/cz1CLldpdGhpblN0eWxlQ29udGVudDpzPUIuV2l0aGluQ29udGVudCxnKHYsei5TdGFydFRhZ0Nsb3NlKSk6aSYmci5wZWVrQ2hhcigpPT09Z24/KHM9Qi5XaXRoaW5Db250ZW50LGcodix6LlN0YXJ0VGFnQ2xvc2UsQWUoIkNsb3NpbmcgYnJhY2tldCBtaXNzaW5nLiIpKSk6KHIuYWR2YW5jZSgxKSxnKHYsei5Vbmtub3duLEFlKCJVbmV4cGVjdGVkIGNoYXJhY3RlciBpbiB0YWcuIikpKTtjYXNlIEIuQWZ0ZXJBdHRyaWJ1dGVOYW1lOnJldHVybiByLnNraXBXaGl0ZXNwYWNlKCk/KHU9ITAsZyh2LHouV2hpdGVzcGFjZSkpOnIuYWR2YW5jZUlmQ2hhcihuYyk/KHM9Qi5CZWZvcmVBdHRyaWJ1dGVWYWx1ZSxnKHYsei5EZWxpbWl0ZXJBc3NpZ24pKToocz1CLldpdGhpblRhZyx5KCkpO2Nhc2UgQi5CZWZvcmVBdHRyaWJ1dGVWYWx1ZTppZihyLnNraXBXaGl0ZXNwYWNlKCkpcmV0dXJuIGcodix6LldoaXRlc3BhY2UpO2xldCBEPXIuYWR2YW5jZUlmUmVnRXhwKC9eW15ccyInYD08Pl0rLyk7aWYoRC5sZW5ndGg+MCYmKHIucGVla0NoYXIoKT09PU1lJiZyLnBlZWtDaGFyKC0xKT09PUlpJiYoci5nb0JhY2soMSksRD1ELnN1YnN0cmluZygwLEQubGVuZ3RoLTEpKSxkPT09InR5cGUiJiYobT1EKSxELmxlbmd0aD4wKSlyZXR1cm4gcz1CLldpdGhpblRhZyx1PSExLGcodix6LkF0dHJpYnV0ZVZhbHVlKTtjb25zdCBOPXIucGVla0NoYXIoKTtyZXR1cm4gTj09PXJjfHxOPT09aWM/KHIuYWR2YW5jZSgxKSxyLmFkdmFuY2VVbnRpbENoYXIoTikmJnIuYWR2YW5jZSgxKSxkPT09InR5cGUiJiYobT1yLmdldFNvdXJjZSgpLnN1YnN0cmluZyh2KzEsci5wb3MoKS0xKSkscz1CLldpdGhpblRhZyx1PSExLGcodix6LkF0dHJpYnV0ZVZhbHVlKSk6KHM9Qi5XaXRoaW5UYWcsdT0hMSx5KCkpO2Nhc2UgQi5XaXRoaW5TY3JpcHRDb250ZW50OmxldCBiPTE7Zm9yKDshci5lb3MoKTspe2NvbnN0IHA9ci5hZHZhbmNlSWZSZWdFeHAoLzwhLS18LS0+fDxcLz9zY3JpcHRccypcLz8+Py9pKTtpZihwLmxlbmd0aD09PTApcmV0dXJuIHIuZ29Ub0VuZCgpLGcodix6LlNjcmlwdCk7aWYocD09PSI8IS0tIiliPT09MSYmKGI9Mik7ZWxzZSBpZihwPT09Ii0tPiIpYj0xO2Vsc2UgaWYocFsxXSE9PSIvIiliPT09MiYmKGI9Myk7ZWxzZSBpZihiPT09MyliPTI7ZWxzZXtyLmdvQmFjayhwLmxlbmd0aCk7YnJlYWt9fXJldHVybiBzPUIuV2l0aGluQ29udGVudCx2PHIucG9zKCk/Zyh2LHouU2NyaXB0KTp5KCk7Y2FzZSBCLldpdGhpblN0eWxlQ29udGVudDpyZXR1cm4gci5hZHZhbmNlVW50aWxSZWdFeHAoLzxcL3N0eWxlL2kpLHM9Qi5XaXRoaW5Db250ZW50LHY8ci5wb3MoKT9nKHYsei5TdHlsZXMpOnkoKX1yZXR1cm4gci5hZHZhbmNlKDEpLHM9Qi5XaXRoaW5Db250ZW50LGcodix6LlVua25vd24sRSl9cmV0dXJue3NjYW46ayxnZXRUb2tlblR5cGU6KCk9PmwsZ2V0VG9rZW5PZmZzZXQ6KCk9PmEsZ2V0VG9rZW5MZW5ndGg6KCk9PnIucG9zKCktYSxnZXRUb2tlbkVuZDooKT0+ci5wb3MoKSxnZXRUb2tlblRleHQ6KCk9PnIuZ2V0U291cmNlKCkuc3Vic3RyaW5nKGEsci5wb3MoKSksZ2V0U2Nhbm5lclN0YXRlOigpPT5zLGdldFRva2VuRXJyb3I6KCk9Pm99fWZ1bmN0aW9uIGVvKGUsdCl7bGV0IG49MCxpPWUubGVuZ3RoO2lmKGk9PT0wKXJldHVybiAwO2Zvcig7bjxpOyl7bGV0IHI9TWF0aC5mbG9vcigobitpKS8yKTt0KGVbcl0pP2k9cjpuPXIrMX1yZXR1cm4gbn1mdW5jdGlvbiBoYyhlLHQsbil7bGV0IGk9MCxyPWUubGVuZ3RoLTE7Zm9yKDtpPD1yOyl7Y29uc3Qgcz0oaStyKS8yfDAsYT1uKGVbc10sdCk7aWYoYTwwKWk9cysxO2Vsc2UgaWYoYT4wKXI9cy0xO2Vsc2UgcmV0dXJuIHN9cmV0dXJuLShpKzEpfXZhciB0bz1jbGFzc3tnZXQgYXR0cmlidXRlTmFtZXMoKXtyZXR1cm4gdGhpcy5hdHRyaWJ1dGVzP09iamVjdC5rZXlzKHRoaXMuYXR0cmlidXRlcyk6W119Y29uc3RydWN0b3IoZSx0LG4saSl7dGhpcy5zdGFydD1lLHRoaXMuZW5kPXQsdGhpcy5jaGlsZHJlbj1uLHRoaXMucGFyZW50PWksdGhpcy5jbG9zZWQ9ITF9aXNTYW1lVGFnKGUpe3JldHVybiB0aGlzLnRhZz09PXZvaWQgMD9lPT09dm9pZCAwOmUhPT12b2lkIDAmJnRoaXMudGFnLmxlbmd0aD09PWUubGVuZ3RoJiZ0aGlzLnRhZy50b0xvd2VyQ2FzZSgpPT09ZX1nZXQgZmlyc3RDaGlsZCgpe3JldHVybiB0aGlzLmNoaWxkcmVuWzBdfWdldCBsYXN0Q2hpbGQoKXtyZXR1cm4gdGhpcy5jaGlsZHJlbi5sZW5ndGg/dGhpcy5jaGlsZHJlblt0aGlzLmNoaWxkcmVuLmxlbmd0aC0xXTp2b2lkIDB9ZmluZE5vZGVCZWZvcmUoZSl7Y29uc3QgdD1lbyh0aGlzLmNoaWxkcmVuLG49PmU8PW4uc3RhcnQpLTE7aWYodD49MCl7Y29uc3Qgbj10aGlzLmNoaWxkcmVuW3RdO2lmKGU+bi5zdGFydCl7aWYoZTxuLmVuZClyZXR1cm4gbi5maW5kTm9kZUJlZm9yZShlKTtjb25zdCBpPW4ubGFzdENoaWxkO3JldHVybiBpJiZpLmVuZD09PW4uZW5kP24uZmluZE5vZGVCZWZvcmUoZSk6bn19cmV0dXJuIHRoaXN9ZmluZE5vZGVBdChlKXtjb25zdCB0PWVvKHRoaXMuY2hpbGRyZW4sbj0+ZTw9bi5zdGFydCktMTtpZih0Pj0wKXtjb25zdCBuPXRoaXMuY2hpbGRyZW5bdF07aWYoZT5uLnN0YXJ0JiZlPD1uLmVuZClyZXR1cm4gbi5maW5kTm9kZUF0KGUpfXJldHVybiB0aGlzfX0sZGM9Y2xhc3N7Y29uc3RydWN0b3IoZSl7dGhpcy5kYXRhTWFuYWdlcj1lfXBhcnNlRG9jdW1lbnQoZSl7cmV0dXJuIHRoaXMucGFyc2UoZS5nZXRUZXh0KCksdGhpcy5kYXRhTWFuYWdlci5nZXRWb2lkRWxlbWVudHMoZS5sYW5ndWFnZUlkKSl9cGFyc2UoZSx0KXtjb25zdCBuPWJlKGUsdm9pZCAwLHZvaWQgMCwhMCksaT1uZXcgdG8oMCxlLmxlbmd0aCxbXSx2b2lkIDApO2xldCByPWkscz0tMSxhLGw9bnVsbCxvPW4uc2NhbigpO2Zvcig7byE9PXouRU9TOyl7c3dpdGNoKG8pe2Nhc2Ugei5TdGFydFRhZ09wZW46Y29uc3QgdT1uZXcgdG8obi5nZXRUb2tlbk9mZnNldCgpLGUubGVuZ3RoLFtdLHIpO3IuY2hpbGRyZW4ucHVzaCh1KSxyPXU7YnJlYWs7Y2FzZSB6LlN0YXJ0VGFnOnIudGFnPW4uZ2V0VG9rZW5UZXh0KCk7YnJlYWs7Y2FzZSB6LlN0YXJ0VGFnQ2xvc2U6ci5wYXJlbnQmJihyLmVuZD1uLmdldFRva2VuRW5kKCksbi5nZXRUb2tlbkxlbmd0aCgpPyhyLnN0YXJ0VGFnRW5kPW4uZ2V0VG9rZW5FbmQoKSxyLnRhZyYmdGhpcy5kYXRhTWFuYWdlci5pc1ZvaWRFbGVtZW50KHIudGFnLHQpJiYoci5jbG9zZWQ9ITAscj1yLnBhcmVudCkpOnI9ci5wYXJlbnQpO2JyZWFrO2Nhc2Ugei5TdGFydFRhZ1NlbGZDbG9zZTpyLnBhcmVudCYmKHIuY2xvc2VkPSEwLHIuZW5kPW4uZ2V0VG9rZW5FbmQoKSxyLnN0YXJ0VGFnRW5kPW4uZ2V0VG9rZW5FbmQoKSxyPXIucGFyZW50KTticmVhaztjYXNlIHouRW5kVGFnT3BlbjpzPW4uZ2V0VG9rZW5PZmZzZXQoKSxhPXZvaWQgMDticmVhaztjYXNlIHouRW5kVGFnOmE9bi5nZXRUb2tlblRleHQoKS50b0xvd2VyQ2FzZSgpO2JyZWFrO2Nhc2Ugei5FbmRUYWdDbG9zZTpsZXQgYz1yO2Zvcig7IWMuaXNTYW1lVGFnKGEpJiZjLnBhcmVudDspYz1jLnBhcmVudDtpZihjLnBhcmVudCl7Zm9yKDtyIT09Yzspci5lbmQ9cyxyLmNsb3NlZD0hMSxyPXIucGFyZW50O3IuY2xvc2VkPSEwLHIuZW5kVGFnU3RhcnQ9cyxyLmVuZD1uLmdldFRva2VuRW5kKCkscj1yLnBhcmVudH1icmVhaztjYXNlIHouQXR0cmlidXRlTmFtZTp7bD1uLmdldFRva2VuVGV4dCgpO2xldCBkPXIuYXR0cmlidXRlcztkfHwoci5hdHRyaWJ1dGVzPWQ9e30pLGRbbF09bnVsbDticmVha31jYXNlIHouQXR0cmlidXRlVmFsdWU6e2NvbnN0IGQ9bi5nZXRUb2tlblRleHQoKSxtPXIuYXR0cmlidXRlczttJiZsJiYobVtsXT1kLGw9bnVsbCk7YnJlYWt9fW89bi5zY2FuKCl9Zm9yKDtyLnBhcmVudDspci5lbmQ9ZS5sZW5ndGgsci5jbG9zZWQ9ITEscj1yLnBhcmVudDtyZXR1cm57cm9vdHM6aS5jaGlsZHJlbixmaW5kTm9kZUJlZm9yZTppLmZpbmROb2RlQmVmb3JlLmJpbmQoaSksZmluZE5vZGVBdDppLmZpbmROb2RlQXQuYmluZChpKX19fSxEdD17IkFhY3V0ZTsiOiLDgSIsQWFjdXRlOiLDgSIsImFhY3V0ZTsiOiLDoSIsYWFjdXRlOiLDoSIsIkFicmV2ZTsiOiLEgiIsImFicmV2ZTsiOiLEgyIsImFjOyI6IuKIviIsImFjZDsiOiLiiL8iLCJhY0U7Ijoi4oi+zLMiLCJBY2lyYzsiOiLDgiIsQWNpcmM6IsOCIiwiYWNpcmM7Ijoiw6IiLGFjaXJjOiLDoiIsImFjdXRlOyI6IsK0IixhY3V0ZToiwrQiLCJBY3k7Ijoi0JAiLCJhY3k7Ijoi0LAiLCJBRWxpZzsiOiLDhiIsQUVsaWc6IsOGIiwiYWVsaWc7Ijoiw6YiLGFlbGlnOiLDpiIsImFmOyI6IuKBoSIsIkFmcjsiOiLwnZSEIiwiYWZyOyI6IvCdlJ4iLCJBZ3JhdmU7Ijoiw4AiLEFncmF2ZToiw4AiLCJhZ3JhdmU7Ijoiw6AiLGFncmF2ZToiw6AiLCJhbGVmc3ltOyI6IuKEtSIsImFsZXBoOyI6IuKEtSIsIkFscGhhOyI6Is6RIiwiYWxwaGE7IjoizrEiLCJBbWFjcjsiOiLEgCIsImFtYWNyOyI6IsSBIiwiYW1hbGc7Ijoi4qi/IiwiQU1QOyI6IiYiLEFNUDoiJiIsImFtcDsiOiImIixhbXA6IiYiLCJBbmQ7Ijoi4qmTIiwiYW5kOyI6IuKIpyIsImFuZGFuZDsiOiLiqZUiLCJhbmRkOyI6IuKpnCIsImFuZHNsb3BlOyI6IuKpmCIsImFuZHY7Ijoi4qmaIiwiYW5nOyI6IuKIoCIsImFuZ2U7Ijoi4qakIiwiYW5nbGU7Ijoi4oigIiwiYW5nbXNkOyI6IuKIoSIsImFuZ21zZGFhOyI6IuKmqCIsImFuZ21zZGFiOyI6IuKmqSIsImFuZ21zZGFjOyI6IuKmqiIsImFuZ21zZGFkOyI6IuKmqyIsImFuZ21zZGFlOyI6IuKmrCIsImFuZ21zZGFmOyI6IuKmrSIsImFuZ21zZGFnOyI6IuKmriIsImFuZ21zZGFoOyI6IuKmryIsImFuZ3J0OyI6IuKInyIsImFuZ3J0dmI7Ijoi4oq+IiwiYW5ncnR2YmQ7Ijoi4qadIiwiYW5nc3BoOyI6IuKIoiIsImFuZ3N0OyI6IsOFIiwiYW5nemFycjsiOiLijbwiLCJBb2dvbjsiOiLEhCIsImFvZ29uOyI6IsSFIiwiQW9wZjsiOiLwnZS4IiwiYW9wZjsiOiLwnZWSIiwiYXA7Ijoi4omIIiwiYXBhY2lyOyI6IuKpryIsImFwRTsiOiLiqbAiLCJhcGU7Ijoi4omKIiwiYXBpZDsiOiLiiYsiLCJhcG9zOyI6IiciLCJBcHBseUZ1bmN0aW9uOyI6IuKBoSIsImFwcHJveDsiOiLiiYgiLCJhcHByb3hlcTsiOiLiiYoiLCJBcmluZzsiOiLDhSIsQXJpbmc6IsOFIiwiYXJpbmc7Ijoiw6UiLGFyaW5nOiLDpSIsIkFzY3I7Ijoi8J2SnCIsImFzY3I7Ijoi8J2StiIsIkFzc2lnbjsiOiLiiZQiLCJhc3Q7IjoiKiIsImFzeW1wOyI6IuKJiCIsImFzeW1wZXE7Ijoi4omNIiwiQXRpbGRlOyI6IsODIixBdGlsZGU6IsODIiwiYXRpbGRlOyI6IsOjIixhdGlsZGU6IsOjIiwiQXVtbDsiOiLDhCIsQXVtbDoiw4QiLCJhdW1sOyI6IsOkIixhdW1sOiLDpCIsImF3Y29uaW50OyI6IuKIsyIsImF3aW50OyI6IuKokSIsImJhY2tjb25nOyI6IuKJjCIsImJhY2tlcHNpbG9uOyI6Is+2IiwiYmFja3ByaW1lOyI6IuKAtSIsImJhY2tzaW07Ijoi4oi9IiwiYmFja3NpbWVxOyI6IuKLjSIsIkJhY2tzbGFzaDsiOiLiiJYiLCJCYXJ2OyI6IuKrpyIsImJhcnZlZTsiOiLiir0iLCJCYXJ3ZWQ7Ijoi4oyGIiwiYmFyd2VkOyI6IuKMhSIsImJhcndlZGdlOyI6IuKMhSIsImJicms7Ijoi4o61IiwiYmJya3Ricms7Ijoi4o62IiwiYmNvbmc7Ijoi4omMIiwiQmN5OyI6ItCRIiwiYmN5OyI6ItCxIiwiYmRxdW87Ijoi4oCeIiwiYmVjYXVzOyI6IuKItSIsIkJlY2F1c2U7Ijoi4oi1IiwiYmVjYXVzZTsiOiLiiLUiLCJiZW1wdHl2OyI6IuKmsCIsImJlcHNpOyI6Is+2IiwiYmVybm91OyI6IuKErCIsIkJlcm5vdWxsaXM7Ijoi4oSsIiwiQmV0YTsiOiLOkiIsImJldGE7IjoizrIiLCJiZXRoOyI6IuKEtiIsImJldHdlZW47Ijoi4omsIiwiQmZyOyI6IvCdlIUiLCJiZnI7Ijoi8J2UnyIsImJpZ2NhcDsiOiLii4IiLCJiaWdjaXJjOyI6IuKXryIsImJpZ2N1cDsiOiLii4MiLCJiaWdvZG90OyI6IuKogCIsImJpZ29wbHVzOyI6IuKogSIsImJpZ290aW1lczsiOiLiqIIiLCJiaWdzcWN1cDsiOiLiqIYiLCJiaWdzdGFyOyI6IuKYhSIsImJpZ3RyaWFuZ2xlZG93bjsiOiLilr0iLCJiaWd0cmlhbmdsZXVwOyI6IuKWsyIsImJpZ3VwbHVzOyI6IuKohCIsImJpZ3ZlZTsiOiLii4EiLCJiaWd3ZWRnZTsiOiLii4AiLCJia2Fyb3c7Ijoi4qSNIiwiYmxhY2tsb3plbmdlOyI6IuKnqyIsImJsYWNrc3F1YXJlOyI6IuKWqiIsImJsYWNrdHJpYW5nbGU7Ijoi4pa0IiwiYmxhY2t0cmlhbmdsZWRvd247Ijoi4pa+IiwiYmxhY2t0cmlhbmdsZWxlZnQ7Ijoi4peCIiwiYmxhY2t0cmlhbmdsZXJpZ2h0OyI6IuKWuCIsImJsYW5rOyI6IuKQoyIsImJsazEyOyI6IuKWkiIsImJsazE0OyI6IuKWkSIsImJsazM0OyI6IuKWkyIsImJsb2NrOyI6IuKWiCIsImJuZTsiOiI94oOlIiwiYm5lcXVpdjsiOiLiiaHig6UiLCJiTm90OyI6IuKrrSIsImJub3Q7Ijoi4oyQIiwiQm9wZjsiOiLwnZS5IiwiYm9wZjsiOiLwnZWTIiwiYm90OyI6IuKKpSIsImJvdHRvbTsiOiLiiqUiLCJib3d0aWU7Ijoi4ouIIiwiYm94Ym94OyI6IuKniSIsImJveERMOyI6IuKVlyIsImJveERsOyI6IuKVliIsImJveGRMOyI6IuKVlSIsImJveGRsOyI6IuKUkCIsImJveERSOyI6IuKVlCIsImJveERyOyI6IuKVkyIsImJveGRSOyI6IuKVkiIsImJveGRyOyI6IuKUjCIsImJveEg7Ijoi4pWQIiwiYm94aDsiOiLilIAiLCJib3hIRDsiOiLilaYiLCJib3hIZDsiOiLilaQiLCJib3hoRDsiOiLilaUiLCJib3hoZDsiOiLilKwiLCJib3hIVTsiOiLilakiLCJib3hIdTsiOiLilaciLCJib3hoVTsiOiLilagiLCJib3hodTsiOiLilLQiLCJib3htaW51czsiOiLiip8iLCJib3hwbHVzOyI6IuKKniIsImJveHRpbWVzOyI6IuKKoCIsImJveFVMOyI6IuKVnSIsImJveFVsOyI6IuKVnCIsImJveHVMOyI6IuKVmyIsImJveHVsOyI6IuKUmCIsImJveFVSOyI6IuKVmiIsImJveFVyOyI6IuKVmSIsImJveHVSOyI6IuKVmCIsImJveHVyOyI6IuKUlCIsImJveFY7Ijoi4pWRIiwiYm94djsiOiLilIIiLCJib3hWSDsiOiLilawiLCJib3hWaDsiOiLilasiLCJib3h2SDsiOiLilaoiLCJib3h2aDsiOiLilLwiLCJib3hWTDsiOiLilaMiLCJib3hWbDsiOiLilaIiLCJib3h2TDsiOiLilaEiLCJib3h2bDsiOiLilKQiLCJib3hWUjsiOiLilaAiLCJib3hWcjsiOiLilZ8iLCJib3h2UjsiOiLilZ4iLCJib3h2cjsiOiLilJwiLCJicHJpbWU7Ijoi4oC1IiwiQnJldmU7Ijoiy5giLCJicmV2ZTsiOiLLmCIsImJydmJhcjsiOiLCpiIsYnJ2YmFyOiLCpiIsIkJzY3I7Ijoi4oSsIiwiYnNjcjsiOiLwnZK3IiwiYnNlbWk7Ijoi4oGPIiwiYnNpbTsiOiLiiL0iLCJic2ltZTsiOiLii40iLCJic29sOyI6IlxcIiwiYnNvbGI7Ijoi4qeFIiwiYnNvbGhzdWI7Ijoi4p+IIiwiYnVsbDsiOiLigKIiLCJidWxsZXQ7Ijoi4oCiIiwiYnVtcDsiOiLiiY4iLCJidW1wRTsiOiLiqq4iLCJidW1wZTsiOiLiiY8iLCJCdW1wZXE7Ijoi4omOIiwiYnVtcGVxOyI6IuKJjyIsIkNhY3V0ZTsiOiLEhiIsImNhY3V0ZTsiOiLEhyIsIkNhcDsiOiLii5IiLCJjYXA7Ijoi4oipIiwiY2FwYW5kOyI6IuKphCIsImNhcGJyY3VwOyI6IuKpiSIsImNhcGNhcDsiOiLiqYsiLCJjYXBjdXA7Ijoi4qmHIiwiY2FwZG90OyI6IuKpgCIsIkNhcGl0YWxEaWZmZXJlbnRpYWxEOyI6IuKFhSIsImNhcHM7Ijoi4oip77iAIiwiY2FyZXQ7Ijoi4oGBIiwiY2Fyb247Ijoiy4ciLCJDYXlsZXlzOyI6IuKErSIsImNjYXBzOyI6IuKpjSIsIkNjYXJvbjsiOiLEjCIsImNjYXJvbjsiOiLEjSIsIkNjZWRpbDsiOiLDhyIsQ2NlZGlsOiLDhyIsImNjZWRpbDsiOiLDpyIsY2NlZGlsOiLDpyIsIkNjaXJjOyI6IsSIIiwiY2NpcmM7IjoixIkiLCJDY29uaW50OyI6IuKIsCIsImNjdXBzOyI6IuKpjCIsImNjdXBzc207Ijoi4qmQIiwiQ2RvdDsiOiLEiiIsImNkb3Q7IjoixIsiLCJjZWRpbDsiOiLCuCIsY2VkaWw6IsK4IiwiQ2VkaWxsYTsiOiLCuCIsImNlbXB0eXY7Ijoi4qayIiwiY2VudDsiOiLCoiIsY2VudDoiwqIiLCJDZW50ZXJEb3Q7IjoiwrciLCJjZW50ZXJkb3Q7IjoiwrciLCJDZnI7Ijoi4oStIiwiY2ZyOyI6IvCdlKAiLCJDSGN5OyI6ItCnIiwiY2hjeTsiOiLRhyIsImNoZWNrOyI6IuKckyIsImNoZWNrbWFyazsiOiLinJMiLCJDaGk7IjoizqciLCJjaGk7Ijoiz4ciLCJjaXI7Ijoi4peLIiwiY2lyYzsiOiLLhiIsImNpcmNlcTsiOiLiiZciLCJjaXJjbGVhcnJvd2xlZnQ7Ijoi4oa6IiwiY2lyY2xlYXJyb3dyaWdodDsiOiLihrsiLCJjaXJjbGVkYXN0OyI6IuKKmyIsImNpcmNsZWRjaXJjOyI6IuKKmiIsImNpcmNsZWRkYXNoOyI6IuKKnSIsIkNpcmNsZURvdDsiOiLiipkiLCJjaXJjbGVkUjsiOiLCriIsImNpcmNsZWRTOyI6IuKTiCIsIkNpcmNsZU1pbnVzOyI6IuKKliIsIkNpcmNsZVBsdXM7Ijoi4oqVIiwiQ2lyY2xlVGltZXM7Ijoi4oqXIiwiY2lyRTsiOiLip4MiLCJjaXJlOyI6IuKJlyIsImNpcmZuaW50OyI6IuKokCIsImNpcm1pZDsiOiLiq68iLCJjaXJzY2lyOyI6IuKngiIsIkNsb2Nrd2lzZUNvbnRvdXJJbnRlZ3JhbDsiOiLiiLIiLCJDbG9zZUN1cmx5RG91YmxlUXVvdGU7Ijoi4oCdIiwiQ2xvc2VDdXJseVF1b3RlOyI6IuKAmSIsImNsdWJzOyI6IuKZoyIsImNsdWJzdWl0OyI6IuKZoyIsIkNvbG9uOyI6IuKItyIsImNvbG9uOyI6IjoiLCJDb2xvbmU7Ijoi4qm0IiwiY29sb25lOyI6IuKJlCIsImNvbG9uZXE7Ijoi4omUIiwiY29tbWE7IjoiLCIsImNvbW1hdDsiOiJAIiwiY29tcDsiOiLiiIEiLCJjb21wZm47Ijoi4oiYIiwiY29tcGxlbWVudDsiOiLiiIEiLCJjb21wbGV4ZXM7Ijoi4oSCIiwiY29uZzsiOiLiiYUiLCJjb25nZG90OyI6IuKprSIsIkNvbmdydWVudDsiOiLiiaEiLCJDb25pbnQ7Ijoi4oivIiwiY29uaW50OyI6IuKIriIsIkNvbnRvdXJJbnRlZ3JhbDsiOiLiiK4iLCJDb3BmOyI6IuKEgiIsImNvcGY7Ijoi8J2VlCIsImNvcHJvZDsiOiLiiJAiLCJDb3Byb2R1Y3Q7Ijoi4oiQIiwiQ09QWTsiOiLCqSIsQ09QWToiwqkiLCJjb3B5OyI6IsKpIixjb3B5OiLCqSIsImNvcHlzcjsiOiLihJciLCJDb3VudGVyQ2xvY2t3aXNlQ29udG91ckludGVncmFsOyI6IuKIsyIsImNyYXJyOyI6IuKGtSIsIkNyb3NzOyI6IuKoryIsImNyb3NzOyI6IuKclyIsIkNzY3I7Ijoi8J2SniIsImNzY3I7Ijoi8J2SuCIsImNzdWI7Ijoi4quPIiwiY3N1YmU7Ijoi4quRIiwiY3N1cDsiOiLiq5AiLCJjc3VwZTsiOiLiq5IiLCJjdGRvdDsiOiLii68iLCJjdWRhcnJsOyI6IuKkuCIsImN1ZGFycnI7Ijoi4qS1IiwiY3VlcHI7Ijoi4oueIiwiY3Vlc2M7Ijoi4oufIiwiY3VsYXJyOyI6IuKGtiIsImN1bGFycnA7Ijoi4qS9IiwiQ3VwOyI6IuKLkyIsImN1cDsiOiLiiKoiLCJjdXBicmNhcDsiOiLiqYgiLCJDdXBDYXA7Ijoi4omNIiwiY3VwY2FwOyI6IuKphiIsImN1cGN1cDsiOiLiqYoiLCJjdXBkb3Q7Ijoi4oqNIiwiY3Vwb3I7Ijoi4qmFIiwiY3VwczsiOiLiiKrvuIAiLCJjdXJhcnI7Ijoi4oa3IiwiY3VyYXJybTsiOiLipLwiLCJjdXJseWVxcHJlYzsiOiLii54iLCJjdXJseWVxc3VjYzsiOiLii58iLCJjdXJseXZlZTsiOiLii44iLCJjdXJseXdlZGdlOyI6IuKLjyIsImN1cnJlbjsiOiLCpCIsY3VycmVuOiLCpCIsImN1cnZlYXJyb3dsZWZ0OyI6IuKGtiIsImN1cnZlYXJyb3dyaWdodDsiOiLihrciLCJjdXZlZTsiOiLii44iLCJjdXdlZDsiOiLii48iLCJjd2NvbmludDsiOiLiiLIiLCJjd2ludDsiOiLiiLEiLCJjeWxjdHk7Ijoi4oytIiwiRGFnZ2VyOyI6IuKAoSIsImRhZ2dlcjsiOiLigKAiLCJkYWxldGg7Ijoi4oS4IiwiRGFycjsiOiLihqEiLCJkQXJyOyI6IuKHkyIsImRhcnI7Ijoi4oaTIiwiZGFzaDsiOiLigJAiLCJEYXNodjsiOiLiq6QiLCJkYXNodjsiOiLiiqMiLCJkYmthcm93OyI6IuKkjyIsImRibGFjOyI6IsudIiwiRGNhcm9uOyI6IsSOIiwiZGNhcm9uOyI6IsSPIiwiRGN5OyI6ItCUIiwiZGN5OyI6ItC0IiwiREQ7Ijoi4oWFIiwiZGQ7Ijoi4oWGIiwiZGRhZ2dlcjsiOiLigKEiLCJkZGFycjsiOiLih4oiLCJERG90cmFoZDsiOiLipJEiLCJkZG90c2VxOyI6IuKptyIsImRlZzsiOiLCsCIsZGVnOiLCsCIsIkRlbDsiOiLiiIciLCJEZWx0YTsiOiLOlCIsImRlbHRhOyI6Is60IiwiZGVtcHR5djsiOiLiprEiLCJkZmlzaHQ7Ijoi4qW/IiwiRGZyOyI6IvCdlIciLCJkZnI7Ijoi8J2UoSIsImRIYXI7Ijoi4qWlIiwiZGhhcmw7Ijoi4oeDIiwiZGhhcnI7Ijoi4oeCIiwiRGlhY3JpdGljYWxBY3V0ZTsiOiLCtCIsIkRpYWNyaXRpY2FsRG90OyI6IsuZIiwiRGlhY3JpdGljYWxEb3VibGVBY3V0ZTsiOiLLnSIsIkRpYWNyaXRpY2FsR3JhdmU7IjoiYCIsIkRpYWNyaXRpY2FsVGlsZGU7Ijoiy5wiLCJkaWFtOyI6IuKLhCIsIkRpYW1vbmQ7Ijoi4ouEIiwiZGlhbW9uZDsiOiLii4QiLCJkaWFtb25kc3VpdDsiOiLimaYiLCJkaWFtczsiOiLimaYiLCJkaWU7IjoiwqgiLCJEaWZmZXJlbnRpYWxEOyI6IuKFhiIsImRpZ2FtbWE7Ijoiz50iLCJkaXNpbjsiOiLii7IiLCJkaXY7Ijoiw7ciLCJkaXZpZGU7Ijoiw7ciLGRpdmlkZToiw7ciLCJkaXZpZGVvbnRpbWVzOyI6IuKLhyIsImRpdm9ueDsiOiLii4ciLCJESmN5OyI6ItCCIiwiZGpjeTsiOiLRkiIsImRsY29ybjsiOiLijJ4iLCJkbGNyb3A7Ijoi4oyNIiwiZG9sbGFyOyI6IiQiLCJEb3BmOyI6IvCdlLsiLCJkb3BmOyI6IvCdlZUiLCJEb3Q7IjoiwqgiLCJkb3Q7Ijoiy5kiLCJEb3REb3Q7Ijoi4oOcIiwiZG90ZXE7Ijoi4omQIiwiZG90ZXFkb3Q7Ijoi4omRIiwiRG90RXF1YWw7Ijoi4omQIiwiZG90bWludXM7Ijoi4oi4IiwiZG90cGx1czsiOiLiiJQiLCJkb3RzcXVhcmU7Ijoi4oqhIiwiZG91YmxlYmFyd2VkZ2U7Ijoi4oyGIiwiRG91YmxlQ29udG91ckludGVncmFsOyI6IuKIryIsIkRvdWJsZURvdDsiOiLCqCIsIkRvdWJsZURvd25BcnJvdzsiOiLih5MiLCJEb3VibGVMZWZ0QXJyb3c7Ijoi4oeQIiwiRG91YmxlTGVmdFJpZ2h0QXJyb3c7Ijoi4oeUIiwiRG91YmxlTGVmdFRlZTsiOiLiq6QiLCJEb3VibGVMb25nTGVmdEFycm93OyI6IuKfuCIsIkRvdWJsZUxvbmdMZWZ0UmlnaHRBcnJvdzsiOiLin7oiLCJEb3VibGVMb25nUmlnaHRBcnJvdzsiOiLin7kiLCJEb3VibGVSaWdodEFycm93OyI6IuKHkiIsIkRvdWJsZVJpZ2h0VGVlOyI6IuKKqCIsIkRvdWJsZVVwQXJyb3c7Ijoi4oeRIiwiRG91YmxlVXBEb3duQXJyb3c7Ijoi4oeVIiwiRG91YmxlVmVydGljYWxCYXI7Ijoi4oilIiwiRG93bkFycm93OyI6IuKGkyIsIkRvd25hcnJvdzsiOiLih5MiLCJkb3duYXJyb3c7Ijoi4oaTIiwiRG93bkFycm93QmFyOyI6IuKkkyIsIkRvd25BcnJvd1VwQXJyb3c7Ijoi4oe1IiwiRG93bkJyZXZlOyI6IsyRIiwiZG93bmRvd25hcnJvd3M7Ijoi4oeKIiwiZG93bmhhcnBvb25sZWZ0OyI6IuKHgyIsImRvd25oYXJwb29ucmlnaHQ7Ijoi4oeCIiwiRG93bkxlZnRSaWdodFZlY3RvcjsiOiLipZAiLCJEb3duTGVmdFRlZVZlY3RvcjsiOiLipZ4iLCJEb3duTGVmdFZlY3RvcjsiOiLihr0iLCJEb3duTGVmdFZlY3RvckJhcjsiOiLipZYiLCJEb3duUmlnaHRUZWVWZWN0b3I7Ijoi4qWfIiwiRG93blJpZ2h0VmVjdG9yOyI6IuKHgSIsIkRvd25SaWdodFZlY3RvckJhcjsiOiLipZciLCJEb3duVGVlOyI6IuKKpCIsIkRvd25UZWVBcnJvdzsiOiLihqciLCJkcmJrYXJvdzsiOiLipJAiLCJkcmNvcm47Ijoi4oyfIiwiZHJjcm9wOyI6IuKMjCIsIkRzY3I7Ijoi8J2SnyIsImRzY3I7Ijoi8J2SuSIsIkRTY3k7Ijoi0IUiLCJkc2N5OyI6ItGVIiwiZHNvbDsiOiLip7YiLCJEc3Ryb2s7IjoixJAiLCJkc3Ryb2s7IjoixJEiLCJkdGRvdDsiOiLii7EiLCJkdHJpOyI6IuKWvyIsImR0cmlmOyI6IuKWviIsImR1YXJyOyI6IuKHtSIsImR1aGFyOyI6IuKlryIsImR3YW5nbGU7Ijoi4qamIiwiRFpjeTsiOiLQjyIsImR6Y3k7Ijoi0Z8iLCJkemlncmFycjsiOiLin78iLCJFYWN1dGU7Ijoiw4kiLEVhY3V0ZToiw4kiLCJlYWN1dGU7Ijoiw6kiLGVhY3V0ZToiw6kiLCJlYXN0ZXI7Ijoi4qmuIiwiRWNhcm9uOyI6IsSaIiwiZWNhcm9uOyI6IsSbIiwiZWNpcjsiOiLiiZYiLCJFY2lyYzsiOiLDiiIsRWNpcmM6IsOKIiwiZWNpcmM7Ijoiw6oiLGVjaXJjOiLDqiIsImVjb2xvbjsiOiLiiZUiLCJFY3k7Ijoi0K0iLCJlY3k7Ijoi0Y0iLCJlRERvdDsiOiLiqbciLCJFZG90OyI6IsSWIiwiZURvdDsiOiLiiZEiLCJlZG90OyI6IsSXIiwiZWU7Ijoi4oWHIiwiZWZEb3Q7Ijoi4omSIiwiRWZyOyI6IvCdlIgiLCJlZnI7Ijoi8J2UoiIsImVnOyI6IuKqmiIsIkVncmF2ZTsiOiLDiCIsRWdyYXZlOiLDiCIsImVncmF2ZTsiOiLDqCIsZWdyYXZlOiLDqCIsImVnczsiOiLiqpYiLCJlZ3Nkb3Q7Ijoi4qqYIiwiZWw7Ijoi4qqZIiwiRWxlbWVudDsiOiLiiIgiLCJlbGludGVyczsiOiLij6ciLCJlbGw7Ijoi4oSTIiwiZWxzOyI6IuKqlSIsImVsc2RvdDsiOiLiqpciLCJFbWFjcjsiOiLEkiIsImVtYWNyOyI6IsSTIiwiZW1wdHk7Ijoi4oiFIiwiZW1wdHlzZXQ7Ijoi4oiFIiwiRW1wdHlTbWFsbFNxdWFyZTsiOiLil7siLCJlbXB0eXY7Ijoi4oiFIiwiRW1wdHlWZXJ5U21hbGxTcXVhcmU7Ijoi4parIiwiZW1zcDsiOiLigIMiLCJlbXNwMTM7Ijoi4oCEIiwiZW1zcDE0OyI6IuKAhSIsIkVORzsiOiLFiiIsImVuZzsiOiLFiyIsImVuc3A7Ijoi4oCCIiwiRW9nb247IjoixJgiLCJlb2dvbjsiOiLEmSIsIkVvcGY7Ijoi8J2UvCIsImVvcGY7Ijoi8J2VliIsImVwYXI7Ijoi4ouVIiwiZXBhcnNsOyI6IuKnoyIsImVwbHVzOyI6IuKpsSIsImVwc2k7IjoizrUiLCJFcHNpbG9uOyI6Is6VIiwiZXBzaWxvbjsiOiLOtSIsImVwc2l2OyI6Is+1IiwiZXFjaXJjOyI6IuKJliIsImVxY29sb247Ijoi4omVIiwiZXFzaW07Ijoi4omCIiwiZXFzbGFudGd0cjsiOiLiqpYiLCJlcXNsYW50bGVzczsiOiLiqpUiLCJFcXVhbDsiOiLiqbUiLCJlcXVhbHM7IjoiPSIsIkVxdWFsVGlsZGU7Ijoi4omCIiwiZXF1ZXN0OyI6IuKJnyIsIkVxdWlsaWJyaXVtOyI6IuKHjCIsImVxdWl2OyI6IuKJoSIsImVxdWl2REQ7Ijoi4qm4IiwiZXF2cGFyc2w7Ijoi4qelIiwiZXJhcnI7Ijoi4qWxIiwiZXJEb3Q7Ijoi4omTIiwiRXNjcjsiOiLihLAiLCJlc2NyOyI6IuKEryIsImVzZG90OyI6IuKJkCIsIkVzaW07Ijoi4qmzIiwiZXNpbTsiOiLiiYIiLCJFdGE7IjoizpciLCJldGE7IjoizrciLCJFVEg7Ijoiw5AiLEVUSDoiw5AiLCJldGg7Ijoiw7AiLGV0aDoiw7AiLCJFdW1sOyI6IsOLIixFdW1sOiLDiyIsImV1bWw7Ijoiw6siLGV1bWw6IsOrIiwiZXVybzsiOiLigqwiLCJleGNsOyI6IiEiLCJleGlzdDsiOiLiiIMiLCJFeGlzdHM7Ijoi4oiDIiwiZXhwZWN0YXRpb247Ijoi4oSwIiwiRXhwb25lbnRpYWxFOyI6IuKFhyIsImV4cG9uZW50aWFsZTsiOiLihYciLCJmYWxsaW5nZG90c2VxOyI6IuKJkiIsIkZjeTsiOiLQpCIsImZjeTsiOiLRhCIsImZlbWFsZTsiOiLimYAiLCJmZmlsaWc7Ijoi76yDIiwiZmZsaWc7Ijoi76yAIiwiZmZsbGlnOyI6Iu+shCIsIkZmcjsiOiLwnZSJIiwiZmZyOyI6IvCdlKMiLCJmaWxpZzsiOiLvrIEiLCJGaWxsZWRTbWFsbFNxdWFyZTsiOiLil7wiLCJGaWxsZWRWZXJ5U21hbGxTcXVhcmU7Ijoi4paqIiwiZmpsaWc7IjoiZmoiLCJmbGF0OyI6IuKZrSIsImZsbGlnOyI6Iu+sgiIsImZsdG5zOyI6IuKWsSIsImZub2Y7IjoixpIiLCJGb3BmOyI6IvCdlL0iLCJmb3BmOyI6IvCdlZciLCJGb3JBbGw7Ijoi4oiAIiwiZm9yYWxsOyI6IuKIgCIsImZvcms7Ijoi4ouUIiwiZm9ya3Y7Ijoi4quZIiwiRm91cmllcnRyZjsiOiLihLEiLCJmcGFydGludDsiOiLiqI0iLCJmcmFjMTI7Ijoiwr0iLGZyYWMxMjoiwr0iLCJmcmFjMTM7Ijoi4oWTIiwiZnJhYzE0OyI6IsK8IixmcmFjMTQ6IsK8IiwiZnJhYzE1OyI6IuKFlSIsImZyYWMxNjsiOiLihZkiLCJmcmFjMTg7Ijoi4oWbIiwiZnJhYzIzOyI6IuKFlCIsImZyYWMyNTsiOiLihZYiLCJmcmFjMzQ7Ijoiwr4iLGZyYWMzNDoiwr4iLCJmcmFjMzU7Ijoi4oWXIiwiZnJhYzM4OyI6IuKFnCIsImZyYWM0NTsiOiLihZgiLCJmcmFjNTY7Ijoi4oWaIiwiZnJhYzU4OyI6IuKFnSIsImZyYWM3ODsiOiLihZ4iLCJmcmFzbDsiOiLigYQiLCJmcm93bjsiOiLijKIiLCJGc2NyOyI6IuKEsSIsImZzY3I7Ijoi8J2SuyIsImdhY3V0ZTsiOiLHtSIsIkdhbW1hOyI6Is6TIiwiZ2FtbWE7IjoizrMiLCJHYW1tYWQ7Ijoiz5wiLCJnYW1tYWQ7Ijoiz50iLCJnYXA7Ijoi4qqGIiwiR2JyZXZlOyI6IsSeIiwiZ2JyZXZlOyI6IsSfIiwiR2NlZGlsOyI6IsSiIiwiR2NpcmM7IjoixJwiLCJnY2lyYzsiOiLEnSIsIkdjeTsiOiLQkyIsImdjeTsiOiLQsyIsIkdkb3Q7IjoixKAiLCJnZG90OyI6IsShIiwiZ0U7Ijoi4omnIiwiZ2U7Ijoi4omlIiwiZ0VsOyI6IuKqjCIsImdlbDsiOiLii5siLCJnZXE7Ijoi4omlIiwiZ2VxcTsiOiLiiaciLCJnZXFzbGFudDsiOiLiqb4iLCJnZXM7Ijoi4qm+IiwiZ2VzY2M7Ijoi4qqpIiwiZ2VzZG90OyI6IuKqgCIsImdlc2RvdG87Ijoi4qqCIiwiZ2VzZG90b2w7Ijoi4qqEIiwiZ2VzbDsiOiLii5vvuIAiLCJnZXNsZXM7Ijoi4qqUIiwiR2ZyOyI6IvCdlIoiLCJnZnI7Ijoi8J2UpCIsIkdnOyI6IuKLmSIsImdnOyI6IuKJqyIsImdnZzsiOiLii5kiLCJnaW1lbDsiOiLihLciLCJHSmN5OyI6ItCDIiwiZ2pjeTsiOiLRkyIsImdsOyI6IuKJtyIsImdsYTsiOiLiqqUiLCJnbEU7Ijoi4qqSIiwiZ2xqOyI6IuKqpCIsImduYXA7Ijoi4qqKIiwiZ25hcHByb3g7Ijoi4qqKIiwiZ25FOyI6IuKJqSIsImduZTsiOiLiqogiLCJnbmVxOyI6IuKqiCIsImduZXFxOyI6IuKJqSIsImduc2ltOyI6IuKLpyIsIkdvcGY7Ijoi8J2UviIsImdvcGY7Ijoi8J2VmCIsImdyYXZlOyI6ImAiLCJHcmVhdGVyRXF1YWw7Ijoi4omlIiwiR3JlYXRlckVxdWFsTGVzczsiOiLii5siLCJHcmVhdGVyRnVsbEVxdWFsOyI6IuKJpyIsIkdyZWF0ZXJHcmVhdGVyOyI6IuKqoiIsIkdyZWF0ZXJMZXNzOyI6IuKJtyIsIkdyZWF0ZXJTbGFudEVxdWFsOyI6IuKpviIsIkdyZWF0ZXJUaWxkZTsiOiLiibMiLCJHc2NyOyI6IvCdkqIiLCJnc2NyOyI6IuKEiiIsImdzaW07Ijoi4omzIiwiZ3NpbWU7Ijoi4qqOIiwiZ3NpbWw7Ijoi4qqQIiwiR1Q7IjoiPiIsR1Q6Ij4iLCJHdDsiOiLiiasiLCJndDsiOiI+IixndDoiPiIsImd0Y2M7Ijoi4qqnIiwiZ3RjaXI7Ijoi4qm6IiwiZ3Rkb3Q7Ijoi4ouXIiwiZ3RsUGFyOyI6IuKmlSIsImd0cXVlc3Q7Ijoi4qm8IiwiZ3RyYXBwcm94OyI6IuKqhiIsImd0cmFycjsiOiLipbgiLCJndHJkb3Q7Ijoi4ouXIiwiZ3RyZXFsZXNzOyI6IuKLmyIsImd0cmVxcWxlc3M7Ijoi4qqMIiwiZ3RybGVzczsiOiLiibciLCJndHJzaW07Ijoi4omzIiwiZ3ZlcnRuZXFxOyI6IuKJqe+4gCIsImd2bkU7Ijoi4omp77iAIiwiSGFjZWs7Ijoiy4ciLCJoYWlyc3A7Ijoi4oCKIiwiaGFsZjsiOiLCvSIsImhhbWlsdDsiOiLihIsiLCJIQVJEY3k7Ijoi0KoiLCJoYXJkY3k7Ijoi0YoiLCJoQXJyOyI6IuKHlCIsImhhcnI7Ijoi4oaUIiwiaGFycmNpcjsiOiLipYgiLCJoYXJydzsiOiLihq0iLCJIYXQ7IjoiXiIsImhiYXI7Ijoi4oSPIiwiSGNpcmM7IjoixKQiLCJoY2lyYzsiOiLEpSIsImhlYXJ0czsiOiLimaUiLCJoZWFydHN1aXQ7Ijoi4pmlIiwiaGVsbGlwOyI6IuKApiIsImhlcmNvbjsiOiLiirkiLCJIZnI7Ijoi4oSMIiwiaGZyOyI6IvCdlKUiLCJIaWxiZXJ0U3BhY2U7Ijoi4oSLIiwiaGtzZWFyb3c7Ijoi4qSlIiwiaGtzd2Fyb3c7Ijoi4qSmIiwiaG9hcnI7Ijoi4oe/IiwiaG9tdGh0OyI6IuKIuyIsImhvb2tsZWZ0YXJyb3c7Ijoi4oapIiwiaG9va3JpZ2h0YXJyb3c7Ijoi4oaqIiwiSG9wZjsiOiLihI0iLCJob3BmOyI6IvCdlZkiLCJob3JiYXI7Ijoi4oCVIiwiSG9yaXpvbnRhbExpbmU7Ijoi4pSAIiwiSHNjcjsiOiLihIsiLCJoc2NyOyI6IvCdkr0iLCJoc2xhc2g7Ijoi4oSPIiwiSHN0cm9rOyI6IsSmIiwiaHN0cm9rOyI6IsSnIiwiSHVtcERvd25IdW1wOyI6IuKJjiIsIkh1bXBFcXVhbDsiOiLiiY8iLCJoeWJ1bGw7Ijoi4oGDIiwiaHlwaGVuOyI6IuKAkCIsIklhY3V0ZTsiOiLDjSIsSWFjdXRlOiLDjSIsImlhY3V0ZTsiOiLDrSIsaWFjdXRlOiLDrSIsImljOyI6IuKBoyIsIkljaXJjOyI6IsOOIixJY2lyYzoiw44iLCJpY2lyYzsiOiLDriIsaWNpcmM6IsOuIiwiSWN5OyI6ItCYIiwiaWN5OyI6ItC4IiwiSWRvdDsiOiLEsCIsIklFY3k7Ijoi0JUiLCJpZWN5OyI6ItC1IiwiaWV4Y2w7IjoiwqEiLGlleGNsOiLCoSIsImlmZjsiOiLih5QiLCJJZnI7Ijoi4oSRIiwiaWZyOyI6IvCdlKYiLCJJZ3JhdmU7Ijoiw4wiLElncmF2ZToiw4wiLCJpZ3JhdmU7Ijoiw6wiLGlncmF2ZToiw6wiLCJpaTsiOiLihYgiLCJpaWlpbnQ7Ijoi4qiMIiwiaWlpbnQ7Ijoi4oitIiwiaWluZmluOyI6IuKnnCIsImlpb3RhOyI6IuKEqSIsIklKbGlnOyI6IsSyIiwiaWpsaWc7IjoixLMiLCJJbTsiOiLihJEiLCJJbWFjcjsiOiLEqiIsImltYWNyOyI6IsSrIiwiaW1hZ2U7Ijoi4oSRIiwiSW1hZ2luYXJ5STsiOiLihYgiLCJpbWFnbGluZTsiOiLihJAiLCJpbWFncGFydDsiOiLihJEiLCJpbWF0aDsiOiLEsSIsImltb2Y7Ijoi4oq3IiwiaW1wZWQ7IjoixrUiLCJJbXBsaWVzOyI6IuKHkiIsImluOyI6IuKIiCIsImluY2FyZTsiOiLihIUiLCJpbmZpbjsiOiLiiJ4iLCJpbmZpbnRpZTsiOiLip50iLCJpbm9kb3Q7IjoixLEiLCJJbnQ7Ijoi4oisIiwiaW50OyI6IuKIqyIsImludGNhbDsiOiLiiroiLCJpbnRlZ2VyczsiOiLihKQiLCJJbnRlZ3JhbDsiOiLiiKsiLCJpbnRlcmNhbDsiOiLiiroiLCJJbnRlcnNlY3Rpb247Ijoi4ouCIiwiaW50bGFyaGs7Ijoi4qiXIiwiaW50cHJvZDsiOiLiqLwiLCJJbnZpc2libGVDb21tYTsiOiLigaMiLCJJbnZpc2libGVUaW1lczsiOiLigaIiLCJJT2N5OyI6ItCBIiwiaW9jeTsiOiLRkSIsIklvZ29uOyI6IsSuIiwiaW9nb247IjoixK8iLCJJb3BmOyI6IvCdlYAiLCJpb3BmOyI6IvCdlZoiLCJJb3RhOyI6Is6ZIiwiaW90YTsiOiLOuSIsImlwcm9kOyI6IuKovCIsImlxdWVzdDsiOiLCvyIsaXF1ZXN0OiLCvyIsIklzY3I7Ijoi4oSQIiwiaXNjcjsiOiLwnZK+IiwiaXNpbjsiOiLiiIgiLCJpc2luZG90OyI6IuKLtSIsImlzaW5FOyI6IuKLuSIsImlzaW5zOyI6IuKLtCIsImlzaW5zdjsiOiLii7MiLCJpc2ludjsiOiLiiIgiLCJpdDsiOiLigaIiLCJJdGlsZGU7IjoixKgiLCJpdGlsZGU7IjoixKkiLCJJdWtjeTsiOiLQhiIsIml1a2N5OyI6ItGWIiwiSXVtbDsiOiLDjyIsSXVtbDoiw48iLCJpdW1sOyI6IsOvIixpdW1sOiLDryIsIkpjaXJjOyI6IsS0IiwiamNpcmM7IjoixLUiLCJKY3k7Ijoi0JkiLCJqY3k7Ijoi0LkiLCJKZnI7Ijoi8J2UjSIsImpmcjsiOiLwnZSnIiwiam1hdGg7IjoiyLciLCJKb3BmOyI6IvCdlYEiLCJqb3BmOyI6IvCdlZsiLCJKc2NyOyI6IvCdkqUiLCJqc2NyOyI6IvCdkr8iLCJKc2VyY3k7Ijoi0IgiLCJqc2VyY3k7Ijoi0ZgiLCJKdWtjeTsiOiLQhCIsImp1a2N5OyI6ItGUIiwiS2FwcGE7IjoizpoiLCJrYXBwYTsiOiLOuiIsImthcHBhdjsiOiLPsCIsIktjZWRpbDsiOiLEtiIsImtjZWRpbDsiOiLEtyIsIktjeTsiOiLQmiIsImtjeTsiOiLQuiIsIktmcjsiOiLwnZSOIiwia2ZyOyI6IvCdlKgiLCJrZ3JlZW47IjoixLgiLCJLSGN5OyI6ItClIiwia2hjeTsiOiLRhSIsIktKY3k7Ijoi0IwiLCJramN5OyI6ItGcIiwiS29wZjsiOiLwnZWCIiwia29wZjsiOiLwnZWcIiwiS3NjcjsiOiLwnZKmIiwia3NjcjsiOiLwnZOAIiwibEFhcnI7Ijoi4oeaIiwiTGFjdXRlOyI6IsS5IiwibGFjdXRlOyI6IsS6IiwibGFlbXB0eXY7Ijoi4qa0IiwibGFncmFuOyI6IuKEkiIsIkxhbWJkYTsiOiLOmyIsImxhbWJkYTsiOiLOuyIsIkxhbmc7Ijoi4p+qIiwibGFuZzsiOiLin6giLCJsYW5nZDsiOiLippEiLCJsYW5nbGU7Ijoi4p+oIiwibGFwOyI6IuKqhSIsIkxhcGxhY2V0cmY7Ijoi4oSSIiwibGFxdW87IjoiwqsiLGxhcXVvOiLCqyIsIkxhcnI7Ijoi4oaeIiwibEFycjsiOiLih5AiLCJsYXJyOyI6IuKGkCIsImxhcnJiOyI6IuKHpCIsImxhcnJiZnM7Ijoi4qSfIiwibGFycmZzOyI6IuKknSIsImxhcnJoazsiOiLihqkiLCJsYXJybHA7Ijoi4oarIiwibGFycnBsOyI6IuKkuSIsImxhcnJzaW07Ijoi4qWzIiwibGFycnRsOyI6IuKGoiIsImxhdDsiOiLiqqsiLCJsQXRhaWw7Ijoi4qSbIiwibGF0YWlsOyI6IuKkmSIsImxhdGU7Ijoi4qqtIiwibGF0ZXM7Ijoi4qqt77iAIiwibEJhcnI7Ijoi4qSOIiwibGJhcnI7Ijoi4qSMIiwibGJicms7Ijoi4p2yIiwibGJyYWNlOyI6InsiLCJsYnJhY2s7IjoiWyIsImxicmtlOyI6IuKmiyIsImxicmtzbGQ7Ijoi4qaPIiwibGJya3NsdTsiOiLipo0iLCJMY2Fyb247IjoixL0iLCJsY2Fyb247IjoixL4iLCJMY2VkaWw7IjoixLsiLCJsY2VkaWw7IjoixLwiLCJsY2VpbDsiOiLijIgiLCJsY3ViOyI6InsiLCJMY3k7Ijoi0JsiLCJsY3k7Ijoi0LsiLCJsZGNhOyI6IuKktiIsImxkcXVvOyI6IuKAnCIsImxkcXVvcjsiOiLigJ4iLCJsZHJkaGFyOyI6IuKlpyIsImxkcnVzaGFyOyI6IuKliyIsImxkc2g7Ijoi4oayIiwibEU7Ijoi4ommIiwibGU7Ijoi4omkIiwiTGVmdEFuZ2xlQnJhY2tldDsiOiLin6giLCJMZWZ0QXJyb3c7Ijoi4oaQIiwiTGVmdGFycm93OyI6IuKHkCIsImxlZnRhcnJvdzsiOiLihpAiLCJMZWZ0QXJyb3dCYXI7Ijoi4oekIiwiTGVmdEFycm93UmlnaHRBcnJvdzsiOiLih4YiLCJsZWZ0YXJyb3d0YWlsOyI6IuKGoiIsIkxlZnRDZWlsaW5nOyI6IuKMiCIsIkxlZnREb3VibGVCcmFja2V0OyI6IuKfpiIsIkxlZnREb3duVGVlVmVjdG9yOyI6IuKloSIsIkxlZnREb3duVmVjdG9yOyI6IuKHgyIsIkxlZnREb3duVmVjdG9yQmFyOyI6IuKlmSIsIkxlZnRGbG9vcjsiOiLijIoiLCJsZWZ0aGFycG9vbmRvd247Ijoi4oa9IiwibGVmdGhhcnBvb251cDsiOiLihrwiLCJsZWZ0bGVmdGFycm93czsiOiLih4ciLCJMZWZ0UmlnaHRBcnJvdzsiOiLihpQiLCJMZWZ0cmlnaHRhcnJvdzsiOiLih5QiLCJsZWZ0cmlnaHRhcnJvdzsiOiLihpQiLCJsZWZ0cmlnaHRhcnJvd3M7Ijoi4oeGIiwibGVmdHJpZ2h0aGFycG9vbnM7Ijoi4oeLIiwibGVmdHJpZ2h0c3F1aWdhcnJvdzsiOiLihq0iLCJMZWZ0UmlnaHRWZWN0b3I7Ijoi4qWOIiwiTGVmdFRlZTsiOiLiiqMiLCJMZWZ0VGVlQXJyb3c7Ijoi4oakIiwiTGVmdFRlZVZlY3RvcjsiOiLipZoiLCJsZWZ0dGhyZWV0aW1lczsiOiLii4siLCJMZWZ0VHJpYW5nbGU7Ijoi4oqyIiwiTGVmdFRyaWFuZ2xlQmFyOyI6IuKnjyIsIkxlZnRUcmlhbmdsZUVxdWFsOyI6IuKKtCIsIkxlZnRVcERvd25WZWN0b3I7Ijoi4qWRIiwiTGVmdFVwVGVlVmVjdG9yOyI6IuKloCIsIkxlZnRVcFZlY3RvcjsiOiLihr8iLCJMZWZ0VXBWZWN0b3JCYXI7Ijoi4qWYIiwiTGVmdFZlY3RvcjsiOiLihrwiLCJMZWZ0VmVjdG9yQmFyOyI6IuKlkiIsImxFZzsiOiLiqosiLCJsZWc7Ijoi4ouaIiwibGVxOyI6IuKJpCIsImxlcXE7Ijoi4ommIiwibGVxc2xhbnQ7Ijoi4qm9IiwibGVzOyI6IuKpvSIsImxlc2NjOyI6IuKqqCIsImxlc2RvdDsiOiLiqb8iLCJsZXNkb3RvOyI6IuKqgSIsImxlc2RvdG9yOyI6IuKqgyIsImxlc2c7Ijoi4oua77iAIiwibGVzZ2VzOyI6IuKqkyIsImxlc3NhcHByb3g7Ijoi4qqFIiwibGVzc2RvdDsiOiLii5YiLCJsZXNzZXFndHI7Ijoi4ouaIiwibGVzc2VxcWd0cjsiOiLiqosiLCJMZXNzRXF1YWxHcmVhdGVyOyI6IuKLmiIsIkxlc3NGdWxsRXF1YWw7Ijoi4ommIiwiTGVzc0dyZWF0ZXI7Ijoi4om2IiwibGVzc2d0cjsiOiLiibYiLCJMZXNzTGVzczsiOiLiqqEiLCJsZXNzc2ltOyI6IuKJsiIsIkxlc3NTbGFudEVxdWFsOyI6IuKpvSIsIkxlc3NUaWxkZTsiOiLiibIiLCJsZmlzaHQ7Ijoi4qW8IiwibGZsb29yOyI6IuKMiiIsIkxmcjsiOiLwnZSPIiwibGZyOyI6IvCdlKkiLCJsZzsiOiLiibYiLCJsZ0U7Ijoi4qqRIiwibEhhcjsiOiLipaIiLCJsaGFyZDsiOiLihr0iLCJsaGFydTsiOiLihrwiLCJsaGFydWw7Ijoi4qWqIiwibGhibGs7Ijoi4paEIiwiTEpjeTsiOiLQiSIsImxqY3k7Ijoi0ZkiLCJMbDsiOiLii5giLCJsbDsiOiLiiaoiLCJsbGFycjsiOiLih4ciLCJsbGNvcm5lcjsiOiLijJ4iLCJMbGVmdGFycm93OyI6IuKHmiIsImxsaGFyZDsiOiLipasiLCJsbHRyaTsiOiLil7oiLCJMbWlkb3Q7IjoixL8iLCJsbWlkb3Q7IjoixYAiLCJsbW91c3Q7Ijoi4o6wIiwibG1vdXN0YWNoZTsiOiLijrAiLCJsbmFwOyI6IuKqiSIsImxuYXBwcm94OyI6IuKqiSIsImxuRTsiOiLiiagiLCJsbmU7Ijoi4qqHIiwibG5lcTsiOiLiqociLCJsbmVxcTsiOiLiiagiLCJsbnNpbTsiOiLii6YiLCJsb2FuZzsiOiLin6wiLCJsb2FycjsiOiLih70iLCJsb2JyazsiOiLin6YiLCJMb25nTGVmdEFycm93OyI6IuKftSIsIkxvbmdsZWZ0YXJyb3c7Ijoi4p+4IiwibG9uZ2xlZnRhcnJvdzsiOiLin7UiLCJMb25nTGVmdFJpZ2h0QXJyb3c7Ijoi4p+3IiwiTG9uZ2xlZnRyaWdodGFycm93OyI6IuKfuiIsImxvbmdsZWZ0cmlnaHRhcnJvdzsiOiLin7ciLCJsb25nbWFwc3RvOyI6IuKfvCIsIkxvbmdSaWdodEFycm93OyI6IuKftiIsIkxvbmdyaWdodGFycm93OyI6IuKfuSIsImxvbmdyaWdodGFycm93OyI6IuKftiIsImxvb3BhcnJvd2xlZnQ7Ijoi4oarIiwibG9vcGFycm93cmlnaHQ7Ijoi4oasIiwibG9wYXI7Ijoi4qaFIiwiTG9wZjsiOiLwnZWDIiwibG9wZjsiOiLwnZWdIiwibG9wbHVzOyI6IuKorSIsImxvdGltZXM7Ijoi4qi0IiwibG93YXN0OyI6IuKIlyIsImxvd2JhcjsiOiJfIiwiTG93ZXJMZWZ0QXJyb3c7Ijoi4oaZIiwiTG93ZXJSaWdodEFycm93OyI6IuKGmCIsImxvejsiOiLil4oiLCJsb3plbmdlOyI6IuKXiiIsImxvemY7Ijoi4qerIiwibHBhcjsiOiIoIiwibHBhcmx0OyI6IuKmkyIsImxyYXJyOyI6IuKHhiIsImxyY29ybmVyOyI6IuKMnyIsImxyaGFyOyI6IuKHiyIsImxyaGFyZDsiOiLipa0iLCJscm07Ijoi4oCOIiwibHJ0cmk7Ijoi4oq/IiwibHNhcXVvOyI6IuKAuSIsIkxzY3I7Ijoi4oSSIiwibHNjcjsiOiLwnZOBIiwiTHNoOyI6IuKGsCIsImxzaDsiOiLihrAiLCJsc2ltOyI6IuKJsiIsImxzaW1lOyI6IuKqjSIsImxzaW1nOyI6IuKqjyIsImxzcWI7IjoiWyIsImxzcXVvOyI6IuKAmCIsImxzcXVvcjsiOiLigJoiLCJMc3Ryb2s7IjoixYEiLCJsc3Ryb2s7IjoixYIiLCJMVDsiOiI8IixMVDoiPCIsIkx0OyI6IuKJqiIsImx0OyI6IjwiLGx0OiI8IiwibHRjYzsiOiLiqqYiLCJsdGNpcjsiOiLiqbkiLCJsdGRvdDsiOiLii5YiLCJsdGhyZWU7Ijoi4ouLIiwibHRpbWVzOyI6IuKLiSIsImx0bGFycjsiOiLipbYiLCJsdHF1ZXN0OyI6IuKpuyIsImx0cmk7Ijoi4peDIiwibHRyaWU7Ijoi4oq0IiwibHRyaWY7Ijoi4peCIiwibHRyUGFyOyI6IuKmliIsImx1cmRzaGFyOyI6IuKliiIsImx1cnVoYXI7Ijoi4qWmIiwibHZlcnRuZXFxOyI6IuKJqO+4gCIsImx2bkU7Ijoi4omo77iAIiwibWFjcjsiOiLCryIsbWFjcjoiwq8iLCJtYWxlOyI6IuKZgiIsIm1hbHQ7Ijoi4pygIiwibWFsdGVzZTsiOiLinKAiLCJNYXA7Ijoi4qSFIiwibWFwOyI6IuKGpiIsIm1hcHN0bzsiOiLihqYiLCJtYXBzdG9kb3duOyI6IuKGpyIsIm1hcHN0b2xlZnQ7Ijoi4oakIiwibWFwc3RvdXA7Ijoi4oalIiwibWFya2VyOyI6IuKWriIsIm1jb21tYTsiOiLiqKkiLCJNY3k7Ijoi0JwiLCJtY3k7Ijoi0LwiLCJtZGFzaDsiOiLigJQiLCJtRERvdDsiOiLiiLoiLCJtZWFzdXJlZGFuZ2xlOyI6IuKIoSIsIk1lZGl1bVNwYWNlOyI6IuKBnyIsIk1lbGxpbnRyZjsiOiLihLMiLCJNZnI7Ijoi8J2UkCIsIm1mcjsiOiLwnZSqIiwibWhvOyI6IuKEpyIsIm1pY3JvOyI6IsK1IixtaWNybzoiwrUiLCJtaWQ7Ijoi4oijIiwibWlkYXN0OyI6IioiLCJtaWRjaXI7Ijoi4quwIiwibWlkZG90OyI6IsK3IixtaWRkb3Q6IsK3IiwibWludXM7Ijoi4oiSIiwibWludXNiOyI6IuKKnyIsIm1pbnVzZDsiOiLiiLgiLCJtaW51c2R1OyI6IuKoqiIsIk1pbnVzUGx1czsiOiLiiJMiLCJtbGNwOyI6IuKrmyIsIm1sZHI7Ijoi4oCmIiwibW5wbHVzOyI6IuKIkyIsIm1vZGVsczsiOiLiiqciLCJNb3BmOyI6IvCdlYQiLCJtb3BmOyI6IvCdlZ4iLCJtcDsiOiLiiJMiLCJNc2NyOyI6IuKEsyIsIm1zY3I7Ijoi8J2TgiIsIm1zdHBvczsiOiLiiL4iLCJNdTsiOiLOnCIsIm11OyI6Is68IiwibXVsdGltYXA7Ijoi4oq4IiwibXVtYXA7Ijoi4oq4IiwibmFibGE7Ijoi4oiHIiwiTmFjdXRlOyI6IsWDIiwibmFjdXRlOyI6IsWEIiwibmFuZzsiOiLiiKDig5IiLCJuYXA7Ijoi4omJIiwibmFwRTsiOiLiqbDMuCIsIm5hcGlkOyI6IuKJi8y4IiwibmFwb3M7IjoixYkiLCJuYXBwcm94OyI6IuKJiSIsIm5hdHVyOyI6IuKZriIsIm5hdHVyYWw7Ijoi4pmuIiwibmF0dXJhbHM7Ijoi4oSVIiwibmJzcDsiOiLCoCIsbmJzcDoiwqAiLCJuYnVtcDsiOiLiiY7MuCIsIm5idW1wZTsiOiLiiY/MuCIsIm5jYXA7Ijoi4qmDIiwiTmNhcm9uOyI6IsWHIiwibmNhcm9uOyI6IsWIIiwiTmNlZGlsOyI6IsWFIiwibmNlZGlsOyI6IsWGIiwibmNvbmc7Ijoi4omHIiwibmNvbmdkb3Q7Ijoi4qmtzLgiLCJuY3VwOyI6IuKpgiIsIk5jeTsiOiLQnSIsIm5jeTsiOiLQvSIsIm5kYXNoOyI6IuKAkyIsIm5lOyI6IuKJoCIsIm5lYXJoazsiOiLipKQiLCJuZUFycjsiOiLih5ciLCJuZWFycjsiOiLihpciLCJuZWFycm93OyI6IuKGlyIsIm5lZG90OyI6IuKJkMy4IiwiTmVnYXRpdmVNZWRpdW1TcGFjZTsiOiLigIsiLCJOZWdhdGl2ZVRoaWNrU3BhY2U7Ijoi4oCLIiwiTmVnYXRpdmVUaGluU3BhY2U7Ijoi4oCLIiwiTmVnYXRpdmVWZXJ5VGhpblNwYWNlOyI6IuKAiyIsIm5lcXVpdjsiOiLiiaIiLCJuZXNlYXI7Ijoi4qSoIiwibmVzaW07Ijoi4omCzLgiLCJOZXN0ZWRHcmVhdGVyR3JlYXRlcjsiOiLiiasiLCJOZXN0ZWRMZXNzTGVzczsiOiLiiaoiLCJOZXdMaW5lOyI6YApgLCJuZXhpc3Q7Ijoi4oiEIiwibmV4aXN0czsiOiLiiIQiLCJOZnI7Ijoi8J2UkSIsIm5mcjsiOiLwnZSrIiwibmdFOyI6IuKJp8y4IiwibmdlOyI6IuKJsSIsIm5nZXE7Ijoi4omxIiwibmdlcXE7Ijoi4omnzLgiLCJuZ2Vxc2xhbnQ7Ijoi4qm+zLgiLCJuZ2VzOyI6IuKpvsy4IiwibkdnOyI6IuKLmcy4IiwibmdzaW07Ijoi4om1Iiwibkd0OyI6IuKJq+KDkiIsIm5ndDsiOiLiia8iLCJuZ3RyOyI6IuKJryIsIm5HdHY7Ijoi4omrzLgiLCJuaEFycjsiOiLih44iLCJuaGFycjsiOiLihq4iLCJuaHBhcjsiOiLiq7IiLCJuaTsiOiLiiIsiLCJuaXM7Ijoi4ou8IiwibmlzZDsiOiLii7oiLCJuaXY7Ijoi4oiLIiwiTkpjeTsiOiLQiiIsIm5qY3k7Ijoi0ZoiLCJubEFycjsiOiLih40iLCJubGFycjsiOiLihpoiLCJubGRyOyI6IuKApSIsIm5sRTsiOiLiiabMuCIsIm5sZTsiOiLiibAiLCJuTGVmdGFycm93OyI6IuKHjSIsIm5sZWZ0YXJyb3c7Ijoi4oaaIiwibkxlZnRyaWdodGFycm93OyI6IuKHjiIsIm5sZWZ0cmlnaHRhcnJvdzsiOiLihq4iLCJubGVxOyI6IuKJsCIsIm5sZXFxOyI6IuKJpsy4IiwibmxlcXNsYW50OyI6IuKpvcy4IiwibmxlczsiOiLiqb3MuCIsIm5sZXNzOyI6IuKJriIsIm5MbDsiOiLii5jMuCIsIm5sc2ltOyI6IuKJtCIsIm5MdDsiOiLiiarig5IiLCJubHQ7Ijoi4omuIiwibmx0cmk7Ijoi4ouqIiwibmx0cmllOyI6IuKLrCIsIm5MdHY7Ijoi4omqzLgiLCJubWlkOyI6IuKIpCIsIk5vQnJlYWs7Ijoi4oGgIiwiTm9uQnJlYWtpbmdTcGFjZTsiOiLCoCIsIk5vcGY7Ijoi4oSVIiwibm9wZjsiOiLwnZWfIiwiTm90OyI6IuKrrCIsIm5vdDsiOiLCrCIsbm90OiLCrCIsIk5vdENvbmdydWVudDsiOiLiiaIiLCJOb3RDdXBDYXA7Ijoi4omtIiwiTm90RG91YmxlVmVydGljYWxCYXI7Ijoi4oimIiwiTm90RWxlbWVudDsiOiLiiIkiLCJOb3RFcXVhbDsiOiLiiaAiLCJOb3RFcXVhbFRpbGRlOyI6IuKJgsy4IiwiTm90RXhpc3RzOyI6IuKIhCIsIk5vdEdyZWF0ZXI7Ijoi4omvIiwiTm90R3JlYXRlckVxdWFsOyI6IuKJsSIsIk5vdEdyZWF0ZXJGdWxsRXF1YWw7Ijoi4omnzLgiLCJOb3RHcmVhdGVyR3JlYXRlcjsiOiLiiavMuCIsIk5vdEdyZWF0ZXJMZXNzOyI6IuKJuSIsIk5vdEdyZWF0ZXJTbGFudEVxdWFsOyI6IuKpvsy4IiwiTm90R3JlYXRlclRpbGRlOyI6IuKJtSIsIk5vdEh1bXBEb3duSHVtcDsiOiLiiY7MuCIsIk5vdEh1bXBFcXVhbDsiOiLiiY/MuCIsIm5vdGluOyI6IuKIiSIsIm5vdGluZG90OyI6IuKLtcy4Iiwibm90aW5FOyI6IuKLucy4Iiwibm90aW52YTsiOiLiiIkiLCJub3RpbnZiOyI6IuKLtyIsIm5vdGludmM7Ijoi4ou2IiwiTm90TGVmdFRyaWFuZ2xlOyI6IuKLqiIsIk5vdExlZnRUcmlhbmdsZUJhcjsiOiLip4/MuCIsIk5vdExlZnRUcmlhbmdsZUVxdWFsOyI6IuKLrCIsIk5vdExlc3M7Ijoi4omuIiwiTm90TGVzc0VxdWFsOyI6IuKJsCIsIk5vdExlc3NHcmVhdGVyOyI6IuKJuCIsIk5vdExlc3NMZXNzOyI6IuKJqsy4IiwiTm90TGVzc1NsYW50RXF1YWw7Ijoi4qm9zLgiLCJOb3RMZXNzVGlsZGU7Ijoi4om0IiwiTm90TmVzdGVkR3JlYXRlckdyZWF0ZXI7Ijoi4qqizLgiLCJOb3ROZXN0ZWRMZXNzTGVzczsiOiLiqqHMuCIsIm5vdG5pOyI6IuKIjCIsIm5vdG5pdmE7Ijoi4oiMIiwibm90bml2YjsiOiLii74iLCJub3RuaXZjOyI6IuKLvSIsIk5vdFByZWNlZGVzOyI6IuKKgCIsIk5vdFByZWNlZGVzRXF1YWw7Ijoi4qqvzLgiLCJOb3RQcmVjZWRlc1NsYW50RXF1YWw7Ijoi4ougIiwiTm90UmV2ZXJzZUVsZW1lbnQ7Ijoi4oiMIiwiTm90UmlnaHRUcmlhbmdsZTsiOiLii6siLCJOb3RSaWdodFRyaWFuZ2xlQmFyOyI6IuKnkMy4IiwiTm90UmlnaHRUcmlhbmdsZUVxdWFsOyI6IuKLrSIsIk5vdFNxdWFyZVN1YnNldDsiOiLiio/MuCIsIk5vdFNxdWFyZVN1YnNldEVxdWFsOyI6IuKLoiIsIk5vdFNxdWFyZVN1cGVyc2V0OyI6IuKKkMy4IiwiTm90U3F1YXJlU3VwZXJzZXRFcXVhbDsiOiLii6MiLCJOb3RTdWJzZXQ7Ijoi4oqC4oOSIiwiTm90U3Vic2V0RXF1YWw7Ijoi4oqIIiwiTm90U3VjY2VlZHM7Ijoi4oqBIiwiTm90U3VjY2VlZHNFcXVhbDsiOiLiqrDMuCIsIk5vdFN1Y2NlZWRzU2xhbnRFcXVhbDsiOiLii6EiLCJOb3RTdWNjZWVkc1RpbGRlOyI6IuKJv8y4IiwiTm90U3VwZXJzZXQ7Ijoi4oqD4oOSIiwiTm90U3VwZXJzZXRFcXVhbDsiOiLiiokiLCJOb3RUaWxkZTsiOiLiiYEiLCJOb3RUaWxkZUVxdWFsOyI6IuKJhCIsIk5vdFRpbGRlRnVsbEVxdWFsOyI6IuKJhyIsIk5vdFRpbGRlVGlsZGU7Ijoi4omJIiwiTm90VmVydGljYWxCYXI7Ijoi4oikIiwibnBhcjsiOiLiiKYiLCJucGFyYWxsZWw7Ijoi4oimIiwibnBhcnNsOyI6IuKrveKDpSIsIm5wYXJ0OyI6IuKIgsy4IiwibnBvbGludDsiOiLiqJQiLCJucHI7Ijoi4oqAIiwibnByY3VlOyI6IuKLoCIsIm5wcmU7Ijoi4qqvzLgiLCJucHJlYzsiOiLiioAiLCJucHJlY2VxOyI6IuKqr8y4IiwibnJBcnI7Ijoi4oePIiwibnJhcnI7Ijoi4oabIiwibnJhcnJjOyI6IuKks8y4IiwibnJhcnJ3OyI6IuKGncy4IiwiblJpZ2h0YXJyb3c7Ijoi4oePIiwibnJpZ2h0YXJyb3c7Ijoi4oabIiwibnJ0cmk7Ijoi4ourIiwibnJ0cmllOyI6IuKLrSIsIm5zYzsiOiLiioEiLCJuc2NjdWU7Ijoi4ouhIiwibnNjZTsiOiLiqrDMuCIsIk5zY3I7Ijoi8J2SqSIsIm5zY3I7Ijoi8J2TgyIsIm5zaG9ydG1pZDsiOiLiiKQiLCJuc2hvcnRwYXJhbGxlbDsiOiLiiKYiLCJuc2ltOyI6IuKJgSIsIm5zaW1lOyI6IuKJhCIsIm5zaW1lcTsiOiLiiYQiLCJuc21pZDsiOiLiiKQiLCJuc3BhcjsiOiLiiKYiLCJuc3FzdWJlOyI6IuKLoiIsIm5zcXN1cGU7Ijoi4oujIiwibnN1YjsiOiLiioQiLCJuc3ViRTsiOiLiq4XMuCIsIm5zdWJlOyI6IuKKiCIsIm5zdWJzZXQ7Ijoi4oqC4oOSIiwibnN1YnNldGVxOyI6IuKKiCIsIm5zdWJzZXRlcXE7Ijoi4quFzLgiLCJuc3VjYzsiOiLiioEiLCJuc3VjY2VxOyI6IuKqsMy4IiwibnN1cDsiOiLiioUiLCJuc3VwRTsiOiLiq4bMuCIsIm5zdXBlOyI6IuKKiSIsIm5zdXBzZXQ7Ijoi4oqD4oOSIiwibnN1cHNldGVxOyI6IuKKiSIsIm5zdXBzZXRlcXE7Ijoi4quGzLgiLCJudGdsOyI6IuKJuSIsIk50aWxkZTsiOiLDkSIsTnRpbGRlOiLDkSIsIm50aWxkZTsiOiLDsSIsbnRpbGRlOiLDsSIsIm50bGc7Ijoi4om4IiwibnRyaWFuZ2xlbGVmdDsiOiLii6oiLCJudHJpYW5nbGVsZWZ0ZXE7Ijoi4ousIiwibnRyaWFuZ2xlcmlnaHQ7Ijoi4ourIiwibnRyaWFuZ2xlcmlnaHRlcTsiOiLii60iLCJOdTsiOiLOnSIsIm51OyI6Is69IiwibnVtOyI6IiMiLCJudW1lcm87Ijoi4oSWIiwibnVtc3A7Ijoi4oCHIiwibnZhcDsiOiLiiY3ig5IiLCJuVkRhc2g7Ijoi4oqvIiwiblZkYXNoOyI6IuKKriIsIm52RGFzaDsiOiLiiq0iLCJudmRhc2g7Ijoi4oqsIiwibnZnZTsiOiLiiaXig5IiLCJudmd0OyI6Ij7ig5IiLCJudkhhcnI7Ijoi4qSEIiwibnZpbmZpbjsiOiLip54iLCJudmxBcnI7Ijoi4qSCIiwibnZsZTsiOiLiiaTig5IiLCJudmx0OyI6Ijzig5IiLCJudmx0cmllOyI6IuKKtOKDkiIsIm52ckFycjsiOiLipIMiLCJudnJ0cmllOyI6IuKKteKDkiIsIm52c2ltOyI6IuKIvOKDkiIsIm53YXJoazsiOiLipKMiLCJud0FycjsiOiLih5YiLCJud2FycjsiOiLihpYiLCJud2Fycm93OyI6IuKGliIsIm53bmVhcjsiOiLipKciLCJPYWN1dGU7Ijoiw5MiLE9hY3V0ZToiw5MiLCJvYWN1dGU7Ijoiw7MiLG9hY3V0ZToiw7MiLCJvYXN0OyI6IuKKmyIsIm9jaXI7Ijoi4oqaIiwiT2NpcmM7Ijoiw5QiLE9jaXJjOiLDlCIsIm9jaXJjOyI6IsO0IixvY2lyYzoiw7QiLCJPY3k7Ijoi0J4iLCJvY3k7Ijoi0L4iLCJvZGFzaDsiOiLiip0iLCJPZGJsYWM7IjoixZAiLCJvZGJsYWM7IjoixZEiLCJvZGl2OyI6IuKouCIsIm9kb3Q7Ijoi4oqZIiwib2Rzb2xkOyI6IuKmvCIsIk9FbGlnOyI6IsWSIiwib2VsaWc7IjoixZMiLCJvZmNpcjsiOiLipr8iLCJPZnI7Ijoi8J2UkiIsIm9mcjsiOiLwnZSsIiwib2dvbjsiOiLLmyIsIk9ncmF2ZTsiOiLDkiIsT2dyYXZlOiLDkiIsIm9ncmF2ZTsiOiLDsiIsb2dyYXZlOiLDsiIsIm9ndDsiOiLip4EiLCJvaGJhcjsiOiLiprUiLCJvaG07IjoizqkiLCJvaW50OyI6IuKIriIsIm9sYXJyOyI6IuKGuiIsIm9sY2lyOyI6IuKmviIsIm9sY3Jvc3M7Ijoi4qa7Iiwib2xpbmU7Ijoi4oC+Iiwib2x0OyI6IuKngCIsIk9tYWNyOyI6IsWMIiwib21hY3I7IjoixY0iLCJPbWVnYTsiOiLOqSIsIm9tZWdhOyI6Is+JIiwiT21pY3JvbjsiOiLOnyIsIm9taWNyb247Ijoizr8iLCJvbWlkOyI6IuKmtiIsIm9taW51czsiOiLiipYiLCJPb3BmOyI6IvCdlYYiLCJvb3BmOyI6IvCdlaAiLCJvcGFyOyI6IuKmtyIsIk9wZW5DdXJseURvdWJsZVF1b3RlOyI6IuKAnCIsIk9wZW5DdXJseVF1b3RlOyI6IuKAmCIsIm9wZXJwOyI6IuKmuSIsIm9wbHVzOyI6IuKKlSIsIk9yOyI6IuKplCIsIm9yOyI6IuKIqCIsIm9yYXJyOyI6IuKGuyIsIm9yZDsiOiLiqZ0iLCJvcmRlcjsiOiLihLQiLCJvcmRlcm9mOyI6IuKEtCIsIm9yZGY7IjoiwqoiLG9yZGY6IsKqIiwib3JkbTsiOiLCuiIsb3JkbToiwroiLCJvcmlnb2Y7Ijoi4oq2Iiwib3JvcjsiOiLiqZYiLCJvcnNsb3BlOyI6IuKplyIsIm9ydjsiOiLiqZsiLCJvUzsiOiLik4giLCJPc2NyOyI6IvCdkqoiLCJvc2NyOyI6IuKEtCIsIk9zbGFzaDsiOiLDmCIsT3NsYXNoOiLDmCIsIm9zbGFzaDsiOiLDuCIsb3NsYXNoOiLDuCIsIm9zb2w7Ijoi4oqYIiwiT3RpbGRlOyI6IsOVIixPdGlsZGU6IsOVIiwib3RpbGRlOyI6IsO1IixvdGlsZGU6IsO1IiwiT3RpbWVzOyI6IuKotyIsIm90aW1lczsiOiLiipciLCJvdGltZXNhczsiOiLiqLYiLCJPdW1sOyI6IsOWIixPdW1sOiLDliIsIm91bWw7Ijoiw7YiLG91bWw6IsO2Iiwib3ZiYXI7Ijoi4oy9IiwiT3ZlckJhcjsiOiLigL4iLCJPdmVyQnJhY2U7Ijoi4o+eIiwiT3ZlckJyYWNrZXQ7Ijoi4o60IiwiT3ZlclBhcmVudGhlc2lzOyI6IuKPnCIsInBhcjsiOiLiiKUiLCJwYXJhOyI6IsK2IixwYXJhOiLCtiIsInBhcmFsbGVsOyI6IuKIpSIsInBhcnNpbTsiOiLiq7MiLCJwYXJzbDsiOiLiq70iLCJwYXJ0OyI6IuKIgiIsIlBhcnRpYWxEOyI6IuKIgiIsIlBjeTsiOiLQnyIsInBjeTsiOiLQvyIsInBlcmNudDsiOiIlIiwicGVyaW9kOyI6Ii4iLCJwZXJtaWw7Ijoi4oCwIiwicGVycDsiOiLiiqUiLCJwZXJ0ZW5rOyI6IuKAsSIsIlBmcjsiOiLwnZSTIiwicGZyOyI6IvCdlK0iLCJQaGk7IjoizqYiLCJwaGk7Ijoiz4YiLCJwaGl2OyI6Is+VIiwicGhtbWF0OyI6IuKEsyIsInBob25lOyI6IuKYjiIsIlBpOyI6Is6gIiwicGk7Ijoiz4AiLCJwaXRjaGZvcms7Ijoi4ouUIiwicGl2OyI6Is+WIiwicGxhbmNrOyI6IuKEjyIsInBsYW5ja2g7Ijoi4oSOIiwicGxhbmt2OyI6IuKEjyIsInBsdXM7IjoiKyIsInBsdXNhY2lyOyI6IuKooyIsInBsdXNiOyI6IuKKniIsInBsdXNjaXI7Ijoi4qiiIiwicGx1c2RvOyI6IuKIlCIsInBsdXNkdTsiOiLiqKUiLCJwbHVzZTsiOiLiqbIiLCJQbHVzTWludXM7IjoiwrEiLCJwbHVzbW47IjoiwrEiLHBsdXNtbjoiwrEiLCJwbHVzc2ltOyI6IuKopiIsInBsdXN0d287Ijoi4qinIiwicG07IjoiwrEiLCJQb2luY2FyZXBsYW5lOyI6IuKEjCIsInBvaW50aW50OyI6IuKolSIsIlBvcGY7Ijoi4oSZIiwicG9wZjsiOiLwnZWhIiwicG91bmQ7IjoiwqMiLHBvdW5kOiLCoyIsIlByOyI6IuKquyIsInByOyI6IuKJuiIsInByYXA7Ijoi4qq3IiwicHJjdWU7Ijoi4om8IiwicHJFOyI6IuKqsyIsInByZTsiOiLiqq8iLCJwcmVjOyI6IuKJuiIsInByZWNhcHByb3g7Ijoi4qq3IiwicHJlY2N1cmx5ZXE7Ijoi4om8IiwiUHJlY2VkZXM7Ijoi4om6IiwiUHJlY2VkZXNFcXVhbDsiOiLiqq8iLCJQcmVjZWRlc1NsYW50RXF1YWw7Ijoi4om8IiwiUHJlY2VkZXNUaWxkZTsiOiLiib4iLCJwcmVjZXE7Ijoi4qqvIiwicHJlY25hcHByb3g7Ijoi4qq5IiwicHJlY25lcXE7Ijoi4qq1IiwicHJlY25zaW07Ijoi4ouoIiwicHJlY3NpbTsiOiLiib4iLCJQcmltZTsiOiLigLMiLCJwcmltZTsiOiLigLIiLCJwcmltZXM7Ijoi4oSZIiwicHJuYXA7Ijoi4qq5IiwicHJuRTsiOiLiqrUiLCJwcm5zaW07Ijoi4ouoIiwicHJvZDsiOiLiiI8iLCJQcm9kdWN0OyI6IuKIjyIsInByb2ZhbGFyOyI6IuKMriIsInByb2ZsaW5lOyI6IuKMkiIsInByb2ZzdXJmOyI6IuKMkyIsInByb3A7Ijoi4oidIiwiUHJvcG9ydGlvbjsiOiLiiLciLCJQcm9wb3J0aW9uYWw7Ijoi4oidIiwicHJvcHRvOyI6IuKInSIsInByc2ltOyI6IuKJviIsInBydXJlbDsiOiLiirAiLCJQc2NyOyI6IvCdkqsiLCJwc2NyOyI6IvCdk4UiLCJQc2k7IjoizqgiLCJwc2k7Ijoiz4giLCJwdW5jc3A7Ijoi4oCIIiwiUWZyOyI6IvCdlJQiLCJxZnI7Ijoi8J2UriIsInFpbnQ7Ijoi4qiMIiwiUW9wZjsiOiLihJoiLCJxb3BmOyI6IvCdlaIiLCJxcHJpbWU7Ijoi4oGXIiwiUXNjcjsiOiLwnZKsIiwicXNjcjsiOiLwnZOGIiwicXVhdGVybmlvbnM7Ijoi4oSNIiwicXVhdGludDsiOiLiqJYiLCJxdWVzdDsiOiI/IiwicXVlc3RlcTsiOiLiiZ8iLCJRVU9UOyI6JyInLFFVT1Q6JyInLCJxdW90OyI6JyInLHF1b3Q6JyInLCJyQWFycjsiOiLih5siLCJyYWNlOyI6IuKIvcyxIiwiUmFjdXRlOyI6IsWUIiwicmFjdXRlOyI6IsWVIiwicmFkaWM7Ijoi4oiaIiwicmFlbXB0eXY7Ijoi4qazIiwiUmFuZzsiOiLin6siLCJyYW5nOyI6IuKfqSIsInJhbmdkOyI6IuKmkiIsInJhbmdlOyI6IuKmpSIsInJhbmdsZTsiOiLin6kiLCJyYXF1bzsiOiLCuyIscmFxdW86IsK7IiwiUmFycjsiOiLihqAiLCJyQXJyOyI6IuKHkiIsInJhcnI7Ijoi4oaSIiwicmFycmFwOyI6IuKltSIsInJhcnJiOyI6IuKHpSIsInJhcnJiZnM7Ijoi4qSgIiwicmFycmM7Ijoi4qSzIiwicmFycmZzOyI6IuKkniIsInJhcnJoazsiOiLihqoiLCJyYXJybHA7Ijoi4oasIiwicmFycnBsOyI6IuKlhSIsInJhcnJzaW07Ijoi4qW0IiwiUmFycnRsOyI6IuKkliIsInJhcnJ0bDsiOiLihqMiLCJyYXJydzsiOiLihp0iLCJyQXRhaWw7Ijoi4qScIiwicmF0YWlsOyI6IuKkmiIsInJhdGlvOyI6IuKItiIsInJhdGlvbmFsczsiOiLihJoiLCJSQmFycjsiOiLipJAiLCJyQmFycjsiOiLipI8iLCJyYmFycjsiOiLipI0iLCJyYmJyazsiOiLinbMiLCJyYnJhY2U7IjoifSIsInJicmFjazsiOiJdIiwicmJya2U7Ijoi4qaMIiwicmJya3NsZDsiOiLipo4iLCJyYnJrc2x1OyI6IuKmkCIsIlJjYXJvbjsiOiLFmCIsInJjYXJvbjsiOiLFmSIsIlJjZWRpbDsiOiLFliIsInJjZWRpbDsiOiLFlyIsInJjZWlsOyI6IuKMiSIsInJjdWI7IjoifSIsIlJjeTsiOiLQoCIsInJjeTsiOiLRgCIsInJkY2E7Ijoi4qS3IiwicmRsZGhhcjsiOiLipakiLCJyZHF1bzsiOiLigJ0iLCJyZHF1b3I7Ijoi4oCdIiwicmRzaDsiOiLihrMiLCJSZTsiOiLihJwiLCJyZWFsOyI6IuKEnCIsInJlYWxpbmU7Ijoi4oSbIiwicmVhbHBhcnQ7Ijoi4oScIiwicmVhbHM7Ijoi4oSdIiwicmVjdDsiOiLilq0iLCJSRUc7Ijoiwq4iLFJFRzoiwq4iLCJyZWc7Ijoiwq4iLHJlZzoiwq4iLCJSZXZlcnNlRWxlbWVudDsiOiLiiIsiLCJSZXZlcnNlRXF1aWxpYnJpdW07Ijoi4oeLIiwiUmV2ZXJzZVVwRXF1aWxpYnJpdW07Ijoi4qWvIiwicmZpc2h0OyI6IuKlvSIsInJmbG9vcjsiOiLijIsiLCJSZnI7Ijoi4oScIiwicmZyOyI6IvCdlK8iLCJySGFyOyI6IuKlpCIsInJoYXJkOyI6IuKHgSIsInJoYXJ1OyI6IuKHgCIsInJoYXJ1bDsiOiLipawiLCJSaG87IjoizqEiLCJyaG87Ijoiz4EiLCJyaG92OyI6Is+xIiwiUmlnaHRBbmdsZUJyYWNrZXQ7Ijoi4p+pIiwiUmlnaHRBcnJvdzsiOiLihpIiLCJSaWdodGFycm93OyI6IuKHkiIsInJpZ2h0YXJyb3c7Ijoi4oaSIiwiUmlnaHRBcnJvd0JhcjsiOiLih6UiLCJSaWdodEFycm93TGVmdEFycm93OyI6IuKHhCIsInJpZ2h0YXJyb3d0YWlsOyI6IuKGoyIsIlJpZ2h0Q2VpbGluZzsiOiLijIkiLCJSaWdodERvdWJsZUJyYWNrZXQ7Ijoi4p+nIiwiUmlnaHREb3duVGVlVmVjdG9yOyI6IuKlnSIsIlJpZ2h0RG93blZlY3RvcjsiOiLih4IiLCJSaWdodERvd25WZWN0b3JCYXI7Ijoi4qWVIiwiUmlnaHRGbG9vcjsiOiLijIsiLCJyaWdodGhhcnBvb25kb3duOyI6IuKHgSIsInJpZ2h0aGFycG9vbnVwOyI6IuKHgCIsInJpZ2h0bGVmdGFycm93czsiOiLih4QiLCJyaWdodGxlZnRoYXJwb29uczsiOiLih4wiLCJyaWdodHJpZ2h0YXJyb3dzOyI6IuKHiSIsInJpZ2h0c3F1aWdhcnJvdzsiOiLihp0iLCJSaWdodFRlZTsiOiLiiqIiLCJSaWdodFRlZUFycm93OyI6IuKGpiIsIlJpZ2h0VGVlVmVjdG9yOyI6IuKlmyIsInJpZ2h0dGhyZWV0aW1lczsiOiLii4wiLCJSaWdodFRyaWFuZ2xlOyI6IuKKsyIsIlJpZ2h0VHJpYW5nbGVCYXI7Ijoi4qeQIiwiUmlnaHRUcmlhbmdsZUVxdWFsOyI6IuKKtSIsIlJpZ2h0VXBEb3duVmVjdG9yOyI6IuKljyIsIlJpZ2h0VXBUZWVWZWN0b3I7Ijoi4qWcIiwiUmlnaHRVcFZlY3RvcjsiOiLihr4iLCJSaWdodFVwVmVjdG9yQmFyOyI6IuKllCIsIlJpZ2h0VmVjdG9yOyI6IuKHgCIsIlJpZ2h0VmVjdG9yQmFyOyI6IuKlkyIsInJpbmc7Ijoiy5oiLCJyaXNpbmdkb3RzZXE7Ijoi4omTIiwicmxhcnI7Ijoi4oeEIiwicmxoYXI7Ijoi4oeMIiwicmxtOyI6IuKAjyIsInJtb3VzdDsiOiLijrEiLCJybW91c3RhY2hlOyI6IuKOsSIsInJubWlkOyI6IuKrriIsInJvYW5nOyI6IuKfrSIsInJvYXJyOyI6IuKHviIsInJvYnJrOyI6IuKfpyIsInJvcGFyOyI6IuKmhiIsIlJvcGY7Ijoi4oSdIiwicm9wZjsiOiLwnZWjIiwicm9wbHVzOyI6IuKoriIsInJvdGltZXM7Ijoi4qi1IiwiUm91bmRJbXBsaWVzOyI6IuKlsCIsInJwYXI7IjoiKSIsInJwYXJndDsiOiLippQiLCJycHBvbGludDsiOiLiqJIiLCJycmFycjsiOiLih4kiLCJScmlnaHRhcnJvdzsiOiLih5siLCJyc2FxdW87Ijoi4oC6IiwiUnNjcjsiOiLihJsiLCJyc2NyOyI6IvCdk4ciLCJSc2g7Ijoi4oaxIiwicnNoOyI6IuKGsSIsInJzcWI7IjoiXSIsInJzcXVvOyI6IuKAmSIsInJzcXVvcjsiOiLigJkiLCJydGhyZWU7Ijoi4ouMIiwicnRpbWVzOyI6IuKLiiIsInJ0cmk7Ijoi4pa5IiwicnRyaWU7Ijoi4oq1IiwicnRyaWY7Ijoi4pa4IiwicnRyaWx0cmk7Ijoi4qeOIiwiUnVsZURlbGF5ZWQ7Ijoi4qe0IiwicnVsdWhhcjsiOiLipagiLCJyeDsiOiLihJ4iLCJTYWN1dGU7IjoixZoiLCJzYWN1dGU7IjoixZsiLCJzYnF1bzsiOiLigJoiLCJTYzsiOiLiqrwiLCJzYzsiOiLiibsiLCJzY2FwOyI6IuKquCIsIlNjYXJvbjsiOiLFoCIsInNjYXJvbjsiOiLFoSIsInNjY3VlOyI6IuKJvSIsInNjRTsiOiLiqrQiLCJzY2U7Ijoi4qqwIiwiU2NlZGlsOyI6IsWeIiwic2NlZGlsOyI6IsWfIiwiU2NpcmM7IjoixZwiLCJzY2lyYzsiOiLFnSIsInNjbmFwOyI6IuKquiIsInNjbkU7Ijoi4qq2Iiwic2Nuc2ltOyI6IuKLqSIsInNjcG9saW50OyI6IuKokyIsInNjc2ltOyI6IuKJvyIsIlNjeTsiOiLQoSIsInNjeTsiOiLRgSIsInNkb3Q7Ijoi4ouFIiwic2RvdGI7Ijoi4oqhIiwic2RvdGU7Ijoi4qmmIiwic2VhcmhrOyI6IuKkpSIsInNlQXJyOyI6IuKHmCIsInNlYXJyOyI6IuKGmCIsInNlYXJyb3c7Ijoi4oaYIiwic2VjdDsiOiLCpyIsc2VjdDoiwqciLCJzZW1pOyI6IjsiLCJzZXN3YXI7Ijoi4qSpIiwic2V0bWludXM7Ijoi4oiWIiwic2V0bW47Ijoi4oiWIiwic2V4dDsiOiLinLYiLCJTZnI7Ijoi8J2UliIsInNmcjsiOiLwnZSwIiwic2Zyb3duOyI6IuKMoiIsInNoYXJwOyI6IuKZryIsIlNIQ0hjeTsiOiLQqSIsInNoY2hjeTsiOiLRiSIsIlNIY3k7Ijoi0KgiLCJzaGN5OyI6ItGIIiwiU2hvcnREb3duQXJyb3c7Ijoi4oaTIiwiU2hvcnRMZWZ0QXJyb3c7Ijoi4oaQIiwic2hvcnRtaWQ7Ijoi4oijIiwic2hvcnRwYXJhbGxlbDsiOiLiiKUiLCJTaG9ydFJpZ2h0QXJyb3c7Ijoi4oaSIiwiU2hvcnRVcEFycm93OyI6IuKGkSIsInNoeTsiOiLCrSIsc2h5OiLCrSIsIlNpZ21hOyI6Is6jIiwic2lnbWE7Ijoiz4MiLCJzaWdtYWY7Ijoiz4IiLCJzaWdtYXY7Ijoiz4IiLCJzaW07Ijoi4oi8Iiwic2ltZG90OyI6IuKpqiIsInNpbWU7Ijoi4omDIiwic2ltZXE7Ijoi4omDIiwic2ltZzsiOiLiqp4iLCJzaW1nRTsiOiLiqqAiLCJzaW1sOyI6IuKqnSIsInNpbWxFOyI6IuKqnyIsInNpbW5lOyI6IuKJhiIsInNpbXBsdXM7Ijoi4qikIiwic2ltcmFycjsiOiLipbIiLCJzbGFycjsiOiLihpAiLCJTbWFsbENpcmNsZTsiOiLiiJgiLCJzbWFsbHNldG1pbnVzOyI6IuKIliIsInNtYXNocDsiOiLiqLMiLCJzbWVwYXJzbDsiOiLip6QiLCJzbWlkOyI6IuKIoyIsInNtaWxlOyI6IuKMoyIsInNtdDsiOiLiqqoiLCJzbXRlOyI6IuKqrCIsInNtdGVzOyI6IuKqrO+4gCIsIlNPRlRjeTsiOiLQrCIsInNvZnRjeTsiOiLRjCIsInNvbDsiOiIvIiwic29sYjsiOiLip4QiLCJzb2xiYXI7Ijoi4oy/IiwiU29wZjsiOiLwnZWKIiwic29wZjsiOiLwnZWkIiwic3BhZGVzOyI6IuKZoCIsInNwYWRlc3VpdDsiOiLimaAiLCJzcGFyOyI6IuKIpSIsInNxY2FwOyI6IuKKkyIsInNxY2FwczsiOiLiipPvuIAiLCJzcWN1cDsiOiLiipQiLCJzcWN1cHM7Ijoi4oqU77iAIiwiU3FydDsiOiLiiJoiLCJzcXN1YjsiOiLiio8iLCJzcXN1YmU7Ijoi4oqRIiwic3FzdWJzZXQ7Ijoi4oqPIiwic3FzdWJzZXRlcTsiOiLiipEiLCJzcXN1cDsiOiLiipAiLCJzcXN1cGU7Ijoi4oqSIiwic3FzdXBzZXQ7Ijoi4oqQIiwic3FzdXBzZXRlcTsiOiLiipIiLCJzcXU7Ijoi4pahIiwiU3F1YXJlOyI6IuKWoSIsInNxdWFyZTsiOiLilqEiLCJTcXVhcmVJbnRlcnNlY3Rpb247Ijoi4oqTIiwiU3F1YXJlU3Vic2V0OyI6IuKKjyIsIlNxdWFyZVN1YnNldEVxdWFsOyI6IuKKkSIsIlNxdWFyZVN1cGVyc2V0OyI6IuKKkCIsIlNxdWFyZVN1cGVyc2V0RXF1YWw7Ijoi4oqSIiwiU3F1YXJlVW5pb247Ijoi4oqUIiwic3F1YXJmOyI6IuKWqiIsInNxdWY7Ijoi4paqIiwic3JhcnI7Ijoi4oaSIiwiU3NjcjsiOiLwnZKuIiwic3NjcjsiOiLwnZOIIiwic3NldG1uOyI6IuKIliIsInNzbWlsZTsiOiLijKMiLCJzc3RhcmY7Ijoi4ouGIiwiU3RhcjsiOiLii4YiLCJzdGFyOyI6IuKYhiIsInN0YXJmOyI6IuKYhSIsInN0cmFpZ2h0ZXBzaWxvbjsiOiLPtSIsInN0cmFpZ2h0cGhpOyI6Is+VIiwic3RybnM7Ijoiwq8iLCJTdWI7Ijoi4ouQIiwic3ViOyI6IuKKgiIsInN1YmRvdDsiOiLiqr0iLCJzdWJFOyI6IuKrhSIsInN1YmU7Ijoi4oqGIiwic3ViZWRvdDsiOiLiq4MiLCJzdWJtdWx0OyI6IuKrgSIsInN1Ym5FOyI6IuKriyIsInN1Ym5lOyI6IuKKiiIsInN1YnBsdXM7Ijoi4qq/Iiwic3VicmFycjsiOiLipbkiLCJTdWJzZXQ7Ijoi4ouQIiwic3Vic2V0OyI6IuKKgiIsInN1YnNldGVxOyI6IuKKhiIsInN1YnNldGVxcTsiOiLiq4UiLCJTdWJzZXRFcXVhbDsiOiLiioYiLCJzdWJzZXRuZXE7Ijoi4oqKIiwic3Vic2V0bmVxcTsiOiLiq4siLCJzdWJzaW07Ijoi4quHIiwic3Vic3ViOyI6IuKrlSIsInN1YnN1cDsiOiLiq5MiLCJzdWNjOyI6IuKJuyIsInN1Y2NhcHByb3g7Ijoi4qq4Iiwic3VjY2N1cmx5ZXE7Ijoi4om9IiwiU3VjY2VlZHM7Ijoi4om7IiwiU3VjY2VlZHNFcXVhbDsiOiLiqrAiLCJTdWNjZWVkc1NsYW50RXF1YWw7Ijoi4om9IiwiU3VjY2VlZHNUaWxkZTsiOiLiib8iLCJzdWNjZXE7Ijoi4qqwIiwic3VjY25hcHByb3g7Ijoi4qq6Iiwic3VjY25lcXE7Ijoi4qq2Iiwic3VjY25zaW07Ijoi4oupIiwic3VjY3NpbTsiOiLiib8iLCJTdWNoVGhhdDsiOiLiiIsiLCJTdW07Ijoi4oiRIiwic3VtOyI6IuKIkSIsInN1bmc7Ijoi4pmqIiwiU3VwOyI6IuKLkSIsInN1cDsiOiLiioMiLCJzdXAxOyI6IsK5IixzdXAxOiLCuSIsInN1cDI7IjoiwrIiLHN1cDI6IsKyIiwic3VwMzsiOiLCsyIsc3VwMzoiwrMiLCJzdXBkb3Q7Ijoi4qq+Iiwic3VwZHN1YjsiOiLiq5giLCJzdXBFOyI6IuKrhiIsInN1cGU7Ijoi4oqHIiwic3VwZWRvdDsiOiLiq4QiLCJTdXBlcnNldDsiOiLiioMiLCJTdXBlcnNldEVxdWFsOyI6IuKKhyIsInN1cGhzb2w7Ijoi4p+JIiwic3VwaHN1YjsiOiLiq5ciLCJzdXBsYXJyOyI6IuKluyIsInN1cG11bHQ7Ijoi4quCIiwic3VwbkU7Ijoi4quMIiwic3VwbmU7Ijoi4oqLIiwic3VwcGx1czsiOiLiq4AiLCJTdXBzZXQ7Ijoi4ouRIiwic3Vwc2V0OyI6IuKKgyIsInN1cHNldGVxOyI6IuKKhyIsInN1cHNldGVxcTsiOiLiq4YiLCJzdXBzZXRuZXE7Ijoi4oqLIiwic3Vwc2V0bmVxcTsiOiLiq4wiLCJzdXBzaW07Ijoi4quIIiwic3Vwc3ViOyI6IuKrlCIsInN1cHN1cDsiOiLiq5YiLCJzd2FyaGs7Ijoi4qSmIiwic3dBcnI7Ijoi4oeZIiwic3dhcnI7Ijoi4oaZIiwic3dhcnJvdzsiOiLihpkiLCJzd253YXI7Ijoi4qSqIiwic3psaWc7Ijoiw58iLHN6bGlnOiLDnyIsIlRhYjsiOiIJIiwidGFyZ2V0OyI6IuKMliIsIlRhdTsiOiLOpCIsInRhdTsiOiLPhCIsInRicms7Ijoi4o60IiwiVGNhcm9uOyI6IsWkIiwidGNhcm9uOyI6IsWlIiwiVGNlZGlsOyI6IsWiIiwidGNlZGlsOyI6IsWjIiwiVGN5OyI6ItCiIiwidGN5OyI6ItGCIiwidGRvdDsiOiLig5siLCJ0ZWxyZWM7Ijoi4oyVIiwiVGZyOyI6IvCdlJciLCJ0ZnI7Ijoi8J2UsSIsInRoZXJlNDsiOiLiiLQiLCJUaGVyZWZvcmU7Ijoi4oi0IiwidGhlcmVmb3JlOyI6IuKItCIsIlRoZXRhOyI6Is6YIiwidGhldGE7IjoizrgiLCJ0aGV0YXN5bTsiOiLPkSIsInRoZXRhdjsiOiLPkSIsInRoaWNrYXBwcm94OyI6IuKJiCIsInRoaWNrc2ltOyI6IuKIvCIsIlRoaWNrU3BhY2U7Ijoi4oGf4oCKIiwidGhpbnNwOyI6IuKAiSIsIlRoaW5TcGFjZTsiOiLigIkiLCJ0aGthcDsiOiLiiYgiLCJ0aGtzaW07Ijoi4oi8IiwiVEhPUk47Ijoiw54iLFRIT1JOOiLDniIsInRob3JuOyI6IsO+Iix0aG9ybjoiw74iLCJUaWxkZTsiOiLiiLwiLCJ0aWxkZTsiOiLLnCIsIlRpbGRlRXF1YWw7Ijoi4omDIiwiVGlsZGVGdWxsRXF1YWw7Ijoi4omFIiwiVGlsZGVUaWxkZTsiOiLiiYgiLCJ0aW1lczsiOiLDlyIsdGltZXM6IsOXIiwidGltZXNiOyI6IuKKoCIsInRpbWVzYmFyOyI6IuKosSIsInRpbWVzZDsiOiLiqLAiLCJ0aW50OyI6IuKIrSIsInRvZWE7Ijoi4qSoIiwidG9wOyI6IuKKpCIsInRvcGJvdDsiOiLijLYiLCJ0b3BjaXI7Ijoi4quxIiwiVG9wZjsiOiLwnZWLIiwidG9wZjsiOiLwnZWlIiwidG9wZm9yazsiOiLiq5oiLCJ0b3NhOyI6IuKkqSIsInRwcmltZTsiOiLigLQiLCJUUkFERTsiOiLihKIiLCJ0cmFkZTsiOiLihKIiLCJ0cmlhbmdsZTsiOiLilrUiLCJ0cmlhbmdsZWRvd247Ijoi4pa/IiwidHJpYW5nbGVsZWZ0OyI6IuKXgyIsInRyaWFuZ2xlbGVmdGVxOyI6IuKKtCIsInRyaWFuZ2xlcTsiOiLiiZwiLCJ0cmlhbmdsZXJpZ2h0OyI6IuKWuSIsInRyaWFuZ2xlcmlnaHRlcTsiOiLiirUiLCJ0cmlkb3Q7Ijoi4pesIiwidHJpZTsiOiLiiZwiLCJ0cmltaW51czsiOiLiqLoiLCJUcmlwbGVEb3Q7Ijoi4oObIiwidHJpcGx1czsiOiLiqLkiLCJ0cmlzYjsiOiLip40iLCJ0cml0aW1lOyI6IuKouyIsInRycGV6aXVtOyI6IuKPoiIsIlRzY3I7Ijoi8J2SryIsInRzY3I7Ijoi8J2TiSIsIlRTY3k7Ijoi0KYiLCJ0c2N5OyI6ItGGIiwiVFNIY3k7Ijoi0IsiLCJ0c2hjeTsiOiLRmyIsIlRzdHJvazsiOiLFpiIsInRzdHJvazsiOiLFpyIsInR3aXh0OyI6IuKJrCIsInR3b2hlYWRsZWZ0YXJyb3c7Ijoi4oaeIiwidHdvaGVhZHJpZ2h0YXJyb3c7Ijoi4oagIiwiVWFjdXRlOyI6IsOaIixVYWN1dGU6IsOaIiwidWFjdXRlOyI6IsO6Iix1YWN1dGU6IsO6IiwiVWFycjsiOiLihp8iLCJ1QXJyOyI6IuKHkSIsInVhcnI7Ijoi4oaRIiwiVWFycm9jaXI7Ijoi4qWJIiwiVWJyY3k7Ijoi0I4iLCJ1YnJjeTsiOiLRniIsIlVicmV2ZTsiOiLFrCIsInVicmV2ZTsiOiLFrSIsIlVjaXJjOyI6IsObIixVY2lyYzoiw5siLCJ1Y2lyYzsiOiLDuyIsdWNpcmM6IsO7IiwiVWN5OyI6ItCjIiwidWN5OyI6ItGDIiwidWRhcnI7Ijoi4oeFIiwiVWRibGFjOyI6IsWwIiwidWRibGFjOyI6IsWxIiwidWRoYXI7Ijoi4qWuIiwidWZpc2h0OyI6IuKlviIsIlVmcjsiOiLwnZSYIiwidWZyOyI6IvCdlLIiLCJVZ3JhdmU7Ijoiw5kiLFVncmF2ZToiw5kiLCJ1Z3JhdmU7Ijoiw7kiLHVncmF2ZToiw7kiLCJ1SGFyOyI6IuKloyIsInVoYXJsOyI6IuKGvyIsInVoYXJyOyI6IuKGviIsInVoYmxrOyI6IuKWgCIsInVsY29ybjsiOiLijJwiLCJ1bGNvcm5lcjsiOiLijJwiLCJ1bGNyb3A7Ijoi4oyPIiwidWx0cmk7Ijoi4pe4IiwiVW1hY3I7IjoixaoiLCJ1bWFjcjsiOiLFqyIsInVtbDsiOiLCqCIsdW1sOiLCqCIsIlVuZGVyQmFyOyI6Il8iLCJVbmRlckJyYWNlOyI6IuKPnyIsIlVuZGVyQnJhY2tldDsiOiLijrUiLCJVbmRlclBhcmVudGhlc2lzOyI6IuKPnSIsIlVuaW9uOyI6IuKLgyIsIlVuaW9uUGx1czsiOiLiio4iLCJVb2dvbjsiOiLFsiIsInVvZ29uOyI6IsWzIiwiVW9wZjsiOiLwnZWMIiwidW9wZjsiOiLwnZWmIiwiVXBBcnJvdzsiOiLihpEiLCJVcGFycm93OyI6IuKHkSIsInVwYXJyb3c7Ijoi4oaRIiwiVXBBcnJvd0JhcjsiOiLipJIiLCJVcEFycm93RG93bkFycm93OyI6IuKHhSIsIlVwRG93bkFycm93OyI6IuKGlSIsIlVwZG93bmFycm93OyI6IuKHlSIsInVwZG93bmFycm93OyI6IuKGlSIsIlVwRXF1aWxpYnJpdW07Ijoi4qWuIiwidXBoYXJwb29ubGVmdDsiOiLihr8iLCJ1cGhhcnBvb25yaWdodDsiOiLihr4iLCJ1cGx1czsiOiLiio4iLCJVcHBlckxlZnRBcnJvdzsiOiLihpYiLCJVcHBlclJpZ2h0QXJyb3c7Ijoi4oaXIiwiVXBzaTsiOiLPkiIsInVwc2k7Ijoiz4UiLCJ1cHNpaDsiOiLPkiIsIlVwc2lsb247IjoizqUiLCJ1cHNpbG9uOyI6Is+FIiwiVXBUZWU7Ijoi4oqlIiwiVXBUZWVBcnJvdzsiOiLihqUiLCJ1cHVwYXJyb3dzOyI6IuKHiCIsInVyY29ybjsiOiLijJ0iLCJ1cmNvcm5lcjsiOiLijJ0iLCJ1cmNyb3A7Ijoi4oyOIiwiVXJpbmc7Ijoixa4iLCJ1cmluZzsiOiLFryIsInVydHJpOyI6IuKXuSIsIlVzY3I7Ijoi8J2SsCIsInVzY3I7Ijoi8J2TiiIsInV0ZG90OyI6IuKLsCIsIlV0aWxkZTsiOiLFqCIsInV0aWxkZTsiOiLFqSIsInV0cmk7Ijoi4pa1IiwidXRyaWY7Ijoi4pa0IiwidXVhcnI7Ijoi4oeIIiwiVXVtbDsiOiLDnCIsVXVtbDoiw5wiLCJ1dW1sOyI6IsO8Iix1dW1sOiLDvCIsInV3YW5nbGU7Ijoi4qanIiwidmFuZ3J0OyI6IuKmnCIsInZhcmVwc2lsb247Ijoiz7UiLCJ2YXJrYXBwYTsiOiLPsCIsInZhcm5vdGhpbmc7Ijoi4oiFIiwidmFycGhpOyI6Is+VIiwidmFycGk7Ijoiz5YiLCJ2YXJwcm9wdG87Ijoi4oidIiwidkFycjsiOiLih5UiLCJ2YXJyOyI6IuKGlSIsInZhcnJobzsiOiLPsSIsInZhcnNpZ21hOyI6Is+CIiwidmFyc3Vic2V0bmVxOyI6IuKKiu+4gCIsInZhcnN1YnNldG5lcXE7Ijoi4quL77iAIiwidmFyc3Vwc2V0bmVxOyI6IuKKi++4gCIsInZhcnN1cHNldG5lcXE7Ijoi4quM77iAIiwidmFydGhldGE7Ijoiz5EiLCJ2YXJ0cmlhbmdsZWxlZnQ7Ijoi4oqyIiwidmFydHJpYW5nbGVyaWdodDsiOiLiirMiLCJWYmFyOyI6IuKrqyIsInZCYXI7Ijoi4quoIiwidkJhcnY7Ijoi4qupIiwiVmN5OyI6ItCSIiwidmN5OyI6ItCyIiwiVkRhc2g7Ijoi4oqrIiwiVmRhc2g7Ijoi4oqpIiwidkRhc2g7Ijoi4oqoIiwidmRhc2g7Ijoi4oqiIiwiVmRhc2hsOyI6IuKrpiIsIlZlZTsiOiLii4EiLCJ2ZWU7Ijoi4oioIiwidmVlYmFyOyI6IuKKuyIsInZlZWVxOyI6IuKJmiIsInZlbGxpcDsiOiLii64iLCJWZXJiYXI7Ijoi4oCWIiwidmVyYmFyOyI6InwiLCJWZXJ0OyI6IuKAliIsInZlcnQ7IjoifCIsIlZlcnRpY2FsQmFyOyI6IuKIoyIsIlZlcnRpY2FsTGluZTsiOiJ8IiwiVmVydGljYWxTZXBhcmF0b3I7Ijoi4p2YIiwiVmVydGljYWxUaWxkZTsiOiLiiYAiLCJWZXJ5VGhpblNwYWNlOyI6IuKAiiIsIlZmcjsiOiLwnZSZIiwidmZyOyI6IvCdlLMiLCJ2bHRyaTsiOiLiirIiLCJ2bnN1YjsiOiLiioLig5IiLCJ2bnN1cDsiOiLiioPig5IiLCJWb3BmOyI6IvCdlY0iLCJ2b3BmOyI6IvCdlaciLCJ2cHJvcDsiOiLiiJ0iLCJ2cnRyaTsiOiLiirMiLCJWc2NyOyI6IvCdkrEiLCJ2c2NyOyI6IvCdk4siLCJ2c3VibkU7Ijoi4quL77iAIiwidnN1Ym5lOyI6IuKKiu+4gCIsInZzdXBuRTsiOiLiq4zvuIAiLCJ2c3VwbmU7Ijoi4oqL77iAIiwiVnZkYXNoOyI6IuKKqiIsInZ6aWd6YWc7Ijoi4qaaIiwiV2NpcmM7IjoixbQiLCJ3Y2lyYzsiOiLFtSIsIndlZGJhcjsiOiLiqZ8iLCJXZWRnZTsiOiLii4AiLCJ3ZWRnZTsiOiLiiKciLCJ3ZWRnZXE7Ijoi4omZIiwid2VpZXJwOyI6IuKEmCIsIldmcjsiOiLwnZSaIiwid2ZyOyI6IvCdlLQiLCJXb3BmOyI6IvCdlY4iLCJ3b3BmOyI6IvCdlagiLCJ3cDsiOiLihJgiLCJ3cjsiOiLiiYAiLCJ3cmVhdGg7Ijoi4omAIiwiV3NjcjsiOiLwnZKyIiwid3NjcjsiOiLwnZOMIiwieGNhcDsiOiLii4IiLCJ4Y2lyYzsiOiLil68iLCJ4Y3VwOyI6IuKLgyIsInhkdHJpOyI6IuKWvSIsIlhmcjsiOiLwnZSbIiwieGZyOyI6IvCdlLUiLCJ4aEFycjsiOiLin7oiLCJ4aGFycjsiOiLin7ciLCJYaTsiOiLOniIsInhpOyI6Is6+IiwieGxBcnI7Ijoi4p+4IiwieGxhcnI7Ijoi4p+1IiwieG1hcDsiOiLin7wiLCJ4bmlzOyI6IuKLuyIsInhvZG90OyI6IuKogCIsIlhvcGY7Ijoi8J2VjyIsInhvcGY7Ijoi8J2VqSIsInhvcGx1czsiOiLiqIEiLCJ4b3RpbWU7Ijoi4qiCIiwieHJBcnI7Ijoi4p+5IiwieHJhcnI7Ijoi4p+2IiwiWHNjcjsiOiLwnZKzIiwieHNjcjsiOiLwnZONIiwieHNxY3VwOyI6IuKohiIsInh1cGx1czsiOiLiqIQiLCJ4dXRyaTsiOiLilrMiLCJ4dmVlOyI6IuKLgSIsInh3ZWRnZTsiOiLii4AiLCJZYWN1dGU7Ijoiw50iLFlhY3V0ZToiw50iLCJ5YWN1dGU7Ijoiw70iLHlhY3V0ZToiw70iLCJZQWN5OyI6ItCvIiwieWFjeTsiOiLRjyIsIlljaXJjOyI6IsW2IiwieWNpcmM7IjoixbciLCJZY3k7Ijoi0KsiLCJ5Y3k7Ijoi0YsiLCJ5ZW47IjoiwqUiLHllbjoiwqUiLCJZZnI7Ijoi8J2UnCIsInlmcjsiOiLwnZS2IiwiWUljeTsiOiLQhyIsInlpY3k7Ijoi0ZciLCJZb3BmOyI6IvCdlZAiLCJ5b3BmOyI6IvCdlaoiLCJZc2NyOyI6IvCdkrQiLCJ5c2NyOyI6IvCdk44iLCJZVWN5OyI6ItCuIiwieXVjeTsiOiLRjiIsIll1bWw7IjoixbgiLCJ5dW1sOyI6IsO/Iix5dW1sOiLDvyIsIlphY3V0ZTsiOiLFuSIsInphY3V0ZTsiOiLFuiIsIlpjYXJvbjsiOiLFvSIsInpjYXJvbjsiOiLFviIsIlpjeTsiOiLQlyIsInpjeTsiOiLQtyIsIlpkb3Q7IjoixbsiLCJ6ZG90OyI6IsW8IiwiemVldHJmOyI6IuKEqCIsIlplcm9XaWR0aFNwYWNlOyI6IuKAiyIsIlpldGE7IjoizpYiLCJ6ZXRhOyI6Is62IiwiWmZyOyI6IuKEqCIsInpmcjsiOiLwnZS3IiwiWkhjeTsiOiLQliIsInpoY3k7Ijoi0LYiLCJ6aWdyYXJyOyI6IuKHnSIsIlpvcGY7Ijoi4oSkIiwiem9wZjsiOiLwnZWrIiwiWnNjcjsiOiLwnZK1IiwienNjcjsiOiLwnZOPIiwiendqOyI6IuKAjSIsInp3bmo7Ijoi4oCMIn07ZnVuY3Rpb24gSmUoZSx0KXtpZihlLmxlbmd0aDx0Lmxlbmd0aClyZXR1cm4hMTtmb3IobGV0IG49MDtuPHQubGVuZ3RoO24rKylpZihlW25dIT09dFtuXSlyZXR1cm4hMTtyZXR1cm4hMH1mdW5jdGlvbiBtYyhlLHQpe2NvbnN0IG49ZS5sZW5ndGgtdC5sZW5ndGg7cmV0dXJuIG4+MD9lLmxhc3RJbmRleE9mKHQpPT09bjpuPT09MD9lPT09dDohMX1mdW5jdGlvbiBubyhlLHQpe2xldCBuPSIiO2Zvcig7dD4wOykodCYxKT09PTEmJihuKz1lKSxlKz1lLHQ9dD4+PjE7cmV0dXJuIG59dmFyIGZjPTk3LHBjPTEyMixnYz02NSxiYz05MCxfYz00OCx3Yz01NztmdW5jdGlvbiBJdChlLHQpe2NvbnN0IG49ZS5jaGFyQ29kZUF0KHQpO3JldHVybiBmYzw9biYmbjw9cGN8fGdjPD1uJiZuPD1iY3x8X2M8PW4mJm48PXdjfWZ1bmN0aW9uIGJuKGUpe3JldHVybiB0eXBlb2YgZTwidSJ9ZnVuY3Rpb24gdmMoZSl7aWYoZSlyZXR1cm4gdHlwZW9mIGU9PSJzdHJpbmciP3traW5kOiJtYXJrZG93biIsdmFsdWU6ZX06e2tpbmQ6Im1hcmtkb3duIix2YWx1ZTplLnZhbHVlfX12YXIgaW89Y2xhc3N7aXNBcHBsaWNhYmxlKCl7cmV0dXJuITB9Y29uc3RydWN0b3IoZSx0KXt0aGlzLmlkPWUsdGhpcy5fdGFncz1bXSx0aGlzLl90YWdNYXA9e30sdGhpcy5fdmFsdWVTZXRNYXA9e30sdGhpcy5fdGFncz10LnRhZ3N8fFtdLHRoaXMuX2dsb2JhbEF0dHJpYnV0ZXM9dC5nbG9iYWxBdHRyaWJ1dGVzfHxbXSx0aGlzLl90YWdzLmZvckVhY2gobj0+e3RoaXMuX3RhZ01hcFtuLm5hbWUudG9Mb3dlckNhc2UoKV09bn0pLHQudmFsdWVTZXRzJiZ0LnZhbHVlU2V0cy5mb3JFYWNoKG49Pnt0aGlzLl92YWx1ZVNldE1hcFtuLm5hbWVdPW4udmFsdWVzfSl9Z2V0SWQoKXtyZXR1cm4gdGhpcy5pZH1wcm92aWRlVGFncygpe3JldHVybiB0aGlzLl90YWdzfXByb3ZpZGVBdHRyaWJ1dGVzKGUpe2NvbnN0IHQ9W10sbj1yPT57dC5wdXNoKHIpfSxpPXRoaXMuX3RhZ01hcFtlLnRvTG93ZXJDYXNlKCldO3JldHVybiBpJiZpLmF0dHJpYnV0ZXMuZm9yRWFjaChuKSx0aGlzLl9nbG9iYWxBdHRyaWJ1dGVzLmZvckVhY2gobiksdH1wcm92aWRlVmFsdWVzKGUsdCl7Y29uc3Qgbj1bXTt0PXQudG9Mb3dlckNhc2UoKTtjb25zdCBpPXM9PntzLmZvckVhY2goYT0+e2EubmFtZS50b0xvd2VyQ2FzZSgpPT09dCYmKGEudmFsdWVzJiZhLnZhbHVlcy5mb3JFYWNoKGw9PntuLnB1c2gobCl9KSxhLnZhbHVlU2V0JiZ0aGlzLl92YWx1ZVNldE1hcFthLnZhbHVlU2V0XSYmdGhpcy5fdmFsdWVTZXRNYXBbYS52YWx1ZVNldF0uZm9yRWFjaChsPT57bi5wdXNoKGwpfSkpfSl9LHI9dGhpcy5fdGFnTWFwW2UudG9Mb3dlckNhc2UoKV07cmV0dXJuIHImJmkoci5hdHRyaWJ1dGVzKSxpKHRoaXMuX2dsb2JhbEF0dHJpYnV0ZXMpLG59fTtmdW5jdGlvbiBLZShlLHQ9e30sbil7Y29uc3QgaT17a2luZDpuPyJtYXJrZG93biI6InBsYWludGV4dCIsdmFsdWU6IiJ9O2lmKGUuZGVzY3JpcHRpb24mJnQuZG9jdW1lbnRhdGlvbiE9PSExKXtjb25zdCByPXZjKGUuZGVzY3JpcHRpb24pO3ImJihpLnZhbHVlKz1yLnZhbHVlKX1pZihlLnJlZmVyZW5jZXMmJmUucmVmZXJlbmNlcy5sZW5ndGg+MCYmdC5yZWZlcmVuY2VzIT09ITEmJihpLnZhbHVlLmxlbmd0aCYmKGkudmFsdWUrPWAKCmApLG4/aS52YWx1ZSs9ZS5yZWZlcmVuY2VzLm1hcChyPT5gWyR7ci5uYW1lfV0oJHtyLnVybH0pYCkuam9pbigiIHwgIik6aS52YWx1ZSs9ZS5yZWZlcmVuY2VzLm1hcChyPT5gJHtyLm5hbWV9OiAke3IudXJsfWApLmpvaW4oYApgKSksaS52YWx1ZSE9PSIiKXJldHVybiBpfXZhciB5Yz1jbGFzc3tjb25zdHJ1Y3RvcihlLHQpe3RoaXMuZGF0YU1hbmFnZXI9ZSx0aGlzLnJlYWREaXJlY3Rvcnk9dCx0aGlzLmF0cmlidXRlQ29tcGxldGlvbnM9W119b25IdG1sQXR0cmlidXRlVmFsdWUoZSl7dGhpcy5kYXRhTWFuYWdlci5pc1BhdGhBdHRyaWJ1dGUoZS50YWcsZS5hdHRyaWJ1dGUpJiZ0aGlzLmF0cmlidXRlQ29tcGxldGlvbnMucHVzaChlKX1hc3luYyBjb21wdXRlQ29tcGxldGlvbnMoZSx0KXtjb25zdCBuPXtpdGVtczpbXSxpc0luY29tcGxldGU6ITF9O2Zvcihjb25zdCBpIG9mIHRoaXMuYXRyaWJ1dGVDb21wbGV0aW9ucyl7Y29uc3Qgcj1UYyhlLmdldFRleHQoaS5yYW5nZSkpO2lmKGtjKHIpKWlmKHI9PT0iLiJ8fHI9PT0iLi4iKW4uaXNJbmNvbXBsZXRlPSEwO2Vsc2V7Y29uc3Qgcz1BYyhpLnZhbHVlLHIsaS5yYW5nZSksYT1hd2FpdCB0aGlzLnByb3ZpZGVQYXRoU3VnZ2VzdGlvbnMoaS52YWx1ZSxzLGUsdCk7Zm9yKGNvbnN0IGwgb2YgYSluLml0ZW1zLnB1c2gobCl9fXJldHVybiBufWFzeW5jIHByb3ZpZGVQYXRoU3VnZ2VzdGlvbnMoZSx0LG4saSl7Y29uc3Qgcj1lLnN1YnN0cmluZygwLGUubGFzdEluZGV4T2YoIi8iKSsxKTtsZXQgcz1pLnJlc29sdmVSZWZlcmVuY2Uocnx8Ii4iLG4udXJpKTtpZihzKXRyeXtjb25zdCBhPVtdLGw9YXdhaXQgdGhpcy5yZWFkRGlyZWN0b3J5KHMpO2Zvcihjb25zdFtvLHVdb2YgbClvLmNoYXJDb2RlQXQoMCkhPT14YyYmYS5wdXNoKFNjKG8sdT09PURpLkRpcmVjdG9yeSx0KSk7cmV0dXJuIGF9Y2F0Y2h7fXJldHVybltdfX0seGM9NDY7ZnVuY3Rpb24gVGMoZSl7cmV0dXJuIEplKGUsIiciKXx8SmUoZSwnIicpP2Uuc2xpY2UoMSwtMSk6ZX1mdW5jdGlvbiBrYyhlKXtyZXR1cm4hKEplKGUsImh0dHAiKXx8SmUoZSwiaHR0cHMiKXx8SmUoZSwiLy8iKSl9ZnVuY3Rpb24gQWMoZSx0LG4pe2xldCBpO2NvbnN0IHI9ZS5sYXN0SW5kZXhPZigiLyIpO2lmKHI9PT0tMSlpPUxjKG4sMSwtMSk7ZWxzZXtjb25zdCBzPXQuc2xpY2UocisxKSxhPXp0KG4uZW5kLC0xLXMubGVuZ3RoKSxsPXMuaW5kZXhPZigiICIpO2xldCBvO2whPT0tMT9vPXp0KGEsbCk6bz16dChuLmVuZCwtMSksaT0kLmNyZWF0ZShhLG8pfXJldHVybiBpfWZ1bmN0aW9uIFNjKGUsdCxuKXtyZXR1cm4gdD8oZT1lKyIvIix7bGFiZWw6ZSxraW5kOm1lLkZvbGRlcix0ZXh0RWRpdDphZS5yZXBsYWNlKG4sZSksY29tbWFuZDp7dGl0bGU6IlN1Z2dlc3QiLGNvbW1hbmQ6ImVkaXRvci5hY3Rpb24udHJpZ2dlclN1Z2dlc3QifX0pOntsYWJlbDplLGtpbmQ6bWUuRmlsZSx0ZXh0RWRpdDphZS5yZXBsYWNlKG4sZSl9fWZ1bmN0aW9uIHp0KGUsdCl7cmV0dXJuIHJlLmNyZWF0ZShlLmxpbmUsZS5jaGFyYWN0ZXIrdCl9ZnVuY3Rpb24gTGMoZSx0LG4pe2NvbnN0IGk9enQoZS5zdGFydCx0KSxyPXp0KGUuZW5kLG4pO3JldHVybiAkLmNyZWF0ZShpLHIpfXZhciBDYz1jbGFzc3tjb25zdHJ1Y3RvcihlLHQpe3RoaXMubHNPcHRpb25zPWUsdGhpcy5kYXRhTWFuYWdlcj10LHRoaXMuY29tcGxldGlvblBhcnRpY2lwYW50cz1bXX1zZXRDb21wbGV0aW9uUGFydGljaXBhbnRzKGUpe3RoaXMuY29tcGxldGlvblBhcnRpY2lwYW50cz1lfHxbXX1hc3luYyBkb0NvbXBsZXRlMihlLHQsbixpLHIpe2lmKCF0aGlzLmxzT3B0aW9ucy5maWxlU3lzdGVtUHJvdmlkZXJ8fCF0aGlzLmxzT3B0aW9ucy5maWxlU3lzdGVtUHJvdmlkZXIucmVhZERpcmVjdG9yeSlyZXR1cm4gdGhpcy5kb0NvbXBsZXRlKGUsdCxuLHIpO2NvbnN0IHM9bmV3IHljKHRoaXMuZGF0YU1hbmFnZXIsdGhpcy5sc09wdGlvbnMuZmlsZVN5c3RlbVByb3ZpZGVyLnJlYWREaXJlY3RvcnkpLGE9dGhpcy5jb21wbGV0aW9uUGFydGljaXBhbnRzO3RoaXMuY29tcGxldGlvblBhcnRpY2lwYW50cz1bc10uY29uY2F0KGEpO2NvbnN0IGw9dGhpcy5kb0NvbXBsZXRlKGUsdCxuLHIpO3RyeXtjb25zdCBvPWF3YWl0IHMuY29tcHV0ZUNvbXBsZXRpb25zKGUsaSk7cmV0dXJue2lzSW5jb21wbGV0ZTpsLmlzSW5jb21wbGV0ZXx8by5pc0luY29tcGxldGUsaXRlbXM6by5pdGVtcy5jb25jYXQobC5pdGVtcyl9fWZpbmFsbHl7dGhpcy5jb21wbGV0aW9uUGFydGljaXBhbnRzPWF9fWRvQ29tcGxldGUoZSx0LG4saSl7Y29uc3Qgcj10aGlzLl9kb0NvbXBsZXRlKGUsdCxuLGkpO3JldHVybiB0aGlzLmNvbnZlcnRDb21wbGV0aW9uTGlzdChyKX1fZG9Db21wbGV0ZShlLHQsbixpKXtjb25zdCByPXtpc0luY29tcGxldGU6ITEsaXRlbXM6W119LHM9dGhpcy5jb21wbGV0aW9uUGFydGljaXBhbnRzLGE9dGhpcy5kYXRhTWFuYWdlci5nZXREYXRhUHJvdmlkZXJzKCkuZmlsdGVyKHc9PncuaXNBcHBsaWNhYmxlKGUubGFuZ3VhZ2VJZCkmJighaXx8aVt3LmdldElkKCldIT09ITEpKSxsPXRoaXMuZGF0YU1hbmFnZXIuZ2V0Vm9pZEVsZW1lbnRzKGEpLG89dGhpcy5kb2VzU3VwcG9ydE1hcmtkb3duKCksdT1lLmdldFRleHQoKSxjPWUub2Zmc2V0QXQodCksZD1uLmZpbmROb2RlQmVmb3JlKGMpO2lmKCFkKXJldHVybiByO2NvbnN0IG09YmUodSxkLnN0YXJ0KTtsZXQgZj0iIixfO2Z1bmN0aW9uIGcodyxBPWMpe3JldHVybiB3PmMmJih3PWMpLHtzdGFydDplLnBvc2l0aW9uQXQodyksZW5kOmUucG9zaXRpb25BdChBKX19ZnVuY3Rpb24gayh3LEEpe2NvbnN0IFI9Zyh3LEEpO3JldHVybiBhLmZvckVhY2goST0+e0kucHJvdmlkZVRhZ3MoKS5mb3JFYWNoKEY9PntyLml0ZW1zLnB1c2goe2xhYmVsOkYubmFtZSxraW5kOm1lLlByb3BlcnR5LGRvY3VtZW50YXRpb246S2UoRix2b2lkIDAsbyksdGV4dEVkaXQ6YWUucmVwbGFjZShSLEYubmFtZSksaW5zZXJ0VGV4dEZvcm1hdDpTZS5QbGFpblRleHR9KX0pfSkscn1mdW5jdGlvbiB5KHcpe2xldCBBPXc7Zm9yKDtBPjA7KXtjb25zdCBSPXUuY2hhckF0KEEtMSk7aWYoYApccmAuaW5kZXhPZihSKT49MClyZXR1cm4gdS5zdWJzdHJpbmcoQSx3KTtpZighX24oUikpcmV0dXJuIG51bGw7QS0tfXJldHVybiB1LnN1YnN0cmluZygwLHcpfWZ1bmN0aW9uIHYodyxBLFI9Yyl7Y29uc3QgST1nKHcsUiksRj1ybyh1LFIsQi5XaXRoaW5FbmRUYWcsei5FbmRUYWdDbG9zZSk/IiI6Ij4iO2xldCBIPWQ7Zm9yKEEmJihIPUgucGFyZW50KTtIOyl7Y29uc3QgVz1ILnRhZztpZihXJiYoIUguY2xvc2VkfHxILmVuZFRhZ1N0YXJ0JiZILmVuZFRhZ1N0YXJ0PmMpKXtjb25zdCBxPXtsYWJlbDoiLyIrVyxraW5kOm1lLlByb3BlcnR5LGZpbHRlclRleHQ6Ii8iK1csdGV4dEVkaXQ6YWUucmVwbGFjZShJLCIvIitXK0YpLGluc2VydFRleHRGb3JtYXQ6U2UuUGxhaW5UZXh0fSxKPXkoSC5zdGFydCksb2U9eSh3LTEpO2lmKEohPT1udWxsJiZvZSE9PW51bGwmJkohPT1vZSl7Y29uc3QgeGU9SisiPC8iK1crRjtxLnRleHRFZGl0PWFlLnJlcGxhY2UoZyh3LTEtb2UubGVuZ3RoKSx4ZSkscS5maWx0ZXJUZXh0PW9lKyI8LyIrV31yZXR1cm4gci5pdGVtcy5wdXNoKHEpLHJ9SD1ILnBhcmVudH1yZXR1cm4gQXx8YS5mb3JFYWNoKFc9PntXLnByb3ZpZGVUYWdzKCkuZm9yRWFjaChxPT57ci5pdGVtcy5wdXNoKHtsYWJlbDoiLyIrcS5uYW1lLGtpbmQ6bWUuUHJvcGVydHksZG9jdW1lbnRhdGlvbjpLZShxLHZvaWQgMCxvKSxmaWx0ZXJUZXh0OiIvIitxLm5hbWUrRix0ZXh0RWRpdDphZS5yZXBsYWNlKEksIi8iK3EubmFtZStGKSxpbnNlcnRUZXh0Rm9ybWF0OlNlLlBsYWluVGV4dH0pfSl9KSxyfWNvbnN0IEU9KHcsQSk9PntpZihpJiZpLmhpZGVBdXRvQ29tcGxldGVQcm9wb3NhbHMpcmV0dXJuIHI7aWYoIXRoaXMuZGF0YU1hbmFnZXIuaXNWb2lkRWxlbWVudChBLGwpKXtjb25zdCBSPWUucG9zaXRpb25BdCh3KTtyLml0ZW1zLnB1c2goe2xhYmVsOiI8LyIrQSsiPiIsa2luZDptZS5Qcm9wZXJ0eSxmaWx0ZXJUZXh0OiI8LyIrQSsiPiIsdGV4dEVkaXQ6YWUuaW5zZXJ0KFIsIiQwPC8iK0ErIj4iKSxpbnNlcnRUZXh0Rm9ybWF0OlNlLlNuaXBwZXR9KX1yZXR1cm4gcn07ZnVuY3Rpb24gTSh3LEEpe3JldHVybiBrKHcsQSksdih3LCEwLEEpLHJ9ZnVuY3Rpb24gRCgpe2NvbnN0IHc9T2JqZWN0LmNyZWF0ZShudWxsKTtyZXR1cm4gZC5hdHRyaWJ1dGVOYW1lcy5mb3JFYWNoKEE9Pnt3W0FdPSEwfSksd31mdW5jdGlvbiBOKHcsQT1jKXtsZXQgUj1jO2Zvcig7UjxBJiZ1W1JdIT09IjwiOylSKys7Y29uc3QgST11LnN1YnN0cmluZyh3LEEpLEY9Zyh3LFIpO2xldCBIPSIiO2lmKCFybyh1LEEsQi5BZnRlckF0dHJpYnV0ZU5hbWUsei5EZWxpbWl0ZXJBc3NpZ24pKXtjb25zdCBxPWk/LmF0dHJpYnV0ZURlZmF1bHRWYWx1ZT8/ImRvdWJsZXF1b3RlcyI7cT09PSJlbXB0eSI/SD0iPSQxIjpxPT09InNpbmdsZXF1b3RlcyI/SD0iPSckMSciOkg9Jz0iJDEiJ31jb25zdCBXPUQoKTtyZXR1cm4gV1tJXT0hMSxhLmZvckVhY2gocT0+e3EucHJvdmlkZUF0dHJpYnV0ZXMoZikuZm9yRWFjaChKPT57aWYoV1tKLm5hbWVdKXJldHVybjtXW0oubmFtZV09ITA7bGV0IG9lPUoubmFtZSx4ZTtKLnZhbHVlU2V0IT09InYiJiZILmxlbmd0aCYmKG9lPW9lK0gsKEoudmFsdWVTZXR8fEoubmFtZT09PSJzdHlsZSIpJiYoeGU9e3RpdGxlOiJTdWdnZXN0Iixjb21tYW5kOiJlZGl0b3IuYWN0aW9uLnRyaWdnZXJTdWdnZXN0In0pKSxyLml0ZW1zLnB1c2goe2xhYmVsOkoubmFtZSxraW5kOkoudmFsdWVTZXQ9PT0iaGFuZGxlciI/bWUuRnVuY3Rpb246bWUuVmFsdWUsZG9jdW1lbnRhdGlvbjpLZShKLHZvaWQgMCxvKSx0ZXh0RWRpdDphZS5yZXBsYWNlKEYsb2UpLGluc2VydFRleHRGb3JtYXQ6U2UuU25pcHBldCxjb21tYW5kOnhlfSl9KX0pLGIoRixXKSxyfWZ1bmN0aW9uIGIodyxBKXtjb25zdCBSPSJkYXRhLSIsST17fTtJW1JdPWAke1J9JDE9IiQyImA7ZnVuY3Rpb24gRihIKXtILmF0dHJpYnV0ZU5hbWVzLmZvckVhY2goVz0+e0plKFcsUikmJiFJW1ddJiYhQVtXXSYmKElbV109VysnPSIkMSInKX0pLEguY2hpbGRyZW4uZm9yRWFjaChXPT5GKFcpKX1uJiZuLnJvb3RzLmZvckVhY2goSD0+RihIKSksT2JqZWN0LmtleXMoSSkuZm9yRWFjaChIPT5yLml0ZW1zLnB1c2goe2xhYmVsOkgsa2luZDptZS5WYWx1ZSx0ZXh0RWRpdDphZS5yZXBsYWNlKHcsSVtIXSksaW5zZXJ0VGV4dEZvcm1hdDpTZS5TbmlwcGV0fSkpfWZ1bmN0aW9uIHAodyxBPWMpe2xldCBSLEksRjtpZihjPncmJmM8PUEmJkVjKHVbd10pKXtjb25zdCBIPXcrMTtsZXQgVz1BO0E+dyYmdVtBLTFdPT09dVt3XSYmVy0tO2NvbnN0IHE9UmModSxjLEgpLEo9TWModSxjLFcpO1I9ZyhxLEopLEY9Yz49SCYmYzw9Vz91LnN1YnN0cmluZyhILGMpOiIiLEk9ITF9ZWxzZSBSPWcodyxBKSxGPXUuc3Vic3RyaW5nKHcsYyksST0hMDtpZihzLmxlbmd0aD4wKXtjb25zdCBIPWYudG9Mb3dlckNhc2UoKSxXPV8udG9Mb3dlckNhc2UoKSxxPWcodyxBKTtmb3IoY29uc3QgSiBvZiBzKUoub25IdG1sQXR0cmlidXRlVmFsdWUmJkoub25IdG1sQXR0cmlidXRlVmFsdWUoe2RvY3VtZW50OmUscG9zaXRpb246dCx0YWc6SCxhdHRyaWJ1dGU6Vyx2YWx1ZTpGLHJhbmdlOnF9KX1yZXR1cm4gYS5mb3JFYWNoKEg9PntILnByb3ZpZGVWYWx1ZXMoZixfKS5mb3JFYWNoKFc9Pntjb25zdCBxPUk/JyInK1cubmFtZSsnIic6Vy5uYW1lO3IuaXRlbXMucHVzaCh7bGFiZWw6Vy5uYW1lLGZpbHRlclRleHQ6cSxraW5kOm1lLlVuaXQsZG9jdW1lbnRhdGlvbjpLZShXLHZvaWQgMCxvKSx0ZXh0RWRpdDphZS5yZXBsYWNlKFIscSksaW5zZXJ0VGV4dEZvcm1hdDpTZS5QbGFpblRleHR9KX0pfSksTCgpLHJ9ZnVuY3Rpb24geCh3KXtyZXR1cm4gYz09PW0uZ2V0VG9rZW5FbmQoKSYmKFM9bS5zY2FuKCksUz09PXcmJm0uZ2V0VG9rZW5PZmZzZXQoKT09PWMpP20uZ2V0VG9rZW5FbmQoKTpjfWZ1bmN0aW9uIFUoKXtmb3IoY29uc3QgdyBvZiBzKXcub25IdG1sQ29udGVudCYmdy5vbkh0bWxDb250ZW50KHtkb2N1bWVudDplLHBvc2l0aW9uOnR9KTtyZXR1cm4gTCgpfWZ1bmN0aW9uIEwoKXtsZXQgdz1jLTEsQT10LmNoYXJhY3Rlcjtmb3IoO3c+PTAmJkl0KHUsdyk7KXctLSxBLS07aWYodz49MCYmdVt3XT09PSImIil7Y29uc3QgUj0kLmNyZWF0ZShyZS5jcmVhdGUodC5saW5lLEEtMSksdCk7Zm9yKGNvbnN0IEkgaW4gRHQpaWYobWMoSSwiOyIpKXtjb25zdCBGPSImIitJO3IuaXRlbXMucHVzaCh7bGFiZWw6RixraW5kOm1lLktleXdvcmQsZG9jdW1lbnRhdGlvbjpBZSgiQ2hhcmFjdGVyIGVudGl0eSByZXByZXNlbnRpbmcgJ3swfSciLER0W0ldKSx0ZXh0RWRpdDphZS5yZXBsYWNlKFIsRiksaW5zZXJ0VGV4dEZvcm1hdDpTZS5QbGFpblRleHR9KX19cmV0dXJuIHJ9ZnVuY3Rpb24gVCh3LEEpe2NvbnN0IFI9Zyh3LEEpO3IuaXRlbXMucHVzaCh7bGFiZWw6IiFET0NUWVBFIixraW5kOm1lLlByb3BlcnR5LGRvY3VtZW50YXRpb246IkEgcHJlYW1ibGUgZm9yIGFuIEhUTUwgZG9jdW1lbnQuIix0ZXh0RWRpdDphZS5yZXBsYWNlKFIsIiFET0NUWVBFIGh0bWw+IiksaW5zZXJ0VGV4dEZvcm1hdDpTZS5QbGFpblRleHR9KX1sZXQgUz1tLnNjYW4oKTtmb3IoO1MhPT16LkVPUyYmbS5nZXRUb2tlbk9mZnNldCgpPD1jOyl7c3dpdGNoKFMpe2Nhc2Ugei5TdGFydFRhZ09wZW46aWYobS5nZXRUb2tlbkVuZCgpPT09Yyl7Y29uc3Qgdz14KHouU3RhcnRUYWcpO3JldHVybiB0LmxpbmU9PT0wJiZUKGMsdyksTShjLHcpfWJyZWFrO2Nhc2Ugei5TdGFydFRhZzppZihtLmdldFRva2VuT2Zmc2V0KCk8PWMmJmM8PW0uZ2V0VG9rZW5FbmQoKSlyZXR1cm4gayhtLmdldFRva2VuT2Zmc2V0KCksbS5nZXRUb2tlbkVuZCgpKTtmPW0uZ2V0VG9rZW5UZXh0KCk7YnJlYWs7Y2FzZSB6LkF0dHJpYnV0ZU5hbWU6aWYobS5nZXRUb2tlbk9mZnNldCgpPD1jJiZjPD1tLmdldFRva2VuRW5kKCkpcmV0dXJuIE4obS5nZXRUb2tlbk9mZnNldCgpLG0uZ2V0VG9rZW5FbmQoKSk7Xz1tLmdldFRva2VuVGV4dCgpO2JyZWFrO2Nhc2Ugei5EZWxpbWl0ZXJBc3NpZ246aWYobS5nZXRUb2tlbkVuZCgpPT09Yyl7Y29uc3Qgdz14KHouQXR0cmlidXRlVmFsdWUpO3JldHVybiBwKGMsdyl9YnJlYWs7Y2FzZSB6LkF0dHJpYnV0ZVZhbHVlOmlmKG0uZ2V0VG9rZW5PZmZzZXQoKTw9YyYmYzw9bS5nZXRUb2tlbkVuZCgpKXJldHVybiBwKG0uZ2V0VG9rZW5PZmZzZXQoKSxtLmdldFRva2VuRW5kKCkpO2JyZWFrO2Nhc2Ugei5XaGl0ZXNwYWNlOmlmKGM8PW0uZ2V0VG9rZW5FbmQoKSlzd2l0Y2gobS5nZXRTY2FubmVyU3RhdGUoKSl7Y2FzZSBCLkFmdGVyT3BlbmluZ1N0YXJ0VGFnOmNvbnN0IHc9bS5nZXRUb2tlbk9mZnNldCgpLEE9eCh6LlN0YXJ0VGFnKTtyZXR1cm4gTSh3LEEpO2Nhc2UgQi5XaXRoaW5UYWc6Y2FzZSBCLkFmdGVyQXR0cmlidXRlTmFtZTpyZXR1cm4gTihtLmdldFRva2VuRW5kKCkpO2Nhc2UgQi5CZWZvcmVBdHRyaWJ1dGVWYWx1ZTpyZXR1cm4gcChtLmdldFRva2VuRW5kKCkpO2Nhc2UgQi5BZnRlck9wZW5pbmdFbmRUYWc6cmV0dXJuIHYobS5nZXRUb2tlbk9mZnNldCgpLTEsITEpO2Nhc2UgQi5XaXRoaW5Db250ZW50OnJldHVybiBVKCl9YnJlYWs7Y2FzZSB6LkVuZFRhZ09wZW46aWYoYzw9bS5nZXRUb2tlbkVuZCgpKXtjb25zdCB3PW0uZ2V0VG9rZW5PZmZzZXQoKSsxLEE9eCh6LkVuZFRhZyk7cmV0dXJuIHYodywhMSxBKX1icmVhaztjYXNlIHouRW5kVGFnOmlmKGM8PW0uZ2V0VG9rZW5FbmQoKSl7bGV0IHc9bS5nZXRUb2tlbk9mZnNldCgpLTE7Zm9yKDt3Pj0wOyl7Y29uc3QgQT11LmNoYXJBdCh3KTtpZihBPT09Ii8iKXJldHVybiB2KHcsITEsbS5nZXRUb2tlbkVuZCgpKTtpZighX24oQSkpYnJlYWs7dy0tfX1icmVhaztjYXNlIHouU3RhcnRUYWdDbG9zZTppZihjPD1tLmdldFRva2VuRW5kKCkmJmYpcmV0dXJuIEUobS5nZXRUb2tlbkVuZCgpLGYpO2JyZWFrO2Nhc2Ugei5Db250ZW50OmlmKGM8PW0uZ2V0VG9rZW5FbmQoKSlyZXR1cm4gVSgpO2JyZWFrO2RlZmF1bHQ6aWYoYzw9bS5nZXRUb2tlbkVuZCgpKXJldHVybiByO2JyZWFrfVM9bS5zY2FuKCl9cmV0dXJuIHJ9ZG9RdW90ZUNvbXBsZXRlKGUsdCxuLGkpe2NvbnN0IHI9ZS5vZmZzZXRBdCh0KTtpZihyPD0wKXJldHVybiBudWxsO2NvbnN0IHM9aT8uYXR0cmlidXRlRGVmYXVsdFZhbHVlPz8iZG91YmxlcXVvdGVzIjtpZihzPT09ImVtcHR5Inx8ZS5nZXRUZXh0KCkuY2hhckF0KHItMSkhPT0iPSIpcmV0dXJuIG51bGw7Y29uc3QgbD1zPT09ImRvdWJsZXF1b3RlcyI/JyIkMSInOiInJDEnIixvPW4uZmluZE5vZGVCZWZvcmUocik7aWYobyYmby5hdHRyaWJ1dGVzJiZvLnN0YXJ0PHImJighby5lbmRUYWdTdGFydHx8by5lbmRUYWdTdGFydD5yKSl7Y29uc3QgdT1iZShlLmdldFRleHQoKSxvLnN0YXJ0KTtsZXQgYz11LnNjYW4oKTtmb3IoO2MhPT16LkVPUyYmdS5nZXRUb2tlbkVuZCgpPD1yOyl7aWYoYz09PXouQXR0cmlidXRlTmFtZSYmdS5nZXRUb2tlbkVuZCgpPT09ci0xKXJldHVybiBjPXUuc2NhbigpLGMhPT16LkRlbGltaXRlckFzc2lnbnx8KGM9dS5zY2FuKCksYz09PXouVW5rbm93bnx8Yz09PXouQXR0cmlidXRlVmFsdWUpP251bGw6bDtjPXUuc2NhbigpfX1yZXR1cm4gbnVsbH1kb1RhZ0NvbXBsZXRlKGUsdCxuKXtjb25zdCBpPWUub2Zmc2V0QXQodCk7aWYoaTw9MClyZXR1cm4gbnVsbDtjb25zdCByPWUuZ2V0VGV4dCgpLmNoYXJBdChpLTEpO2lmKHI9PT0iPiIpe2NvbnN0IHM9dGhpcy5kYXRhTWFuYWdlci5nZXRWb2lkRWxlbWVudHMoZS5sYW5ndWFnZUlkKSxhPW4uZmluZE5vZGVCZWZvcmUoaSk7aWYoYSYmYS50YWcmJiF0aGlzLmRhdGFNYW5hZ2VyLmlzVm9pZEVsZW1lbnQoYS50YWcscykmJmEuc3RhcnQ8aSYmKCFhLmVuZFRhZ1N0YXJ0fHxhLmVuZFRhZ1N0YXJ0PmkpKXtjb25zdCBsPWJlKGUuZ2V0VGV4dCgpLGEuc3RhcnQpO2xldCBvPWwuc2NhbigpO2Zvcig7byE9PXouRU9TJiZsLmdldFRva2VuRW5kKCk8PWk7KXtpZihvPT09ei5TdGFydFRhZ0Nsb3NlJiZsLmdldFRva2VuRW5kKCk9PT1pKXJldHVybmAkMDwvJHthLnRhZ30+YDtvPWwuc2NhbigpfX19ZWxzZSBpZihyPT09Ii8iKXtsZXQgcz1uLmZpbmROb2RlQmVmb3JlKGkpO2Zvcig7cyYmcy5jbG9zZWQmJiEocy5lbmRUYWdTdGFydCYmcy5lbmRUYWdTdGFydD5pKTspcz1zLnBhcmVudDtpZihzJiZzLnRhZyl7Y29uc3QgYT1iZShlLmdldFRleHQoKSxzLnN0YXJ0KTtsZXQgbD1hLnNjYW4oKTtmb3IoO2whPT16LkVPUyYmYS5nZXRUb2tlbkVuZCgpPD1pOyl7aWYobD09PXouRW5kVGFnT3BlbiYmYS5nZXRUb2tlbkVuZCgpPT09aSlyZXR1cm4gZS5nZXRUZXh0KCkuY2hhckF0KGkpIT09Ij4iP2Ake3MudGFnfT5gOnMudGFnO2w9YS5zY2FuKCl9fX1yZXR1cm4gbnVsbH1jb252ZXJ0Q29tcGxldGlvbkxpc3QoZSl7cmV0dXJuIHRoaXMuZG9lc1N1cHBvcnRNYXJrZG93bigpfHxlLml0ZW1zLmZvckVhY2godD0+e3QuZG9jdW1lbnRhdGlvbiYmdHlwZW9mIHQuZG9jdW1lbnRhdGlvbiE9InN0cmluZyImJih0LmRvY3VtZW50YXRpb249e2tpbmQ6InBsYWludGV4dCIsdmFsdWU6dC5kb2N1bWVudGF0aW9uLnZhbHVlfSl9KSxlfWRvZXNTdXBwb3J0TWFya2Rvd24oKXtpZighYm4odGhpcy5zdXBwb3J0c01hcmtkb3duKSl7aWYoIWJuKHRoaXMubHNPcHRpb25zLmNsaWVudENhcGFiaWxpdGllcykpcmV0dXJuIHRoaXMuc3VwcG9ydHNNYXJrZG93bj0hMCx0aGlzLnN1cHBvcnRzTWFya2Rvd247Y29uc3QgZT10aGlzLmxzT3B0aW9ucy5jbGllbnRDYXBhYmlsaXRpZXMudGV4dERvY3VtZW50Py5jb21wbGV0aW9uPy5jb21wbGV0aW9uSXRlbT8uZG9jdW1lbnRhdGlvbkZvcm1hdDt0aGlzLnN1cHBvcnRzTWFya2Rvd249QXJyYXkuaXNBcnJheShlKSYmZS5pbmRleE9mKFBlLk1hcmtkb3duKSE9PS0xfXJldHVybiB0aGlzLnN1cHBvcnRzTWFya2Rvd259fTtmdW5jdGlvbiBFYyhlKXtyZXR1cm4vXlsiJ10qJC8udGVzdChlKX1mdW5jdGlvbiBfbihlKXtyZXR1cm4vXlxzKiQvLnRlc3QoZSl9ZnVuY3Rpb24gcm8oZSx0LG4saSl7Y29uc3Qgcj1iZShlLHQsbik7bGV0IHM9ci5zY2FuKCk7Zm9yKDtzPT09ei5XaGl0ZXNwYWNlOylzPXIuc2NhbigpO3JldHVybiBzPT09aX1mdW5jdGlvbiBSYyhlLHQsbil7Zm9yKDt0Pm4mJiFfbihlW3QtMV0pOyl0LS07cmV0dXJuIHR9ZnVuY3Rpb24gTWMoZSx0LG4pe2Zvcig7dDxuJiYhX24oZVt0XSk7KXQrKztyZXR1cm4gdH12YXIgTmM9Y2xhc3N7Y29uc3RydWN0b3IoZSx0KXt0aGlzLmxzT3B0aW9ucz1lLHRoaXMuZGF0YU1hbmFnZXI9dH1kb0hvdmVyKGUsdCxuLGkpe2NvbnN0IHI9dGhpcy5jb252ZXJ0Q29udGVudHMuYmluZCh0aGlzKSxzPXRoaXMuZG9lc1N1cHBvcnRNYXJrZG93bigpLGE9ZS5vZmZzZXRBdCh0KSxsPW4uZmluZE5vZGVBdChhKSxvPWUuZ2V0VGV4dCgpO2lmKCFsfHwhbC50YWcpcmV0dXJuIG51bGw7Y29uc3QgdT10aGlzLmRhdGFNYW5hZ2VyLmdldERhdGFQcm92aWRlcnMoKS5maWx0ZXIoTj0+Ti5pc0FwcGxpY2FibGUoZS5sYW5ndWFnZUlkKSk7ZnVuY3Rpb24gYyhOLGIscCl7Zm9yKGNvbnN0IHggb2YgdSl7bGV0IFU9bnVsbDtpZih4LnByb3ZpZGVUYWdzKCkuZm9yRWFjaChMPT57aWYoTC5uYW1lLnRvTG93ZXJDYXNlKCk9PT1OLnRvTG93ZXJDYXNlKCkpe2xldCBUPUtlKEwsaSxzKTtUfHwoVD17a2luZDpzPyJtYXJrZG93biI6InBsYWludGV4dCIsdmFsdWU6IiJ9KSxVPXtjb250ZW50czpULHJhbmdlOmJ9fX0pLFUpcmV0dXJuIFUuY29udGVudHM9cihVLmNvbnRlbnRzKSxVfXJldHVybiBudWxsfWZ1bmN0aW9uIGQoTixiLHApe2Zvcihjb25zdCB4IG9mIHUpe2xldCBVPW51bGw7aWYoeC5wcm92aWRlQXR0cmlidXRlcyhOKS5mb3JFYWNoKEw9PntpZihiPT09TC5uYW1lJiZMLmRlc2NyaXB0aW9uKXtjb25zdCBUPUtlKEwsaSxzKTtUP1U9e2NvbnRlbnRzOlQscmFuZ2U6cH06VT1udWxsfX0pLFUpcmV0dXJuIFUuY29udGVudHM9cihVLmNvbnRlbnRzKSxVfXJldHVybiBudWxsfWZ1bmN0aW9uIG0oTixiLHAseCl7Zm9yKGNvbnN0IFUgb2YgdSl7bGV0IEw9bnVsbDtpZihVLnByb3ZpZGVWYWx1ZXMoTixiKS5mb3JFYWNoKFQ9PntpZihwPT09VC5uYW1lJiZULmRlc2NyaXB0aW9uKXtjb25zdCBTPUtlKFQsaSxzKTtTP0w9e2NvbnRlbnRzOlMscmFuZ2U6eH06TD1udWxsfX0pLEwpcmV0dXJuIEwuY29udGVudHM9cihMLmNvbnRlbnRzKSxMfXJldHVybiBudWxsfWZ1bmN0aW9uIGYoTixiKXtsZXQgcD1rKE4pO2Zvcihjb25zdCB4IGluIER0KXtsZXQgVT1udWxsO2NvbnN0IEw9IiYiK3g7aWYocD09PUwpe2xldCBUPUR0W3hdLmNoYXJDb2RlQXQoMCkudG9TdHJpbmcoMTYpLnRvVXBwZXJDYXNlKCksUz0iVSsiO2lmKFQubGVuZ3RoPDQpe2NvbnN0IEE9NC1ULmxlbmd0aDtsZXQgUj0wO2Zvcig7UjxBOylTKz0iMCIsUis9MX1TKz1UO2NvbnN0IHc9QWUoIkNoYXJhY3RlciBlbnRpdHkgcmVwcmVzZW50aW5nICd7MH0nLCB1bmljb2RlIGVxdWl2YWxlbnQgJ3sxfSciLER0W3hdLFMpO3c/VT17Y29udGVudHM6dyxyYW5nZTpifTpVPW51bGx9aWYoVSlyZXR1cm4gVS5jb250ZW50cz1yKFUuY29udGVudHMpLFV9cmV0dXJuIG51bGx9ZnVuY3Rpb24gXyhOLGIpe2NvbnN0IHA9YmUoZS5nZXRUZXh0KCksYik7bGV0IHg9cC5zY2FuKCk7Zm9yKDt4IT09ei5FT1MmJihwLmdldFRva2VuRW5kKCk8YXx8cC5nZXRUb2tlbkVuZCgpPT09YSYmeCE9PU4pOyl4PXAuc2NhbigpO3JldHVybiB4PT09TiYmYTw9cC5nZXRUb2tlbkVuZCgpP3tzdGFydDplLnBvc2l0aW9uQXQocC5nZXRUb2tlbk9mZnNldCgpKSxlbmQ6ZS5wb3NpdGlvbkF0KHAuZ2V0VG9rZW5FbmQoKSl9Om51bGx9ZnVuY3Rpb24gZygpe2xldCBOPWEtMSxiPXQuY2hhcmFjdGVyO2Zvcig7Tj49MCYmSXQobyxOKTspTi0tLGItLTtsZXQgcD1OKzEseD1iO2Zvcig7SXQobyxwKTspcCsrLHgrKztpZihOPj0wJiZvW05dPT09IiYiKXtsZXQgVT1udWxsO3JldHVybiBvW3BdPT09IjsiP1U9JC5jcmVhdGUocmUuY3JlYXRlKHQubGluZSxiKSxyZS5jcmVhdGUodC5saW5lLHgrMSkpOlU9JC5jcmVhdGUocmUuY3JlYXRlKHQubGluZSxiKSxyZS5jcmVhdGUodC5saW5lLHgpKSxVfXJldHVybiBudWxsfWZ1bmN0aW9uIGsoTil7bGV0IGI9YS0xLHA9IiYiO2Zvcig7Yj49MCYmSXQoTixiKTspYi0tO2ZvcihiPWIrMTtJdChOLGIpOylwKz1OW2JdLGIrPTE7cmV0dXJuIHArPSI7IixwfWlmKGwuZW5kVGFnU3RhcnQmJmE+PWwuZW5kVGFnU3RhcnQpe2NvbnN0IE49Xyh6LkVuZFRhZyxsLmVuZFRhZ1N0YXJ0KTtyZXR1cm4gTj9jKGwudGFnLE4pOm51bGx9Y29uc3QgeT1fKHouU3RhcnRUYWcsbC5zdGFydCk7aWYoeSlyZXR1cm4gYyhsLnRhZyx5KTtjb25zdCB2PV8oei5BdHRyaWJ1dGVOYW1lLGwuc3RhcnQpO2lmKHYpe2NvbnN0IE49bC50YWcsYj1lLmdldFRleHQodik7cmV0dXJuIGQoTixiLHYpfWNvbnN0IEU9ZygpO2lmKEUpcmV0dXJuIGYobyxFKTtmdW5jdGlvbiBNKE4sYil7Y29uc3QgcD1iZShlLmdldFRleHQoKSxOKTtsZXQgeD1wLnNjYW4oKSxVO2Zvcig7eCE9PXouRU9TJiZwLmdldFRva2VuRW5kKCk8PWI7KXg9cC5zY2FuKCkseD09PXouQXR0cmlidXRlTmFtZSYmKFU9cC5nZXRUb2tlblRleHQoKSk7cmV0dXJuIFV9Y29uc3QgRD1fKHouQXR0cmlidXRlVmFsdWUsbC5zdGFydCk7aWYoRCl7Y29uc3QgTj1sLnRhZyxiPURjKGUuZ2V0VGV4dChEKSkscD1NKGwuc3RhcnQsZS5vZmZzZXRBdChELnN0YXJ0KSk7aWYocClyZXR1cm4gbShOLHAsYixEKX1yZXR1cm4gbnVsbH1jb252ZXJ0Q29udGVudHMoZSl7aWYoIXRoaXMuZG9lc1N1cHBvcnRNYXJrZG93bigpKXtpZih0eXBlb2YgZT09InN0cmluZyIpcmV0dXJuIGU7aWYoImtpbmQiaW4gZSlyZXR1cm57a2luZDoicGxhaW50ZXh0Iix2YWx1ZTplLnZhbHVlfTtpZihBcnJheS5pc0FycmF5KGUpKWUubWFwKHQ9PnR5cGVvZiB0PT0ic3RyaW5nIj90OnQudmFsdWUpO2Vsc2UgcmV0dXJuIGUudmFsdWV9cmV0dXJuIGV9ZG9lc1N1cHBvcnRNYXJrZG93bigpe2lmKCFibih0aGlzLnN1cHBvcnRzTWFya2Rvd24pKXtpZighYm4odGhpcy5sc09wdGlvbnMuY2xpZW50Q2FwYWJpbGl0aWVzKSlyZXR1cm4gdGhpcy5zdXBwb3J0c01hcmtkb3duPSEwLHRoaXMuc3VwcG9ydHNNYXJrZG93bjtjb25zdCBlPXRoaXMubHNPcHRpb25zLmNsaWVudENhcGFiaWxpdGllcz8udGV4dERvY3VtZW50Py5ob3Zlcj8uY29udGVudEZvcm1hdDt0aGlzLnN1cHBvcnRzTWFya2Rvd249QXJyYXkuaXNBcnJheShlKSYmZS5pbmRleE9mKFBlLk1hcmtkb3duKSE9PS0xfXJldHVybiB0aGlzLnN1cHBvcnRzTWFya2Rvd259fTtmdW5jdGlvbiBEYyhlKXtyZXR1cm4gZS5sZW5ndGg8PTE/ZS5yZXBsYWNlKC9bJyJdLywiIik6KChlWzBdPT09IicifHxlWzBdPT09JyInKSYmKGU9ZS5zbGljZSgxKSksKGVbZS5sZW5ndGgtMV09PT0iJyJ8fGVbZS5sZW5ndGgtMV09PT0nIicpJiYoZT1lLnNsaWNlKDAsLTEpKSxlKX1mdW5jdGlvbiBJYyhlLHQpe3JldHVybiBlfXZhciBzbzsoZnVuY3Rpb24oKXt2YXIgZT1bLCxmdW5jdGlvbihyKXtmdW5jdGlvbiBzKG8pe3RoaXMuX19wYXJlbnQ9byx0aGlzLl9fY2hhcmFjdGVyX2NvdW50PTAsdGhpcy5fX2luZGVudF9jb3VudD0tMSx0aGlzLl9fYWxpZ25tZW50X2NvdW50PTAsdGhpcy5fX3dyYXBfcG9pbnRfaW5kZXg9MCx0aGlzLl9fd3JhcF9wb2ludF9jaGFyYWN0ZXJfY291bnQ9MCx0aGlzLl9fd3JhcF9wb2ludF9pbmRlbnRfY291bnQ9LTEsdGhpcy5fX3dyYXBfcG9pbnRfYWxpZ25tZW50X2NvdW50PTAsdGhpcy5fX2l0ZW1zPVtdfXMucHJvdG90eXBlLmNsb25lX2VtcHR5PWZ1bmN0aW9uKCl7dmFyIG89bmV3IHModGhpcy5fX3BhcmVudCk7cmV0dXJuIG8uc2V0X2luZGVudCh0aGlzLl9faW5kZW50X2NvdW50LHRoaXMuX19hbGlnbm1lbnRfY291bnQpLG99LHMucHJvdG90eXBlLml0ZW09ZnVuY3Rpb24obyl7cmV0dXJuIG88MD90aGlzLl9faXRlbXNbdGhpcy5fX2l0ZW1zLmxlbmd0aCtvXTp0aGlzLl9faXRlbXNbb119LHMucHJvdG90eXBlLmhhc19tYXRjaD1mdW5jdGlvbihvKXtmb3IodmFyIHU9dGhpcy5fX2l0ZW1zLmxlbmd0aC0xO3U+PTA7dS0tKWlmKHRoaXMuX19pdGVtc1t1XS5tYXRjaChvKSlyZXR1cm4hMDtyZXR1cm4hMX0scy5wcm90b3R5cGUuc2V0X2luZGVudD1mdW5jdGlvbihvLHUpe3RoaXMuaXNfZW1wdHkoKSYmKHRoaXMuX19pbmRlbnRfY291bnQ9b3x8MCx0aGlzLl9fYWxpZ25tZW50X2NvdW50PXV8fDAsdGhpcy5fX2NoYXJhY3Rlcl9jb3VudD10aGlzLl9fcGFyZW50LmdldF9pbmRlbnRfc2l6ZSh0aGlzLl9faW5kZW50X2NvdW50LHRoaXMuX19hbGlnbm1lbnRfY291bnQpKX0scy5wcm90b3R5cGUuX3NldF93cmFwX3BvaW50PWZ1bmN0aW9uKCl7dGhpcy5fX3BhcmVudC53cmFwX2xpbmVfbGVuZ3RoJiYodGhpcy5fX3dyYXBfcG9pbnRfaW5kZXg9dGhpcy5fX2l0ZW1zLmxlbmd0aCx0aGlzLl9fd3JhcF9wb2ludF9jaGFyYWN0ZXJfY291bnQ9dGhpcy5fX2NoYXJhY3Rlcl9jb3VudCx0aGlzLl9fd3JhcF9wb2ludF9pbmRlbnRfY291bnQ9dGhpcy5fX3BhcmVudC5uZXh0X2xpbmUuX19pbmRlbnRfY291bnQsdGhpcy5fX3dyYXBfcG9pbnRfYWxpZ25tZW50X2NvdW50PXRoaXMuX19wYXJlbnQubmV4dF9saW5lLl9fYWxpZ25tZW50X2NvdW50KX0scy5wcm90b3R5cGUuX3Nob3VsZF93cmFwPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX193cmFwX3BvaW50X2luZGV4JiZ0aGlzLl9fY2hhcmFjdGVyX2NvdW50PnRoaXMuX19wYXJlbnQud3JhcF9saW5lX2xlbmd0aCYmdGhpcy5fX3dyYXBfcG9pbnRfY2hhcmFjdGVyX2NvdW50PnRoaXMuX19wYXJlbnQubmV4dF9saW5lLl9fY2hhcmFjdGVyX2NvdW50fSxzLnByb3RvdHlwZS5fYWxsb3dfd3JhcD1mdW5jdGlvbigpe2lmKHRoaXMuX3Nob3VsZF93cmFwKCkpe3RoaXMuX19wYXJlbnQuYWRkX25ld19saW5lKCk7dmFyIG89dGhpcy5fX3BhcmVudC5jdXJyZW50X2xpbmU7cmV0dXJuIG8uc2V0X2luZGVudCh0aGlzLl9fd3JhcF9wb2ludF9pbmRlbnRfY291bnQsdGhpcy5fX3dyYXBfcG9pbnRfYWxpZ25tZW50X2NvdW50KSxvLl9faXRlbXM9dGhpcy5fX2l0ZW1zLnNsaWNlKHRoaXMuX193cmFwX3BvaW50X2luZGV4KSx0aGlzLl9faXRlbXM9dGhpcy5fX2l0ZW1zLnNsaWNlKDAsdGhpcy5fX3dyYXBfcG9pbnRfaW5kZXgpLG8uX19jaGFyYWN0ZXJfY291bnQrPXRoaXMuX19jaGFyYWN0ZXJfY291bnQtdGhpcy5fX3dyYXBfcG9pbnRfY2hhcmFjdGVyX2NvdW50LHRoaXMuX19jaGFyYWN0ZXJfY291bnQ9dGhpcy5fX3dyYXBfcG9pbnRfY2hhcmFjdGVyX2NvdW50LG8uX19pdGVtc1swXT09PSIgIiYmKG8uX19pdGVtcy5zcGxpY2UoMCwxKSxvLl9fY2hhcmFjdGVyX2NvdW50LT0xKSwhMH1yZXR1cm4hMX0scy5wcm90b3R5cGUuaXNfZW1wdHk9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX2l0ZW1zLmxlbmd0aD09PTB9LHMucHJvdG90eXBlLmxhc3Q9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pc19lbXB0eSgpP251bGw6dGhpcy5fX2l0ZW1zW3RoaXMuX19pdGVtcy5sZW5ndGgtMV19LHMucHJvdG90eXBlLnB1c2g9ZnVuY3Rpb24obyl7dGhpcy5fX2l0ZW1zLnB1c2gobyk7dmFyIHU9by5sYXN0SW5kZXhPZihgCmApO3UhPT0tMT90aGlzLl9fY2hhcmFjdGVyX2NvdW50PW8ubGVuZ3RoLXU6dGhpcy5fX2NoYXJhY3Rlcl9jb3VudCs9by5sZW5ndGh9LHMucHJvdG90eXBlLnBvcD1mdW5jdGlvbigpe3ZhciBvPW51bGw7cmV0dXJuIHRoaXMuaXNfZW1wdHkoKXx8KG89dGhpcy5fX2l0ZW1zLnBvcCgpLHRoaXMuX19jaGFyYWN0ZXJfY291bnQtPW8ubGVuZ3RoKSxvfSxzLnByb3RvdHlwZS5fcmVtb3ZlX2luZGVudD1mdW5jdGlvbigpe3RoaXMuX19pbmRlbnRfY291bnQ+MCYmKHRoaXMuX19pbmRlbnRfY291bnQtPTEsdGhpcy5fX2NoYXJhY3Rlcl9jb3VudC09dGhpcy5fX3BhcmVudC5pbmRlbnRfc2l6ZSl9LHMucHJvdG90eXBlLl9yZW1vdmVfd3JhcF9pbmRlbnQ9ZnVuY3Rpb24oKXt0aGlzLl9fd3JhcF9wb2ludF9pbmRlbnRfY291bnQ+MCYmKHRoaXMuX193cmFwX3BvaW50X2luZGVudF9jb3VudC09MSl9LHMucHJvdG90eXBlLnRyaW09ZnVuY3Rpb24oKXtmb3IoO3RoaXMubGFzdCgpPT09IiAiOyl0aGlzLl9faXRlbXMucG9wKCksdGhpcy5fX2NoYXJhY3Rlcl9jb3VudC09MX0scy5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXt2YXIgbz0iIjtyZXR1cm4gdGhpcy5pc19lbXB0eSgpP3RoaXMuX19wYXJlbnQuaW5kZW50X2VtcHR5X2xpbmVzJiYobz10aGlzLl9fcGFyZW50LmdldF9pbmRlbnRfc3RyaW5nKHRoaXMuX19pbmRlbnRfY291bnQpKToobz10aGlzLl9fcGFyZW50LmdldF9pbmRlbnRfc3RyaW5nKHRoaXMuX19pbmRlbnRfY291bnQsdGhpcy5fX2FsaWdubWVudF9jb3VudCksbys9dGhpcy5fX2l0ZW1zLmpvaW4oIiIpKSxvfTtmdW5jdGlvbiBhKG8sdSl7dGhpcy5fX2NhY2hlPVsiIl0sdGhpcy5fX2luZGVudF9zaXplPW8uaW5kZW50X3NpemUsdGhpcy5fX2luZGVudF9zdHJpbmc9by5pbmRlbnRfY2hhcixvLmluZGVudF93aXRoX3RhYnN8fCh0aGlzLl9faW5kZW50X3N0cmluZz1uZXcgQXJyYXkoby5pbmRlbnRfc2l6ZSsxKS5qb2luKG8uaW5kZW50X2NoYXIpKSx1PXV8fCIiLG8uaW5kZW50X2xldmVsPjAmJih1PW5ldyBBcnJheShvLmluZGVudF9sZXZlbCsxKS5qb2luKHRoaXMuX19pbmRlbnRfc3RyaW5nKSksdGhpcy5fX2Jhc2Vfc3RyaW5nPXUsdGhpcy5fX2Jhc2Vfc3RyaW5nX2xlbmd0aD11Lmxlbmd0aH1hLnByb3RvdHlwZS5nZXRfaW5kZW50X3NpemU9ZnVuY3Rpb24obyx1KXt2YXIgYz10aGlzLl9fYmFzZV9zdHJpbmdfbGVuZ3RoO3JldHVybiB1PXV8fDAsbzwwJiYoYz0wKSxjKz1vKnRoaXMuX19pbmRlbnRfc2l6ZSxjKz11LGN9LGEucHJvdG90eXBlLmdldF9pbmRlbnRfc3RyaW5nPWZ1bmN0aW9uKG8sdSl7dmFyIGM9dGhpcy5fX2Jhc2Vfc3RyaW5nO3JldHVybiB1PXV8fDAsbzwwJiYobz0wLGM9IiIpLHUrPW8qdGhpcy5fX2luZGVudF9zaXplLHRoaXMuX19lbnN1cmVfY2FjaGUodSksYys9dGhpcy5fX2NhY2hlW3VdLGN9LGEucHJvdG90eXBlLl9fZW5zdXJlX2NhY2hlPWZ1bmN0aW9uKG8pe2Zvcig7bz49dGhpcy5fX2NhY2hlLmxlbmd0aDspdGhpcy5fX2FkZF9jb2x1bW4oKX0sYS5wcm90b3R5cGUuX19hZGRfY29sdW1uPWZ1bmN0aW9uKCl7dmFyIG89dGhpcy5fX2NhY2hlLmxlbmd0aCx1PTAsYz0iIjt0aGlzLl9faW5kZW50X3NpemUmJm8+PXRoaXMuX19pbmRlbnRfc2l6ZSYmKHU9TWF0aC5mbG9vcihvL3RoaXMuX19pbmRlbnRfc2l6ZSksby09dSp0aGlzLl9faW5kZW50X3NpemUsYz1uZXcgQXJyYXkodSsxKS5qb2luKHRoaXMuX19pbmRlbnRfc3RyaW5nKSksbyYmKGMrPW5ldyBBcnJheShvKzEpLmpvaW4oIiAiKSksdGhpcy5fX2NhY2hlLnB1c2goYyl9O2Z1bmN0aW9uIGwobyx1KXt0aGlzLl9faW5kZW50X2NhY2hlPW5ldyBhKG8sdSksdGhpcy5yYXc9ITEsdGhpcy5fZW5kX3dpdGhfbmV3bGluZT1vLmVuZF93aXRoX25ld2xpbmUsdGhpcy5pbmRlbnRfc2l6ZT1vLmluZGVudF9zaXplLHRoaXMud3JhcF9saW5lX2xlbmd0aD1vLndyYXBfbGluZV9sZW5ndGgsdGhpcy5pbmRlbnRfZW1wdHlfbGluZXM9by5pbmRlbnRfZW1wdHlfbGluZXMsdGhpcy5fX2xpbmVzPVtdLHRoaXMucHJldmlvdXNfbGluZT1udWxsLHRoaXMuY3VycmVudF9saW5lPW51bGwsdGhpcy5uZXh0X2xpbmU9bmV3IHModGhpcyksdGhpcy5zcGFjZV9iZWZvcmVfdG9rZW49ITEsdGhpcy5ub25fYnJlYWtpbmdfc3BhY2U9ITEsdGhpcy5wcmV2aW91c190b2tlbl93cmFwcGVkPSExLHRoaXMuX19hZGRfb3V0cHV0bGluZSgpfWwucHJvdG90eXBlLl9fYWRkX291dHB1dGxpbmU9ZnVuY3Rpb24oKXt0aGlzLnByZXZpb3VzX2xpbmU9dGhpcy5jdXJyZW50X2xpbmUsdGhpcy5jdXJyZW50X2xpbmU9dGhpcy5uZXh0X2xpbmUuY2xvbmVfZW1wdHkoKSx0aGlzLl9fbGluZXMucHVzaCh0aGlzLmN1cnJlbnRfbGluZSl9LGwucHJvdG90eXBlLmdldF9saW5lX251bWJlcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9fbGluZXMubGVuZ3RofSxsLnByb3RvdHlwZS5nZXRfaW5kZW50X3N0cmluZz1mdW5jdGlvbihvLHUpe3JldHVybiB0aGlzLl9faW5kZW50X2NhY2hlLmdldF9pbmRlbnRfc3RyaW5nKG8sdSl9LGwucHJvdG90eXBlLmdldF9pbmRlbnRfc2l6ZT1mdW5jdGlvbihvLHUpe3JldHVybiB0aGlzLl9faW5kZW50X2NhY2hlLmdldF9pbmRlbnRfc2l6ZShvLHUpfSxsLnByb3RvdHlwZS5pc19lbXB0eT1mdW5jdGlvbigpe3JldHVybiF0aGlzLnByZXZpb3VzX2xpbmUmJnRoaXMuY3VycmVudF9saW5lLmlzX2VtcHR5KCl9LGwucHJvdG90eXBlLmFkZF9uZXdfbGluZT1mdW5jdGlvbihvKXtyZXR1cm4gdGhpcy5pc19lbXB0eSgpfHwhbyYmdGhpcy5qdXN0X2FkZGVkX25ld2xpbmUoKT8hMToodGhpcy5yYXd8fHRoaXMuX19hZGRfb3V0cHV0bGluZSgpLCEwKX0sbC5wcm90b3R5cGUuZ2V0X2NvZGU9ZnVuY3Rpb24obyl7dGhpcy50cmltKCEwKTt2YXIgdT10aGlzLmN1cnJlbnRfbGluZS5wb3AoKTt1JiYodVt1Lmxlbmd0aC0xXT09PWAKYCYmKHU9dS5yZXBsYWNlKC9cbiskL2csIiIpKSx0aGlzLmN1cnJlbnRfbGluZS5wdXNoKHUpKSx0aGlzLl9lbmRfd2l0aF9uZXdsaW5lJiZ0aGlzLl9fYWRkX291dHB1dGxpbmUoKTt2YXIgYz10aGlzLl9fbGluZXMuam9pbihgCmApO3JldHVybiBvIT09YApgJiYoYz1jLnJlcGxhY2UoL1tcbl0vZyxvKSksY30sbC5wcm90b3R5cGUuc2V0X3dyYXBfcG9pbnQ9ZnVuY3Rpb24oKXt0aGlzLmN1cnJlbnRfbGluZS5fc2V0X3dyYXBfcG9pbnQoKX0sbC5wcm90b3R5cGUuc2V0X2luZGVudD1mdW5jdGlvbihvLHUpe3JldHVybiBvPW98fDAsdT11fHwwLHRoaXMubmV4dF9saW5lLnNldF9pbmRlbnQobyx1KSx0aGlzLl9fbGluZXMubGVuZ3RoPjE/KHRoaXMuY3VycmVudF9saW5lLnNldF9pbmRlbnQobyx1KSwhMCk6KHRoaXMuY3VycmVudF9saW5lLnNldF9pbmRlbnQoKSwhMSl9LGwucHJvdG90eXBlLmFkZF9yYXdfdG9rZW49ZnVuY3Rpb24obyl7Zm9yKHZhciB1PTA7dTxvLm5ld2xpbmVzO3UrKyl0aGlzLl9fYWRkX291dHB1dGxpbmUoKTt0aGlzLmN1cnJlbnRfbGluZS5zZXRfaW5kZW50KC0xKSx0aGlzLmN1cnJlbnRfbGluZS5wdXNoKG8ud2hpdGVzcGFjZV9iZWZvcmUpLHRoaXMuY3VycmVudF9saW5lLnB1c2goby50ZXh0KSx0aGlzLnNwYWNlX2JlZm9yZV90b2tlbj0hMSx0aGlzLm5vbl9icmVha2luZ19zcGFjZT0hMSx0aGlzLnByZXZpb3VzX3Rva2VuX3dyYXBwZWQ9ITF9LGwucHJvdG90eXBlLmFkZF90b2tlbj1mdW5jdGlvbihvKXt0aGlzLl9fYWRkX3NwYWNlX2JlZm9yZV90b2tlbigpLHRoaXMuY3VycmVudF9saW5lLnB1c2gobyksdGhpcy5zcGFjZV9iZWZvcmVfdG9rZW49ITEsdGhpcy5ub25fYnJlYWtpbmdfc3BhY2U9ITEsdGhpcy5wcmV2aW91c190b2tlbl93cmFwcGVkPXRoaXMuY3VycmVudF9saW5lLl9hbGxvd193cmFwKCl9LGwucHJvdG90eXBlLl9fYWRkX3NwYWNlX2JlZm9yZV90b2tlbj1mdW5jdGlvbigpe3RoaXMuc3BhY2VfYmVmb3JlX3Rva2VuJiYhdGhpcy5qdXN0X2FkZGVkX25ld2xpbmUoKSYmKHRoaXMubm9uX2JyZWFraW5nX3NwYWNlfHx0aGlzLnNldF93cmFwX3BvaW50KCksdGhpcy5jdXJyZW50X2xpbmUucHVzaCgiICIpKX0sbC5wcm90b3R5cGUucmVtb3ZlX2luZGVudD1mdW5jdGlvbihvKXtmb3IodmFyIHU9dGhpcy5fX2xpbmVzLmxlbmd0aDtvPHU7KXRoaXMuX19saW5lc1tvXS5fcmVtb3ZlX2luZGVudCgpLG8rKzt0aGlzLmN1cnJlbnRfbGluZS5fcmVtb3ZlX3dyYXBfaW5kZW50KCl9LGwucHJvdG90eXBlLnRyaW09ZnVuY3Rpb24obyl7Zm9yKG89bz09PXZvaWQgMD8hMTpvLHRoaXMuY3VycmVudF9saW5lLnRyaW0oKTtvJiZ0aGlzLl9fbGluZXMubGVuZ3RoPjEmJnRoaXMuY3VycmVudF9saW5lLmlzX2VtcHR5KCk7KXRoaXMuX19saW5lcy5wb3AoKSx0aGlzLmN1cnJlbnRfbGluZT10aGlzLl9fbGluZXNbdGhpcy5fX2xpbmVzLmxlbmd0aC0xXSx0aGlzLmN1cnJlbnRfbGluZS50cmltKCk7dGhpcy5wcmV2aW91c19saW5lPXRoaXMuX19saW5lcy5sZW5ndGg+MT90aGlzLl9fbGluZXNbdGhpcy5fX2xpbmVzLmxlbmd0aC0yXTpudWxsfSxsLnByb3RvdHlwZS5qdXN0X2FkZGVkX25ld2xpbmU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jdXJyZW50X2xpbmUuaXNfZW1wdHkoKX0sbC5wcm90b3R5cGUuanVzdF9hZGRlZF9ibGFua2xpbmU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pc19lbXB0eSgpfHx0aGlzLmN1cnJlbnRfbGluZS5pc19lbXB0eSgpJiZ0aGlzLnByZXZpb3VzX2xpbmUuaXNfZW1wdHkoKX0sbC5wcm90b3R5cGUuZW5zdXJlX2VtcHR5X2xpbmVfYWJvdmU9ZnVuY3Rpb24obyx1KXtmb3IodmFyIGM9dGhpcy5fX2xpbmVzLmxlbmd0aC0yO2M+PTA7KXt2YXIgZD10aGlzLl9fbGluZXNbY107aWYoZC5pc19lbXB0eSgpKWJyZWFrO2lmKGQuaXRlbSgwKS5pbmRleE9mKG8pIT09MCYmZC5pdGVtKC0xKSE9PXUpe3RoaXMuX19saW5lcy5zcGxpY2UoYysxLDAsbmV3IHModGhpcykpLHRoaXMucHJldmlvdXNfbGluZT10aGlzLl9fbGluZXNbdGhpcy5fX2xpbmVzLmxlbmd0aC0yXTticmVha31jLS19fSxyLmV4cG9ydHMuT3V0cHV0PWx9LCwsLGZ1bmN0aW9uKHIpe2Z1bmN0aW9uIHMobyx1KXt0aGlzLnJhd19vcHRpb25zPWEobyx1KSx0aGlzLmRpc2FibGVkPXRoaXMuX2dldF9ib29sZWFuKCJkaXNhYmxlZCIpLHRoaXMuZW9sPXRoaXMuX2dldF9jaGFyYWN0ZXJzKCJlb2wiLCJhdXRvIiksdGhpcy5lbmRfd2l0aF9uZXdsaW5lPXRoaXMuX2dldF9ib29sZWFuKCJlbmRfd2l0aF9uZXdsaW5lIiksdGhpcy5pbmRlbnRfc2l6ZT10aGlzLl9nZXRfbnVtYmVyKCJpbmRlbnRfc2l6ZSIsNCksdGhpcy5pbmRlbnRfY2hhcj10aGlzLl9nZXRfY2hhcmFjdGVycygiaW5kZW50X2NoYXIiLCIgIiksdGhpcy5pbmRlbnRfbGV2ZWw9dGhpcy5fZ2V0X251bWJlcigiaW5kZW50X2xldmVsIiksdGhpcy5wcmVzZXJ2ZV9uZXdsaW5lcz10aGlzLl9nZXRfYm9vbGVhbigicHJlc2VydmVfbmV3bGluZXMiLCEwKSx0aGlzLm1heF9wcmVzZXJ2ZV9uZXdsaW5lcz10aGlzLl9nZXRfbnVtYmVyKCJtYXhfcHJlc2VydmVfbmV3bGluZXMiLDMyNzg2KSx0aGlzLnByZXNlcnZlX25ld2xpbmVzfHwodGhpcy5tYXhfcHJlc2VydmVfbmV3bGluZXM9MCksdGhpcy5pbmRlbnRfd2l0aF90YWJzPXRoaXMuX2dldF9ib29sZWFuKCJpbmRlbnRfd2l0aF90YWJzIix0aGlzLmluZGVudF9jaGFyPT09IgkiKSx0aGlzLmluZGVudF93aXRoX3RhYnMmJih0aGlzLmluZGVudF9jaGFyPSIJIix0aGlzLmluZGVudF9zaXplPT09MSYmKHRoaXMuaW5kZW50X3NpemU9NCkpLHRoaXMud3JhcF9saW5lX2xlbmd0aD10aGlzLl9nZXRfbnVtYmVyKCJ3cmFwX2xpbmVfbGVuZ3RoIix0aGlzLl9nZXRfbnVtYmVyKCJtYXhfY2hhciIpKSx0aGlzLmluZGVudF9lbXB0eV9saW5lcz10aGlzLl9nZXRfYm9vbGVhbigiaW5kZW50X2VtcHR5X2xpbmVzIiksdGhpcy50ZW1wbGF0aW5nPXRoaXMuX2dldF9zZWxlY3Rpb25fbGlzdCgidGVtcGxhdGluZyIsWyJhdXRvIiwibm9uZSIsImFuZ3VsYXIiLCJkamFuZ28iLCJlcmIiLCJoYW5kbGViYXJzIiwicGhwIiwic21hcnR5Il0sWyJhdXRvIl0pfXMucHJvdG90eXBlLl9nZXRfYXJyYXk9ZnVuY3Rpb24obyx1KXt2YXIgYz10aGlzLnJhd19vcHRpb25zW29dLGQ9dXx8W107cmV0dXJuIHR5cGVvZiBjPT0ib2JqZWN0Ij9jIT09bnVsbCYmdHlwZW9mIGMuY29uY2F0PT0iZnVuY3Rpb24iJiYoZD1jLmNvbmNhdCgpKTp0eXBlb2YgYz09InN0cmluZyImJihkPWMuc3BsaXQoL1teYS16QS1aMC05X1wvXC1dKy8pKSxkfSxzLnByb3RvdHlwZS5fZ2V0X2Jvb2xlYW49ZnVuY3Rpb24obyx1KXt2YXIgYz10aGlzLnJhd19vcHRpb25zW29dLGQ9Yz09PXZvaWQgMD8hIXU6ISFjO3JldHVybiBkfSxzLnByb3RvdHlwZS5fZ2V0X2NoYXJhY3RlcnM9ZnVuY3Rpb24obyx1KXt2YXIgYz10aGlzLnJhd19vcHRpb25zW29dLGQ9dXx8IiI7cmV0dXJuIHR5cGVvZiBjPT0ic3RyaW5nIiYmKGQ9Yy5yZXBsYWNlKC9cXHIvLCJcciIpLnJlcGxhY2UoL1xcbi8sYApgKS5yZXBsYWNlKC9cXHQvLCIJIikpLGR9LHMucHJvdG90eXBlLl9nZXRfbnVtYmVyPWZ1bmN0aW9uKG8sdSl7dmFyIGM9dGhpcy5yYXdfb3B0aW9uc1tvXTt1PXBhcnNlSW50KHUsMTApLGlzTmFOKHUpJiYodT0wKTt2YXIgZD1wYXJzZUludChjLDEwKTtyZXR1cm4gaXNOYU4oZCkmJihkPXUpLGR9LHMucHJvdG90eXBlLl9nZXRfc2VsZWN0aW9uPWZ1bmN0aW9uKG8sdSxjKXt2YXIgZD10aGlzLl9nZXRfc2VsZWN0aW9uX2xpc3Qobyx1LGMpO2lmKGQubGVuZ3RoIT09MSl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgT3B0aW9uIFZhbHVlOiBUaGUgb3B0aW9uICciK28rYCcgY2FuIG9ubHkgYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOgpgK3UrYApZb3UgcGFzc2VkIGluOiAnYCt0aGlzLnJhd19vcHRpb25zW29dKyInIik7cmV0dXJuIGRbMF19LHMucHJvdG90eXBlLl9nZXRfc2VsZWN0aW9uX2xpc3Q9ZnVuY3Rpb24obyx1LGMpe2lmKCF1fHx1Lmxlbmd0aD09PTApdGhyb3cgbmV3IEVycm9yKCJTZWxlY3Rpb24gbGlzdCBjYW5ub3QgYmUgZW1wdHkuIik7aWYoYz1jfHxbdVswXV0sIXRoaXMuX2lzX3ZhbGlkX3NlbGVjdGlvbihjLHUpKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBEZWZhdWx0IFZhbHVlISIpO3ZhciBkPXRoaXMuX2dldF9hcnJheShvLGMpO2lmKCF0aGlzLl9pc192YWxpZF9zZWxlY3Rpb24oZCx1KSl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgT3B0aW9uIFZhbHVlOiBUaGUgb3B0aW9uICciK28rYCcgY2FuIGNvbnRhaW4gb25seSB0aGUgZm9sbG93aW5nIHZhbHVlczoKYCt1K2AKWW91IHBhc3NlZCBpbjogJ2ArdGhpcy5yYXdfb3B0aW9uc1tvXSsiJyIpO3JldHVybiBkfSxzLnByb3RvdHlwZS5faXNfdmFsaWRfc2VsZWN0aW9uPWZ1bmN0aW9uKG8sdSl7cmV0dXJuIG8ubGVuZ3RoJiZ1Lmxlbmd0aCYmIW8uc29tZShmdW5jdGlvbihjKXtyZXR1cm4gdS5pbmRleE9mKGMpPT09LTF9KX07ZnVuY3Rpb24gYShvLHUpe3ZhciBjPXt9O289bChvKTt2YXIgZDtmb3IoZCBpbiBvKWQhPT11JiYoY1tkXT1vW2RdKTtpZih1JiZvW3VdKWZvcihkIGluIG9bdV0pY1tkXT1vW3VdW2RdO3JldHVybiBjfWZ1bmN0aW9uIGwobyl7dmFyIHU9e30sYztmb3IoYyBpbiBvKXt2YXIgZD1jLnJlcGxhY2UoLy0vZywiXyIpO3VbZF09b1tjXX1yZXR1cm4gdX1yLmV4cG9ydHMuT3B0aW9ucz1zLHIuZXhwb3J0cy5ub3JtYWxpemVPcHRzPWwsci5leHBvcnRzLm1lcmdlT3B0cz1hfSwsZnVuY3Rpb24ocil7dmFyIHM9UmVnRXhwLnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSgic3RpY2t5Iik7ZnVuY3Rpb24gYShsKXt0aGlzLl9faW5wdXQ9bHx8IiIsdGhpcy5fX2lucHV0X2xlbmd0aD10aGlzLl9faW5wdXQubGVuZ3RoLHRoaXMuX19wb3NpdGlvbj0wfWEucHJvdG90eXBlLnJlc3RhcnQ9ZnVuY3Rpb24oKXt0aGlzLl9fcG9zaXRpb249MH0sYS5wcm90b3R5cGUuYmFjaz1mdW5jdGlvbigpe3RoaXMuX19wb3NpdGlvbj4wJiYodGhpcy5fX3Bvc2l0aW9uLT0xKX0sYS5wcm90b3R5cGUuaGFzTmV4dD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9fcG9zaXRpb248dGhpcy5fX2lucHV0X2xlbmd0aH0sYS5wcm90b3R5cGUubmV4dD1mdW5jdGlvbigpe3ZhciBsPW51bGw7cmV0dXJuIHRoaXMuaGFzTmV4dCgpJiYobD10aGlzLl9faW5wdXQuY2hhckF0KHRoaXMuX19wb3NpdGlvbiksdGhpcy5fX3Bvc2l0aW9uKz0xKSxsfSxhLnByb3RvdHlwZS5wZWVrPWZ1bmN0aW9uKGwpe3ZhciBvPW51bGw7cmV0dXJuIGw9bHx8MCxsKz10aGlzLl9fcG9zaXRpb24sbD49MCYmbDx0aGlzLl9faW5wdXRfbGVuZ3RoJiYobz10aGlzLl9faW5wdXQuY2hhckF0KGwpKSxvfSxhLnByb3RvdHlwZS5fX21hdGNoPWZ1bmN0aW9uKGwsbyl7bC5sYXN0SW5kZXg9bzt2YXIgdT1sLmV4ZWModGhpcy5fX2lucHV0KTtyZXR1cm4gdSYmIShzJiZsLnN0aWNreSkmJnUuaW5kZXghPT1vJiYodT1udWxsKSx1fSxhLnByb3RvdHlwZS50ZXN0PWZ1bmN0aW9uKGwsbyl7cmV0dXJuIG89b3x8MCxvKz10aGlzLl9fcG9zaXRpb24sbz49MCYmbzx0aGlzLl9faW5wdXRfbGVuZ3RoPyEhdGhpcy5fX21hdGNoKGwsbyk6ITF9LGEucHJvdG90eXBlLnRlc3RDaGFyPWZ1bmN0aW9uKGwsbyl7dmFyIHU9dGhpcy5wZWVrKG8pO3JldHVybiBsLmxhc3RJbmRleD0wLHUhPT1udWxsJiZsLnRlc3QodSl9LGEucHJvdG90eXBlLm1hdGNoPWZ1bmN0aW9uKGwpe3ZhciBvPXRoaXMuX19tYXRjaChsLHRoaXMuX19wb3NpdGlvbik7cmV0dXJuIG8/dGhpcy5fX3Bvc2l0aW9uKz1vWzBdLmxlbmd0aDpvPW51bGwsb30sYS5wcm90b3R5cGUucmVhZD1mdW5jdGlvbihsLG8sdSl7dmFyIGM9IiIsZDtyZXR1cm4gbCYmKGQ9dGhpcy5tYXRjaChsKSxkJiYoYys9ZFswXSkpLG8mJihkfHwhbCkmJihjKz10aGlzLnJlYWRVbnRpbChvLHUpKSxjfSxhLnByb3RvdHlwZS5yZWFkVW50aWw9ZnVuY3Rpb24obCxvKXt2YXIgdT0iIixjPXRoaXMuX19wb3NpdGlvbjtsLmxhc3RJbmRleD10aGlzLl9fcG9zaXRpb247dmFyIGQ9bC5leGVjKHRoaXMuX19pbnB1dCk7cmV0dXJuIGQ/KGM9ZC5pbmRleCxvJiYoYys9ZFswXS5sZW5ndGgpKTpjPXRoaXMuX19pbnB1dF9sZW5ndGgsdT10aGlzLl9faW5wdXQuc3Vic3RyaW5nKHRoaXMuX19wb3NpdGlvbixjKSx0aGlzLl9fcG9zaXRpb249Yyx1fSxhLnByb3RvdHlwZS5yZWFkVW50aWxBZnRlcj1mdW5jdGlvbihsKXtyZXR1cm4gdGhpcy5yZWFkVW50aWwobCwhMCl9LGEucHJvdG90eXBlLmdldF9yZWdleHA9ZnVuY3Rpb24obCxvKXt2YXIgdT1udWxsLGM9ImciO3JldHVybiBvJiZzJiYoYz0ieSIpLHR5cGVvZiBsPT0ic3RyaW5nIiYmbCE9PSIiP3U9bmV3IFJlZ0V4cChsLGMpOmwmJih1PW5ldyBSZWdFeHAobC5zb3VyY2UsYykpLHV9LGEucHJvdG90eXBlLmdldF9saXRlcmFsX3JlZ2V4cD1mdW5jdGlvbihsKXtyZXR1cm4gUmVnRXhwKGwucmVwbGFjZSgvWy1cL1xcXiQqKz8uKCl8W1xde31dL2csIlxcJCYiKSl9LGEucHJvdG90eXBlLnBlZWtVbnRpbEFmdGVyPWZ1bmN0aW9uKGwpe3ZhciBvPXRoaXMuX19wb3NpdGlvbix1PXRoaXMucmVhZFVudGlsQWZ0ZXIobCk7cmV0dXJuIHRoaXMuX19wb3NpdGlvbj1vLHV9LGEucHJvdG90eXBlLmxvb2tCYWNrPWZ1bmN0aW9uKGwpe3ZhciBvPXRoaXMuX19wb3NpdGlvbi0xO3JldHVybiBvPj1sLmxlbmd0aCYmdGhpcy5fX2lucHV0LnN1YnN0cmluZyhvLWwubGVuZ3RoLG8pLnRvTG93ZXJDYXNlKCk9PT1sfSxyLmV4cG9ydHMuSW5wdXRTY2FubmVyPWF9LCwsLCxmdW5jdGlvbihyKXtmdW5jdGlvbiBzKGEsbCl7YT10eXBlb2YgYT09InN0cmluZyI/YTphLnNvdXJjZSxsPXR5cGVvZiBsPT0ic3RyaW5nIj9sOmwuc291cmNlLHRoaXMuX19kaXJlY3RpdmVzX2Jsb2NrX3BhdHRlcm49bmV3IFJlZ0V4cChhKy8gYmVhdXRpZnkoIFx3K1s6XVx3KykrIC8uc291cmNlK2wsImciKSx0aGlzLl9fZGlyZWN0aXZlX3BhdHRlcm49LyAoXHcrKVs6XShcdyspL2csdGhpcy5fX2RpcmVjdGl2ZXNfZW5kX2lnbm9yZV9wYXR0ZXJuPW5ldyBSZWdFeHAoYSsvXHNiZWF1dGlmeVxzaWdub3JlOmVuZFxzLy5zb3VyY2UrbCwiZyIpfXMucHJvdG90eXBlLmdldF9kaXJlY3RpdmVzPWZ1bmN0aW9uKGEpe2lmKCFhLm1hdGNoKHRoaXMuX19kaXJlY3RpdmVzX2Jsb2NrX3BhdHRlcm4pKXJldHVybiBudWxsO3ZhciBsPXt9O3RoaXMuX19kaXJlY3RpdmVfcGF0dGVybi5sYXN0SW5kZXg9MDtmb3IodmFyIG89dGhpcy5fX2RpcmVjdGl2ZV9wYXR0ZXJuLmV4ZWMoYSk7bzspbFtvWzFdXT1vWzJdLG89dGhpcy5fX2RpcmVjdGl2ZV9wYXR0ZXJuLmV4ZWMoYSk7cmV0dXJuIGx9LHMucHJvdG90eXBlLnJlYWRJZ25vcmVkPWZ1bmN0aW9uKGEpe3JldHVybiBhLnJlYWRVbnRpbEFmdGVyKHRoaXMuX19kaXJlY3RpdmVzX2VuZF9pZ25vcmVfcGF0dGVybil9LHIuZXhwb3J0cy5EaXJlY3RpdmVzPXN9LCxmdW5jdGlvbihyLHMsYSl7dmFyIGw9YSgxNikuQmVhdXRpZmllcixvPWEoMTcpLk9wdGlvbnM7ZnVuY3Rpb24gdShjLGQpe3ZhciBtPW5ldyBsKGMsZCk7cmV0dXJuIG0uYmVhdXRpZnkoKX1yLmV4cG9ydHM9dSxyLmV4cG9ydHMuZGVmYXVsdE9wdGlvbnM9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IG99fSxmdW5jdGlvbihyLHMsYSl7dmFyIGw9YSgxNykuT3B0aW9ucyxvPWEoMikuT3V0cHV0LHU9YSg4KS5JbnB1dFNjYW5uZXIsYz1hKDEzKS5EaXJlY3RpdmVzLGQ9bmV3IGMoL1wvXCovLC9cKlwvLyksbT0vXHJcbnxbXHJcbl0vLGY9L1xyXG58W1xyXG5dL2csXz0vXHMvLGc9Lyg/OlxzfFxuKSsvZyxrPS9cL1wqKD86W1xzXFNdKj8pKCg/OlwqXC8pfCQpL2cseT0vXC9cLyg/OlteXG5cclx1MjAyOFx1MjAyOV0qKS9nO2Z1bmN0aW9uIHYoRSxNKXt0aGlzLl9zb3VyY2VfdGV4dD1FfHwiIix0aGlzLl9vcHRpb25zPW5ldyBsKE0pLHRoaXMuX2NoPW51bGwsdGhpcy5faW5wdXQ9bnVsbCx0aGlzLk5FU1RFRF9BVF9SVUxFPXtwYWdlOiEwLCJmb250LWZhY2UiOiEwLGtleWZyYW1lczohMCxtZWRpYTohMCxzdXBwb3J0czohMCxkb2N1bWVudDohMH0sdGhpcy5DT05ESVRJT05BTF9HUk9VUF9SVUxFPXttZWRpYTohMCxzdXBwb3J0czohMCxkb2N1bWVudDohMH0sdGhpcy5OT05fU0VNSUNPTE9OX05FV0xJTkVfUFJPUEVSVFk9WyJncmlkLXRlbXBsYXRlLWFyZWFzIiwiZ3JpZC10ZW1wbGF0ZSJdfXYucHJvdG90eXBlLmVhdFN0cmluZz1mdW5jdGlvbihFKXt2YXIgTT0iIjtmb3IodGhpcy5fY2g9dGhpcy5faW5wdXQubmV4dCgpO3RoaXMuX2NoOyl7aWYoTSs9dGhpcy5fY2gsdGhpcy5fY2g9PT0iXFwiKU0rPXRoaXMuX2lucHV0Lm5leHQoKTtlbHNlIGlmKEUuaW5kZXhPZih0aGlzLl9jaCkhPT0tMXx8dGhpcy5fY2g9PT1gCmApYnJlYWs7dGhpcy5fY2g9dGhpcy5faW5wdXQubmV4dCgpfXJldHVybiBNfSx2LnByb3RvdHlwZS5lYXRXaGl0ZXNwYWNlPWZ1bmN0aW9uKEUpe2Zvcih2YXIgTT1fLnRlc3QodGhpcy5faW5wdXQucGVlaygpKSxEPTA7Xy50ZXN0KHRoaXMuX2lucHV0LnBlZWsoKSk7KXRoaXMuX2NoPXRoaXMuX2lucHV0Lm5leHQoKSxFJiZ0aGlzLl9jaD09PWAKYCYmKEQ9PT0wfHxEPHRoaXMuX29wdGlvbnMubWF4X3ByZXNlcnZlX25ld2xpbmVzKSYmKEQrKyx0aGlzLl9vdXRwdXQuYWRkX25ld19saW5lKCEwKSk7cmV0dXJuIE19LHYucHJvdG90eXBlLmZvdW5kTmVzdGVkUHNldWRvQ2xhc3M9ZnVuY3Rpb24oKXtmb3IodmFyIEU9MCxNPTEsRD10aGlzLl9pbnB1dC5wZWVrKE0pO0Q7KXtpZihEPT09InsiKXJldHVybiEwO2lmKEQ9PT0iKCIpRSs9MTtlbHNlIGlmKEQ9PT0iKSIpe2lmKEU9PT0wKXJldHVybiExO0UtPTF9ZWxzZSBpZihEPT09IjsifHxEPT09In0iKXJldHVybiExO00rKyxEPXRoaXMuX2lucHV0LnBlZWsoTSl9cmV0dXJuITF9LHYucHJvdG90eXBlLnByaW50X3N0cmluZz1mdW5jdGlvbihFKXt0aGlzLl9vdXRwdXQuc2V0X2luZGVudCh0aGlzLl9pbmRlbnRMZXZlbCksdGhpcy5fb3V0cHV0Lm5vbl9icmVha2luZ19zcGFjZT0hMCx0aGlzLl9vdXRwdXQuYWRkX3Rva2VuKEUpfSx2LnByb3RvdHlwZS5wcmVzZXJ2ZVNpbmdsZVNwYWNlPWZ1bmN0aW9uKEUpe0UmJih0aGlzLl9vdXRwdXQuc3BhY2VfYmVmb3JlX3Rva2VuPSEwKX0sdi5wcm90b3R5cGUuaW5kZW50PWZ1bmN0aW9uKCl7dGhpcy5faW5kZW50TGV2ZWwrK30sdi5wcm90b3R5cGUub3V0ZGVudD1mdW5jdGlvbigpe3RoaXMuX2luZGVudExldmVsPjAmJnRoaXMuX2luZGVudExldmVsLS19LHYucHJvdG90eXBlLmJlYXV0aWZ5PWZ1bmN0aW9uKCl7aWYodGhpcy5fb3B0aW9ucy5kaXNhYmxlZClyZXR1cm4gdGhpcy5fc291cmNlX3RleHQ7dmFyIEU9dGhpcy5fc291cmNlX3RleHQsTT10aGlzLl9vcHRpb25zLmVvbDtNPT09ImF1dG8iJiYoTT1gCmAsRSYmbS50ZXN0KEV8fCIiKSYmKE09RS5tYXRjaChtKVswXSkpLEU9RS5yZXBsYWNlKGYsYApgKTt2YXIgRD1FLm1hdGNoKC9eW1x0IF0qLylbMF07dGhpcy5fb3V0cHV0PW5ldyBvKHRoaXMuX29wdGlvbnMsRCksdGhpcy5faW5wdXQ9bmV3IHUoRSksdGhpcy5faW5kZW50TGV2ZWw9MCx0aGlzLl9uZXN0ZWRMZXZlbD0wLHRoaXMuX2NoPW51bGw7Zm9yKHZhciBOPTAsYj0hMSxwPSExLHg9ITEsVT0hMSxMPSExLFQ9dGhpcy5fY2gsUz0hMSx3LEEsUjt3PXRoaXMuX2lucHV0LnJlYWQoZyksQT13IT09IiIsUj1ULHRoaXMuX2NoPXRoaXMuX2lucHV0Lm5leHQoKSx0aGlzLl9jaD09PSJcXCImJnRoaXMuX2lucHV0Lmhhc05leHQoKSYmKHRoaXMuX2NoKz10aGlzLl9pbnB1dC5uZXh0KCkpLFQ9dGhpcy5fY2gsdGhpcy5fY2g7KWlmKHRoaXMuX2NoPT09Ii8iJiZ0aGlzLl9pbnB1dC5wZWVrKCk9PT0iKiIpe3RoaXMuX291dHB1dC5hZGRfbmV3X2xpbmUoKSx0aGlzLl9pbnB1dC5iYWNrKCk7dmFyIEk9dGhpcy5faW5wdXQucmVhZChrKSxGPWQuZ2V0X2RpcmVjdGl2ZXMoSSk7RiYmRi5pZ25vcmU9PT0ic3RhcnQiJiYoSSs9ZC5yZWFkSWdub3JlZCh0aGlzLl9pbnB1dCkpLHRoaXMucHJpbnRfc3RyaW5nKEkpLHRoaXMuZWF0V2hpdGVzcGFjZSghMCksdGhpcy5fb3V0cHV0LmFkZF9uZXdfbGluZSgpfWVsc2UgaWYodGhpcy5fY2g9PT0iLyImJnRoaXMuX2lucHV0LnBlZWsoKT09PSIvIil0aGlzLl9vdXRwdXQuc3BhY2VfYmVmb3JlX3Rva2VuPSEwLHRoaXMuX2lucHV0LmJhY2soKSx0aGlzLnByaW50X3N0cmluZyh0aGlzLl9pbnB1dC5yZWFkKHkpKSx0aGlzLmVhdFdoaXRlc3BhY2UoITApO2Vsc2UgaWYodGhpcy5fY2g9PT0iJCIpe3RoaXMucHJlc2VydmVTaW5nbGVTcGFjZShBKSx0aGlzLnByaW50X3N0cmluZyh0aGlzLl9jaCk7dmFyIEg9dGhpcy5faW5wdXQucGVla1VudGlsQWZ0ZXIoL1s6ICw7e30oKVtcXVwvPSciXS9nKTtILm1hdGNoKC9bIDpdJC8pJiYoSD10aGlzLmVhdFN0cmluZygiOiAiKS5yZXBsYWNlKC9ccyskLywiIiksdGhpcy5wcmludF9zdHJpbmcoSCksdGhpcy5fb3V0cHV0LnNwYWNlX2JlZm9yZV90b2tlbj0hMCksTj09PTAmJkguaW5kZXhPZigiOiIpIT09LTEmJihwPSEwLHRoaXMuaW5kZW50KCkpfWVsc2UgaWYodGhpcy5fY2g9PT0iQCIpaWYodGhpcy5wcmVzZXJ2ZVNpbmdsZVNwYWNlKEEpLHRoaXMuX2lucHV0LnBlZWsoKT09PSJ7Iil0aGlzLnByaW50X3N0cmluZyh0aGlzLl9jaCt0aGlzLmVhdFN0cmluZygifSIpKTtlbHNle3RoaXMucHJpbnRfc3RyaW5nKHRoaXMuX2NoKTt2YXIgVz10aGlzLl9pbnB1dC5wZWVrVW50aWxBZnRlcigvWzogLDt7fSgpW1xdXC89JyJdL2cpO1cubWF0Y2goL1sgOl0kLykmJihXPXRoaXMuZWF0U3RyaW5nKCI6ICIpLnJlcGxhY2UoL1xzKyQvLCIiKSx0aGlzLnByaW50X3N0cmluZyhXKSx0aGlzLl9vdXRwdXQuc3BhY2VfYmVmb3JlX3Rva2VuPSEwKSxOPT09MCYmVy5pbmRleE9mKCI6IikhPT0tMT8ocD0hMCx0aGlzLmluZGVudCgpKTpXIGluIHRoaXMuTkVTVEVEX0FUX1JVTEU/KHRoaXMuX25lc3RlZExldmVsKz0xLFcgaW4gdGhpcy5DT05ESVRJT05BTF9HUk9VUF9SVUxFJiYoeD0hMCkpOk49PT0wJiYhcCYmKFU9ITApfWVsc2UgaWYodGhpcy5fY2g9PT0iIyImJnRoaXMuX2lucHV0LnBlZWsoKT09PSJ7Iil0aGlzLnByZXNlcnZlU2luZ2xlU3BhY2UoQSksdGhpcy5wcmludF9zdHJpbmcodGhpcy5fY2grdGhpcy5lYXRTdHJpbmcoIn0iKSk7ZWxzZSBpZih0aGlzLl9jaD09PSJ7IilwJiYocD0hMSx0aGlzLm91dGRlbnQoKSksVT0hMSx4Pyh4PSExLGI9dGhpcy5faW5kZW50TGV2ZWw+PXRoaXMuX25lc3RlZExldmVsKTpiPXRoaXMuX2luZGVudExldmVsPj10aGlzLl9uZXN0ZWRMZXZlbC0xLHRoaXMuX29wdGlvbnMubmV3bGluZV9iZXR3ZWVuX3J1bGVzJiZiJiZ0aGlzLl9vdXRwdXQucHJldmlvdXNfbGluZSYmdGhpcy5fb3V0cHV0LnByZXZpb3VzX2xpbmUuaXRlbSgtMSkhPT0ieyImJnRoaXMuX291dHB1dC5lbnN1cmVfZW1wdHlfbGluZV9hYm92ZSgiLyIsIiwiKSx0aGlzLl9vdXRwdXQuc3BhY2VfYmVmb3JlX3Rva2VuPSEwLHRoaXMuX29wdGlvbnMuYnJhY2Vfc3R5bGU9PT0iZXhwYW5kIj8odGhpcy5fb3V0cHV0LmFkZF9uZXdfbGluZSgpLHRoaXMucHJpbnRfc3RyaW5nKHRoaXMuX2NoKSx0aGlzLmluZGVudCgpLHRoaXMuX291dHB1dC5zZXRfaW5kZW50KHRoaXMuX2luZGVudExldmVsKSk6KFI9PT0iKCI/dGhpcy5fb3V0cHV0LnNwYWNlX2JlZm9yZV90b2tlbj0hMTpSIT09IiwiJiZ0aGlzLmluZGVudCgpLHRoaXMucHJpbnRfc3RyaW5nKHRoaXMuX2NoKSksdGhpcy5lYXRXaGl0ZXNwYWNlKCEwKSx0aGlzLl9vdXRwdXQuYWRkX25ld19saW5lKCk7ZWxzZSBpZih0aGlzLl9jaD09PSJ9Iil0aGlzLm91dGRlbnQoKSx0aGlzLl9vdXRwdXQuYWRkX25ld19saW5lKCksUj09PSJ7IiYmdGhpcy5fb3V0cHV0LnRyaW0oITApLHAmJih0aGlzLm91dGRlbnQoKSxwPSExKSx0aGlzLnByaW50X3N0cmluZyh0aGlzLl9jaCksYj0hMSx0aGlzLl9uZXN0ZWRMZXZlbCYmdGhpcy5fbmVzdGVkTGV2ZWwtLSx0aGlzLmVhdFdoaXRlc3BhY2UoITApLHRoaXMuX291dHB1dC5hZGRfbmV3X2xpbmUoKSx0aGlzLl9vcHRpb25zLm5ld2xpbmVfYmV0d2Vlbl9ydWxlcyYmIXRoaXMuX291dHB1dC5qdXN0X2FkZGVkX2JsYW5rbGluZSgpJiZ0aGlzLl9pbnB1dC5wZWVrKCkhPT0ifSImJnRoaXMuX291dHB1dC5hZGRfbmV3X2xpbmUoITApLHRoaXMuX2lucHV0LnBlZWsoKT09PSIpIiYmKHRoaXMuX291dHB1dC50cmltKCEwKSx0aGlzLl9vcHRpb25zLmJyYWNlX3N0eWxlPT09ImV4cGFuZCImJnRoaXMuX291dHB1dC5hZGRfbmV3X2xpbmUoITApKTtlbHNlIGlmKHRoaXMuX2NoPT09IjoiKXtmb3IodmFyIHE9MDtxPHRoaXMuTk9OX1NFTUlDT0xPTl9ORVdMSU5FX1BST1BFUlRZLmxlbmd0aDtxKyspaWYodGhpcy5faW5wdXQubG9va0JhY2sodGhpcy5OT05fU0VNSUNPTE9OX05FV0xJTkVfUFJPUEVSVFlbcV0pKXtTPSEwO2JyZWFrfShifHx4KSYmISh0aGlzLl9pbnB1dC5sb29rQmFjaygiJiIpfHx0aGlzLmZvdW5kTmVzdGVkUHNldWRvQ2xhc3MoKSkmJiF0aGlzLl9pbnB1dC5sb29rQmFjaygiKCIpJiYhVSYmTj09PTA/KHRoaXMucHJpbnRfc3RyaW5nKCI6IikscHx8KHA9ITAsdGhpcy5fb3V0cHV0LnNwYWNlX2JlZm9yZV90b2tlbj0hMCx0aGlzLmVhdFdoaXRlc3BhY2UoITApLHRoaXMuaW5kZW50KCkpKToodGhpcy5faW5wdXQubG9va0JhY2soIiAiKSYmKHRoaXMuX291dHB1dC5zcGFjZV9iZWZvcmVfdG9rZW49ITApLHRoaXMuX2lucHV0LnBlZWsoKT09PSI6Ij8odGhpcy5fY2g9dGhpcy5faW5wdXQubmV4dCgpLHRoaXMucHJpbnRfc3RyaW5nKCI6OiIpKTp0aGlzLnByaW50X3N0cmluZygiOiIpKX1lbHNlIGlmKHRoaXMuX2NoPT09JyInfHx0aGlzLl9jaD09PSInIil7dmFyIEo9Uj09PSciJ3x8Uj09PSInIjt0aGlzLnByZXNlcnZlU2luZ2xlU3BhY2UoSnx8QSksdGhpcy5wcmludF9zdHJpbmcodGhpcy5fY2grdGhpcy5lYXRTdHJpbmcodGhpcy5fY2gpKSx0aGlzLmVhdFdoaXRlc3BhY2UoITApfWVsc2UgaWYodGhpcy5fY2g9PT0iOyIpUz0hMSxOPT09MD8ocCYmKHRoaXMub3V0ZGVudCgpLHA9ITEpLFU9ITEsdGhpcy5wcmludF9zdHJpbmcodGhpcy5fY2gpLHRoaXMuZWF0V2hpdGVzcGFjZSghMCksdGhpcy5faW5wdXQucGVlaygpIT09Ii8iJiZ0aGlzLl9vdXRwdXQuYWRkX25ld19saW5lKCkpOih0aGlzLnByaW50X3N0cmluZyh0aGlzLl9jaCksdGhpcy5lYXRXaGl0ZXNwYWNlKCEwKSx0aGlzLl9vdXRwdXQuc3BhY2VfYmVmb3JlX3Rva2VuPSEwKTtlbHNlIGlmKHRoaXMuX2NoPT09IigiKWlmKHRoaXMuX2lucHV0Lmxvb2tCYWNrKCJ1cmwiKSl0aGlzLnByaW50X3N0cmluZyh0aGlzLl9jaCksdGhpcy5lYXRXaGl0ZXNwYWNlKCksTisrLHRoaXMuaW5kZW50KCksdGhpcy5fY2g9dGhpcy5faW5wdXQubmV4dCgpLHRoaXMuX2NoPT09IikifHx0aGlzLl9jaD09PSciJ3x8dGhpcy5fY2g9PT0iJyI/dGhpcy5faW5wdXQuYmFjaygpOnRoaXMuX2NoJiYodGhpcy5wcmludF9zdHJpbmcodGhpcy5fY2grdGhpcy5lYXRTdHJpbmcoIikiKSksTiYmKE4tLSx0aGlzLm91dGRlbnQoKSkpO2Vsc2V7dmFyIG9lPSExO3RoaXMuX2lucHV0Lmxvb2tCYWNrKCJ3aXRoIikmJihvZT0hMCksdGhpcy5wcmVzZXJ2ZVNpbmdsZVNwYWNlKEF8fG9lKSx0aGlzLnByaW50X3N0cmluZyh0aGlzLl9jaCkscCYmUj09PSIkIiYmdGhpcy5fb3B0aW9ucy5zZWxlY3Rvcl9zZXBhcmF0b3JfbmV3bGluZT8odGhpcy5fb3V0cHV0LmFkZF9uZXdfbGluZSgpLEw9ITApOih0aGlzLmVhdFdoaXRlc3BhY2UoKSxOKyssdGhpcy5pbmRlbnQoKSl9ZWxzZSBpZih0aGlzLl9jaD09PSIpIilOJiYoTi0tLHRoaXMub3V0ZGVudCgpKSxMJiZ0aGlzLl9pbnB1dC5wZWVrKCk9PT0iOyImJnRoaXMuX29wdGlvbnMuc2VsZWN0b3Jfc2VwYXJhdG9yX25ld2xpbmUmJihMPSExLHRoaXMub3V0ZGVudCgpLHRoaXMuX291dHB1dC5hZGRfbmV3X2xpbmUoKSksdGhpcy5wcmludF9zdHJpbmcodGhpcy5fY2gpO2Vsc2UgaWYodGhpcy5fY2g9PT0iLCIpdGhpcy5wcmludF9zdHJpbmcodGhpcy5fY2gpLHRoaXMuZWF0V2hpdGVzcGFjZSghMCksdGhpcy5fb3B0aW9ucy5zZWxlY3Rvcl9zZXBhcmF0b3JfbmV3bGluZSYmKCFwfHxMKSYmTj09PTAmJiFVP3RoaXMuX291dHB1dC5hZGRfbmV3X2xpbmUoKTp0aGlzLl9vdXRwdXQuc3BhY2VfYmVmb3JlX3Rva2VuPSEwO2Vsc2UgaWYoKHRoaXMuX2NoPT09Ij4ifHx0aGlzLl9jaD09PSIrInx8dGhpcy5fY2g9PT0ifiIpJiYhcCYmTj09PTApdGhpcy5fb3B0aW9ucy5zcGFjZV9hcm91bmRfY29tYmluYXRvcj8odGhpcy5fb3V0cHV0LnNwYWNlX2JlZm9yZV90b2tlbj0hMCx0aGlzLnByaW50X3N0cmluZyh0aGlzLl9jaCksdGhpcy5fb3V0cHV0LnNwYWNlX2JlZm9yZV90b2tlbj0hMCk6KHRoaXMucHJpbnRfc3RyaW5nKHRoaXMuX2NoKSx0aGlzLmVhdFdoaXRlc3BhY2UoKSx0aGlzLl9jaCYmXy50ZXN0KHRoaXMuX2NoKSYmKHRoaXMuX2NoPSIiKSk7ZWxzZSBpZih0aGlzLl9jaD09PSJdIil0aGlzLnByaW50X3N0cmluZyh0aGlzLl9jaCk7ZWxzZSBpZih0aGlzLl9jaD09PSJbIil0aGlzLnByZXNlcnZlU2luZ2xlU3BhY2UoQSksdGhpcy5wcmludF9zdHJpbmcodGhpcy5fY2gpO2Vsc2UgaWYodGhpcy5fY2g9PT0iPSIpdGhpcy5lYXRXaGl0ZXNwYWNlKCksdGhpcy5wcmludF9zdHJpbmcoIj0iKSxfLnRlc3QodGhpcy5fY2gpJiYodGhpcy5fY2g9IiIpO2Vsc2UgaWYodGhpcy5fY2g9PT0iISImJiF0aGlzLl9pbnB1dC5sb29rQmFjaygiXFwiKSl0aGlzLl9vdXRwdXQuc3BhY2VfYmVmb3JlX3Rva2VuPSEwLHRoaXMucHJpbnRfc3RyaW5nKHRoaXMuX2NoKTtlbHNle3ZhciB4ZT1SPT09JyInfHxSPT09IiciO3RoaXMucHJlc2VydmVTaW5nbGVTcGFjZSh4ZXx8QSksdGhpcy5wcmludF9zdHJpbmcodGhpcy5fY2gpLCF0aGlzLl9vdXRwdXQuanVzdF9hZGRlZF9uZXdsaW5lKCkmJnRoaXMuX2lucHV0LnBlZWsoKT09PWAKYCYmUyYmdGhpcy5fb3V0cHV0LmFkZF9uZXdfbGluZSgpfXZhciBXaT10aGlzLl9vdXRwdXQuZ2V0X2NvZGUoTSk7cmV0dXJuIFdpfSxyLmV4cG9ydHMuQmVhdXRpZmllcj12fSxmdW5jdGlvbihyLHMsYSl7dmFyIGw9YSg2KS5PcHRpb25zO2Z1bmN0aW9uIG8odSl7bC5jYWxsKHRoaXMsdSwiY3NzIiksdGhpcy5zZWxlY3Rvcl9zZXBhcmF0b3JfbmV3bGluZT10aGlzLl9nZXRfYm9vbGVhbigic2VsZWN0b3Jfc2VwYXJhdG9yX25ld2xpbmUiLCEwKSx0aGlzLm5ld2xpbmVfYmV0d2Vlbl9ydWxlcz10aGlzLl9nZXRfYm9vbGVhbigibmV3bGluZV9iZXR3ZWVuX3J1bGVzIiwhMCk7dmFyIGM9dGhpcy5fZ2V0X2Jvb2xlYW4oInNwYWNlX2Fyb3VuZF9zZWxlY3Rvcl9zZXBhcmF0b3IiKTt0aGlzLnNwYWNlX2Fyb3VuZF9jb21iaW5hdG9yPXRoaXMuX2dldF9ib29sZWFuKCJzcGFjZV9hcm91bmRfY29tYmluYXRvciIpfHxjO3ZhciBkPXRoaXMuX2dldF9zZWxlY3Rpb25fbGlzdCgiYnJhY2Vfc3R5bGUiLFsiY29sbGFwc2UiLCJleHBhbmQiLCJlbmQtZXhwYW5kIiwibm9uZSIsInByZXNlcnZlLWlubGluZSJdKTt0aGlzLmJyYWNlX3N0eWxlPSJjb2xsYXBzZSI7Zm9yKHZhciBtPTA7bTxkLmxlbmd0aDttKyspZFttXSE9PSJleHBhbmQiP3RoaXMuYnJhY2Vfc3R5bGU9ImNvbGxhcHNlIjp0aGlzLmJyYWNlX3N0eWxlPWRbbV19by5wcm90b3R5cGU9bmV3IGwsci5leHBvcnRzLk9wdGlvbnM9b31dLHQ9e307ZnVuY3Rpb24gbihyKXt2YXIgcz10W3JdO2lmKHMhPT12b2lkIDApcmV0dXJuIHMuZXhwb3J0czt2YXIgYT10W3JdPXtleHBvcnRzOnt9fTtyZXR1cm4gZVtyXShhLGEuZXhwb3J0cyxuKSxhLmV4cG9ydHN9dmFyIGk9bigxNSk7c289aX0pKCk7dmFyIHpjPXNvLGFvOyhmdW5jdGlvbigpe3ZhciBlPVssLGZ1bmN0aW9uKHIpe2Z1bmN0aW9uIHMobyl7dGhpcy5fX3BhcmVudD1vLHRoaXMuX19jaGFyYWN0ZXJfY291bnQ9MCx0aGlzLl9faW5kZW50X2NvdW50PS0xLHRoaXMuX19hbGlnbm1lbnRfY291bnQ9MCx0aGlzLl9fd3JhcF9wb2ludF9pbmRleD0wLHRoaXMuX193cmFwX3BvaW50X2NoYXJhY3Rlcl9jb3VudD0wLHRoaXMuX193cmFwX3BvaW50X2luZGVudF9jb3VudD0tMSx0aGlzLl9fd3JhcF9wb2ludF9hbGlnbm1lbnRfY291bnQ9MCx0aGlzLl9faXRlbXM9W119cy5wcm90b3R5cGUuY2xvbmVfZW1wdHk9ZnVuY3Rpb24oKXt2YXIgbz1uZXcgcyh0aGlzLl9fcGFyZW50KTtyZXR1cm4gby5zZXRfaW5kZW50KHRoaXMuX19pbmRlbnRfY291bnQsdGhpcy5fX2FsaWdubWVudF9jb3VudCksb30scy5wcm90b3R5cGUuaXRlbT1mdW5jdGlvbihvKXtyZXR1cm4gbzwwP3RoaXMuX19pdGVtc1t0aGlzLl9faXRlbXMubGVuZ3RoK29dOnRoaXMuX19pdGVtc1tvXX0scy5wcm90b3R5cGUuaGFzX21hdGNoPWZ1bmN0aW9uKG8pe2Zvcih2YXIgdT10aGlzLl9faXRlbXMubGVuZ3RoLTE7dT49MDt1LS0paWYodGhpcy5fX2l0ZW1zW3VdLm1hdGNoKG8pKXJldHVybiEwO3JldHVybiExfSxzLnByb3RvdHlwZS5zZXRfaW5kZW50PWZ1bmN0aW9uKG8sdSl7dGhpcy5pc19lbXB0eSgpJiYodGhpcy5fX2luZGVudF9jb3VudD1vfHwwLHRoaXMuX19hbGlnbm1lbnRfY291bnQ9dXx8MCx0aGlzLl9fY2hhcmFjdGVyX2NvdW50PXRoaXMuX19wYXJlbnQuZ2V0X2luZGVudF9zaXplKHRoaXMuX19pbmRlbnRfY291bnQsdGhpcy5fX2FsaWdubWVudF9jb3VudCkpfSxzLnByb3RvdHlwZS5fc2V0X3dyYXBfcG9pbnQ9ZnVuY3Rpb24oKXt0aGlzLl9fcGFyZW50LndyYXBfbGluZV9sZW5ndGgmJih0aGlzLl9fd3JhcF9wb2ludF9pbmRleD10aGlzLl9faXRlbXMubGVuZ3RoLHRoaXMuX193cmFwX3BvaW50X2NoYXJhY3Rlcl9jb3VudD10aGlzLl9fY2hhcmFjdGVyX2NvdW50LHRoaXMuX193cmFwX3BvaW50X2luZGVudF9jb3VudD10aGlzLl9fcGFyZW50Lm5leHRfbGluZS5fX2luZGVudF9jb3VudCx0aGlzLl9fd3JhcF9wb2ludF9hbGlnbm1lbnRfY291bnQ9dGhpcy5fX3BhcmVudC5uZXh0X2xpbmUuX19hbGlnbm1lbnRfY291bnQpfSxzLnByb3RvdHlwZS5fc2hvdWxkX3dyYXA9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX3dyYXBfcG9pbnRfaW5kZXgmJnRoaXMuX19jaGFyYWN0ZXJfY291bnQ+dGhpcy5fX3BhcmVudC53cmFwX2xpbmVfbGVuZ3RoJiZ0aGlzLl9fd3JhcF9wb2ludF9jaGFyYWN0ZXJfY291bnQ+dGhpcy5fX3BhcmVudC5uZXh0X2xpbmUuX19jaGFyYWN0ZXJfY291bnR9LHMucHJvdG90eXBlLl9hbGxvd193cmFwPWZ1bmN0aW9uKCl7aWYodGhpcy5fc2hvdWxkX3dyYXAoKSl7dGhpcy5fX3BhcmVudC5hZGRfbmV3X2xpbmUoKTt2YXIgbz10aGlzLl9fcGFyZW50LmN1cnJlbnRfbGluZTtyZXR1cm4gby5zZXRfaW5kZW50KHRoaXMuX193cmFwX3BvaW50X2luZGVudF9jb3VudCx0aGlzLl9fd3JhcF9wb2ludF9hbGlnbm1lbnRfY291bnQpLG8uX19pdGVtcz10aGlzLl9faXRlbXMuc2xpY2UodGhpcy5fX3dyYXBfcG9pbnRfaW5kZXgpLHRoaXMuX19pdGVtcz10aGlzLl9faXRlbXMuc2xpY2UoMCx0aGlzLl9fd3JhcF9wb2ludF9pbmRleCksby5fX2NoYXJhY3Rlcl9jb3VudCs9dGhpcy5fX2NoYXJhY3Rlcl9jb3VudC10aGlzLl9fd3JhcF9wb2ludF9jaGFyYWN0ZXJfY291bnQsdGhpcy5fX2NoYXJhY3Rlcl9jb3VudD10aGlzLl9fd3JhcF9wb2ludF9jaGFyYWN0ZXJfY291bnQsby5fX2l0ZW1zWzBdPT09IiAiJiYoby5fX2l0ZW1zLnNwbGljZSgwLDEpLG8uX19jaGFyYWN0ZXJfY291bnQtPTEpLCEwfXJldHVybiExfSxzLnByb3RvdHlwZS5pc19lbXB0eT1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9faXRlbXMubGVuZ3RoPT09MH0scy5wcm90b3R5cGUubGFzdD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmlzX2VtcHR5KCk/bnVsbDp0aGlzLl9faXRlbXNbdGhpcy5fX2l0ZW1zLmxlbmd0aC0xXX0scy5wcm90b3R5cGUucHVzaD1mdW5jdGlvbihvKXt0aGlzLl9faXRlbXMucHVzaChvKTt2YXIgdT1vLmxhc3RJbmRleE9mKGAKYCk7dSE9PS0xP3RoaXMuX19jaGFyYWN0ZXJfY291bnQ9by5sZW5ndGgtdTp0aGlzLl9fY2hhcmFjdGVyX2NvdW50Kz1vLmxlbmd0aH0scy5wcm90b3R5cGUucG9wPWZ1bmN0aW9uKCl7dmFyIG89bnVsbDtyZXR1cm4gdGhpcy5pc19lbXB0eSgpfHwobz10aGlzLl9faXRlbXMucG9wKCksdGhpcy5fX2NoYXJhY3Rlcl9jb3VudC09by5sZW5ndGgpLG99LHMucHJvdG90eXBlLl9yZW1vdmVfaW5kZW50PWZ1bmN0aW9uKCl7dGhpcy5fX2luZGVudF9jb3VudD4wJiYodGhpcy5fX2luZGVudF9jb3VudC09MSx0aGlzLl9fY2hhcmFjdGVyX2NvdW50LT10aGlzLl9fcGFyZW50LmluZGVudF9zaXplKX0scy5wcm90b3R5cGUuX3JlbW92ZV93cmFwX2luZGVudD1mdW5jdGlvbigpe3RoaXMuX193cmFwX3BvaW50X2luZGVudF9jb3VudD4wJiYodGhpcy5fX3dyYXBfcG9pbnRfaW5kZW50X2NvdW50LT0xKX0scy5wcm90b3R5cGUudHJpbT1mdW5jdGlvbigpe2Zvcig7dGhpcy5sYXN0KCk9PT0iICI7KXRoaXMuX19pdGVtcy5wb3AoKSx0aGlzLl9fY2hhcmFjdGVyX2NvdW50LT0xfSxzLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3ZhciBvPSIiO3JldHVybiB0aGlzLmlzX2VtcHR5KCk/dGhpcy5fX3BhcmVudC5pbmRlbnRfZW1wdHlfbGluZXMmJihvPXRoaXMuX19wYXJlbnQuZ2V0X2luZGVudF9zdHJpbmcodGhpcy5fX2luZGVudF9jb3VudCkpOihvPXRoaXMuX19wYXJlbnQuZ2V0X2luZGVudF9zdHJpbmcodGhpcy5fX2luZGVudF9jb3VudCx0aGlzLl9fYWxpZ25tZW50X2NvdW50KSxvKz10aGlzLl9faXRlbXMuam9pbigiIikpLG99O2Z1bmN0aW9uIGEobyx1KXt0aGlzLl9fY2FjaGU9WyIiXSx0aGlzLl9faW5kZW50X3NpemU9by5pbmRlbnRfc2l6ZSx0aGlzLl9faW5kZW50X3N0cmluZz1vLmluZGVudF9jaGFyLG8uaW5kZW50X3dpdGhfdGFic3x8KHRoaXMuX19pbmRlbnRfc3RyaW5nPW5ldyBBcnJheShvLmluZGVudF9zaXplKzEpLmpvaW4oby5pbmRlbnRfY2hhcikpLHU9dXx8IiIsby5pbmRlbnRfbGV2ZWw+MCYmKHU9bmV3IEFycmF5KG8uaW5kZW50X2xldmVsKzEpLmpvaW4odGhpcy5fX2luZGVudF9zdHJpbmcpKSx0aGlzLl9fYmFzZV9zdHJpbmc9dSx0aGlzLl9fYmFzZV9zdHJpbmdfbGVuZ3RoPXUubGVuZ3RofWEucHJvdG90eXBlLmdldF9pbmRlbnRfc2l6ZT1mdW5jdGlvbihvLHUpe3ZhciBjPXRoaXMuX19iYXNlX3N0cmluZ19sZW5ndGg7cmV0dXJuIHU9dXx8MCxvPDAmJihjPTApLGMrPW8qdGhpcy5fX2luZGVudF9zaXplLGMrPXUsY30sYS5wcm90b3R5cGUuZ2V0X2luZGVudF9zdHJpbmc9ZnVuY3Rpb24obyx1KXt2YXIgYz10aGlzLl9fYmFzZV9zdHJpbmc7cmV0dXJuIHU9dXx8MCxvPDAmJihvPTAsYz0iIiksdSs9byp0aGlzLl9faW5kZW50X3NpemUsdGhpcy5fX2Vuc3VyZV9jYWNoZSh1KSxjKz10aGlzLl9fY2FjaGVbdV0sY30sYS5wcm90b3R5cGUuX19lbnN1cmVfY2FjaGU9ZnVuY3Rpb24obyl7Zm9yKDtvPj10aGlzLl9fY2FjaGUubGVuZ3RoOyl0aGlzLl9fYWRkX2NvbHVtbigpfSxhLnByb3RvdHlwZS5fX2FkZF9jb2x1bW49ZnVuY3Rpb24oKXt2YXIgbz10aGlzLl9fY2FjaGUubGVuZ3RoLHU9MCxjPSIiO3RoaXMuX19pbmRlbnRfc2l6ZSYmbz49dGhpcy5fX2luZGVudF9zaXplJiYodT1NYXRoLmZsb29yKG8vdGhpcy5fX2luZGVudF9zaXplKSxvLT11KnRoaXMuX19pbmRlbnRfc2l6ZSxjPW5ldyBBcnJheSh1KzEpLmpvaW4odGhpcy5fX2luZGVudF9zdHJpbmcpKSxvJiYoYys9bmV3IEFycmF5KG8rMSkuam9pbigiICIpKSx0aGlzLl9fY2FjaGUucHVzaChjKX07ZnVuY3Rpb24gbChvLHUpe3RoaXMuX19pbmRlbnRfY2FjaGU9bmV3IGEobyx1KSx0aGlzLnJhdz0hMSx0aGlzLl9lbmRfd2l0aF9uZXdsaW5lPW8uZW5kX3dpdGhfbmV3bGluZSx0aGlzLmluZGVudF9zaXplPW8uaW5kZW50X3NpemUsdGhpcy53cmFwX2xpbmVfbGVuZ3RoPW8ud3JhcF9saW5lX2xlbmd0aCx0aGlzLmluZGVudF9lbXB0eV9saW5lcz1vLmluZGVudF9lbXB0eV9saW5lcyx0aGlzLl9fbGluZXM9W10sdGhpcy5wcmV2aW91c19saW5lPW51bGwsdGhpcy5jdXJyZW50X2xpbmU9bnVsbCx0aGlzLm5leHRfbGluZT1uZXcgcyh0aGlzKSx0aGlzLnNwYWNlX2JlZm9yZV90b2tlbj0hMSx0aGlzLm5vbl9icmVha2luZ19zcGFjZT0hMSx0aGlzLnByZXZpb3VzX3Rva2VuX3dyYXBwZWQ9ITEsdGhpcy5fX2FkZF9vdXRwdXRsaW5lKCl9bC5wcm90b3R5cGUuX19hZGRfb3V0cHV0bGluZT1mdW5jdGlvbigpe3RoaXMucHJldmlvdXNfbGluZT10aGlzLmN1cnJlbnRfbGluZSx0aGlzLmN1cnJlbnRfbGluZT10aGlzLm5leHRfbGluZS5jbG9uZV9lbXB0eSgpLHRoaXMuX19saW5lcy5wdXNoKHRoaXMuY3VycmVudF9saW5lKX0sbC5wcm90b3R5cGUuZ2V0X2xpbmVfbnVtYmVyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19saW5lcy5sZW5ndGh9LGwucHJvdG90eXBlLmdldF9pbmRlbnRfc3RyaW5nPWZ1bmN0aW9uKG8sdSl7cmV0dXJuIHRoaXMuX19pbmRlbnRfY2FjaGUuZ2V0X2luZGVudF9zdHJpbmcobyx1KX0sbC5wcm90b3R5cGUuZ2V0X2luZGVudF9zaXplPWZ1bmN0aW9uKG8sdSl7cmV0dXJuIHRoaXMuX19pbmRlbnRfY2FjaGUuZ2V0X2luZGVudF9zaXplKG8sdSl9LGwucHJvdG90eXBlLmlzX2VtcHR5PWZ1bmN0aW9uKCl7cmV0dXJuIXRoaXMucHJldmlvdXNfbGluZSYmdGhpcy5jdXJyZW50X2xpbmUuaXNfZW1wdHkoKX0sbC5wcm90b3R5cGUuYWRkX25ld19saW5lPWZ1bmN0aW9uKG8pe3JldHVybiB0aGlzLmlzX2VtcHR5KCl8fCFvJiZ0aGlzLmp1c3RfYWRkZWRfbmV3bGluZSgpPyExOih0aGlzLnJhd3x8dGhpcy5fX2FkZF9vdXRwdXRsaW5lKCksITApfSxsLnByb3RvdHlwZS5nZXRfY29kZT1mdW5jdGlvbihvKXt0aGlzLnRyaW0oITApO3ZhciB1PXRoaXMuY3VycmVudF9saW5lLnBvcCgpO3UmJih1W3UubGVuZ3RoLTFdPT09YApgJiYodT11LnJlcGxhY2UoL1xuKyQvZywiIikpLHRoaXMuY3VycmVudF9saW5lLnB1c2godSkpLHRoaXMuX2VuZF93aXRoX25ld2xpbmUmJnRoaXMuX19hZGRfb3V0cHV0bGluZSgpO3ZhciBjPXRoaXMuX19saW5lcy5qb2luKGAKYCk7cmV0dXJuIG8hPT1gCmAmJihjPWMucmVwbGFjZSgvW1xuXS9nLG8pKSxjfSxsLnByb3RvdHlwZS5zZXRfd3JhcF9wb2ludD1mdW5jdGlvbigpe3RoaXMuY3VycmVudF9saW5lLl9zZXRfd3JhcF9wb2ludCgpfSxsLnByb3RvdHlwZS5zZXRfaW5kZW50PWZ1bmN0aW9uKG8sdSl7cmV0dXJuIG89b3x8MCx1PXV8fDAsdGhpcy5uZXh0X2xpbmUuc2V0X2luZGVudChvLHUpLHRoaXMuX19saW5lcy5sZW5ndGg+MT8odGhpcy5jdXJyZW50X2xpbmUuc2V0X2luZGVudChvLHUpLCEwKToodGhpcy5jdXJyZW50X2xpbmUuc2V0X2luZGVudCgpLCExKX0sbC5wcm90b3R5cGUuYWRkX3Jhd190b2tlbj1mdW5jdGlvbihvKXtmb3IodmFyIHU9MDt1PG8ubmV3bGluZXM7dSsrKXRoaXMuX19hZGRfb3V0cHV0bGluZSgpO3RoaXMuY3VycmVudF9saW5lLnNldF9pbmRlbnQoLTEpLHRoaXMuY3VycmVudF9saW5lLnB1c2goby53aGl0ZXNwYWNlX2JlZm9yZSksdGhpcy5jdXJyZW50X2xpbmUucHVzaChvLnRleHQpLHRoaXMuc3BhY2VfYmVmb3JlX3Rva2VuPSExLHRoaXMubm9uX2JyZWFraW5nX3NwYWNlPSExLHRoaXMucHJldmlvdXNfdG9rZW5fd3JhcHBlZD0hMX0sbC5wcm90b3R5cGUuYWRkX3Rva2VuPWZ1bmN0aW9uKG8pe3RoaXMuX19hZGRfc3BhY2VfYmVmb3JlX3Rva2VuKCksdGhpcy5jdXJyZW50X2xpbmUucHVzaChvKSx0aGlzLnNwYWNlX2JlZm9yZV90b2tlbj0hMSx0aGlzLm5vbl9icmVha2luZ19zcGFjZT0hMSx0aGlzLnByZXZpb3VzX3Rva2VuX3dyYXBwZWQ9dGhpcy5jdXJyZW50X2xpbmUuX2FsbG93X3dyYXAoKX0sbC5wcm90b3R5cGUuX19hZGRfc3BhY2VfYmVmb3JlX3Rva2VuPWZ1bmN0aW9uKCl7dGhpcy5zcGFjZV9iZWZvcmVfdG9rZW4mJiF0aGlzLmp1c3RfYWRkZWRfbmV3bGluZSgpJiYodGhpcy5ub25fYnJlYWtpbmdfc3BhY2V8fHRoaXMuc2V0X3dyYXBfcG9pbnQoKSx0aGlzLmN1cnJlbnRfbGluZS5wdXNoKCIgIikpfSxsLnByb3RvdHlwZS5yZW1vdmVfaW5kZW50PWZ1bmN0aW9uKG8pe2Zvcih2YXIgdT10aGlzLl9fbGluZXMubGVuZ3RoO288dTspdGhpcy5fX2xpbmVzW29dLl9yZW1vdmVfaW5kZW50KCksbysrO3RoaXMuY3VycmVudF9saW5lLl9yZW1vdmVfd3JhcF9pbmRlbnQoKX0sbC5wcm90b3R5cGUudHJpbT1mdW5jdGlvbihvKXtmb3Iobz1vPT09dm9pZCAwPyExOm8sdGhpcy5jdXJyZW50X2xpbmUudHJpbSgpO28mJnRoaXMuX19saW5lcy5sZW5ndGg+MSYmdGhpcy5jdXJyZW50X2xpbmUuaXNfZW1wdHkoKTspdGhpcy5fX2xpbmVzLnBvcCgpLHRoaXMuY3VycmVudF9saW5lPXRoaXMuX19saW5lc1t0aGlzLl9fbGluZXMubGVuZ3RoLTFdLHRoaXMuY3VycmVudF9saW5lLnRyaW0oKTt0aGlzLnByZXZpb3VzX2xpbmU9dGhpcy5fX2xpbmVzLmxlbmd0aD4xP3RoaXMuX19saW5lc1t0aGlzLl9fbGluZXMubGVuZ3RoLTJdOm51bGx9LGwucHJvdG90eXBlLmp1c3RfYWRkZWRfbmV3bGluZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmN1cnJlbnRfbGluZS5pc19lbXB0eSgpfSxsLnByb3RvdHlwZS5qdXN0X2FkZGVkX2JsYW5rbGluZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmlzX2VtcHR5KCl8fHRoaXMuY3VycmVudF9saW5lLmlzX2VtcHR5KCkmJnRoaXMucHJldmlvdXNfbGluZS5pc19lbXB0eSgpfSxsLnByb3RvdHlwZS5lbnN1cmVfZW1wdHlfbGluZV9hYm92ZT1mdW5jdGlvbihvLHUpe2Zvcih2YXIgYz10aGlzLl9fbGluZXMubGVuZ3RoLTI7Yz49MDspe3ZhciBkPXRoaXMuX19saW5lc1tjXTtpZihkLmlzX2VtcHR5KCkpYnJlYWs7aWYoZC5pdGVtKDApLmluZGV4T2YobykhPT0wJiZkLml0ZW0oLTEpIT09dSl7dGhpcy5fX2xpbmVzLnNwbGljZShjKzEsMCxuZXcgcyh0aGlzKSksdGhpcy5wcmV2aW91c19saW5lPXRoaXMuX19saW5lc1t0aGlzLl9fbGluZXMubGVuZ3RoLTJdO2JyZWFrfWMtLX19LHIuZXhwb3J0cy5PdXRwdXQ9bH0sZnVuY3Rpb24ocil7ZnVuY3Rpb24gcyhhLGwsbyx1KXt0aGlzLnR5cGU9YSx0aGlzLnRleHQ9bCx0aGlzLmNvbW1lbnRzX2JlZm9yZT1udWxsLHRoaXMubmV3bGluZXM9b3x8MCx0aGlzLndoaXRlc3BhY2VfYmVmb3JlPXV8fCIiLHRoaXMucGFyZW50PW51bGwsdGhpcy5uZXh0PW51bGwsdGhpcy5wcmV2aW91cz1udWxsLHRoaXMub3BlbmVkPW51bGwsdGhpcy5jbG9zZWQ9bnVsbCx0aGlzLmRpcmVjdGl2ZXM9bnVsbH1yLmV4cG9ydHMuVG9rZW49c30sLCxmdW5jdGlvbihyKXtmdW5jdGlvbiBzKG8sdSl7dGhpcy5yYXdfb3B0aW9ucz1hKG8sdSksdGhpcy5kaXNhYmxlZD10aGlzLl9nZXRfYm9vbGVhbigiZGlzYWJsZWQiKSx0aGlzLmVvbD10aGlzLl9nZXRfY2hhcmFjdGVycygiZW9sIiwiYXV0byIpLHRoaXMuZW5kX3dpdGhfbmV3bGluZT10aGlzLl9nZXRfYm9vbGVhbigiZW5kX3dpdGhfbmV3bGluZSIpLHRoaXMuaW5kZW50X3NpemU9dGhpcy5fZ2V0X251bWJlcigiaW5kZW50X3NpemUiLDQpLHRoaXMuaW5kZW50X2NoYXI9dGhpcy5fZ2V0X2NoYXJhY3RlcnMoImluZGVudF9jaGFyIiwiICIpLHRoaXMuaW5kZW50X2xldmVsPXRoaXMuX2dldF9udW1iZXIoImluZGVudF9sZXZlbCIpLHRoaXMucHJlc2VydmVfbmV3bGluZXM9dGhpcy5fZ2V0X2Jvb2xlYW4oInByZXNlcnZlX25ld2xpbmVzIiwhMCksdGhpcy5tYXhfcHJlc2VydmVfbmV3bGluZXM9dGhpcy5fZ2V0X251bWJlcigibWF4X3ByZXNlcnZlX25ld2xpbmVzIiwzMjc4NiksdGhpcy5wcmVzZXJ2ZV9uZXdsaW5lc3x8KHRoaXMubWF4X3ByZXNlcnZlX25ld2xpbmVzPTApLHRoaXMuaW5kZW50X3dpdGhfdGFicz10aGlzLl9nZXRfYm9vbGVhbigiaW5kZW50X3dpdGhfdGFicyIsdGhpcy5pbmRlbnRfY2hhcj09PSIJIiksdGhpcy5pbmRlbnRfd2l0aF90YWJzJiYodGhpcy5pbmRlbnRfY2hhcj0iCSIsdGhpcy5pbmRlbnRfc2l6ZT09PTEmJih0aGlzLmluZGVudF9zaXplPTQpKSx0aGlzLndyYXBfbGluZV9sZW5ndGg9dGhpcy5fZ2V0X251bWJlcigid3JhcF9saW5lX2xlbmd0aCIsdGhpcy5fZ2V0X251bWJlcigibWF4X2NoYXIiKSksdGhpcy5pbmRlbnRfZW1wdHlfbGluZXM9dGhpcy5fZ2V0X2Jvb2xlYW4oImluZGVudF9lbXB0eV9saW5lcyIpLHRoaXMudGVtcGxhdGluZz10aGlzLl9nZXRfc2VsZWN0aW9uX2xpc3QoInRlbXBsYXRpbmciLFsiYXV0byIsIm5vbmUiLCJhbmd1bGFyIiwiZGphbmdvIiwiZXJiIiwiaGFuZGxlYmFycyIsInBocCIsInNtYXJ0eSJdLFsiYXV0byJdKX1zLnByb3RvdHlwZS5fZ2V0X2FycmF5PWZ1bmN0aW9uKG8sdSl7dmFyIGM9dGhpcy5yYXdfb3B0aW9uc1tvXSxkPXV8fFtdO3JldHVybiB0eXBlb2YgYz09Im9iamVjdCI/YyE9PW51bGwmJnR5cGVvZiBjLmNvbmNhdD09ImZ1bmN0aW9uIiYmKGQ9Yy5jb25jYXQoKSk6dHlwZW9mIGM9PSJzdHJpbmciJiYoZD1jLnNwbGl0KC9bXmEtekEtWjAtOV9cL1wtXSsvKSksZH0scy5wcm90b3R5cGUuX2dldF9ib29sZWFuPWZ1bmN0aW9uKG8sdSl7dmFyIGM9dGhpcy5yYXdfb3B0aW9uc1tvXSxkPWM9PT12b2lkIDA/ISF1OiEhYztyZXR1cm4gZH0scy5wcm90b3R5cGUuX2dldF9jaGFyYWN0ZXJzPWZ1bmN0aW9uKG8sdSl7dmFyIGM9dGhpcy5yYXdfb3B0aW9uc1tvXSxkPXV8fCIiO3JldHVybiB0eXBlb2YgYz09InN0cmluZyImJihkPWMucmVwbGFjZSgvXFxyLywiXHIiKS5yZXBsYWNlKC9cXG4vLGAKYCkucmVwbGFjZSgvXFx0LywiCSIpKSxkfSxzLnByb3RvdHlwZS5fZ2V0X251bWJlcj1mdW5jdGlvbihvLHUpe3ZhciBjPXRoaXMucmF3X29wdGlvbnNbb107dT1wYXJzZUludCh1LDEwKSxpc05hTih1KSYmKHU9MCk7dmFyIGQ9cGFyc2VJbnQoYywxMCk7cmV0dXJuIGlzTmFOKGQpJiYoZD11KSxkfSxzLnByb3RvdHlwZS5fZ2V0X3NlbGVjdGlvbj1mdW5jdGlvbihvLHUsYyl7dmFyIGQ9dGhpcy5fZ2V0X3NlbGVjdGlvbl9saXN0KG8sdSxjKTtpZihkLmxlbmd0aCE9PTEpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIE9wdGlvbiBWYWx1ZTogVGhlIG9wdGlvbiAnIitvK2AnIGNhbiBvbmx5IGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoKYCt1K2AKWW91IHBhc3NlZCBpbjogJ2ArdGhpcy5yYXdfb3B0aW9uc1tvXSsiJyIpO3JldHVybiBkWzBdfSxzLnByb3RvdHlwZS5fZ2V0X3NlbGVjdGlvbl9saXN0PWZ1bmN0aW9uKG8sdSxjKXtpZighdXx8dS5sZW5ndGg9PT0wKXRocm93IG5ldyBFcnJvcigiU2VsZWN0aW9uIGxpc3QgY2Fubm90IGJlIGVtcHR5LiIpO2lmKGM9Y3x8W3VbMF1dLCF0aGlzLl9pc192YWxpZF9zZWxlY3Rpb24oYyx1KSl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgRGVmYXVsdCBWYWx1ZSEiKTt2YXIgZD10aGlzLl9nZXRfYXJyYXkobyxjKTtpZighdGhpcy5faXNfdmFsaWRfc2VsZWN0aW9uKGQsdSkpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIE9wdGlvbiBWYWx1ZTogVGhlIG9wdGlvbiAnIitvK2AnIGNhbiBjb250YWluIG9ubHkgdGhlIGZvbGxvd2luZyB2YWx1ZXM6CmArdStgCllvdSBwYXNzZWQgaW46ICdgK3RoaXMucmF3X29wdGlvbnNbb10rIiciKTtyZXR1cm4gZH0scy5wcm90b3R5cGUuX2lzX3ZhbGlkX3NlbGVjdGlvbj1mdW5jdGlvbihvLHUpe3JldHVybiBvLmxlbmd0aCYmdS5sZW5ndGgmJiFvLnNvbWUoZnVuY3Rpb24oYyl7cmV0dXJuIHUuaW5kZXhPZihjKT09PS0xfSl9O2Z1bmN0aW9uIGEobyx1KXt2YXIgYz17fTtvPWwobyk7dmFyIGQ7Zm9yKGQgaW4gbylkIT09dSYmKGNbZF09b1tkXSk7aWYodSYmb1t1XSlmb3IoZCBpbiBvW3VdKWNbZF09b1t1XVtkXTtyZXR1cm4gY31mdW5jdGlvbiBsKG8pe3ZhciB1PXt9LGM7Zm9yKGMgaW4gbyl7dmFyIGQ9Yy5yZXBsYWNlKC8tL2csIl8iKTt1W2RdPW9bY119cmV0dXJuIHV9ci5leHBvcnRzLk9wdGlvbnM9cyxyLmV4cG9ydHMubm9ybWFsaXplT3B0cz1sLHIuZXhwb3J0cy5tZXJnZU9wdHM9YX0sLGZ1bmN0aW9uKHIpe3ZhciBzPVJlZ0V4cC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkoInN0aWNreSIpO2Z1bmN0aW9uIGEobCl7dGhpcy5fX2lucHV0PWx8fCIiLHRoaXMuX19pbnB1dF9sZW5ndGg9dGhpcy5fX2lucHV0Lmxlbmd0aCx0aGlzLl9fcG9zaXRpb249MH1hLnByb3RvdHlwZS5yZXN0YXJ0PWZ1bmN0aW9uKCl7dGhpcy5fX3Bvc2l0aW9uPTB9LGEucHJvdG90eXBlLmJhY2s9ZnVuY3Rpb24oKXt0aGlzLl9fcG9zaXRpb24+MCYmKHRoaXMuX19wb3NpdGlvbi09MSl9LGEucHJvdG90eXBlLmhhc05leHQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX3Bvc2l0aW9uPHRoaXMuX19pbnB1dF9sZW5ndGh9LGEucHJvdG90eXBlLm5leHQ9ZnVuY3Rpb24oKXt2YXIgbD1udWxsO3JldHVybiB0aGlzLmhhc05leHQoKSYmKGw9dGhpcy5fX2lucHV0LmNoYXJBdCh0aGlzLl9fcG9zaXRpb24pLHRoaXMuX19wb3NpdGlvbis9MSksbH0sYS5wcm90b3R5cGUucGVlaz1mdW5jdGlvbihsKXt2YXIgbz1udWxsO3JldHVybiBsPWx8fDAsbCs9dGhpcy5fX3Bvc2l0aW9uLGw+PTAmJmw8dGhpcy5fX2lucHV0X2xlbmd0aCYmKG89dGhpcy5fX2lucHV0LmNoYXJBdChsKSksb30sYS5wcm90b3R5cGUuX19tYXRjaD1mdW5jdGlvbihsLG8pe2wubGFzdEluZGV4PW87dmFyIHU9bC5leGVjKHRoaXMuX19pbnB1dCk7cmV0dXJuIHUmJiEocyYmbC5zdGlja3kpJiZ1LmluZGV4IT09byYmKHU9bnVsbCksdX0sYS5wcm90b3R5cGUudGVzdD1mdW5jdGlvbihsLG8pe3JldHVybiBvPW98fDAsbys9dGhpcy5fX3Bvc2l0aW9uLG8+PTAmJm88dGhpcy5fX2lucHV0X2xlbmd0aD8hIXRoaXMuX19tYXRjaChsLG8pOiExfSxhLnByb3RvdHlwZS50ZXN0Q2hhcj1mdW5jdGlvbihsLG8pe3ZhciB1PXRoaXMucGVlayhvKTtyZXR1cm4gbC5sYXN0SW5kZXg9MCx1IT09bnVsbCYmbC50ZXN0KHUpfSxhLnByb3RvdHlwZS5tYXRjaD1mdW5jdGlvbihsKXt2YXIgbz10aGlzLl9fbWF0Y2gobCx0aGlzLl9fcG9zaXRpb24pO3JldHVybiBvP3RoaXMuX19wb3NpdGlvbis9b1swXS5sZW5ndGg6bz1udWxsLG99LGEucHJvdG90eXBlLnJlYWQ9ZnVuY3Rpb24obCxvLHUpe3ZhciBjPSIiLGQ7cmV0dXJuIGwmJihkPXRoaXMubWF0Y2gobCksZCYmKGMrPWRbMF0pKSxvJiYoZHx8IWwpJiYoYys9dGhpcy5yZWFkVW50aWwobyx1KSksY30sYS5wcm90b3R5cGUucmVhZFVudGlsPWZ1bmN0aW9uKGwsbyl7dmFyIHU9IiIsYz10aGlzLl9fcG9zaXRpb247bC5sYXN0SW5kZXg9dGhpcy5fX3Bvc2l0aW9uO3ZhciBkPWwuZXhlYyh0aGlzLl9faW5wdXQpO3JldHVybiBkPyhjPWQuaW5kZXgsbyYmKGMrPWRbMF0ubGVuZ3RoKSk6Yz10aGlzLl9faW5wdXRfbGVuZ3RoLHU9dGhpcy5fX2lucHV0LnN1YnN0cmluZyh0aGlzLl9fcG9zaXRpb24sYyksdGhpcy5fX3Bvc2l0aW9uPWMsdX0sYS5wcm90b3R5cGUucmVhZFVudGlsQWZ0ZXI9ZnVuY3Rpb24obCl7cmV0dXJuIHRoaXMucmVhZFVudGlsKGwsITApfSxhLnByb3RvdHlwZS5nZXRfcmVnZXhwPWZ1bmN0aW9uKGwsbyl7dmFyIHU9bnVsbCxjPSJnIjtyZXR1cm4gbyYmcyYmKGM9InkiKSx0eXBlb2YgbD09InN0cmluZyImJmwhPT0iIj91PW5ldyBSZWdFeHAobCxjKTpsJiYodT1uZXcgUmVnRXhwKGwuc291cmNlLGMpKSx1fSxhLnByb3RvdHlwZS5nZXRfbGl0ZXJhbF9yZWdleHA9ZnVuY3Rpb24obCl7cmV0dXJuIFJlZ0V4cChsLnJlcGxhY2UoL1stXC9cXF4kKis/LigpfFtcXXt9XS9nLCJcXCQmIikpfSxhLnByb3RvdHlwZS5wZWVrVW50aWxBZnRlcj1mdW5jdGlvbihsKXt2YXIgbz10aGlzLl9fcG9zaXRpb24sdT10aGlzLnJlYWRVbnRpbEFmdGVyKGwpO3JldHVybiB0aGlzLl9fcG9zaXRpb249byx1fSxhLnByb3RvdHlwZS5sb29rQmFjaz1mdW5jdGlvbihsKXt2YXIgbz10aGlzLl9fcG9zaXRpb24tMTtyZXR1cm4gbz49bC5sZW5ndGgmJnRoaXMuX19pbnB1dC5zdWJzdHJpbmcoby1sLmxlbmd0aCxvKS50b0xvd2VyQ2FzZSgpPT09bH0sci5leHBvcnRzLklucHV0U2Nhbm5lcj1hfSxmdW5jdGlvbihyLHMsYSl7dmFyIGw9YSg4KS5JbnB1dFNjYW5uZXIsbz1hKDMpLlRva2VuLHU9YSgxMCkuVG9rZW5TdHJlYW0sYz1hKDExKS5XaGl0ZXNwYWNlUGF0dGVybixkPXtTVEFSVDoiVEtfU1RBUlQiLFJBVzoiVEtfUkFXIixFT0Y6IlRLX0VPRiJ9LG09ZnVuY3Rpb24oZixfKXt0aGlzLl9pbnB1dD1uZXcgbChmKSx0aGlzLl9vcHRpb25zPV98fHt9LHRoaXMuX190b2tlbnM9bnVsbCx0aGlzLl9wYXR0ZXJucz17fSx0aGlzLl9wYXR0ZXJucy53aGl0ZXNwYWNlPW5ldyBjKHRoaXMuX2lucHV0KX07bS5wcm90b3R5cGUudG9rZW5pemU9ZnVuY3Rpb24oKXt0aGlzLl9pbnB1dC5yZXN0YXJ0KCksdGhpcy5fX3Rva2Vucz1uZXcgdSx0aGlzLl9yZXNldCgpO2Zvcih2YXIgZixfPW5ldyBvKGQuU1RBUlQsIiIpLGc9bnVsbCxrPVtdLHk9bmV3IHU7Xy50eXBlIT09ZC5FT0Y7KXtmb3IoZj10aGlzLl9nZXRfbmV4dF90b2tlbihfLGcpO3RoaXMuX2lzX2NvbW1lbnQoZik7KXkuYWRkKGYpLGY9dGhpcy5fZ2V0X25leHRfdG9rZW4oXyxnKTt5LmlzRW1wdHkoKXx8KGYuY29tbWVudHNfYmVmb3JlPXkseT1uZXcgdSksZi5wYXJlbnQ9Zyx0aGlzLl9pc19vcGVuaW5nKGYpPyhrLnB1c2goZyksZz1mKTpnJiZ0aGlzLl9pc19jbG9zaW5nKGYsZykmJihmLm9wZW5lZD1nLGcuY2xvc2VkPWYsZz1rLnBvcCgpLGYucGFyZW50PWcpLGYucHJldmlvdXM9XyxfLm5leHQ9Zix0aGlzLl9fdG9rZW5zLmFkZChmKSxfPWZ9cmV0dXJuIHRoaXMuX190b2tlbnN9LG0ucHJvdG90eXBlLl9pc19maXJzdF90b2tlbj1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9fdG9rZW5zLmlzRW1wdHkoKX0sbS5wcm90b3R5cGUuX3Jlc2V0PWZ1bmN0aW9uKCl7fSxtLnByb3RvdHlwZS5fZ2V0X25leHRfdG9rZW49ZnVuY3Rpb24oZixfKXt0aGlzLl9yZWFkV2hpdGVzcGFjZSgpO3ZhciBnPXRoaXMuX2lucHV0LnJlYWQoLy4rL2cpO3JldHVybiBnP3RoaXMuX2NyZWF0ZV90b2tlbihkLlJBVyxnKTp0aGlzLl9jcmVhdGVfdG9rZW4oZC5FT0YsIiIpfSxtLnByb3RvdHlwZS5faXNfY29tbWVudD1mdW5jdGlvbihmKXtyZXR1cm4hMX0sbS5wcm90b3R5cGUuX2lzX29wZW5pbmc9ZnVuY3Rpb24oZil7cmV0dXJuITF9LG0ucHJvdG90eXBlLl9pc19jbG9zaW5nPWZ1bmN0aW9uKGYsXyl7cmV0dXJuITF9LG0ucHJvdG90eXBlLl9jcmVhdGVfdG9rZW49ZnVuY3Rpb24oZixfKXt2YXIgZz1uZXcgbyhmLF8sdGhpcy5fcGF0dGVybnMud2hpdGVzcGFjZS5uZXdsaW5lX2NvdW50LHRoaXMuX3BhdHRlcm5zLndoaXRlc3BhY2Uud2hpdGVzcGFjZV9iZWZvcmVfdG9rZW4pO3JldHVybiBnfSxtLnByb3RvdHlwZS5fcmVhZFdoaXRlc3BhY2U9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcGF0dGVybnMud2hpdGVzcGFjZS5yZWFkKCl9LHIuZXhwb3J0cy5Ub2tlbml6ZXI9bSxyLmV4cG9ydHMuVE9LRU49ZH0sZnVuY3Rpb24ocil7ZnVuY3Rpb24gcyhhKXt0aGlzLl9fdG9rZW5zPVtdLHRoaXMuX190b2tlbnNfbGVuZ3RoPXRoaXMuX190b2tlbnMubGVuZ3RoLHRoaXMuX19wb3NpdGlvbj0wLHRoaXMuX19wYXJlbnRfdG9rZW49YX1zLnByb3RvdHlwZS5yZXN0YXJ0PWZ1bmN0aW9uKCl7dGhpcy5fX3Bvc2l0aW9uPTB9LHMucHJvdG90eXBlLmlzRW1wdHk9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX3Rva2Vuc19sZW5ndGg9PT0wfSxzLnByb3RvdHlwZS5oYXNOZXh0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19wb3NpdGlvbjx0aGlzLl9fdG9rZW5zX2xlbmd0aH0scy5wcm90b3R5cGUubmV4dD1mdW5jdGlvbigpe3ZhciBhPW51bGw7cmV0dXJuIHRoaXMuaGFzTmV4dCgpJiYoYT10aGlzLl9fdG9rZW5zW3RoaXMuX19wb3NpdGlvbl0sdGhpcy5fX3Bvc2l0aW9uKz0xKSxhfSxzLnByb3RvdHlwZS5wZWVrPWZ1bmN0aW9uKGEpe3ZhciBsPW51bGw7cmV0dXJuIGE9YXx8MCxhKz10aGlzLl9fcG9zaXRpb24sYT49MCYmYTx0aGlzLl9fdG9rZW5zX2xlbmd0aCYmKGw9dGhpcy5fX3Rva2Vuc1thXSksbH0scy5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKGEpe3RoaXMuX19wYXJlbnRfdG9rZW4mJihhLnBhcmVudD10aGlzLl9fcGFyZW50X3Rva2VuKSx0aGlzLl9fdG9rZW5zLnB1c2goYSksdGhpcy5fX3Rva2Vuc19sZW5ndGgrPTF9LHIuZXhwb3J0cy5Ub2tlblN0cmVhbT1zfSxmdW5jdGlvbihyLHMsYSl7dmFyIGw9YSgxMikuUGF0dGVybjtmdW5jdGlvbiBvKHUsYyl7bC5jYWxsKHRoaXMsdSxjKSxjP3RoaXMuX2xpbmVfcmVnZXhwPXRoaXMuX2lucHV0LmdldF9yZWdleHAoYy5fbGluZV9yZWdleHApOnRoaXMuX19zZXRfd2hpdGVzcGFjZV9wYXR0ZXJucygiIiwiIiksdGhpcy5uZXdsaW5lX2NvdW50PTAsdGhpcy53aGl0ZXNwYWNlX2JlZm9yZV90b2tlbj0iIn1vLnByb3RvdHlwZT1uZXcgbCxvLnByb3RvdHlwZS5fX3NldF93aGl0ZXNwYWNlX3BhdHRlcm5zPWZ1bmN0aW9uKHUsYyl7dSs9IlxcdCAiLGMrPSJcXG5cXHIiLHRoaXMuX21hdGNoX3BhdHRlcm49dGhpcy5faW5wdXQuZ2V0X3JlZ2V4cCgiWyIrdStjKyJdKyIsITApLHRoaXMuX25ld2xpbmVfcmVnZXhwPXRoaXMuX2lucHV0LmdldF9yZWdleHAoIlxcclxcbnxbIitjKyJdIil9LG8ucHJvdG90eXBlLnJlYWQ9ZnVuY3Rpb24oKXt0aGlzLm5ld2xpbmVfY291bnQ9MCx0aGlzLndoaXRlc3BhY2VfYmVmb3JlX3Rva2VuPSIiO3ZhciB1PXRoaXMuX2lucHV0LnJlYWQodGhpcy5fbWF0Y2hfcGF0dGVybik7aWYodT09PSIgIil0aGlzLndoaXRlc3BhY2VfYmVmb3JlX3Rva2VuPSIgIjtlbHNlIGlmKHUpe3ZhciBjPXRoaXMuX19zcGxpdCh0aGlzLl9uZXdsaW5lX3JlZ2V4cCx1KTt0aGlzLm5ld2xpbmVfY291bnQ9Yy5sZW5ndGgtMSx0aGlzLndoaXRlc3BhY2VfYmVmb3JlX3Rva2VuPWNbdGhpcy5uZXdsaW5lX2NvdW50XX1yZXR1cm4gdX0sby5wcm90b3R5cGUubWF0Y2hpbmc9ZnVuY3Rpb24odSxjKXt2YXIgZD10aGlzLl9jcmVhdGUoKTtyZXR1cm4gZC5fX3NldF93aGl0ZXNwYWNlX3BhdHRlcm5zKHUsYyksZC5fdXBkYXRlKCksZH0sby5wcm90b3R5cGUuX2NyZWF0ZT1mdW5jdGlvbigpe3JldHVybiBuZXcgbyh0aGlzLl9pbnB1dCx0aGlzKX0sby5wcm90b3R5cGUuX19zcGxpdD1mdW5jdGlvbih1LGMpe3UubGFzdEluZGV4PTA7Zm9yKHZhciBkPTAsbT1bXSxmPXUuZXhlYyhjKTtmOyltLnB1c2goYy5zdWJzdHJpbmcoZCxmLmluZGV4KSksZD1mLmluZGV4K2ZbMF0ubGVuZ3RoLGY9dS5leGVjKGMpO3JldHVybiBkPGMubGVuZ3RoP20ucHVzaChjLnN1YnN0cmluZyhkLGMubGVuZ3RoKSk6bS5wdXNoKCIiKSxtfSxyLmV4cG9ydHMuV2hpdGVzcGFjZVBhdHRlcm49b30sZnVuY3Rpb24ocil7ZnVuY3Rpb24gcyhhLGwpe3RoaXMuX2lucHV0PWEsdGhpcy5fc3RhcnRpbmdfcGF0dGVybj1udWxsLHRoaXMuX21hdGNoX3BhdHRlcm49bnVsbCx0aGlzLl91bnRpbF9wYXR0ZXJuPW51bGwsdGhpcy5fdW50aWxfYWZ0ZXI9ITEsbCYmKHRoaXMuX3N0YXJ0aW5nX3BhdHRlcm49dGhpcy5faW5wdXQuZ2V0X3JlZ2V4cChsLl9zdGFydGluZ19wYXR0ZXJuLCEwKSx0aGlzLl9tYXRjaF9wYXR0ZXJuPXRoaXMuX2lucHV0LmdldF9yZWdleHAobC5fbWF0Y2hfcGF0dGVybiwhMCksdGhpcy5fdW50aWxfcGF0dGVybj10aGlzLl9pbnB1dC5nZXRfcmVnZXhwKGwuX3VudGlsX3BhdHRlcm4pLHRoaXMuX3VudGlsX2FmdGVyPWwuX3VudGlsX2FmdGVyKX1zLnByb3RvdHlwZS5yZWFkPWZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5faW5wdXQucmVhZCh0aGlzLl9zdGFydGluZ19wYXR0ZXJuKTtyZXR1cm4oIXRoaXMuX3N0YXJ0aW5nX3BhdHRlcm58fGEpJiYoYSs9dGhpcy5faW5wdXQucmVhZCh0aGlzLl9tYXRjaF9wYXR0ZXJuLHRoaXMuX3VudGlsX3BhdHRlcm4sdGhpcy5fdW50aWxfYWZ0ZXIpKSxhfSxzLnByb3RvdHlwZS5yZWFkX21hdGNoPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2lucHV0Lm1hdGNoKHRoaXMuX21hdGNoX3BhdHRlcm4pfSxzLnByb3RvdHlwZS51bnRpbF9hZnRlcj1mdW5jdGlvbihhKXt2YXIgbD10aGlzLl9jcmVhdGUoKTtyZXR1cm4gbC5fdW50aWxfYWZ0ZXI9ITAsbC5fdW50aWxfcGF0dGVybj10aGlzLl9pbnB1dC5nZXRfcmVnZXhwKGEpLGwuX3VwZGF0ZSgpLGx9LHMucHJvdG90eXBlLnVudGlsPWZ1bmN0aW9uKGEpe3ZhciBsPXRoaXMuX2NyZWF0ZSgpO3JldHVybiBsLl91bnRpbF9hZnRlcj0hMSxsLl91bnRpbF9wYXR0ZXJuPXRoaXMuX2lucHV0LmdldF9yZWdleHAoYSksbC5fdXBkYXRlKCksbH0scy5wcm90b3R5cGUuc3RhcnRpbmdfd2l0aD1mdW5jdGlvbihhKXt2YXIgbD10aGlzLl9jcmVhdGUoKTtyZXR1cm4gbC5fc3RhcnRpbmdfcGF0dGVybj10aGlzLl9pbnB1dC5nZXRfcmVnZXhwKGEsITApLGwuX3VwZGF0ZSgpLGx9LHMucHJvdG90eXBlLm1hdGNoaW5nPWZ1bmN0aW9uKGEpe3ZhciBsPXRoaXMuX2NyZWF0ZSgpO3JldHVybiBsLl9tYXRjaF9wYXR0ZXJuPXRoaXMuX2lucHV0LmdldF9yZWdleHAoYSwhMCksbC5fdXBkYXRlKCksbH0scy5wcm90b3R5cGUuX2NyZWF0ZT1mdW5jdGlvbigpe3JldHVybiBuZXcgcyh0aGlzLl9pbnB1dCx0aGlzKX0scy5wcm90b3R5cGUuX3VwZGF0ZT1mdW5jdGlvbigpe30sci5leHBvcnRzLlBhdHRlcm49c30sZnVuY3Rpb24ocil7ZnVuY3Rpb24gcyhhLGwpe2E9dHlwZW9mIGE9PSJzdHJpbmciP2E6YS5zb3VyY2UsbD10eXBlb2YgbD09InN0cmluZyI/bDpsLnNvdXJjZSx0aGlzLl9fZGlyZWN0aXZlc19ibG9ja19wYXR0ZXJuPW5ldyBSZWdFeHAoYSsvIGJlYXV0aWZ5KCBcdytbOl1cdyspKyAvLnNvdXJjZStsLCJnIiksdGhpcy5fX2RpcmVjdGl2ZV9wYXR0ZXJuPS8gKFx3KylbOl0oXHcrKS9nLHRoaXMuX19kaXJlY3RpdmVzX2VuZF9pZ25vcmVfcGF0dGVybj1uZXcgUmVnRXhwKGErL1xzYmVhdXRpZnlcc2lnbm9yZTplbmRccy8uc291cmNlK2wsImciKX1zLnByb3RvdHlwZS5nZXRfZGlyZWN0aXZlcz1mdW5jdGlvbihhKXtpZighYS5tYXRjaCh0aGlzLl9fZGlyZWN0aXZlc19ibG9ja19wYXR0ZXJuKSlyZXR1cm4gbnVsbDt2YXIgbD17fTt0aGlzLl9fZGlyZWN0aXZlX3BhdHRlcm4ubGFzdEluZGV4PTA7Zm9yKHZhciBvPXRoaXMuX19kaXJlY3RpdmVfcGF0dGVybi5leGVjKGEpO287KWxbb1sxXV09b1syXSxvPXRoaXMuX19kaXJlY3RpdmVfcGF0dGVybi5leGVjKGEpO3JldHVybiBsfSxzLnByb3RvdHlwZS5yZWFkSWdub3JlZD1mdW5jdGlvbihhKXtyZXR1cm4gYS5yZWFkVW50aWxBZnRlcih0aGlzLl9fZGlyZWN0aXZlc19lbmRfaWdub3JlX3BhdHRlcm4pfSxyLmV4cG9ydHMuRGlyZWN0aXZlcz1zfSxmdW5jdGlvbihyLHMsYSl7dmFyIGw9YSgxMikuUGF0dGVybixvPXtkamFuZ286ITEsZXJiOiExLGhhbmRsZWJhcnM6ITEscGhwOiExLHNtYXJ0eTohMSxhbmd1bGFyOiExfTtmdW5jdGlvbiB1KGMsZCl7bC5jYWxsKHRoaXMsYyxkKSx0aGlzLl9fdGVtcGxhdGVfcGF0dGVybj1udWxsLHRoaXMuX2Rpc2FibGVkPU9iamVjdC5hc3NpZ24oe30sbyksdGhpcy5fZXhjbHVkZWQ9T2JqZWN0LmFzc2lnbih7fSxvKSxkJiYodGhpcy5fX3RlbXBsYXRlX3BhdHRlcm49dGhpcy5faW5wdXQuZ2V0X3JlZ2V4cChkLl9fdGVtcGxhdGVfcGF0dGVybiksdGhpcy5fZXhjbHVkZWQ9T2JqZWN0LmFzc2lnbih0aGlzLl9leGNsdWRlZCxkLl9leGNsdWRlZCksdGhpcy5fZGlzYWJsZWQ9T2JqZWN0LmFzc2lnbih0aGlzLl9kaXNhYmxlZCxkLl9kaXNhYmxlZCkpO3ZhciBtPW5ldyBsKGMpO3RoaXMuX19wYXR0ZXJucz17aGFuZGxlYmFyc19jb21tZW50Om0uc3RhcnRpbmdfd2l0aCgve3shLS0vKS51bnRpbF9hZnRlcigvLS19fS8pLGhhbmRsZWJhcnNfdW5lc2NhcGVkOm0uc3RhcnRpbmdfd2l0aCgve3t7LykudW50aWxfYWZ0ZXIoL319fS8pLGhhbmRsZWJhcnM6bS5zdGFydGluZ193aXRoKC97ey8pLnVudGlsX2FmdGVyKC99fS8pLHBocDptLnN0YXJ0aW5nX3dpdGgoLzxcPyg/Ols9IF18cGhwKS8pLnVudGlsX2FmdGVyKC9cPz4vKSxlcmI6bS5zdGFydGluZ193aXRoKC88JVteJV0vKS51bnRpbF9hZnRlcigvW14lXSU+LyksZGphbmdvOm0uc3RhcnRpbmdfd2l0aCgveyUvKS51bnRpbF9hZnRlcigvJX0vKSxkamFuZ29fdmFsdWU6bS5zdGFydGluZ193aXRoKC97ey8pLnVudGlsX2FmdGVyKC99fS8pLGRqYW5nb19jb21tZW50Om0uc3RhcnRpbmdfd2l0aCgveyMvKS51bnRpbF9hZnRlcigvI30vKSxzbWFydHk6bS5zdGFydGluZ193aXRoKC97KD89W159e1xzXG5dKS8pLnVudGlsX2FmdGVyKC9bXlxzXG5dfS8pLHNtYXJ0eV9jb21tZW50Om0uc3RhcnRpbmdfd2l0aCgve1wqLykudW50aWxfYWZ0ZXIoL1wqfS8pLHNtYXJ0eV9saXRlcmFsOm0uc3RhcnRpbmdfd2l0aCgve2xpdGVyYWx9LykudW50aWxfYWZ0ZXIoL3tcL2xpdGVyYWx9Lyl9fXUucHJvdG90eXBlPW5ldyBsLHUucHJvdG90eXBlLl9jcmVhdGU9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHUodGhpcy5faW5wdXQsdGhpcyl9LHUucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rpb24oKXt0aGlzLl9fc2V0X3RlbXBsYXRlZF9wYXR0ZXJuKCl9LHUucHJvdG90eXBlLmRpc2FibGU9ZnVuY3Rpb24oYyl7dmFyIGQ9dGhpcy5fY3JlYXRlKCk7cmV0dXJuIGQuX2Rpc2FibGVkW2NdPSEwLGQuX3VwZGF0ZSgpLGR9LHUucHJvdG90eXBlLnJlYWRfb3B0aW9ucz1mdW5jdGlvbihjKXt2YXIgZD10aGlzLl9jcmVhdGUoKTtmb3IodmFyIG0gaW4gbylkLl9kaXNhYmxlZFttXT1jLnRlbXBsYXRpbmcuaW5kZXhPZihtKT09PS0xO3JldHVybiBkLl91cGRhdGUoKSxkfSx1LnByb3RvdHlwZS5leGNsdWRlPWZ1bmN0aW9uKGMpe3ZhciBkPXRoaXMuX2NyZWF0ZSgpO3JldHVybiBkLl9leGNsdWRlZFtjXT0hMCxkLl91cGRhdGUoKSxkfSx1LnByb3RvdHlwZS5yZWFkPWZ1bmN0aW9uKCl7dmFyIGM9IiI7dGhpcy5fbWF0Y2hfcGF0dGVybj9jPXRoaXMuX2lucHV0LnJlYWQodGhpcy5fc3RhcnRpbmdfcGF0dGVybik6Yz10aGlzLl9pbnB1dC5yZWFkKHRoaXMuX3N0YXJ0aW5nX3BhdHRlcm4sdGhpcy5fX3RlbXBsYXRlX3BhdHRlcm4pO2Zvcih2YXIgZD10aGlzLl9yZWFkX3RlbXBsYXRlKCk7ZDspdGhpcy5fbWF0Y2hfcGF0dGVybj9kKz10aGlzLl9pbnB1dC5yZWFkKHRoaXMuX21hdGNoX3BhdHRlcm4pOmQrPXRoaXMuX2lucHV0LnJlYWRVbnRpbCh0aGlzLl9fdGVtcGxhdGVfcGF0dGVybiksYys9ZCxkPXRoaXMuX3JlYWRfdGVtcGxhdGUoKTtyZXR1cm4gdGhpcy5fdW50aWxfYWZ0ZXImJihjKz10aGlzLl9pbnB1dC5yZWFkVW50aWxBZnRlcih0aGlzLl91bnRpbF9wYXR0ZXJuKSksY30sdS5wcm90b3R5cGUuX19zZXRfdGVtcGxhdGVkX3BhdHRlcm49ZnVuY3Rpb24oKXt2YXIgYz1bXTt0aGlzLl9kaXNhYmxlZC5waHB8fGMucHVzaCh0aGlzLl9fcGF0dGVybnMucGhwLl9zdGFydGluZ19wYXR0ZXJuLnNvdXJjZSksdGhpcy5fZGlzYWJsZWQuaGFuZGxlYmFyc3x8Yy5wdXNoKHRoaXMuX19wYXR0ZXJucy5oYW5kbGViYXJzLl9zdGFydGluZ19wYXR0ZXJuLnNvdXJjZSksdGhpcy5fZGlzYWJsZWQuZXJifHxjLnB1c2godGhpcy5fX3BhdHRlcm5zLmVyYi5fc3RhcnRpbmdfcGF0dGVybi5zb3VyY2UpLHRoaXMuX2Rpc2FibGVkLmRqYW5nb3x8KGMucHVzaCh0aGlzLl9fcGF0dGVybnMuZGphbmdvLl9zdGFydGluZ19wYXR0ZXJuLnNvdXJjZSksYy5wdXNoKHRoaXMuX19wYXR0ZXJucy5kamFuZ29fdmFsdWUuX3N0YXJ0aW5nX3BhdHRlcm4uc291cmNlKSxjLnB1c2godGhpcy5fX3BhdHRlcm5zLmRqYW5nb19jb21tZW50Ll9zdGFydGluZ19wYXR0ZXJuLnNvdXJjZSkpLHRoaXMuX2Rpc2FibGVkLnNtYXJ0eXx8Yy5wdXNoKHRoaXMuX19wYXR0ZXJucy5zbWFydHkuX3N0YXJ0aW5nX3BhdHRlcm4uc291cmNlKSx0aGlzLl91bnRpbF9wYXR0ZXJuJiZjLnB1c2godGhpcy5fdW50aWxfcGF0dGVybi5zb3VyY2UpLHRoaXMuX190ZW1wbGF0ZV9wYXR0ZXJuPXRoaXMuX2lucHV0LmdldF9yZWdleHAoIig/OiIrYy5qb2luKCJ8IikrIikiKX0sdS5wcm90b3R5cGUuX3JlYWRfdGVtcGxhdGU9ZnVuY3Rpb24oKXt2YXIgYz0iIixkPXRoaXMuX2lucHV0LnBlZWsoKTtpZihkPT09IjwiKXt2YXIgbT10aGlzLl9pbnB1dC5wZWVrKDEpOyF0aGlzLl9kaXNhYmxlZC5waHAmJiF0aGlzLl9leGNsdWRlZC5waHAmJm09PT0iPyImJihjPWN8fHRoaXMuX19wYXR0ZXJucy5waHAucmVhZCgpKSwhdGhpcy5fZGlzYWJsZWQuZXJiJiYhdGhpcy5fZXhjbHVkZWQuZXJiJiZtPT09IiUiJiYoYz1jfHx0aGlzLl9fcGF0dGVybnMuZXJiLnJlYWQoKSl9ZWxzZSBkPT09InsiJiYoIXRoaXMuX2Rpc2FibGVkLmhhbmRsZWJhcnMmJiF0aGlzLl9leGNsdWRlZC5oYW5kbGViYXJzJiYoYz1jfHx0aGlzLl9fcGF0dGVybnMuaGFuZGxlYmFyc19jb21tZW50LnJlYWQoKSxjPWN8fHRoaXMuX19wYXR0ZXJucy5oYW5kbGViYXJzX3VuZXNjYXBlZC5yZWFkKCksYz1jfHx0aGlzLl9fcGF0dGVybnMuaGFuZGxlYmFycy5yZWFkKCkpLHRoaXMuX2Rpc2FibGVkLmRqYW5nb3x8KCF0aGlzLl9leGNsdWRlZC5kamFuZ28mJiF0aGlzLl9leGNsdWRlZC5oYW5kbGViYXJzJiYoYz1jfHx0aGlzLl9fcGF0dGVybnMuZGphbmdvX3ZhbHVlLnJlYWQoKSksdGhpcy5fZXhjbHVkZWQuZGphbmdvfHwoYz1jfHx0aGlzLl9fcGF0dGVybnMuZGphbmdvX2NvbW1lbnQucmVhZCgpLGM9Y3x8dGhpcy5fX3BhdHRlcm5zLmRqYW5nby5yZWFkKCkpKSx0aGlzLl9kaXNhYmxlZC5zbWFydHl8fHRoaXMuX2Rpc2FibGVkLmRqYW5nbyYmdGhpcy5fZGlzYWJsZWQuaGFuZGxlYmFycyYmKGM9Y3x8dGhpcy5fX3BhdHRlcm5zLnNtYXJ0eV9jb21tZW50LnJlYWQoKSxjPWN8fHRoaXMuX19wYXR0ZXJucy5zbWFydHlfbGl0ZXJhbC5yZWFkKCksYz1jfHx0aGlzLl9fcGF0dGVybnMuc21hcnR5LnJlYWQoKSkpO3JldHVybiBjfSxyLmV4cG9ydHMuVGVtcGxhdGFibGVQYXR0ZXJuPXV9LCwsLGZ1bmN0aW9uKHIscyxhKXt2YXIgbD1hKDE5KS5CZWF1dGlmaWVyLG89YSgyMCkuT3B0aW9ucztmdW5jdGlvbiB1KGMsZCxtLGYpe3ZhciBfPW5ldyBsKGMsZCxtLGYpO3JldHVybiBfLmJlYXV0aWZ5KCl9ci5leHBvcnRzPXUsci5leHBvcnRzLmRlZmF1bHRPcHRpb25zPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBvfX0sZnVuY3Rpb24ocixzLGEpe3ZhciBsPWEoMjApLk9wdGlvbnMsbz1hKDIpLk91dHB1dCx1PWEoMjEpLlRva2VuaXplcixjPWEoMjEpLlRPS0VOLGQ9L1xyXG58W1xyXG5dLyxtPS9cclxufFtcclxuXS9nLGY9ZnVuY3Rpb24oYixwKXt0aGlzLmluZGVudF9sZXZlbD0wLHRoaXMuYWxpZ25tZW50X3NpemU9MCx0aGlzLm1heF9wcmVzZXJ2ZV9uZXdsaW5lcz1iLm1heF9wcmVzZXJ2ZV9uZXdsaW5lcyx0aGlzLnByZXNlcnZlX25ld2xpbmVzPWIucHJlc2VydmVfbmV3bGluZXMsdGhpcy5fb3V0cHV0PW5ldyBvKGIscCl9O2YucHJvdG90eXBlLmN1cnJlbnRfbGluZV9oYXNfbWF0Y2g9ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMuX291dHB1dC5jdXJyZW50X2xpbmUuaGFzX21hdGNoKGIpfSxmLnByb3RvdHlwZS5zZXRfc3BhY2VfYmVmb3JlX3Rva2VuPWZ1bmN0aW9uKGIscCl7dGhpcy5fb3V0cHV0LnNwYWNlX2JlZm9yZV90b2tlbj1iLHRoaXMuX291dHB1dC5ub25fYnJlYWtpbmdfc3BhY2U9cH0sZi5wcm90b3R5cGUuc2V0X3dyYXBfcG9pbnQ9ZnVuY3Rpb24oKXt0aGlzLl9vdXRwdXQuc2V0X2luZGVudCh0aGlzLmluZGVudF9sZXZlbCx0aGlzLmFsaWdubWVudF9zaXplKSx0aGlzLl9vdXRwdXQuc2V0X3dyYXBfcG9pbnQoKX0sZi5wcm90b3R5cGUuYWRkX3Jhd190b2tlbj1mdW5jdGlvbihiKXt0aGlzLl9vdXRwdXQuYWRkX3Jhd190b2tlbihiKX0sZi5wcm90b3R5cGUucHJpbnRfcHJlc2VydmVkX25ld2xpbmVzPWZ1bmN0aW9uKGIpe3ZhciBwPTA7Yi50eXBlIT09Yy5URVhUJiZiLnByZXZpb3VzLnR5cGUhPT1jLlRFWFQmJihwPWIubmV3bGluZXM/MTowKSx0aGlzLnByZXNlcnZlX25ld2xpbmVzJiYocD1iLm5ld2xpbmVzPHRoaXMubWF4X3ByZXNlcnZlX25ld2xpbmVzKzE/Yi5uZXdsaW5lczp0aGlzLm1heF9wcmVzZXJ2ZV9uZXdsaW5lcysxKTtmb3IodmFyIHg9MDt4PHA7eCsrKXRoaXMucHJpbnRfbmV3bGluZSh4PjApO3JldHVybiBwIT09MH0sZi5wcm90b3R5cGUudHJhdmVyc2Vfd2hpdGVzcGFjZT1mdW5jdGlvbihiKXtyZXR1cm4gYi53aGl0ZXNwYWNlX2JlZm9yZXx8Yi5uZXdsaW5lcz8odGhpcy5wcmludF9wcmVzZXJ2ZWRfbmV3bGluZXMoYil8fCh0aGlzLl9vdXRwdXQuc3BhY2VfYmVmb3JlX3Rva2VuPSEwKSwhMCk6ITF9LGYucHJvdG90eXBlLnByZXZpb3VzX3Rva2VuX3dyYXBwZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fb3V0cHV0LnByZXZpb3VzX3Rva2VuX3dyYXBwZWR9LGYucHJvdG90eXBlLnByaW50X25ld2xpbmU9ZnVuY3Rpb24oYil7dGhpcy5fb3V0cHV0LmFkZF9uZXdfbGluZShiKX0sZi5wcm90b3R5cGUucHJpbnRfdG9rZW49ZnVuY3Rpb24oYil7Yi50ZXh0JiYodGhpcy5fb3V0cHV0LnNldF9pbmRlbnQodGhpcy5pbmRlbnRfbGV2ZWwsdGhpcy5hbGlnbm1lbnRfc2l6ZSksdGhpcy5fb3V0cHV0LmFkZF90b2tlbihiLnRleHQpKX0sZi5wcm90b3R5cGUuaW5kZW50PWZ1bmN0aW9uKCl7dGhpcy5pbmRlbnRfbGV2ZWwrK30sZi5wcm90b3R5cGUuZGVpbmRlbnQ9ZnVuY3Rpb24oKXt0aGlzLmluZGVudF9sZXZlbD4wJiYodGhpcy5pbmRlbnRfbGV2ZWwtLSx0aGlzLl9vdXRwdXQuc2V0X2luZGVudCh0aGlzLmluZGVudF9sZXZlbCx0aGlzLmFsaWdubWVudF9zaXplKSl9LGYucHJvdG90eXBlLmdldF9mdWxsX2luZGVudD1mdW5jdGlvbihiKXtyZXR1cm4gYj10aGlzLmluZGVudF9sZXZlbCsoYnx8MCksYjwxPyIiOnRoaXMuX291dHB1dC5nZXRfaW5kZW50X3N0cmluZyhiKX07dmFyIF89ZnVuY3Rpb24oYil7Zm9yKHZhciBwPW51bGwseD1iLm5leHQ7eC50eXBlIT09Yy5FT0YmJmIuY2xvc2VkIT09eDspe2lmKHgudHlwZT09PWMuQVRUUklCVVRFJiZ4LnRleHQ9PT0idHlwZSIpe3gubmV4dCYmeC5uZXh0LnR5cGU9PT1jLkVRVUFMUyYmeC5uZXh0Lm5leHQmJngubmV4dC5uZXh0LnR5cGU9PT1jLlZBTFVFJiYocD14Lm5leHQubmV4dC50ZXh0KTticmVha314PXgubmV4dH1yZXR1cm4gcH0sZz1mdW5jdGlvbihiLHApe3ZhciB4PW51bGwsVT1udWxsO3JldHVybiBwLmNsb3NlZD8oYj09PSJzY3JpcHQiP3g9InRleHQvamF2YXNjcmlwdCI6Yj09PSJzdHlsZSImJih4PSJ0ZXh0L2NzcyIpLHg9XyhwKXx8eCx4LnNlYXJjaCgidGV4dC9jc3MiKT4tMT9VPSJjc3MiOnguc2VhcmNoKC9tb2R1bGV8KCh0ZXh0fGFwcGxpY2F0aW9ufGRvam8pXC8oeC0pPyhqYXZhc2NyaXB0fGVjbWFzY3JpcHR8anNjcmlwdHxsaXZlc2NyaXB0fChsZFwrKT9qc29ufG1ldGhvZHxhc3BlY3QpKS8pPi0xP1U9ImphdmFzY3JpcHQiOnguc2VhcmNoKC8odGV4dHxhcHBsaWNhdGlvbnxkb2pvKVwvKHgtKT8oaHRtbCkvKT4tMT9VPSJodG1sIjp4LnNlYXJjaCgvdGVzdFwvbnVsbC8pPi0xJiYoVT0ibnVsbCIpLFUpOm51bGx9O2Z1bmN0aW9uIGsoYixwKXtyZXR1cm4gcC5pbmRleE9mKGIpIT09LTF9ZnVuY3Rpb24geShiLHAseCl7dGhpcy5wYXJlbnQ9Ynx8bnVsbCx0aGlzLnRhZz1wP3AudGFnX25hbWU6IiIsdGhpcy5pbmRlbnRfbGV2ZWw9eHx8MCx0aGlzLnBhcnNlcl90b2tlbj1wfHxudWxsfWZ1bmN0aW9uIHYoYil7dGhpcy5fcHJpbnRlcj1iLHRoaXMuX2N1cnJlbnRfZnJhbWU9bnVsbH12LnByb3RvdHlwZS5nZXRfcGFyc2VyX3Rva2VuPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2N1cnJlbnRfZnJhbWU/dGhpcy5fY3VycmVudF9mcmFtZS5wYXJzZXJfdG9rZW46bnVsbH0sdi5wcm90b3R5cGUucmVjb3JkX3RhZz1mdW5jdGlvbihiKXt2YXIgcD1uZXcgeSh0aGlzLl9jdXJyZW50X2ZyYW1lLGIsdGhpcy5fcHJpbnRlci5pbmRlbnRfbGV2ZWwpO3RoaXMuX2N1cnJlbnRfZnJhbWU9cH0sdi5wcm90b3R5cGUuX3RyeV9wb3BfZnJhbWU9ZnVuY3Rpb24oYil7dmFyIHA9bnVsbDtyZXR1cm4gYiYmKHA9Yi5wYXJzZXJfdG9rZW4sdGhpcy5fcHJpbnRlci5pbmRlbnRfbGV2ZWw9Yi5pbmRlbnRfbGV2ZWwsdGhpcy5fY3VycmVudF9mcmFtZT1iLnBhcmVudCkscH0sdi5wcm90b3R5cGUuX2dldF9mcmFtZT1mdW5jdGlvbihiLHApe2Zvcih2YXIgeD10aGlzLl9jdXJyZW50X2ZyYW1lO3gmJmIuaW5kZXhPZih4LnRhZyk9PT0tMTspe2lmKHAmJnAuaW5kZXhPZih4LnRhZykhPT0tMSl7eD1udWxsO2JyZWFrfXg9eC5wYXJlbnR9cmV0dXJuIHh9LHYucHJvdG90eXBlLnRyeV9wb3A9ZnVuY3Rpb24oYixwKXt2YXIgeD10aGlzLl9nZXRfZnJhbWUoW2JdLHApO3JldHVybiB0aGlzLl90cnlfcG9wX2ZyYW1lKHgpfSx2LnByb3RvdHlwZS5pbmRlbnRfdG9fdGFnPWZ1bmN0aW9uKGIpe3ZhciBwPXRoaXMuX2dldF9mcmFtZShiKTtwJiYodGhpcy5fcHJpbnRlci5pbmRlbnRfbGV2ZWw9cC5pbmRlbnRfbGV2ZWwpfTtmdW5jdGlvbiBFKGIscCx4LFUpe3RoaXMuX3NvdXJjZV90ZXh0PWJ8fCIiLHA9cHx8e30sdGhpcy5fanNfYmVhdXRpZnk9eCx0aGlzLl9jc3NfYmVhdXRpZnk9VSx0aGlzLl90YWdfc3RhY2s9bnVsbDt2YXIgTD1uZXcgbChwLCJodG1sIik7dGhpcy5fb3B0aW9ucz1MLHRoaXMuX2lzX3dyYXBfYXR0cmlidXRlc19mb3JjZT10aGlzLl9vcHRpb25zLndyYXBfYXR0cmlidXRlcy5zdWJzdHIoMCw1KT09PSJmb3JjZSIsdGhpcy5faXNfd3JhcF9hdHRyaWJ1dGVzX2ZvcmNlX2V4cGFuZF9tdWx0aWxpbmU9dGhpcy5fb3B0aW9ucy53cmFwX2F0dHJpYnV0ZXM9PT0iZm9yY2UtZXhwYW5kLW11bHRpbGluZSIsdGhpcy5faXNfd3JhcF9hdHRyaWJ1dGVzX2ZvcmNlX2FsaWduZWQ9dGhpcy5fb3B0aW9ucy53cmFwX2F0dHJpYnV0ZXM9PT0iZm9yY2UtYWxpZ25lZCIsdGhpcy5faXNfd3JhcF9hdHRyaWJ1dGVzX2FsaWduZWRfbXVsdGlwbGU9dGhpcy5fb3B0aW9ucy53cmFwX2F0dHJpYnV0ZXM9PT0iYWxpZ25lZC1tdWx0aXBsZSIsdGhpcy5faXNfd3JhcF9hdHRyaWJ1dGVzX3ByZXNlcnZlPXRoaXMuX29wdGlvbnMud3JhcF9hdHRyaWJ1dGVzLnN1YnN0cigwLDgpPT09InByZXNlcnZlIix0aGlzLl9pc193cmFwX2F0dHJpYnV0ZXNfcHJlc2VydmVfYWxpZ25lZD10aGlzLl9vcHRpb25zLndyYXBfYXR0cmlidXRlcz09PSJwcmVzZXJ2ZS1hbGlnbmVkIn1FLnByb3RvdHlwZS5iZWF1dGlmeT1mdW5jdGlvbigpe2lmKHRoaXMuX29wdGlvbnMuZGlzYWJsZWQpcmV0dXJuIHRoaXMuX3NvdXJjZV90ZXh0O3ZhciBiPXRoaXMuX3NvdXJjZV90ZXh0LHA9dGhpcy5fb3B0aW9ucy5lb2w7dGhpcy5fb3B0aW9ucy5lb2w9PT0iYXV0byImJihwPWAKYCxiJiZkLnRlc3QoYikmJihwPWIubWF0Y2goZClbMF0pKSxiPWIucmVwbGFjZShtLGAKYCk7dmFyIHg9Yi5tYXRjaCgvXltcdCBdKi8pWzBdLFU9e3RleHQ6IiIsdHlwZToiIn0sTD1uZXcgTSxUPW5ldyBmKHRoaXMuX29wdGlvbnMseCksUz1uZXcgdShiLHRoaXMuX29wdGlvbnMpLnRva2VuaXplKCk7dGhpcy5fdGFnX3N0YWNrPW5ldyB2KFQpO2Zvcih2YXIgdz1udWxsLEE9Uy5uZXh0KCk7QS50eXBlIT09Yy5FT0Y7KUEudHlwZT09PWMuVEFHX09QRU58fEEudHlwZT09PWMuQ09NTUVOVD8odz10aGlzLl9oYW5kbGVfdGFnX29wZW4oVCxBLEwsVSxTKSxMPXcpOkEudHlwZT09PWMuQVRUUklCVVRFfHxBLnR5cGU9PT1jLkVRVUFMU3x8QS50eXBlPT09Yy5WQUxVRXx8QS50eXBlPT09Yy5URVhUJiYhTC50YWdfY29tcGxldGU/dz10aGlzLl9oYW5kbGVfaW5zaWRlX3RhZyhULEEsTCxVKTpBLnR5cGU9PT1jLlRBR19DTE9TRT93PXRoaXMuX2hhbmRsZV90YWdfY2xvc2UoVCxBLEwpOkEudHlwZT09PWMuVEVYVD93PXRoaXMuX2hhbmRsZV90ZXh0KFQsQSxMKTpBLnR5cGU9PT1jLkNPTlRST0xfRkxPV19PUEVOP3c9dGhpcy5faGFuZGxlX2NvbnRyb2xfZmxvd19vcGVuKFQsQSk6QS50eXBlPT09Yy5DT05UUk9MX0ZMT1dfQ0xPU0U/dz10aGlzLl9oYW5kbGVfY29udHJvbF9mbG93X2Nsb3NlKFQsQSk6VC5hZGRfcmF3X3Rva2VuKEEpLFU9dyxBPVMubmV4dCgpO3ZhciBSPVQuX291dHB1dC5nZXRfY29kZShwKTtyZXR1cm4gUn0sRS5wcm90b3R5cGUuX2hhbmRsZV9jb250cm9sX2Zsb3dfb3Blbj1mdW5jdGlvbihiLHApe3ZhciB4PXt0ZXh0OnAudGV4dCx0eXBlOnAudHlwZX07cmV0dXJuIGIuc2V0X3NwYWNlX2JlZm9yZV90b2tlbihwLm5ld2xpbmVzfHxwLndoaXRlc3BhY2VfYmVmb3JlIT09IiIsITApLHAubmV3bGluZXM/Yi5wcmludF9wcmVzZXJ2ZWRfbmV3bGluZXMocCk6Yi5zZXRfc3BhY2VfYmVmb3JlX3Rva2VuKHAubmV3bGluZXN8fHAud2hpdGVzcGFjZV9iZWZvcmUhPT0iIiwhMCksYi5wcmludF90b2tlbihwKSxiLmluZGVudCgpLHh9LEUucHJvdG90eXBlLl9oYW5kbGVfY29udHJvbF9mbG93X2Nsb3NlPWZ1bmN0aW9uKGIscCl7dmFyIHg9e3RleHQ6cC50ZXh0LHR5cGU6cC50eXBlfTtyZXR1cm4gYi5kZWluZGVudCgpLHAubmV3bGluZXM/Yi5wcmludF9wcmVzZXJ2ZWRfbmV3bGluZXMocCk6Yi5zZXRfc3BhY2VfYmVmb3JlX3Rva2VuKHAubmV3bGluZXN8fHAud2hpdGVzcGFjZV9iZWZvcmUhPT0iIiwhMCksYi5wcmludF90b2tlbihwKSx4fSxFLnByb3RvdHlwZS5faGFuZGxlX3RhZ19jbG9zZT1mdW5jdGlvbihiLHAseCl7dmFyIFU9e3RleHQ6cC50ZXh0LHR5cGU6cC50eXBlfTtyZXR1cm4gYi5hbGlnbm1lbnRfc2l6ZT0wLHgudGFnX2NvbXBsZXRlPSEwLGIuc2V0X3NwYWNlX2JlZm9yZV90b2tlbihwLm5ld2xpbmVzfHxwLndoaXRlc3BhY2VfYmVmb3JlIT09IiIsITApLHguaXNfdW5mb3JtYXR0ZWQ/Yi5hZGRfcmF3X3Rva2VuKHApOih4LnRhZ19zdGFydF9jaGFyPT09IjwiJiYoYi5zZXRfc3BhY2VfYmVmb3JlX3Rva2VuKHAudGV4dFswXT09PSIvIiwhMCksdGhpcy5faXNfd3JhcF9hdHRyaWJ1dGVzX2ZvcmNlX2V4cGFuZF9tdWx0aWxpbmUmJnguaGFzX3dyYXBwZWRfYXR0cnMmJmIucHJpbnRfbmV3bGluZSghMSkpLGIucHJpbnRfdG9rZW4ocCkpLHguaW5kZW50X2NvbnRlbnQmJiEoeC5pc191bmZvcm1hdHRlZHx8eC5pc19jb250ZW50X3VuZm9ybWF0dGVkKSYmKGIuaW5kZW50KCkseC5pbmRlbnRfY29udGVudD0hMSksIXguaXNfaW5saW5lX2VsZW1lbnQmJiEoeC5pc191bmZvcm1hdHRlZHx8eC5pc19jb250ZW50X3VuZm9ybWF0dGVkKSYmYi5zZXRfd3JhcF9wb2ludCgpLFV9LEUucHJvdG90eXBlLl9oYW5kbGVfaW5zaWRlX3RhZz1mdW5jdGlvbihiLHAseCxVKXt2YXIgTD14Lmhhc193cmFwcGVkX2F0dHJzLFQ9e3RleHQ6cC50ZXh0LHR5cGU6cC50eXBlfTtyZXR1cm4gYi5zZXRfc3BhY2VfYmVmb3JlX3Rva2VuKHAubmV3bGluZXN8fHAud2hpdGVzcGFjZV9iZWZvcmUhPT0iIiwhMCkseC5pc191bmZvcm1hdHRlZD9iLmFkZF9yYXdfdG9rZW4ocCk6eC50YWdfc3RhcnRfY2hhcj09PSJ7IiYmcC50eXBlPT09Yy5URVhUP2IucHJpbnRfcHJlc2VydmVkX25ld2xpbmVzKHApPyhwLm5ld2xpbmVzPTAsYi5hZGRfcmF3X3Rva2VuKHApKTpiLnByaW50X3Rva2VuKHApOihwLnR5cGU9PT1jLkFUVFJJQlVURT9iLnNldF9zcGFjZV9iZWZvcmVfdG9rZW4oITApOihwLnR5cGU9PT1jLkVRVUFMU3x8cC50eXBlPT09Yy5WQUxVRSYmcC5wcmV2aW91cy50eXBlPT09Yy5FUVVBTFMpJiZiLnNldF9zcGFjZV9iZWZvcmVfdG9rZW4oITEpLHAudHlwZT09PWMuQVRUUklCVVRFJiZ4LnRhZ19zdGFydF9jaGFyPT09IjwiJiYoKHRoaXMuX2lzX3dyYXBfYXR0cmlidXRlc19wcmVzZXJ2ZXx8dGhpcy5faXNfd3JhcF9hdHRyaWJ1dGVzX3ByZXNlcnZlX2FsaWduZWQpJiYoYi50cmF2ZXJzZV93aGl0ZXNwYWNlKHApLEw9THx8cC5uZXdsaW5lcyE9PTApLHRoaXMuX2lzX3dyYXBfYXR0cmlidXRlc19mb3JjZSYmeC5hdHRyX2NvdW50Pj10aGlzLl9vcHRpb25zLndyYXBfYXR0cmlidXRlc19taW5fYXR0cnMmJihVLnR5cGUhPT1jLlRBR19PUEVOfHx0aGlzLl9pc193cmFwX2F0dHJpYnV0ZXNfZm9yY2VfZXhwYW5kX211bHRpbGluZSkmJihiLnByaW50X25ld2xpbmUoITEpLEw9ITApKSxiLnByaW50X3Rva2VuKHApLEw9THx8Yi5wcmV2aW91c190b2tlbl93cmFwcGVkKCkseC5oYXNfd3JhcHBlZF9hdHRycz1MKSxUfSxFLnByb3RvdHlwZS5faGFuZGxlX3RleHQ9ZnVuY3Rpb24oYixwLHgpe3ZhciBVPXt0ZXh0OnAudGV4dCx0eXBlOiJUS19DT05URU5UIn07cmV0dXJuIHguY3VzdG9tX2JlYXV0aWZpZXJfbmFtZT90aGlzLl9wcmludF9jdXN0b21fYmVhdGlmaWVyX3RleHQoYixwLHgpOnguaXNfdW5mb3JtYXR0ZWR8fHguaXNfY29udGVudF91bmZvcm1hdHRlZD9iLmFkZF9yYXdfdG9rZW4ocCk6KGIudHJhdmVyc2Vfd2hpdGVzcGFjZShwKSxiLnByaW50X3Rva2VuKHApKSxVfSxFLnByb3RvdHlwZS5fcHJpbnRfY3VzdG9tX2JlYXRpZmllcl90ZXh0PWZ1bmN0aW9uKGIscCx4KXt2YXIgVT10aGlzO2lmKHAudGV4dCE9PSIiKXt2YXIgTD1wLnRleHQsVCxTPTEsdz0iIixBPSIiO3guY3VzdG9tX2JlYXV0aWZpZXJfbmFtZT09PSJqYXZhc2NyaXB0IiYmdHlwZW9mIHRoaXMuX2pzX2JlYXV0aWZ5PT0iZnVuY3Rpb24iP1Q9dGhpcy5fanNfYmVhdXRpZnk6eC5jdXN0b21fYmVhdXRpZmllcl9uYW1lPT09ImNzcyImJnR5cGVvZiB0aGlzLl9jc3NfYmVhdXRpZnk9PSJmdW5jdGlvbiI/VD10aGlzLl9jc3NfYmVhdXRpZnk6eC5jdXN0b21fYmVhdXRpZmllcl9uYW1lPT09Imh0bWwiJiYoVD1mdW5jdGlvbihxLEope3ZhciBvZT1uZXcgRShxLEosVS5fanNfYmVhdXRpZnksVS5fY3NzX2JlYXV0aWZ5KTtyZXR1cm4gb2UuYmVhdXRpZnkoKX0pLHRoaXMuX29wdGlvbnMuaW5kZW50X3NjcmlwdHM9PT0ia2VlcCI/Uz0wOnRoaXMuX29wdGlvbnMuaW5kZW50X3NjcmlwdHM9PT0ic2VwYXJhdGUiJiYoUz0tYi5pbmRlbnRfbGV2ZWwpO3ZhciBSPWIuZ2V0X2Z1bGxfaW5kZW50KFMpO2lmKEw9TC5yZXBsYWNlKC9cblsgXHRdKiQvLCIiKSx4LmN1c3RvbV9iZWF1dGlmaWVyX25hbWUhPT0iaHRtbCImJkxbMF09PT0iPCImJkwubWF0Y2goL14oPCEtLXw8IVxbQ0RBVEFcWykvKSl7dmFyIEk9L14oPCEtLVteXG5dKnw8IVxbQ0RBVEFcWykoXG4/KShbIFx0XG5dKikoW1xzXFNdKikoLS0+fF1dPikkLy5leGVjKEwpO2lmKCFJKXtiLmFkZF9yYXdfdG9rZW4ocCk7cmV0dXJufXc9UitJWzFdK2AKYCxMPUlbNF0sSVs1XSYmKEE9UitJWzVdKSxMPUwucmVwbGFjZSgvXG5bIFx0XSokLywiIiksKElbMl18fElbM10uaW5kZXhPZihgCmApIT09LTEpJiYoST1JWzNdLm1hdGNoKC9bIFx0XSskLyksSSYmKHAud2hpdGVzcGFjZV9iZWZvcmU9SVswXSkpfWlmKEwpaWYoVCl7dmFyIEY9ZnVuY3Rpb24oKXt0aGlzLmVvbD1gCmB9O0YucHJvdG90eXBlPXRoaXMuX29wdGlvbnMucmF3X29wdGlvbnM7dmFyIEg9bmV3IEY7TD1UKFIrTCxIKX1lbHNle3ZhciBXPXAud2hpdGVzcGFjZV9iZWZvcmU7VyYmKEw9TC5yZXBsYWNlKG5ldyBSZWdFeHAoYAooYCtXKyIpPyIsImciKSxgCmApKSxMPVIrTC5yZXBsYWNlKC9cbi9nLGAKYCtSKX13JiYoTD9MPXcrTCtgCmArQTpMPXcrQSksYi5wcmludF9uZXdsaW5lKCExKSxMJiYocC50ZXh0PUwscC53aGl0ZXNwYWNlX2JlZm9yZT0iIixwLm5ld2xpbmVzPTAsYi5hZGRfcmF3X3Rva2VuKHApLGIucHJpbnRfbmV3bGluZSghMCkpfX0sRS5wcm90b3R5cGUuX2hhbmRsZV90YWdfb3Blbj1mdW5jdGlvbihiLHAseCxVLEwpe3ZhciBUPXRoaXMuX2dldF90YWdfb3Blbl90b2tlbihwKTtpZigoeC5pc191bmZvcm1hdHRlZHx8eC5pc19jb250ZW50X3VuZm9ybWF0dGVkKSYmIXguaXNfZW1wdHlfZWxlbWVudCYmcC50eXBlPT09Yy5UQUdfT1BFTiYmIVQuaXNfc3RhcnRfdGFnPyhiLmFkZF9yYXdfdG9rZW4ocCksVC5zdGFydF90YWdfdG9rZW49dGhpcy5fdGFnX3N0YWNrLnRyeV9wb3AoVC50YWdfbmFtZSkpOihiLnRyYXZlcnNlX3doaXRlc3BhY2UocCksdGhpcy5fc2V0X3RhZ19wb3NpdGlvbihiLHAsVCx4LFUpLFQuaXNfaW5saW5lX2VsZW1lbnR8fGIuc2V0X3dyYXBfcG9pbnQoKSxiLnByaW50X3Rva2VuKHApKSxULmlzX3N0YXJ0X3RhZyYmdGhpcy5faXNfd3JhcF9hdHRyaWJ1dGVzX2ZvcmNlKXt2YXIgUz0wLHc7ZG8gdz1MLnBlZWsoUyksdy50eXBlPT09Yy5BVFRSSUJVVEUmJihULmF0dHJfY291bnQrPTEpLFMrPTE7d2hpbGUody50eXBlIT09Yy5FT0YmJncudHlwZSE9PWMuVEFHX0NMT1NFKX1yZXR1cm4odGhpcy5faXNfd3JhcF9hdHRyaWJ1dGVzX2ZvcmNlX2FsaWduZWR8fHRoaXMuX2lzX3dyYXBfYXR0cmlidXRlc19hbGlnbmVkX211bHRpcGxlfHx0aGlzLl9pc193cmFwX2F0dHJpYnV0ZXNfcHJlc2VydmVfYWxpZ25lZCkmJihULmFsaWdubWVudF9zaXplPXAudGV4dC5sZW5ndGgrMSksIVQudGFnX2NvbXBsZXRlJiYhVC5pc191bmZvcm1hdHRlZCYmKGIuYWxpZ25tZW50X3NpemU9VC5hbGlnbm1lbnRfc2l6ZSksVH07dmFyIE09ZnVuY3Rpb24oYixwKXtpZih0aGlzLnBhcmVudD1ifHxudWxsLHRoaXMudGV4dD0iIix0aGlzLnR5cGU9IlRLX1RBR19PUEVOIix0aGlzLnRhZ19uYW1lPSIiLHRoaXMuaXNfaW5saW5lX2VsZW1lbnQ9ITEsdGhpcy5pc191bmZvcm1hdHRlZD0hMSx0aGlzLmlzX2NvbnRlbnRfdW5mb3JtYXR0ZWQ9ITEsdGhpcy5pc19lbXB0eV9lbGVtZW50PSExLHRoaXMuaXNfc3RhcnRfdGFnPSExLHRoaXMuaXNfZW5kX3RhZz0hMSx0aGlzLmluZGVudF9jb250ZW50PSExLHRoaXMubXVsdGlsaW5lX2NvbnRlbnQ9ITEsdGhpcy5jdXN0b21fYmVhdXRpZmllcl9uYW1lPW51bGwsdGhpcy5zdGFydF90YWdfdG9rZW49bnVsbCx0aGlzLmF0dHJfY291bnQ9MCx0aGlzLmhhc193cmFwcGVkX2F0dHJzPSExLHRoaXMuYWxpZ25tZW50X3NpemU9MCx0aGlzLnRhZ19jb21wbGV0ZT0hMSx0aGlzLnRhZ19zdGFydF9jaGFyPSIiLHRoaXMudGFnX2NoZWNrPSIiLCFwKXRoaXMudGFnX2NvbXBsZXRlPSEwO2Vsc2V7dmFyIHg7dGhpcy50YWdfc3RhcnRfY2hhcj1wLnRleHRbMF0sdGhpcy50ZXh0PXAudGV4dCx0aGlzLnRhZ19zdGFydF9jaGFyPT09IjwiPyh4PXAudGV4dC5tYXRjaCgvXjwoW15ccz5dKikvKSx0aGlzLnRhZ19jaGVjaz14P3hbMV06IiIpOih4PXAudGV4dC5tYXRjaCgvXnt7fj8oPzpbXF5dfCNcKj8pPyhbXlxzfV0rKS8pLHRoaXMudGFnX2NoZWNrPXg/eFsxXToiIiwocC50ZXh0LnN0YXJ0c1dpdGgoInt7Iz4iKXx8cC50ZXh0LnN0YXJ0c1dpdGgoInt7fiM+IikpJiZ0aGlzLnRhZ19jaGVja1swXT09PSI+IiYmKHRoaXMudGFnX2NoZWNrPT09Ij4iJiZwLm5leHQhPT1udWxsP3RoaXMudGFnX2NoZWNrPXAubmV4dC50ZXh0LnNwbGl0KCIgIilbMF06dGhpcy50YWdfY2hlY2s9cC50ZXh0LnNwbGl0KCI+IilbMV0pKSx0aGlzLnRhZ19jaGVjaz10aGlzLnRhZ19jaGVjay50b0xvd2VyQ2FzZSgpLHAudHlwZT09PWMuQ09NTUVOVCYmKHRoaXMudGFnX2NvbXBsZXRlPSEwKSx0aGlzLmlzX3N0YXJ0X3RhZz10aGlzLnRhZ19jaGVjay5jaGFyQXQoMCkhPT0iLyIsdGhpcy50YWdfbmFtZT10aGlzLmlzX3N0YXJ0X3RhZz90aGlzLnRhZ19jaGVjazp0aGlzLnRhZ19jaGVjay5zdWJzdHIoMSksdGhpcy5pc19lbmRfdGFnPSF0aGlzLmlzX3N0YXJ0X3RhZ3x8cC5jbG9zZWQmJnAuY2xvc2VkLnRleHQ9PT0iLz4iO3ZhciBVPTI7dGhpcy50YWdfc3RhcnRfY2hhcj09PSJ7IiYmdGhpcy50ZXh0Lmxlbmd0aD49MyYmdGhpcy50ZXh0LmNoYXJBdCgyKT09PSJ+IiYmKFU9MyksdGhpcy5pc19lbmRfdGFnPXRoaXMuaXNfZW5kX3RhZ3x8dGhpcy50YWdfc3RhcnRfY2hhcj09PSJ7IiYmKHRoaXMudGV4dC5sZW5ndGg8M3x8L1teI1xeXS8udGVzdCh0aGlzLnRleHQuY2hhckF0KFUpKSl9fTtFLnByb3RvdHlwZS5fZ2V0X3RhZ19vcGVuX3Rva2VuPWZ1bmN0aW9uKGIpe3ZhciBwPW5ldyBNKHRoaXMuX3RhZ19zdGFjay5nZXRfcGFyc2VyX3Rva2VuKCksYik7cmV0dXJuIHAuYWxpZ25tZW50X3NpemU9dGhpcy5fb3B0aW9ucy53cmFwX2F0dHJpYnV0ZXNfaW5kZW50X3NpemUscC5pc19lbmRfdGFnPXAuaXNfZW5kX3RhZ3x8ayhwLnRhZ19jaGVjayx0aGlzLl9vcHRpb25zLnZvaWRfZWxlbWVudHMpLHAuaXNfZW1wdHlfZWxlbWVudD1wLnRhZ19jb21wbGV0ZXx8cC5pc19zdGFydF90YWcmJnAuaXNfZW5kX3RhZyxwLmlzX3VuZm9ybWF0dGVkPSFwLnRhZ19jb21wbGV0ZSYmayhwLnRhZ19jaGVjayx0aGlzLl9vcHRpb25zLnVuZm9ybWF0dGVkKSxwLmlzX2NvbnRlbnRfdW5mb3JtYXR0ZWQ9IXAuaXNfZW1wdHlfZWxlbWVudCYmayhwLnRhZ19jaGVjayx0aGlzLl9vcHRpb25zLmNvbnRlbnRfdW5mb3JtYXR0ZWQpLHAuaXNfaW5saW5lX2VsZW1lbnQ9ayhwLnRhZ19uYW1lLHRoaXMuX29wdGlvbnMuaW5saW5lKXx8dGhpcy5fb3B0aW9ucy5pbmxpbmVfY3VzdG9tX2VsZW1lbnRzJiZwLnRhZ19uYW1lLmluY2x1ZGVzKCItIil8fHAudGFnX3N0YXJ0X2NoYXI9PT0ieyIscH0sRS5wcm90b3R5cGUuX3NldF90YWdfcG9zaXRpb249ZnVuY3Rpb24oYixwLHgsVSxMKXtpZih4LmlzX2VtcHR5X2VsZW1lbnR8fCh4LmlzX2VuZF90YWc/eC5zdGFydF90YWdfdG9rZW49dGhpcy5fdGFnX3N0YWNrLnRyeV9wb3AoeC50YWdfbmFtZSk6KHRoaXMuX2RvX29wdGlvbmFsX2VuZF9lbGVtZW50KHgpJiYoeC5pc19pbmxpbmVfZWxlbWVudHx8Yi5wcmludF9uZXdsaW5lKCExKSksdGhpcy5fdGFnX3N0YWNrLnJlY29yZF90YWcoeCksKHgudGFnX25hbWU9PT0ic2NyaXB0Inx8eC50YWdfbmFtZT09PSJzdHlsZSIpJiYhKHguaXNfdW5mb3JtYXR0ZWR8fHguaXNfY29udGVudF91bmZvcm1hdHRlZCkmJih4LmN1c3RvbV9iZWF1dGlmaWVyX25hbWU9Zyh4LnRhZ19jaGVjayxwKSkpKSxrKHgudGFnX2NoZWNrLHRoaXMuX29wdGlvbnMuZXh0cmFfbGluZXJzKSYmKGIucHJpbnRfbmV3bGluZSghMSksYi5fb3V0cHV0Lmp1c3RfYWRkZWRfYmxhbmtsaW5lKCl8fGIucHJpbnRfbmV3bGluZSghMCkpLHguaXNfZW1wdHlfZWxlbWVudCl7aWYoeC50YWdfc3RhcnRfY2hhcj09PSJ7IiYmeC50YWdfY2hlY2s9PT0iZWxzZSIpe3RoaXMuX3RhZ19zdGFjay5pbmRlbnRfdG9fdGFnKFsiaWYiLCJ1bmxlc3MiLCJlYWNoIl0pLHguaW5kZW50X2NvbnRlbnQ9ITA7dmFyIFQ9Yi5jdXJyZW50X2xpbmVfaGFzX21hdGNoKC97eyNpZi8pO1R8fGIucHJpbnRfbmV3bGluZSghMSl9eC50YWdfbmFtZT09PSIhLS0iJiZMLnR5cGU9PT1jLlRBR19DTE9TRSYmVS5pc19lbmRfdGFnJiZ4LnRleHQuaW5kZXhPZihgCmApPT09LTF8fCh4LmlzX2lubGluZV9lbGVtZW50fHx4LmlzX3VuZm9ybWF0dGVkfHxiLnByaW50X25ld2xpbmUoITEpLHRoaXMuX2NhbGNsdWF0ZV9wYXJlbnRfbXVsdGlsaW5lKGIseCkpfWVsc2UgaWYoeC5pc19lbmRfdGFnKXt2YXIgUz0hMTtTPXguc3RhcnRfdGFnX3Rva2VuJiZ4LnN0YXJ0X3RhZ190b2tlbi5tdWx0aWxpbmVfY29udGVudCxTPVN8fCF4LmlzX2lubGluZV9lbGVtZW50JiYhKFUuaXNfaW5saW5lX2VsZW1lbnR8fFUuaXNfdW5mb3JtYXR0ZWQpJiYhKEwudHlwZT09PWMuVEFHX0NMT1NFJiZ4LnN0YXJ0X3RhZ190b2tlbj09PVUpJiZMLnR5cGUhPT0iVEtfQ09OVEVOVCIsKHguaXNfY29udGVudF91bmZvcm1hdHRlZHx8eC5pc191bmZvcm1hdHRlZCkmJihTPSExKSxTJiZiLnByaW50X25ld2xpbmUoITEpfWVsc2UgeC5pbmRlbnRfY29udGVudD0heC5jdXN0b21fYmVhdXRpZmllcl9uYW1lLHgudGFnX3N0YXJ0X2NoYXI9PT0iPCImJih4LnRhZ19uYW1lPT09Imh0bWwiP3guaW5kZW50X2NvbnRlbnQ9dGhpcy5fb3B0aW9ucy5pbmRlbnRfaW5uZXJfaHRtbDp4LnRhZ19uYW1lPT09ImhlYWQiP3guaW5kZW50X2NvbnRlbnQ9dGhpcy5fb3B0aW9ucy5pbmRlbnRfaGVhZF9pbm5lcl9odG1sOngudGFnX25hbWU9PT0iYm9keSImJih4LmluZGVudF9jb250ZW50PXRoaXMuX29wdGlvbnMuaW5kZW50X2JvZHlfaW5uZXJfaHRtbCkpLCEoeC5pc19pbmxpbmVfZWxlbWVudHx8eC5pc191bmZvcm1hdHRlZCkmJihMLnR5cGUhPT0iVEtfQ09OVEVOVCJ8fHguaXNfY29udGVudF91bmZvcm1hdHRlZCkmJmIucHJpbnRfbmV3bGluZSghMSksdGhpcy5fY2FsY2x1YXRlX3BhcmVudF9tdWx0aWxpbmUoYix4KX0sRS5wcm90b3R5cGUuX2NhbGNsdWF0ZV9wYXJlbnRfbXVsdGlsaW5lPWZ1bmN0aW9uKGIscCl7cC5wYXJlbnQmJmIuX291dHB1dC5qdXN0X2FkZGVkX25ld2xpbmUoKSYmISgocC5pc19pbmxpbmVfZWxlbWVudHx8cC5pc191bmZvcm1hdHRlZCkmJnAucGFyZW50LmlzX2lubGluZV9lbGVtZW50KSYmKHAucGFyZW50Lm11bHRpbGluZV9jb250ZW50PSEwKX07dmFyIEQ9WyJhZGRyZXNzIiwiYXJ0aWNsZSIsImFzaWRlIiwiYmxvY2txdW90ZSIsImRldGFpbHMiLCJkaXYiLCJkbCIsImZpZWxkc2V0IiwiZmlnY2FwdGlvbiIsImZpZ3VyZSIsImZvb3RlciIsImZvcm0iLCJoMSIsImgyIiwiaDMiLCJoNCIsImg1IiwiaDYiLCJoZWFkZXIiLCJociIsIm1haW4iLCJtZW51IiwibmF2Iiwib2wiLCJwIiwicHJlIiwic2VjdGlvbiIsInRhYmxlIiwidWwiXSxOPVsiYSIsImF1ZGlvIiwiZGVsIiwiaW5zIiwibWFwIiwibm9zY3JpcHQiLCJ2aWRlbyJdO0UucHJvdG90eXBlLl9kb19vcHRpb25hbF9lbmRfZWxlbWVudD1mdW5jdGlvbihiKXt2YXIgcD1udWxsO2lmKCEoYi5pc19lbXB0eV9lbGVtZW50fHwhYi5pc19zdGFydF90YWd8fCFiLnBhcmVudCkpe2lmKGIudGFnX25hbWU9PT0iYm9keSIpcD1wfHx0aGlzLl90YWdfc3RhY2sudHJ5X3BvcCgiaGVhZCIpO2Vsc2UgaWYoYi50YWdfbmFtZT09PSJsaSIpcD1wfHx0aGlzLl90YWdfc3RhY2sudHJ5X3BvcCgibGkiLFsib2wiLCJ1bCIsIm1lbnUiXSk7ZWxzZSBpZihiLnRhZ19uYW1lPT09ImRkInx8Yi50YWdfbmFtZT09PSJkdCIpcD1wfHx0aGlzLl90YWdfc3RhY2sudHJ5X3BvcCgiZHQiLFsiZGwiXSkscD1wfHx0aGlzLl90YWdfc3RhY2sudHJ5X3BvcCgiZGQiLFsiZGwiXSk7ZWxzZSBpZihiLnBhcmVudC50YWdfbmFtZT09PSJwIiYmRC5pbmRleE9mKGIudGFnX25hbWUpIT09LTEpe3ZhciB4PWIucGFyZW50LnBhcmVudDsoIXh8fE4uaW5kZXhPZih4LnRhZ19uYW1lKT09PS0xKSYmKHA9cHx8dGhpcy5fdGFnX3N0YWNrLnRyeV9wb3AoInAiKSl9ZWxzZSBiLnRhZ19uYW1lPT09InJwInx8Yi50YWdfbmFtZT09PSJydCI/KHA9cHx8dGhpcy5fdGFnX3N0YWNrLnRyeV9wb3AoInJ0IixbInJ1YnkiLCJydGMiXSkscD1wfHx0aGlzLl90YWdfc3RhY2sudHJ5X3BvcCgicnAiLFsicnVieSIsInJ0YyJdKSk6Yi50YWdfbmFtZT09PSJvcHRncm91cCI/cD1wfHx0aGlzLl90YWdfc3RhY2sudHJ5X3BvcCgib3B0Z3JvdXAiLFsic2VsZWN0Il0pOmIudGFnX25hbWU9PT0ib3B0aW9uIj9wPXB8fHRoaXMuX3RhZ19zdGFjay50cnlfcG9wKCJvcHRpb24iLFsic2VsZWN0IiwiZGF0YWxpc3QiLCJvcHRncm91cCJdKTpiLnRhZ19uYW1lPT09ImNvbGdyb3VwIj9wPXB8fHRoaXMuX3RhZ19zdGFjay50cnlfcG9wKCJjYXB0aW9uIixbInRhYmxlIl0pOmIudGFnX25hbWU9PT0idGhlYWQiPyhwPXB8fHRoaXMuX3RhZ19zdGFjay50cnlfcG9wKCJjYXB0aW9uIixbInRhYmxlIl0pLHA9cHx8dGhpcy5fdGFnX3N0YWNrLnRyeV9wb3AoImNvbGdyb3VwIixbInRhYmxlIl0pKTpiLnRhZ19uYW1lPT09InRib2R5Inx8Yi50YWdfbmFtZT09PSJ0Zm9vdCI/KHA9cHx8dGhpcy5fdGFnX3N0YWNrLnRyeV9wb3AoImNhcHRpb24iLFsidGFibGUiXSkscD1wfHx0aGlzLl90YWdfc3RhY2sudHJ5X3BvcCgiY29sZ3JvdXAiLFsidGFibGUiXSkscD1wfHx0aGlzLl90YWdfc3RhY2sudHJ5X3BvcCgidGhlYWQiLFsidGFibGUiXSkscD1wfHx0aGlzLl90YWdfc3RhY2sudHJ5X3BvcCgidGJvZHkiLFsidGFibGUiXSkpOmIudGFnX25hbWU9PT0idHIiPyhwPXB8fHRoaXMuX3RhZ19zdGFjay50cnlfcG9wKCJjYXB0aW9uIixbInRhYmxlIl0pLHA9cHx8dGhpcy5fdGFnX3N0YWNrLnRyeV9wb3AoImNvbGdyb3VwIixbInRhYmxlIl0pLHA9cHx8dGhpcy5fdGFnX3N0YWNrLnRyeV9wb3AoInRyIixbInRhYmxlIiwidGhlYWQiLCJ0Ym9keSIsInRmb290Il0pKTooYi50YWdfbmFtZT09PSJ0aCJ8fGIudGFnX25hbWU9PT0idGQiKSYmKHA9cHx8dGhpcy5fdGFnX3N0YWNrLnRyeV9wb3AoInRkIixbInRhYmxlIiwidGhlYWQiLCJ0Ym9keSIsInRmb290IiwidHIiXSkscD1wfHx0aGlzLl90YWdfc3RhY2sudHJ5X3BvcCgidGgiLFsidGFibGUiLCJ0aGVhZCIsInRib2R5IiwidGZvb3QiLCJ0ciJdKSk7cmV0dXJuIGIucGFyZW50PXRoaXMuX3RhZ19zdGFjay5nZXRfcGFyc2VyX3Rva2VuKCkscH19LHIuZXhwb3J0cy5CZWF1dGlmaWVyPUV9LGZ1bmN0aW9uKHIscyxhKXt2YXIgbD1hKDYpLk9wdGlvbnM7ZnVuY3Rpb24gbyh1KXtsLmNhbGwodGhpcyx1LCJodG1sIiksdGhpcy50ZW1wbGF0aW5nLmxlbmd0aD09PTEmJnRoaXMudGVtcGxhdGluZ1swXT09PSJhdXRvIiYmKHRoaXMudGVtcGxhdGluZz1bImRqYW5nbyIsImVyYiIsImhhbmRsZWJhcnMiLCJwaHAiXSksdGhpcy5pbmRlbnRfaW5uZXJfaHRtbD10aGlzLl9nZXRfYm9vbGVhbigiaW5kZW50X2lubmVyX2h0bWwiKSx0aGlzLmluZGVudF9ib2R5X2lubmVyX2h0bWw9dGhpcy5fZ2V0X2Jvb2xlYW4oImluZGVudF9ib2R5X2lubmVyX2h0bWwiLCEwKSx0aGlzLmluZGVudF9oZWFkX2lubmVyX2h0bWw9dGhpcy5fZ2V0X2Jvb2xlYW4oImluZGVudF9oZWFkX2lubmVyX2h0bWwiLCEwKSx0aGlzLmluZGVudF9oYW5kbGViYXJzPXRoaXMuX2dldF9ib29sZWFuKCJpbmRlbnRfaGFuZGxlYmFycyIsITApLHRoaXMud3JhcF9hdHRyaWJ1dGVzPXRoaXMuX2dldF9zZWxlY3Rpb24oIndyYXBfYXR0cmlidXRlcyIsWyJhdXRvIiwiZm9yY2UiLCJmb3JjZS1hbGlnbmVkIiwiZm9yY2UtZXhwYW5kLW11bHRpbGluZSIsImFsaWduZWQtbXVsdGlwbGUiLCJwcmVzZXJ2ZSIsInByZXNlcnZlLWFsaWduZWQiXSksdGhpcy53cmFwX2F0dHJpYnV0ZXNfbWluX2F0dHJzPXRoaXMuX2dldF9udW1iZXIoIndyYXBfYXR0cmlidXRlc19taW5fYXR0cnMiLDIpLHRoaXMud3JhcF9hdHRyaWJ1dGVzX2luZGVudF9zaXplPXRoaXMuX2dldF9udW1iZXIoIndyYXBfYXR0cmlidXRlc19pbmRlbnRfc2l6ZSIsdGhpcy5pbmRlbnRfc2l6ZSksdGhpcy5leHRyYV9saW5lcnM9dGhpcy5fZ2V0X2FycmF5KCJleHRyYV9saW5lcnMiLFsiaGVhZCIsImJvZHkiLCIvaHRtbCJdKSx0aGlzLmlubGluZT10aGlzLl9nZXRfYXJyYXkoImlubGluZSIsWyJhIiwiYWJiciIsImFyZWEiLCJhdWRpbyIsImIiLCJiZGkiLCJiZG8iLCJiciIsImJ1dHRvbiIsImNhbnZhcyIsImNpdGUiLCJjb2RlIiwiZGF0YSIsImRhdGFsaXN0IiwiZGVsIiwiZGZuIiwiZW0iLCJlbWJlZCIsImkiLCJpZnJhbWUiLCJpbWciLCJpbnB1dCIsImlucyIsImtiZCIsImtleWdlbiIsImxhYmVsIiwibWFwIiwibWFyayIsIm1hdGgiLCJtZXRlciIsIm5vc2NyaXB0Iiwib2JqZWN0Iiwib3V0cHV0IiwicHJvZ3Jlc3MiLCJxIiwicnVieSIsInMiLCJzYW1wIiwic2VsZWN0Iiwic21hbGwiLCJzcGFuIiwic3Ryb25nIiwic3ViIiwic3VwIiwic3ZnIiwidGVtcGxhdGUiLCJ0ZXh0YXJlYSIsInRpbWUiLCJ1IiwidmFyIiwidmlkZW8iLCJ3YnIiLCJ0ZXh0IiwiYWNyb255bSIsImJpZyIsInN0cmlrZSIsInR0Il0pLHRoaXMuaW5saW5lX2N1c3RvbV9lbGVtZW50cz10aGlzLl9nZXRfYm9vbGVhbigiaW5saW5lX2N1c3RvbV9lbGVtZW50cyIsITApLHRoaXMudm9pZF9lbGVtZW50cz10aGlzLl9nZXRfYXJyYXkoInZvaWRfZWxlbWVudHMiLFsiYXJlYSIsImJhc2UiLCJiciIsImNvbCIsImVtYmVkIiwiaHIiLCJpbWciLCJpbnB1dCIsImtleWdlbiIsImxpbmsiLCJtZW51aXRlbSIsIm1ldGEiLCJwYXJhbSIsInNvdXJjZSIsInRyYWNrIiwid2JyIiwiIWRvY3R5cGUiLCI/eG1sIiwiYmFzZWZvbnQiLCJpc2luZGV4Il0pLHRoaXMudW5mb3JtYXR0ZWQ9dGhpcy5fZ2V0X2FycmF5KCJ1bmZvcm1hdHRlZCIsW10pLHRoaXMuY29udGVudF91bmZvcm1hdHRlZD10aGlzLl9nZXRfYXJyYXkoImNvbnRlbnRfdW5mb3JtYXR0ZWQiLFsicHJlIiwidGV4dGFyZWEiXSksdGhpcy51bmZvcm1hdHRlZF9jb250ZW50X2RlbGltaXRlcj10aGlzLl9nZXRfY2hhcmFjdGVycygidW5mb3JtYXR0ZWRfY29udGVudF9kZWxpbWl0ZXIiKSx0aGlzLmluZGVudF9zY3JpcHRzPXRoaXMuX2dldF9zZWxlY3Rpb24oImluZGVudF9zY3JpcHRzIixbIm5vcm1hbCIsImtlZXAiLCJzZXBhcmF0ZSJdKX1vLnByb3RvdHlwZT1uZXcgbCxyLmV4cG9ydHMuT3B0aW9ucz1vfSxmdW5jdGlvbihyLHMsYSl7dmFyIGw9YSg5KS5Ub2tlbml6ZXIsbz1hKDkpLlRPS0VOLHU9YSgxMykuRGlyZWN0aXZlcyxjPWEoMTQpLlRlbXBsYXRhYmxlUGF0dGVybixkPWEoMTIpLlBhdHRlcm4sbT17VEFHX09QRU46IlRLX1RBR19PUEVOIixUQUdfQ0xPU0U6IlRLX1RBR19DTE9TRSIsQ09OVFJPTF9GTE9XX09QRU46IlRLX0NPTlRST0xfRkxPV19PUEVOIixDT05UUk9MX0ZMT1dfQ0xPU0U6IlRLX0NPTlRST0xfRkxPV19DTE9TRSIsQVRUUklCVVRFOiJUS19BVFRSSUJVVEUiLEVRVUFMUzoiVEtfRVFVQUxTIixWQUxVRToiVEtfVkFMVUUiLENPTU1FTlQ6IlRLX0NPTU1FTlQiLFRFWFQ6IlRLX1RFWFQiLFVOS05PV046IlRLX1VOS05PV04iLFNUQVJUOm8uU1RBUlQsUkFXOm8uUkFXLEVPRjpvLkVPRn0sZj1uZXcgdSgvPFwhLS0vLC8tLT4vKSxfPWZ1bmN0aW9uKGcsayl7bC5jYWxsKHRoaXMsZyxrKSx0aGlzLl9jdXJyZW50X3RhZ19uYW1lPSIiO3ZhciB5PW5ldyBjKHRoaXMuX2lucHV0KS5yZWFkX29wdGlvbnModGhpcy5fb3B0aW9ucyksdj1uZXcgZCh0aGlzLl9pbnB1dCk7aWYodGhpcy5fX3BhdHRlcm5zPXt3b3JkOnkudW50aWwoL1tcblxyXHQgPF0vKSx3b3JkX2NvbnRyb2xfZmxvd19jbG9zZV9leGNsdWRlZDp5LnVudGlsKC9bXG5cclx0IDx9XS8pLHNpbmdsZV9xdW90ZTp5LnVudGlsX2FmdGVyKC8nLyksZG91YmxlX3F1b3RlOnkudW50aWxfYWZ0ZXIoLyIvKSxhdHRyaWJ1dGU6eS51bnRpbCgvW1xuXHJcdCA9Pl18XC8+LyksZWxlbWVudF9uYW1lOnkudW50aWwoL1tcblxyXHQgPlwvXS8pLGFuZ3VsYXJfY29udHJvbF9mbG93X3N0YXJ0OnYubWF0Y2hpbmcoL1xAW2EtekEtWl0rW14oe10qWyh7XS8pLGhhbmRsZWJhcnNfY29tbWVudDp2LnN0YXJ0aW5nX3dpdGgoL3t7IS0tLykudW50aWxfYWZ0ZXIoLy0tfX0vKSxoYW5kbGViYXJzOnYuc3RhcnRpbmdfd2l0aCgve3svKS51bnRpbF9hZnRlcigvfX0vKSxoYW5kbGViYXJzX29wZW46di51bnRpbCgvW1xuXHJcdCB9XS8pLGhhbmRsZWJhcnNfcmF3X2Nsb3NlOnYudW50aWwoL319LyksY29tbWVudDp2LnN0YXJ0aW5nX3dpdGgoLzwhLS0vKS51bnRpbF9hZnRlcigvLS0+LyksY2RhdGE6di5zdGFydGluZ193aXRoKC88IVxbQ0RBVEFcWy8pLnVudGlsX2FmdGVyKC9dXT4vKSxjb25kaXRpb25hbF9jb21tZW50OnYuc3RhcnRpbmdfd2l0aCgvPCFcWy8pLnVudGlsX2FmdGVyKC9dPi8pLHByb2Nlc3Npbmc6di5zdGFydGluZ193aXRoKC88XD8vKS51bnRpbF9hZnRlcigvXD8+Lyl9LHRoaXMuX29wdGlvbnMuaW5kZW50X2hhbmRsZWJhcnMmJih0aGlzLl9fcGF0dGVybnMud29yZD10aGlzLl9fcGF0dGVybnMud29yZC5leGNsdWRlKCJoYW5kbGViYXJzIiksdGhpcy5fX3BhdHRlcm5zLndvcmRfY29udHJvbF9mbG93X2Nsb3NlX2V4Y2x1ZGVkPXRoaXMuX19wYXR0ZXJucy53b3JkX2NvbnRyb2xfZmxvd19jbG9zZV9leGNsdWRlZC5leGNsdWRlKCJoYW5kbGViYXJzIikpLHRoaXMuX3VuZm9ybWF0dGVkX2NvbnRlbnRfZGVsaW1pdGVyPW51bGwsdGhpcy5fb3B0aW9ucy51bmZvcm1hdHRlZF9jb250ZW50X2RlbGltaXRlcil7dmFyIEU9dGhpcy5faW5wdXQuZ2V0X2xpdGVyYWxfcmVnZXhwKHRoaXMuX29wdGlvbnMudW5mb3JtYXR0ZWRfY29udGVudF9kZWxpbWl0ZXIpO3RoaXMuX19wYXR0ZXJucy51bmZvcm1hdHRlZF9jb250ZW50X2RlbGltaXRlcj12Lm1hdGNoaW5nKEUpLnVudGlsX2FmdGVyKEUpfX07Xy5wcm90b3R5cGU9bmV3IGwsXy5wcm90b3R5cGUuX2lzX2NvbW1lbnQ9ZnVuY3Rpb24oZyl7cmV0dXJuITF9LF8ucHJvdG90eXBlLl9pc19vcGVuaW5nPWZ1bmN0aW9uKGcpe3JldHVybiBnLnR5cGU9PT1tLlRBR19PUEVOfHxnLnR5cGU9PT1tLkNPTlRST0xfRkxPV19PUEVOfSxfLnByb3RvdHlwZS5faXNfY2xvc2luZz1mdW5jdGlvbihnLGspe3JldHVybiBnLnR5cGU9PT1tLlRBR19DTE9TRSYmayYmKChnLnRleHQ9PT0iPiJ8fGcudGV4dD09PSIvPiIpJiZrLnRleHRbMF09PT0iPCJ8fGcudGV4dD09PSJ9fSImJmsudGV4dFswXT09PSJ7IiYmay50ZXh0WzFdPT09InsiKXx8Zy50eXBlPT09bS5DT05UUk9MX0ZMT1dfQ0xPU0UmJmcudGV4dD09PSJ9IiYmay50ZXh0LmVuZHNXaXRoKCJ7Iil9LF8ucHJvdG90eXBlLl9yZXNldD1mdW5jdGlvbigpe3RoaXMuX2N1cnJlbnRfdGFnX25hbWU9IiJ9LF8ucHJvdG90eXBlLl9nZXRfbmV4dF90b2tlbj1mdW5jdGlvbihnLGspe3ZhciB5PW51bGw7dGhpcy5fcmVhZFdoaXRlc3BhY2UoKTt2YXIgdj10aGlzLl9pbnB1dC5wZWVrKCk7cmV0dXJuIHY9PT1udWxsP3RoaXMuX2NyZWF0ZV90b2tlbihtLkVPRiwiIik6KHk9eXx8dGhpcy5fcmVhZF9vcGVuX2hhbmRsZWJhcnModixrKSx5PXl8fHRoaXMuX3JlYWRfYXR0cmlidXRlKHYsZyxrKSx5PXl8fHRoaXMuX3JlYWRfY2xvc2UodixrKSx5PXl8fHRoaXMuX3JlYWRfY29udHJvbF9mbG93cyh2LGspLHk9eXx8dGhpcy5fcmVhZF9yYXdfY29udGVudCh2LGcsaykseT15fHx0aGlzLl9yZWFkX2NvbnRlbnRfd29yZCh2LGspLHk9eXx8dGhpcy5fcmVhZF9jb21tZW50X29yX2NkYXRhKHYpLHk9eXx8dGhpcy5fcmVhZF9wcm9jZXNzaW5nKHYpLHk9eXx8dGhpcy5fcmVhZF9vcGVuKHYsaykseT15fHx0aGlzLl9jcmVhdGVfdG9rZW4obS5VTktOT1dOLHRoaXMuX2lucHV0Lm5leHQoKSkseSl9LF8ucHJvdG90eXBlLl9yZWFkX2NvbW1lbnRfb3JfY2RhdGE9ZnVuY3Rpb24oZyl7dmFyIGs9bnVsbCx5PW51bGwsdj1udWxsO2lmKGc9PT0iPCIpe3ZhciBFPXRoaXMuX2lucHV0LnBlZWsoMSk7RT09PSIhIiYmKHk9dGhpcy5fX3BhdHRlcm5zLmNvbW1lbnQucmVhZCgpLHk/KHY9Zi5nZXRfZGlyZWN0aXZlcyh5KSx2JiZ2Lmlnbm9yZT09PSJzdGFydCImJih5Kz1mLnJlYWRJZ25vcmVkKHRoaXMuX2lucHV0KSkpOnk9dGhpcy5fX3BhdHRlcm5zLmNkYXRhLnJlYWQoKSkseSYmKGs9dGhpcy5fY3JlYXRlX3Rva2VuKG0uQ09NTUVOVCx5KSxrLmRpcmVjdGl2ZXM9dil9cmV0dXJuIGt9LF8ucHJvdG90eXBlLl9yZWFkX3Byb2Nlc3Npbmc9ZnVuY3Rpb24oZyl7dmFyIGs9bnVsbCx5PW51bGwsdj1udWxsO2lmKGc9PT0iPCIpe3ZhciBFPXRoaXMuX2lucHV0LnBlZWsoMSk7KEU9PT0iISJ8fEU9PT0iPyIpJiYoeT10aGlzLl9fcGF0dGVybnMuY29uZGl0aW9uYWxfY29tbWVudC5yZWFkKCkseT15fHx0aGlzLl9fcGF0dGVybnMucHJvY2Vzc2luZy5yZWFkKCkpLHkmJihrPXRoaXMuX2NyZWF0ZV90b2tlbihtLkNPTU1FTlQseSksay5kaXJlY3RpdmVzPXYpfXJldHVybiBrfSxfLnByb3RvdHlwZS5fcmVhZF9vcGVuPWZ1bmN0aW9uKGcsayl7dmFyIHk9bnVsbCx2PW51bGw7cmV0dXJuKCFrfHxrLnR5cGU9PT1tLkNPTlRST0xfRkxPV19PUEVOKSYmZz09PSI8IiYmKHk9dGhpcy5faW5wdXQubmV4dCgpLHRoaXMuX2lucHV0LnBlZWsoKT09PSIvIiYmKHkrPXRoaXMuX2lucHV0Lm5leHQoKSkseSs9dGhpcy5fX3BhdHRlcm5zLmVsZW1lbnRfbmFtZS5yZWFkKCksdj10aGlzLl9jcmVhdGVfdG9rZW4obS5UQUdfT1BFTix5KSksdn0sXy5wcm90b3R5cGUuX3JlYWRfb3Blbl9oYW5kbGViYXJzPWZ1bmN0aW9uKGcsayl7dmFyIHk9bnVsbCx2PW51bGw7cmV0dXJuKCFrfHxrLnR5cGU9PT1tLkNPTlRST0xfRkxPV19PUEVOKSYmdGhpcy5fb3B0aW9ucy5pbmRlbnRfaGFuZGxlYmFycyYmZz09PSJ7IiYmdGhpcy5faW5wdXQucGVlaygxKT09PSJ7IiYmKHRoaXMuX2lucHV0LnBlZWsoMik9PT0iISI/KHk9dGhpcy5fX3BhdHRlcm5zLmhhbmRsZWJhcnNfY29tbWVudC5yZWFkKCkseT15fHx0aGlzLl9fcGF0dGVybnMuaGFuZGxlYmFycy5yZWFkKCksdj10aGlzLl9jcmVhdGVfdG9rZW4obS5DT01NRU5ULHkpKTooeT10aGlzLl9fcGF0dGVybnMuaGFuZGxlYmFyc19vcGVuLnJlYWQoKSx2PXRoaXMuX2NyZWF0ZV90b2tlbihtLlRBR19PUEVOLHkpKSksdn0sXy5wcm90b3R5cGUuX3JlYWRfY29udHJvbF9mbG93cz1mdW5jdGlvbihnLGspe3ZhciB5PSIiLHY9bnVsbDtpZighdGhpcy5fb3B0aW9ucy50ZW1wbGF0aW5nLmluY2x1ZGVzKCJhbmd1bGFyIil8fCF0aGlzLl9vcHRpb25zLmluZGVudF9oYW5kbGViYXJzKXJldHVybiB2O2lmKGc9PT0iQCIpe2lmKHk9dGhpcy5fX3BhdHRlcm5zLmFuZ3VsYXJfY29udHJvbF9mbG93X3N0YXJ0LnJlYWQoKSx5PT09IiIpcmV0dXJuIHY7Zm9yKHZhciBFPXkuZW5kc1dpdGgoIigiKT8xOjAsTT0wOyEoeS5lbmRzV2l0aCgieyIpJiZFPT09TSk7KXt2YXIgRD10aGlzLl9pbnB1dC5uZXh0KCk7aWYoRD09PW51bGwpYnJlYWs7RD09PSIoIj9FKys6RD09PSIpIiYmTSsrLHkrPUR9dj10aGlzLl9jcmVhdGVfdG9rZW4obS5DT05UUk9MX0ZMT1dfT1BFTix5KX1lbHNlIGc9PT0ifSImJmsmJmsudHlwZT09PW0uQ09OVFJPTF9GTE9XX09QRU4mJih5PXRoaXMuX2lucHV0Lm5leHQoKSx2PXRoaXMuX2NyZWF0ZV90b2tlbihtLkNPTlRST0xfRkxPV19DTE9TRSx5KSk7cmV0dXJuIHZ9LF8ucHJvdG90eXBlLl9yZWFkX2Nsb3NlPWZ1bmN0aW9uKGcsayl7dmFyIHk9bnVsbCx2PW51bGw7cmV0dXJuIGsmJmsudHlwZT09PW0uVEFHX09QRU4mJihrLnRleHRbMF09PT0iPCImJihnPT09Ij4ifHxnPT09Ii8iJiZ0aGlzLl9pbnB1dC5wZWVrKDEpPT09Ij4iKT8oeT10aGlzLl9pbnB1dC5uZXh0KCksZz09PSIvIiYmKHkrPXRoaXMuX2lucHV0Lm5leHQoKSksdj10aGlzLl9jcmVhdGVfdG9rZW4obS5UQUdfQ0xPU0UseSkpOmsudGV4dFswXT09PSJ7IiYmZz09PSJ9IiYmdGhpcy5faW5wdXQucGVlaygxKT09PSJ9IiYmKHRoaXMuX2lucHV0Lm5leHQoKSx0aGlzLl9pbnB1dC5uZXh0KCksdj10aGlzLl9jcmVhdGVfdG9rZW4obS5UQUdfQ0xPU0UsIn19IikpKSx2fSxfLnByb3RvdHlwZS5fcmVhZF9hdHRyaWJ1dGU9ZnVuY3Rpb24oZyxrLHkpe3ZhciB2PW51bGwsRT0iIjtpZih5JiZ5LnRleHRbMF09PT0iPCIpaWYoZz09PSI9Iil2PXRoaXMuX2NyZWF0ZV90b2tlbihtLkVRVUFMUyx0aGlzLl9pbnB1dC5uZXh0KCkpO2Vsc2UgaWYoZz09PSciJ3x8Zz09PSInIil7dmFyIE09dGhpcy5faW5wdXQubmV4dCgpO2c9PT0nIic/TSs9dGhpcy5fX3BhdHRlcm5zLmRvdWJsZV9xdW90ZS5yZWFkKCk6TSs9dGhpcy5fX3BhdHRlcm5zLnNpbmdsZV9xdW90ZS5yZWFkKCksdj10aGlzLl9jcmVhdGVfdG9rZW4obS5WQUxVRSxNKX1lbHNlIEU9dGhpcy5fX3BhdHRlcm5zLmF0dHJpYnV0ZS5yZWFkKCksRSYmKGsudHlwZT09PW0uRVFVQUxTP3Y9dGhpcy5fY3JlYXRlX3Rva2VuKG0uVkFMVUUsRSk6dj10aGlzLl9jcmVhdGVfdG9rZW4obS5BVFRSSUJVVEUsRSkpO3JldHVybiB2fSxfLnByb3RvdHlwZS5faXNfY29udGVudF91bmZvcm1hdHRlZD1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5fb3B0aW9ucy52b2lkX2VsZW1lbnRzLmluZGV4T2YoZyk9PT0tMSYmKHRoaXMuX29wdGlvbnMuY29udGVudF91bmZvcm1hdHRlZC5pbmRleE9mKGcpIT09LTF8fHRoaXMuX29wdGlvbnMudW5mb3JtYXR0ZWQuaW5kZXhPZihnKSE9PS0xKX0sXy5wcm90b3R5cGUuX3JlYWRfcmF3X2NvbnRlbnQ9ZnVuY3Rpb24oZyxrLHkpe3ZhciB2PSIiO2lmKHkmJnkudGV4dFswXT09PSJ7Iil2PXRoaXMuX19wYXR0ZXJucy5oYW5kbGViYXJzX3Jhd19jbG9zZS5yZWFkKCk7ZWxzZSBpZihrLnR5cGU9PT1tLlRBR19DTE9TRSYmay5vcGVuZWQudGV4dFswXT09PSI8IiYmay50ZXh0WzBdIT09Ii8iKXt2YXIgRT1rLm9wZW5lZC50ZXh0LnN1YnN0cigxKS50b0xvd2VyQ2FzZSgpO2lmKEU9PT0ic2NyaXB0Inx8RT09PSJzdHlsZSIpe3ZhciBNPXRoaXMuX3JlYWRfY29tbWVudF9vcl9jZGF0YShnKTtpZihNKXJldHVybiBNLnR5cGU9bS5URVhULE07dj10aGlzLl9pbnB1dC5yZWFkVW50aWwobmV3IFJlZ0V4cCgiPC8iK0UrIltcXG5cXHJcXHQgXSo/PiIsImlnIikpfWVsc2UgdGhpcy5faXNfY29udGVudF91bmZvcm1hdHRlZChFKSYmKHY9dGhpcy5faW5wdXQucmVhZFVudGlsKG5ldyBSZWdFeHAoIjwvIitFKyJbXFxuXFxyXFx0IF0qPz4iLCJpZyIpKSl9cmV0dXJuIHY/dGhpcy5fY3JlYXRlX3Rva2VuKG0uVEVYVCx2KTpudWxsfSxfLnByb3RvdHlwZS5fcmVhZF9jb250ZW50X3dvcmQ9ZnVuY3Rpb24oZyxrKXt2YXIgeT0iIjtpZih0aGlzLl9vcHRpb25zLnVuZm9ybWF0dGVkX2NvbnRlbnRfZGVsaW1pdGVyJiZnPT09dGhpcy5fb3B0aW9ucy51bmZvcm1hdHRlZF9jb250ZW50X2RlbGltaXRlclswXSYmKHk9dGhpcy5fX3BhdHRlcm5zLnVuZm9ybWF0dGVkX2NvbnRlbnRfZGVsaW1pdGVyLnJlYWQoKSkseXx8KHk9ayYmay50eXBlPT09bS5DT05UUk9MX0ZMT1dfT1BFTj90aGlzLl9fcGF0dGVybnMud29yZF9jb250cm9sX2Zsb3dfY2xvc2VfZXhjbHVkZWQucmVhZCgpOnRoaXMuX19wYXR0ZXJucy53b3JkLnJlYWQoKSkseSlyZXR1cm4gdGhpcy5fY3JlYXRlX3Rva2VuKG0uVEVYVCx5KX0sci5leHBvcnRzLlRva2VuaXplcj1fLHIuZXhwb3J0cy5UT0tFTj1tfV0sdD17fTtmdW5jdGlvbiBuKHIpe3ZhciBzPXRbcl07aWYocyE9PXZvaWQgMClyZXR1cm4gcy5leHBvcnRzO3ZhciBhPXRbcl09e2V4cG9ydHM6e319O3JldHVybiBlW3JdKGEsYS5leHBvcnRzLG4pLGEuZXhwb3J0c312YXIgaT1uKDE4KTthbz1pfSkoKTtmdW5jdGlvbiBVYyhlLHQpe3JldHVybiBhbyhlLHQsSWMsemMpfWZ1bmN0aW9uIEhjKGUsdCxuKXtsZXQgaT1lLmdldFRleHQoKSxyPSEwLHM9MDtjb25zdCBhPW4udGFiU2l6ZXx8NDtpZih0KXtsZXQgdT1lLm9mZnNldEF0KHQuc3RhcnQpLGM9dTtmb3IoO2M+MCYmbG8oaSxjLTEpOyljLS07Yz09PTB8fG9vKGksYy0xKT91PWM6Yzx1JiYodT1jKzEpO2xldCBkPWUub2Zmc2V0QXQodC5lbmQpLG09ZDtmb3IoO208aS5sZW5ndGgmJmxvKGksbSk7KW0rKzsobT09PWkubGVuZ3RofHxvbyhpLG0pKSYmKGQ9bSksdD0kLmNyZWF0ZShlLnBvc2l0aW9uQXQodSksZS5wb3NpdGlvbkF0KGQpKTtjb25zdCBmPWkuc3Vic3RyaW5nKDAsdSk7aWYobmV3IFJlZ0V4cCgvLipbPF1bXj5dKiQvKS50ZXN0KGYpKXJldHVybiBpPWkuc3Vic3RyaW5nKHUsZCksW3tyYW5nZTp0LG5ld1RleHQ6aX1dO2lmKHI9ZD09PWkubGVuZ3RoLGk9aS5zdWJzdHJpbmcodSxkKSx1IT09MCl7Y29uc3QgXz1lLm9mZnNldEF0KHJlLmNyZWF0ZSh0LnN0YXJ0LmxpbmUsMCkpO3M9UGMoZS5nZXRUZXh0KCksXyxuKX19ZWxzZSB0PSQuY3JlYXRlKHJlLmNyZWF0ZSgwLDApLGUucG9zaXRpb25BdChpLmxlbmd0aCkpO2NvbnN0IGw9e2luZGVudF9zaXplOmEsaW5kZW50X2NoYXI6bi5pbnNlcnRTcGFjZXM/IiAiOiIJIixpbmRlbnRfZW1wdHlfbGluZXM6X2UobiwiaW5kZW50RW1wdHlMaW5lcyIsITEpLHdyYXBfbGluZV9sZW5ndGg6X2Uobiwid3JhcExpbmVMZW5ndGgiLDEyMCksdW5mb3JtYXR0ZWQ6emkobiwidW5mb3JtYXR0ZWQiLHZvaWQgMCksY29udGVudF91bmZvcm1hdHRlZDp6aShuLCJjb250ZW50VW5mb3JtYXR0ZWQiLHZvaWQgMCksaW5kZW50X2lubmVyX2h0bWw6X2UobiwiaW5kZW50SW5uZXJIdG1sIiwhMSkscHJlc2VydmVfbmV3bGluZXM6X2UobiwicHJlc2VydmVOZXdMaW5lcyIsITApLG1heF9wcmVzZXJ2ZV9uZXdsaW5lczpfZShuLCJtYXhQcmVzZXJ2ZU5ld0xpbmVzIiwzMjc4NiksaW5kZW50X2hhbmRsZWJhcnM6X2UobiwiaW5kZW50SGFuZGxlYmFycyIsITEpLGVuZF93aXRoX25ld2xpbmU6ciYmX2UobiwiZW5kV2l0aE5ld2xpbmUiLCExKSxleHRyYV9saW5lcnM6emkobiwiZXh0cmFMaW5lcnMiLHZvaWQgMCksd3JhcF9hdHRyaWJ1dGVzOl9lKG4sIndyYXBBdHRyaWJ1dGVzIiwiYXV0byIpLHdyYXBfYXR0cmlidXRlc19pbmRlbnRfc2l6ZTpfZShuLCJ3cmFwQXR0cmlidXRlc0luZGVudFNpemUiLHZvaWQgMCksZW9sOmAKYCxpbmRlbnRfc2NyaXB0czpfZShuLCJpbmRlbnRTY3JpcHRzIiwibm9ybWFsIiksdGVtcGxhdGluZzpGYyhuLCJhbGwiKSx1bmZvcm1hdHRlZF9jb250ZW50X2RlbGltaXRlcjpfZShuLCJ1bmZvcm1hdHRlZENvbnRlbnREZWxpbWl0ZXIiLCIiKX07bGV0IG89VWMoV2MoaSksbCk7aWYocz4wKXtjb25zdCB1PW4uaW5zZXJ0U3BhY2VzP25vKCIgIixhKnMpOm5vKCIJIixzKTtvPW8uc3BsaXQoYApgKS5qb2luKGAKYCt1KSx0LnN0YXJ0LmNoYXJhY3Rlcj09PTAmJihvPXUrbyl9cmV0dXJuW3tyYW5nZTp0LG5ld1RleHQ6b31dfWZ1bmN0aW9uIFdjKGUpe3JldHVybiBlLnJlcGxhY2UoL15ccysvLCIiKX1mdW5jdGlvbiBfZShlLHQsbil7aWYoZSYmZS5oYXNPd25Qcm9wZXJ0eSh0KSl7Y29uc3QgaT1lW3RdO2lmKGkhPT1udWxsKXJldHVybiBpfXJldHVybiBufWZ1bmN0aW9uIHppKGUsdCxuKXtjb25zdCBpPV9lKGUsdCxudWxsKTtyZXR1cm4gdHlwZW9mIGk9PSJzdHJpbmciP2kubGVuZ3RoPjA/aS5zcGxpdCgiLCIpLm1hcChyPT5yLnRyaW0oKS50b0xvd2VyQ2FzZSgpKTpbXTpufWZ1bmN0aW9uIEZjKGUsdCl7Y29uc3Qgbj1fZShlLCJ0ZW1wbGF0aW5nIix0KTtyZXR1cm4gbj09PSEwP1siYXV0byJdOm49PT0hMXx8bj09PXR8fEFycmF5LmlzQXJyYXkobik9PT0hMT9bIm5vbmUiXTpufWZ1bmN0aW9uIFBjKGUsdCxuKXtsZXQgaT10LHI9MDtjb25zdCBzPW4udGFiU2l6ZXx8NDtmb3IoO2k8ZS5sZW5ndGg7KXtjb25zdCBhPWUuY2hhckF0KGkpO2lmKGE9PT0iICIpcisrO2Vsc2UgaWYoYT09PSIJIilyKz1zO2Vsc2UgYnJlYWs7aSsrfXJldHVybiBNYXRoLmZsb29yKHIvcyl9ZnVuY3Rpb24gb28oZSx0KXtyZXR1cm5gXHIKYC5pbmRleE9mKGUuY2hhckF0KHQpKSE9PS0xfWZ1bmN0aW9uIGxvKGUsdCl7cmV0dXJuIiAJIi5pbmRleE9mKGUuY2hhckF0KHQpKSE9PS0xfXZhciB1bzsoKCk9Pnt2YXIgZT17NDcwOnI9PntmdW5jdGlvbiBzKG8pe2lmKHR5cGVvZiBvIT0ic3RyaW5nIil0aHJvdyBuZXcgVHlwZUVycm9yKCJQYXRoIG11c3QgYmUgYSBzdHJpbmcuIFJlY2VpdmVkICIrSlNPTi5zdHJpbmdpZnkobykpfWZ1bmN0aW9uIGEobyx1KXtmb3IodmFyIGMsZD0iIixtPTAsZj0tMSxfPTAsZz0wO2c8PW8ubGVuZ3RoOysrZyl7aWYoZzxvLmxlbmd0aCljPW8uY2hhckNvZGVBdChnKTtlbHNle2lmKGM9PT00NylicmVhaztjPTQ3fWlmKGM9PT00Nyl7aWYoIShmPT09Zy0xfHxfPT09MSkpaWYoZiE9PWctMSYmXz09PTIpe2lmKGQubGVuZ3RoPDJ8fG0hPT0yfHxkLmNoYXJDb2RlQXQoZC5sZW5ndGgtMSkhPT00Nnx8ZC5jaGFyQ29kZUF0KGQubGVuZ3RoLTIpIT09NDYpe2lmKGQubGVuZ3RoPjIpe3ZhciBrPWQubGFzdEluZGV4T2YoIi8iKTtpZihrIT09ZC5sZW5ndGgtMSl7az09PS0xPyhkPSIiLG09MCk6bT0oZD1kLnNsaWNlKDAsaykpLmxlbmd0aC0xLWQubGFzdEluZGV4T2YoIi8iKSxmPWcsXz0wO2NvbnRpbnVlfX1lbHNlIGlmKGQubGVuZ3RoPT09Mnx8ZC5sZW5ndGg9PT0xKXtkPSIiLG09MCxmPWcsXz0wO2NvbnRpbnVlfX11JiYoZC5sZW5ndGg+MD9kKz0iLy4uIjpkPSIuLiIsbT0yKX1lbHNlIGQubGVuZ3RoPjA/ZCs9Ii8iK28uc2xpY2UoZisxLGcpOmQ9by5zbGljZShmKzEsZyksbT1nLWYtMTtmPWcsXz0wfWVsc2UgYz09PTQ2JiZfIT09LTE/KytfOl89LTF9cmV0dXJuIGR9dmFyIGw9e3Jlc29sdmU6ZnVuY3Rpb24oKXtmb3IodmFyIG8sdT0iIixjPSExLGQ9YXJndW1lbnRzLmxlbmd0aC0xO2Q+PS0xJiYhYztkLS0pe3ZhciBtO2Q+PTA/bT1hcmd1bWVudHNbZF06KG89PT12b2lkIDAmJihvPXByb2Nlc3MuY3dkKCkpLG09bykscyhtKSxtLmxlbmd0aCE9PTAmJih1PW0rIi8iK3UsYz1tLmNoYXJDb2RlQXQoMCk9PT00Nyl9cmV0dXJuIHU9YSh1LCFjKSxjP3UubGVuZ3RoPjA/Ii8iK3U6Ii8iOnUubGVuZ3RoPjA/dToiLiJ9LG5vcm1hbGl6ZTpmdW5jdGlvbihvKXtpZihzKG8pLG8ubGVuZ3RoPT09MClyZXR1cm4iLiI7dmFyIHU9by5jaGFyQ29kZUF0KDApPT09NDcsYz1vLmNoYXJDb2RlQXQoby5sZW5ndGgtMSk9PT00NztyZXR1cm4obz1hKG8sIXUpKS5sZW5ndGghPT0wfHx1fHwobz0iLiIpLG8ubGVuZ3RoPjAmJmMmJihvKz0iLyIpLHU/Ii8iK286b30saXNBYnNvbHV0ZTpmdW5jdGlvbihvKXtyZXR1cm4gcyhvKSxvLmxlbmd0aD4wJiZvLmNoYXJDb2RlQXQoMCk9PT00N30sam9pbjpmdW5jdGlvbigpe2lmKGFyZ3VtZW50cy5sZW5ndGg9PT0wKXJldHVybiIuIjtmb3IodmFyIG8sdT0wO3U8YXJndW1lbnRzLmxlbmd0aDsrK3Upe3ZhciBjPWFyZ3VtZW50c1t1XTtzKGMpLGMubGVuZ3RoPjAmJihvPT09dm9pZCAwP289YzpvKz0iLyIrYyl9cmV0dXJuIG89PT12b2lkIDA/Ii4iOmwubm9ybWFsaXplKG8pfSxyZWxhdGl2ZTpmdW5jdGlvbihvLHUpe2lmKHMobykscyh1KSxvPT09dXx8KG89bC5yZXNvbHZlKG8pKT09PSh1PWwucmVzb2x2ZSh1KSkpcmV0dXJuIiI7Zm9yKHZhciBjPTE7YzxvLmxlbmd0aCYmby5jaGFyQ29kZUF0KGMpPT09NDc7KytjKTtmb3IodmFyIGQ9by5sZW5ndGgsbT1kLWMsZj0xO2Y8dS5sZW5ndGgmJnUuY2hhckNvZGVBdChmKT09PTQ3OysrZik7Zm9yKHZhciBfPXUubGVuZ3RoLWYsZz1tPF8/bTpfLGs9LTEseT0wO3k8PWc7Kyt5KXtpZih5PT09Zyl7aWYoXz5nKXtpZih1LmNoYXJDb2RlQXQoZit5KT09PTQ3KXJldHVybiB1LnNsaWNlKGYreSsxKTtpZih5PT09MClyZXR1cm4gdS5zbGljZShmK3kpfWVsc2UgbT5nJiYoby5jaGFyQ29kZUF0KGMreSk9PT00Nz9rPXk6eT09PTAmJihrPTApKTticmVha312YXIgdj1vLmNoYXJDb2RlQXQoYyt5KTtpZih2IT09dS5jaGFyQ29kZUF0KGYreSkpYnJlYWs7dj09PTQ3JiYoaz15KX12YXIgRT0iIjtmb3IoeT1jK2srMTt5PD1kOysreSl5IT09ZCYmby5jaGFyQ29kZUF0KHkpIT09NDd8fChFLmxlbmd0aD09PTA/RSs9Ii4uIjpFKz0iLy4uIik7cmV0dXJuIEUubGVuZ3RoPjA/RSt1LnNsaWNlKGYrayk6KGYrPWssdS5jaGFyQ29kZUF0KGYpPT09NDcmJisrZix1LnNsaWNlKGYpKX0sX21ha2VMb25nOmZ1bmN0aW9uKG8pe3JldHVybiBvfSxkaXJuYW1lOmZ1bmN0aW9uKG8pe2lmKHMobyksby5sZW5ndGg9PT0wKXJldHVybiIuIjtmb3IodmFyIHU9by5jaGFyQ29kZUF0KDApLGM9dT09PTQ3LGQ9LTEsbT0hMCxmPW8ubGVuZ3RoLTE7Zj49MTstLWYpaWYoKHU9by5jaGFyQ29kZUF0KGYpKT09PTQ3KXtpZighbSl7ZD1mO2JyZWFrfX1lbHNlIG09ITE7cmV0dXJuIGQ9PT0tMT9jPyIvIjoiLiI6YyYmZD09PTE/Ii8vIjpvLnNsaWNlKDAsZCl9LGJhc2VuYW1lOmZ1bmN0aW9uKG8sdSl7aWYodSE9PXZvaWQgMCYmdHlwZW9mIHUhPSJzdHJpbmciKXRocm93IG5ldyBUeXBlRXJyb3IoJyJleHQiIGFyZ3VtZW50IG11c3QgYmUgYSBzdHJpbmcnKTtzKG8pO3ZhciBjLGQ9MCxtPS0xLGY9ITA7aWYodSE9PXZvaWQgMCYmdS5sZW5ndGg+MCYmdS5sZW5ndGg8PW8ubGVuZ3RoKXtpZih1Lmxlbmd0aD09PW8ubGVuZ3RoJiZ1PT09bylyZXR1cm4iIjt2YXIgXz11Lmxlbmd0aC0xLGc9LTE7Zm9yKGM9by5sZW5ndGgtMTtjPj0wOy0tYyl7dmFyIGs9by5jaGFyQ29kZUF0KGMpO2lmKGs9PT00Nyl7aWYoIWYpe2Q9YysxO2JyZWFrfX1lbHNlIGc9PT0tMSYmKGY9ITEsZz1jKzEpLF8+PTAmJihrPT09dS5jaGFyQ29kZUF0KF8pPy0tXz09LTEmJihtPWMpOihfPS0xLG09ZykpfXJldHVybiBkPT09bT9tPWc6bT09PS0xJiYobT1vLmxlbmd0aCksby5zbGljZShkLG0pfWZvcihjPW8ubGVuZ3RoLTE7Yz49MDstLWMpaWYoby5jaGFyQ29kZUF0KGMpPT09NDcpe2lmKCFmKXtkPWMrMTticmVha319ZWxzZSBtPT09LTEmJihmPSExLG09YysxKTtyZXR1cm4gbT09PS0xPyIiOm8uc2xpY2UoZCxtKX0sZXh0bmFtZTpmdW5jdGlvbihvKXtzKG8pO2Zvcih2YXIgdT0tMSxjPTAsZD0tMSxtPSEwLGY9MCxfPW8ubGVuZ3RoLTE7Xz49MDstLV8pe3ZhciBnPW8uY2hhckNvZGVBdChfKTtpZihnIT09NDcpZD09PS0xJiYobT0hMSxkPV8rMSksZz09PTQ2P3U9PT0tMT91PV86ZiE9PTEmJihmPTEpOnUhPT0tMSYmKGY9LTEpO2Vsc2UgaWYoIW0pe2M9XysxO2JyZWFrfX1yZXR1cm4gdT09PS0xfHxkPT09LTF8fGY9PT0wfHxmPT09MSYmdT09PWQtMSYmdT09PWMrMT8iIjpvLnNsaWNlKHUsZCl9LGZvcm1hdDpmdW5jdGlvbihvKXtpZihvPT09bnVsbHx8dHlwZW9mIG8hPSJvYmplY3QiKXRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSAicGF0aE9iamVjdCIgYXJndW1lbnQgbXVzdCBiZSBvZiB0eXBlIE9iamVjdC4gUmVjZWl2ZWQgdHlwZSAnK3R5cGVvZiBvKTtyZXR1cm4gZnVuY3Rpb24odSxjKXt2YXIgZD1jLmRpcnx8Yy5yb290LG09Yy5iYXNlfHwoYy5uYW1lfHwiIikrKGMuZXh0fHwiIik7cmV0dXJuIGQ/ZD09PWMucm9vdD9kK206ZCsiLyIrbTptfSgwLG8pfSxwYXJzZTpmdW5jdGlvbihvKXtzKG8pO3ZhciB1PXtyb290OiIiLGRpcjoiIixiYXNlOiIiLGV4dDoiIixuYW1lOiIifTtpZihvLmxlbmd0aD09PTApcmV0dXJuIHU7dmFyIGMsZD1vLmNoYXJDb2RlQXQoMCksbT1kPT09NDc7bT8odS5yb290PSIvIixjPTEpOmM9MDtmb3IodmFyIGY9LTEsXz0wLGc9LTEsaz0hMCx5PW8ubGVuZ3RoLTEsdj0wO3k+PWM7LS15KWlmKChkPW8uY2hhckNvZGVBdCh5KSkhPT00NylnPT09LTEmJihrPSExLGc9eSsxKSxkPT09NDY/Zj09PS0xP2Y9eTp2IT09MSYmKHY9MSk6ZiE9PS0xJiYodj0tMSk7ZWxzZSBpZighayl7Xz15KzE7YnJlYWt9cmV0dXJuIGY9PT0tMXx8Zz09PS0xfHx2PT09MHx8dj09PTEmJmY9PT1nLTEmJmY9PT1fKzE/ZyE9PS0xJiYodS5iYXNlPXUubmFtZT1fPT09MCYmbT9vLnNsaWNlKDEsZyk6by5zbGljZShfLGcpKTooXz09PTAmJm0/KHUubmFtZT1vLnNsaWNlKDEsZiksdS5iYXNlPW8uc2xpY2UoMSxnKSk6KHUubmFtZT1vLnNsaWNlKF8sZiksdS5iYXNlPW8uc2xpY2UoXyxnKSksdS5leHQ9by5zbGljZShmLGcpKSxfPjA/dS5kaXI9by5zbGljZSgwLF8tMSk6bSYmKHUuZGlyPSIvIiksdX0sc2VwOiIvIixkZWxpbWl0ZXI6IjoiLHdpbjMyOm51bGwscG9zaXg6bnVsbH07bC5wb3NpeD1sLHIuZXhwb3J0cz1sfX0sdD17fTtmdW5jdGlvbiBuKHIpe3ZhciBzPXRbcl07aWYocyE9PXZvaWQgMClyZXR1cm4gcy5leHBvcnRzO3ZhciBhPXRbcl09e2V4cG9ydHM6e319O3JldHVybiBlW3JdKGEsYS5leHBvcnRzLG4pLGEuZXhwb3J0c31uLmQ9KHIscyk9Pntmb3IodmFyIGEgaW4gcyluLm8ocyxhKSYmIW4ubyhyLGEpJiZPYmplY3QuZGVmaW5lUHJvcGVydHkocixhLHtlbnVtZXJhYmxlOiEwLGdldDpzW2FdfSl9LG4ubz0ocixzKT0+T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIscyksbi5yPXI9Pnt0eXBlb2YgU3ltYm9sPCJ1IiYmU3ltYm9sLnRvU3RyaW5nVGFnJiZPYmplY3QuZGVmaW5lUHJvcGVydHkocixTeW1ib2wudG9TdHJpbmdUYWcse3ZhbHVlOiJNb2R1bGUifSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHIsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pfTt2YXIgaT17fTsoKCk9PntsZXQgcjtuLnIoaSksbi5kKGkse1VSSTooKT0+bSxVdGlsczooKT0+VX0pLHR5cGVvZiBwcm9jZXNzPT0ib2JqZWN0Ij9yPXByb2Nlc3MucGxhdGZvcm09PT0id2luMzIiOnR5cGVvZiBuYXZpZ2F0b3I9PSJvYmplY3QiJiYocj1uYXZpZ2F0b3IudXNlckFnZW50LmluZGV4T2YoIldpbmRvd3MiKT49MCk7Y29uc3Qgcz0vXlx3W1x3XGQrLi1dKiQvLGE9L15cLy8sbD0vXlwvXC8vO2Z1bmN0aW9uIG8oTCxUKXtpZighTC5zY2hlbWUmJlQpdGhyb3cgbmV3IEVycm9yKGBbVXJpRXJyb3JdOiBTY2hlbWUgaXMgbWlzc2luZzoge3NjaGVtZTogIiIsIGF1dGhvcml0eTogIiR7TC5hdXRob3JpdHl9IiwgcGF0aDogIiR7TC5wYXRofSIsIHF1ZXJ5OiAiJHtMLnF1ZXJ5fSIsIGZyYWdtZW50OiAiJHtMLmZyYWdtZW50fSJ9YCk7aWYoTC5zY2hlbWUmJiFzLnRlc3QoTC5zY2hlbWUpKXRocm93IG5ldyBFcnJvcigiW1VyaUVycm9yXTogU2NoZW1lIGNvbnRhaW5zIGlsbGVnYWwgY2hhcmFjdGVycy4iKTtpZihMLnBhdGgpe2lmKEwuYXV0aG9yaXR5KXtpZighYS50ZXN0KEwucGF0aCkpdGhyb3cgbmV3IEVycm9yKCdbVXJpRXJyb3JdOiBJZiBhIFVSSSBjb250YWlucyBhbiBhdXRob3JpdHkgY29tcG9uZW50LCB0aGVuIHRoZSBwYXRoIGNvbXBvbmVudCBtdXN0IGVpdGhlciBiZSBlbXB0eSBvciBiZWdpbiB3aXRoIGEgc2xhc2ggKCIvIikgY2hhcmFjdGVyJyl9ZWxzZSBpZihsLnRlc3QoTC5wYXRoKSl0aHJvdyBuZXcgRXJyb3IoJ1tVcmlFcnJvcl06IElmIGEgVVJJIGRvZXMgbm90IGNvbnRhaW4gYW4gYXV0aG9yaXR5IGNvbXBvbmVudCwgdGhlbiB0aGUgcGF0aCBjYW5ub3QgYmVnaW4gd2l0aCB0d28gc2xhc2ggY2hhcmFjdGVycyAoIi8vIiknKX19Y29uc3QgdT0iIixjPSIvIixkPS9eKChbXjovPyNdKz8pOik/KFwvXC8oW14vPyNdKikpPyhbXj8jXSopKFw/KFteI10qKSk/KCMoLiopKT8vO2NsYXNzIG17Y29uc3RydWN0b3IoVCxTLHcsQSxSLEk9ITEpe1FlKHRoaXMsInNjaGVtZSIpO1FlKHRoaXMsImF1dGhvcml0eSIpO1FlKHRoaXMsInBhdGgiKTtRZSh0aGlzLCJxdWVyeSIpO1FlKHRoaXMsImZyYWdtZW50Iik7dHlwZW9mIFQ9PSJvYmplY3QiPyh0aGlzLnNjaGVtZT1ULnNjaGVtZXx8dSx0aGlzLmF1dGhvcml0eT1ULmF1dGhvcml0eXx8dSx0aGlzLnBhdGg9VC5wYXRofHx1LHRoaXMucXVlcnk9VC5xdWVyeXx8dSx0aGlzLmZyYWdtZW50PVQuZnJhZ21lbnR8fHUpOih0aGlzLnNjaGVtZT1mdW5jdGlvbihGLEgpe3JldHVybiBGfHxIP0Y6ImZpbGUifShULEkpLHRoaXMuYXV0aG9yaXR5PVN8fHUsdGhpcy5wYXRoPWZ1bmN0aW9uKEYsSCl7c3dpdGNoKEYpe2Nhc2UiaHR0cHMiOmNhc2UiaHR0cCI6Y2FzZSJmaWxlIjpIP0hbMF0hPT1jJiYoSD1jK0gpOkg9Y31yZXR1cm4gSH0odGhpcy5zY2hlbWUsd3x8dSksdGhpcy5xdWVyeT1BfHx1LHRoaXMuZnJhZ21lbnQ9Unx8dSxvKHRoaXMsSSkpfXN0YXRpYyBpc1VyaShUKXtyZXR1cm4gVCBpbnN0YW5jZW9mIG18fCEhVCYmdHlwZW9mIFQuYXV0aG9yaXR5PT0ic3RyaW5nIiYmdHlwZW9mIFQuZnJhZ21lbnQ9PSJzdHJpbmciJiZ0eXBlb2YgVC5wYXRoPT0ic3RyaW5nIiYmdHlwZW9mIFQucXVlcnk9PSJzdHJpbmciJiZ0eXBlb2YgVC5zY2hlbWU9PSJzdHJpbmciJiZ0eXBlb2YgVC5mc1BhdGg9PSJzdHJpbmciJiZ0eXBlb2YgVC53aXRoPT0iZnVuY3Rpb24iJiZ0eXBlb2YgVC50b1N0cmluZz09ImZ1bmN0aW9uIn1nZXQgZnNQYXRoKCl7cmV0dXJuIHYodGhpcyl9d2l0aChUKXtpZighVClyZXR1cm4gdGhpcztsZXR7c2NoZW1lOlMsYXV0aG9yaXR5OncscGF0aDpBLHF1ZXJ5OlIsZnJhZ21lbnQ6SX09VDtyZXR1cm4gUz09PXZvaWQgMD9TPXRoaXMuc2NoZW1lOlM9PT1udWxsJiYoUz11KSx3PT09dm9pZCAwP3c9dGhpcy5hdXRob3JpdHk6dz09PW51bGwmJih3PXUpLEE9PT12b2lkIDA/QT10aGlzLnBhdGg6QT09PW51bGwmJihBPXUpLFI9PT12b2lkIDA/Uj10aGlzLnF1ZXJ5OlI9PT1udWxsJiYoUj11KSxJPT09dm9pZCAwP0k9dGhpcy5mcmFnbWVudDpJPT09bnVsbCYmKEk9dSksUz09PXRoaXMuc2NoZW1lJiZ3PT09dGhpcy5hdXRob3JpdHkmJkE9PT10aGlzLnBhdGgmJlI9PT10aGlzLnF1ZXJ5JiZJPT09dGhpcy5mcmFnbWVudD90aGlzOm5ldyBfKFMsdyxBLFIsSSl9c3RhdGljIHBhcnNlKFQsUz0hMSl7Y29uc3Qgdz1kLmV4ZWMoVCk7cmV0dXJuIHc/bmV3IF8od1syXXx8dSxOKHdbNF18fHUpLE4od1s1XXx8dSksTih3WzddfHx1KSxOKHdbOV18fHUpLFMpOm5ldyBfKHUsdSx1LHUsdSl9c3RhdGljIGZpbGUoVCl7bGV0IFM9dTtpZihyJiYoVD1ULnJlcGxhY2UoL1xcL2csYykpLFRbMF09PT1jJiZUWzFdPT09Yyl7Y29uc3Qgdz1ULmluZGV4T2YoYywyKTt3PT09LTE/KFM9VC5zdWJzdHJpbmcoMiksVD1jKTooUz1ULnN1YnN0cmluZygyLHcpLFQ9VC5zdWJzdHJpbmcodyl8fGMpfXJldHVybiBuZXcgXygiZmlsZSIsUyxULHUsdSl9c3RhdGljIGZyb20oVCl7Y29uc3QgUz1uZXcgXyhULnNjaGVtZSxULmF1dGhvcml0eSxULnBhdGgsVC5xdWVyeSxULmZyYWdtZW50KTtyZXR1cm4gbyhTLCEwKSxTfXRvU3RyaW5nKFQ9ITEpe3JldHVybiBFKHRoaXMsVCl9dG9KU09OKCl7cmV0dXJuIHRoaXN9c3RhdGljIHJldml2ZShUKXtpZihUKXtpZihUIGluc3RhbmNlb2YgbSlyZXR1cm4gVDt7Y29uc3QgUz1uZXcgXyhUKTtyZXR1cm4gUy5fZm9ybWF0dGVkPVQuZXh0ZXJuYWwsUy5fZnNQYXRoPVQuX3NlcD09PWY/VC5mc1BhdGg6bnVsbCxTfX1yZXR1cm4gVH19Y29uc3QgZj1yPzE6dm9pZCAwO2NsYXNzIF8gZXh0ZW5kcyBte2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKTtRZSh0aGlzLCJfZm9ybWF0dGVkIixudWxsKTtRZSh0aGlzLCJfZnNQYXRoIixudWxsKX1nZXQgZnNQYXRoKCl7cmV0dXJuIHRoaXMuX2ZzUGF0aHx8KHRoaXMuX2ZzUGF0aD12KHRoaXMpKSx0aGlzLl9mc1BhdGh9dG9TdHJpbmcoUz0hMSl7cmV0dXJuIFM/RSh0aGlzLCEwKToodGhpcy5fZm9ybWF0dGVkfHwodGhpcy5fZm9ybWF0dGVkPUUodGhpcywhMSkpLHRoaXMuX2Zvcm1hdHRlZCl9dG9KU09OKCl7Y29uc3QgUz17JG1pZDoxfTtyZXR1cm4gdGhpcy5fZnNQYXRoJiYoUy5mc1BhdGg9dGhpcy5fZnNQYXRoLFMuX3NlcD1mKSx0aGlzLl9mb3JtYXR0ZWQmJihTLmV4dGVybmFsPXRoaXMuX2Zvcm1hdHRlZCksdGhpcy5wYXRoJiYoUy5wYXRoPXRoaXMucGF0aCksdGhpcy5zY2hlbWUmJihTLnNjaGVtZT10aGlzLnNjaGVtZSksdGhpcy5hdXRob3JpdHkmJihTLmF1dGhvcml0eT10aGlzLmF1dGhvcml0eSksdGhpcy5xdWVyeSYmKFMucXVlcnk9dGhpcy5xdWVyeSksdGhpcy5mcmFnbWVudCYmKFMuZnJhZ21lbnQ9dGhpcy5mcmFnbWVudCksU319Y29uc3QgZz17NTg6IiUzQSIsNDc6IiUyRiIsNjM6IiUzRiIsMzU6IiUyMyIsOTE6IiU1QiIsOTM6IiU1RCIsNjQ6IiU0MCIsMzM6IiUyMSIsMzY6IiUyNCIsMzg6IiUyNiIsMzk6IiUyNyIsNDA6IiUyOCIsNDE6IiUyOSIsNDI6IiUyQSIsNDM6IiUyQiIsNDQ6IiUyQyIsNTk6IiUzQiIsNjE6IiUzRCIsMzI6IiUyMCJ9O2Z1bmN0aW9uIGsoTCxULFMpe2xldCB3LEE9LTE7Zm9yKGxldCBSPTA7UjxMLmxlbmd0aDtSKyspe2NvbnN0IEk9TC5jaGFyQ29kZUF0KFIpO2lmKEk+PTk3JiZJPD0xMjJ8fEk+PTY1JiZJPD05MHx8ST49NDgmJkk8PTU3fHxJPT09NDV8fEk9PT00Nnx8ST09PTk1fHxJPT09MTI2fHxUJiZJPT09NDd8fFMmJkk9PT05MXx8UyYmST09PTkzfHxTJiZJPT09NTgpQSE9PS0xJiYodys9ZW5jb2RlVVJJQ29tcG9uZW50KEwuc3Vic3RyaW5nKEEsUikpLEE9LTEpLHchPT12b2lkIDAmJih3Kz1MLmNoYXJBdChSKSk7ZWxzZXt3PT09dm9pZCAwJiYodz1MLnN1YnN0cigwLFIpKTtjb25zdCBGPWdbSV07RiE9PXZvaWQgMD8oQSE9PS0xJiYodys9ZW5jb2RlVVJJQ29tcG9uZW50KEwuc3Vic3RyaW5nKEEsUikpLEE9LTEpLHcrPUYpOkE9PT0tMSYmKEE9Uil9fXJldHVybiBBIT09LTEmJih3Kz1lbmNvZGVVUklDb21wb25lbnQoTC5zdWJzdHJpbmcoQSkpKSx3IT09dm9pZCAwP3c6TH1mdW5jdGlvbiB5KEwpe2xldCBUO2ZvcihsZXQgUz0wO1M8TC5sZW5ndGg7UysrKXtjb25zdCB3PUwuY2hhckNvZGVBdChTKTt3PT09MzV8fHc9PT02Mz8oVD09PXZvaWQgMCYmKFQ9TC5zdWJzdHIoMCxTKSksVCs9Z1t3XSk6VCE9PXZvaWQgMCYmKFQrPUxbU10pfXJldHVybiBUIT09dm9pZCAwP1Q6TH1mdW5jdGlvbiB2KEwsVCl7bGV0IFM7cmV0dXJuIFM9TC5hdXRob3JpdHkmJkwucGF0aC5sZW5ndGg+MSYmTC5zY2hlbWU9PT0iZmlsZSI/YC8vJHtMLmF1dGhvcml0eX0ke0wucGF0aH1gOkwucGF0aC5jaGFyQ29kZUF0KDApPT09NDcmJihMLnBhdGguY2hhckNvZGVBdCgxKT49NjUmJkwucGF0aC5jaGFyQ29kZUF0KDEpPD05MHx8TC5wYXRoLmNoYXJDb2RlQXQoMSk+PTk3JiZMLnBhdGguY2hhckNvZGVBdCgxKTw9MTIyKSYmTC5wYXRoLmNoYXJDb2RlQXQoMik9PT01OD9MLnBhdGhbMV0udG9Mb3dlckNhc2UoKStMLnBhdGguc3Vic3RyKDIpOkwucGF0aCxyJiYoUz1TLnJlcGxhY2UoL1wvL2csIlxcIikpLFN9ZnVuY3Rpb24gRShMLFQpe2NvbnN0IFM9VD95Oms7bGV0IHc9IiIse3NjaGVtZTpBLGF1dGhvcml0eTpSLHBhdGg6SSxxdWVyeTpGLGZyYWdtZW50Okh9PUw7aWYoQSYmKHcrPUEsdys9IjoiKSwoUnx8QT09PSJmaWxlIikmJih3Kz1jLHcrPWMpLFIpe2xldCBXPVIuaW5kZXhPZigiQCIpO2lmKFchPT0tMSl7Y29uc3QgcT1SLnN1YnN0cigwLFcpO1I9Ui5zdWJzdHIoVysxKSxXPXEubGFzdEluZGV4T2YoIjoiKSxXPT09LTE/dys9UyhxLCExLCExKToodys9UyhxLnN1YnN0cigwLFcpLCExLCExKSx3Kz0iOiIsdys9UyhxLnN1YnN0cihXKzEpLCExLCEwKSksdys9IkAifVI9Ui50b0xvd2VyQ2FzZSgpLFc9Ui5sYXN0SW5kZXhPZigiOiIpLFc9PT0tMT93Kz1TKFIsITEsITApOih3Kz1TKFIuc3Vic3RyKDAsVyksITEsITApLHcrPVIuc3Vic3RyKFcpKX1pZihJKXtpZihJLmxlbmd0aD49MyYmSS5jaGFyQ29kZUF0KDApPT09NDcmJkkuY2hhckNvZGVBdCgyKT09PTU4KXtjb25zdCBXPUkuY2hhckNvZGVBdCgxKTtXPj02NSYmVzw9OTAmJihJPWAvJHtTdHJpbmcuZnJvbUNoYXJDb2RlKFcrMzIpfToke0kuc3Vic3RyKDMpfWApfWVsc2UgaWYoSS5sZW5ndGg+PTImJkkuY2hhckNvZGVBdCgxKT09PTU4KXtjb25zdCBXPUkuY2hhckNvZGVBdCgwKTtXPj02NSYmVzw9OTAmJihJPWAke1N0cmluZy5mcm9tQ2hhckNvZGUoVyszMil9OiR7SS5zdWJzdHIoMil9YCl9dys9UyhJLCEwLCExKX1yZXR1cm4gRiYmKHcrPSI/Iix3Kz1TKEYsITEsITEpKSxIJiYodys9IiMiLHcrPVQ/SDprKEgsITEsITEpKSx3fWZ1bmN0aW9uIE0oTCl7dHJ5e3JldHVybiBkZWNvZGVVUklDb21wb25lbnQoTCl9Y2F0Y2h7cmV0dXJuIEwubGVuZ3RoPjM/TC5zdWJzdHIoMCwzKStNKEwuc3Vic3RyKDMpKTpMfX1jb25zdCBEPS8oJVswLTlBLVphLXpdWzAtOUEtWmEtel0pKy9nO2Z1bmN0aW9uIE4oTCl7cmV0dXJuIEwubWF0Y2goRCk/TC5yZXBsYWNlKEQsVD0+TShUKSk6TH12YXIgYj1uKDQ3MCk7Y29uc3QgcD1iLnBvc2l4fHxiLHg9Ii8iO3ZhciBVOyhmdW5jdGlvbihMKXtMLmpvaW5QYXRoPWZ1bmN0aW9uKFQsLi4uUyl7cmV0dXJuIFQud2l0aCh7cGF0aDpwLmpvaW4oVC5wYXRoLC4uLlMpfSl9LEwucmVzb2x2ZVBhdGg9ZnVuY3Rpb24oVCwuLi5TKXtsZXQgdz1ULnBhdGgsQT0hMTt3WzBdIT09eCYmKHc9eCt3LEE9ITApO2xldCBSPXAucmVzb2x2ZSh3LC4uLlMpO3JldHVybiBBJiZSWzBdPT09eCYmIVQuYXV0aG9yaXR5JiYoUj1SLnN1YnN0cmluZygxKSksVC53aXRoKHtwYXRoOlJ9KX0sTC5kaXJuYW1lPWZ1bmN0aW9uKFQpe2lmKFQucGF0aC5sZW5ndGg9PT0wfHxULnBhdGg9PT14KXJldHVybiBUO2xldCBTPXAuZGlybmFtZShULnBhdGgpO3JldHVybiBTLmxlbmd0aD09PTEmJlMuY2hhckNvZGVBdCgwKT09PTQ2JiYoUz0iIiksVC53aXRoKHtwYXRoOlN9KX0sTC5iYXNlbmFtZT1mdW5jdGlvbihUKXtyZXR1cm4gcC5iYXNlbmFtZShULnBhdGgpfSxMLmV4dG5hbWU9ZnVuY3Rpb24oVCl7cmV0dXJuIHAuZXh0bmFtZShULnBhdGgpfX0pKFV8fChVPXt9KSl9KSgpLHVvPWl9KSgpO3ZhcntVUkk6QmMsVXRpbHM6X2h9PXVvO2Z1bmN0aW9uIFVpKGUpe2NvbnN0IHQ9ZVswXSxuPWVbZS5sZW5ndGgtMV07cmV0dXJuIHQ9PT1uJiYodD09PSInInx8dD09PSciJykmJihlPWUuc3Vic3RyaW5nKDEsZS5sZW5ndGgtMSkpLGV9ZnVuY3Rpb24gcWMoZSx0KXtyZXR1cm4hZS5sZW5ndGh8fHQ9PT0iaGFuZGxlYmFycyImJi97e3x9fS8udGVzdChlKT8hMTovXGIod1tcd1xkKy4tXSo6XC9cLyk/W15ccygpPD5dKyg/OlwoW1x3XGRdK1wpfChbXls6cHVuY3Q6XVxzXXxcLz8pKS8udGVzdChlKX1mdW5jdGlvbiBPYyhlLHQsbixpKXtpZigvXlxzKmphdmFzY3JpcHRcOi9pLnRlc3QodCl8fC9bXG5ccl0vLnRlc3QodCkpcmV0dXJuO3Q9dC5yZXBsYWNlKC9eXHMqL2csIiIpO2NvbnN0IHI9dC5tYXRjaCgvXihcd1tcd1xkKy4tXSopOi8pO2lmKHIpe2NvbnN0IHM9clsxXS50b0xvd2VyQ2FzZSgpO3JldHVybiBzPT09Imh0dHAifHxzPT09Imh0dHBzInx8cz09PSJmaWxlIj90OnZvaWQgMH1yZXR1cm4vXlwjL2kudGVzdCh0KT9lK3Q6L15cL1wvL2kudGVzdCh0KT8oSmUoZSwiaHR0cHM6Ly8iKT8iaHR0cHMiOiJodHRwIikrIjoiK3QucmVwbGFjZSgvXlxzKi9nLCIiKTpuP24ucmVzb2x2ZVJlZmVyZW5jZSh0LGl8fGUpOnR9ZnVuY3Rpb24gVmMoZSx0LG4saSxyLHMpe2NvbnN0IGE9VWkobik7aWYoIXFjKGEsZS5sYW5ndWFnZUlkKSlyZXR1cm47YS5sZW5ndGg8bi5sZW5ndGgmJihpKyssci0tKTtjb25zdCBsPU9jKGUudXJpLGEsdCxzKTtpZighbClyZXR1cm47Y29uc3Qgbz0kYyhsLGUpO3JldHVybntyYW5nZTokLmNyZWF0ZShlLnBvc2l0aW9uQXQoaSksZS5wb3NpdGlvbkF0KHIpKSx0YXJnZXQ6b319dmFyIGpjPTM1O2Z1bmN0aW9uICRjKGUsdCl7dHJ5e2xldCBuPUJjLnBhcnNlKGUpO3JldHVybiBuLnNjaGVtZT09PSJmaWxlIiYmbi5xdWVyeSYmKG49bi53aXRoKHtxdWVyeTpudWxsfSksZT1uLnRvU3RyaW5nKCEwKSksbi5zY2hlbWU9PT0iZmlsZSImJm4uZnJhZ21lbnQmJiEoZS5zdGFydHNXaXRoKHQudXJpKSYmZS5jaGFyQ29kZUF0KHQudXJpLmxlbmd0aCk9PT1qYyk/bi53aXRoKHtmcmFnbWVudDpudWxsfSkudG9TdHJpbmcoITApOmV9Y2F0Y2h7cmV0dXJufX12YXIgR2M9Y2xhc3N7Y29uc3RydWN0b3IoZSl7dGhpcy5kYXRhTWFuYWdlcj1lfWZpbmREb2N1bWVudExpbmtzKGUsdCl7Y29uc3Qgbj1bXSxpPWJlKGUuZ2V0VGV4dCgpLDApO2xldCByPWkuc2NhbigpLHMsYSxsPSExLG87Y29uc3QgdT17fTtmb3IoO3IhPT16LkVPUzspe3N3aXRjaChyKXtjYXNlIHouU3RhcnRUYWc6YT1pLmdldFRva2VuVGV4dCgpLnRvTG93ZXJDYXNlKCksb3x8KGw9YT09PSJiYXNlIik7YnJlYWs7Y2FzZSB6LkF0dHJpYnV0ZU5hbWU6cz1pLmdldFRva2VuVGV4dCgpLnRvTG93ZXJDYXNlKCk7YnJlYWs7Y2FzZSB6LkF0dHJpYnV0ZVZhbHVlOmlmKGEmJnMmJnRoaXMuZGF0YU1hbmFnZXIuaXNQYXRoQXR0cmlidXRlKGEscykpe2NvbnN0IGM9aS5nZXRUb2tlblRleHQoKTtpZighbCl7Y29uc3QgZD1WYyhlLHQsYyxpLmdldFRva2VuT2Zmc2V0KCksaS5nZXRUb2tlbkVuZCgpLG8pO2QmJm4ucHVzaChkKX1sJiZ0eXBlb2Ygbz4idSImJihvPVVpKGMpLG8mJnQmJihvPXQucmVzb2x2ZVJlZmVyZW5jZShvLGUudXJpKSkpLGw9ITEscz12b2lkIDB9ZWxzZSBpZihzPT09ImlkIil7Y29uc3QgYz1VaShpLmdldFRva2VuVGV4dCgpKTt1W2NdPWkuZ2V0VG9rZW5PZmZzZXQoKX1icmVha31yPWkuc2NhbigpfWZvcihjb25zdCBjIG9mIG4pe2NvbnN0IGQ9ZS51cmkrIiMiO2lmKGMudGFyZ2V0JiZKZShjLnRhcmdldCxkKSl7Y29uc3QgbT1jLnRhcmdldC5zdWJzdHJpbmcoZC5sZW5ndGgpLGY9dVttXTtpZihmIT09dm9pZCAwKXtjb25zdCBfPWUucG9zaXRpb25BdChmKTtjLnRhcmdldD1gJHtkfSR7Xy5saW5lKzF9LCR7Xy5jaGFyYWN0ZXIrMX1gfWVsc2UgYy50YXJnZXQ9ZS51cml9fXJldHVybiBufX07ZnVuY3Rpb24gWGMoZSx0LG4pe2NvbnN0IGk9ZS5vZmZzZXRBdCh0KSxyPW4uZmluZE5vZGVBdChpKTtpZighci50YWcpcmV0dXJuW107Y29uc3Qgcz1bXSxhPW1vKHouU3RhcnRUYWcsZSxyLnN0YXJ0KSxsPXR5cGVvZiByLmVuZFRhZ1N0YXJ0PT0ibnVtYmVyIiYmbW8oei5FbmRUYWcsZSxyLmVuZFRhZ1N0YXJ0KTtyZXR1cm4oYSYmaG8oYSx0KXx8bCYmaG8obCx0KSkmJihhJiZzLnB1c2goe2tpbmQ6bW4uUmVhZCxyYW5nZTphfSksbCYmcy5wdXNoKHtraW5kOm1uLlJlYWQscmFuZ2U6bH0pKSxzfWZ1bmN0aW9uIGNvKGUsdCl7cmV0dXJuIGUubGluZTx0LmxpbmV8fGUubGluZT09PXQubGluZSYmZS5jaGFyYWN0ZXI8PXQuY2hhcmFjdGVyfWZ1bmN0aW9uIGhvKGUsdCl7cmV0dXJuIGNvKGUuc3RhcnQsdCkmJmNvKHQsZS5lbmQpfWZ1bmN0aW9uIG1vKGUsdCxuKXtjb25zdCBpPWJlKHQuZ2V0VGV4dCgpLG4pO2xldCByPWkuc2NhbigpO2Zvcig7ciE9PXouRU9TJiZyIT09ZTspcj1pLnNjYW4oKTtyZXR1cm4gciE9PXouRU9TP3tzdGFydDp0LnBvc2l0aW9uQXQoaS5nZXRUb2tlbk9mZnNldCgpKSxlbmQ6dC5wb3NpdGlvbkF0KGkuZ2V0VG9rZW5FbmQoKSl9Om51bGx9ZnVuY3Rpb24gSmMoZSx0KXtjb25zdCBuPVtdLGk9Zm8oZSx0KTtmb3IoY29uc3QgcyBvZiBpKXIocyx2b2lkIDApO3JldHVybiBuO2Z1bmN0aW9uIHIocyxhKXtjb25zdCBsPUxpLmNyZWF0ZShzLm5hbWUscy5raW5kLHMucmFuZ2UsZS51cmksYT8ubmFtZSk7aWYobC5jb250YWluZXJOYW1lPz8obC5jb250YWluZXJOYW1lPSIiKSxuLnB1c2gobCkscy5jaGlsZHJlbilmb3IoY29uc3QgbyBvZiBzLmNoaWxkcmVuKXIobyxzKX19ZnVuY3Rpb24gZm8oZSx0KXtjb25zdCBuPVtdO3JldHVybiB0LnJvb3RzLmZvckVhY2goaT0+e3BvKGUsaSxuKX0pLG59ZnVuY3Rpb24gcG8oZSx0LG4pe2NvbnN0IGk9WWModCkscj0kLmNyZWF0ZShlLnBvc2l0aW9uQXQodC5zdGFydCksZS5wb3NpdGlvbkF0KHQuZW5kKSkscz1DaS5jcmVhdGUoaSx2b2lkIDAsU2kuRmllbGQscixyKTtuLnB1c2gocyksdC5jaGlsZHJlbi5mb3JFYWNoKGE9PntzLmNoaWxkcmVuPz8ocy5jaGlsZHJlbj1bXSkscG8oZSxhLHMuY2hpbGRyZW4pfSl9ZnVuY3Rpb24gWWMoZSl7bGV0IHQ9ZS50YWc7aWYoZS5hdHRyaWJ1dGVzKXtjb25zdCBuPWUuYXR0cmlidXRlcy5pZCxpPWUuYXR0cmlidXRlcy5jbGFzcztuJiYodCs9YCMke24ucmVwbGFjZSgvW1wiXCddL2csIiIpfWApLGkmJih0Kz1pLnJlcGxhY2UoL1tcIlwnXS9nLCIiKS5zcGxpdCgvXHMrLykubWFwKHI9PmAuJHtyfWApLmpvaW4oIiIpKX1yZXR1cm4gdHx8Ij8ifWZ1bmN0aW9uIFFjKGUsdCxuLGkpe2NvbnN0IHI9ZS5vZmZzZXRBdCh0KSxzPWkuZmluZE5vZGVBdChyKTtpZighcy50YWd8fCFaYyhzLHIscy50YWcpKXJldHVybiBudWxsO2NvbnN0IGE9W10sbD17c3RhcnQ6ZS5wb3NpdGlvbkF0KHMuc3RhcnQrMSksZW5kOmUucG9zaXRpb25BdChzLnN0YXJ0KzErcy50YWcubGVuZ3RoKX07aWYoYS5wdXNoKHtyYW5nZTpsLG5ld1RleHQ6bn0pLHMuZW5kVGFnU3RhcnQpe2NvbnN0IHU9e3N0YXJ0OmUucG9zaXRpb25BdChzLmVuZFRhZ1N0YXJ0KzIpLGVuZDplLnBvc2l0aW9uQXQocy5lbmRUYWdTdGFydCsyK3MudGFnLmxlbmd0aCl9O2EucHVzaCh7cmFuZ2U6dSxuZXdUZXh0Om59KX1yZXR1cm57Y2hhbmdlczp7W2UudXJpLnRvU3RyaW5nKCldOmF9fX1mdW5jdGlvbiBaYyhlLHQsbil7cmV0dXJuIGUuZW5kVGFnU3RhcnQmJmUuZW5kVGFnU3RhcnQrMjw9dCYmdDw9ZS5lbmRUYWdTdGFydCsyK24ubGVuZ3RoPyEwOmUuc3RhcnQrMTw9dCYmdDw9ZS5zdGFydCsxK24ubGVuZ3RofWZ1bmN0aW9uIEtjKGUsdCxuKXtjb25zdCBpPWUub2Zmc2V0QXQodCkscj1uLmZpbmROb2RlQXQoaSk7aWYoIXIudGFnfHwhci5lbmRUYWdTdGFydClyZXR1cm4gbnVsbDtpZihyLnN0YXJ0KzE8PWkmJmk8PXIuc3RhcnQrMStyLnRhZy5sZW5ndGgpe2NvbnN0IHM9aS0xLXIuc3RhcnQrci5lbmRUYWdTdGFydCsyO3JldHVybiBlLnBvc2l0aW9uQXQocyl9aWYoci5lbmRUYWdTdGFydCsyPD1pJiZpPD1yLmVuZFRhZ1N0YXJ0KzIrci50YWcubGVuZ3RoKXtjb25zdCBzPWktMi1yLmVuZFRhZ1N0YXJ0K3Iuc3RhcnQrMTtyZXR1cm4gZS5wb3NpdGlvbkF0KHMpfXJldHVybiBudWxsfWZ1bmN0aW9uIGdvKGUsdCxuKXtjb25zdCBpPWUub2Zmc2V0QXQodCkscj1uLmZpbmROb2RlQXQoaSkscz1yLnRhZz9yLnRhZy5sZW5ndGg6MDtyZXR1cm4gci5lbmRUYWdTdGFydCYmKHIuc3RhcnQrMTw9aSYmaTw9ci5zdGFydCsxK3N8fHIuZW5kVGFnU3RhcnQrMjw9aSYmaTw9ci5lbmRUYWdTdGFydCsyK3MpP1skLmNyZWF0ZShlLnBvc2l0aW9uQXQoci5zdGFydCsxKSxlLnBvc2l0aW9uQXQoci5zdGFydCsxK3MpKSwkLmNyZWF0ZShlLnBvc2l0aW9uQXQoci5lbmRUYWdTdGFydCsyKSxlLnBvc2l0aW9uQXQoci5lbmRUYWdTdGFydCsyK3MpKV06bnVsbH12YXIgZWg9Y2xhc3N7Y29uc3RydWN0b3IoZSl7dGhpcy5kYXRhTWFuYWdlcj1lfWxpbWl0UmFuZ2VzKGUsdCl7ZT1lLnNvcnQoKGMsZCk9PntsZXQgbT1jLnN0YXJ0TGluZS1kLnN0YXJ0TGluZTtyZXR1cm4gbT09PTAmJihtPWMuZW5kTGluZS1kLmVuZExpbmUpLG19KTtsZXQgbjtjb25zdCBpPVtdLHI9W10scz1bXSxhPShjLGQpPT57cltjXT1kLGQ8MzAmJihzW2RdPShzW2RdfHwwKSsxKX07Zm9yKGxldCBjPTA7YzxlLmxlbmd0aDtjKyspe2NvbnN0IGQ9ZVtjXTtpZighbiluPWQsYShjLDApO2Vsc2UgaWYoZC5zdGFydExpbmU+bi5zdGFydExpbmUpe2lmKGQuZW5kTGluZTw9bi5lbmRMaW5lKWkucHVzaChuKSxuPWQsYShjLGkubGVuZ3RoKTtlbHNlIGlmKGQuc3RhcnRMaW5lPm4uZW5kTGluZSl7ZG8gbj1pLnBvcCgpO3doaWxlKG4mJmQuc3RhcnRMaW5lPm4uZW5kTGluZSk7biYmaS5wdXNoKG4pLG49ZCxhKGMsaS5sZW5ndGgpfX19bGV0IGw9MCxvPTA7Zm9yKGxldCBjPTA7YzxzLmxlbmd0aDtjKyspe2NvbnN0IGQ9c1tjXTtpZihkKXtpZihkK2w+dCl7bz1jO2JyZWFrfWwrPWR9fWNvbnN0IHU9W107Zm9yKGxldCBjPTA7YzxlLmxlbmd0aDtjKyspe2NvbnN0IGQ9cltjXTt0eXBlb2YgZD09Im51bWJlciImJihkPG98fGQ9PT1vJiZsKys8dCkmJnUucHVzaChlW2NdKX1yZXR1cm4gdX1nZXRGb2xkaW5nUmFuZ2VzKGUsdCl7Y29uc3Qgbj10aGlzLmRhdGFNYW5hZ2VyLmdldFZvaWRFbGVtZW50cyhlLmxhbmd1YWdlSWQpLGk9YmUoZS5nZXRUZXh0KCkpO2xldCByPWkuc2NhbigpO2NvbnN0IHM9W10sYT1bXTtsZXQgbD1udWxsLG89LTE7ZnVuY3Rpb24gdShkKXtzLnB1c2goZCksbz1kLnN0YXJ0TGluZX1mb3IoO3IhPT16LkVPUzspe3N3aXRjaChyKXtjYXNlIHouU3RhcnRUYWc6e2NvbnN0IGQ9aS5nZXRUb2tlblRleHQoKSxtPWUucG9zaXRpb25BdChpLmdldFRva2VuT2Zmc2V0KCkpLmxpbmU7YS5wdXNoKHtzdGFydExpbmU6bSx0YWdOYW1lOmR9KSxsPWQ7YnJlYWt9Y2FzZSB6LkVuZFRhZzp7bD1pLmdldFRva2VuVGV4dCgpO2JyZWFrfWNhc2Ugei5TdGFydFRhZ0Nsb3NlOmlmKCFsfHwhdGhpcy5kYXRhTWFuYWdlci5pc1ZvaWRFbGVtZW50KGwsbikpYnJlYWs7Y2FzZSB6LkVuZFRhZ0Nsb3NlOmNhc2Ugei5TdGFydFRhZ1NlbGZDbG9zZTp7bGV0IGQ9YS5sZW5ndGgtMTtmb3IoO2Q+PTAmJmFbZF0udGFnTmFtZSE9PWw7KWQtLTtpZihkPj0wKXtjb25zdCBtPWFbZF07YS5sZW5ndGg9ZDtjb25zdCBmPWUucG9zaXRpb25BdChpLmdldFRva2VuT2Zmc2V0KCkpLmxpbmUsXz1tLnN0YXJ0TGluZSxnPWYtMTtnPl8mJm8hPT1fJiZ1KHtzdGFydExpbmU6XyxlbmRMaW5lOmd9KX1icmVha31jYXNlIHouQ29tbWVudDp7bGV0IGQ9ZS5wb3NpdGlvbkF0KGkuZ2V0VG9rZW5PZmZzZXQoKSkubGluZTtjb25zdCBmPWkuZ2V0VG9rZW5UZXh0KCkubWF0Y2goL15ccyojKHJlZ2lvblxiKXwoZW5kcmVnaW9uXGIpLyk7aWYoZilpZihmWzFdKWEucHVzaCh7c3RhcnRMaW5lOmQsdGFnTmFtZToiIn0pO2Vsc2V7bGV0IF89YS5sZW5ndGgtMTtmb3IoO18+PTAmJmFbX10udGFnTmFtZS5sZW5ndGg7KV8tLTtpZihfPj0wKXtjb25zdCBnPWFbX107YS5sZW5ndGg9Xztjb25zdCBrPWQ7ZD1nLnN0YXJ0TGluZSxrPmQmJm8hPT1kJiZ1KHtzdGFydExpbmU6ZCxlbmRMaW5lOmssa2luZDpjbi5SZWdpb259KX19ZWxzZXtjb25zdCBfPWUucG9zaXRpb25BdChpLmdldFRva2VuT2Zmc2V0KCkraS5nZXRUb2tlbkxlbmd0aCgpKS5saW5lO2Q8XyYmdSh7c3RhcnRMaW5lOmQsZW5kTGluZTpfLGtpbmQ6Y24uQ29tbWVudH0pfWJyZWFrfX1yPWkuc2NhbigpfWNvbnN0IGM9dCYmdC5yYW5nZUxpbWl0fHxOdW1iZXIuTUFYX1ZBTFVFO3JldHVybiBzLmxlbmd0aD5jP3RoaXMubGltaXRSYW5nZXMocyxjKTpzfX0sdGg9Y2xhc3N7Y29uc3RydWN0b3IoZSl7dGhpcy5odG1sUGFyc2VyPWV9Z2V0U2VsZWN0aW9uUmFuZ2VzKGUsdCl7Y29uc3Qgbj10aGlzLmh0bWxQYXJzZXIucGFyc2VEb2N1bWVudChlKTtyZXR1cm4gdC5tYXAoaT0+dGhpcy5nZXRTZWxlY3Rpb25SYW5nZShpLGUsbikpfWdldFNlbGVjdGlvblJhbmdlKGUsdCxuKXtjb25zdCBpPXRoaXMuZ2V0QXBwbGljYWJsZVJhbmdlcyh0LGUsbik7bGV0IHIscztmb3IobGV0IGE9aS5sZW5ndGgtMTthPj0wO2EtLSl7Y29uc3QgbD1pW2FdOyghcnx8bFswXSE9PXJbMF18fGxbMV0hPT1yWzFdKSYmKHM9cG4uY3JlYXRlKCQuY3JlYXRlKHQucG9zaXRpb25BdChpW2FdWzBdKSx0LnBvc2l0aW9uQXQoaVthXVsxXSkpLHMpKSxyPWx9cmV0dXJuIHN8fChzPXBuLmNyZWF0ZSgkLmNyZWF0ZShlLGUpKSksc31nZXRBcHBsaWNhYmxlUmFuZ2VzKGUsdCxuKXtjb25zdCBpPWUub2Zmc2V0QXQodCkscj1uLmZpbmROb2RlQXQoaSk7bGV0IHM9dGhpcy5nZXRBbGxQYXJlbnRUYWdSYW5nZXMocik7aWYoci5zdGFydFRhZ0VuZCYmIXIuZW5kVGFnU3RhcnQpe2lmKHIuc3RhcnRUYWdFbmQhPT1yLmVuZClyZXR1cm5bW3Iuc3RhcnQsci5lbmRdXTtjb25zdCBhPSQuY3JlYXRlKGUucG9zaXRpb25BdChyLnN0YXJ0VGFnRW5kLTIpLGUucG9zaXRpb25BdChyLnN0YXJ0VGFnRW5kKSk7cmV0dXJuIGUuZ2V0VGV4dChhKT09PSIvPiI/cy51bnNoaWZ0KFtyLnN0YXJ0KzEsci5zdGFydFRhZ0VuZC0yXSk6cy51bnNoaWZ0KFtyLnN0YXJ0KzEsci5zdGFydFRhZ0VuZC0xXSkscz10aGlzLmdldEF0dHJpYnV0ZUxldmVsUmFuZ2VzKGUscixpKS5jb25jYXQocyksc31yZXR1cm4hci5zdGFydFRhZ0VuZHx8IXIuZW5kVGFnU3RhcnQ/czoocy51bnNoaWZ0KFtyLnN0YXJ0LHIuZW5kXSksci5zdGFydDxpJiZpPHIuc3RhcnRUYWdFbmQ/KHMudW5zaGlmdChbci5zdGFydCsxLHIuc3RhcnRUYWdFbmQtMV0pLHM9dGhpcy5nZXRBdHRyaWJ1dGVMZXZlbFJhbmdlcyhlLHIsaSkuY29uY2F0KHMpLHMpOnIuc3RhcnRUYWdFbmQ8PWkmJmk8PXIuZW5kVGFnU3RhcnQ/KHMudW5zaGlmdChbci5zdGFydFRhZ0VuZCxyLmVuZFRhZ1N0YXJ0XSkscyk6KGk+PXIuZW5kVGFnU3RhcnQrMiYmcy51bnNoaWZ0KFtyLmVuZFRhZ1N0YXJ0KzIsci5lbmQtMV0pLHMpKX1nZXRBbGxQYXJlbnRUYWdSYW5nZXMoZSl7bGV0IHQ9ZTtjb25zdCBuPVtdO2Zvcig7dC5wYXJlbnQ7KXQ9dC5wYXJlbnQsdGhpcy5nZXROb2RlUmFuZ2VzKHQpLmZvckVhY2goaT0+bi5wdXNoKGkpKTtyZXR1cm4gbn1nZXROb2RlUmFuZ2VzKGUpe3JldHVybiBlLnN0YXJ0VGFnRW5kJiZlLmVuZFRhZ1N0YXJ0JiZlLnN0YXJ0VGFnRW5kPGUuZW5kVGFnU3RhcnQ/W1tlLnN0YXJ0VGFnRW5kLGUuZW5kVGFnU3RhcnRdLFtlLnN0YXJ0LGUuZW5kXV06W1tlLnN0YXJ0LGUuZW5kXV19Z2V0QXR0cmlidXRlTGV2ZWxSYW5nZXMoZSx0LG4pe2NvbnN0IGk9JC5jcmVhdGUoZS5wb3NpdGlvbkF0KHQuc3RhcnQpLGUucG9zaXRpb25BdCh0LmVuZCkpLHI9ZS5nZXRUZXh0KGkpLHM9bi10LnN0YXJ0LGE9YmUocik7bGV0IGw9YS5zY2FuKCk7Y29uc3Qgbz10LnN0YXJ0LHU9W107bGV0IGM9ITEsZD0tMTtmb3IoO2whPT16LkVPUzspe3N3aXRjaChsKXtjYXNlIHouQXR0cmlidXRlTmFtZTp7aWYoczxhLmdldFRva2VuT2Zmc2V0KCkpe2M9ITE7YnJlYWt9czw9YS5nZXRUb2tlbkVuZCgpJiZ1LnVuc2hpZnQoW2EuZ2V0VG9rZW5PZmZzZXQoKSxhLmdldFRva2VuRW5kKCldKSxjPSEwLGQ9YS5nZXRUb2tlbk9mZnNldCgpO2JyZWFrfWNhc2Ugei5BdHRyaWJ1dGVWYWx1ZTp7aWYoIWMpYnJlYWs7Y29uc3QgbT1hLmdldFRva2VuVGV4dCgpO2lmKHM8YS5nZXRUb2tlbk9mZnNldCgpKXt1LnB1c2goW2QsYS5nZXRUb2tlbkVuZCgpXSk7YnJlYWt9cz49YS5nZXRUb2tlbk9mZnNldCgpJiZzPD1hLmdldFRva2VuRW5kKCkmJih1LnVuc2hpZnQoW2EuZ2V0VG9rZW5PZmZzZXQoKSxhLmdldFRva2VuRW5kKCldKSwobVswXT09PSciJyYmbVttLmxlbmd0aC0xXT09PSciJ3x8bVswXT09PSInIiYmbVttLmxlbmd0aC0xXT09PSInIikmJnM+PWEuZ2V0VG9rZW5PZmZzZXQoKSsxJiZzPD1hLmdldFRva2VuRW5kKCktMSYmdS51bnNoaWZ0KFthLmdldFRva2VuT2Zmc2V0KCkrMSxhLmdldFRva2VuRW5kKCktMV0pLHUucHVzaChbZCxhLmdldFRva2VuRW5kKCldKSk7YnJlYWt9fWw9YS5zY2FuKCl9cmV0dXJuIHUubWFwKG09PlttWzBdK28sbVsxXStvXSl9fSxuaD17dmVyc2lvbjoxLjEsdGFnczpbe25hbWU6Imh0bWwiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlRoZSBodG1sIGVsZW1lbnQgcmVwcmVzZW50cyB0aGUgcm9vdCBvZiBhbiBIVE1MIGRvY3VtZW50LiJ9LGF0dHJpYnV0ZXM6W3tuYW1lOiJtYW5pZmVzdCIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiU3BlY2lmaWVzIHRoZSBVUkkgb2YgYSByZXNvdXJjZSBtYW5pZmVzdCBpbmRpY2F0aW5nIHJlc291cmNlcyB0aGF0IHNob3VsZCBiZSBjYWNoZWQgbG9jYWxseS4gU2VlIFtVc2luZyB0aGUgYXBwbGljYXRpb24gY2FjaGVdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvVXNpbmdfdGhlX2FwcGxpY2F0aW9uX2NhY2hlKSBmb3IgZGV0YWlscy4ifX0se25hbWU6InZlcnNpb24iLGRlc2NyaXB0aW9uOidTcGVjaWZpZXMgdGhlIHZlcnNpb24gb2YgdGhlIEhUTUwgW0RvY3VtZW50IFR5cGUgRGVmaW5pdGlvbl0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9HbG9zc2FyeS9EVEQgIkRvY3VtZW50IFR5cGUgRGVmaW5pdGlvbjogSW4gSFRNTCwgdGhlIGRvY3R5cGUgaXMgdGhlIHJlcXVpcmVkICI8IURPQ1RZUEUgaHRtbD4iIHByZWFtYmxlIGZvdW5kIGF0IHRoZSB0b3Agb2YgYWxsIGRvY3VtZW50cy4gSXRzIHNvbGUgcHVycG9zZSBpcyB0byBwcmV2ZW50IGEgYnJvd3NlciBmcm9tIHN3aXRjaGluZyBpbnRvIHNvLWNhbGxlZCDigJxxdWlya3MgbW9kZeKAnSB3aGVuIHJlbmRlcmluZyBhIGRvY3VtZW50OyB0aGF0IGlzLCB0aGUgIjwhRE9DVFlQRSBodG1sPiIgZG9jdHlwZSBlbnN1cmVzIHRoYXQgdGhlIGJyb3dzZXIgbWFrZXMgYSBiZXN0LWVmZm9ydCBhdHRlbXB0IGF0IGZvbGxvd2luZyB0aGUgcmVsZXZhbnQgc3BlY2lmaWNhdGlvbnMsIHJhdGhlciB0aGFuIHVzaW5nIGEgZGlmZmVyZW50IHJlbmRlcmluZyBtb2RlIHRoYXQgaXMgaW5jb21wYXRpYmxlIHdpdGggc29tZSBzcGVjaWZpY2F0aW9ucy4iKSB0aGF0IGdvdmVybnMgdGhlIGN1cnJlbnQgZG9jdW1lbnQuIFRoaXMgYXR0cmlidXRlIGlzIG5vdCBuZWVkZWQsIGJlY2F1c2UgaXQgaXMgcmVkdW5kYW50IHdpdGggdGhlIHZlcnNpb24gaW5mb3JtYXRpb24gaW4gdGhlIGRvY3VtZW50IHR5cGUgZGVjbGFyYXRpb24uJ30se25hbWU6InhtbG5zIixkZXNjcmlwdGlvbjonU3BlY2lmaWVzIHRoZSBYTUwgTmFtZXNwYWNlIG9mIHRoZSBkb2N1bWVudC4gRGVmYXVsdCB2YWx1ZSBpcyBgImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiYC4gVGhpcyBpcyByZXF1aXJlZCBpbiBkb2N1bWVudHMgcGFyc2VkIHdpdGggWE1MIHBhcnNlcnMsIGFuZCBvcHRpb25hbCBpbiB0ZXh0L2h0bWwgZG9jdW1lbnRzLid9XSxyZWZlcmVuY2VzOlt7bmFtZToiTUROIFJlZmVyZW5jZSIsdXJsOiJodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvaHRtbCJ9XX0se25hbWU6ImhlYWQiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlRoZSBoZWFkIGVsZW1lbnQgcmVwcmVzZW50cyBhIGNvbGxlY3Rpb24gb2YgbWV0YWRhdGEgZm9yIHRoZSBEb2N1bWVudC4ifSxhdHRyaWJ1dGVzOlt7bmFtZToicHJvZmlsZSIsZGVzY3JpcHRpb246IlRoZSBVUklzIG9mIG9uZSBvciBtb3JlIG1ldGFkYXRhIHByb2ZpbGVzLCBzZXBhcmF0ZWQgYnkgd2hpdGUgc3BhY2UuIn1dLHJlZmVyZW5jZXM6W3tuYW1lOiJNRE4gUmVmZXJlbmNlIix1cmw6Imh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9oZWFkIn1dfSx7bmFtZToidGl0bGUiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlRoZSB0aXRsZSBlbGVtZW50IHJlcHJlc2VudHMgdGhlIGRvY3VtZW50J3MgdGl0bGUgb3IgbmFtZS4gQXV0aG9ycyBzaG91bGQgdXNlIHRpdGxlcyB0aGF0IGlkZW50aWZ5IHRoZWlyIGRvY3VtZW50cyBldmVuIHdoZW4gdGhleSBhcmUgdXNlZCBvdXQgb2YgY29udGV4dCwgZm9yIGV4YW1wbGUgaW4gYSB1c2VyJ3MgaGlzdG9yeSBvciBib29rbWFya3MsIG9yIGluIHNlYXJjaCByZXN1bHRzLiBUaGUgZG9jdW1lbnQncyB0aXRsZSBpcyBvZnRlbiBkaWZmZXJlbnQgZnJvbSBpdHMgZmlyc3QgaGVhZGluZywgc2luY2UgdGhlIGZpcnN0IGhlYWRpbmcgZG9lcyBub3QgaGF2ZSB0byBzdGFuZCBhbG9uZSB3aGVuIHRha2VuIG91dCBvZiBjb250ZXh0LiJ9LGF0dHJpYnV0ZXM6W10scmVmZXJlbmNlczpbe25hbWU6Ik1ETiBSZWZlcmVuY2UiLHVybDoiaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvSFRNTC9FbGVtZW50L3RpdGxlIn1dfSx7bmFtZToiYmFzZSIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiVGhlIGJhc2UgZWxlbWVudCBhbGxvd3MgYXV0aG9ycyB0byBzcGVjaWZ5IHRoZSBkb2N1bWVudCBiYXNlIFVSTCBmb3IgdGhlIHB1cnBvc2VzIG9mIHJlc29sdmluZyByZWxhdGl2ZSBVUkxzLCBhbmQgdGhlIG5hbWUgb2YgdGhlIGRlZmF1bHQgYnJvd3NpbmcgY29udGV4dCBmb3IgdGhlIHB1cnBvc2VzIG9mIGZvbGxvd2luZyBoeXBlcmxpbmtzLiBUaGUgZWxlbWVudCBkb2VzIG5vdCByZXByZXNlbnQgYW55IGNvbnRlbnQgYmV5b25kIHRoaXMgaW5mb3JtYXRpb24uIn0sdm9pZDohMCxhdHRyaWJ1dGVzOlt7bmFtZToiaHJlZiIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiVGhlIGJhc2UgVVJMIHRvIGJlIHVzZWQgdGhyb3VnaG91dCB0aGUgZG9jdW1lbnQgZm9yIHJlbGF0aXZlIFVSTCBhZGRyZXNzZXMuIElmIHRoaXMgYXR0cmlidXRlIGlzIHNwZWNpZmllZCwgdGhpcyBlbGVtZW50IG11c3QgY29tZSBiZWZvcmUgYW55IG90aGVyIGVsZW1lbnRzIHdpdGggYXR0cmlidXRlcyB3aG9zZSB2YWx1ZXMgYXJlIFVSTHMuIEFic29sdXRlIGFuZCByZWxhdGl2ZSBVUkxzIGFyZSBhbGxvd2VkLiJ9fSx7bmFtZToidGFyZ2V0Iix2YWx1ZVNldDoidGFyZ2V0IixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJBIG5hbWUgb3Iga2V5d29yZCBpbmRpY2F0aW5nIHRoZSBkZWZhdWx0IGxvY2F0aW9uIHRvIGRpc3BsYXkgdGhlIHJlc3VsdCB3aGVuIGh5cGVybGlua3Mgb3IgZm9ybXMgY2F1c2UgbmF2aWdhdGlvbiwgZm9yIGVsZW1lbnRzIHRoYXQgZG8gbm90IGhhdmUgYW4gZXhwbGljaXQgdGFyZ2V0IHJlZmVyZW5jZS4gSXQgaXMgYSBuYW1lIG9mLCBvciBrZXl3b3JkIGZvciwgYSBfYnJvd3NpbmcgY29udGV4dF8gKGZvciBleGFtcGxlOiB0YWIsIHdpbmRvdywgb3IgaW5saW5lIGZyYW1lKS4gVGhlIGZvbGxvd2luZyBrZXl3b3JkcyBoYXZlIHNwZWNpYWwgbWVhbmluZ3M6XG5cbiogICBgX3NlbGZgOiBMb2FkIHRoZSByZXN1bHQgaW50byB0aGUgc2FtZSBicm93c2luZyBjb250ZXh0IGFzIHRoZSBjdXJyZW50IG9uZS4gVGhpcyB2YWx1ZSBpcyB0aGUgZGVmYXVsdCBpZiB0aGUgYXR0cmlidXRlIGlzIG5vdCBzcGVjaWZpZWQuXG4qICAgYF9ibGFua2A6IExvYWQgdGhlIHJlc3VsdCBpbnRvIGEgbmV3IHVubmFtZWQgYnJvd3NpbmcgY29udGV4dC5cbiogICBgX3BhcmVudGA6IExvYWQgdGhlIHJlc3VsdCBpbnRvIHRoZSBwYXJlbnQgYnJvd3NpbmcgY29udGV4dCBvZiB0aGUgY3VycmVudCBvbmUuIElmIHRoZXJlIGlzIG5vIHBhcmVudCwgdGhpcyBvcHRpb24gYmVoYXZlcyB0aGUgc2FtZSB3YXkgYXMgYF9zZWxmYC5cbiogICBgX3RvcGA6IExvYWQgdGhlIHJlc3VsdCBpbnRvIHRoZSB0b3AtbGV2ZWwgYnJvd3NpbmcgY29udGV4dCAodGhhdCBpcywgdGhlIGJyb3dzaW5nIGNvbnRleHQgdGhhdCBpcyBhbiBhbmNlc3RvciBvZiB0aGUgY3VycmVudCBvbmUsIGFuZCBoYXMgbm8gcGFyZW50KS4gSWYgdGhlcmUgaXMgbm8gcGFyZW50LCB0aGlzIG9wdGlvbiBiZWhhdmVzIHRoZSBzYW1lIHdheSBhcyBgX3NlbGZgLlxuXG5JZiB0aGlzIGF0dHJpYnV0ZSBpcyBzcGVjaWZpZWQsIHRoaXMgZWxlbWVudCBtdXN0IGNvbWUgYmVmb3JlIGFueSBvdGhlciBlbGVtZW50cyB3aXRoIGF0dHJpYnV0ZXMgd2hvc2UgdmFsdWVzIGFyZSBVUkxzLiJ9fV0scmVmZXJlbmNlczpbe25hbWU6Ik1ETiBSZWZlcmVuY2UiLHVybDoiaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2Jhc2UifV19LHtuYW1lOiJsaW5rIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJUaGUgbGluayBlbGVtZW50IGFsbG93cyBhdXRob3JzIHRvIGxpbmsgdGhlaXIgZG9jdW1lbnQgdG8gb3RoZXIgcmVzb3VyY2VzLiJ9LHZvaWQ6ITAsYXR0cmlidXRlczpbe25hbWU6ImhyZWYiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6J1RoaXMgYXR0cmlidXRlIHNwZWNpZmllcyB0aGUgW1VSTF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9HbG9zc2FyeS9VUkwgIlVSTDogVW5pZm9ybSBSZXNvdXJjZSBMb2NhdG9yIChVUkwpIGlzIGEgdGV4dCBzdHJpbmcgc3BlY2lmeWluZyB3aGVyZSBhIHJlc291cmNlIGNhbiBiZSBmb3VuZCBvbiB0aGUgSW50ZXJuZXQuIikgb2YgdGhlIGxpbmtlZCByZXNvdXJjZS4gQSBVUkwgY2FuIGJlIGFic29sdXRlIG9yIHJlbGF0aXZlLid9fSx7bmFtZToiY3Jvc3NvcmlnaW4iLHZhbHVlU2V0OiJ4byIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZTonVGhpcyBlbnVtZXJhdGVkIGF0dHJpYnV0ZSBpbmRpY2F0ZXMgd2hldGhlciBbQ09SU10oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9HbG9zc2FyeS9DT1JTICJDT1JTOiBDT1JTIChDcm9zcy1PcmlnaW4gUmVzb3VyY2UgU2hhcmluZykgaXMgYSBzeXN0ZW0sIGNvbnNpc3Rpbmcgb2YgdHJhbnNtaXR0aW5nIEhUVFAgaGVhZGVycywgdGhhdCBkZXRlcm1pbmVzIHdoZXRoZXIgYnJvd3NlcnMgYmxvY2sgZnJvbnRlbmQgSmF2YVNjcmlwdCBjb2RlIGZyb20gYWNjZXNzaW5nIHJlc3BvbnNlcyBmb3IgY3Jvc3Mtb3JpZ2luIHJlcXVlc3RzLiIpIG11c3QgYmUgdXNlZCB3aGVuIGZldGNoaW5nIHRoZSByZXNvdXJjZS4gW0NPUlMtZW5hYmxlZCBpbWFnZXNdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvQ09SU19FbmFibGVkX0ltYWdlKSBjYW4gYmUgcmV1c2VkIGluIHRoZSBbYDxjYW52YXM+YF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2NhbnZhcyAiVXNlIHRoZSBIVE1MIDxjYW52YXM+IGVsZW1lbnQgd2l0aCBlaXRoZXIgdGhlIGNhbnZhcyBzY3JpcHRpbmcgQVBJIG9yIHRoZSBXZWJHTCBBUEkgdG8gZHJhdyBncmFwaGljcyBhbmQgYW5pbWF0aW9ucy4iKSBlbGVtZW50IHdpdGhvdXQgYmVpbmcgX3RhaW50ZWRfLiBUaGUgYWxsb3dlZCB2YWx1ZXMgYXJlOlxuXG5gYW5vbnltb3VzYFxuXG5BIGNyb3NzLW9yaWdpbiByZXF1ZXN0IChpLmUuIHdpdGggYW4gW2BPcmlnaW5gXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVFRQL0hlYWRlcnMvT3JpZ2luICJUaGUgT3JpZ2luIHJlcXVlc3QgaGVhZGVyIGluZGljYXRlcyB3aGVyZSBhIGZldGNoIG9yaWdpbmF0ZXMgZnJvbS4gSXQgZG9lc25cJ3QgaW5jbHVkZSBhbnkgcGF0aCBpbmZvcm1hdGlvbiwgYnV0IG9ubHkgdGhlIHNlcnZlciBuYW1lLiBJdCBpcyBzZW50IHdpdGggQ09SUyByZXF1ZXN0cywgYXMgd2VsbCBhcyB3aXRoIFBPU1QgcmVxdWVzdHMuIEl0IGlzIHNpbWlsYXIgdG8gdGhlIFJlZmVyZXIgaGVhZGVyLCBidXQsIHVubGlrZSB0aGlzIGhlYWRlciwgaXQgZG9lc25cJ3QgZGlzY2xvc2UgdGhlIHdob2xlIHBhdGguIikgSFRUUCBoZWFkZXIpIGlzIHBlcmZvcm1lZCwgYnV0IG5vIGNyZWRlbnRpYWwgaXMgc2VudCAoaS5lLiBubyBjb29raWUsIFguNTA5IGNlcnRpZmljYXRlLCBvciBIVFRQIEJhc2ljIGF1dGhlbnRpY2F0aW9uKS4gSWYgdGhlIHNlcnZlciBkb2VzIG5vdCBnaXZlIGNyZWRlbnRpYWxzIHRvIHRoZSBvcmlnaW4gc2l0ZSAoYnkgbm90IHNldHRpbmcgdGhlIFtgQWNjZXNzLUNvbnRyb2wtQWxsb3ctT3JpZ2luYF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRUUC9IZWFkZXJzL0FjY2Vzcy1Db250cm9sLUFsbG93LU9yaWdpbiAiVGhlIEFjY2Vzcy1Db250cm9sLUFsbG93LU9yaWdpbiByZXNwb25zZSBoZWFkZXIgaW5kaWNhdGVzIHdoZXRoZXIgdGhlIHJlc3BvbnNlIGNhbiBiZSBzaGFyZWQgd2l0aCByZXF1ZXN0aW5nIGNvZGUgZnJvbSB0aGUgZ2l2ZW4gb3JpZ2luLiIpIEhUVFAgaGVhZGVyKSB0aGUgaW1hZ2Ugd2lsbCBiZSB0YWludGVkIGFuZCBpdHMgdXNhZ2UgcmVzdHJpY3RlZC5cblxuYHVzZS1jcmVkZW50aWFsc2BcblxuQSBjcm9zcy1vcmlnaW4gcmVxdWVzdCAoaS5lLiB3aXRoIGFuIGBPcmlnaW5gIEhUVFAgaGVhZGVyKSBpcyBwZXJmb3JtZWQgYWxvbmcgd2l0aCBhIGNyZWRlbnRpYWwgc2VudCAoaS5lLiBhIGNvb2tpZSwgY2VydGlmaWNhdGUsIGFuZC9vciBIVFRQIEJhc2ljIGF1dGhlbnRpY2F0aW9uIGlzIHBlcmZvcm1lZCkuIElmIHRoZSBzZXJ2ZXIgZG9lcyBub3QgZ2l2ZSBjcmVkZW50aWFscyB0byB0aGUgb3JpZ2luIHNpdGUgKHRocm91Z2ggW2BBY2Nlc3MtQ29udHJvbC1BbGxvdy1DcmVkZW50aWFsc2BdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUVFAvSGVhZGVycy9BY2Nlc3MtQ29udHJvbC1BbGxvdy1DcmVkZW50aWFscyAiVGhlIEFjY2Vzcy1Db250cm9sLUFsbG93LUNyZWRlbnRpYWxzIHJlc3BvbnNlIGhlYWRlciB0ZWxscyBicm93c2VycyB3aGV0aGVyIHRvIGV4cG9zZSB0aGUgcmVzcG9uc2UgdG8gZnJvbnRlbmQgSmF2YVNjcmlwdCBjb2RlIHdoZW4gdGhlIHJlcXVlc3RcJ3MgY3JlZGVudGlhbHMgbW9kZSAoUmVxdWVzdC5jcmVkZW50aWFscykgaXMgImluY2x1ZGUiLiIpIEhUVFAgaGVhZGVyKSwgdGhlIHJlc291cmNlIHdpbGwgYmUgX3RhaW50ZWRfIGFuZCBpdHMgdXNhZ2UgcmVzdHJpY3RlZC5cblxuSWYgdGhlIGF0dHJpYnV0ZSBpcyBub3QgcHJlc2VudCwgdGhlIHJlc291cmNlIGlzIGZldGNoZWQgd2l0aG91dCBhIFtDT1JTXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL0dsb3NzYXJ5L0NPUlMgIkNPUlM6IENPUlMgKENyb3NzLU9yaWdpbiBSZXNvdXJjZSBTaGFyaW5nKSBpcyBhIHN5c3RlbSwgY29uc2lzdGluZyBvZiB0cmFuc21pdHRpbmcgSFRUUCBoZWFkZXJzLCB0aGF0IGRldGVybWluZXMgd2hldGhlciBicm93c2VycyBibG9jayBmcm9udGVuZCBKYXZhU2NyaXB0IGNvZGUgZnJvbSBhY2Nlc3NpbmcgcmVzcG9uc2VzIGZvciBjcm9zcy1vcmlnaW4gcmVxdWVzdHMuIikgcmVxdWVzdCAoaS5lLiB3aXRob3V0IHNlbmRpbmcgdGhlIGBPcmlnaW5gIEhUVFAgaGVhZGVyKSwgcHJldmVudGluZyBpdHMgbm9uLXRhaW50ZWQgdXNhZ2UuIElmIGludmFsaWQsIGl0IGlzIGhhbmRsZWQgYXMgaWYgdGhlIGVudW1lcmF0ZWQga2V5d29yZCAqKmFub255bW91cyoqIHdhcyB1c2VkLiBTZWUgW0NPUlMgc2V0dGluZ3MgYXR0cmlidXRlc10oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9DT1JTX3NldHRpbmdzX2F0dHJpYnV0ZXMpIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uLid9fSx7bmFtZToicmVsIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJUaGlzIGF0dHJpYnV0ZSBuYW1lcyBhIHJlbGF0aW9uc2hpcCBvZiB0aGUgbGlua2VkIGRvY3VtZW50IHRvIHRoZSBjdXJyZW50IGRvY3VtZW50LiBUaGUgYXR0cmlidXRlIG11c3QgYmUgYSBzcGFjZS1zZXBhcmF0ZWQgbGlzdCBvZiB0aGUgW2xpbmsgdHlwZXMgdmFsdWVzXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0xpbmtfdHlwZXMpLiJ9fSx7bmFtZToibWVkaWEiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlRoaXMgYXR0cmlidXRlIHNwZWNpZmllcyB0aGUgbWVkaWEgdGhhdCB0aGUgbGlua2VkIHJlc291cmNlIGFwcGxpZXMgdG8uIEl0cyB2YWx1ZSBtdXN0IGJlIGEgbWVkaWEgdHlwZSAvIFttZWRpYSBxdWVyeV0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQ1NTL01lZGlhX3F1ZXJpZXMpLiBUaGlzIGF0dHJpYnV0ZSBpcyBtYWlubHkgdXNlZnVsIHdoZW4gbGlua2luZyB0byBleHRlcm5hbCBzdHlsZXNoZWV0cyDigJQgaXQgYWxsb3dzIHRoZSB1c2VyIGFnZW50IHRvIHBpY2sgdGhlIGJlc3QgYWRhcHRlZCBvbmUgZm9yIHRoZSBkZXZpY2UgaXQgcnVucyBvbi5cblxuKipOb3RlczoqKlxuXG4qICAgSW4gSFRNTCA0LCB0aGlzIGNhbiBvbmx5IGJlIGEgc2ltcGxlIHdoaXRlLXNwYWNlLXNlcGFyYXRlZCBsaXN0IG9mIG1lZGlhIGRlc2NyaXB0aW9uIGxpdGVyYWxzLCBpLmUuLCBbbWVkaWEgdHlwZXMgYW5kIGdyb3Vwc10oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQ1NTL0BtZWRpYSksIHdoZXJlIGRlZmluZWQgYW5kIGFsbG93ZWQgYXMgdmFsdWVzIGZvciB0aGlzIGF0dHJpYnV0ZSwgc3VjaCBhcyBgcHJpbnRgLCBgc2NyZWVuYCwgYGF1cmFsYCwgYGJyYWlsbGVgLiBIVE1MNSBleHRlbmRlZCB0aGlzIHRvIGFueSBraW5kIG9mIFttZWRpYSBxdWVyaWVzXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9DU1MvTWVkaWFfcXVlcmllcyksIHdoaWNoIGFyZSBhIHN1cGVyc2V0IG9mIHRoZSBhbGxvd2VkIHZhbHVlcyBvZiBIVE1MIDQuXG4qICAgQnJvd3NlcnMgbm90IHN1cHBvcnRpbmcgW0NTUzMgTWVkaWEgUXVlcmllc10oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQ1NTL01lZGlhX3F1ZXJpZXMpIHdvbid0IG5lY2Vzc2FyaWx5IHJlY29nbml6ZSB0aGUgYWRlcXVhdGUgbGluazsgZG8gbm90IGZvcmdldCB0byBzZXQgZmFsbGJhY2sgbGlua3MsIHRoZSByZXN0cmljdGVkIHNldCBvZiBtZWRpYSBxdWVyaWVzIGRlZmluZWQgaW4gSFRNTCA0LiJ9fSx7bmFtZToiaHJlZmxhbmciLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlRoaXMgYXR0cmlidXRlIGluZGljYXRlcyB0aGUgbGFuZ3VhZ2Ugb2YgdGhlIGxpbmtlZCByZXNvdXJjZS4gSXQgaXMgcHVyZWx5IGFkdmlzb3J5LiBBbGxvd2VkIHZhbHVlcyBhcmUgZGV0ZXJtaW5lZCBieSBbQkNQNDddKGh0dHBzOi8vd3d3LmlldGYub3JnL3JmYy9iY3AvYmNwNDcudHh0KS4gVXNlIHRoaXMgYXR0cmlidXRlIG9ubHkgaWYgdGhlIFtgaHJlZmBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9hI2F0dHItaHJlZikgYXR0cmlidXRlIGlzIHByZXNlbnQuIn19LHtuYW1lOiJ0eXBlIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOidUaGlzIGF0dHJpYnV0ZSBpcyB1c2VkIHRvIGRlZmluZSB0aGUgdHlwZSBvZiB0aGUgY29udGVudCBsaW5rZWQgdG8uIFRoZSB2YWx1ZSBvZiB0aGUgYXR0cmlidXRlIHNob3VsZCBiZSBhIE1JTUUgdHlwZSBzdWNoIGFzICoqdGV4dC9odG1sKiosICoqdGV4dC9jc3MqKiwgYW5kIHNvIG9uLiBUaGUgY29tbW9uIHVzZSBvZiB0aGlzIGF0dHJpYnV0ZSBpcyB0byBkZWZpbmUgdGhlIHR5cGUgb2Ygc3R5bGVzaGVldCBiZWluZyByZWZlcmVuY2VkIChzdWNoIGFzICoqdGV4dC9jc3MqKiksIGJ1dCBnaXZlbiB0aGF0IENTUyBpcyB0aGUgb25seSBzdHlsZXNoZWV0IGxhbmd1YWdlIHVzZWQgb24gdGhlIHdlYiwgbm90IG9ubHkgaXMgaXQgcG9zc2libGUgdG8gb21pdCB0aGUgYHR5cGVgIGF0dHJpYnV0ZSwgYnV0IGlzIGFjdHVhbGx5IG5vdyByZWNvbW1lbmRlZCBwcmFjdGljZS4gSXQgaXMgYWxzbyB1c2VkIG9uIGByZWw9InByZWxvYWQiYCBsaW5rIHR5cGVzLCB0byBtYWtlIHN1cmUgdGhlIGJyb3dzZXIgb25seSBkb3dubG9hZHMgZmlsZSB0eXBlcyB0aGF0IGl0IHN1cHBvcnRzLid9fSx7bmFtZToic2l6ZXMiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlRoaXMgYXR0cmlidXRlIGRlZmluZXMgdGhlIHNpemVzIG9mIHRoZSBpY29ucyBmb3IgdmlzdWFsIG1lZGlhIGNvbnRhaW5lZCBpbiB0aGUgcmVzb3VyY2UuIEl0IG11c3QgYmUgcHJlc2VudCBvbmx5IGlmIHRoZSBbYHJlbGBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9saW5rI2F0dHItcmVsKSBjb250YWlucyBhIHZhbHVlIG9mIGBpY29uYCBvciBhIG5vbi1zdGFuZGFyZCB0eXBlIHN1Y2ggYXMgQXBwbGUncyBgYXBwbGUtdG91Y2gtaWNvbmAuIEl0IG1heSBoYXZlIHRoZSBmb2xsb3dpbmcgdmFsdWVzOlxuXG4qICAgYGFueWAsIG1lYW5pbmcgdGhhdCB0aGUgaWNvbiBjYW4gYmUgc2NhbGVkIHRvIGFueSBzaXplIGFzIGl0IGlzIGluIGEgdmVjdG9yIGZvcm1hdCwgbGlrZSBgaW1hZ2Uvc3ZnK3htbGAuXG4qICAgYSB3aGl0ZS1zcGFjZSBzZXBhcmF0ZWQgbGlzdCBvZiBzaXplcywgZWFjaCBpbiB0aGUgZm9ybWF0IGBfPHdpZHRoIGluIHBpeGVscz5feF88aGVpZ2h0IGluIHBpeGVscz5fYCBvciBgXzx3aWR0aCBpbiBwaXhlbHM+X1hfPGhlaWdodCBpbiBwaXhlbHM+X2AuIEVhY2ggb2YgdGhlc2Ugc2l6ZXMgbXVzdCBiZSBjb250YWluZWQgaW4gdGhlIHJlc291cmNlLlxuXG4qKk5vdGU6KiogTW9zdCBpY29uIGZvcm1hdHMgYXJlIG9ubHkgYWJsZSB0byBzdG9yZSBvbmUgc2luZ2xlIGljb247IHRoZXJlZm9yZSBtb3N0IG9mIHRoZSB0aW1lIHRoZSBbYHNpemVzYF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9HbG9iYWxfYXR0cmlidXRlcyNhdHRyLXNpemVzKSBjb250YWlucyBvbmx5IG9uZSBlbnRyeS4gTVMncyBJQ08gZm9ybWF0IGRvZXMsIGFzIHdlbGwgYXMgQXBwbGUncyBJQ05TLiBJQ08gaXMgbW9yZSB1YmlxdWl0b3VzOyB5b3Ugc2hvdWxkIGRlZmluaXRlbHkgdXNlIGl0LiJ9fSx7bmFtZToiYXMiLGRlc2NyaXB0aW9uOidUaGlzIGF0dHJpYnV0ZSBpcyBvbmx5IHVzZWQgd2hlbiBgcmVsPSJwcmVsb2FkImAgb3IgYHJlbD0icHJlZmV0Y2giYCBoYXMgYmVlbiBzZXQgb24gdGhlIGA8bGluaz5gIGVsZW1lbnQuIEl0IHNwZWNpZmllcyB0aGUgdHlwZSBvZiBjb250ZW50IGJlaW5nIGxvYWRlZCBieSB0aGUgYDxsaW5rPmAsIHdoaWNoIGlzIG5lY2Vzc2FyeSBmb3IgY29udGVudCBwcmlvcml0aXphdGlvbiwgcmVxdWVzdCBtYXRjaGluZywgYXBwbGljYXRpb24gb2YgY29ycmVjdCBbY29udGVudCBzZWN1cml0eSBwb2xpY3ldKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUVFAvQ1NQKSwgYW5kIHNldHRpbmcgb2YgY29ycmVjdCBbYEFjY2VwdGBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUVFAvSGVhZGVycy9BY2NlcHQgIlRoZSBBY2NlcHQgcmVxdWVzdCBIVFRQIGhlYWRlciBhZHZlcnRpc2VzIHdoaWNoIGNvbnRlbnQgdHlwZXMsIGV4cHJlc3NlZCBhcyBNSU1FIHR5cGVzLCB0aGUgY2xpZW50IGlzIGFibGUgdG8gdW5kZXJzdGFuZC4gVXNpbmcgY29udGVudCBuZWdvdGlhdGlvbiwgdGhlIHNlcnZlciB0aGVuIHNlbGVjdHMgb25lIG9mIHRoZSBwcm9wb3NhbHMsIHVzZXMgaXQgYW5kIGluZm9ybXMgdGhlIGNsaWVudCBvZiBpdHMgY2hvaWNlIHdpdGggdGhlIENvbnRlbnQtVHlwZSByZXNwb25zZSBoZWFkZXIuIEJyb3dzZXJzIHNldCBhZGVxdWF0ZSB2YWx1ZXMgZm9yIHRoaXMgaGVhZGVyIGRlcGVuZGluZyBvbsKgdGhlIGNvbnRleHQgd2hlcmUgdGhlIHJlcXVlc3QgaXMgZG9uZTogd2hlbiBmZXRjaGluZyBhIENTUyBzdHlsZXNoZWV0IGEgZGlmZmVyZW50IHZhbHVlIGlzIHNldCBmb3IgdGhlIHJlcXVlc3QgdGhhbiB3aGVuIGZldGNoaW5nIGFuIGltYWdlLMKgdmlkZW8gb3IgYSBzY3JpcHQuIikgcmVxdWVzdCBoZWFkZXIuJ30se25hbWU6ImltcG9ydGFuY2UiLGRlc2NyaXB0aW9uOiJJbmRpY2F0ZXMgdGhlIHJlbGF0aXZlIGltcG9ydGFuY2Ugb2YgdGhlIHJlc291cmNlLiBQcmlvcml0eSBoaW50cyBhcmUgZGVsZWdhdGVkIHVzaW5nIHRoZSB2YWx1ZXM6In0se25hbWU6ImltcG9ydGFuY2UiLGRlc2NyaXB0aW9uOicqKmBhdXRvYCoqOiBJbmRpY2F0ZXPCoCoqbm/CoHByZWZlcmVuY2UqKi4gVGhlIGJyb3dzZXIgbWF5IHVzZSBpdHMgb3duIGhldXJpc3RpY3MgdG8gZGVjaWRlIHRoZSBwcmlvcml0eSBvZiB0aGUgcmVzb3VyY2UuXG5cbioqYGhpZ2hgKio6IEluZGljYXRlcyB0byB0aGXCoGJyb3dzZXLCoHRoYXQgdGhlIHJlc291cmNlIGlzIG9mwqAqKmhpZ2gqKiBwcmlvcml0eS5cblxuKipgbG93YCoqOsKgSW5kaWNhdGVzIHRvIHRoZcKgYnJvd3NlcsKgdGhhdCB0aGUgcmVzb3VyY2UgaXMgb2bCoCoqbG93KiogcHJpb3JpdHkuXG5cbioqTm90ZToqKiBUaGUgYGltcG9ydGFuY2VgIGF0dHJpYnV0ZSBtYXkgb25seSBiZSB1c2VkIGZvciB0aGUgYDxsaW5rPmAgZWxlbWVudCBpZiBgcmVsPSJwcmVsb2FkImAgb3IgYHJlbD0icHJlZmV0Y2giYCBpcyBwcmVzZW50Lid9LHtuYW1lOiJpbnRlZ3JpdHkiLGRlc2NyaXB0aW9uOiJDb250YWlucyBpbmxpbmUgbWV0YWRhdGEg4oCUIGEgYmFzZTY0LWVuY29kZWQgY3J5cHRvZ3JhcGhpYyBoYXNoIG9mIHRoZSByZXNvdXJjZSAoZmlsZSkgeW914oCZcmUgdGVsbGluZyB0aGUgYnJvd3NlciB0byBmZXRjaC4gVGhlIGJyb3dzZXIgY2FuIHVzZSB0aGlzIHRvIHZlcmlmeSB0aGF0IHRoZSBmZXRjaGVkIHJlc291cmNlIGhhcyBiZWVuIGRlbGl2ZXJlZCBmcmVlIG9mIHVuZXhwZWN0ZWQgbWFuaXB1bGF0aW9uLiBTZWUgW1N1YnJlc291cmNlIEludGVncml0eV0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvU2VjdXJpdHkvU3VicmVzb3VyY2VfSW50ZWdyaXR5KS4ifSx7bmFtZToicmVmZXJyZXJwb2xpY3kiLGRlc2NyaXB0aW9uOidBIHN0cmluZyBpbmRpY2F0aW5nIHdoaWNoIHJlZmVycmVyIHRvIHVzZSB3aGVuIGZldGNoaW5nIHRoZSByZXNvdXJjZTpcblxuKiAgIGBuby1yZWZlcnJlcmAgbWVhbnMgdGhhdCB0aGUgW2BSZWZlcmVyYF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRUUC9IZWFkZXJzL1JlZmVyZXIgIlRoZSBSZWZlcmVyIHJlcXVlc3QgaGVhZGVyIGNvbnRhaW5zIHRoZSBhZGRyZXNzIG9mIHRoZSBwcmV2aW91cyB3ZWIgcGFnZSBmcm9tIHdoaWNoIGEgbGluayB0byB0aGUgY3VycmVudGx5IHJlcXVlc3RlZCBwYWdlIHdhcyBmb2xsb3dlZC4gVGhlIFJlZmVyZXIgaGVhZGVyIGFsbG93cyBzZXJ2ZXJzIHRvIGlkZW50aWZ5IHdoZXJlIHBlb3BsZSBhcmUgdmlzaXRpbmcgdGhlbSBmcm9tIGFuZCBtYXkgdXNlIHRoYXQgZGF0YSBmb3IgYW5hbHl0aWNzLCBsb2dnaW5nLCBvciBvcHRpbWl6ZWQgY2FjaGluZywgZm9yIGV4YW1wbGUuIikgaGVhZGVyIHdpbGwgbm90IGJlIHNlbnQuXG4qICAgYG5vLXJlZmVycmVyLXdoZW4tZG93bmdyYWRlYCBtZWFucyB0aGF0IG5vIFtgUmVmZXJlcmBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUVFAvSGVhZGVycy9SZWZlcmVyICJUaGUgUmVmZXJlciByZXF1ZXN0IGhlYWRlciBjb250YWlucyB0aGUgYWRkcmVzcyBvZiB0aGUgcHJldmlvdXMgd2ViIHBhZ2UgZnJvbSB3aGljaCBhIGxpbmsgdG8gdGhlIGN1cnJlbnRseSByZXF1ZXN0ZWQgcGFnZSB3YXMgZm9sbG93ZWQuIFRoZSBSZWZlcmVyIGhlYWRlciBhbGxvd3Mgc2VydmVycyB0byBpZGVudGlmeSB3aGVyZSBwZW9wbGUgYXJlIHZpc2l0aW5nIHRoZW0gZnJvbSBhbmQgbWF5IHVzZSB0aGF0IGRhdGEgZm9yIGFuYWx5dGljcywgbG9nZ2luZywgb3Igb3B0aW1pemVkIGNhY2hpbmcsIGZvciBleGFtcGxlLiIpIGhlYWRlciB3aWxsIGJlIHNlbnQgd2hlbiBuYXZpZ2F0aW5nIHRvIGFuIG9yaWdpbiB3aXRob3V0IFRMUyAoSFRUUFMpLiBUaGlzIGlzIGEgdXNlciBhZ2VudOKAmXMgZGVmYXVsdCBiZWhhdmlvciwgaWYgbm8gcG9saWN5IGlzIG90aGVyd2lzZSBzcGVjaWZpZWQuXG4qICAgYG9yaWdpbmAgbWVhbnMgdGhhdCB0aGUgcmVmZXJyZXIgd2lsbCBiZSB0aGUgb3JpZ2luIG9mIHRoZSBwYWdlLCB3aGljaCBpcyByb3VnaGx5IHRoZSBzY2hlbWUsIHRoZSBob3N0LCBhbmQgdGhlIHBvcnQuXG4qICAgYG9yaWdpbi13aGVuLWNyb3NzLW9yaWdpbmAgbWVhbnMgdGhhdCBuYXZpZ2F0aW5nIHRvIG90aGVyIG9yaWdpbnMgd2lsbCBiZSBsaW1pdGVkIHRvIHRoZSBzY2hlbWUsIHRoZSBob3N0LCBhbmQgdGhlIHBvcnQsIHdoaWxlIG5hdmlnYXRpbmcgb24gdGhlIHNhbWUgb3JpZ2luIHdpbGwgaW5jbHVkZSB0aGUgcmVmZXJyZXJcJ3MgcGF0aC5cbiogICBgdW5zYWZlLXVybGAgbWVhbnMgdGhhdCB0aGUgcmVmZXJyZXIgd2lsbCBpbmNsdWRlIHRoZSBvcmlnaW4gYW5kIHRoZSBwYXRoIChidXQgbm90IHRoZSBmcmFnbWVudCwgcGFzc3dvcmQsIG9yIHVzZXJuYW1lKS4gVGhpcyBjYXNlIGlzIHVuc2FmZSBiZWNhdXNlIGl0IGNhbiBsZWFrIG9yaWdpbnMgYW5kIHBhdGhzIGZyb20gVExTLXByb3RlY3RlZCByZXNvdXJjZXMgdG8gaW5zZWN1cmUgb3JpZ2lucy4nfSx7bmFtZToidGl0bGUiLGRlc2NyaXB0aW9uOidUaGUgYHRpdGxlYCBhdHRyaWJ1dGUgaGFzIHNwZWNpYWwgc2VtYW50aWNzIG9uIHRoZSBgPGxpbms+YCBlbGVtZW50LiBXaGVuIHVzZWQgb24gYSBgPGxpbmsgcmVsPSJzdHlsZXNoZWV0Ij5gIGl0IGRlZmluZXMgYSBbcHJlZmVycmVkIG9yIGFuIGFsdGVybmF0ZSBzdHlsZXNoZWV0XShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9DU1MvQWx0ZXJuYXRpdmVfc3R5bGVfc2hlZXRzKS4gSW5jb3JyZWN0bHkgdXNpbmcgaXQgbWF5IFtjYXVzZSB0aGUgc3R5bGVzaGVldCB0byBiZSBpZ25vcmVkXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL0NvcnJlY3RseV9Vc2luZ19UaXRsZXNfV2l0aF9FeHRlcm5hbF9TdHlsZXNoZWV0cykuJ31dLHJlZmVyZW5jZXM6W3tuYW1lOiJNRE4gUmVmZXJlbmNlIix1cmw6Imh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9saW5rIn1dfSx7bmFtZToibWV0YSIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiVGhlIG1ldGEgZWxlbWVudCByZXByZXNlbnRzIHZhcmlvdXMga2luZHMgb2YgbWV0YWRhdGEgdGhhdCBjYW5ub3QgYmUgZXhwcmVzc2VkIHVzaW5nIHRoZSB0aXRsZSwgYmFzZSwgbGluaywgc3R5bGUsIGFuZCBzY3JpcHQgZWxlbWVudHMuIn0sdm9pZDohMCxhdHRyaWJ1dGVzOlt7bmFtZToibmFtZSIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZTpgVGhpcyBhdHRyaWJ1dGUgZGVmaW5lcyB0aGUgbmFtZSBvZiBhIHBpZWNlIG9mIGRvY3VtZW50LWxldmVsIG1ldGFkYXRhLiBJdCBzaG91bGQgbm90IGJlIHNldCBpZiBvbmUgb2YgdGhlIGF0dHJpYnV0ZXMgW1xgaXRlbXByb3BcYF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9HbG9iYWxfYXR0cmlidXRlcyNhdHRyLWl0ZW1wcm9wKSwgW1xgaHR0cC1lcXVpdlxgXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvbWV0YSNhdHRyLWh0dHAtZXF1aXYpIG9yIFtcYGNoYXJzZXRcYF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L21ldGEjYXR0ci1jaGFyc2V0KSBpcyBhbHNvIHNldC4KClRoaXMgbWV0YWRhdGEgbmFtZSBpcyBhc3NvY2lhdGVkIHdpdGggdGhlIHZhbHVlIGNvbnRhaW5lZCBieSB0aGUgW1xgY29udGVudFxgXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvbWV0YSNhdHRyLWNvbnRlbnQpIGF0dHJpYnV0ZS4gVGhlIHBvc3NpYmxlIHZhbHVlcyBmb3IgdGhlIG5hbWUgYXR0cmlidXRlIGFyZToKCiogICBcYGFwcGxpY2F0aW9uLW5hbWVcYCB3aGljaCBkZWZpbmVzIHRoZSBuYW1lIG9mIHRoZSBhcHBsaWNhdGlvbiBydW5uaW5nIGluIHRoZSB3ZWIgcGFnZS4KICAgIAogICAgKipOb3RlOioqCiAgICAKICAgICogICBCcm93c2VycyBtYXkgdXNlIHRoaXMgdG8gaWRlbnRpZnkgdGhlIGFwcGxpY2F0aW9uLiBJdCBpcyBkaWZmZXJlbnQgZnJvbSB0aGUgW1xgPHRpdGxlPlxgXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvdGl0bGUgIlRoZSBIVE1MIFRpdGxlIGVsZW1lbnQgKDx0aXRsZT4pIGRlZmluZXMgdGhlIGRvY3VtZW50J3MgdGl0bGUgdGhhdCBpcyBzaG93biBpbiBhIGJyb3dzZXIncyB0aXRsZSBiYXIgb3IgYSBwYWdlJ3MgdGFiLiIpIGVsZW1lbnQsIHdoaWNoIHVzdWFsbHkgY29udGFpbiB0aGUgYXBwbGljYXRpb24gbmFtZSwgYnV0IG1heSBhbHNvIGNvbnRhaW4gaW5mb3JtYXRpb24gbGlrZSB0aGUgZG9jdW1lbnQgbmFtZSBvciBhIHN0YXR1cy4KICAgICogICBTaW1wbGUgd2ViIHBhZ2VzIHNob3VsZG4ndCBkZWZpbmUgYW4gYXBwbGljYXRpb24tbmFtZS4KICAgIAoqICAgXGBhdXRob3JcYCB3aGljaCBkZWZpbmVzIHRoZSBuYW1lIG9mIHRoZSBkb2N1bWVudCdzIGF1dGhvci4KKiAgIFxgZGVzY3JpcHRpb25cYCB3aGljaCBjb250YWlucyBhIHNob3J0IGFuZCBhY2N1cmF0ZSBzdW1tYXJ5IG9mIHRoZSBjb250ZW50IG9mIHRoZSBwYWdlLiBTZXZlcmFsIGJyb3dzZXJzLCBsaWtlIEZpcmVmb3ggYW5kIE9wZXJhLCB1c2UgdGhpcyBhcyB0aGUgZGVmYXVsdCBkZXNjcmlwdGlvbiBvZiBib29rbWFya2VkIHBhZ2VzLgoqICAgXGBnZW5lcmF0b3JcYCB3aGljaCBjb250YWlucyB0aGUgaWRlbnRpZmllciBvZiB0aGUgc29mdHdhcmUgdGhhdCBnZW5lcmF0ZWQgdGhlIHBhZ2UuCiogICBcYGtleXdvcmRzXGAgd2hpY2ggY29udGFpbnMgd29yZHMgcmVsZXZhbnQgdG8gdGhlIHBhZ2UncyBjb250ZW50IHNlcGFyYXRlZCBieSBjb21tYXMuCiogICBcYHJlZmVycmVyXGAgd2hpY2ggY29udHJvbHMgdGhlIFtcYFJlZmVyZXJcYCBIVFRQIGhlYWRlcl0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRUUC9IZWFkZXJzL1JlZmVyZXIpIGF0dGFjaGVkIHRvIHJlcXVlc3RzIHNlbnQgZnJvbSB0aGUgZG9jdW1lbnQ6CiAgICAKICAgIFZhbHVlcyBmb3IgdGhlIFxgY29udGVudFxgIGF0dHJpYnV0ZSBvZiBcYDxtZXRhIG5hbWU9InJlZmVycmVyIj5cYAogICAgCiAgICBcYG5vLXJlZmVycmVyXGAKICAgIAogICAgRG8gbm90IHNlbmQgYSBIVFRQIFxgUmVmZXJyZXJcYCBoZWFkZXIuCiAgICAKICAgIFxgb3JpZ2luXGAKICAgIAogICAgU2VuZCB0aGUgW29yaWdpbl0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9HbG9zc2FyeS9PcmlnaW4pIG9mIHRoZSBkb2N1bWVudC4KICAgIAogICAgXGBuby1yZWZlcnJlci13aGVuLWRvd25ncmFkZVxgCiAgICAKICAgIFNlbmQgdGhlIFtvcmlnaW5dKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvR2xvc3NhcnkvT3JpZ2luKSBhcyBhIHJlZmVycmVyIHRvIFVSTHMgYXMgc2VjdXJlIGFzIHRoZSBjdXJyZW50IHBhZ2UsIChodHRwc+KGkmh0dHBzKSwgYnV0IGRvZXMgbm90IHNlbmQgYSByZWZlcnJlciB0byBsZXNzIHNlY3VyZSBVUkxzIChodHRwc+KGkmh0dHApLiBUaGlzIGlzIHRoZSBkZWZhdWx0IGJlaGF2aW91ci4KICAgIAogICAgXGBvcmlnaW4td2hlbi1jcm9zcy1vcmlnaW5cYAogICAgCiAgICBTZW5kIHRoZSBmdWxsIFVSTCAoc3RyaXBwZWQgb2YgcGFyYW1ldGVycykgZm9yIHNhbWUtb3JpZ2luIHJlcXVlc3RzLCBidXQgb25seSBzZW5kIHRoZSBbb3JpZ2luXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL0dsb3NzYXJ5L09yaWdpbikgZm9yIG90aGVyIGNhc2VzLgogICAgCiAgICBcYHNhbWUtb3JpZ2luXGAKICAgIAogICAgQSByZWZlcnJlciB3aWxsIGJlIHNlbnQgZm9yIFtzYW1lLXNpdGUgb3JpZ2luc10oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvU2VjdXJpdHkvU2FtZS1vcmlnaW5fcG9saWN5KSwgYnV0IGNyb3NzLW9yaWdpbiByZXF1ZXN0cyB3aWxsIGNvbnRhaW4gbm8gcmVmZXJyZXIgaW5mb3JtYXRpb24uCiAgICAKICAgIFxgc3RyaWN0LW9yaWdpblxgCiAgICAKICAgIE9ubHkgc2VuZCB0aGUgb3JpZ2luIG9mIHRoZSBkb2N1bWVudCBhcyB0aGUgcmVmZXJyZXIgdG8gYS1wcmlvcmkgYXMtbXVjaC1zZWN1cmUgZGVzdGluYXRpb24gKEhUVFBTLT5IVFRQUyksIGJ1dCBkb24ndCBzZW5kIGl0IHRvIGEgbGVzcyBzZWN1cmUgZGVzdGluYXRpb24gKEhUVFBTLT5IVFRQKS4KICAgIAogICAgXGBzdHJpY3Qtb3JpZ2luLXdoZW4tY3Jvc3Mtb3JpZ2luXGAKICAgIAogICAgU2VuZCBhIGZ1bGwgVVJMIHdoZW4gcGVyZm9ybWluZyBhIHNhbWUtb3JpZ2luIHJlcXVlc3QsIG9ubHkgc2VuZCB0aGUgb3JpZ2luIG9mIHRoZSBkb2N1bWVudCB0byBhLXByaW9yaSBhcy1tdWNoLXNlY3VyZSBkZXN0aW5hdGlvbiAoSFRUUFMtPkhUVFBTKSwgYW5kIHNlbmQgbm8gaGVhZGVyIHRvIGEgbGVzcyBzZWN1cmUgZGVzdGluYXRpb24gKEhUVFBTLT5IVFRQKS4KICAgIAogICAgXGB1bnNhZmUtVVJMXGAKICAgIAogICAgU2VuZCB0aGUgZnVsbCBVUkwgKHN0cmlwcGVkIG9mIHBhcmFtZXRlcnMpIGZvciBzYW1lLW9yaWdpbiBvciBjcm9zcy1vcmlnaW4gcmVxdWVzdHMuCiAgICAKICAgICoqTm90ZXM6KioKICAgIAogICAgKiAgIFNvbWUgYnJvd3NlcnMgc3VwcG9ydCB0aGUgZGVwcmVjYXRlZCB2YWx1ZXMgb2YgXGBhbHdheXNcYCwgXGBkZWZhdWx0XGAsIGFuZCBcYG5ldmVyXGAgZm9yIHJlZmVycmVyLgogICAgKiAgIER5bmFtaWNhbGx5IGluc2VydGluZyBcYDxtZXRhIG5hbWU9InJlZmVycmVyIj5cYCAod2l0aCBbXGBkb2N1bWVudC53cml0ZVxgXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvRG9jdW1lbnQvd3JpdGUpIG9yIFtcYGFwcGVuZENoaWxkXGBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9Ob2RlL2FwcGVuZENoaWxkKSkgbWFrZXMgdGhlIHJlZmVycmVyIGJlaGF2aW91ciB1bnByZWRpY3RhYmxlLgogICAgKiAgIFdoZW4gc2V2ZXJhbCBjb25mbGljdGluZyBwb2xpY2llcyBhcmUgZGVmaW5lZCwgdGhlIG5vLXJlZmVycmVyIHBvbGljeSBpcyBhcHBsaWVkLgogICAgCgpUaGlzIGF0dHJpYnV0ZSBtYXkgYWxzbyBoYXZlIGEgdmFsdWUgdGFrZW4gZnJvbSB0aGUgZXh0ZW5kZWQgbGlzdCBkZWZpbmVkIG9uIFtXSEFUV0cgV2lraSBNZXRhRXh0ZW5zaW9ucyBwYWdlXShodHRwczovL3dpa2kud2hhdHdnLm9yZy93aWtpL01ldGFFeHRlbnNpb25zKS4gQWx0aG91Z2ggbm9uZSBoYXZlIGJlZW4gZm9ybWFsbHkgYWNjZXB0ZWQgeWV0LCBhIGZldyBjb21tb25seSB1c2VkIG5hbWVzIGFyZToKCiogICBcYGNyZWF0b3JcYCB3aGljaCBkZWZpbmVzIHRoZSBuYW1lIG9mIHRoZSBjcmVhdG9yIG9mIHRoZSBkb2N1bWVudCwgc3VjaCBhcyBhbiBvcmdhbml6YXRpb24gb3IgaW5zdGl0dXRpb24uIElmIHRoZXJlIGFyZSBtb3JlIHRoYW4gb25lLCBzZXZlcmFsIFtcYDxtZXRhPlxgXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvbWV0YSAiVGhlIEhUTUwgPG1ldGE+IGVsZW1lbnQgcmVwcmVzZW50cyBtZXRhZGF0YSB0aGF0IGNhbm5vdCBiZSByZXByZXNlbnRlZCBieSBvdGhlciBIVE1MIG1ldGEtcmVsYXRlZCBlbGVtZW50cywgbGlrZSA8YmFzZT4sIDxsaW5rPiwgPHNjcmlwdD4sIDxzdHlsZT4gb3IgPHRpdGxlPi4iKSBlbGVtZW50cyBzaG91bGQgYmUgdXNlZC4KKiAgIFxgZ29vZ2xlYm90XGAsIGEgc3lub255bSBvZiBcYHJvYm90c1xgLCBpcyBvbmx5IGZvbGxvd2VkIGJ5IEdvb2dsZWJvdCAodGhlIGluZGV4aW5nIGNyYXdsZXIgZm9yIEdvb2dsZSkuCiogICBcYHB1Ymxpc2hlclxgIHdoaWNoIGRlZmluZXMgdGhlIG5hbWUgb2YgdGhlIGRvY3VtZW50J3MgcHVibGlzaGVyLgoqICAgXGByb2JvdHNcYCB3aGljaCBkZWZpbmVzIHRoZSBiZWhhdmlvdXIgdGhhdCBjb29wZXJhdGl2ZSBjcmF3bGVycywgb3IgInJvYm90cyIsIHNob3VsZCB1c2Ugd2l0aCB0aGUgcGFnZS4gSXQgaXMgYSBjb21tYS1zZXBhcmF0ZWQgbGlzdCBvZiB0aGUgdmFsdWVzIGJlbG93OgogICAgCiAgICBWYWx1ZXMgZm9yIHRoZSBjb250ZW50IG9mIFxgPG1ldGEgbmFtZT0icm9ib3RzIj5cYAogICAgCiAgICBWYWx1ZQogICAgCiAgICBEZXNjcmlwdGlvbgogICAgCiAgICBVc2VkIGJ5CiAgICAKICAgIFxgaW5kZXhcYAogICAgCiAgICBBbGxvd3MgdGhlIHJvYm90IHRvIGluZGV4IHRoZSBwYWdlIChkZWZhdWx0KS4KICAgIAogICAgQWxsCiAgICAKICAgIFxgbm9pbmRleFxgCiAgICAKICAgIFJlcXVlc3RzIHRoZSByb2JvdCB0byBub3QgaW5kZXggdGhlIHBhZ2UuCiAgICAKICAgIEFsbAogICAgCiAgICBcYGZvbGxvd1xgCiAgICAKICAgIEFsbG93cyB0aGUgcm9ib3QgdG8gZm9sbG93IHRoZSBsaW5rcyBvbiB0aGUgcGFnZSAoZGVmYXVsdCkuCiAgICAKICAgIEFsbAogICAgCiAgICBcYG5vZm9sbG93XGAKICAgIAogICAgUmVxdWVzdHMgdGhlIHJvYm90IHRvIG5vdCBmb2xsb3cgdGhlIGxpbmtzIG9uIHRoZSBwYWdlLgogICAgCiAgICBBbGwKICAgIAogICAgXGBub25lXGAKICAgIAogICAgRXF1aXZhbGVudCB0byBcYG5vaW5kZXgsIG5vZm9sbG93XGAKICAgIAogICAgW0dvb2dsZV0oaHR0cHM6Ly9zdXBwb3J0Lmdvb2dsZS5jb20vd2VibWFzdGVycy9hbnN3ZXIvNzk4MTIpCiAgICAKICAgIFxgbm9vZHBcYAogICAgCiAgICBQcmV2ZW50cyB1c2luZyB0aGUgW09wZW4gRGlyZWN0b3J5IFByb2plY3RdKGh0dHBzOi8vd3d3LmRtb3oub3JnLykgZGVzY3JpcHRpb24sIGlmIGFueSwgYXMgdGhlIHBhZ2UgZGVzY3JpcHRpb24gaW4gc2VhcmNoIGVuZ2luZSByZXN1bHRzLgogICAgCiAgICBbR29vZ2xlXShodHRwczovL3N1cHBvcnQuZ29vZ2xlLmNvbS93ZWJtYXN0ZXJzL2Fuc3dlci8zNTYyNCNub2Rtb3opLCBbWWFob29dKGh0dHBzOi8vaGVscC55YWhvby5jb20va2Ivc2VhcmNoLWZvci1kZXNrdG9wL21ldGEtdGFncy1yb2JvdHN0eHQteWFob28tc2VhcmNoLXNsbjIyMTMuaHRtbCNjb250NSksIFtCaW5nXShodHRwczovL3d3dy5iaW5nLmNvbS93ZWJtYXN0ZXIvaGVscC93aGljaC1yb2JvdHMtbWV0YXRhZ3MtZG9lcy1iaW5nLXN1cHBvcnQtNTE5OGQyNDApCiAgICAKICAgIFxgbm9hcmNoaXZlXGAKICAgIAogICAgUmVxdWVzdHMgdGhlIHNlYXJjaCBlbmdpbmUgbm90IHRvIGNhY2hlIHRoZSBwYWdlIGNvbnRlbnQuCiAgICAKICAgIFtHb29nbGVdKGh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL3dlYm1hc3RlcnMvY29udHJvbC1jcmF3bC1pbmRleC9kb2NzL3JvYm90c19tZXRhX3RhZyN2YWxpZC1pbmRleGluZy0tc2VydmluZy1kaXJlY3RpdmVzKSwgW1lhaG9vXShodHRwczovL2hlbHAueWFob28uY29tL2tiL3NlYXJjaC1mb3ItZGVza3RvcC9TTE4yMjEzLmh0bWwpLCBbQmluZ10oaHR0cHM6Ly93d3cuYmluZy5jb20vd2VibWFzdGVyL2hlbHAvd2hpY2gtcm9ib3RzLW1ldGF0YWdzLWRvZXMtYmluZy1zdXBwb3J0LTUxOThkMjQwKQogICAgCiAgICBcYG5vc25pcHBldFxgCiAgICAKICAgIFByZXZlbnRzIGRpc3BsYXlpbmcgYW55IGRlc2NyaXB0aW9uIG9mIHRoZSBwYWdlIGluIHNlYXJjaCBlbmdpbmUgcmVzdWx0cy4KICAgIAogICAgW0dvb2dsZV0oaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20vd2VibWFzdGVycy9jb250cm9sLWNyYXdsLWluZGV4L2RvY3Mvcm9ib3RzX21ldGFfdGFnI3ZhbGlkLWluZGV4aW5nLS1zZXJ2aW5nLWRpcmVjdGl2ZXMpLCBbQmluZ10oaHR0cHM6Ly93d3cuYmluZy5jb20vd2VibWFzdGVyL2hlbHAvd2hpY2gtcm9ib3RzLW1ldGF0YWdzLWRvZXMtYmluZy1zdXBwb3J0LTUxOThkMjQwKQogICAgCiAgICBcYG5vaW1hZ2VpbmRleFxgCiAgICAKICAgIFJlcXVlc3RzIHRoaXMgcGFnZSBub3QgdG8gYXBwZWFyIGFzIHRoZSByZWZlcnJpbmcgcGFnZSBvZiBhbiBpbmRleGVkIGltYWdlLgogICAgCiAgICBbR29vZ2xlXShodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS93ZWJtYXN0ZXJzL2NvbnRyb2wtY3Jhd2wtaW5kZXgvZG9jcy9yb2JvdHNfbWV0YV90YWcjdmFsaWQtaW5kZXhpbmctLXNlcnZpbmctZGlyZWN0aXZlcykKICAgIAogICAgXGBub2NhY2hlXGAKICAgIAogICAgU3lub255bSBvZiBcYG5vYXJjaGl2ZVxgLgogICAgCiAgICBbQmluZ10oaHR0cHM6Ly93d3cuYmluZy5jb20vd2VibWFzdGVyL2hlbHAvd2hpY2gtcm9ib3RzLW1ldGF0YWdzLWRvZXMtYmluZy1zdXBwb3J0LTUxOThkMjQwKQogICAgCiAgICAqKk5vdGVzOioqCiAgICAKICAgICogICBPbmx5IGNvb3BlcmF0aXZlIHJvYm90cyBmb2xsb3cgdGhlc2UgcnVsZXMuIERvIG5vdCBleHBlY3QgdG8gcHJldmVudCBlLW1haWwgaGFydmVzdGVycyB3aXRoIHRoZW0uCiAgICAqICAgVGhlIHJvYm90IHN0aWxsIG5lZWRzIHRvIGFjY2VzcyB0aGUgcGFnZSBpbiBvcmRlciB0byByZWFkIHRoZXNlIHJ1bGVzLiBUbyBwcmV2ZW50IGJhbmR3aWR0aCBjb25zdW1wdGlvbiwgdXNlIGEgX1tyb2JvdHMudHh0XShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL0dsb3NzYXJ5L3JvYm90cy50eHQgInJvYm90cy50eHQ6IFJvYm90cy50eHQgaXMgYSBmaWxlIHdoaWNoIGlzIHVzdWFsbHkgcGxhY2VkIGluIHRoZSByb290IG9mIGFueSB3ZWJzaXRlLiBJdCBkZWNpZGVzIHdoZXRoZXLCoGNyYXdsZXJzIGFyZSBwZXJtaXR0ZWQgb3IgZm9yYmlkZGVuIGFjY2VzcyB0byB0aGUgd2ViIHNpdGUuIilfIGZpbGUuCiAgICAqICAgSWYgeW91IHdhbnQgdG8gcmVtb3ZlIGEgcGFnZSwgXGBub2luZGV4XGAgd2lsbCB3b3JrLCBidXQgb25seSBhZnRlciB0aGUgcm9ib3QgdmlzaXRzIHRoZSBwYWdlIGFnYWluLiBFbnN1cmUgdGhhdCB0aGUgXGByb2JvdHMudHh0XGAgZmlsZSBpcyBub3QgcHJldmVudGluZyByZXZpc2l0cy4KICAgICogICBTb21lIHZhbHVlcyBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlLCBsaWtlIFxgaW5kZXhcYCBhbmQgXGBub2luZGV4XGAsIG9yIFxgZm9sbG93XGAgYW5kIFxgbm9mb2xsb3dcYC4gSW4gdGhlc2UgY2FzZXMgdGhlIHJvYm90J3MgYmVoYXZpb3VyIGlzIHVuZGVmaW5lZCBhbmQgbWF5IHZhcnkgYmV0d2VlbiB0aGVtLgogICAgKiAgIFNvbWUgY3Jhd2xlciByb2JvdHMsIGxpa2UgR29vZ2xlLCBZYWhvbyBhbmQgQmluZywgc3VwcG9ydCB0aGUgc2FtZSB2YWx1ZXMgZm9yIHRoZSBIVFRQIGhlYWRlciBcYFgtUm9ib3RzLVRhZ1xgOyB0aGlzIGFsbG93cyBub24tSFRNTCBkb2N1bWVudHMgbGlrZSBpbWFnZXMgdG8gdXNlIHRoZXNlIHJ1bGVzLgogICAgCiogICBcYHNsdXJwXGAsIGlzIGEgc3lub255bSBvZiBcYHJvYm90c1xgLCBidXQgb25seSBmb3IgU2x1cnAgLSB0aGUgY3Jhd2xlciBmb3IgWWFob28gU2VhcmNoLgoqICAgXGB2aWV3cG9ydFxgLCB3aGljaCBnaXZlcyBoaW50cyBhYm91dCB0aGUgc2l6ZSBvZiB0aGUgaW5pdGlhbCBzaXplIG9mIHRoZSBbdmlld3BvcnRdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvR2xvc3Nhcnkvdmlld3BvcnQgInZpZXdwb3J0OiBBIHZpZXdwb3J0IHJlcHJlc2VudHMgYSBwb2x5Z29uYWwgKG5vcm1hbGx5IHJlY3Rhbmd1bGFyKSBhcmVhIGluIGNvbXB1dGVyIGdyYXBoaWNzIHRoYXQgaXMgY3VycmVudGx5IGJlaW5nIHZpZXdlZC4gSW4gd2ViIGJyb3dzZXIgdGVybXMsIGl0IHJlZmVycyB0byB0aGUgcGFydCBvZiB0aGUgZG9jdW1lbnQgeW91J3JlIHZpZXdpbmcgd2hpY2ggaXMgY3VycmVudGx5IHZpc2libGUgaW4gaXRzIHdpbmRvdyAob3IgdGhlIHNjcmVlbiwgaWYgdGhlIGRvY3VtZW50IGlzIGJlaW5nIHZpZXdlZCBpbiBmdWxsIHNjcmVlbiBtb2RlKS4gQ29udGVudCBvdXRzaWRlIHRoZSB2aWV3cG9ydCBpcyBub3QgdmlzaWJsZSBvbnNjcmVlbiB1bnRpbCBzY3JvbGxlZCBpbnRvIHZpZXcuIikuIFVzZWQgYnkgbW9iaWxlIGRldmljZXMgb25seS4KICAgIAogICAgVmFsdWVzIGZvciB0aGUgY29udGVudCBvZiBcYDxtZXRhIG5hbWU9InZpZXdwb3J0Ij5cYAogICAgCiAgICBWYWx1ZQogICAgCiAgICBQb3NzaWJsZSBzdWJ2YWx1ZXMKICAgIAogICAgRGVzY3JpcHRpb24KICAgIAogICAgXGB3aWR0aFxgCiAgICAKICAgIEEgcG9zaXRpdmUgaW50ZWdlciBudW1iZXIsIG9yIHRoZSB0ZXh0IFxgZGV2aWNlLXdpZHRoXGAKICAgIAogICAgRGVmaW5lcyB0aGUgcGl4ZWwgd2lkdGggb2YgdGhlIHZpZXdwb3J0IHRoYXQgeW91IHdhbnQgdGhlIHdlYiBzaXRlIHRvIGJlIHJlbmRlcmVkIGF0LgogICAgCiAgICBcYGhlaWdodFxgCiAgICAKICAgIEEgcG9zaXRpdmUgaW50ZWdlciwgb3IgdGhlIHRleHQgXGBkZXZpY2UtaGVpZ2h0XGAKICAgIAogICAgRGVmaW5lcyB0aGUgaGVpZ2h0IG9mIHRoZSB2aWV3cG9ydC4gTm90IHVzZWQgYnkgYW55IGJyb3dzZXIuCiAgICAKICAgIFxgaW5pdGlhbC1zY2FsZVxgCiAgICAKICAgIEEgcG9zaXRpdmUgbnVtYmVyIGJldHdlZW4gXGAwLjBcYCBhbmQgXGAxMC4wXGAKICAgIAogICAgRGVmaW5lcyB0aGUgcmF0aW8gYmV0d2VlbiB0aGUgZGV2aWNlIHdpZHRoIChcYGRldmljZS13aWR0aFxgIGluIHBvcnRyYWl0IG1vZGUgb3IgXGBkZXZpY2UtaGVpZ2h0XGAgaW4gbGFuZHNjYXBlIG1vZGUpIGFuZCB0aGUgdmlld3BvcnQgc2l6ZS4KICAgIAogICAgXGBtYXhpbXVtLXNjYWxlXGAKICAgIAogICAgQSBwb3NpdGl2ZSBudW1iZXIgYmV0d2VlbiBcYDAuMFxgIGFuZCBcYDEwLjBcYAogICAgCiAgICBEZWZpbmVzIHRoZSBtYXhpbXVtIGFtb3VudCB0byB6b29tIGluLiBJdCBtdXN0IGJlIGdyZWF0ZXIgb3IgZXF1YWwgdG8gdGhlIFxgbWluaW11bS1zY2FsZVxgIG9yIHRoZSBiZWhhdmlvdXIgaXMgdW5kZWZpbmVkLiBCcm93c2VyIHNldHRpbmdzIGNhbiBpZ25vcmUgdGhpcyBydWxlIGFuZCBpT1MxMCsgaWdub3JlcyBpdCBieSBkZWZhdWx0LgogICAgCiAgICBcYG1pbmltdW0tc2NhbGVcYAogICAgCiAgICBBIHBvc2l0aXZlIG51bWJlciBiZXR3ZWVuIFxgMC4wXGAgYW5kIFxgMTAuMFxgCiAgICAKICAgIERlZmluZXMgdGhlIG1pbmltdW0gem9vbSBsZXZlbC4gSXQgbXVzdCBiZSBzbWFsbGVyIG9yIGVxdWFsIHRvIHRoZSBcYG1heGltdW0tc2NhbGVcYCBvciB0aGUgYmVoYXZpb3VyIGlzIHVuZGVmaW5lZC4gQnJvd3NlciBzZXR0aW5ncyBjYW4gaWdub3JlIHRoaXMgcnVsZSBhbmQgaU9TMTArIGlnbm9yZXMgaXQgYnkgZGVmYXVsdC4KICAgIAogICAgXGB1c2VyLXNjYWxhYmxlXGAKICAgIAogICAgXGB5ZXNcYCBvciBcYG5vXGAKICAgIAogICAgSWYgc2V0IHRvIFxgbm9cYCwgdGhlIHVzZXIgaXMgbm90IGFibGUgdG8gem9vbSBpbiB0aGUgd2VicGFnZS4gVGhlIGRlZmF1bHQgaXMgXGB5ZXNcYC4gQnJvd3NlciBzZXR0aW5ncyBjYW4gaWdub3JlIHRoaXMgcnVsZSwgYW5kIGlPUzEwKyBpZ25vcmVzIGl0IGJ5IGRlZmF1bHQuCiAgICAKICAgIFNwZWNpZmljYXRpb24KICAgIAogICAgU3RhdHVzCiAgICAKICAgIENvbW1lbnQKICAgIAogICAgW0NTUyBEZXZpY2UgQWRhcHRhdGlvbiAgCiAgICBUaGUgZGVmaW5pdGlvbiBvZiAnPG1ldGEgbmFtZT0idmlld3BvcnQiPicgaW4gdGhhdCBzcGVjaWZpY2F0aW9uLl0oaHR0cHM6Ly9kcmFmdHMuY3Nzd2cub3JnL2Nzcy1kZXZpY2UtYWRhcHQvI3ZpZXdwb3J0LW1ldGEpCiAgICAKICAgIFdvcmtpbmcgRHJhZnQKICAgIAogICAgTm9uLW5vcm1hdGl2ZWx5IGRlc2NyaWJlcyB0aGUgVmlld3BvcnQgTUVUQSBlbGVtZW50CiAgICAKICAgIFNlZSBhbHNvOiBbXGBAdmlld3BvcnRcYF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQ1NTL0B2aWV3cG9ydCAiVGhlIEB2aWV3cG9ydCBDU1MgYXQtcnVsZSBsZXRzIHlvdSBjb25maWd1cmUgdGhlIHZpZXdwb3J0IHRocm91Z2ggd2hpY2ggdGhlIGRvY3VtZW50IGlzIHZpZXdlZC4gSXQncyBwcmltYXJpbHkgdXNlZCBmb3IgbW9iaWxlIGRldmljZXMsIGJ1dCBpcyBhbHNvIHVzZWQgYnkgZGVza3RvcCBicm93c2VycyB0aGF0IHN1cHBvcnQgZmVhdHVyZXMgbGlrZSAic25hcCB0byBlZGdlIiAoc3VjaCBhcyBNaWNyb3NvZnQgRWRnZSkuIikKICAgIAogICAgKipOb3RlczoqKgogICAgCiAgICAqICAgVGhvdWdoIHVuc3RhbmRhcmRpemVkLCB0aGlzIGRlY2xhcmF0aW9uIGlzIHJlc3BlY3RlZCBieSBtb3N0IG1vYmlsZSBicm93c2VycyBkdWUgdG8gZGUtZmFjdG8gZG9taW5hbmNlLgogICAgKiAgIFRoZSBkZWZhdWx0IHZhbHVlcyBtYXkgdmFyeSBiZXR3ZWVuIGRldmljZXMgYW5kIGJyb3dzZXJzLgogICAgKiAgIFRvIGxlYXJuIGFib3V0IHRoaXMgZGVjbGFyYXRpb24gaW4gRmlyZWZveCBmb3IgTW9iaWxlLCBzZWUgW3RoaXMgYXJ0aWNsZV0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9Nb2JpbGUvVmlld3BvcnRfbWV0YV90YWcgIk1vYmlsZS9WaWV3cG9ydCBtZXRhIHRhZyIpLmB9fSx7bmFtZToiaHR0cC1lcXVpdiIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZTonRGVmaW5lcyBhIHByYWdtYSBkaXJlY3RpdmUuIFRoZSBhdHRyaWJ1dGUgaXMgbmFtZWQgYCoqaHR0cC1lcXVpdioqKGFsZW50KWAgYmVjYXVzZSBhbGwgdGhlIGFsbG93ZWQgdmFsdWVzIGFyZSBuYW1lcyBvZiBwYXJ0aWN1bGFyIEhUVFAgaGVhZGVyczpcblxuKiAgIGAiY29udGVudC1sYW5ndWFnZSJgICBcbiAgICBEZWZpbmVzIHRoZSBkZWZhdWx0IGxhbmd1YWdlIG9mIHRoZSBwYWdlLiBJdCBjYW4gYmUgb3ZlcnJpZGRlbiBieSB0aGUgW2xhbmddKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvR2xvYmFsX2F0dHJpYnV0ZXMvbGFuZykgYXR0cmlidXRlIG9uIGFueSBlbGVtZW50LlxuICAgIFxuICAgICoqV2FybmluZzoqKiBEbyBub3QgdXNlIHRoaXMgdmFsdWUsIGFzIGl0IGlzIG9ic29sZXRlLiBQcmVmZXIgdGhlIGBsYW5nYCBhdHRyaWJ1dGUgb24gdGhlIFtgPGh0bWw+YF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2h0bWwgIlRoZSBIVE1MIDxodG1sPiBlbGVtZW50IHJlcHJlc2VudHMgdGhlIHJvb3QgKHRvcC1sZXZlbCBlbGVtZW50KSBvZiBhbiBIVE1MIGRvY3VtZW50LCBzbyBpdCBpcyBhbHNvIHJlZmVycmVkIHRvIGFzIHRoZSByb290IGVsZW1lbnQuIEFsbCBvdGhlciBlbGVtZW50cyBtdXN0IGJlIGRlc2NlbmRhbnRzIG9mIHRoaXMgZWxlbWVudC4iKSBlbGVtZW50LlxuICAgIFxuKiAgIGAiY29udGVudC1zZWN1cml0eS1wb2xpY3kiYCAgXG4gICAgQWxsb3dzIHBhZ2UgYXV0aG9ycyB0byBkZWZpbmUgYSBbY29udGVudCBwb2xpY3ldKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL1NlY3VyaXR5L0NTUC9DU1BfcG9saWN5X2RpcmVjdGl2ZXMpIGZvciB0aGUgY3VycmVudCBwYWdlLiBDb250ZW50IHBvbGljaWVzIG1vc3RseSBzcGVjaWZ5IGFsbG93ZWQgc2VydmVyIG9yaWdpbnMgYW5kIHNjcmlwdCBlbmRwb2ludHMgd2hpY2ggaGVscCBndWFyZCBhZ2FpbnN0IGNyb3NzLXNpdGUgc2NyaXB0aW5nIGF0dGFja3MuXG4qICAgYCJjb250ZW50LXR5cGUiYCAgXG4gICAgRGVmaW5lcyB0aGUgW01JTUUgdHlwZV0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9HbG9zc2FyeS9NSU1FX3R5cGUpIG9mIHRoZSBkb2N1bWVudCwgZm9sbG93ZWQgYnkgaXRzIGNoYXJhY3RlciBlbmNvZGluZy4gSXQgZm9sbG93cyB0aGUgc2FtZSBzeW50YXggYXMgdGhlIEhUVFAgYGNvbnRlbnQtdHlwZWAgZW50aXR5LWhlYWRlciBmaWVsZCwgYnV0IGFzIGl0IGlzIGluc2lkZSBhIEhUTUwgcGFnZSwgbW9zdCB2YWx1ZXMgb3RoZXIgdGhhbiBgdGV4dC9odG1sYCBhcmUgaW1wb3NzaWJsZS4gVGhlcmVmb3JlIHRoZSB2YWxpZCBzeW50YXggZm9yIGl0cyBgY29udGVudGAgaXMgdGhlIHN0cmluZyBcJ2B0ZXh0L2h0bWxgXCcgZm9sbG93ZWQgYnkgYSBjaGFyYWN0ZXIgc2V0IHdpdGggdGhlIGZvbGxvd2luZyBzeW50YXg6IFwnYDsgY2hhcnNldD1fSUFOQWNoYXJzZXRfYFwnLCB3aGVyZSBgSUFOQWNoYXJzZXRgIGlzIHRoZSBfcHJlZmVycmVkIE1JTUUgbmFtZV8gZm9yIGEgY2hhcmFjdGVyIHNldCBhcyBbZGVmaW5lZCBieSB0aGUgSUFOQS5dKGh0dHBzOi8vd3d3LmlhbmEub3JnL2Fzc2lnbm1lbnRzL2NoYXJhY3Rlci1zZXRzKVxuICAgIFxuICAgICoqV2FybmluZzoqKiBEbyBub3QgdXNlIHRoaXMgdmFsdWUsIGFzIGl0IGlzIG9ic29sZXRlLiBVc2UgdGhlIFtgY2hhcnNldGBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9tZXRhI2F0dHItY2hhcnNldCkgYXR0cmlidXRlIG9uIHRoZSBbYDxtZXRhPmBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9tZXRhICJUaGUgSFRNTCA8bWV0YT4gZWxlbWVudCByZXByZXNlbnRzIG1ldGFkYXRhIHRoYXQgY2Fubm90IGJlIHJlcHJlc2VudGVkIGJ5IG90aGVyIEhUTUwgbWV0YS1yZWxhdGVkIGVsZW1lbnRzLCBsaWtlIDxiYXNlPiwgPGxpbms+LCA8c2NyaXB0PiwgPHN0eWxlPiBvciA8dGl0bGU+LiIpIGVsZW1lbnQuXG4gICAgXG4gICAgKipOb3RlOioqIEFzIFtgPG1ldGE+YF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L21ldGEgIlRoZSBIVE1MIDxtZXRhPiBlbGVtZW50IHJlcHJlc2VudHMgbWV0YWRhdGEgdGhhdCBjYW5ub3QgYmUgcmVwcmVzZW50ZWQgYnkgb3RoZXIgSFRNTCBtZXRhLXJlbGF0ZWQgZWxlbWVudHMsIGxpa2UgPGJhc2U+LCA8bGluaz4sIDxzY3JpcHQ+LCA8c3R5bGU+IG9yIDx0aXRsZT4uIikgY2FuXCd0IGNoYW5nZSBkb2N1bWVudHNcJyB0eXBlcyBpbiBYSFRNTCBvciBIVE1MNVwncyBYSFRNTCBzZXJpYWxpemF0aW9uLCBuZXZlciBzZXQgdGhlIE1JTUUgdHlwZSB0byBhbiBYSFRNTCBNSU1FIHR5cGUgd2l0aCBgPG1ldGE+YC5cbiAgICBcbiogICBgInJlZnJlc2giYCAgXG4gICAgVGhpcyBpbnN0cnVjdGlvbiBzcGVjaWZpZXM6XG4gICAgKiAgIFRoZSBudW1iZXIgb2Ygc2Vjb25kcyB1bnRpbCB0aGUgcGFnZSBzaG91bGQgYmUgcmVsb2FkZWQgLSBvbmx5IGlmIHRoZSBbYGNvbnRlbnRgXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvbWV0YSNhdHRyLWNvbnRlbnQpIGF0dHJpYnV0ZSBjb250YWlucyBhIHBvc2l0aXZlIGludGVnZXIuXG4gICAgKiAgIFRoZSBudW1iZXIgb2Ygc2Vjb25kcyB1bnRpbCB0aGUgcGFnZSBzaG91bGQgcmVkaXJlY3QgdG8gYW5vdGhlciAtIG9ubHkgaWYgdGhlIFtgY29udGVudGBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9tZXRhI2F0dHItY29udGVudCkgYXR0cmlidXRlIGNvbnRhaW5zIGEgcG9zaXRpdmUgaW50ZWdlciBmb2xsb3dlZCBieSB0aGUgc3RyaW5nIFwnYDt1cmw9YFwnLCBhbmQgYSB2YWxpZCBVUkwuXG4qICAgYCJzZXQtY29va2llImAgIFxuICAgIERlZmluZXMgYSBbY29va2llXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL2Nvb2tpZSkgZm9yIHRoZSBwYWdlLiBJdHMgY29udGVudCBtdXN0IGZvbGxvdyB0aGUgc3ludGF4IGRlZmluZWQgaW4gdGhlIFtJRVRGIEhUVFAgQ29va2llIFNwZWNpZmljYXRpb25dKGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9kcmFmdC1pZXRmLWh0dHBzdGF0ZS1jb29raWUtMTQpLlxuICAgIFxuICAgICoqV2FybmluZzoqKiBEbyBub3QgdXNlIHRoaXMgaW5zdHJ1Y3Rpb24sIGFzIGl0IGlzIG9ic29sZXRlLiBVc2UgdGhlIEhUVFAgaGVhZGVyIFtgU2V0LUNvb2tpZWBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUVFAvSGVhZGVycy9TZXQtQ29va2llKSBpbnN0ZWFkLid9fSx7bmFtZToiY29udGVudCIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiVGhpcyBhdHRyaWJ1dGUgY29udGFpbnMgdGhlIHZhbHVlIGZvciB0aGUgW2BodHRwLWVxdWl2YF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L21ldGEjYXR0ci1odHRwLWVxdWl2KSBvciBbYG5hbWVgXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvbWV0YSNhdHRyLW5hbWUpIGF0dHJpYnV0ZSwgZGVwZW5kaW5nIG9uIHdoaWNoIGlzIHVzZWQuIn19LHtuYW1lOiJjaGFyc2V0IixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOidUaGlzIGF0dHJpYnV0ZSBkZWNsYXJlcyB0aGUgcGFnZVwncyBjaGFyYWN0ZXIgZW5jb2RpbmcuIEl0IG11c3QgY29udGFpbiBhIFtzdGFuZGFyZCBJQU5BIE1JTUUgbmFtZSBmb3IgY2hhcmFjdGVyIGVuY29kaW5nc10oaHR0cHM6Ly93d3cuaWFuYS5vcmcvYXNzaWdubWVudHMvY2hhcmFjdGVyLXNldHMpLiBBbHRob3VnaCB0aGUgc3RhbmRhcmQgZG9lc25cJ3QgcmVxdWVzdCBhIHNwZWNpZmljIGVuY29kaW5nLCBpdCBzdWdnZXN0czpcblxuKiAgIEF1dGhvcnMgYXJlIGVuY291cmFnZWQgdG8gdXNlIFtgVVRGLThgXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL0dsb3NzYXJ5L1VURi04KS5cbiogICBBdXRob3JzIHNob3VsZCBub3QgdXNlIEFTQ0lJLWluY29tcGF0aWJsZSBlbmNvZGluZ3MgdG8gYXZvaWQgc2VjdXJpdHkgcmlzazogYnJvd3NlcnMgbm90IHN1cHBvcnRpbmcgdGhlbSBtYXkgaW50ZXJwcmV0IGhhcm1mdWwgY29udGVudCBhcyBIVE1MLiBUaGlzIGhhcHBlbnMgd2l0aCB0aGUgYEpJU19DNjIyNi0xOTgzYCwgYEpJU19YMDIxMi0xOTkwYCwgYEhaLUdCLTIzMTJgLCBgSk9IQUJgLCB0aGUgSVNPLTIwMjIgZmFtaWx5IGFuZCB0aGUgRUJDRElDIGZhbWlseS5cblxuKipOb3RlOioqIEFTQ0lJLWluY29tcGF0aWJsZSBlbmNvZGluZ3MgYXJlIHRob3NlIHRoYXQgZG9uXCd0IG1hcCB0aGUgOC1iaXQgY29kZSBwb2ludHMgYDB4MjBgIHRvIGAweDdFYCB0byB0aGUgYDB4MDAyMGAgdG8gYDB4MDA3RWAgVW5pY29kZSBjb2RlIHBvaW50cylcblxuKiAgIEF1dGhvcnMgKiptdXN0IG5vdCoqIHVzZSBgQ0VTVS04YCwgYFVURi03YCwgYEJPQ1UtMWAgYW5kL29yIGBTQ1NVYCBhcyBbY3Jvc3Mtc2l0ZSBzY3JpcHRpbmddKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvR2xvc3NhcnkvQ3Jvc3Mtc2l0ZV9zY3JpcHRpbmcpIGF0dGFja3Mgd2l0aCB0aGVzZSBlbmNvZGluZ3MgaGF2ZSBiZWVuIGRlbW9uc3RyYXRlZC5cbiogICBBdXRob3JzIHNob3VsZCBub3QgdXNlIGBVVEYtMzJgIGJlY2F1c2Ugbm90IGFsbCBIVE1MNSBlbmNvZGluZyBhbGdvcml0aG1zIGNhbiBkaXN0aW5ndWlzaCBpdCBmcm9tIGBVVEYtMTZgLlxuXG4qKk5vdGVzOioqXG5cbiogICBUaGUgZGVjbGFyZWQgY2hhcmFjdGVyIGVuY29kaW5nIG11c3QgbWF0Y2ggdGhlIG9uZSB0aGUgcGFnZSB3YXMgc2F2ZWQgd2l0aCB0byBhdm9pZCBnYXJibGVkIGNoYXJhY3RlcnMgYW5kIHNlY3VyaXR5IGhvbGVzLlxuKiAgIFRoZSBbYDxtZXRhPmBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9tZXRhICJUaGUgSFRNTCA8bWV0YT4gZWxlbWVudCByZXByZXNlbnRzIG1ldGFkYXRhIHRoYXQgY2Fubm90IGJlIHJlcHJlc2VudGVkIGJ5IG90aGVyIEhUTUwgbWV0YS1yZWxhdGVkIGVsZW1lbnRzLCBsaWtlIDxiYXNlPiwgPGxpbms+LCA8c2NyaXB0PiwgPHN0eWxlPiBvciA8dGl0bGU+LiIpIGVsZW1lbnQgZGVjbGFyaW5nIHRoZSBlbmNvZGluZyBtdXN0IGJlIGluc2lkZSB0aGUgW2A8aGVhZD5gXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvaGVhZCAiVGhlIEhUTUwgPGhlYWQ+IGVsZW1lbnQgcHJvdmlkZXMgZ2VuZXJhbCBpbmZvcm1hdGlvbiAobWV0YWRhdGEpIGFib3V0IHRoZSBkb2N1bWVudCwgaW5jbHVkaW5nIGl0cyB0aXRsZSBhbmQgbGlua3MgdG8gaXRzwqBzY3JpcHRzIGFuZCBzdHlsZSBzaGVldHMuIikgZWxlbWVudCBhbmQgKip3aXRoaW4gdGhlIGZpcnN0IDEwMjQgYnl0ZXMqKiBvZiB0aGUgSFRNTCBhcyBzb21lIGJyb3dzZXJzIG9ubHkgbG9vayBhdCB0aG9zZSBieXRlcyBiZWZvcmUgY2hvb3NpbmcgYW4gZW5jb2RpbmcuXG4qICAgVGhpcyBbYDxtZXRhPmBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9tZXRhICJUaGUgSFRNTCA8bWV0YT4gZWxlbWVudCByZXByZXNlbnRzIG1ldGFkYXRhIHRoYXQgY2Fubm90IGJlIHJlcHJlc2VudGVkIGJ5IG90aGVyIEhUTUwgbWV0YS1yZWxhdGVkIGVsZW1lbnRzLCBsaWtlIDxiYXNlPiwgPGxpbms+LCA8c2NyaXB0PiwgPHN0eWxlPiBvciA8dGl0bGU+LiIpIGVsZW1lbnQgaXMgb25seSBvbmUgcGFydCBvZiB0aGUgW2FsZ29yaXRobSB0byBkZXRlcm1pbmUgYSBwYWdlXCdzIGNoYXJhY3RlciBzZXRdKGh0dHBzOi8vd3d3LndoYXR3Zy5vcmcvc3BlY3Mvd2ViLWFwcHMvY3VycmVudC13b3JrL211bHRpcGFnZS9wYXJzaW5nLmh0bWwjZW5jb2Rpbmctc25pZmZpbmctYWxnb3JpdGhtICJBbGdvcml0aG0gY2hhcnNldCBwYWdlIikuIFRoZSBbYENvbnRlbnQtVHlwZWAgaGVhZGVyXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVFRQL0hlYWRlcnMvQ29udGVudC1UeXBlKSBhbmQgYW55IFtCeXRlLU9yZGVyIE1hcmtzXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL0dsb3NzYXJ5L0J5dGUtT3JkZXJfTWFyayAiVGhlIGRlZmluaXRpb24gb2YgdGhhdCB0ZXJtIChCeXRlLU9yZGVyIE1hcmtzKSBoYXMgbm90IGJlZW4gd3JpdHRlbiB5ZXQ7IHBsZWFzZSBjb25zaWRlciBjb250cmlidXRpbmcgaXQhIikgb3ZlcnJpZGUgdGhpcyBlbGVtZW50LlxuKiAgIEl0IGlzIHN0cm9uZ2x5IHJlY29tbWVuZGVkIHRvIGRlZmluZSB0aGUgY2hhcmFjdGVyIGVuY29kaW5nLiBJZiBhIHBhZ2VcJ3MgZW5jb2RpbmcgaXMgdW5kZWZpbmVkLCBjcm9zcy1zY3JpcHRpbmcgdGVjaG5pcXVlcyBhcmUgcG9zc2libGUsIHN1Y2ggYXMgdGhlIFtgVVRGLTdgIGZhbGxiYWNrIGNyb3NzLXNjcmlwdGluZyB0ZWNobmlxdWVdKGh0dHBzOi8vY29kZS5nb29nbGUuY29tL3AvZG9jdHlwZS1taXJyb3Ivd2lraS9BcnRpY2xlVXRmNykuXG4qICAgVGhlIFtgPG1ldGE+YF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L21ldGEgIlRoZSBIVE1MIDxtZXRhPiBlbGVtZW50IHJlcHJlc2VudHMgbWV0YWRhdGEgdGhhdCBjYW5ub3QgYmUgcmVwcmVzZW50ZWQgYnkgb3RoZXIgSFRNTCBtZXRhLXJlbGF0ZWQgZWxlbWVudHMsIGxpa2UgPGJhc2U+LCA8bGluaz4sIDxzY3JpcHQ+LCA8c3R5bGU+IG9yIDx0aXRsZT4uIikgZWxlbWVudCB3aXRoIGEgYGNoYXJzZXRgIGF0dHJpYnV0ZSBpcyBhIHN5bm9ueW0gZm9yIHRoZSBwcmUtSFRNTDUgYDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PV9JQU5BY2hhcnNldF8iPmAsIHdoZXJlIF9gSUFOQWNoYXJzZXRgXyBjb250YWlucyB0aGUgdmFsdWUgb2YgdGhlIGVxdWl2YWxlbnQgW2BjaGFyc2V0YF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L21ldGEjYXR0ci1jaGFyc2V0KSBhdHRyaWJ1dGUuIFRoaXMgc3ludGF4IGlzIHN0aWxsIGFsbG93ZWQsIGFsdGhvdWdoIG5vIGxvbmdlciByZWNvbW1lbmRlZC4nfX0se25hbWU6InNjaGVtZSIsZGVzY3JpcHRpb246IlRoaXMgYXR0cmlidXRlIGRlZmluZXMgdGhlIHNjaGVtZSBpbiB3aGljaCBtZXRhZGF0YSBpcyBkZXNjcmliZWQuIEEgc2NoZW1lIGlzIGEgY29udGV4dCBsZWFkaW5nIHRvIHRoZSBjb3JyZWN0IGludGVycHJldGF0aW9ucyBvZiB0aGUgW2Bjb250ZW50YF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L21ldGEjYXR0ci1jb250ZW50KSB2YWx1ZSwgbGlrZSBhIGZvcm1hdC5cblxuKipXYXJuaW5nOioqIERvIG5vdCB1c2UgdGhpcyB2YWx1ZSwgYXMgaXQgaXMgb2Jzb2xldGUuIFRoZXJlIGlzIG5vIHJlcGxhY2VtZW50IGFzIHRoZXJlIHdhcyBubyByZWFsIHVzYWdlIGZvciBpdC4ifV0scmVmZXJlbmNlczpbe25hbWU6Ik1ETiBSZWZlcmVuY2UiLHVybDoiaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvSFRNTC9FbGVtZW50L21ldGEifV19LHtuYW1lOiJzdHlsZSIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiVGhlIHN0eWxlIGVsZW1lbnQgYWxsb3dzIGF1dGhvcnMgdG8gZW1iZWQgc3R5bGUgaW5mb3JtYXRpb24gaW4gdGhlaXIgZG9jdW1lbnRzLiBUaGUgc3R5bGUgZWxlbWVudCBpcyBvbmUgb2Ygc2V2ZXJhbCBpbnB1dHMgdG8gdGhlIHN0eWxpbmcgcHJvY2Vzc2luZyBtb2RlbC4gVGhlIGVsZW1lbnQgZG9lcyBub3QgcmVwcmVzZW50IGNvbnRlbnQgZm9yIHRoZSB1c2VyLiJ9LGF0dHJpYnV0ZXM6W3tuYW1lOiJtZWRpYSIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiVGhpcyBhdHRyaWJ1dGUgZGVmaW5lcyB3aGljaCBtZWRpYSB0aGUgc3R5bGUgc2hvdWxkIGJlIGFwcGxpZWQgdG8uIEl0cyB2YWx1ZSBpcyBhIFttZWRpYSBxdWVyeV0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvR3VpZGUvQ1NTL01lZGlhX3F1ZXJpZXMpLCB3aGljaCBkZWZhdWx0cyB0byBgYWxsYCBpZiB0aGUgYXR0cmlidXRlIGlzIG1pc3NpbmcuIn19LHtuYW1lOiJub25jZSIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiQSBjcnlwdG9ncmFwaGljIG5vbmNlIChudW1iZXIgdXNlZCBvbmNlKSB1c2VkIHRvIHdoaXRlbGlzdCBpbmxpbmUgc3R5bGVzIGluIGEgW3N0eWxlLXNyYyBDb250ZW50LVNlY3VyaXR5LVBvbGljeV0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRUUC9IZWFkZXJzL0NvbnRlbnQtU2VjdXJpdHktUG9saWN5L3N0eWxlLXNyYykuIFRoZSBzZXJ2ZXIgbXVzdCBnZW5lcmF0ZSBhIHVuaXF1ZSBub25jZSB2YWx1ZSBlYWNoIHRpbWUgaXQgdHJhbnNtaXRzIGEgcG9saWN5LiBJdCBpcyBjcml0aWNhbCB0byBwcm92aWRlIGEgbm9uY2UgdGhhdCBjYW5ub3QgYmUgZ3Vlc3NlZCBhcyBieXBhc3NpbmcgYSByZXNvdXJjZeKAmXMgcG9saWN5IGlzIG90aGVyd2lzZSB0cml2aWFsLiJ9fSx7bmFtZToidHlwZSIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiVGhpcyBhdHRyaWJ1dGUgZGVmaW5lcyB0aGUgc3R5bGluZyBsYW5ndWFnZSBhcyBhIE1JTUUgdHlwZSAoY2hhcnNldCBzaG91bGQgbm90IGJlIHNwZWNpZmllZCkuIFRoaXMgYXR0cmlidXRlIGlzIG9wdGlvbmFsIGFuZCBkZWZhdWx0cyB0byBgdGV4dC9jc3NgIGlmIGl0IGlzIG5vdCBzcGVjaWZpZWQg4oCUIHRoZXJlIGlzIHZlcnkgbGl0dGxlIHJlYXNvbiB0byBpbmNsdWRlIHRoaXMgaW4gbW9kZXJuIHdlYiBkb2N1bWVudHMuIn19LHtuYW1lOiJzY29wZWQiLHZhbHVlU2V0OiJ2In0se25hbWU6InRpdGxlIixkZXNjcmlwdGlvbjoiVGhpcyBhdHRyaWJ1dGUgc3BlY2lmaWVzIFthbHRlcm5hdGl2ZSBzdHlsZSBzaGVldF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQ1NTL0FsdGVybmF0aXZlX3N0eWxlX3NoZWV0cykgc2V0cy4ifV0scmVmZXJlbmNlczpbe25hbWU6Ik1ETiBSZWZlcmVuY2UiLHVybDoiaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvSFRNTC9FbGVtZW50L3N0eWxlIn1dfSx7bmFtZToiYm9keSIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiVGhlIGJvZHkgZWxlbWVudCByZXByZXNlbnRzIHRoZSBjb250ZW50IG9mIHRoZSBkb2N1bWVudC4ifSxhdHRyaWJ1dGVzOlt7bmFtZToib25hZnRlcnByaW50IixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJGdW5jdGlvbiB0byBjYWxsIGFmdGVyIHRoZSB1c2VyIGhhcyBwcmludGVkIHRoZSBkb2N1bWVudC4ifX0se25hbWU6Im9uYmVmb3JlcHJpbnQiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IkZ1bmN0aW9uIHRvIGNhbGwgd2hlbiB0aGUgdXNlciByZXF1ZXN0cyBwcmludGluZyBvZiB0aGUgZG9jdW1lbnQuIn19LHtuYW1lOiJvbmJlZm9yZXVubG9hZCIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiRnVuY3Rpb24gdG8gY2FsbCB3aGVuIHRoZSBkb2N1bWVudCBpcyBhYm91dCB0byBiZSB1bmxvYWRlZC4ifX0se25hbWU6Im9uaGFzaGNoYW5nZSIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiRnVuY3Rpb24gdG8gY2FsbCB3aGVuIHRoZSBmcmFnbWVudCBpZGVudGlmaWVyIHBhcnQgKHN0YXJ0aW5nIHdpdGggdGhlIGhhc2ggKGAnIydgKSBjaGFyYWN0ZXIpIG9mIHRoZSBkb2N1bWVudCdzIGN1cnJlbnQgYWRkcmVzcyBoYXMgY2hhbmdlZC4ifX0se25hbWU6Im9ubGFuZ3VhZ2VjaGFuZ2UiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IkZ1bmN0aW9uIHRvIGNhbGwgd2hlbiB0aGUgcHJlZmVycmVkIGxhbmd1YWdlcyBjaGFuZ2VkLiJ9fSx7bmFtZToib25tZXNzYWdlIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJGdW5jdGlvbiB0byBjYWxsIHdoZW4gdGhlIGRvY3VtZW50IGhhcyByZWNlaXZlZCBhIG1lc3NhZ2UuIn19LHtuYW1lOiJvbm9mZmxpbmUiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IkZ1bmN0aW9uIHRvIGNhbGwgd2hlbiBuZXR3b3JrIGNvbW11bmljYXRpb24gaGFzIGZhaWxlZC4ifX0se25hbWU6Im9ub25saW5lIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJGdW5jdGlvbiB0byBjYWxsIHdoZW4gbmV0d29yayBjb21tdW5pY2F0aW9uIGhhcyBiZWVuIHJlc3RvcmVkLiJ9fSx7bmFtZToib25wYWdlaGlkZSJ9LHtuYW1lOiJvbnBhZ2VzaG93In0se25hbWU6Im9ucG9wc3RhdGUiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IkZ1bmN0aW9uIHRvIGNhbGwgd2hlbiB0aGUgdXNlciBoYXMgbmF2aWdhdGVkIHNlc3Npb24gaGlzdG9yeS4ifX0se25hbWU6Im9uc3RvcmFnZSIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiRnVuY3Rpb24gdG8gY2FsbCB3aGVuIHRoZSBzdG9yYWdlIGFyZWEgaGFzIGNoYW5nZWQuIn19LHtuYW1lOiJvbnVubG9hZCIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiRnVuY3Rpb24gdG8gY2FsbCB3aGVuIHRoZSBkb2N1bWVudCBpcyBnb2luZyBhd2F5LiJ9fSx7bmFtZToiYWxpbmsiLGRlc2NyaXB0aW9uOidDb2xvciBvZiB0ZXh0IGZvciBoeXBlcmxpbmtzIHdoZW4gc2VsZWN0ZWQuIF9UaGlzIG1ldGhvZCBpcyBub24tY29uZm9ybWluZywgdXNlIENTUyBbYGNvbG9yYF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQ1NTL2NvbG9yICJUaGUgY29sb3IgQ1NTIHByb3BlcnR5IHNldHMgdGhlIGZvcmVncm91bmQgY29sb3IgdmFsdWUgb2YgYW4gZWxlbWVudFwncyB0ZXh0IGFuZCB0ZXh0IGRlY29yYXRpb25zLCBhbmQgc2V0cyB0aGUgY3VycmVudGNvbG9yIHZhbHVlLiIpIHByb3BlcnR5IGluIGNvbmp1bmN0aW9uIHdpdGggdGhlIFtgOmFjdGl2ZWBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0NTUy86YWN0aXZlICJUaGUgOmFjdGl2ZSBDU1MgcHNldWRvLWNsYXNzIHJlcHJlc2VudHMgYW4gZWxlbWVudCAoc3VjaCBhcyBhIGJ1dHRvbikgdGhhdCBpcyBiZWluZyBhY3RpdmF0ZWQgYnkgdGhlIHVzZXIuIikgcHNldWRvLWNsYXNzIGluc3RlYWQuXyd9LHtuYW1lOiJiYWNrZ3JvdW5kIixkZXNjcmlwdGlvbjonVVJJIG9mIGEgaW1hZ2UgdG8gdXNlIGFzIGEgYmFja2dyb3VuZC4gX1RoaXMgbWV0aG9kIGlzIG5vbi1jb25mb3JtaW5nLCB1c2UgQ1NTIFtgYmFja2dyb3VuZGBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0NTUy9iYWNrZ3JvdW5kICJUaGUgYmFja2dyb3VuZCBzaG9ydGhhbmQgQ1NTIHByb3BlcnR5IHNldHMgYWxsIGJhY2tncm91bmQgc3R5bGUgcHJvcGVydGllcyBhdCBvbmNlLCBzdWNoIGFzIGNvbG9yLCBpbWFnZSwgb3JpZ2luIGFuZCBzaXplLCBvciByZXBlYXQgbWV0aG9kLiIpIHByb3BlcnR5IG9uIHRoZSBlbGVtZW50IGluc3RlYWQuXyd9LHtuYW1lOiJiZ2NvbG9yIixkZXNjcmlwdGlvbjonQmFja2dyb3VuZCBjb2xvciBmb3IgdGhlIGRvY3VtZW50LiBfVGhpcyBtZXRob2QgaXMgbm9uLWNvbmZvcm1pbmcsIHVzZSBDU1MgW2BiYWNrZ3JvdW5kLWNvbG9yYF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQ1NTL2JhY2tncm91bmQtY29sb3IgIlRoZSBiYWNrZ3JvdW5kLWNvbG9yIENTUyBwcm9wZXJ0eSBzZXRzIHRoZSBiYWNrZ3JvdW5kIGNvbG9yIG9mIGFuIGVsZW1lbnQuIikgcHJvcGVydHkgb24gdGhlIGVsZW1lbnQgaW5zdGVhZC5fJ30se25hbWU6ImJvdHRvbW1hcmdpbiIsZGVzY3JpcHRpb246J1RoZSBtYXJnaW4gb2YgdGhlIGJvdHRvbSBvZiB0aGUgYm9keS4gX1RoaXMgbWV0aG9kIGlzIG5vbi1jb25mb3JtaW5nLCB1c2UgQ1NTIFtgbWFyZ2luLWJvdHRvbWBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0NTUy9tYXJnaW4tYm90dG9tICJUaGUgbWFyZ2luLWJvdHRvbSBDU1MgcHJvcGVydHkgc2V0cyB0aGUgbWFyZ2luIGFyZWEgb24gdGhlIGJvdHRvbSBvZiBhbiBlbGVtZW50LiBBIHBvc2l0aXZlIHZhbHVlIHBsYWNlcyBpdCBmYXJ0aGVyIGZyb20gaXRzIG5laWdoYm9ycywgd2hpbGUgYSBuZWdhdGl2ZSB2YWx1ZSBwbGFjZXMgaXQgY2xvc2VyLiIpIHByb3BlcnR5IG9uIHRoZSBlbGVtZW50IGluc3RlYWQuXyd9LHtuYW1lOiJsZWZ0bWFyZ2luIixkZXNjcmlwdGlvbjonVGhlIG1hcmdpbiBvZiB0aGUgbGVmdCBvZiB0aGUgYm9keS4gX1RoaXMgbWV0aG9kIGlzIG5vbi1jb25mb3JtaW5nLCB1c2UgQ1NTIFtgbWFyZ2luLWxlZnRgXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9DU1MvbWFyZ2luLWxlZnQgIlRoZSBtYXJnaW4tbGVmdCBDU1MgcHJvcGVydHkgc2V0cyB0aGUgbWFyZ2luIGFyZWEgb24gdGhlIGxlZnQgc2lkZSBvZiBhbiBlbGVtZW50LiBBIHBvc2l0aXZlIHZhbHVlIHBsYWNlcyBpdCBmYXJ0aGVyIGZyb20gaXRzIG5laWdoYm9ycywgd2hpbGUgYSBuZWdhdGl2ZSB2YWx1ZSBwbGFjZXMgaXQgY2xvc2VyLiIpIHByb3BlcnR5IG9uIHRoZSBlbGVtZW50IGluc3RlYWQuXyd9LHtuYW1lOiJsaW5rIixkZXNjcmlwdGlvbjonQ29sb3Igb2YgdGV4dCBmb3IgdW52aXNpdGVkIGh5cGVydGV4dCBsaW5rcy4gX1RoaXMgbWV0aG9kIGlzIG5vbi1jb25mb3JtaW5nLCB1c2UgQ1NTIFtgY29sb3JgXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9DU1MvY29sb3IgIlRoZSBjb2xvciBDU1MgcHJvcGVydHkgc2V0cyB0aGUgZm9yZWdyb3VuZCBjb2xvciB2YWx1ZSBvZiBhbiBlbGVtZW50XCdzIHRleHQgYW5kIHRleHQgZGVjb3JhdGlvbnMsIGFuZCBzZXRzIHRoZSBjdXJyZW50Y29sb3IgdmFsdWUuIikgcHJvcGVydHkgaW4gY29uanVuY3Rpb24gd2l0aCB0aGUgW2A6bGlua2BdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0NTUy86bGluayAiVGhlIDpsaW5rIENTUyBwc2V1ZG8tY2xhc3MgcmVwcmVzZW50cyBhbiBlbGVtZW50IHRoYXQgaGFzIG5vdCB5ZXQgYmVlbiB2aXNpdGVkLiBJdCBtYXRjaGVzIGV2ZXJ5IHVudmlzaXRlZCA8YT4sIDxhcmVhPiwgb3IgPGxpbms+IGVsZW1lbnQgdGhhdCBoYXMgYW4gaHJlZiBhdHRyaWJ1dGUuIikgcHNldWRvLWNsYXNzIGluc3RlYWQuXyd9LHtuYW1lOiJvbmJsdXIiLGRlc2NyaXB0aW9uOiJGdW5jdGlvbiB0byBjYWxsIHdoZW4gdGhlIGRvY3VtZW50IGxvc2VzIGZvY3VzLiJ9LHtuYW1lOiJvbmVycm9yIixkZXNjcmlwdGlvbjoiRnVuY3Rpb24gdG8gY2FsbCB3aGVuIHRoZSBkb2N1bWVudCBmYWlscyB0byBsb2FkIHByb3Blcmx5LiJ9LHtuYW1lOiJvbmZvY3VzIixkZXNjcmlwdGlvbjoiRnVuY3Rpb24gdG8gY2FsbCB3aGVuIHRoZSBkb2N1bWVudCByZWNlaXZlcyBmb2N1cy4ifSx7bmFtZToib25sb2FkIixkZXNjcmlwdGlvbjoiRnVuY3Rpb24gdG8gY2FsbCB3aGVuIHRoZSBkb2N1bWVudCBoYXMgZmluaXNoZWQgbG9hZGluZy4ifSx7bmFtZToib25yZWRvIixkZXNjcmlwdGlvbjoiRnVuY3Rpb24gdG8gY2FsbCB3aGVuIHRoZSB1c2VyIGhhcyBtb3ZlZCBmb3J3YXJkIGluIHVuZG8gdHJhbnNhY3Rpb24gaGlzdG9yeS4ifSx7bmFtZToib25yZXNpemUiLGRlc2NyaXB0aW9uOiJGdW5jdGlvbiB0byBjYWxsIHdoZW4gdGhlIGRvY3VtZW50IGhhcyBiZWVuIHJlc2l6ZWQuIn0se25hbWU6Im9udW5kbyIsZGVzY3JpcHRpb246IkZ1bmN0aW9uIHRvIGNhbGwgd2hlbiB0aGUgdXNlciBoYXMgbW92ZWQgYmFja3dhcmQgaW4gdW5kbyB0cmFuc2FjdGlvbiBoaXN0b3J5LiJ9LHtuYW1lOiJyaWdodG1hcmdpbiIsZGVzY3JpcHRpb246J1RoZSBtYXJnaW4gb2YgdGhlIHJpZ2h0IG9mIHRoZSBib2R5LiBfVGhpcyBtZXRob2QgaXMgbm9uLWNvbmZvcm1pbmcsIHVzZSBDU1MgW2BtYXJnaW4tcmlnaHRgXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9DU1MvbWFyZ2luLXJpZ2h0ICJUaGUgbWFyZ2luLXJpZ2h0IENTUyBwcm9wZXJ0eSBzZXRzIHRoZSBtYXJnaW4gYXJlYSBvbiB0aGUgcmlnaHQgc2lkZSBvZiBhbiBlbGVtZW50LiBBIHBvc2l0aXZlIHZhbHVlIHBsYWNlcyBpdCBmYXJ0aGVyIGZyb20gaXRzIG5laWdoYm9ycywgd2hpbGUgYSBuZWdhdGl2ZSB2YWx1ZSBwbGFjZXMgaXQgY2xvc2VyLiIpIHByb3BlcnR5IG9uIHRoZSBlbGVtZW50IGluc3RlYWQuXyd9LHtuYW1lOiJ0ZXh0IixkZXNjcmlwdGlvbjonRm9yZWdyb3VuZCBjb2xvciBvZiB0ZXh0LiBfVGhpcyBtZXRob2QgaXMgbm9uLWNvbmZvcm1pbmcsIHVzZSBDU1MgW2Bjb2xvcmBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0NTUy9jb2xvciAiVGhlIGNvbG9yIENTUyBwcm9wZXJ0eSBzZXRzIHRoZSBmb3JlZ3JvdW5kIGNvbG9yIHZhbHVlIG9mIGFuIGVsZW1lbnRcJ3MgdGV4dCBhbmQgdGV4dCBkZWNvcmF0aW9ucywgYW5kIHNldHMgdGhlIGN1cnJlbnRjb2xvciB2YWx1ZS4iKSBwcm9wZXJ0eSBvbiB0aGUgZWxlbWVudCBpbnN0ZWFkLl8nfSx7bmFtZToidG9wbWFyZ2luIixkZXNjcmlwdGlvbjonVGhlIG1hcmdpbiBvZiB0aGUgdG9wIG9mIHRoZSBib2R5LiBfVGhpcyBtZXRob2QgaXMgbm9uLWNvbmZvcm1pbmcsIHVzZSBDU1MgW2BtYXJnaW4tdG9wYF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQ1NTL21hcmdpbi10b3AgIlRoZSBtYXJnaW4tdG9wIENTUyBwcm9wZXJ0eSBzZXRzIHRoZSBtYXJnaW4gYXJlYSBvbiB0aGUgdG9wIG9mIGFuIGVsZW1lbnQuIEEgcG9zaXRpdmUgdmFsdWUgcGxhY2VzIGl0IGZhcnRoZXIgZnJvbSBpdHMgbmVpZ2hib3JzLCB3aGlsZSBhIG5lZ2F0aXZlIHZhbHVlIHBsYWNlcyBpdCBjbG9zZXIuIikgcHJvcGVydHkgb24gdGhlIGVsZW1lbnQgaW5zdGVhZC5fJ30se25hbWU6InZsaW5rIixkZXNjcmlwdGlvbjonQ29sb3Igb2YgdGV4dCBmb3IgdmlzaXRlZCBoeXBlcnRleHQgbGlua3MuIF9UaGlzIG1ldGhvZCBpcyBub24tY29uZm9ybWluZywgdXNlIENTUyBbYGNvbG9yYF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQ1NTL2NvbG9yICJUaGUgY29sb3IgQ1NTIHByb3BlcnR5IHNldHMgdGhlIGZvcmVncm91bmQgY29sb3IgdmFsdWUgb2YgYW4gZWxlbWVudFwncyB0ZXh0IGFuZCB0ZXh0IGRlY29yYXRpb25zLCBhbmQgc2V0cyB0aGUgY3VycmVudGNvbG9yIHZhbHVlLiIpIHByb3BlcnR5IGluIGNvbmp1bmN0aW9uIHdpdGggdGhlIFtgOnZpc2l0ZWRgXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9DU1MvOnZpc2l0ZWQgIlRoZSA6dmlzaXRlZCBDU1MgcHNldWRvLWNsYXNzIHJlcHJlc2VudHMgbGlua3MgdGhhdCB0aGUgdXNlciBoYXMgYWxyZWFkeSB2aXNpdGVkLiBGb3IgcHJpdmFjeSByZWFzb25zLCB0aGUgc3R5bGVzIHRoYXQgY2FuIGJlIG1vZGlmaWVkIHVzaW5nIHRoaXMgc2VsZWN0b3IgYXJlIHZlcnkgbGltaXRlZC4iKSBwc2V1ZG8tY2xhc3MgaW5zdGVhZC5fJ31dLHJlZmVyZW5jZXM6W3tuYW1lOiJNRE4gUmVmZXJlbmNlIix1cmw6Imh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9ib2R5In1dfSx7bmFtZToiYXJ0aWNsZSIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiVGhlIGFydGljbGUgZWxlbWVudCByZXByZXNlbnRzIGEgY29tcGxldGUsIG9yIHNlbGYtY29udGFpbmVkLCBjb21wb3NpdGlvbiBpbiBhIGRvY3VtZW50LCBwYWdlLCBhcHBsaWNhdGlvbiwgb3Igc2l0ZSBhbmQgdGhhdCBpcywgaW4gcHJpbmNpcGxlLCBpbmRlcGVuZGVudGx5IGRpc3RyaWJ1dGFibGUgb3IgcmV1c2FibGUsIGUuZy4gaW4gc3luZGljYXRpb24uIFRoaXMgY291bGQgYmUgYSBmb3J1bSBwb3N0LCBhIG1hZ2F6aW5lIG9yIG5ld3NwYXBlciBhcnRpY2xlLCBhIGJsb2cgZW50cnksIGEgdXNlci1zdWJtaXR0ZWQgY29tbWVudCwgYW4gaW50ZXJhY3RpdmUgd2lkZ2V0IG9yIGdhZGdldCwgb3IgYW55IG90aGVyIGluZGVwZW5kZW50IGl0ZW0gb2YgY29udGVudC4gRWFjaCBhcnRpY2xlIHNob3VsZCBiZSBpZGVudGlmaWVkLCB0eXBpY2FsbHkgYnkgaW5jbHVkaW5nIGEgaGVhZGluZyAoaDHigJNoNiBlbGVtZW50KSBhcyBhIGNoaWxkIG9mIHRoZSBhcnRpY2xlIGVsZW1lbnQuIn0sYXR0cmlidXRlczpbXSxyZWZlcmVuY2VzOlt7bmFtZToiTUROIFJlZmVyZW5jZSIsdXJsOiJodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvYXJ0aWNsZSJ9XX0se25hbWU6InNlY3Rpb24iLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlRoZSBzZWN0aW9uIGVsZW1lbnQgcmVwcmVzZW50cyBhIGdlbmVyaWMgc2VjdGlvbiBvZiBhIGRvY3VtZW50IG9yIGFwcGxpY2F0aW9uLiBBIHNlY3Rpb24sIGluIHRoaXMgY29udGV4dCwgaXMgYSB0aGVtYXRpYyBncm91cGluZyBvZiBjb250ZW50LiBFYWNoIHNlY3Rpb24gc2hvdWxkIGJlIGlkZW50aWZpZWQsIHR5cGljYWxseSBieSBpbmNsdWRpbmcgYSBoZWFkaW5nICggaDEtIGg2IGVsZW1lbnQpIGFzIGEgY2hpbGQgb2YgdGhlIHNlY3Rpb24gZWxlbWVudC4ifSxhdHRyaWJ1dGVzOltdLHJlZmVyZW5jZXM6W3tuYW1lOiJNRE4gUmVmZXJlbmNlIix1cmw6Imh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9zZWN0aW9uIn1dfSx7bmFtZToibmF2IixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJUaGUgbmF2IGVsZW1lbnQgcmVwcmVzZW50cyBhIHNlY3Rpb24gb2YgYSBwYWdlIHRoYXQgbGlua3MgdG8gb3RoZXIgcGFnZXMgb3IgdG8gcGFydHMgd2l0aGluIHRoZSBwYWdlOiBhIHNlY3Rpb24gd2l0aCBuYXZpZ2F0aW9uIGxpbmtzLiJ9LGF0dHJpYnV0ZXM6W10scmVmZXJlbmNlczpbe25hbWU6Ik1ETiBSZWZlcmVuY2UiLHVybDoiaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvSFRNTC9FbGVtZW50L25hdiJ9XX0se25hbWU6ImFzaWRlIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJUaGUgYXNpZGUgZWxlbWVudCByZXByZXNlbnRzIGEgc2VjdGlvbiBvZiBhIHBhZ2UgdGhhdCBjb25zaXN0cyBvZiBjb250ZW50IHRoYXQgaXMgdGFuZ2VudGlhbGx5IHJlbGF0ZWQgdG8gdGhlIGNvbnRlbnQgYXJvdW5kIHRoZSBhc2lkZSBlbGVtZW50LCBhbmQgd2hpY2ggY291bGQgYmUgY29uc2lkZXJlZCBzZXBhcmF0ZSBmcm9tIHRoYXQgY29udGVudC4gU3VjaCBzZWN0aW9ucyBhcmUgb2Z0ZW4gcmVwcmVzZW50ZWQgYXMgc2lkZWJhcnMgaW4gcHJpbnRlZCB0eXBvZ3JhcGh5LiJ9LGF0dHJpYnV0ZXM6W10scmVmZXJlbmNlczpbe25hbWU6Ik1ETiBSZWZlcmVuY2UiLHVybDoiaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2FzaWRlIn1dfSx7bmFtZToiaDEiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlRoZSBoMSBlbGVtZW50IHJlcHJlc2VudHMgYSBzZWN0aW9uIGhlYWRpbmcuIn0sYXR0cmlidXRlczpbXSxyZWZlcmVuY2VzOlt7bmFtZToiTUROIFJlZmVyZW5jZSIsdXJsOiJodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvSGVhZGluZ19FbGVtZW50cyJ9XX0se25hbWU6ImgyIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJUaGUgaDIgZWxlbWVudCByZXByZXNlbnRzIGEgc2VjdGlvbiBoZWFkaW5nLiJ9LGF0dHJpYnV0ZXM6W10scmVmZXJlbmNlczpbe25hbWU6Ik1ETiBSZWZlcmVuY2UiLHVybDoiaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvSFRNTC9FbGVtZW50L0hlYWRpbmdfRWxlbWVudHMifV19LHtuYW1lOiJoMyIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiVGhlIGgzIGVsZW1lbnQgcmVwcmVzZW50cyBhIHNlY3Rpb24gaGVhZGluZy4ifSxhdHRyaWJ1dGVzOltdLHJlZmVyZW5jZXM6W3tuYW1lOiJNRE4gUmVmZXJlbmNlIix1cmw6Imh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9IZWFkaW5nX0VsZW1lbnRzIn1dfSx7bmFtZToiaDQiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlRoZSBoNCBlbGVtZW50IHJlcHJlc2VudHMgYSBzZWN0aW9uIGhlYWRpbmcuIn0sYXR0cmlidXRlczpbXSxyZWZlcmVuY2VzOlt7bmFtZToiTUROIFJlZmVyZW5jZSIsdXJsOiJodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvSGVhZGluZ19FbGVtZW50cyJ9XX0se25hbWU6Img1IixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJUaGUgaDUgZWxlbWVudCByZXByZXNlbnRzIGEgc2VjdGlvbiBoZWFkaW5nLiJ9LGF0dHJpYnV0ZXM6W10scmVmZXJlbmNlczpbe25hbWU6Ik1ETiBSZWZlcmVuY2UiLHVybDoiaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvSFRNTC9FbGVtZW50L0hlYWRpbmdfRWxlbWVudHMifV19LHtuYW1lOiJoNiIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiVGhlIGg2IGVsZW1lbnQgcmVwcmVzZW50cyBhIHNlY3Rpb24gaGVhZGluZy4ifSxhdHRyaWJ1dGVzOltdLHJlZmVyZW5jZXM6W3tuYW1lOiJNRE4gUmVmZXJlbmNlIix1cmw6Imh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9IZWFkaW5nX0VsZW1lbnRzIn1dfSx7bmFtZToiaGVhZGVyIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJUaGUgaGVhZGVyIGVsZW1lbnQgcmVwcmVzZW50cyBpbnRyb2R1Y3RvcnkgY29udGVudCBmb3IgaXRzIG5lYXJlc3QgYW5jZXN0b3Igc2VjdGlvbmluZyBjb250ZW50IG9yIHNlY3Rpb25pbmcgcm9vdCBlbGVtZW50LiBBIGhlYWRlciB0eXBpY2FsbHkgY29udGFpbnMgYSBncm91cCBvZiBpbnRyb2R1Y3Rvcnkgb3IgbmF2aWdhdGlvbmFsIGFpZHMuIFdoZW4gdGhlIG5lYXJlc3QgYW5jZXN0b3Igc2VjdGlvbmluZyBjb250ZW50IG9yIHNlY3Rpb25pbmcgcm9vdCBlbGVtZW50IGlzIHRoZSBib2R5IGVsZW1lbnQsIHRoZW4gaXQgYXBwbGllcyB0byB0aGUgd2hvbGUgcGFnZS4ifSxhdHRyaWJ1dGVzOltdLHJlZmVyZW5jZXM6W3tuYW1lOiJNRE4gUmVmZXJlbmNlIix1cmw6Imh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9oZWFkZXIifV19LHtuYW1lOiJmb290ZXIiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlRoZSBmb290ZXIgZWxlbWVudCByZXByZXNlbnRzIGEgZm9vdGVyIGZvciBpdHMgbmVhcmVzdCBhbmNlc3RvciBzZWN0aW9uaW5nIGNvbnRlbnQgb3Igc2VjdGlvbmluZyByb290IGVsZW1lbnQuIEEgZm9vdGVyIHR5cGljYWxseSBjb250YWlucyBpbmZvcm1hdGlvbiBhYm91dCBpdHMgc2VjdGlvbiBzdWNoIGFzIHdobyB3cm90ZSBpdCwgbGlua3MgdG8gcmVsYXRlZCBkb2N1bWVudHMsIGNvcHlyaWdodCBkYXRhLCBhbmQgdGhlIGxpa2UuIn0sYXR0cmlidXRlczpbXSxyZWZlcmVuY2VzOlt7bmFtZToiTUROIFJlZmVyZW5jZSIsdXJsOiJodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvZm9vdGVyIn1dfSx7bmFtZToiYWRkcmVzcyIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiVGhlIGFkZHJlc3MgZWxlbWVudCByZXByZXNlbnRzIHRoZSBjb250YWN0IGluZm9ybWF0aW9uIGZvciBpdHMgbmVhcmVzdCBhcnRpY2xlIG9yIGJvZHkgZWxlbWVudCBhbmNlc3Rvci4gSWYgdGhhdCBpcyB0aGUgYm9keSBlbGVtZW50LCB0aGVuIHRoZSBjb250YWN0IGluZm9ybWF0aW9uIGFwcGxpZXMgdG8gdGhlIGRvY3VtZW50IGFzIGEgd2hvbGUuIn0sYXR0cmlidXRlczpbXSxyZWZlcmVuY2VzOlt7bmFtZToiTUROIFJlZmVyZW5jZSIsdXJsOiJodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvYWRkcmVzcyJ9XX0se25hbWU6InAiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlRoZSBwIGVsZW1lbnQgcmVwcmVzZW50cyBhIHBhcmFncmFwaC4ifSxhdHRyaWJ1dGVzOltdLHJlZmVyZW5jZXM6W3tuYW1lOiJNRE4gUmVmZXJlbmNlIix1cmw6Imh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9wIn1dfSx7bmFtZToiaHIiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlRoZSBociBlbGVtZW50IHJlcHJlc2VudHMgYSBwYXJhZ3JhcGgtbGV2ZWwgdGhlbWF0aWMgYnJlYWssIGUuZy4gYSBzY2VuZSBjaGFuZ2UgaW4gYSBzdG9yeSwgb3IgYSB0cmFuc2l0aW9uIHRvIGFub3RoZXIgdG9waWMgd2l0aGluIGEgc2VjdGlvbiBvZiBhIHJlZmVyZW5jZSBib29rLiJ9LHZvaWQ6ITAsYXR0cmlidXRlczpbe25hbWU6ImFsaWduIixkZXNjcmlwdGlvbjoiU2V0cyB0aGUgYWxpZ25tZW50IG9mIHRoZSBydWxlIG9uIHRoZSBwYWdlLiBJZiBubyB2YWx1ZSBpcyBzcGVjaWZpZWQsIHRoZSBkZWZhdWx0IHZhbHVlIGlzIGBsZWZ0YC4ifSx7bmFtZToiY29sb3IiLGRlc2NyaXB0aW9uOiJTZXRzIHRoZSBjb2xvciBvZiB0aGUgcnVsZSB0aHJvdWdoIGNvbG9yIG5hbWUgb3IgaGV4YWRlY2ltYWwgdmFsdWUuIn0se25hbWU6Im5vc2hhZGUiLGRlc2NyaXB0aW9uOiJTZXRzIHRoZSBydWxlIHRvIGhhdmUgbm8gc2hhZGluZy4ifSx7bmFtZToic2l6ZSIsZGVzY3JpcHRpb246IlNldHMgdGhlIGhlaWdodCwgaW4gcGl4ZWxzLCBvZiB0aGUgcnVsZS4ifSx7bmFtZToid2lkdGgiLGRlc2NyaXB0aW9uOiJTZXRzIHRoZSBsZW5ndGggb2YgdGhlIHJ1bGUgb24gdGhlIHBhZ2UgdGhyb3VnaCBhIHBpeGVsIG9yIHBlcmNlbnRhZ2UgdmFsdWUuIn1dLHJlZmVyZW5jZXM6W3tuYW1lOiJNRE4gUmVmZXJlbmNlIix1cmw6Imh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9ociJ9XX0se25hbWU6InByZSIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiVGhlIHByZSBlbGVtZW50IHJlcHJlc2VudHMgYSBibG9jayBvZiBwcmVmb3JtYXR0ZWQgdGV4dCwgaW4gd2hpY2ggc3RydWN0dXJlIGlzIHJlcHJlc2VudGVkIGJ5IHR5cG9ncmFwaGljIGNvbnZlbnRpb25zIHJhdGhlciB0aGFuIGJ5IGVsZW1lbnRzLiJ9LGF0dHJpYnV0ZXM6W3tuYW1lOiJjb2xzIixkZXNjcmlwdGlvbjonQ29udGFpbnMgdGhlIF9wcmVmZXJyZWRfIGNvdW50IG9mIGNoYXJhY3RlcnMgdGhhdCBhIGxpbmUgc2hvdWxkIGhhdmUuIEl0IHdhcyBhIG5vbi1zdGFuZGFyZCBzeW5vbnltIG9mIFtgd2lkdGhgXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvcHJlI2F0dHItd2lkdGgpLiBUbyBhY2hpZXZlIHN1Y2ggYW4gZWZmZWN0LCB1c2UgQ1NTIFtgd2lkdGhgXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9DU1Mvd2lkdGggIlRoZSB3aWR0aCBDU1MgcHJvcGVydHkgc2V0cyBhbiBlbGVtZW50XCdzIHdpZHRoLiBCeSBkZWZhdWx0IGl0IHNldHMgdGhlIHdpZHRoIG9mIHRoZSBjb250ZW50IGFyZWEsIGJ1dCBpZiBib3gtc2l6aW5nIGlzIHNldCB0byBib3JkZXItYm94LCBpdCBzZXRzIHRoZSB3aWR0aCBvZiB0aGUgYm9yZGVyIGFyZWEuIikgaW5zdGVhZC4nfSx7bmFtZToid2lkdGgiLGRlc2NyaXB0aW9uOidDb250YWlucyB0aGUgX3ByZWZlcnJlZF8gY291bnQgb2YgY2hhcmFjdGVycyB0aGF0IGEgbGluZSBzaG91bGQgaGF2ZS4gVGhvdWdoIHRlY2huaWNhbGx5IHN0aWxsIGltcGxlbWVudGVkLCB0aGlzIGF0dHJpYnV0ZSBoYXMgbm8gdmlzdWFsIGVmZmVjdDsgdG8gYWNoaWV2ZSBzdWNoIGFuIGVmZmVjdCwgdXNlIENTUyBbYHdpZHRoYF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQ1NTL3dpZHRoICJUaGUgd2lkdGggQ1NTIHByb3BlcnR5IHNldHMgYW4gZWxlbWVudFwncyB3aWR0aC4gQnkgZGVmYXVsdCBpdCBzZXRzIHRoZSB3aWR0aCBvZiB0aGUgY29udGVudCBhcmVhLCBidXQgaWYgYm94LXNpemluZyBpcyBzZXQgdG8gYm9yZGVyLWJveCwgaXQgc2V0cyB0aGUgd2lkdGggb2YgdGhlIGJvcmRlciBhcmVhLiIpIGluc3RlYWQuJ30se25hbWU6IndyYXAiLGRlc2NyaXB0aW9uOidJcyBhIF9oaW50XyBpbmRpY2F0aW5nIGhvdyB0aGUgb3ZlcmZsb3cgbXVzdCBoYXBwZW4uIEluIG1vZGVybiBicm93c2VyIHRoaXMgaGludCBpcyBpZ25vcmVkIGFuZCBubyB2aXN1YWwgZWZmZWN0IHJlc3VsdHMgaW4gaXRzIHByZXNlbnQ7IHRvIGFjaGlldmUgc3VjaCBhbiBlZmZlY3QsIHVzZSBDU1MgW2B3aGl0ZS1zcGFjZWBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0NTUy93aGl0ZS1zcGFjZSAiVGhlIHdoaXRlLXNwYWNlIENTUyBwcm9wZXJ0eSBzZXRzIGhvdyB3aGl0ZSBzcGFjZSBpbnNpZGUgYW4gZWxlbWVudCBpcyBoYW5kbGVkLiIpIGluc3RlYWQuJ31dLHJlZmVyZW5jZXM6W3tuYW1lOiJNRE4gUmVmZXJlbmNlIix1cmw6Imh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9wcmUifV19LHtuYW1lOiJibG9ja3F1b3RlIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJUaGUgYmxvY2txdW90ZSBlbGVtZW50IHJlcHJlc2VudHMgY29udGVudCB0aGF0IGlzIHF1b3RlZCBmcm9tIGFub3RoZXIgc291cmNlLCBvcHRpb25hbGx5IHdpdGggYSBjaXRhdGlvbiB3aGljaCBtdXN0IGJlIHdpdGhpbiBhIGZvb3RlciBvciBjaXRlIGVsZW1lbnQsIGFuZCBvcHRpb25hbGx5IHdpdGggaW4tbGluZSBjaGFuZ2VzIHN1Y2ggYXMgYW5ub3RhdGlvbnMgYW5kIGFiYnJldmlhdGlvbnMuIn0sYXR0cmlidXRlczpbe25hbWU6ImNpdGUiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IkEgVVJMIHRoYXQgZGVzaWduYXRlcyBhIHNvdXJjZSBkb2N1bWVudCBvciBtZXNzYWdlIGZvciB0aGUgaW5mb3JtYXRpb24gcXVvdGVkLiBUaGlzIGF0dHJpYnV0ZSBpcyBpbnRlbmRlZCB0byBwb2ludCB0byBpbmZvcm1hdGlvbiBleHBsYWluaW5nIHRoZSBjb250ZXh0IG9yIHRoZSByZWZlcmVuY2UgZm9yIHRoZSBxdW90ZS4ifX1dLHJlZmVyZW5jZXM6W3tuYW1lOiJNRE4gUmVmZXJlbmNlIix1cmw6Imh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9ibG9ja3F1b3RlIn1dfSx7bmFtZToib2wiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlRoZSBvbCBlbGVtZW50IHJlcHJlc2VudHMgYSBsaXN0IG9mIGl0ZW1zLCB3aGVyZSB0aGUgaXRlbXMgaGF2ZSBiZWVuIGludGVudGlvbmFsbHkgb3JkZXJlZCwgc3VjaCB0aGF0IGNoYW5naW5nIHRoZSBvcmRlciB3b3VsZCBjaGFuZ2UgdGhlIG1lYW5pbmcgb2YgdGhlIGRvY3VtZW50LiJ9LGF0dHJpYnV0ZXM6W3tuYW1lOiJyZXZlcnNlZCIsdmFsdWVTZXQ6InYiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlRoaXMgQm9vbGVhbiBhdHRyaWJ1dGUgc3BlY2lmaWVzIHRoYXQgdGhlIGl0ZW1zIG9mIHRoZSBsaXN0IGFyZSBzcGVjaWZpZWQgaW4gcmV2ZXJzZWQgb3JkZXIuIn19LHtuYW1lOiJzdGFydCIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZTonVGhpcyBpbnRlZ2VyIGF0dHJpYnV0ZSBzcGVjaWZpZXMgdGhlIHN0YXJ0IHZhbHVlIGZvciBudW1iZXJpbmcgdGhlIGluZGl2aWR1YWwgbGlzdCBpdGVtcy4gQWx0aG91Z2ggdGhlIG9yZGVyaW5nIHR5cGUgb2YgbGlzdCBlbGVtZW50cyBtaWdodCBiZSBSb21hbiBudW1lcmFscywgc3VjaCBhcyBYWFhJLCBvciBsZXR0ZXJzLCB0aGUgdmFsdWUgb2Ygc3RhcnQgaXMgYWx3YXlzIHJlcHJlc2VudGVkIGFzIGEgbnVtYmVyLiBUbyBzdGFydCBudW1iZXJpbmcgZWxlbWVudHMgZnJvbSB0aGUgbGV0dGVyICJDIiwgdXNlIGA8b2wgc3RhcnQ9IjMiPmAuXG5cbioqTm90ZSoqOiBUaGlzIGF0dHJpYnV0ZSB3YXMgZGVwcmVjYXRlZCBpbiBIVE1MNCwgYnV0IHJlaW50cm9kdWNlZCBpbiBIVE1MNS4nfX0se25hbWU6InR5cGUiLHZhbHVlU2V0OiJsdCIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiSW5kaWNhdGVzIHRoZSBudW1iZXJpbmcgdHlwZTpcblxuKiAgIGAnYSdgIGluZGljYXRlcyBsb3dlcmNhc2UgbGV0dGVycyxcbiogICBgJ0EnYCBpbmRpY2F0ZXMgdXBwZXJjYXNlIGxldHRlcnMsXG4qICAgYCdpJ2AgaW5kaWNhdGVzIGxvd2VyY2FzZSBSb21hbiBudW1lcmFscyxcbiogICBgJ0knYCBpbmRpY2F0ZXMgdXBwZXJjYXNlIFJvbWFuIG51bWVyYWxzLFxuKiAgIGFuZCBgJzEnYCBpbmRpY2F0ZXMgbnVtYmVycyAoZGVmYXVsdCkuXG5cblRoZSB0eXBlIHNldCBpcyB1c2VkIGZvciB0aGUgZW50aXJlIGxpc3QgdW5sZXNzIGEgZGlmZmVyZW50IFtgdHlwZWBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9saSNhdHRyLXR5cGUpIGF0dHJpYnV0ZSBpcyB1c2VkIHdpdGhpbiBhbiBlbmNsb3NlZCBbYDxsaT5gXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvbGkgXCJUaGUgSFRNTCA8bGk+IGVsZW1lbnQgaXMgdXNlZCB0byByZXByZXNlbnQgYW4gaXRlbSBpbiBhIGxpc3QuIEl0IG11c3QgYmUgY29udGFpbmVkIGluIGEgcGFyZW50IGVsZW1lbnQ6IGFuIG9yZGVyZWQgbGlzdCAoPG9sPiksIGFuIHVub3JkZXJlZCBsaXN0ICg8dWw+KSwgb3IgYSBtZW51ICg8bWVudT4pLiBJbiBtZW51cyBhbmQgdW5vcmRlcmVkIGxpc3RzLCBsaXN0IGl0ZW1zIGFyZSB1c3VhbGx5IGRpc3BsYXllZCB1c2luZyBidWxsZXQgcG9pbnRzLiBJbiBvcmRlcmVkIGxpc3RzLCB0aGV5IGFyZSB1c3VhbGx5IGRpc3BsYXllZCB3aXRoIGFuIGFzY2VuZGluZyBjb3VudGVyIG9uIHRoZSBsZWZ0LCBzdWNoIGFzIGEgbnVtYmVyIG9yIGxldHRlci5cIikgZWxlbWVudC5cblxuKipOb3RlOioqIFRoaXMgYXR0cmlidXRlIHdhcyBkZXByZWNhdGVkIGluIEhUTUw0LCBidXQgcmVpbnRyb2R1Y2VkIGluIEhUTUw1LlxuXG5Vbmxlc3MgdGhlIHZhbHVlIG9mIHRoZSBsaXN0IG51bWJlciBtYXR0ZXJzIChlLmcuIGluIGxlZ2FsIG9yIHRlY2huaWNhbCBkb2N1bWVudHMgd2hlcmUgaXRlbXMgYXJlIHRvIGJlIHJlZmVyZW5jZWQgYnkgdGhlaXIgbnVtYmVyL2xldHRlciksIHRoZSBDU1MgW2BsaXN0LXN0eWxlLXR5cGVgXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9DU1MvbGlzdC1zdHlsZS10eXBlIFwiVGhlIGxpc3Qtc3R5bGUtdHlwZSBDU1MgcHJvcGVydHkgc2V0cyB0aGUgbWFya2VyIChzdWNoIGFzIGEgZGlzYywgY2hhcmFjdGVyLCBvciBjdXN0b20gY291bnRlciBzdHlsZSkgb2YgYSBsaXN0IGl0ZW0gZWxlbWVudC5cIikgcHJvcGVydHkgc2hvdWxkIGJlIHVzZWQgaW5zdGVhZC4ifX0se25hbWU6ImNvbXBhY3QiLGRlc2NyaXB0aW9uOidUaGlzIEJvb2xlYW4gYXR0cmlidXRlIGhpbnRzIHRoYXQgdGhlIGxpc3Qgc2hvdWxkIGJlIHJlbmRlcmVkIGluIGEgY29tcGFjdCBzdHlsZS4gVGhlIGludGVycHJldGF0aW9uIG9mIHRoaXMgYXR0cmlidXRlIGRlcGVuZHMgb24gdGhlIHVzZXIgYWdlbnQgYW5kIGl0IGRvZXNuXCd0IHdvcmsgaW4gYWxsIGJyb3dzZXJzLlxuXG4qKldhcm5pbmc6KiogRG8gbm90IHVzZSB0aGlzIGF0dHJpYnV0ZSwgYXMgaXQgaGFzIGJlZW4gZGVwcmVjYXRlZDogdGhlIFtgPG9sPmBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9vbCAiVGhlIEhUTUwgPG9sPiBlbGVtZW50IHJlcHJlc2VudHMgYW4gb3JkZXJlZCBsaXN0IG9mIGl0ZW1zLCB0eXBpY2FsbHkgcmVuZGVyZWQgYXMgYSBudW1iZXJlZCBsaXN0LiIpIGVsZW1lbnQgc2hvdWxkIGJlIHN0eWxlZCB1c2luZyBbQ1NTXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL0NTUykuIFRvIGdpdmUgYW4gZWZmZWN0IHNpbWlsYXIgdG8gdGhlIGBjb21wYWN0YCBhdHRyaWJ1dGUsIHRoZSBbQ1NTXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL0NTUykgcHJvcGVydHkgW2BsaW5lLWhlaWdodGBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0NTUy9saW5lLWhlaWdodCAiVGhlIGxpbmUtaGVpZ2h0IENTUyBwcm9wZXJ0eSBzZXRzIHRoZSBhbW91bnQgb2Ygc3BhY2UgdXNlZCBmb3IgbGluZXMsIHN1Y2ggYXMgaW4gdGV4dC4gT24gYmxvY2stbGV2ZWwgZWxlbWVudHMsIGl0IHNwZWNpZmllcyB0aGUgbWluaW11bSBoZWlnaHQgb2YgbGluZSBib3hlcyB3aXRoaW4gdGhlIGVsZW1lbnQuIE9uIG5vbi1yZXBsYWNlZCBpbmxpbmUgZWxlbWVudHMsIGl0IHNwZWNpZmllcyB0aGUgaGVpZ2h0IHRoYXQgaXMgdXNlZCB0byBjYWxjdWxhdGUgbGluZSBib3ggaGVpZ2h0LiIpIGNhbiBiZSB1c2VkIHdpdGggYSB2YWx1ZSBvZiBgODAlYC4nfV0scmVmZXJlbmNlczpbe25hbWU6Ik1ETiBSZWZlcmVuY2UiLHVybDoiaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvSFRNTC9FbGVtZW50L29sIn1dfSx7bmFtZToidWwiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlRoZSB1bCBlbGVtZW50IHJlcHJlc2VudHMgYSBsaXN0IG9mIGl0ZW1zLCB3aGVyZSB0aGUgb3JkZXIgb2YgdGhlIGl0ZW1zIGlzIG5vdCBpbXBvcnRhbnQg4oCUIHRoYXQgaXMsIHdoZXJlIGNoYW5naW5nIHRoZSBvcmRlciB3b3VsZCBub3QgbWF0ZXJpYWxseSBjaGFuZ2UgdGhlIG1lYW5pbmcgb2YgdGhlIGRvY3VtZW50LiJ9LGF0dHJpYnV0ZXM6W3tuYW1lOiJjb21wYWN0IixkZXNjcmlwdGlvbjonVGhpcyBCb29sZWFuIGF0dHJpYnV0ZSBoaW50cyB0aGF0IHRoZSBsaXN0IHNob3VsZCBiZSByZW5kZXJlZCBpbiBhIGNvbXBhY3Qgc3R5bGUuIFRoZSBpbnRlcnByZXRhdGlvbiBvZiB0aGlzIGF0dHJpYnV0ZSBkZXBlbmRzIG9uIHRoZSB1c2VyIGFnZW50IGFuZCBpdCBkb2VzblwndCB3b3JrIGluIGFsbCBicm93c2Vycy5cblxuKipVc2FnZSBub3RlOsKgKipEbyBub3QgdXNlIHRoaXMgYXR0cmlidXRlLCBhcyBpdCBoYXMgYmVlbiBkZXByZWNhdGVkOiB0aGUgW2A8dWw+YF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L3VsICJUaGUgSFRNTCA8dWw+IGVsZW1lbnQgcmVwcmVzZW50cyBhbiB1bm9yZGVyZWQgbGlzdCBvZiBpdGVtcywgdHlwaWNhbGx5IHJlbmRlcmVkIGFzIGEgYnVsbGV0ZWQgbGlzdC4iKSBlbGVtZW50IHNob3VsZCBiZSBzdHlsZWQgdXNpbmcgW0NTU10oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9DU1MpLiBUbyBnaXZlIGEgc2ltaWxhciBlZmZlY3QgYXMgdGhlIGBjb21wYWN0YCBhdHRyaWJ1dGUsIHRoZSBbQ1NTXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL0NTUykgcHJvcGVydHkgW2xpbmUtaGVpZ2h0XShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL0NTUy9saW5lLWhlaWdodCkgY2FuIGJlIHVzZWQgd2l0aCBhIHZhbHVlIG9mIGA4MCVgLid9XSxyZWZlcmVuY2VzOlt7bmFtZToiTUROIFJlZmVyZW5jZSIsdXJsOiJodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvdWwifV19LHtuYW1lOiJsaSIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiVGhlIGxpIGVsZW1lbnQgcmVwcmVzZW50cyBhIGxpc3QgaXRlbS4gSWYgaXRzIHBhcmVudCBlbGVtZW50IGlzIGFuIG9sLCB1bCwgb3IgbWVudSBlbGVtZW50LCB0aGVuIHRoZSBlbGVtZW50IGlzIGFuIGl0ZW0gb2YgdGhlIHBhcmVudCBlbGVtZW50J3MgbGlzdCwgYXMgZGVmaW5lZCBmb3IgdGhvc2UgZWxlbWVudHMuIE90aGVyd2lzZSwgdGhlIGxpc3QgaXRlbSBoYXMgbm8gZGVmaW5lZCBsaXN0LXJlbGF0ZWQgcmVsYXRpb25zaGlwIHRvIGFueSBvdGhlciBsaSBlbGVtZW50LiJ9LGF0dHJpYnV0ZXM6W3tuYW1lOiJ2YWx1ZSIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZTonVGhpcyBpbnRlZ2VyIGF0dHJpYnV0ZSBpbmRpY2F0ZXMgdGhlIGN1cnJlbnQgb3JkaW5hbCB2YWx1ZSBvZiB0aGUgbGlzdCBpdGVtIGFzIGRlZmluZWQgYnkgdGhlIFtgPG9sPmBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9vbCAiVGhlIEhUTUwgPG9sPiBlbGVtZW50IHJlcHJlc2VudHMgYW4gb3JkZXJlZCBsaXN0IG9mIGl0ZW1zLCB0eXBpY2FsbHkgcmVuZGVyZWQgYXMgYSBudW1iZXJlZCBsaXN0LiIpIGVsZW1lbnQuIFRoZSBvbmx5IGFsbG93ZWQgdmFsdWUgZm9yIHRoaXMgYXR0cmlidXRlIGlzIGEgbnVtYmVyLCBldmVuIGlmIHRoZSBsaXN0IGlzIGRpc3BsYXllZCB3aXRoIFJvbWFuIG51bWVyYWxzIG9yIGxldHRlcnMuIExpc3QgaXRlbXMgdGhhdCBmb2xsb3cgdGhpcyBvbmUgY29udGludWUgbnVtYmVyaW5nIGZyb20gdGhlIHZhbHVlIHNldC4gVGhlICoqdmFsdWUqKiBhdHRyaWJ1dGUgaGFzIG5vIG1lYW5pbmcgZm9yIHVub3JkZXJlZCBsaXN0cyAoW2A8dWw+YF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L3VsICJUaGUgSFRNTCA8dWw+IGVsZW1lbnQgcmVwcmVzZW50cyBhbiB1bm9yZGVyZWQgbGlzdCBvZiBpdGVtcywgdHlwaWNhbGx5IHJlbmRlcmVkIGFzIGEgYnVsbGV0ZWQgbGlzdC4iKSkgb3IgZm9yIG1lbnVzIChbYDxtZW51PmBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9tZW51ICJUaGUgSFRNTCA8bWVudT4gZWxlbWVudCByZXByZXNlbnRzIGEgZ3JvdXAgb2YgY29tbWFuZHMgdGhhdCBhIHVzZXIgY2FuIHBlcmZvcm0gb3IgYWN0aXZhdGUuIFRoaXMgaW5jbHVkZXMgYm90aCBsaXN0IG1lbnVzLCB3aGljaCBtaWdodCBhcHBlYXIgYWNyb3NzIHRoZSB0b3Agb2YgYSBzY3JlZW4sIGFzIHdlbGwgYXMgY29udGV4dCBtZW51cywgc3VjaCBhcyB0aG9zZSB0aGF0IG1pZ2h0IGFwcGVhciB1bmRlcm5lYXRoIGEgYnV0dG9uIGFmdGVyIGl0IGhhcyBiZWVuIGNsaWNrZWQuIikpLlxuXG4qKk5vdGUqKjogVGhpcyBhdHRyaWJ1dGUgd2FzIGRlcHJlY2F0ZWQgaW4gSFRNTDQsIGJ1dCByZWludHJvZHVjZWQgaW4gSFRNTDUuXG5cbioqTm90ZToqKiBQcmlvciB0byBHZWNrb8KgOS4wLCBuZWdhdGl2ZSB2YWx1ZXMgd2VyZSBpbmNvcnJlY3RseSBjb252ZXJ0ZWQgdG8gMC4gU3RhcnRpbmcgaW4gR2Vja2/CoDkuMCBhbGwgaW50ZWdlciB2YWx1ZXMgYXJlIGNvcnJlY3RseSBwYXJzZWQuJ319LHtuYW1lOiJ0eXBlIixkZXNjcmlwdGlvbjonVGhpcyBjaGFyYWN0ZXIgYXR0cmlidXRlIGluZGljYXRlcyB0aGUgbnVtYmVyaW5nIHR5cGU6XG5cbiogICBgYWA6IGxvd2VyY2FzZSBsZXR0ZXJzXG4qICAgYEFgOiB1cHBlcmNhc2UgbGV0dGVyc1xuKiAgIGBpYDogbG93ZXJjYXNlIFJvbWFuIG51bWVyYWxzXG4qICAgYElgOiB1cHBlcmNhc2UgUm9tYW4gbnVtZXJhbHNcbiogICBgMWA6IG51bWJlcnNcblxuVGhpcyB0eXBlIG92ZXJyaWRlcyB0aGUgb25lIHVzZWQgYnkgaXRzIHBhcmVudCBbYDxvbD5gXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvb2wgIlRoZSBIVE1MIDxvbD4gZWxlbWVudCByZXByZXNlbnRzIGFuIG9yZGVyZWQgbGlzdCBvZiBpdGVtcywgdHlwaWNhbGx5IHJlbmRlcmVkIGFzIGEgbnVtYmVyZWQgbGlzdC4iKSBlbGVtZW50LCBpZiBhbnkuXG5cbioqVXNhZ2Ugbm90ZToqKiBUaGlzIGF0dHJpYnV0ZSBoYXMgYmVlbiBkZXByZWNhdGVkOiB1c2UgdGhlIENTUyBbYGxpc3Qtc3R5bGUtdHlwZWBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0NTUy9saXN0LXN0eWxlLXR5cGUgIlRoZSBsaXN0LXN0eWxlLXR5cGUgQ1NTIHByb3BlcnR5IHNldHMgdGhlIG1hcmtlciAoc3VjaCBhcyBhIGRpc2MsIGNoYXJhY3Rlciwgb3IgY3VzdG9tIGNvdW50ZXIgc3R5bGUpIG9mIGEgbGlzdCBpdGVtIGVsZW1lbnQuIikgcHJvcGVydHkgaW5zdGVhZC4nfV0scmVmZXJlbmNlczpbe25hbWU6Ik1ETiBSZWZlcmVuY2UiLHVybDoiaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2xpIn1dfSx7bmFtZToiZGwiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlRoZSBkbCBlbGVtZW50IHJlcHJlc2VudHMgYW4gYXNzb2NpYXRpb24gbGlzdCBjb25zaXN0aW5nIG9mIHplcm8gb3IgbW9yZSBuYW1lLXZhbHVlIGdyb3VwcyAoYSBkZXNjcmlwdGlvbiBsaXN0KS4gQSBuYW1lLXZhbHVlIGdyb3VwIGNvbnNpc3RzIG9mIG9uZSBvciBtb3JlIG5hbWVzIChkdCBlbGVtZW50cykgZm9sbG93ZWQgYnkgb25lIG9yIG1vcmUgdmFsdWVzIChkZCBlbGVtZW50cyksIGlnbm9yaW5nIGFueSBub2RlcyBvdGhlciB0aGFuIGR0IGFuZCBkZCBlbGVtZW50cy4gV2l0aGluIGEgc2luZ2xlIGRsIGVsZW1lbnQsIHRoZXJlIHNob3VsZCBub3QgYmUgbW9yZSB0aGFuIG9uZSBkdCBlbGVtZW50IGZvciBlYWNoIG5hbWUuIn0sYXR0cmlidXRlczpbXSxyZWZlcmVuY2VzOlt7bmFtZToiTUROIFJlZmVyZW5jZSIsdXJsOiJodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvZGwifV19LHtuYW1lOiJkdCIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiVGhlIGR0IGVsZW1lbnQgcmVwcmVzZW50cyB0aGUgdGVybSwgb3IgbmFtZSwgcGFydCBvZiBhIHRlcm0tZGVzY3JpcHRpb24gZ3JvdXAgaW4gYSBkZXNjcmlwdGlvbiBsaXN0IChkbCBlbGVtZW50KS4ifSxhdHRyaWJ1dGVzOltdLHJlZmVyZW5jZXM6W3tuYW1lOiJNRE4gUmVmZXJlbmNlIix1cmw6Imh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9kdCJ9XX0se25hbWU6ImRkIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJUaGUgZGQgZWxlbWVudCByZXByZXNlbnRzIHRoZSBkZXNjcmlwdGlvbiwgZGVmaW5pdGlvbiwgb3IgdmFsdWUsIHBhcnQgb2YgYSB0ZXJtLWRlc2NyaXB0aW9uIGdyb3VwIGluIGEgZGVzY3JpcHRpb24gbGlzdCAoZGwgZWxlbWVudCkuIn0sYXR0cmlidXRlczpbe25hbWU6Im5vd3JhcCIsZGVzY3JpcHRpb246IklmIHRoZSB2YWx1ZSBvZiB0aGlzIGF0dHJpYnV0ZSBpcyBzZXQgdG8gYHllc2AsIHRoZSBkZWZpbml0aW9uIHRleHQgd2lsbCBub3Qgd3JhcC4gVGhlIGRlZmF1bHQgdmFsdWUgaXMgYG5vYC4ifV0scmVmZXJlbmNlczpbe25hbWU6Ik1ETiBSZWZlcmVuY2UiLHVybDoiaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2RkIn1dfSx7bmFtZToiZmlndXJlIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJUaGUgZmlndXJlIGVsZW1lbnQgcmVwcmVzZW50cyBzb21lIGZsb3cgY29udGVudCwgb3B0aW9uYWxseSB3aXRoIGEgY2FwdGlvbiwgdGhhdCBpcyBzZWxmLWNvbnRhaW5lZCAobGlrZSBhIGNvbXBsZXRlIHNlbnRlbmNlKSBhbmQgaXMgdHlwaWNhbGx5IHJlZmVyZW5jZWQgYXMgYSBzaW5nbGUgdW5pdCBmcm9tIHRoZSBtYWluIGZsb3cgb2YgdGhlIGRvY3VtZW50LiJ9LGF0dHJpYnV0ZXM6W10scmVmZXJlbmNlczpbe25hbWU6Ik1ETiBSZWZlcmVuY2UiLHVybDoiaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2ZpZ3VyZSJ9XX0se25hbWU6ImZpZ2NhcHRpb24iLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlRoZSBmaWdjYXB0aW9uIGVsZW1lbnQgcmVwcmVzZW50cyBhIGNhcHRpb24gb3IgbGVnZW5kIGZvciB0aGUgcmVzdCBvZiB0aGUgY29udGVudHMgb2YgdGhlIGZpZ2NhcHRpb24gZWxlbWVudCdzIHBhcmVudCBmaWd1cmUgZWxlbWVudCwgaWYgYW55LiJ9LGF0dHJpYnV0ZXM6W10scmVmZXJlbmNlczpbe25hbWU6Ik1ETiBSZWZlcmVuY2UiLHVybDoiaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2ZpZ2NhcHRpb24ifV19LHtuYW1lOiJtYWluIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJUaGUgbWFpbiBlbGVtZW50IHJlcHJlc2VudHMgdGhlIG1haW4gY29udGVudCBvZiB0aGUgYm9keSBvZiBhIGRvY3VtZW50IG9yIGFwcGxpY2F0aW9uLiBUaGUgbWFpbiBjb250ZW50IGFyZWEgY29uc2lzdHMgb2YgY29udGVudCB0aGF0IGlzIGRpcmVjdGx5IHJlbGF0ZWQgdG8gb3IgZXhwYW5kcyB1cG9uIHRoZSBjZW50cmFsIHRvcGljIG9mIGEgZG9jdW1lbnQgb3IgY2VudHJhbCBmdW5jdGlvbmFsaXR5IG9mIGFuIGFwcGxpY2F0aW9uLiJ9LGF0dHJpYnV0ZXM6W10scmVmZXJlbmNlczpbe25hbWU6Ik1ETiBSZWZlcmVuY2UiLHVybDoiaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvSFRNTC9FbGVtZW50L21haW4ifV19LHtuYW1lOiJkaXYiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlRoZSBkaXYgZWxlbWVudCBoYXMgbm8gc3BlY2lhbCBtZWFuaW5nIGF0IGFsbC4gSXQgcmVwcmVzZW50cyBpdHMgY2hpbGRyZW4uIEl0IGNhbiBiZSB1c2VkIHdpdGggdGhlIGNsYXNzLCBsYW5nLCBhbmQgdGl0bGUgYXR0cmlidXRlcyB0byBtYXJrIHVwIHNlbWFudGljcyBjb21tb24gdG8gYSBncm91cCBvZiBjb25zZWN1dGl2ZSBlbGVtZW50cy4ifSxhdHRyaWJ1dGVzOltdLHJlZmVyZW5jZXM6W3tuYW1lOiJNRE4gUmVmZXJlbmNlIix1cmw6Imh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9kaXYifV19LHtuYW1lOiJhIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJJZiB0aGUgYSBlbGVtZW50IGhhcyBhbiBocmVmIGF0dHJpYnV0ZSwgdGhlbiBpdCByZXByZXNlbnRzIGEgaHlwZXJsaW5rIChhIGh5cGVydGV4dCBhbmNob3IpIGxhYmVsZWQgYnkgaXRzIGNvbnRlbnRzLiJ9LGF0dHJpYnV0ZXM6W3tuYW1lOiJocmVmIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOidDb250YWlucyBhIFVSTCBvciBhIFVSTCBmcmFnbWVudCB0aGF0IHRoZSBoeXBlcmxpbmsgcG9pbnRzIHRvLlxuQSBVUkwgZnJhZ21lbnQgaXMgYSBuYW1lIHByZWNlZGVkIGJ5IGEgaGFzaCBtYXJrIChgI2ApLCB3aGljaCBzcGVjaWZpZXMgYW4gaW50ZXJuYWwgdGFyZ2V0IGxvY2F0aW9uIChhbiBbYGlkYF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9HbG9iYWxfYXR0cmlidXRlcyNhdHRyLWlkKSBvZiBhbiBIVE1MIGVsZW1lbnQpIHdpdGhpbiB0aGUgY3VycmVudCBkb2N1bWVudC4gVVJMcyBhcmUgbm90IHJlc3RyaWN0ZWQgdG8gV2ViIChIVFRQKS1iYXNlZCBkb2N1bWVudHMsIGJ1dCBjYW4gdXNlIGFueSBwcm90b2NvbCBzdXBwb3J0ZWQgYnkgdGhlIGJyb3dzZXIuIEZvciBleGFtcGxlLCBbYGZpbGU6YF0oaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvRmlsZV9VUklfc2NoZW1lKSwgYGZ0cDpgLCBhbmQgYG1haWx0bzpgIHdvcmsgaW4gbW9zdCBicm93c2Vycy5cblxuKipOb3RlOioqIFlvdSBjYW4gdXNlIGBocmVmPSIjdG9wImAgb3IgdGhlIGVtcHR5IGZyYWdtZW50IGBocmVmPSIjImAgdG8gbGluayB0byB0aGUgdG9wIG9mIHRoZSBjdXJyZW50IHBhZ2UuIFtUaGlzIGJlaGF2aW9yIGlzIHNwZWNpZmllZCBieSBIVE1MNV0oaHR0cHM6Ly93d3cudzMub3JnL1RSL2h0bWw1L3NpbmdsZS1wYWdlLmh0bWwjc2Nyb2xsLXRvLWZyYWdpZCkuJ319LHtuYW1lOiJ0YXJnZXQiLHZhbHVlU2V0OiJ0YXJnZXQiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6J1NwZWNpZmllcyB3aGVyZSB0byBkaXNwbGF5IHRoZSBsaW5rZWQgVVJMLiBJdCBpcyBhIG5hbWUgb2YsIG9yIGtleXdvcmQgZm9yLCBhIF9icm93c2luZyBjb250ZXh0XzogYSB0YWIsIHdpbmRvdywgb3IgYDxpZnJhbWU+YC4gVGhlIGZvbGxvd2luZyBrZXl3b3JkcyBoYXZlIHNwZWNpYWwgbWVhbmluZ3M6XG5cbiogICBgX3NlbGZgOiBMb2FkIHRoZSBVUkwgaW50byB0aGUgc2FtZSBicm93c2luZyBjb250ZXh0IGFzIHRoZSBjdXJyZW50IG9uZS4gVGhpcyBpcyB0aGUgZGVmYXVsdCBiZWhhdmlvci5cbiogICBgX2JsYW5rYDogTG9hZCB0aGUgVVJMIGludG8gYSBuZXcgYnJvd3NpbmcgY29udGV4dC4gVGhpcyBpcyB1c3VhbGx5IGEgdGFiLCBidXQgdXNlcnMgY2FuIGNvbmZpZ3VyZSBicm93c2VycyB0byB1c2UgbmV3IHdpbmRvd3MgaW5zdGVhZC5cbiogICBgX3BhcmVudGA6IExvYWQgdGhlIFVSTCBpbnRvIHRoZSBwYXJlbnQgYnJvd3NpbmcgY29udGV4dCBvZiB0aGUgY3VycmVudCBvbmUuIElmIHRoZXJlIGlzIG5vIHBhcmVudCwgdGhpcyBiZWhhdmVzIHRoZSBzYW1lIHdheSBhcyBgX3NlbGZgLlxuKiAgIGBfdG9wYDogTG9hZCB0aGUgVVJMIGludG8gdGhlIHRvcC1sZXZlbCBicm93c2luZyBjb250ZXh0ICh0aGF0IGlzLCB0aGUgImhpZ2hlc3QiIGJyb3dzaW5nIGNvbnRleHQgdGhhdCBpcyBhbiBhbmNlc3RvciBvZiB0aGUgY3VycmVudCBvbmUsIGFuZCBoYXMgbm8gcGFyZW50KS4gSWYgdGhlcmUgaXMgbm8gcGFyZW50LCB0aGlzIGJlaGF2ZXMgdGhlIHNhbWUgd2F5IGFzIGBfc2VsZmAuXG5cbioqTm90ZToqKiBXaGVuIHVzaW5nIGB0YXJnZXRgLCBjb25zaWRlciBhZGRpbmcgYHJlbD0ibm9yZWZlcnJlciJgIHRvIGF2b2lkIGV4cGxvaXRhdGlvbiBvZiB0aGUgYHdpbmRvdy5vcGVuZXJgIEFQSS5cblxuKipOb3RlOioqIExpbmtpbmcgdG8gYW5vdGhlciBwYWdlIHVzaW5nIGB0YXJnZXQ9Il9ibGFuayJgIHdpbGwgcnVuIHRoZSBuZXcgcGFnZSBvbiB0aGUgc2FtZSBwcm9jZXNzIGFzIHlvdXIgcGFnZS4gSWYgdGhlIG5ldyBwYWdlIGlzIGV4ZWN1dGluZyBleHBlbnNpdmUgSlMsIHlvdXIgcGFnZVwncyBwZXJmb3JtYW5jZSBtYXkgc3VmZmVyLiBUbyBhdm9pZCB0aGlzIHVzZSBgcmVsPSJub29wZW5lciJgLid9fSx7bmFtZToiZG93bmxvYWQiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlRoaXMgYXR0cmlidXRlIGluc3RydWN0cyBicm93c2VycyB0byBkb3dubG9hZCBhIFVSTCBpbnN0ZWFkIG9mIG5hdmlnYXRpbmcgdG8gaXQsIHNvIHRoZSB1c2VyIHdpbGwgYmUgcHJvbXB0ZWQgdG8gc2F2ZSBpdCBhcyBhIGxvY2FsIGZpbGUuIElmIHRoZSBhdHRyaWJ1dGUgaGFzIGEgdmFsdWUsIGl0IGlzIHVzZWQgYXMgdGhlIHByZS1maWxsZWQgZmlsZSBuYW1lIGluIHRoZSBTYXZlIHByb21wdCAodGhlIHVzZXIgY2FuIHN0aWxsIGNoYW5nZSB0aGUgZmlsZSBuYW1lIGlmIHRoZXkgd2FudCkuIFRoZXJlIGFyZSBubyByZXN0cmljdGlvbnMgb24gYWxsb3dlZCB2YWx1ZXMsIHRob3VnaCBgL2AgYW5kIGBcXGAgYXJlIGNvbnZlcnRlZCB0byB1bmRlcnNjb3Jlcy4gTW9zdCBmaWxlIHN5c3RlbXMgbGltaXQgc29tZSBwdW5jdHVhdGlvbiBpbiBmaWxlIG5hbWVzLCBhbmQgYnJvd3NlcnMgd2lsbCBhZGp1c3QgdGhlIHN1Z2dlc3RlZCBuYW1lIGFjY29yZGluZ2x5LlxuXG4qKk5vdGVzOioqXG5cbiogICBUaGlzIGF0dHJpYnV0ZSBvbmx5IHdvcmtzIGZvciBbc2FtZS1vcmlnaW4gVVJMc10oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvU2VjdXJpdHkvU2FtZS1vcmlnaW5fcG9saWN5KS5cbiogICBBbHRob3VnaCBIVFRQKHMpIFVSTHMgbmVlZCB0byBiZSBpbiB0aGUgc2FtZS1vcmlnaW4sIFtgYmxvYjpgIFVSTHNdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9VUkwuY3JlYXRlT2JqZWN0VVJMKSBhbmQgW2BkYXRhOmAgVVJMc10oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRUUC9CYXNpY3Nfb2ZfSFRUUC9EYXRhX1VSSXMpIGFyZSBhbGxvd2VkIHNvIHRoYXQgY29udGVudCBnZW5lcmF0ZWQgYnkgSmF2YVNjcmlwdCwgc3VjaCBhcyBwaWN0dXJlcyBjcmVhdGVkIGluIGFuIGltYWdlLWVkaXRvciBXZWIgYXBwLCBjYW4gYmUgZG93bmxvYWRlZC5cbiogICBJZiB0aGUgSFRUUCBoZWFkZXIgW2BDb250ZW50LURpc3Bvc2l0aW9uOmBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUVFAvSGVhZGVycy9Db250ZW50LURpc3Bvc2l0aW9uKSBnaXZlcyBhIGRpZmZlcmVudCBmaWxlbmFtZSB0aGFuIHRoaXMgYXR0cmlidXRlLCB0aGUgSFRUUCBoZWFkZXIgdGFrZXMgcHJpb3JpdHkgb3ZlciB0aGlzIGF0dHJpYnV0ZS5cbiogICBJZiBgQ29udGVudC1EaXNwb3NpdGlvbjpgIGlzIHNldCB0byBgaW5saW5lYCwgRmlyZWZveCBwcmlvcml0aXplcyBgQ29udGVudC1EaXNwb3NpdGlvbmAsIGxpa2UgdGhlIGZpbGVuYW1lIGNhc2UsIHdoaWxlIENocm9tZSBwcmlvcml0aXplcyB0aGUgYGRvd25sb2FkYCBhdHRyaWJ1dGUuIn19LHtuYW1lOiJwaW5nIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOidDb250YWlucyBhIHNwYWNlLXNlcGFyYXRlZCBsaXN0IG9mIFVSTHMgdG8gd2hpY2gsIHdoZW4gdGhlIGh5cGVybGluayBpcyBmb2xsb3dlZCwgW2BQT1NUYF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRUUC9NZXRob2RzL1BPU1QgIlRoZSBIVFRQIFBPU1QgbWV0aG9kIHNlbmRzIGRhdGEgdG8gdGhlIHNlcnZlci4gVGhlIHR5cGUgb2YgdGhlIGJvZHkgb2YgdGhlIHJlcXVlc3QgaXMgaW5kaWNhdGVkIGJ5IHRoZSBDb250ZW50LVR5cGUgaGVhZGVyLiIpIHJlcXVlc3RzIHdpdGggdGhlIGJvZHkgYFBJTkdgIHdpbGwgYmUgc2VudCBieSB0aGUgYnJvd3NlciAoaW4gdGhlIGJhY2tncm91bmQpLiBUeXBpY2FsbHkgdXNlZCBmb3IgdHJhY2tpbmcuJ319LHtuYW1lOiJyZWwiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlNwZWNpZmllcyB0aGUgcmVsYXRpb25zaGlwIG9mIHRoZSB0YXJnZXQgb2JqZWN0IHRvIHRoZSBsaW5rIG9iamVjdC4gVGhlIHZhbHVlIGlzIGEgc3BhY2Utc2VwYXJhdGVkIGxpc3Qgb2YgW2xpbmsgdHlwZXNdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvTGlua190eXBlcykuIn19LHtuYW1lOiJocmVmbGFuZyIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZTonVGhpcyBhdHRyaWJ1dGUgaW5kaWNhdGVzIHRoZSBodW1hbiBsYW5ndWFnZSBvZiB0aGUgbGlua2VkIHJlc291cmNlLiBJdCBpcyBwdXJlbHkgYWR2aXNvcnksIHdpdGggbm8gYnVpbHQtaW4gZnVuY3Rpb25hbGl0eS4gQWxsb3dlZCB2YWx1ZXMgYXJlIGRldGVybWluZWQgYnkgW0JDUDQ3XShodHRwczovL3d3dy5pZXRmLm9yZy9yZmMvYmNwL2JjcDQ3LnR4dCAiVGFncyBmb3IgSWRlbnRpZnlpbmcgTGFuZ3VhZ2VzIikuJ319LHtuYW1lOiJ0eXBlIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOidTcGVjaWZpZXMgdGhlIG1lZGlhIHR5cGUgaW4gdGhlIGZvcm0gb2YgYSBbTUlNRSB0eXBlXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL0dsb3NzYXJ5L01JTUVfdHlwZSAiTUlNRSB0eXBlOiBBwqBNSU1FIHR5cGXCoChub3cgcHJvcGVybHkgY2FsbGVkICJtZWRpYSB0eXBlIiwgYnV0wqBhbHNvIHNvbWV0aW1lcyAiY29udGVudCB0eXBlIikgaXMgYSBzdHJpbmcgc2VudCBhbG9uZ8Kgd2l0aCBhIGZpbGUgaW5kaWNhdGluZyB0aGUgdHlwZSBvZiB0aGUgZmlsZSAoZGVzY3JpYmluZyB0aGUgY29udGVudCBmb3JtYXQsIGZvciBleGFtcGxlLCBhIHNvdW5kIGZpbGUgbWlnaHQgYmUgbGFiZWxlZMKgYXVkaW8vb2dnLCBvciBhbiBpbWFnZSBmaWxlwqBpbWFnZS9wbmcpLiIpIGZvciB0aGUgbGlua2VkIFVSTC4gSXQgaXMgcHVyZWx5IGFkdmlzb3J5LCB3aXRoIG5vIGJ1aWx0LWluIGZ1bmN0aW9uYWxpdHkuJ319LHtuYW1lOiJyZWZlcnJlcnBvbGljeSIsZGVzY3JpcHRpb246IkluZGljYXRlcyB3aGljaCBbcmVmZXJyZXJdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUVFAvSGVhZGVycy9SZWZlcmVyKSB0byBzZW5kIHdoZW4gZmV0Y2hpbmcgdGhlIFVSTDpcblxuKiAgIGAnbm8tcmVmZXJyZXInYCBtZWFucyB0aGUgYFJlZmVyZXI6YCBoZWFkZXIgd2lsbCBub3QgYmUgc2VudC5cbiogICBgJ25vLXJlZmVycmVyLXdoZW4tZG93bmdyYWRlJ2AgbWVhbnMgbm8gYFJlZmVyZXI6YCBoZWFkZXIgd2lsbCBiZSBzZW50IHdoZW4gbmF2aWdhdGluZyB0byBhbiBvcmlnaW4gd2l0aG91dCBIVFRQUy4gVGhpcyBpcyB0aGUgZGVmYXVsdCBiZWhhdmlvci5cbiogICBgJ29yaWdpbidgIG1lYW5zIHRoZSByZWZlcnJlciB3aWxsIGJlIHRoZSBbb3JpZ2luXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL0dsb3NzYXJ5L09yaWdpbikgb2YgdGhlIHBhZ2UsIG5vdCBpbmNsdWRpbmcgaW5mb3JtYXRpb24gYWZ0ZXIgdGhlIGRvbWFpbi5cbiogICBgJ29yaWdpbi13aGVuLWNyb3NzLW9yaWdpbidgIG1lYW5pbmcgdGhhdCBuYXZpZ2F0aW9ucyB0byBvdGhlciBvcmlnaW5zIHdpbGwgYmUgbGltaXRlZCB0byB0aGUgc2NoZW1lLCB0aGUgaG9zdCBhbmQgdGhlIHBvcnQsIHdoaWxlIG5hdmlnYXRpb25zIG9uIHRoZSBzYW1lIG9yaWdpbiB3aWxsIGluY2x1ZGUgdGhlIHJlZmVycmVyJ3MgcGF0aC5cbiogICBgJ3N0cmljdC1vcmlnaW4td2hlbi1jcm9zcy1vcmlnaW4nYFxuKiAgIGAndW5zYWZlLXVybCdgIG1lYW5zIHRoZSByZWZlcnJlciB3aWxsIGluY2x1ZGUgdGhlIG9yaWdpbiBhbmQgcGF0aCwgYnV0IG5vdCB0aGUgZnJhZ21lbnQsIHBhc3N3b3JkLCBvciB1c2VybmFtZS4gVGhpcyBpcyB1bnNhZmUgYmVjYXVzZSBpdCBjYW4gbGVhayBkYXRhIGZyb20gc2VjdXJlIFVSTHMgdG8gaW5zZWN1cmUgb25lcy4ifV0scmVmZXJlbmNlczpbe25hbWU6Ik1ETiBSZWZlcmVuY2UiLHVybDoiaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2EifV19LHtuYW1lOiJlbSIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiVGhlIGVtIGVsZW1lbnQgcmVwcmVzZW50cyBzdHJlc3MgZW1waGFzaXMgb2YgaXRzIGNvbnRlbnRzLiJ9LGF0dHJpYnV0ZXM6W10scmVmZXJlbmNlczpbe25hbWU6Ik1ETiBSZWZlcmVuY2UiLHVybDoiaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2VtIn1dfSx7bmFtZToic3Ryb25nIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJUaGUgc3Ryb25nIGVsZW1lbnQgcmVwcmVzZW50cyBzdHJvbmcgaW1wb3J0YW5jZSwgc2VyaW91c25lc3MsIG9yIHVyZ2VuY3kgZm9yIGl0cyBjb250ZW50cy4ifSxhdHRyaWJ1dGVzOltdLHJlZmVyZW5jZXM6W3tuYW1lOiJNRE4gUmVmZXJlbmNlIix1cmw6Imh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9zdHJvbmcifV19LHtuYW1lOiJzbWFsbCIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiVGhlIHNtYWxsIGVsZW1lbnQgcmVwcmVzZW50cyBzaWRlIGNvbW1lbnRzIHN1Y2ggYXMgc21hbGwgcHJpbnQuIn0sYXR0cmlidXRlczpbXSxyZWZlcmVuY2VzOlt7bmFtZToiTUROIFJlZmVyZW5jZSIsdXJsOiJodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvc21hbGwifV19LHtuYW1lOiJzIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJUaGUgcyBlbGVtZW50IHJlcHJlc2VudHMgY29udGVudHMgdGhhdCBhcmUgbm8gbG9uZ2VyIGFjY3VyYXRlIG9yIG5vIGxvbmdlciByZWxldmFudC4ifSxhdHRyaWJ1dGVzOltdLHJlZmVyZW5jZXM6W3tuYW1lOiJNRE4gUmVmZXJlbmNlIix1cmw6Imh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9zIn1dfSx7bmFtZToiY2l0ZSIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiVGhlIGNpdGUgZWxlbWVudCByZXByZXNlbnRzIGEgcmVmZXJlbmNlIHRvIGEgY3JlYXRpdmUgd29yay4gSXQgbXVzdCBpbmNsdWRlIHRoZSB0aXRsZSBvZiB0aGUgd29yayBvciB0aGUgbmFtZSBvZiB0aGUgYXV0aG9yKHBlcnNvbiwgcGVvcGxlIG9yIG9yZ2FuaXphdGlvbikgb3IgYW4gVVJMIHJlZmVyZW5jZSwgb3IgYSByZWZlcmVuY2UgaW4gYWJicmV2aWF0ZWQgZm9ybSBhcyBwZXIgdGhlIGNvbnZlbnRpb25zIHVzZWQgZm9yIHRoZSBhZGRpdGlvbiBvZiBjaXRhdGlvbiBtZXRhZGF0YS4ifSxhdHRyaWJ1dGVzOltdLHJlZmVyZW5jZXM6W3tuYW1lOiJNRE4gUmVmZXJlbmNlIix1cmw6Imh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9jaXRlIn1dfSx7bmFtZToicSIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiVGhlIHEgZWxlbWVudCByZXByZXNlbnRzIHNvbWUgcGhyYXNpbmcgY29udGVudCBxdW90ZWQgZnJvbSBhbm90aGVyIHNvdXJjZS4ifSxhdHRyaWJ1dGVzOlt7bmFtZToiY2l0ZSIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiVGhlIHZhbHVlIG9mIHRoaXMgYXR0cmlidXRlIGlzIGEgVVJMIHRoYXQgZGVzaWduYXRlcyBhIHNvdXJjZSBkb2N1bWVudCBvciBtZXNzYWdlIGZvciB0aGUgaW5mb3JtYXRpb24gcXVvdGVkLiBUaGlzIGF0dHJpYnV0ZSBpcyBpbnRlbmRlZCB0byBwb2ludCB0byBpbmZvcm1hdGlvbiBleHBsYWluaW5nIHRoZSBjb250ZXh0IG9yIHRoZSByZWZlcmVuY2UgZm9yIHRoZSBxdW90ZS4ifX1dLHJlZmVyZW5jZXM6W3tuYW1lOiJNRE4gUmVmZXJlbmNlIix1cmw6Imh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9xIn1dfSx7bmFtZToiZGZuIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJUaGUgZGZuIGVsZW1lbnQgcmVwcmVzZW50cyB0aGUgZGVmaW5pbmcgaW5zdGFuY2Ugb2YgYSB0ZXJtLiBUaGUgcGFyYWdyYXBoLCBkZXNjcmlwdGlvbiBsaXN0IGdyb3VwLCBvciBzZWN0aW9uIHRoYXQgaXMgdGhlIG5lYXJlc3QgYW5jZXN0b3Igb2YgdGhlIGRmbiBlbGVtZW50IG11c3QgYWxzbyBjb250YWluIHRoZSBkZWZpbml0aW9uKHMpIGZvciB0aGUgdGVybSBnaXZlbiBieSB0aGUgZGZuIGVsZW1lbnQuIn0sYXR0cmlidXRlczpbXSxyZWZlcmVuY2VzOlt7bmFtZToiTUROIFJlZmVyZW5jZSIsdXJsOiJodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvZGZuIn1dfSx7bmFtZToiYWJiciIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiVGhlIGFiYnIgZWxlbWVudCByZXByZXNlbnRzIGFuIGFiYnJldmlhdGlvbiBvciBhY3JvbnltLCBvcHRpb25hbGx5IHdpdGggaXRzIGV4cGFuc2lvbi4gVGhlIHRpdGxlIGF0dHJpYnV0ZSBtYXkgYmUgdXNlZCB0byBwcm92aWRlIGFuIGV4cGFuc2lvbiBvZiB0aGUgYWJicmV2aWF0aW9uLiBUaGUgYXR0cmlidXRlLCBpZiBzcGVjaWZpZWQsIG11c3QgY29udGFpbiBhbiBleHBhbnNpb24gb2YgdGhlIGFiYnJldmlhdGlvbiwgYW5kIG5vdGhpbmcgZWxzZS4ifSxhdHRyaWJ1dGVzOltdLHJlZmVyZW5jZXM6W3tuYW1lOiJNRE4gUmVmZXJlbmNlIix1cmw6Imh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9hYmJyIn1dfSx7bmFtZToicnVieSIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiVGhlIHJ1YnkgZWxlbWVudCBhbGxvd3Mgb25lIG9yIG1vcmUgc3BhbnMgb2YgcGhyYXNpbmcgY29udGVudCB0byBiZSBtYXJrZWQgd2l0aCBydWJ5IGFubm90YXRpb25zLiBSdWJ5IGFubm90YXRpb25zIGFyZSBzaG9ydCBydW5zIG9mIHRleHQgcHJlc2VudGVkIGFsb25nc2lkZSBiYXNlIHRleHQsIHByaW1hcmlseSB1c2VkIGluIEVhc3QgQXNpYW4gdHlwb2dyYXBoeSBhcyBhIGd1aWRlIGZvciBwcm9udW5jaWF0aW9uIG9yIHRvIGluY2x1ZGUgb3RoZXIgYW5ub3RhdGlvbnMuIEluIEphcGFuZXNlLCB0aGlzIGZvcm0gb2YgdHlwb2dyYXBoeSBpcyBhbHNvIGtub3duIGFzIGZ1cmlnYW5hLiBSdWJ5IHRleHQgY2FuIGFwcGVhciBvbiBlaXRoZXIgc2lkZSwgYW5kIHNvbWV0aW1lcyBib3RoIHNpZGVzLCBvZiB0aGUgYmFzZSB0ZXh0LCBhbmQgaXQgaXMgcG9zc2libGUgdG8gY29udHJvbCBpdHMgcG9zaXRpb24gdXNpbmcgQ1NTLiBBIG1vcmUgY29tcGxldGUgaW50cm9kdWN0aW9uIHRvIHJ1YnkgY2FuIGJlIGZvdW5kIGluIHRoZSBVc2UgQ2FzZXMgJiBFeHBsb3JhdG9yeSBBcHByb2FjaGVzIGZvciBSdWJ5IE1hcmt1cCBkb2N1bWVudCBhcyB3ZWxsIGFzIGluIENTUyBSdWJ5IE1vZHVsZSBMZXZlbCAxLiBbUlVCWS1VQ10gW0NTU1JVQlldIn0sYXR0cmlidXRlczpbXSxyZWZlcmVuY2VzOlt7bmFtZToiTUROIFJlZmVyZW5jZSIsdXJsOiJodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvcnVieSJ9XX0se25hbWU6InJiIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJUaGUgcmIgZWxlbWVudCBtYXJrcyB0aGUgYmFzZSB0ZXh0IGNvbXBvbmVudCBvZiBhIHJ1YnkgYW5ub3RhdGlvbi4gV2hlbiBpdCBpcyB0aGUgY2hpbGQgb2YgYSBydWJ5IGVsZW1lbnQsIGl0IGRvZXNuJ3QgcmVwcmVzZW50IGFueXRoaW5nIGl0c2VsZiwgYnV0IGl0cyBwYXJlbnQgcnVieSBlbGVtZW50IHVzZXMgaXQgYXMgcGFydCBvZiBkZXRlcm1pbmluZyB3aGF0IGl0IHJlcHJlc2VudHMuIn0sYXR0cmlidXRlczpbXSxyZWZlcmVuY2VzOlt7bmFtZToiTUROIFJlZmVyZW5jZSIsdXJsOiJodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvcmIifV19LHtuYW1lOiJydCIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiVGhlIHJ0IGVsZW1lbnQgbWFya3MgdGhlIHJ1YnkgdGV4dCBjb21wb25lbnQgb2YgYSBydWJ5IGFubm90YXRpb24uIFdoZW4gaXQgaXMgdGhlIGNoaWxkIG9mIGEgcnVieSBlbGVtZW50IG9yIG9mIGFuIHJ0YyBlbGVtZW50IHRoYXQgaXMgaXRzZWxmIHRoZSBjaGlsZCBvZiBhIHJ1YnkgZWxlbWVudCwgaXQgZG9lc24ndCByZXByZXNlbnQgYW55dGhpbmcgaXRzZWxmLCBidXQgaXRzIGFuY2VzdG9yIHJ1YnkgZWxlbWVudCB1c2VzIGl0IGFzIHBhcnQgb2YgZGV0ZXJtaW5pbmcgd2hhdCBpdCByZXByZXNlbnRzLiJ9LGF0dHJpYnV0ZXM6W10scmVmZXJlbmNlczpbe25hbWU6Ik1ETiBSZWZlcmVuY2UiLHVybDoiaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvSFRNTC9FbGVtZW50L3J0In1dfSx7bmFtZToicnAiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlRoZSBycCBlbGVtZW50IGlzIHVzZWQgdG8gcHJvdmlkZSBmYWxsYmFjayB0ZXh0IHRvIGJlIHNob3duIGJ5IHVzZXIgYWdlbnRzIHRoYXQgZG9uJ3Qgc3VwcG9ydCBydWJ5IGFubm90YXRpb25zLiBPbmUgd2lkZXNwcmVhZCBjb252ZW50aW9uIGlzIHRvIHByb3ZpZGUgcGFyZW50aGVzZXMgYXJvdW5kIHRoZSBydWJ5IHRleHQgY29tcG9uZW50IG9mIGEgcnVieSBhbm5vdGF0aW9uLiJ9LGF0dHJpYnV0ZXM6W10scmVmZXJlbmNlczpbe25hbWU6Ik1ETiBSZWZlcmVuY2UiLHVybDoiaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvSFRNTC9FbGVtZW50L3JwIn1dfSx7bmFtZToidGltZSIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiVGhlIHRpbWUgZWxlbWVudCByZXByZXNlbnRzIGl0cyBjb250ZW50cywgYWxvbmcgd2l0aCBhIG1hY2hpbmUtcmVhZGFibGUgZm9ybSBvZiB0aG9zZSBjb250ZW50cyBpbiB0aGUgZGF0ZXRpbWUgYXR0cmlidXRlLiBUaGUga2luZCBvZiBjb250ZW50IGlzIGxpbWl0ZWQgdG8gdmFyaW91cyBraW5kcyBvZiBkYXRlcywgdGltZXMsIHRpbWUtem9uZSBvZmZzZXRzLCBhbmQgZHVyYXRpb25zLCBhcyBkZXNjcmliZWQgYmVsb3cuIn0sYXR0cmlidXRlczpbe25hbWU6ImRhdGV0aW1lIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJUaGlzIGF0dHJpYnV0ZSBpbmRpY2F0ZXMgdGhlIHRpbWUgYW5kL29yIGRhdGUgb2YgdGhlIGVsZW1lbnQgYW5kIG11c3QgYmUgaW4gb25lIG9mIHRoZSBmb3JtYXRzIGRlc2NyaWJlZCBiZWxvdy4ifX1dLHJlZmVyZW5jZXM6W3tuYW1lOiJNRE4gUmVmZXJlbmNlIix1cmw6Imh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RvY3MvV2ViL0hUTUwvRWxlbWVudC90aW1lIn1dfSx7bmFtZToiY29kZSIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiVGhlIGNvZGUgZWxlbWVudCByZXByZXNlbnRzIGEgZnJhZ21lbnQgb2YgY29tcHV0ZXIgY29kZS4gVGhpcyBjb3VsZCBiZSBhbiBYTUwgZWxlbWVudCBuYW1lLCBhIGZpbGUgbmFtZSwgYSBjb21wdXRlciBwcm9ncmFtLCBvciBhbnkgb3RoZXIgc3RyaW5nIHRoYXQgYSBjb21wdXRlciB3b3VsZCByZWNvZ25pemUuIn0sYXR0cmlidXRlczpbXSxyZWZlcmVuY2VzOlt7bmFtZToiTUROIFJlZmVyZW5jZSIsdXJsOiJodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvY29kZSJ9XX0se25hbWU6InZhciIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiVGhlIHZhciBlbGVtZW50IHJlcHJlc2VudHMgYSB2YXJpYWJsZS4gVGhpcyBjb3VsZCBiZSBhbiBhY3R1YWwgdmFyaWFibGUgaW4gYSBtYXRoZW1hdGljYWwgZXhwcmVzc2lvbiBvciBwcm9ncmFtbWluZyBjb250ZXh0LCBhbiBpZGVudGlmaWVyIHJlcHJlc2VudGluZyBhIGNvbnN0YW50LCBhIHN5bWJvbCBpZGVudGlmeWluZyBhIHBoeXNpY2FsIHF1YW50aXR5LCBhIGZ1bmN0aW9uIHBhcmFtZXRlciwgb3IganVzdCBiZSBhIHRlcm0gdXNlZCBhcyBhIHBsYWNlaG9sZGVyIGluIHByb3NlLiJ9LGF0dHJpYnV0ZXM6W10scmVmZXJlbmNlczpbe25hbWU6Ik1ETiBSZWZlcmVuY2UiLHVybDoiaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvSFRNTC9FbGVtZW50L3ZhciJ9XX0se25hbWU6InNhbXAiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlRoZSBzYW1wIGVsZW1lbnQgcmVwcmVzZW50cyBzYW1wbGUgb3IgcXVvdGVkIG91dHB1dCBmcm9tIGFub3RoZXIgcHJvZ3JhbSBvciBjb21wdXRpbmcgc3lzdGVtLiJ9LGF0dHJpYnV0ZXM6W10scmVmZXJlbmNlczpbe25hbWU6Ik1ETiBSZWZlcmVuY2UiLHVybDoiaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvSFRNTC9FbGVtZW50L3NhbXAifV19LHtuYW1lOiJrYmQiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlRoZSBrYmQgZWxlbWVudCByZXByZXNlbnRzIHVzZXIgaW5wdXQgKHR5cGljYWxseSBrZXlib2FyZCBpbnB1dCwgYWx0aG91Z2ggaXQgbWF5IGFsc28gYmUgdXNlZCB0byByZXByZXNlbnQgb3RoZXIgaW5wdXQsIHN1Y2ggYXMgdm9pY2UgY29tbWFuZHMpLiJ9LGF0dHJpYnV0ZXM6W10scmVmZXJlbmNlczpbe25hbWU6Ik1ETiBSZWZlcmVuY2UiLHVybDoiaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2tiZCJ9XX0se25hbWU6InN1YiIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiVGhlIHN1YiBlbGVtZW50IHJlcHJlc2VudHMgYSBzdWJzY3JpcHQuIn0sYXR0cmlidXRlczpbXSxyZWZlcmVuY2VzOlt7bmFtZToiTUROIFJlZmVyZW5jZSIsdXJsOiJodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvc3ViIn1dfSx7bmFtZToic3VwIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJUaGUgc3VwIGVsZW1lbnQgcmVwcmVzZW50cyBhIHN1cGVyc2NyaXB0LiJ9LGF0dHJpYnV0ZXM6W10scmVmZXJlbmNlczpbe25hbWU6Ik1ETiBSZWZlcmVuY2UiLHVybDoiaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvSFRNTC9FbGVtZW50L3N1cCJ9XX0se25hbWU6ImkiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlRoZSBpIGVsZW1lbnQgcmVwcmVzZW50cyBhIHNwYW4gb2YgdGV4dCBpbiBhbiBhbHRlcm5hdGUgdm9pY2Ugb3IgbW9vZCwgb3Igb3RoZXJ3aXNlIG9mZnNldCBmcm9tIHRoZSBub3JtYWwgcHJvc2UgaW4gYSBtYW5uZXIgaW5kaWNhdGluZyBhIGRpZmZlcmVudCBxdWFsaXR5IG9mIHRleHQsIHN1Y2ggYXMgYSB0YXhvbm9taWMgZGVzaWduYXRpb24sIGEgdGVjaG5pY2FsIHRlcm0sIGFuIGlkaW9tYXRpYyBwaHJhc2UgZnJvbSBhbm90aGVyIGxhbmd1YWdlLCB0cmFuc2xpdGVyYXRpb24sIGEgdGhvdWdodCwgb3IgYSBzaGlwIG5hbWUgaW4gV2VzdGVybiB0ZXh0cy4ifSxhdHRyaWJ1dGVzOltdLHJlZmVyZW5jZXM6W3tuYW1lOiJNRE4gUmVmZXJlbmNlIix1cmw6Imh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9pIn1dfSx7bmFtZToiYiIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiVGhlIGIgZWxlbWVudCByZXByZXNlbnRzIGEgc3BhbiBvZiB0ZXh0IHRvIHdoaWNoIGF0dGVudGlvbiBpcyBiZWluZyBkcmF3biBmb3IgdXRpbGl0YXJpYW4gcHVycG9zZXMgd2l0aG91dCBjb252ZXlpbmcgYW55IGV4dHJhIGltcG9ydGFuY2UgYW5kIHdpdGggbm8gaW1wbGljYXRpb24gb2YgYW4gYWx0ZXJuYXRlIHZvaWNlIG9yIG1vb2QsIHN1Y2ggYXMga2V5IHdvcmRzIGluIGEgZG9jdW1lbnQgYWJzdHJhY3QsIHByb2R1Y3QgbmFtZXMgaW4gYSByZXZpZXcsIGFjdGlvbmFibGUgd29yZHMgaW4gaW50ZXJhY3RpdmUgdGV4dC1kcml2ZW4gc29mdHdhcmUsIG9yIGFuIGFydGljbGUgbGVkZS4ifSxhdHRyaWJ1dGVzOltdLHJlZmVyZW5jZXM6W3tuYW1lOiJNRE4gUmVmZXJlbmNlIix1cmw6Imh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9iIn1dfSx7bmFtZToidSIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiVGhlIHUgZWxlbWVudCByZXByZXNlbnRzIGEgc3BhbiBvZiB0ZXh0IHdpdGggYW4gdW5hcnRpY3VsYXRlZCwgdGhvdWdoIGV4cGxpY2l0bHkgcmVuZGVyZWQsIG5vbi10ZXh0dWFsIGFubm90YXRpb24sIHN1Y2ggYXMgbGFiZWxpbmcgdGhlIHRleHQgYXMgYmVpbmcgYSBwcm9wZXIgbmFtZSBpbiBDaGluZXNlIHRleHQgKGEgQ2hpbmVzZSBwcm9wZXIgbmFtZSBtYXJrKSwgb3IgbGFiZWxpbmcgdGhlIHRleHQgYXMgYmVpbmcgbWlzc3BlbHQuIn0sYXR0cmlidXRlczpbXSxyZWZlcmVuY2VzOlt7bmFtZToiTUROIFJlZmVyZW5jZSIsdXJsOiJodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvdSJ9XX0se25hbWU6Im1hcmsiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlRoZSBtYXJrIGVsZW1lbnQgcmVwcmVzZW50cyBhIHJ1biBvZiB0ZXh0IGluIG9uZSBkb2N1bWVudCBtYXJrZWQgb3IgaGlnaGxpZ2h0ZWQgZm9yIHJlZmVyZW5jZSBwdXJwb3NlcywgZHVlIHRvIGl0cyByZWxldmFuY2UgaW4gYW5vdGhlciBjb250ZXh0LiBXaGVuIHVzZWQgaW4gYSBxdW90YXRpb24gb3Igb3RoZXIgYmxvY2sgb2YgdGV4dCByZWZlcnJlZCB0byBmcm9tIHRoZSBwcm9zZSwgaXQgaW5kaWNhdGVzIGEgaGlnaGxpZ2h0IHRoYXQgd2FzIG5vdCBvcmlnaW5hbGx5IHByZXNlbnQgYnV0IHdoaWNoIGhhcyBiZWVuIGFkZGVkIHRvIGJyaW5nIHRoZSByZWFkZXIncyBhdHRlbnRpb24gdG8gYSBwYXJ0IG9mIHRoZSB0ZXh0IHRoYXQgbWlnaHQgbm90IGhhdmUgYmVlbiBjb25zaWRlcmVkIGltcG9ydGFudCBieSB0aGUgb3JpZ2luYWwgYXV0aG9yIHdoZW4gdGhlIGJsb2NrIHdhcyBvcmlnaW5hbGx5IHdyaXR0ZW4sIGJ1dCB3aGljaCBpcyBub3cgdW5kZXIgcHJldmlvdXNseSB1bmV4cGVjdGVkIHNjcnV0aW55LiBXaGVuIHVzZWQgaW4gdGhlIG1haW4gcHJvc2Ugb2YgYSBkb2N1bWVudCwgaXQgaW5kaWNhdGVzIGEgcGFydCBvZiB0aGUgZG9jdW1lbnQgdGhhdCBoYXMgYmVlbiBoaWdobGlnaHRlZCBkdWUgdG8gaXRzIGxpa2VseSByZWxldmFuY2UgdG8gdGhlIHVzZXIncyBjdXJyZW50IGFjdGl2aXR5LiJ9LGF0dHJpYnV0ZXM6W10scmVmZXJlbmNlczpbe25hbWU6Ik1ETiBSZWZlcmVuY2UiLHVybDoiaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvSFRNTC9FbGVtZW50L21hcmsifV19LHtuYW1lOiJiZGkiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlRoZSBiZGkgZWxlbWVudCByZXByZXNlbnRzIGEgc3BhbiBvZiB0ZXh0IHRoYXQgaXMgdG8gYmUgaXNvbGF0ZWQgZnJvbSBpdHMgc3Vycm91bmRpbmdzIGZvciB0aGUgcHVycG9zZXMgb2YgYmlkaXJlY3Rpb25hbCB0ZXh0IGZvcm1hdHRpbmcuIFtCSURJXSJ9LGF0dHJpYnV0ZXM6W10scmVmZXJlbmNlczpbe25hbWU6Ik1ETiBSZWZlcmVuY2UiLHVybDoiaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2JkaSJ9XX0se25hbWU6ImJkbyIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiVGhlIGJkbyBlbGVtZW50IHJlcHJlc2VudHMgZXhwbGljaXQgdGV4dCBkaXJlY3Rpb25hbGl0eSBmb3JtYXR0aW5nIGNvbnRyb2wgZm9yIGl0cyBjaGlsZHJlbi4gSXQgYWxsb3dzIGF1dGhvcnMgdG8gb3ZlcnJpZGUgdGhlIFVuaWNvZGUgYmlkaXJlY3Rpb25hbCBhbGdvcml0aG0gYnkgZXhwbGljaXRseSBzcGVjaWZ5aW5nIGEgZGlyZWN0aW9uIG92ZXJyaWRlLiBbQklESV0ifSxhdHRyaWJ1dGVzOlt7bmFtZToiZGlyIixkZXNjcmlwdGlvbjoiVGhlIGRpcmVjdGlvbiBpbiB3aGljaCB0ZXh0IHNob3VsZCBiZSByZW5kZXJlZCBpbiB0aGlzIGVsZW1lbnQncyBjb250ZW50cy4gUG9zc2libGUgdmFsdWVzIGFyZTpcblxuKiAgIGBsdHJgOiBJbmRpY2F0ZXMgdGhhdCB0aGUgdGV4dCBzaG91bGQgZ28gaW4gYSBsZWZ0LXRvLXJpZ2h0IGRpcmVjdGlvbi5cbiogICBgcnRsYDogSW5kaWNhdGVzIHRoYXQgdGhlIHRleHQgc2hvdWxkIGdvIGluIGEgcmlnaHQtdG8tbGVmdCBkaXJlY3Rpb24uIn1dLHJlZmVyZW5jZXM6W3tuYW1lOiJNRE4gUmVmZXJlbmNlIix1cmw6Imh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9iZG8ifV19LHtuYW1lOiJzcGFuIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJUaGUgc3BhbiBlbGVtZW50IGRvZXNuJ3QgbWVhbiBhbnl0aGluZyBvbiBpdHMgb3duLCBidXQgY2FuIGJlIHVzZWZ1bCB3aGVuIHVzZWQgdG9nZXRoZXIgd2l0aCB0aGUgZ2xvYmFsIGF0dHJpYnV0ZXMsIGUuZy4gY2xhc3MsIGxhbmcsIG9yIGRpci4gSXQgcmVwcmVzZW50cyBpdHMgY2hpbGRyZW4uIn0sYXR0cmlidXRlczpbXSxyZWZlcmVuY2VzOlt7bmFtZToiTUROIFJlZmVyZW5jZSIsdXJsOiJodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvc3BhbiJ9XX0se25hbWU6ImJyIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJUaGUgYnIgZWxlbWVudCByZXByZXNlbnRzIGEgbGluZSBicmVhay4ifSx2b2lkOiEwLGF0dHJpYnV0ZXM6W3tuYW1lOiJjbGVhciIsZGVzY3JpcHRpb246IkluZGljYXRlcyB3aGVyZSB0byBiZWdpbiB0aGUgbmV4dCBsaW5lIGFmdGVyIHRoZSBicmVhay4ifV0scmVmZXJlbmNlczpbe25hbWU6Ik1ETiBSZWZlcmVuY2UiLHVybDoiaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2JyIn1dfSx7bmFtZToid2JyIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJUaGUgd2JyIGVsZW1lbnQgcmVwcmVzZW50cyBhIGxpbmUgYnJlYWsgb3Bwb3J0dW5pdHkuIn0sdm9pZDohMCxhdHRyaWJ1dGVzOltdLHJlZmVyZW5jZXM6W3tuYW1lOiJNRE4gUmVmZXJlbmNlIix1cmw6Imh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RvY3MvV2ViL0hUTUwvRWxlbWVudC93YnIifV19LHtuYW1lOiJpbnMiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlRoZSBpbnMgZWxlbWVudCByZXByZXNlbnRzIGFuIGFkZGl0aW9uIHRvIHRoZSBkb2N1bWVudC4ifSxhdHRyaWJ1dGVzOlt7bmFtZToiY2l0ZSIsZGVzY3JpcHRpb246IlRoaXMgYXR0cmlidXRlIGRlZmluZXMgdGhlIFVSSSBvZiBhIHJlc291cmNlIHRoYXQgZXhwbGFpbnMgdGhlIGNoYW5nZSwgc3VjaCBhcyBhIGxpbmsgdG8gbWVldGluZyBtaW51dGVzIG9yIGEgdGlja2V0IGluIGEgdHJvdWJsZXNob290aW5nIHN5c3RlbS4ifSx7bmFtZToiZGF0ZXRpbWUiLGRlc2NyaXB0aW9uOidUaGlzIGF0dHJpYnV0ZSBpbmRpY2F0ZXMgdGhlIHRpbWUgYW5kIGRhdGUgb2YgdGhlIGNoYW5nZSBhbmQgbXVzdCBiZSBhIHZhbGlkIGRhdGUgd2l0aCBhbiBvcHRpb25hbCB0aW1lIHN0cmluZy4gSWYgdGhlIHZhbHVlIGNhbm5vdCBiZSBwYXJzZWQgYXMgYSBkYXRlIHdpdGggYW4gb3B0aW9uYWwgdGltZSBzdHJpbmcsIHRoZSBlbGVtZW50IGRvZXMgbm90IGhhdmUgYW4gYXNzb2NpYXRlZCB0aW1lIHN0YW1wLiBGb3IgdGhlIGZvcm1hdCBvZiB0aGUgc3RyaW5nIHdpdGhvdXQgYSB0aW1lLCBzZWUgW0Zvcm1hdCBvZiBhIHZhbGlkIGRhdGUgc3RyaW5nXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0RhdGVfYW5kX3RpbWVfZm9ybWF0cyNGb3JtYXRfb2ZfYV92YWxpZF9kYXRlX3N0cmluZyAiQ2VydGFpbiBIVE1MIGVsZW1lbnRzIHVzZSBkYXRlIGFuZC9vciB0aW1lIHZhbHVlcy4gVGhlIGZvcm1hdHMgb2YgdGhlIHN0cmluZ3MgdGhhdCBzcGVjaWZ5IHRoZXNlIGFyZSBkZXNjcmliZWQgaW4gdGhpcyBhcnRpY2xlLiIpIGluIFtEYXRlIGFuZCB0aW1lIGZvcm1hdHMgdXNlZCBpbiBIVE1MXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0RhdGVfYW5kX3RpbWVfZm9ybWF0cyAiQ2VydGFpbiBIVE1MIGVsZW1lbnRzIHVzZSBkYXRlIGFuZC9vciB0aW1lIHZhbHVlcy4gVGhlIGZvcm1hdHMgb2YgdGhlIHN0cmluZ3MgdGhhdCBzcGVjaWZ5IHRoZXNlIGFyZSBkZXNjcmliZWQgaW4gdGhpcyBhcnRpY2xlLiIpLiBUaGUgZm9ybWF0IG9mIHRoZSBzdHJpbmcgaWYgaXQgaW5jbHVkZXMgYm90aCBkYXRlIGFuZCB0aW1lIGlzIGNvdmVyZWQgaW4gW0Zvcm1hdCBvZiBhIHZhbGlkIGxvY2FsIGRhdGUgYW5kIHRpbWUgc3RyaW5nXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0RhdGVfYW5kX3RpbWVfZm9ybWF0cyNGb3JtYXRfb2ZfYV92YWxpZF9sb2NhbF9kYXRlX2FuZF90aW1lX3N0cmluZyAiQ2VydGFpbiBIVE1MIGVsZW1lbnRzIHVzZSBkYXRlIGFuZC9vciB0aW1lIHZhbHVlcy4gVGhlIGZvcm1hdHMgb2YgdGhlIHN0cmluZ3MgdGhhdCBzcGVjaWZ5IHRoZXNlIGFyZSBkZXNjcmliZWQgaW4gdGhpcyBhcnRpY2xlLiIpIGluIFtEYXRlIGFuZCB0aW1lIGZvcm1hdHMgdXNlZCBpbiBIVE1MXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0RhdGVfYW5kX3RpbWVfZm9ybWF0cyAiQ2VydGFpbiBIVE1MIGVsZW1lbnRzIHVzZSBkYXRlIGFuZC9vciB0aW1lIHZhbHVlcy4gVGhlIGZvcm1hdHMgb2YgdGhlIHN0cmluZ3MgdGhhdCBzcGVjaWZ5IHRoZXNlIGFyZSBkZXNjcmliZWQgaW4gdGhpcyBhcnRpY2xlLiIpLid9XSxyZWZlcmVuY2VzOlt7bmFtZToiTUROIFJlZmVyZW5jZSIsdXJsOiJodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvaW5zIn1dfSx7bmFtZToiZGVsIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJUaGUgZGVsIGVsZW1lbnQgcmVwcmVzZW50cyBhIHJlbW92YWwgZnJvbSB0aGUgZG9jdW1lbnQuIn0sYXR0cmlidXRlczpbe25hbWU6ImNpdGUiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IkEgVVJJIGZvciBhIHJlc291cmNlIHRoYXQgZXhwbGFpbnMgdGhlIGNoYW5nZSAoZm9yIGV4YW1wbGUsIG1lZXRpbmcgbWludXRlcykuIn19LHtuYW1lOiJkYXRldGltZSIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZTonVGhpcyBhdHRyaWJ1dGUgaW5kaWNhdGVzIHRoZSB0aW1lIGFuZCBkYXRlIG9mIHRoZSBjaGFuZ2UgYW5kIG11c3QgYmUgYSB2YWxpZCBkYXRlIHN0cmluZyB3aXRoIGFuIG9wdGlvbmFsIHRpbWUuIElmIHRoZSB2YWx1ZSBjYW5ub3QgYmUgcGFyc2VkIGFzIGEgZGF0ZSB3aXRoIGFuIG9wdGlvbmFsIHRpbWUgc3RyaW5nLCB0aGUgZWxlbWVudCBkb2VzIG5vdCBoYXZlIGFuIGFzc29jaWF0ZWQgdGltZSBzdGFtcC4gRm9yIHRoZSBmb3JtYXQgb2YgdGhlIHN0cmluZyB3aXRob3V0IGEgdGltZSwgc2VlIFtGb3JtYXQgb2YgYSB2YWxpZCBkYXRlIHN0cmluZ10oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9EYXRlX2FuZF90aW1lX2Zvcm1hdHMjRm9ybWF0X29mX2FfdmFsaWRfZGF0ZV9zdHJpbmcgIkNlcnRhaW4gSFRNTCBlbGVtZW50cyB1c2UgZGF0ZSBhbmQvb3IgdGltZSB2YWx1ZXMuIFRoZSBmb3JtYXRzIG9mIHRoZSBzdHJpbmdzIHRoYXQgc3BlY2lmeSB0aGVzZSBhcmUgZGVzY3JpYmVkIGluIHRoaXMgYXJ0aWNsZS4iKSBpbiBbRGF0ZSBhbmQgdGltZSBmb3JtYXRzIHVzZWQgaW4gSFRNTF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9EYXRlX2FuZF90aW1lX2Zvcm1hdHMgIkNlcnRhaW4gSFRNTCBlbGVtZW50cyB1c2UgZGF0ZSBhbmQvb3IgdGltZSB2YWx1ZXMuIFRoZSBmb3JtYXRzIG9mIHRoZSBzdHJpbmdzIHRoYXQgc3BlY2lmeSB0aGVzZSBhcmUgZGVzY3JpYmVkIGluIHRoaXMgYXJ0aWNsZS4iKS4gVGhlIGZvcm1hdCBvZiB0aGUgc3RyaW5nIGlmIGl0IGluY2x1ZGVzIGJvdGggZGF0ZSBhbmQgdGltZSBpcyBjb3ZlcmVkIGluIFtGb3JtYXQgb2YgYSB2YWxpZCBsb2NhbCBkYXRlIGFuZCB0aW1lIHN0cmluZ10oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9EYXRlX2FuZF90aW1lX2Zvcm1hdHMjRm9ybWF0X29mX2FfdmFsaWRfbG9jYWxfZGF0ZV9hbmRfdGltZV9zdHJpbmcgIkNlcnRhaW4gSFRNTCBlbGVtZW50cyB1c2UgZGF0ZSBhbmQvb3IgdGltZSB2YWx1ZXMuIFRoZSBmb3JtYXRzIG9mIHRoZSBzdHJpbmdzIHRoYXQgc3BlY2lmeSB0aGVzZSBhcmUgZGVzY3JpYmVkIGluIHRoaXMgYXJ0aWNsZS4iKSBpbiBbRGF0ZSBhbmQgdGltZSBmb3JtYXRzIHVzZWQgaW4gSFRNTF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9EYXRlX2FuZF90aW1lX2Zvcm1hdHMgIkNlcnRhaW4gSFRNTCBlbGVtZW50cyB1c2UgZGF0ZSBhbmQvb3IgdGltZSB2YWx1ZXMuIFRoZSBmb3JtYXRzIG9mIHRoZSBzdHJpbmdzIHRoYXQgc3BlY2lmeSB0aGVzZSBhcmUgZGVzY3JpYmVkIGluIHRoaXMgYXJ0aWNsZS4iKS4nfX1dLHJlZmVyZW5jZXM6W3tuYW1lOiJNRE4gUmVmZXJlbmNlIix1cmw6Imh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9kZWwifV19LHtuYW1lOiJwaWN0dXJlIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJUaGUgcGljdHVyZSBlbGVtZW50IGlzIGEgY29udGFpbmVyIHdoaWNoIHByb3ZpZGVzIG11bHRpcGxlIHNvdXJjZXMgdG8gaXRzIGNvbnRhaW5lZCBpbWcgZWxlbWVudCB0byBhbGxvdyBhdXRob3JzIHRvIGRlY2xhcmF0aXZlbHkgY29udHJvbCBvciBnaXZlIGhpbnRzIHRvIHRoZSB1c2VyIGFnZW50IGFib3V0IHdoaWNoIGltYWdlIHJlc291cmNlIHRvIHVzZSwgYmFzZWQgb24gdGhlIHNjcmVlbiBwaXhlbCBkZW5zaXR5LCB2aWV3cG9ydCBzaXplLCBpbWFnZSBmb3JtYXQsIGFuZCBvdGhlciBmYWN0b3JzLiBJdCByZXByZXNlbnRzIGl0cyBjaGlsZHJlbi4ifSxhdHRyaWJ1dGVzOltdLHJlZmVyZW5jZXM6W3tuYW1lOiJNRE4gUmVmZXJlbmNlIix1cmw6Imh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9waWN0dXJlIn1dfSx7bmFtZToiaW1nIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJBbiBpbWcgZWxlbWVudCByZXByZXNlbnRzIGFuIGltYWdlLiJ9LHZvaWQ6ITAsYXR0cmlidXRlczpbe25hbWU6ImFsdCIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZTonVGhpcyBhdHRyaWJ1dGUgZGVmaW5lcyBhbiBhbHRlcm5hdGl2ZSB0ZXh0IGRlc2NyaXB0aW9uIG9mIHRoZSBpbWFnZS5cblxuKipOb3RlOioqIEJyb3dzZXJzIGRvIG5vdCBhbHdheXMgZGlzcGxheSB0aGUgaW1hZ2UgcmVmZXJlbmNlZCBieSB0aGUgZWxlbWVudC4gVGhpcyBpcyB0aGUgY2FzZSBmb3Igbm9uLWdyYXBoaWNhbCBicm93c2VycyAoaW5jbHVkaW5nIHRob3NlIHVzZWQgYnkgcGVvcGxlIHdpdGggdmlzdWFsIGltcGFpcm1lbnRzKSwgaWYgdGhlIHVzZXIgY2hvb3NlcyBub3QgdG8gZGlzcGxheSBpbWFnZXMsIG9yIGlmIHRoZSBicm93c2VyIGNhbm5vdCBkaXNwbGF5IHRoZSBpbWFnZSBiZWNhdXNlIGl0IGlzIGludmFsaWQgb3IgYW4gW3Vuc3VwcG9ydGVkIHR5cGVdKCNTdXBwb3J0ZWRfaW1hZ2VfZm9ybWF0cykuIEluIHRoZXNlIGNhc2VzLCB0aGUgYnJvd3NlciBtYXkgcmVwbGFjZSB0aGUgaW1hZ2Ugd2l0aCB0aGUgdGV4dCBkZWZpbmVkIGluIHRoaXMgZWxlbWVudFwncyBgYWx0YCBhdHRyaWJ1dGUuIFlvdSBzaG91bGQsIGZvciB0aGVzZSByZWFzb25zIGFuZCBvdGhlcnMsIHByb3ZpZGUgYSB1c2VmdWwgdmFsdWUgZm9yIGBhbHRgIHdoZW5ldmVyIHBvc3NpYmxlLlxuXG4qKk5vdGU6KiogT21pdHRpbmcgdGhpcyBhdHRyaWJ1dGUgYWx0b2dldGhlciBpbmRpY2F0ZXMgdGhhdCB0aGUgaW1hZ2UgaXMgYSBrZXkgcGFydCBvZiB0aGUgY29udGVudCwgYW5kIG5vIHRleHR1YWwgZXF1aXZhbGVudCBpcyBhdmFpbGFibGUuIFNldHRpbmcgdGhpcyBhdHRyaWJ1dGUgdG8gYW4gZW1wdHkgc3RyaW5nIChgYWx0PSIiYCkgaW5kaWNhdGVzIHRoYXQgdGhpcyBpbWFnZSBpcyBfbm90XyBhIGtleSBwYXJ0IG9mIHRoZSBjb250ZW50IChkZWNvcmF0aXZlKSwgYW5kIHRoYXQgbm9uLXZpc3VhbCBicm93c2VycyBtYXkgb21pdCBpdCBmcm9tIHJlbmRlcmluZy4nfX0se25hbWU6InNyYyIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiVGhlIGltYWdlIFVSTC4gVGhpcyBhdHRyaWJ1dGUgaXMgbWFuZGF0b3J5IGZvciB0aGUgYDxpbWc+YCBlbGVtZW50LiBPbiBicm93c2VycyBzdXBwb3J0aW5nIGBzcmNzZXRgLCBgc3JjYCBpcyB0cmVhdGVkIGxpa2UgYSBjYW5kaWRhdGUgaW1hZ2Ugd2l0aCBhIHBpeGVsIGRlbnNpdHkgZGVzY3JpcHRvciBgMXhgIHVubGVzcyBhbiBpbWFnZSB3aXRoIHRoaXMgcGl4ZWwgZGVuc2l0eSBkZXNjcmlwdG9yIGlzIGFscmVhZHkgZGVmaW5lZCBpbiBgc3Jjc2V0LGAgb3IgdW5sZXNzIGBzcmNzZXRgIGNvbnRhaW5zICdgd2AnIGRlc2NyaXB0b3JzLiJ9fSx7bmFtZToic3Jjc2V0IixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJBIGxpc3Qgb2Ygb25lIG9yIG1vcmUgc3RyaW5ncyBzZXBhcmF0ZWQgYnkgY29tbWFzIGluZGljYXRpbmcgYSBzZXQgb2YgcG9zc2libGUgaW1hZ2Ugc291cmNlcyBmb3IgdGhlIHVzZXIgYWdlbnQgdG8gdXNlLiBFYWNoIHN0cmluZyBpcyBjb21wb3NlZCBvZjpcblxuMS4gIGEgVVJMIHRvIGFuIGltYWdlLFxuMi4gIG9wdGlvbmFsbHksIHdoaXRlc3BhY2UgZm9sbG93ZWQgYnkgb25lIG9mOlxuICAgICogICBBIHdpZHRoIGRlc2NyaXB0b3IsIG9yIGEgcG9zaXRpdmUgaW50ZWdlciBkaXJlY3RseSBmb2xsb3dlZCBieSAnYHdgJy4gVGhlIHdpZHRoIGRlc2NyaXB0b3IgaXMgZGl2aWRlZCBieSB0aGUgc291cmNlIHNpemUgZ2l2ZW4gaW4gdGhlIGBzaXplc2AgYXR0cmlidXRlIHRvIGNhbGN1bGF0ZSB0aGUgZWZmZWN0aXZlIHBpeGVsIGRlbnNpdHkuXG4gICAgKiAgIEEgcGl4ZWwgZGVuc2l0eSBkZXNjcmlwdG9yLCB3aGljaCBpcyBhIHBvc2l0aXZlIGZsb2F0aW5nIHBvaW50IG51bWJlciBkaXJlY3RseSBmb2xsb3dlZCBieSAnYHhgJy5cblxuSWYgbm8gZGVzY3JpcHRvciBpcyBzcGVjaWZpZWQsIHRoZSBzb3VyY2UgaXMgYXNzaWduZWQgdGhlIGRlZmF1bHQgZGVzY3JpcHRvcjogYDF4YC5cblxuSXQgaXMgaW5jb3JyZWN0IHRvIG1peCB3aWR0aCBkZXNjcmlwdG9ycyBhbmQgcGl4ZWwgZGVuc2l0eSBkZXNjcmlwdG9ycyBpbiB0aGUgc2FtZSBgc3Jjc2V0YCBhdHRyaWJ1dGUuIER1cGxpY2F0ZSBkZXNjcmlwdG9ycyAoZm9yIGluc3RhbmNlLCB0d28gc291cmNlcyBpbiB0aGUgc2FtZSBgc3Jjc2V0YCB3aGljaCBhcmUgYm90aCBkZXNjcmliZWQgd2l0aCAnYDJ4YCcpIGFyZSBhbHNvIGludmFsaWQuXG5cblRoZSB1c2VyIGFnZW50IHNlbGVjdHMgYW55IG9uZSBvZiB0aGUgYXZhaWxhYmxlIHNvdXJjZXMgYXQgaXRzIGRpc2NyZXRpb24uIFRoaXMgcHJvdmlkZXMgdGhlbSB3aXRoIHNpZ25pZmljYW50IGxlZXdheSB0byB0YWlsb3IgdGhlaXIgc2VsZWN0aW9uIGJhc2VkIG9uIHRoaW5ncyBsaWtlIHVzZXIgcHJlZmVyZW5jZXMgb3IgYmFuZHdpZHRoIGNvbmRpdGlvbnMuIFNlZSBvdXIgW1Jlc3BvbnNpdmUgaW1hZ2VzXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL0xlYXJuL0hUTUwvTXVsdGltZWRpYV9hbmRfZW1iZWRkaW5nL1Jlc3BvbnNpdmVfaW1hZ2VzKSB0dXRvcmlhbCBmb3IgYW4gZXhhbXBsZS4ifX0se25hbWU6ImNyb3Nzb3JpZ2luIix2YWx1ZVNldDoieG8iLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6J1RoaXMgZW51bWVyYXRlZCBhdHRyaWJ1dGUgaW5kaWNhdGVzIGlmIHRoZSBmZXRjaGluZyBvZiB0aGUgcmVsYXRlZCBpbWFnZSBtdXN0IGJlIGRvbmUgdXNpbmcgQ09SUyBvciBub3QuIFtDT1JTLWVuYWJsZWQgaW1hZ2VzXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL0NPUlNfRW5hYmxlZF9JbWFnZSkgY2FuIGJlIHJldXNlZCBpbiB0aGUgW2A8Y2FudmFzPmBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9jYW52YXMgIlVzZSB0aGUgSFRNTCA8Y2FudmFzPiBlbGVtZW50IHdpdGggZWl0aGVyIHRoZSBjYW52YXMgc2NyaXB0aW5nIEFQSSBvciB0aGUgV2ViR0wgQVBJIHRvIGRyYXcgZ3JhcGhpY3MgYW5kIGFuaW1hdGlvbnMuIikgZWxlbWVudCB3aXRob3V0IGJlaW5nICJbdGFpbnRlZF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9DT1JTX2VuYWJsZWRfaW1hZ2UjV2hhdF9pc19hX3RhaW50ZWRfY2FudmFzKS4iIFRoZSBhbGxvd2VkIHZhbHVlcyBhcmU6XG5gYW5vbnltb3VzYFxuXG5BIGNyb3NzLW9yaWdpbiByZXF1ZXN0IChpLmUuLCB3aXRoIGBPcmlnaW46YCBIVFRQIGhlYWRlcikgaXMgcGVyZm9ybWVkLCBidXQgbm8gY3JlZGVudGlhbCBpcyBzZW50IChpLmUuLCBubyBjb29raWUsIFguNTA5IGNlcnRpZmljYXRlLCBvciBIVFRQIEJhc2ljIGF1dGhlbnRpY2F0aW9uKS4gSWYgdGhlIHNlcnZlciBkb2VzIG5vdCBnaXZlIGNyZWRlbnRpYWxzIHRvIHRoZSBvcmlnaW4gc2l0ZSAoYnkgbm90IHNldHRpbmcgdGhlIFtgQWNjZXNzLUNvbnRyb2wtQWxsb3ctT3JpZ2luYF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRUUC9IZWFkZXJzL0FjY2Vzcy1Db250cm9sLUFsbG93LU9yaWdpbiAiVGhlIEFjY2Vzcy1Db250cm9sLUFsbG93LU9yaWdpbiByZXNwb25zZSBoZWFkZXIgaW5kaWNhdGVzIHdoZXRoZXIgdGhlIHJlc3BvbnNlIGNhbiBiZSBzaGFyZWQgd2l0aCByZXF1ZXN0aW5nIGNvZGUgZnJvbSB0aGUgZ2l2ZW4gb3JpZ2luLiIpIEhUVFAgaGVhZGVyKSwgdGhlIGltYWdlIHdpbGwgYmUgdGFpbnRlZCBhbmQgaXRzIHVzYWdlIHJlc3RyaWN0ZWQuXG5cbmB1c2UtY3JlZGVudGlhbHNgXG5cbkEgY3Jvc3Mtb3JpZ2luIHJlcXVlc3QgKGkuZS4sIHdpdGggdGhlIFtgT3JpZ2luYF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRUUC9IZWFkZXJzL09yaWdpbiAiVGhlIE9yaWdpbiByZXF1ZXN0IGhlYWRlciBpbmRpY2F0ZXMgd2hlcmUgYSBmZXRjaCBvcmlnaW5hdGVzIGZyb20uIEl0IGRvZXNuXCd0IGluY2x1ZGUgYW55IHBhdGggaW5mb3JtYXRpb24sIGJ1dCBvbmx5IHRoZSBzZXJ2ZXIgbmFtZS4gSXQgaXMgc2VudCB3aXRoIENPUlMgcmVxdWVzdHMsIGFzIHdlbGwgYXMgd2l0aCBQT1NUIHJlcXVlc3RzLiBJdCBpcyBzaW1pbGFyIHRvIHRoZSBSZWZlcmVyIGhlYWRlciwgYnV0LCB1bmxpa2UgdGhpcyBoZWFkZXIsIGl0IGRvZXNuXCd0IGRpc2Nsb3NlIHRoZSB3aG9sZSBwYXRoLiIpIEhUVFAgaGVhZGVyKSBwZXJmb3JtZWQgYWxvbmcgd2l0aCBjcmVkZW50aWFscyBzZW50IChpLmUuLCBhIGNvb2tpZSwgY2VydGlmaWNhdGUsIG9yIEhUVFAgQmFzaWMgYXV0aGVudGljYXRpb24pLiBJZiB0aGUgc2VydmVyIGRvZXMgbm90IGdpdmUgY3JlZGVudGlhbHMgdG8gdGhlIG9yaWdpbiBzaXRlICh0aHJvdWdoIHRoZSBgQWNjZXNzLUNvbnRyb2wtQWxsb3ctQ3JlZGVudGlhbHNgIEhUVFAgaGVhZGVyKSwgdGhlIGltYWdlIHdpbGwgYmUgdGFpbnRlZCBhbmQgaXRzIHVzYWdlIHJlc3RyaWN0ZWQuXG5cbklmIHRoZSBhdHRyaWJ1dGUgaXMgbm90IHByZXNlbnQsIHRoZSByZXNvdXJjZSBpcyBmZXRjaGVkIHdpdGhvdXQgYSBDT1JTIHJlcXVlc3QgKGkuZS4sIHdpdGhvdXQgc2VuZGluZyB0aGUgYE9yaWdpbmAgSFRUUCBoZWFkZXIpLCBwcmV2ZW50aW5nIGl0cyBub24tdGFpbnRlZCB1c2FnZSBpbiBbYDxjYW52YXM+YF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2NhbnZhcyAiVXNlIHRoZSBIVE1MIDxjYW52YXM+IGVsZW1lbnQgd2l0aCBlaXRoZXIgdGhlIGNhbnZhcyBzY3JpcHRpbmcgQVBJIG9yIHRoZSBXZWJHTCBBUEkgdG8gZHJhdyBncmFwaGljcyBhbmQgYW5pbWF0aW9ucy4iKSBlbGVtZW50cy4gSWYgaW52YWxpZCwgaXQgaXMgaGFuZGxlZCBhcyBpZiB0aGUgYGFub255bW91c2AgdmFsdWUgd2FzIHVzZWQuIFNlZSBbQ09SUyBzZXR0aW5ncyBhdHRyaWJ1dGVzXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL0hUTUwvQ09SU19zZXR0aW5nc19hdHRyaWJ1dGVzKSBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbi4nfX0se25hbWU6InVzZW1hcCIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZTonVGhlIHBhcnRpYWwgVVJMIChzdGFydGluZyB3aXRoIFwnI1wnKSBvZiBhbiBbaW1hZ2UgbWFwXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL0hUTUwvRWxlbWVudC9tYXApIGFzc29jaWF0ZWQgd2l0aCB0aGUgZWxlbWVudC5cblxuKipOb3RlOioqIFlvdSBjYW5ub3QgdXNlIHRoaXMgYXR0cmlidXRlIGlmIHRoZSBgPGltZz5gIGVsZW1lbnQgaXMgYSBkZXNjZW5kYW50IG9mIGFuIFtgPGE+YF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2EgIlRoZSBIVE1MIDxhPiBlbGVtZW50IChvciBhbmNob3IgZWxlbWVudCkgY3JlYXRlcyBhIGh5cGVybGluayB0byBvdGhlciB3ZWIgcGFnZXMsIGZpbGVzLCBsb2NhdGlvbnMgd2l0aGluIHRoZSBzYW1lIHBhZ2UsIGVtYWlsIGFkZHJlc3Nlcywgb3IgYW55IG90aGVyIFVSTC4iKSBvciBbYDxidXR0b24+YF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2J1dHRvbiAiVGhlIEhUTUwgPGJ1dHRvbj4gZWxlbWVudCByZXByZXNlbnRzIGEgY2xpY2thYmxlIGJ1dHRvbiwgd2hpY2ggY2FuIGJlIHVzZWQgaW4gZm9ybXMgb3IgYW55d2hlcmUgaW4gYSBkb2N1bWVudCB0aGF0IG5lZWRzIHNpbXBsZSwgc3RhbmRhcmQgYnV0dG9uIGZ1bmN0aW9uYWxpdHkuIikgZWxlbWVudC4nfX0se25hbWU6ImlzbWFwIix2YWx1ZVNldDoidiIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZTonVGhpcyBCb29sZWFuIGF0dHJpYnV0ZSBpbmRpY2F0ZXMgdGhhdCB0aGUgaW1hZ2UgaXMgcGFydCBvZiBhIHNlcnZlci1zaWRlIG1hcC4gSWYgc28sIHRoZSBwcmVjaXNlIGNvb3JkaW5hdGVzIG9mIGEgY2xpY2sgYXJlIHNlbnQgdG8gdGhlIHNlcnZlci5cblxuKipOb3RlOioqIFRoaXMgYXR0cmlidXRlIGlzIGFsbG93ZWQgb25seSBpZiB0aGUgYDxpbWc+YCBlbGVtZW50IGlzIGEgZGVzY2VuZGFudCBvZiBhbiBbYDxhPmBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9hICJUaGUgSFRNTCA8YT4gZWxlbWVudCAob3IgYW5jaG9yIGVsZW1lbnQpIGNyZWF0ZXMgYSBoeXBlcmxpbmsgdG8gb3RoZXIgd2ViIHBhZ2VzLCBmaWxlcywgbG9jYXRpb25zIHdpdGhpbiB0aGUgc2FtZSBwYWdlLCBlbWFpbCBhZGRyZXNzZXMsIG9yIGFueSBvdGhlciBVUkwuIikgZWxlbWVudCB3aXRoIGEgdmFsaWQgW2BocmVmYF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2EjYXR0ci1ocmVmKSBhdHRyaWJ1dGUuJ319LHtuYW1lOiJ3aWR0aCIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiVGhlIGludHJpbnNpYyB3aWR0aCBvZiB0aGUgaW1hZ2UgaW4gcGl4ZWxzLiJ9fSx7bmFtZToiaGVpZ2h0IixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJUaGUgaW50cmluc2ljIGhlaWdodCBvZiB0aGUgaW1hZ2UgaW4gcGl4ZWxzLiJ9fSx7bmFtZToiZGVjb2RpbmciLHZhbHVlU2V0OiJkZWNvZGluZyIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZTpgUHJvdmlkZXMgYW4gaW1hZ2UgZGVjb2RpbmcgaGludCB0byB0aGUgYnJvd3Nlci4gVGhlIGFsbG93ZWQgdmFsdWVzIGFyZToKXGBzeW5jXGAKCkRlY29kZSB0aGUgaW1hZ2Ugc3luY2hyb25vdXNseSBmb3IgYXRvbWljIHByZXNlbnRhdGlvbiB3aXRoIG90aGVyIGNvbnRlbnQuCgpcYGFzeW5jXGAKCkRlY29kZSB0aGUgaW1hZ2UgYXN5bmNocm9ub3VzbHkgdG8gcmVkdWNlIGRlbGF5IGluIHByZXNlbnRpbmcgb3RoZXIgY29udGVudC4KClxgYXV0b1xgCgpEZWZhdWx0IG1vZGUsIHdoaWNoIGluZGljYXRlcyBubyBwcmVmZXJlbmNlIGZvciB0aGUgZGVjb2RpbmcgbW9kZS4gVGhlIGJyb3dzZXIgZGVjaWRlcyB3aGF0IGlzIGJlc3QgZm9yIHRoZSB1c2VyLmB9fSx7bmFtZToibG9hZGluZyIsdmFsdWVTZXQ6ImxvYWRpbmciLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IkluZGljYXRlcyBob3cgdGhlIGJyb3dzZXIgc2hvdWxkIGxvYWQgdGhlIGltYWdlLiJ9fSx7bmFtZToicmVmZXJyZXJwb2xpY3kiLHZhbHVlU2V0OiJyZWZlcnJlcnBvbGljeSIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiQSBzdHJpbmcgaW5kaWNhdGluZyB3aGljaCByZWZlcnJlciB0byB1c2Ugd2hlbiBmZXRjaGluZyB0aGUgcmVzb3VyY2U6XG5cbiogICBgbm8tcmVmZXJyZXI6YCBUaGUgW2BSZWZlcmVyYF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRUUC9IZWFkZXJzL1JlZmVyZXIgXCJUaGUgUmVmZXJlciByZXF1ZXN0IGhlYWRlciBjb250YWlucyB0aGUgYWRkcmVzcyBvZiB0aGUgcHJldmlvdXMgd2ViIHBhZ2UgZnJvbSB3aGljaCBhIGxpbmsgdG8gdGhlIGN1cnJlbnRseSByZXF1ZXN0ZWQgcGFnZSB3YXMgZm9sbG93ZWQuIFRoZSBSZWZlcmVyIGhlYWRlciBhbGxvd3Mgc2VydmVycyB0byBpZGVudGlmeSB3aGVyZSBwZW9wbGUgYXJlIHZpc2l0aW5nIHRoZW0gZnJvbSBhbmQgbWF5IHVzZSB0aGF0IGRhdGEgZm9yIGFuYWx5dGljcywgbG9nZ2luZywgb3Igb3B0aW1pemVkIGNhY2hpbmcsIGZvciBleGFtcGxlLlwiKSBoZWFkZXIgd2lsbCBub3QgYmUgc2VudC5cbiogICBgbm8tcmVmZXJyZXItd2hlbi1kb3duZ3JhZGU6YCBObyBgUmVmZXJlcmAgaGVhZGVyIHdpbGwgYmUgc2VudCB3aGVuIG5hdmlnYXRpbmcgdG8gYW4gb3JpZ2luIHdpdGhvdXQgVExTIChIVFRQUykuIFRoaXMgaXMgYSB1c2VyIGFnZW504oCZcyBkZWZhdWx0IGJlaGF2aW9yIGlmIG5vIHBvbGljeSBpcyBvdGhlcndpc2Ugc3BlY2lmaWVkLlxuKiAgIGBvcmlnaW46YCBUaGUgYFJlZmVyZXJgIGhlYWRlciB3aWxsIGluY2x1ZGUgdGhlIHBhZ2Ugb2Ygb3JpZ2luJ3Mgc2NoZW1lLCB0aGUgaG9zdCwgYW5kIHRoZSBwb3J0LlxuKiAgIGBvcmlnaW4td2hlbi1jcm9zcy1vcmlnaW46YCBOYXZpZ2F0aW5nIHRvIG90aGVyIG9yaWdpbnMgd2lsbCBsaW1pdCB0aGUgaW5jbHVkZWQgcmVmZXJyYWwgZGF0YSB0byB0aGUgc2NoZW1lLCB0aGUgaG9zdCBhbmQgdGhlIHBvcnQsIHdoaWxlIG5hdmlnYXRpbmcgZnJvbSB0aGUgc2FtZSBvcmlnaW4gd2lsbCBpbmNsdWRlIHRoZSByZWZlcnJlcidzIGZ1bGwgcGF0aC5cbiogICBgdW5zYWZlLXVybDpgIFRoZSBgUmVmZXJlcmAgaGVhZGVyIHdpbGwgaW5jbHVkZSB0aGUgb3JpZ2luIGFuZCB0aGUgcGF0aCwgYnV0IG5vdCB0aGUgZnJhZ21lbnQsIHBhc3N3b3JkLCBvciB1c2VybmFtZS4gVGhpcyBjYXNlIGlzIHVuc2FmZSBiZWNhdXNlIGl0IGNhbiBsZWFrIG9yaWdpbnMgYW5kIHBhdGhzIGZyb20gVExTLXByb3RlY3RlZCByZXNvdXJjZXMgdG8gaW5zZWN1cmUgb3JpZ2lucy4ifX0se25hbWU6InNpemVzIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJBIGxpc3Qgb2Ygb25lIG9yIG1vcmUgc3RyaW5ncyBzZXBhcmF0ZWQgYnkgY29tbWFzIGluZGljYXRpbmcgYSBzZXQgb2Ygc291cmNlIHNpemVzLiBFYWNoIHNvdXJjZSBzaXplIGNvbnNpc3RzIG9mOlxuXG4xLiAgYSBtZWRpYSBjb25kaXRpb24uIFRoaXMgbXVzdCBiZSBvbWl0dGVkIGZvciB0aGUgbGFzdCBpdGVtLlxuMi4gIGEgc291cmNlIHNpemUgdmFsdWUuXG5cblNvdXJjZSBzaXplIHZhbHVlcyBzcGVjaWZ5IHRoZSBpbnRlbmRlZCBkaXNwbGF5IHNpemUgb2YgdGhlIGltYWdlLiBVc2VyIGFnZW50cyB1c2UgdGhlIGN1cnJlbnQgc291cmNlIHNpemUgdG8gc2VsZWN0IG9uZSBvZiB0aGUgc291cmNlcyBzdXBwbGllZCBieSB0aGUgYHNyY3NldGAgYXR0cmlidXRlLCB3aGVuIHRob3NlIHNvdXJjZXMgYXJlIGRlc2NyaWJlZCB1c2luZyB3aWR0aCAoJ2B3YCcpIGRlc2NyaXB0b3JzLiBUaGUgc2VsZWN0ZWQgc291cmNlIHNpemUgYWZmZWN0cyB0aGUgaW50cmluc2ljIHNpemUgb2YgdGhlIGltYWdlICh0aGUgaW1hZ2XigJlzIGRpc3BsYXkgc2l6ZSBpZiBubyBDU1Mgc3R5bGluZyBpcyBhcHBsaWVkKS4gSWYgdGhlIGBzcmNzZXRgIGF0dHJpYnV0ZSBpcyBhYnNlbnQsIG9yIGNvbnRhaW5zIG5vIHZhbHVlcyB3aXRoIGEgd2lkdGggKGB3YCkgZGVzY3JpcHRvciwgdGhlbiB0aGUgYHNpemVzYCBhdHRyaWJ1dGUgaGFzIG5vIGVmZmVjdC4ifX0se25hbWU6ImltcG9ydGFuY2UiLGRlc2NyaXB0aW9uOiJJbmRpY2F0ZXMgdGhlIHJlbGF0aXZlIGltcG9ydGFuY2Ugb2YgdGhlIHJlc291cmNlLiBQcmlvcml0eSBoaW50cyBhcmUgZGVsZWdhdGVkIHVzaW5nIHRoZSB2YWx1ZXM6In0se25hbWU6ImltcG9ydGFuY2UiLGRlc2NyaXB0aW9uOiJgYXV0b2A6IEluZGljYXRlc8KgKipub8KgcHJlZmVyZW5jZSoqLiBUaGUgYnJvd3NlciBtYXkgdXNlIGl0cyBvd24gaGV1cmlzdGljcyB0byBkZWNpZGUgdGhlIHByaW9yaXR5IG9mIHRoZSBpbWFnZS5cblxuYGhpZ2hgOiBJbmRpY2F0ZXMgdG8gdGhlwqBicm93c2VywqB0aGF0IHRoZSBpbWFnZSBpcyBvZsKgKipoaWdoKiogcHJpb3JpdHkuXG5cbmBsb3dgOsKgSW5kaWNhdGVzIHRvIHRoZcKgYnJvd3NlcsKgdGhhdCB0aGUgaW1hZ2UgaXMgb2bCoCoqbG93KiogcHJpb3JpdHkuIn0se25hbWU6ImludHJpbnNpY3NpemUiLGRlc2NyaXB0aW9uOiJUaGlzIGF0dHJpYnV0ZSB0ZWxscyB0aGUgYnJvd3NlciB0byBpZ25vcmUgdGhlIGFjdHVhbCBpbnRyaW5zaWMgc2l6ZSBvZiB0aGUgaW1hZ2UgYW5kIHByZXRlbmQgaXTigJlzIHRoZSBzaXplIHNwZWNpZmllZCBpbiB0aGUgYXR0cmlidXRlLiBTcGVjaWZpY2FsbHksIHRoZSBpbWFnZSB3b3VsZCByYXN0ZXIgYXQgdGhlc2UgZGltZW5zaW9ucyBhbmQgYG5hdHVyYWxXaWR0aGAvYG5hdHVyYWxIZWlnaHRgIG9uIGltYWdlcyB3b3VsZCByZXR1cm4gdGhlIHZhbHVlcyBzcGVjaWZpZWQgaW4gdGhpcyBhdHRyaWJ1dGUuIFtFeHBsYWluZXJdKGh0dHBzOi8vZ2l0aHViLmNvbS9vamFudmFmYWkvaW50cmluc2ljc2l6ZS1hdHRyaWJ1dGUpLCBbZXhhbXBsZXNdKGh0dHBzOi8vZ29vZ2xlY2hyb21lLmdpdGh1Yi5pby9zYW1wbGVzL2ludHJpbnNpYy1zaXplL2luZGV4Lmh0bWwpIn1dLHJlZmVyZW5jZXM6W3tuYW1lOiJNRE4gUmVmZXJlbmNlIix1cmw6Imh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9pbWcifV19LHtuYW1lOiJpZnJhbWUiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlRoZSBpZnJhbWUgZWxlbWVudCByZXByZXNlbnRzIGEgbmVzdGVkIGJyb3dzaW5nIGNvbnRleHQuIn0sYXR0cmlidXRlczpbe25hbWU6InNyYyIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZTonVGhlIFVSTCBvZiB0aGUgcGFnZSB0byBlbWJlZC4gVXNlIGEgdmFsdWUgb2YgYGFib3V0OmJsYW5rYCB0byBlbWJlZCBhbiBlbXB0eSBwYWdlIHRoYXQgY29uZm9ybXMgdG8gdGhlIFtzYW1lLW9yaWdpbiBwb2xpY3ldKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL1NlY3VyaXR5L1NhbWUtb3JpZ2luX3BvbGljeSNJbmhlcml0ZWRfb3JpZ2lucykuIEFsc28gbm90ZSB0aGF0IHByb2dyYW1hdGljYWxseSByZW1vdmluZyBhbiBgPGlmcmFtZT5gXCdzIHNyYyBhdHRyaWJ1dGUgKGUuZy4gdmlhIFtgRWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUoKWBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9FbGVtZW50L3JlbW92ZUF0dHJpYnV0ZSAiVGhlIEVsZW1lbnQgbWV0aG9kIHJlbW92ZUF0dHJpYnV0ZSgpIHJlbW92ZXMgdGhlIGF0dHJpYnV0ZSB3aXRoIHRoZSBzcGVjaWZpZWQgbmFtZSBmcm9tIHRoZSBlbGVtZW50LiIpKSBjYXVzZXMgYGFib3V0OmJsYW5rYCB0byBiZSBsb2FkZWQgaW4gdGhlIGZyYW1lIGluIEZpcmVmb3ggKGZyb20gdmVyc2lvbiA2NSksIENocm9taXVtLWJhc2VkIGJyb3dzZXJzLCBhbmQgU2FmYXJpL2lPUy4nfX0se25hbWU6InNyY2RvYyIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiSW5saW5lIEhUTUwgdG8gZW1iZWQsIG92ZXJyaWRpbmcgdGhlIGBzcmNgIGF0dHJpYnV0ZS4gSWYgYSBicm93c2VyIGRvZXMgbm90IHN1cHBvcnQgdGhlIGBzcmNkb2NgIGF0dHJpYnV0ZSwgaXQgd2lsbCBmYWxsIGJhY2sgdG8gdGhlIFVSTCBpbiB0aGUgYHNyY2AgYXR0cmlidXRlLiJ9fSx7bmFtZToibmFtZSIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZTonQSB0YXJnZXRhYmxlIG5hbWUgZm9yIHRoZSBlbWJlZGRlZCBicm93c2luZyBjb250ZXh0LiBUaGlzIGNhbiBiZSB1c2VkIGluIHRoZSBgdGFyZ2V0YCBhdHRyaWJ1dGUgb2YgdGhlIFtgPGE+YF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2EgIlRoZSBIVE1MIDxhPiBlbGVtZW50IChvciBhbmNob3IgZWxlbWVudCkgY3JlYXRlcyBhIGh5cGVybGluayB0byBvdGhlciB3ZWIgcGFnZXMsIGZpbGVzLCBsb2NhdGlvbnMgd2l0aGluIHRoZSBzYW1lIHBhZ2UsIGVtYWlsIGFkZHJlc3Nlcywgb3IgYW55IG90aGVyIFVSTC4iKSwgW2A8Zm9ybT5gXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvZm9ybSAiVGhlIEhUTUwgPGZvcm0+IGVsZW1lbnQgcmVwcmVzZW50cyBhIGRvY3VtZW50IHNlY3Rpb24gdGhhdCBjb250YWlucyBpbnRlcmFjdGl2ZSBjb250cm9scyBmb3Igc3VibWl0dGluZyBpbmZvcm1hdGlvbiB0byBhIHdlYiBzZXJ2ZXIuIiksIG9yIFtgPGJhc2U+YF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2Jhc2UgIlRoZSBIVE1MIDxiYXNlPiBlbGVtZW50IHNwZWNpZmllcyB0aGUgYmFzZSBVUkwgdG8gdXNlIGZvciBhbGwgcmVsYXRpdmUgVVJMcyBjb250YWluZWQgd2l0aGluIGEgZG9jdW1lbnQuIFRoZXJlIGNhbiBiZSBvbmx5IG9uZSA8YmFzZT4gZWxlbWVudCBpbiBhIGRvY3VtZW50LiIpIGVsZW1lbnRzOyB0aGUgYGZvcm10YXJnZXRgIGF0dHJpYnV0ZSBvZiB0aGUgW2A8aW5wdXQ+YF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2lucHV0ICJUaGUgSFRNTCA8aW5wdXQ+IGVsZW1lbnQgaXMgdXNlZCB0byBjcmVhdGUgaW50ZXJhY3RpdmUgY29udHJvbHMgZm9yIHdlYi1iYXNlZCBmb3JtcyBpbiBvcmRlciB0byBhY2NlcHQgZGF0YSBmcm9tIHRoZSB1c2VyOyBhIHdpZGUgdmFyaWV0eSBvZiB0eXBlcyBvZiBpbnB1dCBkYXRhIGFuZCBjb250cm9sIHdpZGdldHMgYXJlIGF2YWlsYWJsZSwgZGVwZW5kaW5nIG9uIHRoZSBkZXZpY2UgYW5kIHVzZXIgYWdlbnQuIikgb3IgW2A8YnV0dG9uPmBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9idXR0b24gIlRoZSBIVE1MIDxidXR0b24+IGVsZW1lbnQgcmVwcmVzZW50cyBhIGNsaWNrYWJsZSBidXR0b24sIHdoaWNoIGNhbiBiZSB1c2VkIGluIGZvcm1zIG9yIGFueXdoZXJlIGluIGEgZG9jdW1lbnQgdGhhdCBuZWVkcyBzaW1wbGUsIHN0YW5kYXJkIGJ1dHRvbiBmdW5jdGlvbmFsaXR5LiIpIGVsZW1lbnRzOyBvciB0aGUgYHdpbmRvd05hbWVgIHBhcmFtZXRlciBpbiB0aGUgW2B3aW5kb3cub3BlbigpYF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL1dpbmRvdy9vcGVuICJUaGXCoFdpbmRvdyBpbnRlcmZhY2VcJ3Mgb3BlbigpIG1ldGhvZCBsb2FkcyB0aGUgc3BlY2lmaWVkIHJlc291cmNlIGludG8gdGhlIGJyb3dzaW5nIGNvbnRleHQgKHdpbmRvdywgPGlmcmFtZT4gb3IgdGFiKSB3aXRoIHRoZSBzcGVjaWZpZWQgbmFtZS4gSWYgdGhlIG5hbWUgZG9lc25cJ3QgZXhpc3QsIHRoZW4gYSBuZXcgd2luZG93IGlzIG9wZW5lZCBhbmQgdGhlIHNwZWNpZmllZCByZXNvdXJjZSBpcyBsb2FkZWQgaW50byBpdHMgYnJvd3NpbmcgY29udGV4dC4iKSBtZXRob2QuJ319LHtuYW1lOiJzYW5kYm94Iix2YWx1ZVNldDoic2IiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6J0FwcGxpZXMgZXh0cmEgcmVzdHJpY3Rpb25zIHRvIHRoZSBjb250ZW50IGluIHRoZSBmcmFtZS4gVGhlIHZhbHVlIG9mIHRoZSBhdHRyaWJ1dGUgY2FuIGVpdGhlciBiZSBlbXB0eSB0byBhcHBseSBhbGwgcmVzdHJpY3Rpb25zLCBvciBzcGFjZS1zZXBhcmF0ZWQgdG9rZW5zIHRvIGxpZnQgcGFydGljdWxhciByZXN0cmljdGlvbnM6XG5cbiogICBgYWxsb3ctZm9ybXNgOiBBbGxvd3MgdGhlIHJlc291cmNlIHRvIHN1Ym1pdCBmb3Jtcy4gSWYgdGhpcyBrZXl3b3JkIGlzIG5vdCB1c2VkLCBmb3JtIHN1Ym1pc3Npb24gaXMgYmxvY2tlZC5cbiogICBgYWxsb3ctbW9kYWxzYDogTGV0cyB0aGUgcmVzb3VyY2UgW29wZW4gbW9kYWwgd2luZG93c10oaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2Uvb3JpZ2luLmh0bWwjc2FuZGJveGVkLW1vZGFscy1mbGFnKS5cbiogICBgYWxsb3ctb3JpZW50YXRpb24tbG9ja2A6IExldHMgdGhlIHJlc291cmNlIFtsb2NrIHRoZSBzY3JlZW4gb3JpZW50YXRpb25dKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9TY3JlZW4vbG9ja09yaWVudGF0aW9uKS5cbiogICBgYWxsb3ctcG9pbnRlci1sb2NrYDogTGV0cyB0aGUgcmVzb3VyY2UgdXNlIHRoZSBbUG9pbnRlciBMb2NrIEFQSV0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWJBUEkvUG9pbnRlcl9Mb2NrKS5cbiogICBgYWxsb3ctcG9wdXBzYDogQWxsb3dzIHBvcHVwcyAoc3VjaCBhcyBgd2luZG93Lm9wZW4oKWAsIGB0YXJnZXQ9Il9ibGFuayJgLCBvciBgc2hvd01vZGFsRGlhbG9nKClgKS4gSWYgdGhpcyBrZXl3b3JkIGlzIG5vdCB1c2VkLCB0aGUgcG9wdXAgd2lsbCBzaWxlbnRseSBmYWlsIHRvIG9wZW4uXG4qICAgYGFsbG93LXBvcHVwcy10by1lc2NhcGUtc2FuZGJveGA6IExldHMgdGhlIHNhbmRib3hlZCBkb2N1bWVudCBvcGVuIG5ldyB3aW5kb3dzIHdpdGhvdXQgdGhvc2Ugd2luZG93cyBpbmhlcml0aW5nIHRoZSBzYW5kYm94aW5nLiBGb3IgZXhhbXBsZSwgdGhpcyBjYW4gc2FmZWx5IHNhbmRib3ggYW4gYWR2ZXJ0aXNlbWVudCB3aXRob3V0IGZvcmNpbmcgdGhlIHNhbWUgcmVzdHJpY3Rpb25zIHVwb24gdGhlIHBhZ2UgdGhlIGFkIGxpbmtzIHRvLlxuKiAgIGBhbGxvdy1wcmVzZW50YXRpb25gOiBMZXRzIHRoZSByZXNvdXJjZSBzdGFydCBhIFtwcmVzZW50YXRpb24gc2Vzc2lvbl0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL1ByZXNlbnRhdGlvblJlcXVlc3QpLlxuKiAgIGBhbGxvdy1zYW1lLW9yaWdpbmA6IElmIHRoaXMgdG9rZW4gaXMgbm90IHVzZWQsIHRoZSByZXNvdXJjZSBpcyB0cmVhdGVkIGFzIGJlaW5nIGZyb20gYSBzcGVjaWFsIG9yaWdpbiB0aGF0IGFsd2F5cyBmYWlscyB0aGUgW3NhbWUtb3JpZ2luIHBvbGljeV0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9HbG9zc2FyeS9zYW1lLW9yaWdpbl9wb2xpY3kgInNhbWUtb3JpZ2luIHBvbGljeTogVGhlIHNhbWUtb3JpZ2luIHBvbGljeSBpcyBhIGNyaXRpY2FsIHNlY3VyaXR5IG1lY2hhbmlzbSB0aGF0IHJlc3RyaWN0cyBob3cgYSBkb2N1bWVudCBvciBzY3JpcHQgbG9hZGVkIGZyb20gb25lIG9yaWdpbiBjYW4gaW50ZXJhY3Qgd2l0aCBhIHJlc291cmNlIGZyb20gYW5vdGhlciBvcmlnaW4uIikuXG4qICAgYGFsbG93LXNjcmlwdHNgOiBMZXRzIHRoZSByZXNvdXJjZSBydW4gc2NyaXB0cyAoYnV0IG5vdCBjcmVhdGUgcG9wdXAgd2luZG93cykuXG4qICAgYGFsbG93LXN0b3JhZ2UtYWNjZXNzLWJ5LXVzZXItYWN0aXZhdGlvbmAgOiBMZXRzIHRoZSByZXNvdXJjZSByZXF1ZXN0IGFjY2VzcyB0byB0aGUgcGFyZW50XCdzIHN0b3JhZ2UgY2FwYWJpbGl0aWVzIHdpdGggdGhlIFtTdG9yYWdlIEFjY2VzcyBBUEldKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9TdG9yYWdlX0FjY2Vzc19BUEkpLlxuKiAgIGBhbGxvdy10b3AtbmF2aWdhdGlvbmA6IExldHMgdGhlIHJlc291cmNlIG5hdmlnYXRlIHRoZSB0b3AtbGV2ZWwgYnJvd3NpbmcgY29udGV4dCAodGhlIG9uZSBuYW1lZCBgX3RvcGApLlxuKiAgIGBhbGxvdy10b3AtbmF2aWdhdGlvbi1ieS11c2VyLWFjdGl2YXRpb25gOiBMZXRzIHRoZSByZXNvdXJjZSBuYXZpZ2F0ZSB0aGUgdG9wLWxldmVsIGJyb3dzaW5nIGNvbnRleHQsIGJ1dCBvbmx5IGlmIGluaXRpYXRlZCBieSBhIHVzZXIgZ2VzdHVyZS5cblxuKipOb3RlcyBhYm91dCBzYW5kYm94aW5nOioqXG5cbiogICBXaGVuIHRoZSBlbWJlZGRlZCBkb2N1bWVudCBoYXMgdGhlIHNhbWUgb3JpZ2luIGFzIHRoZSBlbWJlZGRpbmcgcGFnZSwgaXQgaXMgKipzdHJvbmdseSBkaXNjb3VyYWdlZCoqIHRvIHVzZSBib3RoIGBhbGxvdy1zY3JpcHRzYCBhbmQgYGFsbG93LXNhbWUtb3JpZ2luYCwgYXMgdGhhdCBsZXRzIHRoZSBlbWJlZGRlZCBkb2N1bWVudCByZW1vdmUgdGhlIGBzYW5kYm94YCBhdHRyaWJ1dGUg4oCUIG1ha2luZyBpdCBubyBtb3JlIHNlY3VyZSB0aGFuIG5vdCB1c2luZyB0aGUgYHNhbmRib3hgIGF0dHJpYnV0ZSBhdCBhbGwuXG4qICAgU2FuZGJveGluZyBpcyB1c2VsZXNzIGlmIHRoZSBhdHRhY2tlciBjYW4gZGlzcGxheSBjb250ZW50IG91dHNpZGUgYSBzYW5kYm94ZWQgYGlmcmFtZWAg4oCUIHN1Y2ggYXMgaWYgdGhlIHZpZXdlciBvcGVucyB0aGUgZnJhbWUgaW4gYSBuZXcgdGFiLiBTdWNoIGNvbnRlbnQgc2hvdWxkIGJlIGFsc28gc2VydmVkIGZyb20gYSBfc2VwYXJhdGUgb3JpZ2luXyB0byBsaW1pdCBwb3RlbnRpYWwgZGFtYWdlLlxuKiAgIFRoZSBgc2FuZGJveGAgYXR0cmlidXRlIGlzIHVuc3VwcG9ydGVkIGluIEludGVybmV0IEV4cGxvcmVyIDkgYW5kIGVhcmxpZXIuJ319LHtuYW1lOiJzZWFtbGVzcyIsdmFsdWVTZXQ6InYifSx7bmFtZToiYWxsb3dmdWxsc2NyZWVuIix2YWx1ZVNldDoidiIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZTonU2V0IHRvIGB0cnVlYCBpZiB0aGUgYDxpZnJhbWU+YCBjYW4gYWN0aXZhdGUgZnVsbHNjcmVlbiBtb2RlIGJ5IGNhbGxpbmcgdGhlIFtgcmVxdWVzdEZ1bGxzY3JlZW4oKWBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9FbGVtZW50L3JlcXVlc3RGdWxsc2NyZWVuICJUaGUgRWxlbWVudC5yZXF1ZXN0RnVsbHNjcmVlbigpIG1ldGhvZCBpc3N1ZXMgYW4gYXN5bmNocm9ub3VzIHJlcXVlc3QgdG8gbWFrZSB0aGUgZWxlbWVudCBiZSBkaXNwbGF5ZWQgaW4gZnVsbC1zY3JlZW4gbW9kZS4iKSBtZXRob2QuXG5UaGlzIGF0dHJpYnV0ZSBpcyBjb25zaWRlcmVkIGEgbGVnYWN5IGF0dHJpYnV0ZSBhbmQgcmVkZWZpbmVkIGFzIGBhbGxvdz0iZnVsbHNjcmVlbiJgLid9fSx7bmFtZToid2lkdGgiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlRoZSB3aWR0aCBvZiB0aGUgZnJhbWUgaW4gQ1NTIHBpeGVscy4gRGVmYXVsdCBpcyBgMzAwYC4ifX0se25hbWU6ImhlaWdodCIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiVGhlIGhlaWdodCBvZiB0aGUgZnJhbWUgaW4gQ1NTIHBpeGVscy4gRGVmYXVsdCBpcyBgMTUwYC4ifX0se25hbWU6ImFsbG93IixkZXNjcmlwdGlvbjoiU3BlY2lmaWVzIGEgW2ZlYXR1cmUgcG9saWN5XShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVFRQL0ZlYXR1cmVfUG9saWN5KSBmb3IgdGhlIGA8aWZyYW1lPmAuIn0se25hbWU6ImFsbG93cGF5bWVudHJlcXVlc3QiLGRlc2NyaXB0aW9uOiJTZXQgdG8gYHRydWVgIGlmIGEgY3Jvc3Mtb3JpZ2luIGA8aWZyYW1lPmAgc2hvdWxkIGJlIGFsbG93ZWQgdG8gaW52b2tlIHRoZSBbUGF5bWVudCBSZXF1ZXN0IEFQSV0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL1BheW1lbnRfUmVxdWVzdF9BUEkpLiJ9LHtuYW1lOiJhbGxvd3BheW1lbnRyZXF1ZXN0IixkZXNjcmlwdGlvbjonVGhpcyBhdHRyaWJ1dGUgaXMgY29uc2lkZXJlZCBhIGxlZ2FjeSBhdHRyaWJ1dGUgYW5kIHJlZGVmaW5lZCBhcyBgYWxsb3c9InBheW1lbnQiYC4nfSx7bmFtZToiY3NwIixkZXNjcmlwdGlvbjonQSBbQ29udGVudCBTZWN1cml0eSBQb2xpY3ldKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUVFAvQ1NQKSBlbmZvcmNlZCBmb3IgdGhlIGVtYmVkZGVkIHJlc291cmNlLiBTZWUgW2BIVE1MSUZyYW1lRWxlbWVudC5jc3BgXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvSFRNTElGcmFtZUVsZW1lbnQvY3NwICJUaGUgY3NwIHByb3BlcnR5IG9mIHRoZSBIVE1MSUZyYW1lRWxlbWVudCBpbnRlcmZhY2Ugc3BlY2lmaWVzIHRoZSBDb250ZW50IFNlY3VyaXR5IFBvbGljeSB0aGF0IGFuIGVtYmVkZGVkIGRvY3VtZW50IG11c3QgYWdyZWUgdG8gZW5mb3JjZSB1cG9uIGl0c2VsZi4iKSBmb3IgZGV0YWlscy4nfSx7bmFtZToiaW1wb3J0YW5jZSIsZGVzY3JpcHRpb246YFRoZSBkb3dubG9hZCBwcmlvcml0eSBvZiB0aGUgcmVzb3VyY2UgaW4gdGhlIFxgPGlmcmFtZT5cYCdzIFxgc3JjXGAgYXR0cmlidXRlLiBBbGxvd2VkIHZhbHVlczoKClxgYXV0b1xgIChkZWZhdWx0KQoKTm8gcHJlZmVyZW5jZS4gVGhlIGJyb3dzZXIgdXNlcyBpdHMgb3duIGhldXJpc3RpY3MgdG8gZGVjaWRlIHRoZSBwcmlvcml0eSBvZiB0aGUgcmVzb3VyY2UuCgpcYGhpZ2hcYAoKVGhlIHJlc291cmNlIHNob3VsZCBiZSBkb3dubG9hZGVkIGJlZm9yZSBvdGhlciBsb3dlci1wcmlvcml0eSBwYWdlIHJlc291cmNlcy4KClxgbG93XGAKClRoZSByZXNvdXJjZSBzaG91bGQgYmUgZG93bmxvYWRlZCBhZnRlciBvdGhlciBoaWdoZXItcHJpb3JpdHkgcGFnZSByZXNvdXJjZXMuYH0se25hbWU6InJlZmVycmVycG9saWN5IixkZXNjcmlwdGlvbjonSW5kaWNhdGVzIHdoaWNoIFtyZWZlcnJlcl0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0RvY3VtZW50L3JlZmVycmVyKSB0byBzZW5kIHdoZW4gZmV0Y2hpbmcgdGhlIGZyYW1lXCdzIHJlc291cmNlOlxuXG4qICAgYG5vLXJlZmVycmVyYDogVGhlIFtgUmVmZXJlcmBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUVFAvSGVhZGVycy9SZWZlcmVyICJUaGUgUmVmZXJlciByZXF1ZXN0IGhlYWRlciBjb250YWlucyB0aGUgYWRkcmVzcyBvZiB0aGUgcHJldmlvdXMgd2ViIHBhZ2UgZnJvbSB3aGljaCBhIGxpbmsgdG8gdGhlIGN1cnJlbnRseSByZXF1ZXN0ZWQgcGFnZSB3YXMgZm9sbG93ZWQuIFRoZSBSZWZlcmVyIGhlYWRlciBhbGxvd3Mgc2VydmVycyB0byBpZGVudGlmeSB3aGVyZSBwZW9wbGUgYXJlIHZpc2l0aW5nIHRoZW0gZnJvbSBhbmQgbWF5IHVzZSB0aGF0IGRhdGEgZm9yIGFuYWx5dGljcywgbG9nZ2luZywgb3Igb3B0aW1pemVkIGNhY2hpbmcsIGZvciBleGFtcGxlLiIpIGhlYWRlciB3aWxsIG5vdCBiZSBzZW50LlxuKiAgIGBuby1yZWZlcnJlci13aGVuLWRvd25ncmFkZWAgKGRlZmF1bHQpOiBUaGUgW2BSZWZlcmVyYF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRUUC9IZWFkZXJzL1JlZmVyZXIgIlRoZSBSZWZlcmVyIHJlcXVlc3QgaGVhZGVyIGNvbnRhaW5zIHRoZSBhZGRyZXNzIG9mIHRoZSBwcmV2aW91cyB3ZWIgcGFnZSBmcm9tIHdoaWNoIGEgbGluayB0byB0aGUgY3VycmVudGx5IHJlcXVlc3RlZCBwYWdlIHdhcyBmb2xsb3dlZC4gVGhlIFJlZmVyZXIgaGVhZGVyIGFsbG93cyBzZXJ2ZXJzIHRvIGlkZW50aWZ5IHdoZXJlIHBlb3BsZSBhcmUgdmlzaXRpbmcgdGhlbSBmcm9tIGFuZCBtYXkgdXNlIHRoYXQgZGF0YSBmb3IgYW5hbHl0aWNzLCBsb2dnaW5nLCBvciBvcHRpbWl6ZWQgY2FjaGluZywgZm9yIGV4YW1wbGUuIikgaGVhZGVyIHdpbGwgbm90IGJlIHNlbnQgdG8gW29yaWdpbl0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9HbG9zc2FyeS9vcmlnaW4gIm9yaWdpbjogV2ViIGNvbnRlbnRcJ3Mgb3JpZ2luIGlzIGRlZmluZWQgYnkgdGhlIHNjaGVtZSAocHJvdG9jb2wpLCBob3N0IChkb21haW4pLCBhbmQgcG9ydCBvZiB0aGUgVVJMIHVzZWQgdG8gYWNjZXNzIGl0LiBUd28gb2JqZWN0cyBoYXZlIHRoZSBzYW1lIG9yaWdpbiBvbmx5IHdoZW4gdGhlIHNjaGVtZSwgaG9zdCwgYW5kIHBvcnQgYWxsIG1hdGNoLiIpcyB3aXRob3V0IFtUTFNdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvR2xvc3NhcnkvVExTICJUTFM6IFRyYW5zcG9ydCBMYXllciBTZWN1cml0eSAoVExTKSwgcHJldmlvdXNseSBrbm93biBhcyBTZWN1cmUgU29ja2V0cyBMYXllciAoU1NMKSwgaXMgYSBwcm90b2NvbCB1c2VkIGJ5IGFwcGxpY2F0aW9ucyB0byBjb21tdW5pY2F0ZSBzZWN1cmVseSBhY3Jvc3MgYSBuZXR3b3JrLCBwcmV2ZW50aW5nIHRhbXBlcmluZyB3aXRoIGFuZCBlYXZlc2Ryb3BwaW5nIG9uIGVtYWlsLCB3ZWIgYnJvd3NpbmcsIG1lc3NhZ2luZywgYW5kIG90aGVyIHByb3RvY29scy4iKSAoW0hUVFBTXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL0dsb3NzYXJ5L0hUVFBTICJIVFRQUzogSFRUUFMgKEhUVFAgU2VjdXJlKSBpcyBhbiBlbmNyeXB0ZWQgdmVyc2lvbiBvZiB0aGUgSFRUUCBwcm90b2NvbC4gSXQgdXN1YWxseSB1c2VzIFNTTCBvciBUTFMgdG8gZW5jcnlwdCBhbGwgY29tbXVuaWNhdGlvbiBiZXR3ZWVuIGEgY2xpZW50IGFuZCBhIHNlcnZlci4gVGhpcyBzZWN1cmUgY29ubmVjdGlvbiBhbGxvd3MgY2xpZW50cyB0byBzYWZlbHkgZXhjaGFuZ2Ugc2Vuc2l0aXZlIGRhdGEgd2l0aCBhIHNlcnZlciwgZm9yIGV4YW1wbGUgZm9yIGJhbmtpbmcgYWN0aXZpdGllcyBvciBvbmxpbmUgc2hvcHBpbmcuIikpLlxuKiAgIGBvcmlnaW5gOiBUaGUgc2VudCByZWZlcnJlciB3aWxsIGJlIGxpbWl0ZWQgdG8gdGhlIG9yaWdpbiBvZiB0aGUgcmVmZXJyaW5nIHBhZ2U6IGl0cyBbc2NoZW1lXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL0FyY2hpdmUvTW96aWxsYS9VUklTY2hlbWUpLCBbaG9zdF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9HbG9zc2FyeS9ob3N0ICJob3N0OiBBIGhvc3QgaXMgYSBkZXZpY2UgY29ubmVjdGVkIHRvIHRoZSBJbnRlcm5ldCAob3IgYSBsb2NhbCBuZXR3b3JrKS4gU29tZSBob3N0cyBjYWxsZWQgc2VydmVycyBvZmZlciBhZGRpdGlvbmFsIHNlcnZpY2VzIGxpa2Ugc2VydmluZyB3ZWJwYWdlcyBvciBzdG9yaW5nIGZpbGVzIGFuZCBlbWFpbHMuIiksIGFuZCBbcG9ydF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9HbG9zc2FyeS9wb3J0ICJwb3J0OiBGb3IgYSBjb21wdXRlciBjb25uZWN0ZWQgdG8gYSBuZXR3b3JrIHdpdGggYW4gSVAgYWRkcmVzcywgYSBwb3J0IGlzIGEgY29tbXVuaWNhdGlvbiBlbmRwb2ludC4gUG9ydHMgYXJlIGRlc2lnbmF0ZWQgYnkgbnVtYmVycywgYW5kIGJlbG93IDEwMjQgZWFjaCBwb3J0IGlzIGFzc29jaWF0ZWQgYnkgZGVmYXVsdCB3aXRoIGEgc3BlY2lmaWMgcHJvdG9jb2wuIikuXG4qICAgYG9yaWdpbi13aGVuLWNyb3NzLW9yaWdpbmA6IFRoZSByZWZlcnJlciBzZW50IHRvIG90aGVyIG9yaWdpbnMgd2lsbCBiZSBsaW1pdGVkIHRvIHRoZSBzY2hlbWUsIHRoZSBob3N0LCBhbmQgdGhlIHBvcnQuIE5hdmlnYXRpb25zIG9uIHRoZSBzYW1lIG9yaWdpbiB3aWxsIHN0aWxsIGluY2x1ZGUgdGhlIHBhdGguXG4qICAgYHNhbWUtb3JpZ2luYDogQSByZWZlcnJlciB3aWxsIGJlIHNlbnQgZm9yIFtzYW1lIG9yaWdpbl0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9HbG9zc2FyeS9TYW1lLW9yaWdpbl9wb2xpY3kgInNhbWUgb3JpZ2luOiBUaGUgc2FtZS1vcmlnaW4gcG9saWN5IGlzIGEgY3JpdGljYWwgc2VjdXJpdHkgbWVjaGFuaXNtIHRoYXQgcmVzdHJpY3RzIGhvdyBhIGRvY3VtZW50IG9yIHNjcmlwdCBsb2FkZWQgZnJvbSBvbmUgb3JpZ2luIGNhbiBpbnRlcmFjdCB3aXRoIGEgcmVzb3VyY2UgZnJvbSBhbm90aGVyIG9yaWdpbi4iKSwgYnV0IGNyb3NzLW9yaWdpbiByZXF1ZXN0cyB3aWxsIGNvbnRhaW4gbm8gcmVmZXJyZXIgaW5mb3JtYXRpb24uXG4qICAgYHN0cmljdC1vcmlnaW5gOiBPbmx5IHNlbmQgdGhlIG9yaWdpbiBvZiB0aGUgZG9jdW1lbnQgYXMgdGhlIHJlZmVycmVyIHdoZW4gdGhlIHByb3RvY29sIHNlY3VyaXR5IGxldmVsIHN0YXlzIHRoZSBzYW1lIChIVFRQU+KGkkhUVFBTKSwgYnV0IGRvblwndCBzZW5kIGl0IHRvIGEgbGVzcyBzZWN1cmUgZGVzdGluYXRpb24gKEhUVFBT4oaSSFRUUCkuXG4qICAgYHN0cmljdC1vcmlnaW4td2hlbi1jcm9zcy1vcmlnaW5gOiBTZW5kIGEgZnVsbCBVUkwgd2hlbiBwZXJmb3JtaW5nIGEgc2FtZS1vcmlnaW4gcmVxdWVzdCwgb25seSBzZW5kIHRoZSBvcmlnaW4gd2hlbiB0aGUgcHJvdG9jb2wgc2VjdXJpdHkgbGV2ZWwgc3RheXMgdGhlIHNhbWUgKEhUVFBT4oaSSFRUUFMpLCBhbmQgc2VuZCBubyBoZWFkZXIgdG8gYSBsZXNzIHNlY3VyZSBkZXN0aW5hdGlvbiAoSFRUUFPihpJIVFRQKS5cbiogICBgdW5zYWZlLXVybGA6IFRoZSByZWZlcnJlciB3aWxsIGluY2x1ZGUgdGhlIG9yaWdpbiBfYW5kXyB0aGUgcGF0aCAoYnV0IG5vdCB0aGUgW2ZyYWdtZW50XShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvSFRNTEh5cGVybGlua0VsZW1lbnRVdGlscy9oYXNoKSwgW3Bhc3N3b3JkXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvSFRNTEh5cGVybGlua0VsZW1lbnRVdGlscy9wYXNzd29yZCksIG9yIFt1c2VybmFtZV0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0hUTUxIeXBlcmxpbmtFbGVtZW50VXRpbHMvdXNlcm5hbWUpKS4gKipUaGlzIHZhbHVlIGlzIHVuc2FmZSoqLCBiZWNhdXNlIGl0IGxlYWtzIG9yaWdpbnMgYW5kIHBhdGhzIGZyb20gVExTLXByb3RlY3RlZCByZXNvdXJjZXMgdG8gaW5zZWN1cmUgb3JpZ2lucy4nfV0scmVmZXJlbmNlczpbe25hbWU6Ik1ETiBSZWZlcmVuY2UiLHVybDoiaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2lmcmFtZSJ9XX0se25hbWU6ImVtYmVkIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJUaGUgZW1iZWQgZWxlbWVudCBwcm92aWRlcyBhbiBpbnRlZ3JhdGlvbiBwb2ludCBmb3IgYW4gZXh0ZXJuYWwgKHR5cGljYWxseSBub24tSFRNTCkgYXBwbGljYXRpb24gb3IgaW50ZXJhY3RpdmUgY29udGVudC4ifSx2b2lkOiEwLGF0dHJpYnV0ZXM6W3tuYW1lOiJzcmMiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlRoZSBVUkzCoG9mIHRoZSByZXNvdXJjZSBiZWluZyBlbWJlZGRlZC4ifX0se25hbWU6InR5cGUiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlRoZSBNSU1FwqB0eXBlIHRvIHVzZSB0byBzZWxlY3QgdGhlIHBsdWctaW4gdG8gaW5zdGFudGlhdGUuIn19LHtuYW1lOiJ3aWR0aCIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiVGhlIGRpc3BsYXllZCB3aWR0aCBvZiB0aGUgcmVzb3VyY2UsIGluIFtDU1MgcGl4ZWxzXShodHRwczovL2RyYWZ0cy5jc3N3Zy5vcmcvY3NzLXZhbHVlcy8jcHgpLiBUaGlzIG11c3QgYmUgYW4gYWJzb2x1dGUgdmFsdWU7IHBlcmNlbnRhZ2VzIGFyZSBfbm90XyBhbGxvd2VkLiJ9fSx7bmFtZToiaGVpZ2h0IixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJUaGUgZGlzcGxheWVkIGhlaWdodCBvZiB0aGUgcmVzb3VyY2UsIGluIFtDU1MgcGl4ZWxzXShodHRwczovL2RyYWZ0cy5jc3N3Zy5vcmcvY3NzLXZhbHVlcy8jcHgpLiBUaGlzIG11c3QgYmUgYW4gYWJzb2x1dGUgdmFsdWU7IHBlcmNlbnRhZ2VzIGFyZSBfbm90XyBhbGxvd2VkLiJ9fV0scmVmZXJlbmNlczpbe25hbWU6Ik1ETiBSZWZlcmVuY2UiLHVybDoiaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2VtYmVkIn1dfSx7bmFtZToib2JqZWN0IixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJUaGUgb2JqZWN0IGVsZW1lbnQgY2FuIHJlcHJlc2VudCBhbiBleHRlcm5hbCByZXNvdXJjZSwgd2hpY2gsIGRlcGVuZGluZyBvbiB0aGUgdHlwZSBvZiB0aGUgcmVzb3VyY2UsIHdpbGwgZWl0aGVyIGJlIHRyZWF0ZWQgYXMgYW4gaW1hZ2UsIGFzIGEgbmVzdGVkIGJyb3dzaW5nIGNvbnRleHQsIG9yIGFzIGFuIGV4dGVybmFsIHJlc291cmNlIHRvIGJlIHByb2Nlc3NlZCBieSBhIHBsdWdpbi4ifSxhdHRyaWJ1dGVzOlt7bmFtZToiZGF0YSIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiVGhlIGFkZHJlc3Mgb2YgdGhlIHJlc291cmNlIGFzIGEgdmFsaWQgVVJMLiBBdCBsZWFzdCBvbmUgb2YgKipkYXRhKiogYW5kICoqdHlwZSoqIG11c3QgYmUgZGVmaW5lZC4ifX0se25hbWU6InR5cGUiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlRoZSBbY29udGVudCB0eXBlXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL0dsb3NzYXJ5L0NvbnRlbnRfdHlwZSkgb2YgdGhlIHJlc291cmNlIHNwZWNpZmllZCBieSAqKmRhdGEqKi4gQXQgbGVhc3Qgb25lIG9mICoqZGF0YSoqIGFuZCAqKnR5cGUqKiBtdXN0IGJlIGRlZmluZWQuIn19LHtuYW1lOiJ0eXBlbXVzdG1hdGNoIix2YWx1ZVNldDoidiIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiVGhpcyBCb29sZWFuIGF0dHJpYnV0ZSBpbmRpY2F0ZXMgaWYgdGhlICoqdHlwZSoqIGF0dHJpYnV0ZSBhbmQgdGhlIGFjdHVhbCBbY29udGVudCB0eXBlXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL0dsb3NzYXJ5L0NvbnRlbnRfdHlwZSkgb2YgdGhlIHJlc291cmNlIG11c3QgbWF0Y2ggdG8gYmUgdXNlZC4ifX0se25hbWU6Im5hbWUiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlRoZSBuYW1lIG9mIHZhbGlkIGJyb3dzaW5nIGNvbnRleHQgKEhUTUw1KSwgb3IgdGhlIG5hbWUgb2YgdGhlIGNvbnRyb2wgKEhUTUwgNCkuIn19LHtuYW1lOiJ1c2VtYXAiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IkEgaGFzaC1uYW1lIHJlZmVyZW5jZSB0byBhIFtgPG1hcD5gXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvbWFwIFwiVGhlIEhUTUwgPG1hcD4gZWxlbWVudCBpcyB1c2VkIHdpdGggPGFyZWE+IGVsZW1lbnRzIHRvIGRlZmluZSBhbiBpbWFnZSBtYXAgKGEgY2xpY2thYmxlIGxpbmsgYXJlYSkuXCIpIGVsZW1lbnQ7IHRoYXQgaXMgYSAnIycgZm9sbG93ZWQgYnkgdGhlIHZhbHVlIG9mIGEgW2BuYW1lYF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L21hcCNhdHRyLW5hbWUpIG9mIGEgbWFwIGVsZW1lbnQuIn19LHtuYW1lOiJmb3JtIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOidUaGUgZm9ybSBlbGVtZW50LCBpZiBhbnksIHRoYXQgdGhlIG9iamVjdCBlbGVtZW50IGlzIGFzc29jaWF0ZWQgd2l0aCAoaXRzIF9mb3JtIG93bmVyXykuIFRoZSB2YWx1ZSBvZiB0aGUgYXR0cmlidXRlIG11c3QgYmUgYW4gSUQgb2YgYSBbYDxmb3JtPmBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9mb3JtICJUaGUgSFRNTCA8Zm9ybT4gZWxlbWVudCByZXByZXNlbnRzIGEgZG9jdW1lbnQgc2VjdGlvbiB0aGF0IGNvbnRhaW5zIGludGVyYWN0aXZlIGNvbnRyb2xzIGZvciBzdWJtaXR0aW5nIGluZm9ybWF0aW9uIHRvIGEgd2ViIHNlcnZlci4iKSBlbGVtZW50IGluIHRoZSBzYW1lIGRvY3VtZW50Lid9fSx7bmFtZToid2lkdGgiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlRoZSB3aWR0aCBvZiB0aGUgZGlzcGxheSByZXNvdXJjZSwgaW4gW0NTUyBwaXhlbHNdKGh0dHBzOi8vZHJhZnRzLmNzc3dnLm9yZy9jc3MtdmFsdWVzLyNweCkuIC0tIChBYnNvbHV0ZSB2YWx1ZXMgb25seS4gW05PIHBlcmNlbnRhZ2VzXShodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9lbWJlZGRlZC1jb250ZW50Lmh0bWwjZGltZW5zaW9uLWF0dHJpYnV0ZXMpKSJ9fSx7bmFtZToiaGVpZ2h0IixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJUaGUgaGVpZ2h0IG9mIHRoZSBkaXNwbGF5ZWQgcmVzb3VyY2UsIGluIFtDU1MgcGl4ZWxzXShodHRwczovL2RyYWZ0cy5jc3N3Zy5vcmcvY3NzLXZhbHVlcy8jcHgpLiAtLSAoQWJzb2x1dGUgdmFsdWVzIG9ubHkuIFtOTyBwZXJjZW50YWdlc10oaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2UvZW1iZWRkZWQtY29udGVudC5odG1sI2RpbWVuc2lvbi1hdHRyaWJ1dGVzKSkifX0se25hbWU6ImFyY2hpdmUiLGRlc2NyaXB0aW9uOiJBIHNwYWNlLXNlcGFyYXRlZCBsaXN0IG9mIFVSSXMgZm9yIGFyY2hpdmVzIG9mIHJlc291cmNlcyBmb3IgdGhlIG9iamVjdC4ifSx7bmFtZToiYm9yZGVyIixkZXNjcmlwdGlvbjoiVGhlIHdpZHRoIG9mIGEgYm9yZGVyIGFyb3VuZCB0aGUgY29udHJvbCwgaW4gcGl4ZWxzLiJ9LHtuYW1lOiJjbGFzc2lkIixkZXNjcmlwdGlvbjoiVGhlIFVSSSBvZiB0aGUgb2JqZWN0J3MgaW1wbGVtZW50YXRpb24uIEl0IGNhbiBiZSB1c2VkIHRvZ2V0aGVyIHdpdGgsIG9yIGluIHBsYWNlIG9mLCB0aGUgKipkYXRhKiogYXR0cmlidXRlLiJ9LHtuYW1lOiJjb2RlYmFzZSIsZGVzY3JpcHRpb246IlRoZSBiYXNlIHBhdGggdXNlZCB0byByZXNvbHZlIHJlbGF0aXZlIFVSSXMgc3BlY2lmaWVkIGJ5ICoqY2xhc3NpZCoqLCAqKmRhdGEqKiwgb3IgKiphcmNoaXZlKiouIElmIG5vdCBzcGVjaWZpZWQsIHRoZSBkZWZhdWx0IGlzIHRoZSBiYXNlIFVSSSBvZiB0aGUgY3VycmVudCBkb2N1bWVudC4ifSx7bmFtZToiY29kZXR5cGUiLGRlc2NyaXB0aW9uOiJUaGUgY29udGVudCB0eXBlIG9mIHRoZSBkYXRhIHNwZWNpZmllZCBieSAqKmNsYXNzaWQqKi4ifSx7bmFtZToiZGVjbGFyZSIsZGVzY3JpcHRpb246IlRoZSBwcmVzZW5jZSBvZiB0aGlzIEJvb2xlYW4gYXR0cmlidXRlIG1ha2VzIHRoaXMgZWxlbWVudCBhIGRlY2xhcmF0aW9uIG9ubHkuIFRoZSBvYmplY3QgbXVzdCBiZSBpbnN0YW50aWF0ZWQgYnkgYSBzdWJzZXF1ZW50IGA8b2JqZWN0PmAgZWxlbWVudC4gSW4gSFRNTDUsIHJlcGVhdCB0aGUgPG9iamVjdD4gZWxlbWVudCBjb21wbGV0ZWx5IGVhY2ggdGhhdCB0aGF0IHRoZSByZXNvdXJjZSBpcyByZXVzZWQuIn0se25hbWU6InN0YW5kYnkiLGRlc2NyaXB0aW9uOiJBIG1lc3NhZ2UgdGhhdCB0aGUgYnJvd3NlciBjYW4gc2hvdyB3aGlsZSBsb2FkaW5nIHRoZSBvYmplY3QncyBpbXBsZW1lbnRhdGlvbiBhbmQgZGF0YS4ifSx7bmFtZToidGFiaW5kZXgiLGRlc2NyaXB0aW9uOiJUaGUgcG9zaXRpb24gb2YgdGhlIGVsZW1lbnQgaW4gdGhlIHRhYmJpbmcgbmF2aWdhdGlvbiBvcmRlciBmb3IgdGhlIGN1cnJlbnQgZG9jdW1lbnQuIn1dLHJlZmVyZW5jZXM6W3tuYW1lOiJNRE4gUmVmZXJlbmNlIix1cmw6Imh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9vYmplY3QifV19LHtuYW1lOiJwYXJhbSIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiVGhlIHBhcmFtIGVsZW1lbnQgZGVmaW5lcyBwYXJhbWV0ZXJzIGZvciBwbHVnaW5zIGludm9rZWQgYnkgb2JqZWN0IGVsZW1lbnRzLiBJdCBkb2VzIG5vdCByZXByZXNlbnQgYW55dGhpbmcgb24gaXRzIG93bi4ifSx2b2lkOiEwLGF0dHJpYnV0ZXM6W3tuYW1lOiJuYW1lIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJOYW1lIG9mIHRoZSBwYXJhbWV0ZXIuIn19LHtuYW1lOiJ2YWx1ZSIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiU3BlY2lmaWVzIHRoZSB2YWx1ZSBvZiB0aGUgcGFyYW1ldGVyLiJ9fSx7bmFtZToidHlwZSIsZGVzY3JpcHRpb246J09ubHkgdXNlZCBpZiB0aGUgYHZhbHVldHlwZWAgaXMgc2V0IHRvICJyZWYiLiBTcGVjaWZpZXMgdGhlIE1JTUUgdHlwZSBvZiB2YWx1ZXMgZm91bmQgYXQgdGhlIFVSSSBzcGVjaWZpZWQgYnkgdmFsdWUuJ30se25hbWU6InZhbHVldHlwZSIsZGVzY3JpcHRpb246YFNwZWNpZmllcyB0aGUgdHlwZSBvZiB0aGUgXGB2YWx1ZVxgIGF0dHJpYnV0ZS4gUG9zc2libGUgdmFsdWVzIGFyZToKCiogICBkYXRhOiBEZWZhdWx0IHZhbHVlLiBUaGUgdmFsdWUgaXMgcGFzc2VkIHRvIHRoZSBvYmplY3QncyBpbXBsZW1lbnRhdGlvbiBhcyBhIHN0cmluZy4KKiAgIHJlZjogVGhlIHZhbHVlIGlzIGEgVVJJIHRvIGEgcmVzb3VyY2Ugd2hlcmUgcnVuLXRpbWUgdmFsdWVzIGFyZSBzdG9yZWQuCiogICBvYmplY3Q6IEFuIElEIG9mIGFub3RoZXIgW1xgPG9iamVjdD5cYF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L29iamVjdCAiVGhlIEhUTUwgPG9iamVjdD4gZWxlbWVudCByZXByZXNlbnRzIGFuIGV4dGVybmFsIHJlc291cmNlLCB3aGljaCBjYW4gYmUgdHJlYXRlZCBhcyBhbiBpbWFnZSwgYSBuZXN0ZWQgYnJvd3NpbmcgY29udGV4dCwgb3IgYSByZXNvdXJjZSB0byBiZSBoYW5kbGVkIGJ5IGEgcGx1Z2luLiIpIGluIHRoZSBzYW1lIGRvY3VtZW50LmB9XSxyZWZlcmVuY2VzOlt7bmFtZToiTUROIFJlZmVyZW5jZSIsdXJsOiJodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvcGFyYW0ifV19LHtuYW1lOiJ2aWRlbyIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiQSB2aWRlbyBlbGVtZW50IGlzIHVzZWQgZm9yIHBsYXlpbmcgdmlkZW9zIG9yIG1vdmllcywgYW5kIGF1ZGlvIGZpbGVzIHdpdGggY2FwdGlvbnMuIn0sYXR0cmlidXRlczpbe25hbWU6InNyYyJ9LHtuYW1lOiJjcm9zc29yaWdpbiIsdmFsdWVTZXQ6InhvIn0se25hbWU6InBvc3RlciJ9LHtuYW1lOiJwcmVsb2FkIix2YWx1ZVNldDoicGwifSx7bmFtZToiYXV0b3BsYXkiLHZhbHVlU2V0OiJ2IixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOidBIEJvb2xlYW4gYXR0cmlidXRlOyBpZiBzcGVjaWZpZWQsIHRoZSB2aWRlbyBhdXRvbWF0aWNhbGx5IGJlZ2lucyB0byBwbGF5IGJhY2sgYXMgc29vbiBhcyBpdCBjYW4gZG8gc28gd2l0aG91dCBzdG9wcGluZyB0byBmaW5pc2ggbG9hZGluZyB0aGUgZGF0YS5cbioqTm90ZSoqOiBTaXRlcyB0aGF0IGF1dG9tYXRpY2FsbHkgcGxheSBhdWRpbyAob3IgdmlkZW8gd2l0aCBhbiBhdWRpbyB0cmFjaykgY2FuIGJlIGFuIHVucGxlYXNhbnQgZXhwZXJpZW5jZSBmb3IgdXNlcnMsIHNvIGl0IHNob3VsZCBiZSBhdm9pZGVkIHdoZW4gcG9zc2libGUuIElmIHlvdSBtdXN0IG9mZmVyIGF1dG9wbGF5IGZ1bmN0aW9uYWxpdHksIHlvdSBzaG91bGQgbWFrZSBpdCBvcHQtaW4gKHJlcXVpcmluZyBhIHVzZXIgdG8gc3BlY2lmaWNhbGx5IGVuYWJsZSBpdCkuIEhvd2V2ZXIsIHRoaXMgY2FuIGJlIHVzZWZ1bCB3aGVuIGNyZWF0aW5nIG1lZGlhIGVsZW1lbnRzIHdob3NlIHNvdXJjZSB3aWxsIGJlIHNldCBhdCBhIGxhdGVyIHRpbWUsIHVuZGVyIHVzZXIgY29udHJvbC5cblxuVG8gZGlzYWJsZSB2aWRlbyBhdXRvcGxheSwgYGF1dG9wbGF5PSJmYWxzZSJgIHdpbGwgbm90IHdvcms7IHRoZSB2aWRlbyB3aWxsIGF1dG9wbGF5IGlmIHRoZSBhdHRyaWJ1dGUgaXMgdGhlcmUgaW4gdGhlIGA8dmlkZW8+YCB0YWcgYXQgYWxsLiBUbyByZW1vdmUgYXV0b3BsYXkgdGhlIGF0dHJpYnV0ZSBuZWVkcyB0byBiZSByZW1vdmVkIGFsdG9nZXRoZXIuXG5cbkluIHNvbWUgYnJvd3NlcnMgKGUuZy4gQ2hyb21lIDcwLjApIGF1dG9wbGF5IGlzIG5vdCB3b3JraW5nIGlmIG5vIGBtdXRlZGAgYXR0cmlidXRlIGlzIHByZXNlbnQuJ319LHtuYW1lOiJtZWRpYWdyb3VwIn0se25hbWU6Imxvb3AiLHZhbHVlU2V0OiJ2In0se25hbWU6Im11dGVkIix2YWx1ZVNldDoidiJ9LHtuYW1lOiJjb250cm9scyIsdmFsdWVTZXQ6InYifSx7bmFtZToid2lkdGgifSx7bmFtZToiaGVpZ2h0In1dLHJlZmVyZW5jZXM6W3tuYW1lOiJNRE4gUmVmZXJlbmNlIix1cmw6Imh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RvY3MvV2ViL0hUTUwvRWxlbWVudC92aWRlbyJ9XX0se25hbWU6ImF1ZGlvIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJBbiBhdWRpbyBlbGVtZW50IHJlcHJlc2VudHMgYSBzb3VuZCBvciBhdWRpbyBzdHJlYW0uIn0sYXR0cmlidXRlczpbe25hbWU6InNyYyIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZTonVGhlIFVSTCBvZiB0aGUgYXVkaW8gdG8gZW1iZWQuIFRoaXMgaXMgc3ViamVjdCB0byBbSFRUUCBhY2Nlc3MgY29udHJvbHNdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvSFRUUF9hY2Nlc3NfY29udHJvbCkuIFRoaXMgaXMgb3B0aW9uYWw7IHlvdSBtYXkgaW5zdGVhZCB1c2UgdGhlIFtgPHNvdXJjZT5gXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvc291cmNlICJUaGUgSFRNTCA8c291cmNlPiBlbGVtZW50IHNwZWNpZmllcyBtdWx0aXBsZSBtZWRpYSByZXNvdXJjZXMgZm9yIHRoZSA8cGljdHVyZT4sIHRoZSA8YXVkaW8+IGVsZW1lbnQsIG9yIHRoZSA8dmlkZW8+IGVsZW1lbnQuIikgZWxlbWVudCB3aXRoaW4gdGhlIGF1ZGlvIGJsb2NrIHRvIHNwZWNpZnkgdGhlIGF1ZGlvIHRvIGVtYmVkLid9fSx7bmFtZToiY3Jvc3NvcmlnaW4iLHZhbHVlU2V0OiJ4byIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZTonVGhpcyBlbnVtZXJhdGVkIGF0dHJpYnV0ZSBpbmRpY2F0ZXMgd2hldGhlciB0byB1c2UgQ09SUyB0byBmZXRjaCB0aGUgcmVsYXRlZCBpbWFnZS4gW0NPUlMtZW5hYmxlZCByZXNvdXJjZXNdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvQ09SU19FbmFibGVkX0ltYWdlKSBjYW4gYmUgcmV1c2VkIGluIHRoZSBbYDxjYW52YXM+YF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2NhbnZhcyAiVXNlIHRoZSBIVE1MIDxjYW52YXM+IGVsZW1lbnQgd2l0aCBlaXRoZXIgdGhlIGNhbnZhcyBzY3JpcHRpbmcgQVBJIG9yIHRoZSBXZWJHTCBBUEkgdG8gZHJhdyBncmFwaGljcyBhbmQgYW5pbWF0aW9ucy4iKSBlbGVtZW50IHdpdGhvdXQgYmVpbmcgX3RhaW50ZWRfLiBUaGUgYWxsb3dlZCB2YWx1ZXMgYXJlOlxuXG5hbm9ueW1vdXNcblxuU2VuZHMgYSBjcm9zcy1vcmlnaW4gcmVxdWVzdCB3aXRob3V0IGEgY3JlZGVudGlhbC4gSW4gb3RoZXIgd29yZHMsIGl0IHNlbmRzIHRoZSBgT3JpZ2luOmAgSFRUUCBoZWFkZXIgd2l0aG91dCBhIGNvb2tpZSwgWC41MDkgY2VydGlmaWNhdGUsIG9yIHBlcmZvcm1pbmcgSFRUUCBCYXNpYyBhdXRoZW50aWNhdGlvbi4gSWYgdGhlIHNlcnZlciBkb2VzIG5vdCBnaXZlIGNyZWRlbnRpYWxzIHRvIHRoZSBvcmlnaW4gc2l0ZSAoYnkgbm90IHNldHRpbmcgdGhlIGBBY2Nlc3MtQ29udHJvbC1BbGxvdy1PcmlnaW46YCBIVFRQIGhlYWRlciksIHRoZSBpbWFnZSB3aWxsIGJlIF90YWludGVkXywgYW5kIGl0cyB1c2FnZSByZXN0cmljdGVkLlxuXG51c2UtY3JlZGVudGlhbHNcblxuU2VuZHMgYSBjcm9zcy1vcmlnaW4gcmVxdWVzdCB3aXRoIGEgY3JlZGVudGlhbC4gSW4gb3RoZXIgd29yZHMsIGl0IHNlbmRzIHRoZSBgT3JpZ2luOmAgSFRUUCBoZWFkZXIgd2l0aCBhIGNvb2tpZSwgYSBjZXJ0aWZpY2F0ZSwgb3IgcGVyZm9ybWluZyBIVFRQIEJhc2ljIGF1dGhlbnRpY2F0aW9uLiBJZiB0aGUgc2VydmVyIGRvZXMgbm90IGdpdmUgY3JlZGVudGlhbHMgdG8gdGhlIG9yaWdpbiBzaXRlICh0aHJvdWdoIGBBY2Nlc3MtQ29udHJvbC1BbGxvdy1DcmVkZW50aWFsczpgIEhUVFAgaGVhZGVyKSwgdGhlIGltYWdlIHdpbGwgYmUgX3RhaW50ZWRfIGFuZCBpdHMgdXNhZ2UgcmVzdHJpY3RlZC5cblxuV2hlbiBub3QgcHJlc2VudCwgdGhlIHJlc291cmNlIGlzIGZldGNoZWQgd2l0aG91dCBhIENPUlMgcmVxdWVzdCAoaS5lLiB3aXRob3V0IHNlbmRpbmcgdGhlIGBPcmlnaW46YCBIVFRQIGhlYWRlciksIHByZXZlbnRpbmcgaXRzIG5vbi10YWludGVkIHVzZWQgaW4gW2A8Y2FudmFzPmBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9jYW52YXMgIlVzZSB0aGUgSFRNTCA8Y2FudmFzPiBlbGVtZW50IHdpdGggZWl0aGVyIHRoZSBjYW52YXMgc2NyaXB0aW5nIEFQSSBvciB0aGUgV2ViR0wgQVBJIHRvIGRyYXcgZ3JhcGhpY3MgYW5kIGFuaW1hdGlvbnMuIikgZWxlbWVudHMuIElmIGludmFsaWQsIGl0IGlzIGhhbmRsZWQgYXMgaWYgdGhlIGVudW1lcmF0ZWQga2V5d29yZCAqKmFub255bW91cyoqIHdhcyB1c2VkLiBTZWUgW0NPUlMgc2V0dGluZ3MgYXR0cmlidXRlc10oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9IVE1ML0NPUlNfc2V0dGluZ3NfYXR0cmlidXRlcykgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24uJ319LHtuYW1lOiJwcmVsb2FkIix2YWx1ZVNldDoicGwiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlRoaXMgZW51bWVyYXRlZCBhdHRyaWJ1dGUgaXMgaW50ZW5kZWQgdG8gcHJvdmlkZSBhIGhpbnQgdG8gdGhlIGJyb3dzZXIgYWJvdXQgd2hhdCB0aGUgYXV0aG9yIHRoaW5rcyB3aWxsIGxlYWQgdG8gdGhlIGJlc3QgdXNlciBleHBlcmllbmNlLiBJdCBtYXkgaGF2ZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6XG5cbiogICBgbm9uZWA6IEluZGljYXRlcyB0aGF0IHRoZSBhdWRpbyBzaG91bGQgbm90IGJlIHByZWxvYWRlZC5cbiogICBgbWV0YWRhdGFgOiBJbmRpY2F0ZXMgdGhhdCBvbmx5IGF1ZGlvIG1ldGFkYXRhIChlLmcuIGxlbmd0aCkgaXMgZmV0Y2hlZC5cbiogICBgYXV0b2A6IEluZGljYXRlcyB0aGF0IHRoZSB3aG9sZSBhdWRpbyBmaWxlIGNhbiBiZSBkb3dubG9hZGVkLCBldmVuIGlmIHRoZSB1c2VyIGlzIG5vdCBleHBlY3RlZCB0byB1c2UgaXQuXG4qICAgX2VtcHR5IHN0cmluZ186IEEgc3lub255bSBvZiB0aGUgYGF1dG9gIHZhbHVlLlxuXG5JZiBub3Qgc2V0LCBgcHJlbG9hZGAncyBkZWZhdWx0IHZhbHVlIGlzIGJyb3dzZXItZGVmaW5lZCAoaS5lLiBlYWNoIGJyb3dzZXIgbWF5IGhhdmUgaXRzIG93biBkZWZhdWx0IHZhbHVlKS4gVGhlIHNwZWMgYWR2aXNlcyBpdCB0byBiZSBzZXQgdG8gYG1ldGFkYXRhYC5cblxuKipVc2FnZSBub3RlczoqKlxuXG4qICAgVGhlIGBhdXRvcGxheWAgYXR0cmlidXRlIGhhcyBwcmVjZWRlbmNlIG92ZXLCoGBwcmVsb2FkYC4gSWYgYGF1dG9wbGF5YCBpcyBzcGVjaWZpZWQsIHRoZSBicm93c2VyIHdvdWxkIG9idmlvdXNseSBuZWVkIHRvIHN0YXJ0IGRvd25sb2FkaW5nIHRoZSBhdWRpbyBmb3IgcGxheWJhY2suXG4qICAgVGhlIGJyb3dzZXIgaXMgbm90IGZvcmNlZCBieSB0aGUgc3BlY2lmaWNhdGlvbiB0byBmb2xsb3cgdGhlIHZhbHVlIG9mIHRoaXMgYXR0cmlidXRlOyBpdCBpcyBhIG1lcmUgaGludC4ifX0se25hbWU6ImF1dG9wbGF5Iix2YWx1ZVNldDoidiIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZTpgQSBCb29sZWFuIGF0dHJpYnV0ZTrCoGlmIHNwZWNpZmllZCwgdGhlIGF1ZGlvIHdpbGwgYXV0b21hdGljYWxseSBiZWdpbiBwbGF5YmFjayBhcyBzb29uIGFzIGl0IGNhbiBkbyBzbywgd2l0aG91dCB3YWl0aW5nIGZvciB0aGUgZW50aXJlIGF1ZGlvIGZpbGUgdG8gZmluaXNoIGRvd25sb2FkaW5nLgoKKipOb3RlKio6IFNpdGVzIHRoYXQgYXV0b21hdGljYWxseSBwbGF5IGF1ZGlvIChvciB2aWRlb3Mgd2l0aCBhbiBhdWRpbyB0cmFjaykgY2FuIGJlIGFuIHVucGxlYXNhbnQgZXhwZXJpZW5jZSBmb3IgdXNlcnMsIHNvIHNob3VsZCBiZSBhdm9pZGVkIHdoZW4gcG9zc2libGUuIElmIHlvdSBtdXN0IG9mZmVyIGF1dG9wbGF5IGZ1bmN0aW9uYWxpdHksIHlvdSBzaG91bGQgbWFrZSBpdCBvcHQtaW4gKHJlcXVpcmluZyBhIHVzZXIgdG8gc3BlY2lmaWNhbGx5IGVuYWJsZSBpdCkuIEhvd2V2ZXIsIHRoaXMgY2FuIGJlIHVzZWZ1bCB3aGVuIGNyZWF0aW5nIG1lZGlhIGVsZW1lbnRzIHdob3NlIHNvdXJjZSB3aWxsIGJlIHNldCBhdCBhIGxhdGVyIHRpbWUsIHVuZGVyIHVzZXIgY29udHJvbC5gfX0se25hbWU6Im1lZGlhZ3JvdXAifSx7bmFtZToibG9vcCIsdmFsdWVTZXQ6InYiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IkEgQm9vbGVhbiBhdHRyaWJ1dGU6wqBpZiBzcGVjaWZpZWQsIHRoZSBhdWRpbyBwbGF5ZXIgd2lsbMKgYXV0b21hdGljYWxseSBzZWVrIGJhY2sgdG8gdGhlIHN0YXJ0wqB1cG9uIHJlYWNoaW5nIHRoZSBlbmQgb2YgdGhlIGF1ZGlvLiJ9fSx7bmFtZToibXV0ZWQiLHZhbHVlU2V0OiJ2IixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJBIEJvb2xlYW4gYXR0cmlidXRlIHRoYXQgaW5kaWNhdGVzIHdoZXRoZXIgdGhlIGF1ZGlvIHdpbGwgYmUgaW5pdGlhbGx5IHNpbGVuY2VkLiBJdHMgZGVmYXVsdCB2YWx1ZSBpcyBgZmFsc2VgLiJ9fSx7bmFtZToiY29udHJvbHMiLHZhbHVlU2V0OiJ2IixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJJZiB0aGlzIGF0dHJpYnV0ZSBpcyBwcmVzZW50LCB0aGUgYnJvd3NlciB3aWxsIG9mZmVyIGNvbnRyb2xzIHRvIGFsbG93IHRoZSB1c2VyIHRvIGNvbnRyb2wgYXVkaW8gcGxheWJhY2ssIGluY2x1ZGluZyB2b2x1bWUsIHNlZWtpbmcsIGFuZCBwYXVzZS9yZXN1bWUgcGxheWJhY2suIn19XSxyZWZlcmVuY2VzOlt7bmFtZToiTUROIFJlZmVyZW5jZSIsdXJsOiJodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvYXVkaW8ifV19LHtuYW1lOiJzb3VyY2UiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlRoZSBzb3VyY2UgZWxlbWVudCBhbGxvd3MgYXV0aG9ycyB0byBzcGVjaWZ5IG11bHRpcGxlIGFsdGVybmF0aXZlIG1lZGlhIHJlc291cmNlcyBmb3IgbWVkaWEgZWxlbWVudHMuIEl0IGRvZXMgbm90IHJlcHJlc2VudCBhbnl0aGluZyBvbiBpdHMgb3duLiJ9LHZvaWQ6ITAsYXR0cmlidXRlczpbe25hbWU6InNyYyIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZTonUmVxdWlyZWQgZm9yIFtgPGF1ZGlvPmBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9hdWRpbyAiVGhlIEhUTUwgPGF1ZGlvPiBlbGVtZW50IGlzIHVzZWQgdG8gZW1iZWQgc291bmQgY29udGVudCBpbiBkb2N1bWVudHMuIEl0IG1heSBjb250YWluIG9uZSBvciBtb3JlIGF1ZGlvIHNvdXJjZXMsIHJlcHJlc2VudGVkIHVzaW5nIHRoZSBzcmMgYXR0cmlidXRlIG9yIHRoZSA8c291cmNlPiBlbGVtZW50OsKgdGhlIGJyb3dzZXIgd2lsbCBjaG9vc2UgdGhlIG1vc3Qgc3VpdGFibGUgb25lLiBJdCBjYW4gYWxzbyBiZSB0aGUgZGVzdGluYXRpb24gZm9yIHN0cmVhbWVkIG1lZGlhLCB1c2luZyBhIE1lZGlhU3RyZWFtLiIpIGFuZCBbYDx2aWRlbz5gXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvdmlkZW8gIlRoZSBIVE1MIFZpZGVvIGVsZW1lbnQgKDx2aWRlbz4pIGVtYmVkcyBhIG1lZGlhIHBsYXllciB3aGljaCBzdXBwb3J0cyB2aWRlbyBwbGF5YmFjayBpbnRvIHRoZSBkb2N1bWVudC4iKSwgYWRkcmVzcyBvZiB0aGUgbWVkaWEgcmVzb3VyY2UuIFRoZSB2YWx1ZSBvZiB0aGlzIGF0dHJpYnV0ZSBpcyBpZ25vcmVkIHdoZW4gdGhlIGA8c291cmNlPmAgZWxlbWVudCBpcyBwbGFjZWQgaW5zaWRlIGEgW2A8cGljdHVyZT5gXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvcGljdHVyZSAiVGhlIEhUTUwgPHBpY3R1cmU+IGVsZW1lbnQgY29udGFpbnMgemVybyBvciBtb3JlIDxzb3VyY2U+IGVsZW1lbnRzIGFuZCBvbmUgPGltZz4gZWxlbWVudCB0byBwcm92aWRlIHZlcnNpb25zIG9mIGFuIGltYWdlIGZvciBkaWZmZXJlbnQgZGlzcGxheS9kZXZpY2Ugc2NlbmFyaW9zLiIpIGVsZW1lbnQuJ319LHtuYW1lOiJ0eXBlIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJUaGUgTUlNRS10eXBlIG9mIHRoZSByZXNvdXJjZSwgb3B0aW9uYWxseSB3aXRoIGEgYGNvZGVjc2AgcGFyYW1ldGVyLiBTZWUgW1JGQyA0MjgxXShodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNDI4MSkgZm9yIGluZm9ybWF0aW9uIGFib3V0IGhvdyB0byBzcGVjaWZ5IGNvZGVjcy4ifX0se25hbWU6InNpemVzIixkZXNjcmlwdGlvbjonSXMgYSBsaXN0IG9mIHNvdXJjZSBzaXplcyB0aGF0IGRlc2NyaWJlcyB0aGUgZmluYWwgcmVuZGVyZWQgd2lkdGggb2YgdGhlIGltYWdlIHJlcHJlc2VudGVkIGJ5IHRoZSBzb3VyY2UuIEVhY2ggc291cmNlIHNpemUgY29uc2lzdHMgb2YgYSBjb21tYS1zZXBhcmF0ZWQgbGlzdCBvZiBtZWRpYSBjb25kaXRpb24tbGVuZ3RoIHBhaXJzLiBUaGlzIGluZm9ybWF0aW9uIGlzIHVzZWQgYnkgdGhlIGJyb3dzZXIgdG8gZGV0ZXJtaW5lLCBiZWZvcmUgbGF5aW5nIHRoZSBwYWdlIG91dCwgd2hpY2ggaW1hZ2UgZGVmaW5lZCBpbiBbYHNyY3NldGBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9zb3VyY2UjYXR0ci1zcmNzZXQpIHRvIHVzZS4gIFxuVGhlIGBzaXplc2AgYXR0cmlidXRlIGhhcyBhbiBlZmZlY3Qgb25seSB3aGVuIHRoZSBbYDxzb3VyY2U+YF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L3NvdXJjZSAiVGhlIEhUTUwgPHNvdXJjZT4gZWxlbWVudCBzcGVjaWZpZXMgbXVsdGlwbGUgbWVkaWEgcmVzb3VyY2VzIGZvciB0aGUgPHBpY3R1cmU+LCB0aGUgPGF1ZGlvPiBlbGVtZW50LCBvciB0aGUgPHZpZGVvPiBlbGVtZW50LiIpIGVsZW1lbnQgaXMgdGhlIGRpcmVjdCBjaGlsZCBvZiBhIFtgPHBpY3R1cmU+YF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L3BpY3R1cmUgIlRoZSBIVE1MIDxwaWN0dXJlPiBlbGVtZW50IGNvbnRhaW5zIHplcm8gb3IgbW9yZSA8c291cmNlPiBlbGVtZW50cyBhbmQgb25lIDxpbWc+IGVsZW1lbnQgdG8gcHJvdmlkZSB2ZXJzaW9ucyBvZiBhbiBpbWFnZSBmb3IgZGlmZmVyZW50IGRpc3BsYXkvZGV2aWNlIHNjZW5hcmlvcy4iKSBlbGVtZW50Lid9LHtuYW1lOiJzcmNzZXQiLGRlc2NyaXB0aW9uOiJBIGxpc3Qgb2Ygb25lIG9yIG1vcmUgc3RyaW5ncyBzZXBhcmF0ZWQgYnkgY29tbWFzIGluZGljYXRpbmcgYSBzZXQgb2YgcG9zc2libGUgaW1hZ2VzIHJlcHJlc2VudGVkIGJ5IHRoZSBzb3VyY2UgZm9yIHRoZSBicm93c2VyIHRvIHVzZS4gRWFjaCBzdHJpbmcgaXMgY29tcG9zZWQgb2Y6XG5cbjEuICBvbmUgVVJMIHRvIGFuIGltYWdlLFxuMi4gIGEgd2lkdGggZGVzY3JpcHRvciwgdGhhdCBpcyBhIHBvc2l0aXZlIGludGVnZXIgZGlyZWN0bHkgZm9sbG93ZWQgYnkgYCd3J2AuIFRoZSBkZWZhdWx0IHZhbHVlLCBpZiBtaXNzaW5nLCBpcyB0aGUgaW5maW5pdHkuXG4zLiAgYSBwaXhlbCBkZW5zaXR5IGRlc2NyaXB0b3IsIHRoYXQgaXMgYSBwb3NpdGl2ZSBmbG9hdGluZyBudW1iZXIgZGlyZWN0bHkgZm9sbG93ZWQgYnkgYCd4J2AuIFRoZSBkZWZhdWx0IHZhbHVlLCBpZiBtaXNzaW5nLCBpcyBgMXhgLlxuXG5FYWNoIHN0cmluZyBpbiB0aGUgbGlzdCBtdXN0IGhhdmUgYXQgbGVhc3QgYSB3aWR0aCBkZXNjcmlwdG9yIG9yIGEgcGl4ZWwgZGVuc2l0eSBkZXNjcmlwdG9yIHRvIGJlIHZhbGlkLiBBbW9uZyB0aGUgbGlzdCwgdGhlcmUgbXVzdCBiZSBvbmx5IG9uZSBzdHJpbmcgY29udGFpbmluZyB0aGUgc2FtZSB0dXBsZSBvZiB3aWR0aCBkZXNjcmlwdG9yIGFuZCBwaXhlbCBkZW5zaXR5IGRlc2NyaXB0b3IuICBcblRoZSBicm93c2VyIGNob29zZXMgdGhlIG1vc3QgYWRlcXVhdGUgaW1hZ2UgdG8gZGlzcGxheSBhdCBhIGdpdmVuIHBvaW50IG9mIHRpbWUuICBcblRoZSBgc3Jjc2V0YCBhdHRyaWJ1dGUgaGFzIGFuIGVmZmVjdCBvbmx5IHdoZW4gdGhlIFtgPHNvdXJjZT5gXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvc291cmNlIFwiVGhlIEhUTUwgPHNvdXJjZT4gZWxlbWVudCBzcGVjaWZpZXMgbXVsdGlwbGUgbWVkaWEgcmVzb3VyY2VzIGZvciB0aGUgPHBpY3R1cmU+LCB0aGUgPGF1ZGlvPiBlbGVtZW50LCBvciB0aGUgPHZpZGVvPiBlbGVtZW50LlwiKSBlbGVtZW50IGlzIHRoZSBkaXJlY3QgY2hpbGQgb2YgYSBbYDxwaWN0dXJlPmBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9waWN0dXJlIFwiVGhlIEhUTUwgPHBpY3R1cmU+IGVsZW1lbnQgY29udGFpbnMgemVybyBvciBtb3JlIDxzb3VyY2U+IGVsZW1lbnRzIGFuZCBvbmUgPGltZz4gZWxlbWVudCB0byBwcm92aWRlIHZlcnNpb25zIG9mIGFuIGltYWdlIGZvciBkaWZmZXJlbnQgZGlzcGxheS9kZXZpY2Ugc2NlbmFyaW9zLlwiKSBlbGVtZW50LiJ9LHtuYW1lOiJtZWRpYSIsZGVzY3JpcHRpb246J1tNZWRpYSBxdWVyeV0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9DU1MvTWVkaWFfcXVlcmllcykgb2YgdGhlIHJlc291cmNlXCdzIGludGVuZGVkIG1lZGlhOyB0aGlzIHNob3VsZCBiZSB1c2VkIG9ubHkgaW4gYSBbYDxwaWN0dXJlPmBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9waWN0dXJlICJUaGUgSFRNTCA8cGljdHVyZT4gZWxlbWVudCBjb250YWlucyB6ZXJvIG9yIG1vcmUgPHNvdXJjZT4gZWxlbWVudHMgYW5kIG9uZSA8aW1nPiBlbGVtZW50IHRvIHByb3ZpZGUgdmVyc2lvbnMgb2YgYW4gaW1hZ2UgZm9yIGRpZmZlcmVudCBkaXNwbGF5L2RldmljZSBzY2VuYXJpb3MuIikgZWxlbWVudC4nfV0scmVmZXJlbmNlczpbe25hbWU6Ik1ETiBSZWZlcmVuY2UiLHVybDoiaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvSFRNTC9FbGVtZW50L3NvdXJjZSJ9XX0se25hbWU6InRyYWNrIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJUaGUgdHJhY2sgZWxlbWVudCBhbGxvd3MgYXV0aG9ycyB0byBzcGVjaWZ5IGV4cGxpY2l0IGV4dGVybmFsIHRpbWVkIHRleHQgdHJhY2tzIGZvciBtZWRpYSBlbGVtZW50cy4gSXQgZG9lcyBub3QgcmVwcmVzZW50IGFueXRoaW5nIG9uIGl0cyBvd24uIn0sdm9pZDohMCxhdHRyaWJ1dGVzOlt7bmFtZToiZGVmYXVsdCIsdmFsdWVTZXQ6InYiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlRoaXMgYXR0cmlidXRlIGluZGljYXRlcyB0aGF0IHRoZSB0cmFjayBzaG91bGQgYmUgZW5hYmxlZCB1bmxlc3MgdGhlIHVzZXIncyBwcmVmZXJlbmNlcyBpbmRpY2F0ZSB0aGF0IGFub3RoZXIgdHJhY2sgaXMgbW9yZSBhcHByb3ByaWF0ZS4gVGhpcyBtYXkgb25seSBiZSB1c2VkIG9uIG9uZSBgdHJhY2tgIGVsZW1lbnQgcGVyIG1lZGlhIGVsZW1lbnQuIn19LHtuYW1lOiJraW5kIix2YWx1ZVNldDoidGsiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IkhvdyB0aGUgdGV4dCB0cmFjayBpcyBtZWFudCB0byBiZSB1c2VkLiBJZiBvbWl0dGVkIHRoZSBkZWZhdWx0IGtpbmQgaXMgYHN1YnRpdGxlc2AuIElmIHRoZSBhdHRyaWJ1dGUgaXMgbm90IHByZXNlbnQsIGl0IHdpbGwgdXNlIHRoZSBgc3VidGl0bGVzYC4gSWYgdGhlIGF0dHJpYnV0ZSBjb250YWlucyBhbiBpbnZhbGlkIHZhbHVlLCBpdCB3aWxsIHVzZSBgbWV0YWRhdGFgLiAoVmVyc2lvbnMgb2YgQ2hyb21lIGVhcmxpZXIgdGhhbiA1MiB0cmVhdGVkIGFuIGludmFsaWQgdmFsdWUgYXMgYHN1YnRpdGxlc2AuKcKgVGhlIGZvbGxvd2luZyBrZXl3b3JkcyBhcmUgYWxsb3dlZDpcblxuKiAgIGBzdWJ0aXRsZXNgXG4gICAgKiAgIFN1YnRpdGxlcyBwcm92aWRlIHRyYW5zbGF0aW9uIG9mIGNvbnRlbnQgdGhhdCBjYW5ub3QgYmUgdW5kZXJzdG9vZCBieSB0aGUgdmlld2VyLiBGb3IgZXhhbXBsZSBkaWFsb2d1ZSBvciB0ZXh0IHRoYXQgaXMgbm90IEVuZ2xpc2ggaW4gYW4gRW5nbGlzaCBsYW5ndWFnZSBmaWxtLlxuICAgICogICBTdWJ0aXRsZXMgbWF5IGNvbnRhaW4gYWRkaXRpb25hbCBjb250ZW50LCB1c3VhbGx5IGV4dHJhIGJhY2tncm91bmQgaW5mb3JtYXRpb24uIEZvciBleGFtcGxlIHRoZSB0ZXh0IGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIFN0YXIgV2FycyBmaWxtcywgb3IgdGhlIGRhdGUsIHRpbWUsIGFuZCBsb2NhdGlvbiBvZiBhIHNjZW5lLlxuKiAgIGBjYXB0aW9uc2BcbiAgICAqICAgQ2xvc2VkIGNhcHRpb25zIHByb3ZpZGUgYSB0cmFuc2NyaXB0aW9uIGFuZCBwb3NzaWJseSBhIHRyYW5zbGF0aW9uIG9mIGF1ZGlvLlxuICAgICogICBJdCBtYXkgaW5jbHVkZSBpbXBvcnRhbnQgbm9uLXZlcmJhbCBpbmZvcm1hdGlvbiBzdWNoIGFzIG11c2ljIGN1ZXMgb3Igc291bmQgZWZmZWN0cy4gSXQgbWF5IGluZGljYXRlIHRoZSBjdWUncyBzb3VyY2UgKGUuZy4gbXVzaWMsIHRleHQsIGNoYXJhY3RlcikuXG4gICAgKiAgIFN1aXRhYmxlIGZvciB1c2VycyB3aG8gYXJlIGRlYWYgb3Igd2hlbiB0aGUgc291bmQgaXMgbXV0ZWQuXG4qICAgYGRlc2NyaXB0aW9uc2BcbiAgICAqICAgVGV4dHVhbCBkZXNjcmlwdGlvbiBvZiB0aGUgdmlkZW8gY29udGVudC5cbiAgICAqICAgU3VpdGFibGUgZm9yIHVzZXJzIHdobyBhcmUgYmxpbmQgb3Igd2hlcmUgdGhlIHZpZGVvIGNhbm5vdCBiZSBzZWVuLlxuKiAgIGBjaGFwdGVyc2BcbiAgICAqICAgQ2hhcHRlciB0aXRsZXMgYXJlIGludGVuZGVkIHRvIGJlIHVzZWQgd2hlbiB0aGUgdXNlciBpcyBuYXZpZ2F0aW5nIHRoZSBtZWRpYSByZXNvdXJjZS5cbiogICBgbWV0YWRhdGFgXG4gICAgKiAgIFRyYWNrcyB1c2VkIGJ5IHNjcmlwdHMuIE5vdCB2aXNpYmxlIHRvIHRoZSB1c2VyLiJ9fSx7bmFtZToibGFiZWwiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IkEgdXNlci1yZWFkYWJsZSB0aXRsZSBvZiB0aGUgdGV4dCB0cmFjayB3aGljaCBpcyB1c2VkIGJ5IHRoZSBicm93c2VyIHdoZW4gbGlzdGluZyBhdmFpbGFibGUgdGV4dCB0cmFja3MuIn19LHtuYW1lOiJzcmMiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6J0FkZHJlc3Mgb2YgdGhlIHRyYWNrIChgLnZ0dGAgZmlsZSkuIE11c3QgYmUgYSB2YWxpZCBVUkwuIFRoaXMgYXR0cmlidXRlIG11c3QgYmUgc3BlY2lmaWVkIGFuZCBpdHMgVVJMIHZhbHVlIG11c3QgaGF2ZSB0aGUgc2FtZSBvcmlnaW4gYXMgdGhlIGRvY3VtZW50IOKAlCB1bmxlc3MgdGhlIFtgPGF1ZGlvPmBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9hdWRpbyAiVGhlIEhUTUwgPGF1ZGlvPiBlbGVtZW50IGlzIHVzZWQgdG8gZW1iZWQgc291bmQgY29udGVudCBpbiBkb2N1bWVudHMuIEl0IG1heSBjb250YWluIG9uZSBvciBtb3JlIGF1ZGlvIHNvdXJjZXMsIHJlcHJlc2VudGVkIHVzaW5nIHRoZSBzcmMgYXR0cmlidXRlIG9yIHRoZSA8c291cmNlPiBlbGVtZW50OsKgdGhlIGJyb3dzZXIgd2lsbCBjaG9vc2UgdGhlIG1vc3Qgc3VpdGFibGUgb25lLiBJdCBjYW4gYWxzbyBiZSB0aGUgZGVzdGluYXRpb24gZm9yIHN0cmVhbWVkIG1lZGlhLCB1c2luZyBhIE1lZGlhU3RyZWFtLiIpIG9yIFtgPHZpZGVvPmBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC92aWRlbyAiVGhlIEhUTUwgVmlkZW8gZWxlbWVudCAoPHZpZGVvPikgZW1iZWRzIGEgbWVkaWEgcGxheWVyIHdoaWNoIHN1cHBvcnRzIHZpZGVvIHBsYXliYWNrIGludG8gdGhlIGRvY3VtZW50LiIpIHBhcmVudCBlbGVtZW50IG9mIHRoZSBgdHJhY2tgIGVsZW1lbnQgaGFzIGEgW2Bjcm9zc29yaWdpbmBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvQ09SU19zZXR0aW5nc19hdHRyaWJ1dGVzKSBhdHRyaWJ1dGUuJ319LHtuYW1lOiJzcmNsYW5nIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJMYW5ndWFnZSBvZiB0aGUgdHJhY2sgdGV4dCBkYXRhLiBJdCBtdXN0IGJlIGEgdmFsaWQgW0JDUCA0N10oaHR0cHM6Ly9yMTJhLmdpdGh1Yi5pby9hcHAtc3VidGFncy8pIGxhbmd1YWdlIHRhZy4gSWYgdGhlIGBraW5kYCBhdHRyaWJ1dGUgaXMgc2V0IHRvwqBgc3VidGl0bGVzLGAgdGhlbiBgc3JjbGFuZ2AgbXVzdCBiZSBkZWZpbmVkLiJ9fV0scmVmZXJlbmNlczpbe25hbWU6Ik1ETiBSZWZlcmVuY2UiLHVybDoiaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvSFRNTC9FbGVtZW50L3RyYWNrIn1dfSx7bmFtZToibWFwIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJUaGUgbWFwIGVsZW1lbnQsIGluIGNvbmp1bmN0aW9uIHdpdGggYW4gaW1nIGVsZW1lbnQgYW5kIGFueSBhcmVhIGVsZW1lbnQgZGVzY2VuZGFudHMsIGRlZmluZXMgYW4gaW1hZ2UgbWFwLiBUaGUgZWxlbWVudCByZXByZXNlbnRzIGl0cyBjaGlsZHJlbi4ifSxhdHRyaWJ1dGVzOlt7bmFtZToibmFtZSIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiVGhlIG5hbWUgYXR0cmlidXRlIGdpdmVzIHRoZSBtYXAgYSBuYW1lIHNvIHRoYXQgaXQgY2FuIGJlIHJlZmVyZW5jZWQuIFRoZSBhdHRyaWJ1dGUgbXVzdCBiZSBwcmVzZW50IGFuZCBtdXN0IGhhdmUgYSBub24tZW1wdHkgdmFsdWUgd2l0aCBubyBzcGFjZSBjaGFyYWN0ZXJzLiBUaGUgdmFsdWUgb2YgdGhlIG5hbWUgYXR0cmlidXRlIG11c3Qgbm90IGJlIGEgY29tcGF0aWJpbGl0eS1jYXNlbGVzcyBtYXRjaCBmb3IgdGhlIHZhbHVlIG9mIHRoZSBuYW1lIGF0dHJpYnV0ZSBvZiBhbm90aGVyIG1hcCBlbGVtZW50IGluIHRoZSBzYW1lIGRvY3VtZW50LiBJZiB0aGUgaWQgYXR0cmlidXRlIGlzIGFsc28gc3BlY2lmaWVkLCBib3RoIGF0dHJpYnV0ZXMgbXVzdCBoYXZlIHRoZSBzYW1lIHZhbHVlLiJ9fV0scmVmZXJlbmNlczpbe25hbWU6Ik1ETiBSZWZlcmVuY2UiLHVybDoiaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvSFRNTC9FbGVtZW50L21hcCJ9XX0se25hbWU6ImFyZWEiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlRoZSBhcmVhIGVsZW1lbnQgcmVwcmVzZW50cyBlaXRoZXIgYSBoeXBlcmxpbmsgd2l0aCBzb21lIHRleHQgYW5kIGEgY29ycmVzcG9uZGluZyBhcmVhIG9uIGFuIGltYWdlIG1hcCwgb3IgYSBkZWFkIGFyZWEgb24gYW4gaW1hZ2UgbWFwLiJ9LHZvaWQ6ITAsYXR0cmlidXRlczpbe25hbWU6ImFsdCJ9LHtuYW1lOiJjb29yZHMifSx7bmFtZToic2hhcGUiLHZhbHVlU2V0OiJzaCJ9LHtuYW1lOiJocmVmIn0se25hbWU6InRhcmdldCIsdmFsdWVTZXQ6InRhcmdldCJ9LHtuYW1lOiJkb3dubG9hZCJ9LHtuYW1lOiJwaW5nIn0se25hbWU6InJlbCJ9LHtuYW1lOiJocmVmbGFuZyJ9LHtuYW1lOiJ0eXBlIn0se25hbWU6ImFjY2Vzc2tleSIsZGVzY3JpcHRpb246IlNwZWNpZmllcyBhIGtleWJvYXJkIG5hdmlnYXRpb24gYWNjZWxlcmF0b3IgZm9yIHRoZSBlbGVtZW50LiBQcmVzc2luZyBBTFQgb3IgYSBzaW1pbGFyIGtleSBpbiBhc3NvY2lhdGlvbiB3aXRoIHRoZSBzcGVjaWZpZWQgY2hhcmFjdGVyIHNlbGVjdHMgdGhlIGZvcm0gY29udHJvbCBjb3JyZWxhdGVkIHdpdGggdGhhdCBrZXkgc2VxdWVuY2UuIFBhZ2UgZGVzaWduZXJzIGFyZSBmb3Jld2FybmVkIHRvIGF2b2lkIGtleSBzZXF1ZW5jZXMgYWxyZWFkeSBib3VuZCB0byBicm93c2Vycy4gVGhpcyBhdHRyaWJ1dGUgaXMgZ2xvYmFsIHNpbmNlIEhUTUw1LiJ9XSxyZWZlcmVuY2VzOlt7bmFtZToiTUROIFJlZmVyZW5jZSIsdXJsOiJodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvYXJlYSJ9XX0se25hbWU6InRhYmxlIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJUaGUgdGFibGUgZWxlbWVudCByZXByZXNlbnRzIGRhdGEgd2l0aCBtb3JlIHRoYW4gb25lIGRpbWVuc2lvbiwgaW4gdGhlIGZvcm0gb2YgYSB0YWJsZS4ifSxhdHRyaWJ1dGVzOlt7bmFtZToiYm9yZGVyIn0se25hbWU6ImFsaWduIixkZXNjcmlwdGlvbjonVGhpcyBlbnVtZXJhdGVkIGF0dHJpYnV0ZSBpbmRpY2F0ZXMgaG93IHRoZSB0YWJsZSBtdXN0IGJlIGFsaWduZWQgaW5zaWRlIHRoZSBjb250YWluaW5nIGRvY3VtZW50LiBJdCBtYXkgaGF2ZSB0aGUgZm9sbG93aW5nIHZhbHVlczpcblxuKiAgIGxlZnQ6IHRoZSB0YWJsZSBpcyBkaXNwbGF5ZWQgb24gdGhlIGxlZnQgc2lkZSBvZiB0aGUgZG9jdW1lbnQ7XG4qICAgY2VudGVyOiB0aGUgdGFibGUgaXMgZGlzcGxheWVkIGluIHRoZSBjZW50ZXIgb2YgdGhlIGRvY3VtZW50O1xuKiAgIHJpZ2h0OiB0aGUgdGFibGUgaXMgZGlzcGxheWVkIG9uIHRoZSByaWdodCBzaWRlIG9mIHRoZSBkb2N1bWVudC5cblxuKipVc2FnZSBOb3RlKipcblxuKiAgICoqRG8gbm90IHVzZSB0aGlzIGF0dHJpYnV0ZSoqLCBhcyBpdCBoYXMgYmVlbiBkZXByZWNhdGVkLiBUaGUgW2A8dGFibGU+YF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L3RhYmxlICJUaGUgSFRNTCA8dGFibGU+IGVsZW1lbnQgcmVwcmVzZW50cyB0YWJ1bGFyIGRhdGEg4oCUIHRoYXQgaXMsIGluZm9ybWF0aW9uIHByZXNlbnRlZCBpbiBhIHR3by1kaW1lbnNpb25hbCB0YWJsZSBjb21wcmlzZWQgb2Ygcm93cyBhbmQgY29sdW1ucyBvZiBjZWxscyBjb250YWluaW5nIGRhdGEuIikgZWxlbWVudCBzaG91bGQgYmUgc3R5bGVkIHVzaW5nIFtDU1NdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvQ1NTKS4gU2V0IFtgbWFyZ2luLWxlZnRgXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9DU1MvbWFyZ2luLWxlZnQgIlRoZSBtYXJnaW4tbGVmdCBDU1MgcHJvcGVydHkgc2V0cyB0aGUgbWFyZ2luIGFyZWEgb24gdGhlIGxlZnQgc2lkZSBvZiBhbiBlbGVtZW50LiBBIHBvc2l0aXZlIHZhbHVlIHBsYWNlcyBpdCBmYXJ0aGVyIGZyb20gaXRzIG5laWdoYm9ycywgd2hpbGUgYSBuZWdhdGl2ZSB2YWx1ZSBwbGFjZXMgaXQgY2xvc2VyLiIpIGFuZCBbYG1hcmdpbi1yaWdodGBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0NTUy9tYXJnaW4tcmlnaHQgIlRoZSBtYXJnaW4tcmlnaHQgQ1NTIHByb3BlcnR5IHNldHMgdGhlIG1hcmdpbiBhcmVhIG9uIHRoZSByaWdodCBzaWRlIG9mIGFuIGVsZW1lbnQuIEEgcG9zaXRpdmUgdmFsdWUgcGxhY2VzIGl0IGZhcnRoZXIgZnJvbSBpdHMgbmVpZ2hib3JzLCB3aGlsZSBhIG5lZ2F0aXZlIHZhbHVlIHBsYWNlcyBpdCBjbG9zZXIuIikgdG8gYGF1dG9gIG9yIFtgbWFyZ2luYF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQ1NTL21hcmdpbiAiVGhlIG1hcmdpbiBDU1MgcHJvcGVydHkgc2V0cyB0aGUgbWFyZ2luIGFyZWEgb24gYWxsIGZvdXIgc2lkZXMgb2YgYW4gZWxlbWVudC4gSXQgaXMgYSBzaG9ydGhhbmQgZm9yIG1hcmdpbi10b3AsIG1hcmdpbi1yaWdodCwgbWFyZ2luLWJvdHRvbSwgYW5kIG1hcmdpbi1sZWZ0LiIpIHRvIGAwIGF1dG9gIHRvIGFjaGlldmUgYW4gZWZmZWN0IHRoYXQgaXMgc2ltaWxhciB0byB0aGUgYWxpZ24gYXR0cmlidXRlLlxuKiAgIFByaW9yIHRvIEZpcmVmb3ggNCwgRmlyZWZveCBhbHNvIHN1cHBvcnRlZCB0aGUgYG1pZGRsZWAsIGBhYnNtaWRkbGVgLCBhbmQgYGFic2NlbnRlcmAgdmFsdWVzIGFzIHN5bm9ueW1zIG9mIGBjZW50ZXJgLCBpbiBxdWlya3MgbW9kZSBvbmx5Lid9XSxyZWZlcmVuY2VzOlt7bmFtZToiTUROIFJlZmVyZW5jZSIsdXJsOiJodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvdGFibGUifV19LHtuYW1lOiJjYXB0aW9uIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJUaGUgY2FwdGlvbiBlbGVtZW50IHJlcHJlc2VudHMgdGhlIHRpdGxlIG9mIHRoZSB0YWJsZSB0aGF0IGlzIGl0cyBwYXJlbnQsIGlmIGl0IGhhcyBhIHBhcmVudCBhbmQgdGhhdCBpcyBhIHRhYmxlIGVsZW1lbnQuIn0sYXR0cmlidXRlczpbe25hbWU6ImFsaWduIixkZXNjcmlwdGlvbjpgVGhpcyBlbnVtZXJhdGVkIGF0dHJpYnV0ZSBpbmRpY2F0ZXMgaG93IHRoZSBjYXB0aW9uIG11c3QgYmUgYWxpZ25lZCB3aXRoIHJlc3BlY3QgdG8gdGhlIHRhYmxlLiBJdCBtYXkgaGF2ZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6CgpcYGxlZnRcYAoKVGhlIGNhcHRpb24gaXMgZGlzcGxheWVkIHRvIHRoZSBsZWZ0IG9mIHRoZSB0YWJsZS4KClxgdG9wXGAKClRoZSBjYXB0aW9uIGlzIGRpc3BsYXllZCBhYm92ZSB0aGUgdGFibGUuCgpcYHJpZ2h0XGAKClRoZSBjYXB0aW9uIGlzIGRpc3BsYXllZCB0byB0aGUgcmlnaHQgb2YgdGhlIHRhYmxlLgoKXGBib3R0b21cYAoKVGhlIGNhcHRpb24gaXMgZGlzcGxheWVkIGJlbG93IHRoZSB0YWJsZS4KCioqVXNhZ2Ugbm90ZToqKiBEbyBub3QgdXNlIHRoaXMgYXR0cmlidXRlLCBhcyBpdCBoYXMgYmVlbiBkZXByZWNhdGVkLiBUaGUgW1xgPGNhcHRpb24+XGBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9jYXB0aW9uICJUaGUgSFRNTCBUYWJsZSBDYXB0aW9uIGVsZW1lbnQgKDxjYXB0aW9uPikgc3BlY2lmaWVzIHRoZSBjYXB0aW9uIChvciB0aXRsZSkgb2YgYSB0YWJsZSwgYW5kIGlmIHVzZWQgaXMgYWx3YXlzIHRoZSBmaXJzdCBjaGlsZCBvZiBhIDx0YWJsZT4uIikgZWxlbWVudCBzaG91bGQgYmUgc3R5bGVkIHVzaW5nIHRoZSBbQ1NTXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL0NTUykgcHJvcGVydGllcyBbXGBjYXB0aW9uLXNpZGVcYF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQ1NTL2NhcHRpb24tc2lkZSAiVGhlIGNhcHRpb24tc2lkZSBDU1MgcHJvcGVydHkgcHV0cyB0aGUgY29udGVudCBvZiBhIHRhYmxlJ3MgPGNhcHRpb24+IG9uIHRoZSBzcGVjaWZpZWQgc2lkZS4gVGhlIHZhbHVlcyBhcmUgcmVsYXRpdmUgdG8gdGhlIHdyaXRpbmctbW9kZSBvZiB0aGUgdGFibGUuIikgYW5kIFtcYHRleHQtYWxpZ25cYF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQ1NTL3RleHQtYWxpZ24gIlRoZSB0ZXh0LWFsaWduIENTUyBwcm9wZXJ0eSBzZXRzIHRoZSBob3Jpem9udGFsIGFsaWdubWVudCBvZiBhbiBpbmxpbmUgb3IgdGFibGUtY2VsbCBib3guIFRoaXMgbWVhbnMgaXQgd29ya3MgbGlrZSB2ZXJ0aWNhbC1hbGlnbiBidXQgaW4gdGhlIGhvcml6b250YWwgZGlyZWN0aW9uLiIpLmB9XSxyZWZlcmVuY2VzOlt7bmFtZToiTUROIFJlZmVyZW5jZSIsdXJsOiJodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvY2FwdGlvbiJ9XX0se25hbWU6ImNvbGdyb3VwIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJUaGUgY29sZ3JvdXAgZWxlbWVudCByZXByZXNlbnRzIGEgZ3JvdXAgb2Ygb25lIG9yIG1vcmUgY29sdW1ucyBpbiB0aGUgdGFibGUgdGhhdCBpcyBpdHMgcGFyZW50LCBpZiBpdCBoYXMgYSBwYXJlbnQgYW5kIHRoYXQgaXMgYSB0YWJsZSBlbGVtZW50LiJ9LGF0dHJpYnV0ZXM6W3tuYW1lOiJzcGFuIn0se25hbWU6ImFsaWduIixkZXNjcmlwdGlvbjonVGhpcyBlbnVtZXJhdGVkIGF0dHJpYnV0ZSBzcGVjaWZpZXMgaG93IGhvcml6b250YWwgYWxpZ25tZW50IG9mIGVhY2ggY29sdW1uIGNlbGwgY29udGVudCB3aWxsIGJlIGhhbmRsZWQuIFBvc3NpYmxlIHZhbHVlcyBhcmU6XG5cbiogICBgbGVmdGAsIGFsaWduaW5nIHRoZSBjb250ZW50IHRvIHRoZSBsZWZ0IG9mIHRoZSBjZWxsXG4qICAgYGNlbnRlcmAsIGNlbnRlcmluZyB0aGUgY29udGVudCBpbiB0aGUgY2VsbFxuKiAgIGByaWdodGAsIGFsaWduaW5nIHRoZSBjb250ZW50IHRvIHRoZSByaWdodCBvZiB0aGUgY2VsbFxuKiAgIGBqdXN0aWZ5YCwgaW5zZXJ0aW5nIHNwYWNlcyBpbnRvIHRoZSB0ZXh0dWFsIGNvbnRlbnQgc28gdGhhdCB0aGUgY29udGVudCBpcyBqdXN0aWZpZWQgaW4gdGhlIGNlbGxcbiogICBgY2hhcmAsIGFsaWduaW5nIHRoZSB0ZXh0dWFsIGNvbnRlbnQgb24gYSBzcGVjaWFsIGNoYXJhY3RlciB3aXRoIGEgbWluaW1hbCBvZmZzZXQsIGRlZmluZWQgYnkgdGhlIFtgY2hhcmBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9jb2wjYXR0ci1jaGFyKSBhbmQgW2BjaGFyb2ZmYF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2NvbCNhdHRyLWNoYXJvZmYpIGF0dHJpYnV0ZXMgVW5pbXBsZW1lbnRlZCAoc2VlIFtidWfCoDIyMTJdKGh0dHBzOi8vYnVnemlsbGEubW96aWxsYS5vcmcvc2hvd19idWcuY2dpP2lkPTIyMTIgImNoYXJhY3RlciBhbGlnbm1lbnQgbm90IGltcGxlbWVudGVkIChhbGlnbj1jaGFyLCBjaGFyb2ZmPSwgdGV4dC1hbGlnbjo8c3RyaW5nPikiKSkuXG5cbklmIHRoaXMgYXR0cmlidXRlIGlzIG5vdCBzZXQsIHRoZSBgbGVmdGAgdmFsdWUgaXMgYXNzdW1lZC4gVGhlIGRlc2NlbmRhbnQgW2A8Y29sPmBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9jb2wgIlRoZSBIVE1MIDxjb2w+IGVsZW1lbnQgZGVmaW5lcyBhIGNvbHVtbiB3aXRoaW4gYSB0YWJsZSBhbmQgaXMgdXNlZCBmb3IgZGVmaW5pbmcgY29tbW9uIHNlbWFudGljcyBvbiBhbGwgY29tbW9uIGNlbGxzLiBJdCBpcyBnZW5lcmFsbHkgZm91bmQgd2l0aGluIGEgPGNvbGdyb3VwPiBlbGVtZW50LiIpIGVsZW1lbnRzIG1heSBvdmVycmlkZSB0aGlzIHZhbHVlIHVzaW5nIHRoZWlyIG93biBbYGFsaWduYF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2NvbCNhdHRyLWFsaWduKSBhdHRyaWJ1dGUuXG5cbioqTm90ZToqKiBEbyBub3QgdXNlIHRoaXMgYXR0cmlidXRlIGFzIGl0IGlzIG9ic29sZXRlIChub3Qgc3VwcG9ydGVkKSBpbiB0aGUgbGF0ZXN0IHN0YW5kYXJkLlxuXG4qICAgVG8gYWNoaWV2ZSB0aGUgc2FtZSBlZmZlY3QgYXMgdGhlIGBsZWZ0YCwgYGNlbnRlcmAsIGByaWdodGAgb3IgYGp1c3RpZnlgIHZhbHVlczpcbiAgICAqICAgRG8gbm90IHRyeSB0byBzZXQgdGhlIFtgdGV4dC1hbGlnbmBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0NTUy90ZXh0LWFsaWduICJUaGUgdGV4dC1hbGlnbiBDU1MgcHJvcGVydHkgc2V0cyB0aGUgaG9yaXpvbnRhbCBhbGlnbm1lbnQgb2YgYW4gaW5saW5lIG9yIHRhYmxlLWNlbGwgYm94LiBUaGlzIG1lYW5zIGl0IHdvcmtzIGxpa2UgdmVydGljYWwtYWxpZ24gYnV0IGluIHRoZSBob3Jpem9udGFsIGRpcmVjdGlvbi4iKSBwcm9wZXJ0eSBvbiBhIHNlbGVjdG9yIGdpdmluZyBhIFtgPGNvbGdyb3VwPmBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9jb2xncm91cCAiVGhlIEhUTUwgPGNvbGdyb3VwPiBlbGVtZW50IGRlZmluZXMgYSBncm91cCBvZiBjb2x1bW5zIHdpdGhpbiBhIHRhYmxlLiIpIGVsZW1lbnQuIEJlY2F1c2UgW2A8dGQ+YF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L3RkICJUaGUgSFRNTCA8dGQ+IGVsZW1lbnQgZGVmaW5lcyBhIGNlbGwgb2YgYSB0YWJsZSB0aGF0IGNvbnRhaW5zIGRhdGEuIEl0IHBhcnRpY2lwYXRlcyBpbiB0aGUgdGFibGUgbW9kZWwuIikgZWxlbWVudHMgYXJlIG5vdCBkZXNjZW5kYW50IG9mIHRoZSBbYDxjb2xncm91cD5gXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvY29sZ3JvdXAgIlRoZSBIVE1MIDxjb2xncm91cD4gZWxlbWVudCBkZWZpbmVzIGEgZ3JvdXAgb2YgY29sdW1ucyB3aXRoaW4gYSB0YWJsZS4iKSBlbGVtZW50LCB0aGV5IHdvblwndCBpbmhlcml0IGl0LlxuICAgICogICBJZiB0aGUgdGFibGUgZG9lc25cJ3QgdXNlIGEgW2Bjb2xzcGFuYF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L3RkI2F0dHItY29sc3BhbikgYXR0cmlidXRlLCB1c2Ugb25lIGB0ZDpudGgtY2hpbGQoYW4rYilgIENTUyBzZWxlY3RvciBwZXIgY29sdW1uLCB3aGVyZSBhIGlzIHRoZSB0b3RhbCBudW1iZXIgb2YgdGhlIGNvbHVtbnMgaW4gdGhlIHRhYmxlIGFuZCBiIGlzIHRoZSBvcmRpbmFsIHBvc2l0aW9uIG9mIHRoaXMgY29sdW1uIGluIHRoZSB0YWJsZS4gT25seSBhZnRlciB0aGlzIHNlbGVjdG9yIHRoZSBbYHRleHQtYWxpZ25gXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9DU1MvdGV4dC1hbGlnbiAiVGhlIHRleHQtYWxpZ24gQ1NTIHByb3BlcnR5IHNldHMgdGhlIGhvcml6b250YWwgYWxpZ25tZW50IG9mIGFuIGlubGluZSBvciB0YWJsZS1jZWxsIGJveC4gVGhpcyBtZWFucyBpdCB3b3JrcyBsaWtlIHZlcnRpY2FsLWFsaWduIGJ1dCBpbiB0aGUgaG9yaXpvbnRhbCBkaXJlY3Rpb24uIikgcHJvcGVydHkgY2FuIGJlIHVzZWQuXG4gICAgKiAgIElmIHRoZSB0YWJsZSBkb2VzIHVzZSBhIFtgY29sc3BhbmBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC90ZCNhdHRyLWNvbHNwYW4pIGF0dHJpYnV0ZSwgdGhlIGVmZmVjdCBjYW4gYmUgYWNoaWV2ZWQgYnkgY29tYmluaW5nIGFkZXF1YXRlIENTUyBhdHRyaWJ1dGUgc2VsZWN0b3JzIGxpa2UgYFtjb2xzcGFuPW5dYCwgdGhvdWdoIHRoaXMgaXMgbm90IHRyaXZpYWwuXG4qICAgVG8gYWNoaWV2ZSB0aGUgc2FtZSBlZmZlY3QgYXMgdGhlIGBjaGFyYCB2YWx1ZSwgaW4gQ1NTMywgeW91IGNhbiB1c2UgdGhlIHZhbHVlIG9mIHRoZSBbYGNoYXJgXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvY29sZ3JvdXAjYXR0ci1jaGFyKSBhcyB0aGUgdmFsdWUgb2YgdGhlIFtgdGV4dC1hbGlnbmBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0NTUy90ZXh0LWFsaWduICJUaGUgdGV4dC1hbGlnbiBDU1MgcHJvcGVydHkgc2V0cyB0aGUgaG9yaXpvbnRhbCBhbGlnbm1lbnQgb2YgYW4gaW5saW5lIG9yIHRhYmxlLWNlbGwgYm94LiBUaGlzIG1lYW5zIGl0IHdvcmtzIGxpa2UgdmVydGljYWwtYWxpZ24gYnV0IGluIHRoZSBob3Jpem9udGFsIGRpcmVjdGlvbi4iKSBwcm9wZXJ0eSBVbmltcGxlbWVudGVkLid9XSxyZWZlcmVuY2VzOlt7bmFtZToiTUROIFJlZmVyZW5jZSIsdXJsOiJodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvY29sZ3JvdXAifV19LHtuYW1lOiJjb2wiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IklmIGEgY29sIGVsZW1lbnQgaGFzIGEgcGFyZW50IGFuZCB0aGF0IGlzIGEgY29sZ3JvdXAgZWxlbWVudCB0aGF0IGl0c2VsZiBoYXMgYSBwYXJlbnQgdGhhdCBpcyBhIHRhYmxlIGVsZW1lbnQsIHRoZW4gdGhlIGNvbCBlbGVtZW50IHJlcHJlc2VudHMgb25lIG9yIG1vcmUgY29sdW1ucyBpbiB0aGUgY29sdW1uIGdyb3VwIHJlcHJlc2VudGVkIGJ5IHRoYXQgY29sZ3JvdXAuIn0sdm9pZDohMCxhdHRyaWJ1dGVzOlt7bmFtZToic3BhbiJ9LHtuYW1lOiJhbGlnbiIsZGVzY3JpcHRpb246J1RoaXMgZW51bWVyYXRlZCBhdHRyaWJ1dGUgc3BlY2lmaWVzIGhvdyBob3Jpem9udGFsIGFsaWdubWVudCBvZiBlYWNoIGNvbHVtbiBjZWxsIGNvbnRlbnQgd2lsbCBiZSBoYW5kbGVkLiBQb3NzaWJsZSB2YWx1ZXMgYXJlOlxuXG4qICAgYGxlZnRgLCBhbGlnbmluZyB0aGUgY29udGVudCB0byB0aGUgbGVmdCBvZiB0aGUgY2VsbFxuKiAgIGBjZW50ZXJgLCBjZW50ZXJpbmcgdGhlIGNvbnRlbnQgaW4gdGhlIGNlbGxcbiogICBgcmlnaHRgLCBhbGlnbmluZyB0aGUgY29udGVudCB0byB0aGUgcmlnaHQgb2YgdGhlIGNlbGxcbiogICBganVzdGlmeWAsIGluc2VydGluZyBzcGFjZXMgaW50byB0aGUgdGV4dHVhbCBjb250ZW50IHNvIHRoYXQgdGhlIGNvbnRlbnQgaXMganVzdGlmaWVkIGluIHRoZSBjZWxsXG4qICAgYGNoYXJgLCBhbGlnbmluZyB0aGUgdGV4dHVhbCBjb250ZW50IG9uIGEgc3BlY2lhbCBjaGFyYWN0ZXIgd2l0aCBhIG1pbmltYWwgb2Zmc2V0LCBkZWZpbmVkIGJ5IHRoZSBbYGNoYXJgXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvY29sI2F0dHItY2hhcikgYW5kIFtgY2hhcm9mZmBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9jb2wjYXR0ci1jaGFyb2ZmKSBhdHRyaWJ1dGVzIFVuaW1wbGVtZW50ZWQgKHNlZSBbYnVnwqAyMjEyXShodHRwczovL2J1Z3ppbGxhLm1vemlsbGEub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjEyICJjaGFyYWN0ZXIgYWxpZ25tZW50IG5vdCBpbXBsZW1lbnRlZCAoYWxpZ249Y2hhciwgY2hhcm9mZj0sIHRleHQtYWxpZ246PHN0cmluZz4pIikpLlxuXG5JZiB0aGlzIGF0dHJpYnV0ZSBpcyBub3Qgc2V0LCBpdHMgdmFsdWUgaXMgaW5oZXJpdGVkIGZyb20gdGhlIFtgYWxpZ25gXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvY29sZ3JvdXAjYXR0ci1hbGlnbikgb2YgdGhlIFtgPGNvbGdyb3VwPmBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9jb2xncm91cCAiVGhlIEhUTUwgPGNvbGdyb3VwPiBlbGVtZW50IGRlZmluZXMgYSBncm91cCBvZiBjb2x1bW5zIHdpdGhpbiBhIHRhYmxlLiIpIGVsZW1lbnQgdGhpcyBgPGNvbD5gIGVsZW1lbnQgYmVsb25ncyB0b28uIElmIHRoZXJlIGFyZSBub25lLCB0aGUgYGxlZnRgIHZhbHVlIGlzIGFzc3VtZWQuXG5cbioqTm90ZToqKiBEbyBub3QgdXNlIHRoaXMgYXR0cmlidXRlIGFzIGl0IGlzIG9ic29sZXRlIChub3Qgc3VwcG9ydGVkKSBpbiB0aGUgbGF0ZXN0IHN0YW5kYXJkLlxuXG4qICAgVG8gYWNoaWV2ZSB0aGUgc2FtZSBlZmZlY3QgYXMgdGhlIGBsZWZ0YCwgYGNlbnRlcmAsIGByaWdodGAgb3IgYGp1c3RpZnlgIHZhbHVlczpcbiAgICAqICAgRG8gbm90IHRyeSB0byBzZXQgdGhlIFtgdGV4dC1hbGlnbmBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0NTUy90ZXh0LWFsaWduICJUaGUgdGV4dC1hbGlnbiBDU1MgcHJvcGVydHkgc2V0cyB0aGUgaG9yaXpvbnRhbCBhbGlnbm1lbnQgb2YgYW4gaW5saW5lIG9yIHRhYmxlLWNlbGwgYm94LiBUaGlzIG1lYW5zIGl0IHdvcmtzIGxpa2UgdmVydGljYWwtYWxpZ24gYnV0IGluIHRoZSBob3Jpem9udGFsIGRpcmVjdGlvbi4iKSBwcm9wZXJ0eSBvbiBhIHNlbGVjdG9yIGdpdmluZyBhIFtgPGNvbD5gXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvY29sICJUaGUgSFRNTCA8Y29sPiBlbGVtZW50IGRlZmluZXMgYSBjb2x1bW4gd2l0aGluIGEgdGFibGUgYW5kIGlzIHVzZWQgZm9yIGRlZmluaW5nIGNvbW1vbiBzZW1hbnRpY3Mgb24gYWxsIGNvbW1vbiBjZWxscy4gSXQgaXMgZ2VuZXJhbGx5IGZvdW5kIHdpdGhpbiBhIDxjb2xncm91cD4gZWxlbWVudC4iKSBlbGVtZW50LiBCZWNhdXNlIFtgPHRkPmBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC90ZCAiVGhlIEhUTUwgPHRkPiBlbGVtZW50IGRlZmluZXMgYSBjZWxsIG9mIGEgdGFibGUgdGhhdCBjb250YWlucyBkYXRhLiBJdCBwYXJ0aWNpcGF0ZXMgaW4gdGhlIHRhYmxlIG1vZGVsLiIpIGVsZW1lbnRzIGFyZSBub3QgZGVzY2VuZGFudCBvZiB0aGUgW2A8Y29sPmBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9jb2wgIlRoZSBIVE1MIDxjb2w+IGVsZW1lbnQgZGVmaW5lcyBhIGNvbHVtbiB3aXRoaW4gYSB0YWJsZSBhbmQgaXMgdXNlZCBmb3IgZGVmaW5pbmcgY29tbW9uIHNlbWFudGljcyBvbiBhbGwgY29tbW9uIGNlbGxzLiBJdCBpcyBnZW5lcmFsbHkgZm91bmQgd2l0aGluIGEgPGNvbGdyb3VwPiBlbGVtZW50LiIpIGVsZW1lbnQsIHRoZXkgd29uXCd0IGluaGVyaXQgaXQuXG4gICAgKiAgIElmIHRoZSB0YWJsZSBkb2VzblwndCB1c2UgYSBbYGNvbHNwYW5gXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvdGQjYXR0ci1jb2xzcGFuKSBhdHRyaWJ1dGUsIHVzZSB0aGUgYHRkOm50aC1jaGlsZChhbitiKWAgQ1NTIHNlbGVjdG9yLiBTZXQgYGFgIHRvIHplcm8gYW5kIGBiYCB0byB0aGUgcG9zaXRpb24gb2YgdGhlIGNvbHVtbiBpbiB0aGUgdGFibGUsIGUuZy4gYHRkOm50aC1jaGlsZCgyKSB7IHRleHQtYWxpZ246IHJpZ2h0OyB9YCB0byByaWdodC1hbGlnbiB0aGUgc2Vjb25kIGNvbHVtbi5cbiAgICAqICAgSWYgdGhlIHRhYmxlIGRvZXMgdXNlIGEgW2Bjb2xzcGFuYF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L3RkI2F0dHItY29sc3BhbikgYXR0cmlidXRlLCB0aGUgZWZmZWN0IGNhbiBiZSBhY2hpZXZlZCBieSBjb21iaW5pbmcgYWRlcXVhdGUgQ1NTIGF0dHJpYnV0ZSBzZWxlY3RvcnMgbGlrZSBgW2NvbHNwYW49bl1gLCB0aG91Z2ggdGhpcyBpcyBub3QgdHJpdmlhbC5cbiogICBUbyBhY2hpZXZlIHRoZSBzYW1lIGVmZmVjdCBhcyB0aGUgYGNoYXJgIHZhbHVlLCBpbiBDU1MzLCB5b3UgY2FuIHVzZSB0aGUgdmFsdWUgb2YgdGhlIFtgY2hhcmBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9jb2wjYXR0ci1jaGFyKSBhcyB0aGUgdmFsdWUgb2YgdGhlIFtgdGV4dC1hbGlnbmBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0NTUy90ZXh0LWFsaWduICJUaGUgdGV4dC1hbGlnbiBDU1MgcHJvcGVydHkgc2V0cyB0aGUgaG9yaXpvbnRhbCBhbGlnbm1lbnQgb2YgYW4gaW5saW5lIG9yIHRhYmxlLWNlbGwgYm94LiBUaGlzIG1lYW5zIGl0IHdvcmtzIGxpa2UgdmVydGljYWwtYWxpZ24gYnV0IGluIHRoZSBob3Jpem9udGFsIGRpcmVjdGlvbi4iKSBwcm9wZXJ0eSBVbmltcGxlbWVudGVkLid9XSxyZWZlcmVuY2VzOlt7bmFtZToiTUROIFJlZmVyZW5jZSIsdXJsOiJodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvY29sIn1dfSx7bmFtZToidGJvZHkiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlRoZSB0Ym9keSBlbGVtZW50IHJlcHJlc2VudHMgYSBibG9jayBvZiByb3dzIHRoYXQgY29uc2lzdCBvZiBhIGJvZHkgb2YgZGF0YSBmb3IgdGhlIHBhcmVudCB0YWJsZSBlbGVtZW50LCBpZiB0aGUgdGJvZHkgZWxlbWVudCBoYXMgYSBwYXJlbnQgYW5kIGl0IGlzIGEgdGFibGUuIn0sYXR0cmlidXRlczpbe25hbWU6ImFsaWduIixkZXNjcmlwdGlvbjonVGhpcyBlbnVtZXJhdGVkIGF0dHJpYnV0ZSBzcGVjaWZpZXMgaG93IGhvcml6b250YWwgYWxpZ25tZW50IG9mIGVhY2ggY2VsbCBjb250ZW50IHdpbGwgYmUgaGFuZGxlZC4gUG9zc2libGUgdmFsdWVzIGFyZTpcblxuKiAgIGBsZWZ0YCwgYWxpZ25pbmcgdGhlIGNvbnRlbnQgdG8gdGhlIGxlZnQgb2YgdGhlIGNlbGxcbiogICBgY2VudGVyYCwgY2VudGVyaW5nIHRoZSBjb250ZW50IGluIHRoZSBjZWxsXG4qICAgYHJpZ2h0YCwgYWxpZ25pbmcgdGhlIGNvbnRlbnQgdG8gdGhlIHJpZ2h0IG9mIHRoZSBjZWxsXG4qICAgYGp1c3RpZnlgLCBpbnNlcnRpbmcgc3BhY2VzIGludG8gdGhlIHRleHR1YWwgY29udGVudCBzbyB0aGF0IHRoZSBjb250ZW50IGlzIGp1c3RpZmllZCBpbiB0aGUgY2VsbFxuKiAgIGBjaGFyYCwgYWxpZ25pbmcgdGhlIHRleHR1YWwgY29udGVudCBvbiBhIHNwZWNpYWwgY2hhcmFjdGVyIHdpdGggYSBtaW5pbWFsIG9mZnNldCwgZGVmaW5lZCBieSB0aGUgW2BjaGFyYF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L3Rib2R5I2F0dHItY2hhcikgYW5kIFtgY2hhcm9mZmBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC90Ym9keSNhdHRyLWNoYXJvZmYpIGF0dHJpYnV0ZXMuXG5cbklmIHRoaXMgYXR0cmlidXRlIGlzIG5vdCBzZXQsIHRoZSBgbGVmdGAgdmFsdWUgaXMgYXNzdW1lZC5cblxuKipOb3RlOioqIERvIG5vdCB1c2UgdGhpcyBhdHRyaWJ1dGUgYXMgaXQgaXMgb2Jzb2xldGUgKG5vdCBzdXBwb3J0ZWQpIGluIHRoZSBsYXRlc3Qgc3RhbmRhcmQuXG5cbiogICBUbyBhY2hpZXZlIHRoZSBzYW1lIGVmZmVjdCBhcyB0aGUgYGxlZnRgLCBgY2VudGVyYCwgYHJpZ2h0YCBvciBganVzdGlmeWAgdmFsdWVzLCB1c2UgdGhlIENTUyBbYHRleHQtYWxpZ25gXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9DU1MvdGV4dC1hbGlnbiAiVGhlIHRleHQtYWxpZ24gQ1NTIHByb3BlcnR5IHNldHMgdGhlIGhvcml6b250YWwgYWxpZ25tZW50IG9mIGFuIGlubGluZSBvciB0YWJsZS1jZWxsIGJveC4gVGhpcyBtZWFucyBpdCB3b3JrcyBsaWtlIHZlcnRpY2FsLWFsaWduIGJ1dCBpbiB0aGUgaG9yaXpvbnRhbCBkaXJlY3Rpb24uIikgcHJvcGVydHkgb24gaXQuXG4qICAgVG8gYWNoaWV2ZSB0aGUgc2FtZSBlZmZlY3QgYXMgdGhlIGBjaGFyYCB2YWx1ZSwgaW4gQ1NTMywgeW91IGNhbiB1c2UgdGhlIHZhbHVlIG9mIHRoZSBbYGNoYXJgXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvdGJvZHkjYXR0ci1jaGFyKSBhcyB0aGUgdmFsdWUgb2YgdGhlIFtgdGV4dC1hbGlnbmBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0NTUy90ZXh0LWFsaWduICJUaGUgdGV4dC1hbGlnbiBDU1MgcHJvcGVydHkgc2V0cyB0aGUgaG9yaXpvbnRhbCBhbGlnbm1lbnQgb2YgYW4gaW5saW5lIG9yIHRhYmxlLWNlbGwgYm94LiBUaGlzIG1lYW5zIGl0IHdvcmtzIGxpa2UgdmVydGljYWwtYWxpZ24gYnV0IGluIHRoZSBob3Jpem9udGFsIGRpcmVjdGlvbi4iKSBwcm9wZXJ0eSBVbmltcGxlbWVudGVkLid9XSxyZWZlcmVuY2VzOlt7bmFtZToiTUROIFJlZmVyZW5jZSIsdXJsOiJodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvdGJvZHkifV19LHtuYW1lOiJ0aGVhZCIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiVGhlIHRoZWFkIGVsZW1lbnQgcmVwcmVzZW50cyB0aGUgYmxvY2sgb2Ygcm93cyB0aGF0IGNvbnNpc3Qgb2YgdGhlIGNvbHVtbiBsYWJlbHMgKGhlYWRlcnMpIGZvciB0aGUgcGFyZW50IHRhYmxlIGVsZW1lbnQsIGlmIHRoZSB0aGVhZCBlbGVtZW50IGhhcyBhIHBhcmVudCBhbmQgaXQgaXMgYSB0YWJsZS4ifSxhdHRyaWJ1dGVzOlt7bmFtZToiYWxpZ24iLGRlc2NyaXB0aW9uOidUaGlzIGVudW1lcmF0ZWQgYXR0cmlidXRlIHNwZWNpZmllcyBob3cgaG9yaXpvbnRhbCBhbGlnbm1lbnQgb2YgZWFjaCBjZWxsIGNvbnRlbnQgd2lsbCBiZSBoYW5kbGVkLiBQb3NzaWJsZSB2YWx1ZXMgYXJlOlxuXG4qICAgYGxlZnRgLCBhbGlnbmluZyB0aGUgY29udGVudCB0byB0aGUgbGVmdCBvZiB0aGUgY2VsbFxuKiAgIGBjZW50ZXJgLCBjZW50ZXJpbmcgdGhlIGNvbnRlbnQgaW4gdGhlIGNlbGxcbiogICBgcmlnaHRgLCBhbGlnbmluZyB0aGUgY29udGVudCB0byB0aGUgcmlnaHQgb2YgdGhlIGNlbGxcbiogICBganVzdGlmeWAsIGluc2VydGluZyBzcGFjZXMgaW50byB0aGUgdGV4dHVhbCBjb250ZW50IHNvIHRoYXQgdGhlIGNvbnRlbnQgaXMganVzdGlmaWVkIGluIHRoZSBjZWxsXG4qICAgYGNoYXJgLCBhbGlnbmluZyB0aGUgdGV4dHVhbCBjb250ZW50IG9uIGEgc3BlY2lhbCBjaGFyYWN0ZXIgd2l0aCBhIG1pbmltYWwgb2Zmc2V0LCBkZWZpbmVkIGJ5IHRoZSBbYGNoYXJgXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvdGhlYWQjYXR0ci1jaGFyKSBhbmQgW2BjaGFyb2ZmYF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L3RoZWFkI2F0dHItY2hhcm9mZikgYXR0cmlidXRlcyBVbmltcGxlbWVudGVkIChzZWUgW2J1Z8KgMjIxMl0oaHR0cHM6Ly9idWd6aWxsYS5tb3ppbGxhLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjIxMiAiY2hhcmFjdGVyIGFsaWdubWVudCBub3QgaW1wbGVtZW50ZWQgKGFsaWduPWNoYXIsIGNoYXJvZmY9LCB0ZXh0LWFsaWduOjxzdHJpbmc+KSIpKS5cblxuSWYgdGhpcyBhdHRyaWJ1dGUgaXMgbm90IHNldCwgdGhlIGBsZWZ0YCB2YWx1ZSBpcyBhc3N1bWVkLlxuXG4qKk5vdGU6KiogRG8gbm90IHVzZSB0aGlzIGF0dHJpYnV0ZSBhcyBpdCBpcyBvYnNvbGV0ZSAobm90IHN1cHBvcnRlZCkgaW4gdGhlIGxhdGVzdCBzdGFuZGFyZC5cblxuKiAgIFRvIGFjaGlldmUgdGhlIHNhbWUgZWZmZWN0IGFzIHRoZSBgbGVmdGAsIGBjZW50ZXJgLCBgcmlnaHRgIG9yIGBqdXN0aWZ5YCB2YWx1ZXMsIHVzZSB0aGUgQ1NTIFtgdGV4dC1hbGlnbmBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0NTUy90ZXh0LWFsaWduICJUaGUgdGV4dC1hbGlnbiBDU1MgcHJvcGVydHkgc2V0cyB0aGUgaG9yaXpvbnRhbCBhbGlnbm1lbnQgb2YgYW4gaW5saW5lIG9yIHRhYmxlLWNlbGwgYm94LiBUaGlzIG1lYW5zIGl0IHdvcmtzIGxpa2UgdmVydGljYWwtYWxpZ24gYnV0IGluIHRoZSBob3Jpem9udGFsIGRpcmVjdGlvbi4iKSBwcm9wZXJ0eSBvbiBpdC5cbiogICBUbyBhY2hpZXZlIHRoZSBzYW1lIGVmZmVjdCBhcyB0aGUgYGNoYXJgIHZhbHVlLCBpbiBDU1MzLCB5b3UgY2FuIHVzZSB0aGUgdmFsdWUgb2YgdGhlIFtgY2hhcmBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC90aGVhZCNhdHRyLWNoYXIpIGFzIHRoZSB2YWx1ZSBvZiB0aGUgW2B0ZXh0LWFsaWduYF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQ1NTL3RleHQtYWxpZ24gIlRoZSB0ZXh0LWFsaWduIENTUyBwcm9wZXJ0eSBzZXRzIHRoZSBob3Jpem9udGFsIGFsaWdubWVudCBvZiBhbiBpbmxpbmUgb3IgdGFibGUtY2VsbCBib3guIFRoaXMgbWVhbnMgaXQgd29ya3MgbGlrZSB2ZXJ0aWNhbC1hbGlnbiBidXQgaW4gdGhlIGhvcml6b250YWwgZGlyZWN0aW9uLiIpIHByb3BlcnR5IFVuaW1wbGVtZW50ZWQuJ31dLHJlZmVyZW5jZXM6W3tuYW1lOiJNRE4gUmVmZXJlbmNlIix1cmw6Imh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RvY3MvV2ViL0hUTUwvRWxlbWVudC90aGVhZCJ9XX0se25hbWU6InRmb290IixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJUaGUgdGZvb3QgZWxlbWVudCByZXByZXNlbnRzIHRoZSBibG9jayBvZiByb3dzIHRoYXQgY29uc2lzdCBvZiB0aGUgY29sdW1uIHN1bW1hcmllcyAoZm9vdGVycykgZm9yIHRoZSBwYXJlbnQgdGFibGUgZWxlbWVudCwgaWYgdGhlIHRmb290IGVsZW1lbnQgaGFzIGEgcGFyZW50IGFuZCBpdCBpcyBhIHRhYmxlLiJ9LGF0dHJpYnV0ZXM6W3tuYW1lOiJhbGlnbiIsZGVzY3JpcHRpb246J1RoaXMgZW51bWVyYXRlZCBhdHRyaWJ1dGUgc3BlY2lmaWVzIGhvdyBob3Jpem9udGFsIGFsaWdubWVudCBvZiBlYWNoIGNlbGwgY29udGVudCB3aWxsIGJlIGhhbmRsZWQuIFBvc3NpYmxlIHZhbHVlcyBhcmU6XG5cbiogICBgbGVmdGAsIGFsaWduaW5nIHRoZSBjb250ZW50IHRvIHRoZSBsZWZ0IG9mIHRoZSBjZWxsXG4qICAgYGNlbnRlcmAsIGNlbnRlcmluZyB0aGUgY29udGVudCBpbiB0aGUgY2VsbFxuKiAgIGByaWdodGAsIGFsaWduaW5nIHRoZSBjb250ZW50IHRvIHRoZSByaWdodCBvZiB0aGUgY2VsbFxuKiAgIGBqdXN0aWZ5YCwgaW5zZXJ0aW5nIHNwYWNlcyBpbnRvIHRoZSB0ZXh0dWFsIGNvbnRlbnQgc28gdGhhdCB0aGUgY29udGVudCBpcyBqdXN0aWZpZWQgaW4gdGhlIGNlbGxcbiogICBgY2hhcmAsIGFsaWduaW5nIHRoZSB0ZXh0dWFsIGNvbnRlbnQgb24gYSBzcGVjaWFsIGNoYXJhY3RlciB3aXRoIGEgbWluaW1hbCBvZmZzZXQsIGRlZmluZWQgYnkgdGhlIFtgY2hhcmBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC90Ym9keSNhdHRyLWNoYXIpIGFuZCBbYGNoYXJvZmZgXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvdGJvZHkjYXR0ci1jaGFyb2ZmKSBhdHRyaWJ1dGVzIFVuaW1wbGVtZW50ZWQgKHNlZSBbYnVnwqAyMjEyXShodHRwczovL2J1Z3ppbGxhLm1vemlsbGEub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjEyICJjaGFyYWN0ZXIgYWxpZ25tZW50IG5vdCBpbXBsZW1lbnRlZCAoYWxpZ249Y2hhciwgY2hhcm9mZj0sIHRleHQtYWxpZ246PHN0cmluZz4pIikpLlxuXG5JZiB0aGlzIGF0dHJpYnV0ZSBpcyBub3Qgc2V0LCB0aGUgYGxlZnRgIHZhbHVlIGlzIGFzc3VtZWQuXG5cbioqTm90ZToqKiBEbyBub3QgdXNlIHRoaXMgYXR0cmlidXRlIGFzIGl0IGlzIG9ic29sZXRlIChub3Qgc3VwcG9ydGVkKSBpbiB0aGUgbGF0ZXN0IHN0YW5kYXJkLlxuXG4qICAgVG8gYWNoaWV2ZSB0aGUgc2FtZSBlZmZlY3QgYXMgdGhlIGBsZWZ0YCwgYGNlbnRlcmAsIGByaWdodGAgb3IgYGp1c3RpZnlgIHZhbHVlcywgdXNlIHRoZSBDU1MgW2B0ZXh0LWFsaWduYF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQ1NTL3RleHQtYWxpZ24gIlRoZSB0ZXh0LWFsaWduIENTUyBwcm9wZXJ0eSBzZXRzIHRoZSBob3Jpem9udGFsIGFsaWdubWVudCBvZiBhbiBpbmxpbmUgb3IgdGFibGUtY2VsbCBib3guIFRoaXMgbWVhbnMgaXQgd29ya3MgbGlrZSB2ZXJ0aWNhbC1hbGlnbiBidXQgaW4gdGhlIGhvcml6b250YWwgZGlyZWN0aW9uLiIpIHByb3BlcnR5IG9uIGl0LlxuKiAgIFRvIGFjaGlldmUgdGhlIHNhbWUgZWZmZWN0IGFzIHRoZSBgY2hhcmAgdmFsdWUsIGluIENTUzMsIHlvdSBjYW4gdXNlIHRoZSB2YWx1ZSBvZiB0aGUgW2BjaGFyYF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L3Rmb290I2F0dHItY2hhcikgYXMgdGhlIHZhbHVlIG9mIHRoZSBbYHRleHQtYWxpZ25gXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9DU1MvdGV4dC1hbGlnbiAiVGhlIHRleHQtYWxpZ24gQ1NTIHByb3BlcnR5IHNldHMgdGhlIGhvcml6b250YWwgYWxpZ25tZW50IG9mIGFuIGlubGluZSBvciB0YWJsZS1jZWxsIGJveC4gVGhpcyBtZWFucyBpdCB3b3JrcyBsaWtlIHZlcnRpY2FsLWFsaWduIGJ1dCBpbiB0aGUgaG9yaXpvbnRhbCBkaXJlY3Rpb24uIikgcHJvcGVydHkgVW5pbXBsZW1lbnRlZC4nfV0scmVmZXJlbmNlczpbe25hbWU6Ik1ETiBSZWZlcmVuY2UiLHVybDoiaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvSFRNTC9FbGVtZW50L3Rmb290In1dfSx7bmFtZToidHIiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlRoZSB0ciBlbGVtZW50IHJlcHJlc2VudHMgYSByb3cgb2YgY2VsbHMgaW4gYSB0YWJsZS4ifSxhdHRyaWJ1dGVzOlt7bmFtZToiYWxpZ24iLGRlc2NyaXB0aW9uOidBIFtgRE9NU3RyaW5nYF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0RPTVN0cmluZyAiRE9NU3RyaW5nIGlzIGEgVVRGLTE2IFN0cmluZy4gQXMgSmF2YVNjcmlwdCBhbHJlYWR5IHVzZXMgc3VjaCBzdHJpbmdzLCBET01TdHJpbmcgaXMgbWFwcGVkIGRpcmVjdGx5IHRvIGEgU3RyaW5nLiIpIHdoaWNoIHNwZWNpZmllcyBob3cgdGhlIGNlbGxcJ3MgY29udGV4dCBzaG91bGQgYmUgYWxpZ25lZCBob3Jpem9udGFsbHkgd2l0aGluIHRoZSBjZWxscyBpbiB0aGUgcm93OyB0aGlzIGlzIHNob3J0aGFuZCBmb3IgdXNpbmcgYGFsaWduYCBvbiBldmVyeSBjZWxsIGluIHRoZSByb3cgaW5kaXZpZHVhbGx5LiBQb3NzaWJsZSB2YWx1ZXMgYXJlOlxuXG5gbGVmdGBcblxuQWxpZ24gdGhlIGNvbnRlbnQgb2YgZWFjaCBjZWxsIGF0IGl0cyBsZWZ0IGVkZ2UuXG5cbmBjZW50ZXJgXG5cbkNlbnRlciB0aGUgY29udGVudHMgb2YgZWFjaCBjZWxsIGJldHdlZW4gdGhlaXIgbGVmdCBhbmQgcmlnaHQgZWRnZXMuXG5cbmByaWdodGBcblxuQWxpZ24gdGhlIGNvbnRlbnQgb2YgZWFjaCBjZWxsIGF0IGl0cyByaWdodCBlZGdlLlxuXG5ganVzdGlmeWBcblxuV2lkZW4gd2hpdGVzcGFjZXMgd2l0aGluIHRoZSB0ZXh0IG9mIGVhY2ggY2VsbCBzbyB0aGF0IHRoZSB0ZXh0IGZpbGxzIHRoZSBmdWxsIHdpZHRoIG9mIGVhY2ggY2VsbCAoZnVsbCBqdXN0aWZpY2F0aW9uKS5cblxuYGNoYXJgXG5cbkFsaWduIGVhY2ggY2VsbCBpbiB0aGUgcm93IG9uIGEgc3BlY2lmaWMgY2hhcmFjdGVyIChzdWNoIHRoYXQgZWFjaCByb3cgaW4gdGhlIGNvbHVtbiB0aGF0IGlzIGNvbmZpZ3VyZWQgdGhpcyB3YXkgd2lsbCBob3Jpem9udGFsbHkgYWxpZ24gaXRzIGNlbGxzIG9uIHRoYXQgY2hhcmFjdGVyKS4gVGhpcyB1c2VzIHRoZSBbYGNoYXJgXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvdHIjYXR0ci1jaGFyKSBhbmQgW2BjaGFyb2ZmYF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L3RyI2F0dHItY2hhcm9mZikgdG8gZXN0YWJsaXNoIHRoZSBhbGlnbm1lbnQgY2hhcmFjdGVyICh0eXBpY2FsbHkgIi4iIG9yICIsIiB3aGVuIGFsaWduaW5nIG51bWVyaWNhbCBkYXRhKSBhbmQgdGhlIG51bWJlciBvZiBjaGFyYWN0ZXJzIHRoYXQgc2hvdWxkIGZvbGxvdyB0aGUgYWxpZ25tZW50IGNoYXJhY3Rlci4gVGhpcyBhbGlnbm1lbnQgdHlwZSB3YXMgbmV2ZXIgd2lkZWx5IHN1cHBvcnRlZC5cblxuSWYgbm8gdmFsdWUgaXMgZXhwcmVzc2x5IHNldCBmb3IgYGFsaWduYCwgdGhlIHBhcmVudCBub2RlXCdzIHZhbHVlIGlzIGluaGVyaXRlZC5cblxuSW5zdGVhZCBvZiB1c2luZyB0aGUgb2Jzb2xldGUgYGFsaWduYCBhdHRyaWJ1dGUsIHlvdSBzaG91bGQgaW5zdGVhZCB1c2UgdGhlIENTUyBbYHRleHQtYWxpZ25gXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9DU1MvdGV4dC1hbGlnbiAiVGhlIHRleHQtYWxpZ24gQ1NTIHByb3BlcnR5IHNldHMgdGhlIGhvcml6b250YWwgYWxpZ25tZW50IG9mIGFuIGlubGluZSBvciB0YWJsZS1jZWxsIGJveC4gVGhpcyBtZWFucyBpdCB3b3JrcyBsaWtlIHZlcnRpY2FsLWFsaWduIGJ1dCBpbiB0aGUgaG9yaXpvbnRhbCBkaXJlY3Rpb24uIikgcHJvcGVydHkgdG8gZXN0YWJsaXNoIGBsZWZ0YCwgYGNlbnRlcmAsIGByaWdodGAsIG9yIGBqdXN0aWZ5YCBhbGlnbm1lbnQgZm9yIHRoZSByb3dcJ3MgY2VsbHMuIFRvIGFwcGx5IGNoYXJhY3Rlci1iYXNlZCBhbGlnbm1lbnQsIHNldCB0aGUgQ1NTIFtgdGV4dC1hbGlnbmBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0NTUy90ZXh0LWFsaWduICJUaGUgdGV4dC1hbGlnbiBDU1MgcHJvcGVydHkgc2V0cyB0aGUgaG9yaXpvbnRhbCBhbGlnbm1lbnQgb2YgYW4gaW5saW5lIG9yIHRhYmxlLWNlbGwgYm94LiBUaGlzIG1lYW5zIGl0IHdvcmtzIGxpa2UgdmVydGljYWwtYWxpZ24gYnV0IGluIHRoZSBob3Jpem9udGFsIGRpcmVjdGlvbi4iKSBwcm9wZXJ0eSB0byB0aGUgYWxpZ25tZW50IGNoYXJhY3RlciAoc3VjaCBhcyBgIi4iYCBvciBgIiwiYCkuJ31dLHJlZmVyZW5jZXM6W3tuYW1lOiJNRE4gUmVmZXJlbmNlIix1cmw6Imh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RvY3MvV2ViL0hUTUwvRWxlbWVudC90ciJ9XX0se25hbWU6InRkIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJUaGUgdGQgZWxlbWVudCByZXByZXNlbnRzIGEgZGF0YSBjZWxsIGluIGEgdGFibGUuIn0sYXR0cmlidXRlczpbe25hbWU6ImNvbHNwYW4ifSx7bmFtZToicm93c3BhbiJ9LHtuYW1lOiJoZWFkZXJzIn0se25hbWU6ImFiYnIiLGRlc2NyaXB0aW9uOmBUaGlzIGF0dHJpYnV0ZSBjb250YWlucyBhIHNob3J0IGFiYnJldmlhdGVkIGRlc2NyaXB0aW9uIG9mIHRoZSBjZWxsJ3MgY29udGVudC4gU29tZSB1c2VyLWFnZW50cywgc3VjaCBhcyBzcGVlY2ggcmVhZGVycywgbWF5IHByZXNlbnQgdGhpcyBkZXNjcmlwdGlvbiBiZWZvcmUgdGhlIGNvbnRlbnQgaXRzZWxmLgoKKipOb3RlOioqIERvIG5vdCB1c2UgdGhpcyBhdHRyaWJ1dGUgYXMgaXQgaXMgb2Jzb2xldGUgaW4gdGhlIGxhdGVzdCBzdGFuZGFyZC4gQWx0ZXJuYXRpdmVseSwgeW91IGNhbiBwdXQgdGhlIGFiYnJldmlhdGVkIGRlc2NyaXB0aW9uIGluc2lkZSB0aGUgY2VsbCBhbmQgcGxhY2UgdGhlIGxvbmcgY29udGVudCBpbiB0aGUgKip0aXRsZSoqIGF0dHJpYnV0ZS5gfSx7bmFtZToiYWxpZ24iLGRlc2NyaXB0aW9uOidUaGlzIGVudW1lcmF0ZWQgYXR0cmlidXRlIHNwZWNpZmllcyBob3cgdGhlIGNlbGwgY29udGVudFwncyBob3Jpem9udGFsIGFsaWdubWVudCB3aWxsIGJlIGhhbmRsZWQuIFBvc3NpYmxlIHZhbHVlcyBhcmU6XG5cbiogICBgbGVmdGA6IFRoZSBjb250ZW50IGlzIGFsaWduZWQgdG8gdGhlIGxlZnQgb2YgdGhlIGNlbGwuXG4qICAgYGNlbnRlcmA6IFRoZSBjb250ZW50IGlzIGNlbnRlcmVkIGluIHRoZSBjZWxsLlxuKiAgIGByaWdodGA6IFRoZSBjb250ZW50IGlzIGFsaWduZWQgdG8gdGhlIHJpZ2h0IG9mIHRoZSBjZWxsLlxuKiAgIGBqdXN0aWZ5YCAod2l0aCB0ZXh0IG9ubHkpOiBUaGUgY29udGVudCBpcyBzdHJldGNoZWQgb3V0IGluc2lkZSB0aGUgY2VsbCBzbyB0aGF0IGl0IGNvdmVycyBpdHMgZW50aXJlIHdpZHRoLlxuKiAgIGBjaGFyYCAod2l0aCB0ZXh0IG9ubHkpOiBUaGUgY29udGVudCBpcyBhbGlnbmVkIHRvIGEgY2hhcmFjdGVyIGluc2lkZSB0aGUgYDx0aD5gIGVsZW1lbnQgd2l0aCBtaW5pbWFsIG9mZnNldC4gVGhpcyBjaGFyYWN0ZXIgaXMgZGVmaW5lZCBieSB0aGUgW2BjaGFyYF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L3RkI2F0dHItY2hhcikgYW5kIFtgY2hhcm9mZmBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC90ZCNhdHRyLWNoYXJvZmYpIGF0dHJpYnV0ZXMgVW5pbXBsZW1lbnRlZCAoc2VlIFtidWfCoDIyMTJdKGh0dHBzOi8vYnVnemlsbGEubW96aWxsYS5vcmcvc2hvd19idWcuY2dpP2lkPTIyMTIgImNoYXJhY3RlciBhbGlnbm1lbnQgbm90IGltcGxlbWVudGVkIChhbGlnbj1jaGFyLCBjaGFyb2ZmPSwgdGV4dC1hbGlnbjo8c3RyaW5nPikiKSkuXG5cblRoZSBkZWZhdWx0IHZhbHVlIHdoZW4gdGhpcyBhdHRyaWJ1dGUgaXMgbm90IHNwZWNpZmllZCBpcyBgbGVmdGAuXG5cbioqTm90ZToqKiBEbyBub3QgdXNlIHRoaXMgYXR0cmlidXRlIGFzIGl0IGlzIG9ic29sZXRlIGluIHRoZSBsYXRlc3Qgc3RhbmRhcmQuXG5cbiogICBUbyBhY2hpZXZlIHRoZSBzYW1lIGVmZmVjdCBhcyB0aGUgYGxlZnRgLCBgY2VudGVyYCwgYHJpZ2h0YCBvciBganVzdGlmeWAgdmFsdWVzLCBhcHBseSB0aGUgQ1NTIFtgdGV4dC1hbGlnbmBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0NTUy90ZXh0LWFsaWduICJUaGUgdGV4dC1hbGlnbiBDU1MgcHJvcGVydHkgc2V0cyB0aGUgaG9yaXpvbnRhbCBhbGlnbm1lbnQgb2YgYW4gaW5saW5lIG9yIHRhYmxlLWNlbGwgYm94LiBUaGlzIG1lYW5zIGl0IHdvcmtzIGxpa2UgdmVydGljYWwtYWxpZ24gYnV0IGluIHRoZSBob3Jpem9udGFsIGRpcmVjdGlvbi4iKSBwcm9wZXJ0eSB0byB0aGUgZWxlbWVudC5cbiogICBUbyBhY2hpZXZlIHRoZSBzYW1lIGVmZmVjdCBhcyB0aGUgYGNoYXJgIHZhbHVlLCBnaXZlIHRoZSBbYHRleHQtYWxpZ25gXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9DU1MvdGV4dC1hbGlnbiAiVGhlIHRleHQtYWxpZ24gQ1NTIHByb3BlcnR5IHNldHMgdGhlIGhvcml6b250YWwgYWxpZ25tZW50IG9mIGFuIGlubGluZSBvciB0YWJsZS1jZWxsIGJveC4gVGhpcyBtZWFucyBpdCB3b3JrcyBsaWtlIHZlcnRpY2FsLWFsaWduIGJ1dCBpbiB0aGUgaG9yaXpvbnRhbCBkaXJlY3Rpb24uIikgcHJvcGVydHkgdGhlIHNhbWUgdmFsdWUgeW91IHdvdWxkIHVzZSBmb3IgdGhlIFtgY2hhcmBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC90ZCNhdHRyLWNoYXIpLiBVbmltcGxlbWVudGVkIGluIENTUzMuJ30se25hbWU6ImF4aXMiLGRlc2NyaXB0aW9uOiJUaGlzIGF0dHJpYnV0ZSBjb250YWlucyBhIGxpc3Qgb2Ygc3BhY2Utc2VwYXJhdGVkIHN0cmluZ3MuIEVhY2ggc3RyaW5nIGlzIHRoZSBgaWRgIG9mIGEgZ3JvdXAgb2YgY2VsbHMgdGhhdCB0aGlzIGhlYWRlciBhcHBsaWVzIHRvLlxuXG4qKk5vdGU6KiogRG8gbm90IHVzZSB0aGlzIGF0dHJpYnV0ZSBhcyBpdCBpcyBvYnNvbGV0ZSBpbiB0aGUgbGF0ZXN0IHN0YW5kYXJkLiJ9LHtuYW1lOiJiZ2NvbG9yIixkZXNjcmlwdGlvbjpgVGhpcyBhdHRyaWJ1dGUgZGVmaW5lcyB0aGUgYmFja2dyb3VuZCBjb2xvciBvZiBlYWNoIGNlbGwgaW4gYSBjb2x1bW4uIEl0IGNvbnNpc3RzIG9mIGEgNi1kaWdpdCBoZXhhZGVjaW1hbCBjb2RlIGFzIGRlZmluZWQgaW4gW3NSR0JdKGh0dHBzOi8vd3d3LnczLm9yZy9HcmFwaGljcy9Db2xvci9zUkdCKSBhbmQgaXMgcHJlZml4ZWQgYnkgJyMnLiBUaGlzIGF0dHJpYnV0ZSBtYXkgYmUgdXNlZCB3aXRoIG9uZSBvZiBzaXh0ZWVuIHByZWRlZmluZWQgY29sb3Igc3RyaW5nczoKCsKgCgpcYGJsYWNrXGAgPSAiIzAwMDAwMCIKCsKgCgpcYGdyZWVuXGAgPSAiIzAwODAwMCIKCsKgCgpcYHNpbHZlclxgID0gIiNDMEMwQzAiCgrCoAoKXGBsaW1lXGAgPSAiIzAwRkYwMCIKCsKgCgpcYGdyYXlcYCA9ICIjODA4MDgwIgoKwqAKClxgb2xpdmVcYCA9ICIjODA4MDAwIgoKwqAKClxgd2hpdGVcYCA9ICIjRkZGRkZGIgoKwqAKClxgeWVsbG93XGAgPSAiI0ZGRkYwMCIKCsKgCgpcYG1hcm9vblxgID0gIiM4MDAwMDAiCgrCoAoKXGBuYXZ5XGAgPSAiIzAwMDA4MCIKCsKgCgpcYHJlZFxgID0gIiNGRjAwMDAiCgrCoAoKXGBibHVlXGAgPSAiIzAwMDBGRiIKCsKgCgpcYHB1cnBsZVxgID0gIiM4MDAwODAiCgrCoAoKXGB0ZWFsXGAgPSAiIzAwODA4MCIKCsKgCgpcYGZ1Y2hzaWFcYCA9ICIjRkYwMEZGIgoKwqAKClxgYXF1YVxgID0gIiMwMEZGRkYiCgoqKk5vdGU6KiogRG8gbm90IHVzZSB0aGlzIGF0dHJpYnV0ZSwgYXMgaXQgaXMgbm9uLXN0YW5kYXJkIGFuZCBvbmx5IGltcGxlbWVudGVkIGluIHNvbWUgdmVyc2lvbnMgb2YgTWljcm9zb2Z0IEludGVybmV0IEV4cGxvcmVyOiBUaGUgW1xgPHRkPlxgXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvdGQgIlRoZSBIVE1MIDx0ZD4gZWxlbWVudCBkZWZpbmVzIGEgY2VsbCBvZiBhIHRhYmxlIHRoYXQgY29udGFpbnMgZGF0YS4gSXQgcGFydGljaXBhdGVzIGluIHRoZSB0YWJsZSBtb2RlbC4iKSBlbGVtZW50IHNob3VsZCBiZSBzdHlsZWQgdXNpbmcgW0NTU10oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9DU1MpLiBUbyBjcmVhdGUgYSBzaW1pbGFyIGVmZmVjdCB1c2UgdGhlIFtcYGJhY2tncm91bmQtY29sb3JcYF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQ1NTL2JhY2tncm91bmQtY29sb3IgIlRoZSBiYWNrZ3JvdW5kLWNvbG9yIENTUyBwcm9wZXJ0eSBzZXRzIHRoZSBiYWNrZ3JvdW5kIGNvbG9yIG9mIGFuIGVsZW1lbnQuIikgcHJvcGVydHkgaW4gW0NTU10oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9DU1MpIGluc3RlYWQuYH1dLHJlZmVyZW5jZXM6W3tuYW1lOiJNRE4gUmVmZXJlbmNlIix1cmw6Imh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RvY3MvV2ViL0hUTUwvRWxlbWVudC90ZCJ9XX0se25hbWU6InRoIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJUaGUgdGggZWxlbWVudCByZXByZXNlbnRzIGEgaGVhZGVyIGNlbGwgaW4gYSB0YWJsZS4ifSxhdHRyaWJ1dGVzOlt7bmFtZToiY29sc3BhbiJ9LHtuYW1lOiJyb3dzcGFuIn0se25hbWU6ImhlYWRlcnMifSx7bmFtZToic2NvcGUiLHZhbHVlU2V0OiJzIn0se25hbWU6InNvcnRlZCJ9LHtuYW1lOiJhYmJyIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJUaGlzIGF0dHJpYnV0ZSBjb250YWlucyBhIHNob3J0IGFiYnJldmlhdGVkIGRlc2NyaXB0aW9uIG9mIHRoZSBjZWxsJ3MgY29udGVudC4gU29tZSB1c2VyLWFnZW50cywgc3VjaCBhcyBzcGVlY2ggcmVhZGVycywgbWF5IHByZXNlbnQgdGhpcyBkZXNjcmlwdGlvbiBiZWZvcmUgdGhlIGNvbnRlbnQgaXRzZWxmLiJ9fSx7bmFtZToiYWxpZ24iLGRlc2NyaXB0aW9uOidUaGlzIGVudW1lcmF0ZWQgYXR0cmlidXRlIHNwZWNpZmllcyBob3cgdGhlIGNlbGwgY29udGVudFwncyBob3Jpem9udGFsIGFsaWdubWVudCB3aWxsIGJlIGhhbmRsZWQuIFBvc3NpYmxlIHZhbHVlcyBhcmU6XG5cbiogICBgbGVmdGA6IFRoZSBjb250ZW50IGlzIGFsaWduZWQgdG8gdGhlIGxlZnQgb2YgdGhlIGNlbGwuXG4qICAgYGNlbnRlcmA6IFRoZSBjb250ZW50IGlzIGNlbnRlcmVkIGluIHRoZSBjZWxsLlxuKiAgIGByaWdodGA6IFRoZSBjb250ZW50IGlzIGFsaWduZWQgdG8gdGhlIHJpZ2h0IG9mIHRoZSBjZWxsLlxuKiAgIGBqdXN0aWZ5YCAod2l0aCB0ZXh0IG9ubHkpOiBUaGUgY29udGVudCBpcyBzdHJldGNoZWQgb3V0IGluc2lkZSB0aGUgY2VsbCBzbyB0aGF0IGl0IGNvdmVycyBpdHMgZW50aXJlIHdpZHRoLlxuKiAgIGBjaGFyYCAod2l0aCB0ZXh0IG9ubHkpOiBUaGUgY29udGVudCBpcyBhbGlnbmVkIHRvIGEgY2hhcmFjdGVyIGluc2lkZSB0aGUgYDx0aD5gIGVsZW1lbnQgd2l0aCBtaW5pbWFsIG9mZnNldC4gVGhpcyBjaGFyYWN0ZXIgaXMgZGVmaW5lZCBieSB0aGUgW2BjaGFyYF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L3RoI2F0dHItY2hhcikgYW5kIFtgY2hhcm9mZmBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC90aCNhdHRyLWNoYXJvZmYpIGF0dHJpYnV0ZXMuXG5cblRoZSBkZWZhdWx0IHZhbHVlIHdoZW4gdGhpcyBhdHRyaWJ1dGUgaXMgbm90IHNwZWNpZmllZCBpcyBgbGVmdGAuXG5cbioqTm90ZToqKiBEbyBub3QgdXNlIHRoaXMgYXR0cmlidXRlIGFzIGl0IGlzIG9ic29sZXRlIGluIHRoZSBsYXRlc3Qgc3RhbmRhcmQuXG5cbiogICBUbyBhY2hpZXZlIHRoZSBzYW1lIGVmZmVjdCBhcyB0aGUgYGxlZnRgLCBgY2VudGVyYCwgYHJpZ2h0YCBvciBganVzdGlmeWAgdmFsdWVzLCBhcHBseSB0aGUgQ1NTIFtgdGV4dC1hbGlnbmBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0NTUy90ZXh0LWFsaWduICJUaGUgdGV4dC1hbGlnbiBDU1MgcHJvcGVydHkgc2V0cyB0aGUgaG9yaXpvbnRhbCBhbGlnbm1lbnQgb2YgYW4gaW5saW5lIG9yIHRhYmxlLWNlbGwgYm94LiBUaGlzIG1lYW5zIGl0IHdvcmtzIGxpa2UgdmVydGljYWwtYWxpZ24gYnV0IGluIHRoZSBob3Jpem9udGFsIGRpcmVjdGlvbi4iKSBwcm9wZXJ0eSB0byB0aGUgZWxlbWVudC5cbiogICBUbyBhY2hpZXZlIHRoZSBzYW1lIGVmZmVjdCBhcyB0aGUgYGNoYXJgIHZhbHVlLCBnaXZlIHRoZSBbYHRleHQtYWxpZ25gXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9DU1MvdGV4dC1hbGlnbiAiVGhlIHRleHQtYWxpZ24gQ1NTIHByb3BlcnR5IHNldHMgdGhlIGhvcml6b250YWwgYWxpZ25tZW50IG9mIGFuIGlubGluZSBvciB0YWJsZS1jZWxsIGJveC4gVGhpcyBtZWFucyBpdCB3b3JrcyBsaWtlIHZlcnRpY2FsLWFsaWduIGJ1dCBpbiB0aGUgaG9yaXpvbnRhbCBkaXJlY3Rpb24uIikgcHJvcGVydHkgdGhlIHNhbWUgdmFsdWUgeW91IHdvdWxkIHVzZSBmb3IgdGhlIFtgY2hhcmBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC90aCNhdHRyLWNoYXIpLiBVbmltcGxlbWVudGVkIGluIENTUzMuJ30se25hbWU6ImF4aXMiLGRlc2NyaXB0aW9uOiJUaGlzIGF0dHJpYnV0ZSBjb250YWlucyBhIGxpc3Qgb2Ygc3BhY2Utc2VwYXJhdGVkIHN0cmluZ3MuIEVhY2ggc3RyaW5nIGlzIHRoZSBgaWRgIG9mIGEgZ3JvdXAgb2YgY2VsbHMgdGhhdCB0aGlzIGhlYWRlciBhcHBsaWVzIHRvLlxuXG4qKk5vdGU6KiogRG8gbm90IHVzZSB0aGlzIGF0dHJpYnV0ZSBhcyBpdCBpcyBvYnNvbGV0ZSBpbiB0aGUgbGF0ZXN0IHN0YW5kYXJkOiB1c2UgdGhlIFtgc2NvcGVgXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvdGgjYXR0ci1zY29wZSkgYXR0cmlidXRlIGluc3RlYWQuIn0se25hbWU6ImJnY29sb3IiLGRlc2NyaXB0aW9uOmBUaGlzIGF0dHJpYnV0ZSBkZWZpbmVzIHRoZSBiYWNrZ3JvdW5kIGNvbG9yIG9mIGVhY2ggY2VsbCBpbiBhIGNvbHVtbi4gSXQgY29uc2lzdHMgb2YgYSA2LWRpZ2l0IGhleGFkZWNpbWFsIGNvZGUgYXMgZGVmaW5lZCBpbiBbc1JHQl0oaHR0cHM6Ly93d3cudzMub3JnL0dyYXBoaWNzL0NvbG9yL3NSR0IpIGFuZCBpcyBwcmVmaXhlZCBieSAnIycuIFRoaXMgYXR0cmlidXRlIG1heSBiZSB1c2VkIHdpdGggb25lIG9mIHNpeHRlZW4gcHJlZGVmaW5lZCBjb2xvciBzdHJpbmdzOgoKwqAKClxgYmxhY2tcYCA9ICIjMDAwMDAwIgoKwqAKClxgZ3JlZW5cYCA9ICIjMDA4MDAwIgoKwqAKClxgc2lsdmVyXGAgPSAiI0MwQzBDMCIKCsKgCgpcYGxpbWVcYCA9ICIjMDBGRjAwIgoKwqAKClxgZ3JheVxgID0gIiM4MDgwODAiCgrCoAoKXGBvbGl2ZVxgID0gIiM4MDgwMDAiCgrCoAoKXGB3aGl0ZVxgID0gIiNGRkZGRkYiCgrCoAoKXGB5ZWxsb3dcYCA9ICIjRkZGRjAwIgoKwqAKClxgbWFyb29uXGAgPSAiIzgwMDAwMCIKCsKgCgpcYG5hdnlcYCA9ICIjMDAwMDgwIgoKwqAKClxgcmVkXGAgPSAiI0ZGMDAwMCIKCsKgCgpcYGJsdWVcYCA9ICIjMDAwMEZGIgoKwqAKClxgcHVycGxlXGAgPSAiIzgwMDA4MCIKCsKgCgpcYHRlYWxcYCA9ICIjMDA4MDgwIgoKwqAKClxgZnVjaHNpYVxgID0gIiNGRjAwRkYiCgrCoAoKXGBhcXVhXGAgPSAiIzAwRkZGRiIKCioqTm90ZToqKiBEbyBub3QgdXNlIHRoaXMgYXR0cmlidXRlLCBhcyBpdCBpcyBub24tc3RhbmRhcmQgYW5kIG9ubHkgaW1wbGVtZW50ZWQgaW4gc29tZSB2ZXJzaW9ucyBvZiBNaWNyb3NvZnQgSW50ZXJuZXQgRXhwbG9yZXI6IFRoZSBbXGA8dGg+XGBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC90aCAiVGhlIEhUTUwgPHRoPiBlbGVtZW50IGRlZmluZXMgYSBjZWxsIGFzIGhlYWRlciBvZiBhIGdyb3VwIG9mIHRhYmxlIGNlbGxzLiBUaGUgZXhhY3QgbmF0dXJlIG9mIHRoaXMgZ3JvdXAgaXMgZGVmaW5lZCBieSB0aGUgc2NvcGUgYW5kIGhlYWRlcnMgYXR0cmlidXRlcy4iKSBlbGVtZW50IHNob3VsZCBiZSBzdHlsZWQgdXNpbmcgW0NTU10oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQ1NTKS4gVG8gY3JlYXRlIGEgc2ltaWxhciBlZmZlY3QgdXNlIHRoZSBbXGBiYWNrZ3JvdW5kLWNvbG9yXGBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0NTUy9iYWNrZ3JvdW5kLWNvbG9yICJUaGUgYmFja2dyb3VuZC1jb2xvciBDU1MgcHJvcGVydHkgc2V0cyB0aGUgYmFja2dyb3VuZCBjb2xvciBvZiBhbiBlbGVtZW50LiIpIHByb3BlcnR5IGluIFtDU1NdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0NTUykgaW5zdGVhZC5gfV0scmVmZXJlbmNlczpbe25hbWU6Ik1ETiBSZWZlcmVuY2UiLHVybDoiaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvSFRNTC9FbGVtZW50L3RoIn1dfSx7bmFtZToiZm9ybSIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiVGhlIGZvcm0gZWxlbWVudCByZXByZXNlbnRzIGEgY29sbGVjdGlvbiBvZiBmb3JtLWFzc29jaWF0ZWQgZWxlbWVudHMsIHNvbWUgb2Ygd2hpY2ggY2FuIHJlcHJlc2VudCBlZGl0YWJsZSB2YWx1ZXMgdGhhdCBjYW4gYmUgc3VibWl0dGVkIHRvIGEgc2VydmVyIGZvciBwcm9jZXNzaW5nLiJ9LGF0dHJpYnV0ZXM6W3tuYW1lOiJhY2NlcHQtY2hhcnNldCIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZTonQSBzcGFjZS0gb3IgY29tbWEtZGVsaW1pdGVkIGxpc3Qgb2YgY2hhcmFjdGVyIGVuY29kaW5ncyB0aGF0IHRoZSBzZXJ2ZXIgYWNjZXB0cy4gVGhlIGJyb3dzZXIgdXNlcyB0aGVtIGluIHRoZSBvcmRlciBpbiB3aGljaCB0aGV5IGFyZSBsaXN0ZWQuIFRoZSBkZWZhdWx0IHZhbHVlLCB0aGUgcmVzZXJ2ZWQgc3RyaW5nIGAiVU5LTk9XTiJgLCBpbmRpY2F0ZXMgdGhlIHNhbWUgZW5jb2RpbmcgYXMgdGhhdCBvZiB0aGUgZG9jdW1lbnQgY29udGFpbmluZyB0aGUgZm9ybSBlbGVtZW50LiAgXG5JbiBwcmV2aW91cyB2ZXJzaW9ucyBvZiBIVE1MLCB0aGUgZGlmZmVyZW50IGNoYXJhY3RlciBlbmNvZGluZ3MgY291bGQgYmUgZGVsaW1pdGVkIGJ5IHNwYWNlcyBvciBjb21tYXMuIEluIEhUTUw1LCBvbmx5IHNwYWNlcyBhcmUgYWxsb3dlZCBhcyBkZWxpbWl0ZXJzLid9fSx7bmFtZToiYWN0aW9uIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOidUaGUgVVJJIG9mIGEgcHJvZ3JhbSB0aGF0IHByb2Nlc3NlcyB0aGUgZm9ybSBpbmZvcm1hdGlvbi4gVGhpcyB2YWx1ZSBjYW4gYmUgb3ZlcnJpZGRlbiBieSBhIFtgZm9ybWFjdGlvbmBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9idXR0b24jYXR0ci1mb3JtYWN0aW9uKSBhdHRyaWJ1dGUgb24gYSBbYDxidXR0b24+YF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2J1dHRvbiAiVGhlIEhUTUwgPGJ1dHRvbj4gZWxlbWVudCByZXByZXNlbnRzIGEgY2xpY2thYmxlIGJ1dHRvbiwgd2hpY2ggY2FuIGJlIHVzZWQgaW4gZm9ybXMgb3IgYW55d2hlcmUgaW4gYSBkb2N1bWVudCB0aGF0IG5lZWRzIHNpbXBsZSwgc3RhbmRhcmQgYnV0dG9uIGZ1bmN0aW9uYWxpdHkuIikgb3IgW2A8aW5wdXQ+YF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2lucHV0ICJUaGUgSFRNTCA8aW5wdXQ+IGVsZW1lbnQgaXMgdXNlZCB0byBjcmVhdGUgaW50ZXJhY3RpdmUgY29udHJvbHMgZm9yIHdlYi1iYXNlZCBmb3JtcyBpbiBvcmRlciB0byBhY2NlcHQgZGF0YSBmcm9tIHRoZSB1c2VyOyBhIHdpZGUgdmFyaWV0eSBvZiB0eXBlcyBvZiBpbnB1dCBkYXRhIGFuZCBjb250cm9sIHdpZGdldHMgYXJlIGF2YWlsYWJsZSwgZGVwZW5kaW5nIG9uIHRoZSBkZXZpY2UgYW5kIHVzZXIgYWdlbnQuIikgZWxlbWVudC4nfX0se25hbWU6ImF1dG9jb21wbGV0ZSIsdmFsdWVTZXQ6Im8iLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IkluZGljYXRlcyB3aGV0aGVyIGlucHV0IGVsZW1lbnRzIGNhbiBieSBkZWZhdWx0IGhhdmUgdGhlaXIgdmFsdWVzIGF1dG9tYXRpY2FsbHkgY29tcGxldGVkIGJ5IHRoZSBicm93c2VyLiBUaGlzIHNldHRpbmcgY2FuIGJlIG92ZXJyaWRkZW4gYnkgYW4gYGF1dG9jb21wbGV0ZWAgYXR0cmlidXRlIG9uIGFuIGVsZW1lbnQgYmVsb25naW5nIHRvIHRoZSBmb3JtLiBQb3NzaWJsZSB2YWx1ZXMgYXJlOlxuXG4qICAgYG9mZmA6IFRoZSB1c2VyIG11c3QgZXhwbGljaXRseSBlbnRlciBhIHZhbHVlIGludG8gZWFjaCBmaWVsZCBmb3IgZXZlcnkgdXNlLCBvciB0aGUgZG9jdW1lbnQgcHJvdmlkZXMgaXRzIG93biBhdXRvLWNvbXBsZXRpb24gbWV0aG9kOyB0aGUgYnJvd3NlciBkb2VzIG5vdCBhdXRvbWF0aWNhbGx5IGNvbXBsZXRlIGVudHJpZXMuXG4qICAgYG9uYDogVGhlIGJyb3dzZXIgY2FuIGF1dG9tYXRpY2FsbHkgY29tcGxldGUgdmFsdWVzIGJhc2VkIG9uIHZhbHVlcyB0aGF0IHRoZSB1c2VyIGhhcyBwcmV2aW91c2x5IGVudGVyZWQgaW4gdGhlIGZvcm0uXG5cbkZvciBtb3N0IG1vZGVybiBicm93c2VycyAoaW5jbHVkaW5nIEZpcmVmb3ggMzgrLCBHb29nbGUgQ2hyb21lIDM0KywgSUUgMTErKSBzZXR0aW5nIHRoZSBhdXRvY29tcGxldGUgYXR0cmlidXRlIHdpbGwgbm90IHByZXZlbnQgYSBicm93c2VyJ3MgcGFzc3dvcmQgbWFuYWdlciBmcm9tIGFza2luZyB0aGUgdXNlciBpZiB0aGV5IHdhbnQgdG8gc3RvcmUgbG9naW4gZmllbGRzICh1c2VybmFtZSBhbmQgcGFzc3dvcmQpLCBpZiB0aGUgdXNlciBwZXJtaXRzIHRoZSBzdG9yYWdlIHRoZSBicm93c2VyIHdpbGwgYXV0b2ZpbGwgdGhlIGxvZ2luIHRoZSBuZXh0IHRpbWUgdGhlIHVzZXIgdmlzaXRzIHRoZSBwYWdlLiBTZWUgW1RoZSBhdXRvY29tcGxldGUgYXR0cmlidXRlIGFuZCBsb2dpbiBmaWVsZHNdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL1NlY3VyaXR5L1NlY3VyaW5nX3lvdXJfc2l0ZS9UdXJuaW5nX29mZl9mb3JtX2F1dG9jb21wbGV0aW9uI1RoZV9hdXRvY29tcGxldGVfYXR0cmlidXRlX2FuZF9sb2dpbl9maWVsZHMpLlxuKipOb3RlOioqIElmIHlvdSBzZXQgYGF1dG9jb21wbGV0ZWAgdG8gYG9mZmAgaW4gYSBmb3JtIGJlY2F1c2UgdGhlIGRvY3VtZW50IHByb3ZpZGVzIGl0cyBvd24gYXV0by1jb21wbGV0aW9uLCB0aGVuIHlvdSBzaG91bGQgYWxzbyBzZXQgYGF1dG9jb21wbGV0ZWAgdG8gYG9mZmAgZm9yIGVhY2ggb2YgdGhlIGZvcm0ncyBgaW5wdXRgIGVsZW1lbnRzIHRoYXQgdGhlIGRvY3VtZW50IGNhbiBhdXRvLWNvbXBsZXRlLiBGb3IgZGV0YWlscywgc2VlIHRoZSBub3RlIHJlZ2FyZGluZyBHb29nbGUgQ2hyb21lIGluIHRoZSBbQnJvd3NlciBDb21wYXRpYmlsaXR5IGNoYXJ0XSgjY29tcGF0Q2hhcnQpLiJ9fSx7bmFtZToiZW5jdHlwZSIsdmFsdWVTZXQ6ImV0IixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOidXaGVuIHRoZSB2YWx1ZSBvZiB0aGUgYG1ldGhvZGAgYXR0cmlidXRlIGlzIGBwb3N0YCwgZW5jdHlwZSBpcyB0aGUgW01JTUUgdHlwZV0oaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvTWltZV90eXBlKSBvZiBjb250ZW50IHRoYXQgaXMgdXNlZCB0byBzdWJtaXQgdGhlIGZvcm0gdG8gdGhlIHNlcnZlci4gUG9zc2libGUgdmFsdWVzIGFyZTpcblxuKiAgIGBhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWRgOiBUaGUgZGVmYXVsdCB2YWx1ZSBpZiB0aGUgYXR0cmlidXRlIGlzIG5vdCBzcGVjaWZpZWQuXG4qICAgYG11bHRpcGFydC9mb3JtLWRhdGFgOiBUaGUgdmFsdWUgdXNlZCBmb3IgYW4gW2A8aW5wdXQ+YF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2lucHV0ICJUaGUgSFRNTCA8aW5wdXQ+IGVsZW1lbnQgaXMgdXNlZCB0byBjcmVhdGUgaW50ZXJhY3RpdmUgY29udHJvbHMgZm9yIHdlYi1iYXNlZCBmb3JtcyBpbiBvcmRlciB0byBhY2NlcHQgZGF0YSBmcm9tIHRoZSB1c2VyOyBhIHdpZGUgdmFyaWV0eSBvZiB0eXBlcyBvZiBpbnB1dCBkYXRhIGFuZCBjb250cm9sIHdpZGdldHMgYXJlIGF2YWlsYWJsZSwgZGVwZW5kaW5nIG9uIHRoZSBkZXZpY2UgYW5kIHVzZXIgYWdlbnQuIikgZWxlbWVudCB3aXRoIHRoZSBgdHlwZWAgYXR0cmlidXRlIHNldCB0byAiZmlsZSIuXG4qICAgYHRleHQvcGxhaW5gOiAoSFRNTDUpXG5cblRoaXMgdmFsdWUgY2FuIGJlIG92ZXJyaWRkZW4gYnkgYSBbYGZvcm1lbmN0eXBlYF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2J1dHRvbiNhdHRyLWZvcm1lbmN0eXBlKSBhdHRyaWJ1dGUgb24gYSBbYDxidXR0b24+YF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2J1dHRvbiAiVGhlIEhUTUwgPGJ1dHRvbj4gZWxlbWVudCByZXByZXNlbnRzIGEgY2xpY2thYmxlIGJ1dHRvbiwgd2hpY2ggY2FuIGJlIHVzZWQgaW4gZm9ybXMgb3IgYW55d2hlcmUgaW4gYSBkb2N1bWVudCB0aGF0IG5lZWRzIHNpbXBsZSwgc3RhbmRhcmQgYnV0dG9uIGZ1bmN0aW9uYWxpdHkuIikgb3IgW2A8aW5wdXQ+YF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2lucHV0ICJUaGUgSFRNTCA8aW5wdXQ+IGVsZW1lbnQgaXMgdXNlZCB0byBjcmVhdGUgaW50ZXJhY3RpdmUgY29udHJvbHMgZm9yIHdlYi1iYXNlZCBmb3JtcyBpbiBvcmRlciB0byBhY2NlcHQgZGF0YSBmcm9tIHRoZSB1c2VyOyBhIHdpZGUgdmFyaWV0eSBvZiB0eXBlcyBvZiBpbnB1dCBkYXRhIGFuZCBjb250cm9sIHdpZGdldHMgYXJlIGF2YWlsYWJsZSwgZGVwZW5kaW5nIG9uIHRoZSBkZXZpY2UgYW5kIHVzZXIgYWdlbnQuIikgZWxlbWVudC4nfX0se25hbWU6Im1ldGhvZCIsdmFsdWVTZXQ6Im0iLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6J1RoZSBbSFRUUF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRUUCkgbWV0aG9kIHRoYXQgdGhlIGJyb3dzZXIgdXNlcyB0byBzdWJtaXQgdGhlIGZvcm0uIFBvc3NpYmxlIHZhbHVlcyBhcmU6XG5cbiogICBgcG9zdGA6IENvcnJlc3BvbmRzIHRvIHRoZSBIVFRQIFtQT1NUIG1ldGhvZF0oaHR0cHM6Ly93d3cudzMub3JnL1Byb3RvY29scy9yZmMyNjE2L3JmYzI2MTYtc2VjOS5odG1sI3NlYzkuNSkgOyBmb3JtIGRhdGEgYXJlIGluY2x1ZGVkIGluIHRoZSBib2R5IG9mIHRoZSBmb3JtIGFuZCBzZW50IHRvIHRoZSBzZXJ2ZXIuXG4qICAgYGdldGA6IENvcnJlc3BvbmRzIHRvIHRoZSBIVFRQIFtHRVQgbWV0aG9kXShodHRwczovL3d3dy53My5vcmcvUHJvdG9jb2xzL3JmYzI2MTYvcmZjMjYxNi1zZWM5Lmh0bWwjc2VjOS4zKTsgZm9ybSBkYXRhIGFyZSBhcHBlbmRlZCB0byB0aGUgYGFjdGlvbmAgYXR0cmlidXRlIFVSSSB3aXRoIGEgXCc/XCcgYXMgc2VwYXJhdG9yLCBhbmQgdGhlIHJlc3VsdGluZyBVUkkgaXMgc2VudCB0byB0aGUgc2VydmVyLiBVc2UgdGhpcyBtZXRob2Qgd2hlbiB0aGUgZm9ybSBoYXMgbm8gc2lkZS1lZmZlY3RzIGFuZCBjb250YWlucyBvbmx5IEFTQ0lJIGNoYXJhY3RlcnMuXG4qICAgYGRpYWxvZ2A6IFVzZSB3aGVuIHRoZSBmb3JtIGlzIGluc2lkZSBhwqBbYDxkaWFsb2c+YF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2RpYWxvZyAiVGhlIEhUTUwgPGRpYWxvZz4gZWxlbWVudCByZXByZXNlbnRzIGEgZGlhbG9nIGJveCBvciBvdGhlciBpbnRlcmFjdGl2ZSBjb21wb25lbnQsIHN1Y2ggYXMgYW4gaW5zcGVjdG9yIG9yIHdpbmRvdy4iKSBlbGVtZW50IHRvIGNsb3NlIHRoZSBkaWFsb2cgd2hlbiBzdWJtaXR0ZWQuXG5cblRoaXMgdmFsdWUgY2FuIGJlIG92ZXJyaWRkZW4gYnkgYSBbYGZvcm1tZXRob2RgXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvYnV0dG9uI2F0dHItZm9ybW1ldGhvZCkgYXR0cmlidXRlIG9uIGEgW2A8YnV0dG9uPmBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9idXR0b24gIlRoZSBIVE1MIDxidXR0b24+IGVsZW1lbnQgcmVwcmVzZW50cyBhIGNsaWNrYWJsZSBidXR0b24sIHdoaWNoIGNhbiBiZSB1c2VkIGluIGZvcm1zIG9yIGFueXdoZXJlIGluIGEgZG9jdW1lbnQgdGhhdCBuZWVkcyBzaW1wbGUsIHN0YW5kYXJkIGJ1dHRvbiBmdW5jdGlvbmFsaXR5LiIpIG9yIFtgPGlucHV0PmBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9pbnB1dCAiVGhlIEhUTUwgPGlucHV0PiBlbGVtZW50IGlzIHVzZWQgdG8gY3JlYXRlIGludGVyYWN0aXZlIGNvbnRyb2xzIGZvciB3ZWItYmFzZWQgZm9ybXMgaW4gb3JkZXIgdG8gYWNjZXB0IGRhdGEgZnJvbSB0aGUgdXNlcjsgYSB3aWRlIHZhcmlldHkgb2YgdHlwZXMgb2YgaW5wdXQgZGF0YSBhbmQgY29udHJvbCB3aWRnZXRzIGFyZSBhdmFpbGFibGUsIGRlcGVuZGluZyBvbiB0aGUgZGV2aWNlIGFuZCB1c2VyIGFnZW50LiIpIGVsZW1lbnQuJ319LHtuYW1lOiJuYW1lIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJUaGUgbmFtZSBvZiB0aGUgZm9ybS4gSW4gSFRNTCA0LCBpdHMgdXNlIGlzIGRlcHJlY2F0ZWQgKGBpZGAgc2hvdWxkIGJlIHVzZWQgaW5zdGVhZCkuIEl0IG11c3QgYmUgdW5pcXVlIGFtb25nIHRoZSBmb3JtcyBpbiBhIGRvY3VtZW50IGFuZCBub3QganVzdCBhbiBlbXB0eSBzdHJpbmcgaW4gSFRNTCA1LiJ9fSx7bmFtZToibm92YWxpZGF0ZSIsdmFsdWVTZXQ6InYiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6J1RoaXMgQm9vbGVhbiBhdHRyaWJ1dGUgaW5kaWNhdGVzIHRoYXQgdGhlIGZvcm0gaXMgbm90IHRvIGJlIHZhbGlkYXRlZCB3aGVuIHN1Ym1pdHRlZC4gSWYgdGhpcyBhdHRyaWJ1dGUgaXMgbm90IHNwZWNpZmllZCAoYW5kIHRoZXJlZm9yZSB0aGUgZm9ybSBpcyB2YWxpZGF0ZWQpLCB0aGlzIGRlZmF1bHQgc2V0dGluZyBjYW4gYmUgb3ZlcnJpZGRlbiBieSBhIFtgZm9ybW5vdmFsaWRhdGVgXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvYnV0dG9uI2F0dHItZm9ybW5vdmFsaWRhdGUpIGF0dHJpYnV0ZSBvbiBhIFtgPGJ1dHRvbj5gXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvYnV0dG9uICJUaGUgSFRNTCA8YnV0dG9uPiBlbGVtZW50IHJlcHJlc2VudHMgYSBjbGlja2FibGUgYnV0dG9uLCB3aGljaCBjYW4gYmUgdXNlZCBpbiBmb3JtcyBvciBhbnl3aGVyZSBpbiBhIGRvY3VtZW50IHRoYXQgbmVlZHMgc2ltcGxlLCBzdGFuZGFyZCBidXR0b24gZnVuY3Rpb25hbGl0eS4iKSBvciBbYDxpbnB1dD5gXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvaW5wdXQgIlRoZSBIVE1MIDxpbnB1dD4gZWxlbWVudCBpcyB1c2VkIHRvIGNyZWF0ZSBpbnRlcmFjdGl2ZSBjb250cm9scyBmb3Igd2ViLWJhc2VkIGZvcm1zIGluIG9yZGVyIHRvIGFjY2VwdCBkYXRhIGZyb20gdGhlIHVzZXI7IGEgd2lkZSB2YXJpZXR5IG9mIHR5cGVzIG9mIGlucHV0IGRhdGEgYW5kIGNvbnRyb2wgd2lkZ2V0cyBhcmUgYXZhaWxhYmxlLCBkZXBlbmRpbmcgb24gdGhlIGRldmljZSBhbmQgdXNlciBhZ2VudC4iKSBlbGVtZW50IGJlbG9uZ2luZyB0byB0aGUgZm9ybS4nfX0se25hbWU6InRhcmdldCIsdmFsdWVTZXQ6InRhcmdldCIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZTonQSBuYW1lIG9yIGtleXdvcmQgaW5kaWNhdGluZyB3aGVyZSB0byBkaXNwbGF5IHRoZSByZXNwb25zZSB0aGF0IGlzIHJlY2VpdmVkIGFmdGVyIHN1Ym1pdHRpbmcgdGhlIGZvcm0uIEluIEhUTUwgNCwgdGhpcyBpcyB0aGUgbmFtZS9rZXl3b3JkIGZvciBhIGZyYW1lLiBJbiBIVE1MNSwgaXQgaXMgYSBuYW1lL2tleXdvcmQgZm9yIGEgX2Jyb3dzaW5nIGNvbnRleHRfIChmb3IgZXhhbXBsZSwgdGFiLCB3aW5kb3csIG9yIGlubGluZSBmcmFtZSkuIFRoZSBmb2xsb3dpbmcga2V5d29yZHMgaGF2ZSBzcGVjaWFsIG1lYW5pbmdzOlxuXG4qICAgYF9zZWxmYDogTG9hZCB0aGUgcmVzcG9uc2UgaW50byB0aGUgc2FtZSBIVE1MIDQgZnJhbWUgKG9yIEhUTUw1IGJyb3dzaW5nIGNvbnRleHQpIGFzIHRoZSBjdXJyZW50IG9uZS4gVGhpcyB2YWx1ZSBpcyB0aGUgZGVmYXVsdCBpZiB0aGUgYXR0cmlidXRlIGlzIG5vdCBzcGVjaWZpZWQuXG4qICAgYF9ibGFua2A6IExvYWQgdGhlIHJlc3BvbnNlIGludG8gYSBuZXcgdW5uYW1lZCBIVE1MIDQgd2luZG93IG9yIEhUTUw1IGJyb3dzaW5nIGNvbnRleHQuXG4qICAgYF9wYXJlbnRgOiBMb2FkIHRoZSByZXNwb25zZSBpbnRvIHRoZSBIVE1MIDQgZnJhbWVzZXQgcGFyZW50IG9mIHRoZSBjdXJyZW50IGZyYW1lLCBvciBIVE1MNSBwYXJlbnQgYnJvd3NpbmcgY29udGV4dCBvZiB0aGUgY3VycmVudCBvbmUuIElmIHRoZXJlIGlzIG5vIHBhcmVudCwgdGhpcyBvcHRpb24gYmVoYXZlcyB0aGUgc2FtZSB3YXkgYXMgYF9zZWxmYC5cbiogICBgX3RvcGA6IEhUTUwgNDogTG9hZCB0aGUgcmVzcG9uc2UgaW50byB0aGUgZnVsbCBvcmlnaW5hbCB3aW5kb3csIGFuZCBjYW5jZWwgYWxsIG90aGVyIGZyYW1lcy4gSFRNTDU6IExvYWQgdGhlIHJlc3BvbnNlIGludG8gdGhlIHRvcC1sZXZlbCBicm93c2luZyBjb250ZXh0IChpLmUuLCB0aGUgYnJvd3NpbmcgY29udGV4dCB0aGF0IGlzIGFuIGFuY2VzdG9yIG9mIHRoZSBjdXJyZW50IG9uZSwgYW5kIGhhcyBubyBwYXJlbnQpLiBJZiB0aGVyZSBpcyBubyBwYXJlbnQsIHRoaXMgb3B0aW9uIGJlaGF2ZXMgdGhlIHNhbWUgd2F5IGFzIGBfc2VsZmAuXG4qICAgX2lmcmFtZW5hbWVfOiBUaGUgcmVzcG9uc2UgaXMgZGlzcGxheWVkIGluIGEgbmFtZWQgW2A8aWZyYW1lPmBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9pZnJhbWUgIlRoZSBIVE1MIElubGluZSBGcmFtZSBlbGVtZW50ICg8aWZyYW1lPikgcmVwcmVzZW50cyBhIG5lc3RlZCBicm93c2luZyBjb250ZXh0LCBlbWJlZGRpbmcgYW5vdGhlciBIVE1MIHBhZ2UgaW50byB0aGUgY3VycmVudCBvbmUuIikuXG5cbkhUTUw1OiBUaGlzIHZhbHVlIGNhbiBiZSBvdmVycmlkZGVuIGJ5IGEgW2Bmb3JtdGFyZ2V0YF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2J1dHRvbiNhdHRyLWZvcm10YXJnZXQpIGF0dHJpYnV0ZSBvbiBhIFtgPGJ1dHRvbj5gXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvYnV0dG9uICJUaGUgSFRNTCA8YnV0dG9uPiBlbGVtZW50IHJlcHJlc2VudHMgYSBjbGlja2FibGUgYnV0dG9uLCB3aGljaCBjYW4gYmUgdXNlZCBpbiBmb3JtcyBvciBhbnl3aGVyZSBpbiBhIGRvY3VtZW50IHRoYXQgbmVlZHMgc2ltcGxlLCBzdGFuZGFyZCBidXR0b24gZnVuY3Rpb25hbGl0eS4iKSBvciBbYDxpbnB1dD5gXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvaW5wdXQgIlRoZSBIVE1MIDxpbnB1dD4gZWxlbWVudCBpcyB1c2VkIHRvIGNyZWF0ZSBpbnRlcmFjdGl2ZSBjb250cm9scyBmb3Igd2ViLWJhc2VkIGZvcm1zIGluIG9yZGVyIHRvIGFjY2VwdCBkYXRhIGZyb20gdGhlIHVzZXI7IGEgd2lkZSB2YXJpZXR5IG9mIHR5cGVzIG9mIGlucHV0IGRhdGEgYW5kIGNvbnRyb2wgd2lkZ2V0cyBhcmUgYXZhaWxhYmxlLCBkZXBlbmRpbmcgb24gdGhlIGRldmljZSBhbmQgdXNlciBhZ2VudC4iKSBlbGVtZW50Lid9fSx7bmFtZToiYWNjZXB0IixkZXNjcmlwdGlvbjonQSBjb21tYS1zZXBhcmF0ZWQgbGlzdCBvZiBjb250ZW50IHR5cGVzIHRoYXQgdGhlIHNlcnZlciBhY2NlcHRzLlxuXG4qKlVzYWdlIG5vdGU6KiogVGhpcyBhdHRyaWJ1dGUgaGFzIGJlZW4gcmVtb3ZlZCBpbiBIVE1MNSBhbmQgc2hvdWxkIG5vIGxvbmdlciBiZSB1c2VkLiBJbnN0ZWFkLCB1c2UgdGhlIFtgYWNjZXB0YF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2lucHV0I2F0dHItYWNjZXB0KSBhdHRyaWJ1dGUgb2YgdGhlIHNwZWNpZmljIFtgPGlucHV0PmBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9pbnB1dCAiVGhlIEhUTUwgPGlucHV0PiBlbGVtZW50IGlzIHVzZWQgdG8gY3JlYXRlIGludGVyYWN0aXZlIGNvbnRyb2xzIGZvciB3ZWItYmFzZWQgZm9ybXMgaW4gb3JkZXIgdG8gYWNjZXB0IGRhdGEgZnJvbSB0aGUgdXNlcjsgYSB3aWRlIHZhcmlldHkgb2YgdHlwZXMgb2YgaW5wdXQgZGF0YSBhbmQgY29udHJvbCB3aWRnZXRzIGFyZSBhdmFpbGFibGUsIGRlcGVuZGluZyBvbiB0aGUgZGV2aWNlIGFuZCB1c2VyIGFnZW50LiIpIGVsZW1lbnQuJ30se25hbWU6ImF1dG9jYXBpdGFsaXplIixkZXNjcmlwdGlvbjoiVGhpcyBpcyBhIG5vbnN0YW5kYXJkIGF0dHJpYnV0ZSB1c2VkIGJ5IGlPUyBTYWZhcmkgTW9iaWxlIHdoaWNoIGNvbnRyb2xzIHdoZXRoZXIgYW5kIGhvdyB0aGUgdGV4dCB2YWx1ZSBmb3IgdGV4dHVhbCBmb3JtIGNvbnRyb2wgZGVzY2VuZGFudHMgc2hvdWxkIGJlIGF1dG9tYXRpY2FsbHkgY2FwaXRhbGl6ZWQgYXMgaXQgaXMgZW50ZXJlZC9lZGl0ZWQgYnkgdGhlIHVzZXIuIElmIHRoZSBgYXV0b2NhcGl0YWxpemVgIGF0dHJpYnV0ZSBpcyBzcGVjaWZpZWQgb24gYW4gaW5kaXZpZHVhbCBmb3JtIGNvbnRyb2wgZGVzY2VuZGFudCwgaXQgdHJ1bXBzIHRoZSBmb3JtLXdpZGUgYGF1dG9jYXBpdGFsaXplYCBzZXR0aW5nLiBUaGUgbm9uLWRlcHJlY2F0ZWQgdmFsdWVzIGFyZSBhdmFpbGFibGUgaW4gaU9TIDUgYW5kIGxhdGVyLiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyBgc2VudGVuY2VzYC4gUG9zc2libGUgdmFsdWVzIGFyZTpcblxuKiAgIGBub25lYDogQ29tcGxldGVseSBkaXNhYmxlcyBhdXRvbWF0aWMgY2FwaXRhbGl6YXRpb25cbiogICBgc2VudGVuY2VzYDogQXV0b21hdGljYWxseSBjYXBpdGFsaXplIHRoZSBmaXJzdCBsZXR0ZXIgb2Ygc2VudGVuY2VzLlxuKiAgIGB3b3Jkc2A6IEF1dG9tYXRpY2FsbHkgY2FwaXRhbGl6ZSB0aGUgZmlyc3QgbGV0dGVyIG9mIHdvcmRzLlxuKiAgIGBjaGFyYWN0ZXJzYDogQXV0b21hdGljYWxseSBjYXBpdGFsaXplIGFsbCBjaGFyYWN0ZXJzLlxuKiAgIGBvbmA6IERlcHJlY2F0ZWQgc2luY2UgaU9TIDUuXG4qICAgYG9mZmA6IERlcHJlY2F0ZWQgc2luY2UgaU9TIDUuIn1dLHJlZmVyZW5jZXM6W3tuYW1lOiJNRE4gUmVmZXJlbmNlIix1cmw6Imh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9mb3JtIn1dfSx7bmFtZToibGFiZWwiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlRoZSBsYWJlbCBlbGVtZW50IHJlcHJlc2VudHMgYSBjYXB0aW9uIGluIGEgdXNlciBpbnRlcmZhY2UuIFRoZSBjYXB0aW9uIGNhbiBiZSBhc3NvY2lhdGVkIHdpdGggYSBzcGVjaWZpYyBmb3JtIGNvbnRyb2wsIGtub3duIGFzIHRoZSBsYWJlbCBlbGVtZW50J3MgbGFiZWxlZCBjb250cm9sLCBlaXRoZXIgdXNpbmcgdGhlIGZvciBhdHRyaWJ1dGUsIG9yIGJ5IHB1dHRpbmcgdGhlIGZvcm0gY29udHJvbCBpbnNpZGUgdGhlIGxhYmVsIGVsZW1lbnQgaXRzZWxmLiJ9LGF0dHJpYnV0ZXM6W3tuYW1lOiJmb3JtIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOidUaGUgW2A8Zm9ybT5gXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvZm9ybSAiVGhlIEhUTUwgPGZvcm0+IGVsZW1lbnQgcmVwcmVzZW50cyBhIGRvY3VtZW50IHNlY3Rpb24gdGhhdCBjb250YWlucyBpbnRlcmFjdGl2ZSBjb250cm9scyBmb3Igc3VibWl0dGluZyBpbmZvcm1hdGlvbiB0byBhIHdlYiBzZXJ2ZXIuIikgZWxlbWVudCB3aXRoIHdoaWNoIHRoZSBsYWJlbCBpcyBhc3NvY2lhdGVkIChpdHMgX2Zvcm0gb3duZXJfKS4gSWYgc3BlY2lmaWVkLCB0aGUgdmFsdWUgb2YgdGhlIGF0dHJpYnV0ZSBpcyB0aGUgYGlkYCBvZiBhIFtgPGZvcm0+YF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2Zvcm0gIlRoZSBIVE1MIDxmb3JtPiBlbGVtZW50IHJlcHJlc2VudHMgYSBkb2N1bWVudCBzZWN0aW9uIHRoYXQgY29udGFpbnMgaW50ZXJhY3RpdmUgY29udHJvbHMgZm9yIHN1Ym1pdHRpbmcgaW5mb3JtYXRpb24gdG8gYSB3ZWIgc2VydmVyLiIpIGVsZW1lbnQgaW4gdGhlIHNhbWUgZG9jdW1lbnQuIFRoaXMgbGV0cyB5b3UgcGxhY2UgbGFiZWwgZWxlbWVudHMgYW55d2hlcmUgd2l0aGluIGEgZG9jdW1lbnQsIG5vdCBqdXN0IGFzIGRlc2NlbmRhbnRzIG9mIHRoZWlyIGZvcm0gZWxlbWVudHMuJ319LHtuYW1lOiJmb3IiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlRoZSBbYGlkYF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9HbG9iYWxfYXR0cmlidXRlcyNhdHRyLWlkKSBvZiBhIFtsYWJlbGFibGVdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0d1aWRlL0hUTUwvQ29udGVudF9jYXRlZ29yaWVzI0Zvcm1fbGFiZWxhYmxlKSBmb3JtLXJlbGF0ZWQgZWxlbWVudCBpbiB0aGUgc2FtZSBkb2N1bWVudCBhcyB0aGUgYDxsYWJlbD5gIGVsZW1lbnQuIFRoZSBmaXJzdCBlbGVtZW50IGluIHRoZSBkb2N1bWVudCB3aXRoIGFuIGBpZGAgbWF0Y2hpbmcgdGhlIHZhbHVlIG9mIHRoZSBgZm9yYCBhdHRyaWJ1dGUgaXMgdGhlIF9sYWJlbGVkIGNvbnRyb2xfIGZvciB0aGlzIGxhYmVsIGVsZW1lbnQsIGlmIGl0IGlzIGEgbGFiZWxhYmxlIGVsZW1lbnQuIElmIGl0IGlzwqBub3QgbGFiZWxhYmxlIHRoZW4gdGhlIGBmb3JgIGF0dHJpYnV0ZSBoYXMgbm8gZWZmZWN0LiBJZiB0aGVyZSBhcmUgb3RoZXIgZWxlbWVudHMgd2hpY2ggYWxzbyBtYXRjaCB0aGUgYGlkYCB2YWx1ZSwgbGF0ZXIgaW4gdGhlIGRvY3VtZW50LCB0aGV5IGFyZSBub3QgY29uc2lkZXJlZC5cblxuKipOb3RlKio6IEEgYDxsYWJlbD5gIGVsZW1lbnQgY2FuIGhhdmUgYm90aCBhIGBmb3JgIGF0dHJpYnV0ZSBhbmQgYSBjb250YWluZWQgY29udHJvbCBlbGVtZW50LCBhcyBsb25nIGFzIHRoZSBgZm9yYCBhdHRyaWJ1dGUgcG9pbnRzIHRvIHRoZSBjb250YWluZWQgY29udHJvbCBlbGVtZW50LiJ9fV0scmVmZXJlbmNlczpbe25hbWU6Ik1ETiBSZWZlcmVuY2UiLHVybDoiaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2xhYmVsIn1dfSx7bmFtZToiaW5wdXQiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlRoZSBpbnB1dCBlbGVtZW50IHJlcHJlc2VudHMgYSB0eXBlZCBkYXRhIGZpZWxkLCB1c3VhbGx5IHdpdGggYSBmb3JtIGNvbnRyb2wgdG8gYWxsb3cgdGhlIHVzZXIgdG8gZWRpdCB0aGUgZGF0YS4ifSx2b2lkOiEwLGF0dHJpYnV0ZXM6W3tuYW1lOiJhY2NlcHQifSx7bmFtZToiYWx0In0se25hbWU6ImF1dG9jb21wbGV0ZSIsdmFsdWVTZXQ6ImlucHV0YXV0b2NvbXBsZXRlIn0se25hbWU6ImF1dG9mb2N1cyIsdmFsdWVTZXQ6InYifSx7bmFtZToiY2hlY2tlZCIsdmFsdWVTZXQ6InYifSx7bmFtZToiZGlybmFtZSJ9LHtuYW1lOiJkaXNhYmxlZCIsdmFsdWVTZXQ6InYifSx7bmFtZToiZm9ybSJ9LHtuYW1lOiJmb3JtYWN0aW9uIn0se25hbWU6ImZvcm1lbmN0eXBlIix2YWx1ZVNldDoiZXQifSx7bmFtZToiZm9ybW1ldGhvZCIsdmFsdWVTZXQ6ImZtIn0se25hbWU6ImZvcm1ub3ZhbGlkYXRlIix2YWx1ZVNldDoidiJ9LHtuYW1lOiJmb3JtdGFyZ2V0In0se25hbWU6ImhlaWdodCJ9LHtuYW1lOiJpbnB1dG1vZGUiLHZhbHVlU2V0OiJpbSJ9LHtuYW1lOiJsaXN0In0se25hbWU6Im1heCJ9LHtuYW1lOiJtYXhsZW5ndGgifSx7bmFtZToibWluIn0se25hbWU6Im1pbmxlbmd0aCJ9LHtuYW1lOiJtdWx0aXBsZSIsdmFsdWVTZXQ6InYifSx7bmFtZToibmFtZSJ9LHtuYW1lOiJwYXR0ZXJuIn0se25hbWU6InBsYWNlaG9sZGVyIn0se25hbWU6InJlYWRvbmx5Iix2YWx1ZVNldDoidiJ9LHtuYW1lOiJyZXF1aXJlZCIsdmFsdWVTZXQ6InYifSx7bmFtZToic2l6ZSJ9LHtuYW1lOiJzcmMifSx7bmFtZToic3RlcCJ9LHtuYW1lOiJ0eXBlIix2YWx1ZVNldDoidCJ9LHtuYW1lOiJ2YWx1ZSJ9LHtuYW1lOiJ3aWR0aCJ9XSxyZWZlcmVuY2VzOlt7bmFtZToiTUROIFJlZmVyZW5jZSIsdXJsOiJodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvaW5wdXQifV19LHtuYW1lOiJidXR0b24iLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlRoZSBidXR0b24gZWxlbWVudCByZXByZXNlbnRzIGEgYnV0dG9uIGxhYmVsZWQgYnkgaXRzIGNvbnRlbnRzLiJ9LGF0dHJpYnV0ZXM6W3tuYW1lOiJhdXRvZm9jdXMiLHZhbHVlU2V0OiJ2IixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJUaGlzIEJvb2xlYW4gYXR0cmlidXRlIGxldHMgeW91IHNwZWNpZnkgdGhhdCB0aGUgYnV0dG9uIHNob3VsZCBoYXZlIGlucHV0IGZvY3VzIHdoZW4gdGhlIHBhZ2UgbG9hZHMsIHVubGVzcyB0aGUgdXNlciBvdmVycmlkZXMgaXQsIGZvciBleGFtcGxlIGJ5IHR5cGluZyBpbiBhIGRpZmZlcmVudCBjb250cm9sLiBPbmx5IG9uZSBmb3JtLWFzc29jaWF0ZWQgZWxlbWVudCBpbiBhIGRvY3VtZW50IGNhbiBoYXZlIHRoaXMgYXR0cmlidXRlIHNwZWNpZmllZC4ifX0se25hbWU6ImRpc2FibGVkIix2YWx1ZVNldDoidiIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZTonVGhpcyBCb29sZWFuIGF0dHJpYnV0ZSBpbmRpY2F0ZXMgdGhhdCB0aGUgdXNlciBjYW5ub3QgaW50ZXJhY3Qgd2l0aCB0aGUgYnV0dG9uLiBJZiB0aGlzIGF0dHJpYnV0ZSBpcyBub3Qgc3BlY2lmaWVkLCB0aGUgYnV0dG9uIGluaGVyaXRzIGl0cyBzZXR0aW5nIGZyb20gdGhlIGNvbnRhaW5pbmcgZWxlbWVudCwgZm9yIGV4YW1wbGUgW2A8ZmllbGRzZXQ+YF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2ZpZWxkc2V0ICJUaGUgSFRNTCA8ZmllbGRzZXQ+IGVsZW1lbnQgaXMgdXNlZCB0byBncm91cCBzZXZlcmFsIGNvbnRyb2xzIGFzIHdlbGwgYXMgbGFiZWxzICg8bGFiZWw+KSB3aXRoaW4gYSB3ZWIgZm9ybS4iKTsgaWYgdGhlcmUgaXMgbm8gY29udGFpbmluZyBlbGVtZW50IHdpdGggdGhlICoqZGlzYWJsZWQqKiBhdHRyaWJ1dGUgc2V0LCB0aGVuIHRoZSBidXR0b24gaXMgZW5hYmxlZC5cblxuRmlyZWZveCB3aWxsLCB1bmxpa2Ugb3RoZXIgYnJvd3NlcnMsIGJ5IGRlZmF1bHQsIFtwZXJzaXN0IHRoZSBkeW5hbWljIGRpc2FibGVkIHN0YXRlXShodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy81OTg1ODM5L2J1Zy13aXRoLWZpcmVmb3gtZGlzYWJsZWQtYXR0cmlidXRlLW9mLWlucHV0LW5vdC1yZXNldHRpbmctd2hlbi1yZWZyZXNoaW5nKSBvZiBhIFtgPGJ1dHRvbj5gXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvYnV0dG9uICJUaGUgSFRNTCA8YnV0dG9uPiBlbGVtZW50IHJlcHJlc2VudHMgYSBjbGlja2FibGUgYnV0dG9uLCB3aGljaCBjYW4gYmUgdXNlZCBpbiBmb3JtcyBvciBhbnl3aGVyZSBpbiBhIGRvY3VtZW50IHRoYXQgbmVlZHMgc2ltcGxlLCBzdGFuZGFyZCBidXR0b24gZnVuY3Rpb25hbGl0eS4iKSBhY3Jvc3MgcGFnZSBsb2Fkcy4gVXNlIHRoZSBbYGF1dG9jb21wbGV0ZWBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9idXR0b24jYXR0ci1hdXRvY29tcGxldGUpIGF0dHJpYnV0ZSB0byBjb250cm9sIHRoaXMgZmVhdHVyZS4nfX0se25hbWU6ImZvcm0iLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6J1RoZSBmb3JtIGVsZW1lbnQgdGhhdCB0aGUgYnV0dG9uIGlzIGFzc29jaWF0ZWQgd2l0aCAoaXRzIF9mb3JtIG93bmVyXykuIFRoZSB2YWx1ZSBvZiB0aGUgYXR0cmlidXRlIG11c3QgYmUgdGhlICoqaWQqKiBhdHRyaWJ1dGUgb2YgYSBbYDxmb3JtPmBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9mb3JtICJUaGUgSFRNTCA8Zm9ybT4gZWxlbWVudCByZXByZXNlbnRzIGEgZG9jdW1lbnQgc2VjdGlvbiB0aGF0IGNvbnRhaW5zIGludGVyYWN0aXZlIGNvbnRyb2xzIGZvciBzdWJtaXR0aW5nIGluZm9ybWF0aW9uIHRvIGEgd2ViIHNlcnZlci4iKSBlbGVtZW50IGluIHRoZSBzYW1lIGRvY3VtZW50LiBJZiB0aGlzIGF0dHJpYnV0ZSBpcyBub3Qgc3BlY2lmaWVkLCB0aGUgYDxidXR0b24+YCBlbGVtZW50IHdpbGwgYmUgYXNzb2NpYXRlZCB0byBhbiBhbmNlc3RvciBbYDxmb3JtPmBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9mb3JtICJUaGUgSFRNTCA8Zm9ybT4gZWxlbWVudCByZXByZXNlbnRzIGEgZG9jdW1lbnQgc2VjdGlvbiB0aGF0IGNvbnRhaW5zIGludGVyYWN0aXZlIGNvbnRyb2xzIGZvciBzdWJtaXR0aW5nIGluZm9ybWF0aW9uIHRvIGEgd2ViIHNlcnZlci4iKSBlbGVtZW50LCBpZiBvbmUgZXhpc3RzLiBUaGlzIGF0dHJpYnV0ZSBlbmFibGVzIHlvdSB0byBhc3NvY2lhdGUgYDxidXR0b24+YCBlbGVtZW50cyB0byBbYDxmb3JtPmBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9mb3JtICJUaGUgSFRNTCA8Zm9ybT4gZWxlbWVudCByZXByZXNlbnRzIGEgZG9jdW1lbnQgc2VjdGlvbiB0aGF0IGNvbnRhaW5zIGludGVyYWN0aXZlIGNvbnRyb2xzIGZvciBzdWJtaXR0aW5nIGluZm9ybWF0aW9uIHRvIGEgd2ViIHNlcnZlci4iKSBlbGVtZW50cyBhbnl3aGVyZSB3aXRoaW4gYSBkb2N1bWVudCwgbm90IGp1c3QgYXMgZGVzY2VuZGFudHMgb2YgW2A8Zm9ybT5gXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvZm9ybSAiVGhlIEhUTUwgPGZvcm0+IGVsZW1lbnQgcmVwcmVzZW50cyBhIGRvY3VtZW50IHNlY3Rpb24gdGhhdCBjb250YWlucyBpbnRlcmFjdGl2ZSBjb250cm9scyBmb3Igc3VibWl0dGluZyBpbmZvcm1hdGlvbiB0byBhIHdlYiBzZXJ2ZXIuIikgZWxlbWVudHMuJ319LHtuYW1lOiJmb3JtYWN0aW9uIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJUaGUgVVJJIG9mIGEgcHJvZ3JhbSB0aGF0IHByb2Nlc3NlcyB0aGUgaW5mb3JtYXRpb24gc3VibWl0dGVkIGJ5IHRoZSBidXR0b24uIElmIHNwZWNpZmllZCwgaXQgb3ZlcnJpZGVzIHRoZSBbYGFjdGlvbmBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9mb3JtI2F0dHItYWN0aW9uKSBhdHRyaWJ1dGUgb2YgdGhlIGJ1dHRvbidzIGZvcm0gb3duZXIuIn19LHtuYW1lOiJmb3JtZW5jdHlwZSIsdmFsdWVTZXQ6ImV0IixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOidJZiB0aGUgYnV0dG9uIGlzIGEgc3VibWl0IGJ1dHRvbiwgdGhpcyBhdHRyaWJ1dGUgc3BlY2lmaWVzIHRoZSB0eXBlIG9mIGNvbnRlbnQgdGhhdCBpcyB1c2VkIHRvIHN1Ym1pdCB0aGUgZm9ybSB0byB0aGUgc2VydmVyLiBQb3NzaWJsZSB2YWx1ZXMgYXJlOlxuXG4qICAgYGFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZGA6IFRoZSBkZWZhdWx0IHZhbHVlIGlmIHRoZSBhdHRyaWJ1dGUgaXMgbm90IHNwZWNpZmllZC5cbiogICBgbXVsdGlwYXJ0L2Zvcm0tZGF0YWA6IFVzZSB0aGlzIHZhbHVlIGlmIHlvdSBhcmUgdXNpbmcgYW4gW2A8aW5wdXQ+YF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2lucHV0ICJUaGUgSFRNTCA8aW5wdXQ+IGVsZW1lbnQgaXMgdXNlZCB0byBjcmVhdGUgaW50ZXJhY3RpdmUgY29udHJvbHMgZm9yIHdlYi1iYXNlZCBmb3JtcyBpbiBvcmRlciB0byBhY2NlcHQgZGF0YSBmcm9tIHRoZSB1c2VyOyBhIHdpZGUgdmFyaWV0eSBvZiB0eXBlcyBvZiBpbnB1dCBkYXRhIGFuZCBjb250cm9sIHdpZGdldHMgYXJlIGF2YWlsYWJsZSwgZGVwZW5kaW5nIG9uIHRoZSBkZXZpY2UgYW5kIHVzZXIgYWdlbnQuIikgZWxlbWVudCB3aXRoIHRoZSBbYHR5cGVgXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvaW5wdXQjYXR0ci10eXBlKSBhdHRyaWJ1dGUgc2V0IHRvIGBmaWxlYC5cbiogICBgdGV4dC9wbGFpbmBcblxuSWYgdGhpcyBhdHRyaWJ1dGUgaXMgc3BlY2lmaWVkLCBpdCBvdmVycmlkZXMgdGhlIFtgZW5jdHlwZWBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9mb3JtI2F0dHItZW5jdHlwZSkgYXR0cmlidXRlIG9mIHRoZSBidXR0b25cJ3MgZm9ybSBvd25lci4nfX0se25hbWU6ImZvcm1tZXRob2QiLHZhbHVlU2V0OiJmbSIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiSWYgdGhlIGJ1dHRvbiBpcyBhIHN1Ym1pdCBidXR0b24sIHRoaXMgYXR0cmlidXRlIHNwZWNpZmllcyB0aGUgSFRUUCBtZXRob2QgdGhhdCB0aGUgYnJvd3NlciB1c2VzIHRvIHN1Ym1pdCB0aGUgZm9ybS4gUG9zc2libGUgdmFsdWVzIGFyZTpcblxuKiAgIGBwb3N0YDogVGhlIGRhdGEgZnJvbSB0aGUgZm9ybSBhcmUgaW5jbHVkZWQgaW4gdGhlIGJvZHkgb2YgdGhlIGZvcm0gYW5kIHNlbnQgdG8gdGhlIHNlcnZlci5cbiogICBgZ2V0YDogVGhlIGRhdGEgZnJvbSB0aGUgZm9ybSBhcmUgYXBwZW5kZWQgdG8gdGhlICoqZm9ybSoqIGF0dHJpYnV0ZSBVUkksIHdpdGggYSAnPycgYXMgYSBzZXBhcmF0b3IsIGFuZCB0aGUgcmVzdWx0aW5nIFVSSSBpcyBzZW50IHRvIHRoZSBzZXJ2ZXIuIFVzZSB0aGlzIG1ldGhvZCB3aGVuIHRoZSBmb3JtIGhhcyBubyBzaWRlLWVmZmVjdHMgYW5kIGNvbnRhaW5zIG9ubHkgQVNDSUkgY2hhcmFjdGVycy5cblxuSWYgc3BlY2lmaWVkLCB0aGlzIGF0dHJpYnV0ZSBvdmVycmlkZXMgdGhlIFtgbWV0aG9kYF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2Zvcm0jYXR0ci1tZXRob2QpIGF0dHJpYnV0ZSBvZiB0aGUgYnV0dG9uJ3MgZm9ybSBvd25lci4ifX0se25hbWU6ImZvcm1ub3ZhbGlkYXRlIix2YWx1ZVNldDoidiIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiSWYgdGhlIGJ1dHRvbiBpcyBhIHN1Ym1pdCBidXR0b24sIHRoaXMgQm9vbGVhbiBhdHRyaWJ1dGUgc3BlY2lmaWVzIHRoYXQgdGhlIGZvcm0gaXMgbm90IHRvIGJlIHZhbGlkYXRlZCB3aGVuIGl0IGlzIHN1Ym1pdHRlZC4gSWYgdGhpcyBhdHRyaWJ1dGUgaXMgc3BlY2lmaWVkLCBpdCBvdmVycmlkZXMgdGhlIFtgbm92YWxpZGF0ZWBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9mb3JtI2F0dHItbm92YWxpZGF0ZSkgYXR0cmlidXRlIG9mIHRoZSBidXR0b24ncyBmb3JtIG93bmVyLiJ9fSx7bmFtZToiZm9ybXRhcmdldCIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiSWYgdGhlIGJ1dHRvbiBpcyBhIHN1Ym1pdCBidXR0b24sIHRoaXMgYXR0cmlidXRlIGlzIGEgbmFtZSBvciBrZXl3b3JkIGluZGljYXRpbmcgd2hlcmUgdG8gZGlzcGxheSB0aGUgcmVzcG9uc2UgdGhhdCBpcyByZWNlaXZlZCBhZnRlciBzdWJtaXR0aW5nIHRoZSBmb3JtLiBUaGlzIGlzIGEgbmFtZSBvZiwgb3Iga2V5d29yZCBmb3IsIGEgX2Jyb3dzaW5nIGNvbnRleHRfIChmb3IgZXhhbXBsZSwgdGFiLCB3aW5kb3csIG9yIGlubGluZSBmcmFtZSkuIElmIHRoaXMgYXR0cmlidXRlIGlzIHNwZWNpZmllZCwgaXQgb3ZlcnJpZGVzIHRoZSBbYHRhcmdldGBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9mb3JtI2F0dHItdGFyZ2V0KSBhdHRyaWJ1dGUgb2YgdGhlIGJ1dHRvbidzIGZvcm0gb3duZXIuIFRoZSBmb2xsb3dpbmcga2V5d29yZHMgaGF2ZSBzcGVjaWFsIG1lYW5pbmdzOlxuXG4qICAgYF9zZWxmYDogTG9hZCB0aGUgcmVzcG9uc2UgaW50byB0aGUgc2FtZSBicm93c2luZyBjb250ZXh0IGFzIHRoZSBjdXJyZW50IG9uZS4gVGhpcyB2YWx1ZSBpcyB0aGUgZGVmYXVsdCBpZiB0aGUgYXR0cmlidXRlIGlzIG5vdCBzcGVjaWZpZWQuXG4qICAgYF9ibGFua2A6IExvYWQgdGhlIHJlc3BvbnNlIGludG8gYSBuZXcgdW5uYW1lZCBicm93c2luZyBjb250ZXh0LlxuKiAgIGBfcGFyZW50YDogTG9hZCB0aGUgcmVzcG9uc2UgaW50byB0aGUgcGFyZW50IGJyb3dzaW5nIGNvbnRleHQgb2YgdGhlIGN1cnJlbnQgb25lLiBJZiB0aGVyZSBpcyBubyBwYXJlbnQsIHRoaXMgb3B0aW9uIGJlaGF2ZXMgdGhlIHNhbWUgd2F5IGFzIGBfc2VsZmAuXG4qICAgYF90b3BgOiBMb2FkIHRoZSByZXNwb25zZSBpbnRvIHRoZSB0b3AtbGV2ZWwgYnJvd3NpbmcgY29udGV4dCAodGhhdCBpcywgdGhlIGJyb3dzaW5nIGNvbnRleHQgdGhhdCBpcyBhbiBhbmNlc3RvciBvZiB0aGUgY3VycmVudCBvbmUsIGFuZCBoYXMgbm8gcGFyZW50KS4gSWYgdGhlcmUgaXMgbm8gcGFyZW50LCB0aGlzIG9wdGlvbiBiZWhhdmVzIHRoZSBzYW1lIHdheSBhcyBgX3NlbGZgLiJ9fSx7bmFtZToibmFtZSIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiVGhlIG5hbWUgb2YgdGhlIGJ1dHRvbiwgd2hpY2ggaXMgc3VibWl0dGVkIHdpdGggdGhlIGZvcm0gZGF0YS4ifX0se25hbWU6InR5cGUiLHZhbHVlU2V0OiJidCIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiVGhlIHR5cGUgb2YgdGhlIGJ1dHRvbi4gUG9zc2libGUgdmFsdWVzIGFyZTpcblxuKiAgIGBzdWJtaXRgOiBUaGUgYnV0dG9uIHN1Ym1pdHMgdGhlIGZvcm0gZGF0YSB0byB0aGUgc2VydmVyLiBUaGlzIGlzIHRoZSBkZWZhdWx0IGlmIHRoZSBhdHRyaWJ1dGUgaXMgbm90IHNwZWNpZmllZCwgb3IgaWYgdGhlIGF0dHJpYnV0ZSBpcyBkeW5hbWljYWxseSBjaGFuZ2VkIHRvIGFuIGVtcHR5IG9yIGludmFsaWQgdmFsdWUuXG4qICAgYHJlc2V0YDogVGhlIGJ1dHRvbiByZXNldHMgYWxsIHRoZSBjb250cm9scyB0byB0aGVpciBpbml0aWFsIHZhbHVlcy5cbiogICBgYnV0dG9uYDogVGhlIGJ1dHRvbiBoYXMgbm8gZGVmYXVsdCBiZWhhdmlvci4gSXQgY2FuIGhhdmUgY2xpZW50LXNpZGUgc2NyaXB0cyBhc3NvY2lhdGVkIHdpdGggdGhlIGVsZW1lbnQncyBldmVudHMsIHdoaWNoIGFyZSB0cmlnZ2VyZWQgd2hlbiB0aGUgZXZlbnRzIG9jY3VyLiJ9fSx7bmFtZToidmFsdWUiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlRoZSBpbml0aWFsIHZhbHVlIG9mIHRoZSBidXR0b24uIEl0IGRlZmluZXMgdGhlIHZhbHVlIGFzc29jaWF0ZWQgd2l0aCB0aGUgYnV0dG9uIHdoaWNoIGlzIHN1Ym1pdHRlZCB3aXRoIHRoZSBmb3JtIGRhdGEuIFRoaXMgdmFsdWUgaXMgcGFzc2VkIHRvIHRoZSBzZXJ2ZXIgaW4gcGFyYW1zIHdoZW4gdGhlIGZvcm0gaXMgc3VibWl0dGVkLiJ9fSx7bmFtZToiYXV0b2NvbXBsZXRlIixkZXNjcmlwdGlvbjonVGhlIHVzZSBvZiB0aGlzIGF0dHJpYnV0ZSBvbiBhIFtgPGJ1dHRvbj5gXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvYnV0dG9uICJUaGUgSFRNTCA8YnV0dG9uPiBlbGVtZW50IHJlcHJlc2VudHMgYSBjbGlja2FibGUgYnV0dG9uLCB3aGljaCBjYW4gYmUgdXNlZCBpbiBmb3JtcyBvciBhbnl3aGVyZSBpbiBhIGRvY3VtZW50IHRoYXQgbmVlZHMgc2ltcGxlLCBzdGFuZGFyZCBidXR0b24gZnVuY3Rpb25hbGl0eS4iKSBpcyBub25zdGFuZGFyZCBhbmQgRmlyZWZveC1zcGVjaWZpYy4gQnkgZGVmYXVsdCwgdW5saWtlIG90aGVyIGJyb3dzZXJzLCBbRmlyZWZveCBwZXJzaXN0cyB0aGUgZHluYW1pYyBkaXNhYmxlZCBzdGF0ZV0oaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvNTk4NTgzOS9idWctd2l0aC1maXJlZm94LWRpc2FibGVkLWF0dHJpYnV0ZS1vZi1pbnB1dC1ub3QtcmVzZXR0aW5nLXdoZW4tcmVmcmVzaGluZykgb2YgYSBbYDxidXR0b24+YF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2J1dHRvbiAiVGhlIEhUTUwgPGJ1dHRvbj4gZWxlbWVudCByZXByZXNlbnRzIGEgY2xpY2thYmxlIGJ1dHRvbiwgd2hpY2ggY2FuIGJlIHVzZWQgaW4gZm9ybXMgb3IgYW55d2hlcmUgaW4gYSBkb2N1bWVudCB0aGF0IG5lZWRzIHNpbXBsZSwgc3RhbmRhcmQgYnV0dG9uIGZ1bmN0aW9uYWxpdHkuIikgYWNyb3NzIHBhZ2UgbG9hZHMuIFNldHRpbmcgdGhlIHZhbHVlIG9mIHRoaXMgYXR0cmlidXRlIHRvIGBvZmZgIChpLmUuIGBhdXRvY29tcGxldGU9Im9mZiJgKSBkaXNhYmxlcyB0aGlzIGZlYXR1cmUuIFNlZSBbYnVnwqA2NTQwNzJdKGh0dHBzOi8vYnVnemlsbGEubW96aWxsYS5vcmcvc2hvd19idWcuY2dpP2lkPTY1NDA3MiAiaWYgZGlzYWJsZWQgc3RhdGUgaXMgY2hhbmdlZCB3aXRoIGphdmFzY3JpcHQsIHRoZSBub3JtYWwgc3RhdGUgZG9lc25cJ3QgcmV0dXJuIGFmdGVyIHJlZnJlc2hpbmcgdGhlIHBhZ2UiKS4nfV0scmVmZXJlbmNlczpbe25hbWU6Ik1ETiBSZWZlcmVuY2UiLHVybDoiaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2J1dHRvbiJ9XX0se25hbWU6InNlbGVjdCIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiVGhlIHNlbGVjdCBlbGVtZW50IHJlcHJlc2VudHMgYSBjb250cm9sIGZvciBzZWxlY3RpbmcgYW1vbmdzdCBhIHNldCBvZiBvcHRpb25zLiJ9LGF0dHJpYnV0ZXM6W3tuYW1lOiJhdXRvY29tcGxldGUiLHZhbHVlU2V0OiJpbnB1dGF1dG9jb21wbGV0ZSIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZTonQSBbYERPTVN0cmluZ2BdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9ET01TdHJpbmcgIkRPTVN0cmluZyBpcyBhIFVURi0xNiBTdHJpbmcuIEFzIEphdmFTY3JpcHQgYWxyZWFkeSB1c2VzIHN1Y2ggc3RyaW5ncywgRE9NU3RyaW5nIGlzIG1hcHBlZCBkaXJlY3RseSB0byBhIFN0cmluZy4iKSBwcm92aWRpbmcgYSBoaW50IGZvciBhIFt1c2VyIGFnZW50XCdzXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL0dsb3NzYXJ5L3VzZXJfYWdlbnQgInVzZXIgYWdlbnRcJ3M6IEEgdXNlciBhZ2VudCBpcyBhIGNvbXB1dGVyIHByb2dyYW0gcmVwcmVzZW50aW5nIGEgcGVyc29uLCBmb3IgZXhhbXBsZSwgYSBicm93c2VyIGluIGEgV2ViIGNvbnRleHQuIikgYXV0b2NvbXBsZXRlIGZlYXR1cmUuIFNlZSBbVGhlIEhUTUwgYXV0b2NvbXBsZXRlIGF0dHJpYnV0ZV0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9BdHRyaWJ1dGVzL2F1dG9jb21wbGV0ZSkgZm9yIGEgY29tcGxldGUgbGlzdCBvZiB2YWx1ZXMgYW5kIGRldGFpbHMgb24gaG93IHRvIHVzZSBhdXRvY29tcGxldGUuJ319LHtuYW1lOiJhdXRvZm9jdXMiLHZhbHVlU2V0OiJ2IixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJUaGlzIEJvb2xlYW4gYXR0cmlidXRlIGxldHMgeW91IHNwZWNpZnkgdGhhdCBhIGZvcm0gY29udHJvbCBzaG91bGQgaGF2ZSBpbnB1dCBmb2N1cyB3aGVuIHRoZSBwYWdlIGxvYWRzLiBPbmx5IG9uZSBmb3JtIGVsZW1lbnQgaW4gYSBkb2N1bWVudCBjYW4gaGF2ZSB0aGUgYGF1dG9mb2N1c2AgYXR0cmlidXRlLiJ9fSx7bmFtZToiZGlzYWJsZWQiLHZhbHVlU2V0OiJ2IixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJUaGlzIEJvb2xlYW4gYXR0cmlidXRlIGluZGljYXRlcyB0aGF0IHRoZSB1c2VyIGNhbm5vdCBpbnRlcmFjdCB3aXRoIHRoZSBjb250cm9sLiBJZiB0aGlzIGF0dHJpYnV0ZSBpcyBub3Qgc3BlY2lmaWVkLCB0aGUgY29udHJvbCBpbmhlcml0cyBpdHMgc2V0dGluZyBmcm9tIHRoZSBjb250YWluaW5nIGVsZW1lbnQsIGZvciBleGFtcGxlIGBmaWVsZHNldGA7IGlmIHRoZXJlIGlzIG5vIGNvbnRhaW5pbmcgZWxlbWVudCB3aXRoIHRoZSBgZGlzYWJsZWRgIGF0dHJpYnV0ZSBzZXQsIHRoZW4gdGhlIGNvbnRyb2wgaXMgZW5hYmxlZC4ifX0se25hbWU6ImZvcm0iLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6J1RoaXMgYXR0cmlidXRlIGxldHMgeW91IHNwZWNpZnkgdGhlIGZvcm0gZWxlbWVudCB0b8Kgd2hpY2jCoHRoZSBzZWxlY3QgZWxlbWVudCBpcyBhc3NvY2lhdGVkwqAodGhhdCBpcywgaXRzICJmb3JtIG93bmVyIikuIElmIHRoaXMgYXR0cmlidXRlIGlzIHNwZWNpZmllZCwgaXRzIHZhbHVlIG11c3QgYmUgdGhlIHNhbWUgYXMgdGhlIGBpZGAgb2YgYSBmb3JtIGVsZW1lbnQgaW4gdGhlIHNhbWUgZG9jdW1lbnQuIFRoaXMgZW5hYmxlcyB5b3UgdG8gcGxhY2Ugc2VsZWN0IGVsZW1lbnRzIGFueXdoZXJlIHdpdGhpbiBhIGRvY3VtZW50LCBub3QganVzdCBhcyBkZXNjZW5kYW50cyBvZiB0aGVpciBmb3JtIGVsZW1lbnRzLid9fSx7bmFtZToibXVsdGlwbGUiLHZhbHVlU2V0OiJ2IixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJUaGlzIEJvb2xlYW4gYXR0cmlidXRlIGluZGljYXRlcyB0aGF0IG11bHRpcGxlIG9wdGlvbnMgY2FuIGJlIHNlbGVjdGVkIGluIHRoZSBsaXN0LiBJZiBpdCBpcyBub3Qgc3BlY2lmaWVkLCB0aGVuIG9ubHkgb25lIG9wdGlvbiBjYW4gYmUgc2VsZWN0ZWQgYXQgYSB0aW1lLiBXaGVuIGBtdWx0aXBsZWAgaXMgc3BlY2lmaWVkLCBtb3N0IGJyb3dzZXJzIHdpbGwgc2hvdyBhIHNjcm9sbGluZyBsaXN0IGJveCBpbnN0ZWFkIG9mIGEgc2luZ2xlIGxpbmUgZHJvcGRvd24uIn19LHtuYW1lOiJuYW1lIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJUaGlzIGF0dHJpYnV0ZSBpcyB1c2VkIHRvIHNwZWNpZnkgdGhlIG5hbWUgb2YgdGhlIGNvbnRyb2wuIn19LHtuYW1lOiJyZXF1aXJlZCIsdmFsdWVTZXQ6InYiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IkEgQm9vbGVhbiBhdHRyaWJ1dGUgaW5kaWNhdGluZyB0aGF0IGFuIG9wdGlvbiB3aXRoIGEgbm9uLWVtcHR5IHN0cmluZyB2YWx1ZSBtdXN0IGJlIHNlbGVjdGVkLiJ9fSx7bmFtZToic2l6ZSIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiSWYgdGhlIGNvbnRyb2wgaXMgcHJlc2VudGVkIGFzIGEgc2Nyb2xsaW5nIGxpc3QgYm94IChlLmcuIHdoZW4gYG11bHRpcGxlYCBpcyBzcGVjaWZpZWQpLCB0aGlzIGF0dHJpYnV0ZSByZXByZXNlbnRzIHRoZSBudW1iZXIgb2Ygcm93cyBpbiB0aGUgbGlzdCB0aGF0IHNob3VsZCBiZSB2aXNpYmxlIGF0IG9uZSB0aW1lLiBCcm93c2VycyBhcmUgbm90IHJlcXVpcmVkIHRvIHByZXNlbnQgYSBzZWxlY3QgZWxlbWVudCBhcyBhIHNjcm9sbGVkIGxpc3QgYm94LiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyAwLlxuXG4qKk5vdGU6KiogQWNjb3JkaW5nIHRvIHRoZSBIVE1MNSBzcGVjaWZpY2F0aW9uLCB0aGUgZGVmYXVsdCB2YWx1ZSBmb3Igc2l6ZSBzaG91bGQgYmUgMTsgaG93ZXZlciwgaW4gcHJhY3RpY2UsIHRoaXMgaGFzIGJlZW4gZm91bmQgdG8gYnJlYWsgc29tZSB3ZWIgc2l0ZXMsIGFuZCBubyBvdGhlciBicm93c2VyIGN1cnJlbnRseSBkb2VzIHRoYXQsIHNvIE1vemlsbGEgaGFzIG9wdGVkIHRvIGNvbnRpbnVlIHRvIHJldHVybiAwIGZvciB0aGUgdGltZSBiZWluZyB3aXRoIEZpcmVmb3guIn19XSxyZWZlcmVuY2VzOlt7bmFtZToiTUROIFJlZmVyZW5jZSIsdXJsOiJodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvc2VsZWN0In1dfSx7bmFtZToiZGF0YWxpc3QiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlRoZSBkYXRhbGlzdCBlbGVtZW50IHJlcHJlc2VudHMgYSBzZXQgb2Ygb3B0aW9uIGVsZW1lbnRzIHRoYXQgcmVwcmVzZW50IHByZWRlZmluZWQgb3B0aW9ucyBmb3Igb3RoZXIgY29udHJvbHMuIEluIHRoZSByZW5kZXJpbmcsIHRoZSBkYXRhbGlzdCBlbGVtZW50IHJlcHJlc2VudHMgbm90aGluZyBhbmQgaXQsIGFsb25nIHdpdGggaXRzIGNoaWxkcmVuLCBzaG91bGQgYmUgaGlkZGVuLiJ9LGF0dHJpYnV0ZXM6W10scmVmZXJlbmNlczpbe25hbWU6Ik1ETiBSZWZlcmVuY2UiLHVybDoiaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2RhdGFsaXN0In1dfSx7bmFtZToib3B0Z3JvdXAiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlRoZSBvcHRncm91cCBlbGVtZW50IHJlcHJlc2VudHMgYSBncm91cCBvZiBvcHRpb24gZWxlbWVudHMgd2l0aCBhIGNvbW1vbiBsYWJlbC4ifSxhdHRyaWJ1dGVzOlt7bmFtZToiZGlzYWJsZWQiLHZhbHVlU2V0OiJ2IixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJJZiB0aGlzIEJvb2xlYW4gYXR0cmlidXRlIGlzIHNldCwgbm9uZSBvZiB0aGUgaXRlbXMgaW4gdGhpcyBvcHRpb24gZ3JvdXAgaXMgc2VsZWN0YWJsZS4gT2Z0ZW4gYnJvd3NlcnMgZ3JleSBvdXQgc3VjaCBjb250cm9sIGFuZCBpdCB3b24ndCByZWNlaXZlIGFueSBicm93c2luZyBldmVudHMsIGxpa2UgbW91c2UgY2xpY2tzIG9yIGZvY3VzLXJlbGF0ZWQgb25lcy4ifX0se25hbWU6ImxhYmVsIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJUaGUgbmFtZSBvZiB0aGUgZ3JvdXAgb2Ygb3B0aW9ucywgd2hpY2ggdGhlIGJyb3dzZXIgY2FuIHVzZSB3aGVuIGxhYmVsaW5nIHRoZSBvcHRpb25zIGluIHRoZSB1c2VyIGludGVyZmFjZS4gVGhpcyBhdHRyaWJ1dGUgaXMgbWFuZGF0b3J5IGlmIHRoaXMgZWxlbWVudCBpcyB1c2VkLiJ9fV0scmVmZXJlbmNlczpbe25hbWU6Ik1ETiBSZWZlcmVuY2UiLHVybDoiaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvSFRNTC9FbGVtZW50L29wdGdyb3VwIn1dfSx7bmFtZToib3B0aW9uIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJUaGUgb3B0aW9uIGVsZW1lbnQgcmVwcmVzZW50cyBhbiBvcHRpb24gaW4gYSBzZWxlY3QgZWxlbWVudCBvciBhcyBwYXJ0IG9mIGEgbGlzdCBvZiBzdWdnZXN0aW9ucyBpbiBhIGRhdGFsaXN0IGVsZW1lbnQuIn0sYXR0cmlidXRlczpbe25hbWU6ImRpc2FibGVkIix2YWx1ZVNldDoidiIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZTonSWYgdGhpcyBCb29sZWFuIGF0dHJpYnV0ZSBpcyBzZXQsIHRoaXMgb3B0aW9uIGlzIG5vdCBjaGVja2FibGUuIE9mdGVuIGJyb3dzZXJzIGdyZXkgb3V0IHN1Y2ggY29udHJvbCBhbmQgaXQgd29uXCd0IHJlY2VpdmUgYW55IGJyb3dzaW5nIGV2ZW50LCBsaWtlIG1vdXNlIGNsaWNrcyBvciBmb2N1cy1yZWxhdGVkIG9uZXMuIElmIHRoaXMgYXR0cmlidXRlIGlzIG5vdCBzZXQsIHRoZSBlbGVtZW50IGNhbiBzdGlsbCBiZSBkaXNhYmxlZCBpZiBvbmUgb2YgaXRzIGFuY2VzdG9ycyBpcyBhIGRpc2FibGVkIFtgPG9wdGdyb3VwPmBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9vcHRncm91cCAiVGhlIEhUTUwgPG9wdGdyb3VwPiBlbGVtZW50IGNyZWF0ZXMgYSBncm91cGluZyBvZiBvcHRpb25zIHdpdGhpbiBhIDxzZWxlY3Q+IGVsZW1lbnQuIikgZWxlbWVudC4nfX0se25hbWU6ImxhYmVsIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJUaGlzIGF0dHJpYnV0ZSBpcyB0ZXh0IGZvciB0aGUgbGFiZWwgaW5kaWNhdGluZyB0aGUgbWVhbmluZyBvZiB0aGUgb3B0aW9uLiBJZiB0aGUgYGxhYmVsYCBhdHRyaWJ1dGUgaXNuJ3QgZGVmaW5lZCwgaXRzIHZhbHVlIGlzIHRoYXQgb2YgdGhlIGVsZW1lbnQgdGV4dCBjb250ZW50LiJ9fSx7bmFtZToic2VsZWN0ZWQiLHZhbHVlU2V0OiJ2IixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOidJZiBwcmVzZW50LCB0aGlzIEJvb2xlYW4gYXR0cmlidXRlIGluZGljYXRlcyB0aGF0IHRoZSBvcHRpb24gaXMgaW5pdGlhbGx5IHNlbGVjdGVkLiBJZiB0aGUgYDxvcHRpb24+YCBlbGVtZW50IGlzIHRoZSBkZXNjZW5kYW50IG9mIGEgW2A8c2VsZWN0PmBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9zZWxlY3QgIlRoZSBIVE1MIDxzZWxlY3Q+IGVsZW1lbnQgcmVwcmVzZW50cyBhIGNvbnRyb2wgdGhhdCBwcm92aWRlcyBhIG1lbnUgb2Ygb3B0aW9ucyIpIGVsZW1lbnQgd2hvc2UgW2BtdWx0aXBsZWBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9zZWxlY3QjYXR0ci1tdWx0aXBsZSkgYXR0cmlidXRlIGlzIG5vdCBzZXQsIG9ubHkgb25lIHNpbmdsZSBgPG9wdGlvbj5gIG9mIHRoaXMgW2A8c2VsZWN0PmBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9zZWxlY3QgIlRoZSBIVE1MIDxzZWxlY3Q+IGVsZW1lbnQgcmVwcmVzZW50cyBhIGNvbnRyb2wgdGhhdCBwcm92aWRlcyBhIG1lbnUgb2Ygb3B0aW9ucyIpIGVsZW1lbnQgbWF5IGhhdmUgdGhlIGBzZWxlY3RlZGAgYXR0cmlidXRlLid9fSx7bmFtZToidmFsdWUiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlRoZSBjb250ZW50IG9mIHRoaXMgYXR0cmlidXRlIHJlcHJlc2VudHMgdGhlIHZhbHVlIHRvIGJlIHN1Ym1pdHRlZCB3aXRoIHRoZSBmb3JtLCBzaG91bGQgdGhpcyBvcHRpb24gYmUgc2VsZWN0ZWQuwqBJZiB0aGlzIGF0dHJpYnV0ZSBpcyBvbWl0dGVkLCB0aGUgdmFsdWUgaXMgdGFrZW4gZnJvbSB0aGUgdGV4dCBjb250ZW50IG9mIHRoZSBvcHRpb24gZWxlbWVudC4ifX1dLHJlZmVyZW5jZXM6W3tuYW1lOiJNRE4gUmVmZXJlbmNlIix1cmw6Imh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9vcHRpb24ifV19LHtuYW1lOiJ0ZXh0YXJlYSIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiVGhlIHRleHRhcmVhIGVsZW1lbnQgcmVwcmVzZW50cyBhIG11bHRpbGluZSBwbGFpbiB0ZXh0IGVkaXQgY29udHJvbCBmb3IgdGhlIGVsZW1lbnQncyByYXcgdmFsdWUuIFRoZSBjb250ZW50cyBvZiB0aGUgY29udHJvbCByZXByZXNlbnQgdGhlIGNvbnRyb2wncyBkZWZhdWx0IHZhbHVlLiJ9LGF0dHJpYnV0ZXM6W3tuYW1lOiJhdXRvY29tcGxldGUiLHZhbHVlU2V0OiJpbnB1dGF1dG9jb21wbGV0ZSIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZTonVGhpcyBhdHRyaWJ1dGUgaW5kaWNhdGVzIHdoZXRoZXIgdGhlIHZhbHVlIG9mIHRoZSBjb250cm9sIGNhbiBiZSBhdXRvbWF0aWNhbGx5IGNvbXBsZXRlZCBieSB0aGUgYnJvd3Nlci4gUG9zc2libGUgdmFsdWVzIGFyZTpcblxuKiAgIGBvZmZgOiBUaGUgdXNlciBtdXN0IGV4cGxpY2l0bHkgZW50ZXIgYSB2YWx1ZSBpbnRvIHRoaXMgZmllbGQgZm9yIGV2ZXJ5IHVzZSwgb3IgdGhlIGRvY3VtZW50IHByb3ZpZGVzIGl0cyBvd24gYXV0by1jb21wbGV0aW9uIG1ldGhvZDsgdGhlIGJyb3dzZXIgZG9lcyBub3QgYXV0b21hdGljYWxseSBjb21wbGV0ZSB0aGUgZW50cnkuXG4qICAgYG9uYDogVGhlIGJyb3dzZXIgY2FuIGF1dG9tYXRpY2FsbHkgY29tcGxldGUgdGhlIHZhbHVlIGJhc2VkIG9uIHZhbHVlcyB0aGF0IHRoZSB1c2VyIGhhcyBlbnRlcmVkIGR1cmluZyBwcmV2aW91cyB1c2VzLlxuXG5JZiB0aGUgYGF1dG9jb21wbGV0ZWAgYXR0cmlidXRlIGlzIG5vdCBzcGVjaWZpZWQgb24gYSBgPHRleHRhcmVhPmAgZWxlbWVudCwgdGhlbiB0aGUgYnJvd3NlciB1c2VzIHRoZSBgYXV0b2NvbXBsZXRlYCBhdHRyaWJ1dGUgdmFsdWUgb2YgdGhlIGA8dGV4dGFyZWE+YCBlbGVtZW50XCdzIGZvcm0gb3duZXIuIFRoZSBmb3JtIG93bmVyIGlzIGVpdGhlciB0aGUgW2A8Zm9ybT5gXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvZm9ybSAiVGhlIEhUTUwgPGZvcm0+IGVsZW1lbnQgcmVwcmVzZW50cyBhIGRvY3VtZW50IHNlY3Rpb24gdGhhdCBjb250YWlucyBpbnRlcmFjdGl2ZSBjb250cm9scyBmb3Igc3VibWl0dGluZyBpbmZvcm1hdGlvbiB0byBhIHdlYiBzZXJ2ZXIuIikgZWxlbWVudCB0aGF0IHRoaXMgYDx0ZXh0YXJlYT5gIGVsZW1lbnQgaXMgYSBkZXNjZW5kYW50IG9mIG9yIHRoZSBmb3JtIGVsZW1lbnQgd2hvc2UgYGlkYCBpcyBzcGVjaWZpZWQgYnkgdGhlIGBmb3JtYCBhdHRyaWJ1dGUgb2YgdGhlIGlucHV0IGVsZW1lbnQuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgdGhlIFtgYXV0b2NvbXBsZXRlYF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2Zvcm0jYXR0ci1hdXRvY29tcGxldGUpIGF0dHJpYnV0ZSBpbiBbYDxmb3JtPmBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9mb3JtICJUaGUgSFRNTCA8Zm9ybT4gZWxlbWVudCByZXByZXNlbnRzIGEgZG9jdW1lbnQgc2VjdGlvbiB0aGF0IGNvbnRhaW5zIGludGVyYWN0aXZlIGNvbnRyb2xzIGZvciBzdWJtaXR0aW5nIGluZm9ybWF0aW9uIHRvIGEgd2ViIHNlcnZlci4iKS4nfX0se25hbWU6ImF1dG9mb2N1cyIsdmFsdWVTZXQ6InYiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlRoaXMgQm9vbGVhbiBhdHRyaWJ1dGUgbGV0cyB5b3Ugc3BlY2lmeSB0aGF0IGEgZm9ybSBjb250cm9sIHNob3VsZCBoYXZlIGlucHV0IGZvY3VzIHdoZW4gdGhlIHBhZ2UgbG9hZHMuIE9ubHkgb25lIGZvcm0tYXNzb2NpYXRlZCBlbGVtZW50IGluIGEgZG9jdW1lbnQgY2FuIGhhdmUgdGhpcyBhdHRyaWJ1dGUgc3BlY2lmaWVkLiJ9fSx7bmFtZToiY29scyIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiVGhlIHZpc2libGUgd2lkdGggb2YgdGhlIHRleHQgY29udHJvbCwgaW4gYXZlcmFnZSBjaGFyYWN0ZXIgd2lkdGhzLiBJZiBpdCBpcyBzcGVjaWZpZWQsIGl0IG11c3QgYmUgYSBwb3NpdGl2ZSBpbnRlZ2VyLiBJZiBpdCBpcyBub3Qgc3BlY2lmaWVkLCB0aGUgZGVmYXVsdCB2YWx1ZSBpcyBgMjBgLiJ9fSx7bmFtZToiZGlybmFtZSJ9LHtuYW1lOiJkaXNhYmxlZCIsdmFsdWVTZXQ6InYiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6J1RoaXMgQm9vbGVhbiBhdHRyaWJ1dGUgaW5kaWNhdGVzIHRoYXQgdGhlIHVzZXIgY2Fubm90IGludGVyYWN0IHdpdGggdGhlIGNvbnRyb2wuIElmIHRoaXMgYXR0cmlidXRlIGlzIG5vdCBzcGVjaWZpZWQsIHRoZSBjb250cm9sIGluaGVyaXRzIGl0cyBzZXR0aW5nIGZyb20gdGhlIGNvbnRhaW5pbmcgZWxlbWVudCwgZm9yIGV4YW1wbGUgW2A8ZmllbGRzZXQ+YF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2ZpZWxkc2V0ICJUaGUgSFRNTCA8ZmllbGRzZXQ+IGVsZW1lbnQgaXMgdXNlZCB0byBncm91cCBzZXZlcmFsIGNvbnRyb2xzIGFzIHdlbGwgYXMgbGFiZWxzICg8bGFiZWw+KSB3aXRoaW4gYSB3ZWIgZm9ybS4iKTsgaWYgdGhlcmUgaXMgbm8gY29udGFpbmluZyBlbGVtZW50IHdoZW4gdGhlIGBkaXNhYmxlZGAgYXR0cmlidXRlIGlzIHNldCwgdGhlIGNvbnRyb2wgaXMgZW5hYmxlZC4nfX0se25hbWU6ImZvcm0iLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6J1RoZSBmb3JtIGVsZW1lbnQgdGhhdCB0aGUgYDx0ZXh0YXJlYT5gIGVsZW1lbnQgaXMgYXNzb2NpYXRlZCB3aXRoIChpdHMgImZvcm0gb3duZXIiKS4gVGhlIHZhbHVlIG9mIHRoZSBhdHRyaWJ1dGUgbXVzdCBiZSB0aGUgYGlkYCBvZiBhIGZvcm0gZWxlbWVudCBpbiB0aGUgc2FtZSBkb2N1bWVudC4gSWYgdGhpcyBhdHRyaWJ1dGUgaXMgbm90IHNwZWNpZmllZCwgdGhlIGA8dGV4dGFyZWE+YCBlbGVtZW50IG11c3QgYmUgYSBkZXNjZW5kYW50IG9mIGEgZm9ybSBlbGVtZW50LiBUaGlzIGF0dHJpYnV0ZSBlbmFibGVzIHlvdSB0byBwbGFjZSBgPHRleHRhcmVhPmAgZWxlbWVudHMgYW55d2hlcmUgd2l0aGluIGEgZG9jdW1lbnQsIG5vdCBqdXN0IGFzIGRlc2NlbmRhbnRzIG9mIGZvcm0gZWxlbWVudHMuJ319LHtuYW1lOiJpbnB1dG1vZGUiLHZhbHVlU2V0OiJpbSJ9LHtuYW1lOiJtYXhsZW5ndGgiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlRoZSBtYXhpbXVtIG51bWJlciBvZiBjaGFyYWN0ZXJzICh1bmljb2RlIGNvZGUgcG9pbnRzKSB0aGF0IHRoZSB1c2VyIGNhbiBlbnRlci4gSWYgdGhpcyB2YWx1ZSBpc24ndCBzcGVjaWZpZWQsIHRoZSB1c2VyIGNhbiBlbnRlciBhbiB1bmxpbWl0ZWQgbnVtYmVyIG9mIGNoYXJhY3RlcnMuIn19LHtuYW1lOiJtaW5sZW5ndGgiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlRoZSBtaW5pbXVtIG51bWJlciBvZiBjaGFyYWN0ZXJzICh1bmljb2RlIGNvZGUgcG9pbnRzKSByZXF1aXJlZCB0aGF0IHRoZSB1c2VyIHNob3VsZCBlbnRlci4ifX0se25hbWU6Im5hbWUiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlRoZSBuYW1lIG9mIHRoZSBjb250cm9sLiJ9fSx7bmFtZToicGxhY2Vob2xkZXIiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6J0EgaGludCB0byB0aGUgdXNlciBvZiB3aGF0IGNhbiBiZSBlbnRlcmVkIGluIHRoZSBjb250cm9sLiBDYXJyaWFnZSByZXR1cm5zIG9yIGxpbmUtZmVlZHMgd2l0aGluIHRoZSBwbGFjZWhvbGRlciB0ZXh0IG11c3QgYmUgdHJlYXRlZCBhcyBsaW5lIGJyZWFrcyB3aGVuIHJlbmRlcmluZyB0aGUgaGludC5cblxuKipOb3RlOioqIFBsYWNlaG9sZGVycyBzaG91bGQgb25seSBiZSB1c2VkIHRvIHNob3cgYW4gZXhhbXBsZSBvZiB0aGUgdHlwZSBvZiBkYXRhIHRoYXQgc2hvdWxkIGJlIGVudGVyZWQgaW50byBhIGZvcm07IHRoZXkgYXJlIF9ub3RfIGEgc3Vic3RpdHV0ZSBmb3IgYSBwcm9wZXIgW2A8bGFiZWw+YF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2xhYmVsICJUaGUgSFRNTCA8bGFiZWw+IGVsZW1lbnQgcmVwcmVzZW50cyBhIGNhcHRpb24gZm9yIGFuIGl0ZW0gaW4gYSB1c2VyIGludGVyZmFjZS4iKSBlbGVtZW50IHRpZWQgdG8gdGhlIGlucHV0LiBTZWUgW0xhYmVscyBhbmQgcGxhY2Vob2xkZXJzXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvaW5wdXQjTGFiZWxzX2FuZF9wbGFjZWhvbGRlcnMgIlRoZSBIVE1MIDxpbnB1dD4gZWxlbWVudCBpcyB1c2VkIHRvIGNyZWF0ZSBpbnRlcmFjdGl2ZSBjb250cm9scyBmb3Igd2ViLWJhc2VkIGZvcm1zIGluIG9yZGVyIHRvIGFjY2VwdCBkYXRhIGZyb20gdGhlIHVzZXI7IGEgd2lkZSB2YXJpZXR5IG9mIHR5cGVzIG9mIGlucHV0IGRhdGEgYW5kIGNvbnRyb2wgd2lkZ2V0cyBhcmUgYXZhaWxhYmxlLCBkZXBlbmRpbmcgb24gdGhlIGRldmljZSBhbmQgdXNlciBhZ2VudC4iKSBpbiBbPGlucHV0PjogVGhlIElucHV0IChGb3JtIElucHV0KSBlbGVtZW50XShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvaW5wdXQgIlRoZSBIVE1MIDxpbnB1dD4gZWxlbWVudCBpcyB1c2VkIHRvIGNyZWF0ZSBpbnRlcmFjdGl2ZSBjb250cm9scyBmb3Igd2ViLWJhc2VkIGZvcm1zIGluIG9yZGVyIHRvIGFjY2VwdCBkYXRhIGZyb20gdGhlIHVzZXI7IGEgd2lkZSB2YXJpZXR5IG9mIHR5cGVzIG9mIGlucHV0IGRhdGEgYW5kIGNvbnRyb2wgd2lkZ2V0cyBhcmUgYXZhaWxhYmxlLCBkZXBlbmRpbmcgb24gdGhlIGRldmljZSBhbmQgdXNlciBhZ2VudC4iKSBmb3IgYSBmdWxsIGV4cGxhbmF0aW9uLid9fSx7bmFtZToicmVhZG9ubHkiLHZhbHVlU2V0OiJ2IixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJUaGlzIEJvb2xlYW4gYXR0cmlidXRlIGluZGljYXRlcyB0aGF0IHRoZSB1c2VyIGNhbm5vdCBtb2RpZnkgdGhlIHZhbHVlIG9mIHRoZSBjb250cm9sLiBVbmxpa2UgdGhlIGBkaXNhYmxlZGAgYXR0cmlidXRlLCB0aGUgYHJlYWRvbmx5YCBhdHRyaWJ1dGUgZG9lcyBub3QgcHJldmVudCB0aGUgdXNlciBmcm9tIGNsaWNraW5nIG9yIHNlbGVjdGluZyBpbiB0aGUgY29udHJvbC4gVGhlIHZhbHVlIG9mIGEgcmVhZC1vbmx5IGNvbnRyb2wgaXMgc3RpbGwgc3VibWl0dGVkIHdpdGggdGhlIGZvcm0uIn19LHtuYW1lOiJyZXF1aXJlZCIsdmFsdWVTZXQ6InYiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlRoaXMgYXR0cmlidXRlIHNwZWNpZmllcyB0aGF0IHRoZSB1c2VyIG11c3QgZmlsbCBpbiBhIHZhbHVlIGJlZm9yZSBzdWJtaXR0aW5nIGEgZm9ybS4ifX0se25hbWU6InJvd3MiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlRoZSBudW1iZXIgb2YgdmlzaWJsZSB0ZXh0IGxpbmVzIGZvciB0aGUgY29udHJvbC4ifX0se25hbWU6IndyYXAiLHZhbHVlU2V0OiJ3IixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJJbmRpY2F0ZXMgaG93IHRoZSBjb250cm9sIHdyYXBzIHRleHQuIFBvc3NpYmxlIHZhbHVlcyBhcmU6XG5cbiogICBgaGFyZGA6IFRoZSBicm93c2VyIGF1dG9tYXRpY2FsbHkgaW5zZXJ0cyBsaW5lIGJyZWFrcyAoQ1IrTEYpIHNvIHRoYXQgZWFjaCBsaW5lIGhhcyBubyBtb3JlIHRoYW4gdGhlIHdpZHRoIG9mIHRoZSBjb250cm9sOyB0aGUgYGNvbHNgIGF0dHJpYnV0ZSBtdXN0IGFsc28gYmUgc3BlY2lmaWVkIGZvciB0aGlzIHRvIHRha2UgZWZmZWN0LlxuKiAgIGBzb2Z0YDogVGhlIGJyb3dzZXIgZW5zdXJlcyB0aGF0IGFsbCBsaW5lIGJyZWFrcyBpbiB0aGUgdmFsdWUgY29uc2lzdCBvZiBhIENSK0xGIHBhaXIsIGJ1dCBkb2VzIG5vdCBpbnNlcnQgYW55IGFkZGl0aW9uYWwgbGluZSBicmVha3MuXG4qICAgYG9mZmAgOiBMaWtlIGBzb2Z0YCBidXQgY2hhbmdlcyBhcHBlYXJhbmNlIHRvIGB3aGl0ZS1zcGFjZTogcHJlYCBzbyBsaW5lIHNlZ21lbnRzIGV4Y2VlZGluZyBgY29sc2AgYXJlIG5vdCB3cmFwcGVkIGFuZCB0aGUgYDx0ZXh0YXJlYT5gIGJlY29tZXMgaG9yaXpvbnRhbGx5IHNjcm9sbGFibGUuXG5cbklmIHRoaXMgYXR0cmlidXRlIGlzIG5vdCBzcGVjaWZpZWQsIGBzb2Z0YCBpcyBpdHMgZGVmYXVsdCB2YWx1ZS4ifX0se25hbWU6ImF1dG9jYXBpdGFsaXplIixkZXNjcmlwdGlvbjoiVGhpcyBpcyBhIG5vbi1zdGFuZGFyZCBhdHRyaWJ1dGUgc3VwcG9ydGVkIGJ5IFdlYktpdCBvbiBpT1MgKHRoZXJlZm9yZSBuZWFybHkgYWxsIGJyb3dzZXJzIHJ1bm5pbmcgb24gaU9TLCBpbmNsdWRpbmcgU2FmYXJpLCBGaXJlZm94LCBhbmQgQ2hyb21lKSwgd2hpY2ggY29udHJvbHMgd2hldGhlciBhbmQgaG93IHRoZSB0ZXh0IHZhbHVlIHNob3VsZCBiZSBhdXRvbWF0aWNhbGx5IGNhcGl0YWxpemVkIGFzIGl0IGlzIGVudGVyZWQvZWRpdGVkIGJ5IHRoZSB1c2VyLiBUaGUgbm9uLWRlcHJlY2F0ZWQgdmFsdWVzIGFyZSBhdmFpbGFibGUgaW4gaU9TIDUgYW5kIGxhdGVyLiBQb3NzaWJsZSB2YWx1ZXMgYXJlOlxuXG4qICAgYG5vbmVgOiBDb21wbGV0ZWx5IGRpc2FibGVzIGF1dG9tYXRpYyBjYXBpdGFsaXphdGlvbi5cbiogICBgc2VudGVuY2VzYDogQXV0b21hdGljYWxseSBjYXBpdGFsaXplIHRoZSBmaXJzdCBsZXR0ZXIgb2Ygc2VudGVuY2VzLlxuKiAgIGB3b3Jkc2A6IEF1dG9tYXRpY2FsbHkgY2FwaXRhbGl6ZSB0aGUgZmlyc3QgbGV0dGVyIG9mIHdvcmRzLlxuKiAgIGBjaGFyYWN0ZXJzYDogQXV0b21hdGljYWxseSBjYXBpdGFsaXplIGFsbCBjaGFyYWN0ZXJzLlxuKiAgIGBvbmA6IERlcHJlY2F0ZWQgc2luY2UgaU9TIDUuXG4qICAgYG9mZmA6IERlcHJlY2F0ZWQgc2luY2UgaU9TIDUuIn0se25hbWU6InNwZWxsY2hlY2siLGRlc2NyaXB0aW9uOiJTcGVjaWZpZXMgd2hldGhlciB0aGUgYDx0ZXh0YXJlYT5gIGlzIHN1YmplY3QgdG8gc3BlbGwgY2hlY2tpbmcgYnkgdGhlIHVuZGVybHlpbmcgYnJvd3Nlci9PUy4gdGhlIHZhbHVlIGNhbiBiZTpcblxuKiAgIGB0cnVlYDogSW5kaWNhdGVzIHRoYXQgdGhlIGVsZW1lbnQgbmVlZHMgdG8gaGF2ZSBpdHMgc3BlbGxpbmcgYW5kIGdyYW1tYXIgY2hlY2tlZC5cbiogICBgZGVmYXVsdGAgOiBJbmRpY2F0ZXMgdGhhdCB0aGUgZWxlbWVudCBpcyB0byBhY3QgYWNjb3JkaW5nIHRvIGEgZGVmYXVsdCBiZWhhdmlvciwgcG9zc2libHkgYmFzZWQgb24gdGhlIHBhcmVudCBlbGVtZW50J3Mgb3duIGBzcGVsbGNoZWNrYCB2YWx1ZS5cbiogICBgZmFsc2VgIDogSW5kaWNhdGVzIHRoYXQgdGhlIGVsZW1lbnQgc2hvdWxkIG5vdCBiZSBzcGVsbCBjaGVja2VkLiJ9XSxyZWZlcmVuY2VzOlt7bmFtZToiTUROIFJlZmVyZW5jZSIsdXJsOiJodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvdGV4dGFyZWEifV19LHtuYW1lOiJvdXRwdXQiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlRoZSBvdXRwdXQgZWxlbWVudCByZXByZXNlbnRzIHRoZSByZXN1bHQgb2YgYSBjYWxjdWxhdGlvbiBwZXJmb3JtZWQgYnkgdGhlIGFwcGxpY2F0aW9uLCBvciB0aGUgcmVzdWx0IG9mIGEgdXNlciBhY3Rpb24uIn0sYXR0cmlidXRlczpbe25hbWU6ImZvciIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiQSBzcGFjZS1zZXBhcmF0ZWQgbGlzdCBvZiBvdGhlciBlbGVtZW50c+KAmSBbYGlkYF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9HbG9iYWxfYXR0cmlidXRlcy9pZClzLCBpbmRpY2F0aW5nIHRoYXQgdGhvc2UgZWxlbWVudHMgY29udHJpYnV0ZWQgaW5wdXQgdmFsdWVzIHRvIChvciBvdGhlcndpc2UgYWZmZWN0ZWQpIHRoZSBjYWxjdWxhdGlvbi4ifX0se25hbWU6ImZvcm0iLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6J1RoZSBbZm9ybSBlbGVtZW50XShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvZm9ybSkgdGhhdCB0aGlzIGVsZW1lbnQgaXMgYXNzb2NpYXRlZCB3aXRoIChpdHMgImZvcm0gb3duZXIiKS4gVGhlIHZhbHVlIG9mIHRoZSBhdHRyaWJ1dGUgbXVzdCBiZSBhbiBgaWRgIG9mIGEgZm9ybSBlbGVtZW50IGluIHRoZSBzYW1lIGRvY3VtZW50LiBJZiB0aGlzIGF0dHJpYnV0ZSBpcyBub3Qgc3BlY2lmaWVkLCB0aGUgb3V0cHV0IGVsZW1lbnQgbXVzdCBiZSBhIGRlc2NlbmRhbnQgb2YgYSBmb3JtIGVsZW1lbnQuIFRoaXMgYXR0cmlidXRlIGVuYWJsZXMgeW91IHRvIHBsYWNlIG91dHB1dCBlbGVtZW50cyBhbnl3aGVyZSB3aXRoaW4gYSBkb2N1bWVudCwgbm90IGp1c3QgYXMgZGVzY2VuZGFudHMgb2YgdGhlaXIgZm9ybSBlbGVtZW50cy4nfX0se25hbWU6Im5hbWUiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6J1RoZSBuYW1lIG9mIHRoZSBlbGVtZW50LCBleHBvc2VkIGluIHRoZSBbYEhUTUxGb3JtRWxlbWVudGBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9IVE1MRm9ybUVsZW1lbnQgIlRoZSBIVE1MRm9ybUVsZW1lbnQgaW50ZXJmYWNlIHJlcHJlc2VudHMgYSA8Zm9ybT4gZWxlbWVudCBpbiB0aGUgRE9NOyBpdCBhbGxvd3MgYWNjZXNzIHRvIGFuZCBpbiBzb21lIGNhc2VzIG1vZGlmaWNhdGlvbiBvZiBhc3BlY3RzIG9mIHRoZSBmb3JtLCBhcyB3ZWxsIGFzIGFjY2VzcyB0byBpdHMgY29tcG9uZW50IGVsZW1lbnRzLiIpIEFQSS4nfX1dLHJlZmVyZW5jZXM6W3tuYW1lOiJNRE4gUmVmZXJlbmNlIix1cmw6Imh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9vdXRwdXQifV19LHtuYW1lOiJwcm9ncmVzcyIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiVGhlIHByb2dyZXNzIGVsZW1lbnQgcmVwcmVzZW50cyB0aGUgY29tcGxldGlvbiBwcm9ncmVzcyBvZiBhIHRhc2suIFRoZSBwcm9ncmVzcyBpcyBlaXRoZXIgaW5kZXRlcm1pbmF0ZSwgaW5kaWNhdGluZyB0aGF0IHByb2dyZXNzIGlzIGJlaW5nIG1hZGUgYnV0IHRoYXQgaXQgaXMgbm90IGNsZWFyIGhvdyBtdWNoIG1vcmUgd29yayByZW1haW5zIHRvIGJlIGRvbmUgYmVmb3JlIHRoZSB0YXNrIGlzIGNvbXBsZXRlIChlLmcuIGJlY2F1c2UgdGhlIHRhc2sgaXMgd2FpdGluZyBmb3IgYSByZW1vdGUgaG9zdCB0byByZXNwb25kKSwgb3IgdGhlIHByb2dyZXNzIGlzIGEgbnVtYmVyIGluIHRoZSByYW5nZSB6ZXJvIHRvIGEgbWF4aW11bSwgZ2l2aW5nIHRoZSBmcmFjdGlvbiBvZiB3b3JrIHRoYXQgaGFzIHNvIGZhciBiZWVuIGNvbXBsZXRlZC4ifSxhdHRyaWJ1dGVzOlt7bmFtZToidmFsdWUiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlRoaXMgYXR0cmlidXRlIHNwZWNpZmllcyBob3cgbXVjaCBvZiB0aGUgdGFzayB0aGF0IGhhcyBiZWVuIGNvbXBsZXRlZC4gSXQgbXVzdCBiZSBhIHZhbGlkIGZsb2F0aW5nIHBvaW50IG51bWJlciBiZXR3ZWVuIDAgYW5kIGBtYXhgLCBvciBiZXR3ZWVuIDAgYW5kIDEgaWYgYG1heGAgaXMgb21pdHRlZC4gSWYgdGhlcmUgaXMgbm8gYHZhbHVlYCBhdHRyaWJ1dGUsIHRoZSBwcm9ncmVzcyBiYXIgaXMgaW5kZXRlcm1pbmF0ZTsgdGhpcyBpbmRpY2F0ZXMgdGhhdCBhbiBhY3Rpdml0eSBpcyBvbmdvaW5nIHdpdGggbm8gaW5kaWNhdGlvbiBvZiBob3cgbG9uZyBpdCBpcyBleHBlY3RlZCB0byB0YWtlLiJ9fSx7bmFtZToibWF4IixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJUaGlzIGF0dHJpYnV0ZSBkZXNjcmliZXMgaG93IG11Y2ggd29yayB0aGUgdGFzayBpbmRpY2F0ZWQgYnkgdGhlIGBwcm9ncmVzc2AgZWxlbWVudCByZXF1aXJlcy4gVGhlIGBtYXhgIGF0dHJpYnV0ZSwgaWYgcHJlc2VudCwgbXVzdCBoYXZlIGEgdmFsdWUgZ3JlYXRlciB0aGFuIHplcm8gYW5kIGJlIGEgdmFsaWQgZmxvYXRpbmcgcG9pbnQgbnVtYmVyLiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyAxLiJ9fV0scmVmZXJlbmNlczpbe25hbWU6Ik1ETiBSZWZlcmVuY2UiLHVybDoiaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvSFRNTC9FbGVtZW50L3Byb2dyZXNzIn1dfSx7bmFtZToibWV0ZXIiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlRoZSBtZXRlciBlbGVtZW50IHJlcHJlc2VudHMgYSBzY2FsYXIgbWVhc3VyZW1lbnQgd2l0aGluIGEga25vd24gcmFuZ2UsIG9yIGEgZnJhY3Rpb25hbCB2YWx1ZTsgZm9yIGV4YW1wbGUgZGlzayB1c2FnZSwgdGhlIHJlbGV2YW5jZSBvZiBhIHF1ZXJ5IHJlc3VsdCwgb3IgdGhlIGZyYWN0aW9uIG9mIGEgdm90aW5nIHBvcHVsYXRpb24gdG8gaGF2ZSBzZWxlY3RlZCBhIHBhcnRpY3VsYXIgY2FuZGlkYXRlLiJ9LGF0dHJpYnV0ZXM6W3tuYW1lOiJ2YWx1ZSIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiVGhlIGN1cnJlbnQgbnVtZXJpYyB2YWx1ZS4gVGhpcyBtdXN0IGJlIGJldHdlZW4gdGhlIG1pbmltdW0gYW5kIG1heGltdW0gdmFsdWVzIChgbWluYCBhdHRyaWJ1dGUgYW5kIGBtYXhgIGF0dHJpYnV0ZSkgaWYgdGhleSBhcmUgc3BlY2lmaWVkLiBJZiB1bnNwZWNpZmllZCBvciBtYWxmb3JtZWQsIHRoZSB2YWx1ZSBpcyAwLiBJZiBzcGVjaWZpZWQsIGJ1dCBub3Qgd2l0aGluIHRoZSByYW5nZSBnaXZlbiBieSB0aGUgYG1pbmAgYXR0cmlidXRlIGFuZCBgbWF4YCBhdHRyaWJ1dGUsIHRoZSB2YWx1ZSBpcyBlcXVhbCB0byB0aGUgbmVhcmVzdCBlbmQgb2YgdGhlIHJhbmdlLlxuXG4qKlVzYWdlIG5vdGU6KiogVW5sZXNzIHRoZSBgdmFsdWVgIGF0dHJpYnV0ZSBpcyBiZXR3ZWVuIGAwYCBhbmQgYDFgIChpbmNsdXNpdmUpLCB0aGUgYG1pbmAgYW5kIGBtYXhgIGF0dHJpYnV0ZXMgc2hvdWxkIGRlZmluZSB0aGUgcmFuZ2Ugc28gdGhhdCB0aGUgYHZhbHVlYCBhdHRyaWJ1dGUncyB2YWx1ZSBpcyB3aXRoaW4gaXQuIn19LHtuYW1lOiJtaW4iLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlRoZSBsb3dlciBudW1lcmljIGJvdW5kIG9mIHRoZSBtZWFzdXJlZCByYW5nZS4gVGhpcyBtdXN0IGJlIGxlc3MgdGhhbiB0aGUgbWF4aW11bSB2YWx1ZSAoYG1heGAgYXR0cmlidXRlKSwgaWYgc3BlY2lmaWVkLiBJZiB1bnNwZWNpZmllZCwgdGhlIG1pbmltdW0gdmFsdWUgaXMgMC4ifX0se25hbWU6Im1heCIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiVGhlIHVwcGVyIG51bWVyaWMgYm91bmQgb2YgdGhlIG1lYXN1cmVkIHJhbmdlLiBUaGlzIG11c3QgYmUgZ3JlYXRlciB0aGFuIHRoZSBtaW5pbXVtIHZhbHVlIChgbWluYCBhdHRyaWJ1dGUpLCBpZiBzcGVjaWZpZWQuIElmIHVuc3BlY2lmaWVkLCB0aGUgbWF4aW11bSB2YWx1ZSBpcyAxLiJ9fSx7bmFtZToibG93IixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJUaGUgdXBwZXIgbnVtZXJpYyBib3VuZCBvZiB0aGUgbG93IGVuZCBvZiB0aGUgbWVhc3VyZWQgcmFuZ2UuIFRoaXMgbXVzdCBiZSBncmVhdGVyIHRoYW4gdGhlIG1pbmltdW0gdmFsdWUgKGBtaW5gIGF0dHJpYnV0ZSksIGFuZCBpdCBhbHNvIG11c3QgYmUgbGVzcyB0aGFuIHRoZSBoaWdoIHZhbHVlIGFuZCBtYXhpbXVtIHZhbHVlIChgaGlnaGAgYXR0cmlidXRlIGFuZCBgbWF4YCBhdHRyaWJ1dGUsIHJlc3BlY3RpdmVseSksIGlmIGFueSBhcmUgc3BlY2lmaWVkLiBJZiB1bnNwZWNpZmllZCwgb3IgaWYgbGVzcyB0aGFuIHRoZSBtaW5pbXVtIHZhbHVlLCB0aGUgYGxvd2AgdmFsdWUgaXMgZXF1YWwgdG8gdGhlIG1pbmltdW0gdmFsdWUuIn19LHtuYW1lOiJoaWdoIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJUaGUgbG93ZXIgbnVtZXJpYyBib3VuZCBvZiB0aGUgaGlnaCBlbmQgb2YgdGhlIG1lYXN1cmVkIHJhbmdlLiBUaGlzIG11c3QgYmUgbGVzcyB0aGFuIHRoZSBtYXhpbXVtIHZhbHVlIChgbWF4YCBhdHRyaWJ1dGUpLCBhbmQgaXQgYWxzbyBtdXN0IGJlIGdyZWF0ZXIgdGhhbiB0aGUgbG93IHZhbHVlIGFuZCBtaW5pbXVtIHZhbHVlIChgbG93YCBhdHRyaWJ1dGUgYW5kICoqbWluKiogYXR0cmlidXRlLCByZXNwZWN0aXZlbHkpLCBpZiBhbnkgYXJlIHNwZWNpZmllZC4gSWYgdW5zcGVjaWZpZWQsIG9yIGlmIGdyZWF0ZXIgdGhhbiB0aGUgbWF4aW11bSB2YWx1ZSwgdGhlIGBoaWdoYCB2YWx1ZSBpcyBlcXVhbCB0byB0aGUgbWF4aW11bSB2YWx1ZS4ifX0se25hbWU6Im9wdGltdW0iLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlRoaXMgYXR0cmlidXRlIGluZGljYXRlcyB0aGUgb3B0aW1hbCBudW1lcmljIHZhbHVlLiBJdCBtdXN0IGJlIHdpdGhpbiB0aGUgcmFuZ2UgKGFzIGRlZmluZWQgYnkgdGhlIGBtaW5gIGF0dHJpYnV0ZSBhbmQgYG1heGAgYXR0cmlidXRlKS4gV2hlbiB1c2VkIHdpdGggdGhlIGBsb3dgIGF0dHJpYnV0ZSBhbmQgYGhpZ2hgIGF0dHJpYnV0ZSwgaXQgZ2l2ZXMgYW4gaW5kaWNhdGlvbiB3aGVyZSBhbG9uZyB0aGUgcmFuZ2UgaXMgY29uc2lkZXJlZCBwcmVmZXJhYmxlLiBGb3IgZXhhbXBsZSwgaWYgaXQgaXMgYmV0d2VlbiB0aGUgYG1pbmAgYXR0cmlidXRlIGFuZCB0aGUgYGxvd2AgYXR0cmlidXRlLCB0aGVuIHRoZSBsb3dlciByYW5nZSBpcyBjb25zaWRlcmVkIHByZWZlcnJlZC4ifX0se25hbWU6ImZvcm0iLGRlc2NyaXB0aW9uOiJUaGlzIGF0dHJpYnV0ZSBhc3NvY2lhdGVzIHRoZSBlbGVtZW50IHdpdGggYSBgZm9ybWAgZWxlbWVudCB0aGF0IGhhcyBvd25lcnNoaXAgb2YgdGhlIGBtZXRlcmAgZWxlbWVudC4gRm9yIGV4YW1wbGUsIGEgYG1ldGVyYCBtaWdodCBiZSBkaXNwbGF5aW5nIGEgcmFuZ2UgY29ycmVzcG9uZGluZyB0byBhbiBgaW5wdXRgIGVsZW1lbnQgb2YgYHR5cGVgIF9udW1iZXJfLiBUaGlzIGF0dHJpYnV0ZSBpcyBvbmx5IHVzZWQgaWYgdGhlIGBtZXRlcmAgZWxlbWVudCBpcyBiZWluZyB1c2VkIGFzIGEgZm9ybS1hc3NvY2lhdGVkIGVsZW1lbnQ7IGV2ZW4gdGhlbiwgaXQgbWF5IGJlIG9taXR0ZWQgaWYgdGhlIGVsZW1lbnQgYXBwZWFycyBhcyBhIGRlc2NlbmRhbnQgb2YgYSBgZm9ybWAgZWxlbWVudC4ifV0scmVmZXJlbmNlczpbe25hbWU6Ik1ETiBSZWZlcmVuY2UiLHVybDoiaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvSFRNTC9FbGVtZW50L21ldGVyIn1dfSx7bmFtZToiZmllbGRzZXQiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlRoZSBmaWVsZHNldCBlbGVtZW50IHJlcHJlc2VudHMgYSBzZXQgb2YgZm9ybSBjb250cm9scyBvcHRpb25hbGx5IGdyb3VwZWQgdW5kZXIgYSBjb21tb24gbmFtZS4ifSxhdHRyaWJ1dGVzOlt7bmFtZToiZGlzYWJsZWQiLHZhbHVlU2V0OiJ2IixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJJZiB0aGlzIEJvb2xlYW4gYXR0cmlidXRlIGlzIHNldCwgYWxsIGZvcm0gY29udHJvbHMgdGhhdCBhcmUgZGVzY2VuZGFudHMgb2YgdGhlIGA8ZmllbGRzZXQ+YCwgYXJlIGRpc2FibGVkLCBtZWFuaW5nIHRoZXkgYXJlIG5vdCBlZGl0YWJsZSBhbmQgd29uJ3QgYmUgc3VibWl0dGVkIGFsb25nIHdpdGggdGhlIGA8Zm9ybT5gLiBUaGV5IHdvbid0IHJlY2VpdmUgYW55IGJyb3dzaW5nIGV2ZW50cywgbGlrZSBtb3VzZSBjbGlja3Mgb3IgZm9jdXMtcmVsYXRlZCBldmVudHMuIEJ5IGRlZmF1bHQgYnJvd3NlcnMgZGlzcGxheSBzdWNoIGNvbnRyb2xzIGdyYXllZCBvdXQuIE5vdGUgdGhhdCBmb3JtIGVsZW1lbnRzIGluc2lkZSB0aGUgW2A8bGVnZW5kPmBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9sZWdlbmQgXCJUaGUgSFRNTCA8bGVnZW5kPiBlbGVtZW50IHJlcHJlc2VudHMgYSBjYXB0aW9uIGZvciB0aGUgY29udGVudCBvZiBpdHMgcGFyZW50IDxmaWVsZHNldD4uXCIpIGVsZW1lbnQgd29uJ3QgYmUgZGlzYWJsZWQuIn19LHtuYW1lOiJmb3JtIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOidUaGlzIGF0dHJpYnV0ZSB0YWtlcyB0aGUgdmFsdWUgb2YgdGhlIGBpZGAgYXR0cmlidXRlIG9mIGEgW2A8Zm9ybT5gXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvZm9ybSAiVGhlIEhUTUwgPGZvcm0+IGVsZW1lbnQgcmVwcmVzZW50cyBhIGRvY3VtZW50IHNlY3Rpb24gdGhhdCBjb250YWlucyBpbnRlcmFjdGl2ZSBjb250cm9scyBmb3Igc3VibWl0dGluZyBpbmZvcm1hdGlvbiB0byBhIHdlYiBzZXJ2ZXIuIikgZWxlbWVudCB5b3Ugd2FudCB0aGUgYDxmaWVsZHNldD5gIHRvIGJlIHBhcnQgb2YsIGV2ZW4gaWYgaXQgaXMgbm90IGluc2lkZSB0aGUgZm9ybS4nfX0se25hbWU6Im5hbWUiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6J1RoZSBuYW1lIGFzc29jaWF0ZWQgd2l0aCB0aGUgZ3JvdXAuXG5cbioqTm90ZSoqOiBUaGUgY2FwdGlvbiBmb3IgdGhlIGZpZWxkc2V0IGlzIGdpdmVuIGJ5IHRoZSBmaXJzdCBbYDxsZWdlbmQ+YF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2xlZ2VuZCAiVGhlIEhUTUwgPGxlZ2VuZD4gZWxlbWVudCByZXByZXNlbnRzIGEgY2FwdGlvbiBmb3IgdGhlIGNvbnRlbnQgb2YgaXRzIHBhcmVudCA8ZmllbGRzZXQ+LiIpIGVsZW1lbnQgbmVzdGVkIGluc2lkZSBpdC4nfX1dLHJlZmVyZW5jZXM6W3tuYW1lOiJNRE4gUmVmZXJlbmNlIix1cmw6Imh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9maWVsZHNldCJ9XX0se25hbWU6ImxlZ2VuZCIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiVGhlIGxlZ2VuZCBlbGVtZW50IHJlcHJlc2VudHMgYSBjYXB0aW9uIGZvciB0aGUgcmVzdCBvZiB0aGUgY29udGVudHMgb2YgdGhlIGxlZ2VuZCBlbGVtZW50J3MgcGFyZW50IGZpZWxkc2V0IGVsZW1lbnQsIGlmIGFueS4ifSxhdHRyaWJ1dGVzOltdLHJlZmVyZW5jZXM6W3tuYW1lOiJNRE4gUmVmZXJlbmNlIix1cmw6Imh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9sZWdlbmQifV19LHtuYW1lOiJkZXRhaWxzIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJUaGUgZGV0YWlscyBlbGVtZW50IHJlcHJlc2VudHMgYSBkaXNjbG9zdXJlIHdpZGdldCBmcm9tIHdoaWNoIHRoZSB1c2VyIGNhbiBvYnRhaW4gYWRkaXRpb25hbCBpbmZvcm1hdGlvbiBvciBjb250cm9scy4ifSxhdHRyaWJ1dGVzOlt7bmFtZToib3BlbiIsdmFsdWVTZXQ6InYiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlRoaXMgQm9vbGVhbiBhdHRyaWJ1dGUgaW5kaWNhdGVzIHdoZXRoZXIgb3Igbm90IHRoZSBkZXRhaWxzIOKAlCB0aGF0IGlzLCB0aGUgY29udGVudHMgb2YgdGhlIGA8ZGV0YWlscz5gIGVsZW1lbnQg4oCUIGFyZSBjdXJyZW50bHkgdmlzaWJsZS4gVGhlIGRlZmF1bHQsIGBmYWxzZWAsIG1lYW5zIHRoZSBkZXRhaWxzIGFyZSBub3QgdmlzaWJsZS4ifX1dLHJlZmVyZW5jZXM6W3tuYW1lOiJNRE4gUmVmZXJlbmNlIix1cmw6Imh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9kZXRhaWxzIn1dfSx7bmFtZToic3VtbWFyeSIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiVGhlIHN1bW1hcnkgZWxlbWVudCByZXByZXNlbnRzIGEgc3VtbWFyeSwgY2FwdGlvbiwgb3IgbGVnZW5kIGZvciB0aGUgcmVzdCBvZiB0aGUgY29udGVudHMgb2YgdGhlIHN1bW1hcnkgZWxlbWVudCdzIHBhcmVudCBkZXRhaWxzIGVsZW1lbnQsIGlmIGFueS4ifSxhdHRyaWJ1dGVzOltdLHJlZmVyZW5jZXM6W3tuYW1lOiJNRE4gUmVmZXJlbmNlIix1cmw6Imh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9zdW1tYXJ5In1dfSx7bmFtZToiZGlhbG9nIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJUaGUgZGlhbG9nIGVsZW1lbnQgcmVwcmVzZW50cyBhIHBhcnQgb2YgYW4gYXBwbGljYXRpb24gdGhhdCBhIHVzZXIgaW50ZXJhY3RzIHdpdGggdG8gcGVyZm9ybSBhIHRhc2ssIGZvciBleGFtcGxlIGEgZGlhbG9nIGJveCwgaW5zcGVjdG9yLCBvciB3aW5kb3cuIn0sYXR0cmlidXRlczpbe25hbWU6Im9wZW4iLGRlc2NyaXB0aW9uOiJJbmRpY2F0ZXMgdGhhdCB0aGUgZGlhbG9nIGlzIGFjdGl2ZSBhbmQgYXZhaWxhYmxlIGZvciBpbnRlcmFjdGlvbi4gV2hlbiB0aGUgYG9wZW5gIGF0dHJpYnV0ZSBpcyBub3Qgc2V0LCB0aGUgZGlhbG9nIHNob3VsZG4ndCBiZSBzaG93biB0byB0aGUgdXNlci4ifV0scmVmZXJlbmNlczpbe25hbWU6Ik1ETiBSZWZlcmVuY2UiLHVybDoiaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2RpYWxvZyJ9XX0se25hbWU6InNjcmlwdCIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiVGhlIHNjcmlwdCBlbGVtZW50IGFsbG93cyBhdXRob3JzIHRvIGluY2x1ZGUgZHluYW1pYyBzY3JpcHQgYW5kIGRhdGEgYmxvY2tzIGluIHRoZWlyIGRvY3VtZW50cy4gVGhlIGVsZW1lbnQgZG9lcyBub3QgcmVwcmVzZW50IGNvbnRlbnQgZm9yIHRoZSB1c2VyLiJ9LGF0dHJpYnV0ZXM6W3tuYW1lOiJzcmMiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlRoaXMgYXR0cmlidXRlIHNwZWNpZmllcyB0aGUgVVJJIG9mIGFuIGV4dGVybmFsIHNjcmlwdDsgdGhpcyBjYW4gYmUgdXNlZCBhcyBhbiBhbHRlcm5hdGl2ZSB0byBlbWJlZGRpbmcgYSBzY3JpcHQgZGlyZWN0bHkgd2l0aGluIGEgZG9jdW1lbnQuXG5cbklmIGEgYHNjcmlwdGAgZWxlbWVudCBoYXMgYSBgc3JjYCBhdHRyaWJ1dGUgc3BlY2lmaWVkLCBpdCBzaG91bGQgbm90IGhhdmUgYSBzY3JpcHQgZW1iZWRkZWQgaW5zaWRlIGl0cyB0YWdzLiJ9fSx7bmFtZToidHlwZSIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZTonVGhpcyBhdHRyaWJ1dGUgaW5kaWNhdGVzIHRoZSB0eXBlIG9mIHNjcmlwdCByZXByZXNlbnRlZC4gVGhlIHZhbHVlIG9mIHRoaXMgYXR0cmlidXRlIHdpbGwgYmUgaW4gb25lIG9mIHRoZSBmb2xsb3dpbmcgY2F0ZWdvcmllczpcblxuKiAgICoqT21pdHRlZCBvciBhIEphdmFTY3JpcHQgTUlNRSB0eXBlOioqIEZvciBIVE1MNS1jb21wbGlhbnQgYnJvd3NlcnMgdGhpcyBpbmRpY2F0ZXMgdGhlIHNjcmlwdCBpcyBKYXZhU2NyaXB0LiBIVE1MNSBzcGVjaWZpY2F0aW9uIHVyZ2VzIGF1dGhvcnMgdG8gb21pdCB0aGUgYXR0cmlidXRlIHJhdGhlciB0aGFuIHByb3ZpZGUgYSByZWR1bmRhbnQgTUlNRSB0eXBlLiBJbiBlYXJsaWVyIGJyb3dzZXJzLCB0aGlzIGlkZW50aWZpZWQgdGhlIHNjcmlwdGluZyBsYW5ndWFnZSBvZiB0aGUgZW1iZWRkZWQgb3IgaW1wb3J0ZWQgKHZpYSB0aGUgYHNyY2AgYXR0cmlidXRlKSBjb2RlLiBKYXZhU2NyaXB0IE1JTUUgdHlwZXMgYXJlIFtsaXN0ZWQgaW4gdGhlIHNwZWNpZmljYXRpb25dKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUVFAvQmFzaWNzX29mX0hUVFAvTUlNRV90eXBlcyNKYXZhU2NyaXB0X3R5cGVzKS5cbiogICAqKmBtb2R1bGVgOioqIEZvciBIVE1MNS1jb21wbGlhbnQgYnJvd3NlcnMgdGhlIGNvZGUgaXMgdHJlYXRlZCBhcyBhIEphdmFTY3JpcHQgbW9kdWxlLiBUaGUgcHJvY2Vzc2luZyBvZiB0aGUgc2NyaXB0IGNvbnRlbnRzIGlzIG5vdCBhZmZlY3RlZCBieSB0aGUgYGNoYXJzZXRgIGFuZCBgZGVmZXJgIGF0dHJpYnV0ZXMuIEZvciBpbmZvcm1hdGlvbiBvbiB1c2luZyBgbW9kdWxlYCwgc2VlIFtFUzYgaW4gRGVwdGg6IE1vZHVsZXNdKGh0dHBzOi8vaGFja3MubW96aWxsYS5vcmcvMjAxNS8wOC9lczYtaW4tZGVwdGgtbW9kdWxlcy8pLiBDb2RlIG1heSBiZWhhdmUgZGlmZmVyZW50bHkgd2hlbiB0aGUgYG1vZHVsZWAga2V5d29yZCBpcyB1c2VkLlxuKiAgICoqQW55IG90aGVyIHZhbHVlOioqIFRoZSBlbWJlZGRlZCBjb250ZW50IGlzIHRyZWF0ZWQgYXMgYSBkYXRhIGJsb2NrIHdoaWNoIHdvblwndCBiZSBwcm9jZXNzZWQgYnkgdGhlIGJyb3dzZXIuIERldmVsb3BlcnMgbXVzdCB1c2UgYSB2YWxpZCBNSU1FIHR5cGUgdGhhdCBpcyBub3QgYSBKYXZhU2NyaXB0IE1JTUUgdHlwZSB0byBkZW5vdGUgZGF0YSBibG9ja3MuIFRoZSBgc3JjYCBhdHRyaWJ1dGUgd2lsbCBiZSBpZ25vcmVkLlxuXG4qKk5vdGU6KiogaW4gRmlyZWZveCB5b3UgY291bGQgc3BlY2lmeSB0aGUgdmVyc2lvbiBvZiBKYXZhU2NyaXB0IGNvbnRhaW5lZCBpbiBhIGA8c2NyaXB0PmAgZWxlbWVudCBieSBpbmNsdWRpbmcgYSBub24tc3RhbmRhcmQgYHZlcnNpb25gIHBhcmFtZXRlciBpbnNpZGUgdGhlIGB0eXBlYCBhdHRyaWJ1dGUg4oCUIGZvciBleGFtcGxlIGB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQ7dmVyc2lvbj0xLjgiYC4gVGhpcyBoYXMgYmVlbiByZW1vdmVkIGluIEZpcmVmb3ggNTkgKHNlZSBbYnVnwqAxNDI4NzQ1XShodHRwczovL2J1Z3ppbGxhLm1vemlsbGEub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDI4NzQ1ICJGSVhFRDogUmVtb3ZlIHN1cHBvcnQgZm9yIHZlcnNpb24gcGFyYW1ldGVyIGZyb20gc2NyaXB0IGxvYWRlciIpKS4nfX0se25hbWU6ImNoYXJzZXQifSx7bmFtZToiYXN5bmMiLHZhbHVlU2V0OiJ2IixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOmBUaGlzIGlzIGEgQm9vbGVhbiBhdHRyaWJ1dGUgaW5kaWNhdGluZyB0aGF0IHRoZSBicm93c2VyIHNob3VsZCwgaWYgcG9zc2libGUsIGxvYWQgdGhlIHNjcmlwdCBhc3luY2hyb25vdXNseS4KClRoaXMgYXR0cmlidXRlIG11c3Qgbm90IGJlIHVzZWQgaWYgdGhlIFxgc3JjXGAgYXR0cmlidXRlIGlzIGFic2VudCAoaS5lLiBmb3IgaW5saW5lIHNjcmlwdHMpLiBJZiBpdCBpcyBpbmNsdWRlZCBpbiB0aGlzIGNhc2UgaXQgd2lsbCBoYXZlIG5vIGVmZmVjdC4KCkJyb3dzZXJzIHVzdWFsbHkgYXNzdW1lIHRoZSB3b3JzdCBjYXNlIHNjZW5hcmlvIGFuZCBsb2FkIHNjcmlwdHMgc3luY2hyb25vdXNseSwgKGkuZS4gXGBhc3luYz0iZmFsc2UiXGApIGR1cmluZyBIVE1MIHBhcnNpbmcuCgpEeW5hbWljYWxseSBpbnNlcnRlZCBzY3JpcHRzICh1c2luZyBbXGBkb2N1bWVudC5jcmVhdGVFbGVtZW50KClcYF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0RvY3VtZW50L2NyZWF0ZUVsZW1lbnQgIkluIGFuIEhUTUwgZG9jdW1lbnQsIHRoZSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCkgbWV0aG9kIGNyZWF0ZXMgdGhlIEhUTUwgZWxlbWVudCBzcGVjaWZpZWQgYnkgdGFnTmFtZSwgb3IgYW4gSFRNTFVua25vd25FbGVtZW50IGlmIHRhZ05hbWUgaXNuJ3QgcmVjb2duaXplZC4iKSkgbG9hZCBhc3luY2hyb25vdXNseSBieSBkZWZhdWx0LCBzbyB0byB0dXJuIG9uIHN5bmNocm9ub3VzIGxvYWRpbmcgKGkuZS4gc2NyaXB0cyBsb2FkIGluIHRoZSBvcmRlciB0aGV5IHdlcmUgaW5zZXJ0ZWQpIHNldCBcYGFzeW5jPSJmYWxzZSJcYC4KClNlZSBbQnJvd3NlciBjb21wYXRpYmlsaXR5XSgjQnJvd3Nlcl9jb21wYXRpYmlsaXR5KSBmb3Igbm90ZXMgb24gYnJvd3NlciBzdXBwb3J0LiBTZWUgYWxzbyBbQXN5bmMgc2NyaXB0cyBmb3IgYXNtLmpzXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL0dhbWVzL1RlY2huaXF1ZXMvQXN5bmNfc2NyaXB0cykuYH19LHtuYW1lOiJkZWZlciIsdmFsdWVTZXQ6InYiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6J1RoaXMgQm9vbGVhbiBhdHRyaWJ1dGUgaXMgc2V0IHRvIGluZGljYXRlIHRvIGEgYnJvd3NlciB0aGF0IHRoZSBzY3JpcHQgaXMgbWVhbnQgdG8gYmUgZXhlY3V0ZWQgYWZ0ZXIgdGhlIGRvY3VtZW50IGhhcyBiZWVuIHBhcnNlZCwgYnV0IGJlZm9yZSBmaXJpbmcgW2BET01Db250ZW50TG9hZGVkYF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvRXZlbnRzL0RPTUNvbnRlbnRMb2FkZWQgIi9lbi1VUy9kb2NzL1dlYi9FdmVudHMvRE9NQ29udGVudExvYWRlZCIpLlxuXG5TY3JpcHRzIHdpdGggdGhlIGBkZWZlcmAgYXR0cmlidXRlIHdpbGwgcHJldmVudCB0aGUgYERPTUNvbnRlbnRMb2FkZWRgIGV2ZW50IGZyb20gZmlyaW5nIHVudGlsIHRoZSBzY3JpcHQgaGFzIGxvYWRlZCBhbmQgZmluaXNoZWQgZXZhbHVhdGluZy5cblxuVGhpcyBhdHRyaWJ1dGUgbXVzdCBub3QgYmUgdXNlZCBpZiB0aGUgYHNyY2AgYXR0cmlidXRlIGlzIGFic2VudCAoaS5lLiBmb3IgaW5saW5lIHNjcmlwdHMpLCBpbiB0aGlzIGNhc2UgaXQgd291bGQgaGF2ZSBubyBlZmZlY3QuXG5cblRvIGFjaGlldmUgYSBzaW1pbGFyIGVmZmVjdCBmb3IgZHluYW1pY2FsbHkgaW5zZXJ0ZWQgc2NyaXB0cyB1c2UgYGFzeW5jPSJmYWxzZSJgIGluc3RlYWQuIFNjcmlwdHMgd2l0aCB0aGUgYGRlZmVyYCBhdHRyaWJ1dGUgd2lsbCBleGVjdXRlIGluIHRoZSBvcmRlciBpbiB3aGljaCB0aGV5IGFwcGVhciBpbiB0aGUgZG9jdW1lbnQuJ319LHtuYW1lOiJjcm9zc29yaWdpbiIsdmFsdWVTZXQ6InhvIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOidOb3JtYWwgYHNjcmlwdGAgZWxlbWVudHMgcGFzcyBtaW5pbWFsIGluZm9ybWF0aW9uIHRvIHRoZSBbYHdpbmRvdy5vbmVycm9yYF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0dsb2JhbEV2ZW50SGFuZGxlcnMvb25lcnJvciAiVGhlIG9uZXJyb3IgcHJvcGVydHkgb2YgdGhlIEdsb2JhbEV2ZW50SGFuZGxlcnMgbWl4aW4gaXMgYW4gRXZlbnRIYW5kbGVyIHRoYXQgcHJvY2Vzc2VzIGVycm9yIGV2ZW50cy4iKSBmb3Igc2NyaXB0cyB3aGljaCBkbyBub3QgcGFzcyB0aGUgc3RhbmRhcmQgW0NPUlNdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvR2xvc3NhcnkvQ09SUyAiQ09SUzogQ09SUyAoQ3Jvc3MtT3JpZ2luIFJlc291cmNlIFNoYXJpbmcpIGlzIGEgc3lzdGVtLCBjb25zaXN0aW5nIG9mIHRyYW5zbWl0dGluZyBIVFRQIGhlYWRlcnMsIHRoYXQgZGV0ZXJtaW5lcyB3aGV0aGVyIGJyb3dzZXJzIGJsb2NrIGZyb250ZW5kIEphdmFTY3JpcHQgY29kZSBmcm9tIGFjY2Vzc2luZyByZXNwb25zZXMgZm9yIGNyb3NzLW9yaWdpbiByZXF1ZXN0cy4iKSBjaGVja3MuIFRvIGFsbG93IGVycm9yIGxvZ2dpbmcgZm9yIHNpdGVzIHdoaWNoIHVzZSBhIHNlcGFyYXRlIGRvbWFpbiBmb3Igc3RhdGljIG1lZGlhLCB1c2UgdGhpcyBhdHRyaWJ1dGUuIFNlZSBbQ09SUyBzZXR0aW5ncyBhdHRyaWJ1dGVzXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0NPUlNfc2V0dGluZ3NfYXR0cmlidXRlcykgZm9yIGEgbW9yZSBkZXNjcmlwdGl2ZSBleHBsYW5hdGlvbiBvZiBpdHMgdmFsaWQgYXJndW1lbnRzLid9fSx7bmFtZToibm9uY2UiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IkEgY3J5cHRvZ3JhcGhpYyBub25jZSAobnVtYmVyIHVzZWQgb25jZSkgdG8gbGlzdCB0aGUgYWxsb3dlZCBpbmxpbmUgc2NyaXB0cyBpbiBhIFtzY3JpcHQtc3JjIENvbnRlbnQtU2VjdXJpdHktUG9saWN5XShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVFRQL0hlYWRlcnMvQ29udGVudC1TZWN1cml0eS1Qb2xpY3kvc2NyaXB0LXNyYykuIFRoZSBzZXJ2ZXIgbXVzdCBnZW5lcmF0ZSBhIHVuaXF1ZSBub25jZSB2YWx1ZSBlYWNoIHRpbWUgaXQgdHJhbnNtaXRzIGEgcG9saWN5LiBJdCBpcyBjcml0aWNhbCB0byBwcm92aWRlIGEgbm9uY2UgdGhhdCBjYW5ub3QgYmUgZ3Vlc3NlZCBhcyBieXBhc3NpbmcgYSByZXNvdXJjZSdzIHBvbGljeSBpcyBvdGhlcndpc2UgdHJpdmlhbC4ifX0se25hbWU6ImludGVncml0eSIsZGVzY3JpcHRpb246IlRoaXMgYXR0cmlidXRlIGNvbnRhaW5zIGlubGluZSBtZXRhZGF0YSB0aGF0IGEgdXNlciBhZ2VudCBjYW4gdXNlIHRvIHZlcmlmeSB0aGF0IGEgZmV0Y2hlZCByZXNvdXJjZSBoYXMgYmVlbiBkZWxpdmVyZWQgZnJlZSBvZiB1bmV4cGVjdGVkIG1hbmlwdWxhdGlvbi4gU2VlIFtTdWJyZXNvdXJjZSBJbnRlZ3JpdHldKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL1NlY3VyaXR5L1N1YnJlc291cmNlX0ludGVncml0eSkuIn0se25hbWU6Im5vbW9kdWxlIixkZXNjcmlwdGlvbjoiVGhpcyBCb29sZWFuIGF0dHJpYnV0ZSBpcyBzZXQgdG8gaW5kaWNhdGUgdGhhdCB0aGUgc2NyaXB0IHNob3VsZCBub3QgYmUgZXhlY3V0ZWQgaW4gYnJvd3NlcnMgdGhhdCBzdXBwb3J0IFtFUzIwMTUgbW9kdWxlc10oaHR0cHM6Ly9oYWNrcy5tb3ppbGxhLm9yZy8yMDE1LzA4L2VzNi1pbi1kZXB0aC1tb2R1bGVzLykg4oCUIGluIGVmZmVjdCwgdGhpcyBjYW4gYmUgdXNlZCB0byBzZXJ2ZSBmYWxsYmFjayBzY3JpcHRzIHRvIG9sZGVyIGJyb3dzZXJzIHRoYXQgZG8gbm90IHN1cHBvcnQgbW9kdWxhciBKYXZhU2NyaXB0IGNvZGUuIn0se25hbWU6InJlZmVycmVycG9saWN5IixkZXNjcmlwdGlvbjonSW5kaWNhdGVzIHdoaWNoIFtyZWZlcnJlcl0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0RvY3VtZW50L3JlZmVycmVyKSB0byBzZW5kIHdoZW4gZmV0Y2hpbmcgdGhlIHNjcmlwdCwgb3IgcmVzb3VyY2VzIGZldGNoZWQgYnkgdGhlIHNjcmlwdDpcblxuKiAgIGBuby1yZWZlcnJlcmA6IFRoZSBbYFJlZmVyZXJgXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVFRQL0hlYWRlcnMvUmVmZXJlciAiVGhlIFJlZmVyZXIgcmVxdWVzdCBoZWFkZXIgY29udGFpbnMgdGhlIGFkZHJlc3Mgb2YgdGhlIHByZXZpb3VzIHdlYiBwYWdlIGZyb20gd2hpY2ggYSBsaW5rIHRvIHRoZSBjdXJyZW50bHkgcmVxdWVzdGVkIHBhZ2Ugd2FzIGZvbGxvd2VkLiBUaGUgUmVmZXJlciBoZWFkZXIgYWxsb3dzIHNlcnZlcnMgdG8gaWRlbnRpZnkgd2hlcmUgcGVvcGxlIGFyZSB2aXNpdGluZyB0aGVtIGZyb20gYW5kIG1heSB1c2UgdGhhdCBkYXRhIGZvciBhbmFseXRpY3MsIGxvZ2dpbmcsIG9yIG9wdGltaXplZCBjYWNoaW5nLCBmb3IgZXhhbXBsZS4iKSBoZWFkZXIgd2lsbCBub3QgYmUgc2VudC5cbiogICBgbm8tcmVmZXJyZXItd2hlbi1kb3duZ3JhZGVgIChkZWZhdWx0KTogVGhlIFtgUmVmZXJlcmBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUVFAvSGVhZGVycy9SZWZlcmVyICJUaGUgUmVmZXJlciByZXF1ZXN0IGhlYWRlciBjb250YWlucyB0aGUgYWRkcmVzcyBvZiB0aGUgcHJldmlvdXMgd2ViIHBhZ2UgZnJvbSB3aGljaCBhIGxpbmsgdG8gdGhlIGN1cnJlbnRseSByZXF1ZXN0ZWQgcGFnZSB3YXMgZm9sbG93ZWQuIFRoZSBSZWZlcmVyIGhlYWRlciBhbGxvd3Mgc2VydmVycyB0byBpZGVudGlmeSB3aGVyZSBwZW9wbGUgYXJlIHZpc2l0aW5nIHRoZW0gZnJvbSBhbmQgbWF5IHVzZSB0aGF0IGRhdGEgZm9yIGFuYWx5dGljcywgbG9nZ2luZywgb3Igb3B0aW1pemVkIGNhY2hpbmcsIGZvciBleGFtcGxlLiIpIGhlYWRlciB3aWxsIG5vdCBiZSBzZW50IHRvIFtvcmlnaW5dKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvR2xvc3Nhcnkvb3JpZ2luICJvcmlnaW46IFdlYiBjb250ZW50XCdzIG9yaWdpbiBpcyBkZWZpbmVkIGJ5IHRoZSBzY2hlbWUgKHByb3RvY29sKSwgaG9zdCAoZG9tYWluKSwgYW5kIHBvcnQgb2YgdGhlIFVSTCB1c2VkIHRvIGFjY2VzcyBpdC4gVHdvIG9iamVjdHMgaGF2ZSB0aGUgc2FtZSBvcmlnaW4gb25seSB3aGVuIHRoZSBzY2hlbWUsIGhvc3QsIGFuZCBwb3J0IGFsbCBtYXRjaC4iKXMgd2l0aG91dCBbVExTXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL0dsb3NzYXJ5L1RMUyAiVExTOiBUcmFuc3BvcnQgTGF5ZXIgU2VjdXJpdHkgKFRMUyksIHByZXZpb3VzbHkga25vd24gYXMgU2VjdXJlIFNvY2tldHMgTGF5ZXIgKFNTTCksIGlzIGEgcHJvdG9jb2wgdXNlZCBieSBhcHBsaWNhdGlvbnMgdG8gY29tbXVuaWNhdGUgc2VjdXJlbHkgYWNyb3NzIGEgbmV0d29yaywgcHJldmVudGluZyB0YW1wZXJpbmcgd2l0aCBhbmQgZWF2ZXNkcm9wcGluZyBvbiBlbWFpbCwgd2ViIGJyb3dzaW5nLCBtZXNzYWdpbmcsIGFuZCBvdGhlciBwcm90b2NvbHMuIikgKFtIVFRQU10oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9HbG9zc2FyeS9IVFRQUyAiSFRUUFM6IEhUVFBTIChIVFRQIFNlY3VyZSkgaXMgYW4gZW5jcnlwdGVkIHZlcnNpb24gb2YgdGhlIEhUVFAgcHJvdG9jb2wuIEl0IHVzdWFsbHkgdXNlcyBTU0wgb3IgVExTIHRvIGVuY3J5cHQgYWxsIGNvbW11bmljYXRpb24gYmV0d2VlbiBhIGNsaWVudCBhbmQgYSBzZXJ2ZXIuIFRoaXMgc2VjdXJlIGNvbm5lY3Rpb24gYWxsb3dzIGNsaWVudHMgdG8gc2FmZWx5IGV4Y2hhbmdlIHNlbnNpdGl2ZSBkYXRhIHdpdGggYSBzZXJ2ZXIsIGZvciBleGFtcGxlIGZvciBiYW5raW5nIGFjdGl2aXRpZXMgb3Igb25saW5lIHNob3BwaW5nLiIpKS5cbiogICBgb3JpZ2luYDogVGhlIHNlbnQgcmVmZXJyZXIgd2lsbCBiZSBsaW1pdGVkIHRvIHRoZSBvcmlnaW4gb2YgdGhlIHJlZmVycmluZyBwYWdlOiBpdHMgW3NjaGVtZV0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9BcmNoaXZlL01vemlsbGEvVVJJU2NoZW1lKSwgW2hvc3RdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvR2xvc3NhcnkvaG9zdCAiaG9zdDogQSBob3N0IGlzIGEgZGV2aWNlIGNvbm5lY3RlZCB0byB0aGUgSW50ZXJuZXQgKG9yIGEgbG9jYWwgbmV0d29yaykuIFNvbWUgaG9zdHMgY2FsbGVkIHNlcnZlcnMgb2ZmZXIgYWRkaXRpb25hbCBzZXJ2aWNlcyBsaWtlIHNlcnZpbmcgd2VicGFnZXMgb3Igc3RvcmluZyBmaWxlcyBhbmQgZW1haWxzLiIpLCBhbmQgW3BvcnRdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvR2xvc3NhcnkvcG9ydCAicG9ydDogRm9yIGEgY29tcHV0ZXIgY29ubmVjdGVkIHRvIGEgbmV0d29yayB3aXRoIGFuIElQIGFkZHJlc3MsIGEgcG9ydCBpcyBhIGNvbW11bmljYXRpb24gZW5kcG9pbnQuIFBvcnRzIGFyZSBkZXNpZ25hdGVkIGJ5IG51bWJlcnMsIGFuZCBiZWxvdyAxMDI0IGVhY2ggcG9ydCBpcyBhc3NvY2lhdGVkIGJ5IGRlZmF1bHQgd2l0aCBhIHNwZWNpZmljIHByb3RvY29sLiIpLlxuKiAgIGBvcmlnaW4td2hlbi1jcm9zcy1vcmlnaW5gOiBUaGUgcmVmZXJyZXIgc2VudCB0byBvdGhlciBvcmlnaW5zIHdpbGwgYmUgbGltaXRlZCB0byB0aGUgc2NoZW1lLCB0aGUgaG9zdCwgYW5kIHRoZSBwb3J0LiBOYXZpZ2F0aW9ucyBvbiB0aGUgc2FtZSBvcmlnaW4gd2lsbCBzdGlsbCBpbmNsdWRlIHRoZSBwYXRoLlxuKiAgIGBzYW1lLW9yaWdpbmA6IEEgcmVmZXJyZXIgd2lsbCBiZSBzZW50IGZvciBbc2FtZSBvcmlnaW5dKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvR2xvc3NhcnkvU2FtZS1vcmlnaW5fcG9saWN5ICJzYW1lIG9yaWdpbjogVGhlIHNhbWUtb3JpZ2luIHBvbGljeSBpcyBhIGNyaXRpY2FsIHNlY3VyaXR5IG1lY2hhbmlzbSB0aGF0IHJlc3RyaWN0cyBob3cgYSBkb2N1bWVudCBvciBzY3JpcHQgbG9hZGVkIGZyb20gb25lIG9yaWdpbiBjYW4gaW50ZXJhY3Qgd2l0aCBhIHJlc291cmNlIGZyb20gYW5vdGhlciBvcmlnaW4uIiksIGJ1dCBjcm9zcy1vcmlnaW4gcmVxdWVzdHMgd2lsbCBjb250YWluIG5vIHJlZmVycmVyIGluZm9ybWF0aW9uLlxuKiAgIGBzdHJpY3Qtb3JpZ2luYDogT25seSBzZW5kIHRoZSBvcmlnaW4gb2YgdGhlIGRvY3VtZW50IGFzIHRoZSByZWZlcnJlciB3aGVuIHRoZSBwcm90b2NvbCBzZWN1cml0eSBsZXZlbCBzdGF5cyB0aGUgc2FtZSAoZS5nLiBIVFRQU+KGkkhUVFBTKSwgYnV0IGRvblwndCBzZW5kIGl0IHRvIGEgbGVzcyBzZWN1cmUgZGVzdGluYXRpb24gKGUuZy4gSFRUUFPihpJIVFRQKS5cbiogICBgc3RyaWN0LW9yaWdpbi13aGVuLWNyb3NzLW9yaWdpbmA6IFNlbmQgYSBmdWxsIFVSTCB3aGVuIHBlcmZvcm1pbmcgYSBzYW1lLW9yaWdpbiByZXF1ZXN0LCBidXQgb25seSBzZW5kIHRoZSBvcmlnaW4gd2hlbiB0aGUgcHJvdG9jb2wgc2VjdXJpdHkgbGV2ZWwgc3RheXMgdGhlIHNhbWUgKGUuZy5IVFRQU+KGkkhUVFBTKSwgYW5kIHNlbmQgbm8gaGVhZGVyIHRvIGEgbGVzcyBzZWN1cmUgZGVzdGluYXRpb24gKGUuZy4gSFRUUFPihpJIVFRQKS5cbiogICBgdW5zYWZlLXVybGA6IFRoZSByZWZlcnJlciB3aWxsIGluY2x1ZGUgdGhlIG9yaWdpbiBfYW5kXyB0aGUgcGF0aCAoYnV0IG5vdCB0aGUgW2ZyYWdtZW50XShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvSFRNTEh5cGVybGlua0VsZW1lbnRVdGlscy9oYXNoKSwgW3Bhc3N3b3JkXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvSFRNTEh5cGVybGlua0VsZW1lbnRVdGlscy9wYXNzd29yZCksIG9yIFt1c2VybmFtZV0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0hUTUxIeXBlcmxpbmtFbGVtZW50VXRpbHMvdXNlcm5hbWUpKS4gKipUaGlzIHZhbHVlIGlzIHVuc2FmZSoqLCBiZWNhdXNlIGl0IGxlYWtzIG9yaWdpbnMgYW5kIHBhdGhzIGZyb20gVExTLXByb3RlY3RlZCByZXNvdXJjZXMgdG8gaW5zZWN1cmUgb3JpZ2lucy5cblxuKipOb3RlKio6IEFuIGVtcHR5IHN0cmluZyB2YWx1ZSAoYCIiYCkgaXMgYm90aCB0aGUgZGVmYXVsdCB2YWx1ZSwgYW5kIGEgZmFsbGJhY2sgdmFsdWUgaWYgYHJlZmVycmVycG9saWN5YCBpcyBub3Qgc3VwcG9ydGVkLiBJZiBgcmVmZXJyZXJwb2xpY3lgIGlzIG5vdCBleHBsaWNpdGx5IHNwZWNpZmllZCBvbiB0aGUgYDxzY3JpcHQ+YCBlbGVtZW50LCBpdCB3aWxsIGFkb3B0IGEgaGlnaGVyLWxldmVsIHJlZmVycmVyIHBvbGljeSwgaS5lLiBvbmUgc2V0IG9uIHRoZSB3aG9sZSBkb2N1bWVudCBvciBkb21haW4uIElmIGEgaGlnaGVyLWxldmVsIHBvbGljeSBpcyBub3QgYXZhaWxhYmxlLMKgdGhlIGVtcHR5IHN0cmluZyBpcyB0cmVhdGVkIGFzIGJlaW5nIGVxdWl2YWxlbnQgdG8gYG5vLXJlZmVycmVyLXdoZW4tZG93bmdyYWRlYC4nfSx7bmFtZToidGV4dCIsZGVzY3JpcHRpb246Ikxpa2UgdGhlIGB0ZXh0Q29udGVudGAgYXR0cmlidXRlLCB0aGlzIGF0dHJpYnV0ZSBzZXRzIHRoZSB0ZXh0IGNvbnRlbnQgb2YgdGhlIGVsZW1lbnQuIFVubGlrZSB0aGUgYHRleHRDb250ZW50YCBhdHRyaWJ1dGUsIGhvd2V2ZXIsIHRoaXMgYXR0cmlidXRlIGlzIGV2YWx1YXRlZCBhcyBleGVjdXRhYmxlIGNvZGUgYWZ0ZXIgdGhlIG5vZGUgaXMgaW5zZXJ0ZWQgaW50byB0aGUgRE9NLiJ9XSxyZWZlcmVuY2VzOlt7bmFtZToiTUROIFJlZmVyZW5jZSIsdXJsOiJodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvc2NyaXB0In1dfSx7bmFtZToibm9zY3JpcHQiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlRoZSBub3NjcmlwdCBlbGVtZW50IHJlcHJlc2VudHMgbm90aGluZyBpZiBzY3JpcHRpbmcgaXMgZW5hYmxlZCwgYW5kIHJlcHJlc2VudHMgaXRzIGNoaWxkcmVuIGlmIHNjcmlwdGluZyBpcyBkaXNhYmxlZC4gSXQgaXMgdXNlZCB0byBwcmVzZW50IGRpZmZlcmVudCBtYXJrdXAgdG8gdXNlciBhZ2VudHMgdGhhdCBzdXBwb3J0IHNjcmlwdGluZyBhbmQgdGhvc2UgdGhhdCBkb24ndCBzdXBwb3J0IHNjcmlwdGluZywgYnkgYWZmZWN0aW5nIGhvdyB0aGUgZG9jdW1lbnQgaXMgcGFyc2VkLiJ9LGF0dHJpYnV0ZXM6W10scmVmZXJlbmNlczpbe25hbWU6Ik1ETiBSZWZlcmVuY2UiLHVybDoiaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvSFRNTC9FbGVtZW50L25vc2NyaXB0In1dfSx7bmFtZToidGVtcGxhdGUiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlRoZSB0ZW1wbGF0ZSBlbGVtZW50IGlzIHVzZWQgdG8gZGVjbGFyZSBmcmFnbWVudHMgb2YgSFRNTCB0aGF0IGNhbiBiZSBjbG9uZWQgYW5kIGluc2VydGVkIGluIHRoZSBkb2N1bWVudCBieSBzY3JpcHQuIn0sYXR0cmlidXRlczpbXSxyZWZlcmVuY2VzOlt7bmFtZToiTUROIFJlZmVyZW5jZSIsdXJsOiJodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvdGVtcGxhdGUifV19LHtuYW1lOiJjYW52YXMiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlRoZSBjYW52YXMgZWxlbWVudCBwcm92aWRlcyBzY3JpcHRzIHdpdGggYSByZXNvbHV0aW9uLWRlcGVuZGVudCBiaXRtYXAgY2FudmFzLCB3aGljaCBjYW4gYmUgdXNlZCBmb3IgcmVuZGVyaW5nIGdyYXBocywgZ2FtZSBncmFwaGljcywgYXJ0LCBvciBvdGhlciB2aXN1YWwgaW1hZ2VzIG9uIHRoZSBmbHkuIn0sYXR0cmlidXRlczpbe25hbWU6IndpZHRoIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJUaGUgd2lkdGggb2YgdGhlIGNvb3JkaW5hdGUgc3BhY2UgaW4gQ1NTIHBpeGVscy4gRGVmYXVsdHMgdG8gMzAwLiJ9fSx7bmFtZToiaGVpZ2h0IixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJUaGUgaGVpZ2h0IG9mIHRoZSBjb29yZGluYXRlIHNwYWNlIGluIENTUyBwaXhlbHMuIERlZmF1bHRzIHRvIDE1MC4ifX0se25hbWU6Im1vei1vcGFxdWUiLGRlc2NyaXB0aW9uOiJMZXRzIHRoZSBjYW52YXMga25vdyB3aGV0aGVyIG9yIG5vdCB0cmFuc2x1Y2VuY3kgd2lsbCBiZSBhIGZhY3Rvci4gSWYgdGhlIGNhbnZhcyBrbm93cyB0aGVyZSdzIG5vIHRyYW5zbHVjZW5jeSwgcGFpbnRpbmcgcGVyZm9ybWFuY2UgY2FuIGJlIG9wdGltaXplZC4gVGhpcyBpcyBvbmx5IHN1cHBvcnRlZCBieSBNb3ppbGxhLWJhc2VkIGJyb3dzZXJzOyB1c2UgdGhlIHN0YW5kYXJkaXplZCBbYGNhbnZhcy5nZXRDb250ZXh0KCcyZCcsIHsgYWxwaGE6IGZhbHNlIH0pYF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0hUTUxDYW52YXNFbGVtZW50L2dldENvbnRleHQgXCJUaGUgSFRNTENhbnZhc0VsZW1lbnQuZ2V0Q29udGV4dCgpIG1ldGhvZCByZXR1cm5zIGEgZHJhd2luZyBjb250ZXh0IG9uIHRoZSBjYW52YXMsIG9yIG51bGwgaWYgdGhlIGNvbnRleHQgaWRlbnRpZmllciBpcyBub3Qgc3VwcG9ydGVkLlwiKSBpbnN0ZWFkLiJ9XSxyZWZlcmVuY2VzOlt7bmFtZToiTUROIFJlZmVyZW5jZSIsdXJsOiJodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvY2FudmFzIn1dfSx7bmFtZToic2xvdCIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiVGhlIHNsb3QgZWxlbWVudCBpcyBhIHBsYWNlaG9sZGVyIGluc2lkZSBhIHdlYiBjb21wb25lbnQgdGhhdCB5b3UgY2FuIGZpbGwgd2l0aCB5b3VyIG93biBtYXJrdXAsIHdoaWNoIGxldHMgeW91IGNyZWF0ZSBzZXBhcmF0ZSBET00gdHJlZXMgYW5kIHByZXNlbnQgdGhlbSB0b2dldGhlci4ifSxhdHRyaWJ1dGVzOlt7bmFtZToibmFtZSIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiVGhlIHNsb3QncyBuYW1lLlxuQSAqKm5hbWVkIHNsb3QqKiBpcyBhIGA8c2xvdD5gIGVsZW1lbnQgd2l0aCBhIGBuYW1lYCBhdHRyaWJ1dGUuIn19XSxyZWZlcmVuY2VzOlt7bmFtZToiTUROIFJlZmVyZW5jZSIsdXJsOiJodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvc2xvdCJ9XX0se25hbWU6ImRhdGEiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlRoZSBkYXRhIGVsZW1lbnQgbGlua3MgYSBnaXZlbiBwaWVjZSBvZiBjb250ZW50IHdpdGggYSBtYWNoaW5lLXJlYWRhYmxlIHRyYW5zbGF0aW9uLiJ9LGF0dHJpYnV0ZXM6W3tuYW1lOiJ2YWx1ZSIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiVGhpcyBhdHRyaWJ1dGUgc3BlY2lmaWVzIHRoZSBtYWNoaW5lLXJlYWRhYmxlIHRyYW5zbGF0aW9uIG9mIHRoZSBjb250ZW50IG9mIHRoZSBlbGVtZW50LiJ9fV0scmVmZXJlbmNlczpbe25hbWU6Ik1ETiBSZWZlcmVuY2UiLHVybDoiaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2RhdGEifV19LHtuYW1lOiJoZ3JvdXAiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlRoZSBoZ3JvdXAgZWxlbWVudCByZXByZXNlbnRzIGEgaGVhZGluZyBhbmQgcmVsYXRlZCBjb250ZW50LiBJdCBncm91cHMgYSBzaW5nbGUgaDHigJNoNiBlbGVtZW50IHdpdGggb25lIG9yIG1vcmUgcC4ifSxhdHRyaWJ1dGVzOltdLHJlZmVyZW5jZXM6W3tuYW1lOiJNRE4gUmVmZXJlbmNlIix1cmw6Imh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9oZ3JvdXAifV19LHtuYW1lOiJtZW51IixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJUaGUgbWVudSBlbGVtZW50IHJlcHJlc2VudHMgYW4gdW5vcmRlcmVkIGxpc3Qgb2YgaW50ZXJhY3RpdmUgaXRlbXMuIn0sYXR0cmlidXRlczpbXSxyZWZlcmVuY2VzOlt7bmFtZToiTUROIFJlZmVyZW5jZSIsdXJsOiJodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvbWVudSJ9XX1dLGdsb2JhbEF0dHJpYnV0ZXM6W3tuYW1lOiJhY2Nlc3NrZXkiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlByb3ZpZGVzIGEgaGludCBmb3IgZ2VuZXJhdGluZyBhIGtleWJvYXJkIHNob3J0Y3V0IGZvciB0aGUgY3VycmVudCBlbGVtZW50LiBUaGlzIGF0dHJpYnV0ZSBjb25zaXN0cyBvZiBhIHNwYWNlLXNlcGFyYXRlZCBsaXN0IG9mIGNoYXJhY3RlcnMuIFRoZSBicm93c2VyIHNob3VsZCB1c2UgdGhlIGZpcnN0IG9uZSB0aGF0IGV4aXN0cyBvbiB0aGUgY29tcHV0ZXIga2V5Ym9hcmQgbGF5b3V0LiJ9LHJlZmVyZW5jZXM6W3tuYW1lOiJNRE4gUmVmZXJlbmNlIix1cmw6Imh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RvY3MvV2ViL0hUTUwvR2xvYmFsX2F0dHJpYnV0ZXMvYWNjZXNza2V5In1dfSx7bmFtZToiYXV0b2NhcGl0YWxpemUiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IkNvbnRyb2xzIHdoZXRoZXIgYW5kIGhvdyB0ZXh0IGlucHV0IGlzIGF1dG9tYXRpY2FsbHkgY2FwaXRhbGl6ZWQgYXMgaXQgaXMgZW50ZXJlZC9lZGl0ZWQgYnkgdGhlIHVzZXIuIEl0IGNhbiBoYXZlIHRoZSBmb2xsb3dpbmcgdmFsdWVzOlxuXG4qICAgYG9mZmAgb3IgYG5vbmVgLCBubyBhdXRvY2FwaXRhbGl6YXRpb24gaXMgYXBwbGllZCAoYWxsIGxldHRlcnMgZGVmYXVsdCB0byBsb3dlcmNhc2UpXG4qICAgYG9uYCBvciBgc2VudGVuY2VzYCwgdGhlIGZpcnN0IGxldHRlciBvZiBlYWNoIHNlbnRlbmNlIGRlZmF1bHRzIHRvIGEgY2FwaXRhbCBsZXR0ZXI7IGFsbCBvdGhlciBsZXR0ZXJzIGRlZmF1bHQgdG8gbG93ZXJjYXNlXG4qICAgYHdvcmRzYCwgdGhlIGZpcnN0IGxldHRlciBvZiBlYWNoIHdvcmQgZGVmYXVsdHMgdG8gYSBjYXBpdGFsIGxldHRlcjsgYWxsIG90aGVyIGxldHRlcnMgZGVmYXVsdCB0byBsb3dlcmNhc2VcbiogICBgY2hhcmFjdGVyc2AsIGFsbCBsZXR0ZXJzIHNob3VsZCBkZWZhdWx0IHRvIHVwcGVyY2FzZSJ9LHJlZmVyZW5jZXM6W3tuYW1lOiJNRE4gUmVmZXJlbmNlIix1cmw6Imh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RvY3MvV2ViL0hUTUwvR2xvYmFsX2F0dHJpYnV0ZXMvYXV0b2NhcGl0YWxpemUifV19LHtuYW1lOiJjbGFzcyIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZTonQSBzcGFjZS1zZXBhcmF0ZWQgbGlzdCBvZiB0aGUgY2xhc3NlcyBvZiB0aGUgZWxlbWVudC4gQ2xhc3NlcyBhbGxvd3MgQ1NTIGFuZCBKYXZhU2NyaXB0IHRvIHNlbGVjdCBhbmQgYWNjZXNzIHNwZWNpZmljIGVsZW1lbnRzIHZpYSB0aGUgW2NsYXNzIHNlbGVjdG9yc10oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvQ1NTL0NsYXNzX3NlbGVjdG9ycykgb3IgZnVuY3Rpb25zIGxpa2UgdGhlIG1ldGhvZCBbYERvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoKWBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RvY3MvV2ViL0FQSS9Eb2N1bWVudC9nZXRFbGVtZW50c0J5Q2xhc3NOYW1lICJyZXR1cm5zIGFuIGFycmF5LWxpa2Ugb2JqZWN0IG9mIGFsbCBjaGlsZCBlbGVtZW50cyB3aGljaCBoYXZlIGFsbCBvZiB0aGUgZ2l2ZW4gY2xhc3MgbmFtZXMuIikuJ30scmVmZXJlbmNlczpbe25hbWU6Ik1ETiBSZWZlcmVuY2UiLHVybDoiaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvSFRNTC9HbG9iYWxfYXR0cmlidXRlcy9jbGFzcyJ9XX0se25hbWU6ImNvbnRlbnRlZGl0YWJsZSIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiQW4gZW51bWVyYXRlZCBhdHRyaWJ1dGUgaW5kaWNhdGluZyBpZiB0aGUgZWxlbWVudCBzaG91bGQgYmUgZWRpdGFibGUgYnkgdGhlIHVzZXIuIElmIHNvLCB0aGUgYnJvd3NlciBtb2RpZmllcyBpdHMgd2lkZ2V0IHRvIGFsbG93IGVkaXRpbmcuIFRoZSBhdHRyaWJ1dGUgbXVzdCB0YWtlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczpcblxuKiAgIGB0cnVlYCBvciB0aGUgX2VtcHR5IHN0cmluZ18sIHdoaWNoIGluZGljYXRlcyB0aGF0IHRoZSBlbGVtZW50IG11c3QgYmUgZWRpdGFibGU7XG4qICAgYGZhbHNlYCwgd2hpY2ggaW5kaWNhdGVzIHRoYXQgdGhlIGVsZW1lbnQgbXVzdCBub3QgYmUgZWRpdGFibGUuIn0scmVmZXJlbmNlczpbe25hbWU6Ik1ETiBSZWZlcmVuY2UiLHVybDoiaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvSFRNTC9HbG9iYWxfYXR0cmlidXRlcy9jb250ZW50ZWRpdGFibGUifV19LHtuYW1lOiJjb250ZXh0bWVudSIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZTonVGhlIGBbKippZCoqXSgjYXR0ci1pZClgIG9mIGEgW2A8bWVudT5gXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvbWVudSAiVGhlIEhUTUwgPG1lbnU+IGVsZW1lbnQgcmVwcmVzZW50cyBhIGdyb3VwIG9mIGNvbW1hbmRzIHRoYXQgYSB1c2VyIGNhbiBwZXJmb3JtIG9yIGFjdGl2YXRlLiBUaGlzIGluY2x1ZGVzIGJvdGggbGlzdCBtZW51cywgd2hpY2ggbWlnaHQgYXBwZWFyIGFjcm9zcyB0aGUgdG9wIG9mIGEgc2NyZWVuLCBhcyB3ZWxsIGFzIGNvbnRleHQgbWVudXMsIHN1Y2ggYXMgdGhvc2UgdGhhdCBtaWdodCBhcHBlYXIgdW5kZXJuZWF0aCBhIGJ1dHRvbiBhZnRlciBpdCBoYXMgYmVlbiBjbGlja2VkLiIpIHRvIHVzZSBhcyB0aGUgY29udGV4dHVhbCBtZW51IGZvciB0aGlzIGVsZW1lbnQuJ30scmVmZXJlbmNlczpbe25hbWU6Ik1ETiBSZWZlcmVuY2UiLHVybDoiaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvSFRNTC9HbG9iYWxfYXR0cmlidXRlcy9jb250ZXh0bWVudSJ9XX0se25hbWU6ImRpciIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiQW4gZW51bWVyYXRlZCBhdHRyaWJ1dGUgaW5kaWNhdGluZyB0aGUgZGlyZWN0aW9uYWxpdHkgb2YgdGhlIGVsZW1lbnQncyB0ZXh0LiBJdCBjYW4gaGF2ZSB0aGUgZm9sbG93aW5nIHZhbHVlczpcblxuKiAgIGBsdHJgLCB3aGljaCBtZWFucyBfbGVmdCB0byByaWdodF8gYW5kIGlzIHRvIGJlIHVzZWQgZm9yIGxhbmd1YWdlcyB0aGF0IGFyZSB3cml0dGVuIGZyb20gdGhlIGxlZnQgdG8gdGhlIHJpZ2h0IChsaWtlIEVuZ2xpc2gpO1xuKiAgIGBydGxgLCB3aGljaCBtZWFucyBfcmlnaHQgdG8gbGVmdF8gYW5kIGlzIHRvIGJlIHVzZWQgZm9yIGxhbmd1YWdlcyB0aGF0IGFyZSB3cml0dGVuIGZyb20gdGhlIHJpZ2h0IHRvIHRoZSBsZWZ0IChsaWtlIEFyYWJpYyk7XG4qICAgYGF1dG9gLCB3aGljaCBsZXRzIHRoZSB1c2VyIGFnZW50IGRlY2lkZS4gSXQgdXNlcyBhIGJhc2ljIGFsZ29yaXRobSBhcyBpdCBwYXJzZXMgdGhlIGNoYXJhY3RlcnMgaW5zaWRlIHRoZSBlbGVtZW50IHVudGlsIGl0IGZpbmRzIGEgY2hhcmFjdGVyIHdpdGggYSBzdHJvbmcgZGlyZWN0aW9uYWxpdHksIHRoZW4gaXQgYXBwbGllcyB0aGF0IGRpcmVjdGlvbmFsaXR5IHRvIHRoZSB3aG9sZSBlbGVtZW50LiJ9LHZhbHVlU2V0OiJkIixyZWZlcmVuY2VzOlt7bmFtZToiTUROIFJlZmVyZW5jZSIsdXJsOiJodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kb2NzL1dlYi9IVE1ML0dsb2JhbF9hdHRyaWJ1dGVzL2RpciJ9XX0se25hbWU6ImRyYWdnYWJsZSIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiQW4gZW51bWVyYXRlZCBhdHRyaWJ1dGUgaW5kaWNhdGluZyB3aGV0aGVyIHRoZSBlbGVtZW50IGNhbiBiZSBkcmFnZ2VkLCB1c2luZyB0aGUgW0RyYWcgYW5kIERyb3AgQVBJXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kb2NzL0RyYWdEcm9wL0RyYWdfYW5kX0Ryb3ApLiBJdCBjYW4gaGF2ZSB0aGUgZm9sbG93aW5nIHZhbHVlczpcblxuKiAgIGB0cnVlYCwgd2hpY2ggaW5kaWNhdGVzIHRoYXQgdGhlIGVsZW1lbnQgbWF5IGJlIGRyYWdnZWRcbiogICBgZmFsc2VgLCB3aGljaCBpbmRpY2F0ZXMgdGhhdCB0aGUgZWxlbWVudCBtYXkgbm90IGJlIGRyYWdnZWQuIn0sdmFsdWVTZXQ6ImIiLHJlZmVyZW5jZXM6W3tuYW1lOiJNRE4gUmVmZXJlbmNlIix1cmw6Imh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RvY3MvV2ViL0hUTUwvR2xvYmFsX2F0dHJpYnV0ZXMvZHJhZ2dhYmxlIn1dfSx7bmFtZToiZHJvcHpvbmUiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IkFuIGVudW1lcmF0ZWQgYXR0cmlidXRlIGluZGljYXRpbmcgd2hhdCB0eXBlcyBvZiBjb250ZW50IGNhbiBiZSBkcm9wcGVkIG9uIGFuIGVsZW1lbnQsIHVzaW5nIHRoZSBbRHJhZyBhbmQgRHJvcCBBUEldKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RvY3MvRHJhZ0Ryb3AvRHJhZ19hbmRfRHJvcCkuIEl0IGNhbiBoYXZlIHRoZSBmb2xsb3dpbmcgdmFsdWVzOlxuXG4qICAgYGNvcHlgLCB3aGljaCBpbmRpY2F0ZXMgdGhhdCBkcm9wcGluZyB3aWxsIGNyZWF0ZSBhIGNvcHkgb2YgdGhlIGVsZW1lbnQgdGhhdCB3YXMgZHJhZ2dlZFxuKiAgIGBtb3ZlYCwgd2hpY2ggaW5kaWNhdGVzIHRoYXQgdGhlIGVsZW1lbnQgdGhhdCB3YXMgZHJhZ2dlZCB3aWxsIGJlIG1vdmVkIHRvIHRoaXMgbmV3IGxvY2F0aW9uLlxuKiAgIGBsaW5rYCwgd2lsbCBjcmVhdGUgYSBsaW5rIHRvIHRoZSBkcmFnZ2VkIGRhdGEuIn19LHtuYW1lOiJleHBvcnRwYXJ0cyIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiVXNlZCB0byB0cmFuc2l0aXZlbHkgZXhwb3J0IHNoYWRvdyBwYXJ0cyBmcm9tIGEgbmVzdGVkIHNoYWRvdyB0cmVlIGludG8gYSBjb250YWluaW5nIGxpZ2h0IHRyZWUuIn0scmVmZXJlbmNlczpbe25hbWU6Ik1ETiBSZWZlcmVuY2UiLHVybDoiaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvSFRNTC9HbG9iYWxfYXR0cmlidXRlcy9leHBvcnRwYXJ0cyJ9XX0se25hbWU6ImhpZGRlbiIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiQSBCb29sZWFuIGF0dHJpYnV0ZSBpbmRpY2F0ZXMgdGhhdCB0aGUgZWxlbWVudCBpcyBub3QgeWV0LCBvciBpcyBubyBsb25nZXIsIF9yZWxldmFudF8uIEZvciBleGFtcGxlLCBpdCBjYW4gYmUgdXNlZCB0byBoaWRlIGVsZW1lbnRzIG9mIHRoZSBwYWdlIHRoYXQgY2FuJ3QgYmUgdXNlZCB1bnRpbCB0aGUgbG9naW4gcHJvY2VzcyBoYXMgYmVlbiBjb21wbGV0ZWQuIFRoZSBicm93c2VyIHdvbid0IHJlbmRlciBzdWNoIGVsZW1lbnRzLiBUaGlzIGF0dHJpYnV0ZSBtdXN0IG5vdCBiZSB1c2VkIHRvIGhpZGUgY29udGVudCB0aGF0IGNvdWxkIGxlZ2l0aW1hdGVseSBiZSBzaG93bi4ifSx2YWx1ZVNldDoidiIscmVmZXJlbmNlczpbe25hbWU6Ik1ETiBSZWZlcmVuY2UiLHVybDoiaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvSFRNTC9HbG9iYWxfYXR0cmlidXRlcy9oaWRkZW4ifV19LHtuYW1lOiJpZCIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiRGVmaW5lcyBhIHVuaXF1ZSBpZGVudGlmaWVyIChJRCkgd2hpY2ggbXVzdCBiZSB1bmlxdWUgaW4gdGhlIHdob2xlIGRvY3VtZW50LiBJdHMgcHVycG9zZSBpcyB0byBpZGVudGlmeSB0aGUgZWxlbWVudCB3aGVuIGxpbmtpbmcgKHVzaW5nIGEgZnJhZ21lbnQgaWRlbnRpZmllciksIHNjcmlwdGluZywgb3Igc3R5bGluZyAod2l0aCBDU1MpLiJ9LHJlZmVyZW5jZXM6W3tuYW1lOiJNRE4gUmVmZXJlbmNlIix1cmw6Imh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RvY3MvV2ViL0hUTUwvR2xvYmFsX2F0dHJpYnV0ZXMvaWQifV19LHtuYW1lOiJpbnB1dG1vZGUiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6J1Byb3ZpZGVzIGEgaGludCB0byBicm93c2VycyBhcyB0byB0aGUgdHlwZSBvZiB2aXJ0dWFsIGtleWJvYXJkIGNvbmZpZ3VyYXRpb24gdG8gdXNlIHdoZW4gZWRpdGluZyB0aGlzIGVsZW1lbnQgb3IgaXRzIGNvbnRlbnRzLiBVc2VkIHByaW1hcmlseSBvbiBbYDxpbnB1dD5gXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvaW5wdXQgIlRoZSBIVE1MIDxpbnB1dD4gZWxlbWVudCBpcyB1c2VkIHRvIGNyZWF0ZSBpbnRlcmFjdGl2ZSBjb250cm9scyBmb3Igd2ViLWJhc2VkIGZvcm1zIGluIG9yZGVyIHRvIGFjY2VwdCBkYXRhIGZyb20gdGhlIHVzZXI7IGEgd2lkZSB2YXJpZXR5IG9mIHR5cGVzIG9mIGlucHV0IGRhdGEgYW5kIGNvbnRyb2wgd2lkZ2V0cyBhcmUgYXZhaWxhYmxlLCBkZXBlbmRpbmcgb24gdGhlIGRldmljZSBhbmQgdXNlciBhZ2VudC4iKSBlbGVtZW50cywgYnV0IGlzIHVzYWJsZSBvbiBhbnkgZWxlbWVudCB3aGlsZSBpbiBgW2NvbnRlbnRlZGl0YWJsZV0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvSFRNTC9HbG9iYWxfYXR0cmlidXRlcyNhdHRyLWNvbnRlbnRlZGl0YWJsZSlgIG1vZGUuJ30scmVmZXJlbmNlczpbe25hbWU6Ik1ETiBSZWZlcmVuY2UiLHVybDoiaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvSFRNTC9HbG9iYWxfYXR0cmlidXRlcy9pbnB1dG1vZGUifV19LHtuYW1lOiJpcyIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiQWxsb3dzIHlvdSB0byBzcGVjaWZ5IHRoYXQgYSBzdGFuZGFyZCBIVE1MIGVsZW1lbnQgc2hvdWxkIGJlaGF2ZSBsaWtlIGEgcmVnaXN0ZXJlZCBjdXN0b20gYnVpbHQtaW4gZWxlbWVudCAoc2VlIFtVc2luZyBjdXN0b20gZWxlbWVudHNdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RvY3MvV2ViL1dlYl9Db21wb25lbnRzL1VzaW5nX2N1c3RvbV9lbGVtZW50cykgZm9yIG1vcmUgZGV0YWlscykuIn0scmVmZXJlbmNlczpbe25hbWU6Ik1ETiBSZWZlcmVuY2UiLHVybDoiaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvSFRNTC9HbG9iYWxfYXR0cmlidXRlcy9pcyJ9XX0se25hbWU6Iml0ZW1pZCIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiVGhlIHVuaXF1ZSwgZ2xvYmFsIGlkZW50aWZpZXIgb2YgYW4gaXRlbS4ifSxyZWZlcmVuY2VzOlt7bmFtZToiTUROIFJlZmVyZW5jZSIsdXJsOiJodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kb2NzL1dlYi9IVE1ML0dsb2JhbF9hdHRyaWJ1dGVzL2l0ZW1pZCJ9XX0se25hbWU6Iml0ZW1wcm9wIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJVc2VkIHRvIGFkZCBwcm9wZXJ0aWVzIHRvIGFuIGl0ZW0uIEV2ZXJ5IEhUTUwgZWxlbWVudCBtYXkgaGF2ZSBhbiBgaXRlbXByb3BgIGF0dHJpYnV0ZSBzcGVjaWZpZWQsIHdoZXJlIGFuIGBpdGVtcHJvcGAgY29uc2lzdHMgb2YgYSBuYW1lIGFuZCB2YWx1ZSBwYWlyLiJ9LHJlZmVyZW5jZXM6W3tuYW1lOiJNRE4gUmVmZXJlbmNlIix1cmw6Imh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RvY3MvV2ViL0hUTUwvR2xvYmFsX2F0dHJpYnV0ZXMvaXRlbXByb3AifV19LHtuYW1lOiJpdGVtcmVmIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJQcm9wZXJ0aWVzIHRoYXQgYXJlIG5vdCBkZXNjZW5kYW50cyBvZiBhbiBlbGVtZW50IHdpdGggdGhlIGBpdGVtc2NvcGVgIGF0dHJpYnV0ZSBjYW4gYmUgYXNzb2NpYXRlZCB3aXRoIHRoZSBpdGVtIHVzaW5nIGFuIGBpdGVtcmVmYC4gSXQgcHJvdmlkZXMgYSBsaXN0IG9mIGVsZW1lbnQgaWRzIChub3QgYGl0ZW1pZGBzKSB3aXRoIGFkZGl0aW9uYWwgcHJvcGVydGllcyBlbHNld2hlcmUgaW4gdGhlIGRvY3VtZW50LiJ9LHJlZmVyZW5jZXM6W3tuYW1lOiJNRE4gUmVmZXJlbmNlIix1cmw6Imh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RvY3MvV2ViL0hUTUwvR2xvYmFsX2F0dHJpYnV0ZXMvaXRlbXJlZiJ9XX0se25hbWU6Iml0ZW1zY29wZSIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiYGl0ZW1zY29wZWAgKHVzdWFsbHkpIHdvcmtzIGFsb25nIHdpdGggYFtpdGVtdHlwZV0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvSFRNTC9HbG9iYWxfYXR0cmlidXRlcyNhdHRyLWl0ZW10eXBlKWAgdG8gc3BlY2lmeSB0aGF0IHRoZSBIVE1MIGNvbnRhaW5lZCBpbiBhIGJsb2NrIGlzIGFib3V0IGEgcGFydGljdWxhciBpdGVtLiBgaXRlbXNjb3BlYCBjcmVhdGVzIHRoZSBJdGVtIGFuZCBkZWZpbmVzIHRoZSBzY29wZSBvZiB0aGUgYGl0ZW10eXBlYCBhc3NvY2lhdGVkIHdpdGggaXQuIGBpdGVtdHlwZWAgaXMgYSB2YWxpZCBVUkwgb2YgYSB2b2NhYnVsYXJ5IChzdWNoIGFzIFtzY2hlbWEub3JnXShodHRwczovL3NjaGVtYS5vcmcvKSkgdGhhdCBkZXNjcmliZXMgdGhlIGl0ZW0gYW5kIGl0cyBwcm9wZXJ0aWVzIGNvbnRleHQuIn0sdmFsdWVTZXQ6InYiLHJlZmVyZW5jZXM6W3tuYW1lOiJNRE4gUmVmZXJlbmNlIix1cmw6Imh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RvY3MvV2ViL0hUTUwvR2xvYmFsX2F0dHJpYnV0ZXMvaXRlbXNjb3BlIn1dfSx7bmFtZToiaXRlbXR5cGUiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlNwZWNpZmllcyB0aGUgVVJMIG9mIHRoZSB2b2NhYnVsYXJ5IHRoYXQgd2lsbCBiZSB1c2VkIHRvIGRlZmluZSBgaXRlbXByb3BgcyAoaXRlbSBwcm9wZXJ0aWVzKSBpbiB0aGUgZGF0YSBzdHJ1Y3R1cmUuIGBbaXRlbXNjb3BlXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kb2NzL1dlYi9IVE1ML0dsb2JhbF9hdHRyaWJ1dGVzI2F0dHItaXRlbXNjb3BlKWAgaXMgdXNlZCB0byBzZXQgdGhlIHNjb3BlIG9mIHdoZXJlIGluIHRoZSBkYXRhIHN0cnVjdHVyZSB0aGUgdm9jYWJ1bGFyeSBzZXQgYnkgYGl0ZW10eXBlYCB3aWxsIGJlIGFjdGl2ZS4ifSxyZWZlcmVuY2VzOlt7bmFtZToiTUROIFJlZmVyZW5jZSIsdXJsOiJodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kb2NzL1dlYi9IVE1ML0dsb2JhbF9hdHRyaWJ1dGVzL2l0ZW10eXBlIn1dfSx7bmFtZToibGFuZyIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiSGVscHMgZGVmaW5lIHRoZSBsYW5ndWFnZSBvZiBhbiBlbGVtZW50OiB0aGUgbGFuZ3VhZ2UgdGhhdCBub24tZWRpdGFibGUgZWxlbWVudHMgYXJlIGluLCBvciB0aGUgbGFuZ3VhZ2UgdGhhdCBlZGl0YWJsZSBlbGVtZW50cyBzaG91bGQgYmUgd3JpdHRlbiBpbiBieSB0aGUgdXNlci4gVGhlIGF0dHJpYnV0ZSBjb250YWlucyBvbmUg4oCcbGFuZ3VhZ2UgdGFn4oCdIChtYWRlIG9mIGh5cGhlbi1zZXBhcmF0ZWQg4oCcbGFuZ3VhZ2Ugc3VidGFnc+KAnSkgaW4gdGhlIGZvcm1hdCBkZWZpbmVkIGluIFtfVGFncyBmb3IgSWRlbnRpZnlpbmcgTGFuZ3VhZ2VzIChCQ1A0NylfXShodHRwczovL3d3dy5pZXRmLm9yZy9yZmMvYmNwL2JjcDQ3LnR4dCkuIFsqKnhtbDpsYW5nKipdKCNhdHRyLXhtbDpsYW5nKSBoYXMgcHJpb3JpdHkgb3ZlciBpdC4ifSxyZWZlcmVuY2VzOlt7bmFtZToiTUROIFJlZmVyZW5jZSIsdXJsOiJodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kb2NzL1dlYi9IVE1ML0dsb2JhbF9hdHRyaWJ1dGVzL2xhbmcifV19LHtuYW1lOiJwYXJ0IixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOidBIHNwYWNlLXNlcGFyYXRlZCBsaXN0IG9mIHRoZSBwYXJ0IG5hbWVzIG9mIHRoZSBlbGVtZW50LiBQYXJ0IG5hbWVzIGFsbG93cyBDU1MgdG8gc2VsZWN0IGFuZCBzdHlsZSBzcGVjaWZpYyBlbGVtZW50cyBpbiBhIHNoYWRvdyB0cmVlIHZpYSB0aGUgW2A6OnBhcnRgXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kb2NzL1dlYi9DU1MvOjpwYXJ0ICJUaGUgOjpwYXJ0IENTUyBwc2V1ZG8tZWxlbWVudCByZXByZXNlbnRzIGFueSBlbGVtZW50IHdpdGhpbiBhIHNoYWRvdyB0cmVlIHRoYXQgaGFzIGEgbWF0Y2hpbmcgcGFydCBhdHRyaWJ1dGUuIikgcHNldWRvLWVsZW1lbnQuJ30scmVmZXJlbmNlczpbe25hbWU6Ik1ETiBSZWZlcmVuY2UiLHVybDoiaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvSFRNTC9HbG9iYWxfYXR0cmlidXRlcy9wYXJ0In1dfSx7bmFtZToicm9sZSIsdmFsdWVTZXQ6InJvbGVzIn0se25hbWU6InNsb3QiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IkFzc2lnbnMgYSBzbG90IGluIGEgW3NoYWRvdyBET01dKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RvY3MvV2ViL1dlYl9Db21wb25lbnRzL1NoYWRvd19ET00pIHNoYWRvdyB0cmVlIHRvIGFuIGVsZW1lbnQ6IEFuIGVsZW1lbnQgd2l0aCBhIGBzbG90YCBhdHRyaWJ1dGUgaXMgYXNzaWduZWQgdG8gdGhlIHNsb3QgY3JlYXRlZCBieSB0aGUgW2A8c2xvdD5gXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvc2xvdCBcIlRoZSBIVE1MIDxzbG90PiBlbGVtZW504oCUcGFydCBvZiB0aGUgV2ViIENvbXBvbmVudHMgdGVjaG5vbG9neSBzdWl0ZeKAlGlzIGEgcGxhY2Vob2xkZXIgaW5zaWRlIGEgd2ViIGNvbXBvbmVudCB0aGF0IHlvdSBjYW4gZmlsbCB3aXRoIHlvdXIgb3duIG1hcmt1cCwgd2hpY2ggbGV0cyB5b3UgY3JlYXRlIHNlcGFyYXRlIERPTSB0cmVlcyBhbmQgcHJlc2VudCB0aGVtIHRvZ2V0aGVyLlwiKSBlbGVtZW50IHdob3NlIGBbbmFtZV0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvSFRNTC9FbGVtZW50L3Nsb3QjYXR0ci1uYW1lKWAgYXR0cmlidXRlJ3MgdmFsdWUgbWF0Y2hlcyB0aGF0IGBzbG90YCBhdHRyaWJ1dGUncyB2YWx1ZS4ifSxyZWZlcmVuY2VzOlt7bmFtZToiTUROIFJlZmVyZW5jZSIsdXJsOiJodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kb2NzL1dlYi9IVE1ML0dsb2JhbF9hdHRyaWJ1dGVzL3Nsb3QifV19LHtuYW1lOiJzcGVsbGNoZWNrIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJBbiBlbnVtZXJhdGVkIGF0dHJpYnV0ZSBkZWZpbmVzIHdoZXRoZXIgdGhlIGVsZW1lbnQgbWF5IGJlIGNoZWNrZWQgZm9yIHNwZWxsaW5nIGVycm9ycy4gSXQgbWF5IGhhdmUgdGhlIGZvbGxvd2luZyB2YWx1ZXM6XG5cbiogICBgdHJ1ZWAsIHdoaWNoIGluZGljYXRlcyB0aGF0IHRoZSBlbGVtZW50IHNob3VsZCBiZSwgaWYgcG9zc2libGUsIGNoZWNrZWQgZm9yIHNwZWxsaW5nIGVycm9ycztcbiogICBgZmFsc2VgLCB3aGljaCBpbmRpY2F0ZXMgdGhhdCB0aGUgZWxlbWVudCBzaG91bGQgbm90IGJlIGNoZWNrZWQgZm9yIHNwZWxsaW5nIGVycm9ycy4ifSx2YWx1ZVNldDoiYiIscmVmZXJlbmNlczpbe25hbWU6Ik1ETiBSZWZlcmVuY2UiLHVybDoiaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvSFRNTC9HbG9iYWxfYXR0cmlidXRlcy9zcGVsbGNoZWNrIn1dfSx7bmFtZToic3R5bGUiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6J0NvbnRhaW5zIFtDU1NdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RvY3MvV2ViL0NTUykgc3R5bGluZyBkZWNsYXJhdGlvbnMgdG8gYmUgYXBwbGllZCB0byB0aGUgZWxlbWVudC4gTm90ZSB0aGF0IGl0IGlzIHJlY29tbWVuZGVkIGZvciBzdHlsZXMgdG8gYmUgZGVmaW5lZCBpbiBhIHNlcGFyYXRlIGZpbGUgb3IgZmlsZXMuIFRoaXMgYXR0cmlidXRlIGFuZCB0aGUgW2A8c3R5bGU+YF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvSFRNTC9FbGVtZW50L3N0eWxlICJUaGUgSFRNTCA8c3R5bGU+IGVsZW1lbnQgY29udGFpbnMgc3R5bGUgaW5mb3JtYXRpb24gZm9yIGEgZG9jdW1lbnQsIG9yIHBhcnQgb2YgYSBkb2N1bWVudC4iKSBlbGVtZW50IGhhdmUgbWFpbmx5IHRoZSBwdXJwb3NlIG9mIGFsbG93aW5nIGZvciBxdWljayBzdHlsaW5nLCBmb3IgZXhhbXBsZSBmb3IgdGVzdGluZyBwdXJwb3Nlcy4nfSxyZWZlcmVuY2VzOlt7bmFtZToiTUROIFJlZmVyZW5jZSIsdXJsOiJodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kb2NzL1dlYi9IVE1ML0dsb2JhbF9hdHRyaWJ1dGVzL3N0eWxlIn1dfSx7bmFtZToidGFiaW5kZXgiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6YEFuIGludGVnZXIgYXR0cmlidXRlIGluZGljYXRpbmcgaWYgdGhlIGVsZW1lbnQgY2FuIHRha2UgaW5wdXQgZm9jdXMgKGlzIF9mb2N1c2FibGVfKSwgaWYgaXQgc2hvdWxkIHBhcnRpY2lwYXRlIHRvIHNlcXVlbnRpYWwga2V5Ym9hcmQgbmF2aWdhdGlvbiwgYW5kIGlmIHNvLCBhdCB3aGF0IHBvc2l0aW9uLiBJdCBjYW4gdGFrZSBzZXZlcmFsIHZhbHVlczoKCiogICBhIF9uZWdhdGl2ZSB2YWx1ZV8gbWVhbnMgdGhhdCB0aGUgZWxlbWVudCBzaG91bGQgYmUgZm9jdXNhYmxlLCBidXQgc2hvdWxkIG5vdCBiZSByZWFjaGFibGUgdmlhIHNlcXVlbnRpYWwga2V5Ym9hcmQgbmF2aWdhdGlvbjsKKiAgIFxgMFxgIG1lYW5zIHRoYXQgdGhlIGVsZW1lbnQgc2hvdWxkIGJlIGZvY3VzYWJsZSBhbmQgcmVhY2hhYmxlIHZpYSBzZXF1ZW50aWFsIGtleWJvYXJkIG5hdmlnYXRpb24sIGJ1dCBpdHMgcmVsYXRpdmUgb3JkZXIgaXMgZGVmaW5lZCBieSB0aGUgcGxhdGZvcm0gY29udmVudGlvbjsKKiAgIGEgX3Bvc2l0aXZlIHZhbHVlXyBtZWFucyB0aGF0IHRoZSBlbGVtZW50IHNob3VsZCBiZSBmb2N1c2FibGUgYW5kIHJlYWNoYWJsZSB2aWEgc2VxdWVudGlhbCBrZXlib2FyZCBuYXZpZ2F0aW9uOyB0aGUgb3JkZXIgaW4gd2hpY2ggdGhlIGVsZW1lbnRzIGFyZSBmb2N1c2VkIGlzIHRoZSBpbmNyZWFzaW5nIHZhbHVlIG9mIHRoZSBbKip0YWJpbmRleCoqXSgjYXR0ci10YWJpbmRleCkuIElmIHNldmVyYWwgZWxlbWVudHMgc2hhcmUgdGhlIHNhbWUgdGFiaW5kZXgsIHRoZWlyIHJlbGF0aXZlIG9yZGVyIGZvbGxvd3MgdGhlaXIgcmVsYXRpdmUgcG9zaXRpb25zIGluIHRoZSBkb2N1bWVudC5gfSxyZWZlcmVuY2VzOlt7bmFtZToiTUROIFJlZmVyZW5jZSIsdXJsOiJodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kb2NzL1dlYi9IVE1ML0dsb2JhbF9hdHRyaWJ1dGVzL3RhYmluZGV4In1dfSx7bmFtZToidGl0bGUiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IkNvbnRhaW5zIGEgdGV4dCByZXByZXNlbnRpbmcgYWR2aXNvcnkgaW5mb3JtYXRpb24gcmVsYXRlZCB0byB0aGUgZWxlbWVudCBpdCBiZWxvbmdzIHRvLiBTdWNoIGluZm9ybWF0aW9uIGNhbiB0eXBpY2FsbHksIGJ1dCBub3QgbmVjZXNzYXJpbHksIGJlIHByZXNlbnRlZCB0byB0aGUgdXNlciBhcyBhIHRvb2x0aXAuIn0scmVmZXJlbmNlczpbe25hbWU6Ik1ETiBSZWZlcmVuY2UiLHVybDoiaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvSFRNTC9HbG9iYWxfYXR0cmlidXRlcy90aXRsZSJ9XX0se25hbWU6InRyYW5zbGF0ZSIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiQW4gZW51bWVyYXRlZCBhdHRyaWJ1dGUgdGhhdCBpcyB1c2VkIHRvIHNwZWNpZnkgd2hldGhlciBhbiBlbGVtZW50J3MgYXR0cmlidXRlIHZhbHVlcyBhbmQgdGhlIHZhbHVlcyBvZiBpdHMgW2BUZXh0YF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvQVBJL1RleHQgXCJUaGUgVGV4dCBpbnRlcmZhY2UgcmVwcmVzZW50cyB0aGUgdGV4dHVhbCBjb250ZW50IG9mIEVsZW1lbnQgb3IgQXR0ci4gSWYgYW4gZWxlbWVudCBoYXMgbm8gbWFya3VwIHdpdGhpbiBpdHMgY29udGVudCwgaXQgaGFzIGEgc2luZ2xlIGNoaWxkIGltcGxlbWVudGluZyBUZXh0IHRoYXQgY29udGFpbnMgdGhlIGVsZW1lbnQncyB0ZXh0LiBIb3dldmVyLCBpZiB0aGUgZWxlbWVudCBjb250YWlucyBtYXJrdXAsIGl0IGlzIHBhcnNlZCBpbnRvIGluZm9ybWF0aW9uIGl0ZW1zIGFuZCBUZXh0IG5vZGVzIHRoYXQgZm9ybSBpdHMgY2hpbGRyZW4uXCIpIG5vZGUgY2hpbGRyZW4gYXJlIHRvIGJlIHRyYW5zbGF0ZWQgd2hlbiB0aGUgcGFnZSBpcyBsb2NhbGl6ZWQsIG9yIHdoZXRoZXIgdG8gbGVhdmUgdGhlbSB1bmNoYW5nZWQuIEl0IGNhbiBoYXZlIHRoZSBmb2xsb3dpbmcgdmFsdWVzOlxuXG4qICAgZW1wdHkgc3RyaW5nIGFuZCBgeWVzYCwgd2hpY2ggaW5kaWNhdGVzIHRoYXQgdGhlIGVsZW1lbnQgd2lsbCBiZSB0cmFuc2xhdGVkLlxuKiAgIGBub2AsIHdoaWNoIGluZGljYXRlcyB0aGF0IHRoZSBlbGVtZW50IHdpbGwgbm90IGJlIHRyYW5zbGF0ZWQuIn0sdmFsdWVTZXQ6InkiLHJlZmVyZW5jZXM6W3tuYW1lOiJNRE4gUmVmZXJlbmNlIix1cmw6Imh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RvY3MvV2ViL0hUTUwvR2xvYmFsX2F0dHJpYnV0ZXMvdHJhbnNsYXRlIn1dfSx7bmFtZToib25hYm9ydCIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiVGhlIGxvYWRpbmcgb2YgYSByZXNvdXJjZSBoYXMgYmVlbiBhYm9ydGVkLiJ9fSx7bmFtZToib25ibHVyIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJBbiBlbGVtZW50IGhhcyBsb3N0IGZvY3VzIChkb2VzIG5vdCBidWJibGUpLiJ9fSx7bmFtZToib25jYW5wbGF5IixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJUaGUgdXNlciBhZ2VudCBjYW4gcGxheSB0aGUgbWVkaWEsIGJ1dCBlc3RpbWF0ZXMgdGhhdCBub3QgZW5vdWdoIGRhdGEgaGFzIGJlZW4gbG9hZGVkIHRvIHBsYXkgdGhlIG1lZGlhIHVwIHRvIGl0cyBlbmQgd2l0aG91dCBoYXZpbmcgdG8gc3RvcCBmb3IgZnVydGhlciBidWZmZXJpbmcgb2YgY29udGVudC4ifX0se25hbWU6Im9uY2FucGxheXRocm91Z2giLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlRoZSB1c2VyIGFnZW50IGNhbiBwbGF5IHRoZSBtZWRpYSB1cCB0byBpdHMgZW5kIHdpdGhvdXQgaGF2aW5nIHRvIHN0b3AgZm9yIGZ1cnRoZXIgYnVmZmVyaW5nIG9mIGNvbnRlbnQuIn19LHtuYW1lOiJvbmNoYW5nZSIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiVGhlIGNoYW5nZSBldmVudCBpcyBmaXJlZCBmb3IgPGlucHV0PiwgPHNlbGVjdD4sIGFuZCA8dGV4dGFyZWE+IGVsZW1lbnRzIHdoZW4gYSBjaGFuZ2UgdG8gdGhlIGVsZW1lbnQncyB2YWx1ZSBpcyBjb21taXR0ZWQgYnkgdGhlIHVzZXIuIn19LHtuYW1lOiJvbmNsaWNrIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJBIHBvaW50aW5nIGRldmljZSBidXR0b24gaGFzIGJlZW4gcHJlc3NlZCBhbmQgcmVsZWFzZWQgb24gYW4gZWxlbWVudC4ifX0se25hbWU6Im9uY29udGV4dG1lbnUiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlRoZSByaWdodCBidXR0b24gb2YgdGhlIG1vdXNlIGlzIGNsaWNrZWQgKGJlZm9yZSB0aGUgY29udGV4dCBtZW51IGlzIGRpc3BsYXllZCkuIn19LHtuYW1lOiJvbmRibGNsaWNrIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJBIHBvaW50aW5nIGRldmljZSBidXR0b24gaXMgY2xpY2tlZCB0d2ljZSBvbiBhbiBlbGVtZW50LiJ9fSx7bmFtZToib25kcmFnIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJBbiBlbGVtZW50IG9yIHRleHQgc2VsZWN0aW9uIGlzIGJlaW5nIGRyYWdnZWQgKGV2ZXJ5IDM1MG1zKS4ifX0se25hbWU6Im9uZHJhZ2VuZCIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiQSBkcmFnIG9wZXJhdGlvbiBpcyBiZWluZyBlbmRlZCAoYnkgcmVsZWFzaW5nIGEgbW91c2UgYnV0dG9uIG9yIGhpdHRpbmcgdGhlIGVzY2FwZSBrZXkpLiJ9fSx7bmFtZToib25kcmFnZW50ZXIiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IkEgZHJhZ2dlZCBlbGVtZW50IG9yIHRleHQgc2VsZWN0aW9uIGVudGVycyBhIHZhbGlkIGRyb3AgdGFyZ2V0LiJ9fSx7bmFtZToib25kcmFnbGVhdmUiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IkEgZHJhZ2dlZCBlbGVtZW50IG9yIHRleHQgc2VsZWN0aW9uIGxlYXZlcyBhIHZhbGlkIGRyb3AgdGFyZ2V0LiJ9fSx7bmFtZToib25kcmFnb3ZlciIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiQW4gZWxlbWVudCBvciB0ZXh0IHNlbGVjdGlvbiBpcyBiZWluZyBkcmFnZ2VkIG92ZXIgYSB2YWxpZCBkcm9wIHRhcmdldCAoZXZlcnkgMzUwbXMpLiJ9fSx7bmFtZToib25kcmFnc3RhcnQiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlRoZSB1c2VyIHN0YXJ0cyBkcmFnZ2luZyBhbiBlbGVtZW50IG9yIHRleHQgc2VsZWN0aW9uLiJ9fSx7bmFtZToib25kcm9wIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJBbiBlbGVtZW50IGlzIGRyb3BwZWQgb24gYSB2YWxpZCBkcm9wIHRhcmdldC4ifX0se25hbWU6Im9uZHVyYXRpb25jaGFuZ2UiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlRoZSBkdXJhdGlvbiBhdHRyaWJ1dGUgaGFzIGJlZW4gdXBkYXRlZC4ifX0se25hbWU6Im9uZW1wdGllZCIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiVGhlIG1lZGlhIGhhcyBiZWNvbWUgZW1wdHk7IGZvciBleGFtcGxlLCB0aGlzIGV2ZW50IGlzIHNlbnQgaWYgdGhlIG1lZGlhIGhhcyBhbHJlYWR5IGJlZW4gbG9hZGVkIChvciBwYXJ0aWFsbHkgbG9hZGVkKSwgYW5kIHRoZSBsb2FkKCkgbWV0aG9kIGlzIGNhbGxlZCB0byByZWxvYWQgaXQuIn19LHtuYW1lOiJvbmVuZGVkIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJQbGF5YmFjayBoYXMgc3RvcHBlZCBiZWNhdXNlIHRoZSBlbmQgb2YgdGhlIG1lZGlhIHdhcyByZWFjaGVkLiJ9fSx7bmFtZToib25lcnJvciIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiQSByZXNvdXJjZSBmYWlsZWQgdG8gbG9hZC4ifX0se25hbWU6Im9uZm9jdXMiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IkFuIGVsZW1lbnQgaGFzIHJlY2VpdmVkIGZvY3VzIChkb2VzIG5vdCBidWJibGUpLiJ9fSx7bmFtZToib25mb3JtY2hhbmdlIn0se25hbWU6Im9uZm9ybWlucHV0In0se25hbWU6Im9uaW5wdXQiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlRoZSB2YWx1ZSBvZiBhbiBlbGVtZW50IGNoYW5nZXMgb3IgdGhlIGNvbnRlbnQgb2YgYW4gZWxlbWVudCB3aXRoIHRoZSBhdHRyaWJ1dGUgY29udGVudGVkaXRhYmxlIGlzIG1vZGlmaWVkLiJ9fSx7bmFtZToib25pbnZhbGlkIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJBIHN1Ym1pdHRhYmxlIGVsZW1lbnQgaGFzIGJlZW4gY2hlY2tlZCBhbmQgZG9lc24ndCBzYXRpc2Z5IGl0cyBjb25zdHJhaW50cy4ifX0se25hbWU6Im9ua2V5ZG93biIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiQSBrZXkgaXMgcHJlc3NlZCBkb3duLiJ9fSx7bmFtZToib25rZXlwcmVzcyIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiQSBrZXkgaXMgcHJlc3NlZCBkb3duIGFuZCB0aGF0IGtleSBub3JtYWxseSBwcm9kdWNlcyBhIGNoYXJhY3RlciB2YWx1ZSAodXNlIGlucHV0IGluc3RlYWQpLiJ9fSx7bmFtZToib25rZXl1cCIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiQSBrZXkgaXMgcmVsZWFzZWQuIn19LHtuYW1lOiJvbmxvYWQiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IkEgcmVzb3VyY2UgYW5kIGl0cyBkZXBlbmRlbnQgcmVzb3VyY2VzIGhhdmUgZmluaXNoZWQgbG9hZGluZy4ifX0se25hbWU6Im9ubG9hZGVkZGF0YSIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiVGhlIGZpcnN0IGZyYW1lIG9mIHRoZSBtZWRpYSBoYXMgZmluaXNoZWQgbG9hZGluZy4ifX0se25hbWU6Im9ubG9hZGVkbWV0YWRhdGEiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlRoZSBtZXRhZGF0YSBoYXMgYmVlbiBsb2FkZWQuIn19LHtuYW1lOiJvbmxvYWRzdGFydCIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiUHJvZ3Jlc3MgaGFzIGJlZ3VuLiJ9fSx7bmFtZToib25tb3VzZWRvd24iLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IkEgcG9pbnRpbmcgZGV2aWNlIGJ1dHRvbiAodXN1YWxseSBhIG1vdXNlKSBpcyBwcmVzc2VkIG9uIGFuIGVsZW1lbnQuIn19LHtuYW1lOiJvbm1vdXNlbW92ZSIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiQSBwb2ludGluZyBkZXZpY2UgaXMgbW92ZWQgb3ZlciBhbiBlbGVtZW50LiJ9fSx7bmFtZToib25tb3VzZW91dCIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiQSBwb2ludGluZyBkZXZpY2UgaXMgbW92ZWQgb2ZmIHRoZSBlbGVtZW50IHRoYXQgaGFzIHRoZSBsaXN0ZW5lciBhdHRhY2hlZCBvciBvZmYgb25lIG9mIGl0cyBjaGlsZHJlbi4ifX0se25hbWU6Im9ubW91c2VvdmVyIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJBIHBvaW50aW5nIGRldmljZSBpcyBtb3ZlZCBvbnRvIHRoZSBlbGVtZW50IHRoYXQgaGFzIHRoZSBsaXN0ZW5lciBhdHRhY2hlZCBvciBvbnRvIG9uZSBvZiBpdHMgY2hpbGRyZW4uIn19LHtuYW1lOiJvbm1vdXNldXAiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IkEgcG9pbnRpbmcgZGV2aWNlIGJ1dHRvbiBpcyByZWxlYXNlZCBvdmVyIGFuIGVsZW1lbnQuIn19LHtuYW1lOiJvbm1vdXNld2hlZWwifSx7bmFtZToib25tb3VzZWVudGVyIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJBIHBvaW50aW5nIGRldmljZSBpcyBtb3ZlZCBvbnRvIHRoZSBlbGVtZW50IHRoYXQgaGFzIHRoZSBsaXN0ZW5lciBhdHRhY2hlZC4ifX0se25hbWU6Im9ubW91c2VsZWF2ZSIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiQSBwb2ludGluZyBkZXZpY2UgaXMgbW92ZWQgb2ZmIHRoZSBlbGVtZW50IHRoYXQgaGFzIHRoZSBsaXN0ZW5lciBhdHRhY2hlZC4ifX0se25hbWU6Im9ucGF1c2UiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlBsYXliYWNrIGhhcyBiZWVuIHBhdXNlZC4ifX0se25hbWU6Im9ucGxheSIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiUGxheWJhY2sgaGFzIGJlZ3VuLiJ9fSx7bmFtZToib25wbGF5aW5nIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJQbGF5YmFjayBpcyByZWFkeSB0byBzdGFydCBhZnRlciBoYXZpbmcgYmVlbiBwYXVzZWQgb3IgZGVsYXllZCBkdWUgdG8gbGFjayBvZiBkYXRhLiJ9fSx7bmFtZToib25wcm9ncmVzcyIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiSW4gcHJvZ3Jlc3MuIn19LHtuYW1lOiJvbnJhdGVjaGFuZ2UiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlRoZSBwbGF5YmFjayByYXRlIGhhcyBjaGFuZ2VkLiJ9fSx7bmFtZToib25yZXNldCIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiQSBmb3JtIGlzIHJlc2V0LiJ9fSx7bmFtZToib25yZXNpemUiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlRoZSBkb2N1bWVudCB2aWV3IGhhcyBiZWVuIHJlc2l6ZWQuIn19LHtuYW1lOiJvbnJlYWR5c3RhdGVjaGFuZ2UiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlRoZSByZWFkeVN0YXRlIGF0dHJpYnV0ZSBvZiBhIGRvY3VtZW50IGhhcyBjaGFuZ2VkLiJ9fSx7bmFtZToib25zY3JvbGwiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlRoZSBkb2N1bWVudCB2aWV3IG9yIGFuIGVsZW1lbnQgaGFzIGJlZW4gc2Nyb2xsZWQuIn19LHtuYW1lOiJvbnNlZWtlZCIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiQSBzZWVrIG9wZXJhdGlvbiBjb21wbGV0ZWQuIn19LHtuYW1lOiJvbnNlZWtpbmciLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IkEgc2VlayBvcGVyYXRpb24gYmVnYW4uIn19LHtuYW1lOiJvbnNlbGVjdCIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiU29tZSB0ZXh0IGlzIGJlaW5nIHNlbGVjdGVkLiJ9fSx7bmFtZToib25zaG93IixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJBIGNvbnRleHRtZW51IGV2ZW50IHdhcyBmaXJlZCBvbi9idWJibGVkIHRvIGFuIGVsZW1lbnQgdGhhdCBoYXMgYSBjb250ZXh0bWVudSBhdHRyaWJ1dGUifX0se25hbWU6Im9uc3RhbGxlZCIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiVGhlIHVzZXIgYWdlbnQgaXMgdHJ5aW5nIHRvIGZldGNoIG1lZGlhIGRhdGEsIGJ1dCBkYXRhIGlzIHVuZXhwZWN0ZWRseSBub3QgZm9ydGhjb21pbmcuIn19LHtuYW1lOiJvbnN1Ym1pdCIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiQSBmb3JtIGlzIHN1Ym1pdHRlZC4ifX0se25hbWU6Im9uc3VzcGVuZCIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiTWVkaWEgZGF0YSBsb2FkaW5nIGhhcyBiZWVuIHN1c3BlbmRlZC4ifX0se25hbWU6Im9udGltZXVwZGF0ZSIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiVGhlIHRpbWUgaW5kaWNhdGVkIGJ5IHRoZSBjdXJyZW50VGltZSBhdHRyaWJ1dGUgaGFzIGJlZW4gdXBkYXRlZC4ifX0se25hbWU6Im9udm9sdW1lY2hhbmdlIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJUaGUgdm9sdW1lIGhhcyBjaGFuZ2VkLiJ9fSx7bmFtZToib253YWl0aW5nIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJQbGF5YmFjayBoYXMgc3RvcHBlZCBiZWNhdXNlIG9mIGEgdGVtcG9yYXJ5IGxhY2sgb2YgZGF0YS4ifX0se25hbWU6Im9ucG9pbnRlcmNhbmNlbCIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiVGhlIHBvaW50ZXIgaXMgdW5saWtlbHkgdG8gcHJvZHVjZSBhbnkgbW9yZSBldmVudHMuIn19LHtuYW1lOiJvbnBvaW50ZXJkb3duIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJUaGUgcG9pbnRlciBlbnRlcnMgdGhlIGFjdGl2ZSBidXR0b25zIHN0YXRlLiJ9fSx7bmFtZToib25wb2ludGVyZW50ZXIiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlBvaW50aW5nIGRldmljZSBpcyBtb3ZlZCBpbnNpZGUgdGhlIGhpdC10ZXN0aW5nIGJvdW5kYXJ5LiJ9fSx7bmFtZToib25wb2ludGVybGVhdmUiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlBvaW50aW5nIGRldmljZSBpcyBtb3ZlZCBvdXQgb2YgdGhlIGhpdC10ZXN0aW5nIGJvdW5kYXJ5LiJ9fSx7bmFtZToib25wb2ludGVybG9ja2NoYW5nZSIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiVGhlIHBvaW50ZXIgd2FzIGxvY2tlZCBvciByZWxlYXNlZC4ifX0se25hbWU6Im9ucG9pbnRlcmxvY2tlcnJvciIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiSXQgd2FzIGltcG9zc2libGUgdG8gbG9jayB0aGUgcG9pbnRlciBmb3IgdGVjaG5pY2FsIHJlYXNvbnMgb3IgYmVjYXVzZSB0aGUgcGVybWlzc2lvbiB3YXMgZGVuaWVkLiJ9fSx7bmFtZToib25wb2ludGVybW92ZSIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiVGhlIHBvaW50ZXIgY2hhbmdlZCBjb29yZGluYXRlcy4ifX0se25hbWU6Im9ucG9pbnRlcm91dCIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiVGhlIHBvaW50aW5nIGRldmljZSBtb3ZlZCBvdXQgb2YgaGl0LXRlc3RpbmcgYm91bmRhcnkgb3IgbGVhdmVzIGRldGVjdGFibGUgaG92ZXIgcmFuZ2UuIn19LHtuYW1lOiJvbnBvaW50ZXJvdmVyIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJUaGUgcG9pbnRpbmcgZGV2aWNlIGlzIG1vdmVkIGludG8gdGhlIGhpdC10ZXN0aW5nIGJvdW5kYXJ5LiJ9fSx7bmFtZToib25wb2ludGVydXAiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlRoZSBwb2ludGVyIGxlYXZlcyB0aGUgYWN0aXZlIGJ1dHRvbnMgc3RhdGUuIn19LHtuYW1lOiJhcmlhLWFjdGl2ZWRlc2NlbmRhbnQiLHJlZmVyZW5jZXM6W3tuYW1lOiJXQUktQVJJQSBSZWZlcmVuY2UiLHVybDoiaHR0cHM6Ly93d3cudzMub3JnL1RSL3dhaS1hcmlhLTEuMS8jYXJpYS1hY3RpdmVkZXNjZW5kYW50In1dLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IklkZW50aWZpZXMgdGhlIGN1cnJlbnRseSBhY3RpdmUgZWxlbWVudCB3aGVuIERPTSBmb2N1cyBpcyBvbiBhIFtgY29tcG9zaXRlYF0oaHR0cHM6Ly93d3cudzMub3JnL1RSL3dhaS1hcmlhLTEuMS8jY29tcG9zaXRlKSB3aWRnZXQsIFtgdGV4dGJveGBdKGh0dHBzOi8vd3d3LnczLm9yZy9UUi93YWktYXJpYS0xLjEvI3RleHRib3gpLCBbYGdyb3VwYF0oaHR0cHM6Ly93d3cudzMub3JnL1RSL3dhaS1hcmlhLTEuMS8jZ3JvdXApLCBvciBbYGFwcGxpY2F0aW9uYF0oaHR0cHM6Ly93d3cudzMub3JnL1RSL3dhaS1hcmlhLTEuMS8jYXBwbGljYXRpb24pLiJ9fSx7bmFtZToiYXJpYS1hdG9taWMiLHZhbHVlU2V0OiJiIixyZWZlcmVuY2VzOlt7bmFtZToiV0FJLUFSSUEgUmVmZXJlbmNlIix1cmw6Imh0dHBzOi8vd3d3LnczLm9yZy9UUi93YWktYXJpYS0xLjEvI2FyaWEtYXRvbWljIn1dLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IkluZGljYXRlcyB3aGV0aGVyIFthc3Npc3RpdmUgdGVjaG5vbG9naWVzXShodHRwczovL3d3dy53My5vcmcvVFIvd2FpLWFyaWEtMS4xLyNkZm4tYXNzaXN0aXZlLXRlY2hub2xvZ3kpIHdpbGwgcHJlc2VudCBhbGwsIG9yIG9ubHkgcGFydHMgb2YsIHRoZSBjaGFuZ2VkIHJlZ2lvbiBiYXNlZCBvbiB0aGUgY2hhbmdlIG5vdGlmaWNhdGlvbnMgZGVmaW5lZCBieSB0aGUgW2BhcmlhLXJlbGV2YW50YF0oaHR0cHM6Ly93d3cudzMub3JnL1RSL3dhaS1hcmlhLTEuMS8jYXJpYS1yZWxldmFudCkgYXR0cmlidXRlLiJ9fSx7bmFtZToiYXJpYS1hdXRvY29tcGxldGUiLHZhbHVlU2V0OiJhdXRvY29tcGxldGUiLHJlZmVyZW5jZXM6W3tuYW1lOiJXQUktQVJJQSBSZWZlcmVuY2UiLHVybDoiaHR0cHM6Ly93d3cudzMub3JnL1RSL3dhaS1hcmlhLTEuMS8jYXJpYS1hdXRvY29tcGxldGUifV0sZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiSW5kaWNhdGVzIHdoZXRoZXIgaW5wdXR0aW5nIHRleHQgY291bGQgdHJpZ2dlciBkaXNwbGF5IG9mIG9uZSBvciBtb3JlIHByZWRpY3Rpb25zIG9mIHRoZSB1c2VyJ3MgaW50ZW5kZWQgdmFsdWUgZm9yIGFuIGlucHV0IGFuZCBzcGVjaWZpZXMgaG93IHByZWRpY3Rpb25zIHdvdWxkIGJlIHByZXNlbnRlZCBpZiB0aGV5IGFyZSBtYWRlLiJ9fSx7bmFtZToiYXJpYS1idXN5Iix2YWx1ZVNldDoiYiIscmVmZXJlbmNlczpbe25hbWU6IldBSS1BUklBIFJlZmVyZW5jZSIsdXJsOiJodHRwczovL3d3dy53My5vcmcvVFIvd2FpLWFyaWEtMS4xLyNhcmlhLWJ1c3kifV0sZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiSW5kaWNhdGVzIGFuIGVsZW1lbnQgaXMgYmVpbmcgbW9kaWZpZWQgYW5kIHRoYXQgYXNzaXN0aXZlIHRlY2hub2xvZ2llcyBfTUFZXyB3YW50IHRvIHdhaXQgdW50aWwgdGhlIG1vZGlmaWNhdGlvbnMgYXJlIGNvbXBsZXRlIGJlZm9yZSBleHBvc2luZyB0aGVtIHRvIHRoZSB1c2VyLiJ9fSx7bmFtZToiYXJpYS1jaGVja2VkIix2YWx1ZVNldDoidHJpc3RhdGUiLHJlZmVyZW5jZXM6W3tuYW1lOiJXQUktQVJJQSBSZWZlcmVuY2UiLHVybDoiaHR0cHM6Ly93d3cudzMub3JnL1RSL3dhaS1hcmlhLTEuMS8jYXJpYS1jaGVja2VkIn1dLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6J0luZGljYXRlcyB0aGUgY3VycmVudCAiY2hlY2tlZCIgW3N0YXRlXShodHRwczovL3d3dy53My5vcmcvVFIvd2FpLWFyaWEtMS4xLyNkZm4tc3RhdGUpIG9mIGNoZWNrYm94ZXMsIHJhZGlvIGJ1dHRvbnMsIGFuZCBvdGhlciBbd2lkZ2V0c10oaHR0cHM6Ly93d3cudzMub3JnL1RSL3dhaS1hcmlhLTEuMS8jZGZuLXdpZGdldCkuIFNlZSByZWxhdGVkIFtgYXJpYS1wcmVzc2VkYF0oaHR0cHM6Ly93d3cudzMub3JnL1RSL3dhaS1hcmlhLTEuMS8jYXJpYS1wcmVzc2VkKSBhbmQgW2BhcmlhLXNlbGVjdGVkYF0oaHR0cHM6Ly93d3cudzMub3JnL1RSL3dhaS1hcmlhLTEuMS8jYXJpYS1zZWxlY3RlZCkuJ319LHtuYW1lOiJhcmlhLWNvbGNvdW50IixyZWZlcmVuY2VzOlt7bmFtZToiV0FJLUFSSUEgUmVmZXJlbmNlIix1cmw6Imh0dHBzOi8vd3d3LnczLm9yZy9UUi93YWktYXJpYS0xLjEvI2FyaWEtY29sY291bnQifV0sZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiRGVmaW5lcyB0aGUgdG90YWwgbnVtYmVyIG9mIGNvbHVtbnMgaW4gYSBbYHRhYmxlYF0oaHR0cHM6Ly93d3cudzMub3JnL1RSL3dhaS1hcmlhLTEuMS8jdGFibGUpLCBbYGdyaWRgXShodHRwczovL3d3dy53My5vcmcvVFIvd2FpLWFyaWEtMS4xLyNncmlkKSwgb3IgW2B0cmVlZ3JpZGBdKGh0dHBzOi8vd3d3LnczLm9yZy9UUi93YWktYXJpYS0xLjEvI3RyZWVncmlkKS4gU2VlIHJlbGF0ZWQgW2BhcmlhLWNvbGluZGV4YF0oaHR0cHM6Ly93d3cudzMub3JnL1RSL3dhaS1hcmlhLTEuMS8jYXJpYS1jb2xpbmRleCkuIn19LHtuYW1lOiJhcmlhLWNvbGluZGV4IixyZWZlcmVuY2VzOlt7bmFtZToiV0FJLUFSSUEgUmVmZXJlbmNlIix1cmw6Imh0dHBzOi8vd3d3LnczLm9yZy9UUi93YWktYXJpYS0xLjEvI2FyaWEtY29saW5kZXgifV0sZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiRGVmaW5lcyBhbiBbZWxlbWVudCdzXShodHRwczovL3d3dy53My5vcmcvVFIvd2FpLWFyaWEtMS4xLyNkZm4tZWxlbWVudCkgY29sdW1uIGluZGV4IG9yIHBvc2l0aW9uIHdpdGggcmVzcGVjdCB0byB0aGUgdG90YWwgbnVtYmVyIG9mIGNvbHVtbnMgd2l0aGluIGEgW2B0YWJsZWBdKGh0dHBzOi8vd3d3LnczLm9yZy9UUi93YWktYXJpYS0xLjEvI3RhYmxlKSwgW2BncmlkYF0oaHR0cHM6Ly93d3cudzMub3JnL1RSL3dhaS1hcmlhLTEuMS8jZ3JpZCksIG9yIFtgdHJlZWdyaWRgXShodHRwczovL3d3dy53My5vcmcvVFIvd2FpLWFyaWEtMS4xLyN0cmVlZ3JpZCkuIFNlZSByZWxhdGVkIFtgYXJpYS1jb2xjb3VudGBdKGh0dHBzOi8vd3d3LnczLm9yZy9UUi93YWktYXJpYS0xLjEvI2FyaWEtY29sY291bnQpIGFuZCBbYGFyaWEtY29sc3BhbmBdKGh0dHBzOi8vd3d3LnczLm9yZy9UUi93YWktYXJpYS0xLjEvI2FyaWEtY29sc3BhbikuIn19LHtuYW1lOiJhcmlhLWNvbHNwYW4iLHJlZmVyZW5jZXM6W3tuYW1lOiJXQUktQVJJQSBSZWZlcmVuY2UiLHVybDoiaHR0cHM6Ly93d3cudzMub3JnL1RSL3dhaS1hcmlhLTEuMS8jYXJpYS1jb2xzcGFuIn1dLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IkRlZmluZXMgdGhlIG51bWJlciBvZiBjb2x1bW5zIHNwYW5uZWQgYnkgYSBjZWxsIG9yIGdyaWRjZWxsIHdpdGhpbiBhIFtgdGFibGVgXShodHRwczovL3d3dy53My5vcmcvVFIvd2FpLWFyaWEtMS4xLyN0YWJsZSksIFtgZ3JpZGBdKGh0dHBzOi8vd3d3LnczLm9yZy9UUi93YWktYXJpYS0xLjEvI2dyaWQpLCBvciBbYHRyZWVncmlkYF0oaHR0cHM6Ly93d3cudzMub3JnL1RSL3dhaS1hcmlhLTEuMS8jdHJlZWdyaWQpLiBTZWUgcmVsYXRlZCBbYGFyaWEtY29saW5kZXhgXShodHRwczovL3d3dy53My5vcmcvVFIvd2FpLWFyaWEtMS4xLyNhcmlhLWNvbGluZGV4KSBhbmQgW2BhcmlhLXJvd3NwYW5gXShodHRwczovL3d3dy53My5vcmcvVFIvd2FpLWFyaWEtMS4xLyNhcmlhLXJvd3NwYW4pLiJ9fSx7bmFtZToiYXJpYS1jb250cm9scyIscmVmZXJlbmNlczpbe25hbWU6IldBSS1BUklBIFJlZmVyZW5jZSIsdXJsOiJodHRwczovL3d3dy53My5vcmcvVFIvd2FpLWFyaWEtMS4xLyNhcmlhLWNvbnRyb2xzIn1dLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IklkZW50aWZpZXMgdGhlIFtlbGVtZW50XShodHRwczovL3d3dy53My5vcmcvVFIvd2FpLWFyaWEtMS4xLyNkZm4tZWxlbWVudCkgKG9yIGVsZW1lbnRzKSB3aG9zZSBjb250ZW50cyBvciBwcmVzZW5jZSBhcmUgY29udHJvbGxlZCBieSB0aGUgY3VycmVudCBlbGVtZW50LiBTZWUgcmVsYXRlZCBbYGFyaWEtb3duc2BdKGh0dHBzOi8vd3d3LnczLm9yZy9UUi93YWktYXJpYS0xLjEvI2FyaWEtb3ducykuIn19LHtuYW1lOiJhcmlhLWN1cnJlbnQiLHZhbHVlU2V0OiJjdXJyZW50IixyZWZlcmVuY2VzOlt7bmFtZToiV0FJLUFSSUEgUmVmZXJlbmNlIix1cmw6Imh0dHBzOi8vd3d3LnczLm9yZy9UUi93YWktYXJpYS0xLjEvI2FyaWEtY3VycmVudCJ9XSxkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJJbmRpY2F0ZXMgdGhlIFtlbGVtZW50XShodHRwczovL3d3dy53My5vcmcvVFIvd2FpLWFyaWEtMS4xLyNkZm4tZWxlbWVudCkgdGhhdCByZXByZXNlbnRzIHRoZSBjdXJyZW50IGl0ZW0gd2l0aGluIGEgY29udGFpbmVyIG9yIHNldCBvZiByZWxhdGVkIGVsZW1lbnRzLiJ9fSx7bmFtZToiYXJpYS1kZXNjcmliZWRieSIscmVmZXJlbmNlczpbe25hbWU6IldBSS1BUklBIFJlZmVyZW5jZSIsdXJsOiJodHRwczovL3d3dy53My5vcmcvVFIvd2FpLWFyaWEtMS4xLyNhcmlhLWRlc2NyaWJlZGJ5In1dLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IklkZW50aWZpZXMgdGhlIFtlbGVtZW50XShodHRwczovL3d3dy53My5vcmcvVFIvd2FpLWFyaWEtMS4xLyNkZm4tZWxlbWVudCkgKG9yIGVsZW1lbnRzKSB0aGF0IGRlc2NyaWJlcyB0aGUgW29iamVjdF0oaHR0cHM6Ly93d3cudzMub3JnL1RSL3dhaS1hcmlhLTEuMS8jZGZuLW9iamVjdCkuIFNlZSByZWxhdGVkIFtgYXJpYS1sYWJlbGxlZGJ5YF0oaHR0cHM6Ly93d3cudzMub3JnL1RSL3dhaS1hcmlhLTEuMS8jYXJpYS1sYWJlbGxlZGJ5KS4ifX0se25hbWU6ImFyaWEtZGlzYWJsZWQiLHZhbHVlU2V0OiJiIixyZWZlcmVuY2VzOlt7bmFtZToiV0FJLUFSSUEgUmVmZXJlbmNlIix1cmw6Imh0dHBzOi8vd3d3LnczLm9yZy9UUi93YWktYXJpYS0xLjEvI2FyaWEtZGlzYWJsZWQifV0sZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiSW5kaWNhdGVzIHRoYXQgdGhlIFtlbGVtZW50XShodHRwczovL3d3dy53My5vcmcvVFIvd2FpLWFyaWEtMS4xLyNkZm4tZWxlbWVudCkgaXMgW3BlcmNlaXZhYmxlXShodHRwczovL3d3dy53My5vcmcvVFIvd2FpLWFyaWEtMS4xLyNkZm4tcGVyY2VpdmFibGUpIGJ1dCBkaXNhYmxlZCwgc28gaXQgaXMgbm90IGVkaXRhYmxlIG9yIG90aGVyd2lzZSBbb3BlcmFibGVdKGh0dHBzOi8vd3d3LnczLm9yZy9UUi93YWktYXJpYS0xLjEvI2Rmbi1vcGVyYWJsZSkuIFNlZSByZWxhdGVkIFtgYXJpYS1oaWRkZW5gXShodHRwczovL3d3dy53My5vcmcvVFIvd2FpLWFyaWEtMS4xLyNhcmlhLWhpZGRlbikgYW5kIFtgYXJpYS1yZWFkb25seWBdKGh0dHBzOi8vd3d3LnczLm9yZy9UUi93YWktYXJpYS0xLjEvI2FyaWEtcmVhZG9ubHkpLiJ9fSx7bmFtZToiYXJpYS1kcm9wZWZmZWN0Iix2YWx1ZVNldDoiZHJvcGVmZmVjdCIscmVmZXJlbmNlczpbe25hbWU6IldBSS1BUklBIFJlZmVyZW5jZSIsdXJsOiJodHRwczovL3d3dy53My5vcmcvVFIvd2FpLWFyaWEtMS4xLyNhcmlhLWRyb3BlZmZlY3QifV0sZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiXFxbRGVwcmVjYXRlZCBpbiBBUklBIDEuMVxcXSBJbmRpY2F0ZXMgd2hhdCBmdW5jdGlvbnMgY2FuIGJlIHBlcmZvcm1lZCB3aGVuIGEgZHJhZ2dlZCBvYmplY3QgaXMgcmVsZWFzZWQgb24gdGhlIGRyb3AgdGFyZ2V0LiJ9fSx7bmFtZToiYXJpYS1lcnJvcm1lc3NhZ2UiLHJlZmVyZW5jZXM6W3tuYW1lOiJXQUktQVJJQSBSZWZlcmVuY2UiLHVybDoiaHR0cHM6Ly93d3cudzMub3JnL1RSL3dhaS1hcmlhLTEuMS8jYXJpYS1lcnJvcm1lc3NhZ2UifV0sZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiSWRlbnRpZmllcyB0aGUgW2VsZW1lbnRdKGh0dHBzOi8vd3d3LnczLm9yZy9UUi93YWktYXJpYS0xLjEvI2Rmbi1lbGVtZW50KSB0aGF0IHByb3ZpZGVzIGFuIGVycm9yIG1lc3NhZ2UgZm9yIHRoZSBbb2JqZWN0XShodHRwczovL3d3dy53My5vcmcvVFIvd2FpLWFyaWEtMS4xLyNkZm4tb2JqZWN0KS4gU2VlIHJlbGF0ZWQgW2BhcmlhLWludmFsaWRgXShodHRwczovL3d3dy53My5vcmcvVFIvd2FpLWFyaWEtMS4xLyNhcmlhLWludmFsaWQpIGFuZCBbYGFyaWEtZGVzY3JpYmVkYnlgXShodHRwczovL3d3dy53My5vcmcvVFIvd2FpLWFyaWEtMS4xLyNhcmlhLWRlc2NyaWJlZGJ5KS4ifX0se25hbWU6ImFyaWEtZXhwYW5kZWQiLHZhbHVlU2V0OiJ1IixyZWZlcmVuY2VzOlt7bmFtZToiV0FJLUFSSUEgUmVmZXJlbmNlIix1cmw6Imh0dHBzOi8vd3d3LnczLm9yZy9UUi93YWktYXJpYS0xLjEvI2FyaWEtZXhwYW5kZWQifV0sZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiSW5kaWNhdGVzIHdoZXRoZXIgdGhlIGVsZW1lbnQsIG9yIGFub3RoZXIgZ3JvdXBpbmcgZWxlbWVudCBpdCBjb250cm9scywgaXMgY3VycmVudGx5IGV4cGFuZGVkIG9yIGNvbGxhcHNlZC4ifX0se25hbWU6ImFyaWEtZmxvd3RvIixyZWZlcmVuY2VzOlt7bmFtZToiV0FJLUFSSUEgUmVmZXJlbmNlIix1cmw6Imh0dHBzOi8vd3d3LnczLm9yZy9UUi93YWktYXJpYS0xLjEvI2FyaWEtZmxvd3RvIn1dLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IklkZW50aWZpZXMgdGhlIG5leHQgW2VsZW1lbnRdKGh0dHBzOi8vd3d3LnczLm9yZy9UUi93YWktYXJpYS0xLjEvI2Rmbi1lbGVtZW50KSAob3IgZWxlbWVudHMpIGluIGFuIGFsdGVybmF0ZSByZWFkaW5nIG9yZGVyIG9mIGNvbnRlbnQgd2hpY2gsIGF0IHRoZSB1c2VyJ3MgZGlzY3JldGlvbiwgYWxsb3dzIGFzc2lzdGl2ZSB0ZWNobm9sb2d5IHRvIG92ZXJyaWRlIHRoZSBnZW5lcmFsIGRlZmF1bHQgb2YgcmVhZGluZyBpbiBkb2N1bWVudCBzb3VyY2Ugb3JkZXIuIn19LHtuYW1lOiJhcmlhLWdyYWJiZWQiLHZhbHVlU2V0OiJ1IixyZWZlcmVuY2VzOlt7bmFtZToiV0FJLUFSSUEgUmVmZXJlbmNlIix1cmw6Imh0dHBzOi8vd3d3LnczLm9yZy9UUi93YWktYXJpYS0xLjEvI2FyaWEtZ3JhYmJlZCJ9XSxkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOmBcXFtEZXByZWNhdGVkIGluIEFSSUEgMS4xXFxdIEluZGljYXRlcyBhbiBlbGVtZW50J3MgImdyYWJiZWQiIFtzdGF0ZV0oaHR0cHM6Ly93d3cudzMub3JnL1RSL3dhaS1hcmlhLTEuMS8jZGZuLXN0YXRlKSBpbiBhIGRyYWctYW5kLWRyb3Agb3BlcmF0aW9uLmB9fSx7bmFtZToiYXJpYS1oYXNwb3B1cCIsdmFsdWVTZXQ6Imhhc3BvcHVwIixyZWZlcmVuY2VzOlt7bmFtZToiV0FJLUFSSUEgUmVmZXJlbmNlIix1cmw6Imh0dHBzOi8vd3d3LnczLm9yZy9UUi93YWktYXJpYS0xLjEvI2FyaWEtaGFzcG9wdXAifV0sZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiSW5kaWNhdGVzIHRoZSBhdmFpbGFiaWxpdHkgYW5kIHR5cGUgb2YgaW50ZXJhY3RpdmUgcG9wdXAgZWxlbWVudCwgc3VjaCBhcyBtZW51IG9yIGRpYWxvZywgdGhhdCBjYW4gYmUgdHJpZ2dlcmVkIGJ5IGFuIFtlbGVtZW50XShodHRwczovL3d3dy53My5vcmcvVFIvd2FpLWFyaWEtMS4xLyNkZm4tZWxlbWVudCkuIn19LHtuYW1lOiJhcmlhLWhpZGRlbiIsdmFsdWVTZXQ6ImIiLHJlZmVyZW5jZXM6W3tuYW1lOiJXQUktQVJJQSBSZWZlcmVuY2UiLHVybDoiaHR0cHM6Ly93d3cudzMub3JnL1RSL3dhaS1hcmlhLTEuMS8jYXJpYS1oaWRkZW4ifV0sZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiSW5kaWNhdGVzIHdoZXRoZXIgdGhlIFtlbGVtZW50XShodHRwczovL3d3dy53My5vcmcvVFIvd2FpLWFyaWEtMS4xLyNkZm4tZWxlbWVudCkgaXMgZXhwb3NlZCB0byBhbiBhY2Nlc3NpYmlsaXR5IEFQSS4gU2VlIHJlbGF0ZWQgW2BhcmlhLWRpc2FibGVkYF0oaHR0cHM6Ly93d3cudzMub3JnL1RSL3dhaS1hcmlhLTEuMS8jYXJpYS1kaXNhYmxlZCkuIn19LHtuYW1lOiJhcmlhLWludmFsaWQiLHZhbHVlU2V0OiJpbnZhbGlkIixyZWZlcmVuY2VzOlt7bmFtZToiV0FJLUFSSUEgUmVmZXJlbmNlIix1cmw6Imh0dHBzOi8vd3d3LnczLm9yZy9UUi93YWktYXJpYS0xLjEvI2FyaWEtaW52YWxpZCJ9XSxkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJJbmRpY2F0ZXMgdGhlIGVudGVyZWQgdmFsdWUgZG9lcyBub3QgY29uZm9ybSB0byB0aGUgZm9ybWF0IGV4cGVjdGVkIGJ5IHRoZSBhcHBsaWNhdGlvbi4gU2VlIHJlbGF0ZWQgW2BhcmlhLWVycm9ybWVzc2FnZWBdKGh0dHBzOi8vd3d3LnczLm9yZy9UUi93YWktYXJpYS0xLjEvI2FyaWEtZXJyb3JtZXNzYWdlKS4ifX0se25hbWU6ImFyaWEtbGFiZWwiLHJlZmVyZW5jZXM6W3tuYW1lOiJXQUktQVJJQSBSZWZlcmVuY2UiLHVybDoiaHR0cHM6Ly93d3cudzMub3JnL1RSL3dhaS1hcmlhLTEuMS8jYXJpYS1sYWJlbCJ9XSxkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJEZWZpbmVzIGEgc3RyaW5nIHZhbHVlIHRoYXQgbGFiZWxzIHRoZSBjdXJyZW50IGVsZW1lbnQuIFNlZSByZWxhdGVkIFtgYXJpYS1sYWJlbGxlZGJ5YF0oaHR0cHM6Ly93d3cudzMub3JnL1RSL3dhaS1hcmlhLTEuMS8jYXJpYS1sYWJlbGxlZGJ5KS4ifX0se25hbWU6ImFyaWEtbGFiZWxsZWRieSIscmVmZXJlbmNlczpbe25hbWU6IldBSS1BUklBIFJlZmVyZW5jZSIsdXJsOiJodHRwczovL3d3dy53My5vcmcvVFIvd2FpLWFyaWEtMS4xLyNhcmlhLWxhYmVsbGVkYnkifV0sZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiSWRlbnRpZmllcyB0aGUgW2VsZW1lbnRdKGh0dHBzOi8vd3d3LnczLm9yZy9UUi93YWktYXJpYS0xLjEvI2Rmbi1lbGVtZW50KSAob3IgZWxlbWVudHMpIHRoYXQgbGFiZWxzIHRoZSBjdXJyZW50IGVsZW1lbnQuIFNlZSByZWxhdGVkIFtgYXJpYS1kZXNjcmliZWRieWBdKGh0dHBzOi8vd3d3LnczLm9yZy9UUi93YWktYXJpYS0xLjEvI2FyaWEtZGVzY3JpYmVkYnkpLiJ9fSx7bmFtZToiYXJpYS1sZXZlbCIscmVmZXJlbmNlczpbe25hbWU6IldBSS1BUklBIFJlZmVyZW5jZSIsdXJsOiJodHRwczovL3d3dy53My5vcmcvVFIvd2FpLWFyaWEtMS4xLyNhcmlhLWxldmVsIn1dLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IkRlZmluZXMgdGhlIGhpZXJhcmNoaWNhbCBsZXZlbCBvZiBhbiBbZWxlbWVudF0oaHR0cHM6Ly93d3cudzMub3JnL1RSL3dhaS1hcmlhLTEuMS8jZGZuLWVsZW1lbnQpIHdpdGhpbiBhIHN0cnVjdHVyZS4ifX0se25hbWU6ImFyaWEtbGl2ZSIsdmFsdWVTZXQ6ImxpdmUiLHJlZmVyZW5jZXM6W3tuYW1lOiJXQUktQVJJQSBSZWZlcmVuY2UiLHVybDoiaHR0cHM6Ly93d3cudzMub3JnL1RSL3dhaS1hcmlhLTEuMS8jYXJpYS1saXZlIn1dLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IkluZGljYXRlcyB0aGF0IGFuIFtlbGVtZW50XShodHRwczovL3d3dy53My5vcmcvVFIvd2FpLWFyaWEtMS4xLyNkZm4tZWxlbWVudCkgd2lsbCBiZSB1cGRhdGVkLCBhbmQgZGVzY3JpYmVzIHRoZSB0eXBlcyBvZiB1cGRhdGVzIHRoZSBbdXNlciBhZ2VudHNdKGh0dHBzOi8vd3d3LnczLm9yZy9UUi93YWktYXJpYS0xLjEvI2Rmbi11c2VyLWFnZW50KSwgW2Fzc2lzdGl2ZSB0ZWNobm9sb2dpZXNdKGh0dHBzOi8vd3d3LnczLm9yZy9UUi93YWktYXJpYS0xLjEvI2Rmbi1hc3Npc3RpdmUtdGVjaG5vbG9neSksIGFuZCB1c2VyIGNhbiBleHBlY3QgZnJvbSB0aGUgW2xpdmUgcmVnaW9uXShodHRwczovL3d3dy53My5vcmcvVFIvd2FpLWFyaWEtMS4xLyNkZm4tbGl2ZS1yZWdpb24pLiJ9fSx7bmFtZToiYXJpYS1tb2RhbCIsdmFsdWVTZXQ6ImIiLHJlZmVyZW5jZXM6W3tuYW1lOiJXQUktQVJJQSBSZWZlcmVuY2UiLHVybDoiaHR0cHM6Ly93d3cudzMub3JnL1RSL3dhaS1hcmlhLTEuMS8jYXJpYS1tb2RhbCJ9XSxkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJJbmRpY2F0ZXMgd2hldGhlciBhbiBbZWxlbWVudF0oaHR0cHM6Ly93d3cudzMub3JnL1RSL3dhaS1hcmlhLTEuMS8jZGZuLWVsZW1lbnQpIGlzIG1vZGFsIHdoZW4gZGlzcGxheWVkLiJ9fSx7bmFtZToiYXJpYS1tdWx0aWxpbmUiLHZhbHVlU2V0OiJiIixyZWZlcmVuY2VzOlt7bmFtZToiV0FJLUFSSUEgUmVmZXJlbmNlIix1cmw6Imh0dHBzOi8vd3d3LnczLm9yZy9UUi93YWktYXJpYS0xLjEvI2FyaWEtbXVsdGlsaW5lIn1dLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IkluZGljYXRlcyB3aGV0aGVyIGEgdGV4dCBib3ggYWNjZXB0cyBtdWx0aXBsZSBsaW5lcyBvZiBpbnB1dCBvciBvbmx5IGEgc2luZ2xlIGxpbmUuIn19LHtuYW1lOiJhcmlhLW11bHRpc2VsZWN0YWJsZSIsdmFsdWVTZXQ6ImIiLHJlZmVyZW5jZXM6W3tuYW1lOiJXQUktQVJJQSBSZWZlcmVuY2UiLHVybDoiaHR0cHM6Ly93d3cudzMub3JnL1RSL3dhaS1hcmlhLTEuMS8jYXJpYS1tdWx0aXNlbGVjdGFibGUifV0sZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiSW5kaWNhdGVzIHRoYXQgdGhlIHVzZXIgbWF5IHNlbGVjdCBtb3JlIHRoYW4gb25lIGl0ZW0gZnJvbSB0aGUgY3VycmVudCBzZWxlY3RhYmxlIGRlc2NlbmRhbnRzLiJ9fSx7bmFtZToiYXJpYS1vcmllbnRhdGlvbiIsdmFsdWVTZXQ6Im9yaWVudGF0aW9uIixyZWZlcmVuY2VzOlt7bmFtZToiV0FJLUFSSUEgUmVmZXJlbmNlIix1cmw6Imh0dHBzOi8vd3d3LnczLm9yZy9UUi93YWktYXJpYS0xLjEvI2FyaWEtb3JpZW50YXRpb24ifV0sZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiSW5kaWNhdGVzIHdoZXRoZXIgdGhlIGVsZW1lbnQncyBvcmllbnRhdGlvbiBpcyBob3Jpem9udGFsLCB2ZXJ0aWNhbCwgb3IgdW5rbm93bi9hbWJpZ3VvdXMuIn19LHtuYW1lOiJhcmlhLW93bnMiLHJlZmVyZW5jZXM6W3tuYW1lOiJXQUktQVJJQSBSZWZlcmVuY2UiLHVybDoiaHR0cHM6Ly93d3cudzMub3JnL1RSL3dhaS1hcmlhLTEuMS8jYXJpYS1vd25zIn1dLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IklkZW50aWZpZXMgYW4gW2VsZW1lbnRdKGh0dHBzOi8vd3d3LnczLm9yZy9UUi93YWktYXJpYS0xLjEvI2Rmbi1lbGVtZW50KSAob3IgZWxlbWVudHMpIGluIG9yZGVyIHRvIGRlZmluZSBhIHZpc3VhbCwgZnVuY3Rpb25hbCwgb3IgY29udGV4dHVhbCBwYXJlbnQvY2hpbGQgW3JlbGF0aW9uc2hpcF0oaHR0cHM6Ly93d3cudzMub3JnL1RSL3dhaS1hcmlhLTEuMS8jZGZuLXJlbGF0aW9uc2hpcCkgYmV0d2VlbiBET00gZWxlbWVudHMgd2hlcmUgdGhlIERPTSBoaWVyYXJjaHkgY2Fubm90IGJlIHVzZWQgdG8gcmVwcmVzZW50IHRoZSByZWxhdGlvbnNoaXAuIFNlZSByZWxhdGVkIFtgYXJpYS1jb250cm9sc2BdKGh0dHBzOi8vd3d3LnczLm9yZy9UUi93YWktYXJpYS0xLjEvI2FyaWEtY29udHJvbHMpLiJ9fSx7bmFtZToiYXJpYS1wbGFjZWhvbGRlciIscmVmZXJlbmNlczpbe25hbWU6IldBSS1BUklBIFJlZmVyZW5jZSIsdXJsOiJodHRwczovL3d3dy53My5vcmcvVFIvd2FpLWFyaWEtMS4xLyNhcmlhLXBsYWNlaG9sZGVyIn1dLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IkRlZmluZXMgYSBzaG9ydCBoaW50IChhIHdvcmQgb3Igc2hvcnQgcGhyYXNlKSBpbnRlbmRlZCB0byBhaWQgdGhlIHVzZXIgd2l0aCBkYXRhIGVudHJ5IHdoZW4gdGhlIGNvbnRyb2wgaGFzIG5vIHZhbHVlLiBBIGhpbnQgY291bGQgYmUgYSBzYW1wbGUgdmFsdWUgb3IgYSBicmllZiBkZXNjcmlwdGlvbiBvZiB0aGUgZXhwZWN0ZWQgZm9ybWF0LiJ9fSx7bmFtZToiYXJpYS1wb3NpbnNldCIscmVmZXJlbmNlczpbe25hbWU6IldBSS1BUklBIFJlZmVyZW5jZSIsdXJsOiJodHRwczovL3d3dy53My5vcmcvVFIvd2FpLWFyaWEtMS4xLyNhcmlhLXBvc2luc2V0In1dLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IkRlZmluZXMgYW4gW2VsZW1lbnRdKGh0dHBzOi8vd3d3LnczLm9yZy9UUi93YWktYXJpYS0xLjEvI2Rmbi1lbGVtZW50KSdzIG51bWJlciBvciBwb3NpdGlvbiBpbiB0aGUgY3VycmVudCBzZXQgb2YgbGlzdGl0ZW1zIG9yIHRyZWVpdGVtcy4gTm90IHJlcXVpcmVkIGlmIGFsbCBlbGVtZW50cyBpbiB0aGUgc2V0IGFyZSBwcmVzZW50IGluIHRoZSBET00uIFNlZSByZWxhdGVkIFtgYXJpYS1zZXRzaXplYF0oaHR0cHM6Ly93d3cudzMub3JnL1RSL3dhaS1hcmlhLTEuMS8jYXJpYS1zZXRzaXplKS4ifX0se25hbWU6ImFyaWEtcHJlc3NlZCIsdmFsdWVTZXQ6InRyaXN0YXRlIixyZWZlcmVuY2VzOlt7bmFtZToiV0FJLUFSSUEgUmVmZXJlbmNlIix1cmw6Imh0dHBzOi8vd3d3LnczLm9yZy9UUi93YWktYXJpYS0xLjEvI2FyaWEtcHJlc3NlZCJ9XSxkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOidJbmRpY2F0ZXMgdGhlIGN1cnJlbnQgInByZXNzZWQiIFtzdGF0ZV0oaHR0cHM6Ly93d3cudzMub3JnL1RSL3dhaS1hcmlhLTEuMS8jZGZuLXN0YXRlKSBvZiB0b2dnbGUgYnV0dG9ucy4gU2VlIHJlbGF0ZWQgW2BhcmlhLWNoZWNrZWRgXShodHRwczovL3d3dy53My5vcmcvVFIvd2FpLWFyaWEtMS4xLyNhcmlhLWNoZWNrZWQpIGFuZCBbYGFyaWEtc2VsZWN0ZWRgXShodHRwczovL3d3dy53My5vcmcvVFIvd2FpLWFyaWEtMS4xLyNhcmlhLXNlbGVjdGVkKS4nfX0se25hbWU6ImFyaWEtcmVhZG9ubHkiLHZhbHVlU2V0OiJiIixyZWZlcmVuY2VzOlt7bmFtZToiV0FJLUFSSUEgUmVmZXJlbmNlIix1cmw6Imh0dHBzOi8vd3d3LnczLm9yZy9UUi93YWktYXJpYS0xLjEvI2FyaWEtcmVhZG9ubHkifV0sZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiSW5kaWNhdGVzIHRoYXQgdGhlIFtlbGVtZW50XShodHRwczovL3d3dy53My5vcmcvVFIvd2FpLWFyaWEtMS4xLyNkZm4tZWxlbWVudCkgaXMgbm90IGVkaXRhYmxlLCBidXQgaXMgb3RoZXJ3aXNlIFtvcGVyYWJsZV0oaHR0cHM6Ly93d3cudzMub3JnL1RSL3dhaS1hcmlhLTEuMS8jZGZuLW9wZXJhYmxlKS4gU2VlIHJlbGF0ZWQgW2BhcmlhLWRpc2FibGVkYF0oaHR0cHM6Ly93d3cudzMub3JnL1RSL3dhaS1hcmlhLTEuMS8jYXJpYS1kaXNhYmxlZCkuIn19LHtuYW1lOiJhcmlhLXJlbGV2YW50Iix2YWx1ZVNldDoicmVsZXZhbnQiLHJlZmVyZW5jZXM6W3tuYW1lOiJXQUktQVJJQSBSZWZlcmVuY2UiLHVybDoiaHR0cHM6Ly93d3cudzMub3JnL1RSL3dhaS1hcmlhLTEuMS8jYXJpYS1yZWxldmFudCJ9XSxkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJJbmRpY2F0ZXMgd2hhdCBub3RpZmljYXRpb25zIHRoZSB1c2VyIGFnZW50IHdpbGwgdHJpZ2dlciB3aGVuIHRoZSBhY2Nlc3NpYmlsaXR5IHRyZWUgd2l0aGluIGEgbGl2ZSByZWdpb24gaXMgbW9kaWZpZWQuIFNlZSByZWxhdGVkIFtgYXJpYS1hdG9taWNgXShodHRwczovL3d3dy53My5vcmcvVFIvd2FpLWFyaWEtMS4xLyNhcmlhLWF0b21pYykuIn19LHtuYW1lOiJhcmlhLXJlcXVpcmVkIix2YWx1ZVNldDoiYiIscmVmZXJlbmNlczpbe25hbWU6IldBSS1BUklBIFJlZmVyZW5jZSIsdXJsOiJodHRwczovL3d3dy53My5vcmcvVFIvd2FpLWFyaWEtMS4xLyNhcmlhLXJlcXVpcmVkIn1dLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IkluZGljYXRlcyB0aGF0IHVzZXIgaW5wdXQgaXMgcmVxdWlyZWQgb24gdGhlIFtlbGVtZW50XShodHRwczovL3d3dy53My5vcmcvVFIvd2FpLWFyaWEtMS4xLyNkZm4tZWxlbWVudCkgYmVmb3JlIGEgZm9ybSBtYXkgYmUgc3VibWl0dGVkLiJ9fSx7bmFtZToiYXJpYS1yb2xlZGVzY3JpcHRpb24iLHJlZmVyZW5jZXM6W3tuYW1lOiJXQUktQVJJQSBSZWZlcmVuY2UiLHVybDoiaHR0cHM6Ly93d3cudzMub3JnL1RSL3dhaS1hcmlhLTEuMS8jYXJpYS1yb2xlZGVzY3JpcHRpb24ifV0sZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiRGVmaW5lcyBhIGh1bWFuLXJlYWRhYmxlLCBhdXRob3ItbG9jYWxpemVkIGRlc2NyaXB0aW9uIGZvciB0aGUgW3JvbGVdKGh0dHBzOi8vd3d3LnczLm9yZy9UUi93YWktYXJpYS0xLjEvI2Rmbi1yb2xlKSBvZiBhbiBbZWxlbWVudF0oaHR0cHM6Ly93d3cudzMub3JnL1RSL3dhaS1hcmlhLTEuMS8jZGZuLWVsZW1lbnQpLiJ9fSx7bmFtZToiYXJpYS1yb3djb3VudCIscmVmZXJlbmNlczpbe25hbWU6IldBSS1BUklBIFJlZmVyZW5jZSIsdXJsOiJodHRwczovL3d3dy53My5vcmcvVFIvd2FpLWFyaWEtMS4xLyNhcmlhLXJvd2NvdW50In1dLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IkRlZmluZXMgdGhlIHRvdGFsIG51bWJlciBvZiByb3dzIGluIGEgW2B0YWJsZWBdKGh0dHBzOi8vd3d3LnczLm9yZy9UUi93YWktYXJpYS0xLjEvI3RhYmxlKSwgW2BncmlkYF0oaHR0cHM6Ly93d3cudzMub3JnL1RSL3dhaS1hcmlhLTEuMS8jZ3JpZCksIG9yIFtgdHJlZWdyaWRgXShodHRwczovL3d3dy53My5vcmcvVFIvd2FpLWFyaWEtMS4xLyN0cmVlZ3JpZCkuIFNlZSByZWxhdGVkIFtgYXJpYS1yb3dpbmRleGBdKGh0dHBzOi8vd3d3LnczLm9yZy9UUi93YWktYXJpYS0xLjEvI2FyaWEtcm93aW5kZXgpLiJ9fSx7bmFtZToiYXJpYS1yb3dpbmRleCIscmVmZXJlbmNlczpbe25hbWU6IldBSS1BUklBIFJlZmVyZW5jZSIsdXJsOiJodHRwczovL3d3dy53My5vcmcvVFIvd2FpLWFyaWEtMS4xLyNhcmlhLXJvd2luZGV4In1dLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IkRlZmluZXMgYW4gW2VsZW1lbnQnc10oaHR0cHM6Ly93d3cudzMub3JnL1RSL3dhaS1hcmlhLTEuMS8jZGZuLWVsZW1lbnQpIHJvdyBpbmRleCBvciBwb3NpdGlvbiB3aXRoIHJlc3BlY3QgdG8gdGhlIHRvdGFsIG51bWJlciBvZiByb3dzIHdpdGhpbiBhIFtgdGFibGVgXShodHRwczovL3d3dy53My5vcmcvVFIvd2FpLWFyaWEtMS4xLyN0YWJsZSksIFtgZ3JpZGBdKGh0dHBzOi8vd3d3LnczLm9yZy9UUi93YWktYXJpYS0xLjEvI2dyaWQpLCBvciBbYHRyZWVncmlkYF0oaHR0cHM6Ly93d3cudzMub3JnL1RSL3dhaS1hcmlhLTEuMS8jdHJlZWdyaWQpLiBTZWUgcmVsYXRlZCBbYGFyaWEtcm93Y291bnRgXShodHRwczovL3d3dy53My5vcmcvVFIvd2FpLWFyaWEtMS4xLyNhcmlhLXJvd2NvdW50KSBhbmQgW2BhcmlhLXJvd3NwYW5gXShodHRwczovL3d3dy53My5vcmcvVFIvd2FpLWFyaWEtMS4xLyNhcmlhLXJvd3NwYW4pLiJ9fSx7bmFtZToiYXJpYS1yb3dzcGFuIixyZWZlcmVuY2VzOlt7bmFtZToiV0FJLUFSSUEgUmVmZXJlbmNlIix1cmw6Imh0dHBzOi8vd3d3LnczLm9yZy9UUi93YWktYXJpYS0xLjEvI2FyaWEtcm93c3BhbiJ9XSxkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJEZWZpbmVzIHRoZSBudW1iZXIgb2Ygcm93cyBzcGFubmVkIGJ5IGEgY2VsbCBvciBncmlkY2VsbCB3aXRoaW4gYSBbYHRhYmxlYF0oaHR0cHM6Ly93d3cudzMub3JnL1RSL3dhaS1hcmlhLTEuMS8jdGFibGUpLCBbYGdyaWRgXShodHRwczovL3d3dy53My5vcmcvVFIvd2FpLWFyaWEtMS4xLyNncmlkKSwgb3IgW2B0cmVlZ3JpZGBdKGh0dHBzOi8vd3d3LnczLm9yZy9UUi93YWktYXJpYS0xLjEvI3RyZWVncmlkKS4gU2VlIHJlbGF0ZWQgW2BhcmlhLXJvd2luZGV4YF0oaHR0cHM6Ly93d3cudzMub3JnL1RSL3dhaS1hcmlhLTEuMS8jYXJpYS1yb3dpbmRleCkgYW5kIFtgYXJpYS1jb2xzcGFuYF0oaHR0cHM6Ly93d3cudzMub3JnL1RSL3dhaS1hcmlhLTEuMS8jYXJpYS1jb2xzcGFuKS4ifX0se25hbWU6ImFyaWEtc2VsZWN0ZWQiLHZhbHVlU2V0OiJ1IixyZWZlcmVuY2VzOlt7bmFtZToiV0FJLUFSSUEgUmVmZXJlbmNlIix1cmw6Imh0dHBzOi8vd3d3LnczLm9yZy9UUi93YWktYXJpYS0xLjEvI2FyaWEtc2VsZWN0ZWQifV0sZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZTonSW5kaWNhdGVzIHRoZSBjdXJyZW50ICJzZWxlY3RlZCIgW3N0YXRlXShodHRwczovL3d3dy53My5vcmcvVFIvd2FpLWFyaWEtMS4xLyNkZm4tc3RhdGUpIG9mIHZhcmlvdXMgW3dpZGdldHNdKGh0dHBzOi8vd3d3LnczLm9yZy9UUi93YWktYXJpYS0xLjEvI2Rmbi13aWRnZXQpLiBTZWUgcmVsYXRlZCBbYGFyaWEtY2hlY2tlZGBdKGh0dHBzOi8vd3d3LnczLm9yZy9UUi93YWktYXJpYS0xLjEvI2FyaWEtY2hlY2tlZCkgYW5kIFtgYXJpYS1wcmVzc2VkYF0oaHR0cHM6Ly93d3cudzMub3JnL1RSL3dhaS1hcmlhLTEuMS8jYXJpYS1wcmVzc2VkKS4nfX0se25hbWU6ImFyaWEtc2V0c2l6ZSIscmVmZXJlbmNlczpbe25hbWU6IldBSS1BUklBIFJlZmVyZW5jZSIsdXJsOiJodHRwczovL3d3dy53My5vcmcvVFIvd2FpLWFyaWEtMS4xLyNhcmlhLXNldHNpemUifV0sZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiRGVmaW5lcyB0aGUgbnVtYmVyIG9mIGl0ZW1zIGluIHRoZSBjdXJyZW50IHNldCBvZiBsaXN0aXRlbXMgb3IgdHJlZWl0ZW1zLiBOb3QgcmVxdWlyZWQgaWYgYWxsIGVsZW1lbnRzIGluIHRoZSBzZXQgYXJlIHByZXNlbnQgaW4gdGhlIERPTS4gU2VlIHJlbGF0ZWQgW2BhcmlhLXBvc2luc2V0YF0oaHR0cHM6Ly93d3cudzMub3JnL1RSL3dhaS1hcmlhLTEuMS8jYXJpYS1wb3NpbnNldCkuIn19LHtuYW1lOiJhcmlhLXNvcnQiLHZhbHVlU2V0OiJzb3J0IixyZWZlcmVuY2VzOlt7bmFtZToiV0FJLUFSSUEgUmVmZXJlbmNlIix1cmw6Imh0dHBzOi8vd3d3LnczLm9yZy9UUi93YWktYXJpYS0xLjEvI2FyaWEtc29ydCJ9XSxkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJJbmRpY2F0ZXMgaWYgaXRlbXMgaW4gYSB0YWJsZSBvciBncmlkIGFyZSBzb3J0ZWQgaW4gYXNjZW5kaW5nIG9yIGRlc2NlbmRpbmcgb3JkZXIuIn19LHtuYW1lOiJhcmlhLXZhbHVlbWF4IixyZWZlcmVuY2VzOlt7bmFtZToiV0FJLUFSSUEgUmVmZXJlbmNlIix1cmw6Imh0dHBzOi8vd3d3LnczLm9yZy9UUi93YWktYXJpYS0xLjEvI2FyaWEtdmFsdWVtYXgifV0sZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiRGVmaW5lcyB0aGUgbWF4aW11bSBhbGxvd2VkIHZhbHVlIGZvciBhIHJhbmdlIFt3aWRnZXRdKGh0dHBzOi8vd3d3LnczLm9yZy9UUi93YWktYXJpYS0xLjEvI2Rmbi13aWRnZXQpLiJ9fSx7bmFtZToiYXJpYS12YWx1ZW1pbiIscmVmZXJlbmNlczpbe25hbWU6IldBSS1BUklBIFJlZmVyZW5jZSIsdXJsOiJodHRwczovL3d3dy53My5vcmcvVFIvd2FpLWFyaWEtMS4xLyNhcmlhLXZhbHVlbWluIn1dLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IkRlZmluZXMgdGhlIG1pbmltdW0gYWxsb3dlZCB2YWx1ZSBmb3IgYSByYW5nZSBbd2lkZ2V0XShodHRwczovL3d3dy53My5vcmcvVFIvd2FpLWFyaWEtMS4xLyNkZm4td2lkZ2V0KS4ifX0se25hbWU6ImFyaWEtdmFsdWVub3ciLHJlZmVyZW5jZXM6W3tuYW1lOiJXQUktQVJJQSBSZWZlcmVuY2UiLHVybDoiaHR0cHM6Ly93d3cudzMub3JnL1RSL3dhaS1hcmlhLTEuMS8jYXJpYS12YWx1ZW5vdyJ9XSxkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJEZWZpbmVzIHRoZSBjdXJyZW50IHZhbHVlIGZvciBhIHJhbmdlIFt3aWRnZXRdKGh0dHBzOi8vd3d3LnczLm9yZy9UUi93YWktYXJpYS0xLjEvI2Rmbi13aWRnZXQpLiBTZWUgcmVsYXRlZCBbYGFyaWEtdmFsdWV0ZXh0YF0oaHR0cHM6Ly93d3cudzMub3JnL1RSL3dhaS1hcmlhLTEuMS8jYXJpYS12YWx1ZXRleHQpLiJ9fSx7bmFtZToiYXJpYS12YWx1ZXRleHQiLHJlZmVyZW5jZXM6W3tuYW1lOiJXQUktQVJJQSBSZWZlcmVuY2UiLHVybDoiaHR0cHM6Ly93d3cudzMub3JnL1RSL3dhaS1hcmlhLTEuMS8jYXJpYS12YWx1ZXRleHQifV0sZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiRGVmaW5lcyB0aGUgaHVtYW4gcmVhZGFibGUgdGV4dCBhbHRlcm5hdGl2ZSBvZiBbYGFyaWEtdmFsdWVub3dgXShodHRwczovL3d3dy53My5vcmcvVFIvd2FpLWFyaWEtMS4xLyNhcmlhLXZhbHVlbm93KSBmb3IgYSByYW5nZSBbd2lkZ2V0XShodHRwczovL3d3dy53My5vcmcvVFIvd2FpLWFyaWEtMS4xLyNkZm4td2lkZ2V0KS4ifX0se25hbWU6ImFyaWEtZGV0YWlscyIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiSWRlbnRpZmllcyB0aGUgW2VsZW1lbnRdKGh0dHBzOi8vd3d3LnczLm9yZy9UUi93YWktYXJpYS0xLjEvI2Rmbi1lbGVtZW50KSB0aGF0IHByb3ZpZGVzIGEgZGV0YWlsZWQsIGV4dGVuZGVkIGRlc2NyaXB0aW9uIGZvciB0aGUgW29iamVjdF0oaHR0cHM6Ly93d3cudzMub3JnL1RSL3dhaS1hcmlhLTEuMS8jZGZuLW9iamVjdCkuIFNlZSByZWxhdGVkIFtgYXJpYS1kZXNjcmliZWRieWBdKGh0dHBzOi8vd3d3LnczLm9yZy9UUi93YWktYXJpYS0xLjEvI2FyaWEtZGVzY3JpYmVkYnkpLiJ9fSx7bmFtZToiYXJpYS1rZXlzaG9ydGN1dHMiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IkluZGljYXRlcyBrZXlib2FyZCBzaG9ydGN1dHMgdGhhdCBhbiBhdXRob3IgaGFzIGltcGxlbWVudGVkIHRvIGFjdGl2YXRlIG9yIGdpdmUgZm9jdXMgdG8gYW4gZWxlbWVudC4ifX1dLHZhbHVlU2V0czpbe25hbWU6ImIiLHZhbHVlczpbe25hbWU6InRydWUifSx7bmFtZToiZmFsc2UifV19LHtuYW1lOiJ1Iix2YWx1ZXM6W3tuYW1lOiJ0cnVlIn0se25hbWU6ImZhbHNlIn0se25hbWU6InVuZGVmaW5lZCJ9XX0se25hbWU6Im8iLHZhbHVlczpbe25hbWU6Im9uIn0se25hbWU6Im9mZiJ9XX0se25hbWU6InkiLHZhbHVlczpbe25hbWU6InllcyJ9LHtuYW1lOiJubyJ9XX0se25hbWU6InciLHZhbHVlczpbe25hbWU6InNvZnQifSx7bmFtZToiaGFyZCJ9XX0se25hbWU6ImQiLHZhbHVlczpbe25hbWU6Imx0ciJ9LHtuYW1lOiJydGwifSx7bmFtZToiYXV0byJ9XX0se25hbWU6Im0iLHZhbHVlczpbe25hbWU6ImdldCIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiQ29ycmVzcG9uZHMgdG8gdGhlIEhUVFAgW0dFVCBtZXRob2RdKGh0dHBzOi8vd3d3LnczLm9yZy9Qcm90b2NvbHMvcmZjMjYxNi9yZmMyNjE2LXNlYzkuaHRtbCNzZWM5LjMpOyBmb3JtIGRhdGEgYXJlIGFwcGVuZGVkIHRvIHRoZSBgYWN0aW9uYCBhdHRyaWJ1dGUgVVJJIHdpdGggYSAnPycgYXMgc2VwYXJhdG9yLCBhbmQgdGhlIHJlc3VsdGluZyBVUkkgaXMgc2VudCB0byB0aGUgc2VydmVyLiBVc2UgdGhpcyBtZXRob2Qgd2hlbiB0aGUgZm9ybSBoYXMgbm8gc2lkZS1lZmZlY3RzIGFuZCBjb250YWlucyBvbmx5IEFTQ0lJIGNoYXJhY3RlcnMuIn19LHtuYW1lOiJwb3N0IixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJDb3JyZXNwb25kcyB0byB0aGUgSFRUUCBbUE9TVCBtZXRob2RdKGh0dHBzOi8vd3d3LnczLm9yZy9Qcm90b2NvbHMvcmZjMjYxNi9yZmMyNjE2LXNlYzkuaHRtbCNzZWM5LjUpOyBmb3JtIGRhdGEgYXJlIGluY2x1ZGVkIGluIHRoZSBib2R5IG9mIHRoZSBmb3JtIGFuZCBzZW50IHRvIHRoZSBzZXJ2ZXIuIn19LHtuYW1lOiJkaWFsb2ciLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlVzZSB3aGVuIHRoZSBmb3JtIGlzIGluc2lkZSBhIFtgPGRpYWxvZz5gXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvZGlhbG9nKSBlbGVtZW50IHRvIGNsb3NlIHRoZSBkaWFsb2cgd2hlbiBzdWJtaXR0ZWQuIn19XX0se25hbWU6ImZtIix2YWx1ZXM6W3tuYW1lOiJnZXQifSx7bmFtZToicG9zdCJ9XX0se25hbWU6InMiLHZhbHVlczpbe25hbWU6InJvdyJ9LHtuYW1lOiJjb2wifSx7bmFtZToicm93Z3JvdXAifSx7bmFtZToiY29sZ3JvdXAifV19LHtuYW1lOiJ0Iix2YWx1ZXM6W3tuYW1lOiJoaWRkZW4ifSx7bmFtZToidGV4dCJ9LHtuYW1lOiJzZWFyY2gifSx7bmFtZToidGVsIn0se25hbWU6InVybCJ9LHtuYW1lOiJlbWFpbCJ9LHtuYW1lOiJwYXNzd29yZCJ9LHtuYW1lOiJkYXRldGltZSJ9LHtuYW1lOiJkYXRlIn0se25hbWU6Im1vbnRoIn0se25hbWU6IndlZWsifSx7bmFtZToidGltZSJ9LHtuYW1lOiJkYXRldGltZS1sb2NhbCJ9LHtuYW1lOiJudW1iZXIifSx7bmFtZToicmFuZ2UifSx7bmFtZToiY29sb3IifSx7bmFtZToiY2hlY2tib3gifSx7bmFtZToicmFkaW8ifSx7bmFtZToiZmlsZSJ9LHtuYW1lOiJzdWJtaXQifSx7bmFtZToiaW1hZ2UifSx7bmFtZToicmVzZXQifSx7bmFtZToiYnV0dG9uIn1dfSx7bmFtZToiaW0iLHZhbHVlczpbe25hbWU6InZlcmJhdGltIn0se25hbWU6ImxhdGluIn0se25hbWU6ImxhdGluLW5hbWUifSx7bmFtZToibGF0aW4tcHJvc2UifSx7bmFtZToiZnVsbC13aWR0aC1sYXRpbiJ9LHtuYW1lOiJrYW5hIn0se25hbWU6ImthbmEtbmFtZSJ9LHtuYW1lOiJrYXRha2FuYSJ9LHtuYW1lOiJudW1lcmljIn0se25hbWU6InRlbCJ9LHtuYW1lOiJlbWFpbCJ9LHtuYW1lOiJ1cmwifV19LHtuYW1lOiJidCIsdmFsdWVzOlt7bmFtZToiYnV0dG9uIn0se25hbWU6InN1Ym1pdCJ9LHtuYW1lOiJyZXNldCJ9LHtuYW1lOiJtZW51In1dfSx7bmFtZToibHQiLHZhbHVlczpbe25hbWU6IjEifSx7bmFtZToiYSJ9LHtuYW1lOiJBIn0se25hbWU6ImkifSx7bmFtZToiSSJ9XX0se25hbWU6Im10Iix2YWx1ZXM6W3tuYW1lOiJjb250ZXh0In0se25hbWU6InRvb2xiYXIifV19LHtuYW1lOiJtaXQiLHZhbHVlczpbe25hbWU6ImNvbW1hbmQifSx7bmFtZToiY2hlY2tib3gifSx7bmFtZToicmFkaW8ifV19LHtuYW1lOiJldCIsdmFsdWVzOlt7bmFtZToiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkIn0se25hbWU6Im11bHRpcGFydC9mb3JtLWRhdGEifSx7bmFtZToidGV4dC9wbGFpbiJ9XX0se25hbWU6InRrIix2YWx1ZXM6W3tuYW1lOiJzdWJ0aXRsZXMifSx7bmFtZToiY2FwdGlvbnMifSx7bmFtZToiZGVzY3JpcHRpb25zIn0se25hbWU6ImNoYXB0ZXJzIn0se25hbWU6Im1ldGFkYXRhIn1dfSx7bmFtZToicGwiLHZhbHVlczpbe25hbWU6Im5vbmUifSx7bmFtZToibWV0YWRhdGEifSx7bmFtZToiYXV0byJ9XX0se25hbWU6InNoIix2YWx1ZXM6W3tuYW1lOiJjaXJjbGUifSx7bmFtZToiZGVmYXVsdCJ9LHtuYW1lOiJwb2x5In0se25hbWU6InJlY3QifV19LHtuYW1lOiJ4byIsdmFsdWVzOlt7bmFtZToiYW5vbnltb3VzIn0se25hbWU6InVzZS1jcmVkZW50aWFscyJ9XX0se25hbWU6InRhcmdldCIsdmFsdWVzOlt7bmFtZToiX3NlbGYifSx7bmFtZToiX2JsYW5rIn0se25hbWU6Il9wYXJlbnQifSx7bmFtZToiX3RvcCJ9XX0se25hbWU6InNiIix2YWx1ZXM6W3tuYW1lOiJhbGxvdy1mb3JtcyJ9LHtuYW1lOiJhbGxvdy1tb2RhbHMifSx7bmFtZToiYWxsb3ctcG9pbnRlci1sb2NrIn0se25hbWU6ImFsbG93LXBvcHVwcyJ9LHtuYW1lOiJhbGxvdy1wb3B1cHMtdG8tZXNjYXBlLXNhbmRib3gifSx7bmFtZToiYWxsb3ctc2FtZS1vcmlnaW4ifSx7bmFtZToiYWxsb3ctc2NyaXB0cyJ9LHtuYW1lOiJhbGxvdy10b3AtbmF2aWdhdGlvbiJ9XX0se25hbWU6InRyaXN0YXRlIix2YWx1ZXM6W3tuYW1lOiJ0cnVlIn0se25hbWU6ImZhbHNlIn0se25hbWU6Im1peGVkIn0se25hbWU6InVuZGVmaW5lZCJ9XX0se25hbWU6ImlucHV0YXV0b2NvbXBsZXRlIix2YWx1ZXM6W3tuYW1lOiJhZGRpdGlvbmFsLW5hbWUifSx7bmFtZToiYWRkcmVzcy1sZXZlbDEifSx7bmFtZToiYWRkcmVzcy1sZXZlbDIifSx7bmFtZToiYWRkcmVzcy1sZXZlbDMifSx7bmFtZToiYWRkcmVzcy1sZXZlbDQifSx7bmFtZToiYWRkcmVzcy1saW5lMSJ9LHtuYW1lOiJhZGRyZXNzLWxpbmUyIn0se25hbWU6ImFkZHJlc3MtbGluZTMifSx7bmFtZToiYmRheSJ9LHtuYW1lOiJiZGF5LXllYXIifSx7bmFtZToiYmRheS1kYXkifSx7bmFtZToiYmRheS1tb250aCJ9LHtuYW1lOiJiaWxsaW5nIn0se25hbWU6ImNjLWFkZGl0aW9uYWwtbmFtZSJ9LHtuYW1lOiJjYy1jc2MifSx7bmFtZToiY2MtZXhwIn0se25hbWU6ImNjLWV4cC1tb250aCJ9LHtuYW1lOiJjYy1leHAteWVhciJ9LHtuYW1lOiJjYy1mYW1pbHktbmFtZSJ9LHtuYW1lOiJjYy1naXZlbi1uYW1lIn0se25hbWU6ImNjLW5hbWUifSx7bmFtZToiY2MtbnVtYmVyIn0se25hbWU6ImNjLXR5cGUifSx7bmFtZToiY291bnRyeSJ9LHtuYW1lOiJjb3VudHJ5LW5hbWUifSx7bmFtZToiY3VycmVudC1wYXNzd29yZCJ9LHtuYW1lOiJlbWFpbCJ9LHtuYW1lOiJmYW1pbHktbmFtZSJ9LHtuYW1lOiJmYXgifSx7bmFtZToiZ2l2ZW4tbmFtZSJ9LHtuYW1lOiJob21lIn0se25hbWU6Imhvbm9yaWZpYy1wcmVmaXgifSx7bmFtZToiaG9ub3JpZmljLXN1ZmZpeCJ9LHtuYW1lOiJpbXBwIn0se25hbWU6Imxhbmd1YWdlIn0se25hbWU6Im1vYmlsZSJ9LHtuYW1lOiJuYW1lIn0se25hbWU6Im5ldy1wYXNzd29yZCJ9LHtuYW1lOiJuaWNrbmFtZSJ9LHtuYW1lOiJvZmYifSx7bmFtZToib24ifSx7bmFtZToib3JnYW5pemF0aW9uIn0se25hbWU6Im9yZ2FuaXphdGlvbi10aXRsZSJ9LHtuYW1lOiJwYWdlciJ9LHtuYW1lOiJwaG90byJ9LHtuYW1lOiJwb3N0YWwtY29kZSJ9LHtuYW1lOiJzZXgifSx7bmFtZToic2hpcHBpbmcifSx7bmFtZToic3RyZWV0LWFkZHJlc3MifSx7bmFtZToidGVsLWFyZWEtY29kZSJ9LHtuYW1lOiJ0ZWwifSx7bmFtZToidGVsLWNvdW50cnktY29kZSJ9LHtuYW1lOiJ0ZWwtZXh0ZW5zaW9uIn0se25hbWU6InRlbC1sb2NhbCJ9LHtuYW1lOiJ0ZWwtbG9jYWwtcHJlZml4In0se25hbWU6InRlbC1sb2NhbC1zdWZmaXgifSx7bmFtZToidGVsLW5hdGlvbmFsIn0se25hbWU6InRyYW5zYWN0aW9uLWFtb3VudCJ9LHtuYW1lOiJ0cmFuc2FjdGlvbi1jdXJyZW5jeSJ9LHtuYW1lOiJ1cmwifSx7bmFtZToidXNlcm5hbWUifSx7bmFtZToid29yayJ9XX0se25hbWU6ImF1dG9jb21wbGV0ZSIsdmFsdWVzOlt7bmFtZToiaW5saW5lIn0se25hbWU6Imxpc3QifSx7bmFtZToiYm90aCJ9LHtuYW1lOiJub25lIn1dfSx7bmFtZToiY3VycmVudCIsdmFsdWVzOlt7bmFtZToicGFnZSJ9LHtuYW1lOiJzdGVwIn0se25hbWU6ImxvY2F0aW9uIn0se25hbWU6ImRhdGUifSx7bmFtZToidGltZSJ9LHtuYW1lOiJ0cnVlIn0se25hbWU6ImZhbHNlIn1dfSx7bmFtZToiZHJvcGVmZmVjdCIsdmFsdWVzOlt7bmFtZToiY29weSJ9LHtuYW1lOiJtb3ZlIn0se25hbWU6ImxpbmsifSx7bmFtZToiZXhlY3V0ZSJ9LHtuYW1lOiJwb3B1cCJ9LHtuYW1lOiJub25lIn1dfSx7bmFtZToiaW52YWxpZCIsdmFsdWVzOlt7bmFtZToiZ3JhbW1hciJ9LHtuYW1lOiJmYWxzZSJ9LHtuYW1lOiJzcGVsbGluZyJ9LHtuYW1lOiJ0cnVlIn1dfSx7bmFtZToibGl2ZSIsdmFsdWVzOlt7bmFtZToib2ZmIn0se25hbWU6InBvbGl0ZSJ9LHtuYW1lOiJhc3NlcnRpdmUifV19LHtuYW1lOiJvcmllbnRhdGlvbiIsdmFsdWVzOlt7bmFtZToidmVydGljYWwifSx7bmFtZToiaG9yaXpvbnRhbCJ9LHtuYW1lOiJ1bmRlZmluZWQifV19LHtuYW1lOiJyZWxldmFudCIsdmFsdWVzOlt7bmFtZToiYWRkaXRpb25zIn0se25hbWU6InJlbW92YWxzIn0se25hbWU6InRleHQifSx7bmFtZToiYWxsIn0se25hbWU6ImFkZGl0aW9ucyB0ZXh0In1dfSx7bmFtZToic29ydCIsdmFsdWVzOlt7bmFtZToiYXNjZW5kaW5nIn0se25hbWU6ImRlc2NlbmRpbmcifSx7bmFtZToibm9uZSJ9LHtuYW1lOiJvdGhlciJ9XX0se25hbWU6InJvbGVzIix2YWx1ZXM6W3tuYW1lOiJhbGVydCJ9LHtuYW1lOiJhbGVydGRpYWxvZyJ9LHtuYW1lOiJidXR0b24ifSx7bmFtZToiY2hlY2tib3gifSx7bmFtZToiZGlhbG9nIn0se25hbWU6ImdyaWRjZWxsIn0se25hbWU6ImxpbmsifSx7bmFtZToibG9nIn0se25hbWU6Im1hcnF1ZWUifSx7bmFtZToibWVudWl0ZW0ifSx7bmFtZToibWVudWl0ZW1jaGVja2JveCJ9LHtuYW1lOiJtZW51aXRlbXJhZGlvIn0se25hbWU6Im9wdGlvbiJ9LHtuYW1lOiJwcm9ncmVzc2JhciJ9LHtuYW1lOiJyYWRpbyJ9LHtuYW1lOiJzY3JvbGxiYXIifSx7bmFtZToic2VhcmNoYm94In0se25hbWU6InNsaWRlciJ9LHtuYW1lOiJzcGluYnV0dG9uIn0se25hbWU6InN0YXR1cyJ9LHtuYW1lOiJzd2l0Y2gifSx7bmFtZToidGFiIn0se25hbWU6InRhYnBhbmVsIn0se25hbWU6InRleHRib3gifSx7bmFtZToidGltZXIifSx7bmFtZToidG9vbHRpcCJ9LHtuYW1lOiJ0cmVlaXRlbSJ9LHtuYW1lOiJjb21ib2JveCJ9LHtuYW1lOiJncmlkIn0se25hbWU6Imxpc3Rib3gifSx7bmFtZToibWVudSJ9LHtuYW1lOiJtZW51YmFyIn0se25hbWU6InJhZGlvZ3JvdXAifSx7bmFtZToidGFibGlzdCJ9LHtuYW1lOiJ0cmVlIn0se25hbWU6InRyZWVncmlkIn0se25hbWU6ImFwcGxpY2F0aW9uIn0se25hbWU6ImFydGljbGUifSx7bmFtZToiY2VsbCJ9LHtuYW1lOiJjb2x1bW5oZWFkZXIifSx7bmFtZToiZGVmaW5pdGlvbiJ9LHtuYW1lOiJkaXJlY3RvcnkifSx7bmFtZToiZG9jdW1lbnQifSx7bmFtZToiZmVlZCJ9LHtuYW1lOiJmaWd1cmUifSx7bmFtZToiZ3JvdXAifSx7bmFtZToiaGVhZGluZyJ9LHtuYW1lOiJpbWcifSx7bmFtZToibGlzdCJ9LHtuYW1lOiJsaXN0aXRlbSJ9LHtuYW1lOiJtYXRoIn0se25hbWU6Im5vbmUifSx7bmFtZToibm90ZSJ9LHtuYW1lOiJwcmVzZW50YXRpb24ifSx7bmFtZToicmVnaW9uIn0se25hbWU6InJvdyJ9LHtuYW1lOiJyb3dncm91cCJ9LHtuYW1lOiJyb3doZWFkZXIifSx7bmFtZToic2VwYXJhdG9yIn0se25hbWU6InRhYmxlIn0se25hbWU6InRlcm0ifSx7bmFtZToidGV4dCJ9LHtuYW1lOiJ0b29sYmFyIn0se25hbWU6ImJhbm5lciJ9LHtuYW1lOiJjb21wbGVtZW50YXJ5In0se25hbWU6ImNvbnRlbnRpbmZvIn0se25hbWU6ImZvcm0ifSx7bmFtZToibWFpbiJ9LHtuYW1lOiJuYXZpZ2F0aW9uIn0se25hbWU6InJlZ2lvbiJ9LHtuYW1lOiJzZWFyY2gifSx7bmFtZToiZG9jLWFic3RyYWN0In0se25hbWU6ImRvYy1hY2tub3dsZWRnbWVudHMifSx7bmFtZToiZG9jLWFmdGVyd29yZCJ9LHtuYW1lOiJkb2MtYXBwZW5kaXgifSx7bmFtZToiZG9jLWJhY2tsaW5rIn0se25hbWU6ImRvYy1iaWJsaW9lbnRyeSJ9LHtuYW1lOiJkb2MtYmlibGlvZ3JhcGh5In0se25hbWU6ImRvYy1iaWJsaW9yZWYifSx7bmFtZToiZG9jLWNoYXB0ZXIifSx7bmFtZToiZG9jLWNvbG9waG9uIn0se25hbWU6ImRvYy1jb25jbHVzaW9uIn0se25hbWU6ImRvYy1jb3ZlciJ9LHtuYW1lOiJkb2MtY3JlZGl0In0se25hbWU6ImRvYy1jcmVkaXRzIn0se25hbWU6ImRvYy1kZWRpY2F0aW9uIn0se25hbWU6ImRvYy1lbmRub3RlIn0se25hbWU6ImRvYy1lbmRub3RlcyJ9LHtuYW1lOiJkb2MtZXBpZ3JhcGgifSx7bmFtZToiZG9jLWVwaWxvZ3VlIn0se25hbWU6ImRvYy1lcnJhdGEifSx7bmFtZToiZG9jLWV4YW1wbGUifSx7bmFtZToiZG9jLWZvb3Rub3RlIn0se25hbWU6ImRvYy1mb3Jld29yZCJ9LHtuYW1lOiJkb2MtZ2xvc3NhcnkifSx7bmFtZToiZG9jLWdsb3NzcmVmIn0se25hbWU6ImRvYy1pbmRleCJ9LHtuYW1lOiJkb2MtaW50cm9kdWN0aW9uIn0se25hbWU6ImRvYy1ub3RlcmVmIn0se25hbWU6ImRvYy1ub3RpY2UifSx7bmFtZToiZG9jLXBhZ2VicmVhayJ9LHtuYW1lOiJkb2MtcGFnZWxpc3QifSx7bmFtZToiZG9jLXBhcnQifSx7bmFtZToiZG9jLXByZWZhY2UifSx7bmFtZToiZG9jLXByb2xvZ3VlIn0se25hbWU6ImRvYy1wdWxscXVvdGUifSx7bmFtZToiZG9jLXFuYSJ9LHtuYW1lOiJkb2Mtc3VidGl0bGUifSx7bmFtZToiZG9jLXRpcCJ9LHtuYW1lOiJkb2MtdG9jIn1dfSx7bmFtZToibWV0YW5hbWVzIix2YWx1ZXM6W3tuYW1lOiJhcHBsaWNhdGlvbi1uYW1lIn0se25hbWU6ImF1dGhvciJ9LHtuYW1lOiJkZXNjcmlwdGlvbiJ9LHtuYW1lOiJmb3JtYXQtZGV0ZWN0aW9uIn0se25hbWU6ImdlbmVyYXRvciJ9LHtuYW1lOiJrZXl3b3JkcyJ9LHtuYW1lOiJwdWJsaXNoZXIifSx7bmFtZToicmVmZXJyZXIifSx7bmFtZToicm9ib3RzIn0se25hbWU6InRoZW1lLWNvbG9yIn0se25hbWU6InZpZXdwb3J0In1dfSx7bmFtZToiaGFzcG9wdXAiLHZhbHVlczpbe25hbWU6ImZhbHNlIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiIoZGVmYXVsdCkgSW5kaWNhdGVzIHRoZSBlbGVtZW50IGRvZXMgbm90IGhhdmUgYSBwb3B1cC4ifX0se25hbWU6InRydWUiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IkluZGljYXRlcyB0aGUgcG9wdXAgaXMgYSBtZW51LiJ9fSx7bmFtZToibWVudSIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiSW5kaWNhdGVzIHRoZSBwb3B1cCBpcyBhIG1lbnUuIn19LHtuYW1lOiJsaXN0Ym94IixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJJbmRpY2F0ZXMgdGhlIHBvcHVwIGlzIGEgbGlzdGJveC4ifX0se25hbWU6InRyZWUiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IkluZGljYXRlcyB0aGUgcG9wdXAgaXMgYSB0cmVlLiJ9fSx7bmFtZToiZ3JpZCIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiSW5kaWNhdGVzIHRoZSBwb3B1cCBpcyBhIGdyaWQuIn19LHtuYW1lOiJkaWFsb2ciLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IkluZGljYXRlcyB0aGUgcG9wdXAgaXMgYSBkaWFsb2cuIn19XX0se25hbWU6ImRlY29kaW5nIix2YWx1ZXM6W3tuYW1lOiJzeW5jIn0se25hbWU6ImFzeW5jIn0se25hbWU6ImF1dG8ifV19LHtuYW1lOiJsb2FkaW5nIix2YWx1ZXM6W3tuYW1lOiJlYWdlciIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiTG9hZHMgdGhlIGltYWdlIGltbWVkaWF0ZWx5LCByZWdhcmRsZXNzIG9mIHdoZXRoZXIgb3Igbm90IHRoZSBpbWFnZSBpcyBjdXJyZW50bHkgd2l0aGluIHRoZSB2aXNpYmxlIHZpZXdwb3J0ICh0aGlzIGlzIHRoZSBkZWZhdWx0IHZhbHVlKS4ifX0se25hbWU6ImxhenkiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IkRlZmVycyBsb2FkaW5nIHRoZSBpbWFnZSB1bnRpbCBpdCByZWFjaGVzIGEgY2FsY3VsYXRlZCBkaXN0YW5jZSBmcm9tIHRoZSB2aWV3cG9ydCwgYXMgZGVmaW5lZCBieSB0aGUgYnJvd3Nlci4gVGhlIGludGVudCBpcyB0byBhdm9pZCB0aGUgbmV0d29yayBhbmQgc3RvcmFnZSBiYW5kd2lkdGggbmVlZGVkIHRvIGhhbmRsZSB0aGUgaW1hZ2UgdW50aWwgaXQncyByZWFzb25hYmx5IGNlcnRhaW4gdGhhdCBpdCB3aWxsIGJlIG5lZWRlZC4gVGhpcyBnZW5lcmFsbHkgaW1wcm92ZXMgdGhlIHBlcmZvcm1hbmNlIG9mIHRoZSBjb250ZW50IGluIG1vc3QgdHlwaWNhbCB1c2UgY2FzZXMuIn19XX0se25hbWU6InJlZmVycmVycG9saWN5Iix2YWx1ZXM6W3tuYW1lOiJuby1yZWZlcnJlciJ9LHtuYW1lOiJuby1yZWZlcnJlci13aGVuLWRvd25ncmFkZSJ9LHtuYW1lOiJvcmlnaW4ifSx7bmFtZToib3JpZ2luLXdoZW4tY3Jvc3Mtb3JpZ2luIn0se25hbWU6InNhbWUtb3JpZ2luIn0se25hbWU6InN0cmljdC1vcmlnaW4ifSx7bmFtZToic3RyaWN0LW9yaWdpbi13aGVuLWNyb3NzLW9yaWdpbiJ9LHtuYW1lOiJ1bnNhZmUtdXJsIn1dfV19LGloPWNsYXNze2NvbnN0cnVjdG9yKGUpe3RoaXMuZGF0YVByb3ZpZGVycz1bXSx0aGlzLnNldERhdGFQcm92aWRlcnMoZS51c2VEZWZhdWx0RGF0YVByb3ZpZGVyIT09ITEsZS5jdXN0b21EYXRhUHJvdmlkZXJzfHxbXSl9c2V0RGF0YVByb3ZpZGVycyhlLHQpe3RoaXMuZGF0YVByb3ZpZGVycz1bXSxlJiZ0aGlzLmRhdGFQcm92aWRlcnMucHVzaChuZXcgaW8oImh0bWw1IixuaCkpLHRoaXMuZGF0YVByb3ZpZGVycy5wdXNoKC4uLnQpfWdldERhdGFQcm92aWRlcnMoKXtyZXR1cm4gdGhpcy5kYXRhUHJvdmlkZXJzfWlzVm9pZEVsZW1lbnQoZSx0KXtyZXR1cm4hIWUmJmhjKHQsZS50b0xvd2VyQ2FzZSgpLChuLGkpPT5uLmxvY2FsZUNvbXBhcmUoaSkpPj0wfWdldFZvaWRFbGVtZW50cyhlKXtjb25zdCB0PUFycmF5LmlzQXJyYXkoZSk/ZTp0aGlzLmdldERhdGFQcm92aWRlcnMoKS5maWx0ZXIoaT0+aS5pc0FwcGxpY2FibGUoZSkpLG49W107cmV0dXJuIHQuZm9yRWFjaChpPT57aS5wcm92aWRlVGFncygpLmZpbHRlcihyPT5yLnZvaWQpLmZvckVhY2gocj0+bi5wdXNoKHIubmFtZSkpfSksbi5zb3J0KCl9aXNQYXRoQXR0cmlidXRlKGUsdCl7aWYodD09PSJzcmMifHx0PT09ImhyZWYiKXJldHVybiEwO2NvbnN0IG49cmhbZV07cmV0dXJuIG4/dHlwZW9mIG49PSJzdHJpbmciP249PT10Om4uaW5kZXhPZih0KSE9PS0xOiExfX0scmg9e2E6ImhyZWYiLGFyZWE6ImhyZWYiLGJvZHk6ImJhY2tncm91bmQiLGJsb2NrcXVvdGU6ImNpdGUiLGRlbDoiY2l0ZSIsZm9ybToiYWN0aW9uIixmcmFtZTpbInNyYyIsImxvbmdkZXNjIl0saW1nOlsic3JjIiwibG9uZ2Rlc2MiXSxpbnM6ImNpdGUiLGxpbms6ImhyZWYiLG9iamVjdDoiZGF0YSIscToiY2l0ZSIsc2NyaXB0OiJzcmMiLGF1ZGlvOiJzcmMiLGJ1dHRvbjoiZm9ybWFjdGlvbiIsY29tbWFuZDoiaWNvbiIsZW1iZWQ6InNyYyIsaHRtbDoibWFuaWZlc3QiLGlucHV0Olsic3JjIiwiZm9ybWFjdGlvbiJdLHNvdXJjZToic3JjIix0cmFjazoic3JjIix2aWRlbzpbInNyYyIsInBvc3RlciJdfSxzaD17fTtmdW5jdGlvbiBhaChlPXNoKXtjb25zdCB0PW5ldyBpaChlKSxuPW5ldyBOYyhlLHQpLGk9bmV3IENjKGUsdCkscj1uZXcgZGModCkscz1uZXcgdGgociksYT1uZXcgZWgodCksbD1uZXcgR2ModCk7cmV0dXJue3NldERhdGFQcm92aWRlcnM6dC5zZXREYXRhUHJvdmlkZXJzLmJpbmQodCksY3JlYXRlU2Nhbm5lcjpiZSxwYXJzZUhUTUxEb2N1bWVudDpyLnBhcnNlRG9jdW1lbnQuYmluZChyKSxkb0NvbXBsZXRlOmkuZG9Db21wbGV0ZS5iaW5kKGkpLGRvQ29tcGxldGUyOmkuZG9Db21wbGV0ZTIuYmluZChpKSxzZXRDb21wbGV0aW9uUGFydGljaXBhbnRzOmkuc2V0Q29tcGxldGlvblBhcnRpY2lwYW50cy5iaW5kKGkpLGRvSG92ZXI6bi5kb0hvdmVyLmJpbmQobiksZm9ybWF0OkhjLGZpbmREb2N1bWVudEhpZ2hsaWdodHM6WGMsZmluZERvY3VtZW50TGlua3M6bC5maW5kRG9jdW1lbnRMaW5rcy5iaW5kKGwpLGZpbmREb2N1bWVudFN5bWJvbHM6SmMsZmluZERvY3VtZW50U3ltYm9sczI6Zm8sZ2V0Rm9sZGluZ1JhbmdlczphLmdldEZvbGRpbmdSYW5nZXMuYmluZChhKSxnZXRTZWxlY3Rpb25SYW5nZXM6cy5nZXRTZWxlY3Rpb25SYW5nZXMuYmluZChzKSxkb1F1b3RlQ29tcGxldGU6aS5kb1F1b3RlQ29tcGxldGUuYmluZChpKSxkb1RhZ0NvbXBsZXRlOmkuZG9UYWdDb21wbGV0ZS5iaW5kKGkpLGRvUmVuYW1lOlFjLGZpbmRNYXRjaGluZ1RhZ1Bvc2l0aW9uOktjLGZpbmRPblR5cGVSZW5hbWVSYW5nZXM6Z28sZmluZExpbmtlZEVkaXRpbmdSYW5nZXM6Z299fWZ1bmN0aW9uIG9oKGUsdCl7cmV0dXJuIG5ldyBpbyhlLHQpfXZhciBsaD1jbGFzc3tjb25zdHJ1Y3RvcihlLHQpe3RoaXMuX2N0eD1lLHRoaXMuX2xhbmd1YWdlU2V0dGluZ3M9dC5sYW5ndWFnZVNldHRpbmdzLHRoaXMuX2xhbmd1YWdlSWQ9dC5sYW5ndWFnZUlkO2NvbnN0IG49dGhpcy5fbGFuZ3VhZ2VTZXR0aW5ncy5kYXRhLGk9bj8udXNlRGVmYXVsdERhdGFQcm92aWRlcixyPVtdO2lmKG4/LmRhdGFQcm92aWRlcnMpZm9yKGNvbnN0IHMgaW4gbi5kYXRhUHJvdmlkZXJzKXIucHVzaChvaChzLG4uZGF0YVByb3ZpZGVyc1tzXSkpO3RoaXMuX2xhbmd1YWdlU2VydmljZT1haCh7dXNlRGVmYXVsdERhdGFQcm92aWRlcjppLGN1c3RvbURhdGFQcm92aWRlcnM6cn0pfWFzeW5jIGRvQ29tcGxldGUoZSx0KXtsZXQgbj10aGlzLl9nZXRUZXh0RG9jdW1lbnQoZSk7aWYoIW4pcmV0dXJuIG51bGw7bGV0IGk9dGhpcy5fbGFuZ3VhZ2VTZXJ2aWNlLnBhcnNlSFRNTERvY3VtZW50KG4pO3JldHVybiBQcm9taXNlLnJlc29sdmUodGhpcy5fbGFuZ3VhZ2VTZXJ2aWNlLmRvQ29tcGxldGUobix0LGksdGhpcy5fbGFuZ3VhZ2VTZXR0aW5ncyYmdGhpcy5fbGFuZ3VhZ2VTZXR0aW5ncy5zdWdnZXN0KSl9YXN5bmMgZm9ybWF0KGUsdCxuKXtsZXQgaT10aGlzLl9nZXRUZXh0RG9jdW1lbnQoZSk7aWYoIWkpcmV0dXJuW107bGV0IHI9ey4uLnRoaXMuX2xhbmd1YWdlU2V0dGluZ3MuZm9ybWF0LC4uLm59LHM9dGhpcy5fbGFuZ3VhZ2VTZXJ2aWNlLmZvcm1hdChpLHQscik7cmV0dXJuIFByb21pc2UucmVzb2x2ZShzKX1hc3luYyBkb0hvdmVyKGUsdCl7bGV0IG49dGhpcy5fZ2V0VGV4dERvY3VtZW50KGUpO2lmKCFuKXJldHVybiBudWxsO2xldCBpPXRoaXMuX2xhbmd1YWdlU2VydmljZS5wYXJzZUhUTUxEb2N1bWVudChuKSxyPXRoaXMuX2xhbmd1YWdlU2VydmljZS5kb0hvdmVyKG4sdCxpKTtyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHIpfWFzeW5jIGZpbmREb2N1bWVudEhpZ2hsaWdodHMoZSx0KXtsZXQgbj10aGlzLl9nZXRUZXh0RG9jdW1lbnQoZSk7aWYoIW4pcmV0dXJuW107bGV0IGk9dGhpcy5fbGFuZ3VhZ2VTZXJ2aWNlLnBhcnNlSFRNTERvY3VtZW50KG4pLHI9dGhpcy5fbGFuZ3VhZ2VTZXJ2aWNlLmZpbmREb2N1bWVudEhpZ2hsaWdodHMobix0LGkpO3JldHVybiBQcm9taXNlLnJlc29sdmUocil9YXN5bmMgZmluZERvY3VtZW50TGlua3MoZSl7bGV0IHQ9dGhpcy5fZ2V0VGV4dERvY3VtZW50KGUpO2lmKCF0KXJldHVybltdO2xldCBuPXRoaXMuX2xhbmd1YWdlU2VydmljZS5maW5kRG9jdW1lbnRMaW5rcyh0LG51bGwpO3JldHVybiBQcm9taXNlLnJlc29sdmUobil9YXN5bmMgZmluZERvY3VtZW50U3ltYm9scyhlKXtsZXQgdD10aGlzLl9nZXRUZXh0RG9jdW1lbnQoZSk7aWYoIXQpcmV0dXJuW107bGV0IG49dGhpcy5fbGFuZ3VhZ2VTZXJ2aWNlLnBhcnNlSFRNTERvY3VtZW50KHQpLGk9dGhpcy5fbGFuZ3VhZ2VTZXJ2aWNlLmZpbmREb2N1bWVudFN5bWJvbHModCxuKTtyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGkpfWFzeW5jIGdldEZvbGRpbmdSYW5nZXMoZSx0KXtsZXQgbj10aGlzLl9nZXRUZXh0RG9jdW1lbnQoZSk7aWYoIW4pcmV0dXJuW107bGV0IGk9dGhpcy5fbGFuZ3VhZ2VTZXJ2aWNlLmdldEZvbGRpbmdSYW5nZXMobix0KTtyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGkpfWFzeW5jIGdldFNlbGVjdGlvblJhbmdlcyhlLHQpe2xldCBuPXRoaXMuX2dldFRleHREb2N1bWVudChlKTtpZighbilyZXR1cm5bXTtsZXQgaT10aGlzLl9sYW5ndWFnZVNlcnZpY2UuZ2V0U2VsZWN0aW9uUmFuZ2VzKG4sdCk7cmV0dXJuIFByb21pc2UucmVzb2x2ZShpKX1hc3luYyBkb1JlbmFtZShlLHQsbil7bGV0IGk9dGhpcy5fZ2V0VGV4dERvY3VtZW50KGUpO2lmKCFpKXJldHVybiBudWxsO2xldCByPXRoaXMuX2xhbmd1YWdlU2VydmljZS5wYXJzZUhUTUxEb2N1bWVudChpKSxzPXRoaXMuX2xhbmd1YWdlU2VydmljZS5kb1JlbmFtZShpLHQsbixyKTtyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHMpfV9nZXRUZXh0RG9jdW1lbnQoZSl7bGV0IHQ9dGhpcy5fY3R4LmdldE1pcnJvck1vZGVscygpO2ZvcihsZXQgbiBvZiB0KWlmKG4udXJpLnRvU3RyaW5nKCk9PT1lKXJldHVybiBNaS5jcmVhdGUoZSx0aGlzLl9sYW5ndWFnZUlkLG4udmVyc2lvbixuLmdldFZhbHVlKCkpO3JldHVybiBudWxsfX07c2VsZi5vbm1lc3NhZ2U9KCk9Pnt0YSgoZSx0KT0+bmV3IGxoKGUsdCkpfX0pKCk7Cg==", W = (l) => Uint8Array.from(atob(l), (Z) => Z.charCodeAt(0)), G = typeof self < "u" && self.Blob && new Blob([W(d)], { type: "text/javascript;charset=utf-8" });
|
2
|
-
function I(l) {
|
3
|
-
let Z;
|
4
|
-
try {
|
5
|
-
if (Z = G && (self.URL || self.webkitURL).createObjectURL(G), !Z) throw "";
|
6
|
-
const b = new Worker(Z, {
|
7
|
-
name: l?.name
|
8
|
-
});
|
9
|
-
return b.addEventListener("error", () => {
|
10
|
-
(self.URL || self.webkitURL).revokeObjectURL(Z);
|
11
|
-
}), b;
|
12
|
-
} catch {
|
13
|
-
return new Worker(
|
14
|
-
"data:text/javascript;base64," + d,
|
15
|
-
{
|
16
|
-
name: l?.name
|
17
|
-
}
|
18
|
-
);
|
19
|
-
} finally {
|
20
|
-
Z && (self.URL || self.webkitURL).revokeObjectURL(Z);
|
21
|
-
}
|
22
|
-
}
|
23
|
-
export {
|
24
|
-
I as default
|
25
|
-
};
|