SHARE
TWEET

Untitled

a guest Aug 26th, 2019 93 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. {
  2.  "cells": [
  3.   {
  4.    "cell_type": "code",
  5.    "execution_count": 441,
  6.    "metadata": {},
  7.    "outputs": [
  8.     {
  9.      "data": {
  10.       "text/html": [
  11.        "<div style=\"width:100%;\"><div style=\"position:relative;width:100%;height:0;padding-bottom:60%;\"><iframe src=\"data:text/html;charset=utf-8;base64,PCFET0NUWVBFIGh0bWw+CjxoZWFkPiAgICAKICAgIDxtZXRhIGh0dHAtZXF1aXY9ImNvbnRlbnQtdHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiAvPgogICAgCiAgICAgICAgPHNjcmlwdD4KICAgICAgICAgICAgTF9OT19UT1VDSCA9IGZhbHNlOwogICAgICAgICAgICBMX0RJU0FCTEVfM0QgPSBmYWxzZTsKICAgICAgICA8L3NjcmlwdD4KICAgIAogICAgPHNjcmlwdCBzcmM9Imh0dHBzOi8vY2RuLmpzZGVsaXZyLm5ldC9ucG0vbGVhZmxldEAxLjUuMS9kaXN0L2xlYWZsZXQuanMiPjwvc2NyaXB0PgogICAgPHNjcmlwdCBzcmM9Imh0dHBzOi8vY29kZS5qcXVlcnkuY29tL2pxdWVyeS0xLjEyLjQubWluLmpzIj48L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSJodHRwczovL21heGNkbi5ib290c3RyYXBjZG4uY29tL2Jvb3RzdHJhcC8zLjIuMC9qcy9ib290c3RyYXAubWluLmpzIj48L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSJodHRwczovL2NkbmpzLmNsb3VkZmxhcmUuY29tL2FqYXgvbGlicy9MZWFmbGV0LmF3ZXNvbWUtbWFya2Vycy8yLjAuMi9sZWFmbGV0LmF3ZXNvbWUtbWFya2Vycy5qcyI+PC9zY3JpcHQ+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Imh0dHBzOi8vY2RuLmpzZGVsaXZyLm5ldC9ucG0vbGVhZmxldEAxLjUuMS9kaXN0L2xlYWZsZXQuY3NzIi8+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Imh0dHBzOi8vbWF4Y2RuLmJvb3RzdHJhcGNkbi5jb20vYm9vdHN0cmFwLzMuMi4wL2Nzcy9ib290c3RyYXAubWluLmNzcyIvPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL21heGNkbi5ib290c3RyYXBjZG4uY29tL2Jvb3RzdHJhcC8zLjIuMC9jc3MvYm9vdHN0cmFwLXRoZW1lLm1pbi5jc3MiLz4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iaHR0cHM6Ly9tYXhjZG4uYm9vdHN0cmFwY2RuLmNvbS9mb250LWF3ZXNvbWUvNC42LjMvY3NzL2ZvbnQtYXdlc29tZS5taW4uY3NzIi8+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Imh0dHBzOi8vY2RuanMuY2xvdWRmbGFyZS5jb20vYWpheC9saWJzL0xlYWZsZXQuYXdlc29tZS1tYXJrZXJzLzIuMC4yL2xlYWZsZXQuYXdlc29tZS1tYXJrZXJzLmNzcyIvPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL3Jhd2Nkbi5naXRoYWNrLmNvbS9weXRob24tdmlzdWFsaXphdGlvbi9mb2xpdW0vbWFzdGVyL2ZvbGl1bS90ZW1wbGF0ZXMvbGVhZmxldC5hd2Vzb21lLnJvdGF0ZS5jc3MiLz4KICAgIDxzdHlsZT5odG1sLCBib2R5IHt3aWR0aDogMTAwJTtoZWlnaHQ6IDEwMCU7bWFyZ2luOiAwO3BhZGRpbmc6IDA7fTwvc3R5bGU+CiAgICA8c3R5bGU+I21hcCB7cG9zaXRpb246YWJzb2x1dGU7dG9wOjA7Ym90dG9tOjA7cmlnaHQ6MDtsZWZ0OjA7fTwvc3R5bGU+CiAgICAKICAgICAgICAgICAgPG1ldGEgbmFtZT0idmlld3BvcnQiIGNvbnRlbnQ9IndpZHRoPWRldmljZS13aWR0aCwKICAgICAgICAgICAgICAgIGluaXRpYWwtc2NhbGU9MS4wLCBtYXhpbXVtLXNjYWxlPTEuMCwgdXNlci1zY2FsYWJsZT1ubyIgLz4KICAgICAgICAgICAgPHN0eWxlPgogICAgICAgICAgICAgICAgI21hcF9kZGNiNWI0ZjhlM2I0N2Y4OGI5NzUwN2ZjYWEyM2Q4MSB7CiAgICAgICAgICAgICAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgICAgICAgICAgICAgIHdpZHRoOiAxMDAuMCU7CiAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiAxMDAuMCU7CiAgICAgICAgICAgICAgICAgICAgbGVmdDogMC4wJTsKICAgICAgICAgICAgICAgICAgICB0b3A6IDAuMCU7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIDwvc3R5bGU+CiAgICAgICAgCjwvaGVhZD4KPGJvZHk+ICAgIAogICAgCiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZvbGl1bS1tYXAiIGlkPSJtYXBfZGRjYjViNGY4ZTNiNDdmODhiOTc1MDdmY2FhMjNkODEiID48L2Rpdj4KICAgICAgICAKPC9ib2R5Pgo8c2NyaXB0PiAgICAKICAgIAogICAgICAgICAgICB2YXIgbWFwX2RkY2I1YjRmOGUzYjQ3Zjg4Yjk3NTA3ZmNhYTIzZDgxID0gTC5tYXAoCiAgICAgICAgICAgICAgICAibWFwX2RkY2I1YjRmOGUzYjQ3Zjg4Yjk3NTA3ZmNhYTIzZDgxIiwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBjZW50ZXI6IFswLCAwXSwKICAgICAgICAgICAgICAgICAgICBjcnM6IEwuQ1JTLkVQU0czODU3LAogICAgICAgICAgICAgICAgICAgIHpvb206IDEsCiAgICAgICAgICAgICAgICAgICAgem9vbUNvbnRyb2w6IHRydWUsCiAgICAgICAgICAgICAgICAgICAgcHJlZmVyQ2FudmFzOiBmYWxzZSwKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgKTsKCiAgICAgICAgICAgIAoKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgdGlsZV9sYXllcl8yZjNmZmIyYjU0NjY0ZGUzOWNiZTkyMDQyZmM5N2U2MSA9IEwudGlsZUxheWVyKAogICAgICAgICAgICAgICAgImh0dHBzOi8ve3N9LnRpbGUub3BlbnN0cmVldG1hcC5vcmcve3p9L3t4fS97eX0ucG5nIiwKICAgICAgICAgICAgICAgIHsiYXR0cmlidXRpb24iOiAiRGF0YSBieSBcdTAwMjZjb3B5OyBcdTAwM2NhIGhyZWY9XCJodHRwOi8vb3BlbnN0cmVldG1hcC5vcmdcIlx1MDAzZU9wZW5TdHJlZXRNYXBcdTAwM2MvYVx1MDAzZSwgdW5kZXIgXHUwMDNjYSBocmVmPVwiaHR0cDovL3d3dy5vcGVuc3RyZWV0bWFwLm9yZy9jb3B5cmlnaHRcIlx1MDAzZU9EYkxcdTAwM2MvYVx1MDAzZS4iLCAiZGV0ZWN0UmV0aW5hIjogZmFsc2UsICJtYXhOYXRpdmVab29tIjogMTgsICJtYXhab29tIjogMTgsICJtaW5ab29tIjogMCwgIm5vV3JhcCI6IGZhbHNlLCAib3BhY2l0eSI6IDEsICJzdWJkb21haW5zIjogImFiYyIsICJ0bXMiOiBmYWxzZX0KICAgICAgICAgICAgKS5hZGRUbyhtYXBfZGRjYjViNGY4ZTNiNDdmODhiOTc1MDdmY2FhMjNkODEpOwogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBtYXJrZXJfYzE0YTNiNmQxNTNjNDJjYWFlMmIwODc0YzJmYTVjZjUgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs1MS41MDczMjE5LCAtMC4xMjc2NDc0XSwKICAgICAgICAgICAgICAgIHt9CiAgICAgICAgICAgICkuYWRkVG8obWFwX2RkY2I1YjRmOGUzYjQ3Zjg4Yjk3NTA3ZmNhYTIzZDgxKTsKICAgICAgICAKICAgIAogICAgICAgIHZhciBwb3B1cF9jZDJiYzcyOTg5NWM0MDg1YjViMGExNWNjNTdlMmYzNyA9IEwucG9wdXAoeyJtYXhXaWR0aCI6ICIxMDAlIn0pOwoKICAgICAgICAKICAgICAgICAgICAgdmFyIGh0bWxfMzE1MjQxMjZkZWM5NGJlMWJiMjYwM2EzZTQyNWIzZmEgPSAkKGA8ZGl2IGlkPSJodG1sXzMxNTI0MTI2ZGVjOTRiZTFiYjI2MDNhM2U0MjViM2ZhIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5UaGUgUmV0dXJuIG9mIFNoZXJsb2NrIEhvbG1lcyxMb25kb248L2Rpdj5gKVswXTsKICAgICAgICAgICAgcG9wdXBfY2QyYmM3Mjk4OTVjNDA4NWI1YjBhMTVjYzU3ZTJmMzcuc2V0Q29udGVudChodG1sXzMxNTI0MTI2ZGVjOTRiZTFiYjI2MDNhM2U0MjViM2ZhKTsKICAgICAgICAKCiAgICAgICAgbWFya2VyX2MxNGEzYjZkMTUzYzQyY2FhZTJiMDg3NGMyZmE1Y2Y1LmJpbmRQb3B1cChwb3B1cF9jZDJiYzcyOTg5NWM0MDg1YjViMGExNWNjNTdlMmYzNykKICAgICAgICA7CgogICAgICAgIAogICAgCiAgICAKICAgICAgICAgICAgdmFyIG1hcmtlcl9mNTUzZTQwODczMWY0YzQ5OGIyNWRmMGQ2ZmZiZTRmMSA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQ1LjQzNzE5MDgsIDEyLjMzNDU4OThdLAogICAgICAgICAgICAgICAge30KICAgICAgICAgICAgKS5hZGRUbyhtYXBfZGRjYjViNGY4ZTNiNDdmODhiOTc1MDdmY2FhMjNkODEpOwogICAgICAgIAogICAgCiAgICAgICAgdmFyIHBvcHVwXzk4NGRmMDYzNzBiMTRiYjE5YjgyZDQ2YTg1ZDdkYjA4ID0gTC5wb3B1cCh7Im1heFdpZHRoIjogIjEwMCUifSk7CgogICAgICAgIAogICAgICAgICAgICB2YXIgaHRtbF84M2U4M2RlMjg3YWY0OTM1YmIyMGVjNjRkMGFlMzlkZiA9ICQoYDxkaXYgaWQ9Imh0bWxfODNlODNkZTI4N2FmNDkzNWJiMjBlYzY0ZDBhZTM5ZGYiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlRoZSBIYXVudGVkIEhvdGVsOiBBIE15c3Rlcnkgb2YgTW9kZXJuIFZlbmljZSxWZW5pY2U8L2Rpdj5gKVswXTsKICAgICAgICAgICAgcG9wdXBfOTg0ZGYwNjM3MGIxNGJiMTliODJkNDZhODVkN2RiMDguc2V0Q29udGVudChodG1sXzgzZTgzZGUyODdhZjQ5MzViYjIwZWM2NGQwYWUzOWRmKTsKICAgICAgICAKCiAgICAgICAgbWFya2VyX2Y1NTNlNDA4NzMxZjRjNDk4YjI1ZGYwZDZmZmJlNGYxLmJpbmRQb3B1cChwb3B1cF85ODRkZjA2MzcwYjE0YmIxOWI4MmQ0NmE4NWQ3ZGIwOCkKICAgICAgICA7CgogICAgICAgIAogICAgCiAgICAKICAgICAgICAgICAgdmFyIG1hcmtlcl81ODcwODgzODA3NzI0MTEyOTAwMzQ0MjlmZTE3ZmEwOCA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzUxLjUwNzMyMTksIC0wLjEyNzY0NzRdLAogICAgICAgICAgICAgICAge30KICAgICAgICAgICAgKS5hZGRUbyhtYXBfZGRjYjViNGY4ZTNiNDdmODhiOTc1MDdmY2FhMjNkODEpOwogICAgICAgIAogICAgCiAgICAgICAgdmFyIHBvcHVwXzE1ZTg5ZWY3NWE4ZDQ0YmZhZDllOWYyYzQyNDVlYTI4ID0gTC5wb3B1cCh7Im1heFdpZHRoIjogIjEwMCUifSk7CgogICAgICAgIAogICAgICAgICAgICB2YXIgaHRtbF8xNmE5NmExMDY4MGY0NWQ4OTRlNTViYjRhMjA3MWEyZCA9ICQoYDxkaXYgaWQ9Imh0bWxfMTZhOTZhMTA2ODBmNDVkODk0ZTU1YmI0YTIwNzFhMmQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlRoZSBJbm5vY2VuY2Ugb2YgRmF0aGVyIEJyb3duLExvbmRvbjwvZGl2PmApWzBdOwogICAgICAgICAgICBwb3B1cF8xNWU4OWVmNzVhOGQ0NGJmYWQ5ZTlmMmM0MjQ1ZWEyOC5zZXRDb250ZW50KGh0bWxfMTZhOTZhMTA2ODBmNDVkODk0ZTU1YmI0YTIwNzFhMmQpOwogICAgICAgIAoKICAgICAgICBtYXJrZXJfNTg3MDg4MzgwNzcyNDExMjkwMDM0NDI5ZmUxN2ZhMDguYmluZFBvcHVwKHBvcHVwXzE1ZTg5ZWY3NWE4ZDQ0YmZhZDllOWYyYzQyNDVlYTI4KQogICAgICAgIDsKCiAgICAgICAgCiAgICAKICAgIAogICAgICAgICAgICB2YXIgbWFya2VyX2I2NTI1YWI0MmU5MTQzNzVhY2Q3MThhOWFiZjBlYTQ2ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMzguOTU5MjIwMSwgLTg1Ljg5MDI1NDddLAogICAgICAgICAgICAgICAge30KICAgICAgICAgICAgKS5hZGRUbyhtYXBfZGRjYjViNGY4ZTNiNDdmODhiOTc1MDdmY2FhMjNkODEpOwogICAgICAgIAogICAgCiAgICAgICAgdmFyIHBvcHVwXzY5NGU2Mjc0YmJiODRhM2NhN2E0OGE3OGMzOTIyM2IzID0gTC5wb3B1cCh7Im1heFdpZHRoIjogIjEwMCUifSk7CgogICAgICAgIAogICAgICAgICAgICB2YXIgaHRtbF81OGY1ZDlhY2EyNTQ0YmM2OGY3NWVjODNjYmU4MWExZCA9ICQoYDxkaXYgaWQ9Imh0bWxfNThmNWQ5YWNhMjU0NGJjNjhmNzVlYzgzY2JlODFhMWQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlRoZSBXaXNkb20gb2YgRmF0aGVyIEJyb3duLFNleW1vdXI8L2Rpdj5gKVswXTsKICAgICAgICAgICAgcG9wdXBfNjk0ZTYyNzRiYmI4NGEzY2E3YTQ4YTc4YzM5MjIzYjMuc2V0Q29udGVudChodG1sXzU4ZjVkOWFjYTI1NDRiYzY4Zjc1ZWM4M2NiZTgxYTFkKTsKICAgICAgICAKCiAgICAgICAgbWFya2VyX2I2NTI1YWI0MmU5MTQzNzVhY2Q3MThhOWFiZjBlYTQ2LmJpbmRQb3B1cChwb3B1cF82OTRlNjI3NGJiYjg0YTNjYTdhNDhhNzhjMzkyMjNiMykKICAgICAgICA7CgogICAgICAgIAogICAgCiAgICAKICAgICAgICAgICAgdmFyIG1hcmtlcl83Mjc4YjNjMmEzMDI0ODAwYmEzYmIyZjMwMGEzYTRhNCA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzUxLjUwNzMyMTksIC0wLjEyNzY0NzRdLAogICAgICAgICAgICAgICAge30KICAgICAgICAgICAgKS5hZGRUbyhtYXBfZGRjYjViNGY4ZTNiNDdmODhiOTc1MDdmY2FhMjNkODEpOwogICAgICAgIAogICAgCiAgICAgICAgdmFyIHBvcHVwX2EyYzU4OTllZTMxOTRjNjBiMmNmZjI4MTFkOWNjZmRkID0gTC5wb3B1cCh7Im1heFdpZHRoIjogIjEwMCUifSk7CgogICAgICAgIAogICAgICAgICAgICB2YXIgaHRtbF8xZjJlYjNmZTEwZjU0MTA1YmIxNjcyZjJiMjg1MDIyZiA9ICQoYDxkaXYgaWQ9Imh0bWxfMWYyZWIzZmUxMGY1NDEwNWJiMTY3MmYyYjI4NTAyMmYiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkEgU3R1ZHkgaW4gU2NhcmxldCxMb25kb248L2Rpdj5gKVswXTsKICAgICAgICAgICAgcG9wdXBfYTJjNTg5OWVlMzE5NGM2MGIyY2ZmMjgxMWQ5Y2NmZGQuc2V0Q29udGVudChodG1sXzFmMmViM2ZlMTBmNTQxMDViYjE2NzJmMmIyODUwMjJmKTsKICAgICAgICAKCiAgICAgICAgbWFya2VyXzcyNzhiM2MyYTMwMjQ4MDBiYTNiYjJmMzAwYTNhNGE0LmJpbmRQb3B1cChwb3B1cF9hMmM1ODk5ZWUzMTk0YzYwYjJjZmYyODExZDljY2ZkZCkKICAgICAgICA7CgogICAgICAgIAogICAgCiAgICAKICAgICAgICAgICAgdmFyIG1hcmtlcl9mYjg3N2U5NTRhZDM0ZjU4ODViODgyNTc4YTYxZTVjMyA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQ4Ljg1NjYxMDEsIDIuMzUxNDk5Ml0sCiAgICAgICAgICAgICAgICB7fQogICAgICAgICAgICApLmFkZFRvKG1hcF9kZGNiNWI0ZjhlM2I0N2Y4OGI5NzUwN2ZjYWEyM2Q4MSk7CiAgICAgICAgCiAgICAKICAgICAgICB2YXIgcG9wdXBfYjk4ZTg0ZGExZDE4NGNiNDgxYzRhYmRlOTA0NzcxMDEgPSBMLnBvcHVwKHsibWF4V2lkdGgiOiAiMTAwJSJ9KTsKCiAgICAgICAgCiAgICAgICAgICAgIHZhciBodG1sXzAxZmQ2Mjc2YjUxNjQ5MmM4NTAzNTg2NjRhYTc4MGU1ID0gJChgPGRpdiBpZD0iaHRtbF8wMWZkNjI3NmI1MTY0OTJjODUwMzU4NjY0YWE3ODBlNSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+VGhlIENvdW50J3MgTWlsbGlvbnMsUGFyaXM8L2Rpdj5gKVswXTsKICAgICAgICAgICAgcG9wdXBfYjk4ZTg0ZGExZDE4NGNiNDgxYzRhYmRlOTA0NzcxMDEuc2V0Q29udGVudChodG1sXzAxZmQ2Mjc2YjUxNjQ5MmM4NTAzNTg2NjRhYTc4MGU1KTsKICAgICAgICAKCiAgICAgICAgbWFya2VyX2ZiODc3ZTk1NGFkMzRmNTg4NWI4ODI1NzhhNjFlNWMzLmJpbmRQb3B1cChwb3B1cF9iOThlODRkYTFkMTg0Y2I0ODFjNGFiZGU5MDQ3NzEwMSkKICAgICAgICA7CgogICAgICAgIAogICAgCiAgICAKICAgICAgICAgICAgdmFyIG1hcmtlcl84Y2ExY2NiMGM1ZmI0Y2FiOTEwZGRlMTM2OWFiMzk5MiA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQxLjAxNjIxMTIsIC03Mi4xNTkyNDQ0XSwKICAgICAgICAgICAgICAgIHt9CiAgICAgICAgICAgICkuYWRkVG8obWFwX2RkY2I1YjRmOGUzYjQ3Zjg4Yjk3NTA3ZmNhYTIzZDgxKTsKICAgICAgICAKICAgIAogICAgICAgIHZhciBwb3B1cF80NGM2NjkyZWJjM2Y0Y2YyYjA3NTYyMmVkNzEyMjI1YiA9IEwucG9wdXAoeyJtYXhXaWR0aCI6ICIxMDAlIn0pOwoKICAgICAgICAKICAgICAgICAgICAgdmFyIGh0bWxfZTM4YjM5YmRjOTQyNGRkNTk3NjM0MWY1YmJiYjZhMjUgPSAkKGA8ZGl2IGlkPSJodG1sX2UzOGIzOWJkYzk0MjRkZDU5NzYzNDFmNWJiYmI2YTI1IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5XaGVyZSBUaGVyZSdzIGEgV2lsbCxTcHJpbmdzPC9kaXY+YClbMF07CiAgICAgICAgICAgIHBvcHVwXzQ0YzY2OTJlYmMzZjRjZjJiMDc1NjIyZWQ3MTIyMjViLnNldENvbnRlbnQoaHRtbF9lMzhiMzliZGM5NDI0ZGQ1OTc2MzQxZjViYmJiNmEyNSk7CiAgICAgICAgCgogICAgICAgIG1hcmtlcl84Y2ExY2NiMGM1ZmI0Y2FiOTEwZGRlMTM2OWFiMzk5Mi5iaW5kUG9wdXAocG9wdXBfNDRjNjY5MmViYzNmNGNmMmIwNzU2MjJlZDcxMjIyNWIpCiAgICAgICAgOwoKICAgICAgICAKICAgIAogICAgCiAgICAgICAgICAgIHZhciBtYXJrZXJfMmRjMmIwMjQwNGRmNGM3Njg0ZjBmOTgzNDVmYjIwNTMgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs0OC42OTM3MjIzLCA2LjE4MzQwOTddLAogICAgICAgICAgICAgICAge30KICAgICAgICAgICAgKS5hZGRUbyhtYXBfZGRjYjViNGY4ZTNiNDdmODhiOTc1MDdmY2FhMjNkODEpOwogICAgICAgIAogICAgCiAgICAgICAgdmFyIHBvcHVwXzU2N2IwMTZhMDU1ODQ3OTlhNWU0MjliY2M4ZmY3ODVkID0gTC5wb3B1cCh7Im1heFdpZHRoIjogIjEwMCUifSk7CgogICAgICAgIAogICAgICAgICAgICB2YXIgaHRtbF8zZTg2ODU0ZDA2ZjA0ZGNhOGMzZTkzMTY5YmQ4ODVkZCA9ICQoYDxkaXYgaWQ9Imh0bWxfM2U4Njg1NGQwNmYwNGRjYThjM2U5MzE2OWJkODg1ZGQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkluIHRoZSBCaXNob3AncyBDYXJyaWFnZSxOYW5jeTwvZGl2PmApWzBdOwogICAgICAgICAgICBwb3B1cF81NjdiMDE2YTA1NTg0Nzk5YTVlNDI5YmNjOGZmNzg1ZC5zZXRDb250ZW50KGh0bWxfM2U4Njg1NGQwNmYwNGRjYThjM2U5MzE2OWJkODg1ZGQpOwogICAgICAgIAoKICAgICAgICBtYXJrZXJfMmRjMmIwMjQwNGRmNGM3Njg0ZjBmOTgzNDVmYjIwNTMuYmluZFBvcHVwKHBvcHVwXzU2N2IwMTZhMDU1ODQ3OTlhNWU0MjliY2M4ZmY3ODVkKQogICAgICAgIDsKCiAgICAgICAgCiAgICAKICAgIAogICAgICAgICAgICB2YXIgbWFya2VyXzBjZmY0NTIxM2QzMDRkNzY5ZGVlZjY2YWM2M2JlNmFiID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNTEuNTA3MzIxOSwgLTAuMTI3NjQ3NF0sCiAgICAgICAgICAgICAgICB7fQogICAgICAgICAgICApLmFkZFRvKG1hcF9kZGNiNWI0ZjhlM2I0N2Y4OGI5NzUwN2ZjYWEyM2Q4MSk7CiAgICAgICAgCiAgICAKICAgICAgICB2YXIgcG9wdXBfN2ZiNjg4ODEzNjI3NDdmMTlhMmVlMGUzNmM5NGY2NjUgPSBMLnBvcHVwKHsibWF4V2lkdGgiOiAiMTAwJSJ9KTsKCiAgICAgICAgCiAgICAgICAgICAgIHZhciBodG1sX2Y4MWY2ZDJlODUxNjQyNTg5Mjc5NzU2OGNjODJlMGM1ID0gJChgPGRpdiBpZD0iaHRtbF9mODFmNmQyZTg1MTY0MjU4OTI3OTc1NjhjYzgyZTBjNSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+VGFsZXMgb2YgVGVycm9yIGFuZCBNeXN0ZXJ5LExvbmRvbjwvZGl2PmApWzBdOwogICAgICAgICAgICBwb3B1cF83ZmI2ODg4MTM2Mjc0N2YxOWEyZWUwZTM2Yzk0ZjY2NS5zZXRDb250ZW50KGh0bWxfZjgxZjZkMmU4NTE2NDI1ODkyNzk3NTY4Y2M4MmUwYzUpOwogICAgICAgIAoKICAgICAgICBtYXJrZXJfMGNmZjQ1MjEzZDMwNGQ3NjlkZWVmNjZhYzYzYmU2YWIuYmluZFBvcHVwKHBvcHVwXzdmYjY4ODgxMzYyNzQ3ZjE5YTJlZTBlMzZjOTRmNjY1KQogICAgICAgIDsKCiAgICAgICAgCiAgICAKICAgIAogICAgICAgICAgICB2YXIgbWFya2VyX2JhNmEyMmFiMWNjNDRjM2I5YTk1ZTM5ZmYzOGNmODMzID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNDguODU2NjEwMSwgMi4zNTE0OTkyXSwKICAgICAgICAgICAgICAgIHt9CiAgICAgICAgICAgICkuYWRkVG8obWFwX2RkY2I1YjRmOGUzYjQ3Zjg4Yjk3NTA3ZmNhYTIzZDgxKTsKICAgICAgICAKICAgIAogICAgICAgIHZhciBwb3B1cF83Nzk2OWM5MWNmZDQ0NTE0OTQ4YzM4OWQwNTg2NWFjOCA9IEwucG9wdXAoeyJtYXhXaWR0aCI6ICIxMDAlIn0pOwoKICAgICAgICAKICAgICAgICAgICAgdmFyIGh0bWxfNjFmYjFkZTdjY2QzNDBlNGE1NWFjNjA0NGQ4OWZjYTEgPSAkKGA8ZGl2IGlkPSJodG1sXzYxZmIxZGU3Y2NkMzQwZTRhNTVhYzYwNDRkODlmY2ExIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5CYXJvbiBUcmlnYXVsdCdzIFZlbmdlYW5jZSxQYXJpczwvZGl2PmApWzBdOwogICAgICAgICAgICBwb3B1cF83Nzk2OWM5MWNmZDQ0NTE0OTQ4YzM4OWQwNTg2NWFjOC5zZXRDb250ZW50KGh0bWxfNjFmYjFkZTdjY2QzNDBlNGE1NWFjNjA0NGQ4OWZjYTEpOwogICAgICAgIAoKICAgICAgICBtYXJrZXJfYmE2YTIyYWIxY2M0NGMzYjlhOTVlMzlmZjM4Y2Y4MzMuYmluZFBvcHVwKHBvcHVwXzc3OTY5YzkxY2ZkNDQ1MTQ5NDhjMzg5ZDA1ODY1YWM4KQogICAgICAgIDsKCiAgICAgICAgCiAgICAKICAgIAogICAgICAgICAgICB2YXIgbWFya2VyX2M5N2FmZGU0ZmQyOTQ0NTdiN2M5MjQ4NDY4NDM0MjY1ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNDIuNjUxMTY3NCwgLTczLjc1NDk2OF0sCiAgICAgICAgICAgICAgICB7fQogICAgICAgICAgICApLmFkZFRvKG1hcF9kZGNiNWI0ZjhlM2I0N2Y4OGI5NzUwN2ZjYWEyM2Q4MSk7CiAgICAgICAgCiAgICAKICAgICAgICB2YXIgcG9wdXBfZTI1ZDQ1ZGIwMjQ2NGZlYWJjMDE2ODg4MjI2Y2YyMTUgPSBMLnBvcHVwKHsibWF4V2lkdGgiOiAiMTAwJSJ9KTsKCiAgICAgICAgCiAgICAgICAgICAgIHZhciBodG1sXzQzMTc1MWQyNDMyMzQ1MDU5MjNjN2E5N2I3M2EwZDdjID0gJChgPGRpdiBpZD0iaHRtbF80MzE3NTFkMjQzMjM0NTA1OTIzYzdhOTdiNzNhMGQ3YyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+VGhlIEFtYXRldXIgQ3JhY2tzbWFuLEFsYmFueTwvZGl2PmApWzBdOwogICAgICAgICAgICBwb3B1cF9lMjVkNDVkYjAyNDY0ZmVhYmMwMTY4ODgyMjZjZjIxNS5zZXRDb250ZW50KGh0bWxfNDMxNzUxZDI0MzIzNDUwNTkyM2M3YTk3YjczYTBkN2MpOwogICAgICAgIAoKICAgICAgICBtYXJrZXJfYzk3YWZkZTRmZDI5NDQ1N2I3YzkyNDg0Njg0MzQyNjUuYmluZFBvcHVwKHBvcHVwX2UyNWQ0NWRiMDI0NjRmZWFiYzAxNjg4ODIyNmNmMjE1KQogICAgICAgIDsKCiAgICAgICAgCiAgICAKICAgIAogICAgICAgICAgICB2YXIgbWFya2VyXzdjMmVlNGYyMDEyNjRiYTViODZkODQ1YmNjOWEzNmQ3ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNTEuNTA3MzIxOSwgLTAuMTI3NjQ3NF0sCiAgICAgICAgICAgICAgICB7fQogICAgICAgICAgICApLmFkZFRvKG1hcF9kZGNiNWI0ZjhlM2I0N2Y4OGI5NzUwN2ZjYWEyM2Q4MSk7CiAgICAgICAgCiAgICAKICAgICAgICB2YXIgcG9wdXBfOWQ3MTA5MDg2ZTg0NDhhODk1YjBkN2VjYmM1YTcxODggPSBMLnBvcHVwKHsibWF4V2lkdGgiOiAiMTAwJSJ9KTsKCiAgICAgICAgCiAgICAgICAgICAgIHZhciBodG1sX2JiMzI2YTNiOGZmNDRiYzM5YmUzYThjNGEyZjRkODNjID0gJChgPGRpdiBpZD0iaHRtbF9iYjMyNmEzYjhmZjQ0YmMzOWJlM2E4YzRhMmY0ZDgzYyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+VGhlIE1lbW9pcnMgb2YgU2hlcmxvY2sgSG9sbWVzLExvbmRvbjwvZGl2PmApWzBdOwogICAgICAgICAgICBwb3B1cF85ZDcxMDkwODZlODQ0OGE4OTViMGQ3ZWNiYzVhNzE4OC5zZXRDb250ZW50KGh0bWxfYmIzMjZhM2I4ZmY0NGJjMzliZTNhOGM0YTJmNGQ4M2MpOwogICAgICAgIAoKICAgICAgICBtYXJrZXJfN2MyZWU0ZjIwMTI2NGJhNWI4NmQ4NDViY2M5YTM2ZDcuYmluZFBvcHVwKHBvcHVwXzlkNzEwOTA4NmU4NDQ4YTg5NWIwZDdlY2JjNWE3MTg4KQogICAgICAgIDsKCiAgICAgICAgCiAgICAKICAgIAogICAgICAgICAgICB2YXIgbWFya2VyX2FlNjdmNjAxOTQ3ZjRlZTNiODFhNGM3YWUzMjEyNDZlID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMzguOTcxOTM4NCwgLTk1LjIzNTk0OTZdLAogICAgICAgICAgICAgICAge30KICAgICAgICAgICAgKS5hZGRUbyhtYXBfZGRjYjViNGY4ZTNiNDdmODhiOTc1MDdmY2FhMjNkODEpOwogICAgICAgIAogICAgCiAgICAgICAgdmFyIHBvcHVwXzEzZjE5ZjVhMjY1MjRkZTlhZTk0ZDk5ZWE0MDU3OGM3ID0gTC5wb3B1cCh7Im1heFdpZHRoIjogIjEwMCUifSk7CgogICAgICAgIAogICAgICAgICAgICB2YXIgaHRtbF9hMjk3ZDIwYjE3NmI0MmQ4OWFjNzFkZmM2ODcyMDYyZCA9ICQoYDxkaXYgaWQ9Imh0bWxfYTI5N2QyMGIxNzZiNDJkODlhYzcxZGZjNjg3MjA2MmQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlRoZSBNeXN0ZXJpb3VzIEFmZmFpciBhdCBTdHlsZXMsTGF3cmVuY2U8L2Rpdj5gKVswXTsKICAgICAgICAgICAgcG9wdXBfMTNmMTlmNWEyNjUyNGRlOWFlOTRkOTllYTQwNTc4Yzcuc2V0Q29udGVudChodG1sX2EyOTdkMjBiMTc2YjQyZDg5YWM3MWRmYzY4NzIwNjJkKTsKICAgICAgICAKCiAgICAgICAgbWFya2VyX2FlNjdmNjAxOTQ3ZjRlZTNiODFhNGM3YWUzMjEyNDZlLmJpbmRQb3B1cChwb3B1cF8xM2YxOWY1YTI2NTI0ZGU5YWU5NGQ5OWVhNDA1NzhjNykKICAgICAgICA7CgogICAgICAgIAogICAgCiAgICAKICAgICAgICAgICAgdmFyIG1hcmtlcl81MDdjYWYxN2RlMmI0ZWE3OWM1NDkxZjgzYzcxMGE0NyA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzUxLjUwNzMyMTksIC0wLjEyNzY0NzRdLAogICAgICAgICAgICAgICAge30KICAgICAgICAgICAgKS5hZGRUbyhtYXBfZGRjYjViNGY4ZTNiNDdmODhiOTc1MDdmY2FhMjNkODEpOwogICAgICAgIAogICAgCiAgICAgICAgdmFyIHBvcHVwXzcyNmM5ODg2ZDk0MDQ3MDM5OTFjMzUyMDc3ZDg0NzU4ID0gTC5wb3B1cCh7Im1heFdpZHRoIjogIjEwMCUifSk7CgogICAgICAgIAogICAgICAgICAgICB2YXIgaHRtbF9kMzIwNDY2YTQxOWU0MDg3ODc0YjAxZTc3ZDUxYTFmMiA9ICQoYDxkaXYgaWQ9Imh0bWxfZDMyMDQ2NmE0MTllNDA4Nzg3NGIwMWU3N2Q1MWExZjIiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlRoZSBTZWNyZXQgQWR2ZXJzYXJ5LExvbmRvbjwvZGl2PmApWzBdOwogICAgICAgICAgICBwb3B1cF83MjZjOTg4NmQ5NDA0NzAzOTkxYzM1MjA3N2Q4NDc1OC5zZXRDb250ZW50KGh0bWxfZDMyMDQ2NmE0MTllNDA4Nzg3NGIwMWU3N2Q1MWExZjIpOwogICAgICAgIAoKICAgICAgICBtYXJrZXJfNTA3Y2FmMTdkZTJiNGVhNzljNTQ5MWY4M2M3MTBhNDcuYmluZFBvcHVwKHBvcHVwXzcyNmM5ODg2ZDk0MDQ3MDM5OTFjMzUyMDc3ZDg0NzU4KQogICAgICAgIDsKCiAgICAgICAgCiAgICAKICAgIAogICAgICAgICAgICB2YXIgbWFya2VyXzI4ZjkzNDJkYmE0MTRkNjE4YjZhNGE0Njk4Yjk3ZjI1ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMzYuNzA5NTc4OCwgLTgxLjk3NzQ4NzhdLAogICAgICAgICAgICAgICAge30KICAgICAgICAgICAgKS5hZGRUbyhtYXBfZGRjYjViNGY4ZTNiNDdmODhiOTc1MDdmY2FhMjNkODEpOwogICAgICAgIAogICAgCiAgICAgICAgdmFyIHBvcHVwXzJhZTIxZjViMDYzNjQyYjc5MGFhNWYyMjY1ZmI3YmJhID0gTC5wb3B1cCh7Im1heFdpZHRoIjogIjEwMCUifSk7CgogICAgICAgIAogICAgICAgICAgICB2YXIgaHRtbF9jMDAwNmFkOWI4NDc0MWI0YjIyYWE0NDE0OTIwYjMzZSA9ICQoYDxkaXYgaWQ9Imh0bWxfYzAwMDZhZDliODQ3NDFiNGIyMmFhNDQxNDkyMGIzM2UiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkZpcmUtVG9uZ3VlLEFiaW5nZG9uPC9kaXY+YClbMF07CiAgICAgICAgICAgIHBvcHVwXzJhZTIxZjViMDYzNjQyYjc5MGFhNWYyMjY1ZmI3YmJhLnNldENvbnRlbnQoaHRtbF9jMDAwNmFkOWI4NDc0MWI0YjIyYWE0NDE0OTIwYjMzZSk7CiAgICAgICAgCgogICAgICAgIG1hcmtlcl8yOGY5MzQyZGJhNDE0ZDYxOGI2YTRhNDY5OGI5N2YyNS5iaW5kUG9wdXAocG9wdXBfMmFlMjFmNWIwNjM2NDJiNzkwYWE1ZjIyNjVmYjdiYmEpCiAgICAgICAgOwoKICAgICAgICAKICAgIAogICAgCiAgICAgICAgICAgIHZhciBtYXJrZXJfY2Y2ODMwYmYyYjgwNDUyNmJjMDEzMDUxNTEyNzBlMWUgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs0Ny4yODY4MzUyLCAtMTIwLjIxMjYxMzldLAogICAgICAgICAgICAgICAge30KICAgICAgICAgICAgKS5hZGRUbyhtYXBfZGRjYjViNGY4ZTNiNDdmODhiOTc1MDdmY2FhMjNkODEpOwogICAgICAgIAogICAgCiAgICAgICAgdmFyIHBvcHVwXzA3ZGVjYWVkMWNiMTRhODA5YWRmZThjMDM1M2E4ZWZhID0gTC5wb3B1cCh7Im1heFdpZHRoIjogIjEwMCUifSk7CgogICAgICAgIAogICAgICAgICAgICB2YXIgaHRtbF8xMmExNjQ4NzkzMzE0Y2Y0YWU1NTJmNGMyMjg2MzBiMCA9ICQoYDxkaXYgaWQ9Imh0bWxfMTJhMTY0ODc5MzMxNGNmNGFlNTUyZjRjMjI4NjMwYjAiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkRvcGUsV2E8L2Rpdj5gKVswXTsKICAgICAgICAgICAgcG9wdXBfMDdkZWNhZWQxY2IxNGE4MDlhZGZlOGMwMzUzYThlZmEuc2V0Q29udGVudChodG1sXzEyYTE2NDg3OTMzMTRjZjRhZTU1MmY0YzIyODYzMGIwKTsKICAgICAgICAKCiAgICAgICAgbWFya2VyX2NmNjgzMGJmMmI4MDQ1MjZiYzAxMzA1MTUxMjcwZTFlLmJpbmRQb3B1cChwb3B1cF8wN2RlY2FlZDFjYjE0YTgwOWFkZmU4YzAzNTNhOGVmYSkKICAgICAgICA7CgogICAgICAgIAogICAgCiAgICAKICAgICAgICAgICAgdmFyIG1hcmtlcl84OTVlMDQzNDQ5ZTQ0ZTFmODBiYjA0YmMyOWM2MTg1MiA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzMxLjM5NDA5NjksIC04NS42MjM3NjNdLAogICAgICAgICAgICAgICAge30KICAgICAgICAgICAgKS5hZGRUbyhtYXBfZGRjYjViNGY4ZTNiNDdmODhiOTc1MDdmY2FhMjNkODEpOwogICAgICAgIAogICAgCiAgICAgICAgdmFyIHBvcHVwX2U1MDJlYzIyODFjNzQ2OTY4OTJkZTU0ZmU2YzI0YTI0ID0gTC5wb3B1cCh7Im1heFdpZHRoIjogIjEwMCUifSk7CgogICAgICAgIAogICAgICAgICAgICB2YXIgaHRtbF8zODcxMTA1ZDc2MmE0Y2JlOThmOWZmODRkZjM1NmFkMyA9ICQoYDxkaXYgaWQ9Imh0bWxfMzg3MTEwNWQ3NjJhNGNiZTk4ZjlmZjg0ZGYzNTZhZDMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlRoZSBBZHZlbnR1cmVzIG9mIEppbW1pZSBEYWxlLERhbGU8L2Rpdj5gKVswXTsKICAgICAgICAgICAgcG9wdXBfZTUwMmVjMjI4MWM3NDY5Njg5MmRlNTRmZTZjMjRhMjQuc2V0Q29udGVudChodG1sXzM4NzExMDVkNzYyYTRjYmU5OGY5ZmY4NGRmMzU2YWQzKTsKICAgICAgICAKCiAgICAgICAgbWFya2VyXzg5NWUwNDM0NDllNDRlMWY4MGJiMDRiYzI5YzYxODUyLmJpbmRQb3B1cChwb3B1cF9lNTAyZWMyMjgxYzc0Njk2ODkyZGU1NGZlNmMyNGEyNCkKICAgICAgICA7CgogICAgICAgIAogICAgCiAgICAKICAgICAgICAgICAgdmFyIG1hcmtlcl85Nzk2NDRiMjkyNGQ0MjJjOGRjNGExYzJiMjE1ZjgwZiA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQyLjE1MzkxNDEsIC04OC4xMzYxODg4XSwKICAgICAgICAgICAgICAgIHt9CiAgICAgICAgICAgICkuYWRkVG8obWFwX2RkY2I1YjRmOGUzYjQ3Zjg4Yjk3NTA3ZmNhYTIzZDgxKTsKICAgICAgICAKICAgIAogICAgICAgIHZhciBwb3B1cF80MjJhMjAyYzE0ZTk0YzllYTk0Nzk2ZjYyMGRmOTA5MiA9IEwucG9wdXAoeyJtYXhXaWR0aCI6ICIxMDAlIn0pOwoKICAgICAgICAKICAgICAgICAgICAgdmFyIGh0bWxfZTU3YzYwNjczMzg1NGUyZmE1MGIwNWFlOGMwMzc2NzQgPSAkKGA8ZGl2IGlkPSJodG1sX2U1N2M2MDY3MzM4NTRlMmZhNTBiMDVhZThjMDM3Njc0IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5UaGUgTWFsZWZhY3RvcixCYXJyaW5ndG9uPC9kaXY+YClbMF07CiAgICAgICAgICAgIHBvcHVwXzQyMmEyMDJjMTRlOTRjOWVhOTQ3OTZmNjIwZGY5MDkyLnNldENvbnRlbnQoaHRtbF9lNTdjNjA2NzMzODU0ZTJmYTUwYjA1YWU4YzAzNzY3NCk7CiAgICAgICAgCgogICAgICAgIG1hcmtlcl85Nzk2NDRiMjkyNGQ0MjJjOGRjNGExYzJiMjE1ZjgwZi5iaW5kUG9wdXAocG9wdXBfNDIyYTIwMmMxNGU5NGM5ZWE5NDc5NmY2MjBkZjkwOTIpCiAgICAgICAgOwoKICAgICAgICAKICAgIAogICAgCiAgICAgICAgICAgIHZhciBtYXJrZXJfMWJkOWIzZWUwZDdmNDAyZmFjNTVjZWQ4ZTY5Y2MzNzUgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs1MS41MDczMjE5LCAtMC4xMjc2NDc0XSwKICAgICAgICAgICAgICAgIHt9CiAgICAgICAgICAgICkuYWRkVG8obWFwX2RkY2I1YjRmOGUzYjQ3Zjg4Yjk3NTA3ZmNhYTIzZDgxKTsKICAgICAgICAKICAgIAogICAgICAgIHZhciBwb3B1cF8wOGY5NjE1ZjNjY2Y0NGYzYTE1YzI2NzE0NmZhNTE5NyA9IEwucG9wdXAoeyJtYXhXaWR0aCI6ICIxMDAlIn0pOwoKICAgICAgICAKICAgICAgICAgICAgdmFyIGh0bWxfMGQ4Nzk2YzE0ZDBkNDIxZmE3NjI5MDA5ODIyMGE1ODkgPSAkKGA8ZGl2IGlkPSJodG1sXzBkODc5NmMxNGQwZDQyMWZhNzYyOTAwOTgyMjBhNTg5IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5UaGUgSWxsdXN0cmlvdXMgUHJpbmNlLExvbmRvbjwvZGl2PmApWzBdOwogICAgICAgICAgICBwb3B1cF8wOGY5NjE1ZjNjY2Y0NGYzYTE1YzI2NzE0NmZhNTE5Ny5zZXRDb250ZW50KGh0bWxfMGQ4Nzk2YzE0ZDBkNDIxZmE3NjI5MDA5ODIyMGE1ODkpOwogICAgICAgIAoKICAgICAgICBtYXJrZXJfMWJkOWIzZWUwZDdmNDAyZmFjNTVjZWQ4ZTY5Y2MzNzUuYmluZFBvcHVwKHBvcHVwXzA4Zjk2MTVmM2NjZjQ0ZjNhMTVjMjY3MTQ2ZmE1MTk3KQogICAgICAgIDsKCiAgICAgICAgCiAgICAKICAgIAogICAgICAgICAgICB2YXIgbWFya2VyXzBkM2ZlOGNmYmY4MjRiNTY5YTU1NGFmNWIwYTk1NDJhID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNDEuOTkwODQ4NSwgLTg4LjE4NTAwMjhdLAogICAgICAgICAgICAgICAge30KICAgICAgICAgICAgKS5hZGRUbyhtYXBfZGRjYjViNGY4ZTNiNDdmODhiOTc1MDdmY2FhMjNkODEpOwogICAgICAgIAogICAgCiAgICAgICAgdmFyIHBvcHVwX2QzM2E4NDQ2OTQ1NjRmZWJhZmM3OGNmOTFhNDVmYjdiID0gTC5wb3B1cCh7Im1heFdpZHRoIjogIjEwMCUifSk7CgogICAgICAgIAogICAgICAgICAgICB2YXIgaHRtbF8wOTNkNzg1YzM0OTM0NWI2OTQwOWMzMTk5M2ZlNjUwMSA9ICQoYDxkaXYgaWQ9Imh0bWxfMDkzZDc4NWMzNDkzNDViNjk0MDljMzE5OTNmZTY1MDEiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlRoZSBHb2xmIENvdXJzZSBNeXN0ZXJ5LEJhcnRsZXR0PC9kaXY+YClbMF07CiAgICAgICAgICAgIHBvcHVwX2QzM2E4NDQ2OTQ1NjRmZWJhZmM3OGNmOTFhNDVmYjdiLnNldENvbnRlbnQoaHRtbF8wOTNkNzg1YzM0OTM0NWI2OTQwOWMzMTk5M2ZlNjUwMSk7CiAgICAgICAgCgogICAgICAgIG1hcmtlcl8wZDNmZThjZmJmODI0YjU2OWE1NTRhZjViMGE5NTQyYS5iaW5kUG9wdXAocG9wdXBfZDMzYTg0NDY5NDU2NGZlYmFmYzc4Y2Y5MWE0NWZiN2IpCiAgICAgICAgOwoKICAgICAgICAKICAgIAogICAgCiAgICAgICAgICAgIHZhciBtYXJrZXJfNDFkN2YyMTdhOWRkNGFhOGIyMzcyOTg0MTJiYWNiNjIgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFszMy4zNTI3NjMyLCAtMTExLjc4OTAzNzNdLAogICAgICAgICAgICAgICAge30KICAgICAgICAgICAgKS5hZGRUbyhtYXBfZGRjYjViNGY4ZTNiNDdmODhiOTc1MDdmY2FhMjNkODEpOwogICAgICAgIAogICAgCiAgICAgICAgdmFyIHBvcHVwX2Q5Mzc0NmRlNGQ1YzQyMDNhMjM5MDRiZjk2YzkyNTNiID0gTC5wb3B1cCh7Im1heFdpZHRoIjogIjEwMCUifSk7CgogICAgICAgIAogICAgICAgICAgICB2YXIgaHRtbF9iZGY5NjBhYjQyMDU0ZWI0YWZmYjMxNjMyNTQyZTc4YyA9ICQoYDxkaXYgaWQ9Imh0bWxfYmRmOTYwYWI0MjA1NGViNGFmZmIzMTYzMjU0MmU3OGMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlRoZSBDcnlzdGFsIFN0b3BwZXIsR2lsYmVydDwvZGl2PmApWzBdOwogICAgICAgICAgICBwb3B1cF9kOTM3NDZkZTRkNWM0MjAzYTIzOTA0YmY5NmM5MjUzYi5zZXRDb250ZW50KGh0bWxfYmRmOTYwYWI0MjA1NGViNGFmZmIzMTYzMjU0MmU3OGMpOwogICAgICAgIAoKICAgICAgICBtYXJrZXJfNDFkN2YyMTdhOWRkNGFhOGIyMzcyOTg0MTJiYWNiNjIuYmluZFBvcHVwKHBvcHVwX2Q5Mzc0NmRlNGQ1YzQyMDNhMjM5MDRiZjk2YzkyNTNiKQogICAgICAgIDsKCiAgICAgICAgCiAgICAKICAgIAogICAgICAgICAgICB2YXIgbWFya2VyXzhjYzhlY2MzZjYxNjQ3MjNiM2Y5YjFmYThhYzc2ZjdhID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNDcuMDM4NTcyNSwgMjYuNjY4MjY4OTQ3NTExN10sCiAgICAgICAgICAgICAgICB7fQogICAgICAgICAgICApLmFkZFRvKG1hcF9kZGNiNWI0ZjhlM2I0N2Y4OGI5NzUwN2ZjYWEyM2Q4MSk7CiAgICAgICAgCiAgICAKICAgICAgICB2YXIgcG9wdXBfMmRlNTlkMzYzYTljNDU2MTlmYTU4ZTViMDk1NTU3ZTQgPSBMLnBvcHVwKHsibWF4V2lkdGgiOiAiMTAwJSJ9KTsKCiAgICAgICAgCiAgICAgICAgICAgIHZhciBodG1sXzFlNjc1YzU2MTFhNzQyMDY4ODBkYzAyODZlYmM5YjJiID0gJChgPGRpdiBpZD0iaHRtbF8xZTY3NWM1NjExYTc0MjA2ODgwZGMwMjg2ZWJjOWIyYiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+VGhlIEJyZWFraW5nIFBvaW50LERhdmlkPC9kaXY+YClbMF07CiAgICAgICAgICAgIHBvcHVwXzJkZTU5ZDM2M2E5YzQ1NjE5ZmE1OGU1YjA5NTU1N2U0LnNldENvbnRlbnQoaHRtbF8xZTY3NWM1NjExYTc0MjA2ODgwZGMwMjg2ZWJjOWIyYik7CiAgICAgICAgCgogICAgICAgIG1hcmtlcl84Y2M4ZWNjM2Y2MTY0NzIzYjNmOWIxZmE4YWM3NmY3YS5iaW5kUG9wdXAocG9wdXBfMmRlNTlkMzYzYTljNDU2MTlmYTU4ZTViMDk1NTU3ZTQpCiAgICAgICAgOwoKICAgICAgICAKICAgIAogICAgCiAgICAgICAgICAgIHZhciBtYXJrZXJfNGZhMzYyZTJlYjRjNDYzMzlkOWJmZTYzNTgxZDE3MjAgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs1MS41MDczMjE5LCAtMC4xMjc2NDc0XSwKICAgICAgICAgICAgICAgIHt9CiAgICAgICAgICAgICkuYWRkVG8obWFwX2RkY2I1YjRmOGUzYjQ3Zjg4Yjk3NTA3ZmNhYTIzZDgxKTsKICAgICAgICAKICAgIAogICAgICAgIHZhciBwb3B1cF8wY2ZlMjdiMThiODg0YzUwOTQ2MjM0NmMyNzU5NTFlOCA9IEwucG9wdXAoeyJtYXhXaWR0aCI6ICIxMDAlIn0pOwoKICAgICAgICAKICAgICAgICAgICAgdmFyIGh0bWxfNWE4OGRiZDYzNDAzNGM5MjllZGYzYjJhZmM5YjhhMzQgPSAkKGA8ZGl2IGlkPSJodG1sXzVhODhkYmQ2MzQwMzRjOTI5ZWRmM2IyYWZjOWI4YTM0IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5NaXNzIG9yIE1ycy4/LExvbmRvbjwvZGl2PmApWzBdOwogICAgICAgICAgICBwb3B1cF8wY2ZlMjdiMThiODg0YzUwOTQ2MjM0NmMyNzU5NTFlOC5zZXRDb250ZW50KGh0bWxfNWE4OGRiZDYzNDAzNGM5MjllZGYzYjJhZmM5YjhhMzQpOwogICAgICAgIAoKICAgICAgICBtYXJrZXJfNGZhMzYyZTJlYjRjNDYzMzlkOWJmZTYzNTgxZDE3MjAuYmluZFBvcHVwKHBvcHVwXzBjZmUyN2IxOGI4ODRjNTA5NDYyMzQ2YzI3NTk1MWU4KQogICAgICAgIDsKCiAgICAgICAgCiAgICAKICAgIAogICAgICAgICAgICB2YXIgbWFya2VyX2FiYjg4ZjQ4M2I0ZDQ5OWM5OWEyYmI1MzE2ZDI0NWUxID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMzkuOTU3MzczOTUsIDI2LjIzODAxNzQ2MTAxMTZdLAogICAgICAgICAgICAgICAge30KICAgICAgICAgICAgKS5hZGRUbyhtYXBfZGRjYjViNGY4ZTNiNDdmODhiOTc1MDdmY2FhMjNkODEpOwogICAgICAgIAogICAgCiAgICAgICAgdmFyIHBvcHVwX2UwNTUwNDBiY2NkYTQ2ODlhN2JiYzAyNTZlMGEzODY2ID0gTC5wb3B1cCh7Im1heFdpZHRoIjogIjEwMCUifSk7CgogICAgICAgIAogICAgICAgICAgICB2YXIgaHRtbF9iZWNhZjRiZmZmNmU0ZjExYjcyNWJlNGFhODBlODg4NyA9ICQoYDxkaXYgaWQ9Imh0bWxfYmVjYWY0YmZmZjZlNGYxMWI3MjViZTRhYTgwZTg4ODciIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk15IExhZHkncyBNb25leSxUcm95PC9kaXY+YClbMF07CiAgICAgICAgICAgIHBvcHVwX2UwNTUwNDBiY2NkYTQ2ODlhN2JiYzAyNTZlMGEzODY2LnNldENvbnRlbnQoaHRtbF9iZWNhZjRiZmZmNmU0ZjExYjcyNWJlNGFhODBlODg4Nyk7CiAgICAgICAgCgogICAgICAgIG1hcmtlcl9hYmI4OGY0ODNiNGQ0OTljOTlhMmJiNTMxNmQyNDVlMS5iaW5kUG9wdXAocG9wdXBfZTA1NTA0MGJjY2RhNDY4OWE3YmJjMDI1NmUwYTM4NjYpCiAgICAgICAgOwoKICAgICAgICAKICAgIAogICAgCiAgICAgICAgICAgIHZhciBtYXJrZXJfNDk1NmRhNmMxYThhNDM2YzkyOTAzNTA3ODAxOTZkYTcgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs0OC44NTY2MTAxLCAyLjM1MTQ5OTJdLAogICAgICAgICAgICAgICAge30KICAgICAgICAgICAgKS5hZGRUbyhtYXBfZGRjYjViNGY4ZTNiNDdmODhiOTc1MDdmY2FhMjNkODEpOwogICAgICAgIAogICAgCiAgICAgICAgdmFyIHBvcHVwXzJmNjE4NzQ3N2ViODQxYjNiMTk5ZTYyMGYwOWY2MGRlID0gTC5wb3B1cCh7Im1heFdpZHRoIjogIjEwMCUifSk7CgogICAgICAgIAogICAgICAgICAgICB2YXIgaHRtbF9mZGIzOTA3ZDZjM2I0NjllOTgxN2U5ZGJjMzYwYmQ1NSA9ICQoYDxkaXYgaWQ9Imh0bWxfZmRiMzkwN2Q2YzNiNDY5ZTk4MTdlOWRiYzM2MGJkNTUiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlRoZSBNeXN0ZXJ5IG9mIE9yY2l2YWwsUGFyaXM8L2Rpdj5gKVswXTsKICAgICAgICAgICAgcG9wdXBfMmY2MTg3NDc3ZWI4NDFiM2IxOTllNjIwZjA5ZjYwZGUuc2V0Q29udGVudChodG1sX2ZkYjM5MDdkNmMzYjQ2OWU5ODE3ZTlkYmMzNjBiZDU1KTsKICAgICAgICAKCiAgICAgICAgbWFya2VyXzQ5NTZkYTZjMWE4YTQzNmM5MjkwMzUwNzgwMTk2ZGE3LmJpbmRQb3B1cChwb3B1cF8yZjYxODc0NzdlYjg0MWIzYjE5OWU2MjBmMDlmNjBkZSkKICAgICAgICA7CgogICAgICAgIAogICAgCiAgICAKICAgICAgICAgICAgdmFyIG1hcmtlcl81NGMzMWVkZDZhN2Q0NmY1YWUwMzNlNzFiYzc5NTY4ZCA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzUxLjUwNzMyMTksIC0wLjEyNzY0NzRdLAogICAgICAgICAgICAgICAge30KICAgICAgICAgICAgKS5hZGRUbyhtYXBfZGRjYjViNGY4ZTNiNDdmODhiOTc1MDdmY2FhMjNkODEpOwogICAgICAgIAogICAgCiAgICAgICAgdmFyIHBvcHVwX2ZhY2UyZDNiOWIyYTQ1Njg4MzU4ZWNhMjkwYTZmNmFlID0gTC5wb3B1cCh7Im1heFdpZHRoIjogIjEwMCUifSk7CgogICAgICAgIAogICAgICAgICAgICB2YXIgaHRtbF80ZmQzZDhhNDNhZmE0YmQ4ODYwY2U5MTk1MDRlZjk1YiA9ICQoYDxkaXYgaWQ9Imh0bWxfNGZkM2Q4YTQzYWZhNGJkODg2MGNlOTE5NTA0ZWY5NWIiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlRoZSBBZHZlbnR1cmVzIG9mIFNoZXJsb2NrIEhvbG1lcyxMb25kb248L2Rpdj5gKVswXTsKICAgICAgICAgICAgcG9wdXBfZmFjZTJkM2I5YjJhNDU2ODgzNThlY2EyOTBhNmY2YWUuc2V0Q29udGVudChodG1sXzRmZDNkOGE0M2FmYTRiZDg4NjBjZTkxOTUwNGVmOTViKTsKICAgICAgICAKCiAgICAgICAgbWFya2VyXzU0YzMxZWRkNmE3ZDQ2ZjVhZTAzM2U3MWJjNzk1NjhkLmJpbmRQb3B1cChwb3B1cF9mYWNlMmQzYjliMmE0NTY4ODM1OGVjYTI5MGE2ZjZhZSkKICAgICAgICA7CgogICAgICAgIAogICAgCiAgICAKICAgICAgICAgICAgdmFyIG1hcmtlcl9iYmY2YTcyZmE2NTY0N2JkYTkxZjUwNGJhZTllZjk5NCA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQ4LjI5NzE2MjYsIDQuMDc0NjI1N10sCiAgICAgICAgICAgICAgICB7fQogICAgICAgICAgICApLmFkZFRvKG1hcF9kZGNiNWI0ZjhlM2I0N2Y4OGI5NzUwN2ZjYWEyM2Q4MSk7CiAgICAgICAgCiAgICAKICAgICAgICB2YXIgcG9wdXBfM2M4YmU4YjFiYjkzNDg2ZGIxNDFmZTljZWIzMzZmODkgPSBMLnBvcHVwKHsibWF4V2lkdGgiOiAiMTAwJSJ9KTsKCiAgICAgICAgCiAgICAgICAgICAgIHZhciBodG1sXzdlZmYyODQyMWYwYTQyMzRiYmUyYTliMTNlYzA4ZTFkID0gJChgPGRpdiBpZD0iaHRtbF83ZWZmMjg0MjFmMGE0MjM0YmJlMmE5YjEzZWMwOGUxZCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+QW4gSGlzdG9yaWNhbCBNeXN0ZXJ5IChUaGUgR29uZHJldmlsbGUgTXlzdGVyeSksVHJveWVzPC9kaXY+YClbMF07CiAgICAgICAgICAgIHBvcHVwXzNjOGJlOGIxYmI5MzQ4NmRiMTQxZmU5Y2ViMzM2Zjg5LnNldENvbnRlbnQoaHRtbF83ZWZmMjg0MjFmMGE0MjM0YmJlMmE5YjEzZWMwOGUxZCk7CiAgICAgICAgCgogICAgICAgIG1hcmtlcl9iYmY2YTcyZmE2NTY0N2JkYTkxZjUwNGJhZTllZjk5NC5iaW5kUG9wdXAocG9wdXBfM2M4YmU4YjFiYjkzNDg2ZGIxNDFmZTljZWIzMzZmODkpCiAgICAgICAgOwoKICAgICAgICAKICAgIAogICAgCiAgICAgICAgICAgIHZhciBtYXJrZXJfN2I1MTI3NjdmOTU5NDIzOTljMWMwYmIxZjAyMzMwOWYgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs0OC44NTY2MTAxLCAyLjM1MTQ5OTJdLAogICAgICAgICAgICAgICAge30KICAgICAgICAgICAgKS5hZGRUbyhtYXBfZGRjYjViNGY4ZTNiNDdmODhiOTc1MDdmY2FhMjNkODEpOwogICAgICAgIAogICAgCiAgICAgICAgdmFyIHBvcHVwXzFkNWE4M2VhZGQyMzRlODhhNmQ0NGQ1ZWYwOTQxMDhmID0gTC5wb3B1cCh7Im1heFdpZHRoIjogIjEwMCUifSk7CgogICAgICAgIAogICAgICAgICAgICB2YXIgaHRtbF83ODQzOTU1NDNiZTg0ZTQ1OTc1OTFkMDIzYTNiN2ZmNyA9ICQoYDxkaXYgaWQ9Imh0bWxfNzg0Mzk1NTQzYmU4NGU0NTk3NTkxZDAyM2EzYjdmZjciIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlRoZSBNeXN0ZXJ5IG9mIHRoZSBZZWxsb3cgUm9vbSxQYXJpczwvZGl2PmApWzBdOwogICAgICAgICAgICBwb3B1cF8xZDVhODNlYWRkMjM0ZTg4YTZkNDRkNWVmMDk0MTA4Zi5zZXRDb250ZW50KGh0bWxfNzg0Mzk1NTQzYmU4NGU0NTk3NTkxZDAyM2EzYjdmZjcpOwogICAgICAgIAoKICAgICAgICBtYXJrZXJfN2I1MTI3NjdmOTU5NDIzOTljMWMwYmIxZjAyMzMwOWYuYmluZFBvcHVwKHBvcHVwXzFkNWE4M2VhZGQyMzRlODhhNmQ0NGQ1ZWYwOTQxMDhmKQogICAgICAgIDsKCiAgICAgICAgCiAgICAKICAgIAogICAgICAgICAgICB2YXIgbWFya2VyXzBiOTIyY2Q3YmM2NTQwM2VhNzkzNmE1NTkyYWFkMjIyID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNTMuNTQ4NjQzNSwgMTQuNTY1NzM5OV0sCiAgICAgICAgICAgICAgICB7fQogICAgICAgICAgICApLmFkZFRvKG1hcF9kZGNiNWI0ZjhlM2I0N2Y4OGI5NzUwN2ZjYWEyM2Q4MSk7CiAgICAgICAgCiAgICAKICAgICAgICB2YXIgcG9wdXBfZThkMmNmMjBiMGE2NDIxZTgxMmEzOTQ0ZjE5MzlkMzMgPSBMLnBvcHVwKHsibWF4V2lkdGgiOiAiMTAwJSJ9KTsKCiAgICAgICAgCiAgICAgICAgICAgIHZhciBodG1sXzhjMDQ1YzdhMzk0YTQ0ODdhYTVmZGJhMDM4NWM1MDY1ID0gJChgPGRpdiBpZD0iaHRtbF84YzA0NWM3YTM5NGE0NDg3YWE1ZmRiYTAzODVjNTA2NSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+VGhlIFNlY3JldCBvZiB0aGUgTmlnaHQsUG9saWNlPC9kaXY+YClbMF07CiAgICAgICAgICAgIHBvcHVwX2U4ZDJjZjIwYjBhNjQyMWU4MTJhMzk0NGYxOTM5ZDMzLnNldENvbnRlbnQoaHRtbF84YzA0NWM3YTM5NGE0NDg3YWE1ZmRiYTAzODVjNTA2NSk7CiAgICAgICAgCgogICAgICAgIG1hcmtlcl8wYjkyMmNkN2JjNjU0MDNlYTc5MzZhNTU5MmFhZDIyMi5iaW5kUG9wdXAocG9wdXBfZThkMmNmMjBiMGE2NDIxZTgxMmEzOTQ0ZjE5MzlkMzMpCiAgICAgICAgOwoKICAgICAgICAKICAgIAogICAgCiAgICAgICAgICAgIHZhciBtYXJrZXJfYmU1YmI2ZDk2YTdmNGZkZDlhMjk1OGQxODM1ZjA4MjMgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs1MS41MDczMjE5LCAtMC4xMjc2NDc0XSwKICAgICAgICAgICAgICAgIHt9CiAgICAgICAgICAgICkuYWRkVG8obWFwX2RkY2I1YjRmOGUzYjQ3Zjg4Yjk3NTA3ZmNhYTIzZDgxKTsKICAgICAgICAKICAgIAogICAgICAgIHZhciBwb3B1cF84NzY1NzAzMDY5MTE0ZGUxOTQzMTFiZGMyNDZkZDUxZCA9IEwucG9wdXAoeyJtYXhXaWR0aCI6ICIxMDAlIn0pOwoKICAgICAgICAKICAgICAgICAgICAgdmFyIGh0bWxfOTA2ODVkZWEwYTQ4NGU3ZGEzOTY1M2Y4ODJjNTRhNDcgPSAkKGA8ZGl2IGlkPSJodG1sXzkwNjg1ZGVhMGE0ODRlN2RhMzk2NTNmODgyYzU0YTQ3IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5UaGUgTWFuIFdobyBXYXMgVGh1cnNkYXk6IEEgTmlnaHRtYXJlLExvbmRvbjwvZGl2PmApWzBdOwogICAgICAgICAgICBwb3B1cF84NzY1NzAzMDY5MTE0ZGUxOTQzMTFiZGMyNDZkZDUxZC5zZXRDb250ZW50KGh0bWxfOTA2ODVkZWEwYTQ4NGU3ZGEzOTY1M2Y4ODJjNTRhNDcpOwogICAgICAgIAoKICAgICAgICBtYXJrZXJfYmU1YmI2ZDk2YTdmNGZkZDlhMjk1OGQxODM1ZjA4MjMuYmluZFBvcHVwKHBvcHVwXzg3NjU3MDMwNjkxMTRkZTE5NDMxMWJkYzI0NmRkNTFkKQogICAgICAgIDsKCiAgICAgICAgCiAgICAKICAgIAogICAgICAgICAgICB2YXIgbWFya2VyXzFhNjc4YzlhYzhiYjQ0Y2E4NmRiMWFhMzZmMDM0ZDc5ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuODcwOTU0MiwgLTk2LjI0NzEzMzhdLAogICAgICAgICAgICAgICAge30KICAgICAgICAgICAgKS5hZGRUbyhtYXBfZGRjYjViNGY4ZTNiNDdmODhiOTc1MDdmY2FhMjNkODEpOwogICAgICAgIAogICAgCiAgICAgICAgdmFyIHBvcHVwXzQ1ZTRiZGMzZDMzZjRlYzdiMGU2ZTA2NDU1YzE4ZjUxID0gTC5wb3B1cCh7Im1heFdpZHRoIjogIjEwMCUifSk7CgogICAgICAgIAogICAgICAgICAgICB2YXIgaHRtbF9hOWU3MDczZjZlNDE0M2ZiYjcwZjFlOGQ3ODU4ZjRiMyA9ICQoYDxkaXYgaWQ9Imh0bWxfYTllNzA3M2Y2ZTQxNDNmYmI3MGYxZThkNzg1OGY0YjMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlRoZSBDbHViIG9mIFF1ZWVyIFRyYWRlcyxHcmVlbndvb2Q8L2Rpdj5gKVswXTsKICAgICAgICAgICAgcG9wdXBfNDVlNGJkYzNkMzNmNGVjN2IwZTZlMDY0NTVjMThmNTEuc2V0Q29udGVudChodG1sX2E5ZTcwNzNmNmU0MTQzZmJiNzBmMWU4ZDc4NThmNGIzKTsKICAgICAgICAKCiAgICAgICAgbWFya2VyXzFhNjc4YzlhYzhiYjQ0Y2E4NmRiMWFhMzZmMDM0ZDc5LmJpbmRQb3B1cChwb3B1cF80NWU0YmRjM2QzM2Y0ZWM3YjBlNmUwNjQ1NWMxOGY1MSkKICAgICAgICA7CgogICAgICAgIAogICAgCiAgICAKICAgICAgICAgICAgdmFyIG1hcmtlcl8wODBhODg3Yjg0MWE0MTFhYmNiZWYyZjlhNjUzZjU1NSA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQ3LjAzODU3MjUsIDI2LjY2ODI2ODk0NzUxMTddLAogICAgICAgICAgICAgICAge30KICAgICAgICAgICAgKS5hZGRUbyhtYXBfZGRjYjViNGY4ZTNiNDdmODhiOTc1MDdmY2FhMjNkODEpOwogICAgICAgIAogICAgCiAgICAgICAgdmFyIHBvcHVwXzVkMjNlNzNlNmNiYTQ4NjlhMWE3YjE1MTFkYjQ3ZmIxID0gTC5wb3B1cCh7Im1heFdpZHRoIjogIjEwMCUifSk7CgogICAgICAgIAogICAgICAgICAgICB2YXIgaHRtbF8zYWQ1ZTVkMmRhZjc0NTg2OWQzNDU1MTM5MjBiMjAyMSA9ICQoYDxkaXYgaWQ9Imh0bWxfM2FkNWU1ZDJkYWY3NDU4NjlkMzQ1NTEzOTIwYjIwMjEiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlRoZSBWYW5pc2hlZCBNZXNzZW5nZXIsRGF2aWQ8L2Rpdj5gKVswXTsKICAgICAgICAgICAgcG9wdXBfNWQyM2U3M2U2Y2JhNDg2OWExYTdiMTUxMWRiNDdmYjEuc2V0Q29udGVudChodG1sXzNhZDVlNWQyZGFmNzQ1ODY5ZDM0NTUxMzkyMGIyMDIxKTsKICAgICAgICAKCiAgICAgICAgbWFya2VyXzA4MGE4ODdiODQxYTQxMWFiY2JlZjJmOWE2NTNmNTU1LmJpbmRQb3B1cChwb3B1cF81ZDIzZTczZTZjYmE0ODY5YTFhN2IxNTExZGI0N2ZiMSkKICAgICAgICA7CgogICAgICAgIAogICAgCiAgICAKICAgICAgICAgICAgdmFyIG1hcmtlcl82ODJhN2RlMjQ0MmU0N2E1YmVlZTg2NWM4NmJkMzFiMSA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWy0yMy45NjA4MzMsIC00Ni4zMzM4ODldLAogICAgICAgICAgICAgICAge30KICAgICAgICAgICAgKS5hZGRUbyhtYXBfZGRjYjViNGY4ZTNiNDdmODhiOTc1MDdmY2FhMjNkODEpOwogICAgICAgIAogICAgCiAgICAgICAgdmFyIHBvcHVwXzk1ODgwMWFhYWQwODQ0MTQ4ZTc4YWY2OTQ2MGM0MDZiID0gTC5wb3B1cCh7Im1heFdpZHRoIjogIjEwMCUifSk7CgogICAgICAgIAogICAgICAgICAgICB2YXIgaHRtbF8wZGVhNDRmMGZlYmE0MDA1YjY3NDFkMDg2ODAzNjczNiA9ICQoYDxkaXYgaWQ9Imh0bWxfMGRlYTQ0ZjBmZWJhNDAwNWI2NzQxZDA4NjgwMzY3MzYiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkRlYWQgTWVuIFRlbGwgTm8gVGFsZXMsU2FudG9zPC9kaXY+YClbMF07CiAgICAgICAgICAgIHBvcHVwXzk1ODgwMWFhYWQwODQ0MTQ4ZTc4YWY2OTQ2MGM0MDZiLnNldENvbnRlbnQoaHRtbF8wZGVhNDRmMGZlYmE0MDA1YjY3NDFkMDg2ODAzNjczNik7CiAgICAgICAgCgogICAgICAgIG1hcmtlcl82ODJhN2RlMjQ0MmU0N2E1YmVlZTg2NWM4NmJkMzFiMS5iaW5kUG9wdXAocG9wdXBfOTU4ODAxYWFhZDA4NDQxNDhlNzhhZjY5NDYwYzQwNmIpCiAgICAgICAgOwoKICAgICAgICAKICAgIAogICAgCiAgICAgICAgICAgIHZhciBtYXJrZXJfZDFmZjkyNjgwZDg5NDA0NDg0OWFkMjNlMzJlOGZiYmEgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs0OS4zNTk3MDYyLCAxNy4zMDk0MjAyXSwKICAgICAgICAgICAgICAgIHt9CiAgICAgICAgICAgICkuYWRkVG8obWFwX2RkY2I1YjRmOGUzYjQ3Zjg4Yjk3NTA3ZmNhYTIzZDgxKTsKICAgICAgICAKICAgIAogICAgICAgIHZhciBwb3B1cF84NWI1OGU1NWIzOTM0NWRiYTZkYmYzNzZiNDMzNTI0OCA9IEwucG9wdXAoeyJtYXhXaWR0aCI6ICIxMDAlIn0pOwoKICAgICAgICAKICAgICAgICAgICAgdmFyIGh0bWxfOTdjMWU1MTg2NzllNDczNGI2ZjFmOGMwYWNkMDA0OTcgPSAkKGA8ZGl2IGlkPSJodG1sXzk3YzFlNTE4Njc5ZTQ3MzRiNmYxZjhjMGFjZDAwNDk3IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5UaGUgTWFuIFdobyBLbmV3IFRvbyBNdWNoLE1hcmNoPC9kaXY+YClbMF07CiAgICAgICAgICAgIHBvcHVwXzg1YjU4ZTU1YjM5MzQ1ZGJhNmRiZjM3NmI0MzM1MjQ4LnNldENvbnRlbnQoaHRtbF85N2MxZTUxODY3OWU0NzM0YjZmMWY4YzBhY2QwMDQ5Nyk7CiAgICAgICAgCgogICAgICAgIG1hcmtlcl9kMWZmOTI2ODBkODk0MDQ0ODQ5YWQyM2UzMmU4ZmJiYS5iaW5kUG9wdXAocG9wdXBfODViNThlNTViMzkzNDVkYmE2ZGJmMzc2YjQzMzUyNDgpCiAgICAgICAgOwoKICAgICAgICAKICAgIAogICAgCiAgICAgICAgICAgIHZhciBtYXJrZXJfY2NlMjcyZGY2YzAyNDc0OTlmM2NlYTg1M2E4YjA2YzUgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs0OC44NTY2MTAxLCAyLjM1MTQ5OTJdLAogICAgICAgICAgICAgICAge30KICAgICAgICAgICAgKS5hZGRUbyhtYXBfZGRjYjViNGY4ZTNiNDdmODhiOTc1MDdmY2FhMjNkODEpOwogICAgICAgIAogICAgCiAgICAgICAgdmFyIHBvcHVwX2M0MzgzNjBjNjFmYjRlN2ZhY2UyMmQwNjZhZTM3MDkzID0gTC5wb3B1cCh7Im1heFdpZHRoIjogIjEwMCUifSk7CgogICAgICAgIAogICAgICAgICAgICB2YXIgaHRtbF8zNmE0NTc0MmI0N2I0MDBhYTAxZmQ5OGI0ZmZlNzAwZCA9ICQoYDxkaXYgaWQ9Imh0bWxfMzZhNDU3NDJiNDdiNDAwYWEwMWZkOThiNGZmZTcwMGQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk90aGVyIFBlb3BsZSdzIE1vbmV5LFBhcmlzPC9kaXY+YClbMF07CiAgICAgICAgICAgIHBvcHVwX2M0MzgzNjBjNjFmYjRlN2ZhY2UyMmQwNjZhZTM3MDkzLnNldENvbnRlbnQoaHRtbF8zNmE0NTc0MmI0N2I0MDBhYTAxZmQ5OGI0ZmZlNzAwZCk7CiAgICAgICAgCgogICAgICAgIG1hcmtlcl9jY2UyNzJkZjZjMDI0NzQ5OWYzY2VhODUzYThiMDZjNS5iaW5kUG9wdXAocG9wdXBfYzQzODM2MGM2MWZiNGU3ZmFjZTIyZDA2NmFlMzcwOTMpCiAgICAgICAgOwoKICAgICAgICAKICAgIAogICAgCiAgICAgICAgICAgIHZhciBtYXJrZXJfMGEwMDMxZDgxNzdkNGU5YWFlYmMwYzlmMGJmOGZkODIgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs1MS41MDczMjE5LCAtMC4xMjc2NDc0XSwKICAgICAgICAgICAgICAgIHt9CiAgICAgICAgICAgICkuYWRkVG8obWFwX2RkY2I1YjRmOGUzYjQ3Zjg4Yjk3NTA3ZmNhYTIzZDgxKTsKICAgICAgICAKICAgIAogICAgICAgIHZhciBwb3B1cF80ODZkZTRiYjUyZTA0NjRjYjY4MDVkN2E4ZDNmZDIxMCA9IEwucG9wdXAoeyJtYXhXaWR0aCI6ICIxMDAlIn0pOwoKICAgICAgICAKICAgICAgICAgICAgdmFyIGh0bWxfYWJhNzUyNDUxMWZhNDk0M2E1MTgwMWMwYWQwNjU2Y2YgPSAkKGA8ZGl2IGlkPSJodG1sX2FiYTc1MjQ1MTFmYTQ5NDNhNTE4MDFjMGFkMDY1NmNmIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5UaGUgQWdvbnkgQ29sdW1uLExvbmRvbjwvZGl2PmApWzBdOwogICAgICAgICAgICBwb3B1cF80ODZkZTRiYjUyZTA0NjRjYjY4MDVkN2E4ZDNmZDIxMC5zZXRDb250ZW50KGh0bWxfYWJhNzUyNDUxMWZhNDk0M2E1MTgwMWMwYWQwNjU2Y2YpOwogICAgICAgIAoKICAgICAgICBtYXJrZXJfMGEwMDMxZDgxNzdkNGU5YWFlYmMwYzlmMGJmOGZkODIuYmluZFBvcHVwKHBvcHVwXzQ4NmRlNGJiNTJlMDQ2NGNiNjgwNWQ3YThkM2ZkMjEwKQogICAgICAgIDsKCiAgICAgICAgCiAgICAKICAgIAogICAgICAgICAgICB2YXIgbWFya2VyX2MyMWViZjRkMjRmNTRmODk4ODNiNDU2MjNkMGVmNTVjID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNDUuNDM3MTkwOCwgMTIuMzM0NTg5OF0sCiAgICAgICAgICAgICAgICB7fQogICAgICAgICAgICApLmFkZFRvKG1hcF9kZGNiNWI0ZjhlM2I0N2Y4OGI5NzUwN2ZjYWEyM2Q4MSk7CiAgICAgICAgCiAgICAKICAgICAgICB2YXIgcG9wdXBfOGVhZjY5ZmNlNGVhNGE5NmE2MzBhNTc1OTdlZmY1MDYgPSBMLnBvcHVwKHsibWF4V2lkdGgiOiAiMTAwJSJ9KTsKCiAgICAgICAgCiAgICAgICAgICAgIHZhciBodG1sX2QyOTEyZWE4OWM1MTRkZTlhMzY3NzdkMDRmNDUwOGZhID0gJChgPGRpdiBpZD0iaHRtbF9kMjkxMmVhODljNTE0ZGU5YTM2Nzc3ZDA0ZjQ1MDhmYSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+VGhlIENhc2Ugb2YgdGhlIExhbXAgVGhhdCBXZW50IE91dCxWZW5pY2U8L2Rpdj5gKVswXTsKICAgICAgICAgICAgcG9wdXBfOGVhZjY5ZmNlNGVhNGE5NmE2MzBhNTc1OTdlZmY1MDYuc2V0Q29udGVudChodG1sX2QyOTEyZWE4OWM1MTRkZTlhMzY3NzdkMDRmNDUwOGZhKTsKICAgICAgICAKCiAgICAgICAgbWFya2VyX2MyMWViZjRkMjRmNTRmODk4ODNiNDU2MjNkMGVmNTVjLmJpbmRQb3B1cChwb3B1cF84ZWFmNjlmY2U0ZWE0YTk2YTYzMGE1NzU5N2VmZjUwNikKICAgICAgICA7CgogICAgICAgIAogICAgCiAgICAKICAgICAgICAgICAgdmFyIG1hcmtlcl84YjUyMjgxOGJmMWU0NmE1YjVhZDJlMjQ0MmRiZWQ0MSA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQxLjg3NTU2MTYsIC04Ny42MjQ0MjEyXSwKICAgICAgICAgICAgICAgIHt9CiAgICAgICAgICAgICkuYWRkVG8obWFwX2RkY2I1YjRmOGUzYjQ3Zjg4Yjk3NTA3ZmNhYTIzZDgxKTsKICAgICAgICAKICAgIAogICAgICAgIHZhciBwb3B1cF9lMDIzN2M1MGYzOGU0ZTljOTJjMzYyMTM2ZjY3M2Q4YSA9IEwucG9wdXAoeyJtYXhXaWR0aCI6ICIxMDAlIn0pOwoKICAgICAgICAKICAgICAgICAgICAgdmFyIGh0bWxfMmM0ZWRiNDQ4ODg4NDRkMTgzOTAyZGZkMGQxMjI4NTcgPSAkKGA8ZGl2IGlkPSJodG1sXzJjNGVkYjQ0ODg4ODQ0ZDE4MzkwMmRmZDBkMTIyODU3IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5UaGUgQ2FzZSBvZiB0aGUgUmVnaXN0ZXJlZCBMZXR0ZXIsQ2hpY2FnbzwvZGl2PmApWzBdOwogICAgICAgICAgICBwb3B1cF9lMDIzN2M1MGYzOGU0ZTljOTJjMzYyMTM2ZjY3M2Q4YS5zZXRDb250ZW50KGh0bWxfMmM0ZWRiNDQ4ODg4NDRkMTgzOTAyZGZkMGQxMjI4NTcpOwogICAgICAgIAoKICAgICAgICBtYXJrZXJfOGI1MjI4MThiZjFlNDZhNWI1YWQyZTI0NDJkYmVkNDEuYmluZFBvcHVwKHBvcHVwX2UwMjM3YzUwZjM4ZTRlOWM5MmMzNjIxMzZmNjczZDhhKQogICAgICAgIDsKCiAgICAgICAgCiAgICAKICAgIAogICAgICAgICAgICB2YXIgbWFya2VyXzU0MDlhMTJjMGQwMTQ5ZmE4N2NlYzZkOTY3NjUwMDY0ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNDkuOTkwMjk1ODUsIDguNjY1Nzc0NjkxMjI1NjddLAogICAgICAgICAgICAgICAge30KICAgICAgICAgICAgKS5hZGRUbyhtYXBfZGRjYjViNGY4ZTNiNDdmODhiOTc1MDdmY2FhMjNkODEpOwogICAgICAgIAogICAgCiAgICAgICAgdmFyIHBvcHVwX2ZiOTQyMzExZmY3YjQxN2U4Yjc0ZWNkYTdhZjg4NzIyID0gTC5wb3B1cCh7Im1heFdpZHRoIjogIjEwMCUifSk7CgogICAgICAgIAogICAgICAgICAgICB2YXIgaHRtbF9hNzk0NGZlNzQ2MGI0NDAxOTQ5YzFlN2I5MGJiMWY1NiA9ICQoYDxkaXYgaWQ9Imh0bWxfYTc5NDRmZTc0NjBiNDQwMTk0OWMxZTdiOTBiYjFmNTYiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlRoZSBDYXNlIG9mIHRoZSBQb2NrZXQgRGlhcnkgRm91bmQgaW4gdGhlIFNub3csTGFuZ2VuPC9kaXY+YClbMF07CiAgICAgICAgICAgIHBvcHVwX2ZiOTQyMzExZmY3YjQxN2U4Yjc0ZWNkYTdhZjg4NzIyLnNldENvbnRlbnQoaHRtbF9hNzk0NGZlNzQ2MGI0NDAxOTQ5YzFlN2I5MGJiMWY1Nik7CiAgICAgICAgCgogICAgICAgIG1hcmtlcl81NDA5YTEyYzBkMDE0OWZhODdjZWM2ZDk2NzY1MDA2NC5iaW5kUG9wdXAocG9wdXBfZmI5NDIzMTFmZjdiNDE3ZThiNzRlY2RhN2FmODg3MjIpCiAgICAgICAgOwoKICAgICAgICAKICAgIAogICAgCiAgICAgICAgICAgIHZhciBtYXJrZXJfNGRlMjE1NTljZjRmNDIyMTliYTQ4MDYwYjIyMTQ1N2UgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs0My4yMDY5MDI1LCAyNy45MTUwODU1XSwKICAgICAgICAgICAgICAgIHt9CiAgICAgICAgICAgICkuYWRkVG8obWFwX2RkY2I1YjRmOGUzYjQ3Zjg4Yjk3NTA3ZmNhYTIzZDgxKTsKICAgICAgICAKICAgIAogICAgICAgIHZhciBwb3B1cF83YWUyMTFjZWY4YzM0NzMwYTFiYTEyNWM2NzQ3NTFjZCA9IEwucG9wdXAoeyJtYXhXaWR0aCI6ICIxMDAlIn0pOwoKICAgICAgICAKICAgICAgICAgICAgdmFyIGh0bWxfN2UyOTU3YTY5ZjJiNGVmODllMzk5ZDhiMzE2ZTQyYWIgPSAkKGA8ZGl2IGlkPSJodG1sXzdlMjk1N2E2OWYyYjRlZjg5ZTM5OWQ4YjMxNmU0MmFiIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5UaGUgQ2FzZSBvZiB0aGUgUG9vbCBvZiBCbG9vZCBpbiB0aGUgUGFzdG9yJ3MgU3R1ZHksVmFybmE8L2Rpdj5gKVswXTsKICAgICAgICAgICAgcG9wdXBfN2FlMjExY2VmOGMzNDczMGExYmExMjVjNjc0NzUxY2Quc2V0Q29udGVudChodG1sXzdlMjk1N2E2OWYyYjRlZjg5ZTM5OWQ4YjMxNmU0MmFiKTsKICAgICAgICAKCiAgICAgICAgbWFya2VyXzRkZTIxNTU5Y2Y0ZjQyMjE5YmE0ODA2MGIyMjE0NTdlLmJpbmRQb3B1cChwb3B1cF83YWUyMTFjZWY4YzM0NzMwYTFiYTEyNWM2NzQ3NTFjZCkKICAgICAgICA7CgogICAgICAgIAogICAgCiAgICAKICAgICAgICAgICAgdmFyIG1hcmtlcl8xYWEyYmQ0ZWMxNTc0YjYxYjEzYzUwM2E0NjQwNmYzMiA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWy0zMy45NjQ0NDQsIDIyLjQ1OTcyMl0sCiAgICAgICAgICAgICAgICB7fQogICAgICAgICAgICApLmFkZFRvKG1hcF9kZGNiNWI0ZjhlM2I0N2Y4OGI5NzUwN2ZjYWEyM2Q4MSk7CiAgICAgICAgCiAgICAKICAgICAgICB2YXIgcG9wdXBfMzM5OWFlMTQwMGRlNDI3MGE0YmY2NjhlMmIzMDY5YTMgPSBMLnBvcHVwKHsibWF4V2lkdGgiOiAiMTAwJSJ9KTsKCiAgICAgICAgCiAgICAgICAgICAgIHZhciBodG1sX2U2MTcwNWYwNzEwYjQwNDFhOGU2OWMwMDNiM2U1ODMyID0gJChgPGRpdiBpZD0iaHRtbF9lNjE3MDVmMDcxMGI0MDQxYThlNjljMDAzYjNlNTgzMiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+VGhlIENhc2Ugb2YgdGhlIEdvbGRlbiBCdWxsZXQsR2VvcmdlPC9kaXY+YClbMF07CiAgICAgICAgICAgIHBvcHVwXzMzOTlhZTE0MDBkZTQyNzBhNGJmNjY4ZTJiMzA2OWEzLnNldENvbnRlbnQoaHRtbF9lNjE3MDVmMDcxMGI0MDQxYThlNjljMDAzYjNlNTgzMik7CiAgICAgICAgCgogICAgICAgIG1hcmtlcl8xYWEyYmQ0ZWMxNTc0YjYxYjEzYzUwM2E0NjQwNmYzMi5iaW5kUG9wdXAocG9wdXBfMzM5OWFlMTQwMGRlNDI3MGE0YmY2NjhlMmIzMDY5YTMpCiAgICAgICAgOwoKICAgICAgICAKICAgIAogICAgCiAgICAgICAgICAgIHZhciBtYXJrZXJfOWU4NTZhYTMwNmYyNDJiZThlNmQ5NTIzMWVjMDEyM2MgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs1MS41MDczMjE5LCAtMC4xMjc2NDc0XSwKICAgICAgICAgICAgICAgIHt9CiAgICAgICAgICAgICkuYWRkVG8obWFwX2RkY2I1YjRmOGUzYjQ3Zjg4Yjk3NTA3ZmNhYTIzZDgxKTsKICAgICAgICAKICAgIAogICAgICAgIHZhciBwb3B1cF80YmVjM2Y3ZGMwODg0ZTRkOWUyOTU5NThjNzZiOTFmNCA9IEwucG9wdXAoeyJtYXhXaWR0aCI6ICIxMDAlIn0pOwoKICAgICAgICAKICAgICAgICAgICAgdmFyIGh0bWxfZTI1Zjg0MGU3NWEwNDAzZThiM2Q1MGI3OGY1NmUxZTcgPSAkKGA8ZGl2IGlkPSJodG1sX2UyNWY4NDBlNzVhMDQwM2U4YjNkNTBiNzhmNTZlMWU3IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5UaGUgWWVsbG93IENyYXlvbixMb25kb248L2Rpdj5gKVswXTsKICAgICAgICAgICAgcG9wdXBfNGJlYzNmN2RjMDg4NGU0ZDllMjk1OTU4Yzc2YjkxZjQuc2V0Q29udGVudChodG1sX2UyNWY4NDBlNzVhMDQwM2U4YjNkNTBiNzhmNTZlMWU3KTsKICAgICAgICAKCiAgICAgICAgbWFya2VyXzllODU2YWEzMDZmMjQyYmU4ZTZkOTUyMzFlYzAxMjNjLmJpbmRQb3B1cChwb3B1cF80YmVjM2Y3ZGMwODg0ZTRkOWUyOTU5NThjNzZiOTFmNCkKICAgICAgICA7CgogICAgICAgIAogICAgCiAgICAKICAgICAgICAgICAgdmFyIG1hcmtlcl9mMTI1MDM4NGE1ZTY0ZDlkODUxODEzYjZhZDI3YThiMCA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjcxMjcyODEsIC03NC4wMDYwMTUyXSwKICAgICAgICAgICAgICAgIHt9CiAgICAgICAgICAgICkuYWRkVG8obWFwX2RkY2I1YjRmOGUzYjQ3Zjg4Yjk3NTA3ZmNhYTIzZDgxKTsKICAgICAgICAKICAgIAogICAgICAgIHZhciBwb3B1cF9mOTE3YmEyN2FiOTg0NzdkYTZlZjY2MGFlZDU3ZmQ2OSA9IEwucG9wdXAoeyJtYXhXaWR0aCI6ICIxMDAlIn0pOwoKICAgICAgICAKICAgICAgICAgICAgdmFyIGh0bWxfMDhmYzkxYjRlNjNlNDhhZTgwZmNjNjA4YmQ0YWVhOTIgPSAkKGA8ZGl2IGlkPSJodG1sXzA4ZmM5MWI0ZTYzZTQ4YWU4MGZjYzYwOGJkNGFlYTkyIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5UaGUgV29tYW4gaW4gdGhlIEFsY292ZSxOZXcgWW9yazwvZGl2PmApWzBdOwogICAgICAgICAgICBwb3B1cF9mOTE3YmEyN2FiOTg0NzdkYTZlZjY2MGFlZDU3ZmQ2OS5zZXRDb250ZW50KGh0bWxfMDhmYzkxYjRlNjNlNDhhZTgwZmNjNjA4YmQ0YWVhOTIpOwogICAgICAgIAoKICAgICAgICBtYXJrZXJfZjEyNTAzODRhNWU2NGQ5ZDg1MTgxM2I2YWQyN2E4YjAuYmluZFBvcHVwKHBvcHVwX2Y5MTdiYTI3YWI5ODQ3N2RhNmVmNjYwYWVkNTdmZDY5KQogICAgICAgIDsKCiAgICAgICAgCiAgICAKICAgIAogICAgICAgICAgICB2YXIgbWFya2VyXzAyZTQ5NTkxMDNjZDQ1Njg4ZjBmYzkyOGI3MmVmMDM2ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbLTMzLjk2NDQ0NCwgMjIuNDU5NzIyXSwKICAgICAgICAgICAgICAgIHt9CiAgICAgICAgICAgICkuYWRkVG8obWFwX2RkY2I1YjRmOGUzYjQ3Zjg4Yjk3NTA3ZmNhYTIzZDgxKTsKICAgICAgICAKICAgIAogICAgICAgIHZhciBwb3B1cF9kOGE4MTQ4MDQ4NjU0ZWU0ODA4ZGZhMmU3M2Y5YmU4ZSA9IEwucG9wdXAoeyJtYXhXaWR0aCI6ICIxMDAlIn0pOwoKICAgICAgICAKICAgICAgICAgICAgdmFyIGh0bWxfMGUzYWIyOWVhNTNhNDdiMGEwODNmNDBiODc1MjRkODggPSAkKGA8ZGl2IGlkPSJodG1sXzBlM2FiMjllYTUzYTQ3YjBhMDgzZjQwYjg3NTI0ZDg4IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Jbml0aWFscyBPbmx5LEdlb3JnZTwvZGl2PmApWzBdOwogICAgICAgICAgICBwb3B1cF9kOGE4MTQ4MDQ4NjU0ZWU0ODA4ZGZhMmU3M2Y5YmU4ZS5zZXRDb250ZW50KGh0bWxfMGUzYWIyOWVhNTNhNDdiMGEwODNmNDBiODc1MjRkODgpOwogICAgICAgIAoKICAgICAgICBtYXJrZXJfMDJlNDk1OTEwM2NkNDU2ODhmMGZjOTI4YjcyZWYwMzYuYmluZFBvcHVwKHBvcHVwX2Q4YTgxNDgwNDg2NTRlZTQ4MDhkZmEyZTczZjliZThlKQogICAgICAgIDsKCiAgICAgICAgCiAgICAKICAgIAogICAgICAgICAgICB2YXIgbWFya2VyXzAyYTRmOTA4MGE0NzQzNDJiNGI5Y2JkZWFhOTU4YzE4ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuNDUwMTgxOCwgLTg4Ljg4NDQwNDVdLAogICAgICAgICAgICAgICAge30KICAgICAgICAgICAgKS5hZGRUbyhtYXBfZGRjYjViNGY4ZTNiNDdmODhiOTc1MDdmY2FhMjNkODEpOwogICAgICAgIAogICAgCiAgICAgICAgdmFyIHBvcHVwXzdjYjBmYTEyMGZkMzQzOWE4ZjQwZDAxMWYxOWYzZTY5ID0gTC5wb3B1cCh7Im1heFdpZHRoIjogIjEwMCUifSk7CgogICAgICAgIAogICAgICAgICAgICB2YXIgaHRtbF83NDYxOTYyNTNjZmI0NmJkOWVjMmM3ZmRlNDJlOGE4YSA9ICQoYDxkaXYgaWQ9Imh0bWxfNzQ2MTk2MjUzY2ZiNDZiZDllYzJjN2ZkZTQyZThhOGEiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlRoZSBNYW4gaW4gTG93ZXIgVGVuLEpvaG5zb248L2Rpdj5gKVswXTsKICAgICAgICAgICAgcG9wdXBfN2NiMGZhMTIwZmQzNDM5YThmNDBkMDExZjE5ZjNlNjkuc2V0Q29udGVudChodG1sXzc0NjE5NjI1M2NmYjQ2YmQ5ZWMyYzdmZGU0MmU4YThhKTsKICAgICAgICAKCiAgICAgICAgbWFya2VyXzAyYTRmOTA4MGE0NzQzNDJiNGI5Y2JkZWFhOTU4YzE4LmJpbmRQb3B1cChwb3B1cF83Y2IwZmExMjBmZDM0MzlhOGY0MGQwMTFmMTlmM2U2OSkKICAgICAgICA7CgogICAgICAgIAogICAgCiAgICAKICAgICAgICAgICAgdmFyIG1hcmtlcl9kNWYwMzI1OWEwZjY0ZTcxYjM3OTJlMjIyMmY2ZmQzYiA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQ4Ljc1MzU1NCwgMi4yOTU5NDIzXSwKICAgICAgICAgICAgICAgIHt9CiAgICAgICAgICAgICkuYWRkVG8obWFwX2RkY2I1YjRmOGUzYjQ3Zjg4Yjk3NTA3ZmNhYTIzZDgxKTsKICAgICAgICAKICAgIAogICAgICAgIHZhciBwb3B1cF9jNGRhOTAxYTI1MTg0MWIzYmFlMWNhMTg5OGQ2NzAyMCA9IEwucG9wdXAoeyJtYXhXaWR0aCI6ICIxMDAlIn0pOwoKICAgICAgICAKICAgICAgICAgICAgdmFyIGh0bWxfMmZmZDEzYzFhYWI1NGFlNGEyNGEyOTIyMTVhYzljNTIgPSAkKGA8ZGl2IGlkPSJodG1sXzJmZmQxM2MxYWFiNTRhZTRhMjRhMjkyMjE1YWM5YzUyIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5UaGUgUmVkIEhvdXNlIE15c3RlcnksQW50b255PC9kaXY+YClbMF07CiAgICAgICAgICAgIHBvcHVwX2M0ZGE5MDFhMjUxODQxYjNiYWUxY2ExODk4ZDY3MDIwLnNldENvbnRlbnQoaHRtbF8yZmZkMTNjMWFhYjU0YWU0YTI0YTI5MjIxNWFjOWM1Mik7CiAgICAgICAgCgogICAgICAgIG1hcmtlcl9kNWYwMzI1OWEwZjY0ZTcxYjM3OTJlMjIyMmY2ZmQzYi5iaW5kUG9wdXAocG9wdXBfYzRkYTkwMWEyNTE4NDFiM2JhZTFjYTE4OThkNjcwMjApCiAgICAgICAgOwoKICAgICAgICAKICAgIAogICAgCiAgICAgICAgICAgIHZhciBtYXJrZXJfNjVhZmQwZDRmMDJjNGY5M2E2YTdlZGFmYTUxZTA3YjYgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs1MS41MDczMjE5LCAtMC4xMjc2NDc0XSwKICAgICAgICAgICAgICAgIHt9CiAgICAgICAgICAgICkuYWRkVG8obWFwX2RkY2I1YjRmOGUzYjQ3Zjg4Yjk3NTA3ZmNhYTIzZDgxKTsKICAgICAgICAKICAgIAogICAgICAgIHZhciBwb3B1cF9hMmZiYzY5OWQxYzE0OTk2Yjg3NjUwMGIzYzcwN2ZhMiA9IEwucG9wdXAoeyJtYXhXaWR0aCI6ICIxMDAlIn0pOwoKICAgICAgICAKICAgICAgICAgICAgdmFyIGh0bWxfMDQ1ZGQyNTY5ZTA2NDIwMmJhMDhlOGU2YjRjNjA5MzQgPSAkKGA8ZGl2IGlkPSJodG1sXzA0NWRkMjU2OWUwNjQyMDJiYTA4ZThlNmI0YzYwOTM0IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5BIE1pbGxpb25haXJlIG9mIFllc3RlcmRheSxMb25kb248L2Rpdj5gKVswXTsKICAgICAgICAgICAgcG9wdXBfYTJmYmM2OTlkMWMxNDk5NmI4NzY1MDBiM2M3MDdmYTIuc2V0Q29udGVudChodG1sXzA0NWRkMjU2OWUwNjQyMDJiYTA4ZThlNmI0YzYwOTM0KTsKICAgICAgICAKCiAgICAgICAgbWFya2VyXzY1YWZkMGQ0ZjAyYzRmOTNhNmE3ZWRhZmE1MWUwN2I2LmJpbmRQb3B1cChwb3B1cF9hMmZiYzY5OWQxYzE0OTk2Yjg3NjUwMGIzYzcwN2ZhMikKICAgICAgICA7CgogICAgICAgIAogICAgCiAgICAKICAgICAgICAgICAgdmFyIG1hcmtlcl8xNmIzYjIzOTVlNzM0YzBiYjUyYzhkY2M0ZDA0NjUwNiA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQxLjYwOTYwMjksIC05My43NzU0MzUyXSwKICAgICAgICAgICAgICAgIHt9CiAgICAgICAgICAgICkuYWRkVG8obWFwX2RkY2I1YjRmOGUzYjQ3Zjg4Yjk3NTA3ZmNhYTIzZDgxKTsKICAgICAgICAKICAgIAogICAgICAgIHZhciBwb3B1cF9mZWRjMDE4YmZhNTc0ZmFlYTU3MzI5N2Q4MjcxMWE5NyA9IEwucG9wdXAoeyJtYXhXaWR0aCI6ICIxMDAlIn0pOwoKICAgICAgICAKICAgICAgICAgICAgdmFyIGh0bWxfZGJkY2U1YTViNGY1NDFmOWI0MzE2ZTQ5N2U4ZTU3OTQgPSAkKGA8ZGl2IGlkPSJodG1sX2RiZGNlNWE1YjRmNTQxZjliNDMxNmU0OTdlOGU1Nzk0IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5UaGUgQml0dGVybWVhZHMgTXlzdGVyeSxDbGl2ZTwvZGl2PmApWzBdOwogICAgICAgICAgICBwb3B1cF9mZWRjMDE4YmZhNTc0ZmFlYTU3MzI5N2Q4MjcxMWE5Ny5zZXRDb250ZW50KGh0bWxfZGJkY2U1YTViNGY1NDFmOWI0MzE2ZTQ5N2U4ZTU3OTQpOwogICAgICAgIAoKICAgICAgICBtYXJrZXJfMTZiM2IyMzk1ZTczNGMwYmI1MmM4ZGNjNGQwNDY1MDYuYmluZFBvcHVwKHBvcHVwX2ZlZGMwMThiZmE1NzRmYWVhNTczMjk3ZDgyNzExYTk3KQogICAgICAgIDsKCiAgICAgICAgCiAgICAKICAgIAogICAgICAgICAgICB2YXIgbWFya2VyXzNlNGY2NjkyNGJlNTRkNmZhNDVkMGY4OTQ4YTFjZDRiID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNTEuNTA3MzIxOSwgLTAuMTI3NjQ3NF0sCiAgICAgICAgICAgICAgICB7fQogICAgICAgICAgICApLmFkZFRvKG1hcF9kZGNiNWI0ZjhlM2I0N2Y4OGI5NzUwN2ZjYWEyM2Q4MSk7CiAgICAgICAgCiAgICAKICAgICAgICB2YXIgcG9wdXBfMWU1MjhhZjcxZmI5NGE2YThkZDQ5MGVlYjQ0YmU5NjQgPSBMLnBvcHVwKHsibWF4V2lkdGgiOiAiMTAwJSJ9KTsKCiAgICAgICAgCiAgICAgICAgICAgIHZhciBodG1sXzhhN2U0ZWJkNDU2YzRjMjY5MjcyMDE1YjM2OTIyZGFjID0gJChgPGRpdiBpZD0iaHRtbF84YTdlNGViZDQ1NmM0YzI2OTI3MjAxNWIzNjkyMmRhYyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+VGhlIFF1ZWVuIG9mIEhlYXJ0cyxMb25kb248L2Rpdj5gKVswXTsKICAgICAgICAgICAgcG9wdXBfMWU1MjhhZjcxZmI5NGE2YThkZDQ5MGVlYjQ0YmU5NjQuc2V0Q29udGVudChodG1sXzhhN2U0ZWJkNDU2YzRjMjY5MjcyMDE1YjM2OTIyZGFjKTsKICAgICAgICAKCiAgICAgICAgbWFya2VyXzNlNGY2NjkyNGJlNTRkNmZhNDVkMGY4OTQ4YTFjZDRiLmJpbmRQb3B1cChwb3B1cF8xZTUyOGFmNzFmYjk0YTZhOGRkNDkwZWViNDRiZTk2NCkKICAgICAgICA7CgogICAgICAgIAogICAgCiAgICAKICAgICAgICAgICAgdmFyIG1hcmtlcl9kM2VjNTQwYTAxNWE0NGE4OTQxOTg0ODMzZmM3NTExOCA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWy0zMi43MDgxNzcsIDE1MS41MjY4NDM3MzM5ODVdLAogICAgICAgICAgICAgICAge30KICAgICAgICAgICAgKS5hZGRUbyhtYXBfZGRjYjViNGY4ZTNiNDdmODhiOTc1MDdmY2FhMjNkODEpOwogICAgICAgIAogICAgCiAgICAgICAgdmFyIHBvcHVwXzIzZjkwMWIwMGIyYTQxNGVhNDRhNWQ0OWM2N2E5Yzg3ID0gTC5wb3B1cCh7Im1heFdpZHRoIjogIjEwMCUifSk7CgogICAgICAgIAogICAgICAgICAgICB2YXIgaHRtbF81ZGJkZGViMzQ5ZTk0MTZlYmNkYTNiODUwYzFmNzIzMiA9ICQoYDxkaXYgaWQ9Imh0bWxfNWRiZGRlYjM0OWU5NDE2ZWJjZGEzYjg1MGMxZjcyMzIiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlRoZSBEYXJyb3cgRW5pZ21hLE1haXRsYW5kPC9kaXY+YClbMF07CiAgICAgICAgICAgIHBvcHVwXzIzZjkwMWIwMGIyYTQxNGVhNDRhNWQ0OWM2N2E5Yzg3LnNldENvbnRlbnQoaHRtbF81ZGJkZGViMzQ5ZTk0MTZlYmNkYTNiODUwYzFmNzIzMik7CiAgICAgICAgCgogICAgICAgIG1hcmtlcl9kM2VjNTQwYTAxNWE0NGE4OTQxOTg0ODMzZmM3NTExOC5iaW5kUG9wdXAocG9wdXBfMjNmOTAxYjAwYjJhNDE0ZWE0NGE1ZDQ5YzY3YTljODcpCiAgICAgICAgOwoKICAgICAgICAKICAgIAogICAgCiAgICAgICAgICAgIHZhciBtYXJrZXJfYjMxOWI2M2Y0N2UwNGZkMzliZTIyMDU4OWIyYTM3NWQgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFszNy40NTAxODE4LCAtODguODg0NDA0NV0sCiAgICAgICAgICAgICAgICB7fQogICAgICAgICAgICApLmFkZFRvKG1hcF9kZGNiNWI0ZjhlM2I0N2Y4OGI5NzUwN2ZjYWEyM2Q4MSk7CiAgICAgICAgCiAgICAKICAgICAgICB2YXIgcG9wdXBfNDAyMGZjN2NlYTU5NDFhMDhkYTljZjAxZDZiOGRmODIgPSBMLnBvcHVwKHsibWF4V2lkdGgiOiAiMTAwJSJ9KTsKCiAgICAgICAgCiAgICAgICAgICAgIHZhciBodG1sXzk3Yzk3YjlmMjc2YjQzMzY4MzI4NWE4OTZiZTcxYTU3ID0gJChgPGRpdiBpZD0iaHRtbF85N2M5N2I5ZjI3NmI0MzM2ODMyODVhODk2YmU3MWE1NyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+U2lnaHQgVW5zZWVuLEpvaG5zb248L2Rpdj5gKVswXTsKICAgICAgICAgICAgcG9wdXBfNDAyMGZjN2NlYTU5NDFhMDhkYTljZjAxZDZiOGRmODIuc2V0Q29udGVudChodG1sXzk3Yzk3YjlmMjc2YjQzMzY4MzI4NWE4OTZiZTcxYTU3KTsKICAgICAgICAKCiAgICAgICAgbWFya2VyX2IzMTliNjNmNDdlMDRmZDM5YmUyMjA1ODliMmEzNzVkLmJpbmRQb3B1cChwb3B1cF80MDIwZmM3Y2VhNTk0MWEwOGRhOWNmMDFkNmI4ZGY4MikKICAgICAgICA7CgogICAgICAgIAogICAgCiAgICAKICAgICAgICAgICAgdmFyIG1hcmtlcl83Nzk4YWYyY2E5YjM0OWQyYTRmMDVhZmE4OTgwZmExNyA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQ4Ljg1NjYxMDEsIDIuMzUxNDk5Ml0sCiAgICAgICAgICAgICAgICB7fQogICAgICAgICAgICApLmFkZFRvKG1hcF9kZGNiNWI0ZjhlM2I0N2Y4OGI5NzUwN2ZjYWEyM2Q4MSk7CiAgICAgICAgCiAgICAKICAgICAgICB2YXIgcG9wdXBfYTI5M2RhYjg5OWQyNDNjYjhhMmM4YzUxYTVlMTg2MjMgPSBMLnBvcHVwKHsibWF4V2lkdGgiOiAiMTAwJSJ9KTsKCiAgICAgICAgCiAgICAgICAgICAgIHZhciBodG1sX2Q4MTk0NjdkNTliMDQwYWVhYWM1MjNhMzU3MTM2YzRjID0gJChgPGRpdiBpZD0iaHRtbF9kODE5NDY3ZDU5YjA0MGFlYWFjNTIzYTM1NzEzNmM0YyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+UGV0ZXIgUnVmZiBhbmQgdGhlIERvdWJsZSBGb3VyLFBhcmlzPC9kaXY+YClbMF07CiAgICAgICAgICAgIHBvcHVwX2EyOTNkYWI4OTlkMjQzY2I4YTJjOGM1MWE1ZTE4NjIzLnNldENvbnRlbnQoaHRtbF9kODE5NDY3ZDU5YjA0MGFlYWFjNTIzYTM1NzEzNmM0Yyk7CiAgICAgICAgCgogICAgICAgIG1hcmtlcl83Nzk4YWYyY2E5YjM0OWQyYTRmMDVhZmE4OTgwZmExNy5iaW5kUG9wdXAocG9wdXBfYTI5M2RhYjg5OWQyNDNjYjhhMmM4YzUxYTVlMTg2MjMpCiAgICAgICAgOwoKICAgICAgICAKICAgIAogICAgCiAgICAgICAgICAgIHZhciBtYXJrZXJfODQzMTY5NzM2Y2NkNGY2YjkwMWU3ZTZlYzMwODI0ODIgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC4wMzM4MTQsIC04My4xNTk2MTA4XSwKICAgICAgICAgICAgICAgIHt9CiAgICAgICAgICAgICkuYWRkVG8obWFwX2RkY2I1YjRmOGUzYjQ3Zjg4Yjk3NTA3ZmNhYTIzZDgxKTsKICAgICAgICAKICAgIAogICAgICAgIHZhciBwb3B1cF84MWE4ZmUxYzcwOGQ0NTNmYTVlODZhMjRhYzM1OTFmOCA9IEwucG9wdXAoeyJtYXhXaWR0aCI6ICIxMDAlIn0pOwoKICAgICAgICAKICAgICAgICAgICAgdmFyIGh0bWxfZDRhNDc0MGIwZGNjNGJmNGIzNTBjYWNhMzFmMDhkZTUgPSAkKGA8ZGl2IGlkPSJodG1sX2Q0YTQ3NDBiMGRjYzRiZjRiMzUwY2FjYTMxZjA4ZGU1IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5UaGUgUGl0IFByb3AgU3luZGljYXRlLEhpbGxpYXJkPC9kaXY+YClbMF07CiAgICAgICAgICAgIHBvcHVwXzgxYThmZTFjNzA4ZDQ1M2ZhNWU4NmEyNGFjMzU5MWY4LnNldENvbnRlbnQoaHRtbF9kNGE0NzQwYjBkY2M0YmY0YjM1MGNhY2EzMWYwOGRlNSk7CiAgICAgICAgCgogICAgICAgIG1hcmtlcl84NDMxNjk3MzZjY2Q0ZjZiOTAxZTdlNmVjMzA4MjQ4Mi5iaW5kUG9wdXAocG9wdXBfODFhOGZlMWM3MDhkNDUzZmE1ZTg2YTI0YWMzNTkxZjgpCiAgICAgICAgOwoKICAgICAgICAKICAgIAogICAgCiAgICAgICAgICAgIHZhciBtYXJrZXJfYTUwNjEwYmQxOTBjNGRiNjk2NjAwZmNhMzdmZmZiMDAgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFszMy4zMDYyMjIzLCAtMTExLjg0MTMzMTddLAogICAgICAgICAgICAgICAge30KICAgICAgICAgICAgKS5hZGRUbyhtYXBfZGRjYjViNGY4ZTNiNDdmODhiOTc1MDdmY2FhMjNkODEpOwogICAgICAgIAogICAgCiAgICAgICAgdmFyIHBvcHVwX2JhZDcwMzRkMWRjNjQyMDlhZjlmOGYwNGQ4MTRiY2U1ID0gTC5wb3B1cCh7Im1heFdpZHRoIjogIjEwMCUifSk7CgogICAgICAgIAogICAgICAgICAgICB2YXIgaHRtbF80YWJjMzc2NTc0ODM0OTI0ODgxOTYxNTYxNmEyNmUxMCA9ICQoYDxkaXYgaWQ9Imh0bWxfNGFiYzM3NjU3NDgzNDkyNDg4MTk2MTU2MTZhMjZlMTAiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlRoZSBMb2RnZXIsQ2hhbmRsZXI8L2Rpdj5gKVswXTsKICAgICAgICAgICAgcG9wdXBfYmFkNzAzNGQxZGM2NDIwOWFmOWY4ZjA0ZDgxNGJjZTUuc2V0Q29udGVudChodG1sXzRhYmMzNzY1NzQ4MzQ5MjQ4ODE5NjE1NjE2YTI2ZTEwKTsKICAgICAgICAKCiAgICAgICAgbWFya2VyX2E1MDYxMGJkMTkwYzRkYjY5NjYwMGZjYTM3ZmZmYjAwLmJpbmRQb3B1cChwb3B1cF9iYWQ3MDM0ZDFkYzY0MjA5YWY5ZjhmMDRkODE0YmNlNSkKICAgICAgICA7CgogICAgICAgIAogICAgCiAgICAKICAgICAgICAgICAgdmFyIG1hcmtlcl8yZmE4YTFjNWY4Y2Y0MjNkYjc5NzQ2YTk0NTFjYWEwNSA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzMxLjM5NDA5NjksIC04NS42MjM3NjNdLAogICAgICAgICAgICAgICAge30KICAgICAgICAgICAgKS5hZGRUbyhtYXBfZGRjYjViNGY4ZTNiNDdmODhiOTc1MDdmY2FhMjNkODEpOwogICAgICAgIAogICAgCiAgICAgICAgdmFyIHBvcHVwXzQ1ZmE3ZjdhMjA4OTQ5N2Y5ZGE1NzBhMzJiYzA5Njc4ID0gTC5wb3B1cCh7Im1heFdpZHRoIjogIjEwMCUifSk7CgogICAgICAgIAogICAgICAgICAgICB2YXIgaHRtbF81OWUxZTFlNDgyM2M0MzlkOWIzYTk1NTkyMGMxODgwMyA9ICQoYDxkaXYgaWQ9Imh0bWxfNTllMWUxZTQ4MjNjNDM5ZDliM2E5NTU5MjBjMTg4MDMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlRoZSBCYXQsRGFsZTwvZGl2PmApWzBdOwogICAgICAgICAgICBwb3B1cF80NWZhN2Y3YTIwODk0OTdmOWRhNTcwYTMyYmMwOTY3OC5zZXRDb250ZW50KGh0bWxfNTllMWUxZTQ4MjNjNDM5ZDliM2E5NTU5MjBjMTg4MDMpOwogICAgICAgIAoKICAgICAgICBtYXJrZXJfMmZhOGExYzVmOGNmNDIzZGI3OTc0NmE5NDUxY2FhMDUuYmluZFBvcHVwKHBvcHVwXzQ1ZmE3ZjdhMjA4OTQ5N2Y5ZGE1NzBhMzJiYzA5Njc4KQogICAgICAgIDsKCiAgICAgICAgCiAgICAKICAgIAogICAgICAgICAgICB2YXIgbWFya2VyX2M3NGVjMDM0YTBkNzQyYjlhNWY0M2I4NjI5OTQ0MDA2ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNTEuNTA3MzIxOSwgLTAuMTI3NjQ3NF0sCiAgICAgICAgICAgICAgICB7fQogICAgICAgICAgICApLmFkZFRvKG1hcF9kZGNiNWI0ZjhlM2I0N2Y4OGI5NzUwN2ZjYWEyM2Q4MSk7CiAgICAgICAgCiAgICAKICAgICAgICB2YXIgcG9wdXBfYTEzNGM0YzdmZDBkNDA0N2JhOTI3Zjg1NDkzMWY4YmIgPSBMLnBvcHVwKHsibWF4V2lkdGgiOiAiMTAwJSJ9KTsKCiAgICAgICAgCiAgICAgICAgICAgIHZhciBodG1sX2Q5M2ZhMTE4MDE2MDQzYWI4MzVhNjhlMjAxYjg2NDU0ID0gJChgPGRpdiBpZD0iaHRtbF9kOTNmYTExODAxNjA0M2FiODM1YTY4ZTIwMWI4NjQ1NCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+VGhlIFllbGxvdyBDbGF3LExvbmRvbjwvZGl2PmApWzBdOwogICAgICAgICAgICBwb3B1cF9hMTM0YzRjN2ZkMGQ0MDQ3YmE5MjdmODU0OTMxZjhiYi5zZXRDb250ZW50KGh0bWxfZDkzZmExMTgwMTYwNDNhYjgzNWE2OGUyMDFiODY0NTQpOwogICAgICAgIAoKICAgICAgICBtYXJrZXJfYzc0ZWMwMzRhMGQ3NDJiOWE1ZjQzYjg2Mjk5NDQwMDYuYmluZFBvcHVwKHBvcHVwX2ExMzRjNGM3ZmQwZDQwNDdiYTkyN2Y4NTQ5MzFmOGJiKQogICAgICAgIDsKCiAgICAgICAgCiAgICAKICAgIAogICAgICAgICAgICB2YXIgbWFya2VyX2VlYzg5NTc1NzRiYjRiNzg4YTYzZDY0NTM1NWRjM2VmID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuNTY5MjExOCwgLTk1Ljc0NTI2MzldLAogICAgICAgICAgICAgICAge30KICAgICAgICAgICAgKS5hZGRUbyhtYXBfZGRjYjViNGY4ZTNiNDdmODhiOTc1MDdmY2FhMjNkODEpOwogICAgICAgIAogICAgCiAgICAgICAgdmFyIHBvcHVwXzE4NTNkZjU4MTBlMjRkYTE5OTFlZjlkYmY3NGM0OGUxID0gTC5wb3B1cCh7Im1heFdpZHRoIjogIjEwMCUifSk7CgogICAgICAgIAogICAgICAgICAgICB2YXIgaHRtbF85ZTg2MDQ1OGIyY2U0MGZkYjNlNWQ0MzZjMTc5YzE2ZSA9ICQoYDxkaXYgaWQ9Imh0bWxfOWU4NjA0NThiMmNlNDBmZGIzZTVkNDM2YzE3OWMxNmUiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlRoZSBMb2NrIGFuZCBLZXkgTGlicmFyeTogQ2xhc3NpYyBNeXN0ZXJ5IGFuZCBEZXRlY3RpdmUgU3RvcmllczogTW9kZXJuIEVuZ2xpc2gsV2lsc29uPC9kaXY+YClbMF07CiAgICAgICAgICAgIHBvcHVwXzE4NTNkZjU4MTBlMjRkYTE5OTFlZjlkYmY3NGM0OGUxLnNldENvbnRlbnQoaHRtbF85ZTg2MDQ1OGIyY2U0MGZkYjNlNWQ0MzZjMTc5YzE2ZSk7CiAgICAgICAgCgogICAgICAgIG1hcmtlcl9lZWM4OTU3NTc0YmI0Yjc4OGE2M2Q2NDUzNTVkYzNlZi5iaW5kUG9wdXAocG9wdXBfMTg1M2RmNTgxMGUyNGRhMTk5MWVmOWRiZjc0YzQ4ZTEpCiAgICAgICAgOwoKICAgICAgICAKICAgIAogICAgCiAgICAgICAgICAgIHZhciBtYXJrZXJfYWU0ZDZkYjMxZmI5NDBkYmJmNDJjZGY4ODc3YWNhMmIgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs0MS43NTcxNzAxLCAtODguMzE0NzUzOV0sCiAgICAgICAgICAgICAgICB7fQogICAgICAgICAgICApLmFkZFRvKG1hcF9kZGNiNWI0ZjhlM2I0N2Y4OGI5NzUwN2ZjYWEyM2Q4MSk7CiAgICAgICAgCiAgICAKICAgICAgICB2YXIgcG9wdXBfZTBmZTBlMWJlOTljNDI3OGIxY2YwYjYyODI0ZDc1YjIgPSBMLnBvcHVwKHsibWF4V2lkdGgiOiAiMTAwJSJ9KTsKCiAgICAgICAgCiAgICAgICAgICAgIHZhciBodG1sXzljYTFiMzcxZTdmZTRlOTY4YzA4MDI3YTU4NTNhYjBmID0gJChgPGRpdiBpZD0iaHRtbF85Y2ExYjM3MWU3ZmU0ZTk2OGMwODAyN2E1ODUzYWIwZiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+VGhlIFNpZ24gb2YgdGhlIEZvdXIsQXVyb3JhPC9kaXY+YClbMF07CiAgICAgICAgICAgIHBvcHVwX2UwZmUwZTFiZTk5YzQyNzhiMWNmMGI2MjgyNGQ3NWIyLnNldENvbnRlbnQoaHRtbF85Y2ExYjM3MWU3ZmU0ZTk2OGMwODAyN2E1ODUzYWIwZik7CiAgICAgICAgCgogICAgICAgIG1hcmtlcl9hZTRkNmRiMzFmYjk0MGRiYmY0MmNkZjg4NzdhY2EyYi5iaW5kUG9wdXAocG9wdXBfZTBmZTBlMWJlOTljNDI3OGIxY2YwYjYyODI0ZDc1YjIpCiAgICAgICAgOwoKICAgICAgICAKICAgIAogICAgCiAgICAgICAgICAgIHZhciBtYXJrZXJfOTJiNzg4ZDAwYjM4NGE3OGE5YjcwOWU2NWJmMmZhNDAgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs0OC44NTY2MTAxLCAyLjM1MTQ5OTJdLAogICAgICAgICAgICAgICAge30KICAgICAgICAgICAgKS5hZGRUbyhtYXBfZGRjYjViNGY4ZTNiNDdmODhiOTc1MDdmY2FhMjNkODEpOwogICAgICAgIAogICAgCiAgICAgICAgdmFyIHBvcHVwXzEyNWFlYWMwMDU5ZjQ0Y2FhYTg0YzUzYmJjOTkzZGZhID0gTC5wb3B1cCh7Im1heFdpZHRoIjogIjEwMCUifSk7CgogICAgICAgIAogICAgICAgICAgICB2YXIgaHRtbF80ZjFlOGI2MDZjNGI0MzMyODE3MWVjNjVkODA5YmM2YSA9ICQoYDxkaXYgaWQ9Imh0bWxfNGYxZThiNjA2YzRiNDMzMjgxNzFlYzY1ZDgwOWJjNmEiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlRoZSBDcmltZSBvZiBTeWx2ZXN0cmUgQm9ubmFyZCxQYXJpczwvZGl2PmApWzBdOwogICAgICAgICAgICBwb3B1cF8xMjVhZWFjMDA1OWY0NGNhYWE4NGM1M2JiYzk5M2RmYS5zZXRDb250ZW50KGh0bWxfNGYxZThiNjA2YzRiNDMzMjgxNzFlYzY1ZDgwOWJjNmEpOwogICAgICAgIAoKICAgICAgICBtYXJrZXJfOTJiNzg4ZDAwYjM4NGE3OGE5YjcwOWU2NWJmMmZhNDAuYmluZFBvcHVwKHBvcHVwXzEyNWFlYWMwMDU5ZjQ0Y2FhYTg0YzUzYmJjOTkzZGZhKQogICAgICAgIDsKCiAgICAgICAgCiAgICAKICAgIAogICAgICAgICAgICB2YXIgbWFya2VyX2UxYjgzMjY2ZTA4NjQ5YTBhNDExMDAwZDU0YWI0YTdhID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNTEuNDUzODAyMiwgLTIuNTk3Mjk4NV0sCiAgICAgICAgICAgICAgICB7fQogICAgICAgICAgICApLmFkZFRvKG1hcF9kZGNiNWI0ZjhlM2I0N2Y4OGI5NzUwN2ZjYWEyM2Q4MSk7CiAgICAgICAgCiAgICAKICAgICAgICB2YXIgcG9wdXBfOGFlMzhjMzE5ZmI2NGYyYzlhNzgwMjg3MWU4YjQwMTggPSBMLnBvcHVwKHsibWF4V2lkdGgiOiAiMTAwJSJ9KTsKCiAgICAgICAgCiAgICAgICAgICAgIHZhciBodG1sXzZlZDRiODQ2OWJmYzQ1ODg4YzlmMTM3OTA5NzFiOWYyID0gJChgPGRpdiBpZD0iaHRtbF82ZWQ0Yjg0NjliZmM0NTg4OGM5ZjEzNzkwOTcxYjlmMiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+VGhlIFF1ZXN0IG9mIHRoZSBTYWNyZWQgU2xpcHBlcixCcmlzdG9sPC9kaXY+YClbMF07CiAgICAgICAgICAgIHBvcHVwXzhhZTM4YzMxOWZiNjRmMmM5YTc4MDI4NzFlOGI0MDE4LnNldENvbnRlbnQoaHRtbF82ZWQ0Yjg0NjliZmM0NTg4OGM5ZjEzNzkwOTcxYjlmMik7CiAgICAgICAgCgogICAgICAgIG1hcmtlcl9lMWI4MzI2NmUwODY0OWEwYTQxMTAwMGQ1NGFiNGE3YS5iaW5kUG9wdXAocG9wdXBfOGFlMzhjMzE5ZmI2NGYyYzlhNzgwMjg3MWU4YjQwMTgpCiAgICAgICAgOwoKICAgICAgICAKICAgIAogICAgCiAgICAgICAgICAgIHZhciBtYXJrZXJfY2IyZjQ2Y2Q3N2MyNDUwNmFjZDcxZDU0ZWZkY2IzZmUgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43Mzk2NDUwNSwgLTc0LjAwODkyMDk1MDI4OThdLAogICAgICAgICAgICAgICAge30KICAgICAgICAgICAgKS5hZGRUbyhtYXBfZGRjYjViNGY4ZTNiNDdmODhiOTc1MDdmY2FhMjNkODEpOwogICAgICAgIAogICAgCiAgICAgICAgdmFyIHBvcHVwXzczMjlkNmQ5MTRhYzQ1OGViZTFkYjhiOGIzNDQ3NzVlID0gTC5wb3B1cCh7Im1heFdpZHRoIjogIjEwMCUifSk7CgogICAgICAgIAogICAgICAgICAgICB2YXIgaHRtbF9mZDRjOWQ2ZjgyYTc0MWE5YWE4OTVjMGFhOGM2YTZiMSA9ICQoYDxkaXYgaWQ9Imh0bWxfZmQ0YzlkNmY4MmE3NDFhOWFhODk1YzBhYThjNmE2YjEiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlRoYXQgTWFpbndhcmluZyBBZmZhaXIsV2hpdG5leTwvZGl2PmApWzBdOwogICAgICAgICAgICBwb3B1cF83MzI5ZDZkOTE0YWM0NThlYmUxZGI4YjhiMzQ0Nzc1ZS5zZXRDb250ZW50KGh0bWxfZmQ0YzlkNmY4MmE3NDFhOWFhODk1YzBhYThjNmE2YjEpOwogICAgICAgIAoKICAgICAgICBtYXJrZXJfY2IyZjQ2Y2Q3N2MyNDUwNmFjZDcxZDU0ZWZkY2IzZmUuYmluZFBvcHVwKHBvcHVwXzczMjlkNmQ5MTRhYzQ1OGViZTFkYjhiOGIzNDQ3NzVlKQogICAgICAgIDsKCiAgICAgICAgCiAgICAKICAgIAogICAgICAgICAgICB2YXIgbWFya2VyXzljYTQzNWU4NzAzZTQ5Zjc4YzdiMGQ3NTVmNzNlMzkwID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNTEuNTA3MzIxOSwgLTAuMTI3NjQ3NF0sCiAgICAgICAgICAgICAgICB7fQogICAgICAgICAgICApLmFkZFRvKG1hcF9kZGNiNWI0ZjhlM2I0N2Y4OGI5NzUwN2ZjYWEyM2Q4MSk7CiAgICAgICAgCiAgICAKICAgICAgICB2YXIgcG9wdXBfYWVjYjVkMTM4YzZmNGY4NTlhYTJjMTAyNjUzZTk1ZTMgPSBMLnBvcHVwKHsibWF4V2lkdGgiOiAiMTAwJSJ9KTsKCiAgICAgICAgCiAgICAgICAgICAgIHZhciBodG1sXzVjZGY0ZjQ5ODVlYjQ3Y2ZiN2M5ZGI1NGEwYzg2Y2VjID0gJChgPGRpdiBpZD0iaHRtbF81Y2RmNGY0OTg1ZWI0N2NmYjdjOWRiNTRhMGM4NmNlYyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+SGF2b2MsTG9uZG9uPC9kaXY+YClbMF07CiAgICAgICAgICAgIHBvcHVwX2FlY2I1ZDEzOGM2ZjRmODU5YWEyYzEwMjY1M2U5NWUzLnNldENvbnRlbnQoaHRtbF81Y2RmNGY0OTg1ZWI0N2NmYjdjOWRiNTRhMGM4NmNlYyk7CiAgICAgICAgCgogICAgICAgIG1hcmtlcl85Y2E0MzVlODcwM2U0OWY3OGM3YjBkNzU1ZjczZTM5MC5iaW5kUG9wdXAocG9wdXBfYWVjYjVkMTM4YzZmNGY4NTlhYTJjMTAyNjUzZTk1ZTMpCiAgICAgICAgOwoKICAgICAgICAKICAgIAogICAgCiAgICAgICAgICAgIHZhciBtYXJrZXJfYzg0M2Y1NmFiZGNkNGNjNzg1MjViMmRkMTkzNWU2NmMgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs1MS41MDczMjE5LCAtMC4xMjc2NDc0XSwKICAgICAgICAgICAgICAgIHt9CiAgICAgICAgICAgICkuYWRkVG8obWFwX2RkY2I1YjRmOGUzYjQ3Zjg4Yjk3NTA3ZmNhYTIzZDgxKTsKICAgICAgICAKICAgIAogICAgICAgIHZhciBwb3B1cF85OGQ4NGU0Zjk5YTA0MTY4YTJiYzM0ZWViMDFjN2FmMyA9IEwucG9wdXAoeyJtYXhXaWR0aCI6ICIxMDAlIn0pOwoKICAgICAgICAKICAgICAgICAgICAgdmFyIGh0bWxfYjhlNWQzMjgyMWNhNGRlOGI5ODFkNjExZDRjNWFhODkgPSAkKGA8ZGl2IGlkPSJodG1sX2I4ZTVkMzI4MjFjYTRkZThiOTgxZDYxMWQ0YzVhYTg5IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5UaGUgQWR2ZW50dXJlIG9mIHRoZSBEeWluZyBEZXRlY3RpdmUsTG9uZG9uPC9kaXY+YClbMF07CiAgICAgICAgICAgIHBvcHVwXzk4ZDg0ZTRmOTlhMDQxNjhhMmJjMzRlZWIwMWM3YWYzLnNldENvbnRlbnQoaHRtbF9iOGU1ZDMyODIxY2E0ZGU4Yjk4MWQ2MTFkNGM1YWE4OSk7CiAgICAgICAgCgogICAgICAgIG1hcmtlcl9jODQzZjU2YWJkY2Q0Y2M3ODUyNWIyZGQxOTM1ZTY2Yy5iaW5kUG9wdXAocG9wdXBfOThkODRlNGY5OWEwNDE2OGEyYmMzNGVlYjAxYzdhZjMpCiAgICAgICAgOwoKICAgICAgICAKICAgIAogICAgCiAgICAgICAgICAgIHZhciBtYXJrZXJfNzBiMDc1NWRjMDRkNGVlODhhYTk3ZmY3NzdjMmIyNzEgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs1MS41MDczMjE5LCAtMC4xMjc2NDc0XSwKICAgICAgICAgICAgICAgIHt9CiAgICAgICAgICAgICkuYWRkVG8obWFwX2RkY2I1YjRmOGUzYjQ3Zjg4Yjk3NTA3ZmNhYTIzZDgxKTsKICAgICAgICAKICAgIAogICAgICAgIHZhciBwb3B1cF84Y2QxOTlkZDUwZjk0NDFjOTlkZWVkMGEzOWYxYmY4ZiA9IEwucG9wdXAoeyJtYXhXaWR0aCI6ICIxMDAlIn0pOwoKICAgICAgICAKICAgICAgICAgICAgdmFyIGh0bWxfYzk2ZGFiZWEzZDc2NGUxNDg4YzQ2M2ZiNjRlZmMxNDkgPSAkKGA8ZGl2IGlkPSJodG1sX2M5NmRhYmVhM2Q3NjRlMTQ4OGM0NjNmYjY0ZWZjMTQ5IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5UaGUgRGlzYXBwZWFyYW5jZSBvZiBMYWR5IEZyYW5jZXMgQ2FyZmF4LExvbmRvbjwvZGl2PmApWzBdOwogICAgICAgICAgICBwb3B1cF84Y2QxOTlkZDUwZjk0NDFjOTlkZWVkMGEzOWYxYmY4Zi5zZXRDb250ZW50KGh0bWxfYzk2ZGFiZWEzZDc2NGUxNDg4YzQ2M2ZiNjRlZmMxNDkpOwogICAgICAgIAoKICAgICAgICBtYXJrZXJfNzBiMDc1NWRjMDRkNGVlODhhYTk3ZmY3NzdjMmIyNzEuYmluZFBvcHVwKHBvcHVwXzhjZDE5OWRkNTBmOTQ0MWM5OWRlZWQwYTM5ZjFiZjhmKQogICAgICAgIDsKCiAgICAgICAgCiAgICAKICAgIAogICAgICAgICAgICB2YXIgbWFya2VyXzY1OWEzZTRlMjYzMDQwYjNhNWJiZGFkMGFjOWM5MTAxID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNTAuMzcxMjY1OSwgLTQuMTQyNTY1OF0sCiAgICAgICAgICAgICAgICB7fQogICAgICAgICAgICApLmFkZFRvKG1hcF9kZGNiNWI0ZjhlM2I0N2Y4OGI5NzUwN2ZjYWEyM2Q4MSk7CiAgICAgICAgCiAgICAKICAgICAgICB2YXIgcG9wdXBfMjNiMDAwNjUwNDllNDdkMGIwMzhhMTU4N2M3NmE1Y2QgPSBMLnBvcHVwKHsibWF4V2lkdGgiOiAiMTAwJSJ9KTsKCiAgICAgICAgCiAgICAgICAgICAgIHZhciBodG1sX2FmNmE1ZGFjMjk0ZTRiNGFiODZkYmU3Y2Q4NjhlNTAzID0gJChgPGRpdiBpZD0iaHRtbF9hZjZhNWRhYzI5NGU0YjRhYjg2ZGJlN2NkODY4ZTUwMyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+VGhlIEFkdmVudHVyZSBvZiB0aGUgRGV2aWwncyBGb290LFBseW1vdXRoPC9kaXY+YClbMF07CiAgICAgICAgICAgIHBvcHVwXzIzYjAwMDY1MDQ5ZTQ3ZDBiMDM4YTE1ODdjNzZhNWNkLnNldENvbnRlbnQoaHRtbF9hZjZhNWRhYzI5NGU0YjRhYjg2ZGJlN2NkODY4ZTUwMyk7CiAgICAgICAgCgogICAgICAgIG1hcmtlcl82NTlhM2U0ZTI2MzA0MGIzYTViYmRhZDBhYzljOTEwMS5iaW5kUG9wdXAocG9wdXBfMjNiMDAwNjUwNDllNDdkMGIwMzhhMTU4N2M3NmE1Y2QpCiAgICAgICAgOwoKICAgICAgICAKICAgIAogICAgCiAgICAgICAgICAgIHZhciBtYXJrZXJfMzA1NTNmZjlkZThmNGU3Y2EzMGJkZDY2N2U0OWRkNjkgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs1MS41MDczMjE5LCAtMC4xMjc2NDc0XSwKICAgICAgICAgICAgICAgIHt9CiAgICAgICAgICAgICkuYWRkVG8obWFwX2RkY2I1YjRmOGUzYjQ3Zjg4Yjk3NTA3ZmNhYTIzZDgxKTsKICAgICAgICAKICAgIAogICAgICAgIHZhciBwb3B1cF82NjllNjZjNDlmYjA0MGE0OTdjN2IwOWQ1NDFjYTlhZiA9IEwucG9wdXAoeyJtYXhXaWR0aCI6ICIxMDAlIn0pOwoKICAgICAgICAKICAgICAgICAgICAgdmFyIGh0bWxfNGY0OTU3ZjJjYTBiNGUwNTg1MTZiMGI0NDQwN2VlZjAgPSAkKGA8ZGl2IGlkPSJodG1sXzRmNDk1N2YyY2EwYjRlMDU4NTE2YjBiNDQ0MDdlZWYwIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5IaXMgTGFzdCBCb3c6IEFuIEVwaWxvZ3VlIG9mIFNoZXJsb2NrIEhvbG1lcyxMb25kb248L2Rpdj5gKVswXTsKICAgICAgICAgICAgcG9wdXBfNjY5ZTY2YzQ5ZmIwNDBhNDk3YzdiMDlkNTQxY2E5YWYuc2V0Q29udGVudChodG1sXzRmNDk1N2YyY2EwYjRlMDU4NTE2YjBiNDQ0MDdlZWYwKTsKICAgICAgICAKCiAgICAgICAgbWFya2VyXzMwNTUzZmY5ZGU4ZjRlN2NhMzBiZGQ2NjdlNDlkZDY5LmJpbmRQb3B1cChwb3B1cF82NjllNjZjNDlmYjA0MGE0OTdjN2IwOWQ1NDFjYTlhZikKICAgICAgICA7CgogICAgICAgIAogICAgCiAgICAKICAgICAgICAgICAgdmFyIG1hcmtlcl83N2MyOTAzOTM4MjQ0ODRiYmE3YjU2NmQ0MTE2ZmY0ZCA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjcxMjcyODEsIC03NC4wMDYwMTUyXSwKICAgICAgICAgICAgICAgIHt9CiAgICAgICAgICAgICkuYWRkVG8obWFwX2RkY2I1YjRmOGUzYjQ3Zjg4Yjk3NTA3ZmNhYTIzZDgxKTsKICAgICAgICAKICAgIAogICAgICAgIHZhciBwb3B1cF82MTFmZTdkYWUwZmM0NzBkODI3Yzk0NWJmMGZjNzNmYSA9IEwucG9wdXAoeyJtYXhXaWR0aCI6ICIxMDAlIn0pOwoKICAgICAgICAKICAgICAgICAgICAgdmFyIGh0bWxfNmZkMmYyOGZhMDcyNDI3NGJiZmI0MjUxNmFiMjIxMDEgPSAkKGA8ZGl2IGlkPSJodG1sXzZmZDJmMjhmYTA3MjQyNzRiYmZiNDI1MTZhYjIyMTAxIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5UaGUgQWZ0ZXIgSG91c2UsTmV3IFlvcms8L2Rpdj5gKVswXTsKICAgICAgICAgICAgcG9wdXBfNjExZmU3ZGFlMGZjNDcwZDgyN2M5NDViZjBmYzczZmEuc2V0Q29udGVudChodG1sXzZmZDJmMjhmYTA3MjQyNzRiYmZiNDI1MTZhYjIyMTAxKTsKICAgICAgICAKCiAgICAgICAgbWFya2VyXzc3YzI5MDM5MzgyNDQ4NGJiYTdiNTY2ZDQxMTZmZjRkLmJpbmRQb3B1cChwb3B1cF82MTFmZTdkYWUwZmM0NzBkODI3Yzk0NWJmMGZjNzNmYSkKICAgICAgICA7CgogICAgICAgIAogICAgCiAgICAKICAgICAgICAgICAgdmFyIG1hcmtlcl80ZmQzY2M5ZGFlNzM0NDAwYWUyY2MyZGQzOTU1ZDVlNiA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzM1LjMzOTUxMzUsIC05Ny40ODY3MDQ1XSwKICAgICAgICAgICAgICAgIHt9CiAgICAgICAgICAgICkuYWRkVG8obWFwX2RkY2I1YjRmOGUzYjQ3Zjg4Yjk3NTA3ZmNhYTIzZDgxKTsKICAgICAgICAKICAgIAogICAgICAgIHZhciBwb3B1cF9mMGM2NjBkZjJhNTg0Y2FjOGMxZTk4NDhiNDY1NzYwMiA9IEwucG9wdXAoeyJtYXhXaWR0aCI6ICIxMDAlIn0pOwoKICAgICAgICAKICAgICAgICAgICAgdmFyIGh0bWxfMjk4YmM1ZTM5Yjk5NGVhZDk2YzcwOTIyMjM5MDM2MWYgPSAkKGA8ZGl2IGlkPSJodG1sXzI5OGJjNWUzOWI5OTRlYWQ5NmM3MDkyMjIzOTAzNjFmIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5UaGUgRmlsaWdyZWUgQmFsbDogQmVpbmcgYSBmdWxsIGFuZCB0cnVlIGFjY291bnQgb2YgdGhlIHNvbHV0aW9uIG9mIHRoZSBteXN0ZXJ5IGNvbmNlcm5pbmcgdGhlIEplZmZyZXktTW9vcmUgYWZmYWlyLE1vb3JlPC9kaXY+YClbMF07CiAgICAgICAgICAgIHBvcHVwX2YwYzY2MGRmMmE1ODRjYWM4YzFlOTg0OGI0NjU3NjAyLnNldENvbnRlbnQoaHRtbF8yOThiYzVlMzliOTk0ZWFkOTZjNzA5MjIyMzkwMzYxZik7CiAgICAgICAgCgogICAgICAgIG1hcmtlcl80ZmQzY2M5ZGFlNzM0NDAwYWUyY2MyZGQzOTU1ZDVlNi5iaW5kUG9wdXAocG9wdXBfZjBjNjYwZGYyYTU4NGNhYzhjMWU5ODQ4YjQ2NTc2MDIpCiAgICAgICAgOwoKICAgICAgICAKICAgIAogICAgCiAgICAgICAgICAgIHZhciBtYXJrZXJfN2M0NTVkMTUxYWM5NDc2MmFjNDI0NzFmMjViNDZjOTIgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs0Mi42OTg1MzA0LCAyLjg5NTMxMjFdLAogICAgICAgICAgICAgICAge30KICAgICAgICAgICAgKS5hZGRUbyhtYXBfZGRjYjViNGY4ZTNiNDdmODhiOTc1MDdmY2FhMjNkODEpOwogICAgICAgIAogICAgCiAgICAgICAgdmFyIHBvcHVwXzVhM2ZkYWRjM2VjODQzOGQ5MGRiYjM3ZDY4MWQ2YTdiID0gTC5wb3B1cCh7Im1heFdpZHRoIjogIjEwMCUifSk7CgogICAgICAgIAogICAgICAgICAgICB2YXIgaHRtbF80YTYxYjVmNDNjNmY0ZjI1YmM0YTZmMmM1ZjBkYjMwNiA9ICQoYDxkaXYgaWQ9Imh0bWxfNGE2MWI1ZjQzYzZmNGYyNWJjNGE2ZjJjNWYwZGIzMDYiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkNhdWdodCBpbiB0aGUgTmV0LFBlcnBpZ25hbjwvZGl2PmApWzBdOwogICAgICAgICAgICBwb3B1cF81YTNmZGFkYzNlYzg0MzhkOTBkYmIzN2Q2ODFkNmE3Yi5zZXRDb250ZW50KGh0bWxfNGE2MWI1ZjQzYzZmNGYyNWJjNGE2ZjJjNWYwZGIzMDYpOwogICAgICAgIAoKICAgICAgICBtYXJrZXJfN2M0NTVkMTUxYWM5NDc2MmFjNDI0NzFmMjViNDZjOTIuYmluZFBvcHVwKHBvcHVwXzVhM2ZkYWRjM2VjODQzOGQ5MGRiYjM3ZDY4MWQ2YTdiKQogICAgICAgIDsKCiAgICAgICAgCiAgICAKICAgIAogICAgICAgICAgICB2YXIgbWFya2VyXzk0YzcyMmE4ZmVmMTRjODlhMzk2ZmUwMTk2OWIyYTY1ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMzkuNzk0NDcwMiwgLTk5LjkxMDAwMzNdLAogICAgICAgICAgICAgICAge30KICAgICAgICAgICAgKS5hZGRUbyhtYXBfZGRjYjViNGY4ZTNiNDdmODhiOTc1MDdmY2FhMjNkODEpOwogICAgICAgIAogICAgCiAgICAgICAgdmFyIHBvcHVwX2FlNTRjNTE3OGYyYTQ4NWRiYjg3NTUxZGE5OGY0MDk4ID0gTC5wb3B1cCh7Im1heFdpZHRoIjogIjEwMCUifSk7CgogICAgICAgIAogICAgICAgICAgICB2YXIgaHRtbF85ZGRlOGIwMzc3NGE0NzE5YWFkNzViYjM1NWI3MjU4OSA9ICQoYDxkaXYgaWQ9Imh0bWxfOWRkZThiMDM3NzRhNDcxOWFhZDc1YmIzNTViNzI1ODkiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlRoZSBTaWxlbnQgQnVsbGV0LE5vcnRvbjwvZGl2PmApWzBdOwogICAgICAgICAgICBwb3B1cF9hZTU0YzUxNzhmMmE0ODVkYmI4NzU1MWRhOThmNDA5OC5zZXRDb250ZW50KGh0bWxfOWRkZThiMDM3NzRhNDcxOWFhZDc1YmIzNTViNzI1ODkpOwogICAgICAgIAoKICAgICAgICBtYXJrZXJfOTRjNzIyYThmZWYxNGM4OWEzOTZmZTAxOTY5YjJhNjUuYmluZFBvcHVwKHBvcHVwX2FlNTRjNTE3OGYyYTQ4NWRiYjg3NTUxZGE5OGY0MDk4KQogICAgICAgIDsKCiAgICAgICAgCiAgICAKICAgIAogICAgICAgICAgICB2YXIgbWFya2VyXzJiNDAxM2M3MGY1OTQ3NWE5YzAzZDE3MTE0Y2NjYjFhID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNTkuOTM4NzMyLCAzMC4zMTYyMjldLAogICAgICAgICAgICAgICAge30KICAgICAgICAgICAgKS5hZGRUbyhtYXBfZGRjYjViNGY4ZTNiNDdmODhiOTc1MDdmY2FhMjNkODEpOwogICAgICAgIAogICAgCiAgICAgICAgdmFyIHBvcHVwX2JiYmNjN2JjNjk5MDQxM2I5YTRiYzY5ZTk3NzAyYjg4ID0gTC5wb3B1cCh7Im1heFdpZHRoIjogIjEwMCUifSk7CgogICAgICAgIAogICAgICAgICAgICB2YXIgaHRtbF9lNzA2YjlkZjJlNjM0ZDNhYmJkMjgyZThhOWE1OWY0ZiA9ICQoYDxkaXYgaWQ9Imh0bWxfZTcwNmI5ZGYyZTYzNGQzYWJiZDI4MmU4YTlhNTlmNGYiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkNyaW1lIGFuZCBQdW5pc2htZW50LFBldGVyc2J1cmc8L2Rpdj5gKVswXTsKICAgICAgICAgICAgcG9wdXBfYmJiY2M3YmM2OTkwNDEzYjlhNGJjNjllOTc3MDJiODguc2V0Q29udGVudChodG1sX2U3MDZiOWRmMmU2MzRkM2FiYmQyODJlOGE5YTU5ZjRmKTsKICAgICAgICAKCiAgICAgICAgbWFya2VyXzJiNDAxM2M3MGY1OTQ3NWE5YzAzZDE3MTE0Y2NjYjFhLmJpbmRQb3B1cChwb3B1cF9iYmJjYzdiYzY5OTA0MTNiOWE0YmM2OWU5NzcwMmI4OCkKICAgICAgICA7CgogICAgICAgIAogICAgCiAgICAKICAgICAgICAgICAgdmFyIG1hcmtlcl80NGE1ODI4ZmQxZjg0MDNhOTUyYTRjZGI0OWY2OWRhYSA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQ5LjA3MjQ5MjEsIDE4LjkyOTE5M10sCiAgICAgICAgICAgICAgICB7fQogICAgICAgICAgICApLmFkZFRvKG1hcF9kZGNiNWI0ZjhlM2I0N2Y4OGI5NzUwN2ZjYWEyM2Q4MSk7CiAgICAgICAgCiAgICAKICAgICAgICB2YXIgcG9wdXBfN2MwNDI3OWFhMDBhNDkyNWE4MjEyMWRhMDdhOTU3YzggPSBMLnBvcHVwKHsibWF4V2lkdGgiOiAiMTAwJSJ9KTsKCiAgICAgICAgCiAgICAgICAgICAgIHZhciBodG1sX2NhZDg0NjY3OGI3ZjQ5MmJhMWFmMDYzZWE5NGFkMWRkID0gJChgPGRpdiBpZD0iaHRtbF9jYWQ4NDY2NzhiN2Y0OTJiYTFhZjA2M2VhOTRhZDFkZCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+VHJlbnQncyBMYXN0IENhc2UsTWFydGluPC9kaXY+YClbMF07CiAgICAgICAgICAgIHBvcHVwXzdjMDQyNzlhYTAwYTQ5MjVhODIxMjFkYTA3YTk1N2M4LnNldENvbnRlbnQoaHRtbF9jYWQ4NDY2NzhiN2Y0OTJiYTFhZjA2M2VhOTRhZDFkZCk7CiAgICAgICAgCgogICAgICAgIG1hcmtlcl80NGE1ODI4ZmQxZjg0MDNhOTUyYTRjZGI0OWY2OWRhYS5iaW5kUG9wdXAocG9wdXBfN2MwNDI3OWFhMDBhNDkyNWE4MjEyMWRhMDdhOTU3YzgpCiAgICAgICAgOwoKICAgICAgICAKICAgIAogICAgCiAgICAgICAgICAgIHZhciBtYXJrZXJfZTE3YjZlZGU2NTk4NDI5ZTk4N2U1Y2Y3ZTNkZTIyNjkgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs5LjU0MTExMSwgMC43ODc2MDE4Mjk5Mjg5MTFdLAogICAgICAgICAgICAgICAge30KICAgICAgICAgICAgKS5hZGRUbyhtYXBfZGRjYjViNGY4ZTNiNDdmODhiOTc1MDdmY2FhMjNkODEpOwogICAgICAgIAogICAgCiAgICAgICAgdmFyIHBvcHVwXzE1M2JlZmQ5MzY1YzQwZDViNTk0MmQwZDg2ZGFiZjE4ID0gTC5wb3B1cCh7Im1heFdpZHRoIjogIjEwMCUifSk7CgogICAgICAgIAogICAgICAgICAgICB2YXIgaHRtbF83MWY1NDkyZTVkZTc0NmVhYmM0ODkzNDRlNDkyOTE1MSA9ICQoYDxkaXYgaWQ9Imh0bWxfNzFmNTQ5MmU1ZGU3NDZlYWJjNDg5MzQ0ZTQ5MjkxNTEiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlRoZSBDbHVlIG9mIHRoZSBUd2lzdGVkIENhbmRsZSxLYXJhPC9kaXY+YClbMF07CiAgICAgICAgICAgIHBvcHVwXzE1M2JlZmQ5MzY1YzQwZDViNTk0MmQwZDg2ZGFiZjE4LnNldENvbnRlbnQoaHRtbF83MWY1NDkyZTVkZTc0NmVhYmM0ODkzNDRlNDkyOTE1MSk7CiAgICAgICAgCgogICAgICAgIG1hcmtlcl9lMTdiNmVkZTY1OTg0MjllOTg3ZTVjZjdlM2RlMjI2OS5iaW5kUG9wdXAocG9wdXBfMTUzYmVmZDkzNjVjNDBkNWI1OTQyZDBkODZkYWJmMTgpCiAgICAgICAgOwoKICAgICAgICAKICAgIAogICAgCiAgICAgICAgICAgIHZhciBtYXJrZXJfYWUyYWVkYTg3NGJkNDMzODgwMzNkMWY5YTMxYzAwNTggPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFszNC4yMjAzODksIDcwLjM4MDAzMTRdLAogICAgICAgICAgICAgICAge30KICAgICAgICAgICAgKS5hZGRUbyhtYXBfZGRjYjViNGY4ZTNiNDdmODhiOTc1MDdmY2FhMjNkODEpOwogICAgICAgIAogICAgCiAgICAgICAgdmFyIHBvcHVwXzc4YmM2N2FiZGM3NjQ0OTE5Y2UzODdiMDg0MmZkZmM3ID0gTC5wb3B1cCh7Im1heFdpZHRoIjogIjEwMCUifSk7CgogICAgICAgIAogICAgICAgICAgICB2YXIgaHRtbF85YmMzZDY5MDdlN2M0ODBlYTYxODFmY2JiM2JiNjNmMSA9ICQoYDxkaXYgaWQ9Imh0bWxfOWJjM2Q2OTA3ZTdjNDgwZWE2MTgxZmNiYjNiYjYzZjEiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk5hbiBTaGVyd29vZCBhdCBQaW5lIENhbXA7IE9yLCBUaGUgT2xkIEx1bWJlcm1hbidzIFNlY3JldCxOYW48L2Rpdj5gKVswXTsKICAgICAgICAgICAgcG9wdXBfNzhiYzY3YWJkYzc2NDQ5MTljZTM4N2IwODQyZmRmYzcuc2V0Q29udGVudChodG1sXzliYzNkNjkwN2U3YzQ4MGVhNjE4MWZjYmIzYmI2M2YxKTsKICAgICAgICAKCiAgICAgICAgbWFya2VyX2FlMmFlZGE4NzRiZDQzMzg4MDMzZDFmOWEzMWMwMDU4LmJpbmRQb3B1cChwb3B1cF83OGJjNjdhYmRjNzY0NDkxOWNlMzg3YjA4NDJmZGZjNykKICAgICAgICA7CgogICAgICAgIAogICAgCiAgICAKICAgICAgICAgICAgdmFyIG1hcmtlcl83NjBkMGFjOTIzOWM0NmNhYTg4OWZhYTFkNWZiNmJlMiA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQ4Ljg1NjYxMDEsIDIuMzUxNDk5Ml0sCiAgICAgICAgICAgICAgICB7fQogICAgICAgICAgICApLmFkZFRvKG1hcF9kZGNiNWI0ZjhlM2I0N2Y4OGI5NzUwN2ZjYWEyM2Q4MSk7CiAgICAgICAgCiAgICAKICAgICAgICB2YXIgcG9wdXBfODA1ZTNiZTUyNjRlNDQ1MWJlNGFjNTI2MjgxYWEwODEgPSBMLnBvcHVwKHsibWF4V2lkdGgiOiAiMTAwJSJ9KTsKCiAgICAgICAgCiAgICAgICAgICAgIHZhciBodG1sXzE3NWJlNDI0MTg5ZjQ0ZmY5NmU1NDk0MTZhNjY2Nzc5ID0gJChgPGRpdiBpZD0iaHRtbF8xNzViZTQyNDE4OWY0NGZmOTZlNTQ5NDE2YTY2Njc3OSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+VGhlIENoYW1wZG9jZSBNeXN0ZXJ5LFBhcmlzPC9kaXY+YClbMF07CiAgICAgICAgICAgIHBvcHVwXzgwNWUzYmU1MjY0ZTQ0NTFiZTRhYzUyNjI4MWFhMDgxLnNldENvbnRlbnQoaHRtbF8xNzViZTQyNDE4OWY0NGZmOTZlNTQ5NDE2YTY2Njc3OSk7CiAgICAgICAgCgogICAgICAgIG1hcmtlcl83NjBkMGFjOTIzOWM0NmNhYTg4OWZhYTFkNWZiNmJlMi5iaW5kUG9wdXAocG9wdXBfODA1ZTNiZTUyNjRlNDQ1MWJlNGFjNTI2MjgxYWEwODEpCiAgICAgICAgOwoKICAgICAgICAKICAgIAogICAgCiAgICAgICAgICAgIHZhciBtYXJrZXJfMGI4ZjU2YzQ3NDgwNDc5OTgwZmJiNWJiNmU5MGFjYzEgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs1MS41MDczMjE5LCAtMC4xMjc2NDc0XSwKICAgICAgICAgICAgICAgIHt9CiAgICAgICAgICAgICkuYWRkVG8obWFwX2RkY2I1YjRmOGUzYjQ3Zjg4Yjk3NTA3ZmNhYTIzZDgxKTsKICAgICAgICAKICAgIAogICAgICAgIHZhciBwb3B1cF9hMjcyZWJlYzBiN2Q0NTY2YjQ0M2RkYjcxYTlmYmYyYSA9IEwucG9wdXAoeyJtYXhXaWR0aCI6ICIxMDAlIn0pOwoKICAgICAgICAKICAgICAgICAgICAgdmFyIGh0bWxfOTkzNDFkMDdiNDVkNGU4Y2I0ZTVjYTFmZWQ1YzdlYzIgPSAkKGA8ZGl2IGlkPSJodG1sXzk5MzQxZDA3YjQ1ZDRlOGNiNGU1Y2ExZmVkNWM3ZWMyIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5UaGUgRGV2aWwncyBQYXcsTG9uZG9uPC9kaXY+YClbMF07CiAgICAgICAgICAgIHBvcHVwX2EyNzJlYmVjMGI3ZDQ1NjZiNDQzZGRiNzFhOWZiZjJhLnNldENvbnRlbnQoaHRtbF85OTM0MWQwN2I0NWQ0ZThjYjRlNWNhMWZlZDVjN2VjMik7CiAgICAgICAgCgogICAgICAgIG1hcmtlcl8wYjhmNTZjNDc0ODA0Nzk5ODBmYmI1YmI2ZTkwYWNjMS5iaW5kUG9wdXAocG9wdXBfYTI3MmViZWMwYjdkNDU2NmI0NDNkZGI3MWE5ZmJmMmEpCiAgICAgICAgOwoKICAgICAgICAKICAgIAogICAgCiAgICAgICAgICAgIHZhciBtYXJrZXJfZjM0Y2YzZDQ1NDEzNDRkOTgyMGY3ZmZhMjFmOTFlODUgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs0OC43Nzg2ODcyLCAtMTIzLjcwODA0NDZdLAogICAgICAgICAgICAgICAge30KICAgICAgICAgICAgKS5hZGRUbyhtYXBfZGRjYjViNGY4ZTNiNDdmODhiOTc1MDdmY2FhMjNkODEpOwogICAgICAgIAogICAgCiAgICAgICAgdmFyIHBvcHVwXzc3ZjZmMzI3Y2E0OTRkNjc4OTUwNGJhNzRjZmZmNGIxID0gTC5wb3B1cCh7Im1heFdpZHRoIjogIjEwMCUifSk7CgogICAgICAgIAogICAgICAgICAgICB2YXIgaHRtbF8xYTQzM2UyM2Y0Nzc0YTVkODgzNmJkOWM4NWE1MDZmZSA9ICQoYDxkaXYgaWQ9Imh0bWxfMWE0MzNlMjNmNDc3NGE1ZDg4MzZiZDljODVhNTA2ZmUiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlRoZSBNb3RvciBHaXJscyBvbiBhIFRvdXIsRHVuY2FuPC9kaXY+YClbMF07CiAgICAgICAgICAgIHBvcHVwXzc3ZjZmMzI3Y2E0OTRkNjc4OTUwNGJhNzRjZmZmNGIxLnNldENvbnRlbnQoaHRtbF8xYTQzM2UyM2Y0Nzc0YTVkODgzNmJkOWM4NWE1MDZmZSk7CiAgICAgICAgCgogICAgICAgIG1hcmtlcl9mMzRjZjNkNDU0MTM0NGQ5ODIwZjdmZmEyMWY5MWU4NS5iaW5kUG9wdXAocG9wdXBfNzdmNmYzMjdjYTQ5NGQ2Nzg5NTA0YmE3NGNmZmY0YjEpCiAgICAgICAgOwoKICAgICAgICAKICAgIAogICAgCiAgICAgICAgICAgIHZhciBtYXJrZXJfODczYmNkYTkwNzAwNDhjM2I2ZjMwZmUwYjFiN2E1OTQgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs1MS41MDczMjE5LCAtMC4xMjc2NDc0XSwKICAgICAgICAgICAgICAgIHt9CiAgICAgICAgICAgICkuYWRkVG8obWFwX2RkY2I1YjRmOGUzYjQ3Zjg4Yjk3NTA3ZmNhYTIzZDgxKTsKICAgICAgICAKICAgIAogICAgICAgIHZhciBwb3B1cF81Mjk1Y2RmMmJhZWU0NjlmOTg2MGRlMTZlNzRjNjdhMiA9IEwucG9wdXAoeyJtYXhXaWR0aCI6ICIxMDAlIn0pOwoKICAgICAgICAKICAgICAgICAgICAgdmFyIGh0bWxfYzJiOWYxMWMzNDdmNDVkOGIwZmMxM2YxZDFhMTY2OTggPSAkKGA8ZGl2IGlkPSJodG1sX2MyYjlmMTFjMzQ3ZjQ1ZDhiMGZjMTNmMWQxYTE2Njk4IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5UaGUgSG91bmQgb2YgdGhlIEJhc2tlcnZpbGxlcyxMb25kb248L2Rpdj5gKVswXTsKICAgICAgICAgICAgcG9wdXBfNTI5NWNkZjJiYWVlNDY5Zjk4NjBkZTE2ZTc0YzY3YTIuc2V0Q29udGVudChodG1sX2MyYjlmMTFjMzQ3ZjQ1ZDhiMGZjMTNmMWQxYTE2Njk4KTsKICAgICAgICAKCiAgICAgICAgbWFya2VyXzg3M2JjZGE5MDcwMDQ4YzNiNmYzMGZlMGIxYjdhNTk0LmJpbmRQb3B1cChwb3B1cF81Mjk1Y2RmMmJhZWU0NjlmOTg2MGRlMTZlNzRjNjdhMikKICAgICAgICA7CgogICAgICAgIAogICAgCiAgICAKICAgICAgICAgICAgdmFyIG1hcmtlcl8yMzhmNWQ5ODU1MmI0NjBjODQ0M2E1NWNkODQ2YmQ0NCA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzM3LjczMDYwNTQsIC04OC45MzMxMjU2XSwKICAgICAgICAgICAgICAgIHt9CiAgICAgICAgICAgICkuYWRkVG8obWFwX2RkY2I1YjRmOGUzYjQ3Zjg4Yjk3NTA3ZmNhYTIzZDgxKTsKICAgICAgICAKICAgIAogICAgICAgIHZhciBwb3B1cF8wNTEyMjAzNWU0YmY0OTU5YjIyZWRiM2IxOWMzODI3OSA9IEwucG9wdXAoeyJtYXhXaWR0aCI6ICIxMDAlIn0pOwoKICAgICAgICAKICAgICAgICAgICAgdmFyIGh0bWxfZDk5ZWI2YzI5M2M2NDY1Y2JjZjEzMWYwMTg5N2EwY2EgPSAkKGA8ZGl2IGlkPSJodG1sX2Q5OWViNmMyOTNjNjQ2NWNiY2YxMzFmMDE4OTdhMGNhIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5UaGUgU2xldXRoIG9mIFN0LiBKYW1lcydzIFNxdWFyZSxNYXJpb248L2Rpdj5gKVswXTsKICAgICAgICAgICAgcG9wdXBfMDUxMjIwMzVlNGJmNDk1OWIyMmVkYjNiMTljMzgyNzkuc2V0Q29udGVudChodG1sX2Q5OWViNmMyOTNjNjQ2NWNiY2YxMzFmMDE4OTdhMGNhKTsKICAgICAgICAKCiAgICAgICAgbWFya2VyXzIzOGY1ZDk4NTUyYjQ2MGM4NDQzYTU1Y2Q4NDZiZDQ0LmJpbmRQb3B1cChwb3B1cF8wNTEyMjAzNWU0YmY0OTU5YjIyZWRiM2IxOWMzODI3OSkKICAgICAgICA7CgogICAgICAgIAogICAgCiAgICAKICAgICAgICAgICAgdmFyIG1hcmtlcl9mZTdkYTAyMDk0OGQ0ODFjOTVmZjg4MmQxZmY5YmMxMiA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzUzLjU3NzY5NCwgLTIuNDI4ODg3NF0sCiAgICAgICAgICAgICAgICB7fQogICAgICAgICAgICApLmFkZFRvKG1hcF9kZGNiNWI0ZjhlM2I0N2Y4OGI5NzUwN2ZjYWEyM2Q4MSk7CiAgICAgICAgCiAgICAKICAgICAgICB2YXIgcG9wdXBfYmM0NWYwNzZhMmVkNDg3ODliNzE4OTdjY2U3MDBmMDQgPSBMLnBvcHVwKHsibWF4V2lkdGgiOiAiMTAwJSJ9KTsKCiAgICAgICAgCiAgICAgICAgICAgIHZhciBodG1sXzg1Zjc3ZWNlZjMzZDRmZjc4ZWY3ZDMzZGRjMWMxOWNhID0gJChgPGRpdiBpZD0iaHRtbF84NWY3N2VjZWYzM2Q0ZmY3OGVmN2QzM2RkYzFjMTljYSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+VGhlIEdyZWVuIE11bW15LEJvbHRvbjwvZGl2PmApWzBdOwogICAgICAgICAgICBwb3B1cF9iYzQ1ZjA3NmEyZWQ0ODc4OWI3MTg5N2NjZTcwMGYwNC5zZXRDb250ZW50KGh0bWxfODVmNzdlY2VmMzNkNGZmNzhlZjdkMzNkZGMxYzE5Y2EpOwogICAgICAgIAoKICAgICAgICBtYXJrZXJfZmU3ZGEwMjA5NDhkNDgxYzk1ZmY4ODJkMWZmOWJjMTIuYmluZFBvcHVwKHBvcHVwX2JjNDVmMDc2YTJlZDQ4Nzg5YjcxODk3Y2NlNzAwZjA0KQogICAgICAgIDsKCiAgICAgICAgCiAgICAKICAgIAogICAgICAgICAgICB2YXIgbWFya2VyXzkyOGZjNTA4MGUyMTQ3YjhiN2NjZWZlNzJmMzhjYTJmID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNDMuNzY5ODcxMiwgMTEuMjU1NTc1N10sCiAgICAgICAgICAgICAgICB7fQogICAgICAgICAgICApLmFkZFRvKG1hcF9kZGNiNWI0ZjhlM2I0N2Y4OGI5NzUwN2ZjYWEyM2Q4MSk7CiAgICAgICAgCiAgICAKICAgICAgICB2YXIgcG9wdXBfYTJmNDNiMTJkZjVjNDljZTg1NWM0M2M0YWNjYmQ3NzMgPSBMLnBvcHVwKHsibWF4V2lkdGgiOiAiMTAwJSJ9KTsKCiAgICAgICAgCiAgICAgICAgICAgIHZhciBodG1sX2MxNjNhZGFiZDA5NjQ2YTBhNWU3MjMwNjc2YzI1MDE2ID0gJChgPGRpdiBpZD0iaHRtbF9jMTYzYWRhYmQwOTY0NmEwYTVlNzIzMDY3NmMyNTAxNiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+VGhlIEdvbGQgQmFnLEZsb3JlbmNlPC9kaXY+YClbMF07CiAgICAgICAgICAgIHBvcHVwX2EyZjQzYjEyZGY1YzQ5Y2U4NTVjNDNjNGFjY2JkNzczLnNldENvbnRlbnQoaHRtbF9jMTYzYWRhYmQwOTY0NmEwYTVlNzIzMDY3NmMyNTAxNik7CiAgICAgICAgCgogICAgICAgIG1hcmtlcl85MjhmYzUwODBlMjE0N2I4YjdjY2VmZTcyZjM4Y2EyZi5iaW5kUG9wdXAocG9wdXBfYTJmNDNiMTJkZjVjNDljZTg1NWM0M2M0YWNjYmQ3NzMpCiAgICAgICAgOwoKICAgICAgICAKICAgIAogICAgCiAgICAgICAgICAgIHZhciBtYXJrZXJfODUzMmNmNjRkYjZhNGI5YmE3MTU0M2Y2MzY0ZjlmNjQgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFszNS4wODc1ODM2LCAtODQuMDM0NjMxNV0sCiAgICAgICAgICAgICAgICB7fQogICAgICAgICAgICApLmFkZFRvKG1hcF9kZGNiNWI0ZjhlM2I0N2Y4OGI5NzUwN2ZjYWEyM2Q4MSk7CiAgICAgICAgCiAgICAKICAgICAgICB2YXIgcG9wdXBfOThjM2RmM2MzZDcwNDFiOGIyYjJjNDFkOTdjZmNlMTkgPSBMLnBvcHVwKHsibWF4V2lkdGgiOiAiMTAwJSJ9KTsKCiAgICAgICAgCiAgICAgICAgICAgIHZhciBodG1sXzg1OWE0ZmU2YTg1YzRmZWZiMzRjMTFjMWJhNDc1N2ViID0gJChgPGRpdiBpZD0iaHRtbF84NTlhNGZlNmE4NWM0ZmVmYjM0YzExYzFiYTQ3NTdlYiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+VGhlIFNoZXJpZGFuIFJvYWQgTXlzdGVyeSxNdXJwaHk8L2Rpdj5gKVswXTsKICAgICAgICAgICAgcG9wdXBfOThjM2RmM2MzZDcwNDFiOGIyYjJjNDFkOTdjZmNlMTkuc2V0Q29udGVudChodG1sXzg1OWE0ZmU2YTg1YzRmZWZiMzRjMTFjMWJhNDc1N2ViKTsKICAgICAgICAKCiAgICAgICAgbWFya2VyXzg1MzJjZjY0ZGI2YTRiOWJhNzE1NDNmNjM2NGY5ZjY0LmJpbmRQb3B1cChwb3B1cF85OGMzZGYzYzNkNzA0MWI4YjJiMmM0MWQ5N2NmY2UxOSkKICAgICAgICA7CgogICAgICAgIAogICAgCiAgICAKICAgICAgICAgICAgdmFyIG1hcmtlcl9iZjQ4YTg4ZDcyMzM0MWY4YWIxYjZjNzg5OWY2ODU2YyA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQ4Ljg1NjYxMDEsIDIuMzUxNDk5Ml0sCiAgICAgICAgICAgICAgICB7fQogICAgICAgICAgICApLmFkZFRvKG1hcF9kZGNiNWI0ZjhlM2I0N2Y4OGI5NzUwN2ZjYWEyM2Q4MSk7CiAgICAgICAgCiAgICAKICAgICAgICB2YXIgcG9wdXBfZjBlNGNiZWFkMzljNDFhYTg1ZTE4NGU1N2ExOGJlOGUgPSBMLnBvcHVwKHsibWF4V2lkdGgiOiAiMTAwJSJ9KTsKCiAgICAgICAgCiAgICAgICAgICAgIHZhciBodG1sXzhlZmM1YmI2ZmMxYjQyNWU5NTllNWNmNzcyMjY1ODYwID0gJChgPGRpdiBpZD0iaHRtbF84ZWZjNWJiNmZjMWI0MjVlOTU5ZTVjZjc3MjI2NTg2MCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TW9uc2lldXIgTGVjb3EsIHYuIDEsUGFyaXM8L2Rpdj5gKVswXTsKICAgICAgICAgICAgcG9wdXBfZjBlNGNiZWFkMzljNDFhYTg1ZTE4NGU1N2ExOGJlOGUuc2V0Q29udGVudChodG1sXzhlZmM1YmI2ZmMxYjQyNWU5NTllNWNmNzcyMjY1ODYwKTsKICAgICAgICAKCiAgICAgICAgbWFya2VyX2JmNDhhODhkNzIzMzQxZjhhYjFiNmM3ODk5ZjY4NTZjLmJpbmRQb3B1cChwb3B1cF9mMGU0Y2JlYWQzOWM0MWFhODVlMTg0ZTU3YTE4YmU4ZSkKICAgICAgICA7CgogICAgICAgIAogICAgCiAgICAKICAgICAgICAgICAgdmFyIG1hcmtlcl8zYzhjYmU0MjhjODc0YmFiYTQ1NmM2OWIzM2E3YmE1ZSA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWy0zNy44MTQyMTc2LCAxNDQuOTYzMTYwOF0sCiAgICAgICAgICAgICAgICB7fQogICAgICAgICAgICApLmFkZFRvKG1hcF9kZGNiNWI0ZjhlM2I0N2Y4OGI5NzUwN2ZjYWEyM2Q4MSk7CiAgICAgICAgCiAgICAKICAgICAgICB2YXIgcG9wdXBfY2VjODY3MmNmYzcxNGY2MGI3ODM2ODNjNTk4MzQzNmYgPSBMLnBvcHVwKHsibWF4V2lkdGgiOiAiMTAwJSJ9KTsKCiAgICAgICAgCiAgICAgICAgICAgIHZhciBodG1sX2FlMGNlNDViZjc1NjQ0MGVhZDk3MjZkY2Q0MjAyOTIzID0gJChgPGRpdiBpZD0iaHRtbF9hZTBjZTQ1YmY3NTY0NDBlYWQ5NzI2ZGNkNDIwMjkyMyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+VGhlIE15c3Rlcnkgb2YgYSBIYW5zb20gQ2FiLE1lbGJvdXJuZTwvZGl2PmApWzBdOwogICAgICAgICAgICBwb3B1cF9jZWM4NjcyY2ZjNzE0ZjYwYjc4MzY4M2M1OTgzNDM2Zi5zZXRDb250ZW50KGh0bWxfYWUwY2U0NWJmNzU2NDQwZWFkOTcyNmRjZDQyMDI5MjMpOwogICAgICAgIAoKICAgICAgICBtYXJrZXJfM2M4Y2JlNDI4Yzg3NGJhYmE0NTZjNjliMzNhN2JhNWUuYmluZFBvcHVwKHBvcHVwX2NlYzg2NzJjZmM3MTRmNjBiNzgzNjgzYzU5ODM0MzZmKQogICAgICAgIDsKCiAgICAgICAgCiAgICAKICAgIAogICAgICAgICAgICB2YXIgbWFya2VyX2M2ZjU2Yzk1YWVmNjRhNzk5YzY5NWJmZmU1MjI4YmUyID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNDQuNTk1MTI3NCwgMy45OTE5MTMyXSwKICAgICAgICAgICAgICAgIHt9CiAgICAgICAgICAgICkuYWRkVG8obWFwX2RkY2I1YjRmOGUzYjQ3Zjg4Yjk3NTA3ZmNhYTIzZDgxKTsKICAgICAgICAKICAgIAogICAgICAgIHZhciBwb3B1cF83ZjYzNTNkNTA0NjU0MGVkOWExYjBhMDRmZWUxMzE2MCA9IEwucG9wdXAoeyJtYXhXaWR0aCI6ICIxMDAlIn0pOwoKICAgICAgICAKICAgICAgICAgICAgdmFyIGh0bWxfZjAzMDEyMjM1MTc5NGJhZjg0NWU0YzJiYTAwOGEyNjggPSAkKGA8ZGl2IGlkPSJodG1sX2YwMzAxMjIzNTE3OTRiYWY4NDVlNGMyYmEwMDhhMjY4IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5KZWFubmUgb2YgdGhlIE1hcnNoZXMsQm9ybmU8L2Rpdj5gKVswXTsKICAgICAgICAgICAgcG9wdXBfN2Y2MzUzZDUwNDY1NDBlZDlhMWIwYTA0ZmVlMTMxNjAuc2V0Q29udGVudChodG1sX2YwMzAxMjIzNTE3OTRiYWY4NDVlNGMyYmEwMDhhMjY4KTsKICAgICAgICAKCiAgICAgICAgbWFya2VyX2M2ZjU2Yzk1YWVmNjRhNzk5YzY5NWJmZmU1MjI4YmUyLmJpbmRQb3B1cChwb3B1cF83ZjYzNTNkNTA0NjU0MGVkOWExYjBhMDRmZWUxMzE2MCkKICAgICAgICA7CgogICAgICAgIAogICAgCiAgICAKICAgICAgICAgICAgdmFyIG1hcmtlcl82MmE1NWJkZmI0NTM0MWM1YmM0MGViZjIxOTRkNjkyZiA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzMyLjc0MTI0MTcsIC04Ny42NTYxNjY4XSwKICAgICAgICAgICAgICAgIHt9CiAgICAgICAgICAgICkuYWRkVG8obWFwX2RkY2I1YjRmOGUzYjQ3Zjg4Yjk3NTA3ZmNhYTIzZDgxKTsKICAgICAgICAKICAgIAogICAgICAgIHZhciBwb3B1cF9jNzY0ZTUzNmM4ZDY0ODBhYTJlYTViODY1NGQzYWNkOCA9IEwucG9wdXAoeyJtYXhXaWR0aCI6ICIxMDAlIn0pOwoKICAgICAgICAKICAgICAgICAgICAgdmFyIGh0bWxfOGJlOWU4NWM2M2VkNGM2OWE1MmNmYjU1YmI0Y2ZmNTAgPSAkKGA8ZGl2IGlkPSJodG1sXzhiZTllODVjNjNlZDRjNjlhNTJjZmI1NWJiNGNmZjUwIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5UaGUgU2VjcmV0IFBhc3NhZ2UsSGFsZTwvZGl2PmApWzBdOwogICAgICAgICAgICBwb3B1cF9jNzY0ZTUzNmM4ZDY0ODBhYTJlYTViODY1NGQzYWNkOC5zZXRDb250ZW50KGh0bWxfOGJlOWU4NWM2M2VkNGM2OWE1MmNmYjU1YmI0Y2ZmNTApOwogICAgICAgIAoKICAgICAgICBtYXJrZXJfNjJhNTViZGZiNDUzNDFjNWJjNDBlYmYyMTk0ZDY5MmYuYmluZFBvcHVwKHBvcHVwX2M3NjRlNTM2YzhkNjQ4MGFhMmVhNWI4NjU0ZDNhY2Q4KQogICAgICAgIDsKCiAgICAgICAgCiAgICAKICAgIAogICAgICAgICAgICB2YXIgbWFya2VyXzY2OGRlNzk0ZThkYjQxODc4MGJkN2EyNjRlZTU1ZmIzID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNDguODU2NjEwMSwgMi4zNTE0OTkyXSwKICAgICAgICAgICAgICAgIHt9CiAgICAgICAgICAgICkuYWRkVG8obWFwX2RkY2I1YjRmOGUzYjQ3Zjg4Yjk3NTA3ZmNhYTIzZDgxKTsKICAgICAgICAKICAgIAogICAgICAgIHZhciBwb3B1cF84MTNjY2NhMjJhYmM0MzU3YjRjMzU1Y2U3MzU1NDI1NiA9IEwucG9wdXAoeyJtYXhXaWR0aCI6ICIxMDAlIn0pOwoKICAgICAgICAKICAgICAgICAgICAgdmFyIGh0bWxfMzk4Yzk2NmI2ODA0NDVkOThlMmVmNzljZDVkOTQ2MTEgPSAkKGA8ZGl2IGlkPSJodG1sXzM5OGM5NjZiNjgwNDQ1ZDk4ZTJlZjc5Y2Q1ZDk0NjExIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5UaGUgQ2xpcXVlIG9mIEdvbGQsUGFyaXM8L2Rpdj5gKVswXTsKICAgICAgICAgICAgcG9wdXBfODEzY2NjYTIyYWJjNDM1N2I0YzM1NWNlNzM1NTQyNTYuc2V0Q29udGVudChodG1sXzM5OGM5NjZiNjgwNDQ1ZDk4ZTJlZjc5Y2Q1ZDk0NjExKTsKICAgICAgICAKCiAgICAgICAgbWFya2VyXzY2OGRlNzk0ZThkYjQxODc4MGJkN2EyNjRlZTU1ZmIzLmJpbmRQb3B1cChwb3B1cF84MTNjY2NhMjJhYmM0MzU3YjRjMzU1Y2U3MzU1NDI1NikKICAgICAgICA7CgogICAgICAgIAogICAgCiAgICAKICAgICAgICAgICAgdmFyIG1hcmtlcl8wMDMxNWU3Nzk5YWY0NmJlYWI5YWZiOWM3YmZhZjI1YyA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzUxLjQ2MTU4ODQsIC0yLjYyMDI4NDZdLAogICAgICAgICAgICAgICAge30KICAgICAgICAgICAgKS5hZGRUbyhtYXBfZGRjYjViNGY4ZTNiNDdmODhiOTc1MDdmY2FhMjNkODEpOwogICAgICAgIAogICAgCiAgICAgICAgdmFyIHBvcHVwXzcyMTQ2YWRjMDJkMzRlNGY4NDA3OGZiZDIzMDM3ZDNjID0gTC5wb3B1cCh7Im1heFdpZHRoIjogIjEwMCUifSk7CgogICAgICAgIAogICAgICAgICAgICB2YXIgaHRtbF81OTdmZjE4NDZhYzY0ZjI0OTk0MzRlYjA5MDM4MDJiYSA9ICQoYDxkaXYgaWQ9Imh0bWxfNTk3ZmYxODQ2YWM2NGYyNDk5NDM0ZWIwOTAzODAyYmEiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlRpbW90aHkgQ3J1bXAncyBXYXJkOiBBIFN0b3J5IG9mIEFtZXJpY2FuIExpZmUsQ2xpZnRvbjwvZGl2PmApWzBdOwogICAgICAgICAgICBwb3B1cF83MjE0NmFkYzAyZDM0ZTRmODQwNzhmYmQyMzAzN2QzYy5zZXRDb250ZW50KGh0bWxfNTk3ZmYxODQ2YWM2NGYyNDk5NDM0ZWIwOTAzODAyYmEpOwogICAgICAgIAoKICAgICAgICBtYXJrZXJfMDAzMTVlNzc5OWFmNDZiZWFiOWFmYjljN2JmYWYyNWMuYmluZFBvcHVwKHBvcHVwXzcyMTQ2YWRjMDJkMzRlNGY4NDA3OGZiZDIzMDM3ZDNjKQogICAgICAgIDsKCiAgICAgICAgCiAgICAKICAgIAogICAgICAgICAgICB2YXIgbWFya2VyX2VmY2ZjYjUzMDg0YTQ0YWViOGIwMTU2YTEwOGY4NzUyID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNTEuNTA3MzIxOSwgLTAuMTI3NjQ3NF0sCiAgICAgICAgICAgICAgICB7fQogICAgICAgICAgICApLmFkZFRvKG1hcF9kZGNiNWI0ZjhlM2I0N2Y4OGI5NzUwN2ZjYWEyM2Q4MSk7CiAgICAgICAgCiAgICAKICAgICAgICB2YXIgcG9wdXBfNjRmMjgyMGUzM2U1NGZhZjlhZjhhNTMxMjJlMzY0MWYgPSBMLnBvcHVwKHsibWF4V2lkdGgiOiAiMTAwJSJ9KTsKCiAgICAgICAgCiAgICAgICAgICAgIHZhciBodG1sXzkyMjcwNGU3ZjU0MzQ3NmNhMjhhNzkzYzQ1N2M4MjAyID0gJChgPGRpdiBpZD0iaHRtbF85MjI3MDRlN2Y1NDM0NzZjYTI4YTc5M2M0NTdjODIwMiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+QW4gQWZyaWNhbiBNaWxsaW9uYWlyZTogRXBpc29kZXMgaW4gdGhlIExpZmUgb2YgdGhlIElsbHVzdHJpb3VzIENvbG9uZWwgQ2xheSxMb25kb248L2Rpdj5gKVswXTsKICAgICAgICAgICAgcG9wdXBfNjRmMjgyMGUzM2U1NGZhZjlhZjhhNTMxMjJlMzY0MWYuc2V0Q29udGVudChodG1sXzkyMjcwNGU3ZjU0MzQ3NmNhMjhhNzkzYzQ1N2M4MjAyKTsKICAgICAgICAKCiAgICAgICAgbWFya2VyX2VmY2ZjYjUzMDg0YTQ0YWViOGIwMTU2YTEwOGY4NzUyLmJpbmRQb3B1cChwb3B1cF82NGYyODIwZTMzZTU0ZmFmOWFmOGE1MzEyMmUzNjQxZikKICAgICAgICA7CgogICAgICAgIAogICAgCiAgICAKICAgICAgICAgICAgdmFyIG1hcmtlcl9lODk1NWY2MzJmNWU0OTBmOGMzNmRlMjEwZDQ5YjYzYSA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQ2LjIwMTc1NTksIDYuMTQ2NjAxNF0sCiAgICAgICAgICAgICAgICB7fQogICAgICAgICAgICApLmFkZFRvKG1hcF9kZGNiNWI0ZjhlM2I0N2Y4OGI5NzUwN2ZjYWEyM2Q4MSk7CiAgICAgICAgCiAgICAKICAgICAgICB2YXIgcG9wdXBfNjI1NjExYzlkMGNjNDJiNDlhY2VmNDMwYzZjZGE0OTEgPSBMLnBvcHVwKHsibWF4V2lkdGgiOiAiMTAwJSJ9KTsKCiAgICAgICAgCiAgICAgICAgICAgIHZhciBodG1sXzNhY2MzODFiZTk4YjQ1MDM4MTVlMWEyNzRjMzQ0MzBkID0gJChgPGRpdiBpZD0iaHRtbF8zYWNjMzgxYmU5OGI0NTAzODE1ZTFhMjc0YzM0NDMwZCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+QXQgdGhlIFZpbGxhIFJvc2UsR2VuZXZhPC9kaXY+YClbMF07CiAgICAgICAgICAgIHBvcHVwXzYyNTYxMWM5ZDBjYzQyYjQ5YWNlZjQzMGM2Y2RhNDkxLnNldENvbnRlbnQoaHRtbF8zYWNjMzgxYmU5OGI0NTAzODE1ZTFhMjc0YzM0NDMwZCk7CiAgICAgICAgCgogICAgICAgIG1hcmtlcl9lODk1NWY2MzJmNWU0OTBmOGMzNmRlMjEwZDQ5YjYzYS5iaW5kUG9wdXAocG9wdXBfNjI1NjExYzlkMGNjNDJiNDlhY2VmNDMwYzZjZGE0OTEpCiAgICAgICAgOwoKICAgICAgICAKICAgIAogICAgCiAgICAgICAgICAgIHZhciBtYXJrZXJfN2YyZjhiNzU4MTI4NDg4MTg2ZDlkMGJlODY0N2E3Y2QgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs0Mi4zMjEyNDYsIC04OC44MjM1NTExXSwKICAgICAgICAgICAgICAgIHt9CiAgICAgICAgICAgICkuYWRkVG8obWFwX2RkY2I1YjRmOGUzYjQ3Zjg4Yjk3NTA3ZmNhYTIzZDgxKTsKICAgICAgICAKICAgIAogICAgICAgIHZhciBwb3B1cF8yZWY4ZjgyNjZhZmU0MWFhOTYyYzQ3ZGNlNWVlOGNmNiA9IEwucG9wdXAoeyJtYXhXaWR0aCI6ICIxMDAlIn0pOwoKICAgICAgICAKICAgICAgICAgICAgdmFyIGh0bWxfYzMwYmMyYzJlY2M5NGFlNDlkZmU1ODZjMzYyZDNiMjMgPSAkKGA8ZGl2IGlkPSJodG1sX2MzMGJjMmMyZWNjOTRhZTQ5ZGZlNTg2YzM2MmQzYjIzIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5UaGUgTWF5b3IncyBXaWZlLEJvb25lPC9kaXY+YClbMF07CiAgICAgICAgICAgIHBvcHVwXzJlZjhmODI2NmFmZTQxYWE5NjJjNDdkY2U1ZWU4Y2Y2LnNldENvbnRlbnQoaHRtbF9jMzBiYzJjMmVjYzk0YWU0OWRmZTU4NmMzNjJkM2IyMyk7CiAgICAgICAgCgogICAgICAgIG1hcmtlcl83ZjJmOGI3NTgxMjg0ODgxODZkOWQwYmU4NjQ3YTdjZC5iaW5kUG9wdXAocG9wdXBfMmVmOGY4MjY2YWZlNDFhYTk2MmM0N2RjZTVlZThjZjYpCiAgICAgICAgOwoKICAgICAgICAKICAgIAogICAgCiAgICAgICAgICAgIHZhciBtYXJrZXJfZGJiNjM1ZjZiMGJjNGYwMThhOTlhNTEzMzQ3NTRmMmEgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs1MS41MDczMjE5LCAtMC4xMjc2NDc0XSwKICAgICAgICAgICAgICAgIHt9CiAgICAgICAgICAgICkuYWRkVG8obWFwX2RkY2I1YjRmOGUzYjQ3Zjg4Yjk3NTA3ZmNhYTIzZDgxKTsKICAgICAgICAKICAgIAogICAgICAgIHZhciBwb3B1cF9jMjk4MjRiYzJkOTE0ZTkwOGFiMDY5NWFjMzc4ODZlNiA9IEwucG9wdXAoeyJtYXhXaWR0aCI6ICIxMDAlIn0pOwoKICAgICAgICAKICAgICAgICAgICAgdmFyIGh0bWxfYTMxNTg1M2U4NDcxNDIzY2JkYjUxNmViNmIwZDY2MDQgPSAkKGA8ZGl2IGlkPSJodG1sX2EzMTU4NTNlODQ3MTQyM2NiZGI1MTZlYjZiMGQ2NjA0IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5OdW1iZXIgU2V2ZW50ZWVuLExvbmRvbjwvZGl2PmApWzBdOwogICAgICAgICAgICBwb3B1cF9jMjk4MjRiYzJkOTE0ZTkwOGFiMDY5NWFjMzc4ODZlNi5zZXRDb250ZW50KGh0bWxfYTMxNTg1M2U4NDcxNDIzY2JkYjUxNmViNmIwZDY2MDQpOwogICAgICAgIAoKICAgICAgICBtYXJrZXJfZGJiNjM1ZjZiMGJjNGYwMThhOTlhNTEzMzQ3NTRmMmEuYmluZFBvcHVwKHBvcHVwX2MyOTgyNGJjMmQ5MTRlOTA4YWIwNjk1YWMzNzg4NmU2KQogICAgICAgIDsKCiAgICAgICAgCiAgICAKICAgIAogICAgICAgICAgICB2YXIgbWFya2VyXzYyZGQ1MzY2YjM2MDQ3ZGY4ZTNhYjg5NGNkYmJkYmIwID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzEyNzI4MSwgLTc0LjAwNjAxNTJdLAogICAgICAgICAgICAgICAge30KICAgICAgICAgICAgKS5hZGRUbyhtYXBfZGRjYjViNGY4ZTNiNDdmODhiOTc1MDdmY2FhMjNkODEpOwogICAgICAgIAogICAgCiAgICAgICAgdmFyIHBvcHVwXzE5ZjBjNzNjNDAyZDQ0N2FiNmUyNDg2MGU5ZmQ1MDM0ID0gTC5wb3B1cCh7Im1heFdpZHRoIjogIjEwMCUifSk7CgogICAgICAgIAogICAgICAgICAgICB2YXIgaHRtbF84ZWU0YzU1ZTVjMDM0ZTFjOGUyMTgwYjNiY2Q2YmJhYyA9ICQoYDxkaXYgaWQ9Imh0bWxfOGVlNGM1NWU1YzAzNGUxYzhlMjE4MGIzYmNkNmJiYWMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlRoZSBSb3ZlciBCb3lzIGluIEJ1c2luZXNzOyBPciwgVGhlIFNlYXJjaCBmb3IgdGhlIE1pc3NpbmcgQm9uZHMsTmV3IFlvcms8L2Rpdj5gKVswXTsKICAgICAgICAgICAgcG9wdXBfMTlmMGM3M2M0MDJkNDQ3YWI2ZTI0ODYwZTlmZDUwMzQuc2V0Q29udGVudChodG1sXzhlZTRjNTVlNWMwMzRlMWM4ZTIxODBiM2JjZDZiYmFjKTsKICAgICAgICAKCiAgICAgICAgbWFya2VyXzYyZGQ1MzY2YjM2MDQ3ZGY4ZTNhYjg5NGNkYmJkYmIwLmJpbmRQb3B1cChwb3B1cF8xOWYwYzczYzQwMmQ0NDdhYjZlMjQ4NjBlOWZkNTAzNCkKICAgICAgICA7CgogICAgICAgIAogICAgCiAgICAKICAgICAgICAgICAgdmFyIG1hcmtlcl9jZGIxODIzMTI1OGY0NjVkYTUzMzYxMzk2YzhmZjViYyA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjcxMjcyODEsIC03NC4wMDYwMTUyXSwKICAgICAgICAgICAgICAgIHt9CiAgICAgICAgICAgICkuYWRkVG8obWFwX2RkY2I1YjRmOGUzYjQ3Zjg4Yjk3NTA3ZmNhYTIzZDgxKTsKICAgICAgICAKICAgIAogICAgICAgIHZhciBwb3B1cF9jY2EyYzNhYzIzNzU0ZGY3OTlkMmFjNjFkMTZkNzY1MyA9IEwucG9wdXAoeyJtYXhXaWR0aCI6ICIxMDAlIn0pOwoKICAgICAgICAKICAgICAgICAgICAgdmFyIGh0bWxfYjkyNTk2ODAyZTcxNDNiMjgyMzJkOTUwOTc2MDdjZTQgPSAkKGA8ZGl2IGlkPSJodG1sX2I5MjU5NjgwMmU3MTQzYjI4MjMyZDk1MDk3NjA3Y2U0IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5UaGUgUm92ZXIgQm95cyBpbiBOZXcgWW9yazsgT3IsIFNhdmluZyBUaGVpciBGYXRoZXIncyBIb25vcixOZXcgWW9yazwvZGl2PmApWzBdOwogICAgICAgICAgICBwb3B1cF9jY2EyYzNhYzIzNzU0ZGY3OTlkMmFjNjFkMTZkNzY1My5zZXRDb250ZW50KGh0bWxfYjkyNTk2ODAyZTcxNDNiMjgyMzJkOTUwOTc2MDdjZTQpOwogICAgICAgIAoKICAgICAgICBtYXJrZXJfY2RiMTgyMzEyNThmNDY1ZGE1MzM2MTM5NmM4ZmY1YmMuYmluZFBvcHVwKHBvcHVwX2NjYTJjM2FjMjM3NTRkZjc5OWQyYWM2MWQxNmQ3NjUzKQogICAgICAgIDsKCiAgICAgICAgCiAgICAKICAgIAogICAgICAgICAgICB2YXIgbWFya2VyX2FkYWQwMDJiZWYyNDRkN2VhZmI2ZWQ5YTAyN2YyNzA0ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzEyNzI4MSwgLTc0LjAwNjAxNTJdLAogICAgICAgICAgICAgICAge30KICAgICAgICAgICAgKS5hZGRUbyhtYXBfZGRjYjViNGY4ZTNiNDdmODhiOTc1MDdmY2FhMjNkODEpOwogICAgICAgIAogICAgCiAgICAgICAgdmFyIHBvcHVwX2U1NjBlOGUzMjRiNzQ0NmJhZWQ3YjQ0NWNmMDFhMjM2ID0gTC5wb3B1cCh7Im1heFdpZHRoIjogIjEwMCUifSk7CgogICAgICAgIAogICAgICAgICAgICB2YXIgaHRtbF9jZDU0YzVkZDVjMDA0ZjAzODk5OGJlMDRiOGUxYzkwMCA9ICQoYDxkaXYgaWQ9Imh0bWxfY2Q1NGM1ZGQ1YzAwNGYwMzg5OThiZTA0YjhlMWM5MDAiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlRoZSBQb2lzb25lZCBQZW4sTmV3IFlvcms8L2Rpdj5gKVswXTsKICAgICAgICAgICAgcG9wdXBfZTU2MGU4ZTMyNGI3NDQ2YmFlZDdiNDQ1Y2YwMWEyMzYuc2V0Q29udGVudChodG1sX2NkNTRjNWRkNWMwMDRmMDM4OTk4YmUwNGI4ZTFjOTAwKTsKICAgICAgICAKCiAgICAgICAgbWFya2VyX2FkYWQwMDJiZWYyNDRkN2VhZmI2ZWQ5YTAyN2YyNzA0LmJpbmRQb3B1cChwb3B1cF9lNTYwZThlMzI0Yjc0NDZiYWVkN2I0NDVjZjAxYTIzNikKICAgICAgICA7CgogICAgICAgIAogICAgCiAgICAKICAgICAgICAgICAgdmFyIG1hcmtlcl81MTJhZjczODNkYjA0ZjM3ODU2Y2UwNGMwYTI0NGQ2MCA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzUxLjQ1NjgwNDQsIC0wLjExNjc5NTldLAogICAgICAgICAgICAgICAge30KICAgICAgICAgICAgKS5hZGRUbyhtYXBfZGRjYjViNGY4ZTNiNDdmODhiOTc1MDdmY2FhMjNkODEpOwogICAgICAgIAogICAgCiAgICAgICAgdmFyIHBvcHVwXzQ0MzQ4NzIyZWNkZTRhYTlhNDBkMDQwN2E1ZDNhZDMyID0gTC5wb3B1cCh7Im1heFdpZHRoIjogIjEwMCUifSk7CgogICAgICAgIAogICAgICAgICAgICB2YXIgaHRtbF8yMTAyYjM5ZWQxZTI0MDkxODFmYWM4NDhjZjg2ZTBiOCA9ICQoYDxkaXYgaWQ9Imh0bWxfMjEwMmIzOWVkMWUyNDA5MTgxZmFjODQ4Y2Y4NmUwYjgiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlRoZSBEcmVhbSBEb2N0b3IsQnJpeHRvbjwvZGl2PmApWzBdOwogICAgICAgICAgICBwb3B1cF80NDM0ODcyMmVjZGU0YWE5YTQwZDA0MDdhNWQzYWQzMi5zZXRDb250ZW50KGh0bWxfMjEwMmIzOWVkMWUyNDA5MTgxZmFjODQ4Y2Y4NmUwYjgpOwogICAgICAgIAoKICAgICAgICBtYXJrZXJfNTEyYWY3MzgzZGIwNGYzNzg1NmNlMDRjMGEyNDRkNjAuYmluZFBvcHVwKHBvcHVwXzQ0MzQ4NzIyZWNkZTRhYTlhNDBkMDQwN2E1ZDNhZDMyKQogICAgICAgIDsKCiAgICAgICAgCiAgICAKICAgIAogICAgICAgICAgICB2YXIgbWFya2VyXzUxMmIzN2EyOTc4YTQ4ZWRhM2VlMzhiYjBiODEzMzI4ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuNDYxMzI3MiwgLTEyMi4xOTc3NDNdLAogICAgICAgICAgICAgICAge30KICAgICAgICAgICAgKS5hZGRUbyhtYXBfZGRjYjViNGY4ZTNiNDdmODhiOTc1MDdmY2FhMjNkODEpOwogICAgICAgIAogICAgCiAgICAgICAgdmFyIHBvcHVwX2RkZjU2N2Q5MDEyNTQ5Y2M5NzIzODhjNmIxNjFlMmEzID0gTC5wb3B1cCh7Im1heFdpZHRoIjogIjEwMCUifSk7CgogICAgICAgIAogICAgICAgICAgICB2YXIgaHRtbF85NzNkYzNkZmE5YTc0MTZjODU3YjY4MTE0NmJkYjRjYSA9ICQoYDxkaXYgaWQ9Imh0bWxfOTczZGMzZGZhOWE3NDE2Yzg1N2I2ODExNDZiZGI0Y2EiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlRoZSBXYXIgVGVycm9yLEF0aGVydG9uPC9kaXY+YClbMF07CiAgICAgICAgICAgIHBvcHVwX2RkZjU2N2Q5MDEyNTQ5Y2M5NzIzODhjNmIxNjFlMmEzLnNldENvbnRlbnQoaHRtbF85NzNkYzNkZmE5YTc0MTZjODU3YjY4MTE0NmJkYjRjYSk7CiAgICAgICAgCgogICAgICAgIG1hcmtlcl81MTJiMzdhMjk3OGE0OGVkYTNlZTM4YmIwYjgxMzMyOC5iaW5kUG9wdXAocG9wdXBfZGRmNTY3ZDkwMTI1NDljYzk3MjM4OGM2YjE2MWUyYTMpCiAgICAgICAgOwoKICAgICAgICAKICAgIAogICAgCiAgICAgICAgICAgIHZhciBtYXJrZXJfNzkyMWM1ODhmYzRiNDJmOTg4ODViMjRhZmI3NDA1OGMgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs0Mi44MDExOTQyLCAtMS42NTg2MTAyNjY5OTQyNF0sCiAgICAgICAgICAgICAgICB7fQogICAgICAgICAgICApLmFkZFRvKG1hcF9kZGNiNWI0ZjhlM2I0N2Y4OGI5NzUwN2ZjYWEyM2Q4MSk7CiAgICAgICAgCiAgICAKICAgICAgICB2YXIgcG9wdXBfNWI1NmUxOTUzMDk0NGEwYmI5OWNkNzUzZmRkNzUxZTEgPSBMLnBvcHVwKHsibWF4V2lkdGgiOiAiMTAwJSJ9KTsKCiAgICAgICAgCiAgICAgICAgICAgIHZhciBodG1sXzE5Y2UzNTE3ODE2MjQ1NWNhZDViNzE1MWU3MDA2MWI1ID0gJChgPGRpdiBpZD0iaHRtbF8xOWNlMzUxNzgxNjI0NTVjYWQ1YjcxNTFlNzAwNjFiNSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TGUgY2hhdGXDonUgZGVzIENhcnBhdGhlcyxVbjwvZGl2PmApWzBdOwogICAgICAgICAgICBwb3B1cF81YjU2ZTE5NTMwOTQ0YTBiYjk5Y2Q3NTNmZGQ3NTFlMS5zZXRDb250ZW50KGh0bWxfMTljZTM1MTc4MTYyNDU1Y2FkNWI3MTUxZTcwMDYxYjUpOwogICAgICAgIAoKICAgICAgICBtYXJrZXJfNzkyMWM1ODhmYzRiNDJmOTg4ODViMjRhZmI3NDA1OGMuYmluZFBvcHVwKHBvcHVwXzViNTZlMTk1MzA5NDRhMGJiOTljZDc1M2ZkZDc1MWUxKQogICAgICAgIDsKCiAgICAgICAgCiAgICAKICAgIAogICAgICAgICAgICB2YXIgbWFya2VyX2ViMTkwZmUxYjc1NzQ1OGM5Nzg5MmU3NjY3YTlmZDMwID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzU4MzksIC04Mi41MTU0NDcxXSwKICAgICAgICAgICAgICAgIHt9CiAgICAgICAgICAgICkuYWRkVG8obWFwX2RkY2I1YjRmOGUzYjQ3Zjg4Yjk3NTA3ZmNhYTIzZDgxKTsKICAgICAgICAKICAgIAogICAgICAgIHZhciBwb3B1cF8xZTE1NTU3YzdmOTg0ZjVkOTQ5NzdlYWI1M2M2ZDE2NCA9IEwucG9wdXAoeyJtYXhXaWR0aCI6ICIxMDAlIn0pOwoKICAgICAgICAKICAgICAgICAgICAgdmFyIGh0bWxfN2Q0ZjM2ZDAwMTA5NDU3MGEyNTZmNDU5N2U4ZjQyMTQgPSAkKGA8ZGl2IGlkPSJodG1sXzdkNGYzNmQwMDEwOTQ1NzBhMjU2ZjQ1OTdlOGY0MjE0IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5UaGUgVHJlYXN1cmUtVHJhaW4sTWFuc2ZpZWxkPC9kaXY+YClbMF07CiAgICAgICAgICAgIHBvcHVwXzFlMTU1NTdjN2Y5ODRmNWQ5NDk3N2VhYjUzYzZkMTY0LnNldENvbnRlbnQoaHRtbF83ZDRmMzZkMDAxMDk0NTcwYTI1NmY0NTk3ZThmNDIxNCk7CiAgICAgICAgCgogICAgICAgIG1hcmtlcl9lYjE5MGZlMWI3NTc0NThjOTc4OTJlNzY2N2E5ZmQzMC5iaW5kUG9wdXAocG9wdXBfMWUxNTU1N2M3Zjk4NGY1ZDk0OTc3ZWFiNTNjNmQxNjQpCiAgICAgICAgOwoKICAgICAgICAKICAgIAogICAgCiAgICAgICAgICAgIHZhciBtYXJrZXJfZDBjMzI0OGQ2NGY4NGMwNGE1YzEzOGUzMzEwYTkzYzkgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC42NjM5OTE2LCAtNzQuMjEwNzAwNl0sCiAgICAgICAgICAgICAgICB7fQogICAgICAgICAgICApLmFkZFRvKG1hcF9kZGNiNWI0ZjhlM2I0N2Y4OGI5NzUwN2ZjYWEyM2Q4MSk7CiAgICAgICAgCiAgICAKICAgICAgICB2YXIgcG9wdXBfM2M4NjA0ZGJmYzY5NDA4ZjllZDI0ZTdhNWEyYTdmZWMgPSBMLnBvcHVwKHsibWF4V2lkdGgiOiAiMTAwJSJ9KTsKCiAgICAgICAgCiAgICAgICAgICAgIHZhciBodG1sXzA1NjU3MWU2OTI5YzQ1NDFhZDVlNWVmY2QxZWVmMzIyID0gJChgPGRpdiBpZD0iaHRtbF8wNTY1NzFlNjkyOWM0NTQxYWQ1ZTVlZmNkMWVlZjMyMiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+VGhlIFRlbXB0aW5nIG9mIFRhdmVybmFrZSxFbGl6YWJldGg8L2Rpdj5gKVswXTsKICAgICAgICAgICAgcG9wdXBfM2M4NjA0ZGJmYzY5NDA4ZjllZDI0ZTdhNWEyYTdmZWMuc2V0Q29udGVudChodG1sXzA1NjU3MWU2OTI5YzQ1NDFhZDVlNWVmY2QxZWVmMzIyKTsKICAgICAgICAKCiAgICAgICAgbWFya2VyX2QwYzMyNDhkNjRmODRjMDRhNWMxMzhlMzMxMGE5M2M5LmJpbmRQb3B1cChwb3B1cF8zYzg2MDRkYmZjNjk0MDhmOWVkMjRlN2E1YTJhN2ZlYykKICAgICAgICA7CgogICAgICAgIAogICAgCiAgICAKICAgICAgICAgICAgdmFyIG1hcmtlcl85NTVkY2JhMmUyNGI0OGU0YmVmYTU1YWUzNWFjOGNkOCA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzUzLjAwNTI2MDUsIC0xLjEyNTU1MzJdLAogICAgICAgICAgICAgICAge30KICAgICAgICAgICAgKS5hZGRUbyhtYXBfZGRjYjViNGY4ZTNiNDdmODhiOTc1MDdmY2FhMjNkODEpOwogICAgICAgIAogICAgCiAgICAgICAgdmFyIHBvcHVwX2MxMDZiMmI0YzI2ZDRkZGQ4YmFjM2Q5ZTgxNWRmYmIwID0gTC5wb3B1cCh7Im1heFdpZHRoIjogIjEwMCUifSk7CgogICAgICAgIAogICAgICAgICAgICB2YXIgaHRtbF8zOTQ3ODBlMmY3M2Q0YWFkOWY4ZWMxYjdiNjYxYjdkYyA9ICQoYDxkaXYgaWQ9Imh0bWxfMzk0NzgwZTJmNzNkNGFhZDlmOGVjMWI3YjY2MWI3ZGMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlRoZSBSb21hbmNlIG9mIEVsYWluZTogU2VxdWVsIHRvICJFeHBsb2l0cyBvZiBFbGFpbmUiLEFybm9sZDwvZGl2PmApWzBdOwogICAgICAgICAgICBwb3B1cF9jMTA2YjJiNGMyNmQ0ZGRkOGJhYzNkOWU4MTVkZmJiMC5zZXRDb250ZW50KGh0bWxfMzk0NzgwZTJmNzNkNGFhZDlmOGVjMWI3YjY2MWI3ZGMpOwogICAgICAgIAoKICAgICAgICBtYXJrZXJfOTU1ZGNiYTJlMjRiNDhlNGJlZmE1NWFlMzVhYzhjZDguYmluZFBvcHVwKHBvcHVwX2MxMDZiMmI0YzI2ZDRkZGQ4YmFjM2Q5ZTgxNWRmYmIwKQogICAgICAgIDsKCiAgICAgICAgCiAgICAKICAgIAogICAgICAgICAgICB2YXIgbWFya2VyX2JhNmI0NmIxNjM5ODQwMDliMWNmZDZmOTNlYzc0ZjkwID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNDIuMDY2OTYxNiwgLTguNDI4MTg0MV0sCiAgICAgICAgICAgICAgICB7fQogICAgICAgICAgICApLmFkZFRvKG1hcF9kZGNiNWI0ZjhlM2I0N2Y4OGI5NzUwN2ZjYWEyM2Q4MSk7CiAgICAgICAgCiAgICAKICAgICAgICB2YXIgcG9wdXBfOTQ5NmY0ZWRlZWEwNDM2ZTg1MzZkN2JkMzg5MTFmNTIgPSBMLnBvcHVwKHsibWF4V2lkdGgiOiAiMTAwJSJ9KTsKCiAgICAgICAgCiAgICAgICAgICAgIHZhciBodG1sXzdkZjRhNTQxZDAyNjQ2NDVhOTcxNDE5YzVkNjRhY2Q2ID0gJChgPGRpdiBpZD0iaHRtbF83ZGY0YTU0MWQwMjY0NjQ1YTk3MTQxOWM1ZDY0YWNkNiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+RGFyayBIb2xsb3csQmVsYTwvZGl2PmApWzBdOwogICAgICAgICAgICBwb3B1cF85NDk2ZjRlZGVlYTA0MzZlODUzNmQ3YmQzODkxMWY1Mi5zZXRDb250ZW50KGh0bWxfN2RmNGE1NDFkMDI2NDY0NWE5NzE0MTljNWQ2NGFjZDYpOwogICAgICAgIAoKICAgICAgICBtYXJrZXJfYmE2YjQ2YjE2Mzk4NDAwOWIxY2ZkNmY5M2VjNzRmOTAuYmluZFBvcHVwKHBvcHVwXzk0OTZmNGVkZWVhMDQzNmU4NTM2ZDdiZDM4OTExZjUyKQogICAgICAgIDsKCiAgICAgICAgCiAgICAKICAgIAogICAgICAgICAgICB2YXIgbWFya2VyX2M0MTRiYWUzYWRjNDQ1ZjZiNjg3YTM3NDM2NGQ2NmE5ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzM5NjQ1MDUsIC03NC4wMDg5MjA5NTAyODk4XSwKICAgICAgICAgICAgICAgIHt9CiAgICAgICAgICAgICkuYWRkVG8obWFwX2RkY2I1YjRmOGUzYjQ3Zjg4Yjk3NTA3ZmNhYTIzZDgxKTsKICAgICAgICAKICAgIAogICAgICAgIHZhciBwb3B1cF8xMjA2YTlmZTMxZmU0N2M1YjcwMWQ5NDNjNjkyMmVkZCA9IEwucG9wdXAoeyJtYXhXaWR0aCI6ICIxMDAlIn0pOwoKICAgICAgICAKICAgICAgICAgICAgdmFyIGh0bWxfMjVjNTZjN2Q0YWUzNGY5OWI0YzY5OTVkZjFmMTA5MTQgPSAkKGA8ZGl2IGlkPSJodG1sXzI1YzU2YzdkNGFlMzRmOTliNGM2OTk1ZGYxZjEwOTE0IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Hb2xkIG9mIHRoZSBHb2RzLFdoaXRuZXk8L2Rpdj5gKVswXTsKICAgICAgICAgICAgcG9wdXBfMTIwNmE5ZmUzMWZlNDdjNWI3MDFkOTQzYzY5MjJlZGQuc2V0Q29udGVudChodG1sXzI1YzU2YzdkNGFlMzRmOTliNGM2OTk1ZGYxZjEwOTE0KTsKICAgICAgICAKCiAgICAgICAgbWFya2VyX2M0MTRiYWUzYWRjNDQ1ZjZiNjg3YTM3NDM2NGQ2NmE5LmJpbmRQb3B1cChwb3B1cF8xMjA2YTlmZTMxZmU0N2M1YjcwMWQ5NDNjNjkyMmVkZCkKICAgICAgICA7CgogICAgICAgIAogICAgCiAgICAKICAgICAgICAgICAgdmFyIG1hcmtlcl9iMzI5M2RlMTkzYjU0NzUxYWM2ZGVhYmJlMjU0MWI4MSA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjcxMjcyODEsIC03NC4wMDYwMTUyXSwKICAgICAgICAgICAgICAgIHt9CiAgICAgICAgICAgICkuYWRkVG8obWFwX2RkY2I1YjRmOGUzYjQ3Zjg4Yjk3NTA3ZmNhYTIzZDgxKTsKICAgICAgICAKICAgIAogICAgICAgIHZhciBwb3B1cF9lMTk1NzFiYmU3NjE0ZjdkODhhZTAzM2ZkZjVmMjYyOCA9IEwucG9wdXAoeyJtYXhXaWR0aCI6ICIxMDAlIn0pOwoKICAgICAgICAKICAgICAgICAgICAgdmFyIGh0bWxfM2Y2NmIyMWEwZTBlNGM4MDhiODNlODUwZWUxMWQ3MmEgPSAkKGA8ZGl2IGlkPSJodG1sXzNmNjZiMjFhMGUwZTRjODA4YjgzZTg1MGVlMTFkNzJhIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5UaGUgRWFyIGluIHRoZSBXYWxsLE5ldyBZb3JrPC9kaXY+YClbMF07CiAgICAgICAgICAgIHBvcHVwX2UxOTU3MWJiZTc2MTRmN2Q4OGFlMDMzZmRmNWYyNjI4LnNldENvbnRlbnQoaHRtbF8zZjY2YjIxYTBlMGU0YzgwOGI4M2U4NTBlZTExZDcyYSk7CiAgICAgICAgCgogICAgICAgIG1hcmtlcl9iMzI5M2RlMTkzYjU0NzUxYWM2ZGVhYmJlMjU0MWI4MS5iaW5kUG9wdXAocG9wdXBfZTE5NTcxYmJlNzYxNGY3ZDg4YWUwMzNmZGY1ZjI2MjgpCiAgICAgICAgOwoKICAgICAgICAKICAgIAogICAgCiAgICAgICAgICAgIHZhciBtYXJrZXJfY2IyNmQzZTBmZGI0NDAxM2E4NTQ3NTc4ZGYyMTRiMzMgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFszNy4xMzAyOTE2LCA2Mi40MDE5NTEzXSwKICAgICAgICAgICAgICAgIHt9CiAgICAgICAgICAgICkuYWRkVG8obWFwX2RkY2I1YjRmOGUzYjQ3Zjg4Yjk3NTA3ZmNhYTIzZDgxKTsKICAgICAgICAKICAgIAogICAgICAgIHZhciBwb3B1cF9mZjEyM2Y3ODVjNDg0MjUwYTNhNjQ0NDNmOTJjMThlOSA9IEwucG9wdXAoeyJtYXhXaWR0aCI6ICIxMDAlIn0pOwoKICAgICAgICAKICAgICAgICAgICAgdmFyIGh0bWxfZGViNTdkYjBiM2ZlNGE5OTg1MjI1M2FhMGNmMWQzZjcgPSAkKGA8ZGl2IGlkPSJodG1sX2RlYjU3ZGIwYjNmZTRhOTk4NTIyNTNhYTBjZjFkM2Y3IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5UaGUgRXhwbG9pdHMgb2YgRWxhaW5lLE1hcnk8L2Rpdj5gKVswXTsKICAgICAgICAgICAgcG9wdXBfZmYxMjNmNzg1YzQ4NDI1MGEzYTY0NDQzZjkyYzE4ZTkuc2V0Q29udGVudChodG1sX2RlYjU3ZGIwYjNmZTRhOTk4NTIyNTNhYTBjZjFkM2Y3KTsKICAgICAgICAKCiAgICAgICAgbWFya2VyX2NiMjZkM2UwZmRiNDQwMTNhODU0NzU3OGRmMjE0YjMzLmJpbmRQb3B1cChwb3B1cF9mZjEyM2Y3ODVjNDg0MjUwYTNhNjQ0NDNmOTJjMThlOSkKICAgICAgICA7CgogICAgICAgIAogICAgCiAgICAKICAgICAgICAgICAgdmFyIG1hcmtlcl9mZTQ3MjhmZTJhYjM0ZjI5OTUxMjNjOGExMmQwMmIxZSA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzM5LjQxNDIxODYsIC03Ny40MTA5MjY5XSwKICAgICAgICAgICAgICAgIHt9CiAgICAgICAgICAgICkuYWRkVG8obWFwX2RkY2I1YjRmOGUzYjQ3Zjg4Yjk3NTA3ZmNhYTIzZDgxKTsKICAgICAgICAKICAgIAogICAgICAgIHZhciBwb3B1cF8wZGE5MWIzZmMwM2I0OGVlYmY2MmQyNGQ1ZjdjNjZhOCA9IEwucG9wdXAoeyJtYXhXaWR0aCI6ICIxMDAlIn0pOwoKICAgICAgICAKICAgICAgICAgICAgdmFyIGh0bWxfZDE5MzMzYTQ5YzczNGJmZGIyNzAyNWJiMTE1YjI2OWEgPSAkKGA8ZGl2IGlkPSJodG1sX2QxOTMzM2E0OWM3MzRiZmRiMjcwMjViYjExNWIyNjlhIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5BZ2F0aGEgV2ViYixGcmVkZXJpY2s8L2Rpdj5gKVswXTsKICAgICAgICAgICAgcG9wdXBfMGRhOTFiM2ZjMDNiNDhlZWJmNjJkMjRkNWY3YzY2YTguc2V0Q29udGVudChodG1sX2QxOTMzM2E0OWM3MzRiZmRiMjcwMjViYjExNWIyNjlhKTsKICAgICAgICAKCiAgICAgICAgbWFya2VyX2ZlNDcyOGZlMmFiMzRmMjk5NTEyM2M4YTEyZDAyYjFlLmJpbmRQb3B1cChwb3B1cF8wZGE5MWIzZmMwM2I0OGVlYmY2MmQyNGQ1ZjdjNjZhOCkKICAgICAgICA7CgogICAgICAgIAogICAgCiAgICAKICAgICAgICAgICAgdmFyIG1hcmtlcl85YTBmMDE3NmM0OGU0MDU5OTE3ODIwNjkwNDg2MTAyMiA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzUzLjQwMTg1ODIsIC0yLjU2ODAyMjM1OTcxNjNdLAogICAgICAgICAgICAgICAge30KICAgICAgICAgICAgKS5hZGRUbyhtYXBfZGRjYjViNGY4ZTNiNDdmODhiOTc1MDdmY2FhMjNkODEpOwogICAgICAgIAogICAgCiAgICAgICAgdmFyIHBvcHVwX2U1ZTA4NjUxNDgwNDQwM2RiOGYyYTZjZmI2ZDY5Yzk5ID0gTC5wb3B1cCh7Im1heFdpZHRoIjogIjEwMCUifSk7CgogICAgICAgIAogICAgICAgICAgICB2YXIgaHRtbF9lNTA1ODZlNzU2YjA0YWZmOGEwNjYxZjBiZWMyYzc3OCA9ICQoYDxkaXYgaWQ9Imh0bWxfZTUwNTg2ZTc1NmIwNGFmZjhhMDY2MWYwYmVjMmM3NzgiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkd1eSBHYXJyaWNrLFdhcnJpbmd0b248L2Rpdj5gKVswXTsKICAgICAgICAgICAgcG9wdXBfZTVlMDg2NTE0ODA0NDAzZGI4ZjJhNmNmYjZkNjljOTkuc2V0Q29udGVudChodG1sX2U1MDU4NmU3NTZiMDRhZmY4YTA2NjFmMGJlYzJjNzc4KTsKICAgICAgICAKCiAgICAgICAgbWFya2VyXzlhMGYwMTc2YzQ4ZTQwNTk5MTc4MjA2OTA0ODYxMDIyLmJpbmRQb3B1cChwb3B1cF9lNWUwODY1MTQ4MDQ0MDNkYjhmMmE2Y2ZiNmQ2OWM5OSkKICAgICAgICA7CgogICAgICAgIAogICAgCiAgICAKICAgICAgICAgICAgdmFyIG1hcmtlcl9kNTY1Nzg2YTk2MTk0ZWY2ODYxOGY4NGMzMDViYWIwYiA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQ0LjQxNjE0MTQsIDEyLjIwMTc2MTddLAogICAgICAgICAgICAgICAge30KICAgICAgICAgICAgKS5hZGRUbyhtYXBfZGRjYjViNGY4ZTNiNDdmODhiOTc1MDdmY2FhMjNkODEpOwogICAgICAgIAogICAgCiAgICAgICAgdmFyIHBvcHVwX2ZiZWY1ZTNjNGJkZjQ3NzBiZjJjMDkzM2YyMmQ5NzFiID0gTC5wb3B1cCh7Im1heFdpZHRoIjogIjEwMCUifSk7CgogICAgICAgIAogICAgICAgICAgICB2YXIgaHRtbF83NjZjMTYyODUxMWE0MDJlYjE5ZjQ4YTY0ZjAwMDk3MSA9ICQoYDxkaXYgaWQ9Imh0bWxfNzY2YzE2Mjg1MTFhNDAyZWIxOWY0OGE2NGYwMDA5NzEiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkEgU2lyZW4sUmF2ZW5uYTwvZGl2PmApWzBdOwogICAgICAgICAgICBwb3B1cF9mYmVmNWUzYzRiZGY0NzcwYmYyYzA5MzNmMjJkOTcxYi5zZXRDb250ZW50KGh0bWxfNzY2YzE2Mjg1MTFhNDAyZWIxOWY0OGE2NGYwMDA5NzEpOwogICAgICAgIAoKICAgICAgICBtYXJrZXJfZDU2NTc4NmE5NjE5NGVmNjg2MThmODRjMzA1YmFiMGIuYmluZFBvcHVwKHBvcHVwX2ZiZWY1ZTNjNGJkZjQ3NzBiZjJjMDkzM2YyMmQ5NzFiKQogICAgICAgIDsKCiAgICAgICAgCiAgICAKICAgIAogICAgICAgICAgICB2YXIgbWFya2VyXzI0YzhlNDQ1N2UyOTQyNTc4MGNiOTgwN2E3ZjA2MmI5ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbLTIxLjE0MTk1NiwgMTQ5LjE4NjUxNDldLAogICAgICAgICAgICAgICAge30KICAgICAgICAgICAgKS5hZGRUbyhtYXBfZGRjYjViNGY4ZTNiNDdmODhiOTc1MDdmY2FhMjNkODEpOwogICAgICAgIAogICAgCiAgICAgICAgdmFyIHBvcHVwXzAyY2IxOWQxMjU2YzQ2MmM4NzBmYjg5MmJjYzlkYWFmID0gTC5wb3B1cCh7Im1heFdpZHRoIjogIjEwMCUifSk7CgogICAgICAgIAogICAgICAgICAgICB2YXIgaHRtbF9hYTBhMDUyMGYzZmQ0ZWFhOGE5MDNkODE1Y2ZjODExNCA9ICQoYDxkaXYgaWQ9Imh0bWxfYWEwYTA1MjBmM2ZkNGVhYThhOTAzZDgxNWNmYzgxMTQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlRoZSBGaWxtIE15c3RlcnksTWFja2F5PC9kaXY+YClbMF07CiAgICAgICAgICAgIHBvcHVwXzAyY2IxOWQxMjU2YzQ2MmM4NzBmYjg5MmJjYzlkYWFmLnNldENvbnRlbnQoaHRtbF9hYTBhMDUyMGYzZmQ0ZWFhOGE5MDNkODE1Y2ZjODExNCk7CiAgICAgICAgCgogICAgICAgIG1hcmtlcl8yNGM4ZTQ0NTdlMjk0MjU3ODBjYjk4MDdhN2YwNjJiOS5iaW5kUG9wdXAocG9wdXBfMDJjYjE5ZDEyNTZjNDYyYzg3MGZiODkyYmNjOWRhYWYpCiAgICAgICAgOwoKICAgICAgICAKICAgIAogICAgCiAgICAgICAgICAgIHZhciBtYXJrZXJfZjNkMDJhY2UzOThjNDRiNDhiMGY2Y2E1MTI5N2M2MDEgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFszNy4xMzAyOTE2LCA2Mi40MDE5NTEzXSwKICAgICAgICAgICAgICAgIHt9CiAgICAgICAgICAgICkuYWRkVG8obWFwX2RkY2I1YjRmOGUzYjQ3Zjg4Yjk3NTA3ZmNhYTIzZDgxKTsKICAgICAgICAKICAgIAogICAgICAgIHZhciBwb3B1cF81NjcxNmM3M2I0MjU0YWY4OGE1ZDJhNzQ3MzU2MGI3MCA9IEwucG9wdXAoeyJtYXhXaWR0aCI6ICIxMDAlIn0pOwoKICAgICAgICAKICAgICAgICAgICAgdmFyIGh0bWxfY2FiYzk4MzRlYmE4NGU4MGE3ZWFiNzIzMDc3ZTEyZjggPSAkKGA8ZGl2IGlkPSJodG1sX2NhYmM5ODM0ZWJhODRlODBhN2VhYjcyMzA3N2UxMmY4IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5UaGUgUGFyYWRpc2UgTXlzdGVyeSxNYXJ5PC9kaXY+YClbMF07CiAgICAgICAgICAgIHBvcHVwXzU2NzE2YzczYjQyNTRhZjg4YTVkMmE3NDczNTYwYjcwLnNldENvbnRlbnQoaHRtbF9jYWJjOTgzNGViYTg0ZTgwYTdlYWI3MjMwNzdlMTJmOCk7CiAgICAgICAgCgogICAgICAgIG1hcmtlcl9mM2QwMmFjZTM5OGM0NGI0OGIwZjZjYTUxMjk3YzYwMS5iaW5kUG9wdXAocG9wdXBfNTY3MTZjNzNiNDI1NGFmODhhNWQyYTc0NzM1NjBiNzApCiAgICAgICAgOwoKICAgICAgICAKICAgIAogICAgCiAgICAgICAgICAgIHZhciBtYXJrZXJfNDEwYzFhMTI5MjAzNDdhOGIxNWQ0M2UxNzk0ODE0YjggPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFszNS40Nzk4NzU3LCAtNzkuMTgwMjk5NF0sCiAgICAgICAgICAgICAgICB7fQogICAgICAgICAgICApLmFkZFRvKG1hcF9kZGNiNWI0ZjhlM2I0N2Y4OGI5NzUwN2ZjYWEyM2Q4MSk7CiAgICAgICAgCiAgICAKICAgICAgICB2YXIgcG9wdXBfY2Q5NmQ1NWU3ZjkxNDQ5ZTg0ZmUzNjc3ZmEyMGQ3NzMgPSBMLnBvcHVwKHsibWF4V2lkdGgiOiAiMTAwJSJ9KTsKCiAgICAgICAgCiAgICAgICAgICAgIHZhciBodG1sXzA1NGZjYzQyOTQzYTRmNDNiN2UxMzE0NThkNGFhN2IyID0gJChgPGRpdiBpZD0iaHRtbF8wNTRmY2M0Mjk0M2E0ZjQzYjdlMTMxNDU4ZDRhYTdiMiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+UmFzcGJlcnJ5IEphbSxTYW5mb3JkPC9kaXY+YClbMF07CiAgICAgICAgICAgIHBvcHVwX2NkOTZkNTVlN2Y5MTQ0OWU4NGZlMzY3N2ZhMjBkNzczLnNldENvbnRlbnQoaHRtbF8wNTRmY2M0Mjk0M2E0ZjQzYjdlMTMxNDU4ZDRhYTdiMik7CiAgICAgICAgCgogICAgICAgIG1hcmtlcl80MTBjMWExMjkyMDM0N2E4YjE1ZDQzZTE3OTQ4MTRiOC5iaW5kUG9wdXAocG9wdXBfY2Q5NmQ1NWU3ZjkxNDQ5ZTg0ZmUzNjc3ZmEyMGQ3NzMpCiAgICAgICAgOwoKICAgICAgICAKICAgIAogICAgCiAgICAgICAgICAgIHZhciBtYXJrZXJfZjlmYzA2YjI1ZGRiNDc2OWE3MTlmYWU3YmYyMGY4MTQgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFszNC4yMjAzODksIDcwLjM4MDAzMTRdLAogICAgICAgICAgICAgICAge30KICAgICAgICAgICAgKS5hZGRUbyhtYXBfZGRjYjViNGY4ZTNiNDdmODhiOTc1MDdmY2FhMjNkODEpOwogICAgICAgIAogICAgCiAgICAgICAgdmFyIHBvcHVwXzExMzFlOGZiMzQ1NTRhMzE5MjBjNGM5Njc0OTQ5YTdjID0gTC5wb3B1cCh7Im1heFdpZHRoIjogIjEwMCUifSk7CgogICAgICAgIAogICAgICAgICAgICB2YXIgaHRtbF83ZDczYzI1ZDIwYTc0Y2JlOGE4ODQ2YzBlZTA3NWZkMyA9ICQoYDxkaXYgaWQ9Imh0bWxfN2Q3M2MyNWQyMGE3NGNiZThhODg0NmMwZWUwNzVmZDMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk1hcnkgTG91aXNlLE5hbjwvZGl2PmApWzBdOwogICAgICAgICAgICBwb3B1cF8xMTMxZThmYjM0NTU0YTMxOTIwYzRjOTY3NDk0OWE3Yy5zZXRDb250ZW50KGh0bWxfN2Q3M2MyNWQyMGE3NGNiZThhODg0NmMwZWUwNzVmZDMpOwogICAgICAgIAoKICAgICAgICBtYXJrZXJfZjlmYzA2YjI1ZGRiNDc2OWE3MTlmYWU3YmYyMGY4MTQuYmluZFBvcHVwKHBvcHVwXzExMzFlOGZiMzQ1NTRhMzE5MjBjNGM5Njc0OTQ5YTdjKQogICAgICAgIDsKCiAgICAgICAgCiAgICAKICAgIAogICAgICAgICAgICB2YXIgbWFya2VyX2JjY2Q5MDk0YzQ5YzQ1MmRiMmE3ZmQ2N2EzNzIyYWNiID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNTIuNDAzNTMxNCwgLTEuODQ1MTU5NV0sCiAgICAgICAgICAgICAgICB7fQogICAgICAgICAgICApLmFkZFRvKG1hcF9kZGNiNWI0ZjhlM2I0N2Y4OGI5NzUwN2ZjYWEyM2Q4MSk7CiAgICAgICAgCiAgICAKICAgICAgICB2YXIgcG9wdXBfMGYzZjUwNTI2ZTVmNDlkZGIxMzBmYTFmYTM5MDEzNjggPSBMLnBvcHVwKHsibWF4V2lkdGgiOiAiMTAwJSJ9KTsKCiAgICAgICAgCiAgICAgICAgICAgIHZhciBodG1sXzkwOWNiZTk4OWMzMDQzMTc4NWFhOWIyNWI1ZDJmOTIwID0gJChgPGRpdiBpZD0iaHRtbF85MDljYmU5ODljMzA0MzE3ODVhYTliMjViNWQyZjkyMCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+VGhlIFZvaWNlIG9uIHRoZSBXaXJlLFNoaXJsZXk8L2Rpdj5gKVswXTsKICAgICAgICAgICAgcG9wdXBfMGYzZjUwNTI2ZTVmNDlkZGIxMzBmYTFmYTM5MDEzNjguc2V0Q29udGVudChodG1sXzkwOWNiZTk4OWMzMDQzMTc4NWFhOWIyNWI1ZDJmOTIwKTsKICAgICAgICAKCiAgICAgICAgbWFya2VyX2JjY2Q5MDk0YzQ5YzQ1MmRiMmE3ZmQ2N2EzNzIyYWNiLmJpbmRQb3B1cChwb3B1cF8wZjNmNTA1MjZlNWY0OWRkYjEzMGZhMWZhMzkwMTM2OCkKICAgICAgICA7CgogICAgICAgIAogICAgCiAgICAKICAgICAgICAgICAgdmFyIG1hcmtlcl9lY2VjMGY5YWMwYjU0YmNhYmMzMjE1ZDI1Y2E4OGM3OCA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzM4Ljg0NjIyMzYsIC03Ny4zMDYzNzMzXSwKICAgICAgICAgICAgICAgIHt9CiAgICAgICAgICAgICkuYWRkVG8obWFwX2RkY2I1YjRmOGUzYjQ3Zjg4Yjk3NTA3ZmNhYTIzZDgxKTsKICAgICAgICAKICAgIAogICAgICAgIHZhciBwb3B1cF9hMWNlOTZmMjEzODk0MzhmYWIwYWZlZmZkN2NmOTNmNiA9IEwucG9wdXAoeyJtYXhXaWR0aCI6ICIxMDAlIn0pOwoKICAgICAgICAKICAgICAgICAgICAgdmFyIGh0bWxfOWY4ZjZiYzBmY2ZkNDAxMmFlMDdiMjY5MDVkZTkxMDEgPSAkKGA8ZGl2IGlkPSJodG1sXzlmOGY2YmMwZmNmZDQwMTJhZTA3YjI2OTA1ZGU5MTAxIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5UaGUgRXZpbCBTaGVwaGVyZCxGYWlyZmF4PC9kaXY+YClbMF07CiAgICAgICAgICAgIHBvcHVwX2ExY2U5NmYyMTM4OTQzOGZhYjBhZmVmZmQ3Y2Y5M2Y2LnNldENvbnRlbnQoaHRtbF85ZjhmNmJjMGZjZmQ0MDEyYWUwN2IyNjkwNWRlOTEwMSk7CiAgICAgICAgCgogICAgICAgIG1hcmtlcl9lY2VjMGY5YWMwYjU0YmNhYmMzMjE1ZDI1Y2E4OGM3OC5iaW5kUG9wdXAocG9wdXBfYTFjZTk2ZjIxMzg5NDM4ZmFiMGFmZWZmZDdjZjkzZjYpCiAgICAgICAgOwoKICAgICAgICAKICAgIAogICAgCiAgICAgICAgICAgIHZhciBtYXJrZXJfNGQ0YmFkZDZhMmVkNDdjYzhmMTJkMDJmMWE3MmVhNjIgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs0MS44NzU1NjE2LCAtODcuNjI0NDIxMl0sCiAgICAgICAgICAgICAgICB7fQogICAgICAgICAgICApLmFkZFRvKG1hcF9kZGNiNWI0ZjhlM2I0N2Y4OGI5NzUwN2ZjYWEyM2Q4MSk7CiAgICAgICAgCiAgICAKICAgICAgICB2YXIgcG9wdXBfMWZlMzE4MTA5Yjg1NGQwZWFiMjk0OTJkNDQ1MWRjZDMgPSBMLnBvcHVwKHsibWF4V2lkdGgiOiAiMTAwJSJ9KTsKCiAgICAgICAgCiAgICAgICAgICAgIHZhciBodG1sXzYzNjBmYzhlZTk5YTQ3MTM5MmUyMzFiNTdiOThhMWZmID0gJChgPGRpdiBpZD0iaHRtbF82MzYwZmM4ZWU5OWE0NzEzOTJlMjMxYjU3Yjk4YTFmZiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+RHlrZSBEYXJyZWwgdGhlIFJhaWxyb2FkIERldGVjdGl2ZTsgT3IsIFRoZSBDcmltZSBvZiB0aGUgTWlkbmlnaHQgRXhwcmVzcyxDaGljYWdvPC9kaXY+YClbMF07CiAgICAgICAgICAgIHBvcHVwXzFmZTMxODEwOWI4NTRkMGVhYjI5NDkyZDQ0NTFkY2QzLnNldENvbnRlbnQoaHRtbF82MzYwZmM4ZWU5OWE0NzEzOTJlMjMxYjU3Yjk4YTFmZik7CiAgICAgICAgCgogICAgICAgIG1hcmtlcl80ZDRiYWRkNmEyZWQ0N2NjOGYxMmQwMmYxYTcyZWE2Mi5iaW5kUG9wdXAocG9wdXBfMWZlMzE4MTA5Yjg1NGQwZWFiMjk0OTJkNDQ1MWRjZDMpCiAgICAgICAgOwoKICAgICAgICAKICAgIAogICAgCiAgICAgICAgICAgIHZhciBtYXJrZXJfZDRjMzg5MDY2ZDk0NDdlODg0ZTdmZmEzNWFkNGIwMTUgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs0OC44Mzc2Mjg0LCAtMS41OTU5MjEzXSwKICAgICAgICAgICAgICAgIHt9CiAgICAgICAgICAgICkuYWRkVG8obWFwX2RkY2I1YjRmOGUzYjQ3Zjg4Yjk3NTA3ZmNhYTIzZDgxKTsKICAgICAgICAKICAgIAogICAgICAgIHZhciBwb3B1cF8yOWRjZDdmYmJjMmI0ZGM4ODFhNzk1ZGExZmE0YTBjYyA9IEwucG9wdXAoeyJtYXhXaWR0aCI6ICIxMDAlIn0pOwoKICAgICAgICAKICAgICAgICAgICAgdmFyIGh0bWxfMzk3ZjEzMWRmMWUzNGNkMWI0OGZiNWJlY2I2Zjg3NGMgPSAkKGA8ZGl2IGlkPSJodG1sXzM5N2YxMzFkZjFlMzRjZDFiNDhmYjViZWNiNmY4NzRjIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5XaGF0J3MgQnJlZCBpbiB0aGUgQm9uZSxHcmFudmlsbGU8L2Rpdj5gKVswXTsKICAgICAgICAgICAgcG9wdXBfMjlkY2Q3ZmJiYzJiNGRjODgxYTc5NWRhMWZhNGEwY2Muc2V0Q29udGVudChodG1sXzM5N2YxMzFkZjFlMzRjZDFiNDhmYjViZWNiNmY4NzRjKTsKICAgICAgICAKCiAgICAgICAgbWFya2VyX2Q0YzM4OTA2NmQ5NDQ3ZTg4NGU3ZmZhMzVhZDRiMDE1LmJpbmRQb3B1cChwb3B1cF8yOWRjZDdmYmJjMmI0ZGM4ODFhNzk1ZGExZmE0YTBjYykKICAgICAgICA7CgogICAgICAgIAogICAgCiAgICAKICAgICAgICAgICAgdmFyIG1hcmtlcl83MzhhMjU0YmI2MjU0N2NkYmYzMDRjYjVmNmM2NGFjMCA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzM3Ljg4ODIxNjgsIC05NS4zMTcwMjA4XSwKICAgICAgICAgICAgICAgIHt9CiAgICAgICAgICAgICkuYWRkVG8obWFwX2RkY2I1YjRmOGUzYjQ3Zjg4Yjk3NTA3ZmNhYTIzZDgxKTsKICAgICAgICAKICAgIAogICAgICAgIHZhciBwb3B1cF84NDIzMWNkM2Y2YzA0MDQ1OGU0ZmRjYjg0MzYzODUzMyA9IEwucG9wdXAoeyJtYXhXaWR0aCI6ICIxMDAlIn0pOwoKICAgICAgICAKICAgICAgICAgICAgdmFyIGh0bWxfZmQ1ZDA3MDEyYWEwNDM1MDk5ZDIxNGYyN2M0YWMzYTEgPSAkKGA8ZGl2IGlkPSJodG1sX2ZkNWQwNzAxMmFhMDQzNTA5OWQyMTRmMjdjNGFjM2ExIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5WaWNreSBWYW4sQWxsZW48L2Rpdj5gKVswXTsKICAgICAgICAgICAgcG9wdXBfODQyMzFjZDNmNmMwNDA0NThlNGZkY2I4NDM2Mzg1MzMuc2V0Q29udGVudChodG1sX2ZkNWQwNzAxMmFhMDQzNTA5OWQyMTRmMjdjNGFjM2ExKTsKICAgICAgICAKCiAgICAgICAgbWFya2VyXzczOGEyNTRiYjYyNTQ3Y2RiZjMwNGNiNWY2YzY0YWMwLmJpbmRQb3B1cChwb3B1cF84NDIzMWNkM2Y2YzA0MDQ1OGU0ZmRjYjg0MzYzODUzMykKICAgICAgICA7CgogICAgICAgIAogICAgCiAgICAKICAgICAgICAgICAgdmFyIG1hcmtlcl85NjAzYjI4MzhiZDA0MDk4YjFkZDE2OTRhOTRkMWIwMiA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzUxLjgxNjE0MTIsIC0wLjgxMzAzODNdLAogICAgICAgICAgICAgICAge30KICAgICAgICAgICAgKS5hZGRUbyhtYXBfZGRjYjViNGY4ZTNiNDdmODhiOTc1MDdmY2FhMjNkODEpOwogICAgICAgIAogICAgCiAgICAgICAgdmFyIHBvcHVwXzkwYWNlOTJjMTMzYjQyYWFiYWQxZDNlMTUzMzNhMTc4ID0gTC5wb3B1cCh7Im1heFdpZHRoIjogIjEwMCUifSk7CgogICAgICAgIAogICAgICAgICAgICB2YXIgaHRtbF8xYmUzM2I1NjcwNTI0ODQwYTY0NjMxNjA3OThiM2UxZSA9ICQoYDxkaXYgaWQ9Imh0bWxfMWJlMzNiNTY3MDUyNDg0MGE2NDYzMTYwNzk4YjNlMWUiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkJhdCBXaW5nLEF5bGVzYnVyeTwvZGl2PmApWzBdOwogICAgICAgICAgICBwb3B1cF85MGFjZTkyYzEzM2I0MmFhYmFkMWQzZTE1MzMzYTE3OC5zZXRDb250ZW50KGh0bWxfMWJlMzNiNTY3MDUyNDg0MGE2NDYzMTYwNzk4YjNlMWUpOwogICAgICAgIAoKICAgICAgICBtYXJrZXJfOTYwM2IyODM4YmQwNDA5OGIxZGQxNjk0YTk0ZDFiMDIuYmluZFBvcHVwKHBvcHVwXzkwYWNlOTJjMTMzYjQyYWFiYWQxZDNlMTUzMzNhMTc4KQogICAgICAgIDsKCiAgICAgICAgCiAgICAKICAgIAogICAgICAgICAgICB2YXIgbWFya2VyXzVhMWU4NWJmNjc2MDQyOThiMTk5NDE1NzE1Nzg5MWU2ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMzguODM5ODkzNSwgLTgzLjUwNTE3MDRdLAogICAgICAgICAgICAgICAge30KICAgICAgICAgICAgKS5hZGRUbyhtYXBfZGRjYjViNGY4ZTNiNDdmODhiOTc1MDdmY2FhMjNkODEpOwogICAgICAgIAogICAgCiAgICAgICAgdmFyIHBvcHVwX2ZjODU0OTcxMGRiYjQ5Y2RhYzAyOGRkMDBlZmY5NmY1ID0gTC5wb3B1cCh7Im1heFdpZHRoIjogIjEwMCUifSk7CgogICAgICAgIAogICAgICAgICAgICB2YXIgaHRtbF8yYzhiM2MxZmU5ZWM0Nzg4ODA4OGVkMTY5ZjM3ODVmMiA9ICQoYDxkaXYgaWQ9Imh0bWxfMmM4YjNjMWZlOWVjNDc4ODgwODhlZDE2OWYzNzg1ZjIiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlRoZSBNaWxsIE15c3RlcnksQWRhPC9kaXY+YClbMF07CiAgICAgICAgICAgIHBvcHVwX2ZjODU0OTcxMGRiYjQ5Y2RhYzAyOGRkMDBlZmY5NmY1LnNldENvbnRlbnQoaHRtbF8yYzhiM2MxZmU5ZWM0Nzg4ODA4OGVkMTY5ZjM3ODVmMik7CiAgICAgICAgCgogICAgICAgIG1hcmtlcl81YTFlODViZjY3NjA0Mjk4YjE5OTQxNTcxNTc4OTFlNi5iaW5kUG9wdXAocG9wdXBfZmM4NTQ5NzEwZGJiNDljZGFjMDI4ZGQwMGVmZjk2ZjUpCiAgICAgICAgOwoKICAgICAgICAKICAgIAogICAgCiAgICAgICAgICAgIHZhciBtYXJrZXJfODY2NzhhMTM0MDkwNDg0MjhkYWQ2ZDBiOTRlMGMwM2IgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43MTI3MjgxLCAtNzQuMDA2MDE1Ml0sCiAgICAgICAgICAgICAgICB7fQogICAgICAgICAgICApLmFkZFRvKG1hcF9kZGNiNWI0ZjhlM2I0N2Y4OGI5NzUwN2ZjYWEyM2Q4MSk7CiAgICAgICAgCiAgICAKICAgICAgICB2YXIgcG9wdXBfNzU1ZGViZGFiYTM0NDYxYmJiMDJlYTFjZjQwODI2ZjkgPSBMLnBvcHVwKHsibWF4V2lkdGgiOiAiMTAwJSJ9KTsKCiAgICAgICAgCiAgICAgICAgICAgIHZhciBodG1sX2MyOGM3MGZlZjY2ZDQ1N2I4MjRmZDBhMDc1MmFiZjBlID0gJChgPGRpdiBpZD0iaHRtbF9jMjhjNzBmZWY2NmQ0NTdiODI0ZmQwYTA3NTJhYmYwZSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+QXZlcmFnZSBKb25lcyxOZXcgWW9yazwvZGl2PmApWzBdOwogICAgICAgICAgICBwb3B1cF83NTVkZWJkYWJhMzQ0NjFiYmIwMmVhMWNmNDA4MjZmOS5zZXRDb250ZW50KGh0bWxfYzI4YzcwZmVmNjZkNDU3YjgyNGZkMGEwNzUyYWJmMGUpOwogICAgICAgIAoKICAgICAgICBtYXJrZXJfODY2NzhhMTM0MDkwNDg0MjhkYWQ2ZDBiOTRlMGMwM2IuYmluZFBvcHVwKHBvcHVwXzc1NWRlYmRhYmEzNDQ2MWJiYjAyZWExY2Y0MDgyNmY5KQogICAgICAgIDsKCiAgICAgICAgCiAgICAKICAgIAogICAgICAgICAgICB2YXIgbWFya2VyXzVjMzE3N2FhODU0ODQ0MmM5YWQ5OTNlYjc3OWVhNDQ4ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuNzc5MjgwOCwgLTEyMi40MTkyMzYzXSwKICAgICAgICAgICAgICAgIHt9CiAgICAgICAgICAgICkuYWRkVG8obWFwX2RkY2I1YjRmOGUzYjQ3Zjg4Yjk3NTA3ZmNhYTIzZDgxKTsKICAgICAgICAKICAgIAogICAgICAgIHZhciBwb3B1cF8wYjkyMjY4N2MzMGQ0MThiYmRmYWEwMmI3ZDdmMDE0OSA9IEwucG9wdXAoeyJtYXhXaWR0aCI6ICIxMDAlIn0pOwoKICAgICAgICAKICAgICAgICAgICAgdmFyIGh0bWxfNzljOWUyM2ZjNjc3NDhlZGJkNDY3YTlmZTNiZmFiNjkgPSAkKGA8ZGl2IGlkPSJodG1sXzc5YzllMjNmYzY3NzQ4ZWRiZDQ2N2E5ZmUzYmZhYjY5IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5UaGUgQXZhbGFuY2hlOiBBIE15c3RlcnkgU3RvcnksU2FuIEZyYW5jaXNjbzwvZGl2PmApWzBdOwogICAgICAgICAgICBwb3B1cF8wYjkyMjY4N2MzMGQ0MThiYmRmYWEwMmI3ZDdmMDE0OS5zZXRDb250ZW50KGh0bWxfNzljOWUyM2ZjNjc3NDhlZGJkNDY3YTlmZTNiZmFiNjkpOwogICAgICAgIAoKICAgICAgICBtYXJrZXJfNWMzMTc3YWE4NTQ4NDQyYzlhZDk5M2ViNzc5ZWE0NDguYmluZFBvcHVwKHBvcHVwXzBiOTIyNjg3YzMwZDQxOGJiZGZhYTAyYjdkN2YwMTQ5KQogICAgICAgIDsKCiAgICAgICAgCiAgICAKICAgIAogICAgICAgICAgICB2YXIgbWFya2VyXzYwOTdmMzhkY2VmNjQ3YzQ4NWQxODMwNTM0ZTUyZDBhID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNTEuNTA3MzIxOSwgLTAuMTI3NjQ3NF0sCiAgICAgICAgICAgICAgICB7fQogICAgICAgICAgICApLmFkZFRvKG1hcF9kZGNiNWI0ZjhlM2I0N2Y4OGI5NzUwN2ZjYWEyM2Q4MSk7CiAgICAgICAgCiAgICAKICAgICAgICB2YXIgcG9wdXBfY2FjMzhhYTk5Y2Q5NDQ4Mzk3YTQwNTJhODZlMDY3YWMgPSBMLnBvcHVwKHsibWF4V2lkdGgiOiAiMTAwJSJ9KTsKCiAgICAgICAgCiAgICAgICAgICAgIHZhciBodG1sXzk4NDNiNTRjZTRmZjQzYTQ5ZDkzNWU1ZWY4MTk2NGJjID0gJChgPGRpdiBpZD0iaHRtbF85ODQzYjU0Y2U0ZmY0M2E0OWQ5MzVlNWVmODE5NjRiYyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Q29sb25lbCBUaG9ybmR5a2UncyBTZWNyZXQsTG9uZG9uPC9kaXY+YClbMF07CiAgICAgICAgICAgIHBvcHVwX2NhYzM4YWE5OWNkOTQ0ODM5N2E0MDUyYTg2ZTA2N2FjLnNldENvbnRlbnQoaHRtbF85ODQzYjU0Y2U0ZmY0M2E0OWQ5MzVlNWVmODE5NjRiYyk7CiAgICAgICAgCgogICAgICAgIG1hcmtlcl82MDk3ZjM4ZGNlZjY0N2M0ODVkMTgzMDUzNGU1MmQwYS5iaW5kUG9wdXAocG9wdXBfY2FjMzhhYTk5Y2Q5NDQ4Mzk3YTQwNTJhODZlMDY3YWMpCiAgICAgICAgOwoKICAgICAgICAKICAgIAogICAgCiAgICAgICAgICAgIHZhciBtYXJrZXJfYzYwODA5NTM1YjZjNDA4OWFhMjU3OTJmZDliY2M4ZTkgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs1MS41MDczMjE5LCAtMC4xMjc2NDc0XSwKICAgICAgICAgICAgICAgIHt9CiAgICAgICAgICAgICkuYWRkVG8obWFwX2RkY2I1YjRmOGUzYjQ3Zjg4Yjk3NTA3ZmNhYTIzZDgxKTsKICAgICAgICAKICAgIAogICAgICAgIHZhciBwb3B1cF9lZDhmNGVmMmZlZGU0MWIyOTMyYjc2NGZhZDVjYjQ5MCA9IEwucG9wdXAoeyJtYXhXaWR0aCI6ICIxMDAlIn0pOwoKICAgICAgICAKICAgICAgICAgICAgdmFyIGh0bWxfNmY3M2I4NDRlYmM3NDBjMjg5OGMyOTAzNDkzYjI3ZDYgPSAkKGA8ZGl2IGlkPSJodG1sXzZmNzNiODQ0ZWJjNzQwYzI4OThjMjkwMzQ5M2IyN2Q2IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5UaGUgT3JhbmdlLVllbGxvdyBEaWFtb25kLExvbmRvbjwvZGl2PmApWzBdOwogICAgICAgICAgICBwb3B1cF9lZDhmNGVmMmZlZGU0MWIyOTMyYjc2NGZhZDVjYjQ5MC5zZXRDb250ZW50KGh0bWxfNmY3M2I4NDRlYmM3NDBjMjg5OGMyOTAzNDkzYjI3ZDYpOwogICAgICAgIAoKICAgICAgICBtYXJrZXJfYzYwODA5NTM1YjZjNDA4OWFhMjU3OTJmZDliY2M4ZTkuYmluZFBvcHVwKHBvcHVwX2VkOGY0ZWYyZmVkZTQxYjI5MzJiNzY0ZmFkNWNiNDkwKQogICAgICAgIDsKCiAgICAgICAgCiAgICAKICAgIAogICAgICAgICAgICB2YXIgbWFya2VyXzdhYjFkNTExMmQwZjRlNDY5NmY4ODgzYTI5NWUwOGYwID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNDguMjA4MzUzNywgMTYuMzcyNTA0Ml0sCiAgICAgICAgICAgICAgICB7fQogICAgICAgICAgICApLmFkZFRvKG1hcF9kZGNiNWI0ZjhlM2I0N2Y4OGI5NzUwN2ZjYWEyM2Q4MSk7CiAgICAgICAgCiAgICAKICAgICAgICB2YXIgcG9wdXBfMWMxNTA3MWRjYWIyNGUyYzkwZDM5NjQxNDM3NmViNGYgPSBMLnBvcHVwKHsibWF4V2lkdGgiOiAiMTAwJSJ9KTsKCiAgICAgICAgCiAgICAgICAgICAgIHZhciBodG1sX2Q5NGM1NjA5NDY2YjRmOThiZmQyMjkxM2Q2ZTlmNzkzID0gJChgPGRpdiBpZD0iaHRtbF9kOTRjNTYwOTQ2NmI0Zjk4YmZkMjI5MTNkNmU5Zjc5MyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+SmVubmllIEJheHRlciwgSm91cm5hbGlzdCxWaWVubmE8L2Rpdj5gKVswXTsKICAgICAgICAgICAgcG9wdXBfMWMxNTA3MWRjYWIyNGUyYzkwZDM5NjQxNDM3NmViNGYuc2V0Q29udGVudChodG1sX2Q5NGM1NjA5NDY2YjRmOThiZmQyMjkxM2Q2ZTlmNzkzKTsKICAgICAgICAKCiAgICAgICAgbWFya2VyXzdhYjFkNTExMmQwZjRlNDY5NmY4ODgzYTI5NWUwOGYwLmJpbmRQb3B1cChwb3B1cF8xYzE1MDcxZGNhYjI0ZTJjOTBkMzk2NDE0Mzc2ZWI0ZikKICAgICAgICA7CgogICAgICAgIAogICAgCiAgICAKICAgICAgICAgICAgdmFyIG1hcmtlcl8zNWVhNGQzNDhjNTA0Y2JkODM5MTNhNGVmODM1ZWYyOSA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzMxLjM5NDA5NjksIC04NS42MjM3NjNdLAogICAgICAgICAgICAgICAge30KICAgICAgICAgICAgKS5hZGRUbyhtYXBfZGRjYjViNGY4ZTNiNDdmODhiOTc1MDdmY2FhMjNkODEpOwogICAgICAgIAogICAgCiAgICAgICAgdmFyIHBvcHVwXzY4MGU4ODMxZmFlMDQ0OTZhMzM5YTIxYTEyYzEzZmVmID0gTC5wb3B1cCh7Im1heFdpZHRoIjogIjEwMCUifSk7CgogICAgICAgIAogICAgICAgICAgICB2YXIgaHRtbF85YjRjYzcwYzYxNzk0N2I0OTQ0NTczMDIzMWM3MjNkNyA9ICQoYDxkaXYgaWQ9Imh0bWxfOWI0Y2M3MGM2MTc5NDdiNDk0NDU3MzAyMzFjNzIzZDciIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlRoZSBGdXJ0aGVyIEFkdmVudHVyZXMgb2YgSmltbWllIERhbGUsRGFsZTwvZGl2PmApWzBdOwogICAgICAgICAgICBwb3B1cF82ODBlODgzMWZhZTA0NDk2YTMzOWEyMWExMmMxM2ZlZi5zZXRDb250ZW50KGh0bWxfOWI0Y2M3MGM2MTc5NDdiNDk0NDU3MzAyMzFjNzIzZDcpOwogICAgICAgIAoKICAgICAgICBtYXJrZXJfMzVlYTRkMzQ4YzUwNGNiZDgzOTEzYTRlZjgzNWVmMjkuYmluZFBvcHVwKHBvcHVwXzY4MGU4ODMxZmFlMDQ0OTZhMzM5YTIxYTEyYzEzZmVmKQogICAgICAgIDsKCiAgICAgICAgCiAgICAKICAgIAogICAgICAgICAgICB2YXIgbWFya2VyXzRjMGZkYjU2ZWQ0YTQ4MGY5YTBiMzRlNzFjYTg3ZDM3ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNDguNjkzNzIyMywgNi4xODM0MDk3XSwKICAgICAgICAgICAgICAgIHt9CiAgICAgICAgICAgICkuYWRkVG8obWFwX2RkY2I1YjRmOGUzYjQ3Zjg4Yjk3NTA3ZmNhYTIzZDgxKTsKICAgICAgICAKICAgIAogICAgICAgIHZhciBwb3B1cF83Yjc3MmZlYjFkZjE0NjBkYWQ1NjhkZjQyZjNlZWFlYSA9IEwucG9wdXAoeyJtYXhXaWR0aCI6ICIxMDAlIn0pOwoKICAgICAgICAKICAgICAgICAgICAgdmFyIGh0bWxfNmFmODQ4NWU1NTUzNGEwMjhiZmQ3NjJhMmNlNGRmNjkgPSAkKGA8ZGl2IGlkPSJodG1sXzZhZjg0ODVlNTU1MzRhMDI4YmZkNzYyYTJjZTRkZjY5IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5UaGUgRW5kIG9mIEhlciBIb25leW1vb24sTmFuY3k8L2Rpdj5gKVswXTsKICAgICAgICAgICAgcG9wdXBfN2I3NzJmZWIxZGYxNDYwZGFkNTY4ZGY0MmYzZWVhZWEuc2V0Q29udGVudChodG1sXzZhZjg0ODVlNTU1MzRhMDI4YmZkNzYyYTJjZTRkZjY5KTsKICAgICAgICAKCiAgICAgICAgbWFya2VyXzRjMGZkYjU2ZWQ0YTQ4MGY5YTBiMzRlNzFjYTg3ZDM3LmJpbmRQb3B1cChwb3B1cF83Yjc3MmZlYjFkZjE0NjBkYWQ1NjhkZjQyZjNlZWFlYSkKICAgICAgICA7CgogICAgICAgIAogICAgCiAgICAKICAgICAgICAgICAgdmFyIG1hcmtlcl80YWY2YzU4YzliNDI0OWUzOTM2YTAyZmU3ZWQ4ZDM2NiA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzM5LjUxODQ1MTQsIC0xMDQuNzYxMjYzOF0sCiAgICAgICAgICAgICAgICB7fQogICAgICAgICAgICApLmFkZFRvKG1hcF9kZGNiNWI0ZjhlM2I0N2Y4OGI5NzUwN2ZjYWEyM2Q4MSk7CiAgICAgICAgCiAgICAKICAgICAgICB2YXIgcG9wdXBfMDc3YjUyYmVjMDdhNDBlMmFjYmE2M2ZiZTRhYjFhMmMgPSBMLnBvcHVwKHsibWF4V2lkdGgiOiAiMTAwJSJ9KTsKCiAgICAgICAgCiAgICAgICAgICAgIHZhciBodG1sX2FmY2YyMDM1OWExMjQ0ZmViYmEwYmZiYjkzMzdlNmQxID0gJChgPGRpdiBpZD0iaHRtbF9hZmNmMjAzNTlhMTI0NGZlYmJhMGJmYmI5MzM3ZTZkMSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+QW4gQW1pYWJsZSBDaGFybGF0YW4sUGFya2VyPC9kaXY+YClbMF07CiAgICAgICAgICAgIHBvcHVwXzA3N2I1MmJlYzA3YTQwZTJhY2JhNjNmYmU0YWIxYTJjLnNldENvbnRlbnQoaHRtbF9hZmNmMjAzNTlhMTI0NGZlYmJhMGJmYmI5MzM3ZTZkMSk7CiAgICAgICAgCgogICAgICAgIG1hcmtlcl80YWY2YzU4YzliNDI0OWUzOTM2YTAyZmU3ZWQ4ZDM2Ni5iaW5kUG9wdXAocG9wdXBfMDc3YjUyYmVjMDdhNDBlMmFjYmE2M2ZiZTRhYjFhMmMpCiAgICAgICAgOwoKICAgICAgICAKICAgIAogICAgCiAgICAgICAgICAgIHZhciBtYXJrZXJfMTJjNzM2ZTdmYjdlNGM3M2FjNWQyNTlhNjA3ZjA1NzYgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs0Ny4wMzg1NzI1LCAyNi42NjgyNjg5NDc1MTE3XSwKICAgICAgICAgICAgICAgIHt9CiAgICAgICAgICAgICkuYWRkVG8obWFwX2RkY2I1YjRmOGUzYjQ3Zjg4Yjk3NTA3ZmNhYTIzZDgxKTsKICAgICAgICAKICAgIAogICAgICAgIHZhciBwb3B1cF9hMGVhYzc4ZTU2N2E0MmM3YTQ4MWM0NWYzZmY1NmVmOSA9IEwucG9wdXAoeyJtYXhXaWR0aCI6ICIxMDAlIn0pOwoKICAgICAgICAKICAgICAgICAgICAgdmFyIGh0bWxfODNjZjRkNDYzYzExNDBjNjg4MGFmMjcxNjdkNjQ0OGQgPSAkKGA8ZGl2IGlkPSJodG1sXzgzY2Y0ZDQ2M2MxMTQwYzY4ODBhZjI3MTY3ZDY0NDhkIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5UaGUgQXNoaWVsIG15c3Rlcnk6IEEgRGV0ZWN0aXZlIFN0b3J5LERhdmlkPC9kaXY+YClbMF07CiAgICAgICAgICAgIHBvcHVwX2EwZWFjNzhlNTY3YTQyYzdhNDgxYzQ1ZjNmZjU2ZWY5LnNldENvbnRlbnQoaHRtbF84M2NmNGQ0NjNjMTE0MGM2ODgwYWYyNzE2N2Q2NDQ4ZCk7CiAgICAgICAgCgogICAgICAgIG1hcmtlcl8xMmM3MzZlN2ZiN2U0YzczYWM1ZDI1OWE2MDdmMDU3Ni5iaW5kUG9wdXAocG9wdXBfYTBlYWM3OGU1NjdhNDJjN2E0ODFjNDVmM2ZmNTZlZjkpCiAgICAgICAgOwoKICAgICAgICAKICAgIAogICAgCiAgICAgICAgICAgIHZhciBtYXJrZXJfOGZmN2FiMGM1YWM0NGVhNjlkZTU5YWIyZWJmMmQyMWEgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs1My43NTg5OTM4LCAtMi43MDUxNjE4XSwKICAgICAgICAgICAgICAgIHt9CiAgICAgICAgICAgICkuYWRkVG8obWFwX2RkY2I1YjRmOGUzYjQ3Zjg4Yjk3NTA3ZmNhYTIzZDgxKTsKICAgICAgICAKICAgIAogICAgICAgIHZhciBwb3B1cF8xMmE5NmNkNDE5N2I0YjllYWE1YzM4YWNhZTIwOTVkMCA9IEwucG9wdXAoeyJtYXhXaWR0aCI6ICIxMDAlIn0pOwoKICAgICAgICAKICAgICAgICAgICAgdmFyIGh0bWxfMmIyNDA0NjZjMzc1NDQ4ZDliOTM2NTBlYzJhYzBhZDggPSAkKGA8ZGl2IGlkPSJodG1sXzJiMjQwNDY2YzM3NTQ0OGQ5YjkzNjUwZWMyYWMwYWQ4IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5UaGUgRm91ciBGYWNlczogQSBNeXN0ZXJ5LFByZXN0b248L2Rpdj5gKVswXTsKICAgICAgICAgICAgcG9wdXBfMTJhOTZjZDQxOTdiNGI5ZWFhNWMzOGFjYWUyMDk1ZDAuc2V0Q29udGVudChodG1sXzJiMjQwNDY2YzM3NTQ0OGQ5YjkzNjUwZWMyYWMwYWQ4KTsKICAgICAgICAKCiAgICAgICAgbWFya2VyXzhmZjdhYjBjNWFjNDRlYTY5ZGU1OWFiMmViZjJkMjFhLmJpbmRQb3B1cChwb3B1cF8xMmE5NmNkNDE5N2I0YjllYWE1YzM4YWNhZTIwOTVkMCkKICAgICAgICA7CgogICAgICAgIAogICAgCiAgICAKICAgICAgICAgICAgdmFyIG1hcmtlcl8xMjIzNGE1MTAwOTY0MDMxODMzMDBlMDBmY2RjMTMwNiA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzUzLjU0NTcxODgsIC0yLjYyNjQ2MjRdLAogICAgICAgICAgICAgICAge30KICAgICAgICAgICAgKS5hZGRUbyhtYXBfZGRjYjViNGY4ZTNiNDdmODhiOTc1MDdmY2FhMjNkODEpOwogICAgICAgIAogICAgCiAgICAgICAgdmFyIHBvcHVwXzc1MjBjMzkxNTUxODQ1MjViNjRhMWI5ZmRjN2I4MThmID0gTC5wb3B1cCh7Im1heFdpZHRoIjogIjEwMCUifSk7CgogICAgICAgIAogICAgICAgICAgICB2YXIgaHRtbF9kZjA2MzM1NzgwMDQ0NjNhODU2ZGFhMzU2OTg4OWQxYiA9ICQoYDxkaXYgaWQ9Imh0bWxfZGYwNjMzNTc4MDA0NDYzYTg1NmRhYTM1Njk4ODlkMWIiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlRoZSBNYXN0ZXIgRGV0ZWN0aXZlOiBCZWluZyBTb21lIEZ1cnRoZXIgSW52ZXN0aWdhdGlvbnMgb2YgQ2hyaXN0b3BoZXIgUXVhcmxlcyxXaWdhbjwvZGl2PmApWzBdOwogICAgICAgICAgICBwb3B1cF83NTIwYzM5MTU1MTg0NTI1YjY0YTFiOWZkYzdiODE4Zi5zZXRDb250ZW50KGh0bWxfZGYwNjMzNTc4MDA0NDYzYTg1NmRhYTM1Njk4ODlkMWIpOwogICAgICAgIAoKICAgICAgICBtYXJrZXJfMTIyMzRhNTEwMDk2NDAzMTgzMzAwZTAwZmNkYzEzMDYuYmluZFBvcHVwKHBvcHVwXzc1MjBjMzkxNTUxODQ1MjViNjRhMWI5ZmRjN2I4MThmKQogICAgICAgIDsKCiAgICAgICAgCiAgICAKICAgIAogICAgICAgICAgICB2YXIgbWFya2VyXzIxNjk3ZTVhMTY0MjQzODFiMzc1MDkwYTAzYzQ3ZDZhID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNTIuODA2MzE1NywgLTIuMTE2MzgxOF0sCiAgICAgICAgICAgICAgICB7fQogICAgICAgICAgICApLmFkZFRvKG1hcF9kZGNiNWI0ZjhlM2I0N2Y4OGI5NzUwN2ZjYWEyM2Q4MSk7CiAgICAgICAgCiAgICAKICAgICAgICB2YXIgcG9wdXBfZjRmY2UzMjhhNmFiNDdiN2E4NmUyY2UwMzUxMzFkZWUgPSBMLnBvcHVwKHsibWF4V2lkdGgiOiAiMTAwJSJ9KTsKCiAgICAgICAgCiAgICAgICAgICAgIHZhciBodG1sXzU4OGVkZWY3OTNhNDQ1N2Q5YTljMTQzNjJmYjRlZTI0ID0gJChgPGRpdiBpZD0iaHRtbF81ODhlZGVmNzkzYTQ0NTdkOWE5YzE0MzYyZmI0ZWUyNCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+U2NhcmhhdmVuIEtlZXAsU3RhZmZvcmQ8L2Rpdj5gKVswXTsKICAgICAgICAgICAgcG9wdXBfZjRmY2UzMjhhNmFiNDdiN2E4NmUyY2UwMzUxMzFkZWUuc2V0Q29udGVudChodG1sXzU4OGVkZWY3OTNhNDQ1N2Q5YTljMTQzNjJmYjRlZTI0KTsKICAgICAgICAKCiAgICAgICAgbWFya2VyXzIxNjk3ZTVhMTY0MjQzODFiMzc1MDkwYTAzYzQ3ZDZhLmJpbmRQb3B1cChwb3B1cF9mNGZjZTMyOGE2YWI0N2I3YTg2ZTJjZTAzNTEzMWRlZSkKICAgICAgICA7CgogICAgICAgIAogICAgCiAgICAKICAgICAgICAgICAgdmFyIG1hcmtlcl83NjFkYTA5Y2UzMjc0NGM3YTY1OTgzODkwYTFkYzEzMCA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjY2Mzk5MTYsIC03NC4yMTA3MDA2XSwKICAgICAgICAgICAgICAgIHt9CiAgICAgICAgICAgICkuYWRkVG8obWFwX2RkY2I1YjRmOGUzYjQ3Zjg4Yjk3NTA3ZmNhYTIzZDgxKTsKICAgICAgICAKICAgIAogICAgICAgIHZhciBwb3B1cF9kMzUyYzRiNWMzZmE0YjczOGMxNzhlOGIwOWY2YzcwZSA9IEwucG9wdXAoeyJtYXhXaWR0aCI6ICIxMDAlIn0pOwoKICAgICAgICAKICAgICAgICAgICAgdmFyIGh0bWxfYjgyZjJmYWI0ZmMwNDFmODkwNzZkZmRlMTI1Y2MwYzUgPSAkKGA8ZGl2IGlkPSJodG1sX2I4MmYyZmFiNGZjMDQxZjg5MDc2ZGZkZTEyNWNjMGM1IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5UaGUgTG91ZHdhdGVyIE15c3RlcnksRWxpemFiZXRoPC9kaXY+YClbMF07CiAgICAgICAgICAgIHBvcHVwX2QzNTJjNGI1YzNmYTRiNzM4YzE3OGU4YjA5ZjZjNzBlLnNldENvbnRlbnQoaHRtbF9iODJmMmZhYjRmYzA0MWY4OTA3NmRmZGUxMjVjYzBjNSk7CiAgICAgICAgCgogICAgICAgIG1hcmtlcl83NjFkYTA5Y2UzMjc0NGM3YTY1OTgzODkwYTFkYzEzMC5iaW5kUG9wdXAocG9wdXBfZDM1MmM0YjVjM2ZhNGI3MzhjMTc4ZThiMDlmNmM3MGUpCiAgICAgICAgOwoKICAgICAgICAKICAgIAogICAgCiAgICAgICAgICAgIHZhciBtYXJrZXJfNDM1NzRiMDE5ZjQ5NDc4MmE2OWI3MzM4MmFiZjk0MTIgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs0NC40OTY1MDUsIC04MC4yMTcwMThdLAogICAgICAgICAgICAgICAge30KICAgICAgICAgICAgKS5hZGRUbyhtYXBfZGRjYjViNGY4ZTNiNDdmODhiOTc1MDdmY2FhMjNkODEpOwogICAgICAgIAogICAgCiAgICAgICAgdmFyIHBvcHVwXzYwNTY3MDY0N2QxNjQ5YWFhYWFlMDEyMWQ4ZDQ5NDEwID0gTC5wb3B1cCh7Im1heFdpZHRoIjogIjEwMCUifSk7CgogICAgICAgIAogICAgICAgICAgICB2YXIgaHRtbF8zNTA4OWI0MmU5ODU0NDc2YTAzYmNmY2FmODgwNzQ4YyA9ICQoYDxkaXYgaWQ9Imh0bWxfMzUwODliNDJlOTg1NDQ3NmEwM2JjZmNhZjg4MDc0OGMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlRoZSBUYWxsZXlyYW5kIE1heGltLENvbGxpbmd3b29kPC9kaXY+YClbMF07CiAgICAgICAgICAgIHBvcHVwXzYwNTY3MDY0N2QxNjQ5YWFhYWFlMDEyMWQ4ZDQ5NDEwLnNldENvbnRlbnQoaHRtbF8zNTA4OWI0MmU5ODU0NDc2YTAzYmNmY2FmODgwNzQ4Yyk7CiAgICAgICAgCgogICAgICAgIG1hcmtlcl80MzU3NGIwMTlmNDk0NzgyYTY5YjczMzgyYWJmOTQxMi5iaW5kUG9wdXAocG9wdXBfNjA1NjcwNjQ3ZDE2NDlhYWFhYWUwMTIxZDhkNDk0MTApCiAgICAgICAgOwoKICAgICAgICAKICAgIAogICAgCiAgICAgICAgICAgIHZhciBtYXJrZXJfOGRjYjUyMDJkMTYyNDI1MmEzNmJkOTUyZTg2YzFjMmMgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFszOS4zNDA2MiwgLTk5Ljg5ODA2MjRdLAogICAgICAgICAgICAgICAge30KICAgICAgICAgICAgKS5hZGRUbyhtYXBfZGRjYjViNGY4ZTNiNDdmODhiOTc1MDdmY2FhMjNkODEpOwogICAgICAgIAogICAgCiAgICAgICAgdmFyIHBvcHVwXzlmMTljNTAzNjYwMzRlMTk4YzhlMDY1ZTYyNTk4ODM5ID0gTC5wb3B1cCh7Im1heFdpZHRoIjogIjEwMCUifSk7CgogICAgICAgIAogICAgICAgICAgICB2YXIgaHRtbF9hYjgwODE4YzNhMWM0MjU0OTYzMGIwZjJiNzk0ZjcxYiA9ICQoYDxkaXYgaWQ9Imh0bWxfYWI4MDgxOGMzYTFjNDI1NDk2MzBiMGYyYjc5NGY3MWIiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlRoZSBQYXducyBDb3VudCxHcmFoYW08L2Rpdj5gKVswXTsKICAgICAgICAgICAgcG9wdXBfOWYxOWM1MDM2NjAzNGUxOThjOGUwNjVlNjI1OTg4Mzkuc2V0Q29udGVudChodG1sX2FiODA4MThjM2ExYzQyNTQ5NjMwYjBmMmI3OTRmNzFiKTsKICAgICAgICAKCiAgICAgICAgbWFya2VyXzhkY2I1MjAyZDE2MjQyNTJhMzZiZDk1MmU4NmMxYzJjLmJpbmRQb3B1cChwb3B1cF85ZjE5YzUwMzY2MDM0ZTE5OGM4ZTA2NWU2MjU5ODgzOSkKICAgICAgICA7CgogICAgICAgIAogICAgCiAgICAKICAgICAgICAgICAgdmFyIG1hcmtlcl84ODAyNmNmNjdkMDg0ZjY3ODYyNjI3NzRjMWM2OGNmMiA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzM3LjI0NzU5NDIsIC0xLjg2ODE5NjFdLAogICAgICAgICAgICAgICAge30KICAgICAgICAgICAgKS5hZGRUbyhtYXBfZGRjYjViNGY4ZTNiNDdmODhiOTc1MDdmY2FhMjNkODEpOwogICAgICAgIAogICAgCiAgICAgICAgdmFyIHBvcHVwX2JjYjc1NmU1ODY4ODQ0ODVhN2FlZTg3OTFkNmU3MGU3ID0gTC5wb3B1cCh7Im1heFdpZHRoIjogIjEwMCUifSk7CgogICAgICAgIAogICAgICAgICAgICB2YXIgaHRtbF9lZTg0ZWExMjM5MTc0MjQyOGVhYjkwMjE1ZDAxNjI0NCA9ICQoYDxkaXYgaWQ9Imh0bWxfZWU4NGVhMTIzOTE3NDI0MjhlYWI5MDIxNWQwMTYyNDQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlRoZSBNeXN0ZXJ5IG9mIHRoZSBGb3VyIEZpbmdlcnMsVmVyYTwvZGl2PmApWzBdOwogICAgICAgICAgICBwb3B1cF9iY2I3NTZlNTg2ODg0NDg1YTdhZWU4NzkxZDZlNzBlNy5zZXRDb250ZW50KGh0bWxfZWU4NGVhMTIzOTE3NDI0MjhlYWI5MDIxNWQwMTYyNDQpOwogICAgICAgIAoKICAgICAgICBtYXJrZXJfODgwMjZjZjY3ZDA4NGY2Nzg2MjYyNzc0YzFjNjhjZjIuYmluZFBvcHVwKHBvcHVwX2JjYjc1NmU1ODY4ODQ0ODVhN2FlZTg3OTFkNmU3MGU3KQogICAgICAgIDsKCiAgICAgICAgCiAgICAKICAgIAogICAgICAgICAgICB2YXIgbWFya2VyXzk3Yjg1YWIwMTEwODRmNjBhNWUzZGEwNGYzNTY1MWM2ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMzMuMzUyNzYzMiwgLTExMS43ODkwMzczXSwKICAgICAgICAgICAgICAgIHt9CiAgICAgICAgICAgICkuYWRkVG8obWFwX2RkY2I1YjRmOGUzYjQ3Zjg4Yjk3NTA3ZmNhYTIzZDgxKTsKICAgICAgICAKICAgIAogICAgICAgIHZhciBwb3B1cF8xY2YzY2QzNjQ4MTM0NmZlYjEyOWUzMzYxYmJlZjU1ZCA9IEwucG9wdXAoeyJtYXhXaWR0aCI6ICIxMDAlIn0pOwoKICAgICAgICAKICAgICAgICAgICAgdmFyIGh0bWxfMTJmMGMwYTQyN2Q5NDM1NTk3MWFjYWM0ODVmNWM2NGYgPSAkKGA8ZGl2IGlkPSJodG1sXzEyZjBjMGE0MjdkOTQzNTU5NzFhY2FjNDg1ZjVjNjRmIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5UaGUgR3JlYXQgU2VjcmV0LEdpbGJlcnQ8L2Rpdj5gKVswXTsKICAgICAgICAgICAgcG9wdXBfMWNmM2NkMzY0ODEzNDZmZWIxMjllMzM2MWJiZWY1NWQuc2V0Q29udGVudChodG1sXzEyZjBjMGE0MjdkOTQzNTU5NzFhY2FjNDg1ZjVjNjRmKTsKICAgICAgICAKCiAgICAgICAgbWFya2VyXzk3Yjg1YWIwMTEwODRmNjBhNWUzZGEwNGYzNTY1MWM2LmJpbmRQb3B1cChwb3B1cF8xY2YzY2QzNjQ4MTM0NmZlYjEyOWUzMzYxYmJlZjU1ZCkKICAgICAgICA7CgogICAgICAgIAogICAgCiAgICAKICAgICAgICAgICAgdmFyIG1hcmtlcl80MTlkZjIzZjNkMDI0NjA0OGI0MzIwMDExZmIwN2E2ZCA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzM1LjM5MzUwMTcsIC03Ni4xMjUzMzAyXSwKICAgICAgICAgICAgICAgIHt9CiAgICAgICAgICAgICkuYWRkVG8obWFwX2RkY2I1YjRmOGUzYjQ3Zjg4Yjk3NTA3ZmNhYTIzZDgxKTsKICAgICAgICAKICAgIAogICAgICAgIHZhciBwb3B1cF85ZjNiNzFkMzk2NjY0OGZmYTQ2MjMyM2FjY2NkODk2YSA9IEwucG9wdXAoeyJtYXhXaWR0aCI6ICIxMDAlIn0pOwoKICAgICAgICAKICAgICAgICAgICAgdmFyIGh0bWxfZjQ1NmQ2MzM0MDkwNDA2MWEzYzkyZDJmNjdhM2JkYmQgPSAkKGA8ZGl2IGlkPSJodG1sX2Y0NTZkNjMzNDA5MDQwNjFhM2M5MmQyZjY3YTNiZGJkIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5UaGUgTWlkZGxlIG9mIFRoaW5ncyxIeWRlPC9kaXY+YClbMF07CiAgICAgICAgICAgIHBvcHVwXzlmM2I3MWQzOTY2NjQ4ZmZhNDYyMzIzYWNjY2Q4OTZhLnNldENvbnRlbnQoaHRtbF9mNDU2ZDYzMzQwOTA0MDYxYTNjOTJkMmY2N2EzYmRiZCk7CiAgICAgICAgCgogICAgICAgIG1hcmtlcl80MTlkZjIzZjNkMDI0NjA0OGI0MzIwMDExZmIwN2E2ZC5iaW5kUG9wdXAocG9wdXBfOWYzYjcxZDM5NjY2NDhmZmE0NjIzMjNhY2NjZDg5NmEpCiAgICAgICAgOwoKICAgICAgICAKICAgIAogICAgCiAgICAgICAgICAgIHZhciBtYXJrZXJfNjljMzVkN2Y4YzdjNDEyZmJiMWVhOGFlNjU4YWYyYmMgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43MTI3MjgxLCAtNzQuMDA2MDE1Ml0sCiAgICAgICAgICAgICAgICB7fQogICAgICAgICAgICApLmFkZFRvKG1hcF9kZGNiNWI0ZjhlM2I0N2Y4OGI5NzUwN2ZjYWEyM2Q4MSk7CiAgICAgICAgCiAgICAKICAgICAgICB2YXIgcG9wdXBfMjcwNGZhNzE1MTkzNDYyZWFjY2EwNzMxZDI5NmFlZmYgPSBMLnBvcHVwKHsibWF4V2lkdGgiOiAiMTAwJSJ9KTsKCiAgICAgICAgCiAgICAgICAgICAgIHZhciBodG1sXzFlNjhhYTMxY2MyYTQ2MmM4ZTVkZTc5MTUyMjg1OGVhID0gJChgPGRpdiBpZD0iaHRtbF8xZTY4YWEzMWNjMmE0NjJjOGU1ZGU3OTE1MjI4NThlYSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+VGhlIEJveCB3aXRoIEJyb2tlbiBTZWFscyxOZXcgWW9yazwvZGl2PmApWzBdOwogICAgICAgICAgICBwb3B1cF8yNzA0ZmE3MTUxOTM0NjJlYWNjYTA3MzFkMjk2YWVmZi5zZXRDb250ZW50KGh0bWxfMWU2OGFhMzFjYzJhNDYyYzhlNWRlNzkxNTIyODU4ZWEpOwogICAgICAgIAoKICAgICAgICBtYXJrZXJfNjljMzVkN2Y4YzdjNDEyZmJiMWVhOGFlNjU4YWYyYmMuYmluZFBvcHVwKHBvcHVwXzI3MDRmYTcxNTE5MzQ2MmVhY2NhMDczMWQyOTZhZWZmKQogICAgICAgIDsKCiAgICAgICAgCiAgICAKICAgIAogICAgICAgICAgICB2YXIgbWFya2VyX2I2YzJiMDFmMzgwZTQyZGZhMTg1ZmEzNjkwNTc2YzQ3ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuMTMwMjkxNiwgNjIuNDAxOTUxM10sCiAgICAgICAgICAgICAgICB7fQogICAgICAgICAgICApLmFkZFRvKG1hcF9kZGNiNWI0ZjhlM2I0N2Y4OGI5NzUwN2ZjYWEyM2Q4MSk7CiAgICAgICAgCiAgICAKICAgICAgICB2YXIgcG9wdXBfNDBjMTM4ZGE5NmVhNGQxNWJmMDExNjE0NTA3NjE5NWUgPSBMLnBvcHVwKHsibWF4V2lkdGgiOiAiMTAwJSJ9KTsKCiAgICAgICAgCiAgICAgICAgICAgIHZhciBodG1sX2U3OWQ5NzM5ZDRjNDRlZjI5MzVkNmZiYzVkM2I1OWIwID0gJChgPGRpdiBpZD0iaHRtbF9lNzlkOTczOWQ0YzQ0ZWYyOTM1ZDZmYmM1ZDNiNTliMCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+VGhlIFllbGxvdyBTdHJlYWssTWFyeTwvZGl2PmApWzBdOwogICAgICAgICAgICBwb3B1cF80MGMxMzhkYTk2ZWE0ZDE1YmYwMTE2MTQ1MDc2MTk1ZS5zZXRDb250ZW50KGh0bWxfZTc5ZDk3MzlkNGM0NGVmMjkzNWQ2ZmJjNWQzYjU5YjApOwogICAgICAgIAoKICAgICAgICBtYXJrZXJfYjZjMmIwMWYzODBlNDJkZmExODVmYTM2OTA1NzZjNDcuYmluZFBvcHVwKHBvcHVwXzQwYzEzOGRhOTZlYTRkMTViZjAxMTYxNDUwNzYxOTVlKQogICAgICAgIDsKCiAgICAgICAgCiAgICAKICAgIAogICAgICAgICAgICB2YXIgbWFya2VyXzU4N2Y2ODViNDJlOTRiOWNiN2Y2YjVjZjg5NmUwMmQwID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMjIuMjE0MzkwOCwgMTE0LjIxNTkxMjldLAogICAgICAgICAgICAgICAge30KICAgICAgICAgICAgKS5hZGRUbyhtYXBfZGRjYjViNGY4ZTNiNDdmODhiOTc1MDdmY2FhMjNkODEpOwogICAgICAgIAogICAgCiAgICAgICAgdmFyIHBvcHVwXzVkOWEzYjBhYzQ4ODQzZGU4NzEwMzZmMTA4NWE0ZGFiID0gTC5wb3B1cCh7Im1heFdpZHRoIjogIjEwMCUifSk7CgogICAgICAgIAogICAgICAgICAgICB2YXIgaHRtbF83NjEwMzhhMjAwZTM0YWU1OWY3YjlkOGZjNDI3NjI1YSA9ICQoYDxkaXYgaWQ9Imh0bWxfNzYxMDM4YTIwMGUzNGFlNTlmN2I5ZDhmYzQyNzYyNWEiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPld5bGRlcidzIEhhbmQsU3RhbmxleTwvZGl2PmApWzBdOwogICAgICAgICAgICBwb3B1cF81ZDlhM2IwYWM0ODg0M2RlODcxMDM2ZjEwODVhNGRhYi5zZXRDb250ZW50KGh0bWxfNzYxMDM4YTIwMGUzNGFlNTlmN2I5ZDhmYzQyNzYyNWEpOwogICAgICAgIAoKICAgICAgICBtYXJrZXJfNTg3ZjY4NWI0MmU5NGI5Y2I3ZjZiNWNmODk2ZTAyZDAuYmluZFBvcHVwKHBvcHVwXzVkOWEzYjBhYzQ4ODQzZGU4NzEwMzZmMTA4NWE0ZGFiKQogICAgICAgIDsKCiAgICAgICAgCiAgICAKICAgIAogICAgICAgICAgICB2YXIgbWFya2VyXzYyYjZjMDBiOTllODQ5OWY4Mzg5ZmFmNDFhNzNkZGI4ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNTEuNTA3MzIxOSwgLTAuMTI3NjQ3NF0sCiAgICAgICAgICAgICAgICB7fQogICAgICAgICAgICApLmFkZFRvKG1hcF9kZGNiNWI0ZjhlM2I0N2Y4OGI5NzUwN2ZjYWEyM2Q4MSk7CiAgICAgICAgCiAgICAKICAgICAgICB2YXIgcG9wdXBfOWZjNmM5OGQzNDZmNDFjZjhmNWI5NzU4ZWRmNmVmMzYgPSBMLnBvcHVwKHsibWF4V2lkdGgiOiAiMTAwJSJ9KTsKCiAgICAgICAgCiAgICAgICAgICAgIHZhciBodG1sXzVmYWM2ZTg1ZTdjMzRiMzA4ZjQ4M2UwNTBmOGQ3NTNiID0gJChgPGRpdiBpZD0iaHRtbF81ZmFjNmU4NWU3YzM0YjMwOGY0ODNlMDUwZjhkNzUzYiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+VGhlIEh1bnQgQmFsbCBNeXN0ZXJ5LExvbmRvbjwvZGl2PmApWzBdOwogICAgICAgICAgICBwb3B1cF85ZmM2Yzk4ZDM0NmY0MWNmOGY1Yjk3NThlZGY2ZWYzNi5zZXRDb250ZW50KGh0bWxfNWZhYzZlODVlN2MzNGIzMDhmNDgzZTA1MGY4ZDc1M2IpOwogICAgICAgIAoKICAgICAgICBtYXJrZXJfNjJiNmMwMGI5OWU4NDk5ZjgzODlmYWY0MWE3M2RkYjguYmluZFBvcHVwKHBvcHVwXzlmYzZjOThkMzQ2ZjQxY2Y4ZjViOTc1OGVkZjZlZjM2KQogICAgICAgIDsKCiAgICAgICAgCiAgICAKICAgIAogICAgICAgICAgICB2YXIgbWFya2VyXzc0NmVkYjYyZjM5ODRiMGRhY2EyMDNlYTNjOGRmODhhID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMzguOTU1NjAzMSwgLTkwLjE4Njc3NjVdLAogICAgICAgICAgICAgICAge30KICAgICAgICAgICAgKS5hZGRUbyhtYXBfZGRjYjViNGY4ZTNiNDdmODhiOTc1MDdmY2FhMjNkODEpOwogICAgICAgIAogICAgCiAgICAgICAgdmFyIHBvcHVwX2U5Yjk0MjVhZjdkNzQ0Y2JhZmNhMTg0OGZhMDQ1NzkwID0gTC5wb3B1cCh7Im1heFdpZHRoIjogIjEwMCUifSk7CgogICAgICAgIAogICAgICAgICAgICB2YXIgaHRtbF9jMjJjMWM5OTgwNTU0ZTc2OWY3ZmU3MDVkNjA0MjFhYiA9ICQoYDxkaXYgaWQ9Imh0bWxfYzIyYzFjOTk4MDU1NGU3NjlmN2ZlNzA1ZDYwNDIxYWIiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlRoZSBNeXN0ZXJ5IG9mIHRoZSBCb3VsZSBDYWJpbmV0OiBBIERldGVjdGl2ZSBTdG9yeSxHb2RmcmV5PC9kaXY+YClbMF07CiAgICAgICAgICAgIHBvcHVwX2U5Yjk0MjVhZjdkNzQ0Y2JhZmNhMTg0OGZhMDQ1NzkwLnNldENvbnRlbnQoaHRtbF9jMjJjMWM5OTgwNTU0ZTc2OWY3ZmU3MDVkNjA0MjFhYik7CiAgICAgICAgCgogICAgICAgIG1hcmtlcl83NDZlZGI2MmYzOTg0YjBkYWNhMjAzZWEzYzhkZjg4YS5iaW5kUG9wdXAocG9wdXBfZTliOTQyNWFmN2Q3NDRjYmFmY2ExODQ4ZmEwNDU3OTApCiAgICAgICAgOwoKICAgICAgICAKICAgIAogICAgCiAgICAgICAgICAgIHZhciBtYXJrZXJfOGE0OGU3MzVkYTFlNDhlMWI5MGYxYjQyYTk4OWMxMmEgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs1My4wOTk2MTUzLCAtMi40NDE0NjI3XSwKICAgICAgICAgICAgICAgIHt9CiAgICAgICAgICAgICkuYWRkVG8obWFwX2RkY2I1YjRmOGUzYjQ3Zjg4Yjk3NTA3ZmNhYTIzZDgxKTsKICAgICAgICAKICAgIAogICAgICAgIHZhciBwb3B1cF9lNTA2MmU2N2YzMmY0NmVhYWY4ZTllN2EzNGJhZjE5YSA9IEwucG9wdXAoeyJtYXhXaWR0aCI6ICIxMDAlIn0pOwoKICAgICAgICAKICAgICAgICAgICAgdmFyIGh0bWxfMjUyNjZjNDVhOTVmNDkyZjg3NDY3ZjkzNjFjNzRkNTMgPSAkKGA8ZGl2IGlkPSJodG1sXzI1MjY2YzQ1YTk1ZjQ5MmY4NzQ2N2Y5MzYxYzc0ZDUzIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5UaGUgSGFtcHN0ZWFkIE15c3RlcnksQ3Jld2U8L2Rpdj5gKVswXTsKICAgICAgICAgICAgcG9wdXBfZTUwNjJlNjdmMzJmNDZlYWFmOGU5ZTdhMzRiYWYxOWEuc2V0Q29udGVudChodG1sXzI1MjY2YzQ1YTk1ZjQ5MmY4NzQ2N2Y5MzYxYzc0ZDUzKTsKICAgICAgICAKCiAgICAgICAgbWFya2VyXzhhNDhlNzM1ZGExZTQ4ZTFiOTBmMWI0MmE5ODljMTJhLmJpbmRQb3B1cChwb3B1cF9lNTA2MmU2N2YzMmY0NmVhYWY4ZTllN2EzNGJhZjE5YSkKICAgICAgICA7CgogICAgICAgIAogICAgCiAgICAKICAgICAgICAgICAgdmFyIG1hcmtlcl8zZGI1NzQxODBiN2Y0NmQ2YWQ2OTA0MzhjMzYzZDY2ZSA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzM5Ljk3ODgzODMsIC04Ni4xMTg3MzFdLAogICAgICAgICAgICAgICAge30KICAgICAgICAgICAgKS5hZGRUbyhtYXBfZGRjYjViNGY4ZTNiNDdmODhiOTc1MDdmY2FhMjNkODEpOwogICAgICAgIAogICAgCiAgICAgICAgdmFyIHBvcHVwXzNkN2JiZjI2YmU3NjQyYjZiNDM2YzAzYjM3YmY5NmIwID0gTC5wb3B1cCh7Im1heFdpZHRoIjogIjEwMCUifSk7CgogICAgICAgIAogICAgICAgICAgICB2YXIgaHRtbF9lYzgyYTBhYWQzY2Y0NDA1OTJmNDExZjI2MDM2Y2I4MyA9ICQoYDxkaXYgaWQ9Imh0bWxfZWM4MmEwYWFkM2NmNDQwNTkyZjQxMWYyNjAzNmNiODMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlRoZSBIb3VzZSBvZiB0aGUgV2hpc3BlcmluZyBQaW5lcyxDYXJtZWw8L2Rpdj5gKVswXTsKICAgICAgICAgICAgcG9wdXBfM2Q3YmJmMjZiZTc2NDJiNmI0MzZjMDNiMzdiZjk2YjAuc2V0Q29udGVudChodG1sX2VjODJhMGFhZDNjZjQ0MDU5MmY0MTFmMjYwMzZjYjgzKTsKICAgICAgICAKCiAgICAgICAgbWFya2VyXzNkYjU3NDE4MGI3ZjQ2ZDZhZDY5MDQzOGMzNjNkNjZlLmJpbmRQb3B1cChwb3B1cF8zZDdiYmYyNmJlNzY0MmI2YjQzNmMwM2IzN2JmOTZiMCkKICAgICAgICA7CgogICAgICAgIAogICAgCiAgICAKICAgICAgICAgICAgdmFyIG1hcmtlcl9iYTVkNDFhMThmMDY0NGU5YThlNzNmMjJlNDlhMTEzMiA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzUxLjUwNzMyMTksIC0wLjEyNzY0NzRdLAogICAgICAgICAgICAgICAge30KICAgICAgICAgICAgKS5hZGRUbyhtYXBfZGRjYjViNGY4ZTNiNDdmODhiOTc1MDdmY2FhMjNkODEpOwogICAgICAgIAogICAgCiAgICAgICAgdmFyIHBvcHVwXzM0ODRhMDM2ZTY3ZTRmZTA4NmRlYzBlMjE3NjMyY2QxID0gTC5wb3B1cCh7Im1heFdpZHRoIjogIjEwMCUifSk7CgogICAgICAgIAogICAgICAgICAgICB2YXIgaHRtbF83OGRkZWUzNGZjYTM0YWM4YmVlYjM0NGMwMGIxZmE4ZCA9ICQoYDxkaXYgaWQ9Imh0bWxfNzhkZGVlMzRmY2EzNGFjOGJlZWIzNDRjMDBiMWZhOGQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlRoZSBQb3N0bWFzdGVyJ3MgRGF1Z2h0ZXIsTG9uZG9uPC9kaXY+YClbMF07CiAgICAgICAgICAgIHBvcHVwXzM0ODRhMDM2ZTY3ZTRmZTA4NmRlYzBlMjE3NjMyY2QxLnNldENvbnRlbnQoaHRtbF83OGRkZWUzNGZjYTM0YWM4YmVlYjM0NGMwMGIxZmE4ZCk7CiAgICAgICAgCgogICAgICAgIG1hcmtlcl9iYTVkNDFhMThmMDY0NGU5YThlNzNmMjJlNDlhMTEzMi5iaW5kUG9wdXAocG9wdXBfMzQ4NGEwMzZlNjdlNGZlMDg2ZGVjMGUyMTc2MzJjZDEpCiAgICAgICAgOwoKICAgICAgICAKICAgIAogICAgCiAgICAgICAgICAgIHZhciBtYXJrZXJfYjBiYzZhYmUxYWM3NDZhNTkwODUxOGNlYWMyMDNiMzggPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC42NjM5OTE2LCAtNzQuMjEwNzAwNl0sCiAgICAgICAgICAgICAgICB7fQogICAgICAgICAgICApLmFkZFRvKG1hcF9kZGNiNWI0ZjhlM2I0N2Y4OGI5NzUwN2ZjYWEyM2Q4MSk7CiAgICAgICAgCiAgICAKICAgICAgICB2YXIgcG9wdXBfZjY1NDk2ZWNkNGJiNDE0ZWFjYTkxMzIwODZkMjgyYWEgPSBMLnBvcHVwKHsibWF4V2lkdGgiOiAiMTAwJSJ9KTsKCiAgICAgICAgCiAgICAgICAgICAgIHZhciBodG1sXzBiY2QwMDFiNjIwNzQ0ODE4YzRhNDE0YTI0ZjRmYzAwID0gJChgPGRpdiBpZD0iaHRtbF8wYmNkMDAxYjYyMDc0NDgxOGM0YTQxNGEyNGY0ZmMwMCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+VGhlIENpbmVtYSBNdXJkZXIsRWxpemFiZXRoPC9kaXY+YClbMF07CiAgICAgICAgICAgIHBvcHVwX2Y2NTQ5NmVjZDRiYjQxNGVhY2E5MTMyMDg2ZDI4MmFhLnNldENvbnRlbnQoaHRtbF8wYmNkMDAxYjYyMDc0NDgxOGM0YTQxNGEyNGY0ZmMwMCk7CiAgICAgICAgCgogICAgICAgIG1hcmtlcl9iMGJjNmFiZTFhYzc0NmE1OTA4NTE4Y2VhYzIwM2IzOC5iaW5kUG9wdXAocG9wdXBfZjY1NDk2ZWNkNGJiNDE0ZWFjYTkxMzIwODZkMjgyYWEpCiAgICAgICAgOwoKICAgICAgICAKICAgIAogICAgCiAgICAgICAgICAgIHZhciBtYXJrZXJfOTBkYjY2ZTUwNDRkNGRmMWE1YmM0Yjg1YmFiM2FmMmIgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFstMzIuNzA4MTc3LCAxNTEuNTI2ODQzNzMzOTg1XSwKICAgICAgICAgICAgICAgIHt9CiAgICAgICAgICAgICkuYWRkVG8obWFwX2RkY2I1YjRmOGUzYjQ3Zjg4Yjk3NTA3ZmNhYTIzZDgxKTsKICAgICAgICAKICAgIAogICAgICAgIHZhciBwb3B1cF8zZWFkNDdmMzljZTQ0NjIxYmYyOTg4ODdkZmY2ODQxYSA9IEwucG9wdXAoeyJtYXhXaWR0aCI6ICIxMDAlIn0pOwoKICAgICAgICAKICAgICAgICAgICAgdmFyIGh0bWxfMTE4ZDRlYzNiM2JjNGQxNWFhODRjYTIwYWMwYjExZWUgPSAkKGA8ZGl2IGlkPSJodG1sXzExOGQ0ZWMzYjNiYzRkMTVhYTg0Y2EyMGFjMGIxMWVlIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5UaGUgTWlkZGxlIFRlbXBsZSBNdXJkZXIsTWFpdGxhbmQ8L2Rpdj5gKVswXTsKICAgICAgICAgICAgcG9wdXBfM2VhZDQ3ZjM5Y2U0NDYyMWJmMjk4ODg3ZGZmNjg0MWEuc2V0Q29udGVudChodG1sXzExOGQ0ZWMzYjNiYzRkMTVhYTg0Y2EyMGFjMGIxMWVlKTsKICAgICAgICAKCiAgICAgICAgbWFya2VyXzkwZGI2NmU1MDQ0ZDRkZjFhNWJjNGI4NWJhYjNhZjJiLmJpbmRQb3B1cChwb3B1cF8zZWFkNDdmMzljZTQ0NjIxYmYyOTg4ODdkZmY2ODQxYSkKICAgICAgICA7CgogICAgICAgIAogICAgCiAgICAKICAgICAgICAgICAgdmFyIG1hcmtlcl81NTNmOGRlNWUwYTc0YzllODM4ZWVjYTUzZTRhZTlhOSA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzUzLjc0MzU3MjIsIC0wLjMzOTQ3NThdLAogICAgICAgICAgICAgICAge30KICAgICAgICAgICAgKS5hZGRUbyhtYXBfZGRjYjViNGY4ZTNiNDdmODhiOTc1MDdmY2FhMjNkODEpOwogICAgICAgIAogICAgCiAgICAgICAgdmFyIHBvcHVwXzFmMDVhZGVkNGY2YzQ0NzM5NDBkN2E3MWY0M2Y3ZjI4ID0gTC5wb3B1cCh7Im1heFdpZHRoIjogIjEwMCUifSk7CgogICAgICAgIAogICAgICAgICAgICB2YXIgaHRtbF82ZmIxNzQwZWMwYWQ0MmVkOGUyOTMxYjk0YWYxM2JkMSA9ICQoYDxkaXYgaWQ9Imh0bWxfNmZiMTc0MGVjMGFkNDJlZDhlMjkzMWI5NGFmMTNiZDEiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlRoZSBSYXluZXItU2xhZGUgQW1hbGdhbWF0aW9uLEh1bGw8L2Rpdj5gKVswXTsKICAgICAgICAgICAgcG9wdXBfMWYwNWFkZWQ0ZjZjNDQ3Mzk0MGQ3YTcxZjQzZjdmMjguc2V0Q29udGVudChodG1sXzZmYjE3NDBlYzBhZDQyZWQ4ZTI5MzFiOTRhZjEzYmQxKTsKICAgICAgICAKCiAgICAgICAgbWFya2VyXzU1M2Y4ZGU1ZTBhNzRjOWU4MzhlZWNhNTNlNGFlOWE5LmJpbmRQb3B1cChwb3B1cF8xZjA1YWRlZDRmNmM0NDczOTQwZDdhNzFmNDNmN2YyOCkKICAgICAgICA7CgogICAgICAgIAogICAgCiAgICAKICAgICAgICAgICAgdmFyIG1hcmtlcl9lMzNmNTY3MGRiZjU0NmFiYTMyNjRjNzI1ZDI2OGI1MCA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQ4Ljc1NDQwMTIsIC0xMjIuNDc4ODM2MV0sCiAgICAgICAgICAgICAgICB7fQogICAgICAgICAgICApLmFkZFRvKG1hcF9kZGNiNWI0ZjhlM2I0N2Y4OGI5NzUwN2ZjYWEyM2Q4MSk7CiAgICAgICAgCiAgICAKICAgICAgICB2YXIgcG9wdXBfM2VmOWYyY2I2MzRkNDEyMGEzNzYwZThiNjBhMGU0MWMgPSBMLnBvcHVwKHsibWF4V2lkdGgiOiAiMTAwJSJ9KTsKCiAgICAgICAgCiAgICAgICAgICAgIHZhciBodG1sXzI2ODAwNGQ3NGM5OTQ1ZGNiMWE2M2M1ZWU3YjA1OWFmID0gJChgPGRpdiBpZD0iaHRtbF8yNjgwMDRkNzRjOTk0NWRjYjFhNjNjNWVlN2IwNTlhZiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+VGhlIFZhbmlzaGluZyBNYW46IEEgRGV0ZWN0aXZlIFJvbWFuY2UsQmVsbGluZ2hhbTwvZGl2PmApWzBdOwogICAgICAgICAgICBwb3B1cF8zZWY5ZjJjYjYzNGQ0MTIwYTM3NjBlOGI2MGEwZTQxYy5zZXRDb250ZW50KGh0bWxfMjY4MDA0ZDc0Yzk5NDVkY2IxYTYzYzVlZTdiMDU5YWYpOwogICAgICAgIAoKICAgICAgICBtYXJrZXJfZTMzZjU2NzBkYmY1NDZhYmEzMjY0YzcyNWQyNjhiNTAuYmluZFBvcHVwKHBvcHVwXzNlZjlmMmNiNjM0ZDQxMjBhMzc2MGU4YjYwYTBlNDFjKQogICAgICAgIDsKCiAgICAgICAgCiAgICAKICAgIAogICAgICAgICAgICB2YXIgbWFya2VyXzU2MWJhMjIyYjBhZjRlMGJiN2E2NzFjYzAzYTdjZWYwID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuMTIzMjI0NSwgLTc4LjQ5Mjc3MjFdLAogICAgICAgICAgICAgICAge30KICAgICAgICAgICAgKS5hZGRUbyhtYXBfZGRjYjViNGY4ZTNiNDdmODhiOTc1MDdmY2FhMjNkODEpOwogICAgICAgIAogICAgCiAgICAgICAgdmFyIHBvcHVwX2MyMjQ0ZWZiYzI5ZjRiODRiMDAzMDAwMzJlN2I1YzEzID0gTC5wb3B1cCh7Im1heFdpZHRoIjogIjEwMCUifSk7CgogICAgICAgIAogICAgICAgICAgICB2YXIgaHRtbF83Njc5MzU3OGRhNjg0NDIxYjIyNDM5Y2I1MGU1MDkzMSA9ICQoYDxkaXYgaWQ9Imh0bWxfNzY3OTM1NzhkYTY4NDQyMWIyMjQzOWNiNTBlNTA5MzEiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlRoZSBHb3Zlcm5vcnMsVmlyZ2luaWE8L2Rpdj5gKVswXTsKICAgICAgICAgICAgcG9wdXBfYzIyNDRlZmJjMjlmNGI4NGIwMDMwMDAzMmU3YjVjMTMuc2V0Q29udGVudChodG1sXzc2NzkzNTc4ZGE2ODQ0MjFiMjI0MzljYjUwZTUwOTMxKTsKICAgICAgICAKCiAgICAgICAgbWFya2VyXzU2MWJhMjIyYjBhZjRlMGJiN2E2NzFjYzAzYTdjZWYwLmJpbmRQb3B1cChwb3B1cF9jMjI0NGVmYmMyOWY0Yjg0YjAwMzAwMDMyZTdiNWMxMykKICAgICAgICA7CgogICAgICAgIAogICAgCiAgICAKICAgICAgICAgICAgdmFyIG1hcmtlcl80ZTkwN2QyYmRmYjI0OWY2OGZjMGU4OWM1NGYwZWMwMSA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjYxMjczNDksIC04OS40NTkzMjNdLAogICAgICAgICAgICAgICAge30KICAgICAgICAgICAgKS5hZGRUbyhtYXBfZGRjYjViNGY4ZTNiNDdmODhiOTc1MDdmY2FhMjNkODEpOwogICAgICAgIAogICAgCiAgICAgICAgdmFyIHBvcHVwX2ZkMGY1ZmJiN2IzMjRjNmNiNTk4ODQ4YzdhNGQ5NjdhID0gTC5wb3B1cCh7Im1heFdpZHRoIjogIjEwMCUifSk7CgogICAgICAgIAogICAgICAgICAgICB2YXIgaHRtbF9mMWE2YmVmNmRjNDc0NGU0OWIwYmEwMDljMTNmMzAyMCA9ICQoYDxkaXYgaWQ9Imh0bWxfZjFhNmJlZjZkYzQ3NDRlNDliMGJhMDA5YzEzZjMwMjAiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlRoZSBPbGQgTWFuIGluIHRoZSBDb3JuZXIsTW9ydG9uPC9kaXY+YClbMF07CiAgICAgICAgICAgIHBvcHVwX2ZkMGY1ZmJiN2IzMjRjNmNiNTk4ODQ4YzdhNGQ5NjdhLnNldENvbnRlbnQoaHRtbF9mMWE2YmVmNmRjNDc0NGU0OWIwYmEwMDljMTNmMzAyMCk7CiAgICAgICAgCgogICAgICAgIG1hcmtlcl80ZTkwN2QyYmRmYjI0OWY2OGZjMGU4OWM1NGYwZWMwMS5iaW5kUG9wdXAocG9wdXBfZmQwZjVmYmI3YjMyNGM2Y2I1OTg4NDhjN2E0ZDk2N2EpCiAgICAgICAgOwoKICAgICAgICAKICAgIAogICAgCiAgICAgICAgICAgIHZhciBtYXJrZXJfYjg0NWY2MjAyMjM2NGIxOThlMDk3NmZmMWUxNzU2YTMgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs1MS43NTgxMjQyLCA2LjM5NTY2MDVdLAogICAgICAgICAgICAgICAge30KICAgICAgICAgICAgKS5hZGRUbyhtYXBfZGRjYjViNGY4ZTNiNDdmODhiOTc1MDdmY2FhMjNkODEpOwogICAgICAgIAogICAgCiAgICAgICAgdmFyIHBvcHVwX2U3YzJhOTU2ZWY0MTQ4ZWI4YzczODg3MmU3ZWRmZmFlID0gTC5wb3B1cCh7Im1heFdpZHRoIjogIjEwMCUifSk7CgogICAgICAgIAogICAgICAgICAgICB2YXIgaHRtbF80NTg5ZTdiZGZmMmY0ZjUyODdkZDhiZjJlNzQ3OTljYSA9ICQoYDxkaXYgaWQ9Imh0bWxfNDU4OWU3YmRmZjJmNGY1Mjg3ZGQ4YmYyZTc0Nzk5Y2EiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlRoZSBQcm9maXRlZXJzLFJlZXM8L2Rpdj5gKVswXTsKICAgICAgICAgICAgcG9wdXBfZTdjMmE5NTZlZjQxNDhlYjhjNzM4ODcyZTdlZGZmYWUuc2V0Q29udGVudChodG1sXzQ1ODllN2JkZmYyZjRmNTI4N2RkOGJmMmU3NDc5OWNhKTsKICAgICAgICAKCiAgICAgICAgbWFya2VyX2I4NDVmNjIwMjIzNjRiMTk4ZTA5NzZmZjFlMTc1NmEzLmJpbmRQb3B1cChwb3B1cF9lN2MyYTk1NmVmNDE0OGViOGM3Mzg4NzJlN2VkZmZhZSkKICAgICAgICA7CgogICAgICAgIAogICAgCiAgICAKICAgICAgICAgICAgdmFyIG1hcmtlcl83ZjBkOGQ1MzljYzY0YTQ2YWE4ODI5OGI4YWFlMTFiMSA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQyLjU1ODQyODQsIC03MC44ODAwNDkxXSwKICAgICAgICAgICAgICAgIHt9CiAgICAgICAgICAgICkuYWRkVG8obWFwX2RkY2I1YjRmOGUzYjQ3Zjg4Yjk3NTA3ZmNhYTIzZDgxKTsKICAgICAgICAKICAgIAogICAgICAgIHZhciBwb3B1cF8xY2ZiNzIwYWE0Yjc0ZTJmYjM3ZGJlZjk4Mzk0MDA1OCA9IEwucG9wdXAoeyJtYXhXaWR0aCI6ICIxMDAlIn0pOwoKICAgICAgICAKICAgICAgICAgICAgdmFyIGh0bWxfMmI2NGFmYjUwZjdkNGRmNjhiYWU3ZmI2MWYxNGRkYTggPSAkKGA8ZGl2IGlkPSJodG1sXzJiNjRhZmI1MGY3ZDRkZjY4YmFlN2ZiNjFmMTRkZGE4IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5BaXIgU2VydmljZSBCb3lzIG92ZXIgdGhlIEF0bGFudGljOyBPciwgVGhlIExvbmdlc3QgRmxpZ2h0IG9uIFJlY29yZCxCZXZlcmx5PC9kaXY+YClbMF07CiAgICAgICAgICAgIHBvcHVwXzFjZmI3MjBhYTRiNzRlMmZiMzdkYmVmOTgzOTQwMDU4LnNldENvbnRlbnQoaHRtbF8yYjY0YWZiNTBmN2Q0ZGY2OGJhZTdmYjYxZjE0ZGRhOCk7CiAgICAgICAgCgogICAgICAgIG1hcmtlcl83ZjBkOGQ1MzljYzY0YTQ2YWE4ODI5OGI4YWFlMTFiMS5iaW5kUG9wdXAocG9wdXBfMWNmYjcyMGFhNGI3NGUyZmIzN2RiZWY5ODM5NDAwNTgpCiAgICAgICAgOwoKICAgICAgICAKICAgIAogICAgCiAgICAgICAgICAgIHZhciBtYXJrZXJfY2EyZjNiZTA2ZjE2NGYxMjhlZmI4NjY1ZmM4YmUxYjcgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFszOC44NDYyMjM2LCAtNzcuMzA2MzczM10sCiAgICAgICAgICAgICAgICB7fQogICAgICAgICAgICApLmFkZFRvKG1hcF9kZGNiNWI0ZjhlM2I0N2Y4OGI5NzUwN2ZjYWEyM2Q4MSk7CiAgICAgICAgCiAgICAKICAgICAgICB2YXIgcG9wdXBfNjA5MTFjZDQ0ZGQ4NGFiOWI5ZDNmNTQ3MTFmYjhiNzIgPSBMLnBvcHVwKHsibWF4V2lkdGgiOiAiMTAwJSJ9KTsKCiAgICAgICAgCiAgICAgICAgICAgIHZhciBodG1sXzgxOTU2NzE0NzNhNDQyMzk5MjBlMGU3OTgxZTViMjE3ID0gJChgPGRpdiBpZD0iaHRtbF84MTk1NjcxNDczYTQ0MjM5OTIwZTBlNzk4MWU1YjIxNyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TXkgU3RyYW5nZXN0IENhc2UsRmFpcmZheDwvZGl2PmApWzBdOwogICAgICAgICAgICBwb3B1cF82MDkxMWNkNDRkZDg0YWI5YjlkM2Y1NDcxMWZiOGI3Mi5zZXRDb250ZW50KGh0bWxfODE5NTY3MTQ3M2E0NDIzOTkyMGUwZTc5ODFlNWIyMTcpOwogICAgICAgIAoKICAgICAgICBtYXJrZXJfY2EyZjNiZTA2ZjE2NGYxMjhlZmI4NjY1ZmM4YmUxYjcuYmluZFBvcHVwKHBvcHVwXzYwOTExY2Q0NGRkODRhYjliOWQzZjU0NzExZmI4YjcyKQogICAgICAgIDsKCiAgICAgICAgCiAgICAKICAgIAogICAgICAgICAgICB2YXIgbWFya2VyX2Q3ZjcxMzgwZTM3MTQxNWZiODZiNjMzZGE0MTEyNjEwID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMjYuMTI2NTI1OCwgLTgwLjI1Nzg2MTIzNzY1MV0sCiAgICAgICAgICAgICAgICB7fQogICAgICAgICAgICApLmFkZFRvKG1hcF9kZGNiNWI0ZjhlM2I0N2Y4OGI5NzUwN2ZjYWEyM2Q4MSk7CiAgICAgICAgCiAgICAKICAgICAgICB2YXIgcG9wdXBfNjU1MTg2MTM5MmU5NDYwMGEzMzUzNDhmYTg0NjJiNTAgPSBMLnBvcHVwKHsibWF4V2lkdGgiOiAiMTAwJSJ9KTsKCiAgICAgICAgCiAgICAgICAgICAgIHZhciBodG1sX2VkNGU3OTlmNDg4ZjQ1YjA5NDk2OTljNmQ4OWE5YjY2ID0gJChgPGRpdiBpZD0iaHRtbF9lZDRlNzk5ZjQ4OGY0NWIwOTQ5Njk5YzZkODlhOWI2NiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+VGhyZWUgSm9obiBTaWxlbmNlIFN0b3JpZXMsUGxhbnRhdGlvbjwvZGl2PmApWzBdOwogICAgICAgICAgICBwb3B1cF82NTUxODYxMzkyZTk0NjAwYTMzNTM0OGZhODQ2MmI1MC5zZXRDb250ZW50KGh0bWxfZWQ0ZTc5OWY0ODhmNDViMDk0OTY5OWM2ZDg5YTliNjYpOwogICAgICAgIAoKICAgICAgICBtYXJrZXJfZDdmNzEzODBlMzcxNDE1ZmI4NmI2MzNkYTQxMTI2MTAuYmluZFBvcHVwKHBvcHVwXzY1NTE4NjEzOTJlOTQ2MDBhMzM1MzQ4ZmE4NDYyYjUwKQogICAgICAgIDsKCiAgICAgICAgCiAgICAKICAgIAogICAgICAgICAgICB2YXIgbWFya2VyXzgyMDA1NWRlNzJiMjRmZGU4NGFkYTc1MmIwNzM0Y2FlID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNDQuNDMzMzEzMywgMTEuMzk0NTAyNTc2MzQwNF0sCiAgICAgICAgICAgICAgICB7fQogICAgICAgICAgICApLmFkZFRvKG1hcF9kZGNiNWI0ZjhlM2I0N2Y4OGI5NzUwN2ZjYWEyM2Q4MSk7CiAgICAgICAgCiAgICAKICAgICAgICB2YXIgcG9wdXBfNTJmNTM2MTRiNDkwNGRmZGI0ZDlmYjUzNzQwMGNjZTkgPSBMLnBvcHVwKHsibWF4V2lkdGgiOiAiMTAwJSJ9KTsKCiAgICAgICAgCiAgICAgICAgICAgIHZhciBodG1sX2M5MDEyNDM1ZWM1MjRlMDA4OGIwZTA0N2I4N2Q3YWY1ID0gJChgPGRpdiBpZD0iaHRtbF9jOTAxMjQzNWVjNTI0ZTAwODhiMGUwNDdiODdkN2FmNSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+VGhyZWUgTW9yZSBKb2huIFNpbGVuY2UgU3RvcmllcyxCbzwvZGl2PmApWzBdOwogICAgICAgICAgICBwb3B1cF81MmY1MzYxNGI0OTA0ZGZkYjRkOWZiNTM3NDAwY2NlOS5zZXRDb250ZW50KGh0bWxfYzkwMTI0MzVlYzUyNGUwMDg4YjBlMDQ3Yjg3ZDdhZjUpOwogICAgICAgIAoKICAgICAgICBtYXJrZXJfODIwMDU1ZGU3MmIyNGZkZTg0YWRhNzUyYjA3MzRjYWUuYmluZFBvcHVwKHBvcHVwXzUyZjUzNjE0YjQ5MDRkZmRiNGQ5ZmI1Mzc0MDBjY2U5KQogICAgICAgIDsKCiAgICAgICAgCiAgICAKICAgIAogICAgICAgICAgICB2YXIgbWFya2VyX2EyNGRlMTRhMmI0ZDQwZGQ5NzM3ZTg3N2U5NmFlNWRiID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMzguMDQ3MjkxNiwgLTg5LjgxMDc5NjJdLAogICAgICAgICAgICAgICAge30KICAgICAgICAgICAgKS5hZGRUbyhtYXBfZGRjYjViNGY4ZTNiNDdmODhiOTc1MDdmY2FhMjNkODEpOwogICAgICAgIAogICAgCiAgICAgICAgdmFyIHBvcHVwXzZlM2RiYjFhZDZkMTQ1NjU4NmFhZjYwMDFhMjU3YzZhID0gTC5wb3B1cCh7Im1heFdpZHRoIjogIjEwMCUifSk7CgogICAgICAgIAogICAgICAgICAgICB2YXIgaHRtbF8wMWQyNjFkN2Q3ODY0MGQwODE2NDQwN2ViODQ2NzkxNiA9ICQoYDxkaXYgaWQ9Imh0bWxfMDFkMjYxZDdkNzg2NDBkMDgxNjQ0MDdlYjg0Njc5MTYiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlByaW5jZSBaYWxlc2tpLFJhbmRvbHBoPC9kaXY+YClbMF07CiAgICAgICAgICAgIHBvcHVwXzZlM2RiYjFhZDZkMTQ1NjU4NmFhZjYwMDFhMjU3YzZhLnNldENvbnRlbnQoaHRtbF8wMWQyNjFkN2Q3ODY0MGQwODE2NDQwN2ViODQ2NzkxNik7CiAgICAgICAgCgogICAgICAgIG1hcmtlcl9hMjRkZTE0YTJiNGQ0MGRkOTczN2U4NzdlOTZhZTVkYi5iaW5kUG9wdXAocG9wdXBfNmUzZGJiMWFkNmQxNDU2NTg2YWFmNjAwMWEyNTdjNmEpCiAgICAgICAgOwoKICAgICAgICAKICAgIAogICAgCiAgICAgICAgICAgIHZhciBtYXJrZXJfNDJmZWUzYmZmN2RiNDM3OGJmZGY2YTg5MTA5ZThkNWEgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC44NDQyODI4LCAtOTAuNjE2ODQwOF0sCiAgICAgICAgICAgICAgICB7fQogICAgICAgICAgICApLmFkZFRvKG1hcF9kZGNiNWI0ZjhlM2I0N2Y4OGI5NzUwN2ZjYWEyM2Q4MSk7CiAgICAgICAgCiAgICAKICAgICAgICB2YXIgcG9wdXBfYWQ1YjFkMmVkYWZkNGJmMTk1MjM5ZDIxYmFhMjQ5ZDYgPSBMLnBvcHVwKHsibWF4V2lkdGgiOiAiMTAwJSJ9KTsKCiAgICAgICAgCiAgICAgICAgICAgIHZhciBodG1sXzdjYWU2NDFiZGEwOTRjNzZiMDc3OTZhODM0OGJjMjY2ID0gJChgPGRpdiBpZD0iaHRtbF83Y2FlNjQxYmRhMDk0Yzc2YjA3Nzk2YTgzNDhiYzI2NiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TWlkbmlnaHQsV2FycmVuPC9kaXY+YClbMF07CiAgICAgICAgICAgIHBvcHVwX2FkNWIxZDJlZGFmZDRiZjE5NTIzOWQyMWJhYTI0OWQ2LnNldENvbnRlbnQoaHRtbF83Y2FlNjQxYmRhMDk0Yzc2YjA3Nzk2YTgzNDhiYzI2Nik7CiAgICAgICAgCgogICAgICAgIG1hcmtlcl80MmZlZTNiZmY3ZGI0Mzc4YmZkZjZhODkxMDllOGQ1YS5iaW5kUG9wdXAocG9wdXBfYWQ1YjFkMmVkYWZkNGJmMTk1MjM5ZDIxYmFhMjQ5ZDYpCiAgICAgICAgOwoKICAgICAgICAKICAgIAogICAgCiAgICAgICAgICAgIHZhciBtYXJrZXJfYThlOGRhYjZkZDk4NDdkNjhjZWMyNDk4ZjhiYzU2ZDUgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs1MS41MDczMjE5LCAtMC4xMjc2NDc0XSwKICAgICAgICAgICAgICAgIHt9CiAgICAgICAgICAgICkuYWRkVG8obWFwX2RkY2I1YjRmOGUzYjQ3Zjg4Yjk3NTA3ZmNhYTIzZDgxKTsKICAgICAgICAKICAgIAogICAgICAgIHZhciBwb3B1cF8xMDI2NzgxMjk4YzQ0NGRhYTQ2NjQwZjAxYTkzMWM4MyA9IEwucG9wdXAoeyJtYXhXaWR0aCI6ICIxMDAlIn0pOwoKICAgICAgICAKICAgICAgICAgICAgdmFyIGh0bWxfYTQ4MmI3MzQ2YzY4NDFmYmEzZWZlYjcxOGI1YTE5Y2QgPSAkKGA8ZGl2IGlkPSJodG1sX2E0ODJiNzM0NmM2ODQxZmJhM2VmZWI3MThiNWExOWNkIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5NLiBvciBOLiAiU2ltaWxpYSBzaW1pbGlidXMgY3VyYW50dXIuIixMb25kb248L2Rpdj5gKVswXTsKICAgICAgICAgICAgcG9wdXBfMTAyNjc4MTI5OGM0NDRkYWE0NjY0MGYwMWE5MzFjODMuc2V0Q29udGVudChodG1sX2E0ODJiNzM0NmM2ODQxZmJhM2VmZWI3MThiNWExOWNkKTsKICAgICAgICAKCiAgICAgICAgbWFya2VyX2E4ZThkYWI2ZGQ5ODQ3ZDY4Y2VjMjQ5OGY4YmM1NmQ1LmJpbmRQb3B1cChwb3B1cF8xMDI2NzgxMjk4YzQ0NGRhYTQ2NjQwZjAxYTkzMWM4MykKICAgICAgICA7CgogICAgICAgIAogICAgCiAgICAKICAgICAgICAgICAgdmFyIG1hcmtlcl8yMzhlZmMzMzg4YzE0Y2I3Yjc1ZmYxZWVhNzZmZTU3YiA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzMxLjk0ODkwMTIsIDM0Ljg4ODQ4NTddLAogICAgICAgICAgICAgICAge30KICAgICAgICAgICAgKS5hZGRUbyhtYXBfZGRjYjViNGY4ZTNiNDdmODhiOTc1MDdmY2FhMjNkODEpOwogICAgICAgIAogICAgCiAgICAgICAgdmFyIHBvcHVwXzk2MDBkMDViZmI4YjQxZDc5OWY4ZWExZjRmODUxNzc0ID0gTC5wb3B1cCh7Im1heFdpZHRoIjogIjEwMCUifSk7CgogICAgICAgIAogICAgICAgICAgICB2YXIgaHRtbF82MDE3OGI5NmQyNmY0YjU4OTMzMThhNzM0NTBlY2ZhOCA9ICQoYDxkaXYgaWQ9Imh0bWxfNjAxNzhiOTZkMjZmNGI1ODkzMzE4YTczNDUwZWNmYTgiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlRoZSBDYXNlIG9mIEplbm5pZSBCcmljZSxMaWRhPC9kaXY+YClbMF07CiAgICAgICAgICAgIHBvcHVwXzk2MDBkMDViZmI4YjQxZDc5OWY4ZWExZjRmODUxNzc0LnNldENvbnRlbnQoaHRtbF82MDE3OGI5NmQyNmY0YjU4OTMzMThhNzM0NTBlY2ZhOCk7CiAgICAgICAgCgogICAgICAgIG1hcmtlcl8yMzhlZmMzMzg4YzE0Y2I3Yjc1ZmYxZWVhNzZmZTU3Yi5iaW5kUG9wdXAocG9wdXBfOTYwMGQwNWJmYjhiNDFkNzk5ZjhlYTFmNGY4NTE3NzQpCiAgICAgICAgOwoKICAgICAgICAKICAgIAogICAgCiAgICAgICAgICAgIHZhciBtYXJrZXJfYjc1YzdkZDAwOTg1NGMyMTg4ZTE1M2FmNjczNWQ1ZmYgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs0OS4zNTk3MDYyLCAxNy4zMDk0MjAyXSwKICAgICAgICAgICAgICAgIHt9CiAgICAgICAgICAgICkuYWRkVG8obWFwX2RkY2I1YjRmOGUzYjQ3Zjg4Yjk3NTA3ZmNhYTIzZDgxKTsKICAgICAgICAKICAgIAogICAgICAgIHZhciBwb3B1cF9kMWFmYTY4ODBiMDk0OTlhOGRlODdiYjA3NzAzZjU1MiA9IEwucG9wdXAoeyJtYXhXaWR0aCI6ICIxMDAlIn0pOwoKICAgICAgICAKICAgICAgICAgICAgdmFyIGh0bWxfZWUzY2I0ZjI0MmMxNDlmMWI1Zjk1YjNkNDFhYmExYTggPSAkKGA8ZGl2IGlkPSJodG1sX2VlM2NiNGYyNDJjMTQ5ZjFiNWY5NWIzZDQxYWJhMWE4IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5UaGUgUmVkIFRodW1iIE1hcmssTWFyY2g8L2Rpdj5gKVswXTsKICAgICAgICAgICAgcG9wdXBfZDFhZmE2ODgwYjA5NDk5YThkZTg3YmIwNzcwM2Y1NTIuc2V0Q29udGVudChodG1sX2VlM2NiNGYyNDJjMTQ5ZjFiNWY5NWIzZDQxYWJhMWE4KTsKICAgICAgICAKCiAgICAgICAgbWFya2VyX2I3NWM3ZGQwMDk4NTRjMjE4OGUxNTNhZjY3MzVkNWZmLmJpbmRQb3B1cChwb3B1cF9kMWFmYTY4ODBiMDk0OTlhOGRlODdiYjA3NzAzZjU1MikKICAgICAgICA7CgogICAgICAgIAogICAgCiAgICAKICAgICAgICAgICAgdmFyIG1hcmtlcl9lOTQ0YTM5NjJhOGU0YTljYjljMjdhNmJjYjJhYWJlMyA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzUxLjUwNzMyMTksIC0wLjEyNzY0NzRdLAogICAgICAgICAgICAgICAge30KICAgICAgICAgICAgKS5hZGRUbyhtYXBfZGRjYjViNGY4ZTNiNDdmODhiOTc1MDdmY2FhMjNkODEpOwogICAgICAgIAogICAgCiAgICAgICAgdmFyIHBvcHVwX2FjOTA5YjZiYTFkNjQ4ZWU5ZDg4ZWEyZDYwMjJkYTM2ID0gTC5wb3B1cCh7Im1heFdpZHRoIjogIjEwMCUifSk7CgogICAgICAgIAogICAgICAgICAgICB2YXIgaHRtbF9jOTZlZWZlMzU2ODM0ZmEzYWFkNTU5Yzc2MmZjZWZjZCA9ICQoYDxkaXYgaWQ9Imh0bWxfYzk2ZWVmZTM1NjgzNGZhM2FhZDU1OWM3NjJmY2VmY2QiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk1hcnRpbiBIZXdpdHQsIEludmVzdGlnYXRvcixMb25kb248L2Rpdj5gKVswXTsKICAgICAgICAgICAgcG9wdXBfYWM5MDliNmJhMWQ2NDhlZTlkODhlYTJkNjAyMmRhMzYuc2V0Q29udGVudChodG1sX2M5NmVlZmUzNTY4MzRmYTNhYWQ1NTljNzYyZmNlZmNkKTsKICAgICAgICAKCiAgICAgICAgbWFya2VyX2U5NDRhMzk2MmE4ZTRhOWNiOWMyN2E2YmNiMmFhYmUzLmJpbmRQb3B1cChwb3B1cF9hYzkwOWI2YmExZDY0OGVlOWQ4OGVhMmQ2MDIyZGEzNikKICAgICAgICA7CgogICAgICAgIAogICAgCiAgICAKICAgICAgICAgICAgdmFyIG1hcmtlcl80MmZkMDNmYzc5YTU0M2UwYmQ1Y2VhOTY4MTE4MTViMCA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzI3Ljc1MjI0ODcsIC05OC4wNjk3MjQ5XSwKICAgICAgICAgICAgICAgIHt9CiAgICAgICAgICAgICkuYWRkVG8obWFwX2RkY2I1YjRmOGUzYjQ3Zjg4Yjk3NTA3ZmNhYTIzZDgxKTsKICAgICAgICAKICAgIAogICAgICAgIHZhciBwb3B1cF85NjU3ZmM2YmYwNGY0ZWUyOGQ0OTBmYmU4NDEwOTUwNyA9IEwucG9wdXAoeyJtYXhXaWR0aCI6ICIxMDAlIn0pOwoKICAgICAgICAKICAgICAgICAgICAgdmFyIGh0bWxfNmRiN2MxNzI0NzY4NDUxMmIyZjM3OTcxYzJhOTYwOTggPSAkKGA8ZGl2IGlkPSJodG1sXzZkYjdjMTcyNDc2ODQ1MTJiMmYzNzk3MWMyYTk2MDk4IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5UaHJvdWdoIHRoZSBXYWxsLEFsaWNlPC9kaXY+YClbMF07CiAgICAgICAgICAgIHBvcHVwXzk2NTdmYzZiZjA0ZjRlZTI4ZDQ5MGZiZTg0MTA5NTA3LnNldENvbnRlbnQoaHRtbF82ZGI3YzE3MjQ3Njg0NTEyYjJmMzc5NzFjMmE5NjA5OCk7CiAgICAgICAgCgogICAgICAgIG1hcmtlcl80MmZkMDNmYzc5YTU0M2UwYmQ1Y2VhOTY4MTE4MTViMC5iaW5kUG9wdXAocG9wdXBfOTY1N2ZjNmJmMDRmNGVlMjhkNDkwZmJlODQxMDk1MDcpCiAgICAgICAgOwoKICAgICAgICAKICAgIAogICAgCiAgICAgICAgICAgIHZhciBtYXJrZXJfNmE3OTkxYjU5ZDJmNDUxMWJhZjgxOWJiYzA0MjFmYzcgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs0OC44NTY2MTAxLCAyLjM1MTQ5OTJdLAogICAgICAgICAgICAgICAge30KICAgICAgICAgICAgKS5hZGRUbyhtYXBfZGRjYjViNGY4ZTNiNDdmODhiOTc1MDdmY2FhMjNkODEpOwogICAgICAgIAogICAgCiAgICAgICAgdmFyIHBvcHVwXzVkNzc0ZTFiOTQ4NDQwYTM5YjUyYzY5MzAzZTQ3ZjkxID0gTC5wb3B1cCh7Im1heFdpZHRoIjogIjEwMCUifSk7CgogICAgICAgIAogICAgICAgICAgICB2YXIgaHRtbF9iODY5MDFjNDU3ZDQ0YzJhOTFkYzgzNjQzZDMxOWY2ZiA9ICQoYDxkaXYgaWQ9Imh0bWxfYjg2OTAxYzQ1N2Q0NGMyYTkxZGM4MzY0M2QzMTlmNmYiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlRoZSBSb21lIEV4cHJlc3MsUGFyaXM8L2Rpdj5gKVswXTsKICAgICAgICAgICAgcG9wdXBfNWQ3NzRlMWI5NDg0NDBhMzliNTJjNjkzMDNlNDdmOTEuc2V0Q29udGVudChodG1sX2I4NjkwMWM0NTdkNDRjMmE5MWRjODM2NDNkMzE5ZjZmKTsKICAgICAgICAKCiAgICAgICAgbWFya2VyXzZhNzk5MWI1OWQyZjQ1MTFiYWY4MTliYmMwNDIxZmM3LmJpbmRQb3B1cChwb3B1cF81ZDc3NGUxYjk0ODQ0MGEzOWI1MmM2OTMwM2U0N2Y5MSkKICAgICAgICA7CgogICAgICAgIAogICAgCiAgICAKICAgICAgICAgICAgdmFyIG1hcmtlcl9kYjAyNWY0NGY0OGU0YWQwYThkYTczNzljYjBlODYzYyA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzUwLjgyMjAzOTksIC0wLjEzNzQwNjFdLAogICAgICAgICAgICAgICAge30KICAgICAgICAgICAgKS5hZGRUbyhtYXBfZGRjYjViNGY4ZTNiNDdmODhiOTc1MDdmY2FhMjNkODEpOwogICAgICAgIAogICAgCiAgICAgICAgdmFyIHBvcHVwX2MxYWFlMTA5Yjc0OTQyNzA5ZGRhYjQ5ZDQwZGYwNTFmID0gTC5wb3B1cCh7Im1heFdpZHRoIjogIjEwMCUifSk7CgogICAgICAgIAogICAgICAgICAgICB2YXIgaHRtbF9lMTE1YjAwMmE4N2Q0NTUwOWRkYzljMmZmZDg4NThlNyA9ICQoYDxkaXYgaWQ9Imh0bWxfZTExNWIwMDJhODdkNDU1MDlkZGM5YzJmZmQ4ODU4ZTciIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlRoZSBCbG90dGluZyBCb29rLEJyaWdodG9uPC9kaXY+YClbMF07CiAgICAgICAgICAgIHBvcHVwX2MxYWFlMTA5Yjc0OTQyNzA5ZGRhYjQ5ZDQwZGYwNTFmLnNldENvbnRlbnQoaHRtbF9lMTE1YjAwMmE4N2Q0NTUwOWRkYzljMmZmZDg4NThlNyk7CiAgICAgICAgCgogICAgICAgIG1hcmtlcl9kYjAyNWY0NGY0OGU0YWQwYThkYTczNzljYjBlODYzYy5iaW5kUG9wdXAocG9wdXBfYzFhYWUxMDliNzQ5NDI3MDlkZGFiNDlkNDBkZjA1MWYpCiAgICAgICAgOwoKICAgICAgICAKICAgIAogICAgCiAgICAgICAgICAgIHZhciBtYXJrZXJfNWM2ZGEyOGVmNzU1NDUwODk0MWMwNDdhZGJjZmJkYTUgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs0OC44NTY2MTAxLCAyLjM1MTQ5OTJdLAogICAgICAgICAgICAgICAge30KICAgICAgICAgICAgKS5hZGRUbyhtYXBfZGRjYjViNGY4ZTNiNDdmODhiOTc1MDdmY2FhMjNkODEpOwogICAgICAgIAogICAgCiAgICAgICAgdmFyIHBvcHVwXzFlMjE0ZWFkZjU1ZjQ0MTNhZDNjYzdlMWRlY2RkYWE5ID0gTC5wb3B1cCh7Im1heFdpZHRoIjogIjEwMCUifSk7CgogICAgICAgIAogICAgICAgICAgICB2YXIgaHRtbF8yMjMzZWFmY2U0YjM0Mjg4YjU0MWQ2YTA4N2I1MmQxYSA9ICQoYDxkaXYgaWQ9Imh0bWxfMjIzM2VhZmNlNGIzNDI4OGI1NDFkNmEwODdiNTJkMWEiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkwnYXJnZW50IGRlcyBhdXRyZXM6IDEuIExlcyBob21tZXMgZGUgcGFpbGxlLFBhcmlzPC9kaXY+YClbMF07CiAgICAgICAgICAgIHBvcHVwXzFlMjE0ZWFkZjU1ZjQ0MTNhZDNjYzdlMWRlY2RkYWE5LnNldENvbnRlbnQoaHRtbF8yMjMzZWFmY2U0YjM0Mjg4YjU0MWQ2YTA4N2I1MmQxYSk7CiAgICAgICAgCgogICAgICAgIG1hcmtlcl81YzZkYTI4ZWY3NTU0NTA4OTQxYzA0N2FkYmNmYmRhNS5iaW5kUG9wdXAocG9wdXBfMWUyMTRlYWRmNTVmNDQxM2FkM2NjN2UxZGVjZGRhYTkpCiAgICAgICAgOwoKICAgICAgICAKICAgIAogICAgCiAgICAgICAgICAgIHZhciBtYXJrZXJfMDU5NmVmMTMzZGY0NDE1M2EyYjVlNWVlODBmZDFkYjIgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs0OC4zNjY4MDQxLCAxMC44OTg2OTcxXSwKICAgICAgICAgICAgICAgIHt9CiAgICAgICAgICAgICkuYWRkVG8obWFwX2RkY2I1YjRmOGUzYjQ3Zjg4Yjk3NTA3ZmNhYTIzZDgxKTsKICAgICAgICAKICAgIAogICAgICAgIHZhciBwb3B1cF8wMTRjNTRiYjU0ZTM0MGNmOTM0ODkxYzg1NzMzNzE3NiA9IEwucG9wdXAoeyJtYXhXaWR0aCI6ICIxMDAlIn0pOwoKICAgICAgICAKICAgICAgICAgICAgdmFyIGh0bWxfOGRjNjM2OGUxMGU2NDFiYTgzMGZhYzlhMDQ4ZTc3Y2IgPSAkKGA8ZGl2IGlkPSJodG1sXzhkYzYzNjhlMTBlNjQxYmE4MzBmYWM5YTA0OGU3N2NiIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Nci4gTWVlc29uJ3MgV2lsbCxBdWd1c3RhPC9kaXY+YClbMF07CiAgICAgICAgICAgIHBvcHVwXzAxNGM1NGJiNTRlMzQwY2Y5MzQ4OTFjODU3MzM3MTc2LnNldENvbnRlbnQoaHRtbF84ZGM2MzY4ZTEwZTY0MWJhODMwZmFjOWEwNDhlNzdjYik7CiAgICAgICAgCgogICAgICAgIG1hcmtlcl8wNTk2ZWYxMzNkZjQ0MTUzYTJiNWU1ZWU4MGZkMWRiMi5iaW5kUG9wdXAocG9wdXBfMDE0YzU0YmI1NGUzNDBjZjkzNDg5MWM4NTczMzcxNzYpCiAgICAgICAgOwoKICAgICAgICAKICAgIAogICAgCiAgICAgICAgICAgIHZhciBtYXJrZXJfMzczNzVhNTk3MTc5NDBlN2FiZDg2OGJhMzFmZDczZjkgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFszNC41Mzk5OTYyLCAtMTEyLjQ2ODc2MTZdLAogICAgICAgICAgICAgICAge30KICAgICAgICAgICAgKS5hZGRUbyhtYXBfZGRjYjViNGY4ZTNiNDdmODhiOTc1MDdmY2FhMjNkODEpOwogICAgICAgIAogICAgCiAgICAgICAgdmFyIHBvcHVwXzZhZmYzNDQ4MWZhODRiOTQ5N2JjOTVjNjdlM2EyMWY2ID0gTC5wb3B1cCh7Im1heFdpZHRoIjogIjEwMCUifSk7CgogICAgICAgIAogICAgICAgICAgICB2YXIgaHRtbF80ZGIwMTMwNDJmYzg0OWU4ODljYTYxOThiNmQzNjBhMiA9ICQoYDxkaXYgaWQ9Imh0bWxfNGRiMDEzMDQyZmM4NDllODg5Y2E2MTk4YjZkMzYwYTIiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk1hc3RlciBUYWxlcyBvZiBNeXN0ZXJ5LCBWb2x1bWUgMyxQcmVzY290dDwvZGl2PmApWzBdOwogICAgICAgICAgICBwb3B1cF82YWZmMzQ0ODFmYTg0Yjk0OTdiYzk1YzY3ZTNhMjFmNi5zZXRDb250ZW50KGh0bWxfNGRiMDEzMDQyZmM4NDllODg5Y2E2MTk4YjZkMzYwYTIpOwogICAgICAgIAoKICAgICAgICBtYXJrZXJfMzczNzVhNTk3MTc5NDBlN2FiZDg2OGJhMzFmZDczZjkuYmluZFBvcHVwKHBvcHVwXzZhZmYzNDQ4MWZhODRiOTQ5N2JjOTVjNjdlM2EyMWY2KQogICAgICAgIDsKCiAgICAgICAgCiAgICAKICAgIAogICAgICAgICAgICB2YXIgbWFya2VyXzVlMDQ4Zjg2NzI5MDRjN2I5MWE0NjZlNjAyYTI1NTUzID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNTkuOTM4NzMyLCAzMC4zMTYyMjldLAogICAgICAgICAgICAgICAge30KICAgICAgICAgICAgKS5hZGRUbyhtYXBfZGRjYjViNGY4ZTNiNDdmODhiOTc1MDdmY2FhMjNkODEpOwogICAgICAgIAogICAgCiAgICAgICAgdmFyIHBvcHVwXzg1NjdiZDA5MWRhNjQwMmI5YjA1N2JhYTg3MjJhOWIwID0gTC5wb3B1cCh7Im1heFdpZHRoIjogIjEwMCUifSk7CgogICAgICAgIAogICAgICAgICAgICB2YXIgaHRtbF9kOTRhNmZkNWEwM2M0MjljOTJhZDc3OTQ5OTQzMjQ0MyA9ICQoYDxkaXYgaWQ9Imh0bWxfZDk0YTZmZDVhMDNjNDI5YzkyYWQ3Nzk0OTk0MzI0NDMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlRoZSBDb250aW5lbnRhbCBDbGFzc2ljcywgVm9sdW1lIFhWSUlJLiwgTXlzdGVyeSBUYWxlczogSW5jbHVkaW5nIFN0b3JpZXMgYnkgRmVvZG9yIE1pa2hhaWxvdml0Y2ggRG9zdG95ZXZza3ksIErDtnJnZW4gV2lsaGVsbTsgQmVyZ3PDtmUgYW5kIEJlcm5oYXJkIFNldmVyaW4gSW5nZW1hbm4sUGV0ZXJzYnVyZzwvZGl2PmApWzBdOwogICAgICAgICAgICBwb3B1cF84NTY3YmQwOTFkYTY0MDJiOWIwNTdiYWE4NzIyYTliMC5zZXRDb250ZW50KGh0bWxfZDk0YTZmZDVhMDNjNDI5YzkyYWQ3Nzk0OTk0MzI0NDMpOwogICAgICAgIAoKICAgICAgICBtYXJrZXJfNWUwNDhmODY3MjkwNGM3YjkxYTQ2NmU2MDJhMjU1NTMuYmluZFBvcHVwKHBvcHVwXzg1NjdiZDA5MWRhNjQwMmI5YjA1N2JhYTg3MjJhOWIwKQogICAgICAgIDsKCiAgICAgICAgCiAgICAKICAgIAogICAgICAgICAgICB2YXIgbWFya2VyX2FmYjgyMjVlNTQyNzRlYjI4NjY5NjNkZjU3ZWNmY2EwID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuNTY5MjExOCwgLTk1Ljc0NTI2MzldLAogICAgICAgICAgICAgICAge30KICAgICAgICAgICAgKS5hZGRUbyhtYXBfZGRjYjViNGY4ZTNiNDdmODhiOTc1MDdmY2FhMjNkODEpOwogICAgICAgIAogICAgCiAgICAgICAgdmFyIHBvcHVwX2ZlM2RhYzFhMDRhZjQ2NGM5ODhlMzljOGMzMzc0MzViID0gTC5wb3B1cCh7Im1heFdpZHRoIjogIjEwMCUifSk7CgogICAgICAgIAogICAgICAgICAgICB2YXIgaHRtbF9mNzRkMzMxZWQ1ZGU0MTlmYTA4YzI5OGQ1YjgzMWY4MSA9ICQoYDxkaXYgaWQ9Imh0bWxfZjc0ZDMzMWVkNWRlNDE5ZmEwOGMyOThkNWI4MzFmODEiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlRoZSBNeXN0ZXJ5IG9mIDMxIE5ldyBJbm4sV2lsc29uPC9kaXY+YClbMF07CiAgICAgICAgICAgIHBvcHVwX2ZlM2RhYzFhMDRhZjQ2NGM5ODhlMzljOGMzMzc0MzViLnNldENvbnRlbnQoaHRtbF9mNzRkMzMxZWQ1ZGU0MTlmYTA4YzI5OGQ1YjgzMWY4MSk7CiAgICAgICAgCgogICAgICAgIG1hcmtlcl9hZmI4MjI1ZTU0Mjc0ZWIyODY2OTYzZGY1N2VjZmNhMC5iaW5kUG9wdXAocG9wdXBfZmUzZGFjMWEwNGFmNDY0Yzk4OGUzOWM4YzMzNzQzNWIpCiAgICAgICAgOwoKICAgICAgICAKICAgIAogICAgCiAgICAgICAgICAgIHZhciBtYXJrZXJfOGQwMmYwMGZlNGExNDZlNGJlZmRhNGYxMDVmZjEyOGIgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFstMzMuOTY0NDQ0LCAyMi40NTk3MjJdLAogICAgICAgICAgICAgICAge30KICAgICAgICAgICAgKS5hZGRUbyhtYXBfZGRjYjViNGY4ZTNiNDdmODhiOTc1MDdmY2FhMjNkODEpOwogICAgICAgIAogICAgCiAgICAgICAgdmFyIHBvcHVwXzE1MGUyNWUyYWM1ZDRiN2FhZDZhMmQ2ZTQ0YzcyZjQxID0gTC5wb3B1cCh7Im1heFdpZHRoIjogIjEwMCUifSk7CgogICAgICAgIAogICAgICAgICAgICB2YXIgaHRtbF9kMTZlMTQyNTgwYjE0YTc4OTAwZGM2NDg0ZWRiZjFiYiA9ICQoYDxkaXYgaWQ9Imh0bWxfZDE2ZTE0MjU4MGIxNGE3ODkwMGRjNjQ4NGVkYmYxYmIiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlRoZSBNeXN0ZXJ5IG9mIE1ldHJvcG9saXN2aWxsZSxHZW9yZ2U8L2Rpdj5gKVswXTsKICAgICAgICAgICAgcG9wdXBfMTUwZTI1ZTJhYzVkNGI3YWFkNmEyZDZlNDRjNzJmNDEuc2V0Q29udGVudChodG1sX2QxNmUxNDI1ODBiMTRhNzg5MDBkYzY0ODRlZGJmMWJiKTsKICAgICAgICAKCiAgICAgICAgbWFya2VyXzhkMDJmMDBmZTRhMTQ2ZTRiZWZkYTRmMTA1ZmYxMjhiLmJpbmRQb3B1cChwb3B1cF8xNTBlMjVlMmFjNWQ0YjdhYWQ2YTJkNmU0NGM3MmY0MSkKICAgICAgICA7CgogICAgICAgIAogICAgCiAgICAKICAgICAgICAgICAgdmFyIG1hcmtlcl9iZjkxOWQ3MGZjYmY0ZWZlOGM3ODdmZDZiMzkzMjY2YSA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzUzLjI0OTI4MjgsIC0zLjEzNDUyNjJdLAogICAgICAgICAgICAgICAge30KICAgICAgICAgICAgKS5hZGRUbyhtYXBfZGRjYjViNGY4ZTNiNDdmODhiOTc1MDdmY2FhMjNkODEpOwogICAgICAgIAogICAgCiAgICAgICAgdmFyIHBvcHVwXzJiNDI4MThkNWIwYTQ3YTc5Mjk5ZDMxZWI5MjcyMGJkID0gTC5wb3B1cCh7Im1heFdpZHRoIjogIjEwMCUifSk7CgogICAgICAgIAogICAgICAgICAgICB2YXIgaHRtbF9kYjZjYmIxNWMzMzY0NGU4YjAxMTEwZGYzMDA3YzZjMSA9ICQoYDxkaXYgaWQ9Imh0bWxfZGI2Y2JiMTVjMzM2NDRlOGIwMTExMGRmMzAwN2M2YzEiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlRoZSBFeHBlcmllbmNlcyBvZiBhIEJhcnJpc3RlciwgYW5kIENvbmZlc3Npb25zIG9mIGFuIEF0dG9ybmV5LEZsaW50PC9kaXY+YClbMF07CiAgICAgICAgICAgIHBvcHVwXzJiNDI4MThkNWIwYTQ3YTc5Mjk5ZDMxZWI5MjcyMGJkLnNldENvbnRlbnQoaHRtbF9kYjZjYmIxNWMzMzY0NGU4YjAxMTEwZGYzMDA3YzZjMSk7CiAgICAgICAgCgogICAgICAgIG1hcmtlcl9iZjkxOWQ3MGZjYmY0ZWZlOGM3ODdmZDZiMzkzMjY2YS5iaW5kUG9wdXAocG9wdXBfMmI0MjgxOGQ1YjBhNDdhNzkyOTlkMzFlYjkyNzIwYmQpCiAgICAgICAgOwoKICAgICAgICAKICAgIAogICAgCiAgICAgICAgICAgIHZhciBtYXJrZXJfNjQ4ODYzOTQwYmNlNGZiNmI1MmFmZmRmZjRiOTkwYWMgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs0NS42NzIwNzUsIC0xMTguNzg4NTk2N10sCiAgICAgICAgICAgICAgICB7fQogICAgICAgICAgICApLmFkZFRvKG1hcF9kZGNiNWI0ZjhlM2I0N2Y4OGI5NzUwN2ZjYWEyM2Q4MSk7CiAgICAgICAgCiAgICAKICAgICAgICB2YXIgcG9wdXBfYTc1YTQ1ZDVhYTZiNGY1M2EwNGY4NGVhMDFkZWYxNjEgPSBMLnBvcHVwKHsibWF4V2lkdGgiOiAiMTAwJSJ9KTsKCiAgICAgICAgCiAgICAgICAgICAgIHZhciBodG1sXzViOWZjOTg3NGQ3MTRmYzViNzI1MzhkM2I5ZjE3MmNiID0gJChgPGRpdiBpZD0iaHRtbF81YjlmYzk4NzRkNzE0ZmM1YjcyNTM4ZDNiOWYxNzJjYiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+VGhlIE1vb24gUm9jayxQZW5kbGV0b248L2Rpdj5gKVswXTsKICAgICAgICAgICAgcG9wdXBfYTc1YTQ1ZDVhYTZiNGY1M2EwNGY4NGVhMDFkZWYxNjEuc2V0Q29udGVudChodG1sXzViOWZjOTg3NGQ3MTRmYzViNzI1MzhkM2I5ZjE3MmNiKTsKICAgICAgICAKCiAgICAgICAgbWFya2VyXzY0ODg2Mzk0MGJjZTRmYjZiNTJhZmZkZmY0Yjk5MGFjLmJpbmRQb3B1cChwb3B1cF9hNzVhNDVkNWFhNmI0ZjUzYTA0Zjg0ZWEwMWRlZjE2MSkKICAgICAgICA7CgogICAgICAgIAogICAgCiAgICAKICAgICAgICAgICAgdmFyIG1hcmtlcl9jOWQ1OTUyNjY5YmU0ZDdmYjBmZmZjOGNmYmUyNjk5OCA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzUxLjUwNzMyMTksIC0wLjEyNzY0NzRdLAogICAgICAgICAgICAgICAge30KICAgICAgICAgICAgKS5hZGRUbyhtYXBfZGRjYjViNGY4ZTNiNDdmODhiOTc1MDdmY2FhMjNkODEpOwogICAgICAgIAogICAgCiAgICAgICAgdmFyIHBvcHVwXzE3M2FmYTU5M2MwMTRjNjM5ZWNiYjFkOTM3M2I3NjcwID0gTC5wb3B1cCh7Im1heFdpZHRoIjogIjEwMCUifSk7CgogICAgICAgIAogICAgICAgICAgICB2YXIgaHRtbF8zOWRjYjc5ODQ4NTk0NGE3ODI2OTFjNjA2YzYxODNmNSA9ICQoYDxkaXYgaWQ9Imh0bWxfMzlkY2I3OTg0ODU5NDRhNzgyNjkxYzYwNmM2MTgzZjUiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlRoZSBTaGFkb3cgb2YgdGhlIFJvcGUsTG9uZG9uPC9kaXY+YClbMF07CiAgICAgICAgICAgIHBvcHVwXzE3M2FmYTU5M2MwMTRjNjM5ZWNiYjFkOTM3M2I3NjcwLnNldENvbnRlbnQoaHRtbF8zOWRjYjc5ODQ4NTk0NGE3ODI2OTFjNjA2YzYxODNmNSk7CiAgICAgICAgCgogICAgICAgIG1hcmtlcl9jOWQ1OTUyNjY5YmU0ZDdmYjBmZmZjOGNmYmUyNjk5OC5iaW5kUG9wdXAocG9wdXBfMTczYWZhNTkzYzAxNGM2MzllY2JiMWQ5MzczYjc2NzApCiAgICAgICAgOwoKICAgICAgICAKICAgIAogICAgCiAgICAgICAgICAgIHZhciBtYXJrZXJfMDNhMzE4YzY4MjViNGE5Mjg1ZGJjNGQ4YmI3OTgyMGEgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs0My44NTQzMzYsIC03OS4zMjY3ODJdLAogICAgICAgICAgICAgICAge30KICAgICAgICAgICAgKS5hZGRUbyhtYXBfZGRjYjViNGY4ZTNiNDdmODhiOTc1MDdmY2FhMjNkODEpOwogICAgICAgIAogICAgCiAgICAgICAgdmFyIHBvcHVwX2JkZTRiNzEwOTE3MjQ1OGU5YzI0NmYyZWI2ZDY4OWU3ID0gTC5wb3B1cCh7Im1heFdpZHRoIjogIjEwMCUifSk7CgogICAgICAgIAogICAgICAgICAgICB2YXIgaHRtbF80MDA2ZDhmNGUyZTc0ZmU5OGQyMDk1OGZkNGM2NmUzNiA9ICQoYDxkaXYgaWQ9Imh0bWxfNDAwNmQ4ZjRlMmU3NGZlOThkMjA5NThmZDRjNjZlMzYiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlRoZSBIb3VzZSBvZiBNeXN0ZXJ5OiBBbiBFcGlzb2RlIGluIHRoZSBDYXJlZXIgb2YgUm9zYWxpZSBMZSBHcmFuZ2UsIENsYWlydm95YW50LE1hcmtoYW08L2Rpdj5gKVswXTsKICAgICAgICAgICAgcG9wdXBfYmRlNGI3MTA5MTcyNDU4ZTljMjQ2ZjJlYjZkNjg5ZTcuc2V0Q29udGVudChodG1sXzQwMDZkOGY0ZTJlNzRmZTk4ZDIwOTU4ZmQ0YzY2ZTM2KTsKICAgICAgICAKCiAgICAgICAgbWFya2VyXzAzYTMxOGM2ODI1YjRhOTI4NWRiYzRkOGJiNzk4MjBhLmJpbmRQb3B1cChwb3B1cF9iZGU0YjcxMDkxNzI0NThlOWMyNDZmMmViNmQ2ODllNykKICAgICAgICA7CgogICAgICAgIAogICAgCiAgICAKICAgICAgICAgICAgdmFyIG1hcmtlcl9iNWRkZmRmNjNiMzI0M2IwYWRiODkzM2RkMmE1OTU5MyA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQ4Ljg1NjYxMDEsIDIuMzUxNDk5Ml0sCiAgICAgICAgICAgICAgICB7fQogICAgICAgICAgICApLmFkZFRvKG1hcF9kZGNiNWI0ZjhlM2I0N2Y4OGI5NzUwN2ZjYWEyM2Q4MSk7CiAgICAgICAgCiAgICAKICAgICAgICB2YXIgcG9wdXBfNjA5NWZkYjY0MGQ2NGJlNzk1ZDU1ZTMwMTU0NWU2NzMgPSBMLnBvcHVwKHsibWF4V2lkdGgiOiAiMTAwJSJ9KTsKCiAgICAgICAgCiAgICAgICAgICAgIHZhciBodG1sXzA0NzQ1ZWMwY2ViMTQwYjZiNjBjY2UxM2JiZDkyNWJhID0gJChgPGRpdiBpZD0iaHRtbF8wNDc0NWVjMGNlYjE0MGI2YjYwY2NlMTNiYmQ5MjViYSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TGlicmFyeSBvZiB0aGUgV29ybGQncyBCZXN0IE15c3RlcnkgYW5kIERldGVjdGl2ZSBTdG9yaWVzLFBhcmlzPC9kaXY+YClbMF07CiAgICAgICAgICAgIHBvcHVwXzYwOTVmZGI2NDBkNjRiZTc5NWQ1NWUzMDE1NDVlNjczLnNldENvbnRlbnQoaHRtbF8wNDc0NWVjMGNlYjE0MGI2YjYwY2NlMTNiYmQ5MjViYSk7CiAgICAgICAgCgogICAgICAgIG1hcmtlcl9iNWRkZmRmNjNiMzI0M2IwYWRiODkzM2RkMmE1OTU5My5iaW5kUG9wdXAocG9wdXBfNjA5NWZkYjY0MGQ2NGJlNzk1ZDU1ZTMwMTU0NWU2NzMpCiAgICAgICAgOwoKICAgICAgICAKICAgIAogICAgCiAgICAgICAgICAgIHZhciBtYXJrZXJfM2QwMjcwZmU3ZDI2NDQ3NTk0N2U1NzAxNmE0YmU1MDggPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs1MS41MDczMjE5LCAtMC4xMjc2NDc0XSwKICAgICAgICAgICAgICAgIHt9CiAgICAgICAgICAgICkuYWRkVG8obWFwX2RkY2I1YjRmOGUzYjQ3Zjg4Yjk3NTA3ZmNhYTIzZDgxKTsKICAgICAgICAKICAgIAogICAgICAgIHZhciBwb3B1cF83MGZhNDY2YTIyMTE0NWI0ODU0MWRiYWNmZTcwYTEzMCA9IEwucG9wdXAoeyJtYXhXaWR0aCI6ICIxMDAlIn0pOwoKICAgICAgICAKICAgICAgICAgICAgdmFyIGh0bWxfZTU0ZGYzZDI2ZjA3NDNiYmJhMTZkOGFlZGI4NmZlYjEgPSAkKGA8ZGl2IGlkPSJodG1sX2U1NGRmM2QyNmYwNzQzYmJiYTE2ZDhhZWRiODZmZWIxIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Gb3VyIE1heCBDYXJyYWRvcyBEZXRlY3RpdmUgU3RvcmllcyxMb25kb248L2Rpdj5gKVswXTsKICAgICAgICAgICAgcG9wdXBfNzBmYTQ2NmEyMjExNDViNDg1NDFkYmFjZmU3MGExMzAuc2V0Q29udGVudChodG1sX2U1NGRmM2QyNmYwNzQzYmJiYTE2ZDhhZWRiODZmZWIxKTsKICAgICAgICAKCiAgICAgICAgbWFya2VyXzNkMDI3MGZlN2QyNjQ0NzU5NDdlNTcwMTZhNGJlNTA4LmJpbmRQb3B1cChwb3B1cF83MGZhNDY2YTIyMTE0NWI0ODU0MWRiYWNmZTcwYTEzMCkKICAgICAgICA7CgogICAgICAgIAogICAgCiAgICAKICAgICAgICAgICAgdmFyIG1hcmtlcl9jOTJjOWExZjFhMjY0NDdiYmQ3YTVhMDMzOGIwZDRkOSA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzM4Ljg5NTAwOTIsIC03Ny4wMzY1NjI1XSwKICAgICAgICAgICAgICAgIHt9CiAgICAgICAgICAgICkuYWRkVG8obWFwX2RkY2I1YjRmOGUzYjQ3Zjg4Yjk3NTA3ZmNhYTIzZDgxKTsKICAgICAgICAKICAgIAogICAgICAgIHZhciBwb3B1cF9hMzc1ZGQ0YzJlMTc0OGM5OGY1YWQxODEzNjczMzcwNCA9IEwucG9wdXAoeyJtYXhXaWR0aCI6ICIxMDAlIn0pOwoKICAgICAgICAKICAgICAgICAgICAgdmFyIGh0bWxfYTI1NDA3ZWEwY2MzNDgxODk0OWQ1ZjE2OGM3ODIxOWMgPSAkKGA8ZGl2IGlkPSJodG1sX2EyNTQwN2VhMGNjMzQ4MTg5NDlkNWYxNjhjNzgyMTljIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5iZWxsZXNfbGV0dHJlcyxXYXNoaW5ndG9uPC9kaXY+YClbMF07CiAgICAgICAgICAgIHBvcHVwX2EzNzVkZDRjMmUxNzQ4Yzk4ZjVhZDE4MTM2NzMzNzA0LnNldENvbnRlbnQoaHRtbF9hMjU0MDdlYTBjYzM0ODE4OTQ5ZDVmMTY4Yzc4MjE5Yyk7CiAgICAgICAgCgogICAgICAgIG1hcmtlcl9jOTJjOWExZjFhMjY0NDdiYmQ3YTVhMDMzOGIwZDRkOS5iaW5kUG9wdXAocG9wdXBfYTM3NWRkNGMyZTE3NDhjOThmNWFkMTgxMzY3MzM3MDQpCiAgICAgICAgOwoKICAgICAgICAKICAgIAogICAgCiAgICAgICAgICAgIHZhciBtYXJrZXJfY2JhZWI3NzI0MDBiNDQ0NWI5Mjg1NDA5ZmE2NDk5NGUgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFszOC44OTUwMDkyLCAtNzcuMDM2NTYyNV0sCiAgICAgICAgICAgICAgICB7fQogICAgICAgICAgICApLmFkZFRvKG1hcF9kZGNiNWI0ZjhlM2I0N2Y4OGI5NzUwN2ZjYWEyM2Q4MSk7CiAgICAgICAgCiAgICAKICAgICAgICB2YXIgcG9wdXBfOGZlNzJmNjMyZDkwNDExM2I0OTc5NjMzMTU2Mzc0ODYgPSBMLnBvcHVwKHsibWF4V2lkdGgiOiAiMTAwJSJ9KTsKCiAgICAgICAgCiAgICAgICAgICAgIHZhciBodG1sX2FkNzUwNGNmNzYwZDQ3MzdiZjFlMWM2YzE3ODNmODc3ID0gJChgPGRpdiBpZD0iaHRtbF9hZDc1MDRjZjc2MGQ0NzM3YmYxZTFjNmMxNzgzZjg3NyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ZWRpdG9yaWFsLFdhc2hpbmd0b248L2Rpdj5gKVswXTsKICAgICAgICAgICAgcG9wdXBfOGZlNzJmNjMyZDkwNDExM2I0OTc5NjMzMTU2Mzc0ODYuc2V0Q29udGVudChodG1sX2FkNzUwNGNmNzYwZDQ3MzdiZjFlMWM2YzE3ODNmODc3KTsKICAgICAgICAKCiAgICAgICAgbWFya2VyX2NiYWViNzcyNDAwYjQ0NDViOTI4NTQwOWZhNjQ5OTRlLmJpbmRQb3B1cChwb3B1cF84ZmU3MmY2MzJkOTA0MTEzYjQ5Nzk2MzMxNTYzNzQ4NikKICAgICAgICA7CgogICAgICAgIAogICAgCiAgICAKICAgICAgICAgICAgdmFyIG1hcmtlcl9lMzA5NGU4NGE4YTU0YmM2YTNlZGZjNjY4ODcyZWU5OSA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzM3LjEzMDI5MTYsIDYyLjQwMTk1MTNdLAogICAgICAgICAgICAgICAge30KICAgICAgICAgICAgKS5hZGRUbyhtYXBfZGRjYjViNGY4ZTNiNDdmODhiOTc1MDdmY2FhMjNkODEpOwogICAgICAgIAogICAgCiAgICAgICAgdmFyIHBvcHVwXzYxNTc3ZmVhZGE3NTQxZDE5YTRlYzdiMzczMGZkOTM2ID0gTC5wb3B1cCh7Im1heFdpZHRoIjogIjEwMCUifSk7CgogICAgICAgIAogICAgICAgICAgICB2YXIgaHRtbF9jMGIzZWZlMDUzYmU0NGRmOWZmYjE4ODFmNjJmZDE0NiA9ICQoYDxkaXYgaWQ9Imh0bWxfYzBiM2VmZTA1M2JlNDRkZjlmZmIxODgxZjYyZmQxNDYiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPmZpY3Rpb24sTWFyeTwvZGl2PmApWzBdOwogICAgICAgICAgICBwb3B1cF82MTU3N2ZlYWRhNzU0MWQxOWE0ZWM3YjM3MzBmZDkzNi5zZXRDb250ZW50KGh0bWxfYzBiM2VmZTA1M2JlNDRkZjlmZmIxODgxZjYyZmQxNDYpOwogICAgICAgIAoKICAgICAgICBtYXJrZXJfZTMwOTRlODRhOGE1NGJjNmEzZWRmYzY2ODg3MmVlOTkuYmluZFBvcHVwKHBvcHVwXzYxNTc3ZmVhZGE3NTQxZDE5YTRlYzdiMzczMGZkOTM2KQogICAgICAgIDsKCiAgICAgICAgCiAgICAKICAgIAogICAgICAgICAgICB2YXIgbWFya2VyXzZhZTBhYmQ5MzI3NTRmMDViYzM5NmU5NWQ1OTFkMjg5ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMzguODk1MDA5MiwgLTc3LjAzNjU2MjVdLAogICAgICAgICAgICAgICAge30KICAgICAgICAgICAgKS5hZGRUbyhtYXBfZGRjYjViNGY4ZTNiNDdmODhiOTc1MDdmY2FhMjNkODEpOwogICAgICAgIAogICAgCiAgICAgICAgdmFyIHBvcHVwX2UzZjYzNGMyNTQxOTQyOTc4MWE5YzUyYmY3OTc3ODllID0gTC5wb3B1cCh7Im1heFdpZHRoIjogIjEwMCUifSk7CgogICAgICAgIAogICAgICAgICAgICB2YXIgaHRtbF8zMWNhZTRkMDIzZjI0MGNjYWMxZTlkZTI5NDg0OWNlMSA9ICQoYDxkaXYgaWQ9Imh0bWxfMzFjYWU0ZDAyM2YyNDBjY2FjMWU5ZGUyOTQ4NDljZTEiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPmdvdmVybm1lbnQsV2FzaGluZ3RvbjwvZGl2PmApWzBdOwogICAgICAgICAgICBwb3B1cF9lM2Y2MzRjMjU0MTk0Mjk3ODFhOWM1MmJmNzk3Nzg5ZS5zZXRDb250ZW50KGh0bWxfMzFjYWU0ZDAyM2YyNDBjY2FjMWU5ZGUyOTQ4NDljZTEpOwogICAgICAgIAoKICAgICAgICBtYXJrZXJfNmFlMGFiZDkzMjc1NGYwNWJjMzk2ZTk1ZDU5MWQyODkuYmluZFBvcHVwKHBvcHVwX2UzZjYzNGMyNTQxOTQyOTc4MWE5YzUyYmY3OTc3ODllKQogICAgICAgIDsKCiAgICAgICAgCiAgICAKICAgIAogICAgICAgICAgICB2YXIgbWFya2VyX2Y4ODYyYzBmZWM1ZjQwNDk5NTQxM2Q3MzAxZTU2Yjc0ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNTEuNDk3MzIwNiwgLTAuMTM3MTQ5XSwKICAgICAgICAgICAgICAgIHt9CiAgICAgICAgICAgICkuYWRkVG8obWFwX2RkY2I1YjRmOGUzYjQ3Zjg4Yjk3NTA3ZmNhYTIzZDgxKTsKICAgICAgICAKICAgIAogICAgICAgIHZhciBwb3B1cF9hODA0YzFlZmJkNTI0MDc3ODYwMjZiMjk1NWY5NWQ5ZCA9IEwucG9wdXAoeyJtYXhXaWR0aCI6ICIxMDAlIn0pOwoKICAgICAgICAKICAgICAgICAgICAgdmFyIGh0bWxfMmE0ODA5MjAwMzdlNDMwZGEyMzM3MTBiZjMyNzE2MjYgPSAkKGA8ZGl2IGlkPSJodG1sXzJhNDgwOTIwMDM3ZTQzMGRhMjMzNzEwYmYzMjcxNjI2IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5ob2JiaWVzLFdlc3RtaW5zdGVyPC9kaXY+YClbMF07CiAgICAgICAgICAgIHBvcHVwX2E4MDRjMWVmYmQ1MjQwNzc4NjAyNmIyOTU1Zjk1ZDlkLnNldENvbnRlbnQoaHRtbF8yYTQ4MDkyMDAzN2U0MzBkYTIzMzcxMGJmMzI3MTYyNik7CiAgICAgICAgCgogICAgICAgIG1hcmtlcl9mODg2MmMwZmVjNWY0MDQ5OTU0MTNkNzMwMWU1NmI3NC5iaW5kUG9wdXAocG9wdXBfYTgwNGMxZWZiZDUyNDA3Nzg2MDI2YjI5NTVmOTVkOWQpCiAgICAgICAgOwoKICAgICAgICAKICAgIAogICAgCiAgICAgICAgICAgIHZhciBtYXJrZXJfMzUzMjc4YTU4MDE4NDcxMmExNDMyMzU3NTE0MjBhODYgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFszNC4wOTMyMTQsIC0xMTguMzE5NjEyNF0sCiAgICAgICAgICAgICAgICB7fQogICAgICAgICAgICApLmFkZFRvKG1hcF9kZGNiNWI0ZjhlM2I0N2Y4OGI5NzUwN2ZjYWEyM2Q4MSk7CiAgICAgICAgCiAgICAKICAgICAgICB2YXIgcG9wdXBfNmFmODUxZjkyMWZhNDU4Yjk2ZDc5OGVhN2E3MDkxODEgPSBMLnBvcHVwKHsibWF4V2lkdGgiOiAiMTAwJSJ9KTsKCiAgICAgICAgCiAgICAgICAgICAgIHZhciBodG1sX2NkNjlkYmIwYjVjNzQyNmRiODVhODM3MTNmZTZmOGE5ID0gJChgPGRpdiBpZD0iaHRtbF9jZDY5ZGJiMGI1Yzc0MjZkYjg1YTgzNzEzZmU2ZjhhOSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+aHVtb3IsSG9sbHl3b29kPC9kaXY+YClbMF07CiAgICAgICAgICAgIHBvcHVwXzZhZjg1MWY5MjFmYTQ1OGI5NmQ3OThlYTdhNzA5MTgxLnNldENvbnRlbnQoaHRtbF9jZDY5ZGJiMGI1Yzc0MjZkYjg1YTgzNzEzZmU2ZjhhOSk7CiAgICAgICAgCgogICAgICAgIG1hcmtlcl8zNTMyNzhhNTgwMTg0NzEyYTE0MzIzNTc1MTQyMGE4Ni5iaW5kUG9wdXAocG9wdXBfNmFmODUxZjkyMWZhNDU4Yjk2ZDc5OGVhN2E3MDkxODEpCiAgICAgICAgOwoKICAgICAgICAKICAgIAogICAgCiAgICAgICAgICAgIHZhciBtYXJrZXJfNWRjNzFkNTViZjQ3NGZjYmE5ZTY1ZDBiYTJhMWY5ZjkgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFszNy4xMjMyMjQ1LCAtNzguNDkyNzcyMV0sCiAgICAgICAgICAgICAgICB7fQogICAgICAgICAgICApLmFkZFRvKG1hcF9kZGNiNWI0ZjhlM2I0N2Y4OGI5NzUwN2ZjYWEyM2Q4MSk7CiAgICAgICAgCiAgICAKICAgICAgICB2YXIgcG9wdXBfMzRkZTIxMzQ5OTQyNGFhOThjMGQ0NWJkMjhhYTk4OTUgPSBMLnBvcHVwKHsibWF4V2lkdGgiOiAiMTAwJSJ9KTsKCiAgICAgICAgCiAgICAgICAgICAgIHZhciBodG1sXzI3YjhiZTQzNmMxNDQ2YTBiNzNiMzBjMDFmNzVjOWE3ID0gJChgPGRpdiBpZD0iaHRtbF8yN2I4YmU0MzZjMTQ0NmEwYjczYjMwYzAxZjc1YzlhNyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+bGVhcm5lZCxWaXJnaW5pYTwvZGl2PmApWzBdOwogICAgICAgICAgICBwb3B1cF8zNGRlMjEzNDk5NDI0YWE5OGMwZDQ1YmQyOGFhOTg5NS5zZXRDb250ZW50KGh0bWxfMjdiOGJlNDM2YzE0NDZhMGI3M2IzMGMwMWY3NWM5YTcpOwogICAgICAgIAoKICAgICAgICBtYXJrZXJfNWRjNzFkNTViZjQ3NGZjYmE5ZTY1ZDBiYTJhMWY5ZjkuYmluZFBvcHVwKHBvcHVwXzM0ZGUyMTM0OTk0MjRhYTk4YzBkNDViZDI4YWE5ODk1KQogICAgICAgIDsKCiAgICAgICAgCiAgICAKICAgIAogICAgICAgICAgICB2YXIgbWFya2VyXzJhODcxYjEwNWY4NTQ1OGRhNjJiMTgxYmM0OTIyY2ZjID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzM4MTYzNSwgLTc0LjA1NTA3MzFdLAogICAgICAgICAgICAgICAge30KICAgICAgICAgICAgKS5hZGRUbyhtYXBfZGRjYjViNGY4ZTNiNDdmODhiOTc1MDdmY2FhMjNkODEpOwogICAgICAgIAogICAgCiAgICAgICAgdmFyIHBvcHVwXzVkZTA4ZWJkODFkMDQ0Y2M4ZGE4N2MwOTlhNWJkNjQzID0gTC5wb3B1cCh7Im1heFdpZHRoIjogIjEwMCUifSk7CgogICAgICAgIAogICAgICAgICAgICB2YXIgaHRtbF9jYzIwNzMzNjE5NDQ0NTliYTJkOTAzNDA4YmM4ZDNiNSA9ICQoYDxkaXYgaWQ9Imh0bWxfY2MyMDczMzYxOTQ0NDU5YmEyZDkwMzQwOGJjOGQzYjUiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPmxvcmUsSHVkc29uPC9kaXY+YClbMF07CiAgICAgICAgICAgIHBvcHVwXzVkZTA4ZWJkODFkMDQ0Y2M4ZGE4N2MwOTlhNWJkNjQzLnNldENvbnRlbnQoaHRtbF9jYzIwNzMzNjE5NDQ0NTliYTJkOTAzNDA4YmM4ZDNiNSk7CiAgICAgICAgCgogICAgICAgIG1hcmtlcl8yYTg3MWIxMDVmODU0NThkYTYyYjE4MWJjNDkyMmNmYy5iaW5kUG9wdXAocG9wdXBfNWRlMDhlYmQ4MWQwNDRjYzhkYTg3YzA5OWE1YmQ2NDMpCiAgICAgICAgOwoKICAgICAgICAKICAgIAogICAgCiAgICAgICAgICAgIHZhciBtYXJrZXJfMDU5MjgxODVhMzVlNDk4ZjlkNGI4OTk2MWIyOTNlMGMgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFsyMi4yMTQzOTA4LCAxMTQuMjE1OTEyOV0sCiAgICAgICAgICAgICAgICB7fQogICAgICAgICAgICApLmFkZFRvKG1hcF9kZGNiNWI0ZjhlM2I0N2Y4OGI5NzUwN2ZjYWEyM2Q4MSk7CiAgICAgICAgCiAgICAKICAgICAgICB2YXIgcG9wdXBfY2Y3MjZiNGRhODhiNGM5OTg1ODg0OTc3MGMwOWYxYjEgPSBMLnBvcHVwKHsibWF4V2lkdGgiOiAiMTAwJSJ9KTsKCiAgICAgICAgCiAgICAgICAgICAgIHZhciBodG1sXzViYzk1ZjdkYmI0ZDQ1ODA5YjY4MWNiYmNlYjE2ZDBlID0gJChgPGRpdiBpZD0iaHRtbF81YmM5NWY3ZGJiNGQ0NTgwOWI2ODFjYmJjZWIxNmQwZSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+bXlzdGVyeSxTdGFubGV5PC9kaXY+YClbMF07CiAgICAgICAgICAgIHBvcHVwX2NmNzI2YjRkYTg4YjRjOTk4NTg4NDk3NzBjMDlmMWIxLnNldENvbnRlbnQoaHRtbF81YmM5NWY3ZGJiNGQ0NTgwOWI2ODFjYmJjZWIxNmQwZSk7CiAgICAgICAgCgogICAgICAgIG1hcmtlcl8wNTkyODE4NWEzNWU0OThmOWQ0Yjg5OTYxYjI5M2UwYy5iaW5kUG9wdXAocG9wdXBfY2Y3MjZiNGRhODhiNGM5OTg1ODg0OTc3MGMwOWYxYjEpCiAgICAgICAgOwoKICAgICAgICAKICAgIAogICAgCiAgICAgICAgICAgIHZhciBtYXJrZXJfZjdiY2NlYTY1NTcxNDZiYjgzM2MyMzhmZjk4YWExNjIgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs0OS4zNTk3MDYyLCAxNy4zMDk0MjAyXSwKICAgICAgICAgICAgICAgIHt9CiAgICAgICAgICAgICkuYWRkVG8obWFwX2RkY2I1YjRmOGUzYjQ3Zjg4Yjk3NTA3ZmNhYTIzZDgxKTsKICAgICAgICAKICAgIAogICAgICAgIHZhciBwb3B1cF9kZmM1NzM1YThlZjY0ODBlYTg2YzRmZjljYjBhOGRhMiA9IEwucG9wdXAoeyJtYXhXaWR0aCI6ICIxMDAlIn0pOwoKICAgICAgICAKICAgICAgICAgICAgdmFyIGh0bWxfNGM2ZWYxNDE4M2Y3NGI1YWFjNzJiYjdlMTExYmM1NTYgPSAkKGA8ZGl2IGlkPSJodG1sXzRjNmVmMTQxODNmNzRiNWFhYzcyYmI3ZTExMWJjNTU2IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5uZXdzLE1hcmNoPC9kaXY+YClbMF07CiAgICAgICAgICAgIHBvcHVwX2RmYzU3MzVhOGVmNjQ4MGVhODZjNGZmOWNiMGE4ZGEyLnNldENvbnRlbnQoaHRtbF80YzZlZjE0MTgzZjc0YjVhYWM3MmJiN2UxMTFiYzU1Nik7CiAgICAgICAgCgogICAgICAgIG1hcmtlcl9mN2JjY2VhNjU1NzE0NmJiODMzYzIzOGZmOThhYTE2Mi5iaW5kUG9wdXAocG9wdXBfZGZjNTczNWE4ZWY2NDgwZWE4NmM0ZmY5Y2IwYThkYTIpCiAgICAgICAgOwoKICAgICAgICAKICAgIAogICAgCiAgICAgICAgICAgIHZhciBtYXJrZXJfMDQ3MDNjMTczZTExNDVmM2FiYjQ0NTcyMDkzZTIwNGIgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFszNy4xMzAyOTE2LCA2Mi40MDE5NTEzXSwKICAgICAgICAgICAgICAgIHt9CiAgICAgICAgICAgICkuYWRkVG8obWFwX2RkY2I1YjRmOGUzYjQ3Zjg4Yjk3NTA3ZmNhYTIzZDgxKTsKICAgICAgICAKICAgIAogICAgICAgIHZhciBwb3B1cF82ODRjZWFhNDYzODg0Yjk1OWU1MWYzNjQ2NTlmNmY1NCA9IEwucG9wdXAoeyJtYXhXaWR0aCI6ICIxMDAlIn0pOwoKICAgICAgICAKICAgICAgICAgICAgdmFyIGh0bWxfNTk2YThmMDFiYjRlNGJkN2FjYjM5NTA1YjE4YzE0NzYgPSAkKGA8ZGl2IGlkPSJodG1sXzU5NmE4ZjAxYmI0ZTRiZDdhY2IzOTUwNWIxOGMxNDc2IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5yZWxpZ2lvbixNYXJ5PC9kaXY+YClbMF07CiAgICAgICAgICAgIHBvcHVwXzY4NGNlYWE0NjM4ODRiOTU5ZTUxZjM2NDY1OWY2ZjU0LnNldENvbnRlbnQoaHRtbF81OTZhOGYwMWJiNGU0YmQ3YWNiMzk1MDViMThjMTQ3Nik7CiAgICAgICAgCgogICAgICAgIG1hcmtlcl8wNDcwM2MxNzNlMTE0NWYzYWJiNDQ1NzIwOTNlMjA0Yi5iaW5kUG9wdXAocG9wdXBfNjg0Y2VhYTQ2Mzg4NGI5NTllNTFmMzY0NjU5ZjZmNTQpCiAgICAgICAgOwoKICAgICAgICAKICAgIAogICAgCiAgICAgICAgICAgIHZhciBtYXJrZXJfMDhkNTU5ZjY5OTkxNGJhZjk3NjUzM2M5ZTNhNTk0OWUgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs1MS41MDczMjE5LCAtMC4xMjc2NDc0XSwKICAgICAgICAgICAgICAgIHt9CiAgICAgICAgICAgICkuYWRkVG8obWFwX2RkY2I1YjRmOGUzYjQ3Zjg4Yjk3NTA3ZmNhYTIzZDgxKTsKICAgICAgICAKICAgIAogICAgICAgIHZhciBwb3B1cF85ODZhNDZjYTcxMTA0NWIzYjBiZGQ0NjgwNTFmNTQ2MCA9IEwucG9wdXAoeyJtYXhXaWR0aCI6ICIxMDAlIn0pOwoKICAgICAgICAKICAgICAgICAgICAgdmFyIGh0bWxfN2ZhNmNhMmQxNGRmNDlmYWE5YjYzYzE4ZTI2YTAwY2MgPSAkKGA8ZGl2IGlkPSJodG1sXzdmYTZjYTJkMTRkZjQ5ZmFhOWI2M2MxOGUyNmEwMGNjIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5yZXZpZXdzLExvbmRvbjwvZGl2PmApWzBdOwogICAgICAgICAgICBwb3B1cF85ODZhNDZjYTcxMTA0NWIzYjBiZGQ0NjgwNTFmNTQ2MC5zZXRDb250ZW50KGh0bWxfN2ZhNmNhMmQxNGRmNDlmYWE5YjYzYzE4ZTI2YTAwY2MpOwogICAgICAgIAoKICAgICAgICBtYXJrZXJfMDhkNTU5ZjY5OTkxNGJhZjk3NjUzM2M5ZTNhNTk0OWUuYmluZFBvcHVwKHBvcHVwXzk4NmE0NmNhNzExMDQ1YjNiMGJkZDQ2ODA1MWY1NDYwKQogICAgICAgIDsKCiAgICAgICAgCiAgICAKICAgIAogICAgICAgICAgICB2YXIgbWFya2VyXzg4Y2RhN2FiMWJkYzQyZTA5ZTI4OGJiMjg2YWU1NWJkID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNDcuMDM4NTcyNSwgMjYuNjY4MjY4OTQ3NTExN10sCiAgICAgICAgICAgICAgICB7fQogICAgICAgICAgICApLmFkZFRvKG1hcF9kZGNiNWI0ZjhlM2I0N2Y4OGI5NzUwN2ZjYWEyM2Q4MSk7CiAgICAgICAgCiAgICAKICAgICAgICB2YXIgcG9wdXBfMTNiNzM2ZDEzMjdiNDU0N2JiNjY2NWRkOWQ1NWE4MjUgPSBMLnBvcHVwKHsibWF4V2lkdGgiOiAiMTAwJSJ9KTsKCiAgICAgICAgCiAgICAgICAgICAgIHZhciBodG1sX2EzMDdlYTVlZTFiYzQxOTk5ZDZhY2QyNjk1ZmQ2YzJkID0gJChgPGRpdiBpZD0iaHRtbF9hMzA3ZWE1ZWUxYmM0MTk5OWQ2YWNkMjY5NWZkNmMyZCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+cm9tYW5jZSxEYXZpZDwvZGl2PmApWzBdOwogICAgICAgICAgICBwb3B1cF8xM2I3MzZkMTMyN2I0NTQ3YmI2NjY1ZGQ5ZDU1YTgyNS5zZXRDb250ZW50KGh0bWxfYTMwN2VhNWVlMWJjNDE5OTlkNmFjZDI2OTVmZDZjMmQpOwogICAgICAgIAoKICAgICAgICBtYXJrZXJfODhjZGE3YWIxYmRjNDJlMDllMjg4YmIyODZhZTU1YmQuYmluZFBvcHVwKHBvcHVwXzEzYjczNmQxMzI3YjQ1NDdiYjY2NjVkZDlkNTVhODI1KQogICAgICAgIDsKCiAgICAgICAgCiAgICAKICAgIAogICAgICAgICAgICB2YXIgbWFya2VyXzUyNGViN2I3NDY1MDQ0Yjc4ODg5ODRjZDQzM2QyMDg2ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNTEuMjA4Njk3NSwgODkuMjM0Mzc0OF0sCiAgICAgICAgICAgICAgICB7fQogICAgICAgICAgICApLmFkZFRvKG1hcF9kZGNiNWI0ZjhlM2I0N2Y4OGI5NzUwN2ZjYWEyM2Q4MSk7CiAgICAgICAgCiAgICAKICAgICAgICB2YXIgcG9wdXBfZjg5NDVkYzYyZGIxNGJjOGFiZTM0YzVmZThmOGQzMzcgPSBMLnBvcHVwKHsibWF4V2lkdGgiOiAiMTAwJSJ9KTsKCiAgICAgICAgCiAgICAgICAgICAgIHZhciBodG1sXzRhZTE4NGRiZTU3NDRkMGI5Y2ExYjg5MGE4OGI3ZDg0ID0gJChgPGRpdiBpZD0iaHRtbF80YWUxODRkYmU1NzQ0ZDBiOWNhMWI4OTBhODhiN2Q4NCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+c2NpZW5jZV9maWN0aW9uLEFzaWE8L2Rpdj5gKVswXTsKICAgICAgICAgICAgcG9wdXBfZjg5NDVkYzYyZGIxNGJjOGFiZTM0YzVmZThmOGQzMzcuc2V0Q29udGVudChodG1sXzRhZTE4NGRiZTU3NDRkMGI5Y2ExYjg5MGE4OGI3ZDg0KTsKICAgICAgICAKCiAgICAgICAgbWFya2VyXzUyNGViN2I3NDY1MDQ0Yjc4ODg5ODRjZDQzM2QyMDg2LmJpbmRQb3B1cChwb3B1cF9mODk0NWRjNjJkYjE0YmM4YWJlMzRjNWZlOGY4ZDMzNykKICAgICAgICA7CgogICAgICAgIAogICAgCjwvc2NyaXB0Pg==\" style=\"position:absolute;width:100%;height:100%;left:0;top:0;border:none !important;\" allowfullscreen webkitallowfullscreen mozallowfullscreen></iframe></div></div>"
  12.       ],
  13.       "text/plain": [
  14.        "<folium.folium.Map at 0x1aabbcdfd0>"
  15.       ]
  16.      },
  17.      "execution_count": 441,
  18.      "metadata": {},
  19.      "output_type": "execute_result"
  20.     }
  21.    ],
  22.    "source": [
  23.     "# define the world map\n",
  24.     "world_map = folium.Map(zoom_start=20)\n",
  25.     "\n",
  26.     "for title in locations:\n",
  27.     "    location=locations[title][1]\n",
  28.     "    if location!=[]:\n",
  29.     "        folium.Marker(location=location,popup=title+','+locations[title][0]).add_to(world_map)\n",
  30.     "\n",
  31.     "# display world map\n",
  32.     "world_map"
  33.    ]
  34.   }
  35.  ],
  36.  "metadata": {
  37.   "kernelspec": {
  38.    "display_name": "Python 3",
  39.    "language": "python",
  40.    "name": "python3"
  41.   },
  42.   "language_info": {
  43.    "codemirror_mode": {
  44.     "name": "ipython",
  45.     "version": 3
  46.    },
  47.    "file_extension": ".py",
  48.    "mimetype": "text/x-python",
  49.    "name": "python",
  50.    "nbconvert_exporter": "python",
  51.    "pygments_lexer": "ipython3",
  52.    "version": "3.6.5"
  53.   }
  54.  },
  55.  "nbformat": 4,
  56.  "nbformat_minor": 2
  57. }
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
 
Top