filens-preview 0.2.0 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (29) hide show
  1. package/README.md +60 -13
  2. package/dist/all-in-one/THIRD-PARTY-NOTICES.txt +969 -0
  3. package/dist/all-in-one/archive/7zz.wasm +0 -0
  4. package/dist/all-in-one/assets/archive-worker-Cy3bEdVg.js +2 -0
  5. package/dist/all-in-one/filens.js +70557 -64591
  6. package/dist/all-in-one/index.html +12 -3
  7. package/dist/index.d.ts +5 -0
  8. package/dist/split/THIRD-PARTY-NOTICES.txt +969 -0
  9. package/dist/split/archive/7zz.wasm +0 -0
  10. package/dist/split/assets/archive-worker-Cy3bEdVg.js +2 -0
  11. package/dist/split/assets/{iwork-worker-DiTOJG8f.js → iwork-worker-B9KPoDW3.js} +17 -17
  12. package/dist/split/chunks/archive-B4jVwD9o.js +921 -0
  13. package/dist/split/chunks/{cad-Cyh8aipO.js → cad-DMg-lGJX.js} +1 -1
  14. package/dist/split/chunks/{core-gp02JQ3r.js → core--zVW212C.js} +4205 -3760
  15. package/dist/split/chunks/{diagram-rxvArV-1.js → diagram-CDwCA6LZ.js} +2 -2
  16. package/dist/split/chunks/{docx-ecvZsSWm.js → docx-CuQfFJqr.js} +2 -2
  17. package/dist/split/chunks/{ebook-5FyKWZ8s.js → ebook-CLlJ8KX3.js} +2 -2
  18. package/dist/split/chunks/{iwork-DlaehzuR.js → iwork-dNVC0X8j.js} +39 -39
  19. package/dist/split/chunks/media-runtime-gcsBQMuo.js +48 -0
  20. package/dist/split/chunks/{mindmap-D9lNNDoa.js → mindmap-g0-VoK-K.js} +2 -2
  21. package/dist/split/chunks/{model3d-BtFT01ZH.js → model3d-1G1CC52V.js} +3 -3
  22. package/dist/split/chunks/{panorama-Ci6DK6sa.js → panorama-D7GVivtM.js} +246 -234
  23. package/dist/split/chunks/{vendor-DvWhw-zP.js → vendor-DPFNKNkh.js} +28487 -23383
  24. package/dist/split/chunks/{xlsx-VJTu9XNS.js → xlsx-Co26yo-R.js} +2 -2
  25. package/dist/split/filens.js +2714 -2483
  26. package/dist/split/index.html +12 -3
  27. package/package.json +2 -2
  28. package/dist/split/chunks/archive-_cUUL2-3.js +0 -731
  29. package/dist/split/chunks/media-runtime-DwW7eq4g.js +0 -48
@@ -0,0 +1,48 @@
1
+ import { aQ as h } from "./vendor-DPFNKNkh.js";
2
+ import { t as Y } from "./panorama-D7GVivtM.js";
3
+ const V = "KGZ1bmN0aW9uKCl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHdyKHUpe3JldHVybiB1JiZ1Ll9fZXNNb2R1bGUmJk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh1LCJkZWZhdWx0Iik/dS5kZWZhdWx0OnV9ZnVuY3Rpb24gYnIodSl7aWYodS5fX2VzTW9kdWxlKXJldHVybiB1O3ZhciBwPXUuZGVmYXVsdDtpZih0eXBlb2YgcD09ImZ1bmN0aW9uIil7dmFyIHY9ZnVuY3Rpb24gVCgpe3JldHVybiB0aGlzIGluc3RhbmNlb2YgVD9SZWZsZWN0LmNvbnN0cnVjdChwLGFyZ3VtZW50cyx0aGlzLmNvbnN0cnVjdG9yKTpwLmFwcGx5KHRoaXMsYXJndW1lbnRzKX07di5wcm90b3R5cGU9cC5wcm90b3R5cGV9ZWxzZSB2PXt9O3JldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkodiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksT2JqZWN0LmtleXModSkuZm9yRWFjaChmdW5jdGlvbihUKXt2YXIgJD1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHUsVCk7T2JqZWN0LmRlZmluZVByb3BlcnR5KHYsVCwkLmdldD8kOntlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB1W1RdfX0pfSksdn12YXIgcXQ9e2V4cG9ydHM6e319LEVyPXt9LGtyPU9iamVjdC5mcmVlemUoe19fcHJvdG9fXzpudWxsLGRlZmF1bHQ6RXJ9KSxndD1icihrcik7KGZ1bmN0aW9uKHUscCl7dmFyIHY9KCgpPT57dmFyIFQsJD10eXBlb2YgZG9jdW1lbnQ8InUiPyhUPWRvY3VtZW50LmN1cnJlbnRTY3JpcHQpPT1udWxsP3ZvaWQgMDpULnNyYzp2b2lkIDA7cmV0dXJuIHR5cGVvZiBfX2ZpbGVuYW1lPCJ1IiYmKCR8fCgkPV9fZmlsZW5hbWUpKSxmdW5jdGlvbihxPXt9KXt2YXIgTCxuPXEsZWUsSztuZXcgUHJvbWlzZSgoZSx0KT0+e2VlPWUsSz10fSk7dmFyIFo9dHlwZW9mIHdpbmRvdz09Im9iamVjdCIseD10eXBlb2YgaW1wb3J0U2NyaXB0cz09ImZ1bmN0aW9uIixNPXR5cGVvZiBwcm9jZXNzPT0ib2JqZWN0IiYmdHlwZW9mIHByb2Nlc3MudmVyc2lvbnM9PSJvYmplY3QiJiZ0eXBlb2YgcHJvY2Vzcy52ZXJzaW9ucy5ub2RlPT0ic3RyaW5nIix0ZT1PYmplY3QuYXNzaWduKHt9LG4pLHBlPSIuL3RoaXMucHJvZ3JhbSIsTj0iIjtmdW5jdGlvbiBiZShlKXtyZXR1cm4gbi5sb2NhdGVGaWxlP24ubG9jYXRlRmlsZShlLE4pOk4rZX12YXIgaGUsRWUsWDtpZihNKXt2YXIga2U9Z3QsamU9Z3Q7Tj1fX2Rpcm5hbWUrIi8iLGhlPShlLHQpPT4oZT1FdChlKT9uZXcgVVJMKGUpOmplLm5vcm1hbGl6ZShlKSxrZS5yZWFkRmlsZVN5bmMoZSx0P3ZvaWQgMDoidXRmOCIpKSxYPWU9Pnt2YXIgdD1oZShlLCEwKTtyZXR1cm4gdC5idWZmZXJ8fCh0PW5ldyBVaW50OEFycmF5KHQpKSx0fSxFZT0oZSx0LHIsaT0hMCk9PntlPUV0KGUpP25ldyBVUkwoZSk6amUubm9ybWFsaXplKGUpLGtlLnJlYWRGaWxlKGUsaT92b2lkIDA6InV0ZjgiLChfLHMpPT57Xz9yKF8pOnQoaT9zLmJ1ZmZlcjpzKX0pfSwhbi50aGlzUHJvZ3JhbSYmcHJvY2Vzcy5hcmd2Lmxlbmd0aD4xJiYocGU9cHJvY2Vzcy5hcmd2WzFdLnJlcGxhY2UoL1xcL2csIi8iKSkscHJvY2Vzcy5hcmd2LnNsaWNlKDIpfWVsc2UoWnx8eCkmJih4P049c2VsZi5sb2NhdGlvbi5ocmVmOnR5cGVvZiBkb2N1bWVudDwidSImJmRvY3VtZW50LmN1cnJlbnRTY3JpcHQmJihOPWRvY3VtZW50LmN1cnJlbnRTY3JpcHQuc3JjKSwkJiYoTj0kKSxOLnN0YXJ0c1dpdGgoImJsb2I6Iik/Tj0iIjpOPU4uc3Vic3RyKDAsTi5yZXBsYWNlKC9bPyNdLiovLCIiKS5sYXN0SW5kZXhPZigiLyIpKzEpLGhlPWU9Pnt2YXIgdD1uZXcgWE1MSHR0cFJlcXVlc3Q7cmV0dXJuIHQub3BlbigiR0VUIixlLCExKSx0LnNlbmQobnVsbCksdC5yZXNwb25zZVRleHR9LHgmJihYPWU9Pnt2YXIgdD1uZXcgWE1MSHR0cFJlcXVlc3Q7cmV0dXJuIHQub3BlbigiR0VUIixlLCExKSx0LnJlc3BvbnNlVHlwZT0iYXJyYXlidWZmZXIiLHQuc2VuZChudWxsKSxuZXcgVWludDhBcnJheSh0LnJlc3BvbnNlKX0pLEVlPShlLHQscik9PntpZihFdChlKSl7dmFyIGk9bmV3IFhNTEh0dHBSZXF1ZXN0O2kub3BlbigiR0VUIixlLCEwKSxpLnJlc3BvbnNlVHlwZT0iYXJyYXlidWZmZXIiLGkub25sb2FkPSgpPT57aWYoaS5zdGF0dXM9PTIwMHx8aS5zdGF0dXM9PTAmJmkucmVzcG9uc2Upe3QoaS5yZXNwb25zZSk7cmV0dXJufXIoKX0saS5vbmVycm9yPXIsaS5zZW5kKG51bGwpO3JldHVybn1mZXRjaChlLHtjcmVkZW50aWFsczoic2FtZS1vcmlnaW4ifSkudGhlbihfPT5fLm9rP18uYXJyYXlCdWZmZXIoKTpQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoXy5zdGF0dXMrIiA6ICIrXy51cmwpKSkudGhlbih0LHIpfSk7dmFyIHhlPW4ucHJpbnR8fGNvbnNvbGUubG9nLmJpbmQoY29uc29sZSksZ2U9bi5wcmludEVycnx8Y29uc29sZS5lcnJvci5iaW5kKGNvbnNvbGUpO09iamVjdC5hc3NpZ24obix0ZSksdGU9bnVsbCxuLmFyZ3VtZW50cyYmbi5hcmd1bWVudHMsbi50aGlzUHJvZ3JhbSYmKHBlPW4udGhpc1Byb2dyYW0pLG4ucXVpdCYmbi5xdWl0O3ZhciBPZTtuLndhc21CaW5hcnkmJihPZT1uLndhc21CaW5hcnkpO3ZhciBvZSx6ZT0hMSxBLFUsaWUsJGUsRSxQLFBlLE5lO2Z1bmN0aW9uIGFlKCl7dmFyIGU9b2UuYnVmZmVyO24uSEVBUDg9QT1uZXcgSW50OEFycmF5KGUpLG4uSEVBUDE2PWllPW5ldyBJbnQxNkFycmF5KGUpLG4uSEVBUFU4PVU9bmV3IFVpbnQ4QXJyYXkoZSksbi5IRUFQVTE2PSRlPW5ldyBVaW50MTZBcnJheShlKSxuLkhFQVAzMj1FPW5ldyBJbnQzMkFycmF5KGUpLG4uSEVBUFUzMj1QPW5ldyBVaW50MzJBcnJheShlKSxuLkhFQVBGMzI9UGU9bmV3IEZsb2F0MzJBcnJheShlKSxuLkhFQVBGNjQ9TmU9bmV3IEZsb2F0NjRBcnJheShlKX12YXIgdHQ9W10scnQ9W10sUmU9W107ZnVuY3Rpb24gdmUoKXtpZihuLnByZVJ1bilmb3IodHlwZW9mIG4ucHJlUnVuPT0iZnVuY3Rpb24iJiYobi5wcmVSdW49W24ucHJlUnVuXSk7bi5wcmVSdW4ubGVuZ3RoOylMZShuLnByZVJ1bi5zaGlmdCgpKTtrdCh0dCl9ZnVuY3Rpb24gbnQoKXshbi5ub0ZTSW5pdCYmIW8uaW5pdC5pbml0aWFsaXplZCYmby5pbml0KCksby5pZ25vcmVQZXJtaXNzaW9ucz0hMSxrdChydCl9ZnVuY3Rpb24gQ2UoKXtpZihuLnBvc3RSdW4pZm9yKHR5cGVvZiBuLnBvc3RSdW49PSJmdW5jdGlvbiImJihuLnBvc3RSdW49W24ucG9zdFJ1bl0pO24ucG9zdFJ1bi5sZW5ndGg7KWl0KG4ucG9zdFJ1bi5zaGlmdCgpKTtrdChSZSl9ZnVuY3Rpb24gTGUoZSl7dHQudW5zaGlmdChlKX1mdW5jdGlvbiBWZShlKXtydC51bnNoaWZ0KGUpfWZ1bmN0aW9uIGl0KGUpe1JlLnVuc2hpZnQoZSl9dmFyIF9lPTAsVGU9bnVsbDtmdW5jdGlvbiBJZShlKXt2YXIgdDtfZSsrLCh0PW4ubW9uaXRvclJ1bkRlcGVuZGVuY2llcyk9PW51bGx8fHQuY2FsbChuLF9lKX1mdW5jdGlvbiBGZShlKXt2YXIgdDtpZihfZS0tLCh0PW4ubW9uaXRvclJ1bkRlcGVuZGVuY2llcyk9PW51bGx8fHQuY2FsbChuLF9lKSxfZT09MCYmVGUpe3ZhciByPVRlO1RlPW51bGwscigpfX1mdW5jdGlvbiB5ZShlKXt2YXIgdDsodD1uLm9uQWJvcnQpPT1udWxsfHx0LmNhbGwobixlKSxlPSJBYm9ydGVkKCIrZSsiKSIsZ2UoZSksemU9ITAsZSs9Ii4gQnVpbGQgd2l0aCAtc0FTU0VSVElPTlMgZm9yIG1vcmUgaW5mby4iO3ZhciByPW5ldyBXZWJBc3NlbWJseS5SdW50aW1lRXJyb3IoZSk7dGhyb3cgSyhyKSxyfXZhciBMcj0iZGF0YTphcHBsaWNhdGlvbi9vY3RldC1zdHJlYW07YmFzZTY0LCIsVnI9ZT0+ZS5zdGFydHNXaXRoKExyKSxFdD1lPT5lLnN0YXJ0c1dpdGgoImZpbGU6Ly8iKTtmdW5jdGlvbiBZcigpe3ZhciBlPSJsaWJoZWlmLndhc20iO3JldHVybiBWcihlKT9lOmJlKGUpfXZhciBhdDtmdW5jdGlvbiBYcihlKXtpZihlPT1hdCYmT2UpcmV0dXJuIG5ldyBVaW50OEFycmF5KE9lKTtpZihYKXJldHVybiBYKGUpO3Rocm93J3N5bmMgZmV0Y2hpbmcgb2YgdGhlIHdhc20gZmFpbGVkOiB5b3UgY2FuIHByZWxvYWQgaXQgdG8gTW9kdWxlWyJ3YXNtQmluYXJ5Il0gbWFudWFsbHksIG9yIGVtY2MucHkgd2lsbCBkbyB0aGF0IGZvciB5b3Ugd2hlbiBnZW5lcmF0aW5nIEhUTUwgKGJ1dCBub3QgSlMpJ31mdW5jdGlvbiBHcihlLHQpe3ZhciByLGk9WHIoZSk7cj1uZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGkpO3ZhciBfPW5ldyBXZWJBc3NlbWJseS5JbnN0YW5jZShyLHQpO3JldHVybltfLHJdfWZ1bmN0aW9uIEpyKCl7cmV0dXJue2E6UWl9fWZ1bmN0aW9uIEtyKCl7dmFyIGU9SnIoKTtmdW5jdGlvbiB0KGksXyl7cmV0dXJuIGE9aS5leHBvcnRzLG9lPWEuUSxhZSgpLG9yPWEuVCxWZShhLlIpLEZlKCksYX1pZihJZSgpLG4uaW5zdGFudGlhdGVXYXNtKXRyeXtyZXR1cm4gbi5pbnN0YW50aWF0ZVdhc20oZSx0KX1jYXRjaChpKXtnZShgTW9kdWxlLmluc3RhbnRpYXRlV2FzbSBjYWxsYmFjayBmYWlsZWQgd2l0aCBlcnJvcjogJHtpfWApLEsoaSl9YXR8fChhdD1ZcigpKTt2YXIgcj1HcihhdCxlKTtyZXR1cm4gdChyWzBdKX12YXIgRixCLGt0PWU9Pntmb3IoO2UubGVuZ3RoPjA7KWUuc2hpZnQoKShuKX07bi5ub0V4aXRSdW50aW1lO3ZhciBHdD10eXBlb2YgVGV4dERlY29kZXI8InUiP25ldyBUZXh0RGVjb2RlcigidXRmOCIpOnZvaWQgMCxIZT0oZSx0LHIpPT57Zm9yKHZhciBpPXQrcixfPXQ7ZVtfXSYmIShfPj1pKTspKytfO2lmKF8tdD4xNiYmZS5idWZmZXImJkd0KXJldHVybiBHdC5kZWNvZGUoZS5zdWJhcnJheSh0LF8pKTtmb3IodmFyIHM9IiI7dDxfOyl7dmFyIGw9ZVt0KytdO2lmKCEobCYxMjgpKXtzKz1TdHJpbmcuZnJvbUNoYXJDb2RlKGwpO2NvbnRpbnVlfXZhciBmPWVbdCsrXSY2MztpZigobCYyMjQpPT0xOTIpe3MrPVN0cmluZy5mcm9tQ2hhckNvZGUoKGwmMzEpPDw2fGYpO2NvbnRpbnVlfXZhciBoPWVbdCsrXSY2MztpZigobCYyNDApPT0yMjQ/bD0obCYxNSk8PDEyfGY8PDZ8aDpsPShsJjcpPDwxOHxmPDwxMnxoPDw2fGVbdCsrXSY2MyxsPDY1NTM2KXMrPVN0cmluZy5mcm9tQ2hhckNvZGUobCk7ZWxzZXt2YXIgZD1sLTY1NTM2O3MrPVN0cmluZy5mcm9tQ2hhckNvZGUoNTUyOTZ8ZD4+MTAsNTYzMjB8ZCYxMDIzKX19cmV0dXJuIHN9LERlPShlLHQpPT5lP0hlKFUsZSx0KToiIixacj0oZSx0LHIsaSk9Pnt5ZShgQXNzZXJ0aW9uIGZhaWxlZDogJHtEZShlKX0sIGF0OiBgK1t0P0RlKHQpOiJ1bmtub3duIGZpbGVuYW1lIixyLGk/RGUoaSk6InVua25vd24gZnVuY3Rpb24iXSl9O2NsYXNzIFFye2NvbnN0cnVjdG9yKHQpe3RoaXMuZXhjUHRyPXQsdGhpcy5wdHI9dC0yNH1zZXRfdHlwZSh0KXtQW3RoaXMucHRyKzQ+PjJdPXR9Z2V0X3R5cGUoKXtyZXR1cm4gUFt0aGlzLnB0cis0Pj4yXX1zZXRfZGVzdHJ1Y3Rvcih0KXtQW3RoaXMucHRyKzg+PjJdPXR9Z2V0X2Rlc3RydWN0b3IoKXtyZXR1cm4gUFt0aGlzLnB0cis4Pj4yXX1zZXRfY2F1Z2h0KHQpe3Q9dD8xOjAsQVt0aGlzLnB0cisxMl09dH1nZXRfY2F1Z2h0KCl7cmV0dXJuIEFbdGhpcy5wdHIrMTJdIT0wfXNldF9yZXRocm93bih0KXt0PXQ/MTowLEFbdGhpcy5wdHIrMTNdPXR9Z2V0X3JldGhyb3duKCl7cmV0dXJuIEFbdGhpcy5wdHIrMTNdIT0wfWluaXQodCxyKXt0aGlzLnNldF9hZGp1c3RlZF9wdHIoMCksdGhpcy5zZXRfdHlwZSh0KSx0aGlzLnNldF9kZXN0cnVjdG9yKHIpfXNldF9hZGp1c3RlZF9wdHIodCl7UFt0aGlzLnB0cisxNj4+Ml09dH1nZXRfYWRqdXN0ZWRfcHRyKCl7cmV0dXJuIFBbdGhpcy5wdHIrMTY+PjJdfWdldF9leGNlcHRpb25fcHRyKCl7dmFyIHQ9dGEodGhpcy5nZXRfdHlwZSgpKTtpZih0KXJldHVybiBQW3RoaXMuZXhjUHRyPj4yXTt2YXIgcj10aGlzLmdldF9hZGp1c3RlZF9wdHIoKTtyZXR1cm4gciE9PTA/cjp0aGlzLmV4Y1B0cn19dmFyIEp0PTAsZW49KGUsdCxyKT0+e3ZhciBpPW5ldyBRcihlKTt0aHJvdyBpLmluaXQodCxyKSxKdD1lLEp0fTtmdW5jdGlvbiBvdCgpe3ZhciBlPUVbK1YudmFyYXJncz4+Ml07cmV0dXJuIFYudmFyYXJncys9NCxlfXZhciBXZT1vdCxPPXtpc0FiczplPT5lLmNoYXJBdCgwKT09PSIvIixzcGxpdFBhdGg6ZT0+e3ZhciB0PS9eKFwvP3wpKFtcc1xTXSo/KSgoPzpcLnsxLDJ9fFteXC9dKz98KShcLlteLlwvXSp8KSkoPzpbXC9dKikkLztyZXR1cm4gdC5leGVjKGUpLnNsaWNlKDEpfSxub3JtYWxpemVBcnJheTooZSx0KT0+e2Zvcih2YXIgcj0wLGk9ZS5sZW5ndGgtMTtpPj0wO2ktLSl7dmFyIF89ZVtpXTtfPT09Ii4iP2Uuc3BsaWNlKGksMSk6Xz09PSIuLiI/KGUuc3BsaWNlKGksMSkscisrKTpyJiYoZS5zcGxpY2UoaSwxKSxyLS0pfWlmKHQpZm9yKDtyO3ItLSllLnVuc2hpZnQoIi4uIik7cmV0dXJuIGV9LG5vcm1hbGl6ZTplPT57dmFyIHQ9Ty5pc0FicyhlKSxyPWUuc3Vic3RyKC0xKT09PSIvIjtyZXR1cm4gZT1PLm5vcm1hbGl6ZUFycmF5KGUuc3BsaXQoIi8iKS5maWx0ZXIoaT0+ISFpKSwhdCkuam9pbigiLyIpLCFlJiYhdCYmKGU9Ii4iKSxlJiZyJiYoZSs9Ii8iKSwodD8iLyI6IiIpK2V9LGRpcm5hbWU6ZT0+e3ZhciB0PU8uc3BsaXRQYXRoKGUpLHI9dFswXSxpPXRbMV07cmV0dXJuIXImJiFpPyIuIjooaSYmKGk9aS5zdWJzdHIoMCxpLmxlbmd0aC0xKSkscitpKX0sYmFzZW5hbWU6ZT0+e2lmKGU9PT0iLyIpcmV0dXJuIi8iO2U9Ty5ub3JtYWxpemUoZSksZT1lLnJlcGxhY2UoL1wvJC8sIiIpO3ZhciB0PWUubGFzdEluZGV4T2YoIi8iKTtyZXR1cm4gdD09PS0xP2U6ZS5zdWJzdHIodCsxKX0sam9pbjooLi4uZSk9Pk8ubm9ybWFsaXplKGUuam9pbigiLyIpKSxqb2luMjooZSx0KT0+Ty5ub3JtYWxpemUoZSsiLyIrdCl9LHRuPSgpPT57aWYodHlwZW9mIGNyeXB0bz09Im9iamVjdCImJnR5cGVvZiBjcnlwdG8uZ2V0UmFuZG9tVmFsdWVzPT0iZnVuY3Rpb24iKXJldHVybiBpPT5jcnlwdG8uZ2V0UmFuZG9tVmFsdWVzKGkpO2lmKE0pdHJ5e3ZhciBlPWd0LHQ9ZS5yYW5kb21GaWxsU3luYztpZih0KXJldHVybiBpPT5lLnJhbmRvbUZpbGxTeW5jKGkpO3ZhciByPWUucmFuZG9tQnl0ZXM7cmV0dXJuIGk9PihpLnNldChyKGkuYnl0ZUxlbmd0aCkpLGkpfWNhdGNoe315ZSgiaW5pdFJhbmRvbURldmljZSIpfSxLdD1lPT4oS3Q9dG4oKSkoZSksY2U9e3Jlc29sdmU6KC4uLmUpPT57Zm9yKHZhciB0PSIiLHI9ITEsaT1lLmxlbmd0aC0xO2k+PS0xJiYhcjtpLS0pe3ZhciBfPWk+PTA/ZVtpXTpvLmN3ZCgpO2lmKHR5cGVvZiBfIT0ic3RyaW5nIil0aHJvdyBuZXcgVHlwZUVycm9yKCJBcmd1bWVudHMgdG8gcGF0aC5yZXNvbHZlIG11c3QgYmUgc3RyaW5ncyIpO2lmKCFfKXJldHVybiIiO3Q9XysiLyIrdCxyPU8uaXNBYnMoXyl9cmV0dXJuIHQ9Ty5ub3JtYWxpemVBcnJheSh0LnNwbGl0KCIvIikuZmlsdGVyKHM9PiEhcyksIXIpLmpvaW4oIi8iKSwocj8iLyI6IiIpK3R8fCIuIn0scmVsYXRpdmU6KGUsdCk9PntlPWNlLnJlc29sdmUoZSkuc3Vic3RyKDEpLHQ9Y2UucmVzb2x2ZSh0KS5zdWJzdHIoMSk7ZnVuY3Rpb24gcihkKXtmb3IodmFyIG09MDttPGQubGVuZ3RoJiZkW21dPT09IiI7bSsrKTtmb3IodmFyIGI9ZC5sZW5ndGgtMTtiPj0wJiZkW2JdPT09IiI7Yi0tKTtyZXR1cm4gbT5iP1tdOmQuc2xpY2UobSxiLW0rMSl9Zm9yKHZhciBpPXIoZS5zcGxpdCgiLyIpKSxfPXIodC5zcGxpdCgiLyIpKSxzPU1hdGgubWluKGkubGVuZ3RoLF8ubGVuZ3RoKSxsPXMsZj0wO2Y8cztmKyspaWYoaVtmXSE9PV9bZl0pe2w9ZjticmVha31mb3IodmFyIGg9W10sZj1sO2Y8aS5sZW5ndGg7ZisrKWgucHVzaCgiLi4iKTtyZXR1cm4gaD1oLmNvbmNhdChfLnNsaWNlKGwpKSxoLmpvaW4oIi8iKX19LHh0PVtdLCR0PWU9Pntmb3IodmFyIHQ9MCxyPTA7cjxlLmxlbmd0aDsrK3Ipe3ZhciBpPWUuY2hhckNvZGVBdChyKTtpPD0xMjc/dCsrOmk8PTIwNDc/dCs9MjppPj01NTI5NiYmaTw9NTczNDM/KHQrPTQsKytyKTp0Kz0zfXJldHVybiB0fSxQdD0oZSx0LHIsaSk9PntpZighKGk+MCkpcmV0dXJuIDA7Zm9yKHZhciBfPXIscz1yK2ktMSxsPTA7bDxlLmxlbmd0aDsrK2wpe3ZhciBmPWUuY2hhckNvZGVBdChsKTtpZihmPj01NTI5NiYmZjw9NTczNDMpe3ZhciBoPWUuY2hhckNvZGVBdCgrK2wpO2Y9NjU1MzYrKChmJjEwMjMpPDwxMCl8aCYxMDIzfWlmKGY8PTEyNyl7aWYocj49cylicmVhazt0W3IrK109Zn1lbHNlIGlmKGY8PTIwNDcpe2lmKHIrMT49cylicmVhazt0W3IrK109MTkyfGY+PjYsdFtyKytdPTEyOHxmJjYzfWVsc2UgaWYoZjw9NjU1MzUpe2lmKHIrMj49cylicmVhazt0W3IrK109MjI0fGY+PjEyLHRbcisrXT0xMjh8Zj4+NiY2Myx0W3IrK109MTI4fGYmNjN9ZWxzZXtpZihyKzM+PXMpYnJlYWs7dFtyKytdPTI0MHxmPj4xOCx0W3IrK109MTI4fGY+PjEyJjYzLHRbcisrXT0xMjh8Zj4+NiY2Myx0W3IrK109MTI4fGYmNjN9fXJldHVybiB0W3JdPTAsci1ffTtmdW5jdGlvbiBfdChlLHQscil7dmFyIGk9JHQoZSkrMSxfPW5ldyBBcnJheShpKSxzPVB0KGUsXywwLF8ubGVuZ3RoKTtyZXR1cm4gdCYmKF8ubGVuZ3RoPXMpLF99dmFyIHJuPSgpPT57aWYoIXh0Lmxlbmd0aCl7dmFyIGU9bnVsbDtpZihNKXt2YXIgdD0yNTYscj1CdWZmZXIuYWxsb2ModCksaT0wLF89cHJvY2Vzcy5zdGRpbi5mZDt0cnl7aT1rZS5yZWFkU3luYyhfLHIsMCx0KX1jYXRjaChzKXtpZihzLnRvU3RyaW5nKCkuaW5jbHVkZXMoIkVPRiIpKWk9MDtlbHNlIHRocm93IHN9aT4wJiYoZT1yLnNsaWNlKDAsaSkudG9TdHJpbmcoInV0Zi04IikpfWVsc2UgdHlwZW9mIHdpbmRvdzwidSImJnR5cGVvZiB3aW5kb3cucHJvbXB0PT0iZnVuY3Rpb24iJiYoZT13aW5kb3cucHJvbXB0KCJJbnB1dDogIiksZSE9PW51bGwmJihlKz1gCmApKTtpZighZSlyZXR1cm4gbnVsbDt4dD1fdChlLCEwKX1yZXR1cm4geHQuc2hpZnQoKX0sQWU9e3R0eXM6W10saW5pdCgpe30sc2h1dGRvd24oKXt9LHJlZ2lzdGVyKGUsdCl7QWUudHR5c1tlXT17aW5wdXQ6W10sb3V0cHV0OltdLG9wczp0fSxvLnJlZ2lzdGVyRGV2aWNlKGUsQWUuc3RyZWFtX29wcyl9LHN0cmVhbV9vcHM6e29wZW4oZSl7dmFyIHQ9QWUudHR5c1tlLm5vZGUucmRldl07aWYoIXQpdGhyb3cgbmV3IG8uRXJybm9FcnJvcig0Myk7ZS50dHk9dCxlLnNlZWthYmxlPSExfSxjbG9zZShlKXtlLnR0eS5vcHMuZnN5bmMoZS50dHkpfSxmc3luYyhlKXtlLnR0eS5vcHMuZnN5bmMoZS50dHkpfSxyZWFkKGUsdCxyLGksXyl7aWYoIWUudHR5fHwhZS50dHkub3BzLmdldF9jaGFyKXRocm93IG5ldyBvLkVycm5vRXJyb3IoNjApO2Zvcih2YXIgcz0wLGw9MDtsPGk7bCsrKXt2YXIgZjt0cnl7Zj1lLnR0eS5vcHMuZ2V0X2NoYXIoZS50dHkpfWNhdGNoe3Rocm93IG5ldyBvLkVycm5vRXJyb3IoMjkpfWlmKGY9PT12b2lkIDAmJnM9PT0wKXRocm93IG5ldyBvLkVycm5vRXJyb3IoNik7aWYoZj09bnVsbClicmVhaztzKyssdFtyK2xdPWZ9cmV0dXJuIHMmJihlLm5vZGUudGltZXN0YW1wPURhdGUubm93KCkpLHN9LHdyaXRlKGUsdCxyLGksXyl7aWYoIWUudHR5fHwhZS50dHkub3BzLnB1dF9jaGFyKXRocm93IG5ldyBvLkVycm5vRXJyb3IoNjApO3RyeXtmb3IodmFyIHM9MDtzPGk7cysrKWUudHR5Lm9wcy5wdXRfY2hhcihlLnR0eSx0W3Irc10pfWNhdGNoe3Rocm93IG5ldyBvLkVycm5vRXJyb3IoMjkpfXJldHVybiBpJiYoZS5ub2RlLnRpbWVzdGFtcD1EYXRlLm5vdygpKSxzfX0sZGVmYXVsdF90dHlfb3BzOntnZXRfY2hhcihlKXtyZXR1cm4gcm4oKX0scHV0X2NoYXIoZSx0KXt0PT09bnVsbHx8dD09PTEwPyh4ZShIZShlLm91dHB1dCwwKSksZS5vdXRwdXQ9W10pOnQhPTAmJmUub3V0cHV0LnB1c2godCl9LGZzeW5jKGUpe2Uub3V0cHV0JiZlLm91dHB1dC5sZW5ndGg+MCYmKHhlKEhlKGUub3V0cHV0LDApKSxlLm91dHB1dD1bXSl9LGlvY3RsX3RjZ2V0cyhlKXtyZXR1cm57Y19pZmxhZzoyNTg1NixjX29mbGFnOjUsY19jZmxhZzoxOTEsY19sZmxhZzozNTM4NyxjX2NjOlszLDI4LDEyNywyMSw0LDAsMSwwLDE3LDE5LDI2LDAsMTgsMTUsMjMsMjIsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMF19fSxpb2N0bF90Y3NldHMoZSx0LHIpe3JldHVybiAwfSxpb2N0bF90aW9jZ3dpbnN6KGUpe3JldHVyblsyNCw4MF19fSxkZWZhdWx0X3R0eTFfb3BzOntwdXRfY2hhcihlLHQpe3Q9PT1udWxsfHx0PT09MTA/KGdlKEhlKGUub3V0cHV0LDApKSxlLm91dHB1dD1bXSk6dCE9MCYmZS5vdXRwdXQucHVzaCh0KX0sZnN5bmMoZSl7ZS5vdXRwdXQmJmUub3V0cHV0Lmxlbmd0aD4wJiYoZ2UoSGUoZS5vdXRwdXQsMCkpLGUub3V0cHV0PVtdKX19fSxadD1lPT57eWUoKX0sQz17b3BzX3RhYmxlOm51bGwsbW91bnQoZSl7cmV0dXJuIEMuY3JlYXRlTm9kZShudWxsLCIvIiwxNjg5NSwwKX0sY3JlYXRlTm9kZShlLHQscixpKXtpZihvLmlzQmxrZGV2KHIpfHxvLmlzRklGTyhyKSl0aHJvdyBuZXcgby5FcnJub0Vycm9yKDYzKTtDLm9wc190YWJsZXx8KEMub3BzX3RhYmxlPXtkaXI6e25vZGU6e2dldGF0dHI6Qy5ub2RlX29wcy5nZXRhdHRyLHNldGF0dHI6Qy5ub2RlX29wcy5zZXRhdHRyLGxvb2t1cDpDLm5vZGVfb3BzLmxvb2t1cCxta25vZDpDLm5vZGVfb3BzLm1rbm9kLHJlbmFtZTpDLm5vZGVfb3BzLnJlbmFtZSx1bmxpbms6Qy5ub2RlX29wcy51bmxpbmsscm1kaXI6Qy5ub2RlX29wcy5ybWRpcixyZWFkZGlyOkMubm9kZV9vcHMucmVhZGRpcixzeW1saW5rOkMubm9kZV9vcHMuc3ltbGlua30sc3RyZWFtOntsbHNlZWs6Qy5zdHJlYW1fb3BzLmxsc2Vla319LGZpbGU6e25vZGU6e2dldGF0dHI6Qy5ub2RlX29wcy5nZXRhdHRyLHNldGF0dHI6Qy5ub2RlX29wcy5zZXRhdHRyfSxzdHJlYW06e2xsc2VlazpDLnN0cmVhbV9vcHMubGxzZWVrLHJlYWQ6Qy5zdHJlYW1fb3BzLnJlYWQsd3JpdGU6Qy5zdHJlYW1fb3BzLndyaXRlLGFsbG9jYXRlOkMuc3RyZWFtX29wcy5hbGxvY2F0ZSxtbWFwOkMuc3RyZWFtX29wcy5tbWFwLG1zeW5jOkMuc3RyZWFtX29wcy5tc3luY319LGxpbms6e25vZGU6e2dldGF0dHI6Qy5ub2RlX29wcy5nZXRhdHRyLHNldGF0dHI6Qy5ub2RlX29wcy5zZXRhdHRyLHJlYWRsaW5rOkMubm9kZV9vcHMucmVhZGxpbmt9LHN0cmVhbTp7fX0sY2hyZGV2Ontub2RlOntnZXRhdHRyOkMubm9kZV9vcHMuZ2V0YXR0cixzZXRhdHRyOkMubm9kZV9vcHMuc2V0YXR0cn0sc3RyZWFtOm8uY2hyZGV2X3N0cmVhbV9vcHN9fSk7dmFyIF89by5jcmVhdGVOb2RlKGUsdCxyLGkpO3JldHVybiBvLmlzRGlyKF8ubW9kZSk/KF8ubm9kZV9vcHM9Qy5vcHNfdGFibGUuZGlyLm5vZGUsXy5zdHJlYW1fb3BzPUMub3BzX3RhYmxlLmRpci5zdHJlYW0sXy5jb250ZW50cz17fSk6by5pc0ZpbGUoXy5tb2RlKT8oXy5ub2RlX29wcz1DLm9wc190YWJsZS5maWxlLm5vZGUsXy5zdHJlYW1fb3BzPUMub3BzX3RhYmxlLmZpbGUuc3RyZWFtLF8udXNlZEJ5dGVzPTAsXy5jb250ZW50cz1udWxsKTpvLmlzTGluayhfLm1vZGUpPyhfLm5vZGVfb3BzPUMub3BzX3RhYmxlLmxpbmsubm9kZSxfLnN0cmVhbV9vcHM9Qy5vcHNfdGFibGUubGluay5zdHJlYW0pOm8uaXNDaHJkZXYoXy5tb2RlKSYmKF8ubm9kZV9vcHM9Qy5vcHNfdGFibGUuY2hyZGV2Lm5vZGUsXy5zdHJlYW1fb3BzPUMub3BzX3RhYmxlLmNocmRldi5zdHJlYW0pLF8udGltZXN0YW1wPURhdGUubm93KCksZSYmKGUuY29udGVudHNbdF09XyxlLnRpbWVzdGFtcD1fLnRpbWVzdGFtcCksX30sZ2V0RmlsZURhdGFBc1R5cGVkQXJyYXkoZSl7cmV0dXJuIGUuY29udGVudHM/ZS5jb250ZW50cy5zdWJhcnJheT9lLmNvbnRlbnRzLnN1YmFycmF5KDAsZS51c2VkQnl0ZXMpOm5ldyBVaW50OEFycmF5KGUuY29udGVudHMpOm5ldyBVaW50OEFycmF5KDApfSxleHBhbmRGaWxlU3RvcmFnZShlLHQpe3ZhciByPWUuY29udGVudHM/ZS5jb250ZW50cy5sZW5ndGg6MDtpZighKHI+PXQpKXt2YXIgaT0xMDQ4NTc2O3Q9TWF0aC5tYXgodCxyKihyPGk/MjoxLjEyNSk+Pj4wKSxyIT0wJiYodD1NYXRoLm1heCh0LDI1NikpO3ZhciBfPWUuY29udGVudHM7ZS5jb250ZW50cz1uZXcgVWludDhBcnJheSh0KSxlLnVzZWRCeXRlcz4wJiZlLmNvbnRlbnRzLnNldChfLnN1YmFycmF5KDAsZS51c2VkQnl0ZXMpLDApfX0scmVzaXplRmlsZVN0b3JhZ2UoZSx0KXtpZihlLnVzZWRCeXRlcyE9dClpZih0PT0wKWUuY29udGVudHM9bnVsbCxlLnVzZWRCeXRlcz0wO2Vsc2V7dmFyIHI9ZS5jb250ZW50cztlLmNvbnRlbnRzPW5ldyBVaW50OEFycmF5KHQpLHImJmUuY29udGVudHMuc2V0KHIuc3ViYXJyYXkoMCxNYXRoLm1pbih0LGUudXNlZEJ5dGVzKSkpLGUudXNlZEJ5dGVzPXR9fSxub2RlX29wczp7Z2V0YXR0cihlKXt2YXIgdD17fTtyZXR1cm4gdC5kZXY9by5pc0NocmRldihlLm1vZGUpP2UuaWQ6MSx0Lmlubz1lLmlkLHQubW9kZT1lLm1vZGUsdC5ubGluaz0xLHQudWlkPTAsdC5naWQ9MCx0LnJkZXY9ZS5yZGV2LG8uaXNEaXIoZS5tb2RlKT90LnNpemU9NDA5NjpvLmlzRmlsZShlLm1vZGUpP3Quc2l6ZT1lLnVzZWRCeXRlczpvLmlzTGluayhlLm1vZGUpP3Quc2l6ZT1lLmxpbmsubGVuZ3RoOnQuc2l6ZT0wLHQuYXRpbWU9bmV3IERhdGUoZS50aW1lc3RhbXApLHQubXRpbWU9bmV3IERhdGUoZS50aW1lc3RhbXApLHQuY3RpbWU9bmV3IERhdGUoZS50aW1lc3RhbXApLHQuYmxrc2l6ZT00MDk2LHQuYmxvY2tzPU1hdGguY2VpbCh0LnNpemUvdC5ibGtzaXplKSx0fSxzZXRhdHRyKGUsdCl7dC5tb2RlIT09dm9pZCAwJiYoZS5tb2RlPXQubW9kZSksdC50aW1lc3RhbXAhPT12b2lkIDAmJihlLnRpbWVzdGFtcD10LnRpbWVzdGFtcCksdC5zaXplIT09dm9pZCAwJiZDLnJlc2l6ZUZpbGVTdG9yYWdlKGUsdC5zaXplKX0sbG9va3VwKGUsdCl7dGhyb3cgby5nZW5lcmljRXJyb3JzWzQ0XX0sbWtub2QoZSx0LHIsaSl7cmV0dXJuIEMuY3JlYXRlTm9kZShlLHQscixpKX0scmVuYW1lKGUsdCxyKXtpZihvLmlzRGlyKGUubW9kZSkpe3ZhciBpO3RyeXtpPW8ubG9va3VwTm9kZSh0LHIpfWNhdGNoe31pZihpKWZvcih2YXIgXyBpbiBpLmNvbnRlbnRzKXRocm93IG5ldyBvLkVycm5vRXJyb3IoNTUpfWRlbGV0ZSBlLnBhcmVudC5jb250ZW50c1tlLm5hbWVdLGUucGFyZW50LnRpbWVzdGFtcD1EYXRlLm5vdygpLGUubmFtZT1yLHQuY29udGVudHNbcl09ZSx0LnRpbWVzdGFtcD1lLnBhcmVudC50aW1lc3RhbXB9LHVubGluayhlLHQpe2RlbGV0ZSBlLmNvbnRlbnRzW3RdLGUudGltZXN0YW1wPURhdGUubm93KCl9LHJtZGlyKGUsdCl7dmFyIHI9by5sb29rdXBOb2RlKGUsdCk7Zm9yKHZhciBpIGluIHIuY29udGVudHMpdGhyb3cgbmV3IG8uRXJybm9FcnJvcig1NSk7ZGVsZXRlIGUuY29udGVudHNbdF0sZS50aW1lc3RhbXA9RGF0ZS5ub3coKX0scmVhZGRpcihlKXt2YXIgdD1bIi4iLCIuLiJdO2Zvcih2YXIgciBvZiBPYmplY3Qua2V5cyhlLmNvbnRlbnRzKSl0LnB1c2gocik7cmV0dXJuIHR9LHN5bWxpbmsoZSx0LHIpe3ZhciBpPUMuY3JlYXRlTm9kZShlLHQsNDE0NzEsMCk7cmV0dXJuIGkubGluaz1yLGl9LHJlYWRsaW5rKGUpe2lmKCFvLmlzTGluayhlLm1vZGUpKXRocm93IG5ldyBvLkVycm5vRXJyb3IoMjgpO3JldHVybiBlLmxpbmt9fSxzdHJlYW1fb3BzOntyZWFkKGUsdCxyLGksXyl7dmFyIHM9ZS5ub2RlLmNvbnRlbnRzO2lmKF8+PWUubm9kZS51c2VkQnl0ZXMpcmV0dXJuIDA7dmFyIGw9TWF0aC5taW4oZS5ub2RlLnVzZWRCeXRlcy1fLGkpO2lmKGw+OCYmcy5zdWJhcnJheSl0LnNldChzLnN1YmFycmF5KF8sXytsKSxyKTtlbHNlIGZvcih2YXIgZj0wO2Y8bDtmKyspdFtyK2ZdPXNbXytmXTtyZXR1cm4gbH0sd3JpdGUoZSx0LHIsaSxfLHMpe2lmKHQuYnVmZmVyPT09QS5idWZmZXImJihzPSExKSwhaSlyZXR1cm4gMDt2YXIgbD1lLm5vZGU7aWYobC50aW1lc3RhbXA9RGF0ZS5ub3coKSx0LnN1YmFycmF5JiYoIWwuY29udGVudHN8fGwuY29udGVudHMuc3ViYXJyYXkpKXtpZihzKXJldHVybiBsLmNvbnRlbnRzPXQuc3ViYXJyYXkocixyK2kpLGwudXNlZEJ5dGVzPWksaTtpZihsLnVzZWRCeXRlcz09PTAmJl89PT0wKXJldHVybiBsLmNvbnRlbnRzPXQuc2xpY2UocixyK2kpLGwudXNlZEJ5dGVzPWksaTtpZihfK2k8PWwudXNlZEJ5dGVzKXJldHVybiBsLmNvbnRlbnRzLnNldCh0LnN1YmFycmF5KHIscitpKSxfKSxpfWlmKEMuZXhwYW5kRmlsZVN0b3JhZ2UobCxfK2kpLGwuY29udGVudHMuc3ViYXJyYXkmJnQuc3ViYXJyYXkpbC5jb250ZW50cy5zZXQodC5zdWJhcnJheShyLHIraSksXyk7ZWxzZSBmb3IodmFyIGY9MDtmPGk7ZisrKWwuY29udGVudHNbXytmXT10W3IrZl07cmV0dXJuIGwudXNlZEJ5dGVzPU1hdGgubWF4KGwudXNlZEJ5dGVzLF8raSksaX0sbGxzZWVrKGUsdCxyKXt2YXIgaT10O2lmKHI9PT0xP2krPWUucG9zaXRpb246cj09PTImJm8uaXNGaWxlKGUubm9kZS5tb2RlKSYmKGkrPWUubm9kZS51c2VkQnl0ZXMpLGk8MCl0aHJvdyBuZXcgby5FcnJub0Vycm9yKDI4KTtyZXR1cm4gaX0sYWxsb2NhdGUoZSx0LHIpe0MuZXhwYW5kRmlsZVN0b3JhZ2UoZS5ub2RlLHQrciksZS5ub2RlLnVzZWRCeXRlcz1NYXRoLm1heChlLm5vZGUudXNlZEJ5dGVzLHQrcil9LG1tYXAoZSx0LHIsaSxfKXtpZighby5pc0ZpbGUoZS5ub2RlLm1vZGUpKXRocm93IG5ldyBvLkVycm5vRXJyb3IoNDMpO3ZhciBzLGwsZj1lLm5vZGUuY29udGVudHM7aWYoIShfJjIpJiZmLmJ1ZmZlcj09PUEuYnVmZmVyKWw9ITEscz1mLmJ5dGVPZmZzZXQ7ZWxzZXtpZigocj4wfHxyK3Q8Zi5sZW5ndGgpJiYoZi5zdWJhcnJheT9mPWYuc3ViYXJyYXkocixyK3QpOmY9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoZixyLHIrdCkpLGw9ITAscz1adCgpLCFzKXRocm93IG5ldyBvLkVycm5vRXJyb3IoNDgpO0Euc2V0KGYscyl9cmV0dXJue3B0cjpzLGFsbG9jYXRlZDpsfX0sbXN5bmMoZSx0LHIsaSxfKXtyZXR1cm4gQy5zdHJlYW1fb3BzLndyaXRlKGUsdCwwLGksciwhMSksMH19fSxubj0oZSx0LHIsaSk9Pnt2YXIgXz1gYWwgJHtlfWA7RWUoZSxzPT57dChuZXcgVWludDhBcnJheShzKSksXyYmRmUoKX0scz0+e2lmKHIpcigpO2Vsc2UgdGhyb3dgTG9hZGluZyBkYXRhIGZpbGUgIiR7ZX0iIGZhaWxlZC5gfSksXyYmSWUoKX0sYW49KGUsdCxyLGksXyxzKT0+e28uY3JlYXRlRGF0YUZpbGUoZSx0LHIsaSxfLHMpfSxvbj1uLnByZWxvYWRQbHVnaW5zfHxbXSxfbj0oZSx0LHIsaSk9Pnt0eXBlb2YgQnJvd3NlcjwidSImJkJyb3dzZXIuaW5pdCgpO3ZhciBfPSExO3JldHVybiBvbi5mb3JFYWNoKHM9PntffHxzLmNhbkhhbmRsZSh0KSYmKHMuaGFuZGxlKGUsdCxyLGkpLF89ITApfSksX30sc249KGUsdCxyLGksXyxzLGwsZixoLGQpPT57dmFyIG09dD9jZS5yZXNvbHZlKE8uam9pbjIoZSx0KSk6ZTtmdW5jdGlvbiBiKHkpe2Z1bmN0aW9uIHcoayl7ZD09bnVsbHx8ZCgpLGZ8fGFuKGUsdCxrLGksXyxoKSxzPT1udWxsfHxzKCksRmUoKX1fbih5LG0sdywoKT0+e2w9PW51bGx8fGwoKSxGZSgpfSl8fHcoeSl9SWUoKSx0eXBlb2Ygcj09InN0cmluZyI/bm4ocixiLGwpOmIocil9LGxuPWU9Pnt2YXIgdD17cjowLCJyKyI6Mix3OjU3NywidysiOjU3OCxhOjEwODksImErIjoxMDkwfSxyPXRbZV07aWYodHlwZW9mIHI+InUiKXRocm93IG5ldyBFcnJvcihgVW5rbm93biBmaWxlIG9wZW4gbW9kZTogJHtlfWApO3JldHVybiByfSxDdD0oZSx0KT0+e3ZhciByPTA7cmV0dXJuIGUmJihyfD0zNjUpLHQmJihyfD0xNDYpLHJ9LG89e3Jvb3Q6bnVsbCxtb3VudHM6W10sZGV2aWNlczp7fSxzdHJlYW1zOltdLG5leHRJbm9kZToxLG5hbWVUYWJsZTpudWxsLGN1cnJlbnRQYXRoOiIvIixpbml0aWFsaXplZDohMSxpZ25vcmVQZXJtaXNzaW9uczohMCxFcnJub0Vycm9yOmNsYXNze2NvbnN0cnVjdG9yKGUpe3RoaXMubmFtZT0iRXJybm9FcnJvciIsdGhpcy5lcnJubz1lfX0sZ2VuZXJpY0Vycm9yczp7fSxmaWxlc3lzdGVtczpudWxsLHN5bmNGU1JlcXVlc3RzOjAsRlNTdHJlYW06Y2xhc3N7Y29uc3RydWN0b3IoKXt0aGlzLnNoYXJlZD17fX1nZXQgb2JqZWN0KCl7cmV0dXJuIHRoaXMubm9kZX1zZXQgb2JqZWN0KGUpe3RoaXMubm9kZT1lfWdldCBpc1JlYWQoKXtyZXR1cm4odGhpcy5mbGFncyYyMDk3MTU1KSE9PTF9Z2V0IGlzV3JpdGUoKXtyZXR1cm4odGhpcy5mbGFncyYyMDk3MTU1KSE9PTB9Z2V0IGlzQXBwZW5kKCl7cmV0dXJuIHRoaXMuZmxhZ3MmMTAyNH1nZXQgZmxhZ3MoKXtyZXR1cm4gdGhpcy5zaGFyZWQuZmxhZ3N9c2V0IGZsYWdzKGUpe3RoaXMuc2hhcmVkLmZsYWdzPWV9Z2V0IHBvc2l0aW9uKCl7cmV0dXJuIHRoaXMuc2hhcmVkLnBvc2l0aW9ufXNldCBwb3NpdGlvbihlKXt0aGlzLnNoYXJlZC5wb3NpdGlvbj1lfX0sRlNOb2RlOmNsYXNze2NvbnN0cnVjdG9yKGUsdCxyLGkpe2V8fChlPXRoaXMpLHRoaXMucGFyZW50PWUsdGhpcy5tb3VudD1lLm1vdW50LHRoaXMubW91bnRlZD1udWxsLHRoaXMuaWQ9by5uZXh0SW5vZGUrKyx0aGlzLm5hbWU9dCx0aGlzLm1vZGU9cix0aGlzLm5vZGVfb3BzPXt9LHRoaXMuc3RyZWFtX29wcz17fSx0aGlzLnJkZXY9aSx0aGlzLnJlYWRNb2RlPTM2NSx0aGlzLndyaXRlTW9kZT0xNDZ9Z2V0IHJlYWQoKXtyZXR1cm4odGhpcy5tb2RlJnRoaXMucmVhZE1vZGUpPT09dGhpcy5yZWFkTW9kZX1zZXQgcmVhZChlKXtlP3RoaXMubW9kZXw9dGhpcy5yZWFkTW9kZTp0aGlzLm1vZGUmPX50aGlzLnJlYWRNb2RlfWdldCB3cml0ZSgpe3JldHVybih0aGlzLm1vZGUmdGhpcy53cml0ZU1vZGUpPT09dGhpcy53cml0ZU1vZGV9c2V0IHdyaXRlKGUpe2U/dGhpcy5tb2RlfD10aGlzLndyaXRlTW9kZTp0aGlzLm1vZGUmPX50aGlzLndyaXRlTW9kZX1nZXQgaXNGb2xkZXIoKXtyZXR1cm4gby5pc0Rpcih0aGlzLm1vZGUpfWdldCBpc0RldmljZSgpe3JldHVybiBvLmlzQ2hyZGV2KHRoaXMubW9kZSl9fSxsb29rdXBQYXRoKGUsdD17fSl7aWYoZT1jZS5yZXNvbHZlKGUpLCFlKXJldHVybntwYXRoOiIiLG5vZGU6bnVsbH07dmFyIHI9e2ZvbGxvd19tb3VudDohMCxyZWN1cnNlX2NvdW50OjB9O2lmKHQ9T2JqZWN0LmFzc2lnbihyLHQpLHQucmVjdXJzZV9jb3VudD44KXRocm93IG5ldyBvLkVycm5vRXJyb3IoMzIpO2Zvcih2YXIgaT1lLnNwbGl0KCIvIikuZmlsdGVyKGI9PiEhYiksXz1vLnJvb3Qscz0iLyIsbD0wO2w8aS5sZW5ndGg7bCsrKXt2YXIgZj1sPT09aS5sZW5ndGgtMTtpZihmJiZ0LnBhcmVudClicmVhaztpZihfPW8ubG9va3VwTm9kZShfLGlbbF0pLHM9Ty5qb2luMihzLGlbbF0pLG8uaXNNb3VudHBvaW50KF8pJiYoIWZ8fGYmJnQuZm9sbG93X21vdW50KSYmKF89Xy5tb3VudGVkLnJvb3QpLCFmfHx0LmZvbGxvdylmb3IodmFyIGg9MDtvLmlzTGluayhfLm1vZGUpOyl7dmFyIGQ9by5yZWFkbGluayhzKTtzPWNlLnJlc29sdmUoTy5kaXJuYW1lKHMpLGQpO3ZhciBtPW8ubG9va3VwUGF0aChzLHtyZWN1cnNlX2NvdW50OnQucmVjdXJzZV9jb3VudCsxfSk7aWYoXz1tLm5vZGUsaCsrPjQwKXRocm93IG5ldyBvLkVycm5vRXJyb3IoMzIpfX1yZXR1cm57cGF0aDpzLG5vZGU6X319LGdldFBhdGgoZSl7Zm9yKHZhciB0Ozspe2lmKG8uaXNSb290KGUpKXt2YXIgcj1lLm1vdW50Lm1vdW50cG9pbnQ7cmV0dXJuIHQ/cltyLmxlbmd0aC0xXSE9PSIvIj9gJHtyfS8ke3R9YDpyK3Q6cn10PXQ/YCR7ZS5uYW1lfS8ke3R9YDplLm5hbWUsZT1lLnBhcmVudH19LGhhc2hOYW1lKGUsdCl7Zm9yKHZhciByPTAsaT0wO2k8dC5sZW5ndGg7aSsrKXI9KHI8PDUpLXIrdC5jaGFyQ29kZUF0KGkpfDA7cmV0dXJuKGUrcj4+PjApJW8ubmFtZVRhYmxlLmxlbmd0aH0saGFzaEFkZE5vZGUoZSl7dmFyIHQ9by5oYXNoTmFtZShlLnBhcmVudC5pZCxlLm5hbWUpO2UubmFtZV9uZXh0PW8ubmFtZVRhYmxlW3RdLG8ubmFtZVRhYmxlW3RdPWV9LGhhc2hSZW1vdmVOb2RlKGUpe3ZhciB0PW8uaGFzaE5hbWUoZS5wYXJlbnQuaWQsZS5uYW1lKTtpZihvLm5hbWVUYWJsZVt0XT09PWUpby5uYW1lVGFibGVbdF09ZS5uYW1lX25leHQ7ZWxzZSBmb3IodmFyIHI9by5uYW1lVGFibGVbdF07cjspe2lmKHIubmFtZV9uZXh0PT09ZSl7ci5uYW1lX25leHQ9ZS5uYW1lX25leHQ7YnJlYWt9cj1yLm5hbWVfbmV4dH19LGxvb2t1cE5vZGUoZSx0KXt2YXIgcj1vLm1heUxvb2t1cChlKTtpZihyKXRocm93IG5ldyBvLkVycm5vRXJyb3Iocik7Zm9yKHZhciBpPW8uaGFzaE5hbWUoZS5pZCx0KSxfPW8ubmFtZVRhYmxlW2ldO187Xz1fLm5hbWVfbmV4dCl7dmFyIHM9Xy5uYW1lO2lmKF8ucGFyZW50LmlkPT09ZS5pZCYmcz09PXQpcmV0dXJuIF99cmV0dXJuIG8ubG9va3VwKGUsdCl9LGNyZWF0ZU5vZGUoZSx0LHIsaSl7dmFyIF89bmV3IG8uRlNOb2RlKGUsdCxyLGkpO3JldHVybiBvLmhhc2hBZGROb2RlKF8pLF99LGRlc3Ryb3lOb2RlKGUpe28uaGFzaFJlbW92ZU5vZGUoZSl9LGlzUm9vdChlKXtyZXR1cm4gZT09PWUucGFyZW50fSxpc01vdW50cG9pbnQoZSl7cmV0dXJuISFlLm1vdW50ZWR9LGlzRmlsZShlKXtyZXR1cm4oZSY2MTQ0MCk9PT0zMjc2OH0saXNEaXIoZSl7cmV0dXJuKGUmNjE0NDApPT09MTYzODR9LGlzTGluayhlKXtyZXR1cm4oZSY2MTQ0MCk9PT00MDk2MH0saXNDaHJkZXYoZSl7cmV0dXJuKGUmNjE0NDApPT09ODE5Mn0saXNCbGtkZXYoZSl7cmV0dXJuKGUmNjE0NDApPT09MjQ1NzZ9LGlzRklGTyhlKXtyZXR1cm4oZSY2MTQ0MCk9PT00MDk2fSxpc1NvY2tldChlKXtyZXR1cm4oZSY0OTE1Mik9PT00OTE1Mn0sZmxhZ3NUb1Blcm1pc3Npb25TdHJpbmcoZSl7dmFyIHQ9WyJyIiwidyIsInJ3Il1bZSYzXTtyZXR1cm4gZSY1MTImJih0Kz0idyIpLHR9LG5vZGVQZXJtaXNzaW9ucyhlLHQpe3JldHVybiBvLmlnbm9yZVBlcm1pc3Npb25zPzA6dC5pbmNsdWRlcygiciIpJiYhKGUubW9kZSYyOTIpfHx0LmluY2x1ZGVzKCJ3IikmJiEoZS5tb2RlJjE0Nil8fHQuaW5jbHVkZXMoIngiKSYmIShlLm1vZGUmNzMpPzI6MH0sbWF5TG9va3VwKGUpe2lmKCFvLmlzRGlyKGUubW9kZSkpcmV0dXJuIDU0O3ZhciB0PW8ubm9kZVBlcm1pc3Npb25zKGUsIngiKTtyZXR1cm4gdHx8KGUubm9kZV9vcHMubG9va3VwPzA6Mil9LG1heUNyZWF0ZShlLHQpe3RyeXt2YXIgcj1vLmxvb2t1cE5vZGUoZSx0KTtyZXR1cm4gMjB9Y2F0Y2h7fXJldHVybiBvLm5vZGVQZXJtaXNzaW9ucyhlLCJ3eCIpfSxtYXlEZWxldGUoZSx0LHIpe3ZhciBpO3RyeXtpPW8ubG9va3VwTm9kZShlLHQpfWNhdGNoKHMpe3JldHVybiBzLmVycm5vfXZhciBfPW8ubm9kZVBlcm1pc3Npb25zKGUsInd4Iik7aWYoXylyZXR1cm4gXztpZihyKXtpZighby5pc0RpcihpLm1vZGUpKXJldHVybiA1NDtpZihvLmlzUm9vdChpKXx8by5nZXRQYXRoKGkpPT09by5jd2QoKSlyZXR1cm4gMTB9ZWxzZSBpZihvLmlzRGlyKGkubW9kZSkpcmV0dXJuIDMxO3JldHVybiAwfSxtYXlPcGVuKGUsdCl7cmV0dXJuIGU/by5pc0xpbmsoZS5tb2RlKT8zMjpvLmlzRGlyKGUubW9kZSkmJihvLmZsYWdzVG9QZXJtaXNzaW9uU3RyaW5nKHQpIT09InIifHx0JjUxMik/MzE6by5ub2RlUGVybWlzc2lvbnMoZSxvLmZsYWdzVG9QZXJtaXNzaW9uU3RyaW5nKHQpKTo0NH0sTUFYX09QRU5fRkRTOjQwOTYsbmV4dGZkKCl7Zm9yKHZhciBlPTA7ZTw9by5NQVhfT1BFTl9GRFM7ZSsrKWlmKCFvLnN0cmVhbXNbZV0pcmV0dXJuIGU7dGhyb3cgbmV3IG8uRXJybm9FcnJvcigzMyl9LGdldFN0cmVhbUNoZWNrZWQoZSl7dmFyIHQ9by5nZXRTdHJlYW0oZSk7aWYoIXQpdGhyb3cgbmV3IG8uRXJybm9FcnJvcig4KTtyZXR1cm4gdH0sZ2V0U3RyZWFtOmU9Pm8uc3RyZWFtc1tlXSxjcmVhdGVTdHJlYW0oZSx0PS0xKXtyZXR1cm4gZT1PYmplY3QuYXNzaWduKG5ldyBvLkZTU3RyZWFtLGUpLHQ9PS0xJiYodD1vLm5leHRmZCgpKSxlLmZkPXQsby5zdHJlYW1zW3RdPWUsZX0sY2xvc2VTdHJlYW0oZSl7by5zdHJlYW1zW2VdPW51bGx9LGR1cFN0cmVhbShlLHQ9LTEpe3ZhciByLGksXz1vLmNyZWF0ZVN0cmVhbShlLHQpO3JldHVybihpPShyPV8uc3RyZWFtX29wcyk9PW51bGw/dm9pZCAwOnIuZHVwKT09bnVsbHx8aS5jYWxsKHIsXyksX30sY2hyZGV2X3N0cmVhbV9vcHM6e29wZW4oZSl7dmFyIHQscixpPW8uZ2V0RGV2aWNlKGUubm9kZS5yZGV2KTtlLnN0cmVhbV9vcHM9aS5zdHJlYW1fb3BzLChyPSh0PWUuc3RyZWFtX29wcykub3Blbik9PW51bGx8fHIuY2FsbCh0LGUpfSxsbHNlZWsoKXt0aHJvdyBuZXcgby5FcnJub0Vycm9yKDcwKX19LG1ham9yOmU9PmU+PjgsbWlub3I6ZT0+ZSYyNTUsbWFrZWRldjooZSx0KT0+ZTw8OHx0LHJlZ2lzdGVyRGV2aWNlKGUsdCl7by5kZXZpY2VzW2VdPXtzdHJlYW1fb3BzOnR9fSxnZXREZXZpY2U6ZT0+by5kZXZpY2VzW2VdLGdldE1vdW50cyhlKXtmb3IodmFyIHQ9W10scj1bZV07ci5sZW5ndGg7KXt2YXIgaT1yLnBvcCgpO3QucHVzaChpKSxyLnB1c2goLi4uaS5tb3VudHMpfXJldHVybiB0fSxzeW5jZnMoZSx0KXt0eXBlb2YgZT09ImZ1bmN0aW9uIiYmKHQ9ZSxlPSExKSxvLnN5bmNGU1JlcXVlc3RzKyssby5zeW5jRlNSZXF1ZXN0cz4xJiZnZShgd2FybmluZzogJHtvLnN5bmNGU1JlcXVlc3RzfSBGUy5zeW5jZnMgb3BlcmF0aW9ucyBpbiBmbGlnaHQgYXQgb25jZSwgcHJvYmFibHkganVzdCBkb2luZyBleHRyYSB3b3JrYCk7dmFyIHI9by5nZXRNb3VudHMoby5yb290Lm1vdW50KSxpPTA7ZnVuY3Rpb24gXyhsKXtyZXR1cm4gby5zeW5jRlNSZXF1ZXN0cy0tLHQobCl9ZnVuY3Rpb24gcyhsKXtpZihsKXJldHVybiBzLmVycm9yZWQ/dm9pZCAwOihzLmVycm9yZWQ9ITAsXyhsKSk7KytpPj1yLmxlbmd0aCYmXyhudWxsKX1yLmZvckVhY2gobD0+e2lmKCFsLnR5cGUuc3luY2ZzKXJldHVybiBzKG51bGwpO2wudHlwZS5zeW5jZnMobCxlLHMpfSl9LG1vdW50KGUsdCxyKXt2YXIgaT1yPT09Ii8iLF89IXIscztpZihpJiZvLnJvb3QpdGhyb3cgbmV3IG8uRXJybm9FcnJvcigxMCk7aWYoIWkmJiFfKXt2YXIgbD1vLmxvb2t1cFBhdGgocix7Zm9sbG93X21vdW50OiExfSk7aWYocj1sLnBhdGgscz1sLm5vZGUsby5pc01vdW50cG9pbnQocykpdGhyb3cgbmV3IG8uRXJybm9FcnJvcigxMCk7aWYoIW8uaXNEaXIocy5tb2RlKSl0aHJvdyBuZXcgby5FcnJub0Vycm9yKDU0KX12YXIgZj17dHlwZTplLG9wdHM6dCxtb3VudHBvaW50OnIsbW91bnRzOltdfSxoPWUubW91bnQoZik7cmV0dXJuIGgubW91bnQ9ZixmLnJvb3Q9aCxpP28ucm9vdD1oOnMmJihzLm1vdW50ZWQ9ZixzLm1vdW50JiZzLm1vdW50Lm1vdW50cy5wdXNoKGYpKSxofSx1bm1vdW50KGUpe3ZhciB0PW8ubG9va3VwUGF0aChlLHtmb2xsb3dfbW91bnQ6ITF9KTtpZighby5pc01vdW50cG9pbnQodC5ub2RlKSl0aHJvdyBuZXcgby5FcnJub0Vycm9yKDI4KTt2YXIgcj10Lm5vZGUsaT1yLm1vdW50ZWQsXz1vLmdldE1vdW50cyhpKTtPYmplY3Qua2V5cyhvLm5hbWVUYWJsZSkuZm9yRWFjaChsPT57Zm9yKHZhciBmPW8ubmFtZVRhYmxlW2xdO2Y7KXt2YXIgaD1mLm5hbWVfbmV4dDtfLmluY2x1ZGVzKGYubW91bnQpJiZvLmRlc3Ryb3lOb2RlKGYpLGY9aH19KSxyLm1vdW50ZWQ9bnVsbDt2YXIgcz1yLm1vdW50Lm1vdW50cy5pbmRleE9mKGkpO3IubW91bnQubW91bnRzLnNwbGljZShzLDEpfSxsb29rdXAoZSx0KXtyZXR1cm4gZS5ub2RlX29wcy5sb29rdXAoZSx0KX0sbWtub2QoZSx0LHIpe3ZhciBpPW8ubG9va3VwUGF0aChlLHtwYXJlbnQ6ITB9KSxfPWkubm9kZSxzPU8uYmFzZW5hbWUoZSk7aWYoIXN8fHM9PT0iLiJ8fHM9PT0iLi4iKXRocm93IG5ldyBvLkVycm5vRXJyb3IoMjgpO3ZhciBsPW8ubWF5Q3JlYXRlKF8scyk7aWYobCl0aHJvdyBuZXcgby5FcnJub0Vycm9yKGwpO2lmKCFfLm5vZGVfb3BzLm1rbm9kKXRocm93IG5ldyBvLkVycm5vRXJyb3IoNjMpO3JldHVybiBfLm5vZGVfb3BzLm1rbm9kKF8scyx0LHIpfSxjcmVhdGUoZSx0KXtyZXR1cm4gdD10IT09dm9pZCAwP3Q6NDM4LHQmPTQwOTUsdHw9MzI3Njgsby5ta25vZChlLHQsMCl9LG1rZGlyKGUsdCl7cmV0dXJuIHQ9dCE9PXZvaWQgMD90OjUxMSx0Jj0xMDIzLHR8PTE2Mzg0LG8ubWtub2QoZSx0LDApfSxta2RpclRyZWUoZSx0KXtmb3IodmFyIHI9ZS5zcGxpdCgiLyIpLGk9IiIsXz0wO188ci5sZW5ndGg7KytfKWlmKHJbX10pe2krPSIvIityW19dO3RyeXtvLm1rZGlyKGksdCl9Y2F0Y2gocyl7aWYocy5lcnJubyE9MjApdGhyb3cgc319fSxta2RldihlLHQscil7cmV0dXJuIHR5cGVvZiByPiJ1IiYmKHI9dCx0PTQzOCksdHw9ODE5MixvLm1rbm9kKGUsdCxyKX0sc3ltbGluayhlLHQpe2lmKCFjZS5yZXNvbHZlKGUpKXRocm93IG5ldyBvLkVycm5vRXJyb3IoNDQpO3ZhciByPW8ubG9va3VwUGF0aCh0LHtwYXJlbnQ6ITB9KSxpPXIubm9kZTtpZighaSl0aHJvdyBuZXcgby5FcnJub0Vycm9yKDQ0KTt2YXIgXz1PLmJhc2VuYW1lKHQpLHM9by5tYXlDcmVhdGUoaSxfKTtpZihzKXRocm93IG5ldyBvLkVycm5vRXJyb3Iocyk7aWYoIWkubm9kZV9vcHMuc3ltbGluayl0aHJvdyBuZXcgby5FcnJub0Vycm9yKDYzKTtyZXR1cm4gaS5ub2RlX29wcy5zeW1saW5rKGksXyxlKX0scmVuYW1lKGUsdCl7dmFyIHI9Ty5kaXJuYW1lKGUpLGk9Ty5kaXJuYW1lKHQpLF89Ty5iYXNlbmFtZShlKSxzPU8uYmFzZW5hbWUodCksbCxmLGg7aWYobD1vLmxvb2t1cFBhdGgoZSx7cGFyZW50OiEwfSksZj1sLm5vZGUsbD1vLmxvb2t1cFBhdGgodCx7cGFyZW50OiEwfSksaD1sLm5vZGUsIWZ8fCFoKXRocm93IG5ldyBvLkVycm5vRXJyb3IoNDQpO2lmKGYubW91bnQhPT1oLm1vdW50KXRocm93IG5ldyBvLkVycm5vRXJyb3IoNzUpO3ZhciBkPW8ubG9va3VwTm9kZShmLF8pLG09Y2UucmVsYXRpdmUoZSxpKTtpZihtLmNoYXJBdCgwKSE9PSIuIil0aHJvdyBuZXcgby5FcnJub0Vycm9yKDI4KTtpZihtPWNlLnJlbGF0aXZlKHQsciksbS5jaGFyQXQoMCkhPT0iLiIpdGhyb3cgbmV3IG8uRXJybm9FcnJvcig1NSk7dmFyIGI7dHJ5e2I9by5sb29rdXBOb2RlKGgscyl9Y2F0Y2h7fWlmKGQhPT1iKXt2YXIgeT1vLmlzRGlyKGQubW9kZSksdz1vLm1heURlbGV0ZShmLF8seSk7aWYodyl0aHJvdyBuZXcgby5FcnJub0Vycm9yKHcpO2lmKHc9Yj9vLm1heURlbGV0ZShoLHMseSk6by5tYXlDcmVhdGUoaCxzKSx3KXRocm93IG5ldyBvLkVycm5vRXJyb3Iodyk7aWYoIWYubm9kZV9vcHMucmVuYW1lKXRocm93IG5ldyBvLkVycm5vRXJyb3IoNjMpO2lmKG8uaXNNb3VudHBvaW50KGQpfHxiJiZvLmlzTW91bnRwb2ludChiKSl0aHJvdyBuZXcgby5FcnJub0Vycm9yKDEwKTtpZihoIT09ZiYmKHc9by5ub2RlUGVybWlzc2lvbnMoZiwidyIpLHcpKXRocm93IG5ldyBvLkVycm5vRXJyb3Iodyk7by5oYXNoUmVtb3ZlTm9kZShkKTt0cnl7Zi5ub2RlX29wcy5yZW5hbWUoZCxoLHMpLGQucGFyZW50PWh9Y2F0Y2goayl7dGhyb3cga31maW5hbGx5e28uaGFzaEFkZE5vZGUoZCl9fX0scm1kaXIoZSl7dmFyIHQ9by5sb29rdXBQYXRoKGUse3BhcmVudDohMH0pLHI9dC5ub2RlLGk9Ty5iYXNlbmFtZShlKSxfPW8ubG9va3VwTm9kZShyLGkpLHM9by5tYXlEZWxldGUocixpLCEwKTtpZihzKXRocm93IG5ldyBvLkVycm5vRXJyb3Iocyk7aWYoIXIubm9kZV9vcHMucm1kaXIpdGhyb3cgbmV3IG8uRXJybm9FcnJvcig2Myk7aWYoby5pc01vdW50cG9pbnQoXykpdGhyb3cgbmV3IG8uRXJybm9FcnJvcigxMCk7ci5ub2RlX29wcy5ybWRpcihyLGkpLG8uZGVzdHJveU5vZGUoXyl9LHJlYWRkaXIoZSl7dmFyIHQ9by5sb29rdXBQYXRoKGUse2ZvbGxvdzohMH0pLHI9dC5ub2RlO2lmKCFyLm5vZGVfb3BzLnJlYWRkaXIpdGhyb3cgbmV3IG8uRXJybm9FcnJvcig1NCk7cmV0dXJuIHIubm9kZV9vcHMucmVhZGRpcihyKX0sdW5saW5rKGUpe3ZhciB0PW8ubG9va3VwUGF0aChlLHtwYXJlbnQ6ITB9KSxyPXQubm9kZTtpZighcil0aHJvdyBuZXcgby5FcnJub0Vycm9yKDQ0KTt2YXIgaT1PLmJhc2VuYW1lKGUpLF89by5sb29rdXBOb2RlKHIsaSkscz1vLm1heURlbGV0ZShyLGksITEpO2lmKHMpdGhyb3cgbmV3IG8uRXJybm9FcnJvcihzKTtpZighci5ub2RlX29wcy51bmxpbmspdGhyb3cgbmV3IG8uRXJybm9FcnJvcig2Myk7aWYoby5pc01vdW50cG9pbnQoXykpdGhyb3cgbmV3IG8uRXJybm9FcnJvcigxMCk7ci5ub2RlX29wcy51bmxpbmsocixpKSxvLmRlc3Ryb3lOb2RlKF8pfSxyZWFkbGluayhlKXt2YXIgdD1vLmxvb2t1cFBhdGgoZSkscj10Lm5vZGU7aWYoIXIpdGhyb3cgbmV3IG8uRXJybm9FcnJvcig0NCk7aWYoIXIubm9kZV9vcHMucmVhZGxpbmspdGhyb3cgbmV3IG8uRXJybm9FcnJvcigyOCk7cmV0dXJuIGNlLnJlc29sdmUoby5nZXRQYXRoKHIucGFyZW50KSxyLm5vZGVfb3BzLnJlYWRsaW5rKHIpKX0sc3RhdChlLHQpe3ZhciByPW8ubG9va3VwUGF0aChlLHtmb2xsb3c6IXR9KSxpPXIubm9kZTtpZighaSl0aHJvdyBuZXcgby5FcnJub0Vycm9yKDQ0KTtpZighaS5ub2RlX29wcy5nZXRhdHRyKXRocm93IG5ldyBvLkVycm5vRXJyb3IoNjMpO3JldHVybiBpLm5vZGVfb3BzLmdldGF0dHIoaSl9LGxzdGF0KGUpe3JldHVybiBvLnN0YXQoZSwhMCl9LGNobW9kKGUsdCxyKXt2YXIgaTtpZih0eXBlb2YgZT09InN0cmluZyIpe3ZhciBfPW8ubG9va3VwUGF0aChlLHtmb2xsb3c6IXJ9KTtpPV8ubm9kZX1lbHNlIGk9ZTtpZighaS5ub2RlX29wcy5zZXRhdHRyKXRocm93IG5ldyBvLkVycm5vRXJyb3IoNjMpO2kubm9kZV9vcHMuc2V0YXR0cihpLHttb2RlOnQmNDA5NXxpLm1vZGUmLTQwOTYsdGltZXN0YW1wOkRhdGUubm93KCl9KX0sbGNobW9kKGUsdCl7by5jaG1vZChlLHQsITApfSxmY2htb2QoZSx0KXt2YXIgcj1vLmdldFN0cmVhbUNoZWNrZWQoZSk7by5jaG1vZChyLm5vZGUsdCl9LGNob3duKGUsdCxyLGkpe3ZhciBfO2lmKHR5cGVvZiBlPT0ic3RyaW5nIil7dmFyIHM9by5sb29rdXBQYXRoKGUse2ZvbGxvdzohaX0pO189cy5ub2RlfWVsc2UgXz1lO2lmKCFfLm5vZGVfb3BzLnNldGF0dHIpdGhyb3cgbmV3IG8uRXJybm9FcnJvcig2Myk7Xy5ub2RlX29wcy5zZXRhdHRyKF8se3RpbWVzdGFtcDpEYXRlLm5vdygpfSl9LGxjaG93bihlLHQscil7by5jaG93bihlLHQsciwhMCl9LGZjaG93bihlLHQscil7dmFyIGk9by5nZXRTdHJlYW1DaGVja2VkKGUpO28uY2hvd24oaS5ub2RlLHQscil9LHRydW5jYXRlKGUsdCl7aWYodDwwKXRocm93IG5ldyBvLkVycm5vRXJyb3IoMjgpO3ZhciByO2lmKHR5cGVvZiBlPT0ic3RyaW5nIil7dmFyIGk9by5sb29rdXBQYXRoKGUse2ZvbGxvdzohMH0pO3I9aS5ub2RlfWVsc2Ugcj1lO2lmKCFyLm5vZGVfb3BzLnNldGF0dHIpdGhyb3cgbmV3IG8uRXJybm9FcnJvcig2Myk7aWYoby5pc0RpcihyLm1vZGUpKXRocm93IG5ldyBvLkVycm5vRXJyb3IoMzEpO2lmKCFvLmlzRmlsZShyLm1vZGUpKXRocm93IG5ldyBvLkVycm5vRXJyb3IoMjgpO3ZhciBfPW8ubm9kZVBlcm1pc3Npb25zKHIsInciKTtpZihfKXRocm93IG5ldyBvLkVycm5vRXJyb3IoXyk7ci5ub2RlX29wcy5zZXRhdHRyKHIse3NpemU6dCx0aW1lc3RhbXA6RGF0ZS5ub3coKX0pfSxmdHJ1bmNhdGUoZSx0KXt2YXIgcj1vLmdldFN0cmVhbUNoZWNrZWQoZSk7aWYoIShyLmZsYWdzJjIwOTcxNTUpKXRocm93IG5ldyBvLkVycm5vRXJyb3IoMjgpO28udHJ1bmNhdGUoci5ub2RlLHQpfSx1dGltZShlLHQscil7dmFyIGk9by5sb29rdXBQYXRoKGUse2ZvbGxvdzohMH0pLF89aS5ub2RlO18ubm9kZV9vcHMuc2V0YXR0cihfLHt0aW1lc3RhbXA6TWF0aC5tYXgodCxyKX0pfSxvcGVuKGUsdCxyKXtpZihlPT09IiIpdGhyb3cgbmV3IG8uRXJybm9FcnJvcig0NCk7dD10eXBlb2YgdD09InN0cmluZyI/bG4odCk6dCx0JjY0PyhyPXR5cGVvZiByPiJ1Ij80Mzg6cixyPXImNDA5NXwzMjc2OCk6cj0wO3ZhciBpO2lmKHR5cGVvZiBlPT0ib2JqZWN0IilpPWU7ZWxzZXtlPU8ubm9ybWFsaXplKGUpO3RyeXt2YXIgXz1vLmxvb2t1cFBhdGgoZSx7Zm9sbG93OiEodCYxMzEwNzIpfSk7aT1fLm5vZGV9Y2F0Y2h7fX12YXIgcz0hMTtpZih0JjY0KWlmKGkpe2lmKHQmMTI4KXRocm93IG5ldyBvLkVycm5vRXJyb3IoMjApfWVsc2UgaT1vLm1rbm9kKGUsciwwKSxzPSEwO2lmKCFpKXRocm93IG5ldyBvLkVycm5vRXJyb3IoNDQpO2lmKG8uaXNDaHJkZXYoaS5tb2RlKSYmKHQmPS01MTMpLHQmNjU1MzYmJiFvLmlzRGlyKGkubW9kZSkpdGhyb3cgbmV3IG8uRXJybm9FcnJvcig1NCk7aWYoIXMpe3ZhciBsPW8ubWF5T3BlbihpLHQpO2lmKGwpdGhyb3cgbmV3IG8uRXJybm9FcnJvcihsKX10JjUxMiYmIXMmJm8udHJ1bmNhdGUoaSwwKSx0Jj0tMTMxNzEzO3ZhciBmPW8uY3JlYXRlU3RyZWFtKHtub2RlOmkscGF0aDpvLmdldFBhdGgoaSksZmxhZ3M6dCxzZWVrYWJsZTohMCxwb3NpdGlvbjowLHN0cmVhbV9vcHM6aS5zdHJlYW1fb3BzLHVuZ290dGVuOltdLGVycm9yOiExfSk7cmV0dXJuIGYuc3RyZWFtX29wcy5vcGVuJiZmLnN0cmVhbV9vcHMub3BlbihmKSxuLmxvZ1JlYWRGaWxlcyYmISh0JjEpJiYoby5yZWFkRmlsZXN8fChvLnJlYWRGaWxlcz17fSksZSBpbiBvLnJlYWRGaWxlc3x8KG8ucmVhZEZpbGVzW2VdPTEpKSxmfSxjbG9zZShlKXtpZihvLmlzQ2xvc2VkKGUpKXRocm93IG5ldyBvLkVycm5vRXJyb3IoOCk7ZS5nZXRkZW50cyYmKGUuZ2V0ZGVudHM9bnVsbCk7dHJ5e2Uuc3RyZWFtX29wcy5jbG9zZSYmZS5zdHJlYW1fb3BzLmNsb3NlKGUpfWNhdGNoKHQpe3Rocm93IHR9ZmluYWxseXtvLmNsb3NlU3RyZWFtKGUuZmQpfWUuZmQ9bnVsbH0saXNDbG9zZWQoZSl7cmV0dXJuIGUuZmQ9PT1udWxsfSxsbHNlZWsoZSx0LHIpe2lmKG8uaXNDbG9zZWQoZSkpdGhyb3cgbmV3IG8uRXJybm9FcnJvcig4KTtpZighZS5zZWVrYWJsZXx8IWUuc3RyZWFtX29wcy5sbHNlZWspdGhyb3cgbmV3IG8uRXJybm9FcnJvcig3MCk7aWYociE9MCYmciE9MSYmciE9Mil0aHJvdyBuZXcgby5FcnJub0Vycm9yKDI4KTtyZXR1cm4gZS5wb3NpdGlvbj1lLnN0cmVhbV9vcHMubGxzZWVrKGUsdCxyKSxlLnVuZ290dGVuPVtdLGUucG9zaXRpb259LHJlYWQoZSx0LHIsaSxfKXtpZihpPDB8fF88MCl0aHJvdyBuZXcgby5FcnJub0Vycm9yKDI4KTtpZihvLmlzQ2xvc2VkKGUpKXRocm93IG5ldyBvLkVycm5vRXJyb3IoOCk7aWYoKGUuZmxhZ3MmMjA5NzE1NSk9PT0xKXRocm93IG5ldyBvLkVycm5vRXJyb3IoOCk7aWYoby5pc0RpcihlLm5vZGUubW9kZSkpdGhyb3cgbmV3IG8uRXJybm9FcnJvcigzMSk7aWYoIWUuc3RyZWFtX29wcy5yZWFkKXRocm93IG5ldyBvLkVycm5vRXJyb3IoMjgpO3ZhciBzPXR5cGVvZiBfPCJ1IjtpZighcylfPWUucG9zaXRpb247ZWxzZSBpZighZS5zZWVrYWJsZSl0aHJvdyBuZXcgby5FcnJub0Vycm9yKDcwKTt2YXIgbD1lLnN0cmVhbV9vcHMucmVhZChlLHQscixpLF8pO3JldHVybiBzfHwoZS5wb3NpdGlvbis9bCksbH0sd3JpdGUoZSx0LHIsaSxfLHMpe2lmKGk8MHx8XzwwKXRocm93IG5ldyBvLkVycm5vRXJyb3IoMjgpO2lmKG8uaXNDbG9zZWQoZSkpdGhyb3cgbmV3IG8uRXJybm9FcnJvcig4KTtpZighKGUuZmxhZ3MmMjA5NzE1NSkpdGhyb3cgbmV3IG8uRXJybm9FcnJvcig4KTtpZihvLmlzRGlyKGUubm9kZS5tb2RlKSl0aHJvdyBuZXcgby5FcnJub0Vycm9yKDMxKTtpZighZS5zdHJlYW1fb3BzLndyaXRlKXRocm93IG5ldyBvLkVycm5vRXJyb3IoMjgpO2Uuc2Vla2FibGUmJmUuZmxhZ3MmMTAyNCYmby5sbHNlZWsoZSwwLDIpO3ZhciBsPXR5cGVvZiBfPCJ1IjtpZighbClfPWUucG9zaXRpb247ZWxzZSBpZighZS5zZWVrYWJsZSl0aHJvdyBuZXcgby5FcnJub0Vycm9yKDcwKTt2YXIgZj1lLnN0cmVhbV9vcHMud3JpdGUoZSx0LHIsaSxfLHMpO3JldHVybiBsfHwoZS5wb3NpdGlvbis9ZiksZn0sYWxsb2NhdGUoZSx0LHIpe2lmKG8uaXNDbG9zZWQoZSkpdGhyb3cgbmV3IG8uRXJybm9FcnJvcig4KTtpZih0PDB8fHI8PTApdGhyb3cgbmV3IG8uRXJybm9FcnJvcigyOCk7aWYoIShlLmZsYWdzJjIwOTcxNTUpKXRocm93IG5ldyBvLkVycm5vRXJyb3IoOCk7aWYoIW8uaXNGaWxlKGUubm9kZS5tb2RlKSYmIW8uaXNEaXIoZS5ub2RlLm1vZGUpKXRocm93IG5ldyBvLkVycm5vRXJyb3IoNDMpO2lmKCFlLnN0cmVhbV9vcHMuYWxsb2NhdGUpdGhyb3cgbmV3IG8uRXJybm9FcnJvcigxMzgpO2Uuc3RyZWFtX29wcy5hbGxvY2F0ZShlLHQscil9LG1tYXAoZSx0LHIsaSxfKXtpZihpJjImJiEoXyYyKSYmKGUuZmxhZ3MmMjA5NzE1NSkhPT0yKXRocm93IG5ldyBvLkVycm5vRXJyb3IoMik7aWYoKGUuZmxhZ3MmMjA5NzE1NSk9PT0xKXRocm93IG5ldyBvLkVycm5vRXJyb3IoMik7aWYoIWUuc3RyZWFtX29wcy5tbWFwKXRocm93IG5ldyBvLkVycm5vRXJyb3IoNDMpO3JldHVybiBlLnN0cmVhbV9vcHMubW1hcChlLHQscixpLF8pfSxtc3luYyhlLHQscixpLF8pe3JldHVybiBlLnN0cmVhbV9vcHMubXN5bmM/ZS5zdHJlYW1fb3BzLm1zeW5jKGUsdCxyLGksXyk6MH0saW9jdGwoZSx0LHIpe2lmKCFlLnN0cmVhbV9vcHMuaW9jdGwpdGhyb3cgbmV3IG8uRXJybm9FcnJvcig1OSk7cmV0dXJuIGUuc3RyZWFtX29wcy5pb2N0bChlLHQscil9LHJlYWRGaWxlKGUsdD17fSl7aWYodC5mbGFncz10LmZsYWdzfHwwLHQuZW5jb2Rpbmc9dC5lbmNvZGluZ3x8ImJpbmFyeSIsdC5lbmNvZGluZyE9PSJ1dGY4IiYmdC5lbmNvZGluZyE9PSJiaW5hcnkiKXRocm93IG5ldyBFcnJvcihgSW52YWxpZCBlbmNvZGluZyB0eXBlICIke3QuZW5jb2Rpbmd9ImApO3ZhciByLGk9by5vcGVuKGUsdC5mbGFncyksXz1vLnN0YXQoZSkscz1fLnNpemUsbD1uZXcgVWludDhBcnJheShzKTtyZXR1cm4gby5yZWFkKGksbCwwLHMsMCksdC5lbmNvZGluZz09PSJ1dGY4Ij9yPUhlKGwsMCk6dC5lbmNvZGluZz09PSJiaW5hcnkiJiYocj1sKSxvLmNsb3NlKGkpLHJ9LHdyaXRlRmlsZShlLHQscj17fSl7ci5mbGFncz1yLmZsYWdzfHw1Nzc7dmFyIGk9by5vcGVuKGUsci5mbGFncyxyLm1vZGUpO2lmKHR5cGVvZiB0PT0ic3RyaW5nIil7dmFyIF89bmV3IFVpbnQ4QXJyYXkoJHQodCkrMSkscz1QdCh0LF8sMCxfLmxlbmd0aCk7by53cml0ZShpLF8sMCxzLHZvaWQgMCxyLmNhbk93bil9ZWxzZSBpZihBcnJheUJ1ZmZlci5pc1ZpZXcodCkpby53cml0ZShpLHQsMCx0LmJ5dGVMZW5ndGgsdm9pZCAwLHIuY2FuT3duKTtlbHNlIHRocm93IG5ldyBFcnJvcigiVW5zdXBwb3J0ZWQgZGF0YSB0eXBlIik7by5jbG9zZShpKX0sY3dkOigpPT5vLmN1cnJlbnRQYXRoLGNoZGlyKGUpe3ZhciB0PW8ubG9va3VwUGF0aChlLHtmb2xsb3c6ITB9KTtpZih0Lm5vZGU9PT1udWxsKXRocm93IG5ldyBvLkVycm5vRXJyb3IoNDQpO2lmKCFvLmlzRGlyKHQubm9kZS5tb2RlKSl0aHJvdyBuZXcgby5FcnJub0Vycm9yKDU0KTt2YXIgcj1vLm5vZGVQZXJtaXNzaW9ucyh0Lm5vZGUsIngiKTtpZihyKXRocm93IG5ldyBvLkVycm5vRXJyb3Iocik7by5jdXJyZW50UGF0aD10LnBhdGh9LGNyZWF0ZURlZmF1bHREaXJlY3Rvcmllcygpe28ubWtkaXIoIi90bXAiKSxvLm1rZGlyKCIvaG9tZSIpLG8ubWtkaXIoIi9ob21lL3dlYl91c2VyIil9LGNyZWF0ZURlZmF1bHREZXZpY2VzKCl7by5ta2RpcigiL2RldiIpLG8ucmVnaXN0ZXJEZXZpY2Uoby5tYWtlZGV2KDEsMykse3JlYWQ6KCk9PjAsd3JpdGU6KGksXyxzLGwsZik9Pmx9KSxvLm1rZGV2KCIvZGV2L251bGwiLG8ubWFrZWRldigxLDMpKSxBZS5yZWdpc3RlcihvLm1ha2VkZXYoNSwwKSxBZS5kZWZhdWx0X3R0eV9vcHMpLEFlLnJlZ2lzdGVyKG8ubWFrZWRldig2LDApLEFlLmRlZmF1bHRfdHR5MV9vcHMpLG8ubWtkZXYoIi9kZXYvdHR5IixvLm1ha2VkZXYoNSwwKSksby5ta2RldigiL2Rldi90dHkxIixvLm1ha2VkZXYoNiwwKSk7dmFyIGU9bmV3IFVpbnQ4QXJyYXkoMTAyNCksdD0wLHI9KCk9Pih0PT09MCYmKHQ9S3QoZSkuYnl0ZUxlbmd0aCksZVstLXRdKTtvLmNyZWF0ZURldmljZSgiL2RldiIsInJhbmRvbSIsciksby5jcmVhdGVEZXZpY2UoIi9kZXYiLCJ1cmFuZG9tIixyKSxvLm1rZGlyKCIvZGV2L3NobSIpLG8ubWtkaXIoIi9kZXYvc2htL3RtcCIpfSxjcmVhdGVTcGVjaWFsRGlyZWN0b3JpZXMoKXtvLm1rZGlyKCIvcHJvYyIpO3ZhciBlPW8ubWtkaXIoIi9wcm9jL3NlbGYiKTtvLm1rZGlyKCIvcHJvYy9zZWxmL2ZkIiksby5tb3VudCh7bW91bnQoKXt2YXIgdD1vLmNyZWF0ZU5vZGUoZSwiZmQiLDE2ODk1LDczKTtyZXR1cm4gdC5ub2RlX29wcz17bG9va3VwKHIsaSl7dmFyIF89K2kscz1vLmdldFN0cmVhbUNoZWNrZWQoXyksbD17cGFyZW50Om51bGwsbW91bnQ6e21vdW50cG9pbnQ6ImZha2UifSxub2RlX29wczp7cmVhZGxpbms6KCk9PnMucGF0aH19O3JldHVybiBsLnBhcmVudD1sLGx9fSx0fX0se30sIi9wcm9jL3NlbGYvZmQiKX0sY3JlYXRlU3RhbmRhcmRTdHJlYW1zKCl7bi5zdGRpbj9vLmNyZWF0ZURldmljZSgiL2RldiIsInN0ZGluIixuLnN0ZGluKTpvLnN5bWxpbmsoIi9kZXYvdHR5IiwiL2Rldi9zdGRpbiIpLG4uc3Rkb3V0P28uY3JlYXRlRGV2aWNlKCIvZGV2Iiwic3Rkb3V0IixudWxsLG4uc3Rkb3V0KTpvLnN5bWxpbmsoIi9kZXYvdHR5IiwiL2Rldi9zdGRvdXQiKSxuLnN0ZGVycj9vLmNyZWF0ZURldmljZSgiL2RldiIsInN0ZGVyciIsbnVsbCxuLnN0ZGVycik6by5zeW1saW5rKCIvZGV2L3R0eTEiLCIvZGV2L3N0ZGVyciIpLG8ub3BlbigiL2Rldi9zdGRpbiIsMCksby5vcGVuKCIvZGV2L3N0ZG91dCIsMSksby5vcGVuKCIvZGV2L3N0ZGVyciIsMSl9LHN0YXRpY0luaXQoKXtbNDRdLmZvckVhY2goZT0+e28uZ2VuZXJpY0Vycm9yc1tlXT1uZXcgby5FcnJub0Vycm9yKGUpLG8uZ2VuZXJpY0Vycm9yc1tlXS5zdGFjaz0iPGdlbmVyaWMgZXJyb3IsIG5vIHN0YWNrPiJ9KSxvLm5hbWVUYWJsZT1uZXcgQXJyYXkoNDA5Niksby5tb3VudChDLHt9LCIvIiksby5jcmVhdGVEZWZhdWx0RGlyZWN0b3JpZXMoKSxvLmNyZWF0ZURlZmF1bHREZXZpY2VzKCksby5jcmVhdGVTcGVjaWFsRGlyZWN0b3JpZXMoKSxvLmZpbGVzeXN0ZW1zPXtNRU1GUzpDfX0saW5pdChlLHQscil7by5pbml0LmluaXRpYWxpemVkPSEwLG4uc3RkaW49ZXx8bi5zdGRpbixuLnN0ZG91dD10fHxuLnN0ZG91dCxuLnN0ZGVycj1yfHxuLnN0ZGVycixvLmNyZWF0ZVN0YW5kYXJkU3RyZWFtcygpfSxxdWl0KCl7by5pbml0LmluaXRpYWxpemVkPSExO2Zvcih2YXIgZT0wO2U8by5zdHJlYW1zLmxlbmd0aDtlKyspe3ZhciB0PW8uc3RyZWFtc1tlXTt0JiZvLmNsb3NlKHQpfX0sZmluZE9iamVjdChlLHQpe3ZhciByPW8uYW5hbHl6ZVBhdGgoZSx0KTtyZXR1cm4gci5leGlzdHM/ci5vYmplY3Q6bnVsbH0sYW5hbHl6ZVBhdGgoZSx0KXt0cnl7dmFyIHI9by5sb29rdXBQYXRoKGUse2ZvbGxvdzohdH0pO2U9ci5wYXRofWNhdGNoe312YXIgaT17aXNSb290OiExLGV4aXN0czohMSxlcnJvcjowLG5hbWU6bnVsbCxwYXRoOm51bGwsb2JqZWN0Om51bGwscGFyZW50RXhpc3RzOiExLHBhcmVudFBhdGg6bnVsbCxwYXJlbnRPYmplY3Q6bnVsbH07dHJ5e3ZhciByPW8ubG9va3VwUGF0aChlLHtwYXJlbnQ6ITB9KTtpLnBhcmVudEV4aXN0cz0hMCxpLnBhcmVudFBhdGg9ci5wYXRoLGkucGFyZW50T2JqZWN0PXIubm9kZSxpLm5hbWU9Ty5iYXNlbmFtZShlKSxyPW8ubG9va3VwUGF0aChlLHtmb2xsb3c6IXR9KSxpLmV4aXN0cz0hMCxpLnBhdGg9ci5wYXRoLGkub2JqZWN0PXIubm9kZSxpLm5hbWU9ci5ub2RlLm5hbWUsaS5pc1Jvb3Q9ci5wYXRoPT09Ii8ifWNhdGNoKF8pe2kuZXJyb3I9Xy5lcnJub31yZXR1cm4gaX0sY3JlYXRlUGF0aChlLHQscixpKXtlPXR5cGVvZiBlPT0ic3RyaW5nIj9lOm8uZ2V0UGF0aChlKTtmb3IodmFyIF89dC5zcGxpdCgiLyIpLnJldmVyc2UoKTtfLmxlbmd0aDspe3ZhciBzPV8ucG9wKCk7aWYocyl7dmFyIGw9Ty5qb2luMihlLHMpO3RyeXtvLm1rZGlyKGwpfWNhdGNoe31lPWx9fXJldHVybiBsfSxjcmVhdGVGaWxlKGUsdCxyLGksXyl7dmFyIHM9Ty5qb2luMih0eXBlb2YgZT09InN0cmluZyI/ZTpvLmdldFBhdGgoZSksdCksbD1DdChpLF8pO3JldHVybiBvLmNyZWF0ZShzLGwpfSxjcmVhdGVEYXRhRmlsZShlLHQscixpLF8scyl7dmFyIGw9dDtlJiYoZT10eXBlb2YgZT09InN0cmluZyI/ZTpvLmdldFBhdGgoZSksbD10P08uam9pbjIoZSx0KTplKTt2YXIgZj1DdChpLF8pLGg9by5jcmVhdGUobCxmKTtpZihyKXtpZih0eXBlb2Ygcj09InN0cmluZyIpe2Zvcih2YXIgZD1uZXcgQXJyYXkoci5sZW5ndGgpLG09MCxiPXIubGVuZ3RoO208YjsrK20pZFttXT1yLmNoYXJDb2RlQXQobSk7cj1kfW8uY2htb2QoaCxmfDE0Nik7dmFyIHk9by5vcGVuKGgsNTc3KTtvLndyaXRlKHksciwwLHIubGVuZ3RoLDAscyksby5jbG9zZSh5KSxvLmNobW9kKGgsZil9fSxjcmVhdGVEZXZpY2UoZSx0LHIsaSl7dmFyIF89Ty5qb2luMih0eXBlb2YgZT09InN0cmluZyI/ZTpvLmdldFBhdGgoZSksdCkscz1DdCghIXIsISFpKTtvLmNyZWF0ZURldmljZS5tYWpvcnx8KG8uY3JlYXRlRGV2aWNlLm1ham9yPTY0KTt2YXIgbD1vLm1ha2VkZXYoby5jcmVhdGVEZXZpY2UubWFqb3IrKywwKTtyZXR1cm4gby5yZWdpc3RlckRldmljZShsLHtvcGVuKGYpe2Yuc2Vla2FibGU9ITF9LGNsb3NlKGYpe3ZhciBoOyhoPWk9PW51bGw/dm9pZCAwOmkuYnVmZmVyKSE9bnVsbCYmaC5sZW5ndGgmJmkoMTApfSxyZWFkKGYsaCxkLG0sYil7Zm9yKHZhciB5PTAsdz0wO3c8bTt3Kyspe3ZhciBrO3RyeXtrPXIoKX1jYXRjaHt0aHJvdyBuZXcgby5FcnJub0Vycm9yKDI5KX1pZihrPT09dm9pZCAwJiZ5PT09MCl0aHJvdyBuZXcgby5FcnJub0Vycm9yKDYpO2lmKGs9PW51bGwpYnJlYWs7eSsrLGhbZCt3XT1rfXJldHVybiB5JiYoZi5ub2RlLnRpbWVzdGFtcD1EYXRlLm5vdygpKSx5fSx3cml0ZShmLGgsZCxtLGIpe2Zvcih2YXIgeT0wO3k8bTt5KyspdHJ5e2koaFtkK3ldKX1jYXRjaHt0aHJvdyBuZXcgby5FcnJub0Vycm9yKDI5KX1yZXR1cm4gbSYmKGYubm9kZS50aW1lc3RhbXA9RGF0ZS5ub3coKSkseX19KSxvLm1rZGV2KF8scyxsKX0sZm9yY2VMb2FkRmlsZShlKXtpZihlLmlzRGV2aWNlfHxlLmlzRm9sZGVyfHxlLmxpbmt8fGUuY29udGVudHMpcmV0dXJuITA7aWYodHlwZW9mIFhNTEh0dHBSZXF1ZXN0PCJ1Iil0aHJvdyBuZXcgRXJyb3IoIkxhenkgbG9hZGluZyBzaG91bGQgaGF2ZSBiZWVuIHBlcmZvcm1lZCAoY29udGVudHMgc2V0KSBpbiBjcmVhdGVMYXp5RmlsZSwgYnV0IGl0IHdhcyBub3QuIExhenkgbG9hZGluZyBvbmx5IHdvcmtzIGluIHdlYiB3b3JrZXJzLiBVc2UgLS1lbWJlZC1maWxlIG9yIC0tcHJlbG9hZC1maWxlIGluIGVtY2Mgb24gdGhlIG1haW4gdGhyZWFkLiIpO2lmKGhlKXRyeXtlLmNvbnRlbnRzPV90KGhlKGUudXJsKSwhMCksZS51c2VkQnl0ZXM9ZS5jb250ZW50cy5sZW5ndGh9Y2F0Y2h7dGhyb3cgbmV3IG8uRXJybm9FcnJvcigyOSl9ZWxzZSB0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBsb2FkIHdpdGhvdXQgcmVhZCgpIG9yIFhNTEh0dHBSZXF1ZXN0LiIpfSxjcmVhdGVMYXp5RmlsZShlLHQscixpLF8pe2NsYXNzIHN7Y29uc3RydWN0b3IoKXt0aGlzLmxlbmd0aEtub3duPSExLHRoaXMuY2h1bmtzPVtdfWdldCh3KXtpZighKHc+dGhpcy5sZW5ndGgtMXx8dzwwKSl7dmFyIGs9dyV0aGlzLmNodW5rU2l6ZSxXPXcvdGhpcy5jaHVua1NpemV8MDtyZXR1cm4gdGhpcy5nZXR0ZXIoVylba119fXNldERhdGFHZXR0ZXIodyl7dGhpcy5nZXR0ZXI9d31jYWNoZUxlbmd0aCgpe3ZhciB3PW5ldyBYTUxIdHRwUmVxdWVzdDtpZih3Lm9wZW4oIkhFQUQiLHIsITEpLHcuc2VuZChudWxsKSwhKHcuc3RhdHVzPj0yMDAmJncuc3RhdHVzPDMwMHx8dy5zdGF0dXM9PT0zMDQpKXRocm93IG5ldyBFcnJvcigiQ291bGRuJ3QgbG9hZCAiK3IrIi4gU3RhdHVzOiAiK3cuc3RhdHVzKTt2YXIgaz1OdW1iZXIody5nZXRSZXNwb25zZUhlYWRlcigiQ29udGVudC1sZW5ndGgiKSksVyxSPShXPXcuZ2V0UmVzcG9uc2VIZWFkZXIoIkFjY2VwdC1SYW5nZXMiKSkmJlc9PT0iYnl0ZXMiLEk9KFc9dy5nZXRSZXNwb25zZUhlYWRlcigiQ29udGVudC1FbmNvZGluZyIpKSYmVz09PSJnemlwIixjPTEwMjQqMTAyNDtSfHwoYz1rKTt2YXIgZz0oaixHKT0+e2lmKGo+Ryl0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgcmFuZ2UgKCIraisiLCAiK0crIikgb3Igbm8gYnl0ZXMgcmVxdWVzdGVkISIpO2lmKEc+ay0xKXRocm93IG5ldyBFcnJvcigib25seSAiK2srIiBieXRlcyBhdmFpbGFibGUhIHByb2dyYW1tZXIgZXJyb3IhIik7dmFyIEg9bmV3IFhNTEh0dHBSZXF1ZXN0O2lmKEgub3BlbigiR0VUIixyLCExKSxrIT09YyYmSC5zZXRSZXF1ZXN0SGVhZGVyKCJSYW5nZSIsImJ5dGVzPSIraisiLSIrRyksSC5yZXNwb25zZVR5cGU9ImFycmF5YnVmZmVyIixILm92ZXJyaWRlTWltZVR5cGUmJkgub3ZlcnJpZGVNaW1lVHlwZSgidGV4dC9wbGFpbjsgY2hhcnNldD14LXVzZXItZGVmaW5lZCIpLEguc2VuZChudWxsKSwhKEguc3RhdHVzPj0yMDAmJkguc3RhdHVzPDMwMHx8SC5zdGF0dXM9PT0zMDQpKXRocm93IG5ldyBFcnJvcigiQ291bGRuJ3QgbG9hZCAiK3IrIi4gU3RhdHVzOiAiK0guc3RhdHVzKTtyZXR1cm4gSC5yZXNwb25zZSE9PXZvaWQgMD9uZXcgVWludDhBcnJheShILnJlc3BvbnNlfHxbXSk6X3QoSC5yZXNwb25zZVRleHR8fCIiLCEwKX0sRD10aGlzO0Quc2V0RGF0YUdldHRlcihqPT57dmFyIEc9aipjLEg9KGorMSkqYy0xO2lmKEg9TWF0aC5taW4oSCxrLTEpLHR5cGVvZiBELmNodW5rc1tqXT4idSImJihELmNodW5rc1tqXT1nKEcsSCkpLHR5cGVvZiBELmNodW5rc1tqXT4idSIpdGhyb3cgbmV3IEVycm9yKCJkb1hIUiBmYWlsZWQhIik7cmV0dXJuIEQuY2h1bmtzW2pdfSksKEl8fCFrKSYmKGM9az0xLGs9dGhpcy5nZXR0ZXIoMCkubGVuZ3RoLGM9ayx4ZSgiTGF6eUZpbGVzIG9uIGd6aXAgZm9yY2VzIGRvd25sb2FkIG9mIHRoZSB3aG9sZSBmaWxlIHdoZW4gbGVuZ3RoIGlzIGFjY2Vzc2VkIikpLHRoaXMuX2xlbmd0aD1rLHRoaXMuX2NodW5rU2l6ZT1jLHRoaXMubGVuZ3RoS25vd249ITB9Z2V0IGxlbmd0aCgpe3JldHVybiB0aGlzLmxlbmd0aEtub3dufHx0aGlzLmNhY2hlTGVuZ3RoKCksdGhpcy5fbGVuZ3RofWdldCBjaHVua1NpemUoKXtyZXR1cm4gdGhpcy5sZW5ndGhLbm93bnx8dGhpcy5jYWNoZUxlbmd0aCgpLHRoaXMuX2NodW5rU2l6ZX19aWYodHlwZW9mIFhNTEh0dHBSZXF1ZXN0PCJ1Iil7aWYoIXgpdGhyb3ciQ2Fubm90IGRvIHN5bmNocm9ub3VzIGJpbmFyeSBYSFJzIG91dHNpZGUgd2Vid29ya2VycyBpbiBtb2Rlcm4gYnJvd3NlcnMuIFVzZSAtLWVtYmVkLWZpbGUgb3IgLS1wcmVsb2FkLWZpbGUgaW4gZW1jYyI7dmFyIGw9bmV3IHMsZj17aXNEZXZpY2U6ITEsY29udGVudHM6bH19ZWxzZSB2YXIgZj17aXNEZXZpY2U6ITEsdXJsOnJ9O3ZhciBoPW8uY3JlYXRlRmlsZShlLHQsZixpLF8pO2YuY29udGVudHM/aC5jb250ZW50cz1mLmNvbnRlbnRzOmYudXJsJiYoaC5jb250ZW50cz1udWxsLGgudXJsPWYudXJsKSxPYmplY3QuZGVmaW5lUHJvcGVydGllcyhoLHt1c2VkQnl0ZXM6e2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbnRlbnRzLmxlbmd0aH19fSk7dmFyIGQ9e30sbT1PYmplY3Qua2V5cyhoLnN0cmVhbV9vcHMpO20uZm9yRWFjaCh5PT57dmFyIHc9aC5zdHJlYW1fb3BzW3ldO2RbeV09KC4uLmspPT4oby5mb3JjZUxvYWRGaWxlKGgpLHcoLi4uaykpfSk7ZnVuY3Rpb24gYih5LHcsayxXLFIpe3ZhciBJPXkubm9kZS5jb250ZW50cztpZihSPj1JLmxlbmd0aClyZXR1cm4gMDt2YXIgYz1NYXRoLm1pbihJLmxlbmd0aC1SLFcpO2lmKEkuc2xpY2UpZm9yKHZhciBnPTA7ZzxjO2crKyl3W2srZ109SVtSK2ddO2Vsc2UgZm9yKHZhciBnPTA7ZzxjO2crKyl3W2srZ109SS5nZXQoUitnKTtyZXR1cm4gY31yZXR1cm4gZC5yZWFkPSh5LHcsayxXLFIpPT4oby5mb3JjZUxvYWRGaWxlKGgpLGIoeSx3LGssVyxSKSksZC5tbWFwPSh5LHcsayxXLFIpPT57by5mb3JjZUxvYWRGaWxlKGgpO3ZhciBJPVp0KCk7aWYoIUkpdGhyb3cgbmV3IG8uRXJybm9FcnJvcig0OCk7cmV0dXJuIGIoeSxBLEksdyxrKSx7cHRyOkksYWxsb2NhdGVkOiEwfX0saC5zdHJlYW1fb3BzPWQsaH19LFY9e0RFRkFVTFRfUE9MTE1BU0s6NSxjYWxjdWxhdGVBdChlLHQscil7aWYoTy5pc0Ficyh0KSlyZXR1cm4gdDt2YXIgaTtpZihlPT09LTEwMClpPW8uY3dkKCk7ZWxzZXt2YXIgXz1WLmdldFN0cmVhbUZyb21GRChlKTtpPV8ucGF0aH1pZih0Lmxlbmd0aD09MCl7aWYoIXIpdGhyb3cgbmV3IG8uRXJybm9FcnJvcig0NCk7cmV0dXJuIGl9cmV0dXJuIE8uam9pbjIoaSx0KX0sZG9TdGF0KGUsdCxyKXt2YXIgaT1lKHQpO0Vbcj4+Ml09aS5kZXYsRVtyKzQ+PjJdPWkubW9kZSxQW3IrOD4+Ml09aS5ubGluayxFW3IrMTI+PjJdPWkudWlkLEVbcisxNj4+Ml09aS5naWQsRVtyKzIwPj4yXT1pLnJkZXYsQj1baS5zaXplPj4+MCwoRj1pLnNpemUsK01hdGguYWJzKEYpPj0xP0Y+MD8rTWF0aC5mbG9vcihGLzQyOTQ5NjcyOTYpPj4+MDp+fitNYXRoLmNlaWwoKEYtKyh+fkY+Pj4wKSkvNDI5NDk2NzI5Nik+Pj4wOjApXSxFW3IrMjQ+PjJdPUJbMF0sRVtyKzI4Pj4yXT1CWzFdLEVbciszMj4+Ml09NDA5NixFW3IrMzY+PjJdPWkuYmxvY2tzO3ZhciBfPWkuYXRpbWUuZ2V0VGltZSgpLHM9aS5tdGltZS5nZXRUaW1lKCksbD1pLmN0aW1lLmdldFRpbWUoKTtyZXR1cm4gQj1bTWF0aC5mbG9vcihfLzFlMyk+Pj4wLChGPU1hdGguZmxvb3IoXy8xZTMpLCtNYXRoLmFicyhGKT49MT9GPjA/K01hdGguZmxvb3IoRi80Mjk0OTY3Mjk2KT4+PjA6fn4rTWF0aC5jZWlsKChGLSsofn5GPj4+MCkpLzQyOTQ5NjcyOTYpPj4+MDowKV0sRVtyKzQwPj4yXT1CWzBdLEVbcis0ND4+Ml09QlsxXSxQW3IrNDg+PjJdPV8lMWUzKjFlMyxCPVtNYXRoLmZsb29yKHMvMWUzKT4+PjAsKEY9TWF0aC5mbG9vcihzLzFlMyksK01hdGguYWJzKEYpPj0xP0Y+MD8rTWF0aC5mbG9vcihGLzQyOTQ5NjcyOTYpPj4+MDp+fitNYXRoLmNlaWwoKEYtKyh+fkY+Pj4wKSkvNDI5NDk2NzI5Nik+Pj4wOjApXSxFW3IrNTY+PjJdPUJbMF0sRVtyKzYwPj4yXT1CWzFdLFBbcis2ND4+Ml09cyUxZTMqMWUzLEI9W01hdGguZmxvb3IobC8xZTMpPj4+MCwoRj1NYXRoLmZsb29yKGwvMWUzKSwrTWF0aC5hYnMoRik+PTE/Rj4wPytNYXRoLmZsb29yKEYvNDI5NDk2NzI5Nik+Pj4wOn5+K01hdGguY2VpbCgoRi0rKH5+Rj4+PjApKS80Mjk0OTY3Mjk2KT4+PjA6MCldLEVbcis3Mj4+Ml09QlswXSxFW3IrNzY+PjJdPUJbMV0sUFtyKzgwPj4yXT1sJTFlMyoxZTMsQj1baS5pbm8+Pj4wLChGPWkuaW5vLCtNYXRoLmFicyhGKT49MT9GPjA/K01hdGguZmxvb3IoRi80Mjk0OTY3Mjk2KT4+PjA6fn4rTWF0aC5jZWlsKChGLSsofn5GPj4+MCkpLzQyOTQ5NjcyOTYpPj4+MDowKV0sRVtyKzg4Pj4yXT1CWzBdLEVbcis5Mj4+Ml09QlsxXSwwfSxkb01zeW5jKGUsdCxyLGksXyl7aWYoIW8uaXNGaWxlKHQubm9kZS5tb2RlKSl0aHJvdyBuZXcgby5FcnJub0Vycm9yKDQzKTtpZihpJjIpcmV0dXJuIDA7dmFyIHM9VS5zbGljZShlLGUrcik7by5tc3luYyh0LHMsXyxyLGkpfSxnZXRTdHJlYW1Gcm9tRkQoZSl7dmFyIHQ9by5nZXRTdHJlYW1DaGVja2VkKGUpO3JldHVybiB0fSx2YXJhcmdzOnZvaWQgMCxnZXRTdHIoZSl7dmFyIHQ9RGUoZSk7cmV0dXJuIHR9fTtmdW5jdGlvbiBmbihlLHQscil7Vi52YXJhcmdzPXI7dHJ5e3ZhciBpPVYuZ2V0U3RyZWFtRnJvbUZEKGUpO3N3aXRjaCh0KXtjYXNlIDA6e3ZhciBfPW90KCk7aWYoXzwwKXJldHVybi0yODtmb3IoO28uc3RyZWFtc1tfXTspXysrO3ZhciBzO3JldHVybiBzPW8uZHVwU3RyZWFtKGksXykscy5mZH1jYXNlIDE6Y2FzZSAyOnJldHVybiAwO2Nhc2UgMzpyZXR1cm4gaS5mbGFncztjYXNlIDQ6e3ZhciBfPW90KCk7cmV0dXJuIGkuZmxhZ3N8PV8sMH1jYXNlIDEyOnt2YXIgXz1XZSgpLGw9MDtyZXR1cm4gaWVbXytsPj4xXT0yLDB9Y2FzZSAxMzpjYXNlIDE0OnJldHVybiAwfXJldHVybi0yOH1jYXRjaChmKXtpZih0eXBlb2Ygbz4idSJ8fGYubmFtZSE9PSJFcnJub0Vycm9yIil0aHJvdyBmO3JldHVybi1mLmVycm5vfX1mdW5jdGlvbiBobihlLHQscil7Vi52YXJhcmdzPXI7dHJ5e3ZhciBpPVYuZ2V0U3RyZWFtRnJvbUZEKGUpO3N3aXRjaCh0KXtjYXNlIDIxNTA5OnJldHVybiBpLnR0eT8wOi01OTtjYXNlIDIxNTA1OntpZighaS50dHkpcmV0dXJuLTU5O2lmKGkudHR5Lm9wcy5pb2N0bF90Y2dldHMpe3ZhciBfPWkudHR5Lm9wcy5pb2N0bF90Y2dldHMoaSkscz1XZSgpO0Vbcz4+Ml09Xy5jX2lmbGFnfHwwLEVbcys0Pj4yXT1fLmNfb2ZsYWd8fDAsRVtzKzg+PjJdPV8uY19jZmxhZ3x8MCxFW3MrMTI+PjJdPV8uY19sZmxhZ3x8MDtmb3IodmFyIGw9MDtsPDMyO2wrKylBW3MrbCsxN109Xy5jX2NjW2xdfHwwO3JldHVybiAwfXJldHVybiAwfWNhc2UgMjE1MTA6Y2FzZSAyMTUxMTpjYXNlIDIxNTEyOnJldHVybiBpLnR0eT8wOi01OTtjYXNlIDIxNTA2OmNhc2UgMjE1MDc6Y2FzZSAyMTUwODp7aWYoIWkudHR5KXJldHVybi01OTtpZihpLnR0eS5vcHMuaW9jdGxfdGNzZXRzKXtmb3IodmFyIHM9V2UoKSxmPUVbcz4+Ml0saD1FW3MrND4+Ml0sZD1FW3MrOD4+Ml0sbT1FW3MrMTI+PjJdLGI9W10sbD0wO2w8MzI7bCsrKWIucHVzaChBW3MrbCsxN10pO3JldHVybiBpLnR0eS5vcHMuaW9jdGxfdGNzZXRzKGkudHR5LHQse2NfaWZsYWc6ZixjX29mbGFnOmgsY19jZmxhZzpkLGNfbGZsYWc6bSxjX2NjOmJ9KX1yZXR1cm4gMH1jYXNlIDIxNTE5OntpZighaS50dHkpcmV0dXJuLTU5O3ZhciBzPVdlKCk7cmV0dXJuIEVbcz4+Ml09MCwwfWNhc2UgMjE1MjA6cmV0dXJuIGkudHR5Py0yODotNTk7Y2FzZSAyMTUzMTp7dmFyIHM9V2UoKTtyZXR1cm4gby5pb2N0bChpLHQscyl9Y2FzZSAyMTUyMzp7aWYoIWkudHR5KXJldHVybi01OTtpZihpLnR0eS5vcHMuaW9jdGxfdGlvY2d3aW5zeil7dmFyIHk9aS50dHkub3BzLmlvY3RsX3Rpb2Nnd2luc3ooaS50dHkpLHM9V2UoKTtpZVtzPj4xXT15WzBdLGllW3MrMj4+MV09eVsxXX1yZXR1cm4gMH1jYXNlIDIxNTI0OnJldHVybiBpLnR0eT8wOi01OTtjYXNlIDIxNTE1OnJldHVybiBpLnR0eT8wOi01OTtkZWZhdWx0OnJldHVybi0yOH19Y2F0Y2godyl7aWYodHlwZW9mIG8+InUifHx3Lm5hbWUhPT0iRXJybm9FcnJvciIpdGhyb3cgdztyZXR1cm4tdy5lcnJub319ZnVuY3Rpb24gY24oZSx0LHIsaSl7Vi52YXJhcmdzPWk7dHJ5e3Q9Vi5nZXRTdHIodCksdD1WLmNhbGN1bGF0ZUF0KGUsdCk7dmFyIF89aT9vdCgpOjA7cmV0dXJuIG8ub3Blbih0LHIsXykuZmR9Y2F0Y2gocyl7aWYodHlwZW9mIG8+InUifHxzLm5hbWUhPT0iRXJybm9FcnJvciIpdGhyb3cgcztyZXR1cm4tcy5lcnJub319ZnVuY3Rpb24gZG4oZSx0LHIpe3RyeXtyZXR1cm4gdD1WLmdldFN0cih0KSx0PVYuY2FsY3VsYXRlQXQoZSx0KSxyPT09MD9vLnVubGluayh0KTpyPT09NTEyP28ucm1kaXIodCk6eWUoIkludmFsaWQgZmxhZ3MgcGFzc2VkIHRvIHVubGlua2F0IiksMH1jYXRjaChpKXtpZih0eXBlb2Ygbz4idSJ8fGkubmFtZSE9PSJFcnJub0Vycm9yIil0aHJvdyBpO3JldHVybi1pLmVycm5vfX12YXIgdW49KCk9Pnt5ZSgiIil9LHN0PXt9LFR0PWU9Pntmb3IoO2UubGVuZ3RoOyl7dmFyIHQ9ZS5wb3AoKSxyPWUucG9wKCk7cih0KX19O2Z1bmN0aW9uIFllKGUpe3JldHVybiB0aGlzLmZyb21XaXJlVHlwZShQW2U+PjJdKX12YXIgVWU9e30sU2U9e30sbHQ9e30sUXQsZnQ9ZT0+e3Rocm93IG5ldyBRdChlKX0sRnQ9KGUsdCxyKT0+e2UuZm9yRWFjaChmdW5jdGlvbihmKXtsdFtmXT10fSk7ZnVuY3Rpb24gaShmKXt2YXIgaD1yKGYpO2gubGVuZ3RoIT09ZS5sZW5ndGgmJmZ0KCJNaXNtYXRjaGVkIHR5cGUgY29udmVydGVyIGNvdW50Iik7Zm9yKHZhciBkPTA7ZDxlLmxlbmd0aDsrK2Qpc2UoZVtkXSxoW2RdKX12YXIgXz1uZXcgQXJyYXkodC5sZW5ndGgpLHM9W10sbD0wO3QuZm9yRWFjaCgoZixoKT0+e1NlLmhhc093blByb3BlcnR5KGYpP19baF09U2VbZl06KHMucHVzaChmKSxVZS5oYXNPd25Qcm9wZXJ0eShmKXx8KFVlW2ZdPVtdKSxVZVtmXS5wdXNoKCgpPT57X1toXT1TZVtmXSwrK2wsbD09PXMubGVuZ3RoJiZpKF8pfSkpfSkscy5sZW5ndGg9PT0wJiZpKF8pfSxtbj1lPT57dmFyIHQ9c3RbZV07ZGVsZXRlIHN0W2VdO3ZhciByPXQucmF3Q29uc3RydWN0b3IsaT10LnJhd0Rlc3RydWN0b3IsXz10LmZpZWxkcyxzPV8ubWFwKGw9PmwuZ2V0dGVyUmV0dXJuVHlwZSkuY29uY2F0KF8ubWFwKGw9Pmwuc2V0dGVyQXJndW1lbnRUeXBlKSk7RnQoW2VdLHMsbD0+e3ZhciBmPXt9O3JldHVybiBfLmZvckVhY2goKGgsZCk9Pnt2YXIgbT1oLmZpZWxkTmFtZSxiPWxbZF0seT1oLmdldHRlcix3PWguZ2V0dGVyQ29udGV4dCxrPWxbZCtfLmxlbmd0aF0sVz1oLnNldHRlcixSPWguc2V0dGVyQ29udGV4dDtmW21dPXtyZWFkOkk9PmIuZnJvbVdpcmVUeXBlKHkodyxJKSksd3JpdGU6KEksYyk9Pnt2YXIgZz1bXTtXKFIsSSxrLnRvV2lyZVR5cGUoZyxjKSksVHQoZyl9fX0pLFt7bmFtZTp0Lm5hbWUsZnJvbVdpcmVUeXBlOmg9Pnt2YXIgZD17fTtmb3IodmFyIG0gaW4gZilkW21dPWZbbV0ucmVhZChoKTtyZXR1cm4gaShoKSxkfSx0b1dpcmVUeXBlOihoLGQpPT57Zm9yKHZhciBtIGluIGYpaWYoIShtIGluIGQpKXRocm93IG5ldyBUeXBlRXJyb3IoYE1pc3NpbmcgZmllbGQ6ICIke219ImApO3ZhciBiPXIoKTtmb3IobSBpbiBmKWZbbV0ud3JpdGUoYixkW21dKTtyZXR1cm4gaCE9PW51bGwmJmgucHVzaChpLGIpLGJ9LGFyZ1BhY2tBZHZhbmNlOmxlLHJlYWRWYWx1ZUZyb21Qb2ludGVyOlllLGRlc3RydWN0b3JGdW5jdGlvbjppfV19KX0scG49KGUsdCxyLGksXyk9Pnt9LGduPSgpPT57Zm9yKHZhciBlPW5ldyBBcnJheSgyNTYpLHQ9MDt0PDI1NjsrK3QpZVt0XT1TdHJpbmcuZnJvbUNoYXJDb2RlKHQpO2VyPWV9LGVyLFk9ZT0+e2Zvcih2YXIgdD0iIixyPWU7VVtyXTspdCs9ZXJbVVtyKytdXTtyZXR1cm4gdH0sWGUsUz1lPT57dGhyb3cgbmV3IFhlKGUpfTtmdW5jdGlvbiB2bihlLHQscj17fSl7dmFyIGk9dC5uYW1lO2lmKGV8fFMoYHR5cGUgIiR7aX0iIG11c3QgaGF2ZSBhIHBvc2l0aXZlIGludGVnZXIgdHlwZWlkIHBvaW50ZXJgKSxTZS5oYXNPd25Qcm9wZXJ0eShlKSl7aWYoci5pZ25vcmVEdXBsaWNhdGVSZWdpc3RyYXRpb25zKXJldHVybjtTKGBDYW5ub3QgcmVnaXN0ZXIgdHlwZSAnJHtpfScgdHdpY2VgKX1pZihTZVtlXT10LGRlbGV0ZSBsdFtlXSxVZS5oYXNPd25Qcm9wZXJ0eShlKSl7dmFyIF89VWVbZV07ZGVsZXRlIFVlW2VdLF8uZm9yRWFjaChzPT5zKCkpfX1mdW5jdGlvbiBzZShlLHQscj17fSl7aWYoISgiYXJnUGFja0FkdmFuY2UiaW4gdCkpdGhyb3cgbmV3IFR5cGVFcnJvcigicmVnaXN0ZXJUeXBlIHJlZ2lzdGVyZWRJbnN0YW5jZSByZXF1aXJlcyBhcmdQYWNrQWR2YW5jZSIpO3JldHVybiB2bihlLHQscil9dmFyIGxlPTgseW49KGUsdCxyLGkpPT57dD1ZKHQpLHNlKGUse25hbWU6dCxmcm9tV2lyZVR5cGU6ZnVuY3Rpb24oXyl7cmV0dXJuISFffSx0b1dpcmVUeXBlOmZ1bmN0aW9uKF8scyl7cmV0dXJuIHM/cjppfSxhcmdQYWNrQWR2YW5jZTpsZSxyZWFkVmFsdWVGcm9tUG9pbnRlcjpmdW5jdGlvbihfKXtyZXR1cm4gdGhpcy5mcm9tV2lyZVR5cGUoVVtfXSl9LGRlc3RydWN0b3JGdW5jdGlvbjpudWxsfSl9LHduPWU9Pih7Y291bnQ6ZS5jb3VudCxkZWxldGVTY2hlZHVsZWQ6ZS5kZWxldGVTY2hlZHVsZWQscHJlc2VydmVQb2ludGVyT25EZWxldGU6ZS5wcmVzZXJ2ZVBvaW50ZXJPbkRlbGV0ZSxwdHI6ZS5wdHIscHRyVHlwZTplLnB0clR5cGUsc21hcnRQdHI6ZS5zbWFydFB0cixzbWFydFB0clR5cGU6ZS5zbWFydFB0clR5cGV9KSxEdD1lPT57ZnVuY3Rpb24gdChyKXtyZXR1cm4gci4kJC5wdHJUeXBlLnJlZ2lzdGVyZWRDbGFzcy5uYW1lfVModChlKSsiIGluc3RhbmNlIGFscmVhZHkgZGVsZXRlZCIpfSxBdD0hMSx0cj1lPT57fSxibj1lPT57ZS5zbWFydFB0cj9lLnNtYXJ0UHRyVHlwZS5yYXdEZXN0cnVjdG9yKGUuc21hcnRQdHIpOmUucHRyVHlwZS5yZWdpc3RlcmVkQ2xhc3MucmF3RGVzdHJ1Y3RvcihlLnB0cil9LHJyPWU9PntlLmNvdW50LnZhbHVlLT0xO3ZhciB0PWUuY291bnQudmFsdWU9PT0wO3QmJmJuKGUpfSxucj0oZSx0LHIpPT57aWYodD09PXIpcmV0dXJuIGU7aWYoci5iYXNlQ2xhc3M9PT12b2lkIDApcmV0dXJuIG51bGw7dmFyIGk9bnIoZSx0LHIuYmFzZUNsYXNzKTtyZXR1cm4gaT09PW51bGw/bnVsbDpyLmRvd25jYXN0KGkpfSxpcj17fSxFbj0oKT0+T2JqZWN0LmtleXMoS2UpLmxlbmd0aCxrbj0oKT0+e3ZhciBlPVtdO2Zvcih2YXIgdCBpbiBLZSlLZS5oYXNPd25Qcm9wZXJ0eSh0KSYmZS5wdXNoKEtlW3RdKTtyZXR1cm4gZX0sR2U9W10sU3Q9KCk9Pntmb3IoO0dlLmxlbmd0aDspe3ZhciBlPUdlLnBvcCgpO2UuJCQuZGVsZXRlU2NoZWR1bGVkPSExLGUuZGVsZXRlKCl9fSxKZSx4bj1lPT57SmU9ZSxHZS5sZW5ndGgmJkplJiZKZShTdCl9LCRuPSgpPT57bi5nZXRJbmhlcml0ZWRJbnN0YW5jZUNvdW50PUVuLG4uZ2V0TGl2ZUluaGVyaXRlZEluc3RhbmNlcz1rbixuLmZsdXNoUGVuZGluZ0RlbGV0ZXM9U3Qsbi5zZXREZWxheUZ1bmN0aW9uPXhufSxLZT17fSxQbj0oZSx0KT0+e2Zvcih0PT09dm9pZCAwJiZTKCJwdHIgc2hvdWxkIG5vdCBiZSB1bmRlZmluZWQiKTtlLmJhc2VDbGFzczspdD1lLnVwY2FzdCh0KSxlPWUuYmFzZUNsYXNzO3JldHVybiB0fSxDbj0oZSx0KT0+KHQ9UG4oZSx0KSxLZVt0XSksaHQ9KGUsdCk9PnsoIXQucHRyVHlwZXx8IXQucHRyKSYmZnQoIm1ha2VDbGFzc0hhbmRsZSByZXF1aXJlcyBwdHIgYW5kIHB0clR5cGUiKTt2YXIgcj0hIXQuc21hcnRQdHJUeXBlLGk9ISF0LnNtYXJ0UHRyO3JldHVybiByIT09aSYmZnQoIkJvdGggc21hcnRQdHJUeXBlIGFuZCBzbWFydFB0ciBtdXN0IGJlIHNwZWNpZmllZCIpLHQuY291bnQ9e3ZhbHVlOjF9LFplKE9iamVjdC5jcmVhdGUoZSx7JCQ6e3ZhbHVlOnQsd3JpdGFibGU6ITB9fSkpfTtmdW5jdGlvbiBUbihlKXt2YXIgdD10aGlzLmdldFBvaW50ZWUoZSk7aWYoIXQpcmV0dXJuIHRoaXMuZGVzdHJ1Y3RvcihlKSxudWxsO3ZhciByPUNuKHRoaXMucmVnaXN0ZXJlZENsYXNzLHQpO2lmKHIhPT12b2lkIDApe2lmKHIuJCQuY291bnQudmFsdWU9PT0wKXJldHVybiByLiQkLnB0cj10LHIuJCQuc21hcnRQdHI9ZSxyLmNsb25lKCk7dmFyIGk9ci5jbG9uZSgpO3JldHVybiB0aGlzLmRlc3RydWN0b3IoZSksaX1mdW5jdGlvbiBfKCl7cmV0dXJuIHRoaXMuaXNTbWFydFBvaW50ZXI/aHQodGhpcy5yZWdpc3RlcmVkQ2xhc3MuaW5zdGFuY2VQcm90b3R5cGUse3B0clR5cGU6dGhpcy5wb2ludGVlVHlwZSxwdHI6dCxzbWFydFB0clR5cGU6dGhpcyxzbWFydFB0cjplfSk6aHQodGhpcy5yZWdpc3RlcmVkQ2xhc3MuaW5zdGFuY2VQcm90b3R5cGUse3B0clR5cGU6dGhpcyxwdHI6ZX0pfXZhciBzPXRoaXMucmVnaXN0ZXJlZENsYXNzLmdldEFjdHVhbFR5cGUodCksbD1pcltzXTtpZighbClyZXR1cm4gXy5jYWxsKHRoaXMpO3ZhciBmO3RoaXMuaXNDb25zdD9mPWwuY29uc3RQb2ludGVyVHlwZTpmPWwucG9pbnRlclR5cGU7dmFyIGg9bnIodCx0aGlzLnJlZ2lzdGVyZWRDbGFzcyxmLnJlZ2lzdGVyZWRDbGFzcyk7cmV0dXJuIGg9PT1udWxsP18uY2FsbCh0aGlzKTp0aGlzLmlzU21hcnRQb2ludGVyP2h0KGYucmVnaXN0ZXJlZENsYXNzLmluc3RhbmNlUHJvdG90eXBlLHtwdHJUeXBlOmYscHRyOmgsc21hcnRQdHJUeXBlOnRoaXMsc21hcnRQdHI6ZX0pOmh0KGYucmVnaXN0ZXJlZENsYXNzLmluc3RhbmNlUHJvdG90eXBlLHtwdHJUeXBlOmYscHRyOmh9KX12YXIgWmU9ZT0+dHlwZW9mIEZpbmFsaXphdGlvblJlZ2lzdHJ5PiJ1Ij8oWmU9dD0+dCxlKTooQXQ9bmV3IEZpbmFsaXphdGlvblJlZ2lzdHJ5KHQ9Pntycih0LiQkKX0pLFplPXQ9Pnt2YXIgcj10LiQkLGk9ISFyLnNtYXJ0UHRyO2lmKGkpe3ZhciBfPXskJDpyfTtBdC5yZWdpc3Rlcih0LF8sdCl9cmV0dXJuIHR9LHRyPXQ9PkF0LnVucmVnaXN0ZXIodCksWmUoZSkpLEZuPSgpPT57T2JqZWN0LmFzc2lnbihjdC5wcm90b3R5cGUse2lzQWxpYXNPZihlKXtpZighKHRoaXMgaW5zdGFuY2VvZiBjdCl8fCEoZSBpbnN0YW5jZW9mIGN0KSlyZXR1cm4hMTt2YXIgdD10aGlzLiQkLnB0clR5cGUucmVnaXN0ZXJlZENsYXNzLHI9dGhpcy4kJC5wdHI7ZS4kJD1lLiQkO2Zvcih2YXIgaT1lLiQkLnB0clR5cGUucmVnaXN0ZXJlZENsYXNzLF89ZS4kJC5wdHI7dC5iYXNlQ2xhc3M7KXI9dC51cGNhc3QociksdD10LmJhc2VDbGFzcztmb3IoO2kuYmFzZUNsYXNzOylfPWkudXBjYXN0KF8pLGk9aS5iYXNlQ2xhc3M7cmV0dXJuIHQ9PT1pJiZyPT09X30sY2xvbmUoKXtpZih0aGlzLiQkLnB0cnx8RHQodGhpcyksdGhpcy4kJC5wcmVzZXJ2ZVBvaW50ZXJPbkRlbGV0ZSlyZXR1cm4gdGhpcy4kJC5jb3VudC52YWx1ZSs9MSx0aGlzO3ZhciBlPVplKE9iamVjdC5jcmVhdGUoT2JqZWN0LmdldFByb3RvdHlwZU9mKHRoaXMpLHskJDp7dmFsdWU6d24odGhpcy4kJCl9fSkpO3JldHVybiBlLiQkLmNvdW50LnZhbHVlKz0xLGUuJCQuZGVsZXRlU2NoZWR1bGVkPSExLGV9LGRlbGV0ZSgpe3RoaXMuJCQucHRyfHxEdCh0aGlzKSx0aGlzLiQkLmRlbGV0ZVNjaGVkdWxlZCYmIXRoaXMuJCQucHJlc2VydmVQb2ludGVyT25EZWxldGUmJlMoIk9iamVjdCBhbHJlYWR5IHNjaGVkdWxlZCBmb3IgZGVsZXRpb24iKSx0cih0aGlzKSxycih0aGlzLiQkKSx0aGlzLiQkLnByZXNlcnZlUG9pbnRlck9uRGVsZXRlfHwodGhpcy4kJC5zbWFydFB0cj12b2lkIDAsdGhpcy4kJC5wdHI9dm9pZCAwKX0saXNEZWxldGVkKCl7cmV0dXJuIXRoaXMuJCQucHRyfSxkZWxldGVMYXRlcigpe3JldHVybiB0aGlzLiQkLnB0cnx8RHQodGhpcyksdGhpcy4kJC5kZWxldGVTY2hlZHVsZWQmJiF0aGlzLiQkLnByZXNlcnZlUG9pbnRlck9uRGVsZXRlJiZTKCJPYmplY3QgYWxyZWFkeSBzY2hlZHVsZWQgZm9yIGRlbGV0aW9uIiksR2UucHVzaCh0aGlzKSxHZS5sZW5ndGg9PT0xJiZKZSYmSmUoU3QpLHRoaXMuJCQuZGVsZXRlU2NoZWR1bGVkPSEwLHRoaXN9fSl9O2Z1bmN0aW9uIGN0KCl7fXZhciBRZT0oZSx0KT0+T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIm5hbWUiLHt2YWx1ZTplfSksRG49KGUsdCxyKT0+e2lmKGVbdF0ub3ZlcmxvYWRUYWJsZT09PXZvaWQgMCl7dmFyIGk9ZVt0XTtlW3RdPWZ1bmN0aW9uKC4uLl8pe3JldHVybiBlW3RdLm92ZXJsb2FkVGFibGUuaGFzT3duUHJvcGVydHkoXy5sZW5ndGgpfHxTKGBGdW5jdGlvbiAnJHtyfScgY2FsbGVkIHdpdGggYW4gaW52YWxpZCBudW1iZXIgb2YgYXJndW1lbnRzICgke18ubGVuZ3RofSkgLSBleHBlY3RzIG9uZSBvZiAoJHtlW3RdLm92ZXJsb2FkVGFibGV9KSFgKSxlW3RdLm92ZXJsb2FkVGFibGVbXy5sZW5ndGhdLmFwcGx5KHRoaXMsXyl9LGVbdF0ub3ZlcmxvYWRUYWJsZT1bXSxlW3RdLm92ZXJsb2FkVGFibGVbaS5hcmdDb3VudF09aX19LE10PShlLHQscik9PntuLmhhc093blByb3BlcnR5KGUpPygocj09PXZvaWQgMHx8bltlXS5vdmVybG9hZFRhYmxlIT09dm9pZCAwJiZuW2VdLm92ZXJsb2FkVGFibGVbcl0hPT12b2lkIDApJiZTKGBDYW5ub3QgcmVnaXN0ZXIgcHVibGljIG5hbWUgJyR7ZX0nIHR3aWNlYCksRG4obixlLGUpLG4uaGFzT3duUHJvcGVydHkocikmJlMoYENhbm5vdCByZWdpc3RlciBtdWx0aXBsZSBvdmVybG9hZHMgb2YgYSBmdW5jdGlvbiB3aXRoIHRoZSBzYW1lIG51bWJlciBvZiBhcmd1bWVudHMgKCR7cn0pIWApLG5bZV0ub3ZlcmxvYWRUYWJsZVtyXT10KToobltlXT10LHIhPT12b2lkIDAmJihuW2VdLm51bUFyZ3VtZW50cz1yKSl9LEFuPTQ4LFNuPTU3LE1uPWU9PntpZihlPT09dm9pZCAwKXJldHVybiJfdW5rbm93biI7ZT1lLnJlcGxhY2UoL1teYS16QS1aMC05X10vZywiJCIpO3ZhciB0PWUuY2hhckNvZGVBdCgwKTtyZXR1cm4gdD49QW4mJnQ8PVNuP2BfJHtlfWA6ZX07ZnVuY3Rpb24gam4oZSx0LHIsaSxfLHMsbCxmKXt0aGlzLm5hbWU9ZSx0aGlzLmNvbnN0cnVjdG9yPXQsdGhpcy5pbnN0YW5jZVByb3RvdHlwZT1yLHRoaXMucmF3RGVzdHJ1Y3Rvcj1pLHRoaXMuYmFzZUNsYXNzPV8sdGhpcy5nZXRBY3R1YWxUeXBlPXMsdGhpcy51cGNhc3Q9bCx0aGlzLmRvd25jYXN0PWYsdGhpcy5wdXJlVmlydHVhbEZ1bmN0aW9ucz1bXX12YXIganQ9KGUsdCxyKT0+e2Zvcig7dCE9PXI7KXQudXBjYXN0fHxTKGBFeHBlY3RlZCBudWxsIG9yIGluc3RhbmNlIG9mICR7ci5uYW1lfSwgZ290IGFuIGluc3RhbmNlIG9mICR7dC5uYW1lfWApLGU9dC51cGNhc3QoZSksdD10LmJhc2VDbGFzcztyZXR1cm4gZX07ZnVuY3Rpb24gT24oZSx0KXtpZih0PT09bnVsbClyZXR1cm4gdGhpcy5pc1JlZmVyZW5jZSYmUyhgbnVsbCBpcyBub3QgYSB2YWxpZCAke3RoaXMubmFtZX1gKSwwO3QuJCR8fFMoYENhbm5vdCBwYXNzICIke0l0KHQpfSIgYXMgYSAke3RoaXMubmFtZX1gKSx0LiQkLnB0cnx8UyhgQ2Fubm90IHBhc3MgZGVsZXRlZCBvYmplY3QgYXMgYSBwb2ludGVyIG9mIHR5cGUgJHt0aGlzLm5hbWV9YCk7dmFyIHI9dC4kJC5wdHJUeXBlLnJlZ2lzdGVyZWRDbGFzcyxpPWp0KHQuJCQucHRyLHIsdGhpcy5yZWdpc3RlcmVkQ2xhc3MpO3JldHVybiBpfWZ1bmN0aW9uIHpuKGUsdCl7dmFyIHI7aWYodD09PW51bGwpcmV0dXJuIHRoaXMuaXNSZWZlcmVuY2UmJlMoYG51bGwgaXMgbm90IGEgdmFsaWQgJHt0aGlzLm5hbWV9YCksdGhpcy5pc1NtYXJ0UG9pbnRlcj8ocj10aGlzLnJhd0NvbnN0cnVjdG9yKCksZSE9PW51bGwmJmUucHVzaCh0aGlzLnJhd0Rlc3RydWN0b3Iscikscik6MDsoIXR8fCF0LiQkKSYmUyhgQ2Fubm90IHBhc3MgIiR7SXQodCl9IiBhcyBhICR7dGhpcy5uYW1lfWApLHQuJCQucHRyfHxTKGBDYW5ub3QgcGFzcyBkZWxldGVkIG9iamVjdCBhcyBhIHBvaW50ZXIgb2YgdHlwZSAke3RoaXMubmFtZX1gKSwhdGhpcy5pc0NvbnN0JiZ0LiQkLnB0clR5cGUuaXNDb25zdCYmUyhgQ2Fubm90IGNvbnZlcnQgYXJndW1lbnQgb2YgdHlwZSAke3QuJCQuc21hcnRQdHJUeXBlP3QuJCQuc21hcnRQdHJUeXBlLm5hbWU6dC4kJC5wdHJUeXBlLm5hbWV9IHRvIHBhcmFtZXRlciB0eXBlICR7dGhpcy5uYW1lfWApO3ZhciBpPXQuJCQucHRyVHlwZS5yZWdpc3RlcmVkQ2xhc3M7aWYocj1qdCh0LiQkLnB0cixpLHRoaXMucmVnaXN0ZXJlZENsYXNzKSx0aGlzLmlzU21hcnRQb2ludGVyKXN3aXRjaCh0LiQkLnNtYXJ0UHRyPT09dm9pZCAwJiZTKCJQYXNzaW5nIHJhdyBwb2ludGVyIHRvIHNtYXJ0IHBvaW50ZXIgaXMgaWxsZWdhbCIpLHRoaXMuc2hhcmluZ1BvbGljeSl7Y2FzZSAwOnQuJCQuc21hcnRQdHJUeXBlPT09dGhpcz9yPXQuJCQuc21hcnRQdHI6UyhgQ2Fubm90IGNvbnZlcnQgYXJndW1lbnQgb2YgdHlwZSAke3QuJCQuc21hcnRQdHJUeXBlP3QuJCQuc21hcnRQdHJUeXBlLm5hbWU6dC4kJC5wdHJUeXBlLm5hbWV9IHRvIHBhcmFtZXRlciB0eXBlICR7dGhpcy5uYW1lfWApO2JyZWFrO2Nhc2UgMTpyPXQuJCQuc21hcnRQdHI7YnJlYWs7Y2FzZSAyOmlmKHQuJCQuc21hcnRQdHJUeXBlPT09dGhpcylyPXQuJCQuc21hcnRQdHI7ZWxzZXt2YXIgXz10LmNsb25lKCk7cj10aGlzLnJhd1NoYXJlKHIsUS50b0hhbmRsZSgoKT0+Xy5kZWxldGUoKSkpLGUhPT1udWxsJiZlLnB1c2godGhpcy5yYXdEZXN0cnVjdG9yLHIpfWJyZWFrO2RlZmF1bHQ6UygiVW5zdXBwb3J0aW5nIHNoYXJpbmcgcG9saWN5Iil9cmV0dXJuIHJ9ZnVuY3Rpb24gUm4oZSx0KXtpZih0PT09bnVsbClyZXR1cm4gdGhpcy5pc1JlZmVyZW5jZSYmUyhgbnVsbCBpcyBub3QgYSB2YWxpZCAke3RoaXMubmFtZX1gKSwwO3QuJCR8fFMoYENhbm5vdCBwYXNzICIke0l0KHQpfSIgYXMgYSAke3RoaXMubmFtZX1gKSx0LiQkLnB0cnx8UyhgQ2Fubm90IHBhc3MgZGVsZXRlZCBvYmplY3QgYXMgYSBwb2ludGVyIG9mIHR5cGUgJHt0aGlzLm5hbWV9YCksdC4kJC5wdHJUeXBlLmlzQ29uc3QmJlMoYENhbm5vdCBjb252ZXJ0IGFyZ3VtZW50IG9mIHR5cGUgJHt0LiQkLnB0clR5cGUubmFtZX0gdG8gcGFyYW1ldGVyIHR5cGUgJHt0aGlzLm5hbWV9YCk7dmFyIHI9dC4kJC5wdHJUeXBlLnJlZ2lzdGVyZWRDbGFzcyxpPWp0KHQuJCQucHRyLHIsdGhpcy5yZWdpc3RlcmVkQ2xhc3MpO3JldHVybiBpfXZhciBJbj0oKT0+e09iamVjdC5hc3NpZ24oZHQucHJvdG90eXBlLHtnZXRQb2ludGVlKGUpe3JldHVybiB0aGlzLnJhd0dldFBvaW50ZWUmJihlPXRoaXMucmF3R2V0UG9pbnRlZShlKSksZX0sZGVzdHJ1Y3RvcihlKXt2YXIgdDsodD10aGlzLnJhd0Rlc3RydWN0b3IpPT1udWxsfHx0LmNhbGwodGhpcyxlKX0sYXJnUGFja0FkdmFuY2U6bGUscmVhZFZhbHVlRnJvbVBvaW50ZXI6WWUsZnJvbVdpcmVUeXBlOlRufSl9O2Z1bmN0aW9uIGR0KGUsdCxyLGksXyxzLGwsZixoLGQsbSl7dGhpcy5uYW1lPWUsdGhpcy5yZWdpc3RlcmVkQ2xhc3M9dCx0aGlzLmlzUmVmZXJlbmNlPXIsdGhpcy5pc0NvbnN0PWksdGhpcy5pc1NtYXJ0UG9pbnRlcj1fLHRoaXMucG9pbnRlZVR5cGU9cyx0aGlzLnNoYXJpbmdQb2xpY3k9bCx0aGlzLnJhd0dldFBvaW50ZWU9Zix0aGlzLnJhd0NvbnN0cnVjdG9yPWgsdGhpcy5yYXdTaGFyZT1kLHRoaXMucmF3RGVzdHJ1Y3Rvcj1tLCFfJiZ0LmJhc2VDbGFzcz09PXZvaWQgMD9pPyh0aGlzLnRvV2lyZVR5cGU9T24sdGhpcy5kZXN0cnVjdG9yRnVuY3Rpb249bnVsbCk6KHRoaXMudG9XaXJlVHlwZT1Sbix0aGlzLmRlc3RydWN0b3JGdW5jdGlvbj1udWxsKTp0aGlzLnRvV2lyZVR5cGU9em59dmFyIGFyPShlLHQscik9PntuLmhhc093blByb3BlcnR5KGUpfHxmdCgiUmVwbGFjaW5nIG5vbmV4aXN0ZW50IHB1YmxpYyBzeW1ib2wiKSxuW2VdLm92ZXJsb2FkVGFibGUhPT12b2lkIDAmJnIhPT12b2lkIDA/bltlXS5vdmVybG9hZFRhYmxlW3JdPXQ6KG5bZV09dCxuW2VdLmFyZ0NvdW50PXIpfSxIbj0oZSx0LHIpPT57ZT1lLnJlcGxhY2UoL3AvZywiaSIpO3ZhciBpPW5bImR5bkNhbGxfIitlXTtyZXR1cm4gaSh0LC4uLnIpfSx1dD1bXSxvcixfcj1lPT57dmFyIHQ9dXRbZV07cmV0dXJuIHR8fChlPj11dC5sZW5ndGgmJih1dC5sZW5ndGg9ZSsxKSx1dFtlXT10PW9yLmdldChlKSksdH0sV249KGUsdCxyPVtdKT0+e2lmKGUuaW5jbHVkZXMoImoiKSlyZXR1cm4gSG4oZSx0LHIpO3ZhciBpPV9yKHQpKC4uLnIpO3JldHVybiBpfSxVbj0oZSx0KT0+KC4uLnIpPT5XbihlLHQsciksZGU9KGUsdCk9PntlPVkoZSk7ZnVuY3Rpb24gcigpe3JldHVybiBlLmluY2x1ZGVzKCJqIik/VW4oZSx0KTpfcih0KX12YXIgaT1yKCk7cmV0dXJuIHR5cGVvZiBpIT0iZnVuY3Rpb24iJiZTKGB1bmtub3duIGZ1bmN0aW9uIHBvaW50ZXIgd2l0aCBzaWduYXR1cmUgJHtlfTogJHt0fWApLGl9LHFuPShlLHQpPT57dmFyIHI9UWUodCxmdW5jdGlvbihpKXt0aGlzLm5hbWU9dCx0aGlzLm1lc3NhZ2U9aTt2YXIgXz1uZXcgRXJyb3IoaSkuc3RhY2s7XyE9PXZvaWQgMCYmKHRoaXMuc3RhY2s9dGhpcy50b1N0cmluZygpK2AKYCtfLnJlcGxhY2UoL15FcnJvcig6W15cbl0qKT9cbi8sIiIpKX0pO3JldHVybiByLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGUucHJvdG90eXBlKSxyLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1yLHIucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubWVzc2FnZT09PXZvaWQgMD90aGlzLm5hbWU6YCR7dGhpcy5uYW1lfTogJHt0aGlzLm1lc3NhZ2V9YH0scn0sc3IsbHI9ZT0+e3ZhciB0PWVhKGUpLHI9WSh0KTtyZXR1cm4gd2UodCkscn0sZnI9KGUsdCk9Pnt2YXIgcj1bXSxpPXt9O2Z1bmN0aW9uIF8ocyl7aWYoIWlbc10mJiFTZVtzXSl7aWYobHRbc10pe2x0W3NdLmZvckVhY2goXyk7cmV0dXJufXIucHVzaChzKSxpW3NdPSEwfX10aHJvdyB0LmZvckVhY2goXyksbmV3IHNyKGAke2V9OiBgK3IubWFwKGxyKS5qb2luKFsiLCAiXSkpfSxCbj0oZSx0LHIsaSxfLHMsbCxmLGgsZCxtLGIseSk9PnttPVkobSkscz1kZShfLHMpLGYmJihmPWRlKGwsZikpLGQmJihkPWRlKGgsZCkpLHk9ZGUoYix5KTt2YXIgdz1NbihtKTtNdCh3LGZ1bmN0aW9uKCl7ZnIoYENhbm5vdCBjb25zdHJ1Y3QgJHttfSBkdWUgdG8gdW5ib3VuZCB0eXBlc2AsW2ldKX0pLEZ0KFtlLHQscl0saT9baV06W10saz0+e3ZhciBXO2s9a1swXTt2YXIgUixJO2k/KFI9ay5yZWdpc3RlcmVkQ2xhc3MsST1SLmluc3RhbmNlUHJvdG90eXBlKTpJPWN0LnByb3RvdHlwZTt2YXIgYz1RZShtLGZ1bmN0aW9uKC4uLlV0KXtpZihPYmplY3QuZ2V0UHJvdG90eXBlT2YodGhpcykhPT1nKXRocm93IG5ldyBYZSgiVXNlICduZXcnIHRvIGNvbnN0cnVjdCAiK20pO2lmKEQuY29uc3RydWN0b3JfYm9keT09PXZvaWQgMCl0aHJvdyBuZXcgWGUobSsiIGhhcyBubyBhY2Nlc3NpYmxlIGNvbnN0cnVjdG9yIik7dmFyIHlyPUQuY29uc3RydWN0b3JfYm9keVtVdC5sZW5ndGhdO2lmKHlyPT09dm9pZCAwKXRocm93IG5ldyBYZShgVHJpZWQgdG8gaW52b2tlIGN0b3Igb2YgJHttfSB3aXRoIGludmFsaWQgbnVtYmVyIG9mIHBhcmFtZXRlcnMgKCR7VXQubGVuZ3RofSkgLSBleHBlY3RlZCAoJHtPYmplY3Qua2V5cyhELmNvbnN0cnVjdG9yX2JvZHkpLnRvU3RyaW5nKCl9KSBwYXJhbWV0ZXJzIGluc3RlYWQhYCk7cmV0dXJuIHlyLmFwcGx5KHRoaXMsVXQpfSksZz1PYmplY3QuY3JlYXRlKEkse2NvbnN0cnVjdG9yOnt2YWx1ZTpjfX0pO2MucHJvdG90eXBlPWc7dmFyIEQ9bmV3IGpuKG0sYyxnLHksUixzLGYsZCk7RC5iYXNlQ2xhc3MmJigoVz1ELmJhc2VDbGFzcykuX19kZXJpdmVkQ2xhc3NlcyE9bnVsbHx8KFcuX19kZXJpdmVkQ2xhc3Nlcz1bXSksRC5iYXNlQ2xhc3MuX19kZXJpdmVkQ2xhc3Nlcy5wdXNoKEQpKTt2YXIgaj1uZXcgZHQobSxELCEwLCExLCExKSxHPW5ldyBkdChtKyIqIixELCExLCExLCExKSxIPW5ldyBkdChtKyIgY29uc3QqIixELCExLCEwLCExKTtyZXR1cm4gaXJbZV09e3BvaW50ZXJUeXBlOkcsY29uc3RQb2ludGVyVHlwZTpIfSxhcih3LGMpLFtqLEcsSF19KX0sT3Q9W10sdWU9W10senQ9ZT0+e2U+OSYmLS11ZVtlKzFdPT09MCYmKHVlW2VdPXZvaWQgMCxPdC5wdXNoKGUpKX0sTm49KCk9PnVlLmxlbmd0aC8yLTUtT3QubGVuZ3RoLExuPSgpPT57dWUucHVzaCgwLDEsdm9pZCAwLDEsbnVsbCwxLCEwLDEsITEsMSksbi5jb3VudF9lbXZhbF9oYW5kbGVzPU5ufSxRPXt0b1ZhbHVlOmU9PihlfHxTKCJDYW5ub3QgdXNlIGRlbGV0ZWQgdmFsLiBoYW5kbGUgPSAiK2UpLHVlW2VdKSx0b0hhbmRsZTplPT57c3dpdGNoKGUpe2Nhc2Ugdm9pZCAwOnJldHVybiAyO2Nhc2UgbnVsbDpyZXR1cm4gNDtjYXNlITA6cmV0dXJuIDY7Y2FzZSExOnJldHVybiA4O2RlZmF1bHQ6e2NvbnN0IHQ9T3QucG9wKCl8fHVlLmxlbmd0aDtyZXR1cm4gdWVbdF09ZSx1ZVt0KzFdPTEsdH19fX0sVm49e25hbWU6ImVtc2NyaXB0ZW46OnZhbCIsZnJvbVdpcmVUeXBlOmU9Pnt2YXIgdD1RLnRvVmFsdWUoZSk7cmV0dXJuIHp0KGUpLHR9LHRvV2lyZVR5cGU6KGUsdCk9PlEudG9IYW5kbGUodCksYXJnUGFja0FkdmFuY2U6bGUscmVhZFZhbHVlRnJvbVBvaW50ZXI6WWUsZGVzdHJ1Y3RvckZ1bmN0aW9uOm51bGx9LFluPWU9PnNlKGUsVm4pLFhuPShlLHQscik9Pntzd2l0Y2godCl7Y2FzZSAxOnJldHVybiByP2Z1bmN0aW9uKGkpe3JldHVybiB0aGlzLmZyb21XaXJlVHlwZShBW2ldKX06ZnVuY3Rpb24oaSl7cmV0dXJuIHRoaXMuZnJvbVdpcmVUeXBlKFVbaV0pfTtjYXNlIDI6cmV0dXJuIHI/ZnVuY3Rpb24oaSl7cmV0dXJuIHRoaXMuZnJvbVdpcmVUeXBlKGllW2k+PjFdKX06ZnVuY3Rpb24oaSl7cmV0dXJuIHRoaXMuZnJvbVdpcmVUeXBlKCRlW2k+PjFdKX07Y2FzZSA0OnJldHVybiByP2Z1bmN0aW9uKGkpe3JldHVybiB0aGlzLmZyb21XaXJlVHlwZShFW2k+PjJdKX06ZnVuY3Rpb24oaSl7cmV0dXJuIHRoaXMuZnJvbVdpcmVUeXBlKFBbaT4+Ml0pfTtkZWZhdWx0OnRocm93IG5ldyBUeXBlRXJyb3IoYGludmFsaWQgaW50ZWdlciB3aWR0aCAoJHt0fSk6ICR7ZX1gKX19LEduPShlLHQscixpKT0+e3Q9WSh0KTtmdW5jdGlvbiBfKCl7fV8udmFsdWVzPXt9LHNlKGUse25hbWU6dCxjb25zdHJ1Y3RvcjpfLGZyb21XaXJlVHlwZTpmdW5jdGlvbihzKXtyZXR1cm4gdGhpcy5jb25zdHJ1Y3Rvci52YWx1ZXNbc119LHRvV2lyZVR5cGU6KHMsbCk9PmwudmFsdWUsYXJnUGFja0FkdmFuY2U6bGUscmVhZFZhbHVlRnJvbVBvaW50ZXI6WG4odCxyLGkpLGRlc3RydWN0b3JGdW5jdGlvbjpudWxsfSksTXQodCxfKX0sUnQ9KGUsdCk9Pnt2YXIgcj1TZVtlXTtyZXR1cm4gcj09PXZvaWQgMCYmUyhgJHt0fSBoYXMgdW5rbm93biB0eXBlICR7bHIoZSl9YCkscn0sSm49KGUsdCxyKT0+e3ZhciBpPVJ0KGUsImVudW0iKTt0PVkodCk7dmFyIF89aS5jb25zdHJ1Y3RvcixzPU9iamVjdC5jcmVhdGUoaS5jb25zdHJ1Y3Rvci5wcm90b3R5cGUse3ZhbHVlOnt2YWx1ZTpyfSxjb25zdHJ1Y3Rvcjp7dmFsdWU6UWUoYCR7aS5uYW1lfV8ke3R9YCxmdW5jdGlvbigpe30pfX0pO18udmFsdWVzW3JdPXMsX1t0XT1zfSxJdD1lPT57aWYoZT09PW51bGwpcmV0dXJuIm51bGwiO3ZhciB0PXR5cGVvZiBlO3JldHVybiB0PT09Im9iamVjdCJ8fHQ9PT0iYXJyYXkifHx0PT09ImZ1bmN0aW9uIj9lLnRvU3RyaW5nKCk6IiIrZX0sS249KGUsdCk9Pntzd2l0Y2godCl7Y2FzZSA0OnJldHVybiBmdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5mcm9tV2lyZVR5cGUoUGVbcj4+Ml0pfTtjYXNlIDg6cmV0dXJuIGZ1bmN0aW9uKHIpe3JldHVybiB0aGlzLmZyb21XaXJlVHlwZShOZVtyPj4zXSl9O2RlZmF1bHQ6dGhyb3cgbmV3IFR5cGVFcnJvcihgaW52YWxpZCBmbG9hdCB3aWR0aCAoJHt0fSk6ICR7ZX1gKX19LFpuPShlLHQscik9Pnt0PVkodCksc2UoZSx7bmFtZTp0LGZyb21XaXJlVHlwZTppPT5pLHRvV2lyZVR5cGU6KGksXyk9Pl8sYXJnUGFja0FkdmFuY2U6bGUscmVhZFZhbHVlRnJvbVBvaW50ZXI6S24odCxyKSxkZXN0cnVjdG9yRnVuY3Rpb246bnVsbH0pfTtmdW5jdGlvbiBRbihlKXtmb3IodmFyIHQ9MTt0PGUubGVuZ3RoOysrdClpZihlW3RdIT09bnVsbCYmZVt0XS5kZXN0cnVjdG9yRnVuY3Rpb249PT12b2lkIDApcmV0dXJuITA7cmV0dXJuITF9ZnVuY3Rpb24gZWkoZSx0LHIsaSxfLHMpe3ZhciBsPXQubGVuZ3RoO2w8MiYmUygiYXJnVHlwZXMgYXJyYXkgc2l6ZSBtaXNtYXRjaCEgTXVzdCBhdCBsZWFzdCBnZXQgcmV0dXJuIHZhbHVlIGFuZCAndGhpcycgdHlwZXMhIiksdFsxXTt2YXIgZj1Rbih0KSxoPXRbMF0ubmFtZSE9PSJ2b2lkIixkPWwtMixtPW5ldyBBcnJheShkKSxiPVtdLHk9W10sdz1mdW5jdGlvbiguLi5rKXtrLmxlbmd0aCE9PWQmJlMoYGZ1bmN0aW9uICR7ZX0gY2FsbGVkIHdpdGggJHtrLmxlbmd0aH0gYXJndW1lbnRzLCBleHBlY3RlZCAke2R9YCkseS5sZW5ndGg9MDt2YXIgVztiLmxlbmd0aD0xLGJbMF09Xztmb3IodmFyIFI9MDtSPGQ7KytSKW1bUl09dFtSKzJdLnRvV2lyZVR5cGUoeSxrW1JdKSxiLnB1c2gobVtSXSk7dmFyIEk9aSguLi5iKTtmdW5jdGlvbiBjKGcpe2lmKGYpVHQoeSk7ZWxzZSBmb3IodmFyIEQ9MjtEPHQubGVuZ3RoO0QrKyl7dmFyIGo9RD09PTE/VzptW0QtMl07dFtEXS5kZXN0cnVjdG9yRnVuY3Rpb24hPT1udWxsJiZ0W0RdLmRlc3RydWN0b3JGdW5jdGlvbihqKX1pZihoKXJldHVybiB0WzBdLmZyb21XaXJlVHlwZShnKX1yZXR1cm4gYyhJKX07cmV0dXJuIFFlKGUsdyl9dmFyIHRpPShlLHQpPT57Zm9yKHZhciByPVtdLGk9MDtpPGU7aSsrKXIucHVzaChQW3QraSo0Pj4yXSk7cmV0dXJuIHJ9LHJpPWU9PntlPWUudHJpbSgpO2NvbnN0IHQ9ZS5pbmRleE9mKCIoIik7cmV0dXJuIHQhPT0tMT9lLnN1YnN0cigwLHQpOmV9LG5pPShlLHQscixpLF8scyxsKT0+e3ZhciBmPXRpKHQscik7ZT1ZKGUpLGU9cmkoZSksXz1kZShpLF8pLE10KGUsZnVuY3Rpb24oKXtmcihgQ2Fubm90IGNhbGwgJHtlfSBkdWUgdG8gdW5ib3VuZCB0eXBlc2AsZil9LHQtMSksRnQoW10sZixoPT57dmFyIGQ9W2hbMF0sbnVsbF0uY29uY2F0KGguc2xpY2UoMSkpO3JldHVybiBhcihlLGVpKGUsZCxudWxsLF8scyksdC0xKSxbXX0pfSxpaT0oZSx0LHIpPT57c3dpdGNoKHQpe2Nhc2UgMTpyZXR1cm4gcj9pPT5BW2ldOmk9PlVbaV07Y2FzZSAyOnJldHVybiByP2k9PmllW2k+PjFdOmk9PiRlW2k+PjFdO2Nhc2UgNDpyZXR1cm4gcj9pPT5FW2k+PjJdOmk9PlBbaT4+Ml07ZGVmYXVsdDp0aHJvdyBuZXcgVHlwZUVycm9yKGBpbnZhbGlkIGludGVnZXIgd2lkdGggKCR7dH0pOiAke2V9YCl9fSxhaT0oZSx0LHIsaSxfKT0+e3Q9WSh0KTt2YXIgcz1tPT5tO2lmKGk9PT0wKXt2YXIgbD0zMi04KnI7cz1tPT5tPDxsPj4+bH12YXIgZj10LmluY2x1ZGVzKCJ1bnNpZ25lZCIpLGg9KG0sYik9Pnt9LGQ7Zj9kPWZ1bmN0aW9uKG0sYil7cmV0dXJuIGgoYix0aGlzLm5hbWUpLGI+Pj4wfTpkPWZ1bmN0aW9uKG0sYil7cmV0dXJuIGgoYix0aGlzLm5hbWUpLGJ9LHNlKGUse25hbWU6dCxmcm9tV2lyZVR5cGU6cyx0b1dpcmVUeXBlOmQsYXJnUGFja0FkdmFuY2U6bGUscmVhZFZhbHVlRnJvbVBvaW50ZXI6aWkodCxyLGkhPT0wKSxkZXN0cnVjdG9yRnVuY3Rpb246bnVsbH0pfSxvaT0oZSx0LHIpPT57dmFyIGk9W0ludDhBcnJheSxVaW50OEFycmF5LEludDE2QXJyYXksVWludDE2QXJyYXksSW50MzJBcnJheSxVaW50MzJBcnJheSxGbG9hdDMyQXJyYXksRmxvYXQ2NEFycmF5XSxfPWlbdF07ZnVuY3Rpb24gcyhsKXt2YXIgZj1QW2w+PjJdLGg9UFtsKzQ+PjJdO3JldHVybiBuZXcgXyhBLmJ1ZmZlcixoLGYpfXI9WShyKSxzZShlLHtuYW1lOnIsZnJvbVdpcmVUeXBlOnMsYXJnUGFja0FkdmFuY2U6bGUscmVhZFZhbHVlRnJvbVBvaW50ZXI6c30se2lnbm9yZUR1cGxpY2F0ZVJlZ2lzdHJhdGlvbnM6ITB9KX0sX2k9KGUsdCxyKT0+UHQoZSxVLHQsciksc2k9KGUsdCk9Pnt0PVkodCk7dmFyIHI9dD09PSJzdGQ6OnN0cmluZyI7c2UoZSx7bmFtZTp0LGZyb21XaXJlVHlwZShpKXt2YXIgXz1QW2k+PjJdLHM9aSs0LGw7aWYocilmb3IodmFyIGY9cyxoPTA7aDw9XzsrK2gpe3ZhciBkPXMraDtpZihoPT1ffHxVW2RdPT0wKXt2YXIgbT1kLWYsYj1EZShmLG0pO2w9PT12b2lkIDA/bD1iOihsKz0iXDAiLGwrPWIpLGY9ZCsxfX1lbHNle2Zvcih2YXIgeT1uZXcgQXJyYXkoXyksaD0wO2g8XzsrK2gpeVtoXT1TdHJpbmcuZnJvbUNoYXJDb2RlKFVbcytoXSk7bD15LmpvaW4oIiIpfXJldHVybiB3ZShpKSxsfSx0b1dpcmVUeXBlKGksXyl7XyBpbnN0YW5jZW9mIEFycmF5QnVmZmVyJiYoXz1uZXcgVWludDhBcnJheShfKSk7dmFyIHMsbD10eXBlb2YgXz09InN0cmluZyI7bHx8XyBpbnN0YW5jZW9mIFVpbnQ4QXJyYXl8fF8gaW5zdGFuY2VvZiBVaW50OENsYW1wZWRBcnJheXx8XyBpbnN0YW5jZW9mIEludDhBcnJheXx8UygiQ2Fubm90IHBhc3Mgbm9uLXN0cmluZyB0byBzdGQ6OnN0cmluZyIpLHImJmw/cz0kdChfKTpzPV8ubGVuZ3RoO3ZhciBmPW1yKDQrcysxKSxoPWYrNDtpZihQW2Y+PjJdPXMsciYmbClfaShfLGgscysxKTtlbHNlIGlmKGwpZm9yKHZhciBkPTA7ZDxzOysrZCl7dmFyIG09Xy5jaGFyQ29kZUF0KGQpO20+MjU1JiYod2UoaCksUygiU3RyaW5nIGhhcyBVVEYtMTYgY29kZSB1bml0cyB0aGF0IGRvIG5vdCBmaXQgaW4gOCBiaXRzIikpLFVbaCtkXT1tfWVsc2UgZm9yKHZhciBkPTA7ZDxzOysrZClVW2grZF09X1tkXTtyZXR1cm4gaSE9PW51bGwmJmkucHVzaCh3ZSxmKSxmfSxhcmdQYWNrQWR2YW5jZTpsZSxyZWFkVmFsdWVGcm9tUG9pbnRlcjpZZSxkZXN0cnVjdG9yRnVuY3Rpb24oaSl7d2UoaSl9fSl9LGhyPXR5cGVvZiBUZXh0RGVjb2RlcjwidSI/bmV3IFRleHREZWNvZGVyKCJ1dGYtMTZsZSIpOnZvaWQgMCxsaT0oZSx0KT0+e2Zvcih2YXIgcj1lLGk9cj4+MSxfPWkrdC8yOyEoaT49XykmJiRlW2ldOykrK2k7aWYocj1pPDwxLHItZT4zMiYmaHIpcmV0dXJuIGhyLmRlY29kZShVLnN1YmFycmF5KGUscikpO2Zvcih2YXIgcz0iIixsPTA7IShsPj10LzIpOysrbCl7dmFyIGY9aWVbZStsKjI+PjFdO2lmKGY9PTApYnJlYWs7cys9U3RyaW5nLmZyb21DaGFyQ29kZShmKX1yZXR1cm4gc30sZmk9KGUsdCxyKT0+e2lmKHIhPW51bGx8fChyPTIxNDc0ODM2NDcpLHI8MilyZXR1cm4gMDtyLT0yO2Zvcih2YXIgaT10LF89cjxlLmxlbmd0aCoyP3IvMjplLmxlbmd0aCxzPTA7czxfOysrcyl7dmFyIGw9ZS5jaGFyQ29kZUF0KHMpO2llW3Q+PjFdPWwsdCs9Mn1yZXR1cm4gaWVbdD4+MV09MCx0LWl9LGhpPWU9PmUubGVuZ3RoKjIsY2k9KGUsdCk9Pntmb3IodmFyIHI9MCxpPSIiOyEocj49dC80KTspe3ZhciBfPUVbZStyKjQ+PjJdO2lmKF89PTApYnJlYWs7aWYoKytyLF8+PTY1NTM2KXt2YXIgcz1fLTY1NTM2O2krPVN0cmluZy5mcm9tQ2hhckNvZGUoNTUyOTZ8cz4+MTAsNTYzMjB8cyYxMDIzKX1lbHNlIGkrPVN0cmluZy5mcm9tQ2hhckNvZGUoXyl9cmV0dXJuIGl9LGRpPShlLHQscik9PntpZihyIT1udWxsfHwocj0yMTQ3NDgzNjQ3KSxyPDQpcmV0dXJuIDA7Zm9yKHZhciBpPXQsXz1pK3ItNCxzPTA7czxlLmxlbmd0aDsrK3Mpe3ZhciBsPWUuY2hhckNvZGVBdChzKTtpZihsPj01NTI5NiYmbDw9NTczNDMpe3ZhciBmPWUuY2hhckNvZGVBdCgrK3MpO2w9NjU1MzYrKChsJjEwMjMpPDwxMCl8ZiYxMDIzfWlmKEVbdD4+Ml09bCx0Kz00LHQrND5fKWJyZWFrfXJldHVybiBFW3Q+PjJdPTAsdC1pfSx1aT1lPT57Zm9yKHZhciB0PTAscj0wO3I8ZS5sZW5ndGg7KytyKXt2YXIgaT1lLmNoYXJDb2RlQXQocik7aT49NTUyOTYmJmk8PTU3MzQzJiYrK3IsdCs9NH1yZXR1cm4gdH0sbWk9KGUsdCxyKT0+e3I9WShyKTt2YXIgaSxfLHMsbDt0PT09Mj8oaT1saSxfPWZpLGw9aGkscz1mPT4kZVtmPj4xXSk6dD09PTQmJihpPWNpLF89ZGksbD11aSxzPWY9PlBbZj4+Ml0pLHNlKGUse25hbWU6cixmcm9tV2lyZVR5cGU6Zj0+e2Zvcih2YXIgaD1QW2Y+PjJdLGQsbT1mKzQsYj0wO2I8PWg7KytiKXt2YXIgeT1mKzQrYip0O2lmKGI9PWh8fHMoeSk9PTApe3ZhciB3PXktbSxrPWkobSx3KTtkPT09dm9pZCAwP2Q9azooZCs9IlwwIixkKz1rKSxtPXkrdH19cmV0dXJuIHdlKGYpLGR9LHRvV2lyZVR5cGU6KGYsaCk9Pnt0eXBlb2YgaCE9InN0cmluZyImJlMoYENhbm5vdCBwYXNzIG5vbi1zdHJpbmcgdG8gQysrIHN0cmluZyB0eXBlICR7cn1gKTt2YXIgZD1sKGgpLG09bXIoNCtkK3QpO3JldHVybiBQW20+PjJdPWQvdCxfKGgsbSs0LGQrdCksZiE9PW51bGwmJmYucHVzaCh3ZSxtKSxtfSxhcmdQYWNrQWR2YW5jZTpsZSxyZWFkVmFsdWVGcm9tUG9pbnRlcjpZZSxkZXN0cnVjdG9yRnVuY3Rpb24oZil7d2UoZil9fSl9LHBpPShlLHQscixpLF8scyk9PntzdFtlXT17bmFtZTpZKHQpLHJhd0NvbnN0cnVjdG9yOmRlKHIsaSkscmF3RGVzdHJ1Y3RvcjpkZShfLHMpLGZpZWxkczpbXX19LGdpPShlLHQscixpLF8scyxsLGYsaCxkKT0+e3N0W2VdLmZpZWxkcy5wdXNoKHtmaWVsZE5hbWU6WSh0KSxnZXR0ZXJSZXR1cm5UeXBlOnIsZ2V0dGVyOmRlKGksXyksZ2V0dGVyQ29udGV4dDpzLHNldHRlckFyZ3VtZW50VHlwZTpsLHNldHRlcjpkZShmLGgpLHNldHRlckNvbnRleHQ6ZH0pfSx2aT0oZSx0KT0+e3Q9WSh0KSxzZShlLHtpc1ZvaWQ6ITAsbmFtZTp0LGFyZ1BhY2tBZHZhbmNlOjAsZnJvbVdpcmVUeXBlOigpPT57fSx0b1dpcmVUeXBlOihyLGkpPT57fX0pfSx5aT0oZSx0LHIpPT5VLmNvcHlXaXRoaW4oZSx0LHQrciksd2k9e30sY3I9ZT0+e3ZhciB0PXdpW2VdO3JldHVybiB0PT09dm9pZCAwP1koZSk6dH0sSHQ9W10sYmk9KGUsdCxyLGksXyk9PihlPUh0W2VdLHQ9US50b1ZhbHVlKHQpLHI9Y3IociksZSh0LHRbcl0saSxfKSksRWk9ZT0+e3ZhciB0PUh0Lmxlbmd0aDtyZXR1cm4gSHQucHVzaChlKSx0fSxraT0oZSx0KT0+e2Zvcih2YXIgcj1uZXcgQXJyYXkoZSksaT0wO2k8ZTsrK2kpcltpXT1SdChQW3QraSo0Pj4yXSwicGFyYW1ldGVyICIraSk7cmV0dXJuIHJ9LHhpPVJlZmxlY3QuY29uc3RydWN0LCRpPShlLHQscik9Pnt2YXIgaT1bXSxfPWUudG9XaXJlVHlwZShpLHIpO3JldHVybiBpLmxlbmd0aCYmKFBbdD4+Ml09US50b0hhbmRsZShpKSksX30sUGk9KGUsdCxyKT0+e3ZhciBpPWtpKGUsdCksXz1pLnNoaWZ0KCk7ZS0tO3ZhciBzPW5ldyBBcnJheShlKSxsPShoLGQsbSxiKT0+e2Zvcih2YXIgeT0wLHc9MDt3PGU7Kyt3KXNbd109aVt3XS5yZWFkVmFsdWVGcm9tUG9pbnRlcihiK3kpLHkrPWlbd10uYXJnUGFja0FkdmFuY2U7dmFyIGs9cj09PTE/eGkoZCxzKTpkLmFwcGx5KGgscyk7cmV0dXJuICRpKF8sbSxrKX0sZj1gbWV0aG9kQ2FsbGVyPCgke2kubWFwKGg9PmgubmFtZSkuam9pbigiLCAiKX0pID0+ICR7Xy5uYW1lfT5gO3JldHVybiBFaShRZShmLGwpKX0sQ2k9ZT0+e2U+OSYmKHVlW2UrMV0rPTEpfSxUaT0oKT0+US50b0hhbmRsZShbXSksRmk9ZT0+US50b0hhbmRsZShjcihlKSksRGk9KCk9PlEudG9IYW5kbGUoe30pLEFpPWU9Pnt2YXIgdD1RLnRvVmFsdWUoZSk7VHQodCksenQoZSl9LFNpPShlLHQscik9PntlPVEudG9WYWx1ZShlKSx0PVEudG9WYWx1ZSh0KSxyPVEudG9WYWx1ZShyKSxlW3RdPXJ9LE1pPShlLHQpPT57ZT1SdChlLCJfZW12YWxfdGFrZV92YWx1ZSIpO3ZhciByPWUucmVhZFZhbHVlRnJvbVBvaW50ZXIodCk7cmV0dXJuIFEudG9IYW5kbGUocil9LGppPSgpPT4yMTQ3NDgzNjQ4LE9pPWU9Pnt2YXIgdD1vZS5idWZmZXIscj0oZS10LmJ5dGVMZW5ndGgrNjU1MzUpLzY1NTM2O3RyeXtyZXR1cm4gb2UuZ3JvdyhyKSxhZSgpLDF9Y2F0Y2h7fX0semk9ZT0+e3ZhciB0PVUubGVuZ3RoO2U+Pj49MDt2YXIgcj1qaSgpO2lmKGU+cilyZXR1cm4hMTtmb3IodmFyIGk9KGgsZCk9PmgrKGQtaCVkKSVkLF89MTtfPD00O18qPTIpe3ZhciBzPXQqKDErLjIvXyk7cz1NYXRoLm1pbihzLGUrMTAwNjYzMjk2KTt2YXIgbD1NYXRoLm1pbihyLGkoTWF0aC5tYXgoZSxzKSw2NTUzNikpLGY9T2kobCk7aWYoZilyZXR1cm4hMH1yZXR1cm4hMX0sV3Q9e30sUmk9KCk9PnBlfHwiLi90aGlzLnByb2dyYW0iLGV0PSgpPT57aWYoIWV0LnN0cmluZ3Mpe3ZhciBlPSh0eXBlb2YgbmF2aWdhdG9yPT0ib2JqZWN0IiYmbmF2aWdhdG9yLmxhbmd1YWdlcyYmbmF2aWdhdG9yLmxhbmd1YWdlc1swXXx8IkMiKS5yZXBsYWNlKCItIiwiXyIpKyIuVVRGLTgiLHQ9e1VTRVI6IndlYl91c2VyIixMT0dOQU1FOiJ3ZWJfdXNlciIsUEFUSDoiLyIsUFdEOiIvIixIT01FOiIvaG9tZS93ZWJfdXNlciIsTEFORzplLF86UmkoKX07Zm9yKHZhciByIGluIFd0KVd0W3JdPT09dm9pZCAwP2RlbGV0ZSB0W3JdOnRbcl09V3Rbcl07dmFyIGk9W107Zm9yKHZhciByIGluIHQpaS5wdXNoKGAke3J9PSR7dFtyXX1gKTtldC5zdHJpbmdzPWl9cmV0dXJuIGV0LnN0cmluZ3N9LElpPShlLHQpPT57Zm9yKHZhciByPTA7cjxlLmxlbmd0aDsrK3IpQVt0KytdPWUuY2hhckNvZGVBdChyKTtBW3RdPTB9LEhpPShlLHQpPT57dmFyIHI9MDtyZXR1cm4gZXQoKS5mb3JFYWNoKChpLF8pPT57dmFyIHM9dCtyO1BbZStfKjQ+PjJdPXMsSWkoaSxzKSxyKz1pLmxlbmd0aCsxfSksMH0sV2k9KGUsdCk9Pnt2YXIgcj1ldCgpO1BbZT4+Ml09ci5sZW5ndGg7dmFyIGk9MDtyZXR1cm4gci5mb3JFYWNoKF89PmkrPV8ubGVuZ3RoKzEpLFBbdD4+Ml09aSwwfTtmdW5jdGlvbiBVaShlKXt0cnl7dmFyIHQ9Vi5nZXRTdHJlYW1Gcm9tRkQoZSk7cmV0dXJuIG8uY2xvc2UodCksMH1jYXRjaChyKXtpZih0eXBlb2Ygbz4idSJ8fHIubmFtZSE9PSJFcnJub0Vycm9yIil0aHJvdyByO3JldHVybiByLmVycm5vfX12YXIgcWk9KGUsdCxyLGkpPT57Zm9yKHZhciBfPTAscz0wO3M8cjtzKyspe3ZhciBsPVBbdD4+Ml0sZj1QW3QrND4+Ml07dCs9ODt2YXIgaD1vLnJlYWQoZSxBLGwsZixpKTtpZihoPDApcmV0dXJuLTE7aWYoXys9aCxoPGYpYnJlYWt9cmV0dXJuIF99O2Z1bmN0aW9uIEJpKGUsdCxyLGkpe3RyeXt2YXIgXz1WLmdldFN0cmVhbUZyb21GRChlKSxzPXFpKF8sdCxyKTtyZXR1cm4gUFtpPj4yXT1zLDB9Y2F0Y2gobCl7aWYodHlwZW9mIG8+InUifHxsLm5hbWUhPT0iRXJybm9FcnJvciIpdGhyb3cgbDtyZXR1cm4gbC5lcnJub319dmFyIE5pPShlLHQpPT50KzIwOTcxNTI+Pj4wPDQxOTQzMDUtISFlPyhlPj4+MCkrdCo0Mjk0OTY3Mjk2Ok5hTjtmdW5jdGlvbiBMaShlLHQscixpLF8pe3ZhciBzPU5pKHQscik7dHJ5e2lmKGlzTmFOKHMpKXJldHVybiA2MTt2YXIgbD1WLmdldFN0cmVhbUZyb21GRChlKTtyZXR1cm4gby5sbHNlZWsobCxzLGkpLEI9W2wucG9zaXRpb24+Pj4wLChGPWwucG9zaXRpb24sK01hdGguYWJzKEYpPj0xP0Y+MD8rTWF0aC5mbG9vcihGLzQyOTQ5NjcyOTYpPj4+MDp+fitNYXRoLmNlaWwoKEYtKyh+fkY+Pj4wKSkvNDI5NDk2NzI5Nik+Pj4wOjApXSxFW18+PjJdPUJbMF0sRVtfKzQ+PjJdPUJbMV0sbC5nZXRkZW50cyYmcz09PTAmJmk9PT0wJiYobC5nZXRkZW50cz1udWxsKSwwfWNhdGNoKGYpe2lmKHR5cGVvZiBvPiJ1Inx8Zi5uYW1lIT09IkVycm5vRXJyb3IiKXRocm93IGY7cmV0dXJuIGYuZXJybm99fXZhciBWaT0oZSx0LHIsaSk9Pntmb3IodmFyIF89MCxzPTA7czxyO3MrKyl7dmFyIGw9UFt0Pj4yXSxmPVBbdCs0Pj4yXTt0Kz04O3ZhciBoPW8ud3JpdGUoZSxBLGwsZixpKTtpZihoPDApcmV0dXJuLTE7Xys9aH1yZXR1cm4gX307ZnVuY3Rpb24gWWkoZSx0LHIsaSl7dHJ5e3ZhciBfPVYuZ2V0U3RyZWFtRnJvbUZEKGUpLHM9VmkoXyx0LHIpO3JldHVybiBQW2k+PjJdPXMsMH1jYXRjaChsKXtpZih0eXBlb2Ygbz4idSJ8fGwubmFtZSE9PSJFcnJub0Vycm9yIil0aHJvdyBsO3JldHVybiBsLmVycm5vfX12YXIgbXQ9ZT0+ZSU0PT09MCYmKGUlMTAwIT09MHx8ZSU0MDA9PT0wKSxYaT0oZSx0KT0+e2Zvcih2YXIgcj0wLGk9MDtpPD10O3IrPWVbaSsrXSk7cmV0dXJuIHJ9LGRyPVszMSwyOSwzMSwzMCwzMSwzMCwzMSwzMSwzMCwzMSwzMCwzMV0sdXI9WzMxLDI4LDMxLDMwLDMxLDMwLDMxLDMxLDMwLDMxLDMwLDMxXSxHaT0oZSx0KT0+e2Zvcih2YXIgcj1uZXcgRGF0ZShlLmdldFRpbWUoKSk7dD4wOyl7dmFyIGk9bXQoci5nZXRGdWxsWWVhcigpKSxfPXIuZ2V0TW9udGgoKSxzPShpP2RyOnVyKVtfXTtpZih0PnMtci5nZXREYXRlKCkpdC09cy1yLmdldERhdGUoKSsxLHIuc2V0RGF0ZSgxKSxfPDExP3Iuc2V0TW9udGgoXysxKTooci5zZXRNb250aCgwKSxyLnNldEZ1bGxZZWFyKHIuZ2V0RnVsbFllYXIoKSsxKSk7ZWxzZSByZXR1cm4gci5zZXREYXRlKHIuZ2V0RGF0ZSgpK3QpLHJ9cmV0dXJuIHJ9LEppPShlLHQpPT57QS5zZXQoZSx0KX0sS2k9KGUsdCxyLGkpPT57dmFyIF89UFtpKzQwPj4yXSxzPXt0bV9zZWM6RVtpPj4yXSx0bV9taW46RVtpKzQ+PjJdLHRtX2hvdXI6RVtpKzg+PjJdLHRtX21kYXk6RVtpKzEyPj4yXSx0bV9tb246RVtpKzE2Pj4yXSx0bV95ZWFyOkVbaSsyMD4+Ml0sdG1fd2RheTpFW2krMjQ+PjJdLHRtX3lkYXk6RVtpKzI4Pj4yXSx0bV9pc2RzdDpFW2krMzI+PjJdLHRtX2dtdG9mZjpFW2krMzY+PjJdLHRtX3pvbmU6Xz9EZShfKToiIn0sbD1EZShyKSxmPXsiJWMiOiIlYSAlYiAlZCAlSDolTTolUyAlWSIsIiVEIjoiJW0vJWQvJXkiLCIlRiI6IiVZLSVtLSVkIiwiJWgiOiIlYiIsIiVyIjoiJUk6JU06JVMgJXAiLCIlUiI6IiVIOiVNIiwiJVQiOiIlSDolTTolUyIsIiV4IjoiJW0vJWQvJXkiLCIlWCI6IiVIOiVNOiVTIiwiJUVjIjoiJWMiLCIlRUMiOiIlQyIsIiVFeCI6IiVtLyVkLyV5IiwiJUVYIjoiJUg6JU06JVMiLCIlRXkiOiIleSIsIiVFWSI6IiVZIiwiJU9kIjoiJWQiLCIlT2UiOiIlZSIsIiVPSCI6IiVIIiwiJU9JIjoiJUkiLCIlT20iOiIlbSIsIiVPTSI6IiVNIiwiJU9TIjoiJVMiLCIlT3UiOiIldSIsIiVPVSI6IiVVIiwiJU9WIjoiJVYiLCIlT3ciOiIldyIsIiVPVyI6IiVXIiwiJU95IjoiJXkifTtmb3IodmFyIGggaW4gZilsPWwucmVwbGFjZShuZXcgUmVnRXhwKGgsImciKSxmW2hdKTt2YXIgZD1bIlN1bmRheSIsIk1vbmRheSIsIlR1ZXNkYXkiLCJXZWRuZXNkYXkiLCJUaHVyc2RheSIsIkZyaWRheSIsIlNhdHVyZGF5Il0sbT1bIkphbnVhcnkiLCJGZWJydWFyeSIsIk1hcmNoIiwiQXByaWwiLCJNYXkiLCJKdW5lIiwiSnVseSIsIkF1Z3VzdCIsIlNlcHRlbWJlciIsIk9jdG9iZXIiLCJOb3ZlbWJlciIsIkRlY2VtYmVyIl07ZnVuY3Rpb24gYihjLGcsRCl7Zm9yKHZhciBqPXR5cGVvZiBjPT0ibnVtYmVyIj9jLnRvU3RyaW5nKCk6Y3x8IiI7ai5sZW5ndGg8Zzspaj1EWzBdK2o7cmV0dXJuIGp9ZnVuY3Rpb24geShjLGcpe3JldHVybiBiKGMsZywiMCIpfWZ1bmN0aW9uIHcoYyxnKXtmdW5jdGlvbiBEKEcpe3JldHVybiBHPDA/LTE6Rz4wPzE6MH12YXIgajtyZXR1cm4oaj1EKGMuZ2V0RnVsbFllYXIoKS1nLmdldEZ1bGxZZWFyKCkpKT09PTAmJihqPUQoYy5nZXRNb250aCgpLWcuZ2V0TW9udGgoKSkpPT09MCYmKGo9RChjLmdldERhdGUoKS1nLmdldERhdGUoKSkpLGp9ZnVuY3Rpb24gayhjKXtzd2l0Y2goYy5nZXREYXkoKSl7Y2FzZSAwOnJldHVybiBuZXcgRGF0ZShjLmdldEZ1bGxZZWFyKCktMSwxMSwyOSk7Y2FzZSAxOnJldHVybiBjO2Nhc2UgMjpyZXR1cm4gbmV3IERhdGUoYy5nZXRGdWxsWWVhcigpLDAsMyk7Y2FzZSAzOnJldHVybiBuZXcgRGF0ZShjLmdldEZ1bGxZZWFyKCksMCwyKTtjYXNlIDQ6cmV0dXJuIG5ldyBEYXRlKGMuZ2V0RnVsbFllYXIoKSwwLDEpO2Nhc2UgNTpyZXR1cm4gbmV3IERhdGUoYy5nZXRGdWxsWWVhcigpLTEsMTEsMzEpO2Nhc2UgNjpyZXR1cm4gbmV3IERhdGUoYy5nZXRGdWxsWWVhcigpLTEsMTEsMzApfX1mdW5jdGlvbiBXKGMpe3ZhciBnPUdpKG5ldyBEYXRlKGMudG1feWVhcisxOTAwLDAsMSksYy50bV95ZGF5KSxEPW5ldyBEYXRlKGcuZ2V0RnVsbFllYXIoKSwwLDQpLGo9bmV3IERhdGUoZy5nZXRGdWxsWWVhcigpKzEsMCw0KSxHPWsoRCksSD1rKGopO3JldHVybiB3KEcsZyk8PTA/dyhILGcpPD0wP2cuZ2V0RnVsbFllYXIoKSsxOmcuZ2V0RnVsbFllYXIoKTpnLmdldEZ1bGxZZWFyKCktMX12YXIgUj17IiVhIjpjPT5kW2MudG1fd2RheV0uc3Vic3RyaW5nKDAsMyksIiVBIjpjPT5kW2MudG1fd2RheV0sIiViIjpjPT5tW2MudG1fbW9uXS5zdWJzdHJpbmcoMCwzKSwiJUIiOmM9Pm1bYy50bV9tb25dLCIlQyI6Yz0+e3ZhciBnPWMudG1feWVhcisxOTAwO3JldHVybiB5KGcvMTAwfDAsMil9LCIlZCI6Yz0+eShjLnRtX21kYXksMiksIiVlIjpjPT5iKGMudG1fbWRheSwyLCIgIiksIiVnIjpjPT5XKGMpLnRvU3RyaW5nKCkuc3Vic3RyaW5nKDIpLCIlRyI6VywiJUgiOmM9PnkoYy50bV9ob3VyLDIpLCIlSSI6Yz0+e3ZhciBnPWMudG1faG91cjtyZXR1cm4gZz09MD9nPTEyOmc+MTImJihnLT0xMikseShnLDIpfSwiJWoiOmM9PnkoYy50bV9tZGF5K1hpKG10KGMudG1feWVhcisxOTAwKT9kcjp1cixjLnRtX21vbi0xKSwzKSwiJW0iOmM9PnkoYy50bV9tb24rMSwyKSwiJU0iOmM9PnkoYy50bV9taW4sMiksIiVuIjooKT0+YApgLCIlcCI6Yz0+Yy50bV9ob3VyPj0wJiZjLnRtX2hvdXI8MTI/IkFNIjoiUE0iLCIlUyI6Yz0+eShjLnRtX3NlYywyKSwiJXQiOigpPT4iCSIsIiV1IjpjPT5jLnRtX3dkYXl8fDcsIiVVIjpjPT57dmFyIGc9Yy50bV95ZGF5KzctYy50bV93ZGF5O3JldHVybiB5KE1hdGguZmxvb3IoZy83KSwyKX0sIiVWIjpjPT57dmFyIGc9TWF0aC5mbG9vcigoYy50bV95ZGF5KzctKGMudG1fd2RheSs2KSU3KS83KTtpZigoYy50bV93ZGF5KzM3MS1jLnRtX3lkYXktMiklNzw9MiYmZysrLGcpe2lmKGc9PTUzKXt2YXIgRD0oYy50bV93ZGF5KzM3MS1jLnRtX3lkYXkpJTc7RCE9NCYmKEQhPTN8fCFtdChjLnRtX3llYXIpKSYmKGc9MSl9fWVsc2V7Zz01Mjt2YXIgaj0oYy50bV93ZGF5KzctYy50bV95ZGF5LTEpJTc7KGo9PTR8fGo9PTUmJm10KGMudG1feWVhciU0MDAtMSkpJiZnKyt9cmV0dXJuIHkoZywyKX0sIiV3IjpjPT5jLnRtX3dkYXksIiVXIjpjPT57dmFyIGc9Yy50bV95ZGF5KzctKGMudG1fd2RheSs2KSU3O3JldHVybiB5KE1hdGguZmxvb3IoZy83KSwyKX0sIiV5IjpjPT4oYy50bV95ZWFyKzE5MDApLnRvU3RyaW5nKCkuc3Vic3RyaW5nKDIpLCIlWSI6Yz0+Yy50bV95ZWFyKzE5MDAsIiV6IjpjPT57dmFyIGc9Yy50bV9nbXRvZmYsRD1nPj0wO3JldHVybiBnPU1hdGguYWJzKGcpLzYwLGc9Zy82MCoxMDArZyU2MCwoRD8iKyI6Ii0iKSsoIjAwMDAiK2cpLnNsaWNlKC00KX0sIiVaIjpjPT5jLnRtX3pvbmUsIiUlIjooKT0+IiUifTtsPWwucmVwbGFjZSgvJSUvZywiXDBcMCIpO2Zvcih2YXIgaCBpbiBSKWwuaW5jbHVkZXMoaCkmJihsPWwucmVwbGFjZShuZXcgUmVnRXhwKGgsImciKSxSW2hdKHMpKSk7bD1sLnJlcGxhY2UoL1wwXDAvZywiJSIpO3ZhciBJPV90KGwsITEpO3JldHVybiBJLmxlbmd0aD50PzA6KEppKEksZSksSS5sZW5ndGgtMSl9LFppPShlLHQscixpLF8pPT5LaShlLHQscixpKTtvLmNyZWF0ZVByZWxvYWRlZEZpbGU9c24sby5zdGF0aWNJbml0KCksUXQ9bi5JbnRlcm5hbEVycm9yPWNsYXNzIGV4dGVuZHMgRXJyb3J7Y29uc3RydWN0b3IoZSl7c3VwZXIoZSksdGhpcy5uYW1lPSJJbnRlcm5hbEVycm9yIn19LGduKCksWGU9bi5CaW5kaW5nRXJyb3I9Y2xhc3MgZXh0ZW5kcyBFcnJvcntjb25zdHJ1Y3RvcihlKXtzdXBlcihlKSx0aGlzLm5hbWU9IkJpbmRpbmdFcnJvciJ9fSxGbigpLCRuKCksSW4oKSxzcj1uLlVuYm91bmRUeXBlRXJyb3I9cW4oRXJyb3IsIlVuYm91bmRUeXBlRXJyb3IiKSxMbigpO3ZhciBRaT17YjpacixrOmVuLHI6Zm4sQjpobixGOmNuLEU6ZG4sQzp1bix3Om1uLHo6cG4sSzp5bixvOkJuLEo6WW4sajpHbixhOkpuLHY6Wm4sZDpuaSxpOmFpLGY6b2ksdTpzaSxxOm1pLHg6cGksbjpnaSxMOnZpLEk6eWksTjpiaSxjOnp0LE86UGksUDpDaSxtOlRpLGg6RmksbDpEaSxNOkFpLGc6U2ksZTpNaSxEOnppLEc6SGksSDpXaSxzOlVpLHQ6QmkseTpMaSxwOllpLEE6Wml9LGE9S3IoKTthLlIsbi5fbWVtY3B5PWEuUyxuLl9oZWlmX25jbHhfY29sb3JfcHJvZmlsZV9hbGxvYz1hLlUsbi5faGVpZl9uY2x4X2NvbG9yX3Byb2ZpbGVfZnJlZT1hLlYsbi5faGVpZl90YWlfdGltZXN0YW1wX3BhY2tldF9jb3B5PWEuVzt2YXIgd2U9bi5fZnJlZT1hLlg7bi5faGVpZl9jb2xvcl9jb252ZXJzaW9uX29wdGlvbnNfc2V0X2RlZmF1bHRzPWEuWSxuLl9oZWlmX25jbHhfY29sb3JfcHJvZmlsZV9zZXRfY29sb3JfcHJpbWFyaWVzPWEuWixuLl9oZWlmX25jbHhfY29sb3JfcHJvZmlsZV9zZXRfdHJhbnNmZXJfY2hhcmFjdGVyaXN0aWNzPWEuXyxuLl9oZWlmX25jbHhfY29sb3JfcHJvZmlsZV9zZXRfbWF0cml4X2NvZWZmaWNpZW50cz1hLiQsbi5faGVpZl9pbml0PWEuYWEsbi5faGVpZl9kZWluaXQ9YS5iYSxuLl9oZWlmX2xvYWRfcGx1Z2luPWEuY2Esbi5faGVpZl91bmxvYWRfcGx1Z2luPWEuZGEsbi5faGVpZl9sb2FkX3BsdWdpbnM9YS5lYSxuLl9oZWlmX2dldF9wbHVnaW5fZGlyZWN0b3JpZXM9YS5mYSxuLl9oZWlmX2ZyZWVfcGx1Z2luX2RpcmVjdG9yaWVzPWEuZ2Esbi5faGVpZl9nZXRfdmVyc2lvbl9udW1iZXI9YS5oYSxuLl9oZWlmX2NvbnRleHRfYWxsb2M9YS5pYSxuLl9oZWlmX2NvbnRleHRfZnJlZT1hLmphLG4uX2hlaWZfY29udGV4dF9nZXRfbnVtYmVyX29mX3RvcF9sZXZlbF9pbWFnZXM9YS5rYSxuLl9oZWlmX2ltYWdlX2hhbmRsZV9yZWxlYXNlPWEubGEsbi5faGVpZl9pbWFnZV9oYW5kbGVfZ2V0X3dpZHRoPWEubWEsbi5faGVpZl9pbWFnZV9oYW5kbGVfZ2V0X2hlaWdodD1hLm5hLG4uX2hlaWZfaW1hZ2VfaGFuZGxlX2lzX3ByaW1hcnlfaW1hZ2U9YS5vYSxuLl9oZWlmX2ltYWdlX3JlbGVhc2U9YS5wYSxuLl9oZWlmX2ltYWdlX2hhbmRsZV9oYXNfYWxwaGFfY2hhbm5lbD1hLnFhLG4uX2hlaWZfaW1hZ2VfaGFuZGxlX2lzX3ByZW11bHRpcGxpZWRfYWxwaGE9YS5yYSxuLl9oZWlmX2NvbnRleHRfZ2V0X251bWJlcl9vZl9pdGVtcz1hLnNhLG4uX2hlaWZfaXRlbV9pc19pdGVtX2hpZGRlbj1hLnRhLG4uX2hlaWZfZ2V0X3ZlcnNpb249YS51YSxuLl9oZWlmX2NvbnRleHRfcmVhZF9mcm9tX21lbW9yeT1hLnZhLG4uX2hlaWZfY2hlY2tfZmlsZXR5cGU9YS53YSxuLl9oZWlmX2NvbnRleHRfZ2V0X2xpc3Rfb2ZfdG9wX2xldmVsX2ltYWdlX0lEcz1hLnhhLG4uX2hlaWZfY29udGV4dF9nZXRfaW1hZ2VfaGFuZGxlPWEueWEsbi5faGVpZl9jb250ZXh0X2dldF9wcmltYXJ5X2ltYWdlX2hhbmRsZT1hLnphLG4uX2hlaWZfZGVjb2RlX2ltYWdlPWEuQWEsbi5faGVpZl9pbWFnZV9nZXRfY2hyb21hX2Zvcm1hdD1hLkJhLG4uX2hlaWZfaW1hZ2VfZ2V0X2NvbG9yc3BhY2U9YS5DYSxuLl9oZWlmX2ltYWdlX2hhc19jaGFubmVsPWEuRGEsbi5faGVpZl9pbWFnZV9nZXRfcGxhbmVfcmVhZG9ubHkyPWEuRWEsbi5faGVpZl9pbWFnZV9nZXRfd2lkdGg9YS5GYSxuLl9oZWlmX2ltYWdlX2dldF9oZWlnaHQ9YS5HYSxuLl9oZWlmX2ltYWdlX2dldF9iaXRzX3Blcl9waXhlbF9yYW5nZT1hLkhhLG4uX2hlaWZfY29udGV4dF9nZXRfbGlzdF9vZl9pdGVtX0lEcz1hLklhLG4uX2hlaWZfaXRlbV9nZXRfaXRlbV90eXBlPWEuSmE7dmFyIG1yPW4uX21hbGxvYz1hLkthO24uX2hlaWZfaXRlbV9nZXRfbWltZV9pdGVtX2NvbnRlbnRfdHlwZT1hLkxhLG4uX2hlaWZfaXRlbV9nZXRfbWltZV9pdGVtX2NvbnRlbnRfZW5jb2Rpbmc9YS5NYSxuLl9oZWlmX2l0ZW1fZ2V0X3VyaV9pdGVtX3VyaV90eXBlPWEuTmEsbi5faGVpZl9pdGVtX2dldF9pdGVtX25hbWU9YS5PYSxuLl9oZWlmX2dldF92ZXJzaW9uX251bWJlcl9tYWpvcj1hLlBhLG4uX2hlaWZfZ2V0X3ZlcnNpb25fbnVtYmVyX21pbm9yPWEuUWEsbi5faGVpZl9nZXRfdmVyc2lvbl9udW1iZXJfbWFpbnRlbmFuY2U9YS5SYSxuLl9oZWlmX3JlZ2lzdGVyX2RlY29kZXJfcGx1Z2luPWEuU2Esbi5faGVpZl9yZWdpc3Rlcl9lbmNvZGVyX3BsdWdpbj1hLlRhLG4uX2hlaWZfc3RyaW5nX3JlbGVhc2U9YS5VYSxuLl9oZWlmX3JlZ2lzdGVyX2RlY29kZXI9YS5WYSxuLl9oZWlmX2ltYWdlX2dldF9wcmltYXJ5X3dpZHRoPWEuV2Esbi5faGVpZl9pbWFnZV9nZXRfcHJpbWFyeV9oZWlnaHQ9YS5YYSxuLl9oZWlmX2ltYWdlX2Nyb3A9YS5ZYSxuLl9oZWlmX2ltYWdlX2V4dHJhY3RfYXJlYT1hLlphLG4uX2hlaWZfaW1hZ2VfZ2V0X2JpdHNfcGVyX3BpeGVsPWEuX2Esbi5faGVpZl9pbWFnZV9nZXRfcGxhbmVfcmVhZG9ubHk9YS4kYSxuLl9oZWlmX2ltYWdlX2dldF9wbGFuZT1hLmFiLG4uX2hlaWZfaW1hZ2VfZ2V0X3BsYW5lMj1hLmJiLG4uX2hlaWZfaW1hZ2Vfc2NhbGVfaW1hZ2U9YS5jYixuLl9oZWlmX2ltYWdlX2V4dGVuZF90b19zaXplX2ZpbGxfd2l0aF96ZXJvPWEuZGIsbi5faGVpZl9pbWFnZV9nZXRfZGVjb2Rpbmdfd2FybmluZ3M9YS5lYixuLl9oZWlmX2ltYWdlX2FkZF9kZWNvZGluZ193YXJuaW5nPWEuZmIsbi5faGVpZl9pbWFnZV9nZXRfcGl4ZWxfYXNwZWN0X3JhdGlvPWEuZ2Isbi5faGVpZl9pbWFnZV9zZXRfcGl4ZWxfYXNwZWN0X3JhdGlvPWEuaGIsbi5faGVpZl9pbWFnZV9oYW5kbGVfc2V0X3BpeGVsX2FzcGVjdF9yYXRpbz1hLmliLG4uX2hlaWZfaW1hZ2VfY3JlYXRlPWEuamIsbi5faGVpZl9pbWFnZV9hZGRfcGxhbmU9YS5rYixuLl9oZWlmX2ltYWdlX2FkZF9wbGFuZV9zYWZlPWEubGIsbi5faGVpZl9pbWFnZV9zZXRfcHJlbXVsdGlwbGllZF9hbHBoYT1hLm1iLG4uX2hlaWZfaW1hZ2VfaXNfcHJlbXVsdGlwbGllZF9hbHBoYT1hLm5iLG4uX2hlaWZfaW1hZ2VfZXh0ZW5kX3BhZGRpbmdfdG9fc2l6ZT1hLm9iLG4uX2hlaWZfY29sb3JfY29udmVyc2lvbl9vcHRpb25zX2V4dF9hbGxvYz1hLnBiLG4uX2hlaWZfY29sb3JfY29udmVyc2lvbl9vcHRpb25zX2V4dF9jb3B5PWEucWIsbi5faGVpZl9jb2xvcl9jb252ZXJzaW9uX29wdGlvbnNfZXh0X2ZyZWU9YS5yYixuLl9oZWlmX2ltYWdlX2hhbmRsZV9nZXRfY29sb3JfcHJvZmlsZV90eXBlPWEuc2Isbi5faGVpZl9pbWFnZV9oYW5kbGVfZ2V0X3Jhd19jb2xvcl9wcm9maWxlX3NpemU9YS50YixuLl9oZWlmX2ltYWdlX2hhbmRsZV9nZXRfcmF3X2NvbG9yX3Byb2ZpbGU9YS51YixuLl9oZWlmX2ltYWdlX2hhbmRsZV9nZXRfbmNseF9jb2xvcl9wcm9maWxlPWEudmIsbi5faGVpZl9pbWFnZV9nZXRfY29sb3JfcHJvZmlsZV90eXBlPWEud2Isbi5faGVpZl9pbWFnZV9nZXRfcmF3X2NvbG9yX3Byb2ZpbGVfc2l6ZT1hLnhiLG4uX2hlaWZfaW1hZ2VfZ2V0X3Jhd19jb2xvcl9wcm9maWxlPWEueWIsbi5faGVpZl9pbWFnZV9nZXRfbmNseF9jb2xvcl9wcm9maWxlPWEuemIsbi5faGVpZl9pbWFnZV9zZXRfcmF3X2NvbG9yX3Byb2ZpbGU9YS5BYixuLl9oZWlmX2ltYWdlX3NldF9uY2x4X2NvbG9yX3Byb2ZpbGU9YS5CYixuLl9oZWlmX2ltYWdlX2hhc19jb250ZW50X2xpZ2h0X2xldmVsPWEuQ2Isbi5faGVpZl9pbWFnZV9oYW5kbGVfaGFzX2NvbnRlbnRfbGlnaHRfbGV2ZWw9YS5EYixuLl9oZWlmX2ltYWdlX2dldF9jb250ZW50X2xpZ2h0X2xldmVsPWEuRWIsbi5faGVpZl9pbWFnZV9oYW5kbGVfZ2V0X2NvbnRlbnRfbGlnaHRfbGV2ZWw9YS5GYixuLl9oZWlmX2ltYWdlX3NldF9jb250ZW50X2xpZ2h0X2xldmVsPWEuR2Isbi5faGVpZl9pbWFnZV9oYW5kbGVfc2V0X2NvbnRlbnRfbGlnaHRfbGV2ZWw9YS5IYixuLl9oZWlmX2ltYWdlX2hhc19tYXN0ZXJpbmdfZGlzcGxheV9jb2xvdXJfdm9sdW1lPWEuSWIsbi5faGVpZl9pbWFnZV9oYW5kbGVfaGFzX21hc3RlcmluZ19kaXNwbGF5X2NvbG91cl92b2x1bWU9YS5KYixuLl9oZWlmX2ltYWdlX2dldF9tYXN0ZXJpbmdfZGlzcGxheV9jb2xvdXJfdm9sdW1lPWEuS2Isbi5faGVpZl9pbWFnZV9oYW5kbGVfZ2V0X21hc3RlcmluZ19kaXNwbGF5X2NvbG91cl92b2x1bWU9YS5MYixuLl9oZWlmX2ltYWdlX3NldF9tYXN0ZXJpbmdfZGlzcGxheV9jb2xvdXJfdm9sdW1lPWEuTWIsbi5faGVpZl9pbWFnZV9oYW5kbGVfc2V0X21hc3RlcmluZ19kaXNwbGF5X2NvbG91cl92b2x1bWU9YS5OYixuLl9oZWlmX2ltYWdlX2hhc19hbWJpZW50X3ZpZXdpbmdfZW52aXJvbm1lbnQ9YS5PYixuLl9oZWlmX2ltYWdlX2hhbmRsZV9oYXNfYW1iaWVudF92aWV3aW5nX2Vudmlyb25tZW50PWEuUGIsbi5faGVpZl9pbWFnZV9nZXRfYW1iaWVudF92aWV3aW5nX2Vudmlyb25tZW50PWEuUWIsbi5faGVpZl9pbWFnZV9oYW5kbGVfZ2V0X2FtYmllbnRfdmlld2luZ19lbnZpcm9ubWVudD1hLlJiLG4uX2hlaWZfaW1hZ2Vfc2V0X2FtYmllbnRfdmlld2luZ19lbnZpcm9ubWVudD1hLlNiLG4uX2hlaWZfaW1hZ2VfaGFuZGxlX3NldF9hbWJpZW50X3ZpZXdpbmdfZW52aXJvbm1lbnQ9YS5UYixuLl9oZWlmX2ltYWdlX2hhc19ub21pbmFsX2RpZmZ1c2Vfd2hpdGVfbHVtaW5hbmNlPWEuVWIsbi5faGVpZl9pbWFnZV9nZXRfbm9taW5hbF9kaWZmdXNlX3doaXRlX2x1bWluYW5jZT1hLlZiLG4uX2hlaWZfaW1hZ2Vfc2V0X25vbWluYWxfZGlmZnVzZV93aGl0ZV9sdW1pbmFuY2U9YS5XYixuLl9oZWlmX2ltYWdlX2hhbmRsZV9oYXNfbm9taW5hbF9kaWZmdXNlX3doaXRlX2x1bWluYW5jZT1hLlhiLG4uX2hlaWZfaW1hZ2VfaGFuZGxlX2dldF9ub21pbmFsX2RpZmZ1c2Vfd2hpdGVfbHVtaW5hbmNlPWEuWWIsbi5faGVpZl9pbWFnZV9oYW5kbGVfc2V0X25vbWluYWxfZGlmZnVzZV93aGl0ZV9sdW1pbmFuY2U9YS5aYixuLl9oZWlmX21hc3RlcmluZ19kaXNwbGF5X2NvbG91cl92b2x1bWVfZGVjb2RlPWEuX2Isbi5faGVpZl9pbWFnZV9oYW5kbGVfZ2V0X251bWJlcl9vZl9yZWdpb25faXRlbXM9YS4kYixuLl9oZWlmX2ltYWdlX2hhbmRsZV9nZXRfbGlzdF9vZl9yZWdpb25faXRlbV9pZHM9YS5hYyxuLl9oZWlmX2NvbnRleHRfZ2V0X3JlZ2lvbl9pdGVtPWEuYmMsbi5faGVpZl9yZWdpb25faXRlbV9nZXRfaWQ9YS5jYyxuLl9oZWlmX3JlZ2lvbl9pdGVtX3JlbGVhc2U9YS5kYyxuLl9oZWlmX3JlZ2lvbl9pdGVtX2dldF9yZWZlcmVuY2Vfc2l6ZT1hLmVjLG4uX2hlaWZfcmVnaW9uX2l0ZW1fZ2V0X251bWJlcl9vZl9yZWdpb25zPWEuZmMsbi5faGVpZl9yZWdpb25faXRlbV9nZXRfbGlzdF9vZl9yZWdpb25zPWEuZ2Msbi5faGVpZl9yZWdpb25fcmVsZWFzZT1hLmhjLG4uX2hlaWZfcmVnaW9uX3JlbGVhc2VfbWFueT1hLmljLG4uX2hlaWZfcmVnaW9uX2dldF90eXBlPWEuamMsbi5faGVpZl9yZWdpb25fZ2V0X3BvaW50PWEua2Msbi5faGVpZl9yZWdpb25fZ2V0X3BvaW50X3RyYW5zZm9ybWVkPWEubGMsbi5faGVpZl9yZWdpb25fZ2V0X3JlY3RhbmdsZT1hLm1jLG4uX2hlaWZfcmVnaW9uX2dldF9yZWN0YW5nbGVfdHJhbnNmb3JtZWQ9YS5uYyxuLl9oZWlmX3JlZ2lvbl9nZXRfZWxsaXBzZT1hLm9jLG4uX2hlaWZfcmVnaW9uX2dldF9lbGxpcHNlX3RyYW5zZm9ybWVkPWEucGMsbi5faGVpZl9yZWdpb25fZ2V0X3BvbHlnb25fbnVtX3BvaW50cz1hLnFjLG4uX2hlaWZfcmVnaW9uX2dldF9wb2x5Z29uX3BvaW50cz1hLnJjLG4uX2hlaWZfcmVnaW9uX2dldF9wb2x5Z29uX3BvaW50c190cmFuc2Zvcm1lZD1hLnNjLG4uX2hlaWZfcmVnaW9uX2dldF9wb2x5bGluZV9udW1fcG9pbnRzPWEudGMsbi5faGVpZl9yZWdpb25fZ2V0X3BvbHlsaW5lX3BvaW50cz1hLnVjLG4uX2hlaWZfcmVnaW9uX2dldF9wb2x5bGluZV9wb2ludHNfdHJhbnNmb3JtZWQ9YS52YyxuLl9oZWlmX3JlZ2lvbl9nZXRfcmVmZXJlbmNlZF9tYXNrX0lEPWEud2Msbi5faGVpZl9yZWdpb25fZ2V0X2lubGluZV9tYXNrX2RhdGFfbGVuPWEueGMsbi5faGVpZl9yZWdpb25faXRlbV9hZGRfcmVnaW9uX2lubGluZV9tYXNrX2RhdGE9YS55YyxuLl9oZWlmX3JlZ2lvbl9nZXRfbWFza19pbWFnZT1hLnpjLG4uX2hlaWZfaW1hZ2VfaGFuZGxlX2FkZF9yZWdpb25faXRlbT1hLkFjLG4uX2hlaWZfcmVnaW9uX2l0ZW1fYWRkX3JlZ2lvbl9wb2ludD1hLkJjLG4uX2hlaWZfcmVnaW9uX2l0ZW1fYWRkX3JlZ2lvbl9yZWN0YW5nbGU9YS5DYyxuLl9oZWlmX3JlZ2lvbl9pdGVtX2FkZF9yZWdpb25fZWxsaXBzZT1hLkRjLG4uX2hlaWZfcmVnaW9uX2l0ZW1fYWRkX3JlZ2lvbl9wb2x5Z29uPWEuRWMsbi5faGVpZl9yZWdpb25faXRlbV9hZGRfcmVnaW9uX3BvbHlsaW5lPWEuRmMsbi5faGVpZl9yZWdpb25faXRlbV9hZGRfcmVnaW9uX3JlZmVyZW5jZWRfbWFzaz1hLkdjLG4uX2hlaWZfcmVnaW9uX2dldF9pbmxpbmVfbWFza19kYXRhPWEuSGMsbi5faGVpZl9yZWdpb25faXRlbV9hZGRfcmVnaW9uX2lubGluZV9tYXNrPWEuSWMsbi5faGVpZl9pdGVtX2dldF9wcm9wZXJ0aWVzX29mX3R5cGU9YS5KYyxuLl9oZWlmX2l0ZW1fZ2V0X3RyYW5zZm9ybWF0aW9uX3Byb3BlcnRpZXM9YS5LYyxuLl9oZWlmX2l0ZW1fZ2V0X3Byb3BlcnR5X3R5cGU9YS5MYyxuLl9oZWlmX2l0ZW1fZ2V0X3Byb3BlcnR5X3VzZXJfZGVzY3JpcHRpb249YS5NYyxuLl9oZWlmX2l0ZW1fYWRkX3Byb3BlcnR5X3VzZXJfZGVzY3JpcHRpb249YS5OYyxuLl9oZWlmX3Byb3BlcnR5X3VzZXJfZGVzY3JpcHRpb25fcmVsZWFzZT1hLk9jLG4uX2hlaWZfaXRlbV9nZXRfcHJvcGVydHlfdHJhbnNmb3JtX21pcnJvcj1hLlBjLG4uX2hlaWZfaXRlbV9nZXRfcHJvcGVydHlfdHJhbnNmb3JtX3JvdGF0aW9uX2Njdz1hLlFjLG4uX2hlaWZfaXRlbV9nZXRfcHJvcGVydHlfdHJhbnNmb3JtX2Nyb3BfYm9yZGVycz1hLlJjLG4uX2hlaWZfaXRlbV9hZGRfcmF3X3Byb3BlcnR5PWEuU2Msbi5faGVpZl9pdGVtX2dldF9wcm9wZXJ0eV9yYXdfc2l6ZT1hLlRjLG4uX2hlaWZfaXRlbV9nZXRfcHJvcGVydHlfcmF3X2RhdGE9YS5VYyxuLl9oZWlmX2l0ZW1fZ2V0X3Byb3BlcnR5X3V1aWRfdHlwZT1hLlZjLG4uX2hlaWZfaW1hZ2VfaGFuZGxlX2hhc19jYW1lcmFfaW50cmluc2ljX21hdHJpeD1hLldjLG4uX2hlaWZfaW1hZ2VfaGFuZGxlX2dldF9jYW1lcmFfaW50cmluc2ljX21hdHJpeD1hLlhjLG4uX2hlaWZfaW1hZ2VfaGFuZGxlX2hhc19jYW1lcmFfZXh0cmluc2ljX21hdHJpeD1hLlljLG4uX2hlaWZfaW1hZ2VfaGFuZGxlX2dldF9jYW1lcmFfZXh0cmluc2ljX21hdHJpeD1hLlpjLG4uX2hlaWZfY2FtZXJhX2V4dHJpbnNpY19tYXRyaXhfcmVsZWFzZT1hLl9jLG4uX2hlaWZfY2FtZXJhX2V4dHJpbnNpY19tYXRyaXhfZ2V0X3JvdGF0aW9uX21hdHJpeD1hLiRjLG4uX2hlaWZfaW1hZ2Vfc2V0X2JheWVyX3BhdHRlcm49YS5hZCxuLl9oZWlmX2ltYWdlX2FkZF9iYXllcl9jb21wb25lbnQ9YS5iZCxuLl9oZWlmX2ltYWdlX2dldF9iYXllcl9wYXR0ZXJuX3NpemU9YS5jZCxuLl9oZWlmX2ltYWdlX2dldF9iYXllcl9wYXR0ZXJuPWEuZGQsbi5faGVpZl9wb2xhcml6YXRpb25fYW5nbGVfbm9fZmlsdGVyPWEuZWQsbi5faGVpZl9wb2xhcml6YXRpb25fYW5nbGVfaXNfbm9fZmlsdGVyPWEuZmQsbi5faGVpZl9pbWFnZV9hZGRfcG9sYXJpemF0aW9uX3BhdHRlcm49YS5nZCxuLl9oZWlmX2ltYWdlX2dldF9udW1iZXJfb2ZfcG9sYXJpemF0aW9uX3BhdHRlcm5zPWEuaGQsbi5faGVpZl9pbWFnZV9nZXRfcG9sYXJpemF0aW9uX3BhdHRlcm5faW5mbz1hLmlkLG4uX2hlaWZfaW1hZ2VfZ2V0X3BvbGFyaXphdGlvbl9wYXR0ZXJuX2RhdGE9YS5qZCxuLl9oZWlmX2ltYWdlX2dldF9wb2xhcml6YXRpb25fcGF0dGVybl9pbmRleF9mb3JfY29tcG9uZW50PWEua2Qsbi5faGVpZl9pbWFnZV9hZGRfc2Vuc29yX2JhZF9waXhlbHNfbWFwPWEubGQsbi5faGVpZl9pbWFnZV9nZXRfbnVtYmVyX29mX3NlbnNvcl9iYWRfcGl4ZWxzX21hcHM9YS5tZCxuLl9oZWlmX2ltYWdlX2dldF9zZW5zb3JfYmFkX3BpeGVsc19tYXBfaW5mbz1hLm5kLG4uX2hlaWZfaW1hZ2VfZ2V0X3NlbnNvcl9iYWRfcGl4ZWxzX21hcF9kYXRhPWEub2Qsbi5faGVpZl9pbWFnZV9hZGRfc2Vuc29yX251Yz1hLnBkLG4uX2hlaWZfaW1hZ2VfZ2V0X251bWJlcl9vZl9zZW5zb3JfbnVjcz1hLnFkLG4uX2hlaWZfaW1hZ2VfZ2V0X3NlbnNvcl9udWNfaW5mbz1hLnJkLG4uX2hlaWZfaW1hZ2VfZ2V0X3NlbnNvcl9udWNfZGF0YT1hLnNkLG4uX2hlaWZfaW1hZ2Vfc2V0X2Nocm9tYV9sb2NhdGlvbj1hLnRkLG4uX2hlaWZfaW1hZ2VfaGFzX2Nocm9tYV9sb2NhdGlvbj1hLnVkLG4uX2hlaWZfaW1hZ2VfZ2V0X2Nocm9tYV9sb2NhdGlvbj1hLnZkLG4uX2hlaWZfaXRlbV9zZXRfaXRlbV9uYW1lPWEud2Qsbi5faGVpZl9pdGVtX2dldF9pdGVtX2RhdGE9YS54ZCxuLl9oZWlmX3JlbGVhc2VfaXRlbV9kYXRhPWEueWQsbi5faGVpZl9pdGVtX2dldF9wcm9wZXJ0eV9leHRlbmRlZF9sYW5ndWFnZT1hLnpkLG4uX2hlaWZfaXRlbV9zZXRfcHJvcGVydHlfZXh0ZW5kZWRfbGFuZ3VhZ2U9YS5BZCxuLl9oZWlmX2NvbnRleHRfZ2V0X2l0ZW1fcmVmZXJlbmNlcz1hLkJkLG4uX2hlaWZfcmVsZWFzZV9pdGVtX3JlZmVyZW5jZXM9YS5DZCxuLl9oZWlmX2NvbnRleHRfYWRkX2l0ZW1fcmVmZXJlbmNlPWEuRGQsbi5faGVpZl9jb250ZXh0X2FkZF9pdGVtX3JlZmVyZW5jZXM9YS5FZCxuLl9oZWlmX2NvbnRleHRfYWRkX2l0ZW09YS5GZCxuLl9oZWlmX2NvbnRleHRfYWRkX21pbWVfaXRlbT1hLkdkLG4uX2hlaWZfY29udGV4dF9hZGRfcHJlY29tcHJlc3NlZF9taW1lX2l0ZW09YS5IZCxuLl9oZWlmX2NvbnRleHRfYWRkX3VyaV9pdGVtPWEuSWQsbi5faGVpZl9jb250ZXh0X2hhc19zZXF1ZW5jZT1hLkpkLG4uX2hlaWZfY29udGV4dF9nZXRfc2VxdWVuY2VfdGltZXNjYWxlPWEuS2Qsbi5faGVpZl9jb250ZXh0X2dldF9zZXF1ZW5jZV9kdXJhdGlvbj1hLkxkLG4uX2hlaWZfdHJhY2tfcmVsZWFzZT1hLk1kLG4uX2hlaWZfY29udGV4dF9udW1iZXJfb2Zfc2VxdWVuY2VfdHJhY2tzPWEuTmQsbi5faGVpZl9jb250ZXh0X2dldF90cmFja19pZHM9YS5PZCxuLl9oZWlmX3RyYWNrX2dldF9pZD1hLlBkLG4uX2hlaWZfY29udGV4dF9nZXRfdHJhY2s9YS5RZCxuLl9oZWlmX3RyYWNrX2dldF90cmFja19oYW5kbGVyX3R5cGU9YS5SZCxuLl9oZWlmX3RyYWNrX2dldF9hdXhpbGlhcnlfaW5mb190eXBlPWEuU2Qsbi5faGVpZl90cmFja19nZXRfYXV4aWxpYXJ5X2luZm9fdHlwZV91cm49YS5UZCxuLl9oZWlmX3RyYWNrX2hhc19hbHBoYV9jaGFubmVsPWEuVWQsbi5faGVpZl90cmFja19nZXRfdGltZXNjYWxlPWEuVmQsbi5faGVpZl90cmFja19nZXRfbnVtYmVyX29mX3JlcGV0aXRpb25zPWEuV2Qsbi5faGVpZl90cmFja19nZXRfaW1hZ2VfcmVzb2x1dGlvbj1hLlhkLG4uX2hlaWZfdHJhY2tfZGVjb2RlX25leHRfaW1hZ2U9YS5ZZCxuLl9oZWlmX2RlY29kaW5nX29wdGlvbnNfYWxsb2M9YS5aZCxuLl9oZWlmX2RlY29kaW5nX29wdGlvbnNfY29weT1hLl9kLG4uX2hlaWZfZGVjb2Rpbmdfb3B0aW9uc19mcmVlPWEuJGQsbi5faGVpZl9pbWFnZV9nZXRfZHVyYXRpb249YS5hZSxuLl9oZWlmX3RyYWNrX2dldF9zYW1wbGVfZW50cnlfdHlwZV9vZl9maXJzdF9jbHVzdGVyPWEuYmUsbi5faGVpZl90cmFja19nZXRfdXJpbV9zYW1wbGVfZW50cnlfdXJpX29mX2ZpcnN0X2NsdXN0ZXI9YS5jZSxuLl9oZWlmX3RyYWNrX2dldF9uZXh0X3Jhd19zZXF1ZW5jZV9zYW1wbGU9YS5kZSxuLl9oZWlmX3Jhd19zZXF1ZW5jZV9zYW1wbGVfcmVsZWFzZT1hLmVlLG4uX2hlaWZfdGFpX3RpbWVzdGFtcF9wYWNrZXRfcmVsZWFzZT1hLmZlLG4uX2hlaWZfcmF3X3NlcXVlbmNlX3NhbXBsZV9nZXRfZGF0YT1hLmdlLG4uX2hlaWZfcmF3X3NlcXVlbmNlX3NhbXBsZV9nZXRfZGF0YV9zaXplPWEuaGUsbi5faGVpZl9yYXdfc2VxdWVuY2Vfc2FtcGxlX2dldF9kdXJhdGlvbj1hLmllLG4uX2hlaWZfY29udGV4dF9zZXRfc2VxdWVuY2VfdGltZXNjYWxlPWEuamUsbi5faGVpZl9jb250ZXh0X3NldF9udW1iZXJfb2Zfc2VxdWVuY2VfcmVwZXRpdGlvbnM9YS5rZSxuLl9oZWlmX3RyYWNrX29wdGlvbnNfYWxsb2M9YS5sZSxuLl9oZWlmX3RyYWNrX29wdGlvbnNfcmVsZWFzZT1hLm1lLG4uX2hlaWZfdGFpX2Nsb2NrX2luZm9fcmVsZWFzZT1hLm5lLG4uX2hlaWZfdHJhY2tfb3B0aW9uc19zZXRfdGltZXNjYWxlPWEub2Usbi5faGVpZl90cmFja19vcHRpb25zX3NldF9pbnRlcmxlYXZlZF9zYW1wbGVfYXV4X2luZm9zPWEucGUsbi5faGVpZl90cmFja19vcHRpb25zX2VuYWJsZV9zYW1wbGVfdGFpX3RpbWVzdGFtcHM9YS5xZSxuLl9oZWlmX3RhaV9jbG9ja19pbmZvX2FsbG9jPWEucmUsbi5faGVpZl90YWlfY2xvY2tfaW5mb19jb3B5PWEuc2Usbi5faGVpZl90cmFja19vcHRpb25zX2VuYWJsZV9zYW1wbGVfZ2ltaV9jb250ZW50X2lkcz1hLnRlLG4uX2hlaWZfdHJhY2tfb3B0aW9uc19zZXRfZ2ltaV90cmFja19pZD1hLnVlLG4uX2hlaWZfc2VxdWVuY2VfZW5jb2Rpbmdfb3B0aW9uc19hbGxvYz1hLnZlLG4uX2hlaWZfc2VxdWVuY2VfZW5jb2Rpbmdfb3B0aW9uc19jb3B5PWEud2Usbi5faGVpZl9zZXF1ZW5jZV9lbmNvZGluZ19vcHRpb25zX3JlbGVhc2U9YS54ZSxuLl9oZWlmX2NvbnRleHRfYWRkX3Zpc3VhbF9zZXF1ZW5jZV90cmFjaz1hLnllLG4uX2hlaWZfaW1hZ2Vfc2V0X2R1cmF0aW9uPWEuemUsbi5faGVpZl90cmFja19lbmNvZGVfZW5kX29mX3NlcXVlbmNlPWEuQWUsbi5faGVpZl90cmFja19lbmNvZGVfc2VxdWVuY2VfaW1hZ2U9YS5CZSxuLl9oZWlmX2NvbnRleHRfYWRkX3VyaV9tZXRhZGF0YV9zZXF1ZW5jZV90cmFjaz1hLkNlLG4uX2hlaWZfcmF3X3NlcXVlbmNlX3NhbXBsZV9hbGxvYz1hLkRlLG4uX2hlaWZfcmF3X3NlcXVlbmNlX3NhbXBsZV9zZXRfZGF0YT1hLkVlLG4uX2hlaWZfcmF3X3NlcXVlbmNlX3NhbXBsZV9zZXRfZHVyYXRpb249YS5GZSxuLl9oZWlmX3RyYWNrX2FkZF9yYXdfc2VxdWVuY2Vfc2FtcGxlPWEuR2Usbi5faGVpZl90cmFja19nZXRfbnVtYmVyX29mX3NhbXBsZV9hdXhfaW5mb3M9YS5IZSxuLl9oZWlmX3RyYWNrX2dldF9zYW1wbGVfYXV4X2luZm9fdHlwZXM9YS5JZSxuLl9oZWlmX3RyYWNrX2dldF9naW1pX3RyYWNrX2NvbnRlbnRfaWQ9YS5KZSxuLl9oZWlmX2ltYWdlX2dldF9naW1pX3NhbXBsZV9jb250ZW50X2lkPWEuS2Usbi5faGVpZl9yYXdfc2VxdWVuY2Vfc2FtcGxlX2dldF9naW1pX3NhbXBsZV9jb250ZW50X2lkPWEuTGUsbi5faGVpZl9pbWFnZV9zZXRfZ2ltaV9zYW1wbGVfY29udGVudF9pZD1hLk1lLG4uX2hlaWZfcmF3X3NlcXVlbmNlX3NhbXBsZV9zZXRfZ2ltaV9zYW1wbGVfY29udGVudF9pZD1hLk5lLG4uX2hlaWZfcmF3X3NlcXVlbmNlX3NhbXBsZV9oYXNfdGFpX3RpbWVzdGFtcD1hLk9lLG4uX2hlaWZfcmF3X3NlcXVlbmNlX3NhbXBsZV9nZXRfdGFpX3RpbWVzdGFtcD1hLlBlLG4uX2hlaWZfcmF3X3NlcXVlbmNlX3NhbXBsZV9zZXRfdGFpX3RpbWVzdGFtcD1hLlFlLG4uX2hlaWZfdGFpX3RpbWVzdGFtcF9wYWNrZXRfYWxsb2M9YS5SZSxuLl9oZWlmX3RyYWNrX2dldF90YWlfY2xvY2tfaW5mb19vZl9maXJzdF9jbHVzdGVyPWEuU2Usbi5faGVpZl90cmFja19hZGRfcmVmZXJlbmNlX3RvX3RyYWNrPWEuVGUsbi5faGVpZl90cmFja19nZXRfbnVtYmVyX29mX3RyYWNrX3JlZmVyZW5jZV90eXBlcz1hLlVlLG4uX2hlaWZfdHJhY2tfZ2V0X3RyYWNrX3JlZmVyZW5jZV90eXBlcz1hLlZlLG4uX2hlaWZfdHJhY2tfZ2V0X251bWJlcl9vZl90cmFja19yZWZlcmVuY2Vfb2ZfdHlwZT1hLldlLG4uX2hlaWZfdHJhY2tfZ2V0X3JlZmVyZW5jZXNfZnJvbV90cmFjaz1hLlhlLG4uX2hlaWZfdHJhY2tfZmluZF9yZWZlcnJpbmdfdHJhY2tzPWEuWWUsbi5faGVpZl9pdGVtX3NldF9wcm9wZXJ0eV90YWlfY2xvY2tfaW5mbz1hLlplLG4uX2hlaWZfaXRlbV9nZXRfcHJvcGVydHlfdGFpX2Nsb2NrX2luZm89YS5fZSxuLl9oZWlmX2l0ZW1fc2V0X3Byb3BlcnR5X3RhaV90aW1lc3RhbXA9YS4kZSxuLl9oZWlmX2l0ZW1fZ2V0X3Byb3BlcnR5X3RhaV90aW1lc3RhbXA9YS5hZixuLl9oZWlmX2ltYWdlX3NldF90YWlfdGltZXN0YW1wPWEuYmYsbi5faGVpZl9pbWFnZV9nZXRfdGFpX3RpbWVzdGFtcD1hLmNmLG4uX2hlaWZfcmVhZF9tYWluX2JyYW5kPWEuZGYsbi5faGVpZl9mb3VyY2NfdG9fYnJhbmQ9YS5lZixuLl9oZWlmX3JlYWRfbWlub3JfdmVyc2lvbl9icmFuZD1hLmZmLG4uX2hlaWZfYnJhbmRfdG9fZm91cmNjPWEuZ2Ysbi5faGVpZl9oYXNfY29tcGF0aWJsZV9icmFuZD1hLmhmLG4uX2hlaWZfZ2V0X2dsb2JhbF9zZWN1cml0eV9saW1pdHM9YS5qZixuLl9oZWlmX2xpc3RfY29tcGF0aWJsZV9icmFuZHM9YS5rZixuLl9oZWlmX2ZyZWVfbGlzdF9vZl9jb21wYXRpYmxlX2JyYW5kcz1hLmxmLG4uX2hlaWZfZ2V0X2ZpbGVfbWltZV90eXBlPWEubWYsbi5faGVpZl9oYXNfY29tcGF0aWJsZV9maWxldHlwZT1hLm5mLG4uX2hlaWZfY2hlY2tfanBlZ19maWxldHlwZT1hLm9mLG4uX2hlaWZfbWFpbl9icmFuZD1hLnBmLG4uX2hlaWZfbWV0YWRhdGFfY29tcHJlc3Npb25fbWV0aG9kX3N1cHBvcnRlZD1hLnFmLG4uX2hlaWZfaW1hZ2VfaGFuZGxlX2dldF9udW1iZXJfb2ZfbWV0YWRhdGFfYmxvY2tzPWEucmYsbi5faGVpZl9pbWFnZV9oYW5kbGVfZ2V0X2xpc3Rfb2ZfbWV0YWRhdGFfYmxvY2tfSURzPWEuc2Ysbi5faGVpZl9pbWFnZV9oYW5kbGVfZ2V0X21ldGFkYXRhX3R5cGU9YS50ZixuLl9oZWlmX2ltYWdlX2hhbmRsZV9nZXRfbWV0YWRhdGFfY29udGVudF90eXBlPWEudWYsbi5faGVpZl9pbWFnZV9oYW5kbGVfZ2V0X21ldGFkYXRhX3NpemU9YS52ZixuLl9oZWlmX2ltYWdlX2hhbmRsZV9nZXRfbWV0YWRhdGE9YS53ZixuLl9oZWlmX2ltYWdlX2hhbmRsZV9nZXRfbWV0YWRhdGFfaXRlbV91cmlfdHlwZT1hLnhmLG4uX2hlaWZfY29udGV4dF9hZGRfZXhpZl9tZXRhZGF0YT1hLnlmLG4uX2hlaWZfY29udGV4dF9hZGRfWE1QX21ldGFkYXRhPWEuemYsbi5faGVpZl9jb250ZXh0X2FkZF9YTVBfbWV0YWRhdGEyPWEuQWYsbi5faGVpZl9jb250ZXh0X2FkZF9nZW5lcmljX21ldGFkYXRhPWEuQmYsbi5faGVpZl9jb250ZXh0X2FkZF9nZW5lcmljX3VyaV9tZXRhZGF0YT1hLkNmLG4uX2hlaWZfaW1hZ2VfaGFuZGxlX2hhc19kZXB0aF9pbWFnZT1hLkRmLG4uX2hlaWZfaW1hZ2VfaGFuZGxlX2dldF9udW1iZXJfb2ZfZGVwdGhfaW1hZ2VzPWEuRWYsbi5faGVpZl9pbWFnZV9oYW5kbGVfZ2V0X2xpc3Rfb2ZfZGVwdGhfaW1hZ2VfSURzPWEuRmYsbi5faGVpZl9pbWFnZV9oYW5kbGVfZ2V0X2RlcHRoX2ltYWdlX2hhbmRsZT1hLkdmLG4uX2hlaWZfZGVwdGhfcmVwcmVzZW50YXRpb25faW5mb19mcmVlPWEuSGYsbi5faGVpZl9pbWFnZV9oYW5kbGVfZ2V0X2RlcHRoX2ltYWdlX3JlcHJlc2VudGF0aW9uX2luZm89YS5JZixuLl9oZWlmX2ltYWdlX2hhbmRsZV9nZXRfbnVtYmVyX29mX3RodW1ibmFpbHM9YS5KZixuLl9oZWlmX2ltYWdlX2hhbmRsZV9nZXRfbGlzdF9vZl90aHVtYm5haWxfSURzPWEuS2Ysbi5faGVpZl9pbWFnZV9oYW5kbGVfZ2V0X3RodW1ibmFpbD1hLkxmLG4uX2hlaWZfY29udGV4dF9lbmNvZGVfdGh1bWJuYWlsPWEuTWYsbi5faGVpZl9lbmNvZGluZ19vcHRpb25zX2FsbG9jPWEuTmYsbi5faGVpZl9lbmNvZGluZ19vcHRpb25zX2NvcHk9YS5PZixuLl9oZWlmX2VuY29kaW5nX29wdGlvbnNfZnJlZT1hLlBmLG4uX2hlaWZfY29udGV4dF9hc3NpZ25fdGh1bWJuYWlsPWEuUWYsbi5faGVpZl9pbWFnZV9oYW5kbGVfZ2V0X251bWJlcl9vZl9hdXhpbGlhcnlfaW1hZ2VzPWEuUmYsbi5faGVpZl9pbWFnZV9oYW5kbGVfZ2V0X2xpc3Rfb2ZfYXV4aWxpYXJ5X2ltYWdlX0lEcz1hLlNmLG4uX2hlaWZfaW1hZ2VfaGFuZGxlX2dldF9hdXhpbGlhcnlfdHlwZT1hLlRmLG4uX2hlaWZfaW1hZ2VfaGFuZGxlX3JlbGVhc2VfYXV4aWxpYXJ5X3R5cGU9YS5VZixuLl9oZWlmX2ltYWdlX2hhbmRsZV9nZXRfYXV4aWxpYXJ5X2ltYWdlX2hhbmRsZT1hLlZmLG4uX2hlaWZfaW1hZ2VfaGFuZGxlX2ZyZWVfYXV4aWxpYXJ5X3R5cGVzPWEuV2Ysbi5faGVpZl9jb250ZXh0X2dldF9lbnRpdHlfZ3JvdXBzPWEuWGYsbi5faGVpZl9lbnRpdHlfZ3JvdXBzX3JlbGVhc2U9YS5ZZixuLl9oZWlmX2dldF9kaXNhYmxlZF9zZWN1cml0eV9saW1pdHM9YS5aZixuLl9oZWlmX2NvbnRleHRfZ2V0X3NlY3VyaXR5X2xpbWl0cz1hLl9mLG4uX2hlaWZfY29udGV4dF9zZXRfc2VjdXJpdHlfbGltaXRzPWEuJGYsbi5faGVpZl9jb250ZXh0X3NldF9tYXhpbXVtX2ltYWdlX3NpemVfbGltaXQ9YS5hZyxuLl9oZWlmX2hhdmVfZW5jb2Rlcl9mb3JfZm9ybWF0PWEuYmcsbi5faGVpZl9nZXRfZW5jb2Rlcl9kZXNjcmlwdG9ycz1hLmNnLG4uX2hlaWZfZW5jb2Rlcl9kZXNjcmlwdG9yX2dldF9uYW1lPWEuZGcsbi5faGVpZl9lbmNvZGVyX2Rlc2NyaXB0b3JfZ2V0X2lkX25hbWU9YS5lZyxuLl9oZWlmX2VuY29kZXJfZGVzY3JpcHRvcl9nZXRfY29tcHJlc3Npb25fZm9ybWF0PWEuZmcsbi5faGVpZl9lbmNvZGVyX2Rlc2NyaXB0b3Jfc3VwcG9ydHNfbG9zc3lfY29tcHJlc3Npb249YS5nZyxuLl9oZWlmX2VuY29kZXJfZGVzY3JpcHRvcl9zdXBwb3J0c19sb3NzbGVzc19jb21wcmVzc2lvbj1hLmhnLG4uX2hlaWZfY29udGV4dF9nZXRfZW5jb2Rlcj1hLmlnLG4uX2hlaWZfY29udGV4dF9nZXRfZW5jb2Rlcl9mb3JfZm9ybWF0PWEuamcsbi5faGVpZl9lbmNvZGVyX3JlbGVhc2U9YS5rZyxuLl9oZWlmX2VuY29kZXJfZ2V0X25hbWU9YS5sZyxuLl9oZWlmX2VuY29kZXJfc2V0X2xvc3N5X3F1YWxpdHk9YS5tZyxuLl9oZWlmX2VuY29kZXJfc2V0X2xvc3NsZXNzPWEubmcsbi5faGVpZl9lbmNvZGVyX3NldF9sb2dnaW5nX2xldmVsPWEub2csbi5faGVpZl9lbmNvZGVyX2xpc3RfcGFyYW1ldGVycz1hLnBnLG4uX2hlaWZfZW5jb2Rlcl9wYXJhbWV0ZXJfZ2V0X25hbWU9YS5xZyxuLl9oZWlmX2VuY29kZXJfcGFyYW1ldGVyX2dldF90eXBlPWEucmcsbi5faGVpZl9lbmNvZGVyX3BhcmFtZXRlcl9nZXRfdmFsaWRfaW50ZWdlcl9yYW5nZT1hLnNnLG4uX2hlaWZfZW5jb2Rlcl9wYXJhbWV0ZXJfZ2V0X3ZhbGlkX2ludGVnZXJfdmFsdWVzPWEudGcsbi5faGVpZl9lbmNvZGVyX3BhcmFtZXRlcl9nZXRfdmFsaWRfc3RyaW5nX3ZhbHVlcz1hLnVnLG4uX2hlaWZfZW5jb2Rlcl9zZXRfcGFyYW1ldGVyX2ludGVnZXI9YS52ZyxuLl9oZWlmX2VuY29kZXJfZ2V0X3BhcmFtZXRlcl9pbnRlZ2VyPWEud2csbi5faGVpZl9lbmNvZGVyX3BhcmFtZXRlcl9pbnRlZ2VyX3ZhbGlkX3JhbmdlPWEueGcsbi5faGVpZl9lbmNvZGVyX3NldF9wYXJhbWV0ZXJfYm9vbGVhbj1hLnlnLG4uX2hlaWZfZW5jb2Rlcl9nZXRfcGFyYW1ldGVyX2Jvb2xlYW49YS56ZyxuLl9oZWlmX2VuY29kZXJfc2V0X3BhcmFtZXRlcl9zdHJpbmc9YS5BZyxuLl9oZWlmX2VuY29kZXJfZ2V0X3BhcmFtZXRlcl9zdHJpbmc9YS5CZyxuLl9oZWlmX2VuY29kZXJfcGFyYW1ldGVyX3N0cmluZ192YWxpZF92YWx1ZXM9YS5DZyxuLl9oZWlmX2VuY29kZXJfcGFyYW1ldGVyX2ludGVnZXJfdmFsaWRfdmFsdWVzPWEuRGcsbi5faGVpZl9lbmNvZGVyX3NldF9wYXJhbWV0ZXI9YS5FZyxuLl9oZWlmX2VuY29kZXJfZ2V0X3BhcmFtZXRlcj1hLkZnLG4uX2hlaWZfZW5jb2Rlcl9oYXNfZGVmYXVsdD1hLkdnLG4uX2hlaWZfb3JpZW50YXRpb25fY29uY2F0PWEuSGcsbi5faGVpZl9jb250ZXh0X2VuY29kZV9pbWFnZT1hLklnLG4uX2hlaWZfY29udGV4dF9hZGRfb3ZlcmxheV9pbWFnZT1hLkpnLG4uX2hlaWZfY29udGV4dF9zZXRfcHJpbWFyeV9pbWFnZT1hLktnLG4uX2hlaWZfY29udGV4dF9zZXRfbWFqb3JfYnJhbmQ9YS5MZyxuLl9oZWlmX2NvbnRleHRfYWRkX2NvbXBhdGlibGVfYnJhbmQ9YS5NZyxuLl9oZWlmX2NvbnRleHRfc2V0X3VuaWY9YS5OZyxuLl9oZWlmX2VuY29kZXJfZGVzY3JpcHRvcl9zdXBwb3J0ZXNfbG9zc3lfY29tcHJlc3Npb249YS5PZyxuLl9oZWlmX2VuY29kZXJfZGVzY3JpcHRvcl9zdXBwb3J0ZXNfbG9zc2xlc3NfY29tcHJlc3Npb249YS5QZyxuLl9oZWlmX2NvbnRleHRfZ2V0X2VuY29kZXJfZGVzY3JpcHRvcnM9YS5RZyxuLl9oZWlmX2NvbnRleHRfc2V0X21heF9kZWNvZGluZ190aHJlYWRzPWEuUmcsbi5faGVpZl9jb250ZXh0X2dldF9tYXhfZGVjb2RpbmdfdGhyZWFkcz1hLlNnLG4uX2hlaWZfaGF2ZV9kZWNvZGVyX2Zvcl9mb3JtYXQ9YS5UZyxuLl9oZWlmX2dldF9kZWNvZGVyX2Rlc2NyaXB0b3JzPWEuVWcsbi5faGVpZl9kZWNvZGVyX2Rlc2NyaXB0b3JfZ2V0X25hbWU9YS5WZyxuLl9oZWlmX2RlY29kZXJfZGVzY3JpcHRvcl9nZXRfaWRfbmFtZT1hLldnLG4uX2hlaWZfaW1hZ2VfaGFuZGxlX2dldF9pdGVtX2lkPWEuWGcsbi5faGVpZl9pbWFnZV9oYW5kbGVfZ2V0X2x1bWFfYml0c19wZXJfcGl4ZWw9YS5ZZyxuLl9oZWlmX2ltYWdlX2hhbmRsZV9nZXRfY2hyb21hX2JpdHNfcGVyX3BpeGVsPWEuWmcsbi5faGVpZl9pbWFnZV9oYW5kbGVfZ2V0X3ByZWZlcnJlZF9kZWNvZGluZ19jb2xvcnNwYWNlPWEuX2csbi5faGVpZl9pbWFnZV9oYW5kbGVfZ2V0X2lzcGVfd2lkdGg9YS4kZyxuLl9oZWlmX2ltYWdlX2hhbmRsZV9nZXRfaXNwZV9oZWlnaHQ9YS5haCxuLl9oZWlmX2ltYWdlX2hhbmRsZV9nZXRfcGl4ZWxfYXNwZWN0X3JhdGlvPWEuYmgsbi5faGVpZl9pbWFnZV9oYW5kbGVfZ2V0X2NvbnRleHQ9YS5jaCxuLl9oZWlmX2ltYWdlX2hhbmRsZV9nZXRfZ2ltaV9jb250ZW50X2lkPWEuZGgsbi5faGVpZl9pbWFnZV9oYW5kbGVfc2V0X2dpbWlfY29udGVudF9pZD1hLmVoLG4uX2hlaWZfaW1hZ2VfaGFuZGxlX2dldF9udW1iZXJfb2ZfY21wZF9jb21wb25lbnRzPWEuZmgsbi5faGVpZl9pbWFnZV9oYW5kbGVfZ2V0X2NtcGRfY29tcG9uZW50X3R5cGU9YS5naCxuLl9oZWlmX2ltYWdlX2hhbmRsZV9nZXRfY21wZF9jb21wb25lbnRfdHlwZV91cmk9YS5oaCxuLl9oZWlmX2ltYWdlX2hhbmRsZV9oYXNfZ2ltaV9jb21wb25lbnRfY29udGVudF9pZHM9YS5paCxuLl9oZWlmX2ltYWdlX2hhbmRsZV9nZXRfZ2ltaV9jb21wb25lbnRfY29udGVudF9pZD1hLmpoLG4uX2hlaWZfaW1hZ2VfaGFuZGxlX3NldF9naW1pX2NvbXBvbmVudF9jb250ZW50X2lkPWEua2gsbi5faGVpZl9jb250ZXh0X3JlYWRfZnJvbV9maWxlPWEubGgsbi5faGVpZl9jb250ZXh0X3JlYWRfZnJvbV9tZW1vcnlfd2l0aG91dF9jb3B5PWEubWgsbi5faGVpZl9jb250ZXh0X3JlYWRfZnJvbV9yZWFkZXI9YS5uaCxuLl9oZWlmX2NvbnRleHRfaXNfdG9wX2xldmVsX2ltYWdlX0lEPWEub2gsbi5faGVpZl9jb250ZXh0X2dldF9wcmltYXJ5X2ltYWdlX0lEPWEucGgsbi5faGVpZl9jb250ZXh0X2RlYnVnX2R1bXBfYm94ZXNfdG9fZmlsZT1hLnFoLG4uX2hlaWZfY29udGV4dF9zZXRfd3JpdGVfbWluaV9mb3JtYXQ9YS5yaCxuLl9oZWlmX2NvbnRleHRfd3JpdGVfdG9fZmlsZT1hLnNoLG4uX2hlaWZfY29udGV4dF93cml0ZT1hLnRoLG4uX2hlaWZfaW1hZ2VfaGFuZGxlX2dldF9pbWFnZV90aWxpbmc9YS51aCxuLl9oZWlmX2ltYWdlX2hhbmRsZV9nZXRfZ3JpZF9pbWFnZV90aWxlX2lkPWEudmgsbi5faGVpZl9pbWFnZV9oYW5kbGVfZGVjb2RlX2ltYWdlX3RpbGU9YS53aCxuLl9oZWlmX2NvbnRleHRfZW5jb2RlX2dyaWQ9YS54aCxuLl9oZWlmX2NvbnRleHRfYWRkX2dyaWRfaW1hZ2U9YS55aCxuLl9oZWlmX2NvbnRleHRfYWRkX2ltYWdlX3RpbGU9YS56aCxuLl9oZWlmX2ltYWdlX2dldF9udW1iZXJfb2ZfdXNlZF9jb21wb25lbnRzPWEuQWgsbi5faGVpZl9pbWFnZV9nZXRfdXNlZF9jb21wb25lbnRfaWRzPWEuQmgsbi5faGVpZl9pbWFnZV9nZXRfY29tcG9uZW50X2NoYW5uZWw9YS5DaCxuLl9oZWlmX2ltYWdlX2dldF9jb21wb25lbnRfd2lkdGg9YS5EaCxuLl9oZWlmX2ltYWdlX2dldF9jb21wb25lbnRfaGVpZ2h0PWEuRWgsbi5faGVpZl9pbWFnZV9nZXRfY29tcG9uZW50X2JpdHNfcGVyX3BpeGVsPWEuRmgsbi5faGVpZl9pbWFnZV9nZXRfY29tcG9uZW50X3R5cGU9YS5HaCxuLl9oZWlmX2ltYWdlX2dldF9jb21wb25lbnRfZGF0YXR5cGU9YS5IaCxuLl9oZWlmX2ltYWdlX2hhbmRsZV9nZXRfbnVtYmVyX29mX2NvbXBvbmVudHM9YS5JaCxuLl9oZWlmX2ltYWdlX2hhbmRsZV9nZXRfdXNlZF9jb21wb25lbnRfaWRzPWEuSmgsbi5faGVpZl9pbWFnZV9oYW5kbGVfZ2V0X2NvbXBvbmVudF90eXBlPWEuS2gsbi5faGVpZl9pbWFnZV9oYW5kbGVfZ2V0X2NvbXBvbmVudF9iaXRzX3Blcl9waXhlbD1hLkxoLG4uX2hlaWZfaW1hZ2VfaGFuZGxlX2dldF9jb21wb25lbnRfZGF0YXR5cGU9YS5NaCxuLl9oZWlmX2ltYWdlX2FkZF9jb21wb25lbnQ9YS5OaCxuLl9oZWlmX2ltYWdlX2dldF9jb21wb25lbnRfcmVhZG9ubHk9YS5PaCxuLl9oZWlmX2ltYWdlX2dldF9jb21wb25lbnQ9YS5QaCxuLl9oZWlmX2ltYWdlX2dldF9jb21wb25lbnRfdWludDE2X3JlYWRvbmx5PWEuUWgsbi5faGVpZl9pbWFnZV9nZXRfY29tcG9uZW50X3VpbnQxNj1hLlJoLG4uX2hlaWZfaW1hZ2VfZ2V0X2NvbXBvbmVudF91aW50MzJfcmVhZG9ubHk9YS5TaCxuLl9oZWlmX2ltYWdlX2dldF9jb21wb25lbnRfdWludDMyPWEuVGgsbi5faGVpZl9pbWFnZV9nZXRfY29tcG9uZW50X3VpbnQ2NF9yZWFkb25seT1hLlVoLG4uX2hlaWZfaW1hZ2VfZ2V0X2NvbXBvbmVudF91aW50NjQ9YS5WaCxuLl9oZWlmX2ltYWdlX2dldF9jb21wb25lbnRfaW50OF9yZWFkb25seT1hLldoLG4uX2hlaWZfaW1hZ2VfZ2V0X2NvbXBvbmVudF9pbnQ4PWEuWGgsbi5faGVpZl9pbWFnZV9nZXRfY29tcG9uZW50X2ludDE2X3JlYWRvbmx5PWEuWWgsbi5faGVpZl9pbWFnZV9nZXRfY29tcG9uZW50X2ludDE2PWEuWmgsbi5faGVpZl9pbWFnZV9nZXRfY29tcG9uZW50X2ludDMyX3JlYWRvbmx5PWEuX2gsbi5faGVpZl9pbWFnZV9nZXRfY29tcG9uZW50X2ludDMyPWEuJGgsbi5faGVpZl9pbWFnZV9nZXRfY29tcG9uZW50X2ludDY0X3JlYWRvbmx5PWEuYWksbi5faGVpZl9pbWFnZV9nZXRfY29tcG9uZW50X2ludDY0PWEuYmksbi5faGVpZl9pbWFnZV9nZXRfY29tcG9uZW50X2Zsb2F0MzJfcmVhZG9ubHk9YS5jaSxuLl9oZWlmX2ltYWdlX2dldF9jb21wb25lbnRfZmxvYXQzMj1hLmRpLG4uX2hlaWZfaW1hZ2VfZ2V0X2NvbXBvbmVudF9mbG9hdDY0X3JlYWRvbmx5PWEuZWksbi5faGVpZl9pbWFnZV9nZXRfY29tcG9uZW50X2Zsb2F0NjQ9YS5maSxuLl9oZWlmX2ltYWdlX2dldF9jb21wb25lbnRfY29tcGxleDMyX3JlYWRvbmx5PWEuZ2ksbi5faGVpZl9pbWFnZV9nZXRfY29tcG9uZW50X2NvbXBsZXgzMj1hLmhpLG4uX2hlaWZfaW1hZ2VfZ2V0X2NvbXBvbmVudF9jb21wbGV4NjRfcmVhZG9ubHk9YS5paSxuLl9oZWlmX2ltYWdlX2dldF9jb21wb25lbnRfY29tcGxleDY0PWEuamksbi5faGVpZl9pbWFnZV9zZXRfZ2ltaV9jb21wb25lbnRfY29udGVudF9pZD1hLmtpLG4uX2hlaWZfdW5jaV9pbWFnZV9wYXJhbWV0ZXJzX2FsbG9jPWEubGksbi5faGVpZl91bmNpX2ltYWdlX3BhcmFtZXRlcnNfY29weT1hLm1pLG4uX2hlaWZfdW5jaV9pbWFnZV9wYXJhbWV0ZXJzX3JlbGVhc2U9YS5uaSxuLl9oZWlmX2NvbnRleHRfYWRkX2VtcHR5X3VuY2lfaW1hZ2U9YS5vaSxuLl9oZWlmX2ltYWdlX2hhbmRsZV9hZGRfdGV4dF9pdGVtPWEucGksbi5faGVpZl90ZXh0X2l0ZW1fcmVsZWFzZT1hLnFpLG4uX2hlaWZfaW1hZ2VfaGFuZGxlX2dldF9udW1iZXJfb2ZfdGV4dF9pdGVtcz1hLnJpLG4uX2hlaWZfaW1hZ2VfaGFuZGxlX2dldF9saXN0X29mX3RleHRfaXRlbV9pZHM9YS5zaSxuLl9oZWlmX2NvbnRleHRfZ2V0X3RleHRfaXRlbT1hLnRpLG4uX2hlaWZfdGV4dF9pdGVtX2dldF9pZD1hLnVpLG4uX2hlaWZfdGV4dF9pdGVtX2dldF9jb250ZW50PWEudmksbi5faGVpZl90ZXh0X2l0ZW1fZ2V0X3Byb3BlcnR5X2V4dGVuZGVkX2xhbmd1YWdlPWEud2ksbi5faGVpZl90ZXh0X2l0ZW1fc2V0X2V4dGVuZGVkX2xhbmd1YWdlPWEueGksbi5faGVpZl9pbWFnZV9oYW5kbGVfZ2V0X29tYWZfaW1hZ2VfcHJvamVjdGlvbj1hLnlpLG4uX2hlaWZfaW1hZ2VfaGFuZGxlX3NldF9vbWFmX2ltYWdlX3Byb2plY3Rpb249YS56aSxuLl9oZWlmX2ltYWdlX2dldF9vbWFmX2ltYWdlX3Byb2plY3Rpb249YS5BaSxuLl9oZWlmX2ltYWdlX3NldF9vbWFmX2ltYWdlX3Byb2plY3Rpb249YS5CaSxuLl9kZTI2NV9uZXdfZGVjb2Rlcj1hLkNpLG4uX2RlMjY1X3NldF9wYXJhbWV0ZXJfYm9vbD1hLkRpLG4uX2RlMjY1X2dldF92ZXJzaW9uPWEuRWksbi5fZGUyNjVfaW5pdD1hLkZpLG4uX2RlMjY1X2ZyZWU9YS5HaSxuLl9kZTI2NV9mcmVlX2RlY29kZXI9YS5IaSxuLl9kZTI2NV9wdXNoX05BTD1hLklpLG4uX2RlMjY1X2ZsdXNoX2RhdGE9YS5KaSxuLl9kZTI2NV9kZWNvZGU9YS5LaSxuLl9kZTI2NV9nZXRfbmV4dF9waWN0dXJlPWEuTGksbi5fZGUyNjVfZ2V0X2ltYWdlX3VzZXJfZGF0YT1hLk1pLG4uX2RlMjY1X2dldF9jaHJvbWFfZm9ybWF0PWEuTmksbi5fZGUyNjVfZ2V0X2ltYWdlX3dpZHRoPWEuT2ksbi5fZGUyNjVfZ2V0X2ltYWdlX2hlaWdodD1hLlBpLG4uX2RlMjY1X2dldF9iaXRzX3Blcl9waXhlbD1hLlFpLG4uX2RlMjY1X2dldF9pbWFnZV9wbGFuZT1hLlJpLG4uX2RlMjY1X2dldF9pbWFnZV9jb2xvdXJfcHJpbWFyaWVzPWEuU2ksbi5fZGUyNjVfZ2V0X2ltYWdlX3RyYW5zZmVyX2NoYXJhY3RlcmlzdGljcz1hLlRpLG4uX2RlMjY1X2dldF9pbWFnZV9tYXRyaXhfY29lZmZpY2llbnRzPWEuVWksbi5fZGUyNjVfZ2V0X2ltYWdlX2Z1bGxfcmFuZ2VfZmxhZz1hLlZpLG4uX2RlMjY1X3JlbGVhc2VfbmV4dF9waWN0dXJlPWEuV2k7dmFyIGVhPWEuWGksdGE9YS5ZaTtuLmR5bkNhbGxfamk9YS5aaSxuLmR5bkNhbGxfaWlqPWEuX2ksbi5keW5DYWxsX2ppamo9YS4kaSxuLmR5bkNhbGxfdmlqaj1hLmFqLG4uZHluQ2FsbF9qaWppPWEuYmosbi5keW5DYWxsX3ZpaWppaT1hLmNqLG4uZHluQ2FsbF9paWlpaWo9YS5kaixuLmR5bkNhbGxfaWlpaWlqaj1hLmVqLG4uZHluQ2FsbF9paWlpaWlqaj1hLmZqLG4uX2hlaWZfZXJyb3JfbnVsbF9wb2ludGVyX2FyZ3VtZW50PTEwNTk5MixuLl9oZWlmX2Vycm9yX291dF9vZl9tZW1vcnk9MTA2MDA0LG4uX2hlaWZfZXJyb3JfaW50ZXJuYWxfZXhjZXB0aW9uPTEwNjAxNixuLl9oZWlmX2Vycm9yX3N1Y2Nlc3M9MTA4MjgwLG4uX2hlaWZfZXJyb3Jfb2s9MTA4NzIwLG4uX2hlaWZfZXJyb3JfaW52YWxpZF9wYXJhbWV0ZXJfdmFsdWU9MTA4NzQ0LG4uX2hlaWZfZXJyb3JfdW5zdXBwb3J0ZWRfcGFyYW1ldGVyPTEwODczMjt2YXIgcHQ7VGU9ZnVuY3Rpb24gZSgpe3B0fHxwcigpLHB0fHwoVGU9ZSl9O2Z1bmN0aW9uIHByKCl7aWYoX2U+MHx8KHZlKCksX2U+MCkpcmV0dXJuO2Z1bmN0aW9uIGUoKXtwdHx8KHB0PSEwLG4uY2FsbGVkUnVuPSEwLCF6ZSYmKG50KCksZWUobiksbi5vblJ1bnRpbWVJbml0aWFsaXplZCYmbi5vblJ1bnRpbWVJbml0aWFsaXplZCgpLENlKCkpKX1uLnNldFN0YXR1cz8obi5zZXRTdGF0dXMoIlJ1bm5pbmcuLi4iKSxzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7c2V0VGltZW91dChmdW5jdGlvbigpe24uc2V0U3RhdHVzKCIiKX0sMSksZSgpfSwxKSk6ZSgpfWlmKG4ucHJlSW5pdClmb3IodHlwZW9mIG4ucHJlSW5pdD09ImZ1bmN0aW9uIiYmKG4ucHJlSW5pdD1bbi5wcmVJbml0XSk7bi5wcmVJbml0Lmxlbmd0aD4wOyluLnByZUluaXQucG9wKCkoKTtwcigpO2Z1bmN0aW9uIGdyKGUpe2Zvcih2YXIgdD1uZXcgQXJyYXlCdWZmZXIoZS5sZW5ndGgpLHI9bmV3IFVpbnQ4QXJyYXkodCksaT0wLF89ZS5sZW5ndGg7aTxfO2krKylyW2ldPWUuY2hhckNvZGVBdChpKTtyZXR1cm4gdH12YXIgZmU9ZnVuY3Rpb24oZSl7dGhpcy5oYW5kbGU9ZSx0aGlzLmltZz1udWxsfTtmZS5wcm90b3R5cGUuZnJlZT1mdW5jdGlvbigpe3RoaXMuaGFuZGxlJiYobi5oZWlmX2ltYWdlX2hhbmRsZV9yZWxlYXNlKHRoaXMuaGFuZGxlKSx0aGlzLmhhbmRsZT1udWxsKX0sZmUucHJvdG90eXBlLl9lbnN1cmVJbWFnZT1mdW5jdGlvbigpe2lmKCF0aGlzLmltZyl7dmFyIGU9bi5oZWlmX2pzX2RlY29kZV9pbWFnZSh0aGlzLmhhbmRsZSxuLmhlaWZfY29sb3JzcGFjZS5oZWlmX2NvbG9yc3BhY2VfWUNiQ3Isbi5oZWlmX2Nocm9tYS5oZWlmX2Nocm9tYV80MjApO2lmKCFlfHxlLmNvZGUpe2NvbnNvbGUubG9nKCJEZWNvZGluZyBpbWFnZSBmYWlsZWQiLHRoaXMuaGFuZGxlLGUpO3JldHVybn10aGlzLmRhdGE9bmV3IFVpbnQ4QXJyYXkoZ3IoZS5kYXRhKSksZGVsZXRlIGUuZGF0YSx0aGlzLmltZz1lLGUuYWxwaGEhPT12b2lkIDAmJih0aGlzLmFscGhhPW5ldyBVaW50OEFycmF5KGdyKGUuYWxwaGEpKSxkZWxldGUgZS5hbHBoYSl9fSxmZS5wcm90b3R5cGUuZ2V0X3dpZHRoPWZ1bmN0aW9uKCl7cmV0dXJuIG4uaGVpZl9pbWFnZV9oYW5kbGVfZ2V0X3dpZHRoKHRoaXMuaGFuZGxlKX0sZmUucHJvdG90eXBlLmdldF9oZWlnaHQ9ZnVuY3Rpb24oKXtyZXR1cm4gbi5oZWlmX2ltYWdlX2hhbmRsZV9nZXRfaGVpZ2h0KHRoaXMuaGFuZGxlKX0sZmUucHJvdG90eXBlLmlzX3ByaW1hcnk9ZnVuY3Rpb24oKXtyZXR1cm4hIW4uaGVpZl9pbWFnZV9oYW5kbGVfaXNfcHJpbWFyeV9pbWFnZSh0aGlzLmhhbmRsZSl9LGZlLnByb3RvdHlwZS5oYXNfYWxwaGFfY2hhbm5lbD1mdW5jdGlvbigpe3JldHVybiEhbi5oZWlmX2ltYWdlX2hhbmRsZV9oYXNfYWxwaGFfY2hhbm5lbCh0aGlzLmhhbmRsZSl9LGZlLnByb3RvdHlwZS5pc19wcmVtdWx0aXBsaWVkX2FscGhhPWZ1bmN0aW9uKCl7cmV0dXJuISFuLmhlaWZfaW1hZ2VfaGFuZGxlX2lzX3ByZW11bHRpcGxpZWRfYWxwaGEodGhpcy5oYW5kbGUpfSxmZS5wcm90b3R5cGUuZGlzcGxheT1mdW5jdGlvbihlLHQpe3RoaXMuZ2V0X3dpZHRoKCksdGhpcy5nZXRfaGVpZ2h0KCksc2V0VGltZW91dCgoYXN5bmMgZnVuY3Rpb24oKXtpZighdGhpcy5pbWcpe3ZhciByPWF3YWl0IG4uaGVpZl9qc19kZWNvZGVfaW1hZ2UyKHRoaXMuaGFuZGxlLG4uaGVpZl9jb2xvcnNwYWNlLmhlaWZfY29sb3JzcGFjZV9SR0Isbi5oZWlmX2Nocm9tYS5oZWlmX2Nocm9tYV9pbnRlcmxlYXZlZF9SR0JBKTtpZighcnx8ci5jb2RlKXtjb25zb2xlLmxvZygiRGVjb2RpbmcgaW1hZ2UgZmFpbGVkIix0aGlzLmhhbmRsZSxyKSx0KG51bGwpO3JldHVybn1mb3IobGV0IGkgb2Ygci5jaGFubmVscylpZihpLmlkPT1uLmhlaWZfY2hhbm5lbC5oZWlmX2NoYW5uZWxfaW50ZXJsZWF2ZWQpaWYoaS5zdHJpZGU9PWkud2lkdGgqNCllLmRhdGEuc2V0KGkuZGF0YSk7ZWxzZSBmb3IobGV0IF89MDtfPGkuaGVpZ2h0O18rKyl7bGV0IHM9aS5kYXRhLnNsaWNlKF8qaS5zdHJpZGUsXyppLnN0cmlkZStpLndpZHRoKjQpLGw9XyppLndpZHRoKjQ7ZS5kYXRhLnNldChzLGwpfW4uaGVpZl9pbWFnZV9yZWxlYXNlKHIuaW1hZ2UpfXQoZSl9KS5iaW5kKHRoaXMpLDApfTt2YXIgdnI9ZnVuY3Rpb24oKXt0aGlzLmRlY29kZXI9bnVsbH07dnIucHJvdG90eXBlLmRlY29kZT1mdW5jdGlvbihlKXtpZih0aGlzLmRlY29kZXImJm4uaGVpZl9jb250ZXh0X2ZyZWUodGhpcy5kZWNvZGVyKSx0aGlzLmRlY29kZXI9bi5oZWlmX2NvbnRleHRfYWxsb2MoKSwhdGhpcy5kZWNvZGVyKXJldHVybiBjb25zb2xlLmxvZygiQ291bGQgbm90IGNyZWF0ZSBIRUlGIGNvbnRleHQiKSxbXTt2YXIgdD1uLmhlaWZfY29udGV4dF9yZWFkX2Zyb21fbWVtb3J5KHRoaXMuZGVjb2RlcixlKTtpZih0LmNvZGUhPT1uLmhlaWZfZXJyb3JfY29kZS5oZWlmX2Vycm9yX09rKXJldHVybiBjb25zb2xlLmxvZygiQ291bGQgbm90IHBhcnNlIEhFSUYgZmlsZSIsdC5tZXNzYWdlKSxbXTt2YXIgcj1uLmhlaWZfanNfY29udGV4dF9nZXRfbGlzdF9vZl90b3BfbGV2ZWxfaW1hZ2VfSURzKHRoaXMuZGVjb2Rlcik7aWYoIXJ8fHIuY29kZSlyZXR1cm4gY29uc29sZS5sb2coIkVycm9yIGxvYWRpbmcgaW1hZ2UgaWRzIixyKSxbXTtpZighci5sZW5ndGgpcmV0dXJuIGNvbnNvbGUubG9nKCJObyBpbWFnZXMgZm91bmQiKSxbXTtmb3IodmFyIGk9W10sXz0wO188ci5sZW5ndGg7XysrKXt2YXIgcz1uLmhlaWZfanNfY29udGV4dF9nZXRfaW1hZ2VfaGFuZGxlKHRoaXMuZGVjb2RlcixyW19dKTtpZighc3x8cy5jb2RlKXtjb25zb2xlLmxvZygiQ291bGQgbm90IGdldCBpbWFnZSBkYXRhIGZvciBpZCIscltfXSxzKTtjb250aW51ZX1pLnB1c2gobmV3IGZlKHMpKX1yZXR1cm4gaX07dmFyIHJhPWZ1bmN0aW9uKGUpe3JldHVybiBlLmNoYXJDb2RlQXQoMCk8PDI0fGUuY2hhckNvZGVBdCgxKTw8MTZ8ZS5jaGFyQ29kZUF0KDIpPDw4fGUuY2hhckNvZGVBdCgzKX07bi5IZWlmSW1hZ2U9ZmUsbi5IZWlmRGVjb2Rlcj12cixuLmZvdXJjYz1yYTtjb25zdCBuYT1bImhlaWZfZXJyb3JfY29kZSIsImhlaWZfc3ViZXJyb3JfY29kZSIsImhlaWZfY29tcHJlc3Npb25fZm9ybWF0IiwiaGVpZl9jaHJvbWEiLCJoZWlmX2NvbG9yc3BhY2UiLCJoZWlmX2NoYW5uZWwiXTtmb3IoY29uc3QgZSBvZiBuYSlmb3IoY29uc3QgdCBpbiBuW2VdKSFuW2VdLmhhc093blByb3BlcnR5KHQpfHx0PT09InZhbHVlcyJ8fChuW3RdPW5bZV1bdF0pO2Zvcihjb25zdCBlIGluIG4pZS5pbmRleE9mKCJfaGVpZl8iKSE9PTB8fG5bZS5zbGljZSgxKV0hPT12b2lkIDB8fChuW2Uuc2xpY2UoMSldPW5bZV0pO3JldHVybiBMPW4sTH19KSgpO3UuZXhwb3J0cz12fSkocXQpO3ZhciB4cj1xdC5leHBvcnRzLCRyPXdyKHhyKSxKPVVpbnQ4QXJyYXksTWU9VWludDE2QXJyYXksUHI9SW50MzJBcnJheSxCdD1uZXcgSihbMCwwLDAsMCwwLDAsMCwwLDEsMSwxLDEsMiwyLDIsMiwzLDMsMywzLDQsNCw0LDQsNSw1LDUsNSwwLDAsMCwwXSksTnQ9bmV3IEooWzAsMCwwLDAsMSwxLDIsMiwzLDMsNCw0LDUsNSw2LDYsNyw3LDgsOCw5LDksMTAsMTAsMTEsMTEsMTIsMTIsMTMsMTMsMCwwXSksQ3I9bmV3IEooWzE2LDE3LDE4LDAsOCw3LDksNiwxMCw1LDExLDQsMTIsMywxMywyLDE0LDEsMTVdKSxMdD1mdW5jdGlvbih1LHApe2Zvcih2YXIgdj1uZXcgTWUoMzEpLFQ9MDtUPDMxOysrVCl2W1RdPXArPTE8PHVbVC0xXTtmb3IodmFyICQ9bmV3IFByKHZbMzBdKSxUPTE7VDwzMDsrK1QpZm9yKHZhciBxPXZbVF07cTx2W1QrMV07KytxKSRbcV09cS12W1RdPDw1fFQ7cmV0dXJue2I6dixyOiR9fSxWdD1MdChCdCwyKSxZdD1WdC5iLFRyPVZ0LnI7WXRbMjhdPTI1OCxUclsyNThdPTI4O2Zvcih2YXIgRnI9THQoTnQsMCksRHI9RnIuYix2dD1uZXcgTWUoMzI3NjgpLHo9MDt6PDMyNzY4Oysreil7dmFyIG1lPSh6JjQzNjkwKT4+MXwoeiYyMTg0NSk8PDE7bWU9KG1lJjUyNDI4KT4+MnwobWUmMTMxMDcpPDwyLG1lPShtZSY2MTY4MCk+PjR8KG1lJjM4NTUpPDw0LHZ0W3pdPSgobWUmNjUyODApPj44fChtZSYyNTUpPDw4KT4+MX1mb3IodmFyIHFlPWZ1bmN0aW9uKHUscCx2KXtmb3IodmFyIFQ9dS5sZW5ndGgsJD0wLHE9bmV3IE1lKHApOyQ8VDsrKyQpdVskXSYmKytxW3VbJF0tMV07dmFyIEw9bmV3IE1lKHApO2ZvcigkPTE7JDxwOysrJClMWyRdPUxbJC0xXStxWyQtMV08PDE7dmFyIG47aWYodil7bj1uZXcgTWUoMTw8cCk7dmFyIGVlPTE1LXA7Zm9yKCQ9MDskPFQ7KyskKWlmKHVbJF0pZm9yKHZhciBLPSQ8PDR8dVskXSxaPXAtdVskXSx4PUxbdVskXS0xXSsrPDxaLE09eHwoMTw8WiktMTt4PD1NOysreCluW3Z0W3hdPj5lZV09S31lbHNlIGZvcihuPW5ldyBNZShUKSwkPTA7JDxUOysrJCl1WyRdJiYoblskXT12dFtMW3VbJF0tMV0rK10+PjE1LXVbJF0pO3JldHVybiBufSxCZT1uZXcgSigyODgpLHo9MDt6PDE0NDsrK3opQmVbel09ODtmb3IodmFyIHo9MTQ0O3o8MjU2OysreilCZVt6XT05O2Zvcih2YXIgej0yNTY7ejwyODA7Kyt6KUJlW3pdPTc7Zm9yKHZhciB6PTI4MDt6PDI4ODsrK3opQmVbel09ODtmb3IodmFyIFh0PW5ldyBKKDMyKSx6PTA7ejwzMjsrK3opWHRbel09NTt2YXIgQXI9cWUoQmUsOSwxKSxTcj1xZShYdCw1LDEpLHl0PWZ1bmN0aW9uKHUpe2Zvcih2YXIgcD11WzBdLHY9MTt2PHUubGVuZ3RoOysrdil1W3ZdPnAmJihwPXVbdl0pO3JldHVybiBwfSxyZT1mdW5jdGlvbih1LHAsdil7dmFyIFQ9cC84fDA7cmV0dXJuKHVbVF18dVtUKzFdPDw4KT4+KHAmNykmdn0sd3Q9ZnVuY3Rpb24odSxwKXt2YXIgdj1wLzh8MDtyZXR1cm4odVt2XXx1W3YrMV08PDh8dVt2KzJdPDwxNik+PihwJjcpfSxNcj1mdW5jdGlvbih1KXtyZXR1cm4odSs3KS84fDB9LGpyPWZ1bmN0aW9uKHUscCx2KXtyZXR1cm4odj09bnVsbHx8dj51Lmxlbmd0aCkmJih2PXUubGVuZ3RoKSxuZXcgSih1LnN1YmFycmF5KHAsdikpfSxPcj1bInVuZXhwZWN0ZWQgRU9GIiwiaW52YWxpZCBibG9jayB0eXBlIiwiaW52YWxpZCBsZW5ndGgvbGl0ZXJhbCIsImludmFsaWQgZGlzdGFuY2UiLCJzdHJlYW0gZmluaXNoZWQiLCJubyBzdHJlYW0gaGFuZGxlciIsLCJubyBjYWxsYmFjayIsImludmFsaWQgVVRGLTggZGF0YSIsImV4dHJhIGZpZWxkIHRvbyBsb25nIiwiZGF0ZSBub3QgaW4gcmFuZ2UgMTk4MC0yMDk5IiwiZmlsZW5hbWUgdG9vIGxvbmciLCJzdHJlYW0gZmluaXNoaW5nIiwiaW52YWxpZCB6aXAgZGF0YSJdLG5lPWZ1bmN0aW9uKHUscCx2KXt2YXIgVD1uZXcgRXJyb3IocHx8T3JbdV0pO2lmKFQuY29kZT11LEVycm9yLmNhcHR1cmVTdGFja1RyYWNlJiZFcnJvci5jYXB0dXJlU3RhY2tUcmFjZShULG5lKSwhdil0aHJvdyBUO3JldHVybiBUfSx6cj1mdW5jdGlvbih1LHAsdixUKXt2YXIgJD11Lmxlbmd0aCxxPTA7aWYoISR8fHAuZiYmIXAubClyZXR1cm4gdnx8bmV3IEooMCk7dmFyIEw9IXYsbj1MfHxwLmkhPTIsZWU9cC5pO0wmJih2PW5ldyBKKCQqMykpO3ZhciBLPWZ1bmN0aW9uKEllKXt2YXIgRmU9di5sZW5ndGg7aWYoSWU+RmUpe3ZhciB5ZT1uZXcgSihNYXRoLm1heChGZSoyLEllKSk7eWUuc2V0KHYpLHY9eWV9fSxaPXAuZnx8MCx4PXAucHx8MCxNPXAuYnx8MCx0ZT1wLmwscGU9cC5kLE49cC5tLGJlPXAubixoZT0kKjg7ZG97aWYoIXRlKXtaPXJlKHUseCwxKTt2YXIgRWU9cmUodSx4KzEsMyk7aWYoeCs9MyxFZSlpZihFZT09MSl0ZT1BcixwZT1TcixOPTksYmU9NTtlbHNlIGlmKEVlPT0yKXt2YXIgeGU9cmUodSx4LDMxKSsyNTcsZ2U9cmUodSx4KzEwLDE1KSs0LE9lPXhlK3JlKHUseCs1LDMxKSsxO3grPTE0O2Zvcih2YXIgb2U9bmV3IEooT2UpLHplPW5ldyBKKDE5KSxBPTA7QTxnZTsrK0EpemVbQ3JbQV1dPXJlKHUseCtBKjMsNyk7eCs9Z2UqMztmb3IodmFyIFU9eXQoemUpLGllPSgxPDxVKS0xLCRlPXFlKHplLFUsMSksQT0wO0E8T2U7KXt2YXIgRT0kZVtyZSh1LHgsaWUpXTt4Kz1FJjE1O3ZhciBYPUU+PjQ7aWYoWDwxNilvZVtBKytdPVg7ZWxzZXt2YXIgUD0wLFBlPTA7Zm9yKFg9PTE2PyhQZT0zK3JlKHUseCwzKSx4Kz0yLFA9b2VbQS0xXSk6WD09MTc/KFBlPTMrcmUodSx4LDcpLHgrPTMpOlg9PTE4JiYoUGU9MTErcmUodSx4LDEyNykseCs9Nyk7UGUtLTspb2VbQSsrXT1QfX12YXIgTmU9b2Uuc3ViYXJyYXkoMCx4ZSksYWU9b2Uuc3ViYXJyYXkoeGUpO049eXQoTmUpLGJlPXl0KGFlKSx0ZT1xZShOZSxOLDEpLHBlPXFlKGFlLGJlLDEpfWVsc2UgbmUoMSk7ZWxzZXt2YXIgWD1Ncih4KSs0LGtlPXVbWC00XXx1W1gtM108PDgsamU9WCtrZTtpZihqZT4kKXtlZSYmbmUoMCk7YnJlYWt9biYmSyhNK2tlKSx2LnNldCh1LnN1YmFycmF5KFgsamUpLE0pLHAuYj1NKz1rZSxwLnA9eD1qZSo4LHAuZj1aO2NvbnRpbnVlfWlmKHg+aGUpe2VlJiZuZSgwKTticmVha319biYmSyhNKzEzMTA3Mik7Zm9yKHZhciB0dD0oMTw8TiktMSxydD0oMTw8YmUpLTEsUmU9eDs7UmU9eCl7dmFyIFA9dGVbd3QodSx4KSZ0dF0sdmU9UD4+NDtpZih4Kz1QJjE1LHg+aGUpe2VlJiZuZSgwKTticmVha31pZihQfHxuZSgyKSx2ZTwyNTYpdltNKytdPXZlO2Vsc2UgaWYodmU9PTI1Nil7UmU9eCx0ZT1udWxsO2JyZWFrfWVsc2V7dmFyIG50PXZlLTI1NDtpZih2ZT4yNjQpe3ZhciBBPXZlLTI1NyxDZT1CdFtBXTtudD1yZSh1LHgsKDE8PENlKS0xKStZdFtBXSx4Kz1DZX12YXIgTGU9cGVbd3QodSx4KSZydF0sVmU9TGU+PjQ7TGV8fG5lKDMpLHgrPUxlJjE1O3ZhciBhZT1EcltWZV07aWYoVmU+Myl7dmFyIENlPU50W1ZlXTthZSs9d3QodSx4KSYoMTw8Q2UpLTEseCs9Q2V9aWYoeD5oZSl7ZWUmJm5lKDApO2JyZWFrfW4mJksoTSsxMzEwNzIpO3ZhciBpdD1NK250O2lmKE08YWUpe3ZhciBfZT1xLWFlLFRlPU1hdGgubWluKGFlLGl0KTtmb3IoX2UrTTwwJiZuZSgzKTtNPFRlOysrTSl2W01dPVRbX2UrTV19Zm9yKDtNPGl0OysrTSl2W01dPXZbTS1hZV19fXAubD10ZSxwLnA9UmUscC5iPU0scC5mPVosdGUmJihaPTEscC5tPU4scC5kPXBlLHAubj1iZSl9d2hpbGUoIVopO3JldHVybiBNIT12Lmxlbmd0aCYmTD9qcih2LDAsTSk6di5zdWJhcnJheSgwLE0pfSxScj1uZXcgSigwKSxJcj1mdW5jdGlvbih1KXsodVswXSE9MzF8fHVbMV0hPTEzOXx8dVsyXSE9OCkmJm5lKDYsImludmFsaWQgZ3ppcCBkYXRhIik7dmFyIHA9dVszXSx2PTEwO3AmNCYmKHYrPSh1WzEwXXx1WzExXTw8OCkrMik7Zm9yKHZhciBUPShwPj4zJjEpKyhwPj40JjEpO1Q+MDtULT0hdVt2KytdKTtyZXR1cm4gdisocCYyKX0sSHI9ZnVuY3Rpb24odSl7dmFyIHA9dS5sZW5ndGg7cmV0dXJuKHVbcC00XXx1W3AtM108PDh8dVtwLTJdPDwxNnx1W3AtMV08PDI0KT4+PjB9O2Z1bmN0aW9uIFdyKHUscCl7dmFyIHY9SXIodSk7cmV0dXJuIHYrOD51Lmxlbmd0aCYmbmUoNiwiaW52YWxpZCBnemlwIGRhdGEiKSx6cih1LnN1YmFycmF5KHYsLTgpLHtpOjJ9LG5ldyBKKEhyKHUpKSxwKX12YXIgVXI9dHlwZW9mIFRleHREZWNvZGVyPCJ1IiYmbmV3IFRleHREZWNvZGVyLHFyPTA7dHJ5e1VyLmRlY29kZShScix7c3RyZWFtOiEwfSkscXI9MX1jYXRjaHt9YXN5bmMgZnVuY3Rpb24gQnIodSl7dmFyIHY7aWYoKCh2PXUuaGVhZGVycy5nZXQoImNvbnRlbnQtdHlwZSIpKT09bnVsbD92b2lkIDA6di5zcGxpdCgiOyIsMSlbMF0pIT09ImFwcGxpY2F0aW9uL3dhc20rZ3ppcCIpcmV0dXJuIHU7aWYodHlwZW9mIERlY29tcHJlc3Npb25TdHJlYW08InUiJiZ1LmJvZHkpcmV0dXJuIG5ldyBSZXNwb25zZSh1LmJvZHkucGlwZVRocm91Z2gobmV3IERlY29tcHJlc3Npb25TdHJlYW0oImd6aXAiKSkse2hlYWRlcnM6eyJjb250ZW50LXR5cGUiOiJhcHBsaWNhdGlvbi93YXNtIn19KTtjb25zdCBwPVdyKG5ldyBVaW50OEFycmF5KGF3YWl0IHUuYXJyYXlCdWZmZXIoKSkpO3JldHVybiBuZXcgUmVzcG9uc2UocCx7aGVhZGVyczp7ImNvbnRlbnQtdHlwZSI6ImFwcGxpY2F0aW9uL3dhc20ifX0pfWNvbnN0IGJ0PXNlbGY7YnQub25tZXNzYWdlPWFzeW5jKHtkYXRhOnV9KT0+e3RyeXtpZighWyJoZWljIiwiaGVpZiJdLmluY2x1ZGVzKHUuZm9ybWF0KSl0aHJvdyBuZXcgRXJyb3IoIk9ubHkgSEVJQy9IRUlGIGltYWdlIGRlY29kaW5nIGlzIGJ1bmRsZWQuIik7Y29uc3QgcD1hd2FpdCBOcih1LmlucHV0LHUud2FzbVVybCk7YnQucG9zdE1lc3NhZ2Uoe3NvdXJjZTpwLGZvcm1hdDoicG5nIixjb250ZW50VHlwZToiaW1hZ2UvcG5nIn0sW3AuYnVmZmVyXSl9Y2F0Y2gocCl7YnQucG9zdE1lc3NhZ2Uoe2Vycm9yOnAgaW5zdGFuY2VvZiBFcnJvcj9wLm1lc3NhZ2U6U3RyaW5nKHApfSl9fTthc3luYyBmdW5jdGlvbiBOcih1LHApe2NvbnN0IHY9YXdhaXQgZmV0Y2gocCk7aWYoIXYub2spdGhyb3cgbmV3IEVycm9yKGBGYWlsZWQgdG8gbG9hZCB0aGUgSEVJRiBkZWNvZGVyOiAke3Yuc3RhdHVzfS5gKTtjb25zdCBUPWF3YWl0ICRyKHt3YXNtQmluYXJ5Om5ldyBVaW50OEFycmF5KGF3YWl0KGF3YWl0IEJyKHYpKS5hcnJheUJ1ZmZlcigpKX0pLCQ9bmV3IFQuSGVpZkRlY29kZXIoKS5kZWNvZGUodSk7dHJ5e2NvbnN0IHE9JC5maW5kKHg9PnguaXNfcHJpbWFyeSgpKT8/JFswXTtpZighcSl0aHJvdyBuZXcgRXJyb3IoIkhFSUYgZmlsZSBjb250YWlucyBubyBkZWNvZGFibGUgaW1hZ2UuIik7Y29uc3QgTD1xLmdldF93aWR0aCgpLG49cS5nZXRfaGVpZ2h0KCk7aWYoTDw9MHx8bjw9MHx8TCpuPjY0ZTYpdGhyb3cgbmV3IEVycm9yKCJIRUlGIGltYWdlIGRpbWVuc2lvbnMgZXhjZWVkIHRoZSBwcmV2aWV3IGxpbWl0LiIpO2NvbnN0IGVlPW5ldyBPZmZzY3JlZW5DYW52YXMoTCxuKSxLPWVlLmdldENvbnRleHQoIjJkIik7aWYoIUspdGhyb3cgbmV3IEVycm9yKCJIRUlGIHByZXZpZXcgcmVxdWlyZXMgYSAyRCBjYW52YXMuIik7Y29uc3QgWj1LLmNyZWF0ZUltYWdlRGF0YShMLG4pO3JldHVybiBhd2FpdCBuZXcgUHJvbWlzZSgoeCxNKT0+cS5kaXNwbGF5KFosdGU9Pnt0ZT94KCk6TShuZXcgRXJyb3IoIkZhaWxlZCB0byBkZWNvZGUgSEVJRiBpbWFnZS4iKSl9KSksSy5wdXRJbWFnZURhdGEoWiwwLDApLG5ldyBVaW50OEFycmF5KGF3YWl0KGF3YWl0IGVlLmNvbnZlcnRUb0Jsb2Ioe3R5cGU6ImltYWdlL3BuZyJ9KSkuYXJyYXlCdWZmZXIoKSl9ZmluYWxseXskLmZvckVhY2gocT0+cS5mcmVlKCkpfX19KSgpOwo=", u = (Z) => Uint8Array.from(atob(Z), (X) => X.charCodeAt(0)), c = typeof self < "u" && self.Blob && new Blob([u(V)], { type: "text/javascript;charset=utf-8" });
4
+ function p(Z) {
5
+ let X;
6
+ try {
7
+ if (X = c && (self.URL || self.webkitURL).createObjectURL(c), !X) throw "";
8
+ const l = new Worker(X, {
9
+ name: Z == null ? void 0 : Z.name
10
+ });
11
+ return l.addEventListener("error", () => {
12
+ (self.URL || self.webkitURL).revokeObjectURL(X);
13
+ }), l;
14
+ } catch {
15
+ return new Worker(
16
+ "data:text/javascript;base64," + V,
17
+ {
18
+ name: Z == null ? void 0 : Z.name
19
+ }
20
+ );
21
+ } finally {
22
+ X && (self.URL || self.webkitURL).revokeObjectURL(X);
23
+ }
24
+ }
25
+ function i(Z, X, l) {
26
+ return Y(l), new Promise((y, d) => {
27
+ const m = new p(), W = () => {
28
+ l == null || l.removeEventListener("abort", G), m.terminate();
29
+ }, G = () => {
30
+ W(), d(new DOMException("Media conversion was aborted.", "AbortError"));
31
+ };
32
+ l == null || l.addEventListener("abort", G, { once: !0 }), m.onerror = (b) => {
33
+ W(), d(new Error(b.message || "Media conversion worker failed."));
34
+ }, m.onmessageerror = () => {
35
+ W(), d(new Error("Invalid media conversion response."));
36
+ }, m.onmessage = ({ data: b }) => {
37
+ W(), b.error ? d(new Error(b.error)) : y(b);
38
+ };
39
+ try {
40
+ m.postMessage({ input: Z, format: X, wasmUrl: new URL(h, import.meta.url).href }, [Z.buffer]);
41
+ } catch (b) {
42
+ W(), d(b);
43
+ }
44
+ });
45
+ }
46
+ export {
47
+ i as convertMedia
48
+ };
@@ -1,8 +1,8 @@
1
1
  var U = Object.defineProperty;
2
2
  var j = (e, t, n) => t in e ? U(e, t, { enumerable: !0, configurable: !0, writable: !0, value: n }) : e[t] = n;
3
3
  var d = (e, t, n) => j(e, typeof t != "symbol" ? t + "" : t, n);
4
- import { c as G } from "./core-gp02JQ3r.js";
5
- import { J as O } from "./vendor-DvWhw-zP.js";
4
+ import { c as G } from "./core--zVW212C.js";
5
+ import { J as O } from "./vendor-DPFNKNkh.js";
6
6
  const R = [
7
7
  {
8
8
  extensions: ["mm", "opml", "xmind", "mmap"],
@@ -1,9 +1,9 @@
1
1
  var Gn = Object.defineProperty;
2
2
  var Un = (n, e, t) => e in n ? Gn(n, e, { enumerable: !0, configurable: !0, writable: !0, value: t }) : n[e] = t;
3
3
  var M = (n, e, t) => Un(n, typeof e != "symbol" ? e + "" : e, t);
4
- import { c as _n, o as Vn } from "./core-gp02JQ3r.js";
5
- import { L as Ne, M as V, b as ne, F as et, S as $n, C as de, V as E, G as ee, c as en, R as tn, B as Y, d as ie, e as Q, h as $, j as Wn, k as at, P as we, l as vt, E as yt, A as xt, D as Oe, m as te, n as Mt, O as Kn, o as Z, p as _e, q as Pe, r as me, t as Yn, v as Ve, w as Te, x as Ee, y as St, z as fe, H as Xn, I as Zn, K as nn, N as qn, T as Jn, Q as Qn, W as er, X as tr, Y as nr, Z as rr, _ as sr, $ as ir, a0 as ar, a1 as or, a2 as lr, a3 as cr, a4 as ur, a5 as dr, a6 as hr, a7 as mr, J as fr, a8 as pr, a9 as gr, aa as wr } from "./vendor-DvWhw-zP.js";
6
- import { c as br } from "./panorama-Ci6DK6sa.js";
4
+ import { c as _n, o as Vn } from "./core--zVW212C.js";
5
+ import { L as Ne, M as V, b as ne, F as et, S as $n, C as de, V as E, d as ee, e as en, R as tn, B as Y, g as ie, h as Q, j as $, k as Wn, l as at, P as we, m as vt, E as yt, A as xt, D as Oe, n as te, o as Mt, O as Kn, p as Z, q as _e, r as Pe, t as me, v as Yn, w as Ve, x as Te, y as Ee, z as St, H as fe, I as Xn, K as Zn, N as nn, Q as qn, T as Jn, W as Qn, X as er, Y as tr, Z as nr, _ as rr, $ as sr, a0 as ir, a1 as ar, a2 as or, a3 as lr, a4 as cr, a5 as ur, a6 as dr, a7 as hr, a8 as mr, J as fr, a9 as pr, aa as gr, ab as wr } from "./vendor-DPFNKNkh.js";
6
+ import { c as br } from "./panorama-D7GVivtM.js";
7
7
  /*!
8
8
  * @license
9
9
  * The MIT License