@utoo/web 1.5.1 → 1.5.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm/loaderWorkerInline.js +1 -1
- package/esm/threadWorkerInline.js +1 -1
- package/esm/utoo/index.js +23 -23
- package/esm/utoo/index_bg.wasm +0 -0
- package/esm/workerInline.js +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
export default "data:application/javascript;base64,IWZ1bmN0aW9uIHdlYnBhY2tVbml2ZXJzYWxNb2R1bGVEZWZpbml0aW9uKHJvb3QsZmFjdG9yeSl7aWYoIm9iamVjdCI9PXR5cGVvZiBleHBvcnRzJiYib2JqZWN0Ij09dHlwZW9mIG1vZHVsZSltb2R1bGUuZXhwb3J0cz1mYWN0b3J5KCk7ZWxzZSBpZigiZnVuY3Rpb24iPT10eXBlb2YgZGVmaW5lJiZkZWZpbmUuYW1kKWRlZmluZShbXSxmYWN0b3J5KTtlbHNle3ZhciBhPWZhY3RvcnkoKTtmb3IodmFyIGkgaW4gYSkoIm9iamVjdCI9PXR5cGVvZiBleHBvcnRzP2V4cG9ydHM6cm9vdClbaV09YVtpXX19KHNlbGYsKCk9PigoKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgX193ZWJwYWNrX21vZHVsZXNfXz17Ii4vc3JjL3V0b28vaW5kZXguanMiKF9fdW51c2VkX3dlYnBhY2tfbW9kdWxlLF9fd2VicGFja19leHBvcnRzX18sX193ZWJwYWNrX3JlcXVpcmVfXyl7X193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18se1FSOigpPT5pbml0U3luY30pO2NsYXNzIEJ1aWxkT3B0aW9uc3tfX2Rlc3Ryb3lfaW50b19yYXcoKXtjb25zdCBwdHI9dGhpcy5fX3diZ19wdHI7cmV0dXJuIHRoaXMuX193YmdfcHRyPTAsQnVpbGRPcHRpb25zRmluYWxpemF0aW9uLnVucmVnaXN0ZXIodGhpcykscHRyfWZyZWUoKXtjb25zdCBwdHI9dGhpcy5fX2Rlc3Ryb3lfaW50b19yYXcoKTt3YXNtLl9fd2JnX2J1aWxkb3B0aW9uc19mcmVlKHB0ciwwKX1nZXQgY29uZmlnKCl7cmV0dXJuIHRha2VPYmplY3Qod2FzbS5idWlsZG9wdGlvbnNfY29uZmlnKHRoaXMuX193YmdfcHRyKSl9Y29uc3RydWN0b3IoKXtjb25zdCByZXQ9d2FzbS5idWlsZG9wdGlvbnNfbmV3KCk7cmV0dXJuIHRoaXMuX193YmdfcHRyPXJldD4+PjAsQnVpbGRPcHRpb25zRmluYWxpemF0aW9uLnJlZ2lzdGVyKHRoaXMsdGhpcy5fX3diZ19wdHIsdGhpcyksdGhpc31zZXQgY29uZmlnKHZhbCl7d2FzbS5idWlsZG9wdGlvbnNfc2V0X2NvbmZpZyh0aGlzLl9fd2JnX3B0cixhZGRIZWFwT2JqZWN0KHZhbCkpfWdldCBjbGVhbnVwKCl7cmV0dXJuIDAhPT13YXNtLl9fd2JnX2dldF9idWlsZG9wdGlvbnNfY2xlYW51cCh0aGlzLl9fd2JnX3B0cil9c2V0IGNsZWFudXAoYXJnMCl7d2FzbS5fX3diZ19zZXRfYnVpbGRvcHRpb25zX2NsZWFudXAodGhpcy5fX3diZ19wdHIsYXJnMCl9fVN5bWJvbC5kaXNwb3NlJiYoQnVpbGRPcHRpb25zLnByb3RvdHlwZVtTeW1ib2wuZGlzcG9zZV09QnVpbGRPcHRpb25zLnByb3RvdHlwZS5mcmVlKTtjbGFzcyBDcmVhdGVTeW5jQWNjZXNzSGFuZGxlT3B0aW9uc3tfX2Rlc3Ryb3lfaW50b19yYXcoKXtjb25zdCBwdHI9dGhpcy5fX3diZ19wdHI7cmV0dXJuIHRoaXMuX193YmdfcHRyPTAsQ3JlYXRlU3luY0FjY2Vzc0hhbmRsZU9wdGlvbnNGaW5hbGl6YXRpb24udW5yZWdpc3Rlcih0aGlzKSxwdHJ9ZnJlZSgpe2NvbnN0IHB0cj10aGlzLl9fZGVzdHJveV9pbnRvX3JhdygpO3dhc20uX193YmdfY3JlYXRlc3luY2FjY2Vzc2hhbmRsZW9wdGlvbnNfZnJlZShwdHIsMCl9fVN5bWJvbC5kaXNwb3NlJiYoQ3JlYXRlU3luY0FjY2Vzc0hhbmRsZU9wdGlvbnMucHJvdG90eXBlW1N5bWJvbC5kaXNwb3NlXT1DcmVhdGVTeW5jQWNjZXNzSGFuZGxlT3B0aW9ucy5wcm90b3R5cGUuZnJlZSk7Y2xhc3MgRGlyRW50cnl7c3RhdGljIF9fd3JhcChwdHIpe3B0cj4+Pj0wO2NvbnN0IG9iaj1PYmplY3QuY3JlYXRlKERpckVudHJ5LnByb3RvdHlwZSk7cmV0dXJuIG9iai5fX3diZ19wdHI9cHRyLERpckVudHJ5RmluYWxpemF0aW9uLnJlZ2lzdGVyKG9iaixvYmouX193YmdfcHRyLG9iaiksb2JqfXRvSlNPTigpe3JldHVybntuYW1lOnRoaXMubmFtZSx0eXBlOnRoaXMudHlwZX19dG9TdHJpbmcoKXtyZXR1cm4gSlNPTi5zdHJpbmdpZnkodGhpcyl9X19kZXN0cm95X2ludG9fcmF3KCl7Y29uc3QgcHRyPXRoaXMuX193YmdfcHRyO3JldHVybiB0aGlzLl9fd2JnX3B0cj0wLERpckVudHJ5RmluYWxpemF0aW9uLnVucmVnaXN0ZXIodGhpcykscHRyfWZyZWUoKXtjb25zdCBwdHI9dGhpcy5fX2Rlc3Ryb3lfaW50b19yYXcoKTt3YXNtLl9fd2JnX2RpcmVudHJ5X2ZyZWUocHRyLDApfWdldCBuYW1lKCl7bGV0IGRlZmVycmVkMV8wLGRlZmVycmVkMV8xO3RyeXtjb25zdCByZXRwdHI9d2FzbS5fX3diaW5kZ2VuX2FkZF90b19zdGFja19wb2ludGVyKC0xNik7d2FzbS5fX3diZ19nZXRfZGlyZW50cnlfbmFtZShyZXRwdHIsdGhpcy5fX3diZ19wdHIpO3ZhciByMD1nZXREYXRhVmlld01lbW9yeTAoKS5nZXRJbnQzMihyZXRwdHIrMCwhMCkscjE9Z2V0RGF0YVZpZXdNZW1vcnkwKCkuZ2V0SW50MzIocmV0cHRyKzQsITApO3JldHVybiBkZWZlcnJlZDFfMD1yMCxkZWZlcnJlZDFfMT1yMSxnZXRTdHJpbmdGcm9tV2FzbTAocjAscjEpfWZpbmFsbHl7d2FzbS5fX3diaW5kZ2VuX2FkZF90b19zdGFja19wb2ludGVyKDE2KSx3YXNtLl9fd2JpbmRnZW5fZXhwb3J0NChkZWZlcnJlZDFfMCxkZWZlcnJlZDFfMSwxKX19Z2V0IHR5cGUoKXtjb25zdCByZXQ9d2FzbS5fX3diZ19nZXRfZGlyZW50cnlfdHlwZSh0aGlzLl9fd2JnX3B0cik7cmV0dXJuIF9fd2JpbmRnZW5fZW51bV9EaXJFbnRyeVR5cGVbcmV0XX1zZXQgbmFtZShhcmcwKXtjb25zdCBwdHIwPXBhc3NTdHJpbmdUb1dhc20wKGFyZzAsd2FzbS5fX3diaW5kZ2VuX2V4cG9ydCx3YXNtLl9fd2JpbmRnZW5fZXhwb3J0MiksbGVuMD1XQVNNX1ZFQ1RPUl9MRU47d2FzbS5fX3diZ19zZXRfZGlyZW50cnlfbmFtZSh0aGlzLl9fd2JnX3B0cixwdHIwLGxlbjApfXNldCB0eXBlKGFyZzApe3dhc20uX193Ymdfc2V0X2RpcmVudHJ5X3R5cGUodGhpcy5fX3diZ19wdHIsKF9fd2JpbmRnZW5fZW51bV9EaXJFbnRyeVR5cGUuaW5kZXhPZihhcmcwKSsxfHwzKS0xKX19ZnVuY3Rpb24gRVJSX0FCT1JUKCl7bGV0IGRlZmVycmVkMV8wLGRlZmVycmVkMV8xO3RyeXtjb25zdCByZXRwdHI9d2FzbS5fX3diaW5kZ2VuX2FkZF90b19zdGFja19wb2ludGVyKC0xNik7d2FzbS5FUlJfQUJPUlQocmV0cHRyKTt2YXIgcjA9Z2V0RGF0YVZpZXdNZW1vcnkwKCkuZ2V0SW50MzIocmV0cHRyKzAsITApLHIxPWdldERhdGFWaWV3TWVtb3J5MCgpLmdldEludDMyKHJldHB0cis0LCEwKTtyZXR1cm4gZGVmZXJyZWQxXzA9cjAsZGVmZXJyZWQxXzE9cjEsZ2V0U3RyaW5nRnJvbVdhc20wKHIwLHIxKX1maW5hbGx5e3dhc20uX193YmluZGdlbl9hZGRfdG9fc3RhY2tfcG9pbnRlcigxNiksd2FzbS5fX3diaW5kZ2VuX2V4cG9ydDQoZGVmZXJyZWQxXzAsZGVmZXJyZWQxXzEsMSl9fWZ1bmN0aW9uIEVSUl9JTlZBTElEX1NUQVRFKCl7bGV0IGRlZmVycmVkMV8wLGRlZmVycmVkMV8xO3RyeXtjb25zdCByZXRwdHI9d2FzbS5fX3diaW5kZ2VuX2FkZF90b19zdGFja19wb2ludGVyKC0xNik7d2FzbS5FUlJfSU5WQUxJRF9TVEFURShyZXRwdHIpO3ZhciByMD1nZXREYXRhVmlld01lbW9yeTAoKS5nZXRJbnQzMihyZXRwdHIrMCwhMCkscjE9Z2V0RGF0YVZpZXdNZW1vcnkwKCkuZ2V0SW50MzIocmV0cHRyKzQsITApO3JldHVybiBkZWZlcnJlZDFfMD1yMCxkZWZlcnJlZDFfMT1yMSxnZXRTdHJpbmdGcm9tV2FzbTAocjAscjEpfWZpbmFsbHl7d2FzbS5fX3diaW5kZ2VuX2FkZF90b19zdGFja19wb2ludGVyKDE2KSx3YXNtLl9fd2JpbmRnZW5fZXhwb3J0NChkZWZlcnJlZDFfMCxkZWZlcnJlZDFfMSwxKX19ZnVuY3Rpb24gRVJSX0tFWV9BTFJFQURZX0VYSVNUUygpe2xldCBkZWZlcnJlZDFfMCxkZWZlcnJlZDFfMTt0cnl7Y29uc3QgcmV0cHRyPXdhc20uX193YmluZGdlbl9hZGRfdG9fc3RhY2tfcG9pbnRlcigtMTYpO3dhc20uRVJSX0tFWV9BTFJFQURZX0VYSVNUUyhyZXRwdHIpO3ZhciByMD1nZXREYXRhVmlld01lbW9yeTAoKS5nZXRJbnQzMihyZXRwdHIrMCwhMCkscjE9Z2V0RGF0YVZpZXdNZW1vcnkwKCkuZ2V0SW50MzIocmV0cHRyKzQsITApO3JldHVybiBkZWZlcnJlZDFfMD1yMCxkZWZlcnJlZDFfMT1yMSxnZXRTdHJpbmdGcm9tV2FzbTAocjAscjEpfWZpbmFsbHl7d2FzbS5fX3diaW5kZ2VuX2FkZF90b19zdGFja19wb2ludGVyKDE2KSx3YXNtLl9fd2JpbmRnZW5fZXhwb3J0NChkZWZlcnJlZDFfMCxkZWZlcnJlZDFfMSwxKX19ZnVuY3Rpb24gRVJSX05PVF9BTExPV0VEKCl7bGV0IGRlZmVycmVkMV8wLGRlZmVycmVkMV8xO3RyeXtjb25zdCByZXRwdHI9d2FzbS5fX3diaW5kZ2VuX2FkZF90b19zdGFja19wb2ludGVyKC0xNik7d2FzbS5FUlJfTk9UX0FMTE9XRUQocmV0cHRyKTt2YXIgcjA9Z2V0RGF0YVZpZXdNZW1vcnkwKCkuZ2V0SW50MzIocmV0cHRyKzAsITApLHIxPWdldERhdGFWaWV3TWVtb3J5MCgpLmdldEludDMyKHJldHB0cis0LCEwKTtyZXR1cm4gZGVmZXJyZWQxXzA9cjAsZGVmZXJyZWQxXzE9cjEsZ2V0U3RyaW5nRnJvbVdhc20wKHIwLHIxKX1maW5hbGx5e3dhc20uX193YmluZGdlbl9hZGRfdG9fc3RhY2tfcG9pbnRlcigxNiksd2FzbS5fX3diaW5kZ2VuX2V4cG9ydDQoZGVmZXJyZWQxXzAsZGVmZXJyZWQxXzEsMSl9fWZ1bmN0aW9uIEVSUl9OT1RfRk9VTkQoKXtsZXQgZGVmZXJyZWQxXzAsZGVmZXJyZWQxXzE7dHJ5e2NvbnN0IHJldHB0cj13YXNtLl9fd2JpbmRnZW5fYWRkX3RvX3N0YWNrX3BvaW50ZXIoLTE2KTt3YXNtLkVSUl9OT1RfRk9VTkQocmV0cHRyKTt2YXIgcjA9Z2V0RGF0YVZpZXdNZW1vcnkwKCkuZ2V0SW50MzIocmV0cHRyKzAsITApLHIxPWdldERhdGFWaWV3TWVtb3J5MCgpLmdldEludDMyKHJldHB0cis0LCEwKTtyZXR1cm4gZGVmZXJyZWQxXzA9cjAsZGVmZXJyZWQxXzE9cjEsZ2V0U3RyaW5nRnJvbVdhc20wKHIwLHIxKX1maW5hbGx5e3dhc20uX193YmluZGdlbl9hZGRfdG9fc3RhY2tfcG9pbnRlcigxNiksd2FzbS5fX3diaW5kZ2VuX2V4cG9ydDQoZGVmZXJyZWQxXzAsZGVmZXJyZWQxXzEsMSl9fWZ1bmN0aW9uIEVSUl9OT19NT0RJRklDQVRJT05fQUxMT1dFRCgpe2xldCBkZWZlcnJlZDFfMCxkZWZlcnJlZDFfMTt0cnl7Y29uc3QgcmV0cHRyPXdhc20uX193YmluZGdlbl9hZGRfdG9fc3RhY2tfcG9pbnRlcigtMTYpO3dhc20uRVJSX0tFWV9BTFJFQURZX0VYSVNUUyhyZXRwdHIpO3ZhciByMD1nZXREYXRhVmlld01lbW9yeTAoKS5nZXRJbnQzMihyZXRwdHIrMCwhMCkscjE9Z2V0RGF0YVZpZXdNZW1vcnkwKCkuZ2V0SW50MzIocmV0cHRyKzQsITApO3JldHVybiBkZWZlcnJlZDFfMD1yMCxkZWZlcnJlZDFfMT1yMSxnZXRTdHJpbmdGcm9tV2FzbTAocjAscjEpfWZpbmFsbHl7d2FzbS5fX3diaW5kZ2VuX2FkZF90b19zdGFja19wb2ludGVyKDE2KSx3YXNtLl9fd2JpbmRnZW5fZXhwb3J0NChkZWZlcnJlZDFfMCxkZWZlcnJlZDFfMSwxKX19ZnVuY3Rpb24gRVJSX1FVT1RBX0VYQ0VFREVEKCl7bGV0IGRlZmVycmVkMV8wLGRlZmVycmVkMV8xO3RyeXtjb25zdCByZXRwdHI9d2FzbS5fX3diaW5kZ2VuX2FkZF90b19zdGFja19wb2ludGVyKC0xNik7d2FzbS5FUlJfUVVPVEFfRVhDRUVERUQocmV0cHRyKTt2YXIgcjA9Z2V0RGF0YVZpZXdNZW1vcnkwKCkuZ2V0SW50MzIocmV0cHRyKzAsITApLHIxPWdldERhdGFWaWV3TWVtb3J5MCgpLmdldEludDMyKHJldHB0cis0LCEwKTtyZXR1cm4gZGVmZXJyZWQxXzA9cjAsZGVmZXJyZWQxXzE9cjEsZ2V0U3RyaW5nRnJvbVdhc20wKHIwLHIxKX1maW5hbGx5e3dhc20uX193YmluZGdlbl9hZGRfdG9fc3RhY2tfcG9pbnRlcigxNiksd2FzbS5fX3diaW5kZ2VuX2V4cG9ydDQoZGVmZXJyZWQxXzAsZGVmZXJyZWQxXzEsMSl9fWZ1bmN0aW9uIEVSUl9UWVBFX01JU01BVENIKCl7bGV0IGRlZmVycmVkMV8wLGRlZmVycmVkMV8xO3RyeXtjb25zdCByZXRwdHI9d2FzbS5fX3diaW5kZ2VuX2FkZF90b19zdGFja19wb2ludGVyKC0xNik7d2FzbS5FUlJfVFlQRV9NSVNNQVRDSChyZXRwdHIpO3ZhciByMD1nZXREYXRhVmlld01lbW9yeTAoKS5nZXRJbnQzMihyZXRwdHIrMCwhMCkscjE9Z2V0RGF0YVZpZXdNZW1vcnkwKCkuZ2V0SW50MzIocmV0cHRyKzQsITApO3JldHVybiBkZWZlcnJlZDFfMD1yMCxkZWZlcnJlZDFfMT1yMSxnZXRTdHJpbmdGcm9tV2FzbTAocjAscjEpfWZpbmFsbHl7d2FzbS5fX3diaW5kZ2VuX2FkZF90b19zdGFja19wb2ludGVyKDE2KSx3YXNtLl9fd2JpbmRnZW5fZXhwb3J0NChkZWZlcnJlZDFfMCxkZWZlcnJlZDFfMSwxKX19U3ltYm9sLmRpc3Bvc2UmJihEaXJFbnRyeS5wcm90b3R5cGVbU3ltYm9sLmRpc3Bvc2VdPURpckVudHJ5LnByb3RvdHlwZS5mcmVlKTtjbGFzcyBGc3tfX2Rlc3Ryb3lfaW50b19yYXcoKXtjb25zdCBwdHI9dGhpcy5fX3diZ19wdHI7cmV0dXJuIHRoaXMuX193YmdfcHRyPTAsRnNGaW5hbGl6YXRpb24udW5yZWdpc3Rlcih0aGlzKSxwdHJ9ZnJlZSgpe2NvbnN0IHB0cj10aGlzLl9fZGVzdHJveV9pbnRvX3JhdygpO3dhc20uX193YmdfZnNfZnJlZShwdHIsMCl9c3RhdGljIGNvcHlGaWxlKHNyYyxkc3Qpe2NvbnN0IHB0cjA9cGFzc1N0cmluZ1RvV2FzbTAoc3JjLHdhc20uX193YmluZGdlbl9leHBvcnQsd2FzbS5fX3diaW5kZ2VuX2V4cG9ydDIpLGxlbjA9V0FTTV9WRUNUT1JfTEVOLHB0cjE9cGFzc1N0cmluZ1RvV2FzbTAoZHN0LHdhc20uX193YmluZGdlbl9leHBvcnQsd2FzbS5fX3diaW5kZ2VuX2V4cG9ydDIpLGxlbjE9V0FTTV9WRUNUT1JfTEVOO3JldHVybiB0YWtlT2JqZWN0KHdhc20uZnNfY29weUZpbGUocHRyMCxsZW4wLHB0cjEsbGVuMSkpfXN0YXRpYyBjb3B5RmlsZVN5bmMoc3JjLGRzdCl7dHJ5e2NvbnN0IHJldHB0cj13YXNtLl9fd2JpbmRnZW5fYWRkX3RvX3N0YWNrX3BvaW50ZXIoLTE2KSxwdHIwPXBhc3NTdHJpbmdUb1dhc20wKHNyYyx3YXNtLl9fd2JpbmRnZW5fZXhwb3J0LHdhc20uX193YmluZGdlbl9leHBvcnQyKSxsZW4wPVdBU01fVkVDVE9SX0xFTixwdHIxPXBhc3NTdHJpbmdUb1dhc20wKGRzdCx3YXNtLl9fd2JpbmRnZW5fZXhwb3J0LHdhc20uX193YmluZGdlbl9leHBvcnQyKSxsZW4xPVdBU01fVkVDVE9SX0xFTjt3YXNtLmZzX2NvcHlGaWxlU3luYyhyZXRwdHIscHRyMCxsZW4wLHB0cjEsbGVuMSk7dmFyIHIwPWdldERhdGFWaWV3TWVtb3J5MCgpLmdldEludDMyKHJldHB0ciswLCEwKTtpZihnZXREYXRhVmlld01lbW9yeTAoKS5nZXRJbnQzMihyZXRwdHIrNCwhMCkpdGhyb3cgdGFrZU9iamVjdChyMCl9ZmluYWxseXt3YXNtLl9fd2JpbmRnZW5fYWRkX3RvX3N0YWNrX3BvaW50ZXIoMTYpfX1zdGF0aWMgY3JlYXRlRGlyKHBhdGgpe2NvbnN0IHB0cjA9cGFzc1N0cmluZ1RvV2FzbTAocGF0aCx3YXNtLl9fd2JpbmRnZW5fZXhwb3J0LHdhc20uX193YmluZGdlbl9leHBvcnQyKSxsZW4wPVdBU01fVkVDVE9SX0xFTjtyZXR1cm4gdGFrZU9iamVjdCh3YXNtLmZzX2NyZWF0ZURpcihwdHIwLGxlbjApKX1zdGF0aWMgY3JlYXRlRGlyQWxsKHBhdGgpe2NvbnN0IHB0cjA9cGFzc1N0cmluZ1RvV2FzbTAocGF0aCx3YXNtLl9fd2JpbmRnZW5fZXhwb3J0LHdhc20uX193YmluZGdlbl9leHBvcnQyKSxsZW4wPVdBU01fVkVDVE9SX0xFTjtyZXR1cm4gdGFrZU9iamVjdCh3YXNtLmZzX2NyZWF0ZURpckFsbChwdHIwLGxlbjApKX1zdGF0aWMgY3JlYXRlRGlyQWxsU3luYyhwYXRoKXt0cnl7Y29uc3QgcmV0cHRyPXdhc20uX193YmluZGdlbl9hZGRfdG9fc3RhY2tfcG9pbnRlcigtMTYpLHB0cjA9cGFzc1N0cmluZ1RvV2FzbTAocGF0aCx3YXNtLl9fd2JpbmRnZW5fZXhwb3J0LHdhc20uX193YmluZGdlbl9leHBvcnQyKSxsZW4wPVdBU01fVkVDVE9SX0xFTjt3YXNtLmZzX2NyZWF0ZURpckFsbFN5bmMocmV0cHRyLHB0cjAsbGVuMCk7dmFyIHIwPWdldERhdGFWaWV3TWVtb3J5MCgpLmdldEludDMyKHJldHB0ciswLCEwKTtpZihnZXREYXRhVmlld01lbW9yeTAoKS5nZXRJbnQzMihyZXRwdHIrNCwhMCkpdGhyb3cgdGFrZU9iamVjdChyMCl9ZmluYWxseXt3YXNtLl9fd2JpbmRnZW5fYWRkX3RvX3N0YWNrX3BvaW50ZXIoMTYpfX1zdGF0aWMgY3JlYXRlRGlyU3luYyhwYXRoKXt0cnl7Y29uc3QgcmV0cHRyPXdhc20uX193YmluZGdlbl9hZGRfdG9fc3RhY2tfcG9pbnRlcigtMTYpLHB0cjA9cGFzc1N0cmluZ1RvV2FzbTAocGF0aCx3YXNtLl9fd2JpbmRnZW5fZXhwb3J0LHdhc20uX193YmluZGdlbl9leHBvcnQyKSxsZW4wPVdBU01fVkVDVE9SX0xFTjt3YXNtLmZzX2NyZWF0ZURpclN5bmMocmV0cHRyLHB0cjAsbGVuMCk7dmFyIHIwPWdldERhdGFWaWV3TWVtb3J5MCgpLmdldEludDMyKHJldHB0ciswLCEwKTtpZihnZXREYXRhVmlld01lbW9yeTAoKS5nZXRJbnQzMihyZXRwdHIrNCwhMCkpdGhyb3cgdGFrZU9iamVjdChyMCl9ZmluYWxseXt3YXNtLl9fd2JpbmRnZW5fYWRkX3RvX3N0YWNrX3BvaW50ZXIoMTYpfX1zdGF0aWMgbWV0YWRhdGEocGF0aCl7Y29uc3QgcHRyMD1wYXNzU3RyaW5nVG9XYXNtMChwYXRoLHdhc20uX193YmluZGdlbl9leHBvcnQsd2FzbS5fX3diaW5kZ2VuX2V4cG9ydDIpLGxlbjA9V0FTTV9WRUNUT1JfTEVOO3JldHVybiB0YWtlT2JqZWN0KHdhc20uZnNfbWV0YWRhdGEocHRyMCxsZW4wKSl9c3RhdGljIG1ldGFkYXRhU3luYyhwYXRoKXt0cnl7Y29uc3QgcmV0cHRyPXdhc20uX193YmluZGdlbl9hZGRfdG9fc3RhY2tfcG9pbnRlcigtMTYpLHB0cjA9cGFzc1N0cmluZ1RvV2FzbTAocGF0aCx3YXNtLl9fd2JpbmRnZW5fZXhwb3J0LHdhc20uX193YmluZGdlbl9leHBvcnQyKSxsZW4wPVdBU01fVkVDVE9SX0xFTjt3YXNtLmZzX21ldGFkYXRhU3luYyhyZXRwdHIscHRyMCxsZW4wKTt2YXIgcjA9Z2V0RGF0YVZpZXdNZW1vcnkwKCkuZ2V0SW50MzIocmV0cHRyKzAsITApLHIxPWdldERhdGFWaWV3TWVtb3J5MCgpLmdldEludDMyKHJldHB0cis0LCEwKTtpZihnZXREYXRhVmlld01lbW9yeTAoKS5nZXRJbnQzMihyZXRwdHIrOCwhMCkpdGhyb3cgdGFrZU9iamVjdChyMSk7cmV0dXJuIE1ldGFkYXRhLl9fd3JhcChyMCl9ZmluYWxseXt3YXNtLl9fd2JpbmRnZW5fYWRkX3RvX3N0YWNrX3BvaW50ZXIoMTYpfX1zdGF0aWMgcmVhZChwYXRoKXtjb25zdCBwdHIwPXBhc3NTdHJpbmdUb1dhc20wKHBhdGgsd2FzbS5fX3diaW5kZ2VuX2V4cG9ydCx3YXNtLl9fd2JpbmRnZW5fZXhwb3J0MiksbGVuMD1XQVNNX1ZFQ1RPUl9MRU47cmV0dXJuIHRha2VPYmplY3Qod2FzbS5mc19yZWFkKHB0cjAsbGVuMCkpfXN0YXRpYyByZWFkRGlyKHBhdGgpe2NvbnN0IHB0cjA9cGFzc1N0cmluZ1RvV2FzbTAocGF0aCx3YXNtLl9fd2JpbmRnZW5fZXhwb3J0LHdhc20uX193YmluZGdlbl9leHBvcnQyKSxsZW4wPVdBU01fVkVDVE9SX0xFTjtyZXR1cm4gdGFrZU9iamVjdCh3YXNtLmZzX3JlYWREaXIocHRyMCxsZW4wKSl9c3RhdGljIHJlYWREaXJTeW5jKHBhdGgpe3RyeXtjb25zdCByZXRwdHI9d2FzbS5fX3diaW5kZ2VuX2FkZF90b19zdGFja19wb2ludGVyKC0xNikscHRyMD1wYXNzU3RyaW5nVG9XYXNtMChwYXRoLHdhc20uX193YmluZGdlbl9leHBvcnQsd2FzbS5fX3diaW5kZ2VuX2V4cG9ydDIpLGxlbjA9V0FTTV9WRUNUT1JfTEVOO3dhc20uZnNfcmVhZERpclN5bmMocmV0cHRyLHB0cjAsbGVuMCk7dmFyIHIwPWdldERhdGFWaWV3TWVtb3J5MCgpLmdldEludDMyKHJldHB0ciswLCEwKSxyMT1nZXREYXRhVmlld01lbW9yeTAoKS5nZXRJbnQzMihyZXRwdHIrNCwhMCkscjI9Z2V0RGF0YVZpZXdNZW1vcnkwKCkuZ2V0SW50MzIocmV0cHRyKzgsITApO2lmKGdldERhdGFWaWV3TWVtb3J5MCgpLmdldEludDMyKHJldHB0cisxMiwhMCkpdGhyb3cgdGFrZU9iamVjdChyMik7dmFyIHYyPWdldEFycmF5SnNWYWx1ZUZyb21XYXNtMChyMCxyMSkuc2xpY2UoKTtyZXR1cm4gd2FzbS5fX3diaW5kZ2VuX2V4cG9ydDQocjAsNCpyMSw0KSx2Mn1maW5hbGx5e3dhc20uX193YmluZGdlbl9hZGRfdG9fc3RhY2tfcG9pbnRlcigxNil9fXN0YXRpYyByZWFkU3luYyhwYXRoKXt0cnl7Y29uc3QgcmV0cHRyPXdhc20uX193YmluZGdlbl9hZGRfdG9fc3RhY2tfcG9pbnRlcigtMTYpLHB0cjA9cGFzc1N0cmluZ1RvV2FzbTAocGF0aCx3YXNtLl9fd2JpbmRnZW5fZXhwb3J0LHdhc20uX193YmluZGdlbl9leHBvcnQyKSxsZW4wPVdBU01fVkVDVE9SX0xFTjt3YXNtLmZzX3JlYWRTeW5jKHJldHB0cixwdHIwLGxlbjApO3ZhciByMD1nZXREYXRhVmlld01lbW9yeTAoKS5nZXRJbnQzMihyZXRwdHIrMCwhMCkscjE9Z2V0RGF0YVZpZXdNZW1vcnkwKCkuZ2V0SW50MzIocmV0cHRyKzQsITApO2lmKGdldERhdGFWaWV3TWVtb3J5MCgpLmdldEludDMyKHJldHB0cis4LCEwKSl0aHJvdyB0YWtlT2JqZWN0KHIxKTtyZXR1cm4gdGFrZU9iamVjdChyMCl9ZmluYWxseXt3YXNtLl9fd2JpbmRnZW5fYWRkX3RvX3N0YWNrX3BvaW50ZXIoMTYpfX1zdGF0aWMgcmVhZFRvU3RyaW5nKHBhdGgpe2NvbnN0IHB0cjA9cGFzc1N0cmluZ1RvV2FzbTAocGF0aCx3YXNtLl9fd2JpbmRnZW5fZXhwb3J0LHdhc20uX193YmluZGdlbl9leHBvcnQyKSxsZW4wPVdBU01fVkVDVE9SX0xFTjtyZXR1cm4gdGFrZU9iamVjdCh3YXNtLmZzX3JlYWRUb1N0cmluZyhwdHIwLGxlbjApKX1zdGF0aWMgcmVtb3ZlRGlyKHBhdGgscmVjdXJzaXZlKXtjb25zdCBwdHIwPXBhc3NTdHJpbmdUb1dhc20wKHBhdGgsd2FzbS5fX3diaW5kZ2VuX2V4cG9ydCx3YXNtLl9fd2JpbmRnZW5fZXhwb3J0MiksbGVuMD1XQVNNX1ZFQ1RPUl9MRU47cmV0dXJuIHRha2VPYmplY3Qod2FzbS5mc19yZW1vdmVEaXIocHRyMCxsZW4wLHJlY3Vyc2l2ZSkpfXN0YXRpYyByZW1vdmVEaXJTeW5jKHBhdGgscmVjdXJzaXZlKXt0cnl7Y29uc3QgcmV0cHRyPXdhc20uX193YmluZGdlbl9hZGRfdG9fc3RhY2tfcG9pbnRlcigtMTYpLHB0cjA9cGFzc1N0cmluZ1RvV2FzbTAocGF0aCx3YXNtLl9fd2JpbmRnZW5fZXhwb3J0LHdhc20uX193YmluZGdlbl9leHBvcnQyKSxsZW4wPVdBU01fVkVDVE9SX0xFTjt3YXNtLmZzX3JlbW92ZURpclN5bmMocmV0cHRyLHB0cjAsbGVuMCxyZWN1cnNpdmUpO3ZhciByMD1nZXREYXRhVmlld01lbW9yeTAoKS5nZXRJbnQzMihyZXRwdHIrMCwhMCk7aWYoZ2V0RGF0YVZpZXdNZW1vcnkwKCkuZ2V0SW50MzIocmV0cHRyKzQsITApKXRocm93IHRha2VPYmplY3QocjApfWZpbmFsbHl7d2FzbS5fX3diaW5kZ2VuX2FkZF90b19zdGFja19wb2ludGVyKDE2KX19c3RhdGljIHJlbW92ZUZpbGUocGF0aCl7Y29uc3QgcHRyMD1wYXNzU3RyaW5nVG9XYXNtMChwYXRoLHdhc20uX193YmluZGdlbl9leHBvcnQsd2FzbS5fX3diaW5kZ2VuX2V4cG9ydDIpLGxlbjA9V0FTTV9WRUNUT1JfTEVOO3JldHVybiB0YWtlT2JqZWN0KHdhc20uZnNfcmVtb3ZlRmlsZShwdHIwLGxlbjApKX1zdGF0aWMgcmVtb3ZlRmlsZVN5bmMocGF0aCl7dHJ5e2NvbnN0IHJldHB0cj13YXNtLl9fd2JpbmRnZW5fYWRkX3RvX3N0YWNrX3BvaW50ZXIoLTE2KSxwdHIwPXBhc3NTdHJpbmdUb1dhc20wKHBhdGgsd2FzbS5fX3diaW5kZ2VuX2V4cG9ydCx3YXNtLl9fd2JpbmRnZW5fZXhwb3J0MiksbGVuMD1XQVNNX1ZFQ1RPUl9MRU47d2FzbS5mc19yZW1vdmVGaWxlU3luYyhyZXRwdHIscHRyMCxsZW4wKTt2YXIgcjA9Z2V0RGF0YVZpZXdNZW1vcnkwKCkuZ2V0SW50MzIocmV0cHRyKzAsITApO2lmKGdldERhdGFWaWV3TWVtb3J5MCgpLmdldEludDMyKHJldHB0cis0LCEwKSl0aHJvdyB0YWtlT2JqZWN0KHIwKX1maW5hbGx5e3dhc20uX193YmluZGdlbl9hZGRfdG9fc3RhY2tfcG9pbnRlcigxNil9fXN0YXRpYyB3cml0ZShwYXRoLGNvbnRlbnQpe2NvbnN0IHB0cjA9cGFzc1N0cmluZ1RvV2FzbTAocGF0aCx3YXNtLl9fd2JpbmRnZW5fZXhwb3J0LHdhc20uX193YmluZGdlbl9leHBvcnQyKSxsZW4wPVdBU01fVkVDVE9SX0xFTjtyZXR1cm4gdGFrZU9iamVjdCh3YXNtLmZzX3dyaXRlKHB0cjAsbGVuMCxhZGRIZWFwT2JqZWN0KGNvbnRlbnQpKSl9c3RhdGljIHdyaXRlU3RyaW5nKHBhdGgsY29udGVudCl7Y29uc3QgcHRyMD1wYXNzU3RyaW5nVG9XYXNtMChwYXRoLHdhc20uX193YmluZGdlbl9leHBvcnQsd2FzbS5fX3diaW5kZ2VuX2V4cG9ydDIpLGxlbjA9V0FTTV9WRUNUT1JfTEVOLHB0cjE9cGFzc1N0cmluZ1RvV2FzbTAoY29udGVudCx3YXNtLl9fd2JpbmRnZW5fZXhwb3J0LHdhc20uX193YmluZGdlbl9leHBvcnQyKSxsZW4xPVdBU01fVkVDVE9SX0xFTjtyZXR1cm4gdGFrZU9iamVjdCh3YXNtLmZzX3dyaXRlU3RyaW5nKHB0cjAsbGVuMCxwdHIxLGxlbjEpKX1zdGF0aWMgd3JpdGVTeW5jKHBhdGgsY29udGVudCl7dHJ5e2NvbnN0IHJldHB0cj13YXNtLl9fd2JpbmRnZW5fYWRkX3RvX3N0YWNrX3BvaW50ZXIoLTE2KSxwdHIwPXBhc3NTdHJpbmdUb1dhc20wKHBhdGgsd2FzbS5fX3diaW5kZ2VuX2V4cG9ydCx3YXNtLl9fd2JpbmRnZW5fZXhwb3J0MiksbGVuMD1XQVNNX1ZFQ1RPUl9MRU47d2FzbS5mc193cml0ZVN5bmMocmV0cHRyLHB0cjAsbGVuMCxhZGRIZWFwT2JqZWN0KGNvbnRlbnQpKTt2YXIgcjA9Z2V0RGF0YVZpZXdNZW1vcnkwKCkuZ2V0SW50MzIocmV0cHRyKzAsITApO2lmKGdldERhdGFWaWV3TWVtb3J5MCgpLmdldEludDMyKHJldHB0cis0LCEwKSl0aHJvdyB0YWtlT2JqZWN0KHIwKX1maW5hbGx5e3dhc20uX193YmluZGdlbl9hZGRfdG9fc3RhY2tfcG9pbnRlcigxNil9fX1TeW1ib2wuZGlzcG9zZSYmKEZzLnByb3RvdHlwZVtTeW1ib2wuZGlzcG9zZV09RnMucHJvdG90eXBlLmZyZWUpO2NsYXNzIE1ldGFkYXRhe3N0YXRpYyBfX3dyYXAocHRyKXtwdHI+Pj49MDtjb25zdCBvYmo9T2JqZWN0LmNyZWF0ZShNZXRhZGF0YS5wcm90b3R5cGUpO3JldHVybiBvYmouX193YmdfcHRyPXB0cixNZXRhZGF0YUZpbmFsaXphdGlvbi5yZWdpc3RlcihvYmosb2JqLl9fd2JnX3B0cixvYmopLG9ian10b0pTT04oKXtyZXR1cm57ZmlsZV9zaXplOnRoaXMuZmlsZV9zaXplLHR5cGU6dGhpcy50eXBlfX10b1N0cmluZygpe3JldHVybiBKU09OLnN0cmluZ2lmeSh0aGlzKX1fX2Rlc3Ryb3lfaW50b19yYXcoKXtjb25zdCBwdHI9dGhpcy5fX3diZ19wdHI7cmV0dXJuIHRoaXMuX193YmdfcHRyPTAsTWV0YWRhdGFGaW5hbGl6YXRpb24udW5yZWdpc3Rlcih0aGlzKSxwdHJ9ZnJlZSgpe2NvbnN0IHB0cj10aGlzLl9fZGVzdHJveV9pbnRvX3JhdygpO3dhc20uX193YmdfbWV0YWRhdGFfZnJlZShwdHIsMCl9Z2V0IGZpbGVfc2l6ZSgpe2NvbnN0IHJldD13YXNtLl9fd2JnX2dldF9tZXRhZGF0YV9maWxlX3NpemUodGhpcy5fX3diZ19wdHIpO3JldHVybiBCaWdJbnQuYXNVaW50Tig2NCxyZXQpfWdldCB0eXBlKCl7Y29uc3QgcmV0PXdhc20uX193YmdfZ2V0X21ldGFkYXRhX3R5cGUodGhpcy5fX3diZ19wdHIpO3JldHVybiBfX3diaW5kZ2VuX2VudW1fRGlyRW50cnlUeXBlW3JldF19c2V0IGZpbGVfc2l6ZShhcmcwKXt3YXNtLl9fd2JnX3NldF9tZXRhZGF0YV9maWxlX3NpemUodGhpcy5fX3diZ19wdHIsYXJnMCl9c2V0IHR5cGUoYXJnMCl7d2FzbS5fX3diZ19zZXRfbWV0YWRhdGFfdHlwZSh0aGlzLl9fd2JnX3B0ciwoX193YmluZGdlbl9lbnVtX0RpckVudHJ5VHlwZS5pbmRleE9mKGFyZzApKzF8fDMpLTEpfX1TeW1ib2wuZGlzcG9zZSYmKE1ldGFkYXRhLnByb3RvdHlwZVtTeW1ib2wuZGlzcG9zZV09TWV0YWRhdGEucHJvdG90eXBlLmZyZWUpO2NsYXNzIFByb2plY3R7X19kZXN0cm95X2ludG9fcmF3KCl7Y29uc3QgcHRyPXRoaXMuX193YmdfcHRyO3JldHVybiB0aGlzLl9fd2JnX3B0cj0wLFByb2plY3RGaW5hbGl6YXRpb24udW5yZWdpc3Rlcih0aGlzKSxwdHJ9ZnJlZSgpe2NvbnN0IHB0cj10aGlzLl9fZGVzdHJveV9pbnRvX3JhdygpO3dhc20uX193YmdfcHJvamVjdF9mcmVlKHB0ciwwKX1zdGF0aWMgYnVpbGQob3B0aW9ucyl7X2Fzc2VydENsYXNzKG9wdGlvbnMsQnVpbGRPcHRpb25zKTt2YXIgcHRyMD1vcHRpb25zLl9fZGVzdHJveV9pbnRvX3JhdygpO3JldHVybiB0YWtlT2JqZWN0KHdhc20ucHJvamVjdF9idWlsZChwdHIwKSl9c3RhdGljIGdldCBjd2QoKXtsZXQgZGVmZXJyZWQxXzAsZGVmZXJyZWQxXzE7dHJ5e2NvbnN0IHJldHB0cj13YXNtLl9fd2JpbmRnZW5fYWRkX3RvX3N0YWNrX3BvaW50ZXIoLTE2KTt3YXNtLnByb2plY3RfY3dkKHJldHB0cik7dmFyIHIwPWdldERhdGFWaWV3TWVtb3J5MCgpLmdldEludDMyKHJldHB0ciswLCEwKSxyMT1nZXREYXRhVmlld01lbW9yeTAoKS5nZXRJbnQzMihyZXRwdHIrNCwhMCk7cmV0dXJuIGRlZmVycmVkMV8wPXIwLGRlZmVycmVkMV8xPXIxLGdldFN0cmluZ0Zyb21XYXNtMChyMCxyMSl9ZmluYWxseXt3YXNtLl9fd2JpbmRnZW5fYWRkX3RvX3N0YWNrX3BvaW50ZXIoMTYpLHdhc20uX193YmluZGdlbl9leHBvcnQ0KGRlZmVycmVkMV8wLGRlZmVycmVkMV8xLDEpfX1zdGF0aWMgZGVwcyhyZWdpc3RyeSxjb25jdXJyZW5jeSl7dmFyIHB0cjA9aXNMaWtlTm9uZShyZWdpc3RyeSk/MDpwYXNzU3RyaW5nVG9XYXNtMChyZWdpc3RyeSx3YXNtLl9fd2JpbmRnZW5fZXhwb3J0LHdhc20uX193YmluZGdlbl9leHBvcnQyKSxsZW4wPVdBU01fVkVDVE9SX0xFTjtyZXR1cm4gdGFrZU9iamVjdCh3YXNtLnByb2plY3RfZGVwcyhwdHIwLGxlbjAsaXNMaWtlTm9uZShjb25jdXJyZW5jeSk/NDI5NDk2NzI5Nzpjb25jdXJyZW5jeT4+PjApKX1zdGF0aWMgZW50cnlwb2ludHNTdWJzY3JpYmUoY29uZmlnLGNhbGxiYWNrKXtyZXR1cm4gdGFrZU9iamVjdCh3YXNtLnByb2plY3RfZW50cnlwb2ludHNTdWJzY3JpYmUoYWRkSGVhcE9iamVjdChjb25maWcpLGFkZEhlYXBPYmplY3QoY2FsbGJhY2spKSl9c3RhdGljIGd6aXAoZmlsZXMpe3JldHVybiB0YWtlT2JqZWN0KHdhc20ucHJvamVjdF9nemlwKGFkZEhlYXBPYmplY3QoZmlsZXMpKSl9c3RhdGljIGhtckV2ZW50cyhpZGVudGlmaWVyLGNhbGxiYWNrKXtjb25zdCBwdHIwPXBhc3NTdHJpbmdUb1dhc20wKGlkZW50aWZpZXIsd2FzbS5fX3diaW5kZ2VuX2V4cG9ydCx3YXNtLl9fd2JpbmRnZW5fZXhwb3J0MiksbGVuMD1XQVNNX1ZFQ1RPUl9MRU47cmV0dXJuIHRha2VPYmplY3Qod2FzbS5wcm9qZWN0X2htckV2ZW50cyhwdHIwLGxlbjAsYWRkSGVhcE9iamVjdChjYWxsYmFjaykpKX1zdGF0aWMgaW5pdCh0aHJlYWRfdXJsKXtjb25zdCBwdHIwPXBhc3NTdHJpbmdUb1dhc20wKHRocmVhZF91cmwsd2FzbS5fX3diaW5kZ2VuX2V4cG9ydCx3YXNtLl9fd2JpbmRnZW5fZXhwb3J0MiksbGVuMD1XQVNNX1ZFQ1RPUl9MRU47d2FzbS5wcm9qZWN0X2luaXQocHRyMCxsZW4wKX1zdGF0aWMgaW5zdGFsbChwYWNrYWdlX2xvY2ssbWF4X2NvbmN1cnJlbnRfZG93bmxvYWRzKXtjb25zdCBwdHIwPXBhc3NTdHJpbmdUb1dhc20wKHBhY2thZ2VfbG9jayx3YXNtLl9fd2JpbmRnZW5fZXhwb3J0LHdhc20uX193YmluZGdlbl9leHBvcnQyKSxsZW4wPVdBU01fVkVDVE9SX0xFTjtyZXR1cm4gdGFrZU9iamVjdCh3YXNtLnByb2plY3RfaW5zdGFsbChwdHIwLGxlbjAsaXNMaWtlTm9uZShtYXhfY29uY3VycmVudF9kb3dubG9hZHMpPzQyOTQ5NjcyOTc6bWF4X2NvbmN1cnJlbnRfZG93bmxvYWRzPj4+MCkpfXN0YXRpYyBzZXRDd2QocGF0aCl7Y29uc3QgcHRyMD1wYXNzU3RyaW5nVG9XYXNtMChwYXRoLHdhc20uX193YmluZGdlbl9leHBvcnQsd2FzbS5fX3diaW5kZ2VuX2V4cG9ydDIpLGxlbjA9V0FTTV9WRUNUT1JfTEVOO3dhc20ucHJvamVjdF9zZXRDd2QocHRyMCxsZW4wKX1zdGF0aWMgc2lnTWQ1KGNvbnRlbnQpe3JldHVybiB0YWtlT2JqZWN0KHdhc20ucHJvamVjdF9zaWdNZDUoYWRkSGVhcE9iamVjdChjb250ZW50KSkpfXN0YXRpYyB1cGRhdGVJbmZvU3Vic2NyaWJlKGFnZ3JlZ2F0aW9uX21zLGNhbGxiYWNrKXt3YXNtLnByb2plY3RfdXBkYXRlSW5mb1N1YnNjcmliZShhZ2dyZWdhdGlvbl9tcyxhZGRIZWFwT2JqZWN0KGNhbGxiYWNrKSl9c3RhdGljIHdyaXRlQWxsVG9EaXNrKGNhbGxiYWNrKXt3YXNtLnByb2plY3Rfd3JpdGVBbGxUb0Rpc2soYWRkSGVhcE9iamVjdChjYWxsYmFjaykpfX1TeW1ib2wuZGlzcG9zZSYmKFByb2plY3QucHJvdG90eXBlW1N5bWJvbC5kaXNwb3NlXT1Qcm9qZWN0LnByb3RvdHlwZS5mcmVlKTtjbGFzcyBSb290VGFza3tzdGF0aWMgX193cmFwKHB0cil7cHRyPj4+PTA7Y29uc3Qgb2JqPU9iamVjdC5jcmVhdGUoUm9vdFRhc2sucHJvdG90eXBlKTtyZXR1cm4gb2JqLl9fd2JnX3B0cj1wdHIsUm9vdFRhc2tGaW5hbGl6YXRpb24ucmVnaXN0ZXIob2JqLG9iai5fX3diZ19wdHIsb2JqKSxvYmp9X19kZXN0cm95X2ludG9fcmF3KCl7Y29uc3QgcHRyPXRoaXMuX193YmdfcHRyO3JldHVybiB0aGlzLl9fd2JnX3B0cj0wLFJvb3RUYXNrRmluYWxpemF0aW9uLnVucmVnaXN0ZXIodGhpcykscHRyfWZyZWUoKXtjb25zdCBwdHI9dGhpcy5fX2Rlc3Ryb3lfaW50b19yYXcoKTt3YXNtLl9fd2JnX3Jvb3R0YXNrX2ZyZWUocHRyLDApfX1TeW1ib2wuZGlzcG9zZSYmKFJvb3RUYXNrLnByb3RvdHlwZVtTeW1ib2wuZGlzcG9zZV09Um9vdFRhc2sucHJvdG90eXBlLmZyZWUpO2NsYXNzIFdhc21UYXNrTWVzc2FnZXtzdGF0aWMgX193cmFwKHB0cil7cHRyPj4+PTA7Y29uc3Qgb2JqPU9iamVjdC5jcmVhdGUoV2FzbVRhc2tNZXNzYWdlLnByb3RvdHlwZSk7cmV0dXJuIG9iai5fX3diZ19wdHI9cHRyLFdhc21UYXNrTWVzc2FnZUZpbmFsaXphdGlvbi5yZWdpc3RlcihvYmosb2JqLl9fd2JnX3B0cixvYmopLG9ian1fX2Rlc3Ryb3lfaW50b19yYXcoKXtjb25zdCBwdHI9dGhpcy5fX3diZ19wdHI7cmV0dXJuIHRoaXMuX193YmdfcHRyPTAsV2FzbVRhc2tNZXNzYWdlRmluYWxpemF0aW9uLnVucmVnaXN0ZXIodGhpcykscHRyfWZyZWUoKXtjb25zdCBwdHI9dGhpcy5fX2Rlc3Ryb3lfaW50b19yYXcoKTt3YXNtLl9fd2JnX3dhc210YXNrbWVzc2FnZV9mcmVlKHB0ciwwKX1nZXQgdGFza0lkKCl7cmV0dXJuIHdhc20uX193YmdfZ2V0X3dhc210YXNrbWVzc2FnZV90YXNrSWQodGhpcy5fX3diZ19wdHIpPj4+MH1zZXQgdGFza0lkKGFyZzApe3dhc20uX193Ymdfc2V0X3dhc210YXNrbWVzc2FnZV90YXNrSWQodGhpcy5fX3diZ19wdHIsYXJnMCl9Z2V0IGRhdGEoKXtyZXR1cm4gdGFrZU9iamVjdCh3YXNtLndhc210YXNrbWVzc2FnZV9kYXRhKHRoaXMuX193YmdfcHRyKSl9fVN5bWJvbC5kaXNwb3NlJiYoV2FzbVRhc2tNZXNzYWdlLnByb3RvdHlwZVtTeW1ib2wuZGlzcG9zZV09V2FzbVRhc2tNZXNzYWdlLnByb3RvdHlwZS5mcmVlKTtjbGFzcyBXZWJXb3JrZXJDcmVhdGlvbntzdGF0aWMgX193cmFwKHB0cil7cHRyPj4+PTA7Y29uc3Qgb2JqPU9iamVjdC5jcmVhdGUoV2ViV29ya2VyQ3JlYXRpb24ucHJvdG90eXBlKTtyZXR1cm4gb2JqLl9fd2JnX3B0cj1wdHIsV2ViV29ya2VyQ3JlYXRpb25GaW5hbGl6YXRpb24ucmVnaXN0ZXIob2JqLG9iai5fX3diZ19wdHIsb2JqKSxvYmp9X19kZXN0cm95X2ludG9fcmF3KCl7Y29uc3QgcHRyPXRoaXMuX193YmdfcHRyO3JldHVybiB0aGlzLl9fd2JnX3B0cj0wLFdlYldvcmtlckNyZWF0aW9uRmluYWxpemF0aW9uLnVucmVnaXN0ZXIodGhpcykscHRyfWZyZWUoKXtjb25zdCBwdHI9dGhpcy5fX2Rlc3Ryb3lfaW50b19yYXcoKTt3YXNtLl9fd2JnX3dlYndvcmtlcmNyZWF0aW9uX2ZyZWUocHRyLDApfWdldCBvcHRpb25zKCl7Y29uc3QgcmV0PXdhc20uX193YmdfZ2V0X3dlYndvcmtlcmNyZWF0aW9uX29wdGlvbnModGhpcy5fX3diZ19wdHIpO3JldHVybiBXZWJXb3JrZXJPcHRpb25zLl9fd3JhcChyZXQpfXNldCBvcHRpb25zKGFyZzApe19hc3NlcnRDbGFzcyhhcmcwLFdlYldvcmtlck9wdGlvbnMpO3ZhciBwdHIwPWFyZzAuX19kZXN0cm95X2ludG9fcmF3KCk7d2FzbS5fX3diZ19zZXRfd2Vid29ya2VyY3JlYXRpb25fb3B0aW9ucyh0aGlzLl9fd2JnX3B0cixwdHIwKX19U3ltYm9sLmRpc3Bvc2UmJihXZWJXb3JrZXJDcmVhdGlvbi5wcm90b3R5cGVbU3ltYm9sLmRpc3Bvc2VdPVdlYldvcmtlckNyZWF0aW9uLnByb3RvdHlwZS5mcmVlKTtjbGFzcyBXZWJXb3JrZXJPcHRpb25ze3N0YXRpYyBfX3dyYXAocHRyKXtwdHI+Pj49MDtjb25zdCBvYmo9T2JqZWN0LmNyZWF0ZShXZWJXb3JrZXJPcHRpb25zLnByb3RvdHlwZSk7cmV0dXJuIG9iai5fX3diZ19wdHI9cHRyLFdlYldvcmtlck9wdGlvbnNGaW5hbGl6YXRpb24ucmVnaXN0ZXIob2JqLG9iai5fX3diZ19wdHIsb2JqKSxvYmp9X19kZXN0cm95X2ludG9fcmF3KCl7Y29uc3QgcHRyPXRoaXMuX193YmdfcHRyO3JldHVybiB0aGlzLl9fd2JnX3B0cj0wLFdlYldvcmtlck9wdGlvbnNGaW5hbGl6YXRpb24udW5yZWdpc3Rlcih0aGlzKSxwdHJ9ZnJlZSgpe2NvbnN0IHB0cj10aGlzLl9fZGVzdHJveV9pbnRvX3JhdygpO3dhc20uX193Ymdfd2Vid29ya2Vyb3B0aW9uc19mcmVlKHB0ciwwKX1nZXQgY3dkKCl7bGV0IGRlZmVycmVkMV8wLGRlZmVycmVkMV8xO3RyeXtjb25zdCByZXRwdHI9d2FzbS5fX3diaW5kZ2VuX2FkZF90b19zdGFja19wb2ludGVyKC0xNik7d2FzbS5fX3diZ19nZXRfd2Vid29ya2Vyb3B0aW9uc19jd2QocmV0cHRyLHRoaXMuX193YmdfcHRyKTt2YXIgcjA9Z2V0RGF0YVZpZXdNZW1vcnkwKCkuZ2V0SW50MzIocmV0cHRyKzAsITApLHIxPWdldERhdGFWaWV3TWVtb3J5MCgpLmdldEludDMyKHJldHB0cis0LCEwKTtyZXR1cm4gZGVmZXJyZWQxXzA9cjAsZGVmZXJyZWQxXzE9cjEsZ2V0U3RyaW5nRnJvbVdhc20wKHIwLHIxKX1maW5hbGx5e3dhc20uX193YmluZGdlbl9hZGRfdG9fc3RhY2tfcG9pbnRlcigxNiksd2FzbS5fX3diaW5kZ2VuX2V4cG9ydDQoZGVmZXJyZWQxXzAsZGVmZXJyZWQxXzEsMSl9fWdldCBmaWxlbmFtZSgpe2xldCBkZWZlcnJlZDFfMCxkZWZlcnJlZDFfMTt0cnl7Y29uc3QgcmV0cHRyPXdhc20uX193YmluZGdlbl9hZGRfdG9fc3RhY2tfcG9pbnRlcigtMTYpO3dhc20uX193YmdfZ2V0X3dlYndvcmtlcm9wdGlvbnNfZmlsZW5hbWUocmV0cHRyLHRoaXMuX193YmdfcHRyKTt2YXIgcjA9Z2V0RGF0YVZpZXdNZW1vcnkwKCkuZ2V0SW50MzIocmV0cHRyKzAsITApLHIxPWdldERhdGFWaWV3TWVtb3J5MCgpLmdldEludDMyKHJldHB0cis0LCEwKTtyZXR1cm4gZGVmZXJyZWQxXzA9cjAsZGVmZXJyZWQxXzE9cjEsZ2V0U3RyaW5nRnJvbVdhc20wKHIwLHIxKX1maW5hbGx5e3dhc20uX193YmluZGdlbl9hZGRfdG9fc3RhY2tfcG9pbnRlcigxNiksd2FzbS5fX3diaW5kZ2VuX2V4cG9ydDQoZGVmZXJyZWQxXzAsZGVmZXJyZWQxXzEsMSl9fXNldCBjd2QoYXJnMCl7Y29uc3QgcHRyMD1wYXNzU3RyaW5nVG9XYXNtMChhcmcwLHdhc20uX193YmluZGdlbl9leHBvcnQsd2FzbS5fX3diaW5kZ2VuX2V4cG9ydDIpLGxlbjA9V0FTTV9WRUNUT1JfTEVOO3dhc20uX193Ymdfc2V0X3dlYndvcmtlcm9wdGlvbnNfY3dkKHRoaXMuX193YmdfcHRyLHB0cjAsbGVuMCl9c2V0IGZpbGVuYW1lKGFyZzApe2NvbnN0IHB0cjA9cGFzc1N0cmluZ1RvV2FzbTAoYXJnMCx3YXNtLl9fd2JpbmRnZW5fZXhwb3J0LHdhc20uX193YmluZGdlbl9leHBvcnQyKSxsZW4wPVdBU01fVkVDVE9SX0xFTjt3YXNtLl9fd2JnX3NldF93ZWJ3b3JrZXJvcHRpb25zX2ZpbGVuYW1lKHRoaXMuX193YmdfcHRyLHB0cjAsbGVuMCl9fVN5bWJvbC5kaXNwb3NlJiYoV2ViV29ya2VyT3B0aW9ucy5wcm90b3R5cGVbU3ltYm9sLmRpc3Bvc2VdPVdlYldvcmtlck9wdGlvbnMucHJvdG90eXBlLmZyZWUpO2NsYXNzIFdlYldvcmtlclRlcm1pbmF0aW9ue3N0YXRpYyBfX3dyYXAocHRyKXtwdHI+Pj49MDtjb25zdCBvYmo9T2JqZWN0LmNyZWF0ZShXZWJXb3JrZXJUZXJtaW5hdGlvbi5wcm90b3R5cGUpO3JldHVybiBvYmouX193YmdfcHRyPXB0cixXZWJXb3JrZXJUZXJtaW5hdGlvbkZpbmFsaXphdGlvbi5yZWdpc3RlcihvYmosb2JqLl9fd2JnX3B0cixvYmopLG9ian1fX2Rlc3Ryb3lfaW50b19yYXcoKXtjb25zdCBwdHI9dGhpcy5fX3diZ19wdHI7cmV0dXJuIHRoaXMuX193YmdfcHRyPTAsV2ViV29ya2VyVGVybWluYXRpb25GaW5hbGl6YXRpb24udW5yZWdpc3Rlcih0aGlzKSxwdHJ9ZnJlZSgpe2NvbnN0IHB0cj10aGlzLl9fZGVzdHJveV9pbnRvX3JhdygpO3dhc20uX193Ymdfd2Vid29ya2VydGVybWluYXRpb25fZnJlZShwdHIsMCl9Z2V0IG9wdGlvbnMoKXtjb25zdCByZXQ9d2FzbS5fX3diZ19nZXRfd2Vid29ya2VydGVybWluYXRpb25fb3B0aW9ucyh0aGlzLl9fd2JnX3B0cik7cmV0dXJuIFdlYldvcmtlck9wdGlvbnMuX193cmFwKHJldCl9Z2V0IHdvcmtlcklkKCl7cmV0dXJuIHdhc20uX193YmdfZ2V0X3dlYndvcmtlcnRlcm1pbmF0aW9uX3dvcmtlcklkKHRoaXMuX193YmdfcHRyKT4+PjB9c2V0IG9wdGlvbnMoYXJnMCl7X2Fzc2VydENsYXNzKGFyZzAsV2ViV29ya2VyT3B0aW9ucyk7dmFyIHB0cjA9YXJnMC5fX2Rlc3Ryb3lfaW50b19yYXcoKTt3YXNtLl9fd2JnX3NldF93ZWJ3b3JrZXJ0ZXJtaW5hdGlvbl9vcHRpb25zKHRoaXMuX193YmdfcHRyLHB0cjApfXNldCB3b3JrZXJJZChhcmcwKXt3YXNtLl9fd2JnX3NldF93ZWJ3b3JrZXJ0ZXJtaW5hdGlvbl93b3JrZXJJZCh0aGlzLl9fd2JnX3B0cixhcmcwKX19ZnVuY3Rpb24gZ2V0V2FzbU1lbW9yeSgpe3JldHVybiB0YWtlT2JqZWN0KHdhc20uZ2V0V2FzbU1lbW9yeSgpKX1mdW5jdGlvbiBnZXRXYXNtTW9kdWxlKCl7cmV0dXJuIHRha2VPYmplY3Qod2FzbS5nZXRXYXNtTW9kdWxlKCkpfWZ1bmN0aW9uIGluaXRMb2dGaWx0ZXIoZmlsdGVyKXtjb25zdCBwdHIwPXBhc3NTdHJpbmdUb1dhc20wKGZpbHRlcix3YXNtLl9fd2JpbmRnZW5fZXhwb3J0LHdhc20uX193YmluZGdlbl9leHBvcnQyKSxsZW4wPVdBU01fVkVDVE9SX0xFTjt3YXNtLmluaXRMb2dGaWx0ZXIocHRyMCxsZW4wKX1mdW5jdGlvbiBpbml0X3BhY2soKXt3YXNtLmluaXRfcGFjaygpfWZ1bmN0aW9uIHJlY3ZUYXNrTWVzc2FnZUluV29ya2VyKHdvcmtlcl9pZCl7cmV0dXJuIHRha2VPYmplY3Qod2FzbS5yZWN2VGFza01lc3NhZ2VJbldvcmtlcih3b3JrZXJfaWQpKX1mdW5jdGlvbiByZWdpc3RlcldvcmtlclNjaGVkdWxlcihjcmVhdG9yLHRlcm1pbmF0b3Ipe3dhc20ucmVnaXN0ZXJXb3JrZXJTY2hlZHVsZXIoYWRkSGVhcE9iamVjdChjcmVhdG9yKSxhZGRIZWFwT2JqZWN0KHRlcm1pbmF0b3IpKX1mdW5jdGlvbiBzZW5kVGFza01lc3NhZ2UobWVzc2FnZSl7cmV0dXJuIHRha2VPYmplY3Qod2FzbS5zZW5kVGFza01lc3NhZ2UoYWRkSGVhcE9iamVjdChtZXNzYWdlKSkpfWZ1bmN0aW9uIHdhc21fdGhyZWFkX2VudHJ5X3BvaW50KHB0cil7d2FzbS53YXNtX3RocmVhZF9lbnRyeV9wb2ludChwdHIpfWZ1bmN0aW9uIHdvcmtlckNyZWF0ZWQod29ya2VyX2lkKXt3YXNtLndvcmtlckNyZWF0ZWQod29ya2VyX2lkKX1mdW5jdGlvbiBfX3diZ19nZXRfaW1wb3J0cyhtZW1vcnkpe2NvbnN0IGltcG9ydDA9e19fcHJvdG9fXzpudWxsLF9fd2JnX0Vycm9yXzhjNGU0M2ZlNzQ1NTlkNzM6ZnVuY3Rpb24oYXJnMCxhcmcxKXtyZXR1cm4gYWRkSGVhcE9iamVjdChFcnJvcihnZXRTdHJpbmdGcm9tV2FzbTAoYXJnMCxhcmcxKSkpfSxfX3diZ19fX3diaW5kZ2VuX2RlYnVnX3N0cmluZ18wYmM4NDgyYzZlMzUwOGFlOmZ1bmN0aW9uKGFyZzAsYXJnMSl7Y29uc3QgcHRyMT1wYXNzU3RyaW5nVG9XYXNtMChkZWJ1Z1N0cmluZyhnZXRPYmplY3QoYXJnMSkpLHdhc20uX193YmluZGdlbl9leHBvcnQsd2FzbS5fX3diaW5kZ2VuX2V4cG9ydDIpLGxlbjE9V0FTTV9WRUNUT1JfTEVOO2dldERhdGFWaWV3TWVtb3J5MCgpLnNldEludDMyKGFyZzArNCxsZW4xLCEwKSxnZXREYXRhVmlld01lbW9yeTAoKS5zZXRJbnQzMihhcmcwKzAscHRyMSwhMCl9LF9fd2JnX19fd2JpbmRnZW5faXNfZnVuY3Rpb25fMDA5NWE3M2I4YjE1NmY3NjpmdW5jdGlvbihhcmcwKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgZ2V0T2JqZWN0KGFyZzApfSxfX3diZ19fX3diaW5kZ2VuX2lzX251bGxfYWMzNGY1MDAzOTkxNzU5YTpmdW5jdGlvbihhcmcwKXtyZXR1cm4gbnVsbD09PWdldE9iamVjdChhcmcwKX0sX193YmdfX193YmluZGdlbl9pc19vYmplY3RfNWFlOGU1ODgwZjJjMWZiZDpmdW5jdGlvbihhcmcwKXtjb25zdCB2YWw9Z2V0T2JqZWN0KGFyZzApO3JldHVybiJvYmplY3QiPT10eXBlb2YgdmFsJiZudWxsIT09dmFsfSxfX3diZ19fX3diaW5kZ2VuX2lzX3VuZGVmaW5lZF85ZTRkOTI1MzRjNDJkNzc4OmZ1bmN0aW9uKGFyZzApe3JldHVybiB2b2lkIDA9PT1nZXRPYmplY3QoYXJnMCl9LF9fd2JnX19fd2JpbmRnZW5fbWVtb3J5X2JkMWZiY2YyMWZiZWYzYzg6ZnVuY3Rpb24oKXtyZXR1cm4gYWRkSGVhcE9iamVjdCh3YXNtLm1lbW9yeSl9LF9fd2JnX19fd2JpbmRnZW5fbW9kdWxlX2Y2YjgwNTJkNzljMWNjMTY6ZnVuY3Rpb24oKXtyZXR1cm4gYWRkSGVhcE9iamVjdCh3YXNtTW9kdWxlKX0sX193YmdfX193YmluZGdlbl9udW1iZXJfZ2V0XzhmZjQyNTU1MTZjY2FkM2U6ZnVuY3Rpb24oYXJnMCxhcmcxKXtjb25zdCBvYmo9Z2V0T2JqZWN0KGFyZzEpLHJldD0ibnVtYmVyIj09dHlwZW9mIG9iaj9vYmo6dm9pZCAwO2dldERhdGFWaWV3TWVtb3J5MCgpLnNldEZsb2F0NjQoYXJnMCs4LGlzTGlrZU5vbmUocmV0KT8wOnJldCwhMCksZ2V0RGF0YVZpZXdNZW1vcnkwKCkuc2V0SW50MzIoYXJnMCswLCFpc0xpa2VOb25lKHJldCksITApfSxfX3diZ19fX3diaW5kZ2VuX3JldGhyb3dfMDU1MjVjNTY3ZjE1NDQ3MjpmdW5jdGlvbihhcmcwKXt0aHJvdyB0YWtlT2JqZWN0KGFyZzApfSxfX3diZ19fX3diaW5kZ2VuX3N0cmluZ19nZXRfNzJmYjY5NjIwMmM1NjcyOTpmdW5jdGlvbihhcmcwLGFyZzEpe2NvbnN0IG9iaj1nZXRPYmplY3QoYXJnMSkscmV0PSJzdHJpbmciPT10eXBlb2Ygb2JqP29iajp2b2lkIDA7dmFyIHB0cjE9aXNMaWtlTm9uZShyZXQpPzA6cGFzc1N0cmluZ1RvV2FzbTAocmV0LHdhc20uX193YmluZGdlbl9leHBvcnQsd2FzbS5fX3diaW5kZ2VuX2V4cG9ydDIpLGxlbjE9V0FTTV9WRUNUT1JfTEVOO2dldERhdGFWaWV3TWVtb3J5MCgpLnNldEludDMyKGFyZzArNCxsZW4xLCEwKSxnZXREYXRhVmlld01lbW9yeTAoKS5zZXRJbnQzMihhcmcwKzAscHRyMSwhMCl9LF9fd2JnX19fd2JpbmRnZW5fdGhyb3dfYmUyODlkNTAzNGVkMjcxYjpmdW5jdGlvbihhcmcwLGFyZzEpe3Rocm93IG5ldyBFcnJvcihnZXRTdHJpbmdGcm9tV2FzbTAoYXJnMCxhcmcxKSl9LF9fd2JnX193YmdfY2JfdW5yZWZfZDliODdmZjc5ODJlM2IyMTpmdW5jdGlvbihhcmcwKXtnZXRPYmplY3QoYXJnMCkuX3diZ19jYl91bnJlZigpfSxfX3diZ19hYm9ydF8yZjA1ODRlMDNlOGUzOTUwOmZ1bmN0aW9uKGFyZzApe2dldE9iamVjdChhcmcwKS5hYm9ydCgpfSxfX3diZ19hYm9ydF9kNTQ5YjkyZDNjNjY1ZGUxOmZ1bmN0aW9uKGFyZzAsYXJnMSl7Z2V0T2JqZWN0KGFyZzApLmFib3J0KGdldE9iamVjdChhcmcxKSl9LF9fd2JnX2FwcGVuZF9hOTkyY2NjMzdhYTYyZGM0OmZ1bmN0aW9uKCl7cmV0dXJuIGhhbmRsZUVycm9yKGZ1bmN0aW9uKGFyZzAsYXJnMSxhcmcyLGFyZzMsYXJnNCl7Z2V0T2JqZWN0KGFyZzApLmFwcGVuZChnZXRTdHJpbmdGcm9tV2FzbTAoYXJnMSxhcmcyKSxnZXRTdHJpbmdGcm9tV2FzbTAoYXJnMyxhcmc0KSl9LGFyZ3VtZW50cyl9LF9fd2JnX2FycmF5QnVmZmVyXzA1Y2UxYWYyM2U5MDY0ZTg6ZnVuY3Rpb24oYXJnMCl7cmV0dXJuIGFkZEhlYXBPYmplY3QoZ2V0T2JqZWN0KGFyZzApLmFycmF5QnVmZmVyKCkpfSxfX3diZ19hcnJheUJ1ZmZlcl9iYjU0MDc2MTY2MDA2YzM5OmZ1bmN0aW9uKCl7cmV0dXJuIGhhbmRsZUVycm9yKGZ1bmN0aW9uKGFyZzApe3JldHVybiBhZGRIZWFwT2JqZWN0KGdldE9iamVjdChhcmcwKS5hcnJheUJ1ZmZlcigpKX0sYXJndW1lbnRzKX0sX193YmdfYXN5bmNfNzlmMmE2MWY5ZDBiMzFjZjpmdW5jdGlvbihhcmcwKXtyZXR1cm4gZ2V0T2JqZWN0KGFyZzApLmFzeW5jfSxfX3diZ19idWZmZXJfN2I1ZjUzZTQ2NTU3ZDhmMTpmdW5jdGlvbihhcmcwKXtyZXR1cm4gYWRkSGVhcE9iamVjdChnZXRPYmplY3QoYXJnMCkuYnVmZmVyKX0sX193YmdfY2FsbF8zODllZmUyODQzNWE5Mzg4OmZ1bmN0aW9uKCl7cmV0dXJuIGhhbmRsZUVycm9yKGZ1bmN0aW9uKGFyZzAsYXJnMSl7cmV0dXJuIGFkZEhlYXBPYmplY3QoZ2V0T2JqZWN0KGFyZzApLmNhbGwoZ2V0T2JqZWN0KGFyZzEpKSl9LGFyZ3VtZW50cyl9LF9fd2JnX2NhbGxfNDcwOGUwYzEzYmRjOGU5NTpmdW5jdGlvbigpe3JldHVybiBoYW5kbGVFcnJvcihmdW5jdGlvbihhcmcwLGFyZzEsYXJnMil7cmV0dXJuIGFkZEhlYXBPYmplY3QoZ2V0T2JqZWN0KGFyZzApLmNhbGwoZ2V0T2JqZWN0KGFyZzEpLGdldE9iamVjdChhcmcyKSkpfSxhcmd1bWVudHMpfSxfX3diZ19jaGFuZ2VkSGFuZGxlXzEyMzY5NmVhZWFmZjMyZDc6ZnVuY3Rpb24oYXJnMCl7Y29uc3QgcmV0PWdldE9iamVjdChhcmcwKS5jaGFuZ2VkSGFuZGxlO3JldHVybiBpc0xpa2VOb25lKHJldCk/MDphZGRIZWFwT2JqZWN0KHJldCl9LF9fd2JnX2NsZWFyVGltZW91dF83YTQyYjQ5Nzg0YWVhNjQxOmZ1bmN0aW9uKGFyZzApe3JldHVybiBhZGRIZWFwT2JqZWN0KGNsZWFyVGltZW91dCh0YWtlT2JqZWN0KGFyZzApKSl9LF9fd2JnX2Nsb3NlXzRiYTMxMjI1M2M0MjQzNDI6ZnVuY3Rpb24oYXJnMCl7Z2V0T2JqZWN0KGFyZzApLmNsb3NlKCl9LF9fd2JnX2Nsb3NlXzgzZmI4MDlhY2EzZGU3Zjk6ZnVuY3Rpb24oYXJnMCl7cmV0dXJuIGFkZEhlYXBPYmplY3QoZ2V0T2JqZWN0KGFyZzApLmNsb3NlKCkpfSxfX3diZ19jcmVhdGVPYmplY3RVUkxfOTE4MTg1ZGI2YTEwYTBjODpmdW5jdGlvbigpe3JldHVybiBoYW5kbGVFcnJvcihmdW5jdGlvbihhcmcwLGFyZzEpe2NvbnN0IHB0cjE9cGFzc1N0cmluZ1RvV2FzbTAoVVJMLmNyZWF0ZU9iamVjdFVSTChnZXRPYmplY3QoYXJnMSkpLHdhc20uX193YmluZGdlbl9leHBvcnQsd2FzbS5fX3diaW5kZ2VuX2V4cG9ydDIpLGxlbjE9V0FTTV9WRUNUT1JfTEVOO2dldERhdGFWaWV3TWVtb3J5MCgpLnNldEludDMyKGFyZzArNCxsZW4xLCEwKSxnZXREYXRhVmlld01lbW9yeTAoKS5zZXRJbnQzMihhcmcwKzAscHRyMSwhMCl9LGFyZ3VtZW50cyl9LF9fd2JnX2NyZWF0ZVdyaXRhYmxlXzgwYmM1ZGUzNzQ0NDhiNDI6ZnVuY3Rpb24oYXJnMCl7cmV0dXJuIGFkZEhlYXBPYmplY3QoZ2V0T2JqZWN0KGFyZzApLmNyZWF0ZVdyaXRhYmxlKCkpfSxfX3diZ19kYXRhXzUzMzBkYTUwMzEyZDBiYzE6ZnVuY3Rpb24oYXJnMCl7cmV0dXJuIGFkZEhlYXBPYmplY3QoZ2V0T2JqZWN0KGFyZzApLmRhdGEpfSxfX3diZ19kZWJ1Z180NmE5Mzk5NWZjNmY4ODIwOmZ1bmN0aW9uKGFyZzAsYXJnMSxhcmcyLGFyZzMpe2NvbnNvbGUuZGVidWcoZ2V0T2JqZWN0KGFyZzApLGdldE9iamVjdChhcmcxKSxnZXRPYmplY3QoYXJnMiksZ2V0T2JqZWN0KGFyZzMpKX0sX193YmdfZGVidWdfYTQwOTlmYTEyZGI2Y2Q2MTpmdW5jdGlvbihhcmcwKXtjb25zb2xlLmRlYnVnKGdldE9iamVjdChhcmcwKSl9LF9fd2JnX2RpcmVudHJ5X25ldzpmdW5jdGlvbihhcmcwKXtyZXR1cm4gYWRkSGVhcE9iamVjdChEaXJFbnRyeS5fX3dyYXAoYXJnMCkpfSxfX3diZ19kb25lXzU3YjM5ZWNkOWFkZGZlODE6ZnVuY3Rpb24oYXJnMCl7cmV0dXJuIGdldE9iamVjdChhcmcwKS5kb25lfSxfX3diZ19lbnRyaWVzXzA0YTRiOTgyMzUxYTcxN2Y6ZnVuY3Rpb24oYXJnMCl7cmV0dXJuIGFkZEhlYXBPYmplY3QoZ2V0T2JqZWN0KGFyZzApLmVudHJpZXMoKSl9LF9fd2JnX2Vycm9yXzc1MzRiOGU5YTM2ZjFhYjQ6ZnVuY3Rpb24oYXJnMCxhcmcxKXtsZXQgZGVmZXJyZWQwXzAsZGVmZXJyZWQwXzE7dHJ5e2RlZmVycmVkMF8wPWFyZzAsZGVmZXJyZWQwXzE9YXJnMSxjb25zb2xlLmVycm9yKGdldFN0cmluZ0Zyb21XYXNtMChhcmcwLGFyZzEpKX1maW5hbGx5e3dhc20uX193YmluZGdlbl9leHBvcnQ0KGRlZmVycmVkMF8wLGRlZmVycmVkMF8xLDEpfX0sX193YmdfZXJyb3JfNzk0ZDBmZmM5ZDAwZDVjMzpmdW5jdGlvbihhcmcwLGFyZzEsYXJnMixhcmczKXtjb25zb2xlLmVycm9yKGdldE9iamVjdChhcmcwKSxnZXRPYmplY3QoYXJnMSksZ2V0T2JqZWN0KGFyZzIpLGdldE9iamVjdChhcmczKSl9LF9fd2JnX2Vycm9yXzlhN2ZlM2Y5MzIwMzRjZGU6ZnVuY3Rpb24oYXJnMCl7Y29uc29sZS5lcnJvcihnZXRPYmplY3QoYXJnMCkpfSxfX3diZ19ldmFsXzNmMGI5ZjBjYmFmNDVhMzQ6ZnVuY3Rpb24oKXtyZXR1cm4gaGFuZGxlRXJyb3IoZnVuY3Rpb24oYXJnMCxhcmcxKXtjb25zdCByZXQ9ZXZhbChnZXRTdHJpbmdGcm9tV2FzbTAoYXJnMCxhcmcxKSk7cmV0dXJuIGFkZEhlYXBPYmplY3QocmV0KX0sYXJndW1lbnRzKX0sX193YmdfZmV0Y2hfNzRhM2U4NGViZDJjOWEwZTpmdW5jdGlvbihhcmcwKXtyZXR1cm4gYWRkSGVhcE9iamVjdChmZXRjaChnZXRPYmplY3QoYXJnMCkpKX0sX193YmdfZmV0Y2hfYWZiNmE0YjZjYWNmODc2ZDpmdW5jdGlvbihhcmcwLGFyZzEpe3JldHVybiBhZGRIZWFwT2JqZWN0KGdldE9iamVjdChhcmcwKS5mZXRjaChnZXRPYmplY3QoYXJnMSkpKX0sX193YmdfZmx1c2hfMjJiNzg1MDYwNTkyY2E1ZjpmdW5jdGlvbigpe3JldHVybiBoYW5kbGVFcnJvcihmdW5jdGlvbihhcmcwKXtnZXRPYmplY3QoYXJnMCkuZmx1c2goKX0sYXJndW1lbnRzKX0sX193YmdfZnJvbV9iZGRkNjRlN2Q1ZmY2OTQxOmZ1bmN0aW9uKGFyZzApe3JldHVybiBhZGRIZWFwT2JqZWN0KEFycmF5LmZyb20oZ2V0T2JqZWN0KGFyZzApKSl9LF9fd2JnX2dldERpcmVjdG9yeUhhbmRsZV84N2NlOGNhNTNjZjRkOGRjOmZ1bmN0aW9uKGFyZzAsYXJnMSxhcmcyLGFyZzMpe3JldHVybiBhZGRIZWFwT2JqZWN0KGdldE9iamVjdChhcmcwKS5nZXREaXJlY3RvcnlIYW5kbGUoZ2V0U3RyaW5nRnJvbVdhc20wKGFyZzEsYXJnMiksZ2V0T2JqZWN0KGFyZzMpKSl9LF9fd2JnX2dldERpcmVjdG9yeV9iNjZhZTNlNzlmOTAyOTgyOmZ1bmN0aW9uKGFyZzApe3JldHVybiBhZGRIZWFwT2JqZWN0KGdldE9iamVjdChhcmcwKS5nZXREaXJlY3RvcnkoKSl9LF9fd2JnX2dldEZpbGVIYW5kbGVfZmY0YWI5MTdiNDVhZmZiMzpmdW5jdGlvbihhcmcwLGFyZzEsYXJnMixhcmczKXtyZXR1cm4gYWRkSGVhcE9iamVjdChnZXRPYmplY3QoYXJnMCkuZ2V0RmlsZUhhbmRsZShnZXRTdHJpbmdGcm9tV2FzbTAoYXJnMSxhcmcyKSxnZXRPYmplY3QoYXJnMykpKX0sX193YmdfZ2V0RmlsZV8xMTUzNTRmYzk1MGVkYzg4OmZ1bmN0aW9uKGFyZzApe3JldHVybiBhZGRIZWFwT2JqZWN0KGdldE9iamVjdChhcmcwKS5nZXRGaWxlKCkpfSxfX3diZ19nZXRSYW5kb21WYWx1ZXNfODA1NzhiMmZmMmEwOTNiYTpmdW5jdGlvbigpe3JldHVybiBoYW5kbGVFcnJvcihmdW5jdGlvbihhcmcwKXtnbG9iYWxUaGlzLmNyeXB0by5nZXRSYW5kb21WYWx1ZXMoZ2V0T2JqZWN0KGFyZzApKX0sYXJndW1lbnRzKX0sX193YmdfZ2V0XzliOTRkNzNlNjIyMWY3NWM6ZnVuY3Rpb24oYXJnMCxhcmcxKXtyZXR1cm4gYWRkSGVhcE9iamVjdChnZXRPYmplY3QoYXJnMClbYXJnMT4+PjBdKX0sX193YmdfZ2V0X2IzZWQzYWQ0YmUyYmM4YWM6ZnVuY3Rpb24oKXtyZXR1cm4gaGFuZGxlRXJyb3IoZnVuY3Rpb24oYXJnMCxhcmcxKXtyZXR1cm4gYWRkSGVhcE9iamVjdChSZWZsZWN0LmdldChnZXRPYmplY3QoYXJnMCksZ2V0T2JqZWN0KGFyZzEpKSl9LGFyZ3VtZW50cyl9LF9fd2JnX2hhc19kNGU1MzIzODk2NmMxMmI2OmZ1bmN0aW9uKCl7cmV0dXJuIGhhbmRsZUVycm9yKGZ1bmN0aW9uKGFyZzAsYXJnMSl7cmV0dXJuIFJlZmxlY3QuaGFzKGdldE9iamVjdChhcmcwKSxnZXRPYmplY3QoYXJnMSkpfSxhcmd1bWVudHMpfSxfX3diZ19oZWFkZXJzXzU5YTI5MzhkYjlmODA5ODU6ZnVuY3Rpb24oYXJnMCl7cmV0dXJuIGFkZEhlYXBPYmplY3QoZ2V0T2JqZWN0KGFyZzApLmhlYWRlcnMpfSxfX3diZ19pbmZvXzE0OGQwNDM4NDA1ODIwMTI6ZnVuY3Rpb24oYXJnMCl7Y29uc29sZS5pbmZvKGdldE9iamVjdChhcmcwKSl9LF9fd2JnX2luZm9fOWU2MDJjZjEwYzVjNjkwYjpmdW5jdGlvbihhcmcwLGFyZzEsYXJnMixhcmczKXtjb25zb2xlLmluZm8oZ2V0T2JqZWN0KGFyZzApLGdldE9iamVjdChhcmcxKSxnZXRPYmplY3QoYXJnMiksZ2V0T2JqZWN0KGFyZzMpKX0sX193YmdfaW5zdGFuY2VvZl9EZWRpY2F0ZWRXb3JrZXJHbG9iYWxTY29wZV8xNTA2YjNkMDE3Nzk5ZDQ4OmZ1bmN0aW9uKGFyZzApe2xldCByZXN1bHQ7dHJ5e3Jlc3VsdD1nZXRPYmplY3QoYXJnMClpbnN0YW5jZW9mIERlZGljYXRlZFdvcmtlckdsb2JhbFNjb3BlfWNhdGNoKF8pe3Jlc3VsdD0hMX1yZXR1cm4gcmVzdWx0fSxfX3diZ19pbnN0YW5jZW9mX0RvbUV4Y2VwdGlvbl85OWMxNzcxOTNlNTU0Yjc1OmZ1bmN0aW9uKGFyZzApe2xldCByZXN1bHQ7dHJ5e3Jlc3VsdD1nZXRPYmplY3QoYXJnMClpbnN0YW5jZW9mIERPTUV4Y2VwdGlvbn1jYXRjaChfKXtyZXN1bHQ9ITF9cmV0dXJuIHJlc3VsdH0sX193YmdfaW5zdGFuY2VvZl9GaWxlU3lzdGVtRGlyZWN0b3J5SGFuZGxlXzU2YTE2NzAzOWQ2MTQ1NDg6ZnVuY3Rpb24oYXJnMCl7bGV0IHJlc3VsdDt0cnl7cmVzdWx0PWdldE9iamVjdChhcmcwKWluc3RhbmNlb2YgRmlsZVN5c3RlbURpcmVjdG9yeUhhbmRsZX1jYXRjaChfKXtyZXN1bHQ9ITF9cmV0dXJuIHJlc3VsdH0sX193YmdfaW5zdGFuY2VvZl9SZXNwb25zZV9lZTFkNTRkNzlhZTQxOTc3OmZ1bmN0aW9uKGFyZzApe2xldCByZXN1bHQ7dHJ5e3Jlc3VsdD1nZXRPYmplY3QoYXJnMClpbnN0YW5jZW9mIFJlc3BvbnNlfWNhdGNoKF8pe3Jlc3VsdD0hMX1yZXR1cm4gcmVzdWx0fSxfX3diZ19pbnN0YW5jZW9mX1VpbnQ4QXJyYXlfOWI5MDc1OTM1Yzc0NzA3YzpmdW5jdGlvbihhcmcwKXtsZXQgcmVzdWx0O3RyeXtyZXN1bHQ9Z2V0T2JqZWN0KGFyZzApaW5zdGFuY2VvZiBVaW50OEFycmF5fWNhdGNoKF8pe3Jlc3VsdD0hMX1yZXR1cm4gcmVzdWx0fSxfX3diZ19pc0FycmF5X2QzMTRiYjk4ZmNmMDgzMzE6ZnVuY3Rpb24oYXJnMCl7cmV0dXJuIEFycmF5LmlzQXJyYXkoZ2V0T2JqZWN0KGFyZzApKX0sX193YmdfaXRlcmF0b3JfNmZmNjU2MGNhMTU2OGU1NTpmdW5jdGlvbigpe3JldHVybiBhZGRIZWFwT2JqZWN0KFN5bWJvbC5pdGVyYXRvcil9LF9fd2JnX2tpbmRfOTA3NjlkNmMxNmZhZWFmZDpmdW5jdGlvbihhcmcwKXtjb25zdCByZXQ9Z2V0T2JqZWN0KGFyZzApLmtpbmQ7cmV0dXJuKF9fd2JpbmRnZW5fZW51bV9GaWxlU3lzdGVtSGFuZGxlS2luZC5pbmRleE9mKHJldCkrMXx8MyktMX0sX193YmdfbGVuZ3RoXzMyZWQ5YTI3OWFjZDA1NGM6ZnVuY3Rpb24oYXJnMCl7cmV0dXJuIGdldE9iamVjdChhcmcwKS5sZW5ndGh9LF9fd2JnX2xlbmd0aF8zNWE3YmFjZTQwZjM2ZWFjOmZ1bmN0aW9uKGFyZzApe3JldHVybiBnZXRPYmplY3QoYXJnMCkubGVuZ3RofSxfX3diZ19tZXNzYWdlXzBiMmIwMjk4YTIzMWIwZDQ6ZnVuY3Rpb24oYXJnMCxhcmcxKXtjb25zdCBwdHIxPXBhc3NTdHJpbmdUb1dhc20wKGdldE9iamVjdChhcmcxKS5tZXNzYWdlLHdhc20uX193YmluZGdlbl9leHBvcnQsd2FzbS5fX3diaW5kZ2VuX2V4cG9ydDIpLGxlbjE9V0FTTV9WRUNUT1JfTEVOO2dldERhdGFWaWV3TWVtb3J5MCgpLnNldEludDMyKGFyZzArNCxsZW4xLCEwKSxnZXREYXRhVmlld01lbW9yeTAoKS5zZXRJbnQzMihhcmcwKzAscHRyMSwhMCl9LF9fd2JnX21ldGFkYXRhX25ldzpmdW5jdGlvbihhcmcwKXtyZXR1cm4gYWRkSGVhcE9iamVjdChNZXRhZGF0YS5fX3dyYXAoYXJnMCkpfSxfX3diZ19uYW1lXzI0Mjc1M2U1MTEwY2Q3NTY6ZnVuY3Rpb24oYXJnMCxhcmcxKXtjb25zdCBwdHIxPXBhc3NTdHJpbmdUb1dhc20wKGdldE9iamVjdChhcmcxKS5uYW1lLHdhc20uX193YmluZGdlbl9leHBvcnQsd2FzbS5fX3diaW5kZ2VuX2V4cG9ydDIpLGxlbjE9V0FTTV9WRUNUT1JfTEVOO2dldERhdGFWaWV3TWVtb3J5MCgpLnNldEludDMyKGFyZzArNCxsZW4xLCEwKSxnZXREYXRhVmlld01lbW9yeTAoKS5zZXRJbnQzMihhcmcwKzAscHRyMSwhMCl9LF9fd2JnX25hdmlnYXRvcl80NDc4OTMxZjMyZWJjYTU3OmZ1bmN0aW9uKGFyZzApe3JldHVybiBhZGRIZWFwT2JqZWN0KGdldE9iamVjdChhcmcwKS5uYXZpZ2F0b3IpfSxfX3diZ19uZXdfMzYxMzA4YjIzNTZjZWNkMDpmdW5jdGlvbigpe3JldHVybiBhZGRIZWFwT2JqZWN0KG5ldyBPYmplY3QpfSxfX3diZ19uZXdfM2ViMzZhZTI0MWZlNmY0NDpmdW5jdGlvbigpe3JldHVybiBhZGRIZWFwT2JqZWN0KG5ldyBBcnJheSl9LF9fd2JnX25ld180ZjhmM2MxMjNlNDc0MzU4OmZ1bmN0aW9uKCl7cmV0dXJuIGhhbmRsZUVycm9yKGZ1bmN0aW9uKGFyZzAsYXJnMSl7cmV0dXJuIGFkZEhlYXBPYmplY3QobmV3IFdvcmtlcihnZXRTdHJpbmdGcm9tV2FzbTAoYXJnMCxhcmcxKSkpfSxhcmd1bWVudHMpfSxfX3diZ19uZXdfNjQyODRiZDQ4N2Y5ZDIzOTpmdW5jdGlvbigpe3JldHVybiBoYW5kbGVFcnJvcihmdW5jdGlvbigpe3JldHVybiBhZGRIZWFwT2JqZWN0KG5ldyBIZWFkZXJzKX0sYXJndW1lbnRzKX0sX193YmdfbmV3XzcyYzYyN2JhODBkZTFjMjE6ZnVuY3Rpb24oYXJnMCl7cmV0dXJuIGFkZEhlYXBPYmplY3QobmV3IEludDMyQXJyYXkoZ2V0T2JqZWN0KGFyZzApKSl9LF9fd2JnX25ld184YTZmMjM4YTZlY2U4NmVhOmZ1bmN0aW9uKCl7cmV0dXJuIGFkZEhlYXBPYmplY3QobmV3IEVycm9yKX0sX193YmdfbmV3XzhlYzU4MDFiMzlkNmY4NjI6ZnVuY3Rpb24oYXJnMCl7cmV0dXJuIGFkZEhlYXBPYmplY3QobmV3IEZpbGVTeXN0ZW1PYnNlcnZlcihnZXRPYmplY3QoYXJnMCkpKX0sX193YmdfbmV3X2I1ZDllMmZiMzg5ZmVmOTE6ZnVuY3Rpb24oYXJnMCxhcmcxKXt0cnl7dmFyIHN0YXRlMD17YTphcmcwLGI6YXJnMX07Y29uc3QgcmV0PW5ldyBQcm9taXNlKChhcmcwLGFyZzEpPT57Y29uc3QgYT1zdGF0ZTAuYTtzdGF0ZTAuYT0wO3RyeXtyZXR1cm4gX193YXNtX2JpbmRnZW5fZnVuY19lbGVtXzMzNDQoYSxzdGF0ZTAuYixhcmcwLGFyZzEpfWZpbmFsbHl7c3RhdGUwLmE9YX19KTtyZXR1cm4gYWRkSGVhcE9iamVjdChyZXQpfWZpbmFsbHl7c3RhdGUwLmE9c3RhdGUwLmI9MH19LF9fd2JnX25ld19iOTQ5ZTdmNTYxNTBhNWQxOmZ1bmN0aW9uKCl7cmV0dXJuIGhhbmRsZUVycm9yKGZ1bmN0aW9uKCl7cmV0dXJuIGFkZEhlYXBPYmplY3QobmV3IEFib3J0Q29udHJvbGxlcil9LGFyZ3VtZW50cyl9LF9fd2JnX25ld19kZDJiNjgwYzhiZjZhZTI5OmZ1bmN0aW9uKGFyZzApe3JldHVybiBhZGRIZWFwT2JqZWN0KG5ldyBVaW50OEFycmF5KGdldE9iamVjdChhcmcwKSkpfSxfX3diZ19uZXdfZnJvbV9zbGljZV9hM2QyNjI5ZGMxODI2Nzg0OmZ1bmN0aW9uKGFyZzAsYXJnMSl7cmV0dXJuIGFkZEhlYXBPYmplY3QobmV3IFVpbnQ4QXJyYXkoZ2V0QXJyYXlVOEZyb21XYXNtMChhcmcwLGFyZzEpKSl9LF9fd2JnX25ld19ub19hcmdzXzFjN2M4NDJmMDhkMDBlYmI6ZnVuY3Rpb24oYXJnMCxhcmcxKXtyZXR1cm4gYWRkSGVhcE9iamVjdChuZXcgRnVuY3Rpb24oZ2V0U3RyaW5nRnJvbVdhc20wKGFyZzAsYXJnMSkpKX0sX193YmdfbmV3X3dpdGhfbGVuZ3RoX2EyYzM5Y2JlODhmZDhmZjE6ZnVuY3Rpb24oYXJnMCl7cmV0dXJuIGFkZEhlYXBPYmplY3QobmV3IFVpbnQ4QXJyYXkoYXJnMD4+PjApKX0sX193YmdfbmV3X3dpdGhfb3B0aW9uc18xNDVhZmJhOTIyYWQzNzAzOmZ1bmN0aW9uKCl7cmV0dXJuIGhhbmRsZUVycm9yKGZ1bmN0aW9uKGFyZzAsYXJnMSxhcmcyKXtyZXR1cm4gYWRkSGVhcE9iamVjdChuZXcgV29ya2VyKGdldFN0cmluZ0Zyb21XYXNtMChhcmcwLGFyZzEpLGdldE9iamVjdChhcmcyKSkpfSxhcmd1bWVudHMpfSxfX3diZ19uZXdfd2l0aF9zdHJfYW5kX2luaXRfYTYxY2JjNmJkZWYyMTYxNDpmdW5jdGlvbigpe3JldHVybiBoYW5kbGVFcnJvcihmdW5jdGlvbihhcmcwLGFyZzEsYXJnMil7cmV0dXJuIGFkZEhlYXBPYmplY3QobmV3IFJlcXVlc3QoZ2V0U3RyaW5nRnJvbVdhc20wKGFyZzAsYXJnMSksZ2V0T2JqZWN0KGFyZzIpKSl9LGFyZ3VtZW50cyl9LF9fd2JnX25ld193aXRoX3N0cl9zZXF1ZW5jZV9jZWEyYzA1NzFkNmRjNmFiOmZ1bmN0aW9uKCl7cmV0dXJuIGhhbmRsZUVycm9yKGZ1bmN0aW9uKGFyZzApe3JldHVybiBhZGRIZWFwT2JqZWN0KG5ldyBCbG9iKGdldE9iamVjdChhcmcwKSkpfSxhcmd1bWVudHMpfSxfX3diZ19uZXh0XzBhNWUwZjhhZjk4MTQ2YWE6ZnVuY3Rpb24oKXtyZXR1cm4gaGFuZGxlRXJyb3IoZnVuY3Rpb24oYXJnMCl7cmV0dXJuIGFkZEhlYXBPYmplY3QoZ2V0T2JqZWN0KGFyZzApLm5leHQoKSl9LGFyZ3VtZW50cyl9LF9fd2JnX25leHRfMzQ4MmY1NGM0OWU4YWYxOTpmdW5jdGlvbigpe3JldHVybiBoYW5kbGVFcnJvcihmdW5jdGlvbihhcmcwKXtyZXR1cm4gYWRkSGVhcE9iamVjdChnZXRPYmplY3QoYXJnMCkubmV4dCgpKX0sYXJndW1lbnRzKX0sX193YmdfbmV4dF80MThmODBkOGY1MzAzMjMzOmZ1bmN0aW9uKGFyZzApe3JldHVybiBhZGRIZWFwT2JqZWN0KGdldE9iamVjdChhcmcwKS5uZXh0KX0sX193Ymdfbm93XzBkYzQ5MjBhNDdjZjcyODA6ZnVuY3Rpb24oYXJnMCl7cmV0dXJuIGdldE9iamVjdChhcmcwKS5ub3coKX0sX193Ymdfbm93X2EzYWY5YTJmNGJiYWE0ZDE6ZnVuY3Rpb24oKXtyZXR1cm4gRGF0ZS5ub3coKX0sX193Ymdfb2JzZXJ2ZV8zMjIzNWI1ZTYxOTVkNGFiOmZ1bmN0aW9uKGFyZzAsYXJnMSxhcmcyKXtyZXR1cm4gYWRkSGVhcE9iamVjdChnZXRPYmplY3QoYXJnMCkub2JzZXJ2ZShnZXRPYmplY3QoYXJnMSksZ2V0T2JqZWN0KGFyZzIpKSl9LF9fd2JnX29mX2RkYzA5NDJiMGRjZTE2YTE6ZnVuY3Rpb24oYXJnMCxhcmcxLGFyZzIpe3JldHVybiBhZGRIZWFwT2JqZWN0KEFycmF5Lm9mKGdldE9iamVjdChhcmcwKSxnZXRPYmplY3QoYXJnMSksZ2V0T2JqZWN0KGFyZzIpKSl9LF9fd2JnX3BhcnNlXzcwODQ2MWExZmVkZGZiMzg6ZnVuY3Rpb24oKXtyZXR1cm4gaGFuZGxlRXJyb3IoZnVuY3Rpb24oYXJnMCxhcmcxKXtyZXR1cm4gYWRkSGVhcE9iamVjdChKU09OLnBhcnNlKGdldFN0cmluZ0Zyb21XYXNtMChhcmcwLGFyZzEpKSl9LGFyZ3VtZW50cyl9LF9fd2JnX3BlcmZvcm1hbmNlXzZhZGMzYjg5OWU0NDhhMjM6ZnVuY3Rpb24oYXJnMCl7cmV0dXJuIGFkZEhlYXBPYmplY3QoZ2V0T2JqZWN0KGFyZzApLnBlcmZvcm1hbmNlKX0sX193YmdfcG9zdE1lc3NhZ2VfMjA0MWY0ZTkwYWY2MTMxODpmdW5jdGlvbigpe3JldHVybiBoYW5kbGVFcnJvcihmdW5jdGlvbihhcmcwLGFyZzEpe2dldE9iamVjdChhcmcwKS5wb3N0TWVzc2FnZShnZXRPYmplY3QoYXJnMSkpfSxhcmd1bWVudHMpfSxfX3diZ19wb3N0TWVzc2FnZV83NzFlZjMyOTNhMjhiYmFjOmZ1bmN0aW9uKCl7cmV0dXJuIGhhbmRsZUVycm9yKGZ1bmN0aW9uKGFyZzAsYXJnMSl7Z2V0T2JqZWN0KGFyZzApLnBvc3RNZXNzYWdlKGdldE9iamVjdChhcmcxKSl9LGFyZ3VtZW50cyl9LF9fd2JnX3Byb3RvdHlwZXNldGNhbGxfYmRjZGNjNTg0MmU0ZDc3ZDpmdW5jdGlvbihhcmcwLGFyZzEsYXJnMil7VWludDhBcnJheS5wcm90b3R5cGUuc2V0LmNhbGwoZ2V0QXJyYXlVOEZyb21XYXNtMChhcmcwLGFyZzEpLGdldE9iamVjdChhcmcyKSl9LF9fd2JnX3B1c2hfOGZmZGNiMjA2MzM0MGJhNTpmdW5jdGlvbihhcmcwLGFyZzEpe3JldHVybiBnZXRPYmplY3QoYXJnMCkucHVzaChnZXRPYmplY3QoYXJnMSkpfSxfX3diZ19xdWV1ZU1pY3JvdGFza18wYWEwYTkyN2Y3OGY1ZDk4OmZ1bmN0aW9uKGFyZzApe3JldHVybiBhZGRIZWFwT2JqZWN0KGdldE9iamVjdChhcmcwKS5xdWV1ZU1pY3JvdGFzayl9LF9fd2JnX3F1ZXVlTWljcm90YXNrXzViYjUzNjk4MmY3OGE1NmY6ZnVuY3Rpb24oYXJnMCl7cXVldWVNaWNyb3Rhc2soZ2V0T2JqZWN0KGFyZzApKX0sX193YmdfcmFuZG9tXzkxMjI4NGRiZjYzNmYyNjk6ZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5yYW5kb20oKX0sX193YmdfcmVsYXRpdmVQYXRoQ29tcG9uZW50c19iYzQ4MjQwM2NiNmQ3ZWE5OmZ1bmN0aW9uKGFyZzApe3JldHVybiBhZGRIZWFwT2JqZWN0KGdldE9iamVjdChhcmcwKS5yZWxhdGl2ZVBhdGhDb21wb25lbnRzKX0sX193YmdfcmVtb3ZlRW50cnlfYzRlZmZmZGQzMThiNTFhMTpmdW5jdGlvbihhcmcwLGFyZzEsYXJnMixhcmczKXtyZXR1cm4gYWRkSGVhcE9iamVjdChnZXRPYmplY3QoYXJnMCkucmVtb3ZlRW50cnkoZ2V0U3RyaW5nRnJvbVdhc20wKGFyZzEsYXJnMiksZ2V0T2JqZWN0KGFyZzMpKSl9LF9fd2JnX3Jlc29sdmVfMDAyYzRiN2Q5ZDhmNmI2NDpmdW5jdGlvbihhcmcwKXtyZXR1cm4gYWRkSGVhcE9iamVjdChQcm9taXNlLnJlc29sdmUoZ2V0T2JqZWN0KGFyZzApKSl9LF9fd2JnX3Jvb3R0YXNrX25ldzpmdW5jdGlvbihhcmcwKXtyZXR1cm4gYWRkSGVhcE9iamVjdChSb290VGFzay5fX3dyYXAoYXJnMCkpfSxfX3diZ19zZXRUaW1lb3V0XzYzMDA4NjEzNjQ0YjA3YWY6ZnVuY3Rpb24oKXtyZXR1cm4gaGFuZGxlRXJyb3IoZnVuY3Rpb24oYXJnMCxhcmcxLGFyZzIpe3JldHVybiBhZGRIZWFwT2JqZWN0KGdldE9iamVjdChhcmcwKS5zZXRUaW1lb3V0KGdldE9iamVjdChhcmcxKSxhcmcyKSl9LGFyZ3VtZW50cyl9LF9fd2JnX3NldFRpbWVvdXRfN2JiMzQyOTY2MmFiMWU3MDpmdW5jdGlvbihhcmcwLGFyZzEpe3JldHVybiBhZGRIZWFwT2JqZWN0KHNldFRpbWVvdXQoZ2V0T2JqZWN0KGFyZzApLGFyZzEpKX0sX193Ymdfc2V0X2F0X2U0NTNjZjNmNGJlOWUyZDk6ZnVuY3Rpb24oYXJnMCxhcmcxKXtnZXRPYmplY3QoYXJnMCkuYXQ9YXJnMX0sX193Ymdfc2V0X2JvZHlfOWE3ZTAwYWZlM2NmZTI0NDpmdW5jdGlvbihhcmcwLGFyZzEpe2dldE9iamVjdChhcmcwKS5ib2R5PWdldE9iamVjdChhcmcxKX0sX193Ymdfc2V0X2NhY2hlXzMxNWEzZWQ3NzNhNDE1NDM6ZnVuY3Rpb24oYXJnMCxhcmcxKXtnZXRPYmplY3QoYXJnMCkuY2FjaGU9X193YmluZGdlbl9lbnVtX1JlcXVlc3RDYWNoZVthcmcxXX0sX193Ymdfc2V0X2NyZWF0ZV8xZjkwMmM1OTM2YWRkZTdkOmZ1bmN0aW9uKGFyZzAsYXJnMSl7Z2V0T2JqZWN0KGFyZzApLmNyZWF0ZT0wIT09YXJnMX0sX193Ymdfc2V0X2NyZWF0ZV9jOTVkZGNhMDE4ZmFjOWNlOmZ1bmN0aW9uKGFyZzAsYXJnMSl7Z2V0T2JqZWN0KGFyZzApLmNyZWF0ZT0wIT09YXJnMX0sX193Ymdfc2V0X2NyZWRlbnRpYWxzX2M0YTU4ZDJlMDVlZjI0ZmI6ZnVuY3Rpb24oYXJnMCxhcmcxKXtnZXRPYmplY3QoYXJnMCkuY3JlZGVudGlhbHM9X193YmluZGdlbl9lbnVtX1JlcXVlc3RDcmVkZW50aWFsc1thcmcxXX0sX193Ymdfc2V0X2Y0M2U1NzdhZWE5NDQ2NWI6ZnVuY3Rpb24oYXJnMCxhcmcxLGFyZzIpe2dldE9iamVjdChhcmcwKVthcmcxPj4+MF09dGFrZU9iamVjdChhcmcyKX0sX193Ymdfc2V0X2hlYWRlcnNfY2ZjNWY0YjJjMWYyMDU0OTpmdW5jdGlvbihhcmcwLGFyZzEpe2dldE9iamVjdChhcmcwKS5oZWFkZXJzPWdldE9iamVjdChhcmcxKX0sX193Ymdfc2V0X21ldGhvZF9jM2UyMDM3NWY1YWU3ZmFjOmZ1bmN0aW9uKGFyZzAsYXJnMSxhcmcyKXtnZXRPYmplY3QoYXJnMCkubWV0aG9kPWdldFN0cmluZ0Zyb21XYXNtMChhcmcxLGFyZzIpfSxfX3diZ19zZXRfbW9kZV9iMTM2NDJjMzEyNjQ4MjAyOmZ1bmN0aW9uKGFyZzAsYXJnMSl7Z2V0T2JqZWN0KGFyZzApLm1vZGU9X193YmluZGdlbl9lbnVtX1JlcXVlc3RNb2RlW2FyZzFdfSxfX3diZ19zZXRfbmFtZV80OWI5ZWNiYTdmNThmMmU1OmZ1bmN0aW9uKGFyZzAsYXJnMSxhcmcyKXtnZXRPYmplY3QoYXJnMCkubmFtZT1nZXRTdHJpbmdGcm9tV2FzbTAoYXJnMSxhcmcyKX0sX193Ymdfc2V0X29ubWVzc2FnZV82ZWQ0MTA1MGU0YTVjZWUyOmZ1bmN0aW9uKGFyZzAsYXJnMSl7Z2V0T2JqZWN0KGFyZzApLm9ubWVzc2FnZT1nZXRPYmplY3QoYXJnMSl9LF9fd2JnX3NldF9yZWN1cnNpdmVfNjVlZDA3ZGY4OTJiNDg4NTpmdW5jdGlvbihhcmcwLGFyZzEpe2dldE9iamVjdChhcmcwKS5yZWN1cnNpdmU9MCE9PWFyZzF9LF9fd2JnX3NldF9yZWN1cnNpdmVfZjVkMzQxNjA5ODMyODExMDpmdW5jdGlvbihhcmcwLGFyZzEpe2dldE9iamVjdChhcmcwKS5yZWN1cnNpdmU9MCE9PWFyZzF9LF9fd2JnX3NldF9zaWduYWxfZjJkM2Y4NTk5MjQ4ODk2ZDpmdW5jdGlvbihhcmcwLGFyZzEpe2dldE9iamVjdChhcmcwKS5zaWduYWw9Z2V0T2JqZWN0KGFyZzEpfSxfX3diZ19zZXRfdHlwZV9lMTI3ZjI2Yjc4ZDc4YmZjOmZ1bmN0aW9uKGFyZzAsYXJnMSl7Z2V0T2JqZWN0KGFyZzApLnR5cGU9X193YmluZGdlbl9lbnVtX1dvcmtlclR5cGVbYXJnMV19LF9fd2JnX3NpZ25hbF9kMTI4NWVjYWI0ZWJjNWFkOmZ1bmN0aW9uKGFyZzApe3JldHVybiBhZGRIZWFwT2JqZWN0KGdldE9iamVjdChhcmcwKS5zaWduYWwpfSxfX3diZ19zaXplX2UwNWQzMWNjNjA0OTgxNWY6ZnVuY3Rpb24oYXJnMCl7cmV0dXJuIGdldE9iamVjdChhcmcwKS5zaXplfSxfX3diZ19zbGljZV81NjZhMTVmMzIxNGZhNTJlOmZ1bmN0aW9uKCl7cmV0dXJuIGhhbmRsZUVycm9yKGZ1bmN0aW9uKGFyZzAsYXJnMSxhcmcyLGFyZzMsYXJnNCl7cmV0dXJuIGFkZEhlYXBPYmplY3QoZ2V0T2JqZWN0KGFyZzApLnNsaWNlKGFyZzEsYXJnMixnZXRTdHJpbmdGcm9tV2FzbTAoYXJnMyxhcmc0KSkpfSxhcmd1bWVudHMpfSxfX3diZ19zdGFja18wZWQ3NWQ2ODU3NWIwZjNjOmZ1bmN0aW9uKGFyZzAsYXJnMSl7Y29uc3QgcHRyMT1wYXNzU3RyaW5nVG9XYXNtMChnZXRPYmplY3QoYXJnMSkuc3RhY2ssd2FzbS5fX3diaW5kZ2VuX2V4cG9ydCx3YXNtLl9fd2JpbmRnZW5fZXhwb3J0MiksbGVuMT1XQVNNX1ZFQ1RPUl9MRU47Z2V0RGF0YVZpZXdNZW1vcnkwKCkuc2V0SW50MzIoYXJnMCs0LGxlbjEsITApLGdldERhdGFWaWV3TWVtb3J5MCgpLnNldEludDMyKGFyZzArMCxwdHIxLCEwKX0sX193Ymdfc3RhdGljX2FjY2Vzc29yX0dMT0JBTF8xMjgzNzE2N2FkOTM1MTE2OmZ1bmN0aW9uKCl7Y29uc3QgcmV0PXZvaWQgMD09PV9fd2VicGFja19yZXF1aXJlX18uZz9udWxsOl9fd2VicGFja19yZXF1aXJlX18uZztyZXR1cm4gaXNMaWtlTm9uZShyZXQpPzA6YWRkSGVhcE9iamVjdChyZXQpfSxfX3diZ19zdGF0aWNfYWNjZXNzb3JfR0xPQkFMX1RISVNfZTYyOGU4OWFiM2IxYzk1ZjpmdW5jdGlvbigpe2NvbnN0IHJldD0idW5kZWZpbmVkIj09dHlwZW9mIGdsb2JhbFRoaXM/bnVsbDpnbG9iYWxUaGlzO3JldHVybiBpc0xpa2VOb25lKHJldCk/MDphZGRIZWFwT2JqZWN0KHJldCl9LF9fd2JnX3N0YXRpY19hY2Nlc3Nvcl9TRUxGX2E2MjFkM2RmYmI2MGQwY2U6ZnVuY3Rpb24oKXtjb25zdCByZXQ9InVuZGVmaW5lZCI9PXR5cGVvZiBzZWxmP251bGw6c2VsZjtyZXR1cm4gaXNMaWtlTm9uZShyZXQpPzA6YWRkSGVhcE9iamVjdChyZXQpfSxfX3diZ19zdGF0aWNfYWNjZXNzb3JfV0lORE9XX2Y4NzI3ZjBjZjg4OGUwYmQ6ZnVuY3Rpb24oKXtjb25zdCByZXQ9InVuZGVmaW5lZCI9PXR5cGVvZiB3aW5kb3c/bnVsbDp3aW5kb3c7cmV0dXJuIGlzTGlrZU5vbmUocmV0KT8wOmFkZEhlYXBPYmplY3QocmV0KX0sX193Ymdfc3RhdHVzXzg5ZDdlODAzZGI5MTFlZTc6ZnVuY3Rpb24oYXJnMCl7cmV0dXJuIGdldE9iamVjdChhcmcwKS5zdGF0dXN9LF9fd2JnX3N0b3JhZ2VfYzAwMmI1M2JjNDg4MzI5OTpmdW5jdGlvbihhcmcwKXtyZXR1cm4gYWRkSGVhcE9iamVjdChnZXRPYmplY3QoYXJnMCkuc3RvcmFnZSl9LF9fd2JnX3N0cmluZ2lmeV84ZDFjYzZmZjM4M2U4YmFlOmZ1bmN0aW9uKCl7cmV0dXJuIGhhbmRsZUVycm9yKGZ1bmN0aW9uKGFyZzApe3JldHVybiBhZGRIZWFwT2JqZWN0KEpTT04uc3RyaW5naWZ5KGdldE9iamVjdChhcmcwKSkpfSxhcmd1bWVudHMpfSxfX3diZ19zdWJhcnJheV9hOTZlMWZlZjE3ZWQyM2NiOmZ1bmN0aW9uKGFyZzAsYXJnMSxhcmcyKXtyZXR1cm4gYWRkSGVhcE9iamVjdChnZXRPYmplY3QoYXJnMCkuc3ViYXJyYXkoYXJnMT4+PjAsYXJnMj4+PjApKX0sX193YmdfdGhlbl8wZDlmZTJjN2IxODU3ZDMyOmZ1bmN0aW9uKGFyZzAsYXJnMSxhcmcyKXtyZXR1cm4gYWRkSGVhcE9iamVjdChnZXRPYmplY3QoYXJnMCkudGhlbihnZXRPYmplY3QoYXJnMSksZ2V0T2JqZWN0KGFyZzIpKSl9LF9fd2JnX3RoZW5fYjllN2IzYjVmMWE5ZTFiNTpmdW5jdGlvbihhcmcwLGFyZzEpe3JldHVybiBhZGRIZWFwT2JqZWN0KGdldE9iamVjdChhcmcwKS50aGVuKGdldE9iamVjdChhcmcxKSkpfSxfX3diZ190b1N0cmluZ185NjRmZjdmZTZlY2E4MzYyOmZ1bmN0aW9uKGFyZzApe3JldHVybiBhZGRIZWFwT2JqZWN0KGdldE9iamVjdChhcmcwKS50b1N0cmluZygpKX0sX193YmdfdHJ1bmNhdGVfZGM2NjFmZGNiMDA2MmZhNzpmdW5jdGlvbigpe3JldHVybiBoYW5kbGVFcnJvcihmdW5jdGlvbihhcmcwLGFyZzEpe2dldE9iamVjdChhcmcwKS50cnVuY2F0ZShhcmcxPj4+MCl9LGFyZ3VtZW50cyl9LF9fd2JnX3R5cGVfMDNkZmU0NjIxNzM1ZTUyODpmdW5jdGlvbihhcmcwKXtjb25zdCByZXQ9Z2V0T2JqZWN0KGFyZzApLnR5cGU7cmV0dXJuKF9fd2JpbmRnZW5fZW51bV9GaWxlU3lzdGVtQ2hhbmdlUmVjb3JkVHlwZS5pbmRleE9mKHJldCkrMXx8NyktMX0sX193YmdfdXJsX2M0ODRjMjZiMWZiZjUxMjY6ZnVuY3Rpb24oYXJnMCxhcmcxKXtjb25zdCBwdHIxPXBhc3NTdHJpbmdUb1dhc20wKGdldE9iamVjdChhcmcxKS51cmwsd2FzbS5fX3diaW5kZ2VuX2V4cG9ydCx3YXNtLl9fd2JpbmRnZW5fZXhwb3J0MiksbGVuMT1XQVNNX1ZFQ1RPUl9MRU47Z2V0RGF0YVZpZXdNZW1vcnkwKCkuc2V0SW50MzIoYXJnMCs0LGxlbjEsITApLGdldERhdGFWaWV3TWVtb3J5MCgpLnNldEludDMyKGFyZzArMCxwdHIxLCEwKX0sX193YmdfdmFsdWVfMDU0NjI1NWI0MTVlOTZjMTpmdW5jdGlvbihhcmcwKXtyZXR1cm4gYWRkSGVhcE9iamVjdChnZXRPYmplY3QoYXJnMCkudmFsdWUpfSxfX3diZ192YWx1ZV9mZTZlZTM0YWY1ZGMzZGNlOmZ1bmN0aW9uKGFyZzApe3JldHVybiBhZGRIZWFwT2JqZWN0KGdldE9iamVjdChhcmcwKS52YWx1ZSl9LF9fd2JnX3dhaXRBc3luY19hNThiMjEzNGJmZjM5YzNlOmZ1bmN0aW9uKGFyZzAsYXJnMSxhcmcyKXtyZXR1cm4gYWRkSGVhcE9iamVjdChBdG9taWNzLndhaXRBc3luYyhnZXRPYmplY3QoYXJnMCksYXJnMT4+PjAsYXJnMikpfSxfX3diZ193YWl0QXN5bmNfYzBhMzlhN2QzMzE4ZDkxZTpmdW5jdGlvbigpe3JldHVybiBhZGRIZWFwT2JqZWN0KEF0b21pY3Mud2FpdEFzeW5jKX0sX193Ymdfd2Fybl9hNDBiOTcxNDY3YjIxOWM3OmZ1bmN0aW9uKGFyZzAsYXJnMSxhcmcyLGFyZzMpe2NvbnNvbGUud2FybihnZXRPYmplY3QoYXJnMCksZ2V0T2JqZWN0KGFyZzEpLGdldE9iamVjdChhcmcyKSxnZXRPYmplY3QoYXJnMykpfSxfX3diZ193YXJuX2Y3YWUxYjJlNjZjY2I5MzA6ZnVuY3Rpb24oYXJnMCl7Y29uc29sZS53YXJuKGdldE9iamVjdChhcmcwKSl9LF9fd2JnX3dhc210YXNrbWVzc2FnZV9uZXc6ZnVuY3Rpb24oYXJnMCl7cmV0dXJuIGFkZEhlYXBPYmplY3QoV2FzbVRhc2tNZXNzYWdlLl9fd3JhcChhcmcwKSl9LF9fd2JnX3dlYndvcmtlcmNyZWF0aW9uX25ldzpmdW5jdGlvbihhcmcwKXtyZXR1cm4gYWRkSGVhcE9iamVjdChXZWJXb3JrZXJDcmVhdGlvbi5fX3dyYXAoYXJnMCkpfSxfX3diZ193ZWJ3b3JrZXJ0ZXJtaW5hdGlvbl9uZXc6ZnVuY3Rpb24oYXJnMCl7cmV0dXJuIGFkZEhlYXBPYmplY3QoV2ViV29ya2VyVGVybWluYXRpb24uX193cmFwKGFyZzApKX0sX193Ymdfd3JpdGVfMmQ1OTMzN2NjNDk2OTE5ZDpmdW5jdGlvbigpe3JldHVybiBoYW5kbGVFcnJvcihmdW5jdGlvbihhcmcwLGFyZzEsYXJnMixhcmczKXtyZXR1cm4gZ2V0T2JqZWN0KGFyZzApLndyaXRlKGdldEFycmF5VThGcm9tV2FzbTAoYXJnMSxhcmcyKSxnZXRPYmplY3QoYXJnMykpfSxhcmd1bWVudHMpfSxfX3diZ193cml0ZV8zN2Y1YTYyYTI0ZGE2NjJmOmZ1bmN0aW9uKCl7cmV0dXJuIGhhbmRsZUVycm9yKGZ1bmN0aW9uKGFyZzAsYXJnMSl7cmV0dXJuIGFkZEhlYXBPYmplY3QoZ2V0T2JqZWN0KGFyZzApLndyaXRlKGdldE9iamVjdChhcmcxKSkpfSxhcmd1bWVudHMpfSxfX3diaW5kZ2VuX2Nhc3RfMDAwMDAwMDAwMDAwMDAwMTpmdW5jdGlvbihhcmcwLGFyZzEpe3JldHVybiBhZGRIZWFwT2JqZWN0KG1ha2VNdXRDbG9zdXJlKGFyZzAsYXJnMSx3YXNtLl9fd2FzbV9iaW5kZ2VuX2Z1bmNfZWxlbV8xOTk4NSxfX3dhc21fYmluZGdlbl9mdW5jX2VsZW1fNzk2NDMpKX0sX193YmluZGdlbl9jYXN0XzAwMDAwMDAwMDAwMDAwMDI6ZnVuY3Rpb24oYXJnMCxhcmcxKXtyZXR1cm4gYWRkSGVhcE9iamVjdChtYWtlTXV0Q2xvc3VyZShhcmcwLGFyZzEsd2FzbS5fX3dhc21fYmluZGdlbl9mdW5jX2VsZW1fMTk5ODUsX193YXNtX2JpbmRnZW5fZnVuY19lbGVtXzc5NjQzKSl9LF9fd2JpbmRnZW5fY2FzdF8wMDAwMDAwMDAwMDAwMDAzOmZ1bmN0aW9uKGFyZzAsYXJnMSl7cmV0dXJuIGFkZEhlYXBPYmplY3QobWFrZU11dENsb3N1cmUoYXJnMCxhcmcxLHdhc20uX193YXNtX2JpbmRnZW5fZnVuY19lbGVtXzE5OTg1LF9fd2FzbV9iaW5kZ2VuX2Z1bmNfZWxlbV83OTY3OSkpfSxfX3diaW5kZ2VuX2Nhc3RfMDAwMDAwMDAwMDAwMDAwNDpmdW5jdGlvbihhcmcwLGFyZzEpe3JldHVybiBhZGRIZWFwT2JqZWN0KG1ha2VNdXRDbG9zdXJlKGFyZzAsYXJnMSx3YXNtLl9fd2FzbV9iaW5kZ2VuX2Z1bmNfZWxlbV8xOTk4NSxfX3dhc21fYmluZGdlbl9mdW5jX2VsZW1fMTk5NzEpKX0sX193YmluZGdlbl9jYXN0XzAwMDAwMDAwMDAwMDAwMDU6ZnVuY3Rpb24oYXJnMCxhcmcxKXtyZXR1cm4gYWRkSGVhcE9iamVjdChtYWtlQ2xvc3VyZShhcmcwLGFyZzEsd2FzbS5fX3dhc21fYmluZGdlbl9mdW5jX2VsZW1fNzkwMDUsX193YXNtX2JpbmRnZW5fZnVuY19lbGVtXzc5MDA2KSl9LF9fd2JpbmRnZW5fY2FzdF8wMDAwMDAwMDAwMDAwMDA2OmZ1bmN0aW9uKGFyZzAsYXJnMSl7cmV0dXJuIGFkZEhlYXBPYmplY3QobWFrZU11dENsb3N1cmUoYXJnMCxhcmcxLHdhc20uX193YXNtX2JpbmRnZW5fZnVuY19lbGVtXzc5NzEwLF9fd2FzbV9iaW5kZ2VuX2Z1bmNfZWxlbV8xOTk3MSkpfSxfX3diaW5kZ2VuX2Nhc3RfMDAwMDAwMDAwMDAwMDAwNzpmdW5jdGlvbihhcmcwKXtyZXR1cm4gYWRkSGVhcE9iamVjdChhcmcwKX0sX193YmluZGdlbl9jYXN0XzAwMDAwMDAwMDAwMDAwMDg6ZnVuY3Rpb24oYXJnMCxhcmcxKXtyZXR1cm4gYWRkSGVhcE9iamVjdChnZXRTdHJpbmdGcm9tV2FzbTAoYXJnMCxhcmcxKSl9LF9fd2JpbmRnZW5fY2FzdF8wMDAwMDAwMDAwMDAwMDA5OmZ1bmN0aW9uKGFyZzAsYXJnMSl7dmFyIHYwPWdldEFycmF5SnNWYWx1ZUZyb21XYXNtMChhcmcwLGFyZzEpLnNsaWNlKCk7d2FzbS5fX3diaW5kZ2VuX2V4cG9ydDQoYXJnMCw0KmFyZzEsNCk7cmV0dXJuIGFkZEhlYXBPYmplY3QodjApfSxfX3diaW5kZ2VuX2xpbmtfMGIxZjc2ZDIzNWZkMmI4NjpmdW5jdGlvbihhcmcwKXtjb25zdCB2YWw9Im9ubWVzc2FnZSA9IGZ1bmN0aW9uIChldikge1xuICAgICAgICAgICAgICAgIGxldCBbaWEsIGluZGV4LCB2YWx1ZV0gPSBldi5kYXRhO1xuICAgICAgICAgICAgICAgIGlhID0gbmV3IEludDMyQXJyYXkoaWEuYnVmZmVyKTtcbiAgICAgICAgICAgICAgICBsZXQgcmVzdWx0ID0gQXRvbWljcy53YWl0KGlhLCBpbmRleCwgdmFsdWUpO1xuICAgICAgICAgICAgICAgIHBvc3RNZXNzYWdlKHJlc3VsdCk7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgIixwdHIxPXBhc3NTdHJpbmdUb1dhc20wKHZvaWQgMD09PVVSTC5jcmVhdGVPYmplY3RVUkw/ImRhdGE6YXBwbGljYXRpb24vamF2YXNjcmlwdCwiK2VuY29kZVVSSUNvbXBvbmVudCh2YWwpOlVSTC5jcmVhdGVPYmplY3RVUkwobmV3IEJsb2IoW3ZhbF0se3R5cGU6InRleHQvamF2YXNjcmlwdCJ9KSksd2FzbS5fX3diaW5kZ2VuX2V4cG9ydCx3YXNtLl9fd2JpbmRnZW5fZXhwb3J0MiksbGVuMT1XQVNNX1ZFQ1RPUl9MRU47Z2V0RGF0YVZpZXdNZW1vcnkwKCkuc2V0SW50MzIoYXJnMCs0LGxlbjEsITApLGdldERhdGFWaWV3TWVtb3J5MCgpLnNldEludDMyKGFyZzArMCxwdHIxLCEwKX0sX193YmluZGdlbl9vYmplY3RfY2xvbmVfcmVmOmZ1bmN0aW9uKGFyZzApe3JldHVybiBhZGRIZWFwT2JqZWN0KGdldE9iamVjdChhcmcwKSl9LF9fd2JpbmRnZW5fb2JqZWN0X2Ryb3BfcmVmOmZ1bmN0aW9uKGFyZzApe3Rha2VPYmplY3QoYXJnMCl9LG1lbW9yeTptZW1vcnl8fG5ldyBXZWJBc3NlbWJseS5NZW1vcnkoe2luaXRpYWw6MTAyNSxtYXhpbXVtOjY1NTM2LHNoYXJlZDohMH0pfTtyZXR1cm57X19wcm90b19fOm51bGwsIi4vaW5kZXhfYmcuanMiOmltcG9ydDB9fWZ1bmN0aW9uIF9fd2FzbV9iaW5kZ2VuX2Z1bmNfZWxlbV8xOTk3MShhcmcwLGFyZzEpe3dhc20uX193YXNtX2JpbmRnZW5fZnVuY19lbGVtXzE5OTcxKGFyZzAsYXJnMSl9ZnVuY3Rpb24gX193YXNtX2JpbmRnZW5fZnVuY19lbGVtXzc5NjQzKGFyZzAsYXJnMSxhcmcyKXt3YXNtLl9fd2FzbV9iaW5kZ2VuX2Z1bmNfZWxlbV83OTY0MyhhcmcwLGFyZzEsYWRkSGVhcE9iamVjdChhcmcyKSl9ZnVuY3Rpb24gX193YXNtX2JpbmRnZW5fZnVuY19lbGVtXzc5Njc5KGFyZzAsYXJnMSxhcmcyKXt0cnl7d2FzbS5fX3dhc21fYmluZGdlbl9mdW5jX2VsZW1fNzk2NzkoYXJnMCxhcmcxLGFkZEJvcnJvd2VkT2JqZWN0KGFyZzIpKX1maW5hbGx5e2hlYXBbc3RhY2tfcG9pbnRlcisrXT12b2lkIDB9fWZ1bmN0aW9uIF9fd2FzbV9iaW5kZ2VuX2Z1bmNfZWxlbV83OTAwNihhcmcwLGFyZzEsYXJnMil7d2FzbS5fX3dhc21fYmluZGdlbl9mdW5jX2VsZW1fNzkwMDYoYXJnMCxhcmcxLGFkZEhlYXBPYmplY3QoYXJnMikpfWZ1bmN0aW9uIF9fd2FzbV9iaW5kZ2VuX2Z1bmNfZWxlbV8zMzQ0KGFyZzAsYXJnMSxhcmcyLGFyZzMpe3dhc20uX193YXNtX2JpbmRnZW5fZnVuY19lbGVtXzMzNDQoYXJnMCxhcmcxLGFkZEhlYXBPYmplY3QoYXJnMiksYWRkSGVhcE9iamVjdChhcmczKSl9U3ltYm9sLmRpc3Bvc2UmJihXZWJXb3JrZXJUZXJtaW5hdGlvbi5wcm90b3R5cGVbU3ltYm9sLmRpc3Bvc2VdPVdlYldvcmtlclRlcm1pbmF0aW9uLnByb3RvdHlwZS5mcmVlKTtjb25zdCBfX3diaW5kZ2VuX2VudW1fRGlyRW50cnlUeXBlPVsiZmlsZSIsImRpcmVjdG9yeSJdLF9fd2JpbmRnZW5fZW51bV9GaWxlU3lzdGVtQ2hhbmdlUmVjb3JkVHlwZT1bImFwcGVhcmVkIiwiZGlzYXBwZWFyZWQiLCJlcnJvcmVkIiwibW9kaWZpZWQiLCJtb3ZlZCIsInVua25vd24iXSxfX3diaW5kZ2VuX2VudW1fRmlsZVN5c3RlbUhhbmRsZUtpbmQ9WyJmaWxlIiwiZGlyZWN0b3J5Il0sX193YmluZGdlbl9lbnVtX1JlcXVlc3RDYWNoZT1bImRlZmF1bHQiLCJuby1zdG9yZSIsInJlbG9hZCIsIm5vLWNhY2hlIiwiZm9yY2UtY2FjaGUiLCJvbmx5LWlmLWNhY2hlZCJdLF9fd2JpbmRnZW5fZW51bV9SZXF1ZXN0Q3JlZGVudGlhbHM9WyJvbWl0Iiwic2FtZS1vcmlnaW4iLCJpbmNsdWRlIl0sX193YmluZGdlbl9lbnVtX1JlcXVlc3RNb2RlPVsic2FtZS1vcmlnaW4iLCJuby1jb3JzIiwiY29ycyIsIm5hdmlnYXRlIl0sX193YmluZGdlbl9lbnVtX1dvcmtlclR5cGU9WyJjbGFzc2ljIiwibW9kdWxlIl0sQnVpbGRPcHRpb25zRmluYWxpemF0aW9uPSJ1bmRlZmluZWQiPT10eXBlb2YgRmluYWxpemF0aW9uUmVnaXN0cnk/e3JlZ2lzdGVyOigpPT57fSx1bnJlZ2lzdGVyOigpPT57fX06bmV3IEZpbmFsaXphdGlvblJlZ2lzdHJ5KHB0cj0+d2FzbS5fX3diZ19idWlsZG9wdGlvbnNfZnJlZShwdHI+Pj4wLDEpKSxDcmVhdGVTeW5jQWNjZXNzSGFuZGxlT3B0aW9uc0ZpbmFsaXphdGlvbj0idW5kZWZpbmVkIj09dHlwZW9mIEZpbmFsaXphdGlvblJlZ2lzdHJ5P3tyZWdpc3RlcjooKT0+e30sdW5yZWdpc3RlcjooKT0+e319Om5ldyBGaW5hbGl6YXRpb25SZWdpc3RyeShwdHI9Pndhc20uX193YmdfY3JlYXRlc3luY2FjY2Vzc2hhbmRsZW9wdGlvbnNfZnJlZShwdHI+Pj4wLDEpKSxEaXJFbnRyeUZpbmFsaXphdGlvbj0idW5kZWZpbmVkIj09dHlwZW9mIEZpbmFsaXphdGlvblJlZ2lzdHJ5P3tyZWdpc3RlcjooKT0+e30sdW5yZWdpc3RlcjooKT0+e319Om5ldyBGaW5hbGl6YXRpb25SZWdpc3RyeShwdHI9Pndhc20uX193YmdfZGlyZW50cnlfZnJlZShwdHI+Pj4wLDEpKSxGc0ZpbmFsaXphdGlvbj0idW5kZWZpbmVkIj09dHlwZW9mIEZpbmFsaXphdGlvblJlZ2lzdHJ5P3tyZWdpc3RlcjooKT0+e30sdW5yZWdpc3RlcjooKT0+e319Om5ldyBGaW5hbGl6YXRpb25SZWdpc3RyeShwdHI9Pndhc20uX193YmdfZnNfZnJlZShwdHI+Pj4wLDEpKSxNZXRhZGF0YUZpbmFsaXphdGlvbj0idW5kZWZpbmVkIj09dHlwZW9mIEZpbmFsaXphdGlvblJlZ2lzdHJ5P3tyZWdpc3RlcjooKT0+e30sdW5yZWdpc3RlcjooKT0+e319Om5ldyBGaW5hbGl6YXRpb25SZWdpc3RyeShwdHI9Pndhc20uX193YmdfbWV0YWRhdGFfZnJlZShwdHI+Pj4wLDEpKSxQcm9qZWN0RmluYWxpemF0aW9uPSJ1bmRlZmluZWQiPT10eXBlb2YgRmluYWxpemF0aW9uUmVnaXN0cnk/e3JlZ2lzdGVyOigpPT57fSx1bnJlZ2lzdGVyOigpPT57fX06bmV3IEZpbmFsaXphdGlvblJlZ2lzdHJ5KHB0cj0+d2FzbS5fX3diZ19wcm9qZWN0X2ZyZWUocHRyPj4+MCwxKSksUm9vdFRhc2tGaW5hbGl6YXRpb249InVuZGVmaW5lZCI9PXR5cGVvZiBGaW5hbGl6YXRpb25SZWdpc3RyeT97cmVnaXN0ZXI6KCk9Pnt9LHVucmVnaXN0ZXI6KCk9Pnt9fTpuZXcgRmluYWxpemF0aW9uUmVnaXN0cnkocHRyPT53YXNtLl9fd2JnX3Jvb3R0YXNrX2ZyZWUocHRyPj4+MCwxKSksV2FzbVRhc2tNZXNzYWdlRmluYWxpemF0aW9uPSJ1bmRlZmluZWQiPT10eXBlb2YgRmluYWxpemF0aW9uUmVnaXN0cnk/e3JlZ2lzdGVyOigpPT57fSx1bnJlZ2lzdGVyOigpPT57fX06bmV3IEZpbmFsaXphdGlvblJlZ2lzdHJ5KHB0cj0+d2FzbS5fX3diZ193YXNtdGFza21lc3NhZ2VfZnJlZShwdHI+Pj4wLDEpKSxXZWJXb3JrZXJDcmVhdGlvbkZpbmFsaXphdGlvbj0idW5kZWZpbmVkIj09dHlwZW9mIEZpbmFsaXphdGlvblJlZ2lzdHJ5P3tyZWdpc3RlcjooKT0+e30sdW5yZWdpc3RlcjooKT0+e319Om5ldyBGaW5hbGl6YXRpb25SZWdpc3RyeShwdHI9Pndhc20uX193Ymdfd2Vid29ya2VyY3JlYXRpb25fZnJlZShwdHI+Pj4wLDEpKSxXZWJXb3JrZXJPcHRpb25zRmluYWxpemF0aW9uPSJ1bmRlZmluZWQiPT10eXBlb2YgRmluYWxpemF0aW9uUmVnaXN0cnk/e3JlZ2lzdGVyOigpPT57fSx1bnJlZ2lzdGVyOigpPT57fX06bmV3IEZpbmFsaXphdGlvblJlZ2lzdHJ5KHB0cj0+d2FzbS5fX3diZ193ZWJ3b3JrZXJvcHRpb25zX2ZyZWUocHRyPj4+MCwxKSksV2ViV29ya2VyVGVybWluYXRpb25GaW5hbGl6YXRpb249InVuZGVmaW5lZCI9PXR5cGVvZiBGaW5hbGl6YXRpb25SZWdpc3RyeT97cmVnaXN0ZXI6KCk9Pnt9LHVucmVnaXN0ZXI6KCk9Pnt9fTpuZXcgRmluYWxpemF0aW9uUmVnaXN0cnkocHRyPT53YXNtLl9fd2JnX3dlYndvcmtlcnRlcm1pbmF0aW9uX2ZyZWUocHRyPj4+MCwxKSk7ZnVuY3Rpb24gYWRkSGVhcE9iamVjdChvYmope2hlYXBfbmV4dD09PWhlYXAubGVuZ3RoJiZoZWFwLnB1c2goaGVhcC5sZW5ndGgrMSk7Y29uc3QgaWR4PWhlYXBfbmV4dDtyZXR1cm4gaGVhcF9uZXh0PWhlYXBbaWR4XSxoZWFwW2lkeF09b2JqLGlkeH1mdW5jdGlvbiBfYXNzZXJ0Q2xhc3MoaW5zdGFuY2Usa2xhc3Mpe2lmKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBrbGFzcykpdGhyb3cgbmV3IEVycm9yKGBleHBlY3RlZCBpbnN0YW5jZSBvZiAke2tsYXNzLm5hbWV9YCl9ZnVuY3Rpb24gYWRkQm9ycm93ZWRPYmplY3Qob2JqKXtpZigxPT1zdGFja19wb2ludGVyKXRocm93IG5ldyBFcnJvcigib3V0IG9mIGpzIHN0YWNrIik7cmV0dXJuIGhlYXBbLS1zdGFja19wb2ludGVyXT1vYmosc3RhY2tfcG9pbnRlcn1jb25zdCBDTE9TVVJFX0RUT1JTPSJ1bmRlZmluZWQiPT10eXBlb2YgRmluYWxpemF0aW9uUmVnaXN0cnk/e3JlZ2lzdGVyOigpPT57fSx1bnJlZ2lzdGVyOigpPT57fX06bmV3IEZpbmFsaXphdGlvblJlZ2lzdHJ5KHN0YXRlPT5zdGF0ZS5kdG9yKHN0YXRlLmEsc3RhdGUuYikpO2Z1bmN0aW9uIGRlYnVnU3RyaW5nKHZhbCl7Y29uc3QgdHlwZT10eXBlb2YgdmFsO2lmKCJudW1iZXIiPT10eXBlfHwiYm9vbGVhbiI9PXR5cGV8fG51bGw9PXZhbClyZXR1cm5gJHt2YWx9YDtpZigic3RyaW5nIj09dHlwZSlyZXR1cm5gIiR7dmFsfSJgO2lmKCJzeW1ib2wiPT10eXBlKXtjb25zdCBkZXNjcmlwdGlvbj12YWwuZGVzY3JpcHRpb247cmV0dXJuIG51bGw9PWRlc2NyaXB0aW9uPyJTeW1ib2wiOmBTeW1ib2woJHtkZXNjcmlwdGlvbn0pYH1pZigiZnVuY3Rpb24iPT10eXBlKXtjb25zdCBuYW1lPXZhbC5uYW1lO3JldHVybiJzdHJpbmciPT10eXBlb2YgbmFtZSYmbmFtZS5sZW5ndGg+MD9gRnVuY3Rpb24oJHtuYW1lfSlgOiJGdW5jdGlvbiJ9aWYoQXJyYXkuaXNBcnJheSh2YWwpKXtjb25zdCBsZW5ndGg9dmFsLmxlbmd0aDtsZXQgZGVidWc9IlsiO2xlbmd0aD4wJiYoZGVidWcrPWRlYnVnU3RyaW5nKHZhbFswXSkpO2ZvcihsZXQgaT0xO2k8bGVuZ3RoO2krKylkZWJ1Zys9IiwgIitkZWJ1Z1N0cmluZyh2YWxbaV0pO3JldHVybiBkZWJ1Zys9Il0iLGRlYnVnfWNvbnN0IGJ1aWx0SW5NYXRjaGVzPS9cW29iamVjdCAoW15cXV0rKVxdLy5leGVjKHRvU3RyaW5nLmNhbGwodmFsKSk7bGV0IGNsYXNzTmFtZTtpZighKGJ1aWx0SW5NYXRjaGVzJiZidWlsdEluTWF0Y2hlcy5sZW5ndGg+MSkpcmV0dXJuIHRvU3RyaW5nLmNhbGwodmFsKTtpZihjbGFzc05hbWU9YnVpbHRJbk1hdGNoZXNbMV0sIk9iamVjdCI9PWNsYXNzTmFtZSl0cnl7cmV0dXJuIk9iamVjdCgiK0pTT04uc3RyaW5naWZ5KHZhbCkrIikifWNhdGNoKF8pe3JldHVybiJPYmplY3QifXJldHVybiB2YWwgaW5zdGFuY2VvZiBFcnJvcj9gJHt2YWwubmFtZX06ICR7dmFsLm1lc3NhZ2V9XG4ke3ZhbC5zdGFja31gOmNsYXNzTmFtZX1mdW5jdGlvbiBkcm9wT2JqZWN0KGlkeCl7aWR4PDEzMnx8KGhlYXBbaWR4XT1oZWFwX25leHQsaGVhcF9uZXh0PWlkeCl9ZnVuY3Rpb24gZ2V0QXJyYXlKc1ZhbHVlRnJvbVdhc20wKHB0cixsZW4pe3B0cj4+Pj0wO2NvbnN0IG1lbT1nZXREYXRhVmlld01lbW9yeTAoKSxyZXN1bHQ9W107Zm9yKGxldCBpPXB0cjtpPHB0cis0KmxlbjtpKz00KXJlc3VsdC5wdXNoKHRha2VPYmplY3QobWVtLmdldFVpbnQzMihpLCEwKSkpO3JldHVybiByZXN1bHR9ZnVuY3Rpb24gZ2V0QXJyYXlVOEZyb21XYXNtMChwdHIsbGVuKXtyZXR1cm4gcHRyPj4+PTAsZ2V0VWludDhBcnJheU1lbW9yeTAoKS5zdWJhcnJheShwdHIvMSxwdHIvMStsZW4pfWxldCBjYWNoZWREYXRhVmlld01lbW9yeTA9bnVsbDtmdW5jdGlvbiBnZXREYXRhVmlld01lbW9yeTAoKXtyZXR1cm4gbnVsbCE9PWNhY2hlZERhdGFWaWV3TWVtb3J5MCYmY2FjaGVkRGF0YVZpZXdNZW1vcnkwLmJ1ZmZlcj09PXdhc20ubWVtb3J5LmJ1ZmZlcnx8KGNhY2hlZERhdGFWaWV3TWVtb3J5MD1uZXcgRGF0YVZpZXcod2FzbS5tZW1vcnkuYnVmZmVyKSksY2FjaGVkRGF0YVZpZXdNZW1vcnkwfWZ1bmN0aW9uIGdldFN0cmluZ0Zyb21XYXNtMChwdHIsbGVuKXtyZXR1cm4gZGVjb2RlVGV4dChwdHI+Pj49MCxsZW4pfWxldCBjYWNoZWRVaW50OEFycmF5TWVtb3J5MD1udWxsO2Z1bmN0aW9uIGdldFVpbnQ4QXJyYXlNZW1vcnkwKCl7cmV0dXJuIG51bGwhPT1jYWNoZWRVaW50OEFycmF5TWVtb3J5MCYmY2FjaGVkVWludDhBcnJheU1lbW9yeTAuYnVmZmVyPT09d2FzbS5tZW1vcnkuYnVmZmVyfHwoY2FjaGVkVWludDhBcnJheU1lbW9yeTA9bmV3IFVpbnQ4QXJyYXkod2FzbS5tZW1vcnkuYnVmZmVyKSksY2FjaGVkVWludDhBcnJheU1lbW9yeTB9ZnVuY3Rpb24gZ2V0T2JqZWN0KGlkeCl7cmV0dXJuIGhlYXBbaWR4XX1mdW5jdGlvbiBoYW5kbGVFcnJvcihmLGFyZ3Mpe3RyeXtyZXR1cm4gZi5hcHBseSh0aGlzLGFyZ3MpfWNhdGNoKGUpe3dhc20uX193YmluZGdlbl9leHBvcnQzKGFkZEhlYXBPYmplY3QoZSkpfX1sZXQgaGVhcD1uZXcgQXJyYXkoMTI4KS5maWxsKHZvaWQgMCk7aGVhcC5wdXNoKHZvaWQgMCxudWxsLCEwLCExKTtsZXQgaGVhcF9uZXh0PWhlYXAubGVuZ3RoO2Z1bmN0aW9uIGlzTGlrZU5vbmUoeCl7cmV0dXJuIG51bGw9PXh9ZnVuY3Rpb24gbWFrZUNsb3N1cmUoYXJnMCxhcmcxLGR0b3IsZil7Y29uc3Qgc3RhdGU9e2E6YXJnMCxiOmFyZzEsY250OjEsZHRvcn0scmVhbD0oLi4uYXJncyk9PntzdGF0ZS5jbnQrKzt0cnl7cmV0dXJuIGYoc3RhdGUuYSxzdGF0ZS5iLC4uLmFyZ3MpfWZpbmFsbHl7cmVhbC5fd2JnX2NiX3VucmVmKCl9fTtyZXR1cm4gcmVhbC5fd2JnX2NiX3VucmVmPSgpPT57MD09PS0tc3RhdGUuY250JiYoc3RhdGUuZHRvcihzdGF0ZS5hLHN0YXRlLmIpLHN0YXRlLmE9MCxDTE9TVVJFX0RUT1JTLnVucmVnaXN0ZXIoc3RhdGUpKX0sQ0xPU1VSRV9EVE9SUy5yZWdpc3RlcihyZWFsLHN0YXRlLHN0YXRlKSxyZWFsfWZ1bmN0aW9uIG1ha2VNdXRDbG9zdXJlKGFyZzAsYXJnMSxkdG9yLGYpe2NvbnN0IHN0YXRlPXthOmFyZzAsYjphcmcxLGNudDoxLGR0b3J9LHJlYWw9KC4uLmFyZ3MpPT57c3RhdGUuY250Kys7Y29uc3QgYT1zdGF0ZS5hO3N0YXRlLmE9MDt0cnl7cmV0dXJuIGYoYSxzdGF0ZS5iLC4uLmFyZ3MpfWZpbmFsbHl7c3RhdGUuYT1hLHJlYWwuX3diZ19jYl91bnJlZigpfX07cmV0dXJuIHJlYWwuX3diZ19jYl91bnJlZj0oKT0+ezA9PT0tLXN0YXRlLmNudCYmKHN0YXRlLmR0b3Ioc3RhdGUuYSxzdGF0ZS5iKSxzdGF0ZS5hPTAsQ0xPU1VSRV9EVE9SUy51bnJlZ2lzdGVyKHN0YXRlKSl9LENMT1NVUkVfRFRPUlMucmVnaXN0ZXIocmVhbCxzdGF0ZSxzdGF0ZSkscmVhbH1mdW5jdGlvbiBwYXNzU3RyaW5nVG9XYXNtMChhcmcsbWFsbG9jLHJlYWxsb2Mpe2lmKHZvaWQgMD09PXJlYWxsb2Mpe2NvbnN0IGJ1Zj1jYWNoZWRUZXh0RW5jb2Rlci5lbmNvZGUoYXJnKSxwdHI9bWFsbG9jKGJ1Zi5sZW5ndGgsMSk+Pj4wO3JldHVybiBnZXRVaW50OEFycmF5TWVtb3J5MCgpLnN1YmFycmF5KHB0cixwdHIrYnVmLmxlbmd0aCkuc2V0KGJ1ZiksV0FTTV9WRUNUT1JfTEVOPWJ1Zi5sZW5ndGgscHRyfWxldCBsZW49YXJnLmxlbmd0aCxwdHI9bWFsbG9jKGxlbiwxKT4+PjA7Y29uc3QgbWVtPWdldFVpbnQ4QXJyYXlNZW1vcnkwKCk7bGV0IG9mZnNldD0wO2Zvcig7b2Zmc2V0PGxlbjtvZmZzZXQrKyl7Y29uc3QgY29kZT1hcmcuY2hhckNvZGVBdChvZmZzZXQpO2lmKGNvZGU+MTI3KWJyZWFrO21lbVtwdHIrb2Zmc2V0XT1jb2RlfWlmKG9mZnNldCE9PWxlbil7MCE9PW9mZnNldCYmKGFyZz1hcmcuc2xpY2Uob2Zmc2V0KSkscHRyPXJlYWxsb2MocHRyLGxlbixsZW49b2Zmc2V0KzMqYXJnLmxlbmd0aCwxKT4+PjA7Y29uc3Qgdmlldz1nZXRVaW50OEFycmF5TWVtb3J5MCgpLnN1YmFycmF5KHB0citvZmZzZXQscHRyK2xlbik7b2Zmc2V0Kz1jYWNoZWRUZXh0RW5jb2Rlci5lbmNvZGVJbnRvKGFyZyx2aWV3KS53cml0dGVuLHB0cj1yZWFsbG9jKHB0cixsZW4sb2Zmc2V0LDEpPj4+MH1yZXR1cm4gV0FTTV9WRUNUT1JfTEVOPW9mZnNldCxwdHJ9bGV0IHN0YWNrX3BvaW50ZXI9MTI4O2Z1bmN0aW9uIHRha2VPYmplY3QoaWR4KXtjb25zdCByZXQ9Z2V0T2JqZWN0KGlkeCk7cmV0dXJuIGRyb3BPYmplY3QoaWR4KSxyZXR9bGV0IGNhY2hlZFRleHREZWNvZGVyPSJ1bmRlZmluZWQiIT10eXBlb2YgVGV4dERlY29kZXI/bmV3IFRleHREZWNvZGVyKCJ1dGYtOCIse2lnbm9yZUJPTTohMCxmYXRhbDohMH0pOnZvaWQgMDtjYWNoZWRUZXh0RGVjb2RlciYmY2FjaGVkVGV4dERlY29kZXIuZGVjb2RlKCk7Y29uc3QgTUFYX1NBRkFSSV9ERUNPREVfQllURVM9MjE0NjQzNTA3MjtsZXQgbnVtQnl0ZXNEZWNvZGVkPTA7ZnVuY3Rpb24gZGVjb2RlVGV4dChwdHIsbGVuKXtyZXR1cm4gbnVtQnl0ZXNEZWNvZGVkKz1sZW4sbnVtQnl0ZXNEZWNvZGVkPj1NQVhfU0FGQVJJX0RFQ09ERV9CWVRFUyYmKGNhY2hlZFRleHREZWNvZGVyPW5ldyBUZXh0RGVjb2RlcigidXRmLTgiLHtpZ25vcmVCT006ITAsZmF0YWw6ITB9KSxjYWNoZWRUZXh0RGVjb2Rlci5kZWNvZGUoKSxudW1CeXRlc0RlY29kZWQ9bGVuKSxjYWNoZWRUZXh0RGVjb2Rlci5kZWNvZGUoZ2V0VWludDhBcnJheU1lbW9yeTAoKS5zbGljZShwdHIscHRyK2xlbikpfWNvbnN0IGNhY2hlZFRleHRFbmNvZGVyPSJ1bmRlZmluZWQiIT10eXBlb2YgVGV4dEVuY29kZXI/bmV3IFRleHRFbmNvZGVyOnZvaWQgMDtjYWNoZWRUZXh0RW5jb2RlciYmKGNhY2hlZFRleHRFbmNvZGVyLmVuY29kZUludG89ZnVuY3Rpb24oYXJnLHZpZXcpe2NvbnN0IGJ1Zj1jYWNoZWRUZXh0RW5jb2Rlci5lbmNvZGUoYXJnKTtyZXR1cm4gdmlldy5zZXQoYnVmKSx7cmVhZDphcmcubGVuZ3RoLHdyaXR0ZW46YnVmLmxlbmd0aH19KTtsZXQgV0FTTV9WRUNUT1JfTEVOPTAsd2FzbU1vZHVsZSx3YXNtO2Z1bmN0aW9uIF9fd2JnX2ZpbmFsaXplX2luaXQoaW5zdGFuY2UsbW9kdWxlLHRocmVhZF9zdGFja19zaXplKXtpZih3YXNtPWluc3RhbmNlLmV4cG9ydHMsd2FzbU1vZHVsZT1tb2R1bGUsY2FjaGVkRGF0YVZpZXdNZW1vcnkwPW51bGwsY2FjaGVkVWludDhBcnJheU1lbW9yeTA9bnVsbCx2b2lkIDAhPT10aHJlYWRfc3RhY2tfc2l6ZSYmKCJudW1iZXIiIT10eXBlb2YgdGhyZWFkX3N0YWNrX3NpemV8fDA9PT10aHJlYWRfc3RhY2tfc2l6ZXx8dGhyZWFkX3N0YWNrX3NpemUlNjU1MzYhPTApKXRocm93ImludmFsaWQgc3RhY2sgc2l6ZSI7cmV0dXJuIHdhc20uX193YmluZGdlbl9zdGFydCh0aHJlYWRfc3RhY2tfc2l6ZSksd2FzbX1hc3luYyBmdW5jdGlvbiBfX3diZ19sb2FkKG1vZHVsZSxpbXBvcnRzKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgUmVzcG9uc2UmJm1vZHVsZSBpbnN0YW5jZW9mIFJlc3BvbnNlKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgV2ViQXNzZW1ibHkuaW5zdGFudGlhdGVTdHJlYW1pbmcpdHJ5e3JldHVybiBhd2FpdCBXZWJBc3NlbWJseS5pbnN0YW50aWF0ZVN0cmVhbWluZyhtb2R1bGUsaW1wb3J0cyl9Y2F0Y2goZSl7aWYoIShtb2R1bGUub2smJmZ1bmN0aW9uIGV4cGVjdGVkUmVzcG9uc2VUeXBlKHR5cGUpe3N3aXRjaCh0eXBlKXtjYXNlImJhc2ljIjpjYXNlImNvcnMiOmNhc2UiZGVmYXVsdCI6cmV0dXJuITB9cmV0dXJuITF9KG1vZHVsZS50eXBlKSl8fCJhcHBsaWNhdGlvbi93YXNtIj09PW1vZHVsZS5oZWFkZXJzLmdldCgiQ29udGVudC1UeXBlIikpdGhyb3cgZTtjb25zb2xlLndhcm4oImBXZWJBc3NlbWJseS5pbnN0YW50aWF0ZVN0cmVhbWluZ2AgZmFpbGVkIGJlY2F1c2UgeW91ciBzZXJ2ZXIgZG9lcyBub3Qgc2VydmUgV2FzbSB3aXRoIGBhcHBsaWNhdGlvbi93YXNtYCBNSU1FIHR5cGUuIEZhbGxpbmcgYmFjayB0byBgV2ViQXNzZW1ibHkuaW5zdGFudGlhdGVgIHdoaWNoIGlzIHNsb3dlci4gT3JpZ2luYWwgZXJyb3I6XG4iLGUpfWNvbnN0IGJ5dGVzPWF3YWl0IG1vZHVsZS5hcnJheUJ1ZmZlcigpO3JldHVybiBhd2FpdCBXZWJBc3NlbWJseS5pbnN0YW50aWF0ZShieXRlcyxpbXBvcnRzKX17Y29uc3QgaW5zdGFuY2U9YXdhaXQgV2ViQXNzZW1ibHkuaW5zdGFudGlhdGUobW9kdWxlLGltcG9ydHMpO3JldHVybiBpbnN0YW5jZSBpbnN0YW5jZW9mIFdlYkFzc2VtYmx5Lkluc3RhbmNlP3tpbnN0YW5jZSxtb2R1bGV9Omluc3RhbmNlfX1mdW5jdGlvbiBpbml0U3luYyhtb2R1bGUsbWVtb3J5KXtpZih2b2lkIDAhPT13YXNtKXJldHVybiB3YXNtO2xldCB0aHJlYWRfc3RhY2tfc2l6ZTt2b2lkIDAhPT1tb2R1bGUmJihPYmplY3QuZ2V0UHJvdG90eXBlT2YobW9kdWxlKT09PU9iamVjdC5wcm90b3R5cGU/KHttb2R1bGUsbWVtb3J5LHRocmVhZF9zdGFja19zaXplfT1tb2R1bGUpOmNvbnNvbGUud2FybigidXNpbmcgZGVwcmVjYXRlZCBwYXJhbWV0ZXJzIGZvciBgaW5pdFN5bmMoKWA7IHBhc3MgYSBzaW5nbGUgb2JqZWN0IGluc3RlYWQiKSk7Y29uc3QgaW1wb3J0cz1fX3diZ19nZXRfaW1wb3J0cyhtZW1vcnkpO21vZHVsZSBpbnN0YW5jZW9mIFdlYkFzc2VtYmx5Lk1vZHVsZXx8KG1vZHVsZT1uZXcgV2ViQXNzZW1ibHkuTW9kdWxlKG1vZHVsZSkpO3JldHVybiBfX3diZ19maW5hbGl6ZV9pbml0KG5ldyBXZWJBc3NlbWJseS5JbnN0YW5jZShtb2R1bGUsaW1wb3J0cyksbW9kdWxlLHRocmVhZF9zdGFja19zaXplKX1hc3luYyBmdW5jdGlvbiBfX3diZ19pbml0KG1vZHVsZV9vcl9wYXRoLG1lbW9yeSl7aWYodm9pZCAwIT09d2FzbSlyZXR1cm4gd2FzbTtsZXQgdGhyZWFkX3N0YWNrX3NpemU7dm9pZCAwIT09bW9kdWxlX29yX3BhdGgmJihPYmplY3QuZ2V0UHJvdG90eXBlT2YobW9kdWxlX29yX3BhdGgpPT09T2JqZWN0LnByb3RvdHlwZT8oe21vZHVsZV9vcl9wYXRoLG1lbW9yeSx0aHJlYWRfc3RhY2tfc2l6ZX09bW9kdWxlX29yX3BhdGgpOmNvbnNvbGUud2FybigidXNpbmcgZGVwcmVjYXRlZCBwYXJhbWV0ZXJzIGZvciB0aGUgaW5pdGlhbGl6YXRpb24gZnVuY3Rpb247IHBhc3MgYSBzaW5nbGUgb2JqZWN0IGluc3RlYWQiKSksdm9pZCAwPT09bW9kdWxlX29yX3BhdGgmJihtb2R1bGVfb3JfcGF0aD1uZXcgVVJMKF9fd2VicGFja19yZXF1aXJlX18oIi4vc3JjL3V0b28vaW5kZXhfYmcud2FzbSIpLF9fd2VicGFja19yZXF1aXJlX18uYikpO2NvbnN0IGltcG9ydHM9X193YmdfZ2V0X2ltcG9ydHMobWVtb3J5KTsoInN0cmluZyI9PXR5cGVvZiBtb2R1bGVfb3JfcGF0aHx8ImZ1bmN0aW9uIj09dHlwZW9mIFJlcXVlc3QmJm1vZHVsZV9vcl9wYXRoIGluc3RhbmNlb2YgUmVxdWVzdHx8ImZ1bmN0aW9uIj09dHlwZW9mIFVSTCYmbW9kdWxlX29yX3BhdGggaW5zdGFuY2VvZiBVUkwpJiYobW9kdWxlX29yX3BhdGg9ZmV0Y2gobW9kdWxlX29yX3BhdGgpKTtjb25zdHtpbnN0YW5jZSxtb2R1bGV9PWF3YWl0IF9fd2JnX2xvYWQoYXdhaXQgbW9kdWxlX29yX3BhdGgsaW1wb3J0cyk7cmV0dXJuIF9fd2JnX2ZpbmFsaXplX2luaXQoaW5zdGFuY2UsbW9kdWxlLHRocmVhZF9zdGFja19zaXplKX19LCIuL3NyYy91dG9vL2luZGV4X2JnLndhc20iKG1vZHVsZSxfX3VudXNlZF93ZWJwYWNrX2V4cG9ydHMsX193ZWJwYWNrX3JlcXVpcmVfXyl7bW9kdWxlLmV4cG9ydHM9X193ZWJwYWNrX3JlcXVpcmVfXy5wKyJjODMwYjAwYzAyMTA2YjM3MjI0NC53YXNtIn19LF9fd2VicGFja19tb2R1bGVfY2FjaGVfXz17fTtmdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKXt2YXIgY2FjaGVkTW9kdWxlPV9fd2VicGFja19tb2R1bGVfY2FjaGVfX1ttb2R1bGVJZF07aWYodm9pZCAwIT09Y2FjaGVkTW9kdWxlKXJldHVybiBjYWNoZWRNb2R1bGUuZXhwb3J0czt2YXIgbW9kdWxlPV9fd2VicGFja19tb2R1bGVfY2FjaGVfX1ttb2R1bGVJZF09e2V4cG9ydHM6e319O3JldHVybiBfX3dlYnBhY2tfbW9kdWxlc19fW21vZHVsZUlkXShtb2R1bGUsbW9kdWxlLmV4cG9ydHMsX193ZWJwYWNrX3JlcXVpcmVfXyksbW9kdWxlLmV4cG9ydHN9X193ZWJwYWNrX3JlcXVpcmVfXy5tPV9fd2VicGFja19tb2R1bGVzX18sX193ZWJwYWNrX3JlcXVpcmVfXy5kPShleHBvcnRzLGRlZmluaXRpb24pPT57Zm9yKHZhciBrZXkgaW4gZGVmaW5pdGlvbilfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZGVmaW5pdGlvbixrZXkpJiYhX193ZWJwYWNrX3JlcXVpcmVfXy5vKGV4cG9ydHMsa2V5KSYmT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsa2V5LHtlbnVtZXJhYmxlOiEwLGdldDpkZWZpbml0aW9uW2tleV19KX0sX193ZWJwYWNrX3JlcXVpcmVfXy5nPWZ1bmN0aW9uKCl7aWYoIm9iamVjdCI9PXR5cGVvZiBnbG9iYWxUaGlzKXJldHVybiBnbG9iYWxUaGlzO3RyeXtyZXR1cm4gdGhpc3x8bmV3IEZ1bmN0aW9uKCJyZXR1cm4gdGhpcyIpKCl9Y2F0Y2goZSl7aWYoIm9iamVjdCI9PXR5cGVvZiB3aW5kb3cpcmV0dXJuIHdpbmRvd319KCksX193ZWJwYWNrX3JlcXVpcmVfXy5vPShvYmoscHJvcCk9Pk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmoscHJvcCksKCgpPT57dmFyIHNjcmlwdFVybDtfX3dlYnBhY2tfcmVxdWlyZV9fLmcuaW1wb3J0U2NyaXB0cyYmKHNjcmlwdFVybD1fX3dlYnBhY2tfcmVxdWlyZV9fLmcubG9jYXRpb24rIiIpO3ZhciBkb2N1bWVudD1fX3dlYnBhY2tfcmVxdWlyZV9fLmcuZG9jdW1lbnQ7aWYoIXNjcmlwdFVybCYmZG9jdW1lbnQmJihkb2N1bWVudC5jdXJyZW50U2NyaXB0JiYiU0NSSVBUIj09PWRvY3VtZW50LmN1cnJlbnRTY3JpcHQudGFnTmFtZS50b1VwcGVyQ2FzZSgpJiYoc2NyaXB0VXJsPWRvY3VtZW50LmN1cnJlbnRTY3JpcHQuc3JjKSwhc2NyaXB0VXJsKSl7dmFyIHNjcmlwdHM9ZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoInNjcmlwdCIpO2lmKHNjcmlwdHMubGVuZ3RoKWZvcih2YXIgaT1zY3JpcHRzLmxlbmd0aC0xO2k+LTEmJighc2NyaXB0VXJsfHwhL15odHRwKHM/KTovLnRlc3Qoc2NyaXB0VXJsKSk7KXNjcmlwdFVybD1zY3JpcHRzW2ktLV0uc3JjfWlmKCFzY3JpcHRVcmwpdGhyb3cgbmV3IEVycm9yKCJBdXRvbWF0aWMgcHVibGljUGF0aCBpcyBub3Qgc3VwcG9ydGVkIGluIHRoaXMgYnJvd3NlciIpO3NjcmlwdFVybD1zY3JpcHRVcmwucmVwbGFjZSgvXmJsb2I6LywiIikucmVwbGFjZSgvIy4qJC8sIiIpLnJlcGxhY2UoL1w/LiokLywiIikucmVwbGFjZSgvXC9bXlwvXSskLywiLyIpLF9fd2VicGFja19yZXF1aXJlX18ucD1zY3JpcHRVcmx9KSgpLF9fd2VicGFja19yZXF1aXJlX18uYj1zZWxmLmxvY2F0aW9uKyIiO3ZhciBfX3dlYnBhY2tfZXhwb3J0c19fPXt9LF91dG9vX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX189X193ZWJwYWNrX3JlcXVpcmVfXygiLi9zcmMvdXRvby9pbmRleC5qcyIpO3JldHVybiBzZWxmLndhc21fYmluZGdlbj1fdXRvb19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fLlFSLF9fd2VicGFja19leHBvcnRzX189X193ZWJwYWNrX2V4cG9ydHNfXy5kZWZhdWx0LF9fd2VicGFja19leHBvcnRzX199KSgpKTs=";
|
|
1
|
+
export default "data:application/javascript;base64,IWZ1bmN0aW9uIHdlYnBhY2tVbml2ZXJzYWxNb2R1bGVEZWZpbml0aW9uKHJvb3QsZmFjdG9yeSl7aWYoIm9iamVjdCI9PXR5cGVvZiBleHBvcnRzJiYib2JqZWN0Ij09dHlwZW9mIG1vZHVsZSltb2R1bGUuZXhwb3J0cz1mYWN0b3J5KCk7ZWxzZSBpZigiZnVuY3Rpb24iPT10eXBlb2YgZGVmaW5lJiZkZWZpbmUuYW1kKWRlZmluZShbXSxmYWN0b3J5KTtlbHNle3ZhciBhPWZhY3RvcnkoKTtmb3IodmFyIGkgaW4gYSkoIm9iamVjdCI9PXR5cGVvZiBleHBvcnRzP2V4cG9ydHM6cm9vdClbaV09YVtpXX19KHNlbGYsKCk9PigoKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgX193ZWJwYWNrX21vZHVsZXNfXz17Ii4vc3JjL3V0b28vaW5kZXguanMiKF9fdW51c2VkX3dlYnBhY2tfbW9kdWxlLF9fd2VicGFja19leHBvcnRzX18sX193ZWJwYWNrX3JlcXVpcmVfXyl7X193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18se1FSOigpPT5pbml0U3luY30pO2NsYXNzIEJ1aWxkT3B0aW9uc3tfX2Rlc3Ryb3lfaW50b19yYXcoKXtjb25zdCBwdHI9dGhpcy5fX3diZ19wdHI7cmV0dXJuIHRoaXMuX193YmdfcHRyPTAsQnVpbGRPcHRpb25zRmluYWxpemF0aW9uLnVucmVnaXN0ZXIodGhpcykscHRyfWZyZWUoKXtjb25zdCBwdHI9dGhpcy5fX2Rlc3Ryb3lfaW50b19yYXcoKTt3YXNtLl9fd2JnX2J1aWxkb3B0aW9uc19mcmVlKHB0ciwwKX1nZXQgY29uZmlnKCl7cmV0dXJuIHRha2VPYmplY3Qod2FzbS5idWlsZG9wdGlvbnNfY29uZmlnKHRoaXMuX193YmdfcHRyKSl9Y29uc3RydWN0b3IoKXtjb25zdCByZXQ9d2FzbS5idWlsZG9wdGlvbnNfbmV3KCk7cmV0dXJuIHRoaXMuX193YmdfcHRyPXJldD4+PjAsQnVpbGRPcHRpb25zRmluYWxpemF0aW9uLnJlZ2lzdGVyKHRoaXMsdGhpcy5fX3diZ19wdHIsdGhpcyksdGhpc31zZXQgY29uZmlnKHZhbCl7d2FzbS5idWlsZG9wdGlvbnNfc2V0X2NvbmZpZyh0aGlzLl9fd2JnX3B0cixhZGRIZWFwT2JqZWN0KHZhbCkpfWdldCBjbGVhbnVwKCl7cmV0dXJuIDAhPT13YXNtLl9fd2JnX2dldF9idWlsZG9wdGlvbnNfY2xlYW51cCh0aGlzLl9fd2JnX3B0cil9c2V0IGNsZWFudXAoYXJnMCl7d2FzbS5fX3diZ19zZXRfYnVpbGRvcHRpb25zX2NsZWFudXAodGhpcy5fX3diZ19wdHIsYXJnMCl9fVN5bWJvbC5kaXNwb3NlJiYoQnVpbGRPcHRpb25zLnByb3RvdHlwZVtTeW1ib2wuZGlzcG9zZV09QnVpbGRPcHRpb25zLnByb3RvdHlwZS5mcmVlKTtjbGFzcyBDcmVhdGVTeW5jQWNjZXNzSGFuZGxlT3B0aW9uc3tfX2Rlc3Ryb3lfaW50b19yYXcoKXtjb25zdCBwdHI9dGhpcy5fX3diZ19wdHI7cmV0dXJuIHRoaXMuX193YmdfcHRyPTAsQ3JlYXRlU3luY0FjY2Vzc0hhbmRsZU9wdGlvbnNGaW5hbGl6YXRpb24udW5yZWdpc3Rlcih0aGlzKSxwdHJ9ZnJlZSgpe2NvbnN0IHB0cj10aGlzLl9fZGVzdHJveV9pbnRvX3JhdygpO3dhc20uX193YmdfY3JlYXRlc3luY2FjY2Vzc2hhbmRsZW9wdGlvbnNfZnJlZShwdHIsMCl9fVN5bWJvbC5kaXNwb3NlJiYoQ3JlYXRlU3luY0FjY2Vzc0hhbmRsZU9wdGlvbnMucHJvdG90eXBlW1N5bWJvbC5kaXNwb3NlXT1DcmVhdGVTeW5jQWNjZXNzSGFuZGxlT3B0aW9ucy5wcm90b3R5cGUuZnJlZSk7Y2xhc3MgRGlyRW50cnl7c3RhdGljIF9fd3JhcChwdHIpe3B0cj4+Pj0wO2NvbnN0IG9iaj1PYmplY3QuY3JlYXRlKERpckVudHJ5LnByb3RvdHlwZSk7cmV0dXJuIG9iai5fX3diZ19wdHI9cHRyLERpckVudHJ5RmluYWxpemF0aW9uLnJlZ2lzdGVyKG9iaixvYmouX193YmdfcHRyLG9iaiksb2JqfXRvSlNPTigpe3JldHVybntuYW1lOnRoaXMubmFtZSx0eXBlOnRoaXMudHlwZX19dG9TdHJpbmcoKXtyZXR1cm4gSlNPTi5zdHJpbmdpZnkodGhpcyl9X19kZXN0cm95X2ludG9fcmF3KCl7Y29uc3QgcHRyPXRoaXMuX193YmdfcHRyO3JldHVybiB0aGlzLl9fd2JnX3B0cj0wLERpckVudHJ5RmluYWxpemF0aW9uLnVucmVnaXN0ZXIodGhpcykscHRyfWZyZWUoKXtjb25zdCBwdHI9dGhpcy5fX2Rlc3Ryb3lfaW50b19yYXcoKTt3YXNtLl9fd2JnX2RpcmVudHJ5X2ZyZWUocHRyLDApfWdldCBuYW1lKCl7bGV0IGRlZmVycmVkMV8wLGRlZmVycmVkMV8xO3RyeXtjb25zdCByZXRwdHI9d2FzbS5fX3diaW5kZ2VuX2FkZF90b19zdGFja19wb2ludGVyKC0xNik7d2FzbS5fX3diZ19nZXRfZGlyZW50cnlfbmFtZShyZXRwdHIsdGhpcy5fX3diZ19wdHIpO3ZhciByMD1nZXREYXRhVmlld01lbW9yeTAoKS5nZXRJbnQzMihyZXRwdHIrMCwhMCkscjE9Z2V0RGF0YVZpZXdNZW1vcnkwKCkuZ2V0SW50MzIocmV0cHRyKzQsITApO3JldHVybiBkZWZlcnJlZDFfMD1yMCxkZWZlcnJlZDFfMT1yMSxnZXRTdHJpbmdGcm9tV2FzbTAocjAscjEpfWZpbmFsbHl7d2FzbS5fX3diaW5kZ2VuX2FkZF90b19zdGFja19wb2ludGVyKDE2KSx3YXNtLl9fd2JpbmRnZW5fZXhwb3J0NChkZWZlcnJlZDFfMCxkZWZlcnJlZDFfMSwxKX19Z2V0IHR5cGUoKXtjb25zdCByZXQ9d2FzbS5fX3diZ19nZXRfZGlyZW50cnlfdHlwZSh0aGlzLl9fd2JnX3B0cik7cmV0dXJuIF9fd2JpbmRnZW5fZW51bV9EaXJFbnRyeVR5cGVbcmV0XX1zZXQgbmFtZShhcmcwKXtjb25zdCBwdHIwPXBhc3NTdHJpbmdUb1dhc20wKGFyZzAsd2FzbS5fX3diaW5kZ2VuX2V4cG9ydCx3YXNtLl9fd2JpbmRnZW5fZXhwb3J0MiksbGVuMD1XQVNNX1ZFQ1RPUl9MRU47d2FzbS5fX3diZ19zZXRfZGlyZW50cnlfbmFtZSh0aGlzLl9fd2JnX3B0cixwdHIwLGxlbjApfXNldCB0eXBlKGFyZzApe3dhc20uX193Ymdfc2V0X2RpcmVudHJ5X3R5cGUodGhpcy5fX3diZ19wdHIsKF9fd2JpbmRnZW5fZW51bV9EaXJFbnRyeVR5cGUuaW5kZXhPZihhcmcwKSsxfHwzKS0xKX19ZnVuY3Rpb24gRVJSX0FCT1JUKCl7bGV0IGRlZmVycmVkMV8wLGRlZmVycmVkMV8xO3RyeXtjb25zdCByZXRwdHI9d2FzbS5fX3diaW5kZ2VuX2FkZF90b19zdGFja19wb2ludGVyKC0xNik7d2FzbS5FUlJfQUJPUlQocmV0cHRyKTt2YXIgcjA9Z2V0RGF0YVZpZXdNZW1vcnkwKCkuZ2V0SW50MzIocmV0cHRyKzAsITApLHIxPWdldERhdGFWaWV3TWVtb3J5MCgpLmdldEludDMyKHJldHB0cis0LCEwKTtyZXR1cm4gZGVmZXJyZWQxXzA9cjAsZGVmZXJyZWQxXzE9cjEsZ2V0U3RyaW5nRnJvbVdhc20wKHIwLHIxKX1maW5hbGx5e3dhc20uX193YmluZGdlbl9hZGRfdG9fc3RhY2tfcG9pbnRlcigxNiksd2FzbS5fX3diaW5kZ2VuX2V4cG9ydDQoZGVmZXJyZWQxXzAsZGVmZXJyZWQxXzEsMSl9fWZ1bmN0aW9uIEVSUl9JTlZBTElEX1NUQVRFKCl7bGV0IGRlZmVycmVkMV8wLGRlZmVycmVkMV8xO3RyeXtjb25zdCByZXRwdHI9d2FzbS5fX3diaW5kZ2VuX2FkZF90b19zdGFja19wb2ludGVyKC0xNik7d2FzbS5FUlJfSU5WQUxJRF9TVEFURShyZXRwdHIpO3ZhciByMD1nZXREYXRhVmlld01lbW9yeTAoKS5nZXRJbnQzMihyZXRwdHIrMCwhMCkscjE9Z2V0RGF0YVZpZXdNZW1vcnkwKCkuZ2V0SW50MzIocmV0cHRyKzQsITApO3JldHVybiBkZWZlcnJlZDFfMD1yMCxkZWZlcnJlZDFfMT1yMSxnZXRTdHJpbmdGcm9tV2FzbTAocjAscjEpfWZpbmFsbHl7d2FzbS5fX3diaW5kZ2VuX2FkZF90b19zdGFja19wb2ludGVyKDE2KSx3YXNtLl9fd2JpbmRnZW5fZXhwb3J0NChkZWZlcnJlZDFfMCxkZWZlcnJlZDFfMSwxKX19ZnVuY3Rpb24gRVJSX0tFWV9BTFJFQURZX0VYSVNUUygpe2xldCBkZWZlcnJlZDFfMCxkZWZlcnJlZDFfMTt0cnl7Y29uc3QgcmV0cHRyPXdhc20uX193YmluZGdlbl9hZGRfdG9fc3RhY2tfcG9pbnRlcigtMTYpO3dhc20uRVJSX0tFWV9BTFJFQURZX0VYSVNUUyhyZXRwdHIpO3ZhciByMD1nZXREYXRhVmlld01lbW9yeTAoKS5nZXRJbnQzMihyZXRwdHIrMCwhMCkscjE9Z2V0RGF0YVZpZXdNZW1vcnkwKCkuZ2V0SW50MzIocmV0cHRyKzQsITApO3JldHVybiBkZWZlcnJlZDFfMD1yMCxkZWZlcnJlZDFfMT1yMSxnZXRTdHJpbmdGcm9tV2FzbTAocjAscjEpfWZpbmFsbHl7d2FzbS5fX3diaW5kZ2VuX2FkZF90b19zdGFja19wb2ludGVyKDE2KSx3YXNtLl9fd2JpbmRnZW5fZXhwb3J0NChkZWZlcnJlZDFfMCxkZWZlcnJlZDFfMSwxKX19ZnVuY3Rpb24gRVJSX05PVF9BTExPV0VEKCl7bGV0IGRlZmVycmVkMV8wLGRlZmVycmVkMV8xO3RyeXtjb25zdCByZXRwdHI9d2FzbS5fX3diaW5kZ2VuX2FkZF90b19zdGFja19wb2ludGVyKC0xNik7d2FzbS5FUlJfTk9UX0FMTE9XRUQocmV0cHRyKTt2YXIgcjA9Z2V0RGF0YVZpZXdNZW1vcnkwKCkuZ2V0SW50MzIocmV0cHRyKzAsITApLHIxPWdldERhdGFWaWV3TWVtb3J5MCgpLmdldEludDMyKHJldHB0cis0LCEwKTtyZXR1cm4gZGVmZXJyZWQxXzA9cjAsZGVmZXJyZWQxXzE9cjEsZ2V0U3RyaW5nRnJvbVdhc20wKHIwLHIxKX1maW5hbGx5e3dhc20uX193YmluZGdlbl9hZGRfdG9fc3RhY2tfcG9pbnRlcigxNiksd2FzbS5fX3diaW5kZ2VuX2V4cG9ydDQoZGVmZXJyZWQxXzAsZGVmZXJyZWQxXzEsMSl9fWZ1bmN0aW9uIEVSUl9OT1RfRk9VTkQoKXtsZXQgZGVmZXJyZWQxXzAsZGVmZXJyZWQxXzE7dHJ5e2NvbnN0IHJldHB0cj13YXNtLl9fd2JpbmRnZW5fYWRkX3RvX3N0YWNrX3BvaW50ZXIoLTE2KTt3YXNtLkVSUl9OT1RfRk9VTkQocmV0cHRyKTt2YXIgcjA9Z2V0RGF0YVZpZXdNZW1vcnkwKCkuZ2V0SW50MzIocmV0cHRyKzAsITApLHIxPWdldERhdGFWaWV3TWVtb3J5MCgpLmdldEludDMyKHJldHB0cis0LCEwKTtyZXR1cm4gZGVmZXJyZWQxXzA9cjAsZGVmZXJyZWQxXzE9cjEsZ2V0U3RyaW5nRnJvbVdhc20wKHIwLHIxKX1maW5hbGx5e3dhc20uX193YmluZGdlbl9hZGRfdG9fc3RhY2tfcG9pbnRlcigxNiksd2FzbS5fX3diaW5kZ2VuX2V4cG9ydDQoZGVmZXJyZWQxXzAsZGVmZXJyZWQxXzEsMSl9fWZ1bmN0aW9uIEVSUl9OT19NT0RJRklDQVRJT05fQUxMT1dFRCgpe2xldCBkZWZlcnJlZDFfMCxkZWZlcnJlZDFfMTt0cnl7Y29uc3QgcmV0cHRyPXdhc20uX193YmluZGdlbl9hZGRfdG9fc3RhY2tfcG9pbnRlcigtMTYpO3dhc20uRVJSX0tFWV9BTFJFQURZX0VYSVNUUyhyZXRwdHIpO3ZhciByMD1nZXREYXRhVmlld01lbW9yeTAoKS5nZXRJbnQzMihyZXRwdHIrMCwhMCkscjE9Z2V0RGF0YVZpZXdNZW1vcnkwKCkuZ2V0SW50MzIocmV0cHRyKzQsITApO3JldHVybiBkZWZlcnJlZDFfMD1yMCxkZWZlcnJlZDFfMT1yMSxnZXRTdHJpbmdGcm9tV2FzbTAocjAscjEpfWZpbmFsbHl7d2FzbS5fX3diaW5kZ2VuX2FkZF90b19zdGFja19wb2ludGVyKDE2KSx3YXNtLl9fd2JpbmRnZW5fZXhwb3J0NChkZWZlcnJlZDFfMCxkZWZlcnJlZDFfMSwxKX19ZnVuY3Rpb24gRVJSX1FVT1RBX0VYQ0VFREVEKCl7bGV0IGRlZmVycmVkMV8wLGRlZmVycmVkMV8xO3RyeXtjb25zdCByZXRwdHI9d2FzbS5fX3diaW5kZ2VuX2FkZF90b19zdGFja19wb2ludGVyKC0xNik7d2FzbS5FUlJfUVVPVEFfRVhDRUVERUQocmV0cHRyKTt2YXIgcjA9Z2V0RGF0YVZpZXdNZW1vcnkwKCkuZ2V0SW50MzIocmV0cHRyKzAsITApLHIxPWdldERhdGFWaWV3TWVtb3J5MCgpLmdldEludDMyKHJldHB0cis0LCEwKTtyZXR1cm4gZGVmZXJyZWQxXzA9cjAsZGVmZXJyZWQxXzE9cjEsZ2V0U3RyaW5nRnJvbVdhc20wKHIwLHIxKX1maW5hbGx5e3dhc20uX193YmluZGdlbl9hZGRfdG9fc3RhY2tfcG9pbnRlcigxNiksd2FzbS5fX3diaW5kZ2VuX2V4cG9ydDQoZGVmZXJyZWQxXzAsZGVmZXJyZWQxXzEsMSl9fWZ1bmN0aW9uIEVSUl9UWVBFX01JU01BVENIKCl7bGV0IGRlZmVycmVkMV8wLGRlZmVycmVkMV8xO3RyeXtjb25zdCByZXRwdHI9d2FzbS5fX3diaW5kZ2VuX2FkZF90b19zdGFja19wb2ludGVyKC0xNik7d2FzbS5FUlJfVFlQRV9NSVNNQVRDSChyZXRwdHIpO3ZhciByMD1nZXREYXRhVmlld01lbW9yeTAoKS5nZXRJbnQzMihyZXRwdHIrMCwhMCkscjE9Z2V0RGF0YVZpZXdNZW1vcnkwKCkuZ2V0SW50MzIocmV0cHRyKzQsITApO3JldHVybiBkZWZlcnJlZDFfMD1yMCxkZWZlcnJlZDFfMT1yMSxnZXRTdHJpbmdGcm9tV2FzbTAocjAscjEpfWZpbmFsbHl7d2FzbS5fX3diaW5kZ2VuX2FkZF90b19zdGFja19wb2ludGVyKDE2KSx3YXNtLl9fd2JpbmRnZW5fZXhwb3J0NChkZWZlcnJlZDFfMCxkZWZlcnJlZDFfMSwxKX19U3ltYm9sLmRpc3Bvc2UmJihEaXJFbnRyeS5wcm90b3R5cGVbU3ltYm9sLmRpc3Bvc2VdPURpckVudHJ5LnByb3RvdHlwZS5mcmVlKTtjbGFzcyBGc3tfX2Rlc3Ryb3lfaW50b19yYXcoKXtjb25zdCBwdHI9dGhpcy5fX3diZ19wdHI7cmV0dXJuIHRoaXMuX193YmdfcHRyPTAsRnNGaW5hbGl6YXRpb24udW5yZWdpc3Rlcih0aGlzKSxwdHJ9ZnJlZSgpe2NvbnN0IHB0cj10aGlzLl9fZGVzdHJveV9pbnRvX3JhdygpO3dhc20uX193YmdfZnNfZnJlZShwdHIsMCl9c3RhdGljIGNvcHlGaWxlKHNyYyxkc3Qpe2NvbnN0IHB0cjA9cGFzc1N0cmluZ1RvV2FzbTAoc3JjLHdhc20uX193YmluZGdlbl9leHBvcnQsd2FzbS5fX3diaW5kZ2VuX2V4cG9ydDIpLGxlbjA9V0FTTV9WRUNUT1JfTEVOLHB0cjE9cGFzc1N0cmluZ1RvV2FzbTAoZHN0LHdhc20uX193YmluZGdlbl9leHBvcnQsd2FzbS5fX3diaW5kZ2VuX2V4cG9ydDIpLGxlbjE9V0FTTV9WRUNUT1JfTEVOO3JldHVybiB0YWtlT2JqZWN0KHdhc20uZnNfY29weUZpbGUocHRyMCxsZW4wLHB0cjEsbGVuMSkpfXN0YXRpYyBjb3B5RmlsZVN5bmMoc3JjLGRzdCl7dHJ5e2NvbnN0IHJldHB0cj13YXNtLl9fd2JpbmRnZW5fYWRkX3RvX3N0YWNrX3BvaW50ZXIoLTE2KSxwdHIwPXBhc3NTdHJpbmdUb1dhc20wKHNyYyx3YXNtLl9fd2JpbmRnZW5fZXhwb3J0LHdhc20uX193YmluZGdlbl9leHBvcnQyKSxsZW4wPVdBU01fVkVDVE9SX0xFTixwdHIxPXBhc3NTdHJpbmdUb1dhc20wKGRzdCx3YXNtLl9fd2JpbmRnZW5fZXhwb3J0LHdhc20uX193YmluZGdlbl9leHBvcnQyKSxsZW4xPVdBU01fVkVDVE9SX0xFTjt3YXNtLmZzX2NvcHlGaWxlU3luYyhyZXRwdHIscHRyMCxsZW4wLHB0cjEsbGVuMSk7dmFyIHIwPWdldERhdGFWaWV3TWVtb3J5MCgpLmdldEludDMyKHJldHB0ciswLCEwKTtpZihnZXREYXRhVmlld01lbW9yeTAoKS5nZXRJbnQzMihyZXRwdHIrNCwhMCkpdGhyb3cgdGFrZU9iamVjdChyMCl9ZmluYWxseXt3YXNtLl9fd2JpbmRnZW5fYWRkX3RvX3N0YWNrX3BvaW50ZXIoMTYpfX1zdGF0aWMgY3JlYXRlRGlyKHBhdGgpe2NvbnN0IHB0cjA9cGFzc1N0cmluZ1RvV2FzbTAocGF0aCx3YXNtLl9fd2JpbmRnZW5fZXhwb3J0LHdhc20uX193YmluZGdlbl9leHBvcnQyKSxsZW4wPVdBU01fVkVDVE9SX0xFTjtyZXR1cm4gdGFrZU9iamVjdCh3YXNtLmZzX2NyZWF0ZURpcihwdHIwLGxlbjApKX1zdGF0aWMgY3JlYXRlRGlyQWxsKHBhdGgpe2NvbnN0IHB0cjA9cGFzc1N0cmluZ1RvV2FzbTAocGF0aCx3YXNtLl9fd2JpbmRnZW5fZXhwb3J0LHdhc20uX193YmluZGdlbl9leHBvcnQyKSxsZW4wPVdBU01fVkVDVE9SX0xFTjtyZXR1cm4gdGFrZU9iamVjdCh3YXNtLmZzX2NyZWF0ZURpckFsbChwdHIwLGxlbjApKX1zdGF0aWMgY3JlYXRlRGlyQWxsU3luYyhwYXRoKXt0cnl7Y29uc3QgcmV0cHRyPXdhc20uX193YmluZGdlbl9hZGRfdG9fc3RhY2tfcG9pbnRlcigtMTYpLHB0cjA9cGFzc1N0cmluZ1RvV2FzbTAocGF0aCx3YXNtLl9fd2JpbmRnZW5fZXhwb3J0LHdhc20uX193YmluZGdlbl9leHBvcnQyKSxsZW4wPVdBU01fVkVDVE9SX0xFTjt3YXNtLmZzX2NyZWF0ZURpckFsbFN5bmMocmV0cHRyLHB0cjAsbGVuMCk7dmFyIHIwPWdldERhdGFWaWV3TWVtb3J5MCgpLmdldEludDMyKHJldHB0ciswLCEwKTtpZihnZXREYXRhVmlld01lbW9yeTAoKS5nZXRJbnQzMihyZXRwdHIrNCwhMCkpdGhyb3cgdGFrZU9iamVjdChyMCl9ZmluYWxseXt3YXNtLl9fd2JpbmRnZW5fYWRkX3RvX3N0YWNrX3BvaW50ZXIoMTYpfX1zdGF0aWMgY3JlYXRlRGlyU3luYyhwYXRoKXt0cnl7Y29uc3QgcmV0cHRyPXdhc20uX193YmluZGdlbl9hZGRfdG9fc3RhY2tfcG9pbnRlcigtMTYpLHB0cjA9cGFzc1N0cmluZ1RvV2FzbTAocGF0aCx3YXNtLl9fd2JpbmRnZW5fZXhwb3J0LHdhc20uX193YmluZGdlbl9leHBvcnQyKSxsZW4wPVdBU01fVkVDVE9SX0xFTjt3YXNtLmZzX2NyZWF0ZURpclN5bmMocmV0cHRyLHB0cjAsbGVuMCk7dmFyIHIwPWdldERhdGFWaWV3TWVtb3J5MCgpLmdldEludDMyKHJldHB0ciswLCEwKTtpZihnZXREYXRhVmlld01lbW9yeTAoKS5nZXRJbnQzMihyZXRwdHIrNCwhMCkpdGhyb3cgdGFrZU9iamVjdChyMCl9ZmluYWxseXt3YXNtLl9fd2JpbmRnZW5fYWRkX3RvX3N0YWNrX3BvaW50ZXIoMTYpfX1zdGF0aWMgbWV0YWRhdGEocGF0aCl7Y29uc3QgcHRyMD1wYXNzU3RyaW5nVG9XYXNtMChwYXRoLHdhc20uX193YmluZGdlbl9leHBvcnQsd2FzbS5fX3diaW5kZ2VuX2V4cG9ydDIpLGxlbjA9V0FTTV9WRUNUT1JfTEVOO3JldHVybiB0YWtlT2JqZWN0KHdhc20uZnNfbWV0YWRhdGEocHRyMCxsZW4wKSl9c3RhdGljIG1ldGFkYXRhU3luYyhwYXRoKXt0cnl7Y29uc3QgcmV0cHRyPXdhc20uX193YmluZGdlbl9hZGRfdG9fc3RhY2tfcG9pbnRlcigtMTYpLHB0cjA9cGFzc1N0cmluZ1RvV2FzbTAocGF0aCx3YXNtLl9fd2JpbmRnZW5fZXhwb3J0LHdhc20uX193YmluZGdlbl9leHBvcnQyKSxsZW4wPVdBU01fVkVDVE9SX0xFTjt3YXNtLmZzX21ldGFkYXRhU3luYyhyZXRwdHIscHRyMCxsZW4wKTt2YXIgcjA9Z2V0RGF0YVZpZXdNZW1vcnkwKCkuZ2V0SW50MzIocmV0cHRyKzAsITApLHIxPWdldERhdGFWaWV3TWVtb3J5MCgpLmdldEludDMyKHJldHB0cis0LCEwKTtpZihnZXREYXRhVmlld01lbW9yeTAoKS5nZXRJbnQzMihyZXRwdHIrOCwhMCkpdGhyb3cgdGFrZU9iamVjdChyMSk7cmV0dXJuIE1ldGFkYXRhLl9fd3JhcChyMCl9ZmluYWxseXt3YXNtLl9fd2JpbmRnZW5fYWRkX3RvX3N0YWNrX3BvaW50ZXIoMTYpfX1zdGF0aWMgcmVhZChwYXRoKXtjb25zdCBwdHIwPXBhc3NTdHJpbmdUb1dhc20wKHBhdGgsd2FzbS5fX3diaW5kZ2VuX2V4cG9ydCx3YXNtLl9fd2JpbmRnZW5fZXhwb3J0MiksbGVuMD1XQVNNX1ZFQ1RPUl9MRU47cmV0dXJuIHRha2VPYmplY3Qod2FzbS5mc19yZWFkKHB0cjAsbGVuMCkpfXN0YXRpYyByZWFkRGlyKHBhdGgpe2NvbnN0IHB0cjA9cGFzc1N0cmluZ1RvV2FzbTAocGF0aCx3YXNtLl9fd2JpbmRnZW5fZXhwb3J0LHdhc20uX193YmluZGdlbl9leHBvcnQyKSxsZW4wPVdBU01fVkVDVE9SX0xFTjtyZXR1cm4gdGFrZU9iamVjdCh3YXNtLmZzX3JlYWREaXIocHRyMCxsZW4wKSl9c3RhdGljIHJlYWREaXJTeW5jKHBhdGgpe3RyeXtjb25zdCByZXRwdHI9d2FzbS5fX3diaW5kZ2VuX2FkZF90b19zdGFja19wb2ludGVyKC0xNikscHRyMD1wYXNzU3RyaW5nVG9XYXNtMChwYXRoLHdhc20uX193YmluZGdlbl9leHBvcnQsd2FzbS5fX3diaW5kZ2VuX2V4cG9ydDIpLGxlbjA9V0FTTV9WRUNUT1JfTEVOO3dhc20uZnNfcmVhZERpclN5bmMocmV0cHRyLHB0cjAsbGVuMCk7dmFyIHIwPWdldERhdGFWaWV3TWVtb3J5MCgpLmdldEludDMyKHJldHB0ciswLCEwKSxyMT1nZXREYXRhVmlld01lbW9yeTAoKS5nZXRJbnQzMihyZXRwdHIrNCwhMCkscjI9Z2V0RGF0YVZpZXdNZW1vcnkwKCkuZ2V0SW50MzIocmV0cHRyKzgsITApO2lmKGdldERhdGFWaWV3TWVtb3J5MCgpLmdldEludDMyKHJldHB0cisxMiwhMCkpdGhyb3cgdGFrZU9iamVjdChyMik7dmFyIHYyPWdldEFycmF5SnNWYWx1ZUZyb21XYXNtMChyMCxyMSkuc2xpY2UoKTtyZXR1cm4gd2FzbS5fX3diaW5kZ2VuX2V4cG9ydDQocjAsNCpyMSw0KSx2Mn1maW5hbGx5e3dhc20uX193YmluZGdlbl9hZGRfdG9fc3RhY2tfcG9pbnRlcigxNil9fXN0YXRpYyByZWFkU3luYyhwYXRoKXt0cnl7Y29uc3QgcmV0cHRyPXdhc20uX193YmluZGdlbl9hZGRfdG9fc3RhY2tfcG9pbnRlcigtMTYpLHB0cjA9cGFzc1N0cmluZ1RvV2FzbTAocGF0aCx3YXNtLl9fd2JpbmRnZW5fZXhwb3J0LHdhc20uX193YmluZGdlbl9leHBvcnQyKSxsZW4wPVdBU01fVkVDVE9SX0xFTjt3YXNtLmZzX3JlYWRTeW5jKHJldHB0cixwdHIwLGxlbjApO3ZhciByMD1nZXREYXRhVmlld01lbW9yeTAoKS5nZXRJbnQzMihyZXRwdHIrMCwhMCkscjE9Z2V0RGF0YVZpZXdNZW1vcnkwKCkuZ2V0SW50MzIocmV0cHRyKzQsITApO2lmKGdldERhdGFWaWV3TWVtb3J5MCgpLmdldEludDMyKHJldHB0cis4LCEwKSl0aHJvdyB0YWtlT2JqZWN0KHIxKTtyZXR1cm4gdGFrZU9iamVjdChyMCl9ZmluYWxseXt3YXNtLl9fd2JpbmRnZW5fYWRkX3RvX3N0YWNrX3BvaW50ZXIoMTYpfX1zdGF0aWMgcmVhZFRvU3RyaW5nKHBhdGgpe2NvbnN0IHB0cjA9cGFzc1N0cmluZ1RvV2FzbTAocGF0aCx3YXNtLl9fd2JpbmRnZW5fZXhwb3J0LHdhc20uX193YmluZGdlbl9leHBvcnQyKSxsZW4wPVdBU01fVkVDVE9SX0xFTjtyZXR1cm4gdGFrZU9iamVjdCh3YXNtLmZzX3JlYWRUb1N0cmluZyhwdHIwLGxlbjApKX1zdGF0aWMgcmVtb3ZlRGlyKHBhdGgscmVjdXJzaXZlKXtjb25zdCBwdHIwPXBhc3NTdHJpbmdUb1dhc20wKHBhdGgsd2FzbS5fX3diaW5kZ2VuX2V4cG9ydCx3YXNtLl9fd2JpbmRnZW5fZXhwb3J0MiksbGVuMD1XQVNNX1ZFQ1RPUl9MRU47cmV0dXJuIHRha2VPYmplY3Qod2FzbS5mc19yZW1vdmVEaXIocHRyMCxsZW4wLHJlY3Vyc2l2ZSkpfXN0YXRpYyByZW1vdmVEaXJTeW5jKHBhdGgscmVjdXJzaXZlKXt0cnl7Y29uc3QgcmV0cHRyPXdhc20uX193YmluZGdlbl9hZGRfdG9fc3RhY2tfcG9pbnRlcigtMTYpLHB0cjA9cGFzc1N0cmluZ1RvV2FzbTAocGF0aCx3YXNtLl9fd2JpbmRnZW5fZXhwb3J0LHdhc20uX193YmluZGdlbl9leHBvcnQyKSxsZW4wPVdBU01fVkVDVE9SX0xFTjt3YXNtLmZzX3JlbW92ZURpclN5bmMocmV0cHRyLHB0cjAsbGVuMCxyZWN1cnNpdmUpO3ZhciByMD1nZXREYXRhVmlld01lbW9yeTAoKS5nZXRJbnQzMihyZXRwdHIrMCwhMCk7aWYoZ2V0RGF0YVZpZXdNZW1vcnkwKCkuZ2V0SW50MzIocmV0cHRyKzQsITApKXRocm93IHRha2VPYmplY3QocjApfWZpbmFsbHl7d2FzbS5fX3diaW5kZ2VuX2FkZF90b19zdGFja19wb2ludGVyKDE2KX19c3RhdGljIHJlbW92ZUZpbGUocGF0aCl7Y29uc3QgcHRyMD1wYXNzU3RyaW5nVG9XYXNtMChwYXRoLHdhc20uX193YmluZGdlbl9leHBvcnQsd2FzbS5fX3diaW5kZ2VuX2V4cG9ydDIpLGxlbjA9V0FTTV9WRUNUT1JfTEVOO3JldHVybiB0YWtlT2JqZWN0KHdhc20uZnNfcmVtb3ZlRmlsZShwdHIwLGxlbjApKX1zdGF0aWMgcmVtb3ZlRmlsZVN5bmMocGF0aCl7dHJ5e2NvbnN0IHJldHB0cj13YXNtLl9fd2JpbmRnZW5fYWRkX3RvX3N0YWNrX3BvaW50ZXIoLTE2KSxwdHIwPXBhc3NTdHJpbmdUb1dhc20wKHBhdGgsd2FzbS5fX3diaW5kZ2VuX2V4cG9ydCx3YXNtLl9fd2JpbmRnZW5fZXhwb3J0MiksbGVuMD1XQVNNX1ZFQ1RPUl9MRU47d2FzbS5mc19yZW1vdmVGaWxlU3luYyhyZXRwdHIscHRyMCxsZW4wKTt2YXIgcjA9Z2V0RGF0YVZpZXdNZW1vcnkwKCkuZ2V0SW50MzIocmV0cHRyKzAsITApO2lmKGdldERhdGFWaWV3TWVtb3J5MCgpLmdldEludDMyKHJldHB0cis0LCEwKSl0aHJvdyB0YWtlT2JqZWN0KHIwKX1maW5hbGx5e3dhc20uX193YmluZGdlbl9hZGRfdG9fc3RhY2tfcG9pbnRlcigxNil9fXN0YXRpYyB3cml0ZShwYXRoLGNvbnRlbnQpe2NvbnN0IHB0cjA9cGFzc1N0cmluZ1RvV2FzbTAocGF0aCx3YXNtLl9fd2JpbmRnZW5fZXhwb3J0LHdhc20uX193YmluZGdlbl9leHBvcnQyKSxsZW4wPVdBU01fVkVDVE9SX0xFTjtyZXR1cm4gdGFrZU9iamVjdCh3YXNtLmZzX3dyaXRlKHB0cjAsbGVuMCxhZGRIZWFwT2JqZWN0KGNvbnRlbnQpKSl9c3RhdGljIHdyaXRlU3RyaW5nKHBhdGgsY29udGVudCl7Y29uc3QgcHRyMD1wYXNzU3RyaW5nVG9XYXNtMChwYXRoLHdhc20uX193YmluZGdlbl9leHBvcnQsd2FzbS5fX3diaW5kZ2VuX2V4cG9ydDIpLGxlbjA9V0FTTV9WRUNUT1JfTEVOLHB0cjE9cGFzc1N0cmluZ1RvV2FzbTAoY29udGVudCx3YXNtLl9fd2JpbmRnZW5fZXhwb3J0LHdhc20uX193YmluZGdlbl9leHBvcnQyKSxsZW4xPVdBU01fVkVDVE9SX0xFTjtyZXR1cm4gdGFrZU9iamVjdCh3YXNtLmZzX3dyaXRlU3RyaW5nKHB0cjAsbGVuMCxwdHIxLGxlbjEpKX1zdGF0aWMgd3JpdGVTeW5jKHBhdGgsY29udGVudCl7dHJ5e2NvbnN0IHJldHB0cj13YXNtLl9fd2JpbmRnZW5fYWRkX3RvX3N0YWNrX3BvaW50ZXIoLTE2KSxwdHIwPXBhc3NTdHJpbmdUb1dhc20wKHBhdGgsd2FzbS5fX3diaW5kZ2VuX2V4cG9ydCx3YXNtLl9fd2JpbmRnZW5fZXhwb3J0MiksbGVuMD1XQVNNX1ZFQ1RPUl9MRU47d2FzbS5mc193cml0ZVN5bmMocmV0cHRyLHB0cjAsbGVuMCxhZGRIZWFwT2JqZWN0KGNvbnRlbnQpKTt2YXIgcjA9Z2V0RGF0YVZpZXdNZW1vcnkwKCkuZ2V0SW50MzIocmV0cHRyKzAsITApO2lmKGdldERhdGFWaWV3TWVtb3J5MCgpLmdldEludDMyKHJldHB0cis0LCEwKSl0aHJvdyB0YWtlT2JqZWN0KHIwKX1maW5hbGx5e3dhc20uX193YmluZGdlbl9hZGRfdG9fc3RhY2tfcG9pbnRlcigxNil9fX1TeW1ib2wuZGlzcG9zZSYmKEZzLnByb3RvdHlwZVtTeW1ib2wuZGlzcG9zZV09RnMucHJvdG90eXBlLmZyZWUpO2NsYXNzIE1ldGFkYXRhe3N0YXRpYyBfX3dyYXAocHRyKXtwdHI+Pj49MDtjb25zdCBvYmo9T2JqZWN0LmNyZWF0ZShNZXRhZGF0YS5wcm90b3R5cGUpO3JldHVybiBvYmouX193YmdfcHRyPXB0cixNZXRhZGF0YUZpbmFsaXphdGlvbi5yZWdpc3RlcihvYmosb2JqLl9fd2JnX3B0cixvYmopLG9ian10b0pTT04oKXtyZXR1cm57ZmlsZV9zaXplOnRoaXMuZmlsZV9zaXplLHR5cGU6dGhpcy50eXBlfX10b1N0cmluZygpe3JldHVybiBKU09OLnN0cmluZ2lmeSh0aGlzKX1fX2Rlc3Ryb3lfaW50b19yYXcoKXtjb25zdCBwdHI9dGhpcy5fX3diZ19wdHI7cmV0dXJuIHRoaXMuX193YmdfcHRyPTAsTWV0YWRhdGFGaW5hbGl6YXRpb24udW5yZWdpc3Rlcih0aGlzKSxwdHJ9ZnJlZSgpe2NvbnN0IHB0cj10aGlzLl9fZGVzdHJveV9pbnRvX3JhdygpO3dhc20uX193YmdfbWV0YWRhdGFfZnJlZShwdHIsMCl9Z2V0IGZpbGVfc2l6ZSgpe2NvbnN0IHJldD13YXNtLl9fd2JnX2dldF9tZXRhZGF0YV9maWxlX3NpemUodGhpcy5fX3diZ19wdHIpO3JldHVybiBCaWdJbnQuYXNVaW50Tig2NCxyZXQpfWdldCB0eXBlKCl7Y29uc3QgcmV0PXdhc20uX193YmdfZ2V0X21ldGFkYXRhX3R5cGUodGhpcy5fX3diZ19wdHIpO3JldHVybiBfX3diaW5kZ2VuX2VudW1fRGlyRW50cnlUeXBlW3JldF19c2V0IGZpbGVfc2l6ZShhcmcwKXt3YXNtLl9fd2JnX3NldF9tZXRhZGF0YV9maWxlX3NpemUodGhpcy5fX3diZ19wdHIsYXJnMCl9c2V0IHR5cGUoYXJnMCl7d2FzbS5fX3diZ19zZXRfbWV0YWRhdGFfdHlwZSh0aGlzLl9fd2JnX3B0ciwoX193YmluZGdlbl9lbnVtX0RpckVudHJ5VHlwZS5pbmRleE9mKGFyZzApKzF8fDMpLTEpfX1TeW1ib2wuZGlzcG9zZSYmKE1ldGFkYXRhLnByb3RvdHlwZVtTeW1ib2wuZGlzcG9zZV09TWV0YWRhdGEucHJvdG90eXBlLmZyZWUpO2NsYXNzIFByb2plY3R7X19kZXN0cm95X2ludG9fcmF3KCl7Y29uc3QgcHRyPXRoaXMuX193YmdfcHRyO3JldHVybiB0aGlzLl9fd2JnX3B0cj0wLFByb2plY3RGaW5hbGl6YXRpb24udW5yZWdpc3Rlcih0aGlzKSxwdHJ9ZnJlZSgpe2NvbnN0IHB0cj10aGlzLl9fZGVzdHJveV9pbnRvX3JhdygpO3dhc20uX193YmdfcHJvamVjdF9mcmVlKHB0ciwwKX1zdGF0aWMgYnVpbGQob3B0aW9ucyl7X2Fzc2VydENsYXNzKG9wdGlvbnMsQnVpbGRPcHRpb25zKTt2YXIgcHRyMD1vcHRpb25zLl9fZGVzdHJveV9pbnRvX3JhdygpO3JldHVybiB0YWtlT2JqZWN0KHdhc20ucHJvamVjdF9idWlsZChwdHIwKSl9c3RhdGljIGdldCBjd2QoKXtsZXQgZGVmZXJyZWQxXzAsZGVmZXJyZWQxXzE7dHJ5e2NvbnN0IHJldHB0cj13YXNtLl9fd2JpbmRnZW5fYWRkX3RvX3N0YWNrX3BvaW50ZXIoLTE2KTt3YXNtLnByb2plY3RfY3dkKHJldHB0cik7dmFyIHIwPWdldERhdGFWaWV3TWVtb3J5MCgpLmdldEludDMyKHJldHB0ciswLCEwKSxyMT1nZXREYXRhVmlld01lbW9yeTAoKS5nZXRJbnQzMihyZXRwdHIrNCwhMCk7cmV0dXJuIGRlZmVycmVkMV8wPXIwLGRlZmVycmVkMV8xPXIxLGdldFN0cmluZ0Zyb21XYXNtMChyMCxyMSl9ZmluYWxseXt3YXNtLl9fd2JpbmRnZW5fYWRkX3RvX3N0YWNrX3BvaW50ZXIoMTYpLHdhc20uX193YmluZGdlbl9leHBvcnQ0KGRlZmVycmVkMV8wLGRlZmVycmVkMV8xLDEpfX1zdGF0aWMgZGVwcyhyZWdpc3RyeSxjb25jdXJyZW5jeSl7dmFyIHB0cjA9aXNMaWtlTm9uZShyZWdpc3RyeSk/MDpwYXNzU3RyaW5nVG9XYXNtMChyZWdpc3RyeSx3YXNtLl9fd2JpbmRnZW5fZXhwb3J0LHdhc20uX193YmluZGdlbl9leHBvcnQyKSxsZW4wPVdBU01fVkVDVE9SX0xFTjtyZXR1cm4gdGFrZU9iamVjdCh3YXNtLnByb2plY3RfZGVwcyhwdHIwLGxlbjAsaXNMaWtlTm9uZShjb25jdXJyZW5jeSk/NDI5NDk2NzI5Nzpjb25jdXJyZW5jeT4+PjApKX1zdGF0aWMgZW50cnlwb2ludHNTdWJzY3JpYmUoY29uZmlnLGNhbGxiYWNrKXtyZXR1cm4gdGFrZU9iamVjdCh3YXNtLnByb2plY3RfZW50cnlwb2ludHNTdWJzY3JpYmUoYWRkSGVhcE9iamVjdChjb25maWcpLGFkZEhlYXBPYmplY3QoY2FsbGJhY2spKSl9c3RhdGljIGd6aXAoZmlsZXMpe3JldHVybiB0YWtlT2JqZWN0KHdhc20ucHJvamVjdF9nemlwKGFkZEhlYXBPYmplY3QoZmlsZXMpKSl9c3RhdGljIGhtckV2ZW50cyhpZGVudGlmaWVyLGNhbGxiYWNrKXtjb25zdCBwdHIwPXBhc3NTdHJpbmdUb1dhc20wKGlkZW50aWZpZXIsd2FzbS5fX3diaW5kZ2VuX2V4cG9ydCx3YXNtLl9fd2JpbmRnZW5fZXhwb3J0MiksbGVuMD1XQVNNX1ZFQ1RPUl9MRU47cmV0dXJuIHRha2VPYmplY3Qod2FzbS5wcm9qZWN0X2htckV2ZW50cyhwdHIwLGxlbjAsYWRkSGVhcE9iamVjdChjYWxsYmFjaykpKX1zdGF0aWMgaW5pdCh0aHJlYWRfdXJsKXtjb25zdCBwdHIwPXBhc3NTdHJpbmdUb1dhc20wKHRocmVhZF91cmwsd2FzbS5fX3diaW5kZ2VuX2V4cG9ydCx3YXNtLl9fd2JpbmRnZW5fZXhwb3J0MiksbGVuMD1XQVNNX1ZFQ1RPUl9MRU47d2FzbS5wcm9qZWN0X2luaXQocHRyMCxsZW4wKX1zdGF0aWMgaW5zdGFsbChwYWNrYWdlX2xvY2ssbWF4X2NvbmN1cnJlbnRfZG93bmxvYWRzKXtjb25zdCBwdHIwPXBhc3NTdHJpbmdUb1dhc20wKHBhY2thZ2VfbG9jayx3YXNtLl9fd2JpbmRnZW5fZXhwb3J0LHdhc20uX193YmluZGdlbl9leHBvcnQyKSxsZW4wPVdBU01fVkVDVE9SX0xFTjtyZXR1cm4gdGFrZU9iamVjdCh3YXNtLnByb2plY3RfaW5zdGFsbChwdHIwLGxlbjAsaXNMaWtlTm9uZShtYXhfY29uY3VycmVudF9kb3dubG9hZHMpPzQyOTQ5NjcyOTc6bWF4X2NvbmN1cnJlbnRfZG93bmxvYWRzPj4+MCkpfXN0YXRpYyBzZXRDd2QocGF0aCl7Y29uc3QgcHRyMD1wYXNzU3RyaW5nVG9XYXNtMChwYXRoLHdhc20uX193YmluZGdlbl9leHBvcnQsd2FzbS5fX3diaW5kZ2VuX2V4cG9ydDIpLGxlbjA9V0FTTV9WRUNUT1JfTEVOO3dhc20ucHJvamVjdF9zZXRDd2QocHRyMCxsZW4wKX1zdGF0aWMgc2lnTWQ1KGNvbnRlbnQpe3JldHVybiB0YWtlT2JqZWN0KHdhc20ucHJvamVjdF9zaWdNZDUoYWRkSGVhcE9iamVjdChjb250ZW50KSkpfXN0YXRpYyB1cGRhdGVJbmZvU3Vic2NyaWJlKGFnZ3JlZ2F0aW9uX21zLGNhbGxiYWNrKXt3YXNtLnByb2plY3RfdXBkYXRlSW5mb1N1YnNjcmliZShhZ2dyZWdhdGlvbl9tcyxhZGRIZWFwT2JqZWN0KGNhbGxiYWNrKSl9c3RhdGljIHdyaXRlQWxsVG9EaXNrKGNhbGxiYWNrKXt3YXNtLnByb2plY3Rfd3JpdGVBbGxUb0Rpc2soYWRkSGVhcE9iamVjdChjYWxsYmFjaykpfX1TeW1ib2wuZGlzcG9zZSYmKFByb2plY3QucHJvdG90eXBlW1N5bWJvbC5kaXNwb3NlXT1Qcm9qZWN0LnByb3RvdHlwZS5mcmVlKTtjbGFzcyBSb290VGFza3tzdGF0aWMgX193cmFwKHB0cil7cHRyPj4+PTA7Y29uc3Qgb2JqPU9iamVjdC5jcmVhdGUoUm9vdFRhc2sucHJvdG90eXBlKTtyZXR1cm4gb2JqLl9fd2JnX3B0cj1wdHIsUm9vdFRhc2tGaW5hbGl6YXRpb24ucmVnaXN0ZXIob2JqLG9iai5fX3diZ19wdHIsb2JqKSxvYmp9X19kZXN0cm95X2ludG9fcmF3KCl7Y29uc3QgcHRyPXRoaXMuX193YmdfcHRyO3JldHVybiB0aGlzLl9fd2JnX3B0cj0wLFJvb3RUYXNrRmluYWxpemF0aW9uLnVucmVnaXN0ZXIodGhpcykscHRyfWZyZWUoKXtjb25zdCBwdHI9dGhpcy5fX2Rlc3Ryb3lfaW50b19yYXcoKTt3YXNtLl9fd2JnX3Jvb3R0YXNrX2ZyZWUocHRyLDApfX1TeW1ib2wuZGlzcG9zZSYmKFJvb3RUYXNrLnByb3RvdHlwZVtTeW1ib2wuZGlzcG9zZV09Um9vdFRhc2sucHJvdG90eXBlLmZyZWUpO2NsYXNzIFdhc21UYXNrTWVzc2FnZXtzdGF0aWMgX193cmFwKHB0cil7cHRyPj4+PTA7Y29uc3Qgb2JqPU9iamVjdC5jcmVhdGUoV2FzbVRhc2tNZXNzYWdlLnByb3RvdHlwZSk7cmV0dXJuIG9iai5fX3diZ19wdHI9cHRyLFdhc21UYXNrTWVzc2FnZUZpbmFsaXphdGlvbi5yZWdpc3RlcihvYmosb2JqLl9fd2JnX3B0cixvYmopLG9ian1fX2Rlc3Ryb3lfaW50b19yYXcoKXtjb25zdCBwdHI9dGhpcy5fX3diZ19wdHI7cmV0dXJuIHRoaXMuX193YmdfcHRyPTAsV2FzbVRhc2tNZXNzYWdlRmluYWxpemF0aW9uLnVucmVnaXN0ZXIodGhpcykscHRyfWZyZWUoKXtjb25zdCBwdHI9dGhpcy5fX2Rlc3Ryb3lfaW50b19yYXcoKTt3YXNtLl9fd2JnX3dhc210YXNrbWVzc2FnZV9mcmVlKHB0ciwwKX1nZXQgdGFza0lkKCl7cmV0dXJuIHdhc20uX193YmdfZ2V0X3dhc210YXNrbWVzc2FnZV90YXNrSWQodGhpcy5fX3diZ19wdHIpPj4+MH1zZXQgdGFza0lkKGFyZzApe3dhc20uX193Ymdfc2V0X3dhc210YXNrbWVzc2FnZV90YXNrSWQodGhpcy5fX3diZ19wdHIsYXJnMCl9Z2V0IGRhdGEoKXtyZXR1cm4gdGFrZU9iamVjdCh3YXNtLndhc210YXNrbWVzc2FnZV9kYXRhKHRoaXMuX193YmdfcHRyKSl9fVN5bWJvbC5kaXNwb3NlJiYoV2FzbVRhc2tNZXNzYWdlLnByb3RvdHlwZVtTeW1ib2wuZGlzcG9zZV09V2FzbVRhc2tNZXNzYWdlLnByb3RvdHlwZS5mcmVlKTtjbGFzcyBXZWJXb3JrZXJDcmVhdGlvbntzdGF0aWMgX193cmFwKHB0cil7cHRyPj4+PTA7Y29uc3Qgb2JqPU9iamVjdC5jcmVhdGUoV2ViV29ya2VyQ3JlYXRpb24ucHJvdG90eXBlKTtyZXR1cm4gb2JqLl9fd2JnX3B0cj1wdHIsV2ViV29ya2VyQ3JlYXRpb25GaW5hbGl6YXRpb24ucmVnaXN0ZXIob2JqLG9iai5fX3diZ19wdHIsb2JqKSxvYmp9X19kZXN0cm95X2ludG9fcmF3KCl7Y29uc3QgcHRyPXRoaXMuX193YmdfcHRyO3JldHVybiB0aGlzLl9fd2JnX3B0cj0wLFdlYldvcmtlckNyZWF0aW9uRmluYWxpemF0aW9uLnVucmVnaXN0ZXIodGhpcykscHRyfWZyZWUoKXtjb25zdCBwdHI9dGhpcy5fX2Rlc3Ryb3lfaW50b19yYXcoKTt3YXNtLl9fd2JnX3dlYndvcmtlcmNyZWF0aW9uX2ZyZWUocHRyLDApfWdldCBvcHRpb25zKCl7Y29uc3QgcmV0PXdhc20uX193YmdfZ2V0X3dlYndvcmtlcmNyZWF0aW9uX29wdGlvbnModGhpcy5fX3diZ19wdHIpO3JldHVybiBXZWJXb3JrZXJPcHRpb25zLl9fd3JhcChyZXQpfXNldCBvcHRpb25zKGFyZzApe19hc3NlcnRDbGFzcyhhcmcwLFdlYldvcmtlck9wdGlvbnMpO3ZhciBwdHIwPWFyZzAuX19kZXN0cm95X2ludG9fcmF3KCk7d2FzbS5fX3diZ19zZXRfd2Vid29ya2VyY3JlYXRpb25fb3B0aW9ucyh0aGlzLl9fd2JnX3B0cixwdHIwKX19U3ltYm9sLmRpc3Bvc2UmJihXZWJXb3JrZXJDcmVhdGlvbi5wcm90b3R5cGVbU3ltYm9sLmRpc3Bvc2VdPVdlYldvcmtlckNyZWF0aW9uLnByb3RvdHlwZS5mcmVlKTtjbGFzcyBXZWJXb3JrZXJPcHRpb25ze3N0YXRpYyBfX3dyYXAocHRyKXtwdHI+Pj49MDtjb25zdCBvYmo9T2JqZWN0LmNyZWF0ZShXZWJXb3JrZXJPcHRpb25zLnByb3RvdHlwZSk7cmV0dXJuIG9iai5fX3diZ19wdHI9cHRyLFdlYldvcmtlck9wdGlvbnNGaW5hbGl6YXRpb24ucmVnaXN0ZXIob2JqLG9iai5fX3diZ19wdHIsb2JqKSxvYmp9X19kZXN0cm95X2ludG9fcmF3KCl7Y29uc3QgcHRyPXRoaXMuX193YmdfcHRyO3JldHVybiB0aGlzLl9fd2JnX3B0cj0wLFdlYldvcmtlck9wdGlvbnNGaW5hbGl6YXRpb24udW5yZWdpc3Rlcih0aGlzKSxwdHJ9ZnJlZSgpe2NvbnN0IHB0cj10aGlzLl9fZGVzdHJveV9pbnRvX3JhdygpO3dhc20uX193Ymdfd2Vid29ya2Vyb3B0aW9uc19mcmVlKHB0ciwwKX1nZXQgY3dkKCl7bGV0IGRlZmVycmVkMV8wLGRlZmVycmVkMV8xO3RyeXtjb25zdCByZXRwdHI9d2FzbS5fX3diaW5kZ2VuX2FkZF90b19zdGFja19wb2ludGVyKC0xNik7d2FzbS5fX3diZ19nZXRfd2Vid29ya2Vyb3B0aW9uc19jd2QocmV0cHRyLHRoaXMuX193YmdfcHRyKTt2YXIgcjA9Z2V0RGF0YVZpZXdNZW1vcnkwKCkuZ2V0SW50MzIocmV0cHRyKzAsITApLHIxPWdldERhdGFWaWV3TWVtb3J5MCgpLmdldEludDMyKHJldHB0cis0LCEwKTtyZXR1cm4gZGVmZXJyZWQxXzA9cjAsZGVmZXJyZWQxXzE9cjEsZ2V0U3RyaW5nRnJvbVdhc20wKHIwLHIxKX1maW5hbGx5e3dhc20uX193YmluZGdlbl9hZGRfdG9fc3RhY2tfcG9pbnRlcigxNiksd2FzbS5fX3diaW5kZ2VuX2V4cG9ydDQoZGVmZXJyZWQxXzAsZGVmZXJyZWQxXzEsMSl9fWdldCBmaWxlbmFtZSgpe2xldCBkZWZlcnJlZDFfMCxkZWZlcnJlZDFfMTt0cnl7Y29uc3QgcmV0cHRyPXdhc20uX193YmluZGdlbl9hZGRfdG9fc3RhY2tfcG9pbnRlcigtMTYpO3dhc20uX193YmdfZ2V0X3dlYndvcmtlcm9wdGlvbnNfZmlsZW5hbWUocmV0cHRyLHRoaXMuX193YmdfcHRyKTt2YXIgcjA9Z2V0RGF0YVZpZXdNZW1vcnkwKCkuZ2V0SW50MzIocmV0cHRyKzAsITApLHIxPWdldERhdGFWaWV3TWVtb3J5MCgpLmdldEludDMyKHJldHB0cis0LCEwKTtyZXR1cm4gZGVmZXJyZWQxXzA9cjAsZGVmZXJyZWQxXzE9cjEsZ2V0U3RyaW5nRnJvbVdhc20wKHIwLHIxKX1maW5hbGx5e3dhc20uX193YmluZGdlbl9hZGRfdG9fc3RhY2tfcG9pbnRlcigxNiksd2FzbS5fX3diaW5kZ2VuX2V4cG9ydDQoZGVmZXJyZWQxXzAsZGVmZXJyZWQxXzEsMSl9fXNldCBjd2QoYXJnMCl7Y29uc3QgcHRyMD1wYXNzU3RyaW5nVG9XYXNtMChhcmcwLHdhc20uX193YmluZGdlbl9leHBvcnQsd2FzbS5fX3diaW5kZ2VuX2V4cG9ydDIpLGxlbjA9V0FTTV9WRUNUT1JfTEVOO3dhc20uX193Ymdfc2V0X3dlYndvcmtlcm9wdGlvbnNfY3dkKHRoaXMuX193YmdfcHRyLHB0cjAsbGVuMCl9c2V0IGZpbGVuYW1lKGFyZzApe2NvbnN0IHB0cjA9cGFzc1N0cmluZ1RvV2FzbTAoYXJnMCx3YXNtLl9fd2JpbmRnZW5fZXhwb3J0LHdhc20uX193YmluZGdlbl9leHBvcnQyKSxsZW4wPVdBU01fVkVDVE9SX0xFTjt3YXNtLl9fd2JnX3NldF93ZWJ3b3JrZXJvcHRpb25zX2ZpbGVuYW1lKHRoaXMuX193YmdfcHRyLHB0cjAsbGVuMCl9fVN5bWJvbC5kaXNwb3NlJiYoV2ViV29ya2VyT3B0aW9ucy5wcm90b3R5cGVbU3ltYm9sLmRpc3Bvc2VdPVdlYldvcmtlck9wdGlvbnMucHJvdG90eXBlLmZyZWUpO2NsYXNzIFdlYldvcmtlclRlcm1pbmF0aW9ue3N0YXRpYyBfX3dyYXAocHRyKXtwdHI+Pj49MDtjb25zdCBvYmo9T2JqZWN0LmNyZWF0ZShXZWJXb3JrZXJUZXJtaW5hdGlvbi5wcm90b3R5cGUpO3JldHVybiBvYmouX193YmdfcHRyPXB0cixXZWJXb3JrZXJUZXJtaW5hdGlvbkZpbmFsaXphdGlvbi5yZWdpc3RlcihvYmosb2JqLl9fd2JnX3B0cixvYmopLG9ian1fX2Rlc3Ryb3lfaW50b19yYXcoKXtjb25zdCBwdHI9dGhpcy5fX3diZ19wdHI7cmV0dXJuIHRoaXMuX193YmdfcHRyPTAsV2ViV29ya2VyVGVybWluYXRpb25GaW5hbGl6YXRpb24udW5yZWdpc3Rlcih0aGlzKSxwdHJ9ZnJlZSgpe2NvbnN0IHB0cj10aGlzLl9fZGVzdHJveV9pbnRvX3JhdygpO3dhc20uX193Ymdfd2Vid29ya2VydGVybWluYXRpb25fZnJlZShwdHIsMCl9Z2V0IG9wdGlvbnMoKXtjb25zdCByZXQ9d2FzbS5fX3diZ19nZXRfd2Vid29ya2VydGVybWluYXRpb25fb3B0aW9ucyh0aGlzLl9fd2JnX3B0cik7cmV0dXJuIFdlYldvcmtlck9wdGlvbnMuX193cmFwKHJldCl9Z2V0IHdvcmtlcklkKCl7cmV0dXJuIHdhc20uX193YmdfZ2V0X3dlYndvcmtlcnRlcm1pbmF0aW9uX3dvcmtlcklkKHRoaXMuX193YmdfcHRyKT4+PjB9c2V0IG9wdGlvbnMoYXJnMCl7X2Fzc2VydENsYXNzKGFyZzAsV2ViV29ya2VyT3B0aW9ucyk7dmFyIHB0cjA9YXJnMC5fX2Rlc3Ryb3lfaW50b19yYXcoKTt3YXNtLl9fd2JnX3NldF93ZWJ3b3JrZXJ0ZXJtaW5hdGlvbl9vcHRpb25zKHRoaXMuX193YmdfcHRyLHB0cjApfXNldCB3b3JrZXJJZChhcmcwKXt3YXNtLl9fd2JnX3NldF93ZWJ3b3JrZXJ0ZXJtaW5hdGlvbl93b3JrZXJJZCh0aGlzLl9fd2JnX3B0cixhcmcwKX19ZnVuY3Rpb24gZ2V0V2FzbU1lbW9yeSgpe3JldHVybiB0YWtlT2JqZWN0KHdhc20uZ2V0V2FzbU1lbW9yeSgpKX1mdW5jdGlvbiBnZXRXYXNtTW9kdWxlKCl7cmV0dXJuIHRha2VPYmplY3Qod2FzbS5nZXRXYXNtTW9kdWxlKCkpfWZ1bmN0aW9uIGluaXRMb2dGaWx0ZXIoZmlsdGVyKXtjb25zdCBwdHIwPXBhc3NTdHJpbmdUb1dhc20wKGZpbHRlcix3YXNtLl9fd2JpbmRnZW5fZXhwb3J0LHdhc20uX193YmluZGdlbl9leHBvcnQyKSxsZW4wPVdBU01fVkVDVE9SX0xFTjt3YXNtLmluaXRMb2dGaWx0ZXIocHRyMCxsZW4wKX1mdW5jdGlvbiBpbml0X3BhY2soKXt3YXNtLmluaXRfcGFjaygpfWZ1bmN0aW9uIHJlY3ZUYXNrTWVzc2FnZUluV29ya2VyKHdvcmtlcl9pZCl7cmV0dXJuIHRha2VPYmplY3Qod2FzbS5yZWN2VGFza01lc3NhZ2VJbldvcmtlcih3b3JrZXJfaWQpKX1mdW5jdGlvbiByZWdpc3RlcldvcmtlclNjaGVkdWxlcihjcmVhdG9yLHRlcm1pbmF0b3Ipe3dhc20ucmVnaXN0ZXJXb3JrZXJTY2hlZHVsZXIoYWRkSGVhcE9iamVjdChjcmVhdG9yKSxhZGRIZWFwT2JqZWN0KHRlcm1pbmF0b3IpKX1mdW5jdGlvbiBzZW5kVGFza01lc3NhZ2UobWVzc2FnZSl7cmV0dXJuIHRha2VPYmplY3Qod2FzbS5zZW5kVGFza01lc3NhZ2UoYWRkSGVhcE9iamVjdChtZXNzYWdlKSkpfWZ1bmN0aW9uIHdhc21fdGhyZWFkX2VudHJ5X3BvaW50KHB0cil7d2FzbS53YXNtX3RocmVhZF9lbnRyeV9wb2ludChwdHIpfWZ1bmN0aW9uIHdvcmtlckNyZWF0ZWQod29ya2VyX2lkKXt3YXNtLndvcmtlckNyZWF0ZWQod29ya2VyX2lkKX1mdW5jdGlvbiBfX3diZ19nZXRfaW1wb3J0cyhtZW1vcnkpe2NvbnN0IGltcG9ydDA9e19fcHJvdG9fXzpudWxsLF9fd2JnX0Vycm9yXzhjNGU0M2ZlNzQ1NTlkNzM6ZnVuY3Rpb24oYXJnMCxhcmcxKXtyZXR1cm4gYWRkSGVhcE9iamVjdChFcnJvcihnZXRTdHJpbmdGcm9tV2FzbTAoYXJnMCxhcmcxKSkpfSxfX3diZ19fX3diaW5kZ2VuX2RlYnVnX3N0cmluZ18wYmM4NDgyYzZlMzUwOGFlOmZ1bmN0aW9uKGFyZzAsYXJnMSl7Y29uc3QgcHRyMT1wYXNzU3RyaW5nVG9XYXNtMChkZWJ1Z1N0cmluZyhnZXRPYmplY3QoYXJnMSkpLHdhc20uX193YmluZGdlbl9leHBvcnQsd2FzbS5fX3diaW5kZ2VuX2V4cG9ydDIpLGxlbjE9V0FTTV9WRUNUT1JfTEVOO2dldERhdGFWaWV3TWVtb3J5MCgpLnNldEludDMyKGFyZzArNCxsZW4xLCEwKSxnZXREYXRhVmlld01lbW9yeTAoKS5zZXRJbnQzMihhcmcwKzAscHRyMSwhMCl9LF9fd2JnX19fd2JpbmRnZW5faXNfZnVuY3Rpb25fMDA5NWE3M2I4YjE1NmY3NjpmdW5jdGlvbihhcmcwKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgZ2V0T2JqZWN0KGFyZzApfSxfX3diZ19fX3diaW5kZ2VuX2lzX251bGxfYWMzNGY1MDAzOTkxNzU5YTpmdW5jdGlvbihhcmcwKXtyZXR1cm4gbnVsbD09PWdldE9iamVjdChhcmcwKX0sX193YmdfX193YmluZGdlbl9pc19vYmplY3RfNWFlOGU1ODgwZjJjMWZiZDpmdW5jdGlvbihhcmcwKXtjb25zdCB2YWw9Z2V0T2JqZWN0KGFyZzApO3JldHVybiJvYmplY3QiPT10eXBlb2YgdmFsJiZudWxsIT09dmFsfSxfX3diZ19fX3diaW5kZ2VuX2lzX3VuZGVmaW5lZF85ZTRkOTI1MzRjNDJkNzc4OmZ1bmN0aW9uKGFyZzApe3JldHVybiB2b2lkIDA9PT1nZXRPYmplY3QoYXJnMCl9LF9fd2JnX19fd2JpbmRnZW5fbWVtb3J5X2JkMWZiY2YyMWZiZWYzYzg6ZnVuY3Rpb24oKXtyZXR1cm4gYWRkSGVhcE9iamVjdCh3YXNtLm1lbW9yeSl9LF9fd2JnX19fd2JpbmRnZW5fbW9kdWxlX2Y2YjgwNTJkNzljMWNjMTY6ZnVuY3Rpb24oKXtyZXR1cm4gYWRkSGVhcE9iamVjdCh3YXNtTW9kdWxlKX0sX193YmdfX193YmluZGdlbl9udW1iZXJfZ2V0XzhmZjQyNTU1MTZjY2FkM2U6ZnVuY3Rpb24oYXJnMCxhcmcxKXtjb25zdCBvYmo9Z2V0T2JqZWN0KGFyZzEpLHJldD0ibnVtYmVyIj09dHlwZW9mIG9iaj9vYmo6dm9pZCAwO2dldERhdGFWaWV3TWVtb3J5MCgpLnNldEZsb2F0NjQoYXJnMCs4LGlzTGlrZU5vbmUocmV0KT8wOnJldCwhMCksZ2V0RGF0YVZpZXdNZW1vcnkwKCkuc2V0SW50MzIoYXJnMCswLCFpc0xpa2VOb25lKHJldCksITApfSxfX3diZ19fX3diaW5kZ2VuX3JldGhyb3dfMDU1MjVjNTY3ZjE1NDQ3MjpmdW5jdGlvbihhcmcwKXt0aHJvdyB0YWtlT2JqZWN0KGFyZzApfSxfX3diZ19fX3diaW5kZ2VuX3N0cmluZ19nZXRfNzJmYjY5NjIwMmM1NjcyOTpmdW5jdGlvbihhcmcwLGFyZzEpe2NvbnN0IG9iaj1nZXRPYmplY3QoYXJnMSkscmV0PSJzdHJpbmciPT10eXBlb2Ygb2JqP29iajp2b2lkIDA7dmFyIHB0cjE9aXNMaWtlTm9uZShyZXQpPzA6cGFzc1N0cmluZ1RvV2FzbTAocmV0LHdhc20uX193YmluZGdlbl9leHBvcnQsd2FzbS5fX3diaW5kZ2VuX2V4cG9ydDIpLGxlbjE9V0FTTV9WRUNUT1JfTEVOO2dldERhdGFWaWV3TWVtb3J5MCgpLnNldEludDMyKGFyZzArNCxsZW4xLCEwKSxnZXREYXRhVmlld01lbW9yeTAoKS5zZXRJbnQzMihhcmcwKzAscHRyMSwhMCl9LF9fd2JnX19fd2JpbmRnZW5fdGhyb3dfYmUyODlkNTAzNGVkMjcxYjpmdW5jdGlvbihhcmcwLGFyZzEpe3Rocm93IG5ldyBFcnJvcihnZXRTdHJpbmdGcm9tV2FzbTAoYXJnMCxhcmcxKSl9LF9fd2JnX193YmdfY2JfdW5yZWZfZDliODdmZjc5ODJlM2IyMTpmdW5jdGlvbihhcmcwKXtnZXRPYmplY3QoYXJnMCkuX3diZ19jYl91bnJlZigpfSxfX3diZ19hYm9ydF8yZjA1ODRlMDNlOGUzOTUwOmZ1bmN0aW9uKGFyZzApe2dldE9iamVjdChhcmcwKS5hYm9ydCgpfSxfX3diZ19hYm9ydF9kNTQ5YjkyZDNjNjY1ZGUxOmZ1bmN0aW9uKGFyZzAsYXJnMSl7Z2V0T2JqZWN0KGFyZzApLmFib3J0KGdldE9iamVjdChhcmcxKSl9LF9fd2JnX2FwcGVuZF9hOTkyY2NjMzdhYTYyZGM0OmZ1bmN0aW9uKCl7cmV0dXJuIGhhbmRsZUVycm9yKGZ1bmN0aW9uKGFyZzAsYXJnMSxhcmcyLGFyZzMsYXJnNCl7Z2V0T2JqZWN0KGFyZzApLmFwcGVuZChnZXRTdHJpbmdGcm9tV2FzbTAoYXJnMSxhcmcyKSxnZXRTdHJpbmdGcm9tV2FzbTAoYXJnMyxhcmc0KSl9LGFyZ3VtZW50cyl9LF9fd2JnX2FycmF5QnVmZmVyXzA1Y2UxYWYyM2U5MDY0ZTg6ZnVuY3Rpb24oYXJnMCl7cmV0dXJuIGFkZEhlYXBPYmplY3QoZ2V0T2JqZWN0KGFyZzApLmFycmF5QnVmZmVyKCkpfSxfX3diZ19hcnJheUJ1ZmZlcl9iYjU0MDc2MTY2MDA2YzM5OmZ1bmN0aW9uKCl7cmV0dXJuIGhhbmRsZUVycm9yKGZ1bmN0aW9uKGFyZzApe3JldHVybiBhZGRIZWFwT2JqZWN0KGdldE9iamVjdChhcmcwKS5hcnJheUJ1ZmZlcigpKX0sYXJndW1lbnRzKX0sX193YmdfYXN5bmNfNzlmMmE2MWY5ZDBiMzFjZjpmdW5jdGlvbihhcmcwKXtyZXR1cm4gZ2V0T2JqZWN0KGFyZzApLmFzeW5jfSxfX3diZ19idWZmZXJfN2I1ZjUzZTQ2NTU3ZDhmMTpmdW5jdGlvbihhcmcwKXtyZXR1cm4gYWRkSGVhcE9iamVjdChnZXRPYmplY3QoYXJnMCkuYnVmZmVyKX0sX193YmdfY2FsbF8zODllZmUyODQzNWE5Mzg4OmZ1bmN0aW9uKCl7cmV0dXJuIGhhbmRsZUVycm9yKGZ1bmN0aW9uKGFyZzAsYXJnMSl7cmV0dXJuIGFkZEhlYXBPYmplY3QoZ2V0T2JqZWN0KGFyZzApLmNhbGwoZ2V0T2JqZWN0KGFyZzEpKSl9LGFyZ3VtZW50cyl9LF9fd2JnX2NhbGxfNDcwOGUwYzEzYmRjOGU5NTpmdW5jdGlvbigpe3JldHVybiBoYW5kbGVFcnJvcihmdW5jdGlvbihhcmcwLGFyZzEsYXJnMil7cmV0dXJuIGFkZEhlYXBPYmplY3QoZ2V0T2JqZWN0KGFyZzApLmNhbGwoZ2V0T2JqZWN0KGFyZzEpLGdldE9iamVjdChhcmcyKSkpfSxhcmd1bWVudHMpfSxfX3diZ19jaGFuZ2VkSGFuZGxlXzEyMzY5NmVhZWFmZjMyZDc6ZnVuY3Rpb24oYXJnMCl7Y29uc3QgcmV0PWdldE9iamVjdChhcmcwKS5jaGFuZ2VkSGFuZGxlO3JldHVybiBpc0xpa2VOb25lKHJldCk/MDphZGRIZWFwT2JqZWN0KHJldCl9LF9fd2JnX2NsZWFyVGltZW91dF83YTQyYjQ5Nzg0YWVhNjQxOmZ1bmN0aW9uKGFyZzApe3JldHVybiBhZGRIZWFwT2JqZWN0KGNsZWFyVGltZW91dCh0YWtlT2JqZWN0KGFyZzApKSl9LF9fd2JnX2Nsb3NlXzRiYTMxMjI1M2M0MjQzNDI6ZnVuY3Rpb24oYXJnMCl7Z2V0T2JqZWN0KGFyZzApLmNsb3NlKCl9LF9fd2JnX2Nsb3NlXzgzZmI4MDlhY2EzZGU3Zjk6ZnVuY3Rpb24oYXJnMCl7cmV0dXJuIGFkZEhlYXBPYmplY3QoZ2V0T2JqZWN0KGFyZzApLmNsb3NlKCkpfSxfX3diZ19jcmVhdGVPYmplY3RVUkxfOTE4MTg1ZGI2YTEwYTBjODpmdW5jdGlvbigpe3JldHVybiBoYW5kbGVFcnJvcihmdW5jdGlvbihhcmcwLGFyZzEpe2NvbnN0IHB0cjE9cGFzc1N0cmluZ1RvV2FzbTAoVVJMLmNyZWF0ZU9iamVjdFVSTChnZXRPYmplY3QoYXJnMSkpLHdhc20uX193YmluZGdlbl9leHBvcnQsd2FzbS5fX3diaW5kZ2VuX2V4cG9ydDIpLGxlbjE9V0FTTV9WRUNUT1JfTEVOO2dldERhdGFWaWV3TWVtb3J5MCgpLnNldEludDMyKGFyZzArNCxsZW4xLCEwKSxnZXREYXRhVmlld01lbW9yeTAoKS5zZXRJbnQzMihhcmcwKzAscHRyMSwhMCl9LGFyZ3VtZW50cyl9LF9fd2JnX2NyZWF0ZVdyaXRhYmxlXzgwYmM1ZGUzNzQ0NDhiNDI6ZnVuY3Rpb24oYXJnMCl7cmV0dXJuIGFkZEhlYXBPYmplY3QoZ2V0T2JqZWN0KGFyZzApLmNyZWF0ZVdyaXRhYmxlKCkpfSxfX3diZ19kYXRhXzUzMzBkYTUwMzEyZDBiYzE6ZnVuY3Rpb24oYXJnMCl7cmV0dXJuIGFkZEhlYXBPYmplY3QoZ2V0T2JqZWN0KGFyZzApLmRhdGEpfSxfX3diZ19kZWJ1Z180NmE5Mzk5NWZjNmY4ODIwOmZ1bmN0aW9uKGFyZzAsYXJnMSxhcmcyLGFyZzMpe2NvbnNvbGUuZGVidWcoZ2V0T2JqZWN0KGFyZzApLGdldE9iamVjdChhcmcxKSxnZXRPYmplY3QoYXJnMiksZ2V0T2JqZWN0KGFyZzMpKX0sX193YmdfZGVidWdfYTQwOTlmYTEyZGI2Y2Q2MTpmdW5jdGlvbihhcmcwKXtjb25zb2xlLmRlYnVnKGdldE9iamVjdChhcmcwKSl9LF9fd2JnX2RpcmVudHJ5X25ldzpmdW5jdGlvbihhcmcwKXtyZXR1cm4gYWRkSGVhcE9iamVjdChEaXJFbnRyeS5fX3dyYXAoYXJnMCkpfSxfX3diZ19kb25lXzU3YjM5ZWNkOWFkZGZlODE6ZnVuY3Rpb24oYXJnMCl7cmV0dXJuIGdldE9iamVjdChhcmcwKS5kb25lfSxfX3diZ19lbnRyaWVzXzA0YTRiOTgyMzUxYTcxN2Y6ZnVuY3Rpb24oYXJnMCl7cmV0dXJuIGFkZEhlYXBPYmplY3QoZ2V0T2JqZWN0KGFyZzApLmVudHJpZXMoKSl9LF9fd2JnX2Vycm9yXzc1MzRiOGU5YTM2ZjFhYjQ6ZnVuY3Rpb24oYXJnMCxhcmcxKXtsZXQgZGVmZXJyZWQwXzAsZGVmZXJyZWQwXzE7dHJ5e2RlZmVycmVkMF8wPWFyZzAsZGVmZXJyZWQwXzE9YXJnMSxjb25zb2xlLmVycm9yKGdldFN0cmluZ0Zyb21XYXNtMChhcmcwLGFyZzEpKX1maW5hbGx5e3dhc20uX193YmluZGdlbl9leHBvcnQ0KGRlZmVycmVkMF8wLGRlZmVycmVkMF8xLDEpfX0sX193YmdfZXJyb3JfNzk0ZDBmZmM5ZDAwZDVjMzpmdW5jdGlvbihhcmcwLGFyZzEsYXJnMixhcmczKXtjb25zb2xlLmVycm9yKGdldE9iamVjdChhcmcwKSxnZXRPYmplY3QoYXJnMSksZ2V0T2JqZWN0KGFyZzIpLGdldE9iamVjdChhcmczKSl9LF9fd2JnX2Vycm9yXzlhN2ZlM2Y5MzIwMzRjZGU6ZnVuY3Rpb24oYXJnMCl7Y29uc29sZS5lcnJvcihnZXRPYmplY3QoYXJnMCkpfSxfX3diZ19ldmFsXzNmMGI5ZjBjYmFmNDVhMzQ6ZnVuY3Rpb24oKXtyZXR1cm4gaGFuZGxlRXJyb3IoZnVuY3Rpb24oYXJnMCxhcmcxKXtjb25zdCByZXQ9ZXZhbChnZXRTdHJpbmdGcm9tV2FzbTAoYXJnMCxhcmcxKSk7cmV0dXJuIGFkZEhlYXBPYmplY3QocmV0KX0sYXJndW1lbnRzKX0sX193YmdfZmV0Y2hfNzRhM2U4NGViZDJjOWEwZTpmdW5jdGlvbihhcmcwKXtyZXR1cm4gYWRkSGVhcE9iamVjdChmZXRjaChnZXRPYmplY3QoYXJnMCkpKX0sX193YmdfZmV0Y2hfYWZiNmE0YjZjYWNmODc2ZDpmdW5jdGlvbihhcmcwLGFyZzEpe3JldHVybiBhZGRIZWFwT2JqZWN0KGdldE9iamVjdChhcmcwKS5mZXRjaChnZXRPYmplY3QoYXJnMSkpKX0sX193YmdfZmx1c2hfMjJiNzg1MDYwNTkyY2E1ZjpmdW5jdGlvbigpe3JldHVybiBoYW5kbGVFcnJvcihmdW5jdGlvbihhcmcwKXtnZXRPYmplY3QoYXJnMCkuZmx1c2goKX0sYXJndW1lbnRzKX0sX193YmdfZnJvbV9iZGRkNjRlN2Q1ZmY2OTQxOmZ1bmN0aW9uKGFyZzApe3JldHVybiBhZGRIZWFwT2JqZWN0KEFycmF5LmZyb20oZ2V0T2JqZWN0KGFyZzApKSl9LF9fd2JnX2dldERpcmVjdG9yeUhhbmRsZV84N2NlOGNhNTNjZjRkOGRjOmZ1bmN0aW9uKGFyZzAsYXJnMSxhcmcyLGFyZzMpe3JldHVybiBhZGRIZWFwT2JqZWN0KGdldE9iamVjdChhcmcwKS5nZXREaXJlY3RvcnlIYW5kbGUoZ2V0U3RyaW5nRnJvbVdhc20wKGFyZzEsYXJnMiksZ2V0T2JqZWN0KGFyZzMpKSl9LF9fd2JnX2dldERpcmVjdG9yeV9iNjZhZTNlNzlmOTAyOTgyOmZ1bmN0aW9uKGFyZzApe3JldHVybiBhZGRIZWFwT2JqZWN0KGdldE9iamVjdChhcmcwKS5nZXREaXJlY3RvcnkoKSl9LF9fd2JnX2dldEZpbGVIYW5kbGVfZmY0YWI5MTdiNDVhZmZiMzpmdW5jdGlvbihhcmcwLGFyZzEsYXJnMixhcmczKXtyZXR1cm4gYWRkSGVhcE9iamVjdChnZXRPYmplY3QoYXJnMCkuZ2V0RmlsZUhhbmRsZShnZXRTdHJpbmdGcm9tV2FzbTAoYXJnMSxhcmcyKSxnZXRPYmplY3QoYXJnMykpKX0sX193YmdfZ2V0RmlsZV8xMTUzNTRmYzk1MGVkYzg4OmZ1bmN0aW9uKGFyZzApe3JldHVybiBhZGRIZWFwT2JqZWN0KGdldE9iamVjdChhcmcwKS5nZXRGaWxlKCkpfSxfX3diZ19nZXRSYW5kb21WYWx1ZXNfODA1NzhiMmZmMmEwOTNiYTpmdW5jdGlvbigpe3JldHVybiBoYW5kbGVFcnJvcihmdW5jdGlvbihhcmcwKXtnbG9iYWxUaGlzLmNyeXB0by5nZXRSYW5kb21WYWx1ZXMoZ2V0T2JqZWN0KGFyZzApKX0sYXJndW1lbnRzKX0sX193YmdfZ2V0XzliOTRkNzNlNjIyMWY3NWM6ZnVuY3Rpb24oYXJnMCxhcmcxKXtyZXR1cm4gYWRkSGVhcE9iamVjdChnZXRPYmplY3QoYXJnMClbYXJnMT4+PjBdKX0sX193YmdfZ2V0X2IzZWQzYWQ0YmUyYmM4YWM6ZnVuY3Rpb24oKXtyZXR1cm4gaGFuZGxlRXJyb3IoZnVuY3Rpb24oYXJnMCxhcmcxKXtyZXR1cm4gYWRkSGVhcE9iamVjdChSZWZsZWN0LmdldChnZXRPYmplY3QoYXJnMCksZ2V0T2JqZWN0KGFyZzEpKSl9LGFyZ3VtZW50cyl9LF9fd2JnX2hhc19kNGU1MzIzODk2NmMxMmI2OmZ1bmN0aW9uKCl7cmV0dXJuIGhhbmRsZUVycm9yKGZ1bmN0aW9uKGFyZzAsYXJnMSl7cmV0dXJuIFJlZmxlY3QuaGFzKGdldE9iamVjdChhcmcwKSxnZXRPYmplY3QoYXJnMSkpfSxhcmd1bWVudHMpfSxfX3diZ19oZWFkZXJzXzU5YTI5MzhkYjlmODA5ODU6ZnVuY3Rpb24oYXJnMCl7cmV0dXJuIGFkZEhlYXBPYmplY3QoZ2V0T2JqZWN0KGFyZzApLmhlYWRlcnMpfSxfX3diZ19pbmZvXzE0OGQwNDM4NDA1ODIwMTI6ZnVuY3Rpb24oYXJnMCl7Y29uc29sZS5pbmZvKGdldE9iamVjdChhcmcwKSl9LF9fd2JnX2luZm9fOWU2MDJjZjEwYzVjNjkwYjpmdW5jdGlvbihhcmcwLGFyZzEsYXJnMixhcmczKXtjb25zb2xlLmluZm8oZ2V0T2JqZWN0KGFyZzApLGdldE9iamVjdChhcmcxKSxnZXRPYmplY3QoYXJnMiksZ2V0T2JqZWN0KGFyZzMpKX0sX193YmdfaW5zdGFuY2VvZl9EZWRpY2F0ZWRXb3JrZXJHbG9iYWxTY29wZV8xNTA2YjNkMDE3Nzk5ZDQ4OmZ1bmN0aW9uKGFyZzApe2xldCByZXN1bHQ7dHJ5e3Jlc3VsdD1nZXRPYmplY3QoYXJnMClpbnN0YW5jZW9mIERlZGljYXRlZFdvcmtlckdsb2JhbFNjb3BlfWNhdGNoKF8pe3Jlc3VsdD0hMX1yZXR1cm4gcmVzdWx0fSxfX3diZ19pbnN0YW5jZW9mX0RvbUV4Y2VwdGlvbl85OWMxNzcxOTNlNTU0Yjc1OmZ1bmN0aW9uKGFyZzApe2xldCByZXN1bHQ7dHJ5e3Jlc3VsdD1nZXRPYmplY3QoYXJnMClpbnN0YW5jZW9mIERPTUV4Y2VwdGlvbn1jYXRjaChfKXtyZXN1bHQ9ITF9cmV0dXJuIHJlc3VsdH0sX193YmdfaW5zdGFuY2VvZl9GaWxlU3lzdGVtRGlyZWN0b3J5SGFuZGxlXzU2YTE2NzAzOWQ2MTQ1NDg6ZnVuY3Rpb24oYXJnMCl7bGV0IHJlc3VsdDt0cnl7cmVzdWx0PWdldE9iamVjdChhcmcwKWluc3RhbmNlb2YgRmlsZVN5c3RlbURpcmVjdG9yeUhhbmRsZX1jYXRjaChfKXtyZXN1bHQ9ITF9cmV0dXJuIHJlc3VsdH0sX193YmdfaW5zdGFuY2VvZl9SZXNwb25zZV9lZTFkNTRkNzlhZTQxOTc3OmZ1bmN0aW9uKGFyZzApe2xldCByZXN1bHQ7dHJ5e3Jlc3VsdD1nZXRPYmplY3QoYXJnMClpbnN0YW5jZW9mIFJlc3BvbnNlfWNhdGNoKF8pe3Jlc3VsdD0hMX1yZXR1cm4gcmVzdWx0fSxfX3diZ19pbnN0YW5jZW9mX1VpbnQ4QXJyYXlfOWI5MDc1OTM1Yzc0NzA3YzpmdW5jdGlvbihhcmcwKXtsZXQgcmVzdWx0O3RyeXtyZXN1bHQ9Z2V0T2JqZWN0KGFyZzApaW5zdGFuY2VvZiBVaW50OEFycmF5fWNhdGNoKF8pe3Jlc3VsdD0hMX1yZXR1cm4gcmVzdWx0fSxfX3diZ19pc0FycmF5X2QzMTRiYjk4ZmNmMDgzMzE6ZnVuY3Rpb24oYXJnMCl7cmV0dXJuIEFycmF5LmlzQXJyYXkoZ2V0T2JqZWN0KGFyZzApKX0sX193YmdfaXRlcmF0b3JfNmZmNjU2MGNhMTU2OGU1NTpmdW5jdGlvbigpe3JldHVybiBhZGRIZWFwT2JqZWN0KFN5bWJvbC5pdGVyYXRvcil9LF9fd2JnX2tpbmRfOTA3NjlkNmMxNmZhZWFmZDpmdW5jdGlvbihhcmcwKXtjb25zdCByZXQ9Z2V0T2JqZWN0KGFyZzApLmtpbmQ7cmV0dXJuKF9fd2JpbmRnZW5fZW51bV9GaWxlU3lzdGVtSGFuZGxlS2luZC5pbmRleE9mKHJldCkrMXx8MyktMX0sX193YmdfbGVuZ3RoXzMyZWQ5YTI3OWFjZDA1NGM6ZnVuY3Rpb24oYXJnMCl7cmV0dXJuIGdldE9iamVjdChhcmcwKS5sZW5ndGh9LF9fd2JnX2xlbmd0aF8zNWE3YmFjZTQwZjM2ZWFjOmZ1bmN0aW9uKGFyZzApe3JldHVybiBnZXRPYmplY3QoYXJnMCkubGVuZ3RofSxfX3diZ19tZXNzYWdlXzBiMmIwMjk4YTIzMWIwZDQ6ZnVuY3Rpb24oYXJnMCxhcmcxKXtjb25zdCBwdHIxPXBhc3NTdHJpbmdUb1dhc20wKGdldE9iamVjdChhcmcxKS5tZXNzYWdlLHdhc20uX193YmluZGdlbl9leHBvcnQsd2FzbS5fX3diaW5kZ2VuX2V4cG9ydDIpLGxlbjE9V0FTTV9WRUNUT1JfTEVOO2dldERhdGFWaWV3TWVtb3J5MCgpLnNldEludDMyKGFyZzArNCxsZW4xLCEwKSxnZXREYXRhVmlld01lbW9yeTAoKS5zZXRJbnQzMihhcmcwKzAscHRyMSwhMCl9LF9fd2JnX21ldGFkYXRhX25ldzpmdW5jdGlvbihhcmcwKXtyZXR1cm4gYWRkSGVhcE9iamVjdChNZXRhZGF0YS5fX3dyYXAoYXJnMCkpfSxfX3diZ19uYW1lXzI0Mjc1M2U1MTEwY2Q3NTY6ZnVuY3Rpb24oYXJnMCxhcmcxKXtjb25zdCBwdHIxPXBhc3NTdHJpbmdUb1dhc20wKGdldE9iamVjdChhcmcxKS5uYW1lLHdhc20uX193YmluZGdlbl9leHBvcnQsd2FzbS5fX3diaW5kZ2VuX2V4cG9ydDIpLGxlbjE9V0FTTV9WRUNUT1JfTEVOO2dldERhdGFWaWV3TWVtb3J5MCgpLnNldEludDMyKGFyZzArNCxsZW4xLCEwKSxnZXREYXRhVmlld01lbW9yeTAoKS5zZXRJbnQzMihhcmcwKzAscHRyMSwhMCl9LF9fd2JnX25hdmlnYXRvcl80NDc4OTMxZjMyZWJjYTU3OmZ1bmN0aW9uKGFyZzApe3JldHVybiBhZGRIZWFwT2JqZWN0KGdldE9iamVjdChhcmcwKS5uYXZpZ2F0b3IpfSxfX3diZ19uZXdfMzYxMzA4YjIzNTZjZWNkMDpmdW5jdGlvbigpe3JldHVybiBhZGRIZWFwT2JqZWN0KG5ldyBPYmplY3QpfSxfX3diZ19uZXdfM2ViMzZhZTI0MWZlNmY0NDpmdW5jdGlvbigpe3JldHVybiBhZGRIZWFwT2JqZWN0KG5ldyBBcnJheSl9LF9fd2JnX25ld180ZjhmM2MxMjNlNDc0MzU4OmZ1bmN0aW9uKCl7cmV0dXJuIGhhbmRsZUVycm9yKGZ1bmN0aW9uKGFyZzAsYXJnMSl7cmV0dXJuIGFkZEhlYXBPYmplY3QobmV3IFdvcmtlcihnZXRTdHJpbmdGcm9tV2FzbTAoYXJnMCxhcmcxKSkpfSxhcmd1bWVudHMpfSxfX3diZ19uZXdfNjQyODRiZDQ4N2Y5ZDIzOTpmdW5jdGlvbigpe3JldHVybiBoYW5kbGVFcnJvcihmdW5jdGlvbigpe3JldHVybiBhZGRIZWFwT2JqZWN0KG5ldyBIZWFkZXJzKX0sYXJndW1lbnRzKX0sX193YmdfbmV3XzcyYzYyN2JhODBkZTFjMjE6ZnVuY3Rpb24oYXJnMCl7cmV0dXJuIGFkZEhlYXBPYmplY3QobmV3IEludDMyQXJyYXkoZ2V0T2JqZWN0KGFyZzApKSl9LF9fd2JnX25ld184YTZmMjM4YTZlY2U4NmVhOmZ1bmN0aW9uKCl7cmV0dXJuIGFkZEhlYXBPYmplY3QobmV3IEVycm9yKX0sX193YmdfbmV3XzhlYzU4MDFiMzlkNmY4NjI6ZnVuY3Rpb24oYXJnMCl7cmV0dXJuIGFkZEhlYXBPYmplY3QobmV3IEZpbGVTeXN0ZW1PYnNlcnZlcihnZXRPYmplY3QoYXJnMCkpKX0sX193YmdfbmV3X2I1ZDllMmZiMzg5ZmVmOTE6ZnVuY3Rpb24oYXJnMCxhcmcxKXt0cnl7dmFyIHN0YXRlMD17YTphcmcwLGI6YXJnMX07Y29uc3QgcmV0PW5ldyBQcm9taXNlKChhcmcwLGFyZzEpPT57Y29uc3QgYT1zdGF0ZTAuYTtzdGF0ZTAuYT0wO3RyeXtyZXR1cm4gX193YXNtX2JpbmRnZW5fZnVuY19lbGVtXzM0NjUoYSxzdGF0ZTAuYixhcmcwLGFyZzEpfWZpbmFsbHl7c3RhdGUwLmE9YX19KTtyZXR1cm4gYWRkSGVhcE9iamVjdChyZXQpfWZpbmFsbHl7c3RhdGUwLmE9c3RhdGUwLmI9MH19LF9fd2JnX25ld19iOTQ5ZTdmNTYxNTBhNWQxOmZ1bmN0aW9uKCl7cmV0dXJuIGhhbmRsZUVycm9yKGZ1bmN0aW9uKCl7cmV0dXJuIGFkZEhlYXBPYmplY3QobmV3IEFib3J0Q29udHJvbGxlcil9LGFyZ3VtZW50cyl9LF9fd2JnX25ld19kZDJiNjgwYzhiZjZhZTI5OmZ1bmN0aW9uKGFyZzApe3JldHVybiBhZGRIZWFwT2JqZWN0KG5ldyBVaW50OEFycmF5KGdldE9iamVjdChhcmcwKSkpfSxfX3diZ19uZXdfZnJvbV9zbGljZV9hM2QyNjI5ZGMxODI2Nzg0OmZ1bmN0aW9uKGFyZzAsYXJnMSl7cmV0dXJuIGFkZEhlYXBPYmplY3QobmV3IFVpbnQ4QXJyYXkoZ2V0QXJyYXlVOEZyb21XYXNtMChhcmcwLGFyZzEpKSl9LF9fd2JnX25ld19ub19hcmdzXzFjN2M4NDJmMDhkMDBlYmI6ZnVuY3Rpb24oYXJnMCxhcmcxKXtyZXR1cm4gYWRkSGVhcE9iamVjdChuZXcgRnVuY3Rpb24oZ2V0U3RyaW5nRnJvbVdhc20wKGFyZzAsYXJnMSkpKX0sX193YmdfbmV3X3dpdGhfbGVuZ3RoX2EyYzM5Y2JlODhmZDhmZjE6ZnVuY3Rpb24oYXJnMCl7cmV0dXJuIGFkZEhlYXBPYmplY3QobmV3IFVpbnQ4QXJyYXkoYXJnMD4+PjApKX0sX193YmdfbmV3X3dpdGhfb3B0aW9uc18xNDVhZmJhOTIyYWQzNzAzOmZ1bmN0aW9uKCl7cmV0dXJuIGhhbmRsZUVycm9yKGZ1bmN0aW9uKGFyZzAsYXJnMSxhcmcyKXtyZXR1cm4gYWRkSGVhcE9iamVjdChuZXcgV29ya2VyKGdldFN0cmluZ0Zyb21XYXNtMChhcmcwLGFyZzEpLGdldE9iamVjdChhcmcyKSkpfSxhcmd1bWVudHMpfSxfX3diZ19uZXdfd2l0aF9zdHJfYW5kX2luaXRfYTYxY2JjNmJkZWYyMTYxNDpmdW5jdGlvbigpe3JldHVybiBoYW5kbGVFcnJvcihmdW5jdGlvbihhcmcwLGFyZzEsYXJnMil7cmV0dXJuIGFkZEhlYXBPYmplY3QobmV3IFJlcXVlc3QoZ2V0U3RyaW5nRnJvbVdhc20wKGFyZzAsYXJnMSksZ2V0T2JqZWN0KGFyZzIpKSl9LGFyZ3VtZW50cyl9LF9fd2JnX25ld193aXRoX3N0cl9zZXF1ZW5jZV9jZWEyYzA1NzFkNmRjNmFiOmZ1bmN0aW9uKCl7cmV0dXJuIGhhbmRsZUVycm9yKGZ1bmN0aW9uKGFyZzApe3JldHVybiBhZGRIZWFwT2JqZWN0KG5ldyBCbG9iKGdldE9iamVjdChhcmcwKSkpfSxhcmd1bWVudHMpfSxfX3diZ19uZXh0XzBhNWUwZjhhZjk4MTQ2YWE6ZnVuY3Rpb24oKXtyZXR1cm4gaGFuZGxlRXJyb3IoZnVuY3Rpb24oYXJnMCl7cmV0dXJuIGFkZEhlYXBPYmplY3QoZ2V0T2JqZWN0KGFyZzApLm5leHQoKSl9LGFyZ3VtZW50cyl9LF9fd2JnX25leHRfMzQ4MmY1NGM0OWU4YWYxOTpmdW5jdGlvbigpe3JldHVybiBoYW5kbGVFcnJvcihmdW5jdGlvbihhcmcwKXtyZXR1cm4gYWRkSGVhcE9iamVjdChnZXRPYmplY3QoYXJnMCkubmV4dCgpKX0sYXJndW1lbnRzKX0sX193YmdfbmV4dF80MThmODBkOGY1MzAzMjMzOmZ1bmN0aW9uKGFyZzApe3JldHVybiBhZGRIZWFwT2JqZWN0KGdldE9iamVjdChhcmcwKS5uZXh0KX0sX193Ymdfbm93XzBkYzQ5MjBhNDdjZjcyODA6ZnVuY3Rpb24oYXJnMCl7cmV0dXJuIGdldE9iamVjdChhcmcwKS5ub3coKX0sX193Ymdfbm93X2EzYWY5YTJmNGJiYWE0ZDE6ZnVuY3Rpb24oKXtyZXR1cm4gRGF0ZS5ub3coKX0sX193Ymdfb2JzZXJ2ZV8zMjIzNWI1ZTYxOTVkNGFiOmZ1bmN0aW9uKGFyZzAsYXJnMSxhcmcyKXtyZXR1cm4gYWRkSGVhcE9iamVjdChnZXRPYmplY3QoYXJnMCkub2JzZXJ2ZShnZXRPYmplY3QoYXJnMSksZ2V0T2JqZWN0KGFyZzIpKSl9LF9fd2JnX29mX2RkYzA5NDJiMGRjZTE2YTE6ZnVuY3Rpb24oYXJnMCxhcmcxLGFyZzIpe3JldHVybiBhZGRIZWFwT2JqZWN0KEFycmF5Lm9mKGdldE9iamVjdChhcmcwKSxnZXRPYmplY3QoYXJnMSksZ2V0T2JqZWN0KGFyZzIpKSl9LF9fd2JnX3BhcnNlXzcwODQ2MWExZmVkZGZiMzg6ZnVuY3Rpb24oKXtyZXR1cm4gaGFuZGxlRXJyb3IoZnVuY3Rpb24oYXJnMCxhcmcxKXtyZXR1cm4gYWRkSGVhcE9iamVjdChKU09OLnBhcnNlKGdldFN0cmluZ0Zyb21XYXNtMChhcmcwLGFyZzEpKSl9LGFyZ3VtZW50cyl9LF9fd2JnX3BlcmZvcm1hbmNlXzZhZGMzYjg5OWU0NDhhMjM6ZnVuY3Rpb24oYXJnMCl7cmV0dXJuIGFkZEhlYXBPYmplY3QoZ2V0T2JqZWN0KGFyZzApLnBlcmZvcm1hbmNlKX0sX193YmdfcG9zdE1lc3NhZ2VfMjA0MWY0ZTkwYWY2MTMxODpmdW5jdGlvbigpe3JldHVybiBoYW5kbGVFcnJvcihmdW5jdGlvbihhcmcwLGFyZzEpe2dldE9iamVjdChhcmcwKS5wb3N0TWVzc2FnZShnZXRPYmplY3QoYXJnMSkpfSxhcmd1bWVudHMpfSxfX3diZ19wb3N0TWVzc2FnZV83NzFlZjMyOTNhMjhiYmFjOmZ1bmN0aW9uKCl7cmV0dXJuIGhhbmRsZUVycm9yKGZ1bmN0aW9uKGFyZzAsYXJnMSl7Z2V0T2JqZWN0KGFyZzApLnBvc3RNZXNzYWdlKGdldE9iamVjdChhcmcxKSl9LGFyZ3VtZW50cyl9LF9fd2JnX3Byb3RvdHlwZXNldGNhbGxfYmRjZGNjNTg0MmU0ZDc3ZDpmdW5jdGlvbihhcmcwLGFyZzEsYXJnMil7VWludDhBcnJheS5wcm90b3R5cGUuc2V0LmNhbGwoZ2V0QXJyYXlVOEZyb21XYXNtMChhcmcwLGFyZzEpLGdldE9iamVjdChhcmcyKSl9LF9fd2JnX3B1c2hfOGZmZGNiMjA2MzM0MGJhNTpmdW5jdGlvbihhcmcwLGFyZzEpe3JldHVybiBnZXRPYmplY3QoYXJnMCkucHVzaChnZXRPYmplY3QoYXJnMSkpfSxfX3diZ19xdWV1ZU1pY3JvdGFza18wYWEwYTkyN2Y3OGY1ZDk4OmZ1bmN0aW9uKGFyZzApe3JldHVybiBhZGRIZWFwT2JqZWN0KGdldE9iamVjdChhcmcwKS5xdWV1ZU1pY3JvdGFzayl9LF9fd2JnX3F1ZXVlTWljcm90YXNrXzViYjUzNjk4MmY3OGE1NmY6ZnVuY3Rpb24oYXJnMCl7cXVldWVNaWNyb3Rhc2soZ2V0T2JqZWN0KGFyZzApKX0sX193YmdfcmFuZG9tXzkxMjI4NGRiZjYzNmYyNjk6ZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5yYW5kb20oKX0sX193YmdfcmVsYXRpdmVQYXRoQ29tcG9uZW50c19iYzQ4MjQwM2NiNmQ3ZWE5OmZ1bmN0aW9uKGFyZzApe3JldHVybiBhZGRIZWFwT2JqZWN0KGdldE9iamVjdChhcmcwKS5yZWxhdGl2ZVBhdGhDb21wb25lbnRzKX0sX193YmdfcmVtb3ZlRW50cnlfYzRlZmZmZGQzMThiNTFhMTpmdW5jdGlvbihhcmcwLGFyZzEsYXJnMixhcmczKXtyZXR1cm4gYWRkSGVhcE9iamVjdChnZXRPYmplY3QoYXJnMCkucmVtb3ZlRW50cnkoZ2V0U3RyaW5nRnJvbVdhc20wKGFyZzEsYXJnMiksZ2V0T2JqZWN0KGFyZzMpKSl9LF9fd2JnX3Jlc29sdmVfMDAyYzRiN2Q5ZDhmNmI2NDpmdW5jdGlvbihhcmcwKXtyZXR1cm4gYWRkSGVhcE9iamVjdChQcm9taXNlLnJlc29sdmUoZ2V0T2JqZWN0KGFyZzApKSl9LF9fd2JnX3Jvb3R0YXNrX25ldzpmdW5jdGlvbihhcmcwKXtyZXR1cm4gYWRkSGVhcE9iamVjdChSb290VGFzay5fX3dyYXAoYXJnMCkpfSxfX3diZ19zZXRUaW1lb3V0XzYzMDA4NjEzNjQ0YjA3YWY6ZnVuY3Rpb24oKXtyZXR1cm4gaGFuZGxlRXJyb3IoZnVuY3Rpb24oYXJnMCxhcmcxLGFyZzIpe3JldHVybiBhZGRIZWFwT2JqZWN0KGdldE9iamVjdChhcmcwKS5zZXRUaW1lb3V0KGdldE9iamVjdChhcmcxKSxhcmcyKSl9LGFyZ3VtZW50cyl9LF9fd2JnX3NldFRpbWVvdXRfN2JiMzQyOTY2MmFiMWU3MDpmdW5jdGlvbihhcmcwLGFyZzEpe3JldHVybiBhZGRIZWFwT2JqZWN0KHNldFRpbWVvdXQoZ2V0T2JqZWN0KGFyZzApLGFyZzEpKX0sX193Ymdfc2V0X2F0X2U0NTNjZjNmNGJlOWUyZDk6ZnVuY3Rpb24oYXJnMCxhcmcxKXtnZXRPYmplY3QoYXJnMCkuYXQ9YXJnMX0sX193Ymdfc2V0X2JvZHlfOWE3ZTAwYWZlM2NmZTI0NDpmdW5jdGlvbihhcmcwLGFyZzEpe2dldE9iamVjdChhcmcwKS5ib2R5PWdldE9iamVjdChhcmcxKX0sX193Ymdfc2V0X2NhY2hlXzMxNWEzZWQ3NzNhNDE1NDM6ZnVuY3Rpb24oYXJnMCxhcmcxKXtnZXRPYmplY3QoYXJnMCkuY2FjaGU9X193YmluZGdlbl9lbnVtX1JlcXVlc3RDYWNoZVthcmcxXX0sX193Ymdfc2V0X2NyZWF0ZV8xZjkwMmM1OTM2YWRkZTdkOmZ1bmN0aW9uKGFyZzAsYXJnMSl7Z2V0T2JqZWN0KGFyZzApLmNyZWF0ZT0wIT09YXJnMX0sX193Ymdfc2V0X2NyZWF0ZV9jOTVkZGNhMDE4ZmFjOWNlOmZ1bmN0aW9uKGFyZzAsYXJnMSl7Z2V0T2JqZWN0KGFyZzApLmNyZWF0ZT0wIT09YXJnMX0sX193Ymdfc2V0X2NyZWRlbnRpYWxzX2M0YTU4ZDJlMDVlZjI0ZmI6ZnVuY3Rpb24oYXJnMCxhcmcxKXtnZXRPYmplY3QoYXJnMCkuY3JlZGVudGlhbHM9X193YmluZGdlbl9lbnVtX1JlcXVlc3RDcmVkZW50aWFsc1thcmcxXX0sX193Ymdfc2V0X2Y0M2U1NzdhZWE5NDQ2NWI6ZnVuY3Rpb24oYXJnMCxhcmcxLGFyZzIpe2dldE9iamVjdChhcmcwKVthcmcxPj4+MF09dGFrZU9iamVjdChhcmcyKX0sX193Ymdfc2V0X2hlYWRlcnNfY2ZjNWY0YjJjMWYyMDU0OTpmdW5jdGlvbihhcmcwLGFyZzEpe2dldE9iamVjdChhcmcwKS5oZWFkZXJzPWdldE9iamVjdChhcmcxKX0sX193Ymdfc2V0X21ldGhvZF9jM2UyMDM3NWY1YWU3ZmFjOmZ1bmN0aW9uKGFyZzAsYXJnMSxhcmcyKXtnZXRPYmplY3QoYXJnMCkubWV0aG9kPWdldFN0cmluZ0Zyb21XYXNtMChhcmcxLGFyZzIpfSxfX3diZ19zZXRfbW9kZV9iMTM2NDJjMzEyNjQ4MjAyOmZ1bmN0aW9uKGFyZzAsYXJnMSl7Z2V0T2JqZWN0KGFyZzApLm1vZGU9X193YmluZGdlbl9lbnVtX1JlcXVlc3RNb2RlW2FyZzFdfSxfX3diZ19zZXRfbmFtZV80OWI5ZWNiYTdmNThmMmU1OmZ1bmN0aW9uKGFyZzAsYXJnMSxhcmcyKXtnZXRPYmplY3QoYXJnMCkubmFtZT1nZXRTdHJpbmdGcm9tV2FzbTAoYXJnMSxhcmcyKX0sX193Ymdfc2V0X29ubWVzc2FnZV82ZWQ0MTA1MGU0YTVjZWUyOmZ1bmN0aW9uKGFyZzAsYXJnMSl7Z2V0T2JqZWN0KGFyZzApLm9ubWVzc2FnZT1nZXRPYmplY3QoYXJnMSl9LF9fd2JnX3NldF9yZWN1cnNpdmVfNjVlZDA3ZGY4OTJiNDg4NTpmdW5jdGlvbihhcmcwLGFyZzEpe2dldE9iamVjdChhcmcwKS5yZWN1cnNpdmU9MCE9PWFyZzF9LF9fd2JnX3NldF9yZWN1cnNpdmVfZjVkMzQxNjA5ODMyODExMDpmdW5jdGlvbihhcmcwLGFyZzEpe2dldE9iamVjdChhcmcwKS5yZWN1cnNpdmU9MCE9PWFyZzF9LF9fd2JnX3NldF9zaWduYWxfZjJkM2Y4NTk5MjQ4ODk2ZDpmdW5jdGlvbihhcmcwLGFyZzEpe2dldE9iamVjdChhcmcwKS5zaWduYWw9Z2V0T2JqZWN0KGFyZzEpfSxfX3diZ19zZXRfdHlwZV9lMTI3ZjI2Yjc4ZDc4YmZjOmZ1bmN0aW9uKGFyZzAsYXJnMSl7Z2V0T2JqZWN0KGFyZzApLnR5cGU9X193YmluZGdlbl9lbnVtX1dvcmtlclR5cGVbYXJnMV19LF9fd2JnX3NpZ25hbF9kMTI4NWVjYWI0ZWJjNWFkOmZ1bmN0aW9uKGFyZzApe3JldHVybiBhZGRIZWFwT2JqZWN0KGdldE9iamVjdChhcmcwKS5zaWduYWwpfSxfX3diZ19zaXplX2UwNWQzMWNjNjA0OTgxNWY6ZnVuY3Rpb24oYXJnMCl7cmV0dXJuIGdldE9iamVjdChhcmcwKS5zaXplfSxfX3diZ19zbGljZV81NjZhMTVmMzIxNGZhNTJlOmZ1bmN0aW9uKCl7cmV0dXJuIGhhbmRsZUVycm9yKGZ1bmN0aW9uKGFyZzAsYXJnMSxhcmcyLGFyZzMsYXJnNCl7cmV0dXJuIGFkZEhlYXBPYmplY3QoZ2V0T2JqZWN0KGFyZzApLnNsaWNlKGFyZzEsYXJnMixnZXRTdHJpbmdGcm9tV2FzbTAoYXJnMyxhcmc0KSkpfSxhcmd1bWVudHMpfSxfX3diZ19zdGFja18wZWQ3NWQ2ODU3NWIwZjNjOmZ1bmN0aW9uKGFyZzAsYXJnMSl7Y29uc3QgcHRyMT1wYXNzU3RyaW5nVG9XYXNtMChnZXRPYmplY3QoYXJnMSkuc3RhY2ssd2FzbS5fX3diaW5kZ2VuX2V4cG9ydCx3YXNtLl9fd2JpbmRnZW5fZXhwb3J0MiksbGVuMT1XQVNNX1ZFQ1RPUl9MRU47Z2V0RGF0YVZpZXdNZW1vcnkwKCkuc2V0SW50MzIoYXJnMCs0LGxlbjEsITApLGdldERhdGFWaWV3TWVtb3J5MCgpLnNldEludDMyKGFyZzArMCxwdHIxLCEwKX0sX193Ymdfc3RhdGljX2FjY2Vzc29yX0dMT0JBTF8xMjgzNzE2N2FkOTM1MTE2OmZ1bmN0aW9uKCl7Y29uc3QgcmV0PXZvaWQgMD09PV9fd2VicGFja19yZXF1aXJlX18uZz9udWxsOl9fd2VicGFja19yZXF1aXJlX18uZztyZXR1cm4gaXNMaWtlTm9uZShyZXQpPzA6YWRkSGVhcE9iamVjdChyZXQpfSxfX3diZ19zdGF0aWNfYWNjZXNzb3JfR0xPQkFMX1RISVNfZTYyOGU4OWFiM2IxYzk1ZjpmdW5jdGlvbigpe2NvbnN0IHJldD0idW5kZWZpbmVkIj09dHlwZW9mIGdsb2JhbFRoaXM/bnVsbDpnbG9iYWxUaGlzO3JldHVybiBpc0xpa2VOb25lKHJldCk/MDphZGRIZWFwT2JqZWN0KHJldCl9LF9fd2JnX3N0YXRpY19hY2Nlc3Nvcl9TRUxGX2E2MjFkM2RmYmI2MGQwY2U6ZnVuY3Rpb24oKXtjb25zdCByZXQ9InVuZGVmaW5lZCI9PXR5cGVvZiBzZWxmP251bGw6c2VsZjtyZXR1cm4gaXNMaWtlTm9uZShyZXQpPzA6YWRkSGVhcE9iamVjdChyZXQpfSxfX3diZ19zdGF0aWNfYWNjZXNzb3JfV0lORE9XX2Y4NzI3ZjBjZjg4OGUwYmQ6ZnVuY3Rpb24oKXtjb25zdCByZXQ9InVuZGVmaW5lZCI9PXR5cGVvZiB3aW5kb3c/bnVsbDp3aW5kb3c7cmV0dXJuIGlzTGlrZU5vbmUocmV0KT8wOmFkZEhlYXBPYmplY3QocmV0KX0sX193Ymdfc3RhdHVzXzg5ZDdlODAzZGI5MTFlZTc6ZnVuY3Rpb24oYXJnMCl7cmV0dXJuIGdldE9iamVjdChhcmcwKS5zdGF0dXN9LF9fd2JnX3N0b3JhZ2VfYzAwMmI1M2JjNDg4MzI5OTpmdW5jdGlvbihhcmcwKXtyZXR1cm4gYWRkSGVhcE9iamVjdChnZXRPYmplY3QoYXJnMCkuc3RvcmFnZSl9LF9fd2JnX3N0cmluZ2lmeV84ZDFjYzZmZjM4M2U4YmFlOmZ1bmN0aW9uKCl7cmV0dXJuIGhhbmRsZUVycm9yKGZ1bmN0aW9uKGFyZzApe3JldHVybiBhZGRIZWFwT2JqZWN0KEpTT04uc3RyaW5naWZ5KGdldE9iamVjdChhcmcwKSkpfSxhcmd1bWVudHMpfSxfX3diZ19zdWJhcnJheV9hOTZlMWZlZjE3ZWQyM2NiOmZ1bmN0aW9uKGFyZzAsYXJnMSxhcmcyKXtyZXR1cm4gYWRkSGVhcE9iamVjdChnZXRPYmplY3QoYXJnMCkuc3ViYXJyYXkoYXJnMT4+PjAsYXJnMj4+PjApKX0sX193YmdfdGhlbl8wZDlmZTJjN2IxODU3ZDMyOmZ1bmN0aW9uKGFyZzAsYXJnMSxhcmcyKXtyZXR1cm4gYWRkSGVhcE9iamVjdChnZXRPYmplY3QoYXJnMCkudGhlbihnZXRPYmplY3QoYXJnMSksZ2V0T2JqZWN0KGFyZzIpKSl9LF9fd2JnX3RoZW5fYjllN2IzYjVmMWE5ZTFiNTpmdW5jdGlvbihhcmcwLGFyZzEpe3JldHVybiBhZGRIZWFwT2JqZWN0KGdldE9iamVjdChhcmcwKS50aGVuKGdldE9iamVjdChhcmcxKSkpfSxfX3diZ190b1N0cmluZ185NjRmZjdmZTZlY2E4MzYyOmZ1bmN0aW9uKGFyZzApe3JldHVybiBhZGRIZWFwT2JqZWN0KGdldE9iamVjdChhcmcwKS50b1N0cmluZygpKX0sX193YmdfdHJ1bmNhdGVfZGM2NjFmZGNiMDA2MmZhNzpmdW5jdGlvbigpe3JldHVybiBoYW5kbGVFcnJvcihmdW5jdGlvbihhcmcwLGFyZzEpe2dldE9iamVjdChhcmcwKS50cnVuY2F0ZShhcmcxPj4+MCl9LGFyZ3VtZW50cyl9LF9fd2JnX3R5cGVfMDNkZmU0NjIxNzM1ZTUyODpmdW5jdGlvbihhcmcwKXtjb25zdCByZXQ9Z2V0T2JqZWN0KGFyZzApLnR5cGU7cmV0dXJuKF9fd2JpbmRnZW5fZW51bV9GaWxlU3lzdGVtQ2hhbmdlUmVjb3JkVHlwZS5pbmRleE9mKHJldCkrMXx8NyktMX0sX193YmdfdXJsX2M0ODRjMjZiMWZiZjUxMjY6ZnVuY3Rpb24oYXJnMCxhcmcxKXtjb25zdCBwdHIxPXBhc3NTdHJpbmdUb1dhc20wKGdldE9iamVjdChhcmcxKS51cmwsd2FzbS5fX3diaW5kZ2VuX2V4cG9ydCx3YXNtLl9fd2JpbmRnZW5fZXhwb3J0MiksbGVuMT1XQVNNX1ZFQ1RPUl9MRU47Z2V0RGF0YVZpZXdNZW1vcnkwKCkuc2V0SW50MzIoYXJnMCs0LGxlbjEsITApLGdldERhdGFWaWV3TWVtb3J5MCgpLnNldEludDMyKGFyZzArMCxwdHIxLCEwKX0sX193YmdfdmFsdWVfMDU0NjI1NWI0MTVlOTZjMTpmdW5jdGlvbihhcmcwKXtyZXR1cm4gYWRkSGVhcE9iamVjdChnZXRPYmplY3QoYXJnMCkudmFsdWUpfSxfX3diZ192YWx1ZV9mZTZlZTM0YWY1ZGMzZGNlOmZ1bmN0aW9uKGFyZzApe3JldHVybiBhZGRIZWFwT2JqZWN0KGdldE9iamVjdChhcmcwKS52YWx1ZSl9LF9fd2JnX3dhaXRBc3luY19hNThiMjEzNGJmZjM5YzNlOmZ1bmN0aW9uKGFyZzAsYXJnMSxhcmcyKXtyZXR1cm4gYWRkSGVhcE9iamVjdChBdG9taWNzLndhaXRBc3luYyhnZXRPYmplY3QoYXJnMCksYXJnMT4+PjAsYXJnMikpfSxfX3diZ193YWl0QXN5bmNfYzBhMzlhN2QzMzE4ZDkxZTpmdW5jdGlvbigpe3JldHVybiBhZGRIZWFwT2JqZWN0KEF0b21pY3Mud2FpdEFzeW5jKX0sX193Ymdfd2Fybl9hNDBiOTcxNDY3YjIxOWM3OmZ1bmN0aW9uKGFyZzAsYXJnMSxhcmcyLGFyZzMpe2NvbnNvbGUud2FybihnZXRPYmplY3QoYXJnMCksZ2V0T2JqZWN0KGFyZzEpLGdldE9iamVjdChhcmcyKSxnZXRPYmplY3QoYXJnMykpfSxfX3diZ193YXJuX2Y3YWUxYjJlNjZjY2I5MzA6ZnVuY3Rpb24oYXJnMCl7Y29uc29sZS53YXJuKGdldE9iamVjdChhcmcwKSl9LF9fd2JnX3dhc210YXNrbWVzc2FnZV9uZXc6ZnVuY3Rpb24oYXJnMCl7cmV0dXJuIGFkZEhlYXBPYmplY3QoV2FzbVRhc2tNZXNzYWdlLl9fd3JhcChhcmcwKSl9LF9fd2JnX3dlYndvcmtlcmNyZWF0aW9uX25ldzpmdW5jdGlvbihhcmcwKXtyZXR1cm4gYWRkSGVhcE9iamVjdChXZWJXb3JrZXJDcmVhdGlvbi5fX3dyYXAoYXJnMCkpfSxfX3diZ193ZWJ3b3JrZXJ0ZXJtaW5hdGlvbl9uZXc6ZnVuY3Rpb24oYXJnMCl7cmV0dXJuIGFkZEhlYXBPYmplY3QoV2ViV29ya2VyVGVybWluYXRpb24uX193cmFwKGFyZzApKX0sX193Ymdfd3JpdGVfMmQ1OTMzN2NjNDk2OTE5ZDpmdW5jdGlvbigpe3JldHVybiBoYW5kbGVFcnJvcihmdW5jdGlvbihhcmcwLGFyZzEsYXJnMixhcmczKXtyZXR1cm4gZ2V0T2JqZWN0KGFyZzApLndyaXRlKGdldEFycmF5VThGcm9tV2FzbTAoYXJnMSxhcmcyKSxnZXRPYmplY3QoYXJnMykpfSxhcmd1bWVudHMpfSxfX3diZ193cml0ZV8zN2Y1YTYyYTI0ZGE2NjJmOmZ1bmN0aW9uKCl7cmV0dXJuIGhhbmRsZUVycm9yKGZ1bmN0aW9uKGFyZzAsYXJnMSl7cmV0dXJuIGFkZEhlYXBPYmplY3QoZ2V0T2JqZWN0KGFyZzApLndyaXRlKGdldE9iamVjdChhcmcxKSkpfSxhcmd1bWVudHMpfSxfX3diaW5kZ2VuX2Nhc3RfMDAwMDAwMDAwMDAwMDAwMTpmdW5jdGlvbihhcmcwLGFyZzEpe3JldHVybiBhZGRIZWFwT2JqZWN0KG1ha2VNdXRDbG9zdXJlKGFyZzAsYXJnMSx3YXNtLl9fd2FzbV9iaW5kZ2VuX2Z1bmNfZWxlbV8yMDE1OCxfX3dhc21fYmluZGdlbl9mdW5jX2VsZW1fNzk3MDcpKX0sX193YmluZGdlbl9jYXN0XzAwMDAwMDAwMDAwMDAwMDI6ZnVuY3Rpb24oYXJnMCxhcmcxKXtyZXR1cm4gYWRkSGVhcE9iamVjdChtYWtlTXV0Q2xvc3VyZShhcmcwLGFyZzEsd2FzbS5fX3dhc21fYmluZGdlbl9mdW5jX2VsZW1fMjAxNTgsX193YXNtX2JpbmRnZW5fZnVuY19lbGVtXzc5NzA3KSl9LF9fd2JpbmRnZW5fY2FzdF8wMDAwMDAwMDAwMDAwMDAzOmZ1bmN0aW9uKGFyZzAsYXJnMSl7cmV0dXJuIGFkZEhlYXBPYmplY3QobWFrZU11dENsb3N1cmUoYXJnMCxhcmcxLHdhc20uX193YXNtX2JpbmRnZW5fZnVuY19lbGVtXzIwMTU4LF9fd2FzbV9iaW5kZ2VuX2Z1bmNfZWxlbV83OTc0MykpfSxfX3diaW5kZ2VuX2Nhc3RfMDAwMDAwMDAwMDAwMDAwNDpmdW5jdGlvbihhcmcwLGFyZzEpe3JldHVybiBhZGRIZWFwT2JqZWN0KG1ha2VNdXRDbG9zdXJlKGFyZzAsYXJnMSx3YXNtLl9fd2FzbV9iaW5kZ2VuX2Z1bmNfZWxlbV8yMDE1OCxfX3dhc21fYmluZGdlbl9mdW5jX2VsZW1fMjAxNDQpKX0sX193YmluZGdlbl9jYXN0XzAwMDAwMDAwMDAwMDAwMDU6ZnVuY3Rpb24oYXJnMCxhcmcxKXtyZXR1cm4gYWRkSGVhcE9iamVjdChtYWtlQ2xvc3VyZShhcmcwLGFyZzEsd2FzbS5fX3dhc21fYmluZGdlbl9mdW5jX2VsZW1fNzg2NjEsX193YXNtX2JpbmRnZW5fZnVuY19lbGVtXzc5MjIzKSl9LF9fd2JpbmRnZW5fY2FzdF8wMDAwMDAwMDAwMDAwMDA2OmZ1bmN0aW9uKGFyZzAsYXJnMSl7cmV0dXJuIGFkZEhlYXBPYmplY3QobWFrZU11dENsb3N1cmUoYXJnMCxhcmcxLHdhc20uX193YXNtX2JpbmRnZW5fZnVuY19lbGVtXzc5Nzc0LF9fd2FzbV9iaW5kZ2VuX2Z1bmNfZWxlbV8yMDE0NCkpfSxfX3diaW5kZ2VuX2Nhc3RfMDAwMDAwMDAwMDAwMDAwNzpmdW5jdGlvbihhcmcwKXtyZXR1cm4gYWRkSGVhcE9iamVjdChhcmcwKX0sX193YmluZGdlbl9jYXN0XzAwMDAwMDAwMDAwMDAwMDg6ZnVuY3Rpb24oYXJnMCxhcmcxKXtyZXR1cm4gYWRkSGVhcE9iamVjdChnZXRTdHJpbmdGcm9tV2FzbTAoYXJnMCxhcmcxKSl9LF9fd2JpbmRnZW5fY2FzdF8wMDAwMDAwMDAwMDAwMDA5OmZ1bmN0aW9uKGFyZzAsYXJnMSl7dmFyIHYwPWdldEFycmF5SnNWYWx1ZUZyb21XYXNtMChhcmcwLGFyZzEpLnNsaWNlKCk7d2FzbS5fX3diaW5kZ2VuX2V4cG9ydDQoYXJnMCw0KmFyZzEsNCk7cmV0dXJuIGFkZEhlYXBPYmplY3QodjApfSxfX3diaW5kZ2VuX2xpbmtfMGIxZjc2ZDIzNWZkMmI4NjpmdW5jdGlvbihhcmcwKXtjb25zdCB2YWw9Im9ubWVzc2FnZSA9IGZ1bmN0aW9uIChldikge1xuICAgICAgICAgICAgICAgIGxldCBbaWEsIGluZGV4LCB2YWx1ZV0gPSBldi5kYXRhO1xuICAgICAgICAgICAgICAgIGlhID0gbmV3IEludDMyQXJyYXkoaWEuYnVmZmVyKTtcbiAgICAgICAgICAgICAgICBsZXQgcmVzdWx0ID0gQXRvbWljcy53YWl0KGlhLCBpbmRleCwgdmFsdWUpO1xuICAgICAgICAgICAgICAgIHBvc3RNZXNzYWdlKHJlc3VsdCk7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgIixwdHIxPXBhc3NTdHJpbmdUb1dhc20wKHZvaWQgMD09PVVSTC5jcmVhdGVPYmplY3RVUkw/ImRhdGE6YXBwbGljYXRpb24vamF2YXNjcmlwdCwiK2VuY29kZVVSSUNvbXBvbmVudCh2YWwpOlVSTC5jcmVhdGVPYmplY3RVUkwobmV3IEJsb2IoW3ZhbF0se3R5cGU6InRleHQvamF2YXNjcmlwdCJ9KSksd2FzbS5fX3diaW5kZ2VuX2V4cG9ydCx3YXNtLl9fd2JpbmRnZW5fZXhwb3J0MiksbGVuMT1XQVNNX1ZFQ1RPUl9MRU47Z2V0RGF0YVZpZXdNZW1vcnkwKCkuc2V0SW50MzIoYXJnMCs0LGxlbjEsITApLGdldERhdGFWaWV3TWVtb3J5MCgpLnNldEludDMyKGFyZzArMCxwdHIxLCEwKX0sX193YmluZGdlbl9vYmplY3RfY2xvbmVfcmVmOmZ1bmN0aW9uKGFyZzApe3JldHVybiBhZGRIZWFwT2JqZWN0KGdldE9iamVjdChhcmcwKSl9LF9fd2JpbmRnZW5fb2JqZWN0X2Ryb3BfcmVmOmZ1bmN0aW9uKGFyZzApe3Rha2VPYmplY3QoYXJnMCl9LG1lbW9yeTptZW1vcnl8fG5ldyBXZWJBc3NlbWJseS5NZW1vcnkoe2luaXRpYWw6MTAyNSxtYXhpbXVtOjY1NTM2LHNoYXJlZDohMH0pfTtyZXR1cm57X19wcm90b19fOm51bGwsIi4vaW5kZXhfYmcuanMiOmltcG9ydDB9fWZ1bmN0aW9uIF9fd2FzbV9iaW5kZ2VuX2Z1bmNfZWxlbV8yMDE0NChhcmcwLGFyZzEpe3dhc20uX193YXNtX2JpbmRnZW5fZnVuY19lbGVtXzIwMTQ0KGFyZzAsYXJnMSl9ZnVuY3Rpb24gX193YXNtX2JpbmRnZW5fZnVuY19lbGVtXzc5NzA3KGFyZzAsYXJnMSxhcmcyKXt3YXNtLl9fd2FzbV9iaW5kZ2VuX2Z1bmNfZWxlbV83OTcwNyhhcmcwLGFyZzEsYWRkSGVhcE9iamVjdChhcmcyKSl9ZnVuY3Rpb24gX193YXNtX2JpbmRnZW5fZnVuY19lbGVtXzc5NzQzKGFyZzAsYXJnMSxhcmcyKXt0cnl7d2FzbS5fX3dhc21fYmluZGdlbl9mdW5jX2VsZW1fNzk3NDMoYXJnMCxhcmcxLGFkZEJvcnJvd2VkT2JqZWN0KGFyZzIpKX1maW5hbGx5e2hlYXBbc3RhY2tfcG9pbnRlcisrXT12b2lkIDB9fWZ1bmN0aW9uIF9fd2FzbV9iaW5kZ2VuX2Z1bmNfZWxlbV83OTIyMyhhcmcwLGFyZzEsYXJnMil7d2FzbS5fX3dhc21fYmluZGdlbl9mdW5jX2VsZW1fNzkyMjMoYXJnMCxhcmcxLGFkZEhlYXBPYmplY3QoYXJnMikpfWZ1bmN0aW9uIF9fd2FzbV9iaW5kZ2VuX2Z1bmNfZWxlbV8zNDY1KGFyZzAsYXJnMSxhcmcyLGFyZzMpe3dhc20uX193YXNtX2JpbmRnZW5fZnVuY19lbGVtXzM0NjUoYXJnMCxhcmcxLGFkZEhlYXBPYmplY3QoYXJnMiksYWRkSGVhcE9iamVjdChhcmczKSl9U3ltYm9sLmRpc3Bvc2UmJihXZWJXb3JrZXJUZXJtaW5hdGlvbi5wcm90b3R5cGVbU3ltYm9sLmRpc3Bvc2VdPVdlYldvcmtlclRlcm1pbmF0aW9uLnByb3RvdHlwZS5mcmVlKTtjb25zdCBfX3diaW5kZ2VuX2VudW1fRGlyRW50cnlUeXBlPVsiZmlsZSIsImRpcmVjdG9yeSJdLF9fd2JpbmRnZW5fZW51bV9GaWxlU3lzdGVtQ2hhbmdlUmVjb3JkVHlwZT1bImFwcGVhcmVkIiwiZGlzYXBwZWFyZWQiLCJlcnJvcmVkIiwibW9kaWZpZWQiLCJtb3ZlZCIsInVua25vd24iXSxfX3diaW5kZ2VuX2VudW1fRmlsZVN5c3RlbUhhbmRsZUtpbmQ9WyJmaWxlIiwiZGlyZWN0b3J5Il0sX193YmluZGdlbl9lbnVtX1JlcXVlc3RDYWNoZT1bImRlZmF1bHQiLCJuby1zdG9yZSIsInJlbG9hZCIsIm5vLWNhY2hlIiwiZm9yY2UtY2FjaGUiLCJvbmx5LWlmLWNhY2hlZCJdLF9fd2JpbmRnZW5fZW51bV9SZXF1ZXN0Q3JlZGVudGlhbHM9WyJvbWl0Iiwic2FtZS1vcmlnaW4iLCJpbmNsdWRlIl0sX193YmluZGdlbl9lbnVtX1JlcXVlc3RNb2RlPVsic2FtZS1vcmlnaW4iLCJuby1jb3JzIiwiY29ycyIsIm5hdmlnYXRlIl0sX193YmluZGdlbl9lbnVtX1dvcmtlclR5cGU9WyJjbGFzc2ljIiwibW9kdWxlIl0sQnVpbGRPcHRpb25zRmluYWxpemF0aW9uPSJ1bmRlZmluZWQiPT10eXBlb2YgRmluYWxpemF0aW9uUmVnaXN0cnk/e3JlZ2lzdGVyOigpPT57fSx1bnJlZ2lzdGVyOigpPT57fX06bmV3IEZpbmFsaXphdGlvblJlZ2lzdHJ5KHB0cj0+d2FzbS5fX3diZ19idWlsZG9wdGlvbnNfZnJlZShwdHI+Pj4wLDEpKSxDcmVhdGVTeW5jQWNjZXNzSGFuZGxlT3B0aW9uc0ZpbmFsaXphdGlvbj0idW5kZWZpbmVkIj09dHlwZW9mIEZpbmFsaXphdGlvblJlZ2lzdHJ5P3tyZWdpc3RlcjooKT0+e30sdW5yZWdpc3RlcjooKT0+e319Om5ldyBGaW5hbGl6YXRpb25SZWdpc3RyeShwdHI9Pndhc20uX193YmdfY3JlYXRlc3luY2FjY2Vzc2hhbmRsZW9wdGlvbnNfZnJlZShwdHI+Pj4wLDEpKSxEaXJFbnRyeUZpbmFsaXphdGlvbj0idW5kZWZpbmVkIj09dHlwZW9mIEZpbmFsaXphdGlvblJlZ2lzdHJ5P3tyZWdpc3RlcjooKT0+e30sdW5yZWdpc3RlcjooKT0+e319Om5ldyBGaW5hbGl6YXRpb25SZWdpc3RyeShwdHI9Pndhc20uX193YmdfZGlyZW50cnlfZnJlZShwdHI+Pj4wLDEpKSxGc0ZpbmFsaXphdGlvbj0idW5kZWZpbmVkIj09dHlwZW9mIEZpbmFsaXphdGlvblJlZ2lzdHJ5P3tyZWdpc3RlcjooKT0+e30sdW5yZWdpc3RlcjooKT0+e319Om5ldyBGaW5hbGl6YXRpb25SZWdpc3RyeShwdHI9Pndhc20uX193YmdfZnNfZnJlZShwdHI+Pj4wLDEpKSxNZXRhZGF0YUZpbmFsaXphdGlvbj0idW5kZWZpbmVkIj09dHlwZW9mIEZpbmFsaXphdGlvblJlZ2lzdHJ5P3tyZWdpc3RlcjooKT0+e30sdW5yZWdpc3RlcjooKT0+e319Om5ldyBGaW5hbGl6YXRpb25SZWdpc3RyeShwdHI9Pndhc20uX193YmdfbWV0YWRhdGFfZnJlZShwdHI+Pj4wLDEpKSxQcm9qZWN0RmluYWxpemF0aW9uPSJ1bmRlZmluZWQiPT10eXBlb2YgRmluYWxpemF0aW9uUmVnaXN0cnk/e3JlZ2lzdGVyOigpPT57fSx1bnJlZ2lzdGVyOigpPT57fX06bmV3IEZpbmFsaXphdGlvblJlZ2lzdHJ5KHB0cj0+d2FzbS5fX3diZ19wcm9qZWN0X2ZyZWUocHRyPj4+MCwxKSksUm9vdFRhc2tGaW5hbGl6YXRpb249InVuZGVmaW5lZCI9PXR5cGVvZiBGaW5hbGl6YXRpb25SZWdpc3RyeT97cmVnaXN0ZXI6KCk9Pnt9LHVucmVnaXN0ZXI6KCk9Pnt9fTpuZXcgRmluYWxpemF0aW9uUmVnaXN0cnkocHRyPT53YXNtLl9fd2JnX3Jvb3R0YXNrX2ZyZWUocHRyPj4+MCwxKSksV2FzbVRhc2tNZXNzYWdlRmluYWxpemF0aW9uPSJ1bmRlZmluZWQiPT10eXBlb2YgRmluYWxpemF0aW9uUmVnaXN0cnk/e3JlZ2lzdGVyOigpPT57fSx1bnJlZ2lzdGVyOigpPT57fX06bmV3IEZpbmFsaXphdGlvblJlZ2lzdHJ5KHB0cj0+d2FzbS5fX3diZ193YXNtdGFza21lc3NhZ2VfZnJlZShwdHI+Pj4wLDEpKSxXZWJXb3JrZXJDcmVhdGlvbkZpbmFsaXphdGlvbj0idW5kZWZpbmVkIj09dHlwZW9mIEZpbmFsaXphdGlvblJlZ2lzdHJ5P3tyZWdpc3RlcjooKT0+e30sdW5yZWdpc3RlcjooKT0+e319Om5ldyBGaW5hbGl6YXRpb25SZWdpc3RyeShwdHI9Pndhc20uX193Ymdfd2Vid29ya2VyY3JlYXRpb25fZnJlZShwdHI+Pj4wLDEpKSxXZWJXb3JrZXJPcHRpb25zRmluYWxpemF0aW9uPSJ1bmRlZmluZWQiPT10eXBlb2YgRmluYWxpemF0aW9uUmVnaXN0cnk/e3JlZ2lzdGVyOigpPT57fSx1bnJlZ2lzdGVyOigpPT57fX06bmV3IEZpbmFsaXphdGlvblJlZ2lzdHJ5KHB0cj0+d2FzbS5fX3diZ193ZWJ3b3JrZXJvcHRpb25zX2ZyZWUocHRyPj4+MCwxKSksV2ViV29ya2VyVGVybWluYXRpb25GaW5hbGl6YXRpb249InVuZGVmaW5lZCI9PXR5cGVvZiBGaW5hbGl6YXRpb25SZWdpc3RyeT97cmVnaXN0ZXI6KCk9Pnt9LHVucmVnaXN0ZXI6KCk9Pnt9fTpuZXcgRmluYWxpemF0aW9uUmVnaXN0cnkocHRyPT53YXNtLl9fd2JnX3dlYndvcmtlcnRlcm1pbmF0aW9uX2ZyZWUocHRyPj4+MCwxKSk7ZnVuY3Rpb24gYWRkSGVhcE9iamVjdChvYmope2hlYXBfbmV4dD09PWhlYXAubGVuZ3RoJiZoZWFwLnB1c2goaGVhcC5sZW5ndGgrMSk7Y29uc3QgaWR4PWhlYXBfbmV4dDtyZXR1cm4gaGVhcF9uZXh0PWhlYXBbaWR4XSxoZWFwW2lkeF09b2JqLGlkeH1mdW5jdGlvbiBfYXNzZXJ0Q2xhc3MoaW5zdGFuY2Usa2xhc3Mpe2lmKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBrbGFzcykpdGhyb3cgbmV3IEVycm9yKGBleHBlY3RlZCBpbnN0YW5jZSBvZiAke2tsYXNzLm5hbWV9YCl9ZnVuY3Rpb24gYWRkQm9ycm93ZWRPYmplY3Qob2JqKXtpZigxPT1zdGFja19wb2ludGVyKXRocm93IG5ldyBFcnJvcigib3V0IG9mIGpzIHN0YWNrIik7cmV0dXJuIGhlYXBbLS1zdGFja19wb2ludGVyXT1vYmosc3RhY2tfcG9pbnRlcn1jb25zdCBDTE9TVVJFX0RUT1JTPSJ1bmRlZmluZWQiPT10eXBlb2YgRmluYWxpemF0aW9uUmVnaXN0cnk/e3JlZ2lzdGVyOigpPT57fSx1bnJlZ2lzdGVyOigpPT57fX06bmV3IEZpbmFsaXphdGlvblJlZ2lzdHJ5KHN0YXRlPT5zdGF0ZS5kdG9yKHN0YXRlLmEsc3RhdGUuYikpO2Z1bmN0aW9uIGRlYnVnU3RyaW5nKHZhbCl7Y29uc3QgdHlwZT10eXBlb2YgdmFsO2lmKCJudW1iZXIiPT10eXBlfHwiYm9vbGVhbiI9PXR5cGV8fG51bGw9PXZhbClyZXR1cm5gJHt2YWx9YDtpZigic3RyaW5nIj09dHlwZSlyZXR1cm5gIiR7dmFsfSJgO2lmKCJzeW1ib2wiPT10eXBlKXtjb25zdCBkZXNjcmlwdGlvbj12YWwuZGVzY3JpcHRpb247cmV0dXJuIG51bGw9PWRlc2NyaXB0aW9uPyJTeW1ib2wiOmBTeW1ib2woJHtkZXNjcmlwdGlvbn0pYH1pZigiZnVuY3Rpb24iPT10eXBlKXtjb25zdCBuYW1lPXZhbC5uYW1lO3JldHVybiJzdHJpbmciPT10eXBlb2YgbmFtZSYmbmFtZS5sZW5ndGg+MD9gRnVuY3Rpb24oJHtuYW1lfSlgOiJGdW5jdGlvbiJ9aWYoQXJyYXkuaXNBcnJheSh2YWwpKXtjb25zdCBsZW5ndGg9dmFsLmxlbmd0aDtsZXQgZGVidWc9IlsiO2xlbmd0aD4wJiYoZGVidWcrPWRlYnVnU3RyaW5nKHZhbFswXSkpO2ZvcihsZXQgaT0xO2k8bGVuZ3RoO2krKylkZWJ1Zys9IiwgIitkZWJ1Z1N0cmluZyh2YWxbaV0pO3JldHVybiBkZWJ1Zys9Il0iLGRlYnVnfWNvbnN0IGJ1aWx0SW5NYXRjaGVzPS9cW29iamVjdCAoW15cXV0rKVxdLy5leGVjKHRvU3RyaW5nLmNhbGwodmFsKSk7bGV0IGNsYXNzTmFtZTtpZighKGJ1aWx0SW5NYXRjaGVzJiZidWlsdEluTWF0Y2hlcy5sZW5ndGg+MSkpcmV0dXJuIHRvU3RyaW5nLmNhbGwodmFsKTtpZihjbGFzc05hbWU9YnVpbHRJbk1hdGNoZXNbMV0sIk9iamVjdCI9PWNsYXNzTmFtZSl0cnl7cmV0dXJuIk9iamVjdCgiK0pTT04uc3RyaW5naWZ5KHZhbCkrIikifWNhdGNoKF8pe3JldHVybiJPYmplY3QifXJldHVybiB2YWwgaW5zdGFuY2VvZiBFcnJvcj9gJHt2YWwubmFtZX06ICR7dmFsLm1lc3NhZ2V9XG4ke3ZhbC5zdGFja31gOmNsYXNzTmFtZX1mdW5jdGlvbiBkcm9wT2JqZWN0KGlkeCl7aWR4PDEzMnx8KGhlYXBbaWR4XT1oZWFwX25leHQsaGVhcF9uZXh0PWlkeCl9ZnVuY3Rpb24gZ2V0QXJyYXlKc1ZhbHVlRnJvbVdhc20wKHB0cixsZW4pe3B0cj4+Pj0wO2NvbnN0IG1lbT1nZXREYXRhVmlld01lbW9yeTAoKSxyZXN1bHQ9W107Zm9yKGxldCBpPXB0cjtpPHB0cis0KmxlbjtpKz00KXJlc3VsdC5wdXNoKHRha2VPYmplY3QobWVtLmdldFVpbnQzMihpLCEwKSkpO3JldHVybiByZXN1bHR9ZnVuY3Rpb24gZ2V0QXJyYXlVOEZyb21XYXNtMChwdHIsbGVuKXtyZXR1cm4gcHRyPj4+PTAsZ2V0VWludDhBcnJheU1lbW9yeTAoKS5zdWJhcnJheShwdHIvMSxwdHIvMStsZW4pfWxldCBjYWNoZWREYXRhVmlld01lbW9yeTA9bnVsbDtmdW5jdGlvbiBnZXREYXRhVmlld01lbW9yeTAoKXtyZXR1cm4gbnVsbCE9PWNhY2hlZERhdGFWaWV3TWVtb3J5MCYmY2FjaGVkRGF0YVZpZXdNZW1vcnkwLmJ1ZmZlcj09PXdhc20ubWVtb3J5LmJ1ZmZlcnx8KGNhY2hlZERhdGFWaWV3TWVtb3J5MD1uZXcgRGF0YVZpZXcod2FzbS5tZW1vcnkuYnVmZmVyKSksY2FjaGVkRGF0YVZpZXdNZW1vcnkwfWZ1bmN0aW9uIGdldFN0cmluZ0Zyb21XYXNtMChwdHIsbGVuKXtyZXR1cm4gZGVjb2RlVGV4dChwdHI+Pj49MCxsZW4pfWxldCBjYWNoZWRVaW50OEFycmF5TWVtb3J5MD1udWxsO2Z1bmN0aW9uIGdldFVpbnQ4QXJyYXlNZW1vcnkwKCl7cmV0dXJuIG51bGwhPT1jYWNoZWRVaW50OEFycmF5TWVtb3J5MCYmY2FjaGVkVWludDhBcnJheU1lbW9yeTAuYnVmZmVyPT09d2FzbS5tZW1vcnkuYnVmZmVyfHwoY2FjaGVkVWludDhBcnJheU1lbW9yeTA9bmV3IFVpbnQ4QXJyYXkod2FzbS5tZW1vcnkuYnVmZmVyKSksY2FjaGVkVWludDhBcnJheU1lbW9yeTB9ZnVuY3Rpb24gZ2V0T2JqZWN0KGlkeCl7cmV0dXJuIGhlYXBbaWR4XX1mdW5jdGlvbiBoYW5kbGVFcnJvcihmLGFyZ3Mpe3RyeXtyZXR1cm4gZi5hcHBseSh0aGlzLGFyZ3MpfWNhdGNoKGUpe3dhc20uX193YmluZGdlbl9leHBvcnQzKGFkZEhlYXBPYmplY3QoZSkpfX1sZXQgaGVhcD1uZXcgQXJyYXkoMTI4KS5maWxsKHZvaWQgMCk7aGVhcC5wdXNoKHZvaWQgMCxudWxsLCEwLCExKTtsZXQgaGVhcF9uZXh0PWhlYXAubGVuZ3RoO2Z1bmN0aW9uIGlzTGlrZU5vbmUoeCl7cmV0dXJuIG51bGw9PXh9ZnVuY3Rpb24gbWFrZUNsb3N1cmUoYXJnMCxhcmcxLGR0b3IsZil7Y29uc3Qgc3RhdGU9e2E6YXJnMCxiOmFyZzEsY250OjEsZHRvcn0scmVhbD0oLi4uYXJncyk9PntzdGF0ZS5jbnQrKzt0cnl7cmV0dXJuIGYoc3RhdGUuYSxzdGF0ZS5iLC4uLmFyZ3MpfWZpbmFsbHl7cmVhbC5fd2JnX2NiX3VucmVmKCl9fTtyZXR1cm4gcmVhbC5fd2JnX2NiX3VucmVmPSgpPT57MD09PS0tc3RhdGUuY250JiYoc3RhdGUuZHRvcihzdGF0ZS5hLHN0YXRlLmIpLHN0YXRlLmE9MCxDTE9TVVJFX0RUT1JTLnVucmVnaXN0ZXIoc3RhdGUpKX0sQ0xPU1VSRV9EVE9SUy5yZWdpc3RlcihyZWFsLHN0YXRlLHN0YXRlKSxyZWFsfWZ1bmN0aW9uIG1ha2VNdXRDbG9zdXJlKGFyZzAsYXJnMSxkdG9yLGYpe2NvbnN0IHN0YXRlPXthOmFyZzAsYjphcmcxLGNudDoxLGR0b3J9LHJlYWw9KC4uLmFyZ3MpPT57c3RhdGUuY250Kys7Y29uc3QgYT1zdGF0ZS5hO3N0YXRlLmE9MDt0cnl7cmV0dXJuIGYoYSxzdGF0ZS5iLC4uLmFyZ3MpfWZpbmFsbHl7c3RhdGUuYT1hLHJlYWwuX3diZ19jYl91bnJlZigpfX07cmV0dXJuIHJlYWwuX3diZ19jYl91bnJlZj0oKT0+ezA9PT0tLXN0YXRlLmNudCYmKHN0YXRlLmR0b3Ioc3RhdGUuYSxzdGF0ZS5iKSxzdGF0ZS5hPTAsQ0xPU1VSRV9EVE9SUy51bnJlZ2lzdGVyKHN0YXRlKSl9LENMT1NVUkVfRFRPUlMucmVnaXN0ZXIocmVhbCxzdGF0ZSxzdGF0ZSkscmVhbH1mdW5jdGlvbiBwYXNzU3RyaW5nVG9XYXNtMChhcmcsbWFsbG9jLHJlYWxsb2Mpe2lmKHZvaWQgMD09PXJlYWxsb2Mpe2NvbnN0IGJ1Zj1jYWNoZWRUZXh0RW5jb2Rlci5lbmNvZGUoYXJnKSxwdHI9bWFsbG9jKGJ1Zi5sZW5ndGgsMSk+Pj4wO3JldHVybiBnZXRVaW50OEFycmF5TWVtb3J5MCgpLnN1YmFycmF5KHB0cixwdHIrYnVmLmxlbmd0aCkuc2V0KGJ1ZiksV0FTTV9WRUNUT1JfTEVOPWJ1Zi5sZW5ndGgscHRyfWxldCBsZW49YXJnLmxlbmd0aCxwdHI9bWFsbG9jKGxlbiwxKT4+PjA7Y29uc3QgbWVtPWdldFVpbnQ4QXJyYXlNZW1vcnkwKCk7bGV0IG9mZnNldD0wO2Zvcig7b2Zmc2V0PGxlbjtvZmZzZXQrKyl7Y29uc3QgY29kZT1hcmcuY2hhckNvZGVBdChvZmZzZXQpO2lmKGNvZGU+MTI3KWJyZWFrO21lbVtwdHIrb2Zmc2V0XT1jb2RlfWlmKG9mZnNldCE9PWxlbil7MCE9PW9mZnNldCYmKGFyZz1hcmcuc2xpY2Uob2Zmc2V0KSkscHRyPXJlYWxsb2MocHRyLGxlbixsZW49b2Zmc2V0KzMqYXJnLmxlbmd0aCwxKT4+PjA7Y29uc3Qgdmlldz1nZXRVaW50OEFycmF5TWVtb3J5MCgpLnN1YmFycmF5KHB0citvZmZzZXQscHRyK2xlbik7b2Zmc2V0Kz1jYWNoZWRUZXh0RW5jb2Rlci5lbmNvZGVJbnRvKGFyZyx2aWV3KS53cml0dGVuLHB0cj1yZWFsbG9jKHB0cixsZW4sb2Zmc2V0LDEpPj4+MH1yZXR1cm4gV0FTTV9WRUNUT1JfTEVOPW9mZnNldCxwdHJ9bGV0IHN0YWNrX3BvaW50ZXI9MTI4O2Z1bmN0aW9uIHRha2VPYmplY3QoaWR4KXtjb25zdCByZXQ9Z2V0T2JqZWN0KGlkeCk7cmV0dXJuIGRyb3BPYmplY3QoaWR4KSxyZXR9bGV0IGNhY2hlZFRleHREZWNvZGVyPSJ1bmRlZmluZWQiIT10eXBlb2YgVGV4dERlY29kZXI/bmV3IFRleHREZWNvZGVyKCJ1dGYtOCIse2lnbm9yZUJPTTohMCxmYXRhbDohMH0pOnZvaWQgMDtjYWNoZWRUZXh0RGVjb2RlciYmY2FjaGVkVGV4dERlY29kZXIuZGVjb2RlKCk7Y29uc3QgTUFYX1NBRkFSSV9ERUNPREVfQllURVM9MjE0NjQzNTA3MjtsZXQgbnVtQnl0ZXNEZWNvZGVkPTA7ZnVuY3Rpb24gZGVjb2RlVGV4dChwdHIsbGVuKXtyZXR1cm4gbnVtQnl0ZXNEZWNvZGVkKz1sZW4sbnVtQnl0ZXNEZWNvZGVkPj1NQVhfU0FGQVJJX0RFQ09ERV9CWVRFUyYmKGNhY2hlZFRleHREZWNvZGVyPW5ldyBUZXh0RGVjb2RlcigidXRmLTgiLHtpZ25vcmVCT006ITAsZmF0YWw6ITB9KSxjYWNoZWRUZXh0RGVjb2Rlci5kZWNvZGUoKSxudW1CeXRlc0RlY29kZWQ9bGVuKSxjYWNoZWRUZXh0RGVjb2Rlci5kZWNvZGUoZ2V0VWludDhBcnJheU1lbW9yeTAoKS5zbGljZShwdHIscHRyK2xlbikpfWNvbnN0IGNhY2hlZFRleHRFbmNvZGVyPSJ1bmRlZmluZWQiIT10eXBlb2YgVGV4dEVuY29kZXI/bmV3IFRleHRFbmNvZGVyOnZvaWQgMDtjYWNoZWRUZXh0RW5jb2RlciYmKGNhY2hlZFRleHRFbmNvZGVyLmVuY29kZUludG89ZnVuY3Rpb24oYXJnLHZpZXcpe2NvbnN0IGJ1Zj1jYWNoZWRUZXh0RW5jb2Rlci5lbmNvZGUoYXJnKTtyZXR1cm4gdmlldy5zZXQoYnVmKSx7cmVhZDphcmcubGVuZ3RoLHdyaXR0ZW46YnVmLmxlbmd0aH19KTtsZXQgV0FTTV9WRUNUT1JfTEVOPTAsd2FzbU1vZHVsZSx3YXNtO2Z1bmN0aW9uIF9fd2JnX2ZpbmFsaXplX2luaXQoaW5zdGFuY2UsbW9kdWxlLHRocmVhZF9zdGFja19zaXplKXtpZih3YXNtPWluc3RhbmNlLmV4cG9ydHMsd2FzbU1vZHVsZT1tb2R1bGUsY2FjaGVkRGF0YVZpZXdNZW1vcnkwPW51bGwsY2FjaGVkVWludDhBcnJheU1lbW9yeTA9bnVsbCx2b2lkIDAhPT10aHJlYWRfc3RhY2tfc2l6ZSYmKCJudW1iZXIiIT10eXBlb2YgdGhyZWFkX3N0YWNrX3NpemV8fDA9PT10aHJlYWRfc3RhY2tfc2l6ZXx8dGhyZWFkX3N0YWNrX3NpemUlNjU1MzYhPTApKXRocm93ImludmFsaWQgc3RhY2sgc2l6ZSI7cmV0dXJuIHdhc20uX193YmluZGdlbl9zdGFydCh0aHJlYWRfc3RhY2tfc2l6ZSksd2FzbX1hc3luYyBmdW5jdGlvbiBfX3diZ19sb2FkKG1vZHVsZSxpbXBvcnRzKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgUmVzcG9uc2UmJm1vZHVsZSBpbnN0YW5jZW9mIFJlc3BvbnNlKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgV2ViQXNzZW1ibHkuaW5zdGFudGlhdGVTdHJlYW1pbmcpdHJ5e3JldHVybiBhd2FpdCBXZWJBc3NlbWJseS5pbnN0YW50aWF0ZVN0cmVhbWluZyhtb2R1bGUsaW1wb3J0cyl9Y2F0Y2goZSl7aWYoIShtb2R1bGUub2smJmZ1bmN0aW9uIGV4cGVjdGVkUmVzcG9uc2VUeXBlKHR5cGUpe3N3aXRjaCh0eXBlKXtjYXNlImJhc2ljIjpjYXNlImNvcnMiOmNhc2UiZGVmYXVsdCI6cmV0dXJuITB9cmV0dXJuITF9KG1vZHVsZS50eXBlKSl8fCJhcHBsaWNhdGlvbi93YXNtIj09PW1vZHVsZS5oZWFkZXJzLmdldCgiQ29udGVudC1UeXBlIikpdGhyb3cgZTtjb25zb2xlLndhcm4oImBXZWJBc3NlbWJseS5pbnN0YW50aWF0ZVN0cmVhbWluZ2AgZmFpbGVkIGJlY2F1c2UgeW91ciBzZXJ2ZXIgZG9lcyBub3Qgc2VydmUgV2FzbSB3aXRoIGBhcHBsaWNhdGlvbi93YXNtYCBNSU1FIHR5cGUuIEZhbGxpbmcgYmFjayB0byBgV2ViQXNzZW1ibHkuaW5zdGFudGlhdGVgIHdoaWNoIGlzIHNsb3dlci4gT3JpZ2luYWwgZXJyb3I6XG4iLGUpfWNvbnN0IGJ5dGVzPWF3YWl0IG1vZHVsZS5hcnJheUJ1ZmZlcigpO3JldHVybiBhd2FpdCBXZWJBc3NlbWJseS5pbnN0YW50aWF0ZShieXRlcyxpbXBvcnRzKX17Y29uc3QgaW5zdGFuY2U9YXdhaXQgV2ViQXNzZW1ibHkuaW5zdGFudGlhdGUobW9kdWxlLGltcG9ydHMpO3JldHVybiBpbnN0YW5jZSBpbnN0YW5jZW9mIFdlYkFzc2VtYmx5Lkluc3RhbmNlP3tpbnN0YW5jZSxtb2R1bGV9Omluc3RhbmNlfX1mdW5jdGlvbiBpbml0U3luYyhtb2R1bGUsbWVtb3J5KXtpZih2b2lkIDAhPT13YXNtKXJldHVybiB3YXNtO2xldCB0aHJlYWRfc3RhY2tfc2l6ZTt2b2lkIDAhPT1tb2R1bGUmJihPYmplY3QuZ2V0UHJvdG90eXBlT2YobW9kdWxlKT09PU9iamVjdC5wcm90b3R5cGU/KHttb2R1bGUsbWVtb3J5LHRocmVhZF9zdGFja19zaXplfT1tb2R1bGUpOmNvbnNvbGUud2FybigidXNpbmcgZGVwcmVjYXRlZCBwYXJhbWV0ZXJzIGZvciBgaW5pdFN5bmMoKWA7IHBhc3MgYSBzaW5nbGUgb2JqZWN0IGluc3RlYWQiKSk7Y29uc3QgaW1wb3J0cz1fX3diZ19nZXRfaW1wb3J0cyhtZW1vcnkpO21vZHVsZSBpbnN0YW5jZW9mIFdlYkFzc2VtYmx5Lk1vZHVsZXx8KG1vZHVsZT1uZXcgV2ViQXNzZW1ibHkuTW9kdWxlKG1vZHVsZSkpO3JldHVybiBfX3diZ19maW5hbGl6ZV9pbml0KG5ldyBXZWJBc3NlbWJseS5JbnN0YW5jZShtb2R1bGUsaW1wb3J0cyksbW9kdWxlLHRocmVhZF9zdGFja19zaXplKX1hc3luYyBmdW5jdGlvbiBfX3diZ19pbml0KG1vZHVsZV9vcl9wYXRoLG1lbW9yeSl7aWYodm9pZCAwIT09d2FzbSlyZXR1cm4gd2FzbTtsZXQgdGhyZWFkX3N0YWNrX3NpemU7dm9pZCAwIT09bW9kdWxlX29yX3BhdGgmJihPYmplY3QuZ2V0UHJvdG90eXBlT2YobW9kdWxlX29yX3BhdGgpPT09T2JqZWN0LnByb3RvdHlwZT8oe21vZHVsZV9vcl9wYXRoLG1lbW9yeSx0aHJlYWRfc3RhY2tfc2l6ZX09bW9kdWxlX29yX3BhdGgpOmNvbnNvbGUud2FybigidXNpbmcgZGVwcmVjYXRlZCBwYXJhbWV0ZXJzIGZvciB0aGUgaW5pdGlhbGl6YXRpb24gZnVuY3Rpb247IHBhc3MgYSBzaW5nbGUgb2JqZWN0IGluc3RlYWQiKSksdm9pZCAwPT09bW9kdWxlX29yX3BhdGgmJihtb2R1bGVfb3JfcGF0aD1uZXcgVVJMKF9fd2VicGFja19yZXF1aXJlX18oIi4vc3JjL3V0b28vaW5kZXhfYmcud2FzbSIpLF9fd2VicGFja19yZXF1aXJlX18uYikpO2NvbnN0IGltcG9ydHM9X193YmdfZ2V0X2ltcG9ydHMobWVtb3J5KTsoInN0cmluZyI9PXR5cGVvZiBtb2R1bGVfb3JfcGF0aHx8ImZ1bmN0aW9uIj09dHlwZW9mIFJlcXVlc3QmJm1vZHVsZV9vcl9wYXRoIGluc3RhbmNlb2YgUmVxdWVzdHx8ImZ1bmN0aW9uIj09dHlwZW9mIFVSTCYmbW9kdWxlX29yX3BhdGggaW5zdGFuY2VvZiBVUkwpJiYobW9kdWxlX29yX3BhdGg9ZmV0Y2gobW9kdWxlX29yX3BhdGgpKTtjb25zdHtpbnN0YW5jZSxtb2R1bGV9PWF3YWl0IF9fd2JnX2xvYWQoYXdhaXQgbW9kdWxlX29yX3BhdGgsaW1wb3J0cyk7cmV0dXJuIF9fd2JnX2ZpbmFsaXplX2luaXQoaW5zdGFuY2UsbW9kdWxlLHRocmVhZF9zdGFja19zaXplKX19LCIuL3NyYy91dG9vL2luZGV4X2JnLndhc20iKG1vZHVsZSxfX3VudXNlZF93ZWJwYWNrX2V4cG9ydHMsX193ZWJwYWNrX3JlcXVpcmVfXyl7bW9kdWxlLmV4cG9ydHM9X193ZWJwYWNrX3JlcXVpcmVfXy5wKyJhZjA4NGY5NmRmMGVkNWU1Y2U3ZC53YXNtIn19LF9fd2VicGFja19tb2R1bGVfY2FjaGVfXz17fTtmdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKXt2YXIgY2FjaGVkTW9kdWxlPV9fd2VicGFja19tb2R1bGVfY2FjaGVfX1ttb2R1bGVJZF07aWYodm9pZCAwIT09Y2FjaGVkTW9kdWxlKXJldHVybiBjYWNoZWRNb2R1bGUuZXhwb3J0czt2YXIgbW9kdWxlPV9fd2VicGFja19tb2R1bGVfY2FjaGVfX1ttb2R1bGVJZF09e2V4cG9ydHM6e319O3JldHVybiBfX3dlYnBhY2tfbW9kdWxlc19fW21vZHVsZUlkXShtb2R1bGUsbW9kdWxlLmV4cG9ydHMsX193ZWJwYWNrX3JlcXVpcmVfXyksbW9kdWxlLmV4cG9ydHN9X193ZWJwYWNrX3JlcXVpcmVfXy5tPV9fd2VicGFja19tb2R1bGVzX18sX193ZWJwYWNrX3JlcXVpcmVfXy5kPShleHBvcnRzLGRlZmluaXRpb24pPT57Zm9yKHZhciBrZXkgaW4gZGVmaW5pdGlvbilfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZGVmaW5pdGlvbixrZXkpJiYhX193ZWJwYWNrX3JlcXVpcmVfXy5vKGV4cG9ydHMsa2V5KSYmT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsa2V5LHtlbnVtZXJhYmxlOiEwLGdldDpkZWZpbml0aW9uW2tleV19KX0sX193ZWJwYWNrX3JlcXVpcmVfXy5nPWZ1bmN0aW9uKCl7aWYoIm9iamVjdCI9PXR5cGVvZiBnbG9iYWxUaGlzKXJldHVybiBnbG9iYWxUaGlzO3RyeXtyZXR1cm4gdGhpc3x8bmV3IEZ1bmN0aW9uKCJyZXR1cm4gdGhpcyIpKCl9Y2F0Y2goZSl7aWYoIm9iamVjdCI9PXR5cGVvZiB3aW5kb3cpcmV0dXJuIHdpbmRvd319KCksX193ZWJwYWNrX3JlcXVpcmVfXy5vPShvYmoscHJvcCk9Pk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmoscHJvcCksKCgpPT57dmFyIHNjcmlwdFVybDtfX3dlYnBhY2tfcmVxdWlyZV9fLmcuaW1wb3J0U2NyaXB0cyYmKHNjcmlwdFVybD1fX3dlYnBhY2tfcmVxdWlyZV9fLmcubG9jYXRpb24rIiIpO3ZhciBkb2N1bWVudD1fX3dlYnBhY2tfcmVxdWlyZV9fLmcuZG9jdW1lbnQ7aWYoIXNjcmlwdFVybCYmZG9jdW1lbnQmJihkb2N1bWVudC5jdXJyZW50U2NyaXB0JiYiU0NSSVBUIj09PWRvY3VtZW50LmN1cnJlbnRTY3JpcHQudGFnTmFtZS50b1VwcGVyQ2FzZSgpJiYoc2NyaXB0VXJsPWRvY3VtZW50LmN1cnJlbnRTY3JpcHQuc3JjKSwhc2NyaXB0VXJsKSl7dmFyIHNjcmlwdHM9ZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoInNjcmlwdCIpO2lmKHNjcmlwdHMubGVuZ3RoKWZvcih2YXIgaT1zY3JpcHRzLmxlbmd0aC0xO2k+LTEmJighc2NyaXB0VXJsfHwhL15odHRwKHM/KTovLnRlc3Qoc2NyaXB0VXJsKSk7KXNjcmlwdFVybD1zY3JpcHRzW2ktLV0uc3JjfWlmKCFzY3JpcHRVcmwpdGhyb3cgbmV3IEVycm9yKCJBdXRvbWF0aWMgcHVibGljUGF0aCBpcyBub3Qgc3VwcG9ydGVkIGluIHRoaXMgYnJvd3NlciIpO3NjcmlwdFVybD1zY3JpcHRVcmwucmVwbGFjZSgvXmJsb2I6LywiIikucmVwbGFjZSgvIy4qJC8sIiIpLnJlcGxhY2UoL1w/LiokLywiIikucmVwbGFjZSgvXC9bXlwvXSskLywiLyIpLF9fd2VicGFja19yZXF1aXJlX18ucD1zY3JpcHRVcmx9KSgpLF9fd2VicGFja19yZXF1aXJlX18uYj1zZWxmLmxvY2F0aW9uKyIiO3ZhciBfX3dlYnBhY2tfZXhwb3J0c19fPXt9LF91dG9vX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX189X193ZWJwYWNrX3JlcXVpcmVfXygiLi9zcmMvdXRvby9pbmRleC5qcyIpO3JldHVybiBzZWxmLndhc21fYmluZGdlbj1fdXRvb19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fLlFSLF9fd2VicGFja19leHBvcnRzX189X193ZWJwYWNrX2V4cG9ydHNfXy5kZWZhdWx0LF9fd2VicGFja19leHBvcnRzX199KSgpKTs=";
|
package/esm/utoo/index.js
CHANGED
|
@@ -1480,7 +1480,7 @@ function __wbg_get_imports(memory) {
|
|
|
1480
1480
|
const a = state0.a;
|
|
1481
1481
|
state0.a = 0;
|
|
1482
1482
|
try {
|
|
1483
|
-
return
|
|
1483
|
+
return __wasm_bindgen_func_elem_3465(a, state0.b, arg0, arg1);
|
|
1484
1484
|
}
|
|
1485
1485
|
finally {
|
|
1486
1486
|
state0.a = a;
|
|
@@ -1807,33 +1807,33 @@ function __wbg_get_imports(memory) {
|
|
|
1807
1807
|
}, arguments);
|
|
1808
1808
|
},
|
|
1809
1809
|
__wbindgen_cast_0000000000000001: function (arg0, arg1) {
|
|
1810
|
-
// Cast intrinsic for `Closure(Closure { dtor_idx:
|
|
1811
|
-
const ret = makeMutClosure(arg0, arg1, wasm.
|
|
1810
|
+
// Cast intrinsic for `Closure(Closure { dtor_idx: 1032, function: Function { arguments: [Externref], shim_idx: 3962, ret: Unit, inner_ret: Some(Unit) }, mutable: true }) -> Externref`.
|
|
1811
|
+
const ret = makeMutClosure(arg0, arg1, wasm.__wasm_bindgen_func_elem_20158, __wasm_bindgen_func_elem_79707);
|
|
1812
1812
|
return addHeapObject(ret);
|
|
1813
1813
|
},
|
|
1814
1814
|
__wbindgen_cast_0000000000000002: function (arg0, arg1) {
|
|
1815
|
-
// Cast intrinsic for `Closure(Closure { dtor_idx:
|
|
1816
|
-
const ret = makeMutClosure(arg0, arg1, wasm.
|
|
1815
|
+
// Cast intrinsic for `Closure(Closure { dtor_idx: 1032, function: Function { arguments: [NamedExternref("MessageEvent")], shim_idx: 3962, ret: Unit, inner_ret: Some(Unit) }, mutable: true }) -> Externref`.
|
|
1816
|
+
const ret = makeMutClosure(arg0, arg1, wasm.__wasm_bindgen_func_elem_20158, __wasm_bindgen_func_elem_79707);
|
|
1817
1817
|
return addHeapObject(ret);
|
|
1818
1818
|
},
|
|
1819
1819
|
__wbindgen_cast_0000000000000003: function (arg0, arg1) {
|
|
1820
|
-
// Cast intrinsic for `Closure(Closure { dtor_idx:
|
|
1821
|
-
const ret = makeMutClosure(arg0, arg1, wasm.
|
|
1820
|
+
// Cast intrinsic for `Closure(Closure { dtor_idx: 1032, function: Function { arguments: [Ref(NamedExternref("MessageEvent"))], shim_idx: 3965, ret: Unit, inner_ret: Some(Unit) }, mutable: true }) -> Externref`.
|
|
1821
|
+
const ret = makeMutClosure(arg0, arg1, wasm.__wasm_bindgen_func_elem_20158, __wasm_bindgen_func_elem_79743);
|
|
1822
1822
|
return addHeapObject(ret);
|
|
1823
1823
|
},
|
|
1824
1824
|
__wbindgen_cast_0000000000000004: function (arg0, arg1) {
|
|
1825
|
-
// Cast intrinsic for `Closure(Closure { dtor_idx:
|
|
1826
|
-
const ret = makeMutClosure(arg0, arg1, wasm.
|
|
1825
|
+
// Cast intrinsic for `Closure(Closure { dtor_idx: 1032, function: Function { arguments: [], shim_idx: 1033, ret: Unit, inner_ret: Some(Unit) }, mutable: true }) -> Externref`.
|
|
1826
|
+
const ret = makeMutClosure(arg0, arg1, wasm.__wasm_bindgen_func_elem_20158, __wasm_bindgen_func_elem_20144);
|
|
1827
1827
|
return addHeapObject(ret);
|
|
1828
1828
|
},
|
|
1829
1829
|
__wbindgen_cast_0000000000000005: function (arg0, arg1) {
|
|
1830
|
-
// Cast intrinsic for `Closure(Closure { dtor_idx:
|
|
1831
|
-
const ret = makeClosure(arg0, arg1, wasm.
|
|
1830
|
+
// Cast intrinsic for `Closure(Closure { dtor_idx: 3906, function: Function { arguments: [NamedExternref("Array<any>")], shim_idx: 3907, ret: Unit, inner_ret: Some(Unit) }, mutable: false }) -> Externref`.
|
|
1831
|
+
const ret = makeClosure(arg0, arg1, wasm.__wasm_bindgen_func_elem_78661, __wasm_bindgen_func_elem_79223);
|
|
1832
1832
|
return addHeapObject(ret);
|
|
1833
1833
|
},
|
|
1834
1834
|
__wbindgen_cast_0000000000000006: function (arg0, arg1) {
|
|
1835
|
-
// Cast intrinsic for `Closure(Closure { dtor_idx:
|
|
1836
|
-
const ret = makeMutClosure(arg0, arg1, wasm.
|
|
1835
|
+
// Cast intrinsic for `Closure(Closure { dtor_idx: 3968, function: Function { arguments: [], shim_idx: 1033, ret: Unit, inner_ret: Some(Unit) }, mutable: true }) -> Externref`.
|
|
1836
|
+
const ret = makeMutClosure(arg0, arg1, wasm.__wasm_bindgen_func_elem_79774, __wasm_bindgen_func_elem_20144);
|
|
1837
1837
|
return addHeapObject(ret);
|
|
1838
1838
|
},
|
|
1839
1839
|
__wbindgen_cast_0000000000000007: function (arg0) {
|
|
@@ -1881,25 +1881,25 @@ function __wbg_get_imports(memory) {
|
|
|
1881
1881
|
"./index_bg.js": import0,
|
|
1882
1882
|
};
|
|
1883
1883
|
}
|
|
1884
|
-
function
|
|
1885
|
-
wasm.
|
|
1884
|
+
function __wasm_bindgen_func_elem_20144(arg0, arg1) {
|
|
1885
|
+
wasm.__wasm_bindgen_func_elem_20144(arg0, arg1);
|
|
1886
1886
|
}
|
|
1887
|
-
function
|
|
1888
|
-
wasm.
|
|
1887
|
+
function __wasm_bindgen_func_elem_79707(arg0, arg1, arg2) {
|
|
1888
|
+
wasm.__wasm_bindgen_func_elem_79707(arg0, arg1, addHeapObject(arg2));
|
|
1889
1889
|
}
|
|
1890
|
-
function
|
|
1890
|
+
function __wasm_bindgen_func_elem_79743(arg0, arg1, arg2) {
|
|
1891
1891
|
try {
|
|
1892
|
-
wasm.
|
|
1892
|
+
wasm.__wasm_bindgen_func_elem_79743(arg0, arg1, addBorrowedObject(arg2));
|
|
1893
1893
|
}
|
|
1894
1894
|
finally {
|
|
1895
1895
|
heap[stack_pointer++] = undefined;
|
|
1896
1896
|
}
|
|
1897
1897
|
}
|
|
1898
|
-
function
|
|
1899
|
-
wasm.
|
|
1898
|
+
function __wasm_bindgen_func_elem_79223(arg0, arg1, arg2) {
|
|
1899
|
+
wasm.__wasm_bindgen_func_elem_79223(arg0, arg1, addHeapObject(arg2));
|
|
1900
1900
|
}
|
|
1901
|
-
function
|
|
1902
|
-
wasm.
|
|
1901
|
+
function __wasm_bindgen_func_elem_3465(arg0, arg1, arg2, arg3) {
|
|
1902
|
+
wasm.__wasm_bindgen_func_elem_3465(arg0, arg1, addHeapObject(arg2), addHeapObject(arg3));
|
|
1903
1903
|
}
|
|
1904
1904
|
const __wbindgen_enum_DirEntryType = ["file", "directory"];
|
|
1905
1905
|
const __wbindgen_enum_FileSystemChangeRecordType = ["appeared", "disappeared", "errored", "modified", "moved", "unknown"];
|
package/esm/utoo/index_bg.wasm
CHANGED
|
Binary file
|