1
0
mirror of https://github.com/laurent22/joplin.git synced 2024-12-18 09:35:20 +02:00
joplin/ReactNativeClient/pluginAssets/mermaid/mermaid.min.js.base64.js
Laurent Cozic cb3e1cf1e9 Mobile: Upgraded React Native to v0.63
commit 2fb6cee901
Merge: 4e303be85f db509955f6
Author: Laurent Cozic <laurent@cozic.net>
Date:   Fri Oct 16 16:24:07 2020 +0100

    Merge branch 'dev' into rn_63

commit 4e303be85f
Author: Laurent Cozic <laurent@cozic.net>
Date:   Fri Oct 16 16:14:39 2020 +0100

    Clean up

commit e3a37ec2d6
Author: Laurent Cozic <laurent@cozic.net>
Date:   Fri Oct 16 15:57:55 2020 +0100

    Use different script for pre-commit and manual start

commit bd236648fc
Author: Laurent Cozic <laurent@cozic.net>
Date:   Fri Oct 16 15:56:45 2020 +0100

    Removed RN eslint config

commit e7feda41c9
Author: Laurent Cozic <laurent@cozic.net>
Date:   Fri Oct 16 15:27:08 2020 +0100

    Revert "Disable git hook for now"

    This reverts commit 89263ac742.

commit cfd63fe46f
Author: Laurent Cozic <laurent@cozic.net>
Date:   Fri Oct 16 13:02:32 2020 +0100

    Ask permission to use geo-location

commit 66059939a3
Author: Laurent Cozic <laurent@cozic.net>
Date:   Fri Oct 16 12:26:20 2020 +0100

    Fixed WebView race condition

commit 1e0d2b7b86
Author: Laurent Cozic <laurent@cozic.net>
Date:   Fri Oct 16 11:56:21 2020 +0100

    Fixed webview issues

commit f537d22d7f
Author: Laurent Cozic <laurent@cozic.net>
Date:   Fri Oct 16 11:08:29 2020 +0100

    Improve resource file watching

commit eec32cf70a
Author: Laurent Cozic <laurent@cozic.net>
Date:   Thu Oct 15 18:40:13 2020 +0100

    Removed cache package dependency and implemented one more suitable for React Native

commit efa346fea4
Author: Laurent Cozic <laurent@cozic.net>
Date:   Thu Oct 15 14:57:21 2020 +0100

    iOS: Added fonts to Info.plist although it was working without it

commit 572b647bc0
Author: Laurent Cozic <laurent@cozic.net>
Date:   Thu Oct 15 14:56:49 2020 +0100

    Specify content-type header for OneDrive to prevent network error

commit bcedf6c7f0
Author: Laurent Cozic <laurent@cozic.net>
Date:   Thu Oct 15 12:45:01 2020 +0100

    iOS: Disable long press menu since it is already built-in

commit 7359dd61d1
Author: Laurent Cozic <laurent@cozic.net>
Date:   Thu Oct 15 12:37:40 2020 +0100

    Removed unused react-native-device-info

commit 2d63ab36d3
Author: Laurent Cozic <laurent@cozic.net>
Date:   Thu Oct 15 12:35:54 2020 +0100

    iOS: Fixed taking a picture

commit 8e2875a91c
Author: Laurent Cozic <laurent@cozic.net>
Date:   Thu Oct 15 12:11:13 2020 +0100

    iOS: Restored camera roll functionality

commit 75f5edf2ad
Author: Laurent Cozic <laurent@cozic.net>
Date:   Thu Oct 15 11:40:13 2020 +0100

    iOS: Fixed build settings

commit b220c98419
Author: Laurent Cozic <laurent@cozic.net>
Date:   Thu Oct 15 11:40:03 2020 +0100

    iOS: Got images to work with WebKit

commit c34b43e841
Author: Laurent Cozic <laurent@cozic.net>
Date:   Thu Oct 15 10:24:52 2020 +0100

    iOS: Restore more settings

commit 32997611e6
Author: Laurent Cozic <laurent@cozic.net>
Date:   Thu Oct 15 10:15:14 2020 +0100

    iOS: Added back icons and other properties

commit b5811d7f7c
Author: Laurent Cozic <laurent@cozic.net>
Date:   Wed Oct 14 23:53:14 2020 +0100

    Got iOS build to work

commit dc6d7c00e0
Author: Laurent Cozic <laurent@cozic.net>
Date:   Wed Oct 14 18:40:06 2020 +0100

    Imported old settings in gradle build

commit dff59f5603
Author: Laurent Cozic <laurent@cozic.net>
Date:   Wed Oct 14 18:20:00 2020 +0100

    Restored sharing

commit 0bdb449e72
Author: Laurent Cozic <laurent@cozic.net>
Date:   Wed Oct 14 17:25:40 2020 +0100

    Updated NoteBodyViewer

commit 0c0d228815
Author: Laurent Cozic <laurent@cozic.net>
Date:   Wed Oct 14 16:54:42 2020 +0100

    Fixed networking

commit 6ff45ce485
Author: Laurent Cozic <laurent@cozic.net>
Date:   Wed Oct 14 13:11:00 2020 +0100

    Fixed document picker

commit cc889182b6
Author: Laurent Cozic <laurent@cozic.net>
Date:   Wed Oct 14 12:56:27 2020 +0100

    Added back support for alarms

commit 040261abfa
Author: Laurent Cozic <laurent@cozic.net>
Date:   Tue Oct 13 22:04:49 2020 +0100

    Fixed Clipboard and remove image-picker package

commit 1077ad8f16
Author: Laurent Cozic <laurent@cozic.net>
Date:   Tue Oct 13 21:54:52 2020 +0100

    Fixed Select Alarm dialog and PoorManIntervals class

commit 8296676fd5
Author: Laurent Cozic <laurent@cozic.net>
Date:   Tue Oct 13 21:32:52 2020 +0100

    Fixed icons and warnings

commit 3b0e3f6f43
Author: Laurent Cozic <laurent@cozic.net>
Date:   Tue Oct 13 17:02:59 2020 +0100

    Got app to build again

commit 89263ac742
Author: Laurent Cozic <laurent@cozic.net>
Date:   Tue Oct 13 15:41:17 2020 +0100

    Disable git hook for now

commit d6da162f67
Author: Laurent Cozic <laurent@cozic.net>
Date:   Tue Oct 13 15:39:12 2020 +0100

    Restored back all RN packages

commit 7f8ce3732c
Author: Laurent Cozic <laurent@cozic.net>
Date:   Tue Oct 13 15:13:12 2020 +0100

    Restored base packages

commit ea59726eb3
Author: Laurent Cozic <laurent@cozic.net>
Date:   Tue Oct 13 15:05:17 2020 +0100

    Started over from scratch
2020-10-16 16:26:19 +01:00

1 line
1.1 MiB

module.exports = `IWZ1bmN0aW9uKHQsZSl7Im9iamVjdCI9PXR5cGVvZiBleHBvcnRzJiYib2JqZWN0Ij09dHlwZW9mIG1vZHVsZT9tb2R1bGUuZXhwb3J0cz1lKCk6ImZ1bmN0aW9uIj09dHlwZW9mIGRlZmluZSYmZGVmaW5lLmFtZD9kZWZpbmUoW10sZSk6Im9iamVjdCI9PXR5cGVvZiBleHBvcnRzP2V4cG9ydHMubWVybWFpZD1lKCk6dC5tZXJtYWlkPWUoKX0oInVuZGVmaW5lZCIhPXR5cGVvZiBzZWxmP3NlbGY6dGhpcywoZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24odCl7dmFyIGU9e307ZnVuY3Rpb24gbihyKXtpZihlW3JdKXJldHVybiBlW3JdLmV4cG9ydHM7dmFyIGk9ZVtyXT17aTpyLGw6ITEsZXhwb3J0czp7fX07cmV0dXJuIHRbcl0uY2FsbChpLmV4cG9ydHMsaSxpLmV4cG9ydHMsbiksaS5sPSEwLGkuZXhwb3J0c31yZXR1cm4gbi5tPXQsbi5jPWUsbi5kPWZ1bmN0aW9uKHQsZSxyKXtuLm8odCxlKXx8T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsZSx7ZW51bWVyYWJsZTohMCxnZXQ6cn0pfSxuLnI9ZnVuY3Rpb24odCl7InVuZGVmaW5lZCIhPXR5cGVvZiBTeW1ib2wmJlN5bWJvbC50b1N0cmluZ1RhZyYmT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsU3ltYm9sLnRvU3RyaW5nVGFnLHt2YWx1ZToiTW9kdWxlIn0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KX0sbi50PWZ1bmN0aW9uKHQsZSl7aWYoMSZlJiYodD1uKHQpKSw4JmUpcmV0dXJuIHQ7aWYoNCZlJiYib2JqZWN0Ij09dHlwZW9mIHQmJnQmJnQuX19lc01vZHVsZSlyZXR1cm4gdDt2YXIgcj1PYmplY3QuY3JlYXRlKG51bGwpO2lmKG4ucihyKSxPYmplY3QuZGVmaW5lUHJvcGVydHkociwiZGVmYXVsdCIse2VudW1lcmFibGU6ITAsdmFsdWU6dH0pLDImZSYmInN0cmluZyIhPXR5cGVvZiB0KWZvcih2YXIgaSBpbiB0KW4uZChyLGksZnVuY3Rpb24oZSl7cmV0dXJuIHRbZV19LmJpbmQobnVsbCxpKSk7cmV0dXJuIHJ9LG4ubj1mdW5jdGlvbih0KXt2YXIgZT10JiZ0Ll9fZXNNb2R1bGU/ZnVuY3Rpb24oKXtyZXR1cm4gdC5kZWZhdWx0fTpmdW5jdGlvbigpe3JldHVybiB0fTtyZXR1cm4gbi5kKGUsImEiLGUpLGV9LG4ubz1mdW5jdGlvbih0LGUpe3JldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodCxlKX0sbi5wPSIiLG4obi5zPTM4Myl9KFtmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO24ucihlKTt2YXIgcj1mdW5jdGlvbih0LGUpe3JldHVybiB0PGU/LTE6dD5lPzE6dD49ZT8wOk5hTn0saT1mdW5jdGlvbih0KXt2YXIgZTtyZXR1cm4gMT09PXQubGVuZ3RoJiYoZT10LHQ9ZnVuY3Rpb24odCxuKXtyZXR1cm4gcihlKHQpLG4pfSkse2xlZnQ6ZnVuY3Rpb24oZSxuLHIsaSl7Zm9yKG51bGw9PXImJihyPTApLG51bGw9PWkmJihpPWUubGVuZ3RoKTtyPGk7KXt2YXIgYT1yK2k+Pj4xO3QoZVthXSxuKTwwP3I9YSsxOmk9YX1yZXR1cm4gcn0scmlnaHQ6ZnVuY3Rpb24oZSxuLHIsaSl7Zm9yKG51bGw9PXImJihyPTApLG51bGw9PWkmJihpPWUubGVuZ3RoKTtyPGk7KXt2YXIgYT1yK2k+Pj4xO3QoZVthXSxuKT4wP2k9YTpyPWErMX1yZXR1cm4gcn19fTt2YXIgYT1pKHIpLG89YS5yaWdodCxzPWEubGVmdCxjPW8sdT1mdW5jdGlvbih0LGUpe251bGw9PWUmJihlPWwpO2Zvcih2YXIgbj0wLHI9dC5sZW5ndGgtMSxpPXRbMF0sYT1uZXcgQXJyYXkocjwwPzA6cik7bjxyOylhW25dPWUoaSxpPXRbKytuXSk7cmV0dXJuIGF9O2Z1bmN0aW9uIGwodCxlKXtyZXR1cm5bdCxlXX12YXIgaD1mdW5jdGlvbih0LGUsbil7dmFyIHIsaSxhLG8scz10Lmxlbmd0aCxjPWUubGVuZ3RoLHU9bmV3IEFycmF5KHMqYyk7Zm9yKG51bGw9PW4mJihuPWwpLHI9YT0wO3I8czsrK3IpZm9yKG89dFtyXSxpPTA7aTxjOysraSwrK2EpdVthXT1uKG8sZVtpXSk7cmV0dXJuIHV9LGY9ZnVuY3Rpb24odCxlKXtyZXR1cm4gZTx0Py0xOmU+dD8xOmU+PXQ/MDpOYU59LGQ9ZnVuY3Rpb24odCl7cmV0dXJuIG51bGw9PT10P05hTjordH0scD1mdW5jdGlvbih0LGUpe3ZhciBuLHIsaT10Lmxlbmd0aCxhPTAsbz0tMSxzPTAsYz0wO2lmKG51bGw9PWUpZm9yKDsrK288aTspaXNOYU4obj1kKHRbb10pKXx8KGMrPShyPW4tcykqKG4tKHMrPXIvKythKSkpO2Vsc2UgZm9yKDsrK288aTspaXNOYU4obj1kKGUodFtvXSxvLHQpKSl8fChjKz0ocj1uLXMpKihuLShzKz1yLysrYSkpKTtpZihhPjEpcmV0dXJuIGMvKGEtMSl9LGc9ZnVuY3Rpb24odCxlKXt2YXIgbj1wKHQsZSk7cmV0dXJuIG4/TWF0aC5zcXJ0KG4pOm59LHk9ZnVuY3Rpb24odCxlKXt2YXIgbixyLGksYT10Lmxlbmd0aCxvPS0xO2lmKG51bGw9PWUpe2Zvcig7KytvPGE7KWlmKG51bGwhPShuPXRbb10pJiZuPj1uKWZvcihyPWk9bjsrK288YTspbnVsbCE9KG49dFtvXSkmJihyPm4mJihyPW4pLGk8biYmKGk9bikpfWVsc2UgZm9yKDsrK288YTspaWYobnVsbCE9KG49ZSh0W29dLG8sdCkpJiZuPj1uKWZvcihyPWk9bjsrK288YTspbnVsbCE9KG49ZSh0W29dLG8sdCkpJiYocj5uJiYocj1uKSxpPG4mJihpPW4pKTtyZXR1cm5bcixpXX0sdj1BcnJheS5wcm90b3R5cGUsbT12LnNsaWNlLGI9di5tYXAseD1mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdH19LF89ZnVuY3Rpb24odCl7cmV0dXJuIHR9LGs9ZnVuY3Rpb24odCxlLG4pe3Q9K3QsZT0rZSxuPShpPWFyZ3VtZW50cy5sZW5ndGgpPDI/KGU9dCx0PTAsMSk6aTwzPzE6K247Zm9yKHZhciByPS0xLGk9MHxNYXRoLm1heCgwLE1hdGguY2VpbCgoZS10KS9uKSksYT1uZXcgQXJyYXkoaSk7KytyPGk7KWFbcl09dCtyKm47cmV0dXJuIGF9LHc9TWF0aC5zcXJ0KDUwKSxFPU1hdGguc3FydCgxMCksVD1NYXRoLnNxcnQoMiksQz1mdW5jdGlvbih0LGUsbil7dmFyIHIsaSxhLG8scz0tMTtpZihuPStuLCh0PSt0KT09PShlPStlKSYmbj4wKXJldHVyblt0XTtpZigocj1lPHQpJiYoaT10LHQ9ZSxlPWkpLDA9PT0obz1TKHQsZSxuKSl8fCFpc0Zpbml0ZShvKSlyZXR1cm5bXTtpZihvPjApZm9yKHQ9TWF0aC5jZWlsKHQvbyksZT1NYXRoLmZsb29yKGUvbyksYT1uZXcgQXJyYXkoaT1NYXRoLmNlaWwoZS10KzEpKTsrK3M8aTspYVtzXT0odCtzKSpvO2Vsc2UgZm9yKHQ9TWF0aC5mbG9vcih0Km8pLGU9TWF0aC5jZWlsKGUqbyksYT1uZXcgQXJyYXkoaT1NYXRoLmNlaWwodC1lKzEpKTsrK3M8aTspYVtzXT0odC1zKS9vO3JldHVybiByJiZhLnJldmVyc2UoKSxhfTtmdW5jdGlvbiBTKHQsZSxuKXt2YXIgcj0oZS10KS9NYXRoLm1heCgwLG4pLGk9TWF0aC5mbG9vcihNYXRoLmxvZyhyKS9NYXRoLkxOMTApLGE9ci9NYXRoLnBvdygxMCxpKTtyZXR1cm4gaT49MD8oYT49dz8xMDphPj1FPzU6YT49VD8yOjEpKk1hdGgucG93KDEwLGkpOi1NYXRoLnBvdygxMCwtaSkvKGE+PXc/MTA6YT49RT81OmE+PVQ/MjoxKX1mdW5jdGlvbiBBKHQsZSxuKXt2YXIgcj1NYXRoLmFicyhlLXQpL01hdGgubWF4KDAsbiksaT1NYXRoLnBvdygxMCxNYXRoLmZsb29yKE1hdGgubG9nKHIpL01hdGguTE4xMCkpLGE9ci9pO3JldHVybiBhPj13P2kqPTEwOmE+PUU/aSo9NTphPj1UJiYoaSo9MiksZTx0Py1pOml9dmFyIE09ZnVuY3Rpb24odCl7cmV0dXJuIE1hdGguY2VpbChNYXRoLmxvZyh0Lmxlbmd0aCkvTWF0aC5MTjIpKzF9LE89ZnVuY3Rpb24oKXt2YXIgdD1fLGU9eSxuPU07ZnVuY3Rpb24gcihyKXt2YXIgaSxhLG89ci5sZW5ndGgscz1uZXcgQXJyYXkobyk7Zm9yKGk9MDtpPG87KytpKXNbaV09dChyW2ldLGkscik7dmFyIHU9ZShzKSxsPXVbMF0saD11WzFdLGY9bihzLGwsaCk7QXJyYXkuaXNBcnJheShmKXx8KGY9QShsLGgsZiksZj1rKE1hdGguY2VpbChsL2YpKmYsaCxmKSk7Zm9yKHZhciBkPWYubGVuZ3RoO2ZbMF08PWw7KWYuc2hpZnQoKSwtLWQ7Zm9yKDtmW2QtMV0+aDspZi5wb3AoKSwtLWQ7dmFyIHAsZz1uZXcgQXJyYXkoZCsxKTtmb3IoaT0wO2k8PWQ7KytpKShwPWdbaV09W10pLngwPWk+MD9mW2ktMV06bCxwLngxPWk8ZD9mW2ldOmg7Zm9yKGk9MDtpPG87KytpKWw8PShhPXNbaV0pJiZhPD1oJiZnW2MoZixhLDAsZCldLnB1c2gocltpXSk7cmV0dXJuIGd9cmV0dXJuIHIudmFsdWU9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9ImZ1bmN0aW9uIj09dHlwZW9mIGU/ZTp4KGUpLHIpOnR9LHIuZG9tYWluPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6eChbdFswXSx0WzFdXSkscik6ZX0sci50aHJlc2hvbGRzPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6QXJyYXkuaXNBcnJheSh0KT94KG0uY2FsbCh0KSk6eCh0KSxyKTpufSxyfSxEPWZ1bmN0aW9uKHQsZSxuKXtpZihudWxsPT1uJiYobj1kKSxyPXQubGVuZ3RoKXtpZigoZT0rZSk8PTB8fHI8MilyZXR1cm4rbih0WzBdLDAsdCk7aWYoZT49MSlyZXR1cm4rbih0W3ItMV0sci0xLHQpO3ZhciByLGk9KHItMSkqZSxhPU1hdGguZmxvb3IoaSksbz0rbih0W2FdLGEsdCk7cmV0dXJuIG8rKCtuKHRbYSsxXSxhKzEsdCktbykqKGktYSl9fSxOPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gdD1iLmNhbGwodCxkKS5zb3J0KHIpLE1hdGguY2VpbCgobi1lKS8oMiooRCh0LC43NSktRCh0LC4yNSkpKk1hdGgucG93KHQubGVuZ3RoLC0xLzMpKSl9LEI9ZnVuY3Rpb24odCxlLG4pe3JldHVybiBNYXRoLmNlaWwoKG4tZSkvKDMuNSpnKHQpKk1hdGgucG93KHQubGVuZ3RoLC0xLzMpKSl9LEw9ZnVuY3Rpb24odCxlKXt2YXIgbixyLGk9dC5sZW5ndGgsYT0tMTtpZihudWxsPT1lKXtmb3IoOysrYTxpOylpZihudWxsIT0obj10W2FdKSYmbj49bilmb3Iocj1uOysrYTxpOyludWxsIT0obj10W2FdKSYmbj5yJiYocj1uKX1lbHNlIGZvcig7KythPGk7KWlmKG51bGwhPShuPWUodFthXSxhLHQpKSYmbj49bilmb3Iocj1uOysrYTxpOyludWxsIT0obj1lKHRbYV0sYSx0KSkmJm4+ciYmKHI9bik7cmV0dXJuIHJ9LEY9ZnVuY3Rpb24odCxlKXt2YXIgbixyPXQubGVuZ3RoLGk9cixhPS0xLG89MDtpZihudWxsPT1lKWZvcig7KythPHI7KWlzTmFOKG49ZCh0W2FdKSk/LS1pOm8rPW47ZWxzZSBmb3IoOysrYTxyOylpc05hTihuPWQoZSh0W2FdLGEsdCkpKT8tLWk6bys9bjtpZihpKXJldHVybiBvL2l9LFA9ZnVuY3Rpb24odCxlKXt2YXIgbixpPXQubGVuZ3RoLGE9LTEsbz1bXTtpZihudWxsPT1lKWZvcig7KythPGk7KWlzTmFOKG49ZCh0W2FdKSl8fG8ucHVzaChuKTtlbHNlIGZvcig7KythPGk7KWlzTmFOKG49ZChlKHRbYV0sYSx0KSkpfHxvLnB1c2gobik7cmV0dXJuIEQoby5zb3J0KHIpLC41KX0sST1mdW5jdGlvbih0KXtmb3IodmFyIGUsbixyLGk9dC5sZW5ndGgsYT0tMSxvPTA7KythPGk7KW8rPXRbYV0ubGVuZ3RoO2ZvcihuPW5ldyBBcnJheShvKTstLWk+PTA7KWZvcihlPShyPXRbaV0pLmxlbmd0aDstLWU+PTA7KW5bLS1vXT1yW2VdO3JldHVybiBufSxqPWZ1bmN0aW9uKHQsZSl7dmFyIG4scixpPXQubGVuZ3RoLGE9LTE7aWYobnVsbD09ZSl7Zm9yKDsrK2E8aTspaWYobnVsbCE9KG49dFthXSkmJm4+PW4pZm9yKHI9bjsrK2E8aTspbnVsbCE9KG49dFthXSkmJnI+biYmKHI9bil9ZWxzZSBmb3IoOysrYTxpOylpZihudWxsIT0obj1lKHRbYV0sYSx0KSkmJm4+PW4pZm9yKHI9bjsrK2E8aTspbnVsbCE9KG49ZSh0W2FdLGEsdCkpJiZyPm4mJihyPW4pO3JldHVybiByfSxSPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciBuPWUubGVuZ3RoLHI9bmV3IEFycmF5KG4pO24tLTspcltuXT10W2Vbbl1dO3JldHVybiByfSxZPWZ1bmN0aW9uKHQsZSl7aWYobj10Lmxlbmd0aCl7dmFyIG4saSxhPTAsbz0wLHM9dFtvXTtmb3IobnVsbD09ZSYmKGU9cik7KythPG47KShlKGk9dFthXSxzKTwwfHwwIT09ZShzLHMpKSYmKHM9aSxvPWEpO3JldHVybiAwPT09ZShzLHMpP286dm9pZCAwfX0sej1mdW5jdGlvbih0LGUsbil7Zm9yKHZhciByLGksYT0obnVsbD09bj90Lmxlbmd0aDpuKS0oZT1udWxsPT1lPzA6K2UpO2E7KWk9TWF0aC5yYW5kb20oKSphLS18MCxyPXRbYStlXSx0W2ErZV09dFtpK2VdLHRbaStlXT1yO3JldHVybiB0fSxVPWZ1bmN0aW9uKHQsZSl7dmFyIG4scj10Lmxlbmd0aCxpPS0xLGE9MDtpZihudWxsPT1lKWZvcig7KytpPHI7KShuPSt0W2ldKSYmKGErPW4pO2Vsc2UgZm9yKDsrK2k8cjspKG49K2UodFtpXSxpLHQpKSYmKGErPW4pO3JldHVybiBhfSwkPWZ1bmN0aW9uKHQpe2lmKCEoaT10Lmxlbmd0aCkpcmV0dXJuW107Zm9yKHZhciBlPS0xLG49aih0LFcpLHI9bmV3IEFycmF5KG4pOysrZTxuOylmb3IodmFyIGksYT0tMSxvPXJbZV09bmV3IEFycmF5KGkpOysrYTxpOylvW2FdPXRbYV1bZV07cmV0dXJuIHJ9O2Z1bmN0aW9uIFcodCl7cmV0dXJuIHQubGVuZ3RofXZhciBWPWZ1bmN0aW9uKCl7cmV0dXJuICQoYXJndW1lbnRzKX0sSD1BcnJheS5wcm90b3R5cGUuc2xpY2UsRz1mdW5jdGlvbih0KXtyZXR1cm4gdH07ZnVuY3Rpb24gcSh0KXtyZXR1cm4idHJhbnNsYXRlKCIrKHQrLjUpKyIsMCkifWZ1bmN0aW9uIFgodCl7cmV0dXJuInRyYW5zbGF0ZSgwLCIrKHQrLjUpKyIpIn1mdW5jdGlvbiBaKHQpe3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4rdChlKX19ZnVuY3Rpb24gSih0KXt2YXIgZT1NYXRoLm1heCgwLHQuYmFuZHdpZHRoKCktMSkvMjtyZXR1cm4gdC5yb3VuZCgpJiYoZT1NYXRoLnJvdW5kKGUpKSxmdW5jdGlvbihuKXtyZXR1cm4rdChuKStlfX1mdW5jdGlvbiBRKCl7cmV0dXJuIXRoaXMuX19heGlzfWZ1bmN0aW9uIEsodCxlKXt2YXIgbj1bXSxyPW51bGwsaT1udWxsLGE9NixvPTYscz0zLGM9MT09PXR8fDQ9PT10Py0xOjEsdT00PT09dHx8Mj09PXQ/IngiOiJ5IixsPTE9PT10fHwzPT09dD9xOlg7ZnVuY3Rpb24gaChoKXt2YXIgZj1udWxsPT1yP2UudGlja3M/ZS50aWNrcy5hcHBseShlLG4pOmUuZG9tYWluKCk6cixkPW51bGw9PWk/ZS50aWNrRm9ybWF0P2UudGlja0Zvcm1hdC5hcHBseShlLG4pOkc6aSxwPU1hdGgubWF4KGEsMCkrcyxnPWUucmFuZ2UoKSx5PStnWzBdKy41LHY9K2dbZy5sZW5ndGgtMV0rLjUsbT0oZS5iYW5kd2lkdGg/SjpaKShlLmNvcHkoKSksYj1oLnNlbGVjdGlvbj9oLnNlbGVjdGlvbigpOmgseD1iLnNlbGVjdEFsbCgiLmRvbWFpbiIpLmRhdGEoW251bGxdKSxfPWIuc2VsZWN0QWxsKCIudGljayIpLmRhdGEoZixlKS5vcmRlcigpLGs9Xy5leGl0KCksdz1fLmVudGVyKCkuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJ0aWNrIiksRT1fLnNlbGVjdCgibGluZSIpLFQ9Xy5zZWxlY3QoInRleHQiKTt4PXgubWVyZ2UoeC5lbnRlcigpLmluc2VydCgicGF0aCIsIi50aWNrIikuYXR0cigiY2xhc3MiLCJkb21haW4iKS5hdHRyKCJzdHJva2UiLCJjdXJyZW50Q29sb3IiKSksXz1fLm1lcmdlKHcpLEU9RS5tZXJnZSh3LmFwcGVuZCgibGluZSIpLmF0dHIoInN0cm9rZSIsImN1cnJlbnRDb2xvciIpLmF0dHIodSsiMiIsYyphKSksVD1ULm1lcmdlKHcuYXBwZW5kKCJ0ZXh0IikuYXR0cigiZmlsbCIsImN1cnJlbnRDb2xvciIpLmF0dHIodSxjKnApLmF0dHIoImR5IiwxPT09dD8iMGVtIjozPT09dD8iMC43MWVtIjoiMC4zMmVtIikpLGghPT1iJiYoeD14LnRyYW5zaXRpb24oaCksXz1fLnRyYW5zaXRpb24oaCksRT1FLnRyYW5zaXRpb24oaCksVD1ULnRyYW5zaXRpb24oaCksaz1rLnRyYW5zaXRpb24oaCkuYXR0cigib3BhY2l0eSIsMWUtNikuYXR0cigidHJhbnNmb3JtIiwoZnVuY3Rpb24odCl7cmV0dXJuIGlzRmluaXRlKHQ9bSh0KSk/bCh0KTp0aGlzLmdldEF0dHJpYnV0ZSgidHJhbnNmb3JtIil9KSksdy5hdHRyKCJvcGFjaXR5IiwxZS02KS5hdHRyKCJ0cmFuc2Zvcm0iLChmdW5jdGlvbih0KXt2YXIgZT10aGlzLnBhcmVudE5vZGUuX19heGlzO3JldHVybiBsKGUmJmlzRmluaXRlKGU9ZSh0KSk/ZTptKHQpKX0pKSksay5yZW1vdmUoKSx4LmF0dHIoImQiLDQ9PT10fHwyPT10P28/Ik0iK2MqbysiLCIreSsiSDAuNVYiK3YrIkgiK2MqbzoiTTAuNSwiK3krIlYiK3Y6bz8iTSIreSsiLCIrYypvKyJWMC41SCIrdisiViIrYypvOiJNIit5KyIsMC41SCIrdiksXy5hdHRyKCJvcGFjaXR5IiwxKS5hdHRyKCJ0cmFuc2Zvcm0iLChmdW5jdGlvbih0KXtyZXR1cm4gbChtKHQpKX0pKSxFLmF0dHIodSsiMiIsYyphKSxULmF0dHIodSxjKnApLnRleHQoZCksYi5maWx0ZXIoUSkuYXR0cigiZmlsbCIsIm5vbmUiKS5hdHRyKCJmb250LXNpemUiLDEwKS5hdHRyKCJmb250LWZhbWlseSIsInNhbnMtc2VyaWYiKS5hdHRyKCJ0ZXh0LWFuY2hvciIsMj09PXQ/InN0YXJ0Ijo0PT09dD8iZW5kIjoibWlkZGxlIiksYi5lYWNoKChmdW5jdGlvbigpe3RoaXMuX19heGlzPW19KSl9cmV0dXJuIGguc2NhbGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9dCxoKTplfSxoLnRpY2tzPWZ1bmN0aW9uKCl7cmV0dXJuIG49SC5jYWxsKGFyZ3VtZW50cyksaH0saC50aWNrQXJndW1lbnRzPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPW51bGw9PXQ/W106SC5jYWxsKHQpLGgpOm4uc2xpY2UoKX0saC50aWNrVmFsdWVzPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPW51bGw9PXQ/bnVsbDpILmNhbGwodCksaCk6ciYmci5zbGljZSgpfSxoLnRpY2tGb3JtYXQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9dCxoKTppfSxoLnRpY2tTaXplPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPW89K3QsaCk6YX0saC50aWNrU2l6ZUlubmVyPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPSt0LGgpOmF9LGgudGlja1NpemVPdXRlcj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz0rdCxoKTpvfSxoLnRpY2tQYWRkaW5nPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhzPSt0LGgpOnN9LGh9ZnVuY3Rpb24gdHQodCl7cmV0dXJuIEsoMSx0KX1mdW5jdGlvbiBldCh0KXtyZXR1cm4gSygyLHQpfWZ1bmN0aW9uIG50KHQpe3JldHVybiBLKDMsdCl9ZnVuY3Rpb24gcnQodCl7cmV0dXJuIEsoNCx0KX12YXIgaXQ9e3ZhbHVlOmZ1bmN0aW9uKCl7fX07ZnVuY3Rpb24gYXQoKXtmb3IodmFyIHQsZT0wLG49YXJndW1lbnRzLmxlbmd0aCxyPXt9O2U8bjsrK2Upe2lmKCEodD1hcmd1bWVudHNbZV0rIiIpfHx0IGluIHJ8fC9bXHMuXS8udGVzdCh0KSl0aHJvdyBuZXcgRXJyb3IoImlsbGVnYWwgdHlwZTogIit0KTtyW3RdPVtdfXJldHVybiBuZXcgb3Qocil9ZnVuY3Rpb24gb3QodCl7dGhpcy5fPXR9ZnVuY3Rpb24gc3QodCxlKXtyZXR1cm4gdC50cmltKCkuc3BsaXQoL158XHMrLykubWFwKChmdW5jdGlvbih0KXt2YXIgbj0iIixyPXQuaW5kZXhPZigiLiIpO2lmKHI+PTAmJihuPXQuc2xpY2UocisxKSx0PXQuc2xpY2UoMCxyKSksdCYmIWUuaGFzT3duUHJvcGVydHkodCkpdGhyb3cgbmV3IEVycm9yKCJ1bmtub3duIHR5cGU6ICIrdCk7cmV0dXJue3R5cGU6dCxuYW1lOm59fSkpfWZ1bmN0aW9uIGN0KHQsZSl7Zm9yKHZhciBuLHI9MCxpPXQubGVuZ3RoO3I8aTsrK3IpaWYoKG49dFtyXSkubmFtZT09PWUpcmV0dXJuIG4udmFsdWV9ZnVuY3Rpb24gdXQodCxlLG4pe2Zvcih2YXIgcj0wLGk9dC5sZW5ndGg7cjxpOysrcilpZih0W3JdLm5hbWU9PT1lKXt0W3JdPWl0LHQ9dC5zbGljZSgwLHIpLmNvbmNhdCh0LnNsaWNlKHIrMSkpO2JyZWFrfXJldHVybiBudWxsIT1uJiZ0LnB1c2goe25hbWU6ZSx2YWx1ZTpufSksdH1vdC5wcm90b3R5cGU9YXQucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpvdCxvbjpmdW5jdGlvbih0LGUpe3ZhciBuLHI9dGhpcy5fLGk9c3QodCsiIixyKSxhPS0xLG89aS5sZW5ndGg7aWYoIShhcmd1bWVudHMubGVuZ3RoPDIpKXtpZihudWxsIT1lJiYiZnVuY3Rpb24iIT10eXBlb2YgZSl0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgY2FsbGJhY2s6ICIrZSk7Zm9yKDsrK2E8bzspaWYobj0odD1pW2FdKS50eXBlKXJbbl09dXQocltuXSx0Lm5hbWUsZSk7ZWxzZSBpZihudWxsPT1lKWZvcihuIGluIHIpcltuXT11dChyW25dLHQubmFtZSxudWxsKTtyZXR1cm4gdGhpc31mb3IoOysrYTxvOylpZigobj0odD1pW2FdKS50eXBlKSYmKG49Y3QocltuXSx0Lm5hbWUpKSlyZXR1cm4gbn0sY29weTpmdW5jdGlvbigpe3ZhciB0PXt9LGU9dGhpcy5fO2Zvcih2YXIgbiBpbiBlKXRbbl09ZVtuXS5zbGljZSgpO3JldHVybiBuZXcgb3QodCl9LGNhbGw6ZnVuY3Rpb24odCxlKXtpZigobj1hcmd1bWVudHMubGVuZ3RoLTIpPjApZm9yKHZhciBuLHIsaT1uZXcgQXJyYXkobiksYT0wO2E8bjsrK2EpaVthXT1hcmd1bWVudHNbYSsyXTtpZighdGhpcy5fLmhhc093blByb3BlcnR5KHQpKXRocm93IG5ldyBFcnJvcigidW5rbm93biB0eXBlOiAiK3QpO2ZvcihhPTAsbj0ocj10aGlzLl9bdF0pLmxlbmd0aDthPG47KythKXJbYV0udmFsdWUuYXBwbHkoZSxpKX0sYXBwbHk6ZnVuY3Rpb24odCxlLG4pe2lmKCF0aGlzLl8uaGFzT3duUHJvcGVydHkodCkpdGhyb3cgbmV3IEVycm9yKCJ1bmtub3duIHR5cGU6ICIrdCk7Zm9yKHZhciByPXRoaXMuX1t0XSxpPTAsYT1yLmxlbmd0aDtpPGE7KytpKXJbaV0udmFsdWUuYXBwbHkoZSxuKX19O3ZhciBsdD1hdDtmdW5jdGlvbiBodCgpe312YXIgZnQ9ZnVuY3Rpb24odCl7cmV0dXJuIG51bGw9PXQ/aHQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5xdWVyeVNlbGVjdG9yKHQpfX07ZnVuY3Rpb24gZHQoKXtyZXR1cm5bXX12YXIgcHQ9ZnVuY3Rpb24odCl7cmV0dXJuIG51bGw9PXQ/ZHQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5xdWVyeVNlbGVjdG9yQWxsKHQpfX0sZ3Q9ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubWF0Y2hlcyh0KX19LHl0PWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgQXJyYXkodC5sZW5ndGgpfTtmdW5jdGlvbiB2dCh0LGUpe3RoaXMub3duZXJEb2N1bWVudD10Lm93bmVyRG9jdW1lbnQsdGhpcy5uYW1lc3BhY2VVUkk9dC5uYW1lc3BhY2VVUkksdGhpcy5fbmV4dD1udWxsLHRoaXMuX3BhcmVudD10LHRoaXMuX19kYXRhX189ZX12dC5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOnZ0LGFwcGVuZENoaWxkOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9wYXJlbnQuaW5zZXJ0QmVmb3JlKHQsdGhpcy5fbmV4dCl9LGluc2VydEJlZm9yZTpmdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLl9wYXJlbnQuaW5zZXJ0QmVmb3JlKHQsZSl9LHF1ZXJ5U2VsZWN0b3I6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX3BhcmVudC5xdWVyeVNlbGVjdG9yKHQpfSxxdWVyeVNlbGVjdG9yQWxsOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9wYXJlbnQucXVlcnlTZWxlY3RvckFsbCh0KX19O2Z1bmN0aW9uIG10KHQsZSxuLHIsaSxhKXtmb3IodmFyIG8scz0wLGM9ZS5sZW5ndGgsdT1hLmxlbmd0aDtzPHU7KytzKShvPWVbc10pPyhvLl9fZGF0YV9fPWFbc10scltzXT1vKTpuW3NdPW5ldyB2dCh0LGFbc10pO2Zvcig7czxjOysrcykobz1lW3NdKSYmKGlbc109byl9ZnVuY3Rpb24gYnQodCxlLG4scixpLGEsbyl7dmFyIHMsYyx1LGw9e30saD1lLmxlbmd0aCxmPWEubGVuZ3RoLGQ9bmV3IEFycmF5KGgpO2ZvcihzPTA7czxoOysrcykoYz1lW3NdKSYmKGRbc109dT0iJCIrby5jYWxsKGMsYy5fX2RhdGFfXyxzLGUpLHUgaW4gbD9pW3NdPWM6bFt1XT1jKTtmb3Iocz0wO3M8ZjsrK3MpKGM9bFt1PSIkIitvLmNhbGwodCxhW3NdLHMsYSldKT8ocltzXT1jLGMuX19kYXRhX189YVtzXSxsW3VdPW51bGwpOm5bc109bmV3IHZ0KHQsYVtzXSk7Zm9yKHM9MDtzPGg7KytzKShjPWVbc10pJiZsW2Rbc11dPT09YyYmKGlbc109Yyl9ZnVuY3Rpb24geHQodCxlKXtyZXR1cm4gdDxlPy0xOnQ+ZT8xOnQ+PWU/MDpOYU59dmFyIF90PSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIixrdD17c3ZnOiJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIseGh0bWw6X3QseGxpbms6Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiLHhtbDoiaHR0cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlIix4bWxuczoiaHR0cDovL3d3dy53My5vcmcvMjAwMC94bWxucy8ifSx3dD1mdW5jdGlvbih0KXt2YXIgZT10Kz0iIixuPWUuaW5kZXhPZigiOiIpO3JldHVybiBuPj0wJiYieG1sbnMiIT09KGU9dC5zbGljZSgwLG4pKSYmKHQ9dC5zbGljZShuKzEpKSxrdC5oYXNPd25Qcm9wZXJ0eShlKT97c3BhY2U6a3RbZV0sbG9jYWw6dH06dH07ZnVuY3Rpb24gRXQodCl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5yZW1vdmVBdHRyaWJ1dGUodCl9fWZ1bmN0aW9uIFR0KHQpe3JldHVybiBmdW5jdGlvbigpe3RoaXMucmVtb3ZlQXR0cmlidXRlTlModC5zcGFjZSx0LmxvY2FsKX19ZnVuY3Rpb24gQ3QodCxlKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnNldEF0dHJpYnV0ZSh0LGUpfX1mdW5jdGlvbiBTdCh0LGUpe3JldHVybiBmdW5jdGlvbigpe3RoaXMuc2V0QXR0cmlidXRlTlModC5zcGFjZSx0LmxvY2FsLGUpfX1mdW5jdGlvbiBBdCh0LGUpe3JldHVybiBmdW5jdGlvbigpe3ZhciBuPWUuYXBwbHkodGhpcyxhcmd1bWVudHMpO251bGw9PW4/dGhpcy5yZW1vdmVBdHRyaWJ1dGUodCk6dGhpcy5zZXRBdHRyaWJ1dGUodCxuKX19ZnVuY3Rpb24gTXQodCxlKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbj1lLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtudWxsPT1uP3RoaXMucmVtb3ZlQXR0cmlidXRlTlModC5zcGFjZSx0LmxvY2FsKTp0aGlzLnNldEF0dHJpYnV0ZU5TKHQuc3BhY2UsdC5sb2NhbCxuKX19dmFyIE90PWZ1bmN0aW9uKHQpe3JldHVybiB0Lm93bmVyRG9jdW1lbnQmJnQub3duZXJEb2N1bWVudC5kZWZhdWx0Vmlld3x8dC5kb2N1bWVudCYmdHx8dC5kZWZhdWx0Vmlld307ZnVuY3Rpb24gRHQodCl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5zdHlsZS5yZW1vdmVQcm9wZXJ0eSh0KX19ZnVuY3Rpb24gTnQodCxlLG4pe3JldHVybiBmdW5jdGlvbigpe3RoaXMuc3R5bGUuc2V0UHJvcGVydHkodCxlLG4pfX1mdW5jdGlvbiBCdCh0LGUsbil7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHI9ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7bnVsbD09cj90aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KHQpOnRoaXMuc3R5bGUuc2V0UHJvcGVydHkodCxyLG4pfX1mdW5jdGlvbiBMdCh0LGUpe3JldHVybiB0LnN0eWxlLmdldFByb3BlcnR5VmFsdWUoZSl8fE90KHQpLmdldENvbXB1dGVkU3R5bGUodCxudWxsKS5nZXRQcm9wZXJ0eVZhbHVlKGUpfWZ1bmN0aW9uIEZ0KHQpe3JldHVybiBmdW5jdGlvbigpe2RlbGV0ZSB0aGlzW3RdfX1mdW5jdGlvbiBQdCh0LGUpe3JldHVybiBmdW5jdGlvbigpe3RoaXNbdF09ZX19ZnVuY3Rpb24gSXQodCxlKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbj1lLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtudWxsPT1uP2RlbGV0ZSB0aGlzW3RdOnRoaXNbdF09bn19ZnVuY3Rpb24ganQodCl7cmV0dXJuIHQudHJpbSgpLnNwbGl0KC9efFxzKy8pfWZ1bmN0aW9uIFJ0KHQpe3JldHVybiB0LmNsYXNzTGlzdHx8bmV3IFl0KHQpfWZ1bmN0aW9uIFl0KHQpe3RoaXMuX25vZGU9dCx0aGlzLl9uYW1lcz1qdCh0LmdldEF0dHJpYnV0ZSgiY2xhc3MiKXx8IiIpfWZ1bmN0aW9uIHp0KHQsZSl7Zm9yKHZhciBuPVJ0KHQpLHI9LTEsaT1lLmxlbmd0aDsrK3I8aTspbi5hZGQoZVtyXSl9ZnVuY3Rpb24gVXQodCxlKXtmb3IodmFyIG49UnQodCkscj0tMSxpPWUubGVuZ3RoOysrcjxpOyluLnJlbW92ZShlW3JdKX1mdW5jdGlvbiAkdCh0KXtyZXR1cm4gZnVuY3Rpb24oKXt6dCh0aGlzLHQpfX1mdW5jdGlvbiBXdCh0KXtyZXR1cm4gZnVuY3Rpb24oKXtVdCh0aGlzLHQpfX1mdW5jdGlvbiBWdCh0LGUpe3JldHVybiBmdW5jdGlvbigpeyhlLmFwcGx5KHRoaXMsYXJndW1lbnRzKT96dDpVdCkodGhpcyx0KX19WXQucHJvdG90eXBlPXthZGQ6ZnVuY3Rpb24odCl7dGhpcy5fbmFtZXMuaW5kZXhPZih0KTwwJiYodGhpcy5fbmFtZXMucHVzaCh0KSx0aGlzLl9ub2RlLnNldEF0dHJpYnV0ZSgiY2xhc3MiLHRoaXMuX25hbWVzLmpvaW4oIiAiKSkpfSxyZW1vdmU6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fbmFtZXMuaW5kZXhPZih0KTtlPj0wJiYodGhpcy5fbmFtZXMuc3BsaWNlKGUsMSksdGhpcy5fbm9kZS5zZXRBdHRyaWJ1dGUoImNsYXNzIix0aGlzLl9uYW1lcy5qb2luKCIgIikpKX0sY29udGFpbnM6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX25hbWVzLmluZGV4T2YodCk+PTB9fTtmdW5jdGlvbiBIdCgpe3RoaXMudGV4dENvbnRlbnQ9IiJ9ZnVuY3Rpb24gR3QodCl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy50ZXh0Q29udGVudD10fX1mdW5jdGlvbiBxdCh0KXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgZT10LmFwcGx5KHRoaXMsYXJndW1lbnRzKTt0aGlzLnRleHRDb250ZW50PW51bGw9PWU/IiI6ZX19ZnVuY3Rpb24gWHQoKXt0aGlzLmlubmVySFRNTD0iIn1mdW5jdGlvbiBadCh0KXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLmlubmVySFRNTD10fX1mdW5jdGlvbiBKdCh0KXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgZT10LmFwcGx5KHRoaXMsYXJndW1lbnRzKTt0aGlzLmlubmVySFRNTD1udWxsPT1lPyIiOmV9fWZ1bmN0aW9uIFF0KCl7dGhpcy5uZXh0U2libGluZyYmdGhpcy5wYXJlbnROb2RlLmFwcGVuZENoaWxkKHRoaXMpfWZ1bmN0aW9uIEt0KCl7dGhpcy5wcmV2aW91c1NpYmxpbmcmJnRoaXMucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUodGhpcyx0aGlzLnBhcmVudE5vZGUuZmlyc3RDaGlsZCl9ZnVuY3Rpb24gdGUodCl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5vd25lckRvY3VtZW50LG49dGhpcy5uYW1lc3BhY2VVUkk7cmV0dXJuIG49PT1fdCYmZS5kb2N1bWVudEVsZW1lbnQubmFtZXNwYWNlVVJJPT09X3Q/ZS5jcmVhdGVFbGVtZW50KHQpOmUuY3JlYXRlRWxlbWVudE5TKG4sdCl9fWZ1bmN0aW9uIGVlKHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0aGlzLm93bmVyRG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKHQuc3BhY2UsdC5sb2NhbCl9fXZhciBuZT1mdW5jdGlvbih0KXt2YXIgZT13dCh0KTtyZXR1cm4oZS5sb2NhbD9lZTp0ZSkoZSl9O2Z1bmN0aW9uIHJlKCl7cmV0dXJuIG51bGx9ZnVuY3Rpb24gaWUoKXt2YXIgdD10aGlzLnBhcmVudE5vZGU7dCYmdC5yZW1vdmVDaGlsZCh0aGlzKX1mdW5jdGlvbiBhZSgpe3ZhciB0PXRoaXMuY2xvbmVOb2RlKCExKSxlPXRoaXMucGFyZW50Tm9kZTtyZXR1cm4gZT9lLmluc2VydEJlZm9yZSh0LHRoaXMubmV4dFNpYmxpbmcpOnR9ZnVuY3Rpb24gb2UoKXt2YXIgdD10aGlzLmNsb25lTm9kZSghMCksZT10aGlzLnBhcmVudE5vZGU7cmV0dXJuIGU/ZS5pbnNlcnRCZWZvcmUodCx0aGlzLm5leHRTaWJsaW5nKTp0fXZhciBzZT17fSxjZT1udWxsOyJ1bmRlZmluZWQiIT10eXBlb2YgZG9jdW1lbnQmJigib25tb3VzZWVudGVyImluIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudHx8KHNlPXttb3VzZWVudGVyOiJtb3VzZW92ZXIiLG1vdXNlbGVhdmU6Im1vdXNlb3V0In0pKTtmdW5jdGlvbiB1ZSh0LGUsbil7cmV0dXJuIHQ9bGUodCxlLG4pLGZ1bmN0aW9uKGUpe3ZhciBuPWUucmVsYXRlZFRhcmdldDtuJiYobj09PXRoaXN8fDgmbi5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbih0aGlzKSl8fHQuY2FsbCh0aGlzLGUpfX1mdW5jdGlvbiBsZSh0LGUsbil7cmV0dXJuIGZ1bmN0aW9uKHIpe3ZhciBpPWNlO2NlPXI7dHJ5e3QuY2FsbCh0aGlzLHRoaXMuX19kYXRhX18sZSxuKX1maW5hbGx5e2NlPWl9fX1mdW5jdGlvbiBoZSh0KXtyZXR1cm4gdC50cmltKCkuc3BsaXQoL158XHMrLykubWFwKChmdW5jdGlvbih0KXt2YXIgZT0iIixuPXQuaW5kZXhPZigiLiIpO3JldHVybiBuPj0wJiYoZT10LnNsaWNlKG4rMSksdD10LnNsaWNlKDAsbikpLHt0eXBlOnQsbmFtZTplfX0pKX1mdW5jdGlvbiBmZSh0KXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgZT10aGlzLl9fb247aWYoZSl7Zm9yKHZhciBuLHI9MCxpPS0xLGE9ZS5sZW5ndGg7cjxhOysrciluPWVbcl0sdC50eXBlJiZuLnR5cGUhPT10LnR5cGV8fG4ubmFtZSE9PXQubmFtZT9lWysraV09bjp0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIobi50eXBlLG4ubGlzdGVuZXIsbi5jYXB0dXJlKTsrK2k/ZS5sZW5ndGg9aTpkZWxldGUgdGhpcy5fX29ufX19ZnVuY3Rpb24gZGUodCxlLG4pe3ZhciByPXNlLmhhc093blByb3BlcnR5KHQudHlwZSk/dWU6bGU7cmV0dXJuIGZ1bmN0aW9uKGksYSxvKXt2YXIgcyxjPXRoaXMuX19vbix1PXIoZSxhLG8pO2lmKGMpZm9yKHZhciBsPTAsaD1jLmxlbmd0aDtsPGg7KytsKWlmKChzPWNbbF0pLnR5cGU9PT10LnR5cGUmJnMubmFtZT09PXQubmFtZSlyZXR1cm4gdGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKHMudHlwZSxzLmxpc3RlbmVyLHMuY2FwdHVyZSksdGhpcy5hZGRFdmVudExpc3RlbmVyKHMudHlwZSxzLmxpc3RlbmVyPXUscy5jYXB0dXJlPW4pLHZvaWQocy52YWx1ZT1lKTt0aGlzLmFkZEV2ZW50TGlzdGVuZXIodC50eXBlLHUsbikscz17dHlwZTp0LnR5cGUsbmFtZTp0Lm5hbWUsdmFsdWU6ZSxsaXN0ZW5lcjp1LGNhcHR1cmU6bn0sYz9jLnB1c2gocyk6dGhpcy5fX29uPVtzXX19ZnVuY3Rpb24gcGUodCxlLG4scil7dmFyIGk9Y2U7dC5zb3VyY2VFdmVudD1jZSxjZT10O3RyeXtyZXR1cm4gZS5hcHBseShuLHIpfWZpbmFsbHl7Y2U9aX19ZnVuY3Rpb24gZ2UodCxlLG4pe3ZhciByPU90KHQpLGk9ci5DdXN0b21FdmVudDsiZnVuY3Rpb24iPT10eXBlb2YgaT9pPW5ldyBpKGUsbik6KGk9ci5kb2N1bWVudC5jcmVhdGVFdmVudCgiRXZlbnQiKSxuPyhpLmluaXRFdmVudChlLG4uYnViYmxlcyxuLmNhbmNlbGFibGUpLGkuZGV0YWlsPW4uZGV0YWlsKTppLmluaXRFdmVudChlLCExLCExKSksdC5kaXNwYXRjaEV2ZW50KGkpfWZ1bmN0aW9uIHllKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGdlKHRoaXMsdCxlKX19ZnVuY3Rpb24gdmUodCxlKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gZ2UodGhpcyx0LGUuYXBwbHkodGhpcyxhcmd1bWVudHMpKX19dmFyIG1lPVtudWxsXTtmdW5jdGlvbiBiZSh0LGUpe3RoaXMuX2dyb3Vwcz10LHRoaXMuX3BhcmVudHM9ZX1mdW5jdGlvbiB4ZSgpe3JldHVybiBuZXcgYmUoW1tkb2N1bWVudC5kb2N1bWVudEVsZW1lbnRdXSxtZSl9YmUucHJvdG90eXBlPXhlLnByb3RvdHlwZT17Y29uc3RydWN0b3I6YmUsc2VsZWN0OmZ1bmN0aW9uKHQpeyJmdW5jdGlvbiIhPXR5cGVvZiB0JiYodD1mdCh0KSk7Zm9yKHZhciBlPXRoaXMuX2dyb3VwcyxuPWUubGVuZ3RoLHI9bmV3IEFycmF5KG4pLGk9MDtpPG47KytpKWZvcih2YXIgYSxvLHM9ZVtpXSxjPXMubGVuZ3RoLHU9cltpXT1uZXcgQXJyYXkoYyksbD0wO2w8YzsrK2wpKGE9c1tsXSkmJihvPXQuY2FsbChhLGEuX19kYXRhX18sbCxzKSkmJigiX19kYXRhX18iaW4gYSYmKG8uX19kYXRhX189YS5fX2RhdGFfXyksdVtsXT1vKTtyZXR1cm4gbmV3IGJlKHIsdGhpcy5fcGFyZW50cyl9LHNlbGVjdEFsbDpmdW5jdGlvbih0KXsiZnVuY3Rpb24iIT10eXBlb2YgdCYmKHQ9cHQodCkpO2Zvcih2YXIgZT10aGlzLl9ncm91cHMsbj1lLmxlbmd0aCxyPVtdLGk9W10sYT0wO2E8bjsrK2EpZm9yKHZhciBvLHM9ZVthXSxjPXMubGVuZ3RoLHU9MDt1PGM7Kyt1KShvPXNbdV0pJiYoci5wdXNoKHQuY2FsbChvLG8uX19kYXRhX18sdSxzKSksaS5wdXNoKG8pKTtyZXR1cm4gbmV3IGJlKHIsaSl9LGZpbHRlcjpmdW5jdGlvbih0KXsiZnVuY3Rpb24iIT10eXBlb2YgdCYmKHQ9Z3QodCkpO2Zvcih2YXIgZT10aGlzLl9ncm91cHMsbj1lLmxlbmd0aCxyPW5ldyBBcnJheShuKSxpPTA7aTxuOysraSlmb3IodmFyIGEsbz1lW2ldLHM9by5sZW5ndGgsYz1yW2ldPVtdLHU9MDt1PHM7Kyt1KShhPW9bdV0pJiZ0LmNhbGwoYSxhLl9fZGF0YV9fLHUsbykmJmMucHVzaChhKTtyZXR1cm4gbmV3IGJlKHIsdGhpcy5fcGFyZW50cyl9LGRhdGE6ZnVuY3Rpb24odCxlKXtpZighdClyZXR1cm4gcD1uZXcgQXJyYXkodGhpcy5zaXplKCkpLGw9LTEsdGhpcy5lYWNoKChmdW5jdGlvbih0KXtwWysrbF09dH0pKSxwO3ZhciBuLHI9ZT9idDptdCxpPXRoaXMuX3BhcmVudHMsYT10aGlzLl9ncm91cHM7ImZ1bmN0aW9uIiE9dHlwZW9mIHQmJihuPXQsdD1mdW5jdGlvbigpe3JldHVybiBufSk7Zm9yKHZhciBvPWEubGVuZ3RoLHM9bmV3IEFycmF5KG8pLGM9bmV3IEFycmF5KG8pLHU9bmV3IEFycmF5KG8pLGw9MDtsPG87KytsKXt2YXIgaD1pW2xdLGY9YVtsXSxkPWYubGVuZ3RoLHA9dC5jYWxsKGgsaCYmaC5fX2RhdGFfXyxsLGkpLGc9cC5sZW5ndGgseT1jW2xdPW5ldyBBcnJheShnKSx2PXNbbF09bmV3IEFycmF5KGcpO3IoaCxmLHksdix1W2xdPW5ldyBBcnJheShkKSxwLGUpO2Zvcih2YXIgbSxiLHg9MCxfPTA7eDxnOysreClpZihtPXlbeF0pe2Zvcih4Pj1fJiYoXz14KzEpOyEoYj12W19dKSYmKytfPGc7KTttLl9uZXh0PWJ8fG51bGx9fXJldHVybihzPW5ldyBiZShzLGkpKS5fZW50ZXI9YyxzLl9leGl0PXUsc30sZW50ZXI6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGJlKHRoaXMuX2VudGVyfHx0aGlzLl9ncm91cHMubWFwKHl0KSx0aGlzLl9wYXJlbnRzKX0sZXhpdDpmdW5jdGlvbigpe3JldHVybiBuZXcgYmUodGhpcy5fZXhpdHx8dGhpcy5fZ3JvdXBzLm1hcCh5dCksdGhpcy5fcGFyZW50cyl9LGpvaW46ZnVuY3Rpb24odCxlLG4pe3ZhciByPXRoaXMuZW50ZXIoKSxpPXRoaXMsYT10aGlzLmV4aXQoKTtyZXR1cm4gcj0iZnVuY3Rpb24iPT10eXBlb2YgdD90KHIpOnIuYXBwZW5kKHQrIiIpLG51bGwhPWUmJihpPWUoaSkpLG51bGw9PW4/YS5yZW1vdmUoKTpuKGEpLHImJmk/ci5tZXJnZShpKS5vcmRlcigpOml9LG1lcmdlOmZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10aGlzLl9ncm91cHMsbj10Ll9ncm91cHMscj1lLmxlbmd0aCxpPW4ubGVuZ3RoLGE9TWF0aC5taW4ocixpKSxvPW5ldyBBcnJheShyKSxzPTA7czxhOysrcylmb3IodmFyIGMsdT1lW3NdLGw9bltzXSxoPXUubGVuZ3RoLGY9b1tzXT1uZXcgQXJyYXkoaCksZD0wO2Q8aDsrK2QpKGM9dVtkXXx8bFtkXSkmJihmW2RdPWMpO2Zvcig7czxyOysrcylvW3NdPWVbc107cmV0dXJuIG5ldyBiZShvLHRoaXMuX3BhcmVudHMpfSxvcmRlcjpmdW5jdGlvbigpe2Zvcih2YXIgdD10aGlzLl9ncm91cHMsZT0tMSxuPXQubGVuZ3RoOysrZTxuOylmb3IodmFyIHIsaT10W2VdLGE9aS5sZW5ndGgtMSxvPWlbYV07LS1hPj0wOykocj1pW2FdKSYmKG8mJjReci5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbihvKSYmby5wYXJlbnROb2RlLmluc2VydEJlZm9yZShyLG8pLG89cik7cmV0dXJuIHRoaXN9LHNvcnQ6ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLG4pe3JldHVybiBlJiZuP3QoZS5fX2RhdGFfXyxuLl9fZGF0YV9fKTohZS0hbn10fHwodD14dCk7Zm9yKHZhciBuPXRoaXMuX2dyb3VwcyxyPW4ubGVuZ3RoLGk9bmV3IEFycmF5KHIpLGE9MDthPHI7KythKXtmb3IodmFyIG8scz1uW2FdLGM9cy5sZW5ndGgsdT1pW2FdPW5ldyBBcnJheShjKSxsPTA7bDxjOysrbCkobz1zW2xdKSYmKHVbbF09byk7dS5zb3J0KGUpfXJldHVybiBuZXcgYmUoaSx0aGlzLl9wYXJlbnRzKS5vcmRlcigpfSxjYWxsOmZ1bmN0aW9uKCl7dmFyIHQ9YXJndW1lbnRzWzBdO3JldHVybiBhcmd1bWVudHNbMF09dGhpcyx0LmFwcGx5KG51bGwsYXJndW1lbnRzKSx0aGlzfSxub2RlczpmdW5jdGlvbigpe3ZhciB0PW5ldyBBcnJheSh0aGlzLnNpemUoKSksZT0tMTtyZXR1cm4gdGhpcy5lYWNoKChmdW5jdGlvbigpe3RbKytlXT10aGlzfSkpLHR9LG5vZGU6ZnVuY3Rpb24oKXtmb3IodmFyIHQ9dGhpcy5fZ3JvdXBzLGU9MCxuPXQubGVuZ3RoO2U8bjsrK2UpZm9yKHZhciByPXRbZV0saT0wLGE9ci5sZW5ndGg7aTxhOysraSl7dmFyIG89cltpXTtpZihvKXJldHVybiBvfXJldHVybiBudWxsfSxzaXplOmZ1bmN0aW9uKCl7dmFyIHQ9MDtyZXR1cm4gdGhpcy5lYWNoKChmdW5jdGlvbigpeysrdH0pKSx0fSxlbXB0eTpmdW5jdGlvbigpe3JldHVybiF0aGlzLm5vZGUoKX0sZWFjaDpmdW5jdGlvbih0KXtmb3IodmFyIGU9dGhpcy5fZ3JvdXBzLG49MCxyPWUubGVuZ3RoO248cjsrK24pZm9yKHZhciBpLGE9ZVtuXSxvPTAscz1hLmxlbmd0aDtvPHM7KytvKShpPWFbb10pJiZ0LmNhbGwoaSxpLl9fZGF0YV9fLG8sYSk7cmV0dXJuIHRoaXN9LGF0dHI6ZnVuY3Rpb24odCxlKXt2YXIgbj13dCh0KTtpZihhcmd1bWVudHMubGVuZ3RoPDIpe3ZhciByPXRoaXMubm9kZSgpO3JldHVybiBuLmxvY2FsP3IuZ2V0QXR0cmlidXRlTlMobi5zcGFjZSxuLmxvY2FsKTpyLmdldEF0dHJpYnV0ZShuKX1yZXR1cm4gdGhpcy5lYWNoKChudWxsPT1lP24ubG9jYWw/VHQ6RXQ6ImZ1bmN0aW9uIj09dHlwZW9mIGU/bi5sb2NhbD9NdDpBdDpuLmxvY2FsP1N0OkN0KShuLGUpKX0sc3R5bGU6ZnVuY3Rpb24odCxlLG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPjE/dGhpcy5lYWNoKChudWxsPT1lP0R0OiJmdW5jdGlvbiI9PXR5cGVvZiBlP0J0Ok50KSh0LGUsbnVsbD09bj8iIjpuKSk6THQodGhpcy5ub2RlKCksdCl9LHByb3BlcnR5OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg+MT90aGlzLmVhY2goKG51bGw9PWU/RnQ6ImZ1bmN0aW9uIj09dHlwZW9mIGU/SXQ6UHQpKHQsZSkpOnRoaXMubm9kZSgpW3RdfSxjbGFzc2VkOmZ1bmN0aW9uKHQsZSl7dmFyIG49anQodCsiIik7aWYoYXJndW1lbnRzLmxlbmd0aDwyKXtmb3IodmFyIHI9UnQodGhpcy5ub2RlKCkpLGk9LTEsYT1uLmxlbmd0aDsrK2k8YTspaWYoIXIuY29udGFpbnMobltpXSkpcmV0dXJuITE7cmV0dXJuITB9cmV0dXJuIHRoaXMuZWFjaCgoImZ1bmN0aW9uIj09dHlwZW9mIGU/VnQ6ZT8kdDpXdCkobixlKSl9LHRleHQ6ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5lYWNoKG51bGw9PXQ/SHQ6KCJmdW5jdGlvbiI9PXR5cGVvZiB0P3F0Okd0KSh0KSk6dGhpcy5ub2RlKCkudGV4dENvbnRlbnR9LGh0bWw6ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5lYWNoKG51bGw9PXQ/WHQ6KCJmdW5jdGlvbiI9PXR5cGVvZiB0P0p0Olp0KSh0KSk6dGhpcy5ub2RlKCkuaW5uZXJIVE1MfSxyYWlzZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmVhY2goUXQpfSxsb3dlcjpmdW5jdGlvbigpe3JldHVybiB0aGlzLmVhY2goS3QpfSxhcHBlbmQ6ZnVuY3Rpb24odCl7dmFyIGU9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpuZSh0KTtyZXR1cm4gdGhpcy5zZWxlY3QoKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYXBwZW5kQ2hpbGQoZS5hcHBseSh0aGlzLGFyZ3VtZW50cykpfSkpfSxpbnNlcnQ6ZnVuY3Rpb24odCxlKXt2YXIgbj0iZnVuY3Rpb24iPT10eXBlb2YgdD90Om5lKHQpLHI9bnVsbD09ZT9yZToiZnVuY3Rpb24iPT10eXBlb2YgZT9lOmZ0KGUpO3JldHVybiB0aGlzLnNlbGVjdCgoZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pbnNlcnRCZWZvcmUobi5hcHBseSh0aGlzLGFyZ3VtZW50cyksci5hcHBseSh0aGlzLGFyZ3VtZW50cyl8fG51bGwpfSkpfSxyZW1vdmU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lYWNoKGllKX0sY2xvbmU6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuc2VsZWN0KHQ/b2U6YWUpfSxkYXR1bTpmdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLnByb3BlcnR5KCJfX2RhdGFfXyIsdCk6dGhpcy5ub2RlKCkuX19kYXRhX199LG9uOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcixpLGE9aGUodCsiIiksbz1hLmxlbmd0aDtpZighKGFyZ3VtZW50cy5sZW5ndGg8Mikpe2ZvcihzPWU/ZGU6ZmUsbnVsbD09biYmKG49ITEpLHI9MDtyPG87KytyKXRoaXMuZWFjaChzKGFbcl0sZSxuKSk7cmV0dXJuIHRoaXN9dmFyIHM9dGhpcy5ub2RlKCkuX19vbjtpZihzKWZvcih2YXIgYyx1PTAsbD1zLmxlbmd0aDt1PGw7Kyt1KWZvcihyPTAsYz1zW3VdO3I8bzsrK3IpaWYoKGk9YVtyXSkudHlwZT09PWMudHlwZSYmaS5uYW1lPT09Yy5uYW1lKXJldHVybiBjLnZhbHVlfSxkaXNwYXRjaDpmdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLmVhY2goKCJmdW5jdGlvbiI9PXR5cGVvZiBlP3ZlOnllKSh0LGUpKX19O3ZhciBfZT14ZSxrZT1mdW5jdGlvbih0KXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIHQ/bmV3IGJlKFtbZG9jdW1lbnQucXVlcnlTZWxlY3Rvcih0KV1dLFtkb2N1bWVudC5kb2N1bWVudEVsZW1lbnRdKTpuZXcgYmUoW1t0XV0sbWUpfTtmdW5jdGlvbiB3ZSgpe2NlLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpfXZhciBFZT1mdW5jdGlvbigpe2NlLnByZXZlbnREZWZhdWx0KCksY2Uuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCl9LFRlPWZ1bmN0aW9uKHQpe3ZhciBlPXQuZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LG49a2UodCkub24oImRyYWdzdGFydC5kcmFnIixFZSwhMCk7Im9uc2VsZWN0c3RhcnQiaW4gZT9uLm9uKCJzZWxlY3RzdGFydC5kcmFnIixFZSwhMCk6KGUuX19ub3NlbGVjdD1lLnN0eWxlLk1velVzZXJTZWxlY3QsZS5zdHlsZS5Nb3pVc2VyU2VsZWN0PSJub25lIil9O2Z1bmN0aW9uIENlKHQsZSl7dmFyIG49dC5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQscj1rZSh0KS5vbigiZHJhZ3N0YXJ0LmRyYWciLG51bGwpO2UmJihyLm9uKCJjbGljay5kcmFnIixFZSwhMCksc2V0VGltZW91dCgoZnVuY3Rpb24oKXtyLm9uKCJjbGljay5kcmFnIixudWxsKX0pLDApKSwib25zZWxlY3RzdGFydCJpbiBuP3Iub24oInNlbGVjdHN0YXJ0LmRyYWciLG51bGwpOihuLnN0eWxlLk1velVzZXJTZWxlY3Q9bi5fX25vc2VsZWN0LGRlbGV0ZSBuLl9fbm9zZWxlY3QpfXZhciBTZT1mdW5jdGlvbih0LGUsbil7dC5wcm90b3R5cGU9ZS5wcm90b3R5cGU9bixuLmNvbnN0cnVjdG9yPXR9O2Z1bmN0aW9uIEFlKHQsZSl7dmFyIG49T2JqZWN0LmNyZWF0ZSh0LnByb3RvdHlwZSk7Zm9yKHZhciByIGluIGUpbltyXT1lW3JdO3JldHVybiBufWZ1bmN0aW9uIE1lKCl7fXZhciBPZT0iXFxzKihbKy1dP1xcZCspXFxzKiIsRGU9IlxccyooWystXT9cXGQqXFwuP1xcZCsoPzpbZUVdWystXT9cXGQrKT8pXFxzKiIsTmU9IlxccyooWystXT9cXGQqXFwuP1xcZCsoPzpbZUVdWystXT9cXGQrKT8pJVxccyoiLEJlPS9eIyhbMC05YS1mXXszLDh9KSQvLExlPW5ldyBSZWdFeHAoIl5yZ2JcXCgiK1tPZSxPZSxPZV0rIlxcKSQiKSxGZT1uZXcgUmVnRXhwKCJecmdiXFwoIitbTmUsTmUsTmVdKyJcXCkkIiksUGU9bmV3IFJlZ0V4cCgiXnJnYmFcXCgiK1tPZSxPZSxPZSxEZV0rIlxcKSQiKSxJZT1uZXcgUmVnRXhwKCJecmdiYVxcKCIrW05lLE5lLE5lLERlXSsiXFwpJCIpLGplPW5ldyBSZWdFeHAoIl5oc2xcXCgiK1tEZSxOZSxOZV0rIlxcKSQiKSxSZT1uZXcgUmVnRXhwKCJeaHNsYVxcKCIrW0RlLE5lLE5lLERlXSsiXFwpJCIpLFllPXthbGljZWJsdWU6MTU3OTIzODMsYW50aXF1ZXdoaXRlOjE2NDQ0Mzc1LGFxdWE6NjU1MzUsYXF1YW1hcmluZTo4Mzg4NTY0LGF6dXJlOjE1Nzk0MTc1LGJlaWdlOjE2MTE5MjYwLGJpc3F1ZToxNjc3MDI0NCxibGFjazowLGJsYW5jaGVkYWxtb25kOjE2NzcyMDQ1LGJsdWU6MjU1LGJsdWV2aW9sZXQ6OTA1NTIwMixicm93bjoxMDgyNDIzNCxidXJseXdvb2Q6MTQ1OTYyMzEsY2FkZXRibHVlOjYyNjY1MjgsY2hhcnRyZXVzZTo4Mzg4MzUyLGNob2NvbGF0ZToxMzc4OTQ3MCxjb3JhbDoxNjc0NDI3Mixjb3JuZmxvd2VyYmx1ZTo2NTkxOTgxLGNvcm5zaWxrOjE2Nzc1Mzg4LGNyaW1zb246MTQ0MjMxMDAsY3lhbjo2NTUzNSxkYXJrYmx1ZToxMzksZGFya2N5YW46MzU3MjMsZGFya2dvbGRlbnJvZDoxMjA5MjkzOSxkYXJrZ3JheToxMTExOTAxNyxkYXJrZ3JlZW46MjU2MDAsZGFya2dyZXk6MTExMTkwMTcsZGFya2toYWtpOjEyNDMzMjU5LGRhcmttYWdlbnRhOjkxMDk2NDMsZGFya29saXZlZ3JlZW46NTU5Nzk5OSxkYXJrb3JhbmdlOjE2NzQ3NTIwLGRhcmtvcmNoaWQ6MTAwNDAwMTIsZGFya3JlZDo5MTA5NTA0LGRhcmtzYWxtb246MTUzMDg0MTAsZGFya3NlYWdyZWVuOjk0MTk5MTksZGFya3NsYXRlYmx1ZTo0NzM0MzQ3LGRhcmtzbGF0ZWdyYXk6MzEwMDQ5NSxkYXJrc2xhdGVncmV5OjMxMDA0OTUsZGFya3R1cnF1b2lzZTo1Mjk0NSxkYXJrdmlvbGV0Ojk2OTk1MzksZGVlcHBpbms6MTY3MTY5NDcsZGVlcHNreWJsdWU6NDkxNTEsZGltZ3JheTo2OTA4MjY1LGRpbWdyZXk6NjkwODI2NSxkb2RnZXJibHVlOjIwMDMxOTksZmlyZWJyaWNrOjExNjc0MTQ2LGZsb3JhbHdoaXRlOjE2Nzc1OTIwLGZvcmVzdGdyZWVuOjIyNjM4NDIsZnVjaHNpYToxNjcxMTkzNSxnYWluc2Jvcm86MTQ0NzQ0NjAsZ2hvc3R3aGl0ZToxNjMxNjY3MSxnb2xkOjE2NzY2NzIwLGdvbGRlbnJvZDoxNDMyOTEyMCxncmF5Ojg0MjE1MDQsZ3JlZW46MzI3NjgsZ3JlZW55ZWxsb3c6MTE0MDMwNTUsZ3JleTo4NDIxNTA0LGhvbmV5ZGV3OjE1Nzk0MTYwLGhvdHBpbms6MTY3Mzg3NDAsaW5kaWFucmVkOjEzNDU4NTI0LGluZGlnbzo0OTE1MzMwLGl2b3J5OjE2Nzc3MjAwLGtoYWtpOjE1Nzg3NjYwLGxhdmVuZGVyOjE1MTMyNDEwLGxhdmVuZGVyYmx1c2g6MTY3NzMzNjUsbGF3bmdyZWVuOjgxOTA5NzYsbGVtb25jaGlmZm9uOjE2Nzc1ODg1LGxpZ2h0Ymx1ZToxMTM5MzI1NCxsaWdodGNvcmFsOjE1NzYxNTM2LGxpZ2h0Y3lhbjoxNDc0NTU5OSxsaWdodGdvbGRlbnJvZHllbGxvdzoxNjQ0ODIxMCxsaWdodGdyYXk6MTM4ODIzMjMsbGlnaHRncmVlbjo5NDk4MjU2LGxpZ2h0Z3JleToxMzg4MjMyMyxsaWdodHBpbms6MTY3NTg0NjUsbGlnaHRzYWxtb246MTY3NTI3NjIsbGlnaHRzZWFncmVlbjoyMTQyODkwLGxpZ2h0c2t5Ymx1ZTo4OTAwMzQ2LGxpZ2h0c2xhdGVncmF5Ojc4MzM3NTMsbGlnaHRzbGF0ZWdyZXk6NzgzMzc1MyxsaWdodHN0ZWVsYmx1ZToxMTU4NDczNCxsaWdodHllbGxvdzoxNjc3NzE4NCxsaW1lOjY1MjgwLGxpbWVncmVlbjozMzI5MzMwLGxpbmVuOjE2NDQ1NjcwLG1hZ2VudGE6MTY3MTE5MzUsbWFyb29uOjgzODg2MDgsbWVkaXVtYXF1YW1hcmluZTo2NzM3MzIyLG1lZGl1bWJsdWU6MjA1LG1lZGl1bW9yY2hpZDoxMjIxMTY2NyxtZWRpdW1wdXJwbGU6OTY2MjY4MyxtZWRpdW1zZWFncmVlbjozOTc4MDk3LG1lZGl1bXNsYXRlYmx1ZTo4MDg3NzkwLG1lZGl1bXNwcmluZ2dyZWVuOjY0MTU0LG1lZGl1bXR1cnF1b2lzZTo0NzcyMzAwLG1lZGl1bXZpb2xldHJlZDoxMzA0NzE3MyxtaWRuaWdodGJsdWU6MTY0NDkxMixtaW50Y3JlYW06MTYxMjE4NTAsbWlzdHlyb3NlOjE2NzcwMjczLG1vY2Nhc2luOjE2NzcwMjI5LG5hdmFqb3doaXRlOjE2NzY4Njg1LG5hdnk6MTI4LG9sZGxhY2U6MTY2NDM1NTgsb2xpdmU6ODQyMTM3NixvbGl2ZWRyYWI6NzA0ODczOSxvcmFuZ2U6MTY3NTM5MjAsb3JhbmdlcmVkOjE2NzI5MzQ0LG9yY2hpZDoxNDMxNTczNCxwYWxlZ29sZGVucm9kOjE1NjU3MTMwLHBhbGVncmVlbjoxMDAyNTg4MCxwYWxldHVycXVvaXNlOjExNTI5OTY2LHBhbGV2aW9sZXRyZWQ6MTQzODEyMDMscGFwYXlhd2hpcDoxNjc3MzA3NyxwZWFjaHB1ZmY6MTY3Njc2NzMscGVydToxMzQ2ODk5MSxwaW5rOjE2NzYxMDM1LHBsdW06MTQ1MjQ2MzcscG93ZGVyYmx1ZToxMTU5MTkxMCxwdXJwbGU6ODM4ODczNixyZWJlY2NhcHVycGxlOjY2OTc4ODEscmVkOjE2NzExNjgwLHJvc3licm93bjoxMjM1NzUxOSxyb3lhbGJsdWU6NDI4Njk0NSxzYWRkbGVicm93bjo5MTI3MTg3LHNhbG1vbjoxNjQxNjg4MixzYW5keWJyb3duOjE2MDMyODY0LHNlYWdyZWVuOjMwNTAzMjcsc2Vhc2hlbGw6MTY3NzQ2Mzgsc2llbm5hOjEwNTA2Nzk3LHNpbHZlcjoxMjYzMjI1Nixza3libHVlOjg5MDAzMzEsc2xhdGVibHVlOjY5NzAwNjEsc2xhdGVncmF5OjczNzI5NDQsc2xhdGVncmV5OjczNzI5NDQsc25vdzoxNjc3NTkzMCxzcHJpbmdncmVlbjo2NTQwNyxzdGVlbGJsdWU6NDYyMDk4MCx0YW46MTM4MDg3ODAsdGVhbDozMjg5Nix0aGlzdGxlOjE0MjA0ODg4LHRvbWF0bzoxNjczNzA5NSx0dXJxdW9pc2U6NDI1MTg1Nix2aW9sZXQ6MTU2MzEwODYsd2hlYXQ6MTYxMTMzMzEsd2hpdGU6MTY3NzcyMTUsd2hpdGVzbW9rZToxNjExOTI4NSx5ZWxsb3c6MTY3NzY5NjAseWVsbG93Z3JlZW46MTAxNDUwNzR9O2Z1bmN0aW9uIHplKCl7cmV0dXJuIHRoaXMucmdiKCkuZm9ybWF0SGV4KCl9ZnVuY3Rpb24gVWUoKXtyZXR1cm4gdGhpcy5yZ2IoKS5mb3JtYXRSZ2IoKX1mdW5jdGlvbiAkZSh0KXt2YXIgZSxuO3JldHVybiB0PSh0KyIiKS50cmltKCkudG9Mb3dlckNhc2UoKSwoZT1CZS5leGVjKHQpKT8obj1lWzFdLmxlbmd0aCxlPXBhcnNlSW50KGVbMV0sMTYpLDY9PT1uP1dlKGUpOjM9PT1uP25ldyBxZShlPj44JjE1fGU+PjQmMjQwLGU+PjQmMTV8MjQwJmUsKDE1JmUpPDw0fDE1JmUsMSk6OD09PW4/bmV3IHFlKGU+PjI0JjI1NSxlPj4xNiYyNTUsZT4+OCYyNTUsKDI1NSZlKS8yNTUpOjQ9PT1uP25ldyBxZShlPj4xMiYxNXxlPj44JjI0MCxlPj44JjE1fGU+PjQmMjQwLGU+PjQmMTV8MjQwJmUsKCgxNSZlKTw8NHwxNSZlKS8yNTUpOm51bGwpOihlPUxlLmV4ZWModCkpP25ldyBxZShlWzFdLGVbMl0sZVszXSwxKTooZT1GZS5leGVjKHQpKT9uZXcgcWUoMjU1KmVbMV0vMTAwLDI1NSplWzJdLzEwMCwyNTUqZVszXS8xMDAsMSk6KGU9UGUuZXhlYyh0KSk/VmUoZVsxXSxlWzJdLGVbM10sZVs0XSk6KGU9SWUuZXhlYyh0KSk/VmUoMjU1KmVbMV0vMTAwLDI1NSplWzJdLzEwMCwyNTUqZVszXS8xMDAsZVs0XSk6KGU9amUuZXhlYyh0KSk/UWUoZVsxXSxlWzJdLzEwMCxlWzNdLzEwMCwxKTooZT1SZS5leGVjKHQpKT9RZShlWzFdLGVbMl0vMTAwLGVbM10vMTAwLGVbNF0pOlllLmhhc093blByb3BlcnR5KHQpP1dlKFllW3RdKToidHJhbnNwYXJlbnQiPT09dD9uZXcgcWUoTmFOLE5hTixOYU4sMCk6bnVsbH1mdW5jdGlvbiBXZSh0KXtyZXR1cm4gbmV3IHFlKHQ+PjE2JjI1NSx0Pj44JjI1NSwyNTUmdCwxKX1mdW5jdGlvbiBWZSh0LGUsbixyKXtyZXR1cm4gcjw9MCYmKHQ9ZT1uPU5hTiksbmV3IHFlKHQsZSxuLHIpfWZ1bmN0aW9uIEhlKHQpe3JldHVybiB0IGluc3RhbmNlb2YgTWV8fCh0PSRlKHQpKSx0P25ldyBxZSgodD10LnJnYigpKS5yLHQuZyx0LmIsdC5vcGFjaXR5KTpuZXcgcWV9ZnVuY3Rpb24gR2UodCxlLG4scil7cmV0dXJuIDE9PT1hcmd1bWVudHMubGVuZ3RoP0hlKHQpOm5ldyBxZSh0LGUsbixudWxsPT1yPzE6cil9ZnVuY3Rpb24gcWUodCxlLG4scil7dGhpcy5yPSt0LHRoaXMuZz0rZSx0aGlzLmI9K24sdGhpcy5vcGFjaXR5PStyfWZ1bmN0aW9uIFhlKCl7cmV0dXJuIiMiK0plKHRoaXMucikrSmUodGhpcy5nKStKZSh0aGlzLmIpfWZ1bmN0aW9uIFplKCl7dmFyIHQ9dGhpcy5vcGFjaXR5O3JldHVybigxPT09KHQ9aXNOYU4odCk/MTpNYXRoLm1heCgwLE1hdGgubWluKDEsdCkpKT8icmdiKCI6InJnYmEoIikrTWF0aC5tYXgoMCxNYXRoLm1pbigyNTUsTWF0aC5yb3VuZCh0aGlzLnIpfHwwKSkrIiwgIitNYXRoLm1heCgwLE1hdGgubWluKDI1NSxNYXRoLnJvdW5kKHRoaXMuZyl8fDApKSsiLCAiK01hdGgubWF4KDAsTWF0aC5taW4oMjU1LE1hdGgucm91bmQodGhpcy5iKXx8MCkpKygxPT09dD8iKSI6IiwgIit0KyIpIil9ZnVuY3Rpb24gSmUodCl7cmV0dXJuKCh0PU1hdGgubWF4KDAsTWF0aC5taW4oMjU1LE1hdGgucm91bmQodCl8fDApKSk8MTY/IjAiOiIiKSt0LnRvU3RyaW5nKDE2KX1mdW5jdGlvbiBRZSh0LGUsbixyKXtyZXR1cm4gcjw9MD90PWU9bj1OYU46bjw9MHx8bj49MT90PWU9TmFOOmU8PTAmJih0PU5hTiksbmV3IGVuKHQsZSxuLHIpfWZ1bmN0aW9uIEtlKHQpe2lmKHQgaW5zdGFuY2VvZiBlbilyZXR1cm4gbmV3IGVuKHQuaCx0LnMsdC5sLHQub3BhY2l0eSk7aWYodCBpbnN0YW5jZW9mIE1lfHwodD0kZSh0KSksIXQpcmV0dXJuIG5ldyBlbjtpZih0IGluc3RhbmNlb2YgZW4pcmV0dXJuIHQ7dmFyIGU9KHQ9dC5yZ2IoKSkuci8yNTUsbj10LmcvMjU1LHI9dC5iLzI1NSxpPU1hdGgubWluKGUsbixyKSxhPU1hdGgubWF4KGUsbixyKSxvPU5hTixzPWEtaSxjPShhK2kpLzI7cmV0dXJuIHM/KG89ZT09PWE/KG4tcikvcys2KihuPHIpOm49PT1hPyhyLWUpL3MrMjooZS1uKS9zKzQscy89YzwuNT9hK2k6Mi1hLWksbyo9NjApOnM9Yz4wJiZjPDE/MDpvLG5ldyBlbihvLHMsYyx0Lm9wYWNpdHkpfWZ1bmN0aW9uIHRuKHQsZSxuLHIpe3JldHVybiAxPT09YXJndW1lbnRzLmxlbmd0aD9LZSh0KTpuZXcgZW4odCxlLG4sbnVsbD09cj8xOnIpfWZ1bmN0aW9uIGVuKHQsZSxuLHIpe3RoaXMuaD0rdCx0aGlzLnM9K2UsdGhpcy5sPStuLHRoaXMub3BhY2l0eT0rcn1mdW5jdGlvbiBubih0LGUsbil7cmV0dXJuIDI1NSoodDw2MD9lKyhuLWUpKnQvNjA6dDwxODA/bjp0PDI0MD9lKyhuLWUpKigyNDAtdCkvNjA6ZSl9ZnVuY3Rpb24gcm4odCxlLG4scixpKXt2YXIgYT10KnQsbz1hKnQ7cmV0dXJuKCgxLTMqdCszKmEtbykqZSsoNC02KmErMypvKSpuKygxKzMqdCszKmEtMypvKSpyK28qaSkvNn1TZShNZSwkZSx7Y29weTpmdW5jdGlvbih0KXtyZXR1cm4gT2JqZWN0LmFzc2lnbihuZXcgdGhpcy5jb25zdHJ1Y3Rvcix0aGlzLHQpfSxkaXNwbGF5YWJsZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnJnYigpLmRpc3BsYXlhYmxlKCl9LGhleDp6ZSxmb3JtYXRIZXg6emUsZm9ybWF0SHNsOmZ1bmN0aW9uKCl7cmV0dXJuIEtlKHRoaXMpLmZvcm1hdEhzbCgpfSxmb3JtYXRSZ2I6VWUsdG9TdHJpbmc6VWV9KSxTZShxZSxHZSxBZShNZSx7YnJpZ2h0ZXI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ9bnVsbD09dD8xLy43Ok1hdGgucG93KDEvLjcsdCksbmV3IHFlKHRoaXMucip0LHRoaXMuZyp0LHRoaXMuYip0LHRoaXMub3BhY2l0eSl9LGRhcmtlcjpmdW5jdGlvbih0KXtyZXR1cm4gdD1udWxsPT10Py43Ok1hdGgucG93KC43LHQpLG5ldyBxZSh0aGlzLnIqdCx0aGlzLmcqdCx0aGlzLmIqdCx0aGlzLm9wYWNpdHkpfSxyZ2I6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30sZGlzcGxheWFibGU6ZnVuY3Rpb24oKXtyZXR1cm4tLjU8PXRoaXMuciYmdGhpcy5yPDI1NS41JiYtLjU8PXRoaXMuZyYmdGhpcy5nPDI1NS41JiYtLjU8PXRoaXMuYiYmdGhpcy5iPDI1NS41JiYwPD10aGlzLm9wYWNpdHkmJnRoaXMub3BhY2l0eTw9MX0saGV4OlhlLGZvcm1hdEhleDpYZSxmb3JtYXRSZ2I6WmUsdG9TdHJpbmc6WmV9KSksU2UoZW4sdG4sQWUoTWUse2JyaWdodGVyOmZ1bmN0aW9uKHQpe3JldHVybiB0PW51bGw9PXQ/MS8uNzpNYXRoLnBvdygxLy43LHQpLG5ldyBlbih0aGlzLmgsdGhpcy5zLHRoaXMubCp0LHRoaXMub3BhY2l0eSl9LGRhcmtlcjpmdW5jdGlvbih0KXtyZXR1cm4gdD1udWxsPT10Py43Ok1hdGgucG93KC43LHQpLG5ldyBlbih0aGlzLmgsdGhpcy5zLHRoaXMubCp0LHRoaXMub3BhY2l0eSl9LHJnYjpmdW5jdGlvbigpe3ZhciB0PXRoaXMuaCUzNjArMzYwKih0aGlzLmg8MCksZT1pc05hTih0KXx8aXNOYU4odGhpcy5zKT8wOnRoaXMucyxuPXRoaXMubCxyPW4rKG48LjU/bjoxLW4pKmUsaT0yKm4tcjtyZXR1cm4gbmV3IHFlKG5uKHQ+PTI0MD90LTI0MDp0KzEyMCxpLHIpLG5uKHQsaSxyKSxubih0PDEyMD90KzI0MDp0LTEyMCxpLHIpLHRoaXMub3BhY2l0eSl9LGRpc3BsYXlhYmxlOmZ1bmN0aW9uKCl7cmV0dXJuKDA8PXRoaXMucyYmdGhpcy5zPD0xfHxpc05hTih0aGlzLnMpKSYmMDw9dGhpcy5sJiZ0aGlzLmw8PTEmJjA8PXRoaXMub3BhY2l0eSYmdGhpcy5vcGFjaXR5PD0xfSxmb3JtYXRIc2w6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLm9wYWNpdHk7cmV0dXJuKDE9PT0odD1pc05hTih0KT8xOk1hdGgubWF4KDAsTWF0aC5taW4oMSx0KSkpPyJoc2woIjoiaHNsYSgiKSsodGhpcy5ofHwwKSsiLCAiKzEwMCoodGhpcy5zfHwwKSsiJSwgIisxMDAqKHRoaXMubHx8MCkrIiUiKygxPT09dD8iKSI6IiwgIit0KyIpIil9fSkpO3ZhciBhbj1mdW5jdGlvbih0KXt2YXIgZT10Lmxlbmd0aC0xO3JldHVybiBmdW5jdGlvbihuKXt2YXIgcj1uPD0wP249MDpuPj0xPyhuPTEsZS0xKTpNYXRoLmZsb29yKG4qZSksaT10W3JdLGE9dFtyKzFdLG89cj4wP3Rbci0xXToyKmktYSxzPXI8ZS0xP3RbcisyXToyKmEtaTtyZXR1cm4gcm4oKG4tci9lKSplLG8saSxhLHMpfX0sb249ZnVuY3Rpb24odCl7dmFyIGU9dC5sZW5ndGg7cmV0dXJuIGZ1bmN0aW9uKG4pe3ZhciByPU1hdGguZmxvb3IoKChuJT0xKTwwPysrbjpuKSplKSxpPXRbKHIrZS0xKSVlXSxhPXRbciVlXSxvPXRbKHIrMSklZV0scz10WyhyKzIpJWVdO3JldHVybiBybigobi1yL2UpKmUsaSxhLG8scyl9fSxzbj1mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdH19O2Z1bmN0aW9uIGNuKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKG4pe3JldHVybiB0K24qZX19ZnVuY3Rpb24gdW4odCxlKXt2YXIgbj1lLXQ7cmV0dXJuIG4/Y24odCxuPjE4MHx8bjwtMTgwP24tMzYwKk1hdGgucm91bmQobi8zNjApOm4pOnNuKGlzTmFOKHQpP2U6dCl9ZnVuY3Rpb24gbG4odCl7cmV0dXJuIDE9PSh0PSt0KT9objpmdW5jdGlvbihlLG4pe3JldHVybiBuLWU/ZnVuY3Rpb24odCxlLG4pe3JldHVybiB0PU1hdGgucG93KHQsbiksZT1NYXRoLnBvdyhlLG4pLXQsbj0xL24sZnVuY3Rpb24ocil7cmV0dXJuIE1hdGgucG93KHQrciplLG4pfX0oZSxuLHQpOnNuKGlzTmFOKGUpP246ZSl9fWZ1bmN0aW9uIGhuKHQsZSl7dmFyIG49ZS10O3JldHVybiBuP2NuKHQsbik6c24oaXNOYU4odCk/ZTp0KX12YXIgZm49ZnVuY3Rpb24gdChlKXt2YXIgbj1sbihlKTtmdW5jdGlvbiByKHQsZSl7dmFyIHI9bigodD1HZSh0KSkuciwoZT1HZShlKSkuciksaT1uKHQuZyxlLmcpLGE9bih0LmIsZS5iKSxvPWhuKHQub3BhY2l0eSxlLm9wYWNpdHkpO3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gdC5yPXIoZSksdC5nPWkoZSksdC5iPWEoZSksdC5vcGFjaXR5PW8oZSksdCsiIn19cmV0dXJuIHIuZ2FtbWE9dCxyfSgxKTtmdW5jdGlvbiBkbih0KXtyZXR1cm4gZnVuY3Rpb24oZSl7dmFyIG4scixpPWUubGVuZ3RoLGE9bmV3IEFycmF5KGkpLG89bmV3IEFycmF5KGkpLHM9bmV3IEFycmF5KGkpO2ZvcihuPTA7bjxpOysrbilyPUdlKGVbbl0pLGFbbl09ci5yfHwwLG9bbl09ci5nfHwwLHNbbl09ci5ifHwwO3JldHVybiBhPXQoYSksbz10KG8pLHM9dChzKSxyLm9wYWNpdHk9MSxmdW5jdGlvbih0KXtyZXR1cm4gci5yPWEodCksci5nPW8odCksci5iPXModCkscisiIn19fXZhciBwbj1kbihhbiksZ249ZG4ob24pLHluPWZ1bmN0aW9uKHQsZSl7ZXx8KGU9W10pO3ZhciBuLHI9dD9NYXRoLm1pbihlLmxlbmd0aCx0Lmxlbmd0aCk6MCxpPWUuc2xpY2UoKTtyZXR1cm4gZnVuY3Rpb24oYSl7Zm9yKG49MDtuPHI7KytuKWlbbl09dFtuXSooMS1hKStlW25dKmE7cmV0dXJuIGl9fTtmdW5jdGlvbiB2bih0KXtyZXR1cm4gQXJyYXlCdWZmZXIuaXNWaWV3KHQpJiYhKHQgaW5zdGFuY2VvZiBEYXRhVmlldyl9dmFyIG1uPWZ1bmN0aW9uKHQsZSl7cmV0dXJuKHZuKGUpP3luOmJuKSh0LGUpfTtmdW5jdGlvbiBibih0LGUpe3ZhciBuLHI9ZT9lLmxlbmd0aDowLGk9dD9NYXRoLm1pbihyLHQubGVuZ3RoKTowLGE9bmV3IEFycmF5KGkpLG89bmV3IEFycmF5KHIpO2ZvcihuPTA7bjxpOysrbilhW25dPUFuKHRbbl0sZVtuXSk7Zm9yKDtuPHI7KytuKW9bbl09ZVtuXTtyZXR1cm4gZnVuY3Rpb24odCl7Zm9yKG49MDtuPGk7KytuKW9bbl09YVtuXSh0KTtyZXR1cm4gb319dmFyIHhuPWZ1bmN0aW9uKHQsZSl7dmFyIG49bmV3IERhdGU7cmV0dXJuIHQ9K3QsZT0rZSxmdW5jdGlvbihyKXtyZXR1cm4gbi5zZXRUaW1lKHQqKDEtcikrZSpyKSxufX0sX249ZnVuY3Rpb24odCxlKXtyZXR1cm4gdD0rdCxlPStlLGZ1bmN0aW9uKG4pe3JldHVybiB0KigxLW4pK2Uqbn19LGtuPWZ1bmN0aW9uKHQsZSl7dmFyIG4scj17fSxpPXt9O2ZvcihuIGluIG51bGwhPT10JiYib2JqZWN0Ij09dHlwZW9mIHR8fCh0PXt9KSxudWxsIT09ZSYmIm9iamVjdCI9PXR5cGVvZiBlfHwoZT17fSksZSluIGluIHQ/cltuXT1Bbih0W25dLGVbbl0pOmlbbl09ZVtuXTtyZXR1cm4gZnVuY3Rpb24odCl7Zm9yKG4gaW4gcilpW25dPXJbbl0odCk7cmV0dXJuIGl9fSx3bj0vWy0rXT8oPzpcZCtcLj9cZCp8XC4/XGQrKSg/OltlRV1bLStdP1xkKyk/L2csRW49bmV3IFJlZ0V4cCh3bi5zb3VyY2UsImciKTt2YXIgVG4sQ24sU249ZnVuY3Rpb24odCxlKXt2YXIgbixyLGksYT13bi5sYXN0SW5kZXg9RW4ubGFzdEluZGV4PTAsbz0tMSxzPVtdLGM9W107Zm9yKHQrPSIiLGUrPSIiOyhuPXduLmV4ZWModCkpJiYocj1Fbi5leGVjKGUpKTspKGk9ci5pbmRleCk+YSYmKGk9ZS5zbGljZShhLGkpLHNbb10/c1tvXSs9aTpzWysrb109aSksKG49blswXSk9PT0ocj1yWzBdKT9zW29dP3Nbb10rPXI6c1srK29dPXI6KHNbKytvXT1udWxsLGMucHVzaCh7aTpvLHg6X24obixyKX0pKSxhPUVuLmxhc3RJbmRleDtyZXR1cm4gYTxlLmxlbmd0aCYmKGk9ZS5zbGljZShhKSxzW29dP3Nbb10rPWk6c1srK29dPWkpLHMubGVuZ3RoPDI/Y1swXT9mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIHQoZSkrIiJ9fShjWzBdLngpOmZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0fX0oZSk6KGU9Yy5sZW5ndGgsZnVuY3Rpb24odCl7Zm9yKHZhciBuLHI9MDtyPGU7KytyKXNbKG49Y1tyXSkuaV09bi54KHQpO3JldHVybiBzLmpvaW4oIiIpfSl9LEFuPWZ1bmN0aW9uKHQsZSl7dmFyIG4scj10eXBlb2YgZTtyZXR1cm4gbnVsbD09ZXx8ImJvb2xlYW4iPT09cj9zbihlKTooIm51bWJlciI9PT1yP19uOiJzdHJpbmciPT09cj8obj0kZShlKSk/KGU9bixmbik6U246ZSBpbnN0YW5jZW9mICRlP2ZuOmUgaW5zdGFuY2VvZiBEYXRlP3huOnZuKGUpP3luOkFycmF5LmlzQXJyYXkoZSk/Ym46ImZ1bmN0aW9uIiE9dHlwZW9mIGUudmFsdWVPZiYmImZ1bmN0aW9uIiE9dHlwZW9mIGUudG9TdHJpbmd8fGlzTmFOKGUpP2tuOl9uKSh0LGUpfSxNbj1mdW5jdGlvbigpe2Zvcih2YXIgdCxlPWNlO3Q9ZS5zb3VyY2VFdmVudDspZT10O3JldHVybiBlfSxPbj1mdW5jdGlvbih0LGUpe3ZhciBuPXQub3duZXJTVkdFbGVtZW50fHx0O2lmKG4uY3JlYXRlU1ZHUG9pbnQpe3ZhciByPW4uY3JlYXRlU1ZHUG9pbnQoKTtyZXR1cm4gci54PWUuY2xpZW50WCxyLnk9ZS5jbGllbnRZLFsocj1yLm1hdHJpeFRyYW5zZm9ybSh0LmdldFNjcmVlbkNUTSgpLmludmVyc2UoKSkpLngsci55XX12YXIgaT10LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO3JldHVybltlLmNsaWVudFgtaS5sZWZ0LXQuY2xpZW50TGVmdCxlLmNsaWVudFktaS50b3AtdC5jbGllbnRUb3BdfSxEbj1mdW5jdGlvbih0LGUsbil7YXJndW1lbnRzLmxlbmd0aDwzJiYobj1lLGU9TW4oKS5jaGFuZ2VkVG91Y2hlcyk7Zm9yKHZhciByLGk9MCxhPWU/ZS5sZW5ndGg6MDtpPGE7KytpKWlmKChyPWVbaV0pLmlkZW50aWZpZXI9PT1uKXJldHVybiBPbih0LHIpO3JldHVybiBudWxsfSxObj1mdW5jdGlvbih0KXt2YXIgZT1NbigpO3JldHVybiBlLmNoYW5nZWRUb3VjaGVzJiYoZT1lLmNoYW5nZWRUb3VjaGVzWzBdKSxPbih0LGUpfSxCbj0wLExuPTAsRm49MCxQbj0wLEluPTAsam49MCxSbj0ib2JqZWN0Ij09dHlwZW9mIHBlcmZvcm1hbmNlJiZwZXJmb3JtYW5jZS5ub3c/cGVyZm9ybWFuY2U6RGF0ZSxZbj0ib2JqZWN0Ij09dHlwZW9mIHdpbmRvdyYmd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZT93aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lLmJpbmQod2luZG93KTpmdW5jdGlvbih0KXtzZXRUaW1lb3V0KHQsMTcpfTtmdW5jdGlvbiB6bigpe3JldHVybiBJbnx8KFluKFVuKSxJbj1Sbi5ub3coKStqbil9ZnVuY3Rpb24gVW4oKXtJbj0wfWZ1bmN0aW9uICRuKCl7dGhpcy5fY2FsbD10aGlzLl90aW1lPXRoaXMuX25leHQ9bnVsbH1mdW5jdGlvbiBXbih0LGUsbil7dmFyIHI9bmV3ICRuO3JldHVybiByLnJlc3RhcnQodCxlLG4pLHJ9ZnVuY3Rpb24gVm4oKXt6bigpLCsrQm47Zm9yKHZhciB0LGU9VG47ZTspKHQ9SW4tZS5fdGltZSk+PTAmJmUuX2NhbGwuY2FsbChudWxsLHQpLGU9ZS5fbmV4dDstLUJufWZ1bmN0aW9uIEhuKCl7SW49KFBuPVJuLm5vdygpKStqbixCbj1Mbj0wO3RyeXtWbigpfWZpbmFsbHl7Qm49MCxmdW5jdGlvbigpe3ZhciB0LGUsbj1UbixyPTEvMDtmb3IoO247KW4uX2NhbGw/KHI+bi5fdGltZSYmKHI9bi5fdGltZSksdD1uLG49bi5fbmV4dCk6KGU9bi5fbmV4dCxuLl9uZXh0PW51bGwsbj10P3QuX25leHQ9ZTpUbj1lKTtDbj10LHFuKHIpfSgpLEluPTB9fWZ1bmN0aW9uIEduKCl7dmFyIHQ9Um4ubm93KCksZT10LVBuO2U+MWUzJiYoam4tPWUsUG49dCl9ZnVuY3Rpb24gcW4odCl7Qm58fChMbiYmKExuPWNsZWFyVGltZW91dChMbikpLHQtSW4+MjQ/KHQ8MS8wJiYoTG49c2V0VGltZW91dChIbix0LVJuLm5vdygpLWpuKSksRm4mJihGbj1jbGVhckludGVydmFsKEZuKSkpOihGbnx8KFBuPVJuLm5vdygpLEZuPXNldEludGVydmFsKEduLDFlMykpLEJuPTEsWW4oSG4pKSl9JG4ucHJvdG90eXBlPVduLnByb3RvdHlwZT17Y29uc3RydWN0b3I6JG4scmVzdGFydDpmdW5jdGlvbih0LGUsbil7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHQpdGhyb3cgbmV3IFR5cGVFcnJvcigiY2FsbGJhY2sgaXMgbm90IGEgZnVuY3Rpb24iKTtuPShudWxsPT1uP3puKCk6K24pKyhudWxsPT1lPzA6K2UpLHRoaXMuX25leHR8fENuPT09dGhpc3x8KENuP0NuLl9uZXh0PXRoaXM6VG49dGhpcyxDbj10aGlzKSx0aGlzLl9jYWxsPXQsdGhpcy5fdGltZT1uLHFuKCl9LHN0b3A6ZnVuY3Rpb24oKXt0aGlzLl9jYWxsJiYodGhpcy5fY2FsbD1udWxsLHRoaXMuX3RpbWU9MS8wLHFuKCkpfX07dmFyIFhuPWZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uZXcgJG47cmV0dXJuIGU9bnVsbD09ZT8wOitlLHIucmVzdGFydCgoZnVuY3Rpb24obil7ci5zdG9wKCksdChuK2UpfSksZSxuKSxyfSxabj1sdCgic3RhcnQiLCJlbmQiLCJjYW5jZWwiLCJpbnRlcnJ1cHQiKSxKbj1bXSxRbj1mdW5jdGlvbih0LGUsbixyLGksYSl7dmFyIG89dC5fX3RyYW5zaXRpb247aWYobyl7aWYobiBpbiBvKXJldHVybn1lbHNlIHQuX190cmFuc2l0aW9uPXt9OyFmdW5jdGlvbih0LGUsbil7dmFyIHIsaT10Ll9fdHJhbnNpdGlvbjtmdW5jdGlvbiBhKGMpe3ZhciB1LGwsaCxmO2lmKDEhPT1uLnN0YXRlKXJldHVybiBzKCk7Zm9yKHUgaW4gaSlpZigoZj1pW3VdKS5uYW1lPT09bi5uYW1lKXtpZigzPT09Zi5zdGF0ZSlyZXR1cm4gWG4oYSk7ND09PWYuc3RhdGU/KGYuc3RhdGU9NixmLnRpbWVyLnN0b3AoKSxmLm9uLmNhbGwoImludGVycnVwdCIsdCx0Ll9fZGF0YV9fLGYuaW5kZXgsZi5ncm91cCksZGVsZXRlIGlbdV0pOit1PGUmJihmLnN0YXRlPTYsZi50aW1lci5zdG9wKCksZi5vbi5jYWxsKCJjYW5jZWwiLHQsdC5fX2RhdGFfXyxmLmluZGV4LGYuZ3JvdXApLGRlbGV0ZSBpW3VdKX1pZihYbigoZnVuY3Rpb24oKXszPT09bi5zdGF0ZSYmKG4uc3RhdGU9NCxuLnRpbWVyLnJlc3RhcnQobyxuLmRlbGF5LG4udGltZSksbyhjKSl9KSksbi5zdGF0ZT0yLG4ub24uY2FsbCgic3RhcnQiLHQsdC5fX2RhdGFfXyxuLmluZGV4LG4uZ3JvdXApLDI9PT1uLnN0YXRlKXtmb3Iobi5zdGF0ZT0zLHI9bmV3IEFycmF5KGg9bi50d2Vlbi5sZW5ndGgpLHU9MCxsPS0xO3U8aDsrK3UpKGY9bi50d2Vlblt1XS52YWx1ZS5jYWxsKHQsdC5fX2RhdGFfXyxuLmluZGV4LG4uZ3JvdXApKSYmKHJbKytsXT1mKTtyLmxlbmd0aD1sKzF9fWZ1bmN0aW9uIG8oZSl7Zm9yKHZhciBpPWU8bi5kdXJhdGlvbj9uLmVhc2UuY2FsbChudWxsLGUvbi5kdXJhdGlvbik6KG4udGltZXIucmVzdGFydChzKSxuLnN0YXRlPTUsMSksYT0tMSxvPXIubGVuZ3RoOysrYTxvOylyW2FdLmNhbGwodCxpKTs1PT09bi5zdGF0ZSYmKG4ub24uY2FsbCgiZW5kIix0LHQuX19kYXRhX18sbi5pbmRleCxuLmdyb3VwKSxzKCkpfWZ1bmN0aW9uIHMoKXtmb3IodmFyIHIgaW4gbi5zdGF0ZT02LG4udGltZXIuc3RvcCgpLGRlbGV0ZSBpW2VdLGkpcmV0dXJuO2RlbGV0ZSB0Ll9fdHJhbnNpdGlvbn1pW2VdPW4sbi50aW1lcj1XbigoZnVuY3Rpb24odCl7bi5zdGF0ZT0xLG4udGltZXIucmVzdGFydChhLG4uZGVsYXksbi50aW1lKSxuLmRlbGF5PD10JiZhKHQtbi5kZWxheSl9KSwwLG4udGltZSl9KHQsbix7bmFtZTplLGluZGV4OnIsZ3JvdXA6aSxvbjpabix0d2VlbjpKbix0aW1lOmEudGltZSxkZWxheTphLmRlbGF5LGR1cmF0aW9uOmEuZHVyYXRpb24sZWFzZTphLmVhc2UsdGltZXI6bnVsbCxzdGF0ZTowfSl9O2Z1bmN0aW9uIEtuKHQsZSl7dmFyIG49ZXIodCxlKTtpZihuLnN0YXRlPjApdGhyb3cgbmV3IEVycm9yKCJ0b28gbGF0ZTsgYWxyZWFkeSBzY2hlZHVsZWQiKTtyZXR1cm4gbn1mdW5jdGlvbiB0cih0LGUpe3ZhciBuPWVyKHQsZSk7aWYobi5zdGF0ZT4zKXRocm93IG5ldyBFcnJvcigidG9vIGxhdGU7IGFscmVhZHkgcnVubmluZyIpO3JldHVybiBufWZ1bmN0aW9uIGVyKHQsZSl7dmFyIG49dC5fX3RyYW5zaXRpb247aWYoIW58fCEobj1uW2VdKSl0aHJvdyBuZXcgRXJyb3IoInRyYW5zaXRpb24gbm90IGZvdW5kIik7cmV0dXJuIG59dmFyIG5yLHJyLGlyLGFyLG9yPWZ1bmN0aW9uKHQsZSl7dmFyIG4scixpLGE9dC5fX3RyYW5zaXRpb24sbz0hMDtpZihhKXtmb3IoaSBpbiBlPW51bGw9PWU/bnVsbDplKyIiLGEpKG49YVtpXSkubmFtZT09PWU/KHI9bi5zdGF0ZT4yJiZuLnN0YXRlPDUsbi5zdGF0ZT02LG4udGltZXIuc3RvcCgpLG4ub24uY2FsbChyPyJpbnRlcnJ1cHQiOiJjYW5jZWwiLHQsdC5fX2RhdGFfXyxuLmluZGV4LG4uZ3JvdXApLGRlbGV0ZSBhW2ldKTpvPSExO28mJmRlbGV0ZSB0Ll9fdHJhbnNpdGlvbn19LHNyPTE4MC9NYXRoLlBJLGNyPXt0cmFuc2xhdGVYOjAsdHJhbnNsYXRlWTowLHJvdGF0ZTowLHNrZXdYOjAsc2NhbGVYOjEsc2NhbGVZOjF9LHVyPWZ1bmN0aW9uKHQsZSxuLHIsaSxhKXt2YXIgbyxzLGM7cmV0dXJuKG89TWF0aC5zcXJ0KHQqdCtlKmUpKSYmKHQvPW8sZS89byksKGM9dCpuK2UqcikmJihuLT10KmMsci09ZSpjKSwocz1NYXRoLnNxcnQobipuK3IqcikpJiYobi89cyxyLz1zLGMvPXMpLHQqcjxlKm4mJih0PS10LGU9LWUsYz0tYyxvPS1vKSx7dHJhbnNsYXRlWDppLHRyYW5zbGF0ZVk6YSxyb3RhdGU6TWF0aC5hdGFuMihlLHQpKnNyLHNrZXdYOk1hdGguYXRhbihjKSpzcixzY2FsZVg6byxzY2FsZVk6c319O2Z1bmN0aW9uIGxyKHQsZSxuLHIpe2Z1bmN0aW9uIGkodCl7cmV0dXJuIHQubGVuZ3RoP3QucG9wKCkrIiAiOiIifXJldHVybiBmdW5jdGlvbihhLG8pe3ZhciBzPVtdLGM9W107cmV0dXJuIGE9dChhKSxvPXQobyksZnVuY3Rpb24odCxyLGksYSxvLHMpe2lmKHQhPT1pfHxyIT09YSl7dmFyIGM9by5wdXNoKCJ0cmFuc2xhdGUoIixudWxsLGUsbnVsbCxuKTtzLnB1c2goe2k6Yy00LHg6X24odCxpKX0se2k6Yy0yLHg6X24ocixhKX0pfWVsc2UoaXx8YSkmJm8ucHVzaCgidHJhbnNsYXRlKCIraStlK2Erbil9KGEudHJhbnNsYXRlWCxhLnRyYW5zbGF0ZVksby50cmFuc2xhdGVYLG8udHJhbnNsYXRlWSxzLGMpLGZ1bmN0aW9uKHQsZSxuLGEpe3QhPT1lPyh0LWU+MTgwP2UrPTM2MDplLXQ+MTgwJiYodCs9MzYwKSxhLnB1c2goe2k6bi5wdXNoKGkobikrInJvdGF0ZSgiLG51bGwsciktMix4Ol9uKHQsZSl9KSk6ZSYmbi5wdXNoKGkobikrInJvdGF0ZSgiK2Urcil9KGEucm90YXRlLG8ucm90YXRlLHMsYyksZnVuY3Rpb24odCxlLG4sYSl7dCE9PWU/YS5wdXNoKHtpOm4ucHVzaChpKG4pKyJza2V3WCgiLG51bGwsciktMix4Ol9uKHQsZSl9KTplJiZuLnB1c2goaShuKSsic2tld1goIitlK3IpfShhLnNrZXdYLG8uc2tld1gscyxjKSxmdW5jdGlvbih0LGUsbixyLGEsbyl7aWYodCE9PW58fGUhPT1yKXt2YXIgcz1hLnB1c2goaShhKSsic2NhbGUoIixudWxsLCIsIixudWxsLCIpIik7by5wdXNoKHtpOnMtNCx4Ol9uKHQsbil9LHtpOnMtMix4Ol9uKGUscil9KX1lbHNlIDE9PT1uJiYxPT09cnx8YS5wdXNoKGkoYSkrInNjYWxlKCIrbisiLCIrcisiKSIpfShhLnNjYWxlWCxhLnNjYWxlWSxvLnNjYWxlWCxvLnNjYWxlWSxzLGMpLGE9bz1udWxsLGZ1bmN0aW9uKHQpe2Zvcih2YXIgZSxuPS0xLHI9Yy5sZW5ndGg7KytuPHI7KXNbKGU9Y1tuXSkuaV09ZS54KHQpO3JldHVybiBzLmpvaW4oIiIpfX19dmFyIGhyPWxyKChmdW5jdGlvbih0KXtyZXR1cm4ibm9uZSI9PT10P2NyOihucnx8KG5yPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIkRJViIpLHJyPWRvY3VtZW50LmRvY3VtZW50RWxlbWVudCxpcj1kb2N1bWVudC5kZWZhdWx0VmlldyksbnIuc3R5bGUudHJhbnNmb3JtPXQsdD1pci5nZXRDb21wdXRlZFN0eWxlKHJyLmFwcGVuZENoaWxkKG5yKSxudWxsKS5nZXRQcm9wZXJ0eVZhbHVlKCJ0cmFuc2Zvcm0iKSxyci5yZW1vdmVDaGlsZChuciksdD10LnNsaWNlKDcsLTEpLnNwbGl0KCIsIiksdXIoK3RbMF0sK3RbMV0sK3RbMl0sK3RbM10sK3RbNF0sK3RbNV0pKX0pLCJweCwgIiwicHgpIiwiZGVnKSIpLGZyPWxyKChmdW5jdGlvbih0KXtyZXR1cm4gbnVsbD09dD9jcjooYXJ8fChhcj1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwiZyIpKSxhci5zZXRBdHRyaWJ1dGUoInRyYW5zZm9ybSIsdCksKHQ9YXIudHJhbnNmb3JtLmJhc2VWYWwuY29uc29saWRhdGUoKSk/KHQ9dC5tYXRyaXgsdXIodC5hLHQuYix0LmMsdC5kLHQuZSx0LmYpKTpjcil9KSwiLCAiLCIpIiwiKSIpO2Z1bmN0aW9uIGRyKHQsZSl7dmFyIG4scjtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgaT10cih0aGlzLHQpLGE9aS50d2VlbjtpZihhIT09bilmb3IodmFyIG89MCxzPShyPW49YSkubGVuZ3RoO288czsrK28paWYocltvXS5uYW1lPT09ZSl7KHI9ci5zbGljZSgpKS5zcGxpY2UobywxKTticmVha31pLnR3ZWVuPXJ9fWZ1bmN0aW9uIHByKHQsZSxuKXt2YXIgcixpO2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBuKXRocm93IG5ldyBFcnJvcjtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgYT10cih0aGlzLHQpLG89YS50d2VlbjtpZihvIT09cil7aT0ocj1vKS5zbGljZSgpO2Zvcih2YXIgcz17bmFtZTplLHZhbHVlOm59LGM9MCx1PWkubGVuZ3RoO2M8dTsrK2MpaWYoaVtjXS5uYW1lPT09ZSl7aVtjXT1zO2JyZWFrfWM9PT11JiZpLnB1c2gocyl9YS50d2Vlbj1pfX1mdW5jdGlvbiBncih0LGUsbil7dmFyIHI9dC5faWQ7cmV0dXJuIHQuZWFjaCgoZnVuY3Rpb24oKXt2YXIgdD10cih0aGlzLHIpOyh0LnZhbHVlfHwodC52YWx1ZT17fSkpW2VdPW4uYXBwbHkodGhpcyxhcmd1bWVudHMpfSkpLGZ1bmN0aW9uKHQpe3JldHVybiBlcih0LHIpLnZhbHVlW2VdfX12YXIgeXI9ZnVuY3Rpb24odCxlKXt2YXIgbjtyZXR1cm4oIm51bWJlciI9PXR5cGVvZiBlP19uOmUgaW5zdGFuY2VvZiAkZT9mbjoobj0kZShlKSk/KGU9bixmbik6U24pKHQsZSl9O2Z1bmN0aW9uIHZyKHQpe3JldHVybiBmdW5jdGlvbigpe3RoaXMucmVtb3ZlQXR0cmlidXRlKHQpfX1mdW5jdGlvbiBtcih0KXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnJlbW92ZUF0dHJpYnV0ZU5TKHQuc3BhY2UsdC5sb2NhbCl9fWZ1bmN0aW9uIGJyKHQsZSxuKXt2YXIgcixpLGE9bisiIjtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbz10aGlzLmdldEF0dHJpYnV0ZSh0KTtyZXR1cm4gbz09PWE/bnVsbDpvPT09cj9pOmk9ZShyPW8sbil9fWZ1bmN0aW9uIHhyKHQsZSxuKXt2YXIgcixpLGE9bisiIjtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbz10aGlzLmdldEF0dHJpYnV0ZU5TKHQuc3BhY2UsdC5sb2NhbCk7cmV0dXJuIG89PT1hP251bGw6bz09PXI/aTppPWUocj1vLG4pfX1mdW5jdGlvbiBfcih0LGUsbil7dmFyIHIsaSxhO3JldHVybiBmdW5jdGlvbigpe3ZhciBvLHMsYz1uKHRoaXMpO2lmKG51bGwhPWMpcmV0dXJuKG89dGhpcy5nZXRBdHRyaWJ1dGUodCkpPT09KHM9YysiIik/bnVsbDpvPT09ciYmcz09PWk/YTooaT1zLGE9ZShyPW8sYykpO3RoaXMucmVtb3ZlQXR0cmlidXRlKHQpfX1mdW5jdGlvbiBrcih0LGUsbil7dmFyIHIsaSxhO3JldHVybiBmdW5jdGlvbigpe3ZhciBvLHMsYz1uKHRoaXMpO2lmKG51bGwhPWMpcmV0dXJuKG89dGhpcy5nZXRBdHRyaWJ1dGVOUyh0LnNwYWNlLHQubG9jYWwpKT09PShzPWMrIiIpP251bGw6bz09PXImJnM9PT1pP2E6KGk9cyxhPWUocj1vLGMpKTt0aGlzLnJlbW92ZUF0dHJpYnV0ZU5TKHQuc3BhY2UsdC5sb2NhbCl9fWZ1bmN0aW9uIHdyKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKG4pe3RoaXMuc2V0QXR0cmlidXRlKHQsZS5jYWxsKHRoaXMsbikpfX1mdW5jdGlvbiBFcih0LGUpe3JldHVybiBmdW5jdGlvbihuKXt0aGlzLnNldEF0dHJpYnV0ZU5TKHQuc3BhY2UsdC5sb2NhbCxlLmNhbGwodGhpcyxuKSl9fWZ1bmN0aW9uIFRyKHQsZSl7dmFyIG4scjtmdW5jdGlvbiBpKCl7dmFyIGk9ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIGkhPT1yJiYobj0ocj1pKSYmRXIodCxpKSksbn1yZXR1cm4gaS5fdmFsdWU9ZSxpfWZ1bmN0aW9uIENyKHQsZSl7dmFyIG4scjtmdW5jdGlvbiBpKCl7dmFyIGk9ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIGkhPT1yJiYobj0ocj1pKSYmd3IodCxpKSksbn1yZXR1cm4gaS5fdmFsdWU9ZSxpfWZ1bmN0aW9uIFNyKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKCl7S24odGhpcyx0KS5kZWxheT0rZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fWZ1bmN0aW9uIEFyKHQsZSl7cmV0dXJuIGU9K2UsZnVuY3Rpb24oKXtLbih0aGlzLHQpLmRlbGF5PWV9fWZ1bmN0aW9uIE1yKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dHIodGhpcyx0KS5kdXJhdGlvbj0rZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fWZ1bmN0aW9uIE9yKHQsZSl7cmV0dXJuIGU9K2UsZnVuY3Rpb24oKXt0cih0aGlzLHQpLmR1cmF0aW9uPWV9fWZ1bmN0aW9uIERyKHQsZSl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIGUpdGhyb3cgbmV3IEVycm9yO3JldHVybiBmdW5jdGlvbigpe3RyKHRoaXMsdCkuZWFzZT1lfX1mdW5jdGlvbiBOcih0LGUsbil7dmFyIHIsaSxhPWZ1bmN0aW9uKHQpe3JldHVybih0KyIiKS50cmltKCkuc3BsaXQoL158XHMrLykuZXZlcnkoKGZ1bmN0aW9uKHQpe3ZhciBlPXQuaW5kZXhPZigiLiIpO3JldHVybiBlPj0wJiYodD10LnNsaWNlKDAsZSkpLCF0fHwic3RhcnQiPT09dH0pKX0oZSk/S246dHI7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG89YSh0aGlzLHQpLHM9by5vbjtzIT09ciYmKGk9KHI9cykuY29weSgpKS5vbihlLG4pLG8ub249aX19dmFyIEJyPV9lLnByb3RvdHlwZS5jb25zdHJ1Y3RvcjtmdW5jdGlvbiBMcih0KXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KHQpfX1mdW5jdGlvbiBGcih0LGUsbil7cmV0dXJuIGZ1bmN0aW9uKHIpe3RoaXMuc3R5bGUuc2V0UHJvcGVydHkodCxlLmNhbGwodGhpcyxyKSxuKX19ZnVuY3Rpb24gUHIodCxlLG4pe3ZhciByLGk7ZnVuY3Rpb24gYSgpe3ZhciBhPWUuYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiBhIT09aSYmKHI9KGk9YSkmJkZyKHQsYSxuKSkscn1yZXR1cm4gYS5fdmFsdWU9ZSxhfWZ1bmN0aW9uIElyKHQpe3JldHVybiBmdW5jdGlvbihlKXt0aGlzLnRleHRDb250ZW50PXQuY2FsbCh0aGlzLGUpfX1mdW5jdGlvbiBqcih0KXt2YXIgZSxuO2Z1bmN0aW9uIHIoKXt2YXIgcj10LmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gciE9PW4mJihlPShuPXIpJiZJcihyKSksZX1yZXR1cm4gci5fdmFsdWU9dCxyfXZhciBScj0wO2Z1bmN0aW9uIFlyKHQsZSxuLHIpe3RoaXMuX2dyb3Vwcz10LHRoaXMuX3BhcmVudHM9ZSx0aGlzLl9uYW1lPW4sdGhpcy5faWQ9cn1mdW5jdGlvbiB6cih0KXtyZXR1cm4gX2UoKS50cmFuc2l0aW9uKHQpfWZ1bmN0aW9uIFVyKCl7cmV0dXJuKytScn12YXIgJHI9X2UucHJvdG90eXBlO2Z1bmN0aW9uIFdyKHQpe3JldHVybiB0KnQqdH1mdW5jdGlvbiBWcih0KXtyZXR1cm4tLXQqdCp0KzF9ZnVuY3Rpb24gSHIodCl7cmV0dXJuKCh0Kj0yKTw9MT90KnQqdDoodC09MikqdCp0KzIpLzJ9WXIucHJvdG90eXBlPXpyLnByb3RvdHlwZT17Y29uc3RydWN0b3I6WXIsc2VsZWN0OmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX25hbWUsbj10aGlzLl9pZDsiZnVuY3Rpb24iIT10eXBlb2YgdCYmKHQ9ZnQodCkpO2Zvcih2YXIgcj10aGlzLl9ncm91cHMsaT1yLmxlbmd0aCxhPW5ldyBBcnJheShpKSxvPTA7bzxpOysrbylmb3IodmFyIHMsYyx1PXJbb10sbD11Lmxlbmd0aCxoPWFbb109bmV3IEFycmF5KGwpLGY9MDtmPGw7KytmKShzPXVbZl0pJiYoYz10LmNhbGwocyxzLl9fZGF0YV9fLGYsdSkpJiYoIl9fZGF0YV9fImluIHMmJihjLl9fZGF0YV9fPXMuX19kYXRhX18pLGhbZl09YyxRbihoW2ZdLGUsbixmLGgsZXIocyxuKSkpO3JldHVybiBuZXcgWXIoYSx0aGlzLl9wYXJlbnRzLGUsbil9LHNlbGVjdEFsbDpmdW5jdGlvbih0KXt2YXIgZT10aGlzLl9uYW1lLG49dGhpcy5faWQ7ImZ1bmN0aW9uIiE9dHlwZW9mIHQmJih0PXB0KHQpKTtmb3IodmFyIHI9dGhpcy5fZ3JvdXBzLGk9ci5sZW5ndGgsYT1bXSxvPVtdLHM9MDtzPGk7KytzKWZvcih2YXIgYyx1PXJbc10sbD11Lmxlbmd0aCxoPTA7aDxsOysraClpZihjPXVbaF0pe2Zvcih2YXIgZixkPXQuY2FsbChjLGMuX19kYXRhX18saCx1KSxwPWVyKGMsbiksZz0wLHk9ZC5sZW5ndGg7Zzx5OysrZykoZj1kW2ddKSYmUW4oZixlLG4sZyxkLHApO2EucHVzaChkKSxvLnB1c2goYyl9cmV0dXJuIG5ldyBZcihhLG8sZSxuKX0sZmlsdGVyOmZ1bmN0aW9uKHQpeyJmdW5jdGlvbiIhPXR5cGVvZiB0JiYodD1ndCh0KSk7Zm9yKHZhciBlPXRoaXMuX2dyb3VwcyxuPWUubGVuZ3RoLHI9bmV3IEFycmF5KG4pLGk9MDtpPG47KytpKWZvcih2YXIgYSxvPWVbaV0scz1vLmxlbmd0aCxjPXJbaV09W10sdT0wO3U8czsrK3UpKGE9b1t1XSkmJnQuY2FsbChhLGEuX19kYXRhX18sdSxvKSYmYy5wdXNoKGEpO3JldHVybiBuZXcgWXIocix0aGlzLl9wYXJlbnRzLHRoaXMuX25hbWUsdGhpcy5faWQpfSxtZXJnZTpmdW5jdGlvbih0KXtpZih0Ll9pZCE9PXRoaXMuX2lkKXRocm93IG5ldyBFcnJvcjtmb3IodmFyIGU9dGhpcy5fZ3JvdXBzLG49dC5fZ3JvdXBzLHI9ZS5sZW5ndGgsaT1uLmxlbmd0aCxhPU1hdGgubWluKHIsaSksbz1uZXcgQXJyYXkocikscz0wO3M8YTsrK3MpZm9yKHZhciBjLHU9ZVtzXSxsPW5bc10saD11Lmxlbmd0aCxmPW9bc109bmV3IEFycmF5KGgpLGQ9MDtkPGg7KytkKShjPXVbZF18fGxbZF0pJiYoZltkXT1jKTtmb3IoO3M8cjsrK3Mpb1tzXT1lW3NdO3JldHVybiBuZXcgWXIobyx0aGlzLl9wYXJlbnRzLHRoaXMuX25hbWUsdGhpcy5faWQpfSxzZWxlY3Rpb246ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IEJyKHRoaXMuX2dyb3Vwcyx0aGlzLl9wYXJlbnRzKX0sdHJhbnNpdGlvbjpmdW5jdGlvbigpe2Zvcih2YXIgdD10aGlzLl9uYW1lLGU9dGhpcy5faWQsbj1VcigpLHI9dGhpcy5fZ3JvdXBzLGk9ci5sZW5ndGgsYT0wO2E8aTsrK2EpZm9yKHZhciBvLHM9clthXSxjPXMubGVuZ3RoLHU9MDt1PGM7Kyt1KWlmKG89c1t1XSl7dmFyIGw9ZXIobyxlKTtRbihvLHQsbix1LHMse3RpbWU6bC50aW1lK2wuZGVsYXkrbC5kdXJhdGlvbixkZWxheTowLGR1cmF0aW9uOmwuZHVyYXRpb24sZWFzZTpsLmVhc2V9KX1yZXR1cm4gbmV3IFlyKHIsdGhpcy5fcGFyZW50cyx0LG4pfSxjYWxsOiRyLmNhbGwsbm9kZXM6JHIubm9kZXMsbm9kZTokci5ub2RlLHNpemU6JHIuc2l6ZSxlbXB0eTokci5lbXB0eSxlYWNoOiRyLmVhY2gsb246ZnVuY3Rpb24odCxlKXt2YXIgbj10aGlzLl9pZDtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwyP2VyKHRoaXMubm9kZSgpLG4pLm9uLm9uKHQpOnRoaXMuZWFjaChOcihuLHQsZSkpfSxhdHRyOmZ1bmN0aW9uKHQsZSl7dmFyIG49d3QodCkscj0idHJhbnNmb3JtIj09PW4/ZnI6eXI7cmV0dXJuIHRoaXMuYXR0clR3ZWVuKHQsImZ1bmN0aW9uIj09dHlwZW9mIGU/KG4ubG9jYWw/a3I6X3IpKG4scixncih0aGlzLCJhdHRyLiIrdCxlKSk6bnVsbD09ZT8obi5sb2NhbD9tcjp2cikobik6KG4ubG9jYWw/eHI6YnIpKG4scixlKSl9LGF0dHJUd2VlbjpmdW5jdGlvbih0LGUpe3ZhciBuPSJhdHRyLiIrdDtpZihhcmd1bWVudHMubGVuZ3RoPDIpcmV0dXJuKG49dGhpcy50d2VlbihuKSkmJm4uX3ZhbHVlO2lmKG51bGw9PWUpcmV0dXJuIHRoaXMudHdlZW4obixudWxsKTtpZigiZnVuY3Rpb24iIT10eXBlb2YgZSl0aHJvdyBuZXcgRXJyb3I7dmFyIHI9d3QodCk7cmV0dXJuIHRoaXMudHdlZW4obiwoci5sb2NhbD9UcjpDcikocixlKSl9LHN0eWxlOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj0idHJhbnNmb3JtIj09KHQrPSIiKT9ocjp5cjtyZXR1cm4gbnVsbD09ZT90aGlzLnN0eWxlVHdlZW4odCxmdW5jdGlvbih0LGUpe3ZhciBuLHIsaTtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgYT1MdCh0aGlzLHQpLG89KHRoaXMuc3R5bGUucmVtb3ZlUHJvcGVydHkodCksTHQodGhpcyx0KSk7cmV0dXJuIGE9PT1vP251bGw6YT09PW4mJm89PT1yP2k6aT1lKG49YSxyPW8pfX0odCxyKSkub24oImVuZC5zdHlsZS4iK3QsTHIodCkpOiJmdW5jdGlvbiI9PXR5cGVvZiBlP3RoaXMuc3R5bGVUd2Vlbih0LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcixpLGE7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG89THQodGhpcyx0KSxzPW4odGhpcyksYz1zKyIiO3JldHVybiBudWxsPT1zJiYodGhpcy5zdHlsZS5yZW1vdmVQcm9wZXJ0eSh0KSxjPXM9THQodGhpcyx0KSksbz09PWM/bnVsbDpvPT09ciYmYz09PWk/YTooaT1jLGE9ZShyPW8scykpfX0odCxyLGdyKHRoaXMsInN0eWxlLiIrdCxlKSkpLmVhY2goZnVuY3Rpb24odCxlKXt2YXIgbixyLGksYSxvPSJzdHlsZS4iK2Uscz0iZW5kLiIrbztyZXR1cm4gZnVuY3Rpb24oKXt2YXIgYz10cih0aGlzLHQpLHU9Yy5vbixsPW51bGw9PWMudmFsdWVbb10/YXx8KGE9THIoZSkpOnZvaWQgMDt1PT09biYmaT09PWx8fChyPShuPXUpLmNvcHkoKSkub24ocyxpPWwpLGMub249cn19KHRoaXMuX2lkLHQpKTp0aGlzLnN0eWxlVHdlZW4odCxmdW5jdGlvbih0LGUsbil7dmFyIHIsaSxhPW4rIiI7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG89THQodGhpcyx0KTtyZXR1cm4gbz09PWE/bnVsbDpvPT09cj9pOmk9ZShyPW8sbil9fSh0LHIsZSksbikub24oImVuZC5zdHlsZS4iK3QsbnVsbCl9LHN0eWxlVHdlZW46ZnVuY3Rpb24odCxlLG4pe3ZhciByPSJzdHlsZS4iKyh0Kz0iIik7aWYoYXJndW1lbnRzLmxlbmd0aDwyKXJldHVybihyPXRoaXMudHdlZW4ocikpJiZyLl92YWx1ZTtpZihudWxsPT1lKXJldHVybiB0aGlzLnR3ZWVuKHIsbnVsbCk7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIGUpdGhyb3cgbmV3IEVycm9yO3JldHVybiB0aGlzLnR3ZWVuKHIsUHIodCxlLG51bGw9PW4/IiI6bikpfSx0ZXh0OmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLnR3ZWVuKCJ0ZXh0IiwiZnVuY3Rpb24iPT10eXBlb2YgdD9mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgZT10KHRoaXMpO3RoaXMudGV4dENvbnRlbnQ9bnVsbD09ZT8iIjplfX0oZ3IodGhpcywidGV4dCIsdCkpOmZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbigpe3RoaXMudGV4dENvbnRlbnQ9dH19KG51bGw9PXQ/IiI6dCsiIikpfSx0ZXh0VHdlZW46ZnVuY3Rpb24odCl7dmFyIGU9InRleHQiO2lmKGFyZ3VtZW50cy5sZW5ndGg8MSlyZXR1cm4oZT10aGlzLnR3ZWVuKGUpKSYmZS5fdmFsdWU7aWYobnVsbD09dClyZXR1cm4gdGhpcy50d2VlbihlLG51bGwpO2lmKCJmdW5jdGlvbiIhPXR5cGVvZiB0KXRocm93IG5ldyBFcnJvcjtyZXR1cm4gdGhpcy50d2VlbihlLGpyKHQpKX0scmVtb3ZlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMub24oImVuZC5yZW1vdmUiLCh0PXRoaXMuX2lkLGZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5wYXJlbnROb2RlO2Zvcih2YXIgbiBpbiB0aGlzLl9fdHJhbnNpdGlvbilpZigrbiE9PXQpcmV0dXJuO2UmJmUucmVtb3ZlQ2hpbGQodGhpcyl9KSk7dmFyIHR9LHR3ZWVuOmZ1bmN0aW9uKHQsZSl7dmFyIG49dGhpcy5faWQ7aWYodCs9IiIsYXJndW1lbnRzLmxlbmd0aDwyKXtmb3IodmFyIHIsaT1lcih0aGlzLm5vZGUoKSxuKS50d2VlbixhPTAsbz1pLmxlbmd0aDthPG87KythKWlmKChyPWlbYV0pLm5hbWU9PT10KXJldHVybiByLnZhbHVlO3JldHVybiBudWxsfXJldHVybiB0aGlzLmVhY2goKG51bGw9PWU/ZHI6cHIpKG4sdCxlKSl9LGRlbGF5OmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX2lkO3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuZWFjaCgoImZ1bmN0aW9uIj09dHlwZW9mIHQ/U3I6QXIpKGUsdCkpOmVyKHRoaXMubm9kZSgpLGUpLmRlbGF5fSxkdXJhdGlvbjpmdW5jdGlvbih0KXt2YXIgZT10aGlzLl9pZDtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLmVhY2goKCJmdW5jdGlvbiI9PXR5cGVvZiB0P01yOk9yKShlLHQpKTplcih0aGlzLm5vZGUoKSxlKS5kdXJhdGlvbn0sZWFzZTpmdW5jdGlvbih0KXt2YXIgZT10aGlzLl9pZDtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLmVhY2goRHIoZSx0KSk6ZXIodGhpcy5ub2RlKCksZSkuZWFzZX0sZW5kOmZ1bmN0aW9uKCl7dmFyIHQsZSxuPXRoaXMscj1uLl9pZCxpPW4uc2l6ZSgpO3JldHVybiBuZXcgUHJvbWlzZSgoZnVuY3Rpb24oYSxvKXt2YXIgcz17dmFsdWU6b30sYz17dmFsdWU6ZnVuY3Rpb24oKXswPT0tLWkmJmEoKX19O24uZWFjaCgoZnVuY3Rpb24oKXt2YXIgbj10cih0aGlzLHIpLGk9bi5vbjtpIT09dCYmKChlPSh0PWkpLmNvcHkoKSkuXy5jYW5jZWwucHVzaChzKSxlLl8uaW50ZXJydXB0LnB1c2gocyksZS5fLmVuZC5wdXNoKGMpKSxuLm9uPWV9KSl9KSl9fTt2YXIgR3I9e3RpbWU6bnVsbCxkZWxheTowLGR1cmF0aW9uOjI1MCxlYXNlOkhyfTtmdW5jdGlvbiBxcih0LGUpe2Zvcih2YXIgbjshKG49dC5fX3RyYW5zaXRpb24pfHwhKG49bltlXSk7KWlmKCEodD10LnBhcmVudE5vZGUpKXJldHVybiBHci50aW1lPXpuKCksR3I7cmV0dXJuIG59X2UucHJvdG90eXBlLmludGVycnVwdD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5lYWNoKChmdW5jdGlvbigpe29yKHRoaXMsdCl9KSl9LF9lLnByb3RvdHlwZS50cmFuc2l0aW9uPWZ1bmN0aW9uKHQpe3ZhciBlLG47dCBpbnN0YW5jZW9mIFlyPyhlPXQuX2lkLHQ9dC5fbmFtZSk6KGU9VXIoKSwobj1HcikudGltZT16bigpLHQ9bnVsbD09dD9udWxsOnQrIiIpO2Zvcih2YXIgcj10aGlzLl9ncm91cHMsaT1yLmxlbmd0aCxhPTA7YTxpOysrYSlmb3IodmFyIG8scz1yW2FdLGM9cy5sZW5ndGgsdT0wO3U8YzsrK3UpKG89c1t1XSkmJlFuKG8sdCxlLHUscyxufHxxcihvLGUpKTtyZXR1cm4gbmV3IFlyKHIsdGhpcy5fcGFyZW50cyx0LGUpfTt2YXIgWHI9W251bGxdLFpyPWZ1bmN0aW9uKHQsZSl7dmFyIG4scixpPXQuX190cmFuc2l0aW9uO2lmKGkpZm9yKHIgaW4gZT1udWxsPT1lP251bGw6ZSsiIixpKWlmKChuPWlbcl0pLnN0YXRlPjEmJm4ubmFtZT09PWUpcmV0dXJuIG5ldyBZcihbW3RdXSxYcixlLCtyKTtyZXR1cm4gbnVsbH0sSnI9ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHR9fSxRcj1mdW5jdGlvbih0LGUsbil7dGhpcy50YXJnZXQ9dCx0aGlzLnR5cGU9ZSx0aGlzLnNlbGVjdGlvbj1ufTtmdW5jdGlvbiBLcigpe2NlLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpfXZhciB0aT1mdW5jdGlvbigpe2NlLnByZXZlbnREZWZhdWx0KCksY2Uuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCl9LGVpPXtuYW1lOiJkcmFnIn0sbmk9e25hbWU6InNwYWNlIn0scmk9e25hbWU6ImhhbmRsZSJ9LGlpPXtuYW1lOiJjZW50ZXIifTtmdW5jdGlvbiBhaSh0KXtyZXR1cm5bK3RbMF0sK3RbMV1dfWZ1bmN0aW9uIG9pKHQpe3JldHVyblthaSh0WzBdKSxhaSh0WzFdKV19ZnVuY3Rpb24gc2kodCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiBEbihlLGNlLnRvdWNoZXMsdCl9fXZhciBjaT17bmFtZToieCIsaGFuZGxlczpbInciLCJlIl0ubWFwKHlpKSxpbnB1dDpmdW5jdGlvbih0LGUpe3JldHVybiBudWxsPT10P251bGw6W1srdFswXSxlWzBdWzFdXSxbK3RbMV0sZVsxXVsxXV1dfSxvdXRwdXQ6ZnVuY3Rpb24odCl7cmV0dXJuIHQmJlt0WzBdWzBdLHRbMV1bMF1dfX0sdWk9e25hbWU6InkiLGhhbmRsZXM6WyJuIiwicyJdLm1hcCh5aSksaW5wdXQ6ZnVuY3Rpb24odCxlKXtyZXR1cm4gbnVsbD09dD9udWxsOltbZVswXVswXSwrdFswXV0sW2VbMV1bMF0sK3RbMV1dXX0sb3V0cHV0OmZ1bmN0aW9uKHQpe3JldHVybiB0JiZbdFswXVsxXSx0WzFdWzFdXX19LGxpPXtuYW1lOiJ4eSIsaGFuZGxlczpbIm4iLCJ3IiwiZSIsInMiLCJudyIsIm5lIiwic3ciLCJzZSJdLm1hcCh5aSksaW5wdXQ6ZnVuY3Rpb24odCl7cmV0dXJuIG51bGw9PXQ/bnVsbDpvaSh0KX0sb3V0cHV0OmZ1bmN0aW9uKHQpe3JldHVybiB0fX0saGk9e292ZXJsYXk6ImNyb3NzaGFpciIsc2VsZWN0aW9uOiJtb3ZlIixuOiJucy1yZXNpemUiLGU6ImV3LXJlc2l6ZSIsczoibnMtcmVzaXplIix3OiJldy1yZXNpemUiLG53OiJud3NlLXJlc2l6ZSIsbmU6Im5lc3ctcmVzaXplIixzZToibndzZS1yZXNpemUiLHN3OiJuZXN3LXJlc2l6ZSJ9LGZpPXtlOiJ3Iix3OiJlIixudzoibmUiLG5lOiJudyIsc2U6InN3Iixzdzoic2UifSxkaT17bjoicyIsczoibiIsbnc6InN3IixuZToic2UiLHNlOiJuZSIsc3c6Im53In0scGk9e292ZXJsYXk6MSxzZWxlY3Rpb246MSxuOm51bGwsZToxLHM6bnVsbCx3Oi0xLG53Oi0xLG5lOjEsc2U6MSxzdzotMX0sZ2k9e292ZXJsYXk6MSxzZWxlY3Rpb246MSxuOi0xLGU6bnVsbCxzOjEsdzpudWxsLG53Oi0xLG5lOi0xLHNlOjEsc3c6MX07ZnVuY3Rpb24geWkodCl7cmV0dXJue3R5cGU6dH19ZnVuY3Rpb24gdmkoKXtyZXR1cm4hY2UuY3RybEtleSYmIWNlLmJ1dHRvbn1mdW5jdGlvbiBtaSgpe3ZhciB0PXRoaXMub3duZXJTVkdFbGVtZW50fHx0aGlzO3JldHVybiB0Lmhhc0F0dHJpYnV0ZSgidmlld0JveCIpP1tbKHQ9dC52aWV3Qm94LmJhc2VWYWwpLngsdC55XSxbdC54K3Qud2lkdGgsdC55K3QuaGVpZ2h0XV06W1swLDBdLFt0LndpZHRoLmJhc2VWYWwudmFsdWUsdC5oZWlnaHQuYmFzZVZhbC52YWx1ZV1dfWZ1bmN0aW9uIGJpKCl7cmV0dXJuIG5hdmlnYXRvci5tYXhUb3VjaFBvaW50c3x8Im9udG91Y2hzdGFydCJpbiB0aGlzfWZ1bmN0aW9uIHhpKHQpe2Zvcig7IXQuX19icnVzaDspaWYoISh0PXQucGFyZW50Tm9kZSkpcmV0dXJuO3JldHVybiB0Ll9fYnJ1c2h9ZnVuY3Rpb24gX2kodCl7cmV0dXJuIHRbMF1bMF09PT10WzFdWzBdfHx0WzBdWzFdPT09dFsxXVsxXX1mdW5jdGlvbiBraSh0KXt2YXIgZT10Ll9fYnJ1c2g7cmV0dXJuIGU/ZS5kaW0ub3V0cHV0KGUuc2VsZWN0aW9uKTpudWxsfWZ1bmN0aW9uIHdpKCl7cmV0dXJuIENpKGNpKX1mdW5jdGlvbiBFaSgpe3JldHVybiBDaSh1aSl9dmFyIFRpPWZ1bmN0aW9uKCl7cmV0dXJuIENpKGxpKX07ZnVuY3Rpb24gQ2kodCl7dmFyIGUsbj1taSxyPXZpLGk9YmksYT0hMCxvPWx0KCJzdGFydCIsImJydXNoIiwiZW5kIikscz02O2Z1bmN0aW9uIGMoZSl7dmFyIG49ZS5wcm9wZXJ0eSgiX19icnVzaCIsZykuc2VsZWN0QWxsKCIub3ZlcmxheSIpLmRhdGEoW3lpKCJvdmVybGF5IildKTtuLmVudGVyKCkuYXBwZW5kKCJyZWN0IikuYXR0cigiY2xhc3MiLCJvdmVybGF5IikuYXR0cigicG9pbnRlci1ldmVudHMiLCJhbGwiKS5hdHRyKCJjdXJzb3IiLGhpLm92ZXJsYXkpLm1lcmdlKG4pLmVhY2goKGZ1bmN0aW9uKCl7dmFyIHQ9eGkodGhpcykuZXh0ZW50O2tlKHRoaXMpLmF0dHIoIngiLHRbMF1bMF0pLmF0dHIoInkiLHRbMF1bMV0pLmF0dHIoIndpZHRoIix0WzFdWzBdLXRbMF1bMF0pLmF0dHIoImhlaWdodCIsdFsxXVsxXS10WzBdWzFdKX0pKSxlLnNlbGVjdEFsbCgiLnNlbGVjdGlvbiIpLmRhdGEoW3lpKCJzZWxlY3Rpb24iKV0pLmVudGVyKCkuYXBwZW5kKCJyZWN0IikuYXR0cigiY2xhc3MiLCJzZWxlY3Rpb24iKS5hdHRyKCJjdXJzb3IiLGhpLnNlbGVjdGlvbikuYXR0cigiZmlsbCIsIiM3NzciKS5hdHRyKCJmaWxsLW9wYWNpdHkiLC4zKS5hdHRyKCJzdHJva2UiLCIjZmZmIikuYXR0cigic2hhcGUtcmVuZGVyaW5nIiwiY3Jpc3BFZGdlcyIpO3ZhciByPWUuc2VsZWN0QWxsKCIuaGFuZGxlIikuZGF0YSh0LmhhbmRsZXMsKGZ1bmN0aW9uKHQpe3JldHVybiB0LnR5cGV9KSk7ci5leGl0KCkucmVtb3ZlKCksci5lbnRlcigpLmFwcGVuZCgicmVjdCIpLmF0dHIoImNsYXNzIiwoZnVuY3Rpb24odCl7cmV0dXJuImhhbmRsZSBoYW5kbGUtLSIrdC50eXBlfSkpLmF0dHIoImN1cnNvciIsKGZ1bmN0aW9uKHQpe3JldHVybiBoaVt0LnR5cGVdfSkpLGUuZWFjaCh1KS5hdHRyKCJmaWxsIiwibm9uZSIpLmF0dHIoInBvaW50ZXItZXZlbnRzIiwiYWxsIikub24oIm1vdXNlZG93bi5icnVzaCIsZikuZmlsdGVyKGkpLm9uKCJ0b3VjaHN0YXJ0LmJydXNoIixmKS5vbigidG91Y2htb3ZlLmJydXNoIixkKS5vbigidG91Y2hlbmQuYnJ1c2ggdG91Y2hjYW5jZWwuYnJ1c2giLHApLnN0eWxlKCJ0b3VjaC1hY3Rpb24iLCJub25lIikuc3R5bGUoIi13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvciIsInJnYmEoMCwwLDAsMCkiKX1mdW5jdGlvbiB1KCl7dmFyIHQ9a2UodGhpcyksZT14aSh0aGlzKS5zZWxlY3Rpb247ZT8odC5zZWxlY3RBbGwoIi5zZWxlY3Rpb24iKS5zdHlsZSgiZGlzcGxheSIsbnVsbCkuYXR0cigieCIsZVswXVswXSkuYXR0cigieSIsZVswXVsxXSkuYXR0cigid2lkdGgiLGVbMV1bMF0tZVswXVswXSkuYXR0cigiaGVpZ2h0IixlWzFdWzFdLWVbMF1bMV0pLHQuc2VsZWN0QWxsKCIuaGFuZGxlIikuc3R5bGUoImRpc3BsYXkiLG51bGwpLmF0dHIoIngiLChmdW5jdGlvbih0KXtyZXR1cm4iZSI9PT10LnR5cGVbdC50eXBlLmxlbmd0aC0xXT9lWzFdWzBdLXMvMjplWzBdWzBdLXMvMn0pKS5hdHRyKCJ5IiwoZnVuY3Rpb24odCl7cmV0dXJuInMiPT09dC50eXBlWzBdP2VbMV1bMV0tcy8yOmVbMF1bMV0tcy8yfSkpLmF0dHIoIndpZHRoIiwoZnVuY3Rpb24odCl7cmV0dXJuIm4iPT09dC50eXBlfHwicyI9PT10LnR5cGU/ZVsxXVswXS1lWzBdWzBdK3M6c30pKS5hdHRyKCJoZWlnaHQiLChmdW5jdGlvbih0KXtyZXR1cm4iZSI9PT10LnR5cGV8fCJ3Ij09PXQudHlwZT9lWzFdWzFdLWVbMF1bMV0rczpzfSkpKTp0LnNlbGVjdEFsbCgiLnNlbGVjdGlvbiwuaGFuZGxlIikuc3R5bGUoImRpc3BsYXkiLCJub25lIikuYXR0cigieCIsbnVsbCkuYXR0cigieSIsbnVsbCkuYXR0cigid2lkdGgiLG51bGwpLmF0dHIoImhlaWdodCIsbnVsbCl9ZnVuY3Rpb24gbCh0LGUsbil7cmV0dXJuIW4mJnQuX19icnVzaC5lbWl0dGVyfHxuZXcgaCh0LGUpfWZ1bmN0aW9uIGgodCxlKXt0aGlzLnRoYXQ9dCx0aGlzLmFyZ3M9ZSx0aGlzLnN0YXRlPXQuX19icnVzaCx0aGlzLmFjdGl2ZT0wfWZ1bmN0aW9uIGYoKXtpZigoIWV8fGNlLnRvdWNoZXMpJiZyLmFwcGx5KHRoaXMsYXJndW1lbnRzKSl7dmFyIG4saSxvLHMsYyxoLGYsZCxwLGcseSx2PXRoaXMsbT1jZS50YXJnZXQuX19kYXRhX18udHlwZSxiPSJzZWxlY3Rpb24iPT09KGEmJmNlLm1ldGFLZXk/bT0ib3ZlcmxheSI6bSk/ZWk6YSYmY2UuYWx0S2V5P2lpOnJpLHg9dD09PXVpP251bGw6cGlbbV0sXz10PT09Y2k/bnVsbDpnaVttXSxrPXhpKHYpLHc9ay5leHRlbnQsRT1rLnNlbGVjdGlvbixUPXdbMF1bMF0sQz13WzBdWzFdLFM9d1sxXVswXSxBPXdbMV1bMV0sTT0wLE89MCxEPXgmJl8mJmEmJmNlLnNoaWZ0S2V5LE49Y2UudG91Y2hlcz9zaShjZS5jaGFuZ2VkVG91Y2hlc1swXS5pZGVudGlmaWVyKTpObixCPU4odiksTD1CLEY9bCh2LGFyZ3VtZW50cywhMCkuYmVmb3Jlc3RhcnQoKTsib3ZlcmxheSI9PT1tPyhFJiYocD0hMCksay5zZWxlY3Rpb249RT1bW249dD09PXVpP1Q6QlswXSxvPXQ9PT1jaT9DOkJbMV1dLFtjPXQ9PT11aT9TOm4sZj10PT09Y2k/QTpvXV0pOihuPUVbMF1bMF0sbz1FWzBdWzFdLGM9RVsxXVswXSxmPUVbMV1bMV0pLGk9bixzPW8saD1jLGQ9Zjt2YXIgUD1rZSh2KS5hdHRyKCJwb2ludGVyLWV2ZW50cyIsIm5vbmUiKSxJPVAuc2VsZWN0QWxsKCIub3ZlcmxheSIpLmF0dHIoImN1cnNvciIsaGlbbV0pO2lmKGNlLnRvdWNoZXMpRi5tb3ZlZD1SLEYuZW5kZWQ9ejtlbHNle3ZhciBqPWtlKGNlLnZpZXcpLm9uKCJtb3VzZW1vdmUuYnJ1c2giLFIsITApLm9uKCJtb3VzZXVwLmJydXNoIix6LCEwKTthJiZqLm9uKCJrZXlkb3duLmJydXNoIixVLCEwKS5vbigia2V5dXAuYnJ1c2giLCQsITApLFRlKGNlLnZpZXcpfUtyKCksb3IodiksdS5jYWxsKHYpLEYuc3RhcnQoKX1mdW5jdGlvbiBSKCl7dmFyIHQ9Tih2KTshRHx8Z3x8eXx8KE1hdGguYWJzKHRbMF0tTFswXSk+TWF0aC5hYnModFsxXS1MWzFdKT95PSEwOmc9ITApLEw9dCxwPSEwLHRpKCksWSgpfWZ1bmN0aW9uIFkoKXt2YXIgdDtzd2l0Y2goTT1MWzBdLUJbMF0sTz1MWzFdLUJbMV0sYil7Y2FzZSBuaTpjYXNlIGVpOngmJihNPU1hdGgubWF4KFQtbixNYXRoLm1pbihTLWMsTSkpLGk9bitNLGg9YytNKSxfJiYoTz1NYXRoLm1heChDLW8sTWF0aC5taW4oQS1mLE8pKSxzPW8rTyxkPWYrTyk7YnJlYWs7Y2FzZSByaTp4PDA/KE09TWF0aC5tYXgoVC1uLE1hdGgubWluKFMtbixNKSksaT1uK00saD1jKTp4PjAmJihNPU1hdGgubWF4KFQtYyxNYXRoLm1pbihTLWMsTSkpLGk9bixoPWMrTSksXzwwPyhPPU1hdGgubWF4KEMtbyxNYXRoLm1pbihBLW8sTykpLHM9bytPLGQ9Zik6Xz4wJiYoTz1NYXRoLm1heChDLWYsTWF0aC5taW4oQS1mLE8pKSxzPW8sZD1mK08pO2JyZWFrO2Nhc2UgaWk6eCYmKGk9TWF0aC5tYXgoVCxNYXRoLm1pbihTLG4tTSp4KSksaD1NYXRoLm1heChULE1hdGgubWluKFMsYytNKngpKSksXyYmKHM9TWF0aC5tYXgoQyxNYXRoLm1pbihBLG8tTypfKSksZD1NYXRoLm1heChDLE1hdGgubWluKEEsZitPKl8pKSl9aDxpJiYoeCo9LTEsdD1uLG49YyxjPXQsdD1pLGk9aCxoPXQsbSBpbiBmaSYmSS5hdHRyKCJjdXJzb3IiLGhpW209ZmlbbV1dKSksZDxzJiYoXyo9LTEsdD1vLG89ZixmPXQsdD1zLHM9ZCxkPXQsbSBpbiBkaSYmSS5hdHRyKCJjdXJzb3IiLGhpW209ZGlbbV1dKSksay5zZWxlY3Rpb24mJihFPWsuc2VsZWN0aW9uKSxnJiYoaT1FWzBdWzBdLGg9RVsxXVswXSkseSYmKHM9RVswXVsxXSxkPUVbMV1bMV0pLEVbMF1bMF09PT1pJiZFWzBdWzFdPT09cyYmRVsxXVswXT09PWgmJkVbMV1bMV09PT1kfHwoay5zZWxlY3Rpb249W1tpLHNdLFtoLGRdXSx1LmNhbGwodiksRi5icnVzaCgpKX1mdW5jdGlvbiB6KCl7aWYoS3IoKSxjZS50b3VjaGVzKXtpZihjZS50b3VjaGVzLmxlbmd0aClyZXR1cm47ZSYmY2xlYXJUaW1lb3V0KGUpLGU9c2V0VGltZW91dCgoZnVuY3Rpb24oKXtlPW51bGx9KSw1MDApfWVsc2UgQ2UoY2UudmlldyxwKSxqLm9uKCJrZXlkb3duLmJydXNoIGtleXVwLmJydXNoIG1vdXNlbW92ZS5icnVzaCBtb3VzZXVwLmJydXNoIixudWxsKTtQLmF0dHIoInBvaW50ZXItZXZlbnRzIiwiYWxsIiksSS5hdHRyKCJjdXJzb3IiLGhpLm92ZXJsYXkpLGsuc2VsZWN0aW9uJiYoRT1rLnNlbGVjdGlvbiksX2koRSkmJihrLnNlbGVjdGlvbj1udWxsLHUuY2FsbCh2KSksRi5lbmQoKX1mdW5jdGlvbiBVKCl7c3dpdGNoKGNlLmtleUNvZGUpe2Nhc2UgMTY6RD14JiZfO2JyZWFrO2Nhc2UgMTg6Yj09PXJpJiYoeCYmKGM9aC1NKngsbj1pK00qeCksXyYmKGY9ZC1PKl8sbz1zK08qXyksYj1paSxZKCkpO2JyZWFrO2Nhc2UgMzI6YiE9PXJpJiZiIT09aWl8fCh4PDA/Yz1oLU06eD4wJiYobj1pLU0pLF88MD9mPWQtTzpfPjAmJihvPXMtTyksYj1uaSxJLmF0dHIoImN1cnNvciIsaGkuc2VsZWN0aW9uKSxZKCkpO2JyZWFrO2RlZmF1bHQ6cmV0dXJufXRpKCl9ZnVuY3Rpb24gJCgpe3N3aXRjaChjZS5rZXlDb2RlKXtjYXNlIDE2OkQmJihnPXk9RD0hMSxZKCkpO2JyZWFrO2Nhc2UgMTg6Yj09PWlpJiYoeDwwP2M9aDp4PjAmJihuPWkpLF88MD9mPWQ6Xz4wJiYobz1zKSxiPXJpLFkoKSk7YnJlYWs7Y2FzZSAzMjpiPT09bmkmJihjZS5hbHRLZXk/KHgmJihjPWgtTSp4LG49aStNKngpLF8mJihmPWQtTypfLG89cytPKl8pLGI9aWkpOih4PDA/Yz1oOng+MCYmKG49aSksXzwwP2Y9ZDpfPjAmJihvPXMpLGI9cmkpLEkuYXR0cigiY3Vyc29yIixoaVttXSksWSgpKTticmVhaztkZWZhdWx0OnJldHVybn10aSgpfX1mdW5jdGlvbiBkKCl7bCh0aGlzLGFyZ3VtZW50cykubW92ZWQoKX1mdW5jdGlvbiBwKCl7bCh0aGlzLGFyZ3VtZW50cykuZW5kZWQoKX1mdW5jdGlvbiBnKCl7dmFyIGU9dGhpcy5fX2JydXNofHx7c2VsZWN0aW9uOm51bGx9O3JldHVybiBlLmV4dGVudD1vaShuLmFwcGx5KHRoaXMsYXJndW1lbnRzKSksZS5kaW09dCxlfXJldHVybiBjLm1vdmU9ZnVuY3Rpb24oZSxuKXtlLnNlbGVjdGlvbj9lLm9uKCJzdGFydC5icnVzaCIsKGZ1bmN0aW9uKCl7bCh0aGlzLGFyZ3VtZW50cykuYmVmb3Jlc3RhcnQoKS5zdGFydCgpfSkpLm9uKCJpbnRlcnJ1cHQuYnJ1c2ggZW5kLmJydXNoIiwoZnVuY3Rpb24oKXtsKHRoaXMsYXJndW1lbnRzKS5lbmQoKX0pKS50d2VlbigiYnJ1c2giLChmdW5jdGlvbigpe3ZhciBlPXRoaXMscj1lLl9fYnJ1c2gsaT1sKGUsYXJndW1lbnRzKSxhPXIuc2VsZWN0aW9uLG89dC5pbnB1dCgiZnVuY3Rpb24iPT10eXBlb2Ygbj9uLmFwcGx5KHRoaXMsYXJndW1lbnRzKTpuLHIuZXh0ZW50KSxzPUFuKGEsbyk7ZnVuY3Rpb24gYyh0KXtyLnNlbGVjdGlvbj0xPT09dCYmbnVsbD09PW8/bnVsbDpzKHQpLHUuY2FsbChlKSxpLmJydXNoKCl9cmV0dXJuIG51bGwhPT1hJiZudWxsIT09bz9jOmMoMSl9KSk6ZS5lYWNoKChmdW5jdGlvbigpe3ZhciBlPXRoaXMscj1hcmd1bWVudHMsaT1lLl9fYnJ1c2gsYT10LmlucHV0KCJmdW5jdGlvbiI9PXR5cGVvZiBuP24uYXBwbHkoZSxyKTpuLGkuZXh0ZW50KSxvPWwoZSxyKS5iZWZvcmVzdGFydCgpO29yKGUpLGkuc2VsZWN0aW9uPW51bGw9PT1hP251bGw6YSx1LmNhbGwoZSksby5zdGFydCgpLmJydXNoKCkuZW5kKCl9KSl9LGMuY2xlYXI9ZnVuY3Rpb24odCl7Yy5tb3ZlKHQsbnVsbCl9LGgucHJvdG90eXBlPXtiZWZvcmVzdGFydDpmdW5jdGlvbigpe3JldHVybiAxPT0rK3RoaXMuYWN0aXZlJiYodGhpcy5zdGF0ZS5lbWl0dGVyPXRoaXMsdGhpcy5zdGFydGluZz0hMCksdGhpc30sc3RhcnQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zdGFydGluZz8odGhpcy5zdGFydGluZz0hMSx0aGlzLmVtaXQoInN0YXJ0IikpOnRoaXMuZW1pdCgiYnJ1c2giKSx0aGlzfSxicnVzaDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmVtaXQoImJydXNoIiksdGhpc30sZW5kOmZ1bmN0aW9uKCl7cmV0dXJuIDA9PS0tdGhpcy5hY3RpdmUmJihkZWxldGUgdGhpcy5zdGF0ZS5lbWl0dGVyLHRoaXMuZW1pdCgiZW5kIikpLHRoaXN9LGVtaXQ6ZnVuY3Rpb24oZSl7cGUobmV3IFFyKGMsZSx0Lm91dHB1dCh0aGlzLnN0YXRlLnNlbGVjdGlvbikpLG8uYXBwbHksbyxbZSx0aGlzLnRoYXQsdGhpcy5hcmdzXSl9fSxjLmV4dGVudD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj0iZnVuY3Rpb24iPT10eXBlb2YgdD90OkpyKG9pKHQpKSxjKTpufSxjLmZpbHRlcj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj0iZnVuY3Rpb24iPT10eXBlb2YgdD90OkpyKCEhdCksYyk6cn0sYy50b3VjaGFibGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpKcighIXQpLGMpOml9LGMuaGFuZGxlU2l6ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocz0rdCxjKTpzfSxjLmtleU1vZGlmaWVycz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT0hIXQsYyk6YX0sYy5vbj1mdW5jdGlvbigpe3ZhciB0PW8ub24uYXBwbHkobyxhcmd1bWVudHMpO3JldHVybiB0PT09bz9jOnR9LGN9dmFyIFNpPU1hdGguY29zLEFpPU1hdGguc2luLE1pPU1hdGguUEksT2k9TWkvMixEaT0yKk1pLE5pPU1hdGgubWF4O2Z1bmN0aW9uIEJpKHQpe3JldHVybiBmdW5jdGlvbihlLG4pe3JldHVybiB0KGUuc291cmNlLnZhbHVlK2UudGFyZ2V0LnZhbHVlLG4uc291cmNlLnZhbHVlK24udGFyZ2V0LnZhbHVlKX19dmFyIExpPWZ1bmN0aW9uKCl7dmFyIHQ9MCxlPW51bGwsbj1udWxsLHI9bnVsbDtmdW5jdGlvbiBpKGkpe3ZhciBhLG8scyxjLHUsbCxoPWkubGVuZ3RoLGY9W10sZD1rKGgpLHA9W10sZz1bXSx5PWcuZ3JvdXBzPW5ldyBBcnJheShoKSx2PW5ldyBBcnJheShoKmgpO2ZvcihhPTAsdT0tMTsrK3U8aDspe2ZvcihvPTAsbD0tMTsrK2w8aDspbys9aVt1XVtsXTtmLnB1c2gobykscC5wdXNoKGsoaCkpLGErPW99Zm9yKGUmJmQuc29ydCgoZnVuY3Rpb24odCxuKXtyZXR1cm4gZShmW3RdLGZbbl0pfSkpLG4mJnAuZm9yRWFjaCgoZnVuY3Rpb24odCxlKXt0LnNvcnQoKGZ1bmN0aW9uKHQscil7cmV0dXJuIG4oaVtlXVt0XSxpW2VdW3JdKX0pKX0pKSxjPShhPU5pKDAsRGktdCpoKS9hKT90OkRpL2gsbz0wLHU9LTE7Kyt1PGg7KXtmb3Iocz1vLGw9LTE7KytsPGg7KXt2YXIgbT1kW3VdLGI9cFttXVtsXSx4PWlbbV1bYl0sXz1vLHc9bys9eCphO3ZbYipoK21dPXtpbmRleDptLHN1YmluZGV4OmIsc3RhcnRBbmdsZTpfLGVuZEFuZ2xlOncsdmFsdWU6eH19eVttXT17aW5kZXg6bSxzdGFydEFuZ2xlOnMsZW5kQW5nbGU6byx2YWx1ZTpmW21dfSxvKz1jfWZvcih1PS0xOysrdTxoOylmb3IobD11LTE7KytsPGg7KXt2YXIgRT12W2wqaCt1XSxUPXZbdSpoK2xdOyhFLnZhbHVlfHxULnZhbHVlKSYmZy5wdXNoKEUudmFsdWU8VC52YWx1ZT97c291cmNlOlQsdGFyZ2V0OkV9Ontzb3VyY2U6RSx0YXJnZXQ6VH0pfXJldHVybiByP2cuc29ydChyKTpnfXJldHVybiBpLnBhZEFuZ2xlPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PU5pKDAsZSksaSk6dH0saS5zb3J0R3JvdXBzPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPXQsaSk6ZX0saS5zb3J0U3ViZ3JvdXBzPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPXQsaSk6bn0saS5zb3J0Q2hvcmRzPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhudWxsPT10P3I9bnVsbDoocj1CaSh0KSkuXz10LGkpOnImJnIuX30saX0sRmk9QXJyYXkucHJvdG90eXBlLnNsaWNlLFBpPWZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0fX0sSWk9TWF0aC5QSSxqaT0yKklpLFJpPWppLTFlLTY7ZnVuY3Rpb24gWWkoKXt0aGlzLl94MD10aGlzLl95MD10aGlzLl94MT10aGlzLl95MT1udWxsLHRoaXMuXz0iIn1mdW5jdGlvbiB6aSgpe3JldHVybiBuZXcgWWl9WWkucHJvdG90eXBlPXppLnByb3RvdHlwZT17Y29uc3RydWN0b3I6WWksbW92ZVRvOmZ1bmN0aW9uKHQsZSl7dGhpcy5fKz0iTSIrKHRoaXMuX3gwPXRoaXMuX3gxPSt0KSsiLCIrKHRoaXMuX3kwPXRoaXMuX3kxPStlKX0sY2xvc2VQYXRoOmZ1bmN0aW9uKCl7bnVsbCE9PXRoaXMuX3gxJiYodGhpcy5feDE9dGhpcy5feDAsdGhpcy5feTE9dGhpcy5feTAsdGhpcy5fKz0iWiIpfSxsaW5lVG86ZnVuY3Rpb24odCxlKXt0aGlzLl8rPSJMIisodGhpcy5feDE9K3QpKyIsIisodGhpcy5feTE9K2UpfSxxdWFkcmF0aWNDdXJ2ZVRvOmZ1bmN0aW9uKHQsZSxuLHIpe3RoaXMuXys9IlEiKyArdCsiLCIrICtlKyIsIisodGhpcy5feDE9K24pKyIsIisodGhpcy5feTE9K3IpfSxiZXppZXJDdXJ2ZVRvOmZ1bmN0aW9uKHQsZSxuLHIsaSxhKXt0aGlzLl8rPSJDIisgK3QrIiwiKyArZSsiLCIrICtuKyIsIisgK3IrIiwiKyh0aGlzLl94MT0raSkrIiwiKyh0aGlzLl95MT0rYSl9LGFyY1RvOmZ1bmN0aW9uKHQsZSxuLHIsaSl7dD0rdCxlPStlLG49K24scj0rcixpPStpO3ZhciBhPXRoaXMuX3gxLG89dGhpcy5feTEscz1uLXQsYz1yLWUsdT1hLXQsbD1vLWUsaD11KnUrbCpsO2lmKGk8MCl0aHJvdyBuZXcgRXJyb3IoIm5lZ2F0aXZlIHJhZGl1czogIitpKTtpZihudWxsPT09dGhpcy5feDEpdGhpcy5fKz0iTSIrKHRoaXMuX3gxPXQpKyIsIisodGhpcy5feTE9ZSk7ZWxzZSBpZihoPjFlLTYpaWYoTWF0aC5hYnMobCpzLWMqdSk+MWUtNiYmaSl7dmFyIGY9bi1hLGQ9ci1vLHA9cypzK2MqYyxnPWYqZitkKmQseT1NYXRoLnNxcnQocCksdj1NYXRoLnNxcnQoaCksbT1pKk1hdGgudGFuKChJaS1NYXRoLmFjb3MoKHAraC1nKS8oMip5KnYpKSkvMiksYj1tL3YseD1tL3k7TWF0aC5hYnMoYi0xKT4xZS02JiYodGhpcy5fKz0iTCIrKHQrYip1KSsiLCIrKGUrYipsKSksdGhpcy5fKz0iQSIraSsiLCIraSsiLDAsMCwiKyArKGwqZj51KmQpKyIsIisodGhpcy5feDE9dCt4KnMpKyIsIisodGhpcy5feTE9ZSt4KmMpfWVsc2UgdGhpcy5fKz0iTCIrKHRoaXMuX3gxPXQpKyIsIisodGhpcy5feTE9ZSk7ZWxzZTt9LGFyYzpmdW5jdGlvbih0LGUsbixyLGksYSl7dD0rdCxlPStlLGE9ISFhO3ZhciBvPShuPStuKSpNYXRoLmNvcyhyKSxzPW4qTWF0aC5zaW4ociksYz10K28sdT1lK3MsbD0xXmEsaD1hP3ItaTppLXI7aWYobjwwKXRocm93IG5ldyBFcnJvcigibmVnYXRpdmUgcmFkaXVzOiAiK24pO251bGw9PT10aGlzLl94MT90aGlzLl8rPSJNIitjKyIsIit1OihNYXRoLmFicyh0aGlzLl94MS1jKT4xZS02fHxNYXRoLmFicyh0aGlzLl95MS11KT4xZS02KSYmKHRoaXMuXys9IkwiK2MrIiwiK3UpLG4mJihoPDAmJihoPWglamkramkpLGg+Umk/dGhpcy5fKz0iQSIrbisiLCIrbisiLDAsMSwiK2wrIiwiKyh0LW8pKyIsIisoZS1zKSsiQSIrbisiLCIrbisiLDAsMSwiK2wrIiwiKyh0aGlzLl94MT1jKSsiLCIrKHRoaXMuX3kxPXUpOmg+MWUtNiYmKHRoaXMuXys9IkEiK24rIiwiK24rIiwwLCIrICsoaD49SWkpKyIsIitsKyIsIisodGhpcy5feDE9dCtuKk1hdGguY29zKGkpKSsiLCIrKHRoaXMuX3kxPWUrbipNYXRoLnNpbihpKSkpKX0scmVjdDpmdW5jdGlvbih0LGUsbixyKXt0aGlzLl8rPSJNIisodGhpcy5feDA9dGhpcy5feDE9K3QpKyIsIisodGhpcy5feTA9dGhpcy5feTE9K2UpKyJoIisgK24rInYiKyArcisiaCIrLW4rIloifSx0b1N0cmluZzpmdW5jdGlvbigpe3JldHVybiB0aGlzLl99fTt2YXIgVWk9emk7ZnVuY3Rpb24gJGkodCl7cmV0dXJuIHQuc291cmNlfWZ1bmN0aW9uIFdpKHQpe3JldHVybiB0LnRhcmdldH1mdW5jdGlvbiBWaSh0KXtyZXR1cm4gdC5yYWRpdXN9ZnVuY3Rpb24gSGkodCl7cmV0dXJuIHQuc3RhcnRBbmdsZX1mdW5jdGlvbiBHaSh0KXtyZXR1cm4gdC5lbmRBbmdsZX12YXIgcWk9ZnVuY3Rpb24oKXt2YXIgdD0kaSxlPVdpLG49Vmkscj1IaSxpPUdpLGE9bnVsbDtmdW5jdGlvbiBvKCl7dmFyIG8scz1GaS5jYWxsKGFyZ3VtZW50cyksYz10LmFwcGx5KHRoaXMscyksdT1lLmFwcGx5KHRoaXMscyksbD0rbi5hcHBseSh0aGlzLChzWzBdPWMscykpLGg9ci5hcHBseSh0aGlzLHMpLU9pLGY9aS5hcHBseSh0aGlzLHMpLU9pLGQ9bCpTaShoKSxwPWwqQWkoaCksZz0rbi5hcHBseSh0aGlzLChzWzBdPXUscykpLHk9ci5hcHBseSh0aGlzLHMpLU9pLHY9aS5hcHBseSh0aGlzLHMpLU9pO2lmKGF8fChhPW89VWkoKSksYS5tb3ZlVG8oZCxwKSxhLmFyYygwLDAsbCxoLGYpLGg9PT15JiZmPT09dnx8KGEucXVhZHJhdGljQ3VydmVUbygwLDAsZypTaSh5KSxnKkFpKHkpKSxhLmFyYygwLDAsZyx5LHYpKSxhLnF1YWRyYXRpY0N1cnZlVG8oMCwwLGQscCksYS5jbG9zZVBhdGgoKSxvKXJldHVybiBhPW51bGwsbysiInx8bnVsbH1yZXR1cm4gby5yYWRpdXM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpQaSgrdCksbyk6bn0sby5zdGFydEFuZ2xlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6UGkoK3QpLG8pOnJ9LG8uZW5kQW5nbGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpQaSgrdCksbyk6aX0sby5zb3VyY2U9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9ZSxvKTp0fSxvLnRhcmdldD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT10LG8pOmV9LG8uY29udGV4dD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT1udWxsPT10P251bGw6dCxvKTphfSxvfTtmdW5jdGlvbiBYaSgpe31mdW5jdGlvbiBaaSh0LGUpe3ZhciBuPW5ldyBYaTtpZih0IGluc3RhbmNlb2YgWGkpdC5lYWNoKChmdW5jdGlvbih0LGUpe24uc2V0KGUsdCl9KSk7ZWxzZSBpZihBcnJheS5pc0FycmF5KHQpKXt2YXIgcixpPS0xLGE9dC5sZW5ndGg7aWYobnVsbD09ZSlmb3IoOysraTxhOyluLnNldChpLHRbaV0pO2Vsc2UgZm9yKDsrK2k8YTspbi5zZXQoZShyPXRbaV0saSx0KSxyKX1lbHNlIGlmKHQpZm9yKHZhciBvIGluIHQpbi5zZXQobyx0W29dKTtyZXR1cm4gbn1YaS5wcm90b3R5cGU9WmkucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpYaSxoYXM6ZnVuY3Rpb24odCl7cmV0dXJuIiQiK3QgaW4gdGhpc30sZ2V0OmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzWyIkIit0XX0sc2V0OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXNbIiQiK3RdPWUsdGhpc30scmVtb3ZlOmZ1bmN0aW9uKHQpe3ZhciBlPSIkIit0O3JldHVybiBlIGluIHRoaXMmJmRlbGV0ZSB0aGlzW2VdfSxjbGVhcjpmdW5jdGlvbigpe2Zvcih2YXIgdCBpbiB0aGlzKSIkIj09PXRbMF0mJmRlbGV0ZSB0aGlzW3RdfSxrZXlzOmZ1bmN0aW9uKCl7dmFyIHQ9W107Zm9yKHZhciBlIGluIHRoaXMpIiQiPT09ZVswXSYmdC5wdXNoKGUuc2xpY2UoMSkpO3JldHVybiB0fSx2YWx1ZXM6ZnVuY3Rpb24oKXt2YXIgdD1bXTtmb3IodmFyIGUgaW4gdGhpcykiJCI9PT1lWzBdJiZ0LnB1c2godGhpc1tlXSk7cmV0dXJuIHR9LGVudHJpZXM6ZnVuY3Rpb24oKXt2YXIgdD1bXTtmb3IodmFyIGUgaW4gdGhpcykiJCI9PT1lWzBdJiZ0LnB1c2goe2tleTplLnNsaWNlKDEpLHZhbHVlOnRoaXNbZV19KTtyZXR1cm4gdH0sc2l6ZTpmdW5jdGlvbigpe3ZhciB0PTA7Zm9yKHZhciBlIGluIHRoaXMpIiQiPT09ZVswXSYmKyt0O3JldHVybiB0fSxlbXB0eTpmdW5jdGlvbigpe2Zvcih2YXIgdCBpbiB0aGlzKWlmKCIkIj09PXRbMF0pcmV0dXJuITE7cmV0dXJuITB9LGVhY2g6ZnVuY3Rpb24odCl7Zm9yKHZhciBlIGluIHRoaXMpIiQiPT09ZVswXSYmdCh0aGlzW2VdLGUuc2xpY2UoMSksdGhpcyl9fTt2YXIgSmk9WmksUWk9ZnVuY3Rpb24oKXt2YXIgdCxlLG4scj1bXSxpPVtdO2Z1bmN0aW9uIGEobixpLG8scyl7aWYoaT49ci5sZW5ndGgpcmV0dXJuIG51bGwhPXQmJm4uc29ydCh0KSxudWxsIT1lP2Uobik6bjtmb3IodmFyIGMsdSxsLGg9LTEsZj1uLmxlbmd0aCxkPXJbaSsrXSxwPUppKCksZz1vKCk7KytoPGY7KShsPXAuZ2V0KGM9ZCh1PW5baF0pKyIiKSk/bC5wdXNoKHUpOnAuc2V0KGMsW3VdKTtyZXR1cm4gcC5lYWNoKChmdW5jdGlvbih0LGUpe3MoZyxlLGEodCxpLG8scykpfSkpLGd9cmV0dXJuIG49e29iamVjdDpmdW5jdGlvbih0KXtyZXR1cm4gYSh0LDAsS2ksdGEpfSxtYXA6ZnVuY3Rpb24odCl7cmV0dXJuIGEodCwwLGVhLG5hKX0sZW50cmllczpmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24gdChuLGEpe2lmKCsrYT5yLmxlbmd0aClyZXR1cm4gbjt2YXIgbyxzPWlbYS0xXTtyZXR1cm4gbnVsbCE9ZSYmYT49ci5sZW5ndGg/bz1uLmVudHJpZXMoKToobz1bXSxuLmVhY2goKGZ1bmN0aW9uKGUsbil7by5wdXNoKHtrZXk6bix2YWx1ZXM6dChlLGEpfSl9KSkpLG51bGwhPXM/by5zb3J0KChmdW5jdGlvbih0LGUpe3JldHVybiBzKHQua2V5LGUua2V5KX0pKTpvfShhKHQsMCxlYSxuYSksMCl9LGtleTpmdW5jdGlvbih0KXtyZXR1cm4gci5wdXNoKHQpLG59LHNvcnRLZXlzOmZ1bmN0aW9uKHQpe3JldHVybiBpW3IubGVuZ3RoLTFdPXQsbn0sc29ydFZhbHVlczpmdW5jdGlvbihlKXtyZXR1cm4gdD1lLG59LHJvbGx1cDpmdW5jdGlvbih0KXtyZXR1cm4gZT10LG59fX07ZnVuY3Rpb24gS2koKXtyZXR1cm57fX1mdW5jdGlvbiB0YSh0LGUsbil7dFtlXT1ufWZ1bmN0aW9uIGVhKCl7cmV0dXJuIEppKCl9ZnVuY3Rpb24gbmEodCxlLG4pe3Quc2V0KGUsbil9ZnVuY3Rpb24gcmEoKXt9dmFyIGlhPUppLnByb3RvdHlwZTtmdW5jdGlvbiBhYSh0LGUpe3ZhciBuPW5ldyByYTtpZih0IGluc3RhbmNlb2YgcmEpdC5lYWNoKChmdW5jdGlvbih0KXtuLmFkZCh0KX0pKTtlbHNlIGlmKHQpe3ZhciByPS0xLGk9dC5sZW5ndGg7aWYobnVsbD09ZSlmb3IoOysrcjxpOyluLmFkZCh0W3JdKTtlbHNlIGZvcig7KytyPGk7KW4uYWRkKGUodFtyXSxyLHQpKX1yZXR1cm4gbn1yYS5wcm90b3R5cGU9YWEucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpyYSxoYXM6aWEuaGFzLGFkZDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpc1siJCIrKHQrPSIiKV09dCx0aGlzfSxyZW1vdmU6aWEucmVtb3ZlLGNsZWFyOmlhLmNsZWFyLHZhbHVlczppYS5rZXlzLHNpemU6aWEuc2l6ZSxlbXB0eTppYS5lbXB0eSxlYWNoOmlhLmVhY2h9O3ZhciBvYT1hYSxzYT1mdW5jdGlvbih0KXt2YXIgZT1bXTtmb3IodmFyIG4gaW4gdCllLnB1c2gobik7cmV0dXJuIGV9LGNhPWZ1bmN0aW9uKHQpe3ZhciBlPVtdO2Zvcih2YXIgbiBpbiB0KWUucHVzaCh0W25dKTtyZXR1cm4gZX0sdWE9ZnVuY3Rpb24odCl7dmFyIGU9W107Zm9yKHZhciBuIGluIHQpZS5wdXNoKHtrZXk6bix2YWx1ZTp0W25dfSk7cmV0dXJuIGV9LGxhPU1hdGguUEkvMTgwLGhhPTE4MC9NYXRoLlBJO2Z1bmN0aW9uIGZhKHQpe2lmKHQgaW5zdGFuY2VvZiBnYSlyZXR1cm4gbmV3IGdhKHQubCx0LmEsdC5iLHQub3BhY2l0eSk7aWYodCBpbnN0YW5jZW9mIHdhKXJldHVybiBFYSh0KTt0IGluc3RhbmNlb2YgcWV8fCh0PUhlKHQpKTt2YXIgZSxuLHI9YmEodC5yKSxpPWJhKHQuZyksYT1iYSh0LmIpLG89eWEoKC4yMjI1MDQ1KnIrLjcxNjg3ODYqaSsuMDYwNjE2OSphKS8xKTtyZXR1cm4gcj09PWkmJmk9PT1hP2U9bj1vOihlPXlhKCguNDM2MDc0NypyKy4zODUwNjQ5KmkrLjE0MzA4MDQqYSkvLjk2NDIyKSxuPXlhKCguMDEzOTMyMipyKy4wOTcxMDQ1KmkrLjcxNDE3MzMqYSkvLjgyNTIxKSksbmV3IGdhKDExNipvLTE2LDUwMCooZS1vKSwyMDAqKG8tbiksdC5vcGFjaXR5KX1mdW5jdGlvbiBkYSh0LGUpe3JldHVybiBuZXcgZ2EodCwwLDAsbnVsbD09ZT8xOmUpfWZ1bmN0aW9uIHBhKHQsZSxuLHIpe3JldHVybiAxPT09YXJndW1lbnRzLmxlbmd0aD9mYSh0KTpuZXcgZ2EodCxlLG4sbnVsbD09cj8xOnIpfWZ1bmN0aW9uIGdhKHQsZSxuLHIpe3RoaXMubD0rdCx0aGlzLmE9K2UsdGhpcy5iPStuLHRoaXMub3BhY2l0eT0rcn1mdW5jdGlvbiB5YSh0KXtyZXR1cm4gdD42LzI5Kig2LzI5KSooNi8yOSk/TWF0aC5wb3codCwxLzMpOnQvKDYvMjkqMyooNi8yOSkpKzQvMjl9ZnVuY3Rpb24gdmEodCl7cmV0dXJuIHQ+Ni8yOT90KnQqdDo2LzI5KjMqKDYvMjkpKih0LTQvMjkpfWZ1bmN0aW9uIG1hKHQpe3JldHVybiAyNTUqKHQ8PS4wMDMxMzA4PzEyLjkyKnQ6MS4wNTUqTWF0aC5wb3codCwxLzIuNCktLjA1NSl9ZnVuY3Rpb24gYmEodCl7cmV0dXJuKHQvPTI1NSk8PS4wNDA0NT90LzEyLjkyOk1hdGgucG93KCh0Ky4wNTUpLzEuMDU1LDIuNCl9ZnVuY3Rpb24geGEodCl7aWYodCBpbnN0YW5jZW9mIHdhKXJldHVybiBuZXcgd2EodC5oLHQuYyx0LmwsdC5vcGFjaXR5KTtpZih0IGluc3RhbmNlb2YgZ2F8fCh0PWZhKHQpKSwwPT09dC5hJiYwPT09dC5iKXJldHVybiBuZXcgd2EoTmFOLDA8dC5sJiZ0Lmw8MTAwPzA6TmFOLHQubCx0Lm9wYWNpdHkpO3ZhciBlPU1hdGguYXRhbjIodC5iLHQuYSkqaGE7cmV0dXJuIG5ldyB3YShlPDA/ZSszNjA6ZSxNYXRoLnNxcnQodC5hKnQuYSt0LmIqdC5iKSx0LmwsdC5vcGFjaXR5KX1mdW5jdGlvbiBfYSh0LGUsbixyKXtyZXR1cm4gMT09PWFyZ3VtZW50cy5sZW5ndGg/eGEodCk6bmV3IHdhKG4sZSx0LG51bGw9PXI/MTpyKX1mdW5jdGlvbiBrYSh0LGUsbixyKXtyZXR1cm4gMT09PWFyZ3VtZW50cy5sZW5ndGg/eGEodCk6bmV3IHdhKHQsZSxuLG51bGw9PXI/MTpyKX1mdW5jdGlvbiB3YSh0LGUsbixyKXt0aGlzLmg9K3QsdGhpcy5jPStlLHRoaXMubD0rbix0aGlzLm9wYWNpdHk9K3J9ZnVuY3Rpb24gRWEodCl7aWYoaXNOYU4odC5oKSlyZXR1cm4gbmV3IGdhKHQubCwwLDAsdC5vcGFjaXR5KTt2YXIgZT10LmgqbGE7cmV0dXJuIG5ldyBnYSh0LmwsTWF0aC5jb3MoZSkqdC5jLE1hdGguc2luKGUpKnQuYyx0Lm9wYWNpdHkpfVNlKGdhLHBhLEFlKE1lLHticmlnaHRlcjpmdW5jdGlvbih0KXtyZXR1cm4gbmV3IGdhKHRoaXMubCsxOCoobnVsbD09dD8xOnQpLHRoaXMuYSx0aGlzLmIsdGhpcy5vcGFjaXR5KX0sZGFya2VyOmZ1bmN0aW9uKHQpe3JldHVybiBuZXcgZ2EodGhpcy5sLTE4KihudWxsPT10PzE6dCksdGhpcy5hLHRoaXMuYix0aGlzLm9wYWNpdHkpfSxyZ2I6ZnVuY3Rpb24oKXt2YXIgdD0odGhpcy5sKzE2KS8xMTYsZT1pc05hTih0aGlzLmEpP3Q6dCt0aGlzLmEvNTAwLG49aXNOYU4odGhpcy5iKT90OnQtdGhpcy5iLzIwMDtyZXR1cm4gbmV3IHFlKG1hKDMuMTMzODU2MSooZT0uOTY0MjIqdmEoZSkpLTEuNjE2ODY2NyoodD0xKnZhKHQpKS0uNDkwNjE0Nioobj0uODI1MjEqdmEobikpKSxtYSgtLjk3ODc2ODQqZSsxLjkxNjE0MTUqdCsuMDMzNDU0Km4pLG1hKC4wNzE5NDUzKmUtLjIyODk5MTQqdCsxLjQwNTI0MjcqbiksdGhpcy5vcGFjaXR5KX19KSksU2Uod2Esa2EsQWUoTWUse2JyaWdodGVyOmZ1bmN0aW9uKHQpe3JldHVybiBuZXcgd2EodGhpcy5oLHRoaXMuYyx0aGlzLmwrMTgqKG51bGw9PXQ/MTp0KSx0aGlzLm9wYWNpdHkpfSxkYXJrZXI6ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyB3YSh0aGlzLmgsdGhpcy5jLHRoaXMubC0xOCoobnVsbD09dD8xOnQpLHRoaXMub3BhY2l0eSl9LHJnYjpmdW5jdGlvbigpe3JldHVybiBFYSh0aGlzKS5yZ2IoKX19KSk7dmFyIFRhPS0uMjkyMjcsQ2E9LTEuNzg4NDUwMzgwNixTYT0zLjUxNzI5ODI0MzgsQWE9LS42NTU3NjM2NjY3OTk5OTk5O2Z1bmN0aW9uIE1hKHQpe2lmKHQgaW5zdGFuY2VvZiBEYSlyZXR1cm4gbmV3IERhKHQuaCx0LnMsdC5sLHQub3BhY2l0eSk7dCBpbnN0YW5jZW9mIHFlfHwodD1IZSh0KSk7dmFyIGU9dC5yLzI1NSxuPXQuZy8yNTUscj10LmIvMjU1LGk9KEFhKnIrQ2EqZS1TYSpuKS8oQWErQ2EtU2EpLGE9ci1pLG89KDEuOTcyOTQqKG4taSktVGEqYSkvLS45MDY0OSxzPU1hdGguc3FydChvKm8rYSphKS8oMS45NzI5NCppKigxLWkpKSxjPXM/TWF0aC5hdGFuMihvLGEpKmhhLTEyMDpOYU47cmV0dXJuIG5ldyBEYShjPDA/YyszNjA6YyxzLGksdC5vcGFjaXR5KX1mdW5jdGlvbiBPYSh0LGUsbixyKXtyZXR1cm4gMT09PWFyZ3VtZW50cy5sZW5ndGg/TWEodCk6bmV3IERhKHQsZSxuLG51bGw9PXI/MTpyKX1mdW5jdGlvbiBEYSh0LGUsbixyKXt0aGlzLmg9K3QsdGhpcy5zPStlLHRoaXMubD0rbix0aGlzLm9wYWNpdHk9K3J9U2UoRGEsT2EsQWUoTWUse2JyaWdodGVyOmZ1bmN0aW9uKHQpe3JldHVybiB0PW51bGw9PXQ/MS8uNzpNYXRoLnBvdygxLy43LHQpLG5ldyBEYSh0aGlzLmgsdGhpcy5zLHRoaXMubCp0LHRoaXMub3BhY2l0eSl9LGRhcmtlcjpmdW5jdGlvbih0KXtyZXR1cm4gdD1udWxsPT10Py43Ok1hdGgucG93KC43LHQpLG5ldyBEYSh0aGlzLmgsdGhpcy5zLHRoaXMubCp0LHRoaXMub3BhY2l0eSl9LHJnYjpmdW5jdGlvbigpe3ZhciB0PWlzTmFOKHRoaXMuaCk/MDoodGhpcy5oKzEyMCkqbGEsZT0rdGhpcy5sLG49aXNOYU4odGhpcy5zKT8wOnRoaXMucyplKigxLWUpLHI9TWF0aC5jb3ModCksaT1NYXRoLnNpbih0KTtyZXR1cm4gbmV3IHFlKDI1NSooZStuKigtLjE0ODYxKnIrMS43ODI3NyppKSksMjU1KihlK24qKFRhKnIrLS45MDY0OSppKSksMjU1KihlK24qKDEuOTcyOTQqcikpLHRoaXMub3BhY2l0eSl9fSkpO3ZhciBOYT1BcnJheS5wcm90b3R5cGUuc2xpY2UsQmE9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdC1lfSxMYT1mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdH19LEZhPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciBuLHI9LTEsaT1lLmxlbmd0aDsrK3I8aTspaWYobj1QYSh0LGVbcl0pKXJldHVybiBuO3JldHVybiAwfTtmdW5jdGlvbiBQYSh0LGUpe2Zvcih2YXIgbj1lWzBdLHI9ZVsxXSxpPS0xLGE9MCxvPXQubGVuZ3RoLHM9by0xO2E8bztzPWErKyl7dmFyIGM9dFthXSx1PWNbMF0sbD1jWzFdLGg9dFtzXSxmPWhbMF0sZD1oWzFdO2lmKElhKGMsaCxlKSlyZXR1cm4gMDtsPnIhPWQ+ciYmbjwoZi11KSooci1sKS8oZC1sKSt1JiYoaT0taSl9cmV0dXJuIGl9ZnVuY3Rpb24gSWEodCxlLG4pe3ZhciByLGksYSxvO3JldHVybiBmdW5jdGlvbih0LGUsbil7cmV0dXJuKGVbMF0tdFswXSkqKG5bMV0tdFsxXSk9PShuWzBdLXRbMF0pKihlWzFdLXRbMV0pfSh0LGUsbikmJihpPXRbcj0rKHRbMF09PT1lWzBdKV0sYT1uW3JdLG89ZVtyXSxpPD1hJiZhPD1vfHxvPD1hJiZhPD1pKX12YXIgamE9ZnVuY3Rpb24oKXt9LFJhPVtbXSxbW1sxLDEuNV0sWy41LDFdXV0sW1tbMS41LDFdLFsxLDEuNV1dXSxbW1sxLjUsMV0sWy41LDFdXV0sW1tbMSwuNV0sWzEuNSwxXV1dLFtbWzEsMS41XSxbLjUsMV1dLFtbMSwuNV0sWzEuNSwxXV1dLFtbWzEsLjVdLFsxLDEuNV1dXSxbW1sxLC41XSxbLjUsMV1dXSxbW1suNSwxXSxbMSwuNV1dXSxbW1sxLDEuNV0sWzEsLjVdXV0sW1tbLjUsMV0sWzEsLjVdXSxbWzEuNSwxXSxbMSwxLjVdXV0sW1tbMS41LDFdLFsxLC41XV1dLFtbWy41LDFdLFsxLjUsMV1dXSxbW1sxLDEuNV0sWzEuNSwxXV1dLFtbWy41LDFdLFsxLDEuNV1dXSxbXV0sWWE9ZnVuY3Rpb24oKXt2YXIgdD0xLGU9MSxuPU0scj1zO2Z1bmN0aW9uIGkodCl7dmFyIGU9bih0KTtpZihBcnJheS5pc0FycmF5KGUpKWU9ZS5zbGljZSgpLnNvcnQoQmEpO2Vsc2V7dmFyIHI9eSh0KSxpPXJbMF0sbz1yWzFdO2U9QShpLG8sZSksZT1rKE1hdGguZmxvb3IoaS9lKSplLE1hdGguZmxvb3Ioby9lKSplLGUpfXJldHVybiBlLm1hcCgoZnVuY3Rpb24oZSl7cmV0dXJuIGEodCxlKX0pKX1mdW5jdGlvbiBhKG4saSl7dmFyIGE9W10scz1bXTtyZXR1cm4gZnVuY3Rpb24obixyLGkpe3ZhciBhLHMsYyx1LGwsaCxmPW5ldyBBcnJheSxkPW5ldyBBcnJheTthPXM9LTEsdT1uWzBdPj1yLFJhW3U8PDFdLmZvckVhY2gocCk7Zm9yKDsrK2E8dC0xOyljPXUsdT1uW2ErMV0+PXIsUmFbY3x1PDwxXS5mb3JFYWNoKHApO1JhW3U8PDBdLmZvckVhY2gocCk7Zm9yKDsrK3M8ZS0xOyl7Zm9yKGE9LTEsdT1uW3MqdCt0XT49cixsPW5bcyp0XT49cixSYVt1PDwxfGw8PDJdLmZvckVhY2gocCk7KythPHQtMTspYz11LHU9bltzKnQrdCthKzFdPj1yLGg9bCxsPW5bcyp0K2ErMV0+PXIsUmFbY3x1PDwxfGw8PDJ8aDw8M10uZm9yRWFjaChwKTtSYVt1fGw8PDNdLmZvckVhY2gocCl9YT0tMSxsPW5bcyp0XT49cixSYVtsPDwyXS5mb3JFYWNoKHApO2Zvcig7KythPHQtMTspaD1sLGw9bltzKnQrYSsxXT49cixSYVtsPDwyfGg8PDNdLmZvckVhY2gocCk7ZnVuY3Rpb24gcCh0KXt2YXIgZSxuLHI9W3RbMF1bMF0rYSx0WzBdWzFdK3NdLGM9W3RbMV1bMF0rYSx0WzFdWzFdK3NdLHU9byhyKSxsPW8oYyk7KGU9ZFt1XSk/KG49ZltsXSk/KGRlbGV0ZSBkW2UuZW5kXSxkZWxldGUgZltuLnN0YXJ0XSxlPT09bj8oZS5yaW5nLnB1c2goYyksaShlLnJpbmcpKTpmW2Uuc3RhcnRdPWRbbi5lbmRdPXtzdGFydDplLnN0YXJ0LGVuZDpuLmVuZCxyaW5nOmUucmluZy5jb25jYXQobi5yaW5nKX0pOihkZWxldGUgZFtlLmVuZF0sZS5yaW5nLnB1c2goYyksZFtlLmVuZD1sXT1lKTooZT1mW2xdKT8obj1kW3VdKT8oZGVsZXRlIGZbZS5zdGFydF0sZGVsZXRlIGRbbi5lbmRdLGU9PT1uPyhlLnJpbmcucHVzaChjKSxpKGUucmluZykpOmZbbi5zdGFydF09ZFtlLmVuZF09e3N0YXJ0Om4uc3RhcnQsZW5kOmUuZW5kLHJpbmc6bi5yaW5nLmNvbmNhdChlLnJpbmcpfSk6KGRlbGV0ZSBmW2Uuc3RhcnRdLGUucmluZy51bnNoaWZ0KHIpLGZbZS5zdGFydD11XT1lKTpmW3VdPWRbbF09e3N0YXJ0OnUsZW5kOmwscmluZzpbcixjXX19UmFbbDw8M10uZm9yRWFjaChwKX0obixpLChmdW5jdGlvbih0KXtyKHQsbixpKSxmdW5jdGlvbih0KXtmb3IodmFyIGU9MCxuPXQubGVuZ3RoLHI9dFtuLTFdWzFdKnRbMF1bMF0tdFtuLTFdWzBdKnRbMF1bMV07KytlPG47KXIrPXRbZS0xXVsxXSp0W2VdWzBdLXRbZS0xXVswXSp0W2VdWzFdO3JldHVybiByfSh0KT4wP2EucHVzaChbdF0pOnMucHVzaCh0KX0pKSxzLmZvckVhY2goKGZ1bmN0aW9uKHQpe2Zvcih2YXIgZSxuPTAscj1hLmxlbmd0aDtuPHI7KytuKWlmKC0xIT09RmEoKGU9YVtuXSlbMF0sdCkpcmV0dXJuIHZvaWQgZS5wdXNoKHQpfSkpLHt0eXBlOiJNdWx0aVBvbHlnb24iLHZhbHVlOmksY29vcmRpbmF0ZXM6YX19ZnVuY3Rpb24gbyhlKXtyZXR1cm4gMiplWzBdK2VbMV0qKHQrMSkqNH1mdW5jdGlvbiBzKG4scixpKXtuLmZvckVhY2goKGZ1bmN0aW9uKG4pe3ZhciBhLG89blswXSxzPW5bMV0sYz0wfG8sdT0wfHMsbD1yW3UqdCtjXTtvPjAmJm88dCYmYz09PW8mJihhPXJbdSp0K2MtMV0sblswXT1vKyhpLWEpLyhsLWEpLS41KSxzPjAmJnM8ZSYmdT09PXMmJihhPXJbKHUtMSkqdCtjXSxuWzFdPXMrKGktYSkvKGwtYSktLjUpfSkpfXJldHVybiBpLmNvbnRvdXI9YSxpLnNpemU9ZnVuY3Rpb24obil7aWYoIWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuW3QsZV07dmFyIHI9TWF0aC5jZWlsKG5bMF0pLGE9TWF0aC5jZWlsKG5bMV0pO2lmKCEocj4wJiZhPjApKXRocm93IG5ldyBFcnJvcigiaW52YWxpZCBzaXplIik7cmV0dXJuIHQ9cixlPWEsaX0saS50aHJlc2hvbGRzPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6QXJyYXkuaXNBcnJheSh0KT9MYShOYS5jYWxsKHQpKTpMYSh0KSxpKTpufSxpLnNtb290aD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj10P3M6amEsaSk6cj09PXN9LGl9O2Z1bmN0aW9uIHphKHQsZSxuKXtmb3IodmFyIHI9dC53aWR0aCxpPXQuaGVpZ2h0LGE9MSsobjw8MSksbz0wO288aTsrK28pZm9yKHZhciBzPTAsYz0wO3M8cituOysrcylzPHImJihjKz10LmRhdGFbcytvKnJdKSxzPj1uJiYocz49YSYmKGMtPXQuZGF0YVtzLWErbypyXSksZS5kYXRhW3MtbitvKnJdPWMvTWF0aC5taW4ocysxLHItMSthLXMsYSkpfWZ1bmN0aW9uIFVhKHQsZSxuKXtmb3IodmFyIHI9dC53aWR0aCxpPXQuaGVpZ2h0LGE9MSsobjw8MSksbz0wO288cjsrK28pZm9yKHZhciBzPTAsYz0wO3M8aStuOysrcylzPGkmJihjKz10LmRhdGFbbytzKnJdKSxzPj1uJiYocz49YSYmKGMtPXQuZGF0YVtvKyhzLWEpKnJdKSxlLmRhdGFbbysocy1uKSpyXT1jL01hdGgubWluKHMrMSxpLTErYS1zLGEpKX1mdW5jdGlvbiAkYSh0KXtyZXR1cm4gdFswXX1mdW5jdGlvbiBXYSh0KXtyZXR1cm4gdFsxXX1mdW5jdGlvbiBWYSgpe3JldHVybiAxfXZhciBIYT1mdW5jdGlvbigpe3ZhciB0PSRhLGU9V2Esbj1WYSxyPTk2MCxpPTUwMCxhPTIwLG89MixzPTMqYSxjPXIrMipzPj5vLHU9aSsyKnM+Pm8sbD1MYSgyMCk7ZnVuY3Rpb24gaChyKXt2YXIgaT1uZXcgRmxvYXQzMkFycmF5KGMqdSksaD1uZXcgRmxvYXQzMkFycmF5KGMqdSk7ci5mb3JFYWNoKChmdW5jdGlvbihyLGEsbCl7dmFyIGg9K3QocixhLGwpK3M+Pm8sZj0rZShyLGEsbCkrcz4+byxkPStuKHIsYSxsKTtoPj0wJiZoPGMmJmY+PTAmJmY8dSYmKGlbaCtmKmNdKz1kKX0pKSx6YSh7d2lkdGg6YyxoZWlnaHQ6dSxkYXRhOml9LHt3aWR0aDpjLGhlaWdodDp1LGRhdGE6aH0sYT4+byksVWEoe3dpZHRoOmMsaGVpZ2h0OnUsZGF0YTpofSx7d2lkdGg6YyxoZWlnaHQ6dSxkYXRhOml9LGE+Pm8pLHphKHt3aWR0aDpjLGhlaWdodDp1LGRhdGE6aX0se3dpZHRoOmMsaGVpZ2h0OnUsZGF0YTpofSxhPj5vKSxVYSh7d2lkdGg6YyxoZWlnaHQ6dSxkYXRhOmh9LHt3aWR0aDpjLGhlaWdodDp1LGRhdGE6aX0sYT4+byksemEoe3dpZHRoOmMsaGVpZ2h0OnUsZGF0YTppfSx7d2lkdGg6YyxoZWlnaHQ6dSxkYXRhOmh9LGE+Pm8pLFVhKHt3aWR0aDpjLGhlaWdodDp1LGRhdGE6aH0se3dpZHRoOmMsaGVpZ2h0OnUsZGF0YTppfSxhPj5vKTt2YXIgZD1sKGkpO2lmKCFBcnJheS5pc0FycmF5KGQpKXt2YXIgcD1MKGkpO2Q9QSgwLHAsZCksKGQ9aygwLE1hdGguZmxvb3IocC9kKSpkLGQpKS5zaGlmdCgpfXJldHVybiBZYSgpLnRocmVzaG9sZHMoZCkuc2l6ZShbYyx1XSkoaSkubWFwKGYpfWZ1bmN0aW9uIGYodCl7cmV0dXJuIHQudmFsdWUqPU1hdGgucG93KDIsLTIqbyksdC5jb29yZGluYXRlcy5mb3JFYWNoKGQpLHR9ZnVuY3Rpb24gZCh0KXt0LmZvckVhY2gocCl9ZnVuY3Rpb24gcCh0KXt0LmZvckVhY2goZyl9ZnVuY3Rpb24gZyh0KXt0WzBdPXRbMF0qTWF0aC5wb3coMixvKS1zLHRbMV09dFsxXSpNYXRoLnBvdygyLG8pLXN9ZnVuY3Rpb24geSgpe3JldHVybiBjPXIrMioocz0zKmEpPj5vLHU9aSsyKnM+Pm8saH1yZXR1cm4gaC54PWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PSJmdW5jdGlvbiI9PXR5cGVvZiBlP2U6TGEoK2UpLGgpOnR9LGgueT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT0iZnVuY3Rpb24iPT10eXBlb2YgdD90OkxhKCt0KSxoKTplfSxoLndlaWdodD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj0iZnVuY3Rpb24iPT10eXBlb2YgdD90OkxhKCt0KSxoKTpufSxoLnNpemU9ZnVuY3Rpb24odCl7aWYoIWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuW3IsaV07dmFyIGU9TWF0aC5jZWlsKHRbMF0pLG49TWF0aC5jZWlsKHRbMV0pO2lmKCEoZT49MHx8ZT49MCkpdGhyb3cgbmV3IEVycm9yKCJpbnZhbGlkIHNpemUiKTtyZXR1cm4gcj1lLGk9bix5KCl9LGguY2VsbFNpemU9ZnVuY3Rpb24odCl7aWYoIWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIDE8PG87aWYoISgodD0rdCk+PTEpKXRocm93IG5ldyBFcnJvcigiaW52YWxpZCBjZWxsIHNpemUiKTtyZXR1cm4gbz1NYXRoLmZsb29yKE1hdGgubG9nKHQpL01hdGguTE4yKSx5KCl9LGgudGhyZXNob2xkcz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obD0iZnVuY3Rpb24iPT10eXBlb2YgdD90OkFycmF5LmlzQXJyYXkodCk/TGEoTmEuY2FsbCh0KSk6TGEodCksaCk6bH0saC5iYW5kd2lkdGg9ZnVuY3Rpb24odCl7aWYoIWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIE1hdGguc3FydChhKihhKzEpKTtpZighKCh0PSt0KT49MCkpdGhyb3cgbmV3IEVycm9yKCJpbnZhbGlkIGJhbmR3aWR0aCIpO3JldHVybiBhPU1hdGgucm91bmQoKE1hdGguc3FydCg0KnQqdCsxKS0xKS8yKSx5KCl9LGh9LEdhPWZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0fX07ZnVuY3Rpb24gcWEodCxlLG4scixpLGEsbyxzLGMsdSl7dGhpcy50YXJnZXQ9dCx0aGlzLnR5cGU9ZSx0aGlzLnN1YmplY3Q9bix0aGlzLmlkZW50aWZpZXI9cix0aGlzLmFjdGl2ZT1pLHRoaXMueD1hLHRoaXMueT1vLHRoaXMuZHg9cyx0aGlzLmR5PWMsdGhpcy5fPXV9ZnVuY3Rpb24gWGEoKXtyZXR1cm4hY2UuY3RybEtleSYmIWNlLmJ1dHRvbn1mdW5jdGlvbiBaYSgpe3JldHVybiB0aGlzLnBhcmVudE5vZGV9ZnVuY3Rpb24gSmEodCl7cmV0dXJuIG51bGw9PXQ/e3g6Y2UueCx5OmNlLnl9OnR9ZnVuY3Rpb24gUWEoKXtyZXR1cm4gbmF2aWdhdG9yLm1heFRvdWNoUG9pbnRzfHwib250b3VjaHN0YXJ0ImluIHRoaXN9cWEucHJvdG90eXBlLm9uPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fLm9uLmFwcGx5KHRoaXMuXyxhcmd1bWVudHMpO3JldHVybiB0PT09dGhpcy5fP3RoaXM6dH07dmFyIEthPWZ1bmN0aW9uKCl7dmFyIHQsZSxuLHIsaT1YYSxhPVphLG89SmEscz1RYSxjPXt9LHU9bHQoInN0YXJ0IiwiZHJhZyIsImVuZCIpLGw9MCxoPTA7ZnVuY3Rpb24gZih0KXt0Lm9uKCJtb3VzZWRvd24uZHJhZyIsZCkuZmlsdGVyKHMpLm9uKCJ0b3VjaHN0YXJ0LmRyYWciLHkpLm9uKCJ0b3VjaG1vdmUuZHJhZyIsdikub24oInRvdWNoZW5kLmRyYWcgdG91Y2hjYW5jZWwuZHJhZyIsbSkuc3R5bGUoInRvdWNoLWFjdGlvbiIsIm5vbmUiKS5zdHlsZSgiLXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yIiwicmdiYSgwLDAsMCwwKSIpfWZ1bmN0aW9uIGQoKXtpZighciYmaS5hcHBseSh0aGlzLGFyZ3VtZW50cykpe3ZhciBvPWIoIm1vdXNlIixhLmFwcGx5KHRoaXMsYXJndW1lbnRzKSxObix0aGlzLGFyZ3VtZW50cyk7byYmKGtlKGNlLnZpZXcpLm9uKCJtb3VzZW1vdmUuZHJhZyIscCwhMCkub24oIm1vdXNldXAuZHJhZyIsZywhMCksVGUoY2Uudmlldyksd2UoKSxuPSExLHQ9Y2UuY2xpZW50WCxlPWNlLmNsaWVudFksbygic3RhcnQiKSl9fWZ1bmN0aW9uIHAoKXtpZihFZSgpLCFuKXt2YXIgcj1jZS5jbGllbnRYLXQsaT1jZS5jbGllbnRZLWU7bj1yKnIraSppPmh9Yy5tb3VzZSgiZHJhZyIpfWZ1bmN0aW9uIGcoKXtrZShjZS52aWV3KS5vbigibW91c2Vtb3ZlLmRyYWcgbW91c2V1cC5kcmFnIixudWxsKSxDZShjZS52aWV3LG4pLEVlKCksYy5tb3VzZSgiZW5kIil9ZnVuY3Rpb24geSgpe2lmKGkuYXBwbHkodGhpcyxhcmd1bWVudHMpKXt2YXIgdCxlLG49Y2UuY2hhbmdlZFRvdWNoZXMscj1hLmFwcGx5KHRoaXMsYXJndW1lbnRzKSxvPW4ubGVuZ3RoO2Zvcih0PTA7dDxvOysrdCkoZT1iKG5bdF0uaWRlbnRpZmllcixyLERuLHRoaXMsYXJndW1lbnRzKSkmJih3ZSgpLGUoInN0YXJ0IikpfX1mdW5jdGlvbiB2KCl7dmFyIHQsZSxuPWNlLmNoYW5nZWRUb3VjaGVzLHI9bi5sZW5ndGg7Zm9yKHQ9MDt0PHI7Kyt0KShlPWNbblt0XS5pZGVudGlmaWVyXSkmJihFZSgpLGUoImRyYWciKSl9ZnVuY3Rpb24gbSgpe3ZhciB0LGUsbj1jZS5jaGFuZ2VkVG91Y2hlcyxpPW4ubGVuZ3RoO2ZvcihyJiZjbGVhclRpbWVvdXQocikscj1zZXRUaW1lb3V0KChmdW5jdGlvbigpe3I9bnVsbH0pLDUwMCksdD0wO3Q8aTsrK3QpKGU9Y1tuW3RdLmlkZW50aWZpZXJdKSYmKHdlKCksZSgiZW5kIikpfWZ1bmN0aW9uIGIodCxlLG4scixpKXt2YXIgYSxzLGgsZD1uKGUsdCkscD11LmNvcHkoKTtpZihwZShuZXcgcWEoZiwiYmVmb3Jlc3RhcnQiLGEsdCxsLGRbMF0sZFsxXSwwLDAscCksKGZ1bmN0aW9uKCl7cmV0dXJuIG51bGwhPShjZS5zdWJqZWN0PWE9by5hcHBseShyLGkpKSYmKHM9YS54LWRbMF18fDAsaD1hLnktZFsxXXx8MCwhMCl9KSkpcmV0dXJuIGZ1bmN0aW9uIG8odSl7dmFyIGcseT1kO3N3aXRjaCh1KXtjYXNlInN0YXJ0IjpjW3RdPW8sZz1sKys7YnJlYWs7Y2FzZSJlbmQiOmRlbGV0ZSBjW3RdLC0tbDtjYXNlImRyYWciOmQ9bihlLHQpLGc9bH1wZShuZXcgcWEoZix1LGEsdCxnLGRbMF0rcyxkWzFdK2gsZFswXS15WzBdLGRbMV0teVsxXSxwKSxwLmFwcGx5LHAsW3UscixpXSl9fXJldHVybiBmLmZpbHRlcj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT0iZnVuY3Rpb24iPT10eXBlb2YgdD90OkdhKCEhdCksZik6aX0sZi5jb250YWluZXI9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpHYSh0KSxmKTphfSxmLnN1YmplY3Q9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpHYSh0KSxmKTpvfSxmLnRvdWNoYWJsZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocz0iZnVuY3Rpb24iPT10eXBlb2YgdD90OkdhKCEhdCksZik6c30sZi5vbj1mdW5jdGlvbigpe3ZhciB0PXUub24uYXBwbHkodSxhcmd1bWVudHMpO3JldHVybiB0PT09dT9mOnR9LGYuY2xpY2tEaXN0YW5jZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaD0odD0rdCkqdCxmKTpNYXRoLnNxcnQoaCl9LGZ9LHRvPXt9LGVvPXt9O2Z1bmN0aW9uIG5vKHQpe3JldHVybiBuZXcgRnVuY3Rpb24oImQiLCJyZXR1cm4geyIrdC5tYXAoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIEpTT04uc3RyaW5naWZ5KHQpKyI6IGRbIitlKyddIHx8ICIiJ30pKS5qb2luKCIsIikrIn0iKX1mdW5jdGlvbiBybyh0KXt2YXIgZT1PYmplY3QuY3JlYXRlKG51bGwpLG49W107cmV0dXJuIHQuZm9yRWFjaCgoZnVuY3Rpb24odCl7Zm9yKHZhciByIGluIHQpciBpbiBlfHxuLnB1c2goZVtyXT1yKX0pKSxufWZ1bmN0aW9uIGlvKHQsZSl7dmFyIG49dCsiIixyPW4ubGVuZ3RoO3JldHVybiByPGU/bmV3IEFycmF5KGUtcisxKS5qb2luKDApK246bn1mdW5jdGlvbiBhbyh0KXt2YXIgZSxuPXQuZ2V0VVRDSG91cnMoKSxyPXQuZ2V0VVRDTWludXRlcygpLGk9dC5nZXRVVENTZWNvbmRzKCksYT10LmdldFVUQ01pbGxpc2Vjb25kcygpO3JldHVybiBpc05hTih0KT8iSW52YWxpZCBEYXRlIjooKGU9dC5nZXRVVENGdWxsWWVhcigpKTwwPyItIitpbygtZSw2KTplPjk5OTk/IisiK2lvKGUsNik6aW8oZSw0KSkrIi0iK2lvKHQuZ2V0VVRDTW9udGgoKSsxLDIpKyItIitpbyh0LmdldFVUQ0RhdGUoKSwyKSsoYT8iVCIraW8obiwyKSsiOiIraW8ociwyKSsiOiIraW8oaSwyKSsiLiIraW8oYSwzKSsiWiI6aT8iVCIraW8obiwyKSsiOiIraW8ociwyKSsiOiIraW8oaSwyKSsiWiI6cnx8bj8iVCIraW8obiwyKSsiOiIraW8ociwyKSsiWiI6IiIpfXZhciBvbz1mdW5jdGlvbih0KXt2YXIgZT1uZXcgUmVnRXhwKCdbIicrdCsiXG5ccl0iKSxuPXQuY2hhckNvZGVBdCgwKTtmdW5jdGlvbiByKHQsZSl7dmFyIHIsaT1bXSxhPXQubGVuZ3RoLG89MCxzPTAsYz1hPD0wLHU9ITE7ZnVuY3Rpb24gbCgpe2lmKGMpcmV0dXJuIGVvO2lmKHUpcmV0dXJuIHU9ITEsdG87dmFyIGUscixpPW87aWYoMzQ9PT10LmNoYXJDb2RlQXQoaSkpe2Zvcig7bysrPGEmJjM0IT09dC5jaGFyQ29kZUF0KG8pfHwzND09PXQuY2hhckNvZGVBdCgrK28pOyk7cmV0dXJuKGU9byk+PWE/Yz0hMDoxMD09PShyPXQuY2hhckNvZGVBdChvKyspKT91PSEwOjEzPT09ciYmKHU9ITAsMTA9PT10LmNoYXJDb2RlQXQobykmJisrbyksdC5zbGljZShpKzEsZS0xKS5yZXBsYWNlKC8iIi9nLCciJyl9Zm9yKDtvPGE7KXtpZigxMD09PShyPXQuY2hhckNvZGVBdChlPW8rKykpKXU9ITA7ZWxzZSBpZigxMz09PXIpdT0hMCwxMD09PXQuY2hhckNvZGVBdChvKSYmKytvO2Vsc2UgaWYociE9PW4pY29udGludWU7cmV0dXJuIHQuc2xpY2UoaSxlKX1yZXR1cm4gYz0hMCx0LnNsaWNlKGksYSl9Zm9yKDEwPT09dC5jaGFyQ29kZUF0KGEtMSkmJi0tYSwxMz09PXQuY2hhckNvZGVBdChhLTEpJiYtLWE7KHI9bCgpKSE9PWVvOyl7Zm9yKHZhciBoPVtdO3IhPT10byYmciE9PWVvOyloLnB1c2gocikscj1sKCk7ZSYmbnVsbD09KGg9ZShoLHMrKykpfHxpLnB1c2goaCl9cmV0dXJuIGl9ZnVuY3Rpb24gaShlLG4pe3JldHVybiBlLm1hcCgoZnVuY3Rpb24oZSl7cmV0dXJuIG4ubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gbyhlW3RdKX0pKS5qb2luKHQpfSkpfWZ1bmN0aW9uIGEoZSl7cmV0dXJuIGUubWFwKG8pLmpvaW4odCl9ZnVuY3Rpb24gbyh0KXtyZXR1cm4gbnVsbD09dD8iIjp0IGluc3RhbmNlb2YgRGF0ZT9hbyh0KTplLnRlc3QodCs9IiIpPyciJyt0LnJlcGxhY2UoLyIvZywnIiInKSsnIic6dH1yZXR1cm57cGFyc2U6ZnVuY3Rpb24odCxlKXt2YXIgbixpLGE9cih0LChmdW5jdGlvbih0LHIpe2lmKG4pcmV0dXJuIG4odCxyLTEpO2k9dCxuPWU/ZnVuY3Rpb24odCxlKXt2YXIgbj1ubyh0KTtyZXR1cm4gZnVuY3Rpb24ocixpKXtyZXR1cm4gZShuKHIpLGksdCl9fSh0LGUpOm5vKHQpfSkpO3JldHVybiBhLmNvbHVtbnM9aXx8W10sYX0scGFyc2VSb3dzOnIsZm9ybWF0OmZ1bmN0aW9uKGUsbil7cmV0dXJuIG51bGw9PW4mJihuPXJvKGUpKSxbbi5tYXAobykuam9pbih0KV0uY29uY2F0KGkoZSxuKSkuam9pbigiXG4iKX0sZm9ybWF0Qm9keTpmdW5jdGlvbih0LGUpe3JldHVybiBudWxsPT1lJiYoZT1ybyh0KSksaSh0LGUpLmpvaW4oIlxuIil9LGZvcm1hdFJvd3M6ZnVuY3Rpb24odCl7cmV0dXJuIHQubWFwKGEpLmpvaW4oIlxuIil9LGZvcm1hdFJvdzphLGZvcm1hdFZhbHVlOm99fSxzbz1vbygiLCIpLGNvPXNvLnBhcnNlLHVvPXNvLnBhcnNlUm93cyxsbz1zby5mb3JtYXQsaG89c28uZm9ybWF0Qm9keSxmbz1zby5mb3JtYXRSb3dzLHBvPXNvLmZvcm1hdFJvdyxnbz1zby5mb3JtYXRWYWx1ZSx5bz1vbygiXHQiKSx2bz15by5wYXJzZSxtbz15by5wYXJzZVJvd3MsYm89eW8uZm9ybWF0LHhvPXlvLmZvcm1hdEJvZHksX289eW8uZm9ybWF0Um93cyxrbz15by5mb3JtYXRSb3csd289eW8uZm9ybWF0VmFsdWU7ZnVuY3Rpb24gRW8odCl7Zm9yKHZhciBlIGluIHQpe3ZhciBuLHIsaT10W2VdLnRyaW0oKTtpZihpKWlmKCJ0cnVlIj09PWkpaT0hMDtlbHNlIGlmKCJmYWxzZSI9PT1pKWk9ITE7ZWxzZSBpZigiTmFOIj09PWkpaT1OYU47ZWxzZSBpZihpc05hTihuPStpKSl7aWYoIShyPWkubWF0Y2goL14oWy0rXVxkezJ9KT9cZHs0fSgtXGR7Mn0oLVxkezJ9KT8pPyhUXGR7Mn06XGR7Mn0oOlxkezJ9KFwuXGR7M30pPyk/KFp8Wy0rXVxkezJ9OlxkezJ9KT8pPyQvKSkpY29udGludWU7VG8mJnJbNF0mJiFyWzddJiYoaT1pLnJlcGxhY2UoLy0vZywiLyIpLnJlcGxhY2UoL1QvLCIgIikpLGk9bmV3IERhdGUoaSl9ZWxzZSBpPW47ZWxzZSBpPW51bGw7dFtlXT1pfXJldHVybiB0fXZhciBUbz1uZXcgRGF0ZSgiMjAxOS0wMS0wMVQwMDowMCIpLmdldEhvdXJzKCl8fG5ldyBEYXRlKCIyMDE5LTA3LTAxVDAwOjAwIikuZ2V0SG91cnMoKTtmdW5jdGlvbiBDbyh0KXtyZXR1cm4rdH1mdW5jdGlvbiBTbyh0KXtyZXR1cm4gdCp0fWZ1bmN0aW9uIEFvKHQpe3JldHVybiB0KigyLXQpfWZ1bmN0aW9uIE1vKHQpe3JldHVybigodCo9Mik8PTE/dCp0Oi0tdCooMi10KSsxKS8yfXZhciBPbz1mdW5jdGlvbiB0KGUpe2Z1bmN0aW9uIG4odCl7cmV0dXJuIE1hdGgucG93KHQsZSl9cmV0dXJuIGU9K2Usbi5leHBvbmVudD10LG59KDMpLERvPWZ1bmN0aW9uIHQoZSl7ZnVuY3Rpb24gbih0KXtyZXR1cm4gMS1NYXRoLnBvdygxLXQsZSl9cmV0dXJuIGU9K2Usbi5leHBvbmVudD10LG59KDMpLE5vPWZ1bmN0aW9uIHQoZSl7ZnVuY3Rpb24gbih0KXtyZXR1cm4oKHQqPTIpPD0xP01hdGgucG93KHQsZSk6Mi1NYXRoLnBvdygyLXQsZSkpLzJ9cmV0dXJuIGU9K2Usbi5leHBvbmVudD10LG59KDMpLEJvPU1hdGguUEksTG89Qm8vMjtmdW5jdGlvbiBGbyh0KXtyZXR1cm4gMS1NYXRoLmNvcyh0KkxvKX1mdW5jdGlvbiBQbyh0KXtyZXR1cm4gTWF0aC5zaW4odCpMbyl9ZnVuY3Rpb24gSW8odCl7cmV0dXJuKDEtTWF0aC5jb3MoQm8qdCkpLzJ9ZnVuY3Rpb24gam8odCl7cmV0dXJuIE1hdGgucG93KDIsMTAqdC0xMCl9ZnVuY3Rpb24gUm8odCl7cmV0dXJuIDEtTWF0aC5wb3coMiwtMTAqdCl9ZnVuY3Rpb24gWW8odCl7cmV0dXJuKCh0Kj0yKTw9MT9NYXRoLnBvdygyLDEwKnQtMTApOjItTWF0aC5wb3coMiwxMC0xMCp0KSkvMn1mdW5jdGlvbiB6byh0KXtyZXR1cm4gMS1NYXRoLnNxcnQoMS10KnQpfWZ1bmN0aW9uIFVvKHQpe3JldHVybiBNYXRoLnNxcnQoMS0gLS10KnQpfWZ1bmN0aW9uICRvKHQpe3JldHVybigodCo9Mik8PTE/MS1NYXRoLnNxcnQoMS10KnQpOk1hdGguc3FydCgxLSh0LT0yKSp0KSsxKS8yfWZ1bmN0aW9uIFdvKHQpe3JldHVybiAxLVZvKDEtdCl9ZnVuY3Rpb24gVm8odCl7cmV0dXJuKHQ9K3QpPDQvMTE/Ny41NjI1KnQqdDp0PDgvMTE/Ny41NjI1Kih0LT02LzExKSp0Ky43NTp0PDEwLzExPzcuNTYyNSoodC09OS8xMSkqdCsuOTM3NTo3LjU2MjUqKHQtPTIxLzIyKSp0KzYzLzY0fWZ1bmN0aW9uIEhvKHQpe3JldHVybigodCo9Mik8PTE/MS1WbygxLXQpOlZvKHQtMSkrMSkvMn12YXIgR289ZnVuY3Rpb24gdChlKXtmdW5jdGlvbiBuKHQpe3JldHVybiB0KnQqKChlKzEpKnQtZSl9cmV0dXJuIGU9K2Usbi5vdmVyc2hvb3Q9dCxufSgxLjcwMTU4KSxxbz1mdW5jdGlvbiB0KGUpe2Z1bmN0aW9uIG4odCl7cmV0dXJuLS10KnQqKChlKzEpKnQrZSkrMX1yZXR1cm4gZT0rZSxuLm92ZXJzaG9vdD10LG59KDEuNzAxNTgpLFhvPWZ1bmN0aW9uIHQoZSl7ZnVuY3Rpb24gbih0KXtyZXR1cm4oKHQqPTIpPDE/dCp0KigoZSsxKSp0LWUpOih0LT0yKSp0KigoZSsxKSp0K2UpKzIpLzJ9cmV0dXJuIGU9K2Usbi5vdmVyc2hvb3Q9dCxufSgxLjcwMTU4KSxabz0yKk1hdGguUEksSm89ZnVuY3Rpb24gdChlLG4pe3ZhciByPU1hdGguYXNpbigxLyhlPU1hdGgubWF4KDEsZSkpKSoobi89Wm8pO2Z1bmN0aW9uIGkodCl7cmV0dXJuIGUqTWF0aC5wb3coMiwxMCotLXQpKk1hdGguc2luKChyLXQpL24pfXJldHVybiBpLmFtcGxpdHVkZT1mdW5jdGlvbihlKXtyZXR1cm4gdChlLG4qWm8pfSxpLnBlcmlvZD1mdW5jdGlvbihuKXtyZXR1cm4gdChlLG4pfSxpfSgxLC4zKSxRbz1mdW5jdGlvbiB0KGUsbil7dmFyIHI9TWF0aC5hc2luKDEvKGU9TWF0aC5tYXgoMSxlKSkpKihuLz1abyk7ZnVuY3Rpb24gaSh0KXtyZXR1cm4gMS1lKk1hdGgucG93KDIsLTEwKih0PSt0KSkqTWF0aC5zaW4oKHQrcikvbil9cmV0dXJuIGkuYW1wbGl0dWRlPWZ1bmN0aW9uKGUpe3JldHVybiB0KGUsbipabyl9LGkucGVyaW9kPWZ1bmN0aW9uKG4pe3JldHVybiB0KGUsbil9LGl9KDEsLjMpLEtvPWZ1bmN0aW9uIHQoZSxuKXt2YXIgcj1NYXRoLmFzaW4oMS8oZT1NYXRoLm1heCgxLGUpKSkqKG4vPVpvKTtmdW5jdGlvbiBpKHQpe3JldHVybigodD0yKnQtMSk8MD9lKk1hdGgucG93KDIsMTAqdCkqTWF0aC5zaW4oKHItdCkvbik6Mi1lKk1hdGgucG93KDIsLTEwKnQpKk1hdGguc2luKChyK3QpL24pKS8yfXJldHVybiBpLmFtcGxpdHVkZT1mdW5jdGlvbihlKXtyZXR1cm4gdChlLG4qWm8pfSxpLnBlcmlvZD1mdW5jdGlvbihuKXtyZXR1cm4gdChlLG4pfSxpfSgxLC4zKTtmdW5jdGlvbiB0cyh0KXtpZighdC5vayl0aHJvdyBuZXcgRXJyb3IodC5zdGF0dXMrIiAiK3Quc3RhdHVzVGV4dCk7cmV0dXJuIHQuYmxvYigpfXZhciBlcz1mdW5jdGlvbih0LGUpe3JldHVybiBmZXRjaCh0LGUpLnRoZW4odHMpfTtmdW5jdGlvbiBucyh0KXtpZighdC5vayl0aHJvdyBuZXcgRXJyb3IodC5zdGF0dXMrIiAiK3Quc3RhdHVzVGV4dCk7cmV0dXJuIHQuYXJyYXlCdWZmZXIoKX12YXIgcnM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gZmV0Y2godCxlKS50aGVuKG5zKX07ZnVuY3Rpb24gaXModCl7aWYoIXQub2spdGhyb3cgbmV3IEVycm9yKHQuc3RhdHVzKyIgIit0LnN0YXR1c1RleHQpO3JldHVybiB0LnRleHQoKX12YXIgYXM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gZmV0Y2godCxlKS50aGVuKGlzKX07ZnVuY3Rpb24gb3ModCl7cmV0dXJuIGZ1bmN0aW9uKGUsbixyKXtyZXR1cm4gMj09PWFyZ3VtZW50cy5sZW5ndGgmJiJmdW5jdGlvbiI9PXR5cGVvZiBuJiYocj1uLG49dm9pZCAwKSxhcyhlLG4pLnRoZW4oKGZ1bmN0aW9uKGUpe3JldHVybiB0KGUscil9KSl9fWZ1bmN0aW9uIHNzKHQsZSxuLHIpezM9PT1hcmd1bWVudHMubGVuZ3RoJiYiZnVuY3Rpb24iPT10eXBlb2YgbiYmKHI9bixuPXZvaWQgMCk7dmFyIGk9b28odCk7cmV0dXJuIGFzKGUsbikudGhlbigoZnVuY3Rpb24odCl7cmV0dXJuIGkucGFyc2UodCxyKX0pKX12YXIgY3M9b3MoY28pLHVzPW9zKHZvKSxscz1mdW5jdGlvbih0LGUpe3JldHVybiBuZXcgUHJvbWlzZSgoZnVuY3Rpb24obixyKXt2YXIgaT1uZXcgSW1hZ2U7Zm9yKHZhciBhIGluIGUpaVthXT1lW2FdO2kub25lcnJvcj1yLGkub25sb2FkPWZ1bmN0aW9uKCl7bihpKX0saS5zcmM9dH0pKX07ZnVuY3Rpb24gaHModCl7aWYoIXQub2spdGhyb3cgbmV3IEVycm9yKHQuc3RhdHVzKyIgIit0LnN0YXR1c1RleHQpO3JldHVybiB0Lmpzb24oKX12YXIgZnM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gZmV0Y2godCxlKS50aGVuKGhzKX07ZnVuY3Rpb24gZHModCl7cmV0dXJuIGZ1bmN0aW9uKGUsbil7cmV0dXJuIGFzKGUsbikudGhlbigoZnVuY3Rpb24oZSl7cmV0dXJuKG5ldyBET01QYXJzZXIpLnBhcnNlRnJvbVN0cmluZyhlLHQpfSkpfX12YXIgcHM9ZHMoImFwcGxpY2F0aW9uL3htbCIpLGdzPWRzKCJ0ZXh0L2h0bWwiKSx5cz1kcygiaW1hZ2Uvc3ZnK3htbCIpLHZzPWZ1bmN0aW9uKHQsZSl7dmFyIG47ZnVuY3Rpb24gcigpe3ZhciByLGksYT1uLmxlbmd0aCxvPTAscz0wO2ZvcihyPTA7cjxhOysrcilvKz0oaT1uW3JdKS54LHMrPWkueTtmb3Iobz1vL2EtdCxzPXMvYS1lLHI9MDtyPGE7KytyKShpPW5bcl0pLngtPW8saS55LT1zfXJldHVybiBudWxsPT10JiYodD0wKSxudWxsPT1lJiYoZT0wKSxyLmluaXRpYWxpemU9ZnVuY3Rpb24odCl7bj10fSxyLng9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9K2Uscik6dH0sci55PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPSt0LHIpOmV9LHJ9LG1zPWZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0fX0sYnM9ZnVuY3Rpb24oKXtyZXR1cm4gMWUtNiooTWF0aC5yYW5kb20oKS0uNSl9O2Z1bmN0aW9uIHhzKHQsZSxuLHIpe2lmKGlzTmFOKGUpfHxpc05hTihuKSlyZXR1cm4gdDt2YXIgaSxhLG8scyxjLHUsbCxoLGYsZD10Ll9yb290LHA9e2RhdGE6cn0sZz10Ll94MCx5PXQuX3kwLHY9dC5feDEsbT10Ll95MTtpZighZClyZXR1cm4gdC5fcm9vdD1wLHQ7Zm9yKDtkLmxlbmd0aDspaWYoKHU9ZT49KGE9KGcrdikvMikpP2c9YTp2PWEsKGw9bj49KG89KHkrbSkvMikpP3k9bzptPW8saT1kLCEoZD1kW2g9bDw8MXx1XSkpcmV0dXJuIGlbaF09cCx0O2lmKHM9K3QuX3guY2FsbChudWxsLGQuZGF0YSksYz0rdC5feS5jYWxsKG51bGwsZC5kYXRhKSxlPT09cyYmbj09PWMpcmV0dXJuIHAubmV4dD1kLGk/aVtoXT1wOnQuX3Jvb3Q9cCx0O2Rve2k9aT9pW2hdPW5ldyBBcnJheSg0KTp0Ll9yb290PW5ldyBBcnJheSg0KSwodT1lPj0oYT0oZyt2KS8yKSk/Zz1hOnY9YSwobD1uPj0obz0oeSttKS8yKSk/eT1vOm09b313aGlsZSgoaD1sPDwxfHUpPT0oZj0oYz49byk8PDF8cz49YSkpO3JldHVybiBpW2ZdPWQsaVtoXT1wLHR9dmFyIF9zPWZ1bmN0aW9uKHQsZSxuLHIsaSl7dGhpcy5ub2RlPXQsdGhpcy54MD1lLHRoaXMueTA9bix0aGlzLngxPXIsdGhpcy55MT1pfTtmdW5jdGlvbiBrcyh0KXtyZXR1cm4gdFswXX1mdW5jdGlvbiB3cyh0KXtyZXR1cm4gdFsxXX1mdW5jdGlvbiBFcyh0LGUsbil7dmFyIHI9bmV3IFRzKG51bGw9PWU/a3M6ZSxudWxsPT1uP3dzOm4sTmFOLE5hTixOYU4sTmFOKTtyZXR1cm4gbnVsbD09dD9yOnIuYWRkQWxsKHQpfWZ1bmN0aW9uIFRzKHQsZSxuLHIsaSxhKXt0aGlzLl94PXQsdGhpcy5feT1lLHRoaXMuX3gwPW4sdGhpcy5feTA9cix0aGlzLl94MT1pLHRoaXMuX3kxPWEsdGhpcy5fcm9vdD12b2lkIDB9ZnVuY3Rpb24gQ3ModCl7Zm9yKHZhciBlPXtkYXRhOnQuZGF0YX0sbj1lO3Q9dC5uZXh0OyluPW4ubmV4dD17ZGF0YTp0LmRhdGF9O3JldHVybiBlfXZhciBTcz1Fcy5wcm90b3R5cGU9VHMucHJvdG90eXBlO2Z1bmN0aW9uIEFzKHQpe3JldHVybiB0LngrdC52eH1mdW5jdGlvbiBNcyh0KXtyZXR1cm4gdC55K3Qudnl9U3MuY29weT1mdW5jdGlvbigpe3ZhciB0LGUsbj1uZXcgVHModGhpcy5feCx0aGlzLl95LHRoaXMuX3gwLHRoaXMuX3kwLHRoaXMuX3gxLHRoaXMuX3kxKSxyPXRoaXMuX3Jvb3Q7aWYoIXIpcmV0dXJuIG47aWYoIXIubGVuZ3RoKXJldHVybiBuLl9yb290PUNzKHIpLG47Zm9yKHQ9W3tzb3VyY2U6cix0YXJnZXQ6bi5fcm9vdD1uZXcgQXJyYXkoNCl9XTtyPXQucG9wKCk7KWZvcih2YXIgaT0wO2k8NDsrK2kpKGU9ci5zb3VyY2VbaV0pJiYoZS5sZW5ndGg/dC5wdXNoKHtzb3VyY2U6ZSx0YXJnZXQ6ci50YXJnZXRbaV09bmV3IEFycmF5KDQpfSk6ci50YXJnZXRbaV09Q3MoZSkpO3JldHVybiBufSxTcy5hZGQ9ZnVuY3Rpb24odCl7dmFyIGU9K3RoaXMuX3guY2FsbChudWxsLHQpLG49K3RoaXMuX3kuY2FsbChudWxsLHQpO3JldHVybiB4cyh0aGlzLmNvdmVyKGUsbiksZSxuLHQpfSxTcy5hZGRBbGw9ZnVuY3Rpb24odCl7dmFyIGUsbixyLGksYT10Lmxlbmd0aCxvPW5ldyBBcnJheShhKSxzPW5ldyBBcnJheShhKSxjPTEvMCx1PTEvMCxsPS0xLzAsaD0tMS8wO2ZvcihuPTA7bjxhOysrbilpc05hTihyPSt0aGlzLl94LmNhbGwobnVsbCxlPXRbbl0pKXx8aXNOYU4oaT0rdGhpcy5feS5jYWxsKG51bGwsZSkpfHwob1tuXT1yLHNbbl09aSxyPGMmJihjPXIpLHI+bCYmKGw9ciksaTx1JiYodT1pKSxpPmgmJihoPWkpKTtpZihjPmx8fHU+aClyZXR1cm4gdGhpcztmb3IodGhpcy5jb3ZlcihjLHUpLmNvdmVyKGwsaCksbj0wO248YTsrK24peHModGhpcyxvW25dLHNbbl0sdFtuXSk7cmV0dXJuIHRoaXN9LFNzLmNvdmVyPWZ1bmN0aW9uKHQsZSl7aWYoaXNOYU4odD0rdCl8fGlzTmFOKGU9K2UpKXJldHVybiB0aGlzO3ZhciBuPXRoaXMuX3gwLHI9dGhpcy5feTAsaT10aGlzLl94MSxhPXRoaXMuX3kxO2lmKGlzTmFOKG4pKWk9KG49TWF0aC5mbG9vcih0KSkrMSxhPShyPU1hdGguZmxvb3IoZSkpKzE7ZWxzZXtmb3IodmFyIG8scyxjPWktbix1PXRoaXMuX3Jvb3Q7bj50fHx0Pj1pfHxyPmV8fGU+PWE7KXN3aXRjaChzPShlPHIpPDwxfHQ8biwobz1uZXcgQXJyYXkoNCkpW3NdPXUsdT1vLGMqPTIscyl7Y2FzZSAwOmk9bitjLGE9citjO2JyZWFrO2Nhc2UgMTpuPWktYyxhPXIrYzticmVhaztjYXNlIDI6aT1uK2Mscj1hLWM7YnJlYWs7Y2FzZSAzOm49aS1jLHI9YS1jfXRoaXMuX3Jvb3QmJnRoaXMuX3Jvb3QubGVuZ3RoJiYodGhpcy5fcm9vdD11KX1yZXR1cm4gdGhpcy5feDA9bix0aGlzLl95MD1yLHRoaXMuX3gxPWksdGhpcy5feTE9YSx0aGlzfSxTcy5kYXRhPWZ1bmN0aW9uKCl7dmFyIHQ9W107cmV0dXJuIHRoaXMudmlzaXQoKGZ1bmN0aW9uKGUpe2lmKCFlLmxlbmd0aClkb3t0LnB1c2goZS5kYXRhKX13aGlsZShlPWUubmV4dCl9KSksdH0sU3MuZXh0ZW50PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuY292ZXIoK3RbMF1bMF0sK3RbMF1bMV0pLmNvdmVyKCt0WzFdWzBdLCt0WzFdWzFdKTppc05hTih0aGlzLl94MCk/dm9pZCAwOltbdGhpcy5feDAsdGhpcy5feTBdLFt0aGlzLl94MSx0aGlzLl95MV1dfSxTcy5maW5kPWZ1bmN0aW9uKHQsZSxuKXt2YXIgcixpLGEsbyxzLGMsdSxsPXRoaXMuX3gwLGg9dGhpcy5feTAsZj10aGlzLl94MSxkPXRoaXMuX3kxLHA9W10sZz10aGlzLl9yb290O2ZvcihnJiZwLnB1c2gobmV3IF9zKGcsbCxoLGYsZCkpLG51bGw9PW4/bj0xLzA6KGw9dC1uLGg9ZS1uLGY9dCtuLGQ9ZStuLG4qPW4pO2M9cC5wb3AoKTspaWYoISghKGc9Yy5ub2RlKXx8KGk9Yy54MCk+Znx8KGE9Yy55MCk+ZHx8KG89Yy54MSk8bHx8KHM9Yy55MSk8aCkpaWYoZy5sZW5ndGgpe3ZhciB5PShpK28pLzIsdj0oYStzKS8yO3AucHVzaChuZXcgX3MoZ1szXSx5LHYsbyxzKSxuZXcgX3MoZ1syXSxpLHYseSxzKSxuZXcgX3MoZ1sxXSx5LGEsbyx2KSxuZXcgX3MoZ1swXSxpLGEseSx2KSksKHU9KGU+PXYpPDwxfHQ+PXkpJiYoYz1wW3AubGVuZ3RoLTFdLHBbcC5sZW5ndGgtMV09cFtwLmxlbmd0aC0xLXVdLHBbcC5sZW5ndGgtMS11XT1jKX1lbHNle3ZhciBtPXQtK3RoaXMuX3guY2FsbChudWxsLGcuZGF0YSksYj1lLSt0aGlzLl95LmNhbGwobnVsbCxnLmRhdGEpLHg9bSptK2IqYjtpZih4PG4pe3ZhciBfPU1hdGguc3FydChuPXgpO2w9dC1fLGg9ZS1fLGY9dCtfLGQ9ZStfLHI9Zy5kYXRhfX1yZXR1cm4gcn0sU3MucmVtb3ZlPWZ1bmN0aW9uKHQpe2lmKGlzTmFOKGE9K3RoaXMuX3guY2FsbChudWxsLHQpKXx8aXNOYU4obz0rdGhpcy5feS5jYWxsKG51bGwsdCkpKXJldHVybiB0aGlzO3ZhciBlLG4scixpLGEsbyxzLGMsdSxsLGgsZixkPXRoaXMuX3Jvb3QscD10aGlzLl94MCxnPXRoaXMuX3kwLHk9dGhpcy5feDEsdj10aGlzLl95MTtpZighZClyZXR1cm4gdGhpcztpZihkLmxlbmd0aClmb3IoOzspe2lmKCh1PWE+PShzPShwK3kpLzIpKT9wPXM6eT1zLChsPW8+PShjPShnK3YpLzIpKT9nPWM6dj1jLGU9ZCwhKGQ9ZFtoPWw8PDF8dV0pKXJldHVybiB0aGlzO2lmKCFkLmxlbmd0aClicmVhazsoZVtoKzEmM118fGVbaCsyJjNdfHxlW2grMyYzXSkmJihuPWUsZj1oKX1mb3IoO2QuZGF0YSE9PXQ7KWlmKHI9ZCwhKGQ9ZC5uZXh0KSlyZXR1cm4gdGhpcztyZXR1cm4oaT1kLm5leHQpJiZkZWxldGUgZC5uZXh0LHI/KGk/ci5uZXh0PWk6ZGVsZXRlIHIubmV4dCx0aGlzKTplPyhpP2VbaF09aTpkZWxldGUgZVtoXSwoZD1lWzBdfHxlWzFdfHxlWzJdfHxlWzNdKSYmZD09PShlWzNdfHxlWzJdfHxlWzFdfHxlWzBdKSYmIWQubGVuZ3RoJiYobj9uW2ZdPWQ6dGhpcy5fcm9vdD1kKSx0aGlzKToodGhpcy5fcm9vdD1pLHRoaXMpfSxTcy5yZW1vdmVBbGw9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPTAsbj10Lmxlbmd0aDtlPG47KytlKXRoaXMucmVtb3ZlKHRbZV0pO3JldHVybiB0aGlzfSxTcy5yb290PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3Jvb3R9LFNzLnNpemU9ZnVuY3Rpb24oKXt2YXIgdD0wO3JldHVybiB0aGlzLnZpc2l0KChmdW5jdGlvbihlKXtpZighZS5sZW5ndGgpZG97Kyt0fXdoaWxlKGU9ZS5uZXh0KX0pKSx0fSxTcy52aXNpdD1mdW5jdGlvbih0KXt2YXIgZSxuLHIsaSxhLG8scz1bXSxjPXRoaXMuX3Jvb3Q7Zm9yKGMmJnMucHVzaChuZXcgX3MoYyx0aGlzLl94MCx0aGlzLl95MCx0aGlzLl94MSx0aGlzLl95MSkpO2U9cy5wb3AoKTspaWYoIXQoYz1lLm5vZGUscj1lLngwLGk9ZS55MCxhPWUueDEsbz1lLnkxKSYmYy5sZW5ndGgpe3ZhciB1PShyK2EpLzIsbD0oaStvKS8yOyhuPWNbM10pJiZzLnB1c2gobmV3IF9zKG4sdSxsLGEsbykpLChuPWNbMl0pJiZzLnB1c2gobmV3IF9zKG4scixsLHUsbykpLChuPWNbMV0pJiZzLnB1c2gobmV3IF9zKG4sdSxpLGEsbCkpLChuPWNbMF0pJiZzLnB1c2gobmV3IF9zKG4scixpLHUsbCkpfXJldHVybiB0aGlzfSxTcy52aXNpdEFmdGVyPWZ1bmN0aW9uKHQpe3ZhciBlLG49W10scj1bXTtmb3IodGhpcy5fcm9vdCYmbi5wdXNoKG5ldyBfcyh0aGlzLl9yb290LHRoaXMuX3gwLHRoaXMuX3kwLHRoaXMuX3gxLHRoaXMuX3kxKSk7ZT1uLnBvcCgpOyl7dmFyIGk9ZS5ub2RlO2lmKGkubGVuZ3RoKXt2YXIgYSxvPWUueDAscz1lLnkwLGM9ZS54MSx1PWUueTEsbD0obytjKS8yLGg9KHMrdSkvMjsoYT1pWzBdKSYmbi5wdXNoKG5ldyBfcyhhLG8scyxsLGgpKSwoYT1pWzFdKSYmbi5wdXNoKG5ldyBfcyhhLGwscyxjLGgpKSwoYT1pWzJdKSYmbi5wdXNoKG5ldyBfcyhhLG8saCxsLHUpKSwoYT1pWzNdKSYmbi5wdXNoKG5ldyBfcyhhLGwsaCxjLHUpKX1yLnB1c2goZSl9Zm9yKDtlPXIucG9wKCk7KXQoZS5ub2RlLGUueDAsZS55MCxlLngxLGUueTEpO3JldHVybiB0aGlzfSxTcy54PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0aGlzLl94PXQsdGhpcyk6dGhpcy5feH0sU3MueT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odGhpcy5feT10LHRoaXMpOnRoaXMuX3l9O3ZhciBPcz1mdW5jdGlvbih0KXt2YXIgZSxuLHI9MSxpPTE7ZnVuY3Rpb24gYSgpe2Zvcih2YXIgdCxhLHMsYyx1LGwsaCxmPWUubGVuZ3RoLGQ9MDtkPGk7KytkKWZvcihhPUVzKGUsQXMsTXMpLnZpc2l0QWZ0ZXIobyksdD0wO3Q8ZjsrK3Qpcz1lW3RdLGw9bltzLmluZGV4XSxoPWwqbCxjPXMueCtzLnZ4LHU9cy55K3MudnksYS52aXNpdChwKTtmdW5jdGlvbiBwKHQsZSxuLGksYSl7dmFyIG89dC5kYXRhLGY9dC5yLGQ9bCtmO2lmKCFvKXJldHVybiBlPmMrZHx8aTxjLWR8fG4+dStkfHxhPHUtZDtpZihvLmluZGV4PnMuaW5kZXgpe3ZhciBwPWMtby54LW8udngsZz11LW8ueS1vLnZ5LHk9cCpwK2cqZzt5PGQqZCYmKDA9PT1wJiYoeSs9KHA9YnMoKSkqcCksMD09PWcmJih5Kz0oZz1icygpKSpnKSx5PShkLSh5PU1hdGguc3FydCh5KSkpL3kqcixzLnZ4Kz0ocCo9eSkqKGQ9KGYqPWYpLyhoK2YpKSxzLnZ5Kz0oZyo9eSkqZCxvLnZ4LT1wKihkPTEtZCksby52eS09ZypkKX19fWZ1bmN0aW9uIG8odCl7aWYodC5kYXRhKXJldHVybiB0LnI9blt0LmRhdGEuaW5kZXhdO2Zvcih2YXIgZT10LnI9MDtlPDQ7KytlKXRbZV0mJnRbZV0ucj50LnImJih0LnI9dFtlXS5yKX1mdW5jdGlvbiBzKCl7aWYoZSl7dmFyIHIsaSxhPWUubGVuZ3RoO2ZvcihuPW5ldyBBcnJheShhKSxyPTA7cjxhOysrcilpPWVbcl0sbltpLmluZGV4XT0rdChpLHIsZSl9fXJldHVybiJmdW5jdGlvbiIhPXR5cGVvZiB0JiYodD1tcyhudWxsPT10PzE6K3QpKSxhLmluaXRpYWxpemU9ZnVuY3Rpb24odCl7ZT10LHMoKX0sYS5pdGVyYXRpb25zPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPSt0LGEpOml9LGEuc3RyZW5ndGg9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9K3QsYSk6cn0sYS5yYWRpdXM9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9ImZ1bmN0aW9uIj09dHlwZW9mIGU/ZTptcygrZSkscygpLGEpOnR9LGF9O2Z1bmN0aW9uIERzKHQpe3JldHVybiB0LmluZGV4fWZ1bmN0aW9uIE5zKHQsZSl7dmFyIG49dC5nZXQoZSk7aWYoIW4pdGhyb3cgbmV3IEVycm9yKCJtaXNzaW5nOiAiK2UpO3JldHVybiBufXZhciBCcz1mdW5jdGlvbih0KXt2YXIgZSxuLHIsaSxhLG89RHMscz1mdW5jdGlvbih0KXtyZXR1cm4gMS9NYXRoLm1pbihpW3Quc291cmNlLmluZGV4XSxpW3QudGFyZ2V0LmluZGV4XSl9LGM9bXMoMzApLHU9MTtmdW5jdGlvbiBsKHIpe2Zvcih2YXIgaT0wLG89dC5sZW5ndGg7aTx1OysraSlmb3IodmFyIHMsYyxsLGgsZixkLHAsZz0wO2c8bzsrK2cpYz0ocz10W2ddKS5zb3VyY2UsaD0obD1zLnRhcmdldCkueCtsLnZ4LWMueC1jLnZ4fHxicygpLGY9bC55K2wudnktYy55LWMudnl8fGJzKCksaCo9ZD0oKGQ9TWF0aC5zcXJ0KGgqaCtmKmYpKS1uW2ddKS9kKnIqZVtnXSxmKj1kLGwudngtPWgqKHA9YVtnXSksbC52eS09ZipwLGMudngrPWgqKHA9MS1wKSxjLnZ5Kz1mKnB9ZnVuY3Rpb24gaCgpe2lmKHIpe3ZhciBzLGMsdT1yLmxlbmd0aCxsPXQubGVuZ3RoLGg9SmkocixvKTtmb3Iocz0wLGk9bmV3IEFycmF5KHUpO3M8bDsrK3MpKGM9dFtzXSkuaW5kZXg9cywib2JqZWN0IiE9dHlwZW9mIGMuc291cmNlJiYoYy5zb3VyY2U9TnMoaCxjLnNvdXJjZSkpLCJvYmplY3QiIT10eXBlb2YgYy50YXJnZXQmJihjLnRhcmdldD1OcyhoLGMudGFyZ2V0KSksaVtjLnNvdXJjZS5pbmRleF09KGlbYy5zb3VyY2UuaW5kZXhdfHwwKSsxLGlbYy50YXJnZXQuaW5kZXhdPShpW2MudGFyZ2V0LmluZGV4XXx8MCkrMTtmb3Iocz0wLGE9bmV3IEFycmF5KGwpO3M8bDsrK3MpYz10W3NdLGFbc109aVtjLnNvdXJjZS5pbmRleF0vKGlbYy5zb3VyY2UuaW5kZXhdK2lbYy50YXJnZXQuaW5kZXhdKTtlPW5ldyBBcnJheShsKSxmKCksbj1uZXcgQXJyYXkobCksZCgpfX1mdW5jdGlvbiBmKCl7aWYocilmb3IodmFyIG49MCxpPXQubGVuZ3RoO248aTsrK24pZVtuXT0rcyh0W25dLG4sdCl9ZnVuY3Rpb24gZCgpe2lmKHIpZm9yKHZhciBlPTAsaT10Lmxlbmd0aDtlPGk7KytlKW5bZV09K2ModFtlXSxlLHQpfXJldHVybiBudWxsPT10JiYodD1bXSksbC5pbml0aWFsaXplPWZ1bmN0aW9uKHQpe3I9dCxoKCl9LGwubGlua3M9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9ZSxoKCksbCk6dH0sbC5pZD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz10LGwpOm99LGwuaXRlcmF0aW9ucz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odT0rdCxsKTp1fSxsLnN0cmVuZ3RoPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhzPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6bXMoK3QpLGYoKSxsKTpzfSxsLmRpc3RhbmNlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhjPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6bXMoK3QpLGQoKSxsKTpjfSxsfTtmdW5jdGlvbiBMcyh0KXtyZXR1cm4gdC54fWZ1bmN0aW9uIEZzKHQpe3JldHVybiB0Lnl9dmFyIFBzPU1hdGguUEkqKDMtTWF0aC5zcXJ0KDUpKSxJcz1mdW5jdGlvbih0KXt2YXIgZSxuPTEscj0uMDAxLGk9MS1NYXRoLnBvdyhyLDEvMzAwKSxhPTAsbz0uNixzPUppKCksYz1XbihsKSx1PWx0KCJ0aWNrIiwiZW5kIik7ZnVuY3Rpb24gbCgpe2goKSx1LmNhbGwoInRpY2siLGUpLG48ciYmKGMuc3RvcCgpLHUuY2FsbCgiZW5kIixlKSl9ZnVuY3Rpb24gaChyKXt2YXIgYyx1LGw9dC5sZW5ndGg7dm9pZCAwPT09ciYmKHI9MSk7Zm9yKHZhciBoPTA7aDxyOysraClmb3Iobis9KGEtbikqaSxzLmVhY2goKGZ1bmN0aW9uKHQpe3Qobil9KSksYz0wO2M8bDsrK2MpbnVsbD09KHU9dFtjXSkuZng/dS54Kz11LnZ4Kj1vOih1Lng9dS5meCx1LnZ4PTApLG51bGw9PXUuZnk/dS55Kz11LnZ5Kj1vOih1Lnk9dS5meSx1LnZ5PTApO3JldHVybiBlfWZ1bmN0aW9uIGYoKXtmb3IodmFyIGUsbj0wLHI9dC5sZW5ndGg7bjxyOysrbil7aWYoKGU9dFtuXSkuaW5kZXg9bixudWxsIT1lLmZ4JiYoZS54PWUuZngpLG51bGwhPWUuZnkmJihlLnk9ZS5meSksaXNOYU4oZS54KXx8aXNOYU4oZS55KSl7dmFyIGk9MTAqTWF0aC5zcXJ0KG4pLGE9bipQcztlLng9aSpNYXRoLmNvcyhhKSxlLnk9aSpNYXRoLnNpbihhKX0oaXNOYU4oZS52eCl8fGlzTmFOKGUudnkpKSYmKGUudng9ZS52eT0wKX19ZnVuY3Rpb24gZChlKXtyZXR1cm4gZS5pbml0aWFsaXplJiZlLmluaXRpYWxpemUodCksZX1yZXR1cm4gbnVsbD09dCYmKHQ9W10pLGYoKSxlPXt0aWNrOmgscmVzdGFydDpmdW5jdGlvbigpe3JldHVybiBjLnJlc3RhcnQobCksZX0sc3RvcDpmdW5jdGlvbigpe3JldHVybiBjLnN0b3AoKSxlfSxub2RlczpmdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD1uLGYoKSxzLmVhY2goZCksZSk6dH0sYWxwaGE6ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49K3QsZSk6bn0sYWxwaGFNaW46ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9K3QsZSk6cn0sYWxwaGFEZWNheTpmdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT0rdCxlKToraX0sYWxwaGFUYXJnZXQ6ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9K3QsZSk6YX0sdmVsb2NpdHlEZWNheTpmdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz0xLXQsZSk6MS1vfSxmb3JjZTpmdW5jdGlvbih0LG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPjE/KG51bGw9PW4/cy5yZW1vdmUodCk6cy5zZXQodCxkKG4pKSxlKTpzLmdldCh0KX0sZmluZDpmdW5jdGlvbihlLG4scil7dmFyIGksYSxvLHMsYyx1PTAsbD10Lmxlbmd0aDtmb3IobnVsbD09cj9yPTEvMDpyKj1yLHU9MDt1PGw7Kyt1KShvPShpPWUtKHM9dFt1XSkueCkqaSsoYT1uLXMueSkqYSk8ciYmKGM9cyxyPW8pO3JldHVybiBjfSxvbjpmdW5jdGlvbih0LG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPjE/KHUub24odCxuKSxlKTp1Lm9uKHQpfX19LGpzPWZ1bmN0aW9uKCl7dmFyIHQsZSxuLHIsaT1tcygtMzApLGE9MSxvPTEvMCxzPS44MTtmdW5jdGlvbiBjKHIpe3ZhciBpLGE9dC5sZW5ndGgsbz1Fcyh0LExzLEZzKS52aXNpdEFmdGVyKGwpO2ZvcihuPXIsaT0wO2k8YTsrK2kpZT10W2ldLG8udmlzaXQoaCl9ZnVuY3Rpb24gdSgpe2lmKHQpe3ZhciBlLG4sYT10Lmxlbmd0aDtmb3Iocj1uZXcgQXJyYXkoYSksZT0wO2U8YTsrK2Upbj10W2VdLHJbbi5pbmRleF09K2kobixlLHQpfX1mdW5jdGlvbiBsKHQpe3ZhciBlLG4saSxhLG8scz0wLGM9MDtpZih0Lmxlbmd0aCl7Zm9yKGk9YT1vPTA7bzw0OysrbykoZT10W29dKSYmKG49TWF0aC5hYnMoZS52YWx1ZSkpJiYocys9ZS52YWx1ZSxjKz1uLGkrPW4qZS54LGErPW4qZS55KTt0Lng9aS9jLHQueT1hL2N9ZWxzZXsoZT10KS54PWUuZGF0YS54LGUueT1lLmRhdGEueTtkb3tzKz1yW2UuZGF0YS5pbmRleF19d2hpbGUoZT1lLm5leHQpfXQudmFsdWU9c31mdW5jdGlvbiBoKHQsaSxjLHUpe2lmKCF0LnZhbHVlKXJldHVybiEwO3ZhciBsPXQueC1lLngsaD10LnktZS55LGY9dS1pLGQ9bCpsK2gqaDtpZihmKmYvczxkKXJldHVybiBkPG8mJigwPT09bCYmKGQrPShsPWJzKCkpKmwpLDA9PT1oJiYoZCs9KGg9YnMoKSkqaCksZDxhJiYoZD1NYXRoLnNxcnQoYSpkKSksZS52eCs9bCp0LnZhbHVlKm4vZCxlLnZ5Kz1oKnQudmFsdWUqbi9kKSwhMDtpZighKHQubGVuZ3RofHxkPj1vKSl7KHQuZGF0YSE9PWV8fHQubmV4dCkmJigwPT09bCYmKGQrPShsPWJzKCkpKmwpLDA9PT1oJiYoZCs9KGg9YnMoKSkqaCksZDxhJiYoZD1NYXRoLnNxcnQoYSpkKSkpO2Rve3QuZGF0YSE9PWUmJihmPXJbdC5kYXRhLmluZGV4XSpuL2QsZS52eCs9bCpmLGUudnkrPWgqZil9d2hpbGUodD10Lm5leHQpfX1yZXR1cm4gYy5pbml0aWFsaXplPWZ1bmN0aW9uKGUpe3Q9ZSx1KCl9LGMuc3RyZW5ndGg9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDptcygrdCksdSgpLGMpOml9LGMuZGlzdGFuY2VNaW49ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9dCp0LGMpOk1hdGguc3FydChhKX0sYy5kaXN0YW5jZU1heD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz10KnQsYyk6TWF0aC5zcXJ0KG8pfSxjLnRoZXRhPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhzPXQqdCxjKTpNYXRoLnNxcnQocyl9LGN9LFJzPWZ1bmN0aW9uKHQsZSxuKXt2YXIgcixpLGEsbz1tcyguMSk7ZnVuY3Rpb24gcyh0KXtmb3IodmFyIG89MCxzPXIubGVuZ3RoO288czsrK28pe3ZhciBjPXJbb10sdT1jLngtZXx8MWUtNixsPWMueS1ufHwxZS02LGg9TWF0aC5zcXJ0KHUqdStsKmwpLGY9KGFbb10taCkqaVtvXSp0L2g7Yy52eCs9dSpmLGMudnkrPWwqZn19ZnVuY3Rpb24gYygpe2lmKHIpe3ZhciBlLG49ci5sZW5ndGg7Zm9yKGk9bmV3IEFycmF5KG4pLGE9bmV3IEFycmF5KG4pLGU9MDtlPG47KytlKWFbZV09K3QocltlXSxlLHIpLGlbZV09aXNOYU4oYVtlXSk/MDorbyhyW2VdLGUscil9fXJldHVybiJmdW5jdGlvbiIhPXR5cGVvZiB0JiYodD1tcygrdCkpLG51bGw9PWUmJihlPTApLG51bGw9PW4mJihuPTApLHMuaW5pdGlhbGl6ZT1mdW5jdGlvbih0KXtyPXQsYygpfSxzLnN0cmVuZ3RoPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6bXMoK3QpLGMoKSxzKTpvfSxzLnJhZGl1cz1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD0iZnVuY3Rpb24iPT10eXBlb2YgZT9lOm1zKCtlKSxjKCkscyk6dH0scy54PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPSt0LHMpOmV9LHMueT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj0rdCxzKTpufSxzfSxZcz1mdW5jdGlvbih0KXt2YXIgZSxuLHIsaT1tcyguMSk7ZnVuY3Rpb24gYSh0KXtmb3IodmFyIGksYT0wLG89ZS5sZW5ndGg7YTxvOysrYSkoaT1lW2FdKS52eCs9KHJbYV0taS54KSpuW2FdKnR9ZnVuY3Rpb24gbygpe2lmKGUpe3ZhciBhLG89ZS5sZW5ndGg7Zm9yKG49bmV3IEFycmF5KG8pLHI9bmV3IEFycmF5KG8pLGE9MDthPG87KythKW5bYV09aXNOYU4oclthXT0rdChlW2FdLGEsZSkpPzA6K2koZVthXSxhLGUpfX1yZXR1cm4iZnVuY3Rpb24iIT10eXBlb2YgdCYmKHQ9bXMobnVsbD09dD8wOit0KSksYS5pbml0aWFsaXplPWZ1bmN0aW9uKHQpe2U9dCxvKCl9LGEuc3RyZW5ndGg9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDptcygrdCksbygpLGEpOml9LGEueD1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD0iZnVuY3Rpb24iPT10eXBlb2YgZT9lOm1zKCtlKSxvKCksYSk6dH0sYX0senM9ZnVuY3Rpb24odCl7dmFyIGUsbixyLGk9bXMoLjEpO2Z1bmN0aW9uIGEodCl7Zm9yKHZhciBpLGE9MCxvPWUubGVuZ3RoO2E8bzsrK2EpKGk9ZVthXSkudnkrPShyW2FdLWkueSkqblthXSp0fWZ1bmN0aW9uIG8oKXtpZihlKXt2YXIgYSxvPWUubGVuZ3RoO2ZvcihuPW5ldyBBcnJheShvKSxyPW5ldyBBcnJheShvKSxhPTA7YTxvOysrYSluW2FdPWlzTmFOKHJbYV09K3QoZVthXSxhLGUpKT8wOitpKGVbYV0sYSxlKX19cmV0dXJuImZ1bmN0aW9uIiE9dHlwZW9mIHQmJih0PW1zKG51bGw9PXQ/MDordCkpLGEuaW5pdGlhbGl6ZT1mdW5jdGlvbih0KXtlPXQsbygpfSxhLnN0cmVuZ3RoPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6bXMoK3QpLG8oKSxhKTppfSxhLnk9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9ImZ1bmN0aW9uIj09dHlwZW9mIGU/ZTptcygrZSksbygpLGEpOnR9LGF9LFVzPWZ1bmN0aW9uKHQsZSl7aWYoKG49KHQ9ZT90LnRvRXhwb25lbnRpYWwoZS0xKTp0LnRvRXhwb25lbnRpYWwoKSkuaW5kZXhPZigiZSIpKTwwKXJldHVybiBudWxsO3ZhciBuLHI9dC5zbGljZSgwLG4pO3JldHVybltyLmxlbmd0aD4xP3JbMF0rci5zbGljZSgyKTpyLCt0LnNsaWNlKG4rMSldfSwkcz1mdW5jdGlvbih0KXtyZXR1cm4odD1VcyhNYXRoLmFicyh0KSkpP3RbMV06TmFOfSxXcz0vXig/OiguKT8oWzw+PV5dKSk/KFsrXC0oIF0pPyhbJCNdKT8oMCk/KFxkKyk/KCwpPyhcLlxkKyk/KH4pPyhbYS16JV0pPyQvaTtmdW5jdGlvbiBWcyh0KXtpZighKGU9V3MuZXhlYyh0KSkpdGhyb3cgbmV3IEVycm9yKCJpbnZhbGlkIGZvcm1hdDogIit0KTt2YXIgZTtyZXR1cm4gbmV3IEhzKHtmaWxsOmVbMV0sYWxpZ246ZVsyXSxzaWduOmVbM10sc3ltYm9sOmVbNF0semVybzplWzVdLHdpZHRoOmVbNl0sY29tbWE6ZVs3XSxwcmVjaXNpb246ZVs4XSYmZVs4XS5zbGljZSgxKSx0cmltOmVbOV0sdHlwZTplWzEwXX0pfWZ1bmN0aW9uIEhzKHQpe3RoaXMuZmlsbD12b2lkIDA9PT10LmZpbGw/IiAiOnQuZmlsbCsiIix0aGlzLmFsaWduPXZvaWQgMD09PXQuYWxpZ24/Ij4iOnQuYWxpZ24rIiIsdGhpcy5zaWduPXZvaWQgMD09PXQuc2lnbj8iLSI6dC5zaWduKyIiLHRoaXMuc3ltYm9sPXZvaWQgMD09PXQuc3ltYm9sPyIiOnQuc3ltYm9sKyIiLHRoaXMuemVybz0hIXQuemVybyx0aGlzLndpZHRoPXZvaWQgMD09PXQud2lkdGg/dm9pZCAwOit0LndpZHRoLHRoaXMuY29tbWE9ISF0LmNvbW1hLHRoaXMucHJlY2lzaW9uPXZvaWQgMD09PXQucHJlY2lzaW9uP3ZvaWQgMDordC5wcmVjaXNpb24sdGhpcy50cmltPSEhdC50cmltLHRoaXMudHlwZT12b2lkIDA9PT10LnR5cGU/IiI6dC50eXBlKyIifVZzLnByb3RvdHlwZT1Icy5wcm90b3R5cGUsSHMucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZmlsbCt0aGlzLmFsaWduK3RoaXMuc2lnbit0aGlzLnN5bWJvbCsodGhpcy56ZXJvPyIwIjoiIikrKHZvaWQgMD09PXRoaXMud2lkdGg/IiI6TWF0aC5tYXgoMSwwfHRoaXMud2lkdGgpKSsodGhpcy5jb21tYT8iLCI6IiIpKyh2b2lkIDA9PT10aGlzLnByZWNpc2lvbj8iIjoiLiIrTWF0aC5tYXgoMCwwfHRoaXMucHJlY2lzaW9uKSkrKHRoaXMudHJpbT8ifiI6IiIpK3RoaXMudHlwZX07dmFyIEdzLHFzLFhzLFpzLEpzPWZ1bmN0aW9uKHQsZSl7dmFyIG49VXModCxlKTtpZighbilyZXR1cm4gdCsiIjt2YXIgcj1uWzBdLGk9blsxXTtyZXR1cm4gaTwwPyIwLiIrbmV3IEFycmF5KC1pKS5qb2luKCIwIikrcjpyLmxlbmd0aD5pKzE/ci5zbGljZSgwLGkrMSkrIi4iK3Iuc2xpY2UoaSsxKTpyK25ldyBBcnJheShpLXIubGVuZ3RoKzIpLmpvaW4oIjAiKX0sUXM9eyIlIjpmdW5jdGlvbih0LGUpe3JldHVybigxMDAqdCkudG9GaXhlZChlKX0sYjpmdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5yb3VuZCh0KS50b1N0cmluZygyKX0sYzpmdW5jdGlvbih0KXtyZXR1cm4gdCsiIn0sZDpmdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5yb3VuZCh0KS50b1N0cmluZygxMCl9LGU6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdC50b0V4cG9uZW50aWFsKGUpfSxmOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQudG9GaXhlZChlKX0sZzpmdW5jdGlvbih0LGUpe3JldHVybiB0LnRvUHJlY2lzaW9uKGUpfSxvOmZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLnJvdW5kKHQpLnRvU3RyaW5nKDgpfSxwOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIEpzKDEwMCp0LGUpfSxyOkpzLHM6ZnVuY3Rpb24odCxlKXt2YXIgbj1Vcyh0LGUpO2lmKCFuKXJldHVybiB0KyIiO3ZhciByPW5bMF0saT1uWzFdLGE9aS0oR3M9MypNYXRoLm1heCgtOCxNYXRoLm1pbig4LE1hdGguZmxvb3IoaS8zKSkpKSsxLG89ci5sZW5ndGg7cmV0dXJuIGE9PT1vP3I6YT5vP3IrbmV3IEFycmF5KGEtbysxKS5qb2luKCIwIik6YT4wP3Iuc2xpY2UoMCxhKSsiLiIrci5zbGljZShhKToiMC4iK25ldyBBcnJheSgxLWEpLmpvaW4oIjAiKStVcyh0LE1hdGgubWF4KDAsZSthLTEpKVswXX0sWDpmdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5yb3VuZCh0KS50b1N0cmluZygxNikudG9VcHBlckNhc2UoKX0seDpmdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5yb3VuZCh0KS50b1N0cmluZygxNil9fSxLcz1mdW5jdGlvbih0KXtyZXR1cm4gdH0sdGM9QXJyYXkucHJvdG90eXBlLm1hcCxlYz1bInkiLCJ6IiwiYSIsImYiLCJwIiwibiIsIsK1IiwibSIsIiIsImsiLCJNIiwiRyIsIlQiLCJQIiwiRSIsIloiLCJZIl0sbmM9ZnVuY3Rpb24odCl7dmFyIGUsbixyPXZvaWQgMD09PXQuZ3JvdXBpbmd8fHZvaWQgMD09PXQudGhvdXNhbmRzP0tzOihlPXRjLmNhbGwodC5ncm91cGluZyxOdW1iZXIpLG49dC50aG91c2FuZHMrIiIsZnVuY3Rpb24odCxyKXtmb3IodmFyIGk9dC5sZW5ndGgsYT1bXSxvPTAscz1lWzBdLGM9MDtpPjAmJnM+MCYmKGMrcysxPnImJihzPU1hdGgubWF4KDEsci1jKSksYS5wdXNoKHQuc3Vic3RyaW5nKGktPXMsaStzKSksISgoYys9cysxKT5yKSk7KXM9ZVtvPShvKzEpJWUubGVuZ3RoXTtyZXR1cm4gYS5yZXZlcnNlKCkuam9pbihuKX0pLGk9dm9pZCAwPT09dC5jdXJyZW5jeT8iIjp0LmN1cnJlbmN5WzBdKyIiLGE9dm9pZCAwPT09dC5jdXJyZW5jeT8iIjp0LmN1cnJlbmN5WzFdKyIiLG89dm9pZCAwPT09dC5kZWNpbWFsPyIuIjp0LmRlY2ltYWwrIiIscz12b2lkIDA9PT10Lm51bWVyYWxzP0tzOmZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gZS5yZXBsYWNlKC9bMC05XS9nLChmdW5jdGlvbihlKXtyZXR1cm4gdFsrZV19KSl9fSh0Yy5jYWxsKHQubnVtZXJhbHMsU3RyaW5nKSksYz12b2lkIDA9PT10LnBlcmNlbnQ/IiUiOnQucGVyY2VudCsiIix1PXZvaWQgMD09PXQubWludXM/Ii0iOnQubWludXMrIiIsbD12b2lkIDA9PT10Lm5hbj8iTmFOIjp0Lm5hbisiIjtmdW5jdGlvbiBoKHQpe3ZhciBlPSh0PVZzKHQpKS5maWxsLG49dC5hbGlnbixoPXQuc2lnbixmPXQuc3ltYm9sLGQ9dC56ZXJvLHA9dC53aWR0aCxnPXQuY29tbWEseT10LnByZWNpc2lvbix2PXQudHJpbSxtPXQudHlwZTsibiI9PT1tPyhnPSEwLG09ImciKTpRc1ttXXx8KHZvaWQgMD09PXkmJih5PTEyKSx2PSEwLG09ImciKSwoZHx8IjAiPT09ZSYmIj0iPT09bikmJihkPSEwLGU9IjAiLG49Ij0iKTt2YXIgYj0iJCI9PT1mP2k6IiMiPT09ZiYmL1tib3hYXS8udGVzdChtKT8iMCIrbS50b0xvd2VyQ2FzZSgpOiIiLHg9IiQiPT09Zj9hOi9bJXBdLy50ZXN0KG0pP2M6IiIsXz1Rc1ttXSxrPS9bZGVmZ3BycyVdLy50ZXN0KG0pO2Z1bmN0aW9uIHcodCl7dmFyIGksYSxjLGY9Yix3PXg7aWYoImMiPT09bSl3PV8odCkrdyx0PSIiO2Vsc2V7dmFyIEU9KHQ9K3QpPDA7aWYodD1pc05hTih0KT9sOl8oTWF0aC5hYnModCkseSksdiYmKHQ9ZnVuY3Rpb24odCl7dDpmb3IodmFyIGUsbj10Lmxlbmd0aCxyPTEsaT0tMTtyPG47KytyKXN3aXRjaCh0W3JdKXtjYXNlIi4iOmk9ZT1yO2JyZWFrO2Nhc2UiMCI6MD09PWkmJihpPXIpLGU9cjticmVhaztkZWZhdWx0OmlmKCErdFtyXSlicmVhayB0O2k+MCYmKGk9MCl9cmV0dXJuIGk+MD90LnNsaWNlKDAsaSkrdC5zbGljZShlKzEpOnR9KHQpKSxFJiYwPT0rdCYmKEU9ITEpLGY9KEU/IigiPT09aD9oOnU6Ii0iPT09aHx8IigiPT09aD8iIjpoKStmLHc9KCJzIj09PW0/ZWNbOCtHcy8zXToiIikrdysoRSYmIigiPT09aD8iKSI6IiIpLGspZm9yKGk9LTEsYT10Lmxlbmd0aDsrK2k8YTspaWYoNDg+KGM9dC5jaGFyQ29kZUF0KGkpKXx8Yz41Nyl7dz0oNDY9PT1jP28rdC5zbGljZShpKzEpOnQuc2xpY2UoaSkpK3csdD10LnNsaWNlKDAsaSk7YnJlYWt9fWcmJiFkJiYodD1yKHQsMS8wKSk7dmFyIFQ9Zi5sZW5ndGgrdC5sZW5ndGgrdy5sZW5ndGgsQz1UPHA/bmV3IEFycmF5KHAtVCsxKS5qb2luKGUpOiIiO3N3aXRjaChnJiZkJiYodD1yKEMrdCxDLmxlbmd0aD9wLXcubGVuZ3RoOjEvMCksQz0iIiksbil7Y2FzZSI8Ijp0PWYrdCt3K0M7YnJlYWs7Y2FzZSI9Ijp0PWYrQyt0K3c7YnJlYWs7Y2FzZSJeIjp0PUMuc2xpY2UoMCxUPUMubGVuZ3RoPj4xKStmK3QrdytDLnNsaWNlKFQpO2JyZWFrO2RlZmF1bHQ6dD1DK2YrdCt3fXJldHVybiBzKHQpfXJldHVybiB5PXZvaWQgMD09PXk/NjovW2dwcnNdLy50ZXN0KG0pP01hdGgubWF4KDEsTWF0aC5taW4oMjEseSkpOk1hdGgubWF4KDAsTWF0aC5taW4oMjAseSkpLHcudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdCsiIn0sd31yZXR1cm57Zm9ybWF0OmgsZm9ybWF0UHJlZml4OmZ1bmN0aW9uKHQsZSl7dmFyIG49aCgoKHQ9VnModCkpLnR5cGU9ImYiLHQpKSxyPTMqTWF0aC5tYXgoLTgsTWF0aC5taW4oOCxNYXRoLmZsb29yKCRzKGUpLzMpKSksaT1NYXRoLnBvdygxMCwtciksYT1lY1s4K3IvM107cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBuKGkqdCkrYX19fX07ZnVuY3Rpb24gcmModCl7cmV0dXJuIHFzPW5jKHQpLFhzPXFzLmZvcm1hdCxacz1xcy5mb3JtYXRQcmVmaXgscXN9cmMoe2RlY2ltYWw6Ii4iLHRob3VzYW5kczoiLCIsZ3JvdXBpbmc6WzNdLGN1cnJlbmN5OlsiJCIsIiJdLG1pbnVzOiItIn0pO3ZhciBpYz1mdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5tYXgoMCwtJHMoTWF0aC5hYnModCkpKX0sYWM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gTWF0aC5tYXgoMCwzKk1hdGgubWF4KC04LE1hdGgubWluKDgsTWF0aC5mbG9vcigkcyhlKS8zKSkpLSRzKE1hdGguYWJzKHQpKSl9LG9jPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQ9TWF0aC5hYnModCksZT1NYXRoLmFicyhlKS10LE1hdGgubWF4KDAsJHMoZSktJHModCkpKzF9LHNjPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBjY307ZnVuY3Rpb24gY2MoKXt0aGlzLnJlc2V0KCl9Y2MucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpjYyxyZXNldDpmdW5jdGlvbigpe3RoaXMucz10aGlzLnQ9MH0sYWRkOmZ1bmN0aW9uKHQpe2xjKHVjLHQsdGhpcy50KSxsYyh0aGlzLHVjLnMsdGhpcy5zKSx0aGlzLnM/dGhpcy50Kz11Yy50OnRoaXMucz11Yy50fSx2YWx1ZU9mOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc319O3ZhciB1Yz1uZXcgY2M7ZnVuY3Rpb24gbGModCxlLG4pe3ZhciByPXQucz1lK24saT1yLWUsYT1yLWk7dC50PWUtYSsobi1pKX12YXIgaGM9TWF0aC5QSSxmYz1oYy8yLGRjPWhjLzQscGM9MipoYyxnYz0xODAvaGMseWM9aGMvMTgwLHZjPU1hdGguYWJzLG1jPU1hdGguYXRhbixiYz1NYXRoLmF0YW4yLHhjPU1hdGguY29zLF9jPU1hdGguY2VpbCxrYz1NYXRoLmV4cCx3Yz0oTWF0aC5mbG9vcixNYXRoLmxvZyksRWM9TWF0aC5wb3csVGM9TWF0aC5zaW4sQ2M9TWF0aC5zaWdufHxmdW5jdGlvbih0KXtyZXR1cm4gdD4wPzE6dDwwPy0xOjB9LFNjPU1hdGguc3FydCxBYz1NYXRoLnRhbjtmdW5jdGlvbiBNYyh0KXtyZXR1cm4gdD4xPzA6dDwtMT9oYzpNYXRoLmFjb3ModCl9ZnVuY3Rpb24gT2ModCl7cmV0dXJuIHQ+MT9mYzp0PC0xPy1mYzpNYXRoLmFzaW4odCl9ZnVuY3Rpb24gRGModCl7cmV0dXJuKHQ9VGModC8yKSkqdH1mdW5jdGlvbiBOYygpe31mdW5jdGlvbiBCYyh0LGUpe3QmJkZjLmhhc093blByb3BlcnR5KHQudHlwZSkmJkZjW3QudHlwZV0odCxlKX12YXIgTGM9e0ZlYXR1cmU6ZnVuY3Rpb24odCxlKXtCYyh0Lmdlb21ldHJ5LGUpfSxGZWF0dXJlQ29sbGVjdGlvbjpmdW5jdGlvbih0LGUpe2Zvcih2YXIgbj10LmZlYXR1cmVzLHI9LTEsaT1uLmxlbmd0aDsrK3I8aTspQmMobltyXS5nZW9tZXRyeSxlKX19LEZjPXtTcGhlcmU6ZnVuY3Rpb24odCxlKXtlLnNwaGVyZSgpfSxQb2ludDpmdW5jdGlvbih0LGUpe3Q9dC5jb29yZGluYXRlcyxlLnBvaW50KHRbMF0sdFsxXSx0WzJdKX0sTXVsdGlQb2ludDpmdW5jdGlvbih0LGUpe2Zvcih2YXIgbj10LmNvb3JkaW5hdGVzLHI9LTEsaT1uLmxlbmd0aDsrK3I8aTspdD1uW3JdLGUucG9pbnQodFswXSx0WzFdLHRbMl0pfSxMaW5lU3RyaW5nOmZ1bmN0aW9uKHQsZSl7UGModC5jb29yZGluYXRlcyxlLDApfSxNdWx0aUxpbmVTdHJpbmc6ZnVuY3Rpb24odCxlKXtmb3IodmFyIG49dC5jb29yZGluYXRlcyxyPS0xLGk9bi5sZW5ndGg7KytyPGk7KVBjKG5bcl0sZSwwKX0sUG9seWdvbjpmdW5jdGlvbih0LGUpe0ljKHQuY29vcmRpbmF0ZXMsZSl9LE11bHRpUG9seWdvbjpmdW5jdGlvbih0LGUpe2Zvcih2YXIgbj10LmNvb3JkaW5hdGVzLHI9LTEsaT1uLmxlbmd0aDsrK3I8aTspSWMobltyXSxlKX0sR2VvbWV0cnlDb2xsZWN0aW9uOmZ1bmN0aW9uKHQsZSl7Zm9yKHZhciBuPXQuZ2VvbWV0cmllcyxyPS0xLGk9bi5sZW5ndGg7KytyPGk7KUJjKG5bcl0sZSl9fTtmdW5jdGlvbiBQYyh0LGUsbil7dmFyIHIsaT0tMSxhPXQubGVuZ3RoLW47Zm9yKGUubGluZVN0YXJ0KCk7KytpPGE7KXI9dFtpXSxlLnBvaW50KHJbMF0sclsxXSxyWzJdKTtlLmxpbmVFbmQoKX1mdW5jdGlvbiBJYyh0LGUpe3ZhciBuPS0xLHI9dC5sZW5ndGg7Zm9yKGUucG9seWdvblN0YXJ0KCk7KytuPHI7KVBjKHRbbl0sZSwxKTtlLnBvbHlnb25FbmQoKX12YXIgamMsUmMsWWMsemMsVWMsJGM9ZnVuY3Rpb24odCxlKXt0JiZMYy5oYXNPd25Qcm9wZXJ0eSh0LnR5cGUpP0xjW3QudHlwZV0odCxlKTpCYyh0LGUpfSxXYz1zYygpLFZjPXNjKCksSGM9e3BvaW50Ok5jLGxpbmVTdGFydDpOYyxsaW5lRW5kOk5jLHBvbHlnb25TdGFydDpmdW5jdGlvbigpe1djLnJlc2V0KCksSGMubGluZVN0YXJ0PUdjLEhjLmxpbmVFbmQ9cWN9LHBvbHlnb25FbmQ6ZnVuY3Rpb24oKXt2YXIgdD0rV2M7VmMuYWRkKHQ8MD9wYyt0OnQpLHRoaXMubGluZVN0YXJ0PXRoaXMubGluZUVuZD10aGlzLnBvaW50PU5jfSxzcGhlcmU6ZnVuY3Rpb24oKXtWYy5hZGQocGMpfX07ZnVuY3Rpb24gR2MoKXtIYy5wb2ludD1YY31mdW5jdGlvbiBxYygpe1pjKGpjLFJjKX1mdW5jdGlvbiBYYyh0LGUpe0hjLnBvaW50PVpjLGpjPXQsUmM9ZSxZYz10Kj15Yyx6Yz14YyhlPShlKj15YykvMitkYyksVWM9VGMoZSl9ZnVuY3Rpb24gWmModCxlKXt2YXIgbj0odCo9eWMpLVljLHI9bj49MD8xOi0xLGk9cipuLGE9eGMoZT0oZSo9eWMpLzIrZGMpLG89VGMoZSkscz1VYypvLGM9emMqYStzKnhjKGkpLHU9cypyKlRjKGkpO1djLmFkZChiYyh1LGMpKSxZYz10LHpjPWEsVWM9b312YXIgSmM9ZnVuY3Rpb24odCl7cmV0dXJuIFZjLnJlc2V0KCksJGModCxIYyksMipWY307ZnVuY3Rpb24gUWModCl7cmV0dXJuW2JjKHRbMV0sdFswXSksT2ModFsyXSldfWZ1bmN0aW9uIEtjKHQpe3ZhciBlPXRbMF0sbj10WzFdLHI9eGMobik7cmV0dXJuW3IqeGMoZSkscipUYyhlKSxUYyhuKV19ZnVuY3Rpb24gdHUodCxlKXtyZXR1cm4gdFswXSplWzBdK3RbMV0qZVsxXSt0WzJdKmVbMl19ZnVuY3Rpb24gZXUodCxlKXtyZXR1cm5bdFsxXSplWzJdLXRbMl0qZVsxXSx0WzJdKmVbMF0tdFswXSplWzJdLHRbMF0qZVsxXS10WzFdKmVbMF1dfWZ1bmN0aW9uIG51KHQsZSl7dFswXSs9ZVswXSx0WzFdKz1lWzFdLHRbMl0rPWVbMl19ZnVuY3Rpb24gcnUodCxlKXtyZXR1cm5bdFswXSplLHRbMV0qZSx0WzJdKmVdfWZ1bmN0aW9uIGl1KHQpe3ZhciBlPVNjKHRbMF0qdFswXSt0WzFdKnRbMV0rdFsyXSp0WzJdKTt0WzBdLz1lLHRbMV0vPWUsdFsyXS89ZX12YXIgYXUsb3Usc3UsY3UsdXUsbHUsaHUsZnUsZHUscHUsZ3U9c2MoKSx5dT17cG9pbnQ6dnUsbGluZVN0YXJ0OmJ1LGxpbmVFbmQ6eHUscG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7eXUucG9pbnQ9X3UseXUubGluZVN0YXJ0PWt1LHl1LmxpbmVFbmQ9d3UsZ3UucmVzZXQoKSxIYy5wb2x5Z29uU3RhcnQoKX0scG9seWdvbkVuZDpmdW5jdGlvbigpe0hjLnBvbHlnb25FbmQoKSx5dS5wb2ludD12dSx5dS5saW5lU3RhcnQ9YnUseXUubGluZUVuZD14dSxXYzwwPyhhdT0tKHN1PTE4MCksb3U9LShjdT05MCkpOmd1PjFlLTY/Y3U9OTA6Z3U8LTFlLTYmJihvdT0tOTApLHB1WzBdPWF1LHB1WzFdPXN1fSxzcGhlcmU6ZnVuY3Rpb24oKXthdT0tKHN1PTE4MCksb3U9LShjdT05MCl9fTtmdW5jdGlvbiB2dSh0LGUpe2R1LnB1c2gocHU9W2F1PXQsc3U9dF0pLGU8b3UmJihvdT1lKSxlPmN1JiYoY3U9ZSl9ZnVuY3Rpb24gbXUodCxlKXt2YXIgbj1LYyhbdCp5YyxlKnljXSk7aWYoZnUpe3ZhciByPWV1KGZ1LG4pLGk9ZXUoW3JbMV0sLXJbMF0sMF0scik7aXUoaSksaT1RYyhpKTt2YXIgYSxvPXQtdXUscz1vPjA/MTotMSxjPWlbMF0qZ2Mqcyx1PXZjKG8pPjE4MDt1XihzKnV1PGMmJmM8cyp0KT8oYT1pWzFdKmdjKT5jdSYmKGN1PWEpOnVeKHMqdXU8KGM9KGMrMzYwKSUzNjAtMTgwKSYmYzxzKnQpPyhhPS1pWzFdKmdjKTxvdSYmKG91PWEpOihlPG91JiYob3U9ZSksZT5jdSYmKGN1PWUpKSx1P3Q8dXU/RXUoYXUsdCk+RXUoYXUsc3UpJiYoc3U9dCk6RXUodCxzdSk+RXUoYXUsc3UpJiYoYXU9dCk6c3U+PWF1Pyh0PGF1JiYoYXU9dCksdD5zdSYmKHN1PXQpKTp0PnV1P0V1KGF1LHQpPkV1KGF1LHN1KSYmKHN1PXQpOkV1KHQsc3UpPkV1KGF1LHN1KSYmKGF1PXQpfWVsc2UgZHUucHVzaChwdT1bYXU9dCxzdT10XSk7ZTxvdSYmKG91PWUpLGU+Y3UmJihjdT1lKSxmdT1uLHV1PXR9ZnVuY3Rpb24gYnUoKXt5dS5wb2ludD1tdX1mdW5jdGlvbiB4dSgpe3B1WzBdPWF1LHB1WzFdPXN1LHl1LnBvaW50PXZ1LGZ1PW51bGx9ZnVuY3Rpb24gX3UodCxlKXtpZihmdSl7dmFyIG49dC11dTtndS5hZGQodmMobik+MTgwP24rKG4+MD8zNjA6LTM2MCk6bil9ZWxzZSBsdT10LGh1PWU7SGMucG9pbnQodCxlKSxtdSh0LGUpfWZ1bmN0aW9uIGt1KCl7SGMubGluZVN0YXJ0KCl9ZnVuY3Rpb24gd3UoKXtfdShsdSxodSksSGMubGluZUVuZCgpLHZjKGd1KT4xZS02JiYoYXU9LShzdT0xODApKSxwdVswXT1hdSxwdVsxXT1zdSxmdT1udWxsfWZ1bmN0aW9uIEV1KHQsZSl7cmV0dXJuKGUtPXQpPDA/ZSszNjA6ZX1mdW5jdGlvbiBUdSh0LGUpe3JldHVybiB0WzBdLWVbMF19ZnVuY3Rpb24gQ3UodCxlKXtyZXR1cm4gdFswXTw9dFsxXT90WzBdPD1lJiZlPD10WzFdOmU8dFswXXx8dFsxXTxlfXZhciBTdSxBdSxNdSxPdSxEdSxOdSxCdSxMdSxGdSxQdSxJdSxqdSxSdSxZdSx6dSxVdSwkdT1mdW5jdGlvbih0KXt2YXIgZSxuLHIsaSxhLG8scztpZihjdT1zdT0tKGF1PW91PTEvMCksZHU9W10sJGModCx5dSksbj1kdS5sZW5ndGgpe2ZvcihkdS5zb3J0KFR1KSxlPTEsYT1bcj1kdVswXV07ZTxuOysrZSlDdShyLChpPWR1W2VdKVswXSl8fEN1KHIsaVsxXSk/KEV1KHJbMF0saVsxXSk+RXUoclswXSxyWzFdKSYmKHJbMV09aVsxXSksRXUoaVswXSxyWzFdKT5FdShyWzBdLHJbMV0pJiYoclswXT1pWzBdKSk6YS5wdXNoKHI9aSk7Zm9yKG89LTEvMCxlPTAscj1hW249YS5sZW5ndGgtMV07ZTw9bjtyPWksKytlKWk9YVtlXSwocz1FdShyWzFdLGlbMF0pKT5vJiYobz1zLGF1PWlbMF0sc3U9clsxXSl9cmV0dXJuIGR1PXB1PW51bGwsYXU9PT0xLzB8fG91PT09MS8wP1tbTmFOLE5hTl0sW05hTixOYU5dXTpbW2F1LG91XSxbc3UsY3VdXX0sV3U9e3NwaGVyZTpOYyxwb2ludDpWdSxsaW5lU3RhcnQ6R3UsbGluZUVuZDpadSxwb2x5Z29uU3RhcnQ6ZnVuY3Rpb24oKXtXdS5saW5lU3RhcnQ9SnUsV3UubGluZUVuZD1RdX0scG9seWdvbkVuZDpmdW5jdGlvbigpe1d1LmxpbmVTdGFydD1HdSxXdS5saW5lRW5kPVp1fX07ZnVuY3Rpb24gVnUodCxlKXt0Kj15Yzt2YXIgbj14YyhlKj15Yyk7SHUobip4Yyh0KSxuKlRjKHQpLFRjKGUpKX1mdW5jdGlvbiBIdSh0LGUsbil7KytTdSxNdSs9KHQtTXUpL1N1LE91Kz0oZS1PdSkvU3UsRHUrPShuLUR1KS9TdX1mdW5jdGlvbiBHdSgpe1d1LnBvaW50PXF1fWZ1bmN0aW9uIHF1KHQsZSl7dCo9eWM7dmFyIG49eGMoZSo9eWMpO1l1PW4qeGModCksenU9bipUYyh0KSxVdT1UYyhlKSxXdS5wb2ludD1YdSxIdShZdSx6dSxVdSl9ZnVuY3Rpb24gWHUodCxlKXt0Kj15Yzt2YXIgbj14YyhlKj15Yykscj1uKnhjKHQpLGk9bipUYyh0KSxhPVRjKGUpLG89YmMoU2MoKG89enUqYS1VdSppKSpvKyhvPVV1KnItWXUqYSkqbysobz1ZdSppLXp1KnIpKm8pLFl1KnIrenUqaStVdSphKTtBdSs9byxOdSs9byooWXUrKFl1PXIpKSxCdSs9byooenUrKHp1PWkpKSxMdSs9byooVXUrKFV1PWEpKSxIdShZdSx6dSxVdSl9ZnVuY3Rpb24gWnUoKXtXdS5wb2ludD1WdX1mdW5jdGlvbiBKdSgpe1d1LnBvaW50PUt1fWZ1bmN0aW9uIFF1KCl7dGwoanUsUnUpLFd1LnBvaW50PVZ1fWZ1bmN0aW9uIEt1KHQsZSl7anU9dCxSdT1lLHQqPXljLGUqPXljLFd1LnBvaW50PXRsO3ZhciBuPXhjKGUpO1l1PW4qeGModCksenU9bipUYyh0KSxVdT1UYyhlKSxIdShZdSx6dSxVdSl9ZnVuY3Rpb24gdGwodCxlKXt0Kj15Yzt2YXIgbj14YyhlKj15Yykscj1uKnhjKHQpLGk9bipUYyh0KSxhPVRjKGUpLG89enUqYS1VdSppLHM9VXUqci1ZdSphLGM9WXUqaS16dSpyLHU9U2MobypvK3MqcytjKmMpLGw9T2ModSksaD11JiYtbC91O0Z1Kz1oKm8sUHUrPWgqcyxJdSs9aCpjLEF1Kz1sLE51Kz1sKihZdSsoWXU9cikpLEJ1Kz1sKih6dSsoenU9aSkpLEx1Kz1sKihVdSsoVXU9YSkpLEh1KFl1LHp1LFV1KX12YXIgZWw9ZnVuY3Rpb24odCl7U3U9QXU9TXU9T3U9RHU9TnU9QnU9THU9RnU9UHU9SXU9MCwkYyh0LFd1KTt2YXIgZT1GdSxuPVB1LHI9SXUsaT1lKmUrbipuK3IqcjtyZXR1cm4gaTwxZS0xMiYmKGU9TnUsbj1CdSxyPUx1LEF1PDFlLTYmJihlPU11LG49T3Uscj1EdSksKGk9ZSplK24qbityKnIpPDFlLTEyKT9bTmFOLE5hTl06W2JjKG4sZSkqZ2MsT2Moci9TYyhpKSkqZ2NdfSxubD1mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdH19LHJsPWZ1bmN0aW9uKHQsZSl7ZnVuY3Rpb24gbihuLHIpe3JldHVybiBuPXQobixyKSxlKG5bMF0sblsxXSl9cmV0dXJuIHQuaW52ZXJ0JiZlLmludmVydCYmKG4uaW52ZXJ0PWZ1bmN0aW9uKG4scil7cmV0dXJuKG49ZS5pbnZlcnQobixyKSkmJnQuaW52ZXJ0KG5bMF0sblsxXSl9KSxufTtmdW5jdGlvbiBpbCh0LGUpe3JldHVyblt2Yyh0KT5oYz90K01hdGgucm91bmQoLXQvcGMpKnBjOnQsZV19ZnVuY3Rpb24gYWwodCxlLG4pe3JldHVybih0JT1wYyk/ZXx8bj9ybChzbCh0KSxjbChlLG4pKTpzbCh0KTplfHxuP2NsKGUsbik6aWx9ZnVuY3Rpb24gb2wodCl7cmV0dXJuIGZ1bmN0aW9uKGUsbil7cmV0dXJuWyhlKz10KT5oYz9lLXBjOmU8LWhjP2UrcGM6ZSxuXX19ZnVuY3Rpb24gc2wodCl7dmFyIGU9b2wodCk7cmV0dXJuIGUuaW52ZXJ0PW9sKC10KSxlfWZ1bmN0aW9uIGNsKHQsZSl7dmFyIG49eGModCkscj1UYyh0KSxpPXhjKGUpLGE9VGMoZSk7ZnVuY3Rpb24gbyh0LGUpe3ZhciBvPXhjKGUpLHM9eGModCkqbyxjPVRjKHQpKm8sdT1UYyhlKSxsPXUqbitzKnI7cmV0dXJuW2JjKGMqaS1sKmEscypuLXUqciksT2MobCppK2MqYSldfXJldHVybiBvLmludmVydD1mdW5jdGlvbih0LGUpe3ZhciBvPXhjKGUpLHM9eGModCkqbyxjPVRjKHQpKm8sdT1UYyhlKSxsPXUqaS1jKmE7cmV0dXJuW2JjKGMqaSt1KmEscypuK2wqciksT2MobCpuLXMqcildfSxvfWlsLmludmVydD1pbDt2YXIgdWw9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlKXtyZXR1cm4oZT10KGVbMF0qeWMsZVsxXSp5YykpWzBdKj1nYyxlWzFdKj1nYyxlfXJldHVybiB0PWFsKHRbMF0qeWMsdFsxXSp5Yyx0Lmxlbmd0aD4yP3RbMl0qeWM6MCksZS5pbnZlcnQ9ZnVuY3Rpb24oZSl7cmV0dXJuKGU9dC5pbnZlcnQoZVswXSp5YyxlWzFdKnljKSlbMF0qPWdjLGVbMV0qPWdjLGV9LGV9O2Z1bmN0aW9uIGxsKHQsZSxuLHIsaSxhKXtpZihuKXt2YXIgbz14YyhlKSxzPVRjKGUpLGM9cipuO251bGw9PWk/KGk9ZStyKnBjLGE9ZS1jLzIpOihpPWhsKG8saSksYT1obChvLGEpLChyPjA/aTxhOmk+YSkmJihpKz1yKnBjKSk7Zm9yKHZhciB1LGw9aTtyPjA/bD5hOmw8YTtsLT1jKXU9UWMoW28sLXMqeGMobCksLXMqVGMobCldKSx0LnBvaW50KHVbMF0sdVsxXSl9fWZ1bmN0aW9uIGhsKHQsZSl7KGU9S2MoZSkpWzBdLT10LGl1KGUpO3ZhciBuPU1jKC1lWzFdKTtyZXR1cm4oKC1lWzJdPDA/LW46bikrcGMtMWUtNiklcGN9dmFyIGZsPWZ1bmN0aW9uKCl7dmFyIHQsZSxuPW5sKFswLDBdKSxyPW5sKDkwKSxpPW5sKDYpLGE9e3BvaW50OmZ1bmN0aW9uKG4scil7dC5wdXNoKG49ZShuLHIpKSxuWzBdKj1nYyxuWzFdKj1nY319O2Z1bmN0aW9uIG8oKXt2YXIgbz1uLmFwcGx5KHRoaXMsYXJndW1lbnRzKSxzPXIuYXBwbHkodGhpcyxhcmd1bWVudHMpKnljLGM9aS5hcHBseSh0aGlzLGFyZ3VtZW50cykqeWM7cmV0dXJuIHQ9W10sZT1hbCgtb1swXSp5Yywtb1sxXSp5YywwKS5pbnZlcnQsbGwoYSxzLGMsMSksbz17dHlwZToiUG9seWdvbiIsY29vcmRpbmF0ZXM6W3RdfSx0PWU9bnVsbCxvfXJldHVybiBvLmNlbnRlcj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj0iZnVuY3Rpb24iPT10eXBlb2YgdD90Om5sKFsrdFswXSwrdFsxXV0pLG8pOm59LG8ucmFkaXVzPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6bmwoK3QpLG8pOnJ9LG8ucHJlY2lzaW9uPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6bmwoK3QpLG8pOml9LG99LGRsPWZ1bmN0aW9uKCl7dmFyIHQsZT1bXTtyZXR1cm57cG9pbnQ6ZnVuY3Rpb24oZSxuKXt0LnB1c2goW2Usbl0pfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXtlLnB1c2godD1bXSl9LGxpbmVFbmQ6TmMscmVqb2luOmZ1bmN0aW9uKCl7ZS5sZW5ndGg+MSYmZS5wdXNoKGUucG9wKCkuY29uY2F0KGUuc2hpZnQoKSkpfSxyZXN1bHQ6ZnVuY3Rpb24oKXt2YXIgbj1lO3JldHVybiBlPVtdLHQ9bnVsbCxufX19LHBsPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHZjKHRbMF0tZVswXSk8MWUtNiYmdmModFsxXS1lWzFdKTwxZS02fTtmdW5jdGlvbiBnbCh0LGUsbixyKXt0aGlzLng9dCx0aGlzLno9ZSx0aGlzLm89bix0aGlzLmU9cix0aGlzLnY9ITEsdGhpcy5uPXRoaXMucD1udWxsfXZhciB5bD1mdW5jdGlvbih0LGUsbixyLGkpe3ZhciBhLG8scz1bXSxjPVtdO2lmKHQuZm9yRWFjaCgoZnVuY3Rpb24odCl7aWYoISgoZT10Lmxlbmd0aC0xKTw9MCkpe3ZhciBlLG4scj10WzBdLG89dFtlXTtpZihwbChyLG8pKXtmb3IoaS5saW5lU3RhcnQoKSxhPTA7YTxlOysrYSlpLnBvaW50KChyPXRbYV0pWzBdLHJbMV0pO2kubGluZUVuZCgpfWVsc2Ugcy5wdXNoKG49bmV3IGdsKHIsdCxudWxsLCEwKSksYy5wdXNoKG4ubz1uZXcgZ2wocixudWxsLG4sITEpKSxzLnB1c2gobj1uZXcgZ2wobyx0LG51bGwsITEpKSxjLnB1c2gobi5vPW5ldyBnbChvLG51bGwsbiwhMCkpfX0pKSxzLmxlbmd0aCl7Zm9yKGMuc29ydChlKSx2bChzKSx2bChjKSxhPTAsbz1jLmxlbmd0aDthPG87KythKWNbYV0uZT1uPSFuO2Zvcih2YXIgdSxsLGg9c1swXTs7KXtmb3IodmFyIGY9aCxkPSEwO2YudjspaWYoKGY9Zi5uKT09PWgpcmV0dXJuO3U9Zi56LGkubGluZVN0YXJ0KCk7ZG97aWYoZi52PWYuby52PSEwLGYuZSl7aWYoZClmb3IoYT0wLG89dS5sZW5ndGg7YTxvOysrYSlpLnBvaW50KChsPXVbYV0pWzBdLGxbMV0pO2Vsc2UgcihmLngsZi5uLngsMSxpKTtmPWYubn1lbHNle2lmKGQpZm9yKHU9Zi5wLnosYT11Lmxlbmd0aC0xO2E+PTA7LS1hKWkucG9pbnQoKGw9dVthXSlbMF0sbFsxXSk7ZWxzZSByKGYueCxmLnAueCwtMSxpKTtmPWYucH11PShmPWYubykueixkPSFkfXdoaWxlKCFmLnYpO2kubGluZUVuZCgpfX19O2Z1bmN0aW9uIHZsKHQpe2lmKGU9dC5sZW5ndGgpe2Zvcih2YXIgZSxuLHI9MCxpPXRbMF07KytyPGU7KWkubj1uPXRbcl0sbi5wPWksaT1uO2kubj1uPXRbMF0sbi5wPWl9fXZhciBtbD1zYygpO2Z1bmN0aW9uIGJsKHQpe3JldHVybiB2Yyh0WzBdKTw9aGM/dFswXTpDYyh0WzBdKSooKHZjKHRbMF0pK2hjKSVwYy1oYyl9dmFyIHhsPWZ1bmN0aW9uKHQsZSl7dmFyIG49YmwoZSkscj1lWzFdLGk9VGMociksYT1bVGMobiksLXhjKG4pLDBdLG89MCxzPTA7bWwucmVzZXQoKSwxPT09aT9yPWZjKzFlLTY6LTE9PT1pJiYocj0tZmMtMWUtNik7Zm9yKHZhciBjPTAsdT10Lmxlbmd0aDtjPHU7KytjKWlmKGg9KGw9dFtjXSkubGVuZ3RoKWZvcih2YXIgbCxoLGY9bFtoLTFdLGQ9YmwoZikscD1mWzFdLzIrZGMsZz1UYyhwKSx5PXhjKHApLHY9MDt2PGg7Kyt2LGQ9YixnPV8seT1rLGY9bSl7dmFyIG09bFt2XSxiPWJsKG0pLHg9bVsxXS8yK2RjLF89VGMoeCksaz14Yyh4KSx3PWItZCxFPXc+PTA/MTotMSxUPUUqdyxDPVQ+aGMsUz1nKl87aWYobWwuYWRkKGJjKFMqRSpUYyhUKSx5KmsrUyp4YyhUKSkpLG8rPUM/dytFKnBjOncsQ15kPj1uXmI+PW4pe3ZhciBBPWV1KEtjKGYpLEtjKG0pKTtpdShBKTt2YXIgTT1ldShhLEEpO2l1KE0pO3ZhciBPPShDXnc+PTA/LTE6MSkqT2MoTVsyXSk7KHI+T3x8cj09PU8mJihBWzBdfHxBWzFdKSkmJihzKz1DXnc+PTA/MTotMSl9fXJldHVybihvPC0xZS02fHxvPDFlLTYmJm1sPC0xZS02KV4xJnN9LF9sPWZ1bmN0aW9uKHQsZSxuLHIpe3JldHVybiBmdW5jdGlvbihpKXt2YXIgYSxvLHMsYz1lKGkpLHU9ZGwoKSxsPWUodSksaD0hMSxmPXtwb2ludDpkLGxpbmVTdGFydDpnLGxpbmVFbmQ6eSxwb2x5Z29uU3RhcnQ6ZnVuY3Rpb24oKXtmLnBvaW50PXYsZi5saW5lU3RhcnQ9bSxmLmxpbmVFbmQ9YixvPVtdLGE9W119LHBvbHlnb25FbmQ6ZnVuY3Rpb24oKXtmLnBvaW50PWQsZi5saW5lU3RhcnQ9ZyxmLmxpbmVFbmQ9eSxvPUkobyk7dmFyIHQ9eGwoYSxyKTtvLmxlbmd0aD8oaHx8KGkucG9seWdvblN0YXJ0KCksaD0hMCkseWwobyx3bCx0LG4saSkpOnQmJihofHwoaS5wb2x5Z29uU3RhcnQoKSxoPSEwKSxpLmxpbmVTdGFydCgpLG4obnVsbCxudWxsLDEsaSksaS5saW5lRW5kKCkpLGgmJihpLnBvbHlnb25FbmQoKSxoPSExKSxvPWE9bnVsbH0sc3BoZXJlOmZ1bmN0aW9uKCl7aS5wb2x5Z29uU3RhcnQoKSxpLmxpbmVTdGFydCgpLG4obnVsbCxudWxsLDEsaSksaS5saW5lRW5kKCksaS5wb2x5Z29uRW5kKCl9fTtmdW5jdGlvbiBkKGUsbil7dChlLG4pJiZpLnBvaW50KGUsbil9ZnVuY3Rpb24gcCh0LGUpe2MucG9pbnQodCxlKX1mdW5jdGlvbiBnKCl7Zi5wb2ludD1wLGMubGluZVN0YXJ0KCl9ZnVuY3Rpb24geSgpe2YucG9pbnQ9ZCxjLmxpbmVFbmQoKX1mdW5jdGlvbiB2KHQsZSl7cy5wdXNoKFt0LGVdKSxsLnBvaW50KHQsZSl9ZnVuY3Rpb24gbSgpe2wubGluZVN0YXJ0KCkscz1bXX1mdW5jdGlvbiBiKCl7dihzWzBdWzBdLHNbMF1bMV0pLGwubGluZUVuZCgpO3ZhciB0LGUsbixyLGM9bC5jbGVhbigpLGY9dS5yZXN1bHQoKSxkPWYubGVuZ3RoO2lmKHMucG9wKCksYS5wdXNoKHMpLHM9bnVsbCxkKWlmKDEmYyl7aWYoKGU9KG49ZlswXSkubGVuZ3RoLTEpPjApe2ZvcihofHwoaS5wb2x5Z29uU3RhcnQoKSxoPSEwKSxpLmxpbmVTdGFydCgpLHQ9MDt0PGU7Kyt0KWkucG9pbnQoKHI9blt0XSlbMF0sclsxXSk7aS5saW5lRW5kKCl9fWVsc2UgZD4xJiYyJmMmJmYucHVzaChmLnBvcCgpLmNvbmNhdChmLnNoaWZ0KCkpKSxvLnB1c2goZi5maWx0ZXIoa2wpKX1yZXR1cm4gZn19O2Z1bmN0aW9uIGtsKHQpe3JldHVybiB0Lmxlbmd0aD4xfWZ1bmN0aW9uIHdsKHQsZSl7cmV0dXJuKCh0PXQueClbMF08MD90WzFdLWZjLTFlLTY6ZmMtdFsxXSktKChlPWUueClbMF08MD9lWzFdLWZjLTFlLTY6ZmMtZVsxXSl9dmFyIEVsPV9sKChmdW5jdGlvbigpe3JldHVybiEwfSksKGZ1bmN0aW9uKHQpe3ZhciBlLG49TmFOLHI9TmFOLGk9TmFOO3JldHVybntsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0LmxpbmVTdGFydCgpLGU9MX0scG9pbnQ6ZnVuY3Rpb24oYSxvKXt2YXIgcz1hPjA/aGM6LWhjLGM9dmMoYS1uKTt2YyhjLWhjKTwxZS02Pyh0LnBvaW50KG4scj0ocitvKS8yPjA/ZmM6LWZjKSx0LnBvaW50KGksciksdC5saW5lRW5kKCksdC5saW5lU3RhcnQoKSx0LnBvaW50KHMsciksdC5wb2ludChhLHIpLGU9MCk6aSE9PXMmJmM+PWhjJiYodmMobi1pKTwxZS02JiYobi09MWUtNippKSx2YyhhLXMpPDFlLTYmJihhLT0xZS02KnMpLHI9ZnVuY3Rpb24odCxlLG4scil7dmFyIGksYSxvPVRjKHQtbik7cmV0dXJuIHZjKG8pPjFlLTY/bWMoKFRjKGUpKihhPXhjKHIpKSpUYyhuKS1UYyhyKSooaT14YyhlKSkqVGModCkpLyhpKmEqbykpOihlK3IpLzJ9KG4scixhLG8pLHQucG9pbnQoaSxyKSx0LmxpbmVFbmQoKSx0LmxpbmVTdGFydCgpLHQucG9pbnQocyxyKSxlPTApLHQucG9pbnQobj1hLHI9byksaT1zfSxsaW5lRW5kOmZ1bmN0aW9uKCl7dC5saW5lRW5kKCksbj1yPU5hTn0sY2xlYW46ZnVuY3Rpb24oKXtyZXR1cm4gMi1lfX19KSwoZnVuY3Rpb24odCxlLG4scil7dmFyIGk7aWYobnVsbD09dClpPW4qZmMsci5wb2ludCgtaGMsaSksci5wb2ludCgwLGkpLHIucG9pbnQoaGMsaSksci5wb2ludChoYywwKSxyLnBvaW50KGhjLC1pKSxyLnBvaW50KDAsLWkpLHIucG9pbnQoLWhjLC1pKSxyLnBvaW50KC1oYywwKSxyLnBvaW50KC1oYyxpKTtlbHNlIGlmKHZjKHRbMF0tZVswXSk+MWUtNil7dmFyIGE9dFswXTxlWzBdP2hjOi1oYztpPW4qYS8yLHIucG9pbnQoLWEsaSksci5wb2ludCgwLGkpLHIucG9pbnQoYSxpKX1lbHNlIHIucG9pbnQoZVswXSxlWzFdKX0pLFstaGMsLWZjXSk7dmFyIFRsPWZ1bmN0aW9uKHQpe3ZhciBlPXhjKHQpLG49Nip5YyxyPWU+MCxpPXZjKGUpPjFlLTY7ZnVuY3Rpb24gYSh0LG4pe3JldHVybiB4Yyh0KSp4YyhuKT5lfWZ1bmN0aW9uIG8odCxuLHIpe3ZhciBpPVsxLDAsMF0sYT1ldShLYyh0KSxLYyhuKSksbz10dShhLGEpLHM9YVswXSxjPW8tcypzO2lmKCFjKXJldHVybiFyJiZ0O3ZhciB1PWUqby9jLGw9LWUqcy9jLGg9ZXUoaSxhKSxmPXJ1KGksdSk7bnUoZixydShhLGwpKTt2YXIgZD1oLHA9dHUoZixkKSxnPXR1KGQsZCkseT1wKnAtZyoodHUoZixmKS0xKTtpZighKHk8MCkpe3ZhciB2PVNjKHkpLG09cnUoZCwoLXAtdikvZyk7aWYobnUobSxmKSxtPVFjKG0pLCFyKXJldHVybiBtO3ZhciBiLHg9dFswXSxfPW5bMF0saz10WzFdLHc9blsxXTtfPHgmJihiPXgseD1fLF89Yik7dmFyIEU9Xy14LFQ9dmMoRS1oYyk8MWUtNjtpZighVCYmdzxrJiYoYj1rLGs9dyx3PWIpLFR8fEU8MWUtNj9UP2srdz4wXm1bMV08KHZjKG1bMF0teCk8MWUtNj9rOncpOms8PW1bMV0mJm1bMV08PXc6RT5oY14oeDw9bVswXSYmbVswXTw9Xykpe3ZhciBDPXJ1KGQsKC1wK3YpL2cpO3JldHVybiBudShDLGYpLFttLFFjKEMpXX19fWZ1bmN0aW9uIHMoZSxuKXt2YXIgaT1yP3Q6aGMtdCxhPTA7cmV0dXJuIGU8LWk/YXw9MTplPmkmJihhfD0yKSxuPC1pP2F8PTQ6bj5pJiYoYXw9OCksYX1yZXR1cm4gX2woYSwoZnVuY3Rpb24odCl7dmFyIGUsbixjLHUsbDtyZXR1cm57bGluZVN0YXJ0OmZ1bmN0aW9uKCl7dT1jPSExLGw9MX0scG9pbnQ6ZnVuY3Rpb24oaCxmKXt2YXIgZCxwPVtoLGZdLGc9YShoLGYpLHk9cj9nPzA6cyhoLGYpOmc/cyhoKyhoPDA/aGM6LWhjKSxmKTowO2lmKCFlJiYodT1jPWcpJiZ0LmxpbmVTdGFydCgpLGchPT1jJiYoIShkPW8oZSxwKSl8fHBsKGUsZCl8fHBsKHAsZCkpJiYocFswXSs9MWUtNixwWzFdKz0xZS02LGc9YShwWzBdLHBbMV0pKSxnIT09YylsPTAsZz8odC5saW5lU3RhcnQoKSxkPW8ocCxlKSx0LnBvaW50KGRbMF0sZFsxXSkpOihkPW8oZSxwKSx0LnBvaW50KGRbMF0sZFsxXSksdC5saW5lRW5kKCkpLGU9ZDtlbHNlIGlmKGkmJmUmJnJeZyl7dmFyIHY7eSZufHwhKHY9byhwLGUsITApKXx8KGw9MCxyPyh0LmxpbmVTdGFydCgpLHQucG9pbnQodlswXVswXSx2WzBdWzFdKSx0LnBvaW50KHZbMV1bMF0sdlsxXVsxXSksdC5saW5lRW5kKCkpOih0LnBvaW50KHZbMV1bMF0sdlsxXVsxXSksdC5saW5lRW5kKCksdC5saW5lU3RhcnQoKSx0LnBvaW50KHZbMF1bMF0sdlswXVsxXSkpKX0hZ3x8ZSYmcGwoZSxwKXx8dC5wb2ludChwWzBdLHBbMV0pLGU9cCxjPWcsbj15fSxsaW5lRW5kOmZ1bmN0aW9uKCl7YyYmdC5saW5lRW5kKCksZT1udWxsfSxjbGVhbjpmdW5jdGlvbigpe3JldHVybiBsfCh1JiZjKTw8MX19fSksKGZ1bmN0aW9uKGUscixpLGEpe2xsKGEsdCxuLGksZSxyKX0pLHI/WzAsLXRdOlstaGMsdC1oY10pfTtmdW5jdGlvbiBDbCh0LGUsbixyKXtmdW5jdGlvbiBpKGksYSl7cmV0dXJuIHQ8PWkmJmk8PW4mJmU8PWEmJmE8PXJ9ZnVuY3Rpb24gYShpLGEscyx1KXt2YXIgbD0wLGg9MDtpZihudWxsPT1pfHwobD1vKGkscykpIT09KGg9byhhLHMpKXx8YyhpLGEpPDBecz4wKWRve3UucG9pbnQoMD09PWx8fDM9PT1sP3Q6bixsPjE/cjplKX13aGlsZSgobD0obCtzKzQpJTQpIT09aCk7ZWxzZSB1LnBvaW50KGFbMF0sYVsxXSl9ZnVuY3Rpb24gbyhyLGkpe3JldHVybiB2YyhyWzBdLXQpPDFlLTY/aT4wPzA6Mzp2YyhyWzBdLW4pPDFlLTY/aT4wPzI6MTp2YyhyWzFdLWUpPDFlLTY/aT4wPzE6MDppPjA/MzoyfWZ1bmN0aW9uIHModCxlKXtyZXR1cm4gYyh0LngsZS54KX1mdW5jdGlvbiBjKHQsZSl7dmFyIG49byh0LDEpLHI9byhlLDEpO3JldHVybiBuIT09cj9uLXI6MD09PW4/ZVsxXS10WzFdOjE9PT1uP3RbMF0tZVswXToyPT09bj90WzFdLWVbMV06ZVswXS10WzBdfXJldHVybiBmdW5jdGlvbihvKXt2YXIgYyx1LGwsaCxmLGQscCxnLHksdixtLGI9byx4PWRsKCksXz17cG9pbnQ6ayxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXtfLnBvaW50PXcsdSYmdS5wdXNoKGw9W10pO3Y9ITAseT0hMSxwPWc9TmFOfSxsaW5lRW5kOmZ1bmN0aW9uKCl7YyYmKHcoaCxmKSxkJiZ5JiZ4LnJlam9pbigpLGMucHVzaCh4LnJlc3VsdCgpKSk7Xy5wb2ludD1rLHkmJmIubGluZUVuZCgpfSxwb2x5Z29uU3RhcnQ6ZnVuY3Rpb24oKXtiPXgsYz1bXSx1PVtdLG09ITB9LHBvbHlnb25FbmQ6ZnVuY3Rpb24oKXt2YXIgZT1mdW5jdGlvbigpe2Zvcih2YXIgZT0wLG49MCxpPXUubGVuZ3RoO248aTsrK24pZm9yKHZhciBhLG8scz11W25dLGM9MSxsPXMubGVuZ3RoLGg9c1swXSxmPWhbMF0sZD1oWzFdO2M8bDsrK2MpYT1mLG89ZCxoPXNbY10sZj1oWzBdLGQ9aFsxXSxvPD1yP2Q+ciYmKGYtYSkqKHItbyk+KGQtbykqKHQtYSkmJisrZTpkPD1yJiYoZi1hKSooci1vKTwoZC1vKSoodC1hKSYmLS1lO3JldHVybiBlfSgpLG49bSYmZSxpPShjPUkoYykpLmxlbmd0aDsobnx8aSkmJihvLnBvbHlnb25TdGFydCgpLG4mJihvLmxpbmVTdGFydCgpLGEobnVsbCxudWxsLDEsbyksby5saW5lRW5kKCkpLGkmJnlsKGMscyxlLGEsbyksby5wb2x5Z29uRW5kKCkpO2I9byxjPXU9bD1udWxsfX07ZnVuY3Rpb24gayh0LGUpe2kodCxlKSYmYi5wb2ludCh0LGUpfWZ1bmN0aW9uIHcoYSxvKXt2YXIgcz1pKGEsbyk7aWYodSYmbC5wdXNoKFthLG9dKSx2KWg9YSxmPW8sZD1zLHY9ITEscyYmKGIubGluZVN0YXJ0KCksYi5wb2ludChhLG8pKTtlbHNlIGlmKHMmJnkpYi5wb2ludChhLG8pO2Vsc2V7dmFyIGM9W3A9TWF0aC5tYXgoLTFlOSxNYXRoLm1pbigxZTkscCkpLGc9TWF0aC5tYXgoLTFlOSxNYXRoLm1pbigxZTksZykpXSx4PVthPU1hdGgubWF4KC0xZTksTWF0aC5taW4oMWU5LGEpKSxvPU1hdGgubWF4KC0xZTksTWF0aC5taW4oMWU5LG8pKV07IWZ1bmN0aW9uKHQsZSxuLHIsaSxhKXt2YXIgbyxzPXRbMF0sYz10WzFdLHU9MCxsPTEsaD1lWzBdLXMsZj1lWzFdLWM7aWYobz1uLXMsaHx8IShvPjApKXtpZihvLz1oLGg8MCl7aWYobzx1KXJldHVybjtvPGwmJihsPW8pfWVsc2UgaWYoaD4wKXtpZihvPmwpcmV0dXJuO28+dSYmKHU9byl9aWYobz1pLXMsaHx8IShvPDApKXtpZihvLz1oLGg8MCl7aWYobz5sKXJldHVybjtvPnUmJih1PW8pfWVsc2UgaWYoaD4wKXtpZihvPHUpcmV0dXJuO288bCYmKGw9byl9aWYobz1yLWMsZnx8IShvPjApKXtpZihvLz1mLGY8MCl7aWYobzx1KXJldHVybjtvPGwmJihsPW8pfWVsc2UgaWYoZj4wKXtpZihvPmwpcmV0dXJuO28+dSYmKHU9byl9aWYobz1hLWMsZnx8IShvPDApKXtpZihvLz1mLGY8MCl7aWYobz5sKXJldHVybjtvPnUmJih1PW8pfWVsc2UgaWYoZj4wKXtpZihvPHUpcmV0dXJuO288bCYmKGw9byl9cmV0dXJuIHU+MCYmKHRbMF09cyt1KmgsdFsxXT1jK3UqZiksbDwxJiYoZVswXT1zK2wqaCxlWzFdPWMrbCpmKSwhMH19fX19KGMseCx0LGUsbixyKT9zJiYoYi5saW5lU3RhcnQoKSxiLnBvaW50KGEsbyksbT0hMSk6KHl8fChiLmxpbmVTdGFydCgpLGIucG9pbnQoY1swXSxjWzFdKSksYi5wb2ludCh4WzBdLHhbMV0pLHN8fGIubGluZUVuZCgpLG09ITEpfXA9YSxnPW8seT1zfXJldHVybiBffX12YXIgU2wsQWwsTWwsT2w9ZnVuY3Rpb24oKXt2YXIgdCxlLG4scj0wLGk9MCxhPTk2MCxvPTUwMDtyZXR1cm4gbj17c3RyZWFtOmZ1bmN0aW9uKG4pe3JldHVybiB0JiZlPT09bj90OnQ9Q2wocixpLGEsbykoZT1uKX0sZXh0ZW50OmZ1bmN0aW9uKHMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPStzWzBdWzBdLGk9K3NbMF1bMV0sYT0rc1sxXVswXSxvPStzWzFdWzFdLHQ9ZT1udWxsLG4pOltbcixpXSxbYSxvXV19fX0sRGw9c2MoKSxObD17c3BoZXJlOk5jLHBvaW50Ok5jLGxpbmVTdGFydDpmdW5jdGlvbigpe05sLnBvaW50PUxsLE5sLmxpbmVFbmQ9Qmx9LGxpbmVFbmQ6TmMscG9seWdvblN0YXJ0Ok5jLHBvbHlnb25FbmQ6TmN9O2Z1bmN0aW9uIEJsKCl7TmwucG9pbnQ9TmwubGluZUVuZD1OY31mdW5jdGlvbiBMbCh0LGUpe1NsPXQqPXljLEFsPVRjKGUqPXljKSxNbD14YyhlKSxObC5wb2ludD1GbH1mdW5jdGlvbiBGbCh0LGUpe3QqPXljO3ZhciBuPVRjKGUqPXljKSxyPXhjKGUpLGk9dmModC1TbCksYT14YyhpKSxvPXIqVGMoaSkscz1NbCpuLUFsKnIqYSxjPUFsKm4rTWwqciphO0RsLmFkZChiYyhTYyhvKm8rcypzKSxjKSksU2w9dCxBbD1uLE1sPXJ9dmFyIFBsPWZ1bmN0aW9uKHQpe3JldHVybiBEbC5yZXNldCgpLCRjKHQsTmwpLCtEbH0sSWw9W251bGwsbnVsbF0samw9e3R5cGU6IkxpbmVTdHJpbmciLGNvb3JkaW5hdGVzOklsfSxSbD1mdW5jdGlvbih0LGUpe3JldHVybiBJbFswXT10LElsWzFdPWUsUGwoamwpfSxZbD17RmVhdHVyZTpmdW5jdGlvbih0LGUpe3JldHVybiBVbCh0Lmdlb21ldHJ5LGUpfSxGZWF0dXJlQ29sbGVjdGlvbjpmdW5jdGlvbih0LGUpe2Zvcih2YXIgbj10LmZlYXR1cmVzLHI9LTEsaT1uLmxlbmd0aDsrK3I8aTspaWYoVWwobltyXS5nZW9tZXRyeSxlKSlyZXR1cm4hMDtyZXR1cm4hMX19LHpsPXtTcGhlcmU6ZnVuY3Rpb24oKXtyZXR1cm4hMH0sUG9pbnQ6ZnVuY3Rpb24odCxlKXtyZXR1cm4gJGwodC5jb29yZGluYXRlcyxlKX0sTXVsdGlQb2ludDpmdW5jdGlvbih0LGUpe2Zvcih2YXIgbj10LmNvb3JkaW5hdGVzLHI9LTEsaT1uLmxlbmd0aDsrK3I8aTspaWYoJGwobltyXSxlKSlyZXR1cm4hMDtyZXR1cm4hMX0sTGluZVN0cmluZzpmdW5jdGlvbih0LGUpe3JldHVybiBXbCh0LmNvb3JkaW5hdGVzLGUpfSxNdWx0aUxpbmVTdHJpbmc6ZnVuY3Rpb24odCxlKXtmb3IodmFyIG49dC5jb29yZGluYXRlcyxyPS0xLGk9bi5sZW5ndGg7KytyPGk7KWlmKFdsKG5bcl0sZSkpcmV0dXJuITA7cmV0dXJuITF9LFBvbHlnb246ZnVuY3Rpb24odCxlKXtyZXR1cm4gVmwodC5jb29yZGluYXRlcyxlKX0sTXVsdGlQb2x5Z29uOmZ1bmN0aW9uKHQsZSl7Zm9yKHZhciBuPXQuY29vcmRpbmF0ZXMscj0tMSxpPW4ubGVuZ3RoOysrcjxpOylpZihWbChuW3JdLGUpKXJldHVybiEwO3JldHVybiExfSxHZW9tZXRyeUNvbGxlY3Rpb246ZnVuY3Rpb24odCxlKXtmb3IodmFyIG49dC5nZW9tZXRyaWVzLHI9LTEsaT1uLmxlbmd0aDsrK3I8aTspaWYoVWwobltyXSxlKSlyZXR1cm4hMDtyZXR1cm4hMX19O2Z1bmN0aW9uIFVsKHQsZSl7cmV0dXJuISghdHx8IXpsLmhhc093blByb3BlcnR5KHQudHlwZSkpJiZ6bFt0LnR5cGVdKHQsZSl9ZnVuY3Rpb24gJGwodCxlKXtyZXR1cm4gMD09PVJsKHQsZSl9ZnVuY3Rpb24gV2wodCxlKXtmb3IodmFyIG4scixpLGE9MCxvPXQubGVuZ3RoO2E8bzthKyspe2lmKDA9PT0ocj1SbCh0W2FdLGUpKSlyZXR1cm4hMDtpZihhPjAmJihpPVJsKHRbYV0sdFthLTFdKSk+MCYmbjw9aSYmcjw9aSYmKG4rci1pKSooMS1NYXRoLnBvdygobi1yKS9pLDIpKTwxZS0xMippKXJldHVybiEwO249cn1yZXR1cm4hMX1mdW5jdGlvbiBWbCh0LGUpe3JldHVybiEheGwodC5tYXAoSGwpLEdsKGUpKX1mdW5jdGlvbiBIbCh0KXtyZXR1cm4odD10Lm1hcChHbCkpLnBvcCgpLHR9ZnVuY3Rpb24gR2wodCl7cmV0dXJuW3RbMF0qeWMsdFsxXSp5Y119dmFyIHFsPWZ1bmN0aW9uKHQsZSl7cmV0dXJuKHQmJllsLmhhc093blByb3BlcnR5KHQudHlwZSk/WWxbdC50eXBlXTpVbCkodCxlKX07ZnVuY3Rpb24gWGwodCxlLG4pe3ZhciByPWsodCxlLTFlLTYsbikuY29uY2F0KGUpO3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gci5tYXAoKGZ1bmN0aW9uKGUpe3JldHVyblt0LGVdfSkpfX1mdW5jdGlvbiBabCh0LGUsbil7dmFyIHI9ayh0LGUtMWUtNixuKS5jb25jYXQoZSk7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiByLm1hcCgoZnVuY3Rpb24oZSl7cmV0dXJuW2UsdF19KSl9fWZ1bmN0aW9uIEpsKCl7dmFyIHQsZSxuLHIsaSxhLG8scyxjLHUsbCxoLGY9MTAsZD1mLHA9OTAsZz0zNjAseT0yLjU7ZnVuY3Rpb24gdigpe3JldHVybnt0eXBlOiJNdWx0aUxpbmVTdHJpbmciLGNvb3JkaW5hdGVzOm0oKX19ZnVuY3Rpb24gbSgpe3JldHVybiBrKF9jKHIvcCkqcCxuLHApLm1hcChsKS5jb25jYXQoayhfYyhzL2cpKmcsbyxnKS5tYXAoaCkpLmNvbmNhdChrKF9jKGUvZikqZix0LGYpLmZpbHRlcigoZnVuY3Rpb24odCl7cmV0dXJuIHZjKHQlcCk+MWUtNn0pKS5tYXAoYykpLmNvbmNhdChrKF9jKGEvZCkqZCxpLGQpLmZpbHRlcigoZnVuY3Rpb24odCl7cmV0dXJuIHZjKHQlZyk+MWUtNn0pKS5tYXAodSkpfXJldHVybiB2LmxpbmVzPWZ1bmN0aW9uKCl7cmV0dXJuIG0oKS5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybnt0eXBlOiJMaW5lU3RyaW5nIixjb29yZGluYXRlczp0fX0pKX0sdi5vdXRsaW5lPWZ1bmN0aW9uKCl7cmV0dXJue3R5cGU6IlBvbHlnb24iLGNvb3JkaW5hdGVzOltsKHIpLmNvbmNhdChoKG8pLnNsaWNlKDEpLGwobikucmV2ZXJzZSgpLnNsaWNlKDEpLGgocykucmV2ZXJzZSgpLnNsaWNlKDEpKV19fSx2LmV4dGVudD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD92LmV4dGVudE1ham9yKHQpLmV4dGVudE1pbm9yKHQpOnYuZXh0ZW50TWlub3IoKX0sdi5leHRlbnRNYWpvcj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj0rdFswXVswXSxuPSt0WzFdWzBdLHM9K3RbMF1bMV0sbz0rdFsxXVsxXSxyPm4mJih0PXIscj1uLG49dCkscz5vJiYodD1zLHM9byxvPXQpLHYucHJlY2lzaW9uKHkpKTpbW3Isc10sW24sb11dfSx2LmV4dGVudE1pbm9yPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPStuWzBdWzBdLHQ9K25bMV1bMF0sYT0rblswXVsxXSxpPStuWzFdWzFdLGU+dCYmKG49ZSxlPXQsdD1uKSxhPmkmJihuPWEsYT1pLGk9biksdi5wcmVjaXNpb24oeSkpOltbZSxhXSxbdCxpXV19LHYuc3RlcD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD92LnN0ZXBNYWpvcih0KS5zdGVwTWlub3IodCk6di5zdGVwTWlub3IoKX0sdi5zdGVwTWFqb3I9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHA9K3RbMF0sZz0rdFsxXSx2KTpbcCxnXX0sdi5zdGVwTWlub3I9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGY9K3RbMF0sZD0rdFsxXSx2KTpbZixkXX0sdi5wcmVjaXNpb249ZnVuY3Rpb24oZil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHk9K2YsYz1YbChhLGksOTApLHU9WmwoZSx0LHkpLGw9WGwocyxvLDkwKSxoPVpsKHIsbix5KSx2KTp5fSx2LmV4dGVudE1ham9yKFtbLTE4MCwxZS02LTkwXSxbMTgwLDkwLTFlLTZdXSkuZXh0ZW50TWlub3IoW1stMTgwLC04MC0xZS02XSxbMTgwLDgwKzFlLTZdXSl9ZnVuY3Rpb24gUWwoKXtyZXR1cm4gSmwoKSgpfXZhciBLbCx0aCxlaCxuaCxyaD1mdW5jdGlvbih0LGUpe3ZhciBuPXRbMF0qeWMscj10WzFdKnljLGk9ZVswXSp5YyxhPWVbMV0qeWMsbz14YyhyKSxzPVRjKHIpLGM9eGMoYSksdT1UYyhhKSxsPW8qeGMobiksaD1vKlRjKG4pLGY9Yyp4YyhpKSxkPWMqVGMoaSkscD0yKk9jKFNjKERjKGEtcikrbypjKkRjKGktbikpKSxnPVRjKHApLHk9cD9mdW5jdGlvbih0KXt2YXIgZT1UYyh0Kj1wKS9nLG49VGMocC10KS9nLHI9bipsK2UqZixpPW4qaCtlKmQsYT1uKnMrZSp1O3JldHVybltiYyhpLHIpKmdjLGJjKGEsU2MocipyK2kqaSkpKmdjXX06ZnVuY3Rpb24oKXtyZXR1cm5bbipnYyxyKmdjXX07cmV0dXJuIHkuZGlzdGFuY2U9cCx5fSxpaD1mdW5jdGlvbih0KXtyZXR1cm4gdH0sYWg9c2MoKSxvaD1zYygpLHNoPXtwb2ludDpOYyxsaW5lU3RhcnQ6TmMsbGluZUVuZDpOYyxwb2x5Z29uU3RhcnQ6ZnVuY3Rpb24oKXtzaC5saW5lU3RhcnQ9Y2gsc2gubGluZUVuZD1oaH0scG9seWdvbkVuZDpmdW5jdGlvbigpe3NoLmxpbmVTdGFydD1zaC5saW5lRW5kPXNoLnBvaW50PU5jLGFoLmFkZCh2YyhvaCkpLG9oLnJlc2V0KCl9LHJlc3VsdDpmdW5jdGlvbigpe3ZhciB0PWFoLzI7cmV0dXJuIGFoLnJlc2V0KCksdH19O2Z1bmN0aW9uIGNoKCl7c2gucG9pbnQ9dWh9ZnVuY3Rpb24gdWgodCxlKXtzaC5wb2ludD1saCxLbD1laD10LHRoPW5oPWV9ZnVuY3Rpb24gbGgodCxlKXtvaC5hZGQobmgqdC1laCplKSxlaD10LG5oPWV9ZnVuY3Rpb24gaGgoKXtsaChLbCx0aCl9dmFyIGZoPXNoLGRoPTEvMCxwaD1kaCxnaD0tZGgseWg9Z2g7dmFyIHZoLG1oLGJoLHhoLF9oPXtwb2ludDpmdW5jdGlvbih0LGUpe3Q8ZGgmJihkaD10KTt0PmdoJiYoZ2g9dCk7ZTxwaCYmKHBoPWUpO2U+eWgmJih5aD1lKX0sbGluZVN0YXJ0Ok5jLGxpbmVFbmQ6TmMscG9seWdvblN0YXJ0Ok5jLHBvbHlnb25FbmQ6TmMscmVzdWx0OmZ1bmN0aW9uKCl7dmFyIHQ9W1tkaCxwaF0sW2doLHloXV07cmV0dXJuIGdoPXloPS0ocGg9ZGg9MS8wKSx0fX0sa2g9MCx3aD0wLEVoPTAsVGg9MCxDaD0wLFNoPTAsQWg9MCxNaD0wLE9oPTAsRGg9e3BvaW50Ok5oLGxpbmVTdGFydDpCaCxsaW5lRW5kOlBoLHBvbHlnb25TdGFydDpmdW5jdGlvbigpe0RoLmxpbmVTdGFydD1JaCxEaC5saW5lRW5kPWpofSxwb2x5Z29uRW5kOmZ1bmN0aW9uKCl7RGgucG9pbnQ9TmgsRGgubGluZVN0YXJ0PUJoLERoLmxpbmVFbmQ9UGh9LHJlc3VsdDpmdW5jdGlvbigpe3ZhciB0PU9oP1tBaC9PaCxNaC9PaF06U2g/W1RoL1NoLENoL1NoXTpFaD9ba2gvRWgsd2gvRWhdOltOYU4sTmFOXTtyZXR1cm4ga2g9d2g9RWg9VGg9Q2g9U2g9QWg9TWg9T2g9MCx0fX07ZnVuY3Rpb24gTmgodCxlKXtraCs9dCx3aCs9ZSwrK0VofWZ1bmN0aW9uIEJoKCl7RGgucG9pbnQ9TGh9ZnVuY3Rpb24gTGgodCxlKXtEaC5wb2ludD1GaCxOaChiaD10LHhoPWUpfWZ1bmN0aW9uIEZoKHQsZSl7dmFyIG49dC1iaCxyPWUteGgsaT1TYyhuKm4rcipyKTtUaCs9aSooYmgrdCkvMixDaCs9aSooeGgrZSkvMixTaCs9aSxOaChiaD10LHhoPWUpfWZ1bmN0aW9uIFBoKCl7RGgucG9pbnQ9Tmh9ZnVuY3Rpb24gSWgoKXtEaC5wb2ludD1SaH1mdW5jdGlvbiBqaCgpe1loKHZoLG1oKX1mdW5jdGlvbiBSaCh0LGUpe0RoLnBvaW50PVloLE5oKHZoPWJoPXQsbWg9eGg9ZSl9ZnVuY3Rpb24gWWgodCxlKXt2YXIgbj10LWJoLHI9ZS14aCxpPVNjKG4qbityKnIpO1RoKz1pKihiaCt0KS8yLENoKz1pKih4aCtlKS8yLFNoKz1pLEFoKz0oaT14aCp0LWJoKmUpKihiaCt0KSxNaCs9aSooeGgrZSksT2grPTMqaSxOaChiaD10LHhoPWUpfXZhciB6aD1EaDtmdW5jdGlvbiBVaCh0KXt0aGlzLl9jb250ZXh0PXR9VWgucHJvdG90eXBlPXtfcmFkaXVzOjQuNSxwb2ludFJhZGl1czpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fcmFkaXVzPXQsdGhpc30scG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSxwb2x5Z29uRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXswPT09dGhpcy5fbGluZSYmdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKSx0aGlzLl9wb2ludD1OYU59LHBvaW50OmZ1bmN0aW9uKHQsZSl7c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fY29udGV4dC5tb3ZlVG8odCxlKSx0aGlzLl9wb2ludD0xO2JyZWFrO2Nhc2UgMTp0aGlzLl9jb250ZXh0LmxpbmVUbyh0LGUpO2JyZWFrO2RlZmF1bHQ6dGhpcy5fY29udGV4dC5tb3ZlVG8odCt0aGlzLl9yYWRpdXMsZSksdGhpcy5fY29udGV4dC5hcmModCxlLHRoaXMuX3JhZGl1cywwLHBjKX19LHJlc3VsdDpOY307dmFyICRoLFdoLFZoLEhoLEdoLHFoPXNjKCksWGg9e3BvaW50Ok5jLGxpbmVTdGFydDpmdW5jdGlvbigpe1hoLnBvaW50PVpofSxsaW5lRW5kOmZ1bmN0aW9uKCl7JGgmJkpoKFdoLFZoKSxYaC5wb2ludD1OY30scG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7JGg9ITB9LHBvbHlnb25FbmQ6ZnVuY3Rpb24oKXskaD1udWxsfSxyZXN1bHQ6ZnVuY3Rpb24oKXt2YXIgdD0rcWg7cmV0dXJuIHFoLnJlc2V0KCksdH19O2Z1bmN0aW9uIFpoKHQsZSl7WGgucG9pbnQ9SmgsV2g9SGg9dCxWaD1HaD1lfWZ1bmN0aW9uIEpoKHQsZSl7SGgtPXQsR2gtPWUscWguYWRkKFNjKEhoKkhoK0doKkdoKSksSGg9dCxHaD1lfXZhciBRaD1YaDtmdW5jdGlvbiBLaCgpe3RoaXMuX3N0cmluZz1bXX1mdW5jdGlvbiB0Zih0KXtyZXR1cm4ibTAsIit0KyJhIit0KyIsIit0KyIgMCAxLDEgMCwiKy0yKnQrImEiK3QrIiwiK3QrIiAwIDEsMSAwLCIrMip0KyJ6In1LaC5wcm90b3R5cGU9e19yYWRpdXM6NC41LF9jaXJjbGU6dGYoNC41KSxwb2ludFJhZGl1czpmdW5jdGlvbih0KXtyZXR1cm4odD0rdCkhPT10aGlzLl9yYWRpdXMmJih0aGlzLl9yYWRpdXM9dCx0aGlzLl9jaXJjbGU9bnVsbCksdGhpc30scG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSxwb2x5Z29uRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXswPT09dGhpcy5fbGluZSYmdGhpcy5fc3RyaW5nLnB1c2goIloiKSx0aGlzLl9wb2ludD1OYU59LHBvaW50OmZ1bmN0aW9uKHQsZSl7c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fc3RyaW5nLnB1c2goIk0iLHQsIiwiLGUpLHRoaXMuX3BvaW50PTE7YnJlYWs7Y2FzZSAxOnRoaXMuX3N0cmluZy5wdXNoKCJMIix0LCIsIixlKTticmVhaztkZWZhdWx0Om51bGw9PXRoaXMuX2NpcmNsZSYmKHRoaXMuX2NpcmNsZT10Zih0aGlzLl9yYWRpdXMpKSx0aGlzLl9zdHJpbmcucHVzaCgiTSIsdCwiLCIsZSx0aGlzLl9jaXJjbGUpfX0scmVzdWx0OmZ1bmN0aW9uKCl7aWYodGhpcy5fc3RyaW5nLmxlbmd0aCl7dmFyIHQ9dGhpcy5fc3RyaW5nLmpvaW4oIiIpO3JldHVybiB0aGlzLl9zdHJpbmc9W10sdH1yZXR1cm4gbnVsbH19O3ZhciBlZj1mdW5jdGlvbih0LGUpe3ZhciBuLHIsaT00LjU7ZnVuY3Rpb24gYSh0KXtyZXR1cm4gdCYmKCJmdW5jdGlvbiI9PXR5cGVvZiBpJiZyLnBvaW50UmFkaXVzKCtpLmFwcGx5KHRoaXMsYXJndW1lbnRzKSksJGModCxuKHIpKSksci5yZXN1bHQoKX1yZXR1cm4gYS5hcmVhPWZ1bmN0aW9uKHQpe3JldHVybiAkYyh0LG4oZmgpKSxmaC5yZXN1bHQoKX0sYS5tZWFzdXJlPWZ1bmN0aW9uKHQpe3JldHVybiAkYyh0LG4oUWgpKSxRaC5yZXN1bHQoKX0sYS5ib3VuZHM9ZnVuY3Rpb24odCl7cmV0dXJuICRjKHQsbihfaCkpLF9oLnJlc3VsdCgpfSxhLmNlbnRyb2lkPWZ1bmN0aW9uKHQpe3JldHVybiAkYyh0LG4oemgpKSx6aC5yZXN1bHQoKX0sYS5wcm9qZWN0aW9uPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPW51bGw9PWU/KHQ9bnVsbCxpaCk6KHQ9ZSkuc3RyZWFtLGEpOnR9LGEuY29udGV4dD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj1udWxsPT10PyhlPW51bGwsbmV3IEtoKTpuZXcgVWgoZT10KSwiZnVuY3Rpb24iIT10eXBlb2YgaSYmci5wb2ludFJhZGl1cyhpKSxhKTplfSxhLnBvaW50UmFkaXVzPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6KHIucG9pbnRSYWRpdXMoK3QpLCt0KSxhKTppfSxhLnByb2plY3Rpb24odCkuY29udGV4dChlKX0sbmY9ZnVuY3Rpb24odCl7cmV0dXJue3N0cmVhbTpyZih0KX19O2Z1bmN0aW9uIHJmKHQpe3JldHVybiBmdW5jdGlvbihlKXt2YXIgbj1uZXcgYWY7Zm9yKHZhciByIGluIHQpbltyXT10W3JdO3JldHVybiBuLnN0cmVhbT1lLG59fWZ1bmN0aW9uIGFmKCl7fWZ1bmN0aW9uIG9mKHQsZSxuKXt2YXIgcj10LmNsaXBFeHRlbnQmJnQuY2xpcEV4dGVudCgpO3JldHVybiB0LnNjYWxlKDE1MCkudHJhbnNsYXRlKFswLDBdKSxudWxsIT1yJiZ0LmNsaXBFeHRlbnQobnVsbCksJGMobix0LnN0cmVhbShfaCkpLGUoX2gucmVzdWx0KCkpLG51bGwhPXImJnQuY2xpcEV4dGVudChyKSx0fWZ1bmN0aW9uIHNmKHQsZSxuKXtyZXR1cm4gb2YodCwoZnVuY3Rpb24obil7dmFyIHI9ZVsxXVswXS1lWzBdWzBdLGk9ZVsxXVsxXS1lWzBdWzFdLGE9TWF0aC5taW4oci8oblsxXVswXS1uWzBdWzBdKSxpLyhuWzFdWzFdLW5bMF1bMV0pKSxvPStlWzBdWzBdKyhyLWEqKG5bMV1bMF0rblswXVswXSkpLzIscz0rZVswXVsxXSsoaS1hKihuWzFdWzFdK25bMF1bMV0pKS8yO3Quc2NhbGUoMTUwKmEpLnRyYW5zbGF0ZShbbyxzXSl9KSxuKX1mdW5jdGlvbiBjZih0LGUsbil7cmV0dXJuIHNmKHQsW1swLDBdLGVdLG4pfWZ1bmN0aW9uIHVmKHQsZSxuKXtyZXR1cm4gb2YodCwoZnVuY3Rpb24obil7dmFyIHI9K2UsaT1yLyhuWzFdWzBdLW5bMF1bMF0pLGE9KHItaSooblsxXVswXStuWzBdWzBdKSkvMixvPS1pKm5bMF1bMV07dC5zY2FsZSgxNTAqaSkudHJhbnNsYXRlKFthLG9dKX0pLG4pfWZ1bmN0aW9uIGxmKHQsZSxuKXtyZXR1cm4gb2YodCwoZnVuY3Rpb24obil7dmFyIHI9K2UsaT1yLyhuWzFdWzFdLW5bMF1bMV0pLGE9LWkqblswXVswXSxvPShyLWkqKG5bMV1bMV0rblswXVsxXSkpLzI7dC5zY2FsZSgxNTAqaSkudHJhbnNsYXRlKFthLG9dKX0pLG4pfWFmLnByb3RvdHlwZT17Y29uc3RydWN0b3I6YWYscG9pbnQ6ZnVuY3Rpb24odCxlKXt0aGlzLnN0cmVhbS5wb2ludCh0LGUpfSxzcGhlcmU6ZnVuY3Rpb24oKXt0aGlzLnN0cmVhbS5zcGhlcmUoKX0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5zdHJlYW0ubGluZVN0YXJ0KCl9LGxpbmVFbmQ6ZnVuY3Rpb24oKXt0aGlzLnN0cmVhbS5saW5lRW5kKCl9LHBvbHlnb25TdGFydDpmdW5jdGlvbigpe3RoaXMuc3RyZWFtLnBvbHlnb25TdGFydCgpfSxwb2x5Z29uRW5kOmZ1bmN0aW9uKCl7dGhpcy5zdHJlYW0ucG9seWdvbkVuZCgpfX07dmFyIGhmPXhjKDMwKnljKSxmZj1mdW5jdGlvbih0LGUpe3JldHVybitlP2Z1bmN0aW9uKHQsZSl7ZnVuY3Rpb24gbihyLGksYSxvLHMsYyx1LGwsaCxmLGQscCxnLHkpe3ZhciB2PXUtcixtPWwtaSxiPXYqdittKm07aWYoYj40KmUmJmctLSl7dmFyIHg9bytmLF89cytkLGs9YytwLHc9U2MoeCp4K18qXytrKmspLEU9T2Moay89dyksVD12Yyh2YyhrKS0xKTwxZS02fHx2YyhhLWgpPDFlLTY/KGEraCkvMjpiYyhfLHgpLEM9dChULEUpLFM9Q1swXSxBPUNbMV0sTT1TLXIsTz1BLWksRD1tKk0tdipPOyhEKkQvYj5lfHx2YygodipNK20qTykvYi0uNSk+LjN8fG8qZitzKmQrYypwPGhmKSYmKG4ocixpLGEsbyxzLGMsUyxBLFQseC89dyxfLz13LGssZyx5KSx5LnBvaW50KFMsQSksbihTLEEsVCx4LF8sayx1LGwsaCxmLGQscCxnLHkpKX19cmV0dXJuIGZ1bmN0aW9uKGUpe3ZhciByLGksYSxvLHMsYyx1LGwsaCxmLGQscCxnPXtwb2ludDp5LGxpbmVTdGFydDp2LGxpbmVFbmQ6Yixwb2x5Z29uU3RhcnQ6ZnVuY3Rpb24oKXtlLnBvbHlnb25TdGFydCgpLGcubGluZVN0YXJ0PXh9LHBvbHlnb25FbmQ6ZnVuY3Rpb24oKXtlLnBvbHlnb25FbmQoKSxnLmxpbmVTdGFydD12fX07ZnVuY3Rpb24geShuLHIpe249dChuLHIpLGUucG9pbnQoblswXSxuWzFdKX1mdW5jdGlvbiB2KCl7bD1OYU4sZy5wb2ludD1tLGUubGluZVN0YXJ0KCl9ZnVuY3Rpb24gbShyLGkpe3ZhciBhPUtjKFtyLGldKSxvPXQocixpKTtuKGwsaCx1LGYsZCxwLGw9b1swXSxoPW9bMV0sdT1yLGY9YVswXSxkPWFbMV0scD1hWzJdLDE2LGUpLGUucG9pbnQobCxoKX1mdW5jdGlvbiBiKCl7Zy5wb2ludD15LGUubGluZUVuZCgpfWZ1bmN0aW9uIHgoKXt2KCksZy5wb2ludD1fLGcubGluZUVuZD1rfWZ1bmN0aW9uIF8odCxlKXttKHI9dCxlKSxpPWwsYT1oLG89ZixzPWQsYz1wLGcucG9pbnQ9bX1mdW5jdGlvbiBrKCl7bihsLGgsdSxmLGQscCxpLGEscixvLHMsYywxNixlKSxnLmxpbmVFbmQ9YixiKCl9cmV0dXJuIGd9fSh0LGUpOmZ1bmN0aW9uKHQpe3JldHVybiByZih7cG9pbnQ6ZnVuY3Rpb24oZSxuKXtlPXQoZSxuKSx0aGlzLnN0cmVhbS5wb2ludChlWzBdLGVbMV0pfX0pfSh0KX07dmFyIGRmPXJmKHtwb2ludDpmdW5jdGlvbih0LGUpe3RoaXMuc3RyZWFtLnBvaW50KHQqeWMsZSp5Yyl9fSk7ZnVuY3Rpb24gcGYodCxlLG4pe2Z1bmN0aW9uIHIocixpKXtyZXR1cm5bZSt0KnIsbi10KmldfXJldHVybiByLmludmVydD1mdW5jdGlvbihyLGkpe3JldHVyblsoci1lKS90LChuLWkpL3RdfSxyfWZ1bmN0aW9uIGdmKHQsZSxuLHIpe3ZhciBpPXhjKHIpLGE9VGMociksbz1pKnQscz1hKnQsYz1pL3QsdT1hL3QsbD0oYSpuLWkqZSkvdCxoPShhKmUraSpuKS90O2Z1bmN0aW9uIGYodCxyKXtyZXR1cm5bbyp0LXMqcitlLG4tcyp0LW8qcl19cmV0dXJuIGYuaW52ZXJ0PWZ1bmN0aW9uKHQsZSl7cmV0dXJuW2MqdC11KmUrbCxoLXUqdC1jKmVdfSxmfWZ1bmN0aW9uIHlmKHQpe3JldHVybiB2ZigoZnVuY3Rpb24oKXtyZXR1cm4gdH0pKSgpfWZ1bmN0aW9uIHZmKHQpe3ZhciBlLG4scixpLGEsbyxzLGMsdSxsLGg9MTUwLGY9NDgwLGQ9MjUwLHA9MCxnPTAseT0wLHY9MCxtPTAsYj0wLHg9bnVsbCxfPUVsLGs9bnVsbCx3PWloLEU9LjU7ZnVuY3Rpb24gVCh0KXtyZXR1cm4gYyh0WzBdKnljLHRbMV0qeWMpfWZ1bmN0aW9uIEModCl7cmV0dXJuKHQ9Yy5pbnZlcnQodFswXSx0WzFdKSkmJlt0WzBdKmdjLHRbMV0qZ2NdfWZ1bmN0aW9uIFMoKXt2YXIgdD1nZihoLDAsMCxiKS5hcHBseShudWxsLGUocCxnKSkscj0oYj9nZjpwZikoaCxmLXRbMF0sZC10WzFdLGIpO3JldHVybiBuPWFsKHksdixtKSxzPXJsKGUsciksYz1ybChuLHMpLG89ZmYocyxFKSxBKCl9ZnVuY3Rpb24gQSgpe3JldHVybiB1PWw9bnVsbCxUfXJldHVybiBULnN0cmVhbT1mdW5jdGlvbih0KXtyZXR1cm4gdSYmbD09PXQ/dTp1PWRmKGZ1bmN0aW9uKHQpe3JldHVybiByZih7cG9pbnQ6ZnVuY3Rpb24oZSxuKXt2YXIgcj10KGUsbik7cmV0dXJuIHRoaXMuc3RyZWFtLnBvaW50KHJbMF0sclsxXSl9fSl9KG4pKF8obyh3KGw9dCkpKSkpfSxULnByZWNsaXA9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KF89dCx4PXZvaWQgMCxBKCkpOl99LFQucG9zdGNsaXA9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHc9dCxrPXI9aT1hPW51bGwsQSgpKTp3fSxULmNsaXBBbmdsZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oXz0rdD9UbCh4PXQqeWMpOih4PW51bGwsRWwpLEEoKSk6eCpnY30sVC5jbGlwRXh0ZW50PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh3PW51bGw9PXQ/KGs9cj1pPWE9bnVsbCxpaCk6Q2woaz0rdFswXVswXSxyPSt0WzBdWzFdLGk9K3RbMV1bMF0sYT0rdFsxXVsxXSksQSgpKTpudWxsPT1rP251bGw6W1trLHJdLFtpLGFdXX0sVC5zY2FsZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaD0rdCxTKCkpOmh9LFQudHJhbnNsYXRlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhmPSt0WzBdLGQ9K3RbMV0sUygpKTpbZixkXX0sVC5jZW50ZXI9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHA9dFswXSUzNjAqeWMsZz10WzFdJTM2MCp5YyxTKCkpOltwKmdjLGcqZ2NdfSxULnJvdGF0ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oeT10WzBdJTM2MCp5Yyx2PXRbMV0lMzYwKnljLG09dC5sZW5ndGg+Mj90WzJdJTM2MCp5YzowLFMoKSk6W3kqZ2MsdipnYyxtKmdjXX0sVC5hbmdsZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYj10JTM2MCp5YyxTKCkpOmIqZ2N9LFQucHJlY2lzaW9uPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPWZmKHMsRT10KnQpLEEoKSk6U2MoRSl9LFQuZml0RXh0ZW50PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHNmKFQsdCxlKX0sVC5maXRTaXplPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGNmKFQsdCxlKX0sVC5maXRXaWR0aD1mdW5jdGlvbih0LGUpe3JldHVybiB1ZihULHQsZSl9LFQuZml0SGVpZ2h0PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGxmKFQsdCxlKX0sZnVuY3Rpb24oKXtyZXR1cm4gZT10LmFwcGx5KHRoaXMsYXJndW1lbnRzKSxULmludmVydD1lLmludmVydCYmQyxTKCl9fWZ1bmN0aW9uIG1mKHQpe3ZhciBlPTAsbj1oYy8zLHI9dmYodCksaT1yKGUsbik7cmV0dXJuIGkucGFyYWxsZWxzPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3IoZT10WzBdKnljLG49dFsxXSp5Yyk6W2UqZ2MsbipnY119LGl9ZnVuY3Rpb24gYmYodCxlKXt2YXIgbj1UYyh0KSxyPShuK1RjKGUpKS8yO2lmKHZjKHIpPDFlLTYpcmV0dXJuIGZ1bmN0aW9uKHQpe3ZhciBlPXhjKHQpO2Z1bmN0aW9uIG4odCxuKXtyZXR1cm5bdCplLFRjKG4pL2VdfXJldHVybiBuLmludmVydD1mdW5jdGlvbih0LG4pe3JldHVyblt0L2UsT2MobiplKV19LG59KHQpO3ZhciBpPTErbiooMipyLW4pLGE9U2MoaSkvcjtmdW5jdGlvbiBvKHQsZSl7dmFyIG49U2MoaS0yKnIqVGMoZSkpL3I7cmV0dXJuW24qVGModCo9ciksYS1uKnhjKHQpXX1yZXR1cm4gby5pbnZlcnQ9ZnVuY3Rpb24odCxlKXt2YXIgbj1hLWU7cmV0dXJuW2JjKHQsdmMobikpL3IqQ2MobiksT2MoKGktKHQqdCtuKm4pKnIqcikvKDIqcikpXX0sb312YXIgeGY9ZnVuY3Rpb24oKXtyZXR1cm4gbWYoYmYpLnNjYWxlKDE1NS40MjQpLmNlbnRlcihbMCwzMy42NDQyXSl9LF9mPWZ1bmN0aW9uKCl7cmV0dXJuIHhmKCkucGFyYWxsZWxzKFsyOS41LDQ1LjVdKS5zY2FsZSgxMDcwKS50cmFuc2xhdGUoWzQ4MCwyNTBdKS5yb3RhdGUoWzk2LDBdKS5jZW50ZXIoWy0uNiwzOC43XSl9O3ZhciBrZj1mdW5jdGlvbigpe3ZhciB0LGUsbixyLGksYSxvPV9mKCkscz14ZigpLnJvdGF0ZShbMTU0LDBdKS5jZW50ZXIoWy0yLDU4LjVdKS5wYXJhbGxlbHMoWzU1LDY1XSksYz14ZigpLnJvdGF0ZShbMTU3LDBdKS5jZW50ZXIoWy0zLDE5LjldKS5wYXJhbGxlbHMoWzgsMThdKSx1PXtwb2ludDpmdW5jdGlvbih0LGUpe2E9W3QsZV19fTtmdW5jdGlvbiBsKHQpe3ZhciBlPXRbMF0sbz10WzFdO3JldHVybiBhPW51bGwsbi5wb2ludChlLG8pLGF8fChyLnBvaW50KGUsbyksYSl8fChpLnBvaW50KGUsbyksYSl9ZnVuY3Rpb24gaCgpe3JldHVybiB0PWU9bnVsbCxsfXJldHVybiBsLmludmVydD1mdW5jdGlvbih0KXt2YXIgZT1vLnNjYWxlKCksbj1vLnRyYW5zbGF0ZSgpLHI9KHRbMF0tblswXSkvZSxpPSh0WzFdLW5bMV0pL2U7cmV0dXJuKGk+PS4xMiYmaTwuMjM0JiZyPj0tLjQyNSYmcjwtLjIxND9zOmk+PS4xNjYmJmk8LjIzNCYmcj49LS4yMTQmJnI8LS4xMTU/YzpvKS5pbnZlcnQodCl9LGwuc3RyZWFtPWZ1bmN0aW9uKG4pe3JldHVybiB0JiZlPT09bj90OihyPVtvLnN0cmVhbShlPW4pLHMuc3RyZWFtKG4pLGMuc3RyZWFtKG4pXSxpPXIubGVuZ3RoLHQ9e3BvaW50OmZ1bmN0aW9uKHQsZSl7Zm9yKHZhciBuPS0xOysrbjxpOylyW25dLnBvaW50KHQsZSl9LHNwaGVyZTpmdW5jdGlvbigpe2Zvcih2YXIgdD0tMTsrK3Q8aTspclt0XS5zcGhlcmUoKX0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7Zm9yKHZhciB0PS0xOysrdDxpOylyW3RdLmxpbmVTdGFydCgpfSxsaW5lRW5kOmZ1bmN0aW9uKCl7Zm9yKHZhciB0PS0xOysrdDxpOylyW3RdLmxpbmVFbmQoKX0scG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7Zm9yKHZhciB0PS0xOysrdDxpOylyW3RdLnBvbHlnb25TdGFydCgpfSxwb2x5Z29uRW5kOmZ1bmN0aW9uKCl7Zm9yKHZhciB0PS0xOysrdDxpOylyW3RdLnBvbHlnb25FbmQoKX19KTt2YXIgcixpfSxsLnByZWNpc2lvbj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oby5wcmVjaXNpb24odCkscy5wcmVjaXNpb24odCksYy5wcmVjaXNpb24odCksaCgpKTpvLnByZWNpc2lvbigpfSxsLnNjYWxlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvLnNjYWxlKHQpLHMuc2NhbGUoLjM1KnQpLGMuc2NhbGUodCksbC50cmFuc2xhdGUoby50cmFuc2xhdGUoKSkpOm8uc2NhbGUoKX0sbC50cmFuc2xhdGU9ZnVuY3Rpb24odCl7aWYoIWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIG8udHJhbnNsYXRlKCk7dmFyIGU9by5zY2FsZSgpLGE9K3RbMF0sbD0rdFsxXTtyZXR1cm4gbj1vLnRyYW5zbGF0ZSh0KS5jbGlwRXh0ZW50KFtbYS0uNDU1KmUsbC0uMjM4KmVdLFthKy40NTUqZSxsKy4yMzgqZV1dKS5zdHJlYW0odSkscj1zLnRyYW5zbGF0ZShbYS0uMzA3KmUsbCsuMjAxKmVdKS5jbGlwRXh0ZW50KFtbYS0uNDI1KmUrMWUtNixsKy4xMiplKzFlLTZdLFthLS4yMTQqZS0xZS02LGwrLjIzNCplLTFlLTZdXSkuc3RyZWFtKHUpLGk9Yy50cmFuc2xhdGUoW2EtLjIwNSplLGwrLjIxMiplXSkuY2xpcEV4dGVudChbW2EtLjIxNCplKzFlLTYsbCsuMTY2KmUrMWUtNl0sW2EtLjExNSplLTFlLTYsbCsuMjM0KmUtMWUtNl1dKS5zdHJlYW0odSksaCgpfSxsLmZpdEV4dGVudD1mdW5jdGlvbih0LGUpe3JldHVybiBzZihsLHQsZSl9LGwuZml0U2l6ZT1mdW5jdGlvbih0LGUpe3JldHVybiBjZihsLHQsZSl9LGwuZml0V2lkdGg9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdWYobCx0LGUpfSxsLmZpdEhlaWdodD1mdW5jdGlvbih0LGUpe3JldHVybiBsZihsLHQsZSl9LGwuc2NhbGUoMTA3MCl9O2Z1bmN0aW9uIHdmKHQpe3JldHVybiBmdW5jdGlvbihlLG4pe3ZhciByPXhjKGUpLGk9eGMobiksYT10KHIqaSk7cmV0dXJuW2EqaSpUYyhlKSxhKlRjKG4pXX19ZnVuY3Rpb24gRWYodCl7cmV0dXJuIGZ1bmN0aW9uKGUsbil7dmFyIHI9U2MoZSplK24qbiksaT10KHIpLGE9VGMoaSksbz14YyhpKTtyZXR1cm5bYmMoZSphLHIqbyksT2MociYmbiphL3IpXX19dmFyIFRmPXdmKChmdW5jdGlvbih0KXtyZXR1cm4gU2MoMi8oMSt0KSl9KSk7VGYuaW52ZXJ0PUVmKChmdW5jdGlvbih0KXtyZXR1cm4gMipPYyh0LzIpfSkpO3ZhciBDZj1mdW5jdGlvbigpe3JldHVybiB5ZihUZikuc2NhbGUoMTI0Ljc1KS5jbGlwQW5nbGUoMTc5Ljk5OSl9LFNmPXdmKChmdW5jdGlvbih0KXtyZXR1cm4odD1NYyh0KSkmJnQvVGModCl9KSk7U2YuaW52ZXJ0PUVmKChmdW5jdGlvbih0KXtyZXR1cm4gdH0pKTt2YXIgQWY9ZnVuY3Rpb24oKXtyZXR1cm4geWYoU2YpLnNjYWxlKDc5LjQxODgpLmNsaXBBbmdsZSgxNzkuOTk5KX07ZnVuY3Rpb24gTWYodCxlKXtyZXR1cm5bdCx3YyhBYygoZmMrZSkvMikpXX1NZi5pbnZlcnQ9ZnVuY3Rpb24odCxlKXtyZXR1cm5bdCwyKm1jKGtjKGUpKS1mY119O3ZhciBPZj1mdW5jdGlvbigpe3JldHVybiBEZihNZikuc2NhbGUoOTYxL3BjKX07ZnVuY3Rpb24gRGYodCl7dmFyIGUsbixyLGk9eWYodCksYT1pLmNlbnRlcixvPWkuc2NhbGUscz1pLnRyYW5zbGF0ZSxjPWkuY2xpcEV4dGVudCx1PW51bGw7ZnVuY3Rpb24gbCgpe3ZhciBhPWhjKm8oKSxzPWkodWwoaS5yb3RhdGUoKSkuaW52ZXJ0KFswLDBdKSk7cmV0dXJuIGMobnVsbD09dT9bW3NbMF0tYSxzWzFdLWFdLFtzWzBdK2Esc1sxXSthXV06dD09PU1mP1tbTWF0aC5tYXgoc1swXS1hLHUpLGVdLFtNYXRoLm1pbihzWzBdK2Esbikscl1dOltbdSxNYXRoLm1heChzWzFdLWEsZSldLFtuLE1hdGgubWluKHNbMV0rYSxyKV1dKX1yZXR1cm4gaS5zY2FsZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obyh0KSxsKCkpOm8oKX0saS50cmFuc2xhdGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHModCksbCgpKTpzKCl9LGkuY2VudGVyPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhKHQpLGwoKSk6YSgpfSxpLmNsaXBFeHRlbnQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG51bGw9PXQ/dT1lPW49cj1udWxsOih1PSt0WzBdWzBdLGU9K3RbMF1bMV0sbj0rdFsxXVswXSxyPSt0WzFdWzFdKSxsKCkpOm51bGw9PXU/bnVsbDpbW3UsZV0sW24scl1dfSxsKCl9ZnVuY3Rpb24gTmYodCl7cmV0dXJuIEFjKChmYyt0KS8yKX1mdW5jdGlvbiBCZih0LGUpe3ZhciBuPXhjKHQpLHI9dD09PWU/VGModCk6d2Mobi94YyhlKSkvd2MoTmYoZSkvTmYodCkpLGk9bipFYyhOZih0KSxyKS9yO2lmKCFyKXJldHVybiBNZjtmdW5jdGlvbiBhKHQsZSl7aT4wP2U8MWUtNi1mYyYmKGU9MWUtNi1mYyk6ZT5mYy0xZS02JiYoZT1mYy0xZS02KTt2YXIgbj1pL0VjKE5mKGUpLHIpO3JldHVybltuKlRjKHIqdCksaS1uKnhjKHIqdCldfXJldHVybiBhLmludmVydD1mdW5jdGlvbih0LGUpe3ZhciBuPWktZSxhPUNjKHIpKlNjKHQqdCtuKm4pO3JldHVybltiYyh0LHZjKG4pKS9yKkNjKG4pLDIqbWMoRWMoaS9hLDEvcikpLWZjXX0sYX12YXIgTGY9ZnVuY3Rpb24oKXtyZXR1cm4gbWYoQmYpLnNjYWxlKDEwOS41KS5wYXJhbGxlbHMoWzMwLDMwXSl9O2Z1bmN0aW9uIEZmKHQsZSl7cmV0dXJuW3QsZV19RmYuaW52ZXJ0PUZmO3ZhciBQZj1mdW5jdGlvbigpe3JldHVybiB5ZihGZikuc2NhbGUoMTUyLjYzKX07ZnVuY3Rpb24gSWYodCxlKXt2YXIgbj14Yyh0KSxyPXQ9PT1lP1RjKHQpOihuLXhjKGUpKS8oZS10KSxpPW4vcit0O2lmKHZjKHIpPDFlLTYpcmV0dXJuIEZmO2Z1bmN0aW9uIGEodCxlKXt2YXIgbj1pLWUsYT1yKnQ7cmV0dXJuW24qVGMoYSksaS1uKnhjKGEpXX1yZXR1cm4gYS5pbnZlcnQ9ZnVuY3Rpb24odCxlKXt2YXIgbj1pLWU7cmV0dXJuW2JjKHQsdmMobikpL3IqQ2MobiksaS1DYyhyKSpTYyh0KnQrbipuKV19LGF9dmFyIGpmPWZ1bmN0aW9uKCl7cmV0dXJuIG1mKElmKS5zY2FsZSgxMzEuMTU0KS5jZW50ZXIoWzAsMTMuOTM4OV0pfSxSZj0xLjM0MDI2NCxZZj0tLjA4MTEwNix6Zj04OTNlLTYsVWY9LjAwMzc5NiwkZj1TYygzKS8yO2Z1bmN0aW9uIFdmKHQsZSl7dmFyIG49T2MoJGYqVGMoZSkpLHI9bipuLGk9cipyKnI7cmV0dXJuW3QqeGMobikvKCRmKihSZiszKllmKnIraSooNyp6Zis5KlVmKnIpKSksbiooUmYrWWYqcitpKih6ZitVZipyKSldfVdmLmludmVydD1mdW5jdGlvbih0LGUpe2Zvcih2YXIgbixyPWUsaT1yKnIsYT1pKmkqaSxvPTA7bzwxMiYmKGE9KGk9KHItPW49KHIqKFJmK1lmKmkrYSooemYrVWYqaSkpLWUpLyhSZiszKllmKmkrYSooNyp6Zis5KlVmKmkpKSkqcikqaSppLCEodmMobik8MWUtMTIpKTsrK28pO3JldHVyblskZip0KihSZiszKllmKmkrYSooNyp6Zis5KlVmKmkpKS94YyhyKSxPYyhUYyhyKS8kZildfTt2YXIgVmY9ZnVuY3Rpb24oKXtyZXR1cm4geWYoV2YpLnNjYWxlKDE3Ny4xNTgpfTtmdW5jdGlvbiBIZih0LGUpe3ZhciBuPXhjKGUpLHI9eGModCkqbjtyZXR1cm5bbipUYyh0KS9yLFRjKGUpL3JdfUhmLmludmVydD1FZihtYyk7dmFyIEdmPWZ1bmN0aW9uKCl7cmV0dXJuIHlmKEhmKS5zY2FsZSgxNDQuMDQ5KS5jbGlwQW5nbGUoNjApfTtmdW5jdGlvbiBxZih0LGUsbixyKXtyZXR1cm4gMT09PXQmJjE9PT1lJiYwPT09biYmMD09PXI/aWg6cmYoe3BvaW50OmZ1bmN0aW9uKGksYSl7dGhpcy5zdHJlYW0ucG9pbnQoaSp0K24sYSplK3IpfX0pfXZhciBYZj1mdW5jdGlvbigpe3ZhciB0LGUsbixyLGksYSxvPTEscz0wLGM9MCx1PTEsbD0xLGg9aWgsZj1udWxsLGQ9aWg7ZnVuY3Rpb24gcCgpe3JldHVybiByPWk9bnVsbCxhfXJldHVybiBhPXtzdHJlYW06ZnVuY3Rpb24odCl7cmV0dXJuIHImJmk9PT10P3I6cj1oKGQoaT10KSl9LHBvc3RjbGlwOmZ1bmN0aW9uKHIpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhkPXIsZj10PWU9bj1udWxsLHAoKSk6ZH0sY2xpcEV4dGVudDpmdW5jdGlvbihyKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZD1udWxsPT1yPyhmPXQ9ZT1uPW51bGwsaWgpOkNsKGY9K3JbMF1bMF0sdD0rclswXVsxXSxlPStyWzFdWzBdLG49K3JbMV1bMV0pLHAoKSk6bnVsbD09Zj9udWxsOltbZix0XSxbZSxuXV19LHNjYWxlOmZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhoPXFmKChvPSt0KSp1LG8qbCxzLGMpLHAoKSk6b30sdHJhbnNsYXRlOmZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhoPXFmKG8qdSxvKmwscz0rdFswXSxjPSt0WzFdKSxwKCkpOltzLGNdfSxyZWZsZWN0WDpmdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaD1xZihvKih1PXQ/LTE6MSksbypsLHMsYykscCgpKTp1PDB9LHJlZmxlY3RZOmZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhoPXFmKG8qdSxvKihsPXQ/LTE6MSkscyxjKSxwKCkpOmw8MH0sZml0RXh0ZW50OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHNmKGEsdCxlKX0sZml0U2l6ZTpmdW5jdGlvbih0LGUpe3JldHVybiBjZihhLHQsZSl9LGZpdFdpZHRoOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHVmKGEsdCxlKX0sZml0SGVpZ2h0OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIGxmKGEsdCxlKX19fTtmdW5jdGlvbiBaZih0LGUpe3ZhciBuPWUqZSxyPW4qbjtyZXR1cm5bdCooLjg3MDctLjEzMTk3OSpuK3IqKHIqKC4wMDM5NzEqbi0uMDAxNTI5KnIpLS4wMTM3OTEpKSxlKigxLjAwNzIyNituKiguMDE1MDg1K3IqKC4wMjg4NzQqbi0uMDQ0NDc1LS4wMDU5MTYqcikpKV19WmYuaW52ZXJ0PWZ1bmN0aW9uKHQsZSl7dmFyIG4scj1lLGk9MjU7ZG97dmFyIGE9cipyLG89YSphO3ItPW49KHIqKDEuMDA3MjI2K2EqKC4wMTUwODUrbyooLjAyODg3NCphLS4wNDQ0NzUtLjAwNTkxNipvKSkpLWUpLygxLjAwNzIyNithKiguMDQ1MjU1K28qKC4yNTk4NjYqYS0uMzExMzI1LS4wMDU5MTYqMTEqbykpKX13aGlsZSh2YyhuKT4xZS02JiYtLWk+MCk7cmV0dXJuW3QvKC44NzA3KyhhPXIqcikqKGEqKGEqYSphKiguMDAzOTcxLS4wMDE1MjkqYSktLjAxMzc5MSktLjEzMTk3OSkpLHJdfTt2YXIgSmY9ZnVuY3Rpb24oKXtyZXR1cm4geWYoWmYpLnNjYWxlKDE3NS4yOTUpfTtmdW5jdGlvbiBRZih0LGUpe3JldHVyblt4YyhlKSpUYyh0KSxUYyhlKV19UWYuaW52ZXJ0PUVmKE9jKTt2YXIgS2Y9ZnVuY3Rpb24oKXtyZXR1cm4geWYoUWYpLnNjYWxlKDI0OS41KS5jbGlwQW5nbGUoOTArMWUtNil9O2Z1bmN0aW9uIHRkKHQsZSl7dmFyIG49eGMoZSkscj0xK3hjKHQpKm47cmV0dXJuW24qVGModCkvcixUYyhlKS9yXX10ZC5pbnZlcnQ9RWYoKGZ1bmN0aW9uKHQpe3JldHVybiAyKm1jKHQpfSkpO3ZhciBlZD1mdW5jdGlvbigpe3JldHVybiB5Zih0ZCkuc2NhbGUoMjUwKS5jbGlwQW5nbGUoMTQyKX07ZnVuY3Rpb24gbmQodCxlKXtyZXR1cm5bd2MoQWMoKGZjK2UpLzIpKSwtdF19bmQuaW52ZXJ0PWZ1bmN0aW9uKHQsZSl7cmV0dXJuWy1lLDIqbWMoa2ModCkpLWZjXX07dmFyIHJkPWZ1bmN0aW9uKCl7dmFyIHQ9RGYobmQpLGU9dC5jZW50ZXIsbj10LnJvdGF0ZTtyZXR1cm4gdC5jZW50ZXI9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/ZShbLXRbMV0sdFswXV0pOlsodD1lKCkpWzFdLC10WzBdXX0sdC5yb3RhdGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/bihbdFswXSx0WzFdLHQubGVuZ3RoPjI/dFsyXSs5MDo5MF0pOlsodD1uKCkpWzBdLHRbMV0sdFsyXS05MF19LG4oWzAsMCw5MF0pLnNjYWxlKDE1OS4xNTUpfTtmdW5jdGlvbiBpZCh0LGUpe3JldHVybiB0LnBhcmVudD09PWUucGFyZW50PzE6Mn1mdW5jdGlvbiBhZCh0LGUpe3JldHVybiB0K2UueH1mdW5jdGlvbiBvZCh0LGUpe3JldHVybiBNYXRoLm1heCh0LGUueSl9dmFyIHNkPWZ1bmN0aW9uKCl7dmFyIHQ9aWQsZT0xLG49MSxyPSExO2Z1bmN0aW9uIGkoaSl7dmFyIGEsbz0wO2kuZWFjaEFmdGVyKChmdW5jdGlvbihlKXt2YXIgbj1lLmNoaWxkcmVuO24/KGUueD1mdW5jdGlvbih0KXtyZXR1cm4gdC5yZWR1Y2UoYWQsMCkvdC5sZW5ndGh9KG4pLGUueT1mdW5jdGlvbih0KXtyZXR1cm4gMSt0LnJlZHVjZShvZCwwKX0obikpOihlLng9YT9vKz10KGUsYSk6MCxlLnk9MCxhPWUpfSkpO3ZhciBzPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZTtlPXQuY2hpbGRyZW47KXQ9ZVswXTtyZXR1cm4gdH0oaSksYz1mdW5jdGlvbih0KXtmb3IodmFyIGU7ZT10LmNoaWxkcmVuOyl0PWVbZS5sZW5ndGgtMV07cmV0dXJuIHR9KGkpLHU9cy54LXQocyxjKS8yLGw9Yy54K3QoYyxzKS8yO3JldHVybiBpLmVhY2hBZnRlcihyP2Z1bmN0aW9uKHQpe3QueD0odC54LWkueCkqZSx0Lnk9KGkueS10LnkpKm59OmZ1bmN0aW9uKHQpe3QueD0odC54LXUpLyhsLXUpKmUsdC55PSgxLShpLnk/dC55L2kueToxKSkqbn0pfXJldHVybiBpLnNlcGFyYXRpb249ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9ZSxpKTp0fSxpLnNpemU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9ITEsZT0rdFswXSxuPSt0WzFdLGkpOnI/bnVsbDpbZSxuXX0saS5ub2RlU2l6ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj0hMCxlPSt0WzBdLG49K3RbMV0saSk6cj9bZSxuXTpudWxsfSxpfTtmdW5jdGlvbiBjZCh0KXt2YXIgZT0wLG49dC5jaGlsZHJlbixyPW4mJm4ubGVuZ3RoO2lmKHIpZm9yKDstLXI+PTA7KWUrPW5bcl0udmFsdWU7ZWxzZSBlPTE7dC52YWx1ZT1lfWZ1bmN0aW9uIHVkKHQsZSl7dmFyIG4scixpLGEsbyxzPW5ldyBkZCh0KSxjPSt0LnZhbHVlJiYocy52YWx1ZT10LnZhbHVlKSx1PVtzXTtmb3IobnVsbD09ZSYmKGU9bGQpO249dS5wb3AoKTspaWYoYyYmKG4udmFsdWU9K24uZGF0YS52YWx1ZSksKGk9ZShuLmRhdGEpKSYmKG89aS5sZW5ndGgpKWZvcihuLmNoaWxkcmVuPW5ldyBBcnJheShvKSxhPW8tMTthPj0wOy0tYSl1LnB1c2gocj1uLmNoaWxkcmVuW2FdPW5ldyBkZChpW2FdKSksci5wYXJlbnQ9bixyLmRlcHRoPW4uZGVwdGgrMTtyZXR1cm4gcy5lYWNoQmVmb3JlKGZkKX1mdW5jdGlvbiBsZCh0KXtyZXR1cm4gdC5jaGlsZHJlbn1mdW5jdGlvbiBoZCh0KXt0LmRhdGE9dC5kYXRhLmRhdGF9ZnVuY3Rpb24gZmQodCl7dmFyIGU9MDtkb3t0LmhlaWdodD1lfXdoaWxlKCh0PXQucGFyZW50KSYmdC5oZWlnaHQ8KytlKX1mdW5jdGlvbiBkZCh0KXt0aGlzLmRhdGE9dCx0aGlzLmRlcHRoPXRoaXMuaGVpZ2h0PTAsdGhpcy5wYXJlbnQ9bnVsbH1kZC5wcm90b3R5cGU9dWQucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpkZCxjb3VudDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmVhY2hBZnRlcihjZCl9LGVhY2g6ZnVuY3Rpb24odCl7dmFyIGUsbixyLGksYT10aGlzLG89W2FdO2Rve2ZvcihlPW8ucmV2ZXJzZSgpLG89W107YT1lLnBvcCgpOylpZih0KGEpLG49YS5jaGlsZHJlbilmb3Iocj0wLGk9bi5sZW5ndGg7cjxpOysrcilvLnB1c2gobltyXSl9d2hpbGUoby5sZW5ndGgpO3JldHVybiB0aGlzfSxlYWNoQWZ0ZXI6ZnVuY3Rpb24odCl7Zm9yKHZhciBlLG4scixpPXRoaXMsYT1baV0sbz1bXTtpPWEucG9wKCk7KWlmKG8ucHVzaChpKSxlPWkuY2hpbGRyZW4pZm9yKG49MCxyPWUubGVuZ3RoO248cjsrK24pYS5wdXNoKGVbbl0pO2Zvcig7aT1vLnBvcCgpOyl0KGkpO3JldHVybiB0aGlzfSxlYWNoQmVmb3JlOmZ1bmN0aW9uKHQpe2Zvcih2YXIgZSxuLHI9dGhpcyxpPVtyXTtyPWkucG9wKCk7KWlmKHQociksZT1yLmNoaWxkcmVuKWZvcihuPWUubGVuZ3RoLTE7bj49MDstLW4paS5wdXNoKGVbbl0pO3JldHVybiB0aGlzfSxzdW06ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuZWFjaEFmdGVyKChmdW5jdGlvbihlKXtmb3IodmFyIG49K3QoZS5kYXRhKXx8MCxyPWUuY2hpbGRyZW4saT1yJiZyLmxlbmd0aDstLWk+PTA7KW4rPXJbaV0udmFsdWU7ZS52YWx1ZT1ufSkpfSxzb3J0OmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmVhY2hCZWZvcmUoKGZ1bmN0aW9uKGUpe2UuY2hpbGRyZW4mJmUuY2hpbGRyZW4uc29ydCh0KX0pKX0scGF0aDpmdW5jdGlvbih0KXtmb3IodmFyIGU9dGhpcyxuPWZ1bmN0aW9uKHQsZSl7aWYodD09PWUpcmV0dXJuIHQ7dmFyIG49dC5hbmNlc3RvcnMoKSxyPWUuYW5jZXN0b3JzKCksaT1udWxsO3Q9bi5wb3AoKSxlPXIucG9wKCk7Zm9yKDt0PT09ZTspaT10LHQ9bi5wb3AoKSxlPXIucG9wKCk7cmV0dXJuIGl9KGUsdCkscj1bZV07ZSE9PW47KWU9ZS5wYXJlbnQsci5wdXNoKGUpO2Zvcih2YXIgaT1yLmxlbmd0aDt0IT09bjspci5zcGxpY2UoaSwwLHQpLHQ9dC5wYXJlbnQ7cmV0dXJuIHJ9LGFuY2VzdG9yczpmdW5jdGlvbigpe2Zvcih2YXIgdD10aGlzLGU9W3RdO3Q9dC5wYXJlbnQ7KWUucHVzaCh0KTtyZXR1cm4gZX0sZGVzY2VuZGFudHM6ZnVuY3Rpb24oKXt2YXIgdD1bXTtyZXR1cm4gdGhpcy5lYWNoKChmdW5jdGlvbihlKXt0LnB1c2goZSl9KSksdH0sbGVhdmVzOmZ1bmN0aW9uKCl7dmFyIHQ9W107cmV0dXJuIHRoaXMuZWFjaEJlZm9yZSgoZnVuY3Rpb24oZSl7ZS5jaGlsZHJlbnx8dC5wdXNoKGUpfSkpLHR9LGxpbmtzOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcyxlPVtdO3JldHVybiB0LmVhY2goKGZ1bmN0aW9uKG4pe24hPT10JiZlLnB1c2goe3NvdXJjZTpuLnBhcmVudCx0YXJnZXQ6bn0pfSkpLGV9LGNvcHk6ZnVuY3Rpb24oKXtyZXR1cm4gdWQodGhpcykuZWFjaEJlZm9yZShoZCl9fTt2YXIgcGQ9QXJyYXkucHJvdG90eXBlLnNsaWNlO3ZhciBnZD1mdW5jdGlvbih0KXtmb3IodmFyIGUsbixyPTAsaT0odD1mdW5jdGlvbih0KXtmb3IodmFyIGUsbixyPXQubGVuZ3RoO3I7KW49TWF0aC5yYW5kb20oKSpyLS18MCxlPXRbcl0sdFtyXT10W25dLHRbbl09ZTtyZXR1cm4gdH0ocGQuY2FsbCh0KSkpLmxlbmd0aCxhPVtdO3I8aTspZT10W3JdLG4mJm1kKG4sZSk/KytyOihuPXhkKGE9eWQoYSxlKSkscj0wKTtyZXR1cm4gbn07ZnVuY3Rpb24geWQodCxlKXt2YXIgbixyO2lmKGJkKGUsdCkpcmV0dXJuW2VdO2ZvcihuPTA7bjx0Lmxlbmd0aDsrK24paWYodmQoZSx0W25dKSYmYmQoX2QodFtuXSxlKSx0KSlyZXR1cm5bdFtuXSxlXTtmb3Iobj0wO248dC5sZW5ndGgtMTsrK24pZm9yKHI9bisxO3I8dC5sZW5ndGg7KytyKWlmKHZkKF9kKHRbbl0sdFtyXSksZSkmJnZkKF9kKHRbbl0sZSksdFtyXSkmJnZkKF9kKHRbcl0sZSksdFtuXSkmJmJkKGtkKHRbbl0sdFtyXSxlKSx0KSlyZXR1cm5bdFtuXSx0W3JdLGVdO3Rocm93IG5ldyBFcnJvcn1mdW5jdGlvbiB2ZCh0LGUpe3ZhciBuPXQuci1lLnIscj1lLngtdC54LGk9ZS55LXQueTtyZXR1cm4gbjwwfHxuKm48cipyK2kqaX1mdW5jdGlvbiBtZCh0LGUpe3ZhciBuPXQuci1lLnIrMWUtNixyPWUueC10LngsaT1lLnktdC55O3JldHVybiBuPjAmJm4qbj5yKnIraSppfWZ1bmN0aW9uIGJkKHQsZSl7Zm9yKHZhciBuPTA7bjxlLmxlbmd0aDsrK24paWYoIW1kKHQsZVtuXSkpcmV0dXJuITE7cmV0dXJuITB9ZnVuY3Rpb24geGQodCl7c3dpdGNoKHQubGVuZ3RoKXtjYXNlIDE6cmV0dXJue3g6KGU9dFswXSkueCx5OmUueSxyOmUucn07Y2FzZSAyOnJldHVybiBfZCh0WzBdLHRbMV0pO2Nhc2UgMzpyZXR1cm4ga2QodFswXSx0WzFdLHRbMl0pfXZhciBlfWZ1bmN0aW9uIF9kKHQsZSl7dmFyIG49dC54LHI9dC55LGk9dC5yLGE9ZS54LG89ZS55LHM9ZS5yLGM9YS1uLHU9by1yLGw9cy1pLGg9TWF0aC5zcXJ0KGMqYyt1KnUpO3JldHVybnt4OihuK2ErYy9oKmwpLzIseToocitvK3UvaCpsKS8yLHI6KGgraStzKS8yfX1mdW5jdGlvbiBrZCh0LGUsbil7dmFyIHI9dC54LGk9dC55LGE9dC5yLG89ZS54LHM9ZS55LGM9ZS5yLHU9bi54LGw9bi55LGg9bi5yLGY9ci1vLGQ9ci11LHA9aS1zLGc9aS1sLHk9Yy1hLHY9aC1hLG09cipyK2kqaS1hKmEsYj1tLW8qby1zKnMrYypjLHg9bS11KnUtbCpsK2gqaCxfPWQqcC1mKmcsaz0ocCp4LWcqYikvKDIqXyktcix3PShnKnktcCp2KS9fLEU9KGQqYi1mKngpLygyKl8pLWksVD0oZip2LWQqeSkvXyxDPXcqdytUKlQtMSxTPTIqKGErayp3K0UqVCksQT1rKmsrRSpFLWEqYSxNPS0oQz8oUytNYXRoLnNxcnQoUypTLTQqQypBKSkvKDIqQyk6QS9TKTtyZXR1cm57eDpyK2srdypNLHk6aStFK1QqTSxyOk19fWZ1bmN0aW9uIHdkKHQsZSxuKXt2YXIgcixpLGEsbyxzPXQueC1lLngsYz10LnktZS55LHU9cypzK2MqYzt1PyhpPWUucituLnIsaSo9aSxvPXQucituLnIsaT4obyo9byk/KHI9KHUrby1pKS8oMip1KSxhPU1hdGguc3FydChNYXRoLm1heCgwLG8vdS1yKnIpKSxuLng9dC54LXIqcy1hKmMsbi55PXQueS1yKmMrYSpzKToocj0odStpLW8pLygyKnUpLGE9TWF0aC5zcXJ0KE1hdGgubWF4KDAsaS91LXIqcikpLG4ueD1lLngrcipzLWEqYyxuLnk9ZS55K3IqYythKnMpKToobi54PWUueCtuLnIsbi55PWUueSl9ZnVuY3Rpb24gRWQodCxlKXt2YXIgbj10LnIrZS5yLTFlLTYscj1lLngtdC54LGk9ZS55LXQueTtyZXR1cm4gbj4wJiZuKm4+cipyK2kqaX1mdW5jdGlvbiBUZCh0KXt2YXIgZT10Ll8sbj10Lm5leHQuXyxyPWUucituLnIsaT0oZS54Km4ucituLngqZS5yKS9yLGE9KGUueSpuLnIrbi55KmUucikvcjtyZXR1cm4gaSppK2EqYX1mdW5jdGlvbiBDZCh0KXt0aGlzLl89dCx0aGlzLm5leHQ9bnVsbCx0aGlzLnByZXZpb3VzPW51bGx9ZnVuY3Rpb24gU2QodCl7aWYoIShpPXQubGVuZ3RoKSlyZXR1cm4gMDt2YXIgZSxuLHIsaSxhLG8scyxjLHUsbCxoO2lmKChlPXRbMF0pLng9MCxlLnk9MCwhKGk+MSkpcmV0dXJuIGUucjtpZihuPXRbMV0sZS54PS1uLnIsbi54PWUucixuLnk9MCwhKGk+MikpcmV0dXJuIGUucituLnI7d2QobixlLHI9dFsyXSksZT1uZXcgQ2QoZSksbj1uZXcgQ2Qobikscj1uZXcgQ2QociksZS5uZXh0PXIucHJldmlvdXM9bixuLm5leHQ9ZS5wcmV2aW91cz1yLHIubmV4dD1uLnByZXZpb3VzPWU7dDpmb3Iocz0zO3M8aTsrK3Mpe3dkKGUuXyxuLl8scj10W3NdKSxyPW5ldyBDZChyKSxjPW4ubmV4dCx1PWUucHJldmlvdXMsbD1uLl8ucixoPWUuXy5yO2Rve2lmKGw8PWgpe2lmKEVkKGMuXyxyLl8pKXtuPWMsZS5uZXh0PW4sbi5wcmV2aW91cz1lLC0tcztjb250aW51ZSB0fWwrPWMuXy5yLGM9Yy5uZXh0fWVsc2V7aWYoRWQodS5fLHIuXykpeyhlPXUpLm5leHQ9bixuLnByZXZpb3VzPWUsLS1zO2NvbnRpbnVlIHR9aCs9dS5fLnIsdT11LnByZXZpb3VzfX13aGlsZShjIT09dS5uZXh0KTtmb3Ioci5wcmV2aW91cz1lLHIubmV4dD1uLGUubmV4dD1uLnByZXZpb3VzPW49cixhPVRkKGUpOyhyPXIubmV4dCkhPT1uOykobz1UZChyKSk8YSYmKGU9cixhPW8pO249ZS5uZXh0fWZvcihlPVtuLl9dLHI9bjsocj1yLm5leHQpIT09bjspZS5wdXNoKHIuXyk7Zm9yKHI9Z2QoZSkscz0wO3M8aTsrK3MpKGU9dFtzXSkueC09ci54LGUueS09ci55O3JldHVybiByLnJ9dmFyIEFkPWZ1bmN0aW9uKHQpe3JldHVybiBTZCh0KSx0fTtmdW5jdGlvbiBNZCh0KXtyZXR1cm4gbnVsbD09dD9udWxsOk9kKHQpfWZ1bmN0aW9uIE9kKHQpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiB0KXRocm93IG5ldyBFcnJvcjtyZXR1cm4gdH1mdW5jdGlvbiBEZCgpe3JldHVybiAwfXZhciBOZD1mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdH19O2Z1bmN0aW9uIEJkKHQpe3JldHVybiBNYXRoLnNxcnQodC52YWx1ZSl9dmFyIExkPWZ1bmN0aW9uKCl7dmFyIHQ9bnVsbCxlPTEsbj0xLHI9RGQ7ZnVuY3Rpb24gaShpKXtyZXR1cm4gaS54PWUvMixpLnk9bi8yLHQ/aS5lYWNoQmVmb3JlKEZkKHQpKS5lYWNoQWZ0ZXIoUGQociwuNSkpLmVhY2hCZWZvcmUoSWQoMSkpOmkuZWFjaEJlZm9yZShGZChCZCkpLmVhY2hBZnRlcihQZChEZCwxKSkuZWFjaEFmdGVyKFBkKHIsaS5yL01hdGgubWluKGUsbikpKS5lYWNoQmVmb3JlKElkKE1hdGgubWluKGUsbikvKDIqaS5yKSkpLGl9cmV0dXJuIGkucmFkaXVzPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PU1kKGUpLGkpOnR9LGkuc2l6ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT0rdFswXSxuPSt0WzFdLGkpOltlLG5dfSxpLnBhZGRpbmc9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpOZCgrdCksaSk6cn0saX07ZnVuY3Rpb24gRmQodCl7cmV0dXJuIGZ1bmN0aW9uKGUpe2UuY2hpbGRyZW58fChlLnI9TWF0aC5tYXgoMCwrdChlKXx8MCkpfX1mdW5jdGlvbiBQZCh0LGUpe3JldHVybiBmdW5jdGlvbihuKXtpZihyPW4uY2hpbGRyZW4pe3ZhciByLGksYSxvPXIubGVuZ3RoLHM9dChuKSplfHwwO2lmKHMpZm9yKGk9MDtpPG87KytpKXJbaV0ucis9cztpZihhPVNkKHIpLHMpZm9yKGk9MDtpPG87KytpKXJbaV0uci09cztuLnI9YStzfX19ZnVuY3Rpb24gSWQodCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3ZhciBuPWUucGFyZW50O2Uucio9dCxuJiYoZS54PW4ueCt0KmUueCxlLnk9bi55K3QqZS55KX19dmFyIGpkPWZ1bmN0aW9uKHQpe3QueDA9TWF0aC5yb3VuZCh0LngwKSx0LnkwPU1hdGgucm91bmQodC55MCksdC54MT1NYXRoLnJvdW5kKHQueDEpLHQueTE9TWF0aC5yb3VuZCh0LnkxKX0sUmQ9ZnVuY3Rpb24odCxlLG4scixpKXtmb3IodmFyIGEsbz10LmNoaWxkcmVuLHM9LTEsYz1vLmxlbmd0aCx1PXQudmFsdWUmJihyLWUpL3QudmFsdWU7KytzPGM7KShhPW9bc10pLnkwPW4sYS55MT1pLGEueDA9ZSxhLngxPWUrPWEudmFsdWUqdX0sWWQ9ZnVuY3Rpb24oKXt2YXIgdD0xLGU9MSxuPTAscj0hMTtmdW5jdGlvbiBpKGkpe3ZhciBhPWkuaGVpZ2h0KzE7cmV0dXJuIGkueDA9aS55MD1uLGkueDE9dCxpLnkxPWUvYSxpLmVhY2hCZWZvcmUoZnVuY3Rpb24odCxlKXtyZXR1cm4gZnVuY3Rpb24ocil7ci5jaGlsZHJlbiYmUmQocixyLngwLHQqKHIuZGVwdGgrMSkvZSxyLngxLHQqKHIuZGVwdGgrMikvZSk7dmFyIGk9ci54MCxhPXIueTAsbz1yLngxLW4scz1yLnkxLW47bzxpJiYoaT1vPShpK28pLzIpLHM8YSYmKGE9cz0oYStzKS8yKSxyLngwPWksci55MD1hLHIueDE9byxyLnkxPXN9fShlLGEpKSxyJiZpLmVhY2hCZWZvcmUoamQpLGl9cmV0dXJuIGkucm91bmQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9ISF0LGkpOnJ9LGkuc2l6ZT1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD0rblswXSxlPStuWzFdLGkpOlt0LGVdfSxpLnBhZGRpbmc9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49K3QsaSk6bn0saX0semQ9e2RlcHRoOi0xfSxVZD17fTtmdW5jdGlvbiAkZCh0KXtyZXR1cm4gdC5pZH1mdW5jdGlvbiBXZCh0KXtyZXR1cm4gdC5wYXJlbnRJZH12YXIgVmQ9ZnVuY3Rpb24oKXt2YXIgdD0kZCxlPVdkO2Z1bmN0aW9uIG4obil7dmFyIHIsaSxhLG8scyxjLHUsbD1uLmxlbmd0aCxoPW5ldyBBcnJheShsKSxmPXt9O2ZvcihpPTA7aTxsOysraSlyPW5baV0scz1oW2ldPW5ldyBkZChyKSxudWxsIT0oYz10KHIsaSxuKSkmJihjKz0iIikmJihmW3U9IiQiKyhzLmlkPWMpXT11IGluIGY/VWQ6cyk7Zm9yKGk9MDtpPGw7KytpKWlmKHM9aFtpXSxudWxsIT0oYz1lKG5baV0saSxuKSkmJihjKz0iIikpe2lmKCEobz1mWyIkIitjXSkpdGhyb3cgbmV3IEVycm9yKCJtaXNzaW5nOiAiK2MpO2lmKG89PT1VZCl0aHJvdyBuZXcgRXJyb3IoImFtYmlndW91czogIitjKTtvLmNoaWxkcmVuP28uY2hpbGRyZW4ucHVzaChzKTpvLmNoaWxkcmVuPVtzXSxzLnBhcmVudD1vfWVsc2V7aWYoYSl0aHJvdyBuZXcgRXJyb3IoIm11bHRpcGxlIHJvb3RzIik7YT1zfWlmKCFhKXRocm93IG5ldyBFcnJvcigibm8gcm9vdCIpO2lmKGEucGFyZW50PXpkLGEuZWFjaEJlZm9yZSgoZnVuY3Rpb24odCl7dC5kZXB0aD10LnBhcmVudC5kZXB0aCsxLC0tbH0pKS5lYWNoQmVmb3JlKGZkKSxhLnBhcmVudD1udWxsLGw+MCl0aHJvdyBuZXcgRXJyb3IoImN5Y2xlIik7cmV0dXJuIGF9cmV0dXJuIG4uaWQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9T2QoZSksbik6dH0sbi5wYXJlbnRJZD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT1PZCh0KSxuKTplfSxufTtmdW5jdGlvbiBIZCh0LGUpe3JldHVybiB0LnBhcmVudD09PWUucGFyZW50PzE6Mn1mdW5jdGlvbiBHZCh0KXt2YXIgZT10LmNoaWxkcmVuO3JldHVybiBlP2VbMF06dC50fWZ1bmN0aW9uIHFkKHQpe3ZhciBlPXQuY2hpbGRyZW47cmV0dXJuIGU/ZVtlLmxlbmd0aC0xXTp0LnR9ZnVuY3Rpb24gWGQodCxlLG4pe3ZhciByPW4vKGUuaS10LmkpO2UuYy09cixlLnMrPW4sdC5jKz1yLGUueis9bixlLm0rPW59ZnVuY3Rpb24gWmQodCxlLG4pe3JldHVybiB0LmEucGFyZW50PT09ZS5wYXJlbnQ/dC5hOm59ZnVuY3Rpb24gSmQodCxlKXt0aGlzLl89dCx0aGlzLnBhcmVudD1udWxsLHRoaXMuY2hpbGRyZW49bnVsbCx0aGlzLkE9bnVsbCx0aGlzLmE9dGhpcyx0aGlzLno9MCx0aGlzLm09MCx0aGlzLmM9MCx0aGlzLnM9MCx0aGlzLnQ9bnVsbCx0aGlzLmk9ZX1KZC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShkZC5wcm90b3R5cGUpO3ZhciBRZD1mdW5jdGlvbigpe3ZhciB0PUhkLGU9MSxuPTEscj1udWxsO2Z1bmN0aW9uIGkoaSl7dmFyIGM9ZnVuY3Rpb24odCl7Zm9yKHZhciBlLG4scixpLGEsbz1uZXcgSmQodCwwKSxzPVtvXTtlPXMucG9wKCk7KWlmKHI9ZS5fLmNoaWxkcmVuKWZvcihlLmNoaWxkcmVuPW5ldyBBcnJheShhPXIubGVuZ3RoKSxpPWEtMTtpPj0wOy0taSlzLnB1c2gobj1lLmNoaWxkcmVuW2ldPW5ldyBKZChyW2ldLGkpKSxuLnBhcmVudD1lO3JldHVybihvLnBhcmVudD1uZXcgSmQobnVsbCwwKSkuY2hpbGRyZW49W29dLG99KGkpO2lmKGMuZWFjaEFmdGVyKGEpLGMucGFyZW50Lm09LWMueixjLmVhY2hCZWZvcmUobykscilpLmVhY2hCZWZvcmUocyk7ZWxzZXt2YXIgdT1pLGw9aSxoPWk7aS5lYWNoQmVmb3JlKChmdW5jdGlvbih0KXt0Lng8dS54JiYodT10KSx0Lng+bC54JiYobD10KSx0LmRlcHRoPmguZGVwdGgmJihoPXQpfSkpO3ZhciBmPXU9PT1sPzE6dCh1LGwpLzIsZD1mLXUueCxwPWUvKGwueCtmK2QpLGc9bi8oaC5kZXB0aHx8MSk7aS5lYWNoQmVmb3JlKChmdW5jdGlvbih0KXt0Lng9KHQueCtkKSpwLHQueT10LmRlcHRoKmd9KSl9cmV0dXJuIGl9ZnVuY3Rpb24gYShlKXt2YXIgbj1lLmNoaWxkcmVuLHI9ZS5wYXJlbnQuY2hpbGRyZW4saT1lLmk/cltlLmktMV06bnVsbDtpZihuKXshZnVuY3Rpb24odCl7Zm9yKHZhciBlLG49MCxyPTAsaT10LmNoaWxkcmVuLGE9aS5sZW5ndGg7LS1hPj0wOykoZT1pW2FdKS56Kz1uLGUubSs9bixuKz1lLnMrKHIrPWUuYyl9KGUpO3ZhciBhPShuWzBdLnorbltuLmxlbmd0aC0xXS56KS8yO2k/KGUuej1pLnordChlLl8saS5fKSxlLm09ZS56LWEpOmUuej1hfWVsc2UgaSYmKGUuej1pLnordChlLl8saS5fKSk7ZS5wYXJlbnQuQT1mdW5jdGlvbihlLG4scil7aWYobil7Zm9yKHZhciBpLGE9ZSxvPWUscz1uLGM9YS5wYXJlbnQuY2hpbGRyZW5bMF0sdT1hLm0sbD1vLm0saD1zLm0sZj1jLm07cz1xZChzKSxhPUdkKGEpLHMmJmE7KWM9R2QoYyksKG89cWQobykpLmE9ZSwoaT1zLnoraC1hLnotdSt0KHMuXyxhLl8pKT4wJiYoWGQoWmQocyxlLHIpLGUsaSksdSs9aSxsKz1pKSxoKz1zLm0sdSs9YS5tLGYrPWMubSxsKz1vLm07cyYmIXFkKG8pJiYoby50PXMsby5tKz1oLWwpLGEmJiFHZChjKSYmKGMudD1hLGMubSs9dS1mLHI9ZSl9cmV0dXJuIHJ9KGUsaSxlLnBhcmVudC5BfHxyWzBdKX1mdW5jdGlvbiBvKHQpe3QuXy54PXQueit0LnBhcmVudC5tLHQubSs9dC5wYXJlbnQubX1mdW5jdGlvbiBzKHQpe3QueCo9ZSx0Lnk9dC5kZXB0aCpufXJldHVybiBpLnNlcGFyYXRpb249ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9ZSxpKTp0fSxpLnNpemU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9ITEsZT0rdFswXSxuPSt0WzFdLGkpOnI/bnVsbDpbZSxuXX0saS5ub2RlU2l6ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj0hMCxlPSt0WzBdLG49K3RbMV0saSk6cj9bZSxuXTpudWxsfSxpfSxLZD1mdW5jdGlvbih0LGUsbixyLGkpe2Zvcih2YXIgYSxvPXQuY2hpbGRyZW4scz0tMSxjPW8ubGVuZ3RoLHU9dC52YWx1ZSYmKGktbikvdC52YWx1ZTsrK3M8YzspKGE9b1tzXSkueDA9ZSxhLngxPXIsYS55MD1uLGEueTE9bis9YS52YWx1ZSp1fSx0cD0oMStNYXRoLnNxcnQoNSkpLzI7ZnVuY3Rpb24gZXAodCxlLG4scixpLGEpe2Zvcih2YXIgbyxzLGMsdSxsLGgsZixkLHAsZyx5LHY9W10sbT1lLmNoaWxkcmVuLGI9MCx4PTAsXz1tLmxlbmd0aCxrPWUudmFsdWU7YjxfOyl7Yz1pLW4sdT1hLXI7ZG97bD1tW3grK10udmFsdWV9d2hpbGUoIWwmJng8Xyk7Zm9yKGg9Zj1sLHk9bCpsKihnPU1hdGgubWF4KHUvYyxjL3UpLyhrKnQpKSxwPU1hdGgubWF4KGYveSx5L2gpO3g8XzsrK3gpe2lmKGwrPXM9bVt4XS52YWx1ZSxzPGgmJihoPXMpLHM+ZiYmKGY9cykseT1sKmwqZywoZD1NYXRoLm1heChmL3kseS9oKSk+cCl7bC09czticmVha31wPWR9di5wdXNoKG89e3ZhbHVlOmwsZGljZTpjPHUsY2hpbGRyZW46bS5zbGljZShiLHgpfSksby5kaWNlP1JkKG8sbixyLGksaz9yKz11KmwvazphKTpLZChvLG4scixrP24rPWMqbC9rOmksYSksay09bCxiPXh9cmV0dXJuIHZ9dmFyIG5wPWZ1bmN0aW9uIHQoZSl7ZnVuY3Rpb24gbih0LG4scixpLGEpe2VwKGUsdCxuLHIsaSxhKX1yZXR1cm4gbi5yYXRpbz1mdW5jdGlvbihlKXtyZXR1cm4gdCgoZT0rZSk+MT9lOjEpfSxufSh0cCkscnA9ZnVuY3Rpb24oKXt2YXIgdD1ucCxlPSExLG49MSxyPTEsaT1bMF0sYT1EZCxvPURkLHM9RGQsYz1EZCx1PURkO2Z1bmN0aW9uIGwodCl7cmV0dXJuIHQueDA9dC55MD0wLHQueDE9bix0LnkxPXIsdC5lYWNoQmVmb3JlKGgpLGk9WzBdLGUmJnQuZWFjaEJlZm9yZShqZCksdH1mdW5jdGlvbiBoKGUpe3ZhciBuPWlbZS5kZXB0aF0scj1lLngwK24sbD1lLnkwK24saD1lLngxLW4sZj1lLnkxLW47aDxyJiYocj1oPShyK2gpLzIpLGY8bCYmKGw9Zj0obCtmKS8yKSxlLngwPXIsZS55MD1sLGUueDE9aCxlLnkxPWYsZS5jaGlsZHJlbiYmKG49aVtlLmRlcHRoKzFdPWEoZSkvMixyKz11KGUpLW4sbCs9byhlKS1uLChoLT1zKGUpLW4pPHImJihyPWg9KHIraCkvMiksKGYtPWMoZSktbik8bCYmKGw9Zj0obCtmKS8yKSx0KGUscixsLGgsZikpfXJldHVybiBsLnJvdW5kPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPSEhdCxsKTplfSxsLnNpemU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49K3RbMF0scj0rdFsxXSxsKTpbbixyXX0sbC50aWxlPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PU9kKGUpLGwpOnR9LGwucGFkZGluZz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD9sLnBhZGRpbmdJbm5lcih0KS5wYWRkaW5nT3V0ZXIodCk6bC5wYWRkaW5nSW5uZXIoKX0sbC5wYWRkaW5nSW5uZXI9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpOZCgrdCksbCk6YX0sbC5wYWRkaW5nT3V0ZXI9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/bC5wYWRkaW5nVG9wKHQpLnBhZGRpbmdSaWdodCh0KS5wYWRkaW5nQm90dG9tKHQpLnBhZGRpbmdMZWZ0KHQpOmwucGFkZGluZ1RvcCgpfSxsLnBhZGRpbmdUb3A9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpOZCgrdCksbCk6b30sbC5wYWRkaW5nUmlnaHQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHM9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpOZCgrdCksbCk6c30sbC5wYWRkaW5nQm90dG9tPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhjPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6TmQoK3QpLGwpOmN9LGwucGFkZGluZ0xlZnQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHU9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpOZCgrdCksbCk6dX0sbH0saXA9ZnVuY3Rpb24odCxlLG4scixpKXt2YXIgYSxvLHM9dC5jaGlsZHJlbixjPXMubGVuZ3RoLHU9bmV3IEFycmF5KGMrMSk7Zm9yKHVbMF09bz1hPTA7YTxjOysrYSl1W2ErMV09bys9c1thXS52YWx1ZTshZnVuY3Rpb24gdChlLG4scixpLGEsbyxjKXtpZihlPj1uLTEpe3ZhciBsPXNbZV07cmV0dXJuIGwueDA9aSxsLnkwPWEsbC54MT1vLHZvaWQobC55MT1jKX12YXIgaD11W2VdLGY9ci8yK2gsZD1lKzEscD1uLTE7Zm9yKDtkPHA7KXt2YXIgZz1kK3A+Pj4xO3VbZ108Zj9kPWcrMTpwPWd9Zi11W2QtMV08dVtkXS1mJiZlKzE8ZCYmLS1kO3ZhciB5PXVbZF0taCx2PXIteTtpZihvLWk+Yy1hKXt2YXIgbT0oaSp2K28qeSkvcjt0KGUsZCx5LGksYSxtLGMpLHQoZCxuLHYsbSxhLG8sYyl9ZWxzZXt2YXIgYj0oYSp2K2MqeSkvcjt0KGUsZCx5LGksYSxvLGIpLHQoZCxuLHYsaSxiLG8sYyl9fSgwLGMsdC52YWx1ZSxlLG4scixpKX0sYXA9ZnVuY3Rpb24odCxlLG4scixpKXsoMSZ0LmRlcHRoP0tkOlJkKSh0LGUsbixyLGkpfSxvcD1mdW5jdGlvbiB0KGUpe2Z1bmN0aW9uIG4odCxuLHIsaSxhKXtpZigobz10Ll9zcXVhcmlmeSkmJm8ucmF0aW89PT1lKWZvcih2YXIgbyxzLGMsdSxsLGg9LTEsZj1vLmxlbmd0aCxkPXQudmFsdWU7KytoPGY7KXtmb3IoYz0ocz1vW2hdKS5jaGlsZHJlbix1PXMudmFsdWU9MCxsPWMubGVuZ3RoO3U8bDsrK3Upcy52YWx1ZSs9Y1t1XS52YWx1ZTtzLmRpY2U/UmQocyxuLHIsaSxyKz0oYS1yKSpzLnZhbHVlL2QpOktkKHMsbixyLG4rPShpLW4pKnMudmFsdWUvZCxhKSxkLT1zLnZhbHVlfWVsc2UgdC5fc3F1YXJpZnk9bz1lcChlLHQsbixyLGksYSksby5yYXRpbz1lfXJldHVybiBuLnJhdGlvPWZ1bmN0aW9uKGUpe3JldHVybiB0KChlPStlKT4xP2U6MSl9LG59KHRwKSxzcD1mdW5jdGlvbih0KXt2YXIgZT10Lmxlbmd0aDtyZXR1cm4gZnVuY3Rpb24obil7cmV0dXJuIHRbTWF0aC5tYXgoMCxNYXRoLm1pbihlLTEsTWF0aC5mbG9vcihuKmUpKSldfX0sY3A9ZnVuY3Rpb24odCxlKXt2YXIgbj11bigrdCwrZSk7cmV0dXJuIGZ1bmN0aW9uKHQpe3ZhciBlPW4odCk7cmV0dXJuIGUtMzYwKk1hdGguZmxvb3IoZS8zNjApfX0sdXA9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdD0rdCxlPStlLGZ1bmN0aW9uKG4pe3JldHVybiBNYXRoLnJvdW5kKHQqKDEtbikrZSpuKX19LGxwPU1hdGguU1FSVDI7ZnVuY3Rpb24gaHAodCl7cmV0dXJuKCh0PU1hdGguZXhwKHQpKSsxL3QpLzJ9dmFyIGZwPWZ1bmN0aW9uKHQsZSl7dmFyIG4scixpPXRbMF0sYT10WzFdLG89dFsyXSxzPWVbMF0sYz1lWzFdLHU9ZVsyXSxsPXMtaSxoPWMtYSxmPWwqbCtoKmg7aWYoZjwxZS0xMilyPU1hdGgubG9nKHUvbykvbHAsbj1mdW5jdGlvbih0KXtyZXR1cm5baSt0KmwsYSt0KmgsbypNYXRoLmV4cChscCp0KnIpXX07ZWxzZXt2YXIgZD1NYXRoLnNxcnQoZikscD0odSp1LW8qbys0KmYpLygyKm8qMipkKSxnPSh1KnUtbypvLTQqZikvKDIqdSoyKmQpLHk9TWF0aC5sb2coTWF0aC5zcXJ0KHAqcCsxKS1wKSx2PU1hdGgubG9nKE1hdGguc3FydChnKmcrMSktZyk7cj0odi15KS9scCxuPWZ1bmN0aW9uKHQpe3ZhciBlLG49dCpyLHM9aHAoeSksYz1vLygyKmQpKihzKihlPWxwKm4reSwoKGU9TWF0aC5leHAoMiplKSktMSkvKGUrMSkpLWZ1bmN0aW9uKHQpe3JldHVybigodD1NYXRoLmV4cCh0KSktMS90KS8yfSh5KSk7cmV0dXJuW2krYypsLGErYypoLG8qcy9ocChscCpuK3kpXX19cmV0dXJuIG4uZHVyYXRpb249MWUzKnIsbn07ZnVuY3Rpb24gZHAodCl7cmV0dXJuIGZ1bmN0aW9uKGUsbil7dmFyIHI9dCgoZT10bihlKSkuaCwobj10bihuKSkuaCksaT1obihlLnMsbi5zKSxhPWhuKGUubCxuLmwpLG89aG4oZS5vcGFjaXR5LG4ub3BhY2l0eSk7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBlLmg9cih0KSxlLnM9aSh0KSxlLmw9YSh0KSxlLm9wYWNpdHk9byh0KSxlKyIifX19dmFyIHBwPWRwKHVuKSxncD1kcChobik7ZnVuY3Rpb24geXAodCxlKXt2YXIgbj1obigodD1wYSh0KSkubCwoZT1wYShlKSkubCkscj1obih0LmEsZS5hKSxpPWhuKHQuYixlLmIpLGE9aG4odC5vcGFjaXR5LGUub3BhY2l0eSk7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiB0Lmw9bihlKSx0LmE9cihlKSx0LmI9aShlKSx0Lm9wYWNpdHk9YShlKSx0KyIifX1mdW5jdGlvbiB2cCh0KXtyZXR1cm4gZnVuY3Rpb24oZSxuKXt2YXIgcj10KChlPWthKGUpKS5oLChuPWthKG4pKS5oKSxpPWhuKGUuYyxuLmMpLGE9aG4oZS5sLG4ubCksbz1obihlLm9wYWNpdHksbi5vcGFjaXR5KTtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIGUuaD1yKHQpLGUuYz1pKHQpLGUubD1hKHQpLGUub3BhY2l0eT1vKHQpLGUrIiJ9fX12YXIgbXA9dnAodW4pLGJwPXZwKGhuKTtmdW5jdGlvbiB4cCh0KXtyZXR1cm4gZnVuY3Rpb24gZShuKXtmdW5jdGlvbiByKGUscil7dmFyIGk9dCgoZT1PYShlKSkuaCwocj1PYShyKSkuaCksYT1obihlLnMsci5zKSxvPWhuKGUubCxyLmwpLHM9aG4oZS5vcGFjaXR5LHIub3BhY2l0eSk7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBlLmg9aSh0KSxlLnM9YSh0KSxlLmw9byhNYXRoLnBvdyh0LG4pKSxlLm9wYWNpdHk9cyh0KSxlKyIifX1yZXR1cm4gbj0rbixyLmdhbW1hPWUscn0oMSl9dmFyIF9wPXhwKHVuKSxrcD14cChobik7ZnVuY3Rpb24gd3AodCxlKXtmb3IodmFyIG49MCxyPWUubGVuZ3RoLTEsaT1lWzBdLGE9bmV3IEFycmF5KHI8MD8wOnIpO248cjspYVtuXT10KGksaT1lWysrbl0pO3JldHVybiBmdW5jdGlvbih0KXt2YXIgZT1NYXRoLm1heCgwLE1hdGgubWluKHItMSxNYXRoLmZsb29yKHQqPXIpKSk7cmV0dXJuIGFbZV0odC1lKX19dmFyIEVwPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciBuPW5ldyBBcnJheShlKSxyPTA7cjxlOysrciluW3JdPXQoci8oZS0xKSk7cmV0dXJuIG59LFRwPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZSxuPS0xLHI9dC5sZW5ndGgsaT10W3ItMV0sYT0wOysrbjxyOyllPWksaT10W25dLGErPWVbMV0qaVswXS1lWzBdKmlbMV07cmV0dXJuIGEvMn0sQ3A9ZnVuY3Rpb24odCl7Zm9yKHZhciBlLG4scj0tMSxpPXQubGVuZ3RoLGE9MCxvPTAscz10W2ktMV0sYz0wOysrcjxpOyllPXMscz10W3JdLGMrPW49ZVswXSpzWzFdLXNbMF0qZVsxXSxhKz0oZVswXStzWzBdKSpuLG8rPShlWzFdK3NbMV0pKm47cmV0dXJuW2EvKGMqPTMpLG8vY119O2Z1bmN0aW9uIFNwKHQsZSl7cmV0dXJuIHRbMF0tZVswXXx8dFsxXS1lWzFdfWZ1bmN0aW9uIEFwKHQpe2Zvcih2YXIgZSxuLHIsaT10Lmxlbmd0aCxhPVswLDFdLG89MixzPTI7czxpOysrcyl7Zm9yKDtvPjEmJihlPXRbYVtvLTJdXSxuPXRbYVtvLTFdXSxyPXRbc10sKG5bMF0tZVswXSkqKHJbMV0tZVsxXSktKG5bMV0tZVsxXSkqKHJbMF0tZVswXSk8PTApOyktLW87YVtvKytdPXN9cmV0dXJuIGEuc2xpY2UoMCxvKX12YXIgTXA9ZnVuY3Rpb24odCl7aWYoKG49dC5sZW5ndGgpPDMpcmV0dXJuIG51bGw7dmFyIGUsbixyPW5ldyBBcnJheShuKSxpPW5ldyBBcnJheShuKTtmb3IoZT0wO2U8bjsrK2UpcltlXT1bK3RbZV1bMF0sK3RbZV1bMV0sZV07Zm9yKHIuc29ydChTcCksZT0wO2U8bjsrK2UpaVtlXT1bcltlXVswXSwtcltlXVsxXV07dmFyIGE9QXAociksbz1BcChpKSxzPW9bMF09PT1hWzBdLGM9b1tvLmxlbmd0aC0xXT09PWFbYS5sZW5ndGgtMV0sdT1bXTtmb3IoZT1hLmxlbmd0aC0xO2U+PTA7LS1lKXUucHVzaCh0W3JbYVtlXV1bMl1dKTtmb3IoZT0rcztlPG8ubGVuZ3RoLWM7KytlKXUucHVzaCh0W3Jbb1tlXV1bMl1dKTtyZXR1cm4gdX0sT3A9ZnVuY3Rpb24odCxlKXtmb3IodmFyIG4scixpPXQubGVuZ3RoLGE9dFtpLTFdLG89ZVswXSxzPWVbMV0sYz1hWzBdLHU9YVsxXSxsPSExLGg9MDtoPGk7KytoKW49KGE9dFtoXSlbMF0sKHI9YVsxXSk+cyE9dT5zJiZvPChjLW4pKihzLXIpLyh1LXIpK24mJihsPSFsKSxjPW4sdT1yO3JldHVybiBsfSxEcD1mdW5jdGlvbih0KXtmb3IodmFyIGUsbixyPS0xLGk9dC5sZW5ndGgsYT10W2ktMV0sbz1hWzBdLHM9YVsxXSxjPTA7KytyPGk7KWU9byxuPXMsZS09bz0oYT10W3JdKVswXSxuLT1zPWFbMV0sYys9TWF0aC5zcXJ0KGUqZStuKm4pO3JldHVybiBjfSxOcD1mdW5jdGlvbigpe3JldHVybiBNYXRoLnJhbmRvbSgpfSxCcD1mdW5jdGlvbiB0KGUpe2Z1bmN0aW9uIG4odCxuKXtyZXR1cm4gdD1udWxsPT10PzA6K3Qsbj1udWxsPT1uPzE6K24sMT09PWFyZ3VtZW50cy5sZW5ndGg/KG49dCx0PTApOm4tPXQsZnVuY3Rpb24oKXtyZXR1cm4gZSgpKm4rdH19cmV0dXJuIG4uc291cmNlPXQsbn0oTnApLExwPWZ1bmN0aW9uIHQoZSl7ZnVuY3Rpb24gbih0LG4pe3ZhciByLGk7cmV0dXJuIHQ9bnVsbD09dD8wOit0LG49bnVsbD09bj8xOituLGZ1bmN0aW9uKCl7dmFyIGE7aWYobnVsbCE9cilhPXIscj1udWxsO2Vsc2UgZG97cj0yKmUoKS0xLGE9MiplKCktMSxpPXIqcithKmF9d2hpbGUoIWl8fGk+MSk7cmV0dXJuIHQrbiphKk1hdGguc3FydCgtMipNYXRoLmxvZyhpKS9pKX19cmV0dXJuIG4uc291cmNlPXQsbn0oTnApLEZwPWZ1bmN0aW9uIHQoZSl7ZnVuY3Rpb24gbigpe3ZhciB0PUxwLnNvdXJjZShlKS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIE1hdGguZXhwKHQoKSl9fXJldHVybiBuLnNvdXJjZT10LG59KE5wKSxQcD1mdW5jdGlvbiB0KGUpe2Z1bmN0aW9uIG4odCl7cmV0dXJuIGZ1bmN0aW9uKCl7Zm9yKHZhciBuPTAscj0wO3I8dDsrK3Ipbis9ZSgpO3JldHVybiBufX1yZXR1cm4gbi5zb3VyY2U9dCxufShOcCksSXA9ZnVuY3Rpb24gdChlKXtmdW5jdGlvbiBuKHQpe3ZhciBuPVBwLnNvdXJjZShlKSh0KTtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gbigpL3R9fXJldHVybiBuLnNvdXJjZT10LG59KE5wKSxqcD1mdW5jdGlvbiB0KGUpe2Z1bmN0aW9uIG4odCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuLU1hdGgubG9nKDEtZSgpKS90fX1yZXR1cm4gbi5zb3VyY2U9dCxufShOcCk7ZnVuY3Rpb24gUnAodCxlKXtzd2l0Y2goYXJndW1lbnRzLmxlbmd0aCl7Y2FzZSAwOmJyZWFrO2Nhc2UgMTp0aGlzLnJhbmdlKHQpO2JyZWFrO2RlZmF1bHQ6dGhpcy5yYW5nZShlKS5kb21haW4odCl9cmV0dXJuIHRoaXN9ZnVuY3Rpb24gWXAodCxlKXtzd2l0Y2goYXJndW1lbnRzLmxlbmd0aCl7Y2FzZSAwOmJyZWFrO2Nhc2UgMTp0aGlzLmludGVycG9sYXRvcih0KTticmVhaztkZWZhdWx0OnRoaXMuaW50ZXJwb2xhdG9yKGUpLmRvbWFpbih0KX1yZXR1cm4gdGhpc312YXIgenA9QXJyYXkucHJvdG90eXBlLFVwPXpwLm1hcCwkcD16cC5zbGljZSxXcD17bmFtZToiaW1wbGljaXQifTtmdW5jdGlvbiBWcCgpe3ZhciB0PUppKCksZT1bXSxuPVtdLHI9V3A7ZnVuY3Rpb24gaShpKXt2YXIgYT1pKyIiLG89dC5nZXQoYSk7aWYoIW8pe2lmKHIhPT1XcClyZXR1cm4gcjt0LnNldChhLG89ZS5wdXNoKGkpKX1yZXR1cm4gblsoby0xKSVuLmxlbmd0aF19cmV0dXJuIGkuZG9tYWluPWZ1bmN0aW9uKG4pe2lmKCFhcmd1bWVudHMubGVuZ3RoKXJldHVybiBlLnNsaWNlKCk7ZT1bXSx0PUppKCk7Zm9yKHZhciByLGEsbz0tMSxzPW4ubGVuZ3RoOysrbzxzOyl0LmhhcyhhPShyPW5bb10pKyIiKXx8dC5zZXQoYSxlLnB1c2gocikpO3JldHVybiBpfSxpLnJhbmdlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPSRwLmNhbGwodCksaSk6bi5zbGljZSgpfSxpLnVua25vd249ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9dCxpKTpyfSxpLmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gVnAoZSxuKS51bmtub3duKHIpfSxScC5hcHBseShpLGFyZ3VtZW50cyksaX1mdW5jdGlvbiBIcCgpe3ZhciB0LGUsbj1WcCgpLnVua25vd24odm9pZCAwKSxyPW4uZG9tYWluLGk9bi5yYW5nZSxhPVswLDFdLG89ITEscz0wLGM9MCx1PS41O2Z1bmN0aW9uIGwoKXt2YXIgbj1yKCkubGVuZ3RoLGw9YVsxXTxhWzBdLGg9YVtsLTBdLGY9YVsxLWxdO3Q9KGYtaCkvTWF0aC5tYXgoMSxuLXMrMipjKSxvJiYodD1NYXRoLmZsb29yKHQpKSxoKz0oZi1oLXQqKG4tcykpKnUsZT10KigxLXMpLG8mJihoPU1hdGgucm91bmQoaCksZT1NYXRoLnJvdW5kKGUpKTt2YXIgZD1rKG4pLm1hcCgoZnVuY3Rpb24oZSl7cmV0dXJuIGgrdCplfSkpO3JldHVybiBpKGw/ZC5yZXZlcnNlKCk6ZCl9cmV0dXJuIGRlbGV0ZSBuLnVua25vd24sbi5kb21haW49ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHIodCksbCgpKTpyKCl9LG4ucmFuZ2U9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9Wyt0WzBdLCt0WzFdXSxsKCkpOmEuc2xpY2UoKX0sbi5yYW5nZVJvdW5kPWZ1bmN0aW9uKHQpe3JldHVybiBhPVsrdFswXSwrdFsxXV0sbz0hMCxsKCl9LG4uYmFuZHdpZHRoPWZ1bmN0aW9uKCl7cmV0dXJuIGV9LG4uc3RlcD1mdW5jdGlvbigpe3JldHVybiB0fSxuLnJvdW5kPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPSEhdCxsKCkpOm99LG4ucGFkZGluZz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocz1NYXRoLm1pbigxLGM9K3QpLGwoKSk6c30sbi5wYWRkaW5nSW5uZXI9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHM9TWF0aC5taW4oMSx0KSxsKCkpOnN9LG4ucGFkZGluZ091dGVyPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhjPSt0LGwoKSk6Y30sbi5hbGlnbj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odT1NYXRoLm1heCgwLE1hdGgubWluKDEsdCkpLGwoKSk6dX0sbi5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIEhwKHIoKSxhKS5yb3VuZChvKS5wYWRkaW5nSW5uZXIocykucGFkZGluZ091dGVyKGMpLmFsaWduKHUpfSxScC5hcHBseShsKCksYXJndW1lbnRzKX1mdW5jdGlvbiBHcCh0KXt2YXIgZT10LmNvcHk7cmV0dXJuIHQucGFkZGluZz10LnBhZGRpbmdPdXRlcixkZWxldGUgdC5wYWRkaW5nSW5uZXIsZGVsZXRlIHQucGFkZGluZ091dGVyLHQuY29weT1mdW5jdGlvbigpe3JldHVybiBHcChlKCkpfSx0fWZ1bmN0aW9uIHFwKCl7cmV0dXJuIEdwKEhwLmFwcGx5KG51bGwsYXJndW1lbnRzKS5wYWRkaW5nSW5uZXIoMSkpfXZhciBYcD1mdW5jdGlvbih0KXtyZXR1cm4rdH0sWnA9WzAsMV07ZnVuY3Rpb24gSnAodCl7cmV0dXJuIHR9ZnVuY3Rpb24gUXAodCxlKXtyZXR1cm4oZS09dD0rdCk/ZnVuY3Rpb24obil7cmV0dXJuKG4tdCkvZX06KG49aXNOYU4oZSk/TmFOOi41LGZ1bmN0aW9uKCl7cmV0dXJuIG59KTt2YXIgbn1mdW5jdGlvbiBLcCh0KXt2YXIgZSxuPXRbMF0scj10W3QubGVuZ3RoLTFdO3JldHVybiBuPnImJihlPW4sbj1yLHI9ZSksZnVuY3Rpb24odCl7cmV0dXJuIE1hdGgubWF4KG4sTWF0aC5taW4ocix0KSl9fWZ1bmN0aW9uIHRnKHQsZSxuKXt2YXIgcj10WzBdLGk9dFsxXSxhPWVbMF0sbz1lWzFdO3JldHVybiBpPHI/KHI9UXAoaSxyKSxhPW4obyxhKSk6KHI9UXAocixpKSxhPW4oYSxvKSksZnVuY3Rpb24odCl7cmV0dXJuIGEocih0KSl9fWZ1bmN0aW9uIGVnKHQsZSxuKXt2YXIgcj1NYXRoLm1pbih0Lmxlbmd0aCxlLmxlbmd0aCktMSxpPW5ldyBBcnJheShyKSxhPW5ldyBBcnJheShyKSxvPS0xO2Zvcih0W3JdPHRbMF0mJih0PXQuc2xpY2UoKS5yZXZlcnNlKCksZT1lLnNsaWNlKCkucmV2ZXJzZSgpKTsrK288cjspaVtvXT1RcCh0W29dLHRbbysxXSksYVtvXT1uKGVbb10sZVtvKzFdKTtyZXR1cm4gZnVuY3Rpb24oZSl7dmFyIG49Yyh0LGUsMSxyKS0xO3JldHVybiBhW25dKGlbbl0oZSkpfX1mdW5jdGlvbiBuZyh0LGUpe3JldHVybiBlLmRvbWFpbih0LmRvbWFpbigpKS5yYW5nZSh0LnJhbmdlKCkpLmludGVycG9sYXRlKHQuaW50ZXJwb2xhdGUoKSkuY2xhbXAodC5jbGFtcCgpKS51bmtub3duKHQudW5rbm93bigpKX1mdW5jdGlvbiByZygpe3ZhciB0LGUsbixyLGksYSxvPVpwLHM9WnAsYz1Bbix1PUpwO2Z1bmN0aW9uIGwoKXtyZXR1cm4gcj1NYXRoLm1pbihvLmxlbmd0aCxzLmxlbmd0aCk+Mj9lZzp0ZyxpPWE9bnVsbCxofWZ1bmN0aW9uIGgoZSl7cmV0dXJuIGlzTmFOKGU9K2UpP246KGl8fChpPXIoby5tYXAodCkscyxjKSkpKHQodShlKSkpfXJldHVybiBoLmludmVydD1mdW5jdGlvbihuKXtyZXR1cm4gdShlKChhfHwoYT1yKHMsby5tYXAodCksX24pKSkobikpKX0saC5kb21haW49ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89VXAuY2FsbCh0LFhwKSx1PT09SnB8fCh1PUtwKG8pKSxsKCkpOm8uc2xpY2UoKX0saC5yYW5nZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocz0kcC5jYWxsKHQpLGwoKSk6cy5zbGljZSgpfSxoLnJhbmdlUm91bmQ9ZnVuY3Rpb24odCl7cmV0dXJuIHM9JHAuY2FsbCh0KSxjPXVwLGwoKX0saC5jbGFtcD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odT10P0twKG8pOkpwLGgpOnUhPT1KcH0saC5pbnRlcnBvbGF0ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYz10LGwoKSk6Y30saC51bmtub3duPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPXQsaCk6bn0sZnVuY3Rpb24obixyKXtyZXR1cm4gdD1uLGU9cixsKCl9fWZ1bmN0aW9uIGlnKHQsZSl7cmV0dXJuIHJnKCkodCxlKX12YXIgYWc9ZnVuY3Rpb24odCxlLG4scil7dmFyIGksYT1BKHQsZSxuKTtzd2l0Y2goKHI9VnMobnVsbD09cj8iLGYiOnIpKS50eXBlKXtjYXNlInMiOnZhciBvPU1hdGgubWF4KE1hdGguYWJzKHQpLE1hdGguYWJzKGUpKTtyZXR1cm4gbnVsbCE9ci5wcmVjaXNpb258fGlzTmFOKGk9YWMoYSxvKSl8fChyLnByZWNpc2lvbj1pKSxacyhyLG8pO2Nhc2UiIjpjYXNlImUiOmNhc2UiZyI6Y2FzZSJwIjpjYXNlInIiOm51bGwhPXIucHJlY2lzaW9ufHxpc05hTihpPW9jKGEsTWF0aC5tYXgoTWF0aC5hYnModCksTWF0aC5hYnMoZSkpKSl8fChyLnByZWNpc2lvbj1pLSgiZSI9PT1yLnR5cGUpKTticmVhaztjYXNlImYiOmNhc2UiJSI6bnVsbCE9ci5wcmVjaXNpb258fGlzTmFOKGk9aWMoYSkpfHwoci5wcmVjaXNpb249aS0yKigiJSI9PT1yLnR5cGUpKX1yZXR1cm4gWHMocil9O2Z1bmN0aW9uIG9nKHQpe3ZhciBlPXQuZG9tYWluO3JldHVybiB0LnRpY2tzPWZ1bmN0aW9uKHQpe3ZhciBuPWUoKTtyZXR1cm4gQyhuWzBdLG5bbi5sZW5ndGgtMV0sbnVsbD09dD8xMDp0KX0sdC50aWNrRm9ybWF0PWZ1bmN0aW9uKHQsbil7dmFyIHI9ZSgpO3JldHVybiBhZyhyWzBdLHJbci5sZW5ndGgtMV0sbnVsbD09dD8xMDp0LG4pfSx0Lm5pY2U9ZnVuY3Rpb24obil7bnVsbD09biYmKG49MTApO3ZhciByLGk9ZSgpLGE9MCxvPWkubGVuZ3RoLTEscz1pW2FdLGM9aVtvXTtyZXR1cm4gYzxzJiYocj1zLHM9YyxjPXIscj1hLGE9byxvPXIpLChyPVMocyxjLG4pKT4wP3I9UyhzPU1hdGguZmxvb3Iocy9yKSpyLGM9TWF0aC5jZWlsKGMvcikqcixuKTpyPDAmJihyPVMocz1NYXRoLmNlaWwocypyKS9yLGM9TWF0aC5mbG9vcihjKnIpL3IsbikpLHI+MD8oaVthXT1NYXRoLmZsb29yKHMvcikqcixpW29dPU1hdGguY2VpbChjL3IpKnIsZShpKSk6cjwwJiYoaVthXT1NYXRoLmNlaWwocypyKS9yLGlbb109TWF0aC5mbG9vcihjKnIpL3IsZShpKSksdH0sdH1mdW5jdGlvbiBzZygpe3ZhciB0PWlnKEpwLEpwKTtyZXR1cm4gdC5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIG5nKHQsc2coKSl9LFJwLmFwcGx5KHQsYXJndW1lbnRzKSxvZyh0KX1mdW5jdGlvbiBjZyh0KXt2YXIgZTtmdW5jdGlvbiBuKHQpe3JldHVybiBpc05hTih0PSt0KT9lOnR9cmV0dXJuIG4uaW52ZXJ0PW4sbi5kb21haW49bi5yYW5nZT1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD1VcC5jYWxsKGUsWHApLG4pOnQuc2xpY2UoKX0sbi51bmtub3duPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPXQsbik6ZX0sbi5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIGNnKHQpLnVua25vd24oZSl9LHQ9YXJndW1lbnRzLmxlbmd0aD9VcC5jYWxsKHQsWHApOlswLDFdLG9nKG4pfXZhciB1Zz1mdW5jdGlvbih0LGUpe3ZhciBuLHI9MCxpPSh0PXQuc2xpY2UoKSkubGVuZ3RoLTEsYT10W3JdLG89dFtpXTtyZXR1cm4gbzxhJiYobj1yLHI9aSxpPW4sbj1hLGE9byxvPW4pLHRbcl09ZS5mbG9vcihhKSx0W2ldPWUuY2VpbChvKSx0fTtmdW5jdGlvbiBsZyh0KXtyZXR1cm4gTWF0aC5sb2codCl9ZnVuY3Rpb24gaGcodCl7cmV0dXJuIE1hdGguZXhwKHQpfWZ1bmN0aW9uIGZnKHQpe3JldHVybi1NYXRoLmxvZygtdCl9ZnVuY3Rpb24gZGcodCl7cmV0dXJuLU1hdGguZXhwKC10KX1mdW5jdGlvbiBwZyh0KXtyZXR1cm4gaXNGaW5pdGUodCk/KygiMWUiK3QpOnQ8MD8wOnR9ZnVuY3Rpb24gZ2codCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybi10KC1lKX19ZnVuY3Rpb24geWcodCl7dmFyIGUsbixyPXQobGcsaGcpLGk9ci5kb21haW4sYT0xMDtmdW5jdGlvbiBvKCl7cmV0dXJuIGU9ZnVuY3Rpb24odCl7cmV0dXJuIHQ9PT1NYXRoLkU/TWF0aC5sb2c6MTA9PT10JiZNYXRoLmxvZzEwfHwyPT09dCYmTWF0aC5sb2cyfHwodD1NYXRoLmxvZyh0KSxmdW5jdGlvbihlKXtyZXR1cm4gTWF0aC5sb2coZSkvdH0pfShhKSxuPWZ1bmN0aW9uKHQpe3JldHVybiAxMD09PXQ/cGc6dD09PU1hdGguRT9NYXRoLmV4cDpmdW5jdGlvbihlKXtyZXR1cm4gTWF0aC5wb3codCxlKX19KGEpLGkoKVswXTwwPyhlPWdnKGUpLG49Z2cobiksdChmZyxkZykpOnQobGcsaGcpLHJ9cmV0dXJuIHIuYmFzZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT0rdCxvKCkpOmF9LHIuZG9tYWluPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpKHQpLG8oKSk6aSgpfSxyLnRpY2tzPWZ1bmN0aW9uKHQpe3ZhciByLG89aSgpLHM9b1swXSxjPW9bby5sZW5ndGgtMV07KHI9YzxzKSYmKGY9cyxzPWMsYz1mKTt2YXIgdSxsLGgsZj1lKHMpLGQ9ZShjKSxwPW51bGw9PXQ/MTA6K3QsZz1bXTtpZighKGElMSkmJmQtZjxwKXtpZihmPU1hdGgucm91bmQoZiktMSxkPU1hdGgucm91bmQoZCkrMSxzPjApe2Zvcig7ZjxkOysrZilmb3IobD0xLHU9bihmKTtsPGE7KytsKWlmKCEoKGg9dSpsKTxzKSl7aWYoaD5jKWJyZWFrO2cucHVzaChoKX19ZWxzZSBmb3IoO2Y8ZDsrK2YpZm9yKGw9YS0xLHU9bihmKTtsPj0xOy0tbClpZighKChoPXUqbCk8cykpe2lmKGg+YylicmVhaztnLnB1c2goaCl9fWVsc2UgZz1DKGYsZCxNYXRoLm1pbihkLWYscCkpLm1hcChuKTtyZXR1cm4gcj9nLnJldmVyc2UoKTpnfSxyLnRpY2tGb3JtYXQ9ZnVuY3Rpb24odCxpKXtpZihudWxsPT1pJiYoaT0xMD09PWE/Ii4wZSI6IiwiKSwiZnVuY3Rpb24iIT10eXBlb2YgaSYmKGk9WHMoaSkpLHQ9PT0xLzApcmV0dXJuIGk7bnVsbD09dCYmKHQ9MTApO3ZhciBvPU1hdGgubWF4KDEsYSp0L3IudGlja3MoKS5sZW5ndGgpO3JldHVybiBmdW5jdGlvbih0KXt2YXIgcj10L24oTWF0aC5yb3VuZChlKHQpKSk7cmV0dXJuIHIqYTxhLS41JiYocio9YSkscjw9bz9pKHQpOiIifX0sci5uaWNlPWZ1bmN0aW9uKCl7cmV0dXJuIGkodWcoaSgpLHtmbG9vcjpmdW5jdGlvbih0KXtyZXR1cm4gbihNYXRoLmZsb29yKGUodCkpKX0sY2VpbDpmdW5jdGlvbih0KXtyZXR1cm4gbihNYXRoLmNlaWwoZSh0KSkpfX0pKX0scn1mdW5jdGlvbiB2Zygpe3ZhciB0PXlnKHJnKCkpLmRvbWFpbihbMSwxMF0pO3JldHVybiB0LmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gbmcodCx2ZygpKS5iYXNlKHQuYmFzZSgpKX0sUnAuYXBwbHkodCxhcmd1bWVudHMpLHR9ZnVuY3Rpb24gbWcodCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiBNYXRoLnNpZ24oZSkqTWF0aC5sb2cxcChNYXRoLmFicyhlL3QpKX19ZnVuY3Rpb24gYmcodCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiBNYXRoLnNpZ24oZSkqTWF0aC5leHBtMShNYXRoLmFicyhlKSkqdH19ZnVuY3Rpb24geGcodCl7dmFyIGU9MSxuPXQobWcoZSksYmcoZSkpO3JldHVybiBuLmNvbnN0YW50PWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3QobWcoZT0rbiksYmcoZSkpOmV9LG9nKG4pfWZ1bmN0aW9uIF9nKCl7dmFyIHQ9eGcocmcoKSk7cmV0dXJuIHQuY29weT1mdW5jdGlvbigpe3JldHVybiBuZyh0LF9nKCkpLmNvbnN0YW50KHQuY29uc3RhbnQoKSl9LFJwLmFwcGx5KHQsYXJndW1lbnRzKX1mdW5jdGlvbiBrZyh0KXtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIGU8MD8tTWF0aC5wb3coLWUsdCk6TWF0aC5wb3coZSx0KX19ZnVuY3Rpb24gd2codCl7cmV0dXJuIHQ8MD8tTWF0aC5zcXJ0KC10KTpNYXRoLnNxcnQodCl9ZnVuY3Rpb24gRWcodCl7cmV0dXJuIHQ8MD8tdCp0OnQqdH1mdW5jdGlvbiBUZyh0KXt2YXIgZT10KEpwLEpwKSxuPTE7ZnVuY3Rpb24gcigpe3JldHVybiAxPT09bj90KEpwLEpwKTouNT09PW4/dCh3ZyxFZyk6dChrZyhuKSxrZygxL24pKX1yZXR1cm4gZS5leHBvbmVudD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj0rdCxyKCkpOm59LG9nKGUpfWZ1bmN0aW9uIENnKCl7dmFyIHQ9VGcocmcoKSk7cmV0dXJuIHQuY29weT1mdW5jdGlvbigpe3JldHVybiBuZyh0LENnKCkpLmV4cG9uZW50KHQuZXhwb25lbnQoKSl9LFJwLmFwcGx5KHQsYXJndW1lbnRzKSx0fWZ1bmN0aW9uIFNnKCl7cmV0dXJuIENnLmFwcGx5KG51bGwsYXJndW1lbnRzKS5leHBvbmVudCguNSl9ZnVuY3Rpb24gQWcoKXt2YXIgdCxlPVtdLG49W10saT1bXTtmdW5jdGlvbiBhKCl7dmFyIHQ9MCxyPU1hdGgubWF4KDEsbi5sZW5ndGgpO2ZvcihpPW5ldyBBcnJheShyLTEpOysrdDxyOylpW3QtMV09RChlLHQvcik7cmV0dXJuIG99ZnVuY3Rpb24gbyhlKXtyZXR1cm4gaXNOYU4oZT0rZSk/dDpuW2MoaSxlKV19cmV0dXJuIG8uaW52ZXJ0RXh0ZW50PWZ1bmN0aW9uKHQpe3ZhciByPW4uaW5kZXhPZih0KTtyZXR1cm4gcjwwP1tOYU4sTmFOXTpbcj4wP2lbci0xXTplWzBdLHI8aS5sZW5ndGg/aVtyXTplW2UubGVuZ3RoLTFdXX0sby5kb21haW49ZnVuY3Rpb24odCl7aWYoIWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIGUuc2xpY2UoKTtlPVtdO2Zvcih2YXIgbixpPTAsbz10Lmxlbmd0aDtpPG87KytpKW51bGw9PShuPXRbaV0pfHxpc05hTihuPStuKXx8ZS5wdXNoKG4pO3JldHVybiBlLnNvcnQociksYSgpfSxvLnJhbmdlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPSRwLmNhbGwodCksYSgpKTpuLnNsaWNlKCl9LG8udW5rbm93bj1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD1lLG8pOnR9LG8ucXVhbnRpbGVzPWZ1bmN0aW9uKCl7cmV0dXJuIGkuc2xpY2UoKX0sby5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIEFnKCkuZG9tYWluKGUpLnJhbmdlKG4pLnVua25vd24odCl9LFJwLmFwcGx5KG8sYXJndW1lbnRzKX1mdW5jdGlvbiBNZygpe3ZhciB0LGU9MCxuPTEscj0xLGk9Wy41XSxhPVswLDFdO2Z1bmN0aW9uIG8oZSl7cmV0dXJuIGU8PWU/YVtjKGksZSwwLHIpXTp0fWZ1bmN0aW9uIHMoKXt2YXIgdD0tMTtmb3IoaT1uZXcgQXJyYXkocik7Kyt0PHI7KWlbdF09KCh0KzEpKm4tKHQtcikqZSkvKHIrMSk7cmV0dXJuIG99cmV0dXJuIG8uZG9tYWluPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPSt0WzBdLG49K3RbMV0scygpKTpbZSxuXX0sby5yYW5nZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj0oYT0kcC5jYWxsKHQpKS5sZW5ndGgtMSxzKCkpOmEuc2xpY2UoKX0sby5pbnZlcnRFeHRlbnQ9ZnVuY3Rpb24odCl7dmFyIG89YS5pbmRleE9mKHQpO3JldHVybiBvPDA/W05hTixOYU5dOm88MT9bZSxpWzBdXTpvPj1yP1tpW3ItMV0sbl06W2lbby0xXSxpW29dXX0sby51bmtub3duPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PWUsbyk6b30sby50aHJlc2hvbGRzPWZ1bmN0aW9uKCl7cmV0dXJuIGkuc2xpY2UoKX0sby5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIE1nKCkuZG9tYWluKFtlLG5dKS5yYW5nZShhKS51bmtub3duKHQpfSxScC5hcHBseShvZyhvKSxhcmd1bWVudHMpfWZ1bmN0aW9uIE9nKCl7dmFyIHQsZT1bLjVdLG49WzAsMV0scj0xO2Z1bmN0aW9uIGkoaSl7cmV0dXJuIGk8PWk/bltjKGUsaSwwLHIpXTp0fXJldHVybiBpLmRvbWFpbj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT0kcC5jYWxsKHQpLHI9TWF0aC5taW4oZS5sZW5ndGgsbi5sZW5ndGgtMSksaSk6ZS5zbGljZSgpfSxpLnJhbmdlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPSRwLmNhbGwodCkscj1NYXRoLm1pbihlLmxlbmd0aCxuLmxlbmd0aC0xKSxpKTpuLnNsaWNlKCl9LGkuaW52ZXJ0RXh0ZW50PWZ1bmN0aW9uKHQpe3ZhciByPW4uaW5kZXhPZih0KTtyZXR1cm5bZVtyLTFdLGVbcl1dfSxpLnVua25vd249ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9ZSxpKTp0fSxpLmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gT2coKS5kb21haW4oZSkucmFuZ2UobikudW5rbm93bih0KX0sUnAuYXBwbHkoaSxhcmd1bWVudHMpfXZhciBEZz1uZXcgRGF0ZSxOZz1uZXcgRGF0ZTtmdW5jdGlvbiBCZyh0LGUsbixyKXtmdW5jdGlvbiBpKGUpe3JldHVybiB0KGU9MD09PWFyZ3VtZW50cy5sZW5ndGg/bmV3IERhdGU6bmV3IERhdGUoK2UpKSxlfXJldHVybiBpLmZsb29yPWZ1bmN0aW9uKGUpe3JldHVybiB0KGU9bmV3IERhdGUoK2UpKSxlfSxpLmNlaWw9ZnVuY3Rpb24obil7cmV0dXJuIHQobj1uZXcgRGF0ZShuLTEpKSxlKG4sMSksdChuKSxufSxpLnJvdW5kPWZ1bmN0aW9uKHQpe3ZhciBlPWkodCksbj1pLmNlaWwodCk7cmV0dXJuIHQtZTxuLXQ/ZTpufSxpLm9mZnNldD1mdW5jdGlvbih0LG4pe3JldHVybiBlKHQ9bmV3IERhdGUoK3QpLG51bGw9PW4/MTpNYXRoLmZsb29yKG4pKSx0fSxpLnJhbmdlPWZ1bmN0aW9uKG4scixhKXt2YXIgbyxzPVtdO2lmKG49aS5jZWlsKG4pLGE9bnVsbD09YT8xOk1hdGguZmxvb3IoYSksIShuPHImJmE+MCkpcmV0dXJuIHM7ZG97cy5wdXNoKG89bmV3IERhdGUoK24pKSxlKG4sYSksdChuKX13aGlsZShvPG4mJm48cik7cmV0dXJuIHN9LGkuZmlsdGVyPWZ1bmN0aW9uKG4pe3JldHVybiBCZygoZnVuY3Rpb24oZSl7aWYoZT49ZSlmb3IoO3QoZSksIW4oZSk7KWUuc2V0VGltZShlLTEpfSksKGZ1bmN0aW9uKHQscil7aWYodD49dClpZihyPDApZm9yKDsrK3I8PTA7KWZvcig7ZSh0LC0xKSwhbih0KTspO2Vsc2UgZm9yKDstLXI+PTA7KWZvcig7ZSh0LDEpLCFuKHQpOyk7fSkpfSxuJiYoaS5jb3VudD1mdW5jdGlvbihlLHIpe3JldHVybiBEZy5zZXRUaW1lKCtlKSxOZy5zZXRUaW1lKCtyKSx0KERnKSx0KE5nKSxNYXRoLmZsb29yKG4oRGcsTmcpKX0saS5ldmVyeT1mdW5jdGlvbih0KXtyZXR1cm4gdD1NYXRoLmZsb29yKHQpLGlzRmluaXRlKHQpJiZ0PjA/dD4xP2kuZmlsdGVyKHI/ZnVuY3Rpb24oZSl7cmV0dXJuIHIoZSkldD09MH06ZnVuY3Rpb24oZSl7cmV0dXJuIGkuY291bnQoMCxlKSV0PT0wfSk6aTpudWxsfSksaX12YXIgTGc9QmcoKGZ1bmN0aW9uKHQpe3Quc2V0TW9udGgoMCwxKSx0LnNldEhvdXJzKDAsMCwwLDApfSksKGZ1bmN0aW9uKHQsZSl7dC5zZXRGdWxsWWVhcih0LmdldEZ1bGxZZWFyKCkrZSl9KSwoZnVuY3Rpb24odCxlKXtyZXR1cm4gZS5nZXRGdWxsWWVhcigpLXQuZ2V0RnVsbFllYXIoKX0pLChmdW5jdGlvbih0KXtyZXR1cm4gdC5nZXRGdWxsWWVhcigpfSkpO0xnLmV2ZXJ5PWZ1bmN0aW9uKHQpe3JldHVybiBpc0Zpbml0ZSh0PU1hdGguZmxvb3IodCkpJiZ0PjA/QmcoKGZ1bmN0aW9uKGUpe2Uuc2V0RnVsbFllYXIoTWF0aC5mbG9vcihlLmdldEZ1bGxZZWFyKCkvdCkqdCksZS5zZXRNb250aCgwLDEpLGUuc2V0SG91cnMoMCwwLDAsMCl9KSwoZnVuY3Rpb24oZSxuKXtlLnNldEZ1bGxZZWFyKGUuZ2V0RnVsbFllYXIoKStuKnQpfSkpOm51bGx9O3ZhciBGZz1MZyxQZz1MZy5yYW5nZSxJZz1CZygoZnVuY3Rpb24odCl7dC5zZXREYXRlKDEpLHQuc2V0SG91cnMoMCwwLDAsMCl9KSwoZnVuY3Rpb24odCxlKXt0LnNldE1vbnRoKHQuZ2V0TW9udGgoKStlKX0pLChmdW5jdGlvbih0LGUpe3JldHVybiBlLmdldE1vbnRoKCktdC5nZXRNb250aCgpKzEyKihlLmdldEZ1bGxZZWFyKCktdC5nZXRGdWxsWWVhcigpKX0pLChmdW5jdGlvbih0KXtyZXR1cm4gdC5nZXRNb250aCgpfSkpLGpnPUlnLFJnPUlnLnJhbmdlO2Z1bmN0aW9uIFlnKHQpe3JldHVybiBCZygoZnVuY3Rpb24oZSl7ZS5zZXREYXRlKGUuZ2V0RGF0ZSgpLShlLmdldERheSgpKzctdCklNyksZS5zZXRIb3VycygwLDAsMCwwKX0pLChmdW5jdGlvbih0LGUpe3Quc2V0RGF0ZSh0LmdldERhdGUoKSs3KmUpfSksKGZ1bmN0aW9uKHQsZSl7cmV0dXJuKGUtdC02ZTQqKGUuZ2V0VGltZXpvbmVPZmZzZXQoKS10LmdldFRpbWV6b25lT2Zmc2V0KCkpKS82MDQ4ZTV9KSl9dmFyIHpnPVlnKDApLFVnPVlnKDEpLCRnPVlnKDIpLFdnPVlnKDMpLFZnPVlnKDQpLEhnPVlnKDUpLEdnPVlnKDYpLHFnPXpnLnJhbmdlLFhnPVVnLnJhbmdlLFpnPSRnLnJhbmdlLEpnPVdnLnJhbmdlLFFnPVZnLnJhbmdlLEtnPUhnLnJhbmdlLHR5PUdnLnJhbmdlLGV5PUJnKChmdW5jdGlvbih0KXt0LnNldEhvdXJzKDAsMCwwLDApfSksKGZ1bmN0aW9uKHQsZSl7dC5zZXREYXRlKHQuZ2V0RGF0ZSgpK2UpfSksKGZ1bmN0aW9uKHQsZSl7cmV0dXJuKGUtdC02ZTQqKGUuZ2V0VGltZXpvbmVPZmZzZXQoKS10LmdldFRpbWV6b25lT2Zmc2V0KCkpKS84NjRlNX0pLChmdW5jdGlvbih0KXtyZXR1cm4gdC5nZXREYXRlKCktMX0pKSxueT1leSxyeT1leS5yYW5nZSxpeT1CZygoZnVuY3Rpb24odCl7dC5zZXRUaW1lKHQtdC5nZXRNaWxsaXNlY29uZHMoKS0xZTMqdC5nZXRTZWNvbmRzKCktNmU0KnQuZ2V0TWludXRlcygpKX0pLChmdW5jdGlvbih0LGUpe3Quc2V0VGltZSgrdCszNmU1KmUpfSksKGZ1bmN0aW9uKHQsZSl7cmV0dXJuKGUtdCkvMzZlNX0pLChmdW5jdGlvbih0KXtyZXR1cm4gdC5nZXRIb3VycygpfSkpLGF5PWl5LG95PWl5LnJhbmdlLHN5PUJnKChmdW5jdGlvbih0KXt0LnNldFRpbWUodC10LmdldE1pbGxpc2Vjb25kcygpLTFlMyp0LmdldFNlY29uZHMoKSl9KSwoZnVuY3Rpb24odCxlKXt0LnNldFRpbWUoK3QrNmU0KmUpfSksKGZ1bmN0aW9uKHQsZSl7cmV0dXJuKGUtdCkvNmU0fSksKGZ1bmN0aW9uKHQpe3JldHVybiB0LmdldE1pbnV0ZXMoKX0pKSxjeT1zeSx1eT1zeS5yYW5nZSxseT1CZygoZnVuY3Rpb24odCl7dC5zZXRUaW1lKHQtdC5nZXRNaWxsaXNlY29uZHMoKSl9KSwoZnVuY3Rpb24odCxlKXt0LnNldFRpbWUoK3QrMWUzKmUpfSksKGZ1bmN0aW9uKHQsZSl7cmV0dXJuKGUtdCkvMWUzfSksKGZ1bmN0aW9uKHQpe3JldHVybiB0LmdldFVUQ1NlY29uZHMoKX0pKSxoeT1seSxmeT1seS5yYW5nZSxkeT1CZygoZnVuY3Rpb24oKXt9KSwoZnVuY3Rpb24odCxlKXt0LnNldFRpbWUoK3QrZSl9KSwoZnVuY3Rpb24odCxlKXtyZXR1cm4gZS10fSkpO2R5LmV2ZXJ5PWZ1bmN0aW9uKHQpe3JldHVybiB0PU1hdGguZmxvb3IodCksaXNGaW5pdGUodCkmJnQ+MD90PjE/QmcoKGZ1bmN0aW9uKGUpe2Uuc2V0VGltZShNYXRoLmZsb29yKGUvdCkqdCl9KSwoZnVuY3Rpb24oZSxuKXtlLnNldFRpbWUoK2Urbip0KX0pLChmdW5jdGlvbihlLG4pe3JldHVybihuLWUpL3R9KSk6ZHk6bnVsbH07dmFyIHB5PWR5LGd5PWR5LnJhbmdlO2Z1bmN0aW9uIHl5KHQpe3JldHVybiBCZygoZnVuY3Rpb24oZSl7ZS5zZXRVVENEYXRlKGUuZ2V0VVRDRGF0ZSgpLShlLmdldFVUQ0RheSgpKzctdCklNyksZS5zZXRVVENIb3VycygwLDAsMCwwKX0pLChmdW5jdGlvbih0LGUpe3Quc2V0VVRDRGF0ZSh0LmdldFVUQ0RhdGUoKSs3KmUpfSksKGZ1bmN0aW9uKHQsZSl7cmV0dXJuKGUtdCkvNjA0OGU1fSkpfXZhciB2eT15eSgwKSxteT15eSgxKSxieT15eSgyKSx4eT15eSgzKSxfeT15eSg0KSxreT15eSg1KSx3eT15eSg2KSxFeT12eS5yYW5nZSxUeT1teS5yYW5nZSxDeT1ieS5yYW5nZSxTeT14eS5yYW5nZSxBeT1feS5yYW5nZSxNeT1reS5yYW5nZSxPeT13eS5yYW5nZSxEeT1CZygoZnVuY3Rpb24odCl7dC5zZXRVVENIb3VycygwLDAsMCwwKX0pLChmdW5jdGlvbih0LGUpe3Quc2V0VVRDRGF0ZSh0LmdldFVUQ0RhdGUoKStlKX0pLChmdW5jdGlvbih0LGUpe3JldHVybihlLXQpLzg2NGU1fSksKGZ1bmN0aW9uKHQpe3JldHVybiB0LmdldFVUQ0RhdGUoKS0xfSkpLE55PUR5LEJ5PUR5LnJhbmdlLEx5PUJnKChmdW5jdGlvbih0KXt0LnNldFVUQ01vbnRoKDAsMSksdC5zZXRVVENIb3VycygwLDAsMCwwKX0pLChmdW5jdGlvbih0LGUpe3Quc2V0VVRDRnVsbFllYXIodC5nZXRVVENGdWxsWWVhcigpK2UpfSksKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUuZ2V0VVRDRnVsbFllYXIoKS10LmdldFVUQ0Z1bGxZZWFyKCl9KSwoZnVuY3Rpb24odCl7cmV0dXJuIHQuZ2V0VVRDRnVsbFllYXIoKX0pKTtMeS5ldmVyeT1mdW5jdGlvbih0KXtyZXR1cm4gaXNGaW5pdGUodD1NYXRoLmZsb29yKHQpKSYmdD4wP0JnKChmdW5jdGlvbihlKXtlLnNldFVUQ0Z1bGxZZWFyKE1hdGguZmxvb3IoZS5nZXRVVENGdWxsWWVhcigpL3QpKnQpLGUuc2V0VVRDTW9udGgoMCwxKSxlLnNldFVUQ0hvdXJzKDAsMCwwLDApfSksKGZ1bmN0aW9uKGUsbil7ZS5zZXRVVENGdWxsWWVhcihlLmdldFVUQ0Z1bGxZZWFyKCkrbip0KX0pKTpudWxsfTt2YXIgRnk9THksUHk9THkucmFuZ2U7ZnVuY3Rpb24gSXkodCl7aWYoMDw9dC55JiZ0Lnk8MTAwKXt2YXIgZT1uZXcgRGF0ZSgtMSx0Lm0sdC5kLHQuSCx0Lk0sdC5TLHQuTCk7cmV0dXJuIGUuc2V0RnVsbFllYXIodC55KSxlfXJldHVybiBuZXcgRGF0ZSh0LnksdC5tLHQuZCx0LkgsdC5NLHQuUyx0LkwpfWZ1bmN0aW9uIGp5KHQpe2lmKDA8PXQueSYmdC55PDEwMCl7dmFyIGU9bmV3IERhdGUoRGF0ZS5VVEMoLTEsdC5tLHQuZCx0LkgsdC5NLHQuUyx0LkwpKTtyZXR1cm4gZS5zZXRVVENGdWxsWWVhcih0LnkpLGV9cmV0dXJuIG5ldyBEYXRlKERhdGUuVVRDKHQueSx0Lm0sdC5kLHQuSCx0Lk0sdC5TLHQuTCkpfWZ1bmN0aW9uIFJ5KHQsZSxuKXtyZXR1cm57eTp0LG06ZSxkOm4sSDowLE06MCxTOjAsTDowfX1mdW5jdGlvbiBZeSh0KXt2YXIgZT10LmRhdGVUaW1lLG49dC5kYXRlLHI9dC50aW1lLGk9dC5wZXJpb2RzLGE9dC5kYXlzLG89dC5zaG9ydERheXMscz10Lm1vbnRocyxjPXQuc2hvcnRNb250aHMsdT1ReShpKSxsPUt5KGkpLGg9UXkoYSksZj1LeShhKSxkPVF5KG8pLHA9S3kobyksZz1ReShzKSx5PUt5KHMpLHY9UXkoYyksbT1LeShjKSxiPXthOmZ1bmN0aW9uKHQpe3JldHVybiBvW3QuZ2V0RGF5KCldfSxBOmZ1bmN0aW9uKHQpe3JldHVybiBhW3QuZ2V0RGF5KCldfSxiOmZ1bmN0aW9uKHQpe3JldHVybiBjW3QuZ2V0TW9udGgoKV19LEI6ZnVuY3Rpb24odCl7cmV0dXJuIHNbdC5nZXRNb250aCgpXX0sYzpudWxsLGQ6eHYsZTp4dixmOlR2LEg6X3YsSTprdixqOnd2LEw6RXYsbTpDdixNOlN2LHA6ZnVuY3Rpb24odCl7cmV0dXJuIGlbKyh0LmdldEhvdXJzKCk+PTEyKV19LHE6ZnVuY3Rpb24odCl7cmV0dXJuIDErfn4odC5nZXRNb250aCgpLzMpfSxROmVtLHM6bm0sUzpBdix1Ok12LFU6T3YsVjpEdix3Ok52LFc6QnYseDpudWxsLFg6bnVsbCx5Okx2LFk6RnYsWjpQdiwiJSI6dG19LHg9e2E6ZnVuY3Rpb24odCl7cmV0dXJuIG9bdC5nZXRVVENEYXkoKV19LEE6ZnVuY3Rpb24odCl7cmV0dXJuIGFbdC5nZXRVVENEYXkoKV19LGI6ZnVuY3Rpb24odCl7cmV0dXJuIGNbdC5nZXRVVENNb250aCgpXX0sQjpmdW5jdGlvbih0KXtyZXR1cm4gc1t0LmdldFVUQ01vbnRoKCldfSxjOm51bGwsZDpJdixlOkl2LGY6VXYsSDpqdixJOlJ2LGo6WXYsTDp6dixtOiR2LE06V3YscDpmdW5jdGlvbih0KXtyZXR1cm4gaVsrKHQuZ2V0VVRDSG91cnMoKT49MTIpXX0scTpmdW5jdGlvbih0KXtyZXR1cm4gMSt+fih0LmdldFVUQ01vbnRoKCkvMyl9LFE6ZW0sczpubSxTOlZ2LHU6SHYsVTpHdixWOnF2LHc6WHYsVzpadix4Om51bGwsWDpudWxsLHk6SnYsWTpRdixaOkt2LCIlIjp0bX0sXz17YTpmdW5jdGlvbih0LGUsbil7dmFyIHI9ZC5leGVjKGUuc2xpY2UobikpO3JldHVybiByPyh0Lnc9cFtyWzBdLnRvTG93ZXJDYXNlKCldLG4rclswXS5sZW5ndGgpOi0xfSxBOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1oLmV4ZWMoZS5zbGljZShuKSk7cmV0dXJuIHI/KHQudz1mW3JbMF0udG9Mb3dlckNhc2UoKV0sbityWzBdLmxlbmd0aCk6LTF9LGI6ZnVuY3Rpb24odCxlLG4pe3ZhciByPXYuZXhlYyhlLnNsaWNlKG4pKTtyZXR1cm4gcj8odC5tPW1bclswXS50b0xvd2VyQ2FzZSgpXSxuK3JbMF0ubGVuZ3RoKTotMX0sQjpmdW5jdGlvbih0LGUsbil7dmFyIHI9Zy5leGVjKGUuc2xpY2UobikpO3JldHVybiByPyh0Lm09eVtyWzBdLnRvTG93ZXJDYXNlKCldLG4rclswXS5sZW5ndGgpOi0xfSxjOmZ1bmN0aW9uKHQsbixyKXtyZXR1cm4gRSh0LGUsbixyKX0sZDpsdixlOmx2LGY6eXYsSDpmdixJOmZ2LGo6aHYsTDpndixtOnV2LE06ZHYscDpmdW5jdGlvbih0LGUsbil7dmFyIHI9dS5leGVjKGUuc2xpY2UobikpO3JldHVybiByPyh0LnA9bFtyWzBdLnRvTG93ZXJDYXNlKCldLG4rclswXS5sZW5ndGgpOi0xfSxxOmN2LFE6bXYsczpidixTOnB2LHU6ZXYsVTpudixWOnJ2LHc6dHYsVzppdix4OmZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gRSh0LG4sZSxyKX0sWDpmdW5jdGlvbih0LGUsbil7cmV0dXJuIEUodCxyLGUsbil9LHk6b3YsWTphdixaOnN2LCIlIjp2dn07ZnVuY3Rpb24gayh0LGUpe3JldHVybiBmdW5jdGlvbihuKXt2YXIgcixpLGEsbz1bXSxzPS0xLGM9MCx1PXQubGVuZ3RoO2ZvcihuIGluc3RhbmNlb2YgRGF0ZXx8KG49bmV3IERhdGUoK24pKTsrK3M8dTspMzc9PT10LmNoYXJDb2RlQXQocykmJihvLnB1c2godC5zbGljZShjLHMpKSxudWxsIT0oaT1IeVtyPXQuY2hhckF0KCsrcyldKT9yPXQuY2hhckF0KCsrcyk6aT0iZSI9PT1yPyIgIjoiMCIsKGE9ZVtyXSkmJihyPWEobixpKSksby5wdXNoKHIpLGM9cysxKTtyZXR1cm4gby5wdXNoKHQuc2xpY2UoYyxzKSksby5qb2luKCIiKX19ZnVuY3Rpb24gdyh0LGUpe3JldHVybiBmdW5jdGlvbihuKXt2YXIgcixpLGE9UnkoMTkwMCx2b2lkIDAsMSk7aWYoRShhLHQsbis9IiIsMCkhPW4ubGVuZ3RoKXJldHVybiBudWxsO2lmKCJRImluIGEpcmV0dXJuIG5ldyBEYXRlKGEuUSk7aWYoInMiaW4gYSlyZXR1cm4gbmV3IERhdGUoMWUzKmEucysoIkwiaW4gYT9hLkw6MCkpO2lmKCFlfHwiWiJpbiBhfHwoYS5aPTApLCJwImluIGEmJihhLkg9YS5IJTEyKzEyKmEucCksdm9pZCAwPT09YS5tJiYoYS5tPSJxImluIGE/YS5xOjApLCJWImluIGEpe2lmKGEuVjwxfHxhLlY+NTMpcmV0dXJuIG51bGw7InciaW4gYXx8KGEudz0xKSwiWiJpbiBhPyhpPShyPWp5KFJ5KGEueSwwLDEpKSkuZ2V0VVRDRGF5KCkscj1pPjR8fDA9PT1pP215LmNlaWwocik6bXkocikscj1OeS5vZmZzZXQociw3KihhLlYtMSkpLGEueT1yLmdldFVUQ0Z1bGxZZWFyKCksYS5tPXIuZ2V0VVRDTW9udGgoKSxhLmQ9ci5nZXRVVENEYXRlKCkrKGEudys2KSU3KTooaT0ocj1JeShSeShhLnksMCwxKSkpLmdldERheSgpLHI9aT40fHwwPT09aT9VZy5jZWlsKHIpOlVnKHIpLHI9bnkub2Zmc2V0KHIsNyooYS5WLTEpKSxhLnk9ci5nZXRGdWxsWWVhcigpLGEubT1yLmdldE1vbnRoKCksYS5kPXIuZ2V0RGF0ZSgpKyhhLncrNiklNyl9ZWxzZSgiVyJpbiBhfHwiVSJpbiBhKSYmKCJ3ImluIGF8fChhLnc9InUiaW4gYT9hLnUlNzoiVyJpbiBhPzE6MCksaT0iWiJpbiBhP2p5KFJ5KGEueSwwLDEpKS5nZXRVVENEYXkoKTpJeShSeShhLnksMCwxKSkuZ2V0RGF5KCksYS5tPTAsYS5kPSJXImluIGE/KGEudys2KSU3KzcqYS5XLShpKzUpJTc6YS53KzcqYS5VLShpKzYpJTcpO3JldHVybiJaImluIGE/KGEuSCs9YS5aLzEwMHwwLGEuTSs9YS5aJTEwMCxqeShhKSk6SXkoYSl9fWZ1bmN0aW9uIEUodCxlLG4scil7Zm9yKHZhciBpLGEsbz0wLHM9ZS5sZW5ndGgsYz1uLmxlbmd0aDtvPHM7KXtpZihyPj1jKXJldHVybi0xO2lmKDM3PT09KGk9ZS5jaGFyQ29kZUF0KG8rKykpKXtpZihpPWUuY2hhckF0KG8rKyksIShhPV9baSBpbiBIeT9lLmNoYXJBdChvKyspOmldKXx8KHI9YSh0LG4scikpPDApcmV0dXJuLTF9ZWxzZSBpZihpIT1uLmNoYXJDb2RlQXQocisrKSlyZXR1cm4tMX1yZXR1cm4gcn1yZXR1cm4oYi54PWsobixiKSxiLlg9ayhyLGIpLGIuYz1rKGUsYikseC54PWsobix4KSx4Llg9ayhyLHgpLHguYz1rKGUseCkse2Zvcm1hdDpmdW5jdGlvbih0KXt2YXIgZT1rKHQrPSIiLGIpO3JldHVybiBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHR9LGV9LHBhcnNlOmZ1bmN0aW9uKHQpe3ZhciBlPXcodCs9IiIsITEpO3JldHVybiBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHR9LGV9LHV0Y0Zvcm1hdDpmdW5jdGlvbih0KXt2YXIgZT1rKHQrPSIiLHgpO3JldHVybiBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHR9LGV9LHV0Y1BhcnNlOmZ1bmN0aW9uKHQpe3ZhciBlPXcodCs9IiIsITApO3JldHVybiBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHR9LGV9fSl9dmFyIHp5LFV5LCR5LFd5LFZ5LEh5PXsiLSI6IiIsXzoiICIsMDoiMCJ9LEd5PS9eXHMqXGQrLyxxeT0vXiUvLFh5PS9bXFxeJCorP3xbXF0oKS57fV0vZztmdW5jdGlvbiBaeSh0LGUsbil7dmFyIHI9dDwwPyItIjoiIixpPShyPy10OnQpKyIiLGE9aS5sZW5ndGg7cmV0dXJuIHIrKGE8bj9uZXcgQXJyYXkobi1hKzEpLmpvaW4oZSkraTppKX1mdW5jdGlvbiBKeSh0KXtyZXR1cm4gdC5yZXBsYWNlKFh5LCJcXCQmIil9ZnVuY3Rpb24gUXkodCl7cmV0dXJuIG5ldyBSZWdFeHAoIl4oPzoiK3QubWFwKEp5KS5qb2luKCJ8IikrIikiLCJpIil9ZnVuY3Rpb24gS3kodCl7Zm9yKHZhciBlPXt9LG49LTEscj10Lmxlbmd0aDsrK248cjspZVt0W25dLnRvTG93ZXJDYXNlKCldPW47cmV0dXJuIGV9ZnVuY3Rpb24gdHYodCxlLG4pe3ZhciByPUd5LmV4ZWMoZS5zbGljZShuLG4rMSkpO3JldHVybiByPyh0Lnc9K3JbMF0sbityWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gZXYodCxlLG4pe3ZhciByPUd5LmV4ZWMoZS5zbGljZShuLG4rMSkpO3JldHVybiByPyh0LnU9K3JbMF0sbityWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gbnYodCxlLG4pe3ZhciByPUd5LmV4ZWMoZS5zbGljZShuLG4rMikpO3JldHVybiByPyh0LlU9K3JbMF0sbityWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gcnYodCxlLG4pe3ZhciByPUd5LmV4ZWMoZS5zbGljZShuLG4rMikpO3JldHVybiByPyh0LlY9K3JbMF0sbityWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gaXYodCxlLG4pe3ZhciByPUd5LmV4ZWMoZS5zbGljZShuLG4rMikpO3JldHVybiByPyh0Llc9K3JbMF0sbityWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gYXYodCxlLG4pe3ZhciByPUd5LmV4ZWMoZS5zbGljZShuLG4rNCkpO3JldHVybiByPyh0Lnk9K3JbMF0sbityWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gb3YodCxlLG4pe3ZhciByPUd5LmV4ZWMoZS5zbGljZShuLG4rMikpO3JldHVybiByPyh0Lnk9K3JbMF0rKCtyWzBdPjY4PzE5MDA6MmUzKSxuK3JbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBzdih0LGUsbil7dmFyIHI9L14oWil8KFsrLV1cZFxkKSg/Ojo/KFxkXGQpKT8vLmV4ZWMoZS5zbGljZShuLG4rNikpO3JldHVybiByPyh0Llo9clsxXT8wOi0oclsyXSsoclszXXx8IjAwIikpLG4rclswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIGN2KHQsZSxuKXt2YXIgcj1HeS5leGVjKGUuc2xpY2UobixuKzEpKTtyZXR1cm4gcj8odC5xPTMqclswXS0zLG4rclswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIHV2KHQsZSxuKXt2YXIgcj1HeS5leGVjKGUuc2xpY2UobixuKzIpKTtyZXR1cm4gcj8odC5tPXJbMF0tMSxuK3JbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBsdih0LGUsbil7dmFyIHI9R3kuZXhlYyhlLnNsaWNlKG4sbisyKSk7cmV0dXJuIHI/KHQuZD0rclswXSxuK3JbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBodih0LGUsbil7dmFyIHI9R3kuZXhlYyhlLnNsaWNlKG4sbiszKSk7cmV0dXJuIHI/KHQubT0wLHQuZD0rclswXSxuK3JbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBmdih0LGUsbil7dmFyIHI9R3kuZXhlYyhlLnNsaWNlKG4sbisyKSk7cmV0dXJuIHI/KHQuSD0rclswXSxuK3JbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBkdih0LGUsbil7dmFyIHI9R3kuZXhlYyhlLnNsaWNlKG4sbisyKSk7cmV0dXJuIHI/KHQuTT0rclswXSxuK3JbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBwdih0LGUsbil7dmFyIHI9R3kuZXhlYyhlLnNsaWNlKG4sbisyKSk7cmV0dXJuIHI/KHQuUz0rclswXSxuK3JbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBndih0LGUsbil7dmFyIHI9R3kuZXhlYyhlLnNsaWNlKG4sbiszKSk7cmV0dXJuIHI/KHQuTD0rclswXSxuK3JbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiB5dih0LGUsbil7dmFyIHI9R3kuZXhlYyhlLnNsaWNlKG4sbis2KSk7cmV0dXJuIHI/KHQuTD1NYXRoLmZsb29yKHJbMF0vMWUzKSxuK3JbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiB2dih0LGUsbil7dmFyIHI9cXkuZXhlYyhlLnNsaWNlKG4sbisxKSk7cmV0dXJuIHI/bityWzBdLmxlbmd0aDotMX1mdW5jdGlvbiBtdih0LGUsbil7dmFyIHI9R3kuZXhlYyhlLnNsaWNlKG4pKTtyZXR1cm4gcj8odC5RPStyWzBdLG4rclswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIGJ2KHQsZSxuKXt2YXIgcj1HeS5leGVjKGUuc2xpY2UobikpO3JldHVybiByPyh0LnM9K3JbMF0sbityWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24geHYodCxlKXtyZXR1cm4gWnkodC5nZXREYXRlKCksZSwyKX1mdW5jdGlvbiBfdih0LGUpe3JldHVybiBaeSh0LmdldEhvdXJzKCksZSwyKX1mdW5jdGlvbiBrdih0LGUpe3JldHVybiBaeSh0LmdldEhvdXJzKCklMTJ8fDEyLGUsMil9ZnVuY3Rpb24gd3YodCxlKXtyZXR1cm4gWnkoMStueS5jb3VudChGZyh0KSx0KSxlLDMpfWZ1bmN0aW9uIEV2KHQsZSl7cmV0dXJuIFp5KHQuZ2V0TWlsbGlzZWNvbmRzKCksZSwzKX1mdW5jdGlvbiBUdih0LGUpe3JldHVybiBFdih0LGUpKyIwMDAifWZ1bmN0aW9uIEN2KHQsZSl7cmV0dXJuIFp5KHQuZ2V0TW9udGgoKSsxLGUsMil9ZnVuY3Rpb24gU3YodCxlKXtyZXR1cm4gWnkodC5nZXRNaW51dGVzKCksZSwyKX1mdW5jdGlvbiBBdih0LGUpe3JldHVybiBaeSh0LmdldFNlY29uZHMoKSxlLDIpfWZ1bmN0aW9uIE12KHQpe3ZhciBlPXQuZ2V0RGF5KCk7cmV0dXJuIDA9PT1lPzc6ZX1mdW5jdGlvbiBPdih0LGUpe3JldHVybiBaeSh6Zy5jb3VudChGZyh0KS0xLHQpLGUsMil9ZnVuY3Rpb24gRHYodCxlKXt2YXIgbj10LmdldERheSgpO3JldHVybiB0PW4+PTR8fDA9PT1uP1ZnKHQpOlZnLmNlaWwodCksWnkoVmcuY291bnQoRmcodCksdCkrKDQ9PT1GZyh0KS5nZXREYXkoKSksZSwyKX1mdW5jdGlvbiBOdih0KXtyZXR1cm4gdC5nZXREYXkoKX1mdW5jdGlvbiBCdih0LGUpe3JldHVybiBaeShVZy5jb3VudChGZyh0KS0xLHQpLGUsMil9ZnVuY3Rpb24gTHYodCxlKXtyZXR1cm4gWnkodC5nZXRGdWxsWWVhcigpJTEwMCxlLDIpfWZ1bmN0aW9uIEZ2KHQsZSl7cmV0dXJuIFp5KHQuZ2V0RnVsbFllYXIoKSUxZTQsZSw0KX1mdW5jdGlvbiBQdih0KXt2YXIgZT10LmdldFRpbWV6b25lT2Zmc2V0KCk7cmV0dXJuKGU+MD8iLSI6KGUqPS0xLCIrIikpK1p5KGUvNjB8MCwiMCIsMikrWnkoZSU2MCwiMCIsMil9ZnVuY3Rpb24gSXYodCxlKXtyZXR1cm4gWnkodC5nZXRVVENEYXRlKCksZSwyKX1mdW5jdGlvbiBqdih0LGUpe3JldHVybiBaeSh0LmdldFVUQ0hvdXJzKCksZSwyKX1mdW5jdGlvbiBSdih0LGUpe3JldHVybiBaeSh0LmdldFVUQ0hvdXJzKCklMTJ8fDEyLGUsMil9ZnVuY3Rpb24gWXYodCxlKXtyZXR1cm4gWnkoMStOeS5jb3VudChGeSh0KSx0KSxlLDMpfWZ1bmN0aW9uIHp2KHQsZSl7cmV0dXJuIFp5KHQuZ2V0VVRDTWlsbGlzZWNvbmRzKCksZSwzKX1mdW5jdGlvbiBVdih0LGUpe3JldHVybiB6dih0LGUpKyIwMDAifWZ1bmN0aW9uICR2KHQsZSl7cmV0dXJuIFp5KHQuZ2V0VVRDTW9udGgoKSsxLGUsMil9ZnVuY3Rpb24gV3YodCxlKXtyZXR1cm4gWnkodC5nZXRVVENNaW51dGVzKCksZSwyKX1mdW5jdGlvbiBWdih0LGUpe3JldHVybiBaeSh0LmdldFVUQ1NlY29uZHMoKSxlLDIpfWZ1bmN0aW9uIEh2KHQpe3ZhciBlPXQuZ2V0VVRDRGF5KCk7cmV0dXJuIDA9PT1lPzc6ZX1mdW5jdGlvbiBHdih0LGUpe3JldHVybiBaeSh2eS5jb3VudChGeSh0KS0xLHQpLGUsMil9ZnVuY3Rpb24gcXYodCxlKXt2YXIgbj10LmdldFVUQ0RheSgpO3JldHVybiB0PW4+PTR8fDA9PT1uP195KHQpOl95LmNlaWwodCksWnkoX3kuY291bnQoRnkodCksdCkrKDQ9PT1GeSh0KS5nZXRVVENEYXkoKSksZSwyKX1mdW5jdGlvbiBYdih0KXtyZXR1cm4gdC5nZXRVVENEYXkoKX1mdW5jdGlvbiBadih0LGUpe3JldHVybiBaeShteS5jb3VudChGeSh0KS0xLHQpLGUsMil9ZnVuY3Rpb24gSnYodCxlKXtyZXR1cm4gWnkodC5nZXRVVENGdWxsWWVhcigpJTEwMCxlLDIpfWZ1bmN0aW9uIFF2KHQsZSl7cmV0dXJuIFp5KHQuZ2V0VVRDRnVsbFllYXIoKSUxZTQsZSw0KX1mdW5jdGlvbiBLdigpe3JldHVybiIrMDAwMCJ9ZnVuY3Rpb24gdG0oKXtyZXR1cm4iJSJ9ZnVuY3Rpb24gZW0odCl7cmV0dXJuK3R9ZnVuY3Rpb24gbm0odCl7cmV0dXJuIE1hdGguZmxvb3IoK3QvMWUzKX1mdW5jdGlvbiBybSh0KXtyZXR1cm4genk9WXkodCksVXk9enkuZm9ybWF0LCR5PXp5LnBhcnNlLFd5PXp5LnV0Y0Zvcm1hdCxWeT16eS51dGNQYXJzZSx6eX1ybSh7ZGF0ZVRpbWU6IiV4LCAlWCIsZGF0ZToiJS1tLyUtZC8lWSIsdGltZToiJS1JOiVNOiVTICVwIixwZXJpb2RzOlsiQU0iLCJQTSJdLGRheXM6WyJTdW5kYXkiLCJNb25kYXkiLCJUdWVzZGF5IiwiV2VkbmVzZGF5IiwiVGh1cnNkYXkiLCJGcmlkYXkiLCJTYXR1cmRheSJdLHNob3J0RGF5czpbIlN1biIsIk1vbiIsIlR1ZSIsIldlZCIsIlRodSIsIkZyaSIsIlNhdCJdLG1vbnRoczpbIkphbnVhcnkiLCJGZWJydWFyeSIsIk1hcmNoIiwiQXByaWwiLCJNYXkiLCJKdW5lIiwiSnVseSIsIkF1Z3VzdCIsIlNlcHRlbWJlciIsIk9jdG9iZXIiLCJOb3ZlbWJlciIsIkRlY2VtYmVyIl0sc2hvcnRNb250aHM6WyJKYW4iLCJGZWIiLCJNYXIiLCJBcHIiLCJNYXkiLCJKdW4iLCJKdWwiLCJBdWciLCJTZXAiLCJPY3QiLCJOb3YiLCJEZWMiXX0pO2Z1bmN0aW9uIGltKHQpe3JldHVybiBuZXcgRGF0ZSh0KX1mdW5jdGlvbiBhbSh0KXtyZXR1cm4gdCBpbnN0YW5jZW9mIERhdGU/K3Q6K25ldyBEYXRlKCt0KX1mdW5jdGlvbiBvbSh0LGUsbixyLGEsbyxzLGMsdSl7dmFyIGw9aWcoSnAsSnApLGg9bC5pbnZlcnQsZj1sLmRvbWFpbixkPXUoIi4lTCIpLHA9dSgiOiVTIiksZz11KCIlSTolTSIpLHk9dSgiJUkgJXAiKSx2PXUoIiVhICVkIiksbT11KCIlYiAlZCIpLGI9dSgiJUIiKSx4PXUoIiVZIiksXz1bW3MsMSwxZTNdLFtzLDUsNWUzXSxbcywxNSwxNWUzXSxbcywzMCwzZTRdLFtvLDEsNmU0XSxbbyw1LDNlNV0sW28sMTUsOWU1XSxbbywzMCwxOGU1XSxbYSwxLDM2ZTVdLFthLDMsMTA4ZTVdLFthLDYsMjE2ZTVdLFthLDEyLDQzMmU1XSxbciwxLDg2NGU1XSxbciwyLDE3MjhlNV0sW24sMSw2MDQ4ZTVdLFtlLDEsMjU5MmU2XSxbZSwzLDc3NzZlNl0sW3QsMSwzMTUzNmU2XV07ZnVuY3Rpb24gayhpKXtyZXR1cm4ocyhpKTxpP2Q6byhpKTxpP3A6YShpKTxpP2c6cihpKTxpP3k6ZShpKTxpP24oaSk8aT92Om06dChpKTxpP2I6eCkoaSl9ZnVuY3Rpb24gdyhlLG4scixhKXtpZihudWxsPT1lJiYoZT0xMCksIm51bWJlciI9PXR5cGVvZiBlKXt2YXIgbz1NYXRoLmFicyhyLW4pL2Uscz1pKChmdW5jdGlvbih0KXtyZXR1cm4gdFsyXX0pKS5yaWdodChfLG8pO3M9PT1fLmxlbmd0aD8oYT1BKG4vMzE1MzZlNixyLzMxNTM2ZTYsZSksZT10KTpzPyhhPShzPV9bby9fW3MtMV1bMl08X1tzXVsyXS9vP3MtMTpzXSlbMV0sZT1zWzBdKTooYT1NYXRoLm1heChBKG4scixlKSwxKSxlPWMpfXJldHVybiBudWxsPT1hP2U6ZS5ldmVyeShhKX1yZXR1cm4gbC5pbnZlcnQ9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBEYXRlKGgodCkpfSxsLmRvbWFpbj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD9mKFVwLmNhbGwodCxhbSkpOmYoKS5tYXAoaW0pfSxsLnRpY2tzPWZ1bmN0aW9uKHQsZSl7dmFyIG4scj1mKCksaT1yWzBdLGE9cltyLmxlbmd0aC0xXSxvPWE8aTtyZXR1cm4gbyYmKG49aSxpPWEsYT1uKSxuPShuPXcodCxpLGEsZSkpP24ucmFuZ2UoaSxhKzEpOltdLG8/bi5yZXZlcnNlKCk6bn0sbC50aWNrRm9ybWF0PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIG51bGw9PWU/azp1KGUpfSxsLm5pY2U9ZnVuY3Rpb24odCxlKXt2YXIgbj1mKCk7cmV0dXJuKHQ9dyh0LG5bMF0sbltuLmxlbmd0aC0xXSxlKSk/Zih1ZyhuLHQpKTpsfSxsLmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gbmcobCxvbSh0LGUsbixyLGEsbyxzLGMsdSkpfSxsfXZhciBzbT1mdW5jdGlvbigpe3JldHVybiBScC5hcHBseShvbShGZyxqZyx6ZyxueSxheSxjeSxoeSxweSxVeSkuZG9tYWluKFtuZXcgRGF0ZSgyZTMsMCwxKSxuZXcgRGF0ZSgyZTMsMCwyKV0pLGFyZ3VtZW50cyl9LGNtPUJnKChmdW5jdGlvbih0KXt0LnNldFVUQ0RhdGUoMSksdC5zZXRVVENIb3VycygwLDAsMCwwKX0pLChmdW5jdGlvbih0LGUpe3Quc2V0VVRDTW9udGgodC5nZXRVVENNb250aCgpK2UpfSksKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUuZ2V0VVRDTW9udGgoKS10LmdldFVUQ01vbnRoKCkrMTIqKGUuZ2V0VVRDRnVsbFllYXIoKS10LmdldFVUQ0Z1bGxZZWFyKCkpfSksKGZ1bmN0aW9uKHQpe3JldHVybiB0LmdldFVUQ01vbnRoKCl9KSksdW09Y20sbG09Y20ucmFuZ2UsaG09QmcoKGZ1bmN0aW9uKHQpe3Quc2V0VVRDTWludXRlcygwLDAsMCl9KSwoZnVuY3Rpb24odCxlKXt0LnNldFRpbWUoK3QrMzZlNSplKX0pLChmdW5jdGlvbih0LGUpe3JldHVybihlLXQpLzM2ZTV9KSwoZnVuY3Rpb24odCl7cmV0dXJuIHQuZ2V0VVRDSG91cnMoKX0pKSxmbT1obSxkbT1obS5yYW5nZSxwbT1CZygoZnVuY3Rpb24odCl7dC5zZXRVVENTZWNvbmRzKDAsMCl9KSwoZnVuY3Rpb24odCxlKXt0LnNldFRpbWUoK3QrNmU0KmUpfSksKGZ1bmN0aW9uKHQsZSl7cmV0dXJuKGUtdCkvNmU0fSksKGZ1bmN0aW9uKHQpe3JldHVybiB0LmdldFVUQ01pbnV0ZXMoKX0pKSxnbT1wbSx5bT1wbS5yYW5nZSx2bT1mdW5jdGlvbigpe3JldHVybiBScC5hcHBseShvbShGeSx1bSx2eSxOeSxmbSxnbSxoeSxweSxXeSkuZG9tYWluKFtEYXRlLlVUQygyZTMsMCwxKSxEYXRlLlVUQygyZTMsMCwyKV0pLGFyZ3VtZW50cyl9O2Z1bmN0aW9uIG1tKCl7dmFyIHQsZSxuLHIsaSxhPTAsbz0xLHM9SnAsYz0hMTtmdW5jdGlvbiB1KGUpe3JldHVybiBpc05hTihlPStlKT9pOnMoMD09PW4/LjU6KGU9KHIoZSktdCkqbixjP01hdGgubWF4KDAsTWF0aC5taW4oMSxlKSk6ZSkpfXJldHVybiB1LmRvbWFpbj1mdW5jdGlvbihpKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD1yKGE9K2lbMF0pLGU9cihvPStpWzFdKSxuPXQ9PT1lPzA6MS8oZS10KSx1KTpbYSxvXX0sdS5jbGFtcD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYz0hIXQsdSk6Y30sdS5pbnRlcnBvbGF0b3I9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHM9dCx1KTpzfSx1LnVua25vd249ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9dCx1KTppfSxmdW5jdGlvbihpKXtyZXR1cm4gcj1pLHQ9aShhKSxlPWkobyksbj10PT09ZT8wOjEvKGUtdCksdX19ZnVuY3Rpb24gYm0odCxlKXtyZXR1cm4gZS5kb21haW4odC5kb21haW4oKSkuaW50ZXJwb2xhdG9yKHQuaW50ZXJwb2xhdG9yKCkpLmNsYW1wKHQuY2xhbXAoKSkudW5rbm93bih0LnVua25vd24oKSl9ZnVuY3Rpb24geG0oKXt2YXIgdD1vZyhtbSgpKEpwKSk7cmV0dXJuIHQuY29weT1mdW5jdGlvbigpe3JldHVybiBibSh0LHhtKCkpfSxZcC5hcHBseSh0LGFyZ3VtZW50cyl9ZnVuY3Rpb24gX20oKXt2YXIgdD15ZyhtbSgpKS5kb21haW4oWzEsMTBdKTtyZXR1cm4gdC5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIGJtKHQsX20oKSkuYmFzZSh0LmJhc2UoKSl9LFlwLmFwcGx5KHQsYXJndW1lbnRzKX1mdW5jdGlvbiBrbSgpe3ZhciB0PXhnKG1tKCkpO3JldHVybiB0LmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gYm0odCxrbSgpKS5jb25zdGFudCh0LmNvbnN0YW50KCkpfSxZcC5hcHBseSh0LGFyZ3VtZW50cyl9ZnVuY3Rpb24gd20oKXt2YXIgdD1UZyhtbSgpKTtyZXR1cm4gdC5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIGJtKHQsd20oKSkuZXhwb25lbnQodC5leHBvbmVudCgpKX0sWXAuYXBwbHkodCxhcmd1bWVudHMpfWZ1bmN0aW9uIEVtKCl7cmV0dXJuIHdtLmFwcGx5KG51bGwsYXJndW1lbnRzKS5leHBvbmVudCguNSl9ZnVuY3Rpb24gVG0oKXt2YXIgdD1bXSxlPUpwO2Z1bmN0aW9uIG4obil7aWYoIWlzTmFOKG49K24pKXJldHVybiBlKChjKHQsbiktMSkvKHQubGVuZ3RoLTEpKX1yZXR1cm4gbi5kb21haW49ZnVuY3Rpb24oZSl7aWYoIWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIHQuc2xpY2UoKTt0PVtdO2Zvcih2YXIgaSxhPTAsbz1lLmxlbmd0aDthPG87KythKW51bGw9PShpPWVbYV0pfHxpc05hTihpPStpKXx8dC5wdXNoKGkpO3JldHVybiB0LnNvcnQociksbn0sbi5pbnRlcnBvbGF0b3I9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9dCxuKTplfSxuLmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gVG0oZSkuZG9tYWluKHQpfSxZcC5hcHBseShuLGFyZ3VtZW50cyl9ZnVuY3Rpb24gQ20oKXt2YXIgdCxlLG4scixpLGEsbyxzPTAsYz0uNSx1PTEsbD1KcCxoPSExO2Z1bmN0aW9uIGYodCl7cmV0dXJuIGlzTmFOKHQ9K3QpP286KHQ9LjUrKCh0PSthKHQpKS1lKSoodDxlP3I6aSksbChoP01hdGgubWF4KDAsTWF0aC5taW4oMSx0KSk6dCkpfXJldHVybiBmLmRvbWFpbj1mdW5jdGlvbihvKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD1hKHM9K29bMF0pLGU9YShjPStvWzFdKSxuPWEodT0rb1syXSkscj10PT09ZT8wOi41LyhlLXQpLGk9ZT09PW4/MDouNS8obi1lKSxmKTpbcyxjLHVdfSxmLmNsYW1wPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhoPSEhdCxmKTpofSxmLmludGVycG9sYXRvcj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obD10LGYpOmx9LGYudW5rbm93bj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz10LGYpOm99LGZ1bmN0aW9uKG8pe3JldHVybiBhPW8sdD1vKHMpLGU9byhjKSxuPW8odSkscj10PT09ZT8wOi41LyhlLXQpLGk9ZT09PW4/MDouNS8obi1lKSxmfX1mdW5jdGlvbiBTbSgpe3ZhciB0PW9nKENtKCkoSnApKTtyZXR1cm4gdC5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIGJtKHQsU20oKSl9LFlwLmFwcGx5KHQsYXJndW1lbnRzKX1mdW5jdGlvbiBBbSgpe3ZhciB0PXlnKENtKCkpLmRvbWFpbihbLjEsMSwxMF0pO3JldHVybiB0LmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gYm0odCxBbSgpKS5iYXNlKHQuYmFzZSgpKX0sWXAuYXBwbHkodCxhcmd1bWVudHMpfWZ1bmN0aW9uIE1tKCl7dmFyIHQ9eGcoQ20oKSk7cmV0dXJuIHQuY29weT1mdW5jdGlvbigpe3JldHVybiBibSh0LE1tKCkpLmNvbnN0YW50KHQuY29uc3RhbnQoKSl9LFlwLmFwcGx5KHQsYXJndW1lbnRzKX1mdW5jdGlvbiBPbSgpe3ZhciB0PVRnKENtKCkpO3JldHVybiB0LmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gYm0odCxPbSgpKS5leHBvbmVudCh0LmV4cG9uZW50KCkpfSxZcC5hcHBseSh0LGFyZ3VtZW50cyl9ZnVuY3Rpb24gRG0oKXtyZXR1cm4gT20uYXBwbHkobnVsbCxhcmd1bWVudHMpLmV4cG9uZW50KC41KX12YXIgTm09ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXQubGVuZ3RoLzZ8MCxuPW5ldyBBcnJheShlKSxyPTA7cjxlOyluW3JdPSIjIit0LnNsaWNlKDYqciw2Kisrcik7cmV0dXJuIG59LEJtPU5tKCIxZjc3YjRmZjdmMGUyY2EwMmNkNjI3Mjg5NDY3YmQ4YzU2NGJlMzc3YzI3ZjdmN2ZiY2JkMjIxN2JlY2YiKSxMbT1ObSgiN2ZjOTdmYmVhZWQ0ZmRjMDg2ZmZmZjk5Mzg2Y2IwZjAwMjdmYmY1YjE3NjY2NjY2IiksRm09Tm0oIjFiOWU3N2Q5NWYwMjc1NzBiM2U3Mjk4YTY2YTYxZWU2YWIwMmE2NzYxZDY2NjY2NiIpLFBtPU5tKCJhNmNlZTMxZjc4YjRiMmRmOGEzM2EwMmNmYjlhOTllMzFhMWNmZGJmNmZmZjdmMDBjYWIyZDY2YTNkOWFmZmZmOTliMTU5MjgiKSxJbT1ObSgiZmJiNGFlYjNjZGUzY2NlYmM1ZGVjYmU0ZmVkOWE2ZmZmZmNjZTVkOGJkZmRkYWVjZjJmMmYyIiksam09Tm0oImIzZTJjZGZkY2RhY2NiZDVlOGY0Y2FlNGU2ZjVjOWZmZjJhZWYxZTJjY2NjY2NjYyIpLFJtPU5tKCJlNDFhMWMzNzdlYjg0ZGFmNGE5ODRlYTNmZjdmMDBmZmZmMzNhNjU2MjhmNzgxYmY5OTk5OTkiKSxZbT1ObSgiNjZjMmE1ZmM4ZDYyOGRhMGNiZTc4YWMzYTZkODU0ZmZkOTJmZTVjNDk0YjNiM2IzIiksem09Tm0oIjhkZDNjN2ZmZmZiM2JlYmFkYWZiODA3MjgwYjFkM2ZkYjQ2MmIzZGU2OWZjY2RlNWQ5ZDlkOWJjODBiZGNjZWJjNWZmZWQ2ZiIpLFVtPU5tKCI0ZTc5YTdmMjhlMmNlMTU3NTk3NmI3YjI1OWExNGZlZGM5NDlhZjdhYTFmZjlkYTc5Yzc1NWZiYWIwYWIiKSwkbT1mdW5jdGlvbih0KXtyZXR1cm4gcG4odFt0Lmxlbmd0aC0xXSl9LFdtPW5ldyBBcnJheSgzKS5jb25jYXQoImQ4YjM2NWY1ZjVmNTVhYjRhYyIsImE2NjExYWRmYzI3ZDgwY2RjMTAxODU3MSIsImE2NjExYWRmYzI3ZGY1ZjVmNTgwY2RjMTAxODU3MSIsIjhjNTEwYWQ4YjM2NWY2ZThjM2M3ZWFlNTVhYjRhYzAxNjY1ZSIsIjhjNTEwYWQ4YjM2NWY2ZThjM2Y1ZjVmNWM3ZWFlNTVhYjRhYzAxNjY1ZSIsIjhjNTEwYWJmODEyZGRmYzI3ZGY2ZThjM2M3ZWFlNTgwY2RjMTM1OTc4ZjAxNjY1ZSIsIjhjNTEwYWJmODEyZGRmYzI3ZGY2ZThjM2Y1ZjVmNWM3ZWFlNTgwY2RjMTM1OTc4ZjAxNjY1ZSIsIjU0MzAwNThjNTEwYWJmODEyZGRmYzI3ZGY2ZThjM2M3ZWFlNTgwY2RjMTM1OTc4ZjAxNjY1ZTAwM2MzMCIsIjU0MzAwNThjNTEwYWJmODEyZGRmYzI3ZGY2ZThjM2Y1ZjVmNWM3ZWFlNTgwY2RjMTM1OTc4ZjAxNjY1ZTAwM2MzMCIpLm1hcChObSksVm09JG0oV20pLEhtPW5ldyBBcnJheSgzKS5jb25jYXQoImFmOGRjM2Y3ZjdmNzdmYmY3YiIsIjdiMzI5NGMyYTVjZmE2ZGJhMDAwODgzNyIsIjdiMzI5NGMyYTVjZmY3ZjdmN2E2ZGJhMDAwODgzNyIsIjc2MmE4M2FmOGRjM2U3ZDRlOGQ5ZjBkMzdmYmY3YjFiNzgzNyIsIjc2MmE4M2FmOGRjM2U3ZDRlOGY3ZjdmN2Q5ZjBkMzdmYmY3YjFiNzgzNyIsIjc2MmE4Mzk5NzBhYmMyYTVjZmU3ZDRlOGQ5ZjBkM2E2ZGJhMDVhYWU2MTFiNzgzNyIsIjc2MmE4Mzk5NzBhYmMyYTVjZmU3ZDRlOGY3ZjdmN2Q5ZjBkM2E2ZGJhMDVhYWU2MTFiNzgzNyIsIjQwMDA0Yjc2MmE4Mzk5NzBhYmMyYTVjZmU3ZDRlOGQ5ZjBkM2E2ZGJhMDVhYWU2MTFiNzgzNzAwNDQxYiIsIjQwMDA0Yjc2MmE4Mzk5NzBhYmMyYTVjZmU3ZDRlOGY3ZjdmN2Q5ZjBkM2E2ZGJhMDVhYWU2MTFiNzgzNzAwNDQxYiIpLm1hcChObSksR209JG0oSG0pLHFtPW5ldyBBcnJheSgzKS5jb25jYXQoImU5YTNjOWY3ZjdmN2ExZDc2YSIsImQwMWM4YmYxYjZkYWI4ZTE4NjRkYWMyNiIsImQwMWM4YmYxYjZkYWY3ZjdmN2I4ZTE4NjRkYWMyNiIsImM1MWI3ZGU5YTNjOWZkZTBlZmU2ZjVkMGExZDc2YTRkOTIyMSIsImM1MWI3ZGU5YTNjOWZkZTBlZmY3ZjdmN2U2ZjVkMGExZDc2YTRkOTIyMSIsImM1MWI3ZGRlNzdhZWYxYjZkYWZkZTBlZmU2ZjVkMGI4ZTE4NjdmYmM0MTRkOTIyMSIsImM1MWI3ZGRlNzdhZWYxYjZkYWZkZTBlZmY3ZjdmN2U2ZjVkMGI4ZTE4NjdmYmM0MTRkOTIyMSIsIjhlMDE1MmM1MWI3ZGRlNzdhZWYxYjZkYWZkZTBlZmU2ZjVkMGI4ZTE4NjdmYmM0MTRkOTIyMTI3NjQxOSIsIjhlMDE1MmM1MWI3ZGRlNzdhZWYxYjZkYWZkZTBlZmY3ZjdmN2U2ZjVkMGI4ZTE4NjdmYmM0MTRkOTIyMTI3NjQxOSIpLm1hcChObSksWG09JG0ocW0pLFptPW5ldyBBcnJheSgzKS5jb25jYXQoIjk5OGVjM2Y3ZjdmN2YxYTM0MCIsIjVlM2M5OWIyYWJkMmZkYjg2M2U2NjEwMSIsIjVlM2M5OWIyYWJkMmY3ZjdmN2ZkYjg2M2U2NjEwMSIsIjU0Mjc4ODk5OGVjM2Q4ZGFlYmZlZTBiNmYxYTM0MGIzNTgwNiIsIjU0Mjc4ODk5OGVjM2Q4ZGFlYmY3ZjdmN2ZlZTBiNmYxYTM0MGIzNTgwNiIsIjU0Mjc4ODgwNzNhY2IyYWJkMmQ4ZGFlYmZlZTBiNmZkYjg2M2UwODIxNGIzNTgwNiIsIjU0Mjc4ODgwNzNhY2IyYWJkMmQ4ZGFlYmY3ZjdmN2ZlZTBiNmZkYjg2M2UwODIxNGIzNTgwNiIsIjJkMDA0YjU0Mjc4ODgwNzNhY2IyYWJkMmQ4ZGFlYmZlZTBiNmZkYjg2M2UwODIxNGIzNTgwNjdmM2IwOCIsIjJkMDA0YjU0Mjc4ODgwNzNhY2IyYWJkMmQ4ZGFlYmY3ZjdmN2ZlZTBiNmZkYjg2M2UwODIxNGIzNTgwNjdmM2IwOCIpLm1hcChObSksSm09JG0oWm0pLFFtPW5ldyBBcnJheSgzKS5jb25jYXQoImVmOGE2MmY3ZjdmNzY3YTljZiIsImNhMDAyMGY0YTU4MjkyYzVkZTA1NzFiMCIsImNhMDAyMGY0YTU4MmY3ZjdmNzkyYzVkZTA1NzFiMCIsImIyMTgyYmVmOGE2MmZkZGJjN2QxZTVmMDY3YTljZjIxNjZhYyIsImIyMTgyYmVmOGE2MmZkZGJjN2Y3ZjdmN2QxZTVmMDY3YTljZjIxNjZhYyIsImIyMTgyYmQ2NjA0ZGY0YTU4MmZkZGJjN2QxZTVmMDkyYzVkZTQzOTNjMzIxNjZhYyIsImIyMTgyYmQ2NjA0ZGY0YTU4MmZkZGJjN2Y3ZjdmN2QxZTVmMDkyYzVkZTQzOTNjMzIxNjZhYyIsIjY3MDAxZmIyMTgyYmQ2NjA0ZGY0YTU4MmZkZGJjN2QxZTVmMDkyYzVkZTQzOTNjMzIxNjZhYzA1MzA2MSIsIjY3MDAxZmIyMTgyYmQ2NjA0ZGY0YTU4MmZkZGJjN2Y3ZjdmN2QxZTVmMDkyYzVkZTQzOTNjMzIxNjZhYzA1MzA2MSIpLm1hcChObSksS209JG0oUW0pLHRiPW5ldyBBcnJheSgzKS5jb25jYXQoImVmOGE2MmZmZmZmZjk5OTk5OSIsImNhMDAyMGY0YTU4MmJhYmFiYTQwNDA0MCIsImNhMDAyMGY0YTU4MmZmZmZmZmJhYmFiYTQwNDA0MCIsImIyMTgyYmVmOGE2MmZkZGJjN2UwZTBlMDk5OTk5OTRkNGQ0ZCIsImIyMTgyYmVmOGE2MmZkZGJjN2ZmZmZmZmUwZTBlMDk5OTk5OTRkNGQ0ZCIsImIyMTgyYmQ2NjA0ZGY0YTU4MmZkZGJjN2UwZTBlMGJhYmFiYTg3ODc4NzRkNGQ0ZCIsImIyMTgyYmQ2NjA0ZGY0YTU4MmZkZGJjN2ZmZmZmZmUwZTBlMGJhYmFiYTg3ODc4NzRkNGQ0ZCIsIjY3MDAxZmIyMTgyYmQ2NjA0ZGY0YTU4MmZkZGJjN2UwZTBlMGJhYmFiYTg3ODc4NzRkNGQ0ZDFhMWExYSIsIjY3MDAxZmIyMTgyYmQ2NjA0ZGY0YTU4MmZkZGJjN2ZmZmZmZmUwZTBlMGJhYmFiYTg3ODc4NzRkNGQ0ZDFhMWExYSIpLm1hcChObSksZWI9JG0odGIpLG5iPW5ldyBBcnJheSgzKS5jb25jYXQoImZjOGQ1OWZmZmZiZjkxYmZkYiIsImQ3MTkxY2ZkYWU2MWFiZDllOTJjN2JiNiIsImQ3MTkxY2ZkYWU2MWZmZmZiZmFiZDllOTJjN2JiNiIsImQ3MzAyN2ZjOGQ1OWZlZTA5MGUwZjNmODkxYmZkYjQ1NzViNCIsImQ3MzAyN2ZjOGQ1OWZlZTA5MGZmZmZiZmUwZjNmODkxYmZkYjQ1NzViNCIsImQ3MzAyN2Y0NmQ0M2ZkYWU2MWZlZTA5MGUwZjNmOGFiZDllOTc0YWRkMTQ1NzViNCIsImQ3MzAyN2Y0NmQ0M2ZkYWU2MWZlZTA5MGZmZmZiZmUwZjNmOGFiZDllOTc0YWRkMTQ1NzViNCIsImE1MDAyNmQ3MzAyN2Y0NmQ0M2ZkYWU2MWZlZTA5MGUwZjNmOGFiZDllOTc0YWRkMTQ1NzViNDMxMzY5NSIsImE1MDAyNmQ3MzAyN2Y0NmQ0M2ZkYWU2MWZlZTA5MGZmZmZiZmUwZjNmOGFiZDllOTc0YWRkMTQ1NzViNDMxMzY5NSIpLm1hcChObSkscmI9JG0obmIpLGliPW5ldyBBcnJheSgzKS5jb25jYXQoImZjOGQ1OWZmZmZiZjkxY2Y2MCIsImQ3MTkxY2ZkYWU2MWE2ZDk2YTFhOTY0MSIsImQ3MTkxY2ZkYWU2MWZmZmZiZmE2ZDk2YTFhOTY0MSIsImQ3MzAyN2ZjOGQ1OWZlZTA4YmQ5ZWY4YjkxY2Y2MDFhOTg1MCIsImQ3MzAyN2ZjOGQ1OWZlZTA4YmZmZmZiZmQ5ZWY4YjkxY2Y2MDFhOTg1MCIsImQ3MzAyN2Y0NmQ0M2ZkYWU2MWZlZTA4YmQ5ZWY4YmE2ZDk2YTY2YmQ2MzFhOTg1MCIsImQ3MzAyN2Y0NmQ0M2ZkYWU2MWZlZTA4YmZmZmZiZmQ5ZWY4YmE2ZDk2YTY2YmQ2MzFhOTg1MCIsImE1MDAyNmQ3MzAyN2Y0NmQ0M2ZkYWU2MWZlZTA4YmQ5ZWY4YmE2ZDk2YTY2YmQ2MzFhOTg1MDAwNjgzNyIsImE1MDAyNmQ3MzAyN2Y0NmQ0M2ZkYWU2MWZlZTA4YmZmZmZiZmQ5ZWY4YmE2ZDk2YTY2YmQ2MzFhOTg1MDAwNjgzNyIpLm1hcChObSksYWI9JG0oaWIpLG9iPW5ldyBBcnJheSgzKS5jb25jYXQoImZjOGQ1OWZmZmZiZjk5ZDU5NCIsImQ3MTkxY2ZkYWU2MWFiZGRhNDJiODNiYSIsImQ3MTkxY2ZkYWU2MWZmZmZiZmFiZGRhNDJiODNiYSIsImQ1M2U0ZmZjOGQ1OWZlZTA4YmU2ZjU5ODk5ZDU5NDMyODhiZCIsImQ1M2U0ZmZjOGQ1OWZlZTA4YmZmZmZiZmU2ZjU5ODk5ZDU5NDMyODhiZCIsImQ1M2U0ZmY0NmQ0M2ZkYWU2MWZlZTA4YmU2ZjU5OGFiZGRhNDY2YzJhNTMyODhiZCIsImQ1M2U0ZmY0NmQ0M2ZkYWU2MWZlZTA4YmZmZmZiZmU2ZjU5OGFiZGRhNDY2YzJhNTMyODhiZCIsIjllMDE0MmQ1M2U0ZmY0NmQ0M2ZkYWU2MWZlZTA4YmU2ZjU5OGFiZGRhNDY2YzJhNTMyODhiZDVlNGZhMiIsIjllMDE0MmQ1M2U0ZmY0NmQ0M2ZkYWU2MWZlZTA4YmZmZmZiZmU2ZjU5OGFiZGRhNDY2YzJhNTMyODhiZDVlNGZhMiIpLm1hcChObSksc2I9JG0ob2IpLGNiPW5ldyBBcnJheSgzKS5jb25jYXQoImU1ZjVmOTk5ZDhjOTJjYTI1ZiIsImVkZjhmYmIyZTJlMjY2YzJhNDIzOGI0NSIsImVkZjhmYmIyZTJlMjY2YzJhNDJjYTI1ZjAwNmQyYyIsImVkZjhmYmNjZWNlNjk5ZDhjOTY2YzJhNDJjYTI1ZjAwNmQyYyIsImVkZjhmYmNjZWNlNjk5ZDhjOTY2YzJhNDQxYWU3NjIzOGI0NTAwNTgyNCIsImY3ZmNmZGU1ZjVmOWNjZWNlNjk5ZDhjOTY2YzJhNDQxYWU3NjIzOGI0NTAwNTgyNCIsImY3ZmNmZGU1ZjVmOWNjZWNlNjk5ZDhjOTY2YzJhNDQxYWU3NjIzOGI0NTAwNmQyYzAwNDQxYiIpLm1hcChObSksdWI9JG0oY2IpLGxiPW5ldyBBcnJheSgzKS5jb25jYXQoImUwZWNmNDllYmNkYTg4NTZhNyIsImVkZjhmYmIzY2RlMzhjOTZjNjg4NDE5ZCIsImVkZjhmYmIzY2RlMzhjOTZjNjg4NTZhNzgxMGY3YyIsImVkZjhmYmJmZDNlNjllYmNkYThjOTZjNjg4NTZhNzgxMGY3YyIsImVkZjhmYmJmZDNlNjllYmNkYThjOTZjNjhjNmJiMTg4NDE5ZDZlMDE2YiIsImY3ZmNmZGUwZWNmNGJmZDNlNjllYmNkYThjOTZjNjhjNmJiMTg4NDE5ZDZlMDE2YiIsImY3ZmNmZGUwZWNmNGJmZDNlNjllYmNkYThjOTZjNjhjNmJiMTg4NDE5ZDgxMGY3YzRkMDA0YiIpLm1hcChObSksaGI9JG0obGIpLGZiPW5ldyBBcnJheSgzKS5jb25jYXQoImUwZjNkYmE4ZGRiNTQzYTJjYSIsImYwZjllOGJhZTRiYzdiY2NjNDJiOGNiZSIsImYwZjllOGJhZTRiYzdiY2NjNDQzYTJjYTA4NjhhYyIsImYwZjllOGNjZWJjNWE4ZGRiNTdiY2NjNDQzYTJjYTA4NjhhYyIsImYwZjllOGNjZWJjNWE4ZGRiNTdiY2NjNDRlYjNkMzJiOGNiZTA4NTg5ZSIsImY3ZmNmMGUwZjNkYmNjZWJjNWE4ZGRiNTdiY2NjNDRlYjNkMzJiOGNiZTA4NTg5ZSIsImY3ZmNmMGUwZjNkYmNjZWJjNWE4ZGRiNTdiY2NjNDRlYjNkMzJiOGNiZTA4NjhhYzA4NDA4MSIpLm1hcChObSksZGI9JG0oZmIpLHBiPW5ldyBBcnJheSgzKS5jb25jYXQoImZlZThjOGZkYmI4NGUzNGEzMyIsImZlZjBkOWZkY2M4YWZjOGQ1OWQ3MzAxZiIsImZlZjBkOWZkY2M4YWZjOGQ1OWUzNGEzM2IzMDAwMCIsImZlZjBkOWZkZDQ5ZWZkYmI4NGZjOGQ1OWUzNGEzM2IzMDAwMCIsImZlZjBkOWZkZDQ5ZWZkYmI4NGZjOGQ1OWVmNjU0OGQ3MzAxZjk5MDAwMCIsImZmZjdlY2ZlZThjOGZkZDQ5ZWZkYmI4NGZjOGQ1OWVmNjU0OGQ3MzAxZjk5MDAwMCIsImZmZjdlY2ZlZThjOGZkZDQ5ZWZkYmI4NGZjOGQ1OWVmNjU0OGQ3MzAxZmIzMDAwMDdmMDAwMCIpLm1hcChObSksZ2I9JG0ocGIpLHliPW5ldyBBcnJheSgzKS5jb25jYXQoImVjZTJmMGE2YmRkYjFjOTA5OSIsImY2ZWZmN2JkYzllMTY3YTljZjAyODE4YSIsImY2ZWZmN2JkYzllMTY3YTljZjFjOTA5OTAxNmM1OSIsImY2ZWZmN2QwZDFlNmE2YmRkYjY3YTljZjFjOTA5OTAxNmM1OSIsImY2ZWZmN2QwZDFlNmE2YmRkYjY3YTljZjM2OTBjMDAyODE4YTAxNjQ1MCIsImZmZjdmYmVjZTJmMGQwZDFlNmE2YmRkYjY3YTljZjM2OTBjMDAyODE4YTAxNjQ1MCIsImZmZjdmYmVjZTJmMGQwZDFlNmE2YmRkYjY3YTljZjM2OTBjMDAyODE4YTAxNmM1OTAxNDYzNiIpLm1hcChObSksdmI9JG0oeWIpLG1iPW5ldyBBcnJheSgzKS5jb25jYXQoImVjZTdmMmE2YmRkYjJiOGNiZSIsImYxZWVmNmJkYzllMTc0YTljZjA1NzBiMCIsImYxZWVmNmJkYzllMTc0YTljZjJiOGNiZTA0NWE4ZCIsImYxZWVmNmQwZDFlNmE2YmRkYjc0YTljZjJiOGNiZTA0NWE4ZCIsImYxZWVmNmQwZDFlNmE2YmRkYjc0YTljZjM2OTBjMDA1NzBiMDAzNGU3YiIsImZmZjdmYmVjZTdmMmQwZDFlNmE2YmRkYjc0YTljZjM2OTBjMDA1NzBiMDAzNGU3YiIsImZmZjdmYmVjZTdmMmQwZDFlNmE2YmRkYjc0YTljZjM2OTBjMDA1NzBiMDA0NWE4ZDAyMzg1OCIpLm1hcChObSksYmI9JG0obWIpLHhiPW5ldyBBcnJheSgzKS5jb25jYXQoImU3ZTFlZmM5OTRjN2RkMWM3NyIsImYxZWVmNmQ3YjVkOGRmNjViMGNlMTI1NiIsImYxZWVmNmQ3YjVkOGRmNjViMGRkMWM3Nzk4MDA0MyIsImYxZWVmNmQ0YjlkYWM5OTRjN2RmNjViMGRkMWM3Nzk4MDA0MyIsImYxZWVmNmQ0YjlkYWM5OTRjN2RmNjViMGU3Mjk4YWNlMTI1NjkxMDAzZiIsImY3ZjRmOWU3ZTFlZmQ0YjlkYWM5OTRjN2RmNjViMGU3Mjk4YWNlMTI1NjkxMDAzZiIsImY3ZjRmOWU3ZTFlZmQ0YjlkYWM5OTRjN2RmNjViMGU3Mjk4YWNlMTI1Njk4MDA0MzY3MDAxZiIpLm1hcChObSksX2I9JG0oeGIpLGtiPW5ldyBBcnJheSgzKS5jb25jYXQoImZkZTBkZGZhOWZiNWM1MWI4YSIsImZlZWJlMmZiYjRiOWY3NjhhMWFlMDE3ZSIsImZlZWJlMmZiYjRiOWY3NjhhMWM1MWI4YTdhMDE3NyIsImZlZWJlMmZjYzVjMGZhOWZiNWY3NjhhMWM1MWI4YTdhMDE3NyIsImZlZWJlMmZjYzVjMGZhOWZiNWY3NjhhMWRkMzQ5N2FlMDE3ZTdhMDE3NyIsImZmZjdmM2ZkZTBkZGZjYzVjMGZhOWZiNWY3NjhhMWRkMzQ5N2FlMDE3ZTdhMDE3NyIsImZmZjdmM2ZkZTBkZGZjYzVjMGZhOWZiNWY3NjhhMWRkMzQ5N2FlMDE3ZTdhMDE3NzQ5MDA2YSIpLm1hcChObSksd2I9JG0oa2IpLEViPW5ldyBBcnJheSgzKS5jb25jYXQoImVkZjhiMTdmY2RiYjJjN2ZiOCIsImZmZmZjY2ExZGFiNDQxYjZjNDIyNWVhOCIsImZmZmZjY2ExZGFiNDQxYjZjNDJjN2ZiODI1MzQ5NCIsImZmZmZjY2M3ZTliNDdmY2RiYjQxYjZjNDJjN2ZiODI1MzQ5NCIsImZmZmZjY2M3ZTliNDdmY2RiYjQxYjZjNDFkOTFjMDIyNWVhODBjMmM4NCIsImZmZmZkOWVkZjhiMWM3ZTliNDdmY2RiYjQxYjZjNDFkOTFjMDIyNWVhODBjMmM4NCIsImZmZmZkOWVkZjhiMWM3ZTliNDdmY2RiYjQxYjZjNDFkOTFjMDIyNWVhODI1MzQ5NDA4MWQ1OCIpLm1hcChObSksVGI9JG0oRWIpLENiPW5ldyBBcnJheSgzKS5jb25jYXQoImY3ZmNiOWFkZGQ4ZTMxYTM1NCIsImZmZmZjY2MyZTY5OTc4YzY3OTIzODQ0MyIsImZmZmZjY2MyZTY5OTc4YzY3OTMxYTM1NDAwNjgzNyIsImZmZmZjY2Q5ZjBhM2FkZGQ4ZTc4YzY3OTMxYTM1NDAwNjgzNyIsImZmZmZjY2Q5ZjBhM2FkZGQ4ZTc4YzY3OTQxYWI1ZDIzODQ0MzAwNWEzMiIsImZmZmZlNWY3ZmNiOWQ5ZjBhM2FkZGQ4ZTc4YzY3OTQxYWI1ZDIzODQ0MzAwNWEzMiIsImZmZmZlNWY3ZmNiOWQ5ZjBhM2FkZGQ4ZTc4YzY3OTQxYWI1ZDIzODQ0MzAwNjgzNzAwNDUyOSIpLm1hcChObSksU2I9JG0oQ2IpLEFiPW5ldyBBcnJheSgzKS5jb25jYXQoImZmZjdiY2ZlYzQ0ZmQ5NWYwZSIsImZmZmZkNGZlZDk4ZWZlOTkyOWNjNGMwMiIsImZmZmZkNGZlZDk4ZWZlOTkyOWQ5NWYwZTk5MzQwNCIsImZmZmZkNGZlZTM5MWZlYzQ0ZmZlOTkyOWQ5NWYwZTk5MzQwNCIsImZmZmZkNGZlZTM5MWZlYzQ0ZmZlOTkyOWVjNzAxNGNjNGMwMjhjMmQwNCIsImZmZmZlNWZmZjdiY2ZlZTM5MWZlYzQ0ZmZlOTkyOWVjNzAxNGNjNGMwMjhjMmQwNCIsImZmZmZlNWZmZjdiY2ZlZTM5MWZlYzQ0ZmZlOTkyOWVjNzAxNGNjNGMwMjk5MzQwNDY2MjUwNiIpLm1hcChObSksTWI9JG0oQWIpLE9iPW5ldyBBcnJheSgzKS5jb25jYXQoImZmZWRhMGZlYjI0Y2YwM2IyMCIsImZmZmZiMmZlY2M1Y2ZkOGQzY2UzMWExYyIsImZmZmZiMmZlY2M1Y2ZkOGQzY2YwM2IyMGJkMDAyNiIsImZmZmZiMmZlZDk3NmZlYjI0Y2ZkOGQzY2YwM2IyMGJkMDAyNiIsImZmZmZiMmZlZDk3NmZlYjI0Y2ZkOGQzY2ZjNGUyYWUzMWExY2IxMDAyNiIsImZmZmZjY2ZmZWRhMGZlZDk3NmZlYjI0Y2ZkOGQzY2ZjNGUyYWUzMWExY2IxMDAyNiIsImZmZmZjY2ZmZWRhMGZlZDk3NmZlYjI0Y2ZkOGQzY2ZjNGUyYWUzMWExY2JkMDAyNjgwMDAyNiIpLm1hcChObSksRGI9JG0oT2IpLE5iPW5ldyBBcnJheSgzKS5jb25jYXQoImRlZWJmNzllY2FlMTMxODJiZCIsImVmZjNmZmJkZDdlNzZiYWVkNjIxNzFiNSIsImVmZjNmZmJkZDdlNzZiYWVkNjMxODJiZDA4NTE5YyIsImVmZjNmZmM2ZGJlZjllY2FlMTZiYWVkNjMxODJiZDA4NTE5YyIsImVmZjNmZmM2ZGJlZjllY2FlMTZiYWVkNjQyOTJjNjIxNzFiNTA4NDU5NCIsImY3ZmJmZmRlZWJmN2M2ZGJlZjllY2FlMTZiYWVkNjQyOTJjNjIxNzFiNTA4NDU5NCIsImY3ZmJmZmRlZWJmN2M2ZGJlZjllY2FlMTZiYWVkNjQyOTJjNjIxNzFiNTA4NTE5YzA4MzA2YiIpLm1hcChObSksQmI9JG0oTmIpLExiPW5ldyBBcnJheSgzKS5jb25jYXQoImU1ZjVlMGExZDk5YjMxYTM1NCIsImVkZjhlOWJhZTRiMzc0YzQ3NjIzOGI0NSIsImVkZjhlOWJhZTRiMzc0YzQ3NjMxYTM1NDAwNmQyYyIsImVkZjhlOWM3ZTljMGExZDk5Yjc0YzQ3NjMxYTM1NDAwNmQyYyIsImVkZjhlOWM3ZTljMGExZDk5Yjc0YzQ3NjQxYWI1ZDIzOGI0NTAwNWEzMiIsImY3ZmNmNWU1ZjVlMGM3ZTljMGExZDk5Yjc0YzQ3NjQxYWI1ZDIzOGI0NTAwNWEzMiIsImY3ZmNmNWU1ZjVlMGM3ZTljMGExZDk5Yjc0YzQ3NjQxYWI1ZDIzOGI0NTAwNmQyYzAwNDQxYiIpLm1hcChObSksRmI9JG0oTGIpLFBiPW5ldyBBcnJheSgzKS5jb25jYXQoImYwZjBmMGJkYmRiZDYzNjM2MyIsImY3ZjdmN2NjY2NjYzk2OTY5NjUyNTI1MiIsImY3ZjdmN2NjY2NjYzk2OTY5NjYzNjM2MzI1MjUyNSIsImY3ZjdmN2Q5ZDlkOWJkYmRiZDk2OTY5NjYzNjM2MzI1MjUyNSIsImY3ZjdmN2Q5ZDlkOWJkYmRiZDk2OTY5NjczNzM3MzUyNTI1MjI1MjUyNSIsImZmZmZmZmYwZjBmMGQ5ZDlkOWJkYmRiZDk2OTY5NjczNzM3MzUyNTI1MjI1MjUyNSIsImZmZmZmZmYwZjBmMGQ5ZDlkOWJkYmRiZDk2OTY5NjczNzM3MzUyNTI1MjI1MjUyNTAwMDAwMCIpLm1hcChObSksSWI9JG0oUGIpLGpiPW5ldyBBcnJheSgzKS5jb25jYXQoImVmZWRmNWJjYmRkYzc1NmJiMSIsImYyZjBmN2NiYzllMjllOWFjODZhNTFhMyIsImYyZjBmN2NiYzllMjllOWFjODc1NmJiMTU0Mjc4ZiIsImYyZjBmN2RhZGFlYmJjYmRkYzllOWFjODc1NmJiMTU0Mjc4ZiIsImYyZjBmN2RhZGFlYmJjYmRkYzllOWFjODgwN2RiYTZhNTFhMzRhMTQ4NiIsImZjZmJmZGVmZWRmNWRhZGFlYmJjYmRkYzllOWFjODgwN2RiYTZhNTFhMzRhMTQ4NiIsImZjZmJmZGVmZWRmNWRhZGFlYmJjYmRkYzllOWFjODgwN2RiYTZhNTFhMzU0Mjc4ZjNmMDA3ZCIpLm1hcChObSksUmI9JG0oamIpLFliPW5ldyBBcnJheSgzKS5jb25jYXQoImZlZTBkMmZjOTI3MmRlMmQyNiIsImZlZTVkOWZjYWU5MWZiNmE0YWNiMTgxZCIsImZlZTVkOWZjYWU5MWZiNmE0YWRlMmQyNmE1MGYxNSIsImZlZTVkOWZjYmJhMWZjOTI3MmZiNmE0YWRlMmQyNmE1MGYxNSIsImZlZTVkOWZjYmJhMWZjOTI3MmZiNmE0YWVmM2IyY2NiMTgxZDk5MDAwZCIsImZmZjVmMGZlZTBkMmZjYmJhMWZjOTI3MmZiNmE0YWVmM2IyY2NiMTgxZDk5MDAwZCIsImZmZjVmMGZlZTBkMmZjYmJhMWZjOTI3MmZiNmE0YWVmM2IyY2NiMTgxZGE1MGYxNTY3MDAwZCIpLm1hcChObSksemI9JG0oWWIpLFViPW5ldyBBcnJheSgzKS5jb25jYXQoImZlZTZjZWZkYWU2YmU2NTUwZCIsImZlZWRkZWZkYmU4NWZkOGQzY2Q5NDcwMSIsImZlZWRkZWZkYmU4NWZkOGQzY2U2NTUwZGE2MzYwMyIsImZlZWRkZWZkZDBhMmZkYWU2YmZkOGQzY2U2NTUwZGE2MzYwMyIsImZlZWRkZWZkZDBhMmZkYWU2YmZkOGQzY2YxNjkxM2Q5NDgwMThjMmQwNCIsImZmZjVlYmZlZTZjZWZkZDBhMmZkYWU2YmZkOGQzY2YxNjkxM2Q5NDgwMThjMmQwNCIsImZmZjVlYmZlZTZjZWZkZDBhMmZkYWU2YmZkOGQzY2YxNjkxM2Q5NDgwMWE2MzYwMzdmMjcwNCIpLm1hcChObSksJGI9JG0oVWIpLFdiPWZ1bmN0aW9uKHQpe3JldHVybiB0PU1hdGgubWF4KDAsTWF0aC5taW4oMSx0KSksInJnYigiK01hdGgubWF4KDAsTWF0aC5taW4oMjU1LE1hdGgucm91bmQoLTQuNTQtdCooMzUuMzQtdCooMjM4MS43My10Kig2NDAyLjctdCooNzAyNC43Mi0yNzEwLjU3KnQpKSkpKSkpKyIsICIrTWF0aC5tYXgoMCxNYXRoLm1pbigyNTUsTWF0aC5yb3VuZCgzMi40OSt0KigxNzAuNzMrdCooNTIuODItdCooMTMxLjQ2LXQqKDE3Ni41OC02Ny4zNyp0KSkpKSkpKSsiLCAiK01hdGgubWF4KDAsTWF0aC5taW4oMjU1LE1hdGgucm91bmQoODEuMjQrdCooNDQyLjM2LXQqKDI0ODIuNDMtdCooNjE2Ny4yNC10Kig2NjE0Ljk0LTI0NzUuNjcqdCkpKSkpKSkrIikifSxWYj1rcChPYSgzMDAsLjUsMCksT2EoLTI0MCwuNSwxKSksSGI9a3AoT2EoLTEwMCwuNzUsLjM1KSxPYSg4MCwxLjUsLjgpKSxHYj1rcChPYSgyNjAsLjc1LC4zNSksT2EoODAsMS41LC44KSkscWI9T2EoKSxYYj1mdW5jdGlvbih0KXsodDwwfHx0PjEpJiYodC09TWF0aC5mbG9vcih0KSk7dmFyIGU9TWF0aC5hYnModC0uNSk7cmV0dXJuIHFiLmg9MzYwKnQtMTAwLHFiLnM9MS41LTEuNSplLHFiLmw9LjgtLjkqZSxxYisiIn0sWmI9R2UoKSxKYj1NYXRoLlBJLzMsUWI9MipNYXRoLlBJLzMsS2I9ZnVuY3Rpb24odCl7dmFyIGU7cmV0dXJuIHQ9KC41LXQpKk1hdGguUEksWmIucj0yNTUqKGU9TWF0aC5zaW4odCkpKmUsWmIuZz0yNTUqKGU9TWF0aC5zaW4odCtKYikpKmUsWmIuYj0yNTUqKGU9TWF0aC5zaW4odCtRYikpKmUsWmIrIiJ9LHR4PWZ1bmN0aW9uKHQpe3JldHVybiB0PU1hdGgubWF4KDAsTWF0aC5taW4oMSx0KSksInJnYigiK01hdGgubWF4KDAsTWF0aC5taW4oMjU1LE1hdGgucm91bmQoMzQuNjErdCooMTE3Mi4zMy10KigxMDc5My41Ni10KigzMzMwMC4xMi10KigzODM5NC40OS0xNDgyNS4wNSp0KSkpKSkpKSsiLCAiK01hdGgubWF4KDAsTWF0aC5taW4oMjU1LE1hdGgucm91bmQoMjMuMzErdCooNTU3LjMzK3QqKDEyMjUuMzMtdCooMzU3NC45Ni10KigxMDczLjc3KzcwNy41Nip0KSkpKSkpKSsiLCAiK01hdGgubWF4KDAsTWF0aC5taW4oMjU1LE1hdGgucm91bmQoMjcuMit0KigzMjExLjEtdCooMTUzMjcuOTctdCooMjc4MTQtdCooMjI1NjkuMTgtNjgzOC42Nip0KSkpKSkpKSsiKSJ9O2Z1bmN0aW9uIGV4KHQpe3ZhciBlPXQubGVuZ3RoO3JldHVybiBmdW5jdGlvbihuKXtyZXR1cm4gdFtNYXRoLm1heCgwLE1hdGgubWluKGUtMSxNYXRoLmZsb29yKG4qZSkpKV19fXZhciBueD1leChObSgiNDQwMTU0NDQwMjU2NDUwNDU3NDUwNTU5NDYwNzVhNDYwODVjNDYwYTVkNDYwYjVlNDcwZDYwNDcwZTYxNDcxMDYzNDcxMTY0NDcxMzY1NDgxNDY3NDgxNjY4NDgxNzY5NDgxODZhNDgxYTZjNDgxYjZkNDgxYzZlNDgxZDZmNDgxZjcwNDgyMDcxNDgyMTczNDgyMzc0NDgyNDc1NDgyNTc2NDgyNjc3NDgyODc4NDgyOTc5NDcyYTdhNDcyYzdhNDcyZDdiNDcyZTdjNDcyZjdkNDYzMDdlNDYzMjdlNDYzMzdmNDYzNDgwNDUzNTgxNDUzNzgxNDUzODgyNDQzOTgzNDQzYTgzNDQzYjg0NDMzZDg0NDMzZTg1NDIzZjg1NDI0MDg2NDI0MTg2NDE0Mjg3NDE0NDg3NDA0NTg4NDA0Njg4M2Y0Nzg4M2Y0ODg5M2U0OTg5M2U0YTg5M2U0YzhhM2Q0ZDhhM2Q0ZThhM2M0ZjhhM2M1MDhiM2I1MThiM2I1MjhiM2E1MzhiM2E1NDhjMzk1NThjMzk1NjhjMzg1ODhjMzg1OThjMzc1YThjMzc1YjhkMzY1YzhkMzY1ZDhkMzU1ZThkMzU1ZjhkMzQ2MDhkMzQ2MThkMzM2MjhkMzM2MzhkMzI2NDhlMzI2NThlMzE2NjhlMzE2NzhlMzE2ODhlMzA2OThlMzA2YThlMmY2YjhlMmY2YzhlMmU2ZDhlMmU2ZThlMmU2ZjhlMmQ3MDhlMmQ3MThlMmM3MThlMmM3MjhlMmM3MzhlMmI3NDhlMmI3NThlMmE3NjhlMmE3NzhlMmE3ODhlMjk3OThlMjk3YThlMjk3YjhlMjg3YzhlMjg3ZDhlMjc3ZThlMjc3ZjhlMjc4MDhlMjY4MThlMjY4MjhlMjY4MjhlMjU4MzhlMjU4NDhlMjU4NThlMjQ4NjhlMjQ4NzhlMjM4ODhlMjM4OThlMjM4YThkMjI4YjhkMjI4YzhkMjI4ZDhkMjE4ZThkMjE4ZjhkMjE5MDhkMjE5MThjMjA5MjhjMjA5MjhjMjA5MzhjMWY5NDhjMWY5NThiMWY5NjhiMWY5NzhiMWY5ODhiMWY5OThhMWY5YThhMWU5YjhhMWU5Yzg5MWU5ZDg5MWY5ZTg5MWY5Zjg4MWZhMDg4MWZhMTg4MWZhMTg3MWZhMjg3MjBhMzg2MjBhNDg2MjFhNTg1MjFhNjg1MjJhNzg1MjJhODg0MjNhOTgzMjRhYTgzMjVhYjgyMjVhYzgyMjZhZDgxMjdhZDgxMjhhZTgwMjlhZjdmMmFiMDdmMmNiMTdlMmRiMjdkMmViMzdjMmZiNDdjMzFiNTdiMzJiNjdhMzRiNjc5MzViNzc5MzdiODc4MzhiOTc3M2FiYTc2M2JiYjc1M2RiYzc0M2ZiYzczNDBiZDcyNDJiZTcxNDRiZjcwNDZjMDZmNDhjMTZlNGFjMTZkNGNjMjZjNGVjMzZiNTBjNDZhNTJjNTY5NTRjNTY4NTZjNjY3NThjNzY1NWFjODY0NWNjODYzNWVjOTYyNjBjYTYwNjNjYjVmNjVjYjVlNjdjYzVjNjljZDViNmNjZDVhNmVjZTU4NzBjZjU3NzNkMDU2NzVkMDU0NzdkMTUzN2FkMTUxN2NkMjUwN2ZkMzRlODFkMzRkODRkNDRiODZkNTQ5ODlkNTQ4OGJkNjQ2OGVkNjQ1OTBkNzQzOTNkNzQxOTVkODQwOThkODNlOWJkOTNjOWRkOTNiYTBkYTM5YTJkYTM3YTVkYjM2YThkYjM0YWFkYzMyYWRkYzMwYjBkZDJmYjJkZDJkYjVkZTJiYjhkZTI5YmFkZTI4YmRkZjI2YzBkZjI1YzJkZjIzYzVlMDIxYzhlMDIwY2FlMTFmY2RlMTFkZDBlMTFjZDJlMjFiZDVlMjFhZDhlMjE5ZGFlMzE5ZGRlMzE4ZGZlMzE4ZTJlNDE4ZTVlNDE5ZTdlNDE5ZWFlNTFhZWNlNTFiZWZlNTFjZjFlNTFkZjRlNjFlZjZlNjIwZjhlNjIxZmJlNzIzZmRlNzI1IikpLHJ4PWV4KE5tKCIwMDAwMDQwMTAwMDUwMTAxMDYwMTAxMDgwMjAxMDkwMjAyMGIwMjAyMGQwMzAzMGYwMzAzMTIwNDA0MTQwNTA0MTYwNjA1MTgwNjA1MWEwNzA2MWMwODA3MWUwOTA3MjAwYTA4MjIwYjA5MjQwYzA5MjYwZDBhMjkwZTBiMmIxMDBiMmQxMTBjMmYxMjBkMzExMzBkMzQxNDBlMzYxNTBlMzgxNjBmM2IxODBmM2QxOTEwM2YxYTEwNDIxYzEwNDQxZDExNDcxZTExNDkyMDExNGIyMTExNGUyMjExNTAyNDEyNTMyNTEyNTUyNzEyNTgyOTExNWEyYTExNWMyYzExNWYyZDExNjEyZjExNjMzMTExNjUzMzEwNjczNDEwNjkzNjEwNmIzODEwNmMzOTBmNmUzYjBmNzAzZDBmNzEzZjBmNzI0MDBmNzQ0MjBmNzU0NDBmNzY0NTEwNzc0NzEwNzg0OTEwNzg0YTEwNzk0YzExN2E0ZTExN2I0ZjEyN2I1MTEyN2M1MjEzN2M1NDEzN2Q1NjE0N2Q1NzE1N2U1OTE1N2U1YTE2N2U1YzE2N2Y1ZDE3N2Y1ZjE4N2Y2MDE4ODA2MjE5ODA2NDFhODA2NTFhODA2NzFiODA2ODFjODE2YTFjODE2YjFkODE2ZDFkODE2ZTFlODE3MDFmODE3MjFmODE3MzIwODE3NTIxODE3NjIxODE3ODIyODE3OTIyODI3YjIzODI3YzIzODI3ZTI0ODI4MDI1ODI4MTI1ODE4MzI2ODE4NDI2ODE4NjI3ODE4ODI3ODE4OTI4ODE4YjI5ODE4YzI5ODE4ZTJhODE5MDJhODE5MTJiODE5MzJiODA5NDJjODA5NjJjODA5ODJkODA5OTJkODA5YjJlN2Y5YzJlN2Y5ZTJmN2ZhMDJmN2ZhMTMwN2VhMzMwN2VhNTMxN2VhNjMxN2RhODMyN2RhYTMzN2RhYjMzN2NhZDM0N2NhZTM0N2JiMDM1N2JiMjM1N2JiMzM2N2FiNTM2N2FiNzM3NzliODM3NzliYTM4NzhiYzM5NzhiZDM5NzdiZjNhNzdjMDNhNzZjMjNiNzVjNDNjNzVjNTNjNzRjNzNkNzNjODNlNzNjYTNlNzJjYzNmNzFjZDQwNzFjZjQwNzBkMDQxNmZkMjQyNmZkMzQzNmVkNTQ0NmRkNjQ1NmNkODQ1NmNkOTQ2NmJkYjQ3NmFkYzQ4NjlkZTQ5NjhkZjRhNjhlMDRjNjdlMjRkNjZlMzRlNjVlNDRmNjRlNTUwNjRlNzUyNjNlODUzNjJlOTU0NjJlYTU2NjFlYjU3NjBlYzU4NjBlZDVhNWZlZTViNWVlZjVkNWVmMDVmNWVmMTYwNWRmMjYyNWRmMjY0NWNmMzY1NWNmNDY3NWNmNDY5NWNmNTZiNWNmNjZjNWNmNjZlNWNmNzcwNWNmNzcyNWNmODc0NWNmODc2NWNmOTc4NWRmOTc5NWRmOTdiNWRmYTdkNWVmYTdmNWVmYTgxNWZmYjgzNWZmYjg1NjBmYjg3NjFmYzg5NjFmYzhhNjJmYzhjNjNmYzhlNjRmYzkwNjVmZDkyNjZmZDk0NjdmZDk2NjhmZDk4NjlmZDlhNmFmZDliNmJmZTlkNmNmZTlmNmRmZWExNmVmZWEzNmZmZWE1NzFmZWE3NzJmZWE5NzNmZWFhNzRmZWFjNzZmZWFlNzdmZWIwNzhmZWIyN2FmZWI0N2JmZWI2N2NmZWI3N2VmZWI5N2ZmZWJiODFmZWJkODJmZWJmODRmZWMxODVmZWMyODdmZWM0ODhmZWM2OGFmZWM4OGNmZWNhOGRmZWNjOGZmZWNkOTBmZWNmOTJmZWQxOTRmZWQzOTVmZWQ1OTdmZWQ3OTlmZWQ4OWFmZGRhOWNmZGRjOWVmZGRlYTBmZGUwYTFmZGUyYTNmZGUzYTVmZGU1YTdmZGU3YTlmZGU5YWFmZGViYWNmY2VjYWVmY2VlYjBmY2YwYjJmY2YyYjRmY2Y0YjZmY2Y2YjhmY2Y3YjlmY2Y5YmJmY2ZiYmRmY2ZkYmYiKSksaXg9ZXgoTm0oIjAwMDAwNDAxMDAwNTAxMDEwNjAxMDEwODAyMDEwYTAyMDIwYzAyMDIwZTAzMDIxMDA0MDMxMjA0MDMxNDA1MDQxNzA2MDQxOTA3MDUxYjA4MDUxZDA5MDYxZjBhMDcyMjBiMDcyNDBjMDgyNjBkMDgyOTBlMDkyYjEwMDkyZDExMGEzMDEyMGEzMjE0MGIzNDE1MGIzNzE2MGIzOTE4MGMzYzE5MGMzZTFiMGM0MTFjMGM0MzFlMGM0NTFmMGM0ODIxMGM0YTIzMGM0YzI0MGM0ZjI2MGM1MTI4MGI1MzI5MGI1NTJiMGI1NzJkMGI1OTJmMGE1YjMxMGE1YzMyMGE1ZTM0MGE1ZjM2MDk2MTM4MDk2MjM5MDk2MzNiMDk2NDNkMDk2NTNlMDk2NjQwMGE2NzQyMGE2ODQ0MGE2ODQ1MGE2OTQ3MGI2YTQ5MGI2YTRhMGM2YjRjMGM2YjRkMGQ2YzRmMGQ2YzUxMGU2YzUyMGU2ZDU0MGY2ZDU1MGY2ZDU3MTA2ZTU5MTA2ZTVhMTE2ZTVjMTI2ZTVkMTI2ZTVmMTM2ZTYxMTM2ZTYyMTQ2ZTY0MTU2ZTY1MTU2ZTY3MTY2ZTY5MTY2ZTZhMTc2ZTZjMTg2ZTZkMTg2ZTZmMTk2ZTcxMTk2ZTcyMWE2ZTc0MWE2ZTc1MWI2ZTc3MWM2ZDc4MWM2ZDdhMWQ2ZDdjMWQ2ZDdkMWU2ZDdmMWU2YzgwMWY2YzgyMjA2Yzg0MjA2Yjg1MjE2Yjg3MjE2Yjg4MjI2YThhMjI2YThjMjM2OThkMjM2OThmMjQ2OTkwMjU2ODkyMjU2ODkzMjY2Nzk1MjY2Nzk3Mjc2Njk4Mjc2NjlhMjg2NTliMjk2NDlkMjk2NDlmMmE2M2EwMmE2M2EyMmI2MmEzMmM2MWE1MmM2MGE2MmQ2MGE4MmU1ZmE5MmU1ZWFiMmY1ZWFkMzA1ZGFlMzA1Y2IwMzE1YmIxMzI1YWIzMzI1YWI0MzM1OWI2MzQ1OGI3MzU1N2I5MzU1NmJhMzY1NWJjMzc1NGJkMzg1M2JmMzk1MmMwM2E1MWMxM2E1MGMzM2I0ZmM0M2M0ZWM2M2Q0ZGM3M2U0Y2M4M2Y0YmNhNDA0YWNiNDE0OWNjNDI0OGNlNDM0N2NmNDQ0NmQwNDU0NWQyNDY0NGQzNDc0M2Q0NDg0MmQ1NGE0MWQ3NGIzZmQ4NGMzZWQ5NGQzZGRhNGUzY2RiNTAzYmRkNTEzYWRlNTIzOGRmNTMzN2UwNTUzNmUxNTYzNWUyNTczNGUzNTkzM2U0NWEzMWU1NWMzMGU2NWQyZmU3NWUyZWU4NjAyZGU5NjEyYmVhNjMyYWViNjQyOWViNjYyOGVjNjcyNmVkNjkyNWVlNmEyNGVmNmMyM2VmNmUyMWYwNmYyMGYxNzExZmYxNzMxZGYyNzQxY2YzNzYxYmYzNzgxOWY0NzkxOGY1N2IxN2Y1N2QxNWY2N2UxNGY2ODAxM2Y3ODIxMmY3ODQxMGY4ODUwZmY4ODcwZWY4ODkwY2Y5OGIwYmY5OGMwYWY5OGUwOWZhOTAwOGZhOTIwN2ZhOTQwN2ZiOTYwNmZiOTcwNmZiOTkwNmZiOWIwNmZiOWQwN2ZjOWYwN2ZjYTEwOGZjYTMwOWZjYTUwYWZjYTYwY2ZjYTgwZGZjYWEwZmZjYWMxMWZjYWUxMmZjYjAxNGZjYjIxNmZjYjQxOGZiYjYxYWZiYjgxZGZiYmExZmZiYmMyMWZiYmUyM2ZhYzAyNmZhYzIyOGZhYzQyYWZhYzYyZGY5YzcyZmY5YzkzMmY5Y2IzNWY4Y2QzN2Y4Y2YzYWY3ZDEzZGY3ZDM0MGY2ZDU0M2Y2ZDc0NmY1ZDk0OWY1ZGI0Y2Y0ZGQ0ZmY0ZGY1M2Y0ZTE1NmYzZTM1YWYzZTU1ZGYyZTY2MWYyZTg2NWYyZWE2OWYxZWM2ZGYxZWQ3MWYxZWY3NWYxZjE3OWYyZjI3ZGYyZjQ4MmYzZjU4NmYzZjY4YWY0Zjg4ZWY1Zjk5MmY2ZmE5NmY4ZmI5YWY5ZmM5ZGZhZmRhMWZjZmZhNCIpKSxheD1leChObSgiMGQwODg3MTAwNzg4MTMwNzg5MTYwNzhhMTkwNjhjMWIwNjhkMWQwNjhlMjAwNjhmMjIwNjkwMjQwNjkxMjYwNTkxMjgwNTkyMmEwNTkzMmMwNTk0MmUwNTk1MmYwNTk2MzEwNTk3MzMwNTk3MzUwNDk4MzcwNDk5MzgwNDlhM2EwNDlhM2MwNDliM2UwNDljM2YwNDljNDEwNDlkNDMwMzllNDQwMzllNDYwMzlmNDgwMzlmNDkwM2EwNGIwM2ExNGMwMmExNGUwMmEyNTAwMmEyNTEwMmEzNTMwMmEzNTUwMmE0NTYwMWE0NTgwMWE0NTkwMWE1NWIwMWE1NWMwMWE2NWUwMWE2NjAwMWE2NjEwMGE3NjMwMGE3NjQwMGE3NjYwMGE3NjcwMGE4NjkwMGE4NmEwMGE4NmMwMGE4NmUwMGE4NmYwMGE4NzEwMGE4NzIwMWE4NzQwMWE4NzUwMWE4NzcwMWE4NzgwMWE4N2EwMmE4N2IwMmE4N2QwM2E4N2UwM2E4ODAwNGE4ODEwNGE3ODMwNWE3ODQwNWE3ODYwNmE2ODcwN2E2ODgwOGE2OGEwOWE1OGIwYWE1OGQwYmE1OGUwY2E0OGYwZGE0OTEwZWEzOTIwZmEzOTQxMGEyOTUxMWExOTYxM2ExOTgxNGEwOTkxNTlmOWExNjlmOWMxNzllOWQxODlkOWUxOTlkYTAxYTljYTExYjliYTIxZDlhYTMxZTlhYTUxZjk5YTYyMDk4YTcyMTk3YTgyMjk2YWEyMzk1YWIyNDk0YWMyNjk0YWQyNzkzYWUyODkyYjAyOTkxYjEyYTkwYjIyYjhmYjMyYzhlYjQyZThkYjUyZjhjYjYzMDhiYjczMThhYjgzMjg5YmEzMzg4YmIzNDg4YmMzNTg3YmQzNzg2YmUzODg1YmYzOTg0YzAzYTgzYzEzYjgyYzIzYzgxYzMzZDgwYzQzZTdmYzU0MDdlYzY0MTdkYzc0MjdjYzg0MzdiYzk0NDdhY2E0NTdhY2I0Njc5Y2M0Nzc4Y2M0OTc3Y2Q0YTc2Y2U0Yjc1Y2Y0Yzc0ZDA0ZDczZDE0ZTcyZDI0ZjcxZDM1MTcxZDQ1MjcwZDU1MzZmZDU1NDZlZDY1NTZkZDc1NjZjZDg1NzZiZDk1ODZhZGE1YTZhZGE1YjY5ZGI1YzY4ZGM1ZDY3ZGQ1ZTY2ZGU1ZjY1ZGU2MTY0ZGY2MjYzZTA2MzYzZTE2NDYyZTI2NTYxZTI2NjYwZTM2ODVmZTQ2OTVlZTU2YTVkZTU2YjVkZTY2YzVjZTc2ZTViZTc2ZjVhZTg3MDU5ZTk3MTU4ZTk3MjU3ZWE3NDU3ZWI3NTU2ZWI3NjU1ZWM3NzU0ZWQ3OTUzZWQ3YTUyZWU3YjUxZWY3YzUxZWY3ZTUwZjA3ZjRmZjA4MDRlZjE4MTRkZjE4MzRjZjI4NDRiZjM4NTRiZjM4NzRhZjQ4ODQ5ZjQ4OTQ4ZjU4YjQ3ZjU4YzQ2ZjY4ZDQ1ZjY4ZjQ0Zjc5MDQ0Zjc5MTQzZjc5MzQyZjg5NDQxZjg5NTQwZjk5NzNmZjk5ODNlZjk5YTNlZmE5YjNkZmE5YzNjZmE5ZTNiZmI5ZjNhZmJhMTM5ZmJhMjM4ZmNhMzM4ZmNhNTM3ZmNhNjM2ZmNhODM1ZmNhOTM0ZmRhYjMzZmRhYzMzZmRhZTMyZmRhZjMxZmRiMTMwZmRiMjJmZmRiNDJmZmRiNTJlZmViNzJkZmViODJjZmViYTJjZmViYjJiZmViZDJhZmViZTJhZmVjMDI5ZmRjMjI5ZmRjMzI4ZmRjNTI3ZmRjNjI3ZmRjODI3ZmRjYTI2ZmRjYjI2ZmNjZDI1ZmNjZTI1ZmNkMDI1ZmNkMjI1ZmJkMzI0ZmJkNTI0ZmJkNzI0ZmFkODI0ZmFkYTI0ZjlkYzI0ZjlkZDI1ZjhkZjI1ZjhlMTI1ZjdlMjI1ZjdlNDI1ZjZlNjI2ZjZlODI2ZjVlOTI2ZjVlYjI3ZjRlZDI3ZjNlZTI3ZjNmMDI3ZjJmMjI3ZjFmNDI2ZjFmNTI1ZjBmNzI0ZjBmOTIxIikpLG94PWZ1bmN0aW9uKHQpe3JldHVybiBrZShuZSh0KS5jYWxsKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCkpfSxzeD0wO2Z1bmN0aW9uIGN4KCl7cmV0dXJuIG5ldyB1eH1mdW5jdGlvbiB1eCgpe3RoaXMuXz0iQCIrKCsrc3gpLnRvU3RyaW5nKDM2KX11eC5wcm90b3R5cGU9Y3gucHJvdG90eXBlPXtjb25zdHJ1Y3Rvcjp1eCxnZXQ6ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXRoaXMuXzshKGUgaW4gdCk7KWlmKCEodD10LnBhcmVudE5vZGUpKXJldHVybjtyZXR1cm4gdFtlXX0sc2V0OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRbdGhpcy5fXT1lfSxyZW1vdmU6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuXyBpbiB0JiZkZWxldGUgdFt0aGlzLl9dfSx0b1N0cmluZzpmdW5jdGlvbigpe3JldHVybiB0aGlzLl99fTt2YXIgbHg9ZnVuY3Rpb24odCl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiB0P25ldyBiZShbZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCh0KV0sW2RvY3VtZW50LmRvY3VtZW50RWxlbWVudF0pOm5ldyBiZShbbnVsbD09dD9bXTp0XSxtZSl9LGh4PWZ1bmN0aW9uKHQsZSl7bnVsbD09ZSYmKGU9TW4oKS50b3VjaGVzKTtmb3IodmFyIG49MCxyPWU/ZS5sZW5ndGg6MCxpPW5ldyBBcnJheShyKTtuPHI7KytuKWlbbl09T24odCxlW25dKTtyZXR1cm4gaX0sZng9ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHR9fSxkeD1NYXRoLmFicyxweD1NYXRoLmF0YW4yLGd4PU1hdGguY29zLHl4PU1hdGgubWF4LHZ4PU1hdGgubWluLG14PU1hdGguc2luLGJ4PU1hdGguc3FydCx4eD1NYXRoLlBJLF94PXh4LzIsa3g9Mip4eDtmdW5jdGlvbiB3eCh0KXtyZXR1cm4gdD4xPzA6dDwtMT94eDpNYXRoLmFjb3ModCl9ZnVuY3Rpb24gRXgodCl7cmV0dXJuIHQ+PTE/X3g6dDw9LTE/LV94Ok1hdGguYXNpbih0KX1mdW5jdGlvbiBUeCh0KXtyZXR1cm4gdC5pbm5lclJhZGl1c31mdW5jdGlvbiBDeCh0KXtyZXR1cm4gdC5vdXRlclJhZGl1c31mdW5jdGlvbiBTeCh0KXtyZXR1cm4gdC5zdGFydEFuZ2xlfWZ1bmN0aW9uIEF4KHQpe3JldHVybiB0LmVuZEFuZ2xlfWZ1bmN0aW9uIE14KHQpe3JldHVybiB0JiZ0LnBhZEFuZ2xlfWZ1bmN0aW9uIE94KHQsZSxuLHIsaSxhLG8scyl7dmFyIGM9bi10LHU9ci1lLGw9by1pLGg9cy1hLGY9aCpjLWwqdTtpZighKGYqZjwxZS0xMikpcmV0dXJuW3QrKGY9KGwqKGUtYSktaCoodC1pKSkvZikqYyxlK2YqdV19ZnVuY3Rpb24gRHgodCxlLG4scixpLGEsbyl7dmFyIHM9dC1uLGM9ZS1yLHU9KG8/YTotYSkvYngocypzK2MqYyksbD11KmMsaD0tdSpzLGY9dCtsLGQ9ZStoLHA9bitsLGc9citoLHk9KGYrcCkvMix2PShkK2cpLzIsbT1wLWYsYj1nLWQseD1tKm0rYipiLF89aS1hLGs9ZipnLXAqZCx3PShiPDA/LTE6MSkqYngoeXgoMCxfKl8qeC1rKmspKSxFPShrKmItbSp3KS94LFQ9KC1rKm0tYip3KS94LEM9KGsqYittKncpL3gsUz0oLWsqbStiKncpL3gsQT1FLXksTT1ULXYsTz1DLXksRD1TLXY7cmV0dXJuIEEqQStNKk0+TypPK0QqRCYmKEU9QyxUPVMpLHtjeDpFLGN5OlQseDAxOi1sLHkwMTotaCx4MTE6RSooaS9fLTEpLHkxMTpUKihpL18tMSl9fXZhciBOeD1mdW5jdGlvbigpe3ZhciB0PVR4LGU9Q3gsbj1meCgwKSxyPW51bGwsaT1TeCxhPUF4LG89TXgscz1udWxsO2Z1bmN0aW9uIGMoKXt2YXIgYyx1LGw9K3QuYXBwbHkodGhpcyxhcmd1bWVudHMpLGg9K2UuYXBwbHkodGhpcyxhcmd1bWVudHMpLGY9aS5hcHBseSh0aGlzLGFyZ3VtZW50cyktX3gsZD1hLmFwcGx5KHRoaXMsYXJndW1lbnRzKS1feCxwPWR4KGQtZiksZz1kPmY7aWYoc3x8KHM9Yz1VaSgpKSxoPGwmJih1PWgsaD1sLGw9dSksaD4xZS0xMilpZihwPmt4LTFlLTEyKXMubW92ZVRvKGgqZ3goZiksaCpteChmKSkscy5hcmMoMCwwLGgsZixkLCFnKSxsPjFlLTEyJiYocy5tb3ZlVG8obCpneChkKSxsKm14KGQpKSxzLmFyYygwLDAsbCxkLGYsZykpO2Vsc2V7dmFyIHksdixtPWYsYj1kLHg9ZixfPWQsaz1wLHc9cCxFPW8uYXBwbHkodGhpcyxhcmd1bWVudHMpLzIsVD1FPjFlLTEyJiYocj8rci5hcHBseSh0aGlzLGFyZ3VtZW50cyk6YngobCpsK2gqaCkpLEM9dngoZHgoaC1sKS8yLCtuLmFwcGx5KHRoaXMsYXJndW1lbnRzKSksUz1DLEE9QztpZihUPjFlLTEyKXt2YXIgTT1FeChUL2wqbXgoRSkpLE89RXgoVC9oKm14KEUpKTsoay09MipNKT4xZS0xMj8oeCs9TSo9Zz8xOi0xLF8tPU0pOihrPTAseD1fPShmK2QpLzIpLCh3LT0yKk8pPjFlLTEyPyhtKz1PKj1nPzE6LTEsYi09Tyk6KHc9MCxtPWI9KGYrZCkvMil9dmFyIEQ9aCpneChtKSxOPWgqbXgobSksQj1sKmd4KF8pLEw9bCpteChfKTtpZihDPjFlLTEyKXt2YXIgRixQPWgqZ3goYiksST1oKm14KGIpLGo9bCpneCh4KSxSPWwqbXgoeCk7aWYocDx4eCYmKEY9T3goRCxOLGosUixQLEksQixMKSkpe3ZhciBZPUQtRlswXSx6PU4tRlsxXSxVPVAtRlswXSwkPUktRlsxXSxXPTEvbXgod3goKFkqVSt6KiQpLyhieChZKlkreip6KSpieChVKlUrJCokKSkpLzIpLFY9YngoRlswXSpGWzBdK0ZbMV0qRlsxXSk7Uz12eChDLChsLVYpLyhXLTEpKSxBPXZ4KEMsKGgtVikvKFcrMSkpfX13PjFlLTEyP0E+MWUtMTI/KHk9RHgoaixSLEQsTixoLEEsZyksdj1EeChQLEksQixMLGgsQSxnKSxzLm1vdmVUbyh5LmN4K3kueDAxLHkuY3kreS55MDEpLEE8Qz9zLmFyYyh5LmN4LHkuY3ksQSxweCh5LnkwMSx5LngwMSkscHgodi55MDEsdi54MDEpLCFnKToocy5hcmMoeS5jeCx5LmN5LEEscHgoeS55MDEseS54MDEpLHB4KHkueTExLHkueDExKSwhZykscy5hcmMoMCwwLGgscHgoeS5jeSt5LnkxMSx5LmN4K3kueDExKSxweCh2LmN5K3YueTExLHYuY3grdi54MTEpLCFnKSxzLmFyYyh2LmN4LHYuY3ksQSxweCh2LnkxMSx2LngxMSkscHgodi55MDEsdi54MDEpLCFnKSkpOihzLm1vdmVUbyhELE4pLHMuYXJjKDAsMCxoLG0sYiwhZykpOnMubW92ZVRvKEQsTiksbD4xZS0xMiYmaz4xZS0xMj9TPjFlLTEyPyh5PUR4KEIsTCxQLEksbCwtUyxnKSx2PUR4KEQsTixqLFIsbCwtUyxnKSxzLmxpbmVUbyh5LmN4K3kueDAxLHkuY3kreS55MDEpLFM8Qz9zLmFyYyh5LmN4LHkuY3ksUyxweCh5LnkwMSx5LngwMSkscHgodi55MDEsdi54MDEpLCFnKToocy5hcmMoeS5jeCx5LmN5LFMscHgoeS55MDEseS54MDEpLHB4KHkueTExLHkueDExKSwhZykscy5hcmMoMCwwLGwscHgoeS5jeSt5LnkxMSx5LmN4K3kueDExKSxweCh2LmN5K3YueTExLHYuY3grdi54MTEpLGcpLHMuYXJjKHYuY3gsdi5jeSxTLHB4KHYueTExLHYueDExKSxweCh2LnkwMSx2LngwMSksIWcpKSk6cy5hcmMoMCwwLGwsXyx4LGcpOnMubGluZVRvKEIsTCl9ZWxzZSBzLm1vdmVUbygwLDApO2lmKHMuY2xvc2VQYXRoKCksYylyZXR1cm4gcz1udWxsLGMrIiJ8fG51bGx9cmV0dXJuIGMuY2VudHJvaWQ9ZnVuY3Rpb24oKXt2YXIgbj0oK3QuYXBwbHkodGhpcyxhcmd1bWVudHMpKyArZS5hcHBseSh0aGlzLGFyZ3VtZW50cykpLzIscj0oK2kuYXBwbHkodGhpcyxhcmd1bWVudHMpKyArYS5hcHBseSh0aGlzLGFyZ3VtZW50cykpLzIteHgvMjtyZXR1cm5bZ3gocikqbixteChyKSpuXX0sYy5pbm5lclJhZGl1cz1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD0iZnVuY3Rpb24iPT10eXBlb2YgZT9lOmZ4KCtlKSxjKTp0fSxjLm91dGVyUmFkaXVzPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6ZngoK3QpLGMpOmV9LGMuY29ybmVyUmFkaXVzPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6ZngoK3QpLGMpOm59LGMucGFkUmFkaXVzPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPW51bGw9PXQ/bnVsbDoiZnVuY3Rpb24iPT10eXBlb2YgdD90OmZ4KCt0KSxjKTpyfSxjLnN0YXJ0QW5nbGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpmeCgrdCksYyk6aX0sYy5lbmRBbmdsZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT0iZnVuY3Rpb24iPT10eXBlb2YgdD90OmZ4KCt0KSxjKTphfSxjLnBhZEFuZ2xlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6ZngoK3QpLGMpOm99LGMuY29udGV4dD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocz1udWxsPT10P251bGw6dCxjKTpzfSxjfTtmdW5jdGlvbiBCeCh0KXt0aGlzLl9jb250ZXh0PXR9QngucHJvdG90eXBlPXthcmVhU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPTB9LGFyZWFFbmQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPU5hTn0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpeyh0aGlzLl9saW5lfHwwIT09dGhpcy5fbGluZSYmMT09PXRoaXMuX3BvaW50KSYmdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKSx0aGlzLl9saW5lPTEtdGhpcy5fbGluZX0scG9pbnQ6ZnVuY3Rpb24odCxlKXtzd2l0Y2godD0rdCxlPStlLHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fcG9pbnQ9MSx0aGlzLl9saW5lP3RoaXMuX2NvbnRleHQubGluZVRvKHQsZSk6dGhpcy5fY29udGV4dC5tb3ZlVG8odCxlKTticmVhaztjYXNlIDE6dGhpcy5fcG9pbnQ9MjtkZWZhdWx0OnRoaXMuX2NvbnRleHQubGluZVRvKHQsZSl9fX07dmFyIEx4PWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgQngodCl9O2Z1bmN0aW9uIEZ4KHQpe3JldHVybiB0WzBdfWZ1bmN0aW9uIFB4KHQpe3JldHVybiB0WzFdfXZhciBJeD1mdW5jdGlvbigpe3ZhciB0PUZ4LGU9UHgsbj1meCghMCkscj1udWxsLGk9THgsYT1udWxsO2Z1bmN0aW9uIG8obyl7dmFyIHMsYyx1LGw9by5sZW5ndGgsaD0hMTtmb3IobnVsbD09ciYmKGE9aSh1PVVpKCkpKSxzPTA7czw9bDsrK3MpIShzPGwmJm4oYz1vW3NdLHMsbykpPT09aCYmKChoPSFoKT9hLmxpbmVTdGFydCgpOmEubGluZUVuZCgpKSxoJiZhLnBvaW50KCt0KGMscyxvKSwrZShjLHMsbykpO2lmKHUpcmV0dXJuIGE9bnVsbCx1KyIifHxudWxsfXJldHVybiBvLng9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9ImZ1bmN0aW9uIj09dHlwZW9mIGU/ZTpmeCgrZSksbyk6dH0sby55PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6ZngoK3QpLG8pOmV9LG8uZGVmaW5lZD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj0iZnVuY3Rpb24iPT10eXBlb2YgdD90OmZ4KCEhdCksbyk6bn0sby5jdXJ2ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT10LG51bGwhPXImJihhPWkocikpLG8pOml9LG8uY29udGV4dD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obnVsbD09dD9yPWE9bnVsbDphPWkocj10KSxvKTpyfSxvfSxqeD1mdW5jdGlvbigpe3ZhciB0PUZ4LGU9bnVsbCxuPWZ4KDApLHI9UHgsaT1meCghMCksYT1udWxsLG89THgscz1udWxsO2Z1bmN0aW9uIGMoYyl7dmFyIHUsbCxoLGYsZCxwPWMubGVuZ3RoLGc9ITEseT1uZXcgQXJyYXkocCksdj1uZXcgQXJyYXkocCk7Zm9yKG51bGw9PWEmJihzPW8oZD1VaSgpKSksdT0wO3U8PXA7Kyt1KXtpZighKHU8cCYmaShmPWNbdV0sdSxjKSk9PT1nKWlmKGc9IWcpbD11LHMuYXJlYVN0YXJ0KCkscy5saW5lU3RhcnQoKTtlbHNle2ZvcihzLmxpbmVFbmQoKSxzLmxpbmVTdGFydCgpLGg9dS0xO2g+PWw7LS1oKXMucG9pbnQoeVtoXSx2W2hdKTtzLmxpbmVFbmQoKSxzLmFyZWFFbmQoKX1nJiYoeVt1XT0rdChmLHUsYyksdlt1XT0rbihmLHUsYykscy5wb2ludChlPytlKGYsdSxjKTp5W3VdLHI/K3IoZix1LGMpOnZbdV0pKX1pZihkKXJldHVybiBzPW51bGwsZCsiInx8bnVsbH1mdW5jdGlvbiB1KCl7cmV0dXJuIEl4KCkuZGVmaW5lZChpKS5jdXJ2ZShvKS5jb250ZXh0KGEpfXJldHVybiBjLng9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9ImZ1bmN0aW9uIj09dHlwZW9mIG4/bjpmeCgrbiksZT1udWxsLGMpOnR9LGMueDA9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9ImZ1bmN0aW9uIj09dHlwZW9mIGU/ZTpmeCgrZSksYyk6dH0sYy54MT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT1udWxsPT10P251bGw6ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpmeCgrdCksYyk6ZX0sYy55PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6ZngoK3QpLHI9bnVsbCxjKTpufSxjLnkwPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6ZngoK3QpLGMpOm59LGMueTE9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9bnVsbD09dD9udWxsOiJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6ZngoK3QpLGMpOnJ9LGMubGluZVgwPWMubGluZVkwPWZ1bmN0aW9uKCl7cmV0dXJuIHUoKS54KHQpLnkobil9LGMubGluZVkxPWZ1bmN0aW9uKCl7cmV0dXJuIHUoKS54KHQpLnkocil9LGMubGluZVgxPWZ1bmN0aW9uKCl7cmV0dXJuIHUoKS54KGUpLnkobil9LGMuZGVmaW5lZD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT0iZnVuY3Rpb24iPT10eXBlb2YgdD90OmZ4KCEhdCksYyk6aX0sYy5jdXJ2ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz10LG51bGwhPWEmJihzPW8oYSkpLGMpOm99LGMuY29udGV4dD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obnVsbD09dD9hPXM9bnVsbDpzPW8oYT10KSxjKTphfSxjfSxSeD1mdW5jdGlvbih0LGUpe3JldHVybiBlPHQ/LTE6ZT50PzE6ZT49dD8wOk5hTn0sWXg9ZnVuY3Rpb24odCl7cmV0dXJuIHR9LHp4PWZ1bmN0aW9uKCl7dmFyIHQ9WXgsZT1SeCxuPW51bGwscj1meCgwKSxpPWZ4KGt4KSxhPWZ4KDApO2Z1bmN0aW9uIG8obyl7dmFyIHMsYyx1LGwsaCxmPW8ubGVuZ3RoLGQ9MCxwPW5ldyBBcnJheShmKSxnPW5ldyBBcnJheShmKSx5PStyLmFwcGx5KHRoaXMsYXJndW1lbnRzKSx2PU1hdGgubWluKGt4LE1hdGgubWF4KC1reCxpLmFwcGx5KHRoaXMsYXJndW1lbnRzKS15KSksbT1NYXRoLm1pbihNYXRoLmFicyh2KS9mLGEuYXBwbHkodGhpcyxhcmd1bWVudHMpKSxiPW0qKHY8MD8tMToxKTtmb3Iocz0wO3M8ZjsrK3MpKGg9Z1twW3NdPXNdPSt0KG9bc10scyxvKSk+MCYmKGQrPWgpO2ZvcihudWxsIT1lP3Auc29ydCgoZnVuY3Rpb24odCxuKXtyZXR1cm4gZShnW3RdLGdbbl0pfSkpOm51bGwhPW4mJnAuc29ydCgoZnVuY3Rpb24odCxlKXtyZXR1cm4gbihvW3RdLG9bZV0pfSkpLHM9MCx1PWQ/KHYtZipiKS9kOjA7czxmOysrcyx5PWwpYz1wW3NdLGw9eSsoKGg9Z1tjXSk+MD9oKnU6MCkrYixnW2NdPXtkYXRhOm9bY10saW5kZXg6cyx2YWx1ZTpoLHN0YXJ0QW5nbGU6eSxlbmRBbmdsZTpsLHBhZEFuZ2xlOm19O3JldHVybiBnfXJldHVybiBvLnZhbHVlPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PSJmdW5jdGlvbiI9PXR5cGVvZiBlP2U6ZngoK2UpLG8pOnR9LG8uc29ydFZhbHVlcz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT10LG49bnVsbCxvKTplfSxvLnNvcnQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49dCxlPW51bGwsbyk6bn0sby5zdGFydEFuZ2xlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6ZngoK3QpLG8pOnJ9LG8uZW5kQW5nbGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpmeCgrdCksbyk6aX0sby5wYWRBbmdsZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT0iZnVuY3Rpb24iPT10eXBlb2YgdD90OmZ4KCt0KSxvKTphfSxvfSxVeD1XeChMeCk7ZnVuY3Rpb24gJHgodCl7dGhpcy5fY3VydmU9dH1mdW5jdGlvbiBXeCh0KXtmdW5jdGlvbiBlKGUpe3JldHVybiBuZXcgJHgodChlKSl9cmV0dXJuIGUuX2N1cnZlPXQsZX1mdW5jdGlvbiBWeCh0KXt2YXIgZT10LmN1cnZlO3JldHVybiB0LmFuZ2xlPXQueCxkZWxldGUgdC54LHQucmFkaXVzPXQueSxkZWxldGUgdC55LHQuY3VydmU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/ZShXeCh0KSk6ZSgpLl9jdXJ2ZX0sdH0keC5wcm90b3R5cGU9e2FyZWFTdGFydDpmdW5jdGlvbigpe3RoaXMuX2N1cnZlLmFyZWFTdGFydCgpfSxhcmVhRW5kOmZ1bmN0aW9uKCl7dGhpcy5fY3VydmUuYXJlYUVuZCgpfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9jdXJ2ZS5saW5lU3RhcnQoKX0sbGluZUVuZDpmdW5jdGlvbigpe3RoaXMuX2N1cnZlLmxpbmVFbmQoKX0scG9pbnQ6ZnVuY3Rpb24odCxlKXt0aGlzLl9jdXJ2ZS5wb2ludChlKk1hdGguc2luKHQpLGUqLU1hdGguY29zKHQpKX19O3ZhciBIeD1mdW5jdGlvbigpe3JldHVybiBWeChJeCgpLmN1cnZlKFV4KSl9LEd4PWZ1bmN0aW9uKCl7dmFyIHQ9angoKS5jdXJ2ZShVeCksZT10LmN1cnZlLG49dC5saW5lWDAscj10LmxpbmVYMSxpPXQubGluZVkwLGE9dC5saW5lWTE7cmV0dXJuIHQuYW5nbGU9dC54LGRlbGV0ZSB0LngsdC5zdGFydEFuZ2xlPXQueDAsZGVsZXRlIHQueDAsdC5lbmRBbmdsZT10LngxLGRlbGV0ZSB0LngxLHQucmFkaXVzPXQueSxkZWxldGUgdC55LHQuaW5uZXJSYWRpdXM9dC55MCxkZWxldGUgdC55MCx0Lm91dGVyUmFkaXVzPXQueTEsZGVsZXRlIHQueTEsdC5saW5lU3RhcnRBbmdsZT1mdW5jdGlvbigpe3JldHVybiBWeChuKCkpfSxkZWxldGUgdC5saW5lWDAsdC5saW5lRW5kQW5nbGU9ZnVuY3Rpb24oKXtyZXR1cm4gVngocigpKX0sZGVsZXRlIHQubGluZVgxLHQubGluZUlubmVyUmFkaXVzPWZ1bmN0aW9uKCl7cmV0dXJuIFZ4KGkoKSl9LGRlbGV0ZSB0LmxpbmVZMCx0LmxpbmVPdXRlclJhZGl1cz1mdW5jdGlvbigpe3JldHVybiBWeChhKCkpfSxkZWxldGUgdC5saW5lWTEsdC5jdXJ2ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD9lKFd4KHQpKTplKCkuX2N1cnZlfSx0fSxxeD1mdW5jdGlvbih0LGUpe3JldHVyblsoZT0rZSkqTWF0aC5jb3ModC09TWF0aC5QSS8yKSxlKk1hdGguc2luKHQpXX0sWHg9QXJyYXkucHJvdG90eXBlLnNsaWNlO2Z1bmN0aW9uIFp4KHQpe3JldHVybiB0LnNvdXJjZX1mdW5jdGlvbiBKeCh0KXtyZXR1cm4gdC50YXJnZXR9ZnVuY3Rpb24gUXgodCl7dmFyIGU9Wngsbj1KeCxyPUZ4LGk9UHgsYT1udWxsO2Z1bmN0aW9uIG8oKXt2YXIgbyxzPVh4LmNhbGwoYXJndW1lbnRzKSxjPWUuYXBwbHkodGhpcyxzKSx1PW4uYXBwbHkodGhpcyxzKTtpZihhfHwoYT1vPVVpKCkpLHQoYSwrci5hcHBseSh0aGlzLChzWzBdPWMscykpLCtpLmFwcGx5KHRoaXMscyksK3IuYXBwbHkodGhpcywoc1swXT11LHMpKSwraS5hcHBseSh0aGlzLHMpKSxvKXJldHVybiBhPW51bGwsbysiInx8bnVsbH1yZXR1cm4gby5zb3VyY2U9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9dCxvKTplfSxvLnRhcmdldD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj10LG8pOm59LG8ueD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj0iZnVuY3Rpb24iPT10eXBlb2YgdD90OmZ4KCt0KSxvKTpyfSxvLnk9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpmeCgrdCksbyk6aX0sby5jb250ZXh0PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPW51bGw9PXQ/bnVsbDp0LG8pOmF9LG99ZnVuY3Rpb24gS3godCxlLG4scixpKXt0Lm1vdmVUbyhlLG4pLHQuYmV6aWVyQ3VydmVUbyhlPShlK3IpLzIsbixlLGkscixpKX1mdW5jdGlvbiB0Xyh0LGUsbixyLGkpe3QubW92ZVRvKGUsbiksdC5iZXppZXJDdXJ2ZVRvKGUsbj0obitpKS8yLHIsbixyLGkpfWZ1bmN0aW9uIGVfKHQsZSxuLHIsaSl7dmFyIGE9cXgoZSxuKSxvPXF4KGUsbj0obitpKS8yKSxzPXF4KHIsbiksYz1xeChyLGkpO3QubW92ZVRvKGFbMF0sYVsxXSksdC5iZXppZXJDdXJ2ZVRvKG9bMF0sb1sxXSxzWzBdLHNbMV0sY1swXSxjWzFdKX1mdW5jdGlvbiBuXygpe3JldHVybiBReChLeCl9ZnVuY3Rpb24gcl8oKXtyZXR1cm4gUXgodF8pfWZ1bmN0aW9uIGlfKCl7dmFyIHQ9UXgoZV8pO3JldHVybiB0LmFuZ2xlPXQueCxkZWxldGUgdC54LHQucmFkaXVzPXQueSxkZWxldGUgdC55LHR9dmFyIGFfPXtkcmF3OmZ1bmN0aW9uKHQsZSl7dmFyIG49TWF0aC5zcXJ0KGUveHgpO3QubW92ZVRvKG4sMCksdC5hcmMoMCwwLG4sMCxreCl9fSxvXz17ZHJhdzpmdW5jdGlvbih0LGUpe3ZhciBuPU1hdGguc3FydChlLzUpLzI7dC5tb3ZlVG8oLTMqbiwtbiksdC5saW5lVG8oLW4sLW4pLHQubGluZVRvKC1uLC0zKm4pLHQubGluZVRvKG4sLTMqbiksdC5saW5lVG8obiwtbiksdC5saW5lVG8oMypuLC1uKSx0LmxpbmVUbygzKm4sbiksdC5saW5lVG8obixuKSx0LmxpbmVUbyhuLDMqbiksdC5saW5lVG8oLW4sMypuKSx0LmxpbmVUbygtbixuKSx0LmxpbmVUbygtMypuLG4pLHQuY2xvc2VQYXRoKCl9fSxzXz1NYXRoLnNxcnQoMS8zKSxjXz0yKnNfLHVfPXtkcmF3OmZ1bmN0aW9uKHQsZSl7dmFyIG49TWF0aC5zcXJ0KGUvY18pLHI9bipzXzt0Lm1vdmVUbygwLC1uKSx0LmxpbmVUbyhyLDApLHQubGluZVRvKDAsbiksdC5saW5lVG8oLXIsMCksdC5jbG9zZVBhdGgoKX19LGxfPU1hdGguc2luKHh4LzEwKS9NYXRoLnNpbig3Knh4LzEwKSxoXz1NYXRoLnNpbihreC8xMCkqbF8sZl89LU1hdGguY29zKGt4LzEwKSpsXyxkXz17ZHJhdzpmdW5jdGlvbih0LGUpe3ZhciBuPU1hdGguc3FydCguODkwODEzMDkxNTI5Mjg1MiplKSxyPWhfKm4saT1mXypuO3QubW92ZVRvKDAsLW4pLHQubGluZVRvKHIsaSk7Zm9yKHZhciBhPTE7YTw1OysrYSl7dmFyIG89a3gqYS81LHM9TWF0aC5jb3MobyksYz1NYXRoLnNpbihvKTt0LmxpbmVUbyhjKm4sLXMqbiksdC5saW5lVG8ocypyLWMqaSxjKnIrcyppKX10LmNsb3NlUGF0aCgpfX0scF89e2RyYXc6ZnVuY3Rpb24odCxlKXt2YXIgbj1NYXRoLnNxcnQoZSkscj0tbi8yO3QucmVjdChyLHIsbixuKX19LGdfPU1hdGguc3FydCgzKSx5Xz17ZHJhdzpmdW5jdGlvbih0LGUpe3ZhciBuPS1NYXRoLnNxcnQoZS8oMypnXykpO3QubW92ZVRvKDAsMipuKSx0LmxpbmVUbygtZ18qbiwtbiksdC5saW5lVG8oZ18qbiwtbiksdC5jbG9zZVBhdGgoKX19LHZfPU1hdGguc3FydCgzKS8yLG1fPTEvTWF0aC5zcXJ0KDEyKSxiXz0zKihtXy8yKzEpLHhfPXtkcmF3OmZ1bmN0aW9uKHQsZSl7dmFyIG49TWF0aC5zcXJ0KGUvYl8pLHI9bi8yLGk9biptXyxhPXIsbz1uKm1fK24scz0tYSxjPW87dC5tb3ZlVG8ocixpKSx0LmxpbmVUbyhhLG8pLHQubGluZVRvKHMsYyksdC5saW5lVG8oLS41KnItdl8qaSx2XypyKy0uNSppKSx0LmxpbmVUbygtLjUqYS12XypvLHZfKmErLS41Km8pLHQubGluZVRvKC0uNSpzLXZfKmMsdl8qcystLjUqYyksdC5saW5lVG8oLS41KnIrdl8qaSwtLjUqaS12XypyKSx0LmxpbmVUbygtLjUqYSt2XypvLC0uNSpvLXZfKmEpLHQubGluZVRvKC0uNSpzK3ZfKmMsLS41KmMtdl8qcyksdC5jbG9zZVBhdGgoKX19LF9fPVthXyxvXyx1XyxwXyxkXyx5Xyx4X10sa189ZnVuY3Rpb24oKXt2YXIgdD1meChhXyksZT1meCg2NCksbj1udWxsO2Z1bmN0aW9uIHIoKXt2YXIgcjtpZihufHwobj1yPVVpKCkpLHQuYXBwbHkodGhpcyxhcmd1bWVudHMpLmRyYXcobiwrZS5hcHBseSh0aGlzLGFyZ3VtZW50cykpLHIpcmV0dXJuIG49bnVsbCxyKyIifHxudWxsfXJldHVybiByLnR5cGU9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9ImZ1bmN0aW9uIj09dHlwZW9mIGU/ZTpmeChlKSxyKTp0fSxyLnNpemU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpmeCgrdCkscik6ZX0sci5jb250ZXh0PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPW51bGw9PXQ/bnVsbDp0LHIpOm59LHJ9LHdfPWZ1bmN0aW9uKCl7fTtmdW5jdGlvbiBFXyh0LGUsbil7dC5fY29udGV4dC5iZXppZXJDdXJ2ZVRvKCgyKnQuX3gwK3QuX3gxKS8zLCgyKnQuX3kwK3QuX3kxKS8zLCh0Ll94MCsyKnQuX3gxKS8zLCh0Ll95MCsyKnQuX3kxKS8zLCh0Ll94MCs0KnQuX3gxK2UpLzYsKHQuX3kwKzQqdC5feTErbikvNil9ZnVuY3Rpb24gVF8odCl7dGhpcy5fY29udGV4dD10fVRfLnByb3RvdHlwZT17YXJlYVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSxhcmVhRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3gwPXRoaXMuX3gxPXRoaXMuX3kwPXRoaXMuX3kxPU5hTix0aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDM6RV8odGhpcyx0aGlzLl94MSx0aGlzLl95MSk7Y2FzZSAyOnRoaXMuX2NvbnRleHQubGluZVRvKHRoaXMuX3gxLHRoaXMuX3kxKX0odGhpcy5fbGluZXx8MCE9PXRoaXMuX2xpbmUmJjE9PT10aGlzLl9wb2ludCkmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5fbGluZT0xLXRoaXMuX2xpbmV9LHBvaW50OmZ1bmN0aW9uKHQsZSl7c3dpdGNoKHQ9K3QsZT0rZSx0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTEsdGhpcy5fbGluZT90aGlzLl9jb250ZXh0LmxpbmVUbyh0LGUpOnRoaXMuX2NvbnRleHQubW92ZVRvKHQsZSk7YnJlYWs7Y2FzZSAxOnRoaXMuX3BvaW50PTI7YnJlYWs7Y2FzZSAyOnRoaXMuX3BvaW50PTMsdGhpcy5fY29udGV4dC5saW5lVG8oKDUqdGhpcy5feDArdGhpcy5feDEpLzYsKDUqdGhpcy5feTArdGhpcy5feTEpLzYpO2RlZmF1bHQ6RV8odGhpcyx0LGUpfXRoaXMuX3gwPXRoaXMuX3gxLHRoaXMuX3gxPXQsdGhpcy5feTA9dGhpcy5feTEsdGhpcy5feTE9ZX19O3ZhciBDXz1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IFRfKHQpfTtmdW5jdGlvbiBTXyh0KXt0aGlzLl9jb250ZXh0PXR9U18ucHJvdG90eXBlPXthcmVhU3RhcnQ6d18sYXJlYUVuZDp3XyxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl94MD10aGlzLl94MT10aGlzLl94Mj10aGlzLl94Mz10aGlzLl94ND10aGlzLl95MD10aGlzLl95MT10aGlzLl95Mj10aGlzLl95Mz10aGlzLl95ND1OYU4sdGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpe3N3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAxOnRoaXMuX2NvbnRleHQubW92ZVRvKHRoaXMuX3gyLHRoaXMuX3kyKSx0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpO2JyZWFrO2Nhc2UgMjp0aGlzLl9jb250ZXh0Lm1vdmVUbygodGhpcy5feDIrMip0aGlzLl94MykvMywodGhpcy5feTIrMip0aGlzLl95MykvMyksdGhpcy5fY29udGV4dC5saW5lVG8oKHRoaXMuX3gzKzIqdGhpcy5feDIpLzMsKHRoaXMuX3kzKzIqdGhpcy5feTIpLzMpLHRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCk7YnJlYWs7Y2FzZSAzOnRoaXMucG9pbnQodGhpcy5feDIsdGhpcy5feTIpLHRoaXMucG9pbnQodGhpcy5feDMsdGhpcy5feTMpLHRoaXMucG9pbnQodGhpcy5feDQsdGhpcy5feTQpfX0scG9pbnQ6ZnVuY3Rpb24odCxlKXtzd2l0Y2godD0rdCxlPStlLHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fcG9pbnQ9MSx0aGlzLl94Mj10LHRoaXMuX3kyPWU7YnJlYWs7Y2FzZSAxOnRoaXMuX3BvaW50PTIsdGhpcy5feDM9dCx0aGlzLl95Mz1lO2JyZWFrO2Nhc2UgMjp0aGlzLl9wb2ludD0zLHRoaXMuX3g0PXQsdGhpcy5feTQ9ZSx0aGlzLl9jb250ZXh0Lm1vdmVUbygodGhpcy5feDArNCp0aGlzLl94MSt0KS82LCh0aGlzLl95MCs0KnRoaXMuX3kxK2UpLzYpO2JyZWFrO2RlZmF1bHQ6RV8odGhpcyx0LGUpfXRoaXMuX3gwPXRoaXMuX3gxLHRoaXMuX3gxPXQsdGhpcy5feTA9dGhpcy5feTEsdGhpcy5feTE9ZX19O3ZhciBBXz1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IFNfKHQpfTtmdW5jdGlvbiBNXyh0KXt0aGlzLl9jb250ZXh0PXR9TV8ucHJvdG90eXBlPXthcmVhU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPTB9LGFyZWFFbmQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPU5hTn0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5feDA9dGhpcy5feDE9dGhpcy5feTA9dGhpcy5feTE9TmFOLHRoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXsodGhpcy5fbGluZXx8MCE9PXRoaXMuX2xpbmUmJjM9PT10aGlzLl9wb2ludCkmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5fbGluZT0xLXRoaXMuX2xpbmV9LHBvaW50OmZ1bmN0aW9uKHQsZSl7c3dpdGNoKHQ9K3QsZT0rZSx0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTE7YnJlYWs7Y2FzZSAxOnRoaXMuX3BvaW50PTI7YnJlYWs7Y2FzZSAyOnRoaXMuX3BvaW50PTM7dmFyIG49KHRoaXMuX3gwKzQqdGhpcy5feDErdCkvNixyPSh0aGlzLl95MCs0KnRoaXMuX3kxK2UpLzY7dGhpcy5fbGluZT90aGlzLl9jb250ZXh0LmxpbmVUbyhuLHIpOnRoaXMuX2NvbnRleHQubW92ZVRvKG4scik7YnJlYWs7Y2FzZSAzOnRoaXMuX3BvaW50PTQ7ZGVmYXVsdDpFXyh0aGlzLHQsZSl9dGhpcy5feDA9dGhpcy5feDEsdGhpcy5feDE9dCx0aGlzLl95MD10aGlzLl95MSx0aGlzLl95MT1lfX07dmFyIE9fPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgTV8odCl9O2Z1bmN0aW9uIERfKHQsZSl7dGhpcy5fYmFzaXM9bmV3IFRfKHQpLHRoaXMuX2JldGE9ZX1EXy5wcm90b3R5cGU9e2xpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3g9W10sdGhpcy5feT1bXSx0aGlzLl9iYXNpcy5saW5lU3RhcnQoKX0sbGluZUVuZDpmdW5jdGlvbigpe3ZhciB0PXRoaXMuX3gsZT10aGlzLl95LG49dC5sZW5ndGgtMTtpZihuPjApZm9yKHZhciByLGk9dFswXSxhPWVbMF0sbz10W25dLWkscz1lW25dLWEsYz0tMTsrK2M8PW47KXI9Yy9uLHRoaXMuX2Jhc2lzLnBvaW50KHRoaXMuX2JldGEqdFtjXSsoMS10aGlzLl9iZXRhKSooaStyKm8pLHRoaXMuX2JldGEqZVtjXSsoMS10aGlzLl9iZXRhKSooYStyKnMpKTt0aGlzLl94PXRoaXMuX3k9bnVsbCx0aGlzLl9iYXNpcy5saW5lRW5kKCl9LHBvaW50OmZ1bmN0aW9uKHQsZSl7dGhpcy5feC5wdXNoKCt0KSx0aGlzLl95LnB1c2goK2UpfX07dmFyIE5fPWZ1bmN0aW9uIHQoZSl7ZnVuY3Rpb24gbih0KXtyZXR1cm4gMT09PWU/bmV3IFRfKHQpOm5ldyBEXyh0LGUpfXJldHVybiBuLmJldGE9ZnVuY3Rpb24oZSl7cmV0dXJuIHQoK2UpfSxufSguODUpO2Z1bmN0aW9uIEJfKHQsZSxuKXt0Ll9jb250ZXh0LmJlemllckN1cnZlVG8odC5feDErdC5fayoodC5feDItdC5feDApLHQuX3kxK3QuX2sqKHQuX3kyLXQuX3kwKSx0Ll94Mit0Ll9rKih0Ll94MS1lKSx0Ll95Mit0Ll9rKih0Ll95MS1uKSx0Ll94Mix0Ll95Mil9ZnVuY3Rpb24gTF8odCxlKXt0aGlzLl9jb250ZXh0PXQsdGhpcy5faz0oMS1lKS82fUxfLnByb3RvdHlwZT17YXJlYVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSxhcmVhRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3gwPXRoaXMuX3gxPXRoaXMuX3gyPXRoaXMuX3kwPXRoaXMuX3kxPXRoaXMuX3kyPU5hTix0aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDI6dGhpcy5fY29udGV4dC5saW5lVG8odGhpcy5feDIsdGhpcy5feTIpO2JyZWFrO2Nhc2UgMzpCXyh0aGlzLHRoaXMuX3gxLHRoaXMuX3kxKX0odGhpcy5fbGluZXx8MCE9PXRoaXMuX2xpbmUmJjE9PT10aGlzLl9wb2ludCkmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5fbGluZT0xLXRoaXMuX2xpbmV9LHBvaW50OmZ1bmN0aW9uKHQsZSl7c3dpdGNoKHQ9K3QsZT0rZSx0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTEsdGhpcy5fbGluZT90aGlzLl9jb250ZXh0LmxpbmVUbyh0LGUpOnRoaXMuX2NvbnRleHQubW92ZVRvKHQsZSk7YnJlYWs7Y2FzZSAxOnRoaXMuX3BvaW50PTIsdGhpcy5feDE9dCx0aGlzLl95MT1lO2JyZWFrO2Nhc2UgMjp0aGlzLl9wb2ludD0zO2RlZmF1bHQ6Ql8odGhpcyx0LGUpfXRoaXMuX3gwPXRoaXMuX3gxLHRoaXMuX3gxPXRoaXMuX3gyLHRoaXMuX3gyPXQsdGhpcy5feTA9dGhpcy5feTEsdGhpcy5feTE9dGhpcy5feTIsdGhpcy5feTI9ZX19O3ZhciBGXz1mdW5jdGlvbiB0KGUpe2Z1bmN0aW9uIG4odCl7cmV0dXJuIG5ldyBMXyh0LGUpfXJldHVybiBuLnRlbnNpb249ZnVuY3Rpb24oZSl7cmV0dXJuIHQoK2UpfSxufSgwKTtmdW5jdGlvbiBQXyh0LGUpe3RoaXMuX2NvbnRleHQ9dCx0aGlzLl9rPSgxLWUpLzZ9UF8ucHJvdG90eXBlPXthcmVhU3RhcnQ6d18sYXJlYUVuZDp3XyxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl94MD10aGlzLl94MT10aGlzLl94Mj10aGlzLl94Mz10aGlzLl94ND10aGlzLl94NT10aGlzLl95MD10aGlzLl95MT10aGlzLl95Mj10aGlzLl95Mz10aGlzLl95ND10aGlzLl95NT1OYU4sdGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpe3N3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAxOnRoaXMuX2NvbnRleHQubW92ZVRvKHRoaXMuX3gzLHRoaXMuX3kzKSx0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpO2JyZWFrO2Nhc2UgMjp0aGlzLl9jb250ZXh0LmxpbmVUbyh0aGlzLl94Myx0aGlzLl95MyksdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKTticmVhaztjYXNlIDM6dGhpcy5wb2ludCh0aGlzLl94Myx0aGlzLl95MyksdGhpcy5wb2ludCh0aGlzLl94NCx0aGlzLl95NCksdGhpcy5wb2ludCh0aGlzLl94NSx0aGlzLl95NSl9fSxwb2ludDpmdW5jdGlvbih0LGUpe3N3aXRjaCh0PSt0LGU9K2UsdGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xLHRoaXMuX3gzPXQsdGhpcy5feTM9ZTticmVhaztjYXNlIDE6dGhpcy5fcG9pbnQ9Mix0aGlzLl9jb250ZXh0Lm1vdmVUbyh0aGlzLl94ND10LHRoaXMuX3k0PWUpO2JyZWFrO2Nhc2UgMjp0aGlzLl9wb2ludD0zLHRoaXMuX3g1PXQsdGhpcy5feTU9ZTticmVhaztkZWZhdWx0OkJfKHRoaXMsdCxlKX10aGlzLl94MD10aGlzLl94MSx0aGlzLl94MT10aGlzLl94Mix0aGlzLl94Mj10LHRoaXMuX3kwPXRoaXMuX3kxLHRoaXMuX3kxPXRoaXMuX3kyLHRoaXMuX3kyPWV9fTt2YXIgSV89ZnVuY3Rpb24gdChlKXtmdW5jdGlvbiBuKHQpe3JldHVybiBuZXcgUF8odCxlKX1yZXR1cm4gbi50ZW5zaW9uPWZ1bmN0aW9uKGUpe3JldHVybiB0KCtlKX0sbn0oMCk7ZnVuY3Rpb24gal8odCxlKXt0aGlzLl9jb250ZXh0PXQsdGhpcy5faz0oMS1lKS82fWpfLnByb3RvdHlwZT17YXJlYVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSxhcmVhRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3gwPXRoaXMuX3gxPXRoaXMuX3gyPXRoaXMuX3kwPXRoaXMuX3kxPXRoaXMuX3kyPU5hTix0aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7KHRoaXMuX2xpbmV8fDAhPT10aGlzLl9saW5lJiYzPT09dGhpcy5fcG9pbnQpJiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpLHRoaXMuX2xpbmU9MS10aGlzLl9saW5lfSxwb2ludDpmdW5jdGlvbih0LGUpe3N3aXRjaCh0PSt0LGU9K2UsdGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yO2JyZWFrO2Nhc2UgMjp0aGlzLl9wb2ludD0zLHRoaXMuX2xpbmU/dGhpcy5fY29udGV4dC5saW5lVG8odGhpcy5feDIsdGhpcy5feTIpOnRoaXMuX2NvbnRleHQubW92ZVRvKHRoaXMuX3gyLHRoaXMuX3kyKTticmVhaztjYXNlIDM6dGhpcy5fcG9pbnQ9NDtkZWZhdWx0OkJfKHRoaXMsdCxlKX10aGlzLl94MD10aGlzLl94MSx0aGlzLl94MT10aGlzLl94Mix0aGlzLl94Mj10LHRoaXMuX3kwPXRoaXMuX3kxLHRoaXMuX3kxPXRoaXMuX3kyLHRoaXMuX3kyPWV9fTt2YXIgUl89ZnVuY3Rpb24gdChlKXtmdW5jdGlvbiBuKHQpe3JldHVybiBuZXcgal8odCxlKX1yZXR1cm4gbi50ZW5zaW9uPWZ1bmN0aW9uKGUpe3JldHVybiB0KCtlKX0sbn0oMCk7ZnVuY3Rpb24gWV8odCxlLG4pe3ZhciByPXQuX3gxLGk9dC5feTEsYT10Ll94MixvPXQuX3kyO2lmKHQuX2wwMV9hPjFlLTEyKXt2YXIgcz0yKnQuX2wwMV8yYSszKnQuX2wwMV9hKnQuX2wxMl9hK3QuX2wxMl8yYSxjPTMqdC5fbDAxX2EqKHQuX2wwMV9hK3QuX2wxMl9hKTtyPShyKnMtdC5feDAqdC5fbDEyXzJhK3QuX3gyKnQuX2wwMV8yYSkvYyxpPShpKnMtdC5feTAqdC5fbDEyXzJhK3QuX3kyKnQuX2wwMV8yYSkvY31pZih0Ll9sMjNfYT4xZS0xMil7dmFyIHU9Mip0Ll9sMjNfMmErMyp0Ll9sMjNfYSp0Ll9sMTJfYSt0Ll9sMTJfMmEsbD0zKnQuX2wyM19hKih0Ll9sMjNfYSt0Ll9sMTJfYSk7YT0oYSp1K3QuX3gxKnQuX2wyM18yYS1lKnQuX2wxMl8yYSkvbCxvPShvKnUrdC5feTEqdC5fbDIzXzJhLW4qdC5fbDEyXzJhKS9sfXQuX2NvbnRleHQuYmV6aWVyQ3VydmVUbyhyLGksYSxvLHQuX3gyLHQuX3kyKX1mdW5jdGlvbiB6Xyh0LGUpe3RoaXMuX2NvbnRleHQ9dCx0aGlzLl9hbHBoYT1lfXpfLnByb3RvdHlwZT17YXJlYVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSxhcmVhRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3gwPXRoaXMuX3gxPXRoaXMuX3gyPXRoaXMuX3kwPXRoaXMuX3kxPXRoaXMuX3kyPU5hTix0aGlzLl9sMDFfYT10aGlzLl9sMTJfYT10aGlzLl9sMjNfYT10aGlzLl9sMDFfMmE9dGhpcy5fbDEyXzJhPXRoaXMuX2wyM18yYT10aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDI6dGhpcy5fY29udGV4dC5saW5lVG8odGhpcy5feDIsdGhpcy5feTIpO2JyZWFrO2Nhc2UgMzp0aGlzLnBvaW50KHRoaXMuX3gyLHRoaXMuX3kyKX0odGhpcy5fbGluZXx8MCE9PXRoaXMuX2xpbmUmJjE9PT10aGlzLl9wb2ludCkmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5fbGluZT0xLXRoaXMuX2xpbmV9LHBvaW50OmZ1bmN0aW9uKHQsZSl7aWYodD0rdCxlPStlLHRoaXMuX3BvaW50KXt2YXIgbj10aGlzLl94Mi10LHI9dGhpcy5feTItZTt0aGlzLl9sMjNfYT1NYXRoLnNxcnQodGhpcy5fbDIzXzJhPU1hdGgucG93KG4qbityKnIsdGhpcy5fYWxwaGEpKX1zd2l0Y2godGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xLHRoaXMuX2xpbmU/dGhpcy5fY29udGV4dC5saW5lVG8odCxlKTp0aGlzLl9jb250ZXh0Lm1vdmVUbyh0LGUpO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yO2JyZWFrO2Nhc2UgMjp0aGlzLl9wb2ludD0zO2RlZmF1bHQ6WV8odGhpcyx0LGUpfXRoaXMuX2wwMV9hPXRoaXMuX2wxMl9hLHRoaXMuX2wxMl9hPXRoaXMuX2wyM19hLHRoaXMuX2wwMV8yYT10aGlzLl9sMTJfMmEsdGhpcy5fbDEyXzJhPXRoaXMuX2wyM18yYSx0aGlzLl94MD10aGlzLl94MSx0aGlzLl94MT10aGlzLl94Mix0aGlzLl94Mj10LHRoaXMuX3kwPXRoaXMuX3kxLHRoaXMuX3kxPXRoaXMuX3kyLHRoaXMuX3kyPWV9fTt2YXIgVV89ZnVuY3Rpb24gdChlKXtmdW5jdGlvbiBuKHQpe3JldHVybiBlP25ldyB6Xyh0LGUpOm5ldyBMXyh0LDApfXJldHVybiBuLmFscGhhPWZ1bmN0aW9uKGUpe3JldHVybiB0KCtlKX0sbn0oLjUpO2Z1bmN0aW9uICRfKHQsZSl7dGhpcy5fY29udGV4dD10LHRoaXMuX2FscGhhPWV9JF8ucHJvdG90eXBlPXthcmVhU3RhcnQ6d18sYXJlYUVuZDp3XyxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl94MD10aGlzLl94MT10aGlzLl94Mj10aGlzLl94Mz10aGlzLl94ND10aGlzLl94NT10aGlzLl95MD10aGlzLl95MT10aGlzLl95Mj10aGlzLl95Mz10aGlzLl95ND10aGlzLl95NT1OYU4sdGhpcy5fbDAxX2E9dGhpcy5fbDEyX2E9dGhpcy5fbDIzX2E9dGhpcy5fbDAxXzJhPXRoaXMuX2wxMl8yYT10aGlzLl9sMjNfMmE9dGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpe3N3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAxOnRoaXMuX2NvbnRleHQubW92ZVRvKHRoaXMuX3gzLHRoaXMuX3kzKSx0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpO2JyZWFrO2Nhc2UgMjp0aGlzLl9jb250ZXh0LmxpbmVUbyh0aGlzLl94Myx0aGlzLl95MyksdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKTticmVhaztjYXNlIDM6dGhpcy5wb2ludCh0aGlzLl94Myx0aGlzLl95MyksdGhpcy5wb2ludCh0aGlzLl94NCx0aGlzLl95NCksdGhpcy5wb2ludCh0aGlzLl94NSx0aGlzLl95NSl9fSxwb2ludDpmdW5jdGlvbih0LGUpe2lmKHQ9K3QsZT0rZSx0aGlzLl9wb2ludCl7dmFyIG49dGhpcy5feDItdCxyPXRoaXMuX3kyLWU7dGhpcy5fbDIzX2E9TWF0aC5zcXJ0KHRoaXMuX2wyM18yYT1NYXRoLnBvdyhuKm4rcipyLHRoaXMuX2FscGhhKSl9c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fcG9pbnQ9MSx0aGlzLl94Mz10LHRoaXMuX3kzPWU7YnJlYWs7Y2FzZSAxOnRoaXMuX3BvaW50PTIsdGhpcy5fY29udGV4dC5tb3ZlVG8odGhpcy5feDQ9dCx0aGlzLl95ND1lKTticmVhaztjYXNlIDI6dGhpcy5fcG9pbnQ9Myx0aGlzLl94NT10LHRoaXMuX3k1PWU7YnJlYWs7ZGVmYXVsdDpZXyh0aGlzLHQsZSl9dGhpcy5fbDAxX2E9dGhpcy5fbDEyX2EsdGhpcy5fbDEyX2E9dGhpcy5fbDIzX2EsdGhpcy5fbDAxXzJhPXRoaXMuX2wxMl8yYSx0aGlzLl9sMTJfMmE9dGhpcy5fbDIzXzJhLHRoaXMuX3gwPXRoaXMuX3gxLHRoaXMuX3gxPXRoaXMuX3gyLHRoaXMuX3gyPXQsdGhpcy5feTA9dGhpcy5feTEsdGhpcy5feTE9dGhpcy5feTIsdGhpcy5feTI9ZX19O3ZhciBXXz1mdW5jdGlvbiB0KGUpe2Z1bmN0aW9uIG4odCl7cmV0dXJuIGU/bmV3ICRfKHQsZSk6bmV3IFBfKHQsMCl9cmV0dXJuIG4uYWxwaGE9ZnVuY3Rpb24oZSl7cmV0dXJuIHQoK2UpfSxufSguNSk7ZnVuY3Rpb24gVl8odCxlKXt0aGlzLl9jb250ZXh0PXQsdGhpcy5fYWxwaGE9ZX1WXy5wcm90b3R5cGU9e2FyZWFTdGFydDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9MH0sYXJlYUVuZDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9TmFOfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl94MD10aGlzLl94MT10aGlzLl94Mj10aGlzLl95MD10aGlzLl95MT10aGlzLl95Mj1OYU4sdGhpcy5fbDAxX2E9dGhpcy5fbDEyX2E9dGhpcy5fbDIzX2E9dGhpcy5fbDAxXzJhPXRoaXMuX2wxMl8yYT10aGlzLl9sMjNfMmE9dGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpeyh0aGlzLl9saW5lfHwwIT09dGhpcy5fbGluZSYmMz09PXRoaXMuX3BvaW50KSYmdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKSx0aGlzLl9saW5lPTEtdGhpcy5fbGluZX0scG9pbnQ6ZnVuY3Rpb24odCxlKXtpZih0PSt0LGU9K2UsdGhpcy5fcG9pbnQpe3ZhciBuPXRoaXMuX3gyLXQscj10aGlzLl95Mi1lO3RoaXMuX2wyM19hPU1hdGguc3FydCh0aGlzLl9sMjNfMmE9TWF0aC5wb3cobipuK3Iqcix0aGlzLl9hbHBoYSkpfXN3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTE7YnJlYWs7Y2FzZSAxOnRoaXMuX3BvaW50PTI7YnJlYWs7Y2FzZSAyOnRoaXMuX3BvaW50PTMsdGhpcy5fbGluZT90aGlzLl9jb250ZXh0LmxpbmVUbyh0aGlzLl94Mix0aGlzLl95Mik6dGhpcy5fY29udGV4dC5tb3ZlVG8odGhpcy5feDIsdGhpcy5feTIpO2JyZWFrO2Nhc2UgMzp0aGlzLl9wb2ludD00O2RlZmF1bHQ6WV8odGhpcyx0LGUpfXRoaXMuX2wwMV9hPXRoaXMuX2wxMl9hLHRoaXMuX2wxMl9hPXRoaXMuX2wyM19hLHRoaXMuX2wwMV8yYT10aGlzLl9sMTJfMmEsdGhpcy5fbDEyXzJhPXRoaXMuX2wyM18yYSx0aGlzLl94MD10aGlzLl94MSx0aGlzLl94MT10aGlzLl94Mix0aGlzLl94Mj10LHRoaXMuX3kwPXRoaXMuX3kxLHRoaXMuX3kxPXRoaXMuX3kyLHRoaXMuX3kyPWV9fTt2YXIgSF89ZnVuY3Rpb24gdChlKXtmdW5jdGlvbiBuKHQpe3JldHVybiBlP25ldyBWXyh0LGUpOm5ldyBqXyh0LDApfXJldHVybiBuLmFscGhhPWZ1bmN0aW9uKGUpe3JldHVybiB0KCtlKX0sbn0oLjUpO2Z1bmN0aW9uIEdfKHQpe3RoaXMuX2NvbnRleHQ9dH1HXy5wcm90b3R5cGU9e2FyZWFTdGFydDp3XyxhcmVhRW5kOndfLGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXt0aGlzLl9wb2ludCYmdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKX0scG9pbnQ6ZnVuY3Rpb24odCxlKXt0PSt0LGU9K2UsdGhpcy5fcG9pbnQ/dGhpcy5fY29udGV4dC5saW5lVG8odCxlKToodGhpcy5fcG9pbnQ9MSx0aGlzLl9jb250ZXh0Lm1vdmVUbyh0LGUpKX19O3ZhciBxXz1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IEdfKHQpfTtmdW5jdGlvbiBYXyh0KXtyZXR1cm4gdDwwPy0xOjF9ZnVuY3Rpb24gWl8odCxlLG4pe3ZhciByPXQuX3gxLXQuX3gwLGk9ZS10Ll94MSxhPSh0Ll95MS10Ll95MCkvKHJ8fGk8MCYmLTApLG89KG4tdC5feTEpLyhpfHxyPDAmJi0wKSxzPShhKmkrbypyKS8ocitpKTtyZXR1cm4oWF8oYSkrWF8obykpKk1hdGgubWluKE1hdGguYWJzKGEpLE1hdGguYWJzKG8pLC41Kk1hdGguYWJzKHMpKXx8MH1mdW5jdGlvbiBKXyh0LGUpe3ZhciBuPXQuX3gxLXQuX3gwO3JldHVybiBuPygzKih0Ll95MS10Ll95MCkvbi1lKS8yOmV9ZnVuY3Rpb24gUV8odCxlLG4pe3ZhciByPXQuX3gwLGk9dC5feTAsYT10Ll94MSxvPXQuX3kxLHM9KGEtcikvMzt0Ll9jb250ZXh0LmJlemllckN1cnZlVG8ocitzLGkrcyplLGEtcyxvLXMqbixhLG8pfWZ1bmN0aW9uIEtfKHQpe3RoaXMuX2NvbnRleHQ9dH1mdW5jdGlvbiB0ayh0KXt0aGlzLl9jb250ZXh0PW5ldyBlayh0KX1mdW5jdGlvbiBlayh0KXt0aGlzLl9jb250ZXh0PXR9ZnVuY3Rpb24gbmsodCl7cmV0dXJuIG5ldyBLXyh0KX1mdW5jdGlvbiByayh0KXtyZXR1cm4gbmV3IHRrKHQpfWZ1bmN0aW9uIGlrKHQpe3RoaXMuX2NvbnRleHQ9dH1mdW5jdGlvbiBhayh0KXt2YXIgZSxuLHI9dC5sZW5ndGgtMSxpPW5ldyBBcnJheShyKSxhPW5ldyBBcnJheShyKSxvPW5ldyBBcnJheShyKTtmb3IoaVswXT0wLGFbMF09MixvWzBdPXRbMF0rMip0WzFdLGU9MTtlPHItMTsrK2UpaVtlXT0xLGFbZV09NCxvW2VdPTQqdFtlXSsyKnRbZSsxXTtmb3IoaVtyLTFdPTIsYVtyLTFdPTcsb1tyLTFdPTgqdFtyLTFdK3Rbcl0sZT0xO2U8cjsrK2Upbj1pW2VdL2FbZS0xXSxhW2VdLT1uLG9bZV0tPW4qb1tlLTFdO2ZvcihpW3ItMV09b1tyLTFdL2Fbci0xXSxlPXItMjtlPj0wOy0tZSlpW2VdPShvW2VdLWlbZSsxXSkvYVtlXTtmb3IoYVtyLTFdPSh0W3JdK2lbci0xXSkvMixlPTA7ZTxyLTE7KytlKWFbZV09Mip0W2UrMV0taVtlKzFdO3JldHVybltpLGFdfUtfLnByb3RvdHlwZT17YXJlYVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSxhcmVhRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3gwPXRoaXMuX3gxPXRoaXMuX3kwPXRoaXMuX3kxPXRoaXMuX3QwPU5hTix0aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDI6dGhpcy5fY29udGV4dC5saW5lVG8odGhpcy5feDEsdGhpcy5feTEpO2JyZWFrO2Nhc2UgMzpRXyh0aGlzLHRoaXMuX3QwLEpfKHRoaXMsdGhpcy5fdDApKX0odGhpcy5fbGluZXx8MCE9PXRoaXMuX2xpbmUmJjE9PT10aGlzLl9wb2ludCkmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5fbGluZT0xLXRoaXMuX2xpbmV9LHBvaW50OmZ1bmN0aW9uKHQsZSl7dmFyIG49TmFOO2lmKGU9K2UsKHQ9K3QpIT09dGhpcy5feDF8fGUhPT10aGlzLl95MSl7c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fcG9pbnQ9MSx0aGlzLl9saW5lP3RoaXMuX2NvbnRleHQubGluZVRvKHQsZSk6dGhpcy5fY29udGV4dC5tb3ZlVG8odCxlKTticmVhaztjYXNlIDE6dGhpcy5fcG9pbnQ9MjticmVhaztjYXNlIDI6dGhpcy5fcG9pbnQ9MyxRXyh0aGlzLEpfKHRoaXMsbj1aXyh0aGlzLHQsZSkpLG4pO2JyZWFrO2RlZmF1bHQ6UV8odGhpcyx0aGlzLl90MCxuPVpfKHRoaXMsdCxlKSl9dGhpcy5feDA9dGhpcy5feDEsdGhpcy5feDE9dCx0aGlzLl95MD10aGlzLl95MSx0aGlzLl95MT1lLHRoaXMuX3QwPW59fX0sKHRrLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKEtfLnByb3RvdHlwZSkpLnBvaW50PWZ1bmN0aW9uKHQsZSl7S18ucHJvdG90eXBlLnBvaW50LmNhbGwodGhpcyxlLHQpfSxlay5wcm90b3R5cGU9e21vdmVUbzpmdW5jdGlvbih0LGUpe3RoaXMuX2NvbnRleHQubW92ZVRvKGUsdCl9LGNsb3NlUGF0aDpmdW5jdGlvbigpe3RoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCl9LGxpbmVUbzpmdW5jdGlvbih0LGUpe3RoaXMuX2NvbnRleHQubGluZVRvKGUsdCl9LGJlemllckN1cnZlVG86ZnVuY3Rpb24odCxlLG4scixpLGEpe3RoaXMuX2NvbnRleHQuYmV6aWVyQ3VydmVUbyhlLHQscixuLGEsaSl9fSxpay5wcm90b3R5cGU9e2FyZWFTdGFydDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9MH0sYXJlYUVuZDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9TmFOfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl94PVtdLHRoaXMuX3k9W119LGxpbmVFbmQ6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl94LGU9dGhpcy5feSxuPXQubGVuZ3RoO2lmKG4paWYodGhpcy5fbGluZT90aGlzLl9jb250ZXh0LmxpbmVUbyh0WzBdLGVbMF0pOnRoaXMuX2NvbnRleHQubW92ZVRvKHRbMF0sZVswXSksMj09PW4pdGhpcy5fY29udGV4dC5saW5lVG8odFsxXSxlWzFdKTtlbHNlIGZvcih2YXIgcj1hayh0KSxpPWFrKGUpLGE9MCxvPTE7bzxuOysrYSwrK28pdGhpcy5fY29udGV4dC5iZXppZXJDdXJ2ZVRvKHJbMF1bYV0saVswXVthXSxyWzFdW2FdLGlbMV1bYV0sdFtvXSxlW29dKTsodGhpcy5fbGluZXx8MCE9PXRoaXMuX2xpbmUmJjE9PT1uKSYmdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKSx0aGlzLl9saW5lPTEtdGhpcy5fbGluZSx0aGlzLl94PXRoaXMuX3k9bnVsbH0scG9pbnQ6ZnVuY3Rpb24odCxlKXt0aGlzLl94LnB1c2goK3QpLHRoaXMuX3kucHVzaCgrZSl9fTt2YXIgb2s9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBpayh0KX07ZnVuY3Rpb24gc2sodCxlKXt0aGlzLl9jb250ZXh0PXQsdGhpcy5fdD1lfXNrLnByb3RvdHlwZT17YXJlYVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSxhcmVhRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3g9dGhpcy5feT1OYU4sdGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpezA8dGhpcy5fdCYmdGhpcy5fdDwxJiYyPT09dGhpcy5fcG9pbnQmJnRoaXMuX2NvbnRleHQubGluZVRvKHRoaXMuX3gsdGhpcy5feSksKHRoaXMuX2xpbmV8fDAhPT10aGlzLl9saW5lJiYxPT09dGhpcy5fcG9pbnQpJiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpLHRoaXMuX2xpbmU+PTAmJih0aGlzLl90PTEtdGhpcy5fdCx0aGlzLl9saW5lPTEtdGhpcy5fbGluZSl9LHBvaW50OmZ1bmN0aW9uKHQsZSl7c3dpdGNoKHQ9K3QsZT0rZSx0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTEsdGhpcy5fbGluZT90aGlzLl9jb250ZXh0LmxpbmVUbyh0LGUpOnRoaXMuX2NvbnRleHQubW92ZVRvKHQsZSk7YnJlYWs7Y2FzZSAxOnRoaXMuX3BvaW50PTI7ZGVmYXVsdDppZih0aGlzLl90PD0wKXRoaXMuX2NvbnRleHQubGluZVRvKHRoaXMuX3gsZSksdGhpcy5fY29udGV4dC5saW5lVG8odCxlKTtlbHNle3ZhciBuPXRoaXMuX3gqKDEtdGhpcy5fdCkrdCp0aGlzLl90O3RoaXMuX2NvbnRleHQubGluZVRvKG4sdGhpcy5feSksdGhpcy5fY29udGV4dC5saW5lVG8obixlKX19dGhpcy5feD10LHRoaXMuX3k9ZX19O3ZhciBjaz1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IHNrKHQsLjUpfTtmdW5jdGlvbiB1ayh0KXtyZXR1cm4gbmV3IHNrKHQsMCl9ZnVuY3Rpb24gbGsodCl7cmV0dXJuIG5ldyBzayh0LDEpfXZhciBoaz1mdW5jdGlvbih0LGUpe2lmKChpPXQubGVuZ3RoKT4xKWZvcih2YXIgbixyLGksYT0xLG89dFtlWzBdXSxzPW8ubGVuZ3RoO2E8aTsrK2EpZm9yKHI9byxvPXRbZVthXV0sbj0wO248czsrK24pb1tuXVsxXSs9b1tuXVswXT1pc05hTihyW25dWzFdKT9yW25dWzBdOnJbbl1bMV19LGZrPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10Lmxlbmd0aCxuPW5ldyBBcnJheShlKTstLWU+PTA7KW5bZV09ZTtyZXR1cm4gbn07ZnVuY3Rpb24gZGsodCxlKXtyZXR1cm4gdFtlXX12YXIgcGs9ZnVuY3Rpb24oKXt2YXIgdD1meChbXSksZT1mayxuPWhrLHI9ZGs7ZnVuY3Rpb24gaShpKXt2YXIgYSxvLHM9dC5hcHBseSh0aGlzLGFyZ3VtZW50cyksYz1pLmxlbmd0aCx1PXMubGVuZ3RoLGw9bmV3IEFycmF5KHUpO2ZvcihhPTA7YTx1OysrYSl7Zm9yKHZhciBoLGY9c1thXSxkPWxbYV09bmV3IEFycmF5KGMpLHA9MDtwPGM7KytwKWRbcF09aD1bMCwrcihpW3BdLGYscCxpKV0saC5kYXRhPWlbcF07ZC5rZXk9Zn1mb3IoYT0wLG89ZShsKTthPHU7KythKWxbb1thXV0uaW5kZXg9YTtyZXR1cm4gbihsLG8pLGx9cmV0dXJuIGkua2V5cz1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD0iZnVuY3Rpb24iPT10eXBlb2YgZT9lOmZ4KFh4LmNhbGwoZSkpLGkpOnR9LGkudmFsdWU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpmeCgrdCksaSk6cn0saS5vcmRlcj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT1udWxsPT10P2ZrOiJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6ZngoWHguY2FsbCh0KSksaSk6ZX0saS5vZmZzZXQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49bnVsbD09dD9oazp0LGkpOm59LGl9LGdrPWZ1bmN0aW9uKHQsZSl7aWYoKHI9dC5sZW5ndGgpPjApe2Zvcih2YXIgbixyLGksYT0wLG89dFswXS5sZW5ndGg7YTxvOysrYSl7Zm9yKGk9bj0wO248cjsrK24paSs9dFtuXVthXVsxXXx8MDtpZihpKWZvcihuPTA7bjxyOysrbil0W25dW2FdWzFdLz1pfWhrKHQsZSl9fSx5az1mdW5jdGlvbih0LGUpe2lmKChzPXQubGVuZ3RoKT4wKWZvcih2YXIgbixyLGksYSxvLHMsYz0wLHU9dFtlWzBdXS5sZW5ndGg7Yzx1OysrYylmb3IoYT1vPTAsbj0wO248czsrK24pKGk9KHI9dFtlW25dXVtjXSlbMV0tclswXSk+MD8oclswXT1hLHJbMV09YSs9aSk6aTwwPyhyWzFdPW8sclswXT1vKz1pKTooclswXT0wLHJbMV09aSl9LHZrPWZ1bmN0aW9uKHQsZSl7aWYoKG49dC5sZW5ndGgpPjApe2Zvcih2YXIgbixyPTAsaT10W2VbMF1dLGE9aS5sZW5ndGg7cjxhOysrcil7Zm9yKHZhciBvPTAscz0wO288bjsrK28pcys9dFtvXVtyXVsxXXx8MDtpW3JdWzFdKz1pW3JdWzBdPS1zLzJ9aGsodCxlKX19LG1rPWZ1bmN0aW9uKHQsZSl7aWYoKGk9dC5sZW5ndGgpPjAmJihyPShuPXRbZVswXV0pLmxlbmd0aCk+MCl7Zm9yKHZhciBuLHIsaSxhPTAsbz0xO288cjsrK28pe2Zvcih2YXIgcz0wLGM9MCx1PTA7czxpOysrcyl7Zm9yKHZhciBsPXRbZVtzXV0saD1sW29dWzFdfHwwLGY9KGgtKGxbby0xXVsxXXx8MCkpLzIsZD0wO2Q8czsrK2Qpe3ZhciBwPXRbZVtkXV07Zis9KHBbb11bMV18fDApLShwW28tMV1bMV18fDApfWMrPWgsdSs9ZipofW5bby0xXVsxXSs9bltvLTFdWzBdPWEsYyYmKGEtPXUvYyl9bltvLTFdWzFdKz1uW28tMV1bMF09YSxoayh0LGUpfX0sYms9ZnVuY3Rpb24odCl7dmFyIGU9dC5tYXAoeGspO3JldHVybiBmayh0KS5zb3J0KChmdW5jdGlvbih0LG4pe3JldHVybiBlW3RdLWVbbl19KSl9O2Z1bmN0aW9uIHhrKHQpe2Zvcih2YXIgZSxuPS0xLHI9MCxpPXQubGVuZ3RoLGE9LTEvMDsrK248aTspKGU9K3Rbbl1bMV0pPmEmJihhPWUscj1uKTtyZXR1cm4gcn12YXIgX2s9ZnVuY3Rpb24odCl7dmFyIGU9dC5tYXAoa2spO3JldHVybiBmayh0KS5zb3J0KChmdW5jdGlvbih0LG4pe3JldHVybiBlW3RdLWVbbl19KSl9O2Z1bmN0aW9uIGtrKHQpe2Zvcih2YXIgZSxuPTAscj0tMSxpPXQubGVuZ3RoOysrcjxpOykoZT0rdFtyXVsxXSkmJihuKz1lKTtyZXR1cm4gbn12YXIgd2s9ZnVuY3Rpb24odCl7cmV0dXJuIF9rKHQpLnJldmVyc2UoKX0sRWs9ZnVuY3Rpb24odCl7dmFyIGUsbixyPXQubGVuZ3RoLGk9dC5tYXAoa2spLGE9YmsodCksbz0wLHM9MCxjPVtdLHU9W107Zm9yKGU9MDtlPHI7KytlKW49YVtlXSxvPHM/KG8rPWlbbl0sYy5wdXNoKG4pKToocys9aVtuXSx1LnB1c2gobikpO3JldHVybiB1LnJldmVyc2UoKS5jb25jYXQoYyl9LFRrPWZ1bmN0aW9uKHQpe3JldHVybiBmayh0KS5yZXZlcnNlKCl9O3ZhciBDaz1EYXRlLnByb3RvdHlwZS50b0lTT1N0cmluZz9mdW5jdGlvbih0KXtyZXR1cm4gdC50b0lTT1N0cmluZygpfTpXeSgiJVktJW0tJWRUJUg6JU06JVMuJUxaIik7dmFyIFNrPStuZXcgRGF0ZSgiMjAwMC0wMS0wMVQwMDowMDowMC4wMDBaIik/ZnVuY3Rpb24odCl7dmFyIGU9bmV3IERhdGUodCk7cmV0dXJuIGlzTmFOKGUpP251bGw6ZX06VnkoIiVZLSVtLSVkVCVIOiVNOiVTLiVMWiIpLEFrPWZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uZXcgJG4saT1lO3JldHVybiBudWxsPT1lPyhyLnJlc3RhcnQodCxlLG4pLHIpOihlPStlLG49bnVsbD09bj96bigpOituLHIucmVzdGFydCgoZnVuY3Rpb24gYShvKXtvKz1pLHIucmVzdGFydChhLGkrPWUsbiksdChvKX0pLGUsbikscil9LE1rPWZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0fX07ZnVuY3Rpb24gT2sodCl7cmV0dXJuIHRbMF19ZnVuY3Rpb24gRGsodCl7cmV0dXJuIHRbMV19ZnVuY3Rpb24gTmsoKXt0aGlzLl89bnVsbH1mdW5jdGlvbiBCayh0KXt0LlU9dC5DPXQuTD10LlI9dC5QPXQuTj1udWxsfWZ1bmN0aW9uIExrKHQsZSl7dmFyIG49ZSxyPWUuUixpPW4uVTtpP2kuTD09PW4/aS5MPXI6aS5SPXI6dC5fPXIsci5VPWksbi5VPXIsbi5SPXIuTCxuLlImJihuLlIuVT1uKSxyLkw9bn1mdW5jdGlvbiBGayh0LGUpe3ZhciBuPWUscj1lLkwsaT1uLlU7aT9pLkw9PT1uP2kuTD1yOmkuUj1yOnQuXz1yLHIuVT1pLG4uVT1yLG4uTD1yLlIsbi5MJiYobi5MLlU9biksci5SPW59ZnVuY3Rpb24gUGsodCl7Zm9yKDt0Lkw7KXQ9dC5MO3JldHVybiB0fU5rLnByb3RvdHlwZT17Y29uc3RydWN0b3I6TmssaW5zZXJ0OmZ1bmN0aW9uKHQsZSl7dmFyIG4scixpO2lmKHQpe2lmKGUuUD10LGUuTj10Lk4sdC5OJiYodC5OLlA9ZSksdC5OPWUsdC5SKXtmb3IodD10LlI7dC5MOyl0PXQuTDt0Lkw9ZX1lbHNlIHQuUj1lO249dH1lbHNlIHRoaXMuXz8odD1Qayh0aGlzLl8pLGUuUD1udWxsLGUuTj10LHQuUD10Lkw9ZSxuPXQpOihlLlA9ZS5OPW51bGwsdGhpcy5fPWUsbj1udWxsKTtmb3IoZS5MPWUuUj1udWxsLGUuVT1uLGUuQz0hMCx0PWU7biYmbi5DOyluPT09KHI9bi5VKS5MPyhpPXIuUikmJmkuQz8obi5DPWkuQz0hMSxyLkM9ITAsdD1yKToodD09PW4uUiYmKExrKHRoaXMsbiksbj0odD1uKS5VKSxuLkM9ITEsci5DPSEwLEZrKHRoaXMscikpOihpPXIuTCkmJmkuQz8obi5DPWkuQz0hMSxyLkM9ITAsdD1yKToodD09PW4uTCYmKEZrKHRoaXMsbiksbj0odD1uKS5VKSxuLkM9ITEsci5DPSEwLExrKHRoaXMscikpLG49dC5VO3RoaXMuXy5DPSExfSxyZW1vdmU6ZnVuY3Rpb24odCl7dC5OJiYodC5OLlA9dC5QKSx0LlAmJih0LlAuTj10Lk4pLHQuTj10LlA9bnVsbDt2YXIgZSxuLHIsaT10LlUsYT10Lkwsbz10LlI7aWYobj1hP28/UGsobyk6YTpvLGk/aS5MPT09dD9pLkw9bjppLlI9bjp0aGlzLl89bixhJiZvPyhyPW4uQyxuLkM9dC5DLG4uTD1hLGEuVT1uLG4hPT1vPyhpPW4uVSxuLlU9dC5VLHQ9bi5SLGkuTD10LG4uUj1vLG8uVT1uKToobi5VPWksaT1uLHQ9bi5SKSk6KHI9dC5DLHQ9biksdCYmKHQuVT1pKSwhcilpZih0JiZ0LkMpdC5DPSExO2Vsc2V7ZG97aWYodD09PXRoaXMuXylicmVhaztpZih0PT09aS5MKXtpZigoZT1pLlIpLkMmJihlLkM9ITEsaS5DPSEwLExrKHRoaXMsaSksZT1pLlIpLGUuTCYmZS5MLkN8fGUuUiYmZS5SLkMpe2UuUiYmZS5SLkN8fChlLkwuQz0hMSxlLkM9ITAsRmsodGhpcyxlKSxlPWkuUiksZS5DPWkuQyxpLkM9ZS5SLkM9ITEsTGsodGhpcyxpKSx0PXRoaXMuXzticmVha319ZWxzZSBpZigoZT1pLkwpLkMmJihlLkM9ITEsaS5DPSEwLEZrKHRoaXMsaSksZT1pLkwpLGUuTCYmZS5MLkN8fGUuUiYmZS5SLkMpe2UuTCYmZS5MLkN8fChlLlIuQz0hMSxlLkM9ITAsTGsodGhpcyxlKSxlPWkuTCksZS5DPWkuQyxpLkM9ZS5MLkM9ITEsRmsodGhpcyxpKSx0PXRoaXMuXzticmVha31lLkM9ITAsdD1pLGk9aS5VfXdoaWxlKCF0LkMpO3QmJih0LkM9ITEpfX19O3ZhciBJaz1OaztmdW5jdGlvbiBqayh0LGUsbixyKXt2YXIgaT1bbnVsbCxudWxsXSxhPWN3LnB1c2goaSktMTtyZXR1cm4gaS5sZWZ0PXQsaS5yaWdodD1lLG4mJllrKGksdCxlLG4pLHImJllrKGksZSx0LHIpLG93W3QuaW5kZXhdLmhhbGZlZGdlcy5wdXNoKGEpLG93W2UuaW5kZXhdLmhhbGZlZGdlcy5wdXNoKGEpLGl9ZnVuY3Rpb24gUmsodCxlLG4pe3ZhciByPVtlLG5dO3JldHVybiByLmxlZnQ9dCxyfWZ1bmN0aW9uIFlrKHQsZSxuLHIpe3RbMF18fHRbMV0/dC5sZWZ0PT09bj90WzFdPXI6dFswXT1yOih0WzBdPXIsdC5sZWZ0PWUsdC5yaWdodD1uKX1mdW5jdGlvbiB6ayh0LGUsbixyLGkpe3ZhciBhLG89dFswXSxzPXRbMV0sYz1vWzBdLHU9b1sxXSxsPTAsaD0xLGY9c1swXS1jLGQ9c1sxXS11O2lmKGE9ZS1jLGZ8fCEoYT4wKSl7aWYoYS89ZixmPDApe2lmKGE8bClyZXR1cm47YTxoJiYoaD1hKX1lbHNlIGlmKGY+MCl7aWYoYT5oKXJldHVybjthPmwmJihsPWEpfWlmKGE9ci1jLGZ8fCEoYTwwKSl7aWYoYS89ZixmPDApe2lmKGE+aClyZXR1cm47YT5sJiYobD1hKX1lbHNlIGlmKGY+MCl7aWYoYTxsKXJldHVybjthPGgmJihoPWEpfWlmKGE9bi11LGR8fCEoYT4wKSl7aWYoYS89ZCxkPDApe2lmKGE8bClyZXR1cm47YTxoJiYoaD1hKX1lbHNlIGlmKGQ+MCl7aWYoYT5oKXJldHVybjthPmwmJihsPWEpfWlmKGE9aS11LGR8fCEoYTwwKSl7aWYoYS89ZCxkPDApe2lmKGE+aClyZXR1cm47YT5sJiYobD1hKX1lbHNlIGlmKGQ+MCl7aWYoYTxsKXJldHVybjthPGgmJihoPWEpfXJldHVybiEobD4wfHxoPDEpfHwobD4wJiYodFswXT1bYytsKmYsdStsKmRdKSxoPDEmJih0WzFdPVtjK2gqZix1K2gqZF0pLCEwKX19fX19ZnVuY3Rpb24gVWsodCxlLG4scixpKXt2YXIgYT10WzFdO2lmKGEpcmV0dXJuITA7dmFyIG8scyxjPXRbMF0sdT10LmxlZnQsbD10LnJpZ2h0LGg9dVswXSxmPXVbMV0sZD1sWzBdLHA9bFsxXSxnPShoK2QpLzIseT0oZitwKS8yO2lmKHA9PT1mKXtpZihnPGV8fGc+PXIpcmV0dXJuO2lmKGg+ZCl7aWYoYyl7aWYoY1sxXT49aSlyZXR1cm59ZWxzZSBjPVtnLG5dO2E9W2csaV19ZWxzZXtpZihjKXtpZihjWzFdPG4pcmV0dXJufWVsc2UgYz1bZyxpXTthPVtnLG5dfX1lbHNlIGlmKHM9eS0obz0oaC1kKS8ocC1mKSkqZyxvPC0xfHxvPjEpaWYoaD5kKXtpZihjKXtpZihjWzFdPj1pKXJldHVybn1lbHNlIGM9WyhuLXMpL28sbl07YT1bKGktcykvbyxpXX1lbHNle2lmKGMpe2lmKGNbMV08bilyZXR1cm59ZWxzZSBjPVsoaS1zKS9vLGldO2E9WyhuLXMpL28sbl19ZWxzZSBpZihmPHApe2lmKGMpe2lmKGNbMF0+PXIpcmV0dXJufWVsc2UgYz1bZSxvKmUrc107YT1bcixvKnIrc119ZWxzZXtpZihjKXtpZihjWzBdPGUpcmV0dXJufWVsc2UgYz1bcixvKnIrc107YT1bZSxvKmUrc119cmV0dXJuIHRbMF09Yyx0WzFdPWEsITB9ZnVuY3Rpb24gJGsodCxlKXt2YXIgbj10LnNpdGUscj1lLmxlZnQsaT1lLnJpZ2h0O3JldHVybiBuPT09aSYmKGk9cixyPW4pLGk/TWF0aC5hdGFuMihpWzFdLXJbMV0saVswXS1yWzBdKToobj09PXI/KHI9ZVsxXSxpPWVbMF0pOihyPWVbMF0saT1lWzFdKSxNYXRoLmF0YW4yKHJbMF0taVswXSxpWzFdLXJbMV0pKX1mdW5jdGlvbiBXayh0LGUpe3JldHVybiBlWysoZS5sZWZ0IT09dC5zaXRlKV19ZnVuY3Rpb24gVmsodCxlKXtyZXR1cm4gZVsrKGUubGVmdD09PXQuc2l0ZSldfXZhciBIayxHaz1bXTtmdW5jdGlvbiBxaygpe0JrKHRoaXMpLHRoaXMueD10aGlzLnk9dGhpcy5hcmM9dGhpcy5zaXRlPXRoaXMuY3k9bnVsbH1mdW5jdGlvbiBYayh0KXt2YXIgZT10LlAsbj10Lk47aWYoZSYmbil7dmFyIHI9ZS5zaXRlLGk9dC5zaXRlLGE9bi5zaXRlO2lmKHIhPT1hKXt2YXIgbz1pWzBdLHM9aVsxXSxjPXJbMF0tbyx1PXJbMV0tcyxsPWFbMF0tbyxoPWFbMV0tcyxmPTIqKGMqaC11KmwpO2lmKCEoZj49LWx3KSl7dmFyIGQ9YypjK3UqdSxwPWwqbCtoKmgsZz0oaCpkLXUqcCkvZix5PShjKnAtbCpkKS9mLHY9R2sucG9wKCl8fG5ldyBxazt2LmFyYz10LHYuc2l0ZT1pLHYueD1nK28sdi55PSh2LmN5PXkrcykrTWF0aC5zcXJ0KGcqZyt5KnkpLHQuY2lyY2xlPXY7Zm9yKHZhciBtPW51bGwsYj1zdy5fO2I7KWlmKHYueTxiLnl8fHYueT09PWIueSYmdi54PD1iLngpe2lmKCFiLkwpe209Yi5QO2JyZWFrfWI9Yi5MfWVsc2V7aWYoIWIuUil7bT1iO2JyZWFrfWI9Yi5SfXN3Lmluc2VydChtLHYpLG18fChIaz12KX19fX1mdW5jdGlvbiBaayh0KXt2YXIgZT10LmNpcmNsZTtlJiYoZS5QfHwoSGs9ZS5OKSxzdy5yZW1vdmUoZSksR2sucHVzaChlKSxCayhlKSx0LmNpcmNsZT1udWxsKX12YXIgSms9W107ZnVuY3Rpb24gUWsoKXtCayh0aGlzKSx0aGlzLmVkZ2U9dGhpcy5zaXRlPXRoaXMuY2lyY2xlPW51bGx9ZnVuY3Rpb24gS2sodCl7dmFyIGU9SmsucG9wKCl8fG5ldyBRaztyZXR1cm4gZS5zaXRlPXQsZX1mdW5jdGlvbiB0dyh0KXtaayh0KSxhdy5yZW1vdmUodCksSmsucHVzaCh0KSxCayh0KX1mdW5jdGlvbiBldyh0KXt2YXIgZT10LmNpcmNsZSxuPWUueCxyPWUuY3ksaT1bbixyXSxhPXQuUCxvPXQuTixzPVt0XTt0dyh0KTtmb3IodmFyIGM9YTtjLmNpcmNsZSYmTWF0aC5hYnMobi1jLmNpcmNsZS54KTx1dyYmTWF0aC5hYnMoci1jLmNpcmNsZS5jeSk8dXc7KWE9Yy5QLHMudW5zaGlmdChjKSx0dyhjKSxjPWE7cy51bnNoaWZ0KGMpLFprKGMpO2Zvcih2YXIgdT1vO3UuY2lyY2xlJiZNYXRoLmFicyhuLXUuY2lyY2xlLngpPHV3JiZNYXRoLmFicyhyLXUuY2lyY2xlLmN5KTx1dzspbz11Lk4scy5wdXNoKHUpLHR3KHUpLHU9bztzLnB1c2godSksWmsodSk7dmFyIGwsaD1zLmxlbmd0aDtmb3IobD0xO2w8aDsrK2wpdT1zW2xdLGM9c1tsLTFdLFlrKHUuZWRnZSxjLnNpdGUsdS5zaXRlLGkpO2M9c1swXSwodT1zW2gtMV0pLmVkZ2U9amsoYy5zaXRlLHUuc2l0ZSxudWxsLGkpLFhrKGMpLFhrKHUpfWZ1bmN0aW9uIG53KHQpe2Zvcih2YXIgZSxuLHIsaSxhPXRbMF0sbz10WzFdLHM9YXcuXztzOylpZigocj1ydyhzLG8pLWEpPnV3KXM9cy5MO2Vsc2V7aWYoISgoaT1hLWl3KHMsbykpPnV3KSl7cj4tdXc/KGU9cy5QLG49cyk6aT4tdXc/KGU9cyxuPXMuTik6ZT1uPXM7YnJlYWt9aWYoIXMuUil7ZT1zO2JyZWFrfXM9cy5SfSFmdW5jdGlvbih0KXtvd1t0LmluZGV4XT17c2l0ZTp0LGhhbGZlZGdlczpbXX19KHQpO3ZhciBjPUtrKHQpO2lmKGF3Lmluc2VydChlLGMpLGV8fG4pe2lmKGU9PT1uKXJldHVybiBaayhlKSxuPUtrKGUuc2l0ZSksYXcuaW5zZXJ0KGMsbiksYy5lZGdlPW4uZWRnZT1qayhlLnNpdGUsYy5zaXRlKSxYayhlKSx2b2lkIFhrKG4pO2lmKG4pe1prKGUpLFprKG4pO3ZhciB1PWUuc2l0ZSxsPXVbMF0saD11WzFdLGY9dFswXS1sLGQ9dFsxXS1oLHA9bi5zaXRlLGc9cFswXS1sLHk9cFsxXS1oLHY9MiooZip5LWQqZyksbT1mKmYrZCpkLGI9ZypnK3kqeSx4PVsoeSptLWQqYikvditsLChmKmItZyptKS92K2hdO1lrKG4uZWRnZSx1LHAseCksYy5lZGdlPWprKHUsdCxudWxsLHgpLG4uZWRnZT1qayh0LHAsbnVsbCx4KSxYayhlKSxYayhuKX1lbHNlIGMuZWRnZT1qayhlLnNpdGUsYy5zaXRlKX19ZnVuY3Rpb24gcncodCxlKXt2YXIgbj10LnNpdGUscj1uWzBdLGk9blsxXSxhPWktZTtpZighYSlyZXR1cm4gcjt2YXIgbz10LlA7aWYoIW8pcmV0dXJuLTEvMDt2YXIgcz0obj1vLnNpdGUpWzBdLGM9blsxXSx1PWMtZTtpZighdSlyZXR1cm4gczt2YXIgbD1zLXIsaD0xL2EtMS91LGY9bC91O3JldHVybiBoPygtZitNYXRoLnNxcnQoZipmLTIqaCoobCpsLygtMip1KS1jK3UvMitpLWEvMikpKS9oK3I6KHIrcykvMn1mdW5jdGlvbiBpdyh0LGUpe3ZhciBuPXQuTjtpZihuKXJldHVybiBydyhuLGUpO3ZhciByPXQuc2l0ZTtyZXR1cm4gclsxXT09PWU/clswXToxLzB9dmFyIGF3LG93LHN3LGN3LHV3PTFlLTYsbHc9MWUtMTI7ZnVuY3Rpb24gaHcodCxlKXtyZXR1cm4gZVsxXS10WzFdfHxlWzBdLXRbMF19ZnVuY3Rpb24gZncodCxlKXt2YXIgbixyLGksYT10LnNvcnQoaHcpLnBvcCgpO2Zvcihjdz1bXSxvdz1uZXcgQXJyYXkodC5sZW5ndGgpLGF3PW5ldyBJayxzdz1uZXcgSWs7OylpZihpPUhrLGEmJighaXx8YVsxXTxpLnl8fGFbMV09PT1pLnkmJmFbMF08aS54KSlhWzBdPT09biYmYVsxXT09PXJ8fChudyhhKSxuPWFbMF0scj1hWzFdKSxhPXQucG9wKCk7ZWxzZXtpZighaSlicmVhaztldyhpLmFyYyl9aWYoZnVuY3Rpb24oKXtmb3IodmFyIHQsZSxuLHIsaT0wLGE9b3cubGVuZ3RoO2k8YTsrK2kpaWYoKHQ9b3dbaV0pJiYocj0oZT10LmhhbGZlZGdlcykubGVuZ3RoKSl7dmFyIG89bmV3IEFycmF5KHIpLHM9bmV3IEFycmF5KHIpO2ZvcihuPTA7bjxyOysrbilvW25dPW4sc1tuXT0kayh0LGN3W2Vbbl1dKTtmb3Ioby5zb3J0KChmdW5jdGlvbih0LGUpe3JldHVybiBzW2VdLXNbdF19KSksbj0wO248cjsrK24pc1tuXT1lW29bbl1dO2ZvcihuPTA7bjxyOysrbillW25dPXNbbl19fSgpLGUpe3ZhciBvPStlWzBdWzBdLHM9K2VbMF1bMV0sYz0rZVsxXVswXSx1PStlWzFdWzFdOyFmdW5jdGlvbih0LGUsbixyKXtmb3IodmFyIGksYT1jdy5sZW5ndGg7YS0tOylVayhpPWN3W2FdLHQsZSxuLHIpJiZ6ayhpLHQsZSxuLHIpJiYoTWF0aC5hYnMoaVswXVswXS1pWzFdWzBdKT51d3x8TWF0aC5hYnMoaVswXVsxXS1pWzFdWzFdKT51dyl8fGRlbGV0ZSBjd1thXX0obyxzLGMsdSksZnVuY3Rpb24odCxlLG4scil7dmFyIGksYSxvLHMsYyx1LGwsaCxmLGQscCxnLHk9b3cubGVuZ3RoLHY9ITA7Zm9yKGk9MDtpPHk7KytpKWlmKGE9b3dbaV0pe2ZvcihvPWEuc2l0ZSxzPShjPWEuaGFsZmVkZ2VzKS5sZW5ndGg7cy0tOyljd1tjW3NdXXx8Yy5zcGxpY2UocywxKTtmb3Iocz0wLHU9Yy5sZW5ndGg7czx1OylwPShkPVZrKGEsY3dbY1tzXV0pKVswXSxnPWRbMV0saD0obD1XayhhLGN3W2NbKytzJXVdXSkpWzBdLGY9bFsxXSwoTWF0aC5hYnMocC1oKT51d3x8TWF0aC5hYnMoZy1mKT51dykmJihjLnNwbGljZShzLDAsY3cucHVzaChSayhvLGQsTWF0aC5hYnMocC10KTx1dyYmci1nPnV3P1t0LE1hdGguYWJzKGgtdCk8dXc/ZjpyXTpNYXRoLmFicyhnLXIpPHV3JiZuLXA+dXc/W01hdGguYWJzKGYtcik8dXc/aDpuLHJdOk1hdGguYWJzKHAtbik8dXcmJmctZT51dz9bbixNYXRoLmFicyhoLW4pPHV3P2Y6ZV06TWF0aC5hYnMoZy1lKTx1dyYmcC10PnV3P1tNYXRoLmFicyhmLWUpPHV3P2g6dCxlXTpudWxsKSktMSksKyt1KTt1JiYodj0hMSl9aWYodil7dmFyIG0sYix4LF89MS8wO2ZvcihpPTAsdj1udWxsO2k8eTsrK2kpKGE9b3dbaV0pJiYoeD0obT0obz1hLnNpdGUpWzBdLXQpKm0rKGI9b1sxXS1lKSpiKTxfJiYoXz14LHY9YSk7aWYodil7dmFyIGs9W3QsZV0sdz1bdCxyXSxFPVtuLHJdLFQ9W24sZV07di5oYWxmZWRnZXMucHVzaChjdy5wdXNoKFJrKG89di5zaXRlLGssdykpLTEsY3cucHVzaChSayhvLHcsRSkpLTEsY3cucHVzaChSayhvLEUsVCkpLTEsY3cucHVzaChSayhvLFQsaykpLTEpfX1mb3IoaT0wO2k8eTsrK2kpKGE9b3dbaV0pJiYoYS5oYWxmZWRnZXMubGVuZ3RofHxkZWxldGUgb3dbaV0pfShvLHMsYyx1KX10aGlzLmVkZ2VzPWN3LHRoaXMuY2VsbHM9b3csYXc9c3c9Y3c9b3c9bnVsbH1mdy5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOmZ3LHBvbHlnb25zOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5lZGdlcztyZXR1cm4gdGhpcy5jZWxscy5tYXAoKGZ1bmN0aW9uKGUpe3ZhciBuPWUuaGFsZmVkZ2VzLm1hcCgoZnVuY3Rpb24obil7cmV0dXJuIFdrKGUsdFtuXSl9KSk7cmV0dXJuIG4uZGF0YT1lLnNpdGUuZGF0YSxufSkpfSx0cmlhbmdsZXM6ZnVuY3Rpb24oKXt2YXIgdD1bXSxlPXRoaXMuZWRnZXM7cmV0dXJuIHRoaXMuY2VsbHMuZm9yRWFjaCgoZnVuY3Rpb24obixyKXtpZihhPShpPW4uaGFsZmVkZ2VzKS5sZW5ndGgpZm9yKHZhciBpLGEsbyxzLGMsdSxsPW4uc2l0ZSxoPS0xLGY9ZVtpW2EtMV1dLGQ9Zi5sZWZ0PT09bD9mLnJpZ2h0OmYubGVmdDsrK2g8YTspbz1kLGQ9KGY9ZVtpW2hdXSkubGVmdD09PWw/Zi5yaWdodDpmLmxlZnQsbyYmZCYmcjxvLmluZGV4JiZyPGQuaW5kZXgmJihjPW8sdT1kLCgocz1sKVswXS11WzBdKSooY1sxXS1zWzFdKS0oc1swXS1jWzBdKSoodVsxXS1zWzFdKTwwKSYmdC5wdXNoKFtsLmRhdGEsby5kYXRhLGQuZGF0YV0pfSkpLHR9LGxpbmtzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWRnZXMuZmlsdGVyKChmdW5jdGlvbih0KXtyZXR1cm4gdC5yaWdodH0pKS5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybntzb3VyY2U6dC5sZWZ0LmRhdGEsdGFyZ2V0OnQucmlnaHQuZGF0YX19KSl9LGZpbmQ6ZnVuY3Rpb24odCxlLG4pe2Zvcih2YXIgcixpLGE9dGhpcyxvPWEuX2ZvdW5kfHwwLHM9YS5jZWxscy5sZW5ndGg7IShpPWEuY2VsbHNbb10pOylpZigrK28+PXMpcmV0dXJuIG51bGw7dmFyIGM9dC1pLnNpdGVbMF0sdT1lLWkuc2l0ZVsxXSxsPWMqYyt1KnU7ZG97aT1hLmNlbGxzW3I9b10sbz1udWxsLGkuaGFsZmVkZ2VzLmZvckVhY2goKGZ1bmN0aW9uKG4pe3ZhciByPWEuZWRnZXNbbl0scz1yLmxlZnQ7aWYocyE9PWkuc2l0ZSYmc3x8KHM9ci5yaWdodCkpe3ZhciBjPXQtc1swXSx1PWUtc1sxXSxoPWMqYyt1KnU7aDxsJiYobD1oLG89cy5pbmRleCl9fSkpfXdoaWxlKG51bGwhPT1vKTtyZXR1cm4gYS5fZm91bmQ9cixudWxsPT1ufHxsPD1uKm4/aS5zaXRlOm51bGx9fTt2YXIgZHc9ZnVuY3Rpb24oKXt2YXIgdD1PayxlPURrLG49bnVsbDtmdW5jdGlvbiByKHIpe3JldHVybiBuZXcgZncoci5tYXAoKGZ1bmN0aW9uKG4saSl7dmFyIGE9W01hdGgucm91bmQodChuLGkscikvdXcpKnV3LE1hdGgucm91bmQoZShuLGkscikvdXcpKnV3XTtyZXR1cm4gYS5pbmRleD1pLGEuZGF0YT1uLGF9KSksbil9cmV0dXJuIHIucG9seWdvbnM9ZnVuY3Rpb24odCl7cmV0dXJuIHIodCkucG9seWdvbnMoKX0sci5saW5rcz1mdW5jdGlvbih0KXtyZXR1cm4gcih0KS5saW5rcygpfSxyLnRyaWFuZ2xlcz1mdW5jdGlvbih0KXtyZXR1cm4gcih0KS50cmlhbmdsZXMoKX0sci54PWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PSJmdW5jdGlvbiI9PXR5cGVvZiBlP2U6TWsoK2UpLHIpOnR9LHIueT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT0iZnVuY3Rpb24iPT10eXBlb2YgdD90Ok1rKCt0KSxyKTplfSxyLmV4dGVudD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj1udWxsPT10P251bGw6W1srdFswXVswXSwrdFswXVsxXV0sWyt0WzFdWzBdLCt0WzFdWzFdXV0scik6biYmW1tuWzBdWzBdLG5bMF1bMV1dLFtuWzFdWzBdLG5bMV1bMV1dXX0sci5zaXplPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPW51bGw9PXQ/bnVsbDpbWzAsMF0sWyt0WzBdLCt0WzFdXV0scik6biYmW25bMV1bMF0tblswXVswXSxuWzFdWzFdLW5bMF1bMV1dfSxyfSxwdz1mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdH19O2Z1bmN0aW9uIGd3KHQsZSxuKXt0aGlzLnRhcmdldD10LHRoaXMudHlwZT1lLHRoaXMudHJhbnNmb3JtPW59ZnVuY3Rpb24geXcodCxlLG4pe3RoaXMuaz10LHRoaXMueD1lLHRoaXMueT1ufXl3LnByb3RvdHlwZT17Y29uc3RydWN0b3I6eXcsc2NhbGU6ZnVuY3Rpb24odCl7cmV0dXJuIDE9PT10P3RoaXM6bmV3IHl3KHRoaXMuayp0LHRoaXMueCx0aGlzLnkpfSx0cmFuc2xhdGU6ZnVuY3Rpb24odCxlKXtyZXR1cm4gMD09PXQmMD09PWU/dGhpczpuZXcgeXcodGhpcy5rLHRoaXMueCt0aGlzLmsqdCx0aGlzLnkrdGhpcy5rKmUpfSxhcHBseTpmdW5jdGlvbih0KXtyZXR1cm5bdFswXSp0aGlzLmsrdGhpcy54LHRbMV0qdGhpcy5rK3RoaXMueV19LGFwcGx5WDpmdW5jdGlvbih0KXtyZXR1cm4gdCp0aGlzLmsrdGhpcy54fSxhcHBseVk6ZnVuY3Rpb24odCl7cmV0dXJuIHQqdGhpcy5rK3RoaXMueX0saW52ZXJ0OmZ1bmN0aW9uKHQpe3JldHVyblsodFswXS10aGlzLngpL3RoaXMuaywodFsxXS10aGlzLnkpL3RoaXMua119LGludmVydFg6ZnVuY3Rpb24odCl7cmV0dXJuKHQtdGhpcy54KS90aGlzLmt9LGludmVydFk6ZnVuY3Rpb24odCl7cmV0dXJuKHQtdGhpcy55KS90aGlzLmt9LHJlc2NhbGVYOmZ1bmN0aW9uKHQpe3JldHVybiB0LmNvcHkoKS5kb21haW4odC5yYW5nZSgpLm1hcCh0aGlzLmludmVydFgsdGhpcykubWFwKHQuaW52ZXJ0LHQpKX0scmVzY2FsZVk6ZnVuY3Rpb24odCl7cmV0dXJuIHQuY29weSgpLmRvbWFpbih0LnJhbmdlKCkubWFwKHRoaXMuaW52ZXJ0WSx0aGlzKS5tYXAodC5pbnZlcnQsdCkpfSx0b1N0cmluZzpmdW5jdGlvbigpe3JldHVybiJ0cmFuc2xhdGUoIit0aGlzLngrIiwiK3RoaXMueSsiKSBzY2FsZSgiK3RoaXMuaysiKSJ9fTt2YXIgdnc9bmV3IHl3KDEsMCwwKTtmdW5jdGlvbiBtdyh0KXtmb3IoOyF0Ll9fem9vbTspaWYoISh0PXQucGFyZW50Tm9kZSkpcmV0dXJuIHZ3O3JldHVybiB0Ll9fem9vbX1mdW5jdGlvbiBidygpe2NlLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpfW13LnByb3RvdHlwZT15dy5wcm90b3R5cGU7dmFyIHh3PWZ1bmN0aW9uKCl7Y2UucHJldmVudERlZmF1bHQoKSxjZS5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKX07ZnVuY3Rpb24gX3coKXtyZXR1cm4hY2UuY3RybEtleSYmIWNlLmJ1dHRvbn1mdW5jdGlvbiBrdygpe3ZhciB0PXRoaXM7cmV0dXJuIHQgaW5zdGFuY2VvZiBTVkdFbGVtZW50Pyh0PXQub3duZXJTVkdFbGVtZW50fHx0KS5oYXNBdHRyaWJ1dGUoInZpZXdCb3giKT9bWyh0PXQudmlld0JveC5iYXNlVmFsKS54LHQueV0sW3QueCt0LndpZHRoLHQueSt0LmhlaWdodF1dOltbMCwwXSxbdC53aWR0aC5iYXNlVmFsLnZhbHVlLHQuaGVpZ2h0LmJhc2VWYWwudmFsdWVdXTpbWzAsMF0sW3QuY2xpZW50V2lkdGgsdC5jbGllbnRIZWlnaHRdXX1mdW5jdGlvbiB3dygpe3JldHVybiB0aGlzLl9fem9vbXx8dnd9ZnVuY3Rpb24gRXcoKXtyZXR1cm4tY2UuZGVsdGFZKigxPT09Y2UuZGVsdGFNb2RlPy4wNTpjZS5kZWx0YU1vZGU/MTouMDAyKX1mdW5jdGlvbiBUdygpe3JldHVybiBuYXZpZ2F0b3IubWF4VG91Y2hQb2ludHN8fCJvbnRvdWNoc3RhcnQiaW4gdGhpc31mdW5jdGlvbiBDdyh0LGUsbil7dmFyIHI9dC5pbnZlcnRYKGVbMF1bMF0pLW5bMF1bMF0saT10LmludmVydFgoZVsxXVswXSktblsxXVswXSxhPXQuaW52ZXJ0WShlWzBdWzFdKS1uWzBdWzFdLG89dC5pbnZlcnRZKGVbMV1bMV0pLW5bMV1bMV07cmV0dXJuIHQudHJhbnNsYXRlKGk+cj8ocitpKS8yOk1hdGgubWluKDAscil8fE1hdGgubWF4KDAsaSksbz5hPyhhK28pLzI6TWF0aC5taW4oMCxhKXx8TWF0aC5tYXgoMCxvKSl9dmFyIFN3PWZ1bmN0aW9uKCl7dmFyIHQsZSxuPV93LHI9a3csaT1DdyxhPUV3LG89VHcscz1bMCwxLzBdLGM9W1stMS8wLC0xLzBdLFsxLzAsMS8wXV0sdT0yNTAsbD1mcCxoPWx0KCJzdGFydCIsInpvb20iLCJlbmQiKSxmPTA7ZnVuY3Rpb24gZCh0KXt0LnByb3BlcnR5KCJfX3pvb20iLHd3KS5vbigid2hlZWwuem9vbSIseCkub24oIm1vdXNlZG93bi56b29tIixfKS5vbigiZGJsY2xpY2suem9vbSIsaykuZmlsdGVyKG8pLm9uKCJ0b3VjaHN0YXJ0Lnpvb20iLHcpLm9uKCJ0b3VjaG1vdmUuem9vbSIsRSkub24oInRvdWNoZW5kLnpvb20gdG91Y2hjYW5jZWwuem9vbSIsVCkuc3R5bGUoInRvdWNoLWFjdGlvbiIsIm5vbmUiKS5zdHlsZSgiLXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yIiwicmdiYSgwLDAsMCwwKSIpfWZ1bmN0aW9uIHAodCxlKXtyZXR1cm4oZT1NYXRoLm1heChzWzBdLE1hdGgubWluKHNbMV0sZSkpKT09PXQuaz90Om5ldyB5dyhlLHQueCx0LnkpfWZ1bmN0aW9uIGcodCxlLG4pe3ZhciByPWVbMF0tblswXSp0LmssaT1lWzFdLW5bMV0qdC5rO3JldHVybiByPT09dC54JiZpPT09dC55P3Q6bmV3IHl3KHQuayxyLGkpfWZ1bmN0aW9uIHkodCl7cmV0dXJuWygrdFswXVswXSsgK3RbMV1bMF0pLzIsKCt0WzBdWzFdKyArdFsxXVsxXSkvMl19ZnVuY3Rpb24gdih0LGUsbil7dC5vbigic3RhcnQuem9vbSIsKGZ1bmN0aW9uKCl7bSh0aGlzLGFyZ3VtZW50cykuc3RhcnQoKX0pKS5vbigiaW50ZXJydXB0Lnpvb20gZW5kLnpvb20iLChmdW5jdGlvbigpe20odGhpcyxhcmd1bWVudHMpLmVuZCgpfSkpLnR3ZWVuKCJ6b29tIiwoZnVuY3Rpb24oKXt2YXIgdD10aGlzLGk9YXJndW1lbnRzLGE9bSh0LGkpLG89ci5hcHBseSh0LGkpLHM9bnVsbD09bj95KG8pOiJmdW5jdGlvbiI9PXR5cGVvZiBuP24uYXBwbHkodCxpKTpuLGM9TWF0aC5tYXgob1sxXVswXS1vWzBdWzBdLG9bMV1bMV0tb1swXVsxXSksdT10Ll9fem9vbSxoPSJmdW5jdGlvbiI9PXR5cGVvZiBlP2UuYXBwbHkodCxpKTplLGY9bCh1LmludmVydChzKS5jb25jYXQoYy91LmspLGguaW52ZXJ0KHMpLmNvbmNhdChjL2guaykpO3JldHVybiBmdW5jdGlvbih0KXtpZigxPT09dCl0PWg7ZWxzZXt2YXIgZT1mKHQpLG49Yy9lWzJdO3Q9bmV3IHl3KG4sc1swXS1lWzBdKm4sc1sxXS1lWzFdKm4pfWEuem9vbShudWxsLHQpfX0pKX1mdW5jdGlvbiBtKHQsZSxuKXtyZXR1cm4hbiYmdC5fX3pvb21pbmd8fG5ldyBiKHQsZSl9ZnVuY3Rpb24gYih0LGUpe3RoaXMudGhhdD10LHRoaXMuYXJncz1lLHRoaXMuYWN0aXZlPTAsdGhpcy5leHRlbnQ9ci5hcHBseSh0LGUpLHRoaXMudGFwcz0wfWZ1bmN0aW9uIHgoKXtpZihuLmFwcGx5KHRoaXMsYXJndW1lbnRzKSl7dmFyIHQ9bSh0aGlzLGFyZ3VtZW50cyksZT10aGlzLl9fem9vbSxyPU1hdGgubWF4KHNbMF0sTWF0aC5taW4oc1sxXSxlLmsqTWF0aC5wb3coMixhLmFwcGx5KHRoaXMsYXJndW1lbnRzKSkpKSxvPU5uKHRoaXMpO2lmKHQud2hlZWwpdC5tb3VzZVswXVswXT09PW9bMF0mJnQubW91c2VbMF1bMV09PT1vWzFdfHwodC5tb3VzZVsxXT1lLmludmVydCh0Lm1vdXNlWzBdPW8pKSxjbGVhclRpbWVvdXQodC53aGVlbCk7ZWxzZXtpZihlLms9PT1yKXJldHVybjt0Lm1vdXNlPVtvLGUuaW52ZXJ0KG8pXSxvcih0aGlzKSx0LnN0YXJ0KCl9eHcoKSx0LndoZWVsPXNldFRpbWVvdXQodSwxNTApLHQuem9vbSgibW91c2UiLGkoZyhwKGUsciksdC5tb3VzZVswXSx0Lm1vdXNlWzFdKSx0LmV4dGVudCxjKSl9ZnVuY3Rpb24gdSgpe3Qud2hlZWw9bnVsbCx0LmVuZCgpfX1mdW5jdGlvbiBfKCl7aWYoIWUmJm4uYXBwbHkodGhpcyxhcmd1bWVudHMpKXt2YXIgdD1tKHRoaXMsYXJndW1lbnRzLCEwKSxyPWtlKGNlLnZpZXcpLm9uKCJtb3VzZW1vdmUuem9vbSIsdSwhMCkub24oIm1vdXNldXAuem9vbSIsbCwhMCksYT1Obih0aGlzKSxvPWNlLmNsaWVudFgscz1jZS5jbGllbnRZO1RlKGNlLnZpZXcpLGJ3KCksdC5tb3VzZT1bYSx0aGlzLl9fem9vbS5pbnZlcnQoYSldLG9yKHRoaXMpLHQuc3RhcnQoKX1mdW5jdGlvbiB1KCl7aWYoeHcoKSwhdC5tb3ZlZCl7dmFyIGU9Y2UuY2xpZW50WC1vLG49Y2UuY2xpZW50WS1zO3QubW92ZWQ9ZSplK24qbj5mfXQuem9vbSgibW91c2UiLGkoZyh0LnRoYXQuX196b29tLHQubW91c2VbMF09Tm4odC50aGF0KSx0Lm1vdXNlWzFdKSx0LmV4dGVudCxjKSl9ZnVuY3Rpb24gbCgpe3Iub24oIm1vdXNlbW92ZS56b29tIG1vdXNldXAuem9vbSIsbnVsbCksQ2UoY2Uudmlldyx0Lm1vdmVkKSx4dygpLHQuZW5kKCl9fWZ1bmN0aW9uIGsoKXtpZihuLmFwcGx5KHRoaXMsYXJndW1lbnRzKSl7dmFyIHQ9dGhpcy5fX3pvb20sZT1Obih0aGlzKSxhPXQuaW52ZXJ0KGUpLG89dC5rKihjZS5zaGlmdEtleT8uNToyKSxzPWkoZyhwKHQsbyksZSxhKSxyLmFwcGx5KHRoaXMsYXJndW1lbnRzKSxjKTt4dygpLHU+MD9rZSh0aGlzKS50cmFuc2l0aW9uKCkuZHVyYXRpb24odSkuY2FsbCh2LHMsZSk6a2UodGhpcykuY2FsbChkLnRyYW5zZm9ybSxzKX19ZnVuY3Rpb24gdygpe2lmKG4uYXBwbHkodGhpcyxhcmd1bWVudHMpKXt2YXIgZSxyLGksYSxvPWNlLnRvdWNoZXMscz1vLmxlbmd0aCxjPW0odGhpcyxhcmd1bWVudHMsY2UuY2hhbmdlZFRvdWNoZXMubGVuZ3RoPT09cyk7Zm9yKGJ3KCkscj0wO3I8czsrK3IpaT1vW3JdLGE9W2E9RG4odGhpcyxvLGkuaWRlbnRpZmllciksdGhpcy5fX3pvb20uaW52ZXJ0KGEpLGkuaWRlbnRpZmllcl0sYy50b3VjaDA/Yy50b3VjaDF8fGMudG91Y2gwWzJdPT09YVsyXXx8KGMudG91Y2gxPWEsYy50YXBzPTApOihjLnRvdWNoMD1hLGU9ITAsYy50YXBzPTErISF0KTt0JiYodD1jbGVhclRpbWVvdXQodCkpLGUmJihjLnRhcHM8MiYmKHQ9c2V0VGltZW91dCgoZnVuY3Rpb24oKXt0PW51bGx9KSw1MDApKSxvcih0aGlzKSxjLnN0YXJ0KCkpfX1mdW5jdGlvbiBFKCl7aWYodGhpcy5fX3pvb21pbmcpe3ZhciBlLG4scixhLG89bSh0aGlzLGFyZ3VtZW50cykscz1jZS5jaGFuZ2VkVG91Y2hlcyx1PXMubGVuZ3RoO2Zvcih4dygpLHQmJih0PWNsZWFyVGltZW91dCh0KSksby50YXBzPTAsZT0wO2U8dTsrK2Upbj1zW2VdLHI9RG4odGhpcyxzLG4uaWRlbnRpZmllciksby50b3VjaDAmJm8udG91Y2gwWzJdPT09bi5pZGVudGlmaWVyP28udG91Y2gwWzBdPXI6by50b3VjaDEmJm8udG91Y2gxWzJdPT09bi5pZGVudGlmaWVyJiYoby50b3VjaDFbMF09cik7aWYobj1vLnRoYXQuX196b29tLG8udG91Y2gxKXt2YXIgbD1vLnRvdWNoMFswXSxoPW8udG91Y2gwWzFdLGY9by50b3VjaDFbMF0sZD1vLnRvdWNoMVsxXSx5PSh5PWZbMF0tbFswXSkqeSsoeT1mWzFdLWxbMV0pKnksdj0odj1kWzBdLWhbMF0pKnYrKHY9ZFsxXS1oWzFdKSp2O249cChuLE1hdGguc3FydCh5L3YpKSxyPVsobFswXStmWzBdKS8yLChsWzFdK2ZbMV0pLzJdLGE9WyhoWzBdK2RbMF0pLzIsKGhbMV0rZFsxXSkvMl19ZWxzZXtpZighby50b3VjaDApcmV0dXJuO3I9by50b3VjaDBbMF0sYT1vLnRvdWNoMFsxXX1vLnpvb20oInRvdWNoIixpKGcobixyLGEpLG8uZXh0ZW50LGMpKX19ZnVuY3Rpb24gVCgpe2lmKHRoaXMuX196b29taW5nKXt2YXIgdCxuLHI9bSh0aGlzLGFyZ3VtZW50cyksaT1jZS5jaGFuZ2VkVG91Y2hlcyxhPWkubGVuZ3RoO2ZvcihidygpLGUmJmNsZWFyVGltZW91dChlKSxlPXNldFRpbWVvdXQoKGZ1bmN0aW9uKCl7ZT1udWxsfSksNTAwKSx0PTA7dDxhOysrdCluPWlbdF0sci50b3VjaDAmJnIudG91Y2gwWzJdPT09bi5pZGVudGlmaWVyP2RlbGV0ZSByLnRvdWNoMDpyLnRvdWNoMSYmci50b3VjaDFbMl09PT1uLmlkZW50aWZpZXImJmRlbGV0ZSByLnRvdWNoMTtpZihyLnRvdWNoMSYmIXIudG91Y2gwJiYoci50b3VjaDA9ci50b3VjaDEsZGVsZXRlIHIudG91Y2gxKSxyLnRvdWNoMClyLnRvdWNoMFsxXT10aGlzLl9fem9vbS5pbnZlcnQoci50b3VjaDBbMF0pO2Vsc2UgaWYoci5lbmQoKSwyPT09ci50YXBzKXt2YXIgbz1rZSh0aGlzKS5vbigiZGJsY2xpY2suem9vbSIpO28mJm8uYXBwbHkodGhpcyxhcmd1bWVudHMpfX19cmV0dXJuIGQudHJhbnNmb3JtPWZ1bmN0aW9uKHQsZSxuKXt2YXIgcj10LnNlbGVjdGlvbj90LnNlbGVjdGlvbigpOnQ7ci5wcm9wZXJ0eSgiX196b29tIix3dyksdCE9PXI/dih0LGUsbik6ci5pbnRlcnJ1cHQoKS5lYWNoKChmdW5jdGlvbigpe20odGhpcyxhcmd1bWVudHMpLnN0YXJ0KCkuem9vbShudWxsLCJmdW5jdGlvbiI9PXR5cGVvZiBlP2UuYXBwbHkodGhpcyxhcmd1bWVudHMpOmUpLmVuZCgpfSkpfSxkLnNjYWxlQnk9ZnVuY3Rpb24odCxlLG4pe2Quc2NhbGVUbyh0LChmdW5jdGlvbigpe3ZhciB0PXRoaXMuX196b29tLmssbj0iZnVuY3Rpb24iPT10eXBlb2YgZT9lLmFwcGx5KHRoaXMsYXJndW1lbnRzKTplO3JldHVybiB0Km59KSxuKX0sZC5zY2FsZVRvPWZ1bmN0aW9uKHQsZSxuKXtkLnRyYW5zZm9ybSh0LChmdW5jdGlvbigpe3ZhciB0PXIuYXBwbHkodGhpcyxhcmd1bWVudHMpLGE9dGhpcy5fX3pvb20sbz1udWxsPT1uP3kodCk6ImZ1bmN0aW9uIj09dHlwZW9mIG4/bi5hcHBseSh0aGlzLGFyZ3VtZW50cyk6bixzPWEuaW52ZXJ0KG8pLHU9ImZ1bmN0aW9uIj09dHlwZW9mIGU/ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk6ZTtyZXR1cm4gaShnKHAoYSx1KSxvLHMpLHQsYyl9KSxuKX0sZC50cmFuc2xhdGVCeT1mdW5jdGlvbih0LGUsbil7ZC50cmFuc2Zvcm0odCwoZnVuY3Rpb24oKXtyZXR1cm4gaSh0aGlzLl9fem9vbS50cmFuc2xhdGUoImZ1bmN0aW9uIj09dHlwZW9mIGU/ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk6ZSwiZnVuY3Rpb24iPT10eXBlb2Ygbj9uLmFwcGx5KHRoaXMsYXJndW1lbnRzKTpuKSxyLmFwcGx5KHRoaXMsYXJndW1lbnRzKSxjKX0pKX0sZC50cmFuc2xhdGVUbz1mdW5jdGlvbih0LGUsbixhKXtkLnRyYW5zZm9ybSh0LChmdW5jdGlvbigpe3ZhciB0PXIuYXBwbHkodGhpcyxhcmd1bWVudHMpLG89dGhpcy5fX3pvb20scz1udWxsPT1hP3kodCk6ImZ1bmN0aW9uIj09dHlwZW9mIGE/YS5hcHBseSh0aGlzLGFyZ3VtZW50cyk6YTtyZXR1cm4gaSh2dy50cmFuc2xhdGUoc1swXSxzWzFdKS5zY2FsZShvLmspLnRyYW5zbGF0ZSgiZnVuY3Rpb24iPT10eXBlb2YgZT8tZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk6LWUsImZ1bmN0aW9uIj09dHlwZW9mIG4/LW4uYXBwbHkodGhpcyxhcmd1bWVudHMpOi1uKSx0LGMpfSksYSl9LGIucHJvdG90eXBlPXtzdGFydDpmdW5jdGlvbigpe3JldHVybiAxPT0rK3RoaXMuYWN0aXZlJiYodGhpcy50aGF0Ll9fem9vbWluZz10aGlzLHRoaXMuZW1pdCgic3RhcnQiKSksdGhpc30sem9vbTpmdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLm1vdXNlJiYibW91c2UiIT09dCYmKHRoaXMubW91c2VbMV09ZS5pbnZlcnQodGhpcy5tb3VzZVswXSkpLHRoaXMudG91Y2gwJiYidG91Y2giIT09dCYmKHRoaXMudG91Y2gwWzFdPWUuaW52ZXJ0KHRoaXMudG91Y2gwWzBdKSksdGhpcy50b3VjaDEmJiJ0b3VjaCIhPT10JiYodGhpcy50b3VjaDFbMV09ZS5pbnZlcnQodGhpcy50b3VjaDFbMF0pKSx0aGlzLnRoYXQuX196b29tPWUsdGhpcy5lbWl0KCJ6b29tIiksdGhpc30sZW5kOmZ1bmN0aW9uKCl7cmV0dXJuIDA9PS0tdGhpcy5hY3RpdmUmJihkZWxldGUgdGhpcy50aGF0Ll9fem9vbWluZyx0aGlzLmVtaXQoImVuZCIpKSx0aGlzfSxlbWl0OmZ1bmN0aW9uKHQpe3BlKG5ldyBndyhkLHQsdGhpcy50aGF0Ll9fem9vbSksaC5hcHBseSxoLFt0LHRoaXMudGhhdCx0aGlzLmFyZ3NdKX19LGQud2hlZWxEZWx0YT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT0iZnVuY3Rpb24iPT10eXBlb2YgdD90OnB3KCt0KSxkKTphfSxkLmZpbHRlcj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj0iZnVuY3Rpb24iPT10eXBlb2YgdD90OnB3KCEhdCksZCk6bn0sZC50b3VjaGFibGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpwdyghIXQpLGQpOm99LGQuZXh0ZW50PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6cHcoW1srdFswXVswXSwrdFswXVsxXV0sWyt0WzFdWzBdLCt0WzFdWzFdXV0pLGQpOnJ9LGQuc2NhbGVFeHRlbnQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHNbMF09K3RbMF0sc1sxXT0rdFsxXSxkKTpbc1swXSxzWzFdXX0sZC50cmFuc2xhdGVFeHRlbnQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGNbMF1bMF09K3RbMF1bMF0sY1sxXVswXT0rdFsxXVswXSxjWzBdWzFdPSt0WzBdWzFdLGNbMV1bMV09K3RbMV1bMV0sZCk6W1tjWzBdWzBdLGNbMF1bMV1dLFtjWzFdWzBdLGNbMV1bMV1dXX0sZC5jb25zdHJhaW49ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9dCxkKTppfSxkLmR1cmF0aW9uPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh1PSt0LGQpOnV9LGQuaW50ZXJwb2xhdGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGw9dCxkKTpsfSxkLm9uPWZ1bmN0aW9uKCl7dmFyIHQ9aC5vbi5hcHBseShoLGFyZ3VtZW50cyk7cmV0dXJuIHQ9PT1oP2Q6dH0sZC5jbGlja0Rpc3RhbmNlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhmPSh0PSt0KSp0LGQpOk1hdGguc3FydChmKX0sZH07bi5kKGUsInZlcnNpb24iLChmdW5jdGlvbigpe3JldHVybiI1LjE1LjAifSkpLG4uZChlLCJiaXNlY3QiLChmdW5jdGlvbigpe3JldHVybiBjfSkpLG4uZChlLCJiaXNlY3RSaWdodCIsKGZ1bmN0aW9uKCl7cmV0dXJuIG99KSksbi5kKGUsImJpc2VjdExlZnQiLChmdW5jdGlvbigpe3JldHVybiBzfSkpLG4uZChlLCJhc2NlbmRpbmciLChmdW5jdGlvbigpe3JldHVybiByfSkpLG4uZChlLCJiaXNlY3RvciIsKGZ1bmN0aW9uKCl7cmV0dXJuIGl9KSksbi5kKGUsImNyb3NzIiwoZnVuY3Rpb24oKXtyZXR1cm4gaH0pKSxuLmQoZSwiZGVzY2VuZGluZyIsKGZ1bmN0aW9uKCl7cmV0dXJuIGZ9KSksbi5kKGUsImRldmlhdGlvbiIsKGZ1bmN0aW9uKCl7cmV0dXJuIGd9KSksbi5kKGUsImV4dGVudCIsKGZ1bmN0aW9uKCl7cmV0dXJuIHl9KSksbi5kKGUsImhpc3RvZ3JhbSIsKGZ1bmN0aW9uKCl7cmV0dXJuIE99KSksbi5kKGUsInRocmVzaG9sZEZyZWVkbWFuRGlhY29uaXMiLChmdW5jdGlvbigpe3JldHVybiBOfSkpLG4uZChlLCJ0aHJlc2hvbGRTY290dCIsKGZ1bmN0aW9uKCl7cmV0dXJuIEJ9KSksbi5kKGUsInRocmVzaG9sZFN0dXJnZXMiLChmdW5jdGlvbigpe3JldHVybiBNfSkpLG4uZChlLCJtYXgiLChmdW5jdGlvbigpe3JldHVybiBMfSkpLG4uZChlLCJtZWFuIiwoZnVuY3Rpb24oKXtyZXR1cm4gRn0pKSxuLmQoZSwibWVkaWFuIiwoZnVuY3Rpb24oKXtyZXR1cm4gUH0pKSxuLmQoZSwibWVyZ2UiLChmdW5jdGlvbigpe3JldHVybiBJfSkpLG4uZChlLCJtaW4iLChmdW5jdGlvbigpe3JldHVybiBqfSkpLG4uZChlLCJwYWlycyIsKGZ1bmN0aW9uKCl7cmV0dXJuIHV9KSksbi5kKGUsInBlcm11dGUiLChmdW5jdGlvbigpe3JldHVybiBSfSkpLG4uZChlLCJxdWFudGlsZSIsKGZ1bmN0aW9uKCl7cmV0dXJuIER9KSksbi5kKGUsInJhbmdlIiwoZnVuY3Rpb24oKXtyZXR1cm4ga30pKSxuLmQoZSwic2NhbiIsKGZ1bmN0aW9uKCl7cmV0dXJuIFl9KSksbi5kKGUsInNodWZmbGUiLChmdW5jdGlvbigpe3JldHVybiB6fSkpLG4uZChlLCJzdW0iLChmdW5jdGlvbigpe3JldHVybiBVfSkpLG4uZChlLCJ0aWNrcyIsKGZ1bmN0aW9uKCl7cmV0dXJuIEN9KSksbi5kKGUsInRpY2tJbmNyZW1lbnQiLChmdW5jdGlvbigpe3JldHVybiBTfSkpLG4uZChlLCJ0aWNrU3RlcCIsKGZ1bmN0aW9uKCl7cmV0dXJuIEF9KSksbi5kKGUsInRyYW5zcG9zZSIsKGZ1bmN0aW9uKCl7cmV0dXJuICR9KSksbi5kKGUsInZhcmlhbmNlIiwoZnVuY3Rpb24oKXtyZXR1cm4gcH0pKSxuLmQoZSwiemlwIiwoZnVuY3Rpb24oKXtyZXR1cm4gVn0pKSxuLmQoZSwiYXhpc1RvcCIsKGZ1bmN0aW9uKCl7cmV0dXJuIHR0fSkpLG4uZChlLCJheGlzUmlnaHQiLChmdW5jdGlvbigpe3JldHVybiBldH0pKSxuLmQoZSwiYXhpc0JvdHRvbSIsKGZ1bmN0aW9uKCl7cmV0dXJuIG50fSkpLG4uZChlLCJheGlzTGVmdCIsKGZ1bmN0aW9uKCl7cmV0dXJuIHJ0fSkpLG4uZChlLCJicnVzaCIsKGZ1bmN0aW9uKCl7cmV0dXJuIFRpfSkpLG4uZChlLCJicnVzaFgiLChmdW5jdGlvbigpe3JldHVybiB3aX0pKSxuLmQoZSwiYnJ1c2hZIiwoZnVuY3Rpb24oKXtyZXR1cm4gRWl9KSksbi5kKGUsImJydXNoU2VsZWN0aW9uIiwoZnVuY3Rpb24oKXtyZXR1cm4ga2l9KSksbi5kKGUsImNob3JkIiwoZnVuY3Rpb24oKXtyZXR1cm4gTGl9KSksbi5kKGUsInJpYmJvbiIsKGZ1bmN0aW9uKCl7cmV0dXJuIHFpfSkpLG4uZChlLCJuZXN0IiwoZnVuY3Rpb24oKXtyZXR1cm4gUWl9KSksbi5kKGUsInNldCIsKGZ1bmN0aW9uKCl7cmV0dXJuIG9hfSkpLG4uZChlLCJtYXAiLChmdW5jdGlvbigpe3JldHVybiBKaX0pKSxuLmQoZSwia2V5cyIsKGZ1bmN0aW9uKCl7cmV0dXJuIHNhfSkpLG4uZChlLCJ2YWx1ZXMiLChmdW5jdGlvbigpe3JldHVybiBjYX0pKSxuLmQoZSwiZW50cmllcyIsKGZ1bmN0aW9uKCl7cmV0dXJuIHVhfSkpLG4uZChlLCJjb2xvciIsKGZ1bmN0aW9uKCl7cmV0dXJuICRlfSkpLG4uZChlLCJyZ2IiLChmdW5jdGlvbigpe3JldHVybiBHZX0pKSxuLmQoZSwiaHNsIiwoZnVuY3Rpb24oKXtyZXR1cm4gdG59KSksbi5kKGUsImxhYiIsKGZ1bmN0aW9uKCl7cmV0dXJuIHBhfSkpLG4uZChlLCJoY2wiLChmdW5jdGlvbigpe3JldHVybiBrYX0pKSxuLmQoZSwibGNoIiwoZnVuY3Rpb24oKXtyZXR1cm4gX2F9KSksbi5kKGUsImdyYXkiLChmdW5jdGlvbigpe3JldHVybiBkYX0pKSxuLmQoZSwiY3ViZWhlbGl4IiwoZnVuY3Rpb24oKXtyZXR1cm4gT2F9KSksbi5kKGUsImNvbnRvdXJzIiwoZnVuY3Rpb24oKXtyZXR1cm4gWWF9KSksbi5kKGUsImNvbnRvdXJEZW5zaXR5IiwoZnVuY3Rpb24oKXtyZXR1cm4gSGF9KSksbi5kKGUsImRpc3BhdGNoIiwoZnVuY3Rpb24oKXtyZXR1cm4gbHR9KSksbi5kKGUsImRyYWciLChmdW5jdGlvbigpe3JldHVybiBLYX0pKSxuLmQoZSwiZHJhZ0Rpc2FibGUiLChmdW5jdGlvbigpe3JldHVybiBUZX0pKSxuLmQoZSwiZHJhZ0VuYWJsZSIsKGZ1bmN0aW9uKCl7cmV0dXJuIENlfSkpLG4uZChlLCJkc3ZGb3JtYXQiLChmdW5jdGlvbigpe3JldHVybiBvb30pKSxuLmQoZSwiY3N2UGFyc2UiLChmdW5jdGlvbigpe3JldHVybiBjb30pKSxuLmQoZSwiY3N2UGFyc2VSb3dzIiwoZnVuY3Rpb24oKXtyZXR1cm4gdW99KSksbi5kKGUsImNzdkZvcm1hdCIsKGZ1bmN0aW9uKCl7cmV0dXJuIGxvfSkpLG4uZChlLCJjc3ZGb3JtYXRCb2R5IiwoZnVuY3Rpb24oKXtyZXR1cm4gaG99KSksbi5kKGUsImNzdkZvcm1hdFJvd3MiLChmdW5jdGlvbigpe3JldHVybiBmb30pKSxuLmQoZSwiY3N2Rm9ybWF0Um93IiwoZnVuY3Rpb24oKXtyZXR1cm4gcG99KSksbi5kKGUsImNzdkZvcm1hdFZhbHVlIiwoZnVuY3Rpb24oKXtyZXR1cm4gZ299KSksbi5kKGUsInRzdlBhcnNlIiwoZnVuY3Rpb24oKXtyZXR1cm4gdm99KSksbi5kKGUsInRzdlBhcnNlUm93cyIsKGZ1bmN0aW9uKCl7cmV0dXJuIG1vfSkpLG4uZChlLCJ0c3ZGb3JtYXQiLChmdW5jdGlvbigpe3JldHVybiBib30pKSxuLmQoZSwidHN2Rm9ybWF0Qm9keSIsKGZ1bmN0aW9uKCl7cmV0dXJuIHhvfSkpLG4uZChlLCJ0c3ZGb3JtYXRSb3dzIiwoZnVuY3Rpb24oKXtyZXR1cm4gX299KSksbi5kKGUsInRzdkZvcm1hdFJvdyIsKGZ1bmN0aW9uKCl7cmV0dXJuIGtvfSkpLG4uZChlLCJ0c3ZGb3JtYXRWYWx1ZSIsKGZ1bmN0aW9uKCl7cmV0dXJuIHdvfSkpLG4uZChlLCJhdXRvVHlwZSIsKGZ1bmN0aW9uKCl7cmV0dXJuIEVvfSkpLG4uZChlLCJlYXNlTGluZWFyIiwoZnVuY3Rpb24oKXtyZXR1cm4gQ299KSksbi5kKGUsImVhc2VRdWFkIiwoZnVuY3Rpb24oKXtyZXR1cm4gTW99KSksbi5kKGUsImVhc2VRdWFkSW4iLChmdW5jdGlvbigpe3JldHVybiBTb30pKSxuLmQoZSwiZWFzZVF1YWRPdXQiLChmdW5jdGlvbigpe3JldHVybiBBb30pKSxuLmQoZSwiZWFzZVF1YWRJbk91dCIsKGZ1bmN0aW9uKCl7cmV0dXJuIE1vfSkpLG4uZChlLCJlYXNlQ3ViaWMiLChmdW5jdGlvbigpe3JldHVybiBIcn0pKSxuLmQoZSwiZWFzZUN1YmljSW4iLChmdW5jdGlvbigpe3JldHVybiBXcn0pKSxuLmQoZSwiZWFzZUN1YmljT3V0IiwoZnVuY3Rpb24oKXtyZXR1cm4gVnJ9KSksbi5kKGUsImVhc2VDdWJpY0luT3V0IiwoZnVuY3Rpb24oKXtyZXR1cm4gSHJ9KSksbi5kKGUsImVhc2VQb2x5IiwoZnVuY3Rpb24oKXtyZXR1cm4gTm99KSksbi5kKGUsImVhc2VQb2x5SW4iLChmdW5jdGlvbigpe3JldHVybiBPb30pKSxuLmQoZSwiZWFzZVBvbHlPdXQiLChmdW5jdGlvbigpe3JldHVybiBEb30pKSxuLmQoZSwiZWFzZVBvbHlJbk91dCIsKGZ1bmN0aW9uKCl7cmV0dXJuIE5vfSkpLG4uZChlLCJlYXNlU2luIiwoZnVuY3Rpb24oKXtyZXR1cm4gSW99KSksbi5kKGUsImVhc2VTaW5JbiIsKGZ1bmN0aW9uKCl7cmV0dXJuIEZvfSkpLG4uZChlLCJlYXNlU2luT3V0IiwoZnVuY3Rpb24oKXtyZXR1cm4gUG99KSksbi5kKGUsImVhc2VTaW5Jbk91dCIsKGZ1bmN0aW9uKCl7cmV0dXJuIElvfSkpLG4uZChlLCJlYXNlRXhwIiwoZnVuY3Rpb24oKXtyZXR1cm4gWW99KSksbi5kKGUsImVhc2VFeHBJbiIsKGZ1bmN0aW9uKCl7cmV0dXJuIGpvfSkpLG4uZChlLCJlYXNlRXhwT3V0IiwoZnVuY3Rpb24oKXtyZXR1cm4gUm99KSksbi5kKGUsImVhc2VFeHBJbk91dCIsKGZ1bmN0aW9uKCl7cmV0dXJuIFlvfSkpLG4uZChlLCJlYXNlQ2lyY2xlIiwoZnVuY3Rpb24oKXtyZXR1cm4gJG99KSksbi5kKGUsImVhc2VDaXJjbGVJbiIsKGZ1bmN0aW9uKCl7cmV0dXJuIHpvfSkpLG4uZChlLCJlYXNlQ2lyY2xlT3V0IiwoZnVuY3Rpb24oKXtyZXR1cm4gVW99KSksbi5kKGUsImVhc2VDaXJjbGVJbk91dCIsKGZ1bmN0aW9uKCl7cmV0dXJuICRvfSkpLG4uZChlLCJlYXNlQm91bmNlIiwoZnVuY3Rpb24oKXtyZXR1cm4gVm99KSksbi5kKGUsImVhc2VCb3VuY2VJbiIsKGZ1bmN0aW9uKCl7cmV0dXJuIFdvfSkpLG4uZChlLCJlYXNlQm91bmNlT3V0IiwoZnVuY3Rpb24oKXtyZXR1cm4gVm99KSksbi5kKGUsImVhc2VCb3VuY2VJbk91dCIsKGZ1bmN0aW9uKCl7cmV0dXJuIEhvfSkpLG4uZChlLCJlYXNlQmFjayIsKGZ1bmN0aW9uKCl7cmV0dXJuIFhvfSkpLG4uZChlLCJlYXNlQmFja0luIiwoZnVuY3Rpb24oKXtyZXR1cm4gR299KSksbi5kKGUsImVhc2VCYWNrT3V0IiwoZnVuY3Rpb24oKXtyZXR1cm4gcW99KSksbi5kKGUsImVhc2VCYWNrSW5PdXQiLChmdW5jdGlvbigpe3JldHVybiBYb30pKSxuLmQoZSwiZWFzZUVsYXN0aWMiLChmdW5jdGlvbigpe3JldHVybiBRb30pKSxuLmQoZSwiZWFzZUVsYXN0aWNJbiIsKGZ1bmN0aW9uKCl7cmV0dXJuIEpvfSkpLG4uZChlLCJlYXNlRWxhc3RpY091dCIsKGZ1bmN0aW9uKCl7cmV0dXJuIFFvfSkpLG4uZChlLCJlYXNlRWxhc3RpY0luT3V0IiwoZnVuY3Rpb24oKXtyZXR1cm4gS299KSksbi5kKGUsImJsb2IiLChmdW5jdGlvbigpe3JldHVybiBlc30pKSxuLmQoZSwiYnVmZmVyIiwoZnVuY3Rpb24oKXtyZXR1cm4gcnN9KSksbi5kKGUsImRzdiIsKGZ1bmN0aW9uKCl7cmV0dXJuIHNzfSkpLG4uZChlLCJjc3YiLChmdW5jdGlvbigpe3JldHVybiBjc30pKSxuLmQoZSwidHN2IiwoZnVuY3Rpb24oKXtyZXR1cm4gdXN9KSksbi5kKGUsImltYWdlIiwoZnVuY3Rpb24oKXtyZXR1cm4gbHN9KSksbi5kKGUsImpzb24iLChmdW5jdGlvbigpe3JldHVybiBmc30pKSxuLmQoZSwidGV4dCIsKGZ1bmN0aW9uKCl7cmV0dXJuIGFzfSkpLG4uZChlLCJ4bWwiLChmdW5jdGlvbigpe3JldHVybiBwc30pKSxuLmQoZSwiaHRtbCIsKGZ1bmN0aW9uKCl7cmV0dXJuIGdzfSkpLG4uZChlLCJzdmciLChmdW5jdGlvbigpe3JldHVybiB5c30pKSxuLmQoZSwiZm9yY2VDZW50ZXIiLChmdW5jdGlvbigpe3JldHVybiB2c30pKSxuLmQoZSwiZm9yY2VDb2xsaWRlIiwoZnVuY3Rpb24oKXtyZXR1cm4gT3N9KSksbi5kKGUsImZvcmNlTGluayIsKGZ1bmN0aW9uKCl7cmV0dXJuIEJzfSkpLG4uZChlLCJmb3JjZU1hbnlCb2R5IiwoZnVuY3Rpb24oKXtyZXR1cm4ganN9KSksbi5kKGUsImZvcmNlUmFkaWFsIiwoZnVuY3Rpb24oKXtyZXR1cm4gUnN9KSksbi5kKGUsImZvcmNlU2ltdWxhdGlvbiIsKGZ1bmN0aW9uKCl7cmV0dXJuIElzfSkpLG4uZChlLCJmb3JjZVgiLChmdW5jdGlvbigpe3JldHVybiBZc30pKSxuLmQoZSwiZm9yY2VZIiwoZnVuY3Rpb24oKXtyZXR1cm4genN9KSksbi5kKGUsImZvcm1hdERlZmF1bHRMb2NhbGUiLChmdW5jdGlvbigpe3JldHVybiByY30pKSxuLmQoZSwiZm9ybWF0IiwoZnVuY3Rpb24oKXtyZXR1cm4gWHN9KSksbi5kKGUsImZvcm1hdFByZWZpeCIsKGZ1bmN0aW9uKCl7cmV0dXJuIFpzfSkpLG4uZChlLCJmb3JtYXRMb2NhbGUiLChmdW5jdGlvbigpe3JldHVybiBuY30pKSxuLmQoZSwiZm9ybWF0U3BlY2lmaWVyIiwoZnVuY3Rpb24oKXtyZXR1cm4gVnN9KSksbi5kKGUsIkZvcm1hdFNwZWNpZmllciIsKGZ1bmN0aW9uKCl7cmV0dXJuIEhzfSkpLG4uZChlLCJwcmVjaXNpb25GaXhlZCIsKGZ1bmN0aW9uKCl7cmV0dXJuIGljfSkpLG4uZChlLCJwcmVjaXNpb25QcmVmaXgiLChmdW5jdGlvbigpe3JldHVybiBhY30pKSxuLmQoZSwicHJlY2lzaW9uUm91bmQiLChmdW5jdGlvbigpe3JldHVybiBvY30pKSxuLmQoZSwiZ2VvQXJlYSIsKGZ1bmN0aW9uKCl7cmV0dXJuIEpjfSkpLG4uZChlLCJnZW9Cb3VuZHMiLChmdW5jdGlvbigpe3JldHVybiAkdX0pKSxuLmQoZSwiZ2VvQ2VudHJvaWQiLChmdW5jdGlvbigpe3JldHVybiBlbH0pKSxuLmQoZSwiZ2VvQ2lyY2xlIiwoZnVuY3Rpb24oKXtyZXR1cm4gZmx9KSksbi5kKGUsImdlb0NsaXBBbnRpbWVyaWRpYW4iLChmdW5jdGlvbigpe3JldHVybiBFbH0pKSxuLmQoZSwiZ2VvQ2xpcENpcmNsZSIsKGZ1bmN0aW9uKCl7cmV0dXJuIFRsfSkpLG4uZChlLCJnZW9DbGlwRXh0ZW50IiwoZnVuY3Rpb24oKXtyZXR1cm4gT2x9KSksbi5kKGUsImdlb0NsaXBSZWN0YW5nbGUiLChmdW5jdGlvbigpe3JldHVybiBDbH0pKSxuLmQoZSwiZ2VvQ29udGFpbnMiLChmdW5jdGlvbigpe3JldHVybiBxbH0pKSxuLmQoZSwiZ2VvRGlzdGFuY2UiLChmdW5jdGlvbigpe3JldHVybiBSbH0pKSxuLmQoZSwiZ2VvR3JhdGljdWxlIiwoZnVuY3Rpb24oKXtyZXR1cm4gSmx9KSksbi5kKGUsImdlb0dyYXRpY3VsZTEwIiwoZnVuY3Rpb24oKXtyZXR1cm4gUWx9KSksbi5kKGUsImdlb0ludGVycG9sYXRlIiwoZnVuY3Rpb24oKXtyZXR1cm4gcmh9KSksbi5kKGUsImdlb0xlbmd0aCIsKGZ1bmN0aW9uKCl7cmV0dXJuIFBsfSkpLG4uZChlLCJnZW9QYXRoIiwoZnVuY3Rpb24oKXtyZXR1cm4gZWZ9KSksbi5kKGUsImdlb0FsYmVycyIsKGZ1bmN0aW9uKCl7cmV0dXJuIF9mfSkpLG4uZChlLCJnZW9BbGJlcnNVc2EiLChmdW5jdGlvbigpe3JldHVybiBrZn0pKSxuLmQoZSwiZ2VvQXppbXV0aGFsRXF1YWxBcmVhIiwoZnVuY3Rpb24oKXtyZXR1cm4gQ2Z9KSksbi5kKGUsImdlb0F6aW11dGhhbEVxdWFsQXJlYVJhdyIsKGZ1bmN0aW9uKCl7cmV0dXJuIFRmfSkpLG4uZChlLCJnZW9BemltdXRoYWxFcXVpZGlzdGFudCIsKGZ1bmN0aW9uKCl7cmV0dXJuIEFmfSkpLG4uZChlLCJnZW9BemltdXRoYWxFcXVpZGlzdGFudFJhdyIsKGZ1bmN0aW9uKCl7cmV0dXJuIFNmfSkpLG4uZChlLCJnZW9Db25pY0NvbmZvcm1hbCIsKGZ1bmN0aW9uKCl7cmV0dXJuIExmfSkpLG4uZChlLCJnZW9Db25pY0NvbmZvcm1hbFJhdyIsKGZ1bmN0aW9uKCl7cmV0dXJuIEJmfSkpLG4uZChlLCJnZW9Db25pY0VxdWFsQXJlYSIsKGZ1bmN0aW9uKCl7cmV0dXJuIHhmfSkpLG4uZChlLCJnZW9Db25pY0VxdWFsQXJlYVJhdyIsKGZ1bmN0aW9uKCl7cmV0dXJuIGJmfSkpLG4uZChlLCJnZW9Db25pY0VxdWlkaXN0YW50IiwoZnVuY3Rpb24oKXtyZXR1cm4gamZ9KSksbi5kKGUsImdlb0NvbmljRXF1aWRpc3RhbnRSYXciLChmdW5jdGlvbigpe3JldHVybiBJZn0pKSxuLmQoZSwiZ2VvRXF1YWxFYXJ0aCIsKGZ1bmN0aW9uKCl7cmV0dXJuIFZmfSkpLG4uZChlLCJnZW9FcXVhbEVhcnRoUmF3IiwoZnVuY3Rpb24oKXtyZXR1cm4gV2Z9KSksbi5kKGUsImdlb0VxdWlyZWN0YW5ndWxhciIsKGZ1bmN0aW9uKCl7cmV0dXJuIFBmfSkpLG4uZChlLCJnZW9FcXVpcmVjdGFuZ3VsYXJSYXciLChmdW5jdGlvbigpe3JldHVybiBGZn0pKSxuLmQoZSwiZ2VvR25vbW9uaWMiLChmdW5jdGlvbigpe3JldHVybiBHZn0pKSxuLmQoZSwiZ2VvR25vbW9uaWNSYXciLChmdW5jdGlvbigpe3JldHVybiBIZn0pKSxuLmQoZSwiZ2VvSWRlbnRpdHkiLChmdW5jdGlvbigpe3JldHVybiBYZn0pKSxuLmQoZSwiZ2VvUHJvamVjdGlvbiIsKGZ1bmN0aW9uKCl7cmV0dXJuIHlmfSkpLG4uZChlLCJnZW9Qcm9qZWN0aW9uTXV0YXRvciIsKGZ1bmN0aW9uKCl7cmV0dXJuIHZmfSkpLG4uZChlLCJnZW9NZXJjYXRvciIsKGZ1bmN0aW9uKCl7cmV0dXJuIE9mfSkpLG4uZChlLCJnZW9NZXJjYXRvclJhdyIsKGZ1bmN0aW9uKCl7cmV0dXJuIE1mfSkpLG4uZChlLCJnZW9OYXR1cmFsRWFydGgxIiwoZnVuY3Rpb24oKXtyZXR1cm4gSmZ9KSksbi5kKGUsImdlb05hdHVyYWxFYXJ0aDFSYXciLChmdW5jdGlvbigpe3JldHVybiBaZn0pKSxuLmQoZSwiZ2VvT3J0aG9ncmFwaGljIiwoZnVuY3Rpb24oKXtyZXR1cm4gS2Z9KSksbi5kKGUsImdlb09ydGhvZ3JhcGhpY1JhdyIsKGZ1bmN0aW9uKCl7cmV0dXJuIFFmfSkpLG4uZChlLCJnZW9TdGVyZW9ncmFwaGljIiwoZnVuY3Rpb24oKXtyZXR1cm4gZWR9KSksbi5kKGUsImdlb1N0ZXJlb2dyYXBoaWNSYXciLChmdW5jdGlvbigpe3JldHVybiB0ZH0pKSxuLmQoZSwiZ2VvVHJhbnN2ZXJzZU1lcmNhdG9yIiwoZnVuY3Rpb24oKXtyZXR1cm4gcmR9KSksbi5kKGUsImdlb1RyYW5zdmVyc2VNZXJjYXRvclJhdyIsKGZ1bmN0aW9uKCl7cmV0dXJuIG5kfSkpLG4uZChlLCJnZW9Sb3RhdGlvbiIsKGZ1bmN0aW9uKCl7cmV0dXJuIHVsfSkpLG4uZChlLCJnZW9TdHJlYW0iLChmdW5jdGlvbigpe3JldHVybiAkY30pKSxuLmQoZSwiZ2VvVHJhbnNmb3JtIiwoZnVuY3Rpb24oKXtyZXR1cm4gbmZ9KSksbi5kKGUsImNsdXN0ZXIiLChmdW5jdGlvbigpe3JldHVybiBzZH0pKSxuLmQoZSwiaGllcmFyY2h5IiwoZnVuY3Rpb24oKXtyZXR1cm4gdWR9KSksbi5kKGUsInBhY2siLChmdW5jdGlvbigpe3JldHVybiBMZH0pKSxuLmQoZSwicGFja1NpYmxpbmdzIiwoZnVuY3Rpb24oKXtyZXR1cm4gQWR9KSksbi5kKGUsInBhY2tFbmNsb3NlIiwoZnVuY3Rpb24oKXtyZXR1cm4gZ2R9KSksbi5kKGUsInBhcnRpdGlvbiIsKGZ1bmN0aW9uKCl7cmV0dXJuIFlkfSkpLG4uZChlLCJzdHJhdGlmeSIsKGZ1bmN0aW9uKCl7cmV0dXJuIFZkfSkpLG4uZChlLCJ0cmVlIiwoZnVuY3Rpb24oKXtyZXR1cm4gUWR9KSksbi5kKGUsInRyZWVtYXAiLChmdW5jdGlvbigpe3JldHVybiBycH0pKSxuLmQoZSwidHJlZW1hcEJpbmFyeSIsKGZ1bmN0aW9uKCl7cmV0dXJuIGlwfSkpLG4uZChlLCJ0cmVlbWFwRGljZSIsKGZ1bmN0aW9uKCl7cmV0dXJuIFJkfSkpLG4uZChlLCJ0cmVlbWFwU2xpY2UiLChmdW5jdGlvbigpe3JldHVybiBLZH0pKSxuLmQoZSwidHJlZW1hcFNsaWNlRGljZSIsKGZ1bmN0aW9uKCl7cmV0dXJuIGFwfSkpLG4uZChlLCJ0cmVlbWFwU3F1YXJpZnkiLChmdW5jdGlvbigpe3JldHVybiBucH0pKSxuLmQoZSwidHJlZW1hcFJlc3F1YXJpZnkiLChmdW5jdGlvbigpe3JldHVybiBvcH0pKSxuLmQoZSwiaW50ZXJwb2xhdGUiLChmdW5jdGlvbigpe3JldHVybiBBbn0pKSxuLmQoZSwiaW50ZXJwb2xhdGVBcnJheSIsKGZ1bmN0aW9uKCl7cmV0dXJuIG1ufSkpLG4uZChlLCJpbnRlcnBvbGF0ZUJhc2lzIiwoZnVuY3Rpb24oKXtyZXR1cm4gYW59KSksbi5kKGUsImludGVycG9sYXRlQmFzaXNDbG9zZWQiLChmdW5jdGlvbigpe3JldHVybiBvbn0pKSxuLmQoZSwiaW50ZXJwb2xhdGVEYXRlIiwoZnVuY3Rpb24oKXtyZXR1cm4geG59KSksbi5kKGUsImludGVycG9sYXRlRGlzY3JldGUiLChmdW5jdGlvbigpe3JldHVybiBzcH0pKSxuLmQoZSwiaW50ZXJwb2xhdGVIdWUiLChmdW5jdGlvbigpe3JldHVybiBjcH0pKSxuLmQoZSwiaW50ZXJwb2xhdGVOdW1iZXIiLChmdW5jdGlvbigpe3JldHVybiBfbn0pKSxuLmQoZSwiaW50ZXJwb2xhdGVOdW1iZXJBcnJheSIsKGZ1bmN0aW9uKCl7cmV0dXJuIHlufSkpLG4uZChlLCJpbnRlcnBvbGF0ZU9iamVjdCIsKGZ1bmN0aW9uKCl7cmV0dXJuIGtufSkpLG4uZChlLCJpbnRlcnBvbGF0ZVJvdW5kIiwoZnVuY3Rpb24oKXtyZXR1cm4gdXB9KSksbi5kKGUsImludGVycG9sYXRlU3RyaW5nIiwoZnVuY3Rpb24oKXtyZXR1cm4gU259KSksbi5kKGUsImludGVycG9sYXRlVHJhbnNmb3JtQ3NzIiwoZnVuY3Rpb24oKXtyZXR1cm4gaHJ9KSksbi5kKGUsImludGVycG9sYXRlVHJhbnNmb3JtU3ZnIiwoZnVuY3Rpb24oKXtyZXR1cm4gZnJ9KSksbi5kKGUsImludGVycG9sYXRlWm9vbSIsKGZ1bmN0aW9uKCl7cmV0dXJuIGZwfSkpLG4uZChlLCJpbnRlcnBvbGF0ZVJnYiIsKGZ1bmN0aW9uKCl7cmV0dXJuIGZufSkpLG4uZChlLCJpbnRlcnBvbGF0ZVJnYkJhc2lzIiwoZnVuY3Rpb24oKXtyZXR1cm4gcG59KSksbi5kKGUsImludGVycG9sYXRlUmdiQmFzaXNDbG9zZWQiLChmdW5jdGlvbigpe3JldHVybiBnbn0pKSxuLmQoZSwiaW50ZXJwb2xhdGVIc2wiLChmdW5jdGlvbigpe3JldHVybiBwcH0pKSxuLmQoZSwiaW50ZXJwb2xhdGVIc2xMb25nIiwoZnVuY3Rpb24oKXtyZXR1cm4gZ3B9KSksbi5kKGUsImludGVycG9sYXRlTGFiIiwoZnVuY3Rpb24oKXtyZXR1cm4geXB9KSksbi5kKGUsImludGVycG9sYXRlSGNsIiwoZnVuY3Rpb24oKXtyZXR1cm4gbXB9KSksbi5kKGUsImludGVycG9sYXRlSGNsTG9uZyIsKGZ1bmN0aW9uKCl7cmV0dXJuIGJwfSkpLG4uZChlLCJpbnRlcnBvbGF0ZUN1YmVoZWxpeCIsKGZ1bmN0aW9uKCl7cmV0dXJuIF9wfSkpLG4uZChlLCJpbnRlcnBvbGF0ZUN1YmVoZWxpeExvbmciLChmdW5jdGlvbigpe3JldHVybiBrcH0pKSxuLmQoZSwicGllY2V3aXNlIiwoZnVuY3Rpb24oKXtyZXR1cm4gd3B9KSksbi5kKGUsInF1YW50aXplIiwoZnVuY3Rpb24oKXtyZXR1cm4gRXB9KSksbi5kKGUsInBhdGgiLChmdW5jdGlvbigpe3JldHVybiBVaX0pKSxuLmQoZSwicG9seWdvbkFyZWEiLChmdW5jdGlvbigpe3JldHVybiBUcH0pKSxuLmQoZSwicG9seWdvbkNlbnRyb2lkIiwoZnVuY3Rpb24oKXtyZXR1cm4gQ3B9KSksbi5kKGUsInBvbHlnb25IdWxsIiwoZnVuY3Rpb24oKXtyZXR1cm4gTXB9KSksbi5kKGUsInBvbHlnb25Db250YWlucyIsKGZ1bmN0aW9uKCl7cmV0dXJuIE9wfSkpLG4uZChlLCJwb2x5Z29uTGVuZ3RoIiwoZnVuY3Rpb24oKXtyZXR1cm4gRHB9KSksbi5kKGUsInF1YWR0cmVlIiwoZnVuY3Rpb24oKXtyZXR1cm4gRXN9KSksbi5kKGUsInJhbmRvbVVuaWZvcm0iLChmdW5jdGlvbigpe3JldHVybiBCcH0pKSxuLmQoZSwicmFuZG9tTm9ybWFsIiwoZnVuY3Rpb24oKXtyZXR1cm4gTHB9KSksbi5kKGUsInJhbmRvbUxvZ05vcm1hbCIsKGZ1bmN0aW9uKCl7cmV0dXJuIEZwfSkpLG4uZChlLCJyYW5kb21CYXRlcyIsKGZ1bmN0aW9uKCl7cmV0dXJuIElwfSkpLG4uZChlLCJyYW5kb21JcndpbkhhbGwiLChmdW5jdGlvbigpe3JldHVybiBQcH0pKSxuLmQoZSwicmFuZG9tRXhwb25lbnRpYWwiLChmdW5jdGlvbigpe3JldHVybiBqcH0pKSxuLmQoZSwic2NhbGVCYW5kIiwoZnVuY3Rpb24oKXtyZXR1cm4gSHB9KSksbi5kKGUsInNjYWxlUG9pbnQiLChmdW5jdGlvbigpe3JldHVybiBxcH0pKSxuLmQoZSwic2NhbGVJZGVudGl0eSIsKGZ1bmN0aW9uKCl7cmV0dXJuIGNnfSkpLG4uZChlLCJzY2FsZUxpbmVhciIsKGZ1bmN0aW9uKCl7cmV0dXJuIHNnfSkpLG4uZChlLCJzY2FsZUxvZyIsKGZ1bmN0aW9uKCl7cmV0dXJuIHZnfSkpLG4uZChlLCJzY2FsZVN5bWxvZyIsKGZ1bmN0aW9uKCl7cmV0dXJuIF9nfSkpLG4uZChlLCJzY2FsZU9yZGluYWwiLChmdW5jdGlvbigpe3JldHVybiBWcH0pKSxuLmQoZSwic2NhbGVJbXBsaWNpdCIsKGZ1bmN0aW9uKCl7cmV0dXJuIFdwfSkpLG4uZChlLCJzY2FsZVBvdyIsKGZ1bmN0aW9uKCl7cmV0dXJuIENnfSkpLG4uZChlLCJzY2FsZVNxcnQiLChmdW5jdGlvbigpe3JldHVybiBTZ30pKSxuLmQoZSwic2NhbGVRdWFudGlsZSIsKGZ1bmN0aW9uKCl7cmV0dXJuIEFnfSkpLG4uZChlLCJzY2FsZVF1YW50aXplIiwoZnVuY3Rpb24oKXtyZXR1cm4gTWd9KSksbi5kKGUsInNjYWxlVGhyZXNob2xkIiwoZnVuY3Rpb24oKXtyZXR1cm4gT2d9KSksbi5kKGUsInNjYWxlVGltZSIsKGZ1bmN0aW9uKCl7cmV0dXJuIHNtfSkpLG4uZChlLCJzY2FsZVV0YyIsKGZ1bmN0aW9uKCl7cmV0dXJuIHZtfSkpLG4uZChlLCJzY2FsZVNlcXVlbnRpYWwiLChmdW5jdGlvbigpe3JldHVybiB4bX0pKSxuLmQoZSwic2NhbGVTZXF1ZW50aWFsTG9nIiwoZnVuY3Rpb24oKXtyZXR1cm4gX219KSksbi5kKGUsInNjYWxlU2VxdWVudGlhbFBvdyIsKGZ1bmN0aW9uKCl7cmV0dXJuIHdtfSkpLG4uZChlLCJzY2FsZVNlcXVlbnRpYWxTcXJ0IiwoZnVuY3Rpb24oKXtyZXR1cm4gRW19KSksbi5kKGUsInNjYWxlU2VxdWVudGlhbFN5bWxvZyIsKGZ1bmN0aW9uKCl7cmV0dXJuIGttfSkpLG4uZChlLCJzY2FsZVNlcXVlbnRpYWxRdWFudGlsZSIsKGZ1bmN0aW9uKCl7cmV0dXJuIFRtfSkpLG4uZChlLCJzY2FsZURpdmVyZ2luZyIsKGZ1bmN0aW9uKCl7cmV0dXJuIFNtfSkpLG4uZChlLCJzY2FsZURpdmVyZ2luZ0xvZyIsKGZ1bmN0aW9uKCl7cmV0dXJuIEFtfSkpLG4uZChlLCJzY2FsZURpdmVyZ2luZ1BvdyIsKGZ1bmN0aW9uKCl7cmV0dXJuIE9tfSkpLG4uZChlLCJzY2FsZURpdmVyZ2luZ1NxcnQiLChmdW5jdGlvbigpe3JldHVybiBEbX0pKSxuLmQoZSwic2NhbGVEaXZlcmdpbmdTeW1sb2ciLChmdW5jdGlvbigpe3JldHVybiBNbX0pKSxuLmQoZSwidGlja0Zvcm1hdCIsKGZ1bmN0aW9uKCl7cmV0dXJuIGFnfSkpLG4uZChlLCJzY2hlbWVDYXRlZ29yeTEwIiwoZnVuY3Rpb24oKXtyZXR1cm4gQm19KSksbi5kKGUsInNjaGVtZUFjY2VudCIsKGZ1bmN0aW9uKCl7cmV0dXJuIExtfSkpLG4uZChlLCJzY2hlbWVEYXJrMiIsKGZ1bmN0aW9uKCl7cmV0dXJuIEZtfSkpLG4uZChlLCJzY2hlbWVQYWlyZWQiLChmdW5jdGlvbigpe3JldHVybiBQbX0pKSxuLmQoZSwic2NoZW1lUGFzdGVsMSIsKGZ1bmN0aW9uKCl7cmV0dXJuIEltfSkpLG4uZChlLCJzY2hlbWVQYXN0ZWwyIiwoZnVuY3Rpb24oKXtyZXR1cm4gam19KSksbi5kKGUsInNjaGVtZVNldDEiLChmdW5jdGlvbigpe3JldHVybiBSbX0pKSxuLmQoZSwic2NoZW1lU2V0MiIsKGZ1bmN0aW9uKCl7cmV0dXJuIFltfSkpLG4uZChlLCJzY2hlbWVTZXQzIiwoZnVuY3Rpb24oKXtyZXR1cm4gem19KSksbi5kKGUsInNjaGVtZVRhYmxlYXUxMCIsKGZ1bmN0aW9uKCl7cmV0dXJuIFVtfSkpLG4uZChlLCJpbnRlcnBvbGF0ZUJyQkciLChmdW5jdGlvbigpe3JldHVybiBWbX0pKSxuLmQoZSwic2NoZW1lQnJCRyIsKGZ1bmN0aW9uKCl7cmV0dXJuIFdtfSkpLG4uZChlLCJpbnRlcnBvbGF0ZVBSR24iLChmdW5jdGlvbigpe3JldHVybiBHbX0pKSxuLmQoZSwic2NoZW1lUFJHbiIsKGZ1bmN0aW9uKCl7cmV0dXJuIEhtfSkpLG4uZChlLCJpbnRlcnBvbGF0ZVBpWUciLChmdW5jdGlvbigpe3JldHVybiBYbX0pKSxuLmQoZSwic2NoZW1lUGlZRyIsKGZ1bmN0aW9uKCl7cmV0dXJuIHFtfSkpLG4uZChlLCJpbnRlcnBvbGF0ZVB1T3IiLChmdW5jdGlvbigpe3JldHVybiBKbX0pKSxuLmQoZSwic2NoZW1lUHVPciIsKGZ1bmN0aW9uKCl7cmV0dXJuIFptfSkpLG4uZChlLCJpbnRlcnBvbGF0ZVJkQnUiLChmdW5jdGlvbigpe3JldHVybiBLbX0pKSxuLmQoZSwic2NoZW1lUmRCdSIsKGZ1bmN0aW9uKCl7cmV0dXJuIFFtfSkpLG4uZChlLCJpbnRlcnBvbGF0ZVJkR3kiLChmdW5jdGlvbigpe3JldHVybiBlYn0pKSxuLmQoZSwic2NoZW1lUmRHeSIsKGZ1bmN0aW9uKCl7cmV0dXJuIHRifSkpLG4uZChlLCJpbnRlcnBvbGF0ZVJkWWxCdSIsKGZ1bmN0aW9uKCl7cmV0dXJuIHJifSkpLG4uZChlLCJzY2hlbWVSZFlsQnUiLChmdW5jdGlvbigpe3JldHVybiBuYn0pKSxuLmQoZSwiaW50ZXJwb2xhdGVSZFlsR24iLChmdW5jdGlvbigpe3JldHVybiBhYn0pKSxuLmQoZSwic2NoZW1lUmRZbEduIiwoZnVuY3Rpb24oKXtyZXR1cm4gaWJ9KSksbi5kKGUsImludGVycG9sYXRlU3BlY3RyYWwiLChmdW5jdGlvbigpe3JldHVybiBzYn0pKSxuLmQoZSwic2NoZW1lU3BlY3RyYWwiLChmdW5jdGlvbigpe3JldHVybiBvYn0pKSxuLmQoZSwiaW50ZXJwb2xhdGVCdUduIiwoZnVuY3Rpb24oKXtyZXR1cm4gdWJ9KSksbi5kKGUsInNjaGVtZUJ1R24iLChmdW5jdGlvbigpe3JldHVybiBjYn0pKSxuLmQoZSwiaW50ZXJwb2xhdGVCdVB1IiwoZnVuY3Rpb24oKXtyZXR1cm4gaGJ9KSksbi5kKGUsInNjaGVtZUJ1UHUiLChmdW5jdGlvbigpe3JldHVybiBsYn0pKSxuLmQoZSwiaW50ZXJwb2xhdGVHbkJ1IiwoZnVuY3Rpb24oKXtyZXR1cm4gZGJ9KSksbi5kKGUsInNjaGVtZUduQnUiLChmdW5jdGlvbigpe3JldHVybiBmYn0pKSxuLmQoZSwiaW50ZXJwb2xhdGVPclJkIiwoZnVuY3Rpb24oKXtyZXR1cm4gZ2J9KSksbi5kKGUsInNjaGVtZU9yUmQiLChmdW5jdGlvbigpe3JldHVybiBwYn0pKSxuLmQoZSwiaW50ZXJwb2xhdGVQdUJ1R24iLChmdW5jdGlvbigpe3JldHVybiB2Yn0pKSxuLmQoZSwic2NoZW1lUHVCdUduIiwoZnVuY3Rpb24oKXtyZXR1cm4geWJ9KSksbi5kKGUsImludGVycG9sYXRlUHVCdSIsKGZ1bmN0aW9uKCl7cmV0dXJuIGJifSkpLG4uZChlLCJzY2hlbWVQdUJ1IiwoZnVuY3Rpb24oKXtyZXR1cm4gbWJ9KSksbi5kKGUsImludGVycG9sYXRlUHVSZCIsKGZ1bmN0aW9uKCl7cmV0dXJuIF9ifSkpLG4uZChlLCJzY2hlbWVQdVJkIiwoZnVuY3Rpb24oKXtyZXR1cm4geGJ9KSksbi5kKGUsImludGVycG9sYXRlUmRQdSIsKGZ1bmN0aW9uKCl7cmV0dXJuIHdifSkpLG4uZChlLCJzY2hlbWVSZFB1IiwoZnVuY3Rpb24oKXtyZXR1cm4ga2J9KSksbi5kKGUsImludGVycG9sYXRlWWxHbkJ1IiwoZnVuY3Rpb24oKXtyZXR1cm4gVGJ9KSksbi5kKGUsInNjaGVtZVlsR25CdSIsKGZ1bmN0aW9uKCl7cmV0dXJuIEVifSkpLG4uZChlLCJpbnRlcnBvbGF0ZVlsR24iLChmdW5jdGlvbigpe3JldHVybiBTYn0pKSxuLmQoZSwic2NoZW1lWWxHbiIsKGZ1bmN0aW9uKCl7cmV0dXJuIENifSkpLG4uZChlLCJpbnRlcnBvbGF0ZVlsT3JCciIsKGZ1bmN0aW9uKCl7cmV0dXJuIE1ifSkpLG4uZChlLCJzY2hlbWVZbE9yQnIiLChmdW5jdGlvbigpe3JldHVybiBBYn0pKSxuLmQoZSwiaW50ZXJwb2xhdGVZbE9yUmQiLChmdW5jdGlvbigpe3JldHVybiBEYn0pKSxuLmQoZSwic2NoZW1lWWxPclJkIiwoZnVuY3Rpb24oKXtyZXR1cm4gT2J9KSksbi5kKGUsImludGVycG9sYXRlQmx1ZXMiLChmdW5jdGlvbigpe3JldHVybiBCYn0pKSxuLmQoZSwic2NoZW1lQmx1ZXMiLChmdW5jdGlvbigpe3JldHVybiBOYn0pKSxuLmQoZSwiaW50ZXJwb2xhdGVHcmVlbnMiLChmdW5jdGlvbigpe3JldHVybiBGYn0pKSxuLmQoZSwic2NoZW1lR3JlZW5zIiwoZnVuY3Rpb24oKXtyZXR1cm4gTGJ9KSksbi5kKGUsImludGVycG9sYXRlR3JleXMiLChmdW5jdGlvbigpe3JldHVybiBJYn0pKSxuLmQoZSwic2NoZW1lR3JleXMiLChmdW5jdGlvbigpe3JldHVybiBQYn0pKSxuLmQoZSwiaW50ZXJwb2xhdGVQdXJwbGVzIiwoZnVuY3Rpb24oKXtyZXR1cm4gUmJ9KSksbi5kKGUsInNjaGVtZVB1cnBsZXMiLChmdW5jdGlvbigpe3JldHVybiBqYn0pKSxuLmQoZSwiaW50ZXJwb2xhdGVSZWRzIiwoZnVuY3Rpb24oKXtyZXR1cm4gemJ9KSksbi5kKGUsInNjaGVtZVJlZHMiLChmdW5jdGlvbigpe3JldHVybiBZYn0pKSxuLmQoZSwiaW50ZXJwb2xhdGVPcmFuZ2VzIiwoZnVuY3Rpb24oKXtyZXR1cm4gJGJ9KSksbi5kKGUsInNjaGVtZU9yYW5nZXMiLChmdW5jdGlvbigpe3JldHVybiBVYn0pKSxuLmQoZSwiaW50ZXJwb2xhdGVDaXZpZGlzIiwoZnVuY3Rpb24oKXtyZXR1cm4gV2J9KSksbi5kKGUsImludGVycG9sYXRlQ3ViZWhlbGl4RGVmYXVsdCIsKGZ1bmN0aW9uKCl7cmV0dXJuIFZifSkpLG4uZChlLCJpbnRlcnBvbGF0ZVJhaW5ib3ciLChmdW5jdGlvbigpe3JldHVybiBYYn0pKSxuLmQoZSwiaW50ZXJwb2xhdGVXYXJtIiwoZnVuY3Rpb24oKXtyZXR1cm4gSGJ9KSksbi5kKGUsImludGVycG9sYXRlQ29vbCIsKGZ1bmN0aW9uKCl7cmV0dXJuIEdifSkpLG4uZChlLCJpbnRlcnBvbGF0ZVNpbmVib3ciLChmdW5jdGlvbigpe3JldHVybiBLYn0pKSxuLmQoZSwiaW50ZXJwb2xhdGVUdXJibyIsKGZ1bmN0aW9uKCl7cmV0dXJuIHR4fSkpLG4uZChlLCJpbnRlcnBvbGF0ZVZpcmlkaXMiLChmdW5jdGlvbigpe3JldHVybiBueH0pKSxuLmQoZSwiaW50ZXJwb2xhdGVNYWdtYSIsKGZ1bmN0aW9uKCl7cmV0dXJuIHJ4fSkpLG4uZChlLCJpbnRlcnBvbGF0ZUluZmVybm8iLChmdW5jdGlvbigpe3JldHVybiBpeH0pKSxuLmQoZSwiaW50ZXJwb2xhdGVQbGFzbWEiLChmdW5jdGlvbigpe3JldHVybiBheH0pKSxuLmQoZSwiY3JlYXRlIiwoZnVuY3Rpb24oKXtyZXR1cm4gb3h9KSksbi5kKGUsImNyZWF0b3IiLChmdW5jdGlvbigpe3JldHVybiBuZX0pKSxuLmQoZSwibG9jYWwiLChmdW5jdGlvbigpe3JldHVybiBjeH0pKSxuLmQoZSwibWF0Y2hlciIsKGZ1bmN0aW9uKCl7cmV0dXJuIGd0fSkpLG4uZChlLCJtb3VzZSIsKGZ1bmN0aW9uKCl7cmV0dXJuIE5ufSkpLG4uZChlLCJuYW1lc3BhY2UiLChmdW5jdGlvbigpe3JldHVybiB3dH0pKSxuLmQoZSwibmFtZXNwYWNlcyIsKGZ1bmN0aW9uKCl7cmV0dXJuIGt0fSkpLG4uZChlLCJjbGllbnRQb2ludCIsKGZ1bmN0aW9uKCl7cmV0dXJuIE9ufSkpLG4uZChlLCJzZWxlY3QiLChmdW5jdGlvbigpe3JldHVybiBrZX0pKSxuLmQoZSwic2VsZWN0QWxsIiwoZnVuY3Rpb24oKXtyZXR1cm4gbHh9KSksbi5kKGUsInNlbGVjdGlvbiIsKGZ1bmN0aW9uKCl7cmV0dXJuIF9lfSkpLG4uZChlLCJzZWxlY3RvciIsKGZ1bmN0aW9uKCl7cmV0dXJuIGZ0fSkpLG4uZChlLCJzZWxlY3RvckFsbCIsKGZ1bmN0aW9uKCl7cmV0dXJuIHB0fSkpLG4uZChlLCJzdHlsZSIsKGZ1bmN0aW9uKCl7cmV0dXJuIEx0fSkpLG4uZChlLCJ0b3VjaCIsKGZ1bmN0aW9uKCl7cmV0dXJuIERufSkpLG4uZChlLCJ0b3VjaGVzIiwoZnVuY3Rpb24oKXtyZXR1cm4gaHh9KSksbi5kKGUsIndpbmRvdyIsKGZ1bmN0aW9uKCl7cmV0dXJuIE90fSkpLG4uZChlLCJldmVudCIsKGZ1bmN0aW9uKCl7cmV0dXJuIGNlfSkpLG4uZChlLCJjdXN0b21FdmVudCIsKGZ1bmN0aW9uKCl7cmV0dXJuIHBlfSkpLG4uZChlLCJhcmMiLChmdW5jdGlvbigpe3JldHVybiBOeH0pKSxuLmQoZSwiYXJlYSIsKGZ1bmN0aW9uKCl7cmV0dXJuIGp4fSkpLG4uZChlLCJsaW5lIiwoZnVuY3Rpb24oKXtyZXR1cm4gSXh9KSksbi5kKGUsInBpZSIsKGZ1bmN0aW9uKCl7cmV0dXJuIHp4fSkpLG4uZChlLCJhcmVhUmFkaWFsIiwoZnVuY3Rpb24oKXtyZXR1cm4gR3h9KSksbi5kKGUsInJhZGlhbEFyZWEiLChmdW5jdGlvbigpe3JldHVybiBHeH0pKSxuLmQoZSwibGluZVJhZGlhbCIsKGZ1bmN0aW9uKCl7cmV0dXJuIEh4fSkpLG4uZChlLCJyYWRpYWxMaW5lIiwoZnVuY3Rpb24oKXtyZXR1cm4gSHh9KSksbi5kKGUsInBvaW50UmFkaWFsIiwoZnVuY3Rpb24oKXtyZXR1cm4gcXh9KSksbi5kKGUsImxpbmtIb3Jpem9udGFsIiwoZnVuY3Rpb24oKXtyZXR1cm4gbl99KSksbi5kKGUsImxpbmtWZXJ0aWNhbCIsKGZ1bmN0aW9uKCl7cmV0dXJuIHJffSkpLG4uZChlLCJsaW5rUmFkaWFsIiwoZnVuY3Rpb24oKXtyZXR1cm4gaV99KSksbi5kKGUsInN5bWJvbCIsKGZ1bmN0aW9uKCl7cmV0dXJuIGtffSkpLG4uZChlLCJzeW1ib2xzIiwoZnVuY3Rpb24oKXtyZXR1cm4gX199KSksbi5kKGUsInN5bWJvbENpcmNsZSIsKGZ1bmN0aW9uKCl7cmV0dXJuIGFffSkpLG4uZChlLCJzeW1ib2xDcm9zcyIsKGZ1bmN0aW9uKCl7cmV0dXJuIG9ffSkpLG4uZChlLCJzeW1ib2xEaWFtb25kIiwoZnVuY3Rpb24oKXtyZXR1cm4gdV99KSksbi5kKGUsInN5bWJvbFNxdWFyZSIsKGZ1bmN0aW9uKCl7cmV0dXJuIHBffSkpLG4uZChlLCJzeW1ib2xTdGFyIiwoZnVuY3Rpb24oKXtyZXR1cm4gZF99KSksbi5kKGUsInN5bWJvbFRyaWFuZ2xlIiwoZnVuY3Rpb24oKXtyZXR1cm4geV99KSksbi5kKGUsInN5bWJvbFd5ZSIsKGZ1bmN0aW9uKCl7cmV0dXJuIHhffSkpLG4uZChlLCJjdXJ2ZUJhc2lzQ2xvc2VkIiwoZnVuY3Rpb24oKXtyZXR1cm4gQV99KSksbi5kKGUsImN1cnZlQmFzaXNPcGVuIiwoZnVuY3Rpb24oKXtyZXR1cm4gT199KSksbi5kKGUsImN1cnZlQmFzaXMiLChmdW5jdGlvbigpe3JldHVybiBDX30pKSxuLmQoZSwiY3VydmVCdW5kbGUiLChmdW5jdGlvbigpe3JldHVybiBOX30pKSxuLmQoZSwiY3VydmVDYXJkaW5hbENsb3NlZCIsKGZ1bmN0aW9uKCl7cmV0dXJuIElffSkpLG4uZChlLCJjdXJ2ZUNhcmRpbmFsT3BlbiIsKGZ1bmN0aW9uKCl7cmV0dXJuIFJffSkpLG4uZChlLCJjdXJ2ZUNhcmRpbmFsIiwoZnVuY3Rpb24oKXtyZXR1cm4gRl99KSksbi5kKGUsImN1cnZlQ2F0bXVsbFJvbUNsb3NlZCIsKGZ1bmN0aW9uKCl7cmV0dXJuIFdffSkpLG4uZChlLCJjdXJ2ZUNhdG11bGxSb21PcGVuIiwoZnVuY3Rpb24oKXtyZXR1cm4gSF99KSksbi5kKGUsImN1cnZlQ2F0bXVsbFJvbSIsKGZ1bmN0aW9uKCl7cmV0dXJuIFVffSkpLG4uZChlLCJjdXJ2ZUxpbmVhckNsb3NlZCIsKGZ1bmN0aW9uKCl7cmV0dXJuIHFffSkpLG4uZChlLCJjdXJ2ZUxpbmVhciIsKGZ1bmN0aW9uKCl7cmV0dXJuIEx4fSkpLG4uZChlLCJjdXJ2ZU1vbm90b25lWCIsKGZ1bmN0aW9uKCl7cmV0dXJuIG5rfSkpLG4uZChlLCJjdXJ2ZU1vbm90b25lWSIsKGZ1bmN0aW9uKCl7cmV0dXJuIHJrfSkpLG4uZChlLCJjdXJ2ZU5hdHVyYWwiLChmdW5jdGlvbigpe3JldHVybiBva30pKSxuLmQoZSwiY3VydmVTdGVwIiwoZnVuY3Rpb24oKXtyZXR1cm4gY2t9KSksbi5kKGUsImN1cnZlU3RlcEFmdGVyIiwoZnVuY3Rpb24oKXtyZXR1cm4gbGt9KSksbi5kKGUsImN1cnZlU3RlcEJlZm9yZSIsKGZ1bmN0aW9uKCl7cmV0dXJuIHVrfSkpLG4uZChlLCJzdGFjayIsKGZ1bmN0aW9uKCl7cmV0dXJuIHBrfSkpLG4uZChlLCJzdGFja09mZnNldEV4cGFuZCIsKGZ1bmN0aW9uKCl7cmV0dXJuIGdrfSkpLG4uZChlLCJzdGFja09mZnNldERpdmVyZ2luZyIsKGZ1bmN0aW9uKCl7cmV0dXJuIHlrfSkpLG4uZChlLCJzdGFja09mZnNldE5vbmUiLChmdW5jdGlvbigpe3JldHVybiBoa30pKSxuLmQoZSwic3RhY2tPZmZzZXRTaWxob3VldHRlIiwoZnVuY3Rpb24oKXtyZXR1cm4gdmt9KSksbi5kKGUsInN0YWNrT2Zmc2V0V2lnZ2xlIiwoZnVuY3Rpb24oKXtyZXR1cm4gbWt9KSksbi5kKGUsInN0YWNrT3JkZXJBcHBlYXJhbmNlIiwoZnVuY3Rpb24oKXtyZXR1cm4gYmt9KSksbi5kKGUsInN0YWNrT3JkZXJBc2NlbmRpbmciLChmdW5jdGlvbigpe3JldHVybiBfa30pKSxuLmQoZSwic3RhY2tPcmRlckRlc2NlbmRpbmciLChmdW5jdGlvbigpe3JldHVybiB3a30pKSxuLmQoZSwic3RhY2tPcmRlckluc2lkZU91dCIsKGZ1bmN0aW9uKCl7cmV0dXJuIEVrfSkpLG4uZChlLCJzdGFja09yZGVyTm9uZSIsKGZ1bmN0aW9uKCl7cmV0dXJuIGZrfSkpLG4uZChlLCJzdGFja09yZGVyUmV2ZXJzZSIsKGZ1bmN0aW9uKCl7cmV0dXJuIFRrfSkpLG4uZChlLCJ0aW1lSW50ZXJ2YWwiLChmdW5jdGlvbigpe3JldHVybiBCZ30pKSxuLmQoZSwidGltZU1pbGxpc2Vjb25kIiwoZnVuY3Rpb24oKXtyZXR1cm4gcHl9KSksbi5kKGUsInRpbWVNaWxsaXNlY29uZHMiLChmdW5jdGlvbigpe3JldHVybiBneX0pKSxuLmQoZSwidXRjTWlsbGlzZWNvbmQiLChmdW5jdGlvbigpe3JldHVybiBweX0pKSxuLmQoZSwidXRjTWlsbGlzZWNvbmRzIiwoZnVuY3Rpb24oKXtyZXR1cm4gZ3l9KSksbi5kKGUsInRpbWVTZWNvbmQiLChmdW5jdGlvbigpe3JldHVybiBoeX0pKSxuLmQoZSwidGltZVNlY29uZHMiLChmdW5jdGlvbigpe3JldHVybiBmeX0pKSxuLmQoZSwidXRjU2Vjb25kIiwoZnVuY3Rpb24oKXtyZXR1cm4gaHl9KSksbi5kKGUsInV0Y1NlY29uZHMiLChmdW5jdGlvbigpe3JldHVybiBmeX0pKSxuLmQoZSwidGltZU1pbnV0ZSIsKGZ1bmN0aW9uKCl7cmV0dXJuIGN5fSkpLG4uZChlLCJ0aW1lTWludXRlcyIsKGZ1bmN0aW9uKCl7cmV0dXJuIHV5fSkpLG4uZChlLCJ0aW1lSG91ciIsKGZ1bmN0aW9uKCl7cmV0dXJuIGF5fSkpLG4uZChlLCJ0aW1lSG91cnMiLChmdW5jdGlvbigpe3JldHVybiBveX0pKSxuLmQoZSwidGltZURheSIsKGZ1bmN0aW9uKCl7cmV0dXJuIG55fSkpLG4uZChlLCJ0aW1lRGF5cyIsKGZ1bmN0aW9uKCl7cmV0dXJuIHJ5fSkpLG4uZChlLCJ0aW1lV2VlayIsKGZ1bmN0aW9uKCl7cmV0dXJuIHpnfSkpLG4uZChlLCJ0aW1lV2Vla3MiLChmdW5jdGlvbigpe3JldHVybiBxZ30pKSxuLmQoZSwidGltZVN1bmRheSIsKGZ1bmN0aW9uKCl7cmV0dXJuIHpnfSkpLG4uZChlLCJ0aW1lU3VuZGF5cyIsKGZ1bmN0aW9uKCl7cmV0dXJuIHFnfSkpLG4uZChlLCJ0aW1lTW9uZGF5IiwoZnVuY3Rpb24oKXtyZXR1cm4gVWd9KSksbi5kKGUsInRpbWVNb25kYXlzIiwoZnVuY3Rpb24oKXtyZXR1cm4gWGd9KSksbi5kKGUsInRpbWVUdWVzZGF5IiwoZnVuY3Rpb24oKXtyZXR1cm4gJGd9KSksbi5kKGUsInRpbWVUdWVzZGF5cyIsKGZ1bmN0aW9uKCl7cmV0dXJuIFpnfSkpLG4uZChlLCJ0aW1lV2VkbmVzZGF5IiwoZnVuY3Rpb24oKXtyZXR1cm4gV2d9KSksbi5kKGUsInRpbWVXZWRuZXNkYXlzIiwoZnVuY3Rpb24oKXtyZXR1cm4gSmd9KSksbi5kKGUsInRpbWVUaHVyc2RheSIsKGZ1bmN0aW9uKCl7cmV0dXJuIFZnfSkpLG4uZChlLCJ0aW1lVGh1cnNkYXlzIiwoZnVuY3Rpb24oKXtyZXR1cm4gUWd9KSksbi5kKGUsInRpbWVGcmlkYXkiLChmdW5jdGlvbigpe3JldHVybiBIZ30pKSxuLmQoZSwidGltZUZyaWRheXMiLChmdW5jdGlvbigpe3JldHVybiBLZ30pKSxuLmQoZSwidGltZVNhdHVyZGF5IiwoZnVuY3Rpb24oKXtyZXR1cm4gR2d9KSksbi5kKGUsInRpbWVTYXR1cmRheXMiLChmdW5jdGlvbigpe3JldHVybiB0eX0pKSxuLmQoZSwidGltZU1vbnRoIiwoZnVuY3Rpb24oKXtyZXR1cm4gamd9KSksbi5kKGUsInRpbWVNb250aHMiLChmdW5jdGlvbigpe3JldHVybiBSZ30pKSxuLmQoZSwidGltZVllYXIiLChmdW5jdGlvbigpe3JldHVybiBGZ30pKSxuLmQoZSwidGltZVllYXJzIiwoZnVuY3Rpb24oKXtyZXR1cm4gUGd9KSksbi5kKGUsInV0Y01pbnV0ZSIsKGZ1bmN0aW9uKCl7cmV0dXJuIGdtfSkpLG4uZChlLCJ1dGNNaW51dGVzIiwoZnVuY3Rpb24oKXtyZXR1cm4geW19KSksbi5kKGUsInV0Y0hvdXIiLChmdW5jdGlvbigpe3JldHVybiBmbX0pKSxuLmQoZSwidXRjSG91cnMiLChmdW5jdGlvbigpe3JldHVybiBkbX0pKSxuLmQoZSwidXRjRGF5IiwoZnVuY3Rpb24oKXtyZXR1cm4gTnl9KSksbi5kKGUsInV0Y0RheXMiLChmdW5jdGlvbigpe3JldHVybiBCeX0pKSxuLmQoZSwidXRjV2VlayIsKGZ1bmN0aW9uKCl7cmV0dXJuIHZ5fSkpLG4uZChlLCJ1dGNXZWVrcyIsKGZ1bmN0aW9uKCl7cmV0dXJuIEV5fSkpLG4uZChlLCJ1dGNTdW5kYXkiLChmdW5jdGlvbigpe3JldHVybiB2eX0pKSxuLmQoZSwidXRjU3VuZGF5cyIsKGZ1bmN0aW9uKCl7cmV0dXJuIEV5fSkpLG4uZChlLCJ1dGNNb25kYXkiLChmdW5jdGlvbigpe3JldHVybiBteX0pKSxuLmQoZSwidXRjTW9uZGF5cyIsKGZ1bmN0aW9uKCl7cmV0dXJuIFR5fSkpLG4uZChlLCJ1dGNUdWVzZGF5IiwoZnVuY3Rpb24oKXtyZXR1cm4gYnl9KSksbi5kKGUsInV0Y1R1ZXNkYXlzIiwoZnVuY3Rpb24oKXtyZXR1cm4gQ3l9KSksbi5kKGUsInV0Y1dlZG5lc2RheSIsKGZ1bmN0aW9uKCl7cmV0dXJuIHh5fSkpLG4uZChlLCJ1dGNXZWRuZXNkYXlzIiwoZnVuY3Rpb24oKXtyZXR1cm4gU3l9KSksbi5kKGUsInV0Y1RodXJzZGF5IiwoZnVuY3Rpb24oKXtyZXR1cm4gX3l9KSksbi5kKGUsInV0Y1RodXJzZGF5cyIsKGZ1bmN0aW9uKCl7cmV0dXJuIEF5fSkpLG4uZChlLCJ1dGNGcmlkYXkiLChmdW5jdGlvbigpe3JldHVybiBreX0pKSxuLmQoZSwidXRjRnJpZGF5cyIsKGZ1bmN0aW9uKCl7cmV0dXJuIE15fSkpLG4uZChlLCJ1dGNTYXR1cmRheSIsKGZ1bmN0aW9uKCl7cmV0dXJuIHd5fSkpLG4uZChlLCJ1dGNTYXR1cmRheXMiLChmdW5jdGlvbigpe3JldHVybiBPeX0pKSxuLmQoZSwidXRjTW9udGgiLChmdW5jdGlvbigpe3JldHVybiB1bX0pKSxuLmQoZSwidXRjTW9udGhzIiwoZnVuY3Rpb24oKXtyZXR1cm4gbG19KSksbi5kKGUsInV0Y1llYXIiLChmdW5jdGlvbigpe3JldHVybiBGeX0pKSxuLmQoZSwidXRjWWVhcnMiLChmdW5jdGlvbigpe3JldHVybiBQeX0pKSxuLmQoZSwidGltZUZvcm1hdERlZmF1bHRMb2NhbGUiLChmdW5jdGlvbigpe3JldHVybiBybX0pKSxuLmQoZSwidGltZUZvcm1hdCIsKGZ1bmN0aW9uKCl7cmV0dXJuIFV5fSkpLG4uZChlLCJ0aW1lUGFyc2UiLChmdW5jdGlvbigpe3JldHVybiAkeX0pKSxuLmQoZSwidXRjRm9ybWF0IiwoZnVuY3Rpb24oKXtyZXR1cm4gV3l9KSksbi5kKGUsInV0Y1BhcnNlIiwoZnVuY3Rpb24oKXtyZXR1cm4gVnl9KSksbi5kKGUsInRpbWVGb3JtYXRMb2NhbGUiLChmdW5jdGlvbigpe3JldHVybiBZeX0pKSxuLmQoZSwiaXNvRm9ybWF0IiwoZnVuY3Rpb24oKXtyZXR1cm4gQ2t9KSksbi5kKGUsImlzb1BhcnNlIiwoZnVuY3Rpb24oKXtyZXR1cm4gU2t9KSksbi5kKGUsIm5vdyIsKGZ1bmN0aW9uKCl7cmV0dXJuIHpufSkpLG4uZChlLCJ0aW1lciIsKGZ1bmN0aW9uKCl7cmV0dXJuIFdufSkpLG4uZChlLCJ0aW1lckZsdXNoIiwoZnVuY3Rpb24oKXtyZXR1cm4gVm59KSksbi5kKGUsInRpbWVvdXQiLChmdW5jdGlvbigpe3JldHVybiBYbn0pKSxuLmQoZSwiaW50ZXJ2YWwiLChmdW5jdGlvbigpe3JldHVybiBBa30pKSxuLmQoZSwidHJhbnNpdGlvbiIsKGZ1bmN0aW9uKCl7cmV0dXJuIHpyfSkpLG4uZChlLCJhY3RpdmUiLChmdW5jdGlvbigpe3JldHVybiBacn0pKSxuLmQoZSwiaW50ZXJydXB0IiwoZnVuY3Rpb24oKXtyZXR1cm4gb3J9KSksbi5kKGUsInZvcm9ub2kiLChmdW5jdGlvbigpe3JldHVybiBkd30pKSxuLmQoZSwiem9vbSIsKGZ1bmN0aW9uKCl7cmV0dXJuIFN3fSkpLG4uZChlLCJ6b29tVHJhbnNmb3JtIiwoZnVuY3Rpb24oKXtyZXR1cm4gbXd9KSksbi5kKGUsInpvb21JZGVudGl0eSIsKGZ1bmN0aW9uKCl7cmV0dXJuIHZ3fSkpfSxmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxmdW5jdGlvbih0KXtmb3IodmFyIG4gaW4gdCllLmhhc093blByb3BlcnR5KG4pfHwoZVtuXT10W25dKX0obigxNzIpKX0sZnVuY3Rpb24odCxlLG4peyhmdW5jdGlvbih0LHIpe3ZhciBpPWZ1bmN0aW9uKCl7dmFyIHQ9ZnVuY3Rpb24odCxlLG4scil7Zm9yKG49bnx8e30scj10Lmxlbmd0aDtyLS07blt0W3JdXT1lKTtyZXR1cm4gbn0sZT1bMSwyXSxuPVsxLDNdLHI9WzEsNV0saT1bMSw3XSxhPVsyLDVdLG89WzEsMTVdLHM9WzEsMTddLGM9WzEsMThdLHU9WzEsMjBdLGw9WzEsMjFdLGg9WzEsMjJdLGY9WzEsMjRdLGQ9WzEsMjVdLHA9WzEsMjZdLGc9WzEsMjddLHk9WzEsMjhdLHY9WzEsMjldLG09WzEsMzJdLGI9WzEsMzNdLHg9WzEsMzZdLF89WzEsNCw1LDE2LDIxLDIyLDIzLDI1LDI3LDI4LDI5LDMwLDMxLDMzLDM1LDM2LDM3LDQ4LDU2XSxrPVsxLDQ0XSx3PVs0LDUsMTYsMjEsMjIsMjMsMjUsMjcsMjgsMjksMzAsMzEsMzMsMzcsNDgsNTZdLEU9WzQsNSwxNiwyMSwyMiwyMywyNSwyNywyOCwyOSwzMCwzMSwzMywzNiwzNyw0OCw1Nl0sVD1bNCw1LDE2LDIxLDIyLDIzLDI1LDI3LDI4LDI5LDMwLDMxLDMzLDM1LDM3LDQ4LDU2XSxDPVs0Niw0Nyw0OF0sUz1bMSw0LDUsNywxNiwyMSwyMiwyMywyNSwyNywyOCwyOSwzMCwzMSwzMywzNSwzNiwzNyw0OCw1Nl0sQT17dHJhY2U6ZnVuY3Rpb24oKXt9LHl5Ont9LHN5bWJvbHNfOntlcnJvcjoyLHN0YXJ0OjMsU1BBQ0U6NCxORVdMSU5FOjUsZGlyZWN0aXZlOjYsU0Q6Nyxkb2N1bWVudDo4LGxpbmU6OSxzdGF0ZW1lbnQ6MTAsb3BlbkRpcmVjdGl2ZToxMSx0eXBlRGlyZWN0aXZlOjEyLGNsb3NlRGlyZWN0aXZlOjEzLCI6IjoxNCxhcmdEaXJlY3RpdmU6MTUscGFydGljaXBhbnQ6MTYsYWN0b3I6MTcsQVM6MTgscmVzdE9mTGluZToxOSxzaWduYWw6MjAsYXV0b251bWJlcjoyMSxhY3RpdmF0ZToyMixkZWFjdGl2YXRlOjIzLG5vdGVfc3RhdGVtZW50OjI0LHRpdGxlOjI1LHRleHQyOjI2LGxvb3A6MjcsZW5kOjI4LHJlY3Q6Mjksb3B0OjMwLGFsdDozMSxlbHNlX3NlY3Rpb25zOjMyLHBhcjozMyxwYXJfc2VjdGlvbnM6MzQsYW5kOjM1LGVsc2U6MzYsbm90ZTozNyxwbGFjZW1lbnQ6Mzgsb3ZlcjozOSxhY3Rvcl9wYWlyOjQwLHNwYWNlTGlzdDo0MSwiLCI6NDIsbGVmdF9vZjo0MyxyaWdodF9vZjo0NCxzaWduYWx0eXBlOjQ1LCIrIjo0NiwiLSI6NDcsQUNUT1I6NDgsU09MSURfT1BFTl9BUlJPVzo0OSxET1RURURfT1BFTl9BUlJPVzo1MCxTT0xJRF9BUlJPVzo1MSxET1RURURfQVJST1c6NTIsU09MSURfQ1JPU1M6NTMsRE9UVEVEX0NST1NTOjU0LFRYVDo1NSxvcGVuX2RpcmVjdGl2ZTo1Nix0eXBlX2RpcmVjdGl2ZTo1NyxhcmdfZGlyZWN0aXZlOjU4LGNsb3NlX2RpcmVjdGl2ZTo1OSwkYWNjZXB0OjAsJGVuZDoxfSx0ZXJtaW5hbHNfOnsyOiJlcnJvciIsNDoiU1BBQ0UiLDU6Ik5FV0xJTkUiLDc6IlNEIiwxNDoiOiIsMTY6InBhcnRpY2lwYW50IiwxODoiQVMiLDE5OiJyZXN0T2ZMaW5lIiwyMToiYXV0b251bWJlciIsMjI6ImFjdGl2YXRlIiwyMzoiZGVhY3RpdmF0ZSIsMjU6InRpdGxlIiwyNzoibG9vcCIsMjg6ImVuZCIsMjk6InJlY3QiLDMwOiJvcHQiLDMxOiJhbHQiLDMzOiJwYXIiLDM1OiJhbmQiLDM2OiJlbHNlIiwzNzoibm90ZSIsMzk6Im92ZXIiLDQyOiIsIiw0MzoibGVmdF9vZiIsNDQ6InJpZ2h0X29mIiw0NjoiKyIsNDc6Ii0iLDQ4OiJBQ1RPUiIsNDk6IlNPTElEX09QRU5fQVJST1ciLDUwOiJET1RURURfT1BFTl9BUlJPVyIsNTE6IlNPTElEX0FSUk9XIiw1MjoiRE9UVEVEX0FSUk9XIiw1MzoiU09MSURfQ1JPU1MiLDU0OiJET1RURURfQ1JPU1MiLDU1OiJUWFQiLDU2OiJvcGVuX2RpcmVjdGl2ZSIsNTc6InR5cGVfZGlyZWN0aXZlIiw1ODoiYXJnX2RpcmVjdGl2ZSIsNTk6ImNsb3NlX2RpcmVjdGl2ZSJ9LHByb2R1Y3Rpb25zXzpbMCxbMywyXSxbMywyXSxbMywyXSxbMywyXSxbOCwwXSxbOCwyXSxbOSwyXSxbOSwxXSxbOSwxXSxbNiw0XSxbNiw2XSxbMTAsNV0sWzEwLDNdLFsxMCwyXSxbMTAsMV0sWzEwLDNdLFsxMCwzXSxbMTAsMl0sWzEwLDNdLFsxMCw0XSxbMTAsNF0sWzEwLDRdLFsxMCw0XSxbMTAsNF0sWzEwLDFdLFszNCwxXSxbMzQsNF0sWzMyLDFdLFszMiw0XSxbMjQsNF0sWzI0LDRdLFs0MSwyXSxbNDEsMV0sWzQwLDNdLFs0MCwxXSxbMzgsMV0sWzM4LDFdLFsyMCw1XSxbMjAsNV0sWzIwLDRdLFsxNywxXSxbNDUsMV0sWzQ1LDFdLFs0NSwxXSxbNDUsMV0sWzQ1LDFdLFs0NSwxXSxbMjYsMV0sWzExLDFdLFsxMiwxXSxbMTUsMV0sWzEzLDFdXSxwZXJmb3JtQWN0aW9uOmZ1bmN0aW9uKHQsZSxuLHIsaSxhLG8pe3ZhciBzPWEubGVuZ3RoLTE7c3dpdGNoKGkpe2Nhc2UgNDpyZXR1cm4gci5hcHBseShhW3NdKSxhW3NdO2Nhc2UgNTp0aGlzLiQ9W107YnJlYWs7Y2FzZSA2OmFbcy0xXS5wdXNoKGFbc10pLHRoaXMuJD1hW3MtMV07YnJlYWs7Y2FzZSA3OmNhc2UgODp0aGlzLiQ9YVtzXTticmVhaztjYXNlIDk6dGhpcy4kPVtdO2JyZWFrO2Nhc2UgMTI6YVtzLTNdLmRlc2NyaXB0aW9uPXIucGFyc2VNZXNzYWdlKGFbcy0xXSksdGhpcy4kPWFbcy0zXTticmVhaztjYXNlIDEzOnRoaXMuJD1hW3MtMV07YnJlYWs7Y2FzZSAxNTpyLmVuYWJsZVNlcXVlbmNlTnVtYmVycygpO2JyZWFrO2Nhc2UgMTY6dGhpcy4kPXt0eXBlOiJhY3RpdmVTdGFydCIsc2lnbmFsVHlwZTpyLkxJTkVUWVBFLkFDVElWRV9TVEFSVCxhY3RvcjphW3MtMV19O2JyZWFrO2Nhc2UgMTc6dGhpcy4kPXt0eXBlOiJhY3RpdmVFbmQiLHNpZ25hbFR5cGU6ci5MSU5FVFlQRS5BQ1RJVkVfRU5ELGFjdG9yOmFbcy0xXX07YnJlYWs7Y2FzZSAxOTp0aGlzLiQ9W3t0eXBlOiJzZXRUaXRsZSIsdGV4dDphW3MtMV19XTticmVhaztjYXNlIDIwOmFbcy0xXS51bnNoaWZ0KHt0eXBlOiJsb29wU3RhcnQiLGxvb3BUZXh0OnIucGFyc2VNZXNzYWdlKGFbcy0yXSksc2lnbmFsVHlwZTpyLkxJTkVUWVBFLkxPT1BfU1RBUlR9KSxhW3MtMV0ucHVzaCh7dHlwZToibG9vcEVuZCIsbG9vcFRleHQ6YVtzLTJdLHNpZ25hbFR5cGU6ci5MSU5FVFlQRS5MT09QX0VORH0pLHRoaXMuJD1hW3MtMV07YnJlYWs7Y2FzZSAyMTphW3MtMV0udW5zaGlmdCh7dHlwZToicmVjdFN0YXJ0Iixjb2xvcjpyLnBhcnNlTWVzc2FnZShhW3MtMl0pLHNpZ25hbFR5cGU6ci5MSU5FVFlQRS5SRUNUX1NUQVJUfSksYVtzLTFdLnB1c2goe3R5cGU6InJlY3RFbmQiLGNvbG9yOnIucGFyc2VNZXNzYWdlKGFbcy0yXSksc2lnbmFsVHlwZTpyLkxJTkVUWVBFLlJFQ1RfRU5EfSksdGhpcy4kPWFbcy0xXTticmVhaztjYXNlIDIyOmFbcy0xXS51bnNoaWZ0KHt0eXBlOiJvcHRTdGFydCIsb3B0VGV4dDpyLnBhcnNlTWVzc2FnZShhW3MtMl0pLHNpZ25hbFR5cGU6ci5MSU5FVFlQRS5PUFRfU1RBUlR9KSxhW3MtMV0ucHVzaCh7dHlwZToib3B0RW5kIixvcHRUZXh0OnIucGFyc2VNZXNzYWdlKGFbcy0yXSksc2lnbmFsVHlwZTpyLkxJTkVUWVBFLk9QVF9FTkR9KSx0aGlzLiQ9YVtzLTFdO2JyZWFrO2Nhc2UgMjM6YVtzLTFdLnVuc2hpZnQoe3R5cGU6ImFsdFN0YXJ0IixhbHRUZXh0OnIucGFyc2VNZXNzYWdlKGFbcy0yXSksc2lnbmFsVHlwZTpyLkxJTkVUWVBFLkFMVF9TVEFSVH0pLGFbcy0xXS5wdXNoKHt0eXBlOiJhbHRFbmQiLHNpZ25hbFR5cGU6ci5MSU5FVFlQRS5BTFRfRU5EfSksdGhpcy4kPWFbcy0xXTticmVhaztjYXNlIDI0OmFbcy0xXS51bnNoaWZ0KHt0eXBlOiJwYXJTdGFydCIscGFyVGV4dDpyLnBhcnNlTWVzc2FnZShhW3MtMl0pLHNpZ25hbFR5cGU6ci5MSU5FVFlQRS5QQVJfU1RBUlR9KSxhW3MtMV0ucHVzaCh7dHlwZToicGFyRW5kIixzaWduYWxUeXBlOnIuTElORVRZUEUuUEFSX0VORH0pLHRoaXMuJD1hW3MtMV07YnJlYWs7Y2FzZSAyNzp0aGlzLiQ9YVtzLTNdLmNvbmNhdChbe3R5cGU6ImFuZCIscGFyVGV4dDpyLnBhcnNlTWVzc2FnZShhW3MtMV0pLHNpZ25hbFR5cGU6ci5MSU5FVFlQRS5QQVJfQU5EfSxhW3NdXSk7YnJlYWs7Y2FzZSAyOTp0aGlzLiQ9YVtzLTNdLmNvbmNhdChbe3R5cGU6ImVsc2UiLGFsdFRleHQ6ci5wYXJzZU1lc3NhZ2UoYVtzLTFdKSxzaWduYWxUeXBlOnIuTElORVRZUEUuQUxUX0VMU0V9LGFbc11dKTticmVhaztjYXNlIDMwOnRoaXMuJD1bYVtzLTFdLHt0eXBlOiJhZGROb3RlIixwbGFjZW1lbnQ6YVtzLTJdLGFjdG9yOmFbcy0xXS5hY3Rvcix0ZXh0OmFbc119XTticmVhaztjYXNlIDMxOmFbcy0yXT1bXS5jb25jYXQoYVtzLTFdLGFbcy0xXSkuc2xpY2UoMCwyKSxhW3MtMl1bMF09YVtzLTJdWzBdLmFjdG9yLGFbcy0yXVsxXT1hW3MtMl1bMV0uYWN0b3IsdGhpcy4kPVthW3MtMV0se3R5cGU6ImFkZE5vdGUiLHBsYWNlbWVudDpyLlBMQUNFTUVOVC5PVkVSLGFjdG9yOmFbcy0yXS5zbGljZSgwLDIpLHRleHQ6YVtzXX1dO2JyZWFrO2Nhc2UgMzQ6dGhpcy4kPVthW3MtMl0sYVtzXV07YnJlYWs7Y2FzZSAzNTp0aGlzLiQ9YVtzXTticmVhaztjYXNlIDM2OnRoaXMuJD1yLlBMQUNFTUVOVC5MRUZUT0Y7YnJlYWs7Y2FzZSAzNzp0aGlzLiQ9ci5QTEFDRU1FTlQuUklHSFRPRjticmVhaztjYXNlIDM4OnRoaXMuJD1bYVtzLTRdLGFbcy0xXSx7dHlwZToiYWRkTWVzc2FnZSIsZnJvbTphW3MtNF0uYWN0b3IsdG86YVtzLTFdLmFjdG9yLHNpZ25hbFR5cGU6YVtzLTNdLG1zZzphW3NdfSx7dHlwZToiYWN0aXZlU3RhcnQiLHNpZ25hbFR5cGU6ci5MSU5FVFlQRS5BQ1RJVkVfU1RBUlQsYWN0b3I6YVtzLTFdfV07YnJlYWs7Y2FzZSAzOTp0aGlzLiQ9W2Fbcy00XSxhW3MtMV0se3R5cGU6ImFkZE1lc3NhZ2UiLGZyb206YVtzLTRdLmFjdG9yLHRvOmFbcy0xXS5hY3RvcixzaWduYWxUeXBlOmFbcy0zXSxtc2c6YVtzXX0se3R5cGU6ImFjdGl2ZUVuZCIsc2lnbmFsVHlwZTpyLkxJTkVUWVBFLkFDVElWRV9FTkQsYWN0b3I6YVtzLTRdfV07YnJlYWs7Y2FzZSA0MDp0aGlzLiQ9W2Fbcy0zXSxhW3MtMV0se3R5cGU6ImFkZE1lc3NhZ2UiLGZyb206YVtzLTNdLmFjdG9yLHRvOmFbcy0xXS5hY3RvcixzaWduYWxUeXBlOmFbcy0yXSxtc2c6YVtzXX1dO2JyZWFrO2Nhc2UgNDE6dGhpcy4kPXt0eXBlOiJhZGRBY3RvciIsYWN0b3I6YVtzXX07YnJlYWs7Y2FzZSA0Mjp0aGlzLiQ9ci5MSU5FVFlQRS5TT0xJRF9PUEVOO2JyZWFrO2Nhc2UgNDM6dGhpcy4kPXIuTElORVRZUEUuRE9UVEVEX09QRU47YnJlYWs7Y2FzZSA0NDp0aGlzLiQ9ci5MSU5FVFlQRS5TT0xJRDticmVhaztjYXNlIDQ1OnRoaXMuJD1yLkxJTkVUWVBFLkRPVFRFRDticmVhaztjYXNlIDQ2OnRoaXMuJD1yLkxJTkVUWVBFLlNPTElEX0NST1NTO2JyZWFrO2Nhc2UgNDc6dGhpcy4kPXIuTElORVRZUEUuRE9UVEVEX0NST1NTO2JyZWFrO2Nhc2UgNDg6dGhpcy4kPXIucGFyc2VNZXNzYWdlKGFbc10udHJpbSgpLnN1YnN0cmluZygxKSk7YnJlYWs7Y2FzZSA0OTpyLnBhcnNlRGlyZWN0aXZlKCIlJXsiLCJvcGVuX2RpcmVjdGl2ZSIpO2JyZWFrO2Nhc2UgNTA6ci5wYXJzZURpcmVjdGl2ZShhW3NdLCJ0eXBlX2RpcmVjdGl2ZSIpO2JyZWFrO2Nhc2UgNTE6YVtzXT1hW3NdLnRyaW0oKS5yZXBsYWNlKC8nL2csJyInKSxyLnBhcnNlRGlyZWN0aXZlKGFbc10sImFyZ19kaXJlY3RpdmUiKTticmVhaztjYXNlIDUyOnIucGFyc2VEaXJlY3RpdmUoIn0lJSIsImNsb3NlX2RpcmVjdGl2ZSIsInNlcXVlbmNlIil9fSx0YWJsZTpbezM6MSw0OmUsNTpuLDY6NCw3OnIsMTE6Niw1NjppfSx7MTpbM119LHszOjgsNDplLDU6biw2OjQsNzpyLDExOjYsNTY6aX0sezM6OSw0OmUsNTpuLDY6NCw3OnIsMTE6Niw1NjppfSx7MzoxMCw0OmUsNTpuLDY6NCw3OnIsMTE6Niw1NjppfSx0KFsxLDQsNSwxNiwyMSwyMiwyMywyNSwyNywyOSwzMCwzMSwzMywzNyw0OCw1Nl0sYSx7ODoxMX0pLHsxMjoxMiw1NzpbMSwxM119LHs1NzpbMiw0OV19LHsxOlsyLDFdfSx7MTpbMiwyXX0sezE6WzIsM119LHsxOlsyLDRdLDQ6byw1OnMsNjozMCw5OjE0LDEwOjE2LDExOjYsMTY6YywxNzozMSwyMDoxOSwyMTp1LDIyOmwsMjM6aCwyNDoyMywyNTpmLDI3OmQsMjk6cCwzMDpnLDMxOnksMzM6diwzNzptLDQ4OmIsNTY6aX0sezEzOjM0LDE0OlsxLDM1XSw1OTp4fSx0KFsxNCw1OV0sWzIsNTBdKSx0KF8sWzIsNl0pLHs2OjMwLDEwOjM3LDExOjYsMTY6YywxNzozMSwyMDoxOSwyMTp1LDIyOmwsMjM6aCwyNDoyMywyNTpmLDI3OmQsMjk6cCwzMDpnLDMxOnksMzM6diwzNzptLDQ4OmIsNTY6aX0sdChfLFsyLDhdKSx0KF8sWzIsOV0pLHsxNzozOCw0ODpifSx7NTpbMSwzOV19LHQoXyxbMiwxNV0pLHsxNzo0MCw0ODpifSx7MTc6NDEsNDg6Yn0sezU6WzEsNDJdfSx7MjY6NDMsNTU6a30sezE5OlsxLDQ1XX0sezE5OlsxLDQ2XX0sezE5OlsxLDQ3XX0sezE5OlsxLDQ4XX0sezE5OlsxLDQ5XX0sdChfLFsyLDI1XSksezQ1OjUwLDQ5OlsxLDUxXSw1MDpbMSw1Ml0sNTE6WzEsNTNdLDUyOlsxLDU0XSw1MzpbMSw1NV0sNTQ6WzEsNTZdfSx7Mzg6NTcsMzk6WzEsNThdLDQzOlsxLDU5XSw0NDpbMSw2MF19LHQoWzUsMTgsNDIsNDksNTAsNTEsNTIsNTMsNTQsNTVdLFsyLDQxXSksezU6WzEsNjFdfSx7MTU6NjIsNTg6WzEsNjNdfSx7NTpbMiw1Ml19LHQoXyxbMiw3XSksezU6WzEsNjVdLDE4OlsxLDY0XX0sdChfLFsyLDE0XSksezU6WzEsNjZdfSx7NTpbMSw2N119LHQoXyxbMiwxOF0pLHs1OlsxLDY4XX0sezU6WzIsNDhdfSx0KHcsYSx7ODo2OX0pLHQodyxhLHs4OjcwfSksdCh3LGEsezg6NzF9KSx0KEUsYSx7MzI6NzIsODo3M30pLHQoVCxhLHszNDo3NCw4Ojc1fSksezE3Ojc4LDQ2OlsxLDc2XSw0NzpbMSw3N10sNDg6Yn0sdChDLFsyLDQyXSksdChDLFsyLDQzXSksdChDLFsyLDQ0XSksdChDLFsyLDQ1XSksdChDLFsyLDQ2XSksdChDLFsyLDQ3XSksezE3Ojc5LDQ4OmJ9LHsxNzo4MSw0MDo4MCw0ODpifSx7NDg6WzIsMzZdfSx7NDg6WzIsMzddfSx0KFMsWzIsMTBdKSx7MTM6ODIsNTk6eH0sezU5OlsyLDUxXX0sezE5OlsxLDgzXX0sdChfLFsyLDEzXSksdChfLFsyLDE2XSksdChfLFsyLDE3XSksdChfLFsyLDE5XSksezQ6byw1OnMsNjozMCw5OjE0LDEwOjE2LDExOjYsMTY6YywxNzozMSwyMDoxOSwyMTp1LDIyOmwsMjM6aCwyNDoyMywyNTpmLDI3OmQsMjg6WzEsODRdLDI5OnAsMzA6ZywzMTp5LDMzOnYsMzc6bSw0ODpiLDU2Oml9LHs0Om8sNTpzLDY6MzAsOToxNCwxMDoxNiwxMTo2LDE2OmMsMTc6MzEsMjA6MTksMjE6dSwyMjpsLDIzOmgsMjQ6MjMsMjU6ZiwyNzpkLDI4OlsxLDg1XSwyOTpwLDMwOmcsMzE6eSwzMzp2LDM3Om0sNDg6Yiw1NjppfSx7NDpvLDU6cyw2OjMwLDk6MTQsMTA6MTYsMTE6NiwxNjpjLDE3OjMxLDIwOjE5LDIxOnUsMjI6bCwyMzpoLDI0OjIzLDI1OmYsMjc6ZCwyODpbMSw4Nl0sMjk6cCwzMDpnLDMxOnksMzM6diwzNzptLDQ4OmIsNTY6aX0sezI4OlsxLDg3XX0sezQ6byw1OnMsNjozMCw5OjE0LDEwOjE2LDExOjYsMTY6YywxNzozMSwyMDoxOSwyMTp1LDIyOmwsMjM6aCwyNDoyMywyNTpmLDI3OmQsMjg6WzIsMjhdLDI5OnAsMzA6ZywzMTp5LDMzOnYsMzY6WzEsODhdLDM3Om0sNDg6Yiw1NjppfSx7Mjg6WzEsODldfSx7NDpvLDU6cyw2OjMwLDk6MTQsMTA6MTYsMTE6NiwxNjpjLDE3OjMxLDIwOjE5LDIxOnUsMjI6bCwyMzpoLDI0OjIzLDI1OmYsMjc6ZCwyODpbMiwyNl0sMjk6cCwzMDpnLDMxOnksMzM6diwzNTpbMSw5MF0sMzc6bSw0ODpiLDU2Oml9LHsxNzo5MSw0ODpifSx7MTc6OTIsNDg6Yn0sezI2OjkzLDU1Omt9LHsyNjo5NCw1NTprfSx7MjY6OTUsNTU6a30sezQyOlsxLDk2XSw1NTpbMiwzNV19LHs1OlsxLDk3XX0sezU6WzEsOThdfSx0KF8sWzIsMjBdKSx0KF8sWzIsMjFdKSx0KF8sWzIsMjJdKSx0KF8sWzIsMjNdKSx7MTk6WzEsOTldfSx0KF8sWzIsMjRdKSx7MTk6WzEsMTAwXX0sezI2OjEwMSw1NTprfSx7MjY6MTAyLDU1Omt9LHs1OlsyLDQwXX0sezU6WzIsMzBdfSx7NTpbMiwzMV19LHsxNzoxMDMsNDg6Yn0sdChTLFsyLDExXSksdChfLFsyLDEyXSksdChFLGEsezg6NzMsMzI6MTA0fSksdChULGEsezg6NzUsMzQ6MTA1fSksezU6WzIsMzhdfSx7NTpbMiwzOV19LHs1NTpbMiwzNF19LHsyODpbMiwyOV19LHsyODpbMiwyN119XSxkZWZhdWx0QWN0aW9uczp7NzpbMiw0OV0sODpbMiwxXSw5OlsyLDJdLDEwOlsyLDNdLDM2OlsyLDUyXSw0NDpbMiw0OF0sNTk6WzIsMzZdLDYwOlsyLDM3XSw2MzpbMiw1MV0sOTM6WzIsNDBdLDk0OlsyLDMwXSw5NTpbMiwzMV0sMTAxOlsyLDM4XSwxMDI6WzIsMzldLDEwMzpbMiwzNF0sMTA0OlsyLDI5XSwxMDU6WzIsMjddfSxwYXJzZUVycm9yOmZ1bmN0aW9uKHQsZSl7aWYoIWUucmVjb3ZlcmFibGUpe3ZhciBuPW5ldyBFcnJvcih0KTt0aHJvdyBuLmhhc2g9ZSxufXRoaXMudHJhY2UodCl9LHBhcnNlOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMsbj1bMF0scj1bXSxpPVtudWxsXSxhPVtdLG89dGhpcy50YWJsZSxzPSIiLGM9MCx1PTAsbD0wLGg9MixmPTEsZD1hLnNsaWNlLmNhbGwoYXJndW1lbnRzLDEpLHA9T2JqZWN0LmNyZWF0ZSh0aGlzLmxleGVyKSxnPXt5eTp7fX07Zm9yKHZhciB5IGluIHRoaXMueXkpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMueXkseSkmJihnLnl5W3ldPXRoaXMueXlbeV0pO3Auc2V0SW5wdXQodCxnLnl5KSxnLnl5LmxleGVyPXAsZy55eS5wYXJzZXI9dGhpcyx2b2lkIDA9PT1wLnl5bGxvYyYmKHAueXlsbG9jPXt9KTt2YXIgdj1wLnl5bGxvYzthLnB1c2godik7dmFyIG09cC5vcHRpb25zJiZwLm9wdGlvbnMucmFuZ2VzO2Z1bmN0aW9uIGIoKXt2YXIgdDtyZXR1cm4ibnVtYmVyIiE9dHlwZW9mKHQ9ci5wb3AoKXx8cC5sZXgoKXx8ZikmJih0IGluc3RhbmNlb2YgQXJyYXkmJih0PShyPXQpLnBvcCgpKSx0PWUuc3ltYm9sc19bdF18fHQpLHR9ImZ1bmN0aW9uIj09dHlwZW9mIGcueXkucGFyc2VFcnJvcj90aGlzLnBhcnNlRXJyb3I9Zy55eS5wYXJzZUVycm9yOnRoaXMucGFyc2VFcnJvcj1PYmplY3QuZ2V0UHJvdG90eXBlT2YodGhpcykucGFyc2VFcnJvcjtmb3IodmFyIHgsXyxrLHcsRSxULEMsUyxBLE09e307Oyl7aWYoaz1uW24ubGVuZ3RoLTFdLHRoaXMuZGVmYXVsdEFjdGlvbnNba10/dz10aGlzLmRlZmF1bHRBY3Rpb25zW2tdOihudWxsPT14JiYoeD1iKCkpLHc9b1trXSYmb1trXVt4XSksdm9pZCAwPT09d3x8IXcubGVuZ3RofHwhd1swXSl7dmFyIE89IiI7Zm9yKFQgaW4gQT1bXSxvW2tdKXRoaXMudGVybWluYWxzX1tUXSYmVD5oJiZBLnB1c2goIiciK3RoaXMudGVybWluYWxzX1tUXSsiJyIpO089cC5zaG93UG9zaXRpb24/IlBhcnNlIGVycm9yIG9uIGxpbmUgIisoYysxKSsiOlxuIitwLnNob3dQb3NpdGlvbigpKyJcbkV4cGVjdGluZyAiK0Euam9pbigiLCAiKSsiLCBnb3QgJyIrKHRoaXMudGVybWluYWxzX1t4XXx8eCkrIiciOiJQYXJzZSBlcnJvciBvbiBsaW5lICIrKGMrMSkrIjogVW5leHBlY3RlZCAiKyh4PT1mPyJlbmQgb2YgaW5wdXQiOiInIisodGhpcy50ZXJtaW5hbHNfW3hdfHx4KSsiJyIpLHRoaXMucGFyc2VFcnJvcihPLHt0ZXh0OnAubWF0Y2gsdG9rZW46dGhpcy50ZXJtaW5hbHNfW3hdfHx4LGxpbmU6cC55eWxpbmVubyxsb2M6dixleHBlY3RlZDpBfSl9aWYod1swXWluc3RhbmNlb2YgQXJyYXkmJncubGVuZ3RoPjEpdGhyb3cgbmV3IEVycm9yKCJQYXJzZSBFcnJvcjogbXVsdGlwbGUgYWN0aW9ucyBwb3NzaWJsZSBhdCBzdGF0ZTogIitrKyIsIHRva2VuOiAiK3gpO3N3aXRjaCh3WzBdKXtjYXNlIDE6bi5wdXNoKHgpLGkucHVzaChwLnl5dGV4dCksYS5wdXNoKHAueXlsbG9jKSxuLnB1c2god1sxXSkseD1udWxsLF8/KHg9XyxfPW51bGwpOih1PXAueXlsZW5nLHM9cC55eXRleHQsYz1wLnl5bGluZW5vLHY9cC55eWxsb2MsbD4wJiZsLS0pO2JyZWFrO2Nhc2UgMjppZihDPXRoaXMucHJvZHVjdGlvbnNfW3dbMV1dWzFdLE0uJD1pW2kubGVuZ3RoLUNdLE0uXyQ9e2ZpcnN0X2xpbmU6YVthLmxlbmd0aC0oQ3x8MSldLmZpcnN0X2xpbmUsbGFzdF9saW5lOmFbYS5sZW5ndGgtMV0ubGFzdF9saW5lLGZpcnN0X2NvbHVtbjphW2EubGVuZ3RoLShDfHwxKV0uZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOmFbYS5sZW5ndGgtMV0ubGFzdF9jb2x1bW59LG0mJihNLl8kLnJhbmdlPVthW2EubGVuZ3RoLShDfHwxKV0ucmFuZ2VbMF0sYVthLmxlbmd0aC0xXS5yYW5nZVsxXV0pLHZvaWQgMCE9PShFPXRoaXMucGVyZm9ybUFjdGlvbi5hcHBseShNLFtzLHUsYyxnLnl5LHdbMV0saSxhXS5jb25jYXQoZCkpKSlyZXR1cm4gRTtDJiYobj1uLnNsaWNlKDAsLTEqQyoyKSxpPWkuc2xpY2UoMCwtMSpDKSxhPWEuc2xpY2UoMCwtMSpDKSksbi5wdXNoKHRoaXMucHJvZHVjdGlvbnNfW3dbMV1dWzBdKSxpLnB1c2goTS4kKSxhLnB1c2goTS5fJCksUz1vW25bbi5sZW5ndGgtMl1dW25bbi5sZW5ndGgtMV1dLG4ucHVzaChTKTticmVhaztjYXNlIDM6cmV0dXJuITB9fXJldHVybiEwfX0sTT17RU9GOjEscGFyc2VFcnJvcjpmdW5jdGlvbih0LGUpe2lmKCF0aGlzLnl5LnBhcnNlcil0aHJvdyBuZXcgRXJyb3IodCk7dGhpcy55eS5wYXJzZXIucGFyc2VFcnJvcih0LGUpfSxzZXRJbnB1dDpmdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLnl5PWV8fHRoaXMueXl8fHt9LHRoaXMuX2lucHV0PXQsdGhpcy5fbW9yZT10aGlzLl9iYWNrdHJhY2s9dGhpcy5kb25lPSExLHRoaXMueXlsaW5lbm89dGhpcy55eWxlbmc9MCx0aGlzLnl5dGV4dD10aGlzLm1hdGNoZWQ9dGhpcy5tYXRjaD0iIix0aGlzLmNvbmRpdGlvblN0YWNrPVsiSU5JVElBTCJdLHRoaXMueXlsbG9jPXtmaXJzdF9saW5lOjEsZmlyc3RfY29sdW1uOjAsbGFzdF9saW5lOjEsbGFzdF9jb2x1bW46MH0sdGhpcy5vcHRpb25zLnJhbmdlcyYmKHRoaXMueXlsbG9jLnJhbmdlPVswLDBdKSx0aGlzLm9mZnNldD0wLHRoaXN9LGlucHV0OmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5faW5wdXRbMF07cmV0dXJuIHRoaXMueXl0ZXh0Kz10LHRoaXMueXlsZW5nKyssdGhpcy5vZmZzZXQrKyx0aGlzLm1hdGNoKz10LHRoaXMubWF0Y2hlZCs9dCx0Lm1hdGNoKC8oPzpcclxuP3xcbikuKi9nKT8odGhpcy55eWxpbmVubysrLHRoaXMueXlsbG9jLmxhc3RfbGluZSsrKTp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbisrLHRoaXMub3B0aW9ucy5yYW5nZXMmJnRoaXMueXlsbG9jLnJhbmdlWzFdKyssdGhpcy5faW5wdXQ9dGhpcy5faW5wdXQuc2xpY2UoMSksdH0sdW5wdXQ6ZnVuY3Rpb24odCl7dmFyIGU9dC5sZW5ndGgsbj10LnNwbGl0KC8oPzpcclxuP3xcbikvZyk7dGhpcy5faW5wdXQ9dCt0aGlzLl9pbnB1dCx0aGlzLnl5dGV4dD10aGlzLnl5dGV4dC5zdWJzdHIoMCx0aGlzLnl5dGV4dC5sZW5ndGgtZSksdGhpcy5vZmZzZXQtPWU7dmFyIHI9dGhpcy5tYXRjaC5zcGxpdCgvKD86XHJcbj98XG4pL2cpO3RoaXMubWF0Y2g9dGhpcy5tYXRjaC5zdWJzdHIoMCx0aGlzLm1hdGNoLmxlbmd0aC0xKSx0aGlzLm1hdGNoZWQ9dGhpcy5tYXRjaGVkLnN1YnN0cigwLHRoaXMubWF0Y2hlZC5sZW5ndGgtMSksbi5sZW5ndGgtMSYmKHRoaXMueXlsaW5lbm8tPW4ubGVuZ3RoLTEpO3ZhciBpPXRoaXMueXlsbG9jLnJhbmdlO3JldHVybiB0aGlzLnl5bGxvYz17Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5maXJzdF9saW5lLGxhc3RfbGluZTp0aGlzLnl5bGluZW5vKzEsZmlyc3RfY29sdW1uOnRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbixsYXN0X2NvbHVtbjpuPyhuLmxlbmd0aD09PXIubGVuZ3RoP3RoaXMueXlsbG9jLmZpcnN0X2NvbHVtbjowKStyW3IubGVuZ3RoLW4ubGVuZ3RoXS5sZW5ndGgtblswXS5sZW5ndGg6dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLWV9LHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1baVswXSxpWzBdK3RoaXMueXlsZW5nLWVdKSx0aGlzLnl5bGVuZz10aGlzLnl5dGV4dC5sZW5ndGgsdGhpc30sbW9yZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9tb3JlPSEwLHRoaXN9LHJlamVjdDpmdW5jdGlvbigpe3JldHVybiB0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyPyh0aGlzLl9iYWNrdHJhY2s9ITAsdGhpcyk6dGhpcy5wYXJzZUVycm9yKCJMZXhpY2FsIGVycm9yIG9uIGxpbmUgIisodGhpcy55eWxpbmVubysxKSsiLiBZb3UgY2FuIG9ubHkgaW52b2tlIHJlamVjdCgpIGluIHRoZSBsZXhlciB3aGVuIHRoZSBsZXhlciBpcyBvZiB0aGUgYmFja3RyYWNraW5nIHBlcnN1YXNpb24gKG9wdGlvbnMuYmFja3RyYWNrX2xleGVyID0gdHJ1ZSkuXG4iK3RoaXMuc2hvd1Bvc2l0aW9uKCkse3RleHQ6IiIsdG9rZW46bnVsbCxsaW5lOnRoaXMueXlsaW5lbm99KX0sbGVzczpmdW5jdGlvbih0KXt0aGlzLnVucHV0KHRoaXMubWF0Y2guc2xpY2UodCkpfSxwYXN0SW5wdXQ6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLm1hdGNoZWQuc3Vic3RyKDAsdGhpcy5tYXRjaGVkLmxlbmd0aC10aGlzLm1hdGNoLmxlbmd0aCk7cmV0dXJuKHQubGVuZ3RoPjIwPyIuLi4iOiIiKSt0LnN1YnN0cigtMjApLnJlcGxhY2UoL1xuL2csIiIpfSx1cGNvbWluZ0lucHV0OmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5tYXRjaDtyZXR1cm4gdC5sZW5ndGg8MjAmJih0Kz10aGlzLl9pbnB1dC5zdWJzdHIoMCwyMC10Lmxlbmd0aCkpLCh0LnN1YnN0cigwLDIwKSsodC5sZW5ndGg+MjA/Ii4uLiI6IiIpKS5yZXBsYWNlKC9cbi9nLCIiKX0sc2hvd1Bvc2l0aW9uOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5wYXN0SW5wdXQoKSxlPW5ldyBBcnJheSh0Lmxlbmd0aCsxKS5qb2luKCItIik7cmV0dXJuIHQrdGhpcy51cGNvbWluZ0lucHV0KCkrIlxuIitlKyJeIn0sdGVzdF9tYXRjaDpmdW5jdGlvbih0LGUpe3ZhciBuLHIsaTtpZih0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyJiYoaT17eXlsaW5lbm86dGhpcy55eWxpbmVubyx5eWxsb2M6e2ZpcnN0X2xpbmU6dGhpcy55eWxsb2MuZmlyc3RfbGluZSxsYXN0X2xpbmU6dGhpcy5sYXN0X2xpbmUsZmlyc3RfY29sdW1uOnRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbixsYXN0X2NvbHVtbjp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbn0seXl0ZXh0OnRoaXMueXl0ZXh0LG1hdGNoOnRoaXMubWF0Y2gsbWF0Y2hlczp0aGlzLm1hdGNoZXMsbWF0Y2hlZDp0aGlzLm1hdGNoZWQseXlsZW5nOnRoaXMueXlsZW5nLG9mZnNldDp0aGlzLm9mZnNldCxfbW9yZTp0aGlzLl9tb3JlLF9pbnB1dDp0aGlzLl9pbnB1dCx5eTp0aGlzLnl5LGNvbmRpdGlvblN0YWNrOnRoaXMuY29uZGl0aW9uU3RhY2suc2xpY2UoMCksZG9uZTp0aGlzLmRvbmV9LHRoaXMub3B0aW9ucy5yYW5nZXMmJihpLnl5bGxvYy5yYW5nZT10aGlzLnl5bGxvYy5yYW5nZS5zbGljZSgwKSkpLChyPXRbMF0ubWF0Y2goLyg/OlxyXG4/fFxuKS4qL2cpKSYmKHRoaXMueXlsaW5lbm8rPXIubGVuZ3RoKSx0aGlzLnl5bGxvYz17Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5sYXN0X2xpbmUsbGFzdF9saW5lOnRoaXMueXlsaW5lbm8rMSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MubGFzdF9jb2x1bW4sbGFzdF9jb2x1bW46cj9yW3IubGVuZ3RoLTFdLmxlbmd0aC1yW3IubGVuZ3RoLTFdLm1hdGNoKC9ccj9cbj8vKVswXS5sZW5ndGg6dGhpcy55eWxsb2MubGFzdF9jb2x1bW4rdFswXS5sZW5ndGh9LHRoaXMueXl0ZXh0Kz10WzBdLHRoaXMubWF0Y2grPXRbMF0sdGhpcy5tYXRjaGVzPXQsdGhpcy55eWxlbmc9dGhpcy55eXRleHQubGVuZ3RoLHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1bdGhpcy5vZmZzZXQsdGhpcy5vZmZzZXQrPXRoaXMueXlsZW5nXSksdGhpcy5fbW9yZT0hMSx0aGlzLl9iYWNrdHJhY2s9ITEsdGhpcy5faW5wdXQ9dGhpcy5faW5wdXQuc2xpY2UodFswXS5sZW5ndGgpLHRoaXMubWF0Y2hlZCs9dFswXSxuPXRoaXMucGVyZm9ybUFjdGlvbi5jYWxsKHRoaXMsdGhpcy55eSx0aGlzLGUsdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXSksdGhpcy5kb25lJiZ0aGlzLl9pbnB1dCYmKHRoaXMuZG9uZT0hMSksbilyZXR1cm4gbjtpZih0aGlzLl9iYWNrdHJhY2spe2Zvcih2YXIgYSBpbiBpKXRoaXNbYV09aVthXTtyZXR1cm4hMX1yZXR1cm4hMX0sbmV4dDpmdW5jdGlvbigpe2lmKHRoaXMuZG9uZSlyZXR1cm4gdGhpcy5FT0Y7dmFyIHQsZSxuLHI7dGhpcy5faW5wdXR8fCh0aGlzLmRvbmU9ITApLHRoaXMuX21vcmV8fCh0aGlzLnl5dGV4dD0iIix0aGlzLm1hdGNoPSIiKTtmb3IodmFyIGk9dGhpcy5fY3VycmVudFJ1bGVzKCksYT0wO2E8aS5sZW5ndGg7YSsrKWlmKChuPXRoaXMuX2lucHV0Lm1hdGNoKHRoaXMucnVsZXNbaVthXV0pKSYmKCFlfHxuWzBdLmxlbmd0aD5lWzBdLmxlbmd0aCkpe2lmKGU9bixyPWEsdGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlcil7aWYoITEhPT0odD10aGlzLnRlc3RfbWF0Y2gobixpW2FdKSkpcmV0dXJuIHQ7aWYodGhpcy5fYmFja3RyYWNrKXtlPSExO2NvbnRpbnVlfXJldHVybiExfWlmKCF0aGlzLm9wdGlvbnMuZmxleClicmVha31yZXR1cm4gZT8hMSE9PSh0PXRoaXMudGVzdF9tYXRjaChlLGlbcl0pKSYmdDoiIj09PXRoaXMuX2lucHV0P3RoaXMuRU9GOnRoaXMucGFyc2VFcnJvcigiTGV4aWNhbCBlcnJvciBvbiBsaW5lICIrKHRoaXMueXlsaW5lbm8rMSkrIi4gVW5yZWNvZ25pemVkIHRleHQuXG4iK3RoaXMuc2hvd1Bvc2l0aW9uKCkse3RleHQ6IiIsdG9rZW46bnVsbCxsaW5lOnRoaXMueXlsaW5lbm99KX0sbGV4OmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5uZXh0KCk7cmV0dXJuIHR8fHRoaXMubGV4KCl9LGJlZ2luOmZ1bmN0aW9uKHQpe3RoaXMuY29uZGl0aW9uU3RhY2sucHVzaCh0KX0scG9wU3RhdGU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMT4wP3RoaXMuY29uZGl0aW9uU3RhY2sucG9wKCk6dGhpcy5jb25kaXRpb25TdGFja1swXX0sX2N1cnJlbnRSdWxlczpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aCYmdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXT90aGlzLmNvbmRpdGlvbnNbdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXV0ucnVsZXM6dGhpcy5jb25kaXRpb25zLklOSVRJQUwucnVsZXN9LHRvcFN0YXRlOmZ1bmN0aW9uKHQpe3JldHVybih0PXRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTEtTWF0aC5hYnModHx8MCkpPj0wP3RoaXMuY29uZGl0aW9uU3RhY2tbdF06IklOSVRJQUwifSxwdXNoU3RhdGU6ZnVuY3Rpb24odCl7dGhpcy5iZWdpbih0KX0sc3RhdGVTdGFja1NpemU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGh9LG9wdGlvbnM6eyJjYXNlLWluc2Vuc2l0aXZlIjohMH0scGVyZm9ybUFjdGlvbjpmdW5jdGlvbih0LGUsbixyKXtzd2l0Y2gobil7Y2FzZSAwOnJldHVybiB0aGlzLmJlZ2luKCJvcGVuX2RpcmVjdGl2ZSIpLDU2O2Nhc2UgMTpyZXR1cm4gdGhpcy5iZWdpbigidHlwZV9kaXJlY3RpdmUiKSw1NztjYXNlIDI6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSx0aGlzLmJlZ2luKCJhcmdfZGlyZWN0aXZlIiksMTQ7Y2FzZSAzOnJldHVybiB0aGlzLnBvcFN0YXRlKCksdGhpcy5wb3BTdGF0ZSgpLDU5O2Nhc2UgNDpyZXR1cm4gNTg7Y2FzZSA1OnJldHVybiA1O2Nhc2UgNjpjYXNlIDc6Y2FzZSA4OmNhc2UgOTpjYXNlIDEwOmJyZWFrO2Nhc2UgMTE6cmV0dXJuIHRoaXMuYmVnaW4oIklEIiksMTY7Y2FzZSAxMjpyZXR1cm4gZS55eXRleHQ9ZS55eXRleHQudHJpbSgpLHRoaXMuYmVnaW4oIkFMSUFTIiksNDg7Y2FzZSAxMzpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLHRoaXMucG9wU3RhdGUoKSx0aGlzLmJlZ2luKCJMSU5FIiksMTg7Y2FzZSAxNDpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLHRoaXMucG9wU3RhdGUoKSw1O2Nhc2UgMTU6cmV0dXJuIHRoaXMuYmVnaW4oIkxJTkUiKSwyNztjYXNlIDE2OnJldHVybiB0aGlzLmJlZ2luKCJMSU5FIiksMjk7Y2FzZSAxNzpyZXR1cm4gdGhpcy5iZWdpbigiTElORSIpLDMwO2Nhc2UgMTg6cmV0dXJuIHRoaXMuYmVnaW4oIkxJTkUiKSwzMTtjYXNlIDE5OnJldHVybiB0aGlzLmJlZ2luKCJMSU5FIiksMzY7Y2FzZSAyMDpyZXR1cm4gdGhpcy5iZWdpbigiTElORSIpLDMzO2Nhc2UgMjE6cmV0dXJuIHRoaXMuYmVnaW4oIkxJTkUiKSwzNTtjYXNlIDIyOnJldHVybiB0aGlzLnBvcFN0YXRlKCksMTk7Y2FzZSAyMzpyZXR1cm4gMjg7Y2FzZSAyNDpyZXR1cm4gNDM7Y2FzZSAyNTpyZXR1cm4gNDQ7Y2FzZSAyNjpyZXR1cm4gMzk7Y2FzZSAyNzpyZXR1cm4gMzc7Y2FzZSAyODpyZXR1cm4gdGhpcy5iZWdpbigiSUQiKSwyMjtjYXNlIDI5OnJldHVybiB0aGlzLmJlZ2luKCJJRCIpLDIzO2Nhc2UgMzA6cmV0dXJuIDI1O2Nhc2UgMzE6cmV0dXJuIDc7Y2FzZSAzMjpyZXR1cm4gMjE7Y2FzZSAzMzpyZXR1cm4gNDI7Y2FzZSAzNDpyZXR1cm4gNTtjYXNlIDM1OnJldHVybiBlLnl5dGV4dD1lLnl5dGV4dC50cmltKCksNDg7Y2FzZSAzNjpyZXR1cm4gNTE7Y2FzZSAzNzpyZXR1cm4gNTI7Y2FzZSAzODpyZXR1cm4gNDk7Y2FzZSAzOTpyZXR1cm4gNTA7Y2FzZSA0MDpyZXR1cm4gNTM7Y2FzZSA0MTpyZXR1cm4gNTQ7Y2FzZSA0MjpyZXR1cm4gNTU7Y2FzZSA0MzpyZXR1cm4gNDY7Y2FzZSA0NDpyZXR1cm4gNDc7Y2FzZSA0NTpyZXR1cm4gNTtjYXNlIDQ2OnJldHVybiJJTlZBTElEIn19LHJ1bGVzOlsvXig/OiUlXHspL2ksL14oPzooKD86KD8hXH0lJSlbXjouXSkqKSkvaSwvXig/OjopL2ksL14oPzpcfSUlKS9pLC9eKD86KCg/Oig/IVx9JSUpLnxcbikqKSkvaSwvXig/Oltcbl0rKS9pLC9eKD86XHMrKS9pLC9eKD86KCg/IVxuKVxzKSspL2ksL14oPzojW15cbl0qKS9pLC9eKD86JSg/IVx7KVteXG5dKikvaSwvXig/OlteXH1dJSVbXlxuXSopL2ksL14oPzpwYXJ0aWNpcGFudFxiKS9pLC9eKD86W15cLT46XG4sO10rPyg/PSgoPyFcbilccykrYXMoPyFcbilcc3xbI1xuO118JCkpL2ksL14oPzphc1xiKS9pLC9eKD86KD86KSkvaSwvXig/Omxvb3BcYikvaSwvXig/OnJlY3RcYikvaSwvXig/Om9wdFxiKS9pLC9eKD86YWx0XGIpL2ksL14oPzplbHNlXGIpL2ksL14oPzpwYXJcYikvaSwvXig/OmFuZFxiKS9pLC9eKD86KD86WzpdPyg/Om5vKT93cmFwKT9bXiNcbjtdKikvaSwvXig/OmVuZFxiKS9pLC9eKD86bGVmdCBvZlxiKS9pLC9eKD86cmlnaHQgb2ZcYikvaSwvXig/Om92ZXJcYikvaSwvXig/Om5vdGVcYikvaSwvXig/OmFjdGl2YXRlXGIpL2ksL14oPzpkZWFjdGl2YXRlXGIpL2ksL14oPzp0aXRsZVxiKS9pLC9eKD86c2VxdWVuY2VEaWFncmFtXGIpL2ksL14oPzphdXRvbnVtYmVyXGIpL2ksL14oPzosKS9pLC9eKD86OykvaSwvXig/OlteXCtcLT46XG4sO10rKCg/ISgteHwtLXgpKVtcLV0qW15cK1wtPjpcbiw7XSspKikvaSwvXig/Oi0+PikvaSwvXig/Oi0tPj4pL2ksL14oPzotPikvaSwvXig/Oi0tPikvaSwvXig/Oi1beF0pL2ksL14oPzotLVt4XSkvaSwvXig/OjooPzooPzpubyk/d3JhcCk/W14jXG47XSspL2ksL14oPzpcKykvaSwvXig/Oi0pL2ksL14oPzokKS9pLC9eKD86LikvaV0sY29uZGl0aW9uczp7b3Blbl9kaXJlY3RpdmU6e3J1bGVzOlsxLDhdLGluY2x1c2l2ZTohMX0sdHlwZV9kaXJlY3RpdmU6e3J1bGVzOlsyLDMsOF0saW5jbHVzaXZlOiExfSxhcmdfZGlyZWN0aXZlOntydWxlczpbMyw0LDhdLGluY2x1c2l2ZTohMX0sSUQ6e3J1bGVzOls3LDgsMTJdLGluY2x1c2l2ZTohMX0sQUxJQVM6e3J1bGVzOls3LDgsMTMsMTRdLGluY2x1c2l2ZTohMX0sTElORTp7cnVsZXM6WzcsOCwyMl0saW5jbHVzaXZlOiExfSxJTklUSUFMOntydWxlczpbMCw1LDYsOCw5LDEwLDExLDE1LDE2LDE3LDE4LDE5LDIwLDIxLDIzLDI0LDI1LDI2LDI3LDI4LDI5LDMwLDMxLDMyLDMzLDM0LDM1LDM2LDM3LDM4LDM5LDQwLDQxLDQyLDQzLDQ0LDQ1LDQ2XSxpbmNsdXNpdmU6ITB9fX07ZnVuY3Rpb24gTygpe3RoaXMueXk9e319cmV0dXJuIEEubGV4ZXI9TSxPLnByb3RvdHlwZT1BLEEuUGFyc2VyPU8sbmV3IE99KCk7ZS5wYXJzZXI9aSxlLlBhcnNlcj1pLlBhcnNlcixlLnBhcnNlPWZ1bmN0aW9uKCl7cmV0dXJuIGkucGFyc2UuYXBwbHkoaSxhcmd1bWVudHMpfSxlLm1haW49ZnVuY3Rpb24ocil7clsxXXx8KGNvbnNvbGUubG9nKCJVc2FnZTogIityWzBdKyIgRklMRSIpLHQuZXhpdCgxKSk7dmFyIGk9bigxOSkucmVhZEZpbGVTeW5jKG4oMjApLm5vcm1hbGl6ZShyWzFdKSwidXRmOCIpO3JldHVybiBlLnBhcnNlci5wYXJzZShpKX0sbi5jW24uc109PT1yJiZlLm1haW4odC5hcmd2LnNsaWNlKDEpKX0pLmNhbGwodGhpcyxuKDE0KSxuKDcpKHQpKX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTk4KTt0LmV4cG9ydHM9e0dyYXBoOnIuR3JhcGgsanNvbjpuKDMwMSksYWxnOm4oMzAyKSx2ZXJzaW9uOnIudmVyc2lvbn19LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcjt0cnl7cj17Y2xvbmVEZWVwOm4oMzEzKSxjb25zdGFudDpuKDg2KSxkZWZhdWx0czpuKDE1NCksZWFjaDpuKDg3KSxmaWx0ZXI6bigxMjgpLGZpbmQ6bigzMTQpLGZsYXR0ZW46bigxNTYpLGZvckVhY2g6bigxMjYpLGZvckluOm4oMzE5KSxoYXM6big5MyksaXNVbmRlZmluZWQ6bigxMzkpLGxhc3Q6bigzMjApLG1hcDpuKDE0MCksbWFwVmFsdWVzOm4oMzIxKSxtYXg6bigzMjIpLG1lcmdlOm4oMzI0KSxtaW46bigzMjkpLG1pbkJ5Om4oMzMwKSxub3c6bigzMzEpLHBpY2s6bigxNjEpLHJhbmdlOm4oMTYyKSxyZWR1Y2U6bigxNDIpLHNvcnRCeTpuKDMzOCksdW5pcXVlSWQ6bigxNjMpLHZhbHVlczpuKDE0NyksemlwT2JqZWN0Om4oMzQzKX19Y2F0Y2godCl7fXJ8fChyPXdpbmRvdy5fKSx0LmV4cG9ydHM9cn0sZnVuY3Rpb24odCxlKXt2YXIgbj1BcnJheS5pc0FycmF5O3QuZXhwb3J0cz1ufSxmdW5jdGlvbih0LGUsbil7Ci8qKgogKiBAbGljZW5zZQogKiBDb3B5cmlnaHQgKGMpIDIwMTItMjAxMyBDaHJpcyBQZXR0aXR0CiAqCiAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkKICogb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwKICogaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cwogKiB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsCiAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcwogKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgogKgogKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgogKiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KICoKICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCiAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQogKiBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCiAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sCiAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4KICogVEhFIFNPRlRXQVJFLgogKi8KdC5leHBvcnRzPXtncmFwaGxpYjpuKDMxMSksZGFncmU6bigxNTMpLGludGVyc2VjdDpuKDM2OCkscmVuZGVyOm4oMzcwKSx1dGlsOm4oMTIpLHZlcnNpb246bigzODIpfX0sZnVuY3Rpb24odCxlKXt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIHQud2VicGFja1BvbHlmaWxsfHwodC5kZXByZWNhdGU9ZnVuY3Rpb24oKXt9LHQucGF0aHM9W10sdC5jaGlsZHJlbnx8KHQuY2hpbGRyZW49W10pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJsb2FkZWQiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB0Lmx9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsImlkIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdC5pfX0pLHQud2VicGFja1BvbHlmaWxsPTEpLHR9fSxmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oNCksaT1uKDE3KS5HcmFwaDtmdW5jdGlvbiBhKHQsZSxuLGkpe3ZhciBhO2Rve2E9ci51bmlxdWVJZChpKX13aGlsZSh0Lmhhc05vZGUoYSkpO3JldHVybiBuLmR1bW15PWUsdC5zZXROb2RlKGEsbiksYX1mdW5jdGlvbiBvKHQpe3JldHVybiByLm1heChyLm1hcCh0Lm5vZGVzKCksKGZ1bmN0aW9uKGUpe3ZhciBuPXQubm9kZShlKS5yYW5rO2lmKCFyLmlzVW5kZWZpbmVkKG4pKXJldHVybiBufSkpKX10LmV4cG9ydHM9e2FkZER1bW15Tm9kZTphLHNpbXBsaWZ5OmZ1bmN0aW9uKHQpe3ZhciBlPShuZXcgaSkuc2V0R3JhcGgodC5ncmFwaCgpKTtyZXR1cm4gci5mb3JFYWNoKHQubm9kZXMoKSwoZnVuY3Rpb24obil7ZS5zZXROb2RlKG4sdC5ub2RlKG4pKX0pKSxyLmZvckVhY2godC5lZGdlcygpLChmdW5jdGlvbihuKXt2YXIgcj1lLmVkZ2Uobi52LG4udyl8fHt3ZWlnaHQ6MCxtaW5sZW46MX0saT10LmVkZ2Uobik7ZS5zZXRFZGdlKG4udixuLncse3dlaWdodDpyLndlaWdodCtpLndlaWdodCxtaW5sZW46TWF0aC5tYXgoci5taW5sZW4saS5taW5sZW4pfSl9KSksZX0sYXNOb25Db21wb3VuZEdyYXBoOmZ1bmN0aW9uKHQpe3ZhciBlPW5ldyBpKHttdWx0aWdyYXBoOnQuaXNNdWx0aWdyYXBoKCl9KS5zZXRHcmFwaCh0LmdyYXBoKCkpO3JldHVybiByLmZvckVhY2godC5ub2RlcygpLChmdW5jdGlvbihuKXt0LmNoaWxkcmVuKG4pLmxlbmd0aHx8ZS5zZXROb2RlKG4sdC5ub2RlKG4pKX0pKSxyLmZvckVhY2godC5lZGdlcygpLChmdW5jdGlvbihuKXtlLnNldEVkZ2Uobix0LmVkZ2UobikpfSkpLGV9LHN1Y2Nlc3NvcldlaWdodHM6ZnVuY3Rpb24odCl7dmFyIGU9ci5tYXAodC5ub2RlcygpLChmdW5jdGlvbihlKXt2YXIgbj17fTtyZXR1cm4gci5mb3JFYWNoKHQub3V0RWRnZXMoZSksKGZ1bmN0aW9uKGUpe25bZS53XT0obltlLnddfHwwKSt0LmVkZ2UoZSkud2VpZ2h0fSkpLG59KSk7cmV0dXJuIHIuemlwT2JqZWN0KHQubm9kZXMoKSxlKX0scHJlZGVjZXNzb3JXZWlnaHRzOmZ1bmN0aW9uKHQpe3ZhciBlPXIubWFwKHQubm9kZXMoKSwoZnVuY3Rpb24oZSl7dmFyIG49e307cmV0dXJuIHIuZm9yRWFjaCh0LmluRWRnZXMoZSksKGZ1bmN0aW9uKGUpe25bZS52XT0obltlLnZdfHwwKSt0LmVkZ2UoZSkud2VpZ2h0fSkpLG59KSk7cmV0dXJuIHIuemlwT2JqZWN0KHQubm9kZXMoKSxlKX0saW50ZXJzZWN0UmVjdDpmdW5jdGlvbih0LGUpe3ZhciBuLHIsaT10LngsYT10Lnksbz1lLngtaSxzPWUueS1hLGM9dC53aWR0aC8yLHU9dC5oZWlnaHQvMjtpZighbyYmIXMpdGhyb3cgbmV3IEVycm9yKCJOb3QgcG9zc2libGUgdG8gZmluZCBpbnRlcnNlY3Rpb24gaW5zaWRlIG9mIHRoZSByZWN0YW5nbGUiKTtNYXRoLmFicyhzKSpjPk1hdGguYWJzKG8pKnU/KHM8MCYmKHU9LXUpLG49dSpvL3Mscj11KToobzwwJiYoYz0tYyksbj1jLHI9YypzL28pO3JldHVybnt4Omkrbix5OmErcn19LGJ1aWxkTGF5ZXJNYXRyaXg6ZnVuY3Rpb24odCl7dmFyIGU9ci5tYXAoci5yYW5nZShvKHQpKzEpLChmdW5jdGlvbigpe3JldHVybltdfSkpO3JldHVybiByLmZvckVhY2godC5ub2RlcygpLChmdW5jdGlvbihuKXt2YXIgaT10Lm5vZGUobiksYT1pLnJhbms7ci5pc1VuZGVmaW5lZChhKXx8KGVbYV1baS5vcmRlcl09bil9KSksZX0sbm9ybWFsaXplUmFua3M6ZnVuY3Rpb24odCl7dmFyIGU9ci5taW4oci5tYXAodC5ub2RlcygpLChmdW5jdGlvbihlKXtyZXR1cm4gdC5ub2RlKGUpLnJhbmt9KSkpO3IuZm9yRWFjaCh0Lm5vZGVzKCksKGZ1bmN0aW9uKG4pe3ZhciBpPXQubm9kZShuKTtyLmhhcyhpLCJyYW5rIikmJihpLnJhbmstPWUpfSkpfSxyZW1vdmVFbXB0eVJhbmtzOmZ1bmN0aW9uKHQpe3ZhciBlPXIubWluKHIubWFwKHQubm9kZXMoKSwoZnVuY3Rpb24oZSl7cmV0dXJuIHQubm9kZShlKS5yYW5rfSkpKSxuPVtdO3IuZm9yRWFjaCh0Lm5vZGVzKCksKGZ1bmN0aW9uKHIpe3ZhciBpPXQubm9kZShyKS5yYW5rLWU7bltpXXx8KG5baV09W10pLG5baV0ucHVzaChyKX0pKTt2YXIgaT0wLGE9dC5ncmFwaCgpLm5vZGVSYW5rRmFjdG9yO3IuZm9yRWFjaChuLChmdW5jdGlvbihlLG4pe3IuaXNVbmRlZmluZWQoZSkmJm4lYSE9MD8tLWk6aSYmci5mb3JFYWNoKGUsKGZ1bmN0aW9uKGUpe3Qubm9kZShlKS5yYW5rKz1pfSkpfSkpfSxhZGRCb3JkZXJOb2RlOmZ1bmN0aW9uKHQsZSxuLHIpe3ZhciBpPXt3aWR0aDowLGhlaWdodDowfTthcmd1bWVudHMubGVuZ3RoPj00JiYoaS5yYW5rPW4saS5vcmRlcj1yKTtyZXR1cm4gYSh0LCJib3JkZXIiLGksZSl9LG1heFJhbms6byxwYXJ0aXRpb246ZnVuY3Rpb24odCxlKXt2YXIgbj17bGhzOltdLHJoczpbXX07cmV0dXJuIHIuZm9yRWFjaCh0LChmdW5jdGlvbih0KXtlKHQpP24ubGhzLnB1c2godCk6bi5yaHMucHVzaCh0KX0pKSxufSx0aW1lOmZ1bmN0aW9uKHQsZSl7dmFyIG49ci5ub3coKTt0cnl7cmV0dXJuIGUoKX1maW5hbGx5e2NvbnNvbGUubG9nKHQrIiB0aW1lOiAiKyhyLm5vdygpLW4pKyJtcyIpfX0sbm90aW1lOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUoKX19fSxmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgcj1uKDE3MyksaT1uKDE3NCksYT1uKDE3NSksbz17Y2hhbm5lbDpyLmRlZmF1bHQsbGFuZzppLmRlZmF1bHQsdW5pdDphLmRlZmF1bHR9O2UuZGVmYXVsdD1vfSxmdW5jdGlvbih0LGUsbil7dmFyIHI7dHJ5e3I9e2Nsb25lOm4oMTk5KSxjb25zdGFudDpuKDg2KSxlYWNoOm4oODcpLGZpbHRlcjpuKDEyOCksaGFzOm4oOTMpLGlzQXJyYXk6big1KSxpc0VtcHR5Om4oMjc2KSxpc0Z1bmN0aW9uOm4oMzcpLGlzVW5kZWZpbmVkOm4oMTM5KSxrZXlzOm4oMzApLG1hcDpuKDE0MCkscmVkdWNlOm4oMTQyKSxzaXplOm4oMjc5KSx0cmFuc2Zvcm06bigyODUpLHVuaW9uOm4oMjg2KSx2YWx1ZXM6bigxNDcpfX1jYXRjaCh0KXt9cnx8KHI9d2luZG93Ll8pLHQuZXhwb3J0cz1yfSxmdW5jdGlvbih0LGUpe3QuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT10eXBlb2YgdDtyZXR1cm4gbnVsbCE9dCYmKCJvYmplY3QiPT1lfHwiZnVuY3Rpb24iPT1lKX19LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDQzKTt0LmV4cG9ydHM9e2lzU3ViZ3JhcGg6ZnVuY3Rpb24odCxlKXtyZXR1cm4hIXQuY2hpbGRyZW4oZSkubGVuZ3RofSxlZGdlVG9JZDpmdW5jdGlvbih0KXtyZXR1cm4gYSh0LnYpKyI6IithKHQudykrIjoiK2EodC5uYW1lKX0sYXBwbHlTdHlsZTpmdW5jdGlvbih0LGUpe2UmJnQuYXR0cigic3R5bGUiLGUpfSxhcHBseUNsYXNzOmZ1bmN0aW9uKHQsZSxuKXtlJiZ0LmF0dHIoImNsYXNzIixlKS5hdHRyKCJjbGFzcyIsbisiICIrdC5hdHRyKCJjbGFzcyIpKX0sYXBwbHlUcmFuc2l0aW9uOmZ1bmN0aW9uKHQsZSl7dmFyIG49ZS5ncmFwaCgpO2lmKHIuaXNQbGFpbk9iamVjdChuKSl7dmFyIGk9bi50cmFuc2l0aW9uO2lmKHIuaXNGdW5jdGlvbihpKSlyZXR1cm4gaSh0KX1yZXR1cm4gdH19O3ZhciBpPS86L2c7ZnVuY3Rpb24gYSh0KXtyZXR1cm4gdD9TdHJpbmcodCkucmVwbGFjZShpLCJcXDoiKToiIn19LGZ1bmN0aW9uKHQsZSxuKXsoZnVuY3Rpb24odCxyKXt2YXIgaT1mdW5jdGlvbigpe3ZhciB0PWZ1bmN0aW9uKHQsZSxuLHIpe2ZvcihuPW58fHt9LHI9dC5sZW5ndGg7ci0tO25bdFtyXV09ZSk7cmV0dXJuIG59LGU9WzEsN10sbj1bMSw2XSxyPVsxLDE0XSxpPVsxLDI1XSxhPVsxLDI4XSxvPVsxLDI2XSxzPVsxLDI3XSxjPVsxLDI5XSx1PVsxLDMwXSxsPVsxLDMxXSxoPVsxLDMzXSxmPVsxLDM0XSxkPVsxLDM1XSxwPVsxMCwxOV0sZz1bMSw0N10seT1bMSw0OF0sdj1bMSw0OV0sbT1bMSw1MF0sYj1bMSw1MV0seD1bMSw1Ml0sXz1bMTAsMTksMjUsMzIsMzMsNDEsNDQsNDUsNDYsNDcsNDgsNDldLGs9WzEwLDE5LDIzLDI1LDMyLDMzLDM3LDQxLDQ0LDQ1LDQ2LDQ3LDQ4LDQ5LDY2LDY3LDY4XSx3PVsxMCwxMywxNywxOV0sRT1bNDEsNjYsNjcsNjhdLFQ9WzQxLDQ4LDQ5LDY2LDY3LDY4XSxDPVs0MSw0NCw0NSw0Niw0Nyw2Niw2Nyw2OF0sUz1bMTAsMTksMjVdLEE9WzEsODFdLE09e3RyYWNlOmZ1bmN0aW9uKCl7fSx5eTp7fSxzeW1ib2xzXzp7ZXJyb3I6MixzdGFydDozLG1lcm1haWREb2M6NCxkaXJlY3RpdmU6NSxncmFwaENvbmZpZzo2LG9wZW5EaXJlY3RpdmU6Nyx0eXBlRGlyZWN0aXZlOjgsY2xvc2VEaXJlY3RpdmU6OSxORVdMSU5FOjEwLCI6IjoxMSxhcmdEaXJlY3RpdmU6MTIsb3Blbl9kaXJlY3RpdmU6MTMsdHlwZV9kaXJlY3RpdmU6MTQsYXJnX2RpcmVjdGl2ZToxNSxjbG9zZV9kaXJlY3RpdmU6MTYsQ0xBU1NfRElBR1JBTToxNyxzdGF0ZW1lbnRzOjE4LEVPRjoxOSxzdGF0ZW1lbnQ6MjAsY2xhc3NOYW1lOjIxLGFscGhhTnVtVG9rZW46MjIsR0VORVJJQ1RZUEU6MjMscmVsYXRpb25TdGF0ZW1lbnQ6MjQsTEFCRUw6MjUsY2xhc3NTdGF0ZW1lbnQ6MjYsbWV0aG9kU3RhdGVtZW50OjI3LGFubm90YXRpb25TdGF0ZW1lbnQ6MjgsY2xpY2tTdGF0ZW1lbnQ6MjksY3NzQ2xhc3NTdGF0ZW1lbnQ6MzAsQ0xBU1M6MzEsU1RZTEVfU0VQQVJBVE9SOjMyLFNUUlVDVF9TVEFSVDozMyxtZW1iZXJzOjM0LFNUUlVDVF9TVE9QOjM1LEFOTk9UQVRJT05fU1RBUlQ6MzYsQU5OT1RBVElPTl9FTkQ6MzcsTUVNQkVSOjM4LFNFUEFSQVRPUjozOSxyZWxhdGlvbjo0MCxTVFI6NDEscmVsYXRpb25UeXBlOjQyLGxpbmVUeXBlOjQzLEFHR1JFR0FUSU9OOjQ0LEVYVEVOU0lPTjo0NSxDT01QT1NJVElPTjo0NixERVBFTkRFTkNZOjQ3LExJTkU6NDgsRE9UVEVEX0xJTkU6NDksQ0FMTEJBQ0s6NTAsTElOSzo1MSxDU1NDTEFTUzo1Mixjb21tZW50VG9rZW46NTMsdGV4dFRva2VuOjU0LGdyYXBoQ29kZVRva2Vuczo1NSx0ZXh0Tm9UYWdzVG9rZW46NTYsVEFHU1RBUlQ6NTcsVEFHRU5EOjU4LCI9PSI6NTksIi0tIjo2MCxQQ1Q6NjEsREVGQVVMVDo2MixTUEFDRTo2MyxNSU5VUzo2NCxrZXl3b3Jkczo2NSxVTklDT0RFX1RFWFQ6NjYsTlVNOjY3LEFMUEhBOjY4LCRhY2NlcHQ6MCwkZW5kOjF9LHRlcm1pbmFsc186ezI6ImVycm9yIiwxMDoiTkVXTElORSIsMTE6IjoiLDEzOiJvcGVuX2RpcmVjdGl2ZSIsMTQ6InR5cGVfZGlyZWN0aXZlIiwxNToiYXJnX2RpcmVjdGl2ZSIsMTY6ImNsb3NlX2RpcmVjdGl2ZSIsMTc6IkNMQVNTX0RJQUdSQU0iLDE5OiJFT0YiLDIzOiJHRU5FUklDVFlQRSIsMjU6IkxBQkVMIiwzMToiQ0xBU1MiLDMyOiJTVFlMRV9TRVBBUkFUT1IiLDMzOiJTVFJVQ1RfU1RBUlQiLDM1OiJTVFJVQ1RfU1RPUCIsMzY6IkFOTk9UQVRJT05fU1RBUlQiLDM3OiJBTk5PVEFUSU9OX0VORCIsMzg6Ik1FTUJFUiIsMzk6IlNFUEFSQVRPUiIsNDE6IlNUUiIsNDQ6IkFHR1JFR0FUSU9OIiw0NToiRVhURU5TSU9OIiw0NjoiQ09NUE9TSVRJT04iLDQ3OiJERVBFTkRFTkNZIiw0ODoiTElORSIsNDk6IkRPVFRFRF9MSU5FIiw1MDoiQ0FMTEJBQ0siLDUxOiJMSU5LIiw1MjoiQ1NTQ0xBU1MiLDU1OiJncmFwaENvZGVUb2tlbnMiLDU3OiJUQUdTVEFSVCIsNTg6IlRBR0VORCIsNTk6Ij09Iiw2MDoiLS0iLDYxOiJQQ1QiLDYyOiJERUZBVUxUIiw2MzoiU1BBQ0UiLDY0OiJNSU5VUyIsNjU6ImtleXdvcmRzIiw2NjoiVU5JQ09ERV9URVhUIiw2NzoiTlVNIiw2ODoiQUxQSEEifSxwcm9kdWN0aW9uc186WzAsWzMsMV0sWzMsMl0sWzQsMV0sWzUsNF0sWzUsNl0sWzcsMV0sWzgsMV0sWzEyLDFdLFs5LDFdLFs2LDRdLFsxOCwxXSxbMTgsMl0sWzE4LDNdLFsyMSwxXSxbMjEsMl0sWzIxLDNdLFsyMSwyXSxbMjAsMV0sWzIwLDJdLFsyMCwxXSxbMjAsMV0sWzIwLDFdLFsyMCwxXSxbMjAsMV0sWzIwLDFdLFsyNiwyXSxbMjYsNF0sWzI2LDVdLFsyNiw3XSxbMjgsNF0sWzM0LDFdLFszNCwyXSxbMjcsMV0sWzI3LDJdLFsyNywxXSxbMjcsMV0sWzI0LDNdLFsyNCw0XSxbMjQsNF0sWzI0LDVdLFs0MCwzXSxbNDAsMl0sWzQwLDJdLFs0MCwxXSxbNDIsMV0sWzQyLDFdLFs0MiwxXSxbNDIsMV0sWzQzLDFdLFs0MywxXSxbMjksM10sWzI5LDRdLFsyOSwzXSxbMjksNF0sWzMwLDNdLFs1MywxXSxbNTMsMV0sWzU0LDFdLFs1NCwxXSxbNTQsMV0sWzU0LDFdLFs1NCwxXSxbNTQsMV0sWzU0LDFdLFs1NiwxXSxbNTYsMV0sWzU2LDFdLFs1NiwxXSxbMjIsMV0sWzIyLDFdLFsyMiwxXV0scGVyZm9ybUFjdGlvbjpmdW5jdGlvbih0LGUsbixyLGksYSxvKXt2YXIgcz1hLmxlbmd0aC0xO3N3aXRjaChpKXtjYXNlIDY6ci5wYXJzZURpcmVjdGl2ZSgiJSV7Iiwib3Blbl9kaXJlY3RpdmUiKTticmVhaztjYXNlIDc6ci5wYXJzZURpcmVjdGl2ZShhW3NdLCJ0eXBlX2RpcmVjdGl2ZSIpO2JyZWFrO2Nhc2UgODphW3NdPWFbc10udHJpbSgpLnJlcGxhY2UoLycvZywnIicpLHIucGFyc2VEaXJlY3RpdmUoYVtzXSwiYXJnX2RpcmVjdGl2ZSIpO2JyZWFrO2Nhc2UgOTpyLnBhcnNlRGlyZWN0aXZlKCJ9JSUiLCJjbG9zZV9kaXJlY3RpdmUiLCJjbGFzcyIpO2JyZWFrO2Nhc2UgMTQ6dGhpcy4kPWFbc107YnJlYWs7Y2FzZSAxNTp0aGlzLiQ9YVtzLTFdK2Fbc107YnJlYWs7Y2FzZSAxNjp0aGlzLiQ9YVtzLTJdKyJ+IithW3MtMV0rYVtzXTticmVhaztjYXNlIDE3OnRoaXMuJD1hW3MtMV0rIn4iK2Fbc107YnJlYWs7Y2FzZSAxODpyLmFkZFJlbGF0aW9uKGFbc10pO2JyZWFrO2Nhc2UgMTk6YVtzLTFdLnRpdGxlPXIuY2xlYW51cExhYmVsKGFbc10pLHIuYWRkUmVsYXRpb24oYVtzLTFdKTticmVhaztjYXNlIDI2OnIuYWRkQ2xhc3MoYVtzXSk7YnJlYWs7Y2FzZSAyNzpyLmFkZENsYXNzKGFbcy0yXSksci5zZXRDc3NDbGFzcyhhW3MtMl0sYVtzXSk7YnJlYWs7Y2FzZSAyODpyLmFkZENsYXNzKGFbcy0zXSksci5hZGRNZW1iZXJzKGFbcy0zXSxhW3MtMV0pO2JyZWFrO2Nhc2UgMjk6ci5hZGRDbGFzcyhhW3MtNV0pLHIuc2V0Q3NzQ2xhc3MoYVtzLTVdLGFbcy0zXSksci5hZGRNZW1iZXJzKGFbcy01XSxhW3MtMV0pO2JyZWFrO2Nhc2UgMzA6ci5hZGRBbm5vdGF0aW9uKGFbc10sYVtzLTJdKTticmVhaztjYXNlIDMxOnRoaXMuJD1bYVtzXV07YnJlYWs7Y2FzZSAzMjphW3NdLnB1c2goYVtzLTFdKSx0aGlzLiQ9YVtzXTticmVhaztjYXNlIDMzOmJyZWFrO2Nhc2UgMzQ6ci5hZGRNZW1iZXIoYVtzLTFdLHIuY2xlYW51cExhYmVsKGFbc10pKTticmVhaztjYXNlIDM1OmNhc2UgMzY6YnJlYWs7Y2FzZSAzNzp0aGlzLiQ9e2lkMTphW3MtMl0saWQyOmFbc10scmVsYXRpb246YVtzLTFdLHJlbGF0aW9uVGl0bGUxOiJub25lIixyZWxhdGlvblRpdGxlMjoibm9uZSJ9O2JyZWFrO2Nhc2UgMzg6dGhpcy4kPXtpZDE6YVtzLTNdLGlkMjphW3NdLHJlbGF0aW9uOmFbcy0xXSxyZWxhdGlvblRpdGxlMTphW3MtMl0scmVsYXRpb25UaXRsZTI6Im5vbmUifTticmVhaztjYXNlIDM5OnRoaXMuJD17aWQxOmFbcy0zXSxpZDI6YVtzXSxyZWxhdGlvbjphW3MtMl0scmVsYXRpb25UaXRsZTE6Im5vbmUiLHJlbGF0aW9uVGl0bGUyOmFbcy0xXX07YnJlYWs7Y2FzZSA0MDp0aGlzLiQ9e2lkMTphW3MtNF0saWQyOmFbc10scmVsYXRpb246YVtzLTJdLHJlbGF0aW9uVGl0bGUxOmFbcy0zXSxyZWxhdGlvblRpdGxlMjphW3MtMV19O2JyZWFrO2Nhc2UgNDE6dGhpcy4kPXt0eXBlMTphW3MtMl0sdHlwZTI6YVtzXSxsaW5lVHlwZTphW3MtMV19O2JyZWFrO2Nhc2UgNDI6dGhpcy4kPXt0eXBlMToibm9uZSIsdHlwZTI6YVtzXSxsaW5lVHlwZTphW3MtMV19O2JyZWFrO2Nhc2UgNDM6dGhpcy4kPXt0eXBlMTphW3MtMV0sdHlwZTI6Im5vbmUiLGxpbmVUeXBlOmFbc119O2JyZWFrO2Nhc2UgNDQ6dGhpcy4kPXt0eXBlMToibm9uZSIsdHlwZTI6Im5vbmUiLGxpbmVUeXBlOmFbc119O2JyZWFrO2Nhc2UgNDU6dGhpcy4kPXIucmVsYXRpb25UeXBlLkFHR1JFR0FUSU9OO2JyZWFrO2Nhc2UgNDY6dGhpcy4kPXIucmVsYXRpb25UeXBlLkVYVEVOU0lPTjticmVhaztjYXNlIDQ3OnRoaXMuJD1yLnJlbGF0aW9uVHlwZS5DT01QT1NJVElPTjticmVhaztjYXNlIDQ4OnRoaXMuJD1yLnJlbGF0aW9uVHlwZS5ERVBFTkRFTkNZO2JyZWFrO2Nhc2UgNDk6dGhpcy4kPXIubGluZVR5cGUuTElORTticmVhaztjYXNlIDUwOnRoaXMuJD1yLmxpbmVUeXBlLkRPVFRFRF9MSU5FO2JyZWFrO2Nhc2UgNTE6dGhpcy4kPWFbcy0yXSxyLnNldENsaWNrRXZlbnQoYVtzLTFdLGFbc10sdm9pZCAwKTticmVhaztjYXNlIDUyOnRoaXMuJD1hW3MtM10sci5zZXRDbGlja0V2ZW50KGFbcy0yXSxhW3MtMV0sYVtzXSk7YnJlYWs7Y2FzZSA1Mzp0aGlzLiQ9YVtzLTJdLHIuc2V0TGluayhhW3MtMV0sYVtzXSx2b2lkIDApO2JyZWFrO2Nhc2UgNTQ6dGhpcy4kPWFbcy0zXSxyLnNldExpbmsoYVtzLTJdLGFbcy0xXSxhW3NdKTticmVhaztjYXNlIDU1OnIuc2V0Q3NzQ2xhc3MoYVtzLTFdLGFbc10pfX0sdGFibGU6W3szOjEsNDoyLDU6Myw2OjQsNzo1LDEzOmUsMTc6bn0sezE6WzNdfSx7MTpbMiwxXX0sezM6OCw0OjIsNTozLDY6NCw3OjUsMTM6ZSwxNzpufSx7MTpbMiwzXX0sezg6OSwxNDpbMSwxMF19LHsxMDpbMSwxMV19LHsxNDpbMiw2XX0sezE6WzIsMl19LHs5OjEyLDExOlsxLDEzXSwxNjpyfSx0KFsxMSwxNl0sWzIsN10pLHs1OjIzLDc6NSwxMzplLDE4OjE1LDIwOjE2LDIxOjI0LDIyOjMyLDI0OjE3LDI2OjE4LDI3OjE5LDI4OjIwLDI5OjIxLDMwOjIyLDMxOmksMzY6YSwzODpvLDM5OnMsNTA6Yyw1MTp1LDUyOmwsNjY6aCw2NzpmLDY4OmR9LHsxMDpbMSwzNl19LHsxMjozNywxNTpbMSwzOF19LHsxMDpbMiw5XX0sezE5OlsxLDM5XX0sezEwOlsxLDQwXSwxOTpbMiwxMV19LHQocCxbMiwxOF0sezI1OlsxLDQxXX0pLHQocCxbMiwyMF0pLHQocCxbMiwyMV0pLHQocCxbMiwyMl0pLHQocCxbMiwyM10pLHQocCxbMiwyNF0pLHQocCxbMiwyNV0pLHQocCxbMiwzM10sezQwOjQyLDQyOjQ1LDQzOjQ2LDI1OlsxLDQ0XSw0MTpbMSw0M10sNDQ6Zyw0NTp5LDQ2OnYsNDc6bSw0ODpiLDQ5Onh9KSx7MjE6NTMsMjI6MzIsNjY6aCw2NzpmLDY4OmR9LHQocCxbMiwzNV0pLHQocCxbMiwzNl0pLHsyMjo1NCw2NjpoLDY3OmYsNjg6ZH0sezIxOjU1LDIyOjMyLDY2OmgsNjc6Ziw2ODpkfSx7MjE6NTYsMjI6MzIsNjY6aCw2NzpmLDY4OmR9LHs0MTpbMSw1N119LHQoXyxbMiwxNF0sezIyOjMyLDIxOjU4LDIzOlsxLDU5XSw2NjpoLDY3OmYsNjg6ZH0pLHQoayxbMiw2OV0pLHQoayxbMiw3MF0pLHQoayxbMiw3MV0pLHQodyxbMiw0XSksezk6NjAsMTY6cn0sezE2OlsyLDhdfSx7MTpbMiwxMF19LHs1OjIzLDc6NSwxMzplLDE4OjYxLDE5OlsyLDEyXSwyMDoxNiwyMToyNCwyMjozMiwyNDoxNywyNjoxOCwyNzoxOSwyODoyMCwyOToyMSwzMDoyMiwzMTppLDM2OmEsMzg6bywzOTpzLDUwOmMsNTE6dSw1MjpsLDY2OmgsNjc6Ziw2ODpkfSx0KHAsWzIsMTldKSx7MjE6NjIsMjI6MzIsNDE6WzEsNjNdLDY2OmgsNjc6Ziw2ODpkfSx7NDA6NjQsNDI6NDUsNDM6NDYsNDQ6Zyw0NTp5LDQ2OnYsNDc6bSw0ODpiLDQ5Onh9LHQocCxbMiwzNF0pLHs0Mzo2NSw0ODpiLDQ5Onh9LHQoRSxbMiw0NF0sezQyOjY2LDQ0OmcsNDU6eSw0Njp2LDQ3Om19KSx0KFQsWzIsNDVdKSx0KFQsWzIsNDZdKSx0KFQsWzIsNDddKSx0KFQsWzIsNDhdKSx0KEMsWzIsNDldKSx0KEMsWzIsNTBdKSx0KHAsWzIsMjZdLHszMjpbMSw2N10sMzM6WzEsNjhdfSksezM3OlsxLDY5XX0sezQxOlsxLDcwXX0sezQxOlsxLDcxXX0sezIyOjcyLDY2OmgsNjc6Ziw2ODpkfSx0KF8sWzIsMTVdKSx0KF8sWzIsMTddLHsyMjozMiwyMTo3Myw2NjpoLDY3OmYsNjg6ZH0pLHsxMDpbMSw3NF19LHsxOTpbMiwxM119LHQoUyxbMiwzN10pLHsyMTo3NSwyMjozMiw2NjpoLDY3OmYsNjg6ZH0sezIxOjc2LDIyOjMyLDQxOlsxLDc3XSw2NjpoLDY3OmYsNjg6ZH0sdChFLFsyLDQzXSx7NDI6NzgsNDQ6Zyw0NTp5LDQ2OnYsNDc6bX0pLHQoRSxbMiw0Ml0pLHsyMjo3OSw2NjpoLDY3OmYsNjg6ZH0sezM0OjgwLDM4OkF9LHsyMTo4MiwyMjozMiw2NjpoLDY3OmYsNjg6ZH0sdChwLFsyLDUxXSx7NDE6WzEsODNdfSksdChwLFsyLDUzXSx7NDE6WzEsODRdfSksdChwLFsyLDU1XSksdChfLFsyLDE2XSksdCh3LFsyLDVdKSx0KFMsWzIsMzldKSx0KFMsWzIsMzhdKSx7MjE6ODUsMjI6MzIsNjY6aCw2NzpmLDY4OmR9LHQoRSxbMiw0MV0pLHQocCxbMiwyN10sezMzOlsxLDg2XX0pLHszNTpbMSw4N119LHszNDo4OCwzNTpbMiwzMV0sMzg6QX0sdChwLFsyLDMwXSksdChwLFsyLDUyXSksdChwLFsyLDU0XSksdChTLFsyLDQwXSksezM0Ojg5LDM4OkF9LHQocCxbMiwyOF0pLHszNTpbMiwzMl19LHszNTpbMSw5MF19LHQocCxbMiwyOV0pXSxkZWZhdWx0QWN0aW9uczp7MjpbMiwxXSw0OlsyLDNdLDc6WzIsNl0sODpbMiwyXSwxNDpbMiw5XSwzODpbMiw4XSwzOTpbMiwxMF0sNjE6WzIsMTNdLDg4OlsyLDMyXX0scGFyc2VFcnJvcjpmdW5jdGlvbih0LGUpe2lmKCFlLnJlY292ZXJhYmxlKXt2YXIgbj1uZXcgRXJyb3IodCk7dGhyb3cgbi5oYXNoPWUsbn10aGlzLnRyYWNlKHQpfSxwYXJzZTpmdW5jdGlvbih0KXt2YXIgZT10aGlzLG49WzBdLHI9W10saT1bbnVsbF0sYT1bXSxvPXRoaXMudGFibGUscz0iIixjPTAsdT0wLGw9MCxoPTIsZj0xLGQ9YS5zbGljZS5jYWxsKGFyZ3VtZW50cywxKSxwPU9iamVjdC5jcmVhdGUodGhpcy5sZXhlciksZz17eXk6e319O2Zvcih2YXIgeSBpbiB0aGlzLnl5KU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0aGlzLnl5LHkpJiYoZy55eVt5XT10aGlzLnl5W3ldKTtwLnNldElucHV0KHQsZy55eSksZy55eS5sZXhlcj1wLGcueXkucGFyc2VyPXRoaXMsdm9pZCAwPT09cC55eWxsb2MmJihwLnl5bGxvYz17fSk7dmFyIHY9cC55eWxsb2M7YS5wdXNoKHYpO3ZhciBtPXAub3B0aW9ucyYmcC5vcHRpb25zLnJhbmdlcztmdW5jdGlvbiBiKCl7dmFyIHQ7cmV0dXJuIm51bWJlciIhPXR5cGVvZih0PXIucG9wKCl8fHAubGV4KCl8fGYpJiYodCBpbnN0YW5jZW9mIEFycmF5JiYodD0ocj10KS5wb3AoKSksdD1lLnN5bWJvbHNfW3RdfHx0KSx0fSJmdW5jdGlvbiI9PXR5cGVvZiBnLnl5LnBhcnNlRXJyb3I/dGhpcy5wYXJzZUVycm9yPWcueXkucGFyc2VFcnJvcjp0aGlzLnBhcnNlRXJyb3I9T2JqZWN0LmdldFByb3RvdHlwZU9mKHRoaXMpLnBhcnNlRXJyb3I7Zm9yKHZhciB4LF8sayx3LEUsVCxDLFMsQSxNPXt9Ozspe2lmKGs9bltuLmxlbmd0aC0xXSx0aGlzLmRlZmF1bHRBY3Rpb25zW2tdP3c9dGhpcy5kZWZhdWx0QWN0aW9uc1trXToobnVsbD09eCYmKHg9YigpKSx3PW9ba10mJm9ba11beF0pLHZvaWQgMD09PXd8fCF3Lmxlbmd0aHx8IXdbMF0pe3ZhciBPPSIiO2ZvcihUIGluIEE9W10sb1trXSl0aGlzLnRlcm1pbmFsc19bVF0mJlQ+aCYmQS5wdXNoKCInIit0aGlzLnRlcm1pbmFsc19bVF0rIiciKTtPPXAuc2hvd1Bvc2l0aW9uPyJQYXJzZSBlcnJvciBvbiBsaW5lICIrKGMrMSkrIjpcbiIrcC5zaG93UG9zaXRpb24oKSsiXG5FeHBlY3RpbmcgIitBLmpvaW4oIiwgIikrIiwgZ290ICciKyh0aGlzLnRlcm1pbmFsc19beF18fHgpKyInIjoiUGFyc2UgZXJyb3Igb24gbGluZSAiKyhjKzEpKyI6IFVuZXhwZWN0ZWQgIisoeD09Zj8iZW5kIG9mIGlucHV0IjoiJyIrKHRoaXMudGVybWluYWxzX1t4XXx8eCkrIiciKSx0aGlzLnBhcnNlRXJyb3IoTyx7dGV4dDpwLm1hdGNoLHRva2VuOnRoaXMudGVybWluYWxzX1t4XXx8eCxsaW5lOnAueXlsaW5lbm8sbG9jOnYsZXhwZWN0ZWQ6QX0pfWlmKHdbMF1pbnN0YW5jZW9mIEFycmF5JiZ3Lmxlbmd0aD4xKXRocm93IG5ldyBFcnJvcigiUGFyc2UgRXJyb3I6IG11bHRpcGxlIGFjdGlvbnMgcG9zc2libGUgYXQgc3RhdGU6ICIraysiLCB0b2tlbjogIit4KTtzd2l0Y2god1swXSl7Y2FzZSAxOm4ucHVzaCh4KSxpLnB1c2gocC55eXRleHQpLGEucHVzaChwLnl5bGxvYyksbi5wdXNoKHdbMV0pLHg9bnVsbCxfPyh4PV8sXz1udWxsKToodT1wLnl5bGVuZyxzPXAueXl0ZXh0LGM9cC55eWxpbmVubyx2PXAueXlsbG9jLGw+MCYmbC0tKTticmVhaztjYXNlIDI6aWYoQz10aGlzLnByb2R1Y3Rpb25zX1t3WzFdXVsxXSxNLiQ9aVtpLmxlbmd0aC1DXSxNLl8kPXtmaXJzdF9saW5lOmFbYS5sZW5ndGgtKEN8fDEpXS5maXJzdF9saW5lLGxhc3RfbGluZTphW2EubGVuZ3RoLTFdLmxhc3RfbGluZSxmaXJzdF9jb2x1bW46YVthLmxlbmd0aC0oQ3x8MSldLmZpcnN0X2NvbHVtbixsYXN0X2NvbHVtbjphW2EubGVuZ3RoLTFdLmxhc3RfY29sdW1ufSxtJiYoTS5fJC5yYW5nZT1bYVthLmxlbmd0aC0oQ3x8MSldLnJhbmdlWzBdLGFbYS5sZW5ndGgtMV0ucmFuZ2VbMV1dKSx2b2lkIDAhPT0oRT10aGlzLnBlcmZvcm1BY3Rpb24uYXBwbHkoTSxbcyx1LGMsZy55eSx3WzFdLGksYV0uY29uY2F0KGQpKSkpcmV0dXJuIEU7QyYmKG49bi5zbGljZSgwLC0xKkMqMiksaT1pLnNsaWNlKDAsLTEqQyksYT1hLnNsaWNlKDAsLTEqQykpLG4ucHVzaCh0aGlzLnByb2R1Y3Rpb25zX1t3WzFdXVswXSksaS5wdXNoKE0uJCksYS5wdXNoKE0uXyQpLFM9b1tuW24ubGVuZ3RoLTJdXVtuW24ubGVuZ3RoLTFdXSxuLnB1c2goUyk7YnJlYWs7Y2FzZSAzOnJldHVybiEwfX1yZXR1cm4hMH19LE89e0VPRjoxLHBhcnNlRXJyb3I6ZnVuY3Rpb24odCxlKXtpZighdGhpcy55eS5wYXJzZXIpdGhyb3cgbmV3IEVycm9yKHQpO3RoaXMueXkucGFyc2VyLnBhcnNlRXJyb3IodCxlKX0sc2V0SW5wdXQ6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy55eT1lfHx0aGlzLnl5fHx7fSx0aGlzLl9pbnB1dD10LHRoaXMuX21vcmU9dGhpcy5fYmFja3RyYWNrPXRoaXMuZG9uZT0hMSx0aGlzLnl5bGluZW5vPXRoaXMueXlsZW5nPTAsdGhpcy55eXRleHQ9dGhpcy5tYXRjaGVkPXRoaXMubWF0Y2g9IiIsdGhpcy5jb25kaXRpb25TdGFjaz1bIklOSVRJQUwiXSx0aGlzLnl5bGxvYz17Zmlyc3RfbGluZToxLGZpcnN0X2NvbHVtbjowLGxhc3RfbGluZToxLGxhc3RfY29sdW1uOjB9LHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1bMCwwXSksdGhpcy5vZmZzZXQ9MCx0aGlzfSxpbnB1dDpmdW5jdGlvbigpe3ZhciB0PXRoaXMuX2lucHV0WzBdO3JldHVybiB0aGlzLnl5dGV4dCs9dCx0aGlzLnl5bGVuZysrLHRoaXMub2Zmc2V0KyssdGhpcy5tYXRjaCs9dCx0aGlzLm1hdGNoZWQrPXQsdC5tYXRjaCgvKD86XHJcbj98XG4pLiovZyk/KHRoaXMueXlsaW5lbm8rKyx0aGlzLnl5bGxvYy5sYXN0X2xpbmUrKyk6dGhpcy55eWxsb2MubGFzdF9jb2x1bW4rKyx0aGlzLm9wdGlvbnMucmFuZ2VzJiZ0aGlzLnl5bGxvYy5yYW5nZVsxXSsrLHRoaXMuX2lucHV0PXRoaXMuX2lucHV0LnNsaWNlKDEpLHR9LHVucHV0OmZ1bmN0aW9uKHQpe3ZhciBlPXQubGVuZ3RoLG49dC5zcGxpdCgvKD86XHJcbj98XG4pL2cpO3RoaXMuX2lucHV0PXQrdGhpcy5faW5wdXQsdGhpcy55eXRleHQ9dGhpcy55eXRleHQuc3Vic3RyKDAsdGhpcy55eXRleHQubGVuZ3RoLWUpLHRoaXMub2Zmc2V0LT1lO3ZhciByPXRoaXMubWF0Y2guc3BsaXQoLyg/OlxyXG4/fFxuKS9nKTt0aGlzLm1hdGNoPXRoaXMubWF0Y2guc3Vic3RyKDAsdGhpcy5tYXRjaC5sZW5ndGgtMSksdGhpcy5tYXRjaGVkPXRoaXMubWF0Y2hlZC5zdWJzdHIoMCx0aGlzLm1hdGNoZWQubGVuZ3RoLTEpLG4ubGVuZ3RoLTEmJih0aGlzLnl5bGluZW5vLT1uLmxlbmd0aC0xKTt2YXIgaT10aGlzLnl5bGxvYy5yYW5nZTtyZXR1cm4gdGhpcy55eWxsb2M9e2ZpcnN0X2xpbmU6dGhpcy55eWxsb2MuZmlyc3RfbGluZSxsYXN0X2xpbmU6dGhpcy55eWxpbmVubysxLGZpcnN0X2NvbHVtbjp0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4sbGFzdF9jb2x1bW46bj8obi5sZW5ndGg9PT1yLmxlbmd0aD90aGlzLnl5bGxvYy5maXJzdF9jb2x1bW46MCkrcltyLmxlbmd0aC1uLmxlbmd0aF0ubGVuZ3RoLW5bMF0ubGVuZ3RoOnRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbi1lfSx0aGlzLm9wdGlvbnMucmFuZ2VzJiYodGhpcy55eWxsb2MucmFuZ2U9W2lbMF0saVswXSt0aGlzLnl5bGVuZy1lXSksdGhpcy55eWxlbmc9dGhpcy55eXRleHQubGVuZ3RoLHRoaXN9LG1vcmU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbW9yZT0hMCx0aGlzfSxyZWplY3Q6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlcj8odGhpcy5fYmFja3RyYWNrPSEwLHRoaXMpOnRoaXMucGFyc2VFcnJvcigiTGV4aWNhbCBlcnJvciBvbiBsaW5lICIrKHRoaXMueXlsaW5lbm8rMSkrIi4gWW91IGNhbiBvbmx5IGludm9rZSByZWplY3QoKSBpbiB0aGUgbGV4ZXIgd2hlbiB0aGUgbGV4ZXIgaXMgb2YgdGhlIGJhY2t0cmFja2luZyBwZXJzdWFzaW9uIChvcHRpb25zLmJhY2t0cmFja19sZXhlciA9IHRydWUpLlxuIit0aGlzLnNob3dQb3NpdGlvbigpLHt0ZXh0OiIiLHRva2VuOm51bGwsbGluZTp0aGlzLnl5bGluZW5vfSl9LGxlc3M6ZnVuY3Rpb24odCl7dGhpcy51bnB1dCh0aGlzLm1hdGNoLnNsaWNlKHQpKX0scGFzdElucHV0OmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5tYXRjaGVkLnN1YnN0cigwLHRoaXMubWF0Y2hlZC5sZW5ndGgtdGhpcy5tYXRjaC5sZW5ndGgpO3JldHVybih0Lmxlbmd0aD4yMD8iLi4uIjoiIikrdC5zdWJzdHIoLTIwKS5yZXBsYWNlKC9cbi9nLCIiKX0sdXBjb21pbmdJbnB1dDpmdW5jdGlvbigpe3ZhciB0PXRoaXMubWF0Y2g7cmV0dXJuIHQubGVuZ3RoPDIwJiYodCs9dGhpcy5faW5wdXQuc3Vic3RyKDAsMjAtdC5sZW5ndGgpKSwodC5zdWJzdHIoMCwyMCkrKHQubGVuZ3RoPjIwPyIuLi4iOiIiKSkucmVwbGFjZSgvXG4vZywiIil9LHNob3dQb3NpdGlvbjpmdW5jdGlvbigpe3ZhciB0PXRoaXMucGFzdElucHV0KCksZT1uZXcgQXJyYXkodC5sZW5ndGgrMSkuam9pbigiLSIpO3JldHVybiB0K3RoaXMudXBjb21pbmdJbnB1dCgpKyJcbiIrZSsiXiJ9LHRlc3RfbWF0Y2g6ZnVuY3Rpb24odCxlKXt2YXIgbixyLGk7aWYodGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlciYmKGk9e3l5bGluZW5vOnRoaXMueXlsaW5lbm8seXlsbG9jOntmaXJzdF9saW5lOnRoaXMueXlsbG9jLmZpcnN0X2xpbmUsbGFzdF9saW5lOnRoaXMubGFzdF9saW5lLGZpcnN0X2NvbHVtbjp0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4sbGFzdF9jb2x1bW46dGhpcy55eWxsb2MubGFzdF9jb2x1bW59LHl5dGV4dDp0aGlzLnl5dGV4dCxtYXRjaDp0aGlzLm1hdGNoLG1hdGNoZXM6dGhpcy5tYXRjaGVzLG1hdGNoZWQ6dGhpcy5tYXRjaGVkLHl5bGVuZzp0aGlzLnl5bGVuZyxvZmZzZXQ6dGhpcy5vZmZzZXQsX21vcmU6dGhpcy5fbW9yZSxfaW5wdXQ6dGhpcy5faW5wdXQseXk6dGhpcy55eSxjb25kaXRpb25TdGFjazp0aGlzLmNvbmRpdGlvblN0YWNrLnNsaWNlKDApLGRvbmU6dGhpcy5kb25lfSx0aGlzLm9wdGlvbnMucmFuZ2VzJiYoaS55eWxsb2MucmFuZ2U9dGhpcy55eWxsb2MucmFuZ2Uuc2xpY2UoMCkpKSwocj10WzBdLm1hdGNoKC8oPzpcclxuP3xcbikuKi9nKSkmJih0aGlzLnl5bGluZW5vKz1yLmxlbmd0aCksdGhpcy55eWxsb2M9e2ZpcnN0X2xpbmU6dGhpcy55eWxsb2MubGFzdF9saW5lLGxhc3RfbGluZTp0aGlzLnl5bGluZW5vKzEsZmlyc3RfY29sdW1uOnRoaXMueXlsbG9jLmxhc3RfY29sdW1uLGxhc3RfY29sdW1uOnI/cltyLmxlbmd0aC0xXS5sZW5ndGgtcltyLmxlbmd0aC0xXS5tYXRjaCgvXHI/XG4/LylbMF0ubGVuZ3RoOnRoaXMueXlsbG9jLmxhc3RfY29sdW1uK3RbMF0ubGVuZ3RofSx0aGlzLnl5dGV4dCs9dFswXSx0aGlzLm1hdGNoKz10WzBdLHRoaXMubWF0Y2hlcz10LHRoaXMueXlsZW5nPXRoaXMueXl0ZXh0Lmxlbmd0aCx0aGlzLm9wdGlvbnMucmFuZ2VzJiYodGhpcy55eWxsb2MucmFuZ2U9W3RoaXMub2Zmc2V0LHRoaXMub2Zmc2V0Kz10aGlzLnl5bGVuZ10pLHRoaXMuX21vcmU9ITEsdGhpcy5fYmFja3RyYWNrPSExLHRoaXMuX2lucHV0PXRoaXMuX2lucHV0LnNsaWNlKHRbMF0ubGVuZ3RoKSx0aGlzLm1hdGNoZWQrPXRbMF0sbj10aGlzLnBlcmZvcm1BY3Rpb24uY2FsbCh0aGlzLHRoaXMueXksdGhpcyxlLHRoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMV0pLHRoaXMuZG9uZSYmdGhpcy5faW5wdXQmJih0aGlzLmRvbmU9ITEpLG4pcmV0dXJuIG47aWYodGhpcy5fYmFja3RyYWNrKXtmb3IodmFyIGEgaW4gaSl0aGlzW2FdPWlbYV07cmV0dXJuITF9cmV0dXJuITF9LG5leHQ6ZnVuY3Rpb24oKXtpZih0aGlzLmRvbmUpcmV0dXJuIHRoaXMuRU9GO3ZhciB0LGUsbixyO3RoaXMuX2lucHV0fHwodGhpcy5kb25lPSEwKSx0aGlzLl9tb3JlfHwodGhpcy55eXRleHQ9IiIsdGhpcy5tYXRjaD0iIik7Zm9yKHZhciBpPXRoaXMuX2N1cnJlbnRSdWxlcygpLGE9MDthPGkubGVuZ3RoO2ErKylpZigobj10aGlzLl9pbnB1dC5tYXRjaCh0aGlzLnJ1bGVzW2lbYV1dKSkmJighZXx8blswXS5sZW5ndGg+ZVswXS5sZW5ndGgpKXtpZihlPW4scj1hLHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIpe2lmKCExIT09KHQ9dGhpcy50ZXN0X21hdGNoKG4saVthXSkpKXJldHVybiB0O2lmKHRoaXMuX2JhY2t0cmFjayl7ZT0hMTtjb250aW51ZX1yZXR1cm4hMX1pZighdGhpcy5vcHRpb25zLmZsZXgpYnJlYWt9cmV0dXJuIGU/ITEhPT0odD10aGlzLnRlc3RfbWF0Y2goZSxpW3JdKSkmJnQ6IiI9PT10aGlzLl9pbnB1dD90aGlzLkVPRjp0aGlzLnBhcnNlRXJyb3IoIkxleGljYWwgZXJyb3Igb24gbGluZSAiKyh0aGlzLnl5bGluZW5vKzEpKyIuIFVucmVjb2duaXplZCB0ZXh0LlxuIit0aGlzLnNob3dQb3NpdGlvbigpLHt0ZXh0OiIiLHRva2VuOm51bGwsbGluZTp0aGlzLnl5bGluZW5vfSl9LGxleDpmdW5jdGlvbigpe3ZhciB0PXRoaXMubmV4dCgpO3JldHVybiB0fHx0aGlzLmxleCgpfSxiZWdpbjpmdW5jdGlvbih0KXt0aGlzLmNvbmRpdGlvblN0YWNrLnB1c2godCl9LHBvcFN0YXRlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTE+MD90aGlzLmNvbmRpdGlvblN0YWNrLnBvcCgpOnRoaXMuY29uZGl0aW9uU3RhY2tbMF19LF9jdXJyZW50UnVsZXM6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgmJnRoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMV0/dGhpcy5jb25kaXRpb25zW3RoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMV1dLnJ1bGVzOnRoaXMuY29uZGl0aW9ucy5JTklUSUFMLnJ1bGVzfSx0b3BTdGF0ZTpmdW5jdGlvbih0KXtyZXR1cm4odD10aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xLU1hdGguYWJzKHR8fDApKT49MD90aGlzLmNvbmRpdGlvblN0YWNrW3RdOiJJTklUSUFMIn0scHVzaFN0YXRlOmZ1bmN0aW9uKHQpe3RoaXMuYmVnaW4odCl9LHN0YXRlU3RhY2tTaXplOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RofSxvcHRpb25zOnt9LHBlcmZvcm1BY3Rpb246ZnVuY3Rpb24odCxlLG4scil7c3dpdGNoKG4pe2Nhc2UgMDpyZXR1cm4gdGhpcy5iZWdpbigib3Blbl9kaXJlY3RpdmUiKSwxMztjYXNlIDE6cmV0dXJuIHRoaXMuYmVnaW4oInR5cGVfZGlyZWN0aXZlIiksMTQ7Y2FzZSAyOnJldHVybiB0aGlzLnBvcFN0YXRlKCksdGhpcy5iZWdpbigiYXJnX2RpcmVjdGl2ZSIpLDExO2Nhc2UgMzpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLHRoaXMucG9wU3RhdGUoKSwxNjtjYXNlIDQ6cmV0dXJuIDE1O2Nhc2UgNTpjYXNlIDY6YnJlYWs7Y2FzZSA3OnJldHVybiAxMDtjYXNlIDg6YnJlYWs7Y2FzZSA5OmNhc2UgMTA6cmV0dXJuIDE3O2Nhc2UgMTE6cmV0dXJuIHRoaXMuYmVnaW4oInN0cnVjdCIpLDMzO2Nhc2UgMTI6cmV0dXJuIkVPRl9JTl9TVFJVQ1QiO2Nhc2UgMTM6cmV0dXJuIk9QRU5fSU5fU1RSVUNUIjtjYXNlIDE0OnJldHVybiB0aGlzLnBvcFN0YXRlKCksMzU7Y2FzZSAxNTpicmVhaztjYXNlIDE2OnJldHVybiJNRU1CRVIiO2Nhc2UgMTc6cmV0dXJuIDMxO2Nhc2UgMTg6cmV0dXJuIDUyO2Nhc2UgMTk6cmV0dXJuIDUwO2Nhc2UgMjA6cmV0dXJuIDUxO2Nhc2UgMjE6cmV0dXJuIDM2O2Nhc2UgMjI6cmV0dXJuIDM3O2Nhc2UgMjM6dGhpcy5iZWdpbigiZ2VuZXJpYyIpO2JyZWFrO2Nhc2UgMjQ6dGhpcy5wb3BTdGF0ZSgpO2JyZWFrO2Nhc2UgMjU6cmV0dXJuIkdFTkVSSUNUWVBFIjtjYXNlIDI2OnRoaXMuYmVnaW4oInN0cmluZyIpO2JyZWFrO2Nhc2UgMjc6dGhpcy5wb3BTdGF0ZSgpO2JyZWFrO2Nhc2UgMjg6cmV0dXJuIlNUUiI7Y2FzZSAyOTpjYXNlIDMwOnJldHVybiA0NTtjYXNlIDMxOmNhc2UgMzI6cmV0dXJuIDQ3O2Nhc2UgMzM6cmV0dXJuIDQ2O2Nhc2UgMzQ6cmV0dXJuIDQ0O2Nhc2UgMzU6cmV0dXJuIDQ4O2Nhc2UgMzY6cmV0dXJuIDQ5O2Nhc2UgMzc6cmV0dXJuIDI1O2Nhc2UgMzg6cmV0dXJuIDMyO2Nhc2UgMzk6cmV0dXJuIDY0O2Nhc2UgNDA6cmV0dXJuIkRPVCI7Y2FzZSA0MTpyZXR1cm4iUExVUyI7Y2FzZSA0MjpyZXR1cm4gNjE7Y2FzZSA0MzpjYXNlIDQ0OnJldHVybiJFUVVBTFMiO2Nhc2UgNDU6cmV0dXJuIDY4O2Nhc2UgNDY6cmV0dXJuIlBVTkNUVUFUSU9OIjtjYXNlIDQ3OnJldHVybiA2NztjYXNlIDQ4OnJldHVybiA2NjtjYXNlIDQ5OnJldHVybiA2MztjYXNlIDUwOnJldHVybiAxOX19LHJ1bGVzOlsvXig/OiUlXHspLywvXig/OigoPzooPyFcfSUlKVteOi5dKSopKS8sL14oPzo6KS8sL14oPzpcfSUlKS8sL14oPzooKD86KD8hXH0lJSkufFxuKSopKS8sL14oPzolJSg/IVx7KSpbXlxuXSooXHI/XG4/KSspLywvXig/OiUlW15cbl0qKFxyP1xuKSopLywvXig/Oihccj9cbikrKS8sL14oPzpccyspLywvXig/OmNsYXNzRGlhZ3JhbS12MlxiKS8sL14oPzpjbGFzc0RpYWdyYW1cYikvLC9eKD86W3tdKS8sL14oPzokKS8sL14oPzpbe10pLywvXig/Olt9XSkvLC9eKD86W1xuXSkvLC9eKD86W157fVxuXSopLywvXig/OmNsYXNzXGIpLywvXig/OmNzc0NsYXNzXGIpLywvXig/OmNhbGxiYWNrXGIpLywvXig/OmxpbmtcYikvLC9eKD86PDwpLywvXig/Oj4+KS8sL14oPzpbfl0pLywvXig/Olt+XSkvLC9eKD86W15+XSopLywvXig/OlsiXSkvLC9eKD86WyJdKS8sL14oPzpbXiJdKikvLC9eKD86XHMqPFx8KS8sL14oPzpccypcfD4pLywvXig/OlxzKj4pLywvXig/OlxzKjwpLywvXig/OlxzKlwqKS8sL14oPzpccypvXGIpLywvXig/Oi0tKS8sL14oPzpcLlwuKS8sL14oPzo6ezF9W146XG47XSspLywvXig/Ojp7M30pLywvXig/Oi0pLywvXig/OlwuKS8sL14oPzpcKykvLC9eKD86JSkvLC9eKD86PSkvLC9eKD86PSkvLC9eKD86XHcrKS8sL14oPzpbISIjJCUmJyorLC0uYD9cXC9dKS8sL14oPzpbMC05XSspLywvXig/OltcdTAwQUFcdTAwQjVcdTAwQkFcdTAwQzAtXHUwMEQ2XHUwMEQ4LVx1MDBGNl18W1x1MDBGOC1cdTAyQzFcdTAyQzYtXHUwMkQxXHUwMkUwLVx1MDJFNFx1MDJFQ1x1MDJFRVx1MDM3MC1cdTAzNzRcdTAzNzZcdTAzNzddfFtcdTAzN0EtXHUwMzdEXHUwMzg2XHUwMzg4LVx1MDM4QVx1MDM4Q1x1MDM4RS1cdTAzQTFcdTAzQTMtXHUwM0Y1XXxbXHUwM0Y3LVx1MDQ4MVx1MDQ4QS1cdTA1MjdcdTA1MzEtXHUwNTU2XHUwNTU5XHUwNTYxLVx1MDU4N1x1MDVEMC1cdTA1RUFdfFtcdTA1RjAtXHUwNUYyXHUwNjIwLVx1MDY0QVx1MDY2RVx1MDY2Rlx1MDY3MS1cdTA2RDNcdTA2RDVcdTA2RTVcdTA2RTZcdTA2RUVdfFtcdTA2RUZcdTA2RkEtXHUwNkZDXHUwNkZGXHUwNzEwXHUwNzEyLVx1MDcyRlx1MDc0RC1cdTA3QTVcdTA3QjFcdTA3Q0EtXHUwN0VBXXxbXHUwN0Y0XHUwN0Y1XHUwN0ZBXHUwODAwLVx1MDgxNVx1MDgxQVx1MDgyNFx1MDgyOFx1MDg0MC1cdTA4NThcdTA4QTBdfFtcdTA4QTItXHUwOEFDXHUwOTA0LVx1MDkzOVx1MDkzRFx1MDk1MFx1MDk1OC1cdTA5NjFcdTA5NzEtXHUwOTc3XXxbXHUwOTc5LVx1MDk3Rlx1MDk4NS1cdTA5OENcdTA5OEZcdTA5OTBcdTA5OTMtXHUwOUE4XHUwOUFBLVx1MDlCMFx1MDlCMl18W1x1MDlCNi1cdTA5QjlcdTA5QkRcdTA5Q0VcdTA5RENcdTA5RERcdTA5REYtXHUwOUUxXHUwOUYwXHUwOUYxXHUwQTA1LVx1MEEwQV18W1x1MEEwRlx1MEExMFx1MEExMy1cdTBBMjhcdTBBMkEtXHUwQTMwXHUwQTMyXHUwQTMzXHUwQTM1XHUwQTM2XHUwQTM4XHUwQTM5XXxbXHUwQTU5LVx1MEE1Q1x1MEE1RVx1MEE3Mi1cdTBBNzRcdTBBODUtXHUwQThEXHUwQThGLVx1MEE5MVx1MEE5My1cdTBBQThdfFtcdTBBQUEtXHUwQUIwXHUwQUIyXHUwQUIzXHUwQUI1LVx1MEFCOVx1MEFCRFx1MEFEMFx1MEFFMFx1MEFFMVx1MEIwNS1cdTBCMENdfFtcdTBCMEZcdTBCMTBcdTBCMTMtXHUwQjI4XHUwQjJBLVx1MEIzMFx1MEIzMlx1MEIzM1x1MEIzNS1cdTBCMzlcdTBCM0RcdTBCNUNdfFtcdTBCNURcdTBCNUYtXHUwQjYxXHUwQjcxXHUwQjgzXHUwQjg1LVx1MEI4QVx1MEI4RS1cdTBCOTBcdTBCOTItXHUwQjk1XHUwQjk5XXxbXHUwQjlBXHUwQjlDXHUwQjlFXHUwQjlGXHUwQkEzXHUwQkE0XHUwQkE4LVx1MEJBQVx1MEJBRS1cdTBCQjlcdTBCRDBdfFtcdTBDMDUtXHUwQzBDXHUwQzBFLVx1MEMxMFx1MEMxMi1cdTBDMjhcdTBDMkEtXHUwQzMzXHUwQzM1LVx1MEMzOVx1MEMzRF18W1x1MEM1OFx1MEM1OVx1MEM2MFx1MEM2MVx1MEM4NS1cdTBDOENcdTBDOEUtXHUwQzkwXHUwQzkyLVx1MENBOFx1MENBQS1cdTBDQjNdfFtcdTBDQjUtXHUwQ0I5XHUwQ0JEXHUwQ0RFXHUwQ0UwXHUwQ0UxXHUwQ0YxXHUwQ0YyXHUwRDA1LVx1MEQwQ1x1MEQwRS1cdTBEMTBdfFtcdTBEMTItXHUwRDNBXHUwRDNEXHUwRDRFXHUwRDYwXHUwRDYxXHUwRDdBLVx1MEQ3Rlx1MEQ4NS1cdTBEOTZcdTBEOUEtXHUwREIxXXxbXHUwREIzLVx1MERCQlx1MERCRFx1MERDMC1cdTBEQzZcdTBFMDEtXHUwRTMwXHUwRTMyXHUwRTMzXHUwRTQwLVx1MEU0Nlx1MEU4MV18W1x1MEU4Mlx1MEU4NFx1MEU4N1x1MEU4OFx1MEU4QVx1MEU4RFx1MEU5NC1cdTBFOTdcdTBFOTktXHUwRTlGXHUwRUExLVx1MEVBM118W1x1MEVBNVx1MEVBN1x1MEVBQVx1MEVBQlx1MEVBRC1cdTBFQjBcdTBFQjJcdTBFQjNcdTBFQkRcdTBFQzAtXHUwRUM0XHUwRUM2XXxbXHUwRURDLVx1MEVERlx1MEYwMFx1MEY0MC1cdTBGNDdcdTBGNDktXHUwRjZDXHUwRjg4LVx1MEY4Q1x1MTAwMC1cdTEwMkFdfFtcdTEwM0ZcdTEwNTAtXHUxMDU1XHUxMDVBLVx1MTA1RFx1MTA2MVx1MTA2NVx1MTA2Nlx1MTA2RS1cdTEwNzBcdTEwNzUtXHUxMDgxXXxbXHUxMDhFXHUxMEEwLVx1MTBDNVx1MTBDN1x1MTBDRFx1MTBEMC1cdTEwRkFcdTEwRkMtXHUxMjQ4XHUxMjRBLVx1MTI0RF18W1x1MTI1MC1cdTEyNTZcdTEyNThcdTEyNUEtXHUxMjVEXHUxMjYwLVx1MTI4OFx1MTI4QS1cdTEyOERcdTEyOTAtXHUxMkIwXXxbXHUxMkIyLVx1MTJCNVx1MTJCOC1cdTEyQkVcdTEyQzBcdTEyQzItXHUxMkM1XHUxMkM4LVx1MTJENlx1MTJEOC1cdTEzMTBdfFtcdTEzMTItXHUxMzE1XHUxMzE4LVx1MTM1QVx1MTM4MC1cdTEzOEZcdTEzQTAtXHUxM0Y0XHUxNDAxLVx1MTY2Q118W1x1MTY2Ri1cdTE2N0ZcdTE2ODEtXHUxNjlBXHUxNkEwLVx1MTZFQVx1MTcwMC1cdTE3MENcdTE3MEUtXHUxNzExXXxbXHUxNzIwLVx1MTczMVx1MTc0MC1cdTE3NTFcdTE3NjAtXHUxNzZDXHUxNzZFLVx1MTc3MFx1MTc4MC1cdTE3QjNcdTE3RDddfFtcdTE3RENcdTE4MjAtXHUxODc3XHUxODgwLVx1MThBOFx1MThBQVx1MThCMC1cdTE4RjVcdTE5MDAtXHUxOTFDXXxbXHUxOTUwLVx1MTk2RFx1MTk3MC1cdTE5NzRcdTE5ODAtXHUxOUFCXHUxOUMxLVx1MTlDN1x1MUEwMC1cdTFBMTZdfFtcdTFBMjAtXHUxQTU0XHUxQUE3XHUxQjA1LVx1MUIzM1x1MUI0NS1cdTFCNEJcdTFCODMtXHUxQkEwXHUxQkFFXHUxQkFGXXxbXHUxQkJBLVx1MUJFNVx1MUMwMC1cdTFDMjNcdTFDNEQtXHUxQzRGXHUxQzVBLVx1MUM3RFx1MUNFOS1cdTFDRUNdfFtcdTFDRUUtXHUxQ0YxXHUxQ0Y1XHUxQ0Y2XHUxRDAwLVx1MURCRlx1MUUwMC1cdTFGMTVcdTFGMTgtXHUxRjFEXXxbXHUxRjIwLVx1MUY0NVx1MUY0OC1cdTFGNERcdTFGNTAtXHUxRjU3XHUxRjU5XHUxRjVCXHUxRjVEXHUxRjVGLVx1MUY3RF18W1x1MUY4MC1cdTFGQjRcdTFGQjYtXHUxRkJDXHUxRkJFXHUxRkMyLVx1MUZDNFx1MUZDNi1cdTFGQ0NcdTFGRDAtXHUxRkQzXXxbXHUxRkQ2LVx1MUZEQlx1MUZFMC1cdTFGRUNcdTFGRjItXHUxRkY0XHUxRkY2LVx1MUZGQ1x1MjA3MVx1MjA3Rl18W1x1MjA5MC1cdTIwOUNcdTIxMDJcdTIxMDdcdTIxMEEtXHUyMTEzXHUyMTE1XHUyMTE5LVx1MjExRFx1MjEyNFx1MjEyNlx1MjEyOF18W1x1MjEyQS1cdTIxMkRcdTIxMkYtXHUyMTM5XHUyMTNDLVx1MjEzRlx1MjE0NS1cdTIxNDlcdTIxNEVcdTIxODNcdTIxODRdfFtcdTJDMDAtXHUyQzJFXHUyQzMwLVx1MkM1RVx1MkM2MC1cdTJDRTRcdTJDRUItXHUyQ0VFXHUyQ0YyXHUyQ0YzXXxbXHUyRDAwLVx1MkQyNVx1MkQyN1x1MkQyRFx1MkQzMC1cdTJENjdcdTJENkZcdTJEODAtXHUyRDk2XHUyREEwLVx1MkRBNl18W1x1MkRBOC1cdTJEQUVcdTJEQjAtXHUyREI2XHUyREI4LVx1MkRCRVx1MkRDMC1cdTJEQzZcdTJEQzgtXHUyRENFXXxbXHUyREQwLVx1MkRENlx1MkREOC1cdTJEREVcdTJFMkZcdTMwMDVcdTMwMDZcdTMwMzEtXHUzMDM1XHUzMDNCXHUzMDNDXXxbXHUzMDQxLVx1MzA5Nlx1MzA5RC1cdTMwOUZcdTMwQTEtXHUzMEZBXHUzMEZDLVx1MzBGRlx1MzEwNS1cdTMxMkRdfFtcdTMxMzEtXHUzMThFXHUzMUEwLVx1MzFCQVx1MzFGMC1cdTMxRkZcdTM0MDAtXHU0REI1XHU0RTAwLVx1OUZDQ118W1x1QTAwMC1cdUE0OENcdUE0RDAtXHVBNEZEXHVBNTAwLVx1QTYwQ1x1QTYxMC1cdUE2MUZcdUE2MkFcdUE2MkJdfFtcdUE2NDAtXHVBNjZFXHVBNjdGLVx1QTY5N1x1QTZBMC1cdUE2RTVcdUE3MTctXHVBNzFGXHVBNzIyLVx1QTc4OF18W1x1QTc4Qi1cdUE3OEVcdUE3OTAtXHVBNzkzXHVBN0EwLVx1QTdBQVx1QTdGOC1cdUE4MDFcdUE4MDMtXHVBODA1XXxbXHVBODA3LVx1QTgwQVx1QTgwQy1cdUE4MjJcdUE4NDAtXHVBODczXHVBODgyLVx1QThCM1x1QThGMi1cdUE4RjdcdUE4RkJdfFtcdUE5MEEtXHVBOTI1XHVBOTMwLVx1QTk0Nlx1QTk2MC1cdUE5N0NcdUE5ODQtXHVBOUIyXHVBOUNGXHVBQTAwLVx1QUEyOF18W1x1QUE0MC1cdUFBNDJcdUFBNDQtXHVBQTRCXHVBQTYwLVx1QUE3Nlx1QUE3QVx1QUE4MC1cdUFBQUZcdUFBQjFcdUFBQjVdfFtcdUFBQjZcdUFBQjktXHVBQUJEXHVBQUMwXHVBQUMyXHVBQURCLVx1QUFERFx1QUFFMC1cdUFBRUFcdUFBRjItXHVBQUY0XXxbXHVBQjAxLVx1QUIwNlx1QUIwOS1cdUFCMEVcdUFCMTEtXHVBQjE2XHVBQjIwLVx1QUIyNlx1QUIyOC1cdUFCMkVdfFtcdUFCQzAtXHVBQkUyXHVBQzAwLVx1RDdBM1x1RDdCMC1cdUQ3QzZcdUQ3Q0ItXHVEN0ZCXHVGOTAwLVx1RkE2RF18W1x1RkE3MC1cdUZBRDlcdUZCMDAtXHVGQjA2XHVGQjEzLVx1RkIxN1x1RkIxRFx1RkIxRi1cdUZCMjhcdUZCMkEtXHVGQjM2XXxbXHVGQjM4LVx1RkIzQ1x1RkIzRVx1RkI0MFx1RkI0MVx1RkI0M1x1RkI0NFx1RkI0Ni1cdUZCQjFcdUZCRDMtXHVGRDNEXXxbXHVGRDUwLVx1RkQ4Rlx1RkQ5Mi1cdUZEQzdcdUZERjAtXHVGREZCXHVGRTcwLVx1RkU3NFx1RkU3Ni1cdUZFRkNdfFtcdUZGMjEtXHVGRjNBXHVGRjQxLVx1RkY1QVx1RkY2Ni1cdUZGQkVcdUZGQzItXHVGRkM3XHVGRkNBLVx1RkZDRl18W1x1RkZEMi1cdUZGRDdcdUZGREEtXHVGRkRDXSkvLC9eKD86XHMpLywvXig/OiQpL10sY29uZGl0aW9uczp7c3RyaW5nOntydWxlczpbMjcsMjhdLGluY2x1c2l2ZTohMX0sZ2VuZXJpYzp7cnVsZXM6WzI0LDI1XSxpbmNsdXNpdmU6ITF9LHN0cnVjdDp7cnVsZXM6WzEyLDEzLDE0LDE1LDE2XSxpbmNsdXNpdmU6ITF9LG9wZW5fZGlyZWN0aXZlOntydWxlczpbMV0saW5jbHVzaXZlOiExfSx0eXBlX2RpcmVjdGl2ZTp7cnVsZXM6WzIsM10saW5jbHVzaXZlOiExfSxhcmdfZGlyZWN0aXZlOntydWxlczpbMyw0XSxpbmNsdXNpdmU6ITF9LElOSVRJQUw6e3J1bGVzOlswLDUsNiw3LDgsOSwxMCwxMSwxNywxOCwxOSwyMCwyMSwyMiwyMywyNiwyOSwzMCwzMSwzMiwzMywzNCwzNSwzNiwzNywzOCwzOSw0MCw0MSw0Miw0Myw0NCw0NSw0Niw0Nyw0OCw0OSw1MF0saW5jbHVzaXZlOiEwfX19O2Z1bmN0aW9uIEQoKXt0aGlzLnl5PXt9fXJldHVybiBNLmxleGVyPU8sRC5wcm90b3R5cGU9TSxNLlBhcnNlcj1ELG5ldyBEfSgpO2UucGFyc2VyPWksZS5QYXJzZXI9aS5QYXJzZXIsZS5wYXJzZT1mdW5jdGlvbigpe3JldHVybiBpLnBhcnNlLmFwcGx5KGksYXJndW1lbnRzKX0sZS5tYWluPWZ1bmN0aW9uKHIpe3JbMV18fChjb25zb2xlLmxvZygiVXNhZ2U6ICIrclswXSsiIEZJTEUiKSx0LmV4aXQoMSkpO3ZhciBpPW4oMTkpLnJlYWRGaWxlU3luYyhuKDIwKS5ub3JtYWxpemUoclsxXSksInV0ZjgiKTtyZXR1cm4gZS5wYXJzZXIucGFyc2UoaSl9LG4uY1tuLnNdPT09ciYmZS5tYWluKHQuYXJndi5zbGljZSgxKSl9KS5jYWxsKHRoaXMsbigxNCksbig3KSh0KSl9LGZ1bmN0aW9uKHQsZSl7dmFyIG4scixpPXQuZXhwb3J0cz17fTtmdW5jdGlvbiBhKCl7dGhyb3cgbmV3IEVycm9yKCJzZXRUaW1lb3V0IGhhcyBub3QgYmVlbiBkZWZpbmVkIil9ZnVuY3Rpb24gbygpe3Rocm93IG5ldyBFcnJvcigiY2xlYXJUaW1lb3V0IGhhcyBub3QgYmVlbiBkZWZpbmVkIil9ZnVuY3Rpb24gcyh0KXtpZihuPT09c2V0VGltZW91dClyZXR1cm4gc2V0VGltZW91dCh0LDApO2lmKChuPT09YXx8IW4pJiZzZXRUaW1lb3V0KXJldHVybiBuPXNldFRpbWVvdXQsc2V0VGltZW91dCh0LDApO3RyeXtyZXR1cm4gbih0LDApfWNhdGNoKGUpe3RyeXtyZXR1cm4gbi5jYWxsKG51bGwsdCwwKX1jYXRjaChlKXtyZXR1cm4gbi5jYWxsKHRoaXMsdCwwKX19fSFmdW5jdGlvbigpe3RyeXtuPSJmdW5jdGlvbiI9PXR5cGVvZiBzZXRUaW1lb3V0P3NldFRpbWVvdXQ6YX1jYXRjaCh0KXtuPWF9dHJ5e3I9ImZ1bmN0aW9uIj09dHlwZW9mIGNsZWFyVGltZW91dD9jbGVhclRpbWVvdXQ6b31jYXRjaCh0KXtyPW99fSgpO3ZhciBjLHU9W10sbD0hMSxoPS0xO2Z1bmN0aW9uIGYoKXtsJiZjJiYobD0hMSxjLmxlbmd0aD91PWMuY29uY2F0KHUpOmg9LTEsdS5sZW5ndGgmJmQoKSl9ZnVuY3Rpb24gZCgpe2lmKCFsKXt2YXIgdD1zKGYpO2w9ITA7Zm9yKHZhciBlPXUubGVuZ3RoO2U7KXtmb3IoYz11LHU9W107KytoPGU7KWMmJmNbaF0ucnVuKCk7aD0tMSxlPXUubGVuZ3RofWM9bnVsbCxsPSExLGZ1bmN0aW9uKHQpe2lmKHI9PT1jbGVhclRpbWVvdXQpcmV0dXJuIGNsZWFyVGltZW91dCh0KTtpZigocj09PW98fCFyKSYmY2xlYXJUaW1lb3V0KXJldHVybiByPWNsZWFyVGltZW91dCxjbGVhclRpbWVvdXQodCk7dHJ5e3IodCl9Y2F0Y2goZSl7dHJ5e3JldHVybiByLmNhbGwobnVsbCx0KX1jYXRjaChlKXtyZXR1cm4gci5jYWxsKHRoaXMsdCl9fX0odCl9fWZ1bmN0aW9uIHAodCxlKXt0aGlzLmZ1bj10LHRoaXMuYXJyYXk9ZX1mdW5jdGlvbiBnKCl7fWkubmV4dFRpY2s9ZnVuY3Rpb24odCl7dmFyIGU9bmV3IEFycmF5KGFyZ3VtZW50cy5sZW5ndGgtMSk7aWYoYXJndW1lbnRzLmxlbmd0aD4xKWZvcih2YXIgbj0xO248YXJndW1lbnRzLmxlbmd0aDtuKyspZVtuLTFdPWFyZ3VtZW50c1tuXTt1LnB1c2gobmV3IHAodCxlKSksMSE9PXUubGVuZ3RofHxsfHxzKGQpfSxwLnByb3RvdHlwZS5ydW49ZnVuY3Rpb24oKXt0aGlzLmZ1bi5hcHBseShudWxsLHRoaXMuYXJyYXkpfSxpLnRpdGxlPSJicm93c2VyIixpLmJyb3dzZXI9ITAsaS5lbnY9e30saS5hcmd2PVtdLGkudmVyc2lvbj0iIixpLnZlcnNpb25zPXt9LGkub249ZyxpLmFkZExpc3RlbmVyPWcsaS5vbmNlPWcsaS5vZmY9ZyxpLnJlbW92ZUxpc3RlbmVyPWcsaS5yZW1vdmVBbGxMaXN0ZW5lcnM9ZyxpLmVtaXQ9ZyxpLnByZXBlbmRMaXN0ZW5lcj1nLGkucHJlcGVuZE9uY2VMaXN0ZW5lcj1nLGkubGlzdGVuZXJzPWZ1bmN0aW9uKHQpe3JldHVybltdfSxpLmJpbmRpbmc9ZnVuY3Rpb24odCl7dGhyb3cgbmV3IEVycm9yKCJwcm9jZXNzLmJpbmRpbmcgaXMgbm90IHN1cHBvcnRlZCIpfSxpLmN3ZD1mdW5jdGlvbigpe3JldHVybiIvIn0saS5jaGRpcj1mdW5jdGlvbih0KXt0aHJvdyBuZXcgRXJyb3IoInByb2Nlc3MuY2hkaXIgaXMgbm90IHN1cHBvcnRlZCIpfSxpLnVtYXNrPWZ1bmN0aW9uKCl7cmV0dXJuIDB9fSxmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgcj1uKDc1KSxpPW4oOTkpLGE9bigxNzkpLG89bigxODApLHM9bigxODEpLGM9e2Zvcm1hdDp7a2V5d29yZDphLmRlZmF1bHQsaGV4OmkuZGVmYXVsdCxyZ2I6by5kZWZhdWx0LHJnYmE6by5kZWZhdWx0LGhzbDpzLmRlZmF1bHQsaHNsYTpzLmRlZmF1bHR9LHBhcnNlOmZ1bmN0aW9uKHQpe2lmKCJzdHJpbmciIT10eXBlb2YgdClyZXR1cm4gdDt2YXIgZT1pLmRlZmF1bHQucGFyc2UodCl8fG8uZGVmYXVsdC5wYXJzZSh0KXx8cy5kZWZhdWx0LnBhcnNlKHQpfHxhLmRlZmF1bHQucGFyc2UodCk7aWYoZSlyZXR1cm4gZTt0aHJvdyBuZXcgRXJyb3IoJ1Vuc3VwcG9ydGVkIGNvbG9yIGZvcm1hdDogIicrdCsnIicpfSxzdHJpbmdpZnk6ZnVuY3Rpb24odCl7cmV0dXJuIXQuY2hhbmdlZCYmdC5jb2xvcj90LmNvbG9yOnQudHlwZS5pcyhyLlRZUEUuSFNMKXx8dm9pZCAwPT09dC5kYXRhLnI/cy5kZWZhdWx0LnN0cmluZ2lmeSh0KTp0LmE8MXx8IU51bWJlci5pc0ludGVnZXIodC5yKXx8IU51bWJlci5pc0ludGVnZXIodC5nKXx8IU51bWJlci5pc0ludGVnZXIodC5iKT9vLmRlZmF1bHQuc3RyaW5naWZ5KHQpOmkuZGVmYXVsdC5zdHJpbmdpZnkodCl9fTtlLmRlZmF1bHQ9Y30sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTA5KSxpPSJvYmplY3QiPT10eXBlb2Ygc2VsZiYmc2VsZiYmc2VsZi5PYmplY3Q9PT1PYmplY3QmJnNlbGYsYT1yfHxpfHxGdW5jdGlvbigicmV0dXJuIHRoaXMiKSgpO3QuZXhwb3J0cz1hfSxmdW5jdGlvbih0LGUsbil7dmFyIHI7dHJ5e3I9bigzKX1jYXRjaCh0KXt9cnx8KHI9d2luZG93LmdyYXBobGliKSx0LmV4cG9ydHM9cn0sZnVuY3Rpb24odCxlLG4pe3QuZXhwb3J0cz17Z3JhcGhsaWI6bigxNyksbGF5b3V0Om4oMzEyKSxkZWJ1ZzpuKDM2NiksdXRpbDp7dGltZTpuKDgpLnRpbWUsbm90aW1lOm4oOCkubm90aW1lfSx2ZXJzaW9uOm4oMzY3KX19LGZ1bmN0aW9uKHQsZSl7fSxmdW5jdGlvbih0LGUsbil7KGZ1bmN0aW9uKHQpe2Z1bmN0aW9uIG4odCxlKXtmb3IodmFyIG49MCxyPXQubGVuZ3RoLTE7cj49MDtyLS0pe3ZhciBpPXRbcl07Ii4iPT09aT90LnNwbGljZShyLDEpOiIuLiI9PT1pPyh0LnNwbGljZShyLDEpLG4rKyk6biYmKHQuc3BsaWNlKHIsMSksbi0tKX1pZihlKWZvcig7bi0tO24pdC51bnNoaWZ0KCIuLiIpO3JldHVybiB0fWZ1bmN0aW9uIHIodCxlKXtpZih0LmZpbHRlcilyZXR1cm4gdC5maWx0ZXIoZSk7Zm9yKHZhciBuPVtdLHI9MDtyPHQubGVuZ3RoO3IrKyllKHRbcl0scix0KSYmbi5wdXNoKHRbcl0pO3JldHVybiBufWUucmVzb2x2ZT1mdW5jdGlvbigpe2Zvcih2YXIgZT0iIixpPSExLGE9YXJndW1lbnRzLmxlbmd0aC0xO2E+PS0xJiYhaTthLS0pe3ZhciBvPWE+PTA/YXJndW1lbnRzW2FdOnQuY3dkKCk7aWYoInN0cmluZyIhPXR5cGVvZiBvKXRocm93IG5ldyBUeXBlRXJyb3IoIkFyZ3VtZW50cyB0byBwYXRoLnJlc29sdmUgbXVzdCBiZSBzdHJpbmdzIik7byYmKGU9bysiLyIrZSxpPSIvIj09PW8uY2hhckF0KDApKX1yZXR1cm4oaT8iLyI6IiIpKyhlPW4ocihlLnNwbGl0KCIvIiksKGZ1bmN0aW9uKHQpe3JldHVybiEhdH0pKSwhaSkuam9pbigiLyIpKXx8Ii4ifSxlLm5vcm1hbGl6ZT1mdW5jdGlvbih0KXt2YXIgYT1lLmlzQWJzb2x1dGUodCksbz0iLyI9PT1pKHQsLTEpO3JldHVybih0PW4ocih0LnNwbGl0KCIvIiksKGZ1bmN0aW9uKHQpe3JldHVybiEhdH0pKSwhYSkuam9pbigiLyIpKXx8YXx8KHQ9Ii4iKSx0JiZvJiYodCs9Ii8iKSwoYT8iLyI6IiIpK3R9LGUuaXNBYnNvbHV0ZT1mdW5jdGlvbih0KXtyZXR1cm4iLyI9PT10LmNoYXJBdCgwKX0sZS5qb2luPWZ1bmN0aW9uKCl7dmFyIHQ9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLDApO3JldHVybiBlLm5vcm1hbGl6ZShyKHQsKGZ1bmN0aW9uKHQsZSl7aWYoInN0cmluZyIhPXR5cGVvZiB0KXRocm93IG5ldyBUeXBlRXJyb3IoIkFyZ3VtZW50cyB0byBwYXRoLmpvaW4gbXVzdCBiZSBzdHJpbmdzIik7cmV0dXJuIHR9KSkuam9pbigiLyIpKX0sZS5yZWxhdGl2ZT1mdW5jdGlvbih0LG4pe2Z1bmN0aW9uIHIodCl7Zm9yKHZhciBlPTA7ZTx0Lmxlbmd0aCYmIiI9PT10W2VdO2UrKyk7Zm9yKHZhciBuPXQubGVuZ3RoLTE7bj49MCYmIiI9PT10W25dO24tLSk7cmV0dXJuIGU+bj9bXTp0LnNsaWNlKGUsbi1lKzEpfXQ9ZS5yZXNvbHZlKHQpLnN1YnN0cigxKSxuPWUucmVzb2x2ZShuKS5zdWJzdHIoMSk7Zm9yKHZhciBpPXIodC5zcGxpdCgiLyIpKSxhPXIobi5zcGxpdCgiLyIpKSxvPU1hdGgubWluKGkubGVuZ3RoLGEubGVuZ3RoKSxzPW8sYz0wO2M8bztjKyspaWYoaVtjXSE9PWFbY10pe3M9YzticmVha312YXIgdT1bXTtmb3IoYz1zO2M8aS5sZW5ndGg7YysrKXUucHVzaCgiLi4iKTtyZXR1cm4odT11LmNvbmNhdChhLnNsaWNlKHMpKSkuam9pbigiLyIpfSxlLnNlcD0iLyIsZS5kZWxpbWl0ZXI9IjoiLGUuZGlybmFtZT1mdW5jdGlvbih0KXtpZigic3RyaW5nIiE9dHlwZW9mIHQmJih0Kz0iIiksMD09PXQubGVuZ3RoKXJldHVybiIuIjtmb3IodmFyIGU9dC5jaGFyQ29kZUF0KDApLG49NDc9PT1lLHI9LTEsaT0hMCxhPXQubGVuZ3RoLTE7YT49MTstLWEpaWYoNDc9PT0oZT10LmNoYXJDb2RlQXQoYSkpKXtpZighaSl7cj1hO2JyZWFrfX1lbHNlIGk9ITE7cmV0dXJuLTE9PT1yP24/Ii8iOiIuIjpuJiYxPT09cj8iLyI6dC5zbGljZSgwLHIpfSxlLmJhc2VuYW1lPWZ1bmN0aW9uKHQsZSl7dmFyIG49ZnVuY3Rpb24odCl7InN0cmluZyIhPXR5cGVvZiB0JiYodCs9IiIpO3ZhciBlLG49MCxyPS0xLGk9ITA7Zm9yKGU9dC5sZW5ndGgtMTtlPj0wOy0tZSlpZig0Nz09PXQuY2hhckNvZGVBdChlKSl7aWYoIWkpe249ZSsxO2JyZWFrfX1lbHNlLTE9PT1yJiYoaT0hMSxyPWUrMSk7cmV0dXJuLTE9PT1yPyIiOnQuc2xpY2UobixyKX0odCk7cmV0dXJuIGUmJm4uc3Vic3RyKC0xKmUubGVuZ3RoKT09PWUmJihuPW4uc3Vic3RyKDAsbi5sZW5ndGgtZS5sZW5ndGgpKSxufSxlLmV4dG5hbWU9ZnVuY3Rpb24odCl7InN0cmluZyIhPXR5cGVvZiB0JiYodCs9IiIpO2Zvcih2YXIgZT0tMSxuPTAscj0tMSxpPSEwLGE9MCxvPXQubGVuZ3RoLTE7bz49MDstLW8pe3ZhciBzPXQuY2hhckNvZGVBdChvKTtpZig0NyE9PXMpLTE9PT1yJiYoaT0hMSxyPW8rMSksNDY9PT1zPy0xPT09ZT9lPW86MSE9PWEmJihhPTEpOi0xIT09ZSYmKGE9LTEpO2Vsc2UgaWYoIWkpe249bysxO2JyZWFrfX1yZXR1cm4tMT09PWV8fC0xPT09cnx8MD09PWF8fDE9PT1hJiZlPT09ci0xJiZlPT09bisxPyIiOnQuc2xpY2UoZSxyKX07dmFyIGk9ImIiPT09ImFiIi5zdWJzdHIoLTEpP2Z1bmN0aW9uKHQsZSxuKXtyZXR1cm4gdC5zdWJzdHIoZSxuKX06ZnVuY3Rpb24odCxlLG4pe3JldHVybiBlPDAmJihlPXQubGVuZ3RoK2UpLHQuc3Vic3RyKGUsbil9fSkuY2FsbCh0aGlzLG4oMTQpKX0sZnVuY3Rpb24odCxlKXt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIG51bGwhPXQmJiJvYmplY3QiPT10eXBlb2YgdH19LGZ1bmN0aW9uKHQsZSxuKXsoZnVuY3Rpb24odCxyKXt2YXIgaT1mdW5jdGlvbigpe3ZhciB0PWZ1bmN0aW9uKHQsZSxuLHIpe2ZvcihuPW58fHt9LHI9dC5sZW5ndGg7ci0tO25bdFtyXV09ZSk7cmV0dXJuIG59LGU9WzEsMl0sbj1bMSwzXSxyPVsxLDVdLGk9WzEsN10sYT1bMiw1XSxvPVsxLDE1XSxzPVsxLDE3XSxjPVsxLDE5XSx1PVsxLDIwXSxsPVsxLDIxXSxoPVsxLDIyXSxmPVsxLDI4XSxkPVsxLDIzXSxwPVsxLDI0XSxnPVsxLDI1XSx5PVsxLDI2XSx2PVsxLDI5XSxtPVsxLDMyXSxiPVsxLDQsNSwxNCwxNSwxNywxOSwyMCwyMiwyMywyNCwyNSwyNiwzNiwzOV0seD1bMSw0LDUsMTIsMTMsMTQsMTUsMTcsMTksMjAsMjIsMjMsMjQsMjUsMjYsMzYsMzldLF89WzEsNCw1LDcsMTQsMTUsMTcsMTksMjAsMjIsMjMsMjQsMjUsMjYsMzYsMzldLGs9WzQsNSwxNCwxNSwxNywxOSwyMCwyMiwyMywyNCwyNSwyNiwzNiwzOV0sdz17dHJhY2U6ZnVuY3Rpb24oKXt9LHl5Ont9LHN5bWJvbHNfOntlcnJvcjoyLHN0YXJ0OjMsU1BBQ0U6NCxOTDo1LGRpcmVjdGl2ZTo2LFNEOjcsZG9jdW1lbnQ6OCxsaW5lOjksc3RhdGVtZW50OjEwLGlkU3RhdGVtZW50OjExLERFU0NSOjEyLCItLVx4M2UiOjEzLEhJREVfRU1QVFk6MTQsc2NhbGU6MTUsV0lEVEg6MTYsQ09NUE9TSVRfU1RBVEU6MTcsU1RSVUNUX1NUQVJUOjE4LFNUUlVDVF9TVE9QOjE5LFNUQVRFX0RFU0NSOjIwLEFTOjIxLElEOjIyLEZPUks6MjMsSk9JTjoyNCxDT05DVVJSRU5UOjI1LG5vdGU6MjYsbm90ZVBvc2l0aW9uOjI3LE5PVEVfVEVYVDoyOCxvcGVuRGlyZWN0aXZlOjI5LHR5cGVEaXJlY3RpdmU6MzAsY2xvc2VEaXJlY3RpdmU6MzEsIjoiOjMyLGFyZ0RpcmVjdGl2ZTozMyxlb2w6MzQsIjsiOjM1LEVER0VfU1RBVEU6MzYsbGVmdF9vZjozNyxyaWdodF9vZjozOCxvcGVuX2RpcmVjdGl2ZTozOSx0eXBlX2RpcmVjdGl2ZTo0MCxhcmdfZGlyZWN0aXZlOjQxLGNsb3NlX2RpcmVjdGl2ZTo0MiwkYWNjZXB0OjAsJGVuZDoxfSx0ZXJtaW5hbHNfOnsyOiJlcnJvciIsNDoiU1BBQ0UiLDU6Ik5MIiw3OiJTRCIsMTI6IkRFU0NSIiwxMzoiLS1ceDNlIiwxNDoiSElERV9FTVBUWSIsMTU6InNjYWxlIiwxNjoiV0lEVEgiLDE3OiJDT01QT1NJVF9TVEFURSIsMTg6IlNUUlVDVF9TVEFSVCIsMTk6IlNUUlVDVF9TVE9QIiwyMDoiU1RBVEVfREVTQ1IiLDIxOiJBUyIsMjI6IklEIiwyMzoiRk9SSyIsMjQ6IkpPSU4iLDI1OiJDT05DVVJSRU5UIiwyNjoibm90ZSIsMjg6Ik5PVEVfVEVYVCIsMzI6IjoiLDM1OiI7IiwzNjoiRURHRV9TVEFURSIsMzc6ImxlZnRfb2YiLDM4OiJyaWdodF9vZiIsMzk6Im9wZW5fZGlyZWN0aXZlIiw0MDoidHlwZV9kaXJlY3RpdmUiLDQxOiJhcmdfZGlyZWN0aXZlIiw0MjoiY2xvc2VfZGlyZWN0aXZlIn0scHJvZHVjdGlvbnNfOlswLFszLDJdLFszLDJdLFszLDJdLFszLDJdLFs4LDBdLFs4LDJdLFs5LDJdLFs5LDFdLFs5LDFdLFsxMCwxXSxbMTAsMl0sWzEwLDNdLFsxMCw0XSxbMTAsMV0sWzEwLDJdLFsxMCwxXSxbMTAsNF0sWzEwLDNdLFsxMCw2XSxbMTAsMV0sWzEwLDFdLFsxMCwxXSxbMTAsNF0sWzEwLDRdLFsxMCwxXSxbNiwzXSxbNiw1XSxbMzQsMV0sWzM0LDFdLFsxMSwxXSxbMTEsMV0sWzI3LDFdLFsyNywxXSxbMjksMV0sWzMwLDFdLFszMywxXSxbMzEsMV1dLHBlcmZvcm1BY3Rpb246ZnVuY3Rpb24odCxlLG4scixpLGEsbyl7dmFyIHM9YS5sZW5ndGgtMTtzd2l0Y2goaSl7Y2FzZSA0OnJldHVybiByLnNldFJvb3REb2MoYVtzXSksYVtzXTtjYXNlIDU6dGhpcy4kPVtdO2JyZWFrO2Nhc2UgNjoibmwiIT1hW3NdJiYoYVtzLTFdLnB1c2goYVtzXSksdGhpcy4kPWFbcy0xXSk7YnJlYWs7Y2FzZSA3OmNhc2UgODp0aGlzLiQ9YVtzXTticmVhaztjYXNlIDk6dGhpcy4kPSJubCI7YnJlYWs7Y2FzZSAxMDp0aGlzLiQ9e3N0bXQ6InN0YXRlIixpZDphW3NdLHR5cGU6ImRlZmF1bHQiLGRlc2NyaXB0aW9uOiIifTticmVhaztjYXNlIDExOnRoaXMuJD17c3RtdDoic3RhdGUiLGlkOmFbcy0xXSx0eXBlOiJkZWZhdWx0IixkZXNjcmlwdGlvbjpyLnRyaW1Db2xvbihhW3NdKX07YnJlYWs7Y2FzZSAxMjp0aGlzLiQ9e3N0bXQ6InJlbGF0aW9uIixzdGF0ZTE6e3N0bXQ6InN0YXRlIixpZDphW3MtMl0sdHlwZToiZGVmYXVsdCIsZGVzY3JpcHRpb246IiJ9LHN0YXRlMjp7c3RtdDoic3RhdGUiLGlkOmFbc10sdHlwZToiZGVmYXVsdCIsZGVzY3JpcHRpb246IiJ9fTticmVhaztjYXNlIDEzOnRoaXMuJD17c3RtdDoicmVsYXRpb24iLHN0YXRlMTp7c3RtdDoic3RhdGUiLGlkOmFbcy0zXSx0eXBlOiJkZWZhdWx0IixkZXNjcmlwdGlvbjoiIn0sc3RhdGUyOntzdG10OiJzdGF0ZSIsaWQ6YVtzLTFdLHR5cGU6ImRlZmF1bHQiLGRlc2NyaXB0aW9uOiIifSxkZXNjcmlwdGlvbjphW3NdLnN1YnN0cigxKS50cmltKCl9O2JyZWFrO2Nhc2UgMTc6dGhpcy4kPXtzdG10OiJzdGF0ZSIsaWQ6YVtzLTNdLHR5cGU6ImRlZmF1bHQiLGRlc2NyaXB0aW9uOiIiLGRvYzphW3MtMV19O2JyZWFrO2Nhc2UgMTg6dmFyIGM9YVtzXSx1PWFbcy0yXS50cmltKCk7aWYoYVtzXS5tYXRjaCgiOiIpKXt2YXIgbD1hW3NdLnNwbGl0KCI6Iik7Yz1sWzBdLHU9W3UsbFsxXV19dGhpcy4kPXtzdG10OiJzdGF0ZSIsaWQ6Yyx0eXBlOiJkZWZhdWx0IixkZXNjcmlwdGlvbjp1fTticmVhaztjYXNlIDE5OnRoaXMuJD17c3RtdDoic3RhdGUiLGlkOmFbcy0zXSx0eXBlOiJkZWZhdWx0IixkZXNjcmlwdGlvbjphW3MtNV0sZG9jOmFbcy0xXX07YnJlYWs7Y2FzZSAyMDp0aGlzLiQ9e3N0bXQ6InN0YXRlIixpZDphW3NdLHR5cGU6ImZvcmsifTticmVhaztjYXNlIDIxOnRoaXMuJD17c3RtdDoic3RhdGUiLGlkOmFbc10sdHlwZToiam9pbiJ9O2JyZWFrO2Nhc2UgMjI6dGhpcy4kPXtzdG10OiJzdGF0ZSIsaWQ6ci5nZXREaXZpZGVySWQoKSx0eXBlOiJkaXZpZGVyIn07YnJlYWs7Y2FzZSAyMzp0aGlzLiQ9e3N0bXQ6InN0YXRlIixpZDphW3MtMV0udHJpbSgpLG5vdGU6e3Bvc2l0aW9uOmFbcy0yXS50cmltKCksdGV4dDphW3NdLnRyaW0oKX19O2JyZWFrO2Nhc2UgMzA6Y2FzZSAzMTp0aGlzLiQ9YVtzXTticmVhaztjYXNlIDM0OnIucGFyc2VEaXJlY3RpdmUoIiUleyIsIm9wZW5fZGlyZWN0aXZlIik7YnJlYWs7Y2FzZSAzNTpyLnBhcnNlRGlyZWN0aXZlKGFbc10sInR5cGVfZGlyZWN0aXZlIik7YnJlYWs7Y2FzZSAzNjphW3NdPWFbc10udHJpbSgpLnJlcGxhY2UoLycvZywnIicpLHIucGFyc2VEaXJlY3RpdmUoYVtzXSwiYXJnX2RpcmVjdGl2ZSIpO2JyZWFrO2Nhc2UgMzc6ci5wYXJzZURpcmVjdGl2ZSgifSUlIiwiY2xvc2VfZGlyZWN0aXZlIiwic3RhdGUiKX19LHRhYmxlOlt7MzoxLDQ6ZSw1Om4sNjo0LDc6ciwyOTo2LDM5Oml9LHsxOlszXX0sezM6OCw0OmUsNTpuLDY6NCw3OnIsMjk6NiwzOTppfSx7Mzo5LDQ6ZSw1Om4sNjo0LDc6ciwyOTo2LDM5Oml9LHszOjEwLDQ6ZSw1Om4sNjo0LDc6ciwyOTo2LDM5Oml9LHQoWzEsNCw1LDE0LDE1LDE3LDIwLDIyLDIzLDI0LDI1LDI2LDM2LDM5XSxhLHs4OjExfSksezMwOjEyLDQwOlsxLDEzXX0sezQwOlsyLDM0XX0sezE6WzIsMV19LHsxOlsyLDJdfSx7MTpbMiwzXX0sezE6WzIsNF0sNDpvLDU6cyw2OjI3LDk6MTQsMTA6MTYsMTE6MTgsMTQ6YywxNTp1LDE3OmwsMjA6aCwyMjpmLDIzOmQsMjQ6cCwyNTpnLDI2OnksMjk6NiwzNjp2LDM5Oml9LHszMTozMCwzMjpbMSwzMV0sNDI6bX0sdChbMzIsNDJdLFsyLDM1XSksdChiLFsyLDZdKSx7NjoyNywxMDozMywxMToxOCwxNDpjLDE1OnUsMTc6bCwyMDpoLDIyOmYsMjM6ZCwyNDpwLDI1OmcsMjY6eSwyOTo2LDM2OnYsMzk6aX0sdChiLFsyLDhdKSx0KGIsWzIsOV0pLHQoYixbMiwxMF0sezEyOlsxLDM0XSwxMzpbMSwzNV19KSx0KGIsWzIsMTRdKSx7MTY6WzEsMzZdfSx0KGIsWzIsMTZdLHsxODpbMSwzN119KSx7MjE6WzEsMzhdfSx0KGIsWzIsMjBdKSx0KGIsWzIsMjFdKSx0KGIsWzIsMjJdKSx7Mjc6MzksMjg6WzEsNDBdLDM3OlsxLDQxXSwzODpbMSw0Ml19LHQoYixbMiwyNV0pLHQoeCxbMiwzMF0pLHQoeCxbMiwzMV0pLHQoXyxbMiwyNl0pLHszMzo0Myw0MTpbMSw0NF19LHQoXyxbMiwzN10pLHQoYixbMiw3XSksdChiLFsyLDExXSksezExOjQ1LDIyOmYsMzY6dn0sdChiLFsyLDE1XSksdChrLGEsezg6NDZ9KSx7MjI6WzEsNDddfSx7MjI6WzEsNDhdfSx7MjE6WzEsNDldfSx7MjI6WzIsMzJdfSx7MjI6WzIsMzNdfSx7MzE6NTAsNDI6bX0sezQyOlsyLDM2XX0sdChiLFsyLDEyXSx7MTI6WzEsNTFdfSksezQ6byw1OnMsNjoyNyw5OjE0LDEwOjE2LDExOjE4LDE0OmMsMTU6dSwxNzpsLDE5OlsxLDUyXSwyMDpoLDIyOmYsMjM6ZCwyNDpwLDI1OmcsMjY6eSwyOTo2LDM2OnYsMzk6aX0sdChiLFsyLDE4XSx7MTg6WzEsNTNdfSksezI4OlsxLDU0XX0sezIyOlsxLDU1XX0sdChfLFsyLDI3XSksdChiLFsyLDEzXSksdChiLFsyLDE3XSksdChrLGEsezg6NTZ9KSx0KGIsWzIsMjNdKSx0KGIsWzIsMjRdKSx7NDpvLDU6cyw2OjI3LDk6MTQsMTA6MTYsMTE6MTgsMTQ6YywxNTp1LDE3OmwsMTk6WzEsNTddLDIwOmgsMjI6ZiwyMzpkLDI0OnAsMjU6ZywyNjp5LDI5OjYsMzY6diwzOTppfSx0KGIsWzIsMTldKV0sZGVmYXVsdEFjdGlvbnM6ezc6WzIsMzRdLDg6WzIsMV0sOTpbMiwyXSwxMDpbMiwzXSw0MTpbMiwzMl0sNDI6WzIsMzNdLDQ0OlsyLDM2XX0scGFyc2VFcnJvcjpmdW5jdGlvbih0LGUpe2lmKCFlLnJlY292ZXJhYmxlKXt2YXIgbj1uZXcgRXJyb3IodCk7dGhyb3cgbi5oYXNoPWUsbn10aGlzLnRyYWNlKHQpfSxwYXJzZTpmdW5jdGlvbih0KXt2YXIgZT10aGlzLG49WzBdLHI9W10saT1bbnVsbF0sYT1bXSxvPXRoaXMudGFibGUscz0iIixjPTAsdT0wLGw9MCxoPTIsZj0xLGQ9YS5zbGljZS5jYWxsKGFyZ3VtZW50cywxKSxwPU9iamVjdC5jcmVhdGUodGhpcy5sZXhlciksZz17eXk6e319O2Zvcih2YXIgeSBpbiB0aGlzLnl5KU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0aGlzLnl5LHkpJiYoZy55eVt5XT10aGlzLnl5W3ldKTtwLnNldElucHV0KHQsZy55eSksZy55eS5sZXhlcj1wLGcueXkucGFyc2VyPXRoaXMsdm9pZCAwPT09cC55eWxsb2MmJihwLnl5bGxvYz17fSk7dmFyIHY9cC55eWxsb2M7YS5wdXNoKHYpO3ZhciBtPXAub3B0aW9ucyYmcC5vcHRpb25zLnJhbmdlcztmdW5jdGlvbiBiKCl7dmFyIHQ7cmV0dXJuIm51bWJlciIhPXR5cGVvZih0PXIucG9wKCl8fHAubGV4KCl8fGYpJiYodCBpbnN0YW5jZW9mIEFycmF5JiYodD0ocj10KS5wb3AoKSksdD1lLnN5bWJvbHNfW3RdfHx0KSx0fSJmdW5jdGlvbiI9PXR5cGVvZiBnLnl5LnBhcnNlRXJyb3I/dGhpcy5wYXJzZUVycm9yPWcueXkucGFyc2VFcnJvcjp0aGlzLnBhcnNlRXJyb3I9T2JqZWN0LmdldFByb3RvdHlwZU9mKHRoaXMpLnBhcnNlRXJyb3I7Zm9yKHZhciB4LF8sayx3LEUsVCxDLFMsQSxNPXt9Ozspe2lmKGs9bltuLmxlbmd0aC0xXSx0aGlzLmRlZmF1bHRBY3Rpb25zW2tdP3c9dGhpcy5kZWZhdWx0QWN0aW9uc1trXToobnVsbD09eCYmKHg9YigpKSx3PW9ba10mJm9ba11beF0pLHZvaWQgMD09PXd8fCF3Lmxlbmd0aHx8IXdbMF0pe3ZhciBPPSIiO2ZvcihUIGluIEE9W10sb1trXSl0aGlzLnRlcm1pbmFsc19bVF0mJlQ+aCYmQS5wdXNoKCInIit0aGlzLnRlcm1pbmFsc19bVF0rIiciKTtPPXAuc2hvd1Bvc2l0aW9uPyJQYXJzZSBlcnJvciBvbiBsaW5lICIrKGMrMSkrIjpcbiIrcC5zaG93UG9zaXRpb24oKSsiXG5FeHBlY3RpbmcgIitBLmpvaW4oIiwgIikrIiwgZ290ICciKyh0aGlzLnRlcm1pbmFsc19beF18fHgpKyInIjoiUGFyc2UgZXJyb3Igb24gbGluZSAiKyhjKzEpKyI6IFVuZXhwZWN0ZWQgIisoeD09Zj8iZW5kIG9mIGlucHV0IjoiJyIrKHRoaXMudGVybWluYWxzX1t4XXx8eCkrIiciKSx0aGlzLnBhcnNlRXJyb3IoTyx7dGV4dDpwLm1hdGNoLHRva2VuOnRoaXMudGVybWluYWxzX1t4XXx8eCxsaW5lOnAueXlsaW5lbm8sbG9jOnYsZXhwZWN0ZWQ6QX0pfWlmKHdbMF1pbnN0YW5jZW9mIEFycmF5JiZ3Lmxlbmd0aD4xKXRocm93IG5ldyBFcnJvcigiUGFyc2UgRXJyb3I6IG11bHRpcGxlIGFjdGlvbnMgcG9zc2libGUgYXQgc3RhdGU6ICIraysiLCB0b2tlbjogIit4KTtzd2l0Y2god1swXSl7Y2FzZSAxOm4ucHVzaCh4KSxpLnB1c2gocC55eXRleHQpLGEucHVzaChwLnl5bGxvYyksbi5wdXNoKHdbMV0pLHg9bnVsbCxfPyh4PV8sXz1udWxsKToodT1wLnl5bGVuZyxzPXAueXl0ZXh0LGM9cC55eWxpbmVubyx2PXAueXlsbG9jLGw+MCYmbC0tKTticmVhaztjYXNlIDI6aWYoQz10aGlzLnByb2R1Y3Rpb25zX1t3WzFdXVsxXSxNLiQ9aVtpLmxlbmd0aC1DXSxNLl8kPXtmaXJzdF9saW5lOmFbYS5sZW5ndGgtKEN8fDEpXS5maXJzdF9saW5lLGxhc3RfbGluZTphW2EubGVuZ3RoLTFdLmxhc3RfbGluZSxmaXJzdF9jb2x1bW46YVthLmxlbmd0aC0oQ3x8MSldLmZpcnN0X2NvbHVtbixsYXN0X2NvbHVtbjphW2EubGVuZ3RoLTFdLmxhc3RfY29sdW1ufSxtJiYoTS5fJC5yYW5nZT1bYVthLmxlbmd0aC0oQ3x8MSldLnJhbmdlWzBdLGFbYS5sZW5ndGgtMV0ucmFuZ2VbMV1dKSx2b2lkIDAhPT0oRT10aGlzLnBlcmZvcm1BY3Rpb24uYXBwbHkoTSxbcyx1LGMsZy55eSx3WzFdLGksYV0uY29uY2F0KGQpKSkpcmV0dXJuIEU7QyYmKG49bi5zbGljZSgwLC0xKkMqMiksaT1pLnNsaWNlKDAsLTEqQyksYT1hLnNsaWNlKDAsLTEqQykpLG4ucHVzaCh0aGlzLnByb2R1Y3Rpb25zX1t3WzFdXVswXSksaS5wdXNoKE0uJCksYS5wdXNoKE0uXyQpLFM9b1tuW24ubGVuZ3RoLTJdXVtuW24ubGVuZ3RoLTFdXSxuLnB1c2goUyk7YnJlYWs7Y2FzZSAzOnJldHVybiEwfX1yZXR1cm4hMH19LEU9e0VPRjoxLHBhcnNlRXJyb3I6ZnVuY3Rpb24odCxlKXtpZighdGhpcy55eS5wYXJzZXIpdGhyb3cgbmV3IEVycm9yKHQpO3RoaXMueXkucGFyc2VyLnBhcnNlRXJyb3IodCxlKX0sc2V0SW5wdXQ6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy55eT1lfHx0aGlzLnl5fHx7fSx0aGlzLl9pbnB1dD10LHRoaXMuX21vcmU9dGhpcy5fYmFja3RyYWNrPXRoaXMuZG9uZT0hMSx0aGlzLnl5bGluZW5vPXRoaXMueXlsZW5nPTAsdGhpcy55eXRleHQ9dGhpcy5tYXRjaGVkPXRoaXMubWF0Y2g9IiIsdGhpcy5jb25kaXRpb25TdGFjaz1bIklOSVRJQUwiXSx0aGlzLnl5bGxvYz17Zmlyc3RfbGluZToxLGZpcnN0X2NvbHVtbjowLGxhc3RfbGluZToxLGxhc3RfY29sdW1uOjB9LHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1bMCwwXSksdGhpcy5vZmZzZXQ9MCx0aGlzfSxpbnB1dDpmdW5jdGlvbigpe3ZhciB0PXRoaXMuX2lucHV0WzBdO3JldHVybiB0aGlzLnl5dGV4dCs9dCx0aGlzLnl5bGVuZysrLHRoaXMub2Zmc2V0KyssdGhpcy5tYXRjaCs9dCx0aGlzLm1hdGNoZWQrPXQsdC5tYXRjaCgvKD86XHJcbj98XG4pLiovZyk/KHRoaXMueXlsaW5lbm8rKyx0aGlzLnl5bGxvYy5sYXN0X2xpbmUrKyk6dGhpcy55eWxsb2MubGFzdF9jb2x1bW4rKyx0aGlzLm9wdGlvbnMucmFuZ2VzJiZ0aGlzLnl5bGxvYy5yYW5nZVsxXSsrLHRoaXMuX2lucHV0PXRoaXMuX2lucHV0LnNsaWNlKDEpLHR9LHVucHV0OmZ1bmN0aW9uKHQpe3ZhciBlPXQubGVuZ3RoLG49dC5zcGxpdCgvKD86XHJcbj98XG4pL2cpO3RoaXMuX2lucHV0PXQrdGhpcy5faW5wdXQsdGhpcy55eXRleHQ9dGhpcy55eXRleHQuc3Vic3RyKDAsdGhpcy55eXRleHQubGVuZ3RoLWUpLHRoaXMub2Zmc2V0LT1lO3ZhciByPXRoaXMubWF0Y2guc3BsaXQoLyg/OlxyXG4/fFxuKS9nKTt0aGlzLm1hdGNoPXRoaXMubWF0Y2guc3Vic3RyKDAsdGhpcy5tYXRjaC5sZW5ndGgtMSksdGhpcy5tYXRjaGVkPXRoaXMubWF0Y2hlZC5zdWJzdHIoMCx0aGlzLm1hdGNoZWQubGVuZ3RoLTEpLG4ubGVuZ3RoLTEmJih0aGlzLnl5bGluZW5vLT1uLmxlbmd0aC0xKTt2YXIgaT10aGlzLnl5bGxvYy5yYW5nZTtyZXR1cm4gdGhpcy55eWxsb2M9e2ZpcnN0X2xpbmU6dGhpcy55eWxsb2MuZmlyc3RfbGluZSxsYXN0X2xpbmU6dGhpcy55eWxpbmVubysxLGZpcnN0X2NvbHVtbjp0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4sbGFzdF9jb2x1bW46bj8obi5sZW5ndGg9PT1yLmxlbmd0aD90aGlzLnl5bGxvYy5maXJzdF9jb2x1bW46MCkrcltyLmxlbmd0aC1uLmxlbmd0aF0ubGVuZ3RoLW5bMF0ubGVuZ3RoOnRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbi1lfSx0aGlzLm9wdGlvbnMucmFuZ2VzJiYodGhpcy55eWxsb2MucmFuZ2U9W2lbMF0saVswXSt0aGlzLnl5bGVuZy1lXSksdGhpcy55eWxlbmc9dGhpcy55eXRleHQubGVuZ3RoLHRoaXN9LG1vcmU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbW9yZT0hMCx0aGlzfSxyZWplY3Q6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlcj8odGhpcy5fYmFja3RyYWNrPSEwLHRoaXMpOnRoaXMucGFyc2VFcnJvcigiTGV4aWNhbCBlcnJvciBvbiBsaW5lICIrKHRoaXMueXlsaW5lbm8rMSkrIi4gWW91IGNhbiBvbmx5IGludm9rZSByZWplY3QoKSBpbiB0aGUgbGV4ZXIgd2hlbiB0aGUgbGV4ZXIgaXMgb2YgdGhlIGJhY2t0cmFja2luZyBwZXJzdWFzaW9uIChvcHRpb25zLmJhY2t0cmFja19sZXhlciA9IHRydWUpLlxuIit0aGlzLnNob3dQb3NpdGlvbigpLHt0ZXh0OiIiLHRva2VuOm51bGwsbGluZTp0aGlzLnl5bGluZW5vfSl9LGxlc3M6ZnVuY3Rpb24odCl7dGhpcy51bnB1dCh0aGlzLm1hdGNoLnNsaWNlKHQpKX0scGFzdElucHV0OmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5tYXRjaGVkLnN1YnN0cigwLHRoaXMubWF0Y2hlZC5sZW5ndGgtdGhpcy5tYXRjaC5sZW5ndGgpO3JldHVybih0Lmxlbmd0aD4yMD8iLi4uIjoiIikrdC5zdWJzdHIoLTIwKS5yZXBsYWNlKC9cbi9nLCIiKX0sdXBjb21pbmdJbnB1dDpmdW5jdGlvbigpe3ZhciB0PXRoaXMubWF0Y2g7cmV0dXJuIHQubGVuZ3RoPDIwJiYodCs9dGhpcy5faW5wdXQuc3Vic3RyKDAsMjAtdC5sZW5ndGgpKSwodC5zdWJzdHIoMCwyMCkrKHQubGVuZ3RoPjIwPyIuLi4iOiIiKSkucmVwbGFjZSgvXG4vZywiIil9LHNob3dQb3NpdGlvbjpmdW5jdGlvbigpe3ZhciB0PXRoaXMucGFzdElucHV0KCksZT1uZXcgQXJyYXkodC5sZW5ndGgrMSkuam9pbigiLSIpO3JldHVybiB0K3RoaXMudXBjb21pbmdJbnB1dCgpKyJcbiIrZSsiXiJ9LHRlc3RfbWF0Y2g6ZnVuY3Rpb24odCxlKXt2YXIgbixyLGk7aWYodGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlciYmKGk9e3l5bGluZW5vOnRoaXMueXlsaW5lbm8seXlsbG9jOntmaXJzdF9saW5lOnRoaXMueXlsbG9jLmZpcnN0X2xpbmUsbGFzdF9saW5lOnRoaXMubGFzdF9saW5lLGZpcnN0X2NvbHVtbjp0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4sbGFzdF9jb2x1bW46dGhpcy55eWxsb2MubGFzdF9jb2x1bW59LHl5dGV4dDp0aGlzLnl5dGV4dCxtYXRjaDp0aGlzLm1hdGNoLG1hdGNoZXM6dGhpcy5tYXRjaGVzLG1hdGNoZWQ6dGhpcy5tYXRjaGVkLHl5bGVuZzp0aGlzLnl5bGVuZyxvZmZzZXQ6dGhpcy5vZmZzZXQsX21vcmU6dGhpcy5fbW9yZSxfaW5wdXQ6dGhpcy5faW5wdXQseXk6dGhpcy55eSxjb25kaXRpb25TdGFjazp0aGlzLmNvbmRpdGlvblN0YWNrLnNsaWNlKDApLGRvbmU6dGhpcy5kb25lfSx0aGlzLm9wdGlvbnMucmFuZ2VzJiYoaS55eWxsb2MucmFuZ2U9dGhpcy55eWxsb2MucmFuZ2Uuc2xpY2UoMCkpKSwocj10WzBdLm1hdGNoKC8oPzpcclxuP3xcbikuKi9nKSkmJih0aGlzLnl5bGluZW5vKz1yLmxlbmd0aCksdGhpcy55eWxsb2M9e2ZpcnN0X2xpbmU6dGhpcy55eWxsb2MubGFzdF9saW5lLGxhc3RfbGluZTp0aGlzLnl5bGluZW5vKzEsZmlyc3RfY29sdW1uOnRoaXMueXlsbG9jLmxhc3RfY29sdW1uLGxhc3RfY29sdW1uOnI/cltyLmxlbmd0aC0xXS5sZW5ndGgtcltyLmxlbmd0aC0xXS5tYXRjaCgvXHI/XG4/LylbMF0ubGVuZ3RoOnRoaXMueXlsbG9jLmxhc3RfY29sdW1uK3RbMF0ubGVuZ3RofSx0aGlzLnl5dGV4dCs9dFswXSx0aGlzLm1hdGNoKz10WzBdLHRoaXMubWF0Y2hlcz10LHRoaXMueXlsZW5nPXRoaXMueXl0ZXh0Lmxlbmd0aCx0aGlzLm9wdGlvbnMucmFuZ2VzJiYodGhpcy55eWxsb2MucmFuZ2U9W3RoaXMub2Zmc2V0LHRoaXMub2Zmc2V0Kz10aGlzLnl5bGVuZ10pLHRoaXMuX21vcmU9ITEsdGhpcy5fYmFja3RyYWNrPSExLHRoaXMuX2lucHV0PXRoaXMuX2lucHV0LnNsaWNlKHRbMF0ubGVuZ3RoKSx0aGlzLm1hdGNoZWQrPXRbMF0sbj10aGlzLnBlcmZvcm1BY3Rpb24uY2FsbCh0aGlzLHRoaXMueXksdGhpcyxlLHRoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMV0pLHRoaXMuZG9uZSYmdGhpcy5faW5wdXQmJih0aGlzLmRvbmU9ITEpLG4pcmV0dXJuIG47aWYodGhpcy5fYmFja3RyYWNrKXtmb3IodmFyIGEgaW4gaSl0aGlzW2FdPWlbYV07cmV0dXJuITF9cmV0dXJuITF9LG5leHQ6ZnVuY3Rpb24oKXtpZih0aGlzLmRvbmUpcmV0dXJuIHRoaXMuRU9GO3ZhciB0LGUsbixyO3RoaXMuX2lucHV0fHwodGhpcy5kb25lPSEwKSx0aGlzLl9tb3JlfHwodGhpcy55eXRleHQ9IiIsdGhpcy5tYXRjaD0iIik7Zm9yKHZhciBpPXRoaXMuX2N1cnJlbnRSdWxlcygpLGE9MDthPGkubGVuZ3RoO2ErKylpZigobj10aGlzLl9pbnB1dC5tYXRjaCh0aGlzLnJ1bGVzW2lbYV1dKSkmJighZXx8blswXS5sZW5ndGg+ZVswXS5sZW5ndGgpKXtpZihlPW4scj1hLHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIpe2lmKCExIT09KHQ9dGhpcy50ZXN0X21hdGNoKG4saVthXSkpKXJldHVybiB0O2lmKHRoaXMuX2JhY2t0cmFjayl7ZT0hMTtjb250aW51ZX1yZXR1cm4hMX1pZighdGhpcy5vcHRpb25zLmZsZXgpYnJlYWt9cmV0dXJuIGU/ITEhPT0odD10aGlzLnRlc3RfbWF0Y2goZSxpW3JdKSkmJnQ6IiI9PT10aGlzLl9pbnB1dD90aGlzLkVPRjp0aGlzLnBhcnNlRXJyb3IoIkxleGljYWwgZXJyb3Igb24gbGluZSAiKyh0aGlzLnl5bGluZW5vKzEpKyIuIFVucmVjb2duaXplZCB0ZXh0LlxuIit0aGlzLnNob3dQb3NpdGlvbigpLHt0ZXh0OiIiLHRva2VuOm51bGwsbGluZTp0aGlzLnl5bGluZW5vfSl9LGxleDpmdW5jdGlvbigpe3ZhciB0PXRoaXMubmV4dCgpO3JldHVybiB0fHx0aGlzLmxleCgpfSxiZWdpbjpmdW5jdGlvbih0KXt0aGlzLmNvbmRpdGlvblN0YWNrLnB1c2godCl9LHBvcFN0YXRlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTE+MD90aGlzLmNvbmRpdGlvblN0YWNrLnBvcCgpOnRoaXMuY29uZGl0aW9uU3RhY2tbMF19LF9jdXJyZW50UnVsZXM6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgmJnRoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMV0/dGhpcy5jb25kaXRpb25zW3RoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMV1dLnJ1bGVzOnRoaXMuY29uZGl0aW9ucy5JTklUSUFMLnJ1bGVzfSx0b3BTdGF0ZTpmdW5jdGlvbih0KXtyZXR1cm4odD10aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xLU1hdGguYWJzKHR8fDApKT49MD90aGlzLmNvbmRpdGlvblN0YWNrW3RdOiJJTklUSUFMIn0scHVzaFN0YXRlOmZ1bmN0aW9uKHQpe3RoaXMuYmVnaW4odCl9LHN0YXRlU3RhY2tTaXplOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RofSxvcHRpb25zOnsiY2FzZS1pbnNlbnNpdGl2ZSI6ITB9LHBlcmZvcm1BY3Rpb246ZnVuY3Rpb24odCxlLG4scil7c3dpdGNoKG4pe2Nhc2UgMDpyZXR1cm4gdGhpcy5iZWdpbigib3Blbl9kaXJlY3RpdmUiKSwzOTtjYXNlIDE6cmV0dXJuIHRoaXMuYmVnaW4oInR5cGVfZGlyZWN0aXZlIiksNDA7Y2FzZSAyOnJldHVybiB0aGlzLnBvcFN0YXRlKCksdGhpcy5iZWdpbigiYXJnX2RpcmVjdGl2ZSIpLDMyO2Nhc2UgMzpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLHRoaXMucG9wU3RhdGUoKSw0MjtjYXNlIDQ6cmV0dXJuIDQxO2Nhc2UgNTpicmVhaztjYXNlIDY6Y29uc29sZS5sb2coIkNyYXAgYWZ0ZXIgY2xvc2UiKTticmVhaztjYXNlIDc6cmV0dXJuIDU7Y2FzZSA4OmNhc2UgOTpjYXNlIDEwOmNhc2UgMTE6YnJlYWs7Y2FzZSAxMjpyZXR1cm4gdGhpcy5wdXNoU3RhdGUoIlNDQUxFIiksMTU7Y2FzZSAxMzpyZXR1cm4gMTY7Y2FzZSAxNDp0aGlzLnBvcFN0YXRlKCk7YnJlYWs7Y2FzZSAxNTp0aGlzLnB1c2hTdGF0ZSgiU1RBVEUiKTticmVhaztjYXNlIDE2OnJldHVybiB0aGlzLnBvcFN0YXRlKCksZS55eXRleHQ9ZS55eXRleHQuc2xpY2UoMCwtOCkudHJpbSgpLDIzO2Nhc2UgMTc6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSxlLnl5dGV4dD1lLnl5dGV4dC5zbGljZSgwLC04KS50cmltKCksMjQ7Y2FzZSAxODpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLGUueXl0ZXh0PWUueXl0ZXh0LnNsaWNlKDAsLTgpLnRyaW0oKSwyMztjYXNlIDE5OnJldHVybiB0aGlzLnBvcFN0YXRlKCksZS55eXRleHQ9ZS55eXRleHQuc2xpY2UoMCwtOCkudHJpbSgpLDI0O2Nhc2UgMjA6dGhpcy5iZWdpbigiU1RBVEVfU1RSSU5HIik7YnJlYWs7Y2FzZSAyMTpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLHRoaXMucHVzaFN0YXRlKCJTVEFURV9JRCIpLCJBUyI7Y2FzZSAyMjpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLCJJRCI7Y2FzZSAyMzp0aGlzLnBvcFN0YXRlKCk7YnJlYWs7Y2FzZSAyNDpyZXR1cm4iU1RBVEVfREVTQ1IiO2Nhc2UgMjU6cmV0dXJuIDE3O2Nhc2UgMjY6dGhpcy5wb3BTdGF0ZSgpO2JyZWFrO2Nhc2UgMjc6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSx0aGlzLnB1c2hTdGF0ZSgic3RydWN0IiksMTg7Y2FzZSAyODpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLDE5O2Nhc2UgMjk6YnJlYWs7Y2FzZSAzMDpyZXR1cm4gdGhpcy5iZWdpbigiTk9URSIpLDI2O2Nhc2UgMzE6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSx0aGlzLnB1c2hTdGF0ZSgiTk9URV9JRCIpLDM3O2Nhc2UgMzI6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSx0aGlzLnB1c2hTdGF0ZSgiTk9URV9JRCIpLDM4O2Nhc2UgMzM6dGhpcy5wb3BTdGF0ZSgpLHRoaXMucHVzaFN0YXRlKCJGTE9BVElOR19OT1RFIik7YnJlYWs7Y2FzZSAzNDpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLHRoaXMucHVzaFN0YXRlKCJGTE9BVElOR19OT1RFX0lEIiksIkFTIjtjYXNlIDM1OmJyZWFrO2Nhc2UgMzY6cmV0dXJuIk5PVEVfVEVYVCI7Y2FzZSAzNzpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLCJJRCI7Y2FzZSAzODpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLHRoaXMucHVzaFN0YXRlKCJOT1RFX1RFWFQiKSwyMjtjYXNlIDM5OnJldHVybiB0aGlzLnBvcFN0YXRlKCksZS55eXRleHQ9ZS55eXRleHQuc3Vic3RyKDIpLnRyaW0oKSwyODtjYXNlIDQwOnJldHVybiB0aGlzLnBvcFN0YXRlKCksZS55eXRleHQ9ZS55eXRleHQuc2xpY2UoMCwtOCkudHJpbSgpLDI4O2Nhc2UgNDE6Y2FzZSA0MjpyZXR1cm4gNztjYXNlIDQzOnJldHVybiAxNDtjYXNlIDQ0OnJldHVybiAzNjtjYXNlIDQ1OnJldHVybiAyMjtjYXNlIDQ2OnJldHVybiBlLnl5dGV4dD1lLnl5dGV4dC50cmltKCksMTI7Y2FzZSA0NzpyZXR1cm4gMTM7Y2FzZSA0ODpyZXR1cm4gMjU7Y2FzZSA0OTpyZXR1cm4gNTtjYXNlIDUwOnJldHVybiJJTlZBTElEIn19LHJ1bGVzOlsvXig/OiUlXHspL2ksL14oPzooKD86KD8hXH0lJSlbXjouXSkqKSkvaSwvXig/OjopL2ksL14oPzpcfSUlKS9pLC9eKD86KCg/Oig/IVx9JSUpLnxcbikqKSkvaSwvXig/OiUlKD8hXHspW15cbl0qKS9pLC9eKD86W15cfV0lJVteXG5dKikvaSwvXig/Oltcbl0rKS9pLC9eKD86W1xzXSspL2ksL14oPzooKD8hXG4pXHMpKykvaSwvXig/OiNbXlxuXSopL2ksL14oPzolW15cbl0qKS9pLC9eKD86c2NhbGVccyspL2ksL14oPzpcZCspL2ksL14oPzpccyt3aWR0aFxiKS9pLC9eKD86c3RhdGVccyspL2ksL14oPzouKjw8Zm9yaz4+KS9pLC9eKD86Lio8PGpvaW4+PikvaSwvXig/Oi4qXFtcW2ZvcmtcXVxdKS9pLC9eKD86LipcW1xbam9pblxdXF0pL2ksL14oPzpbIl0pL2ksL14oPzpccyphc1xzKykvaSwvXig/OlteXG5ce10qKS9pLC9eKD86WyJdKS9pLC9eKD86W14iXSopL2ksL14oPzpbXlxuXHNce10rKS9pLC9eKD86XG4pL2ksL14oPzpceykvaSwvXig/Olx9KS9pLC9eKD86W1xuXSkvaSwvXig/Om5vdGVccyspL2ksL14oPzpsZWZ0IG9mXGIpL2ksL14oPzpyaWdodCBvZlxiKS9pLC9eKD86IikvaSwvXig/OlxzKmFzXHMqKS9pLC9eKD86WyJdKS9pLC9eKD86W14iXSopL2ksL14oPzpbXlxuXSopL2ksL14oPzpccypbXjpcblxzXC1dKykvaSwvXig/OlxzKjpbXjpcbjtdKykvaSwvXig/OlxzKlteOjtdK2VuZCBub3RlXGIpL2ksL14oPzpzdGF0ZURpYWdyYW1ccyspL2ksL14oPzpzdGF0ZURpYWdyYW0tdjJccyspL2ksL14oPzpoaWRlIGVtcHR5IGRlc2NyaXB0aW9uXGIpL2ksL14oPzpcW1wqXF0pL2ksL14oPzpbXjpcblxzXC1ce10rKS9pLC9eKD86XHMqOlteOlxuO10rKS9pLC9eKD86LS0+KS9pLC9eKD86LS0pL2ksL14oPzokKS9pLC9eKD86LikvaV0sY29uZGl0aW9uczp7TElORTp7cnVsZXM6WzksMTBdLGluY2x1c2l2ZTohMX0sY2xvc2VfZGlyZWN0aXZlOntydWxlczpbOSwxMF0saW5jbHVzaXZlOiExfSxhcmdfZGlyZWN0aXZlOntydWxlczpbMyw0LDksMTBdLGluY2x1c2l2ZTohMX0sdHlwZV9kaXJlY3RpdmU6e3J1bGVzOlsyLDMsOSwxMF0saW5jbHVzaXZlOiExfSxvcGVuX2RpcmVjdGl2ZTp7cnVsZXM6WzEsOSwxMF0saW5jbHVzaXZlOiExfSxzdHJ1Y3Q6e3J1bGVzOls5LDEwLDE1LDI4LDI5LDMwLDQ0LDQ1LDQ2LDQ3LDQ4XSxpbmNsdXNpdmU6ITF9LEZMT0FUSU5HX05PVEVfSUQ6e3J1bGVzOlszN10saW5jbHVzaXZlOiExfSxGTE9BVElOR19OT1RFOntydWxlczpbMzQsMzUsMzZdLGluY2x1c2l2ZTohMX0sTk9URV9URVhUOntydWxlczpbMzksNDBdLGluY2x1c2l2ZTohMX0sTk9URV9JRDp7cnVsZXM6WzM4XSxpbmNsdXNpdmU6ITF9LE5PVEU6e3J1bGVzOlszMSwzMiwzM10saW5jbHVzaXZlOiExfSxTQ0FMRTp7cnVsZXM6WzEzLDE0XSxpbmNsdXNpdmU6ITF9LEFMSUFTOntydWxlczpbXSxpbmNsdXNpdmU6ITF9LFNUQVRFX0lEOntydWxlczpbMjJdLGluY2x1c2l2ZTohMX0sU1RBVEVfU1RSSU5HOntydWxlczpbMjMsMjRdLGluY2x1c2l2ZTohMX0sRk9SS19TVEFURTp7cnVsZXM6W10saW5jbHVzaXZlOiExfSxTVEFURTp7cnVsZXM6WzksMTAsMTYsMTcsMTgsMTksMjAsMjEsMjUsMjYsMjddLGluY2x1c2l2ZTohMX0sSUQ6e3J1bGVzOls5LDEwXSxpbmNsdXNpdmU6ITF9LElOSVRJQUw6e3J1bGVzOlswLDUsNiw3LDgsMTAsMTEsMTIsMTUsMjcsMzAsNDEsNDIsNDMsNDQsNDUsNDYsNDcsNDksNTBdLGluY2x1c2l2ZTohMH19fTtmdW5jdGlvbiBUKCl7dGhpcy55eT17fX1yZXR1cm4gdy5sZXhlcj1FLFQucHJvdG90eXBlPXcsdy5QYXJzZXI9VCxuZXcgVH0oKTtlLnBhcnNlcj1pLGUuUGFyc2VyPWkuUGFyc2VyLGUucGFyc2U9ZnVuY3Rpb24oKXtyZXR1cm4gaS5wYXJzZS5hcHBseShpLGFyZ3VtZW50cyl9LGUubWFpbj1mdW5jdGlvbihyKXtyWzFdfHwoY29uc29sZS5sb2coIlVzYWdlOiAiK3JbMF0rIiBGSUxFIiksdC5leGl0KDEpKTt2YXIgaT1uKDE5KS5yZWFkRmlsZVN5bmMobigyMCkubm9ybWFsaXplKHJbMV0pLCJ1dGY4Iik7cmV0dXJuIGUucGFyc2VyLnBhcnNlKGkpfSxuLmNbbi5zXT09PXImJmUubWFpbih0LmFyZ3Yuc2xpY2UoMSkpfSkuY2FsbCh0aGlzLG4oMTQpLG4oNykodCkpfSxmdW5jdGlvbih0LGUsbil7KGZ1bmN0aW9uKHQpe3QuZXhwb3J0cz1mdW5jdGlvbigpeyJ1c2Ugc3RyaWN0Ijt2YXIgZSxyO2Z1bmN0aW9uIGkoKXtyZXR1cm4gZS5hcHBseShudWxsLGFyZ3VtZW50cyl9ZnVuY3Rpb24gYSh0KXtyZXR1cm4gdCBpbnN0YW5jZW9mIEFycmF5fHwiW29iamVjdCBBcnJheV0iPT09T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHQpfWZ1bmN0aW9uIG8odCl7cmV0dXJuIG51bGwhPXQmJiJbb2JqZWN0IE9iamVjdF0iPT09T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHQpfWZ1bmN0aW9uIHModCl7cmV0dXJuIHZvaWQgMD09PXR9ZnVuY3Rpb24gYyh0KXtyZXR1cm4ibnVtYmVyIj09dHlwZW9mIHR8fCJbb2JqZWN0IE51bWJlcl0iPT09T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHQpfWZ1bmN0aW9uIHUodCl7cmV0dXJuIHQgaW5zdGFuY2VvZiBEYXRlfHwiW29iamVjdCBEYXRlXSI9PT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodCl9ZnVuY3Rpb24gbCh0LGUpe3ZhciBuLHI9W107Zm9yKG49MDtuPHQubGVuZ3RoOysrbilyLnB1c2goZSh0W25dLG4pKTtyZXR1cm4gcn1mdW5jdGlvbiBoKHQsZSl7cmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0LGUpfWZ1bmN0aW9uIGYodCxlKXtmb3IodmFyIG4gaW4gZSloKGUsbikmJih0W25dPWVbbl0pO3JldHVybiBoKGUsInRvU3RyaW5nIikmJih0LnRvU3RyaW5nPWUudG9TdHJpbmcpLGgoZSwidmFsdWVPZiIpJiYodC52YWx1ZU9mPWUudmFsdWVPZiksdH1mdW5jdGlvbiBkKHQsZSxuLHIpe3JldHVybiBiZSh0LGUsbixyLCEwKS51dGMoKX1mdW5jdGlvbiBwKHQpe3JldHVybiBudWxsPT10Ll9wZiYmKHQuX3BmPXtlbXB0eTohMSx1bnVzZWRUb2tlbnM6W10sdW51c2VkSW5wdXQ6W10sb3ZlcmZsb3c6LTIsY2hhcnNMZWZ0T3ZlcjowLG51bGxJbnB1dDohMSxpbnZhbGlkTW9udGg6bnVsbCxpbnZhbGlkRm9ybWF0OiExLHVzZXJJbnZhbGlkYXRlZDohMSxpc286ITEscGFyc2VkRGF0ZVBhcnRzOltdLG1lcmlkaWVtOm51bGwscmZjMjgyMjohMSx3ZWVrZGF5TWlzbWF0Y2g6ITF9KSx0Ll9wZn1mdW5jdGlvbiBnKHQpe2lmKG51bGw9PXQuX2lzVmFsaWQpe3ZhciBlPXAodCksbj1yLmNhbGwoZS5wYXJzZWREYXRlUGFydHMsKGZ1bmN0aW9uKHQpe3JldHVybiBudWxsIT10fSkpLGk9IWlzTmFOKHQuX2QuZ2V0VGltZSgpKSYmZS5vdmVyZmxvdzwwJiYhZS5lbXB0eSYmIWUuaW52YWxpZE1vbnRoJiYhZS5pbnZhbGlkV2Vla2RheSYmIWUud2Vla2RheU1pc21hdGNoJiYhZS5udWxsSW5wdXQmJiFlLmludmFsaWRGb3JtYXQmJiFlLnVzZXJJbnZhbGlkYXRlZCYmKCFlLm1lcmlkaWVtfHxlLm1lcmlkaWVtJiZuKTtpZih0Ll9zdHJpY3QmJihpPWkmJjA9PT1lLmNoYXJzTGVmdE92ZXImJjA9PT1lLnVudXNlZFRva2Vucy5sZW5ndGgmJnZvaWQgMD09PWUuYmlnSG91ciksbnVsbCE9T2JqZWN0LmlzRnJvemVuJiZPYmplY3QuaXNGcm96ZW4odCkpcmV0dXJuIGk7dC5faXNWYWxpZD1pfXJldHVybiB0Ll9pc1ZhbGlkfWZ1bmN0aW9uIHkodCl7dmFyIGU9ZChOYU4pO3JldHVybiBudWxsIT10P2YocChlKSx0KTpwKGUpLnVzZXJJbnZhbGlkYXRlZD0hMCxlfXI9QXJyYXkucHJvdG90eXBlLnNvbWU/QXJyYXkucHJvdG90eXBlLnNvbWU6ZnVuY3Rpb24odCl7Zm9yKHZhciBlPU9iamVjdCh0aGlzKSxuPWUubGVuZ3RoPj4+MCxyPTA7cjxuO3IrKylpZihyIGluIGUmJnQuY2FsbCh0aGlzLGVbcl0scixlKSlyZXR1cm4hMDtyZXR1cm4hMX07dmFyIHY9aS5tb21lbnRQcm9wZXJ0aWVzPVtdO2Z1bmN0aW9uIG0odCxlKXt2YXIgbixyLGk7aWYocyhlLl9pc0FNb21lbnRPYmplY3QpfHwodC5faXNBTW9tZW50T2JqZWN0PWUuX2lzQU1vbWVudE9iamVjdCkscyhlLl9pKXx8KHQuX2k9ZS5faSkscyhlLl9mKXx8KHQuX2Y9ZS5fZikscyhlLl9sKXx8KHQuX2w9ZS5fbCkscyhlLl9zdHJpY3QpfHwodC5fc3RyaWN0PWUuX3N0cmljdCkscyhlLl90em0pfHwodC5fdHptPWUuX3R6bSkscyhlLl9pc1VUQyl8fCh0Ll9pc1VUQz1lLl9pc1VUQykscyhlLl9vZmZzZXQpfHwodC5fb2Zmc2V0PWUuX29mZnNldCkscyhlLl9wZil8fCh0Ll9wZj1wKGUpKSxzKGUuX2xvY2FsZSl8fCh0Ll9sb2NhbGU9ZS5fbG9jYWxlKSwwPHYubGVuZ3RoKWZvcihuPTA7bjx2Lmxlbmd0aDtuKyspcyhpPWVbcj12W25dXSl8fCh0W3JdPWkpO3JldHVybiB0fXZhciBiPSExO2Z1bmN0aW9uIHgodCl7bSh0aGlzLHQpLHRoaXMuX2Q9bmV3IERhdGUobnVsbCE9dC5fZD90Ll9kLmdldFRpbWUoKTpOYU4pLHRoaXMuaXNWYWxpZCgpfHwodGhpcy5fZD1uZXcgRGF0ZShOYU4pKSwhMT09PWImJihiPSEwLGkudXBkYXRlT2Zmc2V0KHRoaXMpLGI9ITEpfWZ1bmN0aW9uIF8odCl7cmV0dXJuIHQgaW5zdGFuY2VvZiB4fHxudWxsIT10JiZudWxsIT10Ll9pc0FNb21lbnRPYmplY3R9ZnVuY3Rpb24gayh0KXtyZXR1cm4gdDwwP01hdGguY2VpbCh0KXx8MDpNYXRoLmZsb29yKHQpfWZ1bmN0aW9uIHcodCl7dmFyIGU9K3Qsbj0wO3JldHVybiAwIT09ZSYmaXNGaW5pdGUoZSkmJihuPWsoZSkpLG59ZnVuY3Rpb24gRSh0LGUsbil7dmFyIHIsaT1NYXRoLm1pbih0Lmxlbmd0aCxlLmxlbmd0aCksYT1NYXRoLmFicyh0Lmxlbmd0aC1lLmxlbmd0aCksbz0wO2ZvcihyPTA7cjxpO3IrKykobiYmdFtyXSE9PWVbcl18fCFuJiZ3KHRbcl0pIT09dyhlW3JdKSkmJm8rKztyZXR1cm4gbythfWZ1bmN0aW9uIFQodCl7ITE9PT1pLnN1cHByZXNzRGVwcmVjYXRpb25XYXJuaW5ncyYmInVuZGVmaW5lZCIhPXR5cGVvZiBjb25zb2xlJiZjb25zb2xlLndhcm4mJmNvbnNvbGUud2FybigiRGVwcmVjYXRpb24gd2FybmluZzogIit0KX1mdW5jdGlvbiBDKHQsZSl7dmFyIG49ITA7cmV0dXJuIGYoKGZ1bmN0aW9uKCl7aWYobnVsbCE9aS5kZXByZWNhdGlvbkhhbmRsZXImJmkuZGVwcmVjYXRpb25IYW5kbGVyKG51bGwsdCksbil7Zm9yKHZhciByLGE9W10sbz0wO288YXJndW1lbnRzLmxlbmd0aDtvKyspe2lmKHI9IiIsIm9iamVjdCI9PXR5cGVvZiBhcmd1bWVudHNbb10pe2Zvcih2YXIgcyBpbiByKz0iXG5bIitvKyJdICIsYXJndW1lbnRzWzBdKXIrPXMrIjogIithcmd1bWVudHNbMF1bc10rIiwgIjtyPXIuc2xpY2UoMCwtMil9ZWxzZSByPWFyZ3VtZW50c1tvXTthLnB1c2gocil9VCh0KyJcbkFyZ3VtZW50czogIitBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhKS5qb2luKCIiKSsiXG4iKyhuZXcgRXJyb3IpLnN0YWNrKSxuPSExfXJldHVybiBlLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0pLGUpfXZhciBTLEE9e307ZnVuY3Rpb24gTSh0LGUpe251bGwhPWkuZGVwcmVjYXRpb25IYW5kbGVyJiZpLmRlcHJlY2F0aW9uSGFuZGxlcih0LGUpLEFbdF18fChUKGUpLEFbdF09ITApfWZ1bmN0aW9uIE8odCl7cmV0dXJuIHQgaW5zdGFuY2VvZiBGdW5jdGlvbnx8IltvYmplY3QgRnVuY3Rpb25dIj09PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh0KX1mdW5jdGlvbiBEKHQsZSl7dmFyIG4scj1mKHt9LHQpO2ZvcihuIGluIGUpaChlLG4pJiYobyh0W25dKSYmbyhlW25dKT8ocltuXT17fSxmKHJbbl0sdFtuXSksZihyW25dLGVbbl0pKTpudWxsIT1lW25dP3Jbbl09ZVtuXTpkZWxldGUgcltuXSk7Zm9yKG4gaW4gdCloKHQsbikmJiFoKGUsbikmJm8odFtuXSkmJihyW25dPWYoe30scltuXSkpO3JldHVybiByfWZ1bmN0aW9uIE4odCl7bnVsbCE9dCYmdGhpcy5zZXQodCl9aS5zdXBwcmVzc0RlcHJlY2F0aW9uV2FybmluZ3M9ITEsaS5kZXByZWNhdGlvbkhhbmRsZXI9bnVsbCxTPU9iamVjdC5rZXlzP09iamVjdC5rZXlzOmZ1bmN0aW9uKHQpe3ZhciBlLG49W107Zm9yKGUgaW4gdCloKHQsZSkmJm4ucHVzaChlKTtyZXR1cm4gbn07dmFyIEI9e307ZnVuY3Rpb24gTCh0LGUpe3ZhciBuPXQudG9Mb3dlckNhc2UoKTtCW25dPUJbbisicyJdPUJbZV09dH1mdW5jdGlvbiBGKHQpe3JldHVybiJzdHJpbmciPT10eXBlb2YgdD9CW3RdfHxCW3QudG9Mb3dlckNhc2UoKV06dm9pZCAwfWZ1bmN0aW9uIFAodCl7dmFyIGUsbixyPXt9O2ZvcihuIGluIHQpaCh0LG4pJiYoZT1GKG4pKSYmKHJbZV09dFtuXSk7cmV0dXJuIHJ9dmFyIEk9e307ZnVuY3Rpb24gaih0LGUpe0lbdF09ZX1mdW5jdGlvbiBSKHQsZSxuKXt2YXIgcj0iIitNYXRoLmFicyh0KSxpPWUtci5sZW5ndGg7cmV0dXJuKDA8PXQ/bj8iKyI6IiI6Ii0iKStNYXRoLnBvdygxMCxNYXRoLm1heCgwLGkpKS50b1N0cmluZygpLnN1YnN0cigxKStyfXZhciBZPS8oXFtbXlxbXSpcXSl8KFxcKT8oW0hoXW1tKHNzKT98TW98TU0/TT9NP3xEb3xERERvfEREP0Q/RD98ZGRkP2Q/fGRvP3x3W298d10/fFdbb3xXXT98UW8/fFlZWVlZWXxZWVlZWXxZWVlZfFlZfGdnKGdnZz8pP3xHRyhHR0c/KT98ZXxFfGF8QXxoaD98SEg/fGtrP3xtbT98c3M/fFN7MSw5fXx4fFh8eno/fFpaP3wuKS9nLHo9LyhcW1teXFtdKlxdKXwoXFwpPyhMVFN8TFR8TEw/TD9MP3xsezEsNH0pL2csVT17fSwkPXt9O2Z1bmN0aW9uIFcodCxlLG4scil7dmFyIGk9cjsic3RyaW5nIj09dHlwZW9mIHImJihpPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXNbcl0oKX0pLHQmJigkW3RdPWkpLGUmJigkW2VbMF1dPWZ1bmN0aW9uKCl7cmV0dXJuIFIoaS5hcHBseSh0aGlzLGFyZ3VtZW50cyksZVsxXSxlWzJdKX0pLG4mJigkW25dPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubG9jYWxlRGF0YSgpLm9yZGluYWwoaS5hcHBseSh0aGlzLGFyZ3VtZW50cyksdCl9KX1mdW5jdGlvbiBWKHQsZSl7cmV0dXJuIHQuaXNWYWxpZCgpPyhlPUgoZSx0LmxvY2FsZURhdGEoKSksVVtlXT1VW2VdfHxmdW5jdGlvbih0KXt2YXIgZSxuLHIsaT10Lm1hdGNoKFkpO2ZvcihlPTAsbj1pLmxlbmd0aDtlPG47ZSsrKSRbaVtlXV0/aVtlXT0kW2lbZV1dOmlbZV09KHI9aVtlXSkubWF0Y2goL1xbW1xzXFNdLyk/ci5yZXBsYWNlKC9eXFt8XF0kL2csIiIpOnIucmVwbGFjZSgvXFwvZywiIik7cmV0dXJuIGZ1bmN0aW9uKGUpe3ZhciByLGE9IiI7Zm9yKHI9MDtyPG47cisrKWErPU8oaVtyXSk/aVtyXS5jYWxsKGUsdCk6aVtyXTtyZXR1cm4gYX19KGUpLFVbZV0odCkpOnQubG9jYWxlRGF0YSgpLmludmFsaWREYXRlKCl9ZnVuY3Rpb24gSCh0LGUpe3ZhciBuPTU7ZnVuY3Rpb24gcih0KXtyZXR1cm4gZS5sb25nRGF0ZUZvcm1hdCh0KXx8dH1mb3Ioei5sYXN0SW5kZXg9MDswPD1uJiZ6LnRlc3QodCk7KXQ9dC5yZXBsYWNlKHosciksei5sYXN0SW5kZXg9MCxuLT0xO3JldHVybiB0fXZhciBHPS9cZC8scT0vXGRcZC8sWD0vXGR7M30vLFo9L1xkezR9LyxKPS9bKy1dP1xkezZ9LyxRPS9cZFxkPy8sSz0vXGRcZFxkXGQ/Lyx0dD0vXGRcZFxkXGRcZFxkPy8sZXQ9L1xkezEsM30vLG50PS9cZHsxLDR9LyxydD0vWystXT9cZHsxLDZ9LyxpdD0vXGQrLyxhdD0vWystXT9cZCsvLG90PS9afFsrLV1cZFxkOj9cZFxkL2dpLHN0PS9afFsrLV1cZFxkKD86Oj9cZFxkKT8vZ2ksY3Q9L1swLTldezAsMjU2fVsnYS16XHUwMEEwLVx1MDVGRlx1MDcwMC1cdUQ3RkZcdUY5MDAtXHVGRENGXHVGREYwLVx1RkYwN1x1RkYxMC1cdUZGRUZdezEsMjU2fXxbXHUwNjAwLVx1MDZGRlwvXXsxLDI1Nn0oXHMqP1tcdTA2MDAtXHUwNkZGXXsxLDI1Nn0pezEsMn0vaSx1dD17fTtmdW5jdGlvbiBsdCh0LGUsbil7dXRbdF09TyhlKT9lOmZ1bmN0aW9uKHQscil7cmV0dXJuIHQmJm4/bjplfX1mdW5jdGlvbiBodCh0LGUpe3JldHVybiBoKHV0LHQpP3V0W3RdKGUuX3N0cmljdCxlLl9sb2NhbGUpOm5ldyBSZWdFeHAoZnQodC5yZXBsYWNlKCJcXCIsIiIpLnJlcGxhY2UoL1xcKFxbKXxcXChcXSl8XFsoW15cXVxbXSopXF18XFwoLikvZywoZnVuY3Rpb24odCxlLG4scixpKXtyZXR1cm4gZXx8bnx8cnx8aX0pKSkpfWZ1bmN0aW9uIGZ0KHQpe3JldHVybiB0LnJlcGxhY2UoL1stXC9cXF4kKis/LigpfFtcXXt9XS9nLCJcXCQmIil9dmFyIGR0PXt9O2Z1bmN0aW9uIHB0KHQsZSl7dmFyIG4scj1lO2Zvcigic3RyaW5nIj09dHlwZW9mIHQmJih0PVt0XSksYyhlKSYmKHI9ZnVuY3Rpb24odCxuKXtuW2VdPXcodCl9KSxuPTA7bjx0Lmxlbmd0aDtuKyspZHRbdFtuXV09cn1mdW5jdGlvbiBndCh0LGUpe3B0KHQsKGZ1bmN0aW9uKHQsbixyLGkpe3IuX3c9ci5fd3x8e30sZSh0LHIuX3cscixpKX0pKX1mdW5jdGlvbiB5dCh0KXtyZXR1cm4gdnQodCk/MzY2OjM2NX1mdW5jdGlvbiB2dCh0KXtyZXR1cm4gdCU0PT0wJiZ0JTEwMCE9MHx8dCU0MDA9PTB9VygiWSIsMCwwLChmdW5jdGlvbigpe3ZhciB0PXRoaXMueWVhcigpO3JldHVybiB0PD05OTk5PyIiK3Q6IisiK3R9KSksVygwLFsiWVkiLDJdLDAsKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMueWVhcigpJTEwMH0pKSxXKDAsWyJZWVlZIiw0XSwwLCJ5ZWFyIiksVygwLFsiWVlZWVkiLDVdLDAsInllYXIiKSxXKDAsWyJZWVlZWVkiLDYsITBdLDAsInllYXIiKSxMKCJ5ZWFyIiwieSIpLGooInllYXIiLDEpLGx0KCJZIixhdCksbHQoIllZIixRLHEpLGx0KCJZWVlZIixudCxaKSxsdCgiWVlZWVkiLHJ0LEopLGx0KCJZWVlZWVkiLHJ0LEopLHB0KFsiWVlZWVkiLCJZWVlZWVkiXSwwKSxwdCgiWVlZWSIsKGZ1bmN0aW9uKHQsZSl7ZVswXT0yPT09dC5sZW5ndGg/aS5wYXJzZVR3b0RpZ2l0WWVhcih0KTp3KHQpfSkpLHB0KCJZWSIsKGZ1bmN0aW9uKHQsZSl7ZVswXT1pLnBhcnNlVHdvRGlnaXRZZWFyKHQpfSkpLHB0KCJZIiwoZnVuY3Rpb24odCxlKXtlWzBdPXBhcnNlSW50KHQsMTApfSkpLGkucGFyc2VUd29EaWdpdFllYXI9ZnVuY3Rpb24odCl7cmV0dXJuIHcodCkrKDY4PHcodCk/MTkwMDoyZTMpfTt2YXIgbXQsYnQ9eHQoIkZ1bGxZZWFyIiwhMCk7ZnVuY3Rpb24geHQodCxlKXtyZXR1cm4gZnVuY3Rpb24obil7cmV0dXJuIG51bGwhPW4/KGt0KHRoaXMsdCxuKSxpLnVwZGF0ZU9mZnNldCh0aGlzLGUpLHRoaXMpOl90KHRoaXMsdCl9fWZ1bmN0aW9uIF90KHQsZSl7cmV0dXJuIHQuaXNWYWxpZCgpP3QuX2RbImdldCIrKHQuX2lzVVRDPyJVVEMiOiIiKStlXSgpOk5hTn1mdW5jdGlvbiBrdCh0LGUsbil7dC5pc1ZhbGlkKCkmJiFpc05hTihuKSYmKCJGdWxsWWVhciI9PT1lJiZ2dCh0LnllYXIoKSkmJjE9PT10Lm1vbnRoKCkmJjI5PT09dC5kYXRlKCk/dC5fZFsic2V0IisodC5faXNVVEM/IlVUQyI6IiIpK2VdKG4sdC5tb250aCgpLHd0KG4sdC5tb250aCgpKSk6dC5fZFsic2V0IisodC5faXNVVEM/IlVUQyI6IiIpK2VdKG4pKX1mdW5jdGlvbiB3dCh0LGUpe2lmKGlzTmFOKHQpfHxpc05hTihlKSlyZXR1cm4gTmFOO3ZhciBuPShlJTEyKzEyKSUxMjtyZXR1cm4gdCs9KGUtbikvMTIsMT09PW4/dnQodCk/Mjk6Mjg6MzEtbiU3JTJ9bXQ9QXJyYXkucHJvdG90eXBlLmluZGV4T2Y/QXJyYXkucHJvdG90eXBlLmluZGV4T2Y6ZnVuY3Rpb24odCl7dmFyIGU7Zm9yKGU9MDtlPHRoaXMubGVuZ3RoOysrZSlpZih0aGlzW2VdPT09dClyZXR1cm4gZTtyZXR1cm4tMX0sVygiTSIsWyJNTSIsMl0sIk1vIiwoZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tb250aCgpKzF9KSksVygiTU1NIiwwLDAsKGZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmxvY2FsZURhdGEoKS5tb250aHNTaG9ydCh0aGlzLHQpfSkpLFcoIk1NTU0iLDAsMCwoZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMubG9jYWxlRGF0YSgpLm1vbnRocyh0aGlzLHQpfSkpLEwoIm1vbnRoIiwiTSIpLGooIm1vbnRoIiw4KSxsdCgiTSIsUSksbHQoIk1NIixRLHEpLGx0KCJNTU0iLChmdW5jdGlvbih0LGUpe3JldHVybiBlLm1vbnRoc1Nob3J0UmVnZXgodCl9KSksbHQoIk1NTU0iLChmdW5jdGlvbih0LGUpe3JldHVybiBlLm1vbnRoc1JlZ2V4KHQpfSkpLHB0KFsiTSIsIk1NIl0sKGZ1bmN0aW9uKHQsZSl7ZVsxXT13KHQpLTF9KSkscHQoWyJNTU0iLCJNTU1NIl0sKGZ1bmN0aW9uKHQsZSxuLHIpe3ZhciBpPW4uX2xvY2FsZS5tb250aHNQYXJzZSh0LHIsbi5fc3RyaWN0KTtudWxsIT1pP2VbMV09aTpwKG4pLmludmFsaWRNb250aD10fSkpO3ZhciBFdD0vRFtvRF0/KFxbW15cW1xdXSpcXXxccykrTU1NTT8vLFR0PSJKYW51YXJ5X0ZlYnJ1YXJ5X01hcmNoX0FwcmlsX01heV9KdW5lX0p1bHlfQXVndXN0X1NlcHRlbWJlcl9PY3RvYmVyX05vdmVtYmVyX0RlY2VtYmVyIi5zcGxpdCgiXyIpLEN0PSJKYW5fRmViX01hcl9BcHJfTWF5X0p1bl9KdWxfQXVnX1NlcF9PY3RfTm92X0RlYyIuc3BsaXQoIl8iKTtmdW5jdGlvbiBTdCh0LGUpe3ZhciBuO2lmKCF0LmlzVmFsaWQoKSlyZXR1cm4gdDtpZigic3RyaW5nIj09dHlwZW9mIGUpaWYoL15cZCskLy50ZXN0KGUpKWU9dyhlKTtlbHNlIGlmKCFjKGU9dC5sb2NhbGVEYXRhKCkubW9udGhzUGFyc2UoZSkpKXJldHVybiB0O3JldHVybiBuPU1hdGgubWluKHQuZGF0ZSgpLHd0KHQueWVhcigpLGUpKSx0Ll9kWyJzZXQiKyh0Ll9pc1VUQz8iVVRDIjoiIikrIk1vbnRoIl0oZSxuKSx0fWZ1bmN0aW9uIEF0KHQpe3JldHVybiBudWxsIT10PyhTdCh0aGlzLHQpLGkudXBkYXRlT2Zmc2V0KHRoaXMsITApLHRoaXMpOl90KHRoaXMsIk1vbnRoIil9dmFyIE10PWN0LE90PWN0O2Z1bmN0aW9uIER0KCl7ZnVuY3Rpb24gdCh0LGUpe3JldHVybiBlLmxlbmd0aC10Lmxlbmd0aH12YXIgZSxuLHI9W10saT1bXSxhPVtdO2ZvcihlPTA7ZTwxMjtlKyspbj1kKFsyZTMsZV0pLHIucHVzaCh0aGlzLm1vbnRoc1Nob3J0KG4sIiIpKSxpLnB1c2godGhpcy5tb250aHMobiwiIikpLGEucHVzaCh0aGlzLm1vbnRocyhuLCIiKSksYS5wdXNoKHRoaXMubW9udGhzU2hvcnQobiwiIikpO2ZvcihyLnNvcnQodCksaS5zb3J0KHQpLGEuc29ydCh0KSxlPTA7ZTwxMjtlKyspcltlXT1mdChyW2VdKSxpW2VdPWZ0KGlbZV0pO2ZvcihlPTA7ZTwyNDtlKyspYVtlXT1mdChhW2VdKTt0aGlzLl9tb250aHNSZWdleD1uZXcgUmVnRXhwKCJeKCIrYS5qb2luKCJ8IikrIikiLCJpIiksdGhpcy5fbW9udGhzU2hvcnRSZWdleD10aGlzLl9tb250aHNSZWdleCx0aGlzLl9tb250aHNTdHJpY3RSZWdleD1uZXcgUmVnRXhwKCJeKCIraS5qb2luKCJ8IikrIikiLCJpIiksdGhpcy5fbW9udGhzU2hvcnRTdHJpY3RSZWdleD1uZXcgUmVnRXhwKCJeKCIrci5qb2luKCJ8IikrIikiLCJpIil9ZnVuY3Rpb24gTnQodCl7dmFyIGU7aWYodDwxMDAmJjA8PXQpe3ZhciBuPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7blswXT10KzQwMCxlPW5ldyBEYXRlKERhdGUuVVRDLmFwcGx5KG51bGwsbikpLGlzRmluaXRlKGUuZ2V0VVRDRnVsbFllYXIoKSkmJmUuc2V0VVRDRnVsbFllYXIodCl9ZWxzZSBlPW5ldyBEYXRlKERhdGUuVVRDLmFwcGx5KG51bGwsYXJndW1lbnRzKSk7cmV0dXJuIGV9ZnVuY3Rpb24gQnQodCxlLG4pe3ZhciByPTcrZS1uO3JldHVybi0oNytOdCh0LDAscikuZ2V0VVRDRGF5KCktZSklNytyLTF9ZnVuY3Rpb24gTHQodCxlLG4scixpKXt2YXIgYSxvLHM9MSs3KihlLTEpKyg3K24tciklNytCdCh0LHIsaSk7cmV0dXJuIG89czw9MD95dChhPXQtMSkrczpzPnl0KHQpPyhhPXQrMSxzLXl0KHQpKTooYT10LHMpLHt5ZWFyOmEsZGF5T2ZZZWFyOm99fWZ1bmN0aW9uIEZ0KHQsZSxuKXt2YXIgcixpLGE9QnQodC55ZWFyKCksZSxuKSxvPU1hdGguZmxvb3IoKHQuZGF5T2ZZZWFyKCktYS0xKS83KSsxO3JldHVybiBvPDE/cj1vK1B0KGk9dC55ZWFyKCktMSxlLG4pOm8+UHQodC55ZWFyKCksZSxuKT8ocj1vLVB0KHQueWVhcigpLGUsbiksaT10LnllYXIoKSsxKTooaT10LnllYXIoKSxyPW8pLHt3ZWVrOnIseWVhcjppfX1mdW5jdGlvbiBQdCh0LGUsbil7dmFyIHI9QnQodCxlLG4pLGk9QnQodCsxLGUsbik7cmV0dXJuKHl0KHQpLXIraSkvN31mdW5jdGlvbiBJdCh0LGUpe3JldHVybiB0LnNsaWNlKGUsNykuY29uY2F0KHQuc2xpY2UoMCxlKSl9VygidyIsWyJ3dyIsMl0sIndvIiwid2VlayIpLFcoIlciLFsiV1ciLDJdLCJXbyIsImlzb1dlZWsiKSxMKCJ3ZWVrIiwidyIpLEwoImlzb1dlZWsiLCJXIiksaigid2VlayIsNSksaigiaXNvV2VlayIsNSksbHQoInciLFEpLGx0KCJ3dyIsUSxxKSxsdCgiVyIsUSksbHQoIldXIixRLHEpLGd0KFsidyIsInd3IiwiVyIsIldXIl0sKGZ1bmN0aW9uKHQsZSxuLHIpe2Vbci5zdWJzdHIoMCwxKV09dyh0KX0pKSxXKCJkIiwwLCJkbyIsImRheSIpLFcoImRkIiwwLDAsKGZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmxvY2FsZURhdGEoKS53ZWVrZGF5c01pbih0aGlzLHQpfSkpLFcoImRkZCIsMCwwLChmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5sb2NhbGVEYXRhKCkud2Vla2RheXNTaG9ydCh0aGlzLHQpfSkpLFcoImRkZGQiLDAsMCwoZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMubG9jYWxlRGF0YSgpLndlZWtkYXlzKHRoaXMsdCl9KSksVygiZSIsMCwwLCJ3ZWVrZGF5IiksVygiRSIsMCwwLCJpc29XZWVrZGF5IiksTCgiZGF5IiwiZCIpLEwoIndlZWtkYXkiLCJlIiksTCgiaXNvV2Vla2RheSIsIkUiKSxqKCJkYXkiLDExKSxqKCJ3ZWVrZGF5IiwxMSksaigiaXNvV2Vla2RheSIsMTEpLGx0KCJkIixRKSxsdCgiZSIsUSksbHQoIkUiLFEpLGx0KCJkZCIsKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUud2Vla2RheXNNaW5SZWdleCh0KX0pKSxsdCgiZGRkIiwoZnVuY3Rpb24odCxlKXtyZXR1cm4gZS53ZWVrZGF5c1Nob3J0UmVnZXgodCl9KSksbHQoImRkZGQiLChmdW5jdGlvbih0LGUpe3JldHVybiBlLndlZWtkYXlzUmVnZXgodCl9KSksZ3QoWyJkZCIsImRkZCIsImRkZGQiXSwoZnVuY3Rpb24odCxlLG4scil7dmFyIGk9bi5fbG9jYWxlLndlZWtkYXlzUGFyc2UodCxyLG4uX3N0cmljdCk7bnVsbCE9aT9lLmQ9aTpwKG4pLmludmFsaWRXZWVrZGF5PXR9KSksZ3QoWyJkIiwiZSIsIkUiXSwoZnVuY3Rpb24odCxlLG4scil7ZVtyXT13KHQpfSkpO3ZhciBqdD0iU3VuZGF5X01vbmRheV9UdWVzZGF5X1dlZG5lc2RheV9UaHVyc2RheV9GcmlkYXlfU2F0dXJkYXkiLnNwbGl0KCJfIiksUnQ9IlN1bl9Nb25fVHVlX1dlZF9UaHVfRnJpX1NhdCIuc3BsaXQoIl8iKSxZdD0iU3VfTW9fVHVfV2VfVGhfRnJfU2EiLnNwbGl0KCJfIiksenQ9Y3QsVXQ9Y3QsJHQ9Y3Q7ZnVuY3Rpb24gV3QoKXtmdW5jdGlvbiB0KHQsZSl7cmV0dXJuIGUubGVuZ3RoLXQubGVuZ3RofXZhciBlLG4scixpLGEsbz1bXSxzPVtdLGM9W10sdT1bXTtmb3IoZT0wO2U8NztlKyspbj1kKFsyZTMsMV0pLmRheShlKSxyPXRoaXMud2Vla2RheXNNaW4obiwiIiksaT10aGlzLndlZWtkYXlzU2hvcnQobiwiIiksYT10aGlzLndlZWtkYXlzKG4sIiIpLG8ucHVzaChyKSxzLnB1c2goaSksYy5wdXNoKGEpLHUucHVzaChyKSx1LnB1c2goaSksdS5wdXNoKGEpO2ZvcihvLnNvcnQodCkscy5zb3J0KHQpLGMuc29ydCh0KSx1LnNvcnQodCksZT0wO2U8NztlKyspc1tlXT1mdChzW2VdKSxjW2VdPWZ0KGNbZV0pLHVbZV09ZnQodVtlXSk7dGhpcy5fd2Vla2RheXNSZWdleD1uZXcgUmVnRXhwKCJeKCIrdS5qb2luKCJ8IikrIikiLCJpIiksdGhpcy5fd2Vla2RheXNTaG9ydFJlZ2V4PXRoaXMuX3dlZWtkYXlzUmVnZXgsdGhpcy5fd2Vla2RheXNNaW5SZWdleD10aGlzLl93ZWVrZGF5c1JlZ2V4LHRoaXMuX3dlZWtkYXlzU3RyaWN0UmVnZXg9bmV3IFJlZ0V4cCgiXigiK2Muam9pbigifCIpKyIpIiwiaSIpLHRoaXMuX3dlZWtkYXlzU2hvcnRTdHJpY3RSZWdleD1uZXcgUmVnRXhwKCJeKCIrcy5qb2luKCJ8IikrIikiLCJpIiksdGhpcy5fd2Vla2RheXNNaW5TdHJpY3RSZWdleD1uZXcgUmVnRXhwKCJeKCIrby5qb2luKCJ8IikrIikiLCJpIil9ZnVuY3Rpb24gVnQoKXtyZXR1cm4gdGhpcy5ob3VycygpJTEyfHwxMn1mdW5jdGlvbiBIdCh0LGUpe1codCwwLDAsKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubG9jYWxlRGF0YSgpLm1lcmlkaWVtKHRoaXMuaG91cnMoKSx0aGlzLm1pbnV0ZXMoKSxlKX0pKX1mdW5jdGlvbiBHdCh0LGUpe3JldHVybiBlLl9tZXJpZGllbVBhcnNlfVcoIkgiLFsiSEgiLDJdLDAsImhvdXIiKSxXKCJoIixbImhoIiwyXSwwLFZ0KSxXKCJrIixbImtrIiwyXSwwLChmdW5jdGlvbigpe3JldHVybiB0aGlzLmhvdXJzKCl8fDI0fSkpLFcoImhtbSIsMCwwLChmdW5jdGlvbigpe3JldHVybiIiK1Z0LmFwcGx5KHRoaXMpK1IodGhpcy5taW51dGVzKCksMil9KSksVygiaG1tc3MiLDAsMCwoZnVuY3Rpb24oKXtyZXR1cm4iIitWdC5hcHBseSh0aGlzKStSKHRoaXMubWludXRlcygpLDIpK1IodGhpcy5zZWNvbmRzKCksMil9KSksVygiSG1tIiwwLDAsKGZ1bmN0aW9uKCl7cmV0dXJuIiIrdGhpcy5ob3VycygpK1IodGhpcy5taW51dGVzKCksMil9KSksVygiSG1tc3MiLDAsMCwoZnVuY3Rpb24oKXtyZXR1cm4iIit0aGlzLmhvdXJzKCkrUih0aGlzLm1pbnV0ZXMoKSwyKStSKHRoaXMuc2Vjb25kcygpLDIpfSkpLEh0KCJhIiwhMCksSHQoIkEiLCExKSxMKCJob3VyIiwiaCIpLGooImhvdXIiLDEzKSxsdCgiYSIsR3QpLGx0KCJBIixHdCksbHQoIkgiLFEpLGx0KCJoIixRKSxsdCgiayIsUSksbHQoIkhIIixRLHEpLGx0KCJoaCIsUSxxKSxsdCgia2siLFEscSksbHQoImhtbSIsSyksbHQoImhtbXNzIix0dCksbHQoIkhtbSIsSyksbHQoIkhtbXNzIix0dCkscHQoWyJIIiwiSEgiXSwzKSxwdChbImsiLCJrayJdLChmdW5jdGlvbih0LGUsbil7dmFyIHI9dyh0KTtlWzNdPTI0PT09cj8wOnJ9KSkscHQoWyJhIiwiQSJdLChmdW5jdGlvbih0LGUsbil7bi5faXNQbT1uLl9sb2NhbGUuaXNQTSh0KSxuLl9tZXJpZGllbT10fSkpLHB0KFsiaCIsImhoIl0sKGZ1bmN0aW9uKHQsZSxuKXtlWzNdPXcodCkscChuKS5iaWdIb3VyPSEwfSkpLHB0KCJobW0iLChmdW5jdGlvbih0LGUsbil7dmFyIHI9dC5sZW5ndGgtMjtlWzNdPXcodC5zdWJzdHIoMCxyKSksZVs0XT13KHQuc3Vic3RyKHIpKSxwKG4pLmJpZ0hvdXI9ITB9KSkscHQoImhtbXNzIiwoZnVuY3Rpb24odCxlLG4pe3ZhciByPXQubGVuZ3RoLTQsaT10Lmxlbmd0aC0yO2VbM109dyh0LnN1YnN0cigwLHIpKSxlWzRdPXcodC5zdWJzdHIociwyKSksZVs1XT13KHQuc3Vic3RyKGkpKSxwKG4pLmJpZ0hvdXI9ITB9KSkscHQoIkhtbSIsKGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj10Lmxlbmd0aC0yO2VbM109dyh0LnN1YnN0cigwLHIpKSxlWzRdPXcodC5zdWJzdHIocikpfSkpLHB0KCJIbW1zcyIsKGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj10Lmxlbmd0aC00LGk9dC5sZW5ndGgtMjtlWzNdPXcodC5zdWJzdHIoMCxyKSksZVs0XT13KHQuc3Vic3RyKHIsMikpLGVbNV09dyh0LnN1YnN0cihpKSl9KSk7dmFyIHF0LFh0PXh0KCJIb3VycyIsITApLFp0PXtjYWxlbmRhcjp7c2FtZURheToiW1RvZGF5IGF0XSBMVCIsbmV4dERheToiW1RvbW9ycm93IGF0XSBMVCIsbmV4dFdlZWs6ImRkZGQgW2F0XSBMVCIsbGFzdERheToiW1llc3RlcmRheSBhdF0gTFQiLGxhc3RXZWVrOiJbTGFzdF0gZGRkZCBbYXRdIExUIixzYW1lRWxzZToiTCJ9LGxvbmdEYXRlRm9ybWF0OntMVFM6Img6bW06c3MgQSIsTFQ6Img6bW0gQSIsTDoiTU0vREQvWVlZWSIsTEw6Ik1NTU0gRCwgWVlZWSIsTExMOiJNTU1NIEQsIFlZWVkgaDptbSBBIixMTExMOiJkZGRkLCBNTU1NIEQsIFlZWVkgaDptbSBBIn0saW52YWxpZERhdGU6IkludmFsaWQgZGF0ZSIsb3JkaW5hbDoiJWQiLGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn0vLHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJpbiAlcyIscGFzdDoiJXMgYWdvIixzOiJhIGZldyBzZWNvbmRzIixzczoiJWQgc2Vjb25kcyIsbToiYSBtaW51dGUiLG1tOiIlZCBtaW51dGVzIixoOiJhbiBob3VyIixoaDoiJWQgaG91cnMiLGQ6ImEgZGF5IixkZDoiJWQgZGF5cyIsTToiYSBtb250aCIsTU06IiVkIG1vbnRocyIseToiYSB5ZWFyIix5eToiJWQgeWVhcnMifSxtb250aHM6VHQsbW9udGhzU2hvcnQ6Q3Qsd2Vlazp7ZG93OjAsZG95OjZ9LHdlZWtkYXlzOmp0LHdlZWtkYXlzTWluOll0LHdlZWtkYXlzU2hvcnQ6UnQsbWVyaWRpZW1QYXJzZTovW2FwXVwuP20/XC4/L2l9LEp0PXt9LFF0PXt9O2Z1bmN0aW9uIEt0KHQpe3JldHVybiB0P3QudG9Mb3dlckNhc2UoKS5yZXBsYWNlKCJfIiwiLSIpOnR9ZnVuY3Rpb24gdGUoZSl7dmFyIHI9bnVsbDtpZighSnRbZV0mJnZvaWQgMCE9PXQmJnQmJnQuZXhwb3J0cyl0cnl7cj1xdC5fYWJicixuKDE3MSkoIi4vIitlKSxlZShyKX1jYXRjaChlKXt9cmV0dXJuIEp0W2VdfWZ1bmN0aW9uIGVlKHQsZSl7dmFyIG47cmV0dXJuIHQmJigobj1zKGUpP3JlKHQpOm5lKHQsZSkpP3F0PW46InVuZGVmaW5lZCIhPXR5cGVvZiBjb25zb2xlJiZjb25zb2xlLndhcm4mJmNvbnNvbGUud2FybigiTG9jYWxlICIrdCsiIG5vdCBmb3VuZC4gRGlkIHlvdSBmb3JnZXQgdG8gbG9hZCBpdD8iKSkscXQuX2FiYnJ9ZnVuY3Rpb24gbmUodCxlKXtpZihudWxsPT09ZSlyZXR1cm4gZGVsZXRlIEp0W3RdLG51bGw7dmFyIG4scj1adDtpZihlLmFiYnI9dCxudWxsIT1KdFt0XSlNKCJkZWZpbmVMb2NhbGVPdmVycmlkZSIsInVzZSBtb21lbnQudXBkYXRlTG9jYWxlKGxvY2FsZU5hbWUsIGNvbmZpZykgdG8gY2hhbmdlIGFuIGV4aXN0aW5nIGxvY2FsZS4gbW9tZW50LmRlZmluZUxvY2FsZShsb2NhbGVOYW1lLCBjb25maWcpIHNob3VsZCBvbmx5IGJlIHVzZWQgZm9yIGNyZWF0aW5nIGEgbmV3IGxvY2FsZSBTZWUgaHR0cDovL21vbWVudGpzLmNvbS9ndWlkZXMvIy93YXJuaW5ncy9kZWZpbmUtbG9jYWxlLyBmb3IgbW9yZSBpbmZvLiIpLHI9SnRbdF0uX2NvbmZpZztlbHNlIGlmKG51bGwhPWUucGFyZW50TG9jYWxlKWlmKG51bGwhPUp0W2UucGFyZW50TG9jYWxlXSlyPUp0W2UucGFyZW50TG9jYWxlXS5fY29uZmlnO2Vsc2V7aWYobnVsbD09KG49dGUoZS5wYXJlbnRMb2NhbGUpKSlyZXR1cm4gUXRbZS5wYXJlbnRMb2NhbGVdfHwoUXRbZS5wYXJlbnRMb2NhbGVdPVtdKSxRdFtlLnBhcmVudExvY2FsZV0ucHVzaCh7bmFtZTp0LGNvbmZpZzplfSksbnVsbDtyPW4uX2NvbmZpZ31yZXR1cm4gSnRbdF09bmV3IE4oRChyLGUpKSxRdFt0XSYmUXRbdF0uZm9yRWFjaCgoZnVuY3Rpb24odCl7bmUodC5uYW1lLHQuY29uZmlnKX0pKSxlZSh0KSxKdFt0XX1mdW5jdGlvbiByZSh0KXt2YXIgZTtpZih0JiZ0Ll9sb2NhbGUmJnQuX2xvY2FsZS5fYWJiciYmKHQ9dC5fbG9jYWxlLl9hYmJyKSwhdClyZXR1cm4gcXQ7aWYoIWEodCkpe2lmKGU9dGUodCkpcmV0dXJuIGU7dD1bdF19cmV0dXJuIGZ1bmN0aW9uKHQpe2Zvcih2YXIgZSxuLHIsaSxhPTA7YTx0Lmxlbmd0aDspe2ZvcihlPShpPUt0KHRbYV0pLnNwbGl0KCItIikpLmxlbmd0aCxuPShuPUt0KHRbYSsxXSkpP24uc3BsaXQoIi0iKTpudWxsOzA8ZTspe2lmKHI9dGUoaS5zbGljZSgwLGUpLmpvaW4oIi0iKSkpcmV0dXJuIHI7aWYobiYmbi5sZW5ndGg+PWUmJkUoaSxuLCEwKT49ZS0xKWJyZWFrO2UtLX1hKyt9cmV0dXJuIHF0fSh0KX1mdW5jdGlvbiBpZSh0KXt2YXIgZSxuPXQuX2E7cmV0dXJuIG4mJi0yPT09cCh0KS5vdmVyZmxvdyYmKGU9blsxXTwwfHwxMTxuWzFdPzE6blsyXTwxfHxuWzJdPnd0KG5bMF0sblsxXSk/MjpuWzNdPDB8fDI0PG5bM118fDI0PT09blszXSYmKDAhPT1uWzRdfHwwIT09bls1XXx8MCE9PW5bNl0pPzM6bls0XTwwfHw1OTxuWzRdPzQ6bls1XTwwfHw1OTxuWzVdPzU6bls2XTwwfHw5OTk8bls2XT82Oi0xLHAodCkuX292ZXJmbG93RGF5T2ZZZWFyJiYoZTwwfHwyPGUpJiYoZT0yKSxwKHQpLl9vdmVyZmxvd1dlZWtzJiYtMT09PWUmJihlPTcpLHAodCkuX292ZXJmbG93V2Vla2RheSYmLTE9PT1lJiYoZT04KSxwKHQpLm92ZXJmbG93PWUpLHR9ZnVuY3Rpb24gYWUodCxlLG4pe3JldHVybiBudWxsIT10P3Q6bnVsbCE9ZT9lOm59ZnVuY3Rpb24gb2UodCl7dmFyIGUsbixyLGEsbyxzPVtdO2lmKCF0Ll9kKXt2YXIgYyx1O2ZvcihjPXQsdT1uZXcgRGF0ZShpLm5vdygpKSxyPWMuX3VzZVVUQz9bdS5nZXRVVENGdWxsWWVhcigpLHUuZ2V0VVRDTW9udGgoKSx1LmdldFVUQ0RhdGUoKV06W3UuZ2V0RnVsbFllYXIoKSx1LmdldE1vbnRoKCksdS5nZXREYXRlKCldLHQuX3cmJm51bGw9PXQuX2FbMl0mJm51bGw9PXQuX2FbMV0mJmZ1bmN0aW9uKHQpe3ZhciBlLG4scixpLGEsbyxzLGM7aWYobnVsbCE9KGU9dC5fdykuR0d8fG51bGwhPWUuV3x8bnVsbCE9ZS5FKWE9MSxvPTQsbj1hZShlLkdHLHQuX2FbMF0sRnQoeGUoKSwxLDQpLnllYXIpLHI9YWUoZS5XLDEpLCgoaT1hZShlLkUsMSkpPDF8fDc8aSkmJihjPSEwKTtlbHNle2E9dC5fbG9jYWxlLl93ZWVrLmRvdyxvPXQuX2xvY2FsZS5fd2Vlay5kb3k7dmFyIHU9RnQoeGUoKSxhLG8pO249YWUoZS5nZyx0Ll9hWzBdLHUueWVhcikscj1hZShlLncsdS53ZWVrKSxudWxsIT1lLmQ/KChpPWUuZCk8MHx8NjxpKSYmKGM9ITApOm51bGwhPWUuZT8oaT1lLmUrYSwoZS5lPDB8fDY8ZS5lKSYmKGM9ITApKTppPWF9cjwxfHxyPlB0KG4sYSxvKT9wKHQpLl9vdmVyZmxvd1dlZWtzPSEwOm51bGwhPWM/cCh0KS5fb3ZlcmZsb3dXZWVrZGF5PSEwOihzPUx0KG4scixpLGEsbyksdC5fYVswXT1zLnllYXIsdC5fZGF5T2ZZZWFyPXMuZGF5T2ZZZWFyKX0odCksbnVsbCE9dC5fZGF5T2ZZZWFyJiYobz1hZSh0Ll9hWzBdLHJbMF0pLCh0Ll9kYXlPZlllYXI+eXQobyl8fDA9PT10Ll9kYXlPZlllYXIpJiYocCh0KS5fb3ZlcmZsb3dEYXlPZlllYXI9ITApLG49TnQobywwLHQuX2RheU9mWWVhciksdC5fYVsxXT1uLmdldFVUQ01vbnRoKCksdC5fYVsyXT1uLmdldFVUQ0RhdGUoKSksZT0wO2U8MyYmbnVsbD09dC5fYVtlXTsrK2UpdC5fYVtlXT1zW2VdPXJbZV07Zm9yKDtlPDc7ZSsrKXQuX2FbZV09c1tlXT1udWxsPT10Ll9hW2VdPzI9PT1lPzE6MDp0Ll9hW2VdOzI0PT09dC5fYVszXSYmMD09PXQuX2FbNF0mJjA9PT10Ll9hWzVdJiYwPT09dC5fYVs2XSYmKHQuX25leHREYXk9ITAsdC5fYVszXT0wKSx0Ll9kPSh0Ll91c2VVVEM/TnQ6ZnVuY3Rpb24odCxlLG4scixpLGEsbyl7dmFyIHM7cmV0dXJuIHQ8MTAwJiYwPD10PyhzPW5ldyBEYXRlKHQrNDAwLGUsbixyLGksYSxvKSxpc0Zpbml0ZShzLmdldEZ1bGxZZWFyKCkpJiZzLnNldEZ1bGxZZWFyKHQpKTpzPW5ldyBEYXRlKHQsZSxuLHIsaSxhLG8pLHN9KS5hcHBseShudWxsLHMpLGE9dC5fdXNlVVRDP3QuX2QuZ2V0VVRDRGF5KCk6dC5fZC5nZXREYXkoKSxudWxsIT10Ll90em0mJnQuX2Quc2V0VVRDTWludXRlcyh0Ll9kLmdldFVUQ01pbnV0ZXMoKS10Ll90em0pLHQuX25leHREYXkmJih0Ll9hWzNdPTI0KSx0Ll93JiZ2b2lkIDAhPT10Ll93LmQmJnQuX3cuZCE9PWEmJihwKHQpLndlZWtkYXlNaXNtYXRjaD0hMCl9fXZhciBzZT0vXlxzKigoPzpbKy1dXGR7Nn18XGR7NH0pLSg/OlxkXGQtXGRcZHxXXGRcZC1cZHxXXGRcZHxcZFxkXGR8XGRcZCkpKD86KFR8ICkoXGRcZCg/OjpcZFxkKD86OlxkXGQoPzpbLixdXGQrKT8pPyk/KShbXCtcLV1cZFxkKD86Oj9cZFxkKT98XHMqWik/KT8kLyxjZT0vXlxzKigoPzpbKy1dXGR7Nn18XGR7NH0pKD86XGRcZFxkXGR8V1xkXGRcZHxXXGRcZHxcZFxkXGR8XGRcZCkpKD86KFR8ICkoXGRcZCg/OlxkXGQoPzpcZFxkKD86Wy4sXVxkKyk/KT8pPykoW1wrXC1dXGRcZCg/Ojo/XGRcZCk/fFxzKlopPyk/JC8sdWU9L1p8WystXVxkXGQoPzo6P1xkXGQpPy8sbGU9W1siWVlZWVlZLU1NLUREIiwvWystXVxkezZ9LVxkXGQtXGRcZC9dLFsiWVlZWS1NTS1ERCIsL1xkezR9LVxkXGQtXGRcZC9dLFsiR0dHRy1bV11XVy1FIiwvXGR7NH0tV1xkXGQtXGQvXSxbIkdHR0ctW1ddV1ciLC9cZHs0fS1XXGRcZC8sITFdLFsiWVlZWS1EREQiLC9cZHs0fS1cZHszfS9dLFsiWVlZWS1NTSIsL1xkezR9LVxkXGQvLCExXSxbIllZWVlZWU1NREQiLC9bKy1dXGR7MTB9L10sWyJZWVlZTU1ERCIsL1xkezh9L10sWyJHR0dHW1ddV1dFIiwvXGR7NH1XXGR7M30vXSxbIkdHR0dbV11XVyIsL1xkezR9V1xkezJ9LywhMV0sWyJZWVlZREREIiwvXGR7N30vXV0saGU9W1siSEg6bW06c3MuU1NTUyIsL1xkXGQ6XGRcZDpcZFxkXC5cZCsvXSxbIkhIOm1tOnNzLFNTU1MiLC9cZFxkOlxkXGQ6XGRcZCxcZCsvXSxbIkhIOm1tOnNzIiwvXGRcZDpcZFxkOlxkXGQvXSxbIkhIOm1tIiwvXGRcZDpcZFxkL10sWyJISG1tc3MuU1NTUyIsL1xkXGRcZFxkXGRcZFwuXGQrL10sWyJISG1tc3MsU1NTUyIsL1xkXGRcZFxkXGRcZCxcZCsvXSxbIkhIbW1zcyIsL1xkXGRcZFxkXGRcZC9dLFsiSEhtbSIsL1xkXGRcZFxkL10sWyJISCIsL1xkXGQvXV0sZmU9L15cLz9EYXRlXCgoXC0/XGQrKS9pO2Z1bmN0aW9uIGRlKHQpe3ZhciBlLG4scixpLGEsbyxzPXQuX2ksYz1zZS5leGVjKHMpfHxjZS5leGVjKHMpO2lmKGMpe2ZvcihwKHQpLmlzbz0hMCxlPTAsbj1sZS5sZW5ndGg7ZTxuO2UrKylpZihsZVtlXVsxXS5leGVjKGNbMV0pKXtpPWxlW2VdWzBdLHI9ITEhPT1sZVtlXVsyXTticmVha31pZihudWxsPT1pKXJldHVybiB2b2lkKHQuX2lzVmFsaWQ9ITEpO2lmKGNbM10pe2ZvcihlPTAsbj1oZS5sZW5ndGg7ZTxuO2UrKylpZihoZVtlXVsxXS5leGVjKGNbM10pKXthPShjWzJdfHwiICIpK2hlW2VdWzBdO2JyZWFrfWlmKG51bGw9PWEpcmV0dXJuIHZvaWQodC5faXNWYWxpZD0hMSl9aWYoIXImJm51bGwhPWEpcmV0dXJuIHZvaWQodC5faXNWYWxpZD0hMSk7aWYoY1s0XSl7aWYoIXVlLmV4ZWMoY1s0XSkpcmV0dXJuIHZvaWQodC5faXNWYWxpZD0hMSk7bz0iWiJ9dC5fZj1pKyhhfHwiIikrKG98fCIiKSx2ZSh0KX1lbHNlIHQuX2lzVmFsaWQ9ITF9dmFyIHBlPS9eKD86KE1vbnxUdWV8V2VkfFRodXxGcml8U2F0fFN1biksP1xzKT8oXGR7MSwyfSlccyhKYW58RmVifE1hcnxBcHJ8TWF5fEp1bnxKdWx8QXVnfFNlcHxPY3R8Tm92fERlYylccyhcZHsyLDR9KVxzKFxkXGQpOihcZFxkKSg/OjooXGRcZCkpP1xzKD86KFVUfEdNVHxbRUNNUF1bU0RdVCl8KFtael0pfChbKy1dXGR7NH0pKSQvLGdlPXtVVDowLEdNVDowLEVEVDotMjQwLEVTVDotMzAwLENEVDotMzAwLENTVDotMzYwLE1EVDotMzYwLE1TVDotNDIwLFBEVDotNDIwLFBTVDotNDgwfTtmdW5jdGlvbiB5ZSh0KXt2YXIgZSxuLHIsaT1wZS5leGVjKHQuX2kucmVwbGFjZSgvXChbXildKlwpfFtcblx0XS9nLCIgIikucmVwbGFjZSgvKFxzXHMrKS9nLCIgIikucmVwbGFjZSgvXlxzXHMqLywiIikucmVwbGFjZSgvXHNccyokLywiIikpO2lmKGkpe3ZhciBhPWZ1bmN0aW9uKHQsZSxuLHIsaSxhKXt2YXIgbz1bZnVuY3Rpb24odCl7dmFyIGU9cGFyc2VJbnQodCwxMCk7cmV0dXJuIGU8PTQ5PzJlMytlOmU8PTk5OT8xOTAwK2U6ZX0odCksQ3QuaW5kZXhPZihlKSxwYXJzZUludChuLDEwKSxwYXJzZUludChyLDEwKSxwYXJzZUludChpLDEwKV07cmV0dXJuIGEmJm8ucHVzaChwYXJzZUludChhLDEwKSksb30oaVs0XSxpWzNdLGlbMl0saVs1XSxpWzZdLGlbN10pO2lmKG49YSxyPXQsKGU9aVsxXSkmJlJ0LmluZGV4T2YoZSkhPT1uZXcgRGF0ZShuWzBdLG5bMV0sblsyXSkuZ2V0RGF5KCkmJihwKHIpLndlZWtkYXlNaXNtYXRjaD0hMCwhKHIuX2lzVmFsaWQ9ITEpKSlyZXR1cm47dC5fYT1hLHQuX3R6bT1mdW5jdGlvbih0LGUsbil7aWYodClyZXR1cm4gZ2VbdF07aWYoZSlyZXR1cm4gMDt2YXIgcj1wYXJzZUludChuLDEwKSxpPXIlMTAwO3JldHVybihyLWkpLzEwMCo2MCtpfShpWzhdLGlbOV0saVsxMF0pLHQuX2Q9TnQuYXBwbHkobnVsbCx0Ll9hKSx0Ll9kLnNldFVUQ01pbnV0ZXModC5fZC5nZXRVVENNaW51dGVzKCktdC5fdHptKSxwKHQpLnJmYzI4MjI9ITB9ZWxzZSB0Ll9pc1ZhbGlkPSExfWZ1bmN0aW9uIHZlKHQpe2lmKHQuX2YhPT1pLklTT184NjAxKWlmKHQuX2YhPT1pLlJGQ18yODIyKXt0Ll9hPVtdLHAodCkuZW1wdHk9ITA7dmFyIGUsbixyLGEsbyxzLGMsdSxsPSIiK3QuX2ksZj1sLmxlbmd0aCxkPTA7Zm9yKHI9SCh0Ll9mLHQuX2xvY2FsZSkubWF0Y2goWSl8fFtdLGU9MDtlPHIubGVuZ3RoO2UrKylhPXJbZV0sKG49KGwubWF0Y2goaHQoYSx0KSl8fFtdKVswXSkmJigwPChvPWwuc3Vic3RyKDAsbC5pbmRleE9mKG4pKSkubGVuZ3RoJiZwKHQpLnVudXNlZElucHV0LnB1c2gobyksbD1sLnNsaWNlKGwuaW5kZXhPZihuKStuLmxlbmd0aCksZCs9bi5sZW5ndGgpLCRbYV0/KG4/cCh0KS5lbXB0eT0hMTpwKHQpLnVudXNlZFRva2Vucy5wdXNoKGEpLHM9YSx1PXQsbnVsbCE9KGM9bikmJmgoZHQscykmJmR0W3NdKGMsdS5fYSx1LHMpKTp0Ll9zdHJpY3QmJiFuJiZwKHQpLnVudXNlZFRva2Vucy5wdXNoKGEpO3AodCkuY2hhcnNMZWZ0T3Zlcj1mLWQsMDxsLmxlbmd0aCYmcCh0KS51bnVzZWRJbnB1dC5wdXNoKGwpLHQuX2FbM108PTEyJiYhMD09PXAodCkuYmlnSG91ciYmMDx0Ll9hWzNdJiYocCh0KS5iaWdIb3VyPXZvaWQgMCkscCh0KS5wYXJzZWREYXRlUGFydHM9dC5fYS5zbGljZSgwKSxwKHQpLm1lcmlkaWVtPXQuX21lcmlkaWVtLHQuX2FbM109ZnVuY3Rpb24odCxlLG4pe3ZhciByO3JldHVybiBudWxsPT1uP2U6bnVsbCE9dC5tZXJpZGllbUhvdXI/dC5tZXJpZGllbUhvdXIoZSxuKToobnVsbCE9dC5pc1BNJiYoKHI9dC5pc1BNKG4pKSYmZTwxMiYmKGUrPTEyKSxyfHwxMiE9PWV8fChlPTApKSxlKX0odC5fbG9jYWxlLHQuX2FbM10sdC5fbWVyaWRpZW0pLG9lKHQpLGllKHQpfWVsc2UgeWUodCk7ZWxzZSBkZSh0KX1mdW5jdGlvbiBtZSh0KXt2YXIgZSxuLHIsaCxkPXQuX2ksdj10Ll9mO3JldHVybiB0Ll9sb2NhbGU9dC5fbG9jYWxlfHxyZSh0Ll9sKSxudWxsPT09ZHx8dm9pZCAwPT09diYmIiI9PT1kP3koe251bGxJbnB1dDohMH0pOigic3RyaW5nIj09dHlwZW9mIGQmJih0Ll9pPWQ9dC5fbG9jYWxlLnByZXBhcnNlKGQpKSxfKGQpP25ldyB4KGllKGQpKToodShkKT90Ll9kPWQ6YSh2KT9mdW5jdGlvbih0KXt2YXIgZSxuLHIsaSxhO2lmKDA9PT10Ll9mLmxlbmd0aClyZXR1cm4gcCh0KS5pbnZhbGlkRm9ybWF0PSEwLHQuX2Q9bmV3IERhdGUoTmFOKTtmb3IoaT0wO2k8dC5fZi5sZW5ndGg7aSsrKWE9MCxlPW0oe30sdCksbnVsbCE9dC5fdXNlVVRDJiYoZS5fdXNlVVRDPXQuX3VzZVVUQyksZS5fZj10Ll9mW2ldLHZlKGUpLGcoZSkmJihhKz1wKGUpLmNoYXJzTGVmdE92ZXIsYSs9MTAqcChlKS51bnVzZWRUb2tlbnMubGVuZ3RoLHAoZSkuc2NvcmU9YSwobnVsbD09cnx8YTxyKSYmKHI9YSxuPWUpKTtmKHQsbnx8ZSl9KHQpOnY/dmUodCk6cyhuPShlPXQpLl9pKT9lLl9kPW5ldyBEYXRlKGkubm93KCkpOnUobik/ZS5fZD1uZXcgRGF0ZShuLnZhbHVlT2YoKSk6InN0cmluZyI9PXR5cGVvZiBuPyhyPWUsbnVsbD09PShoPWZlLmV4ZWMoci5faSkpPyhkZShyKSwhMT09PXIuX2lzVmFsaWQmJihkZWxldGUgci5faXNWYWxpZCx5ZShyKSwhMT09PXIuX2lzVmFsaWQmJihkZWxldGUgci5faXNWYWxpZCxpLmNyZWF0ZUZyb21JbnB1dEZhbGxiYWNrKHIpKSkpOnIuX2Q9bmV3IERhdGUoK2hbMV0pKTphKG4pPyhlLl9hPWwobi5zbGljZSgwKSwoZnVuY3Rpb24odCl7cmV0dXJuIHBhcnNlSW50KHQsMTApfSkpLG9lKGUpKTpvKG4pP2Z1bmN0aW9uKHQpe2lmKCF0Ll9kKXt2YXIgZT1QKHQuX2kpO3QuX2E9bChbZS55ZWFyLGUubW9udGgsZS5kYXl8fGUuZGF0ZSxlLmhvdXIsZS5taW51dGUsZS5zZWNvbmQsZS5taWxsaXNlY29uZF0sKGZ1bmN0aW9uKHQpe3JldHVybiB0JiZwYXJzZUludCh0LDEwKX0pKSxvZSh0KX19KGUpOmMobik/ZS5fZD1uZXcgRGF0ZShuKTppLmNyZWF0ZUZyb21JbnB1dEZhbGxiYWNrKGUpLGcodCl8fCh0Ll9kPW51bGwpLHQpKX1mdW5jdGlvbiBiZSh0LGUsbixyLGkpe3ZhciBzLGM9e307cmV0dXJuITAhPT1uJiYhMSE9PW58fChyPW4sbj12b2lkIDApLChvKHQpJiZmdW5jdGlvbih0KXtpZihPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcylyZXR1cm4gMD09PU9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHQpLmxlbmd0aDt2YXIgZTtmb3IoZSBpbiB0KWlmKHQuaGFzT3duUHJvcGVydHkoZSkpcmV0dXJuITE7cmV0dXJuITB9KHQpfHxhKHQpJiYwPT09dC5sZW5ndGgpJiYodD12b2lkIDApLGMuX2lzQU1vbWVudE9iamVjdD0hMCxjLl91c2VVVEM9Yy5faXNVVEM9aSxjLl9sPW4sYy5faT10LGMuX2Y9ZSxjLl9zdHJpY3Q9ciwocz1uZXcgeChpZShtZShjKSkpKS5fbmV4dERheSYmKHMuYWRkKDEsImQiKSxzLl9uZXh0RGF5PXZvaWQgMCksc31mdW5jdGlvbiB4ZSh0LGUsbixyKXtyZXR1cm4gYmUodCxlLG4sciwhMSl9aS5jcmVhdGVGcm9tSW5wdXRGYWxsYmFjaz1DKCJ2YWx1ZSBwcm92aWRlZCBpcyBub3QgaW4gYSByZWNvZ25pemVkIFJGQzI4MjIgb3IgSVNPIGZvcm1hdC4gbW9tZW50IGNvbnN0cnVjdGlvbiBmYWxscyBiYWNrIHRvIGpzIERhdGUoKSwgd2hpY2ggaXMgbm90IHJlbGlhYmxlIGFjcm9zcyBhbGwgYnJvd3NlcnMgYW5kIHZlcnNpb25zLiBOb24gUkZDMjgyMi9JU08gZGF0ZSBmb3JtYXRzIGFyZSBkaXNjb3VyYWdlZCBhbmQgd2lsbCBiZSByZW1vdmVkIGluIGFuIHVwY29taW5nIG1ham9yIHJlbGVhc2UuIFBsZWFzZSByZWZlciB0byBodHRwOi8vbW9tZW50anMuY29tL2d1aWRlcy8jL3dhcm5pbmdzL2pzLWRhdGUvIGZvciBtb3JlIGluZm8uIiwoZnVuY3Rpb24odCl7dC5fZD1uZXcgRGF0ZSh0Ll9pKyh0Ll91c2VVVEM/IiBVVEMiOiIiKSl9KSksaS5JU09fODYwMT1mdW5jdGlvbigpe30saS5SRkNfMjgyMj1mdW5jdGlvbigpe307dmFyIF9lPUMoIm1vbWVudCgpLm1pbiBpcyBkZXByZWNhdGVkLCB1c2UgbW9tZW50Lm1heCBpbnN0ZWFkLiBodHRwOi8vbW9tZW50anMuY29tL2d1aWRlcy8jL3dhcm5pbmdzL21pbi1tYXgvIiwoZnVuY3Rpb24oKXt2YXIgdD14ZS5hcHBseShudWxsLGFyZ3VtZW50cyk7cmV0dXJuIHRoaXMuaXNWYWxpZCgpJiZ0LmlzVmFsaWQoKT90PHRoaXM/dGhpczp0OnkoKX0pKSxrZT1DKCJtb21lbnQoKS5tYXggaXMgZGVwcmVjYXRlZCwgdXNlIG1vbWVudC5taW4gaW5zdGVhZC4gaHR0cDovL21vbWVudGpzLmNvbS9ndWlkZXMvIy93YXJuaW5ncy9taW4tbWF4LyIsKGZ1bmN0aW9uKCl7dmFyIHQ9eGUuYXBwbHkobnVsbCxhcmd1bWVudHMpO3JldHVybiB0aGlzLmlzVmFsaWQoKSYmdC5pc1ZhbGlkKCk/dGhpczx0P3RoaXM6dDp5KCl9KSk7ZnVuY3Rpb24gd2UodCxlKXt2YXIgbixyO2lmKDE9PT1lLmxlbmd0aCYmYShlWzBdKSYmKGU9ZVswXSksIWUubGVuZ3RoKXJldHVybiB4ZSgpO2ZvcihuPWVbMF0scj0xO3I8ZS5sZW5ndGg7KytyKWVbcl0uaXNWYWxpZCgpJiYhZVtyXVt0XShuKXx8KG49ZVtyXSk7cmV0dXJuIG59dmFyIEVlPVsieWVhciIsInF1YXJ0ZXIiLCJtb250aCIsIndlZWsiLCJkYXkiLCJob3VyIiwibWludXRlIiwic2Vjb25kIiwibWlsbGlzZWNvbmQiXTtmdW5jdGlvbiBUZSh0KXt2YXIgZT1QKHQpLG49ZS55ZWFyfHwwLHI9ZS5xdWFydGVyfHwwLGk9ZS5tb250aHx8MCxhPWUud2Vla3x8ZS5pc29XZWVrfHwwLG89ZS5kYXl8fDAscz1lLmhvdXJ8fDAsYz1lLm1pbnV0ZXx8MCx1PWUuc2Vjb25kfHwwLGw9ZS5taWxsaXNlY29uZHx8MDt0aGlzLl9pc1ZhbGlkPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZSBpbiB0KWlmKC0xPT09bXQuY2FsbChFZSxlKXx8bnVsbCE9dFtlXSYmaXNOYU4odFtlXSkpcmV0dXJuITE7Zm9yKHZhciBuPSExLHI9MDtyPEVlLmxlbmd0aDsrK3IpaWYodFtFZVtyXV0pe2lmKG4pcmV0dXJuITE7cGFyc2VGbG9hdCh0W0VlW3JdXSkhPT13KHRbRWVbcl1dKSYmKG49ITApfXJldHVybiEwfShlKSx0aGlzLl9taWxsaXNlY29uZHM9K2wrMWUzKnUrNmU0KmMrMWUzKnMqNjAqNjAsdGhpcy5fZGF5cz0rbys3KmEsdGhpcy5fbW9udGhzPStpKzMqcisxMipuLHRoaXMuX2RhdGE9e30sdGhpcy5fbG9jYWxlPXJlKCksdGhpcy5fYnViYmxlKCl9ZnVuY3Rpb24gQ2UodCl7cmV0dXJuIHQgaW5zdGFuY2VvZiBUZX1mdW5jdGlvbiBTZSh0KXtyZXR1cm4gdDwwPy0xKk1hdGgucm91bmQoLTEqdCk6TWF0aC5yb3VuZCh0KX1mdW5jdGlvbiBBZSh0LGUpe1codCwwLDAsKGZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy51dGNPZmZzZXQoKSxuPSIrIjtyZXR1cm4gdDwwJiYodD0tdCxuPSItIiksbitSKH5+KHQvNjApLDIpK2UrUih+fnQlNjAsMil9KSl9QWUoIloiLCI6IiksQWUoIlpaIiwiIiksbHQoIloiLHN0KSxsdCgiWloiLHN0KSxwdChbIloiLCJaWiJdLChmdW5jdGlvbih0LGUsbil7bi5fdXNlVVRDPSEwLG4uX3R6bT1PZShzdCx0KX0pKTt2YXIgTWU9LyhbXCtcLV18XGRcZCkvZ2k7ZnVuY3Rpb24gT2UodCxlKXt2YXIgbj0oZXx8IiIpLm1hdGNoKHQpO2lmKG51bGw9PT1uKXJldHVybiBudWxsO3ZhciByPSgobltuLmxlbmd0aC0xXXx8W10pKyIiKS5tYXRjaChNZSl8fFsiLSIsMCwwXSxpPTYwKnJbMV0rdyhyWzJdKTtyZXR1cm4gMD09PWk/MDoiKyI9PT1yWzBdP2k6LWl9ZnVuY3Rpb24gRGUodCxlKXt2YXIgbixyO3JldHVybiBlLl9pc1VUQz8obj1lLmNsb25lKCkscj0oXyh0KXx8dSh0KT90LnZhbHVlT2YoKTp4ZSh0KS52YWx1ZU9mKCkpLW4udmFsdWVPZigpLG4uX2Quc2V0VGltZShuLl9kLnZhbHVlT2YoKStyKSxpLnVwZGF0ZU9mZnNldChuLCExKSxuKTp4ZSh0KS5sb2NhbCgpfWZ1bmN0aW9uIE5lKHQpe3JldHVybiAxNSotTWF0aC5yb3VuZCh0Ll9kLmdldFRpbWV6b25lT2Zmc2V0KCkvMTUpfWZ1bmN0aW9uIEJlKCl7cmV0dXJuISF0aGlzLmlzVmFsaWQoKSYmdGhpcy5faXNVVEMmJjA9PT10aGlzLl9vZmZzZXR9aS51cGRhdGVPZmZzZXQ9ZnVuY3Rpb24oKXt9O3ZhciBMZT0vXihcLXxcKyk/KD86KFxkKilbLiBdKT8oXGQrKVw6KFxkKykoPzpcOihcZCspKFwuXGQqKT8pPyQvLEZlPS9eKC18XCspP1AoPzooWy0rXT9bMC05LC5dKilZKT8oPzooWy0rXT9bMC05LC5dKilNKT8oPzooWy0rXT9bMC05LC5dKilXKT8oPzooWy0rXT9bMC05LC5dKilEKT8oPzpUKD86KFstK10/WzAtOSwuXSopSCk/KD86KFstK10/WzAtOSwuXSopTSk/KD86KFstK10/WzAtOSwuXSopUyk/KT8kLztmdW5jdGlvbiBQZSh0LGUpe3ZhciBuLHIsaSxhPXQsbz1udWxsO3JldHVybiBDZSh0KT9hPXttczp0Ll9taWxsaXNlY29uZHMsZDp0Ll9kYXlzLE06dC5fbW9udGhzfTpjKHQpPyhhPXt9LGU/YVtlXT10OmEubWlsbGlzZWNvbmRzPXQpOihvPUxlLmV4ZWModCkpPyhuPSItIj09PW9bMV0/LTE6MSxhPXt5OjAsZDp3KG9bMl0pKm4saDp3KG9bM10pKm4sbTp3KG9bNF0pKm4sczp3KG9bNV0pKm4sbXM6dyhTZSgxZTMqb1s2XSkpKm59KToobz1GZS5leGVjKHQpKT8obj0iLSI9PT1vWzFdPy0xOjEsYT17eTpJZShvWzJdLG4pLE06SWUob1szXSxuKSx3OkllKG9bNF0sbiksZDpJZShvWzVdLG4pLGg6SWUob1s2XSxuKSxtOkllKG9bN10sbiksczpJZShvWzhdLG4pfSk6bnVsbD09YT9hPXt9OiJvYmplY3QiPT10eXBlb2YgYSYmKCJmcm9tImluIGF8fCJ0byJpbiBhKSYmKGk9ZnVuY3Rpb24odCxlKXt2YXIgbjtyZXR1cm4gdC5pc1ZhbGlkKCkmJmUuaXNWYWxpZCgpPyhlPURlKGUsdCksdC5pc0JlZm9yZShlKT9uPWplKHQsZSk6KChuPWplKGUsdCkpLm1pbGxpc2Vjb25kcz0tbi5taWxsaXNlY29uZHMsbi5tb250aHM9LW4ubW9udGhzKSxuKTp7bWlsbGlzZWNvbmRzOjAsbW9udGhzOjB9fSh4ZShhLmZyb20pLHhlKGEudG8pKSwoYT17fSkubXM9aS5taWxsaXNlY29uZHMsYS5NPWkubW9udGhzKSxyPW5ldyBUZShhKSxDZSh0KSYmaCh0LCJfbG9jYWxlIikmJihyLl9sb2NhbGU9dC5fbG9jYWxlKSxyfWZ1bmN0aW9uIEllKHQsZSl7dmFyIG49dCYmcGFyc2VGbG9hdCh0LnJlcGxhY2UoIiwiLCIuIikpO3JldHVybihpc05hTihuKT8wOm4pKmV9ZnVuY3Rpb24gamUodCxlKXt2YXIgbj17fTtyZXR1cm4gbi5tb250aHM9ZS5tb250aCgpLXQubW9udGgoKSsxMiooZS55ZWFyKCktdC55ZWFyKCkpLHQuY2xvbmUoKS5hZGQobi5tb250aHMsIk0iKS5pc0FmdGVyKGUpJiYtLW4ubW9udGhzLG4ubWlsbGlzZWNvbmRzPStlLSt0LmNsb25lKCkuYWRkKG4ubW9udGhzLCJNIiksbn1mdW5jdGlvbiBSZSh0LGUpe3JldHVybiBmdW5jdGlvbihuLHIpe3ZhciBpO3JldHVybiBudWxsPT09cnx8aXNOYU4oK3IpfHwoTShlLCJtb21lbnQoKS4iK2UrIihwZXJpb2QsIG51bWJlcikgaXMgZGVwcmVjYXRlZC4gUGxlYXNlIHVzZSBtb21lbnQoKS4iK2UrIihudW1iZXIsIHBlcmlvZCkuIFNlZSBodHRwOi8vbW9tZW50anMuY29tL2d1aWRlcy8jL3dhcm5pbmdzL2FkZC1pbnZlcnRlZC1wYXJhbS8gZm9yIG1vcmUgaW5mby4iKSxpPW4sbj1yLHI9aSksWWUodGhpcyxQZShuPSJzdHJpbmciPT10eXBlb2Ygbj8rbjpuLHIpLHQpLHRoaXN9fWZ1bmN0aW9uIFllKHQsZSxuLHIpe3ZhciBhPWUuX21pbGxpc2Vjb25kcyxvPVNlKGUuX2RheXMpLHM9U2UoZS5fbW9udGhzKTt0LmlzVmFsaWQoKSYmKHI9bnVsbD09cnx8cixzJiZTdCh0LF90KHQsIk1vbnRoIikrcypuKSxvJiZrdCh0LCJEYXRlIixfdCh0LCJEYXRlIikrbypuKSxhJiZ0Ll9kLnNldFRpbWUodC5fZC52YWx1ZU9mKCkrYSpuKSxyJiZpLnVwZGF0ZU9mZnNldCh0LG98fHMpKX1QZS5mbj1UZS5wcm90b3R5cGUsUGUuaW52YWxpZD1mdW5jdGlvbigpe3JldHVybiBQZShOYU4pfTt2YXIgemU9UmUoMSwiYWRkIiksVWU9UmUoLTEsInN1YnRyYWN0Iik7ZnVuY3Rpb24gJGUodCxlKXt2YXIgbj0xMiooZS55ZWFyKCktdC55ZWFyKCkpKyhlLm1vbnRoKCktdC5tb250aCgpKSxyPXQuY2xvbmUoKS5hZGQobiwibW9udGhzIik7cmV0dXJuLShuKyhlLXI8MD8oZS1yKS8oci10LmNsb25lKCkuYWRkKG4tMSwibW9udGhzIikpOihlLXIpLyh0LmNsb25lKCkuYWRkKG4rMSwibW9udGhzIiktcikpKXx8MH1mdW5jdGlvbiBXZSh0KXt2YXIgZTtyZXR1cm4gdm9pZCAwPT09dD90aGlzLl9sb2NhbGUuX2FiYnI6KG51bGwhPShlPXJlKHQpKSYmKHRoaXMuX2xvY2FsZT1lKSx0aGlzKX1pLmRlZmF1bHRGb3JtYXQ9IllZWVktTU0tRERUSEg6bW06c3NaIixpLmRlZmF1bHRGb3JtYXRVdGM9IllZWVktTU0tRERUSEg6bW06c3NbWl0iO3ZhciBWZT1DKCJtb21lbnQoKS5sYW5nKCkgaXMgZGVwcmVjYXRlZC4gSW5zdGVhZCwgdXNlIG1vbWVudCgpLmxvY2FsZURhdGEoKSB0byBnZXQgdGhlIGxhbmd1YWdlIGNvbmZpZ3VyYXRpb24uIFVzZSBtb21lbnQoKS5sb2NhbGUoKSB0byBjaGFuZ2UgbGFuZ3VhZ2VzLiIsKGZ1bmN0aW9uKHQpe3JldHVybiB2b2lkIDA9PT10P3RoaXMubG9jYWxlRGF0YSgpOnRoaXMubG9jYWxlKHQpfSkpO2Z1bmN0aW9uIEhlKCl7cmV0dXJuIHRoaXMuX2xvY2FsZX12YXIgR2U9MTI2MjI3ODA4ZTU7ZnVuY3Rpb24gcWUodCxlKXtyZXR1cm4odCVlK2UpJWV9ZnVuY3Rpb24gWGUodCxlLG4pe3JldHVybiB0PDEwMCYmMDw9dD9uZXcgRGF0ZSh0KzQwMCxlLG4pLUdlOm5ldyBEYXRlKHQsZSxuKS52YWx1ZU9mKCl9ZnVuY3Rpb24gWmUodCxlLG4pe3JldHVybiB0PDEwMCYmMDw9dD9EYXRlLlVUQyh0KzQwMCxlLG4pLUdlOkRhdGUuVVRDKHQsZSxuKX1mdW5jdGlvbiBKZSh0LGUpe1coMCxbdCx0Lmxlbmd0aF0sMCxlKX1mdW5jdGlvbiBRZSh0LGUsbixyLGkpe3ZhciBhO3JldHVybiBudWxsPT10P0Z0KHRoaXMscixpKS55ZWFyOigoYT1QdCh0LHIsaSkpPGUmJihlPWEpLGZ1bmN0aW9uKHQsZSxuLHIsaSl7dmFyIGE9THQodCxlLG4scixpKSxvPU50KGEueWVhciwwLGEuZGF5T2ZZZWFyKTtyZXR1cm4gdGhpcy55ZWFyKG8uZ2V0VVRDRnVsbFllYXIoKSksdGhpcy5tb250aChvLmdldFVUQ01vbnRoKCkpLHRoaXMuZGF0ZShvLmdldFVUQ0RhdGUoKSksdGhpc30uY2FsbCh0aGlzLHQsZSxuLHIsaSkpfVcoMCxbImdnIiwyXSwwLChmdW5jdGlvbigpe3JldHVybiB0aGlzLndlZWtZZWFyKCklMTAwfSkpLFcoMCxbIkdHIiwyXSwwLChmdW5jdGlvbigpe3JldHVybiB0aGlzLmlzb1dlZWtZZWFyKCklMTAwfSkpLEplKCJnZ2dnIiwid2Vla1llYXIiKSxKZSgiZ2dnZ2ciLCJ3ZWVrWWVhciIpLEplKCJHR0dHIiwiaXNvV2Vla1llYXIiKSxKZSgiR0dHR0ciLCJpc29XZWVrWWVhciIpLEwoIndlZWtZZWFyIiwiZ2ciKSxMKCJpc29XZWVrWWVhciIsIkdHIiksaigid2Vla1llYXIiLDEpLGooImlzb1dlZWtZZWFyIiwxKSxsdCgiRyIsYXQpLGx0KCJnIixhdCksbHQoIkdHIixRLHEpLGx0KCJnZyIsUSxxKSxsdCgiR0dHRyIsbnQsWiksbHQoImdnZ2ciLG50LFopLGx0KCJHR0dHRyIscnQsSiksbHQoImdnZ2dnIixydCxKKSxndChbImdnZ2ciLCJnZ2dnZyIsIkdHR0ciLCJHR0dHRyJdLChmdW5jdGlvbih0LGUsbixyKXtlW3Iuc3Vic3RyKDAsMildPXcodCl9KSksZ3QoWyJnZyIsIkdHIl0sKGZ1bmN0aW9uKHQsZSxuLHIpe2Vbcl09aS5wYXJzZVR3b0RpZ2l0WWVhcih0KX0pKSxXKCJRIiwwLCJRbyIsInF1YXJ0ZXIiKSxMKCJxdWFydGVyIiwiUSIpLGooInF1YXJ0ZXIiLDcpLGx0KCJRIixHKSxwdCgiUSIsKGZ1bmN0aW9uKHQsZSl7ZVsxXT0zKih3KHQpLTEpfSkpLFcoIkQiLFsiREQiLDJdLCJEbyIsImRhdGUiKSxMKCJkYXRlIiwiRCIpLGooImRhdGUiLDkpLGx0KCJEIixRKSxsdCgiREQiLFEscSksbHQoIkRvIiwoZnVuY3Rpb24odCxlKXtyZXR1cm4gdD9lLl9kYXlPZk1vbnRoT3JkaW5hbFBhcnNlfHxlLl9vcmRpbmFsUGFyc2U6ZS5fZGF5T2ZNb250aE9yZGluYWxQYXJzZUxlbmllbnR9KSkscHQoWyJEIiwiREQiXSwyKSxwdCgiRG8iLChmdW5jdGlvbih0LGUpe2VbMl09dyh0Lm1hdGNoKFEpWzBdKX0pKTt2YXIgS2U9eHQoIkRhdGUiLCEwKTtXKCJEREQiLFsiRERERCIsM10sIkRERG8iLCJkYXlPZlllYXIiKSxMKCJkYXlPZlllYXIiLCJEREQiKSxqKCJkYXlPZlllYXIiLDQpLGx0KCJEREQiLGV0KSxsdCgiRERERCIsWCkscHQoWyJEREQiLCJEREREIl0sKGZ1bmN0aW9uKHQsZSxuKXtuLl9kYXlPZlllYXI9dyh0KX0pKSxXKCJtIixbIm1tIiwyXSwwLCJtaW51dGUiKSxMKCJtaW51dGUiLCJtIiksaigibWludXRlIiwxNCksbHQoIm0iLFEpLGx0KCJtbSIsUSxxKSxwdChbIm0iLCJtbSJdLDQpO3ZhciB0bj14dCgiTWludXRlcyIsITEpO1coInMiLFsic3MiLDJdLDAsInNlY29uZCIpLEwoInNlY29uZCIsInMiKSxqKCJzZWNvbmQiLDE1KSxsdCgicyIsUSksbHQoInNzIixRLHEpLHB0KFsicyIsInNzIl0sNSk7dmFyIGVuLG5uPXh0KCJTZWNvbmRzIiwhMSk7Zm9yKFcoIlMiLDAsMCwoZnVuY3Rpb24oKXtyZXR1cm5+fih0aGlzLm1pbGxpc2Vjb25kKCkvMTAwKX0pKSxXKDAsWyJTUyIsMl0sMCwoZnVuY3Rpb24oKXtyZXR1cm5+fih0aGlzLm1pbGxpc2Vjb25kKCkvMTApfSkpLFcoMCxbIlNTUyIsM10sMCwibWlsbGlzZWNvbmQiKSxXKDAsWyJTU1NTIiw0XSwwLChmdW5jdGlvbigpe3JldHVybiAxMCp0aGlzLm1pbGxpc2Vjb25kKCl9KSksVygwLFsiU1NTU1MiLDVdLDAsKGZ1bmN0aW9uKCl7cmV0dXJuIDEwMCp0aGlzLm1pbGxpc2Vjb25kKCl9KSksVygwLFsiU1NTU1NTIiw2XSwwLChmdW5jdGlvbigpe3JldHVybiAxZTMqdGhpcy5taWxsaXNlY29uZCgpfSkpLFcoMCxbIlNTU1NTU1MiLDddLDAsKGZ1bmN0aW9uKCl7cmV0dXJuIDFlNCp0aGlzLm1pbGxpc2Vjb25kKCl9KSksVygwLFsiU1NTU1NTU1MiLDhdLDAsKGZ1bmN0aW9uKCl7cmV0dXJuIDFlNSp0aGlzLm1pbGxpc2Vjb25kKCl9KSksVygwLFsiU1NTU1NTU1NTIiw5XSwwLChmdW5jdGlvbigpe3JldHVybiAxZTYqdGhpcy5taWxsaXNlY29uZCgpfSkpLEwoIm1pbGxpc2Vjb25kIiwibXMiKSxqKCJtaWxsaXNlY29uZCIsMTYpLGx0KCJTIixldCxHKSxsdCgiU1MiLGV0LHEpLGx0KCJTU1MiLGV0LFgpLGVuPSJTU1NTIjtlbi5sZW5ndGg8PTk7ZW4rPSJTIilsdChlbixpdCk7ZnVuY3Rpb24gcm4odCxlKXtlWzZdPXcoMWUzKigiMC4iK3QpKX1mb3IoZW49IlMiO2VuLmxlbmd0aDw9OTtlbis9IlMiKXB0KGVuLHJuKTt2YXIgYW49eHQoIk1pbGxpc2Vjb25kcyIsITEpO1coInoiLDAsMCwiem9uZUFiYnIiKSxXKCJ6eiIsMCwwLCJ6b25lTmFtZSIpO3ZhciBvbj14LnByb3RvdHlwZTtmdW5jdGlvbiBzbih0KXtyZXR1cm4gdH1vbi5hZGQ9emUsb24uY2FsZW5kYXI9ZnVuY3Rpb24odCxlKXt2YXIgbj10fHx4ZSgpLHI9RGUobix0aGlzKS5zdGFydE9mKCJkYXkiKSxhPWkuY2FsZW5kYXJGb3JtYXQodGhpcyxyKXx8InNhbWVFbHNlIixvPWUmJihPKGVbYV0pP2VbYV0uY2FsbCh0aGlzLG4pOmVbYV0pO3JldHVybiB0aGlzLmZvcm1hdChvfHx0aGlzLmxvY2FsZURhdGEoKS5jYWxlbmRhcihhLHRoaXMseGUobikpKX0sb24uY2xvbmU9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHgodGhpcyl9LG9uLmRpZmY9ZnVuY3Rpb24odCxlLG4pe3ZhciByLGksYTtpZighdGhpcy5pc1ZhbGlkKCkpcmV0dXJuIE5hTjtpZighKHI9RGUodCx0aGlzKSkuaXNWYWxpZCgpKXJldHVybiBOYU47c3dpdGNoKGk9NmU0KihyLnV0Y09mZnNldCgpLXRoaXMudXRjT2Zmc2V0KCkpLGU9RihlKSl7Y2FzZSJ5ZWFyIjphPSRlKHRoaXMscikvMTI7YnJlYWs7Y2FzZSJtb250aCI6YT0kZSh0aGlzLHIpO2JyZWFrO2Nhc2UicXVhcnRlciI6YT0kZSh0aGlzLHIpLzM7YnJlYWs7Y2FzZSJzZWNvbmQiOmE9KHRoaXMtcikvMWUzO2JyZWFrO2Nhc2UibWludXRlIjphPSh0aGlzLXIpLzZlNDticmVhaztjYXNlImhvdXIiOmE9KHRoaXMtcikvMzZlNTticmVhaztjYXNlImRheSI6YT0odGhpcy1yLWkpLzg2NGU1O2JyZWFrO2Nhc2Uid2VlayI6YT0odGhpcy1yLWkpLzYwNDhlNTticmVhaztkZWZhdWx0OmE9dGhpcy1yfXJldHVybiBuP2E6ayhhKX0sb24uZW5kT2Y9ZnVuY3Rpb24odCl7dmFyIGU7aWYodm9pZCAwPT09KHQ9Rih0KSl8fCJtaWxsaXNlY29uZCI9PT10fHwhdGhpcy5pc1ZhbGlkKCkpcmV0dXJuIHRoaXM7dmFyIG49dGhpcy5faXNVVEM/WmU6WGU7c3dpdGNoKHQpe2Nhc2UieWVhciI6ZT1uKHRoaXMueWVhcigpKzEsMCwxKS0xO2JyZWFrO2Nhc2UicXVhcnRlciI6ZT1uKHRoaXMueWVhcigpLHRoaXMubW9udGgoKS10aGlzLm1vbnRoKCklMyszLDEpLTE7YnJlYWs7Y2FzZSJtb250aCI6ZT1uKHRoaXMueWVhcigpLHRoaXMubW9udGgoKSsxLDEpLTE7YnJlYWs7Y2FzZSJ3ZWVrIjplPW4odGhpcy55ZWFyKCksdGhpcy5tb250aCgpLHRoaXMuZGF0ZSgpLXRoaXMud2Vla2RheSgpKzcpLTE7YnJlYWs7Y2FzZSJpc29XZWVrIjplPW4odGhpcy55ZWFyKCksdGhpcy5tb250aCgpLHRoaXMuZGF0ZSgpLSh0aGlzLmlzb1dlZWtkYXkoKS0xKSs3KS0xO2JyZWFrO2Nhc2UiZGF5IjpjYXNlImRhdGUiOmU9bih0aGlzLnllYXIoKSx0aGlzLm1vbnRoKCksdGhpcy5kYXRlKCkrMSktMTticmVhaztjYXNlImhvdXIiOmU9dGhpcy5fZC52YWx1ZU9mKCksZSs9MzZlNS1xZShlKyh0aGlzLl9pc1VUQz8wOjZlNCp0aGlzLnV0Y09mZnNldCgpKSwzNmU1KS0xO2JyZWFrO2Nhc2UibWludXRlIjplPXRoaXMuX2QudmFsdWVPZigpLGUrPTZlNC1xZShlLDZlNCktMTticmVhaztjYXNlInNlY29uZCI6ZT10aGlzLl9kLnZhbHVlT2YoKSxlKz0xZTMtcWUoZSwxZTMpLTF9cmV0dXJuIHRoaXMuX2Quc2V0VGltZShlKSxpLnVwZGF0ZU9mZnNldCh0aGlzLCEwKSx0aGlzfSxvbi5mb3JtYXQ9ZnVuY3Rpb24odCl7dHx8KHQ9dGhpcy5pc1V0YygpP2kuZGVmYXVsdEZvcm1hdFV0YzppLmRlZmF1bHRGb3JtYXQpO3ZhciBlPVYodGhpcyx0KTtyZXR1cm4gdGhpcy5sb2NhbGVEYXRhKCkucG9zdGZvcm1hdChlKX0sb24uZnJvbT1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLmlzVmFsaWQoKSYmKF8odCkmJnQuaXNWYWxpZCgpfHx4ZSh0KS5pc1ZhbGlkKCkpP1BlKHt0bzp0aGlzLGZyb206dH0pLmxvY2FsZSh0aGlzLmxvY2FsZSgpKS5odW1hbml6ZSghZSk6dGhpcy5sb2NhbGVEYXRhKCkuaW52YWxpZERhdGUoKX0sb24uZnJvbU5vdz1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5mcm9tKHhlKCksdCl9LG9uLnRvPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuaXNWYWxpZCgpJiYoXyh0KSYmdC5pc1ZhbGlkKCl8fHhlKHQpLmlzVmFsaWQoKSk/UGUoe2Zyb206dGhpcyx0bzp0fSkubG9jYWxlKHRoaXMubG9jYWxlKCkpLmh1bWFuaXplKCFlKTp0aGlzLmxvY2FsZURhdGEoKS5pbnZhbGlkRGF0ZSgpfSxvbi50b05vdz1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy50byh4ZSgpLHQpfSxvbi5nZXQ9ZnVuY3Rpb24odCl7cmV0dXJuIE8odGhpc1t0PUYodCldKT90aGlzW3RdKCk6dGhpc30sb24uaW52YWxpZEF0PWZ1bmN0aW9uKCl7cmV0dXJuIHAodGhpcykub3ZlcmZsb3d9LG9uLmlzQWZ0ZXI9ZnVuY3Rpb24odCxlKXt2YXIgbj1fKHQpP3Q6eGUodCk7cmV0dXJuISghdGhpcy5pc1ZhbGlkKCl8fCFuLmlzVmFsaWQoKSkmJigibWlsbGlzZWNvbmQiPT09KGU9RihlKXx8Im1pbGxpc2Vjb25kIik/dGhpcy52YWx1ZU9mKCk+bi52YWx1ZU9mKCk6bi52YWx1ZU9mKCk8dGhpcy5jbG9uZSgpLnN0YXJ0T2YoZSkudmFsdWVPZigpKX0sb24uaXNCZWZvcmU9ZnVuY3Rpb24odCxlKXt2YXIgbj1fKHQpP3Q6eGUodCk7cmV0dXJuISghdGhpcy5pc1ZhbGlkKCl8fCFuLmlzVmFsaWQoKSkmJigibWlsbGlzZWNvbmQiPT09KGU9RihlKXx8Im1pbGxpc2Vjb25kIik/dGhpcy52YWx1ZU9mKCk8bi52YWx1ZU9mKCk6dGhpcy5jbG9uZSgpLmVuZE9mKGUpLnZhbHVlT2YoKTxuLnZhbHVlT2YoKSl9LG9uLmlzQmV0d2Vlbj1mdW5jdGlvbih0LGUsbixyKXt2YXIgaT1fKHQpP3Q6eGUodCksYT1fKGUpP2U6eGUoZSk7cmV0dXJuISEodGhpcy5pc1ZhbGlkKCkmJmkuaXNWYWxpZCgpJiZhLmlzVmFsaWQoKSkmJigiKCI9PT0ocj1yfHwiKCkiKVswXT90aGlzLmlzQWZ0ZXIoaSxuKTohdGhpcy5pc0JlZm9yZShpLG4pKSYmKCIpIj09PXJbMV0/dGhpcy5pc0JlZm9yZShhLG4pOiF0aGlzLmlzQWZ0ZXIoYSxuKSl9LG9uLmlzU2FtZT1mdW5jdGlvbih0LGUpe3ZhciBuLHI9Xyh0KT90OnhlKHQpO3JldHVybiEoIXRoaXMuaXNWYWxpZCgpfHwhci5pc1ZhbGlkKCkpJiYoIm1pbGxpc2Vjb25kIj09PShlPUYoZSl8fCJtaWxsaXNlY29uZCIpP3RoaXMudmFsdWVPZigpPT09ci52YWx1ZU9mKCk6KG49ci52YWx1ZU9mKCksdGhpcy5jbG9uZSgpLnN0YXJ0T2YoZSkudmFsdWVPZigpPD1uJiZuPD10aGlzLmNsb25lKCkuZW5kT2YoZSkudmFsdWVPZigpKSl9LG9uLmlzU2FtZU9yQWZ0ZXI9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5pc1NhbWUodCxlKXx8dGhpcy5pc0FmdGVyKHQsZSl9LG9uLmlzU2FtZU9yQmVmb3JlPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuaXNTYW1lKHQsZSl8fHRoaXMuaXNCZWZvcmUodCxlKX0sb24uaXNWYWxpZD1mdW5jdGlvbigpe3JldHVybiBnKHRoaXMpfSxvbi5sYW5nPVZlLG9uLmxvY2FsZT1XZSxvbi5sb2NhbGVEYXRhPUhlLG9uLm1heD1rZSxvbi5taW49X2Usb24ucGFyc2luZ0ZsYWdzPWZ1bmN0aW9uKCl7cmV0dXJuIGYoe30scCh0aGlzKSl9LG9uLnNldD1mdW5jdGlvbih0LGUpe2lmKCJvYmplY3QiPT10eXBlb2YgdClmb3IodmFyIG49ZnVuY3Rpb24odCl7dmFyIGU9W107Zm9yKHZhciBuIGluIHQpZS5wdXNoKHt1bml0Om4scHJpb3JpdHk6SVtuXX0pO3JldHVybiBlLnNvcnQoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQucHJpb3JpdHktZS5wcmlvcml0eX0pKSxlfSh0PVAodCkpLHI9MDtyPG4ubGVuZ3RoO3IrKyl0aGlzW25bcl0udW5pdF0odFtuW3JdLnVuaXRdKTtlbHNlIGlmKE8odGhpc1t0PUYodCldKSlyZXR1cm4gdGhpc1t0XShlKTtyZXR1cm4gdGhpc30sb24uc3RhcnRPZj1mdW5jdGlvbih0KXt2YXIgZTtpZih2b2lkIDA9PT0odD1GKHQpKXx8Im1pbGxpc2Vjb25kIj09PXR8fCF0aGlzLmlzVmFsaWQoKSlyZXR1cm4gdGhpczt2YXIgbj10aGlzLl9pc1VUQz9aZTpYZTtzd2l0Y2godCl7Y2FzZSJ5ZWFyIjplPW4odGhpcy55ZWFyKCksMCwxKTticmVhaztjYXNlInF1YXJ0ZXIiOmU9bih0aGlzLnllYXIoKSx0aGlzLm1vbnRoKCktdGhpcy5tb250aCgpJTMsMSk7YnJlYWs7Y2FzZSJtb250aCI6ZT1uKHRoaXMueWVhcigpLHRoaXMubW9udGgoKSwxKTticmVhaztjYXNlIndlZWsiOmU9bih0aGlzLnllYXIoKSx0aGlzLm1vbnRoKCksdGhpcy5kYXRlKCktdGhpcy53ZWVrZGF5KCkpO2JyZWFrO2Nhc2UiaXNvV2VlayI6ZT1uKHRoaXMueWVhcigpLHRoaXMubW9udGgoKSx0aGlzLmRhdGUoKS0odGhpcy5pc29XZWVrZGF5KCktMSkpO2JyZWFrO2Nhc2UiZGF5IjpjYXNlImRhdGUiOmU9bih0aGlzLnllYXIoKSx0aGlzLm1vbnRoKCksdGhpcy5kYXRlKCkpO2JyZWFrO2Nhc2UiaG91ciI6ZT10aGlzLl9kLnZhbHVlT2YoKSxlLT1xZShlKyh0aGlzLl9pc1VUQz8wOjZlNCp0aGlzLnV0Y09mZnNldCgpKSwzNmU1KTticmVhaztjYXNlIm1pbnV0ZSI6ZT10aGlzLl9kLnZhbHVlT2YoKSxlLT1xZShlLDZlNCk7YnJlYWs7Y2FzZSJzZWNvbmQiOmU9dGhpcy5fZC52YWx1ZU9mKCksZS09cWUoZSwxZTMpfXJldHVybiB0aGlzLl9kLnNldFRpbWUoZSksaS51cGRhdGVPZmZzZXQodGhpcywhMCksdGhpc30sb24uc3VidHJhY3Q9VWUsb24udG9BcnJheT1mdW5jdGlvbigpe3ZhciB0PXRoaXM7cmV0dXJuW3QueWVhcigpLHQubW9udGgoKSx0LmRhdGUoKSx0LmhvdXIoKSx0Lm1pbnV0ZSgpLHQuc2Vjb25kKCksdC5taWxsaXNlY29uZCgpXX0sb24udG9PYmplY3Q9ZnVuY3Rpb24oKXt2YXIgdD10aGlzO3JldHVybnt5ZWFyczp0LnllYXIoKSxtb250aHM6dC5tb250aCgpLGRhdGU6dC5kYXRlKCksaG91cnM6dC5ob3VycygpLG1pbnV0ZXM6dC5taW51dGVzKCksc2Vjb25kczp0LnNlY29uZHMoKSxtaWxsaXNlY29uZHM6dC5taWxsaXNlY29uZHMoKX19LG9uLnRvRGF0ZT1mdW5jdGlvbigpe3JldHVybiBuZXcgRGF0ZSh0aGlzLnZhbHVlT2YoKSl9LG9uLnRvSVNPU3RyaW5nPWZ1bmN0aW9uKHQpe2lmKCF0aGlzLmlzVmFsaWQoKSlyZXR1cm4gbnVsbDt2YXIgZT0hMCE9PXQsbj1lP3RoaXMuY2xvbmUoKS51dGMoKTp0aGlzO3JldHVybiBuLnllYXIoKTwwfHw5OTk5PG4ueWVhcigpP1YobixlPyJZWVlZWVktTU0tRERbVF1ISDptbTpzcy5TU1NbWl0iOiJZWVlZWVktTU0tRERbVF1ISDptbTpzcy5TU1NaIik6TyhEYXRlLnByb3RvdHlwZS50b0lTT1N0cmluZyk/ZT90aGlzLnRvRGF0ZSgpLnRvSVNPU3RyaW5nKCk6bmV3IERhdGUodGhpcy52YWx1ZU9mKCkrNjAqdGhpcy51dGNPZmZzZXQoKSoxZTMpLnRvSVNPU3RyaW5nKCkucmVwbGFjZSgiWiIsVihuLCJaIikpOlYobixlPyJZWVlZLU1NLUREW1RdSEg6bW06c3MuU1NTW1pdIjoiWVlZWS1NTS1ERFtUXUhIOm1tOnNzLlNTU1oiKX0sb24uaW5zcGVjdD1mdW5jdGlvbigpe2lmKCF0aGlzLmlzVmFsaWQoKSlyZXR1cm4ibW9tZW50LmludmFsaWQoLyogIit0aGlzLl9pKyIgKi8pIjt2YXIgdD0ibW9tZW50IixlPSIiO3RoaXMuaXNMb2NhbCgpfHwodD0wPT09dGhpcy51dGNPZmZzZXQoKT8ibW9tZW50LnV0YyI6Im1vbWVudC5wYXJzZVpvbmUiLGU9IloiKTt2YXIgbj0iWyIrdCsnKCJdJyxyPTA8PXRoaXMueWVhcigpJiZ0aGlzLnllYXIoKTw9OTk5OT8iWVlZWSI6IllZWVlZWSIsaT1lKydbIildJztyZXR1cm4gdGhpcy5mb3JtYXQobityKyItTU0tRERbVF1ISDptbTpzcy5TU1MiK2kpfSxvbi50b0pTT049ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pc1ZhbGlkKCk/dGhpcy50b0lTT1N0cmluZygpOm51bGx9LG9uLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5sb2NhbGUoImVuIikuZm9ybWF0KCJkZGQgTU1NIEREIFlZWVkgSEg6bW06c3MgW0dNVF1aWiIpfSxvbi51bml4PWZ1bmN0aW9uKCl7cmV0dXJuIE1hdGguZmxvb3IodGhpcy52YWx1ZU9mKCkvMWUzKX0sb24udmFsdWVPZj1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9kLnZhbHVlT2YoKS02ZTQqKHRoaXMuX29mZnNldHx8MCl9LG9uLmNyZWF0aW9uRGF0YT1mdW5jdGlvbigpe3JldHVybntpbnB1dDp0aGlzLl9pLGZvcm1hdDp0aGlzLl9mLGxvY2FsZTp0aGlzLl9sb2NhbGUsaXNVVEM6dGhpcy5faXNVVEMsc3RyaWN0OnRoaXMuX3N0cmljdH19LG9uLnllYXI9YnQsb24uaXNMZWFwWWVhcj1mdW5jdGlvbigpe3JldHVybiB2dCh0aGlzLnllYXIoKSl9LG9uLndlZWtZZWFyPWZ1bmN0aW9uKHQpe3JldHVybiBRZS5jYWxsKHRoaXMsdCx0aGlzLndlZWsoKSx0aGlzLndlZWtkYXkoKSx0aGlzLmxvY2FsZURhdGEoKS5fd2Vlay5kb3csdGhpcy5sb2NhbGVEYXRhKCkuX3dlZWsuZG95KX0sb24uaXNvV2Vla1llYXI9ZnVuY3Rpb24odCl7cmV0dXJuIFFlLmNhbGwodGhpcyx0LHRoaXMuaXNvV2VlaygpLHRoaXMuaXNvV2Vla2RheSgpLDEsNCl9LG9uLnF1YXJ0ZXI9b24ucXVhcnRlcnM9ZnVuY3Rpb24odCl7cmV0dXJuIG51bGw9PXQ/TWF0aC5jZWlsKCh0aGlzLm1vbnRoKCkrMSkvMyk6dGhpcy5tb250aCgzKih0LTEpK3RoaXMubW9udGgoKSUzKX0sb24ubW9udGg9QXQsb24uZGF5c0luTW9udGg9ZnVuY3Rpb24oKXtyZXR1cm4gd3QodGhpcy55ZWFyKCksdGhpcy5tb250aCgpKX0sb24ud2Vlaz1vbi53ZWVrcz1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmxvY2FsZURhdGEoKS53ZWVrKHRoaXMpO3JldHVybiBudWxsPT10P2U6dGhpcy5hZGQoNyoodC1lKSwiZCIpfSxvbi5pc29XZWVrPW9uLmlzb1dlZWtzPWZ1bmN0aW9uKHQpe3ZhciBlPUZ0KHRoaXMsMSw0KS53ZWVrO3JldHVybiBudWxsPT10P2U6dGhpcy5hZGQoNyoodC1lKSwiZCIpfSxvbi53ZWVrc0luWWVhcj1mdW5jdGlvbigpe3ZhciB0PXRoaXMubG9jYWxlRGF0YSgpLl93ZWVrO3JldHVybiBQdCh0aGlzLnllYXIoKSx0LmRvdyx0LmRveSl9LG9uLmlzb1dlZWtzSW5ZZWFyPWZ1bmN0aW9uKCl7cmV0dXJuIFB0KHRoaXMueWVhcigpLDEsNCl9LG9uLmRhdGU9S2Usb24uZGF5PW9uLmRheXM9ZnVuY3Rpb24odCl7aWYoIXRoaXMuaXNWYWxpZCgpKXJldHVybiBudWxsIT10P3RoaXM6TmFOO3ZhciBlLG4scj10aGlzLl9pc1VUQz90aGlzLl9kLmdldFVUQ0RheSgpOnRoaXMuX2QuZ2V0RGF5KCk7cmV0dXJuIG51bGwhPXQ/KGU9dCxuPXRoaXMubG9jYWxlRGF0YSgpLHQ9InN0cmluZyIhPXR5cGVvZiBlP2U6aXNOYU4oZSk/Im51bWJlciI9PXR5cGVvZihlPW4ud2Vla2RheXNQYXJzZShlKSk/ZTpudWxsOnBhcnNlSW50KGUsMTApLHRoaXMuYWRkKHQtciwiZCIpKTpyfSxvbi53ZWVrZGF5PWZ1bmN0aW9uKHQpe2lmKCF0aGlzLmlzVmFsaWQoKSlyZXR1cm4gbnVsbCE9dD90aGlzOk5hTjt2YXIgZT0odGhpcy5kYXkoKSs3LXRoaXMubG9jYWxlRGF0YSgpLl93ZWVrLmRvdyklNztyZXR1cm4gbnVsbD09dD9lOnRoaXMuYWRkKHQtZSwiZCIpfSxvbi5pc29XZWVrZGF5PWZ1bmN0aW9uKHQpe2lmKCF0aGlzLmlzVmFsaWQoKSlyZXR1cm4gbnVsbCE9dD90aGlzOk5hTjtpZihudWxsPT10KXJldHVybiB0aGlzLmRheSgpfHw3O3ZhciBlLG4scj0oZT10LG49dGhpcy5sb2NhbGVEYXRhKCksInN0cmluZyI9PXR5cGVvZiBlP24ud2Vla2RheXNQYXJzZShlKSU3fHw3OmlzTmFOKGUpP251bGw6ZSk7cmV0dXJuIHRoaXMuZGF5KHRoaXMuZGF5KCklNz9yOnItNyl9LG9uLmRheU9mWWVhcj1mdW5jdGlvbih0KXt2YXIgZT1NYXRoLnJvdW5kKCh0aGlzLmNsb25lKCkuc3RhcnRPZigiZGF5IiktdGhpcy5jbG9uZSgpLnN0YXJ0T2YoInllYXIiKSkvODY0ZTUpKzE7cmV0dXJuIG51bGw9PXQ/ZTp0aGlzLmFkZCh0LWUsImQiKX0sb24uaG91cj1vbi5ob3Vycz1YdCxvbi5taW51dGU9b24ubWludXRlcz10bixvbi5zZWNvbmQ9b24uc2Vjb25kcz1ubixvbi5taWxsaXNlY29uZD1vbi5taWxsaXNlY29uZHM9YW4sb24udXRjT2Zmc2V0PWZ1bmN0aW9uKHQsZSxuKXt2YXIgcixhPXRoaXMuX29mZnNldHx8MDtpZighdGhpcy5pc1ZhbGlkKCkpcmV0dXJuIG51bGwhPXQ/dGhpczpOYU47aWYobnVsbD09dClyZXR1cm4gdGhpcy5faXNVVEM/YTpOZSh0aGlzKTtpZigic3RyaW5nIj09dHlwZW9mIHQpe2lmKG51bGw9PT0odD1PZShzdCx0KSkpcmV0dXJuIHRoaXN9ZWxzZSBNYXRoLmFicyh0KTwxNiYmIW4mJih0Kj02MCk7cmV0dXJuIXRoaXMuX2lzVVRDJiZlJiYocj1OZSh0aGlzKSksdGhpcy5fb2Zmc2V0PXQsdGhpcy5faXNVVEM9ITAsbnVsbCE9ciYmdGhpcy5hZGQociwibSIpLGEhPT10JiYoIWV8fHRoaXMuX2NoYW5nZUluUHJvZ3Jlc3M/WWUodGhpcyxQZSh0LWEsIm0iKSwxLCExKTp0aGlzLl9jaGFuZ2VJblByb2dyZXNzfHwodGhpcy5fY2hhbmdlSW5Qcm9ncmVzcz0hMCxpLnVwZGF0ZU9mZnNldCh0aGlzLCEwKSx0aGlzLl9jaGFuZ2VJblByb2dyZXNzPW51bGwpKSx0aGlzfSxvbi51dGM9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMudXRjT2Zmc2V0KDAsdCl9LG9uLmxvY2FsPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9pc1VUQyYmKHRoaXMudXRjT2Zmc2V0KDAsdCksdGhpcy5faXNVVEM9ITEsdCYmdGhpcy5zdWJ0cmFjdChOZSh0aGlzKSwibSIpKSx0aGlzfSxvbi5wYXJzZVpvbmU9ZnVuY3Rpb24oKXtpZihudWxsIT10aGlzLl90em0pdGhpcy51dGNPZmZzZXQodGhpcy5fdHptLCExLCEwKTtlbHNlIGlmKCJzdHJpbmciPT10eXBlb2YgdGhpcy5faSl7dmFyIHQ9T2Uob3QsdGhpcy5faSk7bnVsbCE9dD90aGlzLnV0Y09mZnNldCh0KTp0aGlzLnV0Y09mZnNldCgwLCEwKX1yZXR1cm4gdGhpc30sb24uaGFzQWxpZ25lZEhvdXJPZmZzZXQ9ZnVuY3Rpb24odCl7cmV0dXJuISF0aGlzLmlzVmFsaWQoKSYmKHQ9dD94ZSh0KS51dGNPZmZzZXQoKTowLCh0aGlzLnV0Y09mZnNldCgpLXQpJTYwPT0wKX0sb24uaXNEU1Q9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy51dGNPZmZzZXQoKT50aGlzLmNsb25lKCkubW9udGgoMCkudXRjT2Zmc2V0KCl8fHRoaXMudXRjT2Zmc2V0KCk+dGhpcy5jbG9uZSgpLm1vbnRoKDUpLnV0Y09mZnNldCgpfSxvbi5pc0xvY2FsPWZ1bmN0aW9uKCl7cmV0dXJuISF0aGlzLmlzVmFsaWQoKSYmIXRoaXMuX2lzVVRDfSxvbi5pc1V0Y09mZnNldD1mdW5jdGlvbigpe3JldHVybiEhdGhpcy5pc1ZhbGlkKCkmJnRoaXMuX2lzVVRDfSxvbi5pc1V0Yz1CZSxvbi5pc1VUQz1CZSxvbi56b25lQWJicj1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9pc1VUQz8iVVRDIjoiIn0sb24uem9uZU5hbWU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5faXNVVEM/IkNvb3JkaW5hdGVkIFVuaXZlcnNhbCBUaW1lIjoiIn0sb24uZGF0ZXM9QygiZGF0ZXMgYWNjZXNzb3IgaXMgZGVwcmVjYXRlZC4gVXNlIGRhdGUgaW5zdGVhZC4iLEtlKSxvbi5tb250aHM9QygibW9udGhzIGFjY2Vzc29yIGlzIGRlcHJlY2F0ZWQuIFVzZSBtb250aCBpbnN0ZWFkIixBdCksb24ueWVhcnM9QygieWVhcnMgYWNjZXNzb3IgaXMgZGVwcmVjYXRlZC4gVXNlIHllYXIgaW5zdGVhZCIsYnQpLG9uLnpvbmU9QygibW9tZW50KCkuem9uZSBpcyBkZXByZWNhdGVkLCB1c2UgbW9tZW50KCkudXRjT2Zmc2V0IGluc3RlYWQuIGh0dHA6Ly9tb21lbnRqcy5jb20vZ3VpZGVzLyMvd2FybmluZ3Mvem9uZS8iLChmdW5jdGlvbih0LGUpe3JldHVybiBudWxsIT10Pygic3RyaW5nIiE9dHlwZW9mIHQmJih0PS10KSx0aGlzLnV0Y09mZnNldCh0LGUpLHRoaXMpOi10aGlzLnV0Y09mZnNldCgpfSkpLG9uLmlzRFNUU2hpZnRlZD1DKCJpc0RTVFNoaWZ0ZWQgaXMgZGVwcmVjYXRlZC4gU2VlIGh0dHA6Ly9tb21lbnRqcy5jb20vZ3VpZGVzLyMvd2FybmluZ3MvZHN0LXNoaWZ0ZWQvIGZvciBtb3JlIGluZm9ybWF0aW9uIiwoZnVuY3Rpb24oKXtpZighcyh0aGlzLl9pc0RTVFNoaWZ0ZWQpKXJldHVybiB0aGlzLl9pc0RTVFNoaWZ0ZWQ7dmFyIHQ9e307aWYobSh0LHRoaXMpLCh0PW1lKHQpKS5fYSl7dmFyIGU9dC5faXNVVEM/ZCh0Ll9hKTp4ZSh0Ll9hKTt0aGlzLl9pc0RTVFNoaWZ0ZWQ9dGhpcy5pc1ZhbGlkKCkmJjA8RSh0Ll9hLGUudG9BcnJheSgpKX1lbHNlIHRoaXMuX2lzRFNUU2hpZnRlZD0hMTtyZXR1cm4gdGhpcy5faXNEU1RTaGlmdGVkfSkpO3ZhciBjbj1OLnByb3RvdHlwZTtmdW5jdGlvbiB1bih0LGUsbixyKXt2YXIgaT1yZSgpLGE9ZCgpLnNldChyLGUpO3JldHVybiBpW25dKGEsdCl9ZnVuY3Rpb24gbG4odCxlLG4pe2lmKGModCkmJihlPXQsdD12b2lkIDApLHQ9dHx8IiIsbnVsbCE9ZSlyZXR1cm4gdW4odCxlLG4sIm1vbnRoIik7dmFyIHIsaT1bXTtmb3Iocj0wO3I8MTI7cisrKWlbcl09dW4odCxyLG4sIm1vbnRoIik7cmV0dXJuIGl9ZnVuY3Rpb24gaG4odCxlLG4scil7ImJvb2xlYW4iPT10eXBlb2YgdD9jKGUpJiYobj1lLGU9dm9pZCAwKTooZT10LHQ9ITEsYyhuPWUpJiYobj1lLGU9dm9pZCAwKSksZT1lfHwiIjt2YXIgaSxhPXJlKCksbz10P2EuX3dlZWsuZG93OjA7aWYobnVsbCE9bilyZXR1cm4gdW4oZSwobitvKSU3LHIsImRheSIpO3ZhciBzPVtdO2ZvcihpPTA7aTw3O2krKylzW2ldPXVuKGUsKGkrbyklNyxyLCJkYXkiKTtyZXR1cm4gc31jbi5jYWxlbmRhcj1mdW5jdGlvbih0LGUsbil7dmFyIHI9dGhpcy5fY2FsZW5kYXJbdF18fHRoaXMuX2NhbGVuZGFyLnNhbWVFbHNlO3JldHVybiBPKHIpP3IuY2FsbChlLG4pOnJ9LGNuLmxvbmdEYXRlRm9ybWF0PWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX2xvbmdEYXRlRm9ybWF0W3RdLG49dGhpcy5fbG9uZ0RhdGVGb3JtYXRbdC50b1VwcGVyQ2FzZSgpXTtyZXR1cm4gZXx8IW4/ZToodGhpcy5fbG9uZ0RhdGVGb3JtYXRbdF09bi5yZXBsYWNlKC9NTU1NfE1NfEREfGRkZGQvZywoZnVuY3Rpb24odCl7cmV0dXJuIHQuc2xpY2UoMSl9KSksdGhpcy5fbG9uZ0RhdGVGb3JtYXRbdF0pfSxjbi5pbnZhbGlkRGF0ZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9pbnZhbGlkRGF0ZX0sY24ub3JkaW5hbD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fb3JkaW5hbC5yZXBsYWNlKCIlZCIsdCl9LGNuLnByZXBhcnNlPXNuLGNuLnBvc3Rmb3JtYXQ9c24sY24ucmVsYXRpdmVUaW1lPWZ1bmN0aW9uKHQsZSxuLHIpe3ZhciBpPXRoaXMuX3JlbGF0aXZlVGltZVtuXTtyZXR1cm4gTyhpKT9pKHQsZSxuLHIpOmkucmVwbGFjZSgvJWQvaSx0KX0sY24ucGFzdEZ1dHVyZT1mdW5jdGlvbih0LGUpe3ZhciBuPXRoaXMuX3JlbGF0aXZlVGltZVswPHQ/ImZ1dHVyZSI6InBhc3QiXTtyZXR1cm4gTyhuKT9uKGUpOm4ucmVwbGFjZSgvJXMvaSxlKX0sY24uc2V0PWZ1bmN0aW9uKHQpe3ZhciBlLG47Zm9yKG4gaW4gdClPKGU9dFtuXSk/dGhpc1tuXT1lOnRoaXNbIl8iK25dPWU7dGhpcy5fY29uZmlnPXQsdGhpcy5fZGF5T2ZNb250aE9yZGluYWxQYXJzZUxlbmllbnQ9bmV3IFJlZ0V4cCgodGhpcy5fZGF5T2ZNb250aE9yZGluYWxQYXJzZS5zb3VyY2V8fHRoaXMuX29yZGluYWxQYXJzZS5zb3VyY2UpKyJ8IisvXGR7MSwyfS8uc291cmNlKX0sY24ubW9udGhzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQ/YSh0aGlzLl9tb250aHMpP3RoaXMuX21vbnRoc1t0Lm1vbnRoKCldOnRoaXMuX21vbnRoc1sodGhpcy5fbW9udGhzLmlzRm9ybWF0fHxFdCkudGVzdChlKT8iZm9ybWF0Ijoic3RhbmRhbG9uZSJdW3QubW9udGgoKV06YSh0aGlzLl9tb250aHMpP3RoaXMuX21vbnRoczp0aGlzLl9tb250aHMuc3RhbmRhbG9uZX0sY24ubW9udGhzU2hvcnQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdD9hKHRoaXMuX21vbnRoc1Nob3J0KT90aGlzLl9tb250aHNTaG9ydFt0Lm1vbnRoKCldOnRoaXMuX21vbnRoc1Nob3J0W0V0LnRlc3QoZSk/ImZvcm1hdCI6InN0YW5kYWxvbmUiXVt0Lm1vbnRoKCldOmEodGhpcy5fbW9udGhzU2hvcnQpP3RoaXMuX21vbnRoc1Nob3J0OnRoaXMuX21vbnRoc1Nob3J0LnN0YW5kYWxvbmV9LGNuLm1vbnRoc1BhcnNlPWZ1bmN0aW9uKHQsZSxuKXt2YXIgcixpLGE7aWYodGhpcy5fbW9udGhzUGFyc2VFeGFjdClyZXR1cm4gZnVuY3Rpb24odCxlLG4pe3ZhciByLGksYSxvPXQudG9Mb2NhbGVMb3dlckNhc2UoKTtpZighdGhpcy5fbW9udGhzUGFyc2UpZm9yKHRoaXMuX21vbnRoc1BhcnNlPVtdLHRoaXMuX2xvbmdNb250aHNQYXJzZT1bXSx0aGlzLl9zaG9ydE1vbnRoc1BhcnNlPVtdLHI9MDtyPDEyOysrcilhPWQoWzJlMyxyXSksdGhpcy5fc2hvcnRNb250aHNQYXJzZVtyXT10aGlzLm1vbnRoc1Nob3J0KGEsIiIpLnRvTG9jYWxlTG93ZXJDYXNlKCksdGhpcy5fbG9uZ01vbnRoc1BhcnNlW3JdPXRoaXMubW9udGhzKGEsIiIpLnRvTG9jYWxlTG93ZXJDYXNlKCk7cmV0dXJuIG4/Ik1NTSI9PT1lPy0xIT09KGk9bXQuY2FsbCh0aGlzLl9zaG9ydE1vbnRoc1BhcnNlLG8pKT9pOm51bGw6LTEhPT0oaT1tdC5jYWxsKHRoaXMuX2xvbmdNb250aHNQYXJzZSxvKSk/aTpudWxsOiJNTU0iPT09ZT8tMSE9PShpPW10LmNhbGwodGhpcy5fc2hvcnRNb250aHNQYXJzZSxvKSk/aTotMSE9PShpPW10LmNhbGwodGhpcy5fbG9uZ01vbnRoc1BhcnNlLG8pKT9pOm51bGw6LTEhPT0oaT1tdC5jYWxsKHRoaXMuX2xvbmdNb250aHNQYXJzZSxvKSk/aTotMSE9PShpPW10LmNhbGwodGhpcy5fc2hvcnRNb250aHNQYXJzZSxvKSk/aTpudWxsfS5jYWxsKHRoaXMsdCxlLG4pO2Zvcih0aGlzLl9tb250aHNQYXJzZXx8KHRoaXMuX21vbnRoc1BhcnNlPVtdLHRoaXMuX2xvbmdNb250aHNQYXJzZT1bXSx0aGlzLl9zaG9ydE1vbnRoc1BhcnNlPVtdKSxyPTA7cjwxMjtyKyspe2lmKGk9ZChbMmUzLHJdKSxuJiYhdGhpcy5fbG9uZ01vbnRoc1BhcnNlW3JdJiYodGhpcy5fbG9uZ01vbnRoc1BhcnNlW3JdPW5ldyBSZWdFeHAoIl4iK3RoaXMubW9udGhzKGksIiIpLnJlcGxhY2UoIi4iLCIiKSsiJCIsImkiKSx0aGlzLl9zaG9ydE1vbnRoc1BhcnNlW3JdPW5ldyBSZWdFeHAoIl4iK3RoaXMubW9udGhzU2hvcnQoaSwiIikucmVwbGFjZSgiLiIsIiIpKyIkIiwiaSIpKSxufHx0aGlzLl9tb250aHNQYXJzZVtyXXx8KGE9Il4iK3RoaXMubW9udGhzKGksIiIpKyJ8XiIrdGhpcy5tb250aHNTaG9ydChpLCIiKSx0aGlzLl9tb250aHNQYXJzZVtyXT1uZXcgUmVnRXhwKGEucmVwbGFjZSgiLiIsIiIpLCJpIikpLG4mJiJNTU1NIj09PWUmJnRoaXMuX2xvbmdNb250aHNQYXJzZVtyXS50ZXN0KHQpKXJldHVybiByO2lmKG4mJiJNTU0iPT09ZSYmdGhpcy5fc2hvcnRNb250aHNQYXJzZVtyXS50ZXN0KHQpKXJldHVybiByO2lmKCFuJiZ0aGlzLl9tb250aHNQYXJzZVtyXS50ZXN0KHQpKXJldHVybiByfX0sY24ubW9udGhzUmVnZXg9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX21vbnRoc1BhcnNlRXhhY3Q/KGgodGhpcywiX21vbnRoc1JlZ2V4Iil8fER0LmNhbGwodGhpcyksdD90aGlzLl9tb250aHNTdHJpY3RSZWdleDp0aGlzLl9tb250aHNSZWdleCk6KGgodGhpcywiX21vbnRoc1JlZ2V4Iil8fCh0aGlzLl9tb250aHNSZWdleD1PdCksdGhpcy5fbW9udGhzU3RyaWN0UmVnZXgmJnQ/dGhpcy5fbW9udGhzU3RyaWN0UmVnZXg6dGhpcy5fbW9udGhzUmVnZXgpfSxjbi5tb250aHNTaG9ydFJlZ2V4PWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9tb250aHNQYXJzZUV4YWN0PyhoKHRoaXMsIl9tb250aHNSZWdleCIpfHxEdC5jYWxsKHRoaXMpLHQ/dGhpcy5fbW9udGhzU2hvcnRTdHJpY3RSZWdleDp0aGlzLl9tb250aHNTaG9ydFJlZ2V4KTooaCh0aGlzLCJfbW9udGhzU2hvcnRSZWdleCIpfHwodGhpcy5fbW9udGhzU2hvcnRSZWdleD1NdCksdGhpcy5fbW9udGhzU2hvcnRTdHJpY3RSZWdleCYmdD90aGlzLl9tb250aHNTaG9ydFN0cmljdFJlZ2V4OnRoaXMuX21vbnRoc1Nob3J0UmVnZXgpfSxjbi53ZWVrPWZ1bmN0aW9uKHQpe3JldHVybiBGdCh0LHRoaXMuX3dlZWsuZG93LHRoaXMuX3dlZWsuZG95KS53ZWVrfSxjbi5maXJzdERheU9mWWVhcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLl93ZWVrLmRveX0sY24uZmlyc3REYXlPZldlZWs9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fd2Vlay5kb3d9LGNuLndlZWtkYXlzPWZ1bmN0aW9uKHQsZSl7dmFyIG49YSh0aGlzLl93ZWVrZGF5cyk/dGhpcy5fd2Vla2RheXM6dGhpcy5fd2Vla2RheXNbdCYmITAhPT10JiZ0aGlzLl93ZWVrZGF5cy5pc0Zvcm1hdC50ZXN0KGUpPyJmb3JtYXQiOiJzdGFuZGFsb25lIl07cmV0dXJuITA9PT10P0l0KG4sdGhpcy5fd2Vlay5kb3cpOnQ/blt0LmRheSgpXTpufSxjbi53ZWVrZGF5c01pbj1mdW5jdGlvbih0KXtyZXR1cm4hMD09PXQ/SXQodGhpcy5fd2Vla2RheXNNaW4sdGhpcy5fd2Vlay5kb3cpOnQ/dGhpcy5fd2Vla2RheXNNaW5bdC5kYXkoKV06dGhpcy5fd2Vla2RheXNNaW59LGNuLndlZWtkYXlzU2hvcnQ9ZnVuY3Rpb24odCl7cmV0dXJuITA9PT10P0l0KHRoaXMuX3dlZWtkYXlzU2hvcnQsdGhpcy5fd2Vlay5kb3cpOnQ/dGhpcy5fd2Vla2RheXNTaG9ydFt0LmRheSgpXTp0aGlzLl93ZWVrZGF5c1Nob3J0fSxjbi53ZWVrZGF5c1BhcnNlPWZ1bmN0aW9uKHQsZSxuKXt2YXIgcixpLGE7aWYodGhpcy5fd2Vla2RheXNQYXJzZUV4YWN0KXJldHVybiBmdW5jdGlvbih0LGUsbil7dmFyIHIsaSxhLG89dC50b0xvY2FsZUxvd2VyQ2FzZSgpO2lmKCF0aGlzLl93ZWVrZGF5c1BhcnNlKWZvcih0aGlzLl93ZWVrZGF5c1BhcnNlPVtdLHRoaXMuX3Nob3J0V2Vla2RheXNQYXJzZT1bXSx0aGlzLl9taW5XZWVrZGF5c1BhcnNlPVtdLHI9MDtyPDc7KytyKWE9ZChbMmUzLDFdKS5kYXkociksdGhpcy5fbWluV2Vla2RheXNQYXJzZVtyXT10aGlzLndlZWtkYXlzTWluKGEsIiIpLnRvTG9jYWxlTG93ZXJDYXNlKCksdGhpcy5fc2hvcnRXZWVrZGF5c1BhcnNlW3JdPXRoaXMud2Vla2RheXNTaG9ydChhLCIiKS50b0xvY2FsZUxvd2VyQ2FzZSgpLHRoaXMuX3dlZWtkYXlzUGFyc2Vbcl09dGhpcy53ZWVrZGF5cyhhLCIiKS50b0xvY2FsZUxvd2VyQ2FzZSgpO3JldHVybiBuPyJkZGRkIj09PWU/LTEhPT0oaT1tdC5jYWxsKHRoaXMuX3dlZWtkYXlzUGFyc2UsbykpP2k6bnVsbDoiZGRkIj09PWU/LTEhPT0oaT1tdC5jYWxsKHRoaXMuX3Nob3J0V2Vla2RheXNQYXJzZSxvKSk/aTpudWxsOi0xIT09KGk9bXQuY2FsbCh0aGlzLl9taW5XZWVrZGF5c1BhcnNlLG8pKT9pOm51bGw6ImRkZGQiPT09ZT8tMSE9PShpPW10LmNhbGwodGhpcy5fd2Vla2RheXNQYXJzZSxvKSk/aTotMSE9PShpPW10LmNhbGwodGhpcy5fc2hvcnRXZWVrZGF5c1BhcnNlLG8pKT9pOi0xIT09KGk9bXQuY2FsbCh0aGlzLl9taW5XZWVrZGF5c1BhcnNlLG8pKT9pOm51bGw6ImRkZCI9PT1lPy0xIT09KGk9bXQuY2FsbCh0aGlzLl9zaG9ydFdlZWtkYXlzUGFyc2UsbykpP2k6LTEhPT0oaT1tdC5jYWxsKHRoaXMuX3dlZWtkYXlzUGFyc2UsbykpP2k6LTEhPT0oaT1tdC5jYWxsKHRoaXMuX21pbldlZWtkYXlzUGFyc2UsbykpP2k6bnVsbDotMSE9PShpPW10LmNhbGwodGhpcy5fbWluV2Vla2RheXNQYXJzZSxvKSk/aTotMSE9PShpPW10LmNhbGwodGhpcy5fd2Vla2RheXNQYXJzZSxvKSk/aTotMSE9PShpPW10LmNhbGwodGhpcy5fc2hvcnRXZWVrZGF5c1BhcnNlLG8pKT9pOm51bGx9LmNhbGwodGhpcyx0LGUsbik7Zm9yKHRoaXMuX3dlZWtkYXlzUGFyc2V8fCh0aGlzLl93ZWVrZGF5c1BhcnNlPVtdLHRoaXMuX21pbldlZWtkYXlzUGFyc2U9W10sdGhpcy5fc2hvcnRXZWVrZGF5c1BhcnNlPVtdLHRoaXMuX2Z1bGxXZWVrZGF5c1BhcnNlPVtdKSxyPTA7cjw3O3IrKyl7aWYoaT1kKFsyZTMsMV0pLmRheShyKSxuJiYhdGhpcy5fZnVsbFdlZWtkYXlzUGFyc2Vbcl0mJih0aGlzLl9mdWxsV2Vla2RheXNQYXJzZVtyXT1uZXcgUmVnRXhwKCJeIit0aGlzLndlZWtkYXlzKGksIiIpLnJlcGxhY2UoIi4iLCJcXC4/IikrIiQiLCJpIiksdGhpcy5fc2hvcnRXZWVrZGF5c1BhcnNlW3JdPW5ldyBSZWdFeHAoIl4iK3RoaXMud2Vla2RheXNTaG9ydChpLCIiKS5yZXBsYWNlKCIuIiwiXFwuPyIpKyIkIiwiaSIpLHRoaXMuX21pbldlZWtkYXlzUGFyc2Vbcl09bmV3IFJlZ0V4cCgiXiIrdGhpcy53ZWVrZGF5c01pbihpLCIiKS5yZXBsYWNlKCIuIiwiXFwuPyIpKyIkIiwiaSIpKSx0aGlzLl93ZWVrZGF5c1BhcnNlW3JdfHwoYT0iXiIrdGhpcy53ZWVrZGF5cyhpLCIiKSsifF4iK3RoaXMud2Vla2RheXNTaG9ydChpLCIiKSsifF4iK3RoaXMud2Vla2RheXNNaW4oaSwiIiksdGhpcy5fd2Vla2RheXNQYXJzZVtyXT1uZXcgUmVnRXhwKGEucmVwbGFjZSgiLiIsIiIpLCJpIikpLG4mJiJkZGRkIj09PWUmJnRoaXMuX2Z1bGxXZWVrZGF5c1BhcnNlW3JdLnRlc3QodCkpcmV0dXJuIHI7aWYobiYmImRkZCI9PT1lJiZ0aGlzLl9zaG9ydFdlZWtkYXlzUGFyc2Vbcl0udGVzdCh0KSlyZXR1cm4gcjtpZihuJiYiZGQiPT09ZSYmdGhpcy5fbWluV2Vla2RheXNQYXJzZVtyXS50ZXN0KHQpKXJldHVybiByO2lmKCFuJiZ0aGlzLl93ZWVrZGF5c1BhcnNlW3JdLnRlc3QodCkpcmV0dXJuIHJ9fSxjbi53ZWVrZGF5c1JlZ2V4PWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl93ZWVrZGF5c1BhcnNlRXhhY3Q/KGgodGhpcywiX3dlZWtkYXlzUmVnZXgiKXx8V3QuY2FsbCh0aGlzKSx0P3RoaXMuX3dlZWtkYXlzU3RyaWN0UmVnZXg6dGhpcy5fd2Vla2RheXNSZWdleCk6KGgodGhpcywiX3dlZWtkYXlzUmVnZXgiKXx8KHRoaXMuX3dlZWtkYXlzUmVnZXg9enQpLHRoaXMuX3dlZWtkYXlzU3RyaWN0UmVnZXgmJnQ/dGhpcy5fd2Vla2RheXNTdHJpY3RSZWdleDp0aGlzLl93ZWVrZGF5c1JlZ2V4KX0sY24ud2Vla2RheXNTaG9ydFJlZ2V4PWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl93ZWVrZGF5c1BhcnNlRXhhY3Q/KGgodGhpcywiX3dlZWtkYXlzUmVnZXgiKXx8V3QuY2FsbCh0aGlzKSx0P3RoaXMuX3dlZWtkYXlzU2hvcnRTdHJpY3RSZWdleDp0aGlzLl93ZWVrZGF5c1Nob3J0UmVnZXgpOihoKHRoaXMsIl93ZWVrZGF5c1Nob3J0UmVnZXgiKXx8KHRoaXMuX3dlZWtkYXlzU2hvcnRSZWdleD1VdCksdGhpcy5fd2Vla2RheXNTaG9ydFN0cmljdFJlZ2V4JiZ0P3RoaXMuX3dlZWtkYXlzU2hvcnRTdHJpY3RSZWdleDp0aGlzLl93ZWVrZGF5c1Nob3J0UmVnZXgpfSxjbi53ZWVrZGF5c01pblJlZ2V4PWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl93ZWVrZGF5c1BhcnNlRXhhY3Q/KGgodGhpcywiX3dlZWtkYXlzUmVnZXgiKXx8V3QuY2FsbCh0aGlzKSx0P3RoaXMuX3dlZWtkYXlzTWluU3RyaWN0UmVnZXg6dGhpcy5fd2Vla2RheXNNaW5SZWdleCk6KGgodGhpcywiX3dlZWtkYXlzTWluUmVnZXgiKXx8KHRoaXMuX3dlZWtkYXlzTWluUmVnZXg9JHQpLHRoaXMuX3dlZWtkYXlzTWluU3RyaWN0UmVnZXgmJnQ/dGhpcy5fd2Vla2RheXNNaW5TdHJpY3RSZWdleDp0aGlzLl93ZWVrZGF5c01pblJlZ2V4KX0sY24uaXNQTT1mdW5jdGlvbih0KXtyZXR1cm4icCI9PT0odCsiIikudG9Mb3dlckNhc2UoKS5jaGFyQXQoMCl9LGNuLm1lcmlkaWVtPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gMTE8dD9uPyJwbSI6IlBNIjpuPyJhbSI6IkFNIn0sZWUoImVuIix7ZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfSh0aHxzdHxuZHxyZCkvLG9yZGluYWw6ZnVuY3Rpb24odCl7dmFyIGU9dCUxMDtyZXR1cm4gdCsoMT09PXcodCUxMDAvMTApPyJ0aCI6MT09PWU/InN0IjoyPT09ZT8ibmQiOjM9PT1lPyJyZCI6InRoIil9fSksaS5sYW5nPUMoIm1vbWVudC5sYW5nIGlzIGRlcHJlY2F0ZWQuIFVzZSBtb21lbnQubG9jYWxlIGluc3RlYWQuIixlZSksaS5sYW5nRGF0YT1DKCJtb21lbnQubGFuZ0RhdGEgaXMgZGVwcmVjYXRlZC4gVXNlIG1vbWVudC5sb2NhbGVEYXRhIGluc3RlYWQuIixyZSk7dmFyIGZuPU1hdGguYWJzO2Z1bmN0aW9uIGRuKHQsZSxuLHIpe3ZhciBpPVBlKGUsbik7cmV0dXJuIHQuX21pbGxpc2Vjb25kcys9cippLl9taWxsaXNlY29uZHMsdC5fZGF5cys9cippLl9kYXlzLHQuX21vbnRocys9cippLl9tb250aHMsdC5fYnViYmxlKCl9ZnVuY3Rpb24gcG4odCl7cmV0dXJuIHQ8MD9NYXRoLmZsb29yKHQpOk1hdGguY2VpbCh0KX1mdW5jdGlvbiBnbih0KXtyZXR1cm4gNDgwMCp0LzE0NjA5N31mdW5jdGlvbiB5bih0KXtyZXR1cm4gMTQ2MDk3KnQvNDgwMH1mdW5jdGlvbiB2bih0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hcyh0KX19dmFyIG1uPXZuKCJtcyIpLGJuPXZuKCJzIikseG49dm4oIm0iKSxfbj12bigiaCIpLGtuPXZuKCJkIiksd249dm4oInciKSxFbj12bigiTSIpLFRuPXZuKCJRIiksQ249dm4oInkiKTtmdW5jdGlvbiBTbih0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pc1ZhbGlkKCk/dGhpcy5fZGF0YVt0XTpOYU59fXZhciBBbj1TbigibWlsbGlzZWNvbmRzIiksTW49U24oInNlY29uZHMiKSxPbj1TbigibWludXRlcyIpLERuPVNuKCJob3VycyIpLE5uPVNuKCJkYXlzIiksQm49U24oIm1vbnRocyIpLExuPVNuKCJ5ZWFycyIpLEZuPU1hdGgucm91bmQsUG49e3NzOjQ0LHM6NDUsbTo0NSxoOjIyLGQ6MjYsTToxMX0sSW49TWF0aC5hYnM7ZnVuY3Rpb24gam4odCl7cmV0dXJuKDA8dCktKHQ8MCl8fCt0fWZ1bmN0aW9uIFJuKCl7aWYoIXRoaXMuaXNWYWxpZCgpKXJldHVybiB0aGlzLmxvY2FsZURhdGEoKS5pbnZhbGlkRGF0ZSgpO3ZhciB0LGUsbj1Jbih0aGlzLl9taWxsaXNlY29uZHMpLzFlMyxyPUluKHRoaXMuX2RheXMpLGk9SW4odGhpcy5fbW9udGhzKTtlPWsoKHQ9ayhuLzYwKSkvNjApLG4lPTYwLHQlPTYwO3ZhciBhPWsoaS8xMiksbz1pJT0xMixzPXIsYz1lLHU9dCxsPW4/bi50b0ZpeGVkKDMpLnJlcGxhY2UoL1wuPzArJC8sIiIpOiIiLGg9dGhpcy5hc1NlY29uZHMoKTtpZighaClyZXR1cm4iUDBEIjt2YXIgZj1oPDA/Ii0iOiIiLGQ9am4odGhpcy5fbW9udGhzKSE9PWpuKGgpPyItIjoiIixwPWpuKHRoaXMuX2RheXMpIT09am4oaCk/Ii0iOiIiLGc9am4odGhpcy5fbWlsbGlzZWNvbmRzKSE9PWpuKGgpPyItIjoiIjtyZXR1cm4gZisiUCIrKGE/ZCthKyJZIjoiIikrKG8/ZCtvKyJNIjoiIikrKHM/cCtzKyJEIjoiIikrKGN8fHV8fGw/IlQiOiIiKSsoYz9nK2MrIkgiOiIiKSsodT9nK3UrIk0iOiIiKSsobD9nK2wrIlMiOiIiKX12YXIgWW49VGUucHJvdG90eXBlO3JldHVybiBZbi5pc1ZhbGlkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2lzVmFsaWR9LFluLmFicz1mdW5jdGlvbigpe3ZhciB0PXRoaXMuX2RhdGE7cmV0dXJuIHRoaXMuX21pbGxpc2Vjb25kcz1mbih0aGlzLl9taWxsaXNlY29uZHMpLHRoaXMuX2RheXM9Zm4odGhpcy5fZGF5cyksdGhpcy5fbW9udGhzPWZuKHRoaXMuX21vbnRocyksdC5taWxsaXNlY29uZHM9Zm4odC5taWxsaXNlY29uZHMpLHQuc2Vjb25kcz1mbih0LnNlY29uZHMpLHQubWludXRlcz1mbih0Lm1pbnV0ZXMpLHQuaG91cnM9Zm4odC5ob3VycyksdC5tb250aHM9Zm4odC5tb250aHMpLHQueWVhcnM9Zm4odC55ZWFycyksdGhpc30sWW4uYWRkPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGRuKHRoaXMsdCxlLDEpfSxZbi5zdWJ0cmFjdD1mdW5jdGlvbih0LGUpe3JldHVybiBkbih0aGlzLHQsZSwtMSl9LFluLmFzPWZ1bmN0aW9uKHQpe2lmKCF0aGlzLmlzVmFsaWQoKSlyZXR1cm4gTmFOO3ZhciBlLG4scj10aGlzLl9taWxsaXNlY29uZHM7aWYoIm1vbnRoIj09PSh0PUYodCkpfHwicXVhcnRlciI9PT10fHwieWVhciI9PT10KXN3aXRjaChlPXRoaXMuX2RheXMrci84NjRlNSxuPXRoaXMuX21vbnRocytnbihlKSx0KXtjYXNlIm1vbnRoIjpyZXR1cm4gbjtjYXNlInF1YXJ0ZXIiOnJldHVybiBuLzM7Y2FzZSJ5ZWFyIjpyZXR1cm4gbi8xMn1lbHNlIHN3aXRjaChlPXRoaXMuX2RheXMrTWF0aC5yb3VuZCh5bih0aGlzLl9tb250aHMpKSx0KXtjYXNlIndlZWsiOnJldHVybiBlLzcrci82MDQ4ZTU7Y2FzZSJkYXkiOnJldHVybiBlK3IvODY0ZTU7Y2FzZSJob3VyIjpyZXR1cm4gMjQqZStyLzM2ZTU7Y2FzZSJtaW51dGUiOnJldHVybiAxNDQwKmUrci82ZTQ7Y2FzZSJzZWNvbmQiOnJldHVybiA4NjQwMCplK3IvMWUzO2Nhc2UibWlsbGlzZWNvbmQiOnJldHVybiBNYXRoLmZsb29yKDg2NGU1KmUpK3I7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIlVua25vd24gdW5pdCAiK3QpfX0sWW4uYXNNaWxsaXNlY29uZHM9bW4sWW4uYXNTZWNvbmRzPWJuLFluLmFzTWludXRlcz14bixZbi5hc0hvdXJzPV9uLFluLmFzRGF5cz1rbixZbi5hc1dlZWtzPXduLFluLmFzTW9udGhzPUVuLFluLmFzUXVhcnRlcnM9VG4sWW4uYXNZZWFycz1DbixZbi52YWx1ZU9mPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXNWYWxpZCgpP3RoaXMuX21pbGxpc2Vjb25kcys4NjRlNSp0aGlzLl9kYXlzK3RoaXMuX21vbnRocyUxMioyNTkyZTYrMzE1MzZlNip3KHRoaXMuX21vbnRocy8xMik6TmFOfSxZbi5fYnViYmxlPWZ1bmN0aW9uKCl7dmFyIHQsZSxuLHIsaSxhPXRoaXMuX21pbGxpc2Vjb25kcyxvPXRoaXMuX2RheXMscz10aGlzLl9tb250aHMsYz10aGlzLl9kYXRhO3JldHVybiAwPD1hJiYwPD1vJiYwPD1zfHxhPD0wJiZvPD0wJiZzPD0wfHwoYSs9ODY0ZTUqcG4oeW4ocykrbykscz1vPTApLGMubWlsbGlzZWNvbmRzPWElMWUzLHQ9ayhhLzFlMyksYy5zZWNvbmRzPXQlNjAsZT1rKHQvNjApLGMubWludXRlcz1lJTYwLG49ayhlLzYwKSxjLmhvdXJzPW4lMjQscys9aT1rKGduKG8rPWsobi8yNCkpKSxvLT1wbih5bihpKSkscj1rKHMvMTIpLHMlPTEyLGMuZGF5cz1vLGMubW9udGhzPXMsYy55ZWFycz1yLHRoaXN9LFluLmNsb25lPWZ1bmN0aW9uKCl7cmV0dXJuIFBlKHRoaXMpfSxZbi5nZXQ9ZnVuY3Rpb24odCl7cmV0dXJuIHQ9Rih0KSx0aGlzLmlzVmFsaWQoKT90aGlzW3QrInMiXSgpOk5hTn0sWW4ubWlsbGlzZWNvbmRzPUFuLFluLnNlY29uZHM9TW4sWW4ubWludXRlcz1PbixZbi5ob3Vycz1EbixZbi5kYXlzPU5uLFluLndlZWtzPWZ1bmN0aW9uKCl7cmV0dXJuIGsodGhpcy5kYXlzKCkvNyl9LFluLm1vbnRocz1CbixZbi55ZWFycz1MbixZbi5odW1hbml6ZT1mdW5jdGlvbih0KXtpZighdGhpcy5pc1ZhbGlkKCkpcmV0dXJuIHRoaXMubG9jYWxlRGF0YSgpLmludmFsaWREYXRlKCk7dmFyIGUsbixyLGksYSxvLHMsYyx1LGwsaD10aGlzLmxvY2FsZURhdGEoKSxmPShlPSF0LG49aCxyPVBlKHRoaXMpLmFicygpLGk9Rm4oci5hcygicyIpKSxhPUZuKHIuYXMoIm0iKSksbz1GbihyLmFzKCJoIikpLHM9Rm4oci5hcygiZCIpKSxjPUZuKHIuYXMoIk0iKSksdT1GbihyLmFzKCJ5IikpLChsPWk8PVBuLnNzJiZbInMiLGldfHxpPFBuLnMmJlsic3MiLGldfHxhPD0xJiZbIm0iXXx8YTxQbi5tJiZbIm1tIixhXXx8bzw9MSYmWyJoIl18fG88UG4uaCYmWyJoaCIsb118fHM8PTEmJlsiZCJdfHxzPFBuLmQmJlsiZGQiLHNdfHxjPD0xJiZbIk0iXXx8YzxQbi5NJiZbIk1NIixjXXx8dTw9MSYmWyJ5Il18fFsieXkiLHVdKVsyXT1lLGxbM109MDwrdGhpcyxsWzRdPW4sZnVuY3Rpb24odCxlLG4scixpKXtyZXR1cm4gaS5yZWxhdGl2ZVRpbWUoZXx8MSwhIW4sdCxyKX0uYXBwbHkobnVsbCxsKSk7cmV0dXJuIHQmJihmPWgucGFzdEZ1dHVyZSgrdGhpcyxmKSksaC5wb3N0Zm9ybWF0KGYpfSxZbi50b0lTT1N0cmluZz1SbixZbi50b1N0cmluZz1SbixZbi50b0pTT049Um4sWW4ubG9jYWxlPVdlLFluLmxvY2FsZURhdGE9SGUsWW4udG9Jc29TdHJpbmc9QygidG9Jc29TdHJpbmcoKSBpcyBkZXByZWNhdGVkLiBQbGVhc2UgdXNlIHRvSVNPU3RyaW5nKCkgaW5zdGVhZCAobm90aWNlIHRoZSBjYXBpdGFscykiLFJuKSxZbi5sYW5nPVZlLFcoIlgiLDAsMCwidW5peCIpLFcoIngiLDAsMCwidmFsdWVPZiIpLGx0KCJ4IixhdCksbHQoIlgiLC9bKy1dP1xkKyhcLlxkezEsM30pPy8pLHB0KCJYIiwoZnVuY3Rpb24odCxlLG4pe24uX2Q9bmV3IERhdGUoMWUzKnBhcnNlRmxvYXQodCwxMCkpfSkpLHB0KCJ4IiwoZnVuY3Rpb24odCxlLG4pe24uX2Q9bmV3IERhdGUodyh0KSl9KSksaS52ZXJzaW9uPSIyLjI0LjAiLGU9eGUsaS5mbj1vbixpLm1pbj1mdW5jdGlvbigpe3JldHVybiB3ZSgiaXNCZWZvcmUiLFtdLnNsaWNlLmNhbGwoYXJndW1lbnRzLDApKX0saS5tYXg9ZnVuY3Rpb24oKXtyZXR1cm4gd2UoImlzQWZ0ZXIiLFtdLnNsaWNlLmNhbGwoYXJndW1lbnRzLDApKX0saS5ub3c9ZnVuY3Rpb24oKXtyZXR1cm4gRGF0ZS5ub3c/RGF0ZS5ub3coKTorbmV3IERhdGV9LGkudXRjPWQsaS51bml4PWZ1bmN0aW9uKHQpe3JldHVybiB4ZSgxZTMqdCl9LGkubW9udGhzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGxuKHQsZSwibW9udGhzIil9LGkuaXNEYXRlPXUsaS5sb2NhbGU9ZWUsaS5pbnZhbGlkPXksaS5kdXJhdGlvbj1QZSxpLmlzTW9tZW50PV8saS53ZWVrZGF5cz1mdW5jdGlvbih0LGUsbil7cmV0dXJuIGhuKHQsZSxuLCJ3ZWVrZGF5cyIpfSxpLnBhcnNlWm9uZT1mdW5jdGlvbigpe3JldHVybiB4ZS5hcHBseShudWxsLGFyZ3VtZW50cykucGFyc2Vab25lKCl9LGkubG9jYWxlRGF0YT1yZSxpLmlzRHVyYXRpb249Q2UsaS5tb250aHNTaG9ydD1mdW5jdGlvbih0LGUpe3JldHVybiBsbih0LGUsIm1vbnRoc1Nob3J0Iil9LGkud2Vla2RheXNNaW49ZnVuY3Rpb24odCxlLG4pe3JldHVybiBobih0LGUsbiwid2Vla2RheXNNaW4iKX0saS5kZWZpbmVMb2NhbGU9bmUsaS51cGRhdGVMb2NhbGU9ZnVuY3Rpb24odCxlKXtpZihudWxsIT1lKXt2YXIgbixyLGk9WnQ7bnVsbCE9KHI9dGUodCkpJiYoaT1yLl9jb25maWcpLChuPW5ldyBOKGU9RChpLGUpKSkucGFyZW50TG9jYWxlPUp0W3RdLEp0W3RdPW4sZWUodCl9ZWxzZSBudWxsIT1KdFt0XSYmKG51bGwhPUp0W3RdLnBhcmVudExvY2FsZT9KdFt0XT1KdFt0XS5wYXJlbnRMb2NhbGU6bnVsbCE9SnRbdF0mJmRlbGV0ZSBKdFt0XSk7cmV0dXJuIEp0W3RdfSxpLmxvY2FsZXM9ZnVuY3Rpb24oKXtyZXR1cm4gUyhKdCl9LGkud2Vla2RheXNTaG9ydD1mdW5jdGlvbih0LGUsbil7cmV0dXJuIGhuKHQsZSxuLCJ3ZWVrZGF5c1Nob3J0Iil9LGkubm9ybWFsaXplVW5pdHM9RixpLnJlbGF0aXZlVGltZVJvdW5kaW5nPWZ1bmN0aW9uKHQpe3JldHVybiB2b2lkIDA9PT10P0ZuOiJmdW5jdGlvbiI9PXR5cGVvZiB0JiYoRm49dCwhMCl9LGkucmVsYXRpdmVUaW1lVGhyZXNob2xkPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHZvaWQgMCE9PVBuW3RdJiYodm9pZCAwPT09ZT9Qblt0XTooUG5bdF09ZSwicyI9PT10JiYoUG4uc3M9ZS0xKSwhMCkpfSxpLmNhbGVuZGFyRm9ybWF0PWZ1bmN0aW9uKHQsZSl7dmFyIG49dC5kaWZmKGUsImRheXMiLCEwKTtyZXR1cm4gbjwtNj8ic2FtZUVsc2UiOm48LTE/Imxhc3RXZWVrIjpuPDA/Imxhc3REYXkiOm48MT8ic2FtZURheSI6bjwyPyJuZXh0RGF5IjpuPDc/Im5leHRXZWVrIjoic2FtZUVsc2UifSxpLnByb3RvdHlwZT1vbixpLkhUTUw1X0ZNVD17REFURVRJTUVfTE9DQUw6IllZWVktTU0tRERUSEg6bW0iLERBVEVUSU1FX0xPQ0FMX1NFQ09ORFM6IllZWVktTU0tRERUSEg6bW06c3MiLERBVEVUSU1FX0xPQ0FMX01TOiJZWVlZLU1NLUREVEhIOm1tOnNzLlNTUyIsREFURToiWVlZWS1NTS1ERCIsVElNRToiSEg6bW0iLFRJTUVfU0VDT05EUzoiSEg6bW06c3MiLFRJTUVfTVM6IkhIOm1tOnNzLlNTUyIsV0VFSzoiR0dHRy1bV11XVyIsTU9OVEg6IllZWVktTU0ifSxpfSgpfSkuY2FsbCh0aGlzLG4oNykodCkpfSxmdW5jdGlvbih0LGUsbil7dmFyIHI9bigzNyksaT1uKDgwKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIG51bGwhPXQmJmkodC5sZW5ndGgpJiYhcih0KX19LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDI1NiksaT1uKDI2NiksYT1uKDM1KSxvPW4oNSkscz1uKDI3Myk7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6bnVsbD09dD9hOiJvYmplY3QiPT10eXBlb2YgdD9vKHQpP2kodFswXSx0WzFdKTpyKHQpOnModCl9fSxmdW5jdGlvbih0LGUsbil7KGZ1bmN0aW9uKHQscil7dmFyIGk9ZnVuY3Rpb24oKXt2YXIgdD1mdW5jdGlvbih0LGUsbixyKXtmb3Iobj1ufHx7fSxyPXQubGVuZ3RoO3ItLTtuW3Rbcl1dPWUpO3JldHVybiBufSxlPVsxLDldLG49WzEsN10scj1bMSw2XSxpPVsxLDhdLGE9WzEsMjAsMjEsMjIsMjMsMzgsNDYsNzUsNzYsNzcsNzgsNzksODAsOTEsOTIsOTUsOTYsOTcsOTksMTAwLDEwNiwxMDcsMTA4LDEwOSwxMTAsMTExXSxvPVsyLDEwXSxzPVsxLDIwXSxjPVsxLDIxXSx1PVsxLDIyXSxsPVsxLDIzXSxoPVsxLDMwXSxmPVsxLDU0XSxkPVsxLDMyXSxwPVsxLDMzXSxnPVsxLDM0XSx5PVsxLDM1XSx2PVsxLDM2XSxtPVsxLDQ4XSxiPVsxLDQzXSx4PVsxLDQ1XSxfPVsxLDQwXSxrPVsxLDQ0XSx3PVsxLDQ3XSxFPVsxLDUxXSxUPVsxLDUyXSxDPVsxLDUzXSxTPVsxLDQyXSxBPVsxLDQ2XSxNPVsxLDQ5XSxPPVsxLDUwXSxEPVsxLDQxXSxOPVsxLDU3XSxCPVsxLDYyXSxMPVsxLDIwLDIxLDIyLDIzLDM4LDQyLDQ2LDc1LDc2LDc3LDc4LDc5LDgwLDkxLDkyLDk1LDk2LDk3LDk5LDEwMCwxMDYsMTA3LDEwOCwxMDksMTEwLDExMV0sRj1bMSw2Nl0sUD1bMSw2NV0sST1bMSw2N10saj1bMjAsMjEsMjMsNjksNzBdLFI9WzIwLDIxLDIyLDIzLDY5LDcwXSxZPVsyMCwyMSwyMiwyMyw0Nyw2OSw3MF0sej1bMjAsMjEsMjIsMjMsNDAsNDYsNDcsNDksNTEsNTMsNTUsNTcsNTksNjEsNjIsNjQsNjksNzAsODAsOTEsOTIsOTUsOTYsOTcsOTksMTAwLDEwNiwxMDcsMTA4LDEwOSwxMTAsMTExXSxVPVsyMCwyMSwyM10sJD1bMjAsMjEsMjMsNDYsNjksNzAsODAsOTEsOTIsOTUsOTYsOTcsOTksMTAwLDEwNiwxMDcsMTA4LDEwOSwxMTAsMTExXSxXPVsxLDEyLDIwLDIxLDIyLDIzLDI0LDM4LDQyLDQ2LDc1LDc2LDc3LDc4LDc5LDgwLDkxLDkyLDk1LDk2LDk3LDk5LDEwMCwxMDYsMTA3LDEwOCwxMDksMTEwLDExMV0sVj1bNDYsODAsOTEsOTIsOTUsOTYsOTcsOTksMTAwLDEwNiwxMDcsMTA4LDEwOSwxMTAsMTExXSxIPVsxLDExNV0sRz1bMSwxMzZdLHE9WzEsMTM3XSxYPVsxLDEzOF0sWj1bMSwxMzldLEo9WzEsMTE5XSxRPVsxLDExMF0sSz1bMSwxMTFdLHR0PVsxLDEwN10sZXQ9WzEsMTMxXSxudD1bMSwxMzJdLHJ0PVsxLDEzM10saXQ9WzEsMTM0XSxhdD1bMSwxMzVdLG90PVsxLDE0MF0sc3Q9WzEsMTQxXSxjdD1bMSwxMTNdLHV0PVsxLDEyMV0sbHQ9WzEsMTI0XSxodD1bMSwxMjJdLGZ0PVsxLDEyM10sZHQ9WzEsMTE2XSxwdD1bMSwxMjldLGd0PVsxLDEyOF0seXQ9WzEsMTEyXSx2dD1bMSwxMDldLG10PVsxLDExOF0sYnQ9WzEsMTIwXSx4dD1bMSwxMjVdLF90PVsxLDEyNl0sa3Q9WzEsMTI3XSx3dD1bMSwxMzBdLEV0PVsyMCwyMSwyMiwyMywzOCw0Miw0Niw3NSw3Niw3Nyw3OCw3OSw4MCw5MSw5Miw5NSw5Niw5Nyw5OSwxMDAsMTA2LDEwNywxMDgsMTA5LDExMCwxMTFdLFR0PVsxLDE0NF0sQ3Q9WzEsMTQ4XSxTdD1bMSwxNTBdLEF0PVsxLDE1MV0sTXQ9WzEyLDIxLDIyLDI0XSxPdD1bMjAsMjEsMjIsMjMsMjQsMjYsMzgsNDAsNDEsNDIsNDYsNTAsNTIsNTQsNTYsNTgsNjAsNjEsNjMsNjUsNjksNzAsNzEsNzUsNzYsNzcsNzgsNzksODAsODEsODQsOTEsOTIsOTUsOTYsOTcsOTksMTAwLDEwMSwxMDIsMTA2LDEwNywxMDgsMTA5LDExMCwxMTFdLER0PVsyMCwyMSwyMiwyMywyNiw0Niw4MCw5MSw5Miw5NSw5Niw5Nyw5OSwxMDAsMTA2LDEwNywxMDgsMTA5LDExMCwxMTFdLE50PVsyMiw5Ml0sQnQ9WzEsMjIwXSxMdD1bMSwyMjRdLEZ0PVsxLDIyMV0sUHQ9WzEsMjE4XSxJdD1bMSwyMTVdLGp0PVsxLDIxNl0sUnQ9WzEsMjE3XSxZdD1bMSwyMTldLHp0PVsxLDIyMl0sVXQ9WzEsMjIzXSwkdD1bMSwyMjVdLFd0PVsxLDI0MV0sVnQ9WzIwLDIxLDIzLDkyXSxIdD1bMjAsMjEsMjIsMjMsNzUsODgsOTEsOTIsOTUsOTYsOTcsOTgsOTksMTAwLDEwMV0sR3Q9e3RyYWNlOmZ1bmN0aW9uKCl7fSx5eTp7fSxzeW1ib2xzXzp7ZXJyb3I6MixzdGFydDozLG1lcm1haWREb2M6NCxkaXJlY3RpdmU6NSxvcGVuRGlyZWN0aXZlOjYsdHlwZURpcmVjdGl2ZTo3LGNsb3NlRGlyZWN0aXZlOjgsc2VwYXJhdG9yOjksIjoiOjEwLGFyZ0RpcmVjdGl2ZToxMSxvcGVuX2RpcmVjdGl2ZToxMix0eXBlX2RpcmVjdGl2ZToxMyxhcmdfZGlyZWN0aXZlOjE0LGNsb3NlX2RpcmVjdGl2ZToxNSxncmFwaENvbmZpZzoxNixkb2N1bWVudDoxNyxsaW5lOjE4LHN0YXRlbWVudDoxOSxTRU1JOjIwLE5FV0xJTkU6MjEsU1BBQ0U6MjIsRU9GOjIzLEdSQVBIOjI0LE5PRElSOjI1LERJUjoyNixGaXJzdFN0bXRTZXBlcmF0b3I6MjcsZW5kaW5nOjI4LGVuZFRva2VuOjI5LHNwYWNlTGlzdDozMCxzcGFjZUxpc3ROZXdsaW5lOjMxLHZlcnRpY2VTdGF0ZW1lbnQ6MzIsc3R5bGVTdGF0ZW1lbnQ6MzMsbGlua1N0eWxlU3RhdGVtZW50OjM0LGNsYXNzRGVmU3RhdGVtZW50OjM1LGNsYXNzU3RhdGVtZW50OjM2LGNsaWNrU3RhdGVtZW50OjM3LHN1YmdyYXBoOjM4LHRleHQ6MzksU1FTOjQwLFNRRTo0MSxlbmQ6NDIsbGluazo0Myxub2RlOjQ0LHZlcnRleDo0NSxBTVA6NDYsU1RZTEVfU0VQQVJBVE9SOjQ3LGlkU3RyaW5nOjQ4LFBTOjQ5LFBFOjUwLCIoLSI6NTEsIi0pIjo1MixTVEFESVVNU1RBUlQ6NTMsU1RBRElVTUVORDo1NCxTVUJST1VUSU5FU1RBUlQ6NTUsU1VCUk9VVElORUVORDo1NixDWUxJTkRFUlNUQVJUOjU3LENZTElOREVSRU5EOjU4LERJQU1PTkRfU1RBUlQ6NTksRElBTU9ORF9TVE9QOjYwLFRBR0VORDo2MSxUUkFQU1RBUlQ6NjIsVFJBUEVORDo2MyxJTlZUUkFQU1RBUlQ6NjQsSU5WVFJBUEVORDo2NSxsaW5rU3RhdGVtZW50OjY2LGFycm93VGV4dDo2NyxURVNUU1RSOjY4LFNUQVJUX0xJTks6NjksTElOSzo3MCxQSVBFOjcxLHRleHRUb2tlbjo3MixTVFI6NzMsa2V5d29yZHM6NzQsU1RZTEU6NzUsTElOS1NUWUxFOjc2LENMQVNTREVGOjc3LENMQVNTOjc4LENMSUNLOjc5LERPV046ODAsVVA6ODEsdGV4dE5vVGFnczo4Mix0ZXh0Tm9UYWdzVG9rZW46ODMsREVGQVVMVDo4NCxzdHlsZXNPcHQ6ODUsYWxwaGFOdW06ODYsTElOS19UQVJHRVQ6ODcsSEVYOjg4LG51bUxpc3Q6ODksSU5URVJQT0xBVEU6OTAsTlVNOjkxLENPTU1BOjkyLHN0eWxlOjkzLHN0eWxlQ29tcG9uZW50Ojk0LEFMUEhBOjk1LENPTE9OOjk2LE1JTlVTOjk3LFVOSVQ6OTgsQlJLVDo5OSxET1Q6MTAwLFBDVDoxMDEsVEFHU1RBUlQ6MTAyLGFscGhhTnVtVG9rZW46MTAzLGlkU3RyaW5nVG9rZW46MTA0LGFscGhhTnVtU3RhdGVtZW50OjEwNSxQVU5DVFVBVElPTjoxMDYsVU5JQ09ERV9URVhUOjEwNyxQTFVTOjEwOCxFUVVBTFM6MTA5LE1VTFQ6MTEwLFVOREVSU0NPUkU6MTExLGdyYXBoQ29kZVRva2VuczoxMTIsQVJST1dfQ1JPU1M6MTEzLEFSUk9XX1BPSU5UOjExNCxBUlJPV19DSVJDTEU6MTE1LEFSUk9XX09QRU46MTE2LFFVT1RFOjExNywkYWNjZXB0OjAsJGVuZDoxfSx0ZXJtaW5hbHNfOnsyOiJlcnJvciIsMTA6IjoiLDEyOiJvcGVuX2RpcmVjdGl2ZSIsMTM6InR5cGVfZGlyZWN0aXZlIiwxNDoiYXJnX2RpcmVjdGl2ZSIsMTU6ImNsb3NlX2RpcmVjdGl2ZSIsMjA6IlNFTUkiLDIxOiJORVdMSU5FIiwyMjoiU1BBQ0UiLDIzOiJFT0YiLDI0OiJHUkFQSCIsMjU6Ik5PRElSIiwyNjoiRElSIiwzODoic3ViZ3JhcGgiLDQwOiJTUVMiLDQxOiJTUUUiLDQyOiJlbmQiLDQ2OiJBTVAiLDQ3OiJTVFlMRV9TRVBBUkFUT1IiLDQ5OiJQUyIsNTA6IlBFIiw1MToiKC0iLDUyOiItKSIsNTM6IlNUQURJVU1TVEFSVCIsNTQ6IlNUQURJVU1FTkQiLDU1OiJTVUJST1VUSU5FU1RBUlQiLDU2OiJTVUJST1VUSU5FRU5EIiw1NzoiQ1lMSU5ERVJTVEFSVCIsNTg6IkNZTElOREVSRU5EIiw1OToiRElBTU9ORF9TVEFSVCIsNjA6IkRJQU1PTkRfU1RPUCIsNjE6IlRBR0VORCIsNjI6IlRSQVBTVEFSVCIsNjM6IlRSQVBFTkQiLDY0OiJJTlZUUkFQU1RBUlQiLDY1OiJJTlZUUkFQRU5EIiw2ODoiVEVTVFNUUiIsNjk6IlNUQVJUX0xJTksiLDcwOiJMSU5LIiw3MToiUElQRSIsNzM6IlNUUiIsNzU6IlNUWUxFIiw3NjoiTElOS1NUWUxFIiw3NzoiQ0xBU1NERUYiLDc4OiJDTEFTUyIsNzk6IkNMSUNLIiw4MDoiRE9XTiIsODE6IlVQIiw4NDoiREVGQVVMVCIsODc6IkxJTktfVEFSR0VUIiw4ODoiSEVYIiw5MDoiSU5URVJQT0xBVEUiLDkxOiJOVU0iLDkyOiJDT01NQSIsOTU6IkFMUEhBIiw5NjoiQ09MT04iLDk3OiJNSU5VUyIsOTg6IlVOSVQiLDk5OiJCUktUIiwxMDA6IkRPVCIsMTAxOiJQQ1QiLDEwMjoiVEFHU1RBUlQiLDEwNjoiUFVOQ1RVQVRJT04iLDEwNzoiVU5JQ09ERV9URVhUIiwxMDg6IlBMVVMiLDEwOToiRVFVQUxTIiwxMTA6Ik1VTFQiLDExMToiVU5ERVJTQ09SRSIsMTEzOiJBUlJPV19DUk9TUyIsMTE0OiJBUlJPV19QT0lOVCIsMTE1OiJBUlJPV19DSVJDTEUiLDExNjoiQVJST1dfT1BFTiIsMTE3OiJRVU9URSJ9LHByb2R1Y3Rpb25zXzpbMCxbMywxXSxbMywyXSxbNSw0XSxbNSw2XSxbNiwxXSxbNywxXSxbMTEsMV0sWzgsMV0sWzQsMl0sWzE3LDBdLFsxNywyXSxbMTgsMV0sWzE4LDFdLFsxOCwxXSxbMTgsMV0sWzE4LDFdLFsxNiwyXSxbMTYsMl0sWzE2LDJdLFsxNiwzXSxbMjgsMl0sWzI4LDFdLFsyOSwxXSxbMjksMV0sWzI5LDFdLFsyNywxXSxbMjcsMV0sWzI3LDJdLFszMSwyXSxbMzEsMl0sWzMxLDFdLFszMSwxXSxbMzAsMl0sWzMwLDFdLFsxOSwyXSxbMTksMl0sWzE5LDJdLFsxOSwyXSxbMTksMl0sWzE5LDJdLFsxOSw5XSxbMTksNl0sWzE5LDRdLFs5LDFdLFs5LDFdLFs5LDFdLFszMiwzXSxbMzIsNF0sWzMyLDJdLFszMiwxXSxbNDQsMV0sWzQ0LDVdLFs0NCwzXSxbNDUsNF0sWzQ1LDZdLFs0NSw0XSxbNDUsNF0sWzQ1LDRdLFs0NSw0XSxbNDUsNF0sWzQ1LDRdLFs0NSw2XSxbNDUsNF0sWzQ1LDRdLFs0NSw0XSxbNDUsNF0sWzQ1LDRdLFs0NSwxXSxbNDMsMl0sWzQzLDNdLFs0MywzXSxbNDMsMV0sWzQzLDNdLFs2NiwxXSxbNjcsM10sWzM5LDFdLFszOSwyXSxbMzksMV0sWzc0LDFdLFs3NCwxXSxbNzQsMV0sWzc0LDFdLFs3NCwxXSxbNzQsMV0sWzc0LDFdLFs3NCwxXSxbNzQsMV0sWzc0LDFdLFs3NCwxXSxbODIsMV0sWzgyLDJdLFszNSw1XSxbMzUsNV0sWzM2LDVdLFszNyw1XSxbMzcsN10sWzM3LDVdLFszNyw3XSxbMzcsN10sWzM3LDldLFszMyw1XSxbMzMsNV0sWzM0LDVdLFszNCw1XSxbMzQsOV0sWzM0LDldLFszNCw3XSxbMzQsN10sWzg5LDFdLFs4OSwzXSxbODUsMV0sWzg1LDNdLFs5MywxXSxbOTMsMl0sWzk0LDFdLFs5NCwxXSxbOTQsMV0sWzk0LDFdLFs5NCwxXSxbOTQsMV0sWzk0LDFdLFs5NCwxXSxbOTQsMV0sWzk0LDFdLFs5NCwxXSxbNzIsMV0sWzcyLDFdLFs3MiwxXSxbNzIsMV0sWzcyLDFdLFs3MiwxXSxbODMsMV0sWzgzLDFdLFs4MywxXSxbODMsMV0sWzQ4LDFdLFs0OCwyXSxbODYsMV0sWzg2LDJdLFsxMDUsMV0sWzEwNSwxXSxbMTA1LDFdLFsxMDUsMV0sWzEwMywxXSxbMTAzLDFdLFsxMDMsMV0sWzEwMywxXSxbMTAzLDFdLFsxMDMsMV0sWzEwMywxXSxbMTAzLDFdLFsxMDMsMV0sWzEwMywxXSxbMTAzLDFdLFsxMDMsMV0sWzEwMywxXSxbMTA0LDFdLFsxMDQsMV0sWzEwNCwxXSxbMTA0LDFdLFsxMDQsMV0sWzEwNCwxXSxbMTA0LDFdLFsxMDQsMV0sWzEwNCwxXSxbMTA0LDFdLFsxMDQsMV0sWzEwNCwxXSxbMTA0LDFdLFsxMDQsMV0sWzEwNCwxXSxbMTEyLDFdLFsxMTIsMV0sWzExMiwxXSxbMTEyLDFdLFsxMTIsMV0sWzExMiwxXSxbMTEyLDFdLFsxMTIsMV0sWzExMiwxXSxbMTEyLDFdLFsxMTIsMV0sWzExMiwxXSxbMTEyLDFdLFsxMTIsMV0sWzExMiwxXSxbMTEyLDFdLFsxMTIsMV0sWzExMiwxXSxbMTEyLDFdLFsxMTIsMV0sWzExMiwxXSxbMTEyLDFdLFsxMTIsMV0sWzExMiwxXSxbMTEyLDFdXSxwZXJmb3JtQWN0aW9uOmZ1bmN0aW9uKHQsZSxuLHIsaSxhLG8pe3ZhciBzPWEubGVuZ3RoLTE7c3dpdGNoKGkpe2Nhc2UgNTpyLnBhcnNlRGlyZWN0aXZlKCIlJXsiLCJvcGVuX2RpcmVjdGl2ZSIpO2JyZWFrO2Nhc2UgNjpyLnBhcnNlRGlyZWN0aXZlKGFbc10sInR5cGVfZGlyZWN0aXZlIik7YnJlYWs7Y2FzZSA3OmFbc109YVtzXS50cmltKCkucmVwbGFjZSgvJy9nLCciJyksci5wYXJzZURpcmVjdGl2ZShhW3NdLCJhcmdfZGlyZWN0aXZlIik7YnJlYWs7Y2FzZSA4OnIucGFyc2VEaXJlY3RpdmUoIn0lJSIsImNsb3NlX2RpcmVjdGl2ZSIsImZsb3djaGFydCIpO2JyZWFrO2Nhc2UgMTA6dGhpcy4kPVtdO2JyZWFrO2Nhc2UgMTE6YVtzXSE9PVtdJiZhW3MtMV0ucHVzaChhW3NdKSx0aGlzLiQ9YVtzLTFdO2JyZWFrO2Nhc2UgMTI6Y2FzZSA3NjpjYXNlIDc4OmNhc2UgOTA6Y2FzZSAxMzg6Y2FzZSAxNDA6Y2FzZSAxNDE6dGhpcy4kPWFbc107YnJlYWs7Y2FzZSAxOTpyLnNldERpcmVjdGlvbigiVEIiKSx0aGlzLiQ9IlRCIjticmVhaztjYXNlIDIwOnIuc2V0RGlyZWN0aW9uKGFbcy0xXSksdGhpcy4kPWFbcy0xXTticmVhaztjYXNlIDM1OnRoaXMuJD1hW3MtMV0ubm9kZXM7YnJlYWs7Y2FzZSAzNjpjYXNlIDM3OmNhc2UgMzg6Y2FzZSAzOTpjYXNlIDQwOnRoaXMuJD1bXTticmVhaztjYXNlIDQxOnRoaXMuJD1yLmFkZFN1YkdyYXBoKGFbcy02XSxhW3MtMV0sYVtzLTRdKTticmVhaztjYXNlIDQyOnRoaXMuJD1yLmFkZFN1YkdyYXBoKGFbcy0zXSxhW3MtMV0sYVtzLTNdKTticmVhaztjYXNlIDQzOnRoaXMuJD1yLmFkZFN1YkdyYXBoKHZvaWQgMCxhW3MtMV0sdm9pZCAwKTticmVhaztjYXNlIDQ3OnIuYWRkTGluayhhW3MtMl0uc3RtdCxhW3NdLGFbcy0xXSksdGhpcy4kPXtzdG10OmFbc10sbm9kZXM6YVtzXS5jb25jYXQoYVtzLTJdLm5vZGVzKX07YnJlYWs7Y2FzZSA0ODpyLmFkZExpbmsoYVtzLTNdLnN0bXQsYVtzLTFdLGFbcy0yXSksdGhpcy4kPXtzdG10OmFbcy0xXSxub2RlczphW3MtMV0uY29uY2F0KGFbcy0zXS5ub2Rlcyl9O2JyZWFrO2Nhc2UgNDk6dGhpcy4kPXtzdG10OmFbcy0xXSxub2RlczphW3MtMV19O2JyZWFrO2Nhc2UgNTA6dGhpcy4kPXtzdG10OmFbc10sbm9kZXM6YVtzXX07YnJlYWs7Y2FzZSA1MTp0aGlzLiQ9W2Fbc11dO2JyZWFrO2Nhc2UgNTI6dGhpcy4kPWFbcy00XS5jb25jYXQoYVtzXSk7YnJlYWs7Y2FzZSA1Mzp0aGlzLiQ9W2Fbcy0yXV0sci5zZXRDbGFzcyhhW3MtMl0sYVtzXSk7YnJlYWs7Y2FzZSA1NDp0aGlzLiQ9YVtzLTNdLHIuYWRkVmVydGV4KGFbcy0zXSxhW3MtMV0sInNxdWFyZSIpO2JyZWFrO2Nhc2UgNTU6dGhpcy4kPWFbcy01XSxyLmFkZFZlcnRleChhW3MtNV0sYVtzLTJdLCJjaXJjbGUiKTticmVhaztjYXNlIDU2OnRoaXMuJD1hW3MtM10sci5hZGRWZXJ0ZXgoYVtzLTNdLGFbcy0xXSwiZWxsaXBzZSIpO2JyZWFrO2Nhc2UgNTc6dGhpcy4kPWFbcy0zXSxyLmFkZFZlcnRleChhW3MtM10sYVtzLTFdLCJzdGFkaXVtIik7YnJlYWs7Y2FzZSA1ODp0aGlzLiQ9YVtzLTNdLHIuYWRkVmVydGV4KGFbcy0zXSxhW3MtMV0sInN1YnJvdXRpbmUiKTticmVhaztjYXNlIDU5OnRoaXMuJD1hW3MtM10sci5hZGRWZXJ0ZXgoYVtzLTNdLGFbcy0xXSwiY3lsaW5kZXIiKTticmVhaztjYXNlIDYwOnRoaXMuJD1hW3MtM10sci5hZGRWZXJ0ZXgoYVtzLTNdLGFbcy0xXSwicm91bmQiKTticmVhaztjYXNlIDYxOnRoaXMuJD1hW3MtM10sci5hZGRWZXJ0ZXgoYVtzLTNdLGFbcy0xXSwiZGlhbW9uZCIpO2JyZWFrO2Nhc2UgNjI6dGhpcy4kPWFbcy01XSxyLmFkZFZlcnRleChhW3MtNV0sYVtzLTJdLCJoZXhhZ29uIik7YnJlYWs7Y2FzZSA2Mzp0aGlzLiQ9YVtzLTNdLHIuYWRkVmVydGV4KGFbcy0zXSxhW3MtMV0sIm9kZCIpO2JyZWFrO2Nhc2UgNjQ6dGhpcy4kPWFbcy0zXSxyLmFkZFZlcnRleChhW3MtM10sYVtzLTFdLCJ0cmFwZXpvaWQiKTticmVhaztjYXNlIDY1OnRoaXMuJD1hW3MtM10sci5hZGRWZXJ0ZXgoYVtzLTNdLGFbcy0xXSwiaW52X3RyYXBlem9pZCIpO2JyZWFrO2Nhc2UgNjY6dGhpcy4kPWFbcy0zXSxyLmFkZFZlcnRleChhW3MtM10sYVtzLTFdLCJsZWFuX3JpZ2h0Iik7YnJlYWs7Y2FzZSA2Nzp0aGlzLiQ9YVtzLTNdLHIuYWRkVmVydGV4KGFbcy0zXSxhW3MtMV0sImxlYW5fbGVmdCIpO2JyZWFrO2Nhc2UgNjg6dGhpcy4kPWFbc10sci5hZGRWZXJ0ZXgoYVtzXSk7YnJlYWs7Y2FzZSA2OTphW3MtMV0udGV4dD1hW3NdLHRoaXMuJD1hW3MtMV07YnJlYWs7Y2FzZSA3MDpjYXNlIDcxOmFbcy0yXS50ZXh0PWFbcy0xXSx0aGlzLiQ9YVtzLTJdO2JyZWFrO2Nhc2UgNzI6dGhpcy4kPWFbc107YnJlYWs7Y2FzZSA3Mzp2YXIgYz1yLmRlc3RydWN0TGluayhhW3NdLGFbcy0yXSk7dGhpcy4kPXt0eXBlOmMudHlwZSxzdHJva2U6Yy5zdHJva2UsbGVuZ3RoOmMubGVuZ3RoLHRleHQ6YVtzLTFdfTticmVhaztjYXNlIDc0OmM9ci5kZXN0cnVjdExpbmsoYVtzXSk7dGhpcy4kPXt0eXBlOmMudHlwZSxzdHJva2U6Yy5zdHJva2UsbGVuZ3RoOmMubGVuZ3RofTticmVhaztjYXNlIDc1OnRoaXMuJD1hW3MtMV07YnJlYWs7Y2FzZSA3NzpjYXNlIDkxOmNhc2UgMTM5OnRoaXMuJD1hW3MtMV0rIiIrYVtzXTticmVhaztjYXNlIDkyOmNhc2UgOTM6dGhpcy4kPWFbcy00XSxyLmFkZENsYXNzKGFbcy0yXSxhW3NdKTticmVhaztjYXNlIDk0OnRoaXMuJD1hW3MtNF0sci5zZXRDbGFzcyhhW3MtMl0sYVtzXSk7YnJlYWs7Y2FzZSA5NTp0aGlzLiQ9YVtzLTRdLHIuc2V0Q2xpY2tFdmVudChhW3MtMl0sYVtzXSx2b2lkIDApO2JyZWFrO2Nhc2UgOTY6dGhpcy4kPWFbcy02XSxyLnNldENsaWNrRXZlbnQoYVtzLTRdLGFbcy0yXSxhW3NdKTticmVhaztjYXNlIDk3OnRoaXMuJD1hW3MtNF0sci5zZXRMaW5rKGFbcy0yXSxhW3NdLHZvaWQgMCx2b2lkIDApO2JyZWFrO2Nhc2UgOTg6dGhpcy4kPWFbcy02XSxyLnNldExpbmsoYVtzLTRdLGFbcy0yXSxhW3NdLHZvaWQgMCk7YnJlYWs7Y2FzZSA5OTp0aGlzLiQ9YVtzLTZdLHIuc2V0TGluayhhW3MtNF0sYVtzLTJdLHZvaWQgMCxhW3NdKTticmVhaztjYXNlIDEwMDp0aGlzLiQ9YVtzLThdLHIuc2V0TGluayhhW3MtNl0sYVtzLTRdLGFbcy0yXSxhW3NdKTticmVhaztjYXNlIDEwMTp0aGlzLiQ9YVtzLTRdLHIuYWRkVmVydGV4KGFbcy0yXSx2b2lkIDAsdm9pZCAwLGFbc10pO2JyZWFrO2Nhc2UgMTAyOmNhc2UgMTA0OnRoaXMuJD1hW3MtNF0sci51cGRhdGVMaW5rKGFbcy0yXSxhW3NdKTticmVhaztjYXNlIDEwMzp0aGlzLiQ9YVtzLTRdLHIudXBkYXRlTGluayhbYVtzLTJdXSxhW3NdKTticmVhaztjYXNlIDEwNTp0aGlzLiQ9YVtzLThdLHIudXBkYXRlTGlua0ludGVycG9sYXRlKFthW3MtNl1dLGFbcy0yXSksci51cGRhdGVMaW5rKFthW3MtNl1dLGFbc10pO2JyZWFrO2Nhc2UgMTA2OnRoaXMuJD1hW3MtOF0sci51cGRhdGVMaW5rSW50ZXJwb2xhdGUoYVtzLTZdLGFbcy0yXSksci51cGRhdGVMaW5rKGFbcy02XSxhW3NdKTticmVhaztjYXNlIDEwNzp0aGlzLiQ9YVtzLTZdLHIudXBkYXRlTGlua0ludGVycG9sYXRlKFthW3MtNF1dLGFbc10pO2JyZWFrO2Nhc2UgMTA4OnRoaXMuJD1hW3MtNl0sci51cGRhdGVMaW5rSW50ZXJwb2xhdGUoYVtzLTRdLGFbc10pO2JyZWFrO2Nhc2UgMTA5OmNhc2UgMTExOnRoaXMuJD1bYVtzXV07YnJlYWs7Y2FzZSAxMTA6Y2FzZSAxMTI6YVtzLTJdLnB1c2goYVtzXSksdGhpcy4kPWFbcy0yXTticmVhaztjYXNlIDExNDp0aGlzLiQ9YVtzLTFdK2Fbc107YnJlYWs7Y2FzZSAxMzY6dGhpcy4kPWFbc107YnJlYWs7Y2FzZSAxMzc6dGhpcy4kPWFbcy0xXSsiIithW3NdO2JyZWFrO2Nhc2UgMTQyOnRoaXMuJD0idiI7YnJlYWs7Y2FzZSAxNDM6dGhpcy4kPSItIn19LHRhYmxlOlt7MzoxLDQ6Miw1OjMsNjo1LDEyOmUsMTY6NCwyMTpuLDIyOnIsMjQ6aX0sezE6WzNdfSx7MTpbMiwxXX0sezM6MTAsNDoyLDU6Myw2OjUsMTI6ZSwxNjo0LDIxOm4sMjI6ciwyNDppfSx0KGEsbyx7MTc6MTF9KSx7NzoxMiwxMzpbMSwxM119LHsxNjoxNCwyMTpuLDIyOnIsMjQ6aX0sezE2OjE1LDIxOm4sMjI6ciwyNDppfSx7MjU6WzEsMTZdLDI2OlsxLDE3XX0sezEzOlsyLDVdfSx7MTpbMiwyXX0sezE6WzIsOV0sMTg6MTgsMTk6MTksMjA6cywyMTpjLDIyOnUsMjM6bCwzMjoyNCwzMzoyNSwzNDoyNiwzNToyNywzNjoyOCwzNzoyOSwzODpoLDQ0OjMxLDQ1OjM3LDQ2OmYsNDg6MzgsNzU6ZCw3NjpwLDc3OmcsNzg6eSw3OTp2LDgwOm0sOTE6Yiw5Mjp4LDk1Ol8sOTY6ayw5Nzp3LDk5OkUsMTAwOlQsMTA0OjM5LDEwNjpDLDEwNzpTLDEwODpBLDEwOTpNLDExMDpPLDExMTpEfSx7ODo1NSwxMDpbMSw1Nl0sMTU6Tn0sdChbMTAsMTVdLFsyLDZdKSx0KGEsWzIsMTddKSx0KGEsWzIsMThdKSx0KGEsWzIsMTldKSx7MjA6WzEsNTldLDIxOlsxLDYwXSwyMjpCLDI3OjU4LDMwOjYxfSx0KEwsWzIsMTFdKSx0KEwsWzIsMTJdKSx0KEwsWzIsMTNdKSx0KEwsWzIsMTRdKSx0KEwsWzIsMTVdKSx0KEwsWzIsMTZdKSx7OTo2MywyMDpGLDIxOlAsMjM6SSw0Mzo2NCw2Njo2OCw2OTpbMSw2OV0sNzA6WzEsNzBdfSx7OTo3MSwyMDpGLDIxOlAsMjM6SX0sezk6NzIsMjA6RiwyMTpQLDIzOkl9LHs5OjczLDIwOkYsMjE6UCwyMzpJfSx7OTo3NCwyMDpGLDIxOlAsMjM6SX0sezk6NzUsMjA6RiwyMTpQLDIzOkl9LHs5Ojc3LDIwOkYsMjE6UCwyMjpbMSw3Nl0sMjM6SX0sdChqLFsyLDUwXSx7MzA6NzgsMjI6Qn0pLHsyMjpbMSw3OV19LHsyMjpbMSw4MF19LHsyMjpbMSw4MV19LHsyMjpbMSw4Ml19LHsyMjpbMSw4M119LHQoUixbMiw1MV0sezQ3OlsxLDg0XX0pLHQoWSxbMiw2OF0sezEwNDo5NSw0MDpbMSw4NV0sNDY6Ziw0OTpbMSw4Nl0sNTE6WzEsODddLDUzOlsxLDg4XSw1NTpbMSw4OV0sNTc6WzEsOTBdLDU5OlsxLDkxXSw2MTpbMSw5Ml0sNjI6WzEsOTNdLDY0OlsxLDk0XSw4MDptLDkxOmIsOTI6eCw5NTpfLDk2OmssOTc6dyw5OTpFLDEwMDpULDEwNjpDLDEwNzpTLDEwODpBLDEwOTpNLDExMDpPLDExMTpEfSksdCh6LFsyLDEzNl0pLHQoeixbMiwxNTddKSx0KHosWzIsMTU4XSksdCh6LFsyLDE1OV0pLHQoeixbMiwxNjBdKSx0KHosWzIsMTYxXSksdCh6LFsyLDE2Ml0pLHQoeixbMiwxNjNdKSx0KHosWzIsMTY0XSksdCh6LFsyLDE2NV0pLHQoeixbMiwxNjZdKSx0KHosWzIsMTY3XSksdCh6LFsyLDE2OF0pLHQoeixbMiwxNjldKSx0KHosWzIsMTcwXSksdCh6LFsyLDE3MV0pLHs5Ojk2LDIwOkYsMjE6UCwyMzpJfSx7MTE6OTcsMTQ6WzEsOThdfSx0KFUsWzIsOF0pLHQoYSxbMiwyMF0pLHQoYSxbMiwyNl0pLHQoYSxbMiwyN10pLHsyMTpbMSw5OV19LHQoJCxbMiwzNF0sezMwOjEwMCwyMjpCfSksdChMLFsyLDM1XSksezQ0OjEwMSw0NTozNyw0NjpmLDQ4OjM4LDgwOm0sOTE6Yiw5Mjp4LDk1Ol8sOTY6ayw5Nzp3LDk5OkUsMTAwOlQsMTA0OjM5LDEwNjpDLDEwNzpTLDEwODpBLDEwOTpNLDExMDpPLDExMTpEfSx0KFcsWzIsNDRdKSx0KFcsWzIsNDVdKSx0KFcsWzIsNDZdKSx0KFYsWzIsNzJdLHs2NzoxMDIsNjg6WzEsMTAzXSw3MTpbMSwxMDRdfSksezIyOkgsMjQ6RywyNjpxLDM4OlgsMzk6MTA1LDQyOlosNDY6Siw2MTpRLDY5OkssNzI6MTA2LDczOnR0LDc0OjExNyw3NTpldCw3NjpudCw3NzpydCw3ODppdCw3OTphdCw4MDpvdCw4MTpzdCw4MzoxMDgsODQ6Y3QsOTE6dXQsOTI6bHQsOTU6aHQsOTY6ZnQsOTc6ZHQsOTk6cHQsMTAwOmd0LDEwMTp5dCwxMDI6dnQsMTAzOjExNCwxMDY6bXQsMTA3OmJ0LDEwODp4dCwxMDk6X3QsMTEwOmt0LDExMTp3dH0sdChbNDYsNjgsNzEsODAsOTEsOTIsOTUsOTYsOTcsOTksMTAwLDEwNiwxMDcsMTA4LDEwOSwxMTAsMTExXSxbMiw3NF0pLHQoTCxbMiwzNl0pLHQoTCxbMiwzN10pLHQoTCxbMiwzOF0pLHQoTCxbMiwzOV0pLHQoTCxbMiw0MF0pLHsyMjpILDI0OkcsMjY6cSwzODpYLDM5OjE0Miw0MjpaLDQ2OkosNjE6USw2OTpLLDcyOjEwNiw3Mzp0dCw3NDoxMTcsNzU6ZXQsNzY6bnQsNzc6cnQsNzg6aXQsNzk6YXQsODA6b3QsODE6c3QsODM6MTA4LDg0OmN0LDkxOnV0LDkyOmx0LDk1Omh0LDk2OmZ0LDk3OmR0LDk5OnB0LDEwMDpndCwxMDE6eXQsMTAyOnZ0LDEwMzoxMTQsMTA2Om10LDEwNzpidCwxMDg6eHQsMTA5Ol90LDExMDprdCwxMTE6d3R9LHQoRXQsbyx7MTc6MTQzfSksdChqLFsyLDQ5XSx7NDY6VHR9KSx7MjY6Q3QsNDY6Siw4MDpTdCw4NjoxNDUsODg6WzEsMTQ2XSw5MTp1dCw5MjpsdCw5NTpodCw5NjpmdCw5NzpBdCw5OTpwdCwxMDA6Z3QsMTAzOjE0OSwxMDU6MTQ3LDEwNjptdCwxMDc6YnQsMTA4Onh0LDEwOTpfdCwxMTA6a3QsMTExOnd0fSx7ODQ6WzEsMTUyXSw4OToxNTMsOTE6WzEsMTU0XX0sezI2OkN0LDQ2OkosODA6U3QsODQ6WzEsMTU1XSw4NjoxNTYsOTE6dXQsOTI6bHQsOTU6aHQsOTY6ZnQsOTc6QXQsOTk6cHQsMTAwOmd0LDEwMzoxNDksMTA1OjE0NywxMDY6bXQsMTA3OmJ0LDEwODp4dCwxMDk6X3QsMTEwOmt0LDExMTp3dH0sezI2OkN0LDQ2OkosODA6U3QsODY6MTU3LDkxOnV0LDkyOmx0LDk1Omh0LDk2OmZ0LDk3OkF0LDk5OnB0LDEwMDpndCwxMDM6MTQ5LDEwNToxNDcsMTA2Om10LDEwNzpidCwxMDg6eHQsMTA5Ol90LDExMDprdCwxMTE6d3R9LHsyNjpDdCw0NjpKLDgwOlN0LDg2OjE1OCw5MTp1dCw5MjpsdCw5NTpodCw5NjpmdCw5NzpBdCw5OTpwdCwxMDA6Z3QsMTAzOjE0OSwxMDU6MTQ3LDEwNjptdCwxMDc6YnQsMTA4Onh0LDEwOTpfdCwxMTA6a3QsMTExOnd0fSx7NDY6Ziw0ODoxNTksODA6bSw5MTpiLDkyOngsOTU6Xyw5NjprLDk3OncsOTk6RSwxMDA6VCwxMDQ6MzksMTA2OkMsMTA3OlMsMTA4OkEsMTA5Ok0sMTEwOk8sMTExOkR9LHsyMjpILDI0OkcsMjY6cSwzODpYLDM5OjE2MCw0MjpaLDQ2OkosNjE6USw2OTpLLDcyOjEwNiw3Mzp0dCw3NDoxMTcsNzU6ZXQsNzY6bnQsNzc6cnQsNzg6aXQsNzk6YXQsODA6b3QsODE6c3QsODM6MTA4LDg0OmN0LDkxOnV0LDkyOmx0LDk1Omh0LDk2OmZ0LDk3OmR0LDk5OnB0LDEwMDpndCwxMDE6eXQsMTAyOnZ0LDEwMzoxMTQsMTA2Om10LDEwNzpidCwxMDg6eHQsMTA5Ol90LDExMDprdCwxMTE6d3R9LHsyMjpILDI0OkcsMjY6cSwzODpYLDM5OjE2Miw0MjpaLDQ2OkosNDk6WzEsMTYxXSw2MTpRLDY5OkssNzI6MTA2LDczOnR0LDc0OjExNyw3NTpldCw3NjpudCw3NzpydCw3ODppdCw3OTphdCw4MDpvdCw4MTpzdCw4MzoxMDgsODQ6Y3QsOTE6dXQsOTI6bHQsOTU6aHQsOTY6ZnQsOTc6ZHQsOTk6cHQsMTAwOmd0LDEwMTp5dCwxMDI6dnQsMTAzOjExNCwxMDY6bXQsMTA3OmJ0LDEwODp4dCwxMDk6X3QsMTEwOmt0LDExMTp3dH0sezIyOkgsMjQ6RywyNjpxLDM4OlgsMzk6MTYzLDQyOlosNDY6Siw2MTpRLDY5OkssNzI6MTA2LDczOnR0LDc0OjExNyw3NTpldCw3NjpudCw3NzpydCw3ODppdCw3OTphdCw4MDpvdCw4MTpzdCw4MzoxMDgsODQ6Y3QsOTE6dXQsOTI6bHQsOTU6aHQsOTY6ZnQsOTc6ZHQsOTk6cHQsMTAwOmd0LDEwMTp5dCwxMDI6dnQsMTAzOjExNCwxMDY6bXQsMTA3OmJ0LDEwODp4dCwxMDk6X3QsMTEwOmt0LDExMTp3dH0sezIyOkgsMjQ6RywyNjpxLDM4OlgsMzk6MTY0LDQyOlosNDY6Siw2MTpRLDY5OkssNzI6MTA2LDczOnR0LDc0OjExNyw3NTpldCw3NjpudCw3NzpydCw3ODppdCw3OTphdCw4MDpvdCw4MTpzdCw4MzoxMDgsODQ6Y3QsOTE6dXQsOTI6bHQsOTU6aHQsOTY6ZnQsOTc6ZHQsOTk6cHQsMTAwOmd0LDEwMTp5dCwxMDI6dnQsMTAzOjExNCwxMDY6bXQsMTA3OmJ0LDEwODp4dCwxMDk6X3QsMTEwOmt0LDExMTp3dH0sezIyOkgsMjQ6RywyNjpxLDM4OlgsMzk6MTY1LDQyOlosNDY6Siw2MTpRLDY5OkssNzI6MTA2LDczOnR0LDc0OjExNyw3NTpldCw3NjpudCw3NzpydCw3ODppdCw3OTphdCw4MDpvdCw4MTpzdCw4MzoxMDgsODQ6Y3QsOTE6dXQsOTI6bHQsOTU6aHQsOTY6ZnQsOTc6ZHQsOTk6cHQsMTAwOmd0LDEwMTp5dCwxMDI6dnQsMTAzOjExNCwxMDY6bXQsMTA3OmJ0LDEwODp4dCwxMDk6X3QsMTEwOmt0LDExMTp3dH0sezIyOkgsMjQ6RywyNjpxLDM4OlgsMzk6MTY2LDQyOlosNDY6Siw2MTpRLDY5OkssNzI6MTA2LDczOnR0LDc0OjExNyw3NTpldCw3NjpudCw3NzpydCw3ODppdCw3OTphdCw4MDpvdCw4MTpzdCw4MzoxMDgsODQ6Y3QsOTE6dXQsOTI6bHQsOTU6aHQsOTY6ZnQsOTc6ZHQsOTk6cHQsMTAwOmd0LDEwMTp5dCwxMDI6dnQsMTAzOjExNCwxMDY6bXQsMTA3OmJ0LDEwODp4dCwxMDk6X3QsMTEwOmt0LDExMTp3dH0sezIyOkgsMjQ6RywyNjpxLDM4OlgsMzk6MTY3LDQyOlosNDY6Siw1OTpbMSwxNjhdLDYxOlEsNjk6Syw3MjoxMDYsNzM6dHQsNzQ6MTE3LDc1OmV0LDc2Om50LDc3OnJ0LDc4Oml0LDc5OmF0LDgwOm90LDgxOnN0LDgzOjEwOCw4NDpjdCw5MTp1dCw5MjpsdCw5NTpodCw5NjpmdCw5NzpkdCw5OTpwdCwxMDA6Z3QsMTAxOnl0LDEwMjp2dCwxMDM6MTE0LDEwNjptdCwxMDc6YnQsMTA4Onh0LDEwOTpfdCwxMTA6a3QsMTExOnd0fSx7MjI6SCwyNDpHLDI2OnEsMzg6WCwzOToxNjksNDI6Wiw0NjpKLDYxOlEsNjk6Syw3MjoxMDYsNzM6dHQsNzQ6MTE3LDc1OmV0LDc2Om50LDc3OnJ0LDc4Oml0LDc5OmF0LDgwOm90LDgxOnN0LDgzOjEwOCw4NDpjdCw5MTp1dCw5MjpsdCw5NTpodCw5NjpmdCw5NzpkdCw5OTpwdCwxMDA6Z3QsMTAxOnl0LDEwMjp2dCwxMDM6MTE0LDEwNjptdCwxMDc6YnQsMTA4Onh0LDEwOTpfdCwxMTA6a3QsMTExOnd0fSx7MjI6SCwyNDpHLDI2OnEsMzg6WCwzOToxNzAsNDI6Wiw0NjpKLDYxOlEsNjk6Syw3MjoxMDYsNzM6dHQsNzQ6MTE3LDc1OmV0LDc2Om50LDc3OnJ0LDc4Oml0LDc5OmF0LDgwOm90LDgxOnN0LDgzOjEwOCw4NDpjdCw5MTp1dCw5MjpsdCw5NTpodCw5NjpmdCw5NzpkdCw5OTpwdCwxMDA6Z3QsMTAxOnl0LDEwMjp2dCwxMDM6MTE0LDEwNjptdCwxMDc6YnQsMTA4Onh0LDEwOTpfdCwxMTA6a3QsMTExOnd0fSx7MjI6SCwyNDpHLDI2OnEsMzg6WCwzOToxNzEsNDI6Wiw0NjpKLDYxOlEsNjk6Syw3MjoxMDYsNzM6dHQsNzQ6MTE3LDc1OmV0LDc2Om50LDc3OnJ0LDc4Oml0LDc5OmF0LDgwOm90LDgxOnN0LDgzOjEwOCw4NDpjdCw5MTp1dCw5MjpsdCw5NTpodCw5NjpmdCw5NzpkdCw5OTpwdCwxMDA6Z3QsMTAxOnl0LDEwMjp2dCwxMDM6MTE0LDEwNjptdCwxMDc6YnQsMTA4Onh0LDEwOTpfdCwxMTA6a3QsMTExOnd0fSx0KHosWzIsMTM3XSksdChNdCxbMiwzXSksezg6MTcyLDE1Ok59LHsxNTpbMiw3XX0sdChhLFsyLDI4XSksdCgkLFsyLDMzXSksdChqLFsyLDQ3XSx7MzA6MTczLDIyOkJ9KSx0KFYsWzIsNjldLHsyMjpbMSwxNzRdfSksezIyOlsxLDE3NV19LHsyMjpILDI0OkcsMjY6cSwzODpYLDM5OjE3Niw0MjpaLDQ2OkosNjE6USw2OTpLLDcyOjEwNiw3Mzp0dCw3NDoxMTcsNzU6ZXQsNzY6bnQsNzc6cnQsNzg6aXQsNzk6YXQsODA6b3QsODE6c3QsODM6MTA4LDg0OmN0LDkxOnV0LDkyOmx0LDk1Omh0LDk2OmZ0LDk3OmR0LDk5OnB0LDEwMDpndCwxMDE6eXQsMTAyOnZ0LDEwMzoxMTQsMTA2Om10LDEwNzpidCwxMDg6eHQsMTA5Ol90LDExMDprdCwxMTE6d3R9LHsyMjpILDI0OkcsMjY6cSwzODpYLDQyOlosNDY6Siw2MTpRLDY5OkssNzA6WzEsMTc3XSw3MjoxNzgsNzQ6MTE3LDc1OmV0LDc2Om50LDc3OnJ0LDc4Oml0LDc5OmF0LDgwOm90LDgxOnN0LDgzOjEwOCw4NDpjdCw5MTp1dCw5MjpsdCw5NTpodCw5NjpmdCw5NzpkdCw5OTpwdCwxMDA6Z3QsMTAxOnl0LDEwMjp2dCwxMDM6MTE0LDEwNjptdCwxMDc6YnQsMTA4Onh0LDEwOTpfdCwxMTA6a3QsMTExOnd0fSx0KE90LFsyLDc2XSksdChPdCxbMiw3OF0pLHQoT3QsWzIsMTI2XSksdChPdCxbMiwxMjddKSx0KE90LFsyLDEyOF0pLHQoT3QsWzIsMTI5XSksdChPdCxbMiwxMzBdKSx0KE90LFsyLDEzMV0pLHQoT3QsWzIsMTMyXSksdChPdCxbMiwxMzNdKSx0KE90LFsyLDEzNF0pLHQoT3QsWzIsMTM1XSksdChPdCxbMiwxNDRdKSx0KE90LFsyLDE0NV0pLHQoT3QsWzIsMTQ2XSksdChPdCxbMiwxNDddKSx0KE90LFsyLDE0OF0pLHQoT3QsWzIsMTQ5XSksdChPdCxbMiwxNTBdKSx0KE90LFsyLDE1MV0pLHQoT3QsWzIsMTUyXSksdChPdCxbMiwxNTNdKSx0KE90LFsyLDE1NF0pLHQoT3QsWzIsMTU1XSksdChPdCxbMiwxNTZdKSx0KE90LFsyLDc5XSksdChPdCxbMiw4MF0pLHQoT3QsWzIsODFdKSx0KE90LFsyLDgyXSksdChPdCxbMiw4M10pLHQoT3QsWzIsODRdKSx0KE90LFsyLDg1XSksdChPdCxbMiw4Nl0pLHQoT3QsWzIsODddKSx0KE90LFsyLDg4XSksdChPdCxbMiw4OV0pLHs5OjE4MCwyMDpGLDIxOlAsMjI6SCwyMzpJLDI0OkcsMjY6cSwzODpYLDQwOlsxLDE3OV0sNDI6Wiw0NjpKLDYxOlEsNjk6Syw3MjoxNzgsNzQ6MTE3LDc1OmV0LDc2Om50LDc3OnJ0LDc4Oml0LDc5OmF0LDgwOm90LDgxOnN0LDgzOjEwOCw4NDpjdCw5MTp1dCw5MjpsdCw5NTpodCw5NjpmdCw5NzpkdCw5OTpwdCwxMDA6Z3QsMTAxOnl0LDEwMjp2dCwxMDM6MTE0LDEwNjptdCwxMDc6YnQsMTA4Onh0LDEwOTpfdCwxMTA6a3QsMTExOnd0fSx7MTg6MTgsMTk6MTksMjA6cywyMTpjLDIyOnUsMjM6bCwzMjoyNCwzMzoyNSwzNDoyNiwzNToyNywzNjoyOCwzNzoyOSwzODpoLDQyOlsxLDE4MV0sNDQ6MzEsNDU6MzcsNDY6Ziw0ODozOCw3NTpkLDc2OnAsNzc6Zyw3ODp5LDc5OnYsODA6bSw5MTpiLDkyOngsOTU6Xyw5NjprLDk3OncsOTk6RSwxMDA6VCwxMDQ6MzksMTA2OkMsMTA3OlMsMTA4OkEsMTA5Ok0sMTEwOk8sMTExOkR9LHsyMjpCLDMwOjE4Mn0sezIyOlsxLDE4M10sMjY6Q3QsNDY6Siw4MDpTdCw5MTp1dCw5MjpsdCw5NTpodCw5NjpmdCw5NzpBdCw5OTpwdCwxMDA6Z3QsMTAzOjE0OSwxMDU6MTg0LDEwNjptdCwxMDc6YnQsMTA4Onh0LDEwOTpfdCwxMTA6a3QsMTExOnd0fSx7MjI6WzEsMTg1XX0sdChEdCxbMiwxMzhdKSx0KER0LFsyLDE0MF0pLHQoRHQsWzIsMTQxXSksdChEdCxbMiwxNDJdKSx0KER0LFsyLDE0M10pLHsyMjpbMSwxODZdfSx7MjI6WzEsMTg3XSw5MjpbMSwxODhdfSx0KE50LFsyLDEwOV0pLHsyMjpbMSwxODldfSx7MjI6WzEsMTkwXSwyNjpDdCw0NjpKLDgwOlN0LDkxOnV0LDkyOmx0LDk1Omh0LDk2OmZ0LDk3OkF0LDk5OnB0LDEwMDpndCwxMDM6MTQ5LDEwNToxODQsMTA2Om10LDEwNzpidCwxMDg6eHQsMTA5Ol90LDExMDprdCwxMTE6d3R9LHsyMjpbMSwxOTFdLDI2OkN0LDQ2OkosODA6U3QsOTE6dXQsOTI6bHQsOTU6aHQsOTY6ZnQsOTc6QXQsOTk6cHQsMTAwOmd0LDEwMzoxNDksMTA1OjE4NCwxMDY6bXQsMTA3OmJ0LDEwODp4dCwxMDk6X3QsMTEwOmt0LDExMTp3dH0sezIyOlsxLDE5Ml0sMjY6Q3QsNDY6Siw4MDpTdCw5MTp1dCw5MjpsdCw5NTpodCw5NjpmdCw5NzpBdCw5OTpwdCwxMDA6Z3QsMTAzOjE0OSwxMDU6MTg0LDEwNjptdCwxMDc6YnQsMTA4Onh0LDEwOTpfdCwxMTA6a3QsMTExOnd0fSx0KFIsWzIsNTNdLHsxMDQ6OTUsNDY6Ziw4MDptLDkxOmIsOTI6eCw5NTpfLDk2OmssOTc6dyw5OTpFLDEwMDpULDEwNjpDLDEwNzpTLDEwODpBLDEwOTpNLDExMDpPLDExMTpEfSksezIyOkgsMjQ6RywyNjpxLDM4OlgsNDE6WzEsMTkzXSw0MjpaLDQ2OkosNjE6USw2OTpLLDcyOjE3OCw3NDoxMTcsNzU6ZXQsNzY6bnQsNzc6cnQsNzg6aXQsNzk6YXQsODA6b3QsODE6c3QsODM6MTA4LDg0OmN0LDkxOnV0LDkyOmx0LDk1Omh0LDk2OmZ0LDk3OmR0LDk5OnB0LDEwMDpndCwxMDE6eXQsMTAyOnZ0LDEwMzoxMTQsMTA2Om10LDEwNzpidCwxMDg6eHQsMTA5Ol90LDExMDprdCwxMTE6d3R9LHsyMjpILDI0OkcsMjY6cSwzODpYLDM5OjE5NCw0MjpaLDQ2OkosNjE6USw2OTpLLDcyOjEwNiw3Mzp0dCw3NDoxMTcsNzU6ZXQsNzY6bnQsNzc6cnQsNzg6aXQsNzk6YXQsODA6b3QsODE6c3QsODM6MTA4LDg0OmN0LDkxOnV0LDkyOmx0LDk1Omh0LDk2OmZ0LDk3OmR0LDk5OnB0LDEwMDpndCwxMDE6eXQsMTAyOnZ0LDEwMzoxMTQsMTA2Om10LDEwNzpidCwxMDg6eHQsMTA5Ol90LDExMDprdCwxMTE6d3R9LHsyMjpILDI0OkcsMjY6cSwzODpYLDQyOlosNDY6Siw1MDpbMSwxOTVdLDYxOlEsNjk6Syw3MjoxNzgsNzQ6MTE3LDc1OmV0LDc2Om50LDc3OnJ0LDc4Oml0LDc5OmF0LDgwOm90LDgxOnN0LDgzOjEwOCw4NDpjdCw5MTp1dCw5MjpsdCw5NTpodCw5NjpmdCw5NzpkdCw5OTpwdCwxMDA6Z3QsMTAxOnl0LDEwMjp2dCwxMDM6MTE0LDEwNjptdCwxMDc6YnQsMTA4Onh0LDEwOTpfdCwxMTA6a3QsMTExOnd0fSx7MjI6SCwyNDpHLDI2OnEsMzg6WCw0MjpaLDQ2OkosNTI6WzEsMTk2XSw2MTpRLDY5OkssNzI6MTc4LDc0OjExNyw3NTpldCw3NjpudCw3NzpydCw3ODppdCw3OTphdCw4MDpvdCw4MTpzdCw4MzoxMDgsODQ6Y3QsOTE6dXQsOTI6bHQsOTU6aHQsOTY6ZnQsOTc6ZHQsOTk6cHQsMTAwOmd0LDEwMTp5dCwxMDI6dnQsMTAzOjExNCwxMDY6bXQsMTA3OmJ0LDEwODp4dCwxMDk6X3QsMTEwOmt0LDExMTp3dH0sezIyOkgsMjQ6RywyNjpxLDM4OlgsNDI6Wiw0NjpKLDU0OlsxLDE5N10sNjE6USw2OTpLLDcyOjE3OCw3NDoxMTcsNzU6ZXQsNzY6bnQsNzc6cnQsNzg6aXQsNzk6YXQsODA6b3QsODE6c3QsODM6MTA4LDg0OmN0LDkxOnV0LDkyOmx0LDk1Omh0LDk2OmZ0LDk3OmR0LDk5OnB0LDEwMDpndCwxMDE6eXQsMTAyOnZ0LDEwMzoxMTQsMTA2Om10LDEwNzpidCwxMDg6eHQsMTA5Ol90LDExMDprdCwxMTE6d3R9LHsyMjpILDI0OkcsMjY6cSwzODpYLDQyOlosNDY6Siw1NjpbMSwxOThdLDYxOlEsNjk6Syw3MjoxNzgsNzQ6MTE3LDc1OmV0LDc2Om50LDc3OnJ0LDc4Oml0LDc5OmF0LDgwOm90LDgxOnN0LDgzOjEwOCw4NDpjdCw5MTp1dCw5MjpsdCw5NTpodCw5NjpmdCw5NzpkdCw5OTpwdCwxMDA6Z3QsMTAxOnl0LDEwMjp2dCwxMDM6MTE0LDEwNjptdCwxMDc6YnQsMTA4Onh0LDEwOTpfdCwxMTA6a3QsMTExOnd0fSx7MjI6SCwyNDpHLDI2OnEsMzg6WCw0MjpaLDQ2OkosNTg6WzEsMTk5XSw2MTpRLDY5OkssNzI6MTc4LDc0OjExNyw3NTpldCw3NjpudCw3NzpydCw3ODppdCw3OTphdCw4MDpvdCw4MTpzdCw4MzoxMDgsODQ6Y3QsOTE6dXQsOTI6bHQsOTU6aHQsOTY6ZnQsOTc6ZHQsOTk6cHQsMTAwOmd0LDEwMTp5dCwxMDI6dnQsMTAzOjExNCwxMDY6bXQsMTA3OmJ0LDEwODp4dCwxMDk6X3QsMTEwOmt0LDExMTp3dH0sezIyOkgsMjQ6RywyNjpxLDM4OlgsNDI6Wiw0NjpKLDYwOlsxLDIwMF0sNjE6USw2OTpLLDcyOjE3OCw3NDoxMTcsNzU6ZXQsNzY6bnQsNzc6cnQsNzg6aXQsNzk6YXQsODA6b3QsODE6c3QsODM6MTA4LDg0OmN0LDkxOnV0LDkyOmx0LDk1Omh0LDk2OmZ0LDk3OmR0LDk5OnB0LDEwMDpndCwxMDE6eXQsMTAyOnZ0LDEwMzoxMTQsMTA2Om10LDEwNzpidCwxMDg6eHQsMTA5Ol90LDExMDprdCwxMTE6d3R9LHsyMjpILDI0OkcsMjY6cSwzODpYLDM5OjIwMSw0MjpaLDQ2OkosNjE6USw2OTpLLDcyOjEwNiw3Mzp0dCw3NDoxMTcsNzU6ZXQsNzY6bnQsNzc6cnQsNzg6aXQsNzk6YXQsODA6b3QsODE6c3QsODM6MTA4LDg0OmN0LDkxOnV0LDkyOmx0LDk1Omh0LDk2OmZ0LDk3OmR0LDk5OnB0LDEwMDpndCwxMDE6eXQsMTAyOnZ0LDEwMzoxMTQsMTA2Om10LDEwNzpidCwxMDg6eHQsMTA5Ol90LDExMDprdCwxMTE6d3R9LHsyMjpILDI0OkcsMjY6cSwzODpYLDQxOlsxLDIwMl0sNDI6Wiw0NjpKLDYxOlEsNjk6Syw3MjoxNzgsNzQ6MTE3LDc1OmV0LDc2Om50LDc3OnJ0LDc4Oml0LDc5OmF0LDgwOm90LDgxOnN0LDgzOjEwOCw4NDpjdCw5MTp1dCw5MjpsdCw5NTpodCw5NjpmdCw5NzpkdCw5OTpwdCwxMDA6Z3QsMTAxOnl0LDEwMjp2dCwxMDM6MTE0LDEwNjptdCwxMDc6YnQsMTA4Onh0LDEwOTpfdCwxMTA6a3QsMTExOnd0fSx7MjI6SCwyNDpHLDI2OnEsMzg6WCw0MjpaLDQ2OkosNjE6USw2MzpbMSwyMDNdLDY1OlsxLDIwNF0sNjk6Syw3MjoxNzgsNzQ6MTE3LDc1OmV0LDc2Om50LDc3OnJ0LDc4Oml0LDc5OmF0LDgwOm90LDgxOnN0LDgzOjEwOCw4NDpjdCw5MTp1dCw5MjpsdCw5NTpodCw5NjpmdCw5NzpkdCw5OTpwdCwxMDA6Z3QsMTAxOnl0LDEwMjp2dCwxMDM6MTE0LDEwNjptdCwxMDc6YnQsMTA4Onh0LDEwOTpfdCwxMTA6a3QsMTExOnd0fSx7MjI6SCwyNDpHLDI2OnEsMzg6WCw0MjpaLDQ2OkosNjE6USw2MzpbMSwyMDZdLDY1OlsxLDIwNV0sNjk6Syw3MjoxNzgsNzQ6MTE3LDc1OmV0LDc2Om50LDc3OnJ0LDc4Oml0LDc5OmF0LDgwOm90LDgxOnN0LDgzOjEwOCw4NDpjdCw5MTp1dCw5MjpsdCw5NTpodCw5NjpmdCw5NzpkdCw5OTpwdCwxMDA6Z3QsMTAxOnl0LDEwMjp2dCwxMDM6MTE0LDEwNjptdCwxMDc6YnQsMTA4Onh0LDEwOTpfdCwxMTA6a3QsMTExOnd0fSx7OToyMDcsMjA6RiwyMTpQLDIzOkl9LHQoaixbMiw0OF0sezQ2OlR0fSksdChWLFsyLDcxXSksdChWLFsyLDcwXSksezIyOkgsMjQ6RywyNjpxLDM4OlgsNDI6Wiw0NjpKLDYxOlEsNjk6Syw3MTpbMSwyMDhdLDcyOjE3OCw3NDoxMTcsNzU6ZXQsNzY6bnQsNzc6cnQsNzg6aXQsNzk6YXQsODA6b3QsODE6c3QsODM6MTA4LDg0OmN0LDkxOnV0LDkyOmx0LDk1Omh0LDk2OmZ0LDk3OmR0LDk5OnB0LDEwMDpndCwxMDE6eXQsMTAyOnZ0LDEwMzoxMTQsMTA2Om10LDEwNzpidCwxMDg6eHQsMTA5Ol90LDExMDprdCwxMTE6d3R9LHQoVixbMiw3M10pLHQoT3QsWzIsNzddKSx7MjI6SCwyNDpHLDI2OnEsMzg6WCwzOToyMDksNDI6Wiw0NjpKLDYxOlEsNjk6Syw3MjoxMDYsNzM6dHQsNzQ6MTE3LDc1OmV0LDc2Om50LDc3OnJ0LDc4Oml0LDc5OmF0LDgwOm90LDgxOnN0LDgzOjEwOCw4NDpjdCw5MTp1dCw5MjpsdCw5NTpodCw5NjpmdCw5NzpkdCw5OTpwdCwxMDA6Z3QsMTAxOnl0LDEwMjp2dCwxMDM6MTE0LDEwNjptdCwxMDc6YnQsMTA4Onh0LDEwOTpfdCwxMTA6a3QsMTExOnd0fSx0KEV0LG8sezE3OjIxMH0pLHQoTCxbMiw0M10pLHs0NToyMTEsNDY6Ziw0ODozOCw4MDptLDkxOmIsOTI6eCw5NTpfLDk2OmssOTc6dyw5OTpFLDEwMDpULDEwNDozOSwxMDY6QywxMDc6UywxMDg6QSwxMDk6TSwxMTA6TywxMTE6RH0sezIyOkJ0LDc1Okx0LDg1OjIxMiw4ODpGdCw5MTpQdCw5MzoyMTMsOTQ6MjE0LDk1Okl0LDk2Omp0LDk3OlJ0LDk4Oll0LDk5Onp0LDEwMDpVdCwxMDE6JHR9LHQoRHQsWzIsMTM5XSksezIyOkJ0LDc1Okx0LDg1OjIyNiw4ODpGdCw5MTpQdCw5MzoyMTMsOTQ6MjE0LDk1Okl0LDk2Omp0LDk3OlJ0LDk4Oll0LDk5Onp0LDEwMDpVdCwxMDE6JHR9LHsyMjpCdCw3NTpMdCw4NToyMjcsODg6RnQsOTA6WzEsMjI4XSw5MTpQdCw5MzoyMTMsOTQ6MjE0LDk1Okl0LDk2Omp0LDk3OlJ0LDk4Oll0LDk5Onp0LDEwMDpVdCwxMDE6JHR9LHsyMjpCdCw3NTpMdCw4NToyMjksODg6RnQsOTA6WzEsMjMwXSw5MTpQdCw5MzoyMTMsOTQ6MjE0LDk1Okl0LDk2Omp0LDk3OlJ0LDk4Oll0LDk5Onp0LDEwMDpVdCwxMDE6JHR9LHs5MTpbMSwyMzFdfSx7MjI6QnQsNzU6THQsODU6MjMyLDg4OkZ0LDkxOlB0LDkzOjIxMyw5NDoyMTQsOTU6SXQsOTY6anQsOTc6UnQsOTg6WXQsOTk6enQsMTAwOlV0LDEwMTokdH0sezIyOkJ0LDc1Okx0LDg1OjIzMyw4ODpGdCw5MTpQdCw5MzoyMTMsOTQ6MjE0LDk1Okl0LDk2Omp0LDk3OlJ0LDk4Oll0LDk5Onp0LDEwMDpVdCwxMDE6JHR9LHsyNjpDdCw0NjpKLDgwOlN0LDg2OjIzNCw5MTp1dCw5MjpsdCw5NTpodCw5NjpmdCw5NzpBdCw5OTpwdCwxMDA6Z3QsMTAzOjE0OSwxMDU6MTQ3LDEwNjptdCwxMDc6YnQsMTA4Onh0LDEwOTpfdCwxMTA6a3QsMTExOnd0fSx7MjY6Q3QsNDY6Siw3MzpbMSwyMzZdLDgwOlN0LDg2OjIzNSw5MTp1dCw5MjpsdCw5NTpodCw5NjpmdCw5NzpBdCw5OTpwdCwxMDA6Z3QsMTAzOjE0OSwxMDU6MTQ3LDEwNjptdCwxMDc6YnQsMTA4Onh0LDEwOTpfdCwxMTA6a3QsMTExOnd0fSx0KFksWzIsNTRdKSx7MjI6SCwyNDpHLDI2OnEsMzg6WCw0MjpaLDQ2OkosNTA6WzEsMjM3XSw2MTpRLDY5OkssNzI6MTc4LDc0OjExNyw3NTpldCw3NjpudCw3NzpydCw3ODppdCw3OTphdCw4MDpvdCw4MTpzdCw4MzoxMDgsODQ6Y3QsOTE6dXQsOTI6bHQsOTU6aHQsOTY6ZnQsOTc6ZHQsOTk6cHQsMTAwOmd0LDEwMTp5dCwxMDI6dnQsMTAzOjExNCwxMDY6bXQsMTA3OmJ0LDEwODp4dCwxMDk6X3QsMTEwOmt0LDExMTp3dH0sdChZLFsyLDYwXSksdChZLFsyLDU2XSksdChZLFsyLDU3XSksdChZLFsyLDU4XSksdChZLFsyLDU5XSksdChZLFsyLDYxXSksezIyOkgsMjQ6RywyNjpxLDM4OlgsNDI6Wiw0NjpKLDYwOlsxLDIzOF0sNjE6USw2OTpLLDcyOjE3OCw3NDoxMTcsNzU6ZXQsNzY6bnQsNzc6cnQsNzg6aXQsNzk6YXQsODA6b3QsODE6c3QsODM6MTA4LDg0OmN0LDkxOnV0LDkyOmx0LDk1Omh0LDk2OmZ0LDk3OmR0LDk5OnB0LDEwMDpndCwxMDE6eXQsMTAyOnZ0LDEwMzoxMTQsMTA2Om10LDEwNzpidCwxMDg6eHQsMTA5Ol90LDExMDprdCwxMTE6d3R9LHQoWSxbMiw2M10pLHQoWSxbMiw2NF0pLHQoWSxbMiw2Nl0pLHQoWSxbMiw2NV0pLHQoWSxbMiw2N10pLHQoTXQsWzIsNF0pLHQoWzIyLDQ2LDgwLDkxLDkyLDk1LDk2LDk3LDk5LDEwMCwxMDYsMTA3LDEwOCwxMDksMTEwLDExMV0sWzIsNzVdKSx7MjI6SCwyNDpHLDI2OnEsMzg6WCw0MTpbMSwyMzldLDQyOlosNDY6Siw2MTpRLDY5OkssNzI6MTc4LDc0OjExNyw3NTpldCw3NjpudCw3NzpydCw3ODppdCw3OTphdCw4MDpvdCw4MTpzdCw4MzoxMDgsODQ6Y3QsOTE6dXQsOTI6bHQsOTU6aHQsOTY6ZnQsOTc6ZHQsOTk6cHQsMTAwOmd0LDEwMTp5dCwxMDI6dnQsMTAzOjExNCwxMDY6bXQsMTA3OmJ0LDEwODp4dCwxMDk6X3QsMTEwOmt0LDExMTp3dH0sezE4OjE4LDE5OjE5LDIwOnMsMjE6YywyMjp1LDIzOmwsMzI6MjQsMzM6MjUsMzQ6MjYsMzU6MjcsMzY6MjgsMzc6MjksMzg6aCw0MjpbMSwyNDBdLDQ0OjMxLDQ1OjM3LDQ2OmYsNDg6MzgsNzU6ZCw3NjpwLDc3OmcsNzg6eSw3OTp2LDgwOm0sOTE6Yiw5Mjp4LDk1Ol8sOTY6ayw5Nzp3LDk5OkUsMTAwOlQsMTA0OjM5LDEwNjpDLDEwNzpTLDEwODpBLDEwOTpNLDExMDpPLDExMTpEfSx0KFIsWzIsNTJdKSx0KFUsWzIsMTAxXSx7OTI6V3R9KSx0KFZ0LFsyLDExMV0sezk0OjI0MiwyMjpCdCw3NTpMdCw4ODpGdCw5MTpQdCw5NTpJdCw5NjpqdCw5NzpSdCw5ODpZdCw5OTp6dCwxMDA6VXQsMTAxOiR0fSksdChIdCxbMiwxMTNdKSx0KEh0LFsyLDExNV0pLHQoSHQsWzIsMTE2XSksdChIdCxbMiwxMTddKSx0KEh0LFsyLDExOF0pLHQoSHQsWzIsMTE5XSksdChIdCxbMiwxMjBdKSx0KEh0LFsyLDEyMV0pLHQoSHQsWzIsMTIyXSksdChIdCxbMiwxMjNdKSx0KEh0LFsyLDEyNF0pLHQoSHQsWzIsMTI1XSksdChVLFsyLDEwMl0sezkyOld0fSksdChVLFsyLDEwM10sezkyOld0fSksezIyOlsxLDI0M119LHQoVSxbMiwxMDRdLHs5MjpXdH0pLHsyMjpbMSwyNDRdfSx0KE50LFsyLDExMF0pLHQoVSxbMiw5Ml0sezkyOld0fSksdChVLFsyLDkzXSx7OTI6V3R9KSx0KFUsWzIsOTRdLHsxMDM6MTQ5LDEwNToxODQsMjY6Q3QsNDY6Siw4MDpTdCw5MTp1dCw5MjpsdCw5NTpodCw5NjpmdCw5NzpBdCw5OTpwdCwxMDA6Z3QsMTA2Om10LDEwNzpidCwxMDg6eHQsMTA5Ol90LDExMDprdCwxMTE6d3R9KSx0KFUsWzIsOTVdLHsxMDM6MTQ5LDEwNToxODQsMjI6WzEsMjQ1XSwyNjpDdCw0NjpKLDgwOlN0LDkxOnV0LDkyOmx0LDk1Omh0LDk2OmZ0LDk3OkF0LDk5OnB0LDEwMDpndCwxMDY6bXQsMTA3OmJ0LDEwODp4dCwxMDk6X3QsMTEwOmt0LDExMTp3dH0pLHQoVSxbMiw5N10sezIyOlsxLDI0Nl19KSx7NTA6WzEsMjQ3XX0sezYwOlsxLDI0OF19LHs5OjI0OSwyMDpGLDIxOlAsMjM6SX0sdChMLFsyLDQyXSksezIyOkJ0LDc1Okx0LDg4OkZ0LDkxOlB0LDkzOjI1MCw5NDoyMTQsOTU6SXQsOTY6anQsOTc6UnQsOTg6WXQsOTk6enQsMTAwOlV0LDEwMTokdH0sdChIdCxbMiwxMTRdKSx7MjY6Q3QsNDY6Siw4MDpTdCw4NjoyNTEsOTE6dXQsOTI6bHQsOTU6aHQsOTY6ZnQsOTc6QXQsOTk6cHQsMTAwOmd0LDEwMzoxNDksMTA1OjE0NywxMDY6bXQsMTA3OmJ0LDEwODp4dCwxMDk6X3QsMTEwOmt0LDExMTp3dH0sezI2OkN0LDQ2OkosODA6U3QsODY6MjUyLDkxOnV0LDkyOmx0LDk1Omh0LDk2OmZ0LDk3OkF0LDk5OnB0LDEwMDpndCwxMDM6MTQ5LDEwNToxNDcsMTA2Om10LDEwNzpidCwxMDg6eHQsMTA5Ol90LDExMDprdCwxMTE6d3R9LHs3MzpbMSwyNTNdfSx7NzM6WzEsMjU0XSw4NzpbMSwyNTVdfSx0KFksWzIsNTVdKSx0KFksWzIsNjJdKSx0KEV0LG8sezE3OjI1Nn0pLHQoVnQsWzIsMTEyXSx7OTQ6MjQyLDIyOkJ0LDc1Okx0LDg4OkZ0LDkxOlB0LDk1Okl0LDk2Omp0LDk3OlJ0LDk4Oll0LDk5Onp0LDEwMDpVdCwxMDE6JHR9KSx0KFUsWzIsMTA3XSx7MTAzOjE0OSwxMDU6MTg0LDIyOlsxLDI1N10sMjY6Q3QsNDY6Siw4MDpTdCw5MTp1dCw5MjpsdCw5NTpodCw5NjpmdCw5NzpBdCw5OTpwdCwxMDA6Z3QsMTA2Om10LDEwNzpidCwxMDg6eHQsMTA5Ol90LDExMDprdCwxMTE6d3R9KSx0KFUsWzIsMTA4XSx7MTAzOjE0OSwxMDU6MTg0LDIyOlsxLDI1OF0sMjY6Q3QsNDY6Siw4MDpTdCw5MTp1dCw5MjpsdCw5NTpodCw5NjpmdCw5NzpBdCw5OTpwdCwxMDA6Z3QsMTA2Om10LDEwNzpidCwxMDg6eHQsMTA5Ol90LDExMDprdCwxMTE6d3R9KSx0KFUsWzIsOTZdKSx0KFUsWzIsOThdLHsyMjpbMSwyNTldfSksdChVLFsyLDk5XSksezE4OjE4LDE5OjE5LDIwOnMsMjE6YywyMjp1LDIzOmwsMzI6MjQsMzM6MjUsMzQ6MjYsMzU6MjcsMzY6MjgsMzc6MjksMzg6aCw0MjpbMSwyNjBdLDQ0OjMxLDQ1OjM3LDQ2OmYsNDg6MzgsNzU6ZCw3NjpwLDc3OmcsNzg6eSw3OTp2LDgwOm0sOTE6Yiw5Mjp4LDk1Ol8sOTY6ayw5Nzp3LDk5OkUsMTAwOlQsMTA0OjM5LDEwNjpDLDEwNzpTLDEwODpBLDEwOTpNLDExMDpPLDExMTpEfSx7MjI6QnQsNzU6THQsODU6MjYxLDg4OkZ0LDkxOlB0LDkzOjIxMyw5NDoyMTQsOTU6SXQsOTY6anQsOTc6UnQsOTg6WXQsOTk6enQsMTAwOlV0LDEwMTokdH0sezIyOkJ0LDc1Okx0LDg1OjI2Miw4ODpGdCw5MTpQdCw5MzoyMTMsOTQ6MjE0LDk1Okl0LDk2Omp0LDk3OlJ0LDk4Oll0LDk5Onp0LDEwMDpVdCwxMDE6JHR9LHs4NzpbMSwyNjNdfSx0KEwsWzIsNDFdKSx0KFUsWzIsMTA1XSx7OTI6V3R9KSx0KFUsWzIsMTA2XSx7OTI6V3R9KSx0KFUsWzIsMTAwXSldLGRlZmF1bHRBY3Rpb25zOnsyOlsyLDFdLDk6WzIsNV0sMTA6WzIsMl0sOTg6WzIsN119LHBhcnNlRXJyb3I6ZnVuY3Rpb24odCxlKXtpZighZS5yZWNvdmVyYWJsZSl7dmFyIG49bmV3IEVycm9yKHQpO3Rocm93IG4uaGFzaD1lLG59dGhpcy50cmFjZSh0KX0scGFyc2U6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcyxuPVswXSxyPVtdLGk9W251bGxdLGE9W10sbz10aGlzLnRhYmxlLHM9IiIsYz0wLHU9MCxsPTAsaD0yLGY9MSxkPWEuc2xpY2UuY2FsbChhcmd1bWVudHMsMSkscD1PYmplY3QuY3JlYXRlKHRoaXMubGV4ZXIpLGc9e3l5Ont9fTtmb3IodmFyIHkgaW4gdGhpcy55eSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpcy55eSx5KSYmKGcueXlbeV09dGhpcy55eVt5XSk7cC5zZXRJbnB1dCh0LGcueXkpLGcueXkubGV4ZXI9cCxnLnl5LnBhcnNlcj10aGlzLHZvaWQgMD09PXAueXlsbG9jJiYocC55eWxsb2M9e30pO3ZhciB2PXAueXlsbG9jO2EucHVzaCh2KTt2YXIgbT1wLm9wdGlvbnMmJnAub3B0aW9ucy5yYW5nZXM7ZnVuY3Rpb24gYigpe3ZhciB0O3JldHVybiJudW1iZXIiIT10eXBlb2YodD1yLnBvcCgpfHxwLmxleCgpfHxmKSYmKHQgaW5zdGFuY2VvZiBBcnJheSYmKHQ9KHI9dCkucG9wKCkpLHQ9ZS5zeW1ib2xzX1t0XXx8dCksdH0iZnVuY3Rpb24iPT10eXBlb2YgZy55eS5wYXJzZUVycm9yP3RoaXMucGFyc2VFcnJvcj1nLnl5LnBhcnNlRXJyb3I6dGhpcy5wYXJzZUVycm9yPU9iamVjdC5nZXRQcm90b3R5cGVPZih0aGlzKS5wYXJzZUVycm9yO2Zvcih2YXIgeCxfLGssdyxFLFQsQyxTLEEsTT17fTs7KXtpZihrPW5bbi5sZW5ndGgtMV0sdGhpcy5kZWZhdWx0QWN0aW9uc1trXT93PXRoaXMuZGVmYXVsdEFjdGlvbnNba106KG51bGw9PXgmJih4PWIoKSksdz1vW2tdJiZvW2tdW3hdKSx2b2lkIDA9PT13fHwhdy5sZW5ndGh8fCF3WzBdKXt2YXIgTz0iIjtmb3IoVCBpbiBBPVtdLG9ba10pdGhpcy50ZXJtaW5hbHNfW1RdJiZUPmgmJkEucHVzaCgiJyIrdGhpcy50ZXJtaW5hbHNfW1RdKyInIik7Tz1wLnNob3dQb3NpdGlvbj8iUGFyc2UgZXJyb3Igb24gbGluZSAiKyhjKzEpKyI6XG4iK3Auc2hvd1Bvc2l0aW9uKCkrIlxuRXhwZWN0aW5nICIrQS5qb2luKCIsICIpKyIsIGdvdCAnIisodGhpcy50ZXJtaW5hbHNfW3hdfHx4KSsiJyI6IlBhcnNlIGVycm9yIG9uIGxpbmUgIisoYysxKSsiOiBVbmV4cGVjdGVkICIrKHg9PWY/ImVuZCBvZiBpbnB1dCI6IiciKyh0aGlzLnRlcm1pbmFsc19beF18fHgpKyInIiksdGhpcy5wYXJzZUVycm9yKE8se3RleHQ6cC5tYXRjaCx0b2tlbjp0aGlzLnRlcm1pbmFsc19beF18fHgsbGluZTpwLnl5bGluZW5vLGxvYzp2LGV4cGVjdGVkOkF9KX1pZih3WzBdaW5zdGFuY2VvZiBBcnJheSYmdy5sZW5ndGg+MSl0aHJvdyBuZXcgRXJyb3IoIlBhcnNlIEVycm9yOiBtdWx0aXBsZSBhY3Rpb25zIHBvc3NpYmxlIGF0IHN0YXRlOiAiK2srIiwgdG9rZW46ICIreCk7c3dpdGNoKHdbMF0pe2Nhc2UgMTpuLnB1c2goeCksaS5wdXNoKHAueXl0ZXh0KSxhLnB1c2gocC55eWxsb2MpLG4ucHVzaCh3WzFdKSx4PW51bGwsXz8oeD1fLF89bnVsbCk6KHU9cC55eWxlbmcscz1wLnl5dGV4dCxjPXAueXlsaW5lbm8sdj1wLnl5bGxvYyxsPjAmJmwtLSk7YnJlYWs7Y2FzZSAyOmlmKEM9dGhpcy5wcm9kdWN0aW9uc19bd1sxXV1bMV0sTS4kPWlbaS5sZW5ndGgtQ10sTS5fJD17Zmlyc3RfbGluZTphW2EubGVuZ3RoLShDfHwxKV0uZmlyc3RfbGluZSxsYXN0X2xpbmU6YVthLmxlbmd0aC0xXS5sYXN0X2xpbmUsZmlyc3RfY29sdW1uOmFbYS5sZW5ndGgtKEN8fDEpXS5maXJzdF9jb2x1bW4sbGFzdF9jb2x1bW46YVthLmxlbmd0aC0xXS5sYXN0X2NvbHVtbn0sbSYmKE0uXyQucmFuZ2U9W2FbYS5sZW5ndGgtKEN8fDEpXS5yYW5nZVswXSxhW2EubGVuZ3RoLTFdLnJhbmdlWzFdXSksdm9pZCAwIT09KEU9dGhpcy5wZXJmb3JtQWN0aW9uLmFwcGx5KE0sW3MsdSxjLGcueXksd1sxXSxpLGFdLmNvbmNhdChkKSkpKXJldHVybiBFO0MmJihuPW4uc2xpY2UoMCwtMSpDKjIpLGk9aS5zbGljZSgwLC0xKkMpLGE9YS5zbGljZSgwLC0xKkMpKSxuLnB1c2godGhpcy5wcm9kdWN0aW9uc19bd1sxXV1bMF0pLGkucHVzaChNLiQpLGEucHVzaChNLl8kKSxTPW9bbltuLmxlbmd0aC0yXV1bbltuLmxlbmd0aC0xXV0sbi5wdXNoKFMpO2JyZWFrO2Nhc2UgMzpyZXR1cm4hMH19cmV0dXJuITB9fSxxdD17RU9GOjEscGFyc2VFcnJvcjpmdW5jdGlvbih0LGUpe2lmKCF0aGlzLnl5LnBhcnNlcil0aHJvdyBuZXcgRXJyb3IodCk7dGhpcy55eS5wYXJzZXIucGFyc2VFcnJvcih0LGUpfSxzZXRJbnB1dDpmdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLnl5PWV8fHRoaXMueXl8fHt9LHRoaXMuX2lucHV0PXQsdGhpcy5fbW9yZT10aGlzLl9iYWNrdHJhY2s9dGhpcy5kb25lPSExLHRoaXMueXlsaW5lbm89dGhpcy55eWxlbmc9MCx0aGlzLnl5dGV4dD10aGlzLm1hdGNoZWQ9dGhpcy5tYXRjaD0iIix0aGlzLmNvbmRpdGlvblN0YWNrPVsiSU5JVElBTCJdLHRoaXMueXlsbG9jPXtmaXJzdF9saW5lOjEsZmlyc3RfY29sdW1uOjAsbGFzdF9saW5lOjEsbGFzdF9jb2x1bW46MH0sdGhpcy5vcHRpb25zLnJhbmdlcyYmKHRoaXMueXlsbG9jLnJhbmdlPVswLDBdKSx0aGlzLm9mZnNldD0wLHRoaXN9LGlucHV0OmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5faW5wdXRbMF07cmV0dXJuIHRoaXMueXl0ZXh0Kz10LHRoaXMueXlsZW5nKyssdGhpcy5vZmZzZXQrKyx0aGlzLm1hdGNoKz10LHRoaXMubWF0Y2hlZCs9dCx0Lm1hdGNoKC8oPzpcclxuP3xcbikuKi9nKT8odGhpcy55eWxpbmVubysrLHRoaXMueXlsbG9jLmxhc3RfbGluZSsrKTp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbisrLHRoaXMub3B0aW9ucy5yYW5nZXMmJnRoaXMueXlsbG9jLnJhbmdlWzFdKyssdGhpcy5faW5wdXQ9dGhpcy5faW5wdXQuc2xpY2UoMSksdH0sdW5wdXQ6ZnVuY3Rpb24odCl7dmFyIGU9dC5sZW5ndGgsbj10LnNwbGl0KC8oPzpcclxuP3xcbikvZyk7dGhpcy5faW5wdXQ9dCt0aGlzLl9pbnB1dCx0aGlzLnl5dGV4dD10aGlzLnl5dGV4dC5zdWJzdHIoMCx0aGlzLnl5dGV4dC5sZW5ndGgtZSksdGhpcy5vZmZzZXQtPWU7dmFyIHI9dGhpcy5tYXRjaC5zcGxpdCgvKD86XHJcbj98XG4pL2cpO3RoaXMubWF0Y2g9dGhpcy5tYXRjaC5zdWJzdHIoMCx0aGlzLm1hdGNoLmxlbmd0aC0xKSx0aGlzLm1hdGNoZWQ9dGhpcy5tYXRjaGVkLnN1YnN0cigwLHRoaXMubWF0Y2hlZC5sZW5ndGgtMSksbi5sZW5ndGgtMSYmKHRoaXMueXlsaW5lbm8tPW4ubGVuZ3RoLTEpO3ZhciBpPXRoaXMueXlsbG9jLnJhbmdlO3JldHVybiB0aGlzLnl5bGxvYz17Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5maXJzdF9saW5lLGxhc3RfbGluZTp0aGlzLnl5bGluZW5vKzEsZmlyc3RfY29sdW1uOnRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbixsYXN0X2NvbHVtbjpuPyhuLmxlbmd0aD09PXIubGVuZ3RoP3RoaXMueXlsbG9jLmZpcnN0X2NvbHVtbjowKStyW3IubGVuZ3RoLW4ubGVuZ3RoXS5sZW5ndGgtblswXS5sZW5ndGg6dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLWV9LHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1baVswXSxpWzBdK3RoaXMueXlsZW5nLWVdKSx0aGlzLnl5bGVuZz10aGlzLnl5dGV4dC5sZW5ndGgsdGhpc30sbW9yZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9tb3JlPSEwLHRoaXN9LHJlamVjdDpmdW5jdGlvbigpe3JldHVybiB0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyPyh0aGlzLl9iYWNrdHJhY2s9ITAsdGhpcyk6dGhpcy5wYXJzZUVycm9yKCJMZXhpY2FsIGVycm9yIG9uIGxpbmUgIisodGhpcy55eWxpbmVubysxKSsiLiBZb3UgY2FuIG9ubHkgaW52b2tlIHJlamVjdCgpIGluIHRoZSBsZXhlciB3aGVuIHRoZSBsZXhlciBpcyBvZiB0aGUgYmFja3RyYWNraW5nIHBlcnN1YXNpb24gKG9wdGlvbnMuYmFja3RyYWNrX2xleGVyID0gdHJ1ZSkuXG4iK3RoaXMuc2hvd1Bvc2l0aW9uKCkse3RleHQ6IiIsdG9rZW46bnVsbCxsaW5lOnRoaXMueXlsaW5lbm99KX0sbGVzczpmdW5jdGlvbih0KXt0aGlzLnVucHV0KHRoaXMubWF0Y2guc2xpY2UodCkpfSxwYXN0SW5wdXQ6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLm1hdGNoZWQuc3Vic3RyKDAsdGhpcy5tYXRjaGVkLmxlbmd0aC10aGlzLm1hdGNoLmxlbmd0aCk7cmV0dXJuKHQubGVuZ3RoPjIwPyIuLi4iOiIiKSt0LnN1YnN0cigtMjApLnJlcGxhY2UoL1xuL2csIiIpfSx1cGNvbWluZ0lucHV0OmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5tYXRjaDtyZXR1cm4gdC5sZW5ndGg8MjAmJih0Kz10aGlzLl9pbnB1dC5zdWJzdHIoMCwyMC10Lmxlbmd0aCkpLCh0LnN1YnN0cigwLDIwKSsodC5sZW5ndGg+MjA/Ii4uLiI6IiIpKS5yZXBsYWNlKC9cbi9nLCIiKX0sc2hvd1Bvc2l0aW9uOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5wYXN0SW5wdXQoKSxlPW5ldyBBcnJheSh0Lmxlbmd0aCsxKS5qb2luKCItIik7cmV0dXJuIHQrdGhpcy51cGNvbWluZ0lucHV0KCkrIlxuIitlKyJeIn0sdGVzdF9tYXRjaDpmdW5jdGlvbih0LGUpe3ZhciBuLHIsaTtpZih0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyJiYoaT17eXlsaW5lbm86dGhpcy55eWxpbmVubyx5eWxsb2M6e2ZpcnN0X2xpbmU6dGhpcy55eWxsb2MuZmlyc3RfbGluZSxsYXN0X2xpbmU6dGhpcy5sYXN0X2xpbmUsZmlyc3RfY29sdW1uOnRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbixsYXN0X2NvbHVtbjp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbn0seXl0ZXh0OnRoaXMueXl0ZXh0LG1hdGNoOnRoaXMubWF0Y2gsbWF0Y2hlczp0aGlzLm1hdGNoZXMsbWF0Y2hlZDp0aGlzLm1hdGNoZWQseXlsZW5nOnRoaXMueXlsZW5nLG9mZnNldDp0aGlzLm9mZnNldCxfbW9yZTp0aGlzLl9tb3JlLF9pbnB1dDp0aGlzLl9pbnB1dCx5eTp0aGlzLnl5LGNvbmRpdGlvblN0YWNrOnRoaXMuY29uZGl0aW9uU3RhY2suc2xpY2UoMCksZG9uZTp0aGlzLmRvbmV9LHRoaXMub3B0aW9ucy5yYW5nZXMmJihpLnl5bGxvYy5yYW5nZT10aGlzLnl5bGxvYy5yYW5nZS5zbGljZSgwKSkpLChyPXRbMF0ubWF0Y2goLyg/OlxyXG4/fFxuKS4qL2cpKSYmKHRoaXMueXlsaW5lbm8rPXIubGVuZ3RoKSx0aGlzLnl5bGxvYz17Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5sYXN0X2xpbmUsbGFzdF9saW5lOnRoaXMueXlsaW5lbm8rMSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MubGFzdF9jb2x1bW4sbGFzdF9jb2x1bW46cj9yW3IubGVuZ3RoLTFdLmxlbmd0aC1yW3IubGVuZ3RoLTFdLm1hdGNoKC9ccj9cbj8vKVswXS5sZW5ndGg6dGhpcy55eWxsb2MubGFzdF9jb2x1bW4rdFswXS5sZW5ndGh9LHRoaXMueXl0ZXh0Kz10WzBdLHRoaXMubWF0Y2grPXRbMF0sdGhpcy5tYXRjaGVzPXQsdGhpcy55eWxlbmc9dGhpcy55eXRleHQubGVuZ3RoLHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1bdGhpcy5vZmZzZXQsdGhpcy5vZmZzZXQrPXRoaXMueXlsZW5nXSksdGhpcy5fbW9yZT0hMSx0aGlzLl9iYWNrdHJhY2s9ITEsdGhpcy5faW5wdXQ9dGhpcy5faW5wdXQuc2xpY2UodFswXS5sZW5ndGgpLHRoaXMubWF0Y2hlZCs9dFswXSxuPXRoaXMucGVyZm9ybUFjdGlvbi5jYWxsKHRoaXMsdGhpcy55eSx0aGlzLGUsdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXSksdGhpcy5kb25lJiZ0aGlzLl9pbnB1dCYmKHRoaXMuZG9uZT0hMSksbilyZXR1cm4gbjtpZih0aGlzLl9iYWNrdHJhY2spe2Zvcih2YXIgYSBpbiBpKXRoaXNbYV09aVthXTtyZXR1cm4hMX1yZXR1cm4hMX0sbmV4dDpmdW5jdGlvbigpe2lmKHRoaXMuZG9uZSlyZXR1cm4gdGhpcy5FT0Y7dmFyIHQsZSxuLHI7dGhpcy5faW5wdXR8fCh0aGlzLmRvbmU9ITApLHRoaXMuX21vcmV8fCh0aGlzLnl5dGV4dD0iIix0aGlzLm1hdGNoPSIiKTtmb3IodmFyIGk9dGhpcy5fY3VycmVudFJ1bGVzKCksYT0wO2E8aS5sZW5ndGg7YSsrKWlmKChuPXRoaXMuX2lucHV0Lm1hdGNoKHRoaXMucnVsZXNbaVthXV0pKSYmKCFlfHxuWzBdLmxlbmd0aD5lWzBdLmxlbmd0aCkpe2lmKGU9bixyPWEsdGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlcil7aWYoITEhPT0odD10aGlzLnRlc3RfbWF0Y2gobixpW2FdKSkpcmV0dXJuIHQ7aWYodGhpcy5fYmFja3RyYWNrKXtlPSExO2NvbnRpbnVlfXJldHVybiExfWlmKCF0aGlzLm9wdGlvbnMuZmxleClicmVha31yZXR1cm4gZT8hMSE9PSh0PXRoaXMudGVzdF9tYXRjaChlLGlbcl0pKSYmdDoiIj09PXRoaXMuX2lucHV0P3RoaXMuRU9GOnRoaXMucGFyc2VFcnJvcigiTGV4aWNhbCBlcnJvciBvbiBsaW5lICIrKHRoaXMueXlsaW5lbm8rMSkrIi4gVW5yZWNvZ25pemVkIHRleHQuXG4iK3RoaXMuc2hvd1Bvc2l0aW9uKCkse3RleHQ6IiIsdG9rZW46bnVsbCxsaW5lOnRoaXMueXlsaW5lbm99KX0sbGV4OmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5uZXh0KCk7cmV0dXJuIHR8fHRoaXMubGV4KCl9LGJlZ2luOmZ1bmN0aW9uKHQpe3RoaXMuY29uZGl0aW9uU3RhY2sucHVzaCh0KX0scG9wU3RhdGU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMT4wP3RoaXMuY29uZGl0aW9uU3RhY2sucG9wKCk6dGhpcy5jb25kaXRpb25TdGFja1swXX0sX2N1cnJlbnRSdWxlczpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aCYmdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXT90aGlzLmNvbmRpdGlvbnNbdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXV0ucnVsZXM6dGhpcy5jb25kaXRpb25zLklOSVRJQUwucnVsZXN9LHRvcFN0YXRlOmZ1bmN0aW9uKHQpe3JldHVybih0PXRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTEtTWF0aC5hYnModHx8MCkpPj0wP3RoaXMuY29uZGl0aW9uU3RhY2tbdF06IklOSVRJQUwifSxwdXNoU3RhdGU6ZnVuY3Rpb24odCl7dGhpcy5iZWdpbih0KX0sc3RhdGVTdGFja1NpemU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGh9LG9wdGlvbnM6e30scGVyZm9ybUFjdGlvbjpmdW5jdGlvbih0LGUsbixyKXtzd2l0Y2gobil7Y2FzZSAwOnJldHVybiB0aGlzLmJlZ2luKCJvcGVuX2RpcmVjdGl2ZSIpLDEyO2Nhc2UgMTpyZXR1cm4gdGhpcy5iZWdpbigidHlwZV9kaXJlY3RpdmUiKSwxMztjYXNlIDI6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSx0aGlzLmJlZ2luKCJhcmdfZGlyZWN0aXZlIiksMTA7Y2FzZSAzOnJldHVybiB0aGlzLnBvcFN0YXRlKCksdGhpcy5wb3BTdGF0ZSgpLDE1O2Nhc2UgNDpyZXR1cm4gMTQ7Y2FzZSA1OmNhc2UgNjpicmVhaztjYXNlIDc6dGhpcy5iZWdpbigic3RyaW5nIik7YnJlYWs7Y2FzZSA4OnRoaXMucG9wU3RhdGUoKTticmVhaztjYXNlIDk6cmV0dXJuIlNUUiI7Y2FzZSAxMDpyZXR1cm4gNzU7Y2FzZSAxMTpyZXR1cm4gODQ7Y2FzZSAxMjpyZXR1cm4gNzY7Y2FzZSAxMzpyZXR1cm4gOTA7Y2FzZSAxNDpyZXR1cm4gNzc7Y2FzZSAxNTpyZXR1cm4gNzg7Y2FzZSAxNjpyZXR1cm4gNzk7Y2FzZSAxNzpjYXNlIDE4OnJldHVybiB0LmxleC5maXJzdEdyYXBoKCkmJnRoaXMuYmVnaW4oImRpciIpLDI0O2Nhc2UgMTk6cmV0dXJuIDM4O2Nhc2UgMjA6cmV0dXJuIDQyO2Nhc2UgMjE6Y2FzZSAyMjpjYXNlIDIzOmNhc2UgMjQ6cmV0dXJuIDg3O2Nhc2UgMjU6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSwyNTtjYXNlIDI2OmNhc2UgMjc6Y2FzZSAyODpjYXNlIDI5OmNhc2UgMzA6Y2FzZSAzMTpjYXNlIDMyOmNhc2UgMzM6Y2FzZSAzNDpjYXNlIDM1OnJldHVybiB0aGlzLnBvcFN0YXRlKCksMjY7Y2FzZSAzNjpyZXR1cm4gOTE7Y2FzZSAzNzpyZXR1cm4gOTk7Y2FzZSAzODpyZXR1cm4gNDc7Y2FzZSAzOTpyZXR1cm4gOTY7Y2FzZSA0MDpyZXR1cm4gNDY7Y2FzZSA0MTpyZXR1cm4gMjA7Y2FzZSA0MjpyZXR1cm4gOTI7Y2FzZSA0MzpyZXR1cm4gMTEwO2Nhc2UgNDQ6Y2FzZSA0NTpjYXNlIDQ2OnJldHVybiA3MDtjYXNlIDQ3OmNhc2UgNDg6Y2FzZSA0OTpyZXR1cm4gNjk7Y2FzZSA1MDpyZXR1cm4gNTE7Y2FzZSA1MTpyZXR1cm4gNTI7Y2FzZSA1MjpyZXR1cm4gNTM7Y2FzZSA1MzpyZXR1cm4gNTQ7Y2FzZSA1NDpyZXR1cm4gNTU7Y2FzZSA1NTpyZXR1cm4gNTY7Y2FzZSA1NjpyZXR1cm4gNTc7Y2FzZSA1NzpyZXR1cm4gNTg7Y2FzZSA1ODpyZXR1cm4gOTc7Y2FzZSA1OTpyZXR1cm4gMTAwO2Nhc2UgNjA6cmV0dXJuIDExMTtjYXNlIDYxOnJldHVybiAxMDg7Y2FzZSA2MjpyZXR1cm4gMTAxO2Nhc2UgNjM6Y2FzZSA2NDpyZXR1cm4gMTA5O2Nhc2UgNjU6cmV0dXJuIDEwMjtjYXNlIDY2OnJldHVybiA2MTtjYXNlIDY3OnJldHVybiA4MTtjYXNlIDY4OnJldHVybiJTRVAiO2Nhc2UgNjk6cmV0dXJuIDgwO2Nhc2UgNzA6cmV0dXJuIDk1O2Nhc2UgNzE6cmV0dXJuIDYzO2Nhc2UgNzI6cmV0dXJuIDYyO2Nhc2UgNzM6cmV0dXJuIDY1O2Nhc2UgNzQ6cmV0dXJuIDY0O2Nhc2UgNzU6cmV0dXJuIDEwNjtjYXNlIDc2OnJldHVybiAxMDc7Y2FzZSA3NzpyZXR1cm4gNzE7Y2FzZSA3ODpyZXR1cm4gNDk7Y2FzZSA3OTpyZXR1cm4gNTA7Y2FzZSA4MDpyZXR1cm4gNDA7Y2FzZSA4MTpyZXR1cm4gNDE7Y2FzZSA4MjpyZXR1cm4gNTk7Y2FzZSA4MzpyZXR1cm4gNjA7Y2FzZSA4NDpyZXR1cm4gMTE3O2Nhc2UgODU6cmV0dXJuIDIxO2Nhc2UgODY6cmV0dXJuIDIyO2Nhc2UgODc6cmV0dXJuIDIzfX0scnVsZXM6Wy9eKD86JSVceykvLC9eKD86KCg/Oig/IVx9JSUpW146Ll0pKikpLywvXig/OjopLywvXig/Olx9JSUpLywvXig/OigoPzooPyFcfSUlKS58XG4pKikpLywvXig/OiUlKD8hXHspW15cbl0qKS8sL14oPzpbXlx9XSUlW15cbl0qKS8sL14oPzpbIl0pLywvXig/OlsiXSkvLC9eKD86W14iXSopLywvXig/OnN0eWxlXGIpLywvXig/OmRlZmF1bHRcYikvLC9eKD86bGlua1N0eWxlXGIpLywvXig/OmludGVycG9sYXRlXGIpLywvXig/OmNsYXNzRGVmXGIpLywvXig/OmNsYXNzXGIpLywvXig/OmNsaWNrXGIpLywvXig/OmdyYXBoXGIpLywvXig/OmZsb3djaGFydFxiKS8sL14oPzpzdWJncmFwaFxiKS8sL14oPzplbmRcYlxzKikvLC9eKD86X3NlbGZcYikvLC9eKD86X2JsYW5rXGIpLywvXig/Ol9wYXJlbnRcYikvLC9eKD86X3RvcFxiKS8sL14oPzooXHI/XG4pKlxzKlxuKS8sL14oPzpccypMUlxiKS8sL14oPzpccypSTFxiKS8sL14oPzpccypUQlxiKS8sL14oPzpccypCVFxiKS8sL14oPzpccypURFxiKS8sL14oPzpccypCUlxiKS8sL14oPzpccyo8KS8sL14oPzpccyo+KS8sL14oPzpccypcXikvLC9eKD86XHMqdlxiKS8sL14oPzpbMC05XSspLywvXig/OiMpLywvXig/Ojo6OikvLC9eKD86OikvLC9eKD86JikvLC9eKD86OykvLC9eKD86LCkvLC9eKD86XCopLywvXig/OlxzKlt4bzxdPy0tK1steG8+XVxzKikvLC9eKD86XHMqW3hvPF0/PT0rWz14bz5dXHMqKS8sL14oPzpccypbeG88XT8tP1wuKy1beG8+XT9ccyopLywvXig/OlxzKlt4bzxdPy0tXHMqKS8sL14oPzpccypbeG88XT89PVxzKikvLC9eKD86XHMqW3hvPF0/LVwuXHMqKS8sL14oPzpcKC0pLywvXig/Oi1cKSkvLC9eKD86XChcWykvLC9eKD86XF1cKSkvLC9eKD86XFtcWykvLC9eKD86XF1cXSkvLC9eKD86XFtcKCkvLC9eKD86XClcXSkvLC9eKD86LSkvLC9eKD86XC4pLywvXig/OltcX10pLywvXig/OlwrKS8sL14oPzolKS8sL14oPzo9KS8sL14oPzo9KS8sL14oPzo8KS8sL14oPzo+KS8sL14oPzpcXikvLC9eKD86XFxcfCkvLC9eKD86dlxiKS8sL14oPzpbQS1aYS16XSspLywvXig/OlxcXF0pLywvXig/OlxbXC8pLywvXig/OlwvXF0pLywvXig/OlxbXFwpLywvXig/OlshIiMkJSYnKissLS5gP1xcXy9dKS8sL14oPzpbXHUwMEFBXHUwMEI1XHUwMEJBXHUwMEMwLVx1MDBENlx1MDBEOC1cdTAwRjZdfFtcdTAwRjgtXHUwMkMxXHUwMkM2LVx1MDJEMVx1MDJFMC1cdTAyRTRcdTAyRUNcdTAyRUVcdTAzNzAtXHUwMzc0XHUwMzc2XHUwMzc3XXxbXHUwMzdBLVx1MDM3RFx1MDM4Nlx1MDM4OC1cdTAzOEFcdTAzOENcdTAzOEUtXHUwM0ExXHUwM0EzLVx1MDNGNV18W1x1MDNGNy1cdTA0ODFcdTA0OEEtXHUwNTI3XHUwNTMxLVx1MDU1Nlx1MDU1OVx1MDU2MS1cdTA1ODdcdTA1RDAtXHUwNUVBXXxbXHUwNUYwLVx1MDVGMlx1MDYyMC1cdTA2NEFcdTA2NkVcdTA2NkZcdTA2NzEtXHUwNkQzXHUwNkQ1XHUwNkU1XHUwNkU2XHUwNkVFXXxbXHUwNkVGXHUwNkZBLVx1MDZGQ1x1MDZGRlx1MDcxMFx1MDcxMi1cdTA3MkZcdTA3NEQtXHUwN0E1XHUwN0IxXHUwN0NBLVx1MDdFQV18W1x1MDdGNFx1MDdGNVx1MDdGQVx1MDgwMC1cdTA4MTVcdTA4MUFcdTA4MjRcdTA4MjhcdTA4NDAtXHUwODU4XHUwOEEwXXxbXHUwOEEyLVx1MDhBQ1x1MDkwNC1cdTA5MzlcdTA5M0RcdTA5NTBcdTA5NTgtXHUwOTYxXHUwOTcxLVx1MDk3N118W1x1MDk3OS1cdTA5N0ZcdTA5ODUtXHUwOThDXHUwOThGXHUwOTkwXHUwOTkzLVx1MDlBOFx1MDlBQS1cdTA5QjBcdTA5QjJdfFtcdTA5QjYtXHUwOUI5XHUwOUJEXHUwOUNFXHUwOURDXHUwOUREXHUwOURGLVx1MDlFMVx1MDlGMFx1MDlGMVx1MEEwNS1cdTBBMEFdfFtcdTBBMEZcdTBBMTBcdTBBMTMtXHUwQTI4XHUwQTJBLVx1MEEzMFx1MEEzMlx1MEEzM1x1MEEzNVx1MEEzNlx1MEEzOFx1MEEzOV18W1x1MEE1OS1cdTBBNUNcdTBBNUVcdTBBNzItXHUwQTc0XHUwQTg1LVx1MEE4RFx1MEE4Ri1cdTBBOTFcdTBBOTMtXHUwQUE4XXxbXHUwQUFBLVx1MEFCMFx1MEFCMlx1MEFCM1x1MEFCNS1cdTBBQjlcdTBBQkRcdTBBRDBcdTBBRTBcdTBBRTFcdTBCMDUtXHUwQjBDXXxbXHUwQjBGXHUwQjEwXHUwQjEzLVx1MEIyOFx1MEIyQS1cdTBCMzBcdTBCMzJcdTBCMzNcdTBCMzUtXHUwQjM5XHUwQjNEXHUwQjVDXXxbXHUwQjVEXHUwQjVGLVx1MEI2MVx1MEI3MVx1MEI4M1x1MEI4NS1cdTBCOEFcdTBCOEUtXHUwQjkwXHUwQjkyLVx1MEI5NVx1MEI5OV18W1x1MEI5QVx1MEI5Q1x1MEI5RVx1MEI5Rlx1MEJBM1x1MEJBNFx1MEJBOC1cdTBCQUFcdTBCQUUtXHUwQkI5XHUwQkQwXXxbXHUwQzA1LVx1MEMwQ1x1MEMwRS1cdTBDMTBcdTBDMTItXHUwQzI4XHUwQzJBLVx1MEMzM1x1MEMzNS1cdTBDMzlcdTBDM0RdfFtcdTBDNThcdTBDNTlcdTBDNjBcdTBDNjFcdTBDODUtXHUwQzhDXHUwQzhFLVx1MEM5MFx1MEM5Mi1cdTBDQThcdTBDQUEtXHUwQ0IzXXxbXHUwQ0I1LVx1MENCOVx1MENCRFx1MENERVx1MENFMFx1MENFMVx1MENGMVx1MENGMlx1MEQwNS1cdTBEMENcdTBEMEUtXHUwRDEwXXxbXHUwRDEyLVx1MEQzQVx1MEQzRFx1MEQ0RVx1MEQ2MFx1MEQ2MVx1MEQ3QS1cdTBEN0ZcdTBEODUtXHUwRDk2XHUwRDlBLVx1MERCMV18W1x1MERCMy1cdTBEQkJcdTBEQkRcdTBEQzAtXHUwREM2XHUwRTAxLVx1MEUzMFx1MEUzMlx1MEUzM1x1MEU0MC1cdTBFNDZcdTBFODFdfFtcdTBFODJcdTBFODRcdTBFODdcdTBFODhcdTBFOEFcdTBFOERcdTBFOTQtXHUwRTk3XHUwRTk5LVx1MEU5Rlx1MEVBMS1cdTBFQTNdfFtcdTBFQTVcdTBFQTdcdTBFQUFcdTBFQUJcdTBFQUQtXHUwRUIwXHUwRUIyXHUwRUIzXHUwRUJEXHUwRUMwLVx1MEVDNFx1MEVDNl18W1x1MEVEQy1cdTBFREZcdTBGMDBcdTBGNDAtXHUwRjQ3XHUwRjQ5LVx1MEY2Q1x1MEY4OC1cdTBGOENcdTEwMDAtXHUxMDJBXXxbXHUxMDNGXHUxMDUwLVx1MTA1NVx1MTA1QS1cdTEwNURcdTEwNjFcdTEwNjVcdTEwNjZcdTEwNkUtXHUxMDcwXHUxMDc1LVx1MTA4MV18W1x1MTA4RVx1MTBBMC1cdTEwQzVcdTEwQzdcdTEwQ0RcdTEwRDAtXHUxMEZBXHUxMEZDLVx1MTI0OFx1MTI0QS1cdTEyNERdfFtcdTEyNTAtXHUxMjU2XHUxMjU4XHUxMjVBLVx1MTI1RFx1MTI2MC1cdTEyODhcdTEyOEEtXHUxMjhEXHUxMjkwLVx1MTJCMF18W1x1MTJCMi1cdTEyQjVcdTEyQjgtXHUxMkJFXHUxMkMwXHUxMkMyLVx1MTJDNVx1MTJDOC1cdTEyRDZcdTEyRDgtXHUxMzEwXXxbXHUxMzEyLVx1MTMxNVx1MTMxOC1cdTEzNUFcdTEzODAtXHUxMzhGXHUxM0EwLVx1MTNGNFx1MTQwMS1cdTE2NkNdfFtcdTE2NkYtXHUxNjdGXHUxNjgxLVx1MTY5QVx1MTZBMC1cdTE2RUFcdTE3MDAtXHUxNzBDXHUxNzBFLVx1MTcxMV18W1x1MTcyMC1cdTE3MzFcdTE3NDAtXHUxNzUxXHUxNzYwLVx1MTc2Q1x1MTc2RS1cdTE3NzBcdTE3ODAtXHUxN0IzXHUxN0Q3XXxbXHUxN0RDXHUxODIwLVx1MTg3N1x1MTg4MC1cdTE4QThcdTE4QUFcdTE4QjAtXHUxOEY1XHUxOTAwLVx1MTkxQ118W1x1MTk1MC1cdTE5NkRcdTE5NzAtXHUxOTc0XHUxOTgwLVx1MTlBQlx1MTlDMS1cdTE5QzdcdTFBMDAtXHUxQTE2XXxbXHUxQTIwLVx1MUE1NFx1MUFBN1x1MUIwNS1cdTFCMzNcdTFCNDUtXHUxQjRCXHUxQjgzLVx1MUJBMFx1MUJBRVx1MUJBRl18W1x1MUJCQS1cdTFCRTVcdTFDMDAtXHUxQzIzXHUxQzRELVx1MUM0Rlx1MUM1QS1cdTFDN0RcdTFDRTktXHUxQ0VDXXxbXHUxQ0VFLVx1MUNGMVx1MUNGNVx1MUNGNlx1MUQwMC1cdTFEQkZcdTFFMDAtXHUxRjE1XHUxRjE4LVx1MUYxRF18W1x1MUYyMC1cdTFGNDVcdTFGNDgtXHUxRjREXHUxRjUwLVx1MUY1N1x1MUY1OVx1MUY1Qlx1MUY1RFx1MUY1Ri1cdTFGN0RdfFtcdTFGODAtXHUxRkI0XHUxRkI2LVx1MUZCQ1x1MUZCRVx1MUZDMi1cdTFGQzRcdTFGQzYtXHUxRkNDXHUxRkQwLVx1MUZEM118W1x1MUZENi1cdTFGREJcdTFGRTAtXHUxRkVDXHUxRkYyLVx1MUZGNFx1MUZGNi1cdTFGRkNcdTIwNzFcdTIwN0ZdfFtcdTIwOTAtXHUyMDlDXHUyMTAyXHUyMTA3XHUyMTBBLVx1MjExM1x1MjExNVx1MjExOS1cdTIxMURcdTIxMjRcdTIxMjZcdTIxMjhdfFtcdTIxMkEtXHUyMTJEXHUyMTJGLVx1MjEzOVx1MjEzQy1cdTIxM0ZcdTIxNDUtXHUyMTQ5XHUyMTRFXHUyMTgzXHUyMTg0XXxbXHUyQzAwLVx1MkMyRVx1MkMzMC1cdTJDNUVcdTJDNjAtXHUyQ0U0XHUyQ0VCLVx1MkNFRVx1MkNGMlx1MkNGM118W1x1MkQwMC1cdTJEMjVcdTJEMjdcdTJEMkRcdTJEMzAtXHUyRDY3XHUyRDZGXHUyRDgwLVx1MkQ5Nlx1MkRBMC1cdTJEQTZdfFtcdTJEQTgtXHUyREFFXHUyREIwLVx1MkRCNlx1MkRCOC1cdTJEQkVcdTJEQzAtXHUyREM2XHUyREM4LVx1MkRDRV18W1x1MkREMC1cdTJERDZcdTJERDgtXHUyRERFXHUyRTJGXHUzMDA1XHUzMDA2XHUzMDMxLVx1MzAzNVx1MzAzQlx1MzAzQ118W1x1MzA0MS1cdTMwOTZcdTMwOUQtXHUzMDlGXHUzMEExLVx1MzBGQVx1MzBGQy1cdTMwRkZcdTMxMDUtXHUzMTJEXXxbXHUzMTMxLVx1MzE4RVx1MzFBMC1cdTMxQkFcdTMxRjAtXHUzMUZGXHUzNDAwLVx1NERCNVx1NEUwMC1cdTlGQ0NdfFtcdUEwMDAtXHVBNDhDXHVBNEQwLVx1QTRGRFx1QTUwMC1cdUE2MENcdUE2MTAtXHVBNjFGXHVBNjJBXHVBNjJCXXxbXHVBNjQwLVx1QTY2RVx1QTY3Ri1cdUE2OTdcdUE2QTAtXHVBNkU1XHVBNzE3LVx1QTcxRlx1QTcyMi1cdUE3ODhdfFtcdUE3OEItXHVBNzhFXHVBNzkwLVx1QTc5M1x1QTdBMC1cdUE3QUFcdUE3RjgtXHVBODAxXHVBODAzLVx1QTgwNV18W1x1QTgwNy1cdUE4MEFcdUE4MEMtXHVBODIyXHVBODQwLVx1QTg3M1x1QTg4Mi1cdUE4QjNcdUE4RjItXHVBOEY3XHVBOEZCXXxbXHVBOTBBLVx1QTkyNVx1QTkzMC1cdUE5NDZcdUE5NjAtXHVBOTdDXHVBOTg0LVx1QTlCMlx1QTlDRlx1QUEwMC1cdUFBMjhdfFtcdUFBNDAtXHVBQTQyXHVBQTQ0LVx1QUE0Qlx1QUE2MC1cdUFBNzZcdUFBN0FcdUFBODAtXHVBQUFGXHVBQUIxXHVBQUI1XXxbXHVBQUI2XHVBQUI5LVx1QUFCRFx1QUFDMFx1QUFDMlx1QUFEQi1cdUFBRERcdUFBRTAtXHVBQUVBXHVBQUYyLVx1QUFGNF18W1x1QUIwMS1cdUFCMDZcdUFCMDktXHVBQjBFXHVBQjExLVx1QUIxNlx1QUIyMC1cdUFCMjZcdUFCMjgtXHVBQjJFXXxbXHVBQkMwLVx1QUJFMlx1QUMwMC1cdUQ3QTNcdUQ3QjAtXHVEN0M2XHVEN0NCLVx1RDdGQlx1RjkwMC1cdUZBNkRdfFtcdUZBNzAtXHVGQUQ5XHVGQjAwLVx1RkIwNlx1RkIxMy1cdUZCMTdcdUZCMURcdUZCMUYtXHVGQjI4XHVGQjJBLVx1RkIzNl18W1x1RkIzOC1cdUZCM0NcdUZCM0VcdUZCNDBcdUZCNDFcdUZCNDNcdUZCNDRcdUZCNDYtXHVGQkIxXHVGQkQzLVx1RkQzRF18W1x1RkQ1MC1cdUZEOEZcdUZEOTItXHVGREM3XHVGREYwLVx1RkRGQlx1RkU3MC1cdUZFNzRcdUZFNzYtXHVGRUZDXXxbXHVGRjIxLVx1RkYzQVx1RkY0MS1cdUZGNUFcdUZGNjYtXHVGRkJFXHVGRkMyLVx1RkZDN1x1RkZDQS1cdUZGQ0ZdfFtcdUZGRDItXHVGRkQ3XHVGRkRBLVx1RkZEQ10pLywvXig/Olx8KS8sL14oPzpcKCkvLC9eKD86XCkpLywvXig/OlxbKS8sL14oPzpcXSkvLC9eKD86XHspLywvXig/Olx9KS8sL14oPzoiKS8sL14oPzooXHI/XG4pKykvLC9eKD86XHMpLywvXig/OiQpL10sY29uZGl0aW9uczp7Y2xvc2VfZGlyZWN0aXZlOntydWxlczpbXSxpbmNsdXNpdmU6ITF9LGFyZ19kaXJlY3RpdmU6e3J1bGVzOlszLDRdLGluY2x1c2l2ZTohMX0sdHlwZV9kaXJlY3RpdmU6e3J1bGVzOlsyLDNdLGluY2x1c2l2ZTohMX0sb3Blbl9kaXJlY3RpdmU6e3J1bGVzOlsxXSxpbmNsdXNpdmU6ITF9LHZlcnRleDp7cnVsZXM6W10saW5jbHVzaXZlOiExfSxkaXI6e3J1bGVzOlsyNSwyNiwyNywyOCwyOSwzMCwzMSwzMiwzMywzNCwzNV0saW5jbHVzaXZlOiExfSxzdHJpbmc6e3J1bGVzOls4LDldLGluY2x1c2l2ZTohMX0sSU5JVElBTDp7cnVsZXM6WzAsNSw2LDcsMTAsMTEsMTIsMTMsMTQsMTUsMTYsMTcsMTgsMTksMjAsMjEsMjIsMjMsMjQsMzYsMzcsMzgsMzksNDAsNDEsNDIsNDMsNDQsNDUsNDYsNDcsNDgsNDksNTAsNTEsNTIsNTMsNTQsNTUsNTYsNTcsNTgsNTksNjAsNjEsNjIsNjMsNjQsNjUsNjYsNjcsNjgsNjksNzAsNzEsNzIsNzMsNzQsNzUsNzYsNzcsNzgsNzksODAsODEsODIsODMsODQsODUsODYsODddLGluY2x1c2l2ZTohMH19fTtmdW5jdGlvbiBYdCgpe3RoaXMueXk9e319cmV0dXJuIEd0LmxleGVyPXF0LFh0LnByb3RvdHlwZT1HdCxHdC5QYXJzZXI9WHQsbmV3IFh0fSgpO2UucGFyc2VyPWksZS5QYXJzZXI9aS5QYXJzZXIsZS5wYXJzZT1mdW5jdGlvbigpe3JldHVybiBpLnBhcnNlLmFwcGx5KGksYXJndW1lbnRzKX0sZS5tYWluPWZ1bmN0aW9uKHIpe3JbMV18fChjb25zb2xlLmxvZygiVXNhZ2U6ICIrclswXSsiIEZJTEUiKSx0LmV4aXQoMSkpO3ZhciBpPW4oMTkpLnJlYWRGaWxlU3luYyhuKDIwKS5ub3JtYWxpemUoclsxXSksInV0ZjgiKTtyZXR1cm4gZS5wYXJzZXIucGFyc2UoaSl9LG4uY1tuLnNdPT09ciYmZS5tYWluKHQuYXJndi5zbGljZSgxKSl9KS5jYWxsKHRoaXMsbigxNCksbig3KSh0KSl9LGZ1bmN0aW9uKHQsZSxuKXsoZnVuY3Rpb24odCxyKXt2YXIgaT1mdW5jdGlvbigpe3ZhciB0PWZ1bmN0aW9uKHQsZSxuLHIpe2ZvcihuPW58fHt9LHI9dC5sZW5ndGg7ci0tO25bdFtyXV09ZSk7cmV0dXJuIG59LGU9WzEsM10sbj1bMSw1XSxyPVs3LDksMTEsMTIsMTMsMTQsMTUsMTYsMTcsMTgsMjAsMjcsMzJdLGk9WzEsMTVdLGE9WzEsMTZdLG89WzEsMTddLHM9WzEsMThdLGM9WzEsMTldLHU9WzEsMjBdLGw9WzEsMjFdLGg9WzEsMjNdLGY9WzEsMjVdLGQ9WzEsMjhdLHA9WzUsNyw5LDExLDEyLDEzLDE0LDE1LDE2LDE3LDE4LDIwLDI3LDMyXSxnPXt0cmFjZTpmdW5jdGlvbigpe30seXk6e30sc3ltYm9sc186e2Vycm9yOjIsc3RhcnQ6MyxkaXJlY3RpdmU6NCxnYW50dDo1LGRvY3VtZW50OjYsRU9GOjcsbGluZTo4LFNQQUNFOjksc3RhdGVtZW50OjEwLE5MOjExLGRhdGVGb3JtYXQ6MTIsaW5jbHVzaXZlRW5kRGF0ZXM6MTMsYXhpc0Zvcm1hdDoxNCxleGNsdWRlczoxNSx0b2RheU1hcmtlcjoxNix0aXRsZToxNyxzZWN0aW9uOjE4LGNsaWNrU3RhdGVtZW50OjE5LHRhc2tUeHQ6MjAsdGFza0RhdGE6MjEsb3BlbkRpcmVjdGl2ZToyMix0eXBlRGlyZWN0aXZlOjIzLGNsb3NlRGlyZWN0aXZlOjI0LCI6IjoyNSxhcmdEaXJlY3RpdmU6MjYsY2xpY2s6MjcsY2FsbGJhY2tuYW1lOjI4LGNhbGxiYWNrYXJnczoyOSxocmVmOjMwLGNsaWNrU3RhdGVtZW50RGVidWc6MzEsb3Blbl9kaXJlY3RpdmU6MzIsdHlwZV9kaXJlY3RpdmU6MzMsYXJnX2RpcmVjdGl2ZTozNCxjbG9zZV9kaXJlY3RpdmU6MzUsJGFjY2VwdDowLCRlbmQ6MX0sdGVybWluYWxzXzp7MjoiZXJyb3IiLDU6ImdhbnR0Iiw3OiJFT0YiLDk6IlNQQUNFIiwxMToiTkwiLDEyOiJkYXRlRm9ybWF0IiwxMzoiaW5jbHVzaXZlRW5kRGF0ZXMiLDE0OiJheGlzRm9ybWF0IiwxNToiZXhjbHVkZXMiLDE2OiJ0b2RheU1hcmtlciIsMTc6InRpdGxlIiwxODoic2VjdGlvbiIsMjA6InRhc2tUeHQiLDIxOiJ0YXNrRGF0YSIsMjU6IjoiLDI3OiJjbGljayIsMjg6ImNhbGxiYWNrbmFtZSIsMjk6ImNhbGxiYWNrYXJncyIsMzA6ImhyZWYiLDMyOiJvcGVuX2RpcmVjdGl2ZSIsMzM6InR5cGVfZGlyZWN0aXZlIiwzNDoiYXJnX2RpcmVjdGl2ZSIsMzU6ImNsb3NlX2RpcmVjdGl2ZSJ9LHByb2R1Y3Rpb25zXzpbMCxbMywyXSxbMywzXSxbNiwwXSxbNiwyXSxbOCwyXSxbOCwxXSxbOCwxXSxbOCwxXSxbMTAsMV0sWzEwLDFdLFsxMCwxXSxbMTAsMV0sWzEwLDFdLFsxMCwxXSxbMTAsMV0sWzEwLDFdLFsxMCwyXSxbMTAsMV0sWzQsNF0sWzQsNl0sWzE5LDJdLFsxOSwzXSxbMTksM10sWzE5LDRdLFsxOSwzXSxbMTksNF0sWzE5LDJdLFszMSwyXSxbMzEsM10sWzMxLDNdLFszMSw0XSxbMzEsM10sWzMxLDRdLFszMSwyXSxbMjIsMV0sWzIzLDFdLFsyNiwxXSxbMjQsMV1dLHBlcmZvcm1BY3Rpb246ZnVuY3Rpb24odCxlLG4scixpLGEsbyl7dmFyIHM9YS5sZW5ndGgtMTtzd2l0Y2goaSl7Y2FzZSAyOnJldHVybiBhW3MtMV07Y2FzZSAzOnRoaXMuJD1bXTticmVhaztjYXNlIDQ6YVtzLTFdLnB1c2goYVtzXSksdGhpcy4kPWFbcy0xXTticmVhaztjYXNlIDU6Y2FzZSA2OnRoaXMuJD1hW3NdO2JyZWFrO2Nhc2UgNzpjYXNlIDg6dGhpcy4kPVtdO2JyZWFrO2Nhc2UgOTpyLnNldERhdGVGb3JtYXQoYVtzXS5zdWJzdHIoMTEpKSx0aGlzLiQ9YVtzXS5zdWJzdHIoMTEpO2JyZWFrO2Nhc2UgMTA6ci5lbmFibGVJbmNsdXNpdmVFbmREYXRlcygpLHRoaXMuJD1hW3NdLnN1YnN0cigxOCk7YnJlYWs7Y2FzZSAxMTpyLnNldEF4aXNGb3JtYXQoYVtzXS5zdWJzdHIoMTEpKSx0aGlzLiQ9YVtzXS5zdWJzdHIoMTEpO2JyZWFrO2Nhc2UgMTI6ci5zZXRFeGNsdWRlcyhhW3NdLnN1YnN0cig5KSksdGhpcy4kPWFbc10uc3Vic3RyKDkpO2JyZWFrO2Nhc2UgMTM6ci5zZXRUb2RheU1hcmtlcihhW3NdLnN1YnN0cigxMikpLHRoaXMuJD1hW3NdLnN1YnN0cigxMik7YnJlYWs7Y2FzZSAxNDpyLnNldFRpdGxlKGFbc10uc3Vic3RyKDYpKSx0aGlzLiQ9YVtzXS5zdWJzdHIoNik7YnJlYWs7Y2FzZSAxNTpyLmFkZFNlY3Rpb24oYVtzXS5zdWJzdHIoOCkpLHRoaXMuJD1hW3NdLnN1YnN0cig4KTticmVhaztjYXNlIDE3OnIuYWRkVGFzayhhW3MtMV0sYVtzXSksdGhpcy4kPSJ0YXNrIjticmVhaztjYXNlIDIxOnRoaXMuJD1hW3MtMV0sci5zZXRDbGlja0V2ZW50KGFbcy0xXSxhW3NdLG51bGwpO2JyZWFrO2Nhc2UgMjI6dGhpcy4kPWFbcy0yXSxyLnNldENsaWNrRXZlbnQoYVtzLTJdLGFbcy0xXSxhW3NdKTticmVhaztjYXNlIDIzOnRoaXMuJD1hW3MtMl0sci5zZXRDbGlja0V2ZW50KGFbcy0yXSxhW3MtMV0sbnVsbCksci5zZXRMaW5rKGFbcy0yXSxhW3NdKTticmVhaztjYXNlIDI0OnRoaXMuJD1hW3MtM10sci5zZXRDbGlja0V2ZW50KGFbcy0zXSxhW3MtMl0sYVtzLTFdKSxyLnNldExpbmsoYVtzLTNdLGFbc10pO2JyZWFrO2Nhc2UgMjU6dGhpcy4kPWFbcy0yXSxyLnNldENsaWNrRXZlbnQoYVtzLTJdLGFbc10sbnVsbCksci5zZXRMaW5rKGFbcy0yXSxhW3MtMV0pO2JyZWFrO2Nhc2UgMjY6dGhpcy4kPWFbcy0zXSxyLnNldENsaWNrRXZlbnQoYVtzLTNdLGFbcy0xXSxhW3NdKSxyLnNldExpbmsoYVtzLTNdLGFbcy0yXSk7YnJlYWs7Y2FzZSAyNzp0aGlzLiQ9YVtzLTFdLHIuc2V0TGluayhhW3MtMV0sYVtzXSk7YnJlYWs7Y2FzZSAyODpjYXNlIDM0OnRoaXMuJD1hW3MtMV0rIiAiK2Fbc107YnJlYWs7Y2FzZSAyOTpjYXNlIDMwOmNhc2UgMzI6dGhpcy4kPWFbcy0yXSsiICIrYVtzLTFdKyIgIithW3NdO2JyZWFrO2Nhc2UgMzE6Y2FzZSAzMzp0aGlzLiQ9YVtzLTNdKyIgIithW3MtMl0rIiAiK2Fbcy0xXSsiICIrYVtzXTticmVhaztjYXNlIDM1OnIucGFyc2VEaXJlY3RpdmUoIiUleyIsIm9wZW5fZGlyZWN0aXZlIik7YnJlYWs7Y2FzZSAzNjpyLnBhcnNlRGlyZWN0aXZlKGFbc10sInR5cGVfZGlyZWN0aXZlIik7YnJlYWs7Y2FzZSAzNzphW3NdPWFbc10udHJpbSgpLnJlcGxhY2UoLycvZywnIicpLHIucGFyc2VEaXJlY3RpdmUoYVtzXSwiYXJnX2RpcmVjdGl2ZSIpO2JyZWFrO2Nhc2UgMzg6ci5wYXJzZURpcmVjdGl2ZSgifSUlIiwiY2xvc2VfZGlyZWN0aXZlIiwiZ2FudHQiKX19LHRhYmxlOlt7MzoxLDQ6Miw1OmUsMjI6NCwzMjpufSx7MTpbM119LHszOjYsNDoyLDU6ZSwyMjo0LDMyOm59LHQocixbMiwzXSx7Njo3fSksezIzOjgsMzM6WzEsOV19LHszMzpbMiwzNV19LHsxOlsyLDFdfSx7NDoyNCw3OlsxLDEwXSw4OjExLDk6WzEsMTJdLDEwOjEzLDExOlsxLDE0XSwxMjppLDEzOmEsMTQ6bywxNTpzLDE2OmMsMTc6dSwxODpsLDE5OjIyLDIwOmgsMjI6NCwyNzpmLDMyOm59LHsyNDoyNiwyNTpbMSwyN10sMzU6ZH0sdChbMjUsMzVdLFsyLDM2XSksdChyLFsyLDhdLHsxOlsyLDJdfSksdChyLFsyLDRdKSx7NDoyNCwxMDoyOSwxMjppLDEzOmEsMTQ6bywxNTpzLDE2OmMsMTc6dSwxODpsLDE5OjIyLDIwOmgsMjI6NCwyNzpmLDMyOm59LHQocixbMiw2XSksdChyLFsyLDddKSx0KHIsWzIsOV0pLHQocixbMiwxMF0pLHQocixbMiwxMV0pLHQocixbMiwxMl0pLHQocixbMiwxM10pLHQocixbMiwxNF0pLHQocixbMiwxNV0pLHQocixbMiwxNl0pLHsyMTpbMSwzMF19LHQocixbMiwxOF0pLHsyODpbMSwzMV0sMzA6WzEsMzJdfSx7MTE6WzEsMzNdfSx7MjY6MzQsMzQ6WzEsMzVdfSx7MTE6WzIsMzhdfSx0KHIsWzIsNV0pLHQocixbMiwxN10pLHQocixbMiwyMV0sezI5OlsxLDM2XSwzMDpbMSwzN119KSx0KHIsWzIsMjddLHsyODpbMSwzOF19KSx0KHAsWzIsMTldKSx7MjQ6MzksMzU6ZH0sezM1OlsyLDM3XX0sdChyLFsyLDIyXSx7MzA6WzEsNDBdfSksdChyLFsyLDIzXSksdChyLFsyLDI1XSx7Mjk6WzEsNDFdfSksezExOlsxLDQyXX0sdChyLFsyLDI0XSksdChyLFsyLDI2XSksdChwLFsyLDIwXSldLGRlZmF1bHRBY3Rpb25zOns1OlsyLDM1XSw2OlsyLDFdLDI4OlsyLDM4XSwzNTpbMiwzN119LHBhcnNlRXJyb3I6ZnVuY3Rpb24odCxlKXtpZighZS5yZWNvdmVyYWJsZSl7dmFyIG49bmV3IEVycm9yKHQpO3Rocm93IG4uaGFzaD1lLG59dGhpcy50cmFjZSh0KX0scGFyc2U6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcyxuPVswXSxyPVtdLGk9W251bGxdLGE9W10sbz10aGlzLnRhYmxlLHM9IiIsYz0wLHU9MCxsPTAsaD0yLGY9MSxkPWEuc2xpY2UuY2FsbChhcmd1bWVudHMsMSkscD1PYmplY3QuY3JlYXRlKHRoaXMubGV4ZXIpLGc9e3l5Ont9fTtmb3IodmFyIHkgaW4gdGhpcy55eSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpcy55eSx5KSYmKGcueXlbeV09dGhpcy55eVt5XSk7cC5zZXRJbnB1dCh0LGcueXkpLGcueXkubGV4ZXI9cCxnLnl5LnBhcnNlcj10aGlzLHZvaWQgMD09PXAueXlsbG9jJiYocC55eWxsb2M9e30pO3ZhciB2PXAueXlsbG9jO2EucHVzaCh2KTt2YXIgbT1wLm9wdGlvbnMmJnAub3B0aW9ucy5yYW5nZXM7ZnVuY3Rpb24gYigpe3ZhciB0O3JldHVybiJudW1iZXIiIT10eXBlb2YodD1yLnBvcCgpfHxwLmxleCgpfHxmKSYmKHQgaW5zdGFuY2VvZiBBcnJheSYmKHQ9KHI9dCkucG9wKCkpLHQ9ZS5zeW1ib2xzX1t0XXx8dCksdH0iZnVuY3Rpb24iPT10eXBlb2YgZy55eS5wYXJzZUVycm9yP3RoaXMucGFyc2VFcnJvcj1nLnl5LnBhcnNlRXJyb3I6dGhpcy5wYXJzZUVycm9yPU9iamVjdC5nZXRQcm90b3R5cGVPZih0aGlzKS5wYXJzZUVycm9yO2Zvcih2YXIgeCxfLGssdyxFLFQsQyxTLEEsTT17fTs7KXtpZihrPW5bbi5sZW5ndGgtMV0sdGhpcy5kZWZhdWx0QWN0aW9uc1trXT93PXRoaXMuZGVmYXVsdEFjdGlvbnNba106KG51bGw9PXgmJih4PWIoKSksdz1vW2tdJiZvW2tdW3hdKSx2b2lkIDA9PT13fHwhdy5sZW5ndGh8fCF3WzBdKXt2YXIgTz0iIjtmb3IoVCBpbiBBPVtdLG9ba10pdGhpcy50ZXJtaW5hbHNfW1RdJiZUPmgmJkEucHVzaCgiJyIrdGhpcy50ZXJtaW5hbHNfW1RdKyInIik7Tz1wLnNob3dQb3NpdGlvbj8iUGFyc2UgZXJyb3Igb24gbGluZSAiKyhjKzEpKyI6XG4iK3Auc2hvd1Bvc2l0aW9uKCkrIlxuRXhwZWN0aW5nICIrQS5qb2luKCIsICIpKyIsIGdvdCAnIisodGhpcy50ZXJtaW5hbHNfW3hdfHx4KSsiJyI6IlBhcnNlIGVycm9yIG9uIGxpbmUgIisoYysxKSsiOiBVbmV4cGVjdGVkICIrKHg9PWY/ImVuZCBvZiBpbnB1dCI6IiciKyh0aGlzLnRlcm1pbmFsc19beF18fHgpKyInIiksdGhpcy5wYXJzZUVycm9yKE8se3RleHQ6cC5tYXRjaCx0b2tlbjp0aGlzLnRlcm1pbmFsc19beF18fHgsbGluZTpwLnl5bGluZW5vLGxvYzp2LGV4cGVjdGVkOkF9KX1pZih3WzBdaW5zdGFuY2VvZiBBcnJheSYmdy5sZW5ndGg+MSl0aHJvdyBuZXcgRXJyb3IoIlBhcnNlIEVycm9yOiBtdWx0aXBsZSBhY3Rpb25zIHBvc3NpYmxlIGF0IHN0YXRlOiAiK2srIiwgdG9rZW46ICIreCk7c3dpdGNoKHdbMF0pe2Nhc2UgMTpuLnB1c2goeCksaS5wdXNoKHAueXl0ZXh0KSxhLnB1c2gocC55eWxsb2MpLG4ucHVzaCh3WzFdKSx4PW51bGwsXz8oeD1fLF89bnVsbCk6KHU9cC55eWxlbmcscz1wLnl5dGV4dCxjPXAueXlsaW5lbm8sdj1wLnl5bGxvYyxsPjAmJmwtLSk7YnJlYWs7Y2FzZSAyOmlmKEM9dGhpcy5wcm9kdWN0aW9uc19bd1sxXV1bMV0sTS4kPWlbaS5sZW5ndGgtQ10sTS5fJD17Zmlyc3RfbGluZTphW2EubGVuZ3RoLShDfHwxKV0uZmlyc3RfbGluZSxsYXN0X2xpbmU6YVthLmxlbmd0aC0xXS5sYXN0X2xpbmUsZmlyc3RfY29sdW1uOmFbYS5sZW5ndGgtKEN8fDEpXS5maXJzdF9jb2x1bW4sbGFzdF9jb2x1bW46YVthLmxlbmd0aC0xXS5sYXN0X2NvbHVtbn0sbSYmKE0uXyQucmFuZ2U9W2FbYS5sZW5ndGgtKEN8fDEpXS5yYW5nZVswXSxhW2EubGVuZ3RoLTFdLnJhbmdlWzFdXSksdm9pZCAwIT09KEU9dGhpcy5wZXJmb3JtQWN0aW9uLmFwcGx5KE0sW3MsdSxjLGcueXksd1sxXSxpLGFdLmNvbmNhdChkKSkpKXJldHVybiBFO0MmJihuPW4uc2xpY2UoMCwtMSpDKjIpLGk9aS5zbGljZSgwLC0xKkMpLGE9YS5zbGljZSgwLC0xKkMpKSxuLnB1c2godGhpcy5wcm9kdWN0aW9uc19bd1sxXV1bMF0pLGkucHVzaChNLiQpLGEucHVzaChNLl8kKSxTPW9bbltuLmxlbmd0aC0yXV1bbltuLmxlbmd0aC0xXV0sbi5wdXNoKFMpO2JyZWFrO2Nhc2UgMzpyZXR1cm4hMH19cmV0dXJuITB9fSx5PXtFT0Y6MSxwYXJzZUVycm9yOmZ1bmN0aW9uKHQsZSl7aWYoIXRoaXMueXkucGFyc2VyKXRocm93IG5ldyBFcnJvcih0KTt0aGlzLnl5LnBhcnNlci5wYXJzZUVycm9yKHQsZSl9LHNldElucHV0OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMueXk9ZXx8dGhpcy55eXx8e30sdGhpcy5faW5wdXQ9dCx0aGlzLl9tb3JlPXRoaXMuX2JhY2t0cmFjaz10aGlzLmRvbmU9ITEsdGhpcy55eWxpbmVubz10aGlzLnl5bGVuZz0wLHRoaXMueXl0ZXh0PXRoaXMubWF0Y2hlZD10aGlzLm1hdGNoPSIiLHRoaXMuY29uZGl0aW9uU3RhY2s9WyJJTklUSUFMIl0sdGhpcy55eWxsb2M9e2ZpcnN0X2xpbmU6MSxmaXJzdF9jb2x1bW46MCxsYXN0X2xpbmU6MSxsYXN0X2NvbHVtbjowfSx0aGlzLm9wdGlvbnMucmFuZ2VzJiYodGhpcy55eWxsb2MucmFuZ2U9WzAsMF0pLHRoaXMub2Zmc2V0PTAsdGhpc30saW5wdXQ6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9pbnB1dFswXTtyZXR1cm4gdGhpcy55eXRleHQrPXQsdGhpcy55eWxlbmcrKyx0aGlzLm9mZnNldCsrLHRoaXMubWF0Y2grPXQsdGhpcy5tYXRjaGVkKz10LHQubWF0Y2goLyg/OlxyXG4/fFxuKS4qL2cpPyh0aGlzLnl5bGluZW5vKyssdGhpcy55eWxsb2MubGFzdF9saW5lKyspOnRoaXMueXlsbG9jLmxhc3RfY29sdW1uKyssdGhpcy5vcHRpb25zLnJhbmdlcyYmdGhpcy55eWxsb2MucmFuZ2VbMV0rKyx0aGlzLl9pbnB1dD10aGlzLl9pbnB1dC5zbGljZSgxKSx0fSx1bnB1dDpmdW5jdGlvbih0KXt2YXIgZT10Lmxlbmd0aCxuPXQuc3BsaXQoLyg/OlxyXG4/fFxuKS9nKTt0aGlzLl9pbnB1dD10K3RoaXMuX2lucHV0LHRoaXMueXl0ZXh0PXRoaXMueXl0ZXh0LnN1YnN0cigwLHRoaXMueXl0ZXh0Lmxlbmd0aC1lKSx0aGlzLm9mZnNldC09ZTt2YXIgcj10aGlzLm1hdGNoLnNwbGl0KC8oPzpcclxuP3xcbikvZyk7dGhpcy5tYXRjaD10aGlzLm1hdGNoLnN1YnN0cigwLHRoaXMubWF0Y2gubGVuZ3RoLTEpLHRoaXMubWF0Y2hlZD10aGlzLm1hdGNoZWQuc3Vic3RyKDAsdGhpcy5tYXRjaGVkLmxlbmd0aC0xKSxuLmxlbmd0aC0xJiYodGhpcy55eWxpbmVuby09bi5sZW5ndGgtMSk7dmFyIGk9dGhpcy55eWxsb2MucmFuZ2U7cmV0dXJuIHRoaXMueXlsbG9jPXtmaXJzdF9saW5lOnRoaXMueXlsbG9jLmZpcnN0X2xpbmUsbGFzdF9saW5lOnRoaXMueXlsaW5lbm8rMSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOm4/KG4ubGVuZ3RoPT09ci5sZW5ndGg/dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uOjApK3Jbci5sZW5ndGgtbi5sZW5ndGhdLmxlbmd0aC1uWzBdLmxlbmd0aDp0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4tZX0sdGhpcy5vcHRpb25zLnJhbmdlcyYmKHRoaXMueXlsbG9jLnJhbmdlPVtpWzBdLGlbMF0rdGhpcy55eWxlbmctZV0pLHRoaXMueXlsZW5nPXRoaXMueXl0ZXh0Lmxlbmd0aCx0aGlzfSxtb3JlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX21vcmU9ITAsdGhpc30scmVqZWN0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXI/KHRoaXMuX2JhY2t0cmFjaz0hMCx0aGlzKTp0aGlzLnBhcnNlRXJyb3IoIkxleGljYWwgZXJyb3Igb24gbGluZSAiKyh0aGlzLnl5bGluZW5vKzEpKyIuIFlvdSBjYW4gb25seSBpbnZva2UgcmVqZWN0KCkgaW4gdGhlIGxleGVyIHdoZW4gdGhlIGxleGVyIGlzIG9mIHRoZSBiYWNrdHJhY2tpbmcgcGVyc3Vhc2lvbiAob3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIgPSB0cnVlKS5cbiIrdGhpcy5zaG93UG9zaXRpb24oKSx7dGV4dDoiIix0b2tlbjpudWxsLGxpbmU6dGhpcy55eWxpbmVub30pfSxsZXNzOmZ1bmN0aW9uKHQpe3RoaXMudW5wdXQodGhpcy5tYXRjaC5zbGljZSh0KSl9LHBhc3RJbnB1dDpmdW5jdGlvbigpe3ZhciB0PXRoaXMubWF0Y2hlZC5zdWJzdHIoMCx0aGlzLm1hdGNoZWQubGVuZ3RoLXRoaXMubWF0Y2gubGVuZ3RoKTtyZXR1cm4odC5sZW5ndGg+MjA/Ii4uLiI6IiIpK3Quc3Vic3RyKC0yMCkucmVwbGFjZSgvXG4vZywiIil9LHVwY29taW5nSW5wdXQ6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLm1hdGNoO3JldHVybiB0Lmxlbmd0aDwyMCYmKHQrPXRoaXMuX2lucHV0LnN1YnN0cigwLDIwLXQubGVuZ3RoKSksKHQuc3Vic3RyKDAsMjApKyh0Lmxlbmd0aD4yMD8iLi4uIjoiIikpLnJlcGxhY2UoL1xuL2csIiIpfSxzaG93UG9zaXRpb246ZnVuY3Rpb24oKXt2YXIgdD10aGlzLnBhc3RJbnB1dCgpLGU9bmV3IEFycmF5KHQubGVuZ3RoKzEpLmpvaW4oIi0iKTtyZXR1cm4gdCt0aGlzLnVwY29taW5nSW5wdXQoKSsiXG4iK2UrIl4ifSx0ZXN0X21hdGNoOmZ1bmN0aW9uKHQsZSl7dmFyIG4scixpO2lmKHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXImJihpPXt5eWxpbmVubzp0aGlzLnl5bGluZW5vLHl5bGxvYzp7Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5maXJzdF9saW5lLGxhc3RfbGluZTp0aGlzLmxhc3RfbGluZSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOnRoaXMueXlsbG9jLmxhc3RfY29sdW1ufSx5eXRleHQ6dGhpcy55eXRleHQsbWF0Y2g6dGhpcy5tYXRjaCxtYXRjaGVzOnRoaXMubWF0Y2hlcyxtYXRjaGVkOnRoaXMubWF0Y2hlZCx5eWxlbmc6dGhpcy55eWxlbmcsb2Zmc2V0OnRoaXMub2Zmc2V0LF9tb3JlOnRoaXMuX21vcmUsX2lucHV0OnRoaXMuX2lucHV0LHl5OnRoaXMueXksY29uZGl0aW9uU3RhY2s6dGhpcy5jb25kaXRpb25TdGFjay5zbGljZSgwKSxkb25lOnRoaXMuZG9uZX0sdGhpcy5vcHRpb25zLnJhbmdlcyYmKGkueXlsbG9jLnJhbmdlPXRoaXMueXlsbG9jLnJhbmdlLnNsaWNlKDApKSksKHI9dFswXS5tYXRjaCgvKD86XHJcbj98XG4pLiovZykpJiYodGhpcy55eWxpbmVubys9ci5sZW5ndGgpLHRoaXMueXlsbG9jPXtmaXJzdF9saW5lOnRoaXMueXlsbG9jLmxhc3RfbGluZSxsYXN0X2xpbmU6dGhpcy55eWxpbmVubysxLGZpcnN0X2NvbHVtbjp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbixsYXN0X2NvbHVtbjpyP3Jbci5sZW5ndGgtMV0ubGVuZ3RoLXJbci5sZW5ndGgtMV0ubWF0Y2goL1xyP1xuPy8pWzBdLmxlbmd0aDp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbit0WzBdLmxlbmd0aH0sdGhpcy55eXRleHQrPXRbMF0sdGhpcy5tYXRjaCs9dFswXSx0aGlzLm1hdGNoZXM9dCx0aGlzLnl5bGVuZz10aGlzLnl5dGV4dC5sZW5ndGgsdGhpcy5vcHRpb25zLnJhbmdlcyYmKHRoaXMueXlsbG9jLnJhbmdlPVt0aGlzLm9mZnNldCx0aGlzLm9mZnNldCs9dGhpcy55eWxlbmddKSx0aGlzLl9tb3JlPSExLHRoaXMuX2JhY2t0cmFjaz0hMSx0aGlzLl9pbnB1dD10aGlzLl9pbnB1dC5zbGljZSh0WzBdLmxlbmd0aCksdGhpcy5tYXRjaGVkKz10WzBdLG49dGhpcy5wZXJmb3JtQWN0aW9uLmNhbGwodGhpcyx0aGlzLnl5LHRoaXMsZSx0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdKSx0aGlzLmRvbmUmJnRoaXMuX2lucHV0JiYodGhpcy5kb25lPSExKSxuKXJldHVybiBuO2lmKHRoaXMuX2JhY2t0cmFjayl7Zm9yKHZhciBhIGluIGkpdGhpc1thXT1pW2FdO3JldHVybiExfXJldHVybiExfSxuZXh0OmZ1bmN0aW9uKCl7aWYodGhpcy5kb25lKXJldHVybiB0aGlzLkVPRjt2YXIgdCxlLG4scjt0aGlzLl9pbnB1dHx8KHRoaXMuZG9uZT0hMCksdGhpcy5fbW9yZXx8KHRoaXMueXl0ZXh0PSIiLHRoaXMubWF0Y2g9IiIpO2Zvcih2YXIgaT10aGlzLl9jdXJyZW50UnVsZXMoKSxhPTA7YTxpLmxlbmd0aDthKyspaWYoKG49dGhpcy5faW5wdXQubWF0Y2godGhpcy5ydWxlc1tpW2FdXSkpJiYoIWV8fG5bMF0ubGVuZ3RoPmVbMF0ubGVuZ3RoKSl7aWYoZT1uLHI9YSx0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyKXtpZighMSE9PSh0PXRoaXMudGVzdF9tYXRjaChuLGlbYV0pKSlyZXR1cm4gdDtpZih0aGlzLl9iYWNrdHJhY2spe2U9ITE7Y29udGludWV9cmV0dXJuITF9aWYoIXRoaXMub3B0aW9ucy5mbGV4KWJyZWFrfXJldHVybiBlPyExIT09KHQ9dGhpcy50ZXN0X21hdGNoKGUsaVtyXSkpJiZ0OiIiPT09dGhpcy5faW5wdXQ/dGhpcy5FT0Y6dGhpcy5wYXJzZUVycm9yKCJMZXhpY2FsIGVycm9yIG9uIGxpbmUgIisodGhpcy55eWxpbmVubysxKSsiLiBVbnJlY29nbml6ZWQgdGV4dC5cbiIrdGhpcy5zaG93UG9zaXRpb24oKSx7dGV4dDoiIix0b2tlbjpudWxsLGxpbmU6dGhpcy55eWxpbmVub30pfSxsZXg6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLm5leHQoKTtyZXR1cm4gdHx8dGhpcy5sZXgoKX0sYmVnaW46ZnVuY3Rpb24odCl7dGhpcy5jb25kaXRpb25TdGFjay5wdXNoKHQpfSxwb3BTdGF0ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xPjA/dGhpcy5jb25kaXRpb25TdGFjay5wb3AoKTp0aGlzLmNvbmRpdGlvblN0YWNrWzBdfSxfY3VycmVudFJ1bGVzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoJiZ0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdP3RoaXMuY29uZGl0aW9uc1t0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdXS5ydWxlczp0aGlzLmNvbmRpdGlvbnMuSU5JVElBTC5ydWxlc30sdG9wU3RhdGU6ZnVuY3Rpb24odCl7cmV0dXJuKHQ9dGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMS1NYXRoLmFicyh0fHwwKSk+PTA/dGhpcy5jb25kaXRpb25TdGFja1t0XToiSU5JVElBTCJ9LHB1c2hTdGF0ZTpmdW5jdGlvbih0KXt0aGlzLmJlZ2luKHQpfSxzdGF0ZVN0YWNrU2l6ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aH0sb3B0aW9uczp7ImNhc2UtaW5zZW5zaXRpdmUiOiEwfSxwZXJmb3JtQWN0aW9uOmZ1bmN0aW9uKHQsZSxuLHIpe3N3aXRjaChuKXtjYXNlIDA6cmV0dXJuIHRoaXMuYmVnaW4oIm9wZW5fZGlyZWN0aXZlIiksMzI7Y2FzZSAxOnJldHVybiB0aGlzLmJlZ2luKCJ0eXBlX2RpcmVjdGl2ZSIpLDMzO2Nhc2UgMjpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLHRoaXMuYmVnaW4oImFyZ19kaXJlY3RpdmUiKSwyNTtjYXNlIDM6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSx0aGlzLnBvcFN0YXRlKCksMzU7Y2FzZSA0OnJldHVybiAzNDtjYXNlIDU6Y2FzZSA2OmNhc2UgNzpicmVhaztjYXNlIDg6cmV0dXJuIDExO2Nhc2UgOTpjYXNlIDEwOmNhc2UgMTE6YnJlYWs7Y2FzZSAxMjp0aGlzLmJlZ2luKCJocmVmIik7YnJlYWs7Y2FzZSAxMzp0aGlzLnBvcFN0YXRlKCk7YnJlYWs7Y2FzZSAxNDpyZXR1cm4gMzA7Y2FzZSAxNTp0aGlzLmJlZ2luKCJjYWxsYmFja25hbWUiKTticmVhaztjYXNlIDE2OnRoaXMucG9wU3RhdGUoKTticmVhaztjYXNlIDE3OnRoaXMucG9wU3RhdGUoKSx0aGlzLmJlZ2luKCJjYWxsYmFja2FyZ3MiKTticmVhaztjYXNlIDE4OnJldHVybiAyODtjYXNlIDE5OnRoaXMucG9wU3RhdGUoKTticmVhaztjYXNlIDIwOnJldHVybiAyOTtjYXNlIDIxOnRoaXMuYmVnaW4oImNsaWNrIik7YnJlYWs7Y2FzZSAyMjp0aGlzLnBvcFN0YXRlKCk7YnJlYWs7Y2FzZSAyMzpyZXR1cm4gMjc7Y2FzZSAyNDpyZXR1cm4gNTtjYXNlIDI1OnJldHVybiAxMjtjYXNlIDI2OnJldHVybiAxMztjYXNlIDI3OnJldHVybiAxNDtjYXNlIDI4OnJldHVybiAxNTtjYXNlIDI5OnJldHVybiAxNjtjYXNlIDMwOnJldHVybiJkYXRlIjtjYXNlIDMxOnJldHVybiAxNztjYXNlIDMyOnJldHVybiAxODtjYXNlIDMzOnJldHVybiAyMDtjYXNlIDM0OnJldHVybiAyMTtjYXNlIDM1OnJldHVybiAyNTtjYXNlIDM2OnJldHVybiA3O2Nhc2UgMzc6cmV0dXJuIklOVkFMSUQifX0scnVsZXM6Wy9eKD86JSVceykvaSwvXig/OigoPzooPyFcfSUlKVteOi5dKSopKS9pLC9eKD86OikvaSwvXig/Olx9JSUpL2ksL14oPzooKD86KD8hXH0lJSkufFxuKSopKS9pLC9eKD86JSUoPyFceykqW15cbl0qKS9pLC9eKD86W15cfV0lJSpbXlxuXSopL2ksL14oPzolJSpbXlxuXSpbXG5dKikvaSwvXig/Oltcbl0rKS9pLC9eKD86XHMrKS9pLC9eKD86I1teXG5dKikvaSwvXig/OiVbXlxuXSopL2ksL14oPzpocmVmW1xzXStbIl0pL2ksL14oPzpbIl0pL2ksL14oPzpbXiJdKikvaSwvXig/OmNhbGxbXHNdKykvaSwvXig/OlwoW1xzXSpcKSkvaSwvXig/OlwoKS9pLC9eKD86W14oXSopL2ksL14oPzpcKSkvaSwvXig/OlteKV0qKS9pLC9eKD86Y2xpY2tbXHNdKykvaSwvXig/Oltcc1xuXSkvaSwvXig/OlteXHNcbl0qKS9pLC9eKD86Z2FudHRcYikvaSwvXig/OmRhdGVGb3JtYXRcc1teI1xuO10rKS9pLC9eKD86aW5jbHVzaXZlRW5kRGF0ZXNcYikvaSwvXig/OmF4aXNGb3JtYXRcc1teI1xuO10rKS9pLC9eKD86ZXhjbHVkZXNcc1teI1xuO10rKS9pLC9eKD86dG9kYXlNYXJrZXJcc1teXG47XSspL2ksL14oPzpcZFxkXGRcZC1cZFxkLVxkXGRcYikvaSwvXig/OnRpdGxlXHNbXiNcbjtdKykvaSwvXig/OnNlY3Rpb25cc1teIzpcbjtdKykvaSwvXig/OlteIzpcbjtdKykvaSwvXig/OjpbXiNcbjtdKykvaSwvXig/OjopL2ksL14oPzokKS9pLC9eKD86LikvaV0sY29uZGl0aW9uczp7Y2xvc2VfZGlyZWN0aXZlOntydWxlczpbXSxpbmNsdXNpdmU6ITF9LGFyZ19kaXJlY3RpdmU6e3J1bGVzOlszLDRdLGluY2x1c2l2ZTohMX0sdHlwZV9kaXJlY3RpdmU6e3J1bGVzOlsyLDNdLGluY2x1c2l2ZTohMX0sb3Blbl9kaXJlY3RpdmU6e3J1bGVzOlsxXSxpbmNsdXNpdmU6ITF9LGNhbGxiYWNrYXJnczp7cnVsZXM6WzE5LDIwXSxpbmNsdXNpdmU6ITF9LGNhbGxiYWNrbmFtZTp7cnVsZXM6WzE2LDE3LDE4XSxpbmNsdXNpdmU6ITF9LGhyZWY6e3J1bGVzOlsxMywxNF0saW5jbHVzaXZlOiExfSxjbGljazp7cnVsZXM6WzIyLDIzXSxpbmNsdXNpdmU6ITF9LElOSVRJQUw6e3J1bGVzOlswLDUsNiw3LDgsOSwxMCwxMSwxMiwxNSwyMSwyNCwyNSwyNiwyNywyOCwyOSwzMCwzMSwzMiwzMywzNCwzNSwzNiwzN10saW5jbHVzaXZlOiEwfX19O2Z1bmN0aW9uIHYoKXt0aGlzLnl5PXt9fXJldHVybiBnLmxleGVyPXksdi5wcm90b3R5cGU9ZyxnLlBhcnNlcj12LG5ldyB2fSgpO2UucGFyc2VyPWksZS5QYXJzZXI9aS5QYXJzZXIsZS5wYXJzZT1mdW5jdGlvbigpe3JldHVybiBpLnBhcnNlLmFwcGx5KGksYXJndW1lbnRzKX0sZS5tYWluPWZ1bmN0aW9uKHIpe3JbMV18fChjb25zb2xlLmxvZygiVXNhZ2U6ICIrclswXSsiIEZJTEUiKSx0LmV4aXQoMSkpO3ZhciBpPW4oMTkpLnJlYWRGaWxlU3luYyhuKDIwKS5ub3JtYWxpemUoclsxXSksInV0ZjgiKTtyZXR1cm4gZS5wYXJzZXIucGFyc2UoaSl9LG4uY1tuLnNdPT09ciYmZS5tYWluKHQuYXJndi5zbGljZSgxKSl9KS5jYWxsKHRoaXMsbigxNCksbig3KSh0KSl9LGZ1bmN0aW9uKHQsZSxuKXsoZnVuY3Rpb24odCxyKXt2YXIgaT1mdW5jdGlvbigpe3ZhciB0PWZ1bmN0aW9uKHQsZSxuLHIpe2ZvcihuPW58fHt9LHI9dC5sZW5ndGg7ci0tO25bdFtyXV09ZSk7cmV0dXJuIG59LGU9WzEsMl0sbj1bMSw1XSxyPVs2LDksMTEsMTcsMTgsMTksMjFdLGk9WzEsMTVdLGE9WzEsMTZdLG89WzEsMTddLHM9WzEsMjFdLGM9WzQsNiw5LDExLDE3LDE4LDE5LDIxXSx1PXt0cmFjZTpmdW5jdGlvbigpe30seXk6e30sc3ltYm9sc186e2Vycm9yOjIsc3RhcnQ6Myxqb3VybmV5OjQsZG9jdW1lbnQ6NSxFT0Y6NixkaXJlY3RpdmU6NyxsaW5lOjgsU1BBQ0U6OSxzdGF0ZW1lbnQ6MTAsTkVXTElORToxMSxvcGVuRGlyZWN0aXZlOjEyLHR5cGVEaXJlY3RpdmU6MTMsY2xvc2VEaXJlY3RpdmU6MTQsIjoiOjE1LGFyZ0RpcmVjdGl2ZToxNix0aXRsZToxNyxzZWN0aW9uOjE4LHRhc2tOYW1lOjE5LHRhc2tEYXRhOjIwLG9wZW5fZGlyZWN0aXZlOjIxLHR5cGVfZGlyZWN0aXZlOjIyLGFyZ19kaXJlY3RpdmU6MjMsY2xvc2VfZGlyZWN0aXZlOjI0LCRhY2NlcHQ6MCwkZW5kOjF9LHRlcm1pbmFsc186ezI6ImVycm9yIiw0OiJqb3VybmV5Iiw2OiJFT0YiLDk6IlNQQUNFIiwxMToiTkVXTElORSIsMTU6IjoiLDE3OiJ0aXRsZSIsMTg6InNlY3Rpb24iLDE5OiJ0YXNrTmFtZSIsMjA6InRhc2tEYXRhIiwyMToib3Blbl9kaXJlY3RpdmUiLDIyOiJ0eXBlX2RpcmVjdGl2ZSIsMjM6ImFyZ19kaXJlY3RpdmUiLDI0OiJjbG9zZV9kaXJlY3RpdmUifSxwcm9kdWN0aW9uc186WzAsWzMsM10sWzMsMl0sWzUsMF0sWzUsMl0sWzgsMl0sWzgsMV0sWzgsMV0sWzgsMV0sWzcsNF0sWzcsNl0sWzEwLDFdLFsxMCwxXSxbMTAsMl0sWzEwLDFdLFsxMiwxXSxbMTMsMV0sWzE2LDFdLFsxNCwxXV0scGVyZm9ybUFjdGlvbjpmdW5jdGlvbih0LGUsbixyLGksYSxvKXt2YXIgcz1hLmxlbmd0aC0xO3N3aXRjaChpKXtjYXNlIDE6cmV0dXJuIGFbcy0xXTtjYXNlIDM6dGhpcy4kPVtdO2JyZWFrO2Nhc2UgNDphW3MtMV0ucHVzaChhW3NdKSx0aGlzLiQ9YVtzLTFdO2JyZWFrO2Nhc2UgNTpjYXNlIDY6dGhpcy4kPWFbc107YnJlYWs7Y2FzZSA3OmNhc2UgODp0aGlzLiQ9W107YnJlYWs7Y2FzZSAxMTpyLnNldFRpdGxlKGFbc10uc3Vic3RyKDYpKSx0aGlzLiQ9YVtzXS5zdWJzdHIoNik7YnJlYWs7Y2FzZSAxMjpyLmFkZFNlY3Rpb24oYVtzXS5zdWJzdHIoOCkpLHRoaXMuJD1hW3NdLnN1YnN0cig4KTticmVhaztjYXNlIDEzOnIuYWRkVGFzayhhW3MtMV0sYVtzXSksdGhpcy4kPSJ0YXNrIjticmVhaztjYXNlIDE1OnIucGFyc2VEaXJlY3RpdmUoIiUleyIsIm9wZW5fZGlyZWN0aXZlIik7YnJlYWs7Y2FzZSAxNjpyLnBhcnNlRGlyZWN0aXZlKGFbc10sInR5cGVfZGlyZWN0aXZlIik7YnJlYWs7Y2FzZSAxNzphW3NdPWFbc10udHJpbSgpLnJlcGxhY2UoLycvZywnIicpLHIucGFyc2VEaXJlY3RpdmUoYVtzXSwiYXJnX2RpcmVjdGl2ZSIpO2JyZWFrO2Nhc2UgMTg6ci5wYXJzZURpcmVjdGl2ZSgifSUlIiwiY2xvc2VfZGlyZWN0aXZlIiwiam91cm5leSIpfX0sdGFibGU6W3szOjEsNDplLDc6MywxMjo0LDIxOm59LHsxOlszXX0sdChyLFsyLDNdLHs1OjZ9KSx7Mzo3LDQ6ZSw3OjMsMTI6NCwyMTpufSx7MTM6OCwyMjpbMSw5XX0sezIyOlsyLDE1XX0sezY6WzEsMTBdLDc6MTgsODoxMSw5OlsxLDEyXSwxMDoxMywxMTpbMSwxNF0sMTI6NCwxNzppLDE4OmEsMTk6bywyMTpufSx7MTpbMiwyXX0sezE0OjE5LDE1OlsxLDIwXSwyNDpzfSx0KFsxNSwyNF0sWzIsMTZdKSx0KHIsWzIsOF0sezE6WzIsMV19KSx0KHIsWzIsNF0pLHs3OjE4LDEwOjIyLDEyOjQsMTc6aSwxODphLDE5Om8sMjE6bn0sdChyLFsyLDZdKSx0KHIsWzIsN10pLHQocixbMiwxMV0pLHQocixbMiwxMl0pLHsyMDpbMSwyM119LHQocixbMiwxNF0pLHsxMTpbMSwyNF19LHsxNjoyNSwyMzpbMSwyNl19LHsxMTpbMiwxOF19LHQocixbMiw1XSksdChyLFsyLDEzXSksdChjLFsyLDldKSx7MTQ6MjcsMjQ6c30sezI0OlsyLDE3XX0sezExOlsxLDI4XX0sdChjLFsyLDEwXSldLGRlZmF1bHRBY3Rpb25zOns1OlsyLDE1XSw3OlsyLDJdLDIxOlsyLDE4XSwyNjpbMiwxN119LHBhcnNlRXJyb3I6ZnVuY3Rpb24odCxlKXtpZighZS5yZWNvdmVyYWJsZSl7dmFyIG49bmV3IEVycm9yKHQpO3Rocm93IG4uaGFzaD1lLG59dGhpcy50cmFjZSh0KX0scGFyc2U6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcyxuPVswXSxyPVtdLGk9W251bGxdLGE9W10sbz10aGlzLnRhYmxlLHM9IiIsYz0wLHU9MCxsPTAsaD0yLGY9MSxkPWEuc2xpY2UuY2FsbChhcmd1bWVudHMsMSkscD1PYmplY3QuY3JlYXRlKHRoaXMubGV4ZXIpLGc9e3l5Ont9fTtmb3IodmFyIHkgaW4gdGhpcy55eSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpcy55eSx5KSYmKGcueXlbeV09dGhpcy55eVt5XSk7cC5zZXRJbnB1dCh0LGcueXkpLGcueXkubGV4ZXI9cCxnLnl5LnBhcnNlcj10aGlzLHZvaWQgMD09PXAueXlsbG9jJiYocC55eWxsb2M9e30pO3ZhciB2PXAueXlsbG9jO2EucHVzaCh2KTt2YXIgbT1wLm9wdGlvbnMmJnAub3B0aW9ucy5yYW5nZXM7ZnVuY3Rpb24gYigpe3ZhciB0O3JldHVybiJudW1iZXIiIT10eXBlb2YodD1yLnBvcCgpfHxwLmxleCgpfHxmKSYmKHQgaW5zdGFuY2VvZiBBcnJheSYmKHQ9KHI9dCkucG9wKCkpLHQ9ZS5zeW1ib2xzX1t0XXx8dCksdH0iZnVuY3Rpb24iPT10eXBlb2YgZy55eS5wYXJzZUVycm9yP3RoaXMucGFyc2VFcnJvcj1nLnl5LnBhcnNlRXJyb3I6dGhpcy5wYXJzZUVycm9yPU9iamVjdC5nZXRQcm90b3R5cGVPZih0aGlzKS5wYXJzZUVycm9yO2Zvcih2YXIgeCxfLGssdyxFLFQsQyxTLEEsTT17fTs7KXtpZihrPW5bbi5sZW5ndGgtMV0sdGhpcy5kZWZhdWx0QWN0aW9uc1trXT93PXRoaXMuZGVmYXVsdEFjdGlvbnNba106KG51bGw9PXgmJih4PWIoKSksdz1vW2tdJiZvW2tdW3hdKSx2b2lkIDA9PT13fHwhdy5sZW5ndGh8fCF3WzBdKXt2YXIgTz0iIjtmb3IoVCBpbiBBPVtdLG9ba10pdGhpcy50ZXJtaW5hbHNfW1RdJiZUPmgmJkEucHVzaCgiJyIrdGhpcy50ZXJtaW5hbHNfW1RdKyInIik7Tz1wLnNob3dQb3NpdGlvbj8iUGFyc2UgZXJyb3Igb24gbGluZSAiKyhjKzEpKyI6XG4iK3Auc2hvd1Bvc2l0aW9uKCkrIlxuRXhwZWN0aW5nICIrQS5qb2luKCIsICIpKyIsIGdvdCAnIisodGhpcy50ZXJtaW5hbHNfW3hdfHx4KSsiJyI6IlBhcnNlIGVycm9yIG9uIGxpbmUgIisoYysxKSsiOiBVbmV4cGVjdGVkICIrKHg9PWY/ImVuZCBvZiBpbnB1dCI6IiciKyh0aGlzLnRlcm1pbmFsc19beF18fHgpKyInIiksdGhpcy5wYXJzZUVycm9yKE8se3RleHQ6cC5tYXRjaCx0b2tlbjp0aGlzLnRlcm1pbmFsc19beF18fHgsbGluZTpwLnl5bGluZW5vLGxvYzp2LGV4cGVjdGVkOkF9KX1pZih3WzBdaW5zdGFuY2VvZiBBcnJheSYmdy5sZW5ndGg+MSl0aHJvdyBuZXcgRXJyb3IoIlBhcnNlIEVycm9yOiBtdWx0aXBsZSBhY3Rpb25zIHBvc3NpYmxlIGF0IHN0YXRlOiAiK2srIiwgdG9rZW46ICIreCk7c3dpdGNoKHdbMF0pe2Nhc2UgMTpuLnB1c2goeCksaS5wdXNoKHAueXl0ZXh0KSxhLnB1c2gocC55eWxsb2MpLG4ucHVzaCh3WzFdKSx4PW51bGwsXz8oeD1fLF89bnVsbCk6KHU9cC55eWxlbmcscz1wLnl5dGV4dCxjPXAueXlsaW5lbm8sdj1wLnl5bGxvYyxsPjAmJmwtLSk7YnJlYWs7Y2FzZSAyOmlmKEM9dGhpcy5wcm9kdWN0aW9uc19bd1sxXV1bMV0sTS4kPWlbaS5sZW5ndGgtQ10sTS5fJD17Zmlyc3RfbGluZTphW2EubGVuZ3RoLShDfHwxKV0uZmlyc3RfbGluZSxsYXN0X2xpbmU6YVthLmxlbmd0aC0xXS5sYXN0X2xpbmUsZmlyc3RfY29sdW1uOmFbYS5sZW5ndGgtKEN8fDEpXS5maXJzdF9jb2x1bW4sbGFzdF9jb2x1bW46YVthLmxlbmd0aC0xXS5sYXN0X2NvbHVtbn0sbSYmKE0uXyQucmFuZ2U9W2FbYS5sZW5ndGgtKEN8fDEpXS5yYW5nZVswXSxhW2EubGVuZ3RoLTFdLnJhbmdlWzFdXSksdm9pZCAwIT09KEU9dGhpcy5wZXJmb3JtQWN0aW9uLmFwcGx5KE0sW3MsdSxjLGcueXksd1sxXSxpLGFdLmNvbmNhdChkKSkpKXJldHVybiBFO0MmJihuPW4uc2xpY2UoMCwtMSpDKjIpLGk9aS5zbGljZSgwLC0xKkMpLGE9YS5zbGljZSgwLC0xKkMpKSxuLnB1c2godGhpcy5wcm9kdWN0aW9uc19bd1sxXV1bMF0pLGkucHVzaChNLiQpLGEucHVzaChNLl8kKSxTPW9bbltuLmxlbmd0aC0yXV1bbltuLmxlbmd0aC0xXV0sbi5wdXNoKFMpO2JyZWFrO2Nhc2UgMzpyZXR1cm4hMH19cmV0dXJuITB9fSxsPXtFT0Y6MSxwYXJzZUVycm9yOmZ1bmN0aW9uKHQsZSl7aWYoIXRoaXMueXkucGFyc2VyKXRocm93IG5ldyBFcnJvcih0KTt0aGlzLnl5LnBhcnNlci5wYXJzZUVycm9yKHQsZSl9LHNldElucHV0OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMueXk9ZXx8dGhpcy55eXx8e30sdGhpcy5faW5wdXQ9dCx0aGlzLl9tb3JlPXRoaXMuX2JhY2t0cmFjaz10aGlzLmRvbmU9ITEsdGhpcy55eWxpbmVubz10aGlzLnl5bGVuZz0wLHRoaXMueXl0ZXh0PXRoaXMubWF0Y2hlZD10aGlzLm1hdGNoPSIiLHRoaXMuY29uZGl0aW9uU3RhY2s9WyJJTklUSUFMIl0sdGhpcy55eWxsb2M9e2ZpcnN0X2xpbmU6MSxmaXJzdF9jb2x1bW46MCxsYXN0X2xpbmU6MSxsYXN0X2NvbHVtbjowfSx0aGlzLm9wdGlvbnMucmFuZ2VzJiYodGhpcy55eWxsb2MucmFuZ2U9WzAsMF0pLHRoaXMub2Zmc2V0PTAsdGhpc30saW5wdXQ6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9pbnB1dFswXTtyZXR1cm4gdGhpcy55eXRleHQrPXQsdGhpcy55eWxlbmcrKyx0aGlzLm9mZnNldCsrLHRoaXMubWF0Y2grPXQsdGhpcy5tYXRjaGVkKz10LHQubWF0Y2goLyg/OlxyXG4/fFxuKS4qL2cpPyh0aGlzLnl5bGluZW5vKyssdGhpcy55eWxsb2MubGFzdF9saW5lKyspOnRoaXMueXlsbG9jLmxhc3RfY29sdW1uKyssdGhpcy5vcHRpb25zLnJhbmdlcyYmdGhpcy55eWxsb2MucmFuZ2VbMV0rKyx0aGlzLl9pbnB1dD10aGlzLl9pbnB1dC5zbGljZSgxKSx0fSx1bnB1dDpmdW5jdGlvbih0KXt2YXIgZT10Lmxlbmd0aCxuPXQuc3BsaXQoLyg/OlxyXG4/fFxuKS9nKTt0aGlzLl9pbnB1dD10K3RoaXMuX2lucHV0LHRoaXMueXl0ZXh0PXRoaXMueXl0ZXh0LnN1YnN0cigwLHRoaXMueXl0ZXh0Lmxlbmd0aC1lKSx0aGlzLm9mZnNldC09ZTt2YXIgcj10aGlzLm1hdGNoLnNwbGl0KC8oPzpcclxuP3xcbikvZyk7dGhpcy5tYXRjaD10aGlzLm1hdGNoLnN1YnN0cigwLHRoaXMubWF0Y2gubGVuZ3RoLTEpLHRoaXMubWF0Y2hlZD10aGlzLm1hdGNoZWQuc3Vic3RyKDAsdGhpcy5tYXRjaGVkLmxlbmd0aC0xKSxuLmxlbmd0aC0xJiYodGhpcy55eWxpbmVuby09bi5sZW5ndGgtMSk7dmFyIGk9dGhpcy55eWxsb2MucmFuZ2U7cmV0dXJuIHRoaXMueXlsbG9jPXtmaXJzdF9saW5lOnRoaXMueXlsbG9jLmZpcnN0X2xpbmUsbGFzdF9saW5lOnRoaXMueXlsaW5lbm8rMSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOm4/KG4ubGVuZ3RoPT09ci5sZW5ndGg/dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uOjApK3Jbci5sZW5ndGgtbi5sZW5ndGhdLmxlbmd0aC1uWzBdLmxlbmd0aDp0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4tZX0sdGhpcy5vcHRpb25zLnJhbmdlcyYmKHRoaXMueXlsbG9jLnJhbmdlPVtpWzBdLGlbMF0rdGhpcy55eWxlbmctZV0pLHRoaXMueXlsZW5nPXRoaXMueXl0ZXh0Lmxlbmd0aCx0aGlzfSxtb3JlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX21vcmU9ITAsdGhpc30scmVqZWN0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXI/KHRoaXMuX2JhY2t0cmFjaz0hMCx0aGlzKTp0aGlzLnBhcnNlRXJyb3IoIkxleGljYWwgZXJyb3Igb24gbGluZSAiKyh0aGlzLnl5bGluZW5vKzEpKyIuIFlvdSBjYW4gb25seSBpbnZva2UgcmVqZWN0KCkgaW4gdGhlIGxleGVyIHdoZW4gdGhlIGxleGVyIGlzIG9mIHRoZSBiYWNrdHJhY2tpbmcgcGVyc3Vhc2lvbiAob3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIgPSB0cnVlKS5cbiIrdGhpcy5zaG93UG9zaXRpb24oKSx7dGV4dDoiIix0b2tlbjpudWxsLGxpbmU6dGhpcy55eWxpbmVub30pfSxsZXNzOmZ1bmN0aW9uKHQpe3RoaXMudW5wdXQodGhpcy5tYXRjaC5zbGljZSh0KSl9LHBhc3RJbnB1dDpmdW5jdGlvbigpe3ZhciB0PXRoaXMubWF0Y2hlZC5zdWJzdHIoMCx0aGlzLm1hdGNoZWQubGVuZ3RoLXRoaXMubWF0Y2gubGVuZ3RoKTtyZXR1cm4odC5sZW5ndGg+MjA/Ii4uLiI6IiIpK3Quc3Vic3RyKC0yMCkucmVwbGFjZSgvXG4vZywiIil9LHVwY29taW5nSW5wdXQ6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLm1hdGNoO3JldHVybiB0Lmxlbmd0aDwyMCYmKHQrPXRoaXMuX2lucHV0LnN1YnN0cigwLDIwLXQubGVuZ3RoKSksKHQuc3Vic3RyKDAsMjApKyh0Lmxlbmd0aD4yMD8iLi4uIjoiIikpLnJlcGxhY2UoL1xuL2csIiIpfSxzaG93UG9zaXRpb246ZnVuY3Rpb24oKXt2YXIgdD10aGlzLnBhc3RJbnB1dCgpLGU9bmV3IEFycmF5KHQubGVuZ3RoKzEpLmpvaW4oIi0iKTtyZXR1cm4gdCt0aGlzLnVwY29taW5nSW5wdXQoKSsiXG4iK2UrIl4ifSx0ZXN0X21hdGNoOmZ1bmN0aW9uKHQsZSl7dmFyIG4scixpO2lmKHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXImJihpPXt5eWxpbmVubzp0aGlzLnl5bGluZW5vLHl5bGxvYzp7Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5maXJzdF9saW5lLGxhc3RfbGluZTp0aGlzLmxhc3RfbGluZSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOnRoaXMueXlsbG9jLmxhc3RfY29sdW1ufSx5eXRleHQ6dGhpcy55eXRleHQsbWF0Y2g6dGhpcy5tYXRjaCxtYXRjaGVzOnRoaXMubWF0Y2hlcyxtYXRjaGVkOnRoaXMubWF0Y2hlZCx5eWxlbmc6dGhpcy55eWxlbmcsb2Zmc2V0OnRoaXMub2Zmc2V0LF9tb3JlOnRoaXMuX21vcmUsX2lucHV0OnRoaXMuX2lucHV0LHl5OnRoaXMueXksY29uZGl0aW9uU3RhY2s6dGhpcy5jb25kaXRpb25TdGFjay5zbGljZSgwKSxkb25lOnRoaXMuZG9uZX0sdGhpcy5vcHRpb25zLnJhbmdlcyYmKGkueXlsbG9jLnJhbmdlPXRoaXMueXlsbG9jLnJhbmdlLnNsaWNlKDApKSksKHI9dFswXS5tYXRjaCgvKD86XHJcbj98XG4pLiovZykpJiYodGhpcy55eWxpbmVubys9ci5sZW5ndGgpLHRoaXMueXlsbG9jPXtmaXJzdF9saW5lOnRoaXMueXlsbG9jLmxhc3RfbGluZSxsYXN0X2xpbmU6dGhpcy55eWxpbmVubysxLGZpcnN0X2NvbHVtbjp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbixsYXN0X2NvbHVtbjpyP3Jbci5sZW5ndGgtMV0ubGVuZ3RoLXJbci5sZW5ndGgtMV0ubWF0Y2goL1xyP1xuPy8pWzBdLmxlbmd0aDp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbit0WzBdLmxlbmd0aH0sdGhpcy55eXRleHQrPXRbMF0sdGhpcy5tYXRjaCs9dFswXSx0aGlzLm1hdGNoZXM9dCx0aGlzLnl5bGVuZz10aGlzLnl5dGV4dC5sZW5ndGgsdGhpcy5vcHRpb25zLnJhbmdlcyYmKHRoaXMueXlsbG9jLnJhbmdlPVt0aGlzLm9mZnNldCx0aGlzLm9mZnNldCs9dGhpcy55eWxlbmddKSx0aGlzLl9tb3JlPSExLHRoaXMuX2JhY2t0cmFjaz0hMSx0aGlzLl9pbnB1dD10aGlzLl9pbnB1dC5zbGljZSh0WzBdLmxlbmd0aCksdGhpcy5tYXRjaGVkKz10WzBdLG49dGhpcy5wZXJmb3JtQWN0aW9uLmNhbGwodGhpcyx0aGlzLnl5LHRoaXMsZSx0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdKSx0aGlzLmRvbmUmJnRoaXMuX2lucHV0JiYodGhpcy5kb25lPSExKSxuKXJldHVybiBuO2lmKHRoaXMuX2JhY2t0cmFjayl7Zm9yKHZhciBhIGluIGkpdGhpc1thXT1pW2FdO3JldHVybiExfXJldHVybiExfSxuZXh0OmZ1bmN0aW9uKCl7aWYodGhpcy5kb25lKXJldHVybiB0aGlzLkVPRjt2YXIgdCxlLG4scjt0aGlzLl9pbnB1dHx8KHRoaXMuZG9uZT0hMCksdGhpcy5fbW9yZXx8KHRoaXMueXl0ZXh0PSIiLHRoaXMubWF0Y2g9IiIpO2Zvcih2YXIgaT10aGlzLl9jdXJyZW50UnVsZXMoKSxhPTA7YTxpLmxlbmd0aDthKyspaWYoKG49dGhpcy5faW5wdXQubWF0Y2godGhpcy5ydWxlc1tpW2FdXSkpJiYoIWV8fG5bMF0ubGVuZ3RoPmVbMF0ubGVuZ3RoKSl7aWYoZT1uLHI9YSx0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyKXtpZighMSE9PSh0PXRoaXMudGVzdF9tYXRjaChuLGlbYV0pKSlyZXR1cm4gdDtpZih0aGlzLl9iYWNrdHJhY2spe2U9ITE7Y29udGludWV9cmV0dXJuITF9aWYoIXRoaXMub3B0aW9ucy5mbGV4KWJyZWFrfXJldHVybiBlPyExIT09KHQ9dGhpcy50ZXN0X21hdGNoKGUsaVtyXSkpJiZ0OiIiPT09dGhpcy5faW5wdXQ/dGhpcy5FT0Y6dGhpcy5wYXJzZUVycm9yKCJMZXhpY2FsIGVycm9yIG9uIGxpbmUgIisodGhpcy55eWxpbmVubysxKSsiLiBVbnJlY29nbml6ZWQgdGV4dC5cbiIrdGhpcy5zaG93UG9zaXRpb24oKSx7dGV4dDoiIix0b2tlbjpudWxsLGxpbmU6dGhpcy55eWxpbmVub30pfSxsZXg6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLm5leHQoKTtyZXR1cm4gdHx8dGhpcy5sZXgoKX0sYmVnaW46ZnVuY3Rpb24odCl7dGhpcy5jb25kaXRpb25TdGFjay5wdXNoKHQpfSxwb3BTdGF0ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xPjA/dGhpcy5jb25kaXRpb25TdGFjay5wb3AoKTp0aGlzLmNvbmRpdGlvblN0YWNrWzBdfSxfY3VycmVudFJ1bGVzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoJiZ0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdP3RoaXMuY29uZGl0aW9uc1t0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdXS5ydWxlczp0aGlzLmNvbmRpdGlvbnMuSU5JVElBTC5ydWxlc30sdG9wU3RhdGU6ZnVuY3Rpb24odCl7cmV0dXJuKHQ9dGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMS1NYXRoLmFicyh0fHwwKSk+PTA/dGhpcy5jb25kaXRpb25TdGFja1t0XToiSU5JVElBTCJ9LHB1c2hTdGF0ZTpmdW5jdGlvbih0KXt0aGlzLmJlZ2luKHQpfSxzdGF0ZVN0YWNrU2l6ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aH0sb3B0aW9uczp7ImNhc2UtaW5zZW5zaXRpdmUiOiEwfSxwZXJmb3JtQWN0aW9uOmZ1bmN0aW9uKHQsZSxuLHIpe3N3aXRjaChuKXtjYXNlIDA6cmV0dXJuIHRoaXMuYmVnaW4oIm9wZW5fZGlyZWN0aXZlIiksMjE7Y2FzZSAxOnJldHVybiB0aGlzLmJlZ2luKCJ0eXBlX2RpcmVjdGl2ZSIpLDIyO2Nhc2UgMjpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLHRoaXMuYmVnaW4oImFyZ19kaXJlY3RpdmUiKSwxNTtjYXNlIDM6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSx0aGlzLnBvcFN0YXRlKCksMjQ7Y2FzZSA0OnJldHVybiAyMztjYXNlIDU6Y2FzZSA2OmJyZWFrO2Nhc2UgNzpyZXR1cm4gMTE7Y2FzZSA4OmNhc2UgOTpicmVhaztjYXNlIDEwOnJldHVybiA0O2Nhc2UgMTE6cmV0dXJuIDE3O2Nhc2UgMTI6cmV0dXJuIDE4O2Nhc2UgMTM6cmV0dXJuIDE5O2Nhc2UgMTQ6cmV0dXJuIDIwO2Nhc2UgMTU6cmV0dXJuIDE1O2Nhc2UgMTY6cmV0dXJuIDY7Y2FzZSAxNzpyZXR1cm4iSU5WQUxJRCJ9fSxydWxlczpbL14oPzolJVx7KS9pLC9eKD86KCg/Oig/IVx9JSUpW146Ll0pKikpL2ksL14oPzo6KS9pLC9eKD86XH0lJSkvaSwvXig/OigoPzooPyFcfSUlKS58XG4pKikpL2ksL14oPzolKD8hXHspW15cbl0qKS9pLC9eKD86W15cfV0lJVteXG5dKikvaSwvXig/Oltcbl0rKS9pLC9eKD86XHMrKS9pLC9eKD86I1teXG5dKikvaSwvXig/OmpvdXJuZXlcYikvaSwvXig/OnRpdGxlXHNbXiNcbjtdKykvaSwvXig/OnNlY3Rpb25cc1teIzpcbjtdKykvaSwvXig/OlteIzpcbjtdKykvaSwvXig/OjpbXiNcbjtdKykvaSwvXig/OjopL2ksL14oPzokKS9pLC9eKD86LikvaV0sY29uZGl0aW9uczp7b3Blbl9kaXJlY3RpdmU6e3J1bGVzOlsxXSxpbmNsdXNpdmU6ITF9LHR5cGVfZGlyZWN0aXZlOntydWxlczpbMiwzXSxpbmNsdXNpdmU6ITF9LGFyZ19kaXJlY3RpdmU6e3J1bGVzOlszLDRdLGluY2x1c2l2ZTohMX0sSU5JVElBTDp7cnVsZXM6WzAsNSw2LDcsOCw5LDEwLDExLDEyLDEzLDE0LDE1LDE2LDE3XSxpbmNsdXNpdmU6ITB9fX07ZnVuY3Rpb24gaCgpe3RoaXMueXk9e319cmV0dXJuIHUubGV4ZXI9bCxoLnByb3RvdHlwZT11LHUuUGFyc2VyPWgsbmV3IGh9KCk7ZS5wYXJzZXI9aSxlLlBhcnNlcj1pLlBhcnNlcixlLnBhcnNlPWZ1bmN0aW9uKCl7cmV0dXJuIGkucGFyc2UuYXBwbHkoaSxhcmd1bWVudHMpfSxlLm1haW49ZnVuY3Rpb24ocil7clsxXXx8KGNvbnNvbGUubG9nKCJVc2FnZTogIityWzBdKyIgRklMRSIpLHQuZXhpdCgxKSk7dmFyIGk9bigxOSkucmVhZEZpbGVTeW5jKG4oMjApLm5vcm1hbGl6ZShyWzFdKSwidXRmOCIpO3JldHVybiBlLnBhcnNlci5wYXJzZShpKX0sbi5jW24uc109PT1yJiZlLm1haW4odC5hcmd2LnNsaWNlKDEpKX0pLmNhbGwodGhpcyxuKDE0KSxuKDcpKHQpKX0sZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHI9big5KSxpPW4oMTUpO2UuZGVmYXVsdD1mdW5jdGlvbih0LGUpe3JldHVybiByLmRlZmF1bHQubGFuZy5yb3VuZChpLmRlZmF1bHQucGFyc2UodClbZV0pfX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTEyKSxpPW4oODIpLGE9bigyNCk7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBhKHQpP3IodCk6aSh0KX19LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcjtpZighcil0cnl7cj1uKDApfWNhdGNoKHQpe31yfHwocj13aW5kb3cuZDMpLHQuZXhwb3J0cz1yfSxmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgcj1uKDkpLGk9bigxNSk7ZS5kZWZhdWx0PWZ1bmN0aW9uKHQsZSxuKXt2YXIgYT1pLmRlZmF1bHQucGFyc2UodCksbz1hW2VdLHM9ci5kZWZhdWx0LmNoYW5uZWwuY2xhbXBbZV0obytuKTtyZXR1cm4gbyE9PXMmJihhW2VdPXMpLGkuZGVmYXVsdC5zdHJpbmdpZnkoYSl9fSxmdW5jdGlvbih0LGUsbil7dmFyIHI9bigyMTApLGk9bigyMTYpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciBuPWkodCxlKTtyZXR1cm4gcihuKT9uOnZvaWQgMH19LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDM4KSxpPW4oMjEyKSxhPW4oMjEzKSxvPXI/ci50b1N0cmluZ1RhZzp2b2lkIDA7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBudWxsPT10P3ZvaWQgMD09PXQ/IltvYmplY3QgVW5kZWZpbmVkXSI6IltvYmplY3QgTnVsbF0iOm8mJm8gaW4gT2JqZWN0KHQpP2kodCk6YSh0KX19LGZ1bmN0aW9uKHQsZSl7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiB0fX0sZnVuY3Rpb24odCxlKXt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdD09PWV8fHQhPXQmJmUhPWV9fSxmdW5jdGlvbih0LGUsbil7dmFyIHI9bigzNCksaT1uKDExKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7aWYoIWkodCkpcmV0dXJuITE7dmFyIGU9cih0KTtyZXR1cm4iW29iamVjdCBGdW5jdGlvbl0iPT1lfHwiW29iamVjdCBHZW5lcmF0b3JGdW5jdGlvbl0iPT1lfHwiW29iamVjdCBBc3luY0Z1bmN0aW9uXSI9PWV8fCJbb2JqZWN0IFByb3h5XSI9PWV9fSxmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxNikuU3ltYm9sO3QuZXhwb3J0cz1yfSxmdW5jdGlvbih0LGUsbil7KGZ1bmN0aW9uKHQpe3ZhciByPW4oMTYpLGk9bigyMzIpLGE9ZSYmIWUubm9kZVR5cGUmJmUsbz1hJiYib2JqZWN0Ij09dHlwZW9mIHQmJnQmJiF0Lm5vZGVUeXBlJiZ0LHM9byYmby5leHBvcnRzPT09YT9yLkJ1ZmZlcjp2b2lkIDAsYz0ocz9zLmlzQnVmZmVyOnZvaWQgMCl8fGk7dC5leHBvcnRzPWN9KS5jYWxsKHRoaXMsbig3KSh0KSl9LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDExMiksaT1uKDIzNiksYT1uKDI0KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIGEodCk/cih0LCEwKTppKHQpfX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMjQxKSxpPW4oNzcpLGE9bigyNDIpLG89bigxMjEpLHM9bigyNDMpLGM9bigzNCksdT1uKDExMCksbD11KHIpLGg9dShpKSxmPXUoYSksZD11KG8pLHA9dShzKSxnPWM7KHImJiJbb2JqZWN0IERhdGFWaWV3XSIhPWcobmV3IHIobmV3IEFycmF5QnVmZmVyKDEpKSl8fGkmJiJbb2JqZWN0IE1hcF0iIT1nKG5ldyBpKXx8YSYmIltvYmplY3QgUHJvbWlzZV0iIT1nKGEucmVzb2x2ZSgpKXx8byYmIltvYmplY3QgU2V0XSIhPWcobmV3IG8pfHxzJiYiW29iamVjdCBXZWFrTWFwXSIhPWcobmV3IHMpKSYmKGc9ZnVuY3Rpb24odCl7dmFyIGU9Yyh0KSxuPSJbb2JqZWN0IE9iamVjdF0iPT1lP3QuY29uc3RydWN0b3I6dm9pZCAwLHI9bj91KG4pOiIiO2lmKHIpc3dpdGNoKHIpe2Nhc2UgbDpyZXR1cm4iW29iamVjdCBEYXRhVmlld10iO2Nhc2UgaDpyZXR1cm4iW29iamVjdCBNYXBdIjtjYXNlIGY6cmV0dXJuIltvYmplY3QgUHJvbWlzZV0iO2Nhc2UgZDpyZXR1cm4iW29iamVjdCBTZXRdIjtjYXNlIHA6cmV0dXJuIltvYmplY3QgV2Vha01hcF0ifXJldHVybiBlfSksdC5leHBvcnRzPWd9LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDM0KSxpPW4oMjEpO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIHR8fGkodCkmJiJbb2JqZWN0IFN5bWJvbF0iPT1yKHQpfX0sZnVuY3Rpb24odCxlLG4pe3ZhciByO3RyeXtyPXtkZWZhdWx0czpuKDE1NCksZWFjaDpuKDg3KSxpc0Z1bmN0aW9uOm4oMzcpLGlzUGxhaW5PYmplY3Q6bigxNTgpLHBpY2s6bigxNjEpLGhhczpuKDkzKSxyYW5nZTpuKDE2MiksdW5pcXVlSWQ6bigxNjMpfX1jYXRjaCh0KXt9cnx8KHI9d2luZG93Ll8pLHQuZXhwb3J0cz1yfSxmdW5jdGlvbih0KXt0LmV4cG9ydHM9SlNPTi5wYXJzZSgneyJuYW1lIjoibWVybWFpZCIsInZlcnNpb24iOiI4LjguMSIsImRlc2NyaXB0aW9uIjoiTWFya2Rvd25pc2ggc3ludGF4IGZvciBnZW5lcmF0aW5nIGZsb3djaGFydHMsIHNlcXVlbmNlIGRpYWdyYW1zLCBjbGFzcyBkaWFncmFtcywgZ2FudHQgY2hhcnRzIGFuZCBnaXQgZ3JhcGhzLiIsIm1haW4iOiJkaXN0L21lcm1haWQuY29yZS5qcyIsImtleXdvcmRzIjpbImRpYWdyYW0iLCJtYXJrZG93biIsImZsb3djaGFydCIsInNlcXVlbmNlIGRpYWdyYW0iLCJnYW50dCIsImNsYXNzIGRpYWdyYW0iLCJnaXQgZ3JhcGgiXSwic2NyaXB0cyI6eyJidWlsZDpkZXZlbG9wbWVudCI6IndlYnBhY2sgLS1wcm9ncmVzcyAtLWNvbG9ycyIsImJ1aWxkOnByb2R1Y3Rpb24iOiJ5YXJuIGJ1aWxkOmRldmVsb3BtZW50IC1wIC0tY29uZmlnIHdlYnBhY2suY29uZmlnLnByb2QuYmFiZWwuanMiLCJidWlsZCI6Inlhcm4gYnVpbGQ6ZGV2ZWxvcG1lbnQgJiYgeWFybiBidWlsZDpwcm9kdWN0aW9uIiwicG9zdGJ1aWxkIjoiZG9jdW1lbnRhdGlvbiBidWlsZCBzcmMvbWVybWFpZEFQSS5qcyBzcmMvY29uZmlnLmpzIC0tc2hhbGxvdyAtZiBtZCAtLW1hcmtkb3duLXRvYyBmYWxzZSB8IHNlZCBcJzFpLS0tXFxcXG5zb3J0OiAzXFxcXG50aXRsZTogQ29uZmlndXJhdGlvbnNcXFxcbi0tLVxcXFxuXCcgPiBkb2NzL2dldHRpbmctc3RhcnRlZC9TZXR1cC5tZCIsImJ1aWxkOndhdGNoIjoieWFybiBidWlsZCAtLXdhdGNoIiwibWluaWZ5IjoibWluaWZ5IC4vZGlzdC9tZXJtYWlkLmpzID4gLi9kaXN0L21lcm1haWQubWluLmpzIiwicmVsZWFzZSI6Inlhcm4gYnVpbGQiLCJsaW50IjoiZXNsaW50IHNyYyIsImUyZTpkZXByIjoieWFybiBsaW50ICYmIGplc3QgZTJlIC0tY29uZmlnIGUyZS9qZXN0LmNvbmZpZy5qcyIsImN5cHJlc3MiOiJwZXJjeSBleGVjIC0tIGN5cHJlc3MgcnVuIiwiZTJlIjoic3RhcnQtc2VydmVyLWFuZC10ZXN0IGRldiBodHRwOi8vbG9jYWxob3N0OjkwMDAvIGN5cHJlc3MiLCJlMmUtdXBkIjoieWFybiBsaW50ICYmIGplc3QgZTJlIC11IC0tY29uZmlnIGUyZS9qZXN0LmNvbmZpZy5qcyIsImRldiI6IndlYnBhY2stZGV2LXNlcnZlciAtLWNvbmZpZyB3ZWJwYWNrLmNvbmZpZy5lMmUuanMiLCJ0ZXN0IjoieWFybiBsaW50ICYmIGplc3Qgc3JjLy4qIiwidGVzdDp3YXRjaCI6Implc3QgLS13YXRjaCBzcmMiLCJ4cHJlcHVibGlzaE9ubHkiOiJ5YXJuIGJ1aWxkICYmIHlhcm4gdGVzdCAmJiB5YXJuIGUyZSIsInByZXBhcmUiOiJ5YXJuIGJ1aWxkIn0sInJlcG9zaXRvcnkiOnsidHlwZSI6ImdpdCIsInVybCI6Imh0dHBzOi8vZ2l0aHViLmNvbS9rbnN2L21lcm1haWQifSwiYXV0aG9yIjoiS251dCBTdmVpZHF2aXN0IiwibGljZW5zZSI6Ik1JVCIsInN0YW5kYXJkIjp7Imlnbm9yZSI6WyIqKi9wYXJzZXIvKi5qcyIsImRpc3QvKiovKi5qcyIsImN5cHJlc3MvKiovKi5qcyJdLCJnbG9iYWxzIjpbInBhZ2UiXX0sImRlcGVuZGVuY2llcyI6eyJAYnJhaW50cmVlL3Nhbml0aXplLXVybCI6Il4zLjEuMCIsImJhYmVsLWVzbGludCI6Il4xMC4xLjAiLCJkMyI6Il41LjcuMCIsImRhZ3JlIjoiXjAuOC40IiwiZGFncmUtZDMiOiJeMC42LjQiLCJlbnRpdHktZGVjb2RlIjoiXjIuMC4yIiwiZ3JhcGhsaWIiOiJeMi4xLjciLCJoZSI6Il4xLjIuMCIsImtocm9tYSI6Il4xLjEuMCIsIm1pbmlmeSI6Il40LjEuMSIsIm1vbWVudC1taW5pIjoiXjIuMjIuMSIsInN0eWxpcyI6Il4zLjUuMiJ9LCJkZXZEZXBlbmRlbmNpZXMiOnsiQGJhYmVsL2NvcmUiOiJeNy4yLjIiLCJAYmFiZWwvcHJlc2V0LWVudiI6Il43LjguNCIsIkBiYWJlbC9yZWdpc3RlciI6Il43LjAuMCIsIkBwZXJjeS9jeXByZXNzIjoiKiIsImJhYmVsLWNvcmUiOiI3LjAuMC1icmlkZ2UuMCIsImJhYmVsLWplc3QiOiJeMjQuOS4wIiwiYmFiZWwtbG9hZGVyIjoiXjguMC40IiwiY292ZXJhbGxzIjoiXjMuMC4yIiwiY3NzLWxvYWRlciI6Il4yLjAuMSIsImNzcy10by1zdHJpbmctbG9hZGVyIjoiXjAuMS4zIiwiY3lwcmVzcyI6IjQuMC4xIiwiZG9jdW1lbnRhdGlvbiI6Il4xMi4wLjEiLCJlc2xpbnQiOiJeNi4zLjAiLCJlc2xpbnQtY29uZmlnLXByZXR0aWVyIjoiXjYuMy4wIiwiZXNsaW50LXBsdWdpbi1wcmV0dGllciI6Il4zLjEuMCIsImh1c2t5IjoiXjEuMi4xIiwiaWRlbnRpdHktb2JqLXByb3h5IjoiXjMuMC4wIiwiamVzdCI6Il4yNC45LjAiLCJqaXNvbiI6Il4wLjQuMTgiLCJtb21lbnQiOiJeMi4yMy4wIiwibm9kZS1zYXNzIjoiXjQuMTIuMCIsInByZXR0aWVyIjoiXjEuMTguMiIsInB1cHBldGVlciI6Il4xLjE3LjAiLCJzYXNzLWxvYWRlciI6Il43LjEuMCIsInN0YXJ0LXNlcnZlci1hbmQtdGVzdCI6Il4xLjEwLjYiLCJ0ZXJzZXItd2VicGFjay1wbHVnaW4iOiJeMi4yLjIiLCJ3ZWJwYWNrIjoiXjQuNDEuMiIsIndlYnBhY2stYnVuZGxlLWFuYWx5emVyIjoiXjMuNy4wIiwid2VicGFjay1jbGkiOiJeMy4xLjIiLCJ3ZWJwYWNrLWRldi1zZXJ2ZXIiOiJeMy40LjEiLCJ3ZWJwYWNrLW5vZGUtZXh0ZXJuYWxzIjoiXjEuNy4yIiwieWFybi11cGdyYWRlLWFsbCI6Il4wLjUuMCJ9LCJmaWxlcyI6WyJkaXN0Il0sInlhcm4tdXBncmFkZS1hbGwiOnsiaWdub3JlIjpbImJhYmVsLWNvcmUiXX0sInNpZGVFZmZlY3RzIjpbIioqLyouY3NzIiwiKiovKi5zY3NzIl0sImh1c2t5Ijp7Imhvb2tzIjp7InByZS1wdXNoIjoieWFybiB0ZXN0In19fScpfSxmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgcj1uZXcobigxNzYpLmRlZmF1bHQpKHtyOjAsZzowLGI6MCxhOjB9LCJ0cmFuc3BhcmVudCIpO2UuZGVmYXVsdD1yfSxmdW5jdGlvbih0LGUsbil7dmFyIHI9big1OCksaT1uKDU5KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlLG4sYSl7dmFyIG89IW47bnx8KG49e30pO2Zvcih2YXIgcz0tMSxjPWUubGVuZ3RoOysrczxjOyl7dmFyIHU9ZVtzXSxsPWE/YShuW3VdLHRbdV0sdSxuLHQpOnZvaWQgMDt2b2lkIDA9PT1sJiYobD10W3VdKSxvP2kobix1LGwpOnIobix1LGwpfXJldHVybiBufX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMjMxKSxpPW4oMjEpLGE9T2JqZWN0LnByb3RvdHlwZSxvPWEuaGFzT3duUHJvcGVydHkscz1hLnByb3BlcnR5SXNFbnVtZXJhYmxlLGM9cihmdW5jdGlvbigpe3JldHVybiBhcmd1bWVudHN9KCkpP3I6ZnVuY3Rpb24odCl7cmV0dXJuIGkodCkmJm8uY2FsbCh0LCJjYWxsZWUiKSYmIXMuY2FsbCh0LCJjYWxsZWUiKX07dC5leHBvcnRzPWN9LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDIzMyksaT1uKDYxKSxhPW4oODEpLG89YSYmYS5pc1R5cGVkQXJyYXkscz1vP2kobyk6cjt0LmV4cG9ydHM9c30sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oNDIpO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtpZigic3RyaW5nIj09dHlwZW9mIHR8fHIodCkpcmV0dXJuIHQ7dmFyIGU9dCsiIjtyZXR1cm4iMCI9PWUmJjEvdD09LTEvMD8iLTAiOmV9fSxmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxMik7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIG49dC5hcHBlbmQoImZvcmVpZ25PYmplY3QiKS5hdHRyKCJ3aWR0aCIsIjEwMDAwMCIpLGk9bi5hcHBlbmQoInhodG1sOmRpdiIpO2kuYXR0cigieG1sbnMiLCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIik7dmFyIGE9ZS5sYWJlbDtzd2l0Y2godHlwZW9mIGEpe2Nhc2UiZnVuY3Rpb24iOmkuaW5zZXJ0KGEpO2JyZWFrO2Nhc2Uib2JqZWN0IjppLmluc2VydCgoZnVuY3Rpb24oKXtyZXR1cm4gYX0pKTticmVhaztkZWZhdWx0OmkuaHRtbChhKX1yLmFwcGx5U3R5bGUoaSxlLmxhYmVsU3R5bGUpLGkuc3R5bGUoImRpc3BsYXkiLCJpbmxpbmUtYmxvY2siKSxpLnN0eWxlKCJ3aGl0ZS1zcGFjZSIsIm5vd3JhcCIpO3ZhciBvPWkubm9kZSgpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO3JldHVybiBuLmF0dHIoIndpZHRoIixvLndpZHRoKS5hdHRyKCJoZWlnaHQiLG8uaGVpZ2h0KSxufX0sZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHI9big5KSxpPW4oNDUpLGE9bigxNSksbz1uKDUyKTtlLmRlZmF1bHQ9ZnVuY3Rpb24odCxlLG4scyl7aWYodm9pZCAwPT09biYmKG49MCksdm9pZCAwPT09cyYmKHM9MSksIm51bWJlciIhPXR5cGVvZiB0KXJldHVybiBvLmRlZmF1bHQodCx7YTplfSk7dmFyIGM9aS5kZWZhdWx0LnNldCh7cjpyLmRlZmF1bHQuY2hhbm5lbC5jbGFtcC5yKHQpLGc6ci5kZWZhdWx0LmNoYW5uZWwuY2xhbXAuZyhlKSxiOnIuZGVmYXVsdC5jaGFubmVsLmNsYW1wLmIobiksYTpyLmRlZmF1bHQuY2hhbm5lbC5jbGFtcC5hKHMpfSk7cmV0dXJuIGEuZGVmYXVsdC5zdHJpbmdpZnkoYyl9fSxmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgcj1uKDkpLGk9bigxNSk7ZS5kZWZhdWx0PWZ1bmN0aW9uKHQsZSl7dmFyIG49aS5kZWZhdWx0LnBhcnNlKHQpO2Zvcih2YXIgYSBpbiBlKW5bYV09ci5kZWZhdWx0LmNoYW5uZWwuY2xhbXBbYV0oZVthXSk7cmV0dXJuIGkuZGVmYXVsdC5zdHJpbmdpZnkobil9fSxmdW5jdGlvbih0LGUsbil7dmFyIHI9big1NCksaT1uKDIwNSksYT1uKDIwNiksbz1uKDIwNykscz1uKDIwOCksYz1uKDIwOSk7ZnVuY3Rpb24gdSh0KXt2YXIgZT10aGlzLl9fZGF0YV9fPW5ldyByKHQpO3RoaXMuc2l6ZT1lLnNpemV9dS5wcm90b3R5cGUuY2xlYXI9aSx1LnByb3RvdHlwZS5kZWxldGU9YSx1LnByb3RvdHlwZS5nZXQ9byx1LnByb3RvdHlwZS5oYXM9cyx1LnByb3RvdHlwZS5zZXQ9Yyx0LmV4cG9ydHM9dX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMjAwKSxpPW4oMjAxKSxhPW4oMjAyKSxvPW4oMjAzKSxzPW4oMjA0KTtmdW5jdGlvbiBjKHQpe3ZhciBlPS0xLG49bnVsbD09dD8wOnQubGVuZ3RoO2Zvcih0aGlzLmNsZWFyKCk7KytlPG47KXt2YXIgcj10W2VdO3RoaXMuc2V0KHJbMF0sclsxXSl9fWMucHJvdG90eXBlLmNsZWFyPXIsYy5wcm90b3R5cGUuZGVsZXRlPWksYy5wcm90b3R5cGUuZ2V0PWEsYy5wcm90b3R5cGUuaGFzPW8sYy5wcm90b3R5cGUuc2V0PXMsdC5leHBvcnRzPWN9LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDM2KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtmb3IodmFyIG49dC5sZW5ndGg7bi0tOylpZihyKHRbbl1bMF0sZSkpcmV0dXJuIG47cmV0dXJuLTF9fSxmdW5jdGlvbih0LGUsbil7dmFyIHI9bigzMykoT2JqZWN0LCJjcmVhdGUiKTt0LmV4cG9ydHM9cn0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMjI1KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgbj10Ll9fZGF0YV9fO3JldHVybiByKGUpP25bInN0cmluZyI9PXR5cGVvZiBlPyJzdHJpbmciOiJoYXNoIl06bi5tYXB9fSxmdW5jdGlvbih0LGUsbil7dmFyIHI9big1OSksaT1uKDM2KSxhPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSxuKXt2YXIgbz10W2VdO2EuY2FsbCh0LGUpJiZpKG8sbikmJih2b2lkIDAhPT1ufHxlIGluIHQpfHxyKHQsZSxuKX19LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDExMSk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSxuKXsiX19wcm90b19fIj09ZSYmcj9yKHQsZSx7Y29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITAsdmFsdWU6bix3cml0YWJsZTohMH0pOnRbZV09bn19LGZ1bmN0aW9uKHQsZSl7dmFyIG49L14oPzowfFsxLTldXGQqKSQvO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPXR5cGVvZiB0O3JldHVybiEhKGU9bnVsbD09ZT85MDA3MTk5MjU0NzQwOTkxOmUpJiYoIm51bWJlciI9PXJ8fCJzeW1ib2wiIT1yJiZuLnRlc3QodCkpJiZ0Pi0xJiZ0JTE9PTAmJnQ8ZX19LGZ1bmN0aW9uKHQsZSl7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gdChlKX19fSxmdW5jdGlvbih0LGUpe3ZhciBuPU9iamVjdC5wcm90b3R5cGU7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPXQmJnQuY29uc3RydWN0b3I7cmV0dXJuIHQ9PT0oImZ1bmN0aW9uIj09dHlwZW9mIGUmJmUucHJvdG90eXBlfHxuKX19LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDExMykoT2JqZWN0LmdldFByb3RvdHlwZU9mLE9iamVjdCk7dC5leHBvcnRzPXJ9LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDg4KSxpPW4oMjU0KShyKTt0LmV4cG9ydHM9aX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oNSksaT1uKDkyKSxhPW4oMjY4KSxvPW4oMTM1KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gcih0KT90OmkodCxlKT9bdF06YShvKHQpKX19LGZ1bmN0aW9uKHQsZSl7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciBuPS0xLHI9bnVsbD09dD8wOnQubGVuZ3RoLGk9QXJyYXkocik7KytuPHI7KWlbbl09ZSh0W25dLG4sdCk7cmV0dXJuIGl9fSxmdW5jdGlvbih0LGUsbil7dmFyIHI9bigzNSksaT1uKDE0MyksYT1uKDE0NCk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGEoaSh0LGUsciksdCsiIil9fSxmdW5jdGlvbih0LGUsbil7dmFyIHI9bigzNiksaT1uKDI0KSxhPW4oNjApLG89bigxMSk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSxuKXtpZighbyhuKSlyZXR1cm4hMTt2YXIgcz10eXBlb2YgZTtyZXR1cm4hISgibnVtYmVyIj09cz9pKG4pJiZhKGUsbi5sZW5ndGgpOiJzdHJpbmciPT1zJiZlIGluIG4pJiZyKG5bZV0sdCl9fSxmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oNCk7dC5leHBvcnRzPXtsb25nZXN0UGF0aDpmdW5jdGlvbih0KXt2YXIgZT17fTtyLmZvckVhY2godC5zb3VyY2VzKCksKGZ1bmN0aW9uIG4oaSl7dmFyIGE9dC5ub2RlKGkpO2lmKHIuaGFzKGUsaSkpcmV0dXJuIGEucmFuaztlW2ldPSEwO3ZhciBvPXIubWluKHIubWFwKHQub3V0RWRnZXMoaSksKGZ1bmN0aW9uKGUpe3JldHVybiBuKGUudyktdC5lZGdlKGUpLm1pbmxlbn0pKSk7cmV0dXJuIG8hPT1OdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFkmJm51bGwhPW98fChvPTApLGEucmFuaz1vfSkpfSxzbGFjazpmdW5jdGlvbih0LGUpe3JldHVybiB0Lm5vZGUoZS53KS5yYW5rLXQubm9kZShlLnYpLnJhbmstdC5lZGdlKGUpLm1pbmxlbn19fSxmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPS9eKCUyMHxccykqKGphdmFzY3JpcHR8ZGF0YSkvaW0saT0vW15ceDIwLVx4N0VdL2dpbSxhPS9eKFteOl0rKTovZ20sbz1bIi4iLCIvIl07dC5leHBvcnRzPXtzYW5pdGl6ZVVybDpmdW5jdGlvbih0KXtpZighdClyZXR1cm4iYWJvdXQ6YmxhbmsiO3ZhciBlLG4scz10LnJlcGxhY2UoaSwiIikudHJpbSgpO3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gby5pbmRleE9mKHRbMF0pPi0xfShzKT9zOihuPXMubWF0Y2goYSkpPyhlPW5bMF0sci50ZXN0KGUpPyJhYm91dDpibGFuayI6cyk6ImFib3V0OmJsYW5rIn19fSxmdW5jdGlvbih0LGUsbil7KGZ1bmN0aW9uKHQscil7dmFyIGk9ZnVuY3Rpb24oKXt2YXIgdD1mdW5jdGlvbih0LGUsbixyKXtmb3Iobj1ufHx7fSxyPXQubGVuZ3RoO3ItLTtuW3Rbcl1dPWUpO3JldHVybiBufSxlPVsyLDNdLG49WzEsN10scj1bNywxMiwxNSwxNywxOSwyMCwyMV0saT1bNywxMSwxMiwxNSwxNywxOSwyMCwyMV0sYT1bMiwyMF0sbz1bMSwzMl0scz17dHJhY2U6ZnVuY3Rpb24oKXt9LHl5Ont9LHN5bWJvbHNfOntlcnJvcjoyLHN0YXJ0OjMsR0c6NCwiOiI6NSxkb2N1bWVudDo2LEVPRjo3LERJUjo4LG9wdGlvbnM6OSxib2R5OjEwLE9QVDoxMSxOTDoxMixsaW5lOjEzLHN0YXRlbWVudDoxNCxDT01NSVQ6MTUsY29tbWl0X2FyZzoxNixCUkFOQ0g6MTcsSUQ6MTgsQ0hFQ0tPVVQ6MTksTUVSR0U6MjAsUkVTRVQ6MjEscmVzZXRfYXJnOjIyLFNUUjoyMyxIRUFEOjI0LHJlc2V0X3BhcmVudHM6MjUsQ0FSRVQ6MjYsJGFjY2VwdDowLCRlbmQ6MX0sdGVybWluYWxzXzp7MjoiZXJyb3IiLDQ6IkdHIiw1OiI6Iiw3OiJFT0YiLDg6IkRJUiIsMTE6Ik9QVCIsMTI6Ik5MIiwxNToiQ09NTUlUIiwxNzoiQlJBTkNIIiwxODoiSUQiLDE5OiJDSEVDS09VVCIsMjA6Ik1FUkdFIiwyMToiUkVTRVQiLDIzOiJTVFIiLDI0OiJIRUFEIiwyNjoiQ0FSRVQifSxwcm9kdWN0aW9uc186WzAsWzMsNF0sWzMsNV0sWzYsMF0sWzYsMl0sWzksMl0sWzksMV0sWzEwLDBdLFsxMCwyXSxbMTMsMl0sWzEzLDFdLFsxNCwyXSxbMTQsMl0sWzE0LDJdLFsxNCwyXSxbMTQsMl0sWzE2LDBdLFsxNiwxXSxbMjIsMl0sWzIyLDJdLFsyNSwwXSxbMjUsMl1dLHBlcmZvcm1BY3Rpb246ZnVuY3Rpb24odCxlLG4scixpLGEsbyl7dmFyIHM9YS5sZW5ndGgtMTtzd2l0Y2goaSl7Y2FzZSAxOnJldHVybiBhW3MtMV07Y2FzZSAyOnJldHVybiByLnNldERpcmVjdGlvbihhW3MtM10pLGFbcy0xXTtjYXNlIDQ6ci5zZXRPcHRpb25zKGFbcy0xXSksdGhpcy4kPWFbc107YnJlYWs7Y2FzZSA1OmFbcy0xXSs9YVtzXSx0aGlzLiQ9YVtzLTFdO2JyZWFrO2Nhc2UgNzp0aGlzLiQ9W107YnJlYWs7Y2FzZSA4OmFbcy0xXS5wdXNoKGFbc10pLHRoaXMuJD1hW3MtMV07YnJlYWs7Y2FzZSA5OnRoaXMuJD1hW3MtMV07YnJlYWs7Y2FzZSAxMTpyLmNvbW1pdChhW3NdKTticmVhaztjYXNlIDEyOnIuYnJhbmNoKGFbc10pO2JyZWFrO2Nhc2UgMTM6ci5jaGVja291dChhW3NdKTticmVhaztjYXNlIDE0OnIubWVyZ2UoYVtzXSk7YnJlYWs7Y2FzZSAxNTpyLnJlc2V0KGFbc10pO2JyZWFrO2Nhc2UgMTY6dGhpcy4kPSIiO2JyZWFrO2Nhc2UgMTc6dGhpcy4kPWFbc107YnJlYWs7Y2FzZSAxODp0aGlzLiQ9YVtzLTFdKyI6IithW3NdO2JyZWFrO2Nhc2UgMTk6dGhpcy4kPWFbcy0xXSsiOiIrci5jb3VudCxyLmNvdW50PTA7YnJlYWs7Y2FzZSAyMDpyLmNvdW50PTA7YnJlYWs7Y2FzZSAyMTpyLmNvdW50Kz0xfX0sdGFibGU6W3szOjEsNDpbMSwyXX0sezE6WzNdfSx7NTpbMSwzXSw4OlsxLDRdfSx7Njo1LDc6ZSw5OjYsMTI6bn0sezU6WzEsOF19LHs3OlsxLDldfSx0KHIsWzIsN10sezEwOjEwLDExOlsxLDExXX0pLHQoaSxbMiw2XSksezY6MTIsNzplLDk6NiwxMjpufSx7MTpbMiwxXX0sezc6WzIsNF0sMTI6WzEsMTVdLDEzOjEzLDE0OjE0LDE1OlsxLDE2XSwxNzpbMSwxN10sMTk6WzEsMThdLDIwOlsxLDE5XSwyMTpbMSwyMF19LHQoaSxbMiw1XSksezc6WzEsMjFdfSx0KHIsWzIsOF0pLHsxMjpbMSwyMl19LHQocixbMiwxMF0pLHsxMjpbMiwxNl0sMTY6MjMsMjM6WzEsMjRdfSx7MTg6WzEsMjVdfSx7MTg6WzEsMjZdfSx7MTg6WzEsMjddfSx7MTg6WzEsMzBdLDIyOjI4LDI0OlsxLDI5XX0sezE6WzIsMl19LHQocixbMiw5XSksezEyOlsyLDExXX0sezEyOlsyLDE3XX0sezEyOlsyLDEyXX0sezEyOlsyLDEzXX0sezEyOlsyLDE0XX0sezEyOlsyLDE1XX0sezEyOmEsMjU6MzEsMjY6b30sezEyOmEsMjU6MzMsMjY6b30sezEyOlsyLDE4XX0sezEyOmEsMjU6MzQsMjY6b30sezEyOlsyLDE5XX0sezEyOlsyLDIxXX1dLGRlZmF1bHRBY3Rpb25zOns5OlsyLDFdLDIxOlsyLDJdLDIzOlsyLDExXSwyNDpbMiwxN10sMjU6WzIsMTJdLDI2OlsyLDEzXSwyNzpbMiwxNF0sMjg6WzIsMTVdLDMxOlsyLDE4XSwzMzpbMiwxOV0sMzQ6WzIsMjFdfSxwYXJzZUVycm9yOmZ1bmN0aW9uKHQsZSl7aWYoIWUucmVjb3ZlcmFibGUpe3ZhciBuPW5ldyBFcnJvcih0KTt0aHJvdyBuLmhhc2g9ZSxufXRoaXMudHJhY2UodCl9LHBhcnNlOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMsbj1bMF0scj1bXSxpPVtudWxsXSxhPVtdLG89dGhpcy50YWJsZSxzPSIiLGM9MCx1PTAsbD0wLGg9MixmPTEsZD1hLnNsaWNlLmNhbGwoYXJndW1lbnRzLDEpLHA9T2JqZWN0LmNyZWF0ZSh0aGlzLmxleGVyKSxnPXt5eTp7fX07Zm9yKHZhciB5IGluIHRoaXMueXkpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMueXkseSkmJihnLnl5W3ldPXRoaXMueXlbeV0pO3Auc2V0SW5wdXQodCxnLnl5KSxnLnl5LmxleGVyPXAsZy55eS5wYXJzZXI9dGhpcyx2b2lkIDA9PT1wLnl5bGxvYyYmKHAueXlsbG9jPXt9KTt2YXIgdj1wLnl5bGxvYzthLnB1c2godik7dmFyIG09cC5vcHRpb25zJiZwLm9wdGlvbnMucmFuZ2VzO2Z1bmN0aW9uIGIoKXt2YXIgdDtyZXR1cm4ibnVtYmVyIiE9dHlwZW9mKHQ9ci5wb3AoKXx8cC5sZXgoKXx8ZikmJih0IGluc3RhbmNlb2YgQXJyYXkmJih0PShyPXQpLnBvcCgpKSx0PWUuc3ltYm9sc19bdF18fHQpLHR9ImZ1bmN0aW9uIj09dHlwZW9mIGcueXkucGFyc2VFcnJvcj90aGlzLnBhcnNlRXJyb3I9Zy55eS5wYXJzZUVycm9yOnRoaXMucGFyc2VFcnJvcj1PYmplY3QuZ2V0UHJvdG90eXBlT2YodGhpcykucGFyc2VFcnJvcjtmb3IodmFyIHgsXyxrLHcsRSxULEMsUyxBLE09e307Oyl7aWYoaz1uW24ubGVuZ3RoLTFdLHRoaXMuZGVmYXVsdEFjdGlvbnNba10/dz10aGlzLmRlZmF1bHRBY3Rpb25zW2tdOihudWxsPT14JiYoeD1iKCkpLHc9b1trXSYmb1trXVt4XSksdm9pZCAwPT09d3x8IXcubGVuZ3RofHwhd1swXSl7dmFyIE89IiI7Zm9yKFQgaW4gQT1bXSxvW2tdKXRoaXMudGVybWluYWxzX1tUXSYmVD5oJiZBLnB1c2goIiciK3RoaXMudGVybWluYWxzX1tUXSsiJyIpO089cC5zaG93UG9zaXRpb24/IlBhcnNlIGVycm9yIG9uIGxpbmUgIisoYysxKSsiOlxuIitwLnNob3dQb3NpdGlvbigpKyJcbkV4cGVjdGluZyAiK0Euam9pbigiLCAiKSsiLCBnb3QgJyIrKHRoaXMudGVybWluYWxzX1t4XXx8eCkrIiciOiJQYXJzZSBlcnJvciBvbiBsaW5lICIrKGMrMSkrIjogVW5leHBlY3RlZCAiKyh4PT1mPyJlbmQgb2YgaW5wdXQiOiInIisodGhpcy50ZXJtaW5hbHNfW3hdfHx4KSsiJyIpLHRoaXMucGFyc2VFcnJvcihPLHt0ZXh0OnAubWF0Y2gsdG9rZW46dGhpcy50ZXJtaW5hbHNfW3hdfHx4LGxpbmU6cC55eWxpbmVubyxsb2M6dixleHBlY3RlZDpBfSl9aWYod1swXWluc3RhbmNlb2YgQXJyYXkmJncubGVuZ3RoPjEpdGhyb3cgbmV3IEVycm9yKCJQYXJzZSBFcnJvcjogbXVsdGlwbGUgYWN0aW9ucyBwb3NzaWJsZSBhdCBzdGF0ZTogIitrKyIsIHRva2VuOiAiK3gpO3N3aXRjaCh3WzBdKXtjYXNlIDE6bi5wdXNoKHgpLGkucHVzaChwLnl5dGV4dCksYS5wdXNoKHAueXlsbG9jKSxuLnB1c2god1sxXSkseD1udWxsLF8/KHg9XyxfPW51bGwpOih1PXAueXlsZW5nLHM9cC55eXRleHQsYz1wLnl5bGluZW5vLHY9cC55eWxsb2MsbD4wJiZsLS0pO2JyZWFrO2Nhc2UgMjppZihDPXRoaXMucHJvZHVjdGlvbnNfW3dbMV1dWzFdLE0uJD1pW2kubGVuZ3RoLUNdLE0uXyQ9e2ZpcnN0X2xpbmU6YVthLmxlbmd0aC0oQ3x8MSldLmZpcnN0X2xpbmUsbGFzdF9saW5lOmFbYS5sZW5ndGgtMV0ubGFzdF9saW5lLGZpcnN0X2NvbHVtbjphW2EubGVuZ3RoLShDfHwxKV0uZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOmFbYS5sZW5ndGgtMV0ubGFzdF9jb2x1bW59LG0mJihNLl8kLnJhbmdlPVthW2EubGVuZ3RoLShDfHwxKV0ucmFuZ2VbMF0sYVthLmxlbmd0aC0xXS5yYW5nZVsxXV0pLHZvaWQgMCE9PShFPXRoaXMucGVyZm9ybUFjdGlvbi5hcHBseShNLFtzLHUsYyxnLnl5LHdbMV0saSxhXS5jb25jYXQoZCkpKSlyZXR1cm4gRTtDJiYobj1uLnNsaWNlKDAsLTEqQyoyKSxpPWkuc2xpY2UoMCwtMSpDKSxhPWEuc2xpY2UoMCwtMSpDKSksbi5wdXNoKHRoaXMucHJvZHVjdGlvbnNfW3dbMV1dWzBdKSxpLnB1c2goTS4kKSxhLnB1c2goTS5fJCksUz1vW25bbi5sZW5ndGgtMl1dW25bbi5sZW5ndGgtMV1dLG4ucHVzaChTKTticmVhaztjYXNlIDM6cmV0dXJuITB9fXJldHVybiEwfX0sYz17RU9GOjEscGFyc2VFcnJvcjpmdW5jdGlvbih0LGUpe2lmKCF0aGlzLnl5LnBhcnNlcil0aHJvdyBuZXcgRXJyb3IodCk7dGhpcy55eS5wYXJzZXIucGFyc2VFcnJvcih0LGUpfSxzZXRJbnB1dDpmdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLnl5PWV8fHRoaXMueXl8fHt9LHRoaXMuX2lucHV0PXQsdGhpcy5fbW9yZT10aGlzLl9iYWNrdHJhY2s9dGhpcy5kb25lPSExLHRoaXMueXlsaW5lbm89dGhpcy55eWxlbmc9MCx0aGlzLnl5dGV4dD10aGlzLm1hdGNoZWQ9dGhpcy5tYXRjaD0iIix0aGlzLmNvbmRpdGlvblN0YWNrPVsiSU5JVElBTCJdLHRoaXMueXlsbG9jPXtmaXJzdF9saW5lOjEsZmlyc3RfY29sdW1uOjAsbGFzdF9saW5lOjEsbGFzdF9jb2x1bW46MH0sdGhpcy5vcHRpb25zLnJhbmdlcyYmKHRoaXMueXlsbG9jLnJhbmdlPVswLDBdKSx0aGlzLm9mZnNldD0wLHRoaXN9LGlucHV0OmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5faW5wdXRbMF07cmV0dXJuIHRoaXMueXl0ZXh0Kz10LHRoaXMueXlsZW5nKyssdGhpcy5vZmZzZXQrKyx0aGlzLm1hdGNoKz10LHRoaXMubWF0Y2hlZCs9dCx0Lm1hdGNoKC8oPzpcclxuP3xcbikuKi9nKT8odGhpcy55eWxpbmVubysrLHRoaXMueXlsbG9jLmxhc3RfbGluZSsrKTp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbisrLHRoaXMub3B0aW9ucy5yYW5nZXMmJnRoaXMueXlsbG9jLnJhbmdlWzFdKyssdGhpcy5faW5wdXQ9dGhpcy5faW5wdXQuc2xpY2UoMSksdH0sdW5wdXQ6ZnVuY3Rpb24odCl7dmFyIGU9dC5sZW5ndGgsbj10LnNwbGl0KC8oPzpcclxuP3xcbikvZyk7dGhpcy5faW5wdXQ9dCt0aGlzLl9pbnB1dCx0aGlzLnl5dGV4dD10aGlzLnl5dGV4dC5zdWJzdHIoMCx0aGlzLnl5dGV4dC5sZW5ndGgtZSksdGhpcy5vZmZzZXQtPWU7dmFyIHI9dGhpcy5tYXRjaC5zcGxpdCgvKD86XHJcbj98XG4pL2cpO3RoaXMubWF0Y2g9dGhpcy5tYXRjaC5zdWJzdHIoMCx0aGlzLm1hdGNoLmxlbmd0aC0xKSx0aGlzLm1hdGNoZWQ9dGhpcy5tYXRjaGVkLnN1YnN0cigwLHRoaXMubWF0Y2hlZC5sZW5ndGgtMSksbi5sZW5ndGgtMSYmKHRoaXMueXlsaW5lbm8tPW4ubGVuZ3RoLTEpO3ZhciBpPXRoaXMueXlsbG9jLnJhbmdlO3JldHVybiB0aGlzLnl5bGxvYz17Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5maXJzdF9saW5lLGxhc3RfbGluZTp0aGlzLnl5bGluZW5vKzEsZmlyc3RfY29sdW1uOnRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbixsYXN0X2NvbHVtbjpuPyhuLmxlbmd0aD09PXIubGVuZ3RoP3RoaXMueXlsbG9jLmZpcnN0X2NvbHVtbjowKStyW3IubGVuZ3RoLW4ubGVuZ3RoXS5sZW5ndGgtblswXS5sZW5ndGg6dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLWV9LHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1baVswXSxpWzBdK3RoaXMueXlsZW5nLWVdKSx0aGlzLnl5bGVuZz10aGlzLnl5dGV4dC5sZW5ndGgsdGhpc30sbW9yZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9tb3JlPSEwLHRoaXN9LHJlamVjdDpmdW5jdGlvbigpe3JldHVybiB0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyPyh0aGlzLl9iYWNrdHJhY2s9ITAsdGhpcyk6dGhpcy5wYXJzZUVycm9yKCJMZXhpY2FsIGVycm9yIG9uIGxpbmUgIisodGhpcy55eWxpbmVubysxKSsiLiBZb3UgY2FuIG9ubHkgaW52b2tlIHJlamVjdCgpIGluIHRoZSBsZXhlciB3aGVuIHRoZSBsZXhlciBpcyBvZiB0aGUgYmFja3RyYWNraW5nIHBlcnN1YXNpb24gKG9wdGlvbnMuYmFja3RyYWNrX2xleGVyID0gdHJ1ZSkuXG4iK3RoaXMuc2hvd1Bvc2l0aW9uKCkse3RleHQ6IiIsdG9rZW46bnVsbCxsaW5lOnRoaXMueXlsaW5lbm99KX0sbGVzczpmdW5jdGlvbih0KXt0aGlzLnVucHV0KHRoaXMubWF0Y2guc2xpY2UodCkpfSxwYXN0SW5wdXQ6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLm1hdGNoZWQuc3Vic3RyKDAsdGhpcy5tYXRjaGVkLmxlbmd0aC10aGlzLm1hdGNoLmxlbmd0aCk7cmV0dXJuKHQubGVuZ3RoPjIwPyIuLi4iOiIiKSt0LnN1YnN0cigtMjApLnJlcGxhY2UoL1xuL2csIiIpfSx1cGNvbWluZ0lucHV0OmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5tYXRjaDtyZXR1cm4gdC5sZW5ndGg8MjAmJih0Kz10aGlzLl9pbnB1dC5zdWJzdHIoMCwyMC10Lmxlbmd0aCkpLCh0LnN1YnN0cigwLDIwKSsodC5sZW5ndGg+MjA/Ii4uLiI6IiIpKS5yZXBsYWNlKC9cbi9nLCIiKX0sc2hvd1Bvc2l0aW9uOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5wYXN0SW5wdXQoKSxlPW5ldyBBcnJheSh0Lmxlbmd0aCsxKS5qb2luKCItIik7cmV0dXJuIHQrdGhpcy51cGNvbWluZ0lucHV0KCkrIlxuIitlKyJeIn0sdGVzdF9tYXRjaDpmdW5jdGlvbih0LGUpe3ZhciBuLHIsaTtpZih0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyJiYoaT17eXlsaW5lbm86dGhpcy55eWxpbmVubyx5eWxsb2M6e2ZpcnN0X2xpbmU6dGhpcy55eWxsb2MuZmlyc3RfbGluZSxsYXN0X2xpbmU6dGhpcy5sYXN0X2xpbmUsZmlyc3RfY29sdW1uOnRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbixsYXN0X2NvbHVtbjp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbn0seXl0ZXh0OnRoaXMueXl0ZXh0LG1hdGNoOnRoaXMubWF0Y2gsbWF0Y2hlczp0aGlzLm1hdGNoZXMsbWF0Y2hlZDp0aGlzLm1hdGNoZWQseXlsZW5nOnRoaXMueXlsZW5nLG9mZnNldDp0aGlzLm9mZnNldCxfbW9yZTp0aGlzLl9tb3JlLF9pbnB1dDp0aGlzLl9pbnB1dCx5eTp0aGlzLnl5LGNvbmRpdGlvblN0YWNrOnRoaXMuY29uZGl0aW9uU3RhY2suc2xpY2UoMCksZG9uZTp0aGlzLmRvbmV9LHRoaXMub3B0aW9ucy5yYW5nZXMmJihpLnl5bGxvYy5yYW5nZT10aGlzLnl5bGxvYy5yYW5nZS5zbGljZSgwKSkpLChyPXRbMF0ubWF0Y2goLyg/OlxyXG4/fFxuKS4qL2cpKSYmKHRoaXMueXlsaW5lbm8rPXIubGVuZ3RoKSx0aGlzLnl5bGxvYz17Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5sYXN0X2xpbmUsbGFzdF9saW5lOnRoaXMueXlsaW5lbm8rMSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MubGFzdF9jb2x1bW4sbGFzdF9jb2x1bW46cj9yW3IubGVuZ3RoLTFdLmxlbmd0aC1yW3IubGVuZ3RoLTFdLm1hdGNoKC9ccj9cbj8vKVswXS5sZW5ndGg6dGhpcy55eWxsb2MubGFzdF9jb2x1bW4rdFswXS5sZW5ndGh9LHRoaXMueXl0ZXh0Kz10WzBdLHRoaXMubWF0Y2grPXRbMF0sdGhpcy5tYXRjaGVzPXQsdGhpcy55eWxlbmc9dGhpcy55eXRleHQubGVuZ3RoLHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1bdGhpcy5vZmZzZXQsdGhpcy5vZmZzZXQrPXRoaXMueXlsZW5nXSksdGhpcy5fbW9yZT0hMSx0aGlzLl9iYWNrdHJhY2s9ITEsdGhpcy5faW5wdXQ9dGhpcy5faW5wdXQuc2xpY2UodFswXS5sZW5ndGgpLHRoaXMubWF0Y2hlZCs9dFswXSxuPXRoaXMucGVyZm9ybUFjdGlvbi5jYWxsKHRoaXMsdGhpcy55eSx0aGlzLGUsdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXSksdGhpcy5kb25lJiZ0aGlzLl9pbnB1dCYmKHRoaXMuZG9uZT0hMSksbilyZXR1cm4gbjtpZih0aGlzLl9iYWNrdHJhY2spe2Zvcih2YXIgYSBpbiBpKXRoaXNbYV09aVthXTtyZXR1cm4hMX1yZXR1cm4hMX0sbmV4dDpmdW5jdGlvbigpe2lmKHRoaXMuZG9uZSlyZXR1cm4gdGhpcy5FT0Y7dmFyIHQsZSxuLHI7dGhpcy5faW5wdXR8fCh0aGlzLmRvbmU9ITApLHRoaXMuX21vcmV8fCh0aGlzLnl5dGV4dD0iIix0aGlzLm1hdGNoPSIiKTtmb3IodmFyIGk9dGhpcy5fY3VycmVudFJ1bGVzKCksYT0wO2E8aS5sZW5ndGg7YSsrKWlmKChuPXRoaXMuX2lucHV0Lm1hdGNoKHRoaXMucnVsZXNbaVthXV0pKSYmKCFlfHxuWzBdLmxlbmd0aD5lWzBdLmxlbmd0aCkpe2lmKGU9bixyPWEsdGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlcil7aWYoITEhPT0odD10aGlzLnRlc3RfbWF0Y2gobixpW2FdKSkpcmV0dXJuIHQ7aWYodGhpcy5fYmFja3RyYWNrKXtlPSExO2NvbnRpbnVlfXJldHVybiExfWlmKCF0aGlzLm9wdGlvbnMuZmxleClicmVha31yZXR1cm4gZT8hMSE9PSh0PXRoaXMudGVzdF9tYXRjaChlLGlbcl0pKSYmdDoiIj09PXRoaXMuX2lucHV0P3RoaXMuRU9GOnRoaXMucGFyc2VFcnJvcigiTGV4aWNhbCBlcnJvciBvbiBsaW5lICIrKHRoaXMueXlsaW5lbm8rMSkrIi4gVW5yZWNvZ25pemVkIHRleHQuXG4iK3RoaXMuc2hvd1Bvc2l0aW9uKCkse3RleHQ6IiIsdG9rZW46bnVsbCxsaW5lOnRoaXMueXlsaW5lbm99KX0sbGV4OmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5uZXh0KCk7cmV0dXJuIHR8fHRoaXMubGV4KCl9LGJlZ2luOmZ1bmN0aW9uKHQpe3RoaXMuY29uZGl0aW9uU3RhY2sucHVzaCh0KX0scG9wU3RhdGU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMT4wP3RoaXMuY29uZGl0aW9uU3RhY2sucG9wKCk6dGhpcy5jb25kaXRpb25TdGFja1swXX0sX2N1cnJlbnRSdWxlczpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aCYmdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXT90aGlzLmNvbmRpdGlvbnNbdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXV0ucnVsZXM6dGhpcy5jb25kaXRpb25zLklOSVRJQUwucnVsZXN9LHRvcFN0YXRlOmZ1bmN0aW9uKHQpe3JldHVybih0PXRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTEtTWF0aC5hYnModHx8MCkpPj0wP3RoaXMuY29uZGl0aW9uU3RhY2tbdF06IklOSVRJQUwifSxwdXNoU3RhdGU6ZnVuY3Rpb24odCl7dGhpcy5iZWdpbih0KX0sc3RhdGVTdGFja1NpemU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGh9LG9wdGlvbnM6eyJjYXNlLWluc2Vuc2l0aXZlIjohMH0scGVyZm9ybUFjdGlvbjpmdW5jdGlvbih0LGUsbixyKXtzd2l0Y2gobil7Y2FzZSAwOnJldHVybiAxMjtjYXNlIDE6Y2FzZSAyOmNhc2UgMzpicmVhaztjYXNlIDQ6cmV0dXJuIDQ7Y2FzZSA1OnJldHVybiAxNTtjYXNlIDY6cmV0dXJuIDE3O2Nhc2UgNzpyZXR1cm4gMjA7Y2FzZSA4OnJldHVybiAyMTtjYXNlIDk6cmV0dXJuIDE5O2Nhc2UgMTA6Y2FzZSAxMTpyZXR1cm4gODtjYXNlIDEyOnJldHVybiA1O2Nhc2UgMTM6cmV0dXJuIDI2O2Nhc2UgMTQ6dGhpcy5iZWdpbigib3B0aW9ucyIpO2JyZWFrO2Nhc2UgMTU6dGhpcy5wb3BTdGF0ZSgpO2JyZWFrO2Nhc2UgMTY6cmV0dXJuIDExO2Nhc2UgMTc6dGhpcy5iZWdpbigic3RyaW5nIik7YnJlYWs7Y2FzZSAxODp0aGlzLnBvcFN0YXRlKCk7YnJlYWs7Y2FzZSAxOTpyZXR1cm4gMjM7Y2FzZSAyMDpyZXR1cm4gMTg7Y2FzZSAyMTpyZXR1cm4gN319LHJ1bGVzOlsvXig/Oihccj9cbikrKS9pLC9eKD86XHMrKS9pLC9eKD86I1teXG5dKikvaSwvXig/OiVbXlxuXSopL2ksL14oPzpnaXRHcmFwaFxiKS9pLC9eKD86Y29tbWl0XGIpL2ksL14oPzpicmFuY2hcYikvaSwvXig/Om1lcmdlXGIpL2ksL14oPzpyZXNldFxiKS9pLC9eKD86Y2hlY2tvdXRcYikvaSwvXig/OkxSXGIpL2ksL14oPzpCVFxiKS9pLC9eKD86OikvaSwvXig/OlxeKS9pLC9eKD86b3B0aW9uc1xyP1xuKS9pLC9eKD86ZW5kXHI/XG4pL2ksL14oPzpbXlxuXStccj9cbikvaSwvXig/OlsiXSkvaSwvXig/OlsiXSkvaSwvXig/OlteIl0qKS9pLC9eKD86W2EtekEtWl1bLV9cLmEtekEtWjAtOV0qWy1fYS16QS1aMC05XSkvaSwvXig/OiQpL2ldLGNvbmRpdGlvbnM6e29wdGlvbnM6e3J1bGVzOlsxNSwxNl0saW5jbHVzaXZlOiExfSxzdHJpbmc6e3J1bGVzOlsxOCwxOV0saW5jbHVzaXZlOiExfSxJTklUSUFMOntydWxlczpbMCwxLDIsMyw0LDUsNiw3LDgsOSwxMCwxMSwxMiwxMywxNCwxNywyMCwyMV0saW5jbHVzaXZlOiEwfX19O2Z1bmN0aW9uIHUoKXt0aGlzLnl5PXt9fXJldHVybiBzLmxleGVyPWMsdS5wcm90b3R5cGU9cyxzLlBhcnNlcj11LG5ldyB1fSgpO2UucGFyc2VyPWksZS5QYXJzZXI9aS5QYXJzZXIsZS5wYXJzZT1mdW5jdGlvbigpe3JldHVybiBpLnBhcnNlLmFwcGx5KGksYXJndW1lbnRzKX0sZS5tYWluPWZ1bmN0aW9uKHIpe3JbMV18fChjb25zb2xlLmxvZygiVXNhZ2U6ICIrclswXSsiIEZJTEUiKSx0LmV4aXQoMSkpO3ZhciBpPW4oMTkpLnJlYWRGaWxlU3luYyhuKDIwKS5ub3JtYWxpemUoclsxXSksInV0ZjgiKTtyZXR1cm4gZS5wYXJzZXIucGFyc2UoaSl9LG4uY1tuLnNdPT09ciYmZS5tYWluKHQuYXJndi5zbGljZSgxKSl9KS5jYWxsKHRoaXMsbigxNCksbig3KSh0KSl9LGZ1bmN0aW9uKHQsZSxuKXsoZnVuY3Rpb24odCxyKXt2YXIgaT1mdW5jdGlvbigpe3ZhciB0PWZ1bmN0aW9uKHQsZSxuLHIpe2ZvcihuPW58fHt9LHI9dC5sZW5ndGg7ci0tO25bdFtyXV09ZSk7cmV0dXJuIG59LGU9WzYsOSwxMF0sbj17dHJhY2U6ZnVuY3Rpb24oKXt9LHl5Ont9LHN5bWJvbHNfOntlcnJvcjoyLHN0YXJ0OjMsaW5mbzo0LGRvY3VtZW50OjUsRU9GOjYsbGluZTo3LHN0YXRlbWVudDo4LE5MOjksc2hvd0luZm86MTAsJGFjY2VwdDowLCRlbmQ6MX0sdGVybWluYWxzXzp7MjoiZXJyb3IiLDQ6ImluZm8iLDY6IkVPRiIsOToiTkwiLDEwOiJzaG93SW5mbyJ9LHByb2R1Y3Rpb25zXzpbMCxbMywzXSxbNSwwXSxbNSwyXSxbNywxXSxbNywxXSxbOCwxXV0scGVyZm9ybUFjdGlvbjpmdW5jdGlvbih0LGUsbixyLGksYSxvKXthLmxlbmd0aDtzd2l0Y2goaSl7Y2FzZSAxOnJldHVybiByO2Nhc2UgNDpicmVhaztjYXNlIDY6ci5zZXRJbmZvKCEwKX19LHRhYmxlOlt7MzoxLDQ6WzEsMl19LHsxOlszXX0sdChlLFsyLDJdLHs1OjN9KSx7NjpbMSw0XSw3OjUsODo2LDk6WzEsN10sMTA6WzEsOF19LHsxOlsyLDFdfSx0KGUsWzIsM10pLHQoZSxbMiw0XSksdChlLFsyLDVdKSx0KGUsWzIsNl0pXSxkZWZhdWx0QWN0aW9uczp7NDpbMiwxXX0scGFyc2VFcnJvcjpmdW5jdGlvbih0LGUpe2lmKCFlLnJlY292ZXJhYmxlKXt2YXIgbj1uZXcgRXJyb3IodCk7dGhyb3cgbi5oYXNoPWUsbn10aGlzLnRyYWNlKHQpfSxwYXJzZTpmdW5jdGlvbih0KXt2YXIgZT10aGlzLG49WzBdLHI9W10saT1bbnVsbF0sYT1bXSxvPXRoaXMudGFibGUscz0iIixjPTAsdT0wLGw9MCxoPTIsZj0xLGQ9YS5zbGljZS5jYWxsKGFyZ3VtZW50cywxKSxwPU9iamVjdC5jcmVhdGUodGhpcy5sZXhlciksZz17eXk6e319O2Zvcih2YXIgeSBpbiB0aGlzLnl5KU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0aGlzLnl5LHkpJiYoZy55eVt5XT10aGlzLnl5W3ldKTtwLnNldElucHV0KHQsZy55eSksZy55eS5sZXhlcj1wLGcueXkucGFyc2VyPXRoaXMsdm9pZCAwPT09cC55eWxsb2MmJihwLnl5bGxvYz17fSk7dmFyIHY9cC55eWxsb2M7YS5wdXNoKHYpO3ZhciBtPXAub3B0aW9ucyYmcC5vcHRpb25zLnJhbmdlcztmdW5jdGlvbiBiKCl7dmFyIHQ7cmV0dXJuIm51bWJlciIhPXR5cGVvZih0PXIucG9wKCl8fHAubGV4KCl8fGYpJiYodCBpbnN0YW5jZW9mIEFycmF5JiYodD0ocj10KS5wb3AoKSksdD1lLnN5bWJvbHNfW3RdfHx0KSx0fSJmdW5jdGlvbiI9PXR5cGVvZiBnLnl5LnBhcnNlRXJyb3I/dGhpcy5wYXJzZUVycm9yPWcueXkucGFyc2VFcnJvcjp0aGlzLnBhcnNlRXJyb3I9T2JqZWN0LmdldFByb3RvdHlwZU9mKHRoaXMpLnBhcnNlRXJyb3I7Zm9yKHZhciB4LF8sayx3LEUsVCxDLFMsQSxNPXt9Ozspe2lmKGs9bltuLmxlbmd0aC0xXSx0aGlzLmRlZmF1bHRBY3Rpb25zW2tdP3c9dGhpcy5kZWZhdWx0QWN0aW9uc1trXToobnVsbD09eCYmKHg9YigpKSx3PW9ba10mJm9ba11beF0pLHZvaWQgMD09PXd8fCF3Lmxlbmd0aHx8IXdbMF0pe3ZhciBPPSIiO2ZvcihUIGluIEE9W10sb1trXSl0aGlzLnRlcm1pbmFsc19bVF0mJlQ+aCYmQS5wdXNoKCInIit0aGlzLnRlcm1pbmFsc19bVF0rIiciKTtPPXAuc2hvd1Bvc2l0aW9uPyJQYXJzZSBlcnJvciBvbiBsaW5lICIrKGMrMSkrIjpcbiIrcC5zaG93UG9zaXRpb24oKSsiXG5FeHBlY3RpbmcgIitBLmpvaW4oIiwgIikrIiwgZ290ICciKyh0aGlzLnRlcm1pbmFsc19beF18fHgpKyInIjoiUGFyc2UgZXJyb3Igb24gbGluZSAiKyhjKzEpKyI6IFVuZXhwZWN0ZWQgIisoeD09Zj8iZW5kIG9mIGlucHV0IjoiJyIrKHRoaXMudGVybWluYWxzX1t4XXx8eCkrIiciKSx0aGlzLnBhcnNlRXJyb3IoTyx7dGV4dDpwLm1hdGNoLHRva2VuOnRoaXMudGVybWluYWxzX1t4XXx8eCxsaW5lOnAueXlsaW5lbm8sbG9jOnYsZXhwZWN0ZWQ6QX0pfWlmKHdbMF1pbnN0YW5jZW9mIEFycmF5JiZ3Lmxlbmd0aD4xKXRocm93IG5ldyBFcnJvcigiUGFyc2UgRXJyb3I6IG11bHRpcGxlIGFjdGlvbnMgcG9zc2libGUgYXQgc3RhdGU6ICIraysiLCB0b2tlbjogIit4KTtzd2l0Y2god1swXSl7Y2FzZSAxOm4ucHVzaCh4KSxpLnB1c2gocC55eXRleHQpLGEucHVzaChwLnl5bGxvYyksbi5wdXNoKHdbMV0pLHg9bnVsbCxfPyh4PV8sXz1udWxsKToodT1wLnl5bGVuZyxzPXAueXl0ZXh0LGM9cC55eWxpbmVubyx2PXAueXlsbG9jLGw+MCYmbC0tKTticmVhaztjYXNlIDI6aWYoQz10aGlzLnByb2R1Y3Rpb25zX1t3WzFdXVsxXSxNLiQ9aVtpLmxlbmd0aC1DXSxNLl8kPXtmaXJzdF9saW5lOmFbYS5sZW5ndGgtKEN8fDEpXS5maXJzdF9saW5lLGxhc3RfbGluZTphW2EubGVuZ3RoLTFdLmxhc3RfbGluZSxmaXJzdF9jb2x1bW46YVthLmxlbmd0aC0oQ3x8MSldLmZpcnN0X2NvbHVtbixsYXN0X2NvbHVtbjphW2EubGVuZ3RoLTFdLmxhc3RfY29sdW1ufSxtJiYoTS5fJC5yYW5nZT1bYVthLmxlbmd0aC0oQ3x8MSldLnJhbmdlWzBdLGFbYS5sZW5ndGgtMV0ucmFuZ2VbMV1dKSx2b2lkIDAhPT0oRT10aGlzLnBlcmZvcm1BY3Rpb24uYXBwbHkoTSxbcyx1LGMsZy55eSx3WzFdLGksYV0uY29uY2F0KGQpKSkpcmV0dXJuIEU7QyYmKG49bi5zbGljZSgwLC0xKkMqMiksaT1pLnNsaWNlKDAsLTEqQyksYT1hLnNsaWNlKDAsLTEqQykpLG4ucHVzaCh0aGlzLnByb2R1Y3Rpb25zX1t3WzFdXVswXSksaS5wdXNoKE0uJCksYS5wdXNoKE0uXyQpLFM9b1tuW24ubGVuZ3RoLTJdXVtuW24ubGVuZ3RoLTFdXSxuLnB1c2goUyk7YnJlYWs7Y2FzZSAzOnJldHVybiEwfX1yZXR1cm4hMH19LHI9e0VPRjoxLHBhcnNlRXJyb3I6ZnVuY3Rpb24odCxlKXtpZighdGhpcy55eS5wYXJzZXIpdGhyb3cgbmV3IEVycm9yKHQpO3RoaXMueXkucGFyc2VyLnBhcnNlRXJyb3IodCxlKX0sc2V0SW5wdXQ6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy55eT1lfHx0aGlzLnl5fHx7fSx0aGlzLl9pbnB1dD10LHRoaXMuX21vcmU9dGhpcy5fYmFja3RyYWNrPXRoaXMuZG9uZT0hMSx0aGlzLnl5bGluZW5vPXRoaXMueXlsZW5nPTAsdGhpcy55eXRleHQ9dGhpcy5tYXRjaGVkPXRoaXMubWF0Y2g9IiIsdGhpcy5jb25kaXRpb25TdGFjaz1bIklOSVRJQUwiXSx0aGlzLnl5bGxvYz17Zmlyc3RfbGluZToxLGZpcnN0X2NvbHVtbjowLGxhc3RfbGluZToxLGxhc3RfY29sdW1uOjB9LHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1bMCwwXSksdGhpcy5vZmZzZXQ9MCx0aGlzfSxpbnB1dDpmdW5jdGlvbigpe3ZhciB0PXRoaXMuX2lucHV0WzBdO3JldHVybiB0aGlzLnl5dGV4dCs9dCx0aGlzLnl5bGVuZysrLHRoaXMub2Zmc2V0KyssdGhpcy5tYXRjaCs9dCx0aGlzLm1hdGNoZWQrPXQsdC5tYXRjaCgvKD86XHJcbj98XG4pLiovZyk/KHRoaXMueXlsaW5lbm8rKyx0aGlzLnl5bGxvYy5sYXN0X2xpbmUrKyk6dGhpcy55eWxsb2MubGFzdF9jb2x1bW4rKyx0aGlzLm9wdGlvbnMucmFuZ2VzJiZ0aGlzLnl5bGxvYy5yYW5nZVsxXSsrLHRoaXMuX2lucHV0PXRoaXMuX2lucHV0LnNsaWNlKDEpLHR9LHVucHV0OmZ1bmN0aW9uKHQpe3ZhciBlPXQubGVuZ3RoLG49dC5zcGxpdCgvKD86XHJcbj98XG4pL2cpO3RoaXMuX2lucHV0PXQrdGhpcy5faW5wdXQsdGhpcy55eXRleHQ9dGhpcy55eXRleHQuc3Vic3RyKDAsdGhpcy55eXRleHQubGVuZ3RoLWUpLHRoaXMub2Zmc2V0LT1lO3ZhciByPXRoaXMubWF0Y2guc3BsaXQoLyg/OlxyXG4/fFxuKS9nKTt0aGlzLm1hdGNoPXRoaXMubWF0Y2guc3Vic3RyKDAsdGhpcy5tYXRjaC5sZW5ndGgtMSksdGhpcy5tYXRjaGVkPXRoaXMubWF0Y2hlZC5zdWJzdHIoMCx0aGlzLm1hdGNoZWQubGVuZ3RoLTEpLG4ubGVuZ3RoLTEmJih0aGlzLnl5bGluZW5vLT1uLmxlbmd0aC0xKTt2YXIgaT10aGlzLnl5bGxvYy5yYW5nZTtyZXR1cm4gdGhpcy55eWxsb2M9e2ZpcnN0X2xpbmU6dGhpcy55eWxsb2MuZmlyc3RfbGluZSxsYXN0X2xpbmU6dGhpcy55eWxpbmVubysxLGZpcnN0X2NvbHVtbjp0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4sbGFzdF9jb2x1bW46bj8obi5sZW5ndGg9PT1yLmxlbmd0aD90aGlzLnl5bGxvYy5maXJzdF9jb2x1bW46MCkrcltyLmxlbmd0aC1uLmxlbmd0aF0ubGVuZ3RoLW5bMF0ubGVuZ3RoOnRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbi1lfSx0aGlzLm9wdGlvbnMucmFuZ2VzJiYodGhpcy55eWxsb2MucmFuZ2U9W2lbMF0saVswXSt0aGlzLnl5bGVuZy1lXSksdGhpcy55eWxlbmc9dGhpcy55eXRleHQubGVuZ3RoLHRoaXN9LG1vcmU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbW9yZT0hMCx0aGlzfSxyZWplY3Q6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlcj8odGhpcy5fYmFja3RyYWNrPSEwLHRoaXMpOnRoaXMucGFyc2VFcnJvcigiTGV4aWNhbCBlcnJvciBvbiBsaW5lICIrKHRoaXMueXlsaW5lbm8rMSkrIi4gWW91IGNhbiBvbmx5IGludm9rZSByZWplY3QoKSBpbiB0aGUgbGV4ZXIgd2hlbiB0aGUgbGV4ZXIgaXMgb2YgdGhlIGJhY2t0cmFja2luZyBwZXJzdWFzaW9uIChvcHRpb25zLmJhY2t0cmFja19sZXhlciA9IHRydWUpLlxuIit0aGlzLnNob3dQb3NpdGlvbigpLHt0ZXh0OiIiLHRva2VuOm51bGwsbGluZTp0aGlzLnl5bGluZW5vfSl9LGxlc3M6ZnVuY3Rpb24odCl7dGhpcy51bnB1dCh0aGlzLm1hdGNoLnNsaWNlKHQpKX0scGFzdElucHV0OmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5tYXRjaGVkLnN1YnN0cigwLHRoaXMubWF0Y2hlZC5sZW5ndGgtdGhpcy5tYXRjaC5sZW5ndGgpO3JldHVybih0Lmxlbmd0aD4yMD8iLi4uIjoiIikrdC5zdWJzdHIoLTIwKS5yZXBsYWNlKC9cbi9nLCIiKX0sdXBjb21pbmdJbnB1dDpmdW5jdGlvbigpe3ZhciB0PXRoaXMubWF0Y2g7cmV0dXJuIHQubGVuZ3RoPDIwJiYodCs9dGhpcy5faW5wdXQuc3Vic3RyKDAsMjAtdC5sZW5ndGgpKSwodC5zdWJzdHIoMCwyMCkrKHQubGVuZ3RoPjIwPyIuLi4iOiIiKSkucmVwbGFjZSgvXG4vZywiIil9LHNob3dQb3NpdGlvbjpmdW5jdGlvbigpe3ZhciB0PXRoaXMucGFzdElucHV0KCksZT1uZXcgQXJyYXkodC5sZW5ndGgrMSkuam9pbigiLSIpO3JldHVybiB0K3RoaXMudXBjb21pbmdJbnB1dCgpKyJcbiIrZSsiXiJ9LHRlc3RfbWF0Y2g6ZnVuY3Rpb24odCxlKXt2YXIgbixyLGk7aWYodGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlciYmKGk9e3l5bGluZW5vOnRoaXMueXlsaW5lbm8seXlsbG9jOntmaXJzdF9saW5lOnRoaXMueXlsbG9jLmZpcnN0X2xpbmUsbGFzdF9saW5lOnRoaXMubGFzdF9saW5lLGZpcnN0X2NvbHVtbjp0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4sbGFzdF9jb2x1bW46dGhpcy55eWxsb2MubGFzdF9jb2x1bW59LHl5dGV4dDp0aGlzLnl5dGV4dCxtYXRjaDp0aGlzLm1hdGNoLG1hdGNoZXM6dGhpcy5tYXRjaGVzLG1hdGNoZWQ6dGhpcy5tYXRjaGVkLHl5bGVuZzp0aGlzLnl5bGVuZyxvZmZzZXQ6dGhpcy5vZmZzZXQsX21vcmU6dGhpcy5fbW9yZSxfaW5wdXQ6dGhpcy5faW5wdXQseXk6dGhpcy55eSxjb25kaXRpb25TdGFjazp0aGlzLmNvbmRpdGlvblN0YWNrLnNsaWNlKDApLGRvbmU6dGhpcy5kb25lfSx0aGlzLm9wdGlvbnMucmFuZ2VzJiYoaS55eWxsb2MucmFuZ2U9dGhpcy55eWxsb2MucmFuZ2Uuc2xpY2UoMCkpKSwocj10WzBdLm1hdGNoKC8oPzpcclxuP3xcbikuKi9nKSkmJih0aGlzLnl5bGluZW5vKz1yLmxlbmd0aCksdGhpcy55eWxsb2M9e2ZpcnN0X2xpbmU6dGhpcy55eWxsb2MubGFzdF9saW5lLGxhc3RfbGluZTp0aGlzLnl5bGluZW5vKzEsZmlyc3RfY29sdW1uOnRoaXMueXlsbG9jLmxhc3RfY29sdW1uLGxhc3RfY29sdW1uOnI/cltyLmxlbmd0aC0xXS5sZW5ndGgtcltyLmxlbmd0aC0xXS5tYXRjaCgvXHI/XG4/LylbMF0ubGVuZ3RoOnRoaXMueXlsbG9jLmxhc3RfY29sdW1uK3RbMF0ubGVuZ3RofSx0aGlzLnl5dGV4dCs9dFswXSx0aGlzLm1hdGNoKz10WzBdLHRoaXMubWF0Y2hlcz10LHRoaXMueXlsZW5nPXRoaXMueXl0ZXh0Lmxlbmd0aCx0aGlzLm9wdGlvbnMucmFuZ2VzJiYodGhpcy55eWxsb2MucmFuZ2U9W3RoaXMub2Zmc2V0LHRoaXMub2Zmc2V0Kz10aGlzLnl5bGVuZ10pLHRoaXMuX21vcmU9ITEsdGhpcy5fYmFja3RyYWNrPSExLHRoaXMuX2lucHV0PXRoaXMuX2lucHV0LnNsaWNlKHRbMF0ubGVuZ3RoKSx0aGlzLm1hdGNoZWQrPXRbMF0sbj10aGlzLnBlcmZvcm1BY3Rpb24uY2FsbCh0aGlzLHRoaXMueXksdGhpcyxlLHRoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMV0pLHRoaXMuZG9uZSYmdGhpcy5faW5wdXQmJih0aGlzLmRvbmU9ITEpLG4pcmV0dXJuIG47aWYodGhpcy5fYmFja3RyYWNrKXtmb3IodmFyIGEgaW4gaSl0aGlzW2FdPWlbYV07cmV0dXJuITF9cmV0dXJuITF9LG5leHQ6ZnVuY3Rpb24oKXtpZih0aGlzLmRvbmUpcmV0dXJuIHRoaXMuRU9GO3ZhciB0LGUsbixyO3RoaXMuX2lucHV0fHwodGhpcy5kb25lPSEwKSx0aGlzLl9tb3JlfHwodGhpcy55eXRleHQ9IiIsdGhpcy5tYXRjaD0iIik7Zm9yKHZhciBpPXRoaXMuX2N1cnJlbnRSdWxlcygpLGE9MDthPGkubGVuZ3RoO2ErKylpZigobj10aGlzLl9pbnB1dC5tYXRjaCh0aGlzLnJ1bGVzW2lbYV1dKSkmJighZXx8blswXS5sZW5ndGg+ZVswXS5sZW5ndGgpKXtpZihlPW4scj1hLHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIpe2lmKCExIT09KHQ9dGhpcy50ZXN0X21hdGNoKG4saVthXSkpKXJldHVybiB0O2lmKHRoaXMuX2JhY2t0cmFjayl7ZT0hMTtjb250aW51ZX1yZXR1cm4hMX1pZighdGhpcy5vcHRpb25zLmZsZXgpYnJlYWt9cmV0dXJuIGU/ITEhPT0odD10aGlzLnRlc3RfbWF0Y2goZSxpW3JdKSkmJnQ6IiI9PT10aGlzLl9pbnB1dD90aGlzLkVPRjp0aGlzLnBhcnNlRXJyb3IoIkxleGljYWwgZXJyb3Igb24gbGluZSAiKyh0aGlzLnl5bGluZW5vKzEpKyIuIFVucmVjb2duaXplZCB0ZXh0LlxuIit0aGlzLnNob3dQb3NpdGlvbigpLHt0ZXh0OiIiLHRva2VuOm51bGwsbGluZTp0aGlzLnl5bGluZW5vfSl9LGxleDpmdW5jdGlvbigpe3ZhciB0PXRoaXMubmV4dCgpO3JldHVybiB0fHx0aGlzLmxleCgpfSxiZWdpbjpmdW5jdGlvbih0KXt0aGlzLmNvbmRpdGlvblN0YWNrLnB1c2godCl9LHBvcFN0YXRlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTE+MD90aGlzLmNvbmRpdGlvblN0YWNrLnBvcCgpOnRoaXMuY29uZGl0aW9uU3RhY2tbMF19LF9jdXJyZW50UnVsZXM6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgmJnRoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMV0/dGhpcy5jb25kaXRpb25zW3RoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMV1dLnJ1bGVzOnRoaXMuY29uZGl0aW9ucy5JTklUSUFMLnJ1bGVzfSx0b3BTdGF0ZTpmdW5jdGlvbih0KXtyZXR1cm4odD10aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xLU1hdGguYWJzKHR8fDApKT49MD90aGlzLmNvbmRpdGlvblN0YWNrW3RdOiJJTklUSUFMIn0scHVzaFN0YXRlOmZ1bmN0aW9uKHQpe3RoaXMuYmVnaW4odCl9LHN0YXRlU3RhY2tTaXplOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RofSxvcHRpb25zOnsiY2FzZS1pbnNlbnNpdGl2ZSI6ITB9LHBlcmZvcm1BY3Rpb246ZnVuY3Rpb24odCxlLG4scil7c3dpdGNoKG4pe2Nhc2UgMDpyZXR1cm4gNDtjYXNlIDE6cmV0dXJuIDk7Y2FzZSAyOnJldHVybiJzcGFjZSI7Y2FzZSAzOnJldHVybiAxMDtjYXNlIDQ6cmV0dXJuIDY7Y2FzZSA1OnJldHVybiJUWFQifX0scnVsZXM6Wy9eKD86aW5mb1xiKS9pLC9eKD86W1xzXG5ccl0rKS9pLC9eKD86W1xzXSspL2ksL14oPzpzaG93SW5mb1xiKS9pLC9eKD86JCkvaSwvXig/Oi4pL2ldLGNvbmRpdGlvbnM6e0lOSVRJQUw6e3J1bGVzOlswLDEsMiwzLDQsNV0saW5jbHVzaXZlOiEwfX19O2Z1bmN0aW9uIGkoKXt0aGlzLnl5PXt9fXJldHVybiBuLmxleGVyPXIsaS5wcm90b3R5cGU9bixuLlBhcnNlcj1pLG5ldyBpfSgpO2UucGFyc2VyPWksZS5QYXJzZXI9aS5QYXJzZXIsZS5wYXJzZT1mdW5jdGlvbigpe3JldHVybiBpLnBhcnNlLmFwcGx5KGksYXJndW1lbnRzKX0sZS5tYWluPWZ1bmN0aW9uKHIpe3JbMV18fChjb25zb2xlLmxvZygiVXNhZ2U6ICIrclswXSsiIEZJTEUiKSx0LmV4aXQoMSkpO3ZhciBpPW4oMTkpLnJlYWRGaWxlU3luYyhuKDIwKS5ub3JtYWxpemUoclsxXSksInV0ZjgiKTtyZXR1cm4gZS5wYXJzZXIucGFyc2UoaSl9LG4uY1tuLnNdPT09ciYmZS5tYWluKHQuYXJndi5zbGljZSgxKSl9KS5jYWxsKHRoaXMsbigxNCksbig3KSh0KSl9LGZ1bmN0aW9uKHQsZSxuKXsoZnVuY3Rpb24odCxyKXt2YXIgaT1mdW5jdGlvbigpe3ZhciB0PWZ1bmN0aW9uKHQsZSxuLHIpe2ZvcihuPW58fHt9LHI9dC5sZW5ndGg7ci0tO25bdFtyXV09ZSk7cmV0dXJuIG59LGU9WzEsNF0sbj1bMSw1XSxyPVsxLDZdLGk9WzEsN10sYT1bMSw5XSxvPVsxLDEwLDEyLDE5LDIwLDIxLDIyXSxzPVsxLDYsMTAsMTIsMTksMjAsMjEsMjJdLGM9WzE5LDIwLDIxXSx1PVsxLDIyXSxsPVs2LDE5LDIwLDIxLDIyXSxoPXt0cmFjZTpmdW5jdGlvbigpe30seXk6e30sc3ltYm9sc186e2Vycm9yOjIsc3RhcnQ6Myxlb2w6NCxkaXJlY3RpdmU6NSxQSUU6Nixkb2N1bWVudDo3LGxpbmU6OCxzdGF0ZW1lbnQ6OSx0eHQ6MTAsdmFsdWU6MTEsdGl0bGU6MTIsdGl0bGVfdmFsdWU6MTMsb3BlbkRpcmVjdGl2ZToxNCx0eXBlRGlyZWN0aXZlOjE1LGNsb3NlRGlyZWN0aXZlOjE2LCI6IjoxNyxhcmdEaXJlY3RpdmU6MTgsTkVXTElORToxOSwiOyI6MjAsRU9GOjIxLG9wZW5fZGlyZWN0aXZlOjIyLHR5cGVfZGlyZWN0aXZlOjIzLGFyZ19kaXJlY3RpdmU6MjQsY2xvc2VfZGlyZWN0aXZlOjI1LCRhY2NlcHQ6MCwkZW5kOjF9LHRlcm1pbmFsc186ezI6ImVycm9yIiw2OiJQSUUiLDEwOiJ0eHQiLDExOiJ2YWx1ZSIsMTI6InRpdGxlIiwxMzoidGl0bGVfdmFsdWUiLDE3OiI6IiwxOToiTkVXTElORSIsMjA6IjsiLDIxOiJFT0YiLDIyOiJvcGVuX2RpcmVjdGl2ZSIsMjM6InR5cGVfZGlyZWN0aXZlIiwyNDoiYXJnX2RpcmVjdGl2ZSIsMjU6ImNsb3NlX2RpcmVjdGl2ZSJ9LHByb2R1Y3Rpb25zXzpbMCxbMywyXSxbMywyXSxbMywyXSxbNywwXSxbNywyXSxbOCwyXSxbOSwwXSxbOSwyXSxbOSwyXSxbOSwxXSxbNSwzXSxbNSw1XSxbNCwxXSxbNCwxXSxbNCwxXSxbMTQsMV0sWzE1LDFdLFsxOCwxXSxbMTYsMV1dLHBlcmZvcm1BY3Rpb246ZnVuY3Rpb24odCxlLG4scixpLGEsbyl7dmFyIHM9YS5sZW5ndGgtMTtzd2l0Y2goaSl7Y2FzZSA2OnRoaXMuJD1hW3MtMV07YnJlYWs7Y2FzZSA4OnIuYWRkU2VjdGlvbihhW3MtMV0sci5jbGVhbnVwVmFsdWUoYVtzXSkpO2JyZWFrO2Nhc2UgOTp0aGlzLiQ9YVtzXS50cmltKCksci5zZXRUaXRsZSh0aGlzLiQpO2JyZWFrO2Nhc2UgMTY6ci5wYXJzZURpcmVjdGl2ZSgiJSV7Iiwib3Blbl9kaXJlY3RpdmUiKTticmVhaztjYXNlIDE3OnIucGFyc2VEaXJlY3RpdmUoYVtzXSwidHlwZV9kaXJlY3RpdmUiKTticmVhaztjYXNlIDE4OmFbc109YVtzXS50cmltKCkucmVwbGFjZSgvJy9nLCciJyksci5wYXJzZURpcmVjdGl2ZShhW3NdLCJhcmdfZGlyZWN0aXZlIik7YnJlYWs7Y2FzZSAxOTpyLnBhcnNlRGlyZWN0aXZlKCJ9JSUiLCJjbG9zZV9kaXJlY3RpdmUiLCJwaWUiKX19LHRhYmxlOlt7MzoxLDQ6Miw1OjMsNjplLDE0OjgsMTk6biwyMDpyLDIxOmksMjI6YX0sezE6WzNdfSx7MzoxMCw0OjIsNTozLDY6ZSwxNDo4LDE5Om4sMjA6ciwyMTppLDIyOmF9LHszOjExLDQ6Miw1OjMsNjplLDE0OjgsMTk6biwyMDpyLDIxOmksMjI6YX0sdChvLFsyLDRdLHs3OjEyfSksdChzLFsyLDEzXSksdChzLFsyLDE0XSksdChzLFsyLDE1XSksezE1OjEzLDIzOlsxLDE0XX0sezIzOlsyLDE2XX0sezE6WzIsMV19LHsxOlsyLDJdfSx0KGMsWzIsN10sezE0OjgsODoxNSw5OjE2LDU6MTksMTpbMiwzXSwxMDpbMSwxN10sMTI6WzEsMThdLDIyOmF9KSx7MTY6MjAsMTc6WzEsMjFdLDI1OnV9LHQoWzE3LDI1XSxbMiwxN10pLHQobyxbMiw1XSksezQ6MjMsMTk6biwyMDpyLDIxOml9LHsxMTpbMSwyNF19LHsxMzpbMSwyNV19LHQoYyxbMiwxMF0pLHQobCxbMiwxMV0pLHsxODoyNiwyNDpbMSwyN119LHQobCxbMiwxOV0pLHQobyxbMiw2XSksdChjLFsyLDhdKSx0KGMsWzIsOV0pLHsxNjoyOCwyNTp1fSx7MjU6WzIsMThdfSx0KGwsWzIsMTJdKV0sZGVmYXVsdEFjdGlvbnM6ezk6WzIsMTZdLDEwOlsyLDFdLDExOlsyLDJdLDI3OlsyLDE4XX0scGFyc2VFcnJvcjpmdW5jdGlvbih0LGUpe2lmKCFlLnJlY292ZXJhYmxlKXt2YXIgbj1uZXcgRXJyb3IodCk7dGhyb3cgbi5oYXNoPWUsbn10aGlzLnRyYWNlKHQpfSxwYXJzZTpmdW5jdGlvbih0KXt2YXIgZT10aGlzLG49WzBdLHI9W10saT1bbnVsbF0sYT1bXSxvPXRoaXMudGFibGUscz0iIixjPTAsdT0wLGw9MCxoPTIsZj0xLGQ9YS5zbGljZS5jYWxsKGFyZ3VtZW50cywxKSxwPU9iamVjdC5jcmVhdGUodGhpcy5sZXhlciksZz17eXk6e319O2Zvcih2YXIgeSBpbiB0aGlzLnl5KU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0aGlzLnl5LHkpJiYoZy55eVt5XT10aGlzLnl5W3ldKTtwLnNldElucHV0KHQsZy55eSksZy55eS5sZXhlcj1wLGcueXkucGFyc2VyPXRoaXMsdm9pZCAwPT09cC55eWxsb2MmJihwLnl5bGxvYz17fSk7dmFyIHY9cC55eWxsb2M7YS5wdXNoKHYpO3ZhciBtPXAub3B0aW9ucyYmcC5vcHRpb25zLnJhbmdlcztmdW5jdGlvbiBiKCl7dmFyIHQ7cmV0dXJuIm51bWJlciIhPXR5cGVvZih0PXIucG9wKCl8fHAubGV4KCl8fGYpJiYodCBpbnN0YW5jZW9mIEFycmF5JiYodD0ocj10KS5wb3AoKSksdD1lLnN5bWJvbHNfW3RdfHx0KSx0fSJmdW5jdGlvbiI9PXR5cGVvZiBnLnl5LnBhcnNlRXJyb3I/dGhpcy5wYXJzZUVycm9yPWcueXkucGFyc2VFcnJvcjp0aGlzLnBhcnNlRXJyb3I9T2JqZWN0LmdldFByb3RvdHlwZU9mKHRoaXMpLnBhcnNlRXJyb3I7Zm9yKHZhciB4LF8sayx3LEUsVCxDLFMsQSxNPXt9Ozspe2lmKGs9bltuLmxlbmd0aC0xXSx0aGlzLmRlZmF1bHRBY3Rpb25zW2tdP3c9dGhpcy5kZWZhdWx0QWN0aW9uc1trXToobnVsbD09eCYmKHg9YigpKSx3PW9ba10mJm9ba11beF0pLHZvaWQgMD09PXd8fCF3Lmxlbmd0aHx8IXdbMF0pe3ZhciBPPSIiO2ZvcihUIGluIEE9W10sb1trXSl0aGlzLnRlcm1pbmFsc19bVF0mJlQ+aCYmQS5wdXNoKCInIit0aGlzLnRlcm1pbmFsc19bVF0rIiciKTtPPXAuc2hvd1Bvc2l0aW9uPyJQYXJzZSBlcnJvciBvbiBsaW5lICIrKGMrMSkrIjpcbiIrcC5zaG93UG9zaXRpb24oKSsiXG5FeHBlY3RpbmcgIitBLmpvaW4oIiwgIikrIiwgZ290ICciKyh0aGlzLnRlcm1pbmFsc19beF18fHgpKyInIjoiUGFyc2UgZXJyb3Igb24gbGluZSAiKyhjKzEpKyI6IFVuZXhwZWN0ZWQgIisoeD09Zj8iZW5kIG9mIGlucHV0IjoiJyIrKHRoaXMudGVybWluYWxzX1t4XXx8eCkrIiciKSx0aGlzLnBhcnNlRXJyb3IoTyx7dGV4dDpwLm1hdGNoLHRva2VuOnRoaXMudGVybWluYWxzX1t4XXx8eCxsaW5lOnAueXlsaW5lbm8sbG9jOnYsZXhwZWN0ZWQ6QX0pfWlmKHdbMF1pbnN0YW5jZW9mIEFycmF5JiZ3Lmxlbmd0aD4xKXRocm93IG5ldyBFcnJvcigiUGFyc2UgRXJyb3I6IG11bHRpcGxlIGFjdGlvbnMgcG9zc2libGUgYXQgc3RhdGU6ICIraysiLCB0b2tlbjogIit4KTtzd2l0Y2god1swXSl7Y2FzZSAxOm4ucHVzaCh4KSxpLnB1c2gocC55eXRleHQpLGEucHVzaChwLnl5bGxvYyksbi5wdXNoKHdbMV0pLHg9bnVsbCxfPyh4PV8sXz1udWxsKToodT1wLnl5bGVuZyxzPXAueXl0ZXh0LGM9cC55eWxpbmVubyx2PXAueXlsbG9jLGw+MCYmbC0tKTticmVhaztjYXNlIDI6aWYoQz10aGlzLnByb2R1Y3Rpb25zX1t3WzFdXVsxXSxNLiQ9aVtpLmxlbmd0aC1DXSxNLl8kPXtmaXJzdF9saW5lOmFbYS5sZW5ndGgtKEN8fDEpXS5maXJzdF9saW5lLGxhc3RfbGluZTphW2EubGVuZ3RoLTFdLmxhc3RfbGluZSxmaXJzdF9jb2x1bW46YVthLmxlbmd0aC0oQ3x8MSldLmZpcnN0X2NvbHVtbixsYXN0X2NvbHVtbjphW2EubGVuZ3RoLTFdLmxhc3RfY29sdW1ufSxtJiYoTS5fJC5yYW5nZT1bYVthLmxlbmd0aC0oQ3x8MSldLnJhbmdlWzBdLGFbYS5sZW5ndGgtMV0ucmFuZ2VbMV1dKSx2b2lkIDAhPT0oRT10aGlzLnBlcmZvcm1BY3Rpb24uYXBwbHkoTSxbcyx1LGMsZy55eSx3WzFdLGksYV0uY29uY2F0KGQpKSkpcmV0dXJuIEU7QyYmKG49bi5zbGljZSgwLC0xKkMqMiksaT1pLnNsaWNlKDAsLTEqQyksYT1hLnNsaWNlKDAsLTEqQykpLG4ucHVzaCh0aGlzLnByb2R1Y3Rpb25zX1t3WzFdXVswXSksaS5wdXNoKE0uJCksYS5wdXNoKE0uXyQpLFM9b1tuW24ubGVuZ3RoLTJdXVtuW24ubGVuZ3RoLTFdXSxuLnB1c2goUyk7YnJlYWs7Y2FzZSAzOnJldHVybiEwfX1yZXR1cm4hMH19LGY9e0VPRjoxLHBhcnNlRXJyb3I6ZnVuY3Rpb24odCxlKXtpZighdGhpcy55eS5wYXJzZXIpdGhyb3cgbmV3IEVycm9yKHQpO3RoaXMueXkucGFyc2VyLnBhcnNlRXJyb3IodCxlKX0sc2V0SW5wdXQ6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy55eT1lfHx0aGlzLnl5fHx7fSx0aGlzLl9pbnB1dD10LHRoaXMuX21vcmU9dGhpcy5fYmFja3RyYWNrPXRoaXMuZG9uZT0hMSx0aGlzLnl5bGluZW5vPXRoaXMueXlsZW5nPTAsdGhpcy55eXRleHQ9dGhpcy5tYXRjaGVkPXRoaXMubWF0Y2g9IiIsdGhpcy5jb25kaXRpb25TdGFjaz1bIklOSVRJQUwiXSx0aGlzLnl5bGxvYz17Zmlyc3RfbGluZToxLGZpcnN0X2NvbHVtbjowLGxhc3RfbGluZToxLGxhc3RfY29sdW1uOjB9LHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1bMCwwXSksdGhpcy5vZmZzZXQ9MCx0aGlzfSxpbnB1dDpmdW5jdGlvbigpe3ZhciB0PXRoaXMuX2lucHV0WzBdO3JldHVybiB0aGlzLnl5dGV4dCs9dCx0aGlzLnl5bGVuZysrLHRoaXMub2Zmc2V0KyssdGhpcy5tYXRjaCs9dCx0aGlzLm1hdGNoZWQrPXQsdC5tYXRjaCgvKD86XHJcbj98XG4pLiovZyk/KHRoaXMueXlsaW5lbm8rKyx0aGlzLnl5bGxvYy5sYXN0X2xpbmUrKyk6dGhpcy55eWxsb2MubGFzdF9jb2x1bW4rKyx0aGlzLm9wdGlvbnMucmFuZ2VzJiZ0aGlzLnl5bGxvYy5yYW5nZVsxXSsrLHRoaXMuX2lucHV0PXRoaXMuX2lucHV0LnNsaWNlKDEpLHR9LHVucHV0OmZ1bmN0aW9uKHQpe3ZhciBlPXQubGVuZ3RoLG49dC5zcGxpdCgvKD86XHJcbj98XG4pL2cpO3RoaXMuX2lucHV0PXQrdGhpcy5faW5wdXQsdGhpcy55eXRleHQ9dGhpcy55eXRleHQuc3Vic3RyKDAsdGhpcy55eXRleHQubGVuZ3RoLWUpLHRoaXMub2Zmc2V0LT1lO3ZhciByPXRoaXMubWF0Y2guc3BsaXQoLyg/OlxyXG4/fFxuKS9nKTt0aGlzLm1hdGNoPXRoaXMubWF0Y2guc3Vic3RyKDAsdGhpcy5tYXRjaC5sZW5ndGgtMSksdGhpcy5tYXRjaGVkPXRoaXMubWF0Y2hlZC5zdWJzdHIoMCx0aGlzLm1hdGNoZWQubGVuZ3RoLTEpLG4ubGVuZ3RoLTEmJih0aGlzLnl5bGluZW5vLT1uLmxlbmd0aC0xKTt2YXIgaT10aGlzLnl5bGxvYy5yYW5nZTtyZXR1cm4gdGhpcy55eWxsb2M9e2ZpcnN0X2xpbmU6dGhpcy55eWxsb2MuZmlyc3RfbGluZSxsYXN0X2xpbmU6dGhpcy55eWxpbmVubysxLGZpcnN0X2NvbHVtbjp0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4sbGFzdF9jb2x1bW46bj8obi5sZW5ndGg9PT1yLmxlbmd0aD90aGlzLnl5bGxvYy5maXJzdF9jb2x1bW46MCkrcltyLmxlbmd0aC1uLmxlbmd0aF0ubGVuZ3RoLW5bMF0ubGVuZ3RoOnRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbi1lfSx0aGlzLm9wdGlvbnMucmFuZ2VzJiYodGhpcy55eWxsb2MucmFuZ2U9W2lbMF0saVswXSt0aGlzLnl5bGVuZy1lXSksdGhpcy55eWxlbmc9dGhpcy55eXRleHQubGVuZ3RoLHRoaXN9LG1vcmU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbW9yZT0hMCx0aGlzfSxyZWplY3Q6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlcj8odGhpcy5fYmFja3RyYWNrPSEwLHRoaXMpOnRoaXMucGFyc2VFcnJvcigiTGV4aWNhbCBlcnJvciBvbiBsaW5lICIrKHRoaXMueXlsaW5lbm8rMSkrIi4gWW91IGNhbiBvbmx5IGludm9rZSByZWplY3QoKSBpbiB0aGUgbGV4ZXIgd2hlbiB0aGUgbGV4ZXIgaXMgb2YgdGhlIGJhY2t0cmFja2luZyBwZXJzdWFzaW9uIChvcHRpb25zLmJhY2t0cmFja19sZXhlciA9IHRydWUpLlxuIit0aGlzLnNob3dQb3NpdGlvbigpLHt0ZXh0OiIiLHRva2VuOm51bGwsbGluZTp0aGlzLnl5bGluZW5vfSl9LGxlc3M6ZnVuY3Rpb24odCl7dGhpcy51bnB1dCh0aGlzLm1hdGNoLnNsaWNlKHQpKX0scGFzdElucHV0OmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5tYXRjaGVkLnN1YnN0cigwLHRoaXMubWF0Y2hlZC5sZW5ndGgtdGhpcy5tYXRjaC5sZW5ndGgpO3JldHVybih0Lmxlbmd0aD4yMD8iLi4uIjoiIikrdC5zdWJzdHIoLTIwKS5yZXBsYWNlKC9cbi9nLCIiKX0sdXBjb21pbmdJbnB1dDpmdW5jdGlvbigpe3ZhciB0PXRoaXMubWF0Y2g7cmV0dXJuIHQubGVuZ3RoPDIwJiYodCs9dGhpcy5faW5wdXQuc3Vic3RyKDAsMjAtdC5sZW5ndGgpKSwodC5zdWJzdHIoMCwyMCkrKHQubGVuZ3RoPjIwPyIuLi4iOiIiKSkucmVwbGFjZSgvXG4vZywiIil9LHNob3dQb3NpdGlvbjpmdW5jdGlvbigpe3ZhciB0PXRoaXMucGFzdElucHV0KCksZT1uZXcgQXJyYXkodC5sZW5ndGgrMSkuam9pbigiLSIpO3JldHVybiB0K3RoaXMudXBjb21pbmdJbnB1dCgpKyJcbiIrZSsiXiJ9LHRlc3RfbWF0Y2g6ZnVuY3Rpb24odCxlKXt2YXIgbixyLGk7aWYodGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlciYmKGk9e3l5bGluZW5vOnRoaXMueXlsaW5lbm8seXlsbG9jOntmaXJzdF9saW5lOnRoaXMueXlsbG9jLmZpcnN0X2xpbmUsbGFzdF9saW5lOnRoaXMubGFzdF9saW5lLGZpcnN0X2NvbHVtbjp0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4sbGFzdF9jb2x1bW46dGhpcy55eWxsb2MubGFzdF9jb2x1bW59LHl5dGV4dDp0aGlzLnl5dGV4dCxtYXRjaDp0aGlzLm1hdGNoLG1hdGNoZXM6dGhpcy5tYXRjaGVzLG1hdGNoZWQ6dGhpcy5tYXRjaGVkLHl5bGVuZzp0aGlzLnl5bGVuZyxvZmZzZXQ6dGhpcy5vZmZzZXQsX21vcmU6dGhpcy5fbW9yZSxfaW5wdXQ6dGhpcy5faW5wdXQseXk6dGhpcy55eSxjb25kaXRpb25TdGFjazp0aGlzLmNvbmRpdGlvblN0YWNrLnNsaWNlKDApLGRvbmU6dGhpcy5kb25lfSx0aGlzLm9wdGlvbnMucmFuZ2VzJiYoaS55eWxsb2MucmFuZ2U9dGhpcy55eWxsb2MucmFuZ2Uuc2xpY2UoMCkpKSwocj10WzBdLm1hdGNoKC8oPzpcclxuP3xcbikuKi9nKSkmJih0aGlzLnl5bGluZW5vKz1yLmxlbmd0aCksdGhpcy55eWxsb2M9e2ZpcnN0X2xpbmU6dGhpcy55eWxsb2MubGFzdF9saW5lLGxhc3RfbGluZTp0aGlzLnl5bGluZW5vKzEsZmlyc3RfY29sdW1uOnRoaXMueXlsbG9jLmxhc3RfY29sdW1uLGxhc3RfY29sdW1uOnI/cltyLmxlbmd0aC0xXS5sZW5ndGgtcltyLmxlbmd0aC0xXS5tYXRjaCgvXHI/XG4/LylbMF0ubGVuZ3RoOnRoaXMueXlsbG9jLmxhc3RfY29sdW1uK3RbMF0ubGVuZ3RofSx0aGlzLnl5dGV4dCs9dFswXSx0aGlzLm1hdGNoKz10WzBdLHRoaXMubWF0Y2hlcz10LHRoaXMueXlsZW5nPXRoaXMueXl0ZXh0Lmxlbmd0aCx0aGlzLm9wdGlvbnMucmFuZ2VzJiYodGhpcy55eWxsb2MucmFuZ2U9W3RoaXMub2Zmc2V0LHRoaXMub2Zmc2V0Kz10aGlzLnl5bGVuZ10pLHRoaXMuX21vcmU9ITEsdGhpcy5fYmFja3RyYWNrPSExLHRoaXMuX2lucHV0PXRoaXMuX2lucHV0LnNsaWNlKHRbMF0ubGVuZ3RoKSx0aGlzLm1hdGNoZWQrPXRbMF0sbj10aGlzLnBlcmZvcm1BY3Rpb24uY2FsbCh0aGlzLHRoaXMueXksdGhpcyxlLHRoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMV0pLHRoaXMuZG9uZSYmdGhpcy5faW5wdXQmJih0aGlzLmRvbmU9ITEpLG4pcmV0dXJuIG47aWYodGhpcy5fYmFja3RyYWNrKXtmb3IodmFyIGEgaW4gaSl0aGlzW2FdPWlbYV07cmV0dXJuITF9cmV0dXJuITF9LG5leHQ6ZnVuY3Rpb24oKXtpZih0aGlzLmRvbmUpcmV0dXJuIHRoaXMuRU9GO3ZhciB0LGUsbixyO3RoaXMuX2lucHV0fHwodGhpcy5kb25lPSEwKSx0aGlzLl9tb3JlfHwodGhpcy55eXRleHQ9IiIsdGhpcy5tYXRjaD0iIik7Zm9yKHZhciBpPXRoaXMuX2N1cnJlbnRSdWxlcygpLGE9MDthPGkubGVuZ3RoO2ErKylpZigobj10aGlzLl9pbnB1dC5tYXRjaCh0aGlzLnJ1bGVzW2lbYV1dKSkmJighZXx8blswXS5sZW5ndGg+ZVswXS5sZW5ndGgpKXtpZihlPW4scj1hLHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIpe2lmKCExIT09KHQ9dGhpcy50ZXN0X21hdGNoKG4saVthXSkpKXJldHVybiB0O2lmKHRoaXMuX2JhY2t0cmFjayl7ZT0hMTtjb250aW51ZX1yZXR1cm4hMX1pZighdGhpcy5vcHRpb25zLmZsZXgpYnJlYWt9cmV0dXJuIGU/ITEhPT0odD10aGlzLnRlc3RfbWF0Y2goZSxpW3JdKSkmJnQ6IiI9PT10aGlzLl9pbnB1dD90aGlzLkVPRjp0aGlzLnBhcnNlRXJyb3IoIkxleGljYWwgZXJyb3Igb24gbGluZSAiKyh0aGlzLnl5bGluZW5vKzEpKyIuIFVucmVjb2duaXplZCB0ZXh0LlxuIit0aGlzLnNob3dQb3NpdGlvbigpLHt0ZXh0OiIiLHRva2VuOm51bGwsbGluZTp0aGlzLnl5bGluZW5vfSl9LGxleDpmdW5jdGlvbigpe3ZhciB0PXRoaXMubmV4dCgpO3JldHVybiB0fHx0aGlzLmxleCgpfSxiZWdpbjpmdW5jdGlvbih0KXt0aGlzLmNvbmRpdGlvblN0YWNrLnB1c2godCl9LHBvcFN0YXRlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTE+MD90aGlzLmNvbmRpdGlvblN0YWNrLnBvcCgpOnRoaXMuY29uZGl0aW9uU3RhY2tbMF19LF9jdXJyZW50UnVsZXM6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgmJnRoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMV0/dGhpcy5jb25kaXRpb25zW3RoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMV1dLnJ1bGVzOnRoaXMuY29uZGl0aW9ucy5JTklUSUFMLnJ1bGVzfSx0b3BTdGF0ZTpmdW5jdGlvbih0KXtyZXR1cm4odD10aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xLU1hdGguYWJzKHR8fDApKT49MD90aGlzLmNvbmRpdGlvblN0YWNrW3RdOiJJTklUSUFMIn0scHVzaFN0YXRlOmZ1bmN0aW9uKHQpe3RoaXMuYmVnaW4odCl9LHN0YXRlU3RhY2tTaXplOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RofSxvcHRpb25zOnsiY2FzZS1pbnNlbnNpdGl2ZSI6ITB9LHBlcmZvcm1BY3Rpb246ZnVuY3Rpb24odCxlLG4scil7c3dpdGNoKG4pe2Nhc2UgMDpyZXR1cm4gdGhpcy5iZWdpbigib3Blbl9kaXJlY3RpdmUiKSwyMjtjYXNlIDE6cmV0dXJuIHRoaXMuYmVnaW4oInR5cGVfZGlyZWN0aXZlIiksMjM7Y2FzZSAyOnJldHVybiB0aGlzLnBvcFN0YXRlKCksdGhpcy5iZWdpbigiYXJnX2RpcmVjdGl2ZSIpLDE3O2Nhc2UgMzpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLHRoaXMucG9wU3RhdGUoKSwyNTtjYXNlIDQ6cmV0dXJuIDI0O2Nhc2UgNTpjYXNlIDY6YnJlYWs7Y2FzZSA3OnJldHVybiAxOTtjYXNlIDg6Y2FzZSA5OmJyZWFrO2Nhc2UgMTA6cmV0dXJuIHRoaXMuYmVnaW4oInRpdGxlIiksMTI7Y2FzZSAxMTpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLCJ0aXRsZV92YWx1ZSI7Y2FzZSAxMjp0aGlzLmJlZ2luKCJzdHJpbmciKTticmVhaztjYXNlIDEzOnRoaXMucG9wU3RhdGUoKTticmVhaztjYXNlIDE0OnJldHVybiJ0eHQiO2Nhc2UgMTU6cmV0dXJuIDY7Y2FzZSAxNjpyZXR1cm4idmFsdWUiO2Nhc2UgMTc6cmV0dXJuIDIxfX0scnVsZXM6Wy9eKD86JSVceykvaSwvXig/OigoPzooPyFcfSUlKVteOi5dKSopKS9pLC9eKD86OikvaSwvXig/Olx9JSUpL2ksL14oPzooKD86KD8hXH0lJSkufFxuKSopKS9pLC9eKD86JSUoPyFceylbXlxuXSopL2ksL14oPzpbXlx9XSUlW15cbl0qKS9pLC9eKD86W1xuXHJdKykvaSwvXig/OiUlW15cbl0qKS9pLC9eKD86W1xzXSspL2ksL14oPzp0aXRsZVxiKS9pLC9eKD86KD8hXG58fCkqW15cbl0qKS9pLC9eKD86WyJdKS9pLC9eKD86WyJdKS9pLC9eKD86W14iXSopL2ksL14oPzpwaWVcYikvaSwvXig/OjpbXHNdKltcZF0rKD86XC5bXGRdKyk/KS9pLC9eKD86JCkvaV0sY29uZGl0aW9uczp7Y2xvc2VfZGlyZWN0aXZlOntydWxlczpbXSxpbmNsdXNpdmU6ITF9LGFyZ19kaXJlY3RpdmU6e3J1bGVzOlszLDRdLGluY2x1c2l2ZTohMX0sdHlwZV9kaXJlY3RpdmU6e3J1bGVzOlsyLDNdLGluY2x1c2l2ZTohMX0sb3Blbl9kaXJlY3RpdmU6e3J1bGVzOlsxXSxpbmNsdXNpdmU6ITF9LHRpdGxlOntydWxlczpbMTFdLGluY2x1c2l2ZTohMX0sc3RyaW5nOntydWxlczpbMTMsMTRdLGluY2x1c2l2ZTohMX0sSU5JVElBTDp7cnVsZXM6WzAsNSw2LDcsOCw5LDEwLDEyLDE1LDE2LDE3XSxpbmNsdXNpdmU6ITB9fX07ZnVuY3Rpb24gZCgpe3RoaXMueXk9e319cmV0dXJuIGgubGV4ZXI9ZixkLnByb3RvdHlwZT1oLGguUGFyc2VyPWQsbmV3IGR9KCk7ZS5wYXJzZXI9aSxlLlBhcnNlcj1pLlBhcnNlcixlLnBhcnNlPWZ1bmN0aW9uKCl7cmV0dXJuIGkucGFyc2UuYXBwbHkoaSxhcmd1bWVudHMpfSxlLm1haW49ZnVuY3Rpb24ocil7clsxXXx8KGNvbnNvbGUubG9nKCJVc2FnZTogIityWzBdKyIgRklMRSIpLHQuZXhpdCgxKSk7dmFyIGk9bigxOSkucmVhZEZpbGVTeW5jKG4oMjApLm5vcm1hbGl6ZShyWzFdKSwidXRmOCIpO3JldHVybiBlLnBhcnNlci5wYXJzZShpKX0sbi5jW24uc109PT1yJiZlLm1haW4odC5hcmd2LnNsaWNlKDEpKX0pLmNhbGwodGhpcyxuKDE0KSxuKDcpKHQpKX0sZnVuY3Rpb24odCxlLG4peyhmdW5jdGlvbih0LHIpe3ZhciBpPWZ1bmN0aW9uKCl7dmFyIHQ9ZnVuY3Rpb24odCxlLG4scil7Zm9yKG49bnx8e30scj10Lmxlbmd0aDtyLS07blt0W3JdXT1lKTtyZXR1cm4gbn0sZT1bMSwyXSxuPVsxLDVdLHI9WzYsOSwxMSwyMCwzMF0saT1bMSwxN10sYT1bMSwyMF0sbz1bMSwyNF0scz1bMSwyNV0sYz1bMSwyNl0sdT1bMSwyN10sbD1bMjAsMjcsMjhdLGg9WzQsNiw5LDExLDIwLDMwXSxmPVsyMywyNCwyNSwyNl0sZD17dHJhY2U6ZnVuY3Rpb24oKXt9LHl5Ont9LHN5bWJvbHNfOntlcnJvcjoyLHN0YXJ0OjMsRVJfRElBR1JBTTo0LGRvY3VtZW50OjUsRU9GOjYsZGlyZWN0aXZlOjcsbGluZTo4LFNQQUNFOjksc3RhdGVtZW50OjEwLE5FV0xJTkU6MTEsb3BlbkRpcmVjdGl2ZToxMix0eXBlRGlyZWN0aXZlOjEzLGNsb3NlRGlyZWN0aXZlOjE0LCI6IjoxNSxhcmdEaXJlY3RpdmU6MTYsZW50aXR5TmFtZToxNyxyZWxTcGVjOjE4LHJvbGU6MTksQUxQSEFOVU06MjAsY2FyZGluYWxpdHk6MjEscmVsVHlwZToyMixaRVJPX09SX09ORToyMyxaRVJPX09SX01PUkU6MjQsT05FX09SX01PUkU6MjUsT05MWV9PTkU6MjYsTk9OX0lERU5USUZZSU5HOjI3LElERU5USUZZSU5HOjI4LFdPUkQ6Mjksb3Blbl9kaXJlY3RpdmU6MzAsdHlwZV9kaXJlY3RpdmU6MzEsYXJnX2RpcmVjdGl2ZTozMixjbG9zZV9kaXJlY3RpdmU6MzMsJGFjY2VwdDowLCRlbmQ6MX0sdGVybWluYWxzXzp7MjoiZXJyb3IiLDQ6IkVSX0RJQUdSQU0iLDY6IkVPRiIsOToiU1BBQ0UiLDExOiJORVdMSU5FIiwxNToiOiIsMjA6IkFMUEhBTlVNIiwyMzoiWkVST19PUl9PTkUiLDI0OiJaRVJPX09SX01PUkUiLDI1OiJPTkVfT1JfTU9SRSIsMjY6Ik9OTFlfT05FIiwyNzoiTk9OX0lERU5USUZZSU5HIiwyODoiSURFTlRJRllJTkciLDI5OiJXT1JEIiwzMDoib3Blbl9kaXJlY3RpdmUiLDMxOiJ0eXBlX2RpcmVjdGl2ZSIsMzI6ImFyZ19kaXJlY3RpdmUiLDMzOiJjbG9zZV9kaXJlY3RpdmUifSxwcm9kdWN0aW9uc186WzAsWzMsM10sWzMsMl0sWzUsMF0sWzUsMl0sWzgsMl0sWzgsMV0sWzgsMV0sWzgsMV0sWzcsNF0sWzcsNl0sWzEwLDFdLFsxMCw1XSxbMTcsMV0sWzE4LDNdLFsyMSwxXSxbMjEsMV0sWzIxLDFdLFsyMSwxXSxbMjIsMV0sWzIyLDFdLFsxOSwxXSxbMTksMV0sWzEyLDFdLFsxMywxXSxbMTYsMV0sWzE0LDFdXSxwZXJmb3JtQWN0aW9uOmZ1bmN0aW9uKHQsZSxuLHIsaSxhLG8pe3ZhciBzPWEubGVuZ3RoLTE7c3dpdGNoKGkpe2Nhc2UgMTpicmVhaztjYXNlIDM6dGhpcy4kPVtdO2JyZWFrO2Nhc2UgNDphW3MtMV0ucHVzaChhW3NdKSx0aGlzLiQ9YVtzLTFdO2JyZWFrO2Nhc2UgNTpjYXNlIDY6dGhpcy4kPWFbc107YnJlYWs7Y2FzZSA3OmNhc2UgODp0aGlzLiQ9W107YnJlYWs7Y2FzZSAxMjpyLmFkZEVudGl0eShhW3MtNF0pLHIuYWRkRW50aXR5KGFbcy0yXSksci5hZGRSZWxhdGlvbnNoaXAoYVtzLTRdLGFbc10sYVtzLTJdLGFbcy0zXSk7YnJlYWs7Y2FzZSAxMzp0aGlzLiQ9YVtzXTticmVhaztjYXNlIDE0OnRoaXMuJD17Y2FyZEE6YVtzXSxyZWxUeXBlOmFbcy0xXSxjYXJkQjphW3MtMl19O2JyZWFrO2Nhc2UgMTU6dGhpcy4kPXIuQ2FyZGluYWxpdHkuWkVST19PUl9PTkU7YnJlYWs7Y2FzZSAxNjp0aGlzLiQ9ci5DYXJkaW5hbGl0eS5aRVJPX09SX01PUkU7YnJlYWs7Y2FzZSAxNzp0aGlzLiQ9ci5DYXJkaW5hbGl0eS5PTkVfT1JfTU9SRTticmVhaztjYXNlIDE4OnRoaXMuJD1yLkNhcmRpbmFsaXR5Lk9OTFlfT05FO2JyZWFrO2Nhc2UgMTk6dGhpcy4kPXIuSWRlbnRpZmljYXRpb24uTk9OX0lERU5USUZZSU5HO2JyZWFrO2Nhc2UgMjA6dGhpcy4kPXIuSWRlbnRpZmljYXRpb24uSURFTlRJRllJTkc7YnJlYWs7Y2FzZSAyMTp0aGlzLiQ9YVtzXS5yZXBsYWNlKC8iL2csIiIpO2JyZWFrO2Nhc2UgMjI6dGhpcy4kPWFbc107YnJlYWs7Y2FzZSAyMzpyLnBhcnNlRGlyZWN0aXZlKCIlJXsiLCJvcGVuX2RpcmVjdGl2ZSIpO2JyZWFrO2Nhc2UgMjQ6ci5wYXJzZURpcmVjdGl2ZShhW3NdLCJ0eXBlX2RpcmVjdGl2ZSIpO2JyZWFrO2Nhc2UgMjU6YVtzXT1hW3NdLnRyaW0oKS5yZXBsYWNlKC8nL2csJyInKSxyLnBhcnNlRGlyZWN0aXZlKGFbc10sImFyZ19kaXJlY3RpdmUiKTticmVhaztjYXNlIDI2OnIucGFyc2VEaXJlY3RpdmUoIn0lJSIsImNsb3NlX2RpcmVjdGl2ZSIsImVyIil9fSx0YWJsZTpbezM6MSw0OmUsNzozLDEyOjQsMzA6bn0sezE6WzNdfSx0KHIsWzIsM10sezU6Nn0pLHszOjcsNDplLDc6MywxMjo0LDMwOm59LHsxMzo4LDMxOlsxLDldfSx7MzE6WzIsMjNdfSx7NjpbMSwxMF0sNzoxNSw4OjExLDk6WzEsMTJdLDEwOjEzLDExOlsxLDE0XSwxMjo0LDE3OjE2LDIwOmksMzA6bn0sezE6WzIsMl19LHsxNDoxOCwxNTpbMSwxOV0sMzM6YX0sdChbMTUsMzNdLFsyLDI0XSksdChyLFsyLDhdLHsxOlsyLDFdfSksdChyLFsyLDRdKSx7NzoxNSwxMDoyMSwxMjo0LDE3OjE2LDIwOmksMzA6bn0sdChyLFsyLDZdKSx0KHIsWzIsN10pLHQocixbMiwxMV0pLHsxODoyMiwyMToyMywyMzpvLDI0OnMsMjU6YywyNjp1fSx0KFsxNSwyMywyNCwyNSwyNl0sWzIsMTNdKSx7MTE6WzEsMjhdfSx7MTY6MjksMzI6WzEsMzBdfSx7MTE6WzIsMjZdfSx0KHIsWzIsNV0pLHsxNzozMSwyMDppfSx7MjI6MzIsMjc6WzEsMzNdLDI4OlsxLDM0XX0sdChsLFsyLDE1XSksdChsLFsyLDE2XSksdChsLFsyLDE3XSksdChsLFsyLDE4XSksdChoLFsyLDldKSx7MTQ6MzUsMzM6YX0sezMzOlsyLDI1XX0sezE1OlsxLDM2XX0sezIxOjM3LDIzOm8sMjQ6cywyNTpjLDI2OnV9LHQoZixbMiwxOV0pLHQoZixbMiwyMF0pLHsxMTpbMSwzOF19LHsxOTozOSwyMDpbMSw0MV0sMjk6WzEsNDBdfSx7MjA6WzIsMTRdfSx0KGgsWzIsMTBdKSx0KHIsWzIsMTJdKSx0KHIsWzIsMjFdKSx0KHIsWzIsMjJdKV0sZGVmYXVsdEFjdGlvbnM6ezU6WzIsMjNdLDc6WzIsMl0sMjA6WzIsMjZdLDMwOlsyLDI1XSwzNzpbMiwxNF19LHBhcnNlRXJyb3I6ZnVuY3Rpb24odCxlKXtpZighZS5yZWNvdmVyYWJsZSl7dmFyIG49bmV3IEVycm9yKHQpO3Rocm93IG4uaGFzaD1lLG59dGhpcy50cmFjZSh0KX0scGFyc2U6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcyxuPVswXSxyPVtdLGk9W251bGxdLGE9W10sbz10aGlzLnRhYmxlLHM9IiIsYz0wLHU9MCxsPTAsaD0yLGY9MSxkPWEuc2xpY2UuY2FsbChhcmd1bWVudHMsMSkscD1PYmplY3QuY3JlYXRlKHRoaXMubGV4ZXIpLGc9e3l5Ont9fTtmb3IodmFyIHkgaW4gdGhpcy55eSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpcy55eSx5KSYmKGcueXlbeV09dGhpcy55eVt5XSk7cC5zZXRJbnB1dCh0LGcueXkpLGcueXkubGV4ZXI9cCxnLnl5LnBhcnNlcj10aGlzLHZvaWQgMD09PXAueXlsbG9jJiYocC55eWxsb2M9e30pO3ZhciB2PXAueXlsbG9jO2EucHVzaCh2KTt2YXIgbT1wLm9wdGlvbnMmJnAub3B0aW9ucy5yYW5nZXM7ZnVuY3Rpb24gYigpe3ZhciB0O3JldHVybiJudW1iZXIiIT10eXBlb2YodD1yLnBvcCgpfHxwLmxleCgpfHxmKSYmKHQgaW5zdGFuY2VvZiBBcnJheSYmKHQ9KHI9dCkucG9wKCkpLHQ9ZS5zeW1ib2xzX1t0XXx8dCksdH0iZnVuY3Rpb24iPT10eXBlb2YgZy55eS5wYXJzZUVycm9yP3RoaXMucGFyc2VFcnJvcj1nLnl5LnBhcnNlRXJyb3I6dGhpcy5wYXJzZUVycm9yPU9iamVjdC5nZXRQcm90b3R5cGVPZih0aGlzKS5wYXJzZUVycm9yO2Zvcih2YXIgeCxfLGssdyxFLFQsQyxTLEEsTT17fTs7KXtpZihrPW5bbi5sZW5ndGgtMV0sdGhpcy5kZWZhdWx0QWN0aW9uc1trXT93PXRoaXMuZGVmYXVsdEFjdGlvbnNba106KG51bGw9PXgmJih4PWIoKSksdz1vW2tdJiZvW2tdW3hdKSx2b2lkIDA9PT13fHwhdy5sZW5ndGh8fCF3WzBdKXt2YXIgTz0iIjtmb3IoVCBpbiBBPVtdLG9ba10pdGhpcy50ZXJtaW5hbHNfW1RdJiZUPmgmJkEucHVzaCgiJyIrdGhpcy50ZXJtaW5hbHNfW1RdKyInIik7Tz1wLnNob3dQb3NpdGlvbj8iUGFyc2UgZXJyb3Igb24gbGluZSAiKyhjKzEpKyI6XG4iK3Auc2hvd1Bvc2l0aW9uKCkrIlxuRXhwZWN0aW5nICIrQS5qb2luKCIsICIpKyIsIGdvdCAnIisodGhpcy50ZXJtaW5hbHNfW3hdfHx4KSsiJyI6IlBhcnNlIGVycm9yIG9uIGxpbmUgIisoYysxKSsiOiBVbmV4cGVjdGVkICIrKHg9PWY/ImVuZCBvZiBpbnB1dCI6IiciKyh0aGlzLnRlcm1pbmFsc19beF18fHgpKyInIiksdGhpcy5wYXJzZUVycm9yKE8se3RleHQ6cC5tYXRjaCx0b2tlbjp0aGlzLnRlcm1pbmFsc19beF18fHgsbGluZTpwLnl5bGluZW5vLGxvYzp2LGV4cGVjdGVkOkF9KX1pZih3WzBdaW5zdGFuY2VvZiBBcnJheSYmdy5sZW5ndGg+MSl0aHJvdyBuZXcgRXJyb3IoIlBhcnNlIEVycm9yOiBtdWx0aXBsZSBhY3Rpb25zIHBvc3NpYmxlIGF0IHN0YXRlOiAiK2srIiwgdG9rZW46ICIreCk7c3dpdGNoKHdbMF0pe2Nhc2UgMTpuLnB1c2goeCksaS5wdXNoKHAueXl0ZXh0KSxhLnB1c2gocC55eWxsb2MpLG4ucHVzaCh3WzFdKSx4PW51bGwsXz8oeD1fLF89bnVsbCk6KHU9cC55eWxlbmcscz1wLnl5dGV4dCxjPXAueXlsaW5lbm8sdj1wLnl5bGxvYyxsPjAmJmwtLSk7YnJlYWs7Y2FzZSAyOmlmKEM9dGhpcy5wcm9kdWN0aW9uc19bd1sxXV1bMV0sTS4kPWlbaS5sZW5ndGgtQ10sTS5fJD17Zmlyc3RfbGluZTphW2EubGVuZ3RoLShDfHwxKV0uZmlyc3RfbGluZSxsYXN0X2xpbmU6YVthLmxlbmd0aC0xXS5sYXN0X2xpbmUsZmlyc3RfY29sdW1uOmFbYS5sZW5ndGgtKEN8fDEpXS5maXJzdF9jb2x1bW4sbGFzdF9jb2x1bW46YVthLmxlbmd0aC0xXS5sYXN0X2NvbHVtbn0sbSYmKE0uXyQucmFuZ2U9W2FbYS5sZW5ndGgtKEN8fDEpXS5yYW5nZVswXSxhW2EubGVuZ3RoLTFdLnJhbmdlWzFdXSksdm9pZCAwIT09KEU9dGhpcy5wZXJmb3JtQWN0aW9uLmFwcGx5KE0sW3MsdSxjLGcueXksd1sxXSxpLGFdLmNvbmNhdChkKSkpKXJldHVybiBFO0MmJihuPW4uc2xpY2UoMCwtMSpDKjIpLGk9aS5zbGljZSgwLC0xKkMpLGE9YS5zbGljZSgwLC0xKkMpKSxuLnB1c2godGhpcy5wcm9kdWN0aW9uc19bd1sxXV1bMF0pLGkucHVzaChNLiQpLGEucHVzaChNLl8kKSxTPW9bbltuLmxlbmd0aC0yXV1bbltuLmxlbmd0aC0xXV0sbi5wdXNoKFMpO2JyZWFrO2Nhc2UgMzpyZXR1cm4hMH19cmV0dXJuITB9fSxwPXtFT0Y6MSxwYXJzZUVycm9yOmZ1bmN0aW9uKHQsZSl7aWYoIXRoaXMueXkucGFyc2VyKXRocm93IG5ldyBFcnJvcih0KTt0aGlzLnl5LnBhcnNlci5wYXJzZUVycm9yKHQsZSl9LHNldElucHV0OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMueXk9ZXx8dGhpcy55eXx8e30sdGhpcy5faW5wdXQ9dCx0aGlzLl9tb3JlPXRoaXMuX2JhY2t0cmFjaz10aGlzLmRvbmU9ITEsdGhpcy55eWxpbmVubz10aGlzLnl5bGVuZz0wLHRoaXMueXl0ZXh0PXRoaXMubWF0Y2hlZD10aGlzLm1hdGNoPSIiLHRoaXMuY29uZGl0aW9uU3RhY2s9WyJJTklUSUFMIl0sdGhpcy55eWxsb2M9e2ZpcnN0X2xpbmU6MSxmaXJzdF9jb2x1bW46MCxsYXN0X2xpbmU6MSxsYXN0X2NvbHVtbjowfSx0aGlzLm9wdGlvbnMucmFuZ2VzJiYodGhpcy55eWxsb2MucmFuZ2U9WzAsMF0pLHRoaXMub2Zmc2V0PTAsdGhpc30saW5wdXQ6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9pbnB1dFswXTtyZXR1cm4gdGhpcy55eXRleHQrPXQsdGhpcy55eWxlbmcrKyx0aGlzLm9mZnNldCsrLHRoaXMubWF0Y2grPXQsdGhpcy5tYXRjaGVkKz10LHQubWF0Y2goLyg/OlxyXG4/fFxuKS4qL2cpPyh0aGlzLnl5bGluZW5vKyssdGhpcy55eWxsb2MubGFzdF9saW5lKyspOnRoaXMueXlsbG9jLmxhc3RfY29sdW1uKyssdGhpcy5vcHRpb25zLnJhbmdlcyYmdGhpcy55eWxsb2MucmFuZ2VbMV0rKyx0aGlzLl9pbnB1dD10aGlzLl9pbnB1dC5zbGljZSgxKSx0fSx1bnB1dDpmdW5jdGlvbih0KXt2YXIgZT10Lmxlbmd0aCxuPXQuc3BsaXQoLyg/OlxyXG4/fFxuKS9nKTt0aGlzLl9pbnB1dD10K3RoaXMuX2lucHV0LHRoaXMueXl0ZXh0PXRoaXMueXl0ZXh0LnN1YnN0cigwLHRoaXMueXl0ZXh0Lmxlbmd0aC1lKSx0aGlzLm9mZnNldC09ZTt2YXIgcj10aGlzLm1hdGNoLnNwbGl0KC8oPzpcclxuP3xcbikvZyk7dGhpcy5tYXRjaD10aGlzLm1hdGNoLnN1YnN0cigwLHRoaXMubWF0Y2gubGVuZ3RoLTEpLHRoaXMubWF0Y2hlZD10aGlzLm1hdGNoZWQuc3Vic3RyKDAsdGhpcy5tYXRjaGVkLmxlbmd0aC0xKSxuLmxlbmd0aC0xJiYodGhpcy55eWxpbmVuby09bi5sZW5ndGgtMSk7dmFyIGk9dGhpcy55eWxsb2MucmFuZ2U7cmV0dXJuIHRoaXMueXlsbG9jPXtmaXJzdF9saW5lOnRoaXMueXlsbG9jLmZpcnN0X2xpbmUsbGFzdF9saW5lOnRoaXMueXlsaW5lbm8rMSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOm4/KG4ubGVuZ3RoPT09ci5sZW5ndGg/dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uOjApK3Jbci5sZW5ndGgtbi5sZW5ndGhdLmxlbmd0aC1uWzBdLmxlbmd0aDp0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4tZX0sdGhpcy5vcHRpb25zLnJhbmdlcyYmKHRoaXMueXlsbG9jLnJhbmdlPVtpWzBdLGlbMF0rdGhpcy55eWxlbmctZV0pLHRoaXMueXlsZW5nPXRoaXMueXl0ZXh0Lmxlbmd0aCx0aGlzfSxtb3JlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX21vcmU9ITAsdGhpc30scmVqZWN0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXI/KHRoaXMuX2JhY2t0cmFjaz0hMCx0aGlzKTp0aGlzLnBhcnNlRXJyb3IoIkxleGljYWwgZXJyb3Igb24gbGluZSAiKyh0aGlzLnl5bGluZW5vKzEpKyIuIFlvdSBjYW4gb25seSBpbnZva2UgcmVqZWN0KCkgaW4gdGhlIGxleGVyIHdoZW4gdGhlIGxleGVyIGlzIG9mIHRoZSBiYWNrdHJhY2tpbmcgcGVyc3Vhc2lvbiAob3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIgPSB0cnVlKS5cbiIrdGhpcy5zaG93UG9zaXRpb24oKSx7dGV4dDoiIix0b2tlbjpudWxsLGxpbmU6dGhpcy55eWxpbmVub30pfSxsZXNzOmZ1bmN0aW9uKHQpe3RoaXMudW5wdXQodGhpcy5tYXRjaC5zbGljZSh0KSl9LHBhc3RJbnB1dDpmdW5jdGlvbigpe3ZhciB0PXRoaXMubWF0Y2hlZC5zdWJzdHIoMCx0aGlzLm1hdGNoZWQubGVuZ3RoLXRoaXMubWF0Y2gubGVuZ3RoKTtyZXR1cm4odC5sZW5ndGg+MjA/Ii4uLiI6IiIpK3Quc3Vic3RyKC0yMCkucmVwbGFjZSgvXG4vZywiIil9LHVwY29taW5nSW5wdXQ6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLm1hdGNoO3JldHVybiB0Lmxlbmd0aDwyMCYmKHQrPXRoaXMuX2lucHV0LnN1YnN0cigwLDIwLXQubGVuZ3RoKSksKHQuc3Vic3RyKDAsMjApKyh0Lmxlbmd0aD4yMD8iLi4uIjoiIikpLnJlcGxhY2UoL1xuL2csIiIpfSxzaG93UG9zaXRpb246ZnVuY3Rpb24oKXt2YXIgdD10aGlzLnBhc3RJbnB1dCgpLGU9bmV3IEFycmF5KHQubGVuZ3RoKzEpLmpvaW4oIi0iKTtyZXR1cm4gdCt0aGlzLnVwY29taW5nSW5wdXQoKSsiXG4iK2UrIl4ifSx0ZXN0X21hdGNoOmZ1bmN0aW9uKHQsZSl7dmFyIG4scixpO2lmKHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXImJihpPXt5eWxpbmVubzp0aGlzLnl5bGluZW5vLHl5bGxvYzp7Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5maXJzdF9saW5lLGxhc3RfbGluZTp0aGlzLmxhc3RfbGluZSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOnRoaXMueXlsbG9jLmxhc3RfY29sdW1ufSx5eXRleHQ6dGhpcy55eXRleHQsbWF0Y2g6dGhpcy5tYXRjaCxtYXRjaGVzOnRoaXMubWF0Y2hlcyxtYXRjaGVkOnRoaXMubWF0Y2hlZCx5eWxlbmc6dGhpcy55eWxlbmcsb2Zmc2V0OnRoaXMub2Zmc2V0LF9tb3JlOnRoaXMuX21vcmUsX2lucHV0OnRoaXMuX2lucHV0LHl5OnRoaXMueXksY29uZGl0aW9uU3RhY2s6dGhpcy5jb25kaXRpb25TdGFjay5zbGljZSgwKSxkb25lOnRoaXMuZG9uZX0sdGhpcy5vcHRpb25zLnJhbmdlcyYmKGkueXlsbG9jLnJhbmdlPXRoaXMueXlsbG9jLnJhbmdlLnNsaWNlKDApKSksKHI9dFswXS5tYXRjaCgvKD86XHJcbj98XG4pLiovZykpJiYodGhpcy55eWxpbmVubys9ci5sZW5ndGgpLHRoaXMueXlsbG9jPXtmaXJzdF9saW5lOnRoaXMueXlsbG9jLmxhc3RfbGluZSxsYXN0X2xpbmU6dGhpcy55eWxpbmVubysxLGZpcnN0X2NvbHVtbjp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbixsYXN0X2NvbHVtbjpyP3Jbci5sZW5ndGgtMV0ubGVuZ3RoLXJbci5sZW5ndGgtMV0ubWF0Y2goL1xyP1xuPy8pWzBdLmxlbmd0aDp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbit0WzBdLmxlbmd0aH0sdGhpcy55eXRleHQrPXRbMF0sdGhpcy5tYXRjaCs9dFswXSx0aGlzLm1hdGNoZXM9dCx0aGlzLnl5bGVuZz10aGlzLnl5dGV4dC5sZW5ndGgsdGhpcy5vcHRpb25zLnJhbmdlcyYmKHRoaXMueXlsbG9jLnJhbmdlPVt0aGlzLm9mZnNldCx0aGlzLm9mZnNldCs9dGhpcy55eWxlbmddKSx0aGlzLl9tb3JlPSExLHRoaXMuX2JhY2t0cmFjaz0hMSx0aGlzLl9pbnB1dD10aGlzLl9pbnB1dC5zbGljZSh0WzBdLmxlbmd0aCksdGhpcy5tYXRjaGVkKz10WzBdLG49dGhpcy5wZXJmb3JtQWN0aW9uLmNhbGwodGhpcyx0aGlzLnl5LHRoaXMsZSx0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdKSx0aGlzLmRvbmUmJnRoaXMuX2lucHV0JiYodGhpcy5kb25lPSExKSxuKXJldHVybiBuO2lmKHRoaXMuX2JhY2t0cmFjayl7Zm9yKHZhciBhIGluIGkpdGhpc1thXT1pW2FdO3JldHVybiExfXJldHVybiExfSxuZXh0OmZ1bmN0aW9uKCl7aWYodGhpcy5kb25lKXJldHVybiB0aGlzLkVPRjt2YXIgdCxlLG4scjt0aGlzLl9pbnB1dHx8KHRoaXMuZG9uZT0hMCksdGhpcy5fbW9yZXx8KHRoaXMueXl0ZXh0PSIiLHRoaXMubWF0Y2g9IiIpO2Zvcih2YXIgaT10aGlzLl9jdXJyZW50UnVsZXMoKSxhPTA7YTxpLmxlbmd0aDthKyspaWYoKG49dGhpcy5faW5wdXQubWF0Y2godGhpcy5ydWxlc1tpW2FdXSkpJiYoIWV8fG5bMF0ubGVuZ3RoPmVbMF0ubGVuZ3RoKSl7aWYoZT1uLHI9YSx0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyKXtpZighMSE9PSh0PXRoaXMudGVzdF9tYXRjaChuLGlbYV0pKSlyZXR1cm4gdDtpZih0aGlzLl9iYWNrdHJhY2spe2U9ITE7Y29udGludWV9cmV0dXJuITF9aWYoIXRoaXMub3B0aW9ucy5mbGV4KWJyZWFrfXJldHVybiBlPyExIT09KHQ9dGhpcy50ZXN0X21hdGNoKGUsaVtyXSkpJiZ0OiIiPT09dGhpcy5faW5wdXQ/dGhpcy5FT0Y6dGhpcy5wYXJzZUVycm9yKCJMZXhpY2FsIGVycm9yIG9uIGxpbmUgIisodGhpcy55eWxpbmVubysxKSsiLiBVbnJlY29nbml6ZWQgdGV4dC5cbiIrdGhpcy5zaG93UG9zaXRpb24oKSx7dGV4dDoiIix0b2tlbjpudWxsLGxpbmU6dGhpcy55eWxpbmVub30pfSxsZXg6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLm5leHQoKTtyZXR1cm4gdHx8dGhpcy5sZXgoKX0sYmVnaW46ZnVuY3Rpb24odCl7dGhpcy5jb25kaXRpb25TdGFjay5wdXNoKHQpfSxwb3BTdGF0ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xPjA/dGhpcy5jb25kaXRpb25TdGFjay5wb3AoKTp0aGlzLmNvbmRpdGlvblN0YWNrWzBdfSxfY3VycmVudFJ1bGVzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoJiZ0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdP3RoaXMuY29uZGl0aW9uc1t0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdXS5ydWxlczp0aGlzLmNvbmRpdGlvbnMuSU5JVElBTC5ydWxlc30sdG9wU3RhdGU6ZnVuY3Rpb24odCl7cmV0dXJuKHQ9dGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMS1NYXRoLmFicyh0fHwwKSk+PTA/dGhpcy5jb25kaXRpb25TdGFja1t0XToiSU5JVElBTCJ9LHB1c2hTdGF0ZTpmdW5jdGlvbih0KXt0aGlzLmJlZ2luKHQpfSxzdGF0ZVN0YWNrU2l6ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aH0sb3B0aW9uczp7ImNhc2UtaW5zZW5zaXRpdmUiOiEwfSxwZXJmb3JtQWN0aW9uOmZ1bmN0aW9uKHQsZSxuLHIpe3N3aXRjaChuKXtjYXNlIDA6cmV0dXJuIHRoaXMuYmVnaW4oIm9wZW5fZGlyZWN0aXZlIiksMzA7Y2FzZSAxOnJldHVybiB0aGlzLmJlZ2luKCJ0eXBlX2RpcmVjdGl2ZSIpLDMxO2Nhc2UgMjpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLHRoaXMuYmVnaW4oImFyZ19kaXJlY3RpdmUiKSwxNTtjYXNlIDM6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSx0aGlzLnBvcFN0YXRlKCksMzM7Y2FzZSA0OnJldHVybiAzMjtjYXNlIDU6Y2FzZSA2OmJyZWFrO2Nhc2UgNzpyZXR1cm4gMTE7Y2FzZSA4OmJyZWFrO2Nhc2UgOTpyZXR1cm4gOTtjYXNlIDEwOnJldHVybiAyOTtjYXNlIDExOnJldHVybiA0O2Nhc2UgMTI6cmV0dXJuIDIzO2Nhc2UgMTM6cmV0dXJuIDI0O2Nhc2UgMTQ6cmV0dXJuIDI1O2Nhc2UgMTU6cmV0dXJuIDI2O2Nhc2UgMTY6cmV0dXJuIDIzO2Nhc2UgMTc6cmV0dXJuIDI0O2Nhc2UgMTg6cmV0dXJuIDI1O2Nhc2UgMTk6cmV0dXJuIDI3O2Nhc2UgMjA6cmV0dXJuIDI4O2Nhc2UgMjE6Y2FzZSAyMjpyZXR1cm4gMjc7Y2FzZSAyMzpyZXR1cm4gMjA7Y2FzZSAyNDpyZXR1cm4gZS55eXRleHRbMF07Y2FzZSAyNTpyZXR1cm4gNn19LHJ1bGVzOlsvXig/OiUlXHspL2ksL14oPzooKD86KD8hXH0lJSlbXjouXSkqKSkvaSwvXig/OjopL2ksL14oPzpcfSUlKS9pLC9eKD86KCg/Oig/IVx9JSUpLnxcbikqKSkvaSwvXig/OiUoPyFceylbXlxuXSopL2ksL14oPzpbXlx9XSUlW15cbl0qKS9pLC9eKD86W1xuXSspL2ksL14oPzpccyspL2ksL14oPzpbXHNdKykvaSwvXig/OiJbXiJdKiIpL2ksL14oPzplckRpYWdyYW1cYikvaSwvXig/Olx8b1xiKS9pLC9eKD86XH1vXGIpL2ksL14oPzpcfVx8KS9pLC9eKD86XHxcfCkvaSwvXig/Om9cfCkvaSwvXig/Om9ceykvaSwvXig/Olx8XHspL2ksL14oPzpcLlwuKS9pLC9eKD86LS0pL2ksL14oPzpcLi0pL2ksL14oPzotXC4pL2ksL14oPzpbQS1aYS16XVtBLVphLXowLTlcLV0qKS9pLC9eKD86LikvaSwvXig/OiQpL2ldLGNvbmRpdGlvbnM6e29wZW5fZGlyZWN0aXZlOntydWxlczpbMV0saW5jbHVzaXZlOiExfSx0eXBlX2RpcmVjdGl2ZTp7cnVsZXM6WzIsM10saW5jbHVzaXZlOiExfSxhcmdfZGlyZWN0aXZlOntydWxlczpbMyw0XSxpbmNsdXNpdmU6ITF9LElOSVRJQUw6e3J1bGVzOlswLDUsNiw3LDgsOSwxMCwxMSwxMiwxMywxNCwxNSwxNiwxNywxOCwxOSwyMCwyMSwyMiwyMywyNCwyNV0saW5jbHVzaXZlOiEwfX19O2Z1bmN0aW9uIGcoKXt0aGlzLnl5PXt9fXJldHVybiBkLmxleGVyPXAsZy5wcm90b3R5cGU9ZCxkLlBhcnNlcj1nLG5ldyBnfSgpO2UucGFyc2VyPWksZS5QYXJzZXI9aS5QYXJzZXIsZS5wYXJzZT1mdW5jdGlvbigpe3JldHVybiBpLnBhcnNlLmFwcGx5KGksYXJndW1lbnRzKX0sZS5tYWluPWZ1bmN0aW9uKHIpe3JbMV18fChjb25zb2xlLmxvZygiVXNhZ2U6ICIrclswXSsiIEZJTEUiKSx0LmV4aXQoMSkpO3ZhciBpPW4oMTkpLnJlYWRGaWxlU3luYyhuKDIwKS5ub3JtYWxpemUoclsxXSksInV0ZjgiKTtyZXR1cm4gZS5wYXJzZXIucGFyc2UoaSl9LG4uY1tuLnNdPT09ciYmZS5tYWluKHQuYXJndi5zbGljZSgxKSl9KS5jYWxsKHRoaXMsbigxNCksbig3KSh0KSl9LGZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGZ1bmN0aW9uKHQpe3RbdC5BTEw9MF09IkFMTCIsdFt0LlJHQj0xXT0iUkdCIix0W3QuSFNMPTJdPSJIU0wifShyfHwocj17fSkpLGUuVFlQRT1yfSxmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTApO3QuZXhwb3J0cz1pO2Z1bmN0aW9uIGkodCl7dGhpcy5faXNEaXJlY3RlZD0hci5oYXModCwiZGlyZWN0ZWQiKXx8dC5kaXJlY3RlZCx0aGlzLl9pc011bHRpZ3JhcGg9ISFyLmhhcyh0LCJtdWx0aWdyYXBoIikmJnQubXVsdGlncmFwaCx0aGlzLl9pc0NvbXBvdW5kPSEhci5oYXModCwiY29tcG91bmQiKSYmdC5jb21wb3VuZCx0aGlzLl9sYWJlbD12b2lkIDAsdGhpcy5fZGVmYXVsdE5vZGVMYWJlbEZuPXIuY29uc3RhbnQodm9pZCAwKSx0aGlzLl9kZWZhdWx0RWRnZUxhYmVsRm49ci5jb25zdGFudCh2b2lkIDApLHRoaXMuX25vZGVzPXt9LHRoaXMuX2lzQ29tcG91bmQmJih0aGlzLl9wYXJlbnQ9e30sdGhpcy5fY2hpbGRyZW49e30sdGhpcy5fY2hpbGRyZW5bIlwwIl09e30pLHRoaXMuX2luPXt9LHRoaXMuX3ByZWRzPXt9LHRoaXMuX291dD17fSx0aGlzLl9zdWNzPXt9LHRoaXMuX2VkZ2VPYmpzPXt9LHRoaXMuX2VkZ2VMYWJlbHM9e319ZnVuY3Rpb24gYSh0LGUpe3RbZV0/dFtlXSsrOnRbZV09MX1mdW5jdGlvbiBvKHQsZSl7LS10W2VdfHxkZWxldGUgdFtlXX1mdW5jdGlvbiBzKHQsZSxuLGkpe3ZhciBhPSIiK2Usbz0iIituO2lmKCF0JiZhPm8pe3ZhciBzPWE7YT1vLG89c31yZXR1cm4gYSsiASIrbysiASIrKHIuaXNVbmRlZmluZWQoaSk/IlwwIjppKX1mdW5jdGlvbiBjKHQsZSxuLHIpe3ZhciBpPSIiK2UsYT0iIituO2lmKCF0JiZpPmEpe3ZhciBvPWk7aT1hLGE9b312YXIgcz17djppLHc6YX07cmV0dXJuIHImJihzLm5hbWU9ciksc31mdW5jdGlvbiB1KHQsZSl7cmV0dXJuIHModCxlLnYsZS53LGUubmFtZSl9aS5wcm90b3R5cGUuX25vZGVDb3VudD0wLGkucHJvdG90eXBlLl9lZGdlQ291bnQ9MCxpLnByb3RvdHlwZS5pc0RpcmVjdGVkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2lzRGlyZWN0ZWR9LGkucHJvdG90eXBlLmlzTXVsdGlncmFwaD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9pc011bHRpZ3JhcGh9LGkucHJvdG90eXBlLmlzQ29tcG91bmQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5faXNDb21wb3VuZH0saS5wcm90b3R5cGUuc2V0R3JhcGg9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX2xhYmVsPXQsdGhpc30saS5wcm90b3R5cGUuZ3JhcGg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbGFiZWx9LGkucHJvdG90eXBlLnNldERlZmF1bHROb2RlTGFiZWw9ZnVuY3Rpb24odCl7cmV0dXJuIHIuaXNGdW5jdGlvbih0KXx8KHQ9ci5jb25zdGFudCh0KSksdGhpcy5fZGVmYXVsdE5vZGVMYWJlbEZuPXQsdGhpc30saS5wcm90b3R5cGUubm9kZUNvdW50PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX25vZGVDb3VudH0saS5wcm90b3R5cGUubm9kZXM9ZnVuY3Rpb24oKXtyZXR1cm4gci5rZXlzKHRoaXMuX25vZGVzKX0saS5wcm90b3R5cGUuc291cmNlcz1mdW5jdGlvbigpe3ZhciB0PXRoaXM7cmV0dXJuIHIuZmlsdGVyKHRoaXMubm9kZXMoKSwoZnVuY3Rpb24oZSl7cmV0dXJuIHIuaXNFbXB0eSh0Ll9pbltlXSl9KSl9LGkucHJvdG90eXBlLnNpbmtzPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcztyZXR1cm4gci5maWx0ZXIodGhpcy5ub2RlcygpLChmdW5jdGlvbihlKXtyZXR1cm4gci5pc0VtcHR5KHQuX291dFtlXSl9KSl9LGkucHJvdG90eXBlLnNldE5vZGVzPWZ1bmN0aW9uKHQsZSl7dmFyIG49YXJndW1lbnRzLGk9dGhpcztyZXR1cm4gci5lYWNoKHQsKGZ1bmN0aW9uKHQpe24ubGVuZ3RoPjE/aS5zZXROb2RlKHQsZSk6aS5zZXROb2RlKHQpfSkpLHRoaXN9LGkucHJvdG90eXBlLnNldE5vZGU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gci5oYXModGhpcy5fbm9kZXMsdCk/KGFyZ3VtZW50cy5sZW5ndGg+MSYmKHRoaXMuX25vZGVzW3RdPWUpLHRoaXMpOih0aGlzLl9ub2Rlc1t0XT1hcmd1bWVudHMubGVuZ3RoPjE/ZTp0aGlzLl9kZWZhdWx0Tm9kZUxhYmVsRm4odCksdGhpcy5faXNDb21wb3VuZCYmKHRoaXMuX3BhcmVudFt0XT0iXDAiLHRoaXMuX2NoaWxkcmVuW3RdPXt9LHRoaXMuX2NoaWxkcmVuWyJcMCJdW3RdPSEwKSx0aGlzLl9pblt0XT17fSx0aGlzLl9wcmVkc1t0XT17fSx0aGlzLl9vdXRbdF09e30sdGhpcy5fc3Vjc1t0XT17fSwrK3RoaXMuX25vZGVDb3VudCx0aGlzKX0saS5wcm90b3R5cGUubm9kZT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fbm9kZXNbdF19LGkucHJvdG90eXBlLmhhc05vZGU9ZnVuY3Rpb24odCl7cmV0dXJuIHIuaGFzKHRoaXMuX25vZGVzLHQpfSxpLnByb3RvdHlwZS5yZW1vdmVOb2RlPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7aWYoci5oYXModGhpcy5fbm9kZXMsdCkpe3ZhciBuPWZ1bmN0aW9uKHQpe2UucmVtb3ZlRWRnZShlLl9lZGdlT2Jqc1t0XSl9O2RlbGV0ZSB0aGlzLl9ub2Rlc1t0XSx0aGlzLl9pc0NvbXBvdW5kJiYodGhpcy5fcmVtb3ZlRnJvbVBhcmVudHNDaGlsZExpc3QodCksZGVsZXRlIHRoaXMuX3BhcmVudFt0XSxyLmVhY2godGhpcy5jaGlsZHJlbih0KSwoZnVuY3Rpb24odCl7ZS5zZXRQYXJlbnQodCl9KSksZGVsZXRlIHRoaXMuX2NoaWxkcmVuW3RdKSxyLmVhY2goci5rZXlzKHRoaXMuX2luW3RdKSxuKSxkZWxldGUgdGhpcy5faW5bdF0sZGVsZXRlIHRoaXMuX3ByZWRzW3RdLHIuZWFjaChyLmtleXModGhpcy5fb3V0W3RdKSxuKSxkZWxldGUgdGhpcy5fb3V0W3RdLGRlbGV0ZSB0aGlzLl9zdWNzW3RdLC0tdGhpcy5fbm9kZUNvdW50fXJldHVybiB0aGlzfSxpLnByb3RvdHlwZS5zZXRQYXJlbnQ9ZnVuY3Rpb24odCxlKXtpZighdGhpcy5faXNDb21wb3VuZCl0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBzZXQgcGFyZW50IGluIGEgbm9uLWNvbXBvdW5kIGdyYXBoIik7aWYoci5pc1VuZGVmaW5lZChlKSllPSJcMCI7ZWxzZXtmb3IodmFyIG49ZSs9IiI7IXIuaXNVbmRlZmluZWQobik7bj10aGlzLnBhcmVudChuKSlpZihuPT09dCl0aHJvdyBuZXcgRXJyb3IoIlNldHRpbmcgIitlKyIgYXMgcGFyZW50IG9mICIrdCsiIHdvdWxkIGNyZWF0ZSBhIGN5Y2xlIik7dGhpcy5zZXROb2RlKGUpfXJldHVybiB0aGlzLnNldE5vZGUodCksdGhpcy5fcmVtb3ZlRnJvbVBhcmVudHNDaGlsZExpc3QodCksdGhpcy5fcGFyZW50W3RdPWUsdGhpcy5fY2hpbGRyZW5bZV1bdF09ITAsdGhpc30saS5wcm90b3R5cGUuX3JlbW92ZUZyb21QYXJlbnRzQ2hpbGRMaXN0PWZ1bmN0aW9uKHQpe2RlbGV0ZSB0aGlzLl9jaGlsZHJlblt0aGlzLl9wYXJlbnRbdF1dW3RdfSxpLnByb3RvdHlwZS5wYXJlbnQ9ZnVuY3Rpb24odCl7aWYodGhpcy5faXNDb21wb3VuZCl7dmFyIGU9dGhpcy5fcGFyZW50W3RdO2lmKCJcMCIhPT1lKXJldHVybiBlfX0saS5wcm90b3R5cGUuY2hpbGRyZW49ZnVuY3Rpb24odCl7aWYoci5pc1VuZGVmaW5lZCh0KSYmKHQ9IlwwIiksdGhpcy5faXNDb21wb3VuZCl7dmFyIGU9dGhpcy5fY2hpbGRyZW5bdF07aWYoZSlyZXR1cm4gci5rZXlzKGUpfWVsc2V7aWYoIlwwIj09PXQpcmV0dXJuIHRoaXMubm9kZXMoKTtpZih0aGlzLmhhc05vZGUodCkpcmV0dXJuW119fSxpLnByb3RvdHlwZS5wcmVkZWNlc3NvcnM9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fcHJlZHNbdF07aWYoZSlyZXR1cm4gci5rZXlzKGUpfSxpLnByb3RvdHlwZS5zdWNjZXNzb3JzPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX3N1Y3NbdF07aWYoZSlyZXR1cm4gci5rZXlzKGUpfSxpLnByb3RvdHlwZS5uZWlnaGJvcnM9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5wcmVkZWNlc3NvcnModCk7aWYoZSlyZXR1cm4gci51bmlvbihlLHRoaXMuc3VjY2Vzc29ycyh0KSl9LGkucHJvdG90eXBlLmlzTGVhZj1mdW5jdGlvbih0KXtyZXR1cm4gMD09PSh0aGlzLmlzRGlyZWN0ZWQoKT90aGlzLnN1Y2Nlc3NvcnModCk6dGhpcy5uZWlnaGJvcnModCkpLmxlbmd0aH0saS5wcm90b3R5cGUuZmlsdGVyTm9kZXM9ZnVuY3Rpb24odCl7dmFyIGU9bmV3IHRoaXMuY29uc3RydWN0b3Ioe2RpcmVjdGVkOnRoaXMuX2lzRGlyZWN0ZWQsbXVsdGlncmFwaDp0aGlzLl9pc011bHRpZ3JhcGgsY29tcG91bmQ6dGhpcy5faXNDb21wb3VuZH0pO2Uuc2V0R3JhcGgodGhpcy5ncmFwaCgpKTt2YXIgbj10aGlzO3IuZWFjaCh0aGlzLl9ub2RlcywoZnVuY3Rpb24obixyKXt0KHIpJiZlLnNldE5vZGUocixuKX0pKSxyLmVhY2godGhpcy5fZWRnZU9ianMsKGZ1bmN0aW9uKHQpe2UuaGFzTm9kZSh0LnYpJiZlLmhhc05vZGUodC53KSYmZS5zZXRFZGdlKHQsbi5lZGdlKHQpKX0pKTt2YXIgaT17fTtyZXR1cm4gdGhpcy5faXNDb21wb3VuZCYmci5lYWNoKGUubm9kZXMoKSwoZnVuY3Rpb24odCl7ZS5zZXRQYXJlbnQodCxmdW5jdGlvbiB0KHIpe3ZhciBhPW4ucGFyZW50KHIpO3JldHVybiB2b2lkIDA9PT1hfHxlLmhhc05vZGUoYSk/KGlbcl09YSxhKTphIGluIGk/aVthXTp0KGEpfSh0KSl9KSksZX0saS5wcm90b3R5cGUuc2V0RGVmYXVsdEVkZ2VMYWJlbD1mdW5jdGlvbih0KXtyZXR1cm4gci5pc0Z1bmN0aW9uKHQpfHwodD1yLmNvbnN0YW50KHQpKSx0aGlzLl9kZWZhdWx0RWRnZUxhYmVsRm49dCx0aGlzfSxpLnByb3RvdHlwZS5lZGdlQ291bnQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZWRnZUNvdW50fSxpLnByb3RvdHlwZS5lZGdlcz1mdW5jdGlvbigpe3JldHVybiByLnZhbHVlcyh0aGlzLl9lZGdlT2Jqcyl9LGkucHJvdG90eXBlLnNldFBhdGg9ZnVuY3Rpb24odCxlKXt2YXIgbj10aGlzLGk9YXJndW1lbnRzO3JldHVybiByLnJlZHVjZSh0LChmdW5jdGlvbih0LHIpe3JldHVybiBpLmxlbmd0aD4xP24uc2V0RWRnZSh0LHIsZSk6bi5zZXRFZGdlKHQscikscn0pKSx0aGlzfSxpLnByb3RvdHlwZS5zZXRFZGdlPWZ1bmN0aW9uKCl7dmFyIHQsZSxuLGksbz0hMSx1PWFyZ3VtZW50c1swXTsib2JqZWN0Ij09dHlwZW9mIHUmJm51bGwhPT11JiYidiJpbiB1Pyh0PXUudixlPXUudyxuPXUubmFtZSwyPT09YXJndW1lbnRzLmxlbmd0aCYmKGk9YXJndW1lbnRzWzFdLG89ITApKToodD11LGU9YXJndW1lbnRzWzFdLG49YXJndW1lbnRzWzNdLGFyZ3VtZW50cy5sZW5ndGg+MiYmKGk9YXJndW1lbnRzWzJdLG89ITApKSx0PSIiK3QsZT0iIitlLHIuaXNVbmRlZmluZWQobil8fChuPSIiK24pO3ZhciBsPXModGhpcy5faXNEaXJlY3RlZCx0LGUsbik7aWYoci5oYXModGhpcy5fZWRnZUxhYmVscyxsKSlyZXR1cm4gbyYmKHRoaXMuX2VkZ2VMYWJlbHNbbF09aSksdGhpcztpZighci5pc1VuZGVmaW5lZChuKSYmIXRoaXMuX2lzTXVsdGlncmFwaCl0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBzZXQgYSBuYW1lZCBlZGdlIHdoZW4gaXNNdWx0aWdyYXBoID0gZmFsc2UiKTt0aGlzLnNldE5vZGUodCksdGhpcy5zZXROb2RlKGUpLHRoaXMuX2VkZ2VMYWJlbHNbbF09bz9pOnRoaXMuX2RlZmF1bHRFZGdlTGFiZWxGbih0LGUsbik7dmFyIGg9Yyh0aGlzLl9pc0RpcmVjdGVkLHQsZSxuKTtyZXR1cm4gdD1oLnYsZT1oLncsT2JqZWN0LmZyZWV6ZShoKSx0aGlzLl9lZGdlT2Jqc1tsXT1oLGEodGhpcy5fcHJlZHNbZV0sdCksYSh0aGlzLl9zdWNzW3RdLGUpLHRoaXMuX2luW2VdW2xdPWgsdGhpcy5fb3V0W3RdW2xdPWgsdGhpcy5fZWRnZUNvdW50KyssdGhpc30saS5wcm90b3R5cGUuZWRnZT1mdW5jdGlvbih0LGUsbil7dmFyIHI9MT09PWFyZ3VtZW50cy5sZW5ndGg/dSh0aGlzLl9pc0RpcmVjdGVkLGFyZ3VtZW50c1swXSk6cyh0aGlzLl9pc0RpcmVjdGVkLHQsZSxuKTtyZXR1cm4gdGhpcy5fZWRnZUxhYmVsc1tyXX0saS5wcm90b3R5cGUuaGFzRWRnZT1mdW5jdGlvbih0LGUsbil7dmFyIGk9MT09PWFyZ3VtZW50cy5sZW5ndGg/dSh0aGlzLl9pc0RpcmVjdGVkLGFyZ3VtZW50c1swXSk6cyh0aGlzLl9pc0RpcmVjdGVkLHQsZSxuKTtyZXR1cm4gci5oYXModGhpcy5fZWRnZUxhYmVscyxpKX0saS5wcm90b3R5cGUucmVtb3ZlRWRnZT1mdW5jdGlvbih0LGUsbil7dmFyIHI9MT09PWFyZ3VtZW50cy5sZW5ndGg/dSh0aGlzLl9pc0RpcmVjdGVkLGFyZ3VtZW50c1swXSk6cyh0aGlzLl9pc0RpcmVjdGVkLHQsZSxuKSxpPXRoaXMuX2VkZ2VPYmpzW3JdO3JldHVybiBpJiYodD1pLnYsZT1pLncsZGVsZXRlIHRoaXMuX2VkZ2VMYWJlbHNbcl0sZGVsZXRlIHRoaXMuX2VkZ2VPYmpzW3JdLG8odGhpcy5fcHJlZHNbZV0sdCksbyh0aGlzLl9zdWNzW3RdLGUpLGRlbGV0ZSB0aGlzLl9pbltlXVtyXSxkZWxldGUgdGhpcy5fb3V0W3RdW3JdLHRoaXMuX2VkZ2VDb3VudC0tKSx0aGlzfSxpLnByb3RvdHlwZS5pbkVkZ2VzPWZ1bmN0aW9uKHQsZSl7dmFyIG49dGhpcy5faW5bdF07aWYobil7dmFyIGk9ci52YWx1ZXMobik7cmV0dXJuIGU/ci5maWx0ZXIoaSwoZnVuY3Rpb24odCl7cmV0dXJuIHQudj09PWV9KSk6aX19LGkucHJvdG90eXBlLm91dEVkZ2VzPWZ1bmN0aW9uKHQsZSl7dmFyIG49dGhpcy5fb3V0W3RdO2lmKG4pe3ZhciBpPXIudmFsdWVzKG4pO3JldHVybiBlP3IuZmlsdGVyKGksKGZ1bmN0aW9uKHQpe3JldHVybiB0Lnc9PT1lfSkpOml9fSxpLnByb3RvdHlwZS5ub2RlRWRnZXM9ZnVuY3Rpb24odCxlKXt2YXIgbj10aGlzLmluRWRnZXModCxlKTtpZihuKXJldHVybiBuLmNvbmNhdCh0aGlzLm91dEVkZ2VzKHQsZSkpfX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMzMpKG4oMTYpLCJNYXAiKTt0LmV4cG9ydHM9cn0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMjE3KSxpPW4oMjI0KSxhPW4oMjI2KSxvPW4oMjI3KSxzPW4oMjI4KTtmdW5jdGlvbiBjKHQpe3ZhciBlPS0xLG49bnVsbD09dD8wOnQubGVuZ3RoO2Zvcih0aGlzLmNsZWFyKCk7KytlPG47KXt2YXIgcj10W2VdO3RoaXMuc2V0KHJbMF0sclsxXSl9fWMucHJvdG90eXBlLmNsZWFyPXIsYy5wcm90b3R5cGUuZGVsZXRlPWksYy5wcm90b3R5cGUuZ2V0PWEsYy5wcm90b3R5cGUuaGFzPW8sYy5wcm90b3R5cGUuc2V0PXMsdC5leHBvcnRzPWN9LGZ1bmN0aW9uKHQsZSl7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciBuPS0xLHI9bnVsbD09dD8wOnQubGVuZ3RoOysrbjxyJiYhMSE9PWUodFtuXSxuLHQpOyk7cmV0dXJuIHR9fSxmdW5jdGlvbih0LGUpe3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4ibnVtYmVyIj09dHlwZW9mIHQmJnQ+LTEmJnQlMT09MCYmdDw9OTAwNzE5OTI1NDc0MDk5MX19LGZ1bmN0aW9uKHQsZSxuKXsoZnVuY3Rpb24odCl7dmFyIHI9bigxMDkpLGk9ZSYmIWUubm9kZVR5cGUmJmUsYT1pJiYib2JqZWN0Ij09dHlwZW9mIHQmJnQmJiF0Lm5vZGVUeXBlJiZ0LG89YSYmYS5leHBvcnRzPT09aSYmci5wcm9jZXNzLHM9ZnVuY3Rpb24oKXt0cnl7dmFyIHQ9YSYmYS5yZXF1aXJlJiZhLnJlcXVpcmUoInV0aWwiKS50eXBlcztyZXR1cm4gdHx8byYmby5iaW5kaW5nJiZvLmJpbmRpbmcoInV0aWwiKX1jYXRjaCh0KXt9fSgpO3QuZXhwb3J0cz1zfSkuY2FsbCh0aGlzLG4oNykodCkpfSxmdW5jdGlvbih0LGUsbil7dmFyIHI9big2MiksaT1uKDIzNCksYT1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O3QuZXhwb3J0cz1mdW5jdGlvbih0KXtpZighcih0KSlyZXR1cm4gaSh0KTt2YXIgZT1bXTtmb3IodmFyIG4gaW4gT2JqZWN0KHQpKWEuY2FsbCh0LG4pJiYiY29uc3RydWN0b3IiIT1uJiZlLnB1c2gobik7cmV0dXJuIGV9fSxmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxMTYpLGk9bigxMTcpLGE9T2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZSxvPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMscz1vP2Z1bmN0aW9uKHQpe3JldHVybiBudWxsPT10P1tdOih0PU9iamVjdCh0KSxyKG8odCksKGZ1bmN0aW9uKGUpe3JldHVybiBhLmNhbGwodCxlKX0pKSl9Omk7dC5leHBvcnRzPXN9LGZ1bmN0aW9uKHQsZSl7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciBuPS0xLHI9ZS5sZW5ndGgsaT10Lmxlbmd0aDsrK248cjspdFtpK25dPWVbbl07cmV0dXJuIHR9fSxmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxMjIpO3QuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT1uZXcgdC5jb25zdHJ1Y3Rvcih0LmJ5dGVMZW5ndGgpO3JldHVybiBuZXcgcihlKS5zZXQobmV3IHIodCkpLGV9fSxmdW5jdGlvbih0LGUpe3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdH19fSxmdW5jdGlvbih0LGUsbil7dC5leHBvcnRzPW4oMTI2KX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oODkpLGk9bigzMCk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQmJnIodCxlLGkpfX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMjUzKSgpO3QuZXhwb3J0cz1yfSxmdW5jdGlvbih0LGUpe3QuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT0tMSxuPUFycmF5KHQuc2l6ZSk7cmV0dXJuIHQuZm9yRWFjaCgoZnVuY3Rpb24odCl7blsrK2VdPXR9KSksbn19LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDY1KSxpPW4oNDkpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2Zvcih2YXIgbj0wLGE9KGU9cihlLHQpKS5sZW5ndGg7bnVsbCE9dCYmbjxhOyl0PXRbaShlW24rK10pXTtyZXR1cm4gbiYmbj09YT90OnZvaWQgMH19LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDUpLGk9big0MiksYT0vXC58XFsoPzpbXltcXV0qfChbIiddKSg/Oig/IVwxKVteXFxdfFxcLikqP1wxKVxdLyxvPS9eXHcqJC87dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7aWYocih0KSlyZXR1cm4hMTt2YXIgbj10eXBlb2YgdDtyZXR1cm4hKCJudW1iZXIiIT1uJiYic3ltYm9sIiE9biYmImJvb2xlYW4iIT1uJiZudWxsIT10JiYhaSh0KSl8fChvLnRlc3QodCl8fCFhLnRlc3QodCl8fG51bGwhPWUmJnQgaW4gT2JqZWN0KGUpKX19LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDI3NSksaT1uKDEzNyk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIG51bGwhPXQmJmkodCxlLHIpfX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oODQpLGk9bigyODcpO3QuZXhwb3J0cz1mdW5jdGlvbiB0KGUsbixhLG8scyl7dmFyIGM9LTEsdT1lLmxlbmd0aDtmb3IoYXx8KGE9aSksc3x8KHM9W10pOysrYzx1Oyl7dmFyIGw9ZVtjXTtuPjAmJmEobCk/bj4xP3QobCxuLTEsYSxvLHMpOnIocyxsKTpvfHwoc1tzLmxlbmd0aF09bCl9cmV0dXJuIHN9fSxmdW5jdGlvbih0LGUsbil7dmFyIHI9big0Mik7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSxuKXtmb3IodmFyIGk9LTEsYT10Lmxlbmd0aDsrK2k8YTspe3ZhciBvPXRbaV0scz1lKG8pO2lmKG51bGwhPXMmJih2b2lkIDA9PT1jP3M9PXMmJiFyKHMpOm4ocyxjKSkpdmFyIGM9cyx1PW99cmV0dXJuIHV9fSxmdW5jdGlvbih0LGUpe3QuZXhwb3J0cz1mdW5jdGlvbih0LGUsbixyKXt2YXIgaT10LngsYT10Lnksbz1pLXIueCxzPWEtci55LGM9TWF0aC5zcXJ0KGUqZSpzKnMrbipuKm8qbyksdT1NYXRoLmFicyhlKm4qby9jKTtyLng8aSYmKHU9LXUpO3ZhciBsPU1hdGguYWJzKGUqbipzL2MpO3IueTxhJiYobD0tbCk7cmV0dXJue3g6aSt1LHk6YStsfX19LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDM3MiksaT1uKDUwKSxhPW4oMzczKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlLG4pe3ZhciBvPWUubGFiZWwscz10LmFwcGVuZCgiZyIpOyJzdmciPT09ZS5sYWJlbFR5cGU/YShzLGUpOiJzdHJpbmciIT10eXBlb2Ygb3x8Imh0bWwiPT09ZS5sYWJlbFR5cGU/aShzLGUpOnIocyxlKTt2YXIgYyx1PXMubm9kZSgpLmdldEJCb3goKTtzd2l0Y2gobil7Y2FzZSJ0b3AiOmM9LWUuaGVpZ2h0LzI7YnJlYWs7Y2FzZSJib3R0b20iOmM9ZS5oZWlnaHQvMi11LmhlaWdodDticmVhaztkZWZhdWx0OmM9LXUuaGVpZ2h0LzJ9cmV0dXJuIHMuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrLXUud2lkdGgvMisiLCIrYysiKSIpLHN9fSxmdW5jdGlvbih0LGUpe30sZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHI9big5KSxpPW4oNDUpLGE9bigxNzgpLG89e3JlOi9eIygoPzpbYS1mMC05XXsyfSl7Miw0fXxbYS1mMC05XXszfSkkL2kscGFyc2U6ZnVuY3Rpb24odCl7aWYoMzU9PT10LmNoYXJDb2RlQXQoMCkpe3ZhciBlPXQubWF0Y2goby5yZSk7aWYoZSl7dmFyIG49ZVsxXSxyPXBhcnNlSW50KG4sMTYpLGE9bi5sZW5ndGgscz1hJTQ9PTAsYz1hPjQsdT1jPzE6MTcsbD1jPzg6NCxoPXM/MDotMSxmPWM/MjU1OjE1O3JldHVybiBpLmRlZmF1bHQuc2V0KHtyOihyPj5sKihoKzMpJmYpKnUsZzoocj4+bCooaCsyKSZmKSp1LGI6KHI+PmwqKGgrMSkmZikqdSxhOnM/KHImZikqdS8yNTU6MX0sdCl9fX0sc3RyaW5naWZ5OmZ1bmN0aW9uKHQpe3JldHVybiB0LmE8MT8iIyIrYS5ERUMySEVYW01hdGgucm91bmQodC5yKV0rYS5ERUMySEVYW01hdGgucm91bmQodC5nKV0rYS5ERUMySEVYW01hdGgucm91bmQodC5iKV0rci5kZWZhdWx0LnVuaXQuZnJhYzJoZXgodC5hKToiIyIrYS5ERUMySEVYW01hdGgucm91bmQodC5yKV0rYS5ERUMySEVYW01hdGgucm91bmQodC5nKV0rYS5ERUMySEVYW01hdGgucm91bmQodC5iKV19fTtlLmRlZmF1bHQ9b30sZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHI9big5KSxpPW4oNDUpLGE9bigxNSk7ZS5kZWZhdWx0PWZ1bmN0aW9uKHQsZSxuLG8pe3ZvaWQgMD09PW8mJihvPTEpO3ZhciBzPWkuZGVmYXVsdC5zZXQoe2g6ci5kZWZhdWx0LmNoYW5uZWwuY2xhbXAuaCh0KSxzOnIuZGVmYXVsdC5jaGFubmVsLmNsYW1wLnMoZSksbDpyLmRlZmF1bHQuY2hhbm5lbC5jbGFtcC5sKG4pLGE6ci5kZWZhdWx0LmNoYW5uZWwuY2xhbXAuYShvKX0pO3JldHVybiBhLmRlZmF1bHQuc3RyaW5naWZ5KHMpfX0sZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHI9bigyOSk7ZS5kZWZhdWx0PWZ1bmN0aW9uKHQpe3JldHVybiByLmRlZmF1bHQodCwiYSIpfX0sZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHI9big5KSxpPW4oMTUpO2UuZGVmYXVsdD1mdW5jdGlvbih0KXt2YXIgZT1pLmRlZmF1bHQucGFyc2UodCksbj1lLnIsYT1lLmcsbz1lLmIscz0uMjEyNipyLmRlZmF1bHQuY2hhbm5lbC50b0xpbmVhcihuKSsuNzE1MipyLmRlZmF1bHQuY2hhbm5lbC50b0xpbmVhcihhKSsuMDcyMipyLmRlZmF1bHQuY2hhbm5lbC50b0xpbmVhcihvKTtyZXR1cm4gci5kZWZhdWx0Lmxhbmcucm91bmQocyl9fSxmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgcj1uKDEwMik7ZS5kZWZhdWx0PWZ1bmN0aW9uKHQpe3JldHVybiByLmRlZmF1bHQodCk+PS41fX0sZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHI9bigzMik7ZS5kZWZhdWx0PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHIuZGVmYXVsdCh0LCJhIixlKX19LGZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByPW4oMzIpO2UuZGVmYXVsdD1mdW5jdGlvbih0LGUpe3JldHVybiByLmRlZmF1bHQodCwiYSIsLWUpfX0sZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHI9bigxNSksaT1uKDUyKTtlLmRlZmF1bHQ9ZnVuY3Rpb24odCxlKXt2YXIgbj1yLmRlZmF1bHQucGFyc2UodCksYT17fTtmb3IodmFyIG8gaW4gZSllW29dJiYoYVtvXT1uW29dK2Vbb10pO3JldHVybiBpLmRlZmF1bHQodCxhKX19LGZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByPW4oMTUpLGk9big1MSk7ZS5kZWZhdWx0PWZ1bmN0aW9uKHQsZSxuKXt2b2lkIDA9PT1uJiYobj01MCk7dmFyIGE9ci5kZWZhdWx0LnBhcnNlKHQpLG89YS5yLHM9YS5nLGM9YS5iLHU9YS5hLGw9ci5kZWZhdWx0LnBhcnNlKGUpLGg9bC5yLGY9bC5nLGQ9bC5iLHA9bC5hLGc9bi8xMDAseT0yKmctMSx2PXUtcCxtPSgoeSp2PT0tMT95Oih5K3YpLygxK3kqdikpKzEpLzIsYj0xLW0seD1vKm0raCpiLF89cyptK2YqYixrPWMqbStkKmIsdz11KmcrcCooMS1nKTtyZXR1cm4gaS5kZWZhdWx0KHgsXyxrLHcpfX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oNTMpLGk9big3OSksYT1uKDU4KSxvPW4oMjI5KSxzPW4oMjM1KSxjPW4oMTE0KSx1PW4oMTE1KSxsPW4oMjM4KSxoPW4oMjM5KSxmPW4oMTE5KSxkPW4oMjQwKSxwPW4oNDEpLGc9bigyNDQpLHk9bigyNDUpLHY9bigxMjQpLG09big1KSxiPW4oMzkpLHg9bigyNDkpLF89bigxMSksaz1uKDI1MSksdz1uKDMwKSxFPXt9O0VbIltvYmplY3QgQXJndW1lbnRzXSJdPUVbIltvYmplY3QgQXJyYXldIl09RVsiW29iamVjdCBBcnJheUJ1ZmZlcl0iXT1FWyJbb2JqZWN0IERhdGFWaWV3XSJdPUVbIltvYmplY3QgQm9vbGVhbl0iXT1FWyJbb2JqZWN0IERhdGVdIl09RVsiW29iamVjdCBGbG9hdDMyQXJyYXldIl09RVsiW29iamVjdCBGbG9hdDY0QXJyYXldIl09RVsiW29iamVjdCBJbnQ4QXJyYXldIl09RVsiW29iamVjdCBJbnQxNkFycmF5XSJdPUVbIltvYmplY3QgSW50MzJBcnJheV0iXT1FWyJbb2JqZWN0IE1hcF0iXT1FWyJbb2JqZWN0IE51bWJlcl0iXT1FWyJbb2JqZWN0IE9iamVjdF0iXT1FWyJbb2JqZWN0IFJlZ0V4cF0iXT1FWyJbb2JqZWN0IFNldF0iXT1FWyJbb2JqZWN0IFN0cmluZ10iXT1FWyJbb2JqZWN0IFN5bWJvbF0iXT1FWyJbb2JqZWN0IFVpbnQ4QXJyYXldIl09RVsiW29iamVjdCBVaW50OENsYW1wZWRBcnJheV0iXT1FWyJbb2JqZWN0IFVpbnQxNkFycmF5XSJdPUVbIltvYmplY3QgVWludDMyQXJyYXldIl09ITAsRVsiW29iamVjdCBFcnJvcl0iXT1FWyJbb2JqZWN0IEZ1bmN0aW9uXSJdPUVbIltvYmplY3QgV2Vha01hcF0iXT0hMSx0LmV4cG9ydHM9ZnVuY3Rpb24gdChlLG4sVCxDLFMsQSl7dmFyIE0sTz0xJm4sRD0yJm4sTj00Jm47aWYoVCYmKE09Uz9UKGUsQyxTLEEpOlQoZSkpLHZvaWQgMCE9PU0pcmV0dXJuIE07aWYoIV8oZSkpcmV0dXJuIGU7dmFyIEI9bShlKTtpZihCKXtpZihNPWcoZSksIU8pcmV0dXJuIHUoZSxNKX1lbHNle3ZhciBMPXAoZSksRj0iW29iamVjdCBGdW5jdGlvbl0iPT1MfHwiW29iamVjdCBHZW5lcmF0b3JGdW5jdGlvbl0iPT1MO2lmKGIoZSkpcmV0dXJuIGMoZSxPKTtpZigiW29iamVjdCBPYmplY3RdIj09THx8IltvYmplY3QgQXJndW1lbnRzXSI9PUx8fEYmJiFTKXtpZihNPUR8fEY/e306dihlKSwhTylyZXR1cm4gRD9oKGUscyhNLGUpKTpsKGUsbyhNLGUpKX1lbHNle2lmKCFFW0xdKXJldHVybiBTP2U6e307TT15KGUsTCxPKX19QXx8KEE9bmV3IHIpO3ZhciBQPUEuZ2V0KGUpO2lmKFApcmV0dXJuIFA7QS5zZXQoZSxNKSxrKGUpP2UuZm9yRWFjaCgoZnVuY3Rpb24ocil7TS5hZGQodChyLG4sVCxyLGUsQSkpfSkpOngoZSkmJmUuZm9yRWFjaCgoZnVuY3Rpb24ocixpKXtNLnNldChpLHQocixuLFQsaSxlLEEpKX0pKTt2YXIgST1OP0Q/ZDpmOkQ/a2V5c0luOncsaj1CP3ZvaWQgMDpJKGUpO3JldHVybiBpKGp8fGUsKGZ1bmN0aW9uKHIsaSl7aiYmKHI9ZVtpPXJdKSxhKE0saSx0KHIsbixULGksZSxBKSl9KSksTX19LGZ1bmN0aW9uKHQsZSxuKXsoZnVuY3Rpb24oZSl7dmFyIG49Im9iamVjdCI9PXR5cGVvZiBlJiZlJiZlLk9iamVjdD09PU9iamVjdCYmZTt0LmV4cG9ydHM9bn0pLmNhbGwodGhpcyxuKDIxMSkpfSxmdW5jdGlvbih0LGUpe3ZhciBuPUZ1bmN0aW9uLnByb3RvdHlwZS50b1N0cmluZzt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7aWYobnVsbCE9dCl7dHJ5e3JldHVybiBuLmNhbGwodCl9Y2F0Y2godCl7fXRyeXtyZXR1cm4gdCsiIn1jYXRjaCh0KXt9fXJldHVybiIifX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMzMpLGk9ZnVuY3Rpb24oKXt0cnl7dmFyIHQ9cihPYmplY3QsImRlZmluZVByb3BlcnR5Iik7cmV0dXJuIHQoe30sIiIse30pLHR9Y2F0Y2godCl7fX0oKTt0LmV4cG9ydHM9aX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMjMwKSxpPW4oNDcpLGE9big1KSxvPW4oMzkpLHM9big2MCksYz1uKDQ4KSx1PU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIG49YSh0KSxsPSFuJiZpKHQpLGg9IW4mJiFsJiZvKHQpLGY9IW4mJiFsJiYhaCYmYyh0KSxkPW58fGx8fGh8fGYscD1kP3IodC5sZW5ndGgsU3RyaW5nKTpbXSxnPXAubGVuZ3RoO2Zvcih2YXIgeSBpbiB0KSFlJiYhdS5jYWxsKHQseSl8fGQmJigibGVuZ3RoIj09eXx8aCYmKCJvZmZzZXQiPT15fHwicGFyZW50Ij09eSl8fGYmJigiYnVmZmVyIj09eXx8ImJ5dGVMZW5ndGgiPT15fHwiYnl0ZU9mZnNldCI9PXkpfHxzKHksZykpfHxwLnB1c2goeSk7cmV0dXJuIHB9fSxmdW5jdGlvbih0LGUpe3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3JldHVybiBmdW5jdGlvbihuKXtyZXR1cm4gdChlKG4pKX19fSxmdW5jdGlvbih0LGUsbil7KGZ1bmN0aW9uKHQpe3ZhciByPW4oMTYpLGk9ZSYmIWUubm9kZVR5cGUmJmUsYT1pJiYib2JqZWN0Ij09dHlwZW9mIHQmJnQmJiF0Lm5vZGVUeXBlJiZ0LG89YSYmYS5leHBvcnRzPT09aT9yLkJ1ZmZlcjp2b2lkIDAscz1vP28uYWxsb2NVbnNhZmU6dm9pZCAwO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2lmKGUpcmV0dXJuIHQuc2xpY2UoKTt2YXIgbj10Lmxlbmd0aCxyPXM/cyhuKTpuZXcgdC5jb25zdHJ1Y3RvcihuKTtyZXR1cm4gdC5jb3B5KHIpLHJ9fSkuY2FsbCh0aGlzLG4oNykodCkpfSxmdW5jdGlvbih0LGUpe3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciBuPS0xLHI9dC5sZW5ndGg7Zm9yKGV8fChlPUFycmF5KHIpKTsrK248cjspZVtuXT10W25dO3JldHVybiBlfX0sZnVuY3Rpb24odCxlKXt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtmb3IodmFyIG49LTEscj1udWxsPT10PzA6dC5sZW5ndGgsaT0wLGE9W107KytuPHI7KXt2YXIgbz10W25dO2UobyxuLHQpJiYoYVtpKytdPW8pfXJldHVybiBhfX0sZnVuY3Rpb24odCxlKXt0LmV4cG9ydHM9ZnVuY3Rpb24oKXtyZXR1cm5bXX19LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDg0KSxpPW4oNjMpLGE9big4Myksbz1uKDExNykscz1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzP2Z1bmN0aW9uKHQpe2Zvcih2YXIgZT1bXTt0OylyKGUsYSh0KSksdD1pKHQpO3JldHVybiBlfTpvO3QuZXhwb3J0cz1zfSxmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxMjApLGk9big4MyksYT1uKDMwKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIHIodCxhLGkpfX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oODQpLGk9big1KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlLG4pe3ZhciBhPWUodCk7cmV0dXJuIGkodCk/YTpyKGEsbih0KSl9fSxmdW5jdGlvbih0LGUsbil7dmFyIHI9bigzMykobigxNiksIlNldCIpO3QuZXhwb3J0cz1yfSxmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxNikuVWludDhBcnJheTt0LmV4cG9ydHM9cn0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oODUpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciBuPWU/cih0LmJ1ZmZlcik6dC5idWZmZXI7cmV0dXJuIG5ldyB0LmNvbnN0cnVjdG9yKG4sdC5ieXRlT2Zmc2V0LHQubGVuZ3RoKX19LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDEyNSksaT1uKDYzKSxhPW4oNjIpO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4iZnVuY3Rpb24iIT10eXBlb2YgdC5jb25zdHJ1Y3Rvcnx8YSh0KT97fTpyKGkodCkpfX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTEpLGk9T2JqZWN0LmNyZWF0ZSxhPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe31yZXR1cm4gZnVuY3Rpb24oZSl7aWYoIXIoZSkpcmV0dXJue307aWYoaSlyZXR1cm4gaShlKTt0LnByb3RvdHlwZT1lO3ZhciBuPW5ldyB0O3JldHVybiB0LnByb3RvdHlwZT12b2lkIDAsbn19KCk7dC5leHBvcnRzPWF9LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDc5KSxpPW4oNjQpLGE9bigxMjcpLG89big1KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4obyh0KT9yOmkpKHQsYShlKSl9fSxmdW5jdGlvbih0LGUsbil7dmFyIHI9bigzNSk7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6cn19LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDExNiksaT1uKDI1NSksYT1uKDI1KSxvPW4oNSk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuKG8odCk/cjppKSh0LGEoZSwzKSl9fSxmdW5jdGlvbih0LGUsbil7dmFyIHI9bigyNTgpLGk9bigyMSk7dC5leHBvcnRzPWZ1bmN0aW9uIHQoZSxuLGEsbyxzKXtyZXR1cm4gZT09PW58fChudWxsPT1lfHxudWxsPT1ufHwhaShlKSYmIWkobik/ZSE9ZSYmbiE9bjpyKGUsbixhLG8sdCxzKSl9fSxmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxMzEpLGk9bigyNjEpLGE9bigxMzIpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUsbixvLHMsYyl7dmFyIHU9MSZuLGw9dC5sZW5ndGgsaD1lLmxlbmd0aDtpZihsIT1oJiYhKHUmJmg+bCkpcmV0dXJuITE7dmFyIGY9Yy5nZXQodCk7aWYoZiYmYy5nZXQoZSkpcmV0dXJuIGY9PWU7dmFyIGQ9LTEscD0hMCxnPTImbj9uZXcgcjp2b2lkIDA7Zm9yKGMuc2V0KHQsZSksYy5zZXQoZSx0KTsrK2Q8bDspe3ZhciB5PXRbZF0sdj1lW2RdO2lmKG8pdmFyIG09dT9vKHYseSxkLGUsdCxjKTpvKHksdixkLHQsZSxjKTtpZih2b2lkIDAhPT1tKXtpZihtKWNvbnRpbnVlO3A9ITE7YnJlYWt9aWYoZyl7aWYoIWkoZSwoZnVuY3Rpb24odCxlKXtpZighYShnLGUpJiYoeT09PXR8fHMoeSx0LG4sbyxjKSkpcmV0dXJuIGcucHVzaChlKX0pKSl7cD0hMTticmVha319ZWxzZSBpZih5IT09diYmIXMoeSx2LG4sbyxjKSl7cD0hMTticmVha319cmV0dXJuIGMuZGVsZXRlKHQpLGMuZGVsZXRlKGUpLHB9fSxmdW5jdGlvbih0LGUsbil7dmFyIHI9big3OCksaT1uKDI1OSksYT1uKDI2MCk7ZnVuY3Rpb24gbyh0KXt2YXIgZT0tMSxuPW51bGw9PXQ/MDp0Lmxlbmd0aDtmb3IodGhpcy5fX2RhdGFfXz1uZXcgcjsrK2U8bjspdGhpcy5hZGQodFtlXSl9by5wcm90b3R5cGUuYWRkPW8ucHJvdG90eXBlLnB1c2g9aSxvLnByb3RvdHlwZS5oYXM9YSx0LmV4cG9ydHM9b30sZnVuY3Rpb24odCxlKXt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5oYXMoZSl9fSxmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxMSk7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiB0PT10JiYhcih0KX19LGZ1bmN0aW9uKHQsZSl7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKG4pe3JldHVybiBudWxsIT1uJiYoblt0XT09PWUmJih2b2lkIDAhPT1lfHx0IGluIE9iamVjdChuKSkpfX19LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDI3MSk7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBudWxsPT10PyIiOnIodCl9fSxmdW5jdGlvbih0LGUsbil7dmFyIHI9bigyNzIpLGk9bigxMzcpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3JldHVybiBudWxsIT10JiZpKHQsZSxyKX19LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDY1KSxpPW4oNDcpLGE9big1KSxvPW4oNjApLHM9big4MCksYz1uKDQ5KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlLG4pe2Zvcih2YXIgdT0tMSxsPShlPXIoZSx0KSkubGVuZ3RoLGg9ITE7Kyt1PGw7KXt2YXIgZj1jKGVbdV0pO2lmKCEoaD1udWxsIT10JiZuKHQsZikpKWJyZWFrO3Q9dFtmXX1yZXR1cm4gaHx8Kyt1IT1sP2g6ISEobD1udWxsPT10PzA6dC5sZW5ndGgpJiZzKGwpJiZvKGYsbCkmJihhKHQpfHxpKHQpKX19LGZ1bmN0aW9uKHQsZSl7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gbnVsbD09ZT92b2lkIDA6ZVt0XX19fSxmdW5jdGlvbih0LGUpe3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gdm9pZCAwPT09dH19LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDY2KSxpPW4oMjUpLGE9bigxNDEpLG89big1KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4obyh0KT9yOmEpKHQsaShlLDMpKX19LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDY0KSxpPW4oMjQpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciBuPS0xLGE9aSh0KT9BcnJheSh0Lmxlbmd0aCk6W107cmV0dXJuIHIodCwoZnVuY3Rpb24odCxyLGkpe2FbKytuXT1lKHQscixpKX0pKSxhfX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMjc3KSxpPW4oNjQpLGE9bigyNSksbz1uKDI3OCkscz1uKDUpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUsbil7dmFyIGM9cyh0KT9yOm8sdT1hcmd1bWVudHMubGVuZ3RoPDM7cmV0dXJuIGModCxhKGUsNCksbix1LGkpfX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMjg4KSxpPU1hdGgubWF4O3QuZXhwb3J0cz1mdW5jdGlvbih0LGUsbil7cmV0dXJuIGU9aSh2b2lkIDA9PT1lP3QubGVuZ3RoLTE6ZSwwKSxmdW5jdGlvbigpe2Zvcih2YXIgYT1hcmd1bWVudHMsbz0tMSxzPWkoYS5sZW5ndGgtZSwwKSxjPUFycmF5KHMpOysrbzxzOyljW29dPWFbZStvXTtvPS0xO2Zvcih2YXIgdT1BcnJheShlKzEpOysrbzxlOyl1W29dPWFbb107cmV0dXJuIHVbZV09bihjKSxyKHQsdGhpcyx1KX19fSxmdW5jdGlvbih0LGUsbil7dmFyIHI9bigyODkpLGk9bigyOTApKHIpO3QuZXhwb3J0cz1pfSxmdW5jdGlvbih0LGUpe3QuZXhwb3J0cz1mdW5jdGlvbih0LGUsbixyKXtmb3IodmFyIGk9dC5sZW5ndGgsYT1uKyhyPzE6LTEpO3I/YS0tOisrYTxpOylpZihlKHRbYV0sYSx0KSlyZXR1cm4gYTtyZXR1cm4tMX19LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDI0KSxpPW4oMjEpO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gaSh0KSYmcih0KX19LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDI5OSksaT1uKDMwKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIG51bGw9PXQ/W106cih0LGkodCkpfX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTApLGk9bigxNDkpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUsbixyKXtyZXR1cm4gZnVuY3Rpb24odCxlLG4scil7dmFyIGEsbyxzPXt9LGM9bmV3IGksdT1mdW5jdGlvbih0KXt2YXIgZT10LnYhPT1hP3Qudjp0Lncscj1zW2VdLGk9bih0KSx1PW8uZGlzdGFuY2UraTtpZihpPDApdGhyb3cgbmV3IEVycm9yKCJkaWprc3RyYSBkb2VzIG5vdCBhbGxvdyBuZWdhdGl2ZSBlZGdlIHdlaWdodHMuIEJhZCBlZGdlOiAiK3QrIiBXZWlnaHQ6ICIraSk7dTxyLmRpc3RhbmNlJiYoci5kaXN0YW5jZT11LHIucHJlZGVjZXNzb3I9YSxjLmRlY3JlYXNlKGUsdSkpfTt0Lm5vZGVzKCkuZm9yRWFjaCgoZnVuY3Rpb24odCl7dmFyIG49dD09PWU/MDpOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFk7c1t0XT17ZGlzdGFuY2U6bn0sYy5hZGQodCxuKX0pKTtmb3IoO2Muc2l6ZSgpPjAmJihhPWMucmVtb3ZlTWluKCksKG89c1thXSkuZGlzdGFuY2UhPT1OdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFkpOylyKGEpLmZvckVhY2godSk7cmV0dXJuIHN9KHQsU3RyaW5nKGUpLG58fGEscnx8ZnVuY3Rpb24oZSl7cmV0dXJuIHQub3V0RWRnZXMoZSl9KX07dmFyIGE9ci5jb25zdGFudCgxKX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTApO2Z1bmN0aW9uIGkoKXt0aGlzLl9hcnI9W10sdGhpcy5fa2V5SW5kaWNlcz17fX10LmV4cG9ydHM9aSxpLnByb3RvdHlwZS5zaXplPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2Fyci5sZW5ndGh9LGkucHJvdG90eXBlLmtleXM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYXJyLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIHQua2V5fSkpfSxpLnByb3RvdHlwZS5oYXM9ZnVuY3Rpb24odCl7cmV0dXJuIHIuaGFzKHRoaXMuX2tleUluZGljZXMsdCl9LGkucHJvdG90eXBlLnByaW9yaXR5PWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX2tleUluZGljZXNbdF07aWYodm9pZCAwIT09ZSlyZXR1cm4gdGhpcy5fYXJyW2VdLnByaW9yaXR5fSxpLnByb3RvdHlwZS5taW49ZnVuY3Rpb24oKXtpZigwPT09dGhpcy5zaXplKCkpdGhyb3cgbmV3IEVycm9yKCJRdWV1ZSB1bmRlcmZsb3ciKTtyZXR1cm4gdGhpcy5fYXJyWzBdLmtleX0saS5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKHQsZSl7dmFyIG49dGhpcy5fa2V5SW5kaWNlcztpZih0PVN0cmluZyh0KSwhci5oYXMobix0KSl7dmFyIGk9dGhpcy5fYXJyLGE9aS5sZW5ndGg7cmV0dXJuIG5bdF09YSxpLnB1c2goe2tleTp0LHByaW9yaXR5OmV9KSx0aGlzLl9kZWNyZWFzZShhKSwhMH1yZXR1cm4hMX0saS5wcm90b3R5cGUucmVtb3ZlTWluPWZ1bmN0aW9uKCl7dGhpcy5fc3dhcCgwLHRoaXMuX2Fyci5sZW5ndGgtMSk7dmFyIHQ9dGhpcy5fYXJyLnBvcCgpO3JldHVybiBkZWxldGUgdGhpcy5fa2V5SW5kaWNlc1t0LmtleV0sdGhpcy5faGVhcGlmeSgwKSx0LmtleX0saS5wcm90b3R5cGUuZGVjcmVhc2U9ZnVuY3Rpb24odCxlKXt2YXIgbj10aGlzLl9rZXlJbmRpY2VzW3RdO2lmKGU+dGhpcy5fYXJyW25dLnByaW9yaXR5KXRocm93IG5ldyBFcnJvcigiTmV3IHByaW9yaXR5IGlzIGdyZWF0ZXIgdGhhbiBjdXJyZW50IHByaW9yaXR5LiBLZXk6ICIrdCsiIE9sZDogIit0aGlzLl9hcnJbbl0ucHJpb3JpdHkrIiBOZXc6ICIrZSk7dGhpcy5fYXJyW25dLnByaW9yaXR5PWUsdGhpcy5fZGVjcmVhc2Uobil9LGkucHJvdG90eXBlLl9oZWFwaWZ5PWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX2FycixuPTIqdCxyPW4rMSxpPXQ7bjxlLmxlbmd0aCYmKGk9ZVtuXS5wcmlvcml0eTxlW2ldLnByaW9yaXR5P246aSxyPGUubGVuZ3RoJiYoaT1lW3JdLnByaW9yaXR5PGVbaV0ucHJpb3JpdHk/cjppKSxpIT09dCYmKHRoaXMuX3N3YXAodCxpKSx0aGlzLl9oZWFwaWZ5KGkpKSl9LGkucHJvdG90eXBlLl9kZWNyZWFzZT1mdW5jdGlvbih0KXtmb3IodmFyIGUsbj10aGlzLl9hcnIscj1uW3RdLnByaW9yaXR5OzAhPT10JiYhKG5bZT10Pj4xXS5wcmlvcml0eTxyKTspdGhpcy5fc3dhcCh0LGUpLHQ9ZX0saS5wcm90b3R5cGUuX3N3YXA9ZnVuY3Rpb24odCxlKXt2YXIgbj10aGlzLl9hcnIscj10aGlzLl9rZXlJbmRpY2VzLGk9blt0XSxhPW5bZV07blt0XT1hLG5bZV09aSxyW2Eua2V5XT10LHJbaS5rZXldPWV9fSxmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxMCk7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPTAsbj1bXSxpPXt9LGE9W107cmV0dXJuIHQubm9kZXMoKS5mb3JFYWNoKChmdW5jdGlvbihvKXtyLmhhcyhpLG8pfHxmdW5jdGlvbiBvKHMpe3ZhciBjPWlbc109e29uU3RhY2s6ITAsbG93bGluazplLGluZGV4OmUrK307aWYobi5wdXNoKHMpLHQuc3VjY2Vzc29ycyhzKS5mb3JFYWNoKChmdW5jdGlvbih0KXtyLmhhcyhpLHQpP2lbdF0ub25TdGFjayYmKGMubG93bGluaz1NYXRoLm1pbihjLmxvd2xpbmssaVt0XS5pbmRleCkpOihvKHQpLGMubG93bGluaz1NYXRoLm1pbihjLmxvd2xpbmssaVt0XS5sb3dsaW5rKSl9KSksYy5sb3dsaW5rPT09Yy5pbmRleCl7dmFyIHUsbD1bXTtkb3t1PW4ucG9wKCksaVt1XS5vblN0YWNrPSExLGwucHVzaCh1KX13aGlsZShzIT09dSk7YS5wdXNoKGwpfX0obyl9KSksYX19LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDEwKTtmdW5jdGlvbiBpKHQpe3ZhciBlPXt9LG49e30saT1bXTtpZihyLmVhY2godC5zaW5rcygpLChmdW5jdGlvbiBvKHMpe2lmKHIuaGFzKG4scykpdGhyb3cgbmV3IGE7ci5oYXMoZSxzKXx8KG5bc109ITAsZVtzXT0hMCxyLmVhY2godC5wcmVkZWNlc3NvcnMocyksbyksZGVsZXRlIG5bc10saS5wdXNoKHMpKX0pKSxyLnNpemUoZSkhPT10Lm5vZGVDb3VudCgpKXRocm93IG5ldyBhO3JldHVybiBpfWZ1bmN0aW9uIGEoKXt9dC5leHBvcnRzPWksaS5DeWNsZUV4Y2VwdGlvbj1hLGEucHJvdG90eXBlPW5ldyBFcnJvcn0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTApO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUsbil7ci5pc0FycmF5KGUpfHwoZT1bZV0pO3ZhciBpPSh0LmlzRGlyZWN0ZWQoKT90LnN1Y2Nlc3NvcnM6dC5uZWlnaGJvcnMpLmJpbmQodCksYT1bXSxvPXt9O3JldHVybiByLmVhY2goZSwoZnVuY3Rpb24oZSl7aWYoIXQuaGFzTm9kZShlKSl0aHJvdyBuZXcgRXJyb3IoIkdyYXBoIGRvZXMgbm90IGhhdmUgbm9kZTogIitlKTshZnVuY3Rpb24gdChlLG4saSxhLG8scyl7ci5oYXMoYSxuKXx8KGFbbl09ITAsaXx8cy5wdXNoKG4pLHIuZWFjaChvKG4pLChmdW5jdGlvbihuKXt0KGUsbixpLGEsbyxzKX0pKSxpJiZzLnB1c2gobikpfSh0LGUsInBvc3QiPT09bixvLGksYSl9KSksYX19LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcjt0cnl7cj1uKDE4KX1jYXRjaCh0KXt9cnx8KHI9d2luZG93LmRhZ3JlKSx0LmV4cG9ydHM9cn0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oNjcpLGk9bigzNiksYT1uKDY4KSxvPW4oNDApLHM9T2JqZWN0LnByb3RvdHlwZSxjPXMuaGFzT3duUHJvcGVydHksdT1yKChmdW5jdGlvbih0LGUpe3Q9T2JqZWN0KHQpO3ZhciBuPS0xLHI9ZS5sZW5ndGgsdT1yPjI/ZVsyXTp2b2lkIDA7Zm9yKHUmJmEoZVswXSxlWzFdLHUpJiYocj0xKTsrK248cjspZm9yKHZhciBsPWVbbl0saD1vKGwpLGY9LTEsZD1oLmxlbmd0aDsrK2Y8ZDspe3ZhciBwPWhbZl0sZz10W3BdOyh2b2lkIDA9PT1nfHxpKGcsc1twXSkmJiFjLmNhbGwodCxwKSkmJih0W3BdPWxbcF0pfXJldHVybiB0fSkpO3QuZXhwb3J0cz11fSxmdW5jdGlvbih0LGUsbil7dmFyIHI9bigzMTgpO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gdD8odD1yKHQpKT09PTEvMHx8dD09PS0xLzA/MTc5NzY5MzEzNDg2MjMxNTdlMjkyKih0PDA/LTE6MSk6dD09dD90OjA6MD09PXQ/dDowfX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oOTQpO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4obnVsbD09dD8wOnQubGVuZ3RoKT9yKHQsMSk6W119fSxmdW5jdGlvbih0LGUsbil7dmFyIHI9big1OSksaT1uKDM2KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlLG4peyh2b2lkIDA9PT1ufHxpKHRbZV0sbikpJiYodm9pZCAwIT09bnx8ZSBpbiB0KXx8cih0LGUsbil9fSxmdW5jdGlvbih0LGUsbil7dmFyIHI9bigzNCksaT1uKDYzKSxhPW4oMjEpLG89RnVuY3Rpb24ucHJvdG90eXBlLHM9T2JqZWN0LnByb3RvdHlwZSxjPW8udG9TdHJpbmcsdT1zLmhhc093blByb3BlcnR5LGw9Yy5jYWxsKE9iamVjdCk7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe2lmKCFhKHQpfHwiW29iamVjdCBPYmplY3RdIiE9cih0KSlyZXR1cm4hMTt2YXIgZT1pKHQpO2lmKG51bGw9PT1lKXJldHVybiEwO3ZhciBuPXUuY2FsbChlLCJjb25zdHJ1Y3RvciIpJiZlLmNvbnN0cnVjdG9yO3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBuJiZuIGluc3RhbmNlb2YgbiYmYy5jYWxsKG4pPT1sfX0sZnVuY3Rpb24odCxlKXt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtpZigoImNvbnN0cnVjdG9yIiE9PWV8fCJmdW5jdGlvbiIhPXR5cGVvZiB0W2VdKSYmIl9fcHJvdG9fXyIhPWUpcmV0dXJuIHRbZV19fSxmdW5jdGlvbih0LGUpe3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3JldHVybiB0PGV9fSxmdW5jdGlvbih0LGUsbil7dmFyIHI9bigzMzIpLGk9bigzMzUpKChmdW5jdGlvbih0LGUpe3JldHVybiBudWxsPT10P3t9OnIodCxlKX0pKTt0LmV4cG9ydHM9aX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMzM2KSgpO3QuZXhwb3J0cz1yfSxmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxMzUpLGk9MDt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9KytpO3JldHVybiByKHQpK2V9fSxmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oNCksaT1uKDE3KS5HcmFwaCxhPW4oNjkpLnNsYWNrO2Z1bmN0aW9uIG8odCxlKXtyZXR1cm4gci5mb3JFYWNoKHQubm9kZXMoKSwoZnVuY3Rpb24gbihpKXtyLmZvckVhY2goZS5ub2RlRWRnZXMoaSksKGZ1bmN0aW9uKHIpe3ZhciBvPXIudixzPWk9PT1vP3IudzpvO3QuaGFzTm9kZShzKXx8YShlLHIpfHwodC5zZXROb2RlKHMse30pLHQuc2V0RWRnZShpLHMse30pLG4ocykpfSkpfSkpLHQubm9kZUNvdW50KCl9ZnVuY3Rpb24gcyh0LGUpe3JldHVybiByLm1pbkJ5KGUuZWRnZXMoKSwoZnVuY3Rpb24obil7aWYodC5oYXNOb2RlKG4udikhPT10Lmhhc05vZGUobi53KSlyZXR1cm4gYShlLG4pfSkpfWZ1bmN0aW9uIGModCxlLG4pe3IuZm9yRWFjaCh0Lm5vZGVzKCksKGZ1bmN0aW9uKHQpe2Uubm9kZSh0KS5yYW5rKz1ufSkpfXQuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZSxuLHI9bmV3IGkoe2RpcmVjdGVkOiExfSksdT10Lm5vZGVzKClbMF0sbD10Lm5vZGVDb3VudCgpO3Iuc2V0Tm9kZSh1LHt9KTtmb3IoO28ocix0KTxsOyllPXMocix0KSxuPXIuaGFzTm9kZShlLnYpP2EodCxlKTotYSh0LGUpLGMocix0LG4pO3JldHVybiByfX0sZnVuY3Rpb24odCxlKXt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5pbnRlcnNlY3QoZSl9fSxmdW5jdGlvbih0LGUsbil7dmFyIHI9big5Nik7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gcih0LGUsZSxuKX19LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDM2OSk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSxuKXt2YXIgaT10LngsYT10Lnksbz1bXSxzPU51bWJlci5QT1NJVElWRV9JTkZJTklUWSxjPU51bWJlci5QT1NJVElWRV9JTkZJTklUWTtlLmZvckVhY2goKGZ1bmN0aW9uKHQpe3M9TWF0aC5taW4ocyx0LngpLGM9TWF0aC5taW4oYyx0LnkpfSkpO2Zvcih2YXIgdT1pLXQud2lkdGgvMi1zLGw9YS10LmhlaWdodC8yLWMsaD0wO2g8ZS5sZW5ndGg7aCsrKXt2YXIgZj1lW2hdLGQ9ZVtoPGUubGVuZ3RoLTE/aCsxOjBdLHA9cih0LG4se3g6dStmLngseTpsK2YueX0se3g6dStkLngseTpsK2QueX0pO3AmJm8ucHVzaChwKX1pZighby5sZW5ndGgpcmV0dXJuIGNvbnNvbGUubG9nKCJOTyBJTlRFUlNFQ1RJT04gRk9VTkQsIFJFVFVSTiBOT0RFIENFTlRFUiIsdCksdDtvLmxlbmd0aD4xJiZvLnNvcnQoKGZ1bmN0aW9uKHQsZSl7dmFyIHI9dC54LW4ueCxpPXQueS1uLnksYT1NYXRoLnNxcnQocipyK2kqaSksbz1lLngtbi54LHM9ZS55LW4ueSxjPU1hdGguc3FydChvKm8rcypzKTtyZXR1cm4gYTxjPy0xOmE9PT1jPzA6MX0pKTtyZXR1cm4gb1swXX19LGZ1bmN0aW9uKHQsZSl7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIG4scixpPXQueCxhPXQueSxvPWUueC1pLHM9ZS55LWEsYz10LndpZHRoLzIsdT10LmhlaWdodC8yO01hdGguYWJzKHMpKmM+TWF0aC5hYnMobykqdT8oczwwJiYodT0tdSksbj0wPT09cz8wOnUqby9zLHI9dSk6KG88MCYmKGM9LWMpLG49YyxyPTA9PT1vPzA6YypzL28pO3JldHVybnt4Omkrbix5OmErcn19fSxmdW5jdGlvbih0LGUsbil7dC5leHBvcnRzPWZ1bmN0aW9uIHQoZSl7InVzZSBzdHJpY3QiO3ZhciBuPS9eXDArL2cscj0vW1wwXHJcZl0vZyxpPS86ICovZyxhPS96b298Z3JhLyxvPS8oWyw6IF0pKHRyYW5zZm9ybSkvZyxzPS8sK1xzKig/IVteKF0qWyldKS9nLGM9LyArXHMqKD8hW14oXSpbKV0pL2csdT0vICpbXDBdICovZyxsPS8sXHIrPy9nLGg9LyhbXHRcclxuIF0pKlxmPyYvZyxmPS86Z2xvYmFsXCgoKD86W15cKFwpXFtcXV0qfFxbLipcXXxcKFteXChcKV0qXCkpKilcKS9nLGQ9L1xXKy9nLHA9L0Aoa1x3KylccyooXFMqKVxzKi8sZz0vOjoocGxhY2UpL2cseT0vOihyZWFkLW9ubHkpL2csdj0vXHMrKD89W3tcXTs9Oj5dKS9nLG09LyhbW309Oj5dKVxzKy9nLGI9Lyhce1tee10rPyk7KD89XH0pL2cseD0vXHN7Mix9L2csXz0vKFteXChdKSg6KykgKi9nLGs9L1tzdmhdXHcrLVt0YmxyXXsyfS8sdz0vXChccyooLiopXHMqXCkvZyxFPS8oW1xzXFNdKj8pOy9nLFQ9Ly1zZWxmfGZsZXgtL2csQz0vW15dKj8oOltycF1bZWxdYVtcdy1dKylbXl0qLyxTPS9zdHJldGNofDpccypcdytcLSg/OmNvbnRlfGF2YWlsKS8sQT0vKFteLV0pKGltYWdlLXNldFwoKS8sTT0iLXdlYmtpdC0iLE89Ii1tb3otIixEPSItbXMtIixOPTEsQj0xLEw9MCxGPTEsUD0xLEk9MSxqPTAsUj0wLFk9MCx6PVtdLFU9W10sJD0wLFc9bnVsbCxWPTAsSD0xLEc9IiIscT0iIixYPSIiO2Z1bmN0aW9uIFoodCxlLGksYSxvKXtmb3IodmFyIHMsYyxsPTAsaD0wLGY9MCxkPTAsdj0wLG09MCxiPTAseD0wLGs9MCxFPTAsVD0wLEM9MCxTPTAsQT0wLE89MCxEPTAsaj0wLFU9MCxXPTAsUT1pLmxlbmd0aCxpdD1RLTEsYXQ9IiIsb3Q9IiIsc3Q9IiIsY3Q9IiIsdXQ9IiIsbHQ9IiI7TzxROyl7aWYoYj1pLmNoYXJDb2RlQXQoTyksTz09PWl0JiZoK2QrZitsIT09MCYmKDAhPT1oJiYoYj00Nz09PWg/MTA6NDcpLGQ9Zj1sPTAsUSsrLGl0KyspLGgrZCtmK2w9PT0wKXtpZihPPT09aXQmJihEPjAmJihvdD1vdC5yZXBsYWNlKHIsIiIpKSxvdC50cmltKCkubGVuZ3RoPjApKXtzd2l0Y2goYil7Y2FzZSAzMjpjYXNlIDk6Y2FzZSA1OTpjYXNlIDEzOmNhc2UgMTA6YnJlYWs7ZGVmYXVsdDpvdCs9aS5jaGFyQXQoTyl9Yj01OX1pZigxPT09ailzd2l0Y2goYil7Y2FzZSAxMjM6Y2FzZSAxMjU6Y2FzZSA1OTpjYXNlIDM0OmNhc2UgMzk6Y2FzZSA0MDpjYXNlIDQxOmNhc2UgNDQ6aj0wO2Nhc2UgOTpjYXNlIDEzOmNhc2UgMTA6Y2FzZSAzMjpicmVhaztkZWZhdWx0OmZvcihqPTAsVz1PLHY9YixPLS0sYj01OTtXPFE7KXN3aXRjaChpLmNoYXJDb2RlQXQoVysrKSl7Y2FzZSAxMDpjYXNlIDEzOmNhc2UgNTk6KytPLGI9dixXPVE7YnJlYWs7Y2FzZSA1ODpEPjAmJigrK08sYj12KTtjYXNlIDEyMzpXPVF9fXN3aXRjaChiKXtjYXNlIDEyMzpmb3Iodj0ob3Q9b3QudHJpbSgpKS5jaGFyQ29kZUF0KDApLFQ9MSxXPSsrTztPPFE7KXtzd2l0Y2goYj1pLmNoYXJDb2RlQXQoTykpe2Nhc2UgMTIzOlQrKzticmVhaztjYXNlIDEyNTpULS07YnJlYWs7Y2FzZSA0Nzpzd2l0Y2gobT1pLmNoYXJDb2RlQXQoTysxKSl7Y2FzZSA0MjpjYXNlIDQ3Ok89cnQobSxPLGl0LGkpfWJyZWFrO2Nhc2UgOTE6YisrO2Nhc2UgNDA6YisrO2Nhc2UgMzQ6Y2FzZSAzOTpmb3IoO08rKzxpdCYmaS5jaGFyQ29kZUF0KE8pIT09YjspO31pZigwPT09VClicmVhaztPKyt9c3dpdGNoKHN0PWkuc3Vic3RyaW5nKFcsTyksMD09PXYmJih2PShvdD1vdC5yZXBsYWNlKG4sIiIpLnRyaW0oKSkuY2hhckNvZGVBdCgwKSksdil7Y2FzZSA2NDpzd2l0Y2goRD4wJiYob3Q9b3QucmVwbGFjZShyLCIiKSksbT1vdC5jaGFyQ29kZUF0KDEpKXtjYXNlIDEwMDpjYXNlIDEwOTpjYXNlIDExNTpjYXNlIDQ1OnM9ZTticmVhaztkZWZhdWx0OnM9en1pZihXPShzdD1aKGUscyxzdCxtLG8rMSkpLmxlbmd0aCxZPjAmJjA9PT1XJiYoVz1vdC5sZW5ndGgpLCQ+MCYmKGM9bnQoMyxzdCxzPUooeixvdCxVKSxlLEIsTixXLG0sbyxhKSxvdD1zLmpvaW4oIiIpLHZvaWQgMCE9PWMmJjA9PT0oVz0oc3Q9Yy50cmltKCkpLmxlbmd0aCkmJihtPTAsc3Q9IiIpKSxXPjApc3dpdGNoKG0pe2Nhc2UgMTE1Om90PW90LnJlcGxhY2UodyxldCk7Y2FzZSAxMDA6Y2FzZSAxMDk6Y2FzZSA0NTpzdD1vdCsieyIrc3QrIn0iO2JyZWFrO2Nhc2UgMTA3OnN0PShvdD1vdC5yZXBsYWNlKHAsIiQxICQyIisoSD4wP0c6IiIpKSkrInsiK3N0KyJ9IixzdD0xPT09UHx8Mj09PVAmJnR0KCJAIitzdCwzKT8iQCIrTStzdCsiQCIrc3Q6IkAiK3N0O2JyZWFrO2RlZmF1bHQ6c3Q9b3Qrc3QsMTEyPT09YSYmKGN0Kz1zdCxzdD0iIil9ZWxzZSBzdD0iIjticmVhaztkZWZhdWx0OnN0PVooZSxKKGUsb3QsVSksc3QsYSxvKzEpfXV0Kz1zdCxDPTAsaj0wLEE9MCxEPTAsVT0wLFM9MCxvdD0iIixzdD0iIixiPWkuY2hhckNvZGVBdCgrK08pO2JyZWFrO2Nhc2UgMTI1OmNhc2UgNTk6aWYoKFc9KG90PShEPjA/b3QucmVwbGFjZShyLCIiKTpvdCkudHJpbSgpKS5sZW5ndGgpPjEpc3dpdGNoKDA9PT1BJiYoNDU9PT0odj1vdC5jaGFyQ29kZUF0KDApKXx8dj45NiYmdjwxMjMpJiYoVz0ob3Q9b3QucmVwbGFjZSgiICIsIjoiKSkubGVuZ3RoKSwkPjAmJnZvaWQgMCE9PShjPW50KDEsb3QsZSx0LEIsTixjdC5sZW5ndGgsYSxvLGEpKSYmMD09PShXPShvdD1jLnRyaW0oKSkubGVuZ3RoKSYmKG90PSJcMFwwIiksdj1vdC5jaGFyQ29kZUF0KDApLG09b3QuY2hhckNvZGVBdCgxKSx2KXtjYXNlIDA6YnJlYWs7Y2FzZSA2NDppZigxMDU9PT1tfHw5OT09PW0pe2x0Kz1vdCtpLmNoYXJBdChPKTticmVha31kZWZhdWx0OmlmKDU4PT09b3QuY2hhckNvZGVBdChXLTEpKWJyZWFrO2N0Kz1LKG90LHYsbSxvdC5jaGFyQ29kZUF0KDIpKX1DPTAsaj0wLEE9MCxEPTAsVT0wLG90PSIiLGI9aS5jaGFyQ29kZUF0KCsrTyl9fXN3aXRjaChiKXtjYXNlIDEzOmNhc2UgMTA6aWYoaCtkK2YrbCtSPT09MClzd2l0Y2goRSl7Y2FzZSA0MTpjYXNlIDM5OmNhc2UgMzQ6Y2FzZSA2NDpjYXNlIDEyNjpjYXNlIDYyOmNhc2UgNDI6Y2FzZSA0MzpjYXNlIDQ3OmNhc2UgNDU6Y2FzZSA1ODpjYXNlIDQ0OmNhc2UgNTk6Y2FzZSAxMjM6Y2FzZSAxMjU6YnJlYWs7ZGVmYXVsdDpBPjAmJihqPTEpfTQ3PT09aD9oPTA6RitDPT09MCYmMTA3IT09YSYmb3QubGVuZ3RoPjAmJihEPTEsb3QrPSJcMCIpLCQqVj4wJiZudCgwLG90LGUsdCxCLE4sY3QubGVuZ3RoLGEsbyxhKSxOPTEsQisrO2JyZWFrO2Nhc2UgNTk6Y2FzZSAxMjU6aWYoaCtkK2YrbD09PTApe04rKzticmVha31kZWZhdWx0OnN3aXRjaChOKyssYXQ9aS5jaGFyQXQoTyksYil7Y2FzZSA5OmNhc2UgMzI6aWYoZCtsK2g9PT0wKXN3aXRjaCh4KXtjYXNlIDQ0OmNhc2UgNTg6Y2FzZSA5OmNhc2UgMzI6YXQ9IiI7YnJlYWs7ZGVmYXVsdDozMiE9PWImJihhdD0iICIpfWJyZWFrO2Nhc2UgMDphdD0iXFwwIjticmVhaztjYXNlIDEyOmF0PSJcXGYiO2JyZWFrO2Nhc2UgMTE6YXQ9IlxcdiI7YnJlYWs7Y2FzZSAzODpkK2grbD09PTAmJkY+MCYmKFU9MSxEPTEsYXQ9IlxmIithdCk7YnJlYWs7Y2FzZSAxMDg6aWYoZCtoK2wrTD09PTAmJkE+MClzd2l0Y2goTy1BKXtjYXNlIDI6MTEyPT09eCYmNTg9PT1pLmNoYXJDb2RlQXQoTy0zKSYmKEw9eCk7Y2FzZSA4OjExMT09PWsmJihMPWspfWJyZWFrO2Nhc2UgNTg6ZCtoK2w9PT0wJiYoQT1PKTticmVhaztjYXNlIDQ0OmgrZitkK2w9PT0wJiYoRD0xLGF0Kz0iXHIiKTticmVhaztjYXNlIDM0OmNhc2UgMzk6MD09PWgmJihkPWQ9PT1iPzA6MD09PWQ/YjpkKTticmVhaztjYXNlIDkxOmQraCtmPT09MCYmbCsrO2JyZWFrO2Nhc2UgOTM6ZCtoK2Y9PT0wJiZsLS07YnJlYWs7Y2FzZSA0MTpkK2grbD09PTAmJmYtLTticmVhaztjYXNlIDQwOmlmKGQraCtsPT09MCl7aWYoMD09PUMpc3dpdGNoKDIqeCszKmspe2Nhc2UgNTMzOmJyZWFrO2RlZmF1bHQ6VD0wLEM9MX1mKyt9YnJlYWs7Y2FzZSA2NDpoK2YrZCtsK0ErUz09PTAmJihTPTEpO2JyZWFrO2Nhc2UgNDI6Y2FzZSA0NzppZihkK2wrZj4wKWJyZWFrO3N3aXRjaChoKXtjYXNlIDA6c3dpdGNoKDIqYiszKmkuY2hhckNvZGVBdChPKzEpKXtjYXNlIDIzNTpoPTQ3O2JyZWFrO2Nhc2UgMjIwOlc9TyxoPTQyfWJyZWFrO2Nhc2UgNDI6NDc9PT1iJiY0Mj09PXgmJlcrMiE9PU8mJigzMz09PWkuY2hhckNvZGVBdChXKzIpJiYoY3QrPWkuc3Vic3RyaW5nKFcsTysxKSksYXQ9IiIsaD0wKX19aWYoMD09PWgpe2lmKEYrZCtsK1M9PT0wJiYxMDchPT1hJiY1OSE9PWIpc3dpdGNoKGIpe2Nhc2UgNDQ6Y2FzZSAxMjY6Y2FzZSA2MjpjYXNlIDQzOmNhc2UgNDE6Y2FzZSA0MDppZigwPT09Qyl7c3dpdGNoKHgpe2Nhc2UgOTpjYXNlIDMyOmNhc2UgMTA6Y2FzZSAxMzphdCs9IlwwIjticmVhaztkZWZhdWx0OmF0PSJcMCIrYXQrKDQ0PT09Yj8iIjoiXDAiKX1EPTF9ZWxzZSBzd2l0Y2goYil7Y2FzZSA0MDpBKzc9PT1PJiYxMDg9PT14JiYoQT0wKSxDPSsrVDticmVhaztjYXNlIDQxOjA9PShDPS0tVCkmJihEPTEsYXQrPSJcMCIpfWJyZWFrO2Nhc2UgOTpjYXNlIDMyOnN3aXRjaCh4KXtjYXNlIDA6Y2FzZSAxMjM6Y2FzZSAxMjU6Y2FzZSA1OTpjYXNlIDQ0OmNhc2UgMTI6Y2FzZSA5OmNhc2UgMzI6Y2FzZSAxMDpjYXNlIDEzOmJyZWFrO2RlZmF1bHQ6MD09PUMmJihEPTEsYXQrPSJcMCIpfX1vdCs9YXQsMzIhPT1iJiY5IT09YiYmKEU9Yil9fWs9eCx4PWIsTysrfWlmKFc9Y3QubGVuZ3RoLFk+MCYmMD09PVcmJjA9PT11dC5sZW5ndGgmJjA9PT1lWzBdLmxlbmd0aD09MCYmKDEwOSE9PWF8fDE9PT1lLmxlbmd0aCYmKEY+MD9xOlgpPT09ZVswXSkmJihXPWUuam9pbigiLCIpLmxlbmd0aCsyKSxXPjApe2lmKHM9MD09PUYmJjEwNyE9PWE/ZnVuY3Rpb24odCl7Zm9yKHZhciBlLG4saT0wLGE9dC5sZW5ndGgsbz1BcnJheShhKTtpPGE7KytpKXtmb3IodmFyIHM9dFtpXS5zcGxpdCh1KSxjPSIiLGw9MCxoPTAsZj0wLGQ9MCxwPXMubGVuZ3RoO2w8cDsrK2wpaWYoISgwPT09KGg9KG49c1tsXSkubGVuZ3RoKSYmcD4xKSl7aWYoZj1jLmNoYXJDb2RlQXQoYy5sZW5ndGgtMSksZD1uLmNoYXJDb2RlQXQoMCksZT0iIiwwIT09bClzd2l0Y2goZil7Y2FzZSA0MjpjYXNlIDEyNjpjYXNlIDYyOmNhc2UgNDM6Y2FzZSAzMjpjYXNlIDQwOmJyZWFrO2RlZmF1bHQ6ZT0iICJ9c3dpdGNoKGQpe2Nhc2UgMzg6bj1lK3E7Y2FzZSAxMjY6Y2FzZSA2MjpjYXNlIDQzOmNhc2UgMzI6Y2FzZSA0MTpjYXNlIDQwOmJyZWFrO2Nhc2UgOTE6bj1lK24rcTticmVhaztjYXNlIDU4OnN3aXRjaCgyKm4uY2hhckNvZGVBdCgxKSszKm4uY2hhckNvZGVBdCgyKSl7Y2FzZSA1MzA6aWYoST4wKXtuPWUrbi5zdWJzdHJpbmcoOCxoLTEpO2JyZWFrfWRlZmF1bHQ6KGw8MXx8c1tsLTFdLmxlbmd0aDwxKSYmKG49ZStxK24pfWJyZWFrO2Nhc2UgNDQ6ZT0iIjtkZWZhdWx0Om49aD4xJiZuLmluZGV4T2YoIjoiKT4wP2Urbi5yZXBsYWNlKF8sIiQxIitxKyIkMiIpOmUrbitxfWMrPW59b1tpXT1jLnJlcGxhY2UociwiIikudHJpbSgpfXJldHVybiBvfShlKTplLCQ+MCYmdm9pZCAwIT09KGM9bnQoMixjdCxzLHQsQixOLFcsYSxvLGEpKSYmMD09PShjdD1jKS5sZW5ndGgpcmV0dXJuIGx0K2N0K3V0O2lmKGN0PXMuam9pbigiLCIpKyJ7IitjdCsifSIsUCpMIT0wKXtzd2l0Y2goMiE9PVB8fHR0KGN0LDIpfHwoTD0wKSxMKXtjYXNlIDExMTpjdD1jdC5yZXBsYWNlKHksIjotbW96LSQxIikrY3Q7YnJlYWs7Y2FzZSAxMTI6Y3Q9Y3QucmVwbGFjZShnLCI6Oi13ZWJraXQtaW5wdXQtJDEiKStjdC5yZXBsYWNlKGcsIjo6LW1vei0kMSIpK2N0LnJlcGxhY2UoZywiOi1tcy1pbnB1dC0kMSIpK2N0fUw9MH19cmV0dXJuIGx0K2N0K3V0fWZ1bmN0aW9uIEoodCxlLG4pe3ZhciByPWUudHJpbSgpLnNwbGl0KGwpLGk9cixhPXIubGVuZ3RoLG89dC5sZW5ndGg7c3dpdGNoKG8pe2Nhc2UgMDpjYXNlIDE6Zm9yKHZhciBzPTAsYz0wPT09bz8iIjp0WzBdKyIgIjtzPGE7KytzKWlbc109UShjLGlbc10sbixvKS50cmltKCk7YnJlYWs7ZGVmYXVsdDpzPTA7dmFyIHU9MDtmb3IoaT1bXTtzPGE7KytzKWZvcih2YXIgaD0wO2g8bzsrK2gpaVt1KytdPVEodFtoXSsiICIscltzXSxuLG8pLnRyaW0oKX1yZXR1cm4gaX1mdW5jdGlvbiBRKHQsZSxuLHIpe3ZhciBpPWUsYT1pLmNoYXJDb2RlQXQoMCk7c3dpdGNoKGE8MzMmJihhPShpPWkudHJpbSgpKS5jaGFyQ29kZUF0KDApKSxhKXtjYXNlIDM4OnN3aXRjaChGK3Ipe2Nhc2UgMDpjYXNlIDE6aWYoMD09PXQudHJpbSgpLmxlbmd0aClicmVhaztkZWZhdWx0OnJldHVybiBpLnJlcGxhY2UoaCwiJDEiK3QudHJpbSgpKX1icmVhaztjYXNlIDU4OnN3aXRjaChpLmNoYXJDb2RlQXQoMSkpe2Nhc2UgMTAzOmlmKEk+MCYmRj4wKXJldHVybiBpLnJlcGxhY2UoZiwiJDEiKS5yZXBsYWNlKGgsIiQxIitYKTticmVhaztkZWZhdWx0OnJldHVybiB0LnRyaW0oKStpLnJlcGxhY2UoaCwiJDEiK3QudHJpbSgpKX1kZWZhdWx0OmlmKG4qRj4wJiZpLmluZGV4T2YoIlxmIik+MClyZXR1cm4gaS5yZXBsYWNlKGgsKDU4PT09dC5jaGFyQ29kZUF0KDApPyIiOiIkMSIpK3QudHJpbSgpKX1yZXR1cm4gdCtpfWZ1bmN0aW9uIEsodCxlLG4scil7dmFyIHUsbD0wLGg9dCsiOyIsZj0yKmUrMypuKzQqcjtpZig5NDQ9PT1mKXJldHVybiBmdW5jdGlvbih0KXt2YXIgZT10Lmxlbmd0aCxuPXQuaW5kZXhPZigiOiIsOSkrMSxyPXQuc3Vic3RyaW5nKDAsbikudHJpbSgpLGk9dC5zdWJzdHJpbmcobixlLTEpLnRyaW0oKTtzd2l0Y2godC5jaGFyQ29kZUF0KDkpKkgpe2Nhc2UgMDpicmVhaztjYXNlIDQ1OmlmKDExMCE9PXQuY2hhckNvZGVBdCgxMCkpYnJlYWs7ZGVmYXVsdDp2YXIgYT1pLnNwbGl0KChpPSIiLHMpKSxvPTA7Zm9yKG49MCxlPWEubGVuZ3RoO288ZTtuPTAsKytvKXtmb3IodmFyIHU9YVtvXSxsPXUuc3BsaXQoYyk7dT1sW25dOyl7dmFyIGg9dS5jaGFyQ29kZUF0KDApO2lmKDE9PT1IJiYoaD42NCYmaDw5MHx8aD45NiYmaDwxMjN8fDk1PT09aHx8NDU9PT1oJiY0NSE9PXUuY2hhckNvZGVBdCgxKSkpc3dpdGNoKGlzTmFOKHBhcnNlRmxvYXQodSkpKygtMSE9PXUuaW5kZXhPZigiKCIpKSl7Y2FzZSAxOnN3aXRjaCh1KXtjYXNlImluZmluaXRlIjpjYXNlImFsdGVybmF0ZSI6Y2FzZSJiYWNrd2FyZHMiOmNhc2UicnVubmluZyI6Y2FzZSJub3JtYWwiOmNhc2UiZm9yd2FyZHMiOmNhc2UiYm90aCI6Y2FzZSJub25lIjpjYXNlImxpbmVhciI6Y2FzZSJlYXNlIjpjYXNlImVhc2UtaW4iOmNhc2UiZWFzZS1vdXQiOmNhc2UiZWFzZS1pbi1vdXQiOmNhc2UicGF1c2VkIjpjYXNlInJldmVyc2UiOmNhc2UiYWx0ZXJuYXRlLXJldmVyc2UiOmNhc2UiaW5oZXJpdCI6Y2FzZSJpbml0aWFsIjpjYXNlInVuc2V0IjpjYXNlInN0ZXAtc3RhcnQiOmNhc2Uic3RlcC1lbmQiOmJyZWFrO2RlZmF1bHQ6dSs9R319bFtuKytdPXV9aSs9KDA9PT1vPyIiOiIsIikrbC5qb2luKCIgIil9fXJldHVybiBpPXIraSsiOyIsMT09PVB8fDI9PT1QJiZ0dChpLDEpP00raStpOml9KGgpO2lmKDA9PT1QfHwyPT09UCYmIXR0KGgsMSkpcmV0dXJuIGg7c3dpdGNoKGYpe2Nhc2UgMTAxNTpyZXR1cm4gOTc9PT1oLmNoYXJDb2RlQXQoMTApP00raCtoOmg7Y2FzZSA5NTE6cmV0dXJuIDExNj09PWguY2hhckNvZGVBdCgzKT9NK2graDpoO2Nhc2UgOTYzOnJldHVybiAxMTA9PT1oLmNoYXJDb2RlQXQoNSk/TStoK2g6aDtjYXNlIDEwMDk6aWYoMTAwIT09aC5jaGFyQ29kZUF0KDQpKWJyZWFrO2Nhc2UgOTY5OmNhc2UgOTQyOnJldHVybiBNK2graDtjYXNlIDk3ODpyZXR1cm4gTStoK08raCtoO2Nhc2UgMTAxOTpjYXNlIDk4MzpyZXR1cm4gTStoK08raCtEK2graDtjYXNlIDg4MzpyZXR1cm4gNDU9PT1oLmNoYXJDb2RlQXQoOCk/TStoK2g6aC5pbmRleE9mKCJpbWFnZS1zZXQoIiwxMSk+MD9oLnJlcGxhY2UoQSwiJDEtd2Via2l0LSQyIikraDpoO2Nhc2UgOTMyOmlmKDQ1PT09aC5jaGFyQ29kZUF0KDQpKXN3aXRjaChoLmNoYXJDb2RlQXQoNSkpe2Nhc2UgMTAzOnJldHVybiBNKyJib3gtIitoLnJlcGxhY2UoIi1ncm93IiwiIikrTStoK0QraC5yZXBsYWNlKCJncm93IiwicG9zaXRpdmUiKStoO2Nhc2UgMTE1OnJldHVybiBNK2grRCtoLnJlcGxhY2UoInNocmluayIsIm5lZ2F0aXZlIikraDtjYXNlIDk4OnJldHVybiBNK2grRCtoLnJlcGxhY2UoImJhc2lzIiwicHJlZmVycmVkLXNpemUiKStofXJldHVybiBNK2grRCtoK2g7Y2FzZSA5NjQ6cmV0dXJuIE0raCtEKyJmbGV4LSIraCtoO2Nhc2UgMTAyMzppZig5OSE9PWguY2hhckNvZGVBdCg4KSlicmVhaztyZXR1cm4gdT1oLnN1YnN0cmluZyhoLmluZGV4T2YoIjoiLDE1KSkucmVwbGFjZSgiZmxleC0iLCIiKS5yZXBsYWNlKCJzcGFjZS1iZXR3ZWVuIiwianVzdGlmeSIpLE0rImJveC1wYWNrIit1K00raCtEKyJmbGV4LXBhY2siK3UraDtjYXNlIDEwMDU6cmV0dXJuIGEudGVzdChoKT9oLnJlcGxhY2UoaSwiOiIrTSkraC5yZXBsYWNlKGksIjoiK08pK2g6aDtjYXNlIDFlMzpzd2l0Y2gobD0odT1oLnN1YnN0cmluZygxMykudHJpbSgpKS5pbmRleE9mKCItIikrMSx1LmNoYXJDb2RlQXQoMCkrdS5jaGFyQ29kZUF0KGwpKXtjYXNlIDIyNjp1PWgucmVwbGFjZShrLCJ0YiIpO2JyZWFrO2Nhc2UgMjMyOnU9aC5yZXBsYWNlKGssInRiLXJsIik7YnJlYWs7Y2FzZSAyMjA6dT1oLnJlcGxhY2UoaywibHIiKTticmVhaztkZWZhdWx0OnJldHVybiBofXJldHVybiBNK2grRCt1K2g7Y2FzZSAxMDE3OmlmKC0xPT09aC5pbmRleE9mKCJzdGlja3kiLDkpKXJldHVybiBoO2Nhc2UgOTc1OnN3aXRjaChsPShoPXQpLmxlbmd0aC0xMCxmPSh1PSgzMz09PWguY2hhckNvZGVBdChsKT9oLnN1YnN0cmluZygwLGwpOmgpLnN1YnN0cmluZyh0LmluZGV4T2YoIjoiLDcpKzEpLnRyaW0oKSkuY2hhckNvZGVBdCgwKSsoMHx1LmNoYXJDb2RlQXQoNykpKXtjYXNlIDIwMzppZih1LmNoYXJDb2RlQXQoOCk8MTExKWJyZWFrO2Nhc2UgMTE1Omg9aC5yZXBsYWNlKHUsTSt1KSsiOyIraDticmVhaztjYXNlIDIwNzpjYXNlIDEwMjpoPWgucmVwbGFjZSh1LE0rKGY+MTAyPyJpbmxpbmUtIjoiIikrImJveCIpKyI7IitoLnJlcGxhY2UodSxNK3UpKyI7IitoLnJlcGxhY2UodSxEK3UrImJveCIpKyI7IitofXJldHVybiBoKyI7IjtjYXNlIDkzODppZig0NT09PWguY2hhckNvZGVBdCg1KSlzd2l0Y2goaC5jaGFyQ29kZUF0KDYpKXtjYXNlIDEwNTpyZXR1cm4gdT1oLnJlcGxhY2UoIi1pdGVtcyIsIiIpLE0raCtNKyJib3gtIit1K0QrImZsZXgtIit1K2g7Y2FzZSAxMTU6cmV0dXJuIE0raCtEKyJmbGV4LWl0ZW0tIitoLnJlcGxhY2UoVCwiIikraDtkZWZhdWx0OnJldHVybiBNK2grRCsiZmxleC1saW5lLXBhY2siK2gucmVwbGFjZSgiYWxpZ24tY29udGVudCIsIiIpLnJlcGxhY2UoVCwiIikraH1icmVhaztjYXNlIDk3MzpjYXNlIDk4OTppZig0NSE9PWguY2hhckNvZGVBdCgzKXx8MTIyPT09aC5jaGFyQ29kZUF0KDQpKWJyZWFrO2Nhc2UgOTMxOmNhc2UgOTUzOmlmKCEwPT09Uy50ZXN0KHQpKXJldHVybiAxMTU9PT0odT10LnN1YnN0cmluZyh0LmluZGV4T2YoIjoiKSsxKSkuY2hhckNvZGVBdCgwKT9LKHQucmVwbGFjZSgic3RyZXRjaCIsImZpbGwtYXZhaWxhYmxlIiksZSxuLHIpLnJlcGxhY2UoIjpmaWxsLWF2YWlsYWJsZSIsIjpzdHJldGNoIik6aC5yZXBsYWNlKHUsTSt1KStoLnJlcGxhY2UodSxPK3UucmVwbGFjZSgiZmlsbC0iLCIiKSkraDticmVhaztjYXNlIDk2MjppZihoPU0raCsoMTAyPT09aC5jaGFyQ29kZUF0KDUpP0QraDoiIikraCxuK3I9PT0yMTEmJjEwNT09PWguY2hhckNvZGVBdCgxMykmJmguaW5kZXhPZigidHJhbnNmb3JtIiwxMCk+MClyZXR1cm4gaC5zdWJzdHJpbmcoMCxoLmluZGV4T2YoIjsiLDI3KSsxKS5yZXBsYWNlKG8sIiQxLXdlYmtpdC0kMiIpK2h9cmV0dXJuIGh9ZnVuY3Rpb24gdHQodCxlKXt2YXIgbj10LmluZGV4T2YoMT09PWU/IjoiOiJ7Iikscj10LnN1YnN0cmluZygwLDMhPT1lP246MTApLGk9dC5zdWJzdHJpbmcobisxLHQubGVuZ3RoLTEpO3JldHVybiBXKDIhPT1lP3I6ci5yZXBsYWNlKEMsIiQxIiksaSxlKX1mdW5jdGlvbiBldCh0LGUpe3ZhciBuPUsoZSxlLmNoYXJDb2RlQXQoMCksZS5jaGFyQ29kZUF0KDEpLGUuY2hhckNvZGVBdCgyKSk7cmV0dXJuIG4hPT1lKyI7Ij9uLnJlcGxhY2UoRSwiIG9yICgkMSkiKS5zdWJzdHJpbmcoNCk6IigiK2UrIikifWZ1bmN0aW9uIG50KHQsZSxuLHIsaSxhLG8scyxjLHUpe2Zvcih2YXIgbCxoPTAsZj1lO2g8JDsrK2gpc3dpdGNoKGw9VVtoXS5jYWxsKGF0LHQsZixuLHIsaSxhLG8scyxjLHUpKXtjYXNlIHZvaWQgMDpjYXNlITE6Y2FzZSEwOmNhc2UgbnVsbDpicmVhaztkZWZhdWx0OmY9bH1pZihmIT09ZSlyZXR1cm4gZn1mdW5jdGlvbiBydCh0LGUsbixyKXtmb3IodmFyIGk9ZSsxO2k8bjsrK2kpc3dpdGNoKHIuY2hhckNvZGVBdChpKSl7Y2FzZSA0NzppZig0Mj09PXQmJjQyPT09ci5jaGFyQ29kZUF0KGktMSkmJmUrMiE9PWkpcmV0dXJuIGkrMTticmVhaztjYXNlIDEwOmlmKDQ3PT09dClyZXR1cm4gaSsxfXJldHVybiBpfWZ1bmN0aW9uIGl0KHQpe2Zvcih2YXIgZSBpbiB0KXt2YXIgbj10W2VdO3N3aXRjaChlKXtjYXNlImtleWZyYW1lIjpIPTB8bjticmVhaztjYXNlImdsb2JhbCI6ST0wfG47YnJlYWs7Y2FzZSJjYXNjYWRlIjpGPTB8bjticmVhaztjYXNlImNvbXByZXNzIjpqPTB8bjticmVhaztjYXNlInNlbWljb2xvbiI6Uj0wfG47YnJlYWs7Y2FzZSJwcmVzZXJ2ZSI6WT0wfG47YnJlYWs7Y2FzZSJwcmVmaXgiOlc9bnVsbCxuPyJmdW5jdGlvbiIhPXR5cGVvZiBuP1A9MTooUD0yLFc9bik6UD0wfX1yZXR1cm4gaXR9ZnVuY3Rpb24gYXQoZSxuKXtpZih2b2lkIDAhPT10aGlzJiZ0aGlzLmNvbnN0cnVjdG9yPT09YXQpcmV0dXJuIHQoZSk7dmFyIGk9ZSxhPWkuY2hhckNvZGVBdCgwKTthPDMzJiYoYT0oaT1pLnRyaW0oKSkuY2hhckNvZGVBdCgwKSksSD4wJiYoRz1pLnJlcGxhY2UoZCw5MT09PWE/IiI6Ii0iKSksYT0xLDE9PT1GP1g9aTpxPWk7dmFyIG8scz1bWF07JD4wJiZ2b2lkIDAhPT0obz1udCgtMSxuLHMscyxCLE4sMCwwLDAsMCkpJiYic3RyaW5nIj09dHlwZW9mIG8mJihuPW8pO3ZhciBjPVooeixzLG4sMCwwKTtyZXR1cm4gJD4wJiZ2b2lkIDAhPT0obz1udCgtMixjLHMscyxCLE4sYy5sZW5ndGgsMCwwLDApKSYmInN0cmluZyIhPXR5cGVvZihjPW8pJiYoYT0wKSxHPSIiLFg9IiIscT0iIixMPTAsQj0xLE49MSxqKmE9PTA/YzpmdW5jdGlvbih0KXtyZXR1cm4gdC5yZXBsYWNlKHIsIiIpLnJlcGxhY2UodiwiIikucmVwbGFjZShtLCIkMSIpLnJlcGxhY2UoYiwiJDEiKS5yZXBsYWNlKHgsIiAiKX0oYyl9cmV0dXJuIGF0LnVzZT1mdW5jdGlvbiB0KGUpe3N3aXRjaChlKXtjYXNlIHZvaWQgMDpjYXNlIG51bGw6JD1VLmxlbmd0aD0wO2JyZWFrO2RlZmF1bHQ6aWYoImZ1bmN0aW9uIj09dHlwZW9mIGUpVVskKytdPWU7ZWxzZSBpZigib2JqZWN0Ij09dHlwZW9mIGUpZm9yKHZhciBuPTAscj1lLmxlbmd0aDtuPHI7KytuKXQoZVtuXSk7ZWxzZSBWPTB8ISFlfXJldHVybiB0fSxhdC5zZXQ9aXQsdm9pZCAwIT09ZSYmaXQoZSksYXR9KG51bGwpfSxmdW5jdGlvbih0LGUpe3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3JldHVybiB0LmludGVyc2VjdChlKX19LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj17Ii4vbG9jYWxlIjo5OCwiLi9sb2NhbGUuanMiOjk4fTtmdW5jdGlvbiBpKHQpe3ZhciBlPWEodCk7cmV0dXJuIG4oZSl9ZnVuY3Rpb24gYSh0KXtpZighbi5vKHIsdCkpe3ZhciBlPW5ldyBFcnJvcigiQ2Fubm90IGZpbmQgbW9kdWxlICciK3QrIiciKTt0aHJvdyBlLmNvZGU9Ik1PRFVMRV9OT1RfRk9VTkQiLGV9cmV0dXJuIHJbdF19aS5rZXlzPWZ1bmN0aW9uKCl7cmV0dXJuIE9iamVjdC5rZXlzKHIpfSxpLnJlc29sdmU9YSx0LmV4cG9ydHM9aSxpLmlkPTE3MX0sZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHI9big1MSk7ZS5oZXg9ci5kZWZhdWx0O3ZhciBpPW4oNTEpO2UucmdiPWkuZGVmYXVsdDt2YXIgYT1uKDUxKTtlLnJnYmE9YS5kZWZhdWx0O3ZhciBvPW4oMTAwKTtlLmhzbD1vLmRlZmF1bHQ7dmFyIHM9bigxMDApO2UuaHNsYT1zLmRlZmF1bHQ7dmFyIGM9bigyOSk7ZS5jaGFubmVsPWMuZGVmYXVsdDt2YXIgdT1uKDE4Mik7ZS5yZWQ9dS5kZWZhdWx0O3ZhciBsPW4oMTgzKTtlLmdyZWVuPWwuZGVmYXVsdDt2YXIgaD1uKDE4NCk7ZS5ibHVlPWguZGVmYXVsdDt2YXIgZj1uKDE4NSk7ZS5odWU9Zi5kZWZhdWx0O3ZhciBkPW4oMTg2KTtlLnNhdHVyYXRpb249ZC5kZWZhdWx0O3ZhciBwPW4oMTg3KTtlLmxpZ2h0bmVzcz1wLmRlZmF1bHQ7dmFyIGc9bigxMDEpO2UuYWxwaGE9Zy5kZWZhdWx0O3ZhciB5PW4oMTAxKTtlLm9wYWNpdHk9eS5kZWZhdWx0O3ZhciB2PW4oMTAyKTtlLmx1bWluYW5jZT12LmRlZmF1bHQ7dmFyIG09bigxODgpO2UuaXNEYXJrPW0uZGVmYXVsdDt2YXIgYj1uKDEwMyk7ZS5pc0xpZ2h0PWIuZGVmYXVsdDt2YXIgeD1uKDE4OSk7ZS5pc1ZhbGlkPXguZGVmYXVsdDt2YXIgXz1uKDE5MCk7ZS5zYXR1cmF0ZT1fLmRlZmF1bHQ7dmFyIGs9bigxOTEpO2UuZGVzYXR1cmF0ZT1rLmRlZmF1bHQ7dmFyIHc9bigxOTIpO2UubGlnaHRlbj13LmRlZmF1bHQ7dmFyIEU9bigxOTMpO2UuZGFya2VuPUUuZGVmYXVsdDt2YXIgVD1uKDEwNCk7ZS5vcGFjaWZ5PVQuZGVmYXVsdDt2YXIgQz1uKDEwNCk7ZS5mYWRlSW49Qy5kZWZhdWx0O3ZhciBTPW4oMTA1KTtlLnRyYW5zcGFyZW50aXplPVMuZGVmYXVsdDt2YXIgQT1uKDEwNSk7ZS5mYWRlT3V0PUEuZGVmYXVsdDt2YXIgTT1uKDE5NCk7ZS5jb21wbGVtZW50PU0uZGVmYXVsdDt2YXIgTz1uKDE5NSk7ZS5ncmF5c2NhbGU9Ty5kZWZhdWx0O3ZhciBEPW4oMTA2KTtlLmFkanVzdD1ELmRlZmF1bHQ7dmFyIE49big1Mik7ZS5jaGFuZ2U9Ti5kZWZhdWx0O3ZhciBCPW4oMTk2KTtlLmludmVydD1CLmRlZmF1bHQ7dmFyIEw9bigxMDcpO2UubWl4PUwuZGVmYXVsdDt2YXIgRj1uKDE5Nyk7ZS5zY2FsZT1GLmRlZmF1bHR9LGZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByPXttaW46e3I6MCxnOjAsYjowLHM6MCxsOjAsYTowfSxtYXg6e3I6MjU1LGc6MjU1LGI6MjU1LGg6MzYwLHM6MTAwLGw6MTAwLGE6MX0sY2xhbXA6e3I6ZnVuY3Rpb24odCl7cmV0dXJuIHQ+PTI1NT8yNTU6dDwwPzA6dH0sZzpmdW5jdGlvbih0KXtyZXR1cm4gdD49MjU1PzI1NTp0PDA/MDp0fSxiOmZ1bmN0aW9uKHQpe3JldHVybiB0Pj0yNTU/MjU1OnQ8MD8wOnR9LGg6ZnVuY3Rpb24odCl7cmV0dXJuIHQlMzYwfSxzOmZ1bmN0aW9uKHQpe3JldHVybiB0Pj0xMDA/MTAwOnQ8MD8wOnR9LGw6ZnVuY3Rpb24odCl7cmV0dXJuIHQ+PTEwMD8xMDA6dDwwPzA6dH0sYTpmdW5jdGlvbih0KXtyZXR1cm4gdD49MT8xOnQ8MD8wOnR9fSx0b0xpbmVhcjpmdW5jdGlvbih0KXt2YXIgZT10LzI1NTtyZXR1cm4gdD4uMDM5Mjg/TWF0aC5wb3coKGUrLjA1NSkvMS4wNTUsMi40KTplLzEyLjkyfSxodWUycmdiOmZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gbjwwJiYobis9MSksbj4xJiYobi09MSksbjwxLzY/dCs2KihlLXQpKm46bjwuNT9lOm48Mi8zP3QrKGUtdCkqKDIvMy1uKSo2OnR9LGhzbDJyZ2I6ZnVuY3Rpb24odCxlKXt2YXIgbj10LmgsaT10LnMsYT10Lmw7aWYoMTAwPT09aSlyZXR1cm4gMi41NSphO24vPTM2MCxpLz0xMDA7dmFyIG89KGEvPTEwMCk8LjU/YSooMStpKTphK2ktYSppLHM9MiphLW87c3dpdGNoKGUpe2Nhc2UiciI6cmV0dXJuIDI1NSpyLmh1ZTJyZ2IocyxvLG4rMS8zKTtjYXNlImciOnJldHVybiAyNTUqci5odWUycmdiKHMsbyxuKTtjYXNlImIiOnJldHVybiAyNTUqci5odWUycmdiKHMsbyxuLTEvMyl9fSxyZ2IyaHNsOmZ1bmN0aW9uKHQsZSl7dmFyIG49dC5yLHI9dC5nLGk9dC5iO24vPTI1NSxyLz0yNTUsaS89MjU1O3ZhciBhPU1hdGgubWF4KG4scixpKSxvPU1hdGgubWluKG4scixpKSxzPShhK28pLzI7aWYoImwiPT09ZSlyZXR1cm4gMTAwKnM7aWYoYT09PW8pcmV0dXJuIDA7dmFyIGM9YS1vO2lmKCJzIj09PWUpcmV0dXJuIDEwMCoocz4uNT9jLygyLWEtbyk6Yy8oYStvKSk7c3dpdGNoKGEpe2Nhc2UgbjpyZXR1cm4gNjAqKChyLWkpL2MrKHI8aT82OjApKTtjYXNlIHI6cmV0dXJuIDYwKigoaS1uKS9jKzIpO2Nhc2UgaTpyZXR1cm4gNjAqKChuLXIpL2MrNCk7ZGVmYXVsdDpyZXR1cm4tMX19fTtlLmRlZmF1bHQ9cn0sZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHI9e3JvdW5kOmZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLnJvdW5kKDFlMTAqdCkvMWUxMH19O2UuZGVmYXVsdD1yfSxmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgcj17ZnJhYzJoZXg6ZnVuY3Rpb24odCl7dmFyIGU9TWF0aC5yb3VuZCgyNTUqdCkudG9TdHJpbmcoMTYpO3JldHVybiBlLmxlbmd0aD4xP2U6IjAiK2V9LGRlYzJoZXg6ZnVuY3Rpb24odCl7dmFyIGU9TWF0aC5yb3VuZCh0KS50b1N0cmluZygxNik7cmV0dXJuIGUubGVuZ3RoPjE/ZToiMCIrZX19O2UuZGVmYXVsdD1yfSxmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgcj1uKDkpLGk9big3NSksYT1uKDE3Nyksbz1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlKXt0aGlzLmNvbG9yPWUsdGhpcy5jaGFuZ2VkPSExLHRoaXMuZGF0YT10LHRoaXMudHlwZT1uZXcgYS5kZWZhdWx0fXJldHVybiB0LnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5jb2xvcj1lLHRoaXMuY2hhbmdlZD0hMSx0aGlzLmRhdGE9dCx0aGlzLnR5cGUudHlwZT1pLlRZUEUuQUxMLHRoaXN9LHQucHJvdG90eXBlLl9lbnN1cmVIU0w9ZnVuY3Rpb24oKXt2b2lkIDA9PT10aGlzLmRhdGEuaCYmKHRoaXMuZGF0YS5oPXIuZGVmYXVsdC5jaGFubmVsLnJnYjJoc2wodGhpcy5kYXRhLCJoIikpLHZvaWQgMD09PXRoaXMuZGF0YS5zJiYodGhpcy5kYXRhLnM9ci5kZWZhdWx0LmNoYW5uZWwucmdiMmhzbCh0aGlzLmRhdGEsInMiKSksdm9pZCAwPT09dGhpcy5kYXRhLmwmJih0aGlzLmRhdGEubD1yLmRlZmF1bHQuY2hhbm5lbC5yZ2IyaHNsKHRoaXMuZGF0YSwibCIpKX0sdC5wcm90b3R5cGUuX2Vuc3VyZVJHQj1mdW5jdGlvbigpe3ZvaWQgMD09PXRoaXMuZGF0YS5yJiYodGhpcy5kYXRhLnI9ci5kZWZhdWx0LmNoYW5uZWwuaHNsMnJnYih0aGlzLmRhdGEsInIiKSksdm9pZCAwPT09dGhpcy5kYXRhLmcmJih0aGlzLmRhdGEuZz1yLmRlZmF1bHQuY2hhbm5lbC5oc2wycmdiKHRoaXMuZGF0YSwiZyIpKSx2b2lkIDA9PT10aGlzLmRhdGEuYiYmKHRoaXMuZGF0YS5iPXIuZGVmYXVsdC5jaGFubmVsLmhzbDJyZ2IodGhpcy5kYXRhLCJiIikpfSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsInIiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50eXBlLmlzKGkuVFlQRS5IU0wpfHx2b2lkIDA9PT10aGlzLmRhdGEucj8odGhpcy5fZW5zdXJlSFNMKCksci5kZWZhdWx0LmNoYW5uZWwuaHNsMnJnYih0aGlzLmRhdGEsInIiKSk6dGhpcy5kYXRhLnJ9LHNldDpmdW5jdGlvbih0KXt0aGlzLnR5cGUuc2V0KGkuVFlQRS5SR0IpLHRoaXMuY2hhbmdlZD0hMCx0aGlzLmRhdGEucj10fSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwiZyIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnR5cGUuaXMoaS5UWVBFLkhTTCl8fHZvaWQgMD09PXRoaXMuZGF0YS5nPyh0aGlzLl9lbnN1cmVIU0woKSxyLmRlZmF1bHQuY2hhbm5lbC5oc2wycmdiKHRoaXMuZGF0YSwiZyIpKTp0aGlzLmRhdGEuZ30sc2V0OmZ1bmN0aW9uKHQpe3RoaXMudHlwZS5zZXQoaS5UWVBFLlJHQiksdGhpcy5jaGFuZ2VkPSEwLHRoaXMuZGF0YS5nPXR9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJiIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudHlwZS5pcyhpLlRZUEUuSFNMKXx8dm9pZCAwPT09dGhpcy5kYXRhLmI/KHRoaXMuX2Vuc3VyZUhTTCgpLHIuZGVmYXVsdC5jaGFubmVsLmhzbDJyZ2IodGhpcy5kYXRhLCJiIikpOnRoaXMuZGF0YS5ifSxzZXQ6ZnVuY3Rpb24odCl7dGhpcy50eXBlLnNldChpLlRZUEUuUkdCKSx0aGlzLmNoYW5nZWQ9ITAsdGhpcy5kYXRhLmI9dH0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsImgiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50eXBlLmlzKGkuVFlQRS5SR0IpfHx2b2lkIDA9PT10aGlzLmRhdGEuaD8odGhpcy5fZW5zdXJlUkdCKCksci5kZWZhdWx0LmNoYW5uZWwucmdiMmhzbCh0aGlzLmRhdGEsImgiKSk6dGhpcy5kYXRhLmh9LHNldDpmdW5jdGlvbih0KXt0aGlzLnR5cGUuc2V0KGkuVFlQRS5IU0wpLHRoaXMuY2hhbmdlZD0hMCx0aGlzLmRhdGEuaD10fSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwicyIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnR5cGUuaXMoaS5UWVBFLlJHQil8fHZvaWQgMD09PXRoaXMuZGF0YS5zPyh0aGlzLl9lbnN1cmVSR0IoKSxyLmRlZmF1bHQuY2hhbm5lbC5yZ2IyaHNsKHRoaXMuZGF0YSwicyIpKTp0aGlzLmRhdGEuc30sc2V0OmZ1bmN0aW9uKHQpe3RoaXMudHlwZS5zZXQoaS5UWVBFLkhTTCksdGhpcy5jaGFuZ2VkPSEwLHRoaXMuZGF0YS5zPXR9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJsIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudHlwZS5pcyhpLlRZUEUuUkdCKXx8dm9pZCAwPT09dGhpcy5kYXRhLmw/KHRoaXMuX2Vuc3VyZVJHQigpLHIuZGVmYXVsdC5jaGFubmVsLnJnYjJoc2wodGhpcy5kYXRhLCJsIikpOnRoaXMuZGF0YS5sfSxzZXQ6ZnVuY3Rpb24odCl7dGhpcy50eXBlLnNldChpLlRZUEUuSFNMKSx0aGlzLmNoYW5nZWQ9ITAsdGhpcy5kYXRhLmw9dH0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsImEiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kYXRhLmF9LHNldDpmdW5jdGlvbih0KXt0aGlzLmNoYW5nZWQ9ITAsdGhpcy5kYXRhLmE9dH0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSx0fSgpO2UuZGVmYXVsdD1vfSxmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgcj1uKDc1KSxpPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe3RoaXMudHlwZT1yLlRZUEUuQUxMfXJldHVybiB0LnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50eXBlfSx0LnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24odCl7aWYodGhpcy50eXBlJiZ0aGlzLnR5cGUhPT10KXRocm93IG5ldyBFcnJvcigiQ2Fubm90IGNoYW5nZSBib3RoIFJHQiBhbmQgSFNMIGNoYW5uZWxzIGF0IHRoZSBzYW1lIHRpbWUiKTt0aGlzLnR5cGU9dH0sdC5wcm90b3R5cGUucmVzZXQ9ZnVuY3Rpb24oKXt0aGlzLnR5cGU9ci5UWVBFLkFMTH0sdC5wcm90b3R5cGUuaXM9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMudHlwZT09PXR9LHR9KCk7ZS5kZWZhdWx0PWl9LGZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByPW4oOSksaT17fTtlLkRFQzJIRVg9aTtmb3IodmFyIGE9MDthPD0yNTU7YSsrKWlbYV09ci5kZWZhdWx0LnVuaXQuZGVjMmhleChhKX0sZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHI9big5OSksaT17Y29sb3JzOnthbGljZWJsdWU6IiNmMGY4ZmYiLGFudGlxdWV3aGl0ZToiI2ZhZWJkNyIsYXF1YToiIzAwZmZmZiIsYXF1YW1hcmluZToiIzdmZmZkNCIsYXp1cmU6IiNmMGZmZmYiLGJlaWdlOiIjZjVmNWRjIixiaXNxdWU6IiNmZmU0YzQiLGJsYWNrOiIjMDAwMDAwIixibGFuY2hlZGFsbW9uZDoiI2ZmZWJjZCIsYmx1ZToiIzAwMDBmZiIsYmx1ZXZpb2xldDoiIzhhMmJlMiIsYnJvd246IiNhNTJhMmEiLGJ1cmx5d29vZDoiI2RlYjg4NyIsY2FkZXRibHVlOiIjNWY5ZWEwIixjaGFydHJldXNlOiIjN2ZmZjAwIixjaG9jb2xhdGU6IiNkMjY5MWUiLGNvcmFsOiIjZmY3ZjUwIixjb3JuZmxvd2VyYmx1ZToiIzY0OTVlZCIsY29ybnNpbGs6IiNmZmY4ZGMiLGNyaW1zb246IiNkYzE0M2MiLGN5YW5hcXVhOiIjMDBmZmZmIixkYXJrYmx1ZToiIzAwMDA4YiIsZGFya2N5YW46IiMwMDhiOGIiLGRhcmtnb2xkZW5yb2Q6IiNiODg2MGIiLGRhcmtncmF5OiIjYTlhOWE5IixkYXJrZ3JlZW46IiMwMDY0MDAiLGRhcmtncmV5OiIjYTlhOWE5IixkYXJra2hha2k6IiNiZGI3NmIiLGRhcmttYWdlbnRhOiIjOGIwMDhiIixkYXJrb2xpdmVncmVlbjoiIzU1NmIyZiIsZGFya29yYW5nZToiI2ZmOGMwMCIsZGFya29yY2hpZDoiIzk5MzJjYyIsZGFya3JlZDoiIzhiMDAwMCIsZGFya3NhbG1vbjoiI2U5OTY3YSIsZGFya3NlYWdyZWVuOiIjOGZiYzhmIixkYXJrc2xhdGVibHVlOiIjNDgzZDhiIixkYXJrc2xhdGVncmF5OiIjMmY0ZjRmIixkYXJrc2xhdGVncmV5OiIjMmY0ZjRmIixkYXJrdHVycXVvaXNlOiIjMDBjZWQxIixkYXJrdmlvbGV0OiIjOTQwMGQzIixkZWVwcGluazoiI2ZmMTQ5MyIsZGVlcHNreWJsdWU6IiMwMGJmZmYiLGRpbWdyYXk6IiM2OTY5NjkiLGRpbWdyZXk6IiM2OTY5NjkiLGRvZGdlcmJsdWU6IiMxZTkwZmYiLGZpcmVicmljazoiI2IyMjIyMiIsZmxvcmFsd2hpdGU6IiNmZmZhZjAiLGZvcmVzdGdyZWVuOiIjMjI4YjIyIixmdWNoc2lhOiIjZmYwMGZmIixnYWluc2Jvcm86IiNkY2RjZGMiLGdob3N0d2hpdGU6IiNmOGY4ZmYiLGdvbGQ6IiNmZmQ3MDAiLGdvbGRlbnJvZDoiI2RhYTUyMCIsZ3JheToiIzgwODA4MCIsZ3JlZW46IiMwMDgwMDAiLGdyZWVueWVsbG93OiIjYWRmZjJmIixncmV5OiIjODA4MDgwIixob25leWRldzoiI2YwZmZmMCIsaG90cGluazoiI2ZmNjliNCIsaW5kaWFucmVkOiIjY2Q1YzVjIixpbmRpZ286IiM0YjAwODIiLGl2b3J5OiIjZmZmZmYwIixraGFraToiI2YwZTY4YyIsbGF2ZW5kZXI6IiNlNmU2ZmEiLGxhdmVuZGVyYmx1c2g6IiNmZmYwZjUiLGxhd25ncmVlbjoiIzdjZmMwMCIsbGVtb25jaGlmZm9uOiIjZmZmYWNkIixsaWdodGJsdWU6IiNhZGQ4ZTYiLGxpZ2h0Y29yYWw6IiNmMDgwODAiLGxpZ2h0Y3lhbjoiI2UwZmZmZiIsbGlnaHRnb2xkZW5yb2R5ZWxsb3c6IiNmYWZhZDIiLGxpZ2h0Z3JheToiI2QzZDNkMyIsbGlnaHRncmVlbjoiIzkwZWU5MCIsbGlnaHRncmV5OiIjZDNkM2QzIixsaWdodHBpbms6IiNmZmI2YzEiLGxpZ2h0c2FsbW9uOiIjZmZhMDdhIixsaWdodHNlYWdyZWVuOiIjMjBiMmFhIixsaWdodHNreWJsdWU6IiM4N2NlZmEiLGxpZ2h0c2xhdGVncmF5OiIjNzc4ODk5IixsaWdodHNsYXRlZ3JleToiIzc3ODg5OSIsbGlnaHRzdGVlbGJsdWU6IiNiMGM0ZGUiLGxpZ2h0eWVsbG93OiIjZmZmZmUwIixsaW1lOiIjMDBmZjAwIixsaW1lZ3JlZW46IiMzMmNkMzIiLGxpbmVuOiIjZmFmMGU2IixtYWdlbnRhOiIjZmYwMGZmIixtYXJvb246IiM4MDAwMDAiLG1lZGl1bWFxdWFtYXJpbmU6IiM2NmNkYWEiLG1lZGl1bWJsdWU6IiMwMDAwY2QiLG1lZGl1bW9yY2hpZDoiI2JhNTVkMyIsbWVkaXVtcHVycGxlOiIjOTM3MGRiIixtZWRpdW1zZWFncmVlbjoiIzNjYjM3MSIsbWVkaXVtc2xhdGVibHVlOiIjN2I2OGVlIixtZWRpdW1zcHJpbmdncmVlbjoiIzAwZmE5YSIsbWVkaXVtdHVycXVvaXNlOiIjNDhkMWNjIixtZWRpdW12aW9sZXRyZWQ6IiNjNzE1ODUiLG1pZG5pZ2h0Ymx1ZToiIzE5MTk3MCIsbWludGNyZWFtOiIjZjVmZmZhIixtaXN0eXJvc2U6IiNmZmU0ZTEiLG1vY2Nhc2luOiIjZmZlNGI1IixuYXZham93aGl0ZToiI2ZmZGVhZCIsbmF2eToiIzAwMDA4MCIsb2xkbGFjZToiI2ZkZjVlNiIsb2xpdmU6IiM4MDgwMDAiLG9saXZlZHJhYjoiIzZiOGUyMyIsb3JhbmdlOiIjZmZhNTAwIixvcmFuZ2VyZWQ6IiNmZjQ1MDAiLG9yY2hpZDoiI2RhNzBkNiIscGFsZWdvbGRlbnJvZDoiI2VlZThhYSIscGFsZWdyZWVuOiIjOThmYjk4IixwYWxldHVycXVvaXNlOiIjYWZlZWVlIixwYWxldmlvbGV0cmVkOiIjZGI3MDkzIixwYXBheWF3aGlwOiIjZmZlZmQ1IixwZWFjaHB1ZmY6IiNmZmRhYjkiLHBlcnU6IiNjZDg1M2YiLHBpbms6IiNmZmMwY2IiLHBsdW06IiNkZGEwZGQiLHBvd2RlcmJsdWU6IiNiMGUwZTYiLHB1cnBsZToiIzgwMDA4MCIscmViZWNjYXB1cnBsZToiIzY2MzM5OSIscmVkOiIjZmYwMDAwIixyb3N5YnJvd246IiNiYzhmOGYiLHJveWFsYmx1ZToiIzQxNjllMSIsc2FkZGxlYnJvd246IiM4YjQ1MTMiLHNhbG1vbjoiI2ZhODA3MiIsc2FuZHlicm93bjoiI2Y0YTQ2MCIsc2VhZ3JlZW46IiMyZThiNTciLHNlYXNoZWxsOiIjZmZmNWVlIixzaWVubmE6IiNhMDUyMmQiLHNpbHZlcjoiI2MwYzBjMCIsc2t5Ymx1ZToiIzg3Y2VlYiIsc2xhdGVibHVlOiIjNmE1YWNkIixzbGF0ZWdyYXk6IiM3MDgwOTAiLHNsYXRlZ3JleToiIzcwODA5MCIsc25vdzoiI2ZmZmFmYSIsc3ByaW5nZ3JlZW46IiMwMGZmN2YiLHRhbjoiI2QyYjQ4YyIsdGVhbDoiIzAwODA4MCIsdGhpc3RsZToiI2Q4YmZkOCIsdHJhbnNwYXJlbnQ6IiMwMDAwMDAwMCIsdHVycXVvaXNlOiIjNDBlMGQwIix2aW9sZXQ6IiNlZTgyZWUiLHdoZWF0OiIjZjVkZWIzIix3aGl0ZToiI2ZmZmZmZiIsd2hpdGVzbW9rZToiI2Y1ZjVmNSIseWVsbG93OiIjZmZmZjAwIix5ZWxsb3dncmVlbjoiIzlhY2QzMiJ9LHBhcnNlOmZ1bmN0aW9uKHQpe3Q9dC50b0xvd2VyQ2FzZSgpO3ZhciBlPWkuY29sb3JzW3RdO2lmKGUpcmV0dXJuIHIuZGVmYXVsdC5wYXJzZShlKX0sc3RyaW5naWZ5OmZ1bmN0aW9uKHQpe3ZhciBlPXIuZGVmYXVsdC5zdHJpbmdpZnkodCk7Zm9yKHZhciBuIGluIGkuY29sb3JzKWlmKGkuY29sb3JzW25dPT09ZSlyZXR1cm4gbn19O2UuZGVmYXVsdD1pfSxmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgcj1uKDkpLGk9big0NSksYT17cmU6L15yZ2JhP1woXHMqPygtPyg/OlxkKyg/OlwuXGQrKT98KD86XC5cZCspKSg/OmVcZCspPyglPykpXHMqPyg/Oix8XHMpXHMqPygtPyg/OlxkKyg/OlwuXGQrKT98KD86XC5cZCspKSg/OmVcZCspPyglPykpXHMqPyg/Oix8XHMpXHMqPygtPyg/OlxkKyg/OlwuXGQrKT98KD86XC5cZCspKSg/OmVcZCspPyglPykpKD86XHMqPyg/Oix8XC8pXHMqP1wrPygtPyg/OlxkKyg/OlwuXGQrKT98KD86XC5cZCspKSg/OmVcZCspPyglPykpKT9ccyo/XCkkL2kscGFyc2U6ZnVuY3Rpb24odCl7dmFyIGU9dC5jaGFyQ29kZUF0KDApO2lmKDExND09PWV8fDgyPT09ZSl7dmFyIG49dC5tYXRjaChhLnJlKTtpZihuKXt2YXIgbz1uWzFdLHM9blsyXSxjPW5bM10sdT1uWzRdLGw9bls1XSxoPW5bNl0sZj1uWzddLGQ9bls4XTtyZXR1cm4gaS5kZWZhdWx0LnNldCh7cjpyLmRlZmF1bHQuY2hhbm5lbC5jbGFtcC5yKHM/Mi41NSpwYXJzZUZsb2F0KG8pOnBhcnNlRmxvYXQobykpLGc6ci5kZWZhdWx0LmNoYW5uZWwuY2xhbXAuZyh1PzIuNTUqcGFyc2VGbG9hdChjKTpwYXJzZUZsb2F0KGMpKSxiOnIuZGVmYXVsdC5jaGFubmVsLmNsYW1wLmIoaD8yLjU1KnBhcnNlRmxvYXQobCk6cGFyc2VGbG9hdChsKSksYTpmP3IuZGVmYXVsdC5jaGFubmVsLmNsYW1wLmEoZD9wYXJzZUZsb2F0KGYpLzEwMDpwYXJzZUZsb2F0KGYpKToxfSx0KX19fSxzdHJpbmdpZnk6ZnVuY3Rpb24odCl7cmV0dXJuIHQuYTwxPyJyZ2JhKCIrci5kZWZhdWx0Lmxhbmcucm91bmQodC5yKSsiLCAiK3IuZGVmYXVsdC5sYW5nLnJvdW5kKHQuZykrIiwgIityLmRlZmF1bHQubGFuZy5yb3VuZCh0LmIpKyIsICIrci5kZWZhdWx0Lmxhbmcucm91bmQodC5hKSsiKSI6InJnYigiK3IuZGVmYXVsdC5sYW5nLnJvdW5kKHQucikrIiwgIityLmRlZmF1bHQubGFuZy5yb3VuZCh0LmcpKyIsICIrci5kZWZhdWx0Lmxhbmcucm91bmQodC5iKSsiKSJ9fTtlLmRlZmF1bHQ9YX0sZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHI9big5KSxpPW4oNDUpLGE9e3JlOi9eaHNsYT9cKFxzKj8oLT8oPzpcZCsoPzpcLlxkKyk/fCg/OlwuXGQrKSkoPzplLT9cZCspPyg/OmRlZ3xncmFkfHJhZHx0dXJuKT8pXHMqPyg/Oix8XHMpXHMqPygtPyg/OlxkKyg/OlwuXGQrKT98KD86XC5cZCspKSg/OmUtP1xkKyk/JSlccyo/KD86LHxccylccyo/KC0/KD86XGQrKD86XC5cZCspP3woPzpcLlxkKykpKD86ZS0/XGQrKT8lKSg/OlxzKj8oPzosfFwvKVxzKj9cKz8oLT8oPzpcZCsoPzpcLlxkKyk/fCg/OlwuXGQrKSkoPzplLT9cZCspPyglKT8pKT9ccyo/XCkkL2ksaHVlUmU6L14oLis/KShkZWd8Z3JhZHxyYWR8dHVybikkL2ksX2h1ZTJkZWc6ZnVuY3Rpb24odCl7dmFyIGU9dC5tYXRjaChhLmh1ZVJlKTtpZihlKXt2YXIgbj1lWzFdO3N3aXRjaChlWzJdKXtjYXNlImdyYWQiOnJldHVybiByLmRlZmF1bHQuY2hhbm5lbC5jbGFtcC5oKC45KnBhcnNlRmxvYXQobikpO2Nhc2UicmFkIjpyZXR1cm4gci5kZWZhdWx0LmNoYW5uZWwuY2xhbXAuaCgxODAqcGFyc2VGbG9hdChuKS9NYXRoLlBJKTtjYXNlInR1cm4iOnJldHVybiByLmRlZmF1bHQuY2hhbm5lbC5jbGFtcC5oKDM2MCpwYXJzZUZsb2F0KG4pKX19cmV0dXJuIHIuZGVmYXVsdC5jaGFubmVsLmNsYW1wLmgocGFyc2VGbG9hdCh0KSl9LHBhcnNlOmZ1bmN0aW9uKHQpe3ZhciBlPXQuY2hhckNvZGVBdCgwKTtpZigxMDQ9PT1lfHw3Mj09PWUpe3ZhciBuPXQubWF0Y2goYS5yZSk7aWYobil7dmFyIG89blsxXSxzPW5bMl0sYz1uWzNdLHU9bls0XSxsPW5bNV07cmV0dXJuIGkuZGVmYXVsdC5zZXQoe2g6YS5faHVlMmRlZyhvKSxzOnIuZGVmYXVsdC5jaGFubmVsLmNsYW1wLnMocGFyc2VGbG9hdChzKSksbDpyLmRlZmF1bHQuY2hhbm5lbC5jbGFtcC5sKHBhcnNlRmxvYXQoYykpLGE6dT9yLmRlZmF1bHQuY2hhbm5lbC5jbGFtcC5hKGw/cGFyc2VGbG9hdCh1KS8xMDA6cGFyc2VGbG9hdCh1KSk6MX0sdCl9fX0sc3RyaW5naWZ5OmZ1bmN0aW9uKHQpe3JldHVybiB0LmE8MT8iaHNsYSgiK3IuZGVmYXVsdC5sYW5nLnJvdW5kKHQuaCkrIiwgIityLmRlZmF1bHQubGFuZy5yb3VuZCh0LnMpKyIlLCAiK3IuZGVmYXVsdC5sYW5nLnJvdW5kKHQubCkrIiUsICIrdC5hKyIpIjoiaHNsKCIrci5kZWZhdWx0Lmxhbmcucm91bmQodC5oKSsiLCAiK3IuZGVmYXVsdC5sYW5nLnJvdW5kKHQucykrIiUsICIrci5kZWZhdWx0Lmxhbmcucm91bmQodC5sKSsiJSkifX07ZS5kZWZhdWx0PWF9LGZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByPW4oMjkpO2UuZGVmYXVsdD1mdW5jdGlvbih0KXtyZXR1cm4gci5kZWZhdWx0KHQsInIiKX19LGZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByPW4oMjkpO2UuZGVmYXVsdD1mdW5jdGlvbih0KXtyZXR1cm4gci5kZWZhdWx0KHQsImciKX19LGZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByPW4oMjkpO2UuZGVmYXVsdD1mdW5jdGlvbih0KXtyZXR1cm4gci5kZWZhdWx0KHQsImIiKX19LGZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByPW4oMjkpO2UuZGVmYXVsdD1mdW5jdGlvbih0KXtyZXR1cm4gci5kZWZhdWx0KHQsImgiKX19LGZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByPW4oMjkpO2UuZGVmYXVsdD1mdW5jdGlvbih0KXtyZXR1cm4gci5kZWZhdWx0KHQsInMiKX19LGZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByPW4oMjkpO2UuZGVmYXVsdD1mdW5jdGlvbih0KXtyZXR1cm4gci5kZWZhdWx0KHQsImwiKX19LGZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByPW4oMTAzKTtlLmRlZmF1bHQ9ZnVuY3Rpb24odCl7cmV0dXJuIXIuZGVmYXVsdCh0KX19LGZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByPW4oMTUpO2UuZGVmYXVsdD1mdW5jdGlvbih0KXt0cnl7cmV0dXJuIHIuZGVmYXVsdC5wYXJzZSh0KSwhMH1jYXRjaCh0KXtyZXR1cm4hMX19fSxmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgcj1uKDMyKTtlLmRlZmF1bHQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gci5kZWZhdWx0KHQsInMiLGUpfX0sZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHI9bigzMik7ZS5kZWZhdWx0PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHIuZGVmYXVsdCh0LCJzIiwtZSl9fSxmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgcj1uKDMyKTtlLmRlZmF1bHQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gci5kZWZhdWx0KHQsImwiLGUpfX0sZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHI9bigzMik7ZS5kZWZhdWx0PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHIuZGVmYXVsdCh0LCJsIiwtZSl9fSxmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgcj1uKDMyKTtlLmRlZmF1bHQ9ZnVuY3Rpb24odCl7cmV0dXJuIHIuZGVmYXVsdCh0LCJoIiwxODApfX0sZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHI9big1Mik7ZS5kZWZhdWx0PWZ1bmN0aW9uKHQpe3JldHVybiByLmRlZmF1bHQodCx7czowfSl9fSxmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgcj1uKDE1KSxpPW4oMTA3KTtlLmRlZmF1bHQ9ZnVuY3Rpb24odCxlKXt2b2lkIDA9PT1lJiYoZT0xMDApO3ZhciBuPXIuZGVmYXVsdC5wYXJzZSh0KTtyZXR1cm4gbi5yPTI1NS1uLnIsbi5nPTI1NS1uLmcsbi5iPTI1NS1uLmIsaS5kZWZhdWx0KG4sdCxlKX19LGZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByPW4oOSksaT1uKDE1KSxhPW4oMTA2KTtlLmRlZmF1bHQ9ZnVuY3Rpb24odCxlKXt2YXIgbixvLHMsYz1pLmRlZmF1bHQucGFyc2UodCksdT17fTtmb3IodmFyIGwgaW4gZSl1W2xdPShuPWNbbF0sbz1lW2xdLHM9ci5kZWZhdWx0LmNoYW5uZWwubWF4W2xdLG8+MD8ocy1uKSpvLzEwMDpuKm8vMTAwKTtyZXR1cm4gYS5kZWZhdWx0KHQsdSl9fSxmdW5jdGlvbih0LGUsbil7dC5leHBvcnRzPXtHcmFwaDpuKDc2KSx2ZXJzaW9uOm4oMzAwKX19LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDEwOCk7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiByKHQsNCl9fSxmdW5jdGlvbih0LGUpe3QuZXhwb3J0cz1mdW5jdGlvbigpe3RoaXMuX19kYXRhX189W10sdGhpcy5zaXplPTB9fSxmdW5jdGlvbih0LGUsbil7dmFyIHI9big1NSksaT1BcnJheS5wcm90b3R5cGUuc3BsaWNlO3QuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT10aGlzLl9fZGF0YV9fLG49cihlLHQpO3JldHVybiEobjwwKSYmKG49PWUubGVuZ3RoLTE/ZS5wb3AoKTppLmNhbGwoZSxuLDEpLC0tdGhpcy5zaXplLCEwKX19LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDU1KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fX2RhdGFfXyxuPXIoZSx0KTtyZXR1cm4gbjwwP3ZvaWQgMDplW25dWzFdfX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oNTUpO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gcih0aGlzLl9fZGF0YV9fLHQpPi0xfX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oNTUpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciBuPXRoaXMuX19kYXRhX18saT1yKG4sdCk7cmV0dXJuIGk8MD8oKyt0aGlzLnNpemUsbi5wdXNoKFt0LGVdKSk6bltpXVsxXT1lLHRoaXN9fSxmdW5jdGlvbih0LGUsbil7dmFyIHI9big1NCk7dC5leHBvcnRzPWZ1bmN0aW9uKCl7dGhpcy5fX2RhdGFfXz1uZXcgcix0aGlzLnNpemU9MH19LGZ1bmN0aW9uKHQsZSl7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX19kYXRhX18sbj1lLmRlbGV0ZSh0KTtyZXR1cm4gdGhpcy5zaXplPWUuc2l6ZSxufX0sZnVuY3Rpb24odCxlKXt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX19kYXRhX18uZ2V0KHQpfX0sZnVuY3Rpb24odCxlKXt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX19kYXRhX18uaGFzKHQpfX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oNTQpLGk9big3NyksYT1uKDc4KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgbj10aGlzLl9fZGF0YV9fO2lmKG4gaW5zdGFuY2VvZiByKXt2YXIgbz1uLl9fZGF0YV9fO2lmKCFpfHxvLmxlbmd0aDwxOTkpcmV0dXJuIG8ucHVzaChbdCxlXSksdGhpcy5zaXplPSsrbi5zaXplLHRoaXM7bj10aGlzLl9fZGF0YV9fPW5ldyBhKG8pfXJldHVybiBuLnNldCh0LGUpLHRoaXMuc2l6ZT1uLnNpemUsdGhpc319LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDM3KSxpPW4oMjE0KSxhPW4oMTEpLG89bigxMTApLHM9L15cW29iamVjdCAuKz9Db25zdHJ1Y3RvclxdJC8sYz1GdW5jdGlvbi5wcm90b3R5cGUsdT1PYmplY3QucHJvdG90eXBlLGw9Yy50b1N0cmluZyxoPXUuaGFzT3duUHJvcGVydHksZj1SZWdFeHAoIl4iK2wuY2FsbChoKS5yZXBsYWNlKC9bXFxeJC4qKz8oKVtcXXt9fF0vZywiXFwkJiIpLnJlcGxhY2UoL2hhc093blByb3BlcnR5fChmdW5jdGlvbikuKj8oPz1cXFwoKXwgZm9yIC4rPyg/PVxcXF0pL2csIiQxLio/IikrIiQiKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuISghYSh0KXx8aSh0KSkmJihyKHQpP2Y6cykudGVzdChvKHQpKX19LGZ1bmN0aW9uKHQsZSl7dmFyIG47bj1mdW5jdGlvbigpe3JldHVybiB0aGlzfSgpO3RyeXtuPW58fG5ldyBGdW5jdGlvbigicmV0dXJuIHRoaXMiKSgpfWNhdGNoKHQpeyJvYmplY3QiPT10eXBlb2Ygd2luZG93JiYobj13aW5kb3cpfXQuZXhwb3J0cz1ufSxmdW5jdGlvbih0LGUsbil7dmFyIHI9bigzOCksaT1PYmplY3QucHJvdG90eXBlLGE9aS5oYXNPd25Qcm9wZXJ0eSxvPWkudG9TdHJpbmcscz1yP3IudG9TdHJpbmdUYWc6dm9pZCAwO3QuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT1hLmNhbGwodCxzKSxuPXRbc107dHJ5e3Rbc109dm9pZCAwO3ZhciByPSEwfWNhdGNoKHQpe312YXIgaT1vLmNhbGwodCk7cmV0dXJuIHImJihlP3Rbc109bjpkZWxldGUgdFtzXSksaX19LGZ1bmN0aW9uKHQsZSl7dmFyIG49T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZzt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIG4uY2FsbCh0KX19LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcixpPW4oMjE1KSxhPShyPS9bXi5dKyQvLmV4ZWMoaSYmaS5rZXlzJiZpLmtleXMuSUVfUFJPVE98fCIiKSk/IlN5bWJvbChzcmMpXzEuIityOiIiO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4hIWEmJmEgaW4gdH19LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDE2KVsiX19jb3JlLWpzX3NoYXJlZF9fIl07dC5leHBvcnRzPXJ9LGZ1bmN0aW9uKHQsZSl7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIG51bGw9PXQ/dm9pZCAwOnRbZV19fSxmdW5jdGlvbih0LGUsbil7dmFyIHI9bigyMTgpLGk9big1NCksYT1uKDc3KTt0LmV4cG9ydHM9ZnVuY3Rpb24oKXt0aGlzLnNpemU9MCx0aGlzLl9fZGF0YV9fPXtoYXNoOm5ldyByLG1hcDpuZXcoYXx8aSksc3RyaW5nOm5ldyByfX19LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDIxOSksaT1uKDIyMCksYT1uKDIyMSksbz1uKDIyMikscz1uKDIyMyk7ZnVuY3Rpb24gYyh0KXt2YXIgZT0tMSxuPW51bGw9PXQ/MDp0Lmxlbmd0aDtmb3IodGhpcy5jbGVhcigpOysrZTxuOyl7dmFyIHI9dFtlXTt0aGlzLnNldChyWzBdLHJbMV0pfX1jLnByb3RvdHlwZS5jbGVhcj1yLGMucHJvdG90eXBlLmRlbGV0ZT1pLGMucHJvdG90eXBlLmdldD1hLGMucHJvdG90eXBlLmhhcz1vLGMucHJvdG90eXBlLnNldD1zLHQuZXhwb3J0cz1jfSxmdW5jdGlvbih0LGUsbil7dmFyIHI9big1Nik7dC5leHBvcnRzPWZ1bmN0aW9uKCl7dGhpcy5fX2RhdGFfXz1yP3IobnVsbCk6e30sdGhpcy5zaXplPTB9fSxmdW5jdGlvbih0LGUpe3QuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmhhcyh0KSYmZGVsZXRlIHRoaXMuX19kYXRhX19bdF07cmV0dXJuIHRoaXMuc2l6ZS09ZT8xOjAsZX19LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDU2KSxpPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX19kYXRhX187aWYocil7dmFyIG49ZVt0XTtyZXR1cm4iX19sb2Rhc2hfaGFzaF91bmRlZmluZWRfXyI9PT1uP3ZvaWQgMDpufXJldHVybiBpLmNhbGwoZSx0KT9lW3RdOnZvaWQgMH19LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDU2KSxpPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX19kYXRhX187cmV0dXJuIHI/dm9pZCAwIT09ZVt0XTppLmNhbGwoZSx0KX19LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDU2KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgbj10aGlzLl9fZGF0YV9fO3JldHVybiB0aGlzLnNpemUrPXRoaXMuaGFzKHQpPzA6MSxuW3RdPXImJnZvaWQgMD09PWU/Il9fbG9kYXNoX2hhc2hfdW5kZWZpbmVkX18iOmUsdGhpc319LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDU3KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9cih0aGlzLHQpLmRlbGV0ZSh0KTtyZXR1cm4gdGhpcy5zaXplLT1lPzE6MCxlfX0sZnVuY3Rpb24odCxlKXt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9dHlwZW9mIHQ7cmV0dXJuInN0cmluZyI9PWV8fCJudW1iZXIiPT1lfHwic3ltYm9sIj09ZXx8ImJvb2xlYW4iPT1lPyJfX3Byb3RvX18iIT09dDpudWxsPT09dH19LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDU3KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIHIodGhpcyx0KS5nZXQodCl9fSxmdW5jdGlvbih0LGUsbil7dmFyIHI9big1Nyk7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiByKHRoaXMsdCkuaGFzKHQpfX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oNTcpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciBuPXIodGhpcyx0KSxpPW4uc2l6ZTtyZXR1cm4gbi5zZXQodCxlKSx0aGlzLnNpemUrPW4uc2l6ZT09aT8wOjEsdGhpc319LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDQ2KSxpPW4oMzApO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3JldHVybiB0JiZyKGUsaShlKSx0KX19LGZ1bmN0aW9uKHQsZSl7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciBuPS0xLHI9QXJyYXkodCk7KytuPHQ7KXJbbl09ZShuKTtyZXR1cm4gcn19LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDM0KSxpPW4oMjEpO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gaSh0KSYmIltvYmplY3QgQXJndW1lbnRzXSI9PXIodCl9fSxmdW5jdGlvbih0LGUpe3QuZXhwb3J0cz1mdW5jdGlvbigpe3JldHVybiExfX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMzQpLGk9big4MCksYT1uKDIxKSxvPXt9O29bIltvYmplY3QgRmxvYXQzMkFycmF5XSJdPW9bIltvYmplY3QgRmxvYXQ2NEFycmF5XSJdPW9bIltvYmplY3QgSW50OEFycmF5XSJdPW9bIltvYmplY3QgSW50MTZBcnJheV0iXT1vWyJbb2JqZWN0IEludDMyQXJyYXldIl09b1siW29iamVjdCBVaW50OEFycmF5XSJdPW9bIltvYmplY3QgVWludDhDbGFtcGVkQXJyYXldIl09b1siW29iamVjdCBVaW50MTZBcnJheV0iXT1vWyJbb2JqZWN0IFVpbnQzMkFycmF5XSJdPSEwLG9bIltvYmplY3QgQXJndW1lbnRzXSJdPW9bIltvYmplY3QgQXJyYXldIl09b1siW29iamVjdCBBcnJheUJ1ZmZlcl0iXT1vWyJbb2JqZWN0IEJvb2xlYW5dIl09b1siW29iamVjdCBEYXRhVmlld10iXT1vWyJbb2JqZWN0IERhdGVdIl09b1siW29iamVjdCBFcnJvcl0iXT1vWyJbb2JqZWN0IEZ1bmN0aW9uXSJdPW9bIltvYmplY3QgTWFwXSJdPW9bIltvYmplY3QgTnVtYmVyXSJdPW9bIltvYmplY3QgT2JqZWN0XSJdPW9bIltvYmplY3QgUmVnRXhwXSJdPW9bIltvYmplY3QgU2V0XSJdPW9bIltvYmplY3QgU3RyaW5nXSJdPW9bIltvYmplY3QgV2Vha01hcF0iXT0hMSx0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIGEodCkmJmkodC5sZW5ndGgpJiYhIW9bcih0KV19fSxmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxMTMpKE9iamVjdC5rZXlzLE9iamVjdCk7dC5leHBvcnRzPXJ9LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDQ2KSxpPW4oNDApO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3JldHVybiB0JiZyKGUsaShlKSx0KX19LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDExKSxpPW4oNjIpLGE9bigyMzcpLG89T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7aWYoIXIodCkpcmV0dXJuIGEodCk7dmFyIGU9aSh0KSxuPVtdO2Zvcih2YXIgcyBpbiB0KSgiY29uc3RydWN0b3IiIT1zfHwhZSYmby5jYWxsKHQscykpJiZuLnB1c2gocyk7cmV0dXJuIG59fSxmdW5jdGlvbih0LGUpe3QuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT1bXTtpZihudWxsIT10KWZvcih2YXIgbiBpbiBPYmplY3QodCkpZS5wdXNoKG4pO3JldHVybiBlfX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oNDYpLGk9big4Myk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHIodCxpKHQpLGUpfX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oNDYpLGk9bigxMTgpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3JldHVybiByKHQsaSh0KSxlKX19LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDEyMCksaT1uKDExOCksYT1uKDQwKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIHIodCxhLGkpfX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMzMpKG4oMTYpLCJEYXRhVmlldyIpO3QuZXhwb3J0cz1yfSxmdW5jdGlvbih0LGUsbil7dmFyIHI9bigzMykobigxNiksIlByb21pc2UiKTt0LmV4cG9ydHM9cn0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMzMpKG4oMTYpLCJXZWFrTWFwIik7dC5leHBvcnRzPXJ9LGZ1bmN0aW9uKHQsZSl7dmFyIG49T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9dC5sZW5ndGgscj1uZXcgdC5jb25zdHJ1Y3RvcihlKTtyZXR1cm4gZSYmInN0cmluZyI9PXR5cGVvZiB0WzBdJiZuLmNhbGwodCwiaW5kZXgiKSYmKHIuaW5kZXg9dC5pbmRleCxyLmlucHV0PXQuaW5wdXQpLHJ9fSxmdW5jdGlvbih0LGUsbil7dmFyIHI9big4NSksaT1uKDI0NiksYT1uKDI0Nyksbz1uKDI0OCkscz1uKDEyMyk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSxuKXt2YXIgYz10LmNvbnN0cnVjdG9yO3N3aXRjaChlKXtjYXNlIltvYmplY3QgQXJyYXlCdWZmZXJdIjpyZXR1cm4gcih0KTtjYXNlIltvYmplY3QgQm9vbGVhbl0iOmNhc2UiW29iamVjdCBEYXRlXSI6cmV0dXJuIG5ldyBjKCt0KTtjYXNlIltvYmplY3QgRGF0YVZpZXddIjpyZXR1cm4gaSh0LG4pO2Nhc2UiW29iamVjdCBGbG9hdDMyQXJyYXldIjpjYXNlIltvYmplY3QgRmxvYXQ2NEFycmF5XSI6Y2FzZSJbb2JqZWN0IEludDhBcnJheV0iOmNhc2UiW29iamVjdCBJbnQxNkFycmF5XSI6Y2FzZSJbb2JqZWN0IEludDMyQXJyYXldIjpjYXNlIltvYmplY3QgVWludDhBcnJheV0iOmNhc2UiW29iamVjdCBVaW50OENsYW1wZWRBcnJheV0iOmNhc2UiW29iamVjdCBVaW50MTZBcnJheV0iOmNhc2UiW29iamVjdCBVaW50MzJBcnJheV0iOnJldHVybiBzKHQsbik7Y2FzZSJbb2JqZWN0IE1hcF0iOnJldHVybiBuZXcgYztjYXNlIltvYmplY3QgTnVtYmVyXSI6Y2FzZSJbb2JqZWN0IFN0cmluZ10iOnJldHVybiBuZXcgYyh0KTtjYXNlIltvYmplY3QgUmVnRXhwXSI6cmV0dXJuIGEodCk7Y2FzZSJbb2JqZWN0IFNldF0iOnJldHVybiBuZXcgYztjYXNlIltvYmplY3QgU3ltYm9sXSI6cmV0dXJuIG8odCl9fX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oODUpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciBuPWU/cih0LmJ1ZmZlcik6dC5idWZmZXI7cmV0dXJuIG5ldyB0LmNvbnN0cnVjdG9yKG4sdC5ieXRlT2Zmc2V0LHQuYnl0ZUxlbmd0aCl9fSxmdW5jdGlvbih0LGUpe3ZhciBuPS9cdyokLzt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9bmV3IHQuY29uc3RydWN0b3IodC5zb3VyY2Usbi5leGVjKHQpKTtyZXR1cm4gZS5sYXN0SW5kZXg9dC5sYXN0SW5kZXgsZX19LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDM4KSxpPXI/ci5wcm90b3R5cGU6dm9pZCAwLGE9aT9pLnZhbHVlT2Y6dm9pZCAwO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gYT9PYmplY3QoYS5jYWxsKHQpKTp7fX19LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDI1MCksaT1uKDYxKSxhPW4oODEpLG89YSYmYS5pc01hcCxzPW8/aShvKTpyO3QuZXhwb3J0cz1zfSxmdW5jdGlvbih0LGUsbil7dmFyIHI9big0MSksaT1uKDIxKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIGkodCkmJiJbb2JqZWN0IE1hcF0iPT1yKHQpfX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMjUyKSxpPW4oNjEpLGE9big4MSksbz1hJiZhLmlzU2V0LHM9bz9pKG8pOnI7dC5leHBvcnRzPXN9LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDQxKSxpPW4oMjEpO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gaSh0KSYmIltvYmplY3QgU2V0XSI9PXIodCl9fSxmdW5jdGlvbih0LGUpe3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oZSxuLHIpe2Zvcih2YXIgaT0tMSxhPU9iamVjdChlKSxvPXIoZSkscz1vLmxlbmd0aDtzLS07KXt2YXIgYz1vW3Q/czorK2ldO2lmKCExPT09bihhW2NdLGMsYSkpYnJlYWt9cmV0dXJuIGV9fX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMjQpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3JldHVybiBmdW5jdGlvbihuLGkpe2lmKG51bGw9PW4pcmV0dXJuIG47aWYoIXIobikpcmV0dXJuIHQobixpKTtmb3IodmFyIGE9bi5sZW5ndGgsbz1lP2E6LTEscz1PYmplY3Qobik7KGU/by0tOisrbzxhKSYmITEhPT1pKHNbb10sbyxzKTspO3JldHVybiBufX19LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDY0KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgbj1bXTtyZXR1cm4gcih0LChmdW5jdGlvbih0LHIsaSl7ZSh0LHIsaSkmJm4ucHVzaCh0KX0pKSxufX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMjU3KSxpPW4oMjY1KSxhPW4oMTM0KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9aSh0KTtyZXR1cm4gMT09ZS5sZW5ndGgmJmVbMF1bMl0/YShlWzBdWzBdLGVbMF1bMV0pOmZ1bmN0aW9uKG4pe3JldHVybiBuPT09dHx8cihuLHQsZSl9fX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oNTMpLGk9bigxMjkpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUsbixhKXt2YXIgbz1uLmxlbmd0aCxzPW8sYz0hYTtpZihudWxsPT10KXJldHVybiFzO2Zvcih0PU9iamVjdCh0KTtvLS07KXt2YXIgdT1uW29dO2lmKGMmJnVbMl0/dVsxXSE9PXRbdVswXV06ISh1WzBdaW4gdCkpcmV0dXJuITF9Zm9yKDsrK288czspe3ZhciBsPSh1PW5bb10pWzBdLGg9dFtsXSxmPXVbMV07aWYoYyYmdVsyXSl7aWYodm9pZCAwPT09aCYmIShsIGluIHQpKXJldHVybiExfWVsc2V7dmFyIGQ9bmV3IHI7aWYoYSl2YXIgcD1hKGgsZixsLHQsZSxkKTtpZighKHZvaWQgMD09PXA/aShmLGgsMyxhLGQpOnApKXJldHVybiExfX1yZXR1cm4hMH19LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDUzKSxpPW4oMTMwKSxhPW4oMjYyKSxvPW4oMjY0KSxzPW4oNDEpLGM9big1KSx1PW4oMzkpLGw9big0OCksaD0iW29iamVjdCBPYmplY3RdIixmPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSxuLGQscCxnKXt2YXIgeT1jKHQpLHY9YyhlKSxtPXk/IltvYmplY3QgQXJyYXldIjpzKHQpLGI9dj8iW29iamVjdCBBcnJheV0iOnMoZSkseD0obT0iW29iamVjdCBBcmd1bWVudHNdIj09bT9oOm0pPT1oLF89KGI9IltvYmplY3QgQXJndW1lbnRzXSI9PWI/aDpiKT09aCxrPW09PWI7aWYoayYmdSh0KSl7aWYoIXUoZSkpcmV0dXJuITE7eT0hMCx4PSExfWlmKGsmJiF4KXJldHVybiBnfHwoZz1uZXcgcikseXx8bCh0KT9pKHQsZSxuLGQscCxnKTphKHQsZSxtLG4sZCxwLGcpO2lmKCEoMSZuKSl7dmFyIHc9eCYmZi5jYWxsKHQsIl9fd3JhcHBlZF9fIiksRT1fJiZmLmNhbGwoZSwiX193cmFwcGVkX18iKTtpZih3fHxFKXt2YXIgVD13P3QudmFsdWUoKTp0LEM9RT9lLnZhbHVlKCk6ZTtyZXR1cm4gZ3x8KGc9bmV3IHIpLHAoVCxDLG4sZCxnKX19cmV0dXJuISFrJiYoZ3x8KGc9bmV3IHIpLG8odCxlLG4sZCxwLGcpKX19LGZ1bmN0aW9uKHQsZSl7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9fZGF0YV9fLnNldCh0LCJfX2xvZGFzaF9oYXNoX3VuZGVmaW5lZF9fIiksdGhpc319LGZ1bmN0aW9uKHQsZSl7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9fZGF0YV9fLmhhcyh0KX19LGZ1bmN0aW9uKHQsZSl7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciBuPS0xLHI9bnVsbD09dD8wOnQubGVuZ3RoOysrbjxyOylpZihlKHRbbl0sbix0KSlyZXR1cm4hMDtyZXR1cm4hMX19LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDM4KSxpPW4oMTIyKSxhPW4oMzYpLG89bigxMzApLHM9bigyNjMpLGM9big5MCksdT1yP3IucHJvdG90eXBlOnZvaWQgMCxsPXU/dS52YWx1ZU9mOnZvaWQgMDt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlLG4scix1LGgsZil7c3dpdGNoKG4pe2Nhc2UiW29iamVjdCBEYXRhVmlld10iOmlmKHQuYnl0ZUxlbmd0aCE9ZS5ieXRlTGVuZ3RofHx0LmJ5dGVPZmZzZXQhPWUuYnl0ZU9mZnNldClyZXR1cm4hMTt0PXQuYnVmZmVyLGU9ZS5idWZmZXI7Y2FzZSJbb2JqZWN0IEFycmF5QnVmZmVyXSI6cmV0dXJuISh0LmJ5dGVMZW5ndGghPWUuYnl0ZUxlbmd0aHx8IWgobmV3IGkodCksbmV3IGkoZSkpKTtjYXNlIltvYmplY3QgQm9vbGVhbl0iOmNhc2UiW29iamVjdCBEYXRlXSI6Y2FzZSJbb2JqZWN0IE51bWJlcl0iOnJldHVybiBhKCt0LCtlKTtjYXNlIltvYmplY3QgRXJyb3JdIjpyZXR1cm4gdC5uYW1lPT1lLm5hbWUmJnQubWVzc2FnZT09ZS5tZXNzYWdlO2Nhc2UiW29iamVjdCBSZWdFeHBdIjpjYXNlIltvYmplY3QgU3RyaW5nXSI6cmV0dXJuIHQ9PWUrIiI7Y2FzZSJbb2JqZWN0IE1hcF0iOnZhciBkPXM7Y2FzZSJbb2JqZWN0IFNldF0iOnZhciBwPTEmcjtpZihkfHwoZD1jKSx0LnNpemUhPWUuc2l6ZSYmIXApcmV0dXJuITE7dmFyIGc9Zi5nZXQodCk7aWYoZylyZXR1cm4gZz09ZTtyfD0yLGYuc2V0KHQsZSk7dmFyIHk9byhkKHQpLGQoZSkscix1LGgsZik7cmV0dXJuIGYuZGVsZXRlKHQpLHk7Y2FzZSJbb2JqZWN0IFN5bWJvbF0iOmlmKGwpcmV0dXJuIGwuY2FsbCh0KT09bC5jYWxsKGUpfXJldHVybiExfX0sZnVuY3Rpb24odCxlKXt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9LTEsbj1BcnJheSh0LnNpemUpO3JldHVybiB0LmZvckVhY2goKGZ1bmN0aW9uKHQscil7blsrK2VdPVtyLHRdfSkpLG59fSxmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxMTkpLGk9T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlLG4sYSxvLHMpe3ZhciBjPTEmbix1PXIodCksbD11Lmxlbmd0aDtpZihsIT1yKGUpLmxlbmd0aCYmIWMpcmV0dXJuITE7Zm9yKHZhciBoPWw7aC0tOyl7dmFyIGY9dVtoXTtpZighKGM/ZiBpbiBlOmkuY2FsbChlLGYpKSlyZXR1cm4hMX12YXIgZD1zLmdldCh0KTtpZihkJiZzLmdldChlKSlyZXR1cm4gZD09ZTt2YXIgcD0hMDtzLnNldCh0LGUpLHMuc2V0KGUsdCk7Zm9yKHZhciBnPWM7KytoPGw7KXt2YXIgeT10W2Y9dVtoXV0sdj1lW2ZdO2lmKGEpdmFyIG09Yz9hKHYseSxmLGUsdCxzKTphKHksdixmLHQsZSxzKTtpZighKHZvaWQgMD09PW0/eT09PXZ8fG8oeSx2LG4sYSxzKTptKSl7cD0hMTticmVha31nfHwoZz0iY29uc3RydWN0b3IiPT1mKX1pZihwJiYhZyl7dmFyIGI9dC5jb25zdHJ1Y3Rvcix4PWUuY29uc3RydWN0b3I7YiE9eCYmImNvbnN0cnVjdG9yImluIHQmJiJjb25zdHJ1Y3RvciJpbiBlJiYhKCJmdW5jdGlvbiI9PXR5cGVvZiBiJiZiIGluc3RhbmNlb2YgYiYmImZ1bmN0aW9uIj09dHlwZW9mIHgmJnggaW5zdGFuY2VvZiB4KSYmKHA9ITEpfXJldHVybiBzLmRlbGV0ZSh0KSxzLmRlbGV0ZShlKSxwfX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTMzKSxpPW4oMzApO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtmb3IodmFyIGU9aSh0KSxuPWUubGVuZ3RoO24tLTspe3ZhciBhPWVbbl0sbz10W2FdO2Vbbl09W2EsbyxyKG8pXX1yZXR1cm4gZX19LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDEyOSksaT1uKDI2NyksYT1uKDEzNiksbz1uKDkyKSxzPW4oMTMzKSxjPW4oMTM0KSx1PW4oNDkpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3JldHVybiBvKHQpJiZzKGUpP2ModSh0KSxlKTpmdW5jdGlvbihuKXt2YXIgbz1pKG4sdCk7cmV0dXJuIHZvaWQgMD09PW8mJm89PT1lP2Eobix0KTpyKGUsbywzKX19fSxmdW5jdGlvbih0LGUsbil7dmFyIHI9big5MSk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSxuKXt2YXIgaT1udWxsPT10P3ZvaWQgMDpyKHQsZSk7cmV0dXJuIHZvaWQgMD09PWk/bjppfX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMjY5KSxpPS9bXi5bXF1dK3xcWyg/OigtP1xkKyg/OlwuXGQrKT8pfChbIiddKSgoPzooPyFcMilbXlxcXXxcXC4pKj8pXDIpXF18KD89KD86XC58XFtcXSkoPzpcLnxcW1xdfCQpKS9nLGE9L1xcKFxcKT8vZyxvPXIoKGZ1bmN0aW9uKHQpe3ZhciBlPVtdO3JldHVybiA0Nj09PXQuY2hhckNvZGVBdCgwKSYmZS5wdXNoKCIiKSx0LnJlcGxhY2UoaSwoZnVuY3Rpb24odCxuLHIsaSl7ZS5wdXNoKHI/aS5yZXBsYWNlKGEsIiQxIik6bnx8dCl9KSksZX0pKTt0LmV4cG9ydHM9b30sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMjcwKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9cih0LChmdW5jdGlvbih0KXtyZXR1cm4gNTAwPT09bi5zaXplJiZuLmNsZWFyKCksdH0pKSxuPWUuY2FjaGU7cmV0dXJuIGV9fSxmdW5jdGlvbih0LGUsbil7dmFyIHI9big3OCk7ZnVuY3Rpb24gaSh0LGUpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiB0fHxudWxsIT1lJiYiZnVuY3Rpb24iIT10eXBlb2YgZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJFeHBlY3RlZCBhIGZ1bmN0aW9uIik7dmFyIG49ZnVuY3Rpb24oKXt2YXIgcj1hcmd1bWVudHMsaT1lP2UuYXBwbHkodGhpcyxyKTpyWzBdLGE9bi5jYWNoZTtpZihhLmhhcyhpKSlyZXR1cm4gYS5nZXQoaSk7dmFyIG89dC5hcHBseSh0aGlzLHIpO3JldHVybiBuLmNhY2hlPWEuc2V0KGksbyl8fGEsb307cmV0dXJuIG4uY2FjaGU9bmV3KGkuQ2FjaGV8fHIpLG59aS5DYWNoZT1yLHQuZXhwb3J0cz1pfSxmdW5jdGlvbih0LGUsbil7dmFyIHI9bigzOCksaT1uKDY2KSxhPW4oNSksbz1uKDQyKSxzPXI/ci5wcm90b3R5cGU6dm9pZCAwLGM9cz9zLnRvU3RyaW5nOnZvaWQgMDt0LmV4cG9ydHM9ZnVuY3Rpb24gdChlKXtpZigic3RyaW5nIj09dHlwZW9mIGUpcmV0dXJuIGU7aWYoYShlKSlyZXR1cm4gaShlLHQpKyIiO2lmKG8oZSkpcmV0dXJuIGM/Yy5jYWxsKGUpOiIiO3ZhciBuPWUrIiI7cmV0dXJuIjAiPT1uJiYxL2U9PS0xLzA/Ii0wIjpufX0sZnVuY3Rpb24odCxlKXt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gbnVsbCE9dCYmZSBpbiBPYmplY3QodCl9fSxmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxMzgpLGk9bigyNzQpLGE9big5Miksbz1uKDQ5KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIGEodCk/cihvKHQpKTppKHQpfX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oOTEpO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIHIoZSx0KX19fSxmdW5jdGlvbih0LGUpe3ZhciBuPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIG51bGwhPXQmJm4uY2FsbCh0LGUpfX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oODIpLGk9big0MSksYT1uKDQ3KSxvPW4oNSkscz1uKDI0KSxjPW4oMzkpLHU9big2MiksbD1uKDQ4KSxoPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe2lmKG51bGw9PXQpcmV0dXJuITA7aWYocyh0KSYmKG8odCl8fCJzdHJpbmciPT10eXBlb2YgdHx8ImZ1bmN0aW9uIj09dHlwZW9mIHQuc3BsaWNlfHxjKHQpfHxsKHQpfHxhKHQpKSlyZXR1cm4hdC5sZW5ndGg7dmFyIGU9aSh0KTtpZigiW29iamVjdCBNYXBdIj09ZXx8IltvYmplY3QgU2V0XSI9PWUpcmV0dXJuIXQuc2l6ZTtpZih1KHQpKXJldHVybiFyKHQpLmxlbmd0aDtmb3IodmFyIG4gaW4gdClpZihoLmNhbGwodCxuKSlyZXR1cm4hMTtyZXR1cm4hMH19LGZ1bmN0aW9uKHQsZSl7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSxuLHIpe3ZhciBpPS0xLGE9bnVsbD09dD8wOnQubGVuZ3RoO2ZvcihyJiZhJiYobj10WysraV0pOysraTxhOyluPWUobix0W2ldLGksdCk7cmV0dXJuIG59fSxmdW5jdGlvbih0LGUpe3QuZXhwb3J0cz1mdW5jdGlvbih0LGUsbixyLGkpe3JldHVybiBpKHQsKGZ1bmN0aW9uKHQsaSxhKXtuPXI/KHI9ITEsdCk6ZShuLHQsaSxhKX0pKSxufX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oODIpLGk9big0MSksYT1uKDI0KSxvPW4oMjgwKSxzPW4oMjgxKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7aWYobnVsbD09dClyZXR1cm4gMDtpZihhKHQpKXJldHVybiBvKHQpP3ModCk6dC5sZW5ndGg7dmFyIGU9aSh0KTtyZXR1cm4iW29iamVjdCBNYXBdIj09ZXx8IltvYmplY3QgU2V0XSI9PWU/dC5zaXplOnIodCkubGVuZ3RofX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMzQpLGk9big1KSxhPW4oMjEpO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIHR8fCFpKHQpJiZhKHQpJiYiW29iamVjdCBTdHJpbmddIj09cih0KX19LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDI4MiksaT1uKDI4MyksYT1uKDI4NCk7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBpKHQpP2EodCk6cih0KX19LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDEzOCkoImxlbmd0aCIpO3QuZXhwb3J0cz1yfSxmdW5jdGlvbih0LGUpe3ZhciBuPVJlZ0V4cCgiW1xcdTIwMGRcXHVkODAwLVxcdWRmZmZcXHUwMzAwLVxcdTAzNmZcXHVmZTIwLVxcdWZlMmZcXHUyMGQwLVxcdTIwZmZcXHVmZTBlXFx1ZmUwZl0iKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIG4udGVzdCh0KX19LGZ1bmN0aW9uKHQsZSl7dmFyIG49IltcXHVkODAwLVxcdWRmZmZdIixyPSJbXFx1MDMwMC1cXHUwMzZmXFx1ZmUyMC1cXHVmZTJmXFx1MjBkMC1cXHUyMGZmXSIsaT0iXFx1ZDgzY1tcXHVkZmZiLVxcdWRmZmZdIixhPSJbXlxcdWQ4MDAtXFx1ZGZmZl0iLG89Iig/OlxcdWQ4M2NbXFx1ZGRlNi1cXHVkZGZmXSl7Mn0iLHM9IltcXHVkODAwLVxcdWRiZmZdW1xcdWRjMDAtXFx1ZGZmZl0iLGM9Iig/OiIrcisifCIraSsiKSIrIj8iLHU9IltcXHVmZTBlXFx1ZmUwZl0/IitjKygiKD86XFx1MjAwZCg/OiIrW2EsbyxzXS5qb2luKCJ8IikrIilbXFx1ZmUwZVxcdWZlMGZdPyIrYysiKSoiKSxsPSIoPzoiK1thK3IrIj8iLHIsbyxzLG5dLmpvaW4oInwiKSsiKSIsaD1SZWdFeHAoaSsiKD89IitpKyIpfCIrbCt1LCJnIik7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT1oLmxhc3RJbmRleD0wO2gudGVzdCh0KTspKytlO3JldHVybiBlfX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oNzkpLGk9bigxMjUpLGE9big4OCksbz1uKDI1KSxzPW4oNjMpLGM9big1KSx1PW4oMzkpLGw9bigzNyksaD1uKDExKSxmPW4oNDgpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUsbil7dmFyIGQ9Yyh0KSxwPWR8fHUodCl8fGYodCk7aWYoZT1vKGUsNCksbnVsbD09bil7dmFyIGc9dCYmdC5jb25zdHJ1Y3RvcjtuPXA/ZD9uZXcgZzpbXTpoKHQpJiZsKGcpP2kocyh0KSk6e319cmV0dXJuKHA/cjphKSh0LChmdW5jdGlvbih0LHIsaSl7cmV0dXJuIGUobix0LHIsaSl9KSksbn19LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDk0KSxpPW4oNjcpLGE9bigyOTEpLG89bigxNDYpLHM9aSgoZnVuY3Rpb24odCl7cmV0dXJuIGEocih0LDEsbywhMCkpfSkpO3QuZXhwb3J0cz1zfSxmdW5jdGlvbih0LGUsbil7dmFyIHI9bigzOCksaT1uKDQ3KSxhPW4oNSksbz1yP3IuaXNDb25jYXRTcHJlYWRhYmxlOnZvaWQgMDt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIGEodCl8fGkodCl8fCEhKG8mJnQmJnRbb10pfX0sZnVuY3Rpb24odCxlKXt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlLG4pe3N3aXRjaChuLmxlbmd0aCl7Y2FzZSAwOnJldHVybiB0LmNhbGwoZSk7Y2FzZSAxOnJldHVybiB0LmNhbGwoZSxuWzBdKTtjYXNlIDI6cmV0dXJuIHQuY2FsbChlLG5bMF0sblsxXSk7Y2FzZSAzOnJldHVybiB0LmNhbGwoZSxuWzBdLG5bMV0sblsyXSl9cmV0dXJuIHQuYXBwbHkoZSxuKX19LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDg2KSxpPW4oMTExKSxhPW4oMzUpLG89aT9mdW5jdGlvbih0LGUpe3JldHVybiBpKHQsInRvU3RyaW5nIix7Y29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITEsdmFsdWU6cihlKSx3cml0YWJsZTohMH0pfTphO3QuZXhwb3J0cz1vfSxmdW5jdGlvbih0LGUpe3ZhciBuPURhdGUubm93O3QuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT0wLHI9MDtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgaT1uKCksYT0xNi0oaS1yKTtpZihyPWksYT4wKXtpZigrK2U+PTgwMClyZXR1cm4gYXJndW1lbnRzWzBdfWVsc2UgZT0wO3JldHVybiB0LmFwcGx5KHZvaWQgMCxhcmd1bWVudHMpfX19LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDEzMSksaT1uKDI5MiksYT1uKDI5Niksbz1uKDEzMikscz1uKDI5NyksYz1uKDkwKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlLG4pe3ZhciB1PS0xLGw9aSxoPXQubGVuZ3RoLGY9ITAsZD1bXSxwPWQ7aWYobilmPSExLGw9YTtlbHNlIGlmKGg+PTIwMCl7dmFyIGc9ZT9udWxsOnModCk7aWYoZylyZXR1cm4gYyhnKTtmPSExLGw9byxwPW5ldyByfWVsc2UgcD1lP1tdOmQ7dDpmb3IoOysrdTxoOyl7dmFyIHk9dFt1XSx2PWU/ZSh5KTp5O2lmKHk9bnx8MCE9PXk/eTowLGYmJnY9PXYpe2Zvcih2YXIgbT1wLmxlbmd0aDttLS07KWlmKHBbbV09PT12KWNvbnRpbnVlIHQ7ZSYmcC5wdXNoKHYpLGQucHVzaCh5KX1lbHNlIGwocCx2LG4pfHwocCE9PWQmJnAucHVzaCh2KSxkLnB1c2goeSkpfXJldHVybiBkfX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMjkzKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4hIShudWxsPT10PzA6dC5sZW5ndGgpJiZyKHQsZSwwKT4tMX19LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDE0NSksaT1uKDI5NCksYT1uKDI5NSk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gZT09ZT9hKHQsZSxuKTpyKHQsaSxuKX19LGZ1bmN0aW9uKHQsZSl7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiB0IT10fX0sZnVuY3Rpb24odCxlKXt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlLG4pe2Zvcih2YXIgcj1uLTEsaT10Lmxlbmd0aDsrK3I8aTspaWYodFtyXT09PWUpcmV0dXJuIHI7cmV0dXJuLTF9fSxmdW5jdGlvbih0LGUpe3QuZXhwb3J0cz1mdW5jdGlvbih0LGUsbil7Zm9yKHZhciByPS0xLGk9bnVsbD09dD8wOnQubGVuZ3RoOysrcjxpOylpZihuKGUsdFtyXSkpcmV0dXJuITA7cmV0dXJuITF9fSxmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxMjEpLGk9bigyOTgpLGE9big5MCksbz1yJiYxL2EobmV3IHIoWywtMF0pKVsxXT09MS8wP2Z1bmN0aW9uKHQpe3JldHVybiBuZXcgcih0KX06aTt0LmV4cG9ydHM9b30sZnVuY3Rpb24odCxlKXt0LmV4cG9ydHM9ZnVuY3Rpb24oKXt9fSxmdW5jdGlvbih0LGUsbil7dmFyIHI9big2Nik7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHIoZSwoZnVuY3Rpb24oZSl7cmV0dXJuIHRbZV19KSl9fSxmdW5jdGlvbih0LGUpe3QuZXhwb3J0cz0iMi4xLjgifSxmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxMCksaT1uKDc2KTtmdW5jdGlvbiBhKHQpe3JldHVybiByLm1hcCh0Lm5vZGVzKCksKGZ1bmN0aW9uKGUpe3ZhciBuPXQubm9kZShlKSxpPXQucGFyZW50KGUpLGE9e3Y6ZX07cmV0dXJuIHIuaXNVbmRlZmluZWQobil8fChhLnZhbHVlPW4pLHIuaXNVbmRlZmluZWQoaSl8fChhLnBhcmVudD1pKSxhfSkpfWZ1bmN0aW9uIG8odCl7cmV0dXJuIHIubWFwKHQuZWRnZXMoKSwoZnVuY3Rpb24oZSl7dmFyIG49dC5lZGdlKGUpLGk9e3Y6ZS52LHc6ZS53fTtyZXR1cm4gci5pc1VuZGVmaW5lZChlLm5hbWUpfHwoaS5uYW1lPWUubmFtZSksci5pc1VuZGVmaW5lZChuKXx8KGkudmFsdWU9biksaX0pKX10LmV4cG9ydHM9e3dyaXRlOmZ1bmN0aW9uKHQpe3ZhciBlPXtvcHRpb25zOntkaXJlY3RlZDp0LmlzRGlyZWN0ZWQoKSxtdWx0aWdyYXBoOnQuaXNNdWx0aWdyYXBoKCksY29tcG91bmQ6dC5pc0NvbXBvdW5kKCl9LG5vZGVzOmEodCksZWRnZXM6byh0KX07ci5pc1VuZGVmaW5lZCh0LmdyYXBoKCkpfHwoZS52YWx1ZT1yLmNsb25lKHQuZ3JhcGgoKSkpO3JldHVybiBlfSxyZWFkOmZ1bmN0aW9uKHQpe3ZhciBlPW5ldyBpKHQub3B0aW9ucykuc2V0R3JhcGgodC52YWx1ZSk7cmV0dXJuIHIuZWFjaCh0Lm5vZGVzLChmdW5jdGlvbih0KXtlLnNldE5vZGUodC52LHQudmFsdWUpLHQucGFyZW50JiZlLnNldFBhcmVudCh0LnYsdC5wYXJlbnQpfSkpLHIuZWFjaCh0LmVkZ2VzLChmdW5jdGlvbih0KXtlLnNldEVkZ2Uoe3Y6dC52LHc6dC53LG5hbWU6dC5uYW1lfSx0LnZhbHVlKX0pKSxlfX19LGZ1bmN0aW9uKHQsZSxuKXt0LmV4cG9ydHM9e2NvbXBvbmVudHM6bigzMDMpLGRpamtzdHJhOm4oMTQ4KSxkaWprc3RyYUFsbDpuKDMwNCksZmluZEN5Y2xlczpuKDMwNSksZmxveWRXYXJzaGFsbDpuKDMwNiksaXNBY3ljbGljOm4oMzA3KSxwb3N0b3JkZXI6bigzMDgpLHByZW9yZGVyOm4oMzA5KSxwcmltOm4oMzEwKSx0YXJqYW46bigxNTApLHRvcHNvcnQ6bigxNTEpfX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTApO3QuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZSxuPXt9LGk9W107ZnVuY3Rpb24gYShpKXtyLmhhcyhuLGkpfHwobltpXT0hMCxlLnB1c2goaSksci5lYWNoKHQuc3VjY2Vzc29ycyhpKSxhKSxyLmVhY2godC5wcmVkZWNlc3NvcnMoaSksYSkpfXJldHVybiByLmVhY2godC5ub2RlcygpLChmdW5jdGlvbih0KXtlPVtdLGEodCksZS5sZW5ndGgmJmkucHVzaChlKX0pKSxpfX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTQ4KSxpPW4oMTApO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUsbil7cmV0dXJuIGkudHJhbnNmb3JtKHQubm9kZXMoKSwoZnVuY3Rpb24oaSxhKXtpW2FdPXIodCxhLGUsbil9KSx7fSl9fSxmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxMCksaT1uKDE1MCk7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiByLmZpbHRlcihpKHQpLChmdW5jdGlvbihlKXtyZXR1cm4gZS5sZW5ndGg+MXx8MT09PWUubGVuZ3RoJiZ0Lmhhc0VkZ2UoZVswXSxlWzBdKX0pKX19LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDEwKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlLG4pe3JldHVybiBmdW5jdGlvbih0LGUsbil7dmFyIHI9e30saT10Lm5vZGVzKCk7cmV0dXJuIGkuZm9yRWFjaCgoZnVuY3Rpb24odCl7clt0XT17fSxyW3RdW3RdPXtkaXN0YW5jZTowfSxpLmZvckVhY2goKGZ1bmN0aW9uKGUpe3QhPT1lJiYoclt0XVtlXT17ZGlzdGFuY2U6TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZfSl9KSksbih0KS5mb3JFYWNoKChmdW5jdGlvbihuKXt2YXIgaT1uLnY9PT10P24udzpuLnYsYT1lKG4pO3JbdF1baV09e2Rpc3RhbmNlOmEscHJlZGVjZXNzb3I6dH19KSl9KSksaS5mb3JFYWNoKChmdW5jdGlvbih0KXt2YXIgZT1yW3RdO2kuZm9yRWFjaCgoZnVuY3Rpb24obil7dmFyIGE9cltuXTtpLmZvckVhY2goKGZ1bmN0aW9uKG4pe3ZhciByPWFbdF0saT1lW25dLG89YVtuXSxzPXIuZGlzdGFuY2UraS5kaXN0YW5jZTtzPG8uZGlzdGFuY2UmJihvLmRpc3RhbmNlPXMsby5wcmVkZWNlc3Nvcj1pLnByZWRlY2Vzc29yKX0pKX0pKX0pKSxyfSh0LGV8fGksbnx8ZnVuY3Rpb24oZSl7cmV0dXJuIHQub3V0RWRnZXMoZSl9KX07dmFyIGk9ci5jb25zdGFudCgxKX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTUxKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7dHJ5e3IodCl9Y2F0Y2godCl7aWYodCBpbnN0YW5jZW9mIHIuQ3ljbGVFeGNlcHRpb24pcmV0dXJuITE7dGhyb3cgdH1yZXR1cm4hMH19LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDE1Mik7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHIodCxlLCJwb3N0Iil9fSxmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxNTIpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3JldHVybiByKHQsZSwicHJlIil9fSxmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxMCksaT1uKDc2KSxhPW4oMTQ5KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgbixvPW5ldyBpLHM9e30sYz1uZXcgYTtmdW5jdGlvbiB1KHQpe3ZhciByPXQudj09PW4/dC53OnQudixpPWMucHJpb3JpdHkocik7aWYodm9pZCAwIT09aSl7dmFyIGE9ZSh0KTthPGkmJihzW3JdPW4sYy5kZWNyZWFzZShyLGEpKX19aWYoMD09PXQubm9kZUNvdW50KCkpcmV0dXJuIG87ci5lYWNoKHQubm9kZXMoKSwoZnVuY3Rpb24odCl7Yy5hZGQodCxOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFkpLG8uc2V0Tm9kZSh0KX0pKSxjLmRlY3JlYXNlKHQubm9kZXMoKVswXSwwKTt2YXIgbD0hMTtmb3IoO2Muc2l6ZSgpPjA7KXtpZihuPWMucmVtb3ZlTWluKCksci5oYXMocyxuKSlvLnNldEVkZ2UobixzW25dKTtlbHNle2lmKGwpdGhyb3cgbmV3IEVycm9yKCJJbnB1dCBncmFwaCBpcyBub3QgY29ubmVjdGVkOiAiK3QpO2w9ITB9dC5ub2RlRWRnZXMobikuZm9yRWFjaCh1KX1yZXR1cm4gb319LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcjt0cnl7cj1uKDMpfWNhdGNoKHQpe31yfHwocj13aW5kb3cuZ3JhcGhsaWIpLHQuZXhwb3J0cz1yfSxmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oNCksaT1uKDM0NSksYT1uKDM0OCksbz1uKDM0OSkscz1uKDgpLm5vcm1hbGl6ZVJhbmtzLGM9bigzNTEpLHU9big4KS5yZW1vdmVFbXB0eVJhbmtzLGw9bigzNTIpLGg9bigzNTMpLGY9bigzNTQpLGQ9bigzNTUpLHA9bigzNjQpLGc9big4KSx5PW4oMTcpLkdyYXBoO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciBuPWUmJmUuZGVidWdUaW1pbmc/Zy50aW1lOmcubm90aW1lO24oImxheW91dCIsKGZ1bmN0aW9uKCl7dmFyIGU9bigiICBidWlsZExheW91dEdyYXBoIiwoZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24odCl7dmFyIGU9bmV3IHkoe211bHRpZ3JhcGg6ITAsY29tcG91bmQ6ITB9KSxuPUModC5ncmFwaCgpKTtyZXR1cm4gZS5zZXRHcmFwaChyLm1lcmdlKHt9LG0sVChuLHYpLHIucGljayhuLGIpKSksci5mb3JFYWNoKHQubm9kZXMoKSwoZnVuY3Rpb24obil7dmFyIGk9Qyh0Lm5vZGUobikpO2Uuc2V0Tm9kZShuLHIuZGVmYXVsdHMoVChpLHgpLF8pKSxlLnNldFBhcmVudChuLHQucGFyZW50KG4pKX0pKSxyLmZvckVhY2godC5lZGdlcygpLChmdW5jdGlvbihuKXt2YXIgaT1DKHQuZWRnZShuKSk7ZS5zZXRFZGdlKG4sci5tZXJnZSh7fSx3LFQoaSxrKSxyLnBpY2soaSxFKSkpfSkpLGV9KHQpfSkpO24oIiAgcnVuTGF5b3V0IiwoZnVuY3Rpb24oKXshZnVuY3Rpb24odCxlKXtlKCIgICAgbWFrZVNwYWNlRm9yRWRnZUxhYmVscyIsKGZ1bmN0aW9uKCl7IWZ1bmN0aW9uKHQpe3ZhciBlPXQuZ3JhcGgoKTtlLnJhbmtzZXAvPTIsci5mb3JFYWNoKHQuZWRnZXMoKSwoZnVuY3Rpb24obil7dmFyIHI9dC5lZGdlKG4pO3IubWlubGVuKj0yLCJjIiE9PXIubGFiZWxwb3MudG9Mb3dlckNhc2UoKSYmKCJUQiI9PT1lLnJhbmtkaXJ8fCJCVCI9PT1lLnJhbmtkaXI/ci53aWR0aCs9ci5sYWJlbG9mZnNldDpyLmhlaWdodCs9ci5sYWJlbG9mZnNldCl9KSl9KHQpfSkpLGUoIiAgICByZW1vdmVTZWxmRWRnZXMiLChmdW5jdGlvbigpeyFmdW5jdGlvbih0KXtyLmZvckVhY2godC5lZGdlcygpLChmdW5jdGlvbihlKXtpZihlLnY9PT1lLncpe3ZhciBuPXQubm9kZShlLnYpO24uc2VsZkVkZ2VzfHwobi5zZWxmRWRnZXM9W10pLG4uc2VsZkVkZ2VzLnB1c2goe2U6ZSxsYWJlbDp0LmVkZ2UoZSl9KSx0LnJlbW92ZUVkZ2UoZSl9fSkpfSh0KX0pKSxlKCIgICAgYWN5Y2xpYyIsKGZ1bmN0aW9uKCl7aS5ydW4odCl9KSksZSgiICAgIG5lc3RpbmdHcmFwaC5ydW4iLChmdW5jdGlvbigpe2wucnVuKHQpfSkpLGUoIiAgICByYW5rIiwoZnVuY3Rpb24oKXtvKGcuYXNOb25Db21wb3VuZEdyYXBoKHQpKX0pKSxlKCIgICAgaW5qZWN0RWRnZUxhYmVsUHJveGllcyIsKGZ1bmN0aW9uKCl7IWZ1bmN0aW9uKHQpe3IuZm9yRWFjaCh0LmVkZ2VzKCksKGZ1bmN0aW9uKGUpe3ZhciBuPXQuZWRnZShlKTtpZihuLndpZHRoJiZuLmhlaWdodCl7dmFyIHI9dC5ub2RlKGUudiksaT17cmFuazoodC5ub2RlKGUudykucmFuay1yLnJhbmspLzIrci5yYW5rLGU6ZX07Zy5hZGREdW1teU5vZGUodCwiZWRnZS1wcm94eSIsaSwiX2VwIil9fSkpfSh0KX0pKSxlKCIgICAgcmVtb3ZlRW1wdHlSYW5rcyIsKGZ1bmN0aW9uKCl7dSh0KX0pKSxlKCIgICAgbmVzdGluZ0dyYXBoLmNsZWFudXAiLChmdW5jdGlvbigpe2wuY2xlYW51cCh0KX0pKSxlKCIgICAgbm9ybWFsaXplUmFua3MiLChmdW5jdGlvbigpe3ModCl9KSksZSgiICAgIGFzc2lnblJhbmtNaW5NYXgiLChmdW5jdGlvbigpeyFmdW5jdGlvbih0KXt2YXIgZT0wO3IuZm9yRWFjaCh0Lm5vZGVzKCksKGZ1bmN0aW9uKG4pe3ZhciBpPXQubm9kZShuKTtpLmJvcmRlclRvcCYmKGkubWluUmFuaz10Lm5vZGUoaS5ib3JkZXJUb3ApLnJhbmssaS5tYXhSYW5rPXQubm9kZShpLmJvcmRlckJvdHRvbSkucmFuayxlPXIubWF4KGUsaS5tYXhSYW5rKSl9KSksdC5ncmFwaCgpLm1heFJhbms9ZX0odCl9KSksZSgiICAgIHJlbW92ZUVkZ2VMYWJlbFByb3hpZXMiLChmdW5jdGlvbigpeyFmdW5jdGlvbih0KXtyLmZvckVhY2godC5ub2RlcygpLChmdW5jdGlvbihlKXt2YXIgbj10Lm5vZGUoZSk7ImVkZ2UtcHJveHkiPT09bi5kdW1teSYmKHQuZWRnZShuLmUpLmxhYmVsUmFuaz1uLnJhbmssdC5yZW1vdmVOb2RlKGUpKX0pKX0odCl9KSksZSgiICAgIG5vcm1hbGl6ZS5ydW4iLChmdW5jdGlvbigpe2EucnVuKHQpfSkpLGUoIiAgICBwYXJlbnREdW1teUNoYWlucyIsKGZ1bmN0aW9uKCl7Yyh0KX0pKSxlKCIgICAgYWRkQm9yZGVyU2VnbWVudHMiLChmdW5jdGlvbigpe2godCl9KSksZSgiICAgIG9yZGVyIiwoZnVuY3Rpb24oKXtkKHQpfSkpLGUoIiAgICBpbnNlcnRTZWxmRWRnZXMiLChmdW5jdGlvbigpeyFmdW5jdGlvbih0KXt2YXIgZT1nLmJ1aWxkTGF5ZXJNYXRyaXgodCk7ci5mb3JFYWNoKGUsKGZ1bmN0aW9uKGUpe3ZhciBuPTA7ci5mb3JFYWNoKGUsKGZ1bmN0aW9uKGUsaSl7dmFyIGE9dC5ub2RlKGUpO2Eub3JkZXI9aStuLHIuZm9yRWFjaChhLnNlbGZFZGdlcywoZnVuY3Rpb24oZSl7Zy5hZGREdW1teU5vZGUodCwic2VsZmVkZ2UiLHt3aWR0aDplLmxhYmVsLndpZHRoLGhlaWdodDplLmxhYmVsLmhlaWdodCxyYW5rOmEucmFuayxvcmRlcjppKyArK24sZTplLmUsbGFiZWw6ZS5sYWJlbH0sIl9zZSIpfSkpLGRlbGV0ZSBhLnNlbGZFZGdlc30pKX0pKX0odCl9KSksZSgiICAgIGFkanVzdENvb3JkaW5hdGVTeXN0ZW0iLChmdW5jdGlvbigpe2YuYWRqdXN0KHQpfSkpLGUoIiAgICBwb3NpdGlvbiIsKGZ1bmN0aW9uKCl7cCh0KX0pKSxlKCIgICAgcG9zaXRpb25TZWxmRWRnZXMiLChmdW5jdGlvbigpeyFmdW5jdGlvbih0KXtyLmZvckVhY2godC5ub2RlcygpLChmdW5jdGlvbihlKXt2YXIgbj10Lm5vZGUoZSk7aWYoInNlbGZlZGdlIj09PW4uZHVtbXkpe3ZhciByPXQubm9kZShuLmUudiksaT1yLngrci53aWR0aC8yLGE9ci55LG89bi54LWkscz1yLmhlaWdodC8yO3Quc2V0RWRnZShuLmUsbi5sYWJlbCksdC5yZW1vdmVOb2RlKGUpLG4ubGFiZWwucG9pbnRzPVt7eDppKzIqby8zLHk6YS1zfSx7eDppKzUqby82LHk6YS1zfSx7eDppK28seTphfSx7eDppKzUqby82LHk6YStzfSx7eDppKzIqby8zLHk6YStzfV0sbi5sYWJlbC54PW4ueCxuLmxhYmVsLnk9bi55fX0pKX0odCl9KSksZSgiICAgIHJlbW92ZUJvcmRlck5vZGVzIiwoZnVuY3Rpb24oKXshZnVuY3Rpb24odCl7ci5mb3JFYWNoKHQubm9kZXMoKSwoZnVuY3Rpb24oZSl7aWYodC5jaGlsZHJlbihlKS5sZW5ndGgpe3ZhciBuPXQubm9kZShlKSxpPXQubm9kZShuLmJvcmRlclRvcCksYT10Lm5vZGUobi5ib3JkZXJCb3R0b20pLG89dC5ub2RlKHIubGFzdChuLmJvcmRlckxlZnQpKSxzPXQubm9kZShyLmxhc3Qobi5ib3JkZXJSaWdodCkpO24ud2lkdGg9TWF0aC5hYnMocy54LW8ueCksbi5oZWlnaHQ9TWF0aC5hYnMoYS55LWkueSksbi54PW8ueCtuLndpZHRoLzIsbi55PWkueStuLmhlaWdodC8yfX0pKSxyLmZvckVhY2godC5ub2RlcygpLChmdW5jdGlvbihlKXsiYm9yZGVyIj09PXQubm9kZShlKS5kdW1teSYmdC5yZW1vdmVOb2RlKGUpfSkpfSh0KX0pKSxlKCIgICAgbm9ybWFsaXplLnVuZG8iLChmdW5jdGlvbigpe2EudW5kbyh0KX0pKSxlKCIgICAgZml4dXBFZGdlTGFiZWxDb29yZHMiLChmdW5jdGlvbigpeyFmdW5jdGlvbih0KXtyLmZvckVhY2godC5lZGdlcygpLChmdW5jdGlvbihlKXt2YXIgbj10LmVkZ2UoZSk7aWYoci5oYXMobiwieCIpKXN3aXRjaCgibCIhPT1uLmxhYmVscG9zJiYiciIhPT1uLmxhYmVscG9zfHwobi53aWR0aC09bi5sYWJlbG9mZnNldCksbi5sYWJlbHBvcyl7Y2FzZSJsIjpuLngtPW4ud2lkdGgvMituLmxhYmVsb2Zmc2V0O2JyZWFrO2Nhc2UiciI6bi54Kz1uLndpZHRoLzIrbi5sYWJlbG9mZnNldH19KSl9KHQpfSkpLGUoIiAgICB1bmRvQ29vcmRpbmF0ZVN5c3RlbSIsKGZ1bmN0aW9uKCl7Zi51bmRvKHQpfSkpLGUoIiAgICB0cmFuc2xhdGVHcmFwaCIsKGZ1bmN0aW9uKCl7IWZ1bmN0aW9uKHQpe3ZhciBlPU51bWJlci5QT1NJVElWRV9JTkZJTklUWSxuPTAsaT1OdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFksYT0wLG89dC5ncmFwaCgpLHM9by5tYXJnaW54fHwwLGM9by5tYXJnaW55fHwwO2Z1bmN0aW9uIHUodCl7dmFyIHI9dC54LG89dC55LHM9dC53aWR0aCxjPXQuaGVpZ2h0O2U9TWF0aC5taW4oZSxyLXMvMiksbj1NYXRoLm1heChuLHIrcy8yKSxpPU1hdGgubWluKGksby1jLzIpLGE9TWF0aC5tYXgoYSxvK2MvMil9ci5mb3JFYWNoKHQubm9kZXMoKSwoZnVuY3Rpb24oZSl7dSh0Lm5vZGUoZSkpfSkpLHIuZm9yRWFjaCh0LmVkZ2VzKCksKGZ1bmN0aW9uKGUpe3ZhciBuPXQuZWRnZShlKTtyLmhhcyhuLCJ4IikmJnUobil9KSksZS09cyxpLT1jLHIuZm9yRWFjaCh0Lm5vZGVzKCksKGZ1bmN0aW9uKG4pe3ZhciByPXQubm9kZShuKTtyLngtPWUsci55LT1pfSkpLHIuZm9yRWFjaCh0LmVkZ2VzKCksKGZ1bmN0aW9uKG4pe3ZhciBhPXQuZWRnZShuKTtyLmZvckVhY2goYS5wb2ludHMsKGZ1bmN0aW9uKHQpe3QueC09ZSx0LnktPWl9KSksci5oYXMoYSwieCIpJiYoYS54LT1lKSxyLmhhcyhhLCJ5IikmJihhLnktPWkpfSkpLG8ud2lkdGg9bi1lK3Msby5oZWlnaHQ9YS1pK2N9KHQpfSkpLGUoIiAgICBhc3NpZ25Ob2RlSW50ZXJzZWN0cyIsKGZ1bmN0aW9uKCl7IWZ1bmN0aW9uKHQpe3IuZm9yRWFjaCh0LmVkZ2VzKCksKGZ1bmN0aW9uKGUpe3ZhciBuLHIsaT10LmVkZ2UoZSksYT10Lm5vZGUoZS52KSxvPXQubm9kZShlLncpO2kucG9pbnRzPyhuPWkucG9pbnRzWzBdLHI9aS5wb2ludHNbaS5wb2ludHMubGVuZ3RoLTFdKTooaS5wb2ludHM9W10sbj1vLHI9YSksaS5wb2ludHMudW5zaGlmdChnLmludGVyc2VjdFJlY3QoYSxuKSksaS5wb2ludHMucHVzaChnLmludGVyc2VjdFJlY3QobyxyKSl9KSl9KHQpfSkpLGUoIiAgICByZXZlcnNlUG9pbnRzIiwoZnVuY3Rpb24oKXshZnVuY3Rpb24odCl7ci5mb3JFYWNoKHQuZWRnZXMoKSwoZnVuY3Rpb24oZSl7dmFyIG49dC5lZGdlKGUpO24ucmV2ZXJzZWQmJm4ucG9pbnRzLnJldmVyc2UoKX0pKX0odCl9KSksZSgiICAgIGFjeWNsaWMudW5kbyIsKGZ1bmN0aW9uKCl7aS51bmRvKHQpfSkpfShlLG4pfSkpLG4oIiAgdXBkYXRlSW5wdXRHcmFwaCIsKGZ1bmN0aW9uKCl7IWZ1bmN0aW9uKHQsZSl7ci5mb3JFYWNoKHQubm9kZXMoKSwoZnVuY3Rpb24obil7dmFyIHI9dC5ub2RlKG4pLGk9ZS5ub2RlKG4pO3ImJihyLng9aS54LHIueT1pLnksZS5jaGlsZHJlbihuKS5sZW5ndGgmJihyLndpZHRoPWkud2lkdGgsci5oZWlnaHQ9aS5oZWlnaHQpKX0pKSxyLmZvckVhY2godC5lZGdlcygpLChmdW5jdGlvbihuKXt2YXIgaT10LmVkZ2UobiksYT1lLmVkZ2Uobik7aS5wb2ludHM9YS5wb2ludHMsci5oYXMoYSwieCIpJiYoaS54PWEueCxpLnk9YS55KX0pKSx0LmdyYXBoKCkud2lkdGg9ZS5ncmFwaCgpLndpZHRoLHQuZ3JhcGgoKS5oZWlnaHQ9ZS5ncmFwaCgpLmhlaWdodH0odCxlKX0pKX0pKX07dmFyIHY9WyJub2Rlc2VwIiwiZWRnZXNlcCIsInJhbmtzZXAiLCJtYXJnaW54IiwibWFyZ2lueSJdLG09e3JhbmtzZXA6NTAsZWRnZXNlcDoyMCxub2Rlc2VwOjUwLHJhbmtkaXI6InRiIn0sYj1bImFjeWNsaWNlciIsInJhbmtlciIsInJhbmtkaXIiLCJhbGlnbiJdLHg9WyJ3aWR0aCIsImhlaWdodCJdLF89e3dpZHRoOjAsaGVpZ2h0OjB9LGs9WyJtaW5sZW4iLCJ3ZWlnaHQiLCJ3aWR0aCIsImhlaWdodCIsImxhYmVsb2Zmc2V0Il0sdz17bWlubGVuOjEsd2VpZ2h0OjEsd2lkdGg6MCxoZWlnaHQ6MCxsYWJlbG9mZnNldDoxMCxsYWJlbHBvczoiciJ9LEU9WyJsYWJlbHBvcyJdO2Z1bmN0aW9uIFQodCxlKXtyZXR1cm4gci5tYXBWYWx1ZXMoci5waWNrKHQsZSksTnVtYmVyKX1mdW5jdGlvbiBDKHQpe3ZhciBlPXt9O3JldHVybiByLmZvckVhY2godCwoZnVuY3Rpb24odCxuKXtlW24udG9Mb3dlckNhc2UoKV09dH0pKSxlfX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTA4KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIHIodCw1KX19LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDMxNSkobigzMTYpKTt0LmV4cG9ydHM9cn0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMjUpLGk9bigyNCksYT1uKDMwKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKGUsbixvKXt2YXIgcz1PYmplY3QoZSk7aWYoIWkoZSkpe3ZhciBjPXIobiwzKTtlPWEoZSksbj1mdW5jdGlvbih0KXtyZXR1cm4gYyhzW3RdLHQscyl9fXZhciB1PXQoZSxuLG8pO3JldHVybiB1Pi0xP3NbYz9lW3VdOnVdOnZvaWQgMH19fSxmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxNDUpLGk9bigyNSksYT1uKDMxNyksbz1NYXRoLm1heDt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlLG4pe3ZhciBzPW51bGw9PXQ/MDp0Lmxlbmd0aDtpZighcylyZXR1cm4tMTt2YXIgYz1udWxsPT1uPzA6YShuKTtyZXR1cm4gYzwwJiYoYz1vKHMrYywwKSkscih0LGkoZSwzKSxjKX19LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDE1NSk7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPXIodCksbj1lJTE7cmV0dXJuIGU9PWU/bj9lLW46ZTowfX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTEpLGk9big0MiksYT0vXlxzK3xccyskL2csbz0vXlstK10weFswLTlhLWZdKyQvaSxzPS9eMGJbMDFdKyQvaSxjPS9eMG9bMC03XSskL2ksdT1wYXJzZUludDt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7aWYoIm51bWJlciI9PXR5cGVvZiB0KXJldHVybiB0O2lmKGkodCkpcmV0dXJuIE5hTjtpZihyKHQpKXt2YXIgZT0iZnVuY3Rpb24iPT10eXBlb2YgdC52YWx1ZU9mP3QudmFsdWVPZigpOnQ7dD1yKGUpP2UrIiI6ZX1pZigic3RyaW5nIiE9dHlwZW9mIHQpcmV0dXJuIDA9PT10P3Q6K3Q7dD10LnJlcGxhY2UoYSwiIik7dmFyIG49cy50ZXN0KHQpO3JldHVybiBufHxjLnRlc3QodCk/dSh0LnNsaWNlKDIpLG4/Mjo4KTpvLnRlc3QodCk/TmFOOit0fX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oODkpLGk9bigxMjcpLGE9big0MCk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIG51bGw9PXQ/dDpyKHQsaShlKSxhKX19LGZ1bmN0aW9uKHQsZSl7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPW51bGw9PXQ/MDp0Lmxlbmd0aDtyZXR1cm4gZT90W2UtMV06dm9pZCAwfX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oNTkpLGk9big4OCksYT1uKDI1KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgbj17fTtyZXR1cm4gZT1hKGUsMyksaSh0LChmdW5jdGlvbih0LGksYSl7cihuLGksZSh0LGksYSkpfSkpLG59fSxmdW5jdGlvbih0LGUsbil7dmFyIHI9big5NSksaT1uKDMyMyksYT1uKDM1KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIHQmJnQubGVuZ3RoP3IodCxhLGkpOnZvaWQgMH19LGZ1bmN0aW9uKHQsZSl7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQ+ZX19LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDMyNSksaT1uKDMyOCkoKGZ1bmN0aW9uKHQsZSxuKXtyKHQsZSxuKX0pKTt0LmV4cG9ydHM9aX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oNTMpLGk9bigxNTcpLGE9big4OSksbz1uKDMyNikscz1uKDExKSxjPW4oNDApLHU9bigxNTkpO3QuZXhwb3J0cz1mdW5jdGlvbiB0KGUsbixsLGgsZil7ZSE9PW4mJmEobiwoZnVuY3Rpb24oYSxjKXtpZihmfHwoZj1uZXcgcikscyhhKSlvKGUsbixjLGwsdCxoLGYpO2Vsc2V7dmFyIGQ9aD9oKHUoZSxjKSxhLGMrIiIsZSxuLGYpOnZvaWQgMDt2b2lkIDA9PT1kJiYoZD1hKSxpKGUsYyxkKX19KSxjKX19LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDE1NyksaT1uKDExNCksYT1uKDEyMyksbz1uKDExNSkscz1uKDEyNCksYz1uKDQ3KSx1PW4oNSksbD1uKDE0NiksaD1uKDM5KSxmPW4oMzcpLGQ9bigxMSkscD1uKDE1OCksZz1uKDQ4KSx5PW4oMTU5KSx2PW4oMzI3KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlLG4sbSxiLHgsXyl7dmFyIGs9eSh0LG4pLHc9eShlLG4pLEU9Xy5nZXQodyk7aWYoRSlyKHQsbixFKTtlbHNle3ZhciBUPXg/eChrLHcsbisiIix0LGUsXyk6dm9pZCAwLEM9dm9pZCAwPT09VDtpZihDKXt2YXIgUz11KHcpLEE9IVMmJmgodyksTT0hUyYmIUEmJmcodyk7VD13LFN8fEF8fE0/dShrKT9UPWs6bChrKT9UPW8oayk6QT8oQz0hMSxUPWkodywhMCkpOk0/KEM9ITEsVD1hKHcsITApKTpUPVtdOnAodyl8fGModyk/KFQ9ayxjKGspP1Q9dihrKTpkKGspJiYhZihrKXx8KFQ9cyh3KSkpOkM9ITF9QyYmKF8uc2V0KHcsVCksYihULHcsbSx4LF8pLF8uZGVsZXRlKHcpKSxyKHQsbixUKX19fSxmdW5jdGlvbih0LGUsbil7dmFyIHI9big0NiksaT1uKDQwKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIHIodCxpKHQpKX19LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDY3KSxpPW4oNjgpO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gcigoZnVuY3Rpb24oZSxuKXt2YXIgcj0tMSxhPW4ubGVuZ3RoLG89YT4xP25bYS0xXTp2b2lkIDAscz1hPjI/blsyXTp2b2lkIDA7Zm9yKG89dC5sZW5ndGg+MyYmImZ1bmN0aW9uIj09dHlwZW9mIG8/KGEtLSxvKTp2b2lkIDAscyYmaShuWzBdLG5bMV0scykmJihvPWE8Mz92b2lkIDA6byxhPTEpLGU9T2JqZWN0KGUpOysrcjxhOyl7dmFyIGM9bltyXTtjJiZ0KGUsYyxyLG8pfXJldHVybiBlfSkpfX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oOTUpLGk9bigxNjApLGE9bigzNSk7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiB0JiZ0Lmxlbmd0aD9yKHQsYSxpKTp2b2lkIDB9fSxmdW5jdGlvbih0LGUsbil7dmFyIHI9big5NSksaT1uKDI1KSxhPW4oMTYwKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdCYmdC5sZW5ndGg/cih0LGkoZSwyKSxhKTp2b2lkIDB9fSxmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxNik7dC5leHBvcnRzPWZ1bmN0aW9uKCl7cmV0dXJuIHIuRGF0ZS5ub3coKX19LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDMzMyksaT1uKDEzNik7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHIodCxlLChmdW5jdGlvbihlLG4pe3JldHVybiBpKHQsbil9KSl9fSxmdW5jdGlvbih0LGUsbil7dmFyIHI9big5MSksaT1uKDMzNCksYT1uKDY1KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlLG4pe2Zvcih2YXIgbz0tMSxzPWUubGVuZ3RoLGM9e307KytvPHM7KXt2YXIgdT1lW29dLGw9cih0LHUpO24obCx1KSYmaShjLGEodSx0KSxsKX1yZXR1cm4gY319LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDU4KSxpPW4oNjUpLGE9big2MCksbz1uKDExKSxzPW4oNDkpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUsbixjKXtpZighbyh0KSlyZXR1cm4gdDtmb3IodmFyIHU9LTEsbD0oZT1pKGUsdCkpLmxlbmd0aCxoPWwtMSxmPXQ7bnVsbCE9ZiYmKyt1PGw7KXt2YXIgZD1zKGVbdV0pLHA9bjtpZih1IT1oKXt2YXIgZz1mW2RdO3ZvaWQgMD09PShwPWM/YyhnLGQsZik6dm9pZCAwKSYmKHA9byhnKT9nOmEoZVt1KzFdKT9bXTp7fSl9cihmLGQscCksZj1mW2RdfXJldHVybiB0fX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTU2KSxpPW4oMTQzKSxhPW4oMTQ0KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIGEoaSh0LHZvaWQgMCxyKSx0KyIiKX19LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDMzNyksaT1uKDY4KSxhPW4oMTU1KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKGUsbixvKXtyZXR1cm4gbyYmIm51bWJlciIhPXR5cGVvZiBvJiZpKGUsbixvKSYmKG49bz12b2lkIDApLGU9YShlKSx2b2lkIDA9PT1uPyhuPWUsZT0wKTpuPWEobiksbz12b2lkIDA9PT1vP2U8bj8xOi0xOmEobykscihlLG4sbyx0KX19fSxmdW5jdGlvbih0LGUpe3ZhciBuPU1hdGguY2VpbCxyPU1hdGgubWF4O3QuZXhwb3J0cz1mdW5jdGlvbih0LGUsaSxhKXtmb3IodmFyIG89LTEscz1yKG4oKGUtdCkvKGl8fDEpKSwwKSxjPUFycmF5KHMpO3MtLTspY1thP3M6KytvXT10LHQrPWk7cmV0dXJuIGN9fSxmdW5jdGlvbih0LGUsbil7dmFyIHI9big5NCksaT1uKDMzOSksYT1uKDY3KSxvPW4oNjgpLHM9YSgoZnVuY3Rpb24odCxlKXtpZihudWxsPT10KXJldHVybltdO3ZhciBuPWUubGVuZ3RoO3JldHVybiBuPjEmJm8odCxlWzBdLGVbMV0pP2U9W106bj4yJiZvKGVbMF0sZVsxXSxlWzJdKSYmKGU9W2VbMF1dKSxpKHQscihlLDEpLFtdKX0pKTt0LmV4cG9ydHM9c30sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oNjYpLGk9bigyNSksYT1uKDE0MSksbz1uKDM0MCkscz1uKDYxKSxjPW4oMzQxKSx1PW4oMzUpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUsbil7dmFyIGw9LTE7ZT1yKGUubGVuZ3RoP2U6W3VdLHMoaSkpO3ZhciBoPWEodCwoZnVuY3Rpb24odCxuLGkpe3JldHVybntjcml0ZXJpYTpyKGUsKGZ1bmN0aW9uKGUpe3JldHVybiBlKHQpfSkpLGluZGV4OisrbCx2YWx1ZTp0fX0pKTtyZXR1cm4gbyhoLChmdW5jdGlvbih0LGUpe3JldHVybiBjKHQsZSxuKX0pKX19LGZ1bmN0aW9uKHQsZSl7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIG49dC5sZW5ndGg7Zm9yKHQuc29ydChlKTtuLS07KXRbbl09dFtuXS52YWx1ZTtyZXR1cm4gdH19LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDM0Mik7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSxuKXtmb3IodmFyIGk9LTEsYT10LmNyaXRlcmlhLG89ZS5jcml0ZXJpYSxzPWEubGVuZ3RoLGM9bi5sZW5ndGg7KytpPHM7KXt2YXIgdT1yKGFbaV0sb1tpXSk7aWYodSlyZXR1cm4gaT49Yz91OnUqKCJkZXNjIj09bltpXT8tMToxKX1yZXR1cm4gdC5pbmRleC1lLmluZGV4fX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oNDIpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2lmKHQhPT1lKXt2YXIgbj12b2lkIDAhPT10LGk9bnVsbD09PXQsYT10PT10LG89cih0KSxzPXZvaWQgMCE9PWUsYz1udWxsPT09ZSx1PWU9PWUsbD1yKGUpO2lmKCFjJiYhbCYmIW8mJnQ+ZXx8byYmcyYmdSYmIWMmJiFsfHxpJiZzJiZ1fHwhbiYmdXx8IWEpcmV0dXJuIDE7aWYoIWkmJiFvJiYhbCYmdDxlfHxsJiZuJiZhJiYhaSYmIW98fGMmJm4mJmF8fCFzJiZhfHwhdSlyZXR1cm4tMX1yZXR1cm4gMH19LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDU4KSxpPW4oMzQ0KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gaSh0fHxbXSxlfHxbXSxyKX19LGZ1bmN0aW9uKHQsZSl7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSxuKXtmb3IodmFyIHI9LTEsaT10Lmxlbmd0aCxhPWUubGVuZ3RoLG89e307KytyPGk7KXt2YXIgcz1yPGE/ZVtyXTp2b2lkIDA7bihvLHRbcl0scyl9cmV0dXJuIG99fSxmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oNCksaT1uKDM0Nik7dC5leHBvcnRzPXtydW46ZnVuY3Rpb24odCl7dmFyIGU9ImdyZWVkeSI9PT10LmdyYXBoKCkuYWN5Y2xpY2VyP2kodCxmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIHQuZWRnZShlKS53ZWlnaHR9fSh0KSk6ZnVuY3Rpb24odCl7dmFyIGU9W10sbj17fSxpPXt9O2Z1bmN0aW9uIGEobyl7ci5oYXMoaSxvKXx8KGlbb109ITAsbltvXT0hMCxyLmZvckVhY2godC5vdXRFZGdlcyhvKSwoZnVuY3Rpb24odCl7ci5oYXMobix0LncpP2UucHVzaCh0KTphKHQudyl9KSksZGVsZXRlIG5bb10pfXJldHVybiByLmZvckVhY2godC5ub2RlcygpLGEpLGV9KHQpO3IuZm9yRWFjaChlLChmdW5jdGlvbihlKXt2YXIgbj10LmVkZ2UoZSk7dC5yZW1vdmVFZGdlKGUpLG4uZm9yd2FyZE5hbWU9ZS5uYW1lLG4ucmV2ZXJzZWQ9ITAsdC5zZXRFZGdlKGUudyxlLnYsbixyLnVuaXF1ZUlkKCJyZXYiKSl9KSl9LHVuZG86ZnVuY3Rpb24odCl7ci5mb3JFYWNoKHQuZWRnZXMoKSwoZnVuY3Rpb24oZSl7dmFyIG49dC5lZGdlKGUpO2lmKG4ucmV2ZXJzZWQpe3QucmVtb3ZlRWRnZShlKTt2YXIgcj1uLmZvcndhcmROYW1lO2RlbGV0ZSBuLnJldmVyc2VkLGRlbGV0ZSBuLmZvcndhcmROYW1lLHQuc2V0RWRnZShlLncsZS52LG4scil9fSkpfX19LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDQpLGk9bigxNykuR3JhcGgsYT1uKDM0Nyk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7aWYodC5ub2RlQ291bnQoKTw9MSlyZXR1cm5bXTt2YXIgbj1mdW5jdGlvbih0LGUpe3ZhciBuPW5ldyBpLG89MCxzPTA7ci5mb3JFYWNoKHQubm9kZXMoKSwoZnVuY3Rpb24odCl7bi5zZXROb2RlKHQse3Y6dCxpbjowLG91dDowfSl9KSksci5mb3JFYWNoKHQuZWRnZXMoKSwoZnVuY3Rpb24odCl7dmFyIHI9bi5lZGdlKHQudix0LncpfHwwLGk9ZSh0KSxhPXIraTtuLnNldEVkZ2UodC52LHQudyxhKSxzPU1hdGgubWF4KHMsbi5ub2RlKHQudikub3V0Kz1pKSxvPU1hdGgubWF4KG8sbi5ub2RlKHQudykuaW4rPWkpfSkpO3ZhciB1PXIucmFuZ2UocytvKzMpLm1hcCgoZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGF9KSksbD1vKzE7cmV0dXJuIHIuZm9yRWFjaChuLm5vZGVzKCksKGZ1bmN0aW9uKHQpe2ModSxsLG4ubm9kZSh0KSl9KSkse2dyYXBoOm4sYnVja2V0czp1LHplcm9JZHg6bH19KHQsZXx8byksdT1mdW5jdGlvbih0LGUsbil7dmFyIHIsaT1bXSxhPWVbZS5sZW5ndGgtMV0sbz1lWzBdO2Zvcig7dC5ub2RlQ291bnQoKTspe2Zvcig7cj1vLmRlcXVldWUoKTspcyh0LGUsbixyKTtmb3IoO3I9YS5kZXF1ZXVlKCk7KXModCxlLG4scik7aWYodC5ub2RlQ291bnQoKSlmb3IodmFyIGM9ZS5sZW5ndGgtMjtjPjA7LS1jKWlmKHI9ZVtjXS5kZXF1ZXVlKCkpe2k9aS5jb25jYXQocyh0LGUsbixyLCEwKSk7YnJlYWt9fXJldHVybiBpfShuLmdyYXBoLG4uYnVja2V0cyxuLnplcm9JZHgpO3JldHVybiByLmZsYXR0ZW4oci5tYXAodSwoZnVuY3Rpb24oZSl7cmV0dXJuIHQub3V0RWRnZXMoZS52LGUudyl9KSksITApfTt2YXIgbz1yLmNvbnN0YW50KDEpO2Z1bmN0aW9uIHModCxlLG4saSxhKXt2YXIgbz1hP1tdOnZvaWQgMDtyZXR1cm4gci5mb3JFYWNoKHQuaW5FZGdlcyhpLnYpLChmdW5jdGlvbihyKXt2YXIgaT10LmVkZ2Uocikscz10Lm5vZGUoci52KTthJiZvLnB1c2goe3Y6ci52LHc6ci53fSkscy5vdXQtPWksYyhlLG4scyl9KSksci5mb3JFYWNoKHQub3V0RWRnZXMoaS52KSwoZnVuY3Rpb24ocil7dmFyIGk9dC5lZGdlKHIpLGE9ci53LG89dC5ub2RlKGEpO28uaW4tPWksYyhlLG4sbyl9KSksdC5yZW1vdmVOb2RlKGkudiksb31mdW5jdGlvbiBjKHQsZSxuKXtuLm91dD9uLmluP3Rbbi5vdXQtbi5pbitlXS5lbnF1ZXVlKG4pOnRbdC5sZW5ndGgtMV0uZW5xdWV1ZShuKTp0WzBdLmVucXVldWUobil9fSxmdW5jdGlvbih0LGUpe2Z1bmN0aW9uIG4oKXt2YXIgdD17fTt0Ll9uZXh0PXQuX3ByZXY9dCx0aGlzLl9zZW50aW5lbD10fWZ1bmN0aW9uIHIodCl7dC5fcHJldi5fbmV4dD10Ll9uZXh0LHQuX25leHQuX3ByZXY9dC5fcHJldixkZWxldGUgdC5fbmV4dCxkZWxldGUgdC5fcHJldn1mdW5jdGlvbiBpKHQsZSl7aWYoIl9uZXh0IiE9PXQmJiJfcHJldiIhPT10KXJldHVybiBlfXQuZXhwb3J0cz1uLG4ucHJvdG90eXBlLmRlcXVldWU9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9zZW50aW5lbCxlPXQuX3ByZXY7aWYoZSE9PXQpcmV0dXJuIHIoZSksZX0sbi5wcm90b3R5cGUuZW5xdWV1ZT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLl9zZW50aW5lbDt0Ll9wcmV2JiZ0Ll9uZXh0JiZyKHQpLHQuX25leHQ9ZS5fbmV4dCxlLl9uZXh0Ll9wcmV2PXQsZS5fbmV4dD10LHQuX3ByZXY9ZX0sbi5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9W10sZT10aGlzLl9zZW50aW5lbCxuPWUuX3ByZXY7biE9PWU7KXQucHVzaChKU09OLnN0cmluZ2lmeShuLGkpKSxuPW4uX3ByZXY7cmV0dXJuIlsiK3Quam9pbigiLCAiKSsiXSJ9fSxmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oNCksaT1uKDgpO3QuZXhwb3J0cz17cnVuOmZ1bmN0aW9uKHQpe3QuZ3JhcGgoKS5kdW1teUNoYWlucz1bXSxyLmZvckVhY2godC5lZGdlcygpLChmdW5jdGlvbihlKXshZnVuY3Rpb24odCxlKXt2YXIgbixyLGEsbz1lLnYscz10Lm5vZGUobykucmFuayxjPWUudyx1PXQubm9kZShjKS5yYW5rLGw9ZS5uYW1lLGg9dC5lZGdlKGUpLGY9aC5sYWJlbFJhbms7aWYodT09PXMrMSlyZXR1cm47Zm9yKHQucmVtb3ZlRWRnZShlKSxhPTAsKytzO3M8dTsrK2EsKytzKWgucG9pbnRzPVtdLHI9e3dpZHRoOjAsaGVpZ2h0OjAsZWRnZUxhYmVsOmgsZWRnZU9iajplLHJhbms6c30sbj1pLmFkZER1bW15Tm9kZSh0LCJlZGdlIixyLCJfZCIpLHM9PT1mJiYoci53aWR0aD1oLndpZHRoLHIuaGVpZ2h0PWguaGVpZ2h0LHIuZHVtbXk9ImVkZ2UtbGFiZWwiLHIubGFiZWxwb3M9aC5sYWJlbHBvcyksdC5zZXRFZGdlKG8sbix7d2VpZ2h0Omgud2VpZ2h0fSxsKSwwPT09YSYmdC5ncmFwaCgpLmR1bW15Q2hhaW5zLnB1c2gobiksbz1uO3Quc2V0RWRnZShvLGMse3dlaWdodDpoLndlaWdodH0sbCl9KHQsZSl9KSl9LHVuZG86ZnVuY3Rpb24odCl7ci5mb3JFYWNoKHQuZ3JhcGgoKS5kdW1teUNoYWlucywoZnVuY3Rpb24oZSl7dmFyIG4scj10Lm5vZGUoZSksaT1yLmVkZ2VMYWJlbDtmb3IodC5zZXRFZGdlKHIuZWRnZU9iaixpKTtyLmR1bW15OyluPXQuc3VjY2Vzc29ycyhlKVswXSx0LnJlbW92ZU5vZGUoZSksaS5wb2ludHMucHVzaCh7eDpyLngseTpyLnl9KSwiZWRnZS1sYWJlbCI9PT1yLmR1bW15JiYoaS54PXIueCxpLnk9ci55LGkud2lkdGg9ci53aWR0aCxpLmhlaWdodD1yLmhlaWdodCksZT1uLHI9dC5ub2RlKGUpfSkpfX19LGZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9big2OSkubG9uZ2VzdFBhdGgsaT1uKDE2NCksYT1uKDM1MCk7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3N3aXRjaCh0LmdyYXBoKCkucmFua2VyKXtjYXNlIm5ldHdvcmstc2ltcGxleCI6cyh0KTticmVhaztjYXNlInRpZ2h0LXRyZWUiOiFmdW5jdGlvbih0KXtyKHQpLGkodCl9KHQpO2JyZWFrO2Nhc2UibG9uZ2VzdC1wYXRoIjpvKHQpO2JyZWFrO2RlZmF1bHQ6cyh0KX19O3ZhciBvPXI7ZnVuY3Rpb24gcyh0KXthKHQpfX0sZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDQpLGk9bigxNjQpLGE9big2OSkuc2xhY2ssbz1uKDY5KS5sb25nZXN0UGF0aCxzPW4oMTcpLmFsZy5wcmVvcmRlcixjPW4oMTcpLmFsZy5wb3N0b3JkZXIsdT1uKDgpLnNpbXBsaWZ5O2Z1bmN0aW9uIGwodCl7dD11KHQpLG8odCk7dmFyIGUsbj1pKHQpO2ZvcihkKG4pLGgobix0KTtlPWcobik7KXYobix0LGUseShuLHQsZSkpfWZ1bmN0aW9uIGgodCxlKXt2YXIgbj1jKHQsdC5ub2RlcygpKTtuPW4uc2xpY2UoMCxuLmxlbmd0aC0xKSxyLmZvckVhY2gobiwoZnVuY3Rpb24obil7IWZ1bmN0aW9uKHQsZSxuKXt2YXIgcj10Lm5vZGUobikucGFyZW50O3QuZWRnZShuLHIpLmN1dHZhbHVlPWYodCxlLG4pfSh0LGUsbil9KSl9ZnVuY3Rpb24gZih0LGUsbil7dmFyIGk9dC5ub2RlKG4pLnBhcmVudCxhPSEwLG89ZS5lZGdlKG4saSkscz0wO3JldHVybiBvfHwoYT0hMSxvPWUuZWRnZShpLG4pKSxzPW8ud2VpZ2h0LHIuZm9yRWFjaChlLm5vZGVFZGdlcyhuKSwoZnVuY3Rpb24ocil7dmFyIG8sYyx1PXIudj09PW4sbD11P3IudzpyLnY7aWYobCE9PWkpe3ZhciBoPXU9PT1hLGY9ZS5lZGdlKHIpLndlaWdodDtpZihzKz1oP2Y6LWYsbz1uLGM9bCx0Lmhhc0VkZ2UobyxjKSl7dmFyIGQ9dC5lZGdlKG4sbCkuY3V0dmFsdWU7cys9aD8tZDpkfX19KSksc31mdW5jdGlvbiBkKHQsZSl7YXJndW1lbnRzLmxlbmd0aDwyJiYoZT10Lm5vZGVzKClbMF0pLHAodCx7fSwxLGUpfWZ1bmN0aW9uIHAodCxlLG4saSxhKXt2YXIgbz1uLHM9dC5ub2RlKGkpO3JldHVybiBlW2ldPSEwLHIuZm9yRWFjaCh0Lm5laWdoYm9ycyhpKSwoZnVuY3Rpb24oYSl7ci5oYXMoZSxhKXx8KG49cCh0LGUsbixhLGkpKX0pKSxzLmxvdz1vLHMubGltPW4rKyxhP3MucGFyZW50PWE6ZGVsZXRlIHMucGFyZW50LG59ZnVuY3Rpb24gZyh0KXtyZXR1cm4gci5maW5kKHQuZWRnZXMoKSwoZnVuY3Rpb24oZSl7cmV0dXJuIHQuZWRnZShlKS5jdXR2YWx1ZTwwfSkpfWZ1bmN0aW9uIHkodCxlLG4pe3ZhciBpPW4udixvPW4udztlLmhhc0VkZ2UoaSxvKXx8KGk9bi53LG89bi52KTt2YXIgcz10Lm5vZGUoaSksYz10Lm5vZGUobyksdT1zLGw9ITE7cy5saW0+Yy5saW0mJih1PWMsbD0hMCk7dmFyIGg9ci5maWx0ZXIoZS5lZGdlcygpLChmdW5jdGlvbihlKXtyZXR1cm4gbD09PW0odCx0Lm5vZGUoZS52KSx1KSYmbCE9PW0odCx0Lm5vZGUoZS53KSx1KX0pKTtyZXR1cm4gci5taW5CeShoLChmdW5jdGlvbih0KXtyZXR1cm4gYShlLHQpfSkpfWZ1bmN0aW9uIHYodCxlLG4saSl7dmFyIGE9bi52LG89bi53O3QucmVtb3ZlRWRnZShhLG8pLHQuc2V0RWRnZShpLnYsaS53LHt9KSxkKHQpLGgodCxlKSxmdW5jdGlvbih0LGUpe3ZhciBuPXIuZmluZCh0Lm5vZGVzKCksKGZ1bmN0aW9uKHQpe3JldHVybiFlLm5vZGUodCkucGFyZW50fSkpLGk9cyh0LG4pO2k9aS5zbGljZSgxKSxyLmZvckVhY2goaSwoZnVuY3Rpb24obil7dmFyIHI9dC5ub2RlKG4pLnBhcmVudCxpPWUuZWRnZShuLHIpLGE9ITE7aXx8KGk9ZS5lZGdlKHIsbiksYT0hMCksZS5ub2RlKG4pLnJhbms9ZS5ub2RlKHIpLnJhbmsrKGE/aS5taW5sZW46LWkubWlubGVuKX0pKX0odCxlKX1mdW5jdGlvbiBtKHQsZSxuKXtyZXR1cm4gbi5sb3c8PWUubGltJiZlLmxpbTw9bi5saW19dC5leHBvcnRzPWwsbC5pbml0TG93TGltVmFsdWVzPWQsbC5pbml0Q3V0VmFsdWVzPWgsbC5jYWxjQ3V0VmFsdWU9ZixsLmxlYXZlRWRnZT1nLGwuZW50ZXJFZGdlPXksbC5leGNoYW5nZUVkZ2VzPXZ9LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDQpO3QuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT1mdW5jdGlvbih0KXt2YXIgZT17fSxuPTA7ZnVuY3Rpb24gaShhKXt2YXIgbz1uO3IuZm9yRWFjaCh0LmNoaWxkcmVuKGEpLGkpLGVbYV09e2xvdzpvLGxpbTpuKyt9fXJldHVybiByLmZvckVhY2godC5jaGlsZHJlbigpLGkpLGV9KHQpO3IuZm9yRWFjaCh0LmdyYXBoKCkuZHVtbXlDaGFpbnMsKGZ1bmN0aW9uKG4pe2Zvcih2YXIgcj10Lm5vZGUobiksaT1yLmVkZ2VPYmosYT1mdW5jdGlvbih0LGUsbixyKXt2YXIgaSxhLG89W10scz1bXSxjPU1hdGgubWluKGVbbl0ubG93LGVbcl0ubG93KSx1PU1hdGgubWF4KGVbbl0ubGltLGVbcl0ubGltKTtpPW47ZG97aT10LnBhcmVudChpKSxvLnB1c2goaSl9d2hpbGUoaSYmKGVbaV0ubG93PmN8fHU+ZVtpXS5saW0pKTthPWksaT1yO2Zvcig7KGk9dC5wYXJlbnQoaSkpIT09YTspcy5wdXNoKGkpO3JldHVybntwYXRoOm8uY29uY2F0KHMucmV2ZXJzZSgpKSxsY2E6YX19KHQsZSxpLnYsaS53KSxvPWEucGF0aCxzPWEubGNhLGM9MCx1PW9bY10sbD0hMDtuIT09aS53Oyl7aWYocj10Lm5vZGUobiksbCl7Zm9yKDsodT1vW2NdKSE9PXMmJnQubm9kZSh1KS5tYXhSYW5rPHIucmFuazspYysrO3U9PT1zJiYobD0hMSl9aWYoIWwpe2Zvcig7YzxvLmxlbmd0aC0xJiZ0Lm5vZGUodT1vW2MrMV0pLm1pblJhbms8PXIucmFuazspYysrO3U9b1tjXX10LnNldFBhcmVudChuLHUpLG49dC5zdWNjZXNzb3JzKG4pWzBdfX0pKX19LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDQpLGk9big4KTt0LmV4cG9ydHM9e3J1bjpmdW5jdGlvbih0KXt2YXIgZT1pLmFkZER1bW15Tm9kZSh0LCJyb290Iix7fSwiX3Jvb3QiKSxuPWZ1bmN0aW9uKHQpe3ZhciBlPXt9O3JldHVybiByLmZvckVhY2godC5jaGlsZHJlbigpLChmdW5jdGlvbihuKXshZnVuY3Rpb24gbihpLGEpe3ZhciBvPXQuY2hpbGRyZW4oaSk7byYmby5sZW5ndGgmJnIuZm9yRWFjaChvLChmdW5jdGlvbih0KXtuKHQsYSsxKX0pKTtlW2ldPWF9KG4sMSl9KSksZX0odCksYT1yLm1heChyLnZhbHVlcyhuKSktMSxvPTIqYSsxO3QuZ3JhcGgoKS5uZXN0aW5nUm9vdD1lLHIuZm9yRWFjaCh0LmVkZ2VzKCksKGZ1bmN0aW9uKGUpe3QuZWRnZShlKS5taW5sZW4qPW99KSk7dmFyIHM9ZnVuY3Rpb24odCl7cmV0dXJuIHIucmVkdWNlKHQuZWRnZXMoKSwoZnVuY3Rpb24oZSxuKXtyZXR1cm4gZSt0LmVkZ2Uobikud2VpZ2h0fSksMCl9KHQpKzE7ci5mb3JFYWNoKHQuY2hpbGRyZW4oKSwoZnVuY3Rpb24oYyl7IWZ1bmN0aW9uIHQoZSxuLGEsbyxzLGMsdSl7dmFyIGw9ZS5jaGlsZHJlbih1KTtpZighbC5sZW5ndGgpcmV0dXJuIHZvaWQodSE9PW4mJmUuc2V0RWRnZShuLHUse3dlaWdodDowLG1pbmxlbjphfSkpO3ZhciBoPWkuYWRkQm9yZGVyTm9kZShlLCJfYnQiKSxmPWkuYWRkQm9yZGVyTm9kZShlLCJfYmIiKSxkPWUubm9kZSh1KTtlLnNldFBhcmVudChoLHUpLGQuYm9yZGVyVG9wPWgsZS5zZXRQYXJlbnQoZix1KSxkLmJvcmRlckJvdHRvbT1mLHIuZm9yRWFjaChsLChmdW5jdGlvbihyKXt0KGUsbixhLG8scyxjLHIpO3ZhciBpPWUubm9kZShyKSxsPWkuYm9yZGVyVG9wP2kuYm9yZGVyVG9wOnIsZD1pLmJvcmRlckJvdHRvbT9pLmJvcmRlckJvdHRvbTpyLHA9aS5ib3JkZXJUb3A/bzoyKm8sZz1sIT09ZD8xOnMtY1t1XSsxO2Uuc2V0RWRnZShoLGwse3dlaWdodDpwLG1pbmxlbjpnLG5lc3RpbmdFZGdlOiEwfSksZS5zZXRFZGdlKGQsZix7d2VpZ2h0OnAsbWlubGVuOmcsbmVzdGluZ0VkZ2U6ITB9KX0pKSxlLnBhcmVudCh1KXx8ZS5zZXRFZGdlKG4saCx7d2VpZ2h0OjAsbWlubGVuOnMrY1t1XX0pfSh0LGUsbyxzLGEsbixjKX0pKSx0LmdyYXBoKCkubm9kZVJhbmtGYWN0b3I9b30sY2xlYW51cDpmdW5jdGlvbih0KXt2YXIgZT10LmdyYXBoKCk7dC5yZW1vdmVOb2RlKGUubmVzdGluZ1Jvb3QpLGRlbGV0ZSBlLm5lc3RpbmdSb290LHIuZm9yRWFjaCh0LmVkZ2VzKCksKGZ1bmN0aW9uKGUpe3QuZWRnZShlKS5uZXN0aW5nRWRnZSYmdC5yZW1vdmVFZGdlKGUpfSkpfX19LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDQpLGk9big4KTtmdW5jdGlvbiBhKHQsZSxuLHIsYSxvKXt2YXIgcz17d2lkdGg6MCxoZWlnaHQ6MCxyYW5rOm8sYm9yZGVyVHlwZTplfSxjPWFbZV1bby0xXSx1PWkuYWRkRHVtbXlOb2RlKHQsImJvcmRlciIscyxuKTthW2VdW29dPXUsdC5zZXRQYXJlbnQodSxyKSxjJiZ0LnNldEVkZ2UoYyx1LHt3ZWlnaHQ6MX0pfXQuZXhwb3J0cz1mdW5jdGlvbih0KXtyLmZvckVhY2godC5jaGlsZHJlbigpLChmdW5jdGlvbiBlKG4pe3ZhciBpPXQuY2hpbGRyZW4obiksbz10Lm5vZGUobik7aWYoaS5sZW5ndGgmJnIuZm9yRWFjaChpLGUpLHIuaGFzKG8sIm1pblJhbmsiKSl7by5ib3JkZXJMZWZ0PVtdLG8uYm9yZGVyUmlnaHQ9W107Zm9yKHZhciBzPW8ubWluUmFuayxjPW8ubWF4UmFuaysxO3M8YzsrK3MpYSh0LCJib3JkZXJMZWZ0IiwiX2JsIixuLG8scyksYSh0LCJib3JkZXJSaWdodCIsIl9iciIsbixvLHMpfX0pKX19LGZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9big0KTtmdW5jdGlvbiBpKHQpe3IuZm9yRWFjaCh0Lm5vZGVzKCksKGZ1bmN0aW9uKGUpe2EodC5ub2RlKGUpKX0pKSxyLmZvckVhY2godC5lZGdlcygpLChmdW5jdGlvbihlKXthKHQuZWRnZShlKSl9KSl9ZnVuY3Rpb24gYSh0KXt2YXIgZT10LndpZHRoO3Qud2lkdGg9dC5oZWlnaHQsdC5oZWlnaHQ9ZX1mdW5jdGlvbiBvKHQpe3QueT0tdC55fWZ1bmN0aW9uIHModCl7dmFyIGU9dC54O3QueD10LnksdC55PWV9dC5leHBvcnRzPXthZGp1c3Q6ZnVuY3Rpb24odCl7dmFyIGU9dC5ncmFwaCgpLnJhbmtkaXIudG9Mb3dlckNhc2UoKTsibHIiIT09ZSYmInJsIiE9PWV8fGkodCl9LHVuZG86ZnVuY3Rpb24odCl7dmFyIGU9dC5ncmFwaCgpLnJhbmtkaXIudG9Mb3dlckNhc2UoKTsiYnQiIT09ZSYmInJsIiE9PWV8fGZ1bmN0aW9uKHQpe3IuZm9yRWFjaCh0Lm5vZGVzKCksKGZ1bmN0aW9uKGUpe28odC5ub2RlKGUpKX0pKSxyLmZvckVhY2godC5lZGdlcygpLChmdW5jdGlvbihlKXt2YXIgbj10LmVkZ2UoZSk7ci5mb3JFYWNoKG4ucG9pbnRzLG8pLHIuaGFzKG4sInkiKSYmbyhuKX0pKX0odCk7ImxyIiE9PWUmJiJybCIhPT1lfHwoIWZ1bmN0aW9uKHQpe3IuZm9yRWFjaCh0Lm5vZGVzKCksKGZ1bmN0aW9uKGUpe3ModC5ub2RlKGUpKX0pKSxyLmZvckVhY2godC5lZGdlcygpLChmdW5jdGlvbihlKXt2YXIgbj10LmVkZ2UoZSk7ci5mb3JFYWNoKG4ucG9pbnRzLHMpLHIuaGFzKG4sIngiKSYmcyhuKX0pKX0odCksaSh0KSl9fX0sZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDQpLGk9bigzNTYpLGE9bigzNTcpLG89bigzNTgpLHM9bigzNjIpLGM9bigzNjMpLHU9bigxNykuR3JhcGgsbD1uKDgpO2Z1bmN0aW9uIGgodCxlLG4pe3JldHVybiByLm1hcChlLChmdW5jdGlvbihlKXtyZXR1cm4gcyh0LGUsbil9KSl9ZnVuY3Rpb24gZih0LGUpe3ZhciBuPW5ldyB1O3IuZm9yRWFjaCh0LChmdW5jdGlvbih0KXt2YXIgaT10LmdyYXBoKCkucm9vdCxhPW8odCxpLG4sZSk7ci5mb3JFYWNoKGEudnMsKGZ1bmN0aW9uKGUsbil7dC5ub2RlKGUpLm9yZGVyPW59KSksYyh0LG4sYS52cyl9KSl9ZnVuY3Rpb24gZCh0LGUpe3IuZm9yRWFjaChlLChmdW5jdGlvbihlKXtyLmZvckVhY2goZSwoZnVuY3Rpb24oZSxuKXt0Lm5vZGUoZSkub3JkZXI9bn0pKX0pKX10LmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9bC5tYXhSYW5rKHQpLG49aCh0LHIucmFuZ2UoMSxlKzEpLCJpbkVkZ2VzIiksbz1oKHQsci5yYW5nZShlLTEsLTEsLTEpLCJvdXRFZGdlcyIpLHM9aSh0KTtkKHQscyk7Zm9yKHZhciBjLHU9TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZLHA9MCxnPTA7Zzw0OysrcCwrK2cpe2YocCUyP246byxwJTQ+PTIpLHM9bC5idWlsZExheWVyTWF0cml4KHQpO3ZhciB5PWEodCxzKTt5PHUmJihnPTAsYz1yLmNsb25lRGVlcChzKSx1PXkpfWQodCxjKX19LGZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9big0KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9e30sbj1yLmZpbHRlcih0Lm5vZGVzKCksKGZ1bmN0aW9uKGUpe3JldHVybiF0LmNoaWxkcmVuKGUpLmxlbmd0aH0pKSxpPXIubWF4KHIubWFwKG4sKGZ1bmN0aW9uKGUpe3JldHVybiB0Lm5vZGUoZSkucmFua30pKSksYT1yLm1hcChyLnJhbmdlKGkrMSksKGZ1bmN0aW9uKCl7cmV0dXJuW119KSk7dmFyIG89ci5zb3J0QnkobiwoZnVuY3Rpb24oZSl7cmV0dXJuIHQubm9kZShlKS5yYW5rfSkpO3JldHVybiByLmZvckVhY2gobywoZnVuY3Rpb24gbihpKXtpZihyLmhhcyhlLGkpKXJldHVybjtlW2ldPSEwO3ZhciBvPXQubm9kZShpKTthW28ucmFua10ucHVzaChpKSxyLmZvckVhY2godC5zdWNjZXNzb3JzKGkpLG4pfSkpLGF9fSxmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oNCk7ZnVuY3Rpb24gaSh0LGUsbil7Zm9yKHZhciBpPXIuemlwT2JqZWN0KG4sci5tYXAobiwoZnVuY3Rpb24odCxlKXtyZXR1cm4gZX0pKSksYT1yLmZsYXR0ZW4oci5tYXAoZSwoZnVuY3Rpb24oZSl7cmV0dXJuIHIuc29ydEJ5KHIubWFwKHQub3V0RWRnZXMoZSksKGZ1bmN0aW9uKGUpe3JldHVybntwb3M6aVtlLnddLHdlaWdodDp0LmVkZ2UoZSkud2VpZ2h0fX0pKSwicG9zIil9KSksITApLG89MTtvPG4ubGVuZ3RoOylvPDw9MTt2YXIgcz0yKm8tMTtvLT0xO3ZhciBjPXIubWFwKG5ldyBBcnJheShzKSwoZnVuY3Rpb24oKXtyZXR1cm4gMH0pKSx1PTA7cmV0dXJuIHIuZm9yRWFjaChhLmZvckVhY2goKGZ1bmN0aW9uKHQpe3ZhciBlPXQucG9zK287Y1tlXSs9dC53ZWlnaHQ7Zm9yKHZhciBuPTA7ZT4wOyllJTImJihuKz1jW2UrMV0pLGNbZT1lLTE+PjFdKz10LndlaWdodDt1Kz10LndlaWdodCpufSkpKSx1fXQuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2Zvcih2YXIgbj0wLHI9MTtyPGUubGVuZ3RoOysrciluKz1pKHQsZVtyLTFdLGVbcl0pO3JldHVybiBufX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oNCksaT1uKDM1OSksYT1uKDM2MCksbz1uKDM2MSk7dC5leHBvcnRzPWZ1bmN0aW9uIHQoZSxuLHMsYyl7dmFyIHU9ZS5jaGlsZHJlbihuKSxsPWUubm9kZShuKSxoPWw/bC5ib3JkZXJMZWZ0OnZvaWQgMCxmPWw/bC5ib3JkZXJSaWdodDp2b2lkIDAsZD17fTtoJiYodT1yLmZpbHRlcih1LChmdW5jdGlvbih0KXtyZXR1cm4gdCE9PWgmJnQhPT1mfSkpKTt2YXIgcD1pKGUsdSk7ci5mb3JFYWNoKHAsKGZ1bmN0aW9uKG4pe2lmKGUuY2hpbGRyZW4obi52KS5sZW5ndGgpe3ZhciBpPXQoZSxuLnYscyxjKTtkW24udl09aSxyLmhhcyhpLCJiYXJ5Y2VudGVyIikmJihhPW4sbz1pLHIuaXNVbmRlZmluZWQoYS5iYXJ5Y2VudGVyKT8oYS5iYXJ5Y2VudGVyPW8uYmFyeWNlbnRlcixhLndlaWdodD1vLndlaWdodCk6KGEuYmFyeWNlbnRlcj0oYS5iYXJ5Y2VudGVyKmEud2VpZ2h0K28uYmFyeWNlbnRlcipvLndlaWdodCkvKGEud2VpZ2h0K28ud2VpZ2h0KSxhLndlaWdodCs9by53ZWlnaHQpKX12YXIgYSxvfSkpO3ZhciBnPWEocCxzKTshZnVuY3Rpb24odCxlKXtyLmZvckVhY2godCwoZnVuY3Rpb24odCl7dC52cz1yLmZsYXR0ZW4odC52cy5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiBlW3RdP2VbdF0udnM6dH0pKSwhMCl9KSl9KGcsZCk7dmFyIHk9byhnLGMpO2lmKGgmJih5LnZzPXIuZmxhdHRlbihbaCx5LnZzLGZdLCEwKSxlLnByZWRlY2Vzc29ycyhoKS5sZW5ndGgpKXt2YXIgdj1lLm5vZGUoZS5wcmVkZWNlc3NvcnMoaClbMF0pLG09ZS5ub2RlKGUucHJlZGVjZXNzb3JzKGYpWzBdKTtyLmhhcyh5LCJiYXJ5Y2VudGVyIil8fCh5LmJhcnljZW50ZXI9MCx5LndlaWdodD0wKSx5LmJhcnljZW50ZXI9KHkuYmFyeWNlbnRlcip5LndlaWdodCt2Lm9yZGVyK20ub3JkZXIpLyh5LndlaWdodCsyKSx5LndlaWdodCs9Mn1yZXR1cm4geX19LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDQpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3JldHVybiByLm1hcChlLChmdW5jdGlvbihlKXt2YXIgbj10LmluRWRnZXMoZSk7aWYobi5sZW5ndGgpe3ZhciBpPXIucmVkdWNlKG4sKGZ1bmN0aW9uKGUsbil7dmFyIHI9dC5lZGdlKG4pLGk9dC5ub2RlKG4udik7cmV0dXJue3N1bTplLnN1bStyLndlaWdodCppLm9yZGVyLHdlaWdodDplLndlaWdodCtyLndlaWdodH19KSx7c3VtOjAsd2VpZ2h0OjB9KTtyZXR1cm57djplLGJhcnljZW50ZXI6aS5zdW0vaS53ZWlnaHQsd2VpZ2h0Omkud2VpZ2h0fX1yZXR1cm57djplfX0pKX19LGZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9big0KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgbj17fTtyZXR1cm4gci5mb3JFYWNoKHQsKGZ1bmN0aW9uKHQsZSl7dmFyIGk9blt0LnZdPXtpbmRlZ3JlZTowLGluOltdLG91dDpbXSx2czpbdC52XSxpOmV9O3IuaXNVbmRlZmluZWQodC5iYXJ5Y2VudGVyKXx8KGkuYmFyeWNlbnRlcj10LmJhcnljZW50ZXIsaS53ZWlnaHQ9dC53ZWlnaHQpfSkpLHIuZm9yRWFjaChlLmVkZ2VzKCksKGZ1bmN0aW9uKHQpe3ZhciBlPW5bdC52XSxpPW5bdC53XTtyLmlzVW5kZWZpbmVkKGUpfHxyLmlzVW5kZWZpbmVkKGkpfHwoaS5pbmRlZ3JlZSsrLGUub3V0LnB1c2goblt0LnddKSl9KSksZnVuY3Rpb24odCl7dmFyIGU9W107ZnVuY3Rpb24gbih0KXtyZXR1cm4gZnVuY3Rpb24oZSl7ZS5tZXJnZWR8fChyLmlzVW5kZWZpbmVkKGUuYmFyeWNlbnRlcil8fHIuaXNVbmRlZmluZWQodC5iYXJ5Y2VudGVyKXx8ZS5iYXJ5Y2VudGVyPj10LmJhcnljZW50ZXIpJiZmdW5jdGlvbih0LGUpe3ZhciBuPTAscj0wO3Qud2VpZ2h0JiYobis9dC5iYXJ5Y2VudGVyKnQud2VpZ2h0LHIrPXQud2VpZ2h0KTtlLndlaWdodCYmKG4rPWUuYmFyeWNlbnRlciplLndlaWdodCxyKz1lLndlaWdodCk7dC52cz1lLnZzLmNvbmNhdCh0LnZzKSx0LmJhcnljZW50ZXI9bi9yLHQud2VpZ2h0PXIsdC5pPU1hdGgubWluKGUuaSx0LmkpLGUubWVyZ2VkPSEwfSh0LGUpfX1mdW5jdGlvbiBpKGUpe3JldHVybiBmdW5jdGlvbihuKXtuLmluLnB1c2goZSksMD09LS1uLmluZGVncmVlJiZ0LnB1c2gobil9fWZvcig7dC5sZW5ndGg7KXt2YXIgYT10LnBvcCgpO2UucHVzaChhKSxyLmZvckVhY2goYS5pbi5yZXZlcnNlKCksbihhKSksci5mb3JFYWNoKGEub3V0LGkoYSkpfXJldHVybiByLm1hcChyLmZpbHRlcihlLChmdW5jdGlvbih0KXtyZXR1cm4hdC5tZXJnZWR9KSksKGZ1bmN0aW9uKHQpe3JldHVybiByLnBpY2sodCxbInZzIiwiaSIsImJhcnljZW50ZXIiLCJ3ZWlnaHQiXSl9KSl9KHIuZmlsdGVyKG4sKGZ1bmN0aW9uKHQpe3JldHVybiF0LmluZGVncmVlfSkpKX19LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDQpLGk9big4KTtmdW5jdGlvbiBhKHQsZSxuKXtmb3IodmFyIGk7ZS5sZW5ndGgmJihpPXIubGFzdChlKSkuaTw9bjspZS5wb3AoKSx0LnB1c2goaS52cyksbisrO3JldHVybiBufXQuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciBuPWkucGFydGl0aW9uKHQsKGZ1bmN0aW9uKHQpe3JldHVybiByLmhhcyh0LCJiYXJ5Y2VudGVyIil9KSksbz1uLmxocyxzPXIuc29ydEJ5KG4ucmhzLChmdW5jdGlvbih0KXtyZXR1cm4tdC5pfSkpLGM9W10sdT0wLGw9MCxoPTA7by5zb3J0KChmPSEhZSxmdW5jdGlvbih0LGUpe3JldHVybiB0LmJhcnljZW50ZXI8ZS5iYXJ5Y2VudGVyPy0xOnQuYmFyeWNlbnRlcj5lLmJhcnljZW50ZXI/MTpmP2UuaS10Lmk6dC5pLWUuaX0pKSxoPWEoYyxzLGgpLHIuZm9yRWFjaChvLChmdW5jdGlvbih0KXtoKz10LnZzLmxlbmd0aCxjLnB1c2godC52cyksdSs9dC5iYXJ5Y2VudGVyKnQud2VpZ2h0LGwrPXQud2VpZ2h0LGg9YShjLHMsaCl9KSk7dmFyIGY7dmFyIGQ9e3ZzOnIuZmxhdHRlbihjLCEwKX07bCYmKGQuYmFyeWNlbnRlcj11L2wsZC53ZWlnaHQ9bCk7cmV0dXJuIGR9fSxmdW5jdGlvbih0LGUsbil7dmFyIHI9big0KSxpPW4oMTcpLkdyYXBoO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUsbil7dmFyIGE9ZnVuY3Rpb24odCl7dmFyIGU7Zm9yKDt0Lmhhc05vZGUoZT1yLnVuaXF1ZUlkKCJfcm9vdCIpKTspO3JldHVybiBlfSh0KSxvPW5ldyBpKHtjb21wb3VuZDohMH0pLnNldEdyYXBoKHtyb290OmF9KS5zZXREZWZhdWx0Tm9kZUxhYmVsKChmdW5jdGlvbihlKXtyZXR1cm4gdC5ub2RlKGUpfSkpO3JldHVybiByLmZvckVhY2godC5ub2RlcygpLChmdW5jdGlvbihpKXt2YXIgcz10Lm5vZGUoaSksYz10LnBhcmVudChpKTsocy5yYW5rPT09ZXx8cy5taW5SYW5rPD1lJiZlPD1zLm1heFJhbmspJiYoby5zZXROb2RlKGkpLG8uc2V0UGFyZW50KGksY3x8YSksci5mb3JFYWNoKHRbbl0oaSksKGZ1bmN0aW9uKGUpe3ZhciBuPWUudj09PWk/ZS53OmUudixhPW8uZWRnZShuLGkpLHM9ci5pc1VuZGVmaW5lZChhKT8wOmEud2VpZ2h0O28uc2V0RWRnZShuLGkse3dlaWdodDp0LmVkZ2UoZSkud2VpZ2h0K3N9KX0pKSxyLmhhcyhzLCJtaW5SYW5rIikmJm8uc2V0Tm9kZShpLHtib3JkZXJMZWZ0OnMuYm9yZGVyTGVmdFtlXSxib3JkZXJSaWdodDpzLmJvcmRlclJpZ2h0W2VdfSkpfSkpLG99fSxmdW5jdGlvbih0LGUsbil7dmFyIHI9big0KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlLG4pe3ZhciBpLGE9e307ci5mb3JFYWNoKG4sKGZ1bmN0aW9uKG4pe2Zvcih2YXIgcixvLHM9dC5wYXJlbnQobik7czspe2lmKChyPXQucGFyZW50KHMpKT8obz1hW3JdLGFbcl09cyk6KG89aSxpPXMpLG8mJm8hPT1zKXJldHVybiB2b2lkIGUuc2V0RWRnZShvLHMpO3M9cn19KSl9fSxmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oNCksaT1uKDgpLGE9bigzNjUpLnBvc2l0aW9uWDt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7KGZ1bmN0aW9uKHQpe3ZhciBlPWkuYnVpbGRMYXllck1hdHJpeCh0KSxuPXQuZ3JhcGgoKS5yYW5rc2VwLGE9MDtyLmZvckVhY2goZSwoZnVuY3Rpb24oZSl7dmFyIGk9ci5tYXgoci5tYXAoZSwoZnVuY3Rpb24oZSl7cmV0dXJuIHQubm9kZShlKS5oZWlnaHR9KSkpO3IuZm9yRWFjaChlLChmdW5jdGlvbihlKXt0Lm5vZGUoZSkueT1hK2kvMn0pKSxhKz1pK259KSl9KSh0PWkuYXNOb25Db21wb3VuZEdyYXBoKHQpKSxyLmZvckVhY2goYSh0KSwoZnVuY3Rpb24oZSxuKXt0Lm5vZGUobikueD1lfSkpfX0sZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDQpLGk9bigxNykuR3JhcGgsYT1uKDgpO2Z1bmN0aW9uIG8odCxlKXt2YXIgbj17fTtyZXR1cm4gci5yZWR1Y2UoZSwoZnVuY3Rpb24oZSxpKXt2YXIgYT0wLG89MCxzPWUubGVuZ3RoLHU9ci5sYXN0KGkpO3JldHVybiByLmZvckVhY2goaSwoZnVuY3Rpb24oZSxsKXt2YXIgaD1mdW5jdGlvbih0LGUpe2lmKHQubm9kZShlKS5kdW1teSlyZXR1cm4gci5maW5kKHQucHJlZGVjZXNzb3JzKGUpLChmdW5jdGlvbihlKXtyZXR1cm4gdC5ub2RlKGUpLmR1bW15fSkpfSh0LGUpLGY9aD90Lm5vZGUoaCkub3JkZXI6czsoaHx8ZT09PXUpJiYoci5mb3JFYWNoKGkuc2xpY2UobyxsKzEpLChmdW5jdGlvbihlKXtyLmZvckVhY2godC5wcmVkZWNlc3NvcnMoZSksKGZ1bmN0aW9uKHIpe3ZhciBpPXQubm9kZShyKSxvPWkub3JkZXI7IShvPGF8fGY8byl8fGkuZHVtbXkmJnQubm9kZShlKS5kdW1teXx8YyhuLHIsZSl9KSl9KSksbz1sKzEsYT1mKX0pKSxpfSkpLG59ZnVuY3Rpb24gcyh0LGUpe3ZhciBuPXt9O2Z1bmN0aW9uIGkoZSxpLGEsbyxzKXt2YXIgdTtyLmZvckVhY2goci5yYW5nZShpLGEpLChmdW5jdGlvbihpKXt1PWVbaV0sdC5ub2RlKHUpLmR1bW15JiZyLmZvckVhY2godC5wcmVkZWNlc3NvcnModSksKGZ1bmN0aW9uKGUpe3ZhciByPXQubm9kZShlKTtyLmR1bW15JiYoci5vcmRlcjxvfHxyLm9yZGVyPnMpJiZjKG4sZSx1KX0pKX0pKX1yZXR1cm4gci5yZWR1Y2UoZSwoZnVuY3Rpb24oZSxuKXt2YXIgYSxvPS0xLHM9MDtyZXR1cm4gci5mb3JFYWNoKG4sKGZ1bmN0aW9uKHIsYyl7aWYoImJvcmRlciI9PT10Lm5vZGUocikuZHVtbXkpe3ZhciB1PXQucHJlZGVjZXNzb3JzKHIpO3UubGVuZ3RoJiYoYT10Lm5vZGUodVswXSkub3JkZXIsaShuLHMsYyxvLGEpLHM9YyxvPWEpfWkobixzLG4ubGVuZ3RoLGEsZS5sZW5ndGgpfSkpLG59KSksbn1mdW5jdGlvbiBjKHQsZSxuKXtpZihlPm4pe3ZhciByPWU7ZT1uLG49cn12YXIgaT10W2VdO2l8fCh0W2VdPWk9e30pLGlbbl09ITB9ZnVuY3Rpb24gdSh0LGUsbil7aWYoZT5uKXt2YXIgaT1lO2U9bixuPWl9cmV0dXJuIHIuaGFzKHRbZV0sbil9ZnVuY3Rpb24gbCh0LGUsbixpKXt2YXIgYT17fSxvPXt9LHM9e307cmV0dXJuIHIuZm9yRWFjaChlLChmdW5jdGlvbih0KXtyLmZvckVhY2godCwoZnVuY3Rpb24odCxlKXthW3RdPXQsb1t0XT10LHNbdF09ZX0pKX0pKSxyLmZvckVhY2goZSwoZnVuY3Rpb24odCl7dmFyIGU9LTE7ci5mb3JFYWNoKHQsKGZ1bmN0aW9uKHQpe3ZhciBjPWkodCk7aWYoYy5sZW5ndGgpZm9yKHZhciBsPSgoYz1yLnNvcnRCeShjLChmdW5jdGlvbih0KXtyZXR1cm4gc1t0XX0pKSkubGVuZ3RoLTEpLzIsaD1NYXRoLmZsb29yKGwpLGY9TWF0aC5jZWlsKGwpO2g8PWY7KytoKXt2YXIgZD1jW2hdO29bdF09PT10JiZlPHNbZF0mJiF1KG4sdCxkKSYmKG9bZF09dCxvW3RdPWFbdF09YVtkXSxlPXNbZF0pfX0pKX0pKSx7cm9vdDphLGFsaWduOm99fWZ1bmN0aW9uIGgodCxlLG4sYSxvKXt2YXIgcz17fSxjPWZ1bmN0aW9uKHQsZSxuLGEpe3ZhciBvPW5ldyBpLHM9dC5ncmFwaCgpLGM9ZnVuY3Rpb24odCxlLG4pe3JldHVybiBmdW5jdGlvbihpLGEsbyl7dmFyIHMsYz1pLm5vZGUoYSksdT1pLm5vZGUobyksbD0wO2lmKGwrPWMud2lkdGgvMixyLmhhcyhjLCJsYWJlbHBvcyIpKXN3aXRjaChjLmxhYmVscG9zLnRvTG93ZXJDYXNlKCkpe2Nhc2UibCI6cz0tYy53aWR0aC8yO2JyZWFrO2Nhc2UiciI6cz1jLndpZHRoLzJ9aWYocyYmKGwrPW4/czotcykscz0wLGwrPShjLmR1bW15P2U6dCkvMixsKz0odS5kdW1teT9lOnQpLzIsbCs9dS53aWR0aC8yLHIuaGFzKHUsImxhYmVscG9zIikpc3dpdGNoKHUubGFiZWxwb3MudG9Mb3dlckNhc2UoKSl7Y2FzZSJsIjpzPXUud2lkdGgvMjticmVhaztjYXNlInIiOnM9LXUud2lkdGgvMn1yZXR1cm4gcyYmKGwrPW4/czotcykscz0wLGx9fShzLm5vZGVzZXAscy5lZGdlc2VwLGEpO3JldHVybiByLmZvckVhY2goZSwoZnVuY3Rpb24oZSl7dmFyIGk7ci5mb3JFYWNoKGUsKGZ1bmN0aW9uKGUpe3ZhciByPW5bZV07aWYoby5zZXROb2RlKHIpLGkpe3ZhciBhPW5baV0scz1vLmVkZ2UoYSxyKTtvLnNldEVkZ2UoYSxyLE1hdGgubWF4KGModCxlLGkpLHN8fDApKX1pPWV9KSl9KSksb30odCxlLG4sbyksdT1vPyJib3JkZXJMZWZ0IjoiYm9yZGVyUmlnaHQiO2Z1bmN0aW9uIGwodCxlKXtmb3IodmFyIG49Yy5ub2RlcygpLHI9bi5wb3AoKSxpPXt9O3I7KWlbcl0/dChyKTooaVtyXT0hMCxuLnB1c2gociksbj1uLmNvbmNhdChlKHIpKSkscj1uLnBvcCgpfXJldHVybiBsKChmdW5jdGlvbih0KXtzW3RdPWMuaW5FZGdlcyh0KS5yZWR1Y2UoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIE1hdGgubWF4KHQsc1tlLnZdK2MuZWRnZShlKSl9KSwwKX0pLGMucHJlZGVjZXNzb3JzLmJpbmQoYykpLGwoKGZ1bmN0aW9uKGUpe3ZhciBuPWMub3V0RWRnZXMoZSkucmVkdWNlKChmdW5jdGlvbih0LGUpe3JldHVybiBNYXRoLm1pbih0LHNbZS53XS1jLmVkZ2UoZSkpfSksTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZKSxyPXQubm9kZShlKTtuIT09TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZJiZyLmJvcmRlclR5cGUhPT11JiYoc1tlXT1NYXRoLm1heChzW2VdLG4pKX0pLGMuc3VjY2Vzc29ycy5iaW5kKGMpKSxyLmZvckVhY2goYSwoZnVuY3Rpb24odCl7c1t0XT1zW25bdF1dfSkpLHN9ZnVuY3Rpb24gZih0LGUpe3JldHVybiByLm1pbkJ5KHIudmFsdWVzKGUpLChmdW5jdGlvbihlKXt2YXIgbj1OdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFksaT1OdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFk7cmV0dXJuIHIuZm9ySW4oZSwoZnVuY3Rpb24oZSxyKXt2YXIgYT1mdW5jdGlvbih0LGUpe3JldHVybiB0Lm5vZGUoZSkud2lkdGh9KHQscikvMjtuPU1hdGgubWF4KGUrYSxuKSxpPU1hdGgubWluKGUtYSxpKX0pKSxuLWl9KSl9ZnVuY3Rpb24gZCh0LGUpe3ZhciBuPXIudmFsdWVzKGUpLGk9ci5taW4obiksYT1yLm1heChuKTtyLmZvckVhY2goWyJ1IiwiZCJdLChmdW5jdGlvbihuKXtyLmZvckVhY2goWyJsIiwiciJdLChmdW5jdGlvbihvKXt2YXIgcyxjPW4rbyx1PXRbY107aWYodSE9PWUpe3ZhciBsPXIudmFsdWVzKHUpOyhzPSJsIj09PW8/aS1yLm1pbihsKTphLXIubWF4KGwpKSYmKHRbY109ci5tYXBWYWx1ZXModSwoZnVuY3Rpb24odCl7cmV0dXJuIHQrc30pKSl9fSkpfSkpfWZ1bmN0aW9uIHAodCxlKXtyZXR1cm4gci5tYXBWYWx1ZXModC51bCwoZnVuY3Rpb24obixpKXtpZihlKXJldHVybiB0W2UudG9Mb3dlckNhc2UoKV1baV07dmFyIGE9ci5zb3J0Qnkoci5tYXAodCxpKSk7cmV0dXJuKGFbMV0rYVsyXSkvMn0pKX10LmV4cG9ydHM9e3Bvc2l0aW9uWDpmdW5jdGlvbih0KXt2YXIgZSxuPWEuYnVpbGRMYXllck1hdHJpeCh0KSxpPXIubWVyZ2Uobyh0LG4pLHModCxuKSksYz17fTtyLmZvckVhY2goWyJ1IiwiZCJdLChmdW5jdGlvbihhKXtlPSJ1Ij09PWE/bjpyLnZhbHVlcyhuKS5yZXZlcnNlKCksci5mb3JFYWNoKFsibCIsInIiXSwoZnVuY3Rpb24obil7InIiPT09biYmKGU9ci5tYXAoZSwoZnVuY3Rpb24odCl7cmV0dXJuIHIudmFsdWVzKHQpLnJldmVyc2UoKX0pKSk7dmFyIG89KCJ1Ij09PWE/dC5wcmVkZWNlc3NvcnM6dC5zdWNjZXNzb3JzKS5iaW5kKHQpLHM9bCh0LGUsaSxvKSx1PWgodCxlLHMucm9vdCxzLmFsaWduLCJyIj09PW4pOyJyIj09PW4mJih1PXIubWFwVmFsdWVzKHUsKGZ1bmN0aW9uKHQpe3JldHVybi10fSkpKSxjW2Erbl09dX0pKX0pKTt2YXIgdT1mKHQsYyk7cmV0dXJuIGQoYyx1KSxwKGMsdC5ncmFwaCgpLmFsaWduKX0sZmluZFR5cGUxQ29uZmxpY3RzOm8sZmluZFR5cGUyQ29uZmxpY3RzOnMsYWRkQ29uZmxpY3Q6YyxoYXNDb25mbGljdDp1LHZlcnRpY2FsQWxpZ25tZW50OmwsaG9yaXpvbnRhbENvbXBhY3Rpb246aCxhbGlnbkNvb3JkaW5hdGVzOmQsZmluZFNtYWxsZXN0V2lkdGhBbGlnbm1lbnQ6ZixiYWxhbmNlOnB9fSxmdW5jdGlvbih0LGUsbil7dmFyIHI9big0KSxpPW4oOCksYT1uKDE3KS5HcmFwaDt0LmV4cG9ydHM9e2RlYnVnT3JkZXJpbmc6ZnVuY3Rpb24odCl7dmFyIGU9aS5idWlsZExheWVyTWF0cml4KHQpLG49bmV3IGEoe2NvbXBvdW5kOiEwLG11bHRpZ3JhcGg6ITB9KS5zZXRHcmFwaCh7fSk7cmV0dXJuIHIuZm9yRWFjaCh0Lm5vZGVzKCksKGZ1bmN0aW9uKGUpe24uc2V0Tm9kZShlLHtsYWJlbDplfSksbi5zZXRQYXJlbnQoZSwibGF5ZXIiK3Qubm9kZShlKS5yYW5rKX0pKSxyLmZvckVhY2godC5lZGdlcygpLChmdW5jdGlvbih0KXtuLnNldEVkZ2UodC52LHQudyx7fSx0Lm5hbWUpfSkpLHIuZm9yRWFjaChlLChmdW5jdGlvbih0LGUpe3ZhciBpPSJsYXllciIrZTtuLnNldE5vZGUoaSx7cmFuazoic2FtZSJ9KSxyLnJlZHVjZSh0LChmdW5jdGlvbih0LGUpe3JldHVybiBuLnNldEVkZ2UodCxlLHtzdHlsZToiaW52aXMifSksZX0pKX0pKSxufX19LGZ1bmN0aW9uKHQsZSl7dC5leHBvcnRzPSIwLjguNSJ9LGZ1bmN0aW9uKHQsZSxuKXt0LmV4cG9ydHM9e25vZGU6bigxNjUpLGNpcmNsZTpuKDE2NiksZWxsaXBzZTpuKDk2KSxwb2x5Z29uOm4oMTY3KSxyZWN0Om4oMTY4KX19LGZ1bmN0aW9uKHQsZSl7ZnVuY3Rpb24gbih0LGUpe3JldHVybiB0KmU+MH10LmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsaSl7dmFyIGEsbyxzLGMsdSxsLGgsZixkLHAsZyx5LHY7aWYoYT1lLnktdC55LHM9dC54LWUueCx1PWUueCp0LnktdC54KmUueSxkPWEqci54K3Mqci55K3UscD1hKmkueCtzKmkueSt1LDAhPT1kJiYwIT09cCYmbihkLHApKXJldHVybjtpZihvPWkueS1yLnksYz1yLngtaS54LGw9aS54KnIueS1yLngqaS55LGg9byp0LngrYyp0LnkrbCxmPW8qZS54K2MqZS55K2wsMCE9PWgmJjAhPT1mJiZuKGgsZikpcmV0dXJuO2lmKDA9PT0oZz1hKmMtbypzKSlyZXR1cm47cmV0dXJuIHk9TWF0aC5hYnMoZy8yKSx7eDoodj1zKmwtYyp1KTwwPyh2LXkpL2c6KHYreSkvZyx5Oih2PW8qdS1hKmwpPDA/KHYteSkvZzoodit5KS9nfX19LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDQzKSxpPW4oMzEpLGE9bigxNTMpLmxheW91dDt0LmV4cG9ydHM9ZnVuY3Rpb24oKXt2YXIgdD1uKDM3MSksZT1uKDM3NCksaT1uKDM3NSksdT1uKDM3NiksbD1uKDM3NyksaD1uKDM3OCksZj1uKDM3OSksZD1uKDM4MCkscD1uKDM4MSksZz1mdW5jdGlvbihuLGcpeyFmdW5jdGlvbih0KXt0Lm5vZGVzKCkuZm9yRWFjaCgoZnVuY3Rpb24oZSl7dmFyIG49dC5ub2RlKGUpO3IuaGFzKG4sImxhYmVsIil8fHQuY2hpbGRyZW4oZSkubGVuZ3RofHwobi5sYWJlbD1lKSxyLmhhcyhuLCJwYWRkaW5nWCIpJiZyLmRlZmF1bHRzKG4se3BhZGRpbmdMZWZ0Om4ucGFkZGluZ1gscGFkZGluZ1JpZ2h0Om4ucGFkZGluZ1h9KSxyLmhhcyhuLCJwYWRkaW5nWSIpJiZyLmRlZmF1bHRzKG4se3BhZGRpbmdUb3A6bi5wYWRkaW5nWSxwYWRkaW5nQm90dG9tOm4ucGFkZGluZ1l9KSxyLmhhcyhuLCJwYWRkaW5nIikmJnIuZGVmYXVsdHMobix7cGFkZGluZ0xlZnQ6bi5wYWRkaW5nLHBhZGRpbmdSaWdodDpuLnBhZGRpbmcscGFkZGluZ1RvcDpuLnBhZGRpbmcscGFkZGluZ0JvdHRvbTpuLnBhZGRpbmd9KSxyLmRlZmF1bHRzKG4sbyksci5lYWNoKFsicGFkZGluZ0xlZnQiLCJwYWRkaW5nUmlnaHQiLCJwYWRkaW5nVG9wIiwicGFkZGluZ0JvdHRvbSJdLChmdW5jdGlvbih0KXtuW3RdPU51bWJlcihuW3RdKX0pKSxyLmhhcyhuLCJ3aWR0aCIpJiYobi5fcHJldldpZHRoPW4ud2lkdGgpLHIuaGFzKG4sImhlaWdodCIpJiYobi5fcHJldkhlaWdodD1uLmhlaWdodCl9KSksdC5lZGdlcygpLmZvckVhY2goKGZ1bmN0aW9uKGUpe3ZhciBuPXQuZWRnZShlKTtyLmhhcyhuLCJsYWJlbCIpfHwobi5sYWJlbD0iIiksci5kZWZhdWx0cyhuLHMpfSkpfShnKTt2YXIgeT1jKG4sIm91dHB1dCIpLHY9Yyh5LCJjbHVzdGVycyIpLG09Yyh5LCJlZGdlUGF0aHMiKSxiPWkoYyh5LCJlZGdlTGFiZWxzIiksZykseD10KGMoeSwibm9kZXMiKSxnLGQpO2EoZyksbCh4LGcpLGgoYixnKSx1KG0sZyxwKTt2YXIgXz1lKHYsZyk7ZihfLGcpLGZ1bmN0aW9uKHQpe3IuZWFjaCh0Lm5vZGVzKCksKGZ1bmN0aW9uKGUpe3ZhciBuPXQubm9kZShlKTtyLmhhcyhuLCJfcHJldldpZHRoIik/bi53aWR0aD1uLl9wcmV2V2lkdGg6ZGVsZXRlIG4ud2lkdGgsci5oYXMobiwiX3ByZXZIZWlnaHQiKT9uLmhlaWdodD1uLl9wcmV2SGVpZ2h0OmRlbGV0ZSBuLmhlaWdodCxkZWxldGUgbi5fcHJldldpZHRoLGRlbGV0ZSBuLl9wcmV2SGVpZ2h0fSkpfShnKX07cmV0dXJuIGcuY3JlYXRlTm9kZXM9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9ZSxnKTp0fSxnLmNyZWF0ZUNsdXN0ZXJzPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPXQsZyk6ZX0sZy5jcmVhdGVFZGdlTGFiZWxzPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPXQsZyk6aX0sZy5jcmVhdGVFZGdlUGF0aHM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHU9dCxnKTp1fSxnLnNoYXBlcz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZD10LGcpOmR9LGcuYXJyb3dzPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhwPXQsZyk6cH0sZ307dmFyIG89e3BhZGRpbmdMZWZ0OjEwLHBhZGRpbmdSaWdodDoxMCxwYWRkaW5nVG9wOjEwLHBhZGRpbmdCb3R0b206MTAscng6MCxyeTowLHNoYXBlOiJyZWN0In0scz17YXJyb3doZWFkOiJub3JtYWwiLGN1cnZlOmkuY3VydmVMaW5lYXJ9O2Z1bmN0aW9uIGModCxlKXt2YXIgbj10LnNlbGVjdCgiZy4iK2UpO3JldHVybiBuLmVtcHR5KCkmJihuPXQuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLGUpKSxufX0sZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDQzKSxpPW4oOTcpLGE9bigxMiksbz1uKDMxKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlLG4pe3ZhciBzLGM9ZS5ub2RlcygpLmZpbHRlcigoZnVuY3Rpb24odCl7cmV0dXJuIWEuaXNTdWJncmFwaChlLHQpfSkpLHU9dC5zZWxlY3RBbGwoImcubm9kZSIpLmRhdGEoYywoZnVuY3Rpb24odCl7cmV0dXJuIHR9KSkuY2xhc3NlZCgidXBkYXRlIiwhMCk7dS5leGl0KCkucmVtb3ZlKCksdS5lbnRlcigpLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwibm9kZSIpLnN0eWxlKCJvcGFjaXR5IiwwKSwodT10LnNlbGVjdEFsbCgiZy5ub2RlIikpLmVhY2goKGZ1bmN0aW9uKHQpe3ZhciBzPWUubm9kZSh0KSxjPW8uc2VsZWN0KHRoaXMpO2EuYXBwbHlDbGFzcyhjLHMuY2xhc3MsKGMuY2xhc3NlZCgidXBkYXRlIik/InVwZGF0ZSAiOiIiKSsibm9kZSIpLGMuc2VsZWN0KCJnLmxhYmVsIikucmVtb3ZlKCk7dmFyIHU9Yy5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsImxhYmVsIiksbD1pKHUscyksaD1uW3Muc2hhcGVdLGY9ci5waWNrKGwubm9kZSgpLmdldEJCb3goKSwid2lkdGgiLCJoZWlnaHQiKTtzLmVsZW09dGhpcyxzLmlkJiZjLmF0dHIoImlkIixzLmlkKSxzLmxhYmVsSWQmJnUuYXR0cigiaWQiLHMubGFiZWxJZCksci5oYXMocywid2lkdGgiKSYmKGYud2lkdGg9cy53aWR0aCksci5oYXMocywiaGVpZ2h0IikmJihmLmhlaWdodD1zLmhlaWdodCksZi53aWR0aCs9cy5wYWRkaW5nTGVmdCtzLnBhZGRpbmdSaWdodCxmLmhlaWdodCs9cy5wYWRkaW5nVG9wK3MucGFkZGluZ0JvdHRvbSx1LmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiKyhzLnBhZGRpbmdMZWZ0LXMucGFkZGluZ1JpZ2h0KS8yKyIsIisocy5wYWRkaW5nVG9wLXMucGFkZGluZ0JvdHRvbSkvMisiKSIpO3ZhciBkPW8uc2VsZWN0KHRoaXMpO2Quc2VsZWN0KCIubGFiZWwtY29udGFpbmVyIikucmVtb3ZlKCk7dmFyIHA9aChkLGYscykuY2xhc3NlZCgibGFiZWwtY29udGFpbmVyIiwhMCk7YS5hcHBseVN0eWxlKHAscy5zdHlsZSk7dmFyIGc9cC5ub2RlKCkuZ2V0QkJveCgpO3Mud2lkdGg9Zy53aWR0aCxzLmhlaWdodD1nLmhlaWdodH0pKSxzPXUuZXhpdD91LmV4aXQoKTp1LnNlbGVjdEFsbChudWxsKTtyZXR1cm4gYS5hcHBseVRyYW5zaXRpb24ocyxlKS5zdHlsZSgib3BhY2l0eSIsMCkucmVtb3ZlKCksdX19LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDEyKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtmb3IodmFyIG49dC5hcHBlbmQoInRleHQiKSxpPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZSxuPSIiLHI9ITEsaT0wO2k8dC5sZW5ndGg7KytpKWlmKGU9dFtpXSxyKXtzd2l0Y2goZSl7Y2FzZSJuIjpuKz0iXG4iO2JyZWFrO2RlZmF1bHQ6bis9ZX1yPSExfWVsc2UiXFwiPT09ZT9yPSEwOm4rPWU7cmV0dXJuIG59KGUubGFiZWwpLnNwbGl0KCJcbiIpLGE9MDthPGkubGVuZ3RoO2ErKyluLmFwcGVuZCgidHNwYW4iKS5hdHRyKCJ4bWw6c3BhY2UiLCJwcmVzZXJ2ZSIpLmF0dHIoImR5IiwiMWVtIikuYXR0cigieCIsIjEiKS50ZXh0KGlbYV0pO3JldHVybiByLmFwcGx5U3R5bGUobixlLmxhYmVsU3R5bGUpLG59fSxmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxMik7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIG49dDtyZXR1cm4gbi5ub2RlKCkuYXBwZW5kQ2hpbGQoZS5sYWJlbCksci5hcHBseVN0eWxlKG4sZS5sYWJlbFN0eWxlKSxufX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTIpLGk9bigzMSksYT1uKDk3KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgbixvPWUubm9kZXMoKS5maWx0ZXIoKGZ1bmN0aW9uKHQpe3JldHVybiByLmlzU3ViZ3JhcGgoZSx0KX0pKSxzPXQuc2VsZWN0QWxsKCJnLmNsdXN0ZXIiKS5kYXRhKG8sKGZ1bmN0aW9uKHQpe3JldHVybiB0fSkpO3Muc2VsZWN0QWxsKCIqIikucmVtb3ZlKCkscy5lbnRlcigpLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwiY2x1c3RlciIpLmF0dHIoImlkIiwoZnVuY3Rpb24odCl7cmV0dXJuIGUubm9kZSh0KS5pZH0pKS5zdHlsZSgib3BhY2l0eSIsMCkscz10LnNlbGVjdEFsbCgiZy5jbHVzdGVyIiksci5hcHBseVRyYW5zaXRpb24ocyxlKS5zdHlsZSgib3BhY2l0eSIsMSkscy5lYWNoKChmdW5jdGlvbih0KXt2YXIgbj1lLm5vZGUodCkscj1pLnNlbGVjdCh0aGlzKTtpLnNlbGVjdCh0aGlzKS5hcHBlbmQoInJlY3QiKTt2YXIgbz1yLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwibGFiZWwiKTthKG8sbixuLmNsdXN0ZXJMYWJlbFBvcyl9KSkscy5zZWxlY3RBbGwoInJlY3QiKS5lYWNoKChmdW5jdGlvbih0KXt2YXIgbj1lLm5vZGUodCksYT1pLnNlbGVjdCh0aGlzKTtyLmFwcGx5U3R5bGUoYSxuLnN0eWxlKX0pKSxuPXMuZXhpdD9zLmV4aXQoKTpzLnNlbGVjdEFsbChudWxsKTtyZXR1cm4gci5hcHBseVRyYW5zaXRpb24obixlKS5zdHlsZSgib3BhY2l0eSIsMCkucmVtb3ZlKCksc319LGZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9big0MyksaT1uKDk3KSxhPW4oMTIpLG89bigzMSk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIG4scz10LnNlbGVjdEFsbCgiZy5lZGdlTGFiZWwiKS5kYXRhKGUuZWRnZXMoKSwoZnVuY3Rpb24odCl7cmV0dXJuIGEuZWRnZVRvSWQodCl9KSkuY2xhc3NlZCgidXBkYXRlIiwhMCk7cy5leGl0KCkucmVtb3ZlKCkscy5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQoImVkZ2VMYWJlbCIsITApLnN0eWxlKCJvcGFjaXR5IiwwKSwocz10LnNlbGVjdEFsbCgiZy5lZGdlTGFiZWwiKSkuZWFjaCgoZnVuY3Rpb24odCl7dmFyIG49by5zZWxlY3QodGhpcyk7bi5zZWxlY3QoIi5sYWJlbCIpLnJlbW92ZSgpO3ZhciBhPWUuZWRnZSh0KSxzPWkobixlLmVkZ2UodCksMCwwKS5jbGFzc2VkKCJsYWJlbCIsITApLGM9cy5ub2RlKCkuZ2V0QkJveCgpO2EubGFiZWxJZCYmcy5hdHRyKCJpZCIsYS5sYWJlbElkKSxyLmhhcyhhLCJ3aWR0aCIpfHwoYS53aWR0aD1jLndpZHRoKSxyLmhhcyhhLCJoZWlnaHQiKXx8KGEuaGVpZ2h0PWMuaGVpZ2h0KX0pKSxuPXMuZXhpdD9zLmV4aXQoKTpzLnNlbGVjdEFsbChudWxsKTtyZXR1cm4gYS5hcHBseVRyYW5zaXRpb24obixlKS5zdHlsZSgib3BhY2l0eSIsMCkucmVtb3ZlKCksc319LGZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9big0MyksaT1uKDE2NSksYT1uKDEyKSxvPW4oMzEpO2Z1bmN0aW9uIHModCxlKXt2YXIgbj0oby5saW5lfHxvLnN2Zy5saW5lKSgpLngoKGZ1bmN0aW9uKHQpe3JldHVybiB0Lnh9KSkueSgoZnVuY3Rpb24odCl7cmV0dXJuIHQueX0pKTtyZXR1cm4obi5jdXJ2ZXx8bi5pbnRlcnBvbGF0ZSkodC5jdXJ2ZSksbihlKX10LmV4cG9ydHM9ZnVuY3Rpb24odCxlLG4pe3ZhciBjPXQuc2VsZWN0QWxsKCJnLmVkZ2VQYXRoIikuZGF0YShlLmVkZ2VzKCksKGZ1bmN0aW9uKHQpe3JldHVybiBhLmVkZ2VUb0lkKHQpfSkpLmNsYXNzZWQoInVwZGF0ZSIsITApLHU9ZnVuY3Rpb24odCxlKXt2YXIgbj10LmVudGVyKCkuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJlZGdlUGF0aCIpLnN0eWxlKCJvcGFjaXR5IiwwKTtyZXR1cm4gbi5hcHBlbmQoInBhdGgiKS5hdHRyKCJjbGFzcyIsInBhdGgiKS5hdHRyKCJkIiwoZnVuY3Rpb24odCl7dmFyIG49ZS5lZGdlKHQpLGk9ZS5ub2RlKHQudikuZWxlbTtyZXR1cm4gcyhuLHIucmFuZ2Uobi5wb2ludHMubGVuZ3RoKS5tYXAoKGZ1bmN0aW9uKCl7cmV0dXJuIGU9KHQ9aSkuZ2V0QkJveCgpLHt4OihuPXQub3duZXJTVkdFbGVtZW50LmdldFNjcmVlbkNUTSgpLmludmVyc2UoKS5tdWx0aXBseSh0LmdldFNjcmVlbkNUTSgpKS50cmFuc2xhdGUoZS53aWR0aC8yLGUuaGVpZ2h0LzIpKS5lLHk6bi5mfTt2YXIgdCxlLG59KSkpfSkpLG4uYXBwZW5kKCJkZWZzIiksbn0oYyxlKTshZnVuY3Rpb24odCxlKXt2YXIgbj10LmV4aXQoKTthLmFwcGx5VHJhbnNpdGlvbihuLGUpLnN0eWxlKCJvcGFjaXR5IiwwKS5yZW1vdmUoKX0oYyxlKTt2YXIgbD12b2lkIDAhPT1jLm1lcmdlP2MubWVyZ2UodSk6YztyZXR1cm4gYS5hcHBseVRyYW5zaXRpb24obCxlKS5zdHlsZSgib3BhY2l0eSIsMSksbC5lYWNoKChmdW5jdGlvbih0KXt2YXIgbj1vLnNlbGVjdCh0aGlzKSxyPWUuZWRnZSh0KTtyLmVsZW09dGhpcyxyLmlkJiZuLmF0dHIoImlkIixyLmlkKSxhLmFwcGx5Q2xhc3MobixyLmNsYXNzLChuLmNsYXNzZWQoInVwZGF0ZSIpPyJ1cGRhdGUgIjoiIikrImVkZ2VQYXRoIil9KSksbC5zZWxlY3RBbGwoInBhdGgucGF0aCIpLmVhY2goKGZ1bmN0aW9uKHQpe3ZhciBuPWUuZWRnZSh0KTtuLmFycm93aGVhZElkPXIudW5pcXVlSWQoImFycm93aGVhZCIpO3ZhciBjPW8uc2VsZWN0KHRoaXMpLmF0dHIoIm1hcmtlci1lbmQiLChmdW5jdGlvbigpe3JldHVybiJ1cmwoIisodD1sb2NhdGlvbi5ocmVmLGU9bi5hcnJvd2hlYWRJZCx0LnNwbGl0KCIjIilbMF0rIiMiK2UpKyIpIjt2YXIgdCxlfSkpLnN0eWxlKCJmaWxsIiwibm9uZSIpO2EuYXBwbHlUcmFuc2l0aW9uKGMsZSkuYXR0cigiZCIsKGZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbih0LGUpe3ZhciBuPXQuZWRnZShlKSxyPXQubm9kZShlLnYpLGE9dC5ub2RlKGUudyksbz1uLnBvaW50cy5zbGljZSgxLG4ucG9pbnRzLmxlbmd0aC0xKTtyZXR1cm4gby51bnNoaWZ0KGkocixvWzBdKSksby5wdXNoKGkoYSxvW28ubGVuZ3RoLTFdKSkscyhuLG8pfShlLHQpfSkpLGEuYXBwbHlTdHlsZShjLG4uc3R5bGUpfSkpLGwuc2VsZWN0QWxsKCJkZWZzICoiKS5yZW1vdmUoKSxsLnNlbGVjdEFsbCgiZGVmcyIpLmVhY2goKGZ1bmN0aW9uKHQpe3ZhciByPWUuZWRnZSh0KTsoMCxuW3IuYXJyb3doZWFkXSkoby5zZWxlY3QodGhpcyksci5hcnJvd2hlYWRJZCxyLCJhcnJvd2hlYWQiKX0pKSxsfX0sZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDEyKSxpPW4oMzEpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2Z1bmN0aW9uIG4odCl7dmFyIG49ZS5ub2RlKHQpO3JldHVybiJ0cmFuc2xhdGUoIituLngrIiwiK24ueSsiKSJ9dC5maWx0ZXIoKGZ1bmN0aW9uKCl7cmV0dXJuIWkuc2VsZWN0KHRoaXMpLmNsYXNzZWQoInVwZGF0ZSIpfSkpLmF0dHIoInRyYW5zZm9ybSIsbiksci5hcHBseVRyYW5zaXRpb24odCxlKS5zdHlsZSgib3BhY2l0eSIsMSkuYXR0cigidHJhbnNmb3JtIixuKX19LGZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxMiksaT1uKDMxKSxhPW4oNDMpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2Z1bmN0aW9uIG4odCl7dmFyIG49ZS5lZGdlKHQpO3JldHVybiBhLmhhcyhuLCJ4Iik/InRyYW5zbGF0ZSgiK24ueCsiLCIrbi55KyIpIjoiIn10LmZpbHRlcigoZnVuY3Rpb24oKXtyZXR1cm4haS5zZWxlY3QodGhpcykuY2xhc3NlZCgidXBkYXRlIil9KSkuYXR0cigidHJhbnNmb3JtIixuKSxyLmFwcGx5VHJhbnNpdGlvbih0LGUpLnN0eWxlKCJvcGFjaXR5IiwxKS5hdHRyKCJ0cmFuc2Zvcm0iLG4pfX0sZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDEyKSxpPW4oMzEpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciBuPXQuZmlsdGVyKChmdW5jdGlvbigpe3JldHVybiFpLnNlbGVjdCh0aGlzKS5jbGFzc2VkKCJ1cGRhdGUiKX0pKTtmdW5jdGlvbiBhKHQpe3ZhciBuPWUubm9kZSh0KTtyZXR1cm4idHJhbnNsYXRlKCIrbi54KyIsIituLnkrIikifW4uYXR0cigidHJhbnNmb3JtIixhKSxyLmFwcGx5VHJhbnNpdGlvbih0LGUpLnN0eWxlKCJvcGFjaXR5IiwxKS5hdHRyKCJ0cmFuc2Zvcm0iLGEpLHIuYXBwbHlUcmFuc2l0aW9uKG4uc2VsZWN0QWxsKCJyZWN0IiksZSkuYXR0cigid2lkdGgiLChmdW5jdGlvbih0KXtyZXR1cm4gZS5ub2RlKHQpLndpZHRofSkpLmF0dHIoImhlaWdodCIsKGZ1bmN0aW9uKHQpe3JldHVybiBlLm5vZGUodCkuaGVpZ2h0fSkpLmF0dHIoIngiLChmdW5jdGlvbih0KXtyZXR1cm4tZS5ub2RlKHQpLndpZHRoLzJ9KSkuYXR0cigieSIsKGZ1bmN0aW9uKHQpe3JldHVybi1lLm5vZGUodCkuaGVpZ2h0LzJ9KSl9fSxmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTY4KSxpPW4oOTYpLGE9bigxNjYpLG89bigxNjcpO3QuZXhwb3J0cz17cmVjdDpmdW5jdGlvbih0LGUsbil7dmFyIGk9dC5pbnNlcnQoInJlY3QiLCI6Zmlyc3QtY2hpbGQiKS5hdHRyKCJyeCIsbi5yeCkuYXR0cigicnkiLG4ucnkpLmF0dHIoIngiLC1lLndpZHRoLzIpLmF0dHIoInkiLC1lLmhlaWdodC8yKS5hdHRyKCJ3aWR0aCIsZS53aWR0aCkuYXR0cigiaGVpZ2h0IixlLmhlaWdodCk7cmV0dXJuIG4uaW50ZXJzZWN0PWZ1bmN0aW9uKHQpe3JldHVybiByKG4sdCl9LGl9LGVsbGlwc2U6ZnVuY3Rpb24odCxlLG4pe3ZhciByPWUud2lkdGgvMixhPWUuaGVpZ2h0LzIsbz10Lmluc2VydCgiZWxsaXBzZSIsIjpmaXJzdC1jaGlsZCIpLmF0dHIoIngiLC1lLndpZHRoLzIpLmF0dHIoInkiLC1lLmhlaWdodC8yKS5hdHRyKCJyeCIscikuYXR0cigicnkiLGEpO3JldHVybiBuLmludGVyc2VjdD1mdW5jdGlvbih0KXtyZXR1cm4gaShuLHIsYSx0KX0sb30sY2lyY2xlOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1NYXRoLm1heChlLndpZHRoLGUuaGVpZ2h0KS8yLGk9dC5pbnNlcnQoImNpcmNsZSIsIjpmaXJzdC1jaGlsZCIpLmF0dHIoIngiLC1lLndpZHRoLzIpLmF0dHIoInkiLC1lLmhlaWdodC8yKS5hdHRyKCJyIixyKTtyZXR1cm4gbi5pbnRlcnNlY3Q9ZnVuY3Rpb24odCl7cmV0dXJuIGEobixyLHQpfSxpfSxkaWFtb25kOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1lLndpZHRoKk1hdGguU1FSVDIvMixpPWUuaGVpZ2h0Kk1hdGguU1FSVDIvMixhPVt7eDowLHk6LWl9LHt4Oi1yLHk6MH0se3g6MCx5Oml9LHt4OnIseTowfV0scz10Lmluc2VydCgicG9seWdvbiIsIjpmaXJzdC1jaGlsZCIpLmF0dHIoInBvaW50cyIsYS5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiB0LngrIiwiK3QueX0pKS5qb2luKCIgIikpO3JldHVybiBuLmludGVyc2VjdD1mdW5jdGlvbih0KXtyZXR1cm4gbyhuLGEsdCl9LHN9fX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTIpO2Z1bmN0aW9uIGkodCxlLG4saSl7dmFyIGE9dC5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIixlKS5hdHRyKCJ2aWV3Qm94IiwiMCAwIDEwIDEwIikuYXR0cigicmVmWCIsOSkuYXR0cigicmVmWSIsNSkuYXR0cigibWFya2VyVW5pdHMiLCJzdHJva2VXaWR0aCIpLmF0dHIoIm1hcmtlcldpZHRoIiw4KS5hdHRyKCJtYXJrZXJIZWlnaHQiLDYpLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIiwiTSAwIDAgTCAxMCA1IEwgMCAxMCB6Iikuc3R5bGUoInN0cm9rZS13aWR0aCIsMSkuc3R5bGUoInN0cm9rZS1kYXNoYXJyYXkiLCIxLDAiKTtyLmFwcGx5U3R5bGUoYSxuW2krIlN0eWxlIl0pLG5baSsiQ2xhc3MiXSYmYS5hdHRyKCJjbGFzcyIsbltpKyJDbGFzcyJdKX10LmV4cG9ydHM9e2RlZmF1bHQ6aSxub3JtYWw6aSx2ZWU6ZnVuY3Rpb24odCxlLG4saSl7dmFyIGE9dC5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIixlKS5hdHRyKCJ2aWV3Qm94IiwiMCAwIDEwIDEwIikuYXR0cigicmVmWCIsOSkuYXR0cigicmVmWSIsNSkuYXR0cigibWFya2VyVW5pdHMiLCJzdHJva2VXaWR0aCIpLmF0dHIoIm1hcmtlcldpZHRoIiw4KS5hdHRyKCJtYXJrZXJIZWlnaHQiLDYpLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIiwiTSAwIDAgTCAxMCA1IEwgMCAxMCBMIDQgNSB6Iikuc3R5bGUoInN0cm9rZS13aWR0aCIsMSkuc3R5bGUoInN0cm9rZS1kYXNoYXJyYXkiLCIxLDAiKTtyLmFwcGx5U3R5bGUoYSxuW2krIlN0eWxlIl0pLG5baSsiQ2xhc3MiXSYmYS5hdHRyKCJjbGFzcyIsbltpKyJDbGFzcyJdKX0sdW5kaXJlY3RlZDpmdW5jdGlvbih0LGUsbixpKXt2YXIgYT10LmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLGUpLmF0dHIoInZpZXdCb3giLCIwIDAgMTAgMTAiKS5hdHRyKCJyZWZYIiw5KS5hdHRyKCJyZWZZIiw1KS5hdHRyKCJtYXJrZXJVbml0cyIsInN0cm9rZVdpZHRoIikuYXR0cigibWFya2VyV2lkdGgiLDgpLmF0dHIoIm1hcmtlckhlaWdodCIsNikuYXR0cigib3JpZW50IiwiYXV0byIpLmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLCJNIDAgNSBMIDEwIDUiKS5zdHlsZSgic3Ryb2tlLXdpZHRoIiwxKS5zdHlsZSgic3Ryb2tlLWRhc2hhcnJheSIsIjEsMCIpO3IuYXBwbHlTdHlsZShhLG5baSsiU3R5bGUiXSksbltpKyJDbGFzcyJdJiZhLmF0dHIoImNsYXNzIixuW2krIkNsYXNzIl0pfX19LGZ1bmN0aW9uKHQsZSl7dC5leHBvcnRzPSIwLjYuNCJ9LGZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI7ZnVuY3Rpb24gaSh0KXtyZXR1cm4gcj1yfHxkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSx0PWVzY2FwZSh0KS5yZXBsYWNlKC8lMjYvZywiJiIpLnJlcGxhY2UoLyUyMy9nLCIjIikucmVwbGFjZSgvJTNCL2csIjsiKSxyLmlubmVySFRNTD10LHVuZXNjYXBlKHIudGV4dENvbnRlbnQpfW4ucihlKTt2YXIgYT1uKDE2OSksbz1uLm4oYSkscz1uKDApLGM9big0NCksdT1uKDIzKSxsPW4ubih1KSxoPXtkZWJ1ZzoxLGluZm86Mix3YXJuOjMsZXJyb3I6NCxmYXRhbDo1fSxmPXtkZWJ1ZzpmdW5jdGlvbigpe30saW5mbzpmdW5jdGlvbigpe30sd2FybjpmdW5jdGlvbigpe30sZXJyb3I6ZnVuY3Rpb24oKXt9LGZhdGFsOmZ1bmN0aW9uKCl7fX0sZD1mdW5jdGlvbigpe3ZhciB0PWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXToiZmF0YWwiO2lzTmFOKHQpJiYodD10LnRvTG93ZXJDYXNlKCksdm9pZCAwIT09aFt0XSYmKHQ9aFt0XSkpLGYudHJhY2U9ZnVuY3Rpb24oKXt9LGYuZGVidWc9ZnVuY3Rpb24oKXt9LGYuaW5mbz1mdW5jdGlvbigpe30sZi53YXJuPWZ1bmN0aW9uKCl7fSxmLmVycm9yPWZ1bmN0aW9uKCl7fSxmLmZhdGFsPWZ1bmN0aW9uKCl7fSx0PD1oLmZhdGFsJiYoZi5mYXRhbD1jb25zb2xlLmVycm9yP2NvbnNvbGUuZXJyb3IuYmluZChjb25zb2xlLHAoIkZBVEFMIiksImNvbG9yOiBvcmFuZ2UiKTpjb25zb2xlLmxvZy5iaW5kKGNvbnNvbGUsIhtbMzVtIixwKCJGQVRBTCIpKSksdDw9aC5lcnJvciYmKGYuZXJyb3I9Y29uc29sZS5lcnJvcj9jb25zb2xlLmVycm9yLmJpbmQoY29uc29sZSxwKCJFUlJPUiIpLCJjb2xvcjogb3JhbmdlIik6Y29uc29sZS5sb2cuYmluZChjb25zb2xlLCIbWzMxbSIscCgiRVJST1IiKSkpLHQ8PWgud2FybiYmKGYud2Fybj1jb25zb2xlLndhcm4/Y29uc29sZS53YXJuLmJpbmQoY29uc29sZSxwKCJXQVJOIiksImNvbG9yOiBvcmFuZ2UiKTpjb25zb2xlLmxvZy5iaW5kKGNvbnNvbGUsIhtbMzNtIixwKCJXQVJOIikpKSx0PD1oLmluZm8mJihmLmluZm89Y29uc29sZS5pbmZvP2NvbnNvbGUuaW5mby5iaW5kKGNvbnNvbGUscCgiSU5GTyIpLCJjb2xvcjogbGlnaHRibHVlIik6Y29uc29sZS5sb2cuYmluZChjb25zb2xlLCIbWzM0bSIscCgiSU5GTyIpKSksdDw9aC5kZWJ1ZyYmKGYuZGVidWc9Y29uc29sZS5kZWJ1Zz9jb25zb2xlLmRlYnVnLmJpbmQoY29uc29sZSxwKCJERUJVRyIpLCJjb2xvcjogbGlnaHRncmVlbiIpOmNvbnNvbGUubG9nLmJpbmQoY29uc29sZSwiG1szMm0iLHAoIkRFQlVHIikpKX0scD1mdW5jdGlvbih0KXt2YXIgZT1sKCkoKS5mb3JtYXQoInNzLlNTUyIpO3JldHVybiIlYyIuY29uY2F0KGUsIiA6ICIpLmNvbmNhdCh0LCIgOiAiKX0sZz1uKDcwKSx5PWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT0iIixuPTA7bj49MDspe2lmKCEoKG49dC5pbmRleE9mKCI8c2NyaXB0IikpPj0wKSl7ZSs9dCxuPS0xO2JyZWFrfWUrPXQuc3Vic3RyKDAsbiksKG49KHQ9dC5zdWJzdHIobisxKSkuaW5kZXhPZigiPFwvc2NyaXB0PiIpKT49MCYmKG4rPTksdD10LnN1YnN0cihuKSl9cmV0dXJuIGV9LHY9LzxiclxzKlwvPz4vZ2ksbT1mdW5jdGlvbih0KXtyZXR1cm4gdC5yZXBsYWNlKHYsIiNiciMiKX0sYj1mdW5jdGlvbih0KXtyZXR1cm4gdC5yZXBsYWNlKC8jYnIjL2csIjxici8+Iil9LHg9e2dldFJvd3M6ZnVuY3Rpb24odCl7aWYoIXQpcmV0dXJuIDE7dmFyIGU9bSh0KTtyZXR1cm4oZT1lLnJlcGxhY2UoL1xcbi9nLCIjYnIjIikpLnNwbGl0KCIjYnIjIil9LHNhbml0aXplVGV4dDpmdW5jdGlvbih0LGUpe3ZhciBuPXQscj0hMDtpZighZS5mbG93Y2hhcnR8fCExIT09ZS5mbG93Y2hhcnQuaHRtbExhYmVscyYmImZhbHNlIiE9PWUuZmxvd2NoYXJ0Lmh0bWxMYWJlbHN8fChyPSExKSxyKXt2YXIgaT1lLnNlY3VyaXR5TGV2ZWw7ImFudGlzY3JpcHQiPT09aT9uPXkobik6Imxvb3NlIiE9PWkmJihuPShuPShuPW0obikpLnJlcGxhY2UoLzwvZywiJmx0OyIpLnJlcGxhY2UoLz4vZywiJmd0OyIpKS5yZXBsYWNlKC89L2csIiZlcXVhbHM7Iiksbj1iKG4pKX1yZXR1cm4gbn0saGFzQnJlYWtzOmZ1bmN0aW9uKHQpe3JldHVybi88YnJccypbL10/Pi9naS50ZXN0KHQpfSxzcGxpdEJyZWFrczpmdW5jdGlvbih0KXtyZXR1cm4gdC5zcGxpdCgvPGJyXHMqWy9dPz4vZ2kpfSxsaW5lQnJlYWtSZWdleDp2LHJlbW92ZVNjcmlwdDp5fTtmdW5jdGlvbiBfKHQpe3JldHVybihfPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKHQpe3JldHVybiB0eXBlb2YgdH06ZnVuY3Rpb24odCl7cmV0dXJuIHQmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJnQuY29uc3RydWN0b3I9PT1TeW1ib2wmJnQhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiB0fSkodCl9ZnVuY3Rpb24gayh0KXtyZXR1cm4gZnVuY3Rpb24odCl7aWYoQXJyYXkuaXNBcnJheSh0KSl7Zm9yKHZhciBlPTAsbj1uZXcgQXJyYXkodC5sZW5ndGgpO2U8dC5sZW5ndGg7ZSsrKW5bZV09dFtlXTtyZXR1cm4gbn19KHQpfHxmdW5jdGlvbih0KXtpZihTeW1ib2wuaXRlcmF0b3IgaW4gT2JqZWN0KHQpfHwiW29iamVjdCBBcmd1bWVudHNdIj09PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh0KSlyZXR1cm4gQXJyYXkuZnJvbSh0KX0odCl8fGZ1bmN0aW9uKCl7dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIHNwcmVhZCBub24taXRlcmFibGUgaW5zdGFuY2UiKX0oKX12YXIgdz17Y3VydmVCYXNpczpzLmN1cnZlQmFzaXMsY3VydmVCYXNpc0Nsb3NlZDpzLmN1cnZlQmFzaXNDbG9zZWQsY3VydmVCYXNpc09wZW46cy5jdXJ2ZUJhc2lzT3BlbixjdXJ2ZUxpbmVhcjpzLmN1cnZlTGluZWFyLGN1cnZlTGluZWFyQ2xvc2VkOnMuY3VydmVMaW5lYXJDbG9zZWQsY3VydmVNb25vdG9uZVg6cy5jdXJ2ZU1vbm90b25lWCxjdXJ2ZU1vbm90b25lWTpzLmN1cnZlTW9ub3RvbmVZLGN1cnZlTmF0dXJhbDpzLmN1cnZlTmF0dXJhbCxjdXJ2ZVN0ZXA6cy5jdXJ2ZVN0ZXAsY3VydmVTdGVwQWZ0ZXI6cy5jdXJ2ZVN0ZXBBZnRlcixjdXJ2ZVN0ZXBCZWZvcmU6cy5jdXJ2ZVN0ZXBCZWZvcmV9LEU9L1slXXsyfVt7XVxzKig/Oig/OihcdyspXHMqOnwoXHcrKSlccyooPzooPzooXHcrKSl8KCg/Oig/IVt9XVslXXsyfSkufFxyP1xuKSopKT9ccyopKD86W31dWyVdezJ9KT8vZ2ksVD0vXHMqKD86KD86KFx3KykoPz06KTp8KFx3KykpXHMqKD86KD86KFx3KykpfCgoPzooPyFbfV1bJV17Mn0pLnxccj9cbikqKSk/XHMqKSg/Olt9XVslXXsyfSk/L2dpLEM9L1xzKiUlLipcbi9nbSxTPWZ1bmN0aW9uKHQpe3ZhciBlPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpudWxsO3RyeXt2YXIgbj1uZXcgUmVnRXhwKCJbJV17Mn0oPyFbe10iLmNvbmNhdChULnNvdXJjZSwiKSg/PVt9XVslXXsyfSkuKlxuIiksImlnIik7dD10LnRyaW0oKS5yZXBsYWNlKG4sIiIpLnJlcGxhY2UoLycvZ20sJyInKSxmLmRlYnVnKCJEZXRlY3RpbmcgZGlhZ3JhbSBkaXJlY3RpdmUiLmNvbmNhdChudWxsIT09ZT8iIHR5cGU6IitlOiIiLCIgYmFzZWQgb24gdGhlIHRleHQ6IikuY29uY2F0KHQpKTtmb3IodmFyIHIsaT1bXTtudWxsIT09KHI9RS5leGVjKHQpKTspaWYoci5pbmRleD09PUUubGFzdEluZGV4JiZFLmxhc3RJbmRleCsrLHImJiFlfHxlJiZyWzFdJiZyWzFdLm1hdGNoKGUpfHxlJiZyWzJdJiZyWzJdLm1hdGNoKGUpKXt2YXIgYT1yWzFdP3JbMV06clsyXSxvPXJbM10/clszXS50cmltKCk6cls0XT9KU09OLnBhcnNlKHJbNF0udHJpbSgpKTpudWxsO2kucHVzaCh7dHlwZTphLGFyZ3M6b30pfXJldHVybiAwPT09aS5sZW5ndGgmJmkucHVzaCh7dHlwZTp0LGFyZ3M6bnVsbH0pLDE9PT1pLmxlbmd0aD9pWzBdOml9Y2F0Y2gobil7cmV0dXJuIGYuZXJyb3IoIkVSUk9SOiAiLmNvbmNhdChuLm1lc3NhZ2UsIiAtIFVuYWJsZSB0byBwYXJzZSBkaXJlY3RpdmUiKS5jb25jYXQobnVsbCE9PWU/IiB0eXBlOiIrZToiIiwiIGJhc2VkIG9uIHRoZSB0ZXh0OiIpLmNvbmNhdCh0KSkse3R5cGU6bnVsbCxhcmdzOm51bGx9fX0sQT1mdW5jdGlvbih0KXtyZXR1cm4gdD10LnJlcGxhY2UoRSwiIikucmVwbGFjZShDLCJcbiIpLGYuZGVidWcoIkRldGVjdGluZyBkaWFncmFtIHR5cGUgYmFzZWQgb24gdGhlIHRleHQgIit0KSx0Lm1hdGNoKC9eXHMqc2VxdWVuY2VEaWFncmFtLyk/InNlcXVlbmNlIjp0Lm1hdGNoKC9eXHMqZ2FudHQvKT8iZ2FudHQiOnQubWF0Y2goL15ccypjbGFzc0RpYWdyYW0tdjIvKT8iY2xhc3NEaWFncmFtIjp0Lm1hdGNoKC9eXHMqY2xhc3NEaWFncmFtLyk/ImNsYXNzIjp0Lm1hdGNoKC9eXHMqc3RhdGVEaWFncmFtLXYyLyk/InN0YXRlRGlhZ3JhbSI6dC5tYXRjaCgvXlxzKnN0YXRlRGlhZ3JhbS8pPyJzdGF0ZSI6dC5tYXRjaCgvXlxzKmdpdEdyYXBoLyk/ImdpdCI6dC5tYXRjaCgvXlxzKmZsb3djaGFydC8pPyJmbG93Y2hhcnQtdjIiOnQubWF0Y2goL15ccyppbmZvLyk/ImluZm8iOnQubWF0Y2goL15ccypwaWUvKT8icGllIjp0Lm1hdGNoKC9eXHMqZXJEaWFncmFtLyk/ImVyIjp0Lm1hdGNoKC9eXHMqam91cm5leS8pPyJqb3VybmV5IjoiZmxvd2NoYXJ0In0sTT1mdW5jdGlvbih0LGUpe3ZhciBuPXt9O3JldHVybiBmdW5jdGlvbigpe2Zvcih2YXIgcj1hcmd1bWVudHMubGVuZ3RoLGk9bmV3IEFycmF5KHIpLGE9MDthPHI7YSsrKWlbYV09YXJndW1lbnRzW2FdO3ZhciBvPWU/ZS5hcHBseSh2b2lkIDAsaSk6aVswXTtpZihvIGluIG4pcmV0dXJuIG5bb107dmFyIHM9dC5hcHBseSh2b2lkIDAsaSk7cmV0dXJuIG5bb109cyxzfX0sTz1mdW5jdGlvbih0LGUpe2lmKCF0KXJldHVybiBlO3ZhciBuPSJjdXJ2ZSIuY29uY2F0KHQuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkrdC5zbGljZSgxKSk7cmV0dXJuIHdbbl18fGV9LEQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdCYmZT9NYXRoLnNxcnQoTWF0aC5wb3coZS54LXQueCwyKStNYXRoLnBvdyhlLnktdC55LDIpKTowfSxOPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT0iIixuPSIiLHI9MDtyPHQubGVuZ3RoO3IrKyl2b2lkIDAhPT10W3JdJiYodFtyXS5zdGFydHNXaXRoKCJjb2xvcjoiKXx8dFtyXS5zdGFydHNXaXRoKCJ0ZXh0LWFsaWduOiIpP249bit0W3JdKyI7IjplPWUrdFtyXSsiOyIpO3JldHVybntzdHlsZTplLGxhYmVsU3R5bGU6bn19LEI9MCxMPWZ1bmN0aW9uKCl7cmV0dXJuIEIrKywiaWQtIitNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5zdWJzdHIoMiwxMikrIi0iK0J9O3ZhciBGPWZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbih0KXtmb3IodmFyIGU9IiIsbj0iMDEyMzQ1Njc4OWFiY2RlZiIubGVuZ3RoLHI9MDtyPHQ7cisrKWUrPSIwMTIzNDU2Nzg5YWJjZGVmIi5jaGFyQXQoTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKm4pKTtyZXR1cm4gZX0odC5sZW5ndGgpfSxQPWZ1bmN0aW9uIHQoZSxuLHIpe3ZhciBpPU9iamVjdC5hc3NpZ24oe2RlcHRoOjIsY2xvYmJlcjohMX0sciksYT1pLmRlcHRoLG89aS5jbG9iYmVyO3JldHVybiBBcnJheS5pc0FycmF5KG4pJiYhQXJyYXkuaXNBcnJheShlKT8obi5mb3JFYWNoKChmdW5jdGlvbihuKXtyZXR1cm4gdChlLG4scil9KSksZSk6QXJyYXkuaXNBcnJheShuKSYmQXJyYXkuaXNBcnJheShlKT8obi5mb3JFYWNoKChmdW5jdGlvbih0KXstMT09PWUuaW5kZXhPZih0KSYmZS5wdXNoKHQpfSkpLGUpOnZvaWQgMD09PWV8fGE8PTA/bnVsbCE9ZSYmIm9iamVjdCI9PT1fKGUpJiYib2JqZWN0Ij09PV8obik/T2JqZWN0LmFzc2lnbihlLG4pOm46KHZvaWQgMCE9PW4mJiJvYmplY3QiPT09XyhlKSYmIm9iamVjdCI9PT1fKG4pJiZPYmplY3Qua2V5cyhuKS5mb3JFYWNoKChmdW5jdGlvbihyKXsib2JqZWN0IiE9PV8obltyXSl8fHZvaWQgMCE9PWVbcl0mJiJvYmplY3QiIT09XyhlW3JdKT8ob3x8Im9iamVjdCIhPT1fKGVbcl0pJiYib2JqZWN0IiE9PV8obltyXSkpJiYoZVtyXT1uW3JdKToodm9pZCAwPT09ZVtyXSYmKGVbcl09QXJyYXkuaXNBcnJheShuW3JdKT9bXTp7fSksZVtyXT10KGVbcl0sbltyXSx7ZGVwdGg6YS0xLGNsb2JiZXI6b30pKX0pKSxlKX0sST1mdW5jdGlvbih0LGUpe3ZhciBuPWUudGV4dC5yZXBsYWNlKHgubGluZUJyZWFrUmVnZXgsIiAiKSxyPXQuYXBwZW5kKCJ0ZXh0Iik7ci5hdHRyKCJ4IixlLngpLHIuYXR0cigieSIsZS55KSxyLnN0eWxlKCJ0ZXh0LWFuY2hvciIsZS5hbmNob3IpLHIuc3R5bGUoImZvbnQtZmFtaWx5IixlLmZvbnRGYW1pbHkpLHIuc3R5bGUoImZvbnQtc2l6ZSIsZS5mb250U2l6ZSksci5zdHlsZSgiZm9udC13ZWlnaHQiLGUuZm9udFdlaWdodCksci5hdHRyKCJmaWxsIixlLmZpbGwpLHZvaWQgMCE9PWUuY2xhc3MmJnIuYXR0cigiY2xhc3MiLGUuY2xhc3MpO3ZhciBpPXIuYXBwZW5kKCJ0c3BhbiIpO3JldHVybiBpLmF0dHIoIngiLGUueCsyKmUudGV4dE1hcmdpbiksaS5hdHRyKCJmaWxsIixlLmZpbGwpLGkudGV4dChuKSxyfSxqPU0oKGZ1bmN0aW9uKHQsZSxuKXtpZighdClyZXR1cm4gdDtpZihuPU9iamVjdC5hc3NpZ24oe2ZvbnRTaXplOjEyLGZvbnRXZWlnaHQ6NDAwLGZvbnRGYW1pbHk6IkFyaWFsIixqb2luV2l0aDoiPGJyLz4ifSxuKSx4LmxpbmVCcmVha1JlZ2V4LnRlc3QodCkpcmV0dXJuIHQ7dmFyIHI9dC5zcGxpdCgiICIpLGk9W10sYT0iIjtyZXR1cm4gci5mb3JFYWNoKChmdW5jdGlvbih0LG8pe3ZhciBzPVkoIiIuY29uY2F0KHQsIiAiKSxuKSxjPVkoYSxuKTtpZihzPmUpe3ZhciB1PVIodCxlLCItIixuKSxsPXUuaHlwaGVuYXRlZFN0cmluZ3MsaD11LnJlbWFpbmluZ1dvcmQ7aS5wdXNoLmFwcGx5KGksW2FdLmNvbmNhdChrKGwpKSksYT1ofWVsc2UgYytzPj1lPyhpLnB1c2goYSksYT10KTphPVthLHRdLmZpbHRlcihCb29sZWFuKS5qb2luKCIgIik7bysxPT09ci5sZW5ndGgmJmkucHVzaChhKX0pKSxpLmZpbHRlcigoZnVuY3Rpb24odCl7cmV0dXJuIiIhPT10fSkpLmpvaW4obi5qb2luV2l0aCl9KSwoZnVuY3Rpb24odCxlLG4pe3JldHVybiIiLmNvbmNhdCh0LCItIikuY29uY2F0KGUsIi0iKS5jb25jYXQobi5mb250U2l6ZSwiLSIpLmNvbmNhdChuLmZvbnRXZWlnaHQsIi0iKS5jb25jYXQobi5mb250RmFtaWx5LCItIikuY29uY2F0KG4uam9pbldpdGgpfSkpLFI9TSgoZnVuY3Rpb24odCxlKXt2YXIgbj1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06Ii0iLHI9YXJndW1lbnRzLmxlbmd0aD4zP2FyZ3VtZW50c1szXTp2b2lkIDA7cj1PYmplY3QuYXNzaWduKHtmb250U2l6ZToxMixmb250V2VpZ2h0OjQwMCxmb250RmFtaWx5OiJBcmlhbCIsbWFyZ2luOjB9LHIpO3ZhciBpPXQuc3BsaXQoIiIpLGE9W10sbz0iIjtyZXR1cm4gaS5mb3JFYWNoKChmdW5jdGlvbih0LHMpe3ZhciBjPSIiLmNvbmNhdChvKS5jb25jYXQodCk7aWYoWShjLHIpPj1lKXt2YXIgdT1zKzEsbD1pLmxlbmd0aD09PXUsaD0iIi5jb25jYXQoYykuY29uY2F0KG4pO2EucHVzaChsP2M6aCksbz0iIn1lbHNlIG89Y30pKSx7aHlwaGVuYXRlZFN0cmluZ3M6YSxyZW1haW5pbmdXb3JkOm99fSksKGZ1bmN0aW9uKHQsZSl7dmFyIG49YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/YXJndW1lbnRzWzJdOiItIixyPWFyZ3VtZW50cy5sZW5ndGg+Mz9hcmd1bWVudHNbM106dm9pZCAwO3JldHVybiIiLmNvbmNhdCh0LCItIikuY29uY2F0KGUsIi0iKS5jb25jYXQobiwiLSIpLmNvbmNhdChyLmZvbnRTaXplLCItIikuY29uY2F0KHIuZm9udFdlaWdodCwiLSIpLmNvbmNhdChyLmZvbnRGYW1pbHkpfSkpLFk9ZnVuY3Rpb24odCxlKXtyZXR1cm4gZT1PYmplY3QuYXNzaWduKHtmb250U2l6ZToxMixmb250V2VpZ2h0OjQwMCxmb250RmFtaWx5OiJBcmlhbCJ9LGUpLHoodCxlKS53aWR0aH0sej1NKChmdW5jdGlvbih0LGUpe3ZhciBuPWU9T2JqZWN0LmFzc2lnbih7Zm9udFNpemU6MTIsZm9udFdlaWdodDo0MDAsZm9udEZhbWlseToiQXJpYWwifSxlKSxyPW4uZm9udFNpemUsaT1uLmZvbnRGYW1pbHksYT1uLmZvbnRXZWlnaHQ7aWYoIXQpcmV0dXJue3dpZHRoOjAsaGVpZ2h0OjB9O3ZhciBvPVsic2Fucy1zZXJpZiIsaV0sYz10LnNwbGl0KHgubGluZUJyZWFrUmVnZXgpLHU9W10sbD1PYmplY3Qocy5zZWxlY3QpKCJib2R5Iik7aWYoIWwucmVtb3ZlKXJldHVybnt3aWR0aDowLGhlaWdodDowLGxpbmVIZWlnaHQ6MH07Zm9yKHZhciBoPWwuYXBwZW5kKCJzdmciKSxmPTAsZD1vO2Y8ZC5sZW5ndGg7ZisrKXt2YXIgcD1kW2ZdLGc9MCx5PXt3aWR0aDowLGhlaWdodDowLGxpbmVIZWlnaHQ6MH0sdj0hMCxtPSExLGI9dm9pZCAwO3RyeXtmb3IodmFyIF8saz1jW1N5bWJvbC5pdGVyYXRvcl0oKTshKHY9KF89ay5uZXh0KCkpLmRvbmUpO3Y9ITApe3ZhciB3PV8udmFsdWUsRT17eDowLHk6MCxmaWxsOnZvaWQgMCxhbmNob3I6InN0YXJ0IixzdHlsZToiIzY2NiIsd2lkdGg6MTAwLGhlaWdodDoxMDAsdGV4dE1hcmdpbjowLHJ4OjAscnk6MCx2YWxpZ246dm9pZCAwfTtFLnRleHQ9dzt2YXIgVD1JKGgsRSkuc3R5bGUoImZvbnQtc2l6ZSIscikuc3R5bGUoImZvbnQtd2VpZ2h0IixhKS5zdHlsZSgiZm9udC1mYW1pbHkiLHApLEM9KFQuX2dyb3Vwc3x8VClbMF1bMF0uZ2V0QkJveCgpO3kud2lkdGg9TWF0aC5yb3VuZChNYXRoLm1heCh5LndpZHRoLEMud2lkdGgpKSxnPU1hdGgucm91bmQoQy5oZWlnaHQpLHkuaGVpZ2h0Kz1nLHkubGluZUhlaWdodD1NYXRoLnJvdW5kKE1hdGgubWF4KHkubGluZUhlaWdodCxnKSl9fWNhdGNoKHQpe209ITAsYj10fWZpbmFsbHl7dHJ5e3Z8fG51bGw9PWsucmV0dXJufHxrLnJldHVybigpfWZpbmFsbHl7aWYobSl0aHJvdyBifX11LnB1c2goeSl9cmV0dXJuIGgucmVtb3ZlKCksdVtpc05hTih1WzFdLmhlaWdodCl8fGlzTmFOKHVbMV0ud2lkdGgpfHxpc05hTih1WzFdLmxpbmVIZWlnaHQpfHx1WzBdLmhlaWdodD51WzFdLmhlaWdodCYmdVswXS53aWR0aD51WzFdLndpZHRoJiZ1WzBdLmxpbmVIZWlnaHQ+dVsxXS5saW5lSGVpZ2h0PzA6MV19KSwoZnVuY3Rpb24odCxlKXtyZXR1cm4iIi5jb25jYXQodCwiLSIpLmNvbmNhdChlLmZvbnRTaXplLCItIikuY29uY2F0KGUuZm9udFdlaWdodCwiLSIpLmNvbmNhdChlLmZvbnRGYW1pbHkpfSkpLFU9ZnVuY3Rpb24odCxlLG4pe3ZhciByPW5ldyBNYXA7cmV0dXJuIHIuc2V0KCJoZWlnaHQiLHQpLG4/KHIuc2V0KCJ3aWR0aCIsIjEwMCUiKSxyLnNldCgic3R5bGUiLCJtYXgtd2lkdGg6ICIuY29uY2F0KGUsInB4OyIpKSk6ci5zZXQoIndpZHRoIixlKSxyfSwkPWZ1bmN0aW9uKHQsZSxuLHIpeyFmdW5jdGlvbih0LGUpe3ZhciBuPSEwLHI9ITEsaT12b2lkIDA7dHJ5e2Zvcih2YXIgYSxvPWVbU3ltYm9sLml0ZXJhdG9yXSgpOyEobj0oYT1vLm5leHQoKSkuZG9uZSk7bj0hMCl7dmFyIHM9YS52YWx1ZTt0LmF0dHIoc1swXSxzWzFdKX19Y2F0Y2godCl7cj0hMCxpPXR9ZmluYWxseXt0cnl7bnx8bnVsbD09by5yZXR1cm58fG8ucmV0dXJuKCl9ZmluYWxseXtpZihyKXRocm93IGl9fX0odCxVKGUsbixyKSl9LFc9e2Fzc2lnbldpdGhEZXB0aDpQLHdyYXBMYWJlbDpqLGNhbGN1bGF0ZVRleHRIZWlnaHQ6ZnVuY3Rpb24odCxlKXtyZXR1cm4gZT1PYmplY3QuYXNzaWduKHtmb250U2l6ZToxMixmb250V2VpZ2h0OjQwMCxmb250RmFtaWx5OiJBcmlhbCIsbWFyZ2luOjE1fSxlKSx6KHQsZSkuaGVpZ2h0fSxjYWxjdWxhdGVUZXh0V2lkdGg6WSxjYWxjdWxhdGVUZXh0RGltZW5zaW9uczp6LGNhbGN1bGF0ZVN2Z1NpemVBdHRyczpVLGNvbmZpZ3VyZVN2Z1NpemU6JCxkZXRlY3RJbml0OmZ1bmN0aW9uKHQpe3ZhciBlPVModCwvKD86aW5pdFxiKXwoPzppbml0aWFsaXplXGIpLyksbj17fTtpZihBcnJheS5pc0FycmF5KGUpKXt2YXIgcj1lLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIHQuYXJnc30pKTtuPVAobixrKHIpKX1lbHNlIG49ZS5hcmdzO2lmKG4pe3ZhciBpPUEodCk7WyJjb25maWciXS5mb3JFYWNoKChmdW5jdGlvbih0KXt2b2lkIDAhPT1uW3RdJiYoImZsb3djaGFydC12MiI9PT1pJiYoaT0iZmxvd2NoYXJ0IiksbltpXT1uW3RdLGRlbGV0ZSBuW3RdKX0pKX1yZXR1cm4gbn0sZGV0ZWN0RGlyZWN0aXZlOlMsZGV0ZWN0VHlwZTpBLGlzU3Vic3RyaW5nSW5BcnJheTpmdW5jdGlvbih0LGUpe2Zvcih2YXIgbj0wO248ZS5sZW5ndGg7bisrKWlmKGVbbl0ubWF0Y2godCkpcmV0dXJuIG47cmV0dXJuLTF9LGludGVycG9sYXRlVG9DdXJ2ZTpPLGNhbGNMYWJlbFBvc2l0aW9uOmZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbih0KXt2YXIgZSxuPTA7dC5mb3JFYWNoKChmdW5jdGlvbih0KXtuKz1EKHQsZSksZT10fSkpO3ZhciByPW4vMixpPXZvaWQgMDtyZXR1cm4gZT12b2lkIDAsdC5mb3JFYWNoKChmdW5jdGlvbih0KXtpZihlJiYhaSl7dmFyIG49RCh0LGUpO2lmKG48cilyLT1uO2Vsc2V7dmFyIGE9ci9uO2E8PTAmJihpPWUpLGE+PTEmJihpPXt4OnQueCx5OnQueX0pLGE+MCYmYTwxJiYoaT17eDooMS1hKSplLngrYSp0LngseTooMS1hKSplLnkrYSp0Lnl9KX19ZT10fSkpLGl9KHQpfSxjYWxjQ2FyZGluYWxpdHlQb3NpdGlvbjpmdW5jdGlvbih0LGUsbil7dmFyIHI7Zi5pbmZvKCJvdXIgcG9pbnRzIixlKSxlWzBdIT09biYmKGU9ZS5yZXZlcnNlKCkpLGUuZm9yRWFjaCgoZnVuY3Rpb24odCl7RCh0LHIpLHI9dH0pKTt2YXIgaSxhPTI1O3I9dm9pZCAwLGUuZm9yRWFjaCgoZnVuY3Rpb24odCl7aWYociYmIWkpe3ZhciBlPUQodCxyKTtpZihlPGEpYS09ZTtlbHNle3ZhciBuPWEvZTtuPD0wJiYoaT1yKSxuPj0xJiYoaT17eDp0LngseTp0Lnl9KSxuPjAmJm48MSYmKGk9e3g6KDEtbikqci54K24qdC54LHk6KDEtbikqci55K24qdC55fSl9fXI9dH0pKTt2YXIgbz10PzEwOjUscz1NYXRoLmF0YW4yKGVbMF0ueS1pLnksZVswXS54LWkueCksYz17eDowLHk6MH07cmV0dXJuIGMueD1NYXRoLnNpbihzKSpvKyhlWzBdLngraS54KS8yLGMueT0tTWF0aC5jb3MocykqbysoZVswXS55K2kueSkvMixjfSxjYWxjVGVybWluYWxMYWJlbFBvc2l0aW9uOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcixpPUpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkobikpO2YuaW5mbygib3VyIHBvaW50cyIsaSksInN0YXJ0X2xlZnQiIT09ZSYmInN0YXJ0X3JpZ2h0IiE9PWUmJihpPWkucmV2ZXJzZSgpKSxpLmZvckVhY2goKGZ1bmN0aW9uKHQpe0QodCxyKSxyPXR9KSk7dmFyIGEsbz0yNTtyPXZvaWQgMCxpLmZvckVhY2goKGZ1bmN0aW9uKHQpe2lmKHImJiFhKXt2YXIgZT1EKHQscik7aWYoZTxvKW8tPWU7ZWxzZXt2YXIgbj1vL2U7bjw9MCYmKGE9ciksbj49MSYmKGE9e3g6dC54LHk6dC55fSksbj4wJiZuPDEmJihhPXt4OigxLW4pKnIueCtuKnQueCx5OigxLW4pKnIueStuKnQueX0pfX1yPXR9KSk7dmFyIHM9MTAsYz1NYXRoLmF0YW4yKGlbMF0ueS1hLnksaVswXS54LWEueCksdT17eDowLHk6MH07cmV0dXJuIHUueD1NYXRoLnNpbihjKSpzKyhpWzBdLngrYS54KS8yLHUueT0tTWF0aC5jb3MoYykqcysoaVswXS55K2EueSkvMiwic3RhcnRfbGVmdCI9PT1lJiYodS54PU1hdGguc2luKGMrTWF0aC5QSSkqcysoaVswXS54K2EueCkvMix1Lnk9LU1hdGguY29zKGMrTWF0aC5QSSkqcysoaVswXS55K2EueSkvMiksImVuZF9yaWdodCI9PT1lJiYodS54PU1hdGguc2luKGMtTWF0aC5QSSkqcysoaVswXS54K2EueCkvMi01LHUueT0tTWF0aC5jb3MoYy1NYXRoLlBJKSpzKyhpWzBdLnkrYS55KS8yLTUpLCJlbmRfbGVmdCI9PT1lJiYodS54PU1hdGguc2luKGMpKnMrKGlbMF0ueCthLngpLzItNSx1Lnk9LU1hdGguY29zKGMpKnMrKGlbMF0ueSthLnkpLzItNSksdX0sZm9ybWF0VXJsOmZ1bmN0aW9uKHQsZSl7dmFyIG49dC50cmltKCk7aWYobilyZXR1cm4ibG9vc2UiIT09ZS5zZWN1cml0eUxldmVsP09iamVjdChnLnNhbml0aXplVXJsKShuKTpufSxnZXRTdHlsZXNGcm9tQXJyYXk6TixnZW5lcmF0ZUlkOkwscmFuZG9tOkYsbWVtb2l6ZTpNLHJ1bkZ1bmM6ZnVuY3Rpb24odCl7Zm9yKHZhciBlLG49dC5zcGxpdCgiLiIpLHI9bi5sZW5ndGgtMSxpPW5bcl0sYT13aW5kb3csbz0wO288cjtvKyspaWYoIShhPWFbbltvXV0pKXJldHVybjtmb3IodmFyIHM9YXJndW1lbnRzLmxlbmd0aCxjPW5ldyBBcnJheShzPjE/cy0xOjApLHU9MTt1PHM7dSsrKWNbdS0xXT1hcmd1bWVudHNbdV07KGU9YSlbaV0uYXBwbHkoZSxjKX19LFY9bigzKSxIPW4ubihWKSxHPW4oMSkscT1mdW5jdGlvbih0LGUpe3JldHVybiBlP09iamVjdChHLmFkanVzdCkodCx7czotNDAsbDoxMH0pOk9iamVjdChHLmFkanVzdCkodCx7czotNDAsbDotMTB9KX07ZnVuY3Rpb24gWCh0KXtyZXR1cm4oWD0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbih0KXtyZXR1cm4gdHlwZW9mIHR9OmZ1bmN0aW9uKHQpe3JldHVybiB0JiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZ0LmNvbnN0cnVjdG9yPT09U3ltYm9sJiZ0IT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgdH0pKHQpfWZ1bmN0aW9uIFoodCxlKXtmb3IodmFyIG49MDtuPGUubGVuZ3RoO24rKyl7dmFyIHI9ZVtuXTtyLmVudW1lcmFibGU9ci5lbnVtZXJhYmxlfHwhMSxyLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gciYmKHIud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LHIua2V5LHIpfX12YXIgSj1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXshZnVuY3Rpb24odCxlKXtpZighKHQgaW5zdGFuY2VvZiBlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX0odGhpcyx0KSx0aGlzLmJhY2tncm91bmQ9IiNmNGY0ZjQiLHRoaXMuZGFya01vZGU9ITEsdGhpcy5wcmltYXJ5Q29sb3I9IiNmZmY0ZGQiLHRoaXMubm90ZUJrZ0NvbG9yPSIjZmZmNWFkIix0aGlzLm5vdGVUZXh0Q29sb3I9IiMzMzMiLHRoaXMuZm9udEZhbWlseT0nInRyZWJ1Y2hldCBtcyIsIHZlcmRhbmEsIGFyaWFsJyx0aGlzLmZvbnRTaXplPSIxNnB4In12YXIgZSxuLHI7cmV0dXJuIGU9dCwobj1be2tleToidXBkYXRlQ29sb3JzIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMucHJpbWFyeVRleHRDb2xvcj10aGlzLnByaW1hcnlUZXh0Q29sb3J8fCh0aGlzLmRhcmtNb2RlPyIjZGRkIjoiIzMzMyIpLHRoaXMuc2Vjb25kYXJ5Q29sb3I9dGhpcy5zZWNvbmRhcnlDb2xvcnx8T2JqZWN0KEcuYWRqdXN0KSh0aGlzLnByaW1hcnlDb2xvcix7aDotMTIwfSksdGhpcy50ZXJ0aWFyeUNvbG9yPXRoaXMudGVydGlhcnlDb2xvcnx8T2JqZWN0KEcuYWRqdXN0KSh0aGlzLnByaW1hcnlDb2xvcix7aDoxODAsbDo1fSksdGhpcy5wcmltYXJ5Qm9yZGVyQ29sb3I9dGhpcy5wcmltYXJ5Qm9yZGVyQ29sb3J8fHEodGhpcy5wcmltYXJ5Q29sb3IsdGhpcy5kYXJrTW9kZSksdGhpcy5zZWNvbmRhcnlCb3JkZXJDb2xvcj10aGlzLnNlY29uZGFyeUJvcmRlckNvbG9yfHxxKHRoaXMuc2Vjb25kYXJ5Q29sb3IsdGhpcy5kYXJrTW9kZSksdGhpcy50ZXJ0aWFyeUJvcmRlckNvbG9yPXRoaXMudGVydGlhcnlCb3JkZXJDb2xvcnx8cSh0aGlzLnRlcnRpYXJ5Q29sb3IsdGhpcy5kYXJrTW9kZSksdGhpcy5ub3RlQm9yZGVyQ29sb3I9dGhpcy5ub3RlQm9yZGVyQ29sb3J8fHEodGhpcy5ub3RlQmtnQ29sb3IsdGhpcy5kYXJrTW9kZSksdGhpcy5zZWNvbmRhcnlUZXh0Q29sb3I9dGhpcy5zZWNvbmRhcnlUZXh0Q29sb3J8fE9iamVjdChHLmludmVydCkodGhpcy5zZWNvbmRhcnlDb2xvciksdGhpcy50ZXJ0aWFyeVRleHRDb2xvcj10aGlzLnRlcnRpYXJ5VGV4dENvbG9yfHxPYmplY3QoRy5pbnZlcnQpKHRoaXMudGVydGlhcnlDb2xvciksdGhpcy5saW5lQ29sb3I9dGhpcy5saW5lQ29sb3J8fE9iamVjdChHLmludmVydCkodGhpcy5iYWNrZ3JvdW5kKSx0aGlzLnRleHRDb2xvcj10aGlzLnRleHRDb2xvcnx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHRoaXMubm9kZUJrZz10aGlzLm5vZGVCa2d8fHRoaXMucHJpbWFyeUNvbG9yLHRoaXMubWFpbkJrZz10aGlzLm1haW5Ca2d8fHRoaXMucHJpbWFyeUNvbG9yLHRoaXMubm9kZUJvcmRlcj10aGlzLm5vZGVCb3JkZXJ8fHRoaXMucHJpbWFyeUJvcmRlckNvbG9yLHRoaXMuY2x1c3RlckJrZz10aGlzLmNsdXN0ZXJCa2d8fHRoaXMudGVydGlhcnlDb2xvcix0aGlzLmNsdXN0ZXJCb3JkZXI9dGhpcy5jbHVzdGVyQm9yZGVyfHx0aGlzLnRlcnRpYXJ5Qm9yZGVyQ29sb3IsdGhpcy5kZWZhdWx0TGlua0NvbG9yPXRoaXMuZGVmYXVsdExpbmtDb2xvcnx8dGhpcy5saW5lQ29sb3IsdGhpcy50aXRsZUNvbG9yPXRoaXMudGl0bGVDb2xvcnx8dGhpcy50ZXJ0aWFyeVRleHRDb2xvcix0aGlzLmVkZ2VMYWJlbEJhY2tncm91bmQ9dGhpcy5lZGdlTGFiZWxCYWNrZ3JvdW5kfHx0aGlzLmRhcmtNb2RlP09iamVjdChHLmRhcmtlbikodGhpcy5zZWNvbmRhcnlDb2xvciwzMCk6dGhpcy5zZWNvbmRhcnlDb2xvcix0aGlzLm5vZGVUZXh0Q29sb3I9dGhpcy5ub2RlVGV4dENvbG9yfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IsdGhpcy5hY3RvckJvcmRlcj10aGlzLmFjdG9yQm9yZGVyfHx0aGlzLnByaW1hcnlCb3JkZXJDb2xvcix0aGlzLmFjdG9yQmtnPXRoaXMuYWN0b3JCa2d8fHRoaXMubWFpbkJrZyx0aGlzLmFjdG9yVGV4dENvbG9yPXRoaXMuYWN0b3JUZXh0Q29sb3J8fHRoaXMucHJpbWFyeVRleHRDb2xvcix0aGlzLmFjdG9yTGluZUNvbG9yPXRoaXMuYWN0b3JMaW5lQ29sb3J8fCJncmV5Iix0aGlzLmxhYmVsQm94QmtnQ29sb3I9dGhpcy5sYWJlbEJveEJrZ0NvbG9yfHx0aGlzLmFjdG9yQmtnLHRoaXMuc2lnbmFsQ29sb3I9dGhpcy5zaWduYWxDb2xvcnx8dGhpcy50ZXh0Q29sb3IsdGhpcy5zaWduYWxUZXh0Q29sb3I9dGhpcy5zaWduYWxUZXh0Q29sb3J8fHRoaXMudGV4dENvbG9yLHRoaXMubGFiZWxCb3hCb3JkZXJDb2xvcj10aGlzLmxhYmVsQm94Qm9yZGVyQ29sb3J8fHRoaXMuYWN0b3JCb3JkZXIsdGhpcy5sYWJlbFRleHRDb2xvcj10aGlzLmxhYmVsVGV4dENvbG9yfHx0aGlzLmFjdG9yVGV4dENvbG9yLHRoaXMubG9vcFRleHRDb2xvcj10aGlzLmxvb3BUZXh0Q29sb3J8fHRoaXMuYWN0b3JUZXh0Q29sb3IsdGhpcy5hY3RpdmF0aW9uQm9yZGVyQ29sb3I9dGhpcy5hY3RpdmF0aW9uQm9yZGVyQ29sb3J8fE9iamVjdChHLmRhcmtlbikodGhpcy5zZWNvbmRhcnlDb2xvciwxMCksdGhpcy5hY3RpdmF0aW9uQmtnQ29sb3I9dGhpcy5hY3RpdmF0aW9uQmtnQ29sb3J8fHRoaXMuc2Vjb25kYXJ5Q29sb3IsdGhpcy5zZXF1ZW5jZU51bWJlckNvbG9yPXRoaXMuc2VxdWVuY2VOdW1iZXJDb2xvcnx8T2JqZWN0KEcuaW52ZXJ0KSh0aGlzLmxpbmVDb2xvciksdGhpcy5zZWN0aW9uQmtnQ29sb3I9dGhpcy5zZWN0aW9uQmtnQ29sb3J8fHRoaXMudGVydGlhcnlDb2xvcix0aGlzLmFsdFNlY3Rpb25Ca2dDb2xvcj10aGlzLmFsdFNlY3Rpb25Ca2dDb2xvcnx8IndoaXRlIix0aGlzLnNlY3Rpb25Ca2dDb2xvcj10aGlzLnNlY3Rpb25Ca2dDb2xvcnx8dGhpcy5zZWNvbmRhcnlDb2xvcix0aGlzLnNlY3Rpb25Ca2dDb2xvcjI9dGhpcy5zZWN0aW9uQmtnQ29sb3IyfHx0aGlzLnByaW1hcnlDb2xvcix0aGlzLnRhc2tCb3JkZXJDb2xvcj10aGlzLnRhc2tCb3JkZXJDb2xvcnx8dGhpcy5wcmltYXJ5Qm9yZGVyQ29sb3IsdGhpcy50YXNrQmtnQ29sb3I9dGhpcy50YXNrQmtnQ29sb3J8fHRoaXMucHJpbWFyeUNvbG9yLHRoaXMuYWN0aXZlVGFza0JvcmRlckNvbG9yPXRoaXMuYWN0aXZlVGFza0JvcmRlckNvbG9yfHx0aGlzLnByaW1hcnlDb2xvcix0aGlzLmFjdGl2ZVRhc2tCa2dDb2xvcj10aGlzLmFjdGl2ZVRhc2tCa2dDb2xvcnx8T2JqZWN0KEcubGlnaHRlbikodGhpcy5wcmltYXJ5Q29sb3IsMjMpLHRoaXMuZ3JpZENvbG9yPXRoaXMuZ3JpZENvbG9yfHwibGlnaHRncmV5Iix0aGlzLmRvbmVUYXNrQmtnQ29sb3I9dGhpcy5kb25lVGFza0JrZ0NvbG9yfHwibGlnaHRncmV5Iix0aGlzLmRvbmVUYXNrQm9yZGVyQ29sb3I9dGhpcy5kb25lVGFza0JvcmRlckNvbG9yfHwiZ3JleSIsdGhpcy5jcml0Qm9yZGVyQ29sb3I9dGhpcy5jcml0Qm9yZGVyQ29sb3J8fCIjZmY4ODg4Iix0aGlzLmNyaXRCa2dDb2xvcj10aGlzLmNyaXRCa2dDb2xvcnx8InJlZCIsdGhpcy50b2RheUxpbmVDb2xvcj10aGlzLnRvZGF5TGluZUNvbG9yfHwicmVkIix0aGlzLnRhc2tUZXh0Q29sb3I9dGhpcy50YXNrVGV4dENvbG9yfHx0aGlzLnRleHRDb2xvcix0aGlzLnRhc2tUZXh0T3V0c2lkZUNvbG9yPXRoaXMudGFza1RleHRPdXRzaWRlQ29sb3J8fHRoaXMudGV4dENvbG9yLHRoaXMudGFza1RleHRMaWdodENvbG9yPXRoaXMudGFza1RleHRMaWdodENvbG9yfHx0aGlzLnRleHRDb2xvcix0aGlzLnRhc2tUZXh0Q29sb3I9dGhpcy50YXNrVGV4dENvbG9yfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IsdGhpcy50YXNrVGV4dERhcmtDb2xvcj10aGlzLnRhc2tUZXh0RGFya0NvbG9yfHx0aGlzLnRleHRDb2xvcix0aGlzLnRhc2tUZXh0Q2xpY2thYmxlQ29sb3I9dGhpcy50YXNrVGV4dENsaWNrYWJsZUNvbG9yfHwiIzAwMzE2MyIsdGhpcy5sYWJlbENvbG9yPXRoaXMubGFiZWxDb2xvcnx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHRoaXMuYWx0QmFja2dyb3VuZD10aGlzLmFsdEJhY2tncm91bmR8fHRoaXMudGVydGlhcnlDb2xvcix0aGlzLmVycm9yQmtnQ29sb3I9dGhpcy5lcnJvckJrZ0NvbG9yfHx0aGlzLnRlcnRpYXJ5Q29sb3IsdGhpcy5lcnJvclRleHRDb2xvcj10aGlzLmVycm9yVGV4dENvbG9yfHx0aGlzLnRlcnRpYXJ5VGV4dENvbG9yLHRoaXMuY2xhc3NUZXh0PXRoaXMuY2xhc3NUZXh0fHx0aGlzLnRleHRDb2xvcix0aGlzLmZpbGxUeXBlMD10aGlzLmZpbGxUeXBlMHx8dGhpcy5wcmltYXJ5Q29sb3IsdGhpcy5maWxsVHlwZTE9dGhpcy5maWxsVHlwZTF8fHRoaXMuc2Vjb25kYXJ5Q29sb3IsdGhpcy5maWxsVHlwZTI9dGhpcy5maWxsVHlwZTJ8fE9iamVjdChHLmFkanVzdCkodGhpcy5wcmltYXJ5Q29sb3Ise2g6NjR9KSx0aGlzLmZpbGxUeXBlMz10aGlzLmZpbGxUeXBlM3x8T2JqZWN0KEcuYWRqdXN0KSh0aGlzLnNlY29uZGFyeUNvbG9yLHtoOjY0fSksdGhpcy5maWxsVHlwZTQ9dGhpcy5maWxsVHlwZTR8fE9iamVjdChHLmFkanVzdCkodGhpcy5wcmltYXJ5Q29sb3Ise2g6LTY0fSksdGhpcy5maWxsVHlwZTU9dGhpcy5maWxsVHlwZTV8fE9iamVjdChHLmFkanVzdCkodGhpcy5zZWNvbmRhcnlDb2xvcix7aDotNjR9KSx0aGlzLmZpbGxUeXBlNj10aGlzLmZpbGxUeXBlNnx8T2JqZWN0KEcuYWRqdXN0KSh0aGlzLnByaW1hcnlDb2xvcix7aDoxMjh9KSx0aGlzLmZpbGxUeXBlNz10aGlzLmZpbGxUeXBlN3x8T2JqZWN0KEcuYWRqdXN0KSh0aGlzLnNlY29uZGFyeUNvbG9yLHtoOjEyOH0pfX0se2tleToiY2FsY3VsYXRlIix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgZT10aGlzO2lmKCJvYmplY3QiPT09WCh0KSl7dmFyIG49T2JqZWN0LmtleXModCk7bi5mb3JFYWNoKChmdW5jdGlvbihuKXtlW25dPXRbbl19KSksdGhpcy51cGRhdGVDb2xvcnMoKSxuLmZvckVhY2goKGZ1bmN0aW9uKG4pe2Vbbl09dFtuXX0pKX1lbHNlIHRoaXMudXBkYXRlQ29sb3JzKCl9fV0pJiZaKGUucHJvdG90eXBlLG4pLHImJlooZSxyKSx0fSgpO2Z1bmN0aW9uIFEodCl7cmV0dXJuKFE9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24odCl7cmV0dXJuIHR5cGVvZiB0fTpmdW5jdGlvbih0KXtyZXR1cm4gdCYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmdC5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmdCE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIHR9KSh0KX1mdW5jdGlvbiBLKHQsZSl7Zm9yKHZhciBuPTA7bjxlLmxlbmd0aDtuKyspe3ZhciByPWVbbl07ci5lbnVtZXJhYmxlPXIuZW51bWVyYWJsZXx8ITEsci5jb25maWd1cmFibGU9ITAsInZhbHVlImluIHImJihyLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCxyLmtleSxyKX19dmFyIHR0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpeyFmdW5jdGlvbih0LGUpe2lmKCEodCBpbnN0YW5jZW9mIGUpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfSh0aGlzLHQpLHRoaXMuYmFja2dyb3VuZD0iIzMzMyIsdGhpcy5wcmltYXJ5Q29sb3I9IiMxZjIwMjAiLHRoaXMuc2Vjb25kYXJ5Q29sb3I9T2JqZWN0KEcubGlnaHRlbikodGhpcy5wcmltYXJ5Q29sb3IsMTYpLHRoaXMudGVydGlhcnlDb2xvcj1PYmplY3QoRy5hZGp1c3QpKHRoaXMucHJpbWFyeUNvbG9yLHtoOi0xNjB9KSx0aGlzLnByaW1hcnlCb3JkZXJDb2xvcj1xKHRoaXMucHJpbWFyeUNvbG9yLHRoaXMuZGFya01vZGUpLHRoaXMuc2Vjb25kYXJ5Qm9yZGVyQ29sb3I9cSh0aGlzLnNlY29uZGFyeUNvbG9yLHRoaXMuZGFya01vZGUpLHRoaXMudGVydGlhcnlCb3JkZXJDb2xvcj1xKHRoaXMudGVydGlhcnlDb2xvcix0aGlzLmRhcmtNb2RlKSx0aGlzLnByaW1hcnlUZXh0Q29sb3I9T2JqZWN0KEcuaW52ZXJ0KSh0aGlzLnByaW1hcnlDb2xvciksdGhpcy5zZWNvbmRhcnlUZXh0Q29sb3I9T2JqZWN0KEcuaW52ZXJ0KSh0aGlzLnNlY29uZGFyeUNvbG9yKSx0aGlzLnRlcnRpYXJ5VGV4dENvbG9yPU9iamVjdChHLmludmVydCkodGhpcy50ZXJ0aWFyeUNvbG9yKSx0aGlzLmxpbmVDb2xvcj1PYmplY3QoRy5pbnZlcnQpKHRoaXMuYmFja2dyb3VuZCksdGhpcy50ZXh0Q29sb3I9T2JqZWN0KEcuaW52ZXJ0KSh0aGlzLmJhY2tncm91bmQpLHRoaXMubWFpbkJrZz0iIzFmMjAyMCIsdGhpcy5zZWNvbmRCa2c9ImNhbGN1bGF0ZWQiLHRoaXMubWFpbkNvbnRyYXN0Q29sb3I9ImxpZ2h0Z3JleSIsdGhpcy5kYXJrVGV4dENvbG9yPU9iamVjdChHLmxpZ2h0ZW4pKE9iamVjdChHLmludmVydCkoIiMzMjNENDciKSwxMCksdGhpcy5saW5lQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMuYm9yZGVyMT0iIzgxQjFEQiIsdGhpcy5ib3JkZXIyPU9iamVjdChHLnJnYmEpKDI1NSwyNTUsMjU1LC4yNSksdGhpcy5hcnJvd2hlYWRDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5mb250RmFtaWx5PScidHJlYnVjaGV0IG1zIiwgdmVyZGFuYSwgYXJpYWwnLHRoaXMuZm9udFNpemU9IjE2cHgiLHRoaXMubGFiZWxCYWNrZ3JvdW5kPSIjMTgxODE4Iix0aGlzLnRleHRDb2xvcj0iI2NjYyIsdGhpcy5ub2RlQmtnPSJjYWxjdWxhdGVkIix0aGlzLm5vZGVCb3JkZXI9ImNhbGN1bGF0ZWQiLHRoaXMuY2x1c3RlckJrZz0iY2FsY3VsYXRlZCIsdGhpcy5jbHVzdGVyQm9yZGVyPSJjYWxjdWxhdGVkIix0aGlzLmRlZmF1bHRMaW5rQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMudGl0bGVDb2xvcj0iI0Y5RkZGRSIsdGhpcy5lZGdlTGFiZWxCYWNrZ3JvdW5kPSJjYWxjdWxhdGVkIix0aGlzLmFjdG9yQm9yZGVyPSJjYWxjdWxhdGVkIix0aGlzLmFjdG9yQmtnPSJjYWxjdWxhdGVkIix0aGlzLmFjdG9yVGV4dENvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmFjdG9yTGluZUNvbG9yPSJjYWxjdWxhdGVkIix0aGlzLnNpZ25hbENvbG9yPSJjYWxjdWxhdGVkIix0aGlzLnNpZ25hbFRleHRDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5sYWJlbEJveEJrZ0NvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmxhYmVsQm94Qm9yZGVyQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMubGFiZWxUZXh0Q29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMubG9vcFRleHRDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5ub3RlQm9yZGVyQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMubm90ZUJrZ0NvbG9yPSIjZmZmNWFkIix0aGlzLm5vdGVUZXh0Q29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMuYWN0aXZhdGlvbkJvcmRlckNvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmFjdGl2YXRpb25Ca2dDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5zZXF1ZW5jZU51bWJlckNvbG9yPSJibGFjayIsdGhpcy5zZWN0aW9uQmtnQ29sb3I9T2JqZWN0KEcuZGFya2VuKSgiI0VBRThEOSIsMzApLHRoaXMuYWx0U2VjdGlvbkJrZ0NvbG9yPSJjYWxjdWxhdGVkIix0aGlzLnNlY3Rpb25Ca2dDb2xvcjI9IiNFQUU4RDkiLHRoaXMudGFza0JvcmRlckNvbG9yPU9iamVjdChHLnJnYmEpKDI1NSwyNTUsMjU1LDcwKSx0aGlzLnRhc2tCa2dDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy50YXNrVGV4dENvbG9yPSJjYWxjdWxhdGVkIix0aGlzLnRhc2tUZXh0TGlnaHRDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy50YXNrVGV4dE91dHNpZGVDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy50YXNrVGV4dENsaWNrYWJsZUNvbG9yPSIjMDAzMTYzIix0aGlzLmFjdGl2ZVRhc2tCb3JkZXJDb2xvcj1PYmplY3QoRy5yZ2JhKSgyNTUsMjU1LDI1NSw1MCksdGhpcy5hY3RpdmVUYXNrQmtnQ29sb3I9IiM4MUIxREIiLHRoaXMuZ3JpZENvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmRvbmVUYXNrQmtnQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMuZG9uZVRhc2tCb3JkZXJDb2xvcj0iZ3JleSIsdGhpcy5jcml0Qm9yZGVyQ29sb3I9IiNFODM3MzciLHRoaXMuY3JpdEJrZ0NvbG9yPSIjRTgzNzM3Iix0aGlzLnRhc2tUZXh0RGFya0NvbG9yPSJjYWxjdWxhdGVkIix0aGlzLnRvZGF5TGluZUNvbG9yPSIjREI1NzU3Iix0aGlzLmxhYmVsQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMuZXJyb3JCa2dDb2xvcj0iI2E0NDE0MSIsdGhpcy5lcnJvclRleHRDb2xvcj0iI2RkZCJ9dmFyIGUsbixyO3JldHVybiBlPXQsKG49W3trZXk6InVwZGF0ZUNvbG9ycyIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLnNlY29uZEJrZz1PYmplY3QoRy5saWdodGVuKSh0aGlzLm1haW5Ca2csMTYpLHRoaXMubGluZUNvbG9yPXRoaXMubWFpbkNvbnRyYXN0Q29sb3IsdGhpcy5hcnJvd2hlYWRDb2xvcj10aGlzLm1haW5Db250cmFzdENvbG9yLHRoaXMubm9kZUJrZz10aGlzLm1haW5Ca2csdGhpcy5ub2RlQm9yZGVyPXRoaXMuYm9yZGVyMSx0aGlzLmNsdXN0ZXJCa2c9dGhpcy5zZWNvbmRCa2csdGhpcy5jbHVzdGVyQm9yZGVyPXRoaXMuYm9yZGVyMix0aGlzLmRlZmF1bHRMaW5rQ29sb3I9dGhpcy5saW5lQ29sb3IsdGhpcy5lZGdlTGFiZWxCYWNrZ3JvdW5kPU9iamVjdChHLmxpZ2h0ZW4pKHRoaXMubGFiZWxCYWNrZ3JvdW5kLDI1KSx0aGlzLmFjdG9yQm9yZGVyPXRoaXMuYm9yZGVyMSx0aGlzLmFjdG9yQmtnPXRoaXMubWFpbkJrZyx0aGlzLmFjdG9yVGV4dENvbG9yPXRoaXMubWFpbkNvbnRyYXN0Q29sb3IsdGhpcy5hY3RvckxpbmVDb2xvcj10aGlzLm1haW5Db250cmFzdENvbG9yLHRoaXMuc2lnbmFsQ29sb3I9dGhpcy5tYWluQ29udHJhc3RDb2xvcix0aGlzLnNpZ25hbFRleHRDb2xvcj10aGlzLm1haW5Db250cmFzdENvbG9yLHRoaXMubGFiZWxCb3hCa2dDb2xvcj10aGlzLmFjdG9yQmtnLHRoaXMubGFiZWxCb3hCb3JkZXJDb2xvcj10aGlzLmFjdG9yQm9yZGVyLHRoaXMubGFiZWxUZXh0Q29sb3I9dGhpcy5tYWluQ29udHJhc3RDb2xvcix0aGlzLmxvb3BUZXh0Q29sb3I9dGhpcy5tYWluQ29udHJhc3RDb2xvcix0aGlzLm5vdGVCb3JkZXJDb2xvcj10aGlzLmJvcmRlcjIsdGhpcy5ub3RlVGV4dENvbG9yPXRoaXMubWFpbkJrZyx0aGlzLmFjdGl2YXRpb25Cb3JkZXJDb2xvcj10aGlzLmJvcmRlcjEsdGhpcy5hY3RpdmF0aW9uQmtnQ29sb3I9dGhpcy5zZWNvbmRCa2csdGhpcy5hbHRTZWN0aW9uQmtnQ29sb3I9dGhpcy5iYWNrZ3JvdW5kLHRoaXMudGFza0JrZ0NvbG9yPU9iamVjdChHLmxpZ2h0ZW4pKHRoaXMubWFpbkJrZywyMyksdGhpcy50YXNrVGV4dENvbG9yPXRoaXMuZGFya1RleHRDb2xvcix0aGlzLnRhc2tUZXh0TGlnaHRDb2xvcj10aGlzLm1haW5Db250cmFzdENvbG9yLHRoaXMudGFza1RleHRPdXRzaWRlQ29sb3I9dGhpcy50YXNrVGV4dExpZ2h0Q29sb3IsdGhpcy5ncmlkQ29sb3I9dGhpcy5tYWluQ29udHJhc3RDb2xvcix0aGlzLmRvbmVUYXNrQmtnQ29sb3I9dGhpcy5tYWluQ29udHJhc3RDb2xvcix0aGlzLnRhc2tUZXh0RGFya0NvbG9yPXRoaXMuZGFya1RleHRDb2xvcix0aGlzLmxhYmVsQ29sb3I9dGhpcy50ZXh0Q29sb3IsdGhpcy5hbHRCYWNrZ3JvdW5kPU9iamVjdChHLmxpZ2h0ZW4pKHRoaXMuYmFja2dyb3VuZCwyMCksdGhpcy5maWxsVHlwZTA9dGhpcy5wcmltYXJ5Q29sb3IsdGhpcy5maWxsVHlwZTE9dGhpcy5zZWNvbmRhcnlDb2xvcix0aGlzLmZpbGxUeXBlMj1PYmplY3QoRy5hZGp1c3QpKHRoaXMucHJpbWFyeUNvbG9yLHtoOjY0fSksdGhpcy5maWxsVHlwZTM9T2JqZWN0KEcuYWRqdXN0KSh0aGlzLnNlY29uZGFyeUNvbG9yLHtoOjY0fSksdGhpcy5maWxsVHlwZTQ9T2JqZWN0KEcuYWRqdXN0KSh0aGlzLnByaW1hcnlDb2xvcix7aDotNjR9KSx0aGlzLmZpbGxUeXBlNT1PYmplY3QoRy5hZGp1c3QpKHRoaXMuc2Vjb25kYXJ5Q29sb3Ise2g6LTY0fSksdGhpcy5maWxsVHlwZTY9T2JqZWN0KEcuYWRqdXN0KSh0aGlzLnByaW1hcnlDb2xvcix7aDoxMjh9KSx0aGlzLmZpbGxUeXBlNz1PYmplY3QoRy5hZGp1c3QpKHRoaXMuc2Vjb25kYXJ5Q29sb3Ise2g6MTI4fSksdGhpcy5jbGFzc1RleHQ9dGhpcy5wcmltYXJ5VGV4dENvbG9yfX0se2tleToiY2FsY3VsYXRlIix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgZT10aGlzO2lmKCJvYmplY3QiPT09USh0KSl7dmFyIG49T2JqZWN0LmtleXModCk7bi5mb3JFYWNoKChmdW5jdGlvbihuKXtlW25dPXRbbl19KSksdGhpcy51cGRhdGVDb2xvcnMoKSxuLmZvckVhY2goKGZ1bmN0aW9uKG4pe2Vbbl09dFtuXX0pKX1lbHNlIHRoaXMudXBkYXRlQ29sb3JzKCl9fV0pJiZLKGUucHJvdG90eXBlLG4pLHImJksoZSxyKSx0fSgpO2Z1bmN0aW9uIGV0KHQpe3JldHVybihldD0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbih0KXtyZXR1cm4gdHlwZW9mIHR9OmZ1bmN0aW9uKHQpe3JldHVybiB0JiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZ0LmNvbnN0cnVjdG9yPT09U3ltYm9sJiZ0IT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgdH0pKHQpfWZ1bmN0aW9uIG50KHQsZSl7Zm9yKHZhciBuPTA7bjxlLmxlbmd0aDtuKyspe3ZhciByPWVbbl07ci5lbnVtZXJhYmxlPXIuZW51bWVyYWJsZXx8ITEsci5jb25maWd1cmFibGU9ITAsInZhbHVlImluIHImJihyLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCxyLmtleSxyKX19dmFyIHJ0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpeyFmdW5jdGlvbih0LGUpe2lmKCEodCBpbnN0YW5jZW9mIGUpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfSh0aGlzLHQpLHRoaXMuYmFja2dyb3VuZD0iI2Y0ZjRmNCIsdGhpcy5wcmltYXJ5Q29sb3I9IiNFQ0VDRkYiLHRoaXMuc2Vjb25kYXJ5Q29sb3I9T2JqZWN0KEcuYWRqdXN0KSh0aGlzLnByaW1hcnlDb2xvcix7aDoxMjB9KSx0aGlzLnNlY29uZGFyeUNvbG9yPSIjZmZmZmRlIix0aGlzLnRlcnRpYXJ5Q29sb3I9T2JqZWN0KEcuYWRqdXN0KSh0aGlzLnByaW1hcnlDb2xvcix7aDotMTYwfSksdGhpcy5wcmltYXJ5Qm9yZGVyQ29sb3I9cSh0aGlzLnByaW1hcnlDb2xvcix0aGlzLmRhcmtNb2RlKSx0aGlzLnNlY29uZGFyeUJvcmRlckNvbG9yPXEodGhpcy5zZWNvbmRhcnlDb2xvcix0aGlzLmRhcmtNb2RlKSx0aGlzLnRlcnRpYXJ5Qm9yZGVyQ29sb3I9cSh0aGlzLnRlcnRpYXJ5Q29sb3IsdGhpcy5kYXJrTW9kZSksdGhpcy5wcmltYXJ5VGV4dENvbG9yPU9iamVjdChHLmludmVydCkodGhpcy5wcmltYXJ5Q29sb3IpLHRoaXMuc2Vjb25kYXJ5VGV4dENvbG9yPU9iamVjdChHLmludmVydCkodGhpcy5zZWNvbmRhcnlDb2xvciksdGhpcy50ZXJ0aWFyeVRleHRDb2xvcj1PYmplY3QoRy5pbnZlcnQpKHRoaXMudGVydGlhcnlDb2xvciksdGhpcy5saW5lQ29sb3I9T2JqZWN0KEcuaW52ZXJ0KSh0aGlzLmJhY2tncm91bmQpLHRoaXMudGV4dENvbG9yPU9iamVjdChHLmludmVydCkodGhpcy5iYWNrZ3JvdW5kKSx0aGlzLmJhY2tncm91bmQ9IndoaXRlIix0aGlzLm1haW5Ca2c9IiNFQ0VDRkYiLHRoaXMuc2Vjb25kQmtnPSIjZmZmZmRlIix0aGlzLmxpbmVDb2xvcj0iIzMzMzMzMyIsdGhpcy5ib3JkZXIxPSIjOTM3MERCIix0aGlzLmJvcmRlcjI9IiNhYWFhMzMiLHRoaXMuYXJyb3doZWFkQ29sb3I9IiMzMzMzMzMiLHRoaXMuZm9udEZhbWlseT0nInRyZWJ1Y2hldCBtcyIsIHZlcmRhbmEsIGFyaWFsJyx0aGlzLmZvbnRTaXplPSIxNnB4Iix0aGlzLmxhYmVsQmFja2dyb3VuZD0iI2U4ZThlOCIsdGhpcy50ZXh0Q29sb3I9IiMzMzMiLHRoaXMubm9kZUJrZz0iY2FsY3VsYXRlZCIsdGhpcy5ub2RlQm9yZGVyPSJjYWxjdWxhdGVkIix0aGlzLmNsdXN0ZXJCa2c9ImNhbGN1bGF0ZWQiLHRoaXMuY2x1c3RlckJvcmRlcj0iY2FsY3VsYXRlZCIsdGhpcy5kZWZhdWx0TGlua0NvbG9yPSJjYWxjdWxhdGVkIix0aGlzLnRpdGxlQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMuZWRnZUxhYmVsQmFja2dyb3VuZD0iY2FsY3VsYXRlZCIsdGhpcy5hY3RvckJvcmRlcj0iY2FsY3VsYXRlZCIsdGhpcy5hY3RvckJrZz0iY2FsY3VsYXRlZCIsdGhpcy5hY3RvclRleHRDb2xvcj0iYmxhY2siLHRoaXMuYWN0b3JMaW5lQ29sb3I9ImdyZXkiLHRoaXMuc2lnbmFsQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMuc2lnbmFsVGV4dENvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmxhYmVsQm94QmtnQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMubGFiZWxCb3hCb3JkZXJDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5sYWJlbFRleHRDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5sb29wVGV4dENvbG9yPSJjYWxjdWxhdGVkIix0aGlzLm5vdGVCb3JkZXJDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5ub3RlQmtnQ29sb3I9IiNmZmY1YWQiLHRoaXMubm90ZVRleHRDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5hY3RpdmF0aW9uQm9yZGVyQ29sb3I9IiM2NjYiLHRoaXMuYWN0aXZhdGlvbkJrZ0NvbG9yPSIjZjRmNGY0Iix0aGlzLnNlcXVlbmNlTnVtYmVyQ29sb3I9IndoaXRlIix0aGlzLnNlY3Rpb25Ca2dDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5hbHRTZWN0aW9uQmtnQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMuc2VjdGlvbkJrZ0NvbG9yMj0iY2FsY3VsYXRlZCIsdGhpcy50YXNrQm9yZGVyQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMudGFza0JrZ0NvbG9yPSJjYWxjdWxhdGVkIix0aGlzLnRhc2tUZXh0TGlnaHRDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy50YXNrVGV4dENvbG9yPXRoaXMudGFza1RleHRMaWdodENvbG9yLHRoaXMudGFza1RleHREYXJrQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMudGFza1RleHRPdXRzaWRlQ29sb3I9dGhpcy50YXNrVGV4dERhcmtDb2xvcix0aGlzLnRhc2tUZXh0Q2xpY2thYmxlQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMuYWN0aXZlVGFza0JvcmRlckNvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmFjdGl2ZVRhc2tCa2dDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5ncmlkQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMuZG9uZVRhc2tCa2dDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5kb25lVGFza0JvcmRlckNvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmNyaXRCb3JkZXJDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5jcml0QmtnQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMudG9kYXlMaW5lQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMuc2VjdGlvbkJrZ0NvbG9yPU9iamVjdChHLnJnYmEpKDEwMiwxMDIsMjU1LC40OSksdGhpcy5hbHRTZWN0aW9uQmtnQ29sb3I9IndoaXRlIix0aGlzLnNlY3Rpb25Ca2dDb2xvcjI9IiNmZmY0MDAiLHRoaXMudGFza0JvcmRlckNvbG9yPSIjNTM0ZmJjIix0aGlzLnRhc2tCa2dDb2xvcj0iIzhhOTBkZCIsdGhpcy50YXNrVGV4dExpZ2h0Q29sb3I9IndoaXRlIix0aGlzLnRhc2tUZXh0Q29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMudGFza1RleHREYXJrQ29sb3I9ImJsYWNrIix0aGlzLnRhc2tUZXh0T3V0c2lkZUNvbG9yPSJjYWxjdWxhdGVkIix0aGlzLnRhc2tUZXh0Q2xpY2thYmxlQ29sb3I9IiMwMDMxNjMiLHRoaXMuYWN0aXZlVGFza0JvcmRlckNvbG9yPSIjNTM0ZmJjIix0aGlzLmFjdGl2ZVRhc2tCa2dDb2xvcj0iI2JmYzdmZiIsdGhpcy5ncmlkQ29sb3I9ImxpZ2h0Z3JleSIsdGhpcy5kb25lVGFza0JrZ0NvbG9yPSJsaWdodGdyZXkiLHRoaXMuZG9uZVRhc2tCb3JkZXJDb2xvcj0iZ3JleSIsdGhpcy5jcml0Qm9yZGVyQ29sb3I9IiNmZjg4ODgiLHRoaXMuY3JpdEJrZ0NvbG9yPSJyZWQiLHRoaXMudG9kYXlMaW5lQ29sb3I9InJlZCIsdGhpcy5sYWJlbENvbG9yPSJibGFjayIsdGhpcy5lcnJvckJrZ0NvbG9yPSIjNTUyMjIyIix0aGlzLmVycm9yVGV4dENvbG9yPSIjNTUyMjIyIix0aGlzLnVwZGF0ZUNvbG9ycygpfXZhciBlLG4scjtyZXR1cm4gZT10LChuPVt7a2V5OiJ1cGRhdGVDb2xvcnMiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5ub2RlQmtnPXRoaXMubWFpbkJrZyx0aGlzLm5vZGVCb3JkZXI9dGhpcy5ib3JkZXIxLHRoaXMuY2x1c3RlckJrZz10aGlzLnNlY29uZEJrZyx0aGlzLmNsdXN0ZXJCb3JkZXI9dGhpcy5ib3JkZXIyLHRoaXMuZGVmYXVsdExpbmtDb2xvcj10aGlzLmxpbmVDb2xvcix0aGlzLnRpdGxlQ29sb3I9dGhpcy50ZXh0Q29sb3IsdGhpcy5lZGdlTGFiZWxCYWNrZ3JvdW5kPXRoaXMubGFiZWxCYWNrZ3JvdW5kLHRoaXMuYWN0b3JCb3JkZXI9T2JqZWN0KEcubGlnaHRlbikodGhpcy5ib3JkZXIxLDIzKSx0aGlzLmFjdG9yQmtnPXRoaXMubWFpbkJrZyx0aGlzLmxhYmVsQm94QmtnQ29sb3I9dGhpcy5hY3RvckJrZyx0aGlzLnNpZ25hbENvbG9yPXRoaXMudGV4dENvbG9yLHRoaXMuc2lnbmFsVGV4dENvbG9yPXRoaXMudGV4dENvbG9yLHRoaXMubGFiZWxCb3hCb3JkZXJDb2xvcj10aGlzLmFjdG9yQm9yZGVyLHRoaXMubGFiZWxUZXh0Q29sb3I9dGhpcy5hY3RvclRleHRDb2xvcix0aGlzLmxvb3BUZXh0Q29sb3I9dGhpcy5hY3RvclRleHRDb2xvcix0aGlzLm5vdGVCb3JkZXJDb2xvcj10aGlzLmJvcmRlcjIsdGhpcy5ub3RlVGV4dENvbG9yPXRoaXMuYWN0b3JUZXh0Q29sb3IsdGhpcy50YXNrVGV4dENvbG9yPXRoaXMudGFza1RleHRMaWdodENvbG9yLHRoaXMudGFza1RleHRPdXRzaWRlQ29sb3I9dGhpcy50YXNrVGV4dERhcmtDb2xvcix0aGlzLmNsYXNzVGV4dD10aGlzLnByaW1hcnlUZXh0Q29sb3IsdGhpcy5maWxsVHlwZTA9dGhpcy5wcmltYXJ5Q29sb3IsdGhpcy5maWxsVHlwZTE9dGhpcy5zZWNvbmRhcnlDb2xvcix0aGlzLmZpbGxUeXBlMj1PYmplY3QoRy5hZGp1c3QpKHRoaXMucHJpbWFyeUNvbG9yLHtoOjY0fSksdGhpcy5maWxsVHlwZTM9T2JqZWN0KEcuYWRqdXN0KSh0aGlzLnNlY29uZGFyeUNvbG9yLHtoOjY0fSksdGhpcy5maWxsVHlwZTQ9T2JqZWN0KEcuYWRqdXN0KSh0aGlzLnByaW1hcnlDb2xvcix7aDotNjR9KSx0aGlzLmZpbGxUeXBlNT1PYmplY3QoRy5hZGp1c3QpKHRoaXMuc2Vjb25kYXJ5Q29sb3Ise2g6LTY0fSksdGhpcy5maWxsVHlwZTY9T2JqZWN0KEcuYWRqdXN0KSh0aGlzLnByaW1hcnlDb2xvcix7aDoxMjh9KSx0aGlzLmZpbGxUeXBlNz1PYmplY3QoRy5hZGp1c3QpKHRoaXMuc2Vjb25kYXJ5Q29sb3Ise2g6MTI4fSl9fSx7a2V5OiJjYWxjdWxhdGUiLHZhbHVlOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7aWYoIm9iamVjdCI9PT1ldCh0KSl7dmFyIG49T2JqZWN0LmtleXModCk7bi5mb3JFYWNoKChmdW5jdGlvbihuKXtlW25dPXRbbl19KSksdGhpcy51cGRhdGVDb2xvcnMoKSxuLmZvckVhY2goKGZ1bmN0aW9uKG4pe2Vbbl09dFtuXX0pKX1lbHNlIHRoaXMudXBkYXRlQ29sb3JzKCl9fV0pJiZudChlLnByb3RvdHlwZSxuKSxyJiZudChlLHIpLHR9KCk7ZnVuY3Rpb24gaXQodCl7cmV0dXJuKGl0PSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKHQpe3JldHVybiB0eXBlb2YgdH06ZnVuY3Rpb24odCl7cmV0dXJuIHQmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJnQuY29uc3RydWN0b3I9PT1TeW1ib2wmJnQhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiB0fSkodCl9ZnVuY3Rpb24gYXQodCxlKXtmb3IodmFyIG49MDtuPGUubGVuZ3RoO24rKyl7dmFyIHI9ZVtuXTtyLmVudW1lcmFibGU9ci5lbnVtZXJhYmxlfHwhMSxyLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gciYmKHIud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LHIua2V5LHIpfX12YXIgb3Q9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7IWZ1bmN0aW9uKHQsZSl7aWYoISh0IGluc3RhbmNlb2YgZSkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9KHRoaXMsdCksdGhpcy5iYWNrZ3JvdW5kPSIjZjRmNGY0Iix0aGlzLnByaW1hcnlDb2xvcj0iI2NkZTQ5OCIsdGhpcy5zZWNvbmRhcnlDb2xvcj0iI2NkZmZiMiIsdGhpcy5iYWNrZ3JvdW5kPSJ3aGl0ZSIsdGhpcy5tYWluQmtnPSIjY2RlNDk4Iix0aGlzLnNlY29uZEJrZz0iI2NkZmZiMiIsdGhpcy5saW5lQ29sb3I9ImdyZWVuIix0aGlzLmJvcmRlcjE9IiMxMzU0MGMiLHRoaXMuYm9yZGVyMj0iIzZlYWE0OSIsdGhpcy5hcnJvd2hlYWRDb2xvcj0iZ3JlZW4iLHRoaXMuZm9udEZhbWlseT0nInRyZWJ1Y2hldCBtcyIsIHZlcmRhbmEsIGFyaWFsJyx0aGlzLmZvbnRTaXplPSIxNnB4Iix0aGlzLnRlcnRpYXJ5Q29sb3I9T2JqZWN0KEcubGlnaHRlbikoIiNjZGU0OTgiLDEwKSx0aGlzLnByaW1hcnlCb3JkZXJDb2xvcj1xKHRoaXMucHJpbWFyeUNvbG9yLHRoaXMuZGFya01vZGUpLHRoaXMuc2Vjb25kYXJ5Qm9yZGVyQ29sb3I9cSh0aGlzLnNlY29uZGFyeUNvbG9yLHRoaXMuZGFya01vZGUpLHRoaXMudGVydGlhcnlCb3JkZXJDb2xvcj1xKHRoaXMudGVydGlhcnlDb2xvcix0aGlzLmRhcmtNb2RlKSx0aGlzLnByaW1hcnlUZXh0Q29sb3I9T2JqZWN0KEcuaW52ZXJ0KSh0aGlzLnByaW1hcnlDb2xvciksdGhpcy5zZWNvbmRhcnlUZXh0Q29sb3I9T2JqZWN0KEcuaW52ZXJ0KSh0aGlzLnNlY29uZGFyeUNvbG9yKSx0aGlzLnRlcnRpYXJ5VGV4dENvbG9yPU9iamVjdChHLmludmVydCkodGhpcy5wcmltYXJ5Q29sb3IpLHRoaXMubGluZUNvbG9yPU9iamVjdChHLmludmVydCkodGhpcy5iYWNrZ3JvdW5kKSx0aGlzLnRleHRDb2xvcj1PYmplY3QoRy5pbnZlcnQpKHRoaXMuYmFja2dyb3VuZCksdGhpcy5ub2RlQmtnPSJjYWxjdWxhdGVkIix0aGlzLm5vZGVCb3JkZXI9ImNhbGN1bGF0ZWQiLHRoaXMuY2x1c3RlckJrZz0iY2FsY3VsYXRlZCIsdGhpcy5jbHVzdGVyQm9yZGVyPSJjYWxjdWxhdGVkIix0aGlzLmRlZmF1bHRMaW5rQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMudGl0bGVDb2xvcj0iIzMzMyIsdGhpcy5lZGdlTGFiZWxCYWNrZ3JvdW5kPSIjZThlOGU4Iix0aGlzLmFjdG9yQm9yZGVyPSJjYWxjdWxhdGVkIix0aGlzLmFjdG9yQmtnPSJjYWxjdWxhdGVkIix0aGlzLmFjdG9yVGV4dENvbG9yPSJibGFjayIsdGhpcy5hY3RvckxpbmVDb2xvcj0iZ3JleSIsdGhpcy5zaWduYWxDb2xvcj0iIzMzMyIsdGhpcy5zaWduYWxUZXh0Q29sb3I9IiMzMzMiLHRoaXMubGFiZWxCb3hCa2dDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5sYWJlbEJveEJvcmRlckNvbG9yPSIjMzI2OTMyIix0aGlzLmxhYmVsVGV4dENvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmxvb3BUZXh0Q29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMubm90ZUJvcmRlckNvbG9yPSJjYWxjdWxhdGVkIix0aGlzLm5vdGVCa2dDb2xvcj0iI2ZmZjVhZCIsdGhpcy5ub3RlVGV4dENvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmFjdGl2YXRpb25Cb3JkZXJDb2xvcj0iIzY2NiIsdGhpcy5hY3RpdmF0aW9uQmtnQ29sb3I9IiNmNGY0ZjQiLHRoaXMuc2VxdWVuY2VOdW1iZXJDb2xvcj0id2hpdGUiLHRoaXMuc2VjdGlvbkJrZ0NvbG9yPSIjNmVhYTQ5Iix0aGlzLmFsdFNlY3Rpb25Ca2dDb2xvcj0id2hpdGUiLHRoaXMuc2VjdGlvbkJrZ0NvbG9yMj0iIzZlYWE0OSIsdGhpcy50YXNrQm9yZGVyQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMudGFza0JrZ0NvbG9yPSIjNDg3ZTNhIix0aGlzLnRhc2tUZXh0TGlnaHRDb2xvcj0id2hpdGUiLHRoaXMudGFza1RleHRDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy50YXNrVGV4dERhcmtDb2xvcj0iYmxhY2siLHRoaXMudGFza1RleHRPdXRzaWRlQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMudGFza1RleHRDbGlja2FibGVDb2xvcj0iIzAwMzE2MyIsdGhpcy5hY3RpdmVUYXNrQm9yZGVyQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMuYWN0aXZlVGFza0JrZ0NvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmdyaWRDb2xvcj0ibGlnaHRncmV5Iix0aGlzLmRvbmVUYXNrQmtnQ29sb3I9ImxpZ2h0Z3JleSIsdGhpcy5kb25lVGFza0JvcmRlckNvbG9yPSJncmV5Iix0aGlzLmNyaXRCb3JkZXJDb2xvcj0iI2ZmODg4OCIsdGhpcy5jcml0QmtnQ29sb3I9InJlZCIsdGhpcy50b2RheUxpbmVDb2xvcj0icmVkIix0aGlzLmxhYmVsQ29sb3I9ImJsYWNrIix0aGlzLmVycm9yQmtnQ29sb3I9IiM1NTIyMjIiLHRoaXMuZXJyb3JUZXh0Q29sb3I9IiM1NTIyMjIifXZhciBlLG4scjtyZXR1cm4gZT10LChuPVt7a2V5OiJ1cGRhdGVDb2xvcnMiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5ub2RlQmtnPXRoaXMubWFpbkJrZyx0aGlzLm5vZGVCb3JkZXI9dGhpcy5ib3JkZXIxLHRoaXMuY2x1c3RlckJrZz10aGlzLnNlY29uZEJrZyx0aGlzLmNsdXN0ZXJCb3JkZXI9dGhpcy5ib3JkZXIyLHRoaXMuZGVmYXVsdExpbmtDb2xvcj10aGlzLmxpbmVDb2xvcix0aGlzLmFjdG9yQm9yZGVyPU9iamVjdChHLmRhcmtlbikodGhpcy5tYWluQmtnLDIwKSx0aGlzLmFjdG9yQmtnPXRoaXMubWFpbkJrZyx0aGlzLmxhYmVsQm94QmtnQ29sb3I9dGhpcy5hY3RvckJrZyx0aGlzLmxhYmVsVGV4dENvbG9yPXRoaXMuYWN0b3JUZXh0Q29sb3IsdGhpcy5sb29wVGV4dENvbG9yPXRoaXMuYWN0b3JUZXh0Q29sb3IsdGhpcy5ub3RlQm9yZGVyQ29sb3I9dGhpcy5ib3JkZXIyLHRoaXMubm90ZVRleHRDb2xvcj10aGlzLmFjdG9yVGV4dENvbG9yLHRoaXMudGFza0JvcmRlckNvbG9yPXRoaXMuYm9yZGVyMSx0aGlzLnRhc2tUZXh0Q29sb3I9dGhpcy50YXNrVGV4dExpZ2h0Q29sb3IsdGhpcy50YXNrVGV4dE91dHNpZGVDb2xvcj10aGlzLnRhc2tUZXh0RGFya0NvbG9yLHRoaXMuYWN0aXZlVGFza0JvcmRlckNvbG9yPXRoaXMudGFza0JvcmRlckNvbG9yLHRoaXMuYWN0aXZlVGFza0JrZ0NvbG9yPXRoaXMubWFpbkJrZyx0aGlzLmNsYXNzVGV4dD10aGlzLnByaW1hcnlUZXh0Q29sb3IsdGhpcy5maWxsVHlwZTA9dGhpcy5wcmltYXJ5Q29sb3IsdGhpcy5maWxsVHlwZTE9dGhpcy5zZWNvbmRhcnlDb2xvcix0aGlzLmZpbGxUeXBlMj1PYmplY3QoRy5hZGp1c3QpKHRoaXMucHJpbWFyeUNvbG9yLHtoOjY0fSksdGhpcy5maWxsVHlwZTM9T2JqZWN0KEcuYWRqdXN0KSh0aGlzLnNlY29uZGFyeUNvbG9yLHtoOjY0fSksdGhpcy5maWxsVHlwZTQ9T2JqZWN0KEcuYWRqdXN0KSh0aGlzLnByaW1hcnlDb2xvcix7aDotNjR9KSx0aGlzLmZpbGxUeXBlNT1PYmplY3QoRy5hZGp1c3QpKHRoaXMuc2Vjb25kYXJ5Q29sb3Ise2g6LTY0fSksdGhpcy5maWxsVHlwZTY9T2JqZWN0KEcuYWRqdXN0KSh0aGlzLnByaW1hcnlDb2xvcix7aDoxMjh9KSx0aGlzLmZpbGxUeXBlNz1PYmplY3QoRy5hZGp1c3QpKHRoaXMuc2Vjb25kYXJ5Q29sb3Ise2g6MTI4fSl9fSx7a2V5OiJjYWxjdWxhdGUiLHZhbHVlOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7aWYoIm9iamVjdCI9PT1pdCh0KSl7dmFyIG49T2JqZWN0LmtleXModCk7bi5mb3JFYWNoKChmdW5jdGlvbihuKXtlW25dPXRbbl19KSksdGhpcy51cGRhdGVDb2xvcnMoKSxuLmZvckVhY2goKGZ1bmN0aW9uKG4pe2Vbbl09dFtuXX0pKX1lbHNlIHRoaXMudXBkYXRlQ29sb3JzKCl9fV0pJiZhdChlLnByb3RvdHlwZSxuKSxyJiZhdChlLHIpLHR9KCk7ZnVuY3Rpb24gc3QodCl7cmV0dXJuKHN0PSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKHQpe3JldHVybiB0eXBlb2YgdH06ZnVuY3Rpb24odCl7cmV0dXJuIHQmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJnQuY29uc3RydWN0b3I9PT1TeW1ib2wmJnQhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiB0fSkodCl9ZnVuY3Rpb24gY3QodCxlKXtmb3IodmFyIG49MDtuPGUubGVuZ3RoO24rKyl7dmFyIHI9ZVtuXTtyLmVudW1lcmFibGU9ci5lbnVtZXJhYmxlfHwhMSxyLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gciYmKHIud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LHIua2V5LHIpfX12YXIgdXQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7IWZ1bmN0aW9uKHQsZSl7aWYoISh0IGluc3RhbmNlb2YgZSkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9KHRoaXMsdCksdGhpcy5wcmltYXJ5Q29sb3I9IiNlZWUiLHRoaXMuY29udHJhc3Q9IiMyNmEiLHRoaXMuc2Vjb25kYXJ5Q29sb3I9T2JqZWN0KEcubGlnaHRlbikodGhpcy5jb250cmFzdCw1NSksdGhpcy5iYWNrZ3JvdW5kPSIjZmZmZmZmIix0aGlzLnRlcnRpYXJ5Q29sb3I9T2JqZWN0KEcuYWRqdXN0KSh0aGlzLnByaW1hcnlDb2xvcix7aDotMTYwfSksdGhpcy5wcmltYXJ5Qm9yZGVyQ29sb3I9cSh0aGlzLnByaW1hcnlDb2xvcix0aGlzLmRhcmtNb2RlKSx0aGlzLnNlY29uZGFyeUJvcmRlckNvbG9yPXEodGhpcy5zZWNvbmRhcnlDb2xvcix0aGlzLmRhcmtNb2RlKSx0aGlzLnRlcnRpYXJ5Qm9yZGVyQ29sb3I9cSh0aGlzLnRlcnRpYXJ5Q29sb3IsdGhpcy5kYXJrTW9kZSksdGhpcy5wcmltYXJ5VGV4dENvbG9yPU9iamVjdChHLmludmVydCkodGhpcy5wcmltYXJ5Q29sb3IpLHRoaXMuc2Vjb25kYXJ5VGV4dENvbG9yPU9iamVjdChHLmludmVydCkodGhpcy5zZWNvbmRhcnlDb2xvciksdGhpcy50ZXJ0aWFyeVRleHRDb2xvcj1PYmplY3QoRy5pbnZlcnQpKHRoaXMudGVydGlhcnlDb2xvciksdGhpcy5saW5lQ29sb3I9T2JqZWN0KEcuaW52ZXJ0KSh0aGlzLmJhY2tncm91bmQpLHRoaXMudGV4dENvbG9yPU9iamVjdChHLmludmVydCkodGhpcy5iYWNrZ3JvdW5kKSx0aGlzLmFsdEJhY2tncm91bmQ9T2JqZWN0KEcubGlnaHRlbikodGhpcy5jb250cmFzdCw1NSksdGhpcy5tYWluQmtnPSIjZWVlIix0aGlzLnNlY29uZEJrZz0iY2FsY3VsYXRlZCIsdGhpcy5saW5lQ29sb3I9IiM2NjYiLHRoaXMuYm9yZGVyMT0iIzk5OSIsdGhpcy5ib3JkZXIyPSJjYWxjdWxhdGVkIix0aGlzLm5vdGU9IiNmZmEiLHRoaXMudGV4dD0iIzMzMyIsdGhpcy5jcml0aWNhbD0iI2Q0MiIsdGhpcy5kb25lPSIjYmJiIix0aGlzLmFycm93aGVhZENvbG9yPSIjMzMzMzMzIix0aGlzLmZvbnRGYW1pbHk9JyJ0cmVidWNoZXQgbXMiLCB2ZXJkYW5hLCBhcmlhbCcsdGhpcy5mb250U2l6ZT0iMTZweCIsdGhpcy5ub2RlQmtnPSJjYWxjdWxhdGVkIix0aGlzLm5vZGVCb3JkZXI9ImNhbGN1bGF0ZWQiLHRoaXMuY2x1c3RlckJrZz0iY2FsY3VsYXRlZCIsdGhpcy5jbHVzdGVyQm9yZGVyPSJjYWxjdWxhdGVkIix0aGlzLmRlZmF1bHRMaW5rQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMudGl0bGVDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5lZGdlTGFiZWxCYWNrZ3JvdW5kPSJ3aGl0ZSIsdGhpcy5hY3RvckJvcmRlcj0iY2FsY3VsYXRlZCIsdGhpcy5hY3RvckJrZz0iY2FsY3VsYXRlZCIsdGhpcy5hY3RvclRleHRDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5hY3RvckxpbmVDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5zaWduYWxDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5zaWduYWxUZXh0Q29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMubGFiZWxCb3hCa2dDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5sYWJlbEJveEJvcmRlckNvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmxhYmVsVGV4dENvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmxvb3BUZXh0Q29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMubm90ZUJvcmRlckNvbG9yPSJjYWxjdWxhdGVkIix0aGlzLm5vdGVCa2dDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5ub3RlVGV4dENvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmFjdGl2YXRpb25Cb3JkZXJDb2xvcj0iIzY2NiIsdGhpcy5hY3RpdmF0aW9uQmtnQ29sb3I9IiNmNGY0ZjQiLHRoaXMuc2VxdWVuY2VOdW1iZXJDb2xvcj0id2hpdGUiLHRoaXMuc2VjdGlvbkJrZ0NvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmFsdFNlY3Rpb25Ca2dDb2xvcj0id2hpdGUiLHRoaXMuc2VjdGlvbkJrZ0NvbG9yMj0iY2FsY3VsYXRlZCIsdGhpcy50YXNrQm9yZGVyQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMudGFza0JrZ0NvbG9yPSJjYWxjdWxhdGVkIix0aGlzLnRhc2tUZXh0TGlnaHRDb2xvcj0id2hpdGUiLHRoaXMudGFza1RleHRDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy50YXNrVGV4dERhcmtDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy50YXNrVGV4dE91dHNpZGVDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy50YXNrVGV4dENsaWNrYWJsZUNvbG9yPSIjMDAzMTYzIix0aGlzLmFjdGl2ZVRhc2tCb3JkZXJDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5hY3RpdmVUYXNrQmtnQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMuZ3JpZENvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmRvbmVUYXNrQmtnQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMuZG9uZVRhc2tCb3JkZXJDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5jcml0QmtnQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMuY3JpdEJvcmRlckNvbG9yPSJjYWxjdWxhdGVkIix0aGlzLnRvZGF5TGluZUNvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmxhYmVsQ29sb3I9ImJsYWNrIix0aGlzLmVycm9yQmtnQ29sb3I9IiM1NTIyMjIiLHRoaXMuZXJyb3JUZXh0Q29sb3I9IiM1NTIyMjIifXZhciBlLG4scjtyZXR1cm4gZT10LChuPVt7a2V5OiJ1cGRhdGVDb2xvcnMiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5zZWNvbmRCa2c9T2JqZWN0KEcubGlnaHRlbikodGhpcy5jb250cmFzdCw1NSksdGhpcy5ib3JkZXIyPXRoaXMuY29udHJhc3QsdGhpcy5ub2RlQmtnPXRoaXMubWFpbkJrZyx0aGlzLm5vZGVCb3JkZXI9dGhpcy5ib3JkZXIxLHRoaXMuY2x1c3RlckJrZz10aGlzLnNlY29uZEJrZyx0aGlzLmNsdXN0ZXJCb3JkZXI9dGhpcy5ib3JkZXIyLHRoaXMuZGVmYXVsdExpbmtDb2xvcj10aGlzLmxpbmVDb2xvcix0aGlzLnRpdGxlQ29sb3I9dGhpcy50ZXh0LHRoaXMuYWN0b3JCb3JkZXI9T2JqZWN0KEcubGlnaHRlbikodGhpcy5ib3JkZXIxLDIzKSx0aGlzLmFjdG9yQmtnPXRoaXMubWFpbkJrZyx0aGlzLmFjdG9yVGV4dENvbG9yPXRoaXMudGV4dCx0aGlzLmFjdG9yTGluZUNvbG9yPXRoaXMubGluZUNvbG9yLHRoaXMuc2lnbmFsQ29sb3I9dGhpcy50ZXh0LHRoaXMuc2lnbmFsVGV4dENvbG9yPXRoaXMudGV4dCx0aGlzLmxhYmVsQm94QmtnQ29sb3I9dGhpcy5hY3RvckJrZyx0aGlzLmxhYmVsQm94Qm9yZGVyQ29sb3I9dGhpcy5hY3RvckJvcmRlcix0aGlzLmxhYmVsVGV4dENvbG9yPXRoaXMudGV4dCx0aGlzLmxvb3BUZXh0Q29sb3I9dGhpcy50ZXh0LHRoaXMubm90ZUJvcmRlckNvbG9yPU9iamVjdChHLmRhcmtlbikodGhpcy5ub3RlLDYwKSx0aGlzLm5vdGVCa2dDb2xvcj10aGlzLm5vdGUsdGhpcy5ub3RlVGV4dENvbG9yPXRoaXMuYWN0b3JUZXh0Q29sb3IsdGhpcy5zZWN0aW9uQmtnQ29sb3I9T2JqZWN0KEcubGlnaHRlbikodGhpcy5jb250cmFzdCwzMCksdGhpcy5zZWN0aW9uQmtnQ29sb3IyPU9iamVjdChHLmxpZ2h0ZW4pKHRoaXMuY29udHJhc3QsMzApLHRoaXMudGFza0JvcmRlckNvbG9yPU9iamVjdChHLmRhcmtlbikodGhpcy5jb250cmFzdCwxMCksdGhpcy50YXNrQmtnQ29sb3I9dGhpcy5jb250cmFzdCx0aGlzLnRhc2tUZXh0Q29sb3I9dGhpcy50YXNrVGV4dExpZ2h0Q29sb3IsdGhpcy50YXNrVGV4dERhcmtDb2xvcj10aGlzLnRleHQsdGhpcy50YXNrVGV4dE91dHNpZGVDb2xvcj10aGlzLnRhc2tUZXh0RGFya0NvbG9yLHRoaXMuYWN0aXZlVGFza0JvcmRlckNvbG9yPXRoaXMudGFza0JvcmRlckNvbG9yLHRoaXMuYWN0aXZlVGFza0JrZ0NvbG9yPXRoaXMubWFpbkJrZyx0aGlzLmdyaWRDb2xvcj1PYmplY3QoRy5saWdodGVuKSh0aGlzLmJvcmRlcjEsMzApLHRoaXMuZG9uZVRhc2tCa2dDb2xvcj10aGlzLmRvbmUsdGhpcy5kb25lVGFza0JvcmRlckNvbG9yPXRoaXMubGluZUNvbG9yLHRoaXMuY3JpdEJrZ0NvbG9yPXRoaXMuY3JpdGljYWwsdGhpcy5jcml0Qm9yZGVyQ29sb3I9T2JqZWN0KEcuZGFya2VuKSh0aGlzLmNyaXRCa2dDb2xvciwxMCksdGhpcy50b2RheUxpbmVDb2xvcj10aGlzLmNyaXRCa2dDb2xvcix0aGlzLmNsYXNzVGV4dD10aGlzLnByaW1hcnlUZXh0Q29sb3IsdGhpcy5maWxsVHlwZTA9dGhpcy5wcmltYXJ5Q29sb3IsdGhpcy5maWxsVHlwZTE9dGhpcy5zZWNvbmRhcnlDb2xvcix0aGlzLmZpbGxUeXBlMj1PYmplY3QoRy5hZGp1c3QpKHRoaXMucHJpbWFyeUNvbG9yLHtoOjY0fSksdGhpcy5maWxsVHlwZTM9T2JqZWN0KEcuYWRqdXN0KSh0aGlzLnNlY29uZGFyeUNvbG9yLHtoOjY0fSksdGhpcy5maWxsVHlwZTQ9T2JqZWN0KEcuYWRqdXN0KSh0aGlzLnByaW1hcnlDb2xvcix7aDotNjR9KSx0aGlzLmZpbGxUeXBlNT1PYmplY3QoRy5hZGp1c3QpKHRoaXMuc2Vjb25kYXJ5Q29sb3Ise2g6LTY0fSksdGhpcy5maWxsVHlwZTY9T2JqZWN0KEcuYWRqdXN0KSh0aGlzLnByaW1hcnlDb2xvcix7aDoxMjh9KSx0aGlzLmZpbGxUeXBlNz1PYmplY3QoRy5hZGp1c3QpKHRoaXMuc2Vjb25kYXJ5Q29sb3Ise2g6MTI4fSl9fSx7a2V5OiJjYWxjdWxhdGUiLHZhbHVlOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7aWYoIm9iamVjdCI9PT1zdCh0KSl7dmFyIG49T2JqZWN0LmtleXModCk7bi5mb3JFYWNoKChmdW5jdGlvbihuKXtlW25dPXRbbl19KSksdGhpcy51cGRhdGVDb2xvcnMoKSxuLmZvckVhY2goKGZ1bmN0aW9uKG4pe2Vbbl09dFtuXX0pKX1lbHNlIHRoaXMudXBkYXRlQ29sb3JzKCl9fV0pJiZjdChlLnByb3RvdHlwZSxuKSxyJiZjdChlLHIpLHR9KCksbHQ9e2Jhc2U6e2dldFRoZW1lVmFyaWFibGVzOmZ1bmN0aW9uKHQpe3ZhciBlPW5ldyBKO3JldHVybiBlLmNhbGN1bGF0ZSh0KSxlfX0sZGFyazp7Z2V0VGhlbWVWYXJpYWJsZXM6ZnVuY3Rpb24odCl7dmFyIGU9bmV3IHR0O3JldHVybiBlLmNhbGN1bGF0ZSh0KSxlfX0sZGVmYXVsdDp7Z2V0VGhlbWVWYXJpYWJsZXM6ZnVuY3Rpb24odCl7dmFyIGU9bmV3IHJ0O3JldHVybiBlLmNhbGN1bGF0ZSh0KSxlfX0sZm9yZXN0OntnZXRUaGVtZVZhcmlhYmxlczpmdW5jdGlvbih0KXt2YXIgZT1uZXcgb3Q7cmV0dXJuIGUuY2FsY3VsYXRlKHQpLGV9fSxuZXV0cmFsOntnZXRUaGVtZVZhcmlhYmxlczpmdW5jdGlvbih0KXt2YXIgZT1uZXcgdXQ7cmV0dXJuIGUuY2FsY3VsYXRlKHQpLGV9fX0saHQ9e3RoZW1lOiJkZWZhdWx0Iix0aGVtZVZhcmlhYmxlczpsdC5kZWZhdWx0LmdldFRoZW1lVmFyaWFibGVzKCksdGhlbWVDU1M6dm9pZCAwLG1heFRleHRTaXplOjVlNCxmb250RmFtaWx5OicidHJlYnVjaGV0IG1zIiwgdmVyZGFuYSwgYXJpYWw7Jyxsb2dMZXZlbDo1LHNlY3VyaXR5TGV2ZWw6InN0cmljdCIsc3RhcnRPbkxvYWQ6ITAsYXJyb3dNYXJrZXJBYnNvbHV0ZTohMSxzZWN1cmU6WyJzZWN1cmUiLCJzZWN1cml0eUxldmVsIiwic3RhcnRPbkxvYWQiLCJtYXhUZXh0U2l6ZSJdLGZsb3djaGFydDp7ZGlhZ3JhbVBhZGRpbmc6OCxodG1sTGFiZWxzOiEwLG5vZGVTcGFjaW5nOjUwLHJhbmtTcGFjaW5nOjUwLGN1cnZlOiJsaW5lYXIiLHBhZGRpbmc6MTUsdXNlTWF4V2lkdGg6ITB9LHNlcXVlbmNlOnthY3RpdmF0aW9uV2lkdGg6MTAsZGlhZ3JhbU1hcmdpblg6NTAsZGlhZ3JhbU1hcmdpblk6MTAsYWN0b3JNYXJnaW46NTAsd2lkdGg6MTUwLGhlaWdodDo2NSxib3hNYXJnaW46MTAsYm94VGV4dE1hcmdpbjo1LG5vdGVNYXJnaW46MTAsbWVzc2FnZU1hcmdpbjozNSxtZXNzYWdlQWxpZ246ImNlbnRlciIsbWlycm9yQWN0b3JzOiEwLGJvdHRvbU1hcmdpbkFkajoxLHVzZU1heFdpZHRoOiEwLHJpZ2h0QW5nbGVzOiExLHNob3dTZXF1ZW5jZU51bWJlcnM6ITEsYWN0b3JGb250U2l6ZToxNCxhY3RvckZvbnRGYW1pbHk6JyJPcGVuLVNhbnMiLCAic2Fucy1zZXJpZiInLGFjdG9yRm9udFdlaWdodDo0MDAsbm90ZUZvbnRTaXplOjE0LG5vdGVGb250RmFtaWx5OicidHJlYnVjaGV0IG1zIiwgdmVyZGFuYSwgYXJpYWwnLG5vdGVGb250V2VpZ2h0OjQwMCxub3RlQWxpZ246ImNlbnRlciIsbWVzc2FnZUZvbnRTaXplOjE2LG1lc3NhZ2VGb250RmFtaWx5OicidHJlYnVjaGV0IG1zIiwgdmVyZGFuYSwgYXJpYWwnLG1lc3NhZ2VGb250V2VpZ2h0OjQwMCx3cmFwOiExLHdyYXBQYWRkaW5nOjEwLGxhYmVsQm94V2lkdGg6NTAsbGFiZWxCb3hIZWlnaHQ6MjAsbWVzc2FnZUZvbnQ6ZnVuY3Rpb24oKXtyZXR1cm57Zm9udEZhbWlseTp0aGlzLm1lc3NhZ2VGb250RmFtaWx5LGZvbnRTaXplOnRoaXMubWVzc2FnZUZvbnRTaXplLGZvbnRXZWlnaHQ6dGhpcy5tZXNzYWdlRm9udFdlaWdodH19LG5vdGVGb250OmZ1bmN0aW9uKCl7cmV0dXJue2ZvbnRGYW1pbHk6dGhpcy5ub3RlRm9udEZhbWlseSxmb250U2l6ZTp0aGlzLm5vdGVGb250U2l6ZSxmb250V2VpZ2h0OnRoaXMubm90ZUZvbnRXZWlnaHR9fSxhY3RvckZvbnQ6ZnVuY3Rpb24oKXtyZXR1cm57Zm9udEZhbWlseTp0aGlzLmFjdG9yRm9udEZhbWlseSxmb250U2l6ZTp0aGlzLmFjdG9yRm9udFNpemUsZm9udFdlaWdodDp0aGlzLmFjdG9yRm9udFdlaWdodH19fSxnYW50dDp7dGl0bGVUb3BNYXJnaW46MjUsYmFySGVpZ2h0OjIwLGJhckdhcDo0LHRvcFBhZGRpbmc6NTAsbGVmdFBhZGRpbmc6NzUsZ3JpZExpbmVTdGFydFBhZGRpbmc6MzUsZm9udFNpemU6MTEsZm9udEZhbWlseTonIk9wZW4tU2FucyIsICJzYW5zLXNlcmlmIicsbnVtYmVyU2VjdGlvblN0eWxlczo0LGF4aXNGb3JtYXQ6IiVZLSVtLSVkIix1c2VNYXhXaWR0aDohMCx1c2VXaWR0aDp2b2lkIDB9LGpvdXJuZXk6e2RpYWdyYW1NYXJnaW5YOjUwLGRpYWdyYW1NYXJnaW5ZOjEwLGFjdG9yTWFyZ2luOjUwLHdpZHRoOjE1MCxoZWlnaHQ6NjUsYm94TWFyZ2luOjEwLGJveFRleHRNYXJnaW46NSxub3RlTWFyZ2luOjEwLG1lc3NhZ2VNYXJnaW46MzUsbWVzc2FnZUFsaWduOiJjZW50ZXIiLGJvdHRvbU1hcmdpbkFkajoxLHVzZU1heFdpZHRoOiEwLHJpZ2h0QW5nbGVzOiExfSxjbGFzczp7YXJyb3dNYXJrZXJBYnNvbHV0ZTohMSx1c2VNYXhXaWR0aDohMH0sZ2l0OnthcnJvd01hcmtlckFic29sdXRlOiExLHVzZVdpZHRoOnZvaWQgMCx1c2VNYXhXaWR0aDohMH0sc3RhdGU6e2RpdmlkZXJNYXJnaW46MTAsc2l6ZVVuaXQ6NSxwYWRkaW5nOjgsdGV4dEhlaWdodDoxMCx0aXRsZVNoaWZ0Oi0xNSxub3RlTWFyZ2luOjEwLGZvcmtXaWR0aDo3MCxmb3JrSGVpZ2h0OjcsbWluaVBhZGRpbmc6Mixmb250U2l6ZUZhY3Rvcjo1LjAyLGZvbnRTaXplOjI0LGxhYmVsSGVpZ2h0OjE2LGVkZ2VMZW5ndGhGYWN0b3I6IjIwIixjb21wb3NpdFRpdGxlU2l6ZTozNSxyYWRpdXM6NSx1c2VNYXhXaWR0aDohMH0sZXI6e2RpYWdyYW1QYWRkaW5nOjIwLGxheW91dERpcmVjdGlvbjoiVEIiLG1pbkVudGl0eVdpZHRoOjEwMCxtaW5FbnRpdHlIZWlnaHQ6NzUsZW50aXR5UGFkZGluZzoxNSxzdHJva2U6ImdyYXkiLGZpbGw6ImhvbmV5ZGV3Iixmb250U2l6ZToxMix1c2VNYXhXaWR0aDohMH0scGllOnt1c2VXaWR0aDp2b2lkIDAsdXNlTWF4V2lkdGg6ITB9fTtodC5jbGFzcy5hcnJvd01hcmtlckFic29sdXRlPWh0LmFycm93TWFya2VyQWJzb2x1dGUsaHQuZ2l0LmFycm93TWFya2VyQWJzb2x1dGU9aHQuYXJyb3dNYXJrZXJBYnNvbHV0ZTt2YXIgZnQsZHQ9aHQscHQ9T2JqZWN0LmZyZWV6ZShkdCksZ3Q9UCh7fSxwdCkseXQ9W10sdnQ9UCh7fSxwdCksbXQ9ZnVuY3Rpb24odCxlKXtmb3IodmFyIG49UCh7fSx0KSxyPXt9LGk9MDtpPGUubGVuZ3RoO2krKyl7dmFyIGE9ZVtpXTtfdChhKSxyPVAocixhKX1pZihuPVAobixyKSxyLnRoZW1lKXt2YXIgbz1QKGZ0LnRoZW1lVmFyaWFibGVzfHx7fSxyLnRoZW1lVmFyaWFibGVzKTtuLnRoZW1lVmFyaWFibGVzPWx0W24udGhlbWVdLmdldFRoZW1lVmFyaWFibGVzKG8pfXJldHVybiB2dD1uLG59LGJ0PWZ1bmN0aW9uKCl7cmV0dXJuIFAoe30sZ3QpfSx4dD1mdW5jdGlvbigpe3JldHVybiBQKHt9LHZ0KX0sX3Q9ZnVuY3Rpb24odCl7T2JqZWN0LmtleXMoZ3Quc2VjdXJlKS5mb3JFYWNoKChmdW5jdGlvbihlKXt2b2lkIDAhPT10W2d0LnNlY3VyZVtlXV0mJihmLmRlYnVnKCJEZW5pZWQgYXR0ZW1wdCB0byBtb2RpZnkgYSBzZWN1cmUga2V5ICIuY29uY2F0KGd0LnNlY3VyZVtlXSksdFtndC5zZWN1cmVbZV1dKSxkZWxldGUgdFtndC5zZWN1cmVbZV1dKX0pKX0sa3Q9ZnVuY3Rpb24odCl7dC5mb250RmFtaWx5JiYodC50aGVtZVZhcmlhYmxlcyYmdC50aGVtZVZhcmlhYmxlcy5mb250RmFtaWx5fHwodC50aGVtZVZhcmlhYmxlcz17Zm9udEZhbWlseTp0LmZvbnRGYW1pbHl9KSkseXQucHVzaCh0KSxtdChndCx5dCl9LHd0PWZ1bmN0aW9uKCl7bXQoZ3QseXQ9W10pfTtmdW5jdGlvbiBFdCh0KXtyZXR1cm4oRXQ9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24odCl7cmV0dXJuIHR5cGVvZiB0fTpmdW5jdGlvbih0KXtyZXR1cm4gdCYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmdC5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmdCE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIHR9KSh0KX12YXIgVHQsQ3QsU3Q9MCxBdD14dCgpLE10PXt9LE90PVtdLER0PVtdLE50PVtdLEJ0PXt9LEx0PXt9LEZ0PTAsUHQ9ITAsSXQ9W10sanQ9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPU9iamVjdC5rZXlzKE10KSxuPTA7bjxlLmxlbmd0aDtuKyspaWYoTXRbZVtuXV0uaWQ9PT10KXJldHVybiBNdFtlW25dXS5kb21JZDtyZXR1cm4gdH0sUnQ9ZnVuY3Rpb24odCxlLG4scil7dmFyIGk9e3N0YXJ0OnQsZW5kOmUsdHlwZTp2b2lkIDAsdGV4dDoiIn07dm9pZCAwIT09KHI9bi50ZXh0KSYmKGkudGV4dD14LnNhbml0aXplVGV4dChyLnRyaW0oKSxBdCksJyInPT09aS50ZXh0WzBdJiYnIic9PT1pLnRleHRbaS50ZXh0Lmxlbmd0aC0xXSYmKGkudGV4dD1pLnRleHQuc3Vic3RyaW5nKDEsaS50ZXh0Lmxlbmd0aC0xKSkpLHZvaWQgMCE9PW4mJihpLnR5cGU9bi50eXBlLGkuc3Ryb2tlPW4uc3Ryb2tlLGkubGVuZ3RoPW4ubGVuZ3RoKSxPdC5wdXNoKGkpfSxZdD1mdW5jdGlvbih0LGUpe3Quc3BsaXQoIiwiKS5mb3JFYWNoKChmdW5jdGlvbih0KXt2YXIgbj10O3ZvaWQgMCE9PU10W25dJiZNdFtuXS5jbGFzc2VzLnB1c2goZSksdm9pZCAwIT09QnRbbl0mJkJ0W25dLmNsYXNzZXMucHVzaChlKX0pKX0senQ9ZnVuY3Rpb24odCxlKXt0LnNwbGl0KCIsIikuZm9yRWFjaCgoZnVuY3Rpb24odCl7dm9pZCAwIT09ZSYmKEx0WyJnZW4tMSI9PT1DdD9qdCh0KTp0XT14LnNhbml0aXplVGV4dChlLEF0KSl9KSl9LFV0PWZ1bmN0aW9uKHQpe3ZhciBlPU9iamVjdChzLnNlbGVjdCkoIi5tZXJtYWlkVG9vbHRpcCIpO251bGw9PT0oZS5fZ3JvdXBzfHxlKVswXVswXSYmKGU9T2JqZWN0KHMuc2VsZWN0KSgiYm9keSIpLmFwcGVuZCgiZGl2IikuYXR0cigiY2xhc3MiLCJtZXJtYWlkVG9vbHRpcCIpLnN0eWxlKCJvcGFjaXR5IiwwKSksT2JqZWN0KHMuc2VsZWN0KSh0KS5zZWxlY3QoInN2ZyIpLnNlbGVjdEFsbCgiZy5ub2RlIikub24oIm1vdXNlb3ZlciIsKGZ1bmN0aW9uKCl7dmFyIHQ9T2JqZWN0KHMuc2VsZWN0KSh0aGlzKTtpZihudWxsIT09dC5hdHRyKCJ0aXRsZSIpKXt2YXIgbj10aGlzLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO2UudHJhbnNpdGlvbigpLmR1cmF0aW9uKDIwMCkuc3R5bGUoIm9wYWNpdHkiLCIuOSIpLGUuaHRtbCh0LmF0dHIoInRpdGxlIikpLnN0eWxlKCJsZWZ0Iix3aW5kb3cuc2Nyb2xsWCtuLmxlZnQrKG4ucmlnaHQtbi5sZWZ0KS8yKyJweCIpLnN0eWxlKCJ0b3AiLHdpbmRvdy5zY3JvbGxZK24udG9wLTE0K2RvY3VtZW50LmJvZHkuc2Nyb2xsVG9wKyJweCIpLHQuY2xhc3NlZCgiaG92ZXIiLCEwKX19KSkub24oIm1vdXNlb3V0IiwoZnVuY3Rpb24oKXtlLnRyYW5zaXRpb24oKS5kdXJhdGlvbig1MDApLnN0eWxlKCJvcGFjaXR5IiwwKSxPYmplY3Qocy5zZWxlY3QpKHRoaXMpLmNsYXNzZWQoImhvdmVyIiwhMSl9KSl9O0l0LnB1c2goVXQpO3ZhciAkdD1mdW5jdGlvbih0KXtmb3IodmFyIGU9MDtlPE50Lmxlbmd0aDtlKyspaWYoTnRbZV0uaWQ9PT10KXJldHVybiBlO3JldHVybi0xfSxXdD0tMSxWdD1bXSxIdD17cGFyc2VEaXJlY3RpdmU6ZnVuY3Rpb24odCxlLG4pe3pvLnBhcnNlRGlyZWN0aXZlKHRoaXMsdCxlLG4pfSxkZWZhdWx0Q29uZmlnOmZ1bmN0aW9uKCl7cmV0dXJuIHB0LmZsb3djaGFydH0sYWRkVmVydGV4OmZ1bmN0aW9uKHQsZSxuLHIsaSl7dmFyIGEsbz10O3ZvaWQgMCE9PW8mJjAhPT1vLnRyaW0oKS5sZW5ndGgmJih2b2lkIDA9PT1NdFtvXSYmKE10W29dPXtpZDpvLGRvbUlkOiJmbG93Y2hhcnQtIitvKyItIitTdCxzdHlsZXM6W10sY2xhc3NlczpbXX0pLFN0Kyssdm9pZCAwIT09ZT8oQXQ9eHQoKSwnIic9PT0oYT14LnNhbml0aXplVGV4dChlLnRyaW0oKSxBdCkpWzBdJiYnIic9PT1hW2EubGVuZ3RoLTFdJiYoYT1hLnN1YnN0cmluZygxLGEubGVuZ3RoLTEpKSxNdFtvXS50ZXh0PWEpOnZvaWQgMD09PU10W29dLnRleHQmJihNdFtvXS50ZXh0PXQpLHZvaWQgMCE9PW4mJihNdFtvXS50eXBlPW4pLG51bGwhPXImJnIuZm9yRWFjaCgoZnVuY3Rpb24odCl7TXRbb10uc3R5bGVzLnB1c2godCl9KSksbnVsbCE9aSYmaS5mb3JFYWNoKChmdW5jdGlvbih0KXtNdFtvXS5jbGFzc2VzLnB1c2godCl9KSkpfSxsb29rVXBEb21JZDpqdCxhZGRMaW5rOmZ1bmN0aW9uKHQsZSxuLHIpe3ZhciBpLGE7Zm9yKGk9MDtpPHQubGVuZ3RoO2krKylmb3IoYT0wO2E8ZS5sZW5ndGg7YSsrKVJ0KHRbaV0sZVthXSxuLHIpfSx1cGRhdGVMaW5rSW50ZXJwb2xhdGU6ZnVuY3Rpb24odCxlKXt0LmZvckVhY2goKGZ1bmN0aW9uKHQpeyJkZWZhdWx0Ij09PXQ/T3QuZGVmYXVsdEludGVycG9sYXRlPWU6T3RbdF0uaW50ZXJwb2xhdGU9ZX0pKX0sdXBkYXRlTGluazpmdW5jdGlvbih0LGUpe3QuZm9yRWFjaCgoZnVuY3Rpb24odCl7ImRlZmF1bHQiPT09dD9PdC5kZWZhdWx0U3R5bGU9ZTooLTE9PT1XLmlzU3Vic3RyaW5nSW5BcnJheSgiZmlsbCIsZSkmJmUucHVzaCgiZmlsbDpub25lIiksT3RbdF0uc3R5bGU9ZSl9KSl9LGFkZENsYXNzOmZ1bmN0aW9uKHQsZSl7dm9pZCAwPT09RHRbdF0mJihEdFt0XT17aWQ6dCxzdHlsZXM6W10sdGV4dFN0eWxlczpbXX0pLG51bGwhPWUmJmUuZm9yRWFjaCgoZnVuY3Rpb24oZSl7aWYoZS5tYXRjaCgiY29sb3IiKSl7dmFyIG49ZS5yZXBsYWNlKCJmaWxsIiwiYmdGaWxsIikucmVwbGFjZSgiY29sb3IiLCJmaWxsIik7RHRbdF0udGV4dFN0eWxlcy5wdXNoKG4pfUR0W3RdLnN0eWxlcy5wdXNoKGUpfSkpfSxzZXREaXJlY3Rpb246ZnVuY3Rpb24odCl7KFR0PXQpLm1hdGNoKC8uKjwvKSYmKFR0PSJSTCIpLFR0Lm1hdGNoKC8uKlxeLykmJihUdD0iQlQiKSxUdC5tYXRjaCgvLio+LykmJihUdD0iTFIiKSxUdC5tYXRjaCgvLip2LykmJihUdD0iVEIiKX0sc2V0Q2xhc3M6WXQsZ2V0VG9vbHRpcDpmdW5jdGlvbih0KXtyZXR1cm4gTHRbdF19LHNldENsaWNrRXZlbnQ6ZnVuY3Rpb24odCxlLG4pe3Quc3BsaXQoIiwiKS5mb3JFYWNoKChmdW5jdGlvbih0KXshZnVuY3Rpb24odCxlKXt2YXIgbj1qdCh0KTsibG9vc2UiPT09eHQoKS5zZWN1cml0eUxldmVsJiZ2b2lkIDAhPT1lJiZ2b2lkIDAhPT1NdFt0XSYmKE10W3RdLmhhdmVDYWxsYmFjaz0hMCxJdC5wdXNoKChmdW5jdGlvbigpe3ZhciByPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ1tpZD0iJy5jb25jYXQobiwnIl0nKSk7bnVsbCE9PXImJnIuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLChmdW5jdGlvbigpe1cucnVuRnVuYyhlLHQpfSksITEpfSkpKX0odCxlKX0pKSx6dCh0LG4pLFl0KHQsImNsaWNrYWJsZSIpfSxzZXRMaW5rOmZ1bmN0aW9uKHQsZSxuLHIpe3Quc3BsaXQoIiwiKS5mb3JFYWNoKChmdW5jdGlvbih0KXt2b2lkIDAhPT1NdFt0XSYmKE10W3RdLmxpbms9Vy5mb3JtYXRVcmwoZSxBdCksTXRbdF0ubGlua1RhcmdldD1yKX0pKSx6dCh0LG4pLFl0KHQsImNsaWNrYWJsZSIpfSxiaW5kRnVuY3Rpb25zOmZ1bmN0aW9uKHQpe0l0LmZvckVhY2goKGZ1bmN0aW9uKGUpe2UodCl9KSl9LGdldERpcmVjdGlvbjpmdW5jdGlvbigpe3JldHVybiBUdC50cmltKCl9LGdldFZlcnRpY2VzOmZ1bmN0aW9uKCl7cmV0dXJuIE10fSxnZXRFZGdlczpmdW5jdGlvbigpe3JldHVybiBPdH0sZ2V0Q2xhc3NlczpmdW5jdGlvbigpe3JldHVybiBEdH0sY2xlYXI6ZnVuY3Rpb24odCl7TXQ9e30sRHQ9e30sT3Q9W10sKEl0PVtdKS5wdXNoKFV0KSxOdD1bXSxCdD17fSxGdD0wLEx0PVtdLFB0PSEwLEN0PXR8fCJnZW4tMSJ9LHNldEdlbjpmdW5jdGlvbih0KXtDdD10fHwiZ2VuLTEifSxkZWZhdWx0U3R5bGU6ZnVuY3Rpb24oKXtyZXR1cm4iZmlsbDojZmZhO3N0cm9rZTogI2Y2Njsgc3Ryb2tlLXdpZHRoOiAzcHg7IHN0cm9rZS1kYXNoYXJyYXk6IDUsIDU7ZmlsbDojZmZhO3N0cm9rZTogIzY2NjsifSxhZGRTdWJHcmFwaDpmdW5jdGlvbih0LGUsbil7dmFyIHI9dC50cmltKCksaT1uO3Q9PT1uJiZuLm1hdGNoKC9ccy8pJiYocj12b2lkIDApO3ZhciBhLG8scyxjPVtdO2lmKGE9Yy5jb25jYXQuYXBwbHkoYyxlKSxvPXtib29sZWFuOnt9LG51bWJlcjp7fSxzdHJpbmc6e319LHM9W10sYz1hLmZpbHRlcigoZnVuY3Rpb24odCl7dmFyIGU9RXQodCk7cmV0dXJuIiIhPT10LnRyaW0oKSYmKGUgaW4gbz8hb1tlXS5oYXNPd25Qcm9wZXJ0eSh0KSYmKG9bZV1bdF09ITApOiEocy5pbmRleE9mKHQpPj0wKSYmcy5wdXNoKHQpKX0pKSwiZ2VuLTEiPT09Q3Qpe2Yud2FybigiTE9PS0lORyBVUCIpO2Zvcih2YXIgdT0wO3U8Yy5sZW5ndGg7dSsrKWNbdV09anQoY1t1XSl9cj1yfHwic3ViR3JhcGgiK0Z0LGk9aXx8IiIsaT14LnNhbml0aXplVGV4dChpLEF0KSxGdCs9MTt2YXIgbD17aWQ6cixub2RlczpjLHRpdGxlOmkudHJpbSgpLGNsYXNzZXM6W119O3JldHVybiBsLm5vZGVzLmZvckVhY2goKGZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbih0KXtOdC5mb3JFYWNoKChmdW5jdGlvbihlKXt2YXIgbj1lLm5vZGVzLmluZGV4T2YodCk7bj49MCYmZS5ub2Rlcy5zcGxpY2UobiwxKX0pKX0odCl9KSksTnQucHVzaChsKSxCdFtyXT1sLHJ9LGdldERlcHRoRmlyc3RQb3M6ZnVuY3Rpb24odCl7cmV0dXJuIFZ0W3RdfSxpbmRleE5vZGVzOmZ1bmN0aW9uKCl7V3Q9LTEsTnQubGVuZ3RoPjAmJmZ1bmN0aW9uIHQoZSxuKXt2YXIgcj1OdFtuXS5ub2RlcztpZighKChXdCs9MSk+MmUzKSl7aWYoVnRbV3RdPW4sTnRbbl0uaWQ9PT1lKXJldHVybntyZXN1bHQ6ITAsY291bnQ6MH07Zm9yKHZhciBpPTAsYT0xO2k8ci5sZW5ndGg7KXt2YXIgbz0kdChyW2ldKTtpZihvPj0wKXt2YXIgcz10KGUsbyk7aWYocy5yZXN1bHQpcmV0dXJue3Jlc3VsdDohMCxjb3VudDphK3MuY291bnR9O2ErPXMuY291bnR9aSs9MX1yZXR1cm57cmVzdWx0OiExLGNvdW50OmF9fX0oIm5vbmUiLE50Lmxlbmd0aC0xKX0sZ2V0U3ViR3JhcGhzOmZ1bmN0aW9uKCl7cmV0dXJuIE50fSxkZXN0cnVjdExpbms6ZnVuY3Rpb24odCxlKXt2YXIgbixyPWZ1bmN0aW9uKHQpe3ZhciBlPXQudHJpbSgpLG49ZS5zbGljZSgwLC0xKSxyPSJhcnJvd19vcGVuIjtzd2l0Y2goZS5zbGljZSgtMSkpe2Nhc2UieCI6cj0iYXJyb3dfY3Jvc3MiLCJ4Ij09PWVbMF0mJihyPSJkb3VibGVfIityLG49bi5zbGljZSgxKSk7YnJlYWs7Y2FzZSI+IjpyPSJhcnJvd19wb2ludCIsIjwiPT09ZVswXSYmKHI9ImRvdWJsZV8iK3Isbj1uLnNsaWNlKDEpKTticmVhaztjYXNlIm8iOnI9ImFycm93X2NpcmNsZSIsIm8iPT09ZVswXSYmKHI9ImRvdWJsZV8iK3Isbj1uLnNsaWNlKDEpKX12YXIgaT0ibm9ybWFsIixhPW4ubGVuZ3RoLTE7Ij0iPT09blswXSYmKGk9InRoaWNrIik7dmFyIG89ZnVuY3Rpb24odCxlKXtmb3IodmFyIG49ZS5sZW5ndGgscj0wLGk9MDtpPG47KytpKWVbaV09PT10JiYrK3I7cmV0dXJuIHJ9KCIuIixuKTtyZXR1cm4gbyYmKGk9ImRvdHRlZCIsYT1vKSx7dHlwZTpyLHN0cm9rZTppLGxlbmd0aDphfX0odCk7aWYoZSl7aWYoKG49ZnVuY3Rpb24odCl7dmFyIGU9dC50cmltKCksbj0iYXJyb3dfb3BlbiI7c3dpdGNoKGVbMF0pe2Nhc2UiPCI6bj0iYXJyb3dfcG9pbnQiLGU9ZS5zbGljZSgxKTticmVhaztjYXNlIngiOm49ImFycm93X2Nyb3NzIixlPWUuc2xpY2UoMSk7YnJlYWs7Y2FzZSJvIjpuPSJhcnJvd19jaXJjbGUiLGU9ZS5zbGljZSgxKX12YXIgcj0ibm9ybWFsIjtyZXR1cm4tMSE9PWUuaW5kZXhPZigiPSIpJiYocj0idGhpY2siKSwtMSE9PWUuaW5kZXhPZigiLiIpJiYocj0iZG90dGVkIikse3R5cGU6bixzdHJva2U6cn19KGUpKS5zdHJva2UhPT1yLnN0cm9rZSlyZXR1cm57dHlwZToiSU5WQUxJRCIsc3Ryb2tlOiJJTlZBTElEIn07aWYoImFycm93X29wZW4iPT09bi50eXBlKW4udHlwZT1yLnR5cGU7ZWxzZXtpZihuLnR5cGUhPT1yLnR5cGUpcmV0dXJue3R5cGU6IklOVkFMSUQiLHN0cm9rZToiSU5WQUxJRCJ9O24udHlwZT0iZG91YmxlXyIrbi50eXBlfXJldHVybiJkb3VibGVfYXJyb3ciPT09bi50eXBlJiYobi50eXBlPSJkb3VibGVfYXJyb3dfcG9pbnQiKSxuLmxlbmd0aD1yLmxlbmd0aCxufXJldHVybiByfSxsZXg6e2ZpcnN0R3JhcGg6ZnVuY3Rpb24oKXtyZXR1cm4hIVB0JiYoUHQ9ITEsITApfX19LEd0PW4oMjYpLHF0PW4ubihHdCksWHQ9big2KSxadD1uLm4oWHQpLEp0PW4oNTApLFF0PW4ubihKdCk7ZnVuY3Rpb24gS3QodCxlLG4pe3ZhciByPS45KihlLndpZHRoK2UuaGVpZ2h0KSxpPVt7eDpyLzIseTowfSx7eDpyLHk6LXIvMn0se3g6ci8yLHk6LXJ9LHt4OjAseTotci8yfV0sYT1sZSh0LHIscixpKTtyZXR1cm4gbi5pbnRlcnNlY3Q9ZnVuY3Rpb24odCl7cmV0dXJuIFp0LmEuaW50ZXJzZWN0LnBvbHlnb24obixpLHQpfSxhfWZ1bmN0aW9uIHRlKHQsZSxuKXt2YXIgcj1lLmhlaWdodCxpPXIvNCxhPWUud2lkdGgrMippLG89W3t4OmkseTowfSx7eDphLWkseTowfSx7eDphLHk6LXIvMn0se3g6YS1pLHk6LXJ9LHt4OmkseTotcn0se3g6MCx5Oi1yLzJ9XSxzPWxlKHQsYSxyLG8pO3JldHVybiBuLmludGVyc2VjdD1mdW5jdGlvbih0KXtyZXR1cm4gWnQuYS5pbnRlcnNlY3QucG9seWdvbihuLG8sdCl9LHN9ZnVuY3Rpb24gZWUodCxlLG4pe3ZhciByPWUud2lkdGgsaT1lLmhlaWdodCxhPVt7eDotaS8yLHk6MH0se3g6cix5OjB9LHt4OnIseTotaX0se3g6LWkvMix5Oi1pfSx7eDowLHk6LWkvMn1dLG89bGUodCxyLGksYSk7cmV0dXJuIG4uaW50ZXJzZWN0PWZ1bmN0aW9uKHQpe3JldHVybiBadC5hLmludGVyc2VjdC5wb2x5Z29uKG4sYSx0KX0sb31mdW5jdGlvbiBuZSh0LGUsbil7dmFyIHI9ZS53aWR0aCxpPWUuaGVpZ2h0LGE9W3t4Oi0yKmkvNix5OjB9LHt4OnItaS82LHk6MH0se3g6cisyKmkvNix5Oi1pfSx7eDppLzYseTotaX1dLG89bGUodCxyLGksYSk7cmV0dXJuIG4uaW50ZXJzZWN0PWZ1bmN0aW9uKHQpe3JldHVybiBadC5hLmludGVyc2VjdC5wb2x5Z29uKG4sYSx0KX0sb31mdW5jdGlvbiByZSh0LGUsbil7dmFyIHI9ZS53aWR0aCxpPWUuaGVpZ2h0LGE9W3t4OjIqaS82LHk6MH0se3g6citpLzYseTowfSx7eDpyLTIqaS82LHk6LWl9LHt4Oi1pLzYseTotaX1dLG89bGUodCxyLGksYSk7cmV0dXJuIG4uaW50ZXJzZWN0PWZ1bmN0aW9uKHQpe3JldHVybiBadC5hLmludGVyc2VjdC5wb2x5Z29uKG4sYSx0KX0sb31mdW5jdGlvbiBpZSh0LGUsbil7dmFyIHI9ZS53aWR0aCxpPWUuaGVpZ2h0LGE9W3t4Oi0yKmkvNix5OjB9LHt4OnIrMippLzYseTowfSx7eDpyLWkvNix5Oi1pfSx7eDppLzYseTotaX1dLG89bGUodCxyLGksYSk7cmV0dXJuIG4uaW50ZXJzZWN0PWZ1bmN0aW9uKHQpe3JldHVybiBadC5hLmludGVyc2VjdC5wb2x5Z29uKG4sYSx0KX0sb31mdW5jdGlvbiBhZSh0LGUsbil7dmFyIHI9ZS53aWR0aCxpPWUuaGVpZ2h0LGE9W3t4OmkvNix5OjB9LHt4OnItaS82LHk6MH0se3g6cisyKmkvNix5Oi1pfSx7eDotMippLzYseTotaX1dLG89bGUodCxyLGksYSk7cmV0dXJuIG4uaW50ZXJzZWN0PWZ1bmN0aW9uKHQpe3JldHVybiBadC5hLmludGVyc2VjdC5wb2x5Z29uKG4sYSx0KX0sb31mdW5jdGlvbiBvZSh0LGUsbil7dmFyIHI9ZS53aWR0aCxpPWUuaGVpZ2h0LGE9W3t4OjAseTowfSx7eDpyK2kvMix5OjB9LHt4OnIseTotaS8yfSx7eDpyK2kvMix5Oi1pfSx7eDowLHk6LWl9XSxvPWxlKHQscixpLGEpO3JldHVybiBuLmludGVyc2VjdD1mdW5jdGlvbih0KXtyZXR1cm4gWnQuYS5pbnRlcnNlY3QucG9seWdvbihuLGEsdCl9LG99ZnVuY3Rpb24gc2UodCxlLG4pe3ZhciByPWUuaGVpZ2h0LGk9ZS53aWR0aCtyLzQsYT10Lmluc2VydCgicmVjdCIsIjpmaXJzdC1jaGlsZCIpLmF0dHIoInJ4IixyLzIpLmF0dHIoInJ5IixyLzIpLmF0dHIoIngiLC1pLzIpLmF0dHIoInkiLC1yLzIpLmF0dHIoIndpZHRoIixpKS5hdHRyKCJoZWlnaHQiLHIpO3JldHVybiBuLmludGVyc2VjdD1mdW5jdGlvbih0KXtyZXR1cm4gWnQuYS5pbnRlcnNlY3QucmVjdChuLHQpfSxhfWZ1bmN0aW9uIGNlKHQsZSxuKXt2YXIgcj1lLndpZHRoLGk9ZS5oZWlnaHQsYT1be3g6MCx5OjB9LHt4OnIseTowfSx7eDpyLHk6LWl9LHt4OjAseTotaX0se3g6MCx5OjB9LHt4Oi04LHk6MH0se3g6cis4LHk6MH0se3g6cis4LHk6LWl9LHt4Oi04LHk6LWl9LHt4Oi04LHk6MH1dLG89bGUodCxyLGksYSk7cmV0dXJuIG4uaW50ZXJzZWN0PWZ1bmN0aW9uKHQpe3JldHVybiBadC5hLmludGVyc2VjdC5wb2x5Z29uKG4sYSx0KX0sb31mdW5jdGlvbiB1ZSh0LGUsbil7dmFyIHI9ZS53aWR0aCxpPXIvMixhPWkvKDIuNStyLzUwKSxvPWUuaGVpZ2h0K2Escz0iTSAwLCIrYSsiIGEgIitpKyIsIithKyIgMCwwLDAgIityKyIgMCBhICIraSsiLCIrYSsiIDAsMCwwICIrLXIrIiAwIGwgMCwiK28rIiBhICIraSsiLCIrYSsiIDAsMCwwICIrcisiIDAgbCAwLCIrLW8sYz10LmF0dHIoImxhYmVsLW9mZnNldC15IixhKS5pbnNlcnQoInBhdGgiLCI6Zmlyc3QtY2hpbGQiKS5hdHRyKCJkIixzKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIistci8yKyIsIistKG8vMithKSsiKSIpO3JldHVybiBuLmludGVyc2VjdD1mdW5jdGlvbih0KXt2YXIgZT1adC5hLmludGVyc2VjdC5yZWN0KG4sdCkscj1lLngtbi54O2lmKDAhPWkmJihNYXRoLmFicyhyKTxuLndpZHRoLzJ8fE1hdGguYWJzKHIpPT1uLndpZHRoLzImJk1hdGguYWJzKGUueS1uLnkpPm4uaGVpZ2h0LzItYSkpe3ZhciBvPWEqYSooMS1yKnIvKGkqaSkpOzAhPW8mJihvPU1hdGguc3FydChvKSksbz1hLW8sdC55LW4ueT4wJiYobz0tbyksZS55Kz1vfXJldHVybiBlfSxjfWZ1bmN0aW9uIGxlKHQsZSxuLHIpe3JldHVybiB0Lmluc2VydCgicG9seWdvbiIsIjpmaXJzdC1jaGlsZCIpLmF0dHIoInBvaW50cyIsci5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiB0LngrIiwiK3QueX0pKS5qb2luKCIgIikpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiKy1lLzIrIiwiK24vMisiKSIpfXZhciBoZT17YWRkVG9SZW5kZXI6ZnVuY3Rpb24odCl7dC5zaGFwZXMoKS5xdWVzdGlvbj1LdCx0LnNoYXBlcygpLmhleGFnb249dGUsdC5zaGFwZXMoKS5zdGFkaXVtPXNlLHQuc2hhcGVzKCkuc3Vicm91dGluZT1jZSx0LnNoYXBlcygpLmN5bGluZGVyPXVlLHQuc2hhcGVzKCkucmVjdF9sZWZ0X2ludl9hcnJvdz1lZSx0LnNoYXBlcygpLmxlYW5fcmlnaHQ9bmUsdC5zaGFwZXMoKS5sZWFuX2xlZnQ9cmUsdC5zaGFwZXMoKS50cmFwZXpvaWQ9aWUsdC5zaGFwZXMoKS5pbnZfdHJhcGV6b2lkPWFlLHQuc2hhcGVzKCkucmVjdF9yaWdodF9pbnZfYXJyb3c9b2V9LGFkZFRvUmVuZGVyVjI6ZnVuY3Rpb24odCl7dCh7cXVlc3Rpb246S3R9KSx0KHtoZXhhZ29uOnRlfSksdCh7c3RhZGl1bTpzZX0pLHQoe3N1YnJvdXRpbmU6Y2V9KSx0KHtjeWxpbmRlcjp1ZX0pLHQoe3JlY3RfbGVmdF9pbnZfYXJyb3c6ZWV9KSx0KHtsZWFuX3JpZ2h0Om5lfSksdCh7bGVhbl9sZWZ0OnJlfSksdCh7dHJhcGV6b2lkOmllfSksdCh7aW52X3RyYXBlem9pZDphZX0pLHQoe3JlY3RfcmlnaHRfaW52X2Fycm93Om9lfSl9fSxmZT17fSxkZT1mdW5jdGlvbih0LGUsbil7dmFyIHI9T2JqZWN0KHMuc2VsZWN0KSgnW2lkPSInLmNvbmNhdChuLCciXScpKTtPYmplY3Qua2V5cyh0KS5mb3JFYWNoKChmdW5jdGlvbihuKXt2YXIgaT10W25dLGE9ImRlZmF1bHQiO2kuY2xhc3Nlcy5sZW5ndGg+MCYmKGE9aS5jbGFzc2VzLmpvaW4oIiAiKSk7dmFyIG8scz1OKGkuc3R5bGVzKSxjPXZvaWQgMCE9PWkudGV4dD9pLnRleHQ6aS5pZDtpZih4dCgpLmZsb3djaGFydC5odG1sTGFiZWxzKXt2YXIgdT17bGFiZWw6Yy5yZXBsYWNlKC9mYVtscnNiXT86ZmEtW1x3LV0rL2csKGZ1bmN0aW9uKHQpe3JldHVybiI8aSBjbGFzcz0nIi5jb25jYXQodC5yZXBsYWNlKCI6IiwiICIpLCInPjwvaT4iKX0pKX07KG89UXQoKShyLHUpLm5vZGUoKSkucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChvKX1lbHNle3ZhciBsPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJ0ZXh0Iik7bC5zZXRBdHRyaWJ1dGUoInN0eWxlIixzLmxhYmVsU3R5bGUucmVwbGFjZSgiY29sb3I6IiwiZmlsbDoiKSk7Zm9yKHZhciBoPWMuc3BsaXQoeC5saW5lQnJlYWtSZWdleCksZD0wO2Q8aC5sZW5ndGg7ZCsrKXt2YXIgcD1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwidHNwYW4iKTtwLnNldEF0dHJpYnV0ZU5TKCJodHRwOi8vd3d3LnczLm9yZy9YTUwvMTk5OC9uYW1lc3BhY2UiLCJ4bWw6c3BhY2UiLCJwcmVzZXJ2ZSIpLHAuc2V0QXR0cmlidXRlKCJkeSIsIjFlbSIpLHAuc2V0QXR0cmlidXRlKCJ4IiwiMSIpLHAudGV4dENvbnRlbnQ9aFtkXSxsLmFwcGVuZENoaWxkKHApfW89bH12YXIgZz0wLHk9IiI7c3dpdGNoKGkudHlwZSl7Y2FzZSJyb3VuZCI6Zz01LHk9InJlY3QiO2JyZWFrO2Nhc2Uic3F1YXJlIjp5PSJyZWN0IjticmVhaztjYXNlImRpYW1vbmQiOnk9InF1ZXN0aW9uIjticmVhaztjYXNlImhleGFnb24iOnk9ImhleGFnb24iO2JyZWFrO2Nhc2Uib2RkIjp5PSJyZWN0X2xlZnRfaW52X2Fycm93IjticmVhaztjYXNlImxlYW5fcmlnaHQiOnk9ImxlYW5fcmlnaHQiO2JyZWFrO2Nhc2UibGVhbl9sZWZ0Ijp5PSJsZWFuX2xlZnQiO2JyZWFrO2Nhc2UidHJhcGV6b2lkIjp5PSJ0cmFwZXpvaWQiO2JyZWFrO2Nhc2UiaW52X3RyYXBlem9pZCI6eT0iaW52X3RyYXBlem9pZCI7YnJlYWs7Y2FzZSJvZGRfcmlnaHQiOnk9InJlY3RfbGVmdF9pbnZfYXJyb3ciO2JyZWFrO2Nhc2UiY2lyY2xlIjp5PSJjaXJjbGUiO2JyZWFrO2Nhc2UiZWxsaXBzZSI6eT0iZWxsaXBzZSI7YnJlYWs7Y2FzZSJzdGFkaXVtIjp5PSJzdGFkaXVtIjticmVhaztjYXNlInN1YnJvdXRpbmUiOnk9InN1YnJvdXRpbmUiO2JyZWFrO2Nhc2UiY3lsaW5kZXIiOnk9ImN5bGluZGVyIjticmVhaztjYXNlImdyb3VwIjp5PSJyZWN0IjticmVhaztkZWZhdWx0Onk9InJlY3QifWYud2FybigiQWRkaW5nIG5vZGUiLGkuaWQsaS5kb21JZCksZS5zZXROb2RlKEh0Lmxvb2tVcERvbUlkKGkuaWQpLHtsYWJlbFR5cGU6InN2ZyIsbGFiZWxTdHlsZTpzLmxhYmVsU3R5bGUsc2hhcGU6eSxsYWJlbDpvLHJ4Omcscnk6ZyxjbGFzczphLHN0eWxlOnMuc3R5bGUsaWQ6SHQubG9va1VwRG9tSWQoaS5pZCl9KX0pKX0scGU9ZnVuY3Rpb24odCxlKXt2YXIgbixyLGk9MDtpZih2b2lkIDAhPT10LmRlZmF1bHRTdHlsZSl7dmFyIGE9Tih0LmRlZmF1bHRTdHlsZSk7bj1hLnN0eWxlLHI9YS5sYWJlbFN0eWxlfXQuZm9yRWFjaCgoZnVuY3Rpb24oYSl7aSsrO3ZhciBvPSJMLSIrYS5zdGFydCsiLSIrYS5lbmQsYz0iTFMtIithLnN0YXJ0LHU9IkxFLSIrYS5lbmQsbD17fTsiYXJyb3dfb3BlbiI9PT1hLnR5cGU/bC5hcnJvd2hlYWQ9Im5vbmUiOmwuYXJyb3doZWFkPSJub3JtYWwiO3ZhciBoPSIiLGY9IiI7aWYodm9pZCAwIT09YS5zdHlsZSl7dmFyIGQ9TihhLnN0eWxlKTtoPWQuc3R5bGUsZj1kLmxhYmVsU3R5bGV9ZWxzZSBzd2l0Y2goYS5zdHJva2Upe2Nhc2Uibm9ybWFsIjpoPSJmaWxsOm5vbmUiLHZvaWQgMCE9PW4mJihoPW4pLHZvaWQgMCE9PXImJihmPXIpO2JyZWFrO2Nhc2UiZG90dGVkIjpoPSJmaWxsOm5vbmU7c3Ryb2tlLXdpZHRoOjJweDtzdHJva2UtZGFzaGFycmF5OjM7IjticmVhaztjYXNlInRoaWNrIjpoPSIgc3Ryb2tlLXdpZHRoOiAzLjVweDtmaWxsOm5vbmUifWwuc3R5bGU9aCxsLmxhYmVsU3R5bGU9Zix2b2lkIDAhPT1hLmludGVycG9sYXRlP2wuY3VydmU9TyhhLmludGVycG9sYXRlLHMuY3VydmVMaW5lYXIpOnZvaWQgMCE9PXQuZGVmYXVsdEludGVycG9sYXRlP2wuY3VydmU9Tyh0LmRlZmF1bHRJbnRlcnBvbGF0ZSxzLmN1cnZlTGluZWFyKTpsLmN1cnZlPU8oZmUuY3VydmUscy5jdXJ2ZUxpbmVhciksdm9pZCAwPT09YS50ZXh0P3ZvaWQgMCE9PWEuc3R5bGUmJihsLmFycm93aGVhZFN0eWxlPSJmaWxsOiAjMzMzIik6KGwuYXJyb3doZWFkU3R5bGU9ImZpbGw6ICMzMzMiLGwubGFiZWxwb3M9ImMiLHh0KCkuZmxvd2NoYXJ0Lmh0bWxMYWJlbHM/KGwubGFiZWxUeXBlPSJodG1sIixsLmxhYmVsPSc8c3BhbiBpZD0iTC0nLmNvbmNhdChvLCciIGNsYXNzPSJlZGdlTGFiZWwgTC0nKS5jb25jYXQoYywiJyBMLSIpLmNvbmNhdCh1LCciPicpLmNvbmNhdChhLnRleHQsIjwvc3Bhbj4iKSk6KGwubGFiZWxUeXBlPSJ0ZXh0IixsLmxhYmVsPWEudGV4dC5yZXBsYWNlKHgubGluZUJyZWFrUmVnZXgsIlxuIiksdm9pZCAwPT09YS5zdHlsZSYmKGwuc3R5bGU9bC5zdHlsZXx8InN0cm9rZTogIzMzMzsgc3Ryb2tlLXdpZHRoOiAxLjVweDtmaWxsOm5vbmUiKSxsLmxhYmVsU3R5bGU9bC5sYWJlbFN0eWxlLnJlcGxhY2UoImNvbG9yOiIsImZpbGw6IikpKSxsLmlkPW8sbC5jbGFzcz1jKyIgIit1LGwubWlubGVuPWEubGVuZ3RofHwxLGUuc2V0RWRnZShIdC5sb29rVXBEb21JZChhLnN0YXJ0KSxIdC5sb29rVXBEb21JZChhLmVuZCksbCxpKX0pKX0sZ2U9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPU9iamVjdC5rZXlzKHQpLG49MDtuPGUubGVuZ3RoO24rKylmZVtlW25dXT10W2Vbbl1dfSx5ZT1mdW5jdGlvbih0KXtmLmluZm8oIkV4dHJhY3RpbmcgY2xhc3NlcyIpLEh0LmNsZWFyKCk7dHJ5e3ZhciBlPXF0LmEucGFyc2VyO3JldHVybiBlLnl5PUh0LGUucGFyc2UodCksSHQuZ2V0Q2xhc3NlcygpfWNhdGNoKHQpe3JldHVybn19LHZlPWZ1bmN0aW9uKHQsZSl7Zi5pbmZvKCJEcmF3aW5nIGZsb3djaGFydCIpLEh0LmNsZWFyKCksSHQuc2V0R2VuKCJnZW4tMSIpO3ZhciBuPXF0LmEucGFyc2VyO24ueXk9SHQsbi5wYXJzZSh0KTt2YXIgcj1IdC5nZXREaXJlY3Rpb24oKTt2b2lkIDA9PT1yJiYocj0iVEQiKTtmb3IodmFyIGksYT14dCgpLmZsb3djaGFydCxvPWEubm9kZVNwYWNpbmd8fDUwLGM9YS5yYW5rU3BhY2luZ3x8NTAsdT1uZXcgSC5hLkdyYXBoKHttdWx0aWdyYXBoOiEwLGNvbXBvdW5kOiEwfSkuc2V0R3JhcGgoe3JhbmtkaXI6cixub2Rlc2VwOm8scmFua3NlcDpjLG1hcmdpbng6OCxtYXJnaW55Ojh9KS5zZXREZWZhdWx0RWRnZUxhYmVsKChmdW5jdGlvbigpe3JldHVybnt9fSkpLGw9SHQuZ2V0U3ViR3JhcGhzKCksaD1sLmxlbmd0aC0xO2g+PTA7aC0tKWk9bFtoXSxIdC5hZGRWZXJ0ZXgoaS5pZCxpLnRpdGxlLCJncm91cCIsdm9pZCAwLGkuY2xhc3Nlcyk7dmFyIGQ9SHQuZ2V0VmVydGljZXMoKTtmLndhcm4oIkdldCB2ZXJ0aWNlcyIsZCk7dmFyIHA9SHQuZ2V0RWRnZXMoKSxnPTA7Zm9yKGc9bC5sZW5ndGgtMTtnPj0wO2ctLSl7aT1sW2ddLE9iamVjdChzLnNlbGVjdEFsbCkoImNsdXN0ZXIiKS5hcHBlbmQoInRleHQiKTtmb3IodmFyIHk9MDt5PGkubm9kZXMubGVuZ3RoO3krKylmLndhcm4oIlNldHRpbmcgc3ViZ3JhcGgiLGkubm9kZXNbeV0sSHQubG9va1VwRG9tSWQoaS5ub2Rlc1t5XSksSHQubG9va1VwRG9tSWQoaS5pZCkpLHUuc2V0UGFyZW50KEh0Lmxvb2tVcERvbUlkKGkubm9kZXNbeV0pLEh0Lmxvb2tVcERvbUlkKGkuaWQpKX1kZShkLHUsZSkscGUocCx1KTt2YXIgdj1uZXcoMCxadC5hLnJlbmRlcik7aGUuYWRkVG9SZW5kZXIodiksdi5hcnJvd3MoKS5ub25lPWZ1bmN0aW9uKHQsZSxuLHIpe3ZhciBpPXQuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIsZSkuYXR0cigidmlld0JveCIsIjAgMCAxMCAxMCIpLmF0dHIoInJlZlgiLDkpLmF0dHIoInJlZlkiLDUpLmF0dHIoIm1hcmtlclVuaXRzIiwic3Ryb2tlV2lkdGgiKS5hdHRyKCJtYXJrZXJXaWR0aCIsOCkuYXR0cigibWFya2VySGVpZ2h0Iiw2KS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsIk0gMCAwIEwgMCAwIEwgMCAwIHoiKTtadC5hLnV0aWwuYXBwbHlTdHlsZShpLG5bcisiU3R5bGUiXSl9LHYuYXJyb3dzKCkubm9ybWFsPWZ1bmN0aW9uKHQsZSl7dC5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIixlKS5hdHRyKCJ2aWV3Qm94IiwiMCAwIDEwIDEwIikuYXR0cigicmVmWCIsOSkuYXR0cigicmVmWSIsNSkuYXR0cigibWFya2VyVW5pdHMiLCJzdHJva2VXaWR0aCIpLmF0dHIoIm1hcmtlcldpZHRoIiw4KS5hdHRyKCJtYXJrZXJIZWlnaHQiLDYpLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIiwiTSAwIDAgTCAxMCA1IEwgMCAxMCB6IikuYXR0cigiY2xhc3MiLCJhcnJvd2hlYWRQYXRoIikuc3R5bGUoInN0cm9rZS13aWR0aCIsMSkuc3R5bGUoInN0cm9rZS1kYXNoYXJyYXkiLCIxLDAiKX07dmFyIG09T2JqZWN0KHMuc2VsZWN0KSgnW2lkPSInLmNvbmNhdChlLCciXScpKTttLmF0dHIoInhtbG5zOnhsaW5rIiwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIpLGYud2Fybih1KTt2YXIgYj1PYmplY3Qocy5zZWxlY3QpKCIjIitlKyIgZyIpO3YoYix1KSxiLnNlbGVjdEFsbCgiZy5ub2RlIikuYXR0cigidGl0bGUiLChmdW5jdGlvbigpe3JldHVybiBIdC5nZXRUb29sdGlwKHRoaXMuaWQpfSkpO3ZhciB4PWEuZGlhZ3JhbVBhZGRpbmcsXz1tLm5vZGUoKS5nZXRCQm94KCksaz1fLndpZHRoKzIqeCx3PV8uaGVpZ2h0KzIqeDskKG0sdyxrLGEudXNlTWF4V2lkdGgpO3ZhciBFPSIiLmNvbmNhdChfLngteCwiICIpLmNvbmNhdChfLnkteCwiICIpLmNvbmNhdChrLCIgIikuY29uY2F0KHcpO2ZvcihmLmRlYnVnKCJ2aWV3Qm94ICIuY29uY2F0KEUpKSxtLmF0dHIoInZpZXdCb3giLEUpLEh0LmluZGV4Tm9kZXMoInN1YkdyYXBoIitnKSxnPTA7ZzxsLmxlbmd0aDtnKyspaWYoInVuZGVmaW5lZCIhPT0oaT1sW2ddKS50aXRsZSl7dmFyIFQ9ZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgiIyIrZSsnIFtpZD0iJytIdC5sb29rVXBEb21JZChpLmlkKSsnIl0gcmVjdCcpLEM9ZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgiIyIrZSsnIFtpZD0iJytIdC5sb29rVXBEb21JZChpLmlkKSsnIl0nKSxTPVRbMF0ueC5iYXNlVmFsLnZhbHVlLEE9VFswXS55LmJhc2VWYWwudmFsdWUsTT1UWzBdLndpZHRoLmJhc2VWYWwudmFsdWUsTz1PYmplY3Qocy5zZWxlY3QpKENbMF0pLnNlbGVjdCgiLmxhYmVsIik7Ty5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIi5jb25jYXQoUytNLzIsIiwgIikuY29uY2F0KEErMTQsIikiKSksTy5hdHRyKCJpZCIsZSsiVGV4dCIpO2Zvcih2YXIgRD0wO0Q8aS5jbGFzc2VzLmxlbmd0aDtEKyspQ1swXS5jbGFzc0xpc3QuYWRkKGkuY2xhc3Nlc1tEXSl9YS5odG1sTGFiZWxzO2Zvcih2YXIgTj1kb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdbaWQ9IicrZSsnIl0gLmVkZ2VMYWJlbCAubGFiZWwnKSxCPTA7QjxOLmxlbmd0aDtCKyspe3ZhciBMPU5bQl0sRj1MLmdldEJCb3goKSxQPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJyZWN0Iik7UC5zZXRBdHRyaWJ1dGUoInJ4IiwwKSxQLnNldEF0dHJpYnV0ZSgicnkiLDApLFAuc2V0QXR0cmlidXRlKCJ3aWR0aCIsRi53aWR0aCksUC5zZXRBdHRyaWJ1dGUoImhlaWdodCIsRi5oZWlnaHQpLEwuaW5zZXJ0QmVmb3JlKFAsTC5maXJzdENoaWxkKX1PYmplY3Qua2V5cyhkKS5mb3JFYWNoKChmdW5jdGlvbih0KXt2YXIgbj1kW3RdO2lmKG4ubGluayl7dmFyIHI9T2JqZWN0KHMuc2VsZWN0KSgiIyIrZSsnIFtpZD0iJytIdC5sb29rVXBEb21JZCh0KSsnIl0nKTtpZihyKXt2YXIgaT1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwiYSIpO2kuc2V0QXR0cmlidXRlTlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwiY2xhc3MiLG4uY2xhc3Nlcy5qb2luKCIgIikpLGkuc2V0QXR0cmlidXRlTlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwiaHJlZiIsbi5saW5rKSxpLnNldEF0dHJpYnV0ZU5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsInJlbCIsIm5vb3BlbmVyIiksbi5saW5rVGFyZ2V0JiZpLnNldEF0dHJpYnV0ZU5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsInRhcmdldCIsbi5saW5rVGFyZ2V0KTt2YXIgYT1yLmluc2VydCgoZnVuY3Rpb24oKXtyZXR1cm4gaX0pLCI6Zmlyc3QtY2hpbGQiKSxvPXIuc2VsZWN0KCIubGFiZWwtY29udGFpbmVyIik7byYmYS5hcHBlbmQoKGZ1bmN0aW9uKCl7cmV0dXJuIG8ubm9kZSgpfSkpO3ZhciBjPXIuc2VsZWN0KCIubGFiZWwiKTtjJiZhLmFwcGVuZCgoZnVuY3Rpb24oKXtyZXR1cm4gYy5ub2RlKCl9KSl9fX0pKX0sbWU9bigxOCksYmU9bi5uKG1lKSx4ZT17ZXh0ZW5zaW9uOmZ1bmN0aW9uKHQsZSxuKXtmLnRyYWNlKCJNYWtpbmcgbWFya2VycyBmb3IgIixuKSx0LmFwcGVuZCgiZGVmcyIpLmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLGUrIi1leHRlbnNpb25TdGFydCIpLmF0dHIoImNsYXNzIiwibWFya2VyIGV4dGVuc2lvbiAiK2UpLmF0dHIoInJlZlgiLDApLmF0dHIoInJlZlkiLDcpLmF0dHIoIm1hcmtlcldpZHRoIiwxOTApLmF0dHIoIm1hcmtlckhlaWdodCIsMjQwKS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsIk0gMSw3IEwxOCwxMyBWIDEgWiIpLHQuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIsZSsiLWV4dGVuc2lvbkVuZCIpLmF0dHIoImNsYXNzIiwibWFya2VyIGV4dGVuc2lvbiAiK2UpLmF0dHIoInJlZlgiLDE5KS5hdHRyKCJyZWZZIiw3KS5hdHRyKCJtYXJrZXJXaWR0aCIsMjApLmF0dHIoIm1hcmtlckhlaWdodCIsMjgpLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIiwiTSAxLDEgViAxMyBMMTgsNyBaIil9LGNvbXBvc2l0aW9uOmZ1bmN0aW9uKHQsZSl7dC5hcHBlbmQoImRlZnMiKS5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIixlKyItY29tcG9zaXRpb25TdGFydCIpLmF0dHIoImNsYXNzIiwibWFya2VyIGNvbXBvc2l0aW9uICIrZSkuYXR0cigicmVmWCIsMCkuYXR0cigicmVmWSIsNykuYXR0cigibWFya2VyV2lkdGgiLDE5MCkuYXR0cigibWFya2VySGVpZ2h0IiwyNDApLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIiwiTSAxOCw3IEw5LDEzIEwxLDcgTDksMSBaIiksdC5hcHBlbmQoImRlZnMiKS5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIixlKyItY29tcG9zaXRpb25FbmQiKS5hdHRyKCJjbGFzcyIsIm1hcmtlciBjb21wb3NpdGlvbiAiK2UpLmF0dHIoInJlZlgiLDE5KS5hdHRyKCJyZWZZIiw3KS5hdHRyKCJtYXJrZXJXaWR0aCIsMjApLmF0dHIoIm1hcmtlckhlaWdodCIsMjgpLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIiwiTSAxOCw3IEw5LDEzIEwxLDcgTDksMSBaIil9LGFnZ3JlZ2F0aW9uOmZ1bmN0aW9uKHQsZSl7dC5hcHBlbmQoImRlZnMiKS5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIixlKyItYWdncmVnYXRpb25TdGFydCIpLmF0dHIoImNsYXNzIiwibWFya2VyIGFnZ3JlZ2F0aW9uICIrZSkuYXR0cigicmVmWCIsMCkuYXR0cigicmVmWSIsNykuYXR0cigibWFya2VyV2lkdGgiLDE5MCkuYXR0cigibWFya2VySGVpZ2h0IiwyNDApLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIiwiTSAxOCw3IEw5LDEzIEwxLDcgTDksMSBaIiksdC5hcHBlbmQoImRlZnMiKS5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIixlKyItYWdncmVnYXRpb25FbmQiKS5hdHRyKCJjbGFzcyIsIm1hcmtlciBhZ2dyZWdhdGlvbiAiK2UpLmF0dHIoInJlZlgiLDE5KS5hdHRyKCJyZWZZIiw3KS5hdHRyKCJtYXJrZXJXaWR0aCIsMjApLmF0dHIoIm1hcmtlckhlaWdodCIsMjgpLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIiwiTSAxOCw3IEw5LDEzIEwxLDcgTDksMSBaIil9LGRlcGVuZGVuY3k6ZnVuY3Rpb24odCxlKXt0LmFwcGVuZCgiZGVmcyIpLmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLGUrIi1kZXBlbmRlbmN5U3RhcnQiKS5hdHRyKCJjbGFzcyIsIm1hcmtlciBkZXBlbmRlbmN5ICIrZSkuYXR0cigicmVmWCIsMCkuYXR0cigicmVmWSIsNykuYXR0cigibWFya2VyV2lkdGgiLDE5MCkuYXR0cigibWFya2VySGVpZ2h0IiwyNDApLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIiwiTSA1LDcgTDksMTMgTDEsNyBMOSwxIFoiKSx0LmFwcGVuZCgiZGVmcyIpLmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLGUrIi1kZXBlbmRlbmN5RW5kIikuYXR0cigiY2xhc3MiLCJtYXJrZXIgZGVwZW5kZW5jeSAiK2UpLmF0dHIoInJlZlgiLDE5KS5hdHRyKCJyZWZZIiw3KS5hdHRyKCJtYXJrZXJXaWR0aCIsMjApLmF0dHIoIm1hcmtlckhlaWdodCIsMjgpLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIiwiTSAxOCw3IEw5LDEzIEwxNCw3IEw5LDEgWiIpfSxwb2ludDpmdW5jdGlvbih0LGUpe3QuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIsZSsiLXBvaW50RW5kIikuYXR0cigiY2xhc3MiLCJtYXJrZXIgIitlKS5hdHRyKCJ2aWV3Qm94IiwiMCAwIDEwIDEwIikuYXR0cigicmVmWCIsOSkuYXR0cigicmVmWSIsNSkuYXR0cigibWFya2VyVW5pdHMiLCJ1c2VyU3BhY2VPblVzZSIpLmF0dHIoIm1hcmtlcldpZHRoIiwxMikuYXR0cigibWFya2VySGVpZ2h0IiwxMikuYXR0cigib3JpZW50IiwiYXV0byIpLmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLCJNIDAgMCBMIDEwIDUgTCAwIDEwIHoiKS5hdHRyKCJjbGFzcyIsImFycm93TWFya2VyUGF0aCIpLnN0eWxlKCJzdHJva2Utd2lkdGgiLDEpLnN0eWxlKCJzdHJva2UtZGFzaGFycmF5IiwiMSwwIiksdC5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIixlKyItcG9pbnRTdGFydCIpLmF0dHIoImNsYXNzIiwibWFya2VyICIrZSkuYXR0cigidmlld0JveCIsIjAgMCAxMCAxMCIpLmF0dHIoInJlZlgiLDApLmF0dHIoInJlZlkiLDUpLmF0dHIoIm1hcmtlclVuaXRzIiwidXNlclNwYWNlT25Vc2UiKS5hdHRyKCJtYXJrZXJXaWR0aCIsMTIpLmF0dHIoIm1hcmtlckhlaWdodCIsMTIpLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIiwiTSAwIDUgTCAxMCAxMCBMIDEwIDAgeiIpLmF0dHIoImNsYXNzIiwiYXJyb3dNYXJrZXJQYXRoIikuc3R5bGUoInN0cm9rZS13aWR0aCIsMSkuc3R5bGUoInN0cm9rZS1kYXNoYXJyYXkiLCIxLDAiKX0sY2lyY2xlOmZ1bmN0aW9uKHQsZSl7dC5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIixlKyItY2lyY2xlRW5kIikuYXR0cigiY2xhc3MiLCJtYXJrZXIgIitlKS5hdHRyKCJ2aWV3Qm94IiwiMCAwIDEwIDEwIikuYXR0cigicmVmWCIsMTEpLmF0dHIoInJlZlkiLDUpLmF0dHIoIm1hcmtlclVuaXRzIiwidXNlclNwYWNlT25Vc2UiKS5hdHRyKCJtYXJrZXJXaWR0aCIsMTEpLmF0dHIoIm1hcmtlckhlaWdodCIsMTEpLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoImNpcmNsZSIpLmF0dHIoImN4IiwiNSIpLmF0dHIoImN5IiwiNSIpLmF0dHIoInIiLCI1IikuYXR0cigiY2xhc3MiLCJhcnJvd01hcmtlclBhdGgiKS5zdHlsZSgic3Ryb2tlLXdpZHRoIiwxKS5zdHlsZSgic3Ryb2tlLWRhc2hhcnJheSIsIjEsMCIpLHQuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIsZSsiLWNpcmNsZVN0YXJ0IikuYXR0cigiY2xhc3MiLCJtYXJrZXIgIitlKS5hdHRyKCJ2aWV3Qm94IiwiMCAwIDEwIDEwIikuYXR0cigicmVmWCIsLTEpLmF0dHIoInJlZlkiLDUpLmF0dHIoIm1hcmtlclVuaXRzIiwidXNlclNwYWNlT25Vc2UiKS5hdHRyKCJtYXJrZXJXaWR0aCIsMTEpLmF0dHIoIm1hcmtlckhlaWdodCIsMTEpLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoImNpcmNsZSIpLmF0dHIoImN4IiwiNSIpLmF0dHIoImN5IiwiNSIpLmF0dHIoInIiLCI1IikuYXR0cigiY2xhc3MiLCJhcnJvd01hcmtlclBhdGgiKS5zdHlsZSgic3Ryb2tlLXdpZHRoIiwxKS5zdHlsZSgic3Ryb2tlLWRhc2hhcnJheSIsIjEsMCIpfSxjcm9zczpmdW5jdGlvbih0LGUpe3QuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIsZSsiLWNyb3NzRW5kIikuYXR0cigiY2xhc3MiLCJtYXJrZXIgY3Jvc3MgIitlKS5hdHRyKCJ2aWV3Qm94IiwiMCAwIDExIDExIikuYXR0cigicmVmWCIsMTIpLmF0dHIoInJlZlkiLDUuMikuYXR0cigibWFya2VyVW5pdHMiLCJ1c2VyU3BhY2VPblVzZSIpLmF0dHIoIm1hcmtlcldpZHRoIiwxMSkuYXR0cigibWFya2VySGVpZ2h0IiwxMSkuYXR0cigib3JpZW50IiwiYXV0byIpLmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLCJNIDEsMSBsIDksOSBNIDEwLDEgbCAtOSw5IikuYXR0cigiY2xhc3MiLCJhcnJvd01hcmtlclBhdGgiKS5zdHlsZSgic3Ryb2tlLXdpZHRoIiwyKS5zdHlsZSgic3Ryb2tlLWRhc2hhcnJheSIsIjEsMCIpLHQuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIsZSsiLWNyb3NzU3RhcnQiKS5hdHRyKCJjbGFzcyIsIm1hcmtlciBjcm9zcyAiK2UpLmF0dHIoInZpZXdCb3giLCIwIDAgMTEgMTEiKS5hdHRyKCJyZWZYIiwtMSkuYXR0cigicmVmWSIsNS4yKS5hdHRyKCJtYXJrZXJVbml0cyIsInVzZXJTcGFjZU9uVXNlIikuYXR0cigibWFya2VyV2lkdGgiLDExKS5hdHRyKCJtYXJrZXJIZWlnaHQiLDExKS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsIk0gMSwxIGwgOSw5IE0gMTAsMSBsIC05LDkiKS5hdHRyKCJjbGFzcyIsImFycm93TWFya2VyUGF0aCIpLnN0eWxlKCJzdHJva2Utd2lkdGgiLDIpLnN0eWxlKCJzdHJva2UtZGFzaGFycmF5IiwiMSwwIil9LGJhcmI6ZnVuY3Rpb24odCxlKXt0LmFwcGVuZCgiZGVmcyIpLmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLGUrIi1iYXJiRW5kIikuYXR0cigicmVmWCIsMTkpLmF0dHIoInJlZlkiLDcpLmF0dHIoIm1hcmtlcldpZHRoIiwyMCkuYXR0cigibWFya2VySGVpZ2h0IiwxNCkuYXR0cigibWFya2VyVW5pdHMiLCJzdHJva2VXaWR0aCIpLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIiwiTSAxOSw3IEw5LDEzIEwxNCw3IEw5LDEgWiIpfX0sX2U9ZnVuY3Rpb24odCxlLG4scil7ZS5mb3JFYWNoKChmdW5jdGlvbihlKXt4ZVtlXSh0LG4scil9KSl9O3ZhciBrZT1mdW5jdGlvbih0LGUsbixyKXt2YXIgaT10fHwiIjtpZih4dCgpLmZsb3djaGFydC5odG1sTGFiZWxzKXJldHVybiBpPWkucmVwbGFjZSgvXFxufFxuL2csIjxiciAvPiIpLGYuaW5mbygidmVydGV4VGV4dCIraSksZnVuY3Rpb24odCl7dmFyIGUsbixyPU9iamVjdChzLnNlbGVjdCkoZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsImZvcmVpZ25PYmplY3QiKSksaT1yLmFwcGVuZCgieGh0bWw6ZGl2IiksYT10LmxhYmVsLG89dC5pc05vZGU/Im5vZGVMYWJlbCI6ImVkZ2VMYWJlbCI7cmV0dXJuIGkuaHRtbCgnPHNwYW4gY2xhc3M9IicrbysnIj4nK2ErIjwvc3Bhbj4iKSxlPWksKG49dC5sYWJlbFN0eWxlKSYmZS5hdHRyKCJzdHlsZSIsbiksaS5zdHlsZSgiZGlzcGxheSIsImlubGluZS1ibG9jayIpLGkuc3R5bGUoIndoaXRlLXNwYWNlIiwibm93cmFwIiksaS5hdHRyKCJ4bWxucyIsImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiKSxyLm5vZGUoKX0oe2lzTm9kZTpyLGxhYmVsOmkucmVwbGFjZSgvZmFbbHJzYl0/OmZhLVtcdy1dKy9nLChmdW5jdGlvbih0KXtyZXR1cm4iPGkgY2xhc3M9JyIuY29uY2F0KHQucmVwbGFjZSgiOiIsIiAiKSwiJz48L2k+Iil9KSl9KTt2YXIgYT1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwidGV4dCIpO2Euc2V0QXR0cmlidXRlKCJzdHlsZSIsZS5yZXBsYWNlKCJjb2xvcjoiLCJmaWxsOiIpKTt2YXIgbz1bXTtvPSJzdHJpbmciPT10eXBlb2YgaT9pLnNwbGl0KC9cXG58XG58PGJyXHMqXC8/Pi9naSk6QXJyYXkuaXNBcnJheShpKT9pOltdO2Zvcih2YXIgYz0wO2M8by5sZW5ndGg7YysrKXt2YXIgdT1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwidHNwYW4iKTt1LnNldEF0dHJpYnV0ZU5TKCJodHRwOi8vd3d3LnczLm9yZy9YTUwvMTk5OC9uYW1lc3BhY2UiLCJ4bWw6c3BhY2UiLCJwcmVzZXJ2ZSIpLHUuc2V0QXR0cmlidXRlKCJkeSIsIjFlbSIpLHUuc2V0QXR0cmlidXRlKCJ4IiwiMCIpLG4/dS5zZXRBdHRyaWJ1dGUoImNsYXNzIiwidGl0bGUtcm93Iik6dS5zZXRBdHRyaWJ1dGUoImNsYXNzIiwicm93IiksdS50ZXh0Q29udGVudD1vW2NdLnRyaW0oKSxhLmFwcGVuZENoaWxkKHUpfXJldHVybiBhfSx3ZT1mdW5jdGlvbih0LGUsbixyKXt2YXIgaTtpPW58fCJub2RlIGRlZmF1bHQiO3ZhciBhPXQuaW5zZXJ0KCJnIikuYXR0cigiY2xhc3MiLGkpLmF0dHIoImlkIixlLmRvbUlkfHxlLmlkKSxvPWEuaW5zZXJ0KCJnIikuYXR0cigiY2xhc3MiLCJsYWJlbCIpLmF0dHIoInN0eWxlIixlLmxhYmVsU3R5bGUpLGM9by5ub2RlKCkuYXBwZW5kQ2hpbGQoa2UoZS5sYWJlbFRleHQsZS5sYWJlbFN0eWxlLCExLHIpKSx1PWMuZ2V0QkJveCgpO2lmKHh0KCkuZmxvd2NoYXJ0Lmh0bWxMYWJlbHMpe3ZhciBsPWMuY2hpbGRyZW5bMF0saD1PYmplY3Qocy5zZWxlY3QpKGMpO3U9bC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxoLmF0dHIoIndpZHRoIix1LndpZHRoKSxoLmF0dHIoImhlaWdodCIsdS5oZWlnaHQpfXZhciBmPWUucGFkZGluZy8yO3JldHVybiBvLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiKy11LndpZHRoLzIrIiwgIistdS5oZWlnaHQvMisiKSIpLHtzaGFwZVN2ZzphLGJib3g6dSxoYWxmUGFkZGluZzpmLGxhYmVsOm99fSxFZT1mdW5jdGlvbih0LGUpe3ZhciBuPWUubm9kZSgpLmdldEJCb3goKTt0LndpZHRoPW4ud2lkdGgsdC5oZWlnaHQ9bi5oZWlnaHR9O2Z1bmN0aW9uIFRlKHQsZSxuLHIpe3JldHVybiB0Lmluc2VydCgicG9seWdvbiIsIjpmaXJzdC1jaGlsZCIpLmF0dHIoInBvaW50cyIsci5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiB0LngrIiwiK3QueX0pKS5qb2luKCIgIikpLmF0dHIoImNsYXNzIiwibGFiZWwtY29udGFpbmVyIikuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrLWUvMisiLCIrbi8yKyIpIil9dmFyIENlPXt9LFNlPXt9LEFlPXt9LE1lPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGYuZGVidWcoIkluIGlzRGVjZW5kYW50IixlLCIgIix0LCIgPSAiLFNlW2VdLmluZGV4T2YodCk+PTApLFNlW2VdLmluZGV4T2YodCk+PTB9LE9lPWZ1bmN0aW9uIHQoZSxuLHIsaSl7Zi53YXJuKCJDb3B5aW5nIGNoaWxkcmVuIG9mICIsZSwicm9vdCIsaSwiZGF0YSIsbi5ub2RlKGUpLGkpO3ZhciBhPW4uY2hpbGRyZW4oZSl8fFtdO2UhPT1pJiZhLnB1c2goZSksZi53YXJuKCJDb3B5aW5nIChub2RlcykgY2x1c3RlcklkIixlLCJub2RlcyIsYSksYS5mb3JFYWNoKChmdW5jdGlvbihhKXtpZihuLmNoaWxkcmVuKGEpLmxlbmd0aD4wKXQoYSxuLHIsaSk7ZWxzZXt2YXIgbz1uLm5vZGUoYSk7Zi5pbmZvKCJjcCAiLGEsIiB0byAiLGksIiB3aXRoIHBhcmVudCAiLGUpLHIuc2V0Tm9kZShhLG8pLGkhPT1uLnBhcmVudChhKSYmKGYud2FybigiU2V0dGluZyBwYXJlbnQiLGEsbi5wYXJlbnQoYSkpLHIuc2V0UGFyZW50KGEsbi5wYXJlbnQoYSkpKSxlIT09aSYmYSE9PWU/KGYuZGVidWcoIlNldHRpbmcgcGFyZW50IixhLGUpLHIuc2V0UGFyZW50KGEsZSkpOihmLmluZm8oIkluIGNvcHkgIixlLCJyb290IixpLCJkYXRhIixuLm5vZGUoZSksaSksZi5kZWJ1ZygiTm90IFNldHRpbmcgcGFyZW50IGZvciBub2RlPSIsYSwiY2x1c3RlciE9PXJvb3RJZCIsZSE9PWksIm5vZGUhPT1jbHVzdGVySWQiLGEhPT1lKSk7dmFyIHM9bi5lZGdlcyhhKTtmLmRlYnVnKCJDb3B5aW5nIEVkZ2VzIixzKSxzLmZvckVhY2goKGZ1bmN0aW9uKHQpe2YuaW5mbygiRWRnZSIsdCk7dmFyIGE9bi5lZGdlKHQudix0LncsdC5uYW1lKTtmLmluZm8oIkVkZ2UgZGF0YSIsYSxpKTt0cnl7IWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGYuaW5mbygiRGVjZW5kYW50cyBvZiAiLGUsIiBpcyAiLFNlW2VdKSxmLmluZm8oIkVkZ2UgaXMgIix0KSx0LnYhPT1lJiYodC53IT09ZSYmKFNlW2VdPyhmLmluZm8oIkhlcmUgIiksU2VbZV0uaW5kZXhPZih0LnYpPj0wfHwoISFNZSh0LnYsZSl8fCghIU1lKHQudyxlKXx8U2VbZV0uaW5kZXhPZih0LncpPj0wKSkpOihmLmRlYnVnKCJUaWx0LCAiLGUsIixub3QgaW4gZGVjZW5kYW50cyIpLCExKSkpfSh0LGkpP2YuaW5mbygiU2tpcHBpbmcgY29weSBvZiBlZGdlICIsdC52LCItLVx4M2UiLHQudywiIHJvb3RJZDogIixpLCIgY2x1c3RlcklkOiIsZSk6KGYuaW5mbygiQ29weWluZyBhcyAiLHQudix0LncsYSx0Lm5hbWUpLHIuc2V0RWRnZSh0LnYsdC53LGEsdC5uYW1lKSxmLmluZm8oIm5ld0dyYXBoIGVkZ2VzICIsci5lZGdlcygpLHIuZWRnZShyLmVkZ2VzKClbMF0pKSl9Y2F0Y2godCl7Zi5lcnJvcih0KX19KSl9Zi5kZWJ1ZygiUmVtb3Zpbmcgbm9kZSIsYSksbi5yZW1vdmVOb2RlKGEpfSkpfSxEZT1mdW5jdGlvbiB0KGUsbil7Zi50cmFjZSgiU2VhcmNoaW5nIixlKTt2YXIgcj1uLmNoaWxkcmVuKGUpO2lmKGYudHJhY2UoIlNlYXJjaGluZyBjaGlsZHJlbiBvZiBpZCAiLGUsciksci5sZW5ndGg8MSlyZXR1cm4gZi50cmFjZSgiVGhpcyBpcyBhIHZhbGlkIG5vZGUiLGUpLGU7Zm9yKHZhciBpPTA7aTxyLmxlbmd0aDtpKyspe3ZhciBhPXQocltpXSxuKTtpZihhKXJldHVybiBmLnRyYWNlKCJGb3VuZCByZXBsYWNlbWVudCBmb3IiLGUsIiA9PiAiLGEpLGF9fSxOZT1mdW5jdGlvbih0KXtyZXR1cm4gQ2VbdF0mJkNlW3RdLmV4dGVybmFsQ29ubmVjdGlvbnMmJkNlW3RdP0NlW3RdLmlkOnR9LEJlPWZ1bmN0aW9uKHQsZSl7IXR8fGU+MTA/Zi5kZWJ1ZygiT3B0aW5nIG91dCwgbm8gZ3JhcGggIik6KGYuZGVidWcoIk9wdGluZyBpbiwgZ3JhcGggIiksdC5ub2RlcygpLmZvckVhY2goKGZ1bmN0aW9uKGUpe3QuY2hpbGRyZW4oZSkubGVuZ3RoPjAmJihmLndhcm4oIkNsdXN0ZXIgaWRlbnRpZmllZCIsZSwiIFJlcGxhY2VtZW50IGlkIGluIGVkZ2VzOiAiLERlKGUsdCkpLFNlW2VdPWZ1bmN0aW9uIHQoZSxuKXtmb3IodmFyIHI9bi5jaGlsZHJlbihlKSxpPVtdLmNvbmNhdChyKSxhPTA7YTxyLmxlbmd0aDthKyspQWVbclthXV09ZSxpPWkuY29uY2F0KHQoclthXSxuKSk7cmV0dXJuIGl9KGUsdCksQ2VbZV09e2lkOkRlKGUsdCksY2x1c3RlckRhdGE6dC5ub2RlKGUpfSl9KSksdC5ub2RlcygpLmZvckVhY2goKGZ1bmN0aW9uKGUpe3ZhciBuPXQuY2hpbGRyZW4oZSkscj10LmVkZ2VzKCk7bi5sZW5ndGg+MD8oZi5kZWJ1ZygiQ2x1c3RlciBpZGVudGlmaWVkIixlLFNlKSxyLmZvckVhY2goKGZ1bmN0aW9uKHQpe3QudiE9PWUmJnQudyE9PWUmJihNZSh0LnYsZSleTWUodC53LGUpJiYoZi53YXJuKCJFZGdlOiAiLHQsIiBsZWF2ZXMgY2x1c3RlciAiLGUpLGYud2FybigiRGVjZW5kYW50cyBvZiBYWFggIixlLCI6ICIsU2VbZV0pLENlW2VdLmV4dGVybmFsQ29ubmVjdGlvbnM9ITApKX0pKSk6Zi5kZWJ1ZygiTm90IGEgY2x1c3RlciAiLGUsU2UpfSkpLHQuZWRnZXMoKS5mb3JFYWNoKChmdW5jdGlvbihlKXt2YXIgbj10LmVkZ2UoZSk7Zi53YXJuKCJFZGdlICIrZS52KyIgLT4gIitlLncrIjogIitKU09OLnN0cmluZ2lmeShlKSksZi53YXJuKCJFZGdlICIrZS52KyIgLT4gIitlLncrIjogIitKU09OLnN0cmluZ2lmeSh0LmVkZ2UoZSkpKTt2YXIgcj1lLnYsaT1lLnc7Zi53YXJuKCJGaXggWFhYIixDZSwiaWRzOiIsZS52LGUudywiVHJhbnNsYXRlaW5nOiAiLENlW2Uudl0sIiAtLS0gIixDZVtlLnddKSwoQ2VbZS52XXx8Q2VbZS53XSkmJihmLndhcm4oIkZpeGluZyBhbmQgdHJpeGluZyAtIHJlbW92aW5nIFhYWCIsZS52LGUudyxlLm5hbWUpLHI9TmUoZS52KSxpPU5lKGUudyksdC5yZW1vdmVFZGdlKGUudixlLncsZS5uYW1lKSxyIT09ZS52JiYobi5mcm9tQ2x1c3Rlcj1lLnYpLGkhPT1lLncmJihuLnRvQ2x1c3Rlcj1lLncpLGYud2FybigiRml4IFJlcGxhY2luZyB3aXRoIFhYWCIscixpLGUubmFtZSksdC5zZXRFZGdlKHIsaSxuLGUubmFtZSkpfSkpLGYud2FybigiQWRqdXN0ZWQgR3JhcGgiLEguYS5qc29uLndyaXRlKHQpKSxMZSh0LDApLGYudHJhY2UoQ2UpKX0sTGU9ZnVuY3Rpb24gdChlLG4pe2lmKGYud2FybigiZXh0cmFjdG9yIC0gIixuLEguYS5qc29uLndyaXRlKGUpLGUuY2hpbGRyZW4oIkQiKSksbj4xMClmLmVycm9yKCJCYWlsaW5nIG91dCIpO2Vsc2V7Zm9yKHZhciByPWUubm9kZXMoKSxpPSExLGE9MDthPHIubGVuZ3RoO2ErKyl7dmFyIG89clthXSxzPWUuY2hpbGRyZW4obyk7aT1pfHxzLmxlbmd0aD4wfWlmKGkpe2YuZGVidWcoIk5vZGVzID0gIixyLG4pO2Zvcih2YXIgYz0wO2M8ci5sZW5ndGg7YysrKXt2YXIgdT1yW2NdO2lmKGYuZGVidWcoIkV4dHJhY3Rpbmcgbm9kZSIsdSxDZSxDZVt1XSYmIUNlW3VdLmV4dGVybmFsQ29ubmVjdGlvbnMsIWUucGFyZW50KHUpLGUubm9kZSh1KSxlLmNoaWxkcmVuKCJEIiksIiBEZXB0aCAiLG4pLENlW3VdKWlmKCFDZVt1XS5leHRlcm5hbENvbm5lY3Rpb25zJiZlLmNoaWxkcmVuKHUpJiZlLmNoaWxkcmVuKHUpLmxlbmd0aD4wKXtmLndhcm4oIkNsdXN0ZXIgd2l0aG91dCBleHRlcm5hbCBjb25uZWN0aW9ucywgd2l0aG91dCBhIHBhcmVudCBhbmQgd2l0aCBjaGlsZHJlbiIsdSxuKTt2YXIgbD1lLmdyYXBoKCksaD1uZXcgSC5hLkdyYXBoKHttdWx0aWdyYXBoOiEwLGNvbXBvdW5kOiEwfSkuc2V0R3JhcGgoe3JhbmtkaXI6IlRCIj09PWwucmFua2Rpcj8iTFIiOiJUQiIsbm9kZXNlcDo1MCxyYW5rc2VwOjUwLG1hcmdpbng6OCxtYXJnaW55Ojh9KS5zZXREZWZhdWx0RWRnZUxhYmVsKChmdW5jdGlvbigpe3JldHVybnt9fSkpO2Yud2FybigiT2xkIGdyYXBoIGJlZm9yZSBjb3B5IixILmEuanNvbi53cml0ZShlKSksT2UodSxlLGgsdSksZS5zZXROb2RlKHUse2NsdXN0ZXJOb2RlOiEwLGlkOnUsY2x1c3RlckRhdGE6Q2VbdV0uY2x1c3RlckRhdGEsbGFiZWxUZXh0OkNlW3VdLmxhYmVsVGV4dCxncmFwaDpofSksZi53YXJuKCJOZXcgZ3JhcGggYWZ0ZXIgY29weSBub2RlOiAoIix1LCIpIixILmEuanNvbi53cml0ZShoKSksZi5kZWJ1ZygiT2xkIGdyYXBoIGFmdGVyIGNvcHkiLEguYS5qc29uLndyaXRlKGUpKX1lbHNlIGYud2FybigiQ2x1c3RlciAqKiAiLHUsIiAqKm5vdCBtZWV0aW5nIHRoZSBjcml0ZXJpYSAhZXh0ZXJuYWxDb25uZWN0aW9uczoiLCFDZVt1XS5leHRlcm5hbENvbm5lY3Rpb25zLCIgbm8gcGFyZW50OiAiLCFlLnBhcmVudCh1KSwiIGNoaWxkcmVuICIsZS5jaGlsZHJlbih1KSYmZS5jaGlsZHJlbih1KS5sZW5ndGg+MCxlLmNoaWxkcmVuKCJEIiksbiksZi5kZWJ1ZyhDZSk7ZWxzZSBmLmRlYnVnKCJOb3QgYSBjbHVzdGVyIix1LG4pfXI9ZS5ub2RlcygpLGYud2FybigiTmV3IGxpc3Qgb2Ygbm9kZXMiLHIpO2Zvcih2YXIgZD0wO2Q8ci5sZW5ndGg7ZCsrKXt2YXIgcD1yW2RdLGc9ZS5ub2RlKHApO2Yud2FybigiIE5vdyBuZXh0IGxldmVsIixwLGcpLGcuY2x1c3Rlck5vZGUmJnQoZy5ncmFwaCxuKzEpfX1lbHNlIGYuZGVidWcoIkRvbmUsIG5vIG5vZGUgaGFzIGNoaWxkcmVuIixlLm5vZGVzKCkpfX0sRmU9ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uIHQoZSxuKXtpZigwPT09bi5sZW5ndGgpcmV0dXJuW107dmFyIHI9T2JqZWN0LmFzc2lnbihuKTtyZXR1cm4gbi5mb3JFYWNoKChmdW5jdGlvbihuKXt2YXIgaT1lLmNoaWxkcmVuKG4pLGE9dChlLGkpO3I9ci5jb25jYXQoYSl9KSkscn0odCx0LmNoaWxkcmVuKCkpfSxQZT1uKDE3MCk7dmFyIEllPWZ1bmN0aW9uKHQsZSxuLHIpe3ZhciBpPXQueCxhPXQueSxvPWktci54LHM9YS1yLnksYz1NYXRoLnNxcnQoZSplKnMqcytuKm4qbypvKSx1PU1hdGguYWJzKGUqbipvL2MpO3IueDxpJiYodT0tdSk7dmFyIGw9TWF0aC5hYnMoZSpuKnMvYyk7cmV0dXJuIHIueTxhJiYobD0tbCkse3g6aSt1LHk6YStsfX07dmFyIGplPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gSWUodCxlLGUsbil9O2Z1bmN0aW9uIFJlKHQsZSl7cmV0dXJuIHQqZT4wfXZhciBZZT1mdW5jdGlvbih0LGUsbixyKXt2YXIgaSxhLG8scyxjLHUsbCxoLGYsZCxwLGcseTtpZihpPWUueS10Lnksbz10LngtZS54LGM9ZS54KnQueS10LngqZS55LGY9aSpuLngrbypuLnkrYyxkPWkqci54K28qci55K2MsISgwIT09ZiYmMCE9PWQmJlJlKGYsZCl8fChhPXIueS1uLnkscz1uLngtci54LHU9ci54Km4ueS1uLngqci55LGw9YSp0Lngrcyp0LnkrdSxoPWEqZS54K3MqZS55K3UsMCE9PWwmJjAhPT1oJiZSZShsLGgpfHwwPT0ocD1pKnMtYSpvKSkpKXJldHVybiBnPU1hdGguYWJzKHAvMikse3g6KHk9byp1LXMqYyk8MD8oeS1nKS9wOih5K2cpL3AseTooeT1hKmMtaSp1KTwwPyh5LWcpL3A6KHkrZykvcH19LHplPWZ1bmN0aW9uKHQsZSxuKXt2YXIgcj10LngsaT10LnksYT1bXSxvPU51bWJlci5QT1NJVElWRV9JTkZJTklUWSxzPU51bWJlci5QT1NJVElWRV9JTkZJTklUWTsiZnVuY3Rpb24iPT10eXBlb2YgZS5mb3JFYWNoP2UuZm9yRWFjaCgoZnVuY3Rpb24odCl7bz1NYXRoLm1pbihvLHQueCkscz1NYXRoLm1pbihzLHQueSl9KSk6KG89TWF0aC5taW4obyxlLngpLHM9TWF0aC5taW4ocyxlLnkpKTtmb3IodmFyIGM9ci10LndpZHRoLzItbyx1PWktdC5oZWlnaHQvMi1zLGw9MDtsPGUubGVuZ3RoO2wrKyl7dmFyIGg9ZVtsXSxmPWVbbDxlLmxlbmd0aC0xP2wrMTowXSxkPVllKHQsbix7eDpjK2gueCx5OnUraC55fSx7eDpjK2YueCx5OnUrZi55fSk7ZCYmYS5wdXNoKGQpfWlmKCFhLmxlbmd0aClyZXR1cm4gdDthLmxlbmd0aD4xJiZhLnNvcnQoKGZ1bmN0aW9uKHQsZSl7dmFyIHI9dC54LW4ueCxpPXQueS1uLnksYT1NYXRoLnNxcnQocipyK2kqaSksbz1lLngtbi54LHM9ZS55LW4ueSxjPU1hdGguc3FydChvKm8rcypzKTtyZXR1cm4gYTxjPy0xOmE9PT1jPzA6MX0pKTtyZXR1cm4gYVswXX07dmFyIFVlPWZ1bmN0aW9uKHQsZSl7dmFyIG4scixpPXQueCxhPXQueSxvPWUueC1pLHM9ZS55LWEsYz10LndpZHRoLzIsdT10LmhlaWdodC8yO3JldHVybiBNYXRoLmFicyhzKSpjPk1hdGguYWJzKG8pKnU/KHM8MCYmKHU9LXUpLG49MD09PXM/MDp1Km8vcyxyPXUpOihvPDAmJihjPS1jKSxuPWMscj0wPT09bz8wOmMqcy9vKSx7eDppK24seTphK3J9fSwkZT17bm9kZTpuLm4oUGUpLmEsY2lyY2xlOmplLGVsbGlwc2U6SWUscG9seWdvbjp6ZSxyZWN0OlVlfSxXZT1mdW5jdGlvbih0LGUpe3ZhciBuPXdlKHQsZSwibm9kZSAiK2UuY2xhc3NlcywhMCkscj1uLnNoYXBlU3ZnLGk9bi5iYm94LGE9bi5oYWxmUGFkZGluZztmLmluZm8oIkNsYXNzZXMgPSAiLGUuY2xhc3Nlcyk7dmFyIG89ci5pbnNlcnQoInJlY3QiLCI6Zmlyc3QtY2hpbGQiKTtyZXR1cm4gby5hdHRyKCJyeCIsZS5yeCkuYXR0cigicnkiLGUucnkpLmF0dHIoIngiLC1pLndpZHRoLzItYSkuYXR0cigieSIsLWkuaGVpZ2h0LzItYSkuYXR0cigid2lkdGgiLGkud2lkdGgrZS5wYWRkaW5nKS5hdHRyKCJoZWlnaHQiLGkuaGVpZ2h0K2UucGFkZGluZyksRWUoZSxvKSxlLmludGVyc2VjdD1mdW5jdGlvbih0KXtyZXR1cm4gJGUucmVjdChlLHQpfSxyfSxWZT1bXSxIZT17fSxHZT0wLHFlPVtdLFhlPWZ1bmN0aW9uKHQpe3ZhciBlPSIiLG49dDtpZih0LmluZGV4T2YoIn4iKT4wKXt2YXIgcj10LnNwbGl0KCJ+Iik7bj1yWzBdLGU9clsxXX1yZXR1cm57Y2xhc3NOYW1lOm4sdHlwZTplfX0sWmU9ZnVuY3Rpb24odCl7dmFyIGU9WGUodCk7dm9pZCAwPT09SGVbZS5jbGFzc05hbWVdJiYoSGVbZS5jbGFzc05hbWVdPXtpZDplLmNsYXNzTmFtZSx0eXBlOmUudHlwZSxjc3NDbGFzc2VzOltdLG1ldGhvZHM6W10sbWVtYmVyczpbXSxhbm5vdGF0aW9uczpbXSxkb21JZDoiY2xhc3NpZC0iK2UuY2xhc3NOYW1lKyItIitHZX0sR2UrKyl9LEplPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT1PYmplY3Qua2V5cyhIZSksbj0wO248ZS5sZW5ndGg7bisrKWlmKEhlW2Vbbl1dLmlkPT09dClyZXR1cm4gSGVbZVtuXV0uZG9tSWR9LFFlPWZ1bmN0aW9uKHQsZSl7dmFyIG49WGUodCkuY2xhc3NOYW1lLHI9SGVbbl07aWYoInN0cmluZyI9PXR5cGVvZiBlKXt2YXIgaT1lLnRyaW0oKTtpLnN0YXJ0c1dpdGgoIjw8IikmJmkuZW5kc1dpdGgoIj4+Iik/ci5hbm5vdGF0aW9ucy5wdXNoKGkuc3Vic3RyaW5nKDIsaS5sZW5ndGgtMikpOmkuaW5kZXhPZigiKSIpPjA/ci5tZXRob2RzLnB1c2goaSk6aSYmci5tZW1iZXJzLnB1c2goaSl9fSxLZT1mdW5jdGlvbih0LGUpe3Quc3BsaXQoIiwiKS5mb3JFYWNoKChmdW5jdGlvbih0KXt2YXIgbj10O3RbMF0ubWF0Y2goL1xkLykmJihuPSJjbGFzc2lkLSIrbiksdm9pZCAwIT09SGVbbl0mJkhlW25dLmNzc0NsYXNzZXMucHVzaChlKX0pKX0sdG49ZnVuY3Rpb24odCxlLG4pe3ZhciByPXh0KCksaT10LGE9SmUoaSk7Imxvb3NlIj09PXIuc2VjdXJpdHlMZXZlbCYmdm9pZCAwIT09ZSYmdm9pZCAwIT09SGVbaV0mJihuJiYoSGVbaV0udG9vbHRpcD14LnNhbml0aXplVGV4dChuLHIpKSxxZS5wdXNoKChmdW5jdGlvbigpe3ZhciB0PWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ1tpZD0iJy5jb25jYXQoYSwnIl0nKSk7bnVsbCE9PXQmJnQuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLChmdW5jdGlvbigpe1cucnVuRnVuYyhlLGEpfSksITEpfSkpKX0sZW49e0FHR1JFR0FUSU9OOjAsRVhURU5TSU9OOjEsQ09NUE9TSVRJT046MixERVBFTkRFTkNZOjN9LG5uPWZ1bmN0aW9uKHQpe3ZhciBlPU9iamVjdChzLnNlbGVjdCkoIi5tZXJtYWlkVG9vbHRpcCIpO251bGw9PT0oZS5fZ3JvdXBzfHxlKVswXVswXSYmKGU9T2JqZWN0KHMuc2VsZWN0KSgiYm9keSIpLmFwcGVuZCgiZGl2IikuYXR0cigiY2xhc3MiLCJtZXJtYWlkVG9vbHRpcCIpLnN0eWxlKCJvcGFjaXR5IiwwKSksT2JqZWN0KHMuc2VsZWN0KSh0KS5zZWxlY3QoInN2ZyIpLnNlbGVjdEFsbCgiZy5ub2RlIikub24oIm1vdXNlb3ZlciIsKGZ1bmN0aW9uKCl7dmFyIHQ9T2JqZWN0KHMuc2VsZWN0KSh0aGlzKTtpZihudWxsIT09dC5hdHRyKCJ0aXRsZSIpKXt2YXIgbj10aGlzLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO2UudHJhbnNpdGlvbigpLmR1cmF0aW9uKDIwMCkuc3R5bGUoIm9wYWNpdHkiLCIuOSIpLGUuaHRtbCh0LmF0dHIoInRpdGxlIikpLnN0eWxlKCJsZWZ0Iix3aW5kb3cuc2Nyb2xsWCtuLmxlZnQrKG4ucmlnaHQtbi5sZWZ0KS8yKyJweCIpLnN0eWxlKCJ0b3AiLHdpbmRvdy5zY3JvbGxZK24udG9wLTE0K2RvY3VtZW50LmJvZHkuc2Nyb2xsVG9wKyJweCIpLHQuY2xhc3NlZCgiaG92ZXIiLCEwKX19KSkub24oIm1vdXNlb3V0IiwoZnVuY3Rpb24oKXtlLnRyYW5zaXRpb24oKS5kdXJhdGlvbig1MDApLnN0eWxlKCJvcGFjaXR5IiwwKSxPYmplY3Qocy5zZWxlY3QpKHRoaXMpLmNsYXNzZWQoImhvdmVyIiwhMSl9KSl9O3FlLnB1c2gobm4pO3ZhciBybj17cGFyc2VEaXJlY3RpdmU6ZnVuY3Rpb24odCxlLG4pe3pvLnBhcnNlRGlyZWN0aXZlKHRoaXMsdCxlLG4pfSxnZXRDb25maWc6ZnVuY3Rpb24oKXtyZXR1cm4geHQoKS5jbGFzc30sYWRkQ2xhc3M6WmUsYmluZEZ1bmN0aW9uczpmdW5jdGlvbih0KXtxZS5mb3JFYWNoKChmdW5jdGlvbihlKXtlKHQpfSkpfSxjbGVhcjpmdW5jdGlvbigpe1ZlPVtdLEhlPXt9LChxZT1bXSkucHVzaChubil9LGdldENsYXNzOmZ1bmN0aW9uKHQpe3JldHVybiBIZVt0XX0sZ2V0Q2xhc3NlczpmdW5jdGlvbigpe3JldHVybiBIZX0sYWRkQW5ub3RhdGlvbjpmdW5jdGlvbih0LGUpe3ZhciBuPVhlKHQpLmNsYXNzTmFtZTtIZVtuXS5hbm5vdGF0aW9ucy5wdXNoKGUpfSxnZXRSZWxhdGlvbnM6ZnVuY3Rpb24oKXtyZXR1cm4gVmV9LGFkZFJlbGF0aW9uOmZ1bmN0aW9uKHQpe2YuZGVidWcoIkFkZGluZyByZWxhdGlvbjogIitKU09OLnN0cmluZ2lmeSh0KSksWmUodC5pZDEpLFplKHQuaWQyKSx0LmlkMT1YZSh0LmlkMSkuY2xhc3NOYW1lLHQuaWQyPVhlKHQuaWQyKS5jbGFzc05hbWUsVmUucHVzaCh0KX0sYWRkTWVtYmVyOlFlLGFkZE1lbWJlcnM6ZnVuY3Rpb24odCxlKXtBcnJheS5pc0FycmF5KGUpJiYoZS5yZXZlcnNlKCksZS5mb3JFYWNoKChmdW5jdGlvbihlKXtyZXR1cm4gUWUodCxlKX0pKSl9LGNsZWFudXBMYWJlbDpmdW5jdGlvbih0KXtyZXR1cm4iOiI9PT10LnN1YnN0cmluZygwLDEpP3Quc3Vic3RyKDEpLnRyaW0oKTp0LnRyaW0oKX0sbGluZVR5cGU6e0xJTkU6MCxET1RURURfTElORToxfSxyZWxhdGlvblR5cGU6ZW4sc2V0Q2xpY2tFdmVudDpmdW5jdGlvbih0LGUsbil7dC5zcGxpdCgiLCIpLmZvckVhY2goKGZ1bmN0aW9uKHQpe3RuKHQsZSxuKSxIZVt0XS5oYXZlQ2FsbGJhY2s9ITB9KSksS2UodCwiY2xpY2thYmxlIil9LHNldENzc0NsYXNzOktlLHNldExpbms6ZnVuY3Rpb24odCxlLG4pe3ZhciByPXh0KCk7dC5zcGxpdCgiLCIpLmZvckVhY2goKGZ1bmN0aW9uKHQpe3ZhciBpPXQ7dFswXS5tYXRjaCgvXGQvKSYmKGk9ImNsYXNzaWQtIitpKSx2b2lkIDAhPT1IZVtpXSYmKEhlW2ldLmxpbms9Vy5mb3JtYXRVcmwoZSxyKSxuJiYoSGVbaV0udG9vbHRpcD14LnNhbml0aXplVGV4dChuLHIpKSl9KSksS2UodCwiY2xpY2thYmxlIil9LGxvb2tVcERvbUlkOkplfSxhbj0wLG9uPWZ1bmN0aW9uKHQpe3ZhciBlPXQubWF0Y2goLyhcK3wtfH58Iyk/KFx3Kykoflx3K358XFtcXSk/XHMrKFx3KykvKSxuPXQubWF0Y2goL14oWyt8XC18fnwjXSk/KFx3KykgKlwoICooLiopXCkgKihcKnxcJCk/ICooXHcqW358W1xdXSpccypcdyp+PykkLyk7cmV0dXJuIGUmJiFuP3NuKGUpOm4/Y24obik6dW4odCl9LHNuPWZ1bmN0aW9uKHQpe3ZhciBlPSIiO3RyeXtlPSh0WzFdP3RbMV0udHJpbSgpOiIiKSsodFsyXT90WzJdLnRyaW0oKToiIikrKHRbM10/aG4odFszXS50cmltKCkpOiIiKSsiICIrKHRbNF0/dFs0XS50cmltKCk6IiIpfWNhdGNoKG4pe2U9dH1yZXR1cm57ZGlzcGxheVRleHQ6ZSxjc3NTdHlsZToiIn19LGNuPWZ1bmN0aW9uKHQpe3ZhciBlPSIiLG49IiI7dHJ5e3ZhciByPXRbMV0/dFsxXS50cmltKCk6IiIsaT10WzJdP3RbMl0udHJpbSgpOiIiLGE9dFszXT9obih0WzNdLnRyaW0oKSk6IiIsbz10WzRdP3RbNF0udHJpbSgpOiIiO249citpKyIoIithKyIpIisodFs1XT8iIDogIitobih0WzVdKS50cmltKCk6IiIpLGU9Zm4obyl9Y2F0Y2goZSl7bj10fXJldHVybntkaXNwbGF5VGV4dDpuLGNzc1N0eWxlOmV9fSx1bj1mdW5jdGlvbih0KXt2YXIgZT0iIixuPSIiLHI9IiIsaT10LmluZGV4T2YoIigiKSxhPXQuaW5kZXhPZigiKSIpO2lmKGk+MSYmYT5pJiZhPD10Lmxlbmd0aCl7dmFyIG89IiIscz0iIixjPXQuc3Vic3RyaW5nKDAsMSk7Yy5tYXRjaCgvXHcvKT9zPXQuc3Vic3RyaW5nKDAsaSkudHJpbSgpOihjLm1hdGNoKC9cK3wtfH58Iy8pJiYobz1jKSxzPXQuc3Vic3RyaW5nKDEsaSkudHJpbSgpKTt2YXIgdT10LnN1YnN0cmluZyhpKzEsYSksbD10LnN1YnN0cmluZyhhKzEsMSk7bj1mbihsKSxlPW8rcysiKCIraG4odS50cmltKCkpKyIpIixhPCIiLmxlbmd0aCYmIiIhPT0ocj10LnN1YnN0cmluZyhhKzIpLnRyaW0oKSkmJihyPSIgOiAiK2huKHIpKX1lbHNlIGU9aG4odCk7cmV0dXJue2Rpc3BsYXlUZXh0OmUsY3NzU3R5bGU6bn19LGxuPWZ1bmN0aW9uKHQsZSxuLHIpe3ZhciBpPW9uKGUpLGE9dC5hcHBlbmQoInRzcGFuIikuYXR0cigieCIsci5wYWRkaW5nKS50ZXh0KGkuZGlzcGxheVRleHQpOyIiIT09aS5jc3NTdHlsZSYmYS5hdHRyKCJzdHlsZSIsaS5jc3NTdHlsZSksbnx8YS5hdHRyKCJkeSIsci50ZXh0SGVpZ2h0KX0saG49ZnVuY3Rpb24gdChlKXt2YXIgbj1lO3JldHVybi0xIT1lLmluZGV4T2YoIn4iKT90KG49KG49bi5yZXBsYWNlKCJ+IiwiPCIpKS5yZXBsYWNlKCJ+IiwiPiIpKTpufSxmbj1mdW5jdGlvbih0KXtzd2l0Y2godCl7Y2FzZSIqIjpyZXR1cm4iZm9udC1zdHlsZTppdGFsaWM7IjtjYXNlIiQiOnJldHVybiJ0ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lOyI7ZGVmYXVsdDpyZXR1cm4iIn19LGRuPWZ1bmN0aW9uKHQsZSxuKXtmLmluZm8oIlJlbmRlcmluZyBjbGFzcyAiK2UpO3ZhciByLGk9ZS5pZCxhPXtpZDppLGxhYmVsOmUuaWQsd2lkdGg6MCxoZWlnaHQ6MH0sbz10LmFwcGVuZCgiZyIpLmF0dHIoImlkIixKZShpKSkuYXR0cigiY2xhc3MiLCJjbGFzc0dyb3VwIik7cj1lLmxpbms/by5hcHBlbmQoInN2ZzphIikuYXR0cigieGxpbms6aHJlZiIsZS5saW5rKS5hdHRyKCJ0YXJnZXQiLCJfYmxhbmsiKS5hcHBlbmQoInRleHQiKS5hdHRyKCJ5IixuLnRleHRIZWlnaHQrbi5wYWRkaW5nKS5hdHRyKCJ4IiwwKTpvLmFwcGVuZCgidGV4dCIpLmF0dHIoInkiLG4udGV4dEhlaWdodCtuLnBhZGRpbmcpLmF0dHIoIngiLDApO3ZhciBzPSEwO2UuYW5ub3RhdGlvbnMuZm9yRWFjaCgoZnVuY3Rpb24odCl7dmFyIGU9ci5hcHBlbmQoInRzcGFuIikudGV4dCgiwqsiK3QrIsK7Iik7c3x8ZS5hdHRyKCJkeSIsbi50ZXh0SGVpZ2h0KSxzPSExfSkpO3ZhciBjPWUuaWQ7dm9pZCAwIT09ZS50eXBlJiYiIiE9PWUudHlwZSYmKGMrPSI8IitlLnR5cGUrIj4iKTt2YXIgdT1yLmFwcGVuZCgidHNwYW4iKS50ZXh0KGMpLmF0dHIoImNsYXNzIiwidGl0bGUiKTtzfHx1LmF0dHIoImR5IixuLnRleHRIZWlnaHQpO3ZhciBsPXIubm9kZSgpLmdldEJCb3goKS5oZWlnaHQsaD1vLmFwcGVuZCgibGluZSIpLmF0dHIoIngxIiwwKS5hdHRyKCJ5MSIsbi5wYWRkaW5nK2wrbi5kaXZpZGVyTWFyZ2luLzIpLmF0dHIoInkyIixuLnBhZGRpbmcrbCtuLmRpdmlkZXJNYXJnaW4vMiksZD1vLmFwcGVuZCgidGV4dCIpLmF0dHIoIngiLG4ucGFkZGluZykuYXR0cigieSIsbCtuLmRpdmlkZXJNYXJnaW4rbi50ZXh0SGVpZ2h0KS5hdHRyKCJmaWxsIiwid2hpdGUiKS5hdHRyKCJjbGFzcyIsImNsYXNzVGV4dCIpO3M9ITAsZS5tZW1iZXJzLmZvckVhY2goKGZ1bmN0aW9uKHQpe2xuKGQsdCxzLG4pLHM9ITF9KSk7dmFyIHA9ZC5ub2RlKCkuZ2V0QkJveCgpLGc9by5hcHBlbmQoImxpbmUiKS5hdHRyKCJ4MSIsMCkuYXR0cigieTEiLG4ucGFkZGluZytsK24uZGl2aWRlck1hcmdpbitwLmhlaWdodCkuYXR0cigieTIiLG4ucGFkZGluZytsK24uZGl2aWRlck1hcmdpbitwLmhlaWdodCkseT1vLmFwcGVuZCgidGV4dCIpLmF0dHIoIngiLG4ucGFkZGluZykuYXR0cigieSIsbCsyKm4uZGl2aWRlck1hcmdpbitwLmhlaWdodCtuLnRleHRIZWlnaHQpLmF0dHIoImZpbGwiLCJ3aGl0ZSIpLmF0dHIoImNsYXNzIiwiY2xhc3NUZXh0Iik7cz0hMCxlLm1ldGhvZHMuZm9yRWFjaCgoZnVuY3Rpb24odCl7bG4oeSx0LHMsbikscz0hMX0pKTt2YXIgdj1vLm5vZGUoKS5nZXRCQm94KCksbT0iICI7ZS5jc3NDbGFzc2VzLmxlbmd0aD4wJiYobSs9ZS5jc3NDbGFzc2VzLmpvaW4oIiAiKSk7dmFyIGI9by5pbnNlcnQoInJlY3QiLCI6Zmlyc3QtY2hpbGQiKS5hdHRyKCJ4IiwwKS5hdHRyKCJ5IiwwKS5hdHRyKCJ3aWR0aCIsdi53aWR0aCsyKm4ucGFkZGluZykuYXR0cigiaGVpZ2h0Iix2LmhlaWdodCtuLnBhZGRpbmcrLjUqbi5kaXZpZGVyTWFyZ2luKS5hdHRyKCJjbGFzcyIsbSkubm9kZSgpLmdldEJCb3goKS53aWR0aDtyZXR1cm4gci5ub2RlKCkuY2hpbGROb2Rlcy5mb3JFYWNoKChmdW5jdGlvbih0KXt0LnNldEF0dHJpYnV0ZSgieCIsKGItdC5nZXRCQm94KCkud2lkdGgpLzIpfSkpLGUudG9vbHRpcCYmci5pbnNlcnQoInRpdGxlIikudGV4dChlLnRvb2x0aXApLGguYXR0cigieDIiLGIpLGcuYXR0cigieDIiLGIpLGEud2lkdGg9YixhLmhlaWdodD12LmhlaWdodCtuLnBhZGRpbmcrLjUqbi5kaXZpZGVyTWFyZ2luLGF9LHBuPWZ1bmN0aW9uKHQsZSxuLHIpe3ZhciBpPWZ1bmN0aW9uKHQpe3N3aXRjaCh0KXtjYXNlIGVuLkFHR1JFR0FUSU9OOnJldHVybiJhZ2dyZWdhdGlvbiI7Y2FzZSBlbi5FWFRFTlNJT046cmV0dXJuImV4dGVuc2lvbiI7Y2FzZSBlbi5DT01QT1NJVElPTjpyZXR1cm4iY29tcG9zaXRpb24iO2Nhc2UgZW4uREVQRU5ERU5DWTpyZXR1cm4iZGVwZW5kZW5jeSJ9fTtlLnBvaW50cz1lLnBvaW50cy5maWx0ZXIoKGZ1bmN0aW9uKHQpe3JldHVybiFOdW1iZXIuaXNOYU4odC55KX0pKTt2YXIgYSxvLGM9ZS5wb2ludHMsdT1PYmplY3Qocy5saW5lKSgpLngoKGZ1bmN0aW9uKHQpe3JldHVybiB0Lnh9KSkueSgoZnVuY3Rpb24odCl7cmV0dXJuIHQueX0pKS5jdXJ2ZShzLmN1cnZlQmFzaXMpLGw9dC5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIix1KGMpKS5hdHRyKCJpZCIsImVkZ2UiK2FuKS5hdHRyKCJjbGFzcyIsInJlbGF0aW9uIiksaD0iIjtyLmFycm93TWFya2VyQWJzb2x1dGUmJihoPShoPShoPXdpbmRvdy5sb2NhdGlvbi5wcm90b2NvbCsiLy8iK3dpbmRvdy5sb2NhdGlvbi5ob3N0K3dpbmRvdy5sb2NhdGlvbi5wYXRobmFtZSt3aW5kb3cubG9jYXRpb24uc2VhcmNoKS5yZXBsYWNlKC9cKC9nLCJcXCgiKSkucmVwbGFjZSgvXCkvZywiXFwpIikpLDE9PW4ucmVsYXRpb24ubGluZVR5cGUmJmwuYXR0cigiY2xhc3MiLCJyZWxhdGlvbiBkYXNoZWQtbGluZSIpLCJub25lIiE9PW4ucmVsYXRpb24udHlwZTEmJmwuYXR0cigibWFya2VyLXN0YXJ0IiwidXJsKCIraCsiIyIraShuLnJlbGF0aW9uLnR5cGUxKSsiU3RhcnQpIiksIm5vbmUiIT09bi5yZWxhdGlvbi50eXBlMiYmbC5hdHRyKCJtYXJrZXItZW5kIiwidXJsKCIraCsiIyIraShuLnJlbGF0aW9uLnR5cGUyKSsiRW5kKSIpO3ZhciBkLHAsZyx5LHY9ZS5wb2ludHMubGVuZ3RoLG09Vy5jYWxjTGFiZWxQb3NpdGlvbihlLnBvaW50cyk7aWYoYT1tLngsbz1tLnksdiUyIT0wJiZ2PjEpe3ZhciBiPVcuY2FsY0NhcmRpbmFsaXR5UG9zaXRpb24oIm5vbmUiIT09bi5yZWxhdGlvbi50eXBlMSxlLnBvaW50cyxlLnBvaW50c1swXSkseD1XLmNhbGNDYXJkaW5hbGl0eVBvc2l0aW9uKCJub25lIiE9PW4ucmVsYXRpb24udHlwZTIsZS5wb2ludHMsZS5wb2ludHNbdi0xXSk7Zi5kZWJ1ZygiY2FyZGluYWxpdHlfMV9wb2ludCAiK0pTT04uc3RyaW5naWZ5KGIpKSxmLmRlYnVnKCJjYXJkaW5hbGl0eV8yX3BvaW50ICIrSlNPTi5zdHJpbmdpZnkoeCkpLGQ9Yi54LHA9Yi55LGc9eC54LHk9eC55fWlmKHZvaWQgMCE9PW4udGl0bGUpe3ZhciBfPXQuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJjbGFzc0xhYmVsIiksaz1fLmFwcGVuZCgidGV4dCIpLmF0dHIoImNsYXNzIiwibGFiZWwiKS5hdHRyKCJ4IixhKS5hdHRyKCJ5IixvKS5hdHRyKCJmaWxsIiwicmVkIikuYXR0cigidGV4dC1hbmNob3IiLCJtaWRkbGUiKS50ZXh0KG4udGl0bGUpO3dpbmRvdy5sYWJlbD1rO3ZhciB3PWsubm9kZSgpLmdldEJCb3goKTtfLmluc2VydCgicmVjdCIsIjpmaXJzdC1jaGlsZCIpLmF0dHIoImNsYXNzIiwiYm94IikuYXR0cigieCIsdy54LXIucGFkZGluZy8yKS5hdHRyKCJ5Iix3Lnktci5wYWRkaW5nLzIpLmF0dHIoIndpZHRoIix3LndpZHRoK3IucGFkZGluZykuYXR0cigiaGVpZ2h0Iix3LmhlaWdodCtyLnBhZGRpbmcpfShmLmluZm8oIlJlbmRlcmluZyByZWxhdGlvbiAiK0pTT04uc3RyaW5naWZ5KG4pKSx2b2lkIDAhPT1uLnJlbGF0aW9uVGl0bGUxJiYibm9uZSIhPT1uLnJlbGF0aW9uVGl0bGUxKSYmdC5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsImNhcmRpbmFsaXR5IikuYXBwZW5kKCJ0ZXh0IikuYXR0cigiY2xhc3MiLCJ0eXBlMSIpLmF0dHIoIngiLGQpLmF0dHIoInkiLHApLmF0dHIoImZpbGwiLCJibGFjayIpLmF0dHIoImZvbnQtc2l6ZSIsIjYiKS50ZXh0KG4ucmVsYXRpb25UaXRsZTEpO3ZvaWQgMCE9PW4ucmVsYXRpb25UaXRsZTImJiJub25lIiE9PW4ucmVsYXRpb25UaXRsZTImJnQuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJjYXJkaW5hbGl0eSIpLmFwcGVuZCgidGV4dCIpLmF0dHIoImNsYXNzIiwidHlwZTIiKS5hdHRyKCJ4IixnKS5hdHRyKCJ5Iix5KS5hdHRyKCJmaWxsIiwiYmxhY2siKS5hdHRyKCJmb250LXNpemUiLCI2IikudGV4dChuLnJlbGF0aW9uVGl0bGUyKTthbisrfSxnbj1mdW5jdGlvbih0LGUsbil7dmFyIHI9dC5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsIm5vZGUgZGVmYXVsdCIpLmF0dHIoImlkIixlLmRvbUlkfHxlLmlkKSxpPTcwLGE9MTA7IkxSIj09PW4mJihpPTEwLGE9NzApO3ZhciBvPXIuYXBwZW5kKCJyZWN0Iikuc3R5bGUoInN0cm9rZSIsImJsYWNrIikuc3R5bGUoImZpbGwiLCJibGFjayIpLmF0dHIoIngiLC0xKmkvMikuYXR0cigieSIsLTEqYS8yKS5hdHRyKCJ3aWR0aCIsaSkuYXR0cigiaGVpZ2h0IixhKS5hdHRyKCJjbGFzcyIsImZvcmstam9pbiIpO3JldHVybiBFZShlLG8pLGUuaGVpZ2h0PWUuaGVpZ2h0K2UucGFkZGluZy8yLGUud2lkdGg9ZS53aWR0aCtlLnBhZGRpbmcvMixlLmludGVyc2VjdD1mdW5jdGlvbih0KXtyZXR1cm4gJGUucmVjdChlLHQpfSxyfSx5bj17cXVlc3Rpb246ZnVuY3Rpb24odCxlKXt2YXIgbj13ZSh0LGUsdm9pZCAwLCEwKSxyPW4uc2hhcGVTdmcsaT1uLmJib3gsYT1pLndpZHRoK2UucGFkZGluZysoaS5oZWlnaHQrZS5wYWRkaW5nKSxvPVt7eDphLzIseTowfSx7eDphLHk6LWEvMn0se3g6YS8yLHk6LWF9LHt4OjAseTotYS8yfV07Zi5pbmZvKCJRdWVzdGlvbiBtYWluIChDaXJjbGUpIik7dmFyIHM9VGUocixhLGEsbyk7cmV0dXJuIEVlKGUscyksZS5pbnRlcnNlY3Q9ZnVuY3Rpb24odCl7cmV0dXJuIGYud2FybigiSW50ZXJzZWN0IGNhbGxlZCIpLCRlLnBvbHlnb24oZSxvLHQpfSxyfSxyZWN0OmZ1bmN0aW9uKHQsZSl7dmFyIG49d2UodCxlLCJub2RlICIrZS5jbGFzc2VzLCEwKSxyPW4uc2hhcGVTdmcsaT1uLmJib3gsYT1uLmhhbGZQYWRkaW5nO2YudHJhY2UoIkNsYXNzZXMgPSAiLGUuY2xhc3Nlcyk7dmFyIG89ci5pbnNlcnQoInJlY3QiLCI6Zmlyc3QtY2hpbGQiKTtyZXR1cm4gby5hdHRyKCJjbGFzcyIsImJhc2ljIGxhYmVsLWNvbnRhaW5lciIpLmF0dHIoInN0eWxlIixlLnN0eWxlKS5hdHRyKCJyeCIsZS5yeCkuYXR0cigicnkiLGUucnkpLmF0dHIoIngiLC1pLndpZHRoLzItYSkuYXR0cigieSIsLWkuaGVpZ2h0LzItYSkuYXR0cigid2lkdGgiLGkud2lkdGgrZS5wYWRkaW5nKS5hdHRyKCJoZWlnaHQiLGkuaGVpZ2h0K2UucGFkZGluZyksRWUoZSxvKSxlLmludGVyc2VjdD1mdW5jdGlvbih0KXtyZXR1cm4gJGUucmVjdChlLHQpfSxyfSxyZWN0V2l0aFRpdGxlOmZ1bmN0aW9uKHQsZSl7dmFyIG47bj1lLmNsYXNzZXM/Im5vZGUgIitlLmNsYXNzZXM6Im5vZGUgZGVmYXVsdCI7dmFyIHI9dC5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsbikuYXR0cigiaWQiLGUuZG9tSWR8fGUuaWQpLGk9ci5pbnNlcnQoInJlY3QiLCI6Zmlyc3QtY2hpbGQiKSxhPXIuaW5zZXJ0KCJsaW5lIiksbz1yLmluc2VydCgiZyIpLmF0dHIoImNsYXNzIiwibGFiZWwiKSxjPWUubGFiZWxUZXh0LmZsYXQoKTtmLmluZm8oIkxhYmVsIHRleHQiLGNbMF0pO3ZhciB1LGw9by5ub2RlKCkuYXBwZW5kQ2hpbGQoa2UoY1swXSxlLmxhYmVsU3R5bGUsITAsITApKTtpZih4dCgpLmZsb3djaGFydC5odG1sTGFiZWxzKXt2YXIgaD1sLmNoaWxkcmVuWzBdLGQ9T2JqZWN0KHMuc2VsZWN0KShsKTt1PWguZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksZC5hdHRyKCJ3aWR0aCIsdS53aWR0aCksZC5hdHRyKCJoZWlnaHQiLHUuaGVpZ2h0KX1mLmluZm8oIlRleHQgMiIsYyk7dmFyIHA9Yy5zbGljZSgxLGMubGVuZ3RoKSxnPWwuZ2V0QkJveCgpLHk9by5ub2RlKCkuYXBwZW5kQ2hpbGQoa2UocC5qb2luKCI8YnIvPiIpLGUubGFiZWxTdHlsZSwhMCwhMCkpO2lmKHh0KCkuZmxvd2NoYXJ0Lmh0bWxMYWJlbHMpe3ZhciB2PXkuY2hpbGRyZW5bMF0sbT1PYmplY3Qocy5zZWxlY3QpKHkpO3U9di5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxtLmF0dHIoIndpZHRoIix1LndpZHRoKSxtLmF0dHIoImhlaWdodCIsdS5oZWlnaHQpfXZhciBiPWUucGFkZGluZy8yO3JldHVybiBPYmplY3Qocy5zZWxlY3QpKHkpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSggIisodS53aWR0aD5nLndpZHRoPzA6KGcud2lkdGgtdS53aWR0aCkvMikrIiwgIisoZy5oZWlnaHQrYis1KSsiKSIpLE9iamVjdChzLnNlbGVjdCkobCkuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCAiKyh1LndpZHRoPGcud2lkdGg/MDotKGcud2lkdGgtdS53aWR0aCkvMikrIiwgMCkiKSx1PW8ubm9kZSgpLmdldEJCb3goKSxvLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiKy11LndpZHRoLzIrIiwgIisoLXUuaGVpZ2h0LzItYiszKSsiKSIpLGkuYXR0cigiY2xhc3MiLCJvdXRlciB0aXRsZS1zdGF0ZSIpLmF0dHIoIngiLC11LndpZHRoLzItYikuYXR0cigieSIsLXUuaGVpZ2h0LzItYikuYXR0cigid2lkdGgiLHUud2lkdGgrZS5wYWRkaW5nKS5hdHRyKCJoZWlnaHQiLHUuaGVpZ2h0K2UucGFkZGluZyksYS5hdHRyKCJjbGFzcyIsImRpdmlkZXIiKS5hdHRyKCJ4MSIsLXUud2lkdGgvMi1iKS5hdHRyKCJ4MiIsdS53aWR0aC8yK2IpLmF0dHIoInkxIiwtdS5oZWlnaHQvMi1iK2cuaGVpZ2h0K2IpLmF0dHIoInkyIiwtdS5oZWlnaHQvMi1iK2cuaGVpZ2h0K2IpLEVlKGUsaSksZS5pbnRlcnNlY3Q9ZnVuY3Rpb24odCl7cmV0dXJuICRlLnJlY3QoZSx0KX0scn0sY2lyY2xlOmZ1bmN0aW9uKHQsZSl7dmFyIG49d2UodCxlLHZvaWQgMCwhMCkscj1uLnNoYXBlU3ZnLGk9bi5iYm94LGE9bi5oYWxmUGFkZGluZyxvPXIuaW5zZXJ0KCJjaXJjbGUiLCI6Zmlyc3QtY2hpbGQiKTtyZXR1cm4gby5hdHRyKCJyeCIsZS5yeCkuYXR0cigicnkiLGUucnkpLmF0dHIoInIiLGkud2lkdGgvMithKS5hdHRyKCJ3aWR0aCIsaS53aWR0aCtlLnBhZGRpbmcpLmF0dHIoImhlaWdodCIsaS5oZWlnaHQrZS5wYWRkaW5nKSxmLmluZm8oIkNpcmNsZSBtYWluIiksRWUoZSxvKSxlLmludGVyc2VjdD1mdW5jdGlvbih0KXtyZXR1cm4gZi5pbmZvKCJDaXJjbGUgaW50ZXJzZWN0IixlLGkud2lkdGgvMithLHQpLCRlLmNpcmNsZShlLGkud2lkdGgvMithLHQpfSxyfSxzdGFkaXVtOmZ1bmN0aW9uKHQsZSl7dmFyIG49d2UodCxlLHZvaWQgMCwhMCkscj1uLnNoYXBlU3ZnLGk9bi5iYm94LGE9aS5oZWlnaHQrZS5wYWRkaW5nLG89aS53aWR0aCthLzQrZS5wYWRkaW5nLHM9ci5pbnNlcnQoInJlY3QiLCI6Zmlyc3QtY2hpbGQiKS5hdHRyKCJyeCIsYS8yKS5hdHRyKCJyeSIsYS8yKS5hdHRyKCJ4Iiwtby8yKS5hdHRyKCJ5IiwtYS8yKS5hdHRyKCJ3aWR0aCIsbykuYXR0cigiaGVpZ2h0IixhKTtyZXR1cm4gRWUoZSxzKSxlLmludGVyc2VjdD1mdW5jdGlvbih0KXtyZXR1cm4gJGUucmVjdChlLHQpfSxyfSxoZXhhZ29uOmZ1bmN0aW9uKHQsZSl7dmFyIG49d2UodCxlLHZvaWQgMCwhMCkscj1uLnNoYXBlU3ZnLGk9bi5iYm94LGE9aS5oZWlnaHQrZS5wYWRkaW5nLG89YS80LHM9aS53aWR0aCsyKm8rZS5wYWRkaW5nLGM9VGUocixzLGEsW3t4Om8seTowfSx7eDpzLW8seTowfSx7eDpzLHk6LWEvMn0se3g6cy1vLHk6LWF9LHt4Om8seTotYX0se3g6MCx5Oi1hLzJ9XSk7cmV0dXJuIEVlKGUsYyksZS5pbnRlcnNlY3Q9ZnVuY3Rpb24odCl7cmV0dXJuICRlLnBvbHlnb24oZSx0KX0scn0scmVjdF9sZWZ0X2ludl9hcnJvdzpmdW5jdGlvbih0LGUpe3ZhciBuPXdlKHQsZSx2b2lkIDAsITApLHI9bi5zaGFwZVN2ZyxpPW4uYmJveCxhPWkud2lkdGgrZS5wYWRkaW5nLG89aS5oZWlnaHQrZS5wYWRkaW5nLHM9VGUocixhLG8sW3t4Oi1vLzIseTowfSx7eDphLHk6MH0se3g6YSx5Oi1vfSx7eDotby8yLHk6LW99LHt4OjAseTotby8yfV0pO3JldHVybiBFZShlLHMpLGUuaW50ZXJzZWN0PWZ1bmN0aW9uKHQpe3JldHVybiAkZS5wb2x5Z29uKGUsdCl9LHJ9LGxlYW5fcmlnaHQ6ZnVuY3Rpb24odCxlKXt2YXIgbj13ZSh0LGUsdm9pZCAwLCEwKSxyPW4uc2hhcGVTdmcsaT1uLmJib3gsYT1pLndpZHRoK2UucGFkZGluZyxvPWkuaGVpZ2h0K2UucGFkZGluZyxzPVRlKHIsYSxvLFt7eDotMipvLzYseTowfSx7eDphLW8vNix5OjB9LHt4OmErMipvLzYseTotb30se3g6by82LHk6LW99XSk7cmV0dXJuIEVlKGUscyksZS5pbnRlcnNlY3Q9ZnVuY3Rpb24odCl7cmV0dXJuICRlLnBvbHlnb24oZSx0KX0scn0sbGVhbl9sZWZ0OmZ1bmN0aW9uKHQsZSl7dmFyIG49d2UodCxlLHZvaWQgMCwhMCkscj1uLnNoYXBlU3ZnLGk9bi5iYm94LGE9aS53aWR0aCtlLnBhZGRpbmcsbz1pLmhlaWdodCtlLnBhZGRpbmcscz1UZShyLGEsbyxbe3g6MipvLzYseTowfSx7eDphK28vNix5OjB9LHt4OmEtMipvLzYseTotb30se3g6LW8vNix5Oi1vfV0pO3JldHVybiBFZShlLHMpLGUuaW50ZXJzZWN0PWZ1bmN0aW9uKHQpe3JldHVybiAkZS5wb2x5Z29uKGUsdCl9LHJ9LHRyYXBlem9pZDpmdW5jdGlvbih0LGUpe3ZhciBuPXdlKHQsZSx2b2lkIDAsITApLHI9bi5zaGFwZVN2ZyxpPW4uYmJveCxhPWkud2lkdGgrZS5wYWRkaW5nLG89aS5oZWlnaHQrZS5wYWRkaW5nLHM9VGUocixhLG8sW3t4Oi0yKm8vNix5OjB9LHt4OmErMipvLzYseTowfSx7eDphLW8vNix5Oi1vfSx7eDpvLzYseTotb31dKTtyZXR1cm4gRWUoZSxzKSxlLmludGVyc2VjdD1mdW5jdGlvbih0KXtyZXR1cm4gJGUucG9seWdvbihlLHQpfSxyfSxpbnZfdHJhcGV6b2lkOmZ1bmN0aW9uKHQsZSl7dmFyIG49d2UodCxlLHZvaWQgMCwhMCkscj1uLnNoYXBlU3ZnLGk9bi5iYm94LGE9aS53aWR0aCtlLnBhZGRpbmcsbz1pLmhlaWdodCtlLnBhZGRpbmcscz1UZShyLGEsbyxbe3g6by82LHk6MH0se3g6YS1vLzYseTowfSx7eDphKzIqby82LHk6LW99LHt4Oi0yKm8vNix5Oi1vfV0pO3JldHVybiBFZShlLHMpLGUuaW50ZXJzZWN0PWZ1bmN0aW9uKHQpe3JldHVybiAkZS5wb2x5Z29uKGUsdCl9LHJ9LHJlY3RfcmlnaHRfaW52X2Fycm93OmZ1bmN0aW9uKHQsZSl7dmFyIG49d2UodCxlLHZvaWQgMCwhMCkscj1uLnNoYXBlU3ZnLGk9bi5iYm94LGE9aS53aWR0aCtlLnBhZGRpbmcsbz1pLmhlaWdodCtlLnBhZGRpbmcscz1UZShyLGEsbyxbe3g6MCx5OjB9LHt4OmErby8yLHk6MH0se3g6YSx5Oi1vLzJ9LHt4OmErby8yLHk6LW99LHt4OjAseTotb31dKTtyZXR1cm4gRWUoZSxzKSxlLmludGVyc2VjdD1mdW5jdGlvbih0KXtyZXR1cm4gJGUucG9seWdvbihlLHQpfSxyfSxjeWxpbmRlcjpmdW5jdGlvbih0LGUpe3ZhciBuPXdlKHQsZSx2b2lkIDAsITApLHI9bi5zaGFwZVN2ZyxpPW4uYmJveCxhPWkud2lkdGgrZS5wYWRkaW5nLG89YS8yLHM9by8oMi41K2EvNTApLGM9aS5oZWlnaHQrcytlLnBhZGRpbmcsdT0iTSAwLCIrcysiIGEgIitvKyIsIitzKyIgMCwwLDAgIithKyIgMCBhICIrbysiLCIrcysiIDAsMCwwICIrLWErIiAwIGwgMCwiK2MrIiBhICIrbysiLCIrcysiIDAsMCwwICIrYSsiIDAgbCAwLCIrLWMsbD1yLmF0dHIoImxhYmVsLW9mZnNldC15IixzKS5pbnNlcnQoInBhdGgiLCI6Zmlyc3QtY2hpbGQiKS5hdHRyKCJkIix1KS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIistYS8yKyIsIistKGMvMitzKSsiKSIpO3JldHVybiBFZShlLGwpLGUuaW50ZXJzZWN0PWZ1bmN0aW9uKHQpe3ZhciBuPSRlLnJlY3QoZSx0KSxyPW4ueC1lLng7aWYoMCE9byYmKE1hdGguYWJzKHIpPGUud2lkdGgvMnx8TWF0aC5hYnMocik9PWUud2lkdGgvMiYmTWF0aC5hYnMobi55LWUueSk+ZS5oZWlnaHQvMi1zKSl7dmFyIGk9cypzKigxLXIqci8obypvKSk7MCE9aSYmKGk9TWF0aC5zcXJ0KGkpKSxpPXMtaSx0LnktZS55PjAmJihpPS1pKSxuLnkrPWl9cmV0dXJuIG59LHJ9LHN0YXJ0OmZ1bmN0aW9uKHQsZSl7dmFyIG49dC5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsIm5vZGUgZGVmYXVsdCIpLmF0dHIoImlkIixlLmRvbUlkfHxlLmlkKSxyPW4uaW5zZXJ0KCJjaXJjbGUiLCI6Zmlyc3QtY2hpbGQiKTtyZXR1cm4gci5hdHRyKCJjbGFzcyIsInN0YXRlLXN0YXJ0IikuYXR0cigiciIsNykuYXR0cigid2lkdGgiLDE0KS5hdHRyKCJoZWlnaHQiLDE0KSxFZShlLHIpLGUuaW50ZXJzZWN0PWZ1bmN0aW9uKHQpe3JldHVybiAkZS5jaXJjbGUoZSw3LHQpfSxufSxlbmQ6ZnVuY3Rpb24odCxlKXt2YXIgbj10Lmluc2VydCgiZyIpLmF0dHIoImNsYXNzIiwibm9kZSBkZWZhdWx0IikuYXR0cigiaWQiLGUuZG9tSWR8fGUuaWQpLHI9bi5pbnNlcnQoImNpcmNsZSIsIjpmaXJzdC1jaGlsZCIpLGk9bi5pbnNlcnQoImNpcmNsZSIsIjpmaXJzdC1jaGlsZCIpO3JldHVybiBpLmF0dHIoImNsYXNzIiwic3RhdGUtc3RhcnQiKS5hdHRyKCJyIiw3KS5hdHRyKCJ3aWR0aCIsMTQpLmF0dHIoImhlaWdodCIsMTQpLHIuYXR0cigiY2xhc3MiLCJzdGF0ZS1lbmQiKS5hdHRyKCJyIiw1KS5hdHRyKCJ3aWR0aCIsMTApLmF0dHIoImhlaWdodCIsMTApLEVlKGUsaSksZS5pbnRlcnNlY3Q9ZnVuY3Rpb24odCl7cmV0dXJuICRlLmNpcmNsZShlLDcsdCl9LG59LG5vdGU6V2Usc3Vicm91dGluZTpmdW5jdGlvbih0LGUpe3ZhciBuPXdlKHQsZSx2b2lkIDAsITApLHI9bi5zaGFwZVN2ZyxpPW4uYmJveCxhPWkud2lkdGgrZS5wYWRkaW5nLG89aS5oZWlnaHQrZS5wYWRkaW5nLHM9VGUocixhLG8sW3t4OjAseTowfSx7eDphLHk6MH0se3g6YSx5Oi1vfSx7eDowLHk6LW99LHt4OjAseTowfSx7eDotOCx5OjB9LHt4OmErOCx5OjB9LHt4OmErOCx5Oi1vfSx7eDotOCx5Oi1vfSx7eDotOCx5OjB9XSk7cmV0dXJuIEVlKGUscyksZS5pbnRlcnNlY3Q9ZnVuY3Rpb24odCl7cmV0dXJuICRlLnBvbHlnb24oZSx0KX0scn0sZm9yazpnbixqb2luOmduLGNsYXNzX2JveDpmdW5jdGlvbih0LGUpe3ZhciBuLHI9ZS5wYWRkaW5nLzI7bj1lLmNsYXNzZXM/Im5vZGUgIitlLmNsYXNzZXM6Im5vZGUgZGVmYXVsdCI7dmFyIGk9dC5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsbikuYXR0cigiaWQiLGUuZG9tSWR8fGUuaWQpLGE9aS5pbnNlcnQoInJlY3QiLCI6Zmlyc3QtY2hpbGQiKSxvPWkuaW5zZXJ0KCJsaW5lIiksYz1pLmluc2VydCgibGluZSIpLHU9MCxsPTQsaD1pLmluc2VydCgiZyIpLmF0dHIoImNsYXNzIiwibGFiZWwiKSxmPTAsZD1lLmNsYXNzRGF0YS5hbm5vdGF0aW9ucyYmZS5jbGFzc0RhdGEuYW5ub3RhdGlvbnNbMF0scD1lLmNsYXNzRGF0YS5hbm5vdGF0aW9uc1swXT8iwqsiK2UuY2xhc3NEYXRhLmFubm90YXRpb25zWzBdKyLCuyI6IiIsZz1oLm5vZGUoKS5hcHBlbmRDaGlsZChrZShwLGUubGFiZWxTdHlsZSwhMCwhMCkpLHk9Zy5nZXRCQm94KCk7aWYoeHQoKS5mbG93Y2hhcnQuaHRtbExhYmVscyl7dmFyIHY9Zy5jaGlsZHJlblswXSxtPU9iamVjdChzLnNlbGVjdCkoZyk7eT12LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLG0uYXR0cigid2lkdGgiLHkud2lkdGgpLG0uYXR0cigiaGVpZ2h0Iix5LmhlaWdodCl9ZS5jbGFzc0RhdGEuYW5ub3RhdGlvbnNbMF0mJihsKz15LmhlaWdodCs0LHUrPXkud2lkdGgpO3ZhciBiPWUuY2xhc3NEYXRhLmlkO3ZvaWQgMCE9PWUuY2xhc3NEYXRhLnR5cGUmJiIiIT09ZS5jbGFzc0RhdGEudHlwZSYmKGIrPSI8IitlLmNsYXNzRGF0YS50eXBlKyI+Iik7dmFyIHg9aC5ub2RlKCkuYXBwZW5kQ2hpbGQoa2UoYixlLmxhYmVsU3R5bGUsITAsITApKTtPYmplY3Qocy5zZWxlY3QpKHgpLmF0dHIoImNsYXNzIiwiY2xhc3NUaXRsZSIpO3ZhciBfPXguZ2V0QkJveCgpO2lmKHh0KCkuZmxvd2NoYXJ0Lmh0bWxMYWJlbHMpe3ZhciBrPXguY2hpbGRyZW5bMF0sdz1PYmplY3Qocy5zZWxlY3QpKHgpO189ay5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSx3LmF0dHIoIndpZHRoIixfLndpZHRoKSx3LmF0dHIoImhlaWdodCIsXy5oZWlnaHQpfWwrPV8uaGVpZ2h0KzQsXy53aWR0aD51JiYodT1fLndpZHRoKTt2YXIgRT1bXTtlLmNsYXNzRGF0YS5tZW1iZXJzLmZvckVhY2goKGZ1bmN0aW9uKHQpe3ZhciBuPW9uKHQpLmRpc3BsYXlUZXh0LHI9aC5ub2RlKCkuYXBwZW5kQ2hpbGQoa2UobixlLmxhYmVsU3R5bGUsITAsITApKSxpPXIuZ2V0QkJveCgpO2lmKHh0KCkuZmxvd2NoYXJ0Lmh0bWxMYWJlbHMpe3ZhciBhPXIuY2hpbGRyZW5bMF0sbz1PYmplY3Qocy5zZWxlY3QpKHIpO2k9YS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxvLmF0dHIoIndpZHRoIixpLndpZHRoKSxvLmF0dHIoImhlaWdodCIsaS5oZWlnaHQpfWkud2lkdGg+dSYmKHU9aS53aWR0aCksbCs9aS5oZWlnaHQrNCxFLnB1c2gocil9KSksbCs9ODt2YXIgVD1bXTtpZihlLmNsYXNzRGF0YS5tZXRob2RzLmZvckVhY2goKGZ1bmN0aW9uKHQpe3ZhciBuPW9uKHQpLmRpc3BsYXlUZXh0LHI9aC5ub2RlKCkuYXBwZW5kQ2hpbGQoa2UobixlLmxhYmVsU3R5bGUsITAsITApKSxpPXIuZ2V0QkJveCgpO2lmKHh0KCkuZmxvd2NoYXJ0Lmh0bWxMYWJlbHMpe3ZhciBhPXIuY2hpbGRyZW5bMF0sbz1PYmplY3Qocy5zZWxlY3QpKHIpO2k9YS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxvLmF0dHIoIndpZHRoIixpLndpZHRoKSxvLmF0dHIoImhlaWdodCIsaS5oZWlnaHQpfWkud2lkdGg+dSYmKHU9aS53aWR0aCksbCs9aS5oZWlnaHQrNCxULnB1c2gocil9KSksbCs9OCxkKXt2YXIgQz0odS15LndpZHRoKS8yO09iamVjdChzLnNlbGVjdCkoZykuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCAiKygtMSp1LzIrQykrIiwgIistMSpsLzIrIikiKSxmPXkuaGVpZ2h0KzR9dmFyIFM9KHUtXy53aWR0aCkvMjtyZXR1cm4gT2JqZWN0KHMuc2VsZWN0KSh4KS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoICIrKC0xKnUvMitTKSsiLCAiKygtMSpsLzIrZikrIikiKSxmKz1fLmhlaWdodCs0LG8uYXR0cigiY2xhc3MiLCJkaXZpZGVyIikuYXR0cigieDEiLC11LzItcikuYXR0cigieDIiLHUvMityKS5hdHRyKCJ5MSIsLWwvMi1yKzgrZikuYXR0cigieTIiLC1sLzItcis4K2YpLGYrPTgsRS5mb3JFYWNoKChmdW5jdGlvbih0KXtPYmplY3Qocy5zZWxlY3QpKHQpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSggIistdS8yKyIsICIrKC0xKmwvMitmKzQpKyIpIiksZis9Xy5oZWlnaHQrNH0pKSxmKz04LGMuYXR0cigiY2xhc3MiLCJkaXZpZGVyIikuYXR0cigieDEiLC11LzItcikuYXR0cigieDIiLHUvMityKS5hdHRyKCJ5MSIsLWwvMi1yKzgrZikuYXR0cigieTIiLC1sLzItcis4K2YpLGYrPTgsVC5mb3JFYWNoKChmdW5jdGlvbih0KXtPYmplY3Qocy5zZWxlY3QpKHQpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSggIistdS8yKyIsICIrKC0xKmwvMitmKSsiKSIpLGYrPV8uaGVpZ2h0KzR9KSksYS5hdHRyKCJjbGFzcyIsIm91dGVyIHRpdGxlLXN0YXRlIikuYXR0cigieCIsLXUvMi1yKS5hdHRyKCJ5IiwtbC8yLXIpLmF0dHIoIndpZHRoIix1K2UucGFkZGluZykuYXR0cigiaGVpZ2h0IixsK2UucGFkZGluZyksRWUoZSxhKSxlLmludGVyc2VjdD1mdW5jdGlvbih0KXtyZXR1cm4gJGUucmVjdChlLHQpfSxpfX0sdm49e30sbW49ZnVuY3Rpb24odCl7dmFyIGU9dm5bdC5pZF07Zi50cmFjZSgiVHJhbnNmb3JtaW5nIG5vZGUiLHQsInRyYW5zbGF0ZSgiKyh0LngtdC53aWR0aC8yLTUpKyIsICIrKHQueS10LmhlaWdodC8yLTUpKyIpIik7dC5jbHVzdGVyTm9kZT9lLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiKyh0LngtdC53aWR0aC8yLTgpKyIsICIrKHQueS10LmhlaWdodC8yLTgpKyIpIik6ZS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIit0LngrIiwgIit0LnkrIikiKX0sYm49e3JlY3Q6ZnVuY3Rpb24odCxlKXtmLnRyYWNlKCJDcmVhdGluZyBzdWJncmFwaCByZWN0IGZvciAiLGUuaWQsZSk7dmFyIG49dC5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsImNsdXN0ZXIiKS5hdHRyKCJpZCIsZS5pZCkscj1uLmluc2VydCgicmVjdCIsIjpmaXJzdC1jaGlsZCIpLGk9bi5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsImNsdXN0ZXItbGFiZWwiKSxhPWkubm9kZSgpLmFwcGVuZENoaWxkKGtlKGUubGFiZWxUZXh0LGUubGFiZWxTdHlsZSx2b2lkIDAsITApKSxvPWEuZ2V0QkJveCgpO2lmKHh0KCkuZmxvd2NoYXJ0Lmh0bWxMYWJlbHMpe3ZhciBjPWEuY2hpbGRyZW5bMF0sdT1PYmplY3Qocy5zZWxlY3QpKGEpO289Yy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSx1LmF0dHIoIndpZHRoIixvLndpZHRoKSx1LmF0dHIoImhlaWdodCIsby5oZWlnaHQpfXZhciBsPTAqZS5wYWRkaW5nLGg9bC8yO2YudHJhY2UoIkRhdGEgIixlLEpTT04uc3RyaW5naWZ5KGUpKSxyLmF0dHIoInJ4IixlLnJ4KS5hdHRyKCJyeSIsZS5yeSkuYXR0cigieCIsZS54LWUud2lkdGgvMi1oKS5hdHRyKCJ5IixlLnktZS5oZWlnaHQvMi1oKS5hdHRyKCJ3aWR0aCIsZS53aWR0aCtsKS5hdHRyKCJoZWlnaHQiLGUuaGVpZ2h0K2wpLGkuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrKGUueC1vLndpZHRoLzIpKyIsICIrKGUueS1lLmhlaWdodC8yLWUucGFkZGluZy8zKzMpKyIpIik7dmFyIGQ9ci5ub2RlKCkuZ2V0QkJveCgpO3JldHVybiBlLndpZHRoPWQud2lkdGgsZS5oZWlnaHQ9ZC5oZWlnaHQsZS5pbnRlcnNlY3Q9ZnVuY3Rpb24odCl7cmV0dXJuIFVlKGUsdCl9LG59LHJvdW5kZWRXaXRoVGl0bGU6ZnVuY3Rpb24odCxlKXt2YXIgbj10Lmluc2VydCgiZyIpLmF0dHIoImNsYXNzIixlLmNsYXNzZXMpLmF0dHIoImlkIixlLmlkKSxyPW4uaW5zZXJ0KCJyZWN0IiwiOmZpcnN0LWNoaWxkIiksaT1uLmluc2VydCgiZyIpLmF0dHIoImNsYXNzIiwiY2x1c3Rlci1sYWJlbCIpLGE9bi5hcHBlbmQoInJlY3QiKSxvPWkubm9kZSgpLmFwcGVuZENoaWxkKGtlKGUubGFiZWxUZXh0LGUubGFiZWxTdHlsZSx2b2lkIDAsITApKSxjPW8uZ2V0QkJveCgpO2lmKHh0KCkuZmxvd2NoYXJ0Lmh0bWxMYWJlbHMpe3ZhciB1PW8uY2hpbGRyZW5bMF0sbD1PYmplY3Qocy5zZWxlY3QpKG8pO2M9dS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxsLmF0dHIoIndpZHRoIixjLndpZHRoKSxsLmF0dHIoImhlaWdodCIsYy5oZWlnaHQpfWM9by5nZXRCQm94KCk7dmFyIGg9MCplLnBhZGRpbmcsZj1oLzI7ci5hdHRyKCJjbGFzcyIsIm91dGVyIikuYXR0cigieCIsZS54LWUud2lkdGgvMi1mKS5hdHRyKCJ5IixlLnktZS5oZWlnaHQvMi1mKS5hdHRyKCJ3aWR0aCIsZS53aWR0aCtoKS5hdHRyKCJoZWlnaHQiLGUuaGVpZ2h0K2gpLGEuYXR0cigiY2xhc3MiLCJpbm5lciIpLmF0dHIoIngiLGUueC1lLndpZHRoLzItZikuYXR0cigieSIsZS55LWUuaGVpZ2h0LzItZitjLmhlaWdodC0xKS5hdHRyKCJ3aWR0aCIsZS53aWR0aCtoKS5hdHRyKCJoZWlnaHQiLGUuaGVpZ2h0K2gtYy5oZWlnaHQtMyksaS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIisoZS54LWMud2lkdGgvMikrIiwgIisoZS55LWUuaGVpZ2h0LzItZS5wYWRkaW5nLzMrKHh0KCkuZmxvd2NoYXJ0Lmh0bWxMYWJlbHM/NTozKSkrIikiKTt2YXIgZD1yLm5vZGUoKS5nZXRCQm94KCk7cmV0dXJuIGUud2lkdGg9ZC53aWR0aCxlLmhlaWdodD1kLmhlaWdodCxlLmludGVyc2VjdD1mdW5jdGlvbih0KXtyZXR1cm4gVWUoZSx0KX0sbn0sbm90ZUdyb3VwOmZ1bmN0aW9uKHQsZSl7dmFyIG49dC5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsIm5vdGUtY2x1c3RlciIpLmF0dHIoImlkIixlLmlkKSxyPW4uaW5zZXJ0KCJyZWN0IiwiOmZpcnN0LWNoaWxkIiksaT0wKmUucGFkZGluZyxhPWkvMjtyLmF0dHIoInJ4IixlLnJ4KS5hdHRyKCJyeSIsZS5yeSkuYXR0cigieCIsZS54LWUud2lkdGgvMi1hKS5hdHRyKCJ5IixlLnktZS5oZWlnaHQvMi1hKS5hdHRyKCJ3aWR0aCIsZS53aWR0aCtpKS5hdHRyKCJoZWlnaHQiLGUuaGVpZ2h0K2kpLmF0dHIoImZpbGwiLCJub25lIik7dmFyIG89ci5ub2RlKCkuZ2V0QkJveCgpO3JldHVybiBlLndpZHRoPW8ud2lkdGgsZS5oZWlnaHQ9by5oZWlnaHQsZS5pbnRlcnNlY3Q9ZnVuY3Rpb24odCl7cmV0dXJuIFVlKGUsdCl9LG59LGRpdmlkZXI6ZnVuY3Rpb24odCxlKXt2YXIgbj10Lmluc2VydCgiZyIpLmF0dHIoImNsYXNzIixlLmNsYXNzZXMpLmF0dHIoImlkIixlLmlkKSxyPW4uaW5zZXJ0KCJyZWN0IiwiOmZpcnN0LWNoaWxkIiksaT0wKmUucGFkZGluZyxhPWkvMjtyLmF0dHIoImNsYXNzIiwiZGl2aWRlciIpLmF0dHIoIngiLGUueC1lLndpZHRoLzItYSkuYXR0cigieSIsZS55LWUuaGVpZ2h0LzIpLmF0dHIoIndpZHRoIixlLndpZHRoK2kpLmF0dHIoImhlaWdodCIsZS5oZWlnaHQraSk7dmFyIG89ci5ub2RlKCkuZ2V0QkJveCgpO3JldHVybiBlLndpZHRoPW8ud2lkdGgsZS5oZWlnaHQ9by5oZWlnaHQsZS5pbnRlcnNlY3Q9ZnVuY3Rpb24odCl7cmV0dXJuIFVlKGUsdCl9LG59fSx4bj17fSxfbj17fSxrbj17fSx3bj1mdW5jdGlvbih0LGUpe3ZhciBuPXQueCxyPXQueSxpPU1hdGguYWJzKGUueC1uKSxhPU1hdGguYWJzKGUueS1yKSxvPXQud2lkdGgvMixzPXQuaGVpZ2h0LzI7cmV0dXJuIGk+PW98fGE+PXN9LEVuPWZ1bmN0aW9uKHQsZSxuKXtmLndhcm4oImludGVyc2VjdGlvbiBjYWxjIG86IixlLCIgaToiLG4sdCk7dmFyIHI9dC54LGk9dC55LGE9TWF0aC5hYnMoci1uLngpLG89dC53aWR0aC8yLHM9bi54PGUueD9vLWE6bythLGM9dC5oZWlnaHQvMix1PXItbyxsPXIrbyxoPWktYyxkPWkrYztpZihlLng9PT11fHxlLng9PT1sfHxlLnk9PT1ofHxlLnk9PT1kKXJldHVybiBmLndhcm4oImNhbGMgZXF1YWxzIG9uIGVkZ2UiKSxlO3ZhciBwPU1hdGguYWJzKGUueS1uLnkpLGc9TWF0aC5hYnMoZS54LW4ueCk7aWYoTWF0aC5hYnMoaS1lLnkpKm8+TWF0aC5hYnMoci1lLngpKmMpe3ZhciB5PW4ueTxlLnk/ZS55LWMtaTppLWMtZS55O3M9Zyp5L3A7dmFyIHY9e3g6bi54PGUueD9uLngrZy1zOm4ueC1zLHk6ZS55K3l9O3JldHVybiBmLndhcm4oInRvcHAvYm90dCBjYWxjLCBRICIuY29uY2F0KHAsIiwgcSAiKS5jb25jYXQoeSwiLCBSICIpLmNvbmNhdChnLCIsIHIgIikuY29uY2F0KHMpLHYpLHZ9dmFyIG09bT1wKihzPW4ueDxlLng/ZS54LW8tcjpyLW8tZS54KS9nO3JldHVybiBmLndhcm4oInNpZGVzIGNhbGMsIFEgIi5jb25jYXQocCwiLCBxICIpLmNvbmNhdChtLCIsIFIgIikuY29uY2F0KGcsIiwgciAiKS5jb25jYXQocykse3g6bi54PGUueD9uLngrZy1zOm4ueCthLW8seTpuLnk8ZS55P24ueSttOm4ueS1tfSkse3g6bi54PGUueD9uLngrZy1zOm4ueCthLW8seTpuLnk8ZS55P24ueSttOm4ueS1tfX0sVG49ZnVuY3Rpb24gdChlLG4scixpKXtmLmluZm8oIkdyYXBoIGluIHJlY3Vyc2l2ZSByZW5kZXI6IFhYWCIsSC5hLmpzb24ud3JpdGUobiksaSk7dmFyIGE9bi5ncmFwaCgpLnJhbmtkaXI7Zi53YXJuKCJEaXIgaW4gcmVjdXJzaXZlIHJlbmRlciAtIGRpcjoiLGEpO3ZhciBvPWUuaW5zZXJ0KCJnIikuYXR0cigiY2xhc3MiLCJyb290Iik7bi5ub2RlcygpP2YuaW5mbygiUmVjdXJzaXZlIHJlbmRlciBYWFgiLG4ubm9kZXMoKSk6Zi5pbmZvKCJObyBub2RlcyBmb3VuZCBmb3IiLG4pLG4uZWRnZXMoKS5sZW5ndGg+MCYmZi5pbmZvKCJSZWN1cnNpdmUgZWRnZXMiLG4uZWRnZShuLmVkZ2VzKClbMF0pKTt2YXIgYz1vLmluc2VydCgiZyIpLmF0dHIoImNsYXNzIiwiY2x1c3RlcnMiKSx1PW8uaW5zZXJ0KCJnIikuYXR0cigiY2xhc3MiLCJlZGdlUGF0aHMiKSxsPW8uaW5zZXJ0KCJnIikuYXR0cigiY2xhc3MiLCJlZGdlTGFiZWxzIiksaD1vLmluc2VydCgiZyIpLmF0dHIoImNsYXNzIiwibm9kZXMiKTtyZXR1cm4gbi5ub2RlcygpLmZvckVhY2goKGZ1bmN0aW9uKGUpe3ZhciBvPW4ubm9kZShlKTtpZih2b2lkIDAhPT1pKXt2YXIgcz1KU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGkuY2x1c3RlckRhdGEpKTtmLmluZm8oIlNldHRpbmcgZGF0YSBmb3IgY2x1c3RlciBYWFggKCIsZSwiKSAiLHMsaSksbi5zZXROb2RlKGkuaWQscyksbi5wYXJlbnQoZSl8fChmLndhcm4oIlNldHRpbmcgcGFyZW50IixlLGkuaWQpLG4uc2V0UGFyZW50KGUsaS5pZCxzKSl9aWYoZi5pbmZvKCIoSW5zZXJ0KSBOb2RlIFhYWCIrZSsiOiAiK0pTT04uc3RyaW5naWZ5KG4ubm9kZShlKSkpLG8mJm8uY2x1c3Rlck5vZGUpe2YuaW5mbygiQ2x1c3RlciBpZGVudGlmaWVkIixlLG8sbi5ub2RlKGUpKTt2YXIgYz10KGgsby5ncmFwaCxyLG4ubm9kZShlKSk7RWUobyxjKSxmdW5jdGlvbih0LGUpe3ZuW2UuaWRdPXR9KGMsbyksZi53YXJuKCJSZWN1cnNpdmUgcmVuZGVyIGNvbXBsZXRlIixjLG8pfWVsc2Ugbi5jaGlsZHJlbihlKS5sZW5ndGg+MD8oZi5pbmZvKCJDbHVzdGVyIC0gdGhlIG5vbiByZWN1cnNpdmUgcGF0aCBYWFgiLGUsby5pZCxvLG4pLGYuaW5mbyhEZShvLmlkLG4pKSxDZVtvLmlkXT17aWQ6RGUoby5pZCxuKSxub2RlOm99KTooZi5pbmZvKCJOb2RlIC0gdGhlIG5vbiByZWN1cnNpdmUgcGF0aCIsZSxvLmlkLG8pLGZ1bmN0aW9uKHQsZSxuKXt2YXIgcixpO2UubGluaz8ocj10Lmluc2VydCgic3ZnOmEiKS5hdHRyKCJ4bGluazpocmVmIixlLmxpbmspLmF0dHIoInRhcmdldCIsZS5saW5rVGFyZ2V0fHwiX2JsYW5rIiksaT15bltlLnNoYXBlXShyLGUsbikpOnI9aT15bltlLnNoYXBlXSh0LGUsbiksZS50b29sdGlwJiZpLmF0dHIoInRpdGxlIixlLnRvb2x0aXApLGUuY2xhc3MmJmkuYXR0cigiY2xhc3MiLCJub2RlIGRlZmF1bHQgIitlLmNsYXNzKSx2bltlLmlkXT1yLGUuaGF2ZUNhbGxiYWNrJiZ2bltlLmlkXS5hdHRyKCJjbGFzcyIsdm5bZS5pZF0uYXR0cigiY2xhc3MiKSsiIGNsaWNrYWJsZSIpfShoLG4ubm9kZShlKSxhKSl9KSksbi5lZGdlcygpLmZvckVhY2goKGZ1bmN0aW9uKHQpe3ZhciBlPW4uZWRnZSh0LnYsdC53LHQubmFtZSk7Zi5pbmZvKCJFZGdlICIrdC52KyIgLT4gIit0LncrIjogIitKU09OLnN0cmluZ2lmeSh0KSksZi5pbmZvKCJFZGdlICIrdC52KyIgLT4gIit0LncrIjogIix0LCIgIixKU09OLnN0cmluZ2lmeShuLmVkZ2UodCkpKSxmLmluZm8oIkZpeCIsQ2UsImlkczoiLHQudix0LncsIlRyYW5zbGF0ZWluZzogIixDZVt0LnZdLENlW3Qud10pLGZ1bmN0aW9uKHQsZSl7dmFyIG49a2UoZS5sYWJlbCxlLmxhYmVsU3R5bGUpLHI9dC5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsImVkZ2VMYWJlbCIpLGk9ci5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsImxhYmVsIik7aS5ub2RlKCkuYXBwZW5kQ2hpbGQobik7dmFyIGE9bi5nZXRCQm94KCk7aWYoeHQoKS5mbG93Y2hhcnQuaHRtbExhYmVscyl7dmFyIG89bi5jaGlsZHJlblswXSxjPU9iamVjdChzLnNlbGVjdCkobik7YT1vLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLGMuYXR0cigid2lkdGgiLGEud2lkdGgpLGMuYXR0cigiaGVpZ2h0IixhLmhlaWdodCl9aWYoaS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIistYS53aWR0aC8yKyIsICIrLWEuaGVpZ2h0LzIrIikiKSxfbltlLmlkXT1yLGUud2lkdGg9YS53aWR0aCxlLmhlaWdodD1hLmhlaWdodCxlLnN0YXJ0TGFiZWxMZWZ0KXt2YXIgdT1rZShlLnN0YXJ0TGFiZWxMZWZ0LGUubGFiZWxTdHlsZSksbD10Lmluc2VydCgiZyIpLmF0dHIoImNsYXNzIiwiZWRnZVRlcm1pbmFscyIpLGg9bC5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsImlubmVyIik7aC5ub2RlKCkuYXBwZW5kQ2hpbGQodSk7dmFyIGY9dS5nZXRCQm94KCk7aC5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIistZi53aWR0aC8yKyIsICIrLWYuaGVpZ2h0LzIrIikiKSxrbltlLmlkXXx8KGtuW2UuaWRdPXt9KSxrbltlLmlkXS5zdGFydExlZnQ9bH1pZihlLnN0YXJ0TGFiZWxSaWdodCl7dmFyIGQ9a2UoZS5zdGFydExhYmVsUmlnaHQsZS5sYWJlbFN0eWxlKSxwPXQuaW5zZXJ0KCJnIikuYXR0cigiY2xhc3MiLCJlZGdlVGVybWluYWxzIiksZz1wLmluc2VydCgiZyIpLmF0dHIoImNsYXNzIiwiaW5uZXIiKTtwLm5vZGUoKS5hcHBlbmRDaGlsZChkKSxnLm5vZGUoKS5hcHBlbmRDaGlsZChkKTt2YXIgeT1kLmdldEJCb3goKTtnLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiKy15LndpZHRoLzIrIiwgIisteS5oZWlnaHQvMisiKSIpLGtuW2UuaWRdfHwoa25bZS5pZF09e30pLGtuW2UuaWRdLnN0YXJ0UmlnaHQ9cH1pZihlLmVuZExhYmVsTGVmdCl7dmFyIHY9a2UoZS5lbmRMYWJlbExlZnQsZS5sYWJlbFN0eWxlKSxtPXQuaW5zZXJ0KCJnIikuYXR0cigiY2xhc3MiLCJlZGdlVGVybWluYWxzIiksYj1tLmluc2VydCgiZyIpLmF0dHIoImNsYXNzIiwiaW5uZXIiKTtiLm5vZGUoKS5hcHBlbmRDaGlsZCh2KTt2YXIgeD12LmdldEJCb3goKTtiLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiKy14LndpZHRoLzIrIiwgIisteC5oZWlnaHQvMisiKSIpLG0ubm9kZSgpLmFwcGVuZENoaWxkKHYpLGtuW2UuaWRdfHwoa25bZS5pZF09e30pLGtuW2UuaWRdLmVuZExlZnQ9bX1pZihlLmVuZExhYmVsUmlnaHQpe3ZhciBfPWtlKGUuZW5kTGFiZWxSaWdodCxlLmxhYmVsU3R5bGUpLGs9dC5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsImVkZ2VUZXJtaW5hbHMiKSx3PWsuaW5zZXJ0KCJnIikuYXR0cigiY2xhc3MiLCJpbm5lciIpO3cubm9kZSgpLmFwcGVuZENoaWxkKF8pO3ZhciBFPV8uZ2V0QkJveCgpO3cuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrLUUud2lkdGgvMisiLCAiKy1FLmhlaWdodC8yKyIpIiksay5ub2RlKCkuYXBwZW5kQ2hpbGQoXyksa25bZS5pZF18fChrbltlLmlkXT17fSksa25bZS5pZF0uZW5kUmlnaHQ9a319KGwsZSl9KSksbi5lZGdlcygpLmZvckVhY2goKGZ1bmN0aW9uKHQpe2YuaW5mbygiRWRnZSAiK3QudisiIC0+ICIrdC53KyI6ICIrSlNPTi5zdHJpbmdpZnkodCkpfSkpLGYuaW5mbygiIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIiksZi5pbmZvKCIjIyMgICAgICAgICAgICAgICAgTGF5b3V0ICAgICAgICAgICAgICAgICAjIyMiKSxmLmluZm8oIiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyIpLGYuaW5mbyhuKSxiZS5hLmxheW91dChuKSxmLmluZm8oIkdyYXBoIGFmdGVyIGxheW91dDoiLEguYS5qc29uLndyaXRlKG4pKSxGZShuKS5mb3JFYWNoKChmdW5jdGlvbih0KXt2YXIgZT1uLm5vZGUodCk7Zi5pbmZvKCJQb3NpdGlvbiAiK3QrIjogIitKU09OLnN0cmluZ2lmeShuLm5vZGUodCkpKSxmLmluZm8oIlBvc2l0aW9uICIrdCsiOiAoIitlLngsIiwiK2UueSwiKSB3aWR0aDogIixlLndpZHRoLCIgaGVpZ2h0OiAiLGUuaGVpZ2h0KSxlJiZlLmNsdXN0ZXJOb2RlP21uKGUpOm4uY2hpbGRyZW4odCkubGVuZ3RoPjA/KCFmdW5jdGlvbih0LGUpe2YudHJhY2UoIkluc2VydGluZyBjbHVzdGVyIik7dmFyIG49ZS5zaGFwZXx8InJlY3QiO3huW2UuaWRdPWJuW25dKHQsZSl9KGMsZSksQ2VbZS5pZF0ubm9kZT1lKTptbihlKX0pKSxuLmVkZ2VzKCkuZm9yRWFjaCgoZnVuY3Rpb24odCl7dmFyIGU9bi5lZGdlKHQpO2YuaW5mbygiRWRnZSAiK3QudisiIC0+ICIrdC53KyI6ICIrSlNPTi5zdHJpbmdpZnkoZSksZSk7dmFyIGk9ZnVuY3Rpb24odCxlLG4scixpLGEpe3ZhciBvPW4ucG9pbnRzLGM9ITEsdT1hLm5vZGUoZS52KSxsPWEubm9kZShlLncpO2lmKGwuaW50ZXJzZWN0JiZ1LmludGVyc2VjdCYmKChvPW8uc2xpY2UoMSxuLnBvaW50cy5sZW5ndGgtMSkpLnVuc2hpZnQodS5pbnRlcnNlY3Qob1swXSkpLGYuaW5mbygiTGFzdCBwb2ludCIsb1tvLmxlbmd0aC0xXSxsLGwuaW50ZXJzZWN0KG9bby5sZW5ndGgtMV0pKSxvLnB1c2gobC5pbnRlcnNlY3Qob1tvLmxlbmd0aC0xXSkpKSxuLnRvQ2x1c3Rlcil7dmFyIGg7Zi50cmFjZSgiZWRnZSIsbiksZi50cmFjZSgidG8gY2x1c3RlciIscltuLnRvQ2x1c3Rlcl0pLG89W107dmFyIGQ9ITE7bi5wb2ludHMuZm9yRWFjaCgoZnVuY3Rpb24odCl7dmFyIGU9cltuLnRvQ2x1c3Rlcl0ubm9kZTtpZih3bihlLHQpfHxkKWR8fG8ucHVzaCh0KTtlbHNle2YudHJhY2UoImluc2lkZSIsbi50b0NsdXN0ZXIsdCxoKTt2YXIgaT1FbihlLGgsdCksYT0hMTtvLmZvckVhY2goKGZ1bmN0aW9uKHQpe2E9YXx8dC54PT09aS54JiZ0Lnk9PT1pLnl9KSksby5maW5kKChmdW5jdGlvbih0KXtyZXR1cm4gdC54PT09aS54JiZ0Lnk9PT1pLnl9KSk/Zi53YXJuKCJubyBpbnRlcnNlY3QiLGksbyk6by5wdXNoKGkpLGQ9ITB9aD10fSkpLGM9ITB9aWYobi5mcm9tQ2x1c3Rlcil7Zi50cmFjZSgiZWRnZSIsbiksZi53YXJuKCJmcm9tIGNsdXN0ZXIiLHJbbi5mcm9tQ2x1c3Rlcl0pO2Zvcih2YXIgcCxnPVtdLHk9ITEsdj1vLmxlbmd0aC0xO3Y+PTA7di0tKXt2YXIgbT1vW3ZdLGI9cltuLmZyb21DbHVzdGVyXS5ub2RlO2lmKHduKGIsbSl8fHkpZi50cmFjZSgiT3V0c2lkZSBwb2ludCIsbSkseXx8Zy51bnNoaWZ0KG0pO2Vsc2V7Zi53YXJuKCJpbnNpZGUiLG4uZnJvbUNsdXN0ZXIsbSxiKTt2YXIgeD1FbihiLHAsbSk7Zy51bnNoaWZ0KHgpLHk9ITB9cD1tfW89ZyxjPSEwfXZhciBfLGs9by5maWx0ZXIoKGZ1bmN0aW9uKHQpe3JldHVybiFOdW1iZXIuaXNOYU4odC55KX0pKSx3PU9iamVjdChzLmxpbmUpKCkueCgoZnVuY3Rpb24odCl7cmV0dXJuIHQueH0pKS55KChmdW5jdGlvbih0KXtyZXR1cm4gdC55fSkpLmN1cnZlKHMuY3VydmVCYXNpcyk7c3dpdGNoKG4udGhpY2tuZXNzKXtjYXNlIm5vcm1hbCI6Xz0iZWRnZS10aGlja25lc3Mtbm9ybWFsIjticmVhaztjYXNlInRoaWNrIjpfPSJlZGdlLXRoaWNrbmVzcy10aGljayI7YnJlYWs7ZGVmYXVsdDpfPSIifXN3aXRjaChuLnBhdHRlcm4pe2Nhc2Uic29saWQiOl8rPSIgZWRnZS1wYXR0ZXJuLXNvbGlkIjticmVhaztjYXNlImRvdHRlZCI6Xys9IiBlZGdlLXBhdHRlcm4tZG90dGVkIjticmVhaztjYXNlImRhc2hlZCI6Xys9IiBlZGdlLXBhdHRlcm4tZGFzaGVkIn12YXIgRT10LmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLHcoaykpLmF0dHIoImlkIixuLmlkKS5hdHRyKCJjbGFzcyIsIiAiK18rKG4uY2xhc3Nlcz8iICIrbi5jbGFzc2VzOiIiKSksVD0iIjtzd2l0Y2goeHQoKS5zdGF0ZS5hcnJvd01hcmtlckFic29sdXRlJiYoVD0oVD0oVD13aW5kb3cubG9jYXRpb24ucHJvdG9jb2wrIi8vIit3aW5kb3cubG9jYXRpb24uaG9zdCt3aW5kb3cubG9jYXRpb24ucGF0aG5hbWUrd2luZG93LmxvY2F0aW9uLnNlYXJjaCkucmVwbGFjZSgvXCgvZywiXFwoIikpLnJlcGxhY2UoL1wpL2csIlxcKSIpKSxmLmluZm8oImFycm93VHlwZVN0YXJ0IixuLmFycm93VHlwZVN0YXJ0KSxmLmluZm8oImFycm93VHlwZUVuZCIsbi5hcnJvd1R5cGVFbmQpLG4uYXJyb3dUeXBlU3RhcnQpe2Nhc2UiYXJyb3dfY3Jvc3MiOkUuYXR0cigibWFya2VyLXN0YXJ0IiwidXJsKCIrVCsiIyIraSsiLWNyb3NzU3RhcnQpIik7YnJlYWs7Y2FzZSJhcnJvd19wb2ludCI6RS5hdHRyKCJtYXJrZXItc3RhcnQiLCJ1cmwoIitUKyIjIitpKyItcG9pbnRTdGFydCkiKTticmVhaztjYXNlImFycm93X2JhcmIiOkUuYXR0cigibWFya2VyLXN0YXJ0IiwidXJsKCIrVCsiIyIraSsiLWJhcmJTdGFydCkiKTticmVhaztjYXNlImFycm93X2NpcmNsZSI6RS5hdHRyKCJtYXJrZXItc3RhcnQiLCJ1cmwoIitUKyIjIitpKyItY2lyY2xlU3RhcnQpIik7YnJlYWs7Y2FzZSJhZ2dyZWdhdGlvbiI6RS5hdHRyKCJtYXJrZXItc3RhcnQiLCJ1cmwoIitUKyIjIitpKyItYWdncmVnYXRpb25TdGFydCkiKTticmVhaztjYXNlImV4dGVuc2lvbiI6RS5hdHRyKCJtYXJrZXItc3RhcnQiLCJ1cmwoIitUKyIjIitpKyItZXh0ZW5zaW9uU3RhcnQpIik7YnJlYWs7Y2FzZSJjb21wb3NpdGlvbiI6RS5hdHRyKCJtYXJrZXItc3RhcnQiLCJ1cmwoIitUKyIjIitpKyItY29tcG9zaXRpb25TdGFydCkiKTticmVhaztjYXNlImRlcGVuZGVuY3kiOkUuYXR0cigibWFya2VyLXN0YXJ0IiwidXJsKCIrVCsiIyIraSsiLWRlcGVuZGVuY3lTdGFydCkiKX1zd2l0Y2gobi5hcnJvd1R5cGVFbmQpe2Nhc2UiYXJyb3dfY3Jvc3MiOkUuYXR0cigibWFya2VyLWVuZCIsInVybCgiK1QrIiMiK2krIi1jcm9zc0VuZCkiKTticmVhaztjYXNlImFycm93X3BvaW50IjpFLmF0dHIoIm1hcmtlci1lbmQiLCJ1cmwoIitUKyIjIitpKyItcG9pbnRFbmQpIik7YnJlYWs7Y2FzZSJhcnJvd19iYXJiIjpFLmF0dHIoIm1hcmtlci1lbmQiLCJ1cmwoIitUKyIjIitpKyItYmFyYkVuZCkiKTticmVhaztjYXNlImFycm93X2NpcmNsZSI6RS5hdHRyKCJtYXJrZXItZW5kIiwidXJsKCIrVCsiIyIraSsiLWNpcmNsZUVuZCkiKTticmVhaztjYXNlImFnZ3JlZ2F0aW9uIjpFLmF0dHIoIm1hcmtlci1lbmQiLCJ1cmwoIitUKyIjIitpKyItYWdncmVnYXRpb25FbmQpIik7YnJlYWs7Y2FzZSJleHRlbnNpb24iOkUuYXR0cigibWFya2VyLWVuZCIsInVybCgiK1QrIiMiK2krIi1leHRlbnNpb25FbmQpIik7YnJlYWs7Y2FzZSJjb21wb3NpdGlvbiI6RS5hdHRyKCJtYXJrZXItZW5kIiwidXJsKCIrVCsiIyIraSsiLWNvbXBvc2l0aW9uRW5kKSIpO2JyZWFrO2Nhc2UiZGVwZW5kZW5jeSI6RS5hdHRyKCJtYXJrZXItZW5kIiwidXJsKCIrVCsiIyIraSsiLWRlcGVuZGVuY3lFbmQpIil9dmFyIEM9e307cmV0dXJuIGMmJihDLnVwZGF0ZWRQYXRoPW8pLEMub3JpZ2luYWxQYXRoPW4ucG9pbnRzLEN9KHUsdCxlLENlLHIsbik7IWZ1bmN0aW9uKHQsZSl7Zi5pbmZvKCJNb3ZpbmcgbGFiZWwiLHQuaWQsdC5sYWJlbCxfblt0LmlkXSk7dmFyIG49ZS51cGRhdGVkUGF0aD9lLnVwZGF0ZWRQYXRoOmUub3JpZ2luYWxQYXRoO2lmKHQubGFiZWwpe3ZhciByPV9uW3QuaWRdLGk9dC54LGE9dC55O2lmKG4pe3ZhciBvPVcuY2FsY0xhYmVsUG9zaXRpb24obik7Zi5pbmZvKCJNb3ZpbmcgbGFiZWwgZnJvbSAoIixpLCIsIixhLCIpIHRvICgiLG8ueCwiLCIsby55LCIpIil9ci5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIitpKyIsICIrYSsiKSIpfWlmKHQuc3RhcnRMYWJlbExlZnQpe3ZhciBzPWtuW3QuaWRdLnN0YXJ0TGVmdCxjPXQueCx1PXQueTtpZihuKXt2YXIgbD1XLmNhbGNUZXJtaW5hbExhYmVsUG9zaXRpb24oMCwic3RhcnRfbGVmdCIsbik7Yz1sLngsdT1sLnl9cy5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIitjKyIsICIrdSsiKSIpfWlmKHQuc3RhcnRMYWJlbFJpZ2h0KXt2YXIgaD1rblt0LmlkXS5zdGFydFJpZ2h0LGQ9dC54LHA9dC55O2lmKG4pe3ZhciBnPVcuY2FsY1Rlcm1pbmFsTGFiZWxQb3NpdGlvbigwLCJzdGFydF9yaWdodCIsbik7ZD1nLngscD1nLnl9aC5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIitkKyIsICIrcCsiKSIpfWlmKHQuZW5kTGFiZWxMZWZ0KXt2YXIgeT1rblt0LmlkXS5lbmRMZWZ0LHY9dC54LG09dC55O2lmKG4pe3ZhciBiPVcuY2FsY1Rlcm1pbmFsTGFiZWxQb3NpdGlvbigwLCJlbmRfbGVmdCIsbik7dj1iLngsbT1iLnl9eS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIit2KyIsICIrbSsiKSIpfWlmKHQuZW5kTGFiZWxSaWdodCl7dmFyIHg9a25bdC5pZF0uZW5kUmlnaHQsXz10Lngsaz10Lnk7aWYobil7dmFyIHc9Vy5jYWxjVGVybWluYWxMYWJlbFBvc2l0aW9uKDAsImVuZF9yaWdodCIsbik7Xz13Lngsaz13Lnl9eC5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIitfKyIsICIraysiKSIpfX0oZSxpKX0pKSxvfSxDbj1mdW5jdGlvbih0LGUsbixyLGkpe19lKHQsbixyLGkpLHZuPXt9LF9uPXt9LGtuPXt9LHhuPXt9LFNlPXt9LEFlPXt9LENlPXt9LGYud2FybigiR3JhcGggYXQgZmlyc3Q6IixILmEuanNvbi53cml0ZShlKSksQmUoZSksZi53YXJuKCJHcmFwaCBhZnRlcjoiLEguYS5qc29uLndyaXRlKGUpKSxUbih0LGUscil9LFNuPXt9LEFuPWZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1PYmplY3Qocy5zZWxlY3QpKCdbaWQ9IicuY29uY2F0KG4sJyJdJykpO09iamVjdC5rZXlzKHQpLmZvckVhY2goKGZ1bmN0aW9uKG4pe3ZhciBpPXRbbl0sYT0iZGVmYXVsdCI7aS5jbGFzc2VzLmxlbmd0aD4wJiYoYT1pLmNsYXNzZXMuam9pbigiICIpKTt2YXIgbyxzPU4oaS5zdHlsZXMpLGM9dm9pZCAwIT09aS50ZXh0P2kudGV4dDppLmlkO2lmKHh0KCkuZmxvd2NoYXJ0Lmh0bWxMYWJlbHMpe3ZhciB1PXtsYWJlbDpjLnJlcGxhY2UoL2ZhW2xyc2JdPzpmYS1bXHctXSsvZywoZnVuY3Rpb24odCl7cmV0dXJuIjxpIGNsYXNzPSciLmNvbmNhdCh0LnJlcGxhY2UoIjoiLCIgIiksIic+PC9pPiIpfSkpfTsobz1RdCgpKHIsdSkubm9kZSgpKS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKG8pfWVsc2V7dmFyIGw9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsInRleHQiKTtsLnNldEF0dHJpYnV0ZSgic3R5bGUiLHMubGFiZWxTdHlsZS5yZXBsYWNlKCJjb2xvcjoiLCJmaWxsOiIpKTtmb3IodmFyIGg9Yy5zcGxpdCh4LmxpbmVCcmVha1JlZ2V4KSxkPTA7ZDxoLmxlbmd0aDtkKyspe3ZhciBwPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJ0c3BhbiIpO3Auc2V0QXR0cmlidXRlTlMoImh0dHA6Ly93d3cudzMub3JnL1hNTC8xOTk4L25hbWVzcGFjZSIsInhtbDpzcGFjZSIsInByZXNlcnZlIikscC5zZXRBdHRyaWJ1dGUoImR5IiwiMWVtIikscC5zZXRBdHRyaWJ1dGUoIngiLCIxIikscC50ZXh0Q29udGVudD1oW2RdLGwuYXBwZW5kQ2hpbGQocCl9bz1sfXZhciBnPTAseT0iIjtzd2l0Y2goaS50eXBlKXtjYXNlInJvdW5kIjpnPTUseT0icmVjdCI7YnJlYWs7Y2FzZSJzcXVhcmUiOnk9InJlY3QiO2JyZWFrO2Nhc2UiZGlhbW9uZCI6eT0icXVlc3Rpb24iO2JyZWFrO2Nhc2UiaGV4YWdvbiI6eT0iaGV4YWdvbiI7YnJlYWs7Y2FzZSJvZGQiOnk9InJlY3RfbGVmdF9pbnZfYXJyb3ciO2JyZWFrO2Nhc2UibGVhbl9yaWdodCI6eT0ibGVhbl9yaWdodCI7YnJlYWs7Y2FzZSJsZWFuX2xlZnQiOnk9ImxlYW5fbGVmdCI7YnJlYWs7Y2FzZSJ0cmFwZXpvaWQiOnk9InRyYXBlem9pZCI7YnJlYWs7Y2FzZSJpbnZfdHJhcGV6b2lkIjp5PSJpbnZfdHJhcGV6b2lkIjticmVhaztjYXNlIm9kZF9yaWdodCI6eT0icmVjdF9sZWZ0X2ludl9hcnJvdyI7YnJlYWs7Y2FzZSJjaXJjbGUiOnk9ImNpcmNsZSI7YnJlYWs7Y2FzZSJlbGxpcHNlIjp5PSJlbGxpcHNlIjticmVhaztjYXNlInN0YWRpdW0iOnk9InN0YWRpdW0iO2JyZWFrO2Nhc2Uic3Vicm91dGluZSI6eT0ic3Vicm91dGluZSI7YnJlYWs7Y2FzZSJjeWxpbmRlciI6eT0iY3lsaW5kZXIiO2JyZWFrO2Nhc2UiZ3JvdXAiOnk9InJlY3QiO2JyZWFrO2RlZmF1bHQ6eT0icmVjdCJ9ZS5zZXROb2RlKGkuaWQse2xhYmVsU3R5bGU6cy5sYWJlbFN0eWxlLHNoYXBlOnksbGFiZWxUZXh0OmMscng6ZyxyeTpnLGNsYXNzOmEsc3R5bGU6cy5zdHlsZSxpZDppLmlkLGxpbms6aS5saW5rLGxpbmtUYXJnZXQ6aS5saW5rVGFyZ2V0LHRvb2x0aXA6SHQuZ2V0VG9vbHRpcChpLmlkKXx8IiIsZG9tSWQ6SHQubG9va1VwRG9tSWQoaS5pZCksaGF2ZUNhbGxiYWNrOmkuaGF2ZUNhbGxiYWNrLHdpZHRoOiJncm91cCI9PT1pLnR5cGU/NTAwOnZvaWQgMCx0eXBlOmkudHlwZSxwYWRkaW5nOnh0KCkuZmxvd2NoYXJ0LnBhZGRpbmd9KSxmLmluZm8oInNldE5vZGUiLHtsYWJlbFN0eWxlOnMubGFiZWxTdHlsZSxzaGFwZTp5LGxhYmVsVGV4dDpjLHJ4Omcscnk6ZyxjbGFzczphLHN0eWxlOnMuc3R5bGUsaWQ6aS5pZCxkb21JZDpIdC5sb29rVXBEb21JZChpLmlkKSx3aWR0aDoiZ3JvdXAiPT09aS50eXBlPzUwMDp2b2lkIDAsdHlwZTppLnR5cGUscGFkZGluZzp4dCgpLmZsb3djaGFydC5wYWRkaW5nfSl9KSl9LE1uPWZ1bmN0aW9uKHQsZSl7dmFyIG4scixpPTA7aWYodm9pZCAwIT09dC5kZWZhdWx0U3R5bGUpe3ZhciBhPU4odC5kZWZhdWx0U3R5bGUpO249YS5zdHlsZSxyPWEubGFiZWxTdHlsZX10LmZvckVhY2goKGZ1bmN0aW9uKGEpe2krKzt2YXIgbz0iTC0iK2Euc3RhcnQrIi0iK2EuZW5kLGM9IkxTLSIrYS5zdGFydCx1PSJMRS0iK2EuZW5kLGw9e307c3dpdGNoKGwubWlubGVuPWEubGVuZ3RofHwxLCJhcnJvd19vcGVuIj09PWEudHlwZT9sLmFycm93aGVhZD0ibm9uZSI6bC5hcnJvd2hlYWQ9Im5vcm1hbCIsbC5hcnJvd1R5cGVTdGFydD0iYXJyb3dfb3BlbiIsbC5hcnJvd1R5cGVFbmQ9ImFycm93X29wZW4iLGEudHlwZSl7Y2FzZSJkb3VibGVfYXJyb3dfY3Jvc3MiOmwuYXJyb3dUeXBlU3RhcnQ9ImFycm93X2Nyb3NzIjtjYXNlImFycm93X2Nyb3NzIjpsLmFycm93VHlwZUVuZD0iYXJyb3dfY3Jvc3MiO2JyZWFrO2Nhc2UiZG91YmxlX2Fycm93X3BvaW50IjpsLmFycm93VHlwZVN0YXJ0PSJhcnJvd19wb2ludCI7Y2FzZSJhcnJvd19wb2ludCI6bC5hcnJvd1R5cGVFbmQ9ImFycm93X3BvaW50IjticmVhaztjYXNlImRvdWJsZV9hcnJvd19jaXJjbGUiOmwuYXJyb3dUeXBlU3RhcnQ9ImFycm93X2NpcmNsZSI7Y2FzZSJhcnJvd19jaXJjbGUiOmwuYXJyb3dUeXBlRW5kPSJhcnJvd19jaXJjbGUifXZhciBoPSIiLGY9IiI7aWYodm9pZCAwIT09YS5zdHlsZSl7dmFyIGQ9TihhLnN0eWxlKTtoPWQuc3R5bGUsZj1kLmxhYmVsU3R5bGV9ZWxzZSBzd2l0Y2goYS5zdHJva2Upe2Nhc2Uibm9ybWFsIjpoPSJmaWxsOm5vbmUiLHZvaWQgMCE9PW4mJihoPW4pLHZvaWQgMCE9PXImJihmPXIpLGwudGhpY2tuZXNzPSJub3JtYWwiLGwucGF0dGVybj0ic29saWQiO2JyZWFrO2Nhc2UiZG90dGVkIjpsLnRoaWNrbmVzcz0ibm9ybWFsIixsLnBhdHRlcm49ImRvdHRlZCI7YnJlYWs7Y2FzZSJ0aGljayI6bC50aGlja25lc3M9InRoaWNrIixsLnBhdHRlcm49InNvbGlkIn1sLnN0eWxlPWgsbC5sYWJlbFN0eWxlPWYsdm9pZCAwIT09YS5pbnRlcnBvbGF0ZT9sLmN1cnZlPU8oYS5pbnRlcnBvbGF0ZSxzLmN1cnZlTGluZWFyKTp2b2lkIDAhPT10LmRlZmF1bHRJbnRlcnBvbGF0ZT9sLmN1cnZlPU8odC5kZWZhdWx0SW50ZXJwb2xhdGUscy5jdXJ2ZUxpbmVhcik6bC5jdXJ2ZT1PKFNuLmN1cnZlLHMuY3VydmVMaW5lYXIpLHZvaWQgMD09PWEudGV4dD92b2lkIDAhPT1hLnN0eWxlJiYobC5hcnJvd2hlYWRTdHlsZT0iZmlsbDogIzMzMyIpOihsLmFycm93aGVhZFN0eWxlPSJmaWxsOiAjMzMzIixsLmxhYmVscG9zPSJjIix4dCgpLmZsb3djaGFydC5odG1sTGFiZWxzLGwubGFiZWxUeXBlPSJ0ZXh0IixsLmxhYmVsPWEudGV4dC5yZXBsYWNlKHgubGluZUJyZWFrUmVnZXgsIlxuIiksdm9pZCAwPT09YS5zdHlsZSYmKGwuc3R5bGU9bC5zdHlsZXx8InN0cm9rZTogIzMzMzsgc3Ryb2tlLXdpZHRoOiAxLjVweDtmaWxsOm5vbmUiKSxsLmxhYmVsU3R5bGU9bC5sYWJlbFN0eWxlLnJlcGxhY2UoImNvbG9yOiIsImZpbGw6IikpLGwuaWQ9byxsLmNsYXNzZXM9ImZsb3djaGFydC1saW5rICIrYysiICIrdSxlLnNldEVkZ2UoYS5zdGFydCxhLmVuZCxsLGkpfSkpfSxPbj1mdW5jdGlvbih0KXtmb3IodmFyIGU9T2JqZWN0LmtleXModCksbj0wO248ZS5sZW5ndGg7bisrKVNuW2Vbbl1dPXRbZVtuXV19LERuPWZ1bmN0aW9uKHQsZSl7Zi5pbmZvKCJEcmF3aW5nIGZsb3djaGFydCIpLEh0LmNsZWFyKCksSHQuc2V0R2VuKCJnZW4tMiIpO3ZhciBuPXF0LmEucGFyc2VyO24ueXk9SHQsbi5wYXJzZSh0KTt2YXIgcj1IdC5nZXREaXJlY3Rpb24oKTt2b2lkIDA9PT1yJiYocj0iVEQiKTt2YXIgaSxhPXh0KCkuZmxvd2NoYXJ0LG89YS5ub2RlU3BhY2luZ3x8NTAsYz1hLnJhbmtTcGFjaW5nfHw1MCx1PW5ldyBILmEuR3JhcGgoe211bHRpZ3JhcGg6ITAsY29tcG91bmQ6ITB9KS5zZXRHcmFwaCh7cmFua2RpcjpyLG5vZGVzZXA6byxyYW5rc2VwOmMsbWFyZ2lueDo4LG1hcmdpbnk6OH0pLnNldERlZmF1bHRFZGdlTGFiZWwoKGZ1bmN0aW9uKCl7cmV0dXJue319KSksbD1IdC5nZXRTdWJHcmFwaHMoKTtmLmluZm8oIlN1YmdyYXBocyAtICIsbCk7Zm9yKHZhciBoPWwubGVuZ3RoLTE7aD49MDtoLS0paT1sW2hdLGYuaW5mbygiU3ViZ3JhcGggLSAiLGkpLEh0LmFkZFZlcnRleChpLmlkLGkudGl0bGUsImdyb3VwIix2b2lkIDAsaS5jbGFzc2VzKTt2YXIgZD1IdC5nZXRWZXJ0aWNlcygpLHA9SHQuZ2V0RWRnZXMoKTtmLmluZm8ocCk7dmFyIGc9MDtmb3IoZz1sLmxlbmd0aC0xO2c+PTA7Zy0tKXtpPWxbZ10sT2JqZWN0KHMuc2VsZWN0QWxsKSgiY2x1c3RlciIpLmFwcGVuZCgidGV4dCIpO2Zvcih2YXIgeT0wO3k8aS5ub2Rlcy5sZW5ndGg7eSsrKWYuaW5mbygiU2V0dGluZyB1cCBzdWJncmFwaHMiLGkubm9kZXNbeV0saS5pZCksdS5zZXRQYXJlbnQoaS5ub2Rlc1t5XSxpLmlkKX1BbihkLHUsZSksTW4ocCx1KTt2YXIgdj1PYmplY3Qocy5zZWxlY3QpKCdbaWQ9IicuY29uY2F0KGUsJyJdJykpO3YuYXR0cigieG1sbnM6eGxpbmsiLCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIik7dmFyIG09T2JqZWN0KHMuc2VsZWN0KSgiIyIrZSsiIGciKTtDbihtLHUsWyJwb2ludCIsImNpcmNsZSIsImNyb3NzIl0sImZsb3djaGFydCIsZSk7dmFyIGI9YS5kaWFncmFtUGFkZGluZyx4PXYubm9kZSgpLmdldEJCb3goKSxfPXgud2lkdGgrMipiLGs9eC5oZWlnaHQrMipiO2lmKGYuZGVidWcoIm5ldyBWaWV3Qm94IDAgMCAiLmNvbmNhdChfLCIgIikuY29uY2F0KGspLCJ0cmFuc2xhdGUoIi5jb25jYXQoYi11Ll9sYWJlbC5tYXJnaW54LCIsICIpLmNvbmNhdChiLXUuX2xhYmVsLm1hcmdpbnksIikiKSksJCh2LGssXyxhLnVzZU1heFdpZHRoKSx2LmF0dHIoInZpZXdCb3giLCIwIDAgIi5jb25jYXQoXywiICIpLmNvbmNhdChrKSksdi5zZWxlY3QoImciKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIi5jb25jYXQoYi11Ll9sYWJlbC5tYXJnaW54LCIsICIpLmNvbmNhdChiLXgueSwiKSIpKSxIdC5pbmRleE5vZGVzKCJzdWJHcmFwaCIrZyksIWEuaHRtbExhYmVscylmb3IodmFyIHc9ZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnW2lkPSInK2UrJyJdIC5lZGdlTGFiZWwgLmxhYmVsJyksRT0wO0U8dy5sZW5ndGg7RSsrKXt2YXIgVD13W0VdLEM9VC5nZXRCQm94KCksUz1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwicmVjdCIpO1Muc2V0QXR0cmlidXRlKCJyeCIsMCksUy5zZXRBdHRyaWJ1dGUoInJ5IiwwKSxTLnNldEF0dHJpYnV0ZSgid2lkdGgiLEMud2lkdGgpLFMuc2V0QXR0cmlidXRlKCJoZWlnaHQiLEMuaGVpZ2h0KSxULmluc2VydEJlZm9yZShTLFQuZmlyc3RDaGlsZCl9T2JqZWN0LmtleXMoZCkuZm9yRWFjaCgoZnVuY3Rpb24odCl7dmFyIG49ZFt0XTtpZihuLmxpbmspe3ZhciByPU9iamVjdChzLnNlbGVjdCkoIiMiK2UrJyBbaWQ9IicrdCsnIl0nKTtpZihyKXt2YXIgaT1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwiYSIpO2kuc2V0QXR0cmlidXRlTlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwiY2xhc3MiLG4uY2xhc3Nlcy5qb2luKCIgIikpLGkuc2V0QXR0cmlidXRlTlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwiaHJlZiIsbi5saW5rKSxpLnNldEF0dHJpYnV0ZU5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsInJlbCIsIm5vb3BlbmVyIiksbi5saW5rVGFyZ2V0JiZpLnNldEF0dHJpYnV0ZU5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsInRhcmdldCIsbi5saW5rVGFyZ2V0KTt2YXIgYT1yLmluc2VydCgoZnVuY3Rpb24oKXtyZXR1cm4gaX0pLCI6Zmlyc3QtY2hpbGQiKSxvPXIuc2VsZWN0KCIubGFiZWwtY29udGFpbmVyIik7byYmYS5hcHBlbmQoKGZ1bmN0aW9uKCl7cmV0dXJuIG8ubm9kZSgpfSkpO3ZhciBjPXIuc2VsZWN0KCIubGFiZWwiKTtjJiZhLmFwcGVuZCgoZnVuY3Rpb24oKXtyZXR1cm4gYy5ub2RlKCl9KSl9fX0pKX0sTm49ZnVuY3Rpb24odCxlKXt2YXIgbj10LmFwcGVuZCgicmVjdCIpO3JldHVybiBuLmF0dHIoIngiLGUueCksbi5hdHRyKCJ5IixlLnkpLG4uYXR0cigiZmlsbCIsZS5maWxsKSxuLmF0dHIoInN0cm9rZSIsZS5zdHJva2UpLG4uYXR0cigid2lkdGgiLGUud2lkdGgpLG4uYXR0cigiaGVpZ2h0IixlLmhlaWdodCksbi5hdHRyKCJyeCIsZS5yeCksbi5hdHRyKCJyeSIsZS5yeSksdm9pZCAwIT09ZS5jbGFzcyYmbi5hdHRyKCJjbGFzcyIsZS5jbGFzcyksbn0sQm49ZnVuY3Rpb24odCxlKXt2YXIgbj0wLHI9MCxpPWUud3JhcD9lLnRleHQuc3BsaXQoeC5saW5lQnJlYWtSZWdleCk6W2UudGV4dC5yZXBsYWNlKHgubGluZUJyZWFrUmVnZXgsIiAiKV0sYT1bXSxvPTAscz1mdW5jdGlvbigpe3JldHVybiBlLnl9O2lmKHZvaWQgMCE9PWUudmFsaWduJiZ2b2lkIDAhPT1lLnRleHRNYXJnaW4mJmUudGV4dE1hcmdpbj4wKXN3aXRjaChlLnZhbGlnbil7Y2FzZSJ0b3AiOmNhc2Uic3RhcnQiOnM9ZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5yb3VuZChlLnkrZS50ZXh0TWFyZ2luKX07YnJlYWs7Y2FzZSJtaWRkbGUiOmNhc2UiY2VudGVyIjpzPWZ1bmN0aW9uKCl7cmV0dXJuIE1hdGgucm91bmQoZS55KyhuK3IrZS50ZXh0TWFyZ2luKS8yKX07YnJlYWs7Y2FzZSJib3R0b20iOmNhc2UiZW5kIjpzPWZ1bmN0aW9uKCl7cmV0dXJuIE1hdGgucm91bmQoZS55KyhuK3IrMiplLnRleHRNYXJnaW4pLWUudGV4dE1hcmdpbil9fWlmKHZvaWQgMCE9PWUuYW5jaG9yJiZ2b2lkIDAhPT1lLnRleHRNYXJnaW4mJnZvaWQgMCE9PWUud2lkdGgpc3dpdGNoKGUuYW5jaG9yKXtjYXNlImxlZnQiOmNhc2Uic3RhcnQiOmUueD1NYXRoLnJvdW5kKGUueCtlLnRleHRNYXJnaW4pLGUuYW5jaG9yPSJzdGFydCIsZS5kb21pbmFudEJhc2VsaW5lPSJ0ZXh0LWFmdGVyLWVkZ2UiLGUuYWxpZ25tZW50QmFzZWxpbmU9Im1pZGRsZSI7YnJlYWs7Y2FzZSJtaWRkbGUiOmNhc2UiY2VudGVyIjplLng9TWF0aC5yb3VuZChlLngrZS53aWR0aC8yKSxlLmFuY2hvcj0ibWlkZGxlIixlLmRvbWluYW50QmFzZWxpbmU9Im1pZGRsZSIsZS5hbGlnbm1lbnRCYXNlbGluZT0ibWlkZGxlIjticmVhaztjYXNlInJpZ2h0IjpjYXNlImVuZCI6ZS54PU1hdGgucm91bmQoZS54K2Uud2lkdGgtZS50ZXh0TWFyZ2luKSxlLmFuY2hvcj0iZW5kIixlLmRvbWluYW50QmFzZWxpbmU9InRleHQtYmVmb3JlLWVkZ2UiLGUuYWxpZ25tZW50QmFzZWxpbmU9Im1pZGRsZSJ9Zm9yKHZhciBjPTA7YzxpLmxlbmd0aDtjKyspe3ZhciB1PWlbY107dm9pZCAwIT09ZS50ZXh0TWFyZ2luJiYwPT09ZS50ZXh0TWFyZ2luJiZ2b2lkIDAhPT1lLmZvbnRTaXplJiYobz1jKmUuZm9udFNpemUpO3ZhciBsPXQuYXBwZW5kKCJ0ZXh0Iik7aWYobC5hdHRyKCJ4IixlLngpLGwuYXR0cigieSIscygpKSx2b2lkIDAhPT1lLmFuY2hvciYmbC5hdHRyKCJ0ZXh0LWFuY2hvciIsZS5hbmNob3IpLmF0dHIoImRvbWluYW50LWJhc2VsaW5lIixlLmRvbWluYW50QmFzZWxpbmUpLmF0dHIoImFsaWdubWVudC1iYXNlbGluZSIsZS5hbGlnbm1lbnRCYXNlbGluZSksdm9pZCAwIT09ZS5mb250RmFtaWx5JiZsLnN0eWxlKCJmb250LWZhbWlseSIsZS5mb250RmFtaWx5KSx2b2lkIDAhPT1lLmZvbnRTaXplJiZsLnN0eWxlKCJmb250LXNpemUiLGUuZm9udFNpemUpLHZvaWQgMCE9PWUuZm9udFdlaWdodCYmbC5zdHlsZSgiZm9udC13ZWlnaHQiLGUuZm9udFdlaWdodCksdm9pZCAwIT09ZS5maWxsJiZsLmF0dHIoImZpbGwiLGUuZmlsbCksdm9pZCAwIT09ZS5jbGFzcyYmbC5hdHRyKCJjbGFzcyIsZS5jbGFzcyksdm9pZCAwIT09ZS5keT9sLmF0dHIoImR5IixlLmR5KTowIT09byYmbC5hdHRyKCJkeSIsbyksZS50c3Bhbil7dmFyIGg9bC5hcHBlbmQoInRzcGFuIik7aC5hdHRyKCJ4IixlLngpLHZvaWQgMCE9PWUuZmlsbCYmaC5hdHRyKCJmaWxsIixlLmZpbGwpLGgudGV4dCh1KX1lbHNlIGwudGV4dCh1KTt2b2lkIDAhPT1lLnZhbGlnbiYmdm9pZCAwIT09ZS50ZXh0TWFyZ2luJiZlLnRleHRNYXJnaW4+MCYmKHIrPShsLl9ncm91cHN8fGwpWzBdWzBdLmdldEJCb3goKS5oZWlnaHQsbj1yKSxhLnB1c2gobCl9cmV0dXJuIGF9LExuPWZ1bmN0aW9uKHQsZSl7dmFyIG4scixpLGEsbyxzPXQuYXBwZW5kKCJwb2x5Z29uIik7cmV0dXJuIHMuYXR0cigicG9pbnRzIiwobj1lLngscj1lLnksaT1lLndpZHRoLGE9ZS5oZWlnaHQsbisiLCIrcisiICIrKG4raSkrIiwiK3IrIiAiKyhuK2kpKyIsIisocithLShvPTcpKSsiICIrKG4raS0xLjIqbykrIiwiKyhyK2EpKyIgIituKyIsIisocithKSkpLHMuYXR0cigiY2xhc3MiLCJsYWJlbEJveCIpLGUueT1lLnkrZS5oZWlnaHQvMixCbih0LGUpLHN9LEZuPS0xLFBuPWZ1bmN0aW9uKCl7cmV0dXJue3g6MCx5OjAsZmlsbDp2b2lkIDAsYW5jaG9yOnZvaWQgMCxzdHlsZToiIzY2NiIsd2lkdGg6dm9pZCAwLGhlaWdodDp2b2lkIDAsdGV4dE1hcmdpbjowLHJ4OjAscnk6MCx0c3BhbjohMCx2YWxpZ246dm9pZCAwfX0sSW49ZnVuY3Rpb24oKXtyZXR1cm57eDowLHk6MCxmaWxsOiIjRURGMkFFIixzdHJva2U6IiM2NjYiLHdpZHRoOjEwMCxhbmNob3I6InN0YXJ0IixoZWlnaHQ6MTAwLHJ4OjAscnk6MH19LGpuPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUsbixpLGEsbyxzKXtyKGUuYXBwZW5kKCJ0ZXh0IikuYXR0cigieCIsbithLzIpLmF0dHIoInkiLGkrby8yKzUpLnN0eWxlKCJ0ZXh0LWFuY2hvciIsIm1pZGRsZSIpLnRleHQodCkscyl9ZnVuY3Rpb24gZSh0LGUsbixpLGEsbyxzLGMpe2Zvcih2YXIgdT1jLmFjdG9yRm9udFNpemUsbD1jLmFjdG9yRm9udEZhbWlseSxoPWMuYWN0b3JGb250V2VpZ2h0LGY9dC5zcGxpdCh4LmxpbmVCcmVha1JlZ2V4KSxkPTA7ZDxmLmxlbmd0aDtkKyspe3ZhciBwPWQqdS11KihmLmxlbmd0aC0xKS8yLGc9ZS5hcHBlbmQoInRleHQiKS5hdHRyKCJ4IixuK2EvMikuYXR0cigieSIsaSkuc3R5bGUoInRleHQtYW5jaG9yIiwibWlkZGxlIikuc3R5bGUoImZvbnQtc2l6ZSIsdSkuc3R5bGUoImZvbnQtd2VpZ2h0IixoKS5zdHlsZSgiZm9udC1mYW1pbHkiLGwpO2cuYXBwZW5kKCJ0c3BhbiIpLmF0dHIoIngiLG4rYS8yKS5hdHRyKCJkeSIscCkudGV4dChmW2RdKSxnLmF0dHIoInkiLGkrby8yKS5hdHRyKCJkb21pbmFudC1iYXNlbGluZSIsImNlbnRyYWwiKS5hdHRyKCJhbGlnbm1lbnQtYmFzZWxpbmUiLCJjZW50cmFsIikscihnLHMpfX1mdW5jdGlvbiBuKHQsbixpLGEsbyxzLGMsdSl7dmFyIGw9bi5hcHBlbmQoInN3aXRjaCIpLGg9bC5hcHBlbmQoImZvcmVpZ25PYmplY3QiKS5hdHRyKCJ4IixpKS5hdHRyKCJ5IixhKS5hdHRyKCJ3aWR0aCIsbykuYXR0cigiaGVpZ2h0IixzKS5hcHBlbmQoImRpdiIpLnN0eWxlKCJkaXNwbGF5IiwidGFibGUiKS5zdHlsZSgiaGVpZ2h0IiwiMTAwJSIpLnN0eWxlKCJ3aWR0aCIsIjEwMCUiKTtoLmFwcGVuZCgiZGl2Iikuc3R5bGUoImRpc3BsYXkiLCJ0YWJsZS1jZWxsIikuc3R5bGUoInRleHQtYWxpZ24iLCJjZW50ZXIiKS5zdHlsZSgidmVydGljYWwtYWxpZ24iLCJtaWRkbGUiKS50ZXh0KHQpLGUodCxsLGksYSxvLHMsYyx1KSxyKGgsYyl9ZnVuY3Rpb24gcih0LGUpe2Zvcih2YXIgbiBpbiBlKWUuaGFzT3duUHJvcGVydHkobikmJnQuYXR0cihuLGVbbl0pfXJldHVybiBmdW5jdGlvbihyKXtyZXR1cm4iZm8iPT09ci50ZXh0UGxhY2VtZW50P246Im9sZCI9PT1yLnRleHRQbGFjZW1lbnQ/dDplfX0oKSxSbj17ZHJhd1JlY3Q6Tm4sZHJhd1RleHQ6Qm4sZHJhd0xhYmVsOkxuLGRyYXdBY3RvcjpmdW5jdGlvbih0LGUsbil7dmFyIHI9ZS54K2Uud2lkdGgvMixpPXQuYXBwZW5kKCJnIik7MD09PWUueSYmKEZuKyssaS5hcHBlbmQoImxpbmUiKS5hdHRyKCJpZCIsImFjdG9yIitGbikuYXR0cigieDEiLHIpLmF0dHIoInkxIiw1KS5hdHRyKCJ4MiIscikuYXR0cigieTIiLDJlMykuYXR0cigiY2xhc3MiLCJhY3Rvci1saW5lIikuYXR0cigic3Ryb2tlLXdpZHRoIiwiMC41cHgiKS5hdHRyKCJzdHJva2UiLCIjOTk5IikpO3ZhciBhPUluKCk7YS54PWUueCxhLnk9ZS55LGEuZmlsbD0iI2VhZWFlYSIsYS53aWR0aD1lLndpZHRoLGEuaGVpZ2h0PWUuaGVpZ2h0LGEuY2xhc3M9ImFjdG9yIixhLnJ4PTMsYS5yeT0zLE5uKGksYSksam4obikoZS5kZXNjcmlwdGlvbixpLGEueCxhLnksYS53aWR0aCxhLmhlaWdodCx7Y2xhc3M6ImFjdG9yIn0sbil9LGFuY2hvckVsZW1lbnQ6ZnVuY3Rpb24odCl7cmV0dXJuIHQuYXBwZW5kKCJnIil9LGRyYXdBY3RpdmF0aW9uOmZ1bmN0aW9uKHQsZSxuLHIsaSl7dmFyIGE9SW4oKSxvPWUuYW5jaG9yZWQ7YS54PWUuc3RhcnR4LGEueT1lLnN0YXJ0eSxhLmNsYXNzPSJhY3RpdmF0aW9uIitpJTMsYS53aWR0aD1lLnN0b3B4LWUuc3RhcnR4LGEuaGVpZ2h0PW4tZS5zdGFydHksTm4obyxhKX0sZHJhd0xvb3A6ZnVuY3Rpb24odCxlLG4scil7dmFyIGk9ci5ib3hNYXJnaW4sYT1yLmJveFRleHRNYXJnaW4sbz1yLmxhYmVsQm94SGVpZ2h0LHM9ci5sYWJlbEJveFdpZHRoLGM9ci5tZXNzYWdlRm9udEZhbWlseSx1PXIubWVzc2FnZUZvbnRTaXplLGw9ci5tZXNzYWdlRm9udFdlaWdodCxoPXQuYXBwZW5kKCJnIiksZj1mdW5jdGlvbih0LGUsbixyKXtyZXR1cm4gaC5hcHBlbmQoImxpbmUiKS5hdHRyKCJ4MSIsdCkuYXR0cigieTEiLGUpLmF0dHIoIngyIixuKS5hdHRyKCJ5MiIscikuYXR0cigiY2xhc3MiLCJsb29wTGluZSIpfTtmKGUuc3RhcnR4LGUuc3RhcnR5LGUuc3RvcHgsZS5zdGFydHkpLGYoZS5zdG9weCxlLnN0YXJ0eSxlLnN0b3B4LGUuc3RvcHkpLGYoZS5zdGFydHgsZS5zdG9weSxlLnN0b3B4LGUuc3RvcHkpLGYoZS5zdGFydHgsZS5zdGFydHksZS5zdGFydHgsZS5zdG9weSksdm9pZCAwIT09ZS5zZWN0aW9ucyYmZS5zZWN0aW9ucy5mb3JFYWNoKChmdW5jdGlvbih0KXtmKGUuc3RhcnR4LHQueSxlLnN0b3B4LHQueSkuc3R5bGUoInN0cm9rZS1kYXNoYXJyYXkiLCIzLCAzIil9KSk7dmFyIGQ9UG4oKTtkLnRleHQ9bixkLng9ZS5zdGFydHgsZC55PWUuc3RhcnR5LGQuZm9udEZhbWlseT1jLGQuZm9udFNpemU9dSxkLmZvbnRXZWlnaHQ9bCxkLmFuY2hvcj0ibWlkZGxlIixkLnZhbGlnbj0ibWlkZGxlIixkLnRzcGFuPSExLGQud2lkdGg9c3x8NTAsZC5oZWlnaHQ9b3x8MjAsZC50ZXh0TWFyZ2luPWEsZC5jbGFzcz0ibGFiZWxUZXh0IixMbihoLGQpLChkPVBuKCkpLnRleHQ9ZS50aXRsZSxkLng9ZS5zdGFydHgrcy8yKyhlLnN0b3B4LWUuc3RhcnR4KS8yLGQueT1lLnN0YXJ0eStpK2EsZC5hbmNob3I9Im1pZGRsZSIsZC52YWxpZ249Im1pZGRsZSIsZC50ZXh0TWFyZ2luPWEsZC5jbGFzcz0ibG9vcFRleHQiLGQuZm9udEZhbWlseT1jLGQuZm9udFNpemU9dSxkLmZvbnRXZWlnaHQ9bCxkLndyYXA9ITA7dmFyIHA9Qm4oaCxkKTtyZXR1cm4gdm9pZCAwIT09ZS5zZWN0aW9uVGl0bGVzJiZlLnNlY3Rpb25UaXRsZXMuZm9yRWFjaCgoZnVuY3Rpb24odCxuKXtpZih0Lm1lc3NhZ2Upe2QudGV4dD10Lm1lc3NhZ2UsZC54PWUuc3RhcnR4KyhlLnN0b3B4LWUuc3RhcnR4KS8yLGQueT1lLnNlY3Rpb25zW25dLnkraSthLGQuY2xhc3M9Imxvb3BUZXh0IixkLmFuY2hvcj0ibWlkZGxlIixkLnZhbGlnbj0ibWlkZGxlIixkLnRzcGFuPSExLGQuZm9udEZhbWlseT1jLGQuZm9udFNpemU9dSxkLmZvbnRXZWlnaHQ9bCxkLndyYXA9ZS53cmFwLHA9Qm4oaCxkKTt2YXIgcj1NYXRoLnJvdW5kKHAubWFwKChmdW5jdGlvbih0KXtyZXR1cm4odC5fZ3JvdXBzfHx0KVswXVswXS5nZXRCQm94KCkuaGVpZ2h0fSkpLnJlZHVjZSgoZnVuY3Rpb24odCxlKXtyZXR1cm4gdCtlfSkpKTtlLnNlY3Rpb25zW25dLmhlaWdodCs9ci0oaSthKX19KSksZS5oZWlnaHQ9TWF0aC5yb3VuZChlLnN0b3B5LWUuc3RhcnR5KSxofSxkcmF3QmFja2dyb3VuZFJlY3Q6ZnVuY3Rpb24odCxlKXtObih0LHt4OmUuc3RhcnR4LHk6ZS5zdGFydHksd2lkdGg6ZS5zdG9weC1lLnN0YXJ0eCxoZWlnaHQ6ZS5zdG9weS1lLnN0YXJ0eSxmaWxsOmUuZmlsbCxjbGFzczoicmVjdCJ9KS5sb3dlcigpfSxpbnNlcnRBcnJvd0hlYWQ6ZnVuY3Rpb24odCl7dC5hcHBlbmQoImRlZnMiKS5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIiwiYXJyb3doZWFkIikuYXR0cigicmVmWCIsNSkuYXR0cigicmVmWSIsMikuYXR0cigibWFya2VyV2lkdGgiLDYpLmF0dHIoIm1hcmtlckhlaWdodCIsNCkuYXR0cigib3JpZW50IiwiYXV0byIpLmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLCJNIDAsMCBWIDQgTDYsMiBaIil9LGluc2VydFNlcXVlbmNlTnVtYmVyOmZ1bmN0aW9uKHQpe3QuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIsInNlcXVlbmNlbnVtYmVyIikuYXR0cigicmVmWCIsMTUpLmF0dHIoInJlZlkiLDE1KS5hdHRyKCJtYXJrZXJXaWR0aCIsNjApLmF0dHIoIm1hcmtlckhlaWdodCIsNDApLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoImNpcmNsZSIpLmF0dHIoImN4IiwxNSkuYXR0cigiY3kiLDE1KS5hdHRyKCJyIiw2KX0saW5zZXJ0QXJyb3dDcm9zc0hlYWQ6ZnVuY3Rpb24odCl7dmFyIGU9dC5hcHBlbmQoImRlZnMiKS5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIiwiY3Jvc3NoZWFkIikuYXR0cigibWFya2VyV2lkdGgiLDE1KS5hdHRyKCJtYXJrZXJIZWlnaHQiLDgpLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hdHRyKCJyZWZYIiwxNikuYXR0cigicmVmWSIsNCk7ZS5hcHBlbmQoInBhdGgiKS5hdHRyKCJmaWxsIiwiYmxhY2siKS5hdHRyKCJzdHJva2UiLCIjMDAwMDAwIikuc3R5bGUoInN0cm9rZS1kYXNoYXJyYXkiLCIwLCAwIikuYXR0cigic3Ryb2tlLXdpZHRoIiwiMXB4IikuYXR0cigiZCIsIk0gOSwyIFYgNiBMMTYsNCBaIiksZS5hcHBlbmQoInBhdGgiKS5hdHRyKCJmaWxsIiwibm9uZSIpLmF0dHIoInN0cm9rZSIsIiMwMDAwMDAiKS5zdHlsZSgic3Ryb2tlLWRhc2hhcnJheSIsIjAsIDAiKS5hdHRyKCJzdHJva2Utd2lkdGgiLCIxcHgiKS5hdHRyKCJkIiwiTSAwLDEgTCA2LDcgTSA2LDEgTCAwLDciKX0sZ2V0VGV4dE9iajpQbixnZXROb3RlUmVjdDpJbn0sWW49bigyKSx6bj1uLm4oWW4pLFVuPXZvaWQgMCwkbj17fSxXbj1bXSxWbj1bXSxIbj0iIixHbj0hMSxxbj0hMSxYbj0hMSxabj1mdW5jdGlvbih0LGUsbil7dmFyIHI9JG5bdF07ciYmZT09PXIubmFtZSYmbnVsbD09bnx8KG51bGwhPW4mJm51bGwhPW4udGV4dHx8KG49e3RleHQ6ZSx3cmFwOm51bGx9KSwkblt0XT17bmFtZTplLGRlc2NyaXB0aW9uOm4udGV4dCx3cmFwOnZvaWQgMD09PW4ud3JhcCYmS24oKXx8ISFuLndyYXAscHJldkFjdG9yOlVufSxVbiYmJG5bVW5dJiYoJG5bVW5dLm5leHRBY3Rvcj10KSxVbj10KX0sSm49ZnVuY3Rpb24odCl7dmFyIGUsbj0wO2ZvcihlPTA7ZTxXbi5sZW5ndGg7ZSsrKVduW2VdLnR5cGU9PT10ci5BQ1RJVkVfU1RBUlQmJlduW2VdLmZyb20uYWN0b3I9PT10JiZuKyssV25bZV0udHlwZT09PXRyLkFDVElWRV9FTkQmJlduW2VdLmZyb20uYWN0b3I9PT10JiZuLS07cmV0dXJuIG59LFFuPWZ1bmN0aW9uKHQsZSl7dmFyIG49YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/YXJndW1lbnRzWzJdOnt0ZXh0OnZvaWQgMCx3cmFwOnZvaWQgMH0scj1hcmd1bWVudHMubGVuZ3RoPjM/YXJndW1lbnRzWzNdOnZvaWQgMDtpZihyPT09dHIuQUNUSVZFX0VORCl7dmFyIGk9Sm4odC5hY3Rvcik7aWYoaTwxKXt2YXIgYT1uZXcgRXJyb3IoIlRyeWluZyB0byBpbmFjdGl2YXRlIGFuIGluYWN0aXZlIHBhcnRpY2lwYW50ICgiK3QuYWN0b3IrIikiKTt0aHJvdyBhLmhhc2g9e3RleHQ6Ii0+Pi0iLHRva2VuOiItPj4tIixsaW5lOiIxIixsb2M6e2ZpcnN0X2xpbmU6MSxsYXN0X2xpbmU6MSxmaXJzdF9jb2x1bW46MSxsYXN0X2NvbHVtbjoxfSxleHBlY3RlZDpbIidBQ1RJVkVfUEFSVElDSVBBTlQnIl19LGF9fXJldHVybiBXbi5wdXNoKHtmcm9tOnQsdG86ZSxtZXNzYWdlOm4udGV4dCx3cmFwOnZvaWQgMD09PW4ud3JhcCYmS24oKXx8ISFuLndyYXAsdHlwZTpyfSksITB9LEtuPWZ1bmN0aW9uKCl7cmV0dXJuIFhufSx0cj17U09MSUQ6MCxET1RURUQ6MSxOT1RFOjIsU09MSURfQ1JPU1M6MyxET1RURURfQ1JPU1M6NCxTT0xJRF9PUEVOOjUsRE9UVEVEX09QRU46NixMT09QX1NUQVJUOjEwLExPT1BfRU5EOjExLEFMVF9TVEFSVDoxMixBTFRfRUxTRToxMyxBTFRfRU5EOjE0LE9QVF9TVEFSVDoxNSxPUFRfRU5EOjE2LEFDVElWRV9TVEFSVDoxNyxBQ1RJVkVfRU5EOjE4LFBBUl9TVEFSVDoxOSxQQVJfQU5EOjIwLFBBUl9FTkQ6MjEsUkVDVF9TVEFSVDoyMixSRUNUX0VORDoyM30sZXI9ZnVuY3Rpb24odCxlLG4pe3ZhciByPXthY3Rvcjp0LHBsYWNlbWVudDplLG1lc3NhZ2U6bi50ZXh0LHdyYXA6dm9pZCAwPT09bi53cmFwJiZLbigpfHwhIW4ud3JhcH0saT1bXS5jb25jYXQodCx0KTtWbi5wdXNoKHIpLFduLnB1c2goe2Zyb206aVswXSx0bzppWzFdLG1lc3NhZ2U6bi50ZXh0LHdyYXA6dm9pZCAwPT09bi53cmFwJiZLbigpfHwhIW4ud3JhcCx0eXBlOnRyLk5PVEUscGxhY2VtZW50OmV9KX0sbnI9ZnVuY3Rpb24odCl7SG49dC50ZXh0LEduPXZvaWQgMD09PXQud3JhcCYmS24oKXx8ISF0LndyYXB9LHJyPXthZGRBY3RvcjpabixhZGRNZXNzYWdlOmZ1bmN0aW9uKHQsZSxuLHIpe1duLnB1c2goe2Zyb206dCx0bzplLG1lc3NhZ2U6bi50ZXh0LHdyYXA6dm9pZCAwPT09bi53cmFwJiZLbigpfHwhIW4ud3JhcCxhbnN3ZXI6cn0pfSxhZGRTaWduYWw6UW4sYXV0b1dyYXA6S24sc2V0V3JhcDpmdW5jdGlvbih0KXtYbj10fSxlbmFibGVTZXF1ZW5jZU51bWJlcnM6ZnVuY3Rpb24oKXtxbj0hMH0sc2hvd1NlcXVlbmNlTnVtYmVyczpmdW5jdGlvbigpe3JldHVybiBxbn0sZ2V0TWVzc2FnZXM6ZnVuY3Rpb24oKXtyZXR1cm4gV259LGdldEFjdG9yczpmdW5jdGlvbigpe3JldHVybiAkbn0sZ2V0QWN0b3I6ZnVuY3Rpb24odCl7cmV0dXJuICRuW3RdfSxnZXRBY3RvcktleXM6ZnVuY3Rpb24oKXtyZXR1cm4gT2JqZWN0LmtleXMoJG4pfSxnZXRUaXRsZTpmdW5jdGlvbigpe3JldHVybiBIbn0scGFyc2VEaXJlY3RpdmU6ZnVuY3Rpb24odCxlLG4pe3pvLnBhcnNlRGlyZWN0aXZlKHRoaXMsdCxlLG4pfSxnZXRDb25maWc6ZnVuY3Rpb24oKXtyZXR1cm4geHQoKS5zZXF1ZW5jZX0sZ2V0VGl0bGVXcmFwcGVkOmZ1bmN0aW9uKCl7cmV0dXJuIEdufSxjbGVhcjpmdW5jdGlvbigpeyRuPXt9LFduPVtdfSxwYXJzZU1lc3NhZ2U6ZnVuY3Rpb24odCl7dmFyIGU9dC50cmltKCksbj17dGV4dDplLnJlcGxhY2UoL15bOl0/KD86bm8pP3dyYXA6LywiIikudHJpbSgpLHdyYXA6bnVsbD09PWUubWF0Y2goL15bOl0/KD86bm8pP3dyYXA6Lyk/eC5oYXNCcmVha3MoZSl8fHZvaWQgMDpudWxsIT09ZS5tYXRjaCgvXls6XT93cmFwOi8pfHxudWxsPT09ZS5tYXRjaCgvXls6XT9ub3dyYXA6LykmJnZvaWQgMH07cmV0dXJuIGYuZGVidWcoInBhcnNlTWVzc2FnZToiLG4pLG59LExJTkVUWVBFOnRyLEFSUk9XVFlQRTp7RklMTEVEOjAsT1BFTjoxfSxQTEFDRU1FTlQ6e0xFRlRPRjowLFJJR0hUT0Y6MSxPVkVSOjJ9LGFkZE5vdGU6ZXIsc2V0VGl0bGU6bnIsYXBwbHk6ZnVuY3Rpb24gdChlKXtpZihlIGluc3RhbmNlb2YgQXJyYXkpZS5mb3JFYWNoKChmdW5jdGlvbihlKXt0KGUpfSkpO2Vsc2Ugc3dpdGNoKGUudHlwZSl7Y2FzZSJhZGRBY3RvciI6Wm4oZS5hY3RvcixlLmFjdG9yLGUuZGVzY3JpcHRpb24pO2JyZWFrO2Nhc2UiYWN0aXZlU3RhcnQiOmNhc2UiYWN0aXZlRW5kIjpRbihlLmFjdG9yLHZvaWQgMCx2b2lkIDAsZS5zaWduYWxUeXBlKTticmVhaztjYXNlImFkZE5vdGUiOmVyKGUuYWN0b3IsZS5wbGFjZW1lbnQsZS50ZXh0KTticmVhaztjYXNlImFkZE1lc3NhZ2UiOlFuKGUuZnJvbSxlLnRvLGUubXNnLGUuc2lnbmFsVHlwZSk7YnJlYWs7Y2FzZSJsb29wU3RhcnQiOlFuKHZvaWQgMCx2b2lkIDAsZS5sb29wVGV4dCxlLnNpZ25hbFR5cGUpO2JyZWFrO2Nhc2UibG9vcEVuZCI6UW4odm9pZCAwLHZvaWQgMCx2b2lkIDAsZS5zaWduYWxUeXBlKTticmVhaztjYXNlInJlY3RTdGFydCI6UW4odm9pZCAwLHZvaWQgMCxlLmNvbG9yLGUuc2lnbmFsVHlwZSk7YnJlYWs7Y2FzZSJyZWN0RW5kIjpRbih2b2lkIDAsdm9pZCAwLHZvaWQgMCxlLnNpZ25hbFR5cGUpO2JyZWFrO2Nhc2Uib3B0U3RhcnQiOlFuKHZvaWQgMCx2b2lkIDAsZS5vcHRUZXh0LGUuc2lnbmFsVHlwZSk7YnJlYWs7Y2FzZSJvcHRFbmQiOlFuKHZvaWQgMCx2b2lkIDAsdm9pZCAwLGUuc2lnbmFsVHlwZSk7YnJlYWs7Y2FzZSJhbHRTdGFydCI6Y2FzZSJlbHNlIjpRbih2b2lkIDAsdm9pZCAwLGUuYWx0VGV4dCxlLnNpZ25hbFR5cGUpO2JyZWFrO2Nhc2UiYWx0RW5kIjpRbih2b2lkIDAsdm9pZCAwLHZvaWQgMCxlLnNpZ25hbFR5cGUpO2JyZWFrO2Nhc2Uic2V0VGl0bGUiOm5yKGUudGV4dCk7YnJlYWs7Y2FzZSJwYXJTdGFydCI6Y2FzZSJhbmQiOlFuKHZvaWQgMCx2b2lkIDAsZS5wYXJUZXh0LGUuc2lnbmFsVHlwZSk7YnJlYWs7Y2FzZSJwYXJFbmQiOlFuKHZvaWQgMCx2b2lkIDAsdm9pZCAwLGUuc2lnbmFsVHlwZSl9fX07WW4ucGFyc2VyLnl5PXJyO3ZhciBpcj17fSxhcj17ZGF0YTp7c3RhcnR4OnZvaWQgMCxzdG9weDp2b2lkIDAsc3RhcnR5OnZvaWQgMCxzdG9weTp2b2lkIDB9LHZlcnRpY2FsUG9zOjAsc2VxdWVuY2VJdGVtczpbXSxhY3RpdmF0aW9uczpbXSxtb2RlbHM6e2dldEhlaWdodDpmdW5jdGlvbigpe3JldHVybiBNYXRoLm1heC5hcHBseShudWxsLDA9PT10aGlzLmFjdG9ycy5sZW5ndGg/WzBdOnRoaXMuYWN0b3JzLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIHQuaGVpZ2h0fHwwfSkpKSsoMD09PXRoaXMubG9vcHMubGVuZ3RoPzA6dGhpcy5sb29wcy5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiB0LmhlaWdodHx8MH0pKS5yZWR1Y2UoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQrZX0pKSkrKDA9PT10aGlzLm1lc3NhZ2VzLmxlbmd0aD8wOnRoaXMubWVzc2FnZXMubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gdC5oZWlnaHR8fDB9KSkucmVkdWNlKChmdW5jdGlvbih0LGUpe3JldHVybiB0K2V9KSkpKygwPT09dGhpcy5ub3Rlcy5sZW5ndGg/MDp0aGlzLm5vdGVzLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIHQuaGVpZ2h0fHwwfSkpLnJlZHVjZSgoZnVuY3Rpb24odCxlKXtyZXR1cm4gdCtlfSkpKX0sY2xlYXI6ZnVuY3Rpb24oKXt0aGlzLmFjdG9ycz1bXSx0aGlzLmxvb3BzPVtdLHRoaXMubWVzc2FnZXM9W10sdGhpcy5ub3Rlcz1bXX0sYWRkQWN0b3I6ZnVuY3Rpb24odCl7dGhpcy5hY3RvcnMucHVzaCh0KX0sYWRkTG9vcDpmdW5jdGlvbih0KXt0aGlzLmxvb3BzLnB1c2godCl9LGFkZE1lc3NhZ2U6ZnVuY3Rpb24odCl7dGhpcy5tZXNzYWdlcy5wdXNoKHQpfSxhZGROb3RlOmZ1bmN0aW9uKHQpe3RoaXMubm90ZXMucHVzaCh0KX0sbGFzdEFjdG9yOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYWN0b3JzW3RoaXMuYWN0b3JzLmxlbmd0aC0xXX0sbGFzdExvb3A6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5sb29wc1t0aGlzLmxvb3BzLmxlbmd0aC0xXX0sbGFzdE1lc3NhZ2U6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tZXNzYWdlc1t0aGlzLm1lc3NhZ2VzLmxlbmd0aC0xXX0sbGFzdE5vdGU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ub3Rlc1t0aGlzLm5vdGVzLmxlbmd0aC0xXX0sYWN0b3JzOltdLGxvb3BzOltdLG1lc3NhZ2VzOltdLG5vdGVzOltdfSxpbml0OmZ1bmN0aW9uKCl7dGhpcy5zZXF1ZW5jZUl0ZW1zPVtdLHRoaXMuYWN0aXZhdGlvbnM9W10sdGhpcy5tb2RlbHMuY2xlYXIoKSx0aGlzLmRhdGE9e3N0YXJ0eDp2b2lkIDAsc3RvcHg6dm9pZCAwLHN0YXJ0eTp2b2lkIDAsc3RvcHk6dm9pZCAwfSx0aGlzLnZlcnRpY2FsUG9zPTAsbHIoWW4ucGFyc2VyLnl5LmdldENvbmZpZygpKX0sdXBkYXRlVmFsOmZ1bmN0aW9uKHQsZSxuLHIpe3ZvaWQgMD09PXRbZV0/dFtlXT1uOnRbZV09cihuLHRbZV0pfSx1cGRhdGVCb3VuZHM6ZnVuY3Rpb24odCxlLG4scil7dmFyIGk9dGhpcyxhPTA7ZnVuY3Rpb24gbyhvKXtyZXR1cm4gZnVuY3Rpb24ocyl7YSsrO3ZhciBjPWkuc2VxdWVuY2VJdGVtcy5sZW5ndGgtYSsxO2kudXBkYXRlVmFsKHMsInN0YXJ0eSIsZS1jKmlyLmJveE1hcmdpbixNYXRoLm1pbiksaS51cGRhdGVWYWwocywic3RvcHkiLHIrYyppci5ib3hNYXJnaW4sTWF0aC5tYXgpLGkudXBkYXRlVmFsKGFyLmRhdGEsInN0YXJ0eCIsdC1jKmlyLmJveE1hcmdpbixNYXRoLm1pbiksaS51cGRhdGVWYWwoYXIuZGF0YSwic3RvcHgiLG4rYyppci5ib3hNYXJnaW4sTWF0aC5tYXgpLCJhY3RpdmF0aW9uIiE9PW8mJihpLnVwZGF0ZVZhbChzLCJzdGFydHgiLHQtYyppci5ib3hNYXJnaW4sTWF0aC5taW4pLGkudXBkYXRlVmFsKHMsInN0b3B4IixuK2MqaXIuYm94TWFyZ2luLE1hdGgubWF4KSxpLnVwZGF0ZVZhbChhci5kYXRhLCJzdGFydHkiLGUtYyppci5ib3hNYXJnaW4sTWF0aC5taW4pLGkudXBkYXRlVmFsKGFyLmRhdGEsInN0b3B5IixyK2MqaXIuYm94TWFyZ2luLE1hdGgubWF4KSl9fXRoaXMuc2VxdWVuY2VJdGVtcy5mb3JFYWNoKG8oKSksdGhpcy5hY3RpdmF0aW9ucy5mb3JFYWNoKG8oImFjdGl2YXRpb24iKSl9LGluc2VydDpmdW5jdGlvbih0LGUsbixyKXt2YXIgaT1NYXRoLm1pbih0LG4pLGE9TWF0aC5tYXgodCxuKSxvPU1hdGgubWluKGUscikscz1NYXRoLm1heChlLHIpO3RoaXMudXBkYXRlVmFsKGFyLmRhdGEsInN0YXJ0eCIsaSxNYXRoLm1pbiksdGhpcy51cGRhdGVWYWwoYXIuZGF0YSwic3RhcnR5IixvLE1hdGgubWluKSx0aGlzLnVwZGF0ZVZhbChhci5kYXRhLCJzdG9weCIsYSxNYXRoLm1heCksdGhpcy51cGRhdGVWYWwoYXIuZGF0YSwic3RvcHkiLHMsTWF0aC5tYXgpLHRoaXMudXBkYXRlQm91bmRzKGksbyxhLHMpfSxuZXdBY3RpdmF0aW9uOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uW3QuZnJvbS5hY3Rvcl0saT1ocih0LmZyb20uYWN0b3IpLmxlbmd0aHx8MCxhPXIueCtyLndpZHRoLzIrKGktMSkqaXIuYWN0aXZhdGlvbldpZHRoLzI7dGhpcy5hY3RpdmF0aW9ucy5wdXNoKHtzdGFydHg6YSxzdGFydHk6dGhpcy52ZXJ0aWNhbFBvcysyLHN0b3B4OmEraXIuYWN0aXZhdGlvbldpZHRoLHN0b3B5OnZvaWQgMCxhY3Rvcjp0LmZyb20uYWN0b3IsYW5jaG9yZWQ6Um4uYW5jaG9yRWxlbWVudChlKX0pfSxlbmRBY3RpdmF0aW9uOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuYWN0aXZhdGlvbnMubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gdC5hY3Rvcn0pKS5sYXN0SW5kZXhPZih0LmZyb20uYWN0b3IpO3JldHVybiB0aGlzLmFjdGl2YXRpb25zLnNwbGljZShlLDEpWzBdfSxjcmVhdGVMb29wOmZ1bmN0aW9uKCl7dmFyIHQ9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOnttZXNzYWdlOnZvaWQgMCx3cmFwOiExLHdpZHRoOnZvaWQgMH0sZT1hcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOnZvaWQgMDtyZXR1cm57c3RhcnR4OnZvaWQgMCxzdGFydHk6dGhpcy52ZXJ0aWNhbFBvcyxzdG9weDp2b2lkIDAsc3RvcHk6dm9pZCAwLHRpdGxlOnQubWVzc2FnZSx3cmFwOnQud3JhcCx3aWR0aDp0LndpZHRoLGhlaWdodDowLGZpbGw6ZX19LG5ld0xvb3A6ZnVuY3Rpb24oKXt2YXIgdD1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06e21lc3NhZ2U6dm9pZCAwLHdyYXA6ITEsd2lkdGg6dm9pZCAwfSxlPWFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dm9pZCAwO3RoaXMuc2VxdWVuY2VJdGVtcy5wdXNoKHRoaXMuY3JlYXRlTG9vcCh0LGUpKX0sZW5kTG9vcDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnNlcXVlbmNlSXRlbXMucG9wKCl9LGFkZFNlY3Rpb25Ub0xvb3A6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5zZXF1ZW5jZUl0ZW1zLnBvcCgpO2Uuc2VjdGlvbnM9ZS5zZWN0aW9uc3x8W10sZS5zZWN0aW9uVGl0bGVzPWUuc2VjdGlvblRpdGxlc3x8W10sZS5zZWN0aW9ucy5wdXNoKHt5OmFyLmdldFZlcnRpY2FsUG9zKCksaGVpZ2h0OjB9KSxlLnNlY3Rpb25UaXRsZXMucHVzaCh0KSx0aGlzLnNlcXVlbmNlSXRlbXMucHVzaChlKX0sYnVtcFZlcnRpY2FsUG9zOmZ1bmN0aW9uKHQpe3RoaXMudmVydGljYWxQb3M9dGhpcy52ZXJ0aWNhbFBvcyt0LHRoaXMuZGF0YS5zdG9weT10aGlzLnZlcnRpY2FsUG9zfSxnZXRWZXJ0aWNhbFBvczpmdW5jdGlvbigpe3JldHVybiB0aGlzLnZlcnRpY2FsUG9zfSxnZXRCb3VuZHM6ZnVuY3Rpb24oKXtyZXR1cm57Ym91bmRzOnRoaXMuZGF0YSxtb2RlbHM6dGhpcy5tb2RlbHN9fX0sb3I9ZnVuY3Rpb24odCl7cmV0dXJue2ZvbnRGYW1pbHk6dC5tZXNzYWdlRm9udEZhbWlseSxmb250U2l6ZTp0Lm1lc3NhZ2VGb250U2l6ZSxmb250V2VpZ2h0OnQubWVzc2FnZUZvbnRXZWlnaHR9fSxzcj1mdW5jdGlvbih0KXtyZXR1cm57Zm9udEZhbWlseTp0Lm5vdGVGb250RmFtaWx5LGZvbnRTaXplOnQubm90ZUZvbnRTaXplLGZvbnRXZWlnaHQ6dC5ub3RlRm9udFdlaWdodH19LGNyPWZ1bmN0aW9uKHQpe3JldHVybntmb250RmFtaWx5OnQuYWN0b3JGb250RmFtaWx5LGZvbnRTaXplOnQuYWN0b3JGb250U2l6ZSxmb250V2VpZ2h0OnQuYWN0b3JGb250V2VpZ2h0fX0sdXI9ZnVuY3Rpb24odCxlLG4scil7Zm9yKHZhciBpPTAsYT0wLG89MDtvPG4ubGVuZ3RoO28rKyl7dmFyIHM9ZVtuW29dXTtzLndpZHRoPXMud2lkdGh8fGlyLndpZHRoLHMuaGVpZ2h0PU1hdGgubWF4KHMuaGVpZ2h0fHxpci5oZWlnaHQsaXIuaGVpZ2h0KSxzLm1hcmdpbj1zLm1hcmdpbnx8aXIuYWN0b3JNYXJnaW4scy54PWkrYSxzLnk9cixSbi5kcmF3QWN0b3IodCxzLGlyKSxhci5pbnNlcnQocy54LHIscy54K3Mud2lkdGgscy5oZWlnaHQpLGkrPXMud2lkdGgsYSs9cy5tYXJnaW4sYXIubW9kZWxzLmFkZEFjdG9yKHMpfWFyLmJ1bXBWZXJ0aWNhbFBvcyhpci5oZWlnaHQpfSxscj1mdW5jdGlvbih0KXtQKGlyLHQpLHQuZm9udEZhbWlseSYmKGlyLmFjdG9yRm9udEZhbWlseT1pci5ub3RlRm9udEZhbWlseT1pci5tZXNzYWdlRm9udEZhbWlseT10LmZvbnRGYW1pbHkpLHQuZm9udFNpemUmJihpci5hY3RvckZvbnRTaXplPWlyLm5vdGVGb250U2l6ZT1pci5tZXNzYWdlRm9udFNpemU9dC5mb250U2l6ZSksdC5mb250V2VpZ2h0JiYoaXIuYWN0b3JGb250V2VpZ2h0PWlyLm5vdGVGb250V2VpZ2h0PWlyLm1lc3NhZ2VGb250V2VpZ2h0PXQuZm9udFdlaWdodCl9LGhyPWZ1bmN0aW9uKHQpe3JldHVybiBhci5hY3RpdmF0aW9ucy5maWx0ZXIoKGZ1bmN0aW9uKGUpe3JldHVybiBlLmFjdG9yPT09dH0pKX0sZnI9ZnVuY3Rpb24odCxlKXt2YXIgbj1lW3RdLHI9aHIodCk7cmV0dXJuW3IucmVkdWNlKChmdW5jdGlvbih0LGUpe3JldHVybiBNYXRoLm1pbih0LGUuc3RhcnR4KX0pLG4ueCtuLndpZHRoLzIpLHIucmVkdWNlKChmdW5jdGlvbih0LGUpe3JldHVybiBNYXRoLm1heCh0LGUuc3RvcHgpfSksbi54K24ud2lkdGgvMildfTtmdW5jdGlvbiBkcih0LGUsbixyLGkpe2FyLmJ1bXBWZXJ0aWNhbFBvcyhuKTt2YXIgYT1yO2lmKGUuaWQmJmUubWVzc2FnZSYmdFtlLmlkXSl7dmFyIG89dFtlLmlkXS53aWR0aCxzPW9yKGlyKTtlLm1lc3NhZ2U9Vy53cmFwTGFiZWwoIlsiLmNvbmNhdChlLm1lc3NhZ2UsIl0iKSxvLTIqaXIud3JhcFBhZGRpbmcscyksZS53aWR0aD1vLGUud3JhcD0hMDt2YXIgYz1XLmNhbGN1bGF0ZVRleHREaW1lbnNpb25zKGUubWVzc2FnZSxzKSx1PU1hdGgubWF4KGMuaGVpZ2h0LGlyLmxhYmVsQm94SGVpZ2h0KTthPXIrdSxmLmRlYnVnKCIiLmNvbmNhdCh1LCIgLSAiKS5jb25jYXQoZS5tZXNzYWdlKSl9aShlKSxhci5idW1wVmVydGljYWxQb3MoYSl9dmFyIHByPWZ1bmN0aW9uKHQsZSl7dmFyIG49e307cmV0dXJuIGUuZm9yRWFjaCgoZnVuY3Rpb24oZSl7aWYodFtlLnRvXSYmdFtlLmZyb21dKXt2YXIgcj10W2UudG9dO2lmKGUucGxhY2VtZW50PT09WW4ucGFyc2VyLnl5LlBMQUNFTUVOVC5MRUZUT0YmJiFyLnByZXZBY3RvcilyZXR1cm47aWYoZS5wbGFjZW1lbnQ9PT1Zbi5wYXJzZXIueXkuUExBQ0VNRU5ULlJJR0hUT0YmJiFyLm5leHRBY3RvcilyZXR1cm47dmFyIGk9dm9pZCAwIT09ZS5wbGFjZW1lbnQsYT0haSxvPWk/c3IoaXIpOm9yKGlyKSxzPWUud3JhcD9XLndyYXBMYWJlbChlLm1lc3NhZ2UsaXIud2lkdGgtMippci53cmFwUGFkZGluZyxvKTplLm1lc3NhZ2UsYz1XLmNhbGN1bGF0ZVRleHREaW1lbnNpb25zKHMsbykud2lkdGgrMippci53cmFwUGFkZGluZzthJiZlLmZyb209PT1yLm5leHRBY3Rvcj9uW2UudG9dPU1hdGgubWF4KG5bZS50b118fDAsYyk6YSYmZS5mcm9tPT09ci5wcmV2QWN0b3I/bltlLmZyb21dPU1hdGgubWF4KG5bZS5mcm9tXXx8MCxjKTphJiZlLmZyb209PT1lLnRvPyhuW2UuZnJvbV09TWF0aC5tYXgobltlLmZyb21dfHwwLGMvMiksbltlLnRvXT1NYXRoLm1heChuW2UudG9dfHwwLGMvMikpOmUucGxhY2VtZW50PT09WW4ucGFyc2VyLnl5LlBMQUNFTUVOVC5SSUdIVE9GP25bZS5mcm9tXT1NYXRoLm1heChuW2UuZnJvbV18fDAsYyk6ZS5wbGFjZW1lbnQ9PT1Zbi5wYXJzZXIueXkuUExBQ0VNRU5ULkxFRlRPRj9uW3IucHJldkFjdG9yXT1NYXRoLm1heChuW3IucHJldkFjdG9yXXx8MCxjKTplLnBsYWNlbWVudD09PVluLnBhcnNlci55eS5QTEFDRU1FTlQuT1ZFUiYmKHIucHJldkFjdG9yJiYobltyLnByZXZBY3Rvcl09TWF0aC5tYXgobltyLnByZXZBY3Rvcl18fDAsYy8yKSksci5uZXh0QWN0b3ImJihuW2UuZnJvbV09TWF0aC5tYXgobltlLmZyb21dfHwwLGMvMikpKX19KSksZi5kZWJ1ZygibWF4TWVzc2FnZVdpZHRoUGVyQWN0b3I6IixuKSxufSxncj1mdW5jdGlvbih0LGUpe3ZhciBuPTA7Zm9yKHZhciByIGluIE9iamVjdC5rZXlzKHQpLmZvckVhY2goKGZ1bmN0aW9uKGUpe3ZhciByPXRbZV07ci53cmFwJiYoci5kZXNjcmlwdGlvbj1XLndyYXBMYWJlbChyLmRlc2NyaXB0aW9uLGlyLndpZHRoLTIqaXIud3JhcFBhZGRpbmcsY3IoaXIpKSk7dmFyIGk9Vy5jYWxjdWxhdGVUZXh0RGltZW5zaW9ucyhyLmRlc2NyaXB0aW9uLGNyKGlyKSk7ci53aWR0aD1yLndyYXA/aXIud2lkdGg6TWF0aC5tYXgoaXIud2lkdGgsaS53aWR0aCsyKmlyLndyYXBQYWRkaW5nKSxyLmhlaWdodD1yLndyYXA/TWF0aC5tYXgoaS5oZWlnaHQsaXIuaGVpZ2h0KTppci5oZWlnaHQsbj1NYXRoLm1heChuLHIuaGVpZ2h0KX0pKSxlKXt2YXIgaT10W3JdO2lmKGkpe3ZhciBhPXRbaS5uZXh0QWN0b3JdO2lmKGEpe3ZhciBvPWVbcl0raXIuYWN0b3JNYXJnaW4taS53aWR0aC8yLWEud2lkdGgvMjtpLm1hcmdpbj1NYXRoLm1heChvLGlyLmFjdG9yTWFyZ2luKX19fXJldHVybiBNYXRoLm1heChuLGlyLmhlaWdodCl9LHlyPWZ1bmN0aW9uKHQsZSl7dmFyIG4scixpLGE9e30sbz1bXTtyZXR1cm4gdC5mb3JFYWNoKChmdW5jdGlvbih0KXtzd2l0Y2godC5pZD1XLnJhbmRvbSh7bGVuZ3RoOjEwfSksdC50eXBlKXtjYXNlIFluLnBhcnNlci55eS5MSU5FVFlQRS5MT09QX1NUQVJUOmNhc2UgWW4ucGFyc2VyLnl5LkxJTkVUWVBFLkFMVF9TVEFSVDpjYXNlIFluLnBhcnNlci55eS5MSU5FVFlQRS5PUFRfU1RBUlQ6Y2FzZSBZbi5wYXJzZXIueXkuTElORVRZUEUuUEFSX1NUQVJUOm8ucHVzaCh7aWQ6dC5pZCxtc2c6dC5tZXNzYWdlLGZyb206TnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIsdG86TnVtYmVyLk1JTl9TQUZFX0lOVEVHRVIsd2lkdGg6MH0pO2JyZWFrO2Nhc2UgWW4ucGFyc2VyLnl5LkxJTkVUWVBFLkFMVF9FTFNFOmNhc2UgWW4ucGFyc2VyLnl5LkxJTkVUWVBFLlBBUl9BTkQ6dC5tZXNzYWdlJiYobj1vLnBvcCgpLGFbbi5pZF09bixhW3QuaWRdPW4sby5wdXNoKG4pKTticmVhaztjYXNlIFluLnBhcnNlci55eS5MSU5FVFlQRS5MT09QX0VORDpjYXNlIFluLnBhcnNlci55eS5MSU5FVFlQRS5BTFRfRU5EOmNhc2UgWW4ucGFyc2VyLnl5LkxJTkVUWVBFLk9QVF9FTkQ6Y2FzZSBZbi5wYXJzZXIueXkuTElORVRZUEUuUEFSX0VORDpuPW8ucG9wKCksYVtuLmlkXT1uO2JyZWFrO2Nhc2UgWW4ucGFyc2VyLnl5LkxJTkVUWVBFLkFDVElWRV9TVEFSVDp2YXIgcz1lW3QuZnJvbT90LmZyb20uYWN0b3I6dC50by5hY3Rvcl0sYz1ocih0LmZyb20/dC5mcm9tLmFjdG9yOnQudG8uYWN0b3IpLmxlbmd0aCx1PXMueCtzLndpZHRoLzIrKGMtMSkqaXIuYWN0aXZhdGlvbldpZHRoLzIsbD17c3RhcnR4OnUsc3RvcHg6dStpci5hY3RpdmF0aW9uV2lkdGgsYWN0b3I6dC5mcm9tLmFjdG9yLGVuYWJsZWQ6ITB9O2FyLmFjdGl2YXRpb25zLnB1c2gobCk7YnJlYWs7Y2FzZSBZbi5wYXJzZXIueXkuTElORVRZUEUuQUNUSVZFX0VORDp2YXIgaD1hci5hY3RpdmF0aW9ucy5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiB0LmFjdG9yfSkpLmxhc3RJbmRleE9mKHQuZnJvbS5hY3Rvcik7ZGVsZXRlIGFyLmFjdGl2YXRpb25zLnNwbGljZShoLDEpWzBdfXZvaWQgMCE9PXQucGxhY2VtZW50PyhyPWZ1bmN0aW9uKHQsZSl7dmFyIG49ZVt0LmZyb21dLngscj1lW3QudG9dLngsaT10LndyYXAmJnQubWVzc2FnZSxhPVcuY2FsY3VsYXRlVGV4dERpbWVuc2lvbnMoaT9XLndyYXBMYWJlbCh0Lm1lc3NhZ2UsaXIud2lkdGgsc3IoaXIpKTp0Lm1lc3NhZ2Usc3IoaXIpKSxvPXt3aWR0aDppP2lyLndpZHRoOk1hdGgubWF4KGlyLndpZHRoLGEud2lkdGgrMippci5ub3RlTWFyZ2luKSxoZWlnaHQ6MCxzdGFydHg6ZVt0LmZyb21dLngsc3RvcHg6MCxzdGFydHk6MCxzdG9weTowLG1lc3NhZ2U6dC5tZXNzYWdlfTtyZXR1cm4gdC5wbGFjZW1lbnQ9PT1Zbi5wYXJzZXIueXkuUExBQ0VNRU5ULlJJR0hUT0Y/KG8ud2lkdGg9aT9NYXRoLm1heChpci53aWR0aCxhLndpZHRoKTpNYXRoLm1heChlW3QuZnJvbV0ud2lkdGgvMitlW3QudG9dLndpZHRoLzIsYS53aWR0aCsyKmlyLm5vdGVNYXJnaW4pLG8uc3RhcnR4PW4rKGVbdC5mcm9tXS53aWR0aCtpci5hY3Rvck1hcmdpbikvMik6dC5wbGFjZW1lbnQ9PT1Zbi5wYXJzZXIueXkuUExBQ0VNRU5ULkxFRlRPRj8oby53aWR0aD1pP01hdGgubWF4KGlyLndpZHRoLGEud2lkdGgrMippci5ub3RlTWFyZ2luKTpNYXRoLm1heChlW3QuZnJvbV0ud2lkdGgvMitlW3QudG9dLndpZHRoLzIsYS53aWR0aCsyKmlyLm5vdGVNYXJnaW4pLG8uc3RhcnR4PW4tby53aWR0aCsoZVt0LmZyb21dLndpZHRoLWlyLmFjdG9yTWFyZ2luKS8yKTp0LnRvPT09dC5mcm9tPyhhPVcuY2FsY3VsYXRlVGV4dERpbWVuc2lvbnMoaT9XLndyYXBMYWJlbCh0Lm1lc3NhZ2UsTWF0aC5tYXgoaXIud2lkdGgsZVt0LmZyb21dLndpZHRoKSxzcihpcikpOnQubWVzc2FnZSxzcihpcikpLG8ud2lkdGg9aT9NYXRoLm1heChpci53aWR0aCxlW3QuZnJvbV0ud2lkdGgpOk1hdGgubWF4KGVbdC5mcm9tXS53aWR0aCxpci53aWR0aCxhLndpZHRoKzIqaXIubm90ZU1hcmdpbiksby5zdGFydHg9bisoZVt0LmZyb21dLndpZHRoLW8ud2lkdGgpLzIpOihvLndpZHRoPU1hdGguYWJzKG4rZVt0LmZyb21dLndpZHRoLzItKHIrZVt0LnRvXS53aWR0aC8yKSkraXIuYWN0b3JNYXJnaW4sby5zdGFydHg9bjxyP24rZVt0LmZyb21dLndpZHRoLzItaXIuYWN0b3JNYXJnaW4vMjpyK2VbdC50b10ud2lkdGgvMi1pci5hY3Rvck1hcmdpbi8yKSxpJiYoby5tZXNzYWdlPVcud3JhcExhYmVsKHQubWVzc2FnZSxvLndpZHRoLTIqaXIud3JhcFBhZGRpbmcsc3IoaXIpKSksZi5kZWJ1ZygiTk06WyIuY29uY2F0KG8uc3RhcnR4LCIsIikuY29uY2F0KG8uc3RvcHgsIiwiKS5jb25jYXQoby5zdGFydHksIiwiKS5jb25jYXQoby5zdG9weSwiOiIpLmNvbmNhdChvLndpZHRoLCIsIikuY29uY2F0KG8uaGVpZ2h0LCI9IikuY29uY2F0KHQubWVzc2FnZSwiXSIpKSxvfSh0LGUpLHQubm90ZU1vZGVsPXIsby5mb3JFYWNoKChmdW5jdGlvbih0KXsobj10KS5mcm9tPU1hdGgubWluKG4uZnJvbSxyLnN0YXJ0eCksbi50bz1NYXRoLm1heChuLnRvLHIuc3RhcnR4K3Iud2lkdGgpLG4ud2lkdGg9TWF0aC5tYXgobi53aWR0aCxNYXRoLmFicyhuLmZyb20tbi50bykpLWlyLmxhYmVsQm94V2lkdGh9KSkpOihpPWZ1bmN0aW9uKHQsZSl7dmFyIG49ITE7aWYoW1luLnBhcnNlci55eS5MSU5FVFlQRS5TT0xJRF9PUEVOLFluLnBhcnNlci55eS5MSU5FVFlQRS5ET1RURURfT1BFTixZbi5wYXJzZXIueXkuTElORVRZUEUuU09MSUQsWW4ucGFyc2VyLnl5LkxJTkVUWVBFLkRPVFRFRCxZbi5wYXJzZXIueXkuTElORVRZUEUuU09MSURfQ1JPU1MsWW4ucGFyc2VyLnl5LkxJTkVUWVBFLkRPVFRFRF9DUk9TU10uaW5jbHVkZXModC50eXBlKSYmKG49ITApLCFuKXJldHVybnt9O3ZhciByPWZyKHQuZnJvbSxlKSxpPWZyKHQudG8sZSksYT1yWzBdPD1pWzBdPzE6MCxvPXJbMF08aVswXT8wOjEscz1yLmNvbmNhdChpKSxjPU1hdGguYWJzKGlbb10tclthXSksdT1XLmNhbGN1bGF0ZVRleHREaW1lbnNpb25zKHQubWVzc2FnZSxvcihpcikpO3JldHVybiB0LndyYXAmJnQubWVzc2FnZSYmKHQubWVzc2FnZT1XLndyYXBMYWJlbCh0Lm1lc3NhZ2UsTWF0aC5tYXgoYysyKmlyLndyYXBQYWRkaW5nLGlyLndpZHRoKSxvcihpcikpKSx7d2lkdGg6TWF0aC5tYXgodC53cmFwPzA6dS53aWR0aCsyKmlyLndyYXBQYWRkaW5nLGMrMippci53cmFwUGFkZGluZyxpci53aWR0aCksaGVpZ2h0OjAsc3RhcnR4OnJbYV0sc3RvcHg6aVtvXSxzdGFydHk6MCxzdG9weTowLG1lc3NhZ2U6dC5tZXNzYWdlLHR5cGU6dC50eXBlLHdyYXA6dC53cmFwLGZyb21Cb3VuZHM6TWF0aC5taW4uYXBwbHkobnVsbCxzKSx0b0JvdW5kczpNYXRoLm1heC5hcHBseShudWxsLHMpfX0odCxlKSx0Lm1zZ01vZGVsPWksaS5zdGFydHgmJmkuc3RvcHgmJm8ubGVuZ3RoPjAmJm8uZm9yRWFjaCgoZnVuY3Rpb24ocil7aWYobj1yLGkuc3RhcnR4PT09aS5zdG9weCl7dmFyIGE9ZVt0LmZyb21dLG89ZVt0LnRvXTtuLmZyb209TWF0aC5taW4oYS54LWkud2lkdGgvMixhLngtYS53aWR0aC8yLG4uZnJvbSksbi50bz1NYXRoLm1heChvLngraS53aWR0aC8yLG8ueCthLndpZHRoLzIsbi50byksbi53aWR0aD1NYXRoLm1heChuLndpZHRoLE1hdGguYWJzKG4udG8tbi5mcm9tKSktaXIubGFiZWxCb3hXaWR0aH1lbHNlIG4uZnJvbT1NYXRoLm1pbihpLnN0YXJ0eCxuLmZyb20pLG4udG89TWF0aC5tYXgoaS5zdG9weCxuLnRvKSxuLndpZHRoPU1hdGgubWF4KG4ud2lkdGgsaS53aWR0aCktaXIubGFiZWxCb3hXaWR0aH0pKSl9KSksYXIuYWN0aXZhdGlvbnM9W10sZi5kZWJ1ZygiTG9vcCB0eXBlIHdpZHRoczoiLGEpLGF9LHZyPXtib3VuZHM6YXIsZHJhd0FjdG9yczp1cixzZXRDb25mOmxyLGRyYXc6ZnVuY3Rpb24odCxlKXtpcj14dCgpLnNlcXVlbmNlLFluLnBhcnNlci55eS5jbGVhcigpLFluLnBhcnNlci55eS5zZXRXcmFwKGlyLndyYXApLFluLnBhcnNlci5wYXJzZSh0KyJcbiIpLGFyLmluaXQoKSxmLmRlYnVnKCJDOiIuY29uY2F0KEpTT04uc3RyaW5naWZ5KGlyLG51bGwsMikpKTt2YXIgbj1PYmplY3Qocy5zZWxlY3QpKCdbaWQ9IicuY29uY2F0KGUsJyJdJykpLHI9WW4ucGFyc2VyLnl5LmdldEFjdG9ycygpLGk9WW4ucGFyc2VyLnl5LmdldEFjdG9yS2V5cygpLGE9WW4ucGFyc2VyLnl5LmdldE1lc3NhZ2VzKCksbz1Zbi5wYXJzZXIueXkuZ2V0VGl0bGUoKSxjPXByKHIsYSk7aXIuaGVpZ2h0PWdyKHIsYyksdXIobixyLGksMCk7dmFyIHU9eXIoYSxyLGMpO1JuLmluc2VydEFycm93SGVhZChuKSxSbi5pbnNlcnRBcnJvd0Nyb3NzSGVhZChuKSxSbi5pbnNlcnRTZXF1ZW5jZU51bWJlcihuKTt2YXIgbD0xO2EuZm9yRWFjaCgoZnVuY3Rpb24odCl7dmFyIGUsaSxhO3N3aXRjaCh0LnR5cGUpe2Nhc2UgWW4ucGFyc2VyLnl5LkxJTkVUWVBFLk5PVEU6aT10Lm5vdGVNb2RlbCxmdW5jdGlvbih0LGUpe2FyLmJ1bXBWZXJ0aWNhbFBvcyhpci5ib3hNYXJnaW4pLGUuaGVpZ2h0PWlyLmJveE1hcmdpbixlLnN0YXJ0eT1hci5nZXRWZXJ0aWNhbFBvcygpO3ZhciBuPVJuLmdldE5vdGVSZWN0KCk7bi54PWUuc3RhcnR4LG4ueT1lLnN0YXJ0eSxuLndpZHRoPWUud2lkdGh8fGlyLndpZHRoLG4uY2xhc3M9Im5vdGUiO3ZhciByPXQuYXBwZW5kKCJnIiksaT1Sbi5kcmF3UmVjdChyLG4pLGE9Um4uZ2V0VGV4dE9iaigpO2EueD1lLnN0YXJ0eCxhLnk9ZS5zdGFydHksYS53aWR0aD1uLndpZHRoLGEuZHk9IjFlbSIsYS50ZXh0PWUubWVzc2FnZSxhLmNsYXNzPSJub3RlVGV4dCIsYS5mb250RmFtaWx5PWlyLm5vdGVGb250RmFtaWx5LGEuZm9udFNpemU9aXIubm90ZUZvbnRTaXplLGEuZm9udFdlaWdodD1pci5ub3RlRm9udFdlaWdodCxhLmFuY2hvcj1pci5ub3RlQWxpZ24sYS50ZXh0TWFyZ2luPWlyLm5vdGVNYXJnaW4sYS52YWxpZ249aXIubm90ZUFsaWduLGEud3JhcD0hMDt2YXIgbz1CbihyLGEpLHM9TWF0aC5yb3VuZChvLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuKHQuX2dyb3Vwc3x8dClbMF1bMF0uZ2V0QkJveCgpLmhlaWdodH0pKS5yZWR1Y2UoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQrZX0pKSk7aS5hdHRyKCJoZWlnaHQiLHMrMippci5ub3RlTWFyZ2luKSxlLmhlaWdodCs9cysyKmlyLm5vdGVNYXJnaW4sYXIuYnVtcFZlcnRpY2FsUG9zKHMrMippci5ub3RlTWFyZ2luKSxlLnN0b3B5PWUuc3RhcnR5K3MrMippci5ub3RlTWFyZ2luLGUuc3RvcHg9ZS5zdGFydHgrbi53aWR0aCxhci5pbnNlcnQoZS5zdGFydHgsZS5zdGFydHksZS5zdG9weCxlLnN0b3B5KSxhci5tb2RlbHMuYWRkTm90ZShlKX0obixpKTticmVhaztjYXNlIFluLnBhcnNlci55eS5MSU5FVFlQRS5BQ1RJVkVfU1RBUlQ6YXIubmV3QWN0aXZhdGlvbih0LG4scik7YnJlYWs7Y2FzZSBZbi5wYXJzZXIueXkuTElORVRZUEUuQUNUSVZFX0VORDohZnVuY3Rpb24odCxlKXt2YXIgcj1hci5lbmRBY3RpdmF0aW9uKHQpO3Iuc3RhcnR5KzE4PmUmJihyLnN0YXJ0eT1lLTYsZSs9MTIpLFJuLmRyYXdBY3RpdmF0aW9uKG4scixlLGlyLGhyKHQuZnJvbS5hY3RvcikubGVuZ3RoKSxhci5pbnNlcnQoci5zdGFydHgsZS0xMCxyLnN0b3B4LGUpfSh0LGFyLmdldFZlcnRpY2FsUG9zKCkpO2JyZWFrO2Nhc2UgWW4ucGFyc2VyLnl5LkxJTkVUWVBFLkxPT1BfU1RBUlQ6ZHIodSx0LGlyLmJveE1hcmdpbixpci5ib3hNYXJnaW4raXIuYm94VGV4dE1hcmdpbiwoZnVuY3Rpb24odCl7cmV0dXJuIGFyLm5ld0xvb3AodCl9KSk7YnJlYWs7Y2FzZSBZbi5wYXJzZXIueXkuTElORVRZUEUuTE9PUF9FTkQ6ZT1hci5lbmRMb29wKCksUm4uZHJhd0xvb3AobixlLCJsb29wIixpciksYXIuYnVtcFZlcnRpY2FsUG9zKGUuc3RvcHktYXIuZ2V0VmVydGljYWxQb3MoKSksYXIubW9kZWxzLmFkZExvb3AoZSk7YnJlYWs7Y2FzZSBZbi5wYXJzZXIueXkuTElORVRZUEUuUkVDVF9TVEFSVDpkcih1LHQsaXIuYm94TWFyZ2luLGlyLmJveE1hcmdpbiwoZnVuY3Rpb24odCl7cmV0dXJuIGFyLm5ld0xvb3Aodm9pZCAwLHQubWVzc2FnZSl9KSk7YnJlYWs7Y2FzZSBZbi5wYXJzZXIueXkuTElORVRZUEUuUkVDVF9FTkQ6ZT1hci5lbmRMb29wKCksUm4uZHJhd0JhY2tncm91bmRSZWN0KG4sZSksYXIubW9kZWxzLmFkZExvb3AoZSksYXIuYnVtcFZlcnRpY2FsUG9zKGUuc3RvcHktYXIuZ2V0VmVydGljYWxQb3MoKSk7YnJlYWs7Y2FzZSBZbi5wYXJzZXIueXkuTElORVRZUEUuT1BUX1NUQVJUOmRyKHUsdCxpci5ib3hNYXJnaW4saXIuYm94TWFyZ2luK2lyLmJveFRleHRNYXJnaW4sKGZ1bmN0aW9uKHQpe3JldHVybiBhci5uZXdMb29wKHQpfSkpO2JyZWFrO2Nhc2UgWW4ucGFyc2VyLnl5LkxJTkVUWVBFLk9QVF9FTkQ6ZT1hci5lbmRMb29wKCksUm4uZHJhd0xvb3AobixlLCJvcHQiLGlyKSxhci5idW1wVmVydGljYWxQb3MoZS5zdG9weS1hci5nZXRWZXJ0aWNhbFBvcygpKSxhci5tb2RlbHMuYWRkTG9vcChlKTticmVhaztjYXNlIFluLnBhcnNlci55eS5MSU5FVFlQRS5BTFRfU1RBUlQ6ZHIodSx0LGlyLmJveE1hcmdpbixpci5ib3hNYXJnaW4raXIuYm94VGV4dE1hcmdpbiwoZnVuY3Rpb24odCl7cmV0dXJuIGFyLm5ld0xvb3AodCl9KSk7YnJlYWs7Y2FzZSBZbi5wYXJzZXIueXkuTElORVRZUEUuQUxUX0VMU0U6ZHIodSx0LGlyLmJveE1hcmdpbitpci5ib3hUZXh0TWFyZ2luLGlyLmJveE1hcmdpbiwoZnVuY3Rpb24odCl7cmV0dXJuIGFyLmFkZFNlY3Rpb25Ub0xvb3AodCl9KSk7YnJlYWs7Y2FzZSBZbi5wYXJzZXIueXkuTElORVRZUEUuQUxUX0VORDplPWFyLmVuZExvb3AoKSxSbi5kcmF3TG9vcChuLGUsImFsdCIsaXIpLGFyLmJ1bXBWZXJ0aWNhbFBvcyhlLnN0b3B5LWFyLmdldFZlcnRpY2FsUG9zKCkpLGFyLm1vZGVscy5hZGRMb29wKGUpO2JyZWFrO2Nhc2UgWW4ucGFyc2VyLnl5LkxJTkVUWVBFLlBBUl9TVEFSVDpkcih1LHQsaXIuYm94TWFyZ2luLGlyLmJveE1hcmdpbitpci5ib3hUZXh0TWFyZ2luLChmdW5jdGlvbih0KXtyZXR1cm4gYXIubmV3TG9vcCh0KX0pKTticmVhaztjYXNlIFluLnBhcnNlci55eS5MSU5FVFlQRS5QQVJfQU5EOmRyKHUsdCxpci5ib3hNYXJnaW4raXIuYm94VGV4dE1hcmdpbixpci5ib3hNYXJnaW4sKGZ1bmN0aW9uKHQpe3JldHVybiBhci5hZGRTZWN0aW9uVG9Mb29wKHQpfSkpO2JyZWFrO2Nhc2UgWW4ucGFyc2VyLnl5LkxJTkVUWVBFLlBBUl9FTkQ6ZT1hci5lbmRMb29wKCksUm4uZHJhd0xvb3AobixlLCJwYXIiLGlyKSxhci5idW1wVmVydGljYWxQb3MoZS5zdG9weS1hci5nZXRWZXJ0aWNhbFBvcygpKSxhci5tb2RlbHMuYWRkTG9vcChlKTticmVhaztkZWZhdWx0OnRyeXsoYT10Lm1zZ01vZGVsKS5zdGFydHk9YXIuZ2V0VmVydGljYWxQb3MoKSxhLnNlcXVlbmNlSW5kZXg9bCxmdW5jdGlvbih0LGUpe2FyLmJ1bXBWZXJ0aWNhbFBvcygxMCk7dmFyIG49ZS5zdGFydHgscj1lLnN0b3B4LGk9ZS5zdGFydHksYT1lLm1lc3NhZ2Usbz1lLnR5cGUscz1lLnNlcXVlbmNlSW5kZXgsYz1lLndyYXAsdT14LnNwbGl0QnJlYWtzKGEpLmxlbmd0aCxsPVcuY2FsY3VsYXRlVGV4dERpbWVuc2lvbnMoYSxvcihpcikpLGg9bC5oZWlnaHQvdTtlLmhlaWdodCs9aCxhci5idW1wVmVydGljYWxQb3MoaCk7dmFyIGY9Um4uZ2V0VGV4dE9iaigpO2YueD1uLGYueT1pKzEwLGYud2lkdGg9ci1uLGYuY2xhc3M9Im1lc3NhZ2VUZXh0IixmLmR5PSIxZW0iLGYudGV4dD1hLGYuZm9udEZhbWlseT1pci5tZXNzYWdlRm9udEZhbWlseSxmLmZvbnRTaXplPWlyLm1lc3NhZ2VGb250U2l6ZSxmLmZvbnRXZWlnaHQ9aXIubWVzc2FnZUZvbnRXZWlnaHQsZi5hbmNob3I9aXIubWVzc2FnZUFsaWduLGYudmFsaWduPWlyLm1lc3NhZ2VBbGlnbixmLnRleHRNYXJnaW49aXIud3JhcFBhZGRpbmcsZi50c3Bhbj0hMSxmLndyYXA9YyxCbih0LGYpO3ZhciBkLHAsZz1sLmhlaWdodC0xMCx5PWwud2lkdGg7aWYobj09PXIpe3A9YXIuZ2V0VmVydGljYWxQb3MoKStnLGlyLnJpZ2h0QW5nbGVzP2Q9dC5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIiwiTSAgIi5jb25jYXQobiwiLCIpLmNvbmNhdChwLCIgSCAiKS5jb25jYXQobitNYXRoLm1heChpci53aWR0aC8yLHkvMiksIiBWICIpLmNvbmNhdChwKzI1LCIgSCAiKS5jb25jYXQobikpOihnKz1pci5ib3hNYXJnaW4scD1hci5nZXRWZXJ0aWNhbFBvcygpK2csZD10LmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLCJNICIrbisiLCIrcCsiIEMgIisobis2MCkrIiwiKyhwLTEwKSsiICIrKG4rNjApKyIsIisocCszMCkrIiAiK24rIiwiKyhwKzIwKSkpLGcrPTMwO3ZhciB2PU1hdGgubWF4KHkvMixpci53aWR0aC8yKTthci5pbnNlcnQobi12LGFyLmdldFZlcnRpY2FsUG9zKCktMTArZyxyK3YsYXIuZ2V0VmVydGljYWxQb3MoKSszMCtnKX1lbHNlIGcrPWlyLmJveE1hcmdpbixwPWFyLmdldFZlcnRpY2FsUG9zKCkrZywoZD10LmFwcGVuZCgibGluZSIpKS5hdHRyKCJ4MSIsbiksZC5hdHRyKCJ5MSIscCksZC5hdHRyKCJ4MiIsciksZC5hdHRyKCJ5MiIscCksYXIuaW5zZXJ0KG4scC0xMCxyLHApO289PT1Zbi5wYXJzZXIueXkuTElORVRZUEUuRE9UVEVEfHxvPT09WW4ucGFyc2VyLnl5LkxJTkVUWVBFLkRPVFRFRF9DUk9TU3x8bz09PVluLnBhcnNlci55eS5MSU5FVFlQRS5ET1RURURfT1BFTj8oZC5zdHlsZSgic3Ryb2tlLWRhc2hhcnJheSIsIjMsIDMiKSxkLmF0dHIoImNsYXNzIiwibWVzc2FnZUxpbmUxIikpOmQuYXR0cigiY2xhc3MiLCJtZXNzYWdlTGluZTAiKTt2YXIgbT0iIjtpci5hcnJvd01hcmtlckFic29sdXRlJiYobT0obT0obT13aW5kb3cubG9jYXRpb24ucHJvdG9jb2wrIi8vIit3aW5kb3cubG9jYXRpb24uaG9zdCt3aW5kb3cubG9jYXRpb24ucGF0aG5hbWUrd2luZG93LmxvY2F0aW9uLnNlYXJjaCkucmVwbGFjZSgvXCgvZywiXFwoIikpLnJlcGxhY2UoL1wpL2csIlxcKSIpKSxkLmF0dHIoInN0cm9rZS13aWR0aCIsMiksZC5hdHRyKCJzdHJva2UiLCJub25lIiksZC5zdHlsZSgiZmlsbCIsIm5vbmUiKSxvIT09WW4ucGFyc2VyLnl5LkxJTkVUWVBFLlNPTElEJiZvIT09WW4ucGFyc2VyLnl5LkxJTkVUWVBFLkRPVFRFRHx8ZC5hdHRyKCJtYXJrZXItZW5kIiwidXJsKCIrbSsiI2Fycm93aGVhZCkiKSxvIT09WW4ucGFyc2VyLnl5LkxJTkVUWVBFLlNPTElEX0NST1NTJiZvIT09WW4ucGFyc2VyLnl5LkxJTkVUWVBFLkRPVFRFRF9DUk9TU3x8ZC5hdHRyKCJtYXJrZXItZW5kIiwidXJsKCIrbSsiI2Nyb3NzaGVhZCkiKSwocnIuc2hvd1NlcXVlbmNlTnVtYmVycygpfHxpci5zaG93U2VxdWVuY2VOdW1iZXJzKSYmKGQuYXR0cigibWFya2VyLXN0YXJ0IiwidXJsKCIrbSsiI3NlcXVlbmNlbnVtYmVyKSIpLHQuYXBwZW5kKCJ0ZXh0IikuYXR0cigieCIsbikuYXR0cigieSIscCs0KS5hdHRyKCJmb250LWZhbWlseSIsInNhbnMtc2VyaWYiKS5hdHRyKCJmb250LXNpemUiLCIxMnB4IikuYXR0cigidGV4dC1hbmNob3IiLCJtaWRkbGUiKS5hdHRyKCJ0ZXh0TGVuZ3RoIiwiMTZweCIpLmF0dHIoImNsYXNzIiwic2VxdWVuY2VOdW1iZXIiKS50ZXh0KHMpKSxhci5idW1wVmVydGljYWxQb3MoZyksZS5oZWlnaHQrPWcsZS5zdG9weT1lLnN0YXJ0eStlLmhlaWdodCxhci5pbnNlcnQoZS5mcm9tQm91bmRzLGUuc3RhcnR5LGUudG9Cb3VuZHMsZS5zdG9weSl9KG4sYSksYXIubW9kZWxzLmFkZE1lc3NhZ2UoYSl9Y2F0Y2godCl7Zi5lcnJvcigiZXJyb3Igd2hpbGUgZHJhd2luZyBtZXNzYWdlIix0KX19W1luLnBhcnNlci55eS5MSU5FVFlQRS5TT0xJRF9PUEVOLFluLnBhcnNlci55eS5MSU5FVFlQRS5ET1RURURfT1BFTixZbi5wYXJzZXIueXkuTElORVRZUEUuU09MSUQsWW4ucGFyc2VyLnl5LkxJTkVUWVBFLkRPVFRFRCxZbi5wYXJzZXIueXkuTElORVRZUEUuU09MSURfQ1JPU1MsWW4ucGFyc2VyLnl5LkxJTkVUWVBFLkRPVFRFRF9DUk9TU10uaW5jbHVkZXModC50eXBlKSYmbCsrfSkpLGlyLm1pcnJvckFjdG9ycyYmKGFyLmJ1bXBWZXJ0aWNhbFBvcygyKmlyLmJveE1hcmdpbiksdXIobixyLGksYXIuZ2V0VmVydGljYWxQb3MoKSkpO3ZhciBoPWFyLmdldEJvdW5kcygpLmJvdW5kcztmLmRlYnVnKCJGb3IgbGluZSBoZWlnaHQgZml4IFF1ZXJ5aW5nOiAjIitlKyIgLmFjdG9yLWxpbmUiKSxPYmplY3Qocy5zZWxlY3RBbGwpKCIjIitlKyIgLmFjdG9yLWxpbmUiKS5hdHRyKCJ5MiIsaC5zdG9weSk7dmFyIGQ9aC5zdG9weS1oLnN0YXJ0eSsyKmlyLmRpYWdyYW1NYXJnaW5ZO2lyLm1pcnJvckFjdG9ycyYmKGQ9ZC1pci5ib3hNYXJnaW4raXIuYm90dG9tTWFyZ2luQWRqKTt2YXIgcD1oLnN0b3B4LWguc3RhcnR4KzIqaXIuZGlhZ3JhbU1hcmdpblg7byYmbi5hcHBlbmQoInRleHQiKS50ZXh0KG8pLmF0dHIoIngiLChoLnN0b3B4LWguc3RhcnR4KS8yLTIqaXIuZGlhZ3JhbU1hcmdpblgpLmF0dHIoInkiLC0yNSksJChuLGQscCxpci51c2VNYXhXaWR0aCk7dmFyIGc9bz80MDowO24uYXR0cigidmlld0JveCIsaC5zdGFydHgtaXIuZGlhZ3JhbU1hcmdpblgrIiAtIisoaXIuZGlhZ3JhbU1hcmdpblkrZykrIiAiK3ArIiAiKyhkK2cpKSxmLmRlYnVnKCJtb2RlbHM6Iixhci5tb2RlbHMpfX0sbXI9bigyNyksYnI9bi5uKG1yKTtmdW5jdGlvbiB4cih0KXtyZXR1cm4gZnVuY3Rpb24odCl7aWYoQXJyYXkuaXNBcnJheSh0KSl7Zm9yKHZhciBlPTAsbj1uZXcgQXJyYXkodC5sZW5ndGgpO2U8dC5sZW5ndGg7ZSsrKW5bZV09dFtlXTtyZXR1cm4gbn19KHQpfHxmdW5jdGlvbih0KXtpZihTeW1ib2wuaXRlcmF0b3IgaW4gT2JqZWN0KHQpfHwiW29iamVjdCBBcmd1bWVudHNdIj09PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh0KSlyZXR1cm4gQXJyYXkuZnJvbSh0KX0odCl8fGZ1bmN0aW9uKCl7dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIHNwcmVhZCBub24taXRlcmFibGUgaW5zdGFuY2UiKX0oKX12YXIgX3Isa3Isd3I9IiIsRXI9IiIsVHI9IiIsQ3I9W10sU3I9IiIsQXI9W10sTXI9W10sT3I9IiIsRHI9WyJhY3RpdmUiLCJkb25lIiwiY3JpdCIsIm1pbGVzdG9uZSJdLE5yPVtdLEJyPSExLExyPTAsRnI9ZnVuY3Rpb24odCxlLG4pe3JldHVybiB0Lmlzb1dlZWtkYXkoKT49NiYmbi5pbmRleE9mKCJ3ZWVrZW5kcyIpPj0wfHwobi5pbmRleE9mKHQuZm9ybWF0KCJkZGRkIikudG9Mb3dlckNhc2UoKSk+PTB8fG4uaW5kZXhPZih0LmZvcm1hdChlLnRyaW0oKSkpPj0wKX0sUHI9ZnVuY3Rpb24odCxlLG4pe2lmKG4ubGVuZ3RoJiYhdC5tYW51YWxFbmRUaW1lKXt2YXIgcj1sKCkodC5zdGFydFRpbWUsZSwhMCk7ci5hZGQoMSwiZCIpO3ZhciBpPWwoKSh0LmVuZFRpbWUsZSwhMCksYT1JcihyLGksZSxuKTt0LmVuZFRpbWU9aS50b0RhdGUoKSx0LnJlbmRlckVuZFRpbWU9YX19LElyPWZ1bmN0aW9uKHQsZSxuLHIpe2Zvcih2YXIgaT0hMSxhPW51bGw7dDw9ZTspaXx8KGE9ZS50b0RhdGUoKSksKGk9RnIodCxuLHIpKSYmZS5hZGQoMSwiZCIpLHQuYWRkKDEsImQiKTtyZXR1cm4gYX0sanI9ZnVuY3Rpb24odCxlLG4pe249bi50cmltKCk7dmFyIHI9L15hZnRlclxzKyhbXGRcdy0gXSspLy5leGVjKG4udHJpbSgpKTtpZihudWxsIT09cil7dmFyIGk9bnVsbDtpZihyWzFdLnNwbGl0KCIgIikuZm9yRWFjaCgoZnVuY3Rpb24odCl7dmFyIGU9VnIodCk7dm9pZCAwIT09ZSYmKGk/ZS5lbmRUaW1lPmkuZW5kVGltZSYmKGk9ZSk6aT1lKX0pKSxpKXJldHVybiBpLmVuZFRpbWU7dmFyIGE9bmV3IERhdGU7cmV0dXJuIGEuc2V0SG91cnMoMCwwLDAsMCksYX12YXIgbz1sKCkobixlLnRyaW0oKSwhMCk7cmV0dXJuIG8uaXNWYWxpZCgpP28udG9EYXRlKCk6KGYuZGVidWcoIkludmFsaWQgZGF0ZToiK24pLGYuZGVidWcoIldpdGggZGF0ZSBmb3JtYXQ6IitlLnRyaW0oKSksbmV3IERhdGUpfSxScj1mdW5jdGlvbih0LGUpe2lmKG51bGwhPT10KXN3aXRjaCh0WzJdKXtjYXNlInMiOmUuYWRkKHRbMV0sInNlY29uZHMiKTticmVhaztjYXNlIm0iOmUuYWRkKHRbMV0sIm1pbnV0ZXMiKTticmVhaztjYXNlImgiOmUuYWRkKHRbMV0sImhvdXJzIik7YnJlYWs7Y2FzZSJkIjplLmFkZCh0WzFdLCJkYXlzIik7YnJlYWs7Y2FzZSJ3IjplLmFkZCh0WzFdLCJ3ZWVrcyIpfXJldHVybiBlLnRvRGF0ZSgpfSxZcj1mdW5jdGlvbih0LGUsbixyKXtyPXJ8fCExLG49bi50cmltKCk7dmFyIGk9bCgpKG4sZS50cmltKCksITApO3JldHVybiBpLmlzVmFsaWQoKT8ociYmaS5hZGQoMSwiZCIpLGkudG9EYXRlKCkpOlJyKC9eKFtcZF0rKShbd2RobXNdKS8uZXhlYyhuLnRyaW0oKSksbCgpKHQpKX0senI9MCxVcj1mdW5jdGlvbih0KXtyZXR1cm4gdm9pZCAwPT09dD8idGFzayIrKHpyKz0xKTp0fSwkcj1bXSxXcj17fSxWcj1mdW5jdGlvbih0KXt2YXIgZT1Xclt0XTtyZXR1cm4gJHJbZV19LEhyPWZ1bmN0aW9uKCl7Zm9yKHZhciB0PWZ1bmN0aW9uKHQpe3ZhciBlPSRyW3RdLG49IiI7c3dpdGNoKCRyW3RdLnJhdy5zdGFydFRpbWUudHlwZSl7Y2FzZSJwcmV2VGFza0VuZCI6dmFyIHI9VnIoZS5wcmV2VGFza0lkKTtlLnN0YXJ0VGltZT1yLmVuZFRpbWU7YnJlYWs7Y2FzZSJnZXRTdGFydERhdGUiOihuPWpyKDAsd3IsJHJbdF0ucmF3LnN0YXJ0VGltZS5zdGFydERhdGEpKSYmKCRyW3RdLnN0YXJ0VGltZT1uKX1yZXR1cm4gJHJbdF0uc3RhcnRUaW1lJiYoJHJbdF0uZW5kVGltZT1Zcigkclt0XS5zdGFydFRpbWUsd3IsJHJbdF0ucmF3LmVuZFRpbWUuZGF0YSxCciksJHJbdF0uZW5kVGltZSYmKCRyW3RdLnByb2Nlc3NlZD0hMCwkclt0XS5tYW51YWxFbmRUaW1lPWwoKSgkclt0XS5yYXcuZW5kVGltZS5kYXRhLCJZWVlZLU1NLUREIiwhMCkuaXNWYWxpZCgpLFByKCRyW3RdLHdyLENyKSkpLCRyW3RdLnByb2Nlc3NlZH0sZT0hMCxuPTA7bjwkci5sZW5ndGg7bisrKXQobiksZT1lJiYkcltuXS5wcm9jZXNzZWQ7cmV0dXJuIGV9LEdyPWZ1bmN0aW9uKHQsZSl7dC5zcGxpdCgiLCIpLmZvckVhY2goKGZ1bmN0aW9uKHQpe3ZhciBuPVZyKHQpO3ZvaWQgMCE9PW4mJm4uY2xhc3Nlcy5wdXNoKGUpfSkpfSxxcj1mdW5jdGlvbih0LGUpe05yLnB1c2goKGZ1bmN0aW9uKCl7dmFyIG49ZG9jdW1lbnQucXVlcnlTZWxlY3RvcignW2lkPSInLmNvbmNhdCh0LCciXScpKTtudWxsIT09biYmbi5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsKGZ1bmN0aW9uKCl7ZSgpfSkpfSkpLE5yLnB1c2goKGZ1bmN0aW9uKCl7dmFyIG49ZG9jdW1lbnQucXVlcnlTZWxlY3RvcignW2lkPSInLmNvbmNhdCh0LCctdGV4dCJdJykpO251bGwhPT1uJiZuLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwoZnVuY3Rpb24oKXtlKCl9KSl9KSl9LFhyPXtwYXJzZURpcmVjdGl2ZTpmdW5jdGlvbih0LGUsbil7em8ucGFyc2VEaXJlY3RpdmUodGhpcyx0LGUsbil9LGdldENvbmZpZzpmdW5jdGlvbigpe3JldHVybiB4dCgpLmdhbnR0fSxjbGVhcjpmdW5jdGlvbigpe0FyPVtdLE1yPVtdLE9yPSIiLE5yPVtdLFNyPSIiLHpyPTAsX3I9dm9pZCAwLGtyPXZvaWQgMCwkcj1bXSx3cj0iIixFcj0iIixUcj0iIixDcj1bXSxCcj0hMSxMcj0wfSxzZXREYXRlRm9ybWF0OmZ1bmN0aW9uKHQpe3dyPXR9LGdldERhdGVGb3JtYXQ6ZnVuY3Rpb24oKXtyZXR1cm4gd3J9LGVuYWJsZUluY2x1c2l2ZUVuZERhdGVzOmZ1bmN0aW9uKCl7QnI9ITB9LGVuZERhdGVzQXJlSW5jbHVzaXZlOmZ1bmN0aW9uKCl7cmV0dXJuIEJyfSxzZXRBeGlzRm9ybWF0OmZ1bmN0aW9uKHQpe0VyPXR9LGdldEF4aXNGb3JtYXQ6ZnVuY3Rpb24oKXtyZXR1cm4gRXJ9LHNldFRvZGF5TWFya2VyOmZ1bmN0aW9uKHQpe1RyPXR9LGdldFRvZGF5TWFya2VyOmZ1bmN0aW9uKCl7cmV0dXJuIFRyfSxzZXRUaXRsZTpmdW5jdGlvbih0KXtTcj10fSxnZXRUaXRsZTpmdW5jdGlvbigpe3JldHVybiBTcn0sYWRkU2VjdGlvbjpmdW5jdGlvbih0KXtPcj10LEFyLnB1c2godCl9LGdldFNlY3Rpb25zOmZ1bmN0aW9uKCl7cmV0dXJuIEFyfSxnZXRUYXNrczpmdW5jdGlvbigpe2Zvcih2YXIgdD1IcigpLGU9MDshdCYmZTwxMDspdD1IcigpLGUrKztyZXR1cm4gTXI9JHJ9LGFkZFRhc2s6ZnVuY3Rpb24odCxlKXt2YXIgbj17c2VjdGlvbjpPcix0eXBlOk9yLHByb2Nlc3NlZDohMSxtYW51YWxFbmRUaW1lOiExLHJlbmRlckVuZFRpbWU6bnVsbCxyYXc6e2RhdGE6ZX0sdGFzazp0LGNsYXNzZXM6W119LHI9ZnVuY3Rpb24odCxlKXt2YXIgbj0oIjoiPT09ZS5zdWJzdHIoMCwxKT9lLnN1YnN0cigxLGUubGVuZ3RoKTplKS5zcGxpdCgiLCIpLHI9e307WnIobixyLERyKTtmb3IodmFyIGk9MDtpPG4ubGVuZ3RoO2krKyluW2ldPW5baV0udHJpbSgpO3N3aXRjaChuLmxlbmd0aCl7Y2FzZSAxOnIuaWQ9VXIoKSxyLnN0YXJ0VGltZT17dHlwZToicHJldlRhc2tFbmQiLGlkOnR9LHIuZW5kVGltZT17ZGF0YTpuWzBdfTticmVhaztjYXNlIDI6ci5pZD1VcigpLHIuc3RhcnRUaW1lPXt0eXBlOiJnZXRTdGFydERhdGUiLHN0YXJ0RGF0YTpuWzBdfSxyLmVuZFRpbWU9e2RhdGE6blsxXX07YnJlYWs7Y2FzZSAzOnIuaWQ9VXIoblswXSksci5zdGFydFRpbWU9e3R5cGU6ImdldFN0YXJ0RGF0ZSIsc3RhcnREYXRhOm5bMV19LHIuZW5kVGltZT17ZGF0YTpuWzJdfX1yZXR1cm4gcn0oa3IsZSk7bi5yYXcuc3RhcnRUaW1lPXIuc3RhcnRUaW1lLG4ucmF3LmVuZFRpbWU9ci5lbmRUaW1lLG4uaWQ9ci5pZCxuLnByZXZUYXNrSWQ9a3Isbi5hY3RpdmU9ci5hY3RpdmUsbi5kb25lPXIuZG9uZSxuLmNyaXQ9ci5jcml0LG4ubWlsZXN0b25lPXIubWlsZXN0b25lLG4ub3JkZXI9THIsTHIrKzt2YXIgaT0kci5wdXNoKG4pO2tyPW4uaWQsV3Jbbi5pZF09aS0xfSxmaW5kVGFza0J5SWQ6VnIsYWRkVGFza09yZzpmdW5jdGlvbih0LGUpe3ZhciBuPXtzZWN0aW9uOk9yLHR5cGU6T3IsZGVzY3JpcHRpb246dCx0YXNrOnQsY2xhc3NlczpbXX0scj1mdW5jdGlvbih0LGUpe3ZhciBuPSgiOiI9PT1lLnN1YnN0cigwLDEpP2Uuc3Vic3RyKDEsZS5sZW5ndGgpOmUpLnNwbGl0KCIsIikscj17fTtacihuLHIsRHIpO2Zvcih2YXIgaT0wO2k8bi5sZW5ndGg7aSsrKW5baV09bltpXS50cmltKCk7dmFyIGE9IiI7c3dpdGNoKG4ubGVuZ3RoKXtjYXNlIDE6ci5pZD1VcigpLHIuc3RhcnRUaW1lPXQuZW5kVGltZSxhPW5bMF07YnJlYWs7Y2FzZSAyOnIuaWQ9VXIoKSxyLnN0YXJ0VGltZT1qcigwLHdyLG5bMF0pLGE9blsxXTticmVhaztjYXNlIDM6ci5pZD1VcihuWzBdKSxyLnN0YXJ0VGltZT1qcigwLHdyLG5bMV0pLGE9blsyXX1yZXR1cm4gYSYmKHIuZW5kVGltZT1ZcihyLnN0YXJ0VGltZSx3cixhLEJyKSxyLm1hbnVhbEVuZFRpbWU9bCgpKGEsIllZWVktTU0tREQiLCEwKS5pc1ZhbGlkKCksUHIocix3cixDcikpLHJ9KF9yLGUpO24uc3RhcnRUaW1lPXIuc3RhcnRUaW1lLG4uZW5kVGltZT1yLmVuZFRpbWUsbi5pZD1yLmlkLG4uYWN0aXZlPXIuYWN0aXZlLG4uZG9uZT1yLmRvbmUsbi5jcml0PXIuY3JpdCxuLm1pbGVzdG9uZT1yLm1pbGVzdG9uZSxfcj1uLE1yLnB1c2gobil9LHNldEV4Y2x1ZGVzOmZ1bmN0aW9uKHQpe0NyPXQudG9Mb3dlckNhc2UoKS5zcGxpdCgvW1xzLF0rLyl9LGdldEV4Y2x1ZGVzOmZ1bmN0aW9uKCl7cmV0dXJuIENyfSxzZXRDbGlja0V2ZW50OmZ1bmN0aW9uKHQsZSxuKXt0LnNwbGl0KCIsIikuZm9yRWFjaCgoZnVuY3Rpb24odCl7IWZ1bmN0aW9uKHQsZSxuKXtpZigibG9vc2UiPT09eHQoKS5zZWN1cml0eUxldmVsJiZ2b2lkIDAhPT1lKXt2YXIgcj1bXTtpZigic3RyaW5nIj09dHlwZW9mIG4pe3I9bi5zcGxpdCgvLCg/PSg/Oig/OlteIl0qIil7Mn0pKlteIl0qJCkvKTtmb3IodmFyIGk9MDtpPHIubGVuZ3RoO2krKyl7dmFyIGE9cltpXS50cmltKCk7JyInPT09YS5jaGFyQXQoMCkmJiciJz09PWEuY2hhckF0KGEubGVuZ3RoLTEpJiYoYT1hLnN1YnN0cigxLGEubGVuZ3RoLTIpKSxyW2ldPWF9fTA9PT1yLmxlbmd0aCYmci5wdXNoKHQpLHZvaWQgMCE9PVZyKHQpJiZxcih0LChmdW5jdGlvbigpe1cucnVuRnVuYy5hcHBseShXLFtlXS5jb25jYXQoeHIocikpKX0pKX19KHQsZSxuKX0pKSxHcih0LCJjbGlja2FibGUiKX0sc2V0TGluazpmdW5jdGlvbih0LGUpe3ZhciBuPWU7Imxvb3NlIiE9PXh0KCkuc2VjdXJpdHlMZXZlbCYmKG49T2JqZWN0KGcuc2FuaXRpemVVcmwpKGUpKSx0LnNwbGl0KCIsIikuZm9yRWFjaCgoZnVuY3Rpb24odCl7dm9pZCAwIT09VnIodCkmJnFyKHQsKGZ1bmN0aW9uKCl7d2luZG93Lm9wZW4obiwiX3NlbGYiKX0pKX0pKSxHcih0LCJjbGlja2FibGUiKX0sYmluZEZ1bmN0aW9uczpmdW5jdGlvbih0KXtOci5mb3JFYWNoKChmdW5jdGlvbihlKXtlKHQpfSkpfSxkdXJhdGlvblRvRGF0ZTpScn07ZnVuY3Rpb24gWnIodCxlLG4pe2Zvcih2YXIgcj0hMDtyOylyPSExLG4uZm9yRWFjaCgoZnVuY3Rpb24obil7dmFyIGk9bmV3IFJlZ0V4cCgiXlxccyoiK24rIlxccyokIik7dFswXS5tYXRjaChpKSYmKGVbbl09ITAsdC5zaGlmdCgxKSxyPSEwKX0pKX1tci5wYXJzZXIueXk9WHI7dmFyIEpyLFFyPXt0aXRsZVRvcE1hcmdpbjoyNSxiYXJIZWlnaHQ6MjAsYmFyR2FwOjQsdG9wUGFkZGluZzo1MCxyaWdodFBhZGRpbmc6NzUsbGVmdFBhZGRpbmc6NzUsZ3JpZExpbmVTdGFydFBhZGRpbmc6MzUsZm9udFNpemU6MTEsZm9udEZhbWlseTonIk9wZW4tU2FucyIsICJzYW5zLXNlcmlmIid9LEtyPWZ1bmN0aW9uKHQpe09iamVjdC5rZXlzKHQpLmZvckVhY2goKGZ1bmN0aW9uKGUpe1FyW2VdPXRbZV19KSl9LHRpPWZ1bmN0aW9uKHQsZSl7bXIucGFyc2VyLnl5LmNsZWFyKCksbXIucGFyc2VyLnBhcnNlKHQpO3ZhciBuPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGUpO3ZvaWQgMD09PShKcj1uLnBhcmVudEVsZW1lbnQub2Zmc2V0V2lkdGgpJiYoSnI9MTIwMCksdm9pZCAwIT09UXIudXNlV2lkdGgmJihKcj1Rci51c2VXaWR0aCk7dmFyIHI9bXIucGFyc2VyLnl5LmdldFRhc2tzKCksaT1yLmxlbmd0aCooUXIuYmFySGVpZ2h0K1FyLmJhckdhcCkrMipRci50b3BQYWRkaW5nO24uc2V0QXR0cmlidXRlKCJ2aWV3Qm94IiwiMCAwICIrSnIrIiAiK2kpO2Zvcih2YXIgYT1PYmplY3Qocy5zZWxlY3QpKCdbaWQ9IicuY29uY2F0KGUsJyJdJykpLG89T2JqZWN0KHMuc2NhbGVUaW1lKSgpLmRvbWFpbihbT2JqZWN0KHMubWluKShyLChmdW5jdGlvbih0KXtyZXR1cm4gdC5zdGFydFRpbWV9KSksT2JqZWN0KHMubWF4KShyLChmdW5jdGlvbih0KXtyZXR1cm4gdC5lbmRUaW1lfSkpXSkucmFuZ2VSb3VuZChbMCxKci1Rci5sZWZ0UGFkZGluZy1Rci5yaWdodFBhZGRpbmddKSxjPVtdLHU9MDt1PHIubGVuZ3RoO3UrKyljLnB1c2goclt1XS50eXBlKTt2YXIgbD1jO2Z1bmN0aW9uIGgodCl7Zm9yKHZhciBlPXQubGVuZ3RoLG49e307ZTspblt0Wy0tZV1dPShuW3RbZV1dfHwwKSsxO3JldHVybiBufWM9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXt9LG49W10scj0wLGk9dC5sZW5ndGg7cjxpOysrcillLmhhc093blByb3BlcnR5KHRbcl0pfHwoZVt0W3JdXT0hMCxuLnB1c2godFtyXSkpO3JldHVybiBufShjKSxyLnNvcnQoKGZ1bmN0aW9uKHQsZSl7dmFyIG49dC5zdGFydFRpbWUscj1lLnN0YXJ0VGltZSxpPTA7cmV0dXJuIG4+cj9pPTE6bjxyJiYoaT0tMSksaX0pKSxmdW5jdGlvbih0LGUsbil7dmFyIHI9UXIuYmFySGVpZ2h0LGk9citRci5iYXJHYXAsdT1Rci50b3BQYWRkaW5nLGY9UXIubGVmdFBhZGRpbmc7T2JqZWN0KHMuc2NhbGVMaW5lYXIpKCkuZG9tYWluKFswLGMubGVuZ3RoXSkucmFuZ2UoWyIjMDBCOUZBIiwiI0Y5NTAwMiJdKS5pbnRlcnBvbGF0ZShzLmludGVycG9sYXRlSGNsKTsoZnVuY3Rpb24odCxlLG4scil7dmFyIGk9T2JqZWN0KHMuYXhpc0JvdHRvbSkobykudGlja1NpemUoLXIrZStRci5ncmlkTGluZVN0YXJ0UGFkZGluZykudGlja0Zvcm1hdChPYmplY3Qocy50aW1lRm9ybWF0KShtci5wYXJzZXIueXkuZ2V0QXhpc0Zvcm1hdCgpfHxRci5heGlzRm9ybWF0fHwiJVktJW0tJWQiKSk7YS5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsImdyaWQiKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIit0KyIsICIrKHItNTApKyIpIikuY2FsbChpKS5zZWxlY3RBbGwoInRleHQiKS5zdHlsZSgidGV4dC1hbmNob3IiLCJtaWRkbGUiKS5hdHRyKCJmaWxsIiwiIzAwMCIpLmF0dHIoInN0cm9rZSIsIm5vbmUiKS5hdHRyKCJmb250LXNpemUiLDEwKS5hdHRyKCJkeSIsIjFlbSIpfSkoZix1LDAsbiksZnVuY3Rpb24odCxlLG4scixpLHMsdSl7YS5hcHBlbmQoImciKS5zZWxlY3RBbGwoInJlY3QiKS5kYXRhKHQpLmVudGVyKCkuYXBwZW5kKCJyZWN0IikuYXR0cigieCIsMCkuYXR0cigieSIsKGZ1bmN0aW9uKHQscil7cmV0dXJuIHQub3JkZXIqZStuLTJ9KSkuYXR0cigid2lkdGgiLChmdW5jdGlvbigpe3JldHVybiB1LVFyLnJpZ2h0UGFkZGluZy8yfSkpLmF0dHIoImhlaWdodCIsZSkuYXR0cigiY2xhc3MiLChmdW5jdGlvbih0KXtmb3IodmFyIGU9MDtlPGMubGVuZ3RoO2UrKylpZih0LnR5cGU9PT1jW2VdKXJldHVybiJzZWN0aW9uIHNlY3Rpb24iK2UlUXIubnVtYmVyU2VjdGlvblN0eWxlcztyZXR1cm4ic2VjdGlvbiBzZWN0aW9uMCJ9KSk7dmFyIGw9YS5hcHBlbmQoImciKS5zZWxlY3RBbGwoInJlY3QiKS5kYXRhKHQpLmVudGVyKCk7bC5hcHBlbmQoInJlY3QiKS5hdHRyKCJpZCIsKGZ1bmN0aW9uKHQpe3JldHVybiB0LmlkfSkpLmF0dHIoInJ4IiwzKS5hdHRyKCJyeSIsMykuYXR0cigieCIsKGZ1bmN0aW9uKHQpe3JldHVybiB0Lm1pbGVzdG9uZT9vKHQuc3RhcnRUaW1lKStyKy41KihvKHQuZW5kVGltZSktbyh0LnN0YXJ0VGltZSkpLS41Kmk6byh0LnN0YXJ0VGltZSkrcn0pKS5hdHRyKCJ5IiwoZnVuY3Rpb24odCxyKXtyZXR1cm4gdC5vcmRlciplK259KSkuYXR0cigid2lkdGgiLChmdW5jdGlvbih0KXtyZXR1cm4gdC5taWxlc3RvbmU/aTpvKHQucmVuZGVyRW5kVGltZXx8dC5lbmRUaW1lKS1vKHQuc3RhcnRUaW1lKX0pKS5hdHRyKCJoZWlnaHQiLGkpLmF0dHIoInRyYW5zZm9ybS1vcmlnaW4iLChmdW5jdGlvbih0LGEpe3JldHVybihvKHQuc3RhcnRUaW1lKStyKy41KihvKHQuZW5kVGltZSktbyh0LnN0YXJ0VGltZSkpKS50b1N0cmluZygpKyJweCAiKyhhKmUrbisuNSppKS50b1N0cmluZygpKyJweCJ9KSkuYXR0cigiY2xhc3MiLChmdW5jdGlvbih0KXt2YXIgZT0iIjt0LmNsYXNzZXMubGVuZ3RoPjAmJihlPXQuY2xhc3Nlcy5qb2luKCIgIikpO2Zvcih2YXIgbj0wLHI9MDtyPGMubGVuZ3RoO3IrKyl0LnR5cGU9PT1jW3JdJiYobj1yJVFyLm51bWJlclNlY3Rpb25TdHlsZXMpO3ZhciBpPSIiO3JldHVybiB0LmFjdGl2ZT90LmNyaXQ/aSs9IiBhY3RpdmVDcml0IjppPSIgYWN0aXZlIjp0LmRvbmU/aT10LmNyaXQ/IiBkb25lQ3JpdCI6IiBkb25lIjp0LmNyaXQmJihpKz0iIGNyaXQiKSwwPT09aS5sZW5ndGgmJihpPSIgdGFzayIpLHQubWlsZXN0b25lJiYoaT0iIG1pbGVzdG9uZSAiK2kpLGkrPW4sInRhc2siKyhpKz0iICIrZSl9KSksbC5hcHBlbmQoInRleHQiKS5hdHRyKCJpZCIsKGZ1bmN0aW9uKHQpe3JldHVybiB0LmlkKyItdGV4dCJ9KSkudGV4dCgoZnVuY3Rpb24odCl7cmV0dXJuIHQudGFza30pKS5hdHRyKCJmb250LXNpemUiLFFyLmZvbnRTaXplKS5hdHRyKCJ4IiwoZnVuY3Rpb24odCl7dmFyIGU9byh0LnN0YXJ0VGltZSksbj1vKHQucmVuZGVyRW5kVGltZXx8dC5lbmRUaW1lKTt0Lm1pbGVzdG9uZSYmKGUrPS41KihvKHQuZW5kVGltZSktbyh0LnN0YXJ0VGltZSkpLS41KmkpLHQubWlsZXN0b25lJiYobj1lK2kpO3ZhciBhPXRoaXMuZ2V0QkJveCgpLndpZHRoO3JldHVybiBhPm4tZT9uK2ErMS41KlFyLmxlZnRQYWRkaW5nPnU/ZStyLTU6bityKzU6KG4tZSkvMitlK3J9KSkuYXR0cigieSIsKGZ1bmN0aW9uKHQscil7cmV0dXJuIHQub3JkZXIqZStRci5iYXJIZWlnaHQvMisoUXIuZm9udFNpemUvMi0yKStufSkpLmF0dHIoInRleHQtaGVpZ2h0IixpKS5hdHRyKCJjbGFzcyIsKGZ1bmN0aW9uKHQpe3ZhciBlPW8odC5zdGFydFRpbWUpLG49byh0LmVuZFRpbWUpO3QubWlsZXN0b25lJiYobj1lK2kpO3ZhciByPXRoaXMuZ2V0QkJveCgpLndpZHRoLGE9IiI7dC5jbGFzc2VzLmxlbmd0aD4wJiYoYT10LmNsYXNzZXMuam9pbigiICIpKTtmb3IodmFyIHM9MCxsPTA7bDxjLmxlbmd0aDtsKyspdC50eXBlPT09Y1tsXSYmKHM9bCVRci5udW1iZXJTZWN0aW9uU3R5bGVzKTt2YXIgaD0iIjtyZXR1cm4gdC5hY3RpdmUmJihoPXQuY3JpdD8iYWN0aXZlQ3JpdFRleHQiK3M6ImFjdGl2ZVRleHQiK3MpLHQuZG9uZT9oPXQuY3JpdD9oKyIgZG9uZUNyaXRUZXh0IitzOmgrIiBkb25lVGV4dCIrczp0LmNyaXQmJihoPWgrIiBjcml0VGV4dCIrcyksdC5taWxlc3RvbmUmJihoKz0iIG1pbGVzdG9uZVRleHQiKSxyPm4tZT9uK3IrMS41KlFyLmxlZnRQYWRkaW5nPnU/YSsiIHRhc2tUZXh0T3V0c2lkZUxlZnQgdGFza1RleHRPdXRzaWRlIitzKyIgIitoOmErIiB0YXNrVGV4dE91dHNpZGVSaWdodCB0YXNrVGV4dE91dHNpZGUiK3MrIiAiK2grIiB3aWR0aC0iK3I6YSsiIHRhc2tUZXh0IHRhc2tUZXh0IitzKyIgIitoKyIgd2lkdGgtIityfSkpfSh0LGksdSxmLHIsMCxlKSxmdW5jdGlvbih0LGUpe2Zvcih2YXIgbj1bXSxyPTAsaT0wO2k8Yy5sZW5ndGg7aSsrKW5baV09W2NbaV0sKG89Y1tpXSxzPWwsaChzKVtvXXx8MCldO3ZhciBvLHM7YS5hcHBlbmQoImciKS5zZWxlY3RBbGwoInRleHQiKS5kYXRhKG4pLmVudGVyKCkuYXBwZW5kKChmdW5jdGlvbih0KXt2YXIgZT10WzBdLnNwbGl0KHgubGluZUJyZWFrUmVnZXgpLG49LShlLmxlbmd0aC0xKS8yLHI9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsInRleHQiKTtyLnNldEF0dHJpYnV0ZSgiZHkiLG4rImVtIik7Zm9yKHZhciBpPTA7aTxlLmxlbmd0aDtpKyspe3ZhciBhPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJ0c3BhbiIpO2Euc2V0QXR0cmlidXRlKCJhbGlnbm1lbnQtYmFzZWxpbmUiLCJjZW50cmFsIiksYS5zZXRBdHRyaWJ1dGUoIngiLCIxMCIpLGk+MCYmYS5zZXRBdHRyaWJ1dGUoImR5IiwiMWVtIiksYS50ZXh0Q29udGVudD1lW2ldLHIuYXBwZW5kQ2hpbGQoYSl9cmV0dXJuIHJ9KSkuYXR0cigieCIsMTApLmF0dHIoInkiLChmdW5jdGlvbihpLGEpe2lmKCEoYT4wKSlyZXR1cm4gaVsxXSp0LzIrZTtmb3IodmFyIG89MDtvPGE7bysrKXJldHVybiByKz1uW2EtMV1bMV0saVsxXSp0LzIrcip0K2V9KSkuYXR0cigiY2xhc3MiLChmdW5jdGlvbih0KXtmb3IodmFyIGU9MDtlPGMubGVuZ3RoO2UrKylpZih0WzBdPT09Y1tlXSlyZXR1cm4ic2VjdGlvblRpdGxlIHNlY3Rpb25UaXRsZSIrZSVRci5udW1iZXJTZWN0aW9uU3R5bGVzO3JldHVybiJzZWN0aW9uVGl0bGUifSkpfShpLHUpLGZ1bmN0aW9uKHQsZSxuLHIpe3ZhciBpPVhyLmdldFRvZGF5TWFya2VyKCk7aWYoIm9mZiI9PT1pKXJldHVybjt2YXIgcz1hLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwidG9kYXkiKSxjPW5ldyBEYXRlLHU9cy5hcHBlbmQoImxpbmUiKTt1LmF0dHIoIngxIixvKGMpK3QpLmF0dHIoIngyIixvKGMpK3QpLmF0dHIoInkxIixRci50aXRsZVRvcE1hcmdpbikuYXR0cigieTIiLHItUXIudGl0bGVUb3BNYXJnaW4pLmF0dHIoImNsYXNzIiwidG9kYXkiKSwiIiE9PWkmJnUuYXR0cigic3R5bGUiLGkucmVwbGFjZSgvLC9nLCI7IikpfShmLDAsMCxuKX0ocixKcixpKSwkKGEsaSxKcixRci51c2VNYXhXaWR0aCksYS5hcHBlbmQoInRleHQiKS50ZXh0KG1yLnBhcnNlci55eS5nZXRUaXRsZSgpKS5hdHRyKCJ4IixKci8yKS5hdHRyKCJ5IixRci50aXRsZVRvcE1hcmdpbikuYXR0cigiY2xhc3MiLCJ0aXRsZVRleHQiKX0sZWk9bigxMyksbmk9bi5uKGVpKTtlaS5wYXJzZXIueXk9cm47dmFyIHJpPXt9LGlpPXtkaXZpZGVyTWFyZ2luOjEwLHBhZGRpbmc6NSx0ZXh0SGVpZ2h0OjEwfSxhaT1mdW5jdGlvbih0KXtmb3IodmFyIGU9T2JqZWN0LmtleXMocmkpLG49MDtuPGUubGVuZ3RoO24rKylpZihyaVtlW25dXS5sYWJlbD09PXQpcmV0dXJuIGVbbl19LG9pPWZ1bmN0aW9uKHQpe09iamVjdC5rZXlzKHQpLmZvckVhY2goKGZ1bmN0aW9uKGUpe2lpW2VdPXRbZV19KSl9LHNpPWZ1bmN0aW9uKHQsZSl7cmk9e30sZWkucGFyc2VyLnl5LmNsZWFyKCksZWkucGFyc2VyLnBhcnNlKHQpLGYuaW5mbygiUmVuZGVyaW5nIGRpYWdyYW0gIit0KTt2YXIgbixyPU9iamVjdChzLnNlbGVjdCkoIltpZD0nIi5jb25jYXQoZSwiJ10iKSk7ci5hdHRyKCJ4bWxuczp4bGluayIsImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiKSwobj1yKS5hcHBlbmQoImRlZnMiKS5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIiwiZXh0ZW5zaW9uU3RhcnQiKS5hdHRyKCJjbGFzcyIsImV4dGVuc2lvbiIpLmF0dHIoInJlZlgiLDApLmF0dHIoInJlZlkiLDcpLmF0dHIoIm1hcmtlcldpZHRoIiwxOTApLmF0dHIoIm1hcmtlckhlaWdodCIsMjQwKS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsIk0gMSw3IEwxOCwxMyBWIDEgWiIpLG4uYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIsImV4dGVuc2lvbkVuZCIpLmF0dHIoInJlZlgiLDE5KS5hdHRyKCJyZWZZIiw3KS5hdHRyKCJtYXJrZXJXaWR0aCIsMjApLmF0dHIoIm1hcmtlckhlaWdodCIsMjgpLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIiwiTSAxLDEgViAxMyBMMTgsNyBaIiksbi5hcHBlbmQoImRlZnMiKS5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIiwiY29tcG9zaXRpb25TdGFydCIpLmF0dHIoImNsYXNzIiwiZXh0ZW5zaW9uIikuYXR0cigicmVmWCIsMCkuYXR0cigicmVmWSIsNykuYXR0cigibWFya2VyV2lkdGgiLDE5MCkuYXR0cigibWFya2VySGVpZ2h0IiwyNDApLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIiwiTSAxOCw3IEw5LDEzIEwxLDcgTDksMSBaIiksbi5hcHBlbmQoImRlZnMiKS5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIiwiY29tcG9zaXRpb25FbmQiKS5hdHRyKCJyZWZYIiwxOSkuYXR0cigicmVmWSIsNykuYXR0cigibWFya2VyV2lkdGgiLDIwKS5hdHRyKCJtYXJrZXJIZWlnaHQiLDI4KS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsIk0gMTgsNyBMOSwxMyBMMSw3IEw5LDEgWiIpLG4uYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIsImFnZ3JlZ2F0aW9uU3RhcnQiKS5hdHRyKCJjbGFzcyIsImV4dGVuc2lvbiIpLmF0dHIoInJlZlgiLDApLmF0dHIoInJlZlkiLDcpLmF0dHIoIm1hcmtlcldpZHRoIiwxOTApLmF0dHIoIm1hcmtlckhlaWdodCIsMjQwKS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsIk0gMTgsNyBMOSwxMyBMMSw3IEw5LDEgWiIpLG4uYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIsImFnZ3JlZ2F0aW9uRW5kIikuYXR0cigicmVmWCIsMTkpLmF0dHIoInJlZlkiLDcpLmF0dHIoIm1hcmtlcldpZHRoIiwyMCkuYXR0cigibWFya2VySGVpZ2h0IiwyOCkuYXR0cigib3JpZW50IiwiYXV0byIpLmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLCJNIDE4LDcgTDksMTMgTDEsNyBMOSwxIFoiKSxuLmFwcGVuZCgiZGVmcyIpLmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLCJkZXBlbmRlbmN5U3RhcnQiKS5hdHRyKCJjbGFzcyIsImV4dGVuc2lvbiIpLmF0dHIoInJlZlgiLDApLmF0dHIoInJlZlkiLDcpLmF0dHIoIm1hcmtlcldpZHRoIiwxOTApLmF0dHIoIm1hcmtlckhlaWdodCIsMjQwKS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsIk0gNSw3IEw5LDEzIEwxLDcgTDksMSBaIiksbi5hcHBlbmQoImRlZnMiKS5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIiwiZGVwZW5kZW5jeUVuZCIpLmF0dHIoInJlZlgiLDE5KS5hdHRyKCJyZWZZIiw3KS5hdHRyKCJtYXJrZXJXaWR0aCIsMjApLmF0dHIoIm1hcmtlckhlaWdodCIsMjgpLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIiwiTSAxOCw3IEw5LDEzIEwxNCw3IEw5LDEgWiIpO3ZhciBpPW5ldyBILmEuR3JhcGgoe211bHRpZ3JhcGg6ITB9KTtpLnNldEdyYXBoKHtpc011bHRpR3JhcGg6ITB9KSxpLnNldERlZmF1bHRFZGdlTGFiZWwoKGZ1bmN0aW9uKCl7cmV0dXJue319KSk7Zm9yKHZhciBhPXJuLmdldENsYXNzZXMoKSxvPU9iamVjdC5rZXlzKGEpLGM9MDtjPG8ubGVuZ3RoO2MrKyl7dmFyIHU9YVtvW2NdXSxsPWRuKHIsdSxpaSk7cmlbbC5pZF09bCxpLnNldE5vZGUobC5pZCxsKSxmLmluZm8oIk9yZyBoZWlnaHQ6ICIrbC5oZWlnaHQpfXJuLmdldFJlbGF0aW9ucygpLmZvckVhY2goKGZ1bmN0aW9uKHQpe2YuaW5mbygidGpvaG8iK2FpKHQuaWQxKSthaSh0LmlkMikrSlNPTi5zdHJpbmdpZnkodCkpLGkuc2V0RWRnZShhaSh0LmlkMSksYWkodC5pZDIpLHtyZWxhdGlvbjp0fSx0LnRpdGxlfHwiREVGQVVMVCIpfSkpLGJlLmEubGF5b3V0KGkpLGkubm9kZXMoKS5mb3JFYWNoKChmdW5jdGlvbih0KXt2b2lkIDAhPT10JiZ2b2lkIDAhPT1pLm5vZGUodCkmJihmLmRlYnVnKCJOb2RlICIrdCsiOiAiK0pTT04uc3RyaW5naWZ5KGkubm9kZSh0KSkpLE9iamVjdChzLnNlbGVjdCkoIiMiK0plKHQpKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIisoaS5ub2RlKHQpLngtaS5ub2RlKHQpLndpZHRoLzIpKyIsIisoaS5ub2RlKHQpLnktaS5ub2RlKHQpLmhlaWdodC8yKSsiICkiKSl9KSksaS5lZGdlcygpLmZvckVhY2goKGZ1bmN0aW9uKHQpe3ZvaWQgMCE9PXQmJnZvaWQgMCE9PWkuZWRnZSh0KSYmKGYuZGVidWcoIkVkZ2UgIit0LnYrIiAtPiAiK3QudysiOiAiK0pTT04uc3RyaW5naWZ5KGkuZWRnZSh0KSkpLHBuKHIsaS5lZGdlKHQpLGkuZWRnZSh0KS5yZWxhdGlvbixpaSkpfSkpO3ZhciBoPXIubm9kZSgpLmdldEJCb3goKSxkPWgud2lkdGgrNDAscD1oLmhlaWdodCs0MDskKHIscCxkLGlpLnVzZU1heFdpZHRoKTt2YXIgZz0iIi5jb25jYXQoaC54LTIwLCIgIikuY29uY2F0KGgueS0yMCwiICIpLmNvbmNhdChkLCIgIikuY29uY2F0KHApO2YuZGVidWcoInZpZXdCb3ggIi5jb25jYXQoZykpLHIuYXR0cigidmlld0JveCIsZyl9O2VpLnBhcnNlci55eT1ybjt2YXIgY2k9e2RpdmlkZXJNYXJnaW46MTAscGFkZGluZzo1LHRleHRIZWlnaHQ6MTB9LHVpPWZ1bmN0aW9uKHQpe09iamVjdC5rZXlzKHQpLmZvckVhY2goKGZ1bmN0aW9uKGUpe2NpW2VdPXRbZV19KSl9LGxpPWZ1bmN0aW9uKHQsZSl7Zi5pbmZvKCJEcmF3aW5nIGNsYXNzIikscm4uY2xlYXIoKSxlaS5wYXJzZXIucGFyc2UodCk7dmFyIG49eHQoKS5mbG93Y2hhcnQ7Zi5pbmZvKCJjb25maWc6IixuKTt2YXIgcj1uLm5vZGVTcGFjaW5nfHw1MCxpPW4ucmFua1NwYWNpbmd8fDUwLGE9bmV3IEguYS5HcmFwaCh7bXVsdGlncmFwaDohMCxjb21wb3VuZDohMH0pLnNldEdyYXBoKHtyYW5rZGlyOiJURCIsbm9kZXNlcDpyLHJhbmtzZXA6aSxtYXJnaW54OjgsbWFyZ2lueTo4fSkuc2V0RGVmYXVsdEVkZ2VMYWJlbCgoZnVuY3Rpb24oKXtyZXR1cm57fX0pKSxvPXJuLmdldENsYXNzZXMoKSxjPXJuLmdldFJlbGF0aW9ucygpO2YuaW5mbyhjKSxmdW5jdGlvbih0LGUpe3ZhciBuPU9iamVjdC5rZXlzKHQpO2YuaW5mbygia2V5czoiLG4pLGYuaW5mbyh0KSxuLmZvckVhY2goKGZ1bmN0aW9uKG4pe3ZhciByPXRbbl0saT0iIjtyLmNzc0NsYXNzZXMubGVuZ3RoPjAmJihpPWkrIiAiK3IuY3NzQ2xhc3Nlcy5qb2luKCIgIikpO3ZhciBhPXtsYWJlbFN0eWxlOiIifSxvPXZvaWQgMCE9PXIudGV4dD9yLnRleHQ6ci5pZCxzPSIiO3N3aXRjaChyLnR5cGUpe2Nhc2UiY2xhc3MiOnM9ImNsYXNzX2JveCI7YnJlYWs7ZGVmYXVsdDpzPSJjbGFzc19ib3gifWUuc2V0Tm9kZShyLmlkLHtsYWJlbFN0eWxlOmEubGFiZWxTdHlsZSxzaGFwZTpzLGxhYmVsVGV4dDpvLGNsYXNzRGF0YTpyLHJ4OjAscnk6MCxjbGFzczppLHN0eWxlOmEuc3R5bGUsaWQ6ci5pZCxkb21JZDpyLmRvbUlkLGhhdmVDYWxsYmFjazpyLmhhdmVDYWxsYmFjayxsaW5rOnIubGluayx3aWR0aDoiZ3JvdXAiPT09ci50eXBlPzUwMDp2b2lkIDAsdHlwZTpyLnR5cGUscGFkZGluZzp4dCgpLmZsb3djaGFydC5wYWRkaW5nfSksZi5pbmZvKCJzZXROb2RlIix7bGFiZWxTdHlsZTphLmxhYmVsU3R5bGUsc2hhcGU6cyxsYWJlbFRleHQ6byxyeDowLHJ5OjAsY2xhc3M6aSxzdHlsZTphLnN0eWxlLGlkOnIuaWQsd2lkdGg6Imdyb3VwIj09PXIudHlwZT81MDA6dm9pZCAwLHR5cGU6ci50eXBlLHBhZGRpbmc6eHQoKS5mbG93Y2hhcnQucGFkZGluZ30pfSkpfShvLGEpLGZ1bmN0aW9uKHQsZSl7dmFyIG49MDt0LmZvckVhY2goKGZ1bmN0aW9uKHIpe24rKzt2YXIgaT17Y2xhc3NlczoicmVsYXRpb24ifTtpLnBhdHRlcm49MT09ci5yZWxhdGlvbi5saW5lVHlwZT8iZGFzaGVkIjoic29saWQiLGkuaWQ9ImlkIituLCJhcnJvd19vcGVuIj09PXIudHlwZT9pLmFycm93aGVhZD0ibm9uZSI6aS5hcnJvd2hlYWQ9Im5vcm1hbCIsZi5pbmZvKGksciksaS5zdGFydExhYmVsUmlnaHQ9Im5vbmUiPT09ci5yZWxhdGlvblRpdGxlMT8iIjpyLnJlbGF0aW9uVGl0bGUxLGkuZW5kTGFiZWxMZWZ0PSJub25lIj09PXIucmVsYXRpb25UaXRsZTI/IiI6ci5yZWxhdGlvblRpdGxlMixpLmFycm93VHlwZVN0YXJ0PWhpKHIucmVsYXRpb24udHlwZTEpLGkuYXJyb3dUeXBlRW5kPWhpKHIucmVsYXRpb24udHlwZTIpO3ZhciBhPSIiLG89IiI7aWYodm9pZCAwIT09ci5zdHlsZSl7dmFyIGM9TihyLnN0eWxlKTthPWMuc3R5bGUsbz1jLmxhYmVsU3R5bGV9ZWxzZSBhPSJmaWxsOm5vbmUiO2kuc3R5bGU9YSxpLmxhYmVsU3R5bGU9byx2b2lkIDAhPT1yLmludGVycG9sYXRlP2kuY3VydmU9TyhyLmludGVycG9sYXRlLHMuY3VydmVMaW5lYXIpOnZvaWQgMCE9PXQuZGVmYXVsdEludGVycG9sYXRlP2kuY3VydmU9Tyh0LmRlZmF1bHRJbnRlcnBvbGF0ZSxzLmN1cnZlTGluZWFyKTppLmN1cnZlPU8oY2kuY3VydmUscy5jdXJ2ZUxpbmVhciksci50ZXh0PXIudGl0bGUsdm9pZCAwPT09ci50ZXh0P3ZvaWQgMCE9PXIuc3R5bGUmJihpLmFycm93aGVhZFN0eWxlPSJmaWxsOiAjMzMzIik6KGkuYXJyb3doZWFkU3R5bGU9ImZpbGw6ICMzMzMiLGkubGFiZWxwb3M9ImMiLHh0KCkuZmxvd2NoYXJ0Lmh0bWxMYWJlbHMsaS5sYWJlbFR5cGU9InRleHQiLGkubGFiZWw9ci50ZXh0LnJlcGxhY2UoeC5saW5lQnJlYWtSZWdleCwiXG4iKSx2b2lkIDA9PT1yLnN0eWxlJiYoaS5zdHlsZT1pLnN0eWxlfHwic3Ryb2tlOiAjMzMzOyBzdHJva2Utd2lkdGg6IDEuNXB4O2ZpbGw6bm9uZSIpLGkubGFiZWxTdHlsZT1pLmxhYmVsU3R5bGUucmVwbGFjZSgiY29sb3I6IiwiZmlsbDoiKSksZS5zZXRFZGdlKHIuaWQxLHIuaWQyLGksbil9KSl9KGMsYSk7dmFyIHU9T2JqZWN0KHMuc2VsZWN0KSgnW2lkPSInLmNvbmNhdChlLCciXScpKTt1LmF0dHIoInhtbG5zOnhsaW5rIiwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIpO3ZhciBsPU9iamVjdChzLnNlbGVjdCkoIiMiK2UrIiBnIik7Q24obCxhLFsiYWdncmVnYXRpb24iLCJleHRlbnNpb24iLCJjb21wb3NpdGlvbiIsImRlcGVuZGVuY3kiXSwiY2xhc3NEaWFncmFtIixlKTt2YXIgaD11Lm5vZGUoKS5nZXRCQm94KCksZD1oLndpZHRoKzE2LHA9aC5oZWlnaHQrMTY7aWYoZi5kZWJ1ZygibmV3IFZpZXdCb3ggMCAwICIuY29uY2F0KGQsIiAiKS5jb25jYXQocCksInRyYW5zbGF0ZSgiLmNvbmNhdCg4LWEuX2xhYmVsLm1hcmdpbngsIiwgIikuY29uY2F0KDgtYS5fbGFiZWwubWFyZ2lueSwiKSIpKSwkKHUscCxkLG4udXNlTWF4V2lkdGgpLHUuYXR0cigidmlld0JveCIsIjAgMCAiLmNvbmNhdChkLCIgIikuY29uY2F0KHApKSx1LnNlbGVjdCgiZyIpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiLmNvbmNhdCg4LWEuX2xhYmVsLm1hcmdpbngsIiwgIikuY29uY2F0KDgtaC55LCIpIikpLCFuLmh0bWxMYWJlbHMpZm9yKHZhciBnPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ1tpZD0iJytlKyciXSAuZWRnZUxhYmVsIC5sYWJlbCcpLHk9MDt5PGcubGVuZ3RoO3krKyl7dmFyIHY9Z1t5XSxtPXYuZ2V0QkJveCgpLGI9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsInJlY3QiKTtiLnNldEF0dHJpYnV0ZSgicngiLDApLGIuc2V0QXR0cmlidXRlKCJyeSIsMCksYi5zZXRBdHRyaWJ1dGUoIndpZHRoIixtLndpZHRoKSxiLnNldEF0dHJpYnV0ZSgiaGVpZ2h0IixtLmhlaWdodCksYi5zZXRBdHRyaWJ1dGUoInN0eWxlIiwiZmlsbDojZThlOGU4OyIpLHYuaW5zZXJ0QmVmb3JlKGIsdi5maXJzdENoaWxkKX19O2Z1bmN0aW9uIGhpKHQpe3ZhciBlO3N3aXRjaCh0KXtjYXNlIDA6ZT0iYWdncmVnYXRpb24iO2JyZWFrO2Nhc2UgMTplPSJleHRlbnNpb24iO2JyZWFrO2Nhc2UgMjplPSJjb21wb3NpdGlvbiI7YnJlYWs7Y2FzZSAzOmU9ImRlcGVuZGVuY3kiO2JyZWFrO2RlZmF1bHQ6ZT0ibm9uZSJ9cmV0dXJuIGV9ZnVuY3Rpb24gZmkodCl7cmV0dXJuKGZpPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKHQpe3JldHVybiB0eXBlb2YgdH06ZnVuY3Rpb24odCl7cmV0dXJuIHQmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJnQuY29uc3RydWN0b3I9PT1TeW1ib2wmJnQhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiB0fSkodCl9dmFyIGRpLHBpPWZ1bmN0aW9uKHQpe3JldHVybiBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHQpKX0sZ2k9W10seWk9e3Jvb3Q6e3JlbGF0aW9uczpbXSxzdGF0ZXM6e30sZG9jdW1lbnRzOnt9fX0sdmk9eWkucm9vdCxtaT0wLGJpPWZ1bmN0aW9uKHQsZSxuLHIsaSl7dm9pZCAwPT09dmkuc3RhdGVzW3RdP3ZpLnN0YXRlc1t0XT17aWQ6dCxkZXNjcmlwdGlvbnM6W10sdHlwZTplLGRvYzpuLG5vdGU6aX06KHZpLnN0YXRlc1t0XS5kb2N8fCh2aS5zdGF0ZXNbdF0uZG9jPW4pLHZpLnN0YXRlc1t0XS50eXBlfHwodmkuc3RhdGVzW3RdLnR5cGU9ZSkpLHImJihmLmluZm8oIkFkZGluZyBzdGF0ZSAiLHQsciksInN0cmluZyI9PXR5cGVvZiByJiZraSh0LHIudHJpbSgpKSwib2JqZWN0Ij09PWZpKHIpJiZyLmZvckVhY2goKGZ1bmN0aW9uKGUpe3JldHVybiBraSh0LGUudHJpbSgpKX0pKSksaSYmKHZpLnN0YXRlc1t0XS5ub3RlPWkpfSx4aT1mdW5jdGlvbigpe3ZpPSh5aT17cm9vdDp7cmVsYXRpb25zOltdLHN0YXRlczp7fSxkb2N1bWVudHM6e319fSkucm9vdCx2aT15aS5yb290LG1pPTAsMCxFaT1bXX0sX2k9ZnVuY3Rpb24odCxlLG4pe3ZhciByPXQsaT1lLGE9ImRlZmF1bHQiLG89ImRlZmF1bHQiOyJbKl0iPT09dCYmKHI9InN0YXJ0IisgKyttaSxhPSJzdGFydCIpLCJbKl0iPT09ZSYmKGk9ImVuZCIrbWksbz0iZW5kIiksYmkocixhKSxiaShpLG8pLHZpLnJlbGF0aW9ucy5wdXNoKHtpZDE6cixpZDI6aSx0aXRsZTpufSl9LGtpPWZ1bmN0aW9uKHQsZSl7dmFyIG49dmkuc3RhdGVzW3RdLHI9ZTsiOiI9PT1yWzBdJiYocj1yLnN1YnN0cigxKS50cmltKCkpLG4uZGVzY3JpcHRpb25zLnB1c2gocil9LHdpPTAsRWk9W10sVGk9e3BhcnNlRGlyZWN0aXZlOmZ1bmN0aW9uKHQsZSxuKXt6by5wYXJzZURpcmVjdGl2ZSh0aGlzLHQsZSxuKX0sZ2V0Q29uZmlnOmZ1bmN0aW9uKCl7cmV0dXJuIHh0KCkuc3RhdGV9LGFkZFN0YXRlOmJpLGNsZWFyOnhpLGdldFN0YXRlOmZ1bmN0aW9uKHQpe3JldHVybiB2aS5zdGF0ZXNbdF19LGdldFN0YXRlczpmdW5jdGlvbigpe3JldHVybiB2aS5zdGF0ZXN9LGdldFJlbGF0aW9uczpmdW5jdGlvbigpe3JldHVybiB2aS5yZWxhdGlvbnN9LGdldENsYXNzZXM6ZnVuY3Rpb24oKXtyZXR1cm4gRWl9LGdldERpcmVjdGlvbjpmdW5jdGlvbigpe3JldHVybiJUQiJ9LGFkZFJlbGF0aW9uOl9pLGdldERpdmlkZXJJZDpmdW5jdGlvbigpe3JldHVybiJkaXZpZGVyLWlkLSIrICsrd2l9LGNsZWFudXBMYWJlbDpmdW5jdGlvbih0KXtyZXR1cm4iOiI9PT10LnN1YnN0cmluZygwLDEpP3Quc3Vic3RyKDIpLnRyaW0oKTp0LnRyaW0oKX0sbGluZVR5cGU6e0xJTkU6MCxET1RURURfTElORToxfSxyZWxhdGlvblR5cGU6e0FHR1JFR0FUSU9OOjAsRVhURU5TSU9OOjEsQ09NUE9TSVRJT046MixERVBFTkRFTkNZOjN9LGxvZ0RvY3VtZW50czpmdW5jdGlvbigpe2YuaW5mbygiRG9jdW1lbnRzID0gIix5aSl9LGdldFJvb3REb2M6ZnVuY3Rpb24oKXtyZXR1cm4gZ2l9LHNldFJvb3REb2M6ZnVuY3Rpb24odCl7Zi5pbmZvKCJTZXR0aW5nIHJvb3QgZG9jIix0KSxnaT10fSxnZXRSb290RG9jVjI6ZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24gdChlLG4scil7aWYoInJlbGF0aW9uIj09PW4uc3RtdCl0KGUsbi5zdGF0ZTEsITApLHQoZSxuLnN0YXRlMiwhMSk7ZWxzZSBpZigic3RhdGUiPT09bi5zdG10JiYiWypdIj09PW4uaWQmJihuLmlkPXI/ZS5pZCsiX3N0YXJ0IjplLmlkKyJfZW5kIixuLnN0YXJ0PXIpLG4uZG9jKXt2YXIgaT1bXSxhPTAsbz1bXTtmb3IoYT0wO2E8bi5kb2MubGVuZ3RoO2ErKylpZigiZGl2aWRlciI9PT1uLmRvY1thXS50eXBlKXt2YXIgcz1waShuLmRvY1thXSk7cy5kb2M9cGkobyksaS5wdXNoKHMpLG89W119ZWxzZSBvLnB1c2gobi5kb2NbYV0pO2lmKGkubGVuZ3RoPjAmJm8ubGVuZ3RoPjApe3ZhciBjPXtzdG10OiJzdGF0ZSIsaWQ6TCgpLHR5cGU6ImRpdmlkZXIiLGRvYzpwaShvKX07aS5wdXNoKHBpKGMpKSxuLmRvYz1pfW4uZG9jLmZvckVhY2goKGZ1bmN0aW9uKGUpe3JldHVybiB0KG4sZSwhMCl9KSl9fSh7aWQ6InJvb3QifSx7aWQ6InJvb3QiLGRvYzpnaX0sITApLHtpZDoicm9vdCIsZG9jOmdpfX0sZXh0cmFjdDpmdW5jdGlvbih0KXt2YXIgZTtlPXQuZG9jP3QuZG9jOnQsZi5pbmZvKGUpLHhpKCksZi5pbmZvKCJFeHRyYWN0IixlKSxlLmZvckVhY2goKGZ1bmN0aW9uKHQpeyJzdGF0ZSI9PT10LnN0bXQmJmJpKHQuaWQsdC50eXBlLHQuZG9jLHQuZGVzY3JpcHRpb24sdC5ub3RlKSwicmVsYXRpb24iPT09dC5zdG10JiZfaSh0LnN0YXRlMS5pZCx0LnN0YXRlMi5pZCx0LmRlc2NyaXB0aW9uKX0pKX0sdHJpbUNvbG9uOmZ1bmN0aW9uKHQpe3JldHVybiB0JiYiOiI9PT10WzBdP3Quc3Vic3RyKDEpLnRyaW0oKTp0LnRyaW0oKX19LENpPW4oMjIpLFNpPW4ubihDaSksQWk9e30sTWk9ZnVuY3Rpb24odCxlKXtBaVt0XT1lfSxPaT1mdW5jdGlvbih0LGUpe3ZhciBuPXQuYXBwZW5kKCJ0ZXh0IikuYXR0cigieCIsMip4dCgpLnN0YXRlLnBhZGRpbmcpLmF0dHIoInkiLHh0KCkuc3RhdGUudGV4dEhlaWdodCsxLjMqeHQoKS5zdGF0ZS5wYWRkaW5nKS5hdHRyKCJmb250LXNpemUiLHh0KCkuc3RhdGUuZm9udFNpemUpLmF0dHIoImNsYXNzIiwic3RhdGUtdGl0bGUiKS50ZXh0KGUuZGVzY3JpcHRpb25zWzBdKS5ub2RlKCkuZ2V0QkJveCgpLHI9bi5oZWlnaHQsaT10LmFwcGVuZCgidGV4dCIpLmF0dHIoIngiLHh0KCkuc3RhdGUucGFkZGluZykuYXR0cigieSIscisuNCp4dCgpLnN0YXRlLnBhZGRpbmcreHQoKS5zdGF0ZS5kaXZpZGVyTWFyZ2luK3h0KCkuc3RhdGUudGV4dEhlaWdodCkuYXR0cigiY2xhc3MiLCJzdGF0ZS1kZXNjcmlwdGlvbiIpLGE9ITAsbz0hMDtlLmRlc2NyaXB0aW9ucy5mb3JFYWNoKChmdW5jdGlvbih0KXthfHwoIWZ1bmN0aW9uKHQsZSxuKXt2YXIgcj10LmFwcGVuZCgidHNwYW4iKS5hdHRyKCJ4IiwyKnh0KCkuc3RhdGUucGFkZGluZykudGV4dChlKTtufHxyLmF0dHIoImR5Iix4dCgpLnN0YXRlLnRleHRIZWlnaHQpfShpLHQsbyksbz0hMSksYT0hMX0pKTt2YXIgcz10LmFwcGVuZCgibGluZSIpLmF0dHIoIngxIix4dCgpLnN0YXRlLnBhZGRpbmcpLmF0dHIoInkxIix4dCgpLnN0YXRlLnBhZGRpbmcrcit4dCgpLnN0YXRlLmRpdmlkZXJNYXJnaW4vMikuYXR0cigieTIiLHh0KCkuc3RhdGUucGFkZGluZytyK3h0KCkuc3RhdGUuZGl2aWRlck1hcmdpbi8yKS5hdHRyKCJjbGFzcyIsImRlc2NyLWRpdmlkZXIiKSxjPWkubm9kZSgpLmdldEJCb3goKSx1PU1hdGgubWF4KGMud2lkdGgsbi53aWR0aCk7cmV0dXJuIHMuYXR0cigieDIiLHUrMyp4dCgpLnN0YXRlLnBhZGRpbmcpLHQuaW5zZXJ0KCJyZWN0IiwiOmZpcnN0LWNoaWxkIikuYXR0cigieCIseHQoKS5zdGF0ZS5wYWRkaW5nKS5hdHRyKCJ5Iix4dCgpLnN0YXRlLnBhZGRpbmcpLmF0dHIoIndpZHRoIix1KzIqeHQoKS5zdGF0ZS5wYWRkaW5nKS5hdHRyKCJoZWlnaHQiLGMuaGVpZ2h0K3IrMip4dCgpLnN0YXRlLnBhZGRpbmcpLmF0dHIoInJ4Iix4dCgpLnN0YXRlLnJhZGl1cyksdH0sRGk9ZnVuY3Rpb24odCxlLG4pe3ZhciByLGk9eHQoKS5zdGF0ZS5wYWRkaW5nLGE9Mip4dCgpLnN0YXRlLnBhZGRpbmcsbz10Lm5vZGUoKS5nZXRCQm94KCkscz1vLndpZHRoLGM9by54LHU9dC5hcHBlbmQoInRleHQiKS5hdHRyKCJ4IiwwKS5hdHRyKCJ5Iix4dCgpLnN0YXRlLnRpdGxlU2hpZnQpLmF0dHIoImZvbnQtc2l6ZSIseHQoKS5zdGF0ZS5mb250U2l6ZSkuYXR0cigiY2xhc3MiLCJzdGF0ZS10aXRsZSIpLnRleHQoZS5pZCksbD11Lm5vZGUoKS5nZXRCQm94KCkud2lkdGgrYSxoPU1hdGgubWF4KGwscyk7aD09PXMmJihoKz1hKTt2YXIgZj10Lm5vZGUoKS5nZXRCQm94KCk7ZS5kb2Mscj1jLWksbD5zJiYocj0ocy1oKS8yK2kpLE1hdGguYWJzKGMtZi54KTxpJiZsPnMmJihyPWMtKGwtcykvMik7dmFyIGQ9MS14dCgpLnN0YXRlLnRleHRIZWlnaHQ7cmV0dXJuIHQuaW5zZXJ0KCJyZWN0IiwiOmZpcnN0LWNoaWxkIikuYXR0cigieCIscikuYXR0cigieSIsZCkuYXR0cigiY2xhc3MiLG4/ImFsdC1jb21wb3NpdCI6ImNvbXBvc2l0IikuYXR0cigid2lkdGgiLGgpLmF0dHIoImhlaWdodCIsZi5oZWlnaHQreHQoKS5zdGF0ZS50ZXh0SGVpZ2h0K3h0KCkuc3RhdGUudGl0bGVTaGlmdCsxKS5hdHRyKCJyeCIsIjAiKSx1LmF0dHIoIngiLHIraSksbDw9cyYmdS5hdHRyKCJ4IixjKyhoLWEpLzItbC8yK2kpLHQuaW5zZXJ0KCJyZWN0IiwiOmZpcnN0LWNoaWxkIikuYXR0cigieCIscikuYXR0cigieSIseHQoKS5zdGF0ZS50aXRsZVNoaWZ0LXh0KCkuc3RhdGUudGV4dEhlaWdodC14dCgpLnN0YXRlLnBhZGRpbmcpLmF0dHIoIndpZHRoIixoKS5hdHRyKCJoZWlnaHQiLDMqeHQoKS5zdGF0ZS50ZXh0SGVpZ2h0KS5hdHRyKCJyeCIseHQoKS5zdGF0ZS5yYWRpdXMpLHQuaW5zZXJ0KCJyZWN0IiwiOmZpcnN0LWNoaWxkIikuYXR0cigieCIscikuYXR0cigieSIseHQoKS5zdGF0ZS50aXRsZVNoaWZ0LXh0KCkuc3RhdGUudGV4dEhlaWdodC14dCgpLnN0YXRlLnBhZGRpbmcpLmF0dHIoIndpZHRoIixoKS5hdHRyKCJoZWlnaHQiLGYuaGVpZ2h0KzMrMip4dCgpLnN0YXRlLnRleHRIZWlnaHQpLmF0dHIoInJ4Iix4dCgpLnN0YXRlLnJhZGl1cyksdH0sTmk9ZnVuY3Rpb24odCxlKXtlLmF0dHIoImNsYXNzIiwic3RhdGUtbm90ZSIpO3ZhciBuPWUuYXBwZW5kKCJyZWN0IikuYXR0cigieCIsMCkuYXR0cigieSIseHQoKS5zdGF0ZS5wYWRkaW5nKSxyPWZ1bmN0aW9uKHQsZSxuLHIpe3ZhciBpPTAsYT1yLmFwcGVuZCgidGV4dCIpO2Euc3R5bGUoInRleHQtYW5jaG9yIiwic3RhcnQiKSxhLmF0dHIoImNsYXNzIiwibm90ZVRleHQiKTt2YXIgbz10LnJlcGxhY2UoL1xyXG4vZywiPGJyLz4iKSxzPShvPW8ucmVwbGFjZSgvXG4vZywiPGJyLz4iKSkuc3BsaXQoeC5saW5lQnJlYWtSZWdleCksYz0xLjI1Knh0KCkuc3RhdGUubm90ZU1hcmdpbix1PSEwLGw9ITEsaD12b2lkIDA7dHJ5e2Zvcih2YXIgZixkPXNbU3ltYm9sLml0ZXJhdG9yXSgpOyEodT0oZj1kLm5leHQoKSkuZG9uZSk7dT0hMCl7dmFyIHA9Zi52YWx1ZS50cmltKCk7aWYocC5sZW5ndGg+MCl7dmFyIGc9YS5hcHBlbmQoInRzcGFuIik7aWYoZy50ZXh0KHApLDA9PT1jKWMrPWcubm9kZSgpLmdldEJCb3goKS5oZWlnaHQ7aSs9YyxnLmF0dHIoIngiLGUreHQoKS5zdGF0ZS5ub3RlTWFyZ2luKSxnLmF0dHIoInkiLG4raSsxLjI1Knh0KCkuc3RhdGUubm90ZU1hcmdpbil9fX1jYXRjaCh0KXtsPSEwLGg9dH1maW5hbGx5e3RyeXt1fHxudWxsPT1kLnJldHVybnx8ZC5yZXR1cm4oKX1maW5hbGx5e2lmKGwpdGhyb3cgaH19cmV0dXJue3RleHRXaWR0aDphLm5vZGUoKS5nZXRCQm94KCkud2lkdGgsdGV4dEhlaWdodDppfX0odCwwLDAsZS5hcHBlbmQoImciKSksaT1yLnRleHRXaWR0aCxhPXIudGV4dEhlaWdodDtyZXR1cm4gbi5hdHRyKCJoZWlnaHQiLGErMip4dCgpLnN0YXRlLm5vdGVNYXJnaW4pLG4uYXR0cigid2lkdGgiLGkrMip4dCgpLnN0YXRlLm5vdGVNYXJnaW4pLG59LEJpPWZ1bmN0aW9uKHQsZSl7dmFyIG49ZS5pZCxyPXtpZDpuLGxhYmVsOmUuaWQsd2lkdGg6MCxoZWlnaHQ6MH0saT10LmFwcGVuZCgiZyIpLmF0dHIoImlkIixuKS5hdHRyKCJjbGFzcyIsInN0YXRlR3JvdXAiKTsic3RhcnQiPT09ZS50eXBlJiZmdW5jdGlvbih0KXt0LmFwcGVuZCgiY2lyY2xlIikuYXR0cigiY2xhc3MiLCJzdGFydC1zdGF0ZSIpLmF0dHIoInIiLHh0KCkuc3RhdGUuc2l6ZVVuaXQpLmF0dHIoImN4Iix4dCgpLnN0YXRlLnBhZGRpbmcreHQoKS5zdGF0ZS5zaXplVW5pdCkuYXR0cigiY3kiLHh0KCkuc3RhdGUucGFkZGluZyt4dCgpLnN0YXRlLnNpemVVbml0KX0oaSksImVuZCI9PT1lLnR5cGUmJmZ1bmN0aW9uKHQpe3QuYXBwZW5kKCJjaXJjbGUiKS5hdHRyKCJjbGFzcyIsImVuZC1zdGF0ZS1vdXRlciIpLmF0dHIoInIiLHh0KCkuc3RhdGUuc2l6ZVVuaXQreHQoKS5zdGF0ZS5taW5pUGFkZGluZykuYXR0cigiY3giLHh0KCkuc3RhdGUucGFkZGluZyt4dCgpLnN0YXRlLnNpemVVbml0K3h0KCkuc3RhdGUubWluaVBhZGRpbmcpLmF0dHIoImN5Iix4dCgpLnN0YXRlLnBhZGRpbmcreHQoKS5zdGF0ZS5zaXplVW5pdCt4dCgpLnN0YXRlLm1pbmlQYWRkaW5nKSx0LmFwcGVuZCgiY2lyY2xlIikuYXR0cigiY2xhc3MiLCJlbmQtc3RhdGUtaW5uZXIiKS5hdHRyKCJyIix4dCgpLnN0YXRlLnNpemVVbml0KS5hdHRyKCJjeCIseHQoKS5zdGF0ZS5wYWRkaW5nK3h0KCkuc3RhdGUuc2l6ZVVuaXQrMikuYXR0cigiY3kiLHh0KCkuc3RhdGUucGFkZGluZyt4dCgpLnN0YXRlLnNpemVVbml0KzIpfShpKSwiZm9yayIhPT1lLnR5cGUmJiJqb2luIiE9PWUudHlwZXx8ZnVuY3Rpb24odCxlKXt2YXIgbj14dCgpLnN0YXRlLmZvcmtXaWR0aCxyPXh0KCkuc3RhdGUuZm9ya0hlaWdodDtpZihlLnBhcmVudElkKXt2YXIgaT1uO249cixyPWl9dC5hcHBlbmQoInJlY3QiKS5zdHlsZSgic3Ryb2tlIiwiYmxhY2siKS5zdHlsZSgiZmlsbCIsImJsYWNrIikuYXR0cigid2lkdGgiLG4pLmF0dHIoImhlaWdodCIscikuYXR0cigieCIseHQoKS5zdGF0ZS5wYWRkaW5nKS5hdHRyKCJ5Iix4dCgpLnN0YXRlLnBhZGRpbmcpfShpLGUpLCJub3RlIj09PWUudHlwZSYmTmkoZS5ub3RlLnRleHQsaSksImRpdmlkZXIiPT09ZS50eXBlJiZmdW5jdGlvbih0KXt0LmFwcGVuZCgibGluZSIpLnN0eWxlKCJzdHJva2UiLCJncmV5Iikuc3R5bGUoInN0cm9rZS1kYXNoYXJyYXkiLCIzIikuYXR0cigieDEiLHh0KCkuc3RhdGUudGV4dEhlaWdodCkuYXR0cigiY2xhc3MiLCJkaXZpZGVyIikuYXR0cigieDIiLDIqeHQoKS5zdGF0ZS50ZXh0SGVpZ2h0KS5hdHRyKCJ5MSIsMCkuYXR0cigieTIiLDApfShpKSwiZGVmYXVsdCI9PT1lLnR5cGUmJjA9PT1lLmRlc2NyaXB0aW9ucy5sZW5ndGgmJmZ1bmN0aW9uKHQsZSl7dmFyIG49dC5hcHBlbmQoInRleHQiKS5hdHRyKCJ4IiwyKnh0KCkuc3RhdGUucGFkZGluZykuYXR0cigieSIseHQoKS5zdGF0ZS50ZXh0SGVpZ2h0KzIqeHQoKS5zdGF0ZS5wYWRkaW5nKS5hdHRyKCJmb250LXNpemUiLHh0KCkuc3RhdGUuZm9udFNpemUpLmF0dHIoImNsYXNzIiwic3RhdGUtdGl0bGUiKS50ZXh0KGUuaWQpLHI9bi5ub2RlKCkuZ2V0QkJveCgpO3QuaW5zZXJ0KCJyZWN0IiwiOmZpcnN0LWNoaWxkIikuYXR0cigieCIseHQoKS5zdGF0ZS5wYWRkaW5nKS5hdHRyKCJ5Iix4dCgpLnN0YXRlLnBhZGRpbmcpLmF0dHIoIndpZHRoIixyLndpZHRoKzIqeHQoKS5zdGF0ZS5wYWRkaW5nKS5hdHRyKCJoZWlnaHQiLHIuaGVpZ2h0KzIqeHQoKS5zdGF0ZS5wYWRkaW5nKS5hdHRyKCJyeCIseHQoKS5zdGF0ZS5yYWRpdXMpfShpLGUpLCJkZWZhdWx0Ij09PWUudHlwZSYmZS5kZXNjcmlwdGlvbnMubGVuZ3RoPjAmJk9pKGksZSk7dmFyIGE9aS5ub2RlKCkuZ2V0QkJveCgpO3JldHVybiByLndpZHRoPWEud2lkdGgrMip4dCgpLnN0YXRlLnBhZGRpbmcsci5oZWlnaHQ9YS5oZWlnaHQrMip4dCgpLnN0YXRlLnBhZGRpbmcsTWkobixyKSxyfSxMaT0wO0NpLnBhcnNlci55eT1UaTt2YXIgRmk9e30sUGk9ZnVuY3Rpb24gdChlLG4scixpKXt2YXIgYSxvPW5ldyBILmEuR3JhcGgoe2NvbXBvdW5kOiEwLG11bHRpZ3JhcGg6ITB9KSxjPSEwO2ZvcihhPTA7YTxlLmxlbmd0aDthKyspaWYoInJlbGF0aW9uIj09PWVbYV0uc3RtdCl7Yz0hMTticmVha31yP28uc2V0R3JhcGgoe3JhbmtkaXI6IkxSIixtdWx0aWdyYXBoOiEwLGNvbXBvdW5kOiEwLHJhbmtlcjoidGlnaHQtdHJlZSIscmFua3NlcDpjPzE6ZGkuZWRnZUxlbmd0aEZhY3Rvcixub2RlU2VwOmM/MTo1MCxpc011bHRpR3JhcGg6ITB9KTpvLnNldEdyYXBoKHtyYW5rZGlyOiJUQiIsbXVsdGlncmFwaDohMCxjb21wb3VuZDohMCxyYW5rc2VwOmM/MTpkaS5lZGdlTGVuZ3RoRmFjdG9yLG5vZGVTZXA6Yz8xOjUwLHJhbmtlcjoidGlnaHQtdHJlZSIsaXNNdWx0aUdyYXBoOiEwfSksby5zZXREZWZhdWx0RWRnZUxhYmVsKChmdW5jdGlvbigpe3JldHVybnt9fSkpLFRpLmV4dHJhY3QoZSk7Zm9yKHZhciB1PVRpLmdldFN0YXRlcygpLGw9VGkuZ2V0UmVsYXRpb25zKCksaD1PYmplY3Qua2V5cyh1KSxkPTA7ZDxoLmxlbmd0aDtkKyspe3ZhciBwPXVbaFtkXV07ciYmKHAucGFyZW50SWQ9cik7dmFyIGc9dm9pZCAwO2lmKHAuZG9jKXt2YXIgeT1uLmFwcGVuZCgiZyIpLmF0dHIoImlkIixwLmlkKS5hdHRyKCJjbGFzcyIsInN0YXRlR3JvdXAiKTtnPXQocC5kb2MseSxwLmlkLCFpKTt2YXIgdj0oeT1EaSh5LHAsaSkpLm5vZGUoKS5nZXRCQm94KCk7Zy53aWR0aD12LndpZHRoLGcuaGVpZ2h0PXYuaGVpZ2h0K2RpLnBhZGRpbmcvMixGaVtwLmlkXT17eTpkaS5jb21wb3NpdFRpdGxlU2l6ZX19ZWxzZSBnPUJpKG4scCk7aWYocC5ub3RlKXt2YXIgbT17ZGVzY3JpcHRpb25zOltdLGlkOnAuaWQrIi1ub3RlIixub3RlOnAubm90ZSx0eXBlOiJub3RlIn0sYj1CaShuLG0pOyJsZWZ0IG9mIj09PXAubm90ZS5wb3NpdGlvbj8oby5zZXROb2RlKGcuaWQrIi1ub3RlIixiKSxvLnNldE5vZGUoZy5pZCxnKSk6KG8uc2V0Tm9kZShnLmlkLGcpLG8uc2V0Tm9kZShnLmlkKyItbm90ZSIsYikpLG8uc2V0UGFyZW50KGcuaWQsZy5pZCsiLWdyb3VwIiksby5zZXRQYXJlbnQoZy5pZCsiLW5vdGUiLGcuaWQrIi1ncm91cCIpfWVsc2Ugby5zZXROb2RlKGcuaWQsZyl9Zi5kZWJ1ZygiQ291bnQ9IixvLm5vZGVDb3VudCgpLG8pO3ZhciBfPTA7bC5mb3JFYWNoKChmdW5jdGlvbih0KXt2YXIgZTtfKyssZi5kZWJ1ZygiU2V0dGluZyBlZGdlIix0KSxvLnNldEVkZ2UodC5pZDEsdC5pZDIse3JlbGF0aW9uOnQsd2lkdGg6KGU9dC50aXRsZSxlP2UubGVuZ3RoKmRpLmZvbnRTaXplRmFjdG9yOjEpLGhlaWdodDpkaS5sYWJlbEhlaWdodCp4LmdldFJvd3ModC50aXRsZSkubGVuZ3RoLGxhYmVscG9zOiJjIn0sImlkIitfKX0pKSxiZS5hLmxheW91dChvKSxmLmRlYnVnKCJHcmFwaCBhZnRlciBsYXlvdXQiLG8ubm9kZXMoKSk7dmFyIGs9bi5ub2RlKCk7by5ub2RlcygpLmZvckVhY2goKGZ1bmN0aW9uKHQpe3ZvaWQgMCE9PXQmJnZvaWQgMCE9PW8ubm9kZSh0KT8oZi53YXJuKCJOb2RlICIrdCsiOiAiK0pTT04uc3RyaW5naWZ5KG8ubm9kZSh0KSkpLE9iamVjdChzLnNlbGVjdCkoIiMiK2suaWQrIiAjIit0KS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIisoby5ub2RlKHQpLngtby5ub2RlKHQpLndpZHRoLzIpKyIsIisoby5ub2RlKHQpLnkrKEZpW3RdP0ZpW3RdLnk6MCktby5ub2RlKHQpLmhlaWdodC8yKSsiICkiKSxPYmplY3Qocy5zZWxlY3QpKCIjIitrLmlkKyIgIyIrdCkuYXR0cigiZGF0YS14LXNoaWZ0IixvLm5vZGUodCkueC1vLm5vZGUodCkud2lkdGgvMiksZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgiIyIray5pZCsiICMiK3QrIiAuZGl2aWRlciIpLmZvckVhY2goKGZ1bmN0aW9uKHQpe3ZhciBlPXQucGFyZW50RWxlbWVudCxuPTAscj0wO2UmJihlLnBhcmVudEVsZW1lbnQmJihuPWUucGFyZW50RWxlbWVudC5nZXRCQm94KCkud2lkdGgpLHI9cGFyc2VJbnQoZS5nZXRBdHRyaWJ1dGUoImRhdGEteC1zaGlmdCIpLDEwKSxOdW1iZXIuaXNOYU4ocikmJihyPTApKSx0LnNldEF0dHJpYnV0ZSgieDEiLDAtcis4KSx0LnNldEF0dHJpYnV0ZSgieDIiLG4tci04KX0pKSk6Zi5kZWJ1ZygiTm8gTm9kZSAiK3QrIjogIitKU09OLnN0cmluZ2lmeShvLm5vZGUodCkpKX0pKTt2YXIgdz1rLmdldEJCb3goKTtvLmVkZ2VzKCkuZm9yRWFjaCgoZnVuY3Rpb24odCl7dm9pZCAwIT09dCYmdm9pZCAwIT09by5lZGdlKHQpJiYoZi5kZWJ1ZygiRWRnZSAiK3QudisiIC0+ICIrdC53KyI6ICIrSlNPTi5zdHJpbmdpZnkoby5lZGdlKHQpKSksZnVuY3Rpb24odCxlLG4pe2UucG9pbnRzPWUucG9pbnRzLmZpbHRlcigoZnVuY3Rpb24odCl7cmV0dXJuIU51bWJlci5pc05hTih0LnkpfSkpO3ZhciByPWUucG9pbnRzLGk9T2JqZWN0KHMubGluZSkoKS54KChmdW5jdGlvbih0KXtyZXR1cm4gdC54fSkpLnkoKGZ1bmN0aW9uKHQpe3JldHVybiB0Lnl9KSkuY3VydmUocy5jdXJ2ZUJhc2lzKSxhPXQuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsaShyKSkuYXR0cigiaWQiLCJlZGdlIitMaSkuYXR0cigiY2xhc3MiLCJ0cmFuc2l0aW9uIiksbz0iIjtpZih4dCgpLnN0YXRlLmFycm93TWFya2VyQWJzb2x1dGUmJihvPShvPShvPXdpbmRvdy5sb2NhdGlvbi5wcm90b2NvbCsiLy8iK3dpbmRvdy5sb2NhdGlvbi5ob3N0K3dpbmRvdy5sb2NhdGlvbi5wYXRobmFtZSt3aW5kb3cubG9jYXRpb24uc2VhcmNoKS5yZXBsYWNlKC9cKC9nLCJcXCgiKSkucmVwbGFjZSgvXCkvZywiXFwpIikpLGEuYXR0cigibWFya2VyLWVuZCIsInVybCgiK28rIiMiK2Z1bmN0aW9uKHQpe3N3aXRjaCh0KXtjYXNlIFRpLnJlbGF0aW9uVHlwZS5BR0dSRUdBVElPTjpyZXR1cm4iYWdncmVnYXRpb24iO2Nhc2UgVGkucmVsYXRpb25UeXBlLkVYVEVOU0lPTjpyZXR1cm4iZXh0ZW5zaW9uIjtjYXNlIFRpLnJlbGF0aW9uVHlwZS5DT01QT1NJVElPTjpyZXR1cm4iY29tcG9zaXRpb24iO2Nhc2UgVGkucmVsYXRpb25UeXBlLkRFUEVOREVOQ1k6cmV0dXJuImRlcGVuZGVuY3kifX0oVGkucmVsYXRpb25UeXBlLkRFUEVOREVOQ1kpKyJFbmQpIiksdm9pZCAwIT09bi50aXRsZSl7Zm9yKHZhciBjPXQuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJzdGF0ZUxhYmVsIiksdT1XLmNhbGNMYWJlbFBvc2l0aW9uKGUucG9pbnRzKSxsPXUueCxoPXUueSxkPXguZ2V0Um93cyhuLnRpdGxlKSxwPTAsZz1bXSx5PTAsdj0wLG09MDttPD1kLmxlbmd0aDttKyspe3ZhciBiPWMuYXBwZW5kKCJ0ZXh0IikuYXR0cigidGV4dC1hbmNob3IiLCJtaWRkbGUiKS50ZXh0KGRbbV0pLmF0dHIoIngiLGwpLmF0dHIoInkiLGgrcCksXz1iLm5vZGUoKS5nZXRCQm94KCk7aWYoeT1NYXRoLm1heCh5LF8ud2lkdGgpLHY9TWF0aC5taW4odixfLngpLGYuaW5mbyhfLngsbCxoK3ApLDA9PT1wKXt2YXIgaz1iLm5vZGUoKS5nZXRCQm94KCk7cD1rLmhlaWdodCxmLmluZm8oIlRpdGxlIGhlaWdodCIscCxoKX1nLnB1c2goYil9dmFyIHc9cCpkLmxlbmd0aDtpZihkLmxlbmd0aD4xKXt2YXIgRT0oZC5sZW5ndGgtMSkqcCouNTtnLmZvckVhY2goKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQuYXR0cigieSIsaCtlKnAtRSl9KSksdz1wKmQubGVuZ3RofXZhciBUPWMubm9kZSgpLmdldEJCb3goKTtjLmluc2VydCgicmVjdCIsIjpmaXJzdC1jaGlsZCIpLmF0dHIoImNsYXNzIiwiYm94IikuYXR0cigieCIsbC15LzIteHQoKS5zdGF0ZS5wYWRkaW5nLzIpLmF0dHIoInkiLGgtdy8yLXh0KCkuc3RhdGUucGFkZGluZy8yLTMuNSkuYXR0cigid2lkdGgiLHkreHQoKS5zdGF0ZS5wYWRkaW5nKS5hdHRyKCJoZWlnaHQiLHcreHQoKS5zdGF0ZS5wYWRkaW5nKSxmLmluZm8oVCl9TGkrK30obixvLmVkZ2UodCksby5lZGdlKHQpLnJlbGF0aW9uKSl9KSksdz1rLmdldEJCb3goKTt2YXIgRT17aWQ6cnx8InJvb3QiLGxhYmVsOnJ8fCJyb290Iix3aWR0aDowLGhlaWdodDowfTtyZXR1cm4gRS53aWR0aD13LndpZHRoKzIqZGkucGFkZGluZyxFLmhlaWdodD13LmhlaWdodCsyKmRpLnBhZGRpbmcsZi5kZWJ1ZygiRG9jIHJlbmRlcmVkIixFLG8pLEV9LElpPWZ1bmN0aW9uKCl7fSxqaT1mdW5jdGlvbih0LGUpe2RpPXh0KCkuc3RhdGUsQ2kucGFyc2VyLnl5LmNsZWFyKCksQ2kucGFyc2VyLnBhcnNlKHQpLGYuZGVidWcoIlJlbmRlcmluZyBkaWFncmFtICIrdCk7dmFyIG49T2JqZWN0KHMuc2VsZWN0KSgiW2lkPSciLmNvbmNhdChlLCInXSIpKTtuLmFwcGVuZCgiZGVmcyIpLmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLCJkZXBlbmRlbmN5RW5kIikuYXR0cigicmVmWCIsMTkpLmF0dHIoInJlZlkiLDcpLmF0dHIoIm1hcmtlcldpZHRoIiwyMCkuYXR0cigibWFya2VySGVpZ2h0IiwyOCkuYXR0cigib3JpZW50IiwiYXV0byIpLmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLCJNIDE5LDcgTDksMTMgTDE0LDcgTDksMSBaIiksbmV3IEguYS5HcmFwaCh7bXVsdGlncmFwaDohMCxjb21wb3VuZDohMCxyYW5rZGlyOiJSTCJ9KS5zZXREZWZhdWx0RWRnZUxhYmVsKChmdW5jdGlvbigpe3JldHVybnt9fSkpO3ZhciByPVRpLmdldFJvb3REb2MoKTtQaShyLG4sdm9pZCAwLCExKTt2YXIgaT1kaS5wYWRkaW5nLGE9bi5ub2RlKCkuZ2V0QkJveCgpLG89YS53aWR0aCsyKmksYz1hLmhlaWdodCsyKmk7JChuLGMsMS43NSpvLGRpLnVzZU1heFdpZHRoKSxuLmF0dHIoInZpZXdCb3giLCIiLmNvbmNhdChhLngtZGkucGFkZGluZywiICAiKS5jb25jYXQoYS55LWRpLnBhZGRpbmcsIiAiKStvKyIgIitjKX0sUmk9e30sWWk9e30semk9ZnVuY3Rpb24odCxlLG4scil7aWYoInJvb3QiIT09bi5pZCl7dmFyIGk9InJlY3QiOyEwPT09bi5zdGFydCYmKGk9InN0YXJ0IiksITE9PT1uLnN0YXJ0JiYoaT0iZW5kIiksImRlZmF1bHQiIT09bi50eXBlJiYoaT1uLnR5cGUpLFlpW24uaWRdfHwoWWlbbi5pZF09e2lkOm4uaWQsc2hhcGU6aSxkZXNjcmlwdGlvbjpuLmlkLGNsYXNzZXM6InN0YXRlZGlhZ3JhbS1zdGF0ZSJ9KSxuLmRlc2NyaXB0aW9uJiYoQXJyYXkuaXNBcnJheShZaVtuLmlkXS5kZXNjcmlwdGlvbik/KFlpW24uaWRdLnNoYXBlPSJyZWN0V2l0aFRpdGxlIixZaVtuLmlkXS5kZXNjcmlwdGlvbi5wdXNoKG4uZGVzY3JpcHRpb24pKTpZaVtuLmlkXS5kZXNjcmlwdGlvbi5sZW5ndGg+MD8oWWlbbi5pZF0uc2hhcGU9InJlY3RXaXRoVGl0bGUiLFlpW24uaWRdLmRlc2NyaXB0aW9uPT09bi5pZD9ZaVtuLmlkXS5kZXNjcmlwdGlvbj1bbi5kZXNjcmlwdGlvbl06WWlbbi5pZF0uZGVzY3JpcHRpb249W1lpW24uaWRdLmRlc2NyaXB0aW9uLG4uZGVzY3JpcHRpb25dKTooWWlbbi5pZF0uc2hhcGU9InJlY3QiLFlpW24uaWRdLmRlc2NyaXB0aW9uPW4uZGVzY3JpcHRpb24pKSwhWWlbbi5pZF0udHlwZSYmbi5kb2MmJihmLmluZm8oIlNldHRpbmcgY2x1c2VyIGZvciAiLG4uaWQpLFlpW24uaWRdLnR5cGU9Imdyb3VwIixZaVtuLmlkXS5zaGFwZT0iZGl2aWRlciI9PT1uLnR5cGU/ImRpdmlkZXIiOiJyb3VuZGVkV2l0aFRpdGxlIixZaVtuLmlkXS5jbGFzc2VzPVlpW24uaWRdLmNsYXNzZXMrIiAiKyhyPyJzdGF0ZWRpYWdyYW0tY2x1c3RlciBzdGF0ZWRpYWdyYW0tY2x1c3Rlci1hbHQiOiJzdGF0ZWRpYWdyYW0tY2x1c3RlciIpKTt2YXIgYT17bGFiZWxTdHlsZToiIixzaGFwZTpZaVtuLmlkXS5zaGFwZSxsYWJlbFRleHQ6WWlbbi5pZF0uZGVzY3JpcHRpb24sY2xhc3NlczpZaVtuLmlkXS5jbGFzc2VzLHN0eWxlOiIiLGlkOm4uaWQsZG9tSWQ6InN0YXRlLSIrbi5pZCsiLSIrVWksdHlwZTpZaVtuLmlkXS50eXBlLHBhZGRpbmc6MTV9O2lmKG4ubm90ZSl7dmFyIG89e2xhYmVsU3R5bGU6IiIsc2hhcGU6Im5vdGUiLGxhYmVsVGV4dDpuLm5vdGUudGV4dCxjbGFzc2VzOiJzdGF0ZWRpYWdyYW0tbm90ZSIsc3R5bGU6IiIsaWQ6bi5pZCsiLS0tLW5vdGUiLGRvbUlkOiJzdGF0ZS0iK24uaWQrIi0tLS1ub3RlLSIrVWksdHlwZTpZaVtuLmlkXS50eXBlLHBhZGRpbmc6MTV9LHM9e2xhYmVsU3R5bGU6IiIsc2hhcGU6Im5vdGVHcm91cCIsbGFiZWxUZXh0Om4ubm90ZS50ZXh0LGNsYXNzZXM6WWlbbi5pZF0uY2xhc3NlcyxzdHlsZToiIixpZDpuLmlkKyItLS0tcGFyZW50Iixkb21JZDoic3RhdGUtIituLmlkKyItLS0tcGFyZW50LSIrVWksdHlwZToiZ3JvdXAiLHBhZGRpbmc6MH07VWkrKyx0LnNldE5vZGUobi5pZCsiLS0tLXBhcmVudCIscyksdC5zZXROb2RlKG8uaWQsbyksdC5zZXROb2RlKG4uaWQsYSksdC5zZXRQYXJlbnQobi5pZCxuLmlkKyItLS0tcGFyZW50IiksdC5zZXRQYXJlbnQoby5pZCxuLmlkKyItLS0tcGFyZW50Iik7dmFyIGM9bi5pZCx1PW8uaWQ7ImxlZnQgb2YiPT09bi5ub3RlLnBvc2l0aW9uJiYoYz1vLmlkLHU9bi5pZCksdC5zZXRFZGdlKGMsdSx7YXJyb3doZWFkOiJub25lIixhcnJvd1R5cGU6IiIsc3R5bGU6ImZpbGw6bm9uZSIsbGFiZWxTdHlsZToiIixjbGFzc2VzOiJ0cmFuc2l0aW9uIG5vdGUtZWRnZSIsYXJyb3doZWFkU3R5bGU6ImZpbGw6ICMzMzMiLGxhYmVscG9zOiJjIixsYWJlbFR5cGU6InRleHQiLHRoaWNrbmVzczoibm9ybWFsIn0pfWVsc2UgdC5zZXROb2RlKG4uaWQsYSl9ZSYmInJvb3QiIT09ZS5pZCYmKGYuaW5mbygiU2V0dGluZyBub2RlICIsbi5pZCwiIHRvIGJlIGNoaWxkIG9mIGl0cyBwYXJlbnQgIixlLmlkKSx0LnNldFBhcmVudChuLmlkLGUuaWQpKSxuLmRvYyYmKGYuaW5mbygiQWRkaW5nIG5vZGVzIGNoaWxkcmVuICIpLCRpKHQsbixuLmRvYywhcikpfSxVaT0wLCRpPWZ1bmN0aW9uKHQsZSxuLHIpe1VpPTAsZi50cmFjZSgiaXRlbXMiLG4pLG4uZm9yRWFjaCgoZnVuY3Rpb24obil7aWYoInN0YXRlIj09PW4uc3RtdHx8ImRlZmF1bHQiPT09bi5zdG10KXppKHQsZSxuLHIpO2Vsc2UgaWYoInJlbGF0aW9uIj09PW4uc3RtdCl7emkodCxlLG4uc3RhdGUxLHIpLHppKHQsZSxuLnN0YXRlMixyKTt2YXIgaT17aWQ6ImVkZ2UiK1VpLGFycm93aGVhZDoibm9ybWFsIixhcnJvd1R5cGVFbmQ6ImFycm93X2JhcmIiLHN0eWxlOiJmaWxsOm5vbmUiLGxhYmVsU3R5bGU6IiIsbGFiZWw6bi5kZXNjcmlwdGlvbixhcnJvd2hlYWRTdHlsZToiZmlsbDogIzMzMyIsbGFiZWxwb3M6ImMiLGxhYmVsVHlwZToidGV4dCIsdGhpY2tuZXNzOiJub3JtYWwiLGNsYXNzZXM6InRyYW5zaXRpb24ifSxhPW4uc3RhdGUxLmlkLG89bi5zdGF0ZTIuaWQ7dC5zZXRFZGdlKGEsbyxpLFVpKSxVaSsrfX0pKX0sV2k9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPU9iamVjdC5rZXlzKHQpLG49MDtuPGUubGVuZ3RoO24rKylSaVtlW25dXT10W2Vbbl1dfSxWaT1mdW5jdGlvbih0LGUpe2YuaW5mbygiRHJhd2luZyBzdGF0ZSBkaWFncmFtICh2MikiLGUpLFRpLmNsZWFyKCksWWk9e307dmFyIG49U2kuYS5wYXJzZXI7bi55eT1UaSxuLnBhcnNlKHQpO3ZhciByPVRpLmdldERpcmVjdGlvbigpO3ZvaWQgMD09PXImJihyPSJMUiIpO3ZhciBpPXh0KCkuc3RhdGUsYT1pLm5vZGVTcGFjaW5nfHw1MCxvPWkucmFua1NwYWNpbmd8fDUwLGM9bmV3IEguYS5HcmFwaCh7bXVsdGlncmFwaDohMCxjb21wb3VuZDohMH0pLnNldEdyYXBoKHtyYW5rZGlyOiJUQiIsbm9kZXNlcDphLHJhbmtzZXA6byxtYXJnaW54OjgsbWFyZ2lueTo4fSkuc2V0RGVmYXVsdEVkZ2VMYWJlbCgoZnVuY3Rpb24oKXtyZXR1cm57fX0pKTtmLmluZm8oVGkuZ2V0Um9vdERvY1YyKCkpLFRpLmV4dHJhY3QoVGkuZ2V0Um9vdERvY1YyKCkpLGYuaW5mbyhUaS5nZXRSb290RG9jVjIoKSksemkoYyx2b2lkIDAsVGkuZ2V0Um9vdERvY1YyKCksITApO3ZhciB1PU9iamVjdChzLnNlbGVjdCkoJ1tpZD0iJy5jb25jYXQoZSwnIl0nKSksbD1PYmplY3Qocy5zZWxlY3QpKCIjIitlKyIgZyIpO0NuKGwsYyxbImJhcmIiXSwic3RhdGVkaWFncmFtIixlKTt2YXIgaD11Lm5vZGUoKS5nZXRCQm94KCksZD1oLndpZHRoKzE2LHA9aC5oZWlnaHQrMTY7dS5hdHRyKCJjbGFzcyIsInN0YXRlZGlhZ3JhbSIpO3ZhciBnPXUubm9kZSgpLmdldEJCb3goKTskKHUscCwxLjc1KmQsaS51c2VNYXhXaWR0aCk7dmFyIHk9IiIuY29uY2F0KGcueC04LCIgIikuY29uY2F0KGcueS04LCIgIikuY29uY2F0KGQsIiAiKS5jb25jYXQocCk7aWYoZi5kZWJ1Zygidmlld0JveCAiLmNvbmNhdCh5KSksdS5hdHRyKCJ2aWV3Qm94Iix5KSwhaS5odG1sTGFiZWxzKWZvcih2YXIgdj1kb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdbaWQ9IicrZSsnIl0gLmVkZ2VMYWJlbCAubGFiZWwnKSxtPTA7bTx2Lmxlbmd0aDttKyspe3ZhciBiPXZbbV0seD1iLmdldEJCb3goKSxfPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJyZWN0Iik7Xy5zZXRBdHRyaWJ1dGUoInJ4IiwwKSxfLnNldEF0dHJpYnV0ZSgicnkiLDApLF8uc2V0QXR0cmlidXRlKCJ3aWR0aCIseC53aWR0aCksXy5zZXRBdHRyaWJ1dGUoImhlaWdodCIseC5oZWlnaHQpLGIuaW5zZXJ0QmVmb3JlKF8sYi5maXJzdENoaWxkKX19LEhpPXt9LEdpPW51bGwscWk9e21hc3RlcjpHaX0sWGk9Im1hc3RlciIsWmk9IkxSIixKaT0wO2Z1bmN0aW9uIFFpKCl7cmV0dXJuIEYoe2xlbmd0aDo3fSl9ZnVuY3Rpb24gS2kodCxlKXtmb3IoZi5kZWJ1ZygiRW50ZXJpbmcgaXNmYXN0Zm9yd2FyZGFibGU6Iix0LmlkLGUuaWQpO3Quc2VxPD1lLnNlcSYmdCE9PWUmJm51bGwhPWUucGFyZW50Oyl7aWYoQXJyYXkuaXNBcnJheShlLnBhcmVudCkpcmV0dXJuIGYuZGVidWcoIkluIG1lcmdlIGNvbW1pdDoiLGUucGFyZW50KSxLaSh0LEhpW2UucGFyZW50WzBdXSl8fEtpKHQsSGlbZS5wYXJlbnRbMV1dKTtlPUhpW2UucGFyZW50XX1yZXR1cm4gZi5kZWJ1Zyh0LmlkLGUuaWQpLHQuaWQ9PT1lLmlkfXZhciB0YT17fTtmdW5jdGlvbiBlYSh0LGUsbil7dmFyIHI9dC5pbmRleE9mKGUpOy0xPT09cj90LnB1c2gobik6dC5zcGxpY2UociwxLG4pfWZ1bmN0aW9uIG5hKHQpe3ZhciBlPXQucmVkdWNlKChmdW5jdGlvbih0LGUpe3JldHVybiB0LnNlcT5lLnNlcT90OmV9KSx0WzBdKSxuPSIiO3QuZm9yRWFjaCgoZnVuY3Rpb24odCl7bis9dD09PWU/Ilx0KiI6Ilx0fCJ9KSk7dmFyIHIsaSxhLG89W24sZS5pZCxlLnNlcV07Zm9yKHZhciBzIGluIHFpKXFpW3NdPT09ZS5pZCYmby5wdXNoKHMpO2lmKGYuZGVidWcoby5qb2luKCIgIikpLEFycmF5LmlzQXJyYXkoZS5wYXJlbnQpKXt2YXIgYz1IaVtlLnBhcmVudFswXV07ZWEodCxlLGMpLHQucHVzaChIaVtlLnBhcmVudFsxXV0pfWVsc2V7aWYobnVsbD09ZS5wYXJlbnQpcmV0dXJuO3ZhciB1PUhpW2UucGFyZW50XTtlYSh0LGUsdSl9cj10LGk9ZnVuY3Rpb24odCl7cmV0dXJuIHQuaWR9LGE9T2JqZWN0LmNyZWF0ZShudWxsKSxuYSh0PXIucmVkdWNlKChmdW5jdGlvbih0LGUpe3ZhciBuPWkoZSk7cmV0dXJuIGFbbl18fChhW25dPSEwLHQucHVzaChlKSksdH0pLFtdKSl9dmFyIHJhLGlhPWZ1bmN0aW9uKCl7dmFyIHQ9T2JqZWN0LmtleXMoSGkpLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIEhpW3RdfSkpO3JldHVybiB0LmZvckVhY2goKGZ1bmN0aW9uKHQpe2YuZGVidWcodC5pZCl9KSksdC5zb3J0KChmdW5jdGlvbih0LGUpe3JldHVybiBlLnNlcS10LnNlcX0pKSx0fSxhYT17c2V0RGlyZWN0aW9uOmZ1bmN0aW9uKHQpe1ppPXR9LHNldE9wdGlvbnM6ZnVuY3Rpb24odCl7Zi5kZWJ1Zygib3B0aW9ucyBzdHIiLHQpLHQ9KHQ9dCYmdC50cmltKCkpfHwie30iO3RyeXt0YT1KU09OLnBhcnNlKHQpfWNhdGNoKHQpe2YuZXJyb3IoImVycm9yIHdoaWxlIHBhcnNpbmcgZ2l0R3JhcGggb3B0aW9ucyIsdC5tZXNzYWdlKX19LGdldE9wdGlvbnM6ZnVuY3Rpb24oKXtyZXR1cm4gdGF9LGNvbW1pdDpmdW5jdGlvbih0KXt2YXIgZT17aWQ6UWkoKSxtZXNzYWdlOnQsc2VxOkppKysscGFyZW50Om51bGw9PUdpP251bGw6R2kuaWR9O0dpPWUsSGlbZS5pZF09ZSxxaVtYaV09ZS5pZCxmLmRlYnVnKCJpbiBwdXNoQ29tbWl0ICIrZS5pZCl9LGJyYW5jaDpmdW5jdGlvbih0KXtxaVt0XT1udWxsIT1HaT9HaS5pZDpudWxsLGYuZGVidWcoImluIGNyZWF0ZUJyYW5jaCIpfSxtZXJnZTpmdW5jdGlvbih0KXt2YXIgZT1IaVtxaVtYaV1dLG49SGlbcWlbdF1dO2lmKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQuc2VxPmUuc2VxJiZLaShlLHQpfShlLG4pKWYuZGVidWcoIkFscmVhZHkgbWVyZ2VkIik7ZWxzZXtpZihLaShlLG4pKXFpW1hpXT1xaVt0XSxHaT1IaVtxaVtYaV1dO2Vsc2V7dmFyIHI9e2lkOlFpKCksbWVzc2FnZToibWVyZ2VkIGJyYW5jaCAiK3QrIiBpbnRvICIrWGksc2VxOkppKysscGFyZW50OltudWxsPT1HaT9udWxsOkdpLmlkLHFpW3RdXX07R2k9cixIaVtyLmlkXT1yLHFpW1hpXT1yLmlkfWYuZGVidWcocWkpLGYuZGVidWcoImluIG1lcmdlQnJhbmNoIil9fSxjaGVja291dDpmdW5jdGlvbih0KXtmLmRlYnVnKCJpbiBjaGVja291dCIpO3ZhciBlPXFpW1hpPXRdO0dpPUhpW2VdfSxyZXNldDpmdW5jdGlvbih0KXtmLmRlYnVnKCJpbiByZXNldCIsdCk7dmFyIGU9dC5zcGxpdCgiOiIpWzBdLG49cGFyc2VJbnQodC5zcGxpdCgiOiIpWzFdKSxyPSJIRUFEIj09PWU/R2k6SGlbcWlbZV1dO2ZvcihmLmRlYnVnKHIsbik7bj4wOylpZihuLS0sIShyPUhpW3IucGFyZW50XSkpe3ZhciBpPSJDcml0aWNhbCBlcnJvciAtIHVuaXF1ZSBwYXJlbnQgY29tbWl0IG5vdCBmb3VuZCBkdXJpbmcgcmVzZXQiO3Rocm93IGYuZXJyb3IoaSksaX1HaT1yLHFpW1hpXT1yLmlkfSxwcmV0dHlQcmludDpmdW5jdGlvbigpe2YuZGVidWcoSGkpLG5hKFtpYSgpWzBdXSl9LGNsZWFyOmZ1bmN0aW9uKCl7SGk9e30scWk9e21hc3RlcjpHaT1udWxsfSxYaT0ibWFzdGVyIixKaT0wfSxnZXRCcmFuY2hlc0FzT2JqQXJyYXk6ZnVuY3Rpb24oKXt2YXIgdD1bXTtmb3IodmFyIGUgaW4gcWkpdC5wdXNoKHtuYW1lOmUsY29tbWl0OkhpW3FpW2VdXX0pO3JldHVybiB0fSxnZXRCcmFuY2hlczpmdW5jdGlvbigpe3JldHVybiBxaX0sZ2V0Q29tbWl0czpmdW5jdGlvbigpe3JldHVybiBIaX0sZ2V0Q29tbWl0c0FycmF5OmlhLGdldEN1cnJlbnRCcmFuY2g6ZnVuY3Rpb24oKXtyZXR1cm4gWGl9LGdldERpcmVjdGlvbjpmdW5jdGlvbigpe3JldHVybiBaaX0sZ2V0SGVhZDpmdW5jdGlvbigpe3JldHVybiBHaX19LG9hPW4oNzEpLHNhPW4ubihvYSksY2E9e30sdWE9e25vZGVTcGFjaW5nOjE1MCxub2RlRmlsbENvbG9yOiJ5ZWxsb3ciLG5vZGVTdHJva2VXaWR0aDoyLG5vZGVTdHJva2VDb2xvcjoiZ3JleSIsbGluZVN0cm9rZVdpZHRoOjQsYnJhbmNoT2Zmc2V0OjUwLGxpbmVDb2xvcjoiZ3JleSIsbGVmdE1hcmdpbjo1MCxicmFuY2hDb2xvcnM6WyIjNDQyZjc0IiwiIzk4MzM1MSIsIiM2MDk3MzIiLCIjQUE5QTM5Il0sbm9kZVJhZGl1czoxMCxub2RlTGFiZWw6e3dpZHRoOjc1LGhlaWdodDoxMDAseDotMjUseTowfX0sbGE9e307ZnVuY3Rpb24gaGEodCxlLG4scil7dmFyIGk9TyhyLHMuY3VydmVCYXNpcyksYT11YS5icmFuY2hDb2xvcnNbbiV1YS5icmFuY2hDb2xvcnMubGVuZ3RoXSxvPU9iamVjdChzLmxpbmUpKCkueCgoZnVuY3Rpb24odCl7cmV0dXJuIE1hdGgucm91bmQodC54KX0pKS55KChmdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5yb3VuZCh0LnkpfSkpLmN1cnZlKGkpO3QuYXBwZW5kKCJzdmc6cGF0aCIpLmF0dHIoImQiLG8oZSkpLnN0eWxlKCJzdHJva2UiLGEpLnN0eWxlKCJzdHJva2Utd2lkdGgiLHVhLmxpbmVTdHJva2VXaWR0aCkuc3R5bGUoImZpbGwiLCJub25lIil9ZnVuY3Rpb24gZmEodCxlKXtlPWV8fHQubm9kZSgpLmdldEJCb3goKTt2YXIgbj10Lm5vZGUoKS5nZXRDVE0oKTtyZXR1cm57bGVmdDpuLmUrZS54Km4uYSx0b3A6bi5mK2UueSpuLmQsd2lkdGg6ZS53aWR0aCxoZWlnaHQ6ZS5oZWlnaHR9fWZ1bmN0aW9uIGRhKHQsZSxuLHIsaSl7Zi5kZWJ1Zygic3ZnRHJhd0xpbmVGb3JDb21taXRzOiAiLGUsbik7dmFyIGE9ZmEodC5zZWxlY3QoIiNub2RlLSIrZSsiIGNpcmNsZSIpKSxvPWZhKHQuc2VsZWN0KCIjbm9kZS0iK24rIiBjaXJjbGUiKSk7c3dpdGNoKHIpe2Nhc2UiTFIiOmlmKGEubGVmdC1vLmxlZnQ+dWEubm9kZVNwYWNpbmcpe3ZhciBzPXt4OmEubGVmdC11YS5ub2RlU3BhY2luZyx5Om8udG9wK28uaGVpZ2h0LzJ9O2hhKHQsW3Mse3g6by5sZWZ0K28ud2lkdGgseTpvLnRvcCtvLmhlaWdodC8yfV0saSwibGluZWFyIiksaGEodCxbe3g6YS5sZWZ0LHk6YS50b3ArYS5oZWlnaHQvMn0se3g6YS5sZWZ0LXVhLm5vZGVTcGFjaW5nLzIseTphLnRvcCthLmhlaWdodC8yfSx7eDphLmxlZnQtdWEubm9kZVNwYWNpbmcvMix5OnMueX0sc10saSl9ZWxzZSBoYSh0LFt7eDphLmxlZnQseTphLnRvcCthLmhlaWdodC8yfSx7eDphLmxlZnQtdWEubm9kZVNwYWNpbmcvMix5OmEudG9wK2EuaGVpZ2h0LzJ9LHt4OmEubGVmdC11YS5ub2RlU3BhY2luZy8yLHk6by50b3Arby5oZWlnaHQvMn0se3g6by5sZWZ0K28ud2lkdGgseTpvLnRvcCtvLmhlaWdodC8yfV0saSk7YnJlYWs7Y2FzZSJCVCI6aWYoby50b3AtYS50b3A+dWEubm9kZVNwYWNpbmcpe3ZhciBjPXt4Om8ubGVmdCtvLndpZHRoLzIseTphLnRvcCthLmhlaWdodCt1YS5ub2RlU3BhY2luZ307aGEodCxbYyx7eDpvLmxlZnQrby53aWR0aC8yLHk6by50b3B9XSxpLCJsaW5lYXIiKSxoYSh0LFt7eDphLmxlZnQrYS53aWR0aC8yLHk6YS50b3ArYS5oZWlnaHR9LHt4OmEubGVmdCthLndpZHRoLzIseTphLnRvcCthLmhlaWdodCt1YS5ub2RlU3BhY2luZy8yfSx7eDpvLmxlZnQrby53aWR0aC8yLHk6Yy55LXVhLm5vZGVTcGFjaW5nLzJ9LGNdLGkpfWVsc2UgaGEodCxbe3g6YS5sZWZ0K2Eud2lkdGgvMix5OmEudG9wK2EuaGVpZ2h0fSx7eDphLmxlZnQrYS53aWR0aC8yLHk6YS50b3ArdWEubm9kZVNwYWNpbmcvMn0se3g6by5sZWZ0K28ud2lkdGgvMix5Om8udG9wLXVhLm5vZGVTcGFjaW5nLzJ9LHt4Om8ubGVmdCtvLndpZHRoLzIseTpvLnRvcH1dLGkpfX1mdW5jdGlvbiBwYSh0LGUpe3JldHVybiB0LnNlbGVjdChlKS5ub2RlKCkuY2xvbmVOb2RlKCEwKX1mdW5jdGlvbiBnYSh0LGUsbixyKXt2YXIgaSxhPU9iamVjdC5rZXlzKGNhKS5sZW5ndGg7aWYoInN0cmluZyI9PXR5cGVvZiBlKWRve2lmKGk9Y2FbZV0sZi5kZWJ1ZygiaW4gcmVuZGVyQ29tbWl0SGlzdG9yeSIsaS5pZCxpLnNlcSksdC5zZWxlY3QoIiNub2RlLSIrZSkuc2l6ZSgpPjApcmV0dXJuO3QuYXBwZW5kKChmdW5jdGlvbigpe3JldHVybiBwYSh0LCIjZGVmLWNvbW1pdCIpfSkpLmF0dHIoImNsYXNzIiwiY29tbWl0IikuYXR0cigiaWQiLChmdW5jdGlvbigpe3JldHVybiJub2RlLSIraS5pZH0pKS5hdHRyKCJ0cmFuc2Zvcm0iLChmdW5jdGlvbigpe3N3aXRjaChyKXtjYXNlIkxSIjpyZXR1cm4idHJhbnNsYXRlKCIrKGkuc2VxKnVhLm5vZGVTcGFjaW5nK3VhLmxlZnRNYXJnaW4pKyIsICIrcmEqdWEuYnJhbmNoT2Zmc2V0KyIpIjtjYXNlIkJUIjpyZXR1cm4idHJhbnNsYXRlKCIrKHJhKnVhLmJyYW5jaE9mZnNldCt1YS5sZWZ0TWFyZ2luKSsiLCAiKyhhLWkuc2VxKSp1YS5ub2RlU3BhY2luZysiKSJ9fSkpLmF0dHIoImZpbGwiLHVhLm5vZGVGaWxsQ29sb3IpLmF0dHIoInN0cm9rZSIsdWEubm9kZVN0cm9rZUNvbG9yKS5hdHRyKCJzdHJva2Utd2lkdGgiLHVhLm5vZGVTdHJva2VXaWR0aCk7dmFyIG89dm9pZCAwO2Zvcih2YXIgcyBpbiBuKWlmKG5bc10uY29tbWl0PT09aSl7bz1uW3NdO2JyZWFrfW8mJihmLmRlYnVnKCJmb3VuZCBicmFuY2ggIixvLm5hbWUpLHQuc2VsZWN0KCIjbm9kZS0iK2kuaWQrIiBwIikuYXBwZW5kKCJ4aHRtbDpzcGFuIikuYXR0cigiY2xhc3MiLCJicmFuY2gtbGFiZWwiKS50ZXh0KG8ubmFtZSsiLCAiKSksdC5zZWxlY3QoIiNub2RlLSIraS5pZCsiIHAiKS5hcHBlbmQoInhodG1sOnNwYW4iKS5hdHRyKCJjbGFzcyIsImNvbW1pdC1pZCIpLnRleHQoaS5pZCksIiIhPT1pLm1lc3NhZ2UmJiJCVCI9PT1yJiZ0LnNlbGVjdCgiI25vZGUtIitpLmlkKyIgcCIpLmFwcGVuZCgieGh0bWw6c3BhbiIpLmF0dHIoImNsYXNzIiwiY29tbWl0LW1zZyIpLnRleHQoIiwgIitpLm1lc3NhZ2UpLGU9aS5wYXJlbnR9d2hpbGUoZSYmY2FbZV0pO0FycmF5LmlzQXJyYXkoZSkmJihmLmRlYnVnKCJmb3VuZCBtZXJnZSBjb21tbWl0IixlKSxnYSh0LGVbMF0sbixyKSxyYSsrLGdhKHQsZVsxXSxuLHIpLHJhLS0pfWZ1bmN0aW9uIHlhKHQsZSxuLHIpe2ZvcihyPXJ8fDA7ZS5zZXE+MCYmIWUubGluZURyYXduOykic3RyaW5nIj09dHlwZW9mIGUucGFyZW50PyhkYSh0LGUuaWQsZS5wYXJlbnQsbixyKSxlLmxpbmVEcmF3bj0hMCxlPWNhW2UucGFyZW50XSk6QXJyYXkuaXNBcnJheShlLnBhcmVudCkmJihkYSh0LGUuaWQsZS5wYXJlbnRbMF0sbixyKSxkYSh0LGUuaWQsZS5wYXJlbnRbMV0sbixyKzEpLHlhKHQsY2FbZS5wYXJlbnRbMV1dLG4scisxKSxlLmxpbmVEcmF3bj0hMCxlPWNhW2UucGFyZW50WzBdXSl9dmFyIHZhLG1hPWZ1bmN0aW9uKHQpe2xhPXR9LGJhPWZ1bmN0aW9uKHQsZSxuKXt0cnl7dmFyIHI9c2EuYS5wYXJzZXI7ci55eT1hYSxyLnl5LmNsZWFyKCksZi5kZWJ1ZygiaW4gZ2l0Z3JhcGggcmVuZGVyZXIiLHQrIlxuIiwiaWQ6IixlLG4pLHIucGFyc2UodCsiXG4iKSx1YT1PYmplY3QuYXNzaWduKHVhLGxhLGFhLmdldE9wdGlvbnMoKSksZi5kZWJ1ZygiZWZmZWN0aXZlIG9wdGlvbnMiLHVhKTt2YXIgaT1hYS5nZXREaXJlY3Rpb24oKTtjYT1hYS5nZXRDb21taXRzKCk7dmFyIGE9YWEuZ2V0QnJhbmNoZXNBc09iakFycmF5KCk7IkJUIj09PWkmJih1YS5ub2RlTGFiZWwueD1hLmxlbmd0aCp1YS5icmFuY2hPZmZzZXQsdWEubm9kZUxhYmVsLndpZHRoPSIxMDAlIix1YS5ub2RlTGFiZWwueT0tMip1YS5ub2RlUmFkaXVzKTt2YXIgbz1PYmplY3Qocy5zZWxlY3QpKCdbaWQ9IicuY29uY2F0KGUsJyJdJykpO2Zvcih2YXIgYyBpbiBmdW5jdGlvbih0KXt0LmFwcGVuZCgiZGVmcyIpLmFwcGVuZCgiZyIpLmF0dHIoImlkIiwiZGVmLWNvbW1pdCIpLmFwcGVuZCgiY2lyY2xlIikuYXR0cigiciIsdWEubm9kZVJhZGl1cykuYXR0cigiY3giLDApLmF0dHIoImN5IiwwKSx0LnNlbGVjdCgiI2RlZi1jb21taXQiKS5hcHBlbmQoImZvcmVpZ25PYmplY3QiKS5hdHRyKCJ3aWR0aCIsdWEubm9kZUxhYmVsLndpZHRoKS5hdHRyKCJoZWlnaHQiLHVhLm5vZGVMYWJlbC5oZWlnaHQpLmF0dHIoIngiLHVhLm5vZGVMYWJlbC54KS5hdHRyKCJ5Iix1YS5ub2RlTGFiZWwueSkuYXR0cigiY2xhc3MiLCJub2RlLWxhYmVsIikuYXR0cigicmVxdWlyZWRGZWF0dXJlcyIsImh0dHA6Ly93d3cudzMub3JnL1RSL1NWRzExL2ZlYXR1cmUjRXh0ZW5zaWJpbGl0eSIpLmFwcGVuZCgicCIpLmh0bWwoIiIpfShvKSxyYT0xLGEpe3ZhciB1PWFbY107Z2Eobyx1LmNvbW1pdC5pZCxhLGkpLHlhKG8sdS5jb21taXQsaSkscmErK31vLmF0dHIoImhlaWdodCIsKGZ1bmN0aW9uKCl7cmV0dXJuIkJUIj09PWk/T2JqZWN0LmtleXMoY2EpLmxlbmd0aCp1YS5ub2RlU3BhY2luZzooYS5sZW5ndGgrMSkqdWEuYnJhbmNoT2Zmc2V0fSkpfWNhdGNoKHQpe2YuZXJyb3IoIkVycm9yIHdoaWxlIHJlbmRlcmluZyBnaXRncmFwaCIpLGYuZXJyb3IodC5tZXNzYWdlKX19LHhhPSIiLF9hPSExLGthPXtzZXRNZXNzYWdlOmZ1bmN0aW9uKHQpe2YuZGVidWcoIlNldHRpbmcgbWVzc2FnZSB0bzogIit0KSx4YT10fSxnZXRNZXNzYWdlOmZ1bmN0aW9uKCl7cmV0dXJuIHhhfSxzZXRJbmZvOmZ1bmN0aW9uKHQpe19hPXR9LGdldEluZm86ZnVuY3Rpb24oKXtyZXR1cm4gX2F9fSx3YT1uKDcyKSxFYT1uLm4od2EpLFRhPXt9LENhPWZ1bmN0aW9uKHQpe09iamVjdC5rZXlzKHQpLmZvckVhY2goKGZ1bmN0aW9uKGUpe1RhW2VdPXRbZV19KSl9LFNhPWZ1bmN0aW9uKHQsZSxuKXt0cnl7dmFyIHI9RWEuYS5wYXJzZXI7ci55eT1rYSxmLmRlYnVnKCJSZW5lcmluZyBpbmZvIGRpYWdyYW1cbiIrdCksci5wYXJzZSh0KSxmLmRlYnVnKCJQYXJzZWQgaW5mbyBkaWFncmFtIik7dmFyIGk9T2JqZWN0KHMuc2VsZWN0KSgiIyIrZSk7aS5hcHBlbmQoImciKS5hcHBlbmQoInRleHQiKS5hdHRyKCJ4IiwxMDApLmF0dHIoInkiLDQwKS5hdHRyKCJjbGFzcyIsInZlcnNpb24iKS5hdHRyKCJmb250LXNpemUiLCIzMnB4Iikuc3R5bGUoInRleHQtYW5jaG9yIiwibWlkZGxlIikudGV4dCgidiAiK24pLGkuYXR0cigiaGVpZ2h0IiwxMDApLGkuYXR0cigid2lkdGgiLDQwMCl9Y2F0Y2godCl7Zi5lcnJvcigiRXJyb3Igd2hpbGUgcmVuZGVyaW5nIGluZm8gZGlhZ3JhbSIpLGYuZXJyb3IodC5tZXNzYWdlKX19LEFhPXt9LE1hPWZ1bmN0aW9uKHQpe09iamVjdC5rZXlzKHQpLmZvckVhY2goKGZ1bmN0aW9uKGUpe0FhW2VdPXRbZV19KSl9LE9hPWZ1bmN0aW9uKHQsZSl7dHJ5e2YuZGVidWcoIlJlbmVyaW5nIHN2ZyBmb3Igc3ludGF4IGVycm9yXG4iKTt2YXIgbj1PYmplY3Qocy5zZWxlY3QpKCIjIit0KSxyPW4uYXBwZW5kKCJnIik7ci5hcHBlbmQoInBhdGgiKS5hdHRyKCJjbGFzcyIsImVycm9yLWljb24iKS5hdHRyKCJkIiwibTQxMS4zMTMsMTIzLjMxM2M2LjI1LTYuMjUgNi4yNS0xNi4zNzUgMC0yMi42MjVzLTE2LjM3NS02LjI1LTIyLjYyNSwwbC0zMiwzMi05LjM3NSw5LjM3NS0yMC42ODgtMjAuNjg4Yy0xMi40ODQtMTIuNS0zMi43NjYtMTIuNS00NS4yNSwwbC0xNiwxNmMtMS4yNjEsMS4yNjEtMi4zMDQsMi42NDgtMy4zMSw0LjA1MS0yMS43MzktOC41NjEtNDUuMzI0LTEzLjQyNi03MC4wNjUtMTMuNDI2LTEwNS44NjcsMC0xOTIsODYuMTMzLTE5MiwxOTJzODYuMTMzLDE5MiAxOTIsMTkyIDE5Mi04Ni4xMzMgMTkyLTE5MmMwLTI0Ljc0MS00Ljg2NC00OC4zMjctMTMuNDI2LTcwLjA2NSAxLjQwMi0xLjAwNyAyLjc5LTIuMDQ5IDQuMDUxLTMuMzFsMTYtMTZjMTIuNS0xMi40OTIgMTIuNS0zMi43NTggMC00NS4yNWwtMjAuNjg4LTIwLjY4OCA5LjM3NS05LjM3NSAzMi4wMDEtMzEuOTk5em0tMjE5LjMxMywxMDAuNjg3Yy01Mi45MzgsMC05Niw0My4wNjMtOTYsOTYgMCw4LjgzNi03LjE2NCwxNi0xNiwxNnMtMTYtNy4xNjQtMTYtMTZjMC03MC41NzggNTcuNDIyLTEyOCAxMjgtMTI4IDguODM2LDAgMTYsNy4xNjQgMTYsMTZzLTcuMTY0LDE2LTE2LDE2eiIpLHIuYXBwZW5kKCJwYXRoIikuYXR0cigiY2xhc3MiLCJlcnJvci1pY29uIikuYXR0cigiZCIsIm00NTkuMDIsMTQ4Ljk4Yy02LjI1LTYuMjUtMTYuMzc1LTYuMjUtMjIuNjI1LDBzLTYuMjUsMTYuMzc1IDAsMjIuNjI1bDE2LDE2YzMuMTI1LDMuMTI1IDcuMjE5LDQuNjg4IDExLjMxMyw0LjY4OCA0LjA5NCwwIDguMTg4LTEuNTYzIDExLjMxMy00LjY4OCA2LjI1LTYuMjUgNi4yNS0xNi4zNzUgMC0yMi42MjVsLTE2LjAwMS0xNnoiKSxyLmFwcGVuZCgicGF0aCIpLmF0dHIoImNsYXNzIiwiZXJyb3ItaWNvbiIpLmF0dHIoImQiLCJtMzQwLjM5NSw3NS42MDVjMy4xMjUsMy4xMjUgNy4yMTksNC42ODggMTEuMzEzLDQuNjg4IDQuMDk0LDAgOC4xODgtMS41NjMgMTEuMzEzLTQuNjg4IDYuMjUtNi4yNSA2LjI1LTE2LjM3NSAwLTIyLjYyNWwtMTYtMTZjLTYuMjUtNi4yNS0xNi4zNzUtNi4yNS0yMi42MjUsMHMtNi4yNSwxNi4zNzUgMCwyMi42MjVsMTUuOTk5LDE2eiIpLHIuYXBwZW5kKCJwYXRoIikuYXR0cigiY2xhc3MiLCJlcnJvci1pY29uIikuYXR0cigiZCIsIm00MDAsNjRjOC44NDQsMCAxNi03LjE2NCAxNi0xNnYtMzJjMC04LjgzNi03LjE1Ni0xNi0xNi0xNi04Ljg0NCwwLTE2LDcuMTY0LTE2LDE2djMyYzAsOC44MzYgNy4xNTYsMTYgMTYsMTZ6Iiksci5hcHBlbmQoInBhdGgiKS5hdHRyKCJjbGFzcyIsImVycm9yLWljb24iKS5hdHRyKCJkIiwibTQ5Niw5Ni41ODZoLTMyYy04Ljg0NCwwLTE2LDcuMTY0LTE2LDE2IDAsOC44MzYgNy4xNTYsMTYgMTYsMTZoMzJjOC44NDQsMCAxNi03LjE2NCAxNi0xNiAwLTguODM2LTcuMTU2LTE2LTE2LTE2eiIpLHIuYXBwZW5kKCJwYXRoIikuYXR0cigiY2xhc3MiLCJlcnJvci1pY29uIikuYXR0cigiZCIsIm00MzYuOTgsNzUuNjA1YzMuMTI1LDMuMTI1IDcuMjE5LDQuNjg4IDExLjMxMyw0LjY4OCA0LjA5NCwwIDguMTg4LTEuNTYzIDExLjMxMy00LjY4OGwzMi0zMmM2LjI1LTYuMjUgNi4yNS0xNi4zNzUgMC0yMi42MjVzLTE2LjM3NS02LjI1LTIyLjYyNSwwbC0zMiwzMmMtNi4yNTEsNi4yNS02LjI1MSwxNi4zNzUtMC4wMDEsMjIuNjI1eiIpLHIuYXBwZW5kKCJ0ZXh0IikuYXR0cigiY2xhc3MiLCJlcnJvci10ZXh0IikuYXR0cigieCIsMTI0MCkuYXR0cigieSIsMjUwKS5hdHRyKCJmb250LXNpemUiLCIxNTBweCIpLnN0eWxlKCJ0ZXh0LWFuY2hvciIsIm1pZGRsZSIpLnRleHQoIlN5bnRheCBlcnJvciBpbiBncmFwaCIpLHIuYXBwZW5kKCJ0ZXh0IikuYXR0cigiY2xhc3MiLCJlcnJvci10ZXh0IikuYXR0cigieCIsMTA1MCkuYXR0cigieSIsNDAwKS5hdHRyKCJmb250LXNpemUiLCIxMDBweCIpLnN0eWxlKCJ0ZXh0LWFuY2hvciIsIm1pZGRsZSIpLnRleHQoIm1lcm1haWQgdmVyc2lvbiAiK2UpLG4uYXR0cigiaGVpZ2h0IiwxMDApLG4uYXR0cigid2lkdGgiLDQwMCksbi5hdHRyKCJ2aWV3Qm94IiwiNzY4IDAgNTEyIDUxMiIpfWNhdGNoKHQpe2YuZXJyb3IoIkVycm9yIHdoaWxlIHJlbmRlcmluZyBpbmZvIGRpYWdyYW0iKSxmLmVycm9yKHQubWVzc2FnZSl9fSxEYT17fSxOYT0iIixCYT17cGFyc2VEaXJlY3RpdmU6ZnVuY3Rpb24odCxlLG4pe3pvLnBhcnNlRGlyZWN0aXZlKHRoaXMsdCxlLG4pfSxnZXRDb25maWc6ZnVuY3Rpb24oKXtyZXR1cm4geHQoKS5waWV9LGFkZFNlY3Rpb246ZnVuY3Rpb24odCxlKXt2b2lkIDA9PT1EYVt0XSYmKERhW3RdPWUsZi5kZWJ1ZygiQWRkZWQgbmV3IHNlY3Rpb24gOiIsdCkpfSxnZXRTZWN0aW9uczpmdW5jdGlvbigpe3JldHVybiBEYX0sY2xlYW51cFZhbHVlOmZ1bmN0aW9uKHQpe3JldHVybiI6Ij09PXQuc3Vic3RyaW5nKDAsMSk/KHQ9dC5zdWJzdHJpbmcoMSkudHJpbSgpLE51bWJlcih0LnRyaW0oKSkpOk51bWJlcih0LnRyaW0oKSl9LGNsZWFyOmZ1bmN0aW9uKCl7RGE9e30sTmE9IiJ9LHNldFRpdGxlOmZ1bmN0aW9uKHQpe05hPXR9LGdldFRpdGxlOmZ1bmN0aW9uKCl7cmV0dXJuIE5hfX0sTGE9big3MyksRmE9bi5uKExhKSxQYT17fSxJYT1mdW5jdGlvbih0KXtPYmplY3Qua2V5cyh0KS5mb3JFYWNoKChmdW5jdGlvbihlKXtQYVtlXT10W2VdfSkpfSxqYT1mdW5jdGlvbih0LGUpe3RyeXt2YXIgbj1GYS5hLnBhcnNlcjtuLnl5PUJhLGYuZGVidWcoIlJlbmRlcmluZyBpbmZvIGRpYWdyYW1cbiIrdCksbi55eS5jbGVhcigpLG4ucGFyc2UodCksZi5kZWJ1ZygiUGFyc2VkIGluZm8gZGlhZ3JhbSIpO3ZhciByPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGUpO3ZvaWQgMD09PSh2YT1yLnBhcmVudEVsZW1lbnQub2Zmc2V0V2lkdGgpJiYodmE9MTIwMCksdm9pZCAwIT09UGEudXNlV2lkdGgmJih2YT1QYS51c2VXaWR0aCk7dmFyIGk9T2JqZWN0KHMuc2VsZWN0KSgiIyIrZSk7JChpLDQ1MCx2YSxQYS51c2VNYXhXaWR0aCksci5zZXRBdHRyaWJ1dGUoInZpZXdCb3giLCIwIDAgIit2YSsiIDQ1MCIpO3ZhciBhPU1hdGgubWluKHZhLDQ1MCkvMi00MCxvPWkuYXBwZW5kKCJnIikuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrdmEvMisiLDIyNSkiKSxjPUJhLmdldFNlY3Rpb25zKCksdT0wO09iamVjdC5rZXlzKGMpLmZvckVhY2goKGZ1bmN0aW9uKHQpe3UrPWNbdF19KSk7dmFyIGw9T2JqZWN0KHMuc2NhbGVPcmRpbmFsKSgpLmRvbWFpbihjKS5yYW5nZShzLnNjaGVtZVNldDIpLGg9T2JqZWN0KHMucGllKSgpLnZhbHVlKChmdW5jdGlvbih0KXtyZXR1cm4gdC52YWx1ZX0pKShPYmplY3Qocy5lbnRyaWVzKShjKSksZD1PYmplY3Qocy5hcmMpKCkuaW5uZXJSYWRpdXMoMCkub3V0ZXJSYWRpdXMoYSk7by5zZWxlY3RBbGwoIm15U2xpY2VzIikuZGF0YShoKS5lbnRlcigpLmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLGQpLmF0dHIoImZpbGwiLChmdW5jdGlvbih0KXtyZXR1cm4gbCh0LmRhdGEua2V5KX0pKS5hdHRyKCJzdHJva2UiLCJibGFjayIpLnN0eWxlKCJzdHJva2Utd2lkdGgiLCIycHgiKS5zdHlsZSgib3BhY2l0eSIsLjcpLG8uc2VsZWN0QWxsKCJteVNsaWNlcyIpLmRhdGEoaCkuZW50ZXIoKS5hcHBlbmQoInRleHQiKS50ZXh0KChmdW5jdGlvbih0KXtyZXR1cm4odC5kYXRhLnZhbHVlL3UqMTAwKS50b0ZpeGVkKDApKyIlIn0pKS5hdHRyKCJ0cmFuc2Zvcm0iLChmdW5jdGlvbih0KXtyZXR1cm4idHJhbnNsYXRlKCIrZC5jZW50cm9pZCh0KSsiKSJ9KSkuc3R5bGUoInRleHQtYW5jaG9yIiwibWlkZGxlIikuYXR0cigiY2xhc3MiLCJzbGljZSIpLnN0eWxlKCJmb250LXNpemUiLDE3KSxvLmFwcGVuZCgidGV4dCIpLnRleHQobi55eS5nZXRUaXRsZSgpKS5hdHRyKCJ4IiwwKS5hdHRyKCJ5IiwtMjAwKS5hdHRyKCJjbGFzcyIsInBpZVRpdGxlVGV4dCIpO3ZhciBwPW8uc2VsZWN0QWxsKCIubGVnZW5kIikuZGF0YShsLmRvbWFpbigpKS5lbnRlcigpLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwibGVnZW5kIikuYXR0cigidHJhbnNmb3JtIiwoZnVuY3Rpb24odCxlKXtyZXR1cm4idHJhbnNsYXRlKDIxNiwiKygyMiplLTIyKmwuZG9tYWluKCkubGVuZ3RoLzIpKyIpIn0pKTtwLmFwcGVuZCgicmVjdCIpLmF0dHIoIndpZHRoIiwxOCkuYXR0cigiaGVpZ2h0IiwxOCkuc3R5bGUoImZpbGwiLGwpLnN0eWxlKCJzdHJva2UiLGwpLHAuYXBwZW5kKCJ0ZXh0IikuYXR0cigieCIsMjIpLmF0dHIoInkiLDE0KS50ZXh0KChmdW5jdGlvbih0KXtyZXR1cm4gdH0pKX1jYXRjaCh0KXtmLmVycm9yKCJFcnJvciB3aGlsZSByZW5kZXJpbmcgaW5mbyBkaWFncmFtIiksZi5lcnJvcih0KX19LFJhPXt9LFlhPVtdLHphPSIiLFVhPXtDYXJkaW5hbGl0eTp7WkVST19PUl9PTkU6IlpFUk9fT1JfT05FIixaRVJPX09SX01PUkU6IlpFUk9fT1JfTU9SRSIsT05FX09SX01PUkU6Ik9ORV9PUl9NT1JFIixPTkxZX09ORToiT05MWV9PTkUifSxJZGVudGlmaWNhdGlvbjp7Tk9OX0lERU5USUZZSU5HOiJOT05fSURFTlRJRllJTkciLElERU5USUZZSU5HOiJJREVOVElGWUlORyJ9LHBhcnNlRGlyZWN0aXZlOmZ1bmN0aW9uKHQsZSxuKXt6by5wYXJzZURpcmVjdGl2ZSh0aGlzLHQsZSxuKX0sZ2V0Q29uZmlnOmZ1bmN0aW9uKCl7cmV0dXJuIHh0KCkuZXJ9LGFkZEVudGl0eTpmdW5jdGlvbih0KXt2b2lkIDA9PT1SYVt0XSYmKFJhW3RdPXQsZi5kZWJ1ZygiQWRkZWQgbmV3IGVudGl0eSA6Iix0KSl9LGdldEVudGl0aWVzOmZ1bmN0aW9uKCl7cmV0dXJuIFJhfSxhZGRSZWxhdGlvbnNoaXA6ZnVuY3Rpb24odCxlLG4scil7dmFyIGk9e2VudGl0eUE6dCxyb2xlQTplLGVudGl0eUI6bixyZWxTcGVjOnJ9O1lhLnB1c2goaSksZi5kZWJ1ZygiQWRkZWQgbmV3IHJlbGF0aW9uc2hpcCA6IixpKX0sZ2V0UmVsYXRpb25zaGlwczpmdW5jdGlvbigpe3JldHVybiBZYX0sY2xlYXI6ZnVuY3Rpb24oKXtSYT17fSxZYT1bXSx6YT0iIn0sc2V0VGl0bGU6ZnVuY3Rpb24odCl7emE9dH0sZ2V0VGl0bGU6ZnVuY3Rpb24oKXtyZXR1cm4gemF9fSwkYT1uKDc0KSxXYT1uLm4oJGEpLFZhPXtPTkxZX09ORV9TVEFSVDoiT05MWV9PTkVfU1RBUlQiLE9OTFlfT05FX0VORDoiT05MWV9PTkVfRU5EIixaRVJPX09SX09ORV9TVEFSVDoiWkVST19PUl9PTkVfU1RBUlQiLFpFUk9fT1JfT05FX0VORDoiWkVST19PUl9PTkVfRU5EIixPTkVfT1JfTU9SRV9TVEFSVDoiT05FX09SX01PUkVfU1RBUlQiLE9ORV9PUl9NT1JFX0VORDoiT05FX09SX01PUkVfRU5EIixaRVJPX09SX01PUkVfU1RBUlQ6IlpFUk9fT1JfTU9SRV9TVEFSVCIsWkVST19PUl9NT1JFX0VORDoiWkVST19PUl9NT1JFX0VORCJ9LEhhPVZhLEdhPWZ1bmN0aW9uKHQsZSl7dmFyIG47dC5hcHBlbmQoImRlZnMiKS5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIixWYS5PTkxZX09ORV9TVEFSVCkuYXR0cigicmVmWCIsMCkuYXR0cigicmVmWSIsOSkuYXR0cigibWFya2VyV2lkdGgiLDE4KS5hdHRyKCJtYXJrZXJIZWlnaHQiLDE4KS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJwYXRoIikuYXR0cigic3Ryb2tlIixlLnN0cm9rZSkuYXR0cigiZmlsbCIsIm5vbmUiKS5hdHRyKCJkIiwiTTksMCBMOSwxOCBNMTUsMCBMMTUsMTgiKSx0LmFwcGVuZCgiZGVmcyIpLmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLFZhLk9OTFlfT05FX0VORCkuYXR0cigicmVmWCIsMTgpLmF0dHIoInJlZlkiLDkpLmF0dHIoIm1hcmtlcldpZHRoIiwxOCkuYXR0cigibWFya2VySGVpZ2h0IiwxOCkuYXR0cigib3JpZW50IiwiYXV0byIpLmFwcGVuZCgicGF0aCIpLmF0dHIoInN0cm9rZSIsZS5zdHJva2UpLmF0dHIoImZpbGwiLCJub25lIikuYXR0cigiZCIsIk0zLDAgTDMsMTggTTksMCBMOSwxOCIpLChuPXQuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIsVmEuWkVST19PUl9PTkVfU1RBUlQpLmF0dHIoInJlZlgiLDApLmF0dHIoInJlZlkiLDkpLmF0dHIoIm1hcmtlcldpZHRoIiwzMCkuYXR0cigibWFya2VySGVpZ2h0IiwxOCkuYXR0cigib3JpZW50IiwiYXV0byIpKS5hcHBlbmQoImNpcmNsZSIpLmF0dHIoInN0cm9rZSIsZS5zdHJva2UpLmF0dHIoImZpbGwiLCJ3aGl0ZSIpLmF0dHIoImN4IiwyMSkuYXR0cigiY3kiLDkpLmF0dHIoInIiLDYpLG4uYXBwZW5kKCJwYXRoIikuYXR0cigic3Ryb2tlIixlLnN0cm9rZSkuYXR0cigiZmlsbCIsIm5vbmUiKS5hdHRyKCJkIiwiTTksMCBMOSwxOCIpLChuPXQuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIsVmEuWkVST19PUl9PTkVfRU5EKS5hdHRyKCJyZWZYIiwzMCkuYXR0cigicmVmWSIsOSkuYXR0cigibWFya2VyV2lkdGgiLDMwKS5hdHRyKCJtYXJrZXJIZWlnaHQiLDE4KS5hdHRyKCJvcmllbnQiLCJhdXRvIikpLmFwcGVuZCgiY2lyY2xlIikuYXR0cigic3Ryb2tlIixlLnN0cm9rZSkuYXR0cigiZmlsbCIsIndoaXRlIikuYXR0cigiY3giLDkpLmF0dHIoImN5Iiw5KS5hdHRyKCJyIiw2KSxuLmFwcGVuZCgicGF0aCIpLmF0dHIoInN0cm9rZSIsZS5zdHJva2UpLmF0dHIoImZpbGwiLCJub25lIikuYXR0cigiZCIsIk0yMSwwIEwyMSwxOCIpLHQuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIsVmEuT05FX09SX01PUkVfU1RBUlQpLmF0dHIoInJlZlgiLDE4KS5hdHRyKCJyZWZZIiwxOCkuYXR0cigibWFya2VyV2lkdGgiLDQ1KS5hdHRyKCJtYXJrZXJIZWlnaHQiLDM2KS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJwYXRoIikuYXR0cigic3Ryb2tlIixlLnN0cm9rZSkuYXR0cigiZmlsbCIsIm5vbmUiKS5hdHRyKCJkIiwiTTAsMTggUSAxOCwwIDM2LDE4IFEgMTgsMzYgMCwxOCBNNDIsOSBMNDIsMjciKSx0LmFwcGVuZCgiZGVmcyIpLmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLFZhLk9ORV9PUl9NT1JFX0VORCkuYXR0cigicmVmWCIsMjcpLmF0dHIoInJlZlkiLDE4KS5hdHRyKCJtYXJrZXJXaWR0aCIsNDUpLmF0dHIoIm1hcmtlckhlaWdodCIsMzYpLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJzdHJva2UiLGUuc3Ryb2tlKS5hdHRyKCJmaWxsIiwibm9uZSIpLmF0dHIoImQiLCJNMyw5IEwzLDI3IE05LDE4IFEyNywwIDQ1LDE4IFEyNywzNiA5LDE4IiksKG49dC5hcHBlbmQoImRlZnMiKS5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIixWYS5aRVJPX09SX01PUkVfU1RBUlQpLmF0dHIoInJlZlgiLDE4KS5hdHRyKCJyZWZZIiwxOCkuYXR0cigibWFya2VyV2lkdGgiLDU3KS5hdHRyKCJtYXJrZXJIZWlnaHQiLDM2KS5hdHRyKCJvcmllbnQiLCJhdXRvIikpLmFwcGVuZCgiY2lyY2xlIikuYXR0cigic3Ryb2tlIixlLnN0cm9rZSkuYXR0cigiZmlsbCIsIndoaXRlIikuYXR0cigiY3giLDQ4KS5hdHRyKCJjeSIsMTgpLmF0dHIoInIiLDYpLG4uYXBwZW5kKCJwYXRoIikuYXR0cigic3Ryb2tlIixlLnN0cm9rZSkuYXR0cigiZmlsbCIsIm5vbmUiKS5hdHRyKCJkIiwiTTAsMTggUTE4LDAgMzYsMTggUTE4LDM2IDAsMTgiKSwobj10LmFwcGVuZCgiZGVmcyIpLmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLFZhLlpFUk9fT1JfTU9SRV9FTkQpLmF0dHIoInJlZlgiLDM5KS5hdHRyKCJyZWZZIiwxOCkuYXR0cigibWFya2VyV2lkdGgiLDU3KS5hdHRyKCJtYXJrZXJIZWlnaHQiLDM2KS5hdHRyKCJvcmllbnQiLCJhdXRvIikpLmFwcGVuZCgiY2lyY2xlIikuYXR0cigic3Ryb2tlIixlLnN0cm9rZSkuYXR0cigiZmlsbCIsIndoaXRlIikuYXR0cigiY3giLDkpLmF0dHIoImN5IiwxOCkuYXR0cigiciIsNiksbi5hcHBlbmQoInBhdGgiKS5hdHRyKCJzdHJva2UiLGUuc3Ryb2tlKS5hdHRyKCJmaWxsIiwibm9uZSIpLmF0dHIoImQiLCJNMjEsMTggUTM5LDAgNTcsMTggUTM5LDM2IDIxLDE4Iil9LHFhPXt9LFhhPWZ1bmN0aW9uKHQpe3JldHVybih0LmVudGl0eUErdC5yb2xlQSt0LmVudGl0eUIpLnJlcGxhY2UoL1xzL2csIiIpfSxaYT0wLEphPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT1PYmplY3Qua2V5cyh0KSxuPTA7bjxlLmxlbmd0aDtuKyspcWFbZVtuXV09dFtlW25dXX0sUWE9ZnVuY3Rpb24odCxlKXtmLmluZm8oIkRyYXdpbmcgRVIgZGlhZ3JhbSIpLFVhLmNsZWFyKCk7dmFyIG49V2EuYS5wYXJzZXI7bi55eT1VYTt0cnl7bi5wYXJzZSh0KX1jYXRjaCh0KXtmLmRlYnVnKCJQYXJzaW5nIGZhaWxlZCIpfXZhciByLGk9T2JqZWN0KHMuc2VsZWN0KSgiW2lkPSciLmNvbmNhdChlLCInXSIpKTtHYShpLHFhKSxyPW5ldyBILmEuR3JhcGgoe211bHRpZ3JhcGg6ITAsZGlyZWN0ZWQ6ITAsY29tcG91bmQ6ITF9KS5zZXRHcmFwaCh7cmFua2RpcjpxYS5sYXlvdXREaXJlY3Rpb24sbWFyZ2lueDoyMCxtYXJnaW55OjIwLG5vZGVzZXA6MTAwLGVkZ2VzZXA6MTAwLHJhbmtzZXA6MTAwfSkuc2V0RGVmYXVsdEVkZ2VMYWJlbCgoZnVuY3Rpb24oKXtyZXR1cm57fX0pKTt2YXIgYSxvLGMsdSxsPShhPWksbz1VYS5nZXRFbnRpdGllcygpLGM9cixPYmplY3Qua2V5cyhvKS5mb3JFYWNoKChmdW5jdGlvbih0KXt2YXIgZT1hLmFwcGVuZCgiZyIpLmF0dHIoImlkIix0KTt1PXZvaWQgMD09PXU/dDp1O3ZhciBuPSJlbnRpdHktIit0LHI9ZS5hcHBlbmQoInRleHQiKS5hdHRyKCJjbGFzcyIsImVyIGVudGl0eUxhYmVsIikuYXR0cigiaWQiLG4pLmF0dHIoIngiLDApLmF0dHIoInkiLDApLmF0dHIoImRvbWluYW50LWJhc2VsaW5lIiwibWlkZGxlIikuYXR0cigidGV4dC1hbmNob3IiLCJtaWRkbGUiKS5hdHRyKCJzdHlsZSIsImZvbnQtZmFtaWx5OiAiK3h0KCkuZm9udEZhbWlseSsiOyBmb250LXNpemU6ICIrcWEuZm9udFNpemUrInB4IikudGV4dCh0KSxpPXIubm9kZSgpLmdldEJCb3goKSxvPU1hdGgubWF4KHFhLm1pbkVudGl0eVdpZHRoLGkud2lkdGgrMipxYS5lbnRpdHlQYWRkaW5nKSxzPU1hdGgubWF4KHFhLm1pbkVudGl0eUhlaWdodCxpLmhlaWdodCsyKnFhLmVudGl0eVBhZGRpbmcpO3IuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrby8yKyIsIitzLzIrIikiKTt2YXIgbD1lLmluc2VydCgicmVjdCIsIiMiK24pLmF0dHIoImNsYXNzIiwiZXIgZW50aXR5Qm94IikuYXR0cigiZmlsbCIscWEuZmlsbCkuYXR0cigiZmlsbC1vcGFjaXR5IiwiMTAwJSIpLmF0dHIoInN0cm9rZSIscWEuc3Ryb2tlKS5hdHRyKCJ4IiwwKS5hdHRyKCJ5IiwwKS5hdHRyKCJ3aWR0aCIsbykuYXR0cigiaGVpZ2h0IixzKS5ub2RlKCkuZ2V0QkJveCgpO2Muc2V0Tm9kZSh0LHt3aWR0aDpsLndpZHRoLGhlaWdodDpsLmhlaWdodCxzaGFwZToicmVjdCIsaWQ6dH0pfSkpLHUpLGg9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5mb3JFYWNoKChmdW5jdGlvbih0KXtlLnNldEVkZ2UodC5lbnRpdHlBLHQuZW50aXR5Qix7cmVsYXRpb25zaGlwOnR9LFhhKHQpKX0pKSx0fShVYS5nZXRSZWxhdGlvbnNoaXBzKCkscik7YmUuYS5sYXlvdXQociksZnVuY3Rpb24odCxlKXtlLm5vZGVzKCkuZm9yRWFjaCgoZnVuY3Rpb24obil7dm9pZCAwIT09biYmdm9pZCAwIT09ZS5ub2RlKG4pJiZ0LnNlbGVjdCgiIyIrbikuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrKGUubm9kZShuKS54LWUubm9kZShuKS53aWR0aC8yKSsiLCIrKGUubm9kZShuKS55LWUubm9kZShuKS5oZWlnaHQvMikrIiApIil9KSl9KGksciksaC5mb3JFYWNoKChmdW5jdGlvbih0KXshZnVuY3Rpb24odCxlLG4scil7WmErKzt2YXIgaT1uLmVkZ2UoZS5lbnRpdHlBLGUuZW50aXR5QixYYShlKSksYT1PYmplY3Qocy5saW5lKSgpLngoKGZ1bmN0aW9uKHQpe3JldHVybiB0Lnh9KSkueSgoZnVuY3Rpb24odCl7cmV0dXJuIHQueX0pKS5jdXJ2ZShzLmN1cnZlQmFzaXMpLG89dC5pbnNlcnQoInBhdGgiLCIjIityKS5hdHRyKCJjbGFzcyIsImVyIHJlbGF0aW9uc2hpcExpbmUiKS5hdHRyKCJkIixhKGkucG9pbnRzKSkuYXR0cigic3Ryb2tlIixxYS5zdHJva2UpLmF0dHIoImZpbGwiLCJub25lIik7ZS5yZWxTcGVjLnJlbFR5cGU9PT1VYS5JZGVudGlmaWNhdGlvbi5OT05fSURFTlRJRllJTkcmJm8uYXR0cigic3Ryb2tlLWRhc2hhcnJheSIsIjgsOCIpO3ZhciBjPSIiO3N3aXRjaChxYS5hcnJvd01hcmtlckFic29sdXRlJiYoYz0oYz0oYz13aW5kb3cubG9jYXRpb24ucHJvdG9jb2wrIi8vIit3aW5kb3cubG9jYXRpb24uaG9zdCt3aW5kb3cubG9jYXRpb24ucGF0aG5hbWUrd2luZG93LmxvY2F0aW9uLnNlYXJjaCkucmVwbGFjZSgvXCgvZywiXFwoIikpLnJlcGxhY2UoL1wpL2csIlxcKSIpKSxlLnJlbFNwZWMuY2FyZEEpe2Nhc2UgVWEuQ2FyZGluYWxpdHkuWkVST19PUl9PTkU6by5hdHRyKCJtYXJrZXItZW5kIiwidXJsKCIrYysiIyIrSGEuWkVST19PUl9PTkVfRU5EKyIpIik7YnJlYWs7Y2FzZSBVYS5DYXJkaW5hbGl0eS5aRVJPX09SX01PUkU6by5hdHRyKCJtYXJrZXItZW5kIiwidXJsKCIrYysiIyIrSGEuWkVST19PUl9NT1JFX0VORCsiKSIpO2JyZWFrO2Nhc2UgVWEuQ2FyZGluYWxpdHkuT05FX09SX01PUkU6by5hdHRyKCJtYXJrZXItZW5kIiwidXJsKCIrYysiIyIrSGEuT05FX09SX01PUkVfRU5EKyIpIik7YnJlYWs7Y2FzZSBVYS5DYXJkaW5hbGl0eS5PTkxZX09ORTpvLmF0dHIoIm1hcmtlci1lbmQiLCJ1cmwoIitjKyIjIitIYS5PTkxZX09ORV9FTkQrIikiKX1zd2l0Y2goZS5yZWxTcGVjLmNhcmRCKXtjYXNlIFVhLkNhcmRpbmFsaXR5LlpFUk9fT1JfT05FOm8uYXR0cigibWFya2VyLXN0YXJ0IiwidXJsKCIrYysiIyIrSGEuWkVST19PUl9PTkVfU1RBUlQrIikiKTticmVhaztjYXNlIFVhLkNhcmRpbmFsaXR5LlpFUk9fT1JfTU9SRTpvLmF0dHIoIm1hcmtlci1zdGFydCIsInVybCgiK2MrIiMiK0hhLlpFUk9fT1JfTU9SRV9TVEFSVCsiKSIpO2JyZWFrO2Nhc2UgVWEuQ2FyZGluYWxpdHkuT05FX09SX01PUkU6by5hdHRyKCJtYXJrZXItc3RhcnQiLCJ1cmwoIitjKyIjIitIYS5PTkVfT1JfTU9SRV9TVEFSVCsiKSIpO2JyZWFrO2Nhc2UgVWEuQ2FyZGluYWxpdHkuT05MWV9PTkU6by5hdHRyKCJtYXJrZXItc3RhcnQiLCJ1cmwoIitjKyIjIitIYS5PTkxZX09ORV9TVEFSVCsiKSIpfXZhciB1PW8ubm9kZSgpLmdldFRvdGFsTGVuZ3RoKCksbD1vLm5vZGUoKS5nZXRQb2ludEF0TGVuZ3RoKC41KnUpLGg9InJlbCIrWmEsZj10LmFwcGVuZCgidGV4dCIpLmF0dHIoImNsYXNzIiwiZXIgcmVsYXRpb25zaGlwTGFiZWwiKS5hdHRyKCJpZCIsaCkuYXR0cigieCIsbC54KS5hdHRyKCJ5IixsLnkpLmF0dHIoInRleHQtYW5jaG9yIiwibWlkZGxlIikuYXR0cigiZG9taW5hbnQtYmFzZWxpbmUiLCJtaWRkbGUiKS5hdHRyKCJzdHlsZSIsImZvbnQtZmFtaWx5OiAiK3h0KCkuZm9udEZhbWlseSsiOyBmb250LXNpemU6ICIrcWEuZm9udFNpemUrInB4IikudGV4dChlLnJvbGVBKS5ub2RlKCkuZ2V0QkJveCgpO3QuaW5zZXJ0KCJyZWN0IiwiIyIraCkuYXR0cigiY2xhc3MiLCJlciByZWxhdGlvbnNoaXBMYWJlbEJveCIpLmF0dHIoIngiLGwueC1mLndpZHRoLzIpLmF0dHIoInkiLGwueS1mLmhlaWdodC8yKS5hdHRyKCJ3aWR0aCIsZi53aWR0aCkuYXR0cigiaGVpZ2h0IixmLmhlaWdodCkuYXR0cigiZmlsbCIsIndoaXRlIikuYXR0cigiZmlsbC1vcGFjaXR5IiwiODUlIil9KGksdCxyLGwpfSkpO3ZhciBkPXFhLmRpYWdyYW1QYWRkaW5nLHA9aS5ub2RlKCkuZ2V0QkJveCgpLGc9cC53aWR0aCsyKmQseT1wLmhlaWdodCsyKmQ7JChpLHksZyxxYS51c2VNYXhXaWR0aCksaS5hdHRyKCJ2aWV3Qm94IiwiIi5jb25jYXQocC54LWQsIiAiKS5jb25jYXQocC55LWQsIiAiKS5jb25jYXQoZywiICIpLmNvbmNhdCh5KSl9LEthPW4oMjgpLHRvPW4ubihLYSk7ZnVuY3Rpb24gZW8odCl7cmV0dXJuIGZ1bmN0aW9uKHQpe2lmKEFycmF5LmlzQXJyYXkodCkpe2Zvcih2YXIgZT0wLG49bmV3IEFycmF5KHQubGVuZ3RoKTtlPHQubGVuZ3RoO2UrKyluW2VdPXRbZV07cmV0dXJuIG59fSh0KXx8ZnVuY3Rpb24odCl7aWYoU3ltYm9sLml0ZXJhdG9yIGluIE9iamVjdCh0KXx8IltvYmplY3QgQXJndW1lbnRzXSI9PT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodCkpcmV0dXJuIEFycmF5LmZyb20odCl9KHQpfHxmdW5jdGlvbigpe3Rocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgYXR0ZW1wdCB0byBzcHJlYWQgbm9uLWl0ZXJhYmxlIGluc3RhbmNlIil9KCl9dmFyIG5vPSIiLHJvPSIiLGlvPVtdLGFvPVtdLG9vPVtdLHNvPWZ1bmN0aW9uKCl7Zm9yKHZhciB0PSEwLGU9MDtlPG9vLmxlbmd0aDtlKyspb29bZV0ucHJvY2Vzc2VkLHQ9dCYmb29bZV0ucHJvY2Vzc2VkO3JldHVybiB0fSxjbz17cGFyc2VEaXJlY3RpdmU6ZnVuY3Rpb24odCxlLG4pe3pvLnBhcnNlRGlyZWN0aXZlKHRoaXMsdCxlLG4pfSxnZXRDb25maWc6ZnVuY3Rpb24oKXtyZXR1cm4geHQoKS5qb3VybmV5fSxjbGVhcjpmdW5jdGlvbigpe2lvLmxlbmd0aD0wLGFvLmxlbmd0aD0wLHJvPSIiLG5vPSIiLG9vLmxlbmd0aD0wfSxzZXRUaXRsZTpmdW5jdGlvbih0KXtubz10fSxnZXRUaXRsZTpmdW5jdGlvbigpe3JldHVybiBub30sYWRkU2VjdGlvbjpmdW5jdGlvbih0KXtybz10LGlvLnB1c2godCl9LGdldFNlY3Rpb25zOmZ1bmN0aW9uKCl7cmV0dXJuIGlvfSxnZXRUYXNrczpmdW5jdGlvbigpe2Zvcih2YXIgdD1zbygpLGU9MDshdCYmZTwxMDA7KXQ9c28oKSxlKys7cmV0dXJuIGFvLnB1c2guYXBwbHkoYW8sb28pLGFvfSxhZGRUYXNrOmZ1bmN0aW9uKHQsZSl7dmFyIG49ZS5zdWJzdHIoMSkuc3BsaXQoIjoiKSxyPTAsaT1bXTsxPT09bi5sZW5ndGg/KHI9TnVtYmVyKG5bMF0pLGk9W10pOihyPU51bWJlcihuWzBdKSxpPW5bMV0uc3BsaXQoIiwiKSk7dmFyIGE9aS5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiB0LnRyaW0oKX0pKSxvPXtzZWN0aW9uOnJvLHR5cGU6cm8scGVvcGxlOmEsdGFzazp0LHNjb3JlOnJ9O29vLnB1c2gobyl9LGFkZFRhc2tPcmc6ZnVuY3Rpb24odCl7dmFyIGU9e3NlY3Rpb246cm8sdHlwZTpybyxkZXNjcmlwdGlvbjp0LHRhc2s6dCxjbGFzc2VzOltdfTthby5wdXNoKGUpfSxnZXRBY3RvcnM6ZnVuY3Rpb24oKXtyZXR1cm4gdD1bXSxhby5mb3JFYWNoKChmdW5jdGlvbihlKXtlLnBlb3BsZSYmdC5wdXNoLmFwcGx5KHQsZW8oZS5wZW9wbGUpKX0pKSxlbyhuZXcgU2V0KHQpKS5zb3J0KCk7dmFyIHR9fSx1bz1mdW5jdGlvbih0LGUpe3ZhciBuPXQuYXBwZW5kKCJyZWN0Iik7cmV0dXJuIG4uYXR0cigieCIsZS54KSxuLmF0dHIoInkiLGUueSksbi5hdHRyKCJmaWxsIixlLmZpbGwpLG4uYXR0cigic3Ryb2tlIixlLnN0cm9rZSksbi5hdHRyKCJ3aWR0aCIsZS53aWR0aCksbi5hdHRyKCJoZWlnaHQiLGUuaGVpZ2h0KSxuLmF0dHIoInJ4IixlLnJ4KSxuLmF0dHIoInJ5IixlLnJ5KSx2b2lkIDAhPT1lLmNsYXNzJiZuLmF0dHIoImNsYXNzIixlLmNsYXNzKSxufSxsbz1mdW5jdGlvbih0LGUpe3ZhciBuPXQuYXBwZW5kKCJjaXJjbGUiKTtyZXR1cm4gbi5hdHRyKCJjeCIsZS5jeCksbi5hdHRyKCJjeSIsZS5jeSksbi5hdHRyKCJmaWxsIixlLmZpbGwpLG4uYXR0cigic3Ryb2tlIixlLnN0cm9rZSksbi5hdHRyKCJyIixlLnIpLHZvaWQgMCE9PW4uY2xhc3MmJm4uYXR0cigiY2xhc3MiLG4uY2xhc3MpLHZvaWQgMCE9PWUudGl0bGUmJm4uYXBwZW5kKCJ0aXRsZSIpLnRleHQoZS50aXRsZSksbn0saG89ZnVuY3Rpb24odCxlKXt2YXIgbj1lLnRleHQucmVwbGFjZSgvPGJyXHMqXC8/Pi9naSwiICIpLHI9dC5hcHBlbmQoInRleHQiKTtyLmF0dHIoIngiLGUueCksci5hdHRyKCJ5IixlLnkpLHIuYXR0cigiY2xhc3MiLCJsZWdlbmQiKSxyLnN0eWxlKCJ0ZXh0LWFuY2hvciIsZS5hbmNob3IpLHZvaWQgMCE9PWUuY2xhc3MmJnIuYXR0cigiY2xhc3MiLGUuY2xhc3MpO3ZhciBpPXIuYXBwZW5kKCJ0c3BhbiIpO3JldHVybiBpLmF0dHIoIngiLGUueCsyKmUudGV4dE1hcmdpbiksaS50ZXh0KG4pLHJ9LGZvPS0xLHBvPWZ1bmN0aW9uKCl7cmV0dXJue3g6MCx5OjAsd2lkdGg6MTAwLGFuY2hvcjoic3RhcnQiLGhlaWdodDoxMDAscng6MCxyeTowfX0sZ289ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSxuLGksYSxvLHMsYyl7cihlLmFwcGVuZCgidGV4dCIpLmF0dHIoIngiLG4rYS8yKS5hdHRyKCJ5IixpK28vMis1KS5zdHlsZSgiZm9udC1jb2xvciIsYykuc3R5bGUoInRleHQtYW5jaG9yIiwibWlkZGxlIikudGV4dCh0KSxzKX1mdW5jdGlvbiBlKHQsZSxuLGksYSxvLHMsYyx1KXtmb3IodmFyIGw9Yy50YXNrRm9udFNpemUsaD1jLnRhc2tGb250RmFtaWx5LGY9dC5zcGxpdCgvPGJyXHMqXC8/Pi9naSksZD0wO2Q8Zi5sZW5ndGg7ZCsrKXt2YXIgcD1kKmwtbCooZi5sZW5ndGgtMSkvMixnPWUuYXBwZW5kKCJ0ZXh0IikuYXR0cigieCIsbithLzIpLmF0dHIoInkiLGkpLmF0dHIoImZpbGwiLHUpLnN0eWxlKCJ0ZXh0LWFuY2hvciIsIm1pZGRsZSIpLnN0eWxlKCJmb250LXNpemUiLGwpLnN0eWxlKCJmb250LWZhbWlseSIsaCk7Zy5hcHBlbmQoInRzcGFuIikuYXR0cigieCIsbithLzIpLmF0dHIoImR5IixwKS50ZXh0KGZbZF0pLGcuYXR0cigieSIsaStvLzIpLmF0dHIoImRvbWluYW50LWJhc2VsaW5lIiwiY2VudHJhbCIpLmF0dHIoImFsaWdubWVudC1iYXNlbGluZSIsImNlbnRyYWwiKSxyKGcscyl9fWZ1bmN0aW9uIG4odCxuLGksYSxvLHMsYyx1KXt2YXIgbD1uLmFwcGVuZCgic3dpdGNoIiksaD1sLmFwcGVuZCgiZm9yZWlnbk9iamVjdCIpLmF0dHIoIngiLGkpLmF0dHIoInkiLGEpLmF0dHIoIndpZHRoIixvKS5hdHRyKCJoZWlnaHQiLHMpLmF0dHIoInBvc2l0aW9uIiwiZml4ZWQiKS5hcHBlbmQoImRpdiIpLnN0eWxlKCJkaXNwbGF5IiwidGFibGUiKS5zdHlsZSgiaGVpZ2h0IiwiMTAwJSIpLnN0eWxlKCJ3aWR0aCIsIjEwMCUiKTtoLmFwcGVuZCgiZGl2IikuYXR0cigiY2xhc3MiLCJsYWJlbCIpLnN0eWxlKCJkaXNwbGF5IiwidGFibGUtY2VsbCIpLnN0eWxlKCJ0ZXh0LWFsaWduIiwiY2VudGVyIikuc3R5bGUoInZlcnRpY2FsLWFsaWduIiwibWlkZGxlIikudGV4dCh0KSxlKHQsbCxpLGEsbyxzLGMsdSkscihoLGMpfWZ1bmN0aW9uIHIodCxlKXtmb3IodmFyIG4gaW4gZSluIGluIGUmJnQuYXR0cihuLGVbbl0pfXJldHVybiBmdW5jdGlvbihyKXtyZXR1cm4iZm8iPT09ci50ZXh0UGxhY2VtZW50P246Im9sZCI9PT1yLnRleHRQbGFjZW1lbnQ/dDplfX0oKSx5bz1sbyx2bz1mdW5jdGlvbih0LGUsbil7dmFyIHI9dC5hcHBlbmQoImciKSxpPXBvKCk7aS54PWUueCxpLnk9ZS55LGkuZmlsbD1lLmZpbGwsaS53aWR0aD1uLndpZHRoLGkuaGVpZ2h0PW4uaGVpZ2h0LGkuY2xhc3M9ImpvdXJuZXktc2VjdGlvbiBzZWN0aW9uLXR5cGUtIitlLm51bSxpLnJ4PTMsaS5yeT0zLHVvKHIsaSksZ28obikoZS50ZXh0LHIsaS54LGkueSxpLndpZHRoLGkuaGVpZ2h0LHtjbGFzczoiam91cm5leS1zZWN0aW9uIHNlY3Rpb24tdHlwZS0iK2UubnVtfSxuLGUuY29sb3VyKX0sbW89aG8sYm89ZnVuY3Rpb24odCxlLG4pe3ZhciByPWUueCtuLndpZHRoLzIsaT10LmFwcGVuZCgiZyIpO2ZvKys7dmFyIGEsbyxjO2kuYXBwZW5kKCJsaW5lIikuYXR0cigiaWQiLCJ0YXNrIitmbykuYXR0cigieDEiLHIpLmF0dHIoInkxIixlLnkpLmF0dHIoIngyIixyKS5hdHRyKCJ5MiIsNDUwKS5hdHRyKCJjbGFzcyIsInRhc2stbGluZSIpLmF0dHIoInN0cm9rZS13aWR0aCIsIjFweCIpLmF0dHIoInN0cm9rZS1kYXNoYXJyYXkiLCI0IDIiKS5hdHRyKCJzdHJva2UiLCIjNjY2IiksYT1pLG89e2N4OnIsY3k6MzAwKzMwKig1LWUuc2NvcmUpLHNjb3JlOmUuc2NvcmV9LGEuYXBwZW5kKCJjaXJjbGUiKS5hdHRyKCJjeCIsby5jeCkuYXR0cigiY3kiLG8uY3kpLmF0dHIoImNsYXNzIiwiZmFjZSIpLmF0dHIoInIiLDE1KS5hdHRyKCJzdHJva2Utd2lkdGgiLDIpLmF0dHIoIm92ZXJmbG93IiwidmlzaWJsZSIpLChjPWEuYXBwZW5kKCJnIikpLmFwcGVuZCgiY2lyY2xlIikuYXR0cigiY3giLG8uY3gtNSkuYXR0cigiY3kiLG8uY3ktNSkuYXR0cigiciIsMS41KS5hdHRyKCJzdHJva2Utd2lkdGgiLDIpLmF0dHIoImZpbGwiLCIjNjY2IikuYXR0cigic3Ryb2tlIiwiIzY2NiIpLGMuYXBwZW5kKCJjaXJjbGUiKS5hdHRyKCJjeCIsby5jeCs1KS5hdHRyKCJjeSIsby5jeS01KS5hdHRyKCJyIiwxLjUpLmF0dHIoInN0cm9rZS13aWR0aCIsMikuYXR0cigiZmlsbCIsIiM2NjYiKS5hdHRyKCJzdHJva2UiLCIjNjY2Iiksby5zY29yZT4zP2Z1bmN0aW9uKHQpe3ZhciBlPU9iamVjdChzLmFyYykoKS5zdGFydEFuZ2xlKE1hdGguUEkvMikuZW5kQW5nbGUoTWF0aC5QSS8yKjMpLmlubmVyUmFkaXVzKDcuNSkub3V0ZXJSYWRpdXMoMTUvMi4yKTt0LmFwcGVuZCgicGF0aCIpLmF0dHIoImNsYXNzIiwibW91dGgiKS5hdHRyKCJkIixlKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIitvLmN4KyIsIisoby5jeSsyKSsiKSIpfShjKTpvLnNjb3JlPDM/ZnVuY3Rpb24odCl7dmFyIGU9T2JqZWN0KHMuYXJjKSgpLnN0YXJ0QW5nbGUoMypNYXRoLlBJLzIpLmVuZEFuZ2xlKE1hdGguUEkvMio1KS5pbm5lclJhZGl1cyg3LjUpLm91dGVyUmFkaXVzKDE1LzIuMik7dC5hcHBlbmQoInBhdGgiKS5hdHRyKCJjbGFzcyIsIm1vdXRoIikuYXR0cigiZCIsZSkuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrby5jeCsiLCIrKG8uY3krNykrIikiKX0oYyk6ZnVuY3Rpb24odCl7dC5hcHBlbmQoImxpbmUiKS5hdHRyKCJjbGFzcyIsIm1vdXRoIikuYXR0cigic3Ryb2tlIiwyKS5hdHRyKCJ4MSIsby5jeC01KS5hdHRyKCJ5MSIsby5jeSs3KS5hdHRyKCJ4MiIsby5jeCs1KS5hdHRyKCJ5MiIsby5jeSs3KS5hdHRyKCJjbGFzcyIsIm1vdXRoIikuYXR0cigic3Ryb2tlLXdpZHRoIiwiMXB4IikuYXR0cigic3Ryb2tlIiwiIzY2NiIpfShjKTt2YXIgdT1wbygpO3UueD1lLngsdS55PWUueSx1LmZpbGw9ZS5maWxsLHUud2lkdGg9bi53aWR0aCx1LmhlaWdodD1uLmhlaWdodCx1LmNsYXNzPSJ0YXNrIHRhc2stdHlwZS0iK2UubnVtLHUucng9Myx1LnJ5PTMsdW8oaSx1KTt2YXIgbD1lLngrMTQ7ZS5wZW9wbGUuZm9yRWFjaCgoZnVuY3Rpb24odCl7dmFyIG49ZS5hY3RvcnNbdF0scj17Y3g6bCxjeTplLnkscjo3LGZpbGw6bixzdHJva2U6IiMwMDAiLHRpdGxlOnR9O2xvKGksciksbCs9MTB9KSksZ28obikoZS50YXNrLGksdS54LHUueSx1LndpZHRoLHUuaGVpZ2h0LHtjbGFzczoidGFzayJ9LG4sZS5jb2xvdXIpfSx4bz1mdW5jdGlvbih0KXt0LmFwcGVuZCgiZGVmcyIpLmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLCJhcnJvd2hlYWQiKS5hdHRyKCJyZWZYIiw1KS5hdHRyKCJyZWZZIiwyKS5hdHRyKCJtYXJrZXJXaWR0aCIsNikuYXR0cigibWFya2VySGVpZ2h0Iiw0KS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsIk0gMCwwIFYgNCBMNiwyIFoiKX07S2EucGFyc2VyLnl5PWNvO3ZhciBfbz17bGVmdE1hcmdpbjoxNTAsZGlhZ3JhbU1hcmdpblg6NTAsZGlhZ3JhbU1hcmdpblk6MjAsdGFza01hcmdpbjo1MCx3aWR0aDoxNTAsaGVpZ2h0OjUwLHRhc2tGb250U2l6ZToxNCx0YXNrRm9udEZhbWlseTonIk9wZW4tU2FucyIsICJzYW5zLXNlcmlmIicsYm94TWFyZ2luOjEwLGJveFRleHRNYXJnaW46NSxub3RlTWFyZ2luOjEwLG1lc3NhZ2VNYXJnaW46MzUsbWVzc2FnZUFsaWduOiJjZW50ZXIiLGJvdHRvbU1hcmdpbkFkajoxLGFjdGl2YXRpb25XaWR0aDoxMCx0ZXh0UGxhY2VtZW50OiJmbyIsYWN0b3JDb2xvdXJzOlsiIzhGQkM4RiIsIiM3Q0ZDMDAiLCIjMDBGRkZGIiwiIzIwQjJBQSIsIiNCMEUwRTYiLCIjRkZGRkUwIl0sc2VjdGlvbkZpbGxzOlsiIzE5MTk3MCIsIiM4QjAwOEIiLCIjNEIwMDgyIiwiIzJGNEY0RiIsIiM4MDAwMDAiLCIjOEI0NTEzIiwiIzAwMDA4QiJdLHNlY3Rpb25Db2xvdXJzOlsiI2ZmZiJdfSxrbz17fTt2YXIgd289X28ubGVmdE1hcmdpbixFbz17ZGF0YTp7c3RhcnR4OnZvaWQgMCxzdG9weDp2b2lkIDAsc3RhcnR5OnZvaWQgMCxzdG9weTp2b2lkIDB9LHZlcnRpY2FsUG9zOjAsc2VxdWVuY2VJdGVtczpbXSxpbml0OmZ1bmN0aW9uKCl7dGhpcy5zZXF1ZW5jZUl0ZW1zPVtdLHRoaXMuZGF0YT17c3RhcnR4OnZvaWQgMCxzdG9weDp2b2lkIDAsc3RhcnR5OnZvaWQgMCxzdG9weTp2b2lkIDB9LHRoaXMudmVydGljYWxQb3M9MH0sdXBkYXRlVmFsOmZ1bmN0aW9uKHQsZSxuLHIpe3ZvaWQgMD09PXRbZV0/dFtlXT1uOnRbZV09cihuLHRbZV0pfSx1cGRhdGVCb3VuZHM6ZnVuY3Rpb24odCxlLG4scil7dmFyIGksYT10aGlzLG89MDt0aGlzLnNlcXVlbmNlSXRlbXMuZm9yRWFjaCgoZnVuY3Rpb24ocyl7bysrO3ZhciBjPWEuc2VxdWVuY2VJdGVtcy5sZW5ndGgtbysxO2EudXBkYXRlVmFsKHMsInN0YXJ0eSIsZS1jKl9vLmJveE1hcmdpbixNYXRoLm1pbiksYS51cGRhdGVWYWwocywic3RvcHkiLHIrYypfby5ib3hNYXJnaW4sTWF0aC5tYXgpLGEudXBkYXRlVmFsKEVvLmRhdGEsInN0YXJ0eCIsdC1jKl9vLmJveE1hcmdpbixNYXRoLm1pbiksYS51cGRhdGVWYWwoRW8uZGF0YSwic3RvcHgiLG4rYypfby5ib3hNYXJnaW4sTWF0aC5tYXgpLCJhY3RpdmF0aW9uIiE9PWkmJihhLnVwZGF0ZVZhbChzLCJzdGFydHgiLHQtYypfby5ib3hNYXJnaW4sTWF0aC5taW4pLGEudXBkYXRlVmFsKHMsInN0b3B4IixuK2MqX28uYm94TWFyZ2luLE1hdGgubWF4KSxhLnVwZGF0ZVZhbChFby5kYXRhLCJzdGFydHkiLGUtYypfby5ib3hNYXJnaW4sTWF0aC5taW4pLGEudXBkYXRlVmFsKEVvLmRhdGEsInN0b3B5IixyK2MqX28uYm94TWFyZ2luLE1hdGgubWF4KSl9KSl9LGluc2VydDpmdW5jdGlvbih0LGUsbixyKXt2YXIgaT1NYXRoLm1pbih0LG4pLGE9TWF0aC5tYXgodCxuKSxvPU1hdGgubWluKGUscikscz1NYXRoLm1heChlLHIpO3RoaXMudXBkYXRlVmFsKEVvLmRhdGEsInN0YXJ0eCIsaSxNYXRoLm1pbiksdGhpcy51cGRhdGVWYWwoRW8uZGF0YSwic3RhcnR5IixvLE1hdGgubWluKSx0aGlzLnVwZGF0ZVZhbChFby5kYXRhLCJzdG9weCIsYSxNYXRoLm1heCksdGhpcy51cGRhdGVWYWwoRW8uZGF0YSwic3RvcHkiLHMsTWF0aC5tYXgpLHRoaXMudXBkYXRlQm91bmRzKGksbyxhLHMpfSxidW1wVmVydGljYWxQb3M6ZnVuY3Rpb24odCl7dGhpcy52ZXJ0aWNhbFBvcz10aGlzLnZlcnRpY2FsUG9zK3QsdGhpcy5kYXRhLnN0b3B5PXRoaXMudmVydGljYWxQb3N9LGdldFZlcnRpY2FsUG9zOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudmVydGljYWxQb3N9LGdldEJvdW5kczpmdW5jdGlvbigpe3JldHVybiB0aGlzLmRhdGF9fSxUbz1fby5zZWN0aW9uRmlsbHMsQ289X28uc2VjdGlvbkNvbG91cnMsU289ZnVuY3Rpb24odCxlLG4pe2Zvcih2YXIgcj0iIixpPW4rKDIqX28uaGVpZ2h0K19vLmRpYWdyYW1NYXJnaW5ZKSxhPTAsbz0iI0NDQyIscz0iYmxhY2siLGM9MCx1PTA7dTxlLmxlbmd0aDt1Kyspe3ZhciBsPWVbdV07aWYociE9PWwuc2VjdGlvbil7bz1Ub1thJVRvLmxlbmd0aF0sYz1hJVRvLmxlbmd0aCxzPUNvW2ElQ28ubGVuZ3RoXTt2YXIgaD17eDp1Kl9vLnRhc2tNYXJnaW4rdSpfby53aWR0aCt3byx5OjUwLHRleHQ6bC5zZWN0aW9uLGZpbGw6byxudW06Yyxjb2xvdXI6c307dm8odCxoLF9vKSxyPWwuc2VjdGlvbixhKyt9dmFyIGY9bC5wZW9wbGUucmVkdWNlKChmdW5jdGlvbih0LGUpe3JldHVybiBrb1tlXSYmKHRbZV09a29bZV0pLHR9KSx7fSk7bC54PXUqX28udGFza01hcmdpbit1Kl9vLndpZHRoK3dvLGwueT1pLGwud2lkdGg9X28uZGlhZ3JhbU1hcmdpblgsbC5oZWlnaHQ9X28uZGlhZ3JhbU1hcmdpblksbC5jb2xvdXI9cyxsLmZpbGw9byxsLm51bT1jLGwuYWN0b3JzPWYsYm8odCxsLF9vKSxFby5pbnNlcnQobC54LGwueSxsLngrbC53aWR0aCtfby50YXNrTWFyZ2luLDQ1MCl9fSxBbz1mdW5jdGlvbih0KXtPYmplY3Qua2V5cyh0KS5mb3JFYWNoKChmdW5jdGlvbihlKXtfb1tlXT10W2VdfSkpfSxNbz1mdW5jdGlvbih0LGUpe0thLnBhcnNlci55eS5jbGVhcigpLEthLnBhcnNlci5wYXJzZSh0KyJcbiIpLEVvLmluaXQoKTt2YXIgbj1PYmplY3Qocy5zZWxlY3QpKCIjIitlKTtuLmF0dHIoInhtbG5zOnhsaW5rIiwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIpLHhvKG4pO3ZhciByPUthLnBhcnNlci55eS5nZXRUYXNrcygpLGk9S2EucGFyc2VyLnl5LmdldFRpdGxlKCksYT1LYS5wYXJzZXIueXkuZ2V0QWN0b3JzKCk7Zm9yKHZhciBvIGluIGtvKWRlbGV0ZSBrb1tvXTt2YXIgYz0wO2EuZm9yRWFjaCgoZnVuY3Rpb24odCl7a29bdF09X28uYWN0b3JDb2xvdXJzW2MlX28uYWN0b3JDb2xvdXJzLmxlbmd0aF0sYysrfSkpLGZ1bmN0aW9uKHQpe3ZhciBlPTYwO09iamVjdC5rZXlzKGtvKS5mb3JFYWNoKChmdW5jdGlvbihuKXt2YXIgcj1rb1tuXTt5byh0LHtjeDoyMCxjeTplLHI6NyxmaWxsOnIsc3Ryb2tlOiIjMDAwIn0pO3ZhciBpPXt4OjQwLHk6ZSs3LGZpbGw6IiM2NjYiLHRleHQ6bix0ZXh0TWFyZ2luOjV8X28uYm94VGV4dE1hcmdpbn07bW8odCxpKSxlKz0yMH0pKX0obiksRW8uaW5zZXJ0KDAsMCx3byw1MCpPYmplY3Qua2V5cyhrbykubGVuZ3RoKSxTbyhuLHIsMCk7dmFyIHU9RW8uZ2V0Qm91bmRzKCk7aSYmbi5hcHBlbmQoInRleHQiKS50ZXh0KGkpLmF0dHIoIngiLHdvKS5hdHRyKCJmb250LXNpemUiLCI0ZXgiKS5hdHRyKCJmb250LXdlaWdodCIsImJvbGQiKS5hdHRyKCJ5IiwyNSk7dmFyIGw9dS5zdG9weS11LnN0YXJ0eSsyKl9vLmRpYWdyYW1NYXJnaW5ZLGg9d28rdS5zdG9weCsyKl9vLmRpYWdyYW1NYXJnaW5YOyQobixsLGgsX28udXNlTWF4V2lkdGgpLG4uYXBwZW5kKCJsaW5lIikuYXR0cigieDEiLHdvKS5hdHRyKCJ5MSIsNCpfby5oZWlnaHQpLmF0dHIoIngyIixoLXdvLTQpLmF0dHIoInkyIiw0Kl9vLmhlaWdodCkuYXR0cigic3Ryb2tlLXdpZHRoIiw0KS5hdHRyKCJzdHJva2UiLCJibGFjayIpLmF0dHIoIm1hcmtlci1lbmQiLCJ1cmwoI2Fycm93aGVhZCkiKTt2YXIgZj1pPzcwOjA7bi5hdHRyKCJ2aWV3Qm94IiwiIi5jb25jYXQodS5zdGFydHgsIiAtMjUgIikuY29uY2F0KGgsIiAiKS5jb25jYXQobCtmKSksbi5hdHRyKCJwcmVzZXJ2ZUFzcGVjdFJhdGlvIiwieE1pbllNaW4gbWVldCIpfSxPbz1mdW5jdGlvbih0KXtyZXR1cm4iZy5jbGFzc0dyb3VwIHRleHQge1xuICBmaWxsOiAiLmNvbmNhdCh0Lm5vZGVCb3JkZXIsIjtcbiAgZmlsbDogIikuY29uY2F0KHQuY2xhc3NUZXh0LCI7XG4gIHN0cm9rZTogbm9uZTtcbiAgZm9udC1mYW1pbHk6ICIpLmNvbmNhdCh0LmZvbnRGYW1pbHksIjtcbiAgZm9udC1zaXplOiAxMHB4O1xuXG4gIC50aXRsZSB7XG4gICAgZm9udC13ZWlnaHQ6IGJvbGRlcjtcbiAgfVxuXG59XG5cbi5jbGFzc1RpdGxlIHtcbiAgZm9udC13ZWlnaHQ6IGJvbGRlcjtcbn1cbi5ub2RlIHJlY3QsXG4gIC5ub2RlIGNpcmNsZSxcbiAgLm5vZGUgZWxsaXBzZSxcbiAgLm5vZGUgcG9seWdvbixcbiAgLm5vZGUgcGF0aCB7XG4gICAgZmlsbDogIikuY29uY2F0KHQubWFpbkJrZywiO1xuICAgIHN0cm9rZTogIikuY29uY2F0KHQubm9kZUJvcmRlciwiO1xuICAgIHN0cm9rZS13aWR0aDogMXB4O1xuICB9XG5cblxuLmRpdmlkZXIge1xuICBzdHJva2U6ICIpLmNvbmNhdCh0Lm5vZGVCb3JkZXIsIjtcbiAgc3Ryb2tlOiAxO1xufVxuXG5nLmNsaWNrYWJsZSB7XG4gIGN1cnNvcjogcG9pbnRlcjtcbn1cblxuZy5jbGFzc0dyb3VwIHJlY3Qge1xuICBmaWxsOiAiKS5jb25jYXQodC5tYWluQmtnLCI7XG4gIHN0cm9rZTogIikuY29uY2F0KHQubm9kZUJvcmRlciwiO1xufVxuXG5nLmNsYXNzR3JvdXAgbGluZSB7XG4gIHN0cm9rZTogIikuY29uY2F0KHQubm9kZUJvcmRlciwiO1xuICBzdHJva2Utd2lkdGg6IDE7XG59XG5cbi5jbGFzc0xhYmVsIC5ib3gge1xuICBzdHJva2U6IG5vbmU7XG4gIHN0cm9rZS13aWR0aDogMDtcbiAgZmlsbDogIikuY29uY2F0KHQubWFpbkJrZywiO1xuICBvcGFjaXR5OiAwLjU7XG59XG5cbi5jbGFzc0xhYmVsIC5sYWJlbCB7XG4gIGZpbGw6ICIpLmNvbmNhdCh0Lm5vZGVCb3JkZXIsIjtcbiAgZm9udC1zaXplOiAxMHB4O1xufVxuXG4ucmVsYXRpb24ge1xuICBzdHJva2U6ICIpLmNvbmNhdCh0LmxpbmVDb2xvciwiO1xuICBzdHJva2Utd2lkdGg6IDE7XG4gIGZpbGw6IG5vbmU7XG59XG5cbi5kYXNoZWQtbGluZXtcbiAgc3Ryb2tlLWRhc2hhcnJheTogMztcbn1cblxuI2NvbXBvc2l0aW9uU3RhcnQsIC5jb21wb3NpdGlvbiB7XG4gIGZpbGw6ICIpLmNvbmNhdCh0LmxpbmVDb2xvciwiICFpbXBvcnRhbnQ7XG4gIHN0cm9rZTogIikuY29uY2F0KHQubGluZUNvbG9yLCIgIWltcG9ydGFudDtcbiAgc3Ryb2tlLXdpZHRoOiAxO1xufVxuXG4jY29tcG9zaXRpb25FbmQsIC5jb21wb3NpdGlvbiB7XG4gIGZpbGw6ICIpLmNvbmNhdCh0LmxpbmVDb2xvciwiICFpbXBvcnRhbnQ7XG4gIHN0cm9rZTogIikuY29uY2F0KHQubGluZUNvbG9yLCIgIWltcG9ydGFudDtcbiAgc3Ryb2tlLXdpZHRoOiAxO1xufVxuXG4jZGVwZW5kZW5jeVN0YXJ0LCAuZGVwZW5kZW5jeSB7XG4gIGZpbGw6ICIpLmNvbmNhdCh0LmxpbmVDb2xvciwiICFpbXBvcnRhbnQ7XG4gIHN0cm9rZTogIikuY29uY2F0KHQubGluZUNvbG9yLCIgIWltcG9ydGFudDtcbiAgc3Ryb2tlLXdpZHRoOiAxO1xufVxuXG4jZGVwZW5kZW5jeVN0YXJ0LCAuZGVwZW5kZW5jeSB7XG4gIGZpbGw6ICIpLmNvbmNhdCh0LmxpbmVDb2xvciwiICFpbXBvcnRhbnQ7XG4gIHN0cm9rZTogIikuY29uY2F0KHQubGluZUNvbG9yLCIgIWltcG9ydGFudDtcbiAgc3Ryb2tlLXdpZHRoOiAxO1xufVxuXG4jZXh0ZW5zaW9uU3RhcnQsIC5leHRlbnNpb24ge1xuICBmaWxsOiAiKS5jb25jYXQodC5saW5lQ29sb3IsIiAhaW1wb3J0YW50O1xuICBzdHJva2U6ICIpLmNvbmNhdCh0LmxpbmVDb2xvciwiICFpbXBvcnRhbnQ7XG4gIHN0cm9rZS13aWR0aDogMTtcbn1cblxuI2V4dGVuc2lvbkVuZCwgLmV4dGVuc2lvbiB7XG4gIGZpbGw6ICIpLmNvbmNhdCh0LmxpbmVDb2xvciwiICFpbXBvcnRhbnQ7XG4gIHN0cm9rZTogIikuY29uY2F0KHQubGluZUNvbG9yLCIgIWltcG9ydGFudDtcbiAgc3Ryb2tlLXdpZHRoOiAxO1xufVxuXG4jYWdncmVnYXRpb25TdGFydCwgLmFnZ3JlZ2F0aW9uIHtcbiAgZmlsbDogIikuY29uY2F0KHQubWFpbkJrZywiICFpbXBvcnRhbnQ7XG4gIHN0cm9rZTogIikuY29uY2F0KHQubGluZUNvbG9yLCIgIWltcG9ydGFudDtcbiAgc3Ryb2tlLXdpZHRoOiAxO1xufVxuXG4jYWdncmVnYXRpb25FbmQsIC5hZ2dyZWdhdGlvbiB7XG4gIGZpbGw6ICIpLmNvbmNhdCh0Lm1haW5Ca2csIiAhaW1wb3J0YW50O1xuICBzdHJva2U6ICIpLmNvbmNhdCh0LmxpbmVDb2xvciwiICFpbXBvcnRhbnQ7XG4gIHN0cm9rZS13aWR0aDogMTtcbn1cblxuLmVkZ2VUZXJtaW5hbHMge1xuICBmb250LXNpemU6IDExcHg7XG59XG5cbiIpfSxEbz1mdW5jdGlvbih0KXtyZXR1cm4iLmxhYmVsIHtcbiAgICBmb250LWZhbWlseTogIi5jb25jYXQodC5mb250RmFtaWx5LCI7XG4gICAgY29sb3I6ICIpLmNvbmNhdCh0Lm5vZGVUZXh0Q29sb3J8fHQudGV4dENvbG9yLCI7XG4gIH1cblxuICAubGFiZWwgdGV4dCB7XG4gICAgZmlsbDogIikuY29uY2F0KHQubm9kZVRleHRDb2xvcnx8dC50ZXh0Q29sb3IsIjtcbiAgfVxuXG4gIC5ub2RlIHJlY3QsXG4gIC5ub2RlIGNpcmNsZSxcbiAgLm5vZGUgZWxsaXBzZSxcbiAgLm5vZGUgcG9seWdvbixcbiAgLm5vZGUgcGF0aCB7XG4gICAgZmlsbDogIikuY29uY2F0KHQubWFpbkJrZywiO1xuICAgIHN0cm9rZTogIikuY29uY2F0KHQubm9kZUJvcmRlciwiO1xuICAgIHN0cm9rZS13aWR0aDogMXB4O1xuICB9XG5cbiAgLm5vZGUgLmxhYmVsIHtcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIH1cbiAgLm5vZGUuY2xpY2thYmxlIHtcbiAgICBjdXJzb3I6IHBvaW50ZXI7XG4gIH1cblxuICAuYXJyb3doZWFkUGF0aCB7XG4gICAgZmlsbDogIikuY29uY2F0KHQuYXJyb3doZWFkQ29sb3IsIjtcbiAgfVxuXG4gIC5lZGdlUGF0aCAucGF0aCB7XG4gICAgc3Ryb2tlOiAiKS5jb25jYXQodC5saW5lQ29sb3IsIjtcbiAgICBzdHJva2Utd2lkdGg6IDEuNXB4O1xuICB9XG5cbiAgLmZsb3djaGFydC1saW5rIHtcbiAgICBzdHJva2U6ICIpLmNvbmNhdCh0LmxpbmVDb2xvciwiO1xuICAgIGZpbGw6IG5vbmU7XG4gIH1cblxuICAuZWRnZUxhYmVsIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAiKS5jb25jYXQodC5lZGdlTGFiZWxCYWNrZ3JvdW5kLCI7XG4gICAgcmVjdCB7XG4gICAgICBvcGFjaXR5OiAwLjU7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAiKS5jb25jYXQodC5lZGdlTGFiZWxCYWNrZ3JvdW5kLCI7XG4gICAgICBmaWxsOiAiKS5jb25jYXQodC5lZGdlTGFiZWxCYWNrZ3JvdW5kLCI7XG4gICAgfVxuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgfVxuXG4gIC5jbHVzdGVyIHJlY3Qge1xuICAgIGZpbGw6ICIpLmNvbmNhdCh0LmNsdXN0ZXJCa2csIjtcbiAgICBzdHJva2U6ICIpLmNvbmNhdCh0LmNsdXN0ZXJCb3JkZXIsIjtcbiAgICBzdHJva2Utd2lkdGg6IDFweDtcbiAgfVxuXG4gIC5jbHVzdGVyIHRleHQge1xuICAgIGZpbGw6ICIpLmNvbmNhdCh0LnRpdGxlQ29sb3IsIjtcbiAgfVxuXG4gIGRpdi5tZXJtYWlkVG9vbHRpcCB7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICBtYXgtd2lkdGg6IDIwMHB4O1xuICAgIHBhZGRpbmc6IDJweDtcbiAgICBmb250LWZhbWlseTogIikuY29uY2F0KHQuZm9udEZhbWlseSwiO1xuICAgIGZvbnQtc2l6ZTogMTJweDtcbiAgICBiYWNrZ3JvdW5kOiAiKS5jb25jYXQodC50ZXJ0aWFyeUNvbG9yLCI7XG4gICAgYm9yZGVyOiAxcHggc29saWQgIikuY29uY2F0KHQuYm9yZGVyMiwiO1xuICAgIGJvcmRlci1yYWRpdXM6IDJweDtcbiAgICBwb2ludGVyLWV2ZW50czogbm9uZTtcbiAgICB6LWluZGV4OiAxMDA7XG4gIH1cbiIpfSxObz1mdW5jdGlvbih0KXtyZXR1cm4iZy5zdGF0ZUdyb3VwIHRleHQge1xuICBmaWxsOiAiLmNvbmNhdCh0Lm5vZGVCb3JkZXIsIjtcbiAgc3Ryb2tlOiBub25lO1xuICBmb250LXNpemU6IDEwcHg7XG59XG5nLnN0YXRlR3JvdXAgdGV4dCB7XG4gIGZpbGw6ICIpLmNvbmNhdCh0LnRleHRDb2xvciwiO1xuICBzdHJva2U6IG5vbmU7XG4gIGZvbnQtc2l6ZTogMTBweDtcblxufVxuZy5zdGF0ZUdyb3VwIC5zdGF0ZS10aXRsZSB7XG4gIGZvbnQtd2VpZ2h0OiBib2xkZXI7XG4gIGZpbGw6ICIpLmNvbmNhdCh0LmxhYmVsQ29sb3IsIjtcbn1cblxuZy5zdGF0ZUdyb3VwIHJlY3Qge1xuICBmaWxsOiAiKS5jb25jYXQodC5tYWluQmtnLCI7XG4gIHN0cm9rZTogIikuY29uY2F0KHQubm9kZUJvcmRlciwiO1xufVxuXG5nLnN0YXRlR3JvdXAgbGluZSB7XG4gIHN0cm9rZTogIikuY29uY2F0KHQubGluZUNvbG9yLCI7XG4gIHN0cm9rZS13aWR0aDogMTtcbn1cblxuLnRyYW5zaXRpb24ge1xuICBzdHJva2U6ICIpLmNvbmNhdCh0LmxpbmVDb2xvciwiO1xuICBzdHJva2Utd2lkdGg6IDE7XG4gIGZpbGw6IG5vbmU7XG59XG5cbi5zdGF0ZUdyb3VwIC5jb21wb3NpdCB7XG4gIGZpbGw6ICIpLmNvbmNhdCh0LmJhY2tncm91bmQsIjtcbiAgYm9yZGVyLWJvdHRvbTogMXB4XG59XG5cbi5zdGF0ZUdyb3VwIC5hbHQtY29tcG9zaXQge1xuICBmaWxsOiAjZTBlMGUwO1xuICBib3JkZXItYm90dG9tOiAxcHhcbn1cblxuLnN0YXRlLW5vdGUge1xuICBzdHJva2U6ICIpLmNvbmNhdCh0Lm5vdGVCb3JkZXJDb2xvciwiO1xuICBmaWxsOiAiKS5jb25jYXQodC5ub3RlQmtnQ29sb3IsIjtcblxuICB0ZXh0IHtcbiAgICBmaWxsOiBibGFjaztcbiAgICBzdHJva2U6IG5vbmU7XG4gICAgZm9udC1zaXplOiAxMHB4O1xuICB9XG59XG5cbi5zdGF0ZUxhYmVsIC5ib3gge1xuICBzdHJva2U6IG5vbmU7XG4gIHN0cm9rZS13aWR0aDogMDtcbiAgZmlsbDogIikuY29uY2F0KHQubWFpbkJrZywiO1xuICBvcGFjaXR5OiAwLjU7XG59XG5cbi5lZGdlTGFiZWwgLmxhYmVsIHJlY3Qge1xuICBmaWxsOiAiKS5jb25jYXQodC50ZXJ0aWFyeUNvbG9yLCI7XG4gIG9wYWNpdHk6IDAuNTtcbn1cbi5lZGdlTGFiZWwgLmxhYmVsIHRleHQge1xuICBmaWxsOiAiKS5jb25jYXQodC50ZXJ0aWFyeVRleHRDb2xvciwiO1xufVxuLmxhYmVsIGRpdiAuZWRnZUxhYmVsIHtcbiAgY29sb3I6ICIpLmNvbmNhdCh0LnRlcnRpYXJ5VGV4dENvbG9yLCI7XG59XG5cbi5zdGF0ZUxhYmVsIHRleHQge1xuICBmaWxsOiAiKS5jb25jYXQodC5sYWJlbENvbG9yLCI7XG4gIGZvbnQtc2l6ZTogMTBweDtcbiAgZm9udC13ZWlnaHQ6IGJvbGQ7XG59XG5cbi5ub2RlIGNpcmNsZS5zdGF0ZS1zdGFydCB7XG4gIGZpbGw6ICIpLmNvbmNhdCh0LmxpbmVDb2xvciwiO1xuICBzdHJva2U6IGJsYWNrO1xufVxuLm5vZGUgY2lyY2xlLnN0YXRlLWVuZCB7XG4gIGZpbGw6ICIpLmNvbmNhdCh0LnByaW1hcnlCb3JkZXJDb2xvciwiO1xuICBzdHJva2U6ICIpLmNvbmNhdCh0LmJhY2tncm91bmQsIjtcbiAgc3Ryb2tlLXdpZHRoOiAxLjVcbn1cbi5lbmQtc3RhdGUtaW5uZXIge1xuICBmaWxsOiAiKS5jb25jYXQodC5iYWNrZ3JvdW5kLCI7XG4gIC8vIHN0cm9rZTogIikuY29uY2F0KHQuYmFja2dyb3VuZCwiO1xuICBzdHJva2Utd2lkdGg6IDEuNVxufVxuXG4ubm9kZSByZWN0IHtcbiAgZmlsbDogIikuY29uY2F0KHQubWFpbkJrZywiO1xuICBzdHJva2U6ICIpLmNvbmNhdCh0Lm5vZGVCb3JkZXIsIjtcbiAgc3Ryb2tlLXdpZHRoOiAxcHg7XG59XG4jc3RhdGVkaWFncmFtLWJhcmJFbmQge1xuICBmaWxsOiAiKS5jb25jYXQodC5saW5lQ29sb3IsIjtcbn1cblxuLnN0YXRlZGlhZ3JhbS1jbHVzdGVyIHJlY3Qge1xuICBmaWxsOiAiKS5jb25jYXQodC5tYWluQmtnLCI7XG4gIHN0cm9rZTogIikuY29uY2F0KHQubm9kZUJvcmRlciwiO1xuICBzdHJva2Utd2lkdGg6IDFweDtcbn1cblxuLmNsdXN0ZXItbGFiZWwsIC5ub2RlTGFiZWwge1xuICBjb2xvcjogIikuY29uY2F0KHQudGV4dENvbG9yLCI7XG59XG5cbi5zdGF0ZWRpYWdyYW0tY2x1c3RlciByZWN0Lm91dGVyIHtcbiAgcng6IDVweDtcbiAgcnk6IDVweDtcbn1cbi5zdGF0ZWRpYWdyYW0tc3RhdGUgLmRpdmlkZXIge1xuICBzdHJva2U6ICIpLmNvbmNhdCh0Lm5vZGVCb3JkZXIsIjtcbn1cblxuLnN0YXRlZGlhZ3JhbS1zdGF0ZSAudGl0bGUtc3RhdGUge1xuICByeDogNXB4O1xuICByeTogNXB4O1xufVxuLnN0YXRlZGlhZ3JhbS1jbHVzdGVyLnN0YXRlZGlhZ3JhbS1jbHVzdGVyIC5pbm5lciB7XG4gIGZpbGw6ICIpLmNvbmNhdCh0LmJhY2tncm91bmQsIjtcbn1cbi5zdGF0ZWRpYWdyYW0tY2x1c3Rlci5zdGF0ZWRpYWdyYW0tY2x1c3Rlci1hbHQgLmlubmVyIHtcbiAgZmlsbDogI2UwZTBlMDtcbn1cblxuLnN0YXRlZGlhZ3JhbS1jbHVzdGVyIC5pbm5lciB7XG4gIHJ4OjA7XG4gIHJ5OjA7XG59XG5cbi5zdGF0ZWRpYWdyYW0tc3RhdGUgcmVjdC5iYXNpYyB7XG4gIHJ4OiA1cHg7XG4gIHJ5OiA1cHg7XG59XG4uc3RhdGVkaWFncmFtLXN0YXRlIHJlY3QuZGl2aWRlciB7XG4gIHN0cm9rZS1kYXNoYXJyYXk6IDEwLDEwO1xuICBmaWxsOiAiKS5jb25jYXQodC5hbHRCYWNrZ3JvdW5kP3QuYWx0QmFja2dyb3VuZDoiI2VmZWZlZiIsIjtcbn1cblxuLm5vdGUtZWRnZSB7XG4gIHN0cm9rZS1kYXNoYXJyYXk6IDU7XG59XG5cbi5zdGF0ZWRpYWdyYW0tbm90ZSByZWN0IHtcbiAgZmlsbDogIikuY29uY2F0KHQubm90ZUJrZ0NvbG9yLCI7XG4gIHN0cm9rZTogIikuY29uY2F0KHQubm90ZUJvcmRlckNvbG9yLCI7XG4gIHN0cm9rZS13aWR0aDogMXB4O1xuICByeDogMDtcbiAgcnk6IDA7XG59XG4uc3RhdGVkaWFncmFtLW5vdGUgcmVjdCB7XG4gIGZpbGw6ICIpLmNvbmNhdCh0Lm5vdGVCa2dDb2xvciwiO1xuICBzdHJva2U6ICIpLmNvbmNhdCh0Lm5vdGVCb3JkZXJDb2xvciwiO1xuICBzdHJva2Utd2lkdGg6IDFweDtcbiAgcng6IDA7XG4gIHJ5OiAwO1xufVxuXG4uc3RhdGVkaWFncmFtLW5vdGUgdGV4dCB7XG4gIGZpbGw6ICIpLmNvbmNhdCh0Lm5vdGVUZXh0Q29sb3IsIjtcbn1cblxuLnN0YXRlZGlhZ3JhbS1ub3RlIC5ub2RlTGFiZWwge1xuICBjb2xvcjogIikuY29uY2F0KHQubm90ZVRleHRDb2xvciwiO1xufVxuXG4jZGVwZW5kZW5jeVN0YXJ0LCAjZGVwZW5kZW5jeUVuZCB7XG4gIGZpbGw6ICIpLmNvbmNhdCh0LmxpbmVDb2xvciwiO1xuICBzdHJva2U6ICIpLmNvbmNhdCh0LmxpbmVDb2xvciwiO1xuICBzdHJva2Utd2lkdGg6IDE7XG59XG4iKX0sQm89e2Zsb3djaGFydDpEbywiZmxvd2NoYXJ0LXYyIjpEbyxzZXF1ZW5jZTpmdW5jdGlvbih0KXtyZXR1cm4iLmFjdG9yIHtcbiAgICBzdHJva2U6ICIuY29uY2F0KHQuYWN0b3JCb3JkZXIsIjtcbiAgICBmaWxsOiAiKS5jb25jYXQodC5hY3RvckJrZywiO1xuICB9XG5cbiAgdGV4dC5hY3RvciA+IHRzcGFuIHtcbiAgICBmaWxsOiAiKS5jb25jYXQodC5hY3RvclRleHRDb2xvciwiO1xuICAgIHN0cm9rZTogbm9uZTtcbiAgfVxuXG4gIC5hY3Rvci1saW5lIHtcbiAgICBzdHJva2U6ICIpLmNvbmNhdCh0LmFjdG9yTGluZUNvbG9yLCI7XG4gIH1cblxuICAubWVzc2FnZUxpbmUwIHtcbiAgICBzdHJva2Utd2lkdGg6IDEuNTtcbiAgICBzdHJva2UtZGFzaGFycmF5OiBub25lO1xuICAgIHN0cm9rZTogIikuY29uY2F0KHQuc2lnbmFsQ29sb3IsIjtcbiAgfVxuXG4gIC5tZXNzYWdlTGluZTEge1xuICAgIHN0cm9rZS13aWR0aDogMS41O1xuICAgIHN0cm9rZS1kYXNoYXJyYXk6IDIsIDI7XG4gICAgc3Ryb2tlOiAiKS5jb25jYXQodC5zaWduYWxDb2xvciwiO1xuICB9XG5cbiAgI2Fycm93aGVhZCBwYXRoIHtcbiAgICBmaWxsOiAiKS5jb25jYXQodC5zaWduYWxDb2xvciwiO1xuICAgIHN0cm9rZTogIikuY29uY2F0KHQuc2lnbmFsQ29sb3IsIjtcbiAgfVxuXG4gIC5zZXF1ZW5jZU51bWJlciB7XG4gICAgZmlsbDogIikuY29uY2F0KHQuc2VxdWVuY2VOdW1iZXJDb2xvciwiO1xuICB9XG5cbiAgI3NlcXVlbmNlbnVtYmVyIHtcbiAgICBmaWxsOiAiKS5jb25jYXQodC5zaWduYWxDb2xvciwiO1xuICB9XG5cbiAgI2Nyb3NzaGVhZCBwYXRoIHtcbiAgICBmaWxsOiAiKS5jb25jYXQodC5zaWduYWxDb2xvciwiO1xuICAgIHN0cm9rZTogIikuY29uY2F0KHQuc2lnbmFsQ29sb3IsIjtcbiAgfVxuXG4gIC5tZXNzYWdlVGV4dCB7XG4gICAgZmlsbDogIikuY29uY2F0KHQuc2lnbmFsVGV4dENvbG9yLCI7XG4gICAgc3Ryb2tlOiAiKS5jb25jYXQodC5zaWduYWxUZXh0Q29sb3IsIjtcbiAgfVxuXG4gIC5sYWJlbEJveCB7XG4gICAgc3Ryb2tlOiAiKS5jb25jYXQodC5sYWJlbEJveEJvcmRlckNvbG9yLCI7XG4gICAgZmlsbDogIikuY29uY2F0KHQubGFiZWxCb3hCa2dDb2xvciwiO1xuICB9XG5cbiAgLmxhYmVsVGV4dCwgLmxhYmVsVGV4dCA+IHRzcGFuIHtcbiAgICBmaWxsOiAiKS5jb25jYXQodC5sYWJlbFRleHRDb2xvciwiO1xuICAgIHN0cm9rZTogbm9uZTtcbiAgfVxuXG4gIC5sb29wVGV4dCwgLmxvb3BUZXh0ID4gdHNwYW4ge1xuICAgIGZpbGw6ICIpLmNvbmNhdCh0Lmxvb3BUZXh0Q29sb3IsIjtcbiAgICBzdHJva2U6IG5vbmU7XG4gIH1cblxuICAubG9vcExpbmUge1xuICAgIHN0cm9rZS13aWR0aDogMnB4O1xuICAgIHN0cm9rZS1kYXNoYXJyYXk6IDIsIDI7XG4gICAgc3Ryb2tlOiAiKS5jb25jYXQodC5sYWJlbEJveEJvcmRlckNvbG9yLCI7XG4gICAgZmlsbDogIikuY29uY2F0KHQubGFiZWxCb3hCb3JkZXJDb2xvciwiO1xuICB9XG5cbiAgLm5vdGUge1xuICAgIC8vc3Ryb2tlOiAjZGVjYzkzO1xuICAgIHN0cm9rZTogIikuY29uY2F0KHQubm90ZUJvcmRlckNvbG9yLCI7XG4gICAgZmlsbDogIikuY29uY2F0KHQubm90ZUJrZ0NvbG9yLCI7XG4gIH1cblxuICAubm90ZVRleHQsIC5ub3RlVGV4dCA+IHRzcGFuIHtcbiAgICBmaWxsOiAiKS5jb25jYXQodC5ub3RlVGV4dENvbG9yLCI7XG4gICAgc3Ryb2tlOiBub25lO1xuICB9XG5cbiAgLmFjdGl2YXRpb24wIHtcbiAgICBmaWxsOiAiKS5jb25jYXQodC5hY3RpdmF0aW9uQmtnQ29sb3IsIjtcbiAgICBzdHJva2U6ICIpLmNvbmNhdCh0LmFjdGl2YXRpb25Cb3JkZXJDb2xvciwiO1xuICB9XG5cbiAgLmFjdGl2YXRpb24xIHtcbiAgICBmaWxsOiAiKS5jb25jYXQodC5hY3RpdmF0aW9uQmtnQ29sb3IsIjtcbiAgICBzdHJva2U6ICIpLmNvbmNhdCh0LmFjdGl2YXRpb25Cb3JkZXJDb2xvciwiO1xuICB9XG5cbiAgLmFjdGl2YXRpb24yIHtcbiAgICBmaWxsOiAiKS5jb25jYXQodC5hY3RpdmF0aW9uQmtnQ29sb3IsIjtcbiAgICBzdHJva2U6ICIpLmNvbmNhdCh0LmFjdGl2YXRpb25Cb3JkZXJDb2xvciwiO1xuICB9XG4iKX0sZ2FudHQ6ZnVuY3Rpb24odCl7cmV0dXJuJ1xuICAubWVybWFpZC1tYWluLWZvbnQge1xuICAgIGZvbnQtZmFtaWx5OiAidHJlYnVjaGV0IG1zIiwgdmVyZGFuYSwgYXJpYWw7XG4gICAgZm9udC1mYW1pbHk6IHZhcigtLW1lcm1haWQtZm9udC1mYW1pbHkpO1xuICB9XG5cbiAgLnNlY3Rpb24ge1xuICAgIHN0cm9rZTogbm9uZTtcbiAgICBvcGFjaXR5OiAwLjI7XG4gIH1cblxuICAuc2VjdGlvbjAge1xuICAgIGZpbGw6ICcuY29uY2F0KHQuc2VjdGlvbkJrZ0NvbG9yLCI7XG4gIH1cblxuICAuc2VjdGlvbjIge1xuICAgIGZpbGw6ICIpLmNvbmNhdCh0LnNlY3Rpb25Ca2dDb2xvcjIsIjtcbiAgfVxuXG4gIC5zZWN0aW9uMSxcbiAgLnNlY3Rpb24zIHtcbiAgICBmaWxsOiAiKS5jb25jYXQodC5hbHRTZWN0aW9uQmtnQ29sb3IsIjtcbiAgICBvcGFjaXR5OiAwLjI7XG4gIH1cblxuICAuc2VjdGlvblRpdGxlMCB7XG4gICAgZmlsbDogIikuY29uY2F0KHQudGl0bGVDb2xvciwiO1xuICB9XG5cbiAgLnNlY3Rpb25UaXRsZTEge1xuICAgIGZpbGw6ICIpLmNvbmNhdCh0LnRpdGxlQ29sb3IsIjtcbiAgfVxuXG4gIC5zZWN0aW9uVGl0bGUyIHtcbiAgICBmaWxsOiAiKS5jb25jYXQodC50aXRsZUNvbG9yLCI7XG4gIH1cblxuICAuc2VjdGlvblRpdGxlMyB7XG4gICAgZmlsbDogIikuY29uY2F0KHQudGl0bGVDb2xvciwiO1xuICB9XG5cbiAgLnNlY3Rpb25UaXRsZSB7XG4gICAgdGV4dC1hbmNob3I6IHN0YXJ0O1xuICAgIGZvbnQtc2l6ZTogMTFweDtcbiAgICB0ZXh0LWhlaWdodDogMTRweDtcbiAgICBmb250LWZhbWlseTogJ3RyZWJ1Y2hldCBtcycsIHZlcmRhbmEsIGFyaWFsO1xuICAgIGZvbnQtZmFtaWx5OiB2YXIoLS1tZXJtYWlkLWZvbnQtZmFtaWx5KTtcblxuICB9XG5cblxuICAvKiBHcmlkIGFuZCBheGlzICovXG5cbiAgLmdyaWQgLnRpY2sge1xuICAgIHN0cm9rZTogIikuY29uY2F0KHQuZ3JpZENvbG9yLCI7XG4gICAgb3BhY2l0eTogMC44O1xuICAgIHNoYXBlLXJlbmRlcmluZzogY3Jpc3BFZGdlcztcbiAgICB0ZXh0IHtcbiAgICAgIGZvbnQtZmFtaWx5OiAiKS5jb25jYXQodC5mb250RmFtaWx5LCI7XG4gICAgICBmaWxsOiAiKS5jb25jYXQodC50ZXh0Q29sb3IsIjtcbiAgICB9XG4gIH1cblxuICAuZ3JpZCBwYXRoIHtcbiAgICBzdHJva2Utd2lkdGg6IDA7XG4gIH1cblxuXG4gIC8qIFRvZGF5IGxpbmUgKi9cblxuICAudG9kYXkge1xuICAgIGZpbGw6IG5vbmU7XG4gICAgc3Ryb2tlOiAiKS5jb25jYXQodC50b2RheUxpbmVDb2xvciwiO1xuICAgIHN0cm9rZS13aWR0aDogMnB4O1xuICB9XG5cblxuICAvKiBUYXNrIHN0eWxpbmcgKi9cblxuICAvKiBEZWZhdWx0IHRhc2sgKi9cblxuICAudGFzayB7XG4gICAgc3Ryb2tlLXdpZHRoOiAyO1xuICB9XG5cbiAgLnRhc2tUZXh0IHtcbiAgICB0ZXh0LWFuY2hvcjogbWlkZGxlO1xuICAgIGZvbnQtZmFtaWx5OiAndHJlYnVjaGV0IG1zJywgdmVyZGFuYSwgYXJpYWw7XG4gICAgZm9udC1mYW1pbHk6IHZhcigtLW1lcm1haWQtZm9udC1mYW1pbHkpO1xuICB9XG5cbiAgLnRhc2tUZXh0Om5vdChbZm9udC1zaXplXSkge1xuICAgIGZvbnQtc2l6ZTogMTFweDtcbiAgfVxuXG4gIC50YXNrVGV4dE91dHNpZGVSaWdodCB7XG4gICAgZmlsbDogIikuY29uY2F0KHQudGFza1RleHREYXJrQ29sb3IsIjtcbiAgICB0ZXh0LWFuY2hvcjogc3RhcnQ7XG4gICAgZm9udC1zaXplOiAxMXB4O1xuICAgIGZvbnQtZmFtaWx5OiAndHJlYnVjaGV0IG1zJywgdmVyZGFuYSwgYXJpYWw7XG4gICAgZm9udC1mYW1pbHk6IHZhcigtLW1lcm1haWQtZm9udC1mYW1pbHkpO1xuXG4gIH1cblxuICAudGFza1RleHRPdXRzaWRlTGVmdCB7XG4gICAgZmlsbDogIikuY29uY2F0KHQudGFza1RleHREYXJrQ29sb3IsIjtcbiAgICB0ZXh0LWFuY2hvcjogZW5kO1xuICAgIGZvbnQtc2l6ZTogMTFweDtcbiAgfVxuXG4gIC8qIFNwZWNpYWwgY2FzZSBjbGlja2FibGUgKi9cbiAgLnRhc2suY2xpY2thYmxlIHtcbiAgICBjdXJzb3I6IHBvaW50ZXI7XG4gIH1cbiAgLnRhc2tUZXh0LmNsaWNrYWJsZSB7XG4gICAgY3Vyc29yOiBwb2ludGVyO1xuICAgIGZpbGw6ICIpLmNvbmNhdCh0LnRhc2tUZXh0Q2xpY2thYmxlQ29sb3IsIiAhaW1wb3J0YW50O1xuICAgIGZvbnQtd2VpZ2h0OiBib2xkO1xuICB9XG5cbiAgLnRhc2tUZXh0T3V0c2lkZUxlZnQuY2xpY2thYmxlIHtcbiAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgZmlsbDogIikuY29uY2F0KHQudGFza1RleHRDbGlja2FibGVDb2xvciwiICFpbXBvcnRhbnQ7XG4gICAgZm9udC13ZWlnaHQ6IGJvbGQ7XG4gIH1cblxuICAudGFza1RleHRPdXRzaWRlUmlnaHQuY2xpY2thYmxlIHtcbiAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgZmlsbDogIikuY29uY2F0KHQudGFza1RleHRDbGlja2FibGVDb2xvciwiICFpbXBvcnRhbnQ7XG4gICAgZm9udC13ZWlnaHQ6IGJvbGQ7XG4gIH1cblxuICAvKiBTcGVjaWZpYyB0YXNrIHNldHRpbmdzIGZvciB0aGUgc2VjdGlvbnMqL1xuXG4gIC50YXNrVGV4dDAsXG4gIC50YXNrVGV4dDEsXG4gIC50YXNrVGV4dDIsXG4gIC50YXNrVGV4dDMge1xuICAgIGZpbGw6ICIpLmNvbmNhdCh0LnRhc2tUZXh0Q29sb3IsIjtcbiAgfVxuXG4gIC50YXNrMCxcbiAgLnRhc2sxLFxuICAudGFzazIsXG4gIC50YXNrMyB7XG4gICAgZmlsbDogIikuY29uY2F0KHQudGFza0JrZ0NvbG9yLCI7XG4gICAgc3Ryb2tlOiAiKS5jb25jYXQodC50YXNrQm9yZGVyQ29sb3IsIjtcbiAgfVxuXG4gIC50YXNrVGV4dE91dHNpZGUwLFxuICAudGFza1RleHRPdXRzaWRlMlxuICB7XG4gICAgZmlsbDogIikuY29uY2F0KHQudGFza1RleHRPdXRzaWRlQ29sb3IsIjtcbiAgfVxuXG4gIC50YXNrVGV4dE91dHNpZGUxLFxuICAudGFza1RleHRPdXRzaWRlMyB7XG4gICAgZmlsbDogIikuY29uY2F0KHQudGFza1RleHRPdXRzaWRlQ29sb3IsIjtcbiAgfVxuXG5cbiAgLyogQWN0aXZlIHRhc2sgKi9cblxuICAuYWN0aXZlMCxcbiAgLmFjdGl2ZTEsXG4gIC5hY3RpdmUyLFxuICAuYWN0aXZlMyB7XG4gICAgZmlsbDogIikuY29uY2F0KHQuYWN0aXZlVGFza0JrZ0NvbG9yLCI7XG4gICAgc3Ryb2tlOiAiKS5jb25jYXQodC5hY3RpdmVUYXNrQm9yZGVyQ29sb3IsIjtcbiAgfVxuXG4gIC5hY3RpdmVUZXh0MCxcbiAgLmFjdGl2ZVRleHQxLFxuICAuYWN0aXZlVGV4dDIsXG4gIC5hY3RpdmVUZXh0MyB7XG4gICAgZmlsbDogIikuY29uY2F0KHQudGFza1RleHREYXJrQ29sb3IsIiAhaW1wb3J0YW50O1xuICB9XG5cblxuICAvKiBDb21wbGV0ZWQgdGFzayAqL1xuXG4gIC5kb25lMCxcbiAgLmRvbmUxLFxuICAuZG9uZTIsXG4gIC5kb25lMyB7XG4gICAgc3Ryb2tlOiAiKS5jb25jYXQodC5kb25lVGFza0JvcmRlckNvbG9yLCI7XG4gICAgZmlsbDogIikuY29uY2F0KHQuZG9uZVRhc2tCa2dDb2xvciwiO1xuICAgIHN0cm9rZS13aWR0aDogMjtcbiAgfVxuXG4gIC5kb25lVGV4dDAsXG4gIC5kb25lVGV4dDEsXG4gIC5kb25lVGV4dDIsXG4gIC5kb25lVGV4dDMge1xuICAgIGZpbGw6ICIpLmNvbmNhdCh0LnRhc2tUZXh0RGFya0NvbG9yLCIgIWltcG9ydGFudDtcbiAgfVxuXG5cbiAgLyogVGFza3Mgb24gdGhlIGNyaXRpY2FsIGxpbmUgKi9cblxuICAuY3JpdDAsXG4gIC5jcml0MSxcbiAgLmNyaXQyLFxuICAuY3JpdDMge1xuICAgIHN0cm9rZTogIikuY29uY2F0KHQuY3JpdEJvcmRlckNvbG9yLCI7XG4gICAgZmlsbDogIikuY29uY2F0KHQuY3JpdEJrZ0NvbG9yLCI7XG4gICAgc3Ryb2tlLXdpZHRoOiAyO1xuICB9XG5cbiAgLmFjdGl2ZUNyaXQwLFxuICAuYWN0aXZlQ3JpdDEsXG4gIC5hY3RpdmVDcml0MixcbiAgLmFjdGl2ZUNyaXQzIHtcbiAgICBzdHJva2U6ICIpLmNvbmNhdCh0LmNyaXRCb3JkZXJDb2xvciwiO1xuICAgIGZpbGw6ICIpLmNvbmNhdCh0LmFjdGl2ZVRhc2tCa2dDb2xvciwiO1xuICAgIHN0cm9rZS13aWR0aDogMjtcbiAgfVxuXG4gIC5kb25lQ3JpdDAsXG4gIC5kb25lQ3JpdDEsXG4gIC5kb25lQ3JpdDIsXG4gIC5kb25lQ3JpdDMge1xuICAgIHN0cm9rZTogIikuY29uY2F0KHQuY3JpdEJvcmRlckNvbG9yLCI7XG4gICAgZmlsbDogIikuY29uY2F0KHQuZG9uZVRhc2tCa2dDb2xvciwiO1xuICAgIHN0cm9rZS13aWR0aDogMjtcbiAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgc2hhcGUtcmVuZGVyaW5nOiBjcmlzcEVkZ2VzO1xuICB9XG5cbiAgLm1pbGVzdG9uZSB7XG4gICAgdHJhbnNmb3JtOiByb3RhdGUoNDVkZWcpIHNjYWxlKDAuOCwwLjgpO1xuICB9XG5cbiAgLm1pbGVzdG9uZVRleHQge1xuICAgIGZvbnQtc3R5bGU6IGl0YWxpYztcbiAgfVxuICAuZG9uZUNyaXRUZXh0MCxcbiAgLmRvbmVDcml0VGV4dDEsXG4gIC5kb25lQ3JpdFRleHQyLFxuICAuZG9uZUNyaXRUZXh0MyB7XG4gICAgZmlsbDogIikuY29uY2F0KHQudGFza1RleHREYXJrQ29sb3IsIiAhaW1wb3J0YW50O1xuICB9XG5cbiAgLmFjdGl2ZUNyaXRUZXh0MCxcbiAgLmFjdGl2ZUNyaXRUZXh0MSxcbiAgLmFjdGl2ZUNyaXRUZXh0MixcbiAgLmFjdGl2ZUNyaXRUZXh0MyB7XG4gICAgZmlsbDogIikuY29uY2F0KHQudGFza1RleHREYXJrQ29sb3IsIiAhaW1wb3J0YW50O1xuICB9XG5cbiAgLnRpdGxlVGV4dCB7XG4gICAgdGV4dC1hbmNob3I6IG1pZGRsZTtcbiAgICBmb250LXNpemU6IDE4cHg7XG4gICAgZmlsbDogIikuY29uY2F0KHQudGV4dENvbG9yLCIgICAgO1xuICAgIGZvbnQtZmFtaWx5OiAndHJlYnVjaGV0IG1zJywgdmVyZGFuYSwgYXJpYWw7XG4gICAgZm9udC1mYW1pbHk6IHZhcigtLW1lcm1haWQtZm9udC1mYW1pbHkpO1xuICB9XG4iKX0sY2xhc3NEaWFncmFtOk9vLCJjbGFzc0RpYWdyYW0tdjIiOk9vLGNsYXNzOk9vLHN0YXRlRGlhZ3JhbTpObyxzdGF0ZTpObyxnaXQ6ZnVuY3Rpb24oKXtyZXR1cm4iXG4gIC5jb21taXQtaWQsXG4gIC5jb21taXQtbXNnLFxuICAuYnJhbmNoLWxhYmVsIHtcbiAgICBmaWxsOiBsaWdodGdyZXk7XG4gICAgY29sb3I6IGxpZ2h0Z3JleTtcbiAgICBmb250LWZhbWlseTogJ3RyZWJ1Y2hldCBtcycsIHZlcmRhbmEsIGFyaWFsO1xuICAgIGZvbnQtZmFtaWx5OiB2YXIoLS1tZXJtYWlkLWZvbnQtZmFtaWx5KTtcbiAgfVxuIn0saW5mbzpmdW5jdGlvbigpe3JldHVybiIifSxwaWU6ZnVuY3Rpb24odCl7cmV0dXJuIi5waWVUaXRsZVRleHQge1xuICAgIHRleHQtYW5jaG9yOiBtaWRkbGU7XG4gICAgZm9udC1zaXplOiAyNXB4O1xuICAgIGZpbGw6ICIuY29uY2F0KHQudGFza1RleHREYXJrQ29sb3IsIjtcbiAgICBmb250LWZhbWlseTogIikuY29uY2F0KHQuZm9udEZhbWlseSwiO1xuICB9XG4gIC5zbGljZSB7XG4gICAgZm9udC1mYW1pbHk6ICIpLmNvbmNhdCh0LmZvbnRGYW1pbHksIjtcbiAgICBmaWxsOiAiKS5jb25jYXQodC50ZXh0Q29sb3IsIjtcbiAgICAvLyBmaWxsOiB3aGl0ZTtcbiAgfVxuICAubGVnZW5kIHRleHQge1xuICAgIGZpbGw6ICIpLmNvbmNhdCh0LnRhc2tUZXh0RGFya0NvbG9yLCI7XG4gICAgZm9udC1mYW1pbHk6ICIpLmNvbmNhdCh0LmZvbnRGYW1pbHksIjtcbiAgICBmb250LXNpemU6IDE3cHg7XG4gIH1cbiIpfSxlcjpmdW5jdGlvbih0KXtyZXR1cm4iXG4gIC5lbnRpdHlCb3gge1xuICAgIGZpbGw6ICIuY29uY2F0KHQubWFpbkJrZywiO1xuICAgIHN0cm9rZTogIikuY29uY2F0KHQubm9kZUJvcmRlciwiO1xuICB9XG5cbiAgLnJlbGF0aW9uc2hpcExhYmVsQm94IHtcbiAgICBmaWxsOiAiKS5jb25jYXQodC50ZXJ0aWFyeUNvbG9yLCI7XG4gICAgb3BhY2l0eTogMC43O1xuICAgIGJhY2tncm91bmQtY29sb3I6ICIpLmNvbmNhdCh0LnRlcnRpYXJ5Q29sb3IsIjtcbiAgICAgIHJlY3Qge1xuICAgICAgICBvcGFjaXR5OiAwLjU7XG4gICAgICB9XG4gIH1cblxuICAgIC5yZWxhdGlvbnNoaXBMaW5lIHtcbiAgICAgIHN0cm9rZTogIikuY29uY2F0KHQubGluZUNvbG9yLCI7XG4gICAgfVxuIil9LGpvdXJuZXk6ZnVuY3Rpb24odCl7cmV0dXJuIi5sYWJlbCB7XG4gICAgZm9udC1mYW1pbHk6ICd0cmVidWNoZXQgbXMnLCB2ZXJkYW5hLCBhcmlhbDtcbiAgICBmb250LWZhbWlseTogdmFyKC0tbWVybWFpZC1mb250LWZhbWlseSk7XG4gICAgY29sb3I6ICIuY29uY2F0KHQudGV4dENvbG9yLCI7XG4gIH1cbiAgLm1vdXRoIHtcbiAgICBzdHJva2U6ICM2NjY7XG4gIH1cblxuICBsaW5lIHtcbiAgICBzdHJva2U6ICIpLmNvbmNhdCh0LnRleHRDb2xvciwiXG4gIH1cblxuICAubGVnZW5kIHtcbiAgICBmaWxsOiAiKS5jb25jYXQodC50ZXh0Q29sb3IsIjtcbiAgfVxuXG4gIC5sYWJlbCB0ZXh0IHtcbiAgICBmaWxsOiAjMzMzO1xuICB9XG4gIC5sYWJlbCB7XG4gICAgY29sb3I6ICIpLmNvbmNhdCh0LnRleHRDb2xvciwiXG4gIH1cblxuICAuZmFjZSB7XG4gICAgZmlsbDogI0ZGRjhEQztcbiAgICBzdHJva2U6ICM5OTk7XG4gIH1cblxuICAubm9kZSByZWN0LFxuICAubm9kZSBjaXJjbGUsXG4gIC5ub2RlIGVsbGlwc2UsXG4gIC5ub2RlIHBvbHlnb24sXG4gIC5ub2RlIHBhdGgge1xuICAgIGZpbGw6ICIpLmNvbmNhdCh0Lm1haW5Ca2csIjtcbiAgICBzdHJva2U6ICIpLmNvbmNhdCh0Lm5vZGVCb3JkZXIsIjtcbiAgICBzdHJva2Utd2lkdGg6IDFweDtcbiAgfVxuXG4gIC5ub2RlIC5sYWJlbCB7XG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICB9XG4gIC5ub2RlLmNsaWNrYWJsZSB7XG4gICAgY3Vyc29yOiBwb2ludGVyO1xuICB9XG5cbiAgLmFycm93aGVhZFBhdGgge1xuICAgIGZpbGw6ICIpLmNvbmNhdCh0LmFycm93aGVhZENvbG9yLCI7XG4gIH1cblxuICAuZWRnZVBhdGggLnBhdGgge1xuICAgIHN0cm9rZTogIikuY29uY2F0KHQubGluZUNvbG9yLCI7XG4gICAgc3Ryb2tlLXdpZHRoOiAxLjVweDtcbiAgfVxuXG4gIC5mbG93Y2hhcnQtbGluayB7XG4gICAgc3Ryb2tlOiAiKS5jb25jYXQodC5saW5lQ29sb3IsIjtcbiAgICBmaWxsOiBub25lO1xuICB9XG5cbiAgLmVkZ2VMYWJlbCB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogIikuY29uY2F0KHQuZWRnZUxhYmVsQmFja2dyb3VuZCwiO1xuICAgIHJlY3Qge1xuICAgICAgb3BhY2l0eTogMC41O1xuICAgIH1cbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIH1cblxuICAuY2x1c3RlciByZWN0IHtcbiAgfVxuXG4gIC5jbHVzdGVyIHRleHQge1xuICAgIGZpbGw6ICIpLmNvbmNhdCh0LnRpdGxlQ29sb3IsIjtcbiAgfVxuXG4gIGRpdi5tZXJtYWlkVG9vbHRpcCB7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICBtYXgtd2lkdGg6IDIwMHB4O1xuICAgIHBhZGRpbmc6IDJweDtcbiAgICBmb250LWZhbWlseTogJ3RyZWJ1Y2hldCBtcycsIHZlcmRhbmEsIGFyaWFsO1xuICAgIGZvbnQtZmFtaWx5OiB2YXIoLS1tZXJtYWlkLWZvbnQtZmFtaWx5KTtcbiAgICBmb250LXNpemU6IDEycHg7XG4gICAgYmFja2dyb3VuZDogIikuY29uY2F0KHQudGVydGlhcnlDb2xvciwiO1xuICAgIGJvcmRlcjogMXB4IHNvbGlkICIpLmNvbmNhdCh0LmJvcmRlcjIsIjtcbiAgICBib3JkZXItcmFkaXVzOiAycHg7XG4gICAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG4gICAgei1pbmRleDogMTAwO1xuICB9XG5cbiAgLnRhc2stdHlwZS0wLCAuc2VjdGlvbi10eXBlLTAgIHtcbiAgICAiKS5jb25jYXQodC5maWxsVHlwZTA/ImZpbGw6ICIuY29uY2F0KHQuZmlsbFR5cGUwKToiIiwiO1xuICB9XG4gIC50YXNrLXR5cGUtMSwgLnNlY3Rpb24tdHlwZS0xICB7XG4gICAgIikuY29uY2F0KHQuZmlsbFR5cGUwPyJmaWxsOiAiLmNvbmNhdCh0LmZpbGxUeXBlMSk6IiIsIjtcbiAgfVxuICAudGFzay10eXBlLTIsIC5zZWN0aW9uLXR5cGUtMiAge1xuICAgICIpLmNvbmNhdCh0LmZpbGxUeXBlMD8iZmlsbDogIi5jb25jYXQodC5maWxsVHlwZTIpOiIiLCI7XG4gIH1cbiAgLnRhc2stdHlwZS0zLCAuc2VjdGlvbi10eXBlLTMgIHtcbiAgICAiKS5jb25jYXQodC5maWxsVHlwZTA/ImZpbGw6ICIuY29uY2F0KHQuZmlsbFR5cGUzKToiIiwiO1xuICB9XG4gIC50YXNrLXR5cGUtNCwgLnNlY3Rpb24tdHlwZS00ICB7XG4gICAgIikuY29uY2F0KHQuZmlsbFR5cGUwPyJmaWxsOiAiLmNvbmNhdCh0LmZpbGxUeXBlNCk6IiIsIjtcbiAgfVxuICAudGFzay10eXBlLTUsIC5zZWN0aW9uLXR5cGUtNSAge1xuICAgICIpLmNvbmNhdCh0LmZpbGxUeXBlMD8iZmlsbDogIi5jb25jYXQodC5maWxsVHlwZTUpOiIiLCI7XG4gIH1cbiAgLnRhc2stdHlwZS02LCAuc2VjdGlvbi10eXBlLTYgIHtcbiAgICAiKS5jb25jYXQodC5maWxsVHlwZTA/ImZpbGw6ICIuY29uY2F0KHQuZmlsbFR5cGU2KToiIiwiO1xuICB9XG4gIC50YXNrLXR5cGUtNywgLnNlY3Rpb24tdHlwZS03ICB7XG4gICAgIikuY29uY2F0KHQuZmlsbFR5cGUwPyJmaWxsOiAiLmNvbmNhdCh0LmZpbGxUeXBlNyk6IiIsIjtcbiAgfVxuIil9fSxMbz1mdW5jdGlvbih0LGUsbil7cmV0dXJuIiB7XG4gICAgZm9udC1mYW1pbHk6ICIuY29uY2F0KG4uZm9udEZhbWlseSwiO1xuICAgIGZvbnQtc2l6ZTogIikuY29uY2F0KG4uZm9udFNpemUsIjtcbiAgICBmaWxsOiAiKS5jb25jYXQobi50ZXh0Q29sb3IsIlxuICB9XG5cbiAgLyogQ2xhc3NlcyBjb21tb24gZm9yIG11bHRpcGxlIGRpYWdyYW1zICovXG5cbiAgLmVycm9yLWljb24ge1xuICAgIGZpbGw6ICIpLmNvbmNhdChuLmVycm9yQmtnQ29sb3IsIjtcbiAgfVxuICAuZXJyb3ItdGV4dCB7XG4gICAgZmlsbDogIikuY29uY2F0KG4uZXJyb3JUZXh0Q29sb3IsIjtcbiAgICBzdHJva2U6ICIpLmNvbmNhdChuLmVycm9yVGV4dENvbG9yLCI7XG4gIH1cblxuICAuZWRnZS10aGlja25lc3Mtbm9ybWFsIHtcbiAgICBzdHJva2Utd2lkdGg6IDJweDtcbiAgfVxuICAuZWRnZS10aGlja25lc3MtdGhpY2sge1xuICAgIHN0cm9rZS13aWR0aDogMy41cHhcbiAgfVxuICAuZWRnZS1wYXR0ZXJuLXNvbGlkIHtcbiAgICBzdHJva2UtZGFzaGFycmF5OiAwO1xuICB9XG5cbiAgLmVkZ2UtcGF0dGVybi1kYXNoZWR7XG4gICAgc3Ryb2tlLWRhc2hhcnJheTogMztcbiAgfVxuICAuZWRnZS1wYXR0ZXJuLWRvdHRlZCB7XG4gICAgc3Ryb2tlLWRhc2hhcnJheTogMjtcbiAgfVxuXG4gIC5tYXJrZXIge1xuICAgIGZpbGw6ICIpLmNvbmNhdChuLmxpbmVDb2xvciwiO1xuICB9XG4gIC5tYXJrZXIuY3Jvc3Mge1xuICAgIHN0cm9rZTogIikuY29uY2F0KG4ubGluZUNvbG9yLCI7XG4gIH1cblxuICBzdmcge1xuICAgIGZvbnQtZmFtaWx5OiAiKS5jb25jYXQobi5mb250RmFtaWx5LCI7XG4gICAgZm9udC1zaXplOiAiKS5jb25jYXQobi5mb250U2l6ZSwiO1xuICB9XG5cbiAgIikuY29uY2F0KEJvW3RdKG4pLCJcblxuICAiKS5jb25jYXQoZSwiXG5cbiAgIikuY29uY2F0KHQsIiB7IGZpbGw6IGFwYTt9XG4iKX07ZnVuY3Rpb24gRm8odCl7cmV0dXJuKEZvPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKHQpe3JldHVybiB0eXBlb2YgdH06ZnVuY3Rpb24odCl7cmV0dXJuIHQmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJnQuY29uc3RydWN0b3I9PT1TeW1ib2wmJnQhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiB0fSkodCl9dmFyIFBvPXt9LElvPWZ1bmN0aW9uKHQsZSxuKXtzd2l0Y2goZi5kZWJ1ZygiRGlyZWN0aXZlIHR5cGU9Ii5jb25jYXQoZS50eXBlLCIgd2l0aCBhcmdzOiIpLGUuYXJncyksZS50eXBlKXtjYXNlImluaXQiOmNhc2UiaW5pdGlhbGl6ZSI6WyJjb25maWciXS5mb3JFYWNoKChmdW5jdGlvbih0KXt2b2lkIDAhPT1lLmFyZ3NbdF0mJigiZmxvd2NoYXJ0LXYyIj09PW4mJihuPSJmbG93Y2hhcnQiKSxlLmFyZ3Nbbl09ZS5hcmdzW3RdLGRlbGV0ZSBlLmFyZ3NbdF0pfSkpLGUuYXJncyxrdChlLmFyZ3MpO2JyZWFrO2Nhc2Uid3JhcCI6Y2FzZSJub3dyYXAiOnQmJnQuc2V0V3JhcCYmdC5zZXRXcmFwKCJ3cmFwIj09PWUudHlwZSk7YnJlYWs7ZGVmYXVsdDpmLndhcm4oIlVuaGFuZGxlZCBkaXJlY3RpdmU6IHNvdXJjZTogJyUleyIuY29uY2F0KGUudHlwZSwiOiAiKS5jb25jYXQoSlNPTi5zdHJpbmdpZnkoZS5hcmdzP2UuYXJnczp7fSksIn0lJSIpLGUpfX07ZnVuY3Rpb24gam8odCl7bWEodC5naXQpLGdlKHQuZmxvd2NoYXJ0KSxPbih0LmZsb3djaGFydCksdm9pZCAwIT09dC5zZXF1ZW5jZURpYWdyYW0mJnZyLnNldENvbmYoUCh0LnNlcXVlbmNlLHQuc2VxdWVuY2VEaWFncmFtKSksdnIuc2V0Q29uZih0LnNlcXVlbmNlKSxLcih0LmdhbnR0KSxvaSh0LmNsYXNzKSxJaSh0LnN0YXRlKSxXaSh0LnN0YXRlKSxDYSh0LmNsYXNzKSxJYSh0LmNsYXNzKSxKYSh0LmVyKSxBbyh0LmpvdXJuZXkpLE1hKHQuY2xhc3MpfWZ1bmN0aW9uIFJvKCl7fXZhciBZbz1PYmplY3QuZnJlZXplKHtyZW5kZXI6ZnVuY3Rpb24odCxlLG4scil7d3QoKTt2YXIgaT1lLGE9Vy5kZXRlY3RJbml0KGkpO2EmJmt0KGEpO3ZhciB1PXh0KCk7aWYoZS5sZW5ndGg+dS5tYXhUZXh0U2l6ZSYmKGk9ImdyYXBoIFRCO2FbTWF4aW11bSB0ZXh0IHNpemUgaW4gZGlhZ3JhbSBleGNlZWRlZF07c3R5bGUgYSBmaWxsOiNmYWEiKSx2b2lkIDAhPT1yKXIuaW5uZXJIVE1MPSIiLE9iamVjdChzLnNlbGVjdCkocikuYXBwZW5kKCJkaXYiKS5hdHRyKCJpZCIsImQiK3QpLmF0dHIoInN0eWxlIiwiZm9udC1mYW1pbHk6ICIrdS5mb250RmFtaWx5KS5hcHBlbmQoInN2ZyIpLmF0dHIoImlkIix0KS5hdHRyKCJ3aWR0aCIsIjEwMCUiKS5hdHRyKCJ4bWxucyIsImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIikuYXBwZW5kKCJnIik7ZWxzZXt2YXIgbD1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCh0KTtsJiZsLnJlbW92ZSgpO3ZhciBoPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoIiNkIit0KTtoJiZoLnJlbW92ZSgpLE9iamVjdChzLnNlbGVjdCkoImJvZHkiKS5hcHBlbmQoImRpdiIpLmF0dHIoImlkIiwiZCIrdCkuYXBwZW5kKCJzdmciKS5hdHRyKCJpZCIsdCkuYXR0cigid2lkdGgiLCIxMDAlIikuYXR0cigieG1sbnMiLCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIpLmFwcGVuZCgiZyIpfXdpbmRvdy50eHQ9aSxpPWZ1bmN0aW9uKHQpe3ZhciBlPXQ7cmV0dXJuIGU9KGU9KGU9ZS5yZXBsYWNlKC9zdHlsZS4qOlxTKiMuKjsvZywoZnVuY3Rpb24odCl7cmV0dXJuIHQuc3Vic3RyaW5nKDAsdC5sZW5ndGgtMSl9KSkpLnJlcGxhY2UoL2NsYXNzRGVmLio6XFMqIy4qOy9nLChmdW5jdGlvbih0KXtyZXR1cm4gdC5zdWJzdHJpbmcoMCx0Lmxlbmd0aC0xKX0pKSkucmVwbGFjZSgvI1x3KzsvZywoZnVuY3Rpb24odCl7dmFyIGU9dC5zdWJzdHJpbmcoMSx0Lmxlbmd0aC0xKTtyZXR1cm4vXlwrP1xkKyQvLnRlc3QoZSk/Iu+sgsKwwrAiK2UrIsK2w58iOiLvrILCsCIrZSsiwrbDnyJ9KSl9KGkpO3ZhciBkPU9iamVjdChzLnNlbGVjdCkoIiNkIit0KS5ub2RlKCkscD1XLmRldGVjdFR5cGUoaSksZz1kLmZpcnN0Q2hpbGQseT1nLmZpcnN0Q2hpbGQsdj0iIjtpZih2b2lkIDAhPT11LnRoZW1lQ1NTJiYodis9IlxuIi5jb25jYXQodS50aGVtZUNTUykpLHZvaWQgMCE9PXUuZm9udEZhbWlseSYmKHYrPSJcbjpyb290IHsgLS1tZXJtYWlkLWZvbnQtZmFtaWx5OiAiLmNvbmNhdCh1LmZvbnRGYW1pbHksIn0iKSksdm9pZCAwIT09dS5hbHRGb250RmFtaWx5JiYodis9IlxuOnJvb3QgeyAtLW1lcm1haWQtYWx0LWZvbnQtZmFtaWx5OiAiLmNvbmNhdCh1LmFsdEZvbnRGYW1pbHksIn0iKSksImZsb3djaGFydCI9PT1wfHwiZmxvd2NoYXJ0LXYyIj09PXB8fCJncmFwaCI9PT1wKXt2YXIgbT15ZShpKTtmb3IodmFyIGIgaW4gbSl2Kz0iXG4uIi5jb25jYXQoYiwiID4gKiB7ICIpLmNvbmNhdChtW2JdLnN0eWxlcy5qb2luKCIgIWltcG9ydGFudDsgIiksIiAhaW1wb3J0YW50OyB9IiksbVtiXS50ZXh0U3R5bGVzJiYodis9IlxuLiIuY29uY2F0KGIsIiB0c3BhbiB7ICIpLmNvbmNhdChtW2JdLnRleHRTdHlsZXMuam9pbigiICFpbXBvcnRhbnQ7ICIpLCIgIWltcG9ydGFudDsgfSIpKX12YXIgeD0obmV3IG8uYSkoIiMiLmNvbmNhdCh0KSxMbyhwLHYsdS50aGVtZVZhcmlhYmxlcykpLF89ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3R5bGUiKTtfLmlubmVySFRNTD14LGcuaW5zZXJ0QmVmb3JlKF8seSk7dHJ5e3N3aXRjaChwKXtjYXNlImdpdCI6dS5mbG93Y2hhcnQuYXJyb3dNYXJrZXJBYnNvbHV0ZT11LmFycm93TWFya2VyQWJzb2x1dGUsbWEodS5naXQpLGJhKGksdCwhMSk7YnJlYWs7Y2FzZSJmbG93Y2hhcnQiOnUuZmxvd2NoYXJ0LmFycm93TWFya2VyQWJzb2x1dGU9dS5hcnJvd01hcmtlckFic29sdXRlLGdlKHUuZmxvd2NoYXJ0KSx2ZShpLHQsITEpO2JyZWFrO2Nhc2UiZmxvd2NoYXJ0LXYyIjp1LmZsb3djaGFydC5hcnJvd01hcmtlckFic29sdXRlPXUuYXJyb3dNYXJrZXJBYnNvbHV0ZSxPbih1LmZsb3djaGFydCksRG4oaSx0LCExKTticmVhaztjYXNlInNlcXVlbmNlIjp1LnNlcXVlbmNlLmFycm93TWFya2VyQWJzb2x1dGU9dS5hcnJvd01hcmtlckFic29sdXRlLHUuc2VxdWVuY2VEaWFncmFtPyh2ci5zZXRDb25mKE9iamVjdC5hc3NpZ24odS5zZXF1ZW5jZSx1LnNlcXVlbmNlRGlhZ3JhbSkpLGNvbnNvbGUuZXJyb3IoImBtZXJtYWlkIGNvbmZpZy5zZXF1ZW5jZURpYWdyYW1gIGhhcyBiZWVuIHJlbmFtZWQgdG8gYGNvbmZpZy5zZXF1ZW5jZWAuIFBsZWFzZSB1cGRhdGUgeW91ciBtZXJtYWlkIGNvbmZpZy4iKSk6dnIuc2V0Q29uZih1LnNlcXVlbmNlKSx2ci5kcmF3KGksdCk7YnJlYWs7Y2FzZSJnYW50dCI6dS5nYW50dC5hcnJvd01hcmtlckFic29sdXRlPXUuYXJyb3dNYXJrZXJBYnNvbHV0ZSxLcih1LmdhbnR0KSx0aShpLHQpO2JyZWFrO2Nhc2UiY2xhc3MiOnUuY2xhc3MuYXJyb3dNYXJrZXJBYnNvbHV0ZT11LmFycm93TWFya2VyQWJzb2x1dGUsb2kodS5jbGFzcyksc2koaSx0KTticmVhaztjYXNlImNsYXNzRGlhZ3JhbSI6dS5jbGFzcy5hcnJvd01hcmtlckFic29sdXRlPXUuYXJyb3dNYXJrZXJBYnNvbHV0ZSx1aSh1LmNsYXNzKSxsaShpLHQpO2JyZWFrO2Nhc2Uic3RhdGUiOnUuY2xhc3MuYXJyb3dNYXJrZXJBYnNvbHV0ZT11LmFycm93TWFya2VyQWJzb2x1dGUsSWkodS5zdGF0ZSksamkoaSx0KTticmVhaztjYXNlInN0YXRlRGlhZ3JhbSI6dS5jbGFzcy5hcnJvd01hcmtlckFic29sdXRlPXUuYXJyb3dNYXJrZXJBYnNvbHV0ZSxXaSh1LnN0YXRlKSxWaShpLHQpO2JyZWFrO2Nhc2UiaW5mbyI6dS5jbGFzcy5hcnJvd01hcmtlckFic29sdXRlPXUuYXJyb3dNYXJrZXJBYnNvbHV0ZSxDYSh1LmNsYXNzKSxTYShpLHQsYy52ZXJzaW9uKTticmVhaztjYXNlInBpZSI6dS5jbGFzcy5hcnJvd01hcmtlckFic29sdXRlPXUuYXJyb3dNYXJrZXJBYnNvbHV0ZSxJYSh1LnBpZSksamEoaSx0LGMudmVyc2lvbik7YnJlYWs7Y2FzZSJlciI6SmEodS5lciksUWEoaSx0LGMudmVyc2lvbik7YnJlYWs7Y2FzZSJqb3VybmV5IjpBbyh1LmpvdXJuZXkpLE1vKGksdCxjLnZlcnNpb24pfX1jYXRjaChlKXt0aHJvdyBPYSh0LGMudmVyc2lvbiksZX1PYmplY3Qocy5zZWxlY3QpKCdbaWQ9IicuY29uY2F0KHQsJyJdJykpLnNlbGVjdEFsbCgiZm9yZWlnbm9iamVjdCA+ICoiKS5hdHRyKCJ4bWxucyIsImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiKTt2YXIgaz1PYmplY3Qocy5zZWxlY3QpKCIjZCIrdCkubm9kZSgpLmlubmVySFRNTDtpZihmLmRlYnVnKCJjbmYuYXJyb3dNYXJrZXJBYnNvbHV0ZSIsdS5hcnJvd01hcmtlckFic29sdXRlKSx1LmFycm93TWFya2VyQWJzb2x1dGUmJiJmYWxzZSIhPT11LmFycm93TWFya2VyQWJzb2x1dGV8fChrPWsucmVwbGFjZSgvbWFya2VyLWVuZD0idXJsXCguKj8jL2csJ21hcmtlci1lbmQ9InVybCgjJywiZyIpKSxrPWZ1bmN0aW9uKHQpe3ZhciBlPXQ7cmV0dXJuIGU9KGU9KGU9ZS5yZXBsYWNlKC/vrILCsMKwL2csKGZ1bmN0aW9uKCl7cmV0dXJuIiYjIn0pKSkucmVwbGFjZSgv76yCwrAvZywoZnVuY3Rpb24oKXtyZXR1cm4iJiJ9KSkpLnJlcGxhY2UoL8K2w58vZywoZnVuY3Rpb24oKXtyZXR1cm4iOyJ9KSl9KGspLHZvaWQgMCE9PW4pc3dpdGNoKHApe2Nhc2UiZmxvd2NoYXJ0IjpjYXNlImZsb3djaGFydC12MiI6bihrLEh0LmJpbmRGdW5jdGlvbnMpO2JyZWFrO2Nhc2UiZ2FudHQiOm4oayxYci5iaW5kRnVuY3Rpb25zKTticmVhaztjYXNlImNsYXNzIjpjYXNlImNsYXNzRGlhZ3JhbSI6bihrLHJuLmJpbmRGdW5jdGlvbnMpO2JyZWFrO2RlZmF1bHQ6bihrKX1lbHNlIGYuZGVidWcoIkNCID0gdW5kZWZpbmVkISIpO3ZhciB3PU9iamVjdChzLnNlbGVjdCkoIiNkIit0KS5ub2RlKCk7cmV0dXJuIG51bGwhPT13JiYiZnVuY3Rpb24iPT10eXBlb2Ygdy5yZW1vdmUmJk9iamVjdChzLnNlbGVjdCkoIiNkIit0KS5ub2RlKCkucmVtb3ZlKCksa30scGFyc2U6ZnVuY3Rpb24odCl7dmFyIGU9Vy5kZXRlY3RJbml0KHQpO2UmJmYuZGVidWcoInJlaW5pdCAiLGUpO3ZhciBuLHI9Vy5kZXRlY3RUeXBlKHQpO3N3aXRjaChmLmRlYnVnKCJUeXBlICIrcikscil7Y2FzZSJnaXQiOihuPXNhLmEpLnBhcnNlci55eT1hYTticmVhaztjYXNlImZsb3djaGFydCI6Y2FzZSJmbG93Y2hhcnQtdjIiOkh0LmNsZWFyKCksKG49cXQuYSkucGFyc2VyLnl5PUh0O2JyZWFrO2Nhc2Uic2VxdWVuY2UiOihuPXpuLmEpLnBhcnNlci55eT1ycjticmVhaztjYXNlImdhbnR0Ijoobj1ici5hKS5wYXJzZXIueXk9WHI7YnJlYWs7Y2FzZSJjbGFzcyI6Y2FzZSJjbGFzc0RpYWdyYW0iOihuPW5pLmEpLnBhcnNlci55eT1ybjticmVhaztjYXNlInN0YXRlIjpjYXNlInN0YXRlRGlhZ3JhbSI6KG49U2kuYSkucGFyc2VyLnl5PVRpO2JyZWFrO2Nhc2UiaW5mbyI6Zi5kZWJ1ZygiaW5mbyBpbmZvIGluZm8iKSwobj1FYS5hKS5wYXJzZXIueXk9a2E7YnJlYWs7Y2FzZSJwaWUiOmYuZGVidWcoInBpZSIpLChuPUZhLmEpLnBhcnNlci55eT1CYTticmVhaztjYXNlImVyIjpmLmRlYnVnKCJlciIpLChuPVdhLmEpLnBhcnNlci55eT1VYTticmVhaztjYXNlImpvdXJuZXkiOmYuZGVidWcoIkpvdXJuZXkiKSwobj10by5hKS5wYXJzZXIueXk9Y299cmV0dXJuIG4ucGFyc2VyLnl5LmdyYXBoVHlwZT1yLG4ucGFyc2VyLnl5LnBhcnNlRXJyb3I9ZnVuY3Rpb24odCxlKXt0aHJvd3tzdHI6dCxoYXNoOmV9fSxuLnBhcnNlKHQpLG59LHBhcnNlRGlyZWN0aXZlOmZ1bmN0aW9uKHQsZSxuLHIpe3RyeXtpZih2b2lkIDAhPT1lKXN3aXRjaChlPWUudHJpbSgpLG4pe2Nhc2Uib3Blbl9kaXJlY3RpdmUiOlBvPXt9O2JyZWFrO2Nhc2UidHlwZV9kaXJlY3RpdmUiOlBvLnR5cGU9ZS50b0xvd2VyQ2FzZSgpO2JyZWFrO2Nhc2UiYXJnX2RpcmVjdGl2ZSI6UG8uYXJncz1KU09OLnBhcnNlKGUpO2JyZWFrO2Nhc2UiY2xvc2VfZGlyZWN0aXZlIjpJbyh0LFBvLHIpLFBvPW51bGx9fWNhdGNoKHQpe2YuZXJyb3IoIkVycm9yIHdoaWxlIHJlbmRlcmluZyBzZXF1ZW5jZURpYWdyYW0gZGlyZWN0aXZlOiAiLmNvbmNhdChlLCIgamlzb24gY29udGV4dDogIikuY29uY2F0KG4pKSxmLmVycm9yKHQubWVzc2FnZSl9fSxpbml0aWFsaXplOmZ1bmN0aW9uKHQpe3QmJnQuZm9udEZhbWlseSYmKHQudGhlbWVWYXJpYWJsZXMmJnQudGhlbWVWYXJpYWJsZXMuZm9udEZhbWlseXx8KHQudGhlbWVWYXJpYWJsZXM9e2ZvbnRGYW1pbHk6dC5mb250RmFtaWx5fSkpLGZ0PVAoe30sdCksdCYmdC50aGVtZSYmbHRbdC50aGVtZV0/dC50aGVtZVZhcmlhYmxlcz1sdFt0LnRoZW1lXS5nZXRUaGVtZVZhcmlhYmxlcyh0LnRoZW1lVmFyaWFibGVzKTp0JiYodC50aGVtZVZhcmlhYmxlcz1sdC5kZWZhdWx0LmdldFRoZW1lVmFyaWFibGVzKHQudGhlbWVWYXJpYWJsZXMpKTt2YXIgZT0ib2JqZWN0Ij09PUZvKHQpP2Z1bmN0aW9uKHQpe3JldHVybiBndD1QKHt9LHB0KSxndD1QKGd0LHQpLHQudGhlbWUmJihndC50aGVtZVZhcmlhYmxlcz1sdFt0LnRoZW1lXS5nZXRUaGVtZVZhcmlhYmxlcyh0LnRoZW1lVmFyaWFibGVzKSksdnQ9bXQoZ3QseXQpLGd0fSh0KTpidCgpO2pvKGUpLGQoZS5sb2dMZXZlbCl9LHJlaW5pdGlhbGl6ZTpSbyxnZXRDb25maWc6eHQsc2V0Q29uZmlnOmZ1bmN0aW9uKHQpe3JldHVybiBQKHZ0LHQpLHh0KCl9LGdldFNpdGVDb25maWc6YnQsdXBkYXRlU2l0ZUNvbmZpZzpmdW5jdGlvbih0KXtyZXR1cm4gZ3Q9UChndCx0KSxtdChndCx5dCksZ3R9LHJlc2V0OmZ1bmN0aW9uKCl7d3QoKX0sZ2xvYmFsUmVzZXQ6ZnVuY3Rpb24oKXt3dCgpLGpvKHh0KCkpfSxkZWZhdWx0Q29uZmlnOnB0fSk7ZCh4dCgpLmxvZ0xldmVsKSx3dCh4dCgpKTt2YXIgem89WW8sVW89ZnVuY3Rpb24oKXskby5zdGFydE9uTG9hZD96by5nZXRDb25maWcoKS5zdGFydE9uTG9hZCYmJG8uaW5pdCgpOnZvaWQgMD09PSRvLnN0YXJ0T25Mb2FkJiYoZi5kZWJ1ZygiSW4gc3RhcnQsIG5vIGNvbmZpZyIpLHpvLmdldENvbmZpZygpLnN0YXJ0T25Mb2FkJiYkby5pbml0KCkpfTsidW5kZWZpbmVkIiE9dHlwZW9mIGRvY3VtZW50JiYKLyohCiAgICogV2FpdCBmb3IgZG9jdW1lbnQgbG9hZGVkIGJlZm9yZSBzdGFydGluZyB0aGUgZXhlY3V0aW9uCiAgICovCndpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJsb2FkIiwoZnVuY3Rpb24oKXtVbygpfSksITEpO3ZhciAkbz17c3RhcnRPbkxvYWQ6ITAsaHRtbExhYmVsczohMCxtZXJtYWlkQVBJOnpvLHBhcnNlOnpvLnBhcnNlLHJlbmRlcjp6by5yZW5kZXIsaW5pdDpmdW5jdGlvbigpe3ZhciB0LGUsbixyPXRoaXMsYT16by5nZXRDb25maWcoKTthcmd1bWVudHMubGVuZ3RoPj0yPygKLyohIHNlcXVlbmNlIGNvbmZpZyB3YXMgcGFzc2VkIGFzICMxICovCnZvaWQgMCE9PWFyZ3VtZW50c1swXSYmKCRvLnNlcXVlbmNlQ29uZmlnPWFyZ3VtZW50c1swXSksdD1hcmd1bWVudHNbMV0pOnQ9YXJndW1lbnRzWzBdLCJmdW5jdGlvbiI9PXR5cGVvZiBhcmd1bWVudHNbYXJndW1lbnRzLmxlbmd0aC0xXT8oZT1hcmd1bWVudHNbYXJndW1lbnRzLmxlbmd0aC0xXSxmLmRlYnVnKCJDYWxsYmFjayBmdW5jdGlvbiBmb3VuZCIpKTp2b2lkIDAhPT1hLm1lcm1haWQmJigiZnVuY3Rpb24iPT10eXBlb2YgYS5tZXJtYWlkLmNhbGxiYWNrPyhlPWEubWVybWFpZC5jYWxsYmFjayxmLmRlYnVnKCJDYWxsYmFjayBmdW5jdGlvbiBmb3VuZCIpKTpmLmRlYnVnKCJObyBDYWxsYmFjayBmdW5jdGlvbiBmb3VuZCIpKSx0PXZvaWQgMD09PXQ/ZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgiLm1lcm1haWQiKToic3RyaW5nIj09dHlwZW9mIHQ/ZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCh0KTp0IGluc3RhbmNlb2Ygd2luZG93Lk5vZGU/W3RdOnQsZi5kZWJ1ZygiU3RhcnQgT24gTG9hZCBiZWZvcmU6ICIrJG8uc3RhcnRPbkxvYWQpLHZvaWQgMCE9PSRvLnN0YXJ0T25Mb2FkJiYoZi5kZWJ1ZygiU3RhcnQgT24gTG9hZCBpbm5lcjogIiskby5zdGFydE9uTG9hZCksem8udXBkYXRlU2l0ZUNvbmZpZyh7c3RhcnRPbkxvYWQ6JG8uc3RhcnRPbkxvYWR9KSksdm9pZCAwIT09JG8uZ2FudHRDb25maWcmJnpvLnVwZGF0ZVNpdGVDb25maWcoe2dhbnR0OiRvLmdhbnR0Q29uZmlnfSk7Zm9yKHZhciBvPWZ1bmN0aW9uKGEpe3ZhciBvPXRbYV07Ci8qISBDaGVjayBpZiBwcmV2aW91c2x5IHByb2Nlc3NlZCAqL2lmKG8uZ2V0QXR0cmlidXRlKCJkYXRhLXByb2Nlc3NlZCIpKXJldHVybiJjb250aW51ZSI7by5zZXRBdHRyaWJ1dGUoImRhdGEtcHJvY2Vzc2VkIiwhMCk7dmFyIHM9Im1lcm1haWQtIi5jb25jYXQoRGF0ZS5ub3coKSk7bj1pKG49by5pbm5lckhUTUwpLnRyaW0oKS5yZXBsYWNlKC88YnJccypcLz8+L2dpLCI8YnIvPiIpO3ZhciBjPVcuZGV0ZWN0SW5pdChuKTtjJiZmLmRlYnVnKCJEZXRlY3RlZCBlYXJseSByZWluaXQ6ICIsYyk7dHJ5e3pvLnJlbmRlcihzLG4sKGZ1bmN0aW9uKHQsbil7by5pbm5lckhUTUw9dCx2b2lkIDAhPT1lJiZlKHMpLG4mJm4obyl9KSxvKX1jYXRjaCh0KXtmLndhcm4oIlN5bnRheCBFcnJvciByZW5kZXJpbmciKSxmLndhcm4odCksci5wYXJzZUVycm9yJiZyLnBhcnNlRXJyb3IodCl9fSxzPTA7czx0Lmxlbmd0aDtzKyspbyhzKX0saW5pdGlhbGl6ZTpmdW5jdGlvbih0KXt2b2lkIDAhPT10Lm1lcm1haWQmJih2b2lkIDAhPT10Lm1lcm1haWQuc3RhcnRPbkxvYWQmJigkby5zdGFydE9uTG9hZD10Lm1lcm1haWQuc3RhcnRPbkxvYWQpLHZvaWQgMCE9PXQubWVybWFpZC5odG1sTGFiZWxzJiYoJG8uaHRtbExhYmVscz10Lm1lcm1haWQuaHRtbExhYmVscykpLHpvLmluaXRpYWxpemUodCl9LGNvbnRlbnRMb2FkZWQ6VW99O2UuZGVmYXVsdD0kb31dKS5kZWZhdWx0fSkpOwovLyMgc291cmNlTWFwcGluZ1VSTD1tZXJtYWlkLm1pbi5qcy5tYXA=`;