Skip to content

Instantly share code, notes, and snippets.

@tyokota tyokota/README.md
Last active May 2, 2016

Embed
What would you like to do?
food radius

###### chart 1. my food radius.

food radius

“We purchase and consume 80% of our calories within 5 miles of our home” – Dr. Brian Wansink

The food radius map is the first exercise in Slim by Design: Mindless Eating Solutions for Everyday Life by Dr. Brian Wansink. By creating this map in R, I was able to understand my poorly made food choices.

Markers represent places that I regularly visit to eat; there are many other places not represented in this map. With that said, the food radius map still revealed just how inundated my neighborhood was with fast food. And if I were to think about the proportion of that 80% of caloric intake, it may be safe to say a majority of it comes from fast food places - yikes.

This file has been truncated, but you can view the full file.
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<script src="data:application/x-javascript;base64,KGZ1bmN0aW9uKCkgewogIC8vIElmIHdpbmRvdy5IVE1MV2lkZ2V0cyBpcyBhbHJlYWR5IGRlZmluZWQsIHRoZW4gdXNlIGl0OyBvdGhlcndpc2UgY3JlYXRlIGEKICAvLyBuZXcgb2JqZWN0LiBUaGlzIGFsbG93cyBwcmVjZWRpbmcgY29kZSB0byBzZXQgb3B0aW9ucyB0aGF0IGFmZmVjdCB0aGUKICAvLyBpbml0aWFsaXphdGlvbiBwcm9jZXNzICh0aG91Z2ggbm9uZSBjdXJyZW50bHkgZXhpc3QpLgogIHdpbmRvdy5IVE1MV2lkZ2V0cyA9IHdpbmRvdy5IVE1MV2lkZ2V0cyB8fCB7fTsKCiAgLy8gU2VlIGlmIHdlJ3JlIHJ1bm5pbmcgaW4gYSB2aWV3ZXIgcGFuZS4gSWYgbm90LCB3ZSdyZSBpbiBhIHdlYiBicm93c2VyLgogIHZhciB2aWV3ZXJNb2RlID0gd2luZG93LkhUTUxXaWRnZXRzLnZpZXdlck1vZGUgPQogICAgICAvXGJ2aWV3ZXJfcGFuZT0xXGIvLnRlc3Qod2luZG93LmxvY2F0aW9uKTsKCiAgLy8gU2VlIGlmIHdlJ3JlIHJ1bm5pbmcgaW4gU2hpbnkgbW9kZS4gSWYgbm90LCBpdCdzIGEgc3RhdGljIGRvY3VtZW50LgogIC8vIE5vdGUgdGhhdCBzdGF0aWMgd2lkZ2V0cyBjYW4gYXBwZWFyIGluIGJvdGggU2hpbnkgYW5kIHN0YXRpYyBtb2RlcywgYnV0CiAgLy8gb2J2aW91c2x5LCBTaGlueSB3aWRnZXRzIGNhbiBvbmx5IGFwcGVhciBpbiBTaGlueSBhcHBzL2RvY3VtZW50cy4KICB2YXIgc2hpbnlNb2RlID0gd2luZG93LkhUTUxXaWRnZXRzLnNoaW55TW9kZSA9CiAgICAgIHR5cGVvZih3aW5kb3cuU2hpbnkpICE9PSAidW5kZWZpbmVkIiAmJiAhIXdpbmRvdy5TaGlueS5vdXRwdXRCaW5kaW5nczsKCiAgLy8gV2UgY2FuJ3QgY291bnQgb24galF1ZXJ5IGJlaW5nIGF2YWlsYWJsZSwgc28gd2UgaW1wbGVtZW50IG91ciBvd24KICAvLyB2ZXJzaW9uIGlmIG5lY2Vzc2FyeS4KICBmdW5jdGlvbiBxdWVyeVNlbGVjdG9yQWxsKHNjb3BlLCBzZWxlY3RvcikgewogICAgaWYgKHR5cGVvZihqUXVlcnkpICE9PSAidW5kZWZpbmVkIiAmJiBzY29wZSBpbnN0YW5jZW9mIGpRdWVyeSkgewogICAgICByZXR1cm4gc2NvcGUuZmluZChzZWxlY3Rvcik7CiAgICB9CiAgICBpZiAoc2NvcGUucXVlcnlTZWxlY3RvckFsbCkgewogICAgICByZXR1cm4gc2NvcGUucXVlcnlTZWxlY3RvckFsbChzZWxlY3Rvcik7CiAgICB9CiAgfQoKICBmdW5jdGlvbiBhc0FycmF5KHZhbHVlKSB7CiAgICBpZiAodmFsdWUgPT09IG51bGwpCiAgICAgIHJldHVybiBbXTsKICAgIGlmICgkLmlzQXJyYXkodmFsdWUpKQogICAgICByZXR1cm4gdmFsdWU7CiAgICByZXR1cm4gW3ZhbHVlXTsKICB9CgogIC8vIEltcGxlbWVudCBqUXVlcnkncyBleHRlbmQKICBmdW5jdGlvbiBleHRlbmQodGFyZ2V0IC8qLCAuLi4gKi8pIHsKICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09IDEpIHsKICAgICAgcmV0dXJuIHRhcmdldDsKICAgIH0KICAgIGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7CiAgICAgIHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07CiAgICAgIGZvciAodmFyIHByb3AgaW4gc291cmNlKSB7CiAgICAgICAgaWYgKHNvdXJjZS5oYXNPd25Qcm9wZXJ0eShwcm9wKSkgewogICAgICAgICAgdGFyZ2V0W3Byb3BdID0gc291cmNlW3Byb3BdOwogICAgICAgIH0KICAgICAgfQogICAgfQogICAgcmV0dXJuIHRhcmdldDsKICB9CgogIC8vIElFOCBkb2Vzbid0IHN1cHBvcnQgQXJyYXkuZm9yRWFjaC4KICBmdW5jdGlvbiBmb3JFYWNoKHZhbHVlcywgY2FsbGJhY2ssIHRoaXNBcmcpIHsKICAgIGlmICh2YWx1ZXMuZm9yRWFjaCkgewogICAgICB2YWx1ZXMuZm9yRWFjaChjYWxsYmFjaywgdGhpc0FyZyk7CiAgICB9IGVsc2UgewogICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHZhbHVlcy5sZW5ndGg7IGkrKykgewogICAgICAgIGNhbGxiYWNrLmNhbGwodGhpc0FyZywgdmFsdWVzW2ldLCBpLCB2YWx1ZXMpOwogICAgICB9CiAgICB9CiAgfQoKICAvLyBSZXBsYWNlcyB0aGUgc3BlY2lmaWVkIG1ldGhvZCB3aXRoIHRoZSByZXR1cm4gdmFsdWUgb2YgZnVuY1NvdXJjZS4KICAvLwogIC8vIE5vdGUgdGhhdCBmdW5jU291cmNlIHNob3VsZCBub3QgQkUgdGhlIG5ldyBtZXRob2QsIGl0IHNob3VsZCBiZSBhIGZ1bmN0aW9uCiAgLy8gdGhhdCBSRVRVUk5TIHRoZSBuZXcgbWV0aG9kLiBmdW5jU291cmNlIHJlY2VpdmVzIGEgc2luZ2xlIGFyZ3VtZW50IHRoYXQgaXMKICAvLyB0aGUgb3ZlcnJpZGRlbiBtZXRob2QsIGl0IGNhbiBiZSBjYWxsZWQgZnJvbSB0aGUgbmV3IG1ldGhvZC4gVGhlIG92ZXJyaWRkZW4KICAvLyBtZXRob2QgY2FuIGJlIGNhbGxlZCBsaWtlIGEgcmVndWxhciBmdW5jdGlvbiwgaXQgaGFzIHRoZSB0YXJnZXQgcGVybWFuZW50bHkKICAvLyBib3VuZCB0byBpdCBzbyAidGhpcyIgd2lsbCB3b3JrIGNvcnJlY3RseS4KICBmdW5jdGlvbiBvdmVycmlkZU1ldGhvZCh0YXJnZXQsIG1ldGhvZE5hbWUsIGZ1bmNTb3VyY2UpIHsKICAgIHZhciBzdXBlckZ1bmMgPSB0YXJnZXRbbWV0aG9kTmFtZV0gfHwgZnVuY3Rpb24oKSB7fTsKICAgIHZhciBzdXBlckZ1bmNCb3VuZCA9IGZ1bmN0aW9uKCkgewogICAgICByZXR1cm4gc3VwZXJGdW5jLmFwcGx5KHRhcmdldCwgYXJndW1lbnRzKTsKICAgIH07CiAgICB0YXJnZXRbbWV0aG9kTmFtZV0gPSBmdW5jU291cmNlKHN1cGVyRnVuY0JvdW5kKTsKICB9CgogIC8vIEltcGxlbWVudCBhIHZhZ3VlIGZhY3NpbWlsaWUgb2YgalF1ZXJ5J3MgZGF0YSBtZXRob2QKICBmdW5jdGlvbiBlbGVtZW50RGF0YShlbCwgbmFtZSwgdmFsdWUpIHsKICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09IDIpIHsKICAgICAgcmV0dXJuIGVsWyJodG1sd2lkZ2V0X2RhdGFfIiArIG5hbWVdOwogICAgfSBlbHNlIGlmIChhcmd1bWVudHMubGVuZ3RoID09IDMpIHsKICAgICAgZWxbImh0bWx3aWRnZXRfZGF0YV8iICsgbmFtZV0gPSB2YWx1ZTsKICAgICAgcmV0dXJuIGVsOwogICAgfSBlbHNlIHsKICAgICAgdGhyb3cgbmV3IEVycm9yKCJXcm9uZyBudW1iZXIgb2YgYXJndW1lbnRzIGZvciBlbGVtZW50RGF0YTogIiArCiAgICAgICAgYXJndW1lbnRzLmxlbmd0aCk7CiAgICB9CiAgfQoKICAvLyBodHRwOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzM0NDYxNzAvZXNjYXBlLXN0cmluZy1mb3ItdXNlLWluLWphdmFzY3JpcHQtcmVnZXgKICBmdW5jdGlvbiBlc2NhcGVSZWdFeHAoc3RyKSB7CiAgICByZXR1cm4gc3RyLnJlcGxhY2UoL1tcLVxbXF1cL1x7XH1cKFwpXCpcK1w/XC5cXFxeXCRcfF0vZywgIlxcJCYiKTsKICB9CgogIGZ1bmN0aW9uIGhhc0NsYXNzKGVsLCBjbGFzc05hbWUpIHsKICAgIHZhciByZSA9IG5ldyBSZWdFeHAoIlxcYiIgKyBlc2NhcGVSZWdFeHAoY2xhc3NOYW1lKSArICJcXGIiKTsKICAgIHJldHVybiByZS50ZXN0KGVsLmNsYXNzTmFtZSk7CiAgfQoKICAvLyBlbGVtZW50cyAtIGFycmF5IChvciBhcnJheS1saWtlIG9iamVjdCkgb2YgSFRNTCBlbGVtZW50cwogIC8vIGNsYXNzTmFtZSAtIGNsYXNzIG5hbWUgdG8gdGVzdCBmb3IKICAvLyBpbmNsdWRlIC0gaWYgdHJ1ZSwgb25seSByZXR1cm4gZWxlbWVudHMgd2l0aCBnaXZlbiBjbGFzc05hbWU7CiAgLy8gICBpZiBmYWxzZSwgb25seSByZXR1cm4gZWxlbWVudHMgKndpdGhvdXQqIGdpdmVuIGNsYXNzTmFtZQogIGZ1bmN0aW9uIGZpbHRlckJ5Q2xhc3MoZWxlbWVudHMsIGNsYXNzTmFtZSwgaW5jbHVkZSkgewogICAgdmFyIHJlc3VsdHMgPSBbXTsKICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZWxlbWVudHMubGVuZ3RoOyBpKyspIHsKICAgICAgaWYgKGhhc0NsYXNzKGVsZW1lbnRzW2ldLCBjbGFzc05hbWUpID09IGluY2x1ZGUpCiAgICAgICAgcmVzdWx0cy5wdXNoKGVsZW1lbnRzW2ldKTsKICAgIH0KICAgIHJldHVybiByZXN1bHRzOwogIH0KCiAgZnVuY3Rpb24gb24ob2JqLCBldmVudE5hbWUsIGZ1bmMpIHsKICAgIGlmIChvYmouYWRkRXZlbnRMaXN0ZW5lcikgewogICAgICBvYmouYWRkRXZlbnRMaXN0ZW5lcihldmVudE5hbWUsIGZ1bmMsIGZhbHNlKTsKICAgIH0gZWxzZSBpZiAob2JqLmF0dGFjaEV2ZW50KSB7CiAgICAgIG9iai5hdHRhY2hFdmVudChldmVudE5hbWUsIGZ1bmMpOwogICAgfQogIH0KCiAgZnVuY3Rpb24gb2ZmKG9iaiwgZXZlbnROYW1lLCBmdW5jKSB7CiAgICBpZiAob2JqLnJlbW92ZUV2ZW50TGlzdGVuZXIpCiAgICAgIG9iai5yZW1vdmVFdmVudExpc3RlbmVyKGV2ZW50TmFtZSwgZnVuYywgZmFsc2UpOwogICAgZWxzZSBpZiAob2JqLmRldGFjaEV2ZW50KSB7CiAgICAgIG9iai5kZXRhY2hFdmVudChldmVudE5hbWUsIGZ1bmMpOwogICAgfQogIH0KCiAgLy8gVHJhbnNsYXRlIGFycmF5IG9mIHZhbHVlcyB0byB0b3AvcmlnaHQvYm90dG9tL2xlZnQsIGFzIHVzdWFsIHdpdGgKICAvLyB0aGUgInBhZGRpbmciIENTUyBwcm9wZXJ0eQogIC8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0NTUy9wYWRkaW5nCiAgZnVuY3Rpb24gdW5wYWNrUGFkZGluZyh2YWx1ZSkgewogICAgaWYgKHR5cGVvZih2YWx1ZSkgPT09ICJudW1iZXIiKQogICAgICB2YWx1ZSA9IFt2YWx1ZV07CiAgICBpZiAodmFsdWUubGVuZ3RoID09PSAxKSB7CiAgICAgIHJldHVybiB7dG9wOiB2YWx1ZVswXSwgcmlnaHQ6IHZhbHVlWzBdLCBib3R0b206IHZhbHVlWzBdLCBsZWZ0OiB2YWx1ZVswXX07CiAgICB9CiAgICBpZiAodmFsdWUubGVuZ3RoID09PSAyKSB7CiAgICAgIHJldHVybiB7dG9wOiB2YWx1ZVswXSwgcmlnaHQ6IHZhbHVlWzFdLCBib3R0b206IHZhbHVlWzBdLCBsZWZ0OiB2YWx1ZVsxXX07CiAgICB9CiAgICBpZiAodmFsdWUubGVuZ3RoID09PSAzKSB7CiAgICAgIHJldHVybiB7dG9wOiB2YWx1ZVswXSwgcmlnaHQ6IHZhbHVlWzFdLCBib3R0b206IHZhbHVlWzJdLCBsZWZ0OiB2YWx1ZVsxXX07CiAgICB9CiAgICBpZiAodmFsdWUubGVuZ3RoID09PSA0KSB7CiAgICAgIHJldHVybiB7dG9wOiB2YWx1ZVswXSwgcmlnaHQ6IHZhbHVlWzFdLCBib3R0b206IHZhbHVlWzJdLCBsZWZ0OiB2YWx1ZVszXX07CiAgICB9CiAgfQoKICAvLyBDb252ZXJ0IGFuIHVucGFja2VkIHBhZGRpbmcgb2JqZWN0IHRvIGEgQ1NTIHZhbHVlCiAgZnVuY3Rpb24gcGFkZGluZ1RvQ3NzKHBhZGRpbmdPYmopIHsKICAgIHJldHVybiBwYWRkaW5nT2JqLnRvcCArICJweCAiICsgcGFkZGluZ09iai5yaWdodCArICJweCAiICsgcGFkZGluZ09iai5ib3R0b20gKyAicHggIiArIHBhZGRpbmdPYmoubGVmdCArICJweCI7CiAgfQoKICAvLyBNYWtlcyBhIG51bWJlciBzdWl0YWJsZSBmb3IgQ1NTCiAgZnVuY3Rpb24gcHgoeCkgewogICAgaWYgKHR5cGVvZih4KSA9PT0gIm51bWJlciIpCiAgICAgIHJldHVybiB4ICsgInB4IjsKICAgIGVsc2UKICAgICAgcmV0dXJuIHg7CiAgfQoKICAvLyBSZXRyaWV2ZXMgcnVudGltZSB3aWRnZXQgc2l6aW5nIGluZm9ybWF0aW9uIGZvciBhbiBlbGVtZW50LgogIC8vIFRoZSByZXR1cm4gdmFsdWUgaXMgZWl0aGVyIG51bGwsIG9yIGFuIG9iamVjdCB3aXRoIGZpbGwsIHBhZGRpbmcsCiAgLy8gZGVmYXVsdFdpZHRoLCBkZWZhdWx0SGVpZ2h0IGZpZWxkcy4KICBmdW5jdGlvbiBzaXppbmdQb2xpY3koZWwpIHsKICAgIHZhciBzaXppbmdFbCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoInNjcmlwdFtkYXRhLWZvcj0nIiArIGVsLmlkICsgIiddW3R5cGU9J2FwcGxpY2F0aW9uL2h0bWx3aWRnZXQtc2l6aW5nJ10iKTsKICAgIGlmICghc2l6aW5nRWwpCiAgICAgIHJldHVybiBudWxsOwogICAgdmFyIHNwID0gSlNPTi5wYXJzZShzaXppbmdFbC50ZXh0Q29udGVudCB8fCBzaXppbmdFbC50ZXh0IHx8ICJ7fSIpOwogICAgaWYgKHZpZXdlck1vZGUpIHsKICAgICAgcmV0dXJuIHNwLnZpZXdlcjsKICAgIH0gZWxzZSB7CiAgICAgIHJldHVybiBzcC5icm93c2VyOwogICAgfQogIH0KCiAgZnVuY3Rpb24gaW5pdFNpemluZyhlbCkgewogICAgdmFyIHNpemluZyA9IHNpemluZ1BvbGljeShlbCk7CiAgICBpZiAoIXNpemluZykKICAgICAgcmV0dXJuOwoKICAgIHZhciBjZWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiaHRtbHdpZGdldF9jb250YWluZXIiKTsKICAgIGlmICghY2VsKQogICAgICByZXR1cm47CgogICAgaWYgKHR5cGVvZihzaXppbmcucGFkZGluZykgIT09ICJ1bmRlZmluZWQiKSB7CiAgICAgIGRvY3VtZW50LmJvZHkuc3R5bGUubWFyZ2luID0gIjAiOwogICAgICBkb2N1bWVudC5ib2R5LnN0eWxlLnBhZGRpbmcgPSBwYWRkaW5nVG9Dc3ModW5wYWNrUGFkZGluZyhzaXppbmcucGFkZGluZykpOwogICAgfQoKICAgIGlmIChzaXppbmcuZmlsbCkgewogICAgICBkb2N1bWVudC5ib2R5LnN0eWxlLm92ZXJmbG93ID0gImhpZGRlbiI7CiAgICAgIGRvY3VtZW50LmJvZHkuc3R5bGUud2lkdGggPSAiMTAwJSI7CiAgICAgIGRvY3VtZW50LmJvZHkuc3R5bGUuaGVpZ2h0ID0gIjEwMCUiOwogICAgICBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc3R5bGUud2lkdGggPSAiMTAwJSI7CiAgICAgIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zdHlsZS5oZWlnaHQgPSAiMTAwJSI7CiAgICAgIGlmIChjZWwpIHsKICAgICAgICBjZWwuc3R5bGUucG9zaXRpb24gPSAiYWJzb2x1dGUiOwogICAgICAgIHZhciBwYWQgPSB1bnBhY2tQYWRkaW5nKHNpemluZy5wYWRkaW5nKTsKICAgICAgICBjZWwuc3R5bGUudG9wID0gcGFkLnRvcCArICJweCI7CiAgICAgICAgY2VsLnN0eWxlLnJpZ2h0ID0gcGFkLnJpZ2h0ICsgInB4IjsKICAgICAgICBjZWwuc3R5bGUuYm90dG9tID0gcGFkLmJvdHRvbSArICJweCI7CiAgICAgICAgY2VsLnN0eWxlLmxlZnQgPSBwYWQubGVmdCArICJweCI7CiAgICAgICAgZWwuc3R5bGUud2lkdGggPSAiMTAwJSI7CiAgICAgICAgZWwuc3R5bGUuaGVpZ2h0ID0gIjEwMCUiOwogICAgICB9CgogICAgICByZXR1cm4gewogICAgICAgIGdldFdpZHRoOiBmdW5jdGlvbigpIHsgcmV0dXJuIGNlbC5vZmZzZXRXaWR0aDsgfSwKICAgICAgICBnZXRIZWlnaHQ6IGZ1bmN0aW9uKCkgeyByZXR1cm4gY2VsLm9mZnNldEhlaWdodDsgfQogICAgICB9OwoKICAgIH0gZWxzZSB7CiAgICAgIGVsLnN0eWxlLndpZHRoID0gcHgoc2l6aW5nLndpZHRoKTsKICAgICAgZWwuc3R5bGUuaGVpZ2h0ID0gcHgoc2l6aW5nLmhlaWdodCk7CgogICAgICByZXR1cm4gewogICAgICAgIGdldFdpZHRoOiBmdW5jdGlvbigpIHsgcmV0dXJuIGVsLm9mZnNldFdpZHRoOyB9LAogICAgICAgIGdldEhlaWdodDogZnVuY3Rpb24oKSB7IHJldHVybiBlbC5vZmZzZXRIZWlnaHQ7IH0KICAgICAgfTsKICAgIH0KICB9CgogIC8vIERlZmF1bHQgaW1wbGVtZW50YXRpb25zIGZvciBtZXRob2RzCiAgdmFyIGRlZmF1bHRzID0gewogICAgZmluZDogZnVuY3Rpb24oc2NvcGUpIHsKICAgICAgcmV0dXJuIHF1ZXJ5U2VsZWN0b3JBbGwoc2NvcGUsICIuIiArIHRoaXMubmFtZSk7CiAgICB9LAogICAgcmVuZGVyRXJyb3I6IGZ1bmN0aW9uKGVsLCBlcnIpIHsKICAgICAgdmFyICRlbCA9ICQoZWwpOwoKICAgICAgdGhpcy5jbGVhckVycm9yKGVsKTsKCiAgICAgIC8vIEFkZCBhbGwgdGhlc2UgZXJyb3IgY2xhc3NlcywgYXMgU2hpbnkgZG9lcwogICAgICB2YXIgZXJyQ2xhc3MgPSAic2hpbnktb3V0cHV0LWVycm9yIjsKICAgICAgaWYgKGVyci50eXBlICE9PSBudWxsKSB7CiAgICAgICAgLy8gdXNlIHRoZSBjbGFzc2VzIG9mIHRoZSBlcnJvciBjb25kaXRpb24gYXMgQ1NTIGNsYXNzIG5hbWVzCiAgICAgICAgZXJyQ2xhc3MgPSBlcnJDbGFzcyArICIgIiArICQubWFwKGFzQXJyYXkoZXJyLnR5cGUpLCBmdW5jdGlvbih0eXBlKSB7CiAgICAgICAgICByZXR1cm4gZXJyQ2xhc3MgKyAiLSIgKyB0eXBlOwogICAgICAgIH0pLmpvaW4oIiAiKTsKICAgICAgfQogICAgICBlcnJDbGFzcyA9IGVyckNsYXNzICsgIiBodG1sd2lkZ2V0cy1lcnJvciI7CgogICAgICAvLyBJcyBlbCBpbmxpbmUgb3IgYmxvY2s/IElmIGlubGluZSBvciBpbmxpbmUtYmxvY2ssIGp1c3QgZGlzcGxheTpub25lIGl0CiAgICAgIC8vIGFuZCBhZGQgYW4gaW5saW5lIGVycm9yLgogICAgICB2YXIgZGlzcGxheSA9ICRlbC5jc3MoImRpc3BsYXkiKTsKICAgICAgJGVsLmRhdGEoInJlc3RvcmUtZGlzcGxheS1tb2RlIiwgZGlzcGxheSk7CgogICAgICBpZiAoZGlzcGxheSA9PT0gImlubGluZSIgfHwgZGlzcGxheSA9PT0gImlubGluZS1ibG9jayIpIHsKICAgICAgICAkZWwuaGlkZSgpOwogICAgICAgIGlmIChlcnIubWVzc2FnZSAhPT0gIiIpIHsKICAgICAgICAgIHZhciBlcnJvclNwYW4gPSAkKCI8c3Bhbj4iKS5hZGRDbGFzcyhlcnJDbGFzcyk7CiAgICAgICAgICBlcnJvclNwYW4udGV4dChlcnIubWVzc2FnZSk7CiAgICAgICAgICAkZWwuYWZ0ZXIoZXJyb3JTcGFuKTsKICAgICAgICB9CiAgICAgIH0gZWxzZSBpZiAoZGlzcGxheSA9PT0gImJsb2NrIikgewogICAgICAgIC8vIElmIGJsb2NrLCBhZGQgYW4gZXJyb3IganVzdCBhZnRlciB0aGUgZWwsIHNldCB2aXNpYmlsaXR5Om5vbmUgb24gdGhlCiAgICAgICAgLy8gZWwsIGFuZCBwb3NpdGlvbiB0aGUgZXJyb3IgdG8gYmUgb24gdG9wIG9mIHRoZSBlbC4KICAgICAgICAvLyBNYXJrIGl0IHdpdGggYSB1bmlxdWUgSUQgYW5kIENTUyBjbGFzcyBzbyB3ZSBjYW4gcmVtb3ZlIGl0IGxhdGVyLgogICAgICAgICRlbC5jc3MoInZpc2liaWxpdHkiLCAiaGlkZGVuIik7CiAgICAgICAgaWYgKGVyci5tZXNzYWdlICE9PSAiIikgewogICAgICAgICAgdmFyIGVycm9yRGl2ID0gJCgiPGRpdj4iKS5hZGRDbGFzcyhlcnJDbGFzcykuY3NzKCJwb3NpdGlvbiIsICJhYnNvbHV0ZSIpCiAgICAgICAgICAgIC5jc3MoInRvcCIsIGVsLm9mZnNldFRvcCkKICAgICAgICAgICAgLmNzcygibGVmdCIsIGVsLm9mZnNldExlZnQpCiAgICAgICAgICAgIC8vIHNldHRpbmcgd2lkdGggY2FuIHB1c2ggb3V0IHRoZSBwYWdlIHNpemUsIGZvcmNpbmcgb3RoZXJ3aXNlCiAgICAgICAgICAgIC8vIHVubmVjZXNzYXJ5IHNjcm9sbGJhcnMgdG8gYXBwZWFyIGFuZCBtYWtpbmcgaXQgaW1wb3NzaWJsZSBmb3IKICAgICAgICAgICAgLy8gdGhlIGVsZW1lbnQgdG8gc2hyaW5rOyBzbyB1c2UgbWF4LXdpZHRoIGluc3RlYWQKICAgICAgICAgICAgLmNzcygibWF4V2lkdGgiLCBlbC5vZmZzZXRXaWR0aCkKICAgICAgICAgICAgLmNzcygiaGVpZ2h0IiwgZWwub2Zmc2V0SGVpZ2h0KTsKICAgICAgICAgIGVycm9yRGl2LnRleHQoZXJyLm1lc3NhZ2UpOwogICAgICAgICAgJGVsLmFmdGVyKGVycm9yRGl2KTsKCiAgICAgICAgICAvLyBSZWFsbHkgZHVtYiB3YXkgdG8ga2VlcCB0aGUgc2l6ZS9wb3NpdGlvbiBvZiB0aGUgZXJyb3IgaW4gc3luYyB3aXRoCiAgICAgICAgICAvLyB0aGUgcGFyZW50IGVsZW1lbnQgYXMgdGhlIHdpbmRvdyBpcyByZXNpemVkIG9yIHdoYXRldmVyLgogICAgICAgICAgdmFyIGludElkID0gc2V0SW50ZXJ2YWwoZnVuY3Rpb24oKSB7CiAgICAgICAgICAgIGlmICghZXJyb3JEaXZbMF0ucGFyZW50RWxlbWVudCkgewogICAgICAgICAgICAgIGNsZWFySW50ZXJ2YWwoaW50SWQpOwogICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgfQogICAgICAgICAgICBlcnJvckRpdgogICAgICAgICAgICAgIC5jc3MoInRvcCIsIGVsLm9mZnNldFRvcCkKICAgICAgICAgICAgICAuY3NzKCJsZWZ0IiwgZWwub2Zmc2V0TGVmdCkKICAgICAgICAgICAgICAuY3NzKCJtYXhXaWR0aCIsIGVsLm9mZnNldFdpZHRoKQogICAgICAgICAgICAgIC5jc3MoImhlaWdodCIsIGVsLm9mZnNldEhlaWdodCk7CiAgICAgICAgICB9LCA1MDApOwogICAgICAgIH0KICAgICAgfQogICAgfSwKICAgIGNsZWFyRXJyb3I6IGZ1bmN0aW9uKGVsKSB7CiAgICAgIHZhciAkZWwgPSAkKGVsKTsKICAgICAgdmFyIGRpc3BsYXkgPSAkZWwuZGF0YSgicmVzdG9yZS1kaXNwbGF5LW1vZGUiKTsKICAgICAgJGVsLmRhdGEoInJlc3RvcmUtZGlzcGxheS1tb2RlIiwgbnVsbCk7CgogICAgICBpZiAoZGlzcGxheSA9PT0gImlubGluZSIgfHwgZGlzcGxheSA9PT0gImlubGluZS1ibG9jayIpIHsKICAgICAgICBpZiAoZGlzcGxheSkKICAgICAgICAgICRlbC5jc3MoImRpc3BsYXkiLCBkaXNwbGF5KTsKICAgICAgICAkKGVsLm5leHRTaWJsaW5nKS5maWx0ZXIoIi5odG1sd2lkZ2V0cy1lcnJvciIpLnJlbW92ZSgpOwogICAgICB9IGVsc2UgaWYgKGRpc3BsYXkgPT09ICJibG9jayIpewogICAgICAgICRlbC5jc3MoInZpc2liaWxpdHkiLCAiaW5oZXJpdCIpOwogICAgICAgICQoZWwubmV4dFNpYmxpbmcpLmZpbHRlcigiLmh0bWx3aWRnZXRzLWVycm9yIikucmVtb3ZlKCk7CiAgICAgIH0KICAgIH0sCiAgICBzaXppbmc6IHt9CiAgfTsKCiAgLy8gQ2FsbGVkIGJ5IHdpZGdldCBiaW5kaW5ncyB0byByZWdpc3RlciBhIG5ldyB0eXBlIG9mIHdpZGdldC4gVGhlIGRlZmluaXRpb24KICAvLyBvYmplY3QgY2FuIGNvbnRhaW4gdGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzOgogIC8vIC0gbmFtZSAocmVxdWlyZWQpIC0gQSBzdHJpbmcgaW5kaWNhdGluZyB0aGUgYmluZGluZyBuYW1lLCB3aGljaCB3aWxsIGJlCiAgLy8gICB1c2VkIGJ5IGRlZmF1bHQgYXMgdGhlIENTUyBjbGFzc25hbWUgdG8gbG9vayBmb3IuCiAgLy8gLSBpbml0aWFsaXplIChvcHRpb25hbCkgLSBBIGZ1bmN0aW9uKGVsKSB0aGF0IHdpbGwgYmUgY2FsbGVkIG9uY2UgcGVyCiAgLy8gICB3aWRnZXQgZWxlbWVudDsgaWYgYSB2YWx1ZSBpcyByZXR1cm5lZCwgaXQgd2lsbCBiZSBwYXNzZWQgYXMgdGhlIHRoaXJkCiAgLy8gICB2YWx1ZSB0byByZW5kZXJWYWx1ZS4KICAvLyAtIHJlbmRlclZhbHVlIChyZXF1aXJlZCkgLSBBIGZ1bmN0aW9uKGVsLCBkYXRhLCBpbml0VmFsdWUpIHRoYXQgd2lsbCBiZQogIC8vICAgY2FsbGVkIHdpdGggZGF0YS4gU3RhdGljIGNvbnRleHRzIHdpbGwgY2F1c2UgdGhpcyB0byBiZSBjYWxsZWQgb25jZSBwZXIKICAvLyAgIGVsZW1lbnQ7IFNoaW55IGFwcHMgd2lsbCBjYXVzZSB0aGlzIHRvIGJlIGNhbGxlZCBtdWx0aXBsZSB0aW1lcyBwZXIKICAvLyAgIGVsZW1lbnQsIGFzIHRoZSBkYXRhIGNoYW5nZXMuCiAgd2luZG93LkhUTUxXaWRnZXRzLndpZGdldCA9IGZ1bmN0aW9uKGRlZmluaXRpb24pIHsKICAgIGlmICghZGVmaW5pdGlvbi5uYW1lKSB7CiAgICAgIHRocm93IG5ldyBFcnJvcigiV2lkZ2V0IG11c3QgaGF2ZSBhIG5hbWUiKTsKICAgIH0KICAgIGlmICghZGVmaW5pdGlvbi50eXBlKSB7CiAgICAgIHRocm93IG5ldyBFcnJvcigiV2lkZ2V0IG11c3QgaGF2ZSBhIHR5cGUiKTsKICAgIH0KICAgIC8vIEN1cnJlbnRseSB3ZSBvbmx5IHN1cHBvcnQgb3V0cHV0IHdpZGdldHMKICAgIGlmIChkZWZpbml0aW9uLnR5cGUgIT09ICJvdXRwdXQiKSB7CiAgICAgIHRocm93IG5ldyBFcnJvcigiVW5yZWNvZ25pemVkIHdpZGdldCB0eXBlICciICsgZGVmaW5pdGlvbi50eXBlICsgIiciKTsKICAgIH0KICAgIC8vIFRPRE86IFZlcmlmeSB0aGF0IC5uYW1lIGlzIGEgdmFsaWQgQ1NTIGNsYXNzbmFtZQogICAgaWYgKCFkZWZpbml0aW9uLnJlbmRlclZhbHVlKSB7CiAgICAgIHRocm93IG5ldyBFcnJvcigiV2lkZ2V0IG11c3QgaGF2ZSBhIHJlbmRlclZhbHVlIGZ1bmN0aW9uIik7CiAgICB9CgogICAgLy8gRm9yIHN0YXRpYyByZW5kZXJpbmcgKG5vbi1TaGlueSksIHVzZSBhIHNpbXBsZSB3aWRnZXQgcmVnaXN0cmF0aW9uCiAgICAvLyBzY2hlbWUuIFdlIGFsc28gdXNlIHRoaXMgc2NoZW1lIGZvciBTaGlueSBhcHBzL2RvY3VtZW50cyB0aGF0IGFsc28KICAgIC8vIGNvbnRhaW4gc3RhdGljIHdpZGdldHMuCiAgICB3aW5kb3cuSFRNTFdpZGdldHMud2lkZ2V0cyA9IHdpbmRvdy5IVE1MV2lkZ2V0cy53aWRnZXRzIHx8IFtdOwogICAgLy8gTWVyZ2UgZGVmYXVsdHMgaW50byB0aGUgZGVmaW5pdGlvbjsgZG9uJ3QgbXV0YXRlIHRoZSBvcmlnaW5hbCBkZWZpbml0aW9uLgogICAgdmFyIHN0YXRpY0JpbmRpbmcgPSBleHRlbmQoe30sIGRlZmF1bHRzLCBkZWZpbml0aW9uKTsKICAgIG92ZXJyaWRlTWV0aG9kKHN0YXRpY0JpbmRpbmcsICJmaW5kIiwgZnVuY3Rpb24oc3VwZXJmdW5jKSB7CiAgICAgIHJldHVybiBmdW5jdGlvbihzY29wZSkgewogICAgICAgIHZhciByZXN1bHRzID0gc3VwZXJmdW5jKHNjb3BlKTsKICAgICAgICAvLyBGaWx0ZXIgb3V0IFNoaW55IG91dHB1dHMsIHdlIG9ubHkgd2FudCB0aGUgc3RhdGljIGtpbmQKICAgICAgICByZXR1cm4gZmlsdGVyQnlDbGFzcyhyZXN1bHRzLCAiaHRtbC13aWRnZXQtb3V0cHV0IiwgZmFsc2UpOwogICAgICB9OwogICAgfSk7CiAgICB3aW5kb3cuSFRNTFdpZGdldHMud2lkZ2V0cy5wdXNoKHN0YXRpY0JpbmRpbmcpOwoKICAgIGlmIChzaGlueU1vZGUpIHsKICAgICAgLy8gU2hpbnkgaXMgcnVubmluZy4gUmVnaXN0ZXIgdGhlIGRlZmluaXRpb24gYXMgYW4gb3V0cHV0IGJpbmRpbmcuCgogICAgICAvLyBNZXJnZSBkZWZhdWx0cyBpbnRvIHRoZSBkZWZpbml0aW9uOyBkb24ndCBtdXRhdGUgdGhlIG9yaWdpbmFsIGRlZmluaXRpb24uCiAgICAgIC8vIFRoZSBiYXNlIG9iamVjdCBpcyBhIFNoaW55IG91dHB1dCBiaW5kaW5nIGlmIHdlJ3JlIHJ1bm5pbmcgaW4gU2hpbnkgbW9kZSwKICAgICAgLy8gb3IgYW4gZW1wdHkgb2JqZWN0IGlmIHdlJ3JlIG5vdC4KICAgICAgdmFyIHNoaW55QmluZGluZyA9IGV4dGVuZChuZXcgU2hpbnkuT3V0cHV0QmluZGluZygpLCBkZWZhdWx0cywgZGVmaW5pdGlvbik7CgogICAgICAvLyBXcmFwIHJlbmRlclZhbHVlIHRvIGhhbmRsZSBpbml0aWFsaXphdGlvbiwgd2hpY2ggdW5mb3J0dW5hdGVseSBpc24ndAogICAgICAvLyBzdXBwb3J0ZWQgbmF0aXZlbHkgYnkgU2hpbnkgYXQgdGhlIHRpbWUgb2YgdGhpcyB3cml0aW5nLgoKICAgICAgLy8gTkI6IHNoaW55QmluZGluZy5pbml0aWFsaXplIG1heSBiZSB1bmRlZmluZWQsIGFzIGl0J3Mgb3B0aW9uYWwuCgogICAgICAvLyBSZW5hbWUgaW5pdGlhbGl6ZSB0byBtYWtlIHN1cmUgaXQgaXNuJ3QgY2FsbGVkIGJ5IGEgZnV0dXJlIHZlcnNpb24KICAgICAgLy8gb2YgU2hpbnkgdGhhdCBkb2VzIHN1cHBvcnQgaW5pdGlhbGl6ZSBkaXJlY3RseS4KICAgICAgc2hpbnlCaW5kaW5nLl9odG1sd2lkZ2V0c19pbml0aWFsaXplID0gc2hpbnlCaW5kaW5nLmluaXRpYWxpemU7CiAgICAgIGRlbGV0ZSBzaGlueUJpbmRpbmcuaW5pdGlhbGl6ZTsKCiAgICAgIG92ZXJyaWRlTWV0aG9kKHNoaW55QmluZGluZywgImZpbmQiLCBmdW5jdGlvbihzdXBlcmZ1bmMpIHsKICAgICAgICByZXR1cm4gZnVuY3Rpb24oc2NvcGUpIHsKCiAgICAgICAgICB2YXIgcmVzdWx0cyA9IHN1cGVyZnVuYyhzY29wZSk7CgogICAgICAgICAgLy8gT25seSByZXR1cm4gZWxlbWVudHMgdGhhdCBhcmUgU2hpbnkgb3V0cHV0cywgbm90IHN0YXRpYyBvbmVzCiAgICAgICAgICB2YXIgZHluYW1pY1Jlc3VsdHMgPSByZXN1bHRzLmZpbHRlcigiLmh0bWwtd2lkZ2V0LW91dHB1dCIpOwoKICAgICAgICAgIC8vIEl0J3MgcG9zc2libGUgdGhhdCB3aGF0ZXZlciBjYXVzZWQgU2hpbnkgdG8gdGhpbmsgdGhlcmUgbWlnaHQgYmUKICAgICAgICAgIC8vIG5ldyBkeW5hbWljIG91dHB1dHMsIGFsc28gY2F1c2VkIHRoZXJlIHRvIGJlIG5ldyBzdGF0aWMgb3V0cHV0cy4KICAgICAgICAgIC8vIFNpbmNlIHRoZXJlIG1pZ2h0IGJlIGxvdHMgb2YgZGlmZmVyZW50IGh0bWx3aWRnZXRzIGJpbmRpbmdzLCB3ZQogICAgICAgICAgLy8gc2NoZWR1bGUgZXhlY3V0aW9uIGZvciBsYXRlci0tbm8gbmVlZCB0byBzdGF0aWNSZW5kZXIgbXVsdGlwbGUKICAgICAgICAgIC8vIHRpbWVzLgogICAgICAgICAgaWYgKHJlc3VsdHMubGVuZ3RoICE9PSBkeW5hbWljUmVzdWx0cy5sZW5ndGgpCiAgICAgICAgICAgIHNjaGVkdWxlU3RhdGljUmVuZGVyKCk7CgogICAgICAgICAgcmV0dXJuIGR5bmFtaWNSZXN1bHRzOwogICAgICAgIH07CiAgICAgIH0pOwoKICAgICAgb3ZlcnJpZGVNZXRob2Qoc2hpbnlCaW5kaW5nLCAicmVuZGVyVmFsdWUiLCBmdW5jdGlvbihzdXBlcmZ1bmMpIHsKICAgICAgICByZXR1cm4gZnVuY3Rpb24oZWwsIGRhdGEpIHsKICAgICAgICAgIC8vIFJlc29sdmUgc3RyaW5ncyBtYXJrZWQgYXMgamF2YXNjcmlwdCBsaXRlcmFscyB0byBvYmplY3RzCiAgICAgICAgICBpZiAoIShkYXRhLmV2YWxzIGluc3RhbmNlb2YgQXJyYXkpKSBkYXRhLmV2YWxzID0gW2RhdGEuZXZhbHNdOwogICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGRhdGEuZXZhbHMgJiYgaSA8IGRhdGEuZXZhbHMubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgd2luZG93LkhUTUxXaWRnZXRzLmV2YWx1YXRlU3RyaW5nTWVtYmVyKGRhdGEueCwgZGF0YS5ldmFsc1tpXSk7CiAgICAgICAgICB9CiAgICAgICAgICBpZiAoIXRoaXMucmVuZGVyT25OdWxsVmFsdWUpIHsKICAgICAgICAgICAgaWYgKGRhdGEueCA9PT0gbnVsbCkgewogICAgICAgICAgICAgIGVsLnN0eWxlLnZpc2liaWxpdHkgPSAiaGlkZGVuIjsKICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgZWwuc3R5bGUudmlzaWJpbGl0eSA9ICJpbmhlcml0IjsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgICAgaWYgKCFlbGVtZW50RGF0YShlbCwgImluaXRpYWxpemVkIikpIHsKICAgICAgICAgICAgaW5pdFNpemluZyhlbCk7CgogICAgICAgICAgICBlbGVtZW50RGF0YShlbCwgImluaXRpYWxpemVkIiwgdHJ1ZSk7CiAgICAgICAgICAgIGlmICh0aGlzLl9odG1sd2lkZ2V0c19pbml0aWFsaXplKSB7CiAgICAgICAgICAgICAgdmFyIHJlc3VsdCA9IHRoaXMuX2h0bWx3aWRnZXRzX2luaXRpYWxpemUoZWwsIGVsLm9mZnNldFdpZHRoLAogICAgICAgICAgICAgICAgZWwub2Zmc2V0SGVpZ2h0KTsKICAgICAgICAgICAgICBlbGVtZW50RGF0YShlbCwgImluaXRfcmVzdWx0IiwgcmVzdWx0KTsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgICAgU2hpbnkucmVuZGVyRGVwZW5kZW5jaWVzKGRhdGEuZGVwcyk7CiAgICAgICAgICBzdXBlcmZ1bmMoZWwsIGRhdGEueCwgZWxlbWVudERhdGEoZWwsICJpbml0X3Jlc3VsdCIpKTsKICAgICAgICB9OwogICAgICB9KTsKCiAgICAgIG92ZXJyaWRlTWV0aG9kKHNoaW55QmluZGluZywgInJlc2l6ZSIsIGZ1bmN0aW9uKHN1cGVyZnVuYykgewogICAgICAgIHJldHVybiBmdW5jdGlvbihlbCwgd2lkdGgsIGhlaWdodCkgewogICAgICAgICAgLy8gU2hpbnkgY2FuIGNhbGwgcmVzaXplIGJlZm9yZSBpbml0aWFsaXplL3JlbmRlclZhbHVlIGhhdmUgYmVlbgogICAgICAgICAgLy8gY2FsbGVkLCB3aGljaCBkb2Vzbid0IG1ha2Ugc2Vuc2UgZm9yIHdpZGdldHMuCiAgICAgICAgICBpZiAoZWxlbWVudERhdGEoZWwsICJpbml0aWFsaXplZCIpKSB7CiAgICAgICAgICAgIHN1cGVyZnVuYyhlbCwgd2lkdGgsIGhlaWdodCwgZWxlbWVudERhdGEoZWwsICJpbml0X3Jlc3VsdCIpKTsKICAgICAgICAgIH0KICAgICAgICB9OwogICAgICB9KTsKCiAgICAgIFNoaW55Lm91dHB1dEJpbmRpbmdzLnJlZ2lzdGVyKHNoaW55QmluZGluZywgc2hpbnlCaW5kaW5nLm5hbWUpOwogICAgfQogIH07CgogIHZhciBzY2hlZHVsZVN0YXRpY1JlbmRlclRpbWVySWQgPSBudWxsOwogIGZ1bmN0aW9uIHNjaGVkdWxlU3RhdGljUmVuZGVyKCkgewogICAgaWYgKCFzY2hlZHVsZVN0YXRpY1JlbmRlclRpbWVySWQpIHsKICAgICAgc2NoZWR1bGVTdGF0aWNSZW5kZXJUaW1lcklkID0gc2V0VGltZW91dChmdW5jdGlvbigpIHsKICAgICAgICBzY2hlZHVsZVN0YXRpY1JlbmRlclRpbWVySWQgPSBudWxsOwogICAgICAgIHdpbmRvdy5IVE1MV2lkZ2V0cy5zdGF0aWNSZW5kZXIoKTsKICAgICAgfSwgMSk7CiAgICB9CiAgfQoKICAvLyBSZW5kZXIgc3RhdGljIHdpZGdldHMgYWZ0ZXIgdGhlIGRvY3VtZW50IGZpbmlzaGVzIGxvYWRpbmcKICAvLyBTdGF0aWNhbGx5IHJlbmRlciBhbGwgZWxlbWVudHMgdGhhdCBhcmUgb2YgdGhpcyB3aWRnZXQncyBjbGFzcwogIHdpbmRvdy5IVE1MV2lkZ2V0cy5zdGF0aWNSZW5kZXIgPSBmdW5jdGlvbigpIHsKICAgIHZhciBiaW5kaW5ncyA9IHdpbmRvdy5IVE1MV2lkZ2V0cy53aWRnZXRzIHx8IFtdOwogICAgZm9yRWFjaChiaW5kaW5ncywgZnVuY3Rpb24oYmluZGluZykgewogICAgICB2YXIgbWF0Y2hlcyA9IGJpbmRpbmcuZmluZChkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpOwogICAgICBmb3JFYWNoKG1hdGNoZXMsIGZ1bmN0aW9uKGVsKSB7CiAgICAgICAgdmFyIHNpemVPYmogPSBpbml0U2l6aW5nKGVsLCBiaW5kaW5nKTsKCiAgICAgICAgaWYgKGhhc0NsYXNzKGVsLCAiaHRtbC13aWRnZXQtc3RhdGljLWJvdW5kIikpCiAgICAgICAgICByZXR1cm47CiAgICAgICAgZWwuY2xhc3NOYW1lID0gZWwuY2xhc3NOYW1lICsgIiBodG1sLXdpZGdldC1zdGF0aWMtYm91bmQiOwoKICAgICAgICB2YXIgaW5pdFJlc3VsdDsKICAgICAgICBpZiAoYmluZGluZy5pbml0aWFsaXplKSB7CiAgICAgICAgICBpbml0UmVzdWx0ID0gYmluZGluZy5pbml0aWFsaXplKGVsLAogICAgICAgICAgICBzaXplT2JqID8gc2l6ZU9iai5nZXRXaWR0aCgpIDogZWwub2Zmc2V0V2lkdGgsCiAgICAgICAgICAgIHNpemVPYmogPyBzaXplT2JqLmdldEhlaWdodCgpIDogZWwub2Zmc2V0SGVpZ2h0CiAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgaWYgKGJpbmRpbmcucmVzaXplKSB7CiAgICAgICAgICB2YXIgbGFzdFNpemUgPSB7fTsKICAgICAgICAgIHZhciByZXNpemVIYW5kbGVyID0gZnVuY3Rpb24oZSkgewogICAgICAgICAgICB2YXIgc2l6ZSA9IHsKICAgICAgICAgICAgICB3OiBzaXplT2JqID8gc2l6ZU9iai5nZXRXaWR0aCgpIDogZWwub2Zmc2V0V2lkdGgsCiAgICAgICAgICAgICAgaDogc2l6ZU9iaiA/IHNpemVPYmouZ2V0SGVpZ2h0KCkgOiBlbC5vZmZzZXRIZWlnaHQKICAgICAgICAgICAgfTsKICAgICAgICAgICAgaWYgKHNpemUudyA9PT0gMCAmJiBzaXplLmggPT09IDApCiAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICBpZiAoc2l6ZS53ID09PSBsYXN0U2l6ZS53ICYmIHNpemUuaCA9PT0gbGFzdFNpemUuaCkKICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgIGxhc3RTaXplID0gc2l6ZTsKICAgICAgICAgICAgYmluZGluZy5yZXNpemUoZWwsIHNpemUudywgc2l6ZS5oLCBpbml0UmVzdWx0KTsKICAgICAgICAgIH07CgogICAgICAgICAgb24od2luZG93LCAicmVzaXplIiwgcmVzaXplSGFuZGxlcik7CgogICAgICAgICAgLy8gVGhpcyBpcyBuZWVkZWQgZm9yIGNhc2VzIHdoZXJlIHdlJ3JlIHJ1bm5pbmcgaW4gYSBTaGlueQogICAgICAgICAgLy8gYXBwLCBidXQgdGhlIHdpZGdldCBpdHNlbGYgaXMgbm90IGEgU2hpbnkgb3V0cHV0LCBidXQKICAgICAgICAgIC8vIHJhdGhlciBhIHNpbXBsZSBzdGF0aWMgd2lkZ2V0LiBPbmUgZXhhbXBsZSBvZiB0aGlzIGlzCiAgICAgICAgICAvLyBhbiBybWFya2Rvd24gZG9jdW1lbnQgdGhhdCBoYXMgcnVudGltZTpzaGlueSBhbmQgd2lkZ2V0CiAgICAgICAgICAvLyB0aGF0IGlzbid0IGluIGEgcmVuZGVyIGZ1bmN0aW9uLiBTaGlueSBvbmx5IGtub3dzIHRvCiAgICAgICAgICAvLyBjYWxsIHJlc2l6ZSBoYW5kbGVycyBmb3IgU2hpbnkgb3V0cHV0cywgbm90IGZvciBzdGF0aWMKICAgICAgICAgIC8vIHdpZGdldHMsIHNvIHdlIGRvIGl0IG91cnNlbHZlcy4KICAgICAgICAgIGlmICh3aW5kb3cualF1ZXJ5KSB7CiAgICAgICAgICAgIHdpbmRvdy5qUXVlcnkoZG9jdW1lbnQpLm9uKCJzaG93biIsIHJlc2l6ZUhhbmRsZXIpOwogICAgICAgICAgICB3aW5kb3cualF1ZXJ5KGRvY3VtZW50KS5vbigiaGlkZGVuIiwgcmVzaXplSGFuZGxlcik7CiAgICAgICAgICB9CgogICAgICAgICAgLy8gVGhpcyBpcyBuZWVkZWQgZm9yIHRoZSBzcGVjaWZpYyBjYXNlIG9mIGlvc2xpZGVzLCB3aGljaAogICAgICAgICAgLy8gZmxpcHMgc2xpZGVzIGJldHdlZW4gZGlzcGxheTpub25lIGFuZCBkaXNwbGF5OmJsb2NrLgogICAgICAgICAgLy8gSWRlYWxseSB3ZSB3b3VsZCBub3QgaGF2ZSB0byBoYXZlIGlvc2xpZGUtc3BlY2lmaWMgY29kZQogICAgICAgICAgLy8gaGVyZSwgYnV0IHJhdGhlciBoYXZlIGlvc2xpZGVzIHJhaXNlIGEgZ2VuZXJpYyBldmVudCwKICAgICAgICAgIC8vIGJ1dCB0aGUgcm1hcmtkb3duIHBhY2thZ2UganVzdCB3ZW50IHRvIENSQU4gc28gdGhlCiAgICAgICAgICAvLyB3aW5kb3cgdG8gZ2V0dGluZyB0aGF0IGZpeGVkIG1heSBiZSBsb25nLgogICAgICAgICAgaWYgKHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKSB7CiAgICAgICAgICAgIC8vIEl0J3MgT0sgdG8gbGltaXQgdGhpcyB0byB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcgogICAgICAgICAgICAvLyBicm93c2VycyBiZWNhdXNlIGlvc2xpZGVzIGl0c2VsZiBvbmx5IHN1cHBvcnRzCiAgICAgICAgICAgIC8vIHN1Y2ggYnJvd3NlcnMuCiAgICAgICAgICAgIG9uKGRvY3VtZW50LCAic2xpZGVlbnRlciIsIHJlc2l6ZUhhbmRsZXIpOwogICAgICAgICAgICBvbihkb2N1bWVudCwgInNsaWRlbGVhdmUiLCByZXNpemVIYW5kbGVyKTsKICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIHZhciBzY3JpcHREYXRhID0gZG9jdW1lbnQucXVlcnlTZWxlY3Rvcigic2NyaXB0W2RhdGEtZm9yPSciICsgZWwuaWQgKyAiJ11bdHlwZT0nYXBwbGljYXRpb24vanNvbiddIik7CiAgICAgICAgaWYgKHNjcmlwdERhdGEpIHsKICAgICAgICAgIHZhciBkYXRhID0gSlNPTi5wYXJzZShzY3JpcHREYXRhLnRleHRDb250ZW50IHx8IHNjcmlwdERhdGEudGV4dCk7CiAgICAgICAgICAvLyBSZXNvbHZlIHN0cmluZ3MgbWFya2VkIGFzIGphdmFzY3JpcHQgbGl0ZXJhbHMgdG8gb2JqZWN0cwogICAgICAgICAgaWYgKCEoZGF0YS5ldmFscyBpbnN0YW5jZW9mIEFycmF5KSkgZGF0YS5ldmFscyA9IFtkYXRhLmV2YWxzXTsKICAgICAgICAgIGZvciAodmFyIGsgPSAwOyBkYXRhLmV2YWxzICYmIGsgPCBkYXRhLmV2YWxzLmxlbmd0aDsgaysrKSB7CiAgICAgICAgICAgIHdpbmRvdy5IVE1MV2lkZ2V0cy5ldmFsdWF0ZVN0cmluZ01lbWJlcihkYXRhLngsIGRhdGEuZXZhbHNba10pOwogICAgICAgICAgfQogICAgICAgICAgYmluZGluZy5yZW5kZXJWYWx1ZShlbCwgZGF0YS54LCBpbml0UmVzdWx0KTsKICAgICAgICB9CiAgICAgIH0pOwogICAgfSk7CiAgfQoKICAvLyBXYWl0IHVudGlsIGFmdGVyIHRoZSBkb2N1bWVudCBoYXMgbG9hZGVkIHRvIHJlbmRlciB0aGUgd2lkZ2V0cy4KICBpZiAoZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcikgewogICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigiRE9NQ29udGVudExvYWRlZCIsIGZ1bmN0aW9uKCkgewogICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJET01Db250ZW50TG9hZGVkIiwgYXJndW1lbnRzLmNhbGxlZSwgZmFsc2UpOwogICAgICB3aW5kb3cuSFRNTFdpZGdldHMuc3RhdGljUmVuZGVyKCk7CiAgICB9LCBmYWxzZSk7CiAgfSBlbHNlIGlmIChkb2N1bWVudC5hdHRhY2hFdmVudCkgewogICAgZG9jdW1lbnQuYXR0YWNoRXZlbnQoIm9ucmVhZHlzdGF0ZWNoYW5nZSIsIGZ1bmN0aW9uKCkgewogICAgICBpZiAoZG9jdW1lbnQucmVhZHlTdGF0ZSA9PT0gImNvbXBsZXRlIikgewogICAgICAgIGRvY3VtZW50LmRldGFjaEV2ZW50KCJvbnJlYWR5c3RhdGVjaGFuZ2UiLCBhcmd1bWVudHMuY2FsbGVlKTsKICAgICAgICB3aW5kb3cuSFRNTFdpZGdldHMuc3RhdGljUmVuZGVyKCk7CiAgICAgIH0KICAgIH0pOwogIH0KCgogIHdpbmRvdy5IVE1MV2lkZ2V0cy5nZXRBdHRhY2htZW50VXJsID0gZnVuY3Rpb24oZGVwbmFtZSwga2V5KSB7CiAgICAvLyBJZiBubyBrZXksIGRlZmF1bHQgdG8gdGhlIGZpcnN0IGl0ZW0KICAgIGlmICh0eXBlb2Yoa2V5KSA9PT0gInVuZGVmaW5lZCIpCiAgICAgIGtleSA9IDE7CgogICAgdmFyIGxpbmsgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChkZXBuYW1lICsgIi0iICsga2V5ICsgIi1hdHRhY2htZW50Iik7CiAgICBpZiAoIWxpbmspIHsKICAgICAgdGhyb3cgbmV3IEVycm9yKCJBdHRhY2htZW50ICIgKyBkZXBuYW1lICsgIi8iICsga2V5ICsgIiBub3QgZm91bmQgaW4gZG9jdW1lbnQiKTsKICAgIH0KICAgIHJldHVybiBsaW5rLmdldEF0dHJpYnV0ZSgiaHJlZiIpOwogIH07CgogIHdpbmRvdy5IVE1MV2lkZ2V0cy5kYXRhZnJhbWVUb0QzID0gZnVuY3Rpb24oZGYpIHsKICAgIHZhciBuYW1lcyA9IFtdOwogICAgdmFyIGxlbmd0aDsKICAgIGZvciAodmFyIG5hbWUgaW4gZGYpIHsKICAgICAgICBpZiAoZGYuaGFzT3duUHJvcGVydHkobmFtZSkpCiAgICAgICAgICAgIG5hbWVzLnB1c2gobmFtZSk7CiAgICAgICAgaWYgKHR5cGVvZihkZltuYW1lXSkgIT09ICJvYmplY3QiIHx8IHR5cGVvZihkZltuYW1lXS5sZW5ndGgpID09PSAidW5kZWZpbmVkIikgewogICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIkFsbCBmaWVsZHMgbXVzdCBiZSBhcnJheXMiKTsKICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZihsZW5ndGgpICE9PSAidW5kZWZpbmVkIiAmJiBsZW5ndGggIT09IGRmW25hbWVdLmxlbmd0aCkgewogICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIkFsbCBmaWVsZHMgbXVzdCBiZSBhcnJheXMgb2YgdGhlIHNhbWUgbGVuZ3RoIik7CiAgICAgICAgfQogICAgICAgIGxlbmd0aCA9IGRmW25hbWVdLmxlbmd0aDsKICAgIH0KICAgIHZhciByZXN1bHRzID0gW107CiAgICB2YXIgaXRlbTsKICAgIGZvciAodmFyIHJvdyA9IDA7IHJvdyA8IGxlbmd0aDsgcm93KyspIHsKICAgICAgICBpdGVtID0ge307CiAgICAgICAgZm9yICh2YXIgY29sID0gMDsgY29sIDwgbmFtZXMubGVuZ3RoOyBjb2wrKykgewogICAgICAgICAgICBpdGVtW25hbWVzW2NvbF1dID0gZGZbbmFtZXNbY29sXV1bcm93XTsKICAgICAgICB9CiAgICAgICAgcmVzdWx0cy5wdXNoKGl0ZW0pOwogICAgfQogICAgcmV0dXJuIHJlc3VsdHM7CiAgfTsKCiAgd2luZG93LkhUTUxXaWRnZXRzLnRyYW5zcG9zZUFycmF5MkQgPSBmdW5jdGlvbihhcnJheSkgewogICAgICB2YXIgbmV3QXJyYXkgPSBhcnJheVswXS5tYXAoZnVuY3Rpb24oY29sLCBpKSB7CiAgICAgICAgICByZXR1cm4gYXJyYXkubWFwKGZ1bmN0aW9uKHJvdykgewogICAgICAgICAgICAgIHJldHVybiByb3dbaV0KICAgICAgICAgIH0pCiAgICAgIH0pOwogICAgICByZXR1cm4gbmV3QXJyYXk7CiAgfTsKICAvLyBTcGxpdCB2YWx1ZSBhdCBzcGxpdENoYXIsIGJ1dCBhbGxvdyBzcGxpdENoYXIgdG8gYmUgZXNjYXBlZAogIC8vIHVzaW5nIGVzY2FwZUNoYXIuIEFueSBvdGhlciBjaGFyYWN0ZXJzIGVzY2FwZWQgYnkgZXNjYXBlQ2hhcgogIC8vIHdpbGwgYmUgaW5jbHVkZWQgYXMgdXN1YWwgKGluY2x1ZGluZyBlc2NhcGVDaGFyIGl0c2VsZikuCiAgZnVuY3Rpb24gc3BsaXRXaXRoRXNjYXBlKHZhbHVlLCBzcGxpdENoYXIsIGVzY2FwZUNoYXIpIHsKICAgIHZhciByZXN1bHRzID0gW107CiAgICB2YXIgZXNjYXBlTW9kZSA9IGZhbHNlOwogICAgdmFyIGN1cnJlbnRSZXN1bHQgPSAiIjsKICAgIGZvciAodmFyIHBvcyA9IDA7IHBvcyA8IHZhbHVlLmxlbmd0aDsgcG9zKyspIHsKICAgICAgaWYgKCFlc2NhcGVNb2RlKSB7CiAgICAgICAgaWYgKHZhbHVlW3Bvc10gPT09IHNwbGl0Q2hhcikgewogICAgICAgICAgcmVzdWx0cy5wdXNoKGN1cnJlbnRSZXN1bHQpOwogICAgICAgICAgY3VycmVudFJlc3VsdCA9ICIiOwogICAgICAgIH0gZWxzZSBpZiAodmFsdWVbcG9zXSA9PT0gZXNjYXBlQ2hhcikgewogICAgICAgICAgZXNjYXBlTW9kZSA9IHRydWU7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGN1cnJlbnRSZXN1bHQgKz0gdmFsdWVbcG9zXTsKICAgICAgICB9CiAgICAgIH0gZWxzZSB7CiAgICAgICAgY3VycmVudFJlc3VsdCArPSB2YWx1ZVtwb3NdOwogICAgICAgIGVzY2FwZU1vZGUgPSBmYWxzZTsKICAgICAgfQogICAgfQogICAgaWYgKGN1cnJlbnRSZXN1bHQgIT09ICIiKSB7CiAgICAgIHJlc3VsdHMucHVzaChjdXJyZW50UmVzdWx0KTsKICAgIH0KICAgIHJldHVybiByZXN1bHRzOwogIH0KICAvLyBGdW5jdGlvbiBhdXRob3JlZCBieSBZaWh1aS9KSiBBbGxhaXJlCiAgd2luZG93LkhUTUxXaWRnZXRzLmV2YWx1YXRlU3RyaW5nTWVtYmVyID0gZnVuY3Rpb24obywgbWVtYmVyKSB7CiAgICB2YXIgcGFydHMgPSBzcGxpdFdpdGhFc2NhcGUobWVtYmVyLCAnLicsICdcXCcpOwogICAgZm9yICh2YXIgaSA9IDAsIGwgPSBwYXJ0cy5sZW5ndGg7IGkgPCBsOyBpKyspIHsKICAgICAgdmFyIHBhcnQgPSBwYXJ0c1tpXTsKICAgICAgLy8gcGFydCBtYXkgYmUgYSBjaGFyYWN0ZXIgb3IgJ251bWVyaWMnIG1lbWJlciBuYW1lCiAgICAgIGlmIChvICE9PSBudWxsICYmIHR5cGVvZiBvID09PSAib2JqZWN0IiAmJiBwYXJ0IGluIG8pIHsKICAgICAgICBpZiAoaSA9PSAobCAtIDEpKSB7IC8vIGlmIHdlIGFyZSBhdCB0aGUgZW5kIG9mIHRoZSBsaW5lIHRoZW4gZXZhbHVsYXRlCiAgICAgICAgICBpZiAodHlwZW9mIG9bcGFydF0gPT09ICJzdHJpbmciKQogICAgICAgICAgICBvW3BhcnRdID0gZXZhbCgiKCIgKyBvW3BhcnRdICsgIikiKTsKICAgICAgICB9IGVsc2UgeyAvLyBvdGhlcndpc2UgY29udGludWUgdG8gbmV4dCBlbWJlZGRlZCBvYmplY3QKICAgICAgICAgIG8gPSBvW3BhcnRdOwogICAgICAgIH0KICAgICAgfQogICAgfQogIH07Cn0pKCk7Cgo="></script>
<script src="data:application/x-javascript;base64,LyohIGpRdWVyeSB2MS4xMS4xIHwgKGMpIDIwMDUsIDIwMTQgalF1ZXJ5IEZvdW5kYXRpb24sIEluYy4gfCBqcXVlcnkub3JnL2xpY2Vuc2UgKi8KIWZ1bmN0aW9uKGEsYil7Im9iamVjdCI9PXR5cGVvZiBtb2R1bGUmJiJvYmplY3QiPT10eXBlb2YgbW9kdWxlLmV4cG9ydHM/bW9kdWxlLmV4cG9ydHM9YS5kb2N1bWVudD9iKGEsITApOmZ1bmN0aW9uKGEpe2lmKCFhLmRvY3VtZW50KXRocm93IG5ldyBFcnJvcigialF1ZXJ5IHJlcXVpcmVzIGEgd2luZG93IHdpdGggYSBkb2N1bWVudCIpO3JldHVybiBiKGEpfTpiKGEpfSgidW5kZWZpbmVkIiE9dHlwZW9mIHdpbmRvdz93aW5kb3c6dGhpcyxmdW5jdGlvbihhLGIpe3ZhciBjPVtdLGQ9Yy5zbGljZSxlPWMuY29uY2F0LGY9Yy5wdXNoLGc9Yy5pbmRleE9mLGg9e30saT1oLnRvU3RyaW5nLGo9aC5oYXNPd25Qcm9wZXJ0eSxrPXt9LGw9IjEuMTEuMSIsbT1mdW5jdGlvbihhLGIpe3JldHVybiBuZXcgbS5mbi5pbml0KGEsYil9LG49L15bXHNcdUZFRkZceEEwXSt8W1xzXHVGRUZGXHhBMF0rJC9nLG89L14tbXMtLyxwPS8tKFtcZGEtel0pL2dpLHE9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gYi50b1VwcGVyQ2FzZSgpfTttLmZuPW0ucHJvdG90eXBlPXtqcXVlcnk6bCxjb25zdHJ1Y3RvcjptLHNlbGVjdG9yOiIiLGxlbmd0aDowLHRvQXJyYXk6ZnVuY3Rpb24oKXtyZXR1cm4gZC5jYWxsKHRoaXMpfSxnZXQ6ZnVuY3Rpb24oYSl7cmV0dXJuIG51bGwhPWE/MD5hP3RoaXNbYSt0aGlzLmxlbmd0aF06dGhpc1thXTpkLmNhbGwodGhpcyl9LHB1c2hTdGFjazpmdW5jdGlvbihhKXt2YXIgYj1tLm1lcmdlKHRoaXMuY29uc3RydWN0b3IoKSxhKTtyZXR1cm4gYi5wcmV2T2JqZWN0PXRoaXMsYi5jb250ZXh0PXRoaXMuY29udGV4dCxifSxlYWNoOmZ1bmN0aW9uKGEsYil7cmV0dXJuIG0uZWFjaCh0aGlzLGEsYil9LG1hcDpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5wdXNoU3RhY2sobS5tYXAodGhpcyxmdW5jdGlvbihiLGMpe3JldHVybiBhLmNhbGwoYixjLGIpfSkpfSxzbGljZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnB1c2hTdGFjayhkLmFwcGx5KHRoaXMsYXJndW1lbnRzKSl9LGZpcnN0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZXEoMCl9LGxhc3Q6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lcSgtMSl9LGVxOmZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMubGVuZ3RoLGM9K2ErKDA+YT9iOjApO3JldHVybiB0aGlzLnB1c2hTdGFjayhjPj0wJiZiPmM/W3RoaXNbY11dOltdKX0sZW5kOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucHJldk9iamVjdHx8dGhpcy5jb25zdHJ1Y3RvcihudWxsKX0scHVzaDpmLHNvcnQ6Yy5zb3J0LHNwbGljZTpjLnNwbGljZX0sbS5leHRlbmQ9bS5mbi5leHRlbmQ9ZnVuY3Rpb24oKXt2YXIgYSxiLGMsZCxlLGYsZz1hcmd1bWVudHNbMF18fHt9LGg9MSxpPWFyZ3VtZW50cy5sZW5ndGgsaj0hMTtmb3IoImJvb2xlYW4iPT10eXBlb2YgZyYmKGo9ZyxnPWFyZ3VtZW50c1toXXx8e30saCsrKSwib2JqZWN0Ij09dHlwZW9mIGd8fG0uaXNGdW5jdGlvbihnKXx8KGc9e30pLGg9PT1pJiYoZz10aGlzLGgtLSk7aT5oO2grKylpZihudWxsIT0oZT1hcmd1bWVudHNbaF0pKWZvcihkIGluIGUpYT1nW2RdLGM9ZVtkXSxnIT09YyYmKGomJmMmJihtLmlzUGxhaW5PYmplY3QoYyl8fChiPW0uaXNBcnJheShjKSkpPyhiPyhiPSExLGY9YSYmbS5pc0FycmF5KGEpP2E6W10pOmY9YSYmbS5pc1BsYWluT2JqZWN0KGEpP2E6e30sZ1tkXT1tLmV4dGVuZChqLGYsYykpOnZvaWQgMCE9PWMmJihnW2RdPWMpKTtyZXR1cm4gZ30sbS5leHRlbmQoe2V4cGFuZG86ImpRdWVyeSIrKGwrTWF0aC5yYW5kb20oKSkucmVwbGFjZSgvXEQvZywiIiksaXNSZWFkeTohMCxlcnJvcjpmdW5jdGlvbihhKXt0aHJvdyBuZXcgRXJyb3IoYSl9LG5vb3A6ZnVuY3Rpb24oKXt9LGlzRnVuY3Rpb246ZnVuY3Rpb24oYSl7cmV0dXJuImZ1bmN0aW9uIj09PW0udHlwZShhKX0saXNBcnJheTpBcnJheS5pc0FycmF5fHxmdW5jdGlvbihhKXtyZXR1cm4iYXJyYXkiPT09bS50eXBlKGEpfSxpc1dpbmRvdzpmdW5jdGlvbihhKXtyZXR1cm4gbnVsbCE9YSYmYT09YS53aW5kb3d9LGlzTnVtZXJpYzpmdW5jdGlvbihhKXtyZXR1cm4hbS5pc0FycmF5KGEpJiZhLXBhcnNlRmxvYXQoYSk+PTB9LGlzRW1wdHlPYmplY3Q6ZnVuY3Rpb24oYSl7dmFyIGI7Zm9yKGIgaW4gYSlyZXR1cm4hMTtyZXR1cm4hMH0saXNQbGFpbk9iamVjdDpmdW5jdGlvbihhKXt2YXIgYjtpZighYXx8Im9iamVjdCIhPT1tLnR5cGUoYSl8fGEubm9kZVR5cGV8fG0uaXNXaW5kb3coYSkpcmV0dXJuITE7dHJ5e2lmKGEuY29uc3RydWN0b3ImJiFqLmNhbGwoYSwiY29uc3RydWN0b3IiKSYmIWouY2FsbChhLmNvbnN0cnVjdG9yLnByb3RvdHlwZSwiaXNQcm90b3R5cGVPZiIpKXJldHVybiExfWNhdGNoKGMpe3JldHVybiExfWlmKGsub3duTGFzdClmb3IoYiBpbiBhKXJldHVybiBqLmNhbGwoYSxiKTtmb3IoYiBpbiBhKTtyZXR1cm4gdm9pZCAwPT09Ynx8ai5jYWxsKGEsYil9LHR5cGU6ZnVuY3Rpb24oYSl7cmV0dXJuIG51bGw9PWE/YSsiIjoib2JqZWN0Ij09dHlwZW9mIGF8fCJmdW5jdGlvbiI9PXR5cGVvZiBhP2hbaS5jYWxsKGEpXXx8Im9iamVjdCI6dHlwZW9mIGF9LGdsb2JhbEV2YWw6ZnVuY3Rpb24oYil7YiYmbS50cmltKGIpJiYoYS5leGVjU2NyaXB0fHxmdW5jdGlvbihiKXthLmV2YWwuY2FsbChhLGIpfSkoYil9LGNhbWVsQ2FzZTpmdW5jdGlvbihhKXtyZXR1cm4gYS5yZXBsYWNlKG8sIm1zLSIpLnJlcGxhY2UocCxxKX0sbm9kZU5hbWU6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gYS5ub2RlTmFtZSYmYS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpPT09Yi50b0xvd2VyQ2FzZSgpfSxlYWNoOmZ1bmN0aW9uKGEsYixjKXt2YXIgZCxlPTAsZj1hLmxlbmd0aCxnPXIoYSk7aWYoYyl7aWYoZyl7Zm9yKDtmPmU7ZSsrKWlmKGQ9Yi5hcHBseShhW2VdLGMpLGQ9PT0hMSlicmVha31lbHNlIGZvcihlIGluIGEpaWYoZD1iLmFwcGx5KGFbZV0sYyksZD09PSExKWJyZWFrfWVsc2UgaWYoZyl7Zm9yKDtmPmU7ZSsrKWlmKGQ9Yi5jYWxsKGFbZV0sZSxhW2VdKSxkPT09ITEpYnJlYWt9ZWxzZSBmb3IoZSBpbiBhKWlmKGQ9Yi5jYWxsKGFbZV0sZSxhW2VdKSxkPT09ITEpYnJlYWs7cmV0dXJuIGF9LHRyaW06ZnVuY3Rpb24oYSl7cmV0dXJuIG51bGw9PWE/IiI6KGErIiIpLnJlcGxhY2UobiwiIil9LG1ha2VBcnJheTpmdW5jdGlvbihhLGIpe3ZhciBjPWJ8fFtdO3JldHVybiBudWxsIT1hJiYocihPYmplY3QoYSkpP20ubWVyZ2UoYywic3RyaW5nIj09dHlwZW9mIGE/W2FdOmEpOmYuY2FsbChjLGEpKSxjfSxpbkFycmF5OmZ1bmN0aW9uKGEsYixjKXt2YXIgZDtpZihiKXtpZihnKXJldHVybiBnLmNhbGwoYixhLGMpO2ZvcihkPWIubGVuZ3RoLGM9Yz8wPmM/TWF0aC5tYXgoMCxkK2MpOmM6MDtkPmM7YysrKWlmKGMgaW4gYiYmYltjXT09PWEpcmV0dXJuIGN9cmV0dXJuLTF9LG1lcmdlOmZ1bmN0aW9uKGEsYil7dmFyIGM9K2IubGVuZ3RoLGQ9MCxlPWEubGVuZ3RoO3doaWxlKGM+ZClhW2UrK109YltkKytdO2lmKGMhPT1jKXdoaWxlKHZvaWQgMCE9PWJbZF0pYVtlKytdPWJbZCsrXTtyZXR1cm4gYS5sZW5ndGg9ZSxhfSxncmVwOmZ1bmN0aW9uKGEsYixjKXtmb3IodmFyIGQsZT1bXSxmPTAsZz1hLmxlbmd0aCxoPSFjO2c+ZjtmKyspZD0hYihhW2ZdLGYpLGQhPT1oJiZlLnB1c2goYVtmXSk7cmV0dXJuIGV9LG1hcDpmdW5jdGlvbihhLGIsYyl7dmFyIGQsZj0wLGc9YS5sZW5ndGgsaD1yKGEpLGk9W107aWYoaClmb3IoO2c+ZjtmKyspZD1iKGFbZl0sZixjKSxudWxsIT1kJiZpLnB1c2goZCk7ZWxzZSBmb3IoZiBpbiBhKWQ9YihhW2ZdLGYsYyksbnVsbCE9ZCYmaS5wdXNoKGQpO3JldHVybiBlLmFwcGx5KFtdLGkpfSxndWlkOjEscHJveHk6ZnVuY3Rpb24oYSxiKXt2YXIgYyxlLGY7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBiJiYoZj1hW2JdLGI9YSxhPWYpLG0uaXNGdW5jdGlvbihhKT8oYz1kLmNhbGwoYXJndW1lbnRzLDIpLGU9ZnVuY3Rpb24oKXtyZXR1cm4gYS5hcHBseShifHx0aGlzLGMuY29uY2F0KGQuY2FsbChhcmd1bWVudHMpKSl9LGUuZ3VpZD1hLmd1aWQ9YS5ndWlkfHxtLmd1aWQrKyxlKTp2b2lkIDB9LG5vdzpmdW5jdGlvbigpe3JldHVybituZXcgRGF0ZX0sc3VwcG9ydDprfSksbS5lYWNoKCJCb29sZWFuIE51bWJlciBTdHJpbmcgRnVuY3Rpb24gQXJyYXkgRGF0ZSBSZWdFeHAgT2JqZWN0IEVycm9yIi5zcGxpdCgiICIpLGZ1bmN0aW9uKGEsYil7aFsiW29iamVjdCAiK2IrIl0iXT1iLnRvTG93ZXJDYXNlKCl9KTtmdW5jdGlvbiByKGEpe3ZhciBiPWEubGVuZ3RoLGM9bS50eXBlKGEpO3JldHVybiJmdW5jdGlvbiI9PT1jfHxtLmlzV2luZG93KGEpPyExOjE9PT1hLm5vZGVUeXBlJiZiPyEwOiJhcnJheSI9PT1jfHwwPT09Ynx8Im51bWJlciI9PXR5cGVvZiBiJiZiPjAmJmItMSBpbiBhfXZhciBzPWZ1bmN0aW9uKGEpe3ZhciBiLGMsZCxlLGYsZyxoLGksaixrLGwsbSxuLG8scCxxLHIscyx0LHU9InNpenpsZSIrLW5ldyBEYXRlLHY9YS5kb2N1bWVudCx3PTAseD0wLHk9Z2IoKSx6PWdiKCksQT1nYigpLEI9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gYT09PWImJihsPSEwKSwwfSxDPSJ1bmRlZmluZWQiLEQ9MTw8MzEsRT17fS5oYXNPd25Qcm9wZXJ0eSxGPVtdLEc9Ri5wb3AsSD1GLnB1c2gsST1GLnB1c2gsSj1GLnNsaWNlLEs9Ri5pbmRleE9mfHxmdW5jdGlvbihhKXtmb3IodmFyIGI9MCxjPXRoaXMubGVuZ3RoO2M+YjtiKyspaWYodGhpc1tiXT09PWEpcmV0dXJuIGI7cmV0dXJuLTF9LEw9ImNoZWNrZWR8c2VsZWN0ZWR8YXN5bmN8YXV0b2ZvY3VzfGF1dG9wbGF5fGNvbnRyb2xzfGRlZmVyfGRpc2FibGVkfGhpZGRlbnxpc21hcHxsb29wfG11bHRpcGxlfG9wZW58cmVhZG9ubHl8cmVxdWlyZWR8c2NvcGVkIixNPSJbXFx4MjBcXHRcXHJcXG5cXGZdIixOPSIoPzpcXFxcLnxbXFx3LV18W15cXHgwMC1cXHhhMF0pKyIsTz1OLnJlcGxhY2UoInciLCJ3IyIpLFA9IlxcWyIrTSsiKigiK04rIikoPzoiK00rIiooWypeJHwhfl0/PSkiK00rIiooPzonKCg/OlxcXFwufFteXFxcXCddKSopJ3xcIigoPzpcXFxcLnxbXlxcXFxcIl0pKilcInwoIitPKyIpKXwpIitNKyIqXFxdIixRPSI6KCIrTisiKSg/OlxcKCgoJygoPzpcXFxcLnxbXlxcXFwnXSkqKSd8XCIoKD86XFxcXC58W15cXFxcXCJdKSopXCIpfCgoPzpcXFxcLnxbXlxcXFwoKVtcXF1dfCIrUCsiKSopfC4qKVxcKXwpIixSPW5ldyBSZWdFeHAoIl4iK00rIit8KCg/Ol58W15cXFxcXSkoPzpcXFxcLikqKSIrTSsiKyQiLCJnIiksUz1uZXcgUmVnRXhwKCJeIitNKyIqLCIrTSsiKiIpLFQ9bmV3IFJlZ0V4cCgiXiIrTSsiKihbPit+XXwiK00rIikiK00rIioiKSxVPW5ldyBSZWdFeHAoIj0iK00rIiooW15cXF0nXCJdKj8pIitNKyIqXFxdIiwiZyIpLFY9bmV3IFJlZ0V4cChRKSxXPW5ldyBSZWdFeHAoIl4iK08rIiQiKSxYPXtJRDpuZXcgUmVnRXhwKCJeIygiK04rIikiKSxDTEFTUzpuZXcgUmVnRXhwKCJeXFwuKCIrTisiKSIpLFRBRzpuZXcgUmVnRXhwKCJeKCIrTi5yZXBsYWNlKCJ3IiwidyoiKSsiKSIpLEFUVFI6bmV3IFJlZ0V4cCgiXiIrUCksUFNFVURPOm5ldyBSZWdFeHAoIl4iK1EpLENISUxEOm5ldyBSZWdFeHAoIl46KG9ubHl8Zmlyc3R8bGFzdHxudGh8bnRoLWxhc3QpLShjaGlsZHxvZi10eXBlKSg/OlxcKCIrTSsiKihldmVufG9kZHwoKFsrLV18KShcXGQqKW58KSIrTSsiKig/OihbKy1dfCkiK00rIiooXFxkKyl8KSkiK00rIipcXCl8KSIsImkiKSxib29sOm5ldyBSZWdFeHAoIl4oPzoiK0wrIikkIiwiaSIpLG5lZWRzQ29udGV4dDpuZXcgUmVnRXhwKCJeIitNKyIqWz4rfl18OihldmVufG9kZHxlcXxndHxsdHxudGh8Zmlyc3R8bGFzdCkoPzpcXCgiK00rIiooKD86LVxcZCk/XFxkKikiK00rIipcXCl8KSg/PVteLV18JCkiLCJpIil9LFk9L14oPzppbnB1dHxzZWxlY3R8dGV4dGFyZWF8YnV0dG9uKSQvaSxaPS9eaFxkJC9pLCQ9L15bXntdK1x7XHMqXFtuYXRpdmUgXHcvLF89L14oPzojKFtcdy1dKyl8KFx3Kyl8XC4oW1x3LV0rKSkkLyxhYj0vWyt+XS8sYmI9Lyd8XFwvZyxjYj1uZXcgUmVnRXhwKCJcXFxcKFtcXGRhLWZdezEsNn0iK00rIj98KCIrTSsiKXwuKSIsImlnIiksZGI9ZnVuY3Rpb24oYSxiLGMpe3ZhciBkPSIweCIrYi02NTUzNjtyZXR1cm4gZCE9PWR8fGM/YjowPmQ/U3RyaW5nLmZyb21DaGFyQ29kZShkKzY1NTM2KTpTdHJpbmcuZnJvbUNoYXJDb2RlKGQ+PjEwfDU1Mjk2LDEwMjMmZHw1NjMyMCl9O3RyeXtJLmFwcGx5KEY9Si5jYWxsKHYuY2hpbGROb2Rlcyksdi5jaGlsZE5vZGVzKSxGW3YuY2hpbGROb2Rlcy5sZW5ndGhdLm5vZGVUeXBlfWNhdGNoKGViKXtJPXthcHBseTpGLmxlbmd0aD9mdW5jdGlvbihhLGIpe0guYXBwbHkoYSxKLmNhbGwoYikpfTpmdW5jdGlvbihhLGIpe3ZhciBjPWEubGVuZ3RoLGQ9MDt3aGlsZShhW2MrK109YltkKytdKTthLmxlbmd0aD1jLTF9fX1mdW5jdGlvbiBmYihhLGIsZCxlKXt2YXIgZixoLGosayxsLG8scixzLHcseDtpZigoYj9iLm93bmVyRG9jdW1lbnR8fGI6dikhPT1uJiZtKGIpLGI9Ynx8bixkPWR8fFtdLCFhfHwic3RyaW5nIiE9dHlwZW9mIGEpcmV0dXJuIGQ7aWYoMSE9PShrPWIubm9kZVR5cGUpJiY5IT09aylyZXR1cm5bXTtpZihwJiYhZSl7aWYoZj1fLmV4ZWMoYSkpaWYoaj1mWzFdKXtpZig5PT09ayl7aWYoaD1iLmdldEVsZW1lbnRCeUlkKGopLCFofHwhaC5wYXJlbnROb2RlKXJldHVybiBkO2lmKGguaWQ9PT1qKXJldHVybiBkLnB1c2goaCksZH1lbHNlIGlmKGIub3duZXJEb2N1bWVudCYmKGg9Yi5vd25lckRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGopKSYmdChiLGgpJiZoLmlkPT09ailyZXR1cm4gZC5wdXNoKGgpLGR9ZWxzZXtpZihmWzJdKXJldHVybiBJLmFwcGx5KGQsYi5nZXRFbGVtZW50c0J5VGFnTmFtZShhKSksZDtpZigoaj1mWzNdKSYmYy5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lJiZiLmdldEVsZW1lbnRzQnlDbGFzc05hbWUpcmV0dXJuIEkuYXBwbHkoZCxiLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoaikpLGR9aWYoYy5xc2EmJighcXx8IXEudGVzdChhKSkpe2lmKHM9cj11LHc9Yix4PTk9PT1rJiZhLDE9PT1rJiYib2JqZWN0IiE9PWIubm9kZU5hbWUudG9Mb3dlckNhc2UoKSl7bz1nKGEpLChyPWIuZ2V0QXR0cmlidXRlKCJpZCIpKT9zPXIucmVwbGFjZShiYiwiXFwkJiIpOmIuc2V0QXR0cmlidXRlKCJpZCIscykscz0iW2lkPSciK3MrIiddICIsbD1vLmxlbmd0aDt3aGlsZShsLS0pb1tsXT1zK3FiKG9bbF0pO3c9YWIudGVzdChhKSYmb2IoYi5wYXJlbnROb2RlKXx8Yix4PW8uam9pbigiLCIpfWlmKHgpdHJ5e3JldHVybiBJLmFwcGx5KGQsdy5xdWVyeVNlbGVjdG9yQWxsKHgpKSxkfWNhdGNoKHkpe31maW5hbGx5e3J8fGIucmVtb3ZlQXR0cmlidXRlKCJpZCIpfX19cmV0dXJuIGkoYS5yZXBsYWNlKFIsIiQxIiksYixkLGUpfWZ1bmN0aW9uIGdiKCl7dmFyIGE9W107ZnVuY3Rpb24gYihjLGUpe3JldHVybiBhLnB1c2goYysiICIpPmQuY2FjaGVMZW5ndGgmJmRlbGV0ZSBiW2Euc2hpZnQoKV0sYltjKyIgIl09ZX1yZXR1cm4gYn1mdW5jdGlvbiBoYihhKXtyZXR1cm4gYVt1XT0hMCxhfWZ1bmN0aW9uIGliKGEpe3ZhciBiPW4uY3JlYXRlRWxlbWVudCgiZGl2Iik7dHJ5e3JldHVybiEhYShiKX1jYXRjaChjKXtyZXR1cm4hMX1maW5hbGx5e2IucGFyZW50Tm9kZSYmYi5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGIpLGI9bnVsbH19ZnVuY3Rpb24gamIoYSxiKXt2YXIgYz1hLnNwbGl0KCJ8IiksZT1hLmxlbmd0aDt3aGlsZShlLS0pZC5hdHRySGFuZGxlW2NbZV1dPWJ9ZnVuY3Rpb24ga2IoYSxiKXt2YXIgYz1iJiZhLGQ9YyYmMT09PWEubm9kZVR5cGUmJjE9PT1iLm5vZGVUeXBlJiYofmIuc291cmNlSW5kZXh8fEQpLSh+YS5zb3VyY2VJbmRleHx8RCk7aWYoZClyZXR1cm4gZDtpZihjKXdoaWxlKGM9Yy5uZXh0U2libGluZylpZihjPT09YilyZXR1cm4tMTtyZXR1cm4gYT8xOi0xfWZ1bmN0aW9uIGxiKGEpe3JldHVybiBmdW5jdGlvbihiKXt2YXIgYz1iLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7cmV0dXJuImlucHV0Ij09PWMmJmIudHlwZT09PWF9fWZ1bmN0aW9uIG1iKGEpe3JldHVybiBmdW5jdGlvbihiKXt2YXIgYz1iLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7cmV0dXJuKCJpbnB1dCI9PT1jfHwiYnV0dG9uIj09PWMpJiZiLnR5cGU9PT1hfX1mdW5jdGlvbiBuYihhKXtyZXR1cm4gaGIoZnVuY3Rpb24oYil7cmV0dXJuIGI9K2IsaGIoZnVuY3Rpb24oYyxkKXt2YXIgZSxmPWEoW10sYy5sZW5ndGgsYiksZz1mLmxlbmd0aDt3aGlsZShnLS0pY1tlPWZbZ11dJiYoY1tlXT0hKGRbZV09Y1tlXSkpfSl9KX1mdW5jdGlvbiBvYihhKXtyZXR1cm4gYSYmdHlwZW9mIGEuZ2V0RWxlbWVudHNCeVRhZ05hbWUhPT1DJiZhfWM9ZmIuc3VwcG9ydD17fSxmPWZiLmlzWE1MPWZ1bmN0aW9uKGEpe3ZhciBiPWEmJihhLm93bmVyRG9jdW1lbnR8fGEpLmRvY3VtZW50RWxlbWVudDtyZXR1cm4gYj8iSFRNTCIhPT1iLm5vZGVOYW1lOiExfSxtPWZiLnNldERvY3VtZW50PWZ1bmN0aW9uKGEpe3ZhciBiLGU9YT9hLm93bmVyRG9jdW1lbnR8fGE6dixnPWUuZGVmYXVsdFZpZXc7cmV0dXJuIGUhPT1uJiY5PT09ZS5ub2RlVHlwZSYmZS5kb2N1bWVudEVsZW1lbnQ/KG49ZSxvPWUuZG9jdW1lbnRFbGVtZW50LHA9IWYoZSksZyYmZyE9PWcudG9wJiYoZy5hZGRFdmVudExpc3RlbmVyP2cuYWRkRXZlbnRMaXN0ZW5lcigidW5sb2FkIixmdW5jdGlvbigpe20oKX0sITEpOmcuYXR0YWNoRXZlbnQmJmcuYXR0YWNoRXZlbnQoIm9udW5sb2FkIixmdW5jdGlvbigpe20oKX0pKSxjLmF0dHJpYnV0ZXM9aWIoZnVuY3Rpb24oYSl7cmV0dXJuIGEuY2xhc3NOYW1lPSJpIiwhYS5nZXRBdHRyaWJ1dGUoImNsYXNzTmFtZSIpfSksYy5nZXRFbGVtZW50c0J5VGFnTmFtZT1pYihmdW5jdGlvbihhKXtyZXR1cm4gYS5hcHBlbmRDaGlsZChlLmNyZWF0ZUNvbW1lbnQoIiIpKSwhYS5nZXRFbGVtZW50c0J5VGFnTmFtZSgiKiIpLmxlbmd0aH0pLGMuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZT0kLnRlc3QoZS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKSYmaWIoZnVuY3Rpb24oYSl7cmV0dXJuIGEuaW5uZXJIVE1MPSI8ZGl2IGNsYXNzPSdhJz48L2Rpdj48ZGl2IGNsYXNzPSdhIGknPjwvZGl2PiIsYS5maXJzdENoaWxkLmNsYXNzTmFtZT0iaSIsMj09PWEuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgiaSIpLmxlbmd0aH0pLGMuZ2V0QnlJZD1pYihmdW5jdGlvbihhKXtyZXR1cm4gby5hcHBlbmRDaGlsZChhKS5pZD11LCFlLmdldEVsZW1lbnRzQnlOYW1lfHwhZS5nZXRFbGVtZW50c0J5TmFtZSh1KS5sZW5ndGh9KSxjLmdldEJ5SWQ/KGQuZmluZC5JRD1mdW5jdGlvbihhLGIpe2lmKHR5cGVvZiBiLmdldEVsZW1lbnRCeUlkIT09QyYmcCl7dmFyIGM9Yi5nZXRFbGVtZW50QnlJZChhKTtyZXR1cm4gYyYmYy5wYXJlbnROb2RlP1tjXTpbXX19LGQuZmlsdGVyLklEPWZ1bmN0aW9uKGEpe3ZhciBiPWEucmVwbGFjZShjYixkYik7cmV0dXJuIGZ1bmN0aW9uKGEpe3JldHVybiBhLmdldEF0dHJpYnV0ZSgiaWQiKT09PWJ9fSk6KGRlbGV0ZSBkLmZpbmQuSUQsZC5maWx0ZXIuSUQ9ZnVuY3Rpb24oYSl7dmFyIGI9YS5yZXBsYWNlKGNiLGRiKTtyZXR1cm4gZnVuY3Rpb24oYSl7dmFyIGM9dHlwZW9mIGEuZ2V0QXR0cmlidXRlTm9kZSE9PUMmJmEuZ2V0QXR0cmlidXRlTm9kZSgiaWQiKTtyZXR1cm4gYyYmYy52YWx1ZT09PWJ9fSksZC5maW5kLlRBRz1jLmdldEVsZW1lbnRzQnlUYWdOYW1lP2Z1bmN0aW9uKGEsYil7cmV0dXJuIHR5cGVvZiBiLmdldEVsZW1lbnRzQnlUYWdOYW1lIT09Qz9iLmdldEVsZW1lbnRzQnlUYWdOYW1lKGEpOnZvaWQgMH06ZnVuY3Rpb24oYSxiKXt2YXIgYyxkPVtdLGU9MCxmPWIuZ2V0RWxlbWVudHNCeVRhZ05hbWUoYSk7aWYoIioiPT09YSl7d2hpbGUoYz1mW2UrK10pMT09PWMubm9kZVR5cGUmJmQucHVzaChjKTtyZXR1cm4gZH1yZXR1cm4gZn0sZC5maW5kLkNMQVNTPWMuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSYmZnVuY3Rpb24oYSxiKXtyZXR1cm4gdHlwZW9mIGIuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSE9PUMmJnA/Yi5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKGEpOnZvaWQgMH0scj1bXSxxPVtdLChjLnFzYT0kLnRlc3QoZS5xdWVyeVNlbGVjdG9yQWxsKSkmJihpYihmdW5jdGlvbihhKXthLmlubmVySFRNTD0iPHNlbGVjdCBtc2FsbG93Y2xpcD0nJz48b3B0aW9uIHNlbGVjdGVkPScnPjwvb3B0aW9uPjwvc2VsZWN0PiIsYS5xdWVyeVNlbGVjdG9yQWxsKCJbbXNhbGxvd2NsaXBePScnXSIpLmxlbmd0aCYmcS5wdXNoKCJbKl4kXT0iK00rIiooPzonJ3xcIlwiKSIpLGEucXVlcnlTZWxlY3RvckFsbCgiW3NlbGVjdGVkXSIpLmxlbmd0aHx8cS5wdXNoKCJcXFsiK00rIiooPzp2YWx1ZXwiK0wrIikiKSxhLnF1ZXJ5U2VsZWN0b3JBbGwoIjpjaGVja2VkIikubGVuZ3RofHxxLnB1c2goIjpjaGVja2VkIil9KSxpYihmdW5jdGlvbihhKXt2YXIgYj1lLmNyZWF0ZUVsZW1lbnQoImlucHV0Iik7Yi5zZXRBdHRyaWJ1dGUoInR5cGUiLCJoaWRkZW4iKSxhLmFwcGVuZENoaWxkKGIpLnNldEF0dHJpYnV0ZSgibmFtZSIsIkQiKSxhLnF1ZXJ5U2VsZWN0b3JBbGwoIltuYW1lPWRdIikubGVuZ3RoJiZxLnB1c2goIm5hbWUiK00rIipbKl4kfCF+XT89IiksYS5xdWVyeVNlbGVjdG9yQWxsKCI6ZW5hYmxlZCIpLmxlbmd0aHx8cS5wdXNoKCI6ZW5hYmxlZCIsIjpkaXNhYmxlZCIpLGEucXVlcnlTZWxlY3RvckFsbCgiKiw6eCIpLHEucHVzaCgiLC4qOiIpfSkpLChjLm1hdGNoZXNTZWxlY3Rvcj0kLnRlc3Qocz1vLm1hdGNoZXN8fG8ud2Via2l0TWF0Y2hlc1NlbGVjdG9yfHxvLm1vek1hdGNoZXNTZWxlY3Rvcnx8by5vTWF0Y2hlc1NlbGVjdG9yfHxvLm1zTWF0Y2hlc1NlbGVjdG9yKSkmJmliKGZ1bmN0aW9uKGEpe2MuZGlzY29ubmVjdGVkTWF0Y2g9cy5jYWxsKGEsImRpdiIpLHMuY2FsbChhLCJbcyE9JyddOngiKSxyLnB1c2goIiE9IixRKX0pLHE9cS5sZW5ndGgmJm5ldyBSZWdFeHAocS5qb2luKCJ8IikpLHI9ci5sZW5ndGgmJm5ldyBSZWdFeHAoci5qb2luKCJ8IikpLGI9JC50ZXN0KG8uY29tcGFyZURvY3VtZW50UG9zaXRpb24pLHQ9Ynx8JC50ZXN0KG8uY29udGFpbnMpP2Z1bmN0aW9uKGEsYil7dmFyIGM9OT09PWEubm9kZVR5cGU/YS5kb2N1bWVudEVsZW1lbnQ6YSxkPWImJmIucGFyZW50Tm9kZTtyZXR1cm4gYT09PWR8fCEoIWR8fDEhPT1kLm5vZGVUeXBlfHwhKGMuY29udGFpbnM/Yy5jb250YWlucyhkKTphLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uJiYxNiZhLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKGQpKSl9OmZ1bmN0aW9uKGEsYil7aWYoYil3aGlsZShiPWIucGFyZW50Tm9kZSlpZihiPT09YSlyZXR1cm4hMDtyZXR1cm4hMX0sQj1iP2Z1bmN0aW9uKGEsYil7aWYoYT09PWIpcmV0dXJuIGw9ITAsMDt2YXIgZD0hYS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbi0hYi5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbjtyZXR1cm4gZD9kOihkPShhLm93bmVyRG9jdW1lbnR8fGEpPT09KGIub3duZXJEb2N1bWVudHx8Yik/YS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbihiKToxLDEmZHx8IWMuc29ydERldGFjaGVkJiZiLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKGEpPT09ZD9hPT09ZXx8YS5vd25lckRvY3VtZW50PT09diYmdCh2LGEpPy0xOmI9PT1lfHxiLm93bmVyRG9jdW1lbnQ9PT12JiZ0KHYsYik/MTprP0suY2FsbChrLGEpLUsuY2FsbChrLGIpOjA6NCZkPy0xOjEpfTpmdW5jdGlvbihhLGIpe2lmKGE9PT1iKXJldHVybiBsPSEwLDA7dmFyIGMsZD0wLGY9YS5wYXJlbnROb2RlLGc9Yi5wYXJlbnROb2RlLGg9W2FdLGk9W2JdO2lmKCFmfHwhZylyZXR1cm4gYT09PWU/LTE6Yj09PWU/MTpmPy0xOmc/MTprP0suY2FsbChrLGEpLUsuY2FsbChrLGIpOjA7aWYoZj09PWcpcmV0dXJuIGtiKGEsYik7Yz1hO3doaWxlKGM9Yy5wYXJlbnROb2RlKWgudW5zaGlmdChjKTtjPWI7d2hpbGUoYz1jLnBhcmVudE5vZGUpaS51bnNoaWZ0KGMpO3doaWxlKGhbZF09PT1pW2RdKWQrKztyZXR1cm4gZD9rYihoW2RdLGlbZF0pOmhbZF09PT12Py0xOmlbZF09PT12PzE6MH0sZSk6bn0sZmIubWF0Y2hlcz1mdW5jdGlvbihhLGIpe3JldHVybiBmYihhLG51bGwsbnVsbCxiKX0sZmIubWF0Y2hlc1NlbGVjdG9yPWZ1bmN0aW9uKGEsYil7aWYoKGEub3duZXJEb2N1bWVudHx8YSkhPT1uJiZtKGEpLGI9Yi5yZXBsYWNlKFUsIj0nJDEnXSIpLCEoIWMubWF0Y2hlc1NlbGVjdG9yfHwhcHx8ciYmci50ZXN0KGIpfHxxJiZxLnRlc3QoYikpKXRyeXt2YXIgZD1zLmNhbGwoYSxiKTtpZihkfHxjLmRpc2Nvbm5lY3RlZE1hdGNofHxhLmRvY3VtZW50JiYxMSE9PWEuZG9jdW1lbnQubm9kZVR5cGUpcmV0dXJuIGR9Y2F0Y2goZSl7fXJldHVybiBmYihiLG4sbnVsbCxbYV0pLmxlbmd0aD4wfSxmYi5jb250YWlucz1mdW5jdGlvbihhLGIpe3JldHVybihhLm93bmVyRG9jdW1lbnR8fGEpIT09biYmbShhKSx0KGEsYil9LGZiLmF0dHI9ZnVuY3Rpb24oYSxiKXsoYS5vd25lckRvY3VtZW50fHxhKSE9PW4mJm0oYSk7dmFyIGU9ZC5hdHRySGFuZGxlW2IudG9Mb3dlckNhc2UoKV0sZj1lJiZFLmNhbGwoZC5hdHRySGFuZGxlLGIudG9Mb3dlckNhc2UoKSk/ZShhLGIsIXApOnZvaWQgMDtyZXR1cm4gdm9pZCAwIT09Zj9mOmMuYXR0cmlidXRlc3x8IXA/YS5nZXRBdHRyaWJ1dGUoYik6KGY9YS5nZXRBdHRyaWJ1dGVOb2RlKGIpKSYmZi5zcGVjaWZpZWQ/Zi52YWx1ZTpudWxsfSxmYi5lcnJvcj1mdW5jdGlvbihhKXt0aHJvdyBuZXcgRXJyb3IoIlN5bnRheCBlcnJvciwgdW5yZWNvZ25pemVkIGV4cHJlc3Npb246ICIrYSl9LGZiLnVuaXF1ZVNvcnQ9ZnVuY3Rpb24oYSl7dmFyIGIsZD1bXSxlPTAsZj0wO2lmKGw9IWMuZGV0ZWN0RHVwbGljYXRlcyxrPSFjLnNvcnRTdGFibGUmJmEuc2xpY2UoMCksYS5zb3J0KEIpLGwpe3doaWxlKGI9YVtmKytdKWI9PT1hW2ZdJiYoZT1kLnB1c2goZikpO3doaWxlKGUtLSlhLnNwbGljZShkW2VdLDEpfXJldHVybiBrPW51bGwsYX0sZT1mYi5nZXRUZXh0PWZ1bmN0aW9uKGEpe3ZhciBiLGM9IiIsZD0wLGY9YS5ub2RlVHlwZTtpZihmKXtpZigxPT09Znx8OT09PWZ8fDExPT09Zil7aWYoInN0cmluZyI9PXR5cGVvZiBhLnRleHRDb250ZW50KXJldHVybiBhLnRleHRDb250ZW50O2ZvcihhPWEuZmlyc3RDaGlsZDthO2E9YS5uZXh0U2libGluZyljKz1lKGEpfWVsc2UgaWYoMz09PWZ8fDQ9PT1mKXJldHVybiBhLm5vZGVWYWx1ZX1lbHNlIHdoaWxlKGI9YVtkKytdKWMrPWUoYik7cmV0dXJuIGN9LGQ9ZmIuc2VsZWN0b3JzPXtjYWNoZUxlbmd0aDo1MCxjcmVhdGVQc2V1ZG86aGIsbWF0Y2g6WCxhdHRySGFuZGxlOnt9LGZpbmQ6e30scmVsYXRpdmU6eyI+Ijp7ZGlyOiJwYXJlbnROb2RlIixmaXJzdDohMH0sIiAiOntkaXI6InBhcmVudE5vZGUifSwiKyI6e2RpcjoicHJldmlvdXNTaWJsaW5nIixmaXJzdDohMH0sIn4iOntkaXI6InByZXZpb3VzU2libGluZyJ9fSxwcmVGaWx0ZXI6e0FUVFI6ZnVuY3Rpb24oYSl7cmV0dXJuIGFbMV09YVsxXS5yZXBsYWNlKGNiLGRiKSxhWzNdPShhWzNdfHxhWzRdfHxhWzVdfHwiIikucmVwbGFjZShjYixkYiksIn49Ij09PWFbMl0mJihhWzNdPSIgIithWzNdKyIgIiksYS5zbGljZSgwLDQpfSxDSElMRDpmdW5jdGlvbihhKXtyZXR1cm4gYVsxXT1hWzFdLnRvTG93ZXJDYXNlKCksIm50aCI9PT1hWzFdLnNsaWNlKDAsMyk/KGFbM118fGZiLmVycm9yKGFbMF0pLGFbNF09KyhhWzRdP2FbNV0rKGFbNl18fDEpOjIqKCJldmVuIj09PWFbM118fCJvZGQiPT09YVszXSkpLGFbNV09KyhhWzddK2FbOF18fCJvZGQiPT09YVszXSkpOmFbM10mJmZiLmVycm9yKGFbMF0pLGF9LFBTRVVETzpmdW5jdGlvbihhKXt2YXIgYixjPSFhWzZdJiZhWzJdO3JldHVybiBYLkNISUxELnRlc3QoYVswXSk/bnVsbDooYVszXT9hWzJdPWFbNF18fGFbNV18fCIiOmMmJlYudGVzdChjKSYmKGI9ZyhjLCEwKSkmJihiPWMuaW5kZXhPZigiKSIsYy5sZW5ndGgtYiktYy5sZW5ndGgpJiYoYVswXT1hWzBdLnNsaWNlKDAsYiksYVsyXT1jLnNsaWNlKDAsYikpLGEuc2xpY2UoMCwzKSl9fSxmaWx0ZXI6e1RBRzpmdW5jdGlvbihhKXt2YXIgYj1hLnJlcGxhY2UoY2IsZGIpLnRvTG93ZXJDYXNlKCk7cmV0dXJuIioiPT09YT9mdW5jdGlvbigpe3JldHVybiEwfTpmdW5jdGlvbihhKXtyZXR1cm4gYS5ub2RlTmFtZSYmYS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpPT09Yn19LENMQVNTOmZ1bmN0aW9uKGEpe3ZhciBiPXlbYSsiICJdO3JldHVybiBifHwoYj1uZXcgUmVnRXhwKCIoXnwiK00rIikiK2ErIigiK00rInwkKSIpKSYmeShhLGZ1bmN0aW9uKGEpe3JldHVybiBiLnRlc3QoInN0cmluZyI9PXR5cGVvZiBhLmNsYXNzTmFtZSYmYS5jbGFzc05hbWV8fHR5cGVvZiBhLmdldEF0dHJpYnV0ZSE9PUMmJmEuZ2V0QXR0cmlidXRlKCJjbGFzcyIpfHwiIil9KX0sQVRUUjpmdW5jdGlvbihhLGIsYyl7cmV0dXJuIGZ1bmN0aW9uKGQpe3ZhciBlPWZiLmF0dHIoZCxhKTtyZXR1cm4gbnVsbD09ZT8iIT0iPT09YjpiPyhlKz0iIiwiPSI9PT1iP2U9PT1jOiIhPSI9PT1iP2UhPT1jOiJePSI9PT1iP2MmJjA9PT1lLmluZGV4T2YoYyk6Iio9Ij09PWI/YyYmZS5pbmRleE9mKGMpPi0xOiIkPSI9PT1iP2MmJmUuc2xpY2UoLWMubGVuZ3RoKT09PWM6In49Ij09PWI/KCIgIitlKyIgIikuaW5kZXhPZihjKT4tMToifD0iPT09Yj9lPT09Y3x8ZS5zbGljZSgwLGMubGVuZ3RoKzEpPT09YysiLSI6ITEpOiEwfX0sQ0hJTEQ6ZnVuY3Rpb24oYSxiLGMsZCxlKXt2YXIgZj0ibnRoIiE9PWEuc2xpY2UoMCwzKSxnPSJsYXN0IiE9PWEuc2xpY2UoLTQpLGg9Im9mLXR5cGUiPT09YjtyZXR1cm4gMT09PWQmJjA9PT1lP2Z1bmN0aW9uKGEpe3JldHVybiEhYS5wYXJlbnROb2RlfTpmdW5jdGlvbihiLGMsaSl7dmFyIGosayxsLG0sbixvLHA9ZiE9PWc/Im5leHRTaWJsaW5nIjoicHJldmlvdXNTaWJsaW5nIixxPWIucGFyZW50Tm9kZSxyPWgmJmIubm9kZU5hbWUudG9Mb3dlckNhc2UoKSxzPSFpJiYhaDtpZihxKXtpZihmKXt3aGlsZShwKXtsPWI7d2hpbGUobD1sW3BdKWlmKGg/bC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpPT09cjoxPT09bC5ub2RlVHlwZSlyZXR1cm4hMTtvPXA9Im9ubHkiPT09YSYmIW8mJiJuZXh0U2libGluZyJ9cmV0dXJuITB9aWYobz1bZz9xLmZpcnN0Q2hpbGQ6cS5sYXN0Q2hpbGRdLGcmJnMpe2s9cVt1XXx8KHFbdV09e30pLGo9a1thXXx8W10sbj1qWzBdPT09dyYmalsxXSxtPWpbMF09PT13JiZqWzJdLGw9biYmcS5jaGlsZE5vZGVzW25dO3doaWxlKGw9KytuJiZsJiZsW3BdfHwobT1uPTApfHxvLnBvcCgpKWlmKDE9PT1sLm5vZGVUeXBlJiYrK20mJmw9PT1iKXtrW2FdPVt3LG4sbV07YnJlYWt9fWVsc2UgaWYocyYmKGo9KGJbdV18fChiW3VdPXt9KSlbYV0pJiZqWzBdPT09dyltPWpbMV07ZWxzZSB3aGlsZShsPSsrbiYmbCYmbFtwXXx8KG09bj0wKXx8by5wb3AoKSlpZigoaD9sLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk9PT1yOjE9PT1sLm5vZGVUeXBlKSYmKyttJiYocyYmKChsW3VdfHwobFt1XT17fSkpW2FdPVt3LG1dKSxsPT09YikpYnJlYWs7cmV0dXJuIG0tPWUsbT09PWR8fG0lZD09PTAmJm0vZD49MH19fSxQU0VVRE86ZnVuY3Rpb24oYSxiKXt2YXIgYyxlPWQucHNldWRvc1thXXx8ZC5zZXRGaWx0ZXJzW2EudG9Mb3dlckNhc2UoKV18fGZiLmVycm9yKCJ1bnN1cHBvcnRlZCBwc2V1ZG86ICIrYSk7cmV0dXJuIGVbdV0/ZShiKTplLmxlbmd0aD4xPyhjPVthLGEsIiIsYl0sZC5zZXRGaWx0ZXJzLmhhc093blByb3BlcnR5KGEudG9Mb3dlckNhc2UoKSk/aGIoZnVuY3Rpb24oYSxjKXt2YXIgZCxmPWUoYSxiKSxnPWYubGVuZ3RoO3doaWxlKGctLSlkPUsuY2FsbChhLGZbZ10pLGFbZF09IShjW2RdPWZbZ10pfSk6ZnVuY3Rpb24oYSl7cmV0dXJuIGUoYSwwLGMpfSk6ZX19LHBzZXVkb3M6e25vdDpoYihmdW5jdGlvbihhKXt2YXIgYj1bXSxjPVtdLGQ9aChhLnJlcGxhY2UoUiwiJDEiKSk7cmV0dXJuIGRbdV0/aGIoZnVuY3Rpb24oYSxiLGMsZSl7dmFyIGYsZz1kKGEsbnVsbCxlLFtdKSxoPWEubGVuZ3RoO3doaWxlKGgtLSkoZj1nW2hdKSYmKGFbaF09IShiW2hdPWYpKX0pOmZ1bmN0aW9uKGEsZSxmKXtyZXR1cm4gYlswXT1hLGQoYixudWxsLGYsYyksIWMucG9wKCl9fSksaGFzOmhiKGZ1bmN0aW9uKGEpe3JldHVybiBmdW5jdGlvbihiKXtyZXR1cm4gZmIoYSxiKS5sZW5ndGg+MH19KSxjb250YWluczpoYihmdW5jdGlvbihhKXtyZXR1cm4gZnVuY3Rpb24oYil7cmV0dXJuKGIudGV4dENvbnRlbnR8fGIuaW5uZXJUZXh0fHxlKGIpKS5pbmRleE9mKGEpPi0xfX0pLGxhbmc6aGIoZnVuY3Rpb24oYSl7cmV0dXJuIFcudGVzdChhfHwiIil8fGZiLmVycm9yKCJ1bnN1cHBvcnRlZCBsYW5nOiAiK2EpLGE9YS5yZXBsYWNlKGNiLGRiKS50b0xvd2VyQ2FzZSgpLGZ1bmN0aW9uKGIpe3ZhciBjO2RvIGlmKGM9cD9iLmxhbmc6Yi5nZXRBdHRyaWJ1dGUoInhtbDpsYW5nIil8fGIuZ2V0QXR0cmlidXRlKCJsYW5nIikpcmV0dXJuIGM9Yy50b0xvd2VyQ2FzZSgpLGM9PT1hfHwwPT09Yy5pbmRleE9mKGErIi0iKTt3aGlsZSgoYj1iLnBhcmVudE5vZGUpJiYxPT09Yi5ub2RlVHlwZSk7cmV0dXJuITF9fSksdGFyZ2V0OmZ1bmN0aW9uKGIpe3ZhciBjPWEubG9jYXRpb24mJmEubG9jYXRpb24uaGFzaDtyZXR1cm4gYyYmYy5zbGljZSgxKT09PWIuaWR9LHJvb3Q6ZnVuY3Rpb24oYSl7cmV0dXJuIGE9PT1vfSxmb2N1czpmdW5jdGlvbihhKXtyZXR1cm4gYT09PW4uYWN0aXZlRWxlbWVudCYmKCFuLmhhc0ZvY3VzfHxuLmhhc0ZvY3VzKCkpJiYhIShhLnR5cGV8fGEuaHJlZnx8fmEudGFiSW5kZXgpfSxlbmFibGVkOmZ1bmN0aW9uKGEpe3JldHVybiBhLmRpc2FibGVkPT09ITF9LGRpc2FibGVkOmZ1bmN0aW9uKGEpe3JldHVybiBhLmRpc2FibGVkPT09ITB9LGNoZWNrZWQ6ZnVuY3Rpb24oYSl7dmFyIGI9YS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO3JldHVybiJpbnB1dCI9PT1iJiYhIWEuY2hlY2tlZHx8Im9wdGlvbiI9PT1iJiYhIWEuc2VsZWN0ZWR9LHNlbGVjdGVkOmZ1bmN0aW9uKGEpe3JldHVybiBhLnBhcmVudE5vZGUmJmEucGFyZW50Tm9kZS5zZWxlY3RlZEluZGV4LGEuc2VsZWN0ZWQ9PT0hMH0sZW1wdHk6ZnVuY3Rpb24oYSl7Zm9yKGE9YS5maXJzdENoaWxkO2E7YT1hLm5leHRTaWJsaW5nKWlmKGEubm9kZVR5cGU8NilyZXR1cm4hMTtyZXR1cm4hMH0scGFyZW50OmZ1bmN0aW9uKGEpe3JldHVybiFkLnBzZXVkb3MuZW1wdHkoYSl9LGhlYWRlcjpmdW5jdGlvbihhKXtyZXR1cm4gWi50ZXN0KGEubm9kZU5hbWUpfSxpbnB1dDpmdW5jdGlvbihhKXtyZXR1cm4gWS50ZXN0KGEubm9kZU5hbWUpfSxidXR0b246ZnVuY3Rpb24oYSl7dmFyIGI9YS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO3JldHVybiJpbnB1dCI9PT1iJiYiYnV0dG9uIj09PWEudHlwZXx8ImJ1dHRvbiI9PT1ifSx0ZXh0OmZ1bmN0aW9uKGEpe3ZhciBiO3JldHVybiJpbnB1dCI9PT1hLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkmJiJ0ZXh0Ij09PWEudHlwZSYmKG51bGw9PShiPWEuZ2V0QXR0cmlidXRlKCJ0eXBlIikpfHwidGV4dCI9PT1iLnRvTG93ZXJDYXNlKCkpfSxmaXJzdDpuYihmdW5jdGlvbigpe3JldHVyblswXX0pLGxhc3Q6bmIoZnVuY3Rpb24oYSxiKXtyZXR1cm5bYi0xXX0pLGVxOm5iKGZ1bmN0aW9uKGEsYixjKXtyZXR1cm5bMD5jP2MrYjpjXX0pLGV2ZW46bmIoZnVuY3Rpb24oYSxiKXtmb3IodmFyIGM9MDtiPmM7Yys9MilhLnB1c2goYyk7cmV0dXJuIGF9KSxvZGQ6bmIoZnVuY3Rpb24oYSxiKXtmb3IodmFyIGM9MTtiPmM7Yys9MilhLnB1c2goYyk7cmV0dXJuIGF9KSxsdDpuYihmdW5jdGlvbihhLGIsYyl7Zm9yKHZhciBkPTA+Yz9jK2I6YzstLWQ+PTA7KWEucHVzaChkKTtyZXR1cm4gYX0pLGd0Om5iKGZ1bmN0aW9uKGEsYixjKXtmb3IodmFyIGQ9MD5jP2MrYjpjOysrZDxiOylhLnB1c2goZCk7cmV0dXJuIGF9KX19LGQucHNldWRvcy5udGg9ZC5wc2V1ZG9zLmVxO2ZvcihiIGlue3JhZGlvOiEwLGNoZWNrYm94OiEwLGZpbGU6ITAscGFzc3dvcmQ6ITAsaW1hZ2U6ITB9KWQucHNldWRvc1tiXT1sYihiKTtmb3IoYiBpbntzdWJtaXQ6ITAscmVzZXQ6ITB9KWQucHNldWRvc1tiXT1tYihiKTtmdW5jdGlvbiBwYigpe31wYi5wcm90b3R5cGU9ZC5maWx0ZXJzPWQucHNldWRvcyxkLnNldEZpbHRlcnM9bmV3IHBiLGc9ZmIudG9rZW5pemU9ZnVuY3Rpb24oYSxiKXt2YXIgYyxlLGYsZyxoLGksaixrPXpbYSsiICJdO2lmKGspcmV0dXJuIGI/MDprLnNsaWNlKDApO2g9YSxpPVtdLGo9ZC5wcmVGaWx0ZXI7d2hpbGUoaCl7KCFjfHwoZT1TLmV4ZWMoaCkpKSYmKGUmJihoPWguc2xpY2UoZVswXS5sZW5ndGgpfHxoKSxpLnB1c2goZj1bXSkpLGM9ITEsKGU9VC5leGVjKGgpKSYmKGM9ZS5zaGlmdCgpLGYucHVzaCh7dmFsdWU6Yyx0eXBlOmVbMF0ucmVwbGFjZShSLCIgIil9KSxoPWguc2xpY2UoYy5sZW5ndGgpKTtmb3IoZyBpbiBkLmZpbHRlcikhKGU9WFtnXS5leGVjKGgpKXx8altnXSYmIShlPWpbZ10oZSkpfHwoYz1lLnNoaWZ0KCksZi5wdXNoKHt2YWx1ZTpjLHR5cGU6ZyxtYXRjaGVzOmV9KSxoPWguc2xpY2UoYy5sZW5ndGgpKTtpZighYylicmVha31yZXR1cm4gYj9oLmxlbmd0aDpoP2ZiLmVycm9yKGEpOnooYSxpKS5zbGljZSgwKX07ZnVuY3Rpb24gcWIoYSl7Zm9yKHZhciBiPTAsYz1hLmxlbmd0aCxkPSIiO2M+YjtiKyspZCs9YVtiXS52YWx1ZTtyZXR1cm4gZH1mdW5jdGlvbiByYihhLGIsYyl7dmFyIGQ9Yi5kaXIsZT1jJiYicGFyZW50Tm9kZSI9PT1kLGY9eCsrO3JldHVybiBiLmZpcnN0P2Z1bmN0aW9uKGIsYyxmKXt3aGlsZShiPWJbZF0paWYoMT09PWIubm9kZVR5cGV8fGUpcmV0dXJuIGEoYixjLGYpfTpmdW5jdGlvbihiLGMsZyl7dmFyIGgsaSxqPVt3LGZdO2lmKGcpe3doaWxlKGI9YltkXSlpZigoMT09PWIubm9kZVR5cGV8fGUpJiZhKGIsYyxnKSlyZXR1cm4hMH1lbHNlIHdoaWxlKGI9YltkXSlpZigxPT09Yi5ub2RlVHlwZXx8ZSl7aWYoaT1iW3VdfHwoYlt1XT17fSksKGg9aVtkXSkmJmhbMF09PT13JiZoWzFdPT09ZilyZXR1cm4galsyXT1oWzJdO2lmKGlbZF09aixqWzJdPWEoYixjLGcpKXJldHVybiEwfX19ZnVuY3Rpb24gc2IoYSl7cmV0dXJuIGEubGVuZ3RoPjE/ZnVuY3Rpb24oYixjLGQpe3ZhciBlPWEubGVuZ3RoO3doaWxlKGUtLSlpZighYVtlXShiLGMsZCkpcmV0dXJuITE7cmV0dXJuITB9OmFbMF19ZnVuY3Rpb24gdGIoYSxiLGMpe2Zvcih2YXIgZD0wLGU9Yi5sZW5ndGg7ZT5kO2QrKylmYihhLGJbZF0sYyk7cmV0dXJuIGN9ZnVuY3Rpb24gdWIoYSxiLGMsZCxlKXtmb3IodmFyIGYsZz1bXSxoPTAsaT1hLmxlbmd0aCxqPW51bGwhPWI7aT5oO2grKykoZj1hW2hdKSYmKCFjfHxjKGYsZCxlKSkmJihnLnB1c2goZiksaiYmYi5wdXNoKGgpKTtyZXR1cm4gZ31mdW5jdGlvbiB2YihhLGIsYyxkLGUsZil7cmV0dXJuIGQmJiFkW3VdJiYoZD12YihkKSksZSYmIWVbdV0mJihlPXZiKGUsZikpLGhiKGZ1bmN0aW9uKGYsZyxoLGkpe3ZhciBqLGssbCxtPVtdLG49W10sbz1nLmxlbmd0aCxwPWZ8fHRiKGJ8fCIqIixoLm5vZGVUeXBlP1toXTpoLFtdKSxxPSFhfHwhZiYmYj9wOnViKHAsbSxhLGgsaSkscj1jP2V8fChmP2E6b3x8ZCk/W106ZzpxO2lmKGMmJmMocSxyLGgsaSksZCl7aj11YihyLG4pLGQoaixbXSxoLGkpLGs9ai5sZW5ndGg7d2hpbGUoay0tKShsPWpba10pJiYocltuW2tdXT0hKHFbbltrXV09bCkpfWlmKGYpe2lmKGV8fGEpe2lmKGUpe2o9W10saz1yLmxlbmd0aDt3aGlsZShrLS0pKGw9cltrXSkmJmoucHVzaChxW2tdPWwpO2UobnVsbCxyPVtdLGosaSl9az1yLmxlbmd0aDt3aGlsZShrLS0pKGw9cltrXSkmJihqPWU/Sy5jYWxsKGYsbCk6bVtrXSk+LTEmJihmW2pdPSEoZ1tqXT1sKSl9fWVsc2Ugcj11YihyPT09Zz9yLnNwbGljZShvLHIubGVuZ3RoKTpyKSxlP2UobnVsbCxnLHIsaSk6SS5hcHBseShnLHIpfSl9ZnVuY3Rpb24gd2IoYSl7Zm9yKHZhciBiLGMsZSxmPWEubGVuZ3RoLGc9ZC5yZWxhdGl2ZVthWzBdLnR5cGVdLGg9Z3x8ZC5yZWxhdGl2ZVsiICJdLGk9Zz8xOjAsaz1yYihmdW5jdGlvbihhKXtyZXR1cm4gYT09PWJ9LGgsITApLGw9cmIoZnVuY3Rpb24oYSl7cmV0dXJuIEsuY2FsbChiLGEpPi0xfSxoLCEwKSxtPVtmdW5jdGlvbihhLGMsZCl7cmV0dXJuIWcmJihkfHxjIT09ail8fCgoYj1jKS5ub2RlVHlwZT9rKGEsYyxkKTpsKGEsYyxkKSl9XTtmPmk7aSsrKWlmKGM9ZC5yZWxhdGl2ZVthW2ldLnR5cGVdKW09W3JiKHNiKG0pLGMpXTtlbHNle2lmKGM9ZC5maWx0ZXJbYVtpXS50eXBlXS5hcHBseShudWxsLGFbaV0ubWF0Y2hlcyksY1t1XSl7Zm9yKGU9KytpO2Y+ZTtlKyspaWYoZC5yZWxhdGl2ZVthW2VdLnR5cGVdKWJyZWFrO3JldHVybiB2YihpPjEmJnNiKG0pLGk+MSYmcWIoYS5zbGljZSgwLGktMSkuY29uY2F0KHt2YWx1ZToiICI9PT1hW2ktMl0udHlwZT8iKiI6IiJ9KSkucmVwbGFjZShSLCIkMSIpLGMsZT5pJiZ3YihhLnNsaWNlKGksZSkpLGY+ZSYmd2IoYT1hLnNsaWNlKGUpKSxmPmUmJnFiKGEpKX1tLnB1c2goYyl9cmV0dXJuIHNiKG0pfWZ1bmN0aW9uIHhiKGEsYil7dmFyIGM9Yi5sZW5ndGg+MCxlPWEubGVuZ3RoPjAsZj1mdW5jdGlvbihmLGcsaCxpLGspe3ZhciBsLG0sbyxwPTAscT0iMCIscj1mJiZbXSxzPVtdLHQ9aix1PWZ8fGUmJmQuZmluZC5UQUcoIioiLGspLHY9dys9bnVsbD09dD8xOk1hdGgucmFuZG9tKCl8fC4xLHg9dS5sZW5ndGg7Zm9yKGsmJihqPWchPT1uJiZnKTtxIT09eCYmbnVsbCE9KGw9dVtxXSk7cSsrKXtpZihlJiZsKXttPTA7d2hpbGUobz1hW20rK10paWYobyhsLGcsaCkpe2kucHVzaChsKTticmVha31rJiYodz12KX1jJiYoKGw9IW8mJmwpJiZwLS0sZiYmci5wdXNoKGwpKX1pZihwKz1xLGMmJnEhPT1wKXttPTA7d2hpbGUobz1iW20rK10pbyhyLHMsZyxoKTtpZihmKXtpZihwPjApd2hpbGUocS0tKXJbcV18fHNbcV18fChzW3FdPUcuY2FsbChpKSk7cz11YihzKX1JLmFwcGx5KGkscyksayYmIWYmJnMubGVuZ3RoPjAmJnArYi5sZW5ndGg+MSYmZmIudW5pcXVlU29ydChpKX1yZXR1cm4gayYmKHc9dixqPXQpLHJ9O3JldHVybiBjP2hiKGYpOmZ9cmV0dXJuIGg9ZmIuY29tcGlsZT1mdW5jdGlvbihhLGIpe3ZhciBjLGQ9W10sZT1bXSxmPUFbYSsiICJdO2lmKCFmKXtifHwoYj1nKGEpKSxjPWIubGVuZ3RoO3doaWxlKGMtLSlmPXdiKGJbY10pLGZbdV0/ZC5wdXNoKGYpOmUucHVzaChmKTtmPUEoYSx4YihlLGQpKSxmLnNlbGVjdG9yPWF9cmV0dXJuIGZ9LGk9ZmIuc2VsZWN0PWZ1bmN0aW9uKGEsYixlLGYpe3ZhciBpLGosayxsLG0sbj0iZnVuY3Rpb24iPT10eXBlb2YgYSYmYSxvPSFmJiZnKGE9bi5zZWxlY3Rvcnx8YSk7aWYoZT1lfHxbXSwxPT09by5sZW5ndGgpe2lmKGo9b1swXT1vWzBdLnNsaWNlKDApLGoubGVuZ3RoPjImJiJJRCI9PT0oaz1qWzBdKS50eXBlJiZjLmdldEJ5SWQmJjk9PT1iLm5vZGVUeXBlJiZwJiZkLnJlbGF0aXZlW2pbMV0udHlwZV0pe2lmKGI9KGQuZmluZC5JRChrLm1hdGNoZXNbMF0ucmVwbGFjZShjYixkYiksYil8fFtdKVswXSwhYilyZXR1cm4gZTtuJiYoYj1iLnBhcmVudE5vZGUpLGE9YS5zbGljZShqLnNoaWZ0KCkudmFsdWUubGVuZ3RoKX1pPVgubmVlZHNDb250ZXh0LnRlc3QoYSk/MDpqLmxlbmd0aDt3aGlsZShpLS0pe2lmKGs9altpXSxkLnJlbGF0aXZlW2w9ay50eXBlXSlicmVhaztpZigobT1kLmZpbmRbbF0pJiYoZj1tKGsubWF0Y2hlc1swXS5yZXBsYWNlKGNiLGRiKSxhYi50ZXN0KGpbMF0udHlwZSkmJm9iKGIucGFyZW50Tm9kZSl8fGIpKSl7aWYoai5zcGxpY2UoaSwxKSxhPWYubGVuZ3RoJiZxYihqKSwhYSlyZXR1cm4gSS5hcHBseShlLGYpLGU7YnJlYWt9fX1yZXR1cm4obnx8aChhLG8pKShmLGIsIXAsZSxhYi50ZXN0KGEpJiZvYihiLnBhcmVudE5vZGUpfHxiKSxlfSxjLnNvcnRTdGFibGU9dS5zcGxpdCgiIikuc29ydChCKS5qb2luKCIiKT09PXUsYy5kZXRlY3REdXBsaWNhdGVzPSEhbCxtKCksYy5zb3J0RGV0YWNoZWQ9aWIoZnVuY3Rpb24oYSl7cmV0dXJuIDEmYS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbihuLmNyZWF0ZUVsZW1lbnQoImRpdiIpKX0pLGliKGZ1bmN0aW9uKGEpe3JldHVybiBhLmlubmVySFRNTD0iPGEgaHJlZj0nIyc+PC9hPiIsIiMiPT09YS5maXJzdENoaWxkLmdldEF0dHJpYnV0ZSgiaHJlZiIpfSl8fGpiKCJ0eXBlfGhyZWZ8aGVpZ2h0fHdpZHRoIixmdW5jdGlvbihhLGIsYyl7cmV0dXJuIGM/dm9pZCAwOmEuZ2V0QXR0cmlidXRlKGIsInR5cGUiPT09Yi50b0xvd2VyQ2FzZSgpPzE6Mil9KSxjLmF0dHJpYnV0ZXMmJmliKGZ1bmN0aW9uKGEpe3JldHVybiBhLmlubmVySFRNTD0iPGlucHV0Lz4iLGEuZmlyc3RDaGlsZC5zZXRBdHRyaWJ1dGUoInZhbHVlIiwiIiksIiI9PT1hLmZpcnN0Q2hpbGQuZ2V0QXR0cmlidXRlKCJ2YWx1ZSIpfSl8fGpiKCJ2YWx1ZSIsZnVuY3Rpb24oYSxiLGMpe3JldHVybiBjfHwiaW5wdXQiIT09YS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpP3ZvaWQgMDphLmRlZmF1bHRWYWx1ZX0pLGliKGZ1bmN0aW9uKGEpe3JldHVybiBudWxsPT1hLmdldEF0dHJpYnV0ZSgiZGlzYWJsZWQiKX0pfHxqYihMLGZ1bmN0aW9uKGEsYixjKXt2YXIgZDtyZXR1cm4gYz92b2lkIDA6YVtiXT09PSEwP2IudG9Mb3dlckNhc2UoKTooZD1hLmdldEF0dHJpYnV0ZU5vZGUoYikpJiZkLnNwZWNpZmllZD9kLnZhbHVlOm51bGx9KSxmYn0oYSk7bS5maW5kPXMsbS5leHByPXMuc2VsZWN0b3JzLG0uZXhwclsiOiJdPW0uZXhwci5wc2V1ZG9zLG0udW5pcXVlPXMudW5pcXVlU29ydCxtLnRleHQ9cy5nZXRUZXh0LG0uaXNYTUxEb2M9cy5pc1hNTCxtLmNvbnRhaW5zPXMuY29udGFpbnM7dmFyIHQ9bS5leHByLm1hdGNoLm5lZWRzQ29udGV4dCx1PS9ePChcdyspXHMqXC8/Pig/OjxcL1wxPnwpJC8sdj0vXi5bXjojXFtcLixdKiQvO2Z1bmN0aW9uIHcoYSxiLGMpe2lmKG0uaXNGdW5jdGlvbihiKSlyZXR1cm4gbS5ncmVwKGEsZnVuY3Rpb24oYSxkKXtyZXR1cm4hIWIuY2FsbChhLGQsYSkhPT1jfSk7aWYoYi5ub2RlVHlwZSlyZXR1cm4gbS5ncmVwKGEsZnVuY3Rpb24oYSl7cmV0dXJuIGE9PT1iIT09Y30pO2lmKCJzdHJpbmciPT10eXBlb2YgYil7aWYodi50ZXN0KGIpKXJldHVybiBtLmZpbHRlcihiLGEsYyk7Yj1tLmZpbHRlcihiLGEpfXJldHVybiBtLmdyZXAoYSxmdW5jdGlvbihhKXtyZXR1cm4gbS5pbkFycmF5KGEsYik+PTAhPT1jfSl9bS5maWx0ZXI9ZnVuY3Rpb24oYSxiLGMpe3ZhciBkPWJbMF07cmV0dXJuIGMmJihhPSI6bm90KCIrYSsiKSIpLDE9PT1iLmxlbmd0aCYmMT09PWQubm9kZVR5cGU/bS5maW5kLm1hdGNoZXNTZWxlY3RvcihkLGEpP1tkXTpbXTptLmZpbmQubWF0Y2hlcyhhLG0uZ3JlcChiLGZ1bmN0aW9uKGEpe3JldHVybiAxPT09YS5ub2RlVHlwZX0pKX0sbS5mbi5leHRlbmQoe2ZpbmQ6ZnVuY3Rpb24oYSl7dmFyIGIsYz1bXSxkPXRoaXMsZT1kLmxlbmd0aDtpZigic3RyaW5nIiE9dHlwZW9mIGEpcmV0dXJuIHRoaXMucHVzaFN0YWNrKG0oYSkuZmlsdGVyKGZ1bmN0aW9uKCl7Zm9yKGI9MDtlPmI7YisrKWlmKG0uY29udGFpbnMoZFtiXSx0aGlzKSlyZXR1cm4hMH0pKTtmb3IoYj0wO2U+YjtiKyspbS5maW5kKGEsZFtiXSxjKTtyZXR1cm4gYz10aGlzLnB1c2hTdGFjayhlPjE/bS51bmlxdWUoYyk6YyksYy5zZWxlY3Rvcj10aGlzLnNlbGVjdG9yP3RoaXMuc2VsZWN0b3IrIiAiK2E6YSxjfSxmaWx0ZXI6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMucHVzaFN0YWNrKHcodGhpcyxhfHxbXSwhMSkpfSxub3Q6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMucHVzaFN0YWNrKHcodGhpcyxhfHxbXSwhMCkpfSxpczpmdW5jdGlvbihhKXtyZXR1cm4hIXcodGhpcywic3RyaW5nIj09dHlwZW9mIGEmJnQudGVzdChhKT9tKGEpOmF8fFtdLCExKS5sZW5ndGh9fSk7dmFyIHgseT1hLmRvY3VtZW50LHo9L14oPzpccyooPFtcd1xXXSs+KVtePl0qfCMoW1x3LV0qKSkkLyxBPW0uZm4uaW5pdD1mdW5jdGlvbihhLGIpe3ZhciBjLGQ7aWYoIWEpcmV0dXJuIHRoaXM7aWYoInN0cmluZyI9PXR5cGVvZiBhKXtpZihjPSI8Ij09PWEuY2hhckF0KDApJiYiPiI9PT1hLmNoYXJBdChhLmxlbmd0aC0xKSYmYS5sZW5ndGg+PTM/W251bGwsYSxudWxsXTp6LmV4ZWMoYSksIWN8fCFjWzFdJiZiKXJldHVybiFifHxiLmpxdWVyeT8oYnx8eCkuZmluZChhKTp0aGlzLmNvbnN0cnVjdG9yKGIpLmZpbmQoYSk7aWYoY1sxXSl7aWYoYj1iIGluc3RhbmNlb2YgbT9iWzBdOmIsbS5tZXJnZSh0aGlzLG0ucGFyc2VIVE1MKGNbMV0sYiYmYi5ub2RlVHlwZT9iLm93bmVyRG9jdW1lbnR8fGI6eSwhMCkpLHUudGVzdChjWzFdKSYmbS5pc1BsYWluT2JqZWN0KGIpKWZvcihjIGluIGIpbS5pc0Z1bmN0aW9uKHRoaXNbY10pP3RoaXNbY10oYltjXSk6dGhpcy5hdHRyKGMsYltjXSk7cmV0dXJuIHRoaXN9aWYoZD15LmdldEVsZW1lbnRCeUlkKGNbMl0pLGQmJmQucGFyZW50Tm9kZSl7aWYoZC5pZCE9PWNbMl0pcmV0dXJuIHguZmluZChhKTt0aGlzLmxlbmd0aD0xLHRoaXNbMF09ZH1yZXR1cm4gdGhpcy5jb250ZXh0PXksdGhpcy5zZWxlY3Rvcj1hLHRoaXN9cmV0dXJuIGEubm9kZVR5cGU/KHRoaXMuY29udGV4dD10aGlzWzBdPWEsdGhpcy5sZW5ndGg9MSx0aGlzKTptLmlzRnVuY3Rpb24oYSk/InVuZGVmaW5lZCIhPXR5cGVvZiB4LnJlYWR5P3gucmVhZHkoYSk6YShtKToodm9pZCAwIT09YS5zZWxlY3RvciYmKHRoaXMuc2VsZWN0b3I9YS5zZWxlY3Rvcix0aGlzLmNvbnRleHQ9YS5jb250ZXh0KSxtLm1ha2VBcnJheShhLHRoaXMpKX07QS5wcm90b3R5cGU9bS5mbix4PW0oeSk7dmFyIEI9L14oPzpwYXJlbnRzfHByZXYoPzpVbnRpbHxBbGwpKS8sQz17Y2hpbGRyZW46ITAsY29udGVudHM6ITAsbmV4dDohMCxwcmV2OiEwfTttLmV4dGVuZCh7ZGlyOmZ1bmN0aW9uKGEsYixjKXt2YXIgZD1bXSxlPWFbYl07d2hpbGUoZSYmOSE9PWUubm9kZVR5cGUmJih2b2lkIDA9PT1jfHwxIT09ZS5ub2RlVHlwZXx8IW0oZSkuaXMoYykpKTE9PT1lLm5vZGVUeXBlJiZkLnB1c2goZSksZT1lW2JdO3JldHVybiBkfSxzaWJsaW5nOmZ1bmN0aW9uKGEsYil7Zm9yKHZhciBjPVtdO2E7YT1hLm5leHRTaWJsaW5nKTE9PT1hLm5vZGVUeXBlJiZhIT09YiYmYy5wdXNoKGEpO3JldHVybiBjfX0pLG0uZm4uZXh0ZW5kKHtoYXM6ZnVuY3Rpb24oYSl7dmFyIGIsYz1tKGEsdGhpcyksZD1jLmxlbmd0aDtyZXR1cm4gdGhpcy5maWx0ZXIoZnVuY3Rpb24oKXtmb3IoYj0wO2Q+YjtiKyspaWYobS5jb250YWlucyh0aGlzLGNbYl0pKXJldHVybiEwfSl9LGNsb3Nlc3Q6ZnVuY3Rpb24oYSxiKXtmb3IodmFyIGMsZD0wLGU9dGhpcy5sZW5ndGgsZj1bXSxnPXQudGVzdChhKXx8InN0cmluZyIhPXR5cGVvZiBhP20oYSxifHx0aGlzLmNvbnRleHQpOjA7ZT5kO2QrKylmb3IoYz10aGlzW2RdO2MmJmMhPT1iO2M9Yy5wYXJlbnROb2RlKWlmKGMubm9kZVR5cGU8MTEmJihnP2cuaW5kZXgoYyk+LTE6MT09PWMubm9kZVR5cGUmJm0uZmluZC5tYXRjaGVzU2VsZWN0b3IoYyxhKSkpe2YucHVzaChjKTticmVha31yZXR1cm4gdGhpcy5wdXNoU3RhY2soZi5sZW5ndGg+MT9tLnVuaXF1ZShmKTpmKX0saW5kZXg6ZnVuY3Rpb24oYSl7cmV0dXJuIGE/InN0cmluZyI9PXR5cGVvZiBhP20uaW5BcnJheSh0aGlzWzBdLG0oYSkpOm0uaW5BcnJheShhLmpxdWVyeT9hWzBdOmEsdGhpcyk6dGhpc1swXSYmdGhpc1swXS5wYXJlbnROb2RlP3RoaXMuZmlyc3QoKS5wcmV2QWxsKCkubGVuZ3RoOi0xfSxhZGQ6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gdGhpcy5wdXNoU3RhY2sobS51bmlxdWUobS5tZXJnZSh0aGlzLmdldCgpLG0oYSxiKSkpKX0sYWRkQmFjazpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5hZGQobnVsbD09YT90aGlzLnByZXZPYmplY3Q6dGhpcy5wcmV2T2JqZWN0LmZpbHRlcihhKSl9fSk7ZnVuY3Rpb24gRChhLGIpe2RvIGE9YVtiXTt3aGlsZShhJiYxIT09YS5ub2RlVHlwZSk7cmV0dXJuIGF9bS5lYWNoKHtwYXJlbnQ6ZnVuY3Rpb24oYSl7dmFyIGI9YS5wYXJlbnROb2RlO3JldHVybiBiJiYxMSE9PWIubm9kZVR5cGU/YjpudWxsfSxwYXJlbnRzOmZ1bmN0aW9uKGEpe3JldHVybiBtLmRpcihhLCJwYXJlbnROb2RlIil9LHBhcmVudHNVbnRpbDpmdW5jdGlvbihhLGIsYyl7cmV0dXJuIG0uZGlyKGEsInBhcmVudE5vZGUiLGMpfSxuZXh0OmZ1bmN0aW9uKGEpe3JldHVybiBEKGEsIm5leHRTaWJsaW5nIil9LHByZXY6ZnVuY3Rpb24oYSl7cmV0dXJuIEQoYSwicHJldmlvdXNTaWJsaW5nIil9LG5leHRBbGw6ZnVuY3Rpb24oYSl7cmV0dXJuIG0uZGlyKGEsIm5leHRTaWJsaW5nIil9LHByZXZBbGw6ZnVuY3Rpb24oYSl7cmV0dXJuIG0uZGlyKGEsInByZXZpb3VzU2libGluZyIpfSxuZXh0VW50aWw6ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBtLmRpcihhLCJuZXh0U2libGluZyIsYyl9LHByZXZVbnRpbDpmdW5jdGlvbihhLGIsYyl7cmV0dXJuIG0uZGlyKGEsInByZXZpb3VzU2libGluZyIsYyl9LHNpYmxpbmdzOmZ1bmN0aW9uKGEpe3JldHVybiBtLnNpYmxpbmcoKGEucGFyZW50Tm9kZXx8e30pLmZpcnN0Q2hpbGQsYSl9LGNoaWxkcmVuOmZ1bmN0aW9uKGEpe3JldHVybiBtLnNpYmxpbmcoYS5maXJzdENoaWxkKX0sY29udGVudHM6ZnVuY3Rpb24oYSl7cmV0dXJuIG0ubm9kZU5hbWUoYSwiaWZyYW1lIik/YS5jb250ZW50RG9jdW1lbnR8fGEuY29udGVudFdpbmRvdy5kb2N1bWVudDptLm1lcmdlKFtdLGEuY2hpbGROb2Rlcyl9fSxmdW5jdGlvbihhLGIpe20uZm5bYV09ZnVuY3Rpb24oYyxkKXt2YXIgZT1tLm1hcCh0aGlzLGIsYyk7cmV0dXJuIlVudGlsIiE9PWEuc2xpY2UoLTUpJiYoZD1jKSxkJiYic3RyaW5nIj09dHlwZW9mIGQmJihlPW0uZmlsdGVyKGQsZSkpLHRoaXMubGVuZ3RoPjEmJihDW2FdfHwoZT1tLnVuaXF1ZShlKSksQi50ZXN0KGEpJiYoZT1lLnJldmVyc2UoKSkpLHRoaXMucHVzaFN0YWNrKGUpfX0pO3ZhciBFPS9cUysvZyxGPXt9O2Z1bmN0aW9uIEcoYSl7dmFyIGI9RlthXT17fTtyZXR1cm4gbS5lYWNoKGEubWF0Y2goRSl8fFtdLGZ1bmN0aW9uKGEsYyl7YltjXT0hMH0pLGJ9bS5DYWxsYmFja3M9ZnVuY3Rpb24oYSl7YT0ic3RyaW5nIj09dHlwZW9mIGE/RlthXXx8RyhhKTptLmV4dGVuZCh7fSxhKTt2YXIgYixjLGQsZSxmLGcsaD1bXSxpPSFhLm9uY2UmJltdLGo9ZnVuY3Rpb24obCl7Zm9yKGM9YS5tZW1vcnkmJmwsZD0hMCxmPWd8fDAsZz0wLGU9aC5sZW5ndGgsYj0hMDtoJiZlPmY7ZisrKWlmKGhbZl0uYXBwbHkobFswXSxsWzFdKT09PSExJiZhLnN0b3BPbkZhbHNlKXtjPSExO2JyZWFrfWI9ITEsaCYmKGk/aS5sZW5ndGgmJmooaS5zaGlmdCgpKTpjP2g9W106ay5kaXNhYmxlKCkpfSxrPXthZGQ6ZnVuY3Rpb24oKXtpZihoKXt2YXIgZD1oLmxlbmd0aDshZnVuY3Rpb24gZihiKXttLmVhY2goYixmdW5jdGlvbihiLGMpe3ZhciBkPW0udHlwZShjKTsiZnVuY3Rpb24iPT09ZD9hLnVuaXF1ZSYmay5oYXMoYyl8fGgucHVzaChjKTpjJiZjLmxlbmd0aCYmInN0cmluZyIhPT1kJiZmKGMpfSl9KGFyZ3VtZW50cyksYj9lPWgubGVuZ3RoOmMmJihnPWQsaihjKSl9cmV0dXJuIHRoaXN9LHJlbW92ZTpmdW5jdGlvbigpe3JldHVybiBoJiZtLmVhY2goYXJndW1lbnRzLGZ1bmN0aW9uKGEsYyl7dmFyIGQ7d2hpbGUoKGQ9bS5pbkFycmF5KGMsaCxkKSk+LTEpaC5zcGxpY2UoZCwxKSxiJiYoZT49ZCYmZS0tLGY+PWQmJmYtLSl9KSx0aGlzfSxoYXM6ZnVuY3Rpb24oYSl7cmV0dXJuIGE/bS5pbkFycmF5KGEsaCk+LTE6ISghaHx8IWgubGVuZ3RoKX0sZW1wdHk6ZnVuY3Rpb24oKXtyZXR1cm4gaD1bXSxlPTAsdGhpc30sZGlzYWJsZTpmdW5jdGlvbigpe3JldHVybiBoPWk9Yz12b2lkIDAsdGhpc30sZGlzYWJsZWQ6ZnVuY3Rpb24oKXtyZXR1cm4haH0sbG9jazpmdW5jdGlvbigpe3JldHVybiBpPXZvaWQgMCxjfHxrLmRpc2FibGUoKSx0aGlzfSxsb2NrZWQ6ZnVuY3Rpb24oKXtyZXR1cm4haX0sZmlyZVdpdGg6ZnVuY3Rpb24oYSxjKXtyZXR1cm4haHx8ZCYmIWl8fChjPWN8fFtdLGM9W2EsYy5zbGljZT9jLnNsaWNlKCk6Y10sYj9pLnB1c2goYyk6aihjKSksdGhpc30sZmlyZTpmdW5jdGlvbigpe3JldHVybiBrLmZpcmVXaXRoKHRoaXMsYXJndW1lbnRzKSx0aGlzfSxmaXJlZDpmdW5jdGlvbigpe3JldHVybiEhZH19O3JldHVybiBrfSxtLmV4dGVuZCh7RGVmZXJyZWQ6ZnVuY3Rpb24oYSl7dmFyIGI9W1sicmVzb2x2ZSIsImRvbmUiLG0uQ2FsbGJhY2tzKCJvbmNlIG1lbW9yeSIpLCJyZXNvbHZlZCJdLFsicmVqZWN0IiwiZmFpbCIsbS5DYWxsYmFja3MoIm9uY2UgbWVtb3J5IiksInJlamVjdGVkIl0sWyJub3RpZnkiLCJwcm9ncmVzcyIsbS5DYWxsYmFja3MoIm1lbW9yeSIpXV0sYz0icGVuZGluZyIsZD17c3RhdGU6ZnVuY3Rpb24oKXtyZXR1cm4gY30sYWx3YXlzOmZ1bmN0aW9uKCl7cmV0dXJuIGUuZG9uZShhcmd1bWVudHMpLmZhaWwoYXJndW1lbnRzKSx0aGlzfSx0aGVuOmZ1bmN0aW9uKCl7dmFyIGE9YXJndW1lbnRzO3JldHVybiBtLkRlZmVycmVkKGZ1bmN0aW9uKGMpe20uZWFjaChiLGZ1bmN0aW9uKGIsZil7dmFyIGc9bS5pc0Z1bmN0aW9uKGFbYl0pJiZhW2JdO2VbZlsxXV0oZnVuY3Rpb24oKXt2YXIgYT1nJiZnLmFwcGx5KHRoaXMsYXJndW1lbnRzKTthJiZtLmlzRnVuY3Rpb24oYS5wcm9taXNlKT9hLnByb21pc2UoKS5kb25lKGMucmVzb2x2ZSkuZmFpbChjLnJlamVjdCkucHJvZ3Jlc3MoYy5ub3RpZnkpOmNbZlswXSsiV2l0aCJdKHRoaXM9PT1kP2MucHJvbWlzZSgpOnRoaXMsZz9bYV06YXJndW1lbnRzKX0pfSksYT1udWxsfSkucHJvbWlzZSgpfSxwcm9taXNlOmZ1bmN0aW9uKGEpe3JldHVybiBudWxsIT1hP20uZXh0ZW5kKGEsZCk6ZH19LGU9e307cmV0dXJuIGQucGlwZT1kLnRoZW4sbS5lYWNoKGIsZnVuY3Rpb24oYSxmKXt2YXIgZz1mWzJdLGg9ZlszXTtkW2ZbMV1dPWcuYWRkLGgmJmcuYWRkKGZ1bmN0aW9uKCl7Yz1ofSxiWzFeYV1bMl0uZGlzYWJsZSxiWzJdWzJdLmxvY2spLGVbZlswXV09ZnVuY3Rpb24oKXtyZXR1cm4gZVtmWzBdKyJXaXRoIl0odGhpcz09PWU/ZDp0aGlzLGFyZ3VtZW50cyksdGhpc30sZVtmWzBdKyJXaXRoIl09Zy5maXJlV2l0aH0pLGQucHJvbWlzZShlKSxhJiZhLmNhbGwoZSxlKSxlfSx3aGVuOmZ1bmN0aW9uKGEpe3ZhciBiPTAsYz1kLmNhbGwoYXJndW1lbnRzKSxlPWMubGVuZ3RoLGY9MSE9PWV8fGEmJm0uaXNGdW5jdGlvbihhLnByb21pc2UpP2U6MCxnPTE9PT1mP2E6bS5EZWZlcnJlZCgpLGg9ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBmdW5jdGlvbihlKXtiW2FdPXRoaXMsY1thXT1hcmd1bWVudHMubGVuZ3RoPjE/ZC5jYWxsKGFyZ3VtZW50cyk6ZSxjPT09aT9nLm5vdGlmeVdpdGgoYixjKTotLWZ8fGcucmVzb2x2ZVdpdGgoYixjKX19LGksaixrO2lmKGU+MSlmb3IoaT1uZXcgQXJyYXkoZSksaj1uZXcgQXJyYXkoZSksaz1uZXcgQXJyYXkoZSk7ZT5iO2IrKyljW2JdJiZtLmlzRnVuY3Rpb24oY1tiXS5wcm9taXNlKT9jW2JdLnByb21pc2UoKS5kb25lKGgoYixrLGMpKS5mYWlsKGcucmVqZWN0KS5wcm9ncmVzcyhoKGIsaixpKSk6LS1mO3JldHVybiBmfHxnLnJlc29sdmVXaXRoKGssYyksZy5wcm9taXNlKCl9fSk7dmFyIEg7bS5mbi5yZWFkeT1mdW5jdGlvbihhKXtyZXR1cm4gbS5yZWFkeS5wcm9taXNlKCkuZG9uZShhKSx0aGlzfSxtLmV4dGVuZCh7aXNSZWFkeTohMSxyZWFkeVdhaXQ6MSxob2xkUmVhZHk6ZnVuY3Rpb24oYSl7YT9tLnJlYWR5V2FpdCsrOm0ucmVhZHkoITApfSxyZWFkeTpmdW5jdGlvbihhKXtpZihhPT09ITA/IS0tbS5yZWFkeVdhaXQ6IW0uaXNSZWFkeSl7aWYoIXkuYm9keSlyZXR1cm4gc2V0VGltZW91dChtLnJlYWR5KTttLmlzUmVhZHk9ITAsYSE9PSEwJiYtLW0ucmVhZHlXYWl0PjB8fChILnJlc29sdmVXaXRoKHksW21dKSxtLmZuLnRyaWdnZXJIYW5kbGVyJiYobSh5KS50cmlnZ2VySGFuZGxlcigicmVhZHkiKSxtKHkpLm9mZigicmVhZHkiKSkpfX19KTtmdW5jdGlvbiBJKCl7eS5hZGRFdmVudExpc3RlbmVyPyh5LnJlbW92ZUV2ZW50TGlzdGVuZXIoIkRPTUNvbnRlbnRMb2FkZWQiLEosITEpLGEucmVtb3ZlRXZlbnRMaXN0ZW5lcigibG9hZCIsSiwhMSkpOih5LmRldGFjaEV2ZW50KCJvbnJlYWR5c3RhdGVjaGFuZ2UiLEopLGEuZGV0YWNoRXZlbnQoIm9ubG9hZCIsSikpfWZ1bmN0aW9uIEooKXsoeS5hZGRFdmVudExpc3RlbmVyfHwibG9hZCI9PT1ldmVudC50eXBlfHwiY29tcGxldGUiPT09eS5yZWFkeVN0YXRlKSYmKEkoKSxtLnJlYWR5KCkpfW0ucmVhZHkucHJvbWlzZT1mdW5jdGlvbihiKXtpZighSClpZihIPW0uRGVmZXJyZWQoKSwiY29tcGxldGUiPT09eS5yZWFkeVN0YXRlKXNldFRpbWVvdXQobS5yZWFkeSk7ZWxzZSBpZih5LmFkZEV2ZW50TGlzdGVuZXIpeS5hZGRFdmVudExpc3RlbmVyKCJET01Db250ZW50TG9hZGVkIixKLCExKSxhLmFkZEV2ZW50TGlzdGVuZXIoImxvYWQiLEosITEpO2Vsc2V7eS5hdHRhY2hFdmVudCgib25yZWFkeXN0YXRlY2hhbmdlIixKKSxhLmF0dGFjaEV2ZW50KCJvbmxvYWQiLEopO3ZhciBjPSExO3RyeXtjPW51bGw9PWEuZnJhbWVFbGVtZW50JiZ5LmRvY3VtZW50RWxlbWVudH1jYXRjaChkKXt9YyYmYy5kb1Njcm9sbCYmIWZ1bmN0aW9uIGUoKXtpZighbS5pc1JlYWR5KXt0cnl7Yy5kb1Njcm9sbCgibGVmdCIpfWNhdGNoKGEpe3JldHVybiBzZXRUaW1lb3V0KGUsNTApfUkoKSxtLnJlYWR5KCl9fSgpfXJldHVybiBILnByb21pc2UoYil9O3ZhciBLPSJ1bmRlZmluZWQiLEw7Zm9yKEwgaW4gbShrKSlicmVhaztrLm93bkxhc3Q9IjAiIT09TCxrLmlubGluZUJsb2NrTmVlZHNMYXlvdXQ9ITEsbShmdW5jdGlvbigpe3ZhciBhLGIsYyxkO2M9eS5nZXRFbGVtZW50c0J5VGFnTmFtZSgiYm9keSIpWzBdLGMmJmMuc3R5bGUmJihiPXkuY3JlYXRlRWxlbWVudCgiZGl2IiksZD15LmNyZWF0ZUVsZW1lbnQoImRpdiIpLGQuc3R5bGUuY3NzVGV4dD0icG9zaXRpb246YWJzb2x1dGU7Ym9yZGVyOjA7d2lkdGg6MDtoZWlnaHQ6MDt0b3A6MDtsZWZ0Oi05OTk5cHgiLGMuYXBwZW5kQ2hpbGQoZCkuYXBwZW5kQ2hpbGQoYiksdHlwZW9mIGIuc3R5bGUuem9vbSE9PUsmJihiLnN0eWxlLmNzc1RleHQ9ImRpc3BsYXk6aW5saW5lO21hcmdpbjowO2JvcmRlcjowO3BhZGRpbmc6MXB4O3dpZHRoOjFweDt6b29tOjEiLGsuaW5saW5lQmxvY2tOZWVkc0xheW91dD1hPTM9PT1iLm9mZnNldFdpZHRoLGEmJihjLnN0eWxlLnpvb209MSkpLGMucmVtb3ZlQ2hpbGQoZCkpfSksZnVuY3Rpb24oKXt2YXIgYT15LmNyZWF0ZUVsZW1lbnQoImRpdiIpO2lmKG51bGw9PWsuZGVsZXRlRXhwYW5kbyl7ay5kZWxldGVFeHBhbmRvPSEwO3RyeXtkZWxldGUgYS50ZXN0fWNhdGNoKGIpe2suZGVsZXRlRXhwYW5kbz0hMX19YT1udWxsfSgpLG0uYWNjZXB0RGF0YT1mdW5jdGlvbihhKXt2YXIgYj1tLm5vRGF0YVsoYS5ub2RlTmFtZSsiICIpLnRvTG93ZXJDYXNlKCldLGM9K2Eubm9kZVR5cGV8fDE7cmV0dXJuIDEhPT1jJiY5IT09Yz8hMTohYnx8YiE9PSEwJiZhLmdldEF0dHJpYnV0ZSgiY2xhc3NpZCIpPT09Yn07dmFyIE09L14oPzpce1tcd1xXXSpcfXxcW1tcd1xXXSpcXSkkLyxOPS8oW0EtWl0pL2c7ZnVuY3Rpb24gTyhhLGIsYyl7aWYodm9pZCAwPT09YyYmMT09PWEubm9kZVR5cGUpe3ZhciBkPSJkYXRhLSIrYi5yZXBsYWNlKE4sIi0kMSIpLnRvTG93ZXJDYXNlKCk7aWYoYz1hLmdldEF0dHJpYnV0ZShkKSwic3RyaW5nIj09dHlwZW9mIGMpe3RyeXtjPSJ0cnVlIj09PWM/ITA6ImZhbHNlIj09PWM/ITE6Im51bGwiPT09Yz9udWxsOitjKyIiPT09Yz8rYzpNLnRlc3QoYyk/bS5wYXJzZUpTT04oYyk6Y31jYXRjaChlKXt9bS5kYXRhKGEsYixjKX1lbHNlIGM9dm9pZCAwfXJldHVybiBjfWZ1bmN0aW9uIFAoYSl7dmFyIGI7Zm9yKGIgaW4gYSlpZigoImRhdGEiIT09Ynx8IW0uaXNFbXB0eU9iamVjdChhW2JdKSkmJiJ0b0pTT04iIT09YilyZXR1cm4hMTtyZXR1cm4hMH1mdW5jdGlvbiBRKGEsYixkLGUpe2lmKG0uYWNjZXB0RGF0YShhKSl7dmFyIGYsZyxoPW0uZXhwYW5kbyxpPWEubm9kZVR5cGUsaj1pP20uY2FjaGU6YSxrPWk/YVtoXTphW2hdJiZoOwppZihrJiZqW2tdJiYoZXx8altrXS5kYXRhKXx8dm9pZCAwIT09ZHx8InN0cmluZyIhPXR5cGVvZiBiKXJldHVybiBrfHwoaz1pP2FbaF09Yy5wb3AoKXx8bS5ndWlkKys6aCksaltrXXx8KGpba109aT97fTp7dG9KU09OOm0ubm9vcH0pLCgib2JqZWN0Ij09dHlwZW9mIGJ8fCJmdW5jdGlvbiI9PXR5cGVvZiBiKSYmKGU/altrXT1tLmV4dGVuZChqW2tdLGIpOmpba10uZGF0YT1tLmV4dGVuZChqW2tdLmRhdGEsYikpLGc9altrXSxlfHwoZy5kYXRhfHwoZy5kYXRhPXt9KSxnPWcuZGF0YSksdm9pZCAwIT09ZCYmKGdbbS5jYW1lbENhc2UoYildPWQpLCJzdHJpbmciPT10eXBlb2YgYj8oZj1nW2JdLG51bGw9PWYmJihmPWdbbS5jYW1lbENhc2UoYildKSk6Zj1nLGZ9fWZ1bmN0aW9uIFIoYSxiLGMpe2lmKG0uYWNjZXB0RGF0YShhKSl7dmFyIGQsZSxmPWEubm9kZVR5cGUsZz1mP20uY2FjaGU6YSxoPWY/YVttLmV4cGFuZG9dOm0uZXhwYW5kbztpZihnW2hdKXtpZihiJiYoZD1jP2dbaF06Z1toXS5kYXRhKSl7bS5pc0FycmF5KGIpP2I9Yi5jb25jYXQobS5tYXAoYixtLmNhbWVsQ2FzZSkpOmIgaW4gZD9iPVtiXTooYj1tLmNhbWVsQ2FzZShiKSxiPWIgaW4gZD9bYl06Yi5zcGxpdCgiICIpKSxlPWIubGVuZ3RoO3doaWxlKGUtLSlkZWxldGUgZFtiW2VdXTtpZihjPyFQKGQpOiFtLmlzRW1wdHlPYmplY3QoZCkpcmV0dXJufShjfHwoZGVsZXRlIGdbaF0uZGF0YSxQKGdbaF0pKSkmJihmP20uY2xlYW5EYXRhKFthXSwhMCk6ay5kZWxldGVFeHBhbmRvfHxnIT1nLndpbmRvdz9kZWxldGUgZ1toXTpnW2hdPW51bGwpfX19bS5leHRlbmQoe2NhY2hlOnt9LG5vRGF0YTp7ImFwcGxldCAiOiEwLCJlbWJlZCAiOiEwLCJvYmplY3QgIjoiY2xzaWQ6RDI3Q0RCNkUtQUU2RC0xMWNmLTk2QjgtNDQ0NTUzNTQwMDAwIn0saGFzRGF0YTpmdW5jdGlvbihhKXtyZXR1cm4gYT1hLm5vZGVUeXBlP20uY2FjaGVbYVttLmV4cGFuZG9dXTphW20uZXhwYW5kb10sISFhJiYhUChhKX0sZGF0YTpmdW5jdGlvbihhLGIsYyl7cmV0dXJuIFEoYSxiLGMpfSxyZW1vdmVEYXRhOmZ1bmN0aW9uKGEsYil7cmV0dXJuIFIoYSxiKX0sX2RhdGE6ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBRKGEsYixjLCEwKX0sX3JlbW92ZURhdGE6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gUihhLGIsITApfX0pLG0uZm4uZXh0ZW5kKHtkYXRhOmZ1bmN0aW9uKGEsYil7dmFyIGMsZCxlLGY9dGhpc1swXSxnPWYmJmYuYXR0cmlidXRlcztpZih2b2lkIDA9PT1hKXtpZih0aGlzLmxlbmd0aCYmKGU9bS5kYXRhKGYpLDE9PT1mLm5vZGVUeXBlJiYhbS5fZGF0YShmLCJwYXJzZWRBdHRycyIpKSl7Yz1nLmxlbmd0aDt3aGlsZShjLS0pZ1tjXSYmKGQ9Z1tjXS5uYW1lLDA9PT1kLmluZGV4T2YoImRhdGEtIikmJihkPW0uY2FtZWxDYXNlKGQuc2xpY2UoNSkpLE8oZixkLGVbZF0pKSk7bS5fZGF0YShmLCJwYXJzZWRBdHRycyIsITApfXJldHVybiBlfXJldHVybiJvYmplY3QiPT10eXBlb2YgYT90aGlzLmVhY2goZnVuY3Rpb24oKXttLmRhdGEodGhpcyxhKX0pOmFyZ3VtZW50cy5sZW5ndGg+MT90aGlzLmVhY2goZnVuY3Rpb24oKXttLmRhdGEodGhpcyxhLGIpfSk6Zj9PKGYsYSxtLmRhdGEoZixhKSk6dm9pZCAwfSxyZW1vdmVEYXRhOmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXttLnJlbW92ZURhdGEodGhpcyxhKX0pfX0pLG0uZXh0ZW5kKHtxdWV1ZTpmdW5jdGlvbihhLGIsYyl7dmFyIGQ7cmV0dXJuIGE/KGI9KGJ8fCJmeCIpKyJxdWV1ZSIsZD1tLl9kYXRhKGEsYiksYyYmKCFkfHxtLmlzQXJyYXkoYyk/ZD1tLl9kYXRhKGEsYixtLm1ha2VBcnJheShjKSk6ZC5wdXNoKGMpKSxkfHxbXSk6dm9pZCAwfSxkZXF1ZXVlOmZ1bmN0aW9uKGEsYil7Yj1ifHwiZngiO3ZhciBjPW0ucXVldWUoYSxiKSxkPWMubGVuZ3RoLGU9Yy5zaGlmdCgpLGY9bS5fcXVldWVIb29rcyhhLGIpLGc9ZnVuY3Rpb24oKXttLmRlcXVldWUoYSxiKX07ImlucHJvZ3Jlc3MiPT09ZSYmKGU9Yy5zaGlmdCgpLGQtLSksZSYmKCJmeCI9PT1iJiZjLnVuc2hpZnQoImlucHJvZ3Jlc3MiKSxkZWxldGUgZi5zdG9wLGUuY2FsbChhLGcsZikpLCFkJiZmJiZmLmVtcHR5LmZpcmUoKX0sX3F1ZXVlSG9va3M6ZnVuY3Rpb24oYSxiKXt2YXIgYz1iKyJxdWV1ZUhvb2tzIjtyZXR1cm4gbS5fZGF0YShhLGMpfHxtLl9kYXRhKGEsYyx7ZW1wdHk6bS5DYWxsYmFja3MoIm9uY2UgbWVtb3J5IikuYWRkKGZ1bmN0aW9uKCl7bS5fcmVtb3ZlRGF0YShhLGIrInF1ZXVlIiksbS5fcmVtb3ZlRGF0YShhLGMpfSl9KX19KSxtLmZuLmV4dGVuZCh7cXVldWU6ZnVuY3Rpb24oYSxiKXt2YXIgYz0yO3JldHVybiJzdHJpbmciIT10eXBlb2YgYSYmKGI9YSxhPSJmeCIsYy0tKSxhcmd1bWVudHMubGVuZ3RoPGM/bS5xdWV1ZSh0aGlzWzBdLGEpOnZvaWQgMD09PWI/dGhpczp0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgYz1tLnF1ZXVlKHRoaXMsYSxiKTttLl9xdWV1ZUhvb2tzKHRoaXMsYSksImZ4Ij09PWEmJiJpbnByb2dyZXNzIiE9PWNbMF0mJm0uZGVxdWV1ZSh0aGlzLGEpfSl9LGRlcXVldWU6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe20uZGVxdWV1ZSh0aGlzLGEpfSl9LGNsZWFyUXVldWU6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMucXVldWUoYXx8ImZ4IixbXSl9LHByb21pc2U6ZnVuY3Rpb24oYSxiKXt2YXIgYyxkPTEsZT1tLkRlZmVycmVkKCksZj10aGlzLGc9dGhpcy5sZW5ndGgsaD1mdW5jdGlvbigpey0tZHx8ZS5yZXNvbHZlV2l0aChmLFtmXSl9OyJzdHJpbmciIT10eXBlb2YgYSYmKGI9YSxhPXZvaWQgMCksYT1hfHwiZngiO3doaWxlKGctLSljPW0uX2RhdGEoZltnXSxhKyJxdWV1ZUhvb2tzIiksYyYmYy5lbXB0eSYmKGQrKyxjLmVtcHR5LmFkZChoKSk7cmV0dXJuIGgoKSxlLnByb21pc2UoYil9fSk7dmFyIFM9L1srLV0/KD86XGQqXC58KVxkKyg/OltlRV1bKy1dP1xkK3wpLy5zb3VyY2UsVD1bIlRvcCIsIlJpZ2h0IiwiQm90dG9tIiwiTGVmdCJdLFU9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gYT1ifHxhLCJub25lIj09PW0uY3NzKGEsImRpc3BsYXkiKXx8IW0uY29udGFpbnMoYS5vd25lckRvY3VtZW50LGEpfSxWPW0uYWNjZXNzPWZ1bmN0aW9uKGEsYixjLGQsZSxmLGcpe3ZhciBoPTAsaT1hLmxlbmd0aCxqPW51bGw9PWM7aWYoIm9iamVjdCI9PT1tLnR5cGUoYykpe2U9ITA7Zm9yKGggaW4gYyltLmFjY2VzcyhhLGIsaCxjW2hdLCEwLGYsZyl9ZWxzZSBpZih2b2lkIDAhPT1kJiYoZT0hMCxtLmlzRnVuY3Rpb24oZCl8fChnPSEwKSxqJiYoZz8oYi5jYWxsKGEsZCksYj1udWxsKTooaj1iLGI9ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBqLmNhbGwobShhKSxjKX0pKSxiKSlmb3IoO2k+aDtoKyspYihhW2hdLGMsZz9kOmQuY2FsbChhW2hdLGgsYihhW2hdLGMpKSk7cmV0dXJuIGU/YTpqP2IuY2FsbChhKTppP2IoYVswXSxjKTpmfSxXPS9eKD86Y2hlY2tib3h8cmFkaW8pJC9pOyFmdW5jdGlvbigpe3ZhciBhPXkuY3JlYXRlRWxlbWVudCgiaW5wdXQiKSxiPXkuY3JlYXRlRWxlbWVudCgiZGl2IiksYz15LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKTtpZihiLmlubmVySFRNTD0iICA8bGluay8+PHRhYmxlPjwvdGFibGU+PGEgaHJlZj0nL2EnPmE8L2E+PGlucHV0IHR5cGU9J2NoZWNrYm94Jy8+IixrLmxlYWRpbmdXaGl0ZXNwYWNlPTM9PT1iLmZpcnN0Q2hpbGQubm9kZVR5cGUsay50Ym9keT0hYi5nZXRFbGVtZW50c0J5VGFnTmFtZSgidGJvZHkiKS5sZW5ndGgsay5odG1sU2VyaWFsaXplPSEhYi5nZXRFbGVtZW50c0J5VGFnTmFtZSgibGluayIpLmxlbmd0aCxrLmh0bWw1Q2xvbmU9Ijw6bmF2PjwvOm5hdj4iIT09eS5jcmVhdGVFbGVtZW50KCJuYXYiKS5jbG9uZU5vZGUoITApLm91dGVySFRNTCxhLnR5cGU9ImNoZWNrYm94IixhLmNoZWNrZWQ9ITAsYy5hcHBlbmRDaGlsZChhKSxrLmFwcGVuZENoZWNrZWQ9YS5jaGVja2VkLGIuaW5uZXJIVE1MPSI8dGV4dGFyZWE+eDwvdGV4dGFyZWE+IixrLm5vQ2xvbmVDaGVja2VkPSEhYi5jbG9uZU5vZGUoITApLmxhc3RDaGlsZC5kZWZhdWx0VmFsdWUsYy5hcHBlbmRDaGlsZChiKSxiLmlubmVySFRNTD0iPGlucHV0IHR5cGU9J3JhZGlvJyBjaGVja2VkPSdjaGVja2VkJyBuYW1lPSd0Jy8+IixrLmNoZWNrQ2xvbmU9Yi5jbG9uZU5vZGUoITApLmNsb25lTm9kZSghMCkubGFzdENoaWxkLmNoZWNrZWQsay5ub0Nsb25lRXZlbnQ9ITAsYi5hdHRhY2hFdmVudCYmKGIuYXR0YWNoRXZlbnQoIm9uY2xpY2siLGZ1bmN0aW9uKCl7ay5ub0Nsb25lRXZlbnQ9ITF9KSxiLmNsb25lTm9kZSghMCkuY2xpY2soKSksbnVsbD09ay5kZWxldGVFeHBhbmRvKXtrLmRlbGV0ZUV4cGFuZG89ITA7dHJ5e2RlbGV0ZSBiLnRlc3R9Y2F0Y2goZCl7ay5kZWxldGVFeHBhbmRvPSExfX19KCksZnVuY3Rpb24oKXt2YXIgYixjLGQ9eS5jcmVhdGVFbGVtZW50KCJkaXYiKTtmb3IoYiBpbntzdWJtaXQ6ITAsY2hhbmdlOiEwLGZvY3VzaW46ITB9KWM9Im9uIitiLChrW2IrIkJ1YmJsZXMiXT1jIGluIGEpfHwoZC5zZXRBdHRyaWJ1dGUoYywidCIpLGtbYisiQnViYmxlcyJdPWQuYXR0cmlidXRlc1tjXS5leHBhbmRvPT09ITEpO2Q9bnVsbH0oKTt2YXIgWD0vXig/OmlucHV0fHNlbGVjdHx0ZXh0YXJlYSkkL2ksWT0vXmtleS8sWj0vXig/Om1vdXNlfHBvaW50ZXJ8Y29udGV4dG1lbnUpfGNsaWNrLywkPS9eKD86Zm9jdXNpbmZvY3VzfGZvY3Vzb3V0Ymx1cikkLyxfPS9eKFteLl0qKSg/OlwuKC4rKXwpJC87ZnVuY3Rpb24gYWIoKXtyZXR1cm4hMH1mdW5jdGlvbiBiYigpe3JldHVybiExfWZ1bmN0aW9uIGNiKCl7dHJ5e3JldHVybiB5LmFjdGl2ZUVsZW1lbnR9Y2F0Y2goYSl7fX1tLmV2ZW50PXtnbG9iYWw6e30sYWRkOmZ1bmN0aW9uKGEsYixjLGQsZSl7dmFyIGYsZyxoLGksaixrLGwsbixvLHAscSxyPW0uX2RhdGEoYSk7aWYocil7Yy5oYW5kbGVyJiYoaT1jLGM9aS5oYW5kbGVyLGU9aS5zZWxlY3RvciksYy5ndWlkfHwoYy5ndWlkPW0uZ3VpZCsrKSwoZz1yLmV2ZW50cyl8fChnPXIuZXZlbnRzPXt9KSwoaz1yLmhhbmRsZSl8fChrPXIuaGFuZGxlPWZ1bmN0aW9uKGEpe3JldHVybiB0eXBlb2YgbT09PUt8fGEmJm0uZXZlbnQudHJpZ2dlcmVkPT09YS50eXBlP3ZvaWQgMDptLmV2ZW50LmRpc3BhdGNoLmFwcGx5KGsuZWxlbSxhcmd1bWVudHMpfSxrLmVsZW09YSksYj0oYnx8IiIpLm1hdGNoKEUpfHxbIiJdLGg9Yi5sZW5ndGg7d2hpbGUoaC0tKWY9Xy5leGVjKGJbaF0pfHxbXSxvPXE9ZlsxXSxwPShmWzJdfHwiIikuc3BsaXQoIi4iKS5zb3J0KCksbyYmKGo9bS5ldmVudC5zcGVjaWFsW29dfHx7fSxvPShlP2ouZGVsZWdhdGVUeXBlOmouYmluZFR5cGUpfHxvLGo9bS5ldmVudC5zcGVjaWFsW29dfHx7fSxsPW0uZXh0ZW5kKHt0eXBlOm8sb3JpZ1R5cGU6cSxkYXRhOmQsaGFuZGxlcjpjLGd1aWQ6Yy5ndWlkLHNlbGVjdG9yOmUsbmVlZHNDb250ZXh0OmUmJm0uZXhwci5tYXRjaC5uZWVkc0NvbnRleHQudGVzdChlKSxuYW1lc3BhY2U6cC5qb2luKCIuIil9LGkpLChuPWdbb10pfHwobj1nW29dPVtdLG4uZGVsZWdhdGVDb3VudD0wLGouc2V0dXAmJmouc2V0dXAuY2FsbChhLGQscCxrKSE9PSExfHwoYS5hZGRFdmVudExpc3RlbmVyP2EuYWRkRXZlbnRMaXN0ZW5lcihvLGssITEpOmEuYXR0YWNoRXZlbnQmJmEuYXR0YWNoRXZlbnQoIm9uIitvLGspKSksai5hZGQmJihqLmFkZC5jYWxsKGEsbCksbC5oYW5kbGVyLmd1aWR8fChsLmhhbmRsZXIuZ3VpZD1jLmd1aWQpKSxlP24uc3BsaWNlKG4uZGVsZWdhdGVDb3VudCsrLDAsbCk6bi5wdXNoKGwpLG0uZXZlbnQuZ2xvYmFsW29dPSEwKTthPW51bGx9fSxyZW1vdmU6ZnVuY3Rpb24oYSxiLGMsZCxlKXt2YXIgZixnLGgsaSxqLGssbCxuLG8scCxxLHI9bS5oYXNEYXRhKGEpJiZtLl9kYXRhKGEpO2lmKHImJihrPXIuZXZlbnRzKSl7Yj0oYnx8IiIpLm1hdGNoKEUpfHxbIiJdLGo9Yi5sZW5ndGg7d2hpbGUoai0tKWlmKGg9Xy5leGVjKGJbal0pfHxbXSxvPXE9aFsxXSxwPShoWzJdfHwiIikuc3BsaXQoIi4iKS5zb3J0KCksbyl7bD1tLmV2ZW50LnNwZWNpYWxbb118fHt9LG89KGQ/bC5kZWxlZ2F0ZVR5cGU6bC5iaW5kVHlwZSl8fG8sbj1rW29dfHxbXSxoPWhbMl0mJm5ldyBSZWdFeHAoIihefFxcLikiK3Auam9pbigiXFwuKD86LipcXC58KSIpKyIoXFwufCQpIiksaT1mPW4ubGVuZ3RoO3doaWxlKGYtLSlnPW5bZl0sIWUmJnEhPT1nLm9yaWdUeXBlfHxjJiZjLmd1aWQhPT1nLmd1aWR8fGgmJiFoLnRlc3QoZy5uYW1lc3BhY2UpfHxkJiZkIT09Zy5zZWxlY3RvciYmKCIqKiIhPT1kfHwhZy5zZWxlY3Rvcil8fChuLnNwbGljZShmLDEpLGcuc2VsZWN0b3ImJm4uZGVsZWdhdGVDb3VudC0tLGwucmVtb3ZlJiZsLnJlbW92ZS5jYWxsKGEsZykpO2kmJiFuLmxlbmd0aCYmKGwudGVhcmRvd24mJmwudGVhcmRvd24uY2FsbChhLHAsci5oYW5kbGUpIT09ITF8fG0ucmVtb3ZlRXZlbnQoYSxvLHIuaGFuZGxlKSxkZWxldGUga1tvXSl9ZWxzZSBmb3IobyBpbiBrKW0uZXZlbnQucmVtb3ZlKGEsbytiW2pdLGMsZCwhMCk7bS5pc0VtcHR5T2JqZWN0KGspJiYoZGVsZXRlIHIuaGFuZGxlLG0uX3JlbW92ZURhdGEoYSwiZXZlbnRzIikpfX0sdHJpZ2dlcjpmdW5jdGlvbihiLGMsZCxlKXt2YXIgZixnLGgsaSxrLGwsbixvPVtkfHx5XSxwPWouY2FsbChiLCJ0eXBlIik/Yi50eXBlOmIscT1qLmNhbGwoYiwibmFtZXNwYWNlIik/Yi5uYW1lc3BhY2Uuc3BsaXQoIi4iKTpbXTtpZihoPWw9ZD1kfHx5LDMhPT1kLm5vZGVUeXBlJiY4IT09ZC5ub2RlVHlwZSYmISQudGVzdChwK20uZXZlbnQudHJpZ2dlcmVkKSYmKHAuaW5kZXhPZigiLiIpPj0wJiYocT1wLnNwbGl0KCIuIikscD1xLnNoaWZ0KCkscS5zb3J0KCkpLGc9cC5pbmRleE9mKCI6Iik8MCYmIm9uIitwLGI9YlttLmV4cGFuZG9dP2I6bmV3IG0uRXZlbnQocCwib2JqZWN0Ij09dHlwZW9mIGImJmIpLGIuaXNUcmlnZ2VyPWU/MjozLGIubmFtZXNwYWNlPXEuam9pbigiLiIpLGIubmFtZXNwYWNlX3JlPWIubmFtZXNwYWNlP25ldyBSZWdFeHAoIihefFxcLikiK3Euam9pbigiXFwuKD86LipcXC58KSIpKyIoXFwufCQpIik6bnVsbCxiLnJlc3VsdD12b2lkIDAsYi50YXJnZXR8fChiLnRhcmdldD1kKSxjPW51bGw9PWM/W2JdOm0ubWFrZUFycmF5KGMsW2JdKSxrPW0uZXZlbnQuc3BlY2lhbFtwXXx8e30sZXx8IWsudHJpZ2dlcnx8ay50cmlnZ2VyLmFwcGx5KGQsYykhPT0hMSkpe2lmKCFlJiYhay5ub0J1YmJsZSYmIW0uaXNXaW5kb3coZCkpe2ZvcihpPWsuZGVsZWdhdGVUeXBlfHxwLCQudGVzdChpK3ApfHwoaD1oLnBhcmVudE5vZGUpO2g7aD1oLnBhcmVudE5vZGUpby5wdXNoKGgpLGw9aDtsPT09KGQub3duZXJEb2N1bWVudHx8eSkmJm8ucHVzaChsLmRlZmF1bHRWaWV3fHxsLnBhcmVudFdpbmRvd3x8YSl9bj0wO3doaWxlKChoPW9bbisrXSkmJiFiLmlzUHJvcGFnYXRpb25TdG9wcGVkKCkpYi50eXBlPW4+MT9pOmsuYmluZFR5cGV8fHAsZj0obS5fZGF0YShoLCJldmVudHMiKXx8e30pW2IudHlwZV0mJm0uX2RhdGEoaCwiaGFuZGxlIiksZiYmZi5hcHBseShoLGMpLGY9ZyYmaFtnXSxmJiZmLmFwcGx5JiZtLmFjY2VwdERhdGEoaCkmJihiLnJlc3VsdD1mLmFwcGx5KGgsYyksYi5yZXN1bHQ9PT0hMSYmYi5wcmV2ZW50RGVmYXVsdCgpKTtpZihiLnR5cGU9cCwhZSYmIWIuaXNEZWZhdWx0UHJldmVudGVkKCkmJighay5fZGVmYXVsdHx8ay5fZGVmYXVsdC5hcHBseShvLnBvcCgpLGMpPT09ITEpJiZtLmFjY2VwdERhdGEoZCkmJmcmJmRbcF0mJiFtLmlzV2luZG93KGQpKXtsPWRbZ10sbCYmKGRbZ109bnVsbCksbS5ldmVudC50cmlnZ2VyZWQ9cDt0cnl7ZFtwXSgpfWNhdGNoKHIpe31tLmV2ZW50LnRyaWdnZXJlZD12b2lkIDAsbCYmKGRbZ109bCl9cmV0dXJuIGIucmVzdWx0fX0sZGlzcGF0Y2g6ZnVuY3Rpb24oYSl7YT1tLmV2ZW50LmZpeChhKTt2YXIgYixjLGUsZixnLGg9W10saT1kLmNhbGwoYXJndW1lbnRzKSxqPShtLl9kYXRhKHRoaXMsImV2ZW50cyIpfHx7fSlbYS50eXBlXXx8W10saz1tLmV2ZW50LnNwZWNpYWxbYS50eXBlXXx8e307aWYoaVswXT1hLGEuZGVsZWdhdGVUYXJnZXQ9dGhpcywhay5wcmVEaXNwYXRjaHx8ay5wcmVEaXNwYXRjaC5jYWxsKHRoaXMsYSkhPT0hMSl7aD1tLmV2ZW50LmhhbmRsZXJzLmNhbGwodGhpcyxhLGopLGI9MDt3aGlsZSgoZj1oW2IrK10pJiYhYS5pc1Byb3BhZ2F0aW9uU3RvcHBlZCgpKXthLmN1cnJlbnRUYXJnZXQ9Zi5lbGVtLGc9MDt3aGlsZSgoZT1mLmhhbmRsZXJzW2crK10pJiYhYS5pc0ltbWVkaWF0ZVByb3BhZ2F0aW9uU3RvcHBlZCgpKSghYS5uYW1lc3BhY2VfcmV8fGEubmFtZXNwYWNlX3JlLnRlc3QoZS5uYW1lc3BhY2UpKSYmKGEuaGFuZGxlT2JqPWUsYS5kYXRhPWUuZGF0YSxjPSgobS5ldmVudC5zcGVjaWFsW2Uub3JpZ1R5cGVdfHx7fSkuaGFuZGxlfHxlLmhhbmRsZXIpLmFwcGx5KGYuZWxlbSxpKSx2b2lkIDAhPT1jJiYoYS5yZXN1bHQ9Yyk9PT0hMSYmKGEucHJldmVudERlZmF1bHQoKSxhLnN0b3BQcm9wYWdhdGlvbigpKSl9cmV0dXJuIGsucG9zdERpc3BhdGNoJiZrLnBvc3REaXNwYXRjaC5jYWxsKHRoaXMsYSksYS5yZXN1bHR9fSxoYW5kbGVyczpmdW5jdGlvbihhLGIpe3ZhciBjLGQsZSxmLGc9W10saD1iLmRlbGVnYXRlQ291bnQsaT1hLnRhcmdldDtpZihoJiZpLm5vZGVUeXBlJiYoIWEuYnV0dG9ufHwiY2xpY2siIT09YS50eXBlKSlmb3IoO2khPXRoaXM7aT1pLnBhcmVudE5vZGV8fHRoaXMpaWYoMT09PWkubm9kZVR5cGUmJihpLmRpc2FibGVkIT09ITB8fCJjbGljayIhPT1hLnR5cGUpKXtmb3IoZT1bXSxmPTA7aD5mO2YrKylkPWJbZl0sYz1kLnNlbGVjdG9yKyIgIix2b2lkIDA9PT1lW2NdJiYoZVtjXT1kLm5lZWRzQ29udGV4dD9tKGMsdGhpcykuaW5kZXgoaSk+PTA6bS5maW5kKGMsdGhpcyxudWxsLFtpXSkubGVuZ3RoKSxlW2NdJiZlLnB1c2goZCk7ZS5sZW5ndGgmJmcucHVzaCh7ZWxlbTppLGhhbmRsZXJzOmV9KX1yZXR1cm4gaDxiLmxlbmd0aCYmZy5wdXNoKHtlbGVtOnRoaXMsaGFuZGxlcnM6Yi5zbGljZShoKX0pLGd9LGZpeDpmdW5jdGlvbihhKXtpZihhW20uZXhwYW5kb10pcmV0dXJuIGE7dmFyIGIsYyxkLGU9YS50eXBlLGY9YSxnPXRoaXMuZml4SG9va3NbZV07Z3x8KHRoaXMuZml4SG9va3NbZV09Zz1aLnRlc3QoZSk/dGhpcy5tb3VzZUhvb2tzOlkudGVzdChlKT90aGlzLmtleUhvb2tzOnt9KSxkPWcucHJvcHM/dGhpcy5wcm9wcy5jb25jYXQoZy5wcm9wcyk6dGhpcy5wcm9wcyxhPW5ldyBtLkV2ZW50KGYpLGI9ZC5sZW5ndGg7d2hpbGUoYi0tKWM9ZFtiXSxhW2NdPWZbY107cmV0dXJuIGEudGFyZ2V0fHwoYS50YXJnZXQ9Zi5zcmNFbGVtZW50fHx5KSwzPT09YS50YXJnZXQubm9kZVR5cGUmJihhLnRhcmdldD1hLnRhcmdldC5wYXJlbnROb2RlKSxhLm1ldGFLZXk9ISFhLm1ldGFLZXksZy5maWx0ZXI/Zy5maWx0ZXIoYSxmKTphfSxwcm9wczoiYWx0S2V5IGJ1YmJsZXMgY2FuY2VsYWJsZSBjdHJsS2V5IGN1cnJlbnRUYXJnZXQgZXZlbnRQaGFzZSBtZXRhS2V5IHJlbGF0ZWRUYXJnZXQgc2hpZnRLZXkgdGFyZ2V0IHRpbWVTdGFtcCB2aWV3IHdoaWNoIi5zcGxpdCgiICIpLGZpeEhvb2tzOnt9LGtleUhvb2tzOntwcm9wczoiY2hhciBjaGFyQ29kZSBrZXkga2V5Q29kZSIuc3BsaXQoIiAiKSxmaWx0ZXI6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gbnVsbD09YS53aGljaCYmKGEud2hpY2g9bnVsbCE9Yi5jaGFyQ29kZT9iLmNoYXJDb2RlOmIua2V5Q29kZSksYX19LG1vdXNlSG9va3M6e3Byb3BzOiJidXR0b24gYnV0dG9ucyBjbGllbnRYIGNsaWVudFkgZnJvbUVsZW1lbnQgb2Zmc2V0WCBvZmZzZXRZIHBhZ2VYIHBhZ2VZIHNjcmVlblggc2NyZWVuWSB0b0VsZW1lbnQiLnNwbGl0KCIgIiksZmlsdGVyOmZ1bmN0aW9uKGEsYil7dmFyIGMsZCxlLGY9Yi5idXR0b24sZz1iLmZyb21FbGVtZW50O3JldHVybiBudWxsPT1hLnBhZ2VYJiZudWxsIT1iLmNsaWVudFgmJihkPWEudGFyZ2V0Lm93bmVyRG9jdW1lbnR8fHksZT1kLmRvY3VtZW50RWxlbWVudCxjPWQuYm9keSxhLnBhZ2VYPWIuY2xpZW50WCsoZSYmZS5zY3JvbGxMZWZ0fHxjJiZjLnNjcm9sbExlZnR8fDApLShlJiZlLmNsaWVudExlZnR8fGMmJmMuY2xpZW50TGVmdHx8MCksYS5wYWdlWT1iLmNsaWVudFkrKGUmJmUuc2Nyb2xsVG9wfHxjJiZjLnNjcm9sbFRvcHx8MCktKGUmJmUuY2xpZW50VG9wfHxjJiZjLmNsaWVudFRvcHx8MCkpLCFhLnJlbGF0ZWRUYXJnZXQmJmcmJihhLnJlbGF0ZWRUYXJnZXQ9Zz09PWEudGFyZ2V0P2IudG9FbGVtZW50OmcpLGEud2hpY2h8fHZvaWQgMD09PWZ8fChhLndoaWNoPTEmZj8xOjImZj8zOjQmZj8yOjApLGF9fSxzcGVjaWFsOntsb2FkOntub0J1YmJsZTohMH0sZm9jdXM6e3RyaWdnZXI6ZnVuY3Rpb24oKXtpZih0aGlzIT09Y2IoKSYmdGhpcy5mb2N1cyl0cnl7cmV0dXJuIHRoaXMuZm9jdXMoKSwhMX1jYXRjaChhKXt9fSxkZWxlZ2F0ZVR5cGU6ImZvY3VzaW4ifSxibHVyOnt0cmlnZ2VyOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXM9PT1jYigpJiZ0aGlzLmJsdXI/KHRoaXMuYmx1cigpLCExKTp2b2lkIDB9LGRlbGVnYXRlVHlwZToiZm9jdXNvdXQifSxjbGljazp7dHJpZ2dlcjpmdW5jdGlvbigpe3JldHVybiBtLm5vZGVOYW1lKHRoaXMsImlucHV0IikmJiJjaGVja2JveCI9PT10aGlzLnR5cGUmJnRoaXMuY2xpY2s/KHRoaXMuY2xpY2soKSwhMSk6dm9pZCAwfSxfZGVmYXVsdDpmdW5jdGlvbihhKXtyZXR1cm4gbS5ub2RlTmFtZShhLnRhcmdldCwiYSIpfX0sYmVmb3JldW5sb2FkOntwb3N0RGlzcGF0Y2g6ZnVuY3Rpb24oYSl7dm9pZCAwIT09YS5yZXN1bHQmJmEub3JpZ2luYWxFdmVudCYmKGEub3JpZ2luYWxFdmVudC5yZXR1cm5WYWx1ZT1hLnJlc3VsdCl9fX0sc2ltdWxhdGU6ZnVuY3Rpb24oYSxiLGMsZCl7dmFyIGU9bS5leHRlbmQobmV3IG0uRXZlbnQsYyx7dHlwZTphLGlzU2ltdWxhdGVkOiEwLG9yaWdpbmFsRXZlbnQ6e319KTtkP20uZXZlbnQudHJpZ2dlcihlLG51bGwsYik6bS5ldmVudC5kaXNwYXRjaC5jYWxsKGIsZSksZS5pc0RlZmF1bHRQcmV2ZW50ZWQoKSYmYy5wcmV2ZW50RGVmYXVsdCgpfX0sbS5yZW1vdmVFdmVudD15LnJlbW92ZUV2ZW50TGlzdGVuZXI/ZnVuY3Rpb24oYSxiLGMpe2EucmVtb3ZlRXZlbnRMaXN0ZW5lciYmYS5yZW1vdmVFdmVudExpc3RlbmVyKGIsYywhMSl9OmZ1bmN0aW9uKGEsYixjKXt2YXIgZD0ib24iK2I7YS5kZXRhY2hFdmVudCYmKHR5cGVvZiBhW2RdPT09SyYmKGFbZF09bnVsbCksYS5kZXRhY2hFdmVudChkLGMpKX0sbS5FdmVudD1mdW5jdGlvbihhLGIpe3JldHVybiB0aGlzIGluc3RhbmNlb2YgbS5FdmVudD8oYSYmYS50eXBlPyh0aGlzLm9yaWdpbmFsRXZlbnQ9YSx0aGlzLnR5cGU9YS50eXBlLHRoaXMuaXNEZWZhdWx0UHJldmVudGVkPWEuZGVmYXVsdFByZXZlbnRlZHx8dm9pZCAwPT09YS5kZWZhdWx0UHJldmVudGVkJiZhLnJldHVyblZhbHVlPT09ITE/YWI6YmIpOnRoaXMudHlwZT1hLGImJm0uZXh0ZW5kKHRoaXMsYiksdGhpcy50aW1lU3RhbXA9YSYmYS50aW1lU3RhbXB8fG0ubm93KCksdm9pZCh0aGlzW20uZXhwYW5kb109ITApKTpuZXcgbS5FdmVudChhLGIpfSxtLkV2ZW50LnByb3RvdHlwZT17aXNEZWZhdWx0UHJldmVudGVkOmJiLGlzUHJvcGFnYXRpb25TdG9wcGVkOmJiLGlzSW1tZWRpYXRlUHJvcGFnYXRpb25TdG9wcGVkOmJiLHByZXZlbnREZWZhdWx0OmZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5vcmlnaW5hbEV2ZW50O3RoaXMuaXNEZWZhdWx0UHJldmVudGVkPWFiLGEmJihhLnByZXZlbnREZWZhdWx0P2EucHJldmVudERlZmF1bHQoKTphLnJldHVyblZhbHVlPSExKX0sc3RvcFByb3BhZ2F0aW9uOmZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5vcmlnaW5hbEV2ZW50O3RoaXMuaXNQcm9wYWdhdGlvblN0b3BwZWQ9YWIsYSYmKGEuc3RvcFByb3BhZ2F0aW9uJiZhLnN0b3BQcm9wYWdhdGlvbigpLGEuY2FuY2VsQnViYmxlPSEwKX0sc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uOmZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5vcmlnaW5hbEV2ZW50O3RoaXMuaXNJbW1lZGlhdGVQcm9wYWdhdGlvblN0b3BwZWQ9YWIsYSYmYS5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24mJmEuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCksdGhpcy5zdG9wUHJvcGFnYXRpb24oKX19LG0uZWFjaCh7bW91c2VlbnRlcjoibW91c2VvdmVyIixtb3VzZWxlYXZlOiJtb3VzZW91dCIscG9pbnRlcmVudGVyOiJwb2ludGVyb3ZlciIscG9pbnRlcmxlYXZlOiJwb2ludGVyb3V0In0sZnVuY3Rpb24oYSxiKXttLmV2ZW50LnNwZWNpYWxbYV09e2RlbGVnYXRlVHlwZTpiLGJpbmRUeXBlOmIsaGFuZGxlOmZ1bmN0aW9uKGEpe3ZhciBjLGQ9dGhpcyxlPWEucmVsYXRlZFRhcmdldCxmPWEuaGFuZGxlT2JqO3JldHVybighZXx8ZSE9PWQmJiFtLmNvbnRhaW5zKGQsZSkpJiYoYS50eXBlPWYub3JpZ1R5cGUsYz1mLmhhbmRsZXIuYXBwbHkodGhpcyxhcmd1bWVudHMpLGEudHlwZT1iKSxjfX19KSxrLnN1Ym1pdEJ1YmJsZXN8fChtLmV2ZW50LnNwZWNpYWwuc3VibWl0PXtzZXR1cDpmdW5jdGlvbigpe3JldHVybiBtLm5vZGVOYW1lKHRoaXMsImZvcm0iKT8hMTp2b2lkIG0uZXZlbnQuYWRkKHRoaXMsImNsaWNrLl9zdWJtaXQga2V5cHJlc3MuX3N1Ym1pdCIsZnVuY3Rpb24oYSl7dmFyIGI9YS50YXJnZXQsYz1tLm5vZGVOYW1lKGIsImlucHV0Iil8fG0ubm9kZU5hbWUoYiwiYnV0dG9uIik/Yi5mb3JtOnZvaWQgMDtjJiYhbS5fZGF0YShjLCJzdWJtaXRCdWJibGVzIikmJihtLmV2ZW50LmFkZChjLCJzdWJtaXQuX3N1Ym1pdCIsZnVuY3Rpb24oYSl7YS5fc3VibWl0X2J1YmJsZT0hMH0pLG0uX2RhdGEoYywic3VibWl0QnViYmxlcyIsITApKX0pfSxwb3N0RGlzcGF0Y2g6ZnVuY3Rpb24oYSl7YS5fc3VibWl0X2J1YmJsZSYmKGRlbGV0ZSBhLl9zdWJtaXRfYnViYmxlLHRoaXMucGFyZW50Tm9kZSYmIWEuaXNUcmlnZ2VyJiZtLmV2ZW50LnNpbXVsYXRlKCJzdWJtaXQiLHRoaXMucGFyZW50Tm9kZSxhLCEwKSl9LHRlYXJkb3duOmZ1bmN0aW9uKCl7cmV0dXJuIG0ubm9kZU5hbWUodGhpcywiZm9ybSIpPyExOnZvaWQgbS5ldmVudC5yZW1vdmUodGhpcywiLl9zdWJtaXQiKX19KSxrLmNoYW5nZUJ1YmJsZXN8fChtLmV2ZW50LnNwZWNpYWwuY2hhbmdlPXtzZXR1cDpmdW5jdGlvbigpe3JldHVybiBYLnRlc3QodGhpcy5ub2RlTmFtZSk/KCgiY2hlY2tib3giPT09dGhpcy50eXBlfHwicmFkaW8iPT09dGhpcy50eXBlKSYmKG0uZXZlbnQuYWRkKHRoaXMsInByb3BlcnR5Y2hhbmdlLl9jaGFuZ2UiLGZ1bmN0aW9uKGEpeyJjaGVja2VkIj09PWEub3JpZ2luYWxFdmVudC5wcm9wZXJ0eU5hbWUmJih0aGlzLl9qdXN0X2NoYW5nZWQ9ITApfSksbS5ldmVudC5hZGQodGhpcywiY2xpY2suX2NoYW5nZSIsZnVuY3Rpb24oYSl7dGhpcy5fanVzdF9jaGFuZ2VkJiYhYS5pc1RyaWdnZXImJih0aGlzLl9qdXN0X2NoYW5nZWQ9ITEpLG0uZXZlbnQuc2ltdWxhdGUoImNoYW5nZSIsdGhpcyxhLCEwKX0pKSwhMSk6dm9pZCBtLmV2ZW50LmFkZCh0aGlzLCJiZWZvcmVhY3RpdmF0ZS5fY2hhbmdlIixmdW5jdGlvbihhKXt2YXIgYj1hLnRhcmdldDtYLnRlc3QoYi5ub2RlTmFtZSkmJiFtLl9kYXRhKGIsImNoYW5nZUJ1YmJsZXMiKSYmKG0uZXZlbnQuYWRkKGIsImNoYW5nZS5fY2hhbmdlIixmdW5jdGlvbihhKXshdGhpcy5wYXJlbnROb2RlfHxhLmlzU2ltdWxhdGVkfHxhLmlzVHJpZ2dlcnx8bS5ldmVudC5zaW11bGF0ZSgiY2hhbmdlIix0aGlzLnBhcmVudE5vZGUsYSwhMCl9KSxtLl9kYXRhKGIsImNoYW5nZUJ1YmJsZXMiLCEwKSl9KX0saGFuZGxlOmZ1bmN0aW9uKGEpe3ZhciBiPWEudGFyZ2V0O3JldHVybiB0aGlzIT09Ynx8YS5pc1NpbXVsYXRlZHx8YS5pc1RyaWdnZXJ8fCJyYWRpbyIhPT1iLnR5cGUmJiJjaGVja2JveCIhPT1iLnR5cGU/YS5oYW5kbGVPYmouaGFuZGxlci5hcHBseSh0aGlzLGFyZ3VtZW50cyk6dm9pZCAwfSx0ZWFyZG93bjpmdW5jdGlvbigpe3JldHVybiBtLmV2ZW50LnJlbW92ZSh0aGlzLCIuX2NoYW5nZSIpLCFYLnRlc3QodGhpcy5ub2RlTmFtZSl9fSksay5mb2N1c2luQnViYmxlc3x8bS5lYWNoKHtmb2N1czoiZm9jdXNpbiIsYmx1cjoiZm9jdXNvdXQifSxmdW5jdGlvbihhLGIpe3ZhciBjPWZ1bmN0aW9uKGEpe20uZXZlbnQuc2ltdWxhdGUoYixhLnRhcmdldCxtLmV2ZW50LmZpeChhKSwhMCl9O20uZXZlbnQuc3BlY2lhbFtiXT17c2V0dXA6ZnVuY3Rpb24oKXt2YXIgZD10aGlzLm93bmVyRG9jdW1lbnR8fHRoaXMsZT1tLl9kYXRhKGQsYik7ZXx8ZC5hZGRFdmVudExpc3RlbmVyKGEsYywhMCksbS5fZGF0YShkLGIsKGV8fDApKzEpfSx0ZWFyZG93bjpmdW5jdGlvbigpe3ZhciBkPXRoaXMub3duZXJEb2N1bWVudHx8dGhpcyxlPW0uX2RhdGEoZCxiKS0xO2U/bS5fZGF0YShkLGIsZSk6KGQucmVtb3ZlRXZlbnRMaXN0ZW5lcihhLGMsITApLG0uX3JlbW92ZURhdGEoZCxiKSl9fX0pLG0uZm4uZXh0ZW5kKHtvbjpmdW5jdGlvbihhLGIsYyxkLGUpe3ZhciBmLGc7aWYoIm9iamVjdCI9PXR5cGVvZiBhKXsic3RyaW5nIiE9dHlwZW9mIGImJihjPWN8fGIsYj12b2lkIDApO2ZvcihmIGluIGEpdGhpcy5vbihmLGIsYyxhW2ZdLGUpO3JldHVybiB0aGlzfWlmKG51bGw9PWMmJm51bGw9PWQ/KGQ9YixjPWI9dm9pZCAwKTpudWxsPT1kJiYoInN0cmluZyI9PXR5cGVvZiBiPyhkPWMsYz12b2lkIDApOihkPWMsYz1iLGI9dm9pZCAwKSksZD09PSExKWQ9YmI7ZWxzZSBpZighZClyZXR1cm4gdGhpcztyZXR1cm4gMT09PWUmJihnPWQsZD1mdW5jdGlvbihhKXtyZXR1cm4gbSgpLm9mZihhKSxnLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0sZC5ndWlkPWcuZ3VpZHx8KGcuZ3VpZD1tLmd1aWQrKykpLHRoaXMuZWFjaChmdW5jdGlvbigpe20uZXZlbnQuYWRkKHRoaXMsYSxkLGMsYil9KX0sb25lOmZ1bmN0aW9uKGEsYixjLGQpe3JldHVybiB0aGlzLm9uKGEsYixjLGQsMSl9LG9mZjpmdW5jdGlvbihhLGIsYyl7dmFyIGQsZTtpZihhJiZhLnByZXZlbnREZWZhdWx0JiZhLmhhbmRsZU9iailyZXR1cm4gZD1hLmhhbmRsZU9iaixtKGEuZGVsZWdhdGVUYXJnZXQpLm9mZihkLm5hbWVzcGFjZT9kLm9yaWdUeXBlKyIuIitkLm5hbWVzcGFjZTpkLm9yaWdUeXBlLGQuc2VsZWN0b3IsZC5oYW5kbGVyKSx0aGlzO2lmKCJvYmplY3QiPT10eXBlb2YgYSl7Zm9yKGUgaW4gYSl0aGlzLm9mZihlLGIsYVtlXSk7cmV0dXJuIHRoaXN9cmV0dXJuKGI9PT0hMXx8ImZ1bmN0aW9uIj09dHlwZW9mIGIpJiYoYz1iLGI9dm9pZCAwKSxjPT09ITEmJihjPWJiKSx0aGlzLmVhY2goZnVuY3Rpb24oKXttLmV2ZW50LnJlbW92ZSh0aGlzLGEsYyxiKX0pfSx0cmlnZ2VyOmZ1bmN0aW9uKGEsYil7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe20uZXZlbnQudHJpZ2dlcihhLGIsdGhpcyl9KX0sdHJpZ2dlckhhbmRsZXI6ZnVuY3Rpb24oYSxiKXt2YXIgYz10aGlzWzBdO3JldHVybiBjP20uZXZlbnQudHJpZ2dlcihhLGIsYywhMCk6dm9pZCAwfX0pO2Z1bmN0aW9uIGRiKGEpe3ZhciBiPWViLnNwbGl0KCJ8IiksYz1hLmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKTtpZihjLmNyZWF0ZUVsZW1lbnQpd2hpbGUoYi5sZW5ndGgpYy5jcmVhdGVFbGVtZW50KGIucG9wKCkpO3JldHVybiBjfXZhciBlYj0iYWJicnxhcnRpY2xlfGFzaWRlfGF1ZGlvfGJkaXxjYW52YXN8ZGF0YXxkYXRhbGlzdHxkZXRhaWxzfGZpZ2NhcHRpb258ZmlndXJlfGZvb3RlcnxoZWFkZXJ8aGdyb3VwfG1hcmt8bWV0ZXJ8bmF2fG91dHB1dHxwcm9ncmVzc3xzZWN0aW9ufHN1bW1hcnl8dGltZXx2aWRlbyIsZmI9LyBqUXVlcnlcZCs9Iig/Om51bGx8XGQrKSIvZyxnYj1uZXcgUmVnRXhwKCI8KD86IitlYisiKVtcXHMvPl0iLCJpIiksaGI9L15ccysvLGliPS88KD8hYXJlYXxicnxjb2x8ZW1iZWR8aHJ8aW1nfGlucHV0fGxpbmt8bWV0YXxwYXJhbSkoKFtcdzpdKylbXj5dKilcLz4vZ2ksamI9LzwoW1x3Ol0rKS8sa2I9Lzx0Ym9keS9pLGxiPS88fCYjP1x3KzsvLG1iPS88KD86c2NyaXB0fHN0eWxlfGxpbmspL2ksbmI9L2NoZWNrZWRccyooPzpbXj1dfD1ccyouY2hlY2tlZC4pL2ksb2I9L14kfFwvKD86amF2YXxlY21hKXNjcmlwdC9pLHBiPS9edHJ1ZVwvKC4qKS8scWI9L15ccyo8ISg/OlxbQ0RBVEFcW3wtLSl8KD86XF1cXXwtLSk+XHMqJC9nLHJiPXtvcHRpb246WzEsIjxzZWxlY3QgbXVsdGlwbGU9J211bHRpcGxlJz4iLCI8L3NlbGVjdD4iXSxsZWdlbmQ6WzEsIjxmaWVsZHNldD4iLCI8L2ZpZWxkc2V0PiJdLGFyZWE6WzEsIjxtYXA+IiwiPC9tYXA+Il0scGFyYW06WzEsIjxvYmplY3Q+IiwiPC9vYmplY3Q+Il0sdGhlYWQ6WzEsIjx0YWJsZT4iLCI8L3RhYmxlPiJdLHRyOlsyLCI8dGFibGU+PHRib2R5PiIsIjwvdGJvZHk+PC90YWJsZT4iXSxjb2w6WzIsIjx0YWJsZT48dGJvZHk+PC90Ym9keT48Y29sZ3JvdXA+IiwiPC9jb2xncm91cD48L3RhYmxlPiJdLHRkOlszLCI8dGFibGU+PHRib2R5Pjx0cj4iLCI8L3RyPjwvdGJvZHk+PC90YWJsZT4iXSxfZGVmYXVsdDprLmh0bWxTZXJpYWxpemU/WzAsIiIsIiJdOlsxLCJYPGRpdj4iLCI8L2Rpdj4iXX0sc2I9ZGIoeSksdGI9c2IuYXBwZW5kQ2hpbGQoeS5jcmVhdGVFbGVtZW50KCJkaXYiKSk7cmIub3B0Z3JvdXA9cmIub3B0aW9uLHJiLnRib2R5PXJiLnRmb290PXJiLmNvbGdyb3VwPXJiLmNhcHRpb249cmIudGhlYWQscmIudGg9cmIudGQ7ZnVuY3Rpb24gdWIoYSxiKXt2YXIgYyxkLGU9MCxmPXR5cGVvZiBhLmdldEVsZW1lbnRzQnlUYWdOYW1lIT09Sz9hLmdldEVsZW1lbnRzQnlUYWdOYW1lKGJ8fCIqIik6dHlwZW9mIGEucXVlcnlTZWxlY3RvckFsbCE9PUs/YS5xdWVyeVNlbGVjdG9yQWxsKGJ8fCIqIik6dm9pZCAwO2lmKCFmKWZvcihmPVtdLGM9YS5jaGlsZE5vZGVzfHxhO251bGwhPShkPWNbZV0pO2UrKykhYnx8bS5ub2RlTmFtZShkLGIpP2YucHVzaChkKTptLm1lcmdlKGYsdWIoZCxiKSk7cmV0dXJuIHZvaWQgMD09PWJ8fGImJm0ubm9kZU5hbWUoYSxiKT9tLm1lcmdlKFthXSxmKTpmfWZ1bmN0aW9uIHZiKGEpe1cudGVzdChhLnR5cGUpJiYoYS5kZWZhdWx0Q2hlY2tlZD1hLmNoZWNrZWQpfWZ1bmN0aW9uIHdiKGEsYil7cmV0dXJuIG0ubm9kZU5hbWUoYSwidGFibGUiKSYmbS5ub2RlTmFtZSgxMSE9PWIubm9kZVR5cGU/YjpiLmZpcnN0Q2hpbGQsInRyIik/YS5nZXRFbGVtZW50c0J5VGFnTmFtZSgidGJvZHkiKVswXXx8YS5hcHBlbmRDaGlsZChhLm93bmVyRG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGJvZHkiKSk6YX1mdW5jdGlvbiB4YihhKXtyZXR1cm4gYS50eXBlPShudWxsIT09bS5maW5kLmF0dHIoYSwidHlwZSIpKSsiLyIrYS50eXBlLGF9ZnVuY3Rpb24geWIoYSl7dmFyIGI9cGIuZXhlYyhhLnR5cGUpO3JldHVybiBiP2EudHlwZT1iWzFdOmEucmVtb3ZlQXR0cmlidXRlKCJ0eXBlIiksYX1mdW5jdGlvbiB6YihhLGIpe2Zvcih2YXIgYyxkPTA7bnVsbCE9KGM9YVtkXSk7ZCsrKW0uX2RhdGEoYywiZ2xvYmFsRXZhbCIsIWJ8fG0uX2RhdGEoYltkXSwiZ2xvYmFsRXZhbCIpKX1mdW5jdGlvbiBBYihhLGIpe2lmKDE9PT1iLm5vZGVUeXBlJiZtLmhhc0RhdGEoYSkpe3ZhciBjLGQsZSxmPW0uX2RhdGEoYSksZz1tLl9kYXRhKGIsZiksaD1mLmV2ZW50cztpZihoKXtkZWxldGUgZy5oYW5kbGUsZy5ldmVudHM9e307Zm9yKGMgaW4gaClmb3IoZD0wLGU9aFtjXS5sZW5ndGg7ZT5kO2QrKyltLmV2ZW50LmFkZChiLGMsaFtjXVtkXSl9Zy5kYXRhJiYoZy5kYXRhPW0uZXh0ZW5kKHt9LGcuZGF0YSkpfX1mdW5jdGlvbiBCYihhLGIpe3ZhciBjLGQsZTtpZigxPT09Yi5ub2RlVHlwZSl7aWYoYz1iLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCksIWsubm9DbG9uZUV2ZW50JiZiW20uZXhwYW5kb10pe2U9bS5fZGF0YShiKTtmb3IoZCBpbiBlLmV2ZW50cyltLnJlbW92ZUV2ZW50KGIsZCxlLmhhbmRsZSk7Yi5yZW1vdmVBdHRyaWJ1dGUobS5leHBhbmRvKX0ic2NyaXB0Ij09PWMmJmIudGV4dCE9PWEudGV4dD8oeGIoYikudGV4dD1hLnRleHQseWIoYikpOiJvYmplY3QiPT09Yz8oYi5wYXJlbnROb2RlJiYoYi5vdXRlckhUTUw9YS5vdXRlckhUTUwpLGsuaHRtbDVDbG9uZSYmYS5pbm5lckhUTUwmJiFtLnRyaW0oYi5pbm5lckhUTUwpJiYoYi5pbm5lckhUTUw9YS5pbm5lckhUTUwpKToiaW5wdXQiPT09YyYmVy50ZXN0KGEudHlwZSk/KGIuZGVmYXVsdENoZWNrZWQ9Yi5jaGVja2VkPWEuY2hlY2tlZCxiLnZhbHVlIT09YS52YWx1ZSYmKGIudmFsdWU9YS52YWx1ZSkpOiJvcHRpb24iPT09Yz9iLmRlZmF1bHRTZWxlY3RlZD1iLnNlbGVjdGVkPWEuZGVmYXVsdFNlbGVjdGVkOigiaW5wdXQiPT09Y3x8InRleHRhcmVhIj09PWMpJiYoYi5kZWZhdWx0VmFsdWU9YS5kZWZhdWx0VmFsdWUpfX1tLmV4dGVuZCh7Y2xvbmU6ZnVuY3Rpb24oYSxiLGMpe3ZhciBkLGUsZixnLGgsaT1tLmNvbnRhaW5zKGEub3duZXJEb2N1bWVudCxhKTtpZihrLmh0bWw1Q2xvbmV8fG0uaXNYTUxEb2MoYSl8fCFnYi50ZXN0KCI8IithLm5vZGVOYW1lKyI+Iik/Zj1hLmNsb25lTm9kZSghMCk6KHRiLmlubmVySFRNTD1hLm91dGVySFRNTCx0Yi5yZW1vdmVDaGlsZChmPXRiLmZpcnN0Q2hpbGQpKSwhKGsubm9DbG9uZUV2ZW50JiZrLm5vQ2xvbmVDaGVja2VkfHwxIT09YS5ub2RlVHlwZSYmMTEhPT1hLm5vZGVUeXBlfHxtLmlzWE1MRG9jKGEpKSlmb3IoZD11YihmKSxoPXViKGEpLGc9MDtudWxsIT0oZT1oW2ddKTsrK2cpZFtnXSYmQmIoZSxkW2ddKTtpZihiKWlmKGMpZm9yKGg9aHx8dWIoYSksZD1kfHx1YihmKSxnPTA7bnVsbCE9KGU9aFtnXSk7ZysrKUFiKGUsZFtnXSk7ZWxzZSBBYihhLGYpO3JldHVybiBkPXViKGYsInNjcmlwdCIpLGQubGVuZ3RoPjAmJnpiKGQsIWkmJnViKGEsInNjcmlwdCIpKSxkPWg9ZT1udWxsLGZ9LGJ1aWxkRnJhZ21lbnQ6ZnVuY3Rpb24oYSxiLGMsZCl7Zm9yKHZhciBlLGYsZyxoLGksaixsLG49YS5sZW5ndGgsbz1kYihiKSxwPVtdLHE9MDtuPnE7cSsrKWlmKGY9YVtxXSxmfHwwPT09ZilpZigib2JqZWN0Ij09PW0udHlwZShmKSltLm1lcmdlKHAsZi5ub2RlVHlwZT9bZl06Zik7ZWxzZSBpZihsYi50ZXN0KGYpKXtoPWh8fG8uYXBwZW5kQ2hpbGQoYi5jcmVhdGVFbGVtZW50KCJkaXYiKSksaT0oamIuZXhlYyhmKXx8WyIiLCIiXSlbMV0udG9Mb3dlckNhc2UoKSxsPXJiW2ldfHxyYi5fZGVmYXVsdCxoLmlubmVySFRNTD1sWzFdK2YucmVwbGFjZShpYiwiPCQxPjwvJDI+IikrbFsyXSxlPWxbMF07d2hpbGUoZS0tKWg9aC5sYXN0Q2hpbGQ7aWYoIWsubGVhZGluZ1doaXRlc3BhY2UmJmhiLnRlc3QoZikmJnAucHVzaChiLmNyZWF0ZVRleHROb2RlKGhiLmV4ZWMoZilbMF0pKSwhay50Ym9keSl7Zj0idGFibGUiIT09aXx8a2IudGVzdChmKT8iPHRhYmxlPiIhPT1sWzFdfHxrYi50ZXN0KGYpPzA6aDpoLmZpcnN0Q2hpbGQsZT1mJiZmLmNoaWxkTm9kZXMubGVuZ3RoO3doaWxlKGUtLSltLm5vZGVOYW1lKGo9Zi5jaGlsZE5vZGVzW2VdLCJ0Ym9keSIpJiYhai5jaGlsZE5vZGVzLmxlbmd0aCYmZi5yZW1vdmVDaGlsZChqKX1tLm1lcmdlKHAsaC5jaGlsZE5vZGVzKSxoLnRleHRDb250ZW50PSIiO3doaWxlKGguZmlyc3RDaGlsZCloLnJlbW92ZUNoaWxkKGguZmlyc3RDaGlsZCk7aD1vLmxhc3RDaGlsZH1lbHNlIHAucHVzaChiLmNyZWF0ZVRleHROb2RlKGYpKTtoJiZvLnJlbW92ZUNoaWxkKGgpLGsuYXBwZW5kQ2hlY2tlZHx8bS5ncmVwKHViKHAsImlucHV0IiksdmIpLHE9MDt3aGlsZShmPXBbcSsrXSlpZigoIWR8fC0xPT09bS5pbkFycmF5KGYsZCkpJiYoZz1tLmNvbnRhaW5zKGYub3duZXJEb2N1bWVudCxmKSxoPXViKG8uYXBwZW5kQ2hpbGQoZiksInNjcmlwdCIpLGcmJnpiKGgpLGMpKXtlPTA7d2hpbGUoZj1oW2UrK10pb2IudGVzdChmLnR5cGV8fCIiKSYmYy5wdXNoKGYpfXJldHVybiBoPW51bGwsb30sY2xlYW5EYXRhOmZ1bmN0aW9uKGEsYil7Zm9yKHZhciBkLGUsZixnLGg9MCxpPW0uZXhwYW5kbyxqPW0uY2FjaGUsbD1rLmRlbGV0ZUV4cGFuZG8sbj1tLmV2ZW50LnNwZWNpYWw7bnVsbCE9KGQ9YVtoXSk7aCsrKWlmKChifHxtLmFjY2VwdERhdGEoZCkpJiYoZj1kW2ldLGc9ZiYmaltmXSkpe2lmKGcuZXZlbnRzKWZvcihlIGluIGcuZXZlbnRzKW5bZV0/bS5ldmVudC5yZW1vdmUoZCxlKTptLnJlbW92ZUV2ZW50KGQsZSxnLmhhbmRsZSk7altmXSYmKGRlbGV0ZSBqW2ZdLGw/ZGVsZXRlIGRbaV06dHlwZW9mIGQucmVtb3ZlQXR0cmlidXRlIT09Sz9kLnJlbW92ZUF0dHJpYnV0ZShpKTpkW2ldPW51bGwsYy5wdXNoKGYpKX19fSksbS5mbi5leHRlbmQoe3RleHQ6ZnVuY3Rpb24oYSl7cmV0dXJuIFYodGhpcyxmdW5jdGlvbihhKXtyZXR1cm4gdm9pZCAwPT09YT9tLnRleHQodGhpcyk6dGhpcy5lbXB0eSgpLmFwcGVuZCgodGhpc1swXSYmdGhpc1swXS5vd25lckRvY3VtZW50fHx5KS5jcmVhdGVUZXh0Tm9kZShhKSl9LG51bGwsYSxhcmd1bWVudHMubGVuZ3RoKX0sYXBwZW5kOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZG9tTWFuaXAoYXJndW1lbnRzLGZ1bmN0aW9uKGEpe2lmKDE9PT10aGlzLm5vZGVUeXBlfHwxMT09PXRoaXMubm9kZVR5cGV8fDk9PT10aGlzLm5vZGVUeXBlKXt2YXIgYj13Yih0aGlzLGEpO2IuYXBwZW5kQ2hpbGQoYSl9fSl9LHByZXBlbmQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kb21NYW5pcChhcmd1bWVudHMsZnVuY3Rpb24oYSl7aWYoMT09PXRoaXMubm9kZVR5cGV8fDExPT09dGhpcy5ub2RlVHlwZXx8OT09PXRoaXMubm9kZVR5cGUpe3ZhciBiPXdiKHRoaXMsYSk7Yi5pbnNlcnRCZWZvcmUoYSxiLmZpcnN0Q2hpbGQpfX0pfSxiZWZvcmU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kb21NYW5pcChhcmd1bWVudHMsZnVuY3Rpb24oYSl7dGhpcy5wYXJlbnROb2RlJiZ0aGlzLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGEsdGhpcyl9KX0sYWZ0ZXI6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kb21NYW5pcChhcmd1bWVudHMsZnVuY3Rpb24oYSl7dGhpcy5wYXJlbnROb2RlJiZ0aGlzLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGEsdGhpcy5uZXh0U2libGluZyl9KX0scmVtb3ZlOmZ1bmN0aW9uKGEsYil7Zm9yKHZhciBjLGQ9YT9tLmZpbHRlcihhLHRoaXMpOnRoaXMsZT0wO251bGwhPShjPWRbZV0pO2UrKylifHwxIT09Yy5ub2RlVHlwZXx8bS5jbGVhbkRhdGEodWIoYykpLGMucGFyZW50Tm9kZSYmKGImJm0uY29udGFpbnMoYy5vd25lckRvY3VtZW50LGMpJiZ6Yih1YihjLCJzY3JpcHQiKSksYy5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGMpKTtyZXR1cm4gdGhpc30sZW1wdHk6ZnVuY3Rpb24oKXtmb3IodmFyIGEsYj0wO251bGwhPShhPXRoaXNbYl0pO2IrKyl7MT09PWEubm9kZVR5cGUmJm0uY2xlYW5EYXRhKHViKGEsITEpKTt3aGlsZShhLmZpcnN0Q2hpbGQpYS5yZW1vdmVDaGlsZChhLmZpcnN0Q2hpbGQpO2Eub3B0aW9ucyYmbS5ub2RlTmFtZShhLCJzZWxlY3QiKSYmKGEub3B0aW9ucy5sZW5ndGg9MCl9cmV0dXJuIHRoaXN9LGNsb25lOmZ1bmN0aW9uKGEsYil7cmV0dXJuIGE9bnVsbD09YT8hMTphLGI9bnVsbD09Yj9hOmIsdGhpcy5tYXAoZnVuY3Rpb24oKXtyZXR1cm4gbS5jbG9uZSh0aGlzLGEsYil9KX0saHRtbDpmdW5jdGlvbihhKXtyZXR1cm4gVih0aGlzLGZ1bmN0aW9uKGEpe3ZhciBiPXRoaXNbMF18fHt9LGM9MCxkPXRoaXMubGVuZ3RoO2lmKHZvaWQgMD09PWEpcmV0dXJuIDE9PT1iLm5vZGVUeXBlP2IuaW5uZXJIVE1MLnJlcGxhY2UoZmIsIiIpOnZvaWQgMDtpZighKCJzdHJpbmciIT10eXBlb2YgYXx8bWIudGVzdChhKXx8IWsuaHRtbFNlcmlhbGl6ZSYmZ2IudGVzdChhKXx8IWsubGVhZGluZ1doaXRlc3BhY2UmJmhiLnRlc3QoYSl8fHJiWyhqYi5leGVjKGEpfHxbIiIsIiJdKVsxXS50b0xvd2VyQ2FzZSgpXSkpe2E9YS5yZXBsYWNlKGliLCI8JDE+PC8kMj4iKTt0cnl7Zm9yKDtkPmM7YysrKWI9dGhpc1tjXXx8e30sMT09PWIubm9kZVR5cGUmJihtLmNsZWFuRGF0YSh1YihiLCExKSksYi5pbm5lckhUTUw9YSk7Yj0wfWNhdGNoKGUpe319YiYmdGhpcy5lbXB0eSgpLmFwcGVuZChhKX0sbnVsbCxhLGFyZ3VtZW50cy5sZW5ndGgpfSxyZXBsYWNlV2l0aDpmdW5jdGlvbigpe3ZhciBhPWFyZ3VtZW50c1swXTtyZXR1cm4gdGhpcy5kb21NYW5pcChhcmd1bWVudHMsZnVuY3Rpb24oYil7YT10aGlzLnBhcmVudE5vZGUsbS5jbGVhbkRhdGEodWIodGhpcykpLGEmJmEucmVwbGFjZUNoaWxkKGIsdGhpcyl9KSxhJiYoYS5sZW5ndGh8fGEubm9kZVR5cGUpP3RoaXM6dGhpcy5yZW1vdmUoKX0sZGV0YWNoOmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLnJlbW92ZShhLCEwKX0sZG9tTWFuaXA6ZnVuY3Rpb24oYSxiKXthPWUuYXBwbHkoW10sYSk7dmFyIGMsZCxmLGcsaCxpLGo9MCxsPXRoaXMubGVuZ3RoLG49dGhpcyxvPWwtMSxwPWFbMF0scT1tLmlzRnVuY3Rpb24ocCk7aWYocXx8bD4xJiYic3RyaW5nIj09dHlwZW9mIHAmJiFrLmNoZWNrQ2xvbmUmJm5iLnRlc3QocCkpcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbihjKXt2YXIgZD1uLmVxKGMpO3EmJihhWzBdPXAuY2FsbCh0aGlzLGMsZC5odG1sKCkpKSxkLmRvbU1hbmlwKGEsYil9KTtpZihsJiYoaT1tLmJ1aWxkRnJhZ21lbnQoYSx0aGlzWzBdLm93bmVyRG9jdW1lbnQsITEsdGhpcyksYz1pLmZpcnN0Q2hpbGQsMT09PWkuY2hpbGROb2Rlcy5sZW5ndGgmJihpPWMpLGMpKXtmb3IoZz1tLm1hcCh1YihpLCJzY3JpcHQiKSx4YiksZj1nLmxlbmd0aDtsPmo7aisrKWQ9aSxqIT09byYmKGQ9bS5jbG9uZShkLCEwLCEwKSxmJiZtLm1lcmdlKGcsdWIoZCwic2NyaXB0IikpKSxiLmNhbGwodGhpc1tqXSxkLGopO2lmKGYpZm9yKGg9Z1tnLmxlbmd0aC0xXS5vd25lckRvY3VtZW50LG0ubWFwKGcseWIpLGo9MDtmPmo7aisrKWQ9Z1tqXSxvYi50ZXN0KGQudHlwZXx8IiIpJiYhbS5fZGF0YShkLCJnbG9iYWxFdmFsIikmJm0uY29udGFpbnMoaCxkKSYmKGQuc3JjP20uX2V2YWxVcmwmJm0uX2V2YWxVcmwoZC5zcmMpOm0uZ2xvYmFsRXZhbCgoZC50ZXh0fHxkLnRleHRDb250ZW50fHxkLmlubmVySFRNTHx8IiIpLnJlcGxhY2UocWIsIiIpKSk7aT1jPW51bGx9cmV0dXJuIHRoaXN9fSksbS5lYWNoKHthcHBlbmRUbzoiYXBwZW5kIixwcmVwZW5kVG86InByZXBlbmQiLGluc2VydEJlZm9yZToiYmVmb3JlIixpbnNlcnRBZnRlcjoiYWZ0ZXIiLHJlcGxhY2VBbGw6InJlcGxhY2VXaXRoIn0sZnVuY3Rpb24oYSxiKXttLmZuW2FdPWZ1bmN0aW9uKGEpe2Zvcih2YXIgYyxkPTAsZT1bXSxnPW0oYSksaD1nLmxlbmd0aC0xO2g+PWQ7ZCsrKWM9ZD09PWg/dGhpczp0aGlzLmNsb25lKCEwKSxtKGdbZF0pW2JdKGMpLGYuYXBwbHkoZSxjLmdldCgpKTtyZXR1cm4gdGhpcy5wdXNoU3RhY2soZSl9fSk7dmFyIENiLERiPXt9O2Z1bmN0aW9uIEViKGIsYyl7dmFyIGQsZT1tKGMuY3JlYXRlRWxlbWVudChiKSkuYXBwZW5kVG8oYy5ib2R5KSxmPWEuZ2V0RGVmYXVsdENvbXB1dGVkU3R5bGUmJihkPWEuZ2V0RGVmYXVsdENvbXB1dGVkU3R5bGUoZVswXSkpP2QuZGlzcGxheTptLmNzcyhlWzBdLCJkaXNwbGF5Iik7cmV0dXJuIGUuZGV0YWNoKCksZn1mdW5jdGlvbiBGYihhKXt2YXIgYj15LGM9RGJbYV07cmV0dXJuIGN8fChjPUViKGEsYiksIm5vbmUiIT09YyYmY3x8KENiPShDYnx8bSgiPGlmcmFtZSBmcmFtZWJvcmRlcj0nMCcgd2lkdGg9JzAnIGhlaWdodD0nMCcvPiIpKS5hcHBlbmRUbyhiLmRvY3VtZW50RWxlbWVudCksYj0oQ2JbMF0uY29udGVudFdpbmRvd3x8Q2JbMF0uY29udGVudERvY3VtZW50KS5kb2N1bWVudCxiLndyaXRlKCksYi5jbG9zZSgpLGM9RWIoYSxiKSxDYi5kZXRhY2goKSksRGJbYV09YyksY30hZnVuY3Rpb24oKXt2YXIgYTtrLnNocmlua1dyYXBCbG9ja3M9ZnVuY3Rpb24oKXtpZihudWxsIT1hKXJldHVybiBhO2E9ITE7dmFyIGIsYyxkO3JldHVybiBjPXkuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImJvZHkiKVswXSxjJiZjLnN0eWxlPyhiPXkuY3JlYXRlRWxlbWVudCgiZGl2IiksZD15LmNyZWF0ZUVsZW1lbnQoImRpdiIpLGQuc3R5bGUuY3NzVGV4dD0icG9zaXRpb246YWJzb2x1dGU7Ym9yZGVyOjA7d2lkdGg6MDtoZWlnaHQ6MDt0b3A6MDtsZWZ0Oi05OTk5cHgiLGMuYXBwZW5kQ2hpbGQoZCkuYXBwZW5kQ2hpbGQoYiksdHlwZW9mIGIuc3R5bGUuem9vbSE9PUsmJihiLnN0eWxlLmNzc1RleHQ9Ii13ZWJraXQtYm94LXNpemluZzpjb250ZW50LWJveDstbW96LWJveC1zaXppbmc6Y29udGVudC1ib3g7Ym94LXNpemluZzpjb250ZW50LWJveDtkaXNwbGF5OmJsb2NrO21hcmdpbjowO2JvcmRlcjowO3BhZGRpbmc6MXB4O3dpZHRoOjFweDt6b29tOjEiLGIuYXBwZW5kQ2hpbGQoeS5jcmVhdGVFbGVtZW50KCJkaXYiKSkuc3R5bGUud2lkdGg9IjVweCIsYT0zIT09Yi5vZmZzZXRXaWR0aCksYy5yZW1vdmVDaGlsZChkKSxhKTp2b2lkIDB9fSgpO3ZhciBHYj0vXm1hcmdpbi8sSGI9bmV3IFJlZ0V4cCgiXigiK1MrIikoPyFweClbYS16JV0rJCIsImkiKSxJYixKYixLYj0vXih0b3B8cmlnaHR8Ym90dG9tfGxlZnQpJC87YS5nZXRDb21wdXRlZFN0eWxlPyhJYj1mdW5jdGlvbihhKXtyZXR1cm4gYS5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3LmdldENvbXB1dGVkU3R5bGUoYSxudWxsKX0sSmI9ZnVuY3Rpb24oYSxiLGMpe3ZhciBkLGUsZixnLGg9YS5zdHlsZTtyZXR1cm4gYz1jfHxJYihhKSxnPWM/Yy5nZXRQcm9wZXJ0eVZhbHVlKGIpfHxjW2JdOnZvaWQgMCxjJiYoIiIhPT1nfHxtLmNvbnRhaW5zKGEub3duZXJEb2N1bWVudCxhKXx8KGc9bS5zdHlsZShhLGIpKSxIYi50ZXN0KGcpJiZHYi50ZXN0KGIpJiYoZD1oLndpZHRoLGU9aC5taW5XaWR0aCxmPWgubWF4V2lkdGgsaC5taW5XaWR0aD1oLm1heFdpZHRoPWgud2lkdGg9ZyxnPWMud2lkdGgsaC53aWR0aD1kLGgubWluV2lkdGg9ZSxoLm1heFdpZHRoPWYpKSx2b2lkIDA9PT1nP2c6ZysiIn0pOnkuZG9jdW1lbnRFbGVtZW50LmN1cnJlbnRTdHlsZSYmKEliPWZ1bmN0aW9uKGEpe3JldHVybiBhLmN1cnJlbnRTdHlsZX0sSmI9ZnVuY3Rpb24oYSxiLGMpe3ZhciBkLGUsZixnLGg9YS5zdHlsZTtyZXR1cm4gYz1jfHxJYihhKSxnPWM/Y1tiXTp2b2lkIDAsbnVsbD09ZyYmaCYmaFtiXSYmKGc9aFtiXSksSGIudGVzdChnKSYmIUtiLnRlc3QoYikmJihkPWgubGVmdCxlPWEucnVudGltZVN0eWxlLGY9ZSYmZS5sZWZ0LGYmJihlLmxlZnQ9YS5jdXJyZW50U3R5bGUubGVmdCksaC5sZWZ0PSJmb250U2l6ZSI9PT1iPyIxZW0iOmcsZz1oLnBpeGVsTGVmdCsicHgiLGgubGVmdD1kLGYmJihlLmxlZnQ9ZikpLHZvaWQgMD09PWc/ZzpnKyIifHwiYXV0byJ9KTtmdW5jdGlvbiBMYihhLGIpe3JldHVybntnZXQ6ZnVuY3Rpb24oKXt2YXIgYz1hKCk7aWYobnVsbCE9YylyZXR1cm4gYz92b2lkIGRlbGV0ZSB0aGlzLmdldDoodGhpcy5nZXQ9YikuYXBwbHkodGhpcyxhcmd1bWVudHMpfX19IWZ1bmN0aW9uKCl7dmFyIGIsYyxkLGUsZixnLGg7aWYoYj15LmNyZWF0ZUVsZW1lbnQoImRpdiIpLGIuaW5uZXJIVE1MPSIgIDxsaW5rLz48dGFibGU+PC90YWJsZT48YSBocmVmPScvYSc+YTwvYT48aW5wdXQgdHlwZT0nY2hlY2tib3gnLz4iLGQ9Yi5nZXRFbGVtZW50c0J5VGFnTmFtZSgiYSIpWzBdLGM9ZCYmZC5zdHlsZSl7Yy5jc3NUZXh0PSJmbG9hdDpsZWZ0O29wYWNpdHk6LjUiLGsub3BhY2l0eT0iMC41Ij09PWMub3BhY2l0eSxrLmNzc0Zsb2F0PSEhYy5jc3NGbG9hdCxiLnN0eWxlLmJhY2tncm91bmRDbGlwPSJjb250ZW50LWJveCIsYi5jbG9uZU5vZGUoITApLnN0eWxlLmJhY2tncm91bmRDbGlwPSIiLGsuY2xlYXJDbG9uZVN0eWxlPSJjb250ZW50LWJveCI9PT1iLnN0eWxlLmJhY2tncm91bmRDbGlwLGsuYm94U2l6aW5nPSIiPT09Yy5ib3hTaXppbmd8fCIiPT09Yy5Nb3pCb3hTaXppbmd8fCIiPT09Yy5XZWJraXRCb3hTaXppbmcsbS5leHRlbmQoayx7cmVsaWFibGVIaWRkZW5PZmZzZXRzOmZ1bmN0aW9uKCl7cmV0dXJuIG51bGw9PWcmJmkoKSxnfSxib3hTaXppbmdSZWxpYWJsZTpmdW5jdGlvbigpe3JldHVybiBudWxsPT1mJiZpKCksZn0scGl4ZWxQb3NpdGlvbjpmdW5jdGlvbigpe3JldHVybiBudWxsPT1lJiZpKCksZX0scmVsaWFibGVNYXJnaW5SaWdodDpmdW5jdGlvbigpe3JldHVybiBudWxsPT1oJiZpKCksaH19KTtmdW5jdGlvbiBpKCl7dmFyIGIsYyxkLGk7Yz15LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJib2R5IilbMF0sYyYmYy5zdHlsZSYmKGI9eS5jcmVhdGVFbGVtZW50KCJkaXYiKSxkPXkuY3JlYXRlRWxlbWVudCgiZGl2IiksZC5zdHlsZS5jc3NUZXh0PSJwb3NpdGlvbjphYnNvbHV0ZTtib3JkZXI6MDt3aWR0aDowO2hlaWdodDowO3RvcDowO2xlZnQ6LTk5OTlweCIsYy5hcHBlbmRDaGlsZChkKS5hcHBlbmRDaGlsZChiKSxiLnN0eWxlLmNzc1RleHQ9Ii13ZWJraXQtYm94LXNpemluZzpib3JkZXItYm94Oy1tb3otYm94LXNpemluZzpib3JkZXItYm94O2JveC1zaXppbmc6Ym9yZGVyLWJveDtkaXNwbGF5OmJsb2NrO21hcmdpbi10b3A6MSU7dG9wOjElO2JvcmRlcjoxcHg7cGFkZGluZzoxcHg7d2lkdGg6NHB4O3Bvc2l0aW9uOmFic29sdXRlIixlPWY9ITEsaD0hMCxhLmdldENvbXB1dGVkU3R5bGUmJihlPSIxJSIhPT0oYS5nZXRDb21wdXRlZFN0eWxlKGIsbnVsbCl8fHt9KS50b3AsZj0iNHB4Ij09PShhLmdldENvbXB1dGVkU3R5bGUoYixudWxsKXx8e3dpZHRoOiI0cHgifSkud2lkdGgsaT1iLmFwcGVuZENoaWxkKHkuY3JlYXRlRWxlbWVudCgiZGl2IikpLGkuc3R5bGUuY3NzVGV4dD1iLnN0eWxlLmNzc1RleHQ9Ii13ZWJraXQtYm94LXNpemluZzpjb250ZW50LWJveDstbW96LWJveC1zaXppbmc6Y29udGVudC1ib3g7Ym94LXNpemluZzpjb250ZW50LWJveDtkaXNwbGF5OmJsb2NrO21hcmdpbjowO2JvcmRlcjowO3BhZGRpbmc6MCIsaS5zdHlsZS5tYXJnaW5SaWdodD1pLnN0eWxlLndpZHRoPSIwIixiLnN0eWxlLndpZHRoPSIxcHgiLGg9IXBhcnNlRmxvYXQoKGEuZ2V0Q29tcHV0ZWRTdHlsZShpLG51bGwpfHx7fSkubWFyZ2luUmlnaHQpKSxiLmlubmVySFRNTD0iPHRhYmxlPjx0cj48dGQ+PC90ZD48dGQ+dDwvdGQ+PC90cj48L3RhYmxlPiIsaT1iLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJ0ZCIpLGlbMF0uc3R5bGUuY3NzVGV4dD0ibWFyZ2luOjA7Ym9yZGVyOjA7cGFkZGluZzowO2Rpc3BsYXk6bm9uZSIsZz0wPT09aVswXS5vZmZzZXRIZWlnaHQsZyYmKGlbMF0uc3R5bGUuZGlzcGxheT0iIixpWzFdLnN0eWxlLmRpc3BsYXk9Im5vbmUiLGc9MD09PWlbMF0ub2Zmc2V0SGVpZ2h0KSxjLnJlbW92ZUNoaWxkKGQpKX19fSgpLG0uc3dhcD1mdW5jdGlvbihhLGIsYyxkKXt2YXIgZSxmLGc9e307Zm9yKGYgaW4gYilnW2ZdPWEuc3R5bGVbZl0sYS5zdHlsZVtmXT1iW2ZdO2U9Yy5hcHBseShhLGR8fFtdKTtmb3IoZiBpbiBiKWEuc3R5bGVbZl09Z1tmXTtyZXR1cm4gZX07dmFyIE1iPS9hbHBoYVwoW14pXSpcKS9pLE5iPS9vcGFjaXR5XHMqPVxzKihbXildKikvLE9iPS9eKG5vbmV8dGFibGUoPyEtY1tlYV0pLispLyxQYj1uZXcgUmVnRXhwKCJeKCIrUysiKSguKikkIiwiaSIpLFFiPW5ldyBSZWdFeHAoIl4oWystXSk9KCIrUysiKSIsImkiKSxSYj17cG9zaXRpb246ImFic29sdXRlIix2aXNpYmlsaXR5OiJoaWRkZW4iLGRpc3BsYXk6ImJsb2NrIn0sU2I9e2xldHRlclNwYWNpbmc6IjAiLGZvbnRXZWlnaHQ6IjQwMCJ9LFRiPVsiV2Via2l0IiwiTyIsIk1veiIsIm1zIl07ZnVuY3Rpb24gVWIoYSxiKXtpZihiIGluIGEpcmV0dXJuIGI7dmFyIGM9Yi5jaGFyQXQoMCkudG9VcHBlckNhc2UoKStiLnNsaWNlKDEpLGQ9YixlPVRiLmxlbmd0aDt3aGlsZShlLS0paWYoYj1UYltlXStjLGIgaW4gYSlyZXR1cm4gYjtyZXR1cm4gZH1mdW5jdGlvbiBWYihhLGIpe2Zvcih2YXIgYyxkLGUsZj1bXSxnPTAsaD1hLmxlbmd0aDtoPmc7ZysrKWQ9YVtnXSxkLnN0eWxlJiYoZltnXT1tLl9kYXRhKGQsIm9sZGRpc3BsYXkiKSxjPWQuc3R5bGUuZGlzcGxheSxiPyhmW2ddfHwibm9uZSIhPT1jfHwoZC5zdHlsZS5kaXNwbGF5PSIiKSwiIj09PWQuc3R5bGUuZGlzcGxheSYmVShkKSYmKGZbZ109bS5fZGF0YShkLCJvbGRkaXNwbGF5IixGYihkLm5vZGVOYW1lKSkpKTooZT1VKGQpLChjJiYibm9uZSIhPT1jfHwhZSkmJm0uX2RhdGEoZCwib2xkZGlzcGxheSIsZT9jOm0uY3NzKGQsImRpc3BsYXkiKSkpKTtmb3IoZz0wO2g+ZztnKyspZD1hW2ddLGQuc3R5bGUmJihiJiYibm9uZSIhPT1kLnN0eWxlLmRpc3BsYXkmJiIiIT09ZC5zdHlsZS5kaXNwbGF5fHwoZC5zdHlsZS5kaXNwbGF5PWI/ZltnXXx8IiI6Im5vbmUiKSk7cmV0dXJuIGF9ZnVuY3Rpb24gV2IoYSxiLGMpe3ZhciBkPVBiLmV4ZWMoYik7cmV0dXJuIGQ/TWF0aC5tYXgoMCxkWzFdLShjfHwwKSkrKGRbMl18fCJweCIpOmJ9ZnVuY3Rpb24gWGIoYSxiLGMsZCxlKXtmb3IodmFyIGY9Yz09PShkPyJib3JkZXIiOiJjb250ZW50Iik/NDoid2lkdGgiPT09Yj8xOjAsZz0wOzQ+ZjtmKz0yKSJtYXJnaW4iPT09YyYmKGcrPW0uY3NzKGEsYytUW2ZdLCEwLGUpKSxkPygiY29udGVudCI9PT1jJiYoZy09bS5jc3MoYSwicGFkZGluZyIrVFtmXSwhMCxlKSksIm1hcmdpbiIhPT1jJiYoZy09bS5jc3MoYSwiYm9yZGVyIitUW2ZdKyJXaWR0aCIsITAsZSkpKTooZys9bS5jc3MoYSwicGFkZGluZyIrVFtmXSwhMCxlKSwicGFkZGluZyIhPT1jJiYoZys9bS5jc3MoYSwiYm9yZGVyIitUW2ZdKyJXaWR0aCIsITAsZSkpKTtyZXR1cm4gZ31mdW5jdGlvbiBZYihhLGIsYyl7dmFyIGQ9ITAsZT0id2lkdGgiPT09Yj9hLm9mZnNldFdpZHRoOmEub2Zmc2V0SGVpZ2h0LGY9SWIoYSksZz1rLmJveFNpemluZyYmImJvcmRlci1ib3giPT09bS5jc3MoYSwiYm94U2l6aW5nIiwhMSxmKTtpZigwPj1lfHxudWxsPT1lKXtpZihlPUpiKGEsYixmKSwoMD5lfHxudWxsPT1lKSYmKGU9YS5zdHlsZVtiXSksSGIudGVzdChlKSlyZXR1cm4gZTtkPWcmJihrLmJveFNpemluZ1JlbGlhYmxlKCl8fGU9PT1hLnN0eWxlW2JdKSxlPXBhcnNlRmxvYXQoZSl8fDB9cmV0dXJuIGUrWGIoYSxiLGN8fChnPyJib3JkZXIiOiJjb250ZW50IiksZCxmKSsicHgifW0uZXh0ZW5kKHtjc3NIb29rczp7b3BhY2l0eTp7Z2V0OmZ1bmN0aW9uKGEsYil7aWYoYil7dmFyIGM9SmIoYSwib3BhY2l0eSIpO3JldHVybiIiPT09Yz8iMSI6Y319fX0sY3NzTnVtYmVyOntjb2x1bW5Db3VudDohMCxmaWxsT3BhY2l0eTohMCxmbGV4R3JvdzohMCxmbGV4U2hyaW5rOiEwLGZvbnRXZWlnaHQ6ITAsbGluZUhlaWdodDohMCxvcGFjaXR5OiEwLG9yZGVyOiEwLG9ycGhhbnM6ITAsd2lkb3dzOiEwLHpJbmRleDohMCx6b29tOiEwfSxjc3NQcm9wczp7ImZsb2F0IjprLmNzc0Zsb2F0PyJjc3NGbG9hdCI6InN0eWxlRmxvYXQifSxzdHlsZTpmdW5jdGlvbihhLGIsYyxkKXtpZihhJiYzIT09YS5ub2RlVHlwZSYmOCE9PWEubm9kZVR5cGUmJmEuc3R5bGUpe3ZhciBlLGYsZyxoPW0uY2FtZWxDYXNlKGIpLGk9YS5zdHlsZTtpZihiPW0uY3NzUHJvcHNbaF18fChtLmNzc1Byb3BzW2hdPVViKGksaCkpLGc9bS5jc3NIb29rc1tiXXx8bS5jc3NIb29rc1toXSx2b2lkIDA9PT1jKXJldHVybiBnJiYiZ2V0ImluIGcmJnZvaWQgMCE9PShlPWcuZ2V0KGEsITEsZCkpP2U6aVtiXTtpZihmPXR5cGVvZiBjLCJzdHJpbmciPT09ZiYmKGU9UWIuZXhlYyhjKSkmJihjPShlWzFdKzEpKmVbMl0rcGFyc2VGbG9hdChtLmNzcyhhLGIpKSxmPSJudW1iZXIiKSxudWxsIT1jJiZjPT09YyYmKCJudW1iZXIiIT09Znx8bS5jc3NOdW1iZXJbaF18fChjKz0icHgiKSxrLmNsZWFyQ2xvbmVTdHlsZXx8IiIhPT1jfHwwIT09Yi5pbmRleE9mKCJiYWNrZ3JvdW5kIil8fChpW2JdPSJpbmhlcml0IiksIShnJiYic2V0ImluIGcmJnZvaWQgMD09PShjPWcuc2V0KGEsYyxkKSkpKSl0cnl7aVtiXT1jfWNhdGNoKGope319fSxjc3M6ZnVuY3Rpb24oYSxiLGMsZCl7dmFyIGUsZixnLGg9bS5jYW1lbENhc2UoYik7cmV0dXJuIGI9bS5jc3NQcm9wc1toXXx8KG0uY3NzUHJvcHNbaF09VWIoYS5zdHlsZSxoKSksZz1tLmNzc0hvb2tzW2JdfHxtLmNzc0hvb2tzW2hdLGcmJiJnZXQiaW4gZyYmKGY9Zy5nZXQoYSwhMCxjKSksdm9pZCAwPT09ZiYmKGY9SmIoYSxiLGQpKSwibm9ybWFsIj09PWYmJmIgaW4gU2ImJihmPVNiW2JdKSwiIj09PWN8fGM/KGU9cGFyc2VGbG9hdChmKSxjPT09ITB8fG0uaXNOdW1lcmljKGUpP2V8fDA6Zik6Zn19KSxtLmVhY2goWyJoZWlnaHQiLCJ3aWR0aCJdLGZ1bmN0aW9uKGEsYil7bS5jc3NIb29rc1tiXT17Z2V0OmZ1bmN0aW9uKGEsYyxkKXtyZXR1cm4gYz9PYi50ZXN0KG0uY3NzKGEsImRpc3BsYXkiKSkmJjA9PT1hLm9mZnNldFdpZHRoP20uc3dhcChhLFJiLGZ1bmN0aW9uKCl7cmV0dXJuIFliKGEsYixkKX0pOlliKGEsYixkKTp2b2lkIDB9LHNldDpmdW5jdGlvbihhLGMsZCl7dmFyIGU9ZCYmSWIoYSk7cmV0dXJuIFdiKGEsYyxkP1hiKGEsYixkLGsuYm94U2l6aW5nJiYiYm9yZGVyLWJveCI9PT1tLmNzcyhhLCJib3hTaXppbmciLCExLGUpLGUpOjApfX19KSxrLm9wYWNpdHl8fChtLmNzc0hvb2tzLm9wYWNpdHk9e2dldDpmdW5jdGlvbihhLGIpe3JldHVybiBOYi50ZXN0KChiJiZhLmN1cnJlbnRTdHlsZT9hLmN1cnJlbnRTdHlsZS5maWx0ZXI6YS5zdHlsZS5maWx0ZXIpfHwiIik/LjAxKnBhcnNlRmxvYXQoUmVnRXhwLiQxKSsiIjpiPyIxIjoiIn0sc2V0OmZ1bmN0aW9uKGEsYil7dmFyIGM9YS5zdHlsZSxkPWEuY3VycmVudFN0eWxlLGU9bS5pc051bWVyaWMoYik/ImFscGhhKG9wYWNpdHk9IisxMDAqYisiKSI6IiIsZj1kJiZkLmZpbHRlcnx8Yy5maWx0ZXJ8fCIiO2Muem9vbT0xLChiPj0xfHwiIj09PWIpJiYiIj09PW0udHJpbShmLnJlcGxhY2UoTWIsIiIpKSYmYy5yZW1vdmVBdHRyaWJ1dGUmJihjLnJlbW92ZUF0dHJpYnV0ZSgiZmlsdGVyIiksIiI9PT1ifHxkJiYhZC5maWx0ZXIpfHwoYy5maWx0ZXI9TWIudGVzdChmKT9mLnJlcGxhY2UoTWIsZSk6ZisiICIrZSl9fSksbS5jc3NIb29rcy5tYXJnaW5SaWdodD1MYihrLnJlbGlhYmxlTWFyZ2luUmlnaHQsZnVuY3Rpb24oYSxiKXtyZXR1cm4gYj9tLnN3YXAoYSx7ZGlzcGxheToiaW5saW5lLWJsb2NrIn0sSmIsW2EsIm1hcmdpblJpZ2h0Il0pOnZvaWQgMH0pLG0uZWFjaCh7bWFyZ2luOiIiLHBhZGRpbmc6IiIsYm9yZGVyOiJXaWR0aCJ9LGZ1bmN0aW9uKGEsYil7bS5jc3NIb29rc1thK2JdPXtleHBhbmQ6ZnVuY3Rpb24oYyl7Zm9yKHZhciBkPTAsZT17fSxmPSJzdHJpbmciPT10eXBlb2YgYz9jLnNwbGl0KCIgIik6W2NdOzQ+ZDtkKyspZVthK1RbZF0rYl09ZltkXXx8ZltkLTJdfHxmWzBdO3JldHVybiBlfX0sR2IudGVzdChhKXx8KG0uY3NzSG9va3NbYStiXS5zZXQ9V2IpfSksbS5mbi5leHRlbmQoe2NzczpmdW5jdGlvbihhLGIpe3JldHVybiBWKHRoaXMsZnVuY3Rpb24oYSxiLGMpe3ZhciBkLGUsZj17fSxnPTA7aWYobS5pc0FycmF5KGIpKXtmb3IoZD1JYihhKSxlPWIubGVuZ3RoO2U+ZztnKyspZltiW2ddXT1tLmNzcyhhLGJbZ10sITEsZCk7cmV0dXJuIGZ9cmV0dXJuIHZvaWQgMCE9PWM/bS5zdHlsZShhLGIsYyk6bS5jc3MoYSxiKX0sYSxiLGFyZ3VtZW50cy5sZW5ndGg+MSl9LHNob3c6ZnVuY3Rpb24oKXtyZXR1cm4gVmIodGhpcywhMCl9LGhpZGU6ZnVuY3Rpb24oKXtyZXR1cm4gVmIodGhpcyl9LHRvZ2dsZTpmdW5jdGlvbihhKXtyZXR1cm4iYm9vbGVhbiI9PXR5cGVvZiBhP2E/dGhpcy5zaG93KCk6dGhpcy5oaWRlKCk6dGhpcy5lYWNoKGZ1bmN0aW9uKCl7VSh0aGlzKT9tKHRoaXMpLnNob3coKTptKHRoaXMpLmhpZGUoKX0pfX0pO2Z1bmN0aW9uIFpiKGEsYixjLGQsZSl7cmV0dXJuIG5ldyBaYi5wcm90b3R5cGUuaW5pdChhLGIsYyxkLGUpfW0uVHdlZW49WmIsWmIucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpaYixpbml0OmZ1bmN0aW9uKGEsYixjLGQsZSxmKXt0aGlzLmVsZW09YSx0aGlzLnByb3A9Yyx0aGlzLmVhc2luZz1lfHwic3dpbmciLHRoaXMub3B0aW9ucz1iLHRoaXMuc3RhcnQ9dGhpcy5ub3c9dGhpcy5jdXIoKSx0aGlzLmVuZD1kLHRoaXMudW5pdD1mfHwobS5jc3NOdW1iZXJbY10/IiI6InB4IikKfSxjdXI6ZnVuY3Rpb24oKXt2YXIgYT1aYi5wcm9wSG9va3NbdGhpcy5wcm9wXTtyZXR1cm4gYSYmYS5nZXQ/YS5nZXQodGhpcyk6WmIucHJvcEhvb2tzLl9kZWZhdWx0LmdldCh0aGlzKX0scnVuOmZ1bmN0aW9uKGEpe3ZhciBiLGM9WmIucHJvcEhvb2tzW3RoaXMucHJvcF07cmV0dXJuIHRoaXMucG9zPWI9dGhpcy5vcHRpb25zLmR1cmF0aW9uP20uZWFzaW5nW3RoaXMuZWFzaW5nXShhLHRoaXMub3B0aW9ucy5kdXJhdGlvbiphLDAsMSx0aGlzLm9wdGlvbnMuZHVyYXRpb24pOmEsdGhpcy5ub3c9KHRoaXMuZW5kLXRoaXMuc3RhcnQpKmIrdGhpcy5zdGFydCx0aGlzLm9wdGlvbnMuc3RlcCYmdGhpcy5vcHRpb25zLnN0ZXAuY2FsbCh0aGlzLmVsZW0sdGhpcy5ub3csdGhpcyksYyYmYy5zZXQ/Yy5zZXQodGhpcyk6WmIucHJvcEhvb2tzLl9kZWZhdWx0LnNldCh0aGlzKSx0aGlzfX0sWmIucHJvdG90eXBlLmluaXQucHJvdG90eXBlPVpiLnByb3RvdHlwZSxaYi5wcm9wSG9va3M9e19kZWZhdWx0OntnZXQ6ZnVuY3Rpb24oYSl7dmFyIGI7cmV0dXJuIG51bGw9PWEuZWxlbVthLnByb3BdfHxhLmVsZW0uc3R5bGUmJm51bGwhPWEuZWxlbS5zdHlsZVthLnByb3BdPyhiPW0uY3NzKGEuZWxlbSxhLnByb3AsIiIpLGImJiJhdXRvIiE9PWI/YjowKTphLmVsZW1bYS5wcm9wXX0sc2V0OmZ1bmN0aW9uKGEpe20uZnguc3RlcFthLnByb3BdP20uZnguc3RlcFthLnByb3BdKGEpOmEuZWxlbS5zdHlsZSYmKG51bGwhPWEuZWxlbS5zdHlsZVttLmNzc1Byb3BzW2EucHJvcF1dfHxtLmNzc0hvb2tzW2EucHJvcF0pP20uc3R5bGUoYS5lbGVtLGEucHJvcCxhLm5vdythLnVuaXQpOmEuZWxlbVthLnByb3BdPWEubm93fX19LFpiLnByb3BIb29rcy5zY3JvbGxUb3A9WmIucHJvcEhvb2tzLnNjcm9sbExlZnQ9e3NldDpmdW5jdGlvbihhKXthLmVsZW0ubm9kZVR5cGUmJmEuZWxlbS5wYXJlbnROb2RlJiYoYS5lbGVtW2EucHJvcF09YS5ub3cpfX0sbS5lYXNpbmc9e2xpbmVhcjpmdW5jdGlvbihhKXtyZXR1cm4gYX0sc3dpbmc6ZnVuY3Rpb24oYSl7cmV0dXJuLjUtTWF0aC5jb3MoYSpNYXRoLlBJKS8yfX0sbS5meD1aYi5wcm90b3R5cGUuaW5pdCxtLmZ4LnN0ZXA9e307dmFyICRiLF9iLGFjPS9eKD86dG9nZ2xlfHNob3d8aGlkZSkkLyxiYz1uZXcgUmVnRXhwKCJeKD86KFsrLV0pPXwpKCIrUysiKShbYS16JV0qKSQiLCJpIiksY2M9L3F1ZXVlSG9va3MkLyxkYz1baWNdLGVjPXsiKiI6W2Z1bmN0aW9uKGEsYil7dmFyIGM9dGhpcy5jcmVhdGVUd2VlbihhLGIpLGQ9Yy5jdXIoKSxlPWJjLmV4ZWMoYiksZj1lJiZlWzNdfHwobS5jc3NOdW1iZXJbYV0/IiI6InB4IiksZz0obS5jc3NOdW1iZXJbYV18fCJweCIhPT1mJiYrZCkmJmJjLmV4ZWMobS5jc3MoYy5lbGVtLGEpKSxoPTEsaT0yMDtpZihnJiZnWzNdIT09Zil7Zj1mfHxnWzNdLGU9ZXx8W10sZz0rZHx8MTtkbyBoPWh8fCIuNSIsZy89aCxtLnN0eWxlKGMuZWxlbSxhLGcrZik7d2hpbGUoaCE9PShoPWMuY3VyKCkvZCkmJjEhPT1oJiYtLWkpfXJldHVybiBlJiYoZz1jLnN0YXJ0PStnfHwrZHx8MCxjLnVuaXQ9ZixjLmVuZD1lWzFdP2crKGVbMV0rMSkqZVsyXTorZVsyXSksY31dfTtmdW5jdGlvbiBmYygpe3JldHVybiBzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7JGI9dm9pZCAwfSksJGI9bS5ub3coKX1mdW5jdGlvbiBnYyhhLGIpe3ZhciBjLGQ9e2hlaWdodDphfSxlPTA7Zm9yKGI9Yj8xOjA7ND5lO2UrPTItYiljPVRbZV0sZFsibWFyZ2luIitjXT1kWyJwYWRkaW5nIitjXT1hO3JldHVybiBiJiYoZC5vcGFjaXR5PWQud2lkdGg9YSksZH1mdW5jdGlvbiBoYyhhLGIsYyl7Zm9yKHZhciBkLGU9KGVjW2JdfHxbXSkuY29uY2F0KGVjWyIqIl0pLGY9MCxnPWUubGVuZ3RoO2c+ZjtmKyspaWYoZD1lW2ZdLmNhbGwoYyxiLGEpKXJldHVybiBkfWZ1bmN0aW9uIGljKGEsYixjKXt2YXIgZCxlLGYsZyxoLGksaixsLG49dGhpcyxvPXt9LHA9YS5zdHlsZSxxPWEubm9kZVR5cGUmJlUoYSkscj1tLl9kYXRhKGEsImZ4c2hvdyIpO2MucXVldWV8fChoPW0uX3F1ZXVlSG9va3MoYSwiZngiKSxudWxsPT1oLnVucXVldWVkJiYoaC51bnF1ZXVlZD0wLGk9aC5lbXB0eS5maXJlLGguZW1wdHkuZmlyZT1mdW5jdGlvbigpe2gudW5xdWV1ZWR8fGkoKX0pLGgudW5xdWV1ZWQrKyxuLmFsd2F5cyhmdW5jdGlvbigpe24uYWx3YXlzKGZ1bmN0aW9uKCl7aC51bnF1ZXVlZC0tLG0ucXVldWUoYSwiZngiKS5sZW5ndGh8fGguZW1wdHkuZmlyZSgpfSl9KSksMT09PWEubm9kZVR5cGUmJigiaGVpZ2h0ImluIGJ8fCJ3aWR0aCJpbiBiKSYmKGMub3ZlcmZsb3c9W3Aub3ZlcmZsb3cscC5vdmVyZmxvd1gscC5vdmVyZmxvd1ldLGo9bS5jc3MoYSwiZGlzcGxheSIpLGw9Im5vbmUiPT09aj9tLl9kYXRhKGEsIm9sZGRpc3BsYXkiKXx8RmIoYS5ub2RlTmFtZSk6aiwiaW5saW5lIj09PWwmJiJub25lIj09PW0uY3NzKGEsImZsb2F0IikmJihrLmlubGluZUJsb2NrTmVlZHNMYXlvdXQmJiJpbmxpbmUiIT09RmIoYS5ub2RlTmFtZSk/cC56b29tPTE6cC5kaXNwbGF5PSJpbmxpbmUtYmxvY2siKSksYy5vdmVyZmxvdyYmKHAub3ZlcmZsb3c9ImhpZGRlbiIsay5zaHJpbmtXcmFwQmxvY2tzKCl8fG4uYWx3YXlzKGZ1bmN0aW9uKCl7cC5vdmVyZmxvdz1jLm92ZXJmbG93WzBdLHAub3ZlcmZsb3dYPWMub3ZlcmZsb3dbMV0scC5vdmVyZmxvd1k9Yy5vdmVyZmxvd1syXX0pKTtmb3IoZCBpbiBiKWlmKGU9YltkXSxhYy5leGVjKGUpKXtpZihkZWxldGUgYltkXSxmPWZ8fCJ0b2dnbGUiPT09ZSxlPT09KHE/ImhpZGUiOiJzaG93Iikpe2lmKCJzaG93IiE9PWV8fCFyfHx2b2lkIDA9PT1yW2RdKWNvbnRpbnVlO3E9ITB9b1tkXT1yJiZyW2RdfHxtLnN0eWxlKGEsZCl9ZWxzZSBqPXZvaWQgMDtpZihtLmlzRW1wdHlPYmplY3QobykpImlubGluZSI9PT0oIm5vbmUiPT09aj9GYihhLm5vZGVOYW1lKTpqKSYmKHAuZGlzcGxheT1qKTtlbHNle3I/ImhpZGRlbiJpbiByJiYocT1yLmhpZGRlbik6cj1tLl9kYXRhKGEsImZ4c2hvdyIse30pLGYmJihyLmhpZGRlbj0hcSkscT9tKGEpLnNob3coKTpuLmRvbmUoZnVuY3Rpb24oKXttKGEpLmhpZGUoKX0pLG4uZG9uZShmdW5jdGlvbigpe3ZhciBiO20uX3JlbW92ZURhdGEoYSwiZnhzaG93Iik7Zm9yKGIgaW4gbyltLnN0eWxlKGEsYixvW2JdKX0pO2ZvcihkIGluIG8pZz1oYyhxP3JbZF06MCxkLG4pLGQgaW4gcnx8KHJbZF09Zy5zdGFydCxxJiYoZy5lbmQ9Zy5zdGFydCxnLnN0YXJ0PSJ3aWR0aCI9PT1kfHwiaGVpZ2h0Ij09PWQ/MTowKSl9fWZ1bmN0aW9uIGpjKGEsYil7dmFyIGMsZCxlLGYsZztmb3IoYyBpbiBhKWlmKGQ9bS5jYW1lbENhc2UoYyksZT1iW2RdLGY9YVtjXSxtLmlzQXJyYXkoZikmJihlPWZbMV0sZj1hW2NdPWZbMF0pLGMhPT1kJiYoYVtkXT1mLGRlbGV0ZSBhW2NdKSxnPW0uY3NzSG9va3NbZF0sZyYmImV4cGFuZCJpbiBnKXtmPWcuZXhwYW5kKGYpLGRlbGV0ZSBhW2RdO2ZvcihjIGluIGYpYyBpbiBhfHwoYVtjXT1mW2NdLGJbY109ZSl9ZWxzZSBiW2RdPWV9ZnVuY3Rpb24ga2MoYSxiLGMpe3ZhciBkLGUsZj0wLGc9ZGMubGVuZ3RoLGg9bS5EZWZlcnJlZCgpLmFsd2F5cyhmdW5jdGlvbigpe2RlbGV0ZSBpLmVsZW19KSxpPWZ1bmN0aW9uKCl7aWYoZSlyZXR1cm4hMTtmb3IodmFyIGI9JGJ8fGZjKCksYz1NYXRoLm1heCgwLGouc3RhcnRUaW1lK2ouZHVyYXRpb24tYiksZD1jL2ouZHVyYXRpb258fDAsZj0xLWQsZz0wLGk9ai50d2VlbnMubGVuZ3RoO2k+ZztnKyspai50d2VlbnNbZ10ucnVuKGYpO3JldHVybiBoLm5vdGlmeVdpdGgoYSxbaixmLGNdKSwxPmYmJmk/YzooaC5yZXNvbHZlV2l0aChhLFtqXSksITEpfSxqPWgucHJvbWlzZSh7ZWxlbTphLHByb3BzOm0uZXh0ZW5kKHt9LGIpLG9wdHM6bS5leHRlbmQoITAse3NwZWNpYWxFYXNpbmc6e319LGMpLG9yaWdpbmFsUHJvcGVydGllczpiLG9yaWdpbmFsT3B0aW9uczpjLHN0YXJ0VGltZTokYnx8ZmMoKSxkdXJhdGlvbjpjLmR1cmF0aW9uLHR3ZWVuczpbXSxjcmVhdGVUd2VlbjpmdW5jdGlvbihiLGMpe3ZhciBkPW0uVHdlZW4oYSxqLm9wdHMsYixjLGoub3B0cy5zcGVjaWFsRWFzaW5nW2JdfHxqLm9wdHMuZWFzaW5nKTtyZXR1cm4gai50d2VlbnMucHVzaChkKSxkfSxzdG9wOmZ1bmN0aW9uKGIpe3ZhciBjPTAsZD1iP2oudHdlZW5zLmxlbmd0aDowO2lmKGUpcmV0dXJuIHRoaXM7Zm9yKGU9ITA7ZD5jO2MrKylqLnR3ZWVuc1tjXS5ydW4oMSk7cmV0dXJuIGI/aC5yZXNvbHZlV2l0aChhLFtqLGJdKTpoLnJlamVjdFdpdGgoYSxbaixiXSksdGhpc319KSxrPWoucHJvcHM7Zm9yKGpjKGssai5vcHRzLnNwZWNpYWxFYXNpbmcpO2c+ZjtmKyspaWYoZD1kY1tmXS5jYWxsKGosYSxrLGoub3B0cykpcmV0dXJuIGQ7cmV0dXJuIG0ubWFwKGssaGMsaiksbS5pc0Z1bmN0aW9uKGoub3B0cy5zdGFydCkmJmoub3B0cy5zdGFydC5jYWxsKGEsaiksbS5meC50aW1lcihtLmV4dGVuZChpLHtlbGVtOmEsYW5pbTpqLHF1ZXVlOmoub3B0cy5xdWV1ZX0pKSxqLnByb2dyZXNzKGoub3B0cy5wcm9ncmVzcykuZG9uZShqLm9wdHMuZG9uZSxqLm9wdHMuY29tcGxldGUpLmZhaWwoai5vcHRzLmZhaWwpLmFsd2F5cyhqLm9wdHMuYWx3YXlzKX1tLkFuaW1hdGlvbj1tLmV4dGVuZChrYyx7dHdlZW5lcjpmdW5jdGlvbihhLGIpe20uaXNGdW5jdGlvbihhKT8oYj1hLGE9WyIqIl0pOmE9YS5zcGxpdCgiICIpO2Zvcih2YXIgYyxkPTAsZT1hLmxlbmd0aDtlPmQ7ZCsrKWM9YVtkXSxlY1tjXT1lY1tjXXx8W10sZWNbY10udW5zaGlmdChiKX0scHJlZmlsdGVyOmZ1bmN0aW9uKGEsYil7Yj9kYy51bnNoaWZ0KGEpOmRjLnB1c2goYSl9fSksbS5zcGVlZD1mdW5jdGlvbihhLGIsYyl7dmFyIGQ9YSYmIm9iamVjdCI9PXR5cGVvZiBhP20uZXh0ZW5kKHt9LGEpOntjb21wbGV0ZTpjfHwhYyYmYnx8bS5pc0Z1bmN0aW9uKGEpJiZhLGR1cmF0aW9uOmEsZWFzaW5nOmMmJmJ8fGImJiFtLmlzRnVuY3Rpb24oYikmJmJ9O3JldHVybiBkLmR1cmF0aW9uPW0uZngub2ZmPzA6Im51bWJlciI9PXR5cGVvZiBkLmR1cmF0aW9uP2QuZHVyYXRpb246ZC5kdXJhdGlvbiBpbiBtLmZ4LnNwZWVkcz9tLmZ4LnNwZWVkc1tkLmR1cmF0aW9uXTptLmZ4LnNwZWVkcy5fZGVmYXVsdCwobnVsbD09ZC5xdWV1ZXx8ZC5xdWV1ZT09PSEwKSYmKGQucXVldWU9ImZ4IiksZC5vbGQ9ZC5jb21wbGV0ZSxkLmNvbXBsZXRlPWZ1bmN0aW9uKCl7bS5pc0Z1bmN0aW9uKGQub2xkKSYmZC5vbGQuY2FsbCh0aGlzKSxkLnF1ZXVlJiZtLmRlcXVldWUodGhpcyxkLnF1ZXVlKX0sZH0sbS5mbi5leHRlbmQoe2ZhZGVUbzpmdW5jdGlvbihhLGIsYyxkKXtyZXR1cm4gdGhpcy5maWx0ZXIoVSkuY3NzKCJvcGFjaXR5IiwwKS5zaG93KCkuZW5kKCkuYW5pbWF0ZSh7b3BhY2l0eTpifSxhLGMsZCl9LGFuaW1hdGU6ZnVuY3Rpb24oYSxiLGMsZCl7dmFyIGU9bS5pc0VtcHR5T2JqZWN0KGEpLGY9bS5zcGVlZChiLGMsZCksZz1mdW5jdGlvbigpe3ZhciBiPWtjKHRoaXMsbS5leHRlbmQoe30sYSksZik7KGV8fG0uX2RhdGEodGhpcywiZmluaXNoIikpJiZiLnN0b3AoITApfTtyZXR1cm4gZy5maW5pc2g9ZyxlfHxmLnF1ZXVlPT09ITE/dGhpcy5lYWNoKGcpOnRoaXMucXVldWUoZi5xdWV1ZSxnKX0sc3RvcDpmdW5jdGlvbihhLGIsYyl7dmFyIGQ9ZnVuY3Rpb24oYSl7dmFyIGI9YS5zdG9wO2RlbGV0ZSBhLnN0b3AsYihjKX07cmV0dXJuInN0cmluZyIhPXR5cGVvZiBhJiYoYz1iLGI9YSxhPXZvaWQgMCksYiYmYSE9PSExJiZ0aGlzLnF1ZXVlKGF8fCJmeCIsW10pLHRoaXMuZWFjaChmdW5jdGlvbigpe3ZhciBiPSEwLGU9bnVsbCE9YSYmYSsicXVldWVIb29rcyIsZj1tLnRpbWVycyxnPW0uX2RhdGEodGhpcyk7aWYoZSlnW2VdJiZnW2VdLnN0b3AmJmQoZ1tlXSk7ZWxzZSBmb3IoZSBpbiBnKWdbZV0mJmdbZV0uc3RvcCYmY2MudGVzdChlKSYmZChnW2VdKTtmb3IoZT1mLmxlbmd0aDtlLS07KWZbZV0uZWxlbSE9PXRoaXN8fG51bGwhPWEmJmZbZV0ucXVldWUhPT1hfHwoZltlXS5hbmltLnN0b3AoYyksYj0hMSxmLnNwbGljZShlLDEpKTsoYnx8IWMpJiZtLmRlcXVldWUodGhpcyxhKX0pfSxmaW5pc2g6ZnVuY3Rpb24oYSl7cmV0dXJuIGEhPT0hMSYmKGE9YXx8ImZ4IiksdGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIGIsYz1tLl9kYXRhKHRoaXMpLGQ9Y1thKyJxdWV1ZSJdLGU9Y1thKyJxdWV1ZUhvb2tzIl0sZj1tLnRpbWVycyxnPWQ/ZC5sZW5ndGg6MDtmb3IoYy5maW5pc2g9ITAsbS5xdWV1ZSh0aGlzLGEsW10pLGUmJmUuc3RvcCYmZS5zdG9wLmNhbGwodGhpcywhMCksYj1mLmxlbmd0aDtiLS07KWZbYl0uZWxlbT09PXRoaXMmJmZbYl0ucXVldWU9PT1hJiYoZltiXS5hbmltLnN0b3AoITApLGYuc3BsaWNlKGIsMSkpO2ZvcihiPTA7Zz5iO2IrKylkW2JdJiZkW2JdLmZpbmlzaCYmZFtiXS5maW5pc2guY2FsbCh0aGlzKTtkZWxldGUgYy5maW5pc2h9KX19KSxtLmVhY2goWyJ0b2dnbGUiLCJzaG93IiwiaGlkZSJdLGZ1bmN0aW9uKGEsYil7dmFyIGM9bS5mbltiXTttLmZuW2JdPWZ1bmN0aW9uKGEsZCxlKXtyZXR1cm4gbnVsbD09YXx8ImJvb2xlYW4iPT10eXBlb2YgYT9jLmFwcGx5KHRoaXMsYXJndW1lbnRzKTp0aGlzLmFuaW1hdGUoZ2MoYiwhMCksYSxkLGUpfX0pLG0uZWFjaCh7c2xpZGVEb3duOmdjKCJzaG93Iiksc2xpZGVVcDpnYygiaGlkZSIpLHNsaWRlVG9nZ2xlOmdjKCJ0b2dnbGUiKSxmYWRlSW46e29wYWNpdHk6InNob3cifSxmYWRlT3V0OntvcGFjaXR5OiJoaWRlIn0sZmFkZVRvZ2dsZTp7b3BhY2l0eToidG9nZ2xlIn19LGZ1bmN0aW9uKGEsYil7bS5mblthXT1mdW5jdGlvbihhLGMsZCl7cmV0dXJuIHRoaXMuYW5pbWF0ZShiLGEsYyxkKX19KSxtLnRpbWVycz1bXSxtLmZ4LnRpY2s9ZnVuY3Rpb24oKXt2YXIgYSxiPW0udGltZXJzLGM9MDtmb3IoJGI9bS5ub3coKTtjPGIubGVuZ3RoO2MrKylhPWJbY10sYSgpfHxiW2NdIT09YXx8Yi5zcGxpY2UoYy0tLDEpO2IubGVuZ3RofHxtLmZ4LnN0b3AoKSwkYj12b2lkIDB9LG0uZngudGltZXI9ZnVuY3Rpb24oYSl7bS50aW1lcnMucHVzaChhKSxhKCk/bS5meC5zdGFydCgpOm0udGltZXJzLnBvcCgpfSxtLmZ4LmludGVydmFsPTEzLG0uZnguc3RhcnQ9ZnVuY3Rpb24oKXtfYnx8KF9iPXNldEludGVydmFsKG0uZngudGljayxtLmZ4LmludGVydmFsKSl9LG0uZnguc3RvcD1mdW5jdGlvbigpe2NsZWFySW50ZXJ2YWwoX2IpLF9iPW51bGx9LG0uZnguc3BlZWRzPXtzbG93OjYwMCxmYXN0OjIwMCxfZGVmYXVsdDo0MDB9LG0uZm4uZGVsYXk9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gYT1tLmZ4P20uZnguc3BlZWRzW2FdfHxhOmEsYj1ifHwiZngiLHRoaXMucXVldWUoYixmdW5jdGlvbihiLGMpe3ZhciBkPXNldFRpbWVvdXQoYixhKTtjLnN0b3A9ZnVuY3Rpb24oKXtjbGVhclRpbWVvdXQoZCl9fSl9LGZ1bmN0aW9uKCl7dmFyIGEsYixjLGQsZTtiPXkuY3JlYXRlRWxlbWVudCgiZGl2IiksYi5zZXRBdHRyaWJ1dGUoImNsYXNzTmFtZSIsInQiKSxiLmlubmVySFRNTD0iICA8bGluay8+PHRhYmxlPjwvdGFibGU+PGEgaHJlZj0nL2EnPmE8L2E+PGlucHV0IHR5cGU9J2NoZWNrYm94Jy8+IixkPWIuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImEiKVswXSxjPXkuY3JlYXRlRWxlbWVudCgic2VsZWN0IiksZT1jLmFwcGVuZENoaWxkKHkuY3JlYXRlRWxlbWVudCgib3B0aW9uIikpLGE9Yi5nZXRFbGVtZW50c0J5VGFnTmFtZSgiaW5wdXQiKVswXSxkLnN0eWxlLmNzc1RleHQ9InRvcDoxcHgiLGsuZ2V0U2V0QXR0cmlidXRlPSJ0IiE9PWIuY2xhc3NOYW1lLGsuc3R5bGU9L3RvcC8udGVzdChkLmdldEF0dHJpYnV0ZSgic3R5bGUiKSksay5ocmVmTm9ybWFsaXplZD0iL2EiPT09ZC5nZXRBdHRyaWJ1dGUoImhyZWYiKSxrLmNoZWNrT249ISFhLnZhbHVlLGsub3B0U2VsZWN0ZWQ9ZS5zZWxlY3RlZCxrLmVuY3R5cGU9ISF5LmNyZWF0ZUVsZW1lbnQoImZvcm0iKS5lbmN0eXBlLGMuZGlzYWJsZWQ9ITAsay5vcHREaXNhYmxlZD0hZS5kaXNhYmxlZCxhPXkuY3JlYXRlRWxlbWVudCgiaW5wdXQiKSxhLnNldEF0dHJpYnV0ZSgidmFsdWUiLCIiKSxrLmlucHV0PSIiPT09YS5nZXRBdHRyaWJ1dGUoInZhbHVlIiksYS52YWx1ZT0idCIsYS5zZXRBdHRyaWJ1dGUoInR5cGUiLCJyYWRpbyIpLGsucmFkaW9WYWx1ZT0idCI9PT1hLnZhbHVlfSgpO3ZhciBsYz0vXHIvZzttLmZuLmV4dGVuZCh7dmFsOmZ1bmN0aW9uKGEpe3ZhciBiLGMsZCxlPXRoaXNbMF07e2lmKGFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIGQ9bS5pc0Z1bmN0aW9uKGEpLHRoaXMuZWFjaChmdW5jdGlvbihjKXt2YXIgZTsxPT09dGhpcy5ub2RlVHlwZSYmKGU9ZD9hLmNhbGwodGhpcyxjLG0odGhpcykudmFsKCkpOmEsbnVsbD09ZT9lPSIiOiJudW1iZXIiPT10eXBlb2YgZT9lKz0iIjptLmlzQXJyYXkoZSkmJihlPW0ubWFwKGUsZnVuY3Rpb24oYSl7cmV0dXJuIG51bGw9PWE/IiI6YSsiIn0pKSxiPW0udmFsSG9va3NbdGhpcy50eXBlXXx8bS52YWxIb29rc1t0aGlzLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCldLGImJiJzZXQiaW4gYiYmdm9pZCAwIT09Yi5zZXQodGhpcyxlLCJ2YWx1ZSIpfHwodGhpcy52YWx1ZT1lKSl9KTtpZihlKXJldHVybiBiPW0udmFsSG9va3NbZS50eXBlXXx8bS52YWxIb29rc1tlLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCldLGImJiJnZXQiaW4gYiYmdm9pZCAwIT09KGM9Yi5nZXQoZSwidmFsdWUiKSk/YzooYz1lLnZhbHVlLCJzdHJpbmciPT10eXBlb2YgYz9jLnJlcGxhY2UobGMsIiIpOm51bGw9PWM/IiI6Yyl9fX0pLG0uZXh0ZW5kKHt2YWxIb29rczp7b3B0aW9uOntnZXQ6ZnVuY3Rpb24oYSl7dmFyIGI9bS5maW5kLmF0dHIoYSwidmFsdWUiKTtyZXR1cm4gbnVsbCE9Yj9iOm0udHJpbShtLnRleHQoYSkpfX0sc2VsZWN0OntnZXQ6ZnVuY3Rpb24oYSl7Zm9yKHZhciBiLGMsZD1hLm9wdGlvbnMsZT1hLnNlbGVjdGVkSW5kZXgsZj0ic2VsZWN0LW9uZSI9PT1hLnR5cGV8fDA+ZSxnPWY/bnVsbDpbXSxoPWY/ZSsxOmQubGVuZ3RoLGk9MD5lP2g6Zj9lOjA7aD5pO2krKylpZihjPWRbaV0sISghYy5zZWxlY3RlZCYmaSE9PWV8fChrLm9wdERpc2FibGVkP2MuZGlzYWJsZWQ6bnVsbCE9PWMuZ2V0QXR0cmlidXRlKCJkaXNhYmxlZCIpKXx8Yy5wYXJlbnROb2RlLmRpc2FibGVkJiZtLm5vZGVOYW1lKGMucGFyZW50Tm9kZSwib3B0Z3JvdXAiKSkpe2lmKGI9bShjKS52YWwoKSxmKXJldHVybiBiO2cucHVzaChiKX1yZXR1cm4gZ30sc2V0OmZ1bmN0aW9uKGEsYil7dmFyIGMsZCxlPWEub3B0aW9ucyxmPW0ubWFrZUFycmF5KGIpLGc9ZS5sZW5ndGg7d2hpbGUoZy0tKWlmKGQ9ZVtnXSxtLmluQXJyYXkobS52YWxIb29rcy5vcHRpb24uZ2V0KGQpLGYpPj0wKXRyeXtkLnNlbGVjdGVkPWM9ITB9Y2F0Y2goaCl7ZC5zY3JvbGxIZWlnaHR9ZWxzZSBkLnNlbGVjdGVkPSExO3JldHVybiBjfHwoYS5zZWxlY3RlZEluZGV4PS0xKSxlfX19fSksbS5lYWNoKFsicmFkaW8iLCJjaGVja2JveCJdLGZ1bmN0aW9uKCl7bS52YWxIb29rc1t0aGlzXT17c2V0OmZ1bmN0aW9uKGEsYil7cmV0dXJuIG0uaXNBcnJheShiKT9hLmNoZWNrZWQ9bS5pbkFycmF5KG0oYSkudmFsKCksYik+PTA6dm9pZCAwfX0say5jaGVja09ufHwobS52YWxIb29rc1t0aGlzXS5nZXQ9ZnVuY3Rpb24oYSl7cmV0dXJuIG51bGw9PT1hLmdldEF0dHJpYnV0ZSgidmFsdWUiKT8ib24iOmEudmFsdWV9KX0pO3ZhciBtYyxuYyxvYz1tLmV4cHIuYXR0ckhhbmRsZSxwYz0vXig/OmNoZWNrZWR8c2VsZWN0ZWQpJC9pLHFjPWsuZ2V0U2V0QXR0cmlidXRlLHJjPWsuaW5wdXQ7bS5mbi5leHRlbmQoe2F0dHI6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gVih0aGlzLG0uYXR0cixhLGIsYXJndW1lbnRzLmxlbmd0aD4xKX0scmVtb3ZlQXR0cjpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7bS5yZW1vdmVBdHRyKHRoaXMsYSl9KX19KSxtLmV4dGVuZCh7YXR0cjpmdW5jdGlvbihhLGIsYyl7dmFyIGQsZSxmPWEubm9kZVR5cGU7aWYoYSYmMyE9PWYmJjghPT1mJiYyIT09ZilyZXR1cm4gdHlwZW9mIGEuZ2V0QXR0cmlidXRlPT09Sz9tLnByb3AoYSxiLGMpOigxPT09ZiYmbS5pc1hNTERvYyhhKXx8KGI9Yi50b0xvd2VyQ2FzZSgpLGQ9bS5hdHRySG9va3NbYl18fChtLmV4cHIubWF0Y2guYm9vbC50ZXN0KGIpP25jOm1jKSksdm9pZCAwPT09Yz9kJiYiZ2V0ImluIGQmJm51bGwhPT0oZT1kLmdldChhLGIpKT9lOihlPW0uZmluZC5hdHRyKGEsYiksbnVsbD09ZT92b2lkIDA6ZSk6bnVsbCE9PWM/ZCYmInNldCJpbiBkJiZ2b2lkIDAhPT0oZT1kLnNldChhLGMsYikpP2U6KGEuc2V0QXR0cmlidXRlKGIsYysiIiksYyk6dm9pZCBtLnJlbW92ZUF0dHIoYSxiKSl9LHJlbW92ZUF0dHI6ZnVuY3Rpb24oYSxiKXt2YXIgYyxkLGU9MCxmPWImJmIubWF0Y2goRSk7aWYoZiYmMT09PWEubm9kZVR5cGUpd2hpbGUoYz1mW2UrK10pZD1tLnByb3BGaXhbY118fGMsbS5leHByLm1hdGNoLmJvb2wudGVzdChjKT9yYyYmcWN8fCFwYy50ZXN0KGMpP2FbZF09ITE6YVttLmNhbWVsQ2FzZSgiZGVmYXVsdC0iK2MpXT1hW2RdPSExOm0uYXR0cihhLGMsIiIpLGEucmVtb3ZlQXR0cmlidXRlKHFjP2M6ZCl9LGF0dHJIb29rczp7dHlwZTp7c2V0OmZ1bmN0aW9uKGEsYil7aWYoIWsucmFkaW9WYWx1ZSYmInJhZGlvIj09PWImJm0ubm9kZU5hbWUoYSwiaW5wdXQiKSl7dmFyIGM9YS52YWx1ZTtyZXR1cm4gYS5zZXRBdHRyaWJ1dGUoInR5cGUiLGIpLGMmJihhLnZhbHVlPWMpLGJ9fX19fSksbmM9e3NldDpmdW5jdGlvbihhLGIsYyl7cmV0dXJuIGI9PT0hMT9tLnJlbW92ZUF0dHIoYSxjKTpyYyYmcWN8fCFwYy50ZXN0KGMpP2Euc2V0QXR0cmlidXRlKCFxYyYmbS5wcm9wRml4W2NdfHxjLGMpOmFbbS5jYW1lbENhc2UoImRlZmF1bHQtIitjKV09YVtjXT0hMCxjfX0sbS5lYWNoKG0uZXhwci5tYXRjaC5ib29sLnNvdXJjZS5tYXRjaCgvXHcrL2cpLGZ1bmN0aW9uKGEsYil7dmFyIGM9b2NbYl18fG0uZmluZC5hdHRyO29jW2JdPXJjJiZxY3x8IXBjLnRlc3QoYik/ZnVuY3Rpb24oYSxiLGQpe3ZhciBlLGY7cmV0dXJuIGR8fChmPW9jW2JdLG9jW2JdPWUsZT1udWxsIT1jKGEsYixkKT9iLnRvTG93ZXJDYXNlKCk6bnVsbCxvY1tiXT1mKSxlfTpmdW5jdGlvbihhLGIsYyl7cmV0dXJuIGM/dm9pZCAwOmFbbS5jYW1lbENhc2UoImRlZmF1bHQtIitiKV0/Yi50b0xvd2VyQ2FzZSgpOm51bGx9fSkscmMmJnFjfHwobS5hdHRySG9va3MudmFsdWU9e3NldDpmdW5jdGlvbihhLGIsYyl7cmV0dXJuIG0ubm9kZU5hbWUoYSwiaW5wdXQiKT92b2lkKGEuZGVmYXVsdFZhbHVlPWIpOm1jJiZtYy5zZXQoYSxiLGMpfX0pLHFjfHwobWM9e3NldDpmdW5jdGlvbihhLGIsYyl7dmFyIGQ9YS5nZXRBdHRyaWJ1dGVOb2RlKGMpO3JldHVybiBkfHxhLnNldEF0dHJpYnV0ZU5vZGUoZD1hLm93bmVyRG9jdW1lbnQuY3JlYXRlQXR0cmlidXRlKGMpKSxkLnZhbHVlPWIrPSIiLCJ2YWx1ZSI9PT1jfHxiPT09YS5nZXRBdHRyaWJ1dGUoYyk/Yjp2b2lkIDB9fSxvYy5pZD1vYy5uYW1lPW9jLmNvb3Jkcz1mdW5jdGlvbihhLGIsYyl7dmFyIGQ7cmV0dXJuIGM/dm9pZCAwOihkPWEuZ2V0QXR0cmlidXRlTm9kZShiKSkmJiIiIT09ZC52YWx1ZT9kLnZhbHVlOm51bGx9LG0udmFsSG9va3MuYnV0dG9uPXtnZXQ6ZnVuY3Rpb24oYSxiKXt2YXIgYz1hLmdldEF0dHJpYnV0ZU5vZGUoYik7cmV0dXJuIGMmJmMuc3BlY2lmaWVkP2MudmFsdWU6dm9pZCAwfSxzZXQ6bWMuc2V0fSxtLmF0dHJIb29rcy5jb250ZW50ZWRpdGFibGU9e3NldDpmdW5jdGlvbihhLGIsYyl7bWMuc2V0KGEsIiI9PT1iPyExOmIsYyl9fSxtLmVhY2goWyJ3aWR0aCIsImhlaWdodCJdLGZ1bmN0aW9uKGEsYil7bS5hdHRySG9va3NbYl09e3NldDpmdW5jdGlvbihhLGMpe3JldHVybiIiPT09Yz8oYS5zZXRBdHRyaWJ1dGUoYiwiYXV0byIpLGMpOnZvaWQgMH19fSkpLGsuc3R5bGV8fChtLmF0dHJIb29rcy5zdHlsZT17Z2V0OmZ1bmN0aW9uKGEpe3JldHVybiBhLnN0eWxlLmNzc1RleHR8fHZvaWQgMH0sc2V0OmZ1bmN0aW9uKGEsYil7cmV0dXJuIGEuc3R5bGUuY3NzVGV4dD1iKyIifX0pO3ZhciBzYz0vXig/OmlucHV0fHNlbGVjdHx0ZXh0YXJlYXxidXR0b258b2JqZWN0KSQvaSx0Yz0vXig/OmF8YXJlYSkkL2k7bS5mbi5leHRlbmQoe3Byb3A6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gVih0aGlzLG0ucHJvcCxhLGIsYXJndW1lbnRzLmxlbmd0aD4xKX0scmVtb3ZlUHJvcDpmdW5jdGlvbihhKXtyZXR1cm4gYT1tLnByb3BGaXhbYV18fGEsdGhpcy5lYWNoKGZ1bmN0aW9uKCl7dHJ5e3RoaXNbYV09dm9pZCAwLGRlbGV0ZSB0aGlzW2FdfWNhdGNoKGIpe319KX19KSxtLmV4dGVuZCh7cHJvcEZpeDp7ImZvciI6Imh0bWxGb3IiLCJjbGFzcyI6ImNsYXNzTmFtZSJ9LHByb3A6ZnVuY3Rpb24oYSxiLGMpe3ZhciBkLGUsZixnPWEubm9kZVR5cGU7aWYoYSYmMyE9PWcmJjghPT1nJiYyIT09ZylyZXR1cm4gZj0xIT09Z3x8IW0uaXNYTUxEb2MoYSksZiYmKGI9bS5wcm9wRml4W2JdfHxiLGU9bS5wcm9wSG9va3NbYl0pLHZvaWQgMCE9PWM/ZSYmInNldCJpbiBlJiZ2b2lkIDAhPT0oZD1lLnNldChhLGMsYikpP2Q6YVtiXT1jOmUmJiJnZXQiaW4gZSYmbnVsbCE9PShkPWUuZ2V0KGEsYikpP2Q6YVtiXX0scHJvcEhvb2tzOnt0YWJJbmRleDp7Z2V0OmZ1bmN0aW9uKGEpe3ZhciBiPW0uZmluZC5hdHRyKGEsInRhYmluZGV4Iik7cmV0dXJuIGI/cGFyc2VJbnQoYiwxMCk6c2MudGVzdChhLm5vZGVOYW1lKXx8dGMudGVzdChhLm5vZGVOYW1lKSYmYS5ocmVmPzA6LTF9fX19KSxrLmhyZWZOb3JtYWxpemVkfHxtLmVhY2goWyJocmVmIiwic3JjIl0sZnVuY3Rpb24oYSxiKXttLnByb3BIb29rc1tiXT17Z2V0OmZ1bmN0aW9uKGEpe3JldHVybiBhLmdldEF0dHJpYnV0ZShiLDQpfX19KSxrLm9wdFNlbGVjdGVkfHwobS5wcm9wSG9va3Muc2VsZWN0ZWQ9e2dldDpmdW5jdGlvbihhKXt2YXIgYj1hLnBhcmVudE5vZGU7cmV0dXJuIGImJihiLnNlbGVjdGVkSW5kZXgsYi5wYXJlbnROb2RlJiZiLnBhcmVudE5vZGUuc2VsZWN0ZWRJbmRleCksbnVsbH19KSxtLmVhY2goWyJ0YWJJbmRleCIsInJlYWRPbmx5IiwibWF4TGVuZ3RoIiwiY2VsbFNwYWNpbmciLCJjZWxsUGFkZGluZyIsInJvd1NwYW4iLCJjb2xTcGFuIiwidXNlTWFwIiwiZnJhbWVCb3JkZXIiLCJjb250ZW50RWRpdGFibGUiXSxmdW5jdGlvbigpe20ucHJvcEZpeFt0aGlzLnRvTG93ZXJDYXNlKCldPXRoaXN9KSxrLmVuY3R5cGV8fChtLnByb3BGaXguZW5jdHlwZT0iZW5jb2RpbmciKTt2YXIgdWM9L1tcdFxyXG5cZl0vZzttLmZuLmV4dGVuZCh7YWRkQ2xhc3M6ZnVuY3Rpb24oYSl7dmFyIGIsYyxkLGUsZixnLGg9MCxpPXRoaXMubGVuZ3RoLGo9InN0cmluZyI9PXR5cGVvZiBhJiZhO2lmKG0uaXNGdW5jdGlvbihhKSlyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKGIpe20odGhpcykuYWRkQ2xhc3MoYS5jYWxsKHRoaXMsYix0aGlzLmNsYXNzTmFtZSkpfSk7aWYoailmb3IoYj0oYXx8IiIpLm1hdGNoKEUpfHxbXTtpPmg7aCsrKWlmKGM9dGhpc1toXSxkPTE9PT1jLm5vZGVUeXBlJiYoYy5jbGFzc05hbWU/KCIgIitjLmNsYXNzTmFtZSsiICIpLnJlcGxhY2UodWMsIiAiKToiICIpKXtmPTA7d2hpbGUoZT1iW2YrK10pZC5pbmRleE9mKCIgIitlKyIgIik8MCYmKGQrPWUrIiAiKTtnPW0udHJpbShkKSxjLmNsYXNzTmFtZSE9PWcmJihjLmNsYXNzTmFtZT1nKX1yZXR1cm4gdGhpc30scmVtb3ZlQ2xhc3M6ZnVuY3Rpb24oYSl7dmFyIGIsYyxkLGUsZixnLGg9MCxpPXRoaXMubGVuZ3RoLGo9MD09PWFyZ3VtZW50cy5sZW5ndGh8fCJzdHJpbmciPT10eXBlb2YgYSYmYTtpZihtLmlzRnVuY3Rpb24oYSkpcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbihiKXttKHRoaXMpLnJlbW92ZUNsYXNzKGEuY2FsbCh0aGlzLGIsdGhpcy5jbGFzc05hbWUpKX0pO2lmKGopZm9yKGI9KGF8fCIiKS5tYXRjaChFKXx8W107aT5oO2grKylpZihjPXRoaXNbaF0sZD0xPT09Yy5ub2RlVHlwZSYmKGMuY2xhc3NOYW1lPygiICIrYy5jbGFzc05hbWUrIiAiKS5yZXBsYWNlKHVjLCIgIik6IiIpKXtmPTA7d2hpbGUoZT1iW2YrK10pd2hpbGUoZC5pbmRleE9mKCIgIitlKyIgIik+PTApZD1kLnJlcGxhY2UoIiAiK2UrIiAiLCIgIik7Zz1hP20udHJpbShkKToiIixjLmNsYXNzTmFtZSE9PWcmJihjLmNsYXNzTmFtZT1nKX1yZXR1cm4gdGhpc30sdG9nZ2xlQ2xhc3M6ZnVuY3Rpb24oYSxiKXt2YXIgYz10eXBlb2YgYTtyZXR1cm4iYm9vbGVhbiI9PXR5cGVvZiBiJiYic3RyaW5nIj09PWM/Yj90aGlzLmFkZENsYXNzKGEpOnRoaXMucmVtb3ZlQ2xhc3MoYSk6dGhpcy5lYWNoKG0uaXNGdW5jdGlvbihhKT9mdW5jdGlvbihjKXttKHRoaXMpLnRvZ2dsZUNsYXNzKGEuY2FsbCh0aGlzLGMsdGhpcy5jbGFzc05hbWUsYiksYil9OmZ1bmN0aW9uKCl7aWYoInN0cmluZyI9PT1jKXt2YXIgYixkPTAsZT1tKHRoaXMpLGY9YS5tYXRjaChFKXx8W107d2hpbGUoYj1mW2QrK10pZS5oYXNDbGFzcyhiKT9lLnJlbW92ZUNsYXNzKGIpOmUuYWRkQ2xhc3MoYil9ZWxzZShjPT09S3x8ImJvb2xlYW4iPT09YykmJih0aGlzLmNsYXNzTmFtZSYmbS5fZGF0YSh0aGlzLCJfX2NsYXNzTmFtZV9fIix0aGlzLmNsYXNzTmFtZSksdGhpcy5jbGFzc05hbWU9dGhpcy5jbGFzc05hbWV8fGE9PT0hMT8iIjptLl9kYXRhKHRoaXMsIl9fY2xhc3NOYW1lX18iKXx8IiIpfSl9LGhhc0NsYXNzOmZ1bmN0aW9uKGEpe2Zvcih2YXIgYj0iICIrYSsiICIsYz0wLGQ9dGhpcy5sZW5ndGg7ZD5jO2MrKylpZigxPT09dGhpc1tjXS5ub2RlVHlwZSYmKCIgIit0aGlzW2NdLmNsYXNzTmFtZSsiICIpLnJlcGxhY2UodWMsIiAiKS5pbmRleE9mKGIpPj0wKXJldHVybiEwO3JldHVybiExfX0pLG0uZWFjaCgiYmx1ciBmb2N1cyBmb2N1c2luIGZvY3Vzb3V0IGxvYWQgcmVzaXplIHNjcm9sbCB1bmxvYWQgY2xpY2sgZGJsY2xpY2sgbW91c2Vkb3duIG1vdXNldXAgbW91c2Vtb3ZlIG1vdXNlb3ZlciBtb3VzZW91dCBtb3VzZWVudGVyIG1vdXNlbGVhdmUgY2hhbmdlIHNlbGVjdCBzdWJtaXQga2V5ZG93biBrZXlwcmVzcyBrZXl1cCBlcnJvciBjb250ZXh0bWVudSIuc3BsaXQoIiAiKSxmdW5jdGlvbihhLGIpe20uZm5bYl09ZnVuY3Rpb24oYSxjKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD4wP3RoaXMub24oYixudWxsLGEsYyk6dGhpcy50cmlnZ2VyKGIpfX0pLG0uZm4uZXh0ZW5kKHtob3ZlcjpmdW5jdGlvbihhLGIpe3JldHVybiB0aGlzLm1vdXNlZW50ZXIoYSkubW91c2VsZWF2ZShifHxhKX0sYmluZDpmdW5jdGlvbihhLGIsYyl7cmV0dXJuIHRoaXMub24oYSxudWxsLGIsYyl9LHVuYmluZDpmdW5jdGlvbihhLGIpe3JldHVybiB0aGlzLm9mZihhLG51bGwsYil9LGRlbGVnYXRlOmZ1bmN0aW9uKGEsYixjLGQpe3JldHVybiB0aGlzLm9uKGIsYSxjLGQpfSx1bmRlbGVnYXRlOmZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gMT09PWFyZ3VtZW50cy5sZW5ndGg/dGhpcy5vZmYoYSwiKioiKTp0aGlzLm9mZihiLGF8fCIqKiIsYyl9fSk7dmFyIHZjPW0ubm93KCksd2M9L1w/Lyx4Yz0vKCwpfChcW3x7KXwofXxdKXwiKD86W14iXFxcclxuXXxcXFsiXFxcL2JmbnJ0XXxcXHVbXGRhLWZBLUZdezR9KSoiXHMqOj98dHJ1ZXxmYWxzZXxudWxsfC0/KD8hMFxkKVxkKyg/OlwuXGQrfCkoPzpbZUVdWystXT9cZCt8KS9nO20ucGFyc2VKU09OPWZ1bmN0aW9uKGIpe2lmKGEuSlNPTiYmYS5KU09OLnBhcnNlKXJldHVybiBhLkpTT04ucGFyc2UoYisiIik7dmFyIGMsZD1udWxsLGU9bS50cmltKGIrIiIpO3JldHVybiBlJiYhbS50cmltKGUucmVwbGFjZSh4YyxmdW5jdGlvbihhLGIsZSxmKXtyZXR1cm4gYyYmYiYmKGQ9MCksMD09PWQ/YTooYz1lfHxiLGQrPSFmLSFlLCIiKX0pKT9GdW5jdGlvbigicmV0dXJuICIrZSkoKTptLmVycm9yKCJJbnZhbGlkIEpTT046ICIrYil9LG0ucGFyc2VYTUw9ZnVuY3Rpb24oYil7dmFyIGMsZDtpZighYnx8InN0cmluZyIhPXR5cGVvZiBiKXJldHVybiBudWxsO3RyeXthLkRPTVBhcnNlcj8oZD1uZXcgRE9NUGFyc2VyLGM9ZC5wYXJzZUZyb21TdHJpbmcoYiwidGV4dC94bWwiKSk6KGM9bmV3IEFjdGl2ZVhPYmplY3QoIk1pY3Jvc29mdC5YTUxET00iKSxjLmFzeW5jPSJmYWxzZSIsYy5sb2FkWE1MKGIpKX1jYXRjaChlKXtjPXZvaWQgMH1yZXR1cm4gYyYmYy5kb2N1bWVudEVsZW1lbnQmJiFjLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJwYXJzZXJlcnJvciIpLmxlbmd0aHx8bS5lcnJvcigiSW52YWxpZCBYTUw6ICIrYiksY307dmFyIHljLHpjLEFjPS8jLiokLyxCYz0vKFs/Jl0pXz1bXiZdKi8sQ2M9L14oLio/KTpbIFx0XSooW15cclxuXSopXHI/JC9nbSxEYz0vXig/OmFib3V0fGFwcHxhcHAtc3RvcmFnZXwuKy1leHRlbnNpb258ZmlsZXxyZXN8d2lkZ2V0KTokLyxFYz0vXig/OkdFVHxIRUFEKSQvLEZjPS9eXC9cLy8sR2M9L14oW1x3ListXSs6KSg/OlwvXC8oPzpbXlwvPyNdKkB8KShbXlwvPyM6XSopKD86OihcZCspfCl8KS8sSGM9e30sSWM9e30sSmM9IiovIi5jb25jYXQoIioiKTt0cnl7emM9bG9jYXRpb24uaHJlZn1jYXRjaChLYyl7emM9eS5jcmVhdGVFbGVtZW50KCJhIiksemMuaHJlZj0iIix6Yz16Yy5ocmVmfXljPUdjLmV4ZWMoemMudG9Mb3dlckNhc2UoKSl8fFtdO2Z1bmN0aW9uIExjKGEpe3JldHVybiBmdW5jdGlvbihiLGMpeyJzdHJpbmciIT10eXBlb2YgYiYmKGM9YixiPSIqIik7dmFyIGQsZT0wLGY9Yi50b0xvd2VyQ2FzZSgpLm1hdGNoKEUpfHxbXTtpZihtLmlzRnVuY3Rpb24oYykpd2hpbGUoZD1mW2UrK10pIisiPT09ZC5jaGFyQXQoMCk/KGQ9ZC5zbGljZSgxKXx8IioiLChhW2RdPWFbZF18fFtdKS51bnNoaWZ0KGMpKTooYVtkXT1hW2RdfHxbXSkucHVzaChjKX19ZnVuY3Rpb24gTWMoYSxiLGMsZCl7dmFyIGU9e30sZj1hPT09SWM7ZnVuY3Rpb24gZyhoKXt2YXIgaTtyZXR1cm4gZVtoXT0hMCxtLmVhY2goYVtoXXx8W10sZnVuY3Rpb24oYSxoKXt2YXIgaj1oKGIsYyxkKTtyZXR1cm4ic3RyaW5nIiE9dHlwZW9mIGp8fGZ8fGVbal0/Zj8hKGk9aik6dm9pZCAwOihiLmRhdGFUeXBlcy51bnNoaWZ0KGopLGcoaiksITEpfSksaX1yZXR1cm4gZyhiLmRhdGFUeXBlc1swXSl8fCFlWyIqIl0mJmcoIioiKX1mdW5jdGlvbiBOYyhhLGIpe3ZhciBjLGQsZT1tLmFqYXhTZXR0aW5ncy5mbGF0T3B0aW9uc3x8e307Zm9yKGQgaW4gYil2b2lkIDAhPT1iW2RdJiYoKGVbZF0/YTpjfHwoYz17fSkpW2RdPWJbZF0pO3JldHVybiBjJiZtLmV4dGVuZCghMCxhLGMpLGF9ZnVuY3Rpb24gT2MoYSxiLGMpe3ZhciBkLGUsZixnLGg9YS5jb250ZW50cyxpPWEuZGF0YVR5cGVzO3doaWxlKCIqIj09PWlbMF0paS5zaGlmdCgpLHZvaWQgMD09PWUmJihlPWEubWltZVR5cGV8fGIuZ2V0UmVzcG9uc2VIZWFkZXIoIkNvbnRlbnQtVHlwZSIpKTtpZihlKWZvcihnIGluIGgpaWYoaFtnXSYmaFtnXS50ZXN0KGUpKXtpLnVuc2hpZnQoZyk7YnJlYWt9aWYoaVswXWluIGMpZj1pWzBdO2Vsc2V7Zm9yKGcgaW4gYyl7aWYoIWlbMF18fGEuY29udmVydGVyc1tnKyIgIitpWzBdXSl7Zj1nO2JyZWFrfWR8fChkPWcpfWY9Znx8ZH1yZXR1cm4gZj8oZiE9PWlbMF0mJmkudW5zaGlmdChmKSxjW2ZdKTp2b2lkIDB9ZnVuY3Rpb24gUGMoYSxiLGMsZCl7dmFyIGUsZixnLGgsaSxqPXt9LGs9YS5kYXRhVHlwZXMuc2xpY2UoKTtpZihrWzFdKWZvcihnIGluIGEuY29udmVydGVycylqW2cudG9Mb3dlckNhc2UoKV09YS5jb252ZXJ0ZXJzW2ddO2Y9ay5zaGlmdCgpO3doaWxlKGYpaWYoYS5yZXNwb25zZUZpZWxkc1tmXSYmKGNbYS5yZXNwb25zZUZpZWxkc1tmXV09YiksIWkmJmQmJmEuZGF0YUZpbHRlciYmKGI9YS5kYXRhRmlsdGVyKGIsYS5kYXRhVHlwZSkpLGk9ZixmPWsuc2hpZnQoKSlpZigiKiI9PT1mKWY9aTtlbHNlIGlmKCIqIiE9PWkmJmkhPT1mKXtpZihnPWpbaSsiICIrZl18fGpbIiogIitmXSwhZylmb3IoZSBpbiBqKWlmKGg9ZS5zcGxpdCgiICIpLGhbMV09PT1mJiYoZz1qW2krIiAiK2hbMF1dfHxqWyIqICIraFswXV0pKXtnPT09ITA/Zz1qW2VdOmpbZV0hPT0hMCYmKGY9aFswXSxrLnVuc2hpZnQoaFsxXSkpO2JyZWFrfWlmKGchPT0hMClpZihnJiZhWyJ0aHJvd3MiXSliPWcoYik7ZWxzZSB0cnl7Yj1nKGIpfWNhdGNoKGwpe3JldHVybntzdGF0ZToicGFyc2VyZXJyb3IiLGVycm9yOmc/bDoiTm8gY29udmVyc2lvbiBmcm9tICIraSsiIHRvICIrZn19fXJldHVybntzdGF0ZToic3VjY2VzcyIsZGF0YTpifX1tLmV4dGVuZCh7YWN0aXZlOjAsbGFzdE1vZGlmaWVkOnt9LGV0YWc6e30sYWpheFNldHRpbmdzOnt1cmw6emMsdHlwZToiR0VUIixpc0xvY2FsOkRjLnRlc3QoeWNbMV0pLGdsb2JhbDohMCxwcm9jZXNzRGF0YTohMCxhc3luYzohMCxjb250ZW50VHlwZToiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkOyBjaGFyc2V0PVVURi04IixhY2NlcHRzOnsiKiI6SmMsdGV4dDoidGV4dC9wbGFpbiIsaHRtbDoidGV4dC9odG1sIix4bWw6ImFwcGxpY2F0aW9uL3htbCwgdGV4dC94bWwiLGpzb246ImFwcGxpY2F0aW9uL2pzb24sIHRleHQvamF2YXNjcmlwdCJ9LGNvbnRlbnRzOnt4bWw6L3htbC8saHRtbDovaHRtbC8sanNvbjovanNvbi99LHJlc3BvbnNlRmllbGRzOnt4bWw6InJlc3BvbnNlWE1MIix0ZXh0OiJyZXNwb25zZVRleHQiLGpzb246InJlc3BvbnNlSlNPTiJ9LGNvbnZlcnRlcnM6eyIqIHRleHQiOlN0cmluZywidGV4dCBodG1sIjohMCwidGV4dCBqc29uIjptLnBhcnNlSlNPTiwidGV4dCB4bWwiOm0ucGFyc2VYTUx9LGZsYXRPcHRpb25zOnt1cmw6ITAsY29udGV4dDohMH19LGFqYXhTZXR1cDpmdW5jdGlvbihhLGIpe3JldHVybiBiP05jKE5jKGEsbS5hamF4U2V0dGluZ3MpLGIpOk5jKG0uYWpheFNldHRpbmdzLGEpfSxhamF4UHJlZmlsdGVyOkxjKEhjKSxhamF4VHJhbnNwb3J0OkxjKEljKSxhamF4OmZ1bmN0aW9uKGEsYil7Im9iamVjdCI9PXR5cGVvZiBhJiYoYj1hLGE9dm9pZCAwKSxiPWJ8fHt9O3ZhciBjLGQsZSxmLGcsaCxpLGosaz1tLmFqYXhTZXR1cCh7fSxiKSxsPWsuY29udGV4dHx8ayxuPWsuY29udGV4dCYmKGwubm9kZVR5cGV8fGwuanF1ZXJ5KT9tKGwpOm0uZXZlbnQsbz1tLkRlZmVycmVkKCkscD1tLkNhbGxiYWNrcygib25jZSBtZW1vcnkiKSxxPWsuc3RhdHVzQ29kZXx8e30scj17fSxzPXt9LHQ9MCx1PSJjYW5jZWxlZCIsdj17cmVhZHlTdGF0ZTowLGdldFJlc3BvbnNlSGVhZGVyOmZ1bmN0aW9uKGEpe3ZhciBiO2lmKDI9PT10KXtpZighail7aj17fTt3aGlsZShiPUNjLmV4ZWMoZikpaltiWzFdLnRvTG93ZXJDYXNlKCldPWJbMl19Yj1qW2EudG9Mb3dlckNhc2UoKV19cmV0dXJuIG51bGw9PWI/bnVsbDpifSxnZXRBbGxSZXNwb25zZUhlYWRlcnM6ZnVuY3Rpb24oKXtyZXR1cm4gMj09PXQ/ZjpudWxsfSxzZXRSZXF1ZXN0SGVhZGVyOmZ1bmN0aW9uKGEsYil7dmFyIGM9YS50b0xvd2VyQ2FzZSgpO3JldHVybiB0fHwoYT1zW2NdPXNbY118fGEsclthXT1iKSx0aGlzfSxvdmVycmlkZU1pbWVUeXBlOmZ1bmN0aW9uKGEpe3JldHVybiB0fHwoay5taW1lVHlwZT1hKSx0aGlzfSxzdGF0dXNDb2RlOmZ1bmN0aW9uKGEpe3ZhciBiO2lmKGEpaWYoMj50KWZvcihiIGluIGEpcVtiXT1bcVtiXSxhW2JdXTtlbHNlIHYuYWx3YXlzKGFbdi5zdGF0dXNdKTtyZXR1cm4gdGhpc30sYWJvcnQ6ZnVuY3Rpb24oYSl7dmFyIGI9YXx8dTtyZXR1cm4gaSYmaS5hYm9ydChiKSx4KDAsYiksdGhpc319O2lmKG8ucHJvbWlzZSh2KS5jb21wbGV0ZT1wLmFkZCx2LnN1Y2Nlc3M9di5kb25lLHYuZXJyb3I9di5mYWlsLGsudXJsPSgoYXx8ay51cmx8fHpjKSsiIikucmVwbGFjZShBYywiIikucmVwbGFjZShGYyx5Y1sxXSsiLy8iKSxrLnR5cGU9Yi5tZXRob2R8fGIudHlwZXx8ay5tZXRob2R8fGsudHlwZSxrLmRhdGFUeXBlcz1tLnRyaW0oay5kYXRhVHlwZXx8IioiKS50b0xvd2VyQ2FzZSgpLm1hdGNoKEUpfHxbIiJdLG51bGw9PWsuY3Jvc3NEb21haW4mJihjPUdjLmV4ZWMoay51cmwudG9Mb3dlckNhc2UoKSksay5jcm9zc0RvbWFpbj0hKCFjfHxjWzFdPT09eWNbMV0mJmNbMl09PT15Y1syXSYmKGNbM118fCgiaHR0cDoiPT09Y1sxXT8iODAiOiI0NDMiKSk9PT0oeWNbM118fCgiaHR0cDoiPT09eWNbMV0/IjgwIjoiNDQzIikpKSksay5kYXRhJiZrLnByb2Nlc3NEYXRhJiYic3RyaW5nIiE9dHlwZW9mIGsuZGF0YSYmKGsuZGF0YT1tLnBhcmFtKGsuZGF0YSxrLnRyYWRpdGlvbmFsKSksTWMoSGMsayxiLHYpLDI9PT10KXJldHVybiB2O2g9ay5nbG9iYWwsaCYmMD09PW0uYWN0aXZlKysmJm0uZXZlbnQudHJpZ2dlcigiYWpheFN0YXJ0Iiksay50eXBlPWsudHlwZS50b1VwcGVyQ2FzZSgpLGsuaGFzQ29udGVudD0hRWMudGVzdChrLnR5cGUpLGU9ay51cmwsay5oYXNDb250ZW50fHwoay5kYXRhJiYoZT1rLnVybCs9KHdjLnRlc3QoZSk/IiYiOiI/Iikray5kYXRhLGRlbGV0ZSBrLmRhdGEpLGsuY2FjaGU9PT0hMSYmKGsudXJsPUJjLnRlc3QoZSk/ZS5yZXBsYWNlKEJjLCIkMV89Iit2YysrKTplKyh3Yy50ZXN0KGUpPyImIjoiPyIpKyJfPSIrdmMrKykpLGsuaWZNb2RpZmllZCYmKG0ubGFzdE1vZGlmaWVkW2VdJiZ2LnNldFJlcXVlc3RIZWFkZXIoIklmLU1vZGlmaWVkLVNpbmNlIixtLmxhc3RNb2RpZmllZFtlXSksbS5ldGFnW2VdJiZ2LnNldFJlcXVlc3RIZWFkZXIoIklmLU5vbmUtTWF0Y2giLG0uZXRhZ1tlXSkpLChrLmRhdGEmJmsuaGFzQ29udGVudCYmay5jb250ZW50VHlwZSE9PSExfHxiLmNvbnRlbnRUeXBlKSYmdi5zZXRSZXF1ZXN0SGVhZGVyKCJDb250ZW50LVR5cGUiLGsuY29udGVudFR5cGUpLHYuc2V0UmVxdWVzdEhlYWRlcigiQWNjZXB0IixrLmRhdGFUeXBlc1swXSYmay5hY2NlcHRzW2suZGF0YVR5cGVzWzBdXT9rLmFjY2VwdHNbay5kYXRhVHlwZXNbMF1dKygiKiIhPT1rLmRhdGFUeXBlc1swXT8iLCAiK0pjKyI7IHE9MC4wMSI6IiIpOmsuYWNjZXB0c1siKiJdKTtmb3IoZCBpbiBrLmhlYWRlcnMpdi5zZXRSZXF1ZXN0SGVhZGVyKGQsay5oZWFkZXJzW2RdKTtpZihrLmJlZm9yZVNlbmQmJihrLmJlZm9yZVNlbmQuY2FsbChsLHYsayk9PT0hMXx8Mj09PXQpKXJldHVybiB2LmFib3J0KCk7dT0iYWJvcnQiO2ZvcihkIGlue3N1Y2Nlc3M6MSxlcnJvcjoxLGNvbXBsZXRlOjF9KXZbZF0oa1tkXSk7aWYoaT1NYyhJYyxrLGIsdikpe3YucmVhZHlTdGF0ZT0xLGgmJm4udHJpZ2dlcigiYWpheFNlbmQiLFt2LGtdKSxrLmFzeW5jJiZrLnRpbWVvdXQ+MCYmKGc9c2V0VGltZW91dChmdW5jdGlvbigpe3YuYWJvcnQoInRpbWVvdXQiKX0say50aW1lb3V0KSk7dHJ5e3Q9MSxpLnNlbmQocix4KX1jYXRjaCh3KXtpZighKDI+dCkpdGhyb3cgdzt4KC0xLHcpfX1lbHNlIHgoLTEsIk5vIFRyYW5zcG9ydCIpO2Z1bmN0aW9uIHgoYSxiLGMsZCl7dmFyIGoscixzLHUsdyx4PWI7MiE9PXQmJih0PTIsZyYmY2xlYXJUaW1lb3V0KGcpLGk9dm9pZCAwLGY9ZHx8IiIsdi5yZWFkeVN0YXRlPWE+MD80OjAsaj1hPj0yMDAmJjMwMD5hfHwzMDQ9PT1hLGMmJih1PU9jKGssdixjKSksdT1QYyhrLHUsdixqKSxqPyhrLmlmTW9kaWZpZWQmJih3PXYuZ2V0UmVzcG9uc2VIZWFkZXIoIkxhc3QtTW9kaWZpZWQiKSx3JiYobS5sYXN0TW9kaWZpZWRbZV09dyksdz12LmdldFJlc3BvbnNlSGVhZGVyKCJldGFnIiksdyYmKG0uZXRhZ1tlXT13KSksMjA0PT09YXx8IkhFQUQiPT09ay50eXBlP3g9Im5vY29udGVudCI6MzA0PT09YT94PSJub3Rtb2RpZmllZCI6KHg9dS5zdGF0ZSxyPXUuZGF0YSxzPXUuZXJyb3Isaj0hcykpOihzPXgsKGF8fCF4KSYmKHg9ImVycm9yIiwwPmEmJihhPTApKSksdi5zdGF0dXM9YSx2LnN0YXR1c1RleHQ9KGJ8fHgpKyIiLGo/by5yZXNvbHZlV2l0aChsLFtyLHgsdl0pOm8ucmVqZWN0V2l0aChsLFt2LHgsc10pLHYuc3RhdHVzQ29kZShxKSxxPXZvaWQgMCxoJiZuLnRyaWdnZXIoaj8iYWpheFN1Y2Nlc3MiOiJhamF4RXJyb3IiLFt2LGssaj9yOnNdKSxwLmZpcmVXaXRoKGwsW3YseF0pLGgmJihuLnRyaWdnZXIoImFqYXhDb21wbGV0ZSIsW3Ysa10pLC0tbS5hY3RpdmV8fG0uZXZlbnQudHJpZ2dlcigiYWpheFN0b3AiKSkpfXJldHVybiB2fSxnZXRKU09OOmZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gbS5nZXQoYSxiLGMsImpzb24iKX0sZ2V0U2NyaXB0OmZ1bmN0aW9uKGEsYil7cmV0dXJuIG0uZ2V0KGEsdm9pZCAwLGIsInNjcmlwdCIpfX0pLG0uZWFjaChbImdldCIsInBvc3QiXSxmdW5jdGlvbihhLGIpe21bYl09ZnVuY3Rpb24oYSxjLGQsZSl7cmV0dXJuIG0uaXNGdW5jdGlvbihjKSYmKGU9ZXx8ZCxkPWMsYz12b2lkIDApLG0uYWpheCh7dXJsOmEsdHlwZTpiLGRhdGFUeXBlOmUsZGF0YTpjLHN1Y2Nlc3M6ZH0pfX0pLG0uZWFjaChbImFqYXhTdGFydCIsImFqYXhTdG9wIiwiYWpheENvbXBsZXRlIiwiYWpheEVycm9yIiwiYWpheFN1Y2Nlc3MiLCJhamF4U2VuZCJdLGZ1bmN0aW9uKGEsYil7bS5mbltiXT1mdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5vbihiLGEpfX0pLG0uX2V2YWxVcmw9ZnVuY3Rpb24oYSl7cmV0dXJuIG0uYWpheCh7dXJsOmEsdHlwZToiR0VUIixkYXRhVHlwZToic2NyaXB0Iixhc3luYzohMSxnbG9iYWw6ITEsInRocm93cyI6ITB9KX0sbS5mbi5leHRlbmQoe3dyYXBBbGw6ZnVuY3Rpb24oYSl7aWYobS5pc0Z1bmN0aW9uKGEpKXJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oYil7bSh0aGlzKS53cmFwQWxsKGEuY2FsbCh0aGlzLGIpKX0pO2lmKHRoaXNbMF0pe3ZhciBiPW0oYSx0aGlzWzBdLm93bmVyRG9jdW1lbnQpLmVxKDApLmNsb25lKCEwKTt0aGlzWzBdLnBhcmVudE5vZGUmJmIuaW5zZXJ0QmVmb3JlKHRoaXNbMF0pLGIubWFwKGZ1bmN0aW9uKCl7dmFyIGE9dGhpczt3aGlsZShhLmZpcnN0Q2hpbGQmJjE9PT1hLmZpcnN0Q2hpbGQubm9kZVR5cGUpYT1hLmZpcnN0Q2hpbGQ7cmV0dXJuIGF9KS5hcHBlbmQodGhpcyl9cmV0dXJuIHRoaXN9LHdyYXBJbm5lcjpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5lYWNoKG0uaXNGdW5jdGlvbihhKT9mdW5jdGlvbihiKXttKHRoaXMpLndyYXBJbm5lcihhLmNhbGwodGhpcyxiKSl9OmZ1bmN0aW9uKCl7dmFyIGI9bSh0aGlzKSxjPWIuY29udGVudHMoKTtjLmxlbmd0aD9jLndyYXBBbGwoYSk6Yi5hcHBlbmQoYSl9KX0sd3JhcDpmdW5jdGlvbihhKXt2YXIgYj1tLmlzRnVuY3Rpb24oYSk7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbihjKXttKHRoaXMpLndyYXBBbGwoYj9hLmNhbGwodGhpcyxjKTphKX0pfSx1bndyYXA6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wYXJlbnQoKS5lYWNoKGZ1bmN0aW9uKCl7bS5ub2RlTmFtZSh0aGlzLCJib2R5Iil8fG0odGhpcykucmVwbGFjZVdpdGgodGhpcy5jaGlsZE5vZGVzKX0pLmVuZCgpfX0pLG0uZXhwci5maWx0ZXJzLmhpZGRlbj1mdW5jdGlvbihhKXtyZXR1cm4gYS5vZmZzZXRXaWR0aDw9MCYmYS5vZmZzZXRIZWlnaHQ8PTB8fCFrLnJlbGlhYmxlSGlkZGVuT2Zmc2V0cygpJiYibm9uZSI9PT0oYS5zdHlsZSYmYS5zdHlsZS5kaXNwbGF5fHxtLmNzcyhhLCJkaXNwbGF5IikpfSxtLmV4cHIuZmlsdGVycy52aXNpYmxlPWZ1bmN0aW9uKGEpe3JldHVybiFtLmV4cHIuZmlsdGVycy5oaWRkZW4oYSl9O3ZhciBRYz0vJTIwL2csUmM9L1xbXF0kLyxTYz0vXHI/XG4vZyxUYz0vXig/OnN1Ym1pdHxidXR0b258aW1hZ2V8cmVzZXR8ZmlsZSkkL2ksVWM9L14oPzppbnB1dHxzZWxlY3R8dGV4dGFyZWF8a2V5Z2VuKS9pO2Z1bmN0aW9uIFZjKGEsYixjLGQpe3ZhciBlO2lmKG0uaXNBcnJheShiKSltLmVhY2goYixmdW5jdGlvbihiLGUpe2N8fFJjLnRlc3QoYSk/ZChhLGUpOlZjKGErIlsiKygib2JqZWN0Ij09dHlwZW9mIGU/YjoiIikrIl0iLGUsYyxkKX0pO2Vsc2UgaWYoY3x8Im9iamVjdCIhPT1tLnR5cGUoYikpZChhLGIpO2Vsc2UgZm9yKGUgaW4gYilWYyhhKyJbIitlKyJdIixiW2VdLGMsZCl9bS5wYXJhbT1mdW5jdGlvbihhLGIpe3ZhciBjLGQ9W10sZT1mdW5jdGlvbihhLGIpe2I9bS5pc0Z1bmN0aW9uKGIpP2IoKTpudWxsPT1iPyIiOmIsZFtkLmxlbmd0aF09ZW5jb2RlVVJJQ29tcG9uZW50KGEpKyI9IitlbmNvZGVVUklDb21wb25lbnQoYil9O2lmKHZvaWQgMD09PWImJihiPW0uYWpheFNldHRpbmdzJiZtLmFqYXhTZXR0aW5ncy50cmFkaXRpb25hbCksbS5pc0FycmF5KGEpfHxhLmpxdWVyeSYmIW0uaXNQbGFpbk9iamVjdChhKSltLmVhY2goYSxmdW5jdGlvbigpe2UodGhpcy5uYW1lLHRoaXMudmFsdWUpfSk7ZWxzZSBmb3IoYyBpbiBhKVZjKGMsYVtjXSxiLGUpO3JldHVybiBkLmpvaW4oIiYiKS5yZXBsYWNlKFFjLCIrIil9LG0uZm4uZXh0ZW5kKHtzZXJpYWxpemU6ZnVuY3Rpb24oKXtyZXR1cm4gbS5wYXJhbSh0aGlzLnNlcmlhbGl6ZUFycmF5KCkpfSxzZXJpYWxpemVBcnJheTpmdW5jdGlvbigpe3JldHVybiB0aGlzLm1hcChmdW5jdGlvbigpe3ZhciBhPW0ucHJvcCh0aGlzLCJlbGVtZW50cyIpO3JldHVybiBhP20ubWFrZUFycmF5KGEpOnRoaXN9KS5maWx0ZXIoZnVuY3Rpb24oKXt2YXIgYT10aGlzLnR5cGU7cmV0dXJuIHRoaXMubmFtZSYmIW0odGhpcykuaXMoIjpkaXNhYmxlZCIpJiZVYy50ZXN0KHRoaXMubm9kZU5hbWUpJiYhVGMudGVzdChhKSYmKHRoaXMuY2hlY2tlZHx8IVcudGVzdChhKSl9KS5tYXAoZnVuY3Rpb24oYSxiKXt2YXIgYz1tKHRoaXMpLnZhbCgpO3JldHVybiBudWxsPT1jP251bGw6bS5pc0FycmF5KGMpP20ubWFwKGMsZnVuY3Rpb24oYSl7cmV0dXJue25hbWU6Yi5uYW1lLHZhbHVlOmEucmVwbGFjZShTYywiXHJcbiIpfX0pOntuYW1lOmIubmFtZSx2YWx1ZTpjLnJlcGxhY2UoU2MsIlxyXG4iKX19KS5nZXQoKX19KSxtLmFqYXhTZXR0aW5ncy54aHI9dm9pZCAwIT09YS5BY3RpdmVYT2JqZWN0P2Z1bmN0aW9uKCl7cmV0dXJuIXRoaXMuaXNMb2NhbCYmL14oZ2V0fHBvc3R8aGVhZHxwdXR8ZGVsZXRlfG9wdGlvbnMpJC9pLnRlc3QodGhpcy50eXBlKSYmWmMoKXx8JGMoKX06WmM7dmFyIFdjPTAsWGM9e30sWWM9bS5hamF4U2V0dGluZ3MueGhyKCk7YS5BY3RpdmVYT2JqZWN0JiZtKGEpLm9uKCJ1bmxvYWQiLGZ1bmN0aW9uKCl7Zm9yKHZhciBhIGluIFhjKVhjW2FdKHZvaWQgMCwhMCl9KSxrLmNvcnM9ISFZYyYmIndpdGhDcmVkZW50aWFscyJpbiBZYyxZYz1rLmFqYXg9ISFZYyxZYyYmbS5hamF4VHJhbnNwb3J0KGZ1bmN0aW9uKGEpe2lmKCFhLmNyb3NzRG9tYWlufHxrLmNvcnMpe3ZhciBiO3JldHVybntzZW5kOmZ1bmN0aW9uKGMsZCl7dmFyIGUsZj1hLnhocigpLGc9KytXYztpZihmLm9wZW4oYS50eXBlLGEudXJsLGEuYXN5bmMsYS51c2VybmFtZSxhLnBhc3N3b3JkKSxhLnhockZpZWxkcylmb3IoZSBpbiBhLnhockZpZWxkcylmW2VdPWEueGhyRmllbGRzW2VdO2EubWltZVR5cGUmJmYub3ZlcnJpZGVNaW1lVHlwZSYmZi5vdmVycmlkZU1pbWVUeXBlKGEubWltZVR5cGUpLGEuY3Jvc3NEb21haW58fGNbIlgtUmVxdWVzdGVkLVdpdGgiXXx8KGNbIlgtUmVxdWVzdGVkLVdpdGgiXT0iWE1MSHR0cFJlcXVlc3QiKTtmb3IoZSBpbiBjKXZvaWQgMCE9PWNbZV0mJmYuc2V0UmVxdWVzdEhlYWRlcihlLGNbZV0rIiIpO2Yuc2VuZChhLmhhc0NvbnRlbnQmJmEuZGF0YXx8bnVsbCksYj1mdW5jdGlvbihjLGUpe3ZhciBoLGksajtpZihiJiYoZXx8ND09PWYucmVhZHlTdGF0ZSkpaWYoZGVsZXRlIFhjW2ddLGI9dm9pZCAwLGYub25yZWFkeXN0YXRlY2hhbmdlPW0ubm9vcCxlKTQhPT1mLnJlYWR5U3RhdGUmJmYuYWJvcnQoKTtlbHNle2o9e30saD1mLnN0YXR1cywic3RyaW5nIj09dHlwZW9mIGYucmVzcG9uc2VUZXh0JiYoai50ZXh0PWYucmVzcG9uc2VUZXh0KTt0cnl7aT1mLnN0YXR1c1RleHR9Y2F0Y2goayl7aT0iIn1ofHwhYS5pc0xvY2FsfHxhLmNyb3NzRG9tYWluPzEyMjM9PT1oJiYoaD0yMDQpOmg9ai50ZXh0PzIwMDo0MDR9aiYmZChoLGksaixmLmdldEFsbFJlc3BvbnNlSGVhZGVycygpKX0sYS5hc3luYz80PT09Zi5yZWFkeVN0YXRlP3NldFRpbWVvdXQoYik6Zi5vbnJlYWR5c3RhdGVjaGFuZ2U9WGNbZ109YjpiKCl9LGFib3J0OmZ1bmN0aW9uKCl7YiYmYih2b2lkIDAsITApfX19fSk7ZnVuY3Rpb24gWmMoKXt0cnl7cmV0dXJuIG5ldyBhLlhNTEh0dHBSZXF1ZXN0fWNhdGNoKGIpe319ZnVuY3Rpb24gJGMoKXt0cnl7cmV0dXJuIG5ldyBhLkFjdGl2ZVhPYmplY3QoIk1pY3Jvc29mdC5YTUxIVFRQIil9Y2F0Y2goYil7fX1tLmFqYXhTZXR1cCh7YWNjZXB0czp7c2NyaXB0OiJ0ZXh0L2phdmFzY3JpcHQsIGFwcGxpY2F0aW9uL2phdmFzY3JpcHQsIGFwcGxpY2F0aW9uL2VjbWFzY3JpcHQsIGFwcGxpY2F0aW9uL3gtZWNtYXNjcmlwdCJ9LGNvbnRlbnRzOntzY3JpcHQ6Lyg/OmphdmF8ZWNtYSlzY3JpcHQvfSxjb252ZXJ0ZXJzOnsidGV4dCBzY3JpcHQiOmZ1bmN0aW9uKGEpe3JldHVybiBtLmdsb2JhbEV2YWwoYSksYX19fSksbS5hamF4UHJlZmlsdGVyKCJzY3JpcHQiLGZ1bmN0aW9uKGEpe3ZvaWQgMD09PWEuY2FjaGUmJihhLmNhY2hlPSExKSxhLmNyb3NzRG9tYWluJiYoYS50eXBlPSJHRVQiLGEuZ2xvYmFsPSExKX0pLG0uYWpheFRyYW5zcG9ydCgic2NyaXB0IixmdW5jdGlvbihhKXtpZihhLmNyb3NzRG9tYWluKXt2YXIgYixjPXkuaGVhZHx8bSgiaGVhZCIpWzBdfHx5LmRvY3VtZW50RWxlbWVudDtyZXR1cm57c2VuZDpmdW5jdGlvbihkLGUpe2I9eS5jcmVhdGVFbGVtZW50KCJzY3JpcHQiKSxiLmFzeW5jPSEwLGEuc2NyaXB0Q2hhcnNldCYmKGIuY2hhcnNldD1hLnNjcmlwdENoYXJzZXQpLGIuc3JjPWEudXJsLGIub25sb2FkPWIub25yZWFkeXN0YXRlY2hhbmdlPWZ1bmN0aW9uKGEsYyl7KGN8fCFiLnJlYWR5U3RhdGV8fC9sb2FkZWR8Y29tcGxldGUvLnRlc3QoYi5yZWFkeVN0YXRlKSkmJihiLm9ubG9hZD1iLm9ucmVhZHlzdGF0ZWNoYW5nZT1udWxsLGIucGFyZW50Tm9kZSYmYi5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGIpLGI9bnVsbCxjfHxlKDIwMCwic3VjY2VzcyIpKX0sYy5pbnNlcnRCZWZvcmUoYixjLmZpcnN0Q2hpbGQpfSxhYm9ydDpmdW5jdGlvbigpe2ImJmIub25sb2FkKHZvaWQgMCwhMCl9fX19KTt2YXIgX2M9W10sYWQ9Lyg9KVw/KD89JnwkKXxcP1w/LzttLmFqYXhTZXR1cCh7anNvbnA6ImNhbGxiYWNrIixqc29ucENhbGxiYWNrOmZ1bmN0aW9uKCl7dmFyIGE9X2MucG9wKCl8fG0uZXhwYW5kbysiXyIrdmMrKztyZXR1cm4gdGhpc1thXT0hMCxhfX0pLG0uYWpheFByZWZpbHRlcigianNvbiBqc29ucCIsZnVuY3Rpb24oYixjLGQpe3ZhciBlLGYsZyxoPWIuanNvbnAhPT0hMSYmKGFkLnRlc3QoYi51cmwpPyJ1cmwiOiJzdHJpbmciPT10eXBlb2YgYi5kYXRhJiYhKGIuY29udGVudFR5cGV8fCIiKS5pbmRleE9mKCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQiKSYmYWQudGVzdChiLmRhdGEpJiYiZGF0YSIpO3JldHVybiBofHwianNvbnAiPT09Yi5kYXRhVHlwZXNbMF0/KGU9Yi5qc29ucENhbGxiYWNrPW0uaXNGdW5jdGlvbihiLmpzb25wQ2FsbGJhY2spP2IuanNvbnBDYWxsYmFjaygpOmIuanNvbnBDYWxsYmFjayxoP2JbaF09YltoXS5yZXBsYWNlKGFkLCIkMSIrZSk6Yi5qc29ucCE9PSExJiYoYi51cmwrPSh3Yy50ZXN0KGIudXJsKT8iJiI6Ij8iKStiLmpzb25wKyI9IitlKSxiLmNvbnZlcnRlcnNbInNjcmlwdCBqc29uIl09ZnVuY3Rpb24oKXtyZXR1cm4gZ3x8bS5lcnJvcihlKyIgd2FzIG5vdCBjYWxsZWQiKSxnWzBdfSxiLmRhdGFUeXBlc1swXT0ianNvbiIsZj1hW2VdLGFbZV09ZnVuY3Rpb24oKXtnPWFyZ3VtZW50c30sZC5hbHdheXMoZnVuY3Rpb24oKXthW2VdPWYsYltlXSYmKGIuanNvbnBDYWxsYmFjaz1jLmpzb25wQ2FsbGJhY2ssX2MucHVzaChlKSksZyYmbS5pc0Z1bmN0aW9uKGYpJiZmKGdbMF0pLGc9Zj12b2lkIDB9KSwic2NyaXB0Iik6dm9pZCAwfSksbS5wYXJzZUhUTUw9ZnVuY3Rpb24oYSxiLGMpe2lmKCFhfHwic3RyaW5nIiE9dHlwZW9mIGEpcmV0dXJuIG51bGw7ImJvb2xlYW4iPT10eXBlb2YgYiYmKGM9YixiPSExKSxiPWJ8fHk7dmFyIGQ9dS5leGVjKGEpLGU9IWMmJltdO3JldHVybiBkP1tiLmNyZWF0ZUVsZW1lbnQoZFsxXSldOihkPW0uYnVpbGRGcmFnbWVudChbYV0sYixlKSxlJiZlLmxlbmd0aCYmbShlKS5yZW1vdmUoKSxtLm1lcmdlKFtdLGQuY2hpbGROb2RlcykpfTt2YXIgYmQ9bS5mbi5sb2FkO20uZm4ubG9hZD1mdW5jdGlvbihhLGIsYyl7aWYoInN0cmluZyIhPXR5cGVvZiBhJiZiZClyZXR1cm4gYmQuYXBwbHkodGhpcyxhcmd1bWVudHMpO3ZhciBkLGUsZixnPXRoaXMsaD1hLmluZGV4T2YoIiAiKTtyZXR1cm4gaD49MCYmKGQ9bS50cmltKGEuc2xpY2UoaCxhLmxlbmd0aCkpLGE9YS5zbGljZSgwLGgpKSxtLmlzRnVuY3Rpb24oYik/KGM9YixiPXZvaWQgMCk6YiYmIm9iamVjdCI9PXR5cGVvZiBiJiYoZj0iUE9TVCIpLGcubGVuZ3RoPjAmJm0uYWpheCh7dXJsOmEsdHlwZTpmLGRhdGFUeXBlOiJodG1sIixkYXRhOmJ9KS5kb25lKGZ1bmN0aW9uKGEpe2U9YXJndW1lbnRzLGcuaHRtbChkP20oIjxkaXY+IikuYXBwZW5kKG0ucGFyc2VIVE1MKGEpKS5maW5kKGQpOmEpfSkuY29tcGxldGUoYyYmZnVuY3Rpb24oYSxiKXtnLmVhY2goYyxlfHxbYS5yZXNwb25zZVRleHQsYixhXSl9KSx0aGlzfSxtLmV4cHIuZmlsdGVycy5hbmltYXRlZD1mdW5jdGlvbihhKXtyZXR1cm4gbS5ncmVwKG0udGltZXJzLGZ1bmN0aW9uKGIpe3JldHVybiBhPT09Yi5lbGVtfSkubGVuZ3RofTt2YXIgY2Q9YS5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7ZnVuY3Rpb24gZGQoYSl7cmV0dXJuIG0uaXNXaW5kb3coYSk/YTo5PT09YS5ub2RlVHlwZT9hLmRlZmF1bHRWaWV3fHxhLnBhcmVudFdpbmRvdzohMX1tLm9mZnNldD17c2V0T2Zmc2V0OmZ1bmN0aW9uKGEsYixjKXt2YXIgZCxlLGYsZyxoLGksaixrPW0uY3NzKGEsInBvc2l0aW9uIiksbD1tKGEpLG49e307InN0YXRpYyI9PT1rJiYoYS5zdHlsZS5wb3NpdGlvbj0icmVsYXRpdmUiKSxoPWwub2Zmc2V0KCksZj1tLmNzcyhhLCJ0b3AiKSxpPW0uY3NzKGEsImxlZnQiKSxqPSgiYWJzb2x1dGUiPT09a3x8ImZpeGVkIj09PWspJiZtLmluQXJyYXkoImF1dG8iLFtmLGldKT4tMSxqPyhkPWwucG9zaXRpb24oKSxnPWQudG9wLGU9ZC5sZWZ0KTooZz1wYXJzZUZsb2F0KGYpfHwwLGU9cGFyc2VGbG9hdChpKXx8MCksbS5pc0Z1bmN0aW9uKGIpJiYoYj1iLmNhbGwoYSxjLGgpKSxudWxsIT1iLnRvcCYmKG4udG9wPWIudG9wLWgudG9wK2cpLG51bGwhPWIubGVmdCYmKG4ubGVmdD1iLmxlZnQtaC5sZWZ0K2UpLCJ1c2luZyJpbiBiP2IudXNpbmcuY2FsbChhLG4pOmwuY3NzKG4pfX0sbS5mbi5leHRlbmQoe29mZnNldDpmdW5jdGlvbihhKXtpZihhcmd1bWVudHMubGVuZ3RoKXJldHVybiB2b2lkIDA9PT1hP3RoaXM6dGhpcy5lYWNoKGZ1bmN0aW9uKGIpe20ub2Zmc2V0LnNldE9mZnNldCh0aGlzLGEsYil9KTt2YXIgYixjLGQ9e3RvcDowLGxlZnQ6MH0sZT10aGlzWzBdLGY9ZSYmZS5vd25lckRvY3VtZW50O2lmKGYpcmV0dXJuIGI9Zi5kb2N1bWVudEVsZW1lbnQsbS5jb250YWlucyhiLGUpPyh0eXBlb2YgZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QhPT1LJiYoZD1lLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpKSxjPWRkKGYpLHt0b3A6ZC50b3ArKGMucGFnZVlPZmZzZXR8fGIuc2Nyb2xsVG9wKS0oYi5jbGllbnRUb3B8fDApLGxlZnQ6ZC5sZWZ0KyhjLnBhZ2VYT2Zmc2V0fHxiLnNjcm9sbExlZnQpLShiLmNsaWVudExlZnR8fDApfSk6ZH0scG9zaXRpb246ZnVuY3Rpb24oKXtpZih0aGlzWzBdKXt2YXIgYSxiLGM9e3RvcDowLGxlZnQ6MH0sZD10aGlzWzBdO3JldHVybiJmaXhlZCI9PT1tLmNzcyhkLCJwb3NpdGlvbiIpP2I9ZC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTooYT10aGlzLm9mZnNldFBhcmVudCgpLGI9dGhpcy5vZmZzZXQoKSxtLm5vZGVOYW1lKGFbMF0sImh0bWwiKXx8KGM9YS5vZmZzZXQoKSksYy50b3ArPW0uY3NzKGFbMF0sImJvcmRlclRvcFdpZHRoIiwhMCksYy5sZWZ0Kz1tLmNzcyhhWzBdLCJib3JkZXJMZWZ0V2lkdGgiLCEwKSkse3RvcDpiLnRvcC1jLnRvcC1tLmNzcyhkLCJtYXJnaW5Ub3AiLCEwKSxsZWZ0OmIubGVmdC1jLmxlZnQtbS5jc3MoZCwibWFyZ2luTGVmdCIsITApfX19LG9mZnNldFBhcmVudDpmdW5jdGlvbigpe3JldHVybiB0aGlzLm1hcChmdW5jdGlvbigpe3ZhciBhPXRoaXMub2Zmc2V0UGFyZW50fHxjZDt3aGlsZShhJiYhbS5ub2RlTmFtZShhLCJodG1sIikmJiJzdGF0aWMiPT09bS5jc3MoYSwicG9zaXRpb24iKSlhPWEub2Zmc2V0UGFyZW50O3JldHVybiBhfHxjZH0pfX0pLG0uZWFjaCh7c2Nyb2xsTGVmdDoicGFnZVhPZmZzZXQiLHNjcm9sbFRvcDoicGFnZVlPZmZzZXQifSxmdW5jdGlvbihhLGIpe3ZhciBjPS9ZLy50ZXN0KGIpO20uZm5bYV09ZnVuY3Rpb24oZCl7cmV0dXJuIFYodGhpcyxmdW5jdGlvbihhLGQsZSl7dmFyIGY9ZGQoYSk7cmV0dXJuIHZvaWQgMD09PWU/Zj9iIGluIGY/ZltiXTpmLmRvY3VtZW50LmRvY3VtZW50RWxlbWVudFtkXTphW2RdOnZvaWQoZj9mLnNjcm9sbFRvKGM/bShmKS5zY3JvbGxMZWZ0KCk6ZSxjP2U6bShmKS5zY3JvbGxUb3AoKSk6YVtkXT1lKX0sYSxkLGFyZ3VtZW50cy5sZW5ndGgsbnVsbCl9fSksbS5lYWNoKFsidG9wIiwibGVmdCJdLGZ1bmN0aW9uKGEsYil7bS5jc3NIb29rc1tiXT1MYihrLnBpeGVsUG9zaXRpb24sZnVuY3Rpb24oYSxjKXtyZXR1cm4gYz8oYz1KYihhLGIpLEhiLnRlc3QoYyk/bShhKS5wb3NpdGlvbigpW2JdKyJweCI6Yyk6dm9pZCAwfSl9KSxtLmVhY2goe0hlaWdodDoiaGVpZ2h0IixXaWR0aDoid2lkdGgifSxmdW5jdGlvbihhLGIpe20uZWFjaCh7cGFkZGluZzoiaW5uZXIiK2EsY29udGVudDpiLCIiOiJvdXRlciIrYX0sZnVuY3Rpb24oYyxkKXttLmZuW2RdPWZ1bmN0aW9uKGQsZSl7dmFyIGY9YXJndW1lbnRzLmxlbmd0aCYmKGN8fCJib29sZWFuIiE9dHlwZW9mIGQpLGc9Y3x8KGQ9PT0hMHx8ZT09PSEwPyJtYXJnaW4iOiJib3JkZXIiKTtyZXR1cm4gVih0aGlzLGZ1bmN0aW9uKGIsYyxkKXt2YXIgZTtyZXR1cm4gbS5pc1dpbmRvdyhiKT9iLmRvY3VtZW50LmRvY3VtZW50RWxlbWVudFsiY2xpZW50IithXTo5PT09Yi5ub2RlVHlwZT8oZT1iLmRvY3VtZW50RWxlbWVudCxNYXRoLm1heChiLmJvZHlbInNjcm9sbCIrYV0sZVsic2Nyb2xsIithXSxiLmJvZHlbIm9mZnNldCIrYV0sZVsib2Zmc2V0IithXSxlWyJjbGllbnQiK2FdKSk6dm9pZCAwPT09ZD9tLmNzcyhiLGMsZyk6bS5zdHlsZShiLGMsZCxnKX0sYixmP2Q6dm9pZCAwLGYsbnVsbCl9fSl9KSxtLmZuLnNpemU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5sZW5ndGh9LG0uZm4uYW5kU2VsZj1tLmZuLmFkZEJhY2ssImZ1bmN0aW9uIj09dHlwZW9mIGRlZmluZSYmZGVmaW5lLmFtZCYmZGVmaW5lKCJqcXVlcnkiLFtdLGZ1bmN0aW9uKCl7cmV0dXJuIG19KTt2YXIgZWQ9YS5qUXVlcnksZmQ9YS4kO3JldHVybiBtLm5vQ29uZmxpY3Q9ZnVuY3Rpb24oYil7cmV0dXJuIGEuJD09PW0mJihhLiQ9ZmQpLGImJmEualF1ZXJ5PT09bSYmKGEualF1ZXJ5PWVkKSxtfSx0eXBlb2YgYj09PUsmJihhLmpRdWVyeT1hLiQ9bSksbX0pOwo="></script>
<link href="data:text/css;charset=utf-8,%0A%2Eleaflet%2Dmap%2Dpane%2C%0A%2Eleaflet%2Dtile%2C%0A%2Eleaflet%2Dmarker%2Dicon%2C%0A%2Eleaflet%2Dmarker%2Dshadow%2C%0A%2Eleaflet%2Dtile%2Dpane%2C%0A%2Eleaflet%2Dtile%2Dcontainer%2C%0A%2Eleaflet%2Doverlay%2Dpane%2C%0A%2Eleaflet%2Dshadow%2Dpane%2C%0A%2Eleaflet%2Dmarker%2Dpane%2C%0A%2Eleaflet%2Dpopup%2Dpane%2C%0A%2Eleaflet%2Doverlay%2Dpane%20svg%2C%0A%2Eleaflet%2Dzoom%2Dbox%2C%0A%2Eleaflet%2Dimage%2Dlayer%2C%0A%2Eleaflet%2Dlayer%20%7B%0Aposition%3A%20absolute%3B%0Aleft%3A%200%3B%0Atop%3A%200%3B%0A%7D%0A%2Eleaflet%2Dcontainer%20%7B%0Aoverflow%3A%20hidden%3B%0A%2Dms%2Dtouch%2Daction%3A%20none%3B%0A%7D%0A%2Eleaflet%2Dtile%2C%0A%2Eleaflet%2Dmarker%2Dicon%2C%0A%2Eleaflet%2Dmarker%2Dshadow%20%7B%0A%2Dwebkit%2Duser%2Dselect%3A%20none%3B%0A%2Dmoz%2Duser%2Dselect%3A%20none%3B%0Auser%2Dselect%3A%20none%3B%0A%2Dwebkit%2Duser%2Ddrag%3A%20none%3B%0A%7D%0A%2Eleaflet%2Dmarker%2Dicon%2C%0A%2Eleaflet%2Dmarker%2Dshadow%20%7B%0Adisplay%3A%20block%3B%0A%7D%0A%0A%2Eleaflet%2Dcontainer%20img%20%7B%0Amax%2Dwidth%3A%20none%20%21important%3B%0A%7D%0A%0A%2Eleaflet%2Dcontainer%20img%2Eleaflet%2Dimage%2Dlayer%20%7B%0Amax%2Dwidth%3A%2015000px%20%21important%3B%0A%7D%0A%2Eleaflet%2Dtile%20%7B%0Afilter%3A%20inherit%3B%0Avisibility%3A%20hidden%3B%0A%7D%0A%2Eleaflet%2Dtile%2Dloaded%20%7B%0Avisibility%3A%20inherit%3B%0A%7D%0A%2Eleaflet%2Dzoom%2Dbox%20%7B%0Awidth%3A%200%3B%0Aheight%3A%200%3B%0A%7D%0A%0A%2Eleaflet%2Doverlay%2Dpane%20svg%20%7B%0A%2Dmoz%2Duser%2Dselect%3A%20none%3B%0A%7D%0A%2Eleaflet%2Dtile%2Dpane%20%7B%20z%2Dindex%3A%202%3B%20%7D%0A%2Eleaflet%2Dobjects%2Dpane%20%7B%20z%2Dindex%3A%203%3B%20%7D%0A%2Eleaflet%2Doverlay%2Dpane%20%7B%20z%2Dindex%3A%204%3B%20%7D%0A%2Eleaflet%2Dshadow%2Dpane%20%7B%20z%2Dindex%3A%205%3B%20%7D%0A%2Eleaflet%2Dmarker%2Dpane%20%7B%20z%2Dindex%3A%206%3B%20%7D%0A%2Eleaflet%2Dpopup%2Dpane%20%7B%20z%2Dindex%3A%207%3B%20%7D%0A%2Eleaflet%2Dvml%2Dshape%20%7B%0Awidth%3A%201px%3B%0Aheight%3A%201px%3B%0A%7D%0A%2Elvml%20%7B%0Abehavior%3A%20url%28%23default%23VML%29%3B%0Adisplay%3A%20inline%2Dblock%3B%0Aposition%3A%20absolute%3B%0A%7D%0A%0A%2Eleaflet%2Dcontrol%20%7B%0Aposition%3A%20relative%3B%0Az%2Dindex%3A%207%3B%0Apointer%2Devents%3A%20auto%3B%0A%7D%0A%2Eleaflet%2Dtop%2C%0A%2Eleaflet%2Dbottom%20%7B%0Aposition%3A%20absolute%3B%0Az%2Dindex%3A%201000%3B%0Apointer%2Devents%3A%20none%3B%0A%7D%0A%2Eleaflet%2Dtop%20%7B%0Atop%3A%200%3B%0A%7D%0A%2Eleaflet%2Dright%20%7B%0Aright%3A%200%3B%0A%7D%0A%2Eleaflet%2Dbottom%20%7B%0Abottom%3A%200%3B%0A%7D%0A%2Eleaflet%2Dleft%20%7B%0Aleft%3A%200%3B%0A%7D%0A%2Eleaflet%2Dcontrol%20%7B%0Afloat%3A%20left%3B%0Aclear%3A%20both%3B%0A%7D%0A%2Eleaflet%2Dright%20%2Eleaflet%2Dcontrol%20%7B%0Afloat%3A%20right%3B%0A%7D%0A%2Eleaflet%2Dtop%20%2Eleaflet%2Dcontrol%20%7B%0Amargin%2Dtop%3A%2010px%3B%0A%7D%0A%2Eleaflet%2Dbottom%20%2Eleaflet%2Dcontrol%20%7B%0Amargin%2Dbottom%3A%2010px%3B%0A%7D%0A%2Eleaflet%2Dleft%20%2Eleaflet%2Dcontrol%20%7B%0Amargin%2Dleft%3A%2010px%3B%0A%7D%0A%2Eleaflet%2Dright%20%2Eleaflet%2Dcontrol%20%7B%0Amargin%2Dright%3A%2010px%3B%0A%7D%0A%0A%2Eleaflet%2Dfade%2Danim%20%2Eleaflet%2Dtile%2C%0A%2Eleaflet%2Dfade%2Danim%20%2Eleaflet%2Dpopup%20%7B%0Aopacity%3A%200%3B%0A%2Dwebkit%2Dtransition%3A%20opacity%200%2E2s%20linear%3B%0A%2Dmoz%2Dtransition%3A%20opacity%200%2E2s%20linear%3B%0A%2Do%2Dtransition%3A%20opacity%200%2E2s%20linear%3B%0Atransition%3A%20opacity%200%2E2s%20linear%3B%0A%7D%0A%2Eleaflet%2Dfade%2Danim%20%2Eleaflet%2Dtile%2Dloaded%2C%0A%2Eleaflet%2Dfade%2Danim%20%2Eleaflet%2Dmap%2Dpane%20%2Eleaflet%2Dpopup%20%7B%0Aopacity%3A%201%3B%0A%7D%0A%2Eleaflet%2Dzoom%2Danim%20%2Eleaflet%2Dzoom%2Danimated%20%7B%0A%2Dwebkit%2Dtransition%3A%20%2Dwebkit%2Dtransform%200%2E25s%20cubic%2Dbezier%280%2C0%2C0%2E25%2C1%29%3B%0A%2Dmoz%2Dtransition%3A%20%2Dmoz%2Dtransform%200%2E25s%20cubic%2Dbezier%280%2C0%2C0%2E25%2C1%29%3B%0A%2Do%2Dtransition%3A%20%2Do%2Dtransform%200%2E25s%20cubic%2Dbezier%280%2C0%2C0%2E25%2C1%29%3B%0Atransition%3A%20transform%200%2E25s%20cubic%2Dbezier%280%2C0%2C0%2E25%2C1%29%3B%0A%7D%0A%2Eleaflet%2Dzoom%2Danim%20%2Eleaflet%2Dtile%2C%0A%2Eleaflet%2Dpan%2Danim%20%2Eleaflet%2Dtile%2C%0A%2Eleaflet%2Dtouching%20%2Eleaflet%2Dzoom%2Danimated%20%7B%0A%2Dwebkit%2Dtransition%3A%20none%3B%0A%2Dmoz%2Dtransition%3A%20none%3B%0A%2Do%2Dtransition%3A%20none%3B%0Atransition%3A%20none%3B%0A%7D%0A%2Eleaflet%2Dzoom%2Danim%20%2Eleaflet%2Dzoom%2Dhide%20%7B%0Avisibility%3A%20hidden%3B%0A%7D%0A%0A%2Eleaflet%2Dclickable%20%7B%0Acursor%3A%20pointer%3B%0A%7D%0A%2Eleaflet%2Dcontainer%20%7B%0Acursor%3A%20%2Dwebkit%2Dgrab%3B%0Acursor%3A%20%2Dmoz%2Dgrab%3B%0A%7D%0A%2Eleaflet%2Dpopup%2Dpane%2C%0A%2Eleaflet%2Dcontrol%20%7B%0Acursor%3A%20auto%3B%0A%7D%0A%2Eleaflet%2Ddragging%20%2Eleaflet%2Dcontainer%2C%0A%2Eleaflet%2Ddragging%20%2Eleaflet%2Dclickable%20%7B%0Acursor%3A%20move%3B%0Acursor%3A%20%2Dwebkit%2Dgrabbing%3B%0Acursor%3A%20%2Dmoz%2Dgrabbing%3B%0A%7D%0A%0A%2Eleaflet%2Dcontainer%20%7B%0Abackground%3A%20%23ddd%3B%0Aoutline%3A%200%3B%0A%7D%0A%2Eleaflet%2Dcontainer%20a%20%7B%0Acolor%3A%20%230078A8%3B%0A%7D%0A%2Eleaflet%2Dcontainer%20a%2Eleaflet%2Dactive%20%7B%0Aoutline%3A%202px%20solid%20orange%3B%0A%7D%0A%2Eleaflet%2Dzoom%2Dbox%20%7B%0Aborder%3A%202px%20dotted%20%2338f%3B%0Abackground%3A%20rgba%28255%2C255%2C255%2C0%2E5%29%3B%0A%7D%0A%0A%2Eleaflet%2Dcontainer%20%7B%0Afont%3A%2012px%2F1%2E5%20%22Helvetica%20Neue%22%2C%20Arial%2C%20Helvetica%2C%20sans%2Dserif%3B%0A%7D%0A%0A%2Eleaflet%2Dbar%20%7B%0Abox%2Dshadow%3A%200%201px%205px%20rgba%280%2C0%2C0%2C0%2E65%29%3B%0Aborder%2Dradius%3A%204px%3B%0A%7D%0A%2Eleaflet%2Dbar%20a%2C%0A%2Eleaflet%2Dbar%20a%3Ahover%20%7B%0Abackground%2Dcolor%3A%20%23fff%3B%0Aborder%2Dbottom%3A%201px%20solid%20%23ccc%3B%0Awidth%3A%2026px%3B%0Aheight%3A%2026px%3B%0Aline%2Dheight%3A%2026px%3B%0Adisplay%3A%20block%3B%0Atext%2Dalign%3A%20center%3B%0Atext%2Ddecoration%3A%20none%3B%0Acolor%3A%20black%3B%0A%7D%0A%2Eleaflet%2Dbar%20a%2C%0A%2Eleaflet%2Dcontrol%2Dlayers%2Dtoggle%20%7B%0Abackground%2Dposition%3A%2050%25%2050%25%3B%0Abackground%2Drepeat%3A%20no%2Drepeat%3B%0Adisplay%3A%20block%3B%0A%7D%0A%2Eleaflet%2Dbar%20a%3Ahover%20%7B%0Abackground%2Dcolor%3A%20%23f4f4f4%3B%0A%7D%0A%2Eleaflet%2Dbar%20a%3Afirst%2Dchild%20%7B%0Aborder%2Dtop%2Dleft%2Dradius%3A%204px%3B%0Aborder%2Dtop%2Dright%2Dradius%3A%204px%3B%0A%7D%0A%2Eleaflet%2Dbar%20a%3Alast%2Dchild%20%7B%0Aborder%2Dbottom%2Dleft%2Dradius%3A%204px%3B%0Aborder%2Dbottom%2Dright%2Dradius%3A%204px%3B%0Aborder%2Dbottom%3A%20none%3B%0A%7D%0A%2Eleaflet%2Dbar%20a%2Eleaflet%2Ddisabled%20%7B%0Acursor%3A%20default%3B%0Abackground%2Dcolor%3A%20%23f4f4f4%3B%0Acolor%3A%20%23bbb%3B%0A%7D%0A%2Eleaflet%2Dtouch%20%2Eleaflet%2Dbar%20a%20%7B%0Awidth%3A%2030px%3B%0Aheight%3A%2030px%3B%0Aline%2Dheight%3A%2030px%3B%0A%7D%0A%0A%2Eleaflet%2Dcontrol%2Dzoom%2Din%2C%0A%2Eleaflet%2Dcontrol%2Dzoom%2Dout%20%7B%0Afont%3A%20bold%2018px%20%27Lucida%20Console%27%2C%20Monaco%2C%20monospace%3B%0Atext%2Dindent%3A%201px%3B%0A%7D%0A%2Eleaflet%2Dcontrol%2Dzoom%2Dout%20%7B%0Afont%2Dsize%3A%2020px%3B%0A%7D%0A%2Eleaflet%2Dtouch%20%2Eleaflet%2Dcontrol%2Dzoom%2Din%20%7B%0Afont%2Dsize%3A%2022px%3B%0A%7D%0A%2Eleaflet%2Dtouch%20%2Eleaflet%2Dcontrol%2Dzoom%2Dout%20%7B%0Afont%2Dsize%3A%2024px%3B%0A%7D%0A%0A%2Eleaflet%2Dcontrol%2Dlayers%20%7B%0Abox%2Dshadow%3A%200%201px%205px%20rgba%280%2C0%2C0%2C0%2E4%29%3B%0Abackground%3A%20%23fff%3B%0Aborder%2Dradius%3A%205px%3B%0A%7D%0A%2Eleaflet%2Dcontrol%2Dlayers%2Dtoggle%20%7B%0Abackground%2Dimage%3A%20url%28data%3Aimage%2Fpng%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABoAAAAaCAYAAACpSkzOAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAN1wAADdcBQiibeAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAVbSURBVEiJrZZfSFt3FMe%2Fv3tvbmLUZleNKSHE%2FLGRiNbGRovTtrA9lcFkpcOnMvawwhhjrb3soQ8djGFhXMQNRqEvY3R9kJVuPpRRWQebcdKYxkaHqcHchKJ2rVo1WhNz%2F%2Fz2UOLUadVuv9fvOedzfuec3x9CKcV%2B1qVLlwgAdHV17cuR7AfU29tb43a73wWAVCr1Q0dHx8T%2FCuru7i5ubGw843K5ms1mMwBgdXUV6XQ6HI1Gb3Z2dj7%2Fz6C%2Bvr6T1dXVp6xWa%2Bl2%2Buzs7PLk5OTP7e3tv70S6Pr1647q6uoOt9vtYRjmpcnouo5UKiVPTk72nj17dmpPIEmS%2BIaGhnaPx3O8tLSU3ahRSotyudzrAGAymf4ghGQ36svLy5osywOxWKxPFMX8jqBbt241ejyed%2Bx2e9nWjPL5fK2iKC2UUiMAEELWDAbDEM%2Fz41ttZ2Zmnsmy%2FOPp06ejm0DXrl2rqK2tPeNyuQ7zPL9pi5qmVaytrZ3Qdf3gdiVhGOYvo9H4O8uyc1sSI%2Bl0enR8fPzmuXPn5sjt27ff8nq9bwiCYNpSJsPa2lqzqqr1AF7eJEDnOG7MaDSGCSHKRmFhYSGXTCZ%2FZd1u93dOp3NJEAS9ICqK4snlcm%2Fpuu4EQHaBAADRdf2gqqo1hJBllmUXCsLjx4%2BL7t69e4Ztamqaffjw4QepVOr5oUOHDKqqvqkoShAAvwfA1sVrmlataVqlqqqzvb29lnA43KwoymeEUoqenp7XdF3vW11dPX7s2DHi9XpfgfHPSiaTuHfvHjWbzQMMw7SfP39%2BkUSj0ZOU0qsA%2FEtLSwiHwygpKUFraysOHDiwL0Amk8Hg4CBWVlbQ3NwMi8UCAHFCyIesw%2BH43uFwuAwGg9lkMsHj8SCfzyMUCkFRFNhsNux2YDVNQzQaRSgUgsvlwtGjR2EyvZitbDbL9Pf3H2YDgcD8xMREk67rCZvN5iSEkLKyMrjdbsiyjJGREVgslh13NzU1hf7%2Bfui6jra2NlitVhBCQCmlo6OjoYGBASWbzX5BKKW4cuWKhRDyk67rJ4LBIFNRUbEeaHZ2FpFIBDabDS0tLSgqKipkiqGhITx58gTBYBBWq3XdZ25uDpFIhLIsO8jzfPuFCxeekTt37rQCuAqgfmVlBfF4HOXl5Thy5Ah4%2FsXgUUoRj8chyzIaGhoAALFYDB6PB36%2FH4S8OAH5fB4PHjzA%2FPw8%2FH4%2FSkpKACAB4CPW6%2FXeqKysrOI4rpjnedjtdmSzWUSjURgMBgiCAEIIrFYrHA4HxsfHsbi4iNbWVtjt9nWILMsYGhpCeXk5ampqYDQaC3AyPDxcSy5evPg2IaTL6XTO%2B3y%2BNkIIAwCKoiCRSEBVVTQ1Ne3Yo0wmg%2BHhYXAcB5%2FPB4PBUJBoMpkclGW5lFJ6mVBKIYpiMYDLHMedCgQCnCAI%2FoL1wsICEokEHA4H6uvr1ydQ13WMjY1hamoKPp8PgiBshE%2Fev38%2FoyjKLwA%2BlyTp%2BabbWxTFOgDfCIKAQCAQ4DiutNCjdDqNp0%2BfIhAIAABGRkZQWVkJl8u1Xj5N01Zjsdjw3NwcBfCxJEl%2FFmL%2F6z0SRZEAeJ8QIvp8vsWqqqqWgpbL5RCPxwEAfr9%2F%2FawAwPT0dDgejxfput4D4FtJkjYF3vGFFUWxHMCXRqPxcDAYtBYXF1dtZ5fNZmcikcijbDY7DuBTSZLmt7Pb9c8gimIbIeQrm82Wqaura2EYxggAlFI1Ho8PTk9PmymlnZIkhV4WZ0%2B%2FIFEUOQCdDMO8V19fn2NZ1hCLxaimaTcAdEuSpO4WY1%2F%2FOlEUnQC%2BBkABfCJJ0qO9%2Bv4NmO9xnZob3WcAAAAASUVORK5CYII%3D%29%3B%0Awidth%3A%2036px%3B%0Aheight%3A%2036px%3B%0A%7D%0A%2Eleaflet%2Dretina%20%2Eleaflet%2Dcontrol%2Dlayers%2Dtoggle%20%7B%0Abackground%2Dimage%3A%20url%28data%3Aimage%2Fpng%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAADQAAAA0CAYAAADFeBvrAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAbrwAAG68BXhqRHAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAArPSURBVGiB3Zp7TFvXHce%2F916%2FeBhCDInJwDjGBhvjQHi5SclaKRL5Z1Wl%2FrEq%2FWNr11TJmkpMw900pLVrplJ1cadFarp0zdZmmpZpf3SqNrUKfSnKgwI2sQPGBmNjAsUOxCW8bGzfe8%2F%2BSEAkMfa1A5m075%2F2%2Bf3O%2BZ7X595zLkUIwf%2BT6EdRSWdnp7izs1P8KOqitnqE3n%2F%2F%2FQMajeYZAPD7%2FR8fPXr00lbWt2WGTp48qdRoNC%2Fs2bNHXVhYyALA%2FPy86Pr16wG%2F3%2F%2Fhq6%2B%2BGtqKejfdUGdnJ6XT6Q4bDIZWjUaTNLnf76fcbvdlr9d7vqura1MbsKmGTp8%2BXadWqw%2Fv3bu3UCQS8anKsixLX7t2bT4QCJw%2Ffvy4c7PasCmGTpw4Ia%2BqqnrRZDIZSkpK2ExiZ2dnRYODg%2B7R0dE%2Fv%2Fbaa4sP25aHNnT27Nkf6HS6QwaD4aF2TLfbzXu93gtHjhz5z8PkydrQqVOnKtVq9Y%2Fq6uqUubm5GY3KRopEIiKn0xkKBAJ%2FbW9v92WTI2NDnZ2dYoPB8ILRaGwoKyvjsqk0naamphiXyzXgdrs%2F7OrqSmQSm5GhM2fOHNBoNM%2FU1dVJKYoSFEgIEcVisWYAkEql%2FRRFCRpNQgjldDpjfr%2F%2F42PHjglmlyBDJ0%2BeVO7evfsndXV1FatMEaJEIqGOx%2BMHCCFyAKAoalEikVwSi8UBoTnm5%2BdFTqdzYnx8%2FC9C2JXS0CpT9Hr9gcrKypTb8HrxPJ%2B%2FsrJygOf53cn%2Bp2l6XCaTXaJpekloTp%2FPR3s8nkvp2LWhoXfffbderVYfbmhoKEjHlPVtjcVidSzLNhFCUj67URSVEIlENqlU6gQgKD%2FLsvTAwMBCIBA4%2F8orrziS5r3f0IkTJ%2BQ6ne6IyWQy7NixQ%2FCCZFm2NB6PP8Hz%2FHahMQBA0%2FR3EonkokgkCgqNmZmZEQ8ODrq9Xu%2FZ%2B9l1j6EPPvjgKZ1Od6impoYSmpzneVksFtvHcZxBaEwyMQzjlkqlPTRNrwiNGR4eJl6v98JLL73079XfKEIITp06VVlRUfHj%2Bvr6nZkwJR6P6xOJxH5CiCxTA8lEUdSKWCy%2BKpFIPEJjIpGIyOFw3JyYmDjX3t7uo86dO3fUaDQ2lJeXCzbCcdz2WCz2BM%2Fzpdk1PbVomg5KpdKLDMN8JzRmcnJS5HK5Bhi9Xv9RcXHx7V27dqUd6rtMMcfj8YOEkIKHa3bKeuQsy9bwPC9mGCZEUVTaTWNsbKzQbrc%2FRXV0dBAAMYVCcfnpp5%2BeKC4uTmrsfqY8KqVj161bt2SffPJJRTgcbgUgZVpbW3sIIQei0Wij0%2BksmZubW9DpdEsUdWdf4Hk%2BPxqNHmRZtgWA9NFZWZOU4zgdy7LFd0crDgCEEHz66aelX3zxxfcjkUg9gAmapg8zV65c8fX09PwpHo%2FzhJC22dnZ2oGBARQUFCwVFBTUxOPxQ4QQxf%2FAyD0ihBSxLFtDCCFerzdy%2Fvz5PcFg8CAhRAqgSy6XP%2Ffmm2%2BO3LNtd3R0VFEU9R6AgyKRiNfr9fS%2BffsgFj%2BS8420SiQS6Onpgcfj4VmWpQF8SQh5%2BZ133hldLSNaH%2FDss8%2BGGYYJ3Lhxg9jtdnpoaAiTk5NoampCdXX1IzewXiMjI7DZbJifn4dMJqPNZjNRqVQBjuPC68utjhA1MDDwPIDfASgG7vSGw%2BHA2NgYAEClUmH%2F%2Fv0oKip6pEbm5uZw9epV3LhxAwCg1WpRX1%2B%2FftbcAvCLhoaGjwAQyuFwGDmOOwOgNVnCcDiMvr4%2BzM3NQSaTwWg0orm5GTS9tUd6PM%2Bjv78fLpcLKysrKCoqQktLCxSKDZfzZYZhjjFarfYfKpWqmabppAslNzcXWq0WMpkMwWAQU1NTCAQCyM%2FPx7Zt27bEzMTEBD7%2F%2FHP4fD5QFIWGhgaYzWbk5uZuGMNxXPHXX39tYkwm07nh4eGZ3Nxcz%2Fbt27%2BXrDBFUVAoFNBoNIhEIggGg%2FD5fLh9%2BzaUSuWmbRqRSAQXL15EX18flpeXoVKp8OSTT0KpVGIVI8nk8%2Fn6uru7xYuLi3WrHDr07bffmvx%2Bf295eTktkUiSwlMsFkOlUqGkpAQzMzMIBoPwer0AAKVS%2BVBmHA4HvvrqK4RCIeTl5aG1tRU1NTUpO2t5eXn6s88%2BGx4fHzcDmKVp%2BjBFCMEbb7whW1xc%2FBWAXwJgKysrbS0tLY9TFCXaKBnP8xgaGoLb7QbHcSgtLcW%2BffsyNhYKhdDT04NgMAiGYWAwGFBbW5tyjRJC2L6%2Bvis%2Bn68Jd3bqt%2BVy%2BVuvv%2F76yoYcysvLi5nNZmm6Bi4sLMBmsyEUCkEsFkOv1%2BOxxx5LOw0TiQS%2B%2BeYbeDweJBIJKJVKNDU1oaAg9SNiKBRCb28vu7y8LEISDt1jqLu7ezuAt0Oh0IsjIyNUPB5HeXk5mpubIZWmfuqZmJiA3W7HysoKCgsLU7LrPqagsbERFRUVKfPHYjH09%2FdjcnISEokE1dXVUCqV%2FwLQ3tbWNvmAoe7u7ucBnMRdDrEsC6%2FXu5bAZDKhqqoq5eJMxy4BTHlAhBCMjo5icHAQqx2s0%2BkgEq2thiUAvwFwqq2tjaUuXLhQA%2BCPAL6fLOHCwgJcLhcWFxeFsADAg%2Byqra0FAAwNDQllygN55HI5jEZjqil5HcBPmerq6r%2Ft2LFjL8MwOclKSaVSlJWVQSKRIBQKwefzIRqNYufOnRsu3GTsmp6eFswUlmVht9ths9mQSCRQVVUFo9EImWzjF2OO4%2BROp1NPdXR0JAAsaLVat0ajeXzDCNyZxx6PBzdv3kROTg727t0LtVqdKgTRaBR2ux0A0NjYiJycpP22pkAggGvXrq11ml6vT7t%2Bp6en%2B10uVykhpIzq6OhoA%2FAegEqxWOxsamrKl8vllakShMNhDA8Pr1VqNpuRn5%2BfstJ0WlpaQm9v71pn1dTUpJ2S0Wh02mazTUajUTMAH4CXKUIILBaLDMAqh%2BiSkpIre%2FbsaWEYZsN5wfM8%2FH4%2FAoEAKIqCwWCAyWRKuWkkEyEEg4ODcLvdIIRArVZDo9Gk5ZDb7b4yNTW1xiEAb1mt1ns5ZLFYqnBntA5SFDVlNBqDu3btak7VoOXlZXg8HoTDYeTn56OlpUUwXEOhEPr6%2BrC0tASFQgG9Xo%2B8vLyUMeFweNDhcEg5jqsC8CWAl61Wa3IOrTP2HIDfA9iZk5PT29TUVJ6Tk7MrXeNGRkYghF0bMCWlkUQiMWe324cWFhZaAcwA%2BLnVav37%2FeU2PAq2WCyFALoAHAMQLSsrsxkMhpSPQ%2BnYJYApSeX3%2By%2BPjY3VANgG4AyATqvVOp%2BsbNrbB4vF0nw3SQPDMKP19fUxhUJhShWTjF0AMmEKAGBxcdFns9mWEolEHYABAMesVmt%2FqhhB1ykWi4UBcBzAbwHICwoKLjc2NtaKxeINX18JIZicnMTY2Bh4%2Fs6xGk3T0Gq1KC8vT7l5cBwXuX79et%2Fs7OzjAKIAfg3gtNVqTXvBltGFl8ViKQXwBwA%2FBPCdVqsd1mg0Sd90V7XKLgAZMwXAPwH8zGq1Cj7Iz%2BqO1WKxZMyudErGFKvV2p1pnqwvjbNhVzKlYko27Xroa%2F1s2LWqdEzJRpv2JUkm7BLKlGy0qZ%2FGCGFXJkzJRlvyNVYydkkkktxMmZKNtuzzsvvZBYADEEEGTMlGW%2F4B4Dp2ARkyJRv9F9vsxWD%2F43R9AAAAAElFTkSuQmCC%29%3B%0Abackground%2Dsize%3A%2026px%2026px%3B%0A%7D%0A%2Eleaflet%2Dtouch%20%2Eleaflet%2Dcontrol%2Dlayers%2Dtoggle%20%7B%0Awidth%3A%2044px%3B%0Aheight%3A%2044px%3B%0A%7D%0A%2Eleaflet%2Dcontrol%2Dlayers%20%2Eleaflet%2Dcontrol%2Dlayers%2Dlist%2C%0A%2Eleaflet%2Dcontrol%2Dlayers%2Dexpanded%20%2Eleaflet%2Dcontrol%2Dlayers%2Dtoggle%20%7B%0Adisplay%3A%20none%3B%0A%7D%0A%2Eleaflet%2Dcontrol%2Dlayers%2Dexpanded%20%2Eleaflet%2Dcontrol%2Dlayers%2Dlist%20%7B%0Adisplay%3A%20block%3B%0Aposition%3A%20relative%3B%0A%7D%0A%2Eleaflet%2Dcontrol%2Dlayers%2Dexpanded%20%7B%0Apadding%3A%206px%2010px%206px%206px%3B%0Acolor%3A%20%23333%3B%0Abackground%3A%20%23fff%3B%0A%7D%0A%2Eleaflet%2Dcontrol%2Dlayers%2Dselector%20%7B%0Amargin%2Dtop%3A%202px%3B%0Aposition%3A%20relative%3B%0Atop%3A%201px%3B%0A%7D%0A%2Eleaflet%2Dcontrol%2Dlayers%20label%20%7B%0Adisplay%3A%20block%3B%0A%7D%0A%2Eleaflet%2Dcontrol%2Dlayers%2Dseparator%20%7B%0Aheight%3A%200%3B%0Aborder%2Dtop%3A%201px%20solid%20%23ddd%3B%0Amargin%3A%205px%20%2D10px%205px%20%2D6px%3B%0A%7D%0A%0A%2Eleaflet%2Dcontainer%20%2Eleaflet%2Dcontrol%2Dattribution%20%7B%0Abackground%3A%20%23fff%3B%0Abackground%3A%20rgba%28255%2C%20255%2C%20255%2C%200%2E7%29%3B%0Amargin%3A%200%3B%0A%7D%0A%2Eleaflet%2Dcontrol%2Dattribution%2C%0A%2Eleaflet%2Dcontrol%2Dscale%2Dline%20%7B%0Apadding%3A%200%205px%3B%0Acolor%3A%20%23333%3B%0A%7D%0A%2Eleaflet%2Dcontrol%2Dattribution%20a%20%7B%0Atext%2Ddecoration%3A%20none%3B%0A%7D%0A%2Eleaflet%2Dcontrol%2Dattribution%20a%3Ahover%20%7B%0Atext%2Ddecoration%3A%20underline%3B%0A%7D%0A%2Eleaflet%2Dcontainer%20%2Eleaflet%2Dcontrol%2Dattribution%2C%0A%2Eleaflet%2Dcontainer%20%2Eleaflet%2Dcontrol%2Dscale%20%7B%0Afont%2Dsize%3A%2011px%3B%0A%7D%0A%2Eleaflet%2Dleft%20%2Eleaflet%2Dcontrol%2Dscale%20%7B%0Amargin%2Dleft%3A%205px%3B%0A%7D%0A%2Eleaflet%2Dbottom%20%2Eleaflet%2Dcontrol%2Dscale%20%7B%0Amargin%2Dbottom%3A%205px%3B%0A%7D%0A%2Eleaflet%2Dcontrol%2Dscale%2Dline%20%7B%0Aborder%3A%202px%20solid%20%23777%3B%0Aborder%2Dtop%3A%20none%3B%0Aline%2Dheight%3A%201%2E1%3B%0Apadding%3A%202px%205px%201px%3B%0Afont%2Dsize%3A%2011px%3B%0Awhite%2Dspace%3A%20nowrap%3B%0Aoverflow%3A%20hidden%3B%0A%2Dmoz%2Dbox%2Dsizing%3A%20content%2Dbox%3B%0Abox%2Dsizing%3A%20content%2Dbox%3B%0Abackground%3A%20%23fff%3B%0Abackground%3A%20rgba%28255%2C%20255%2C%20255%2C%200%2E5%29%3B%0A%7D%0A%2Eleaflet%2Dcontrol%2Dscale%2Dline%3Anot%28%3Afirst%2Dchild%29%20%7B%0Aborder%2Dtop%3A%202px%20solid%20%23777%3B%0Aborder%2Dbottom%3A%20none%3B%0Amargin%2Dtop%3A%20%2D2px%3B%0A%7D%0A%2Eleaflet%2Dcontrol%2Dscale%2Dline%3Anot%28%3Afirst%2Dchild%29%3Anot%28%3Alast%2Dchild%29%20%7B%0Aborder%2Dbottom%3A%202px%20solid%20%23777%3B%0A%7D%0A%2Eleaflet%2Dtouch%20%2Eleaflet%2Dcontrol%2Dattribution%2C%0A%2Eleaflet%2Dtouch%20%2Eleaflet%2Dcontrol%2Dlayers%2C%0A%2Eleaflet%2Dtouch%20%2Eleaflet%2Dbar%20%7B%0Abox%2Dshadow%3A%20none%3B%0A%7D%0A%2Eleaflet%2Dtouch%20%2Eleaflet%2Dcontrol%2Dlayers%2C%0A%2Eleaflet%2Dtouch%20%2Eleaflet%2Dbar%20%7B%0Aborder%3A%202px%20solid%20rgba%280%2C0%2C0%2C0%2E2%29%3B%0Abackground%2Dclip%3A%20padding%2Dbox%3B%0A%7D%0A%0A%2Eleaflet%2Dpopup%20%7B%0Aposition%3A%20absolute%3B%0Atext%2Dalign%3A%20center%3B%0A%7D%0A%2Eleaflet%2Dpopup%2Dcontent%2Dwrapper%20%7B%0Apadding%3A%201px%3B%0Atext%2Dalign%3A%20left%3B%0Aborder%2Dradius%3A%2012px%3B%0A%7D%0A%2Eleaflet%2Dpopup%2Dcontent%20%7B%0Amargin%3A%2013px%2019px%3B%0Aline%2Dheight%3A%201%2E4%3B%0A%7D%0A%2Eleaflet%2Dpopup%2Dcontent%20p%20%7B%0Amargin%3A%2018px%200%3B%0A%7D%0A%2Eleaflet%2Dpopup%2Dtip%2Dcontainer%20%7B%0Amargin%3A%200%20auto%3B%0Awidth%3A%2040px%3B%0Aheight%3A%2020px%3B%0Aposition%3A%20relative%3B%0Aoverflow%3A%20hidden%3B%0A%7D%0A%2Eleaflet%2Dpopup%2Dtip%20%7B%0Awidth%3A%2017px%3B%0Aheight%3A%2017px%3B%0Apadding%3A%201px%3B%0Amargin%3A%20%2D10px%20auto%200%3B%0A%2Dwebkit%2Dtransform%3A%20rotate%2845deg%29%3B%0A%2Dmoz%2Dtransform%3A%20rotate%2845deg%29%3B%0A%2Dms%2Dtransform%3A%20rotate%2845deg%29%3B%0A%2Do%2Dtransform%3A%20rotate%2845deg%29%3B%0Atransform%3A%20rotate%2845deg%29%3B%0A%7D%0A%2Eleaflet%2Dpopup%2Dcontent%2Dwrapper%2C%0A%2Eleaflet%2Dpopup%2Dtip%20%7B%0Abackground%3A%20white%3B%0Abox%2Dshadow%3A%200%203px%2014px%20rgba%280%2C0%2C0%2C0%2E4%29%3B%0A%7D%0A%2Eleaflet%2Dcontainer%20a%2Eleaflet%2Dpopup%2Dclose%2Dbutton%20%7B%0Aposition%3A%20absolute%3B%0Atop%3A%200%3B%0Aright%3A%200%3B%0Apadding%3A%204px%204px%200%200%3B%0Atext%2Dalign%3A%20center%3B%0Awidth%3A%2018px%3B%0Aheight%3A%2014px%3B%0Afont%3A%2016px%2F14px%20Tahoma%2C%20Verdana%2C%20sans%2Dserif%3B%0Acolor%3A%20%23c3c3c3%3B%0Atext%2Ddecoration%3A%20none%3B%0Afont%2Dweight%3A%20bold%3B%0Abackground%3A%20transparent%3B%0A%7D%0A%2Eleaflet%2Dcontainer%20a%2Eleaflet%2Dpopup%2Dclose%2Dbutton%3Ahover%20%7B%0Acolor%3A%20%23999%3B%0A%7D%0A%2Eleaflet%2Dpopup%2Dscrolled%20%7B%0Aoverflow%3A%20auto%3B%0Aborder%2Dbottom%3A%201px%20solid%20%23ddd%3B%0Aborder%2Dtop%3A%201px%20solid%20%23ddd%3B%0A%7D%0A%2Eleaflet%2Doldie%20%2Eleaflet%2Dpopup%2Dcontent%2Dwrapper%20%7B%0Azoom%3A%201%3B%0A%7D%0A%2Eleaflet%2Doldie%20%2Eleaflet%2Dpopup%2Dtip%20%7B%0Awidth%3A%2024px%3B%0Amargin%3A%200%20auto%3B%0A%2Dms%2Dfilter%3A%20%22progid%3ADXImageTransform%2EMicrosoft%2EMatrix%28M11%3D0%2E70710678%2C%20M12%3D0%2E70710678%2C%20M21%3D%2D0%2E70710678%2C%20M22%3D0%2E70710678%29%22%3B%0Afilter%3A%20progid%3ADXImageTransform%2EMicrosoft%2EMatrix%28M11%3D0%2E70710678%2C%20M12%3D0%2E70710678%2C%20M21%3D%2D0%2E70710678%2C%20M22%3D0%2E70710678%29%3B%0A%7D%0A%2Eleaflet%2Doldie%20%2Eleaflet%2Dpopup%2Dtip%2Dcontainer%20%7B%0Amargin%2Dtop%3A%20%2D1px%3B%0A%7D%0A%2Eleaflet%2Doldie%20%2Eleaflet%2Dcontrol%2Dzoom%2C%0A%2Eleaflet%2Doldie%20%2Eleaflet%2Dcontrol%2Dlayers%2C%0A%2Eleaflet%2Doldie%20%2Eleaflet%2Dpopup%2Dcontent%2Dwrapper%2C%0A%2Eleaflet%2Doldie%20%2Eleaflet%2Dpopup%2Dtip%20%7B%0Aborder%3A%201px%20solid%20%23999%3B%0A%7D%0A%0A%2Eleaflet%2Ddiv%2Dicon%20%7B%0Abackground%3A%20%23fff%3B%0Aborder%3A%201px%20solid%20%23666%3B%0A%7D%0A" rel="stylesheet" />
<script src="data:application/x-javascript;base64,LyoKIExlYWZsZXQsIGEgSmF2YVNjcmlwdCBsaWJyYXJ5IGZvciBtb2JpbGUtZnJpZW5kbHkgaW50ZXJhY3RpdmUgbWFwcy4gaHR0cDovL2xlYWZsZXRqcy5jb20KIChjKSAyMDEwLTIwMTMsIFZsYWRpbWlyIEFnYWZvbmtpbgogKGMpIDIwMTAtMjAxMSwgQ2xvdWRNYWRlCiovCiFmdW5jdGlvbih0LGUsaSl7dmFyIG49dC5MLG89e307by52ZXJzaW9uPSIwLjcuMyIsIm9iamVjdCI9PXR5cGVvZiBtb2R1bGUmJiJvYmplY3QiPT10eXBlb2YgbW9kdWxlLmV4cG9ydHM/bW9kdWxlLmV4cG9ydHM9bzoiZnVuY3Rpb24iPT10eXBlb2YgZGVmaW5lJiZkZWZpbmUuYW1kJiZkZWZpbmUobyksby5ub0NvbmZsaWN0PWZ1bmN0aW9uKCl7cmV0dXJuIHQuTD1uLHRoaXN9LHQuTD1vLG8uVXRpbD17ZXh0ZW5kOmZ1bmN0aW9uKHQpe3ZhciBlLGksbixvLHM9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLDEpO2ZvcihpPTAsbj1zLmxlbmd0aDtuPmk7aSsrKXtvPXNbaV18fHt9O2ZvcihlIGluIG8pby5oYXNPd25Qcm9wZXJ0eShlKSYmKHRbZV09b1tlXSl9cmV0dXJuIHR9LGJpbmQ6ZnVuY3Rpb24odCxlKXt2YXIgaT1hcmd1bWVudHMubGVuZ3RoPjI/QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLDIpOm51bGw7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHQuYXBwbHkoZSxpfHxhcmd1bWVudHMpfX0sc3RhbXA6ZnVuY3Rpb24oKXt2YXIgdD0wLGU9Il9sZWFmbGV0X2lkIjtyZXR1cm4gZnVuY3Rpb24oaSl7cmV0dXJuIGlbZV09aVtlXXx8Kyt0LGlbZV19fSgpLGludm9rZUVhY2g6ZnVuY3Rpb24odCxlLGkpe3ZhciBuLG87aWYoIm9iamVjdCI9PXR5cGVvZiB0KXtvPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywzKTtmb3IobiBpbiB0KWUuYXBwbHkoaSxbbix0W25dXS5jb25jYXQobykpO3JldHVybiEwfXJldHVybiExfSxsaW1pdEV4ZWNCeUludGVydmFsOmZ1bmN0aW9uKHQsZSxpKXt2YXIgbixvO3JldHVybiBmdW5jdGlvbiBzKCl7dmFyIGE9YXJndW1lbnRzO3JldHVybiBuP3ZvaWQobz0hMCk6KG49ITAsc2V0VGltZW91dChmdW5jdGlvbigpe249ITEsbyYmKHMuYXBwbHkoaSxhKSxvPSExKX0sZSksdm9pZCB0LmFwcGx5KGksYSkpfX0sZmFsc2VGbjpmdW5jdGlvbigpe3JldHVybiExfSxmb3JtYXROdW06ZnVuY3Rpb24odCxlKXt2YXIgaT1NYXRoLnBvdygxMCxlfHw1KTtyZXR1cm4gTWF0aC5yb3VuZCh0KmkpL2l9LHRyaW06ZnVuY3Rpb24odCl7cmV0dXJuIHQudHJpbT90LnRyaW0oKTp0LnJlcGxhY2UoL15ccyt8XHMrJC9nLCIiKX0sc3BsaXRXb3JkczpmdW5jdGlvbih0KXtyZXR1cm4gby5VdGlsLnRyaW0odCkuc3BsaXQoL1xzKy8pfSxzZXRPcHRpb25zOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQub3B0aW9ucz1vLmV4dGVuZCh7fSx0Lm9wdGlvbnMsZSksdC5vcHRpb25zfSxnZXRQYXJhbVN0cmluZzpmdW5jdGlvbih0LGUsaSl7dmFyIG49W107Zm9yKHZhciBvIGluIHQpbi5wdXNoKGVuY29kZVVSSUNvbXBvbmVudChpP28udG9VcHBlckNhc2UoKTpvKSsiPSIrZW5jb2RlVVJJQ29tcG9uZW50KHRbb10pKTtyZXR1cm4oZSYmLTEhPT1lLmluZGV4T2YoIj8iKT8iJiI6Ij8iKStuLmpvaW4oIiYiKX0sdGVtcGxhdGU6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5yZXBsYWNlKC9ceyAqKFtcd19dKykgKlx9L2csZnVuY3Rpb24odCxuKXt2YXIgbz1lW25dO2lmKG89PT1pKXRocm93IG5ldyBFcnJvcigiTm8gdmFsdWUgcHJvdmlkZWQgZm9yIHZhcmlhYmxlICIrdCk7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIG8mJihvPW8oZSkpLG99KX0saXNBcnJheTpBcnJheS5pc0FycmF5fHxmdW5jdGlvbih0KXtyZXR1cm4iW29iamVjdCBBcnJheV0iPT09T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHQpfSxlbXB0eUltYWdlVXJsOiJkYXRhOmltYWdlL2dpZjtiYXNlNjQsUjBsR09EbGhBUUFCQUFEL0FDd0FBQUFBQVFBQkFBQUNBRHM9In0sZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUpe3ZhciBpLG4sbz1bIndlYmtpdCIsIm1veiIsIm8iLCJtcyJdO2ZvcihpPTA7aTxvLmxlbmd0aCYmIW47aSsrKW49dFtvW2ldK2VdO3JldHVybiBufWZ1bmN0aW9uIGkoZSl7dmFyIGk9K25ldyBEYXRlLG89TWF0aC5tYXgoMCwxNi0oaS1uKSk7cmV0dXJuIG49aStvLHQuc2V0VGltZW91dChlLG8pfXZhciBuPTAscz10LnJlcXVlc3RBbmltYXRpb25GcmFtZXx8ZSgiUmVxdWVzdEFuaW1hdGlvbkZyYW1lIil8fGksYT10LmNhbmNlbEFuaW1hdGlvbkZyYW1lfHxlKCJDYW5jZWxBbmltYXRpb25GcmFtZSIpfHxlKCJDYW5jZWxSZXF1ZXN0QW5pbWF0aW9uRnJhbWUiKXx8ZnVuY3Rpb24oZSl7dC5jbGVhclRpbWVvdXQoZSl9O28uVXRpbC5yZXF1ZXN0QW5pbUZyYW1lPWZ1bmN0aW9uKGUsbixhLHIpe3JldHVybiBlPW8uYmluZChlLG4pLGEmJnM9PT1pP3ZvaWQgZSgpOnMuY2FsbCh0LGUscil9LG8uVXRpbC5jYW5jZWxBbmltRnJhbWU9ZnVuY3Rpb24oZSl7ZSYmYS5jYWxsKHQsZSl9fSgpLG8uZXh0ZW5kPW8uVXRpbC5leHRlbmQsby5iaW5kPW8uVXRpbC5iaW5kLG8uc3RhbXA9by5VdGlsLnN0YW1wLG8uc2V0T3B0aW9ucz1vLlV0aWwuc2V0T3B0aW9ucyxvLkNsYXNzPWZ1bmN0aW9uKCl7fSxvLkNsYXNzLmV4dGVuZD1mdW5jdGlvbih0KXt2YXIgZT1mdW5jdGlvbigpe3RoaXMuaW5pdGlhbGl6ZSYmdGhpcy5pbml0aWFsaXplLmFwcGx5KHRoaXMsYXJndW1lbnRzKSx0aGlzLl9pbml0SG9va3MmJnRoaXMuY2FsbEluaXRIb29rcygpfSxpPWZ1bmN0aW9uKCl7fTtpLnByb3RvdHlwZT10aGlzLnByb3RvdHlwZTt2YXIgbj1uZXcgaTtuLmNvbnN0cnVjdG9yPWUsZS5wcm90b3R5cGU9bjtmb3IodmFyIHMgaW4gdGhpcyl0aGlzLmhhc093blByb3BlcnR5KHMpJiYicHJvdG90eXBlIiE9PXMmJihlW3NdPXRoaXNbc10pO3Quc3RhdGljcyYmKG8uZXh0ZW5kKGUsdC5zdGF0aWNzKSxkZWxldGUgdC5zdGF0aWNzKSx0LmluY2x1ZGVzJiYoby5VdGlsLmV4dGVuZC5hcHBseShudWxsLFtuXS5jb25jYXQodC5pbmNsdWRlcykpLGRlbGV0ZSB0LmluY2x1ZGVzKSx0Lm9wdGlvbnMmJm4ub3B0aW9ucyYmKHQub3B0aW9ucz1vLmV4dGVuZCh7fSxuLm9wdGlvbnMsdC5vcHRpb25zKSksby5leHRlbmQobix0KSxuLl9pbml0SG9va3M9W107dmFyIGE9dGhpcztyZXR1cm4gZS5fX3N1cGVyX189YS5wcm90b3R5cGUsbi5jYWxsSW5pdEhvb2tzPWZ1bmN0aW9uKCl7aWYoIXRoaXMuX2luaXRIb29rc0NhbGxlZCl7YS5wcm90b3R5cGUuY2FsbEluaXRIb29rcyYmYS5wcm90b3R5cGUuY2FsbEluaXRIb29rcy5jYWxsKHRoaXMpLHRoaXMuX2luaXRIb29rc0NhbGxlZD0hMDtmb3IodmFyIHQ9MCxlPW4uX2luaXRIb29rcy5sZW5ndGg7ZT50O3QrKyluLl9pbml0SG9va3NbdF0uY2FsbCh0aGlzKX19LGV9LG8uQ2xhc3MuaW5jbHVkZT1mdW5jdGlvbih0KXtvLmV4dGVuZCh0aGlzLnByb3RvdHlwZSx0KX0sby5DbGFzcy5tZXJnZU9wdGlvbnM9ZnVuY3Rpb24odCl7by5leHRlbmQodGhpcy5wcm90b3R5cGUub3B0aW9ucyx0KX0sby5DbGFzcy5hZGRJbml0SG9vaz1mdW5jdGlvbih0KXt2YXIgZT1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsMSksaT0iZnVuY3Rpb24iPT10eXBlb2YgdD90OmZ1bmN0aW9uKCl7dGhpc1t0XS5hcHBseSh0aGlzLGUpfTt0aGlzLnByb3RvdHlwZS5faW5pdEhvb2tzPXRoaXMucHJvdG90eXBlLl9pbml0SG9va3N8fFtdLHRoaXMucHJvdG90eXBlLl9pbml0SG9va3MucHVzaChpKX07dmFyIHM9Il9sZWFmbGV0X2V2ZW50cyI7by5NaXhpbj17fSxvLk1peGluLkV2ZW50cz17YWRkRXZlbnRMaXN0ZW5lcjpmdW5jdGlvbih0LGUsaSl7aWYoby5VdGlsLmludm9rZUVhY2godCx0aGlzLmFkZEV2ZW50TGlzdGVuZXIsdGhpcyxlLGkpKXJldHVybiB0aGlzO3ZhciBuLGEscixoLGwsdSxjLGQ9dGhpc1tzXT10aGlzW3NdfHx7fSxwPWkmJmkhPT10aGlzJiZvLnN0YW1wKGkpO2Zvcih0PW8uVXRpbC5zcGxpdFdvcmRzKHQpLG49MCxhPXQubGVuZ3RoO2E+bjtuKyspcj17YWN0aW9uOmUsY29udGV4dDppfHx0aGlzfSxoPXRbbl0scD8obD1oKyJfaWR4Iix1PWwrIl9sZW4iLGM9ZFtsXT1kW2xdfHx7fSxjW3BdfHwoY1twXT1bXSxkW3VdPShkW3VdfHwwKSsxKSxjW3BdLnB1c2gocikpOihkW2hdPWRbaF18fFtdLGRbaF0ucHVzaChyKSk7cmV0dXJuIHRoaXN9LGhhc0V2ZW50TGlzdGVuZXJzOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXNbc107cmV0dXJuISFlJiYodCBpbiBlJiZlW3RdLmxlbmd0aD4wfHx0KyJfaWR4ImluIGUmJmVbdCsiX2lkeF9sZW4iXT4wKX0scmVtb3ZlRXZlbnRMaXN0ZW5lcjpmdW5jdGlvbih0LGUsaSl7aWYoIXRoaXNbc10pcmV0dXJuIHRoaXM7aWYoIXQpcmV0dXJuIHRoaXMuY2xlYXJBbGxFdmVudExpc3RlbmVycygpO2lmKG8uVXRpbC5pbnZva2VFYWNoKHQsdGhpcy5yZW1vdmVFdmVudExpc3RlbmVyLHRoaXMsZSxpKSlyZXR1cm4gdGhpczt2YXIgbixhLHIsaCxsLHUsYyxkLHAsXz10aGlzW3NdLG09aSYmaSE9PXRoaXMmJm8uc3RhbXAoaSk7Zm9yKHQ9by5VdGlsLnNwbGl0V29yZHModCksbj0wLGE9dC5sZW5ndGg7YT5uO24rKylpZihyPXRbbl0sdT1yKyJfaWR4IixjPXUrIl9sZW4iLGQ9X1t1XSxlKXtpZihoPW0mJmQ/ZFttXTpfW3JdKXtmb3IobD1oLmxlbmd0aC0xO2w+PTA7bC0tKWhbbF0uYWN0aW9uIT09ZXx8aSYmaFtsXS5jb250ZXh0IT09aXx8KHA9aC5zcGxpY2UobCwxKSxwWzBdLmFjdGlvbj1vLlV0aWwuZmFsc2VGbik7aSYmZCYmMD09PWgubGVuZ3RoJiYoZGVsZXRlIGRbbV0sX1tjXS0tKX19ZWxzZSBkZWxldGUgX1tyXSxkZWxldGUgX1t1XSxkZWxldGUgX1tjXTtyZXR1cm4gdGhpc30sY2xlYXJBbGxFdmVudExpc3RlbmVyczpmdW5jdGlvbigpe3JldHVybiBkZWxldGUgdGhpc1tzXSx0aGlzfSxmaXJlRXZlbnQ6ZnVuY3Rpb24odCxlKXtpZighdGhpcy5oYXNFdmVudExpc3RlbmVycyh0KSlyZXR1cm4gdGhpczt2YXIgaSxuLGEscixoLGw9by5VdGlsLmV4dGVuZCh7fSxlLHt0eXBlOnQsdGFyZ2V0OnRoaXN9KSx1PXRoaXNbc107aWYodVt0XSlmb3IoaT11W3RdLnNsaWNlKCksbj0wLGE9aS5sZW5ndGg7YT5uO24rKylpW25dLmFjdGlvbi5jYWxsKGlbbl0uY29udGV4dCxsKTtyPXVbdCsiX2lkeCJdO2ZvcihoIGluIHIpaWYoaT1yW2hdLnNsaWNlKCkpZm9yKG49MCxhPWkubGVuZ3RoO2E+bjtuKyspaVtuXS5hY3Rpb24uY2FsbChpW25dLmNvbnRleHQsbCk7cmV0dXJuIHRoaXN9LGFkZE9uZVRpbWVFdmVudExpc3RlbmVyOmZ1bmN0aW9uKHQsZSxpKXtpZihvLlV0aWwuaW52b2tlRWFjaCh0LHRoaXMuYWRkT25lVGltZUV2ZW50TGlzdGVuZXIsdGhpcyxlLGkpKXJldHVybiB0aGlzO3ZhciBuPW8uYmluZChmdW5jdGlvbigpe3RoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcih0LGUsaSkucmVtb3ZlRXZlbnRMaXN0ZW5lcih0LG4saSl9LHRoaXMpO3JldHVybiB0aGlzLmFkZEV2ZW50TGlzdGVuZXIodCxlLGkpLmFkZEV2ZW50TGlzdGVuZXIodCxuLGkpfX0sby5NaXhpbi5FdmVudHMub249by5NaXhpbi5FdmVudHMuYWRkRXZlbnRMaXN0ZW5lcixvLk1peGluLkV2ZW50cy5vZmY9by5NaXhpbi5FdmVudHMucmVtb3ZlRXZlbnRMaXN0ZW5lcixvLk1peGluLkV2ZW50cy5vbmNlPW8uTWl4aW4uRXZlbnRzLmFkZE9uZVRpbWVFdmVudExpc3RlbmVyLG8uTWl4aW4uRXZlbnRzLmZpcmU9by5NaXhpbi5FdmVudHMuZmlyZUV2ZW50LGZ1bmN0aW9uKCl7dmFyIG49IkFjdGl2ZVhPYmplY3QiaW4gdCxzPW4mJiFlLmFkZEV2ZW50TGlzdGVuZXIsYT1uYXZpZ2F0b3IudXNlckFnZW50LnRvTG93ZXJDYXNlKCkscj0tMSE9PWEuaW5kZXhPZigid2Via2l0IiksaD0tMSE9PWEuaW5kZXhPZigiY2hyb21lIiksbD0tMSE9PWEuaW5kZXhPZigicGhhbnRvbSIpLHU9LTEhPT1hLmluZGV4T2YoImFuZHJvaWQiKSxjPS0xIT09YS5zZWFyY2goImFuZHJvaWQgWzIzXSIpLGQ9LTEhPT1hLmluZGV4T2YoImdlY2tvIikscD10eXBlb2Ygb3JpZW50YXRpb24hPWkrIiIsXz10Lm5hdmlnYXRvciYmdC5uYXZpZ2F0b3IubXNQb2ludGVyRW5hYmxlZCYmdC5uYXZpZ2F0b3IubXNNYXhUb3VjaFBvaW50cyYmIXQuUG9pbnRlckV2ZW50LG09dC5Qb2ludGVyRXZlbnQmJnQubmF2aWdhdG9yLnBvaW50ZXJFbmFibGVkJiZ0Lm5hdmlnYXRvci5tYXhUb3VjaFBvaW50c3x8XyxmPSJkZXZpY2VQaXhlbFJhdGlvImluIHQmJnQuZGV2aWNlUGl4ZWxSYXRpbz4xfHwibWF0Y2hNZWRpYSJpbiB0JiZ0Lm1hdGNoTWVkaWEoIihtaW4tcmVzb2x1dGlvbjoxNDRkcGkpIikmJnQubWF0Y2hNZWRpYSgiKG1pbi1yZXNvbHV0aW9uOjE0NGRwaSkiKS5tYXRjaGVzLGc9ZS5kb2N1bWVudEVsZW1lbnQsdj1uJiYidHJhbnNpdGlvbiJpbiBnLnN0eWxlLHk9IldlYktpdENTU01hdHJpeCJpbiB0JiYibTExImluIG5ldyB0LldlYktpdENTU01hdHJpeCYmIWMsUD0iTW96UGVyc3BlY3RpdmUiaW4gZy5zdHlsZSxMPSJPVHJhbnNpdGlvbiJpbiBnLnN0eWxlLHg9IXQuTF9ESVNBQkxFXzNEJiYodnx8eXx8UHx8TCkmJiFsLHc9IXQuTF9OT19UT1VDSCYmIWwmJmZ1bmN0aW9uKCl7dmFyIHQ9Im9udG91Y2hzdGFydCI7aWYobXx8dCBpbiBnKXJldHVybiEwO3ZhciBpPWUuY3JlYXRlRWxlbWVudCgiZGl2Iiksbj0hMTtyZXR1cm4gaS5zZXRBdHRyaWJ1dGU/KGkuc2V0QXR0cmlidXRlKHQsInJldHVybjsiKSwiZnVuY3Rpb24iPT10eXBlb2YgaVt0XSYmKG49ITApLGkucmVtb3ZlQXR0cmlidXRlKHQpLGk9bnVsbCxuKTohMX0oKTtvLkJyb3dzZXI9e2llOm4saWVsdDk6cyx3ZWJraXQ6cixnZWNrbzpkJiYhciYmIXQub3BlcmEmJiFuLGFuZHJvaWQ6dSxhbmRyb2lkMjM6YyxjaHJvbWU6aCxpZTNkOnYsd2Via2l0M2Q6eSxnZWNrbzNkOlAsb3BlcmEzZDpMLGFueTNkOngsbW9iaWxlOnAsbW9iaWxlV2Via2l0OnAmJnIsbW9iaWxlV2Via2l0M2Q6cCYmeSxtb2JpbGVPcGVyYTpwJiZ0Lm9wZXJhLHRvdWNoOncsbXNQb2ludGVyOl8scG9pbnRlcjptLHJldGluYTpmfX0oKSxvLlBvaW50PWZ1bmN0aW9uKHQsZSxpKXt0aGlzLng9aT9NYXRoLnJvdW5kKHQpOnQsdGhpcy55PWk/TWF0aC5yb3VuZChlKTplfSxvLlBvaW50LnByb3RvdHlwZT17Y2xvbmU6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IG8uUG9pbnQodGhpcy54LHRoaXMueSl9LGFkZDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5jbG9uZSgpLl9hZGQoby5wb2ludCh0KSl9LF9hZGQ6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMueCs9dC54LHRoaXMueSs9dC55LHRoaXN9LHN1YnRyYWN0OmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmNsb25lKCkuX3N1YnRyYWN0KG8ucG9pbnQodCkpfSxfc3VidHJhY3Q6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMueC09dC54LHRoaXMueS09dC55LHRoaXN9LGRpdmlkZUJ5OmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmNsb25lKCkuX2RpdmlkZUJ5KHQpfSxfZGl2aWRlQnk6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMueC89dCx0aGlzLnkvPXQsdGhpc30sbXVsdGlwbHlCeTpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5jbG9uZSgpLl9tdWx0aXBseUJ5KHQpfSxfbXVsdGlwbHlCeTpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy54Kj10LHRoaXMueSo9dCx0aGlzfSxyb3VuZDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNsb25lKCkuX3JvdW5kKCl9LF9yb3VuZDpmdW5jdGlvbigpe3JldHVybiB0aGlzLng9TWF0aC5yb3VuZCh0aGlzLngpLHRoaXMueT1NYXRoLnJvdW5kKHRoaXMueSksdGhpc30sZmxvb3I6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jbG9uZSgpLl9mbG9vcigpfSxfZmxvb3I6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy54PU1hdGguZmxvb3IodGhpcy54KSx0aGlzLnk9TWF0aC5mbG9vcih0aGlzLnkpLHRoaXN9LGRpc3RhbmNlVG86ZnVuY3Rpb24odCl7dD1vLnBvaW50KHQpO3ZhciBlPXQueC10aGlzLngsaT10LnktdGhpcy55O3JldHVybiBNYXRoLnNxcnQoZSplK2kqaSl9LGVxdWFsczpmdW5jdGlvbih0KXtyZXR1cm4gdD1vLnBvaW50KHQpLHQueD09PXRoaXMueCYmdC55PT09dGhpcy55fSxjb250YWluczpmdW5jdGlvbih0KXtyZXR1cm4gdD1vLnBvaW50KHQpLE1hdGguYWJzKHQueCk8PU1hdGguYWJzKHRoaXMueCkmJk1hdGguYWJzKHQueSk8PU1hdGguYWJzKHRoaXMueSl9LHRvU3RyaW5nOmZ1bmN0aW9uKCl7cmV0dXJuIlBvaW50KCIrby5VdGlsLmZvcm1hdE51bSh0aGlzLngpKyIsICIrby5VdGlsLmZvcm1hdE51bSh0aGlzLnkpKyIpIn19LG8ucG9pbnQ9ZnVuY3Rpb24odCxlLG4pe3JldHVybiB0IGluc3RhbmNlb2Ygby5Qb2ludD90Om8uVXRpbC5pc0FycmF5KHQpP25ldyBvLlBvaW50KHRbMF0sdFsxXSk6dD09PWl8fG51bGw9PT10P3Q6bmV3IG8uUG9pbnQodCxlLG4pfSxvLkJvdW5kcz1mdW5jdGlvbih0LGUpe2lmKHQpZm9yKHZhciBpPWU/W3QsZV06dCxuPTAsbz1pLmxlbmd0aDtvPm47bisrKXRoaXMuZXh0ZW5kKGlbbl0pfSxvLkJvdW5kcy5wcm90b3R5cGU9e2V4dGVuZDpmdW5jdGlvbih0KXtyZXR1cm4gdD1vLnBvaW50KHQpLHRoaXMubWlufHx0aGlzLm1heD8odGhpcy5taW4ueD1NYXRoLm1pbih0LngsdGhpcy5taW4ueCksdGhpcy5tYXgueD1NYXRoLm1heCh0LngsdGhpcy5tYXgueCksdGhpcy5taW4ueT1NYXRoLm1pbih0LnksdGhpcy5taW4ueSksdGhpcy5tYXgueT1NYXRoLm1heCh0LnksdGhpcy5tYXgueSkpOih0aGlzLm1pbj10LmNsb25lKCksdGhpcy5tYXg9dC5jbG9uZSgpKSx0aGlzfSxnZXRDZW50ZXI6ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBvLlBvaW50KCh0aGlzLm1pbi54K3RoaXMubWF4LngpLzIsKHRoaXMubWluLnkrdGhpcy5tYXgueSkvMix0KX0sZ2V0Qm90dG9tTGVmdDpmdW5jdGlvbigpe3JldHVybiBuZXcgby5Qb2ludCh0aGlzLm1pbi54LHRoaXMubWF4LnkpfSxnZXRUb3BSaWdodDpmdW5jdGlvbigpe3JldHVybiBuZXcgby5Qb2ludCh0aGlzLm1heC54LHRoaXMubWluLnkpfSxnZXRTaXplOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubWF4LnN1YnRyYWN0KHRoaXMubWluKX0sY29udGFpbnM6ZnVuY3Rpb24odCl7dmFyIGUsaTtyZXR1cm4gdD0ibnVtYmVyIj09dHlwZW9mIHRbMF18fHQgaW5zdGFuY2VvZiBvLlBvaW50P28ucG9pbnQodCk6by5ib3VuZHModCksdCBpbnN0YW5jZW9mIG8uQm91bmRzPyhlPXQubWluLGk9dC5tYXgpOmU9aT10LGUueD49dGhpcy5taW4ueCYmaS54PD10aGlzLm1heC54JiZlLnk+PXRoaXMubWluLnkmJmkueTw9dGhpcy5tYXgueX0saW50ZXJzZWN0czpmdW5jdGlvbih0KXt0PW8uYm91bmRzKHQpO3ZhciBlPXRoaXMubWluLGk9dGhpcy5tYXgsbj10Lm1pbixzPXQubWF4LGE9cy54Pj1lLngmJm4ueDw9aS54LHI9cy55Pj1lLnkmJm4ueTw9aS55O3JldHVybiBhJiZyfSxpc1ZhbGlkOmZ1bmN0aW9uKCl7cmV0dXJuISghdGhpcy5taW58fCF0aGlzLm1heCl9fSxvLmJvdW5kcz1mdW5jdGlvbih0LGUpe3JldHVybiF0fHx0IGluc3RhbmNlb2Ygby5Cb3VuZHM/dDpuZXcgby5Cb3VuZHModCxlKX0sby5UcmFuc2Zvcm1hdGlvbj1mdW5jdGlvbih0LGUsaSxuKXt0aGlzLl9hPXQsdGhpcy5fYj1lLHRoaXMuX2M9aSx0aGlzLl9kPW59LG8uVHJhbnNmb3JtYXRpb24ucHJvdG90eXBlPXt0cmFuc2Zvcm06ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5fdHJhbnNmb3JtKHQuY2xvbmUoKSxlKX0sX3RyYW5zZm9ybTpmdW5jdGlvbih0LGUpe3JldHVybiBlPWV8fDEsdC54PWUqKHRoaXMuX2EqdC54K3RoaXMuX2IpLHQueT1lKih0aGlzLl9jKnQueSt0aGlzLl9kKSx0fSx1bnRyYW5zZm9ybTpmdW5jdGlvbih0LGUpe3JldHVybiBlPWV8fDEsbmV3IG8uUG9pbnQoKHQueC9lLXRoaXMuX2IpL3RoaXMuX2EsKHQueS9lLXRoaXMuX2QpL3RoaXMuX2MpfX0sby5Eb21VdGlsPXtnZXQ6ZnVuY3Rpb24odCl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiB0P2UuZ2V0RWxlbWVudEJ5SWQodCk6dH0sZ2V0U3R5bGU6ZnVuY3Rpb24odCxpKXt2YXIgbj10LnN0eWxlW2ldO2lmKCFuJiZ0LmN1cnJlbnRTdHlsZSYmKG49dC5jdXJyZW50U3R5bGVbaV0pLCghbnx8ImF1dG8iPT09bikmJmUuZGVmYXVsdFZpZXcpe3ZhciBvPWUuZGVmYXVsdFZpZXcuZ2V0Q29tcHV0ZWRTdHlsZSh0LG51bGwpO249bz9vW2ldOm51bGx9cmV0dXJuImF1dG8iPT09bj9udWxsOm59LGdldFZpZXdwb3J0T2Zmc2V0OmZ1bmN0aW9uKHQpe3ZhciBpLG49MCxzPTAsYT10LHI9ZS5ib2R5LGg9ZS5kb2N1bWVudEVsZW1lbnQ7ZG97aWYobis9YS5vZmZzZXRUb3B8fDAscys9YS5vZmZzZXRMZWZ0fHwwLG4rPXBhcnNlSW50KG8uRG9tVXRpbC5nZXRTdHlsZShhLCJib3JkZXJUb3BXaWR0aCIpLDEwKXx8MCxzKz1wYXJzZUludChvLkRvbVV0aWwuZ2V0U3R5bGUoYSwiYm9yZGVyTGVmdFdpZHRoIiksMTApfHwwLGk9by5Eb21VdGlsLmdldFN0eWxlKGEsInBvc2l0aW9uIiksYS5vZmZzZXRQYXJlbnQ9PT1yJiYiYWJzb2x1dGUiPT09aSlicmVhaztpZigiZml4ZWQiPT09aSl7bis9ci5zY3JvbGxUb3B8fGguc2Nyb2xsVG9wfHwwLHMrPXIuc2Nyb2xsTGVmdHx8aC5zY3JvbGxMZWZ0fHwwO2JyZWFrfWlmKCJyZWxhdGl2ZSI9PT1pJiYhYS5vZmZzZXRMZWZ0KXt2YXIgbD1vLkRvbVV0aWwuZ2V0U3R5bGUoYSwid2lkdGgiKSx1PW8uRG9tVXRpbC5nZXRTdHlsZShhLCJtYXgtd2lkdGgiKSxjPWEuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7KCJub25lIiE9PWx8fCJub25lIiE9PXUpJiYocys9Yy5sZWZ0K2EuY2xpZW50TGVmdCksbis9Yy50b3ArKHIuc2Nyb2xsVG9wfHxoLnNjcm9sbFRvcHx8MCk7YnJlYWt9YT1hLm9mZnNldFBhcmVudH13aGlsZShhKTthPXQ7ZG97aWYoYT09PXIpYnJlYWs7bi09YS5zY3JvbGxUb3B8fDAscy09YS5zY3JvbGxMZWZ0fHwwLGE9YS5wYXJlbnROb2RlfXdoaWxlKGEpO3JldHVybiBuZXcgby5Qb2ludChzLG4pfSxkb2N1bWVudElzTHRyOmZ1bmN0aW9uKCl7cmV0dXJuIG8uRG9tVXRpbC5fZG9jSXNMdHJDYWNoZWR8fChvLkRvbVV0aWwuX2RvY0lzTHRyQ2FjaGVkPSEwLG8uRG9tVXRpbC5fZG9jSXNMdHI9Imx0ciI9PT1vLkRvbVV0aWwuZ2V0U3R5bGUoZS5ib2R5LCJkaXJlY3Rpb24iKSksby5Eb21VdGlsLl9kb2NJc0x0cn0sY3JlYXRlOmZ1bmN0aW9uKHQsaSxuKXt2YXIgbz1lLmNyZWF0ZUVsZW1lbnQodCk7cmV0dXJuIG8uY2xhc3NOYW1lPWksbiYmbi5hcHBlbmRDaGlsZChvKSxvfSxoYXNDbGFzczpmdW5jdGlvbih0LGUpe2lmKHQuY2xhc3NMaXN0IT09aSlyZXR1cm4gdC5jbGFzc0xpc3QuY29udGFpbnMoZSk7dmFyIG49by5Eb21VdGlsLl9nZXRDbGFzcyh0KTtyZXR1cm4gbi5sZW5ndGg+MCYmbmV3IFJlZ0V4cCgiKF58XFxzKSIrZSsiKFxcc3wkKSIpLnRlc3Qobil9LGFkZENsYXNzOmZ1bmN0aW9uKHQsZSl7aWYodC5jbGFzc0xpc3QhPT1pKWZvcih2YXIgbj1vLlV0aWwuc3BsaXRXb3JkcyhlKSxzPTAsYT1uLmxlbmd0aDthPnM7cysrKXQuY2xhc3NMaXN0LmFkZChuW3NdKTtlbHNlIGlmKCFvLkRvbVV0aWwuaGFzQ2xhc3ModCxlKSl7dmFyIHI9by5Eb21VdGlsLl9nZXRDbGFzcyh0KTtvLkRvbVV0aWwuX3NldENsYXNzKHQsKHI/cisiICI6IiIpK2UpfX0scmVtb3ZlQ2xhc3M6ZnVuY3Rpb24odCxlKXt0LmNsYXNzTGlzdCE9PWk/dC5jbGFzc0xpc3QucmVtb3ZlKGUpOm8uRG9tVXRpbC5fc2V0Q2xhc3ModCxvLlV0aWwudHJpbSgoIiAiK28uRG9tVXRpbC5fZ2V0Q2xhc3ModCkrIiAiKS5yZXBsYWNlKCIgIitlKyIgIiwiICIpKSl9LF9zZXRDbGFzczpmdW5jdGlvbih0LGUpe3QuY2xhc3NOYW1lLmJhc2VWYWw9PT1pP3QuY2xhc3NOYW1lPWU6dC5jbGFzc05hbWUuYmFzZVZhbD1lfSxfZ2V0Q2xhc3M6ZnVuY3Rpb24odCl7cmV0dXJuIHQuY2xhc3NOYW1lLmJhc2VWYWw9PT1pP3QuY2xhc3NOYW1lOnQuY2xhc3NOYW1lLmJhc2VWYWx9LHNldE9wYWNpdHk6ZnVuY3Rpb24odCxlKXtpZigib3BhY2l0eSJpbiB0LnN0eWxlKXQuc3R5bGUub3BhY2l0eT1lO2Vsc2UgaWYoImZpbHRlciJpbiB0LnN0eWxlKXt2YXIgaT0hMSxuPSJEWEltYWdlVHJhbnNmb3JtLk1pY3Jvc29mdC5BbHBoYSI7dHJ5e2k9dC5maWx0ZXJzLml0ZW0obil9Y2F0Y2gobyl7aWYoMT09PWUpcmV0dXJufWU9TWF0aC5yb3VuZCgxMDAqZSksaT8oaS5FbmFibGVkPTEwMCE9PWUsaS5PcGFjaXR5PWUpOnQuc3R5bGUuZmlsdGVyKz0iIHByb2dpZDoiK24rIihvcGFjaXR5PSIrZSsiKSJ9fSx0ZXN0UHJvcDpmdW5jdGlvbih0KXtmb3IodmFyIGk9ZS5kb2N1bWVudEVsZW1lbnQuc3R5bGUsbj0wO248dC5sZW5ndGg7bisrKWlmKHRbbl1pbiBpKXJldHVybiB0W25dO3JldHVybiExfSxnZXRUcmFuc2xhdGVTdHJpbmc6ZnVuY3Rpb24odCl7dmFyIGU9by5Ccm93c2VyLndlYmtpdDNkLGk9InRyYW5zbGF0ZSIrKGU/IjNkIjoiIikrIigiLG49KGU/IiwwIjoiIikrIikiO3JldHVybiBpK3QueCsicHgsIit0LnkrInB4IitufSxnZXRTY2FsZVN0cmluZzpmdW5jdGlvbih0LGUpe3ZhciBpPW8uRG9tVXRpbC5nZXRUcmFuc2xhdGVTdHJpbmcoZS5hZGQoZS5tdWx0aXBseUJ5KC0xKnQpKSksbj0iIHNjYWxlKCIrdCsiKSAiO3JldHVybiBpK259LHNldFBvc2l0aW9uOmZ1bmN0aW9uKHQsZSxpKXt0Ll9sZWFmbGV0X3Bvcz1lLCFpJiZvLkJyb3dzZXIuYW55M2Q/dC5zdHlsZVtvLkRvbVV0aWwuVFJBTlNGT1JNXT1vLkRvbVV0aWwuZ2V0VHJhbnNsYXRlU3RyaW5nKGUpOih0LnN0eWxlLmxlZnQ9ZS54KyJweCIsdC5zdHlsZS50b3A9ZS55KyJweCIpfSxnZXRQb3NpdGlvbjpmdW5jdGlvbih0KXtyZXR1cm4gdC5fbGVhZmxldF9wb3N9fSxvLkRvbVV0aWwuVFJBTlNGT1JNPW8uRG9tVXRpbC50ZXN0UHJvcChbInRyYW5zZm9ybSIsIldlYmtpdFRyYW5zZm9ybSIsIk9UcmFuc2Zvcm0iLCJNb3pUcmFuc2Zvcm0iLCJtc1RyYW5zZm9ybSJdKSxvLkRvbVV0aWwuVFJBTlNJVElPTj1vLkRvbVV0aWwudGVzdFByb3AoWyJ3ZWJraXRUcmFuc2l0aW9uIiwidHJhbnNpdGlvbiIsIk9UcmFuc2l0aW9uIiwiTW96VHJhbnNpdGlvbiIsIm1zVHJhbnNpdGlvbiJdKSxvLkRvbVV0aWwuVFJBTlNJVElPTl9FTkQ9IndlYmtpdFRyYW5zaXRpb24iPT09by5Eb21VdGlsLlRSQU5TSVRJT058fCJPVHJhbnNpdGlvbiI9PT1vLkRvbVV0aWwuVFJBTlNJVElPTj9vLkRvbVV0aWwuVFJBTlNJVElPTisiRW5kIjoidHJhbnNpdGlvbmVuZCIsZnVuY3Rpb24oKXtpZigib25zZWxlY3RzdGFydCJpbiBlKW8uZXh0ZW5kKG8uRG9tVXRpbCx7ZGlzYWJsZVRleHRTZWxlY3Rpb246ZnVuY3Rpb24oKXtvLkRvbUV2ZW50Lm9uKHQsInNlbGVjdHN0YXJ0IixvLkRvbUV2ZW50LnByZXZlbnREZWZhdWx0KX0sZW5hYmxlVGV4dFNlbGVjdGlvbjpmdW5jdGlvbigpe28uRG9tRXZlbnQub2ZmKHQsInNlbGVjdHN0YXJ0IixvLkRvbUV2ZW50LnByZXZlbnREZWZhdWx0KX19KTtlbHNle3ZhciBpPW8uRG9tVXRpbC50ZXN0UHJvcChbInVzZXJTZWxlY3QiLCJXZWJraXRVc2VyU2VsZWN0IiwiT1VzZXJTZWxlY3QiLCJNb3pVc2VyU2VsZWN0IiwibXNVc2VyU2VsZWN0Il0pO28uZXh0ZW5kKG8uRG9tVXRpbCx7ZGlzYWJsZVRleHRTZWxlY3Rpb246ZnVuY3Rpb24oKXtpZihpKXt2YXIgdD1lLmRvY3VtZW50RWxlbWVudC5zdHlsZTt0aGlzLl91c2VyU2VsZWN0PXRbaV0sdFtpXT0ibm9uZSJ9fSxlbmFibGVUZXh0U2VsZWN0aW9uOmZ1bmN0aW9uKCl7aSYmKGUuZG9jdW1lbnRFbGVtZW50LnN0eWxlW2ldPXRoaXMuX3VzZXJTZWxlY3QsZGVsZXRlIHRoaXMuX3VzZXJTZWxlY3QpfX0pfW8uZXh0ZW5kKG8uRG9tVXRpbCx7ZGlzYWJsZUltYWdlRHJhZzpmdW5jdGlvbigpe28uRG9tRXZlbnQub24odCwiZHJhZ3N0YXJ0IixvLkRvbUV2ZW50LnByZXZlbnREZWZhdWx0KX0sZW5hYmxlSW1hZ2VEcmFnOmZ1bmN0aW9uKCl7by5Eb21FdmVudC5vZmYodCwiZHJhZ3N0YXJ0IixvLkRvbUV2ZW50LnByZXZlbnREZWZhdWx0KX19KX0oKSxvLkxhdExuZz1mdW5jdGlvbih0LGUsbil7aWYodD1wYXJzZUZsb2F0KHQpLGU9cGFyc2VGbG9hdChlKSxpc05hTih0KXx8aXNOYU4oZSkpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIExhdExuZyBvYmplY3Q6ICgiK3QrIiwgIitlKyIpIik7dGhpcy5sYXQ9dCx0aGlzLmxuZz1lLG4hPT1pJiYodGhpcy5hbHQ9cGFyc2VGbG9hdChuKSl9LG8uZXh0ZW5kKG8uTGF0TG5nLHtERUdfVE9fUkFEOk1hdGguUEkvMTgwLFJBRF9UT19ERUc6MTgwL01hdGguUEksTUFYX01BUkdJTjoxZS05fSksby5MYXRMbmcucHJvdG90eXBlPXtlcXVhbHM6ZnVuY3Rpb24odCl7aWYoIXQpcmV0dXJuITE7dD1vLmxhdExuZyh0KTt2YXIgZT1NYXRoLm1heChNYXRoLmFicyh0aGlzLmxhdC10LmxhdCksTWF0aC5hYnModGhpcy5sbmctdC5sbmcpKTtyZXR1cm4gZTw9by5MYXRMbmcuTUFYX01BUkdJTn0sdG9TdHJpbmc6ZnVuY3Rpb24odCl7cmV0dXJuIkxhdExuZygiK28uVXRpbC5mb3JtYXROdW0odGhpcy5sYXQsdCkrIiwgIitvLlV0aWwuZm9ybWF0TnVtKHRoaXMubG5nLHQpKyIpIn0sZGlzdGFuY2VUbzpmdW5jdGlvbih0KXt0PW8ubGF0TG5nKHQpO3ZhciBlPTYzNzgxMzcsaT1vLkxhdExuZy5ERUdfVE9fUkFELG49KHQubGF0LXRoaXMubGF0KSppLHM9KHQubG5nLXRoaXMubG5nKSppLGE9dGhpcy5sYXQqaSxyPXQubGF0KmksaD1NYXRoLnNpbihuLzIpLGw9TWF0aC5zaW4ocy8yKSx1PWgqaCtsKmwqTWF0aC5jb3MoYSkqTWF0aC5jb3Mocik7cmV0dXJuIDIqZSpNYXRoLmF0YW4yKE1hdGguc3FydCh1KSxNYXRoLnNxcnQoMS11KSl9LHdyYXA6ZnVuY3Rpb24odCxlKXt2YXIgaT10aGlzLmxuZztyZXR1cm4gdD10fHwtMTgwLGU9ZXx8MTgwLGk9KGkrZSklKGUtdCkrKHQ+aXx8aT09PWU/ZTp0KSxuZXcgby5MYXRMbmcodGhpcy5sYXQsaSl9fSxvLmxhdExuZz1mdW5jdGlvbih0LGUpe3JldHVybiB0IGluc3RhbmNlb2Ygby5MYXRMbmc/dDpvLlV0aWwuaXNBcnJheSh0KT8ibnVtYmVyIj09dHlwZW9mIHRbMF18fCJzdHJpbmciPT10eXBlb2YgdFswXT9uZXcgby5MYXRMbmcodFswXSx0WzFdLHRbMl0pOm51bGw6dD09PWl8fG51bGw9PT10P3Q6Im9iamVjdCI9PXR5cGVvZiB0JiYibGF0ImluIHQ/bmV3IG8uTGF0TG5nKHQubGF0LCJsbmciaW4gdD90LmxuZzp0Lmxvbik6ZT09PWk/bnVsbDpuZXcgby5MYXRMbmcodCxlKX0sby5MYXRMbmdCb3VuZHM9ZnVuY3Rpb24odCxlKXtpZih0KWZvcih2YXIgaT1lP1t0LGVdOnQsbj0wLG89aS5sZW5ndGg7bz5uO24rKyl0aGlzLmV4dGVuZChpW25dKX0sby5MYXRMbmdCb3VuZHMucHJvdG90eXBlPXtleHRlbmQ6ZnVuY3Rpb24odCl7aWYoIXQpcmV0dXJuIHRoaXM7dmFyIGU9by5sYXRMbmcodCk7cmV0dXJuIHQ9bnVsbCE9PWU/ZTpvLmxhdExuZ0JvdW5kcyh0KSx0IGluc3RhbmNlb2Ygby5MYXRMbmc/dGhpcy5fc291dGhXZXN0fHx0aGlzLl9ub3J0aEVhc3Q/KHRoaXMuX3NvdXRoV2VzdC5sYXQ9TWF0aC5taW4odC5sYXQsdGhpcy5fc291dGhXZXN0LmxhdCksdGhpcy5fc291dGhXZXN0LmxuZz1NYXRoLm1pbih0LmxuZyx0aGlzLl9zb3V0aFdlc3QubG5nKSx0aGlzLl9ub3J0aEVhc3QubGF0PU1hdGgubWF4KHQubGF0LHRoaXMuX25vcnRoRWFzdC5sYXQpLHRoaXMuX25vcnRoRWFzdC5sbmc9TWF0aC5tYXgodC5sbmcsdGhpcy5fbm9ydGhFYXN0LmxuZykpOih0aGlzLl9zb3V0aFdlc3Q9bmV3IG8uTGF0TG5nKHQubGF0LHQubG5nKSx0aGlzLl9ub3J0aEVhc3Q9bmV3IG8uTGF0TG5nKHQubGF0LHQubG5nKSk6dCBpbnN0YW5jZW9mIG8uTGF0TG5nQm91bmRzJiYodGhpcy5leHRlbmQodC5fc291dGhXZXN0KSx0aGlzLmV4dGVuZCh0Ll9ub3J0aEVhc3QpKSx0aGlzfSxwYWQ6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fc291dGhXZXN0LGk9dGhpcy5fbm9ydGhFYXN0LG49TWF0aC5hYnMoZS5sYXQtaS5sYXQpKnQscz1NYXRoLmFicyhlLmxuZy1pLmxuZykqdDtyZXR1cm4gbmV3IG8uTGF0TG5nQm91bmRzKG5ldyBvLkxhdExuZyhlLmxhdC1uLGUubG5nLXMpLG5ldyBvLkxhdExuZyhpLmxhdCtuLGkubG5nK3MpKX0sZ2V0Q2VudGVyOmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBvLkxhdExuZygodGhpcy5fc291dGhXZXN0LmxhdCt0aGlzLl9ub3J0aEVhc3QubGF0KS8yLCh0aGlzLl9zb3V0aFdlc3QubG5nK3RoaXMuX25vcnRoRWFzdC5sbmcpLzIpfSxnZXRTb3V0aFdlc3Q6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc291dGhXZXN0fSxnZXROb3J0aEVhc3Q6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbm9ydGhFYXN0fSxnZXROb3J0aFdlc3Q6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IG8uTGF0TG5nKHRoaXMuZ2V0Tm9ydGgoKSx0aGlzLmdldFdlc3QoKSl9LGdldFNvdXRoRWFzdDpmdW5jdGlvbigpe3JldHVybiBuZXcgby5MYXRMbmcodGhpcy5nZXRTb3V0aCgpLHRoaXMuZ2V0RWFzdCgpKX0sZ2V0V2VzdDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9zb3V0aFdlc3QubG5nfSxnZXRTb3V0aDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9zb3V0aFdlc3QubGF0fSxnZXRFYXN0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX25vcnRoRWFzdC5sbmd9LGdldE5vcnRoOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX25vcnRoRWFzdC5sYXR9LGNvbnRhaW5zOmZ1bmN0aW9uKHQpe3Q9Im51bWJlciI9PXR5cGVvZiB0WzBdfHx0IGluc3RhbmNlb2Ygby5MYXRMbmc/by5sYXRMbmcodCk6by5sYXRMbmdCb3VuZHModCk7dmFyIGUsaSxuPXRoaXMuX3NvdXRoV2VzdCxzPXRoaXMuX25vcnRoRWFzdDtyZXR1cm4gdCBpbnN0YW5jZW9mIG8uTGF0TG5nQm91bmRzPyhlPXQuZ2V0U291dGhXZXN0KCksaT10LmdldE5vcnRoRWFzdCgpKTplPWk9dCxlLmxhdD49bi5sYXQmJmkubGF0PD1zLmxhdCYmZS5sbmc+PW4ubG5nJiZpLmxuZzw9cy5sbmd9LGludGVyc2VjdHM6ZnVuY3Rpb24odCl7dD1vLmxhdExuZ0JvdW5kcyh0KTt2YXIgZT10aGlzLl9zb3V0aFdlc3QsaT10aGlzLl9ub3J0aEVhc3Qsbj10LmdldFNvdXRoV2VzdCgpLHM9dC5nZXROb3J0aEVhc3QoKSxhPXMubGF0Pj1lLmxhdCYmbi5sYXQ8PWkubGF0LHI9cy5sbmc+PWUubG5nJiZuLmxuZzw9aS5sbmc7cmV0dXJuIGEmJnJ9LHRvQkJveFN0cmluZzpmdW5jdGlvbigpe3JldHVyblt0aGlzLmdldFdlc3QoKSx0aGlzLmdldFNvdXRoKCksdGhpcy5nZXRFYXN0KCksdGhpcy5nZXROb3J0aCgpXS5qb2luKCIsIil9LGVxdWFsczpmdW5jdGlvbih0KXtyZXR1cm4gdD8odD1vLmxhdExuZ0JvdW5kcyh0KSx0aGlzLl9zb3V0aFdlc3QuZXF1YWxzKHQuZ2V0U291dGhXZXN0KCkpJiZ0aGlzLl9ub3J0aEVhc3QuZXF1YWxzKHQuZ2V0Tm9ydGhFYXN0KCkpKTohMX0saXNWYWxpZDpmdW5jdGlvbigpe3JldHVybiEoIXRoaXMuX3NvdXRoV2VzdHx8IXRoaXMuX25vcnRoRWFzdCl9fSxvLmxhdExuZ0JvdW5kcz1mdW5jdGlvbih0LGUpe3JldHVybiF0fHx0IGluc3RhbmNlb2Ygby5MYXRMbmdCb3VuZHM/dDpuZXcgby5MYXRMbmdCb3VuZHModCxlKX0sby5Qcm9qZWN0aW9uPXt9LG8uUHJvamVjdGlvbi5TcGhlcmljYWxNZXJjYXRvcj17TUFYX0xBVElUVURFOjg1LjA1MTEyODc3OTgscHJvamVjdDpmdW5jdGlvbih0KXt2YXIgZT1vLkxhdExuZy5ERUdfVE9fUkFELGk9dGhpcy5NQVhfTEFUSVRVREUsbj1NYXRoLm1heChNYXRoLm1pbihpLHQubGF0KSwtaSkscz10LmxuZyplLGE9biplO3JldHVybiBhPU1hdGgubG9nKE1hdGgudGFuKE1hdGguUEkvNCthLzIpKSxuZXcgby5Qb2ludChzLGEpfSx1bnByb2plY3Q6ZnVuY3Rpb24odCl7dmFyIGU9by5MYXRMbmcuUkFEX1RPX0RFRyxpPXQueCplLG49KDIqTWF0aC5hdGFuKE1hdGguZXhwKHQueSkpLU1hdGguUEkvMikqZTtyZXR1cm4gbmV3IG8uTGF0TG5nKG4saSl9fSxvLlByb2plY3Rpb24uTG9uTGF0PXtwcm9qZWN0OmZ1bmN0aW9uKHQpe3JldHVybiBuZXcgby5Qb2ludCh0LmxuZyx0LmxhdCl9LHVucHJvamVjdDpmdW5jdGlvbih0KXtyZXR1cm4gbmV3IG8uTGF0TG5nKHQueSx0LngpfX0sby5DUlM9e2xhdExuZ1RvUG9pbnQ6ZnVuY3Rpb24odCxlKXt2YXIgaT10aGlzLnByb2plY3Rpb24ucHJvamVjdCh0KSxuPXRoaXMuc2NhbGUoZSk7cmV0dXJuIHRoaXMudHJhbnNmb3JtYXRpb24uX3RyYW5zZm9ybShpLG4pfSxwb2ludFRvTGF0TG5nOmZ1bmN0aW9uKHQsZSl7dmFyIGk9dGhpcy5zY2FsZShlKSxuPXRoaXMudHJhbnNmb3JtYXRpb24udW50cmFuc2Zvcm0odCxpKTtyZXR1cm4gdGhpcy5wcm9qZWN0aW9uLnVucHJvamVjdChuKX0scHJvamVjdDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5wcm9qZWN0aW9uLnByb2plY3QodCl9LHNjYWxlOmZ1bmN0aW9uKHQpe3JldHVybiAyNTYqTWF0aC5wb3coMix0KX0sZ2V0U2l6ZTpmdW5jdGlvbih0KXt2YXIgZT10aGlzLnNjYWxlKHQpO3JldHVybiBvLnBvaW50KGUsZSl9fSxvLkNSUy5TaW1wbGU9by5leHRlbmQoe30sby5DUlMse3Byb2plY3Rpb246by5Qcm9qZWN0aW9uLkxvbkxhdCx0cmFuc2Zvcm1hdGlvbjpuZXcgby5UcmFuc2Zvcm1hdGlvbigxLDAsLTEsMCksc2NhbGU6ZnVuY3Rpb24odCl7cmV0dXJuIE1hdGgucG93KDIsdCl9fSksby5DUlMuRVBTRzM4NTc9by5leHRlbmQoe30sby5DUlMse2NvZGU6IkVQU0c6Mzg1NyIscHJvamVjdGlvbjpvLlByb2plY3Rpb24uU3BoZXJpY2FsTWVyY2F0b3IsdHJhbnNmb3JtYXRpb246bmV3IG8uVHJhbnNmb3JtYXRpb24oLjUvTWF0aC5QSSwuNSwtLjUvTWF0aC5QSSwuNSkscHJvamVjdDpmdW5jdGlvbih0KXt2YXIgZT10aGlzLnByb2plY3Rpb24ucHJvamVjdCh0KSxpPTYzNzgxMzc7cmV0dXJuIGUubXVsdGlwbHlCeShpKX19KSxvLkNSUy5FUFNHOTAwOTEzPW8uZXh0ZW5kKHt9LG8uQ1JTLkVQU0czODU3LHtjb2RlOiJFUFNHOjkwMDkxMyJ9KSxvLkNSUy5FUFNHNDMyNj1vLmV4dGVuZCh7fSxvLkNSUyx7Y29kZToiRVBTRzo0MzI2Iixwcm9qZWN0aW9uOm8uUHJvamVjdGlvbi5Mb25MYXQsdHJhbnNmb3JtYXRpb246bmV3IG8uVHJhbnNmb3JtYXRpb24oMS8zNjAsLjUsLTEvMzYwLC41KX0pLG8uTWFwPW8uQ2xhc3MuZXh0ZW5kKHtpbmNsdWRlczpvLk1peGluLkV2ZW50cyxvcHRpb25zOntjcnM6by5DUlMuRVBTRzM4NTcsZmFkZUFuaW1hdGlvbjpvLkRvbVV0aWwuVFJBTlNJVElPTiYmIW8uQnJvd3Nlci5hbmRyb2lkMjMsdHJhY2tSZXNpemU6ITAsbWFya2VyWm9vbUFuaW1hdGlvbjpvLkRvbVV0aWwuVFJBTlNJVElPTiYmby5Ccm93c2VyLmFueTNkfSxpbml0aWFsaXplOmZ1bmN0aW9uKHQsZSl7ZT1vLnNldE9wdGlvbnModGhpcyxlKSx0aGlzLl9pbml0Q29udGFpbmVyKHQpLHRoaXMuX2luaXRMYXlvdXQoKSx0aGlzLl9vblJlc2l6ZT1vLmJpbmQodGhpcy5fb25SZXNpemUsdGhpcyksdGhpcy5faW5pdEV2ZW50cygpLGUubWF4Qm91bmRzJiZ0aGlzLnNldE1heEJvdW5kcyhlLm1heEJvdW5kcyksZS5jZW50ZXImJmUuem9vbSE9PWkmJnRoaXMuc2V0VmlldyhvLmxhdExuZyhlLmNlbnRlciksZS56b29tLHtyZXNldDohMH0pLHRoaXMuX2hhbmRsZXJzPVtdLHRoaXMuX2xheWVycz17fSx0aGlzLl96b29tQm91bmRMYXllcnM9e30sdGhpcy5fdGlsZUxheWVyc051bT0wLHRoaXMuY2FsbEluaXRIb29rcygpLHRoaXMuX2FkZExheWVycyhlLmxheWVycyl9LHNldFZpZXc6ZnVuY3Rpb24odCxlKXtyZXR1cm4gZT1lPT09aT90aGlzLmdldFpvb20oKTplLHRoaXMuX3Jlc2V0VmlldyhvLmxhdExuZyh0KSx0aGlzLl9saW1pdFpvb20oZSkpLHRoaXN9LHNldFpvb206ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5fbG9hZGVkP3RoaXMuc2V0Vmlldyh0aGlzLmdldENlbnRlcigpLHQse3pvb206ZX0pOih0aGlzLl96b29tPXRoaXMuX2xpbWl0Wm9vbSh0KSx0aGlzKX0sem9vbUluOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuc2V0Wm9vbSh0aGlzLl96b29tKyh0fHwxKSxlKX0sem9vbU91dDpmdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLnNldFpvb20odGhpcy5fem9vbS0odHx8MSksZSl9LHNldFpvb21Bcm91bmQ6ZnVuY3Rpb24odCxlLGkpe3ZhciBuPXRoaXMuZ2V0Wm9vbVNjYWxlKGUpLHM9dGhpcy5nZXRTaXplKCkuZGl2aWRlQnkoMiksYT10IGluc3RhbmNlb2Ygby5Qb2ludD90OnRoaXMubGF0TG5nVG9Db250YWluZXJQb2ludCh0KSxyPWEuc3VidHJhY3QocykubXVsdGlwbHlCeSgxLTEvbiksaD10aGlzLmNvbnRhaW5lclBvaW50VG9MYXRMbmcocy5hZGQocikpO3JldHVybiB0aGlzLnNldFZpZXcoaCxlLHt6b29tOml9KX0sZml0Qm91bmRzOmZ1bmN0aW9uKHQsZSl7ZT1lfHx7fSx0PXQuZ2V0Qm91bmRzP3QuZ2V0Qm91bmRzKCk6by5sYXRMbmdCb3VuZHModCk7dmFyIGk9by5wb2ludChlLnBhZGRpbmdUb3BMZWZ0fHxlLnBhZGRpbmd8fFswLDBdKSxuPW8ucG9pbnQoZS5wYWRkaW5nQm90dG9tUmlnaHR8fGUucGFkZGluZ3x8WzAsMF0pLHM9dGhpcy5nZXRCb3VuZHNab29tKHQsITEsaS5hZGQobikpLGE9bi5zdWJ0cmFjdChpKS5kaXZpZGVCeSgyKSxyPXRoaXMucHJvamVjdCh0LmdldFNvdXRoV2VzdCgpLHMpLGg9dGhpcy5wcm9qZWN0KHQuZ2V0Tm9ydGhFYXN0KCkscyksbD10aGlzLnVucHJvamVjdChyLmFkZChoKS5kaXZpZGVCeSgyKS5hZGQoYSkscyk7cmV0dXJuIHM9ZSYmZS5tYXhab29tP01hdGgubWluKGUubWF4Wm9vbSxzKTpzLHRoaXMuc2V0VmlldyhsLHMsZSl9LGZpdFdvcmxkOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmZpdEJvdW5kcyhbWy05MCwtMTgwXSxbOTAsMTgwXV0sdCl9LHBhblRvOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuc2V0Vmlldyh0LHRoaXMuX3pvb20se3BhbjplfSl9LHBhbkJ5OmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmZpcmUoIm1vdmVzdGFydCIpLHRoaXMuX3Jhd1BhbkJ5KG8ucG9pbnQodCkpLHRoaXMuZmlyZSgibW92ZSIpLHRoaXMuZmlyZSgibW92ZWVuZCIpfSxzZXRNYXhCb3VuZHM6ZnVuY3Rpb24odCl7cmV0dXJuIHQ9by5sYXRMbmdCb3VuZHModCksdGhpcy5vcHRpb25zLm1heEJvdW5kcz10LHQ/KHRoaXMuX2xvYWRlZCYmdGhpcy5fcGFuSW5zaWRlTWF4Qm91bmRzKCksdGhpcy5vbigibW92ZWVuZCIsdGhpcy5fcGFuSW5zaWRlTWF4Qm91bmRzLHRoaXMpKTp0aGlzLm9mZigibW92ZWVuZCIsdGhpcy5fcGFuSW5zaWRlTWF4Qm91bmRzLHRoaXMpfSxwYW5JbnNpZGVCb3VuZHM6ZnVuY3Rpb24odCxlKXt2YXIgaT10aGlzLmdldENlbnRlcigpLG49dGhpcy5fbGltaXRDZW50ZXIoaSx0aGlzLl96b29tLHQpO3JldHVybiBpLmVxdWFscyhuKT90aGlzOnRoaXMucGFuVG8obixlKX0sYWRkTGF5ZXI6ZnVuY3Rpb24odCl7dmFyIGU9by5zdGFtcCh0KTtyZXR1cm4gdGhpcy5fbGF5ZXJzW2VdP3RoaXM6KHRoaXMuX2xheWVyc1tlXT10LCF0Lm9wdGlvbnN8fGlzTmFOKHQub3B0aW9ucy5tYXhab29tKSYmaXNOYU4odC5vcHRpb25zLm1pblpvb20pfHwodGhpcy5fem9vbUJvdW5kTGF5ZXJzW2VdPXQsdGhpcy5fdXBkYXRlWm9vbUxldmVscygpKSx0aGlzLm9wdGlvbnMuem9vbUFuaW1hdGlvbiYmby5UaWxlTGF5ZXImJnQgaW5zdGFuY2VvZiBvLlRpbGVMYXllciYmKHRoaXMuX3RpbGVMYXllcnNOdW0rKyx0aGlzLl90aWxlTGF5ZXJzVG9Mb2FkKyssdC5vbigibG9hZCIsdGhpcy5fb25UaWxlTGF5ZXJMb2FkLHRoaXMpKSx0aGlzLl9sb2FkZWQmJnRoaXMuX2xheWVyQWRkKHQpLHRoaXMpfSxyZW1vdmVMYXllcjpmdW5jdGlvbih0KXt2YXIgZT1vLnN0YW1wKHQpO3JldHVybiB0aGlzLl9sYXllcnNbZV0/KHRoaXMuX2xvYWRlZCYmdC5vblJlbW92ZSh0aGlzKSxkZWxldGUgdGhpcy5fbGF5ZXJzW2VdLHRoaXMuX2xvYWRlZCYmdGhpcy5maXJlKCJsYXllcnJlbW92ZSIse2xheWVyOnR9KSx0aGlzLl96b29tQm91bmRMYXllcnNbZV0mJihkZWxldGUgdGhpcy5fem9vbUJvdW5kTGF5ZXJzW2VdLHRoaXMuX3VwZGF0ZVpvb21MZXZlbHMoKSksdGhpcy5vcHRpb25zLnpvb21BbmltYXRpb24mJm8uVGlsZUxheWVyJiZ0IGluc3RhbmNlb2Ygby5UaWxlTGF5ZXImJih0aGlzLl90aWxlTGF5ZXJzTnVtLS0sdGhpcy5fdGlsZUxheWVyc1RvTG9hZC0tLHQub2ZmKCJsb2FkIix0aGlzLl9vblRpbGVMYXllckxvYWQsdGhpcykpLHRoaXMpOnRoaXN9LGhhc0xheWVyOmZ1bmN0aW9uKHQpe3JldHVybiB0P28uc3RhbXAodClpbiB0aGlzLl9sYXllcnM6ITF9LGVhY2hMYXllcjpmdW5jdGlvbih0LGUpe2Zvcih2YXIgaSBpbiB0aGlzLl9sYXllcnMpdC5jYWxsKGUsdGhpcy5fbGF5ZXJzW2ldKTtyZXR1cm4gdGhpc30saW52YWxpZGF0ZVNpemU6ZnVuY3Rpb24odCl7aWYoIXRoaXMuX2xvYWRlZClyZXR1cm4gdGhpczt0PW8uZXh0ZW5kKHthbmltYXRlOiExLHBhbjohMH0sdD09PSEwP3thbmltYXRlOiEwfTp0KTt2YXIgZT10aGlzLmdldFNpemUoKTt0aGlzLl9zaXplQ2hhbmdlZD0hMCx0aGlzLl9pbml0aWFsQ2VudGVyPW51bGw7dmFyIGk9dGhpcy5nZXRTaXplKCksbj1lLmRpdmlkZUJ5KDIpLnJvdW5kKCkscz1pLmRpdmlkZUJ5KDIpLnJvdW5kKCksYT1uLnN1YnRyYWN0KHMpO3JldHVybiBhLnh8fGEueT8odC5hbmltYXRlJiZ0LnBhbj90aGlzLnBhbkJ5KGEpOih0LnBhbiYmdGhpcy5fcmF3UGFuQnkoYSksdGhpcy5maXJlKCJtb3ZlIiksdC5kZWJvdW5jZU1vdmVlbmQ/KGNsZWFyVGltZW91dCh0aGlzLl9zaXplVGltZXIpLHRoaXMuX3NpemVUaW1lcj1zZXRUaW1lb3V0KG8uYmluZCh0aGlzLmZpcmUsdGhpcywibW92ZWVuZCIpLDIwMCkpOnRoaXMuZmlyZSgibW92ZWVuZCIpKSx0aGlzLmZpcmUoInJlc2l6ZSIse29sZFNpemU6ZSxuZXdTaXplOml9KSk6dGhpc30sYWRkSGFuZGxlcjpmdW5jdGlvbih0LGUpe2lmKCFlKXJldHVybiB0aGlzO3ZhciBpPXRoaXNbdF09bmV3IGUodGhpcyk7cmV0dXJuIHRoaXMuX2hhbmRsZXJzLnB1c2goaSksdGhpcy5vcHRpb25zW3RdJiZpLmVuYWJsZSgpLHRoaXN9LHJlbW92ZTpmdW5jdGlvbigpe3RoaXMuX2xvYWRlZCYmdGhpcy5maXJlKCJ1bmxvYWQiKSx0aGlzLl9pbml0RXZlbnRzKCJvZmYiKTt0cnl7ZGVsZXRlIHRoaXMuX2NvbnRhaW5lci5fbGVhZmxldH1jYXRjaCh0KXt0aGlzLl9jb250YWluZXIuX2xlYWZsZXQ9aX1yZXR1cm4gdGhpcy5fY2xlYXJQYW5lcygpLHRoaXMuX2NsZWFyQ29udHJvbFBvcyYmdGhpcy5fY2xlYXJDb250cm9sUG9zKCksdGhpcy5fY2xlYXJIYW5kbGVycygpLHRoaXN9LGdldENlbnRlcjpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9jaGVja0lmTG9hZGVkKCksdGhpcy5faW5pdGlhbENlbnRlciYmIXRoaXMuX21vdmVkKCk/dGhpcy5faW5pdGlhbENlbnRlcjp0aGlzLmxheWVyUG9pbnRUb0xhdExuZyh0aGlzLl9nZXRDZW50ZXJMYXllclBvaW50KCkpfSxnZXRab29tOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3pvb219LGdldEJvdW5kczpmdW5jdGlvbigpe3ZhciB0PXRoaXMuZ2V0UGl4ZWxCb3VuZHMoKSxlPXRoaXMudW5wcm9qZWN0KHQuZ2V0Qm90dG9tTGVmdCgpKSxpPXRoaXMudW5wcm9qZWN0KHQuZ2V0VG9wUmlnaHQoKSk7cmV0dXJuIG5ldyBvLkxhdExuZ0JvdW5kcyhlLGkpfSxnZXRNaW5ab29tOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMub3B0aW9ucy5taW5ab29tPT09aT90aGlzLl9sYXllcnNNaW5ab29tPT09aT8wOnRoaXMuX2xheWVyc01pblpvb206dGhpcy5vcHRpb25zLm1pblpvb219LGdldE1heFpvb206ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vcHRpb25zLm1heFpvb209PT1pP3RoaXMuX2xheWVyc01heFpvb209PT1pPzEvMDp0aGlzLl9sYXllcnNNYXhab29tOnRoaXMub3B0aW9ucy5tYXhab29tfSxnZXRCb3VuZHNab29tOmZ1bmN0aW9uKHQsZSxpKXt0PW8ubGF0TG5nQm91bmRzKHQpO3ZhciBuLHM9dGhpcy5nZXRNaW5ab29tKCktKGU/MTowKSxhPXRoaXMuZ2V0TWF4Wm9vbSgpLHI9dGhpcy5nZXRTaXplKCksaD10LmdldE5vcnRoV2VzdCgpLGw9dC5nZXRTb3V0aEVhc3QoKSx1PSEwO2k9by5wb2ludChpfHxbMCwwXSk7ZG8gcysrLG49dGhpcy5wcm9qZWN0KGwscykuc3VidHJhY3QodGhpcy5wcm9qZWN0KGgscykpLmFkZChpKSx1PWU/bi54PHIueHx8bi55PHIueTpyLmNvbnRhaW5zKG4pO3doaWxlKHUmJmE+PXMpO3JldHVybiB1JiZlP251bGw6ZT9zOnMtMX0sZ2V0U2l6ZTpmdW5jdGlvbigpe3JldHVybighdGhpcy5fc2l6ZXx8dGhpcy5fc2l6ZUNoYW5nZWQpJiYodGhpcy5fc2l6ZT1uZXcgby5Qb2ludCh0aGlzLl9jb250YWluZXIuY2xpZW50V2lkdGgsdGhpcy5fY29udGFpbmVyLmNsaWVudEhlaWdodCksdGhpcy5fc2l6ZUNoYW5nZWQ9ITEpLHRoaXMuX3NpemUuY2xvbmUoKX0sZ2V0UGl4ZWxCb3VuZHM6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9nZXRUb3BMZWZ0UG9pbnQoKTtyZXR1cm4gbmV3IG8uQm91bmRzKHQsdC5hZGQodGhpcy5nZXRTaXplKCkpKX0sZ2V0UGl4ZWxPcmlnaW46ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY2hlY2tJZkxvYWRlZCgpLHRoaXMuX2luaXRpYWxUb3BMZWZ0UG9pbnR9LGdldFBhbmVzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3BhbmVzfSxnZXRDb250YWluZXI6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY29udGFpbmVyfSxnZXRab29tU2NhbGU6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5vcHRpb25zLmNycztyZXR1cm4gZS5zY2FsZSh0KS9lLnNjYWxlKHRoaXMuX3pvb20pfSxnZXRTY2FsZVpvb206ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX3pvb20rTWF0aC5sb2codCkvTWF0aC5MTjJ9LHByb2plY3Q6ZnVuY3Rpb24odCxlKXtyZXR1cm4gZT1lPT09aT90aGlzLl96b29tOmUsdGhpcy5vcHRpb25zLmNycy5sYXRMbmdUb1BvaW50KG8ubGF0TG5nKHQpLGUpfSx1bnByb2plY3Q6ZnVuY3Rpb24odCxlKXtyZXR1cm4gZT1lPT09aT90aGlzLl96b29tOmUsdGhpcy5vcHRpb25zLmNycy5wb2ludFRvTGF0TG5nKG8ucG9pbnQodCksZSl9LGxheWVyUG9pbnRUb0xhdExuZzpmdW5jdGlvbih0KXt2YXIgZT1vLnBvaW50KHQpLmFkZCh0aGlzLmdldFBpeGVsT3JpZ2luKCkpO3JldHVybiB0aGlzLnVucHJvamVjdChlKX0sbGF0TG5nVG9MYXllclBvaW50OmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMucHJvamVjdChvLmxhdExuZyh0KSkuX3JvdW5kKCk7cmV0dXJuIGUuX3N1YnRyYWN0KHRoaXMuZ2V0UGl4ZWxPcmlnaW4oKSl9LGNvbnRhaW5lclBvaW50VG9MYXllclBvaW50OmZ1bmN0aW9uKHQpe3JldHVybiBvLnBvaW50KHQpLnN1YnRyYWN0KHRoaXMuX2dldE1hcFBhbmVQb3MoKSl9LGxheWVyUG9pbnRUb0NvbnRhaW5lclBvaW50OmZ1bmN0aW9uKHQpe3JldHVybiBvLnBvaW50KHQpLmFkZCh0aGlzLl9nZXRNYXBQYW5lUG9zKCkpfSxjb250YWluZXJQb2ludFRvTGF0TG5nOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuY29udGFpbmVyUG9pbnRUb0xheWVyUG9pbnQoby5wb2ludCh0KSk7cmV0dXJuIHRoaXMubGF5ZXJQb2ludFRvTGF0TG5nKGUpfSxsYXRMbmdUb0NvbnRhaW5lclBvaW50OmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmxheWVyUG9pbnRUb0NvbnRhaW5lclBvaW50KHRoaXMubGF0TG5nVG9MYXllclBvaW50KG8ubGF0TG5nKHQpKSl9LG1vdXNlRXZlbnRUb0NvbnRhaW5lclBvaW50OmZ1bmN0aW9uKHQpe3JldHVybiBvLkRvbUV2ZW50LmdldE1vdXNlUG9zaXRpb24odCx0aGlzLl9jb250YWluZXIpfSxtb3VzZUV2ZW50VG9MYXllclBvaW50OmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmNvbnRhaW5lclBvaW50VG9MYXllclBvaW50KHRoaXMubW91c2VFdmVudFRvQ29udGFpbmVyUG9pbnQodCkpfSxtb3VzZUV2ZW50VG9MYXRMbmc6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMubGF5ZXJQb2ludFRvTGF0TG5nKHRoaXMubW91c2VFdmVudFRvTGF5ZXJQb2ludCh0KSl9LF9pbml0Q29udGFpbmVyOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX2NvbnRhaW5lcj1vLkRvbVV0aWwuZ2V0KHQpO2lmKCFlKXRocm93IG5ldyBFcnJvcigiTWFwIGNvbnRhaW5lciBub3QgZm91bmQuIik7aWYoZS5fbGVhZmxldCl0aHJvdyBuZXcgRXJyb3IoIk1hcCBjb250YWluZXIgaXMgYWxyZWFkeSBpbml0aWFsaXplZC4iKTtlLl9sZWFmbGV0PSEwfSxfaW5pdExheW91dDpmdW5jdGlvbigpe3ZhciB0PXRoaXMuX2NvbnRhaW5lcjtvLkRvbVV0aWwuYWRkQ2xhc3ModCwibGVhZmxldC1jb250YWluZXIiKyhvLkJyb3dzZXIudG91Y2g/IiBsZWFmbGV0LXRvdWNoIjoiIikrKG8uQnJvd3Nlci5yZXRpbmE/IiBsZWFmbGV0LXJldGluYSI6IiIpKyhvLkJyb3dzZXIuaWVsdDk/IiBsZWFmbGV0LW9sZGllIjoiIikrKHRoaXMub3B0aW9ucy5mYWRlQW5pbWF0aW9uPyIgbGVhZmxldC1mYWRlLWFuaW0iOiIiKSk7dmFyIGU9by5Eb21VdGlsLmdldFN0eWxlKHQsInBvc2l0aW9uIik7ImFic29sdXRlIiE9PWUmJiJyZWxhdGl2ZSIhPT1lJiYiZml4ZWQiIT09ZSYmKHQuc3R5bGUucG9zaXRpb249InJlbGF0aXZlIiksdGhpcy5faW5pdFBhbmVzKCksdGhpcy5faW5pdENvbnRyb2xQb3MmJnRoaXMuX2luaXRDb250cm9sUG9zKCl9LF9pbml0UGFuZXM6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9wYW5lcz17fTt0aGlzLl9tYXBQYW5lPXQubWFwUGFuZT10aGlzLl9jcmVhdGVQYW5lKCJsZWFmbGV0LW1hcC1wYW5lIix0aGlzLl9jb250YWluZXIpLHRoaXMuX3RpbGVQYW5lPXQudGlsZVBhbmU9dGhpcy5fY3JlYXRlUGFuZSgibGVhZmxldC10aWxlLXBhbmUiLHRoaXMuX21hcFBhbmUpLHQub2JqZWN0c1BhbmU9dGhpcy5fY3JlYXRlUGFuZSgibGVhZmxldC1vYmplY3RzLXBhbmUiLHRoaXMuX21hcFBhbmUpLHQuc2hhZG93UGFuZT10aGlzLl9jcmVhdGVQYW5lKCJsZWFmbGV0LXNoYWRvdy1wYW5lIiksdC5vdmVybGF5UGFuZT10aGlzLl9jcmVhdGVQYW5lKCJsZWFmbGV0LW92ZXJsYXktcGFuZSIpLHQubWFya2VyUGFuZT10aGlzLl9jcmVhdGVQYW5lKCJsZWFmbGV0LW1hcmtlci1wYW5lIiksdC5wb3B1cFBhbmU9dGhpcy5fY3JlYXRlUGFuZSgibGVhZmxldC1wb3B1cC1wYW5lIik7dmFyIGU9IiBsZWFmbGV0LXpvb20taGlkZSI7dGhpcy5vcHRpb25zLm1hcmtlclpvb21BbmltYXRpb258fChvLkRvbVV0aWwuYWRkQ2xhc3ModC5tYXJrZXJQYW5lLGUpLG8uRG9tVXRpbC5hZGRDbGFzcyh0LnNoYWRvd1BhbmUsZSksby5Eb21VdGlsLmFkZENsYXNzKHQucG9wdXBQYW5lLGUpKX0sX2NyZWF0ZVBhbmU6ZnVuY3Rpb24odCxlKXtyZXR1cm4gby5Eb21VdGlsLmNyZWF0ZSgiZGl2Iix0LGV8fHRoaXMuX3BhbmVzLm9iamVjdHNQYW5lKX0sX2NsZWFyUGFuZXM6ZnVuY3Rpb24oKXt0aGlzLl9jb250YWluZXIucmVtb3ZlQ2hpbGQodGhpcy5fbWFwUGFuZSl9LF9hZGRMYXllcnM6ZnVuY3Rpb24odCl7dD10P28uVXRpbC5pc0FycmF5KHQpP3Q6W3RdOltdO2Zvcih2YXIgZT0wLGk9dC5sZW5ndGg7aT5lO2UrKyl0aGlzLmFkZExheWVyKHRbZV0pfSxfcmVzZXRWaWV3OmZ1bmN0aW9uKHQsZSxpLG4pe3ZhciBzPXRoaXMuX3pvb20hPT1lO258fCh0aGlzLmZpcmUoIm1vdmVzdGFydCIpLHMmJnRoaXMuZmlyZSgiem9vbXN0YXJ0IikpLHRoaXMuX3pvb209ZSx0aGlzLl9pbml0aWFsQ2VudGVyPXQsdGhpcy5faW5pdGlhbFRvcExlZnRQb2ludD10aGlzLl9nZXROZXdUb3BMZWZ0UG9pbnQodCksaT90aGlzLl9pbml0aWFsVG9wTGVmdFBvaW50Ll9hZGQodGhpcy5fZ2V0TWFwUGFuZVBvcygpKTpvLkRvbVV0aWwuc2V0UG9zaXRpb24odGhpcy5fbWFwUGFuZSxuZXcgby5Qb2ludCgwLDApKSx0aGlzLl90aWxlTGF5ZXJzVG9Mb2FkPXRoaXMuX3RpbGVMYXllcnNOdW07dmFyIGE9IXRoaXMuX2xvYWRlZDt0aGlzLl9sb2FkZWQ9ITAsdGhpcy5maXJlKCJ2aWV3cmVzZXQiLHtoYXJkOiFpfSksYSYmKHRoaXMuZmlyZSgibG9hZCIpLHRoaXMuZWFjaExheWVyKHRoaXMuX2xheWVyQWRkLHRoaXMpKSx0aGlzLmZpcmUoIm1vdmUiKSwoc3x8bikmJnRoaXMuZmlyZSgiem9vbWVuZCIpLHRoaXMuZmlyZSgibW92ZWVuZCIse2hhcmQ6IWl9KX0sX3Jhd1BhbkJ5OmZ1bmN0aW9uKHQpe28uRG9tVXRpbC5zZXRQb3NpdGlvbih0aGlzLl9tYXBQYW5lLHRoaXMuX2dldE1hcFBhbmVQb3MoKS5zdWJ0cmFjdCh0KSl9LF9nZXRab29tU3BhbjpmdW5jdGlvbigpe3JldHVybiB0aGlzLmdldE1heFpvb20oKS10aGlzLmdldE1pblpvb20oKX0sX3VwZGF0ZVpvb21MZXZlbHM6ZnVuY3Rpb24oKXt2YXIgdCxlPTEvMCxuPS0xLzAsbz10aGlzLl9nZXRab29tU3BhbigpO2Zvcih0IGluIHRoaXMuX3pvb21Cb3VuZExheWVycyl7dmFyIHM9dGhpcy5fem9vbUJvdW5kTGF5ZXJzW3RdO2lzTmFOKHMub3B0aW9ucy5taW5ab29tKXx8KGU9TWF0aC5taW4oZSxzLm9wdGlvbnMubWluWm9vbSkpLGlzTmFOKHMub3B0aW9ucy5tYXhab29tKXx8KG49TWF0aC5tYXgobixzLm9wdGlvbnMubWF4Wm9vbSkpfXQ9PT1pP3RoaXMuX2xheWVyc01heFpvb209dGhpcy5fbGF5ZXJzTWluWm9vbT1pOih0aGlzLl9sYXllcnNNYXhab29tPW4sdGhpcy5fbGF5ZXJzTWluWm9vbT1lKSxvIT09dGhpcy5fZ2V0Wm9vbVNwYW4oKSYmdGhpcy5maXJlKCJ6b29tbGV2ZWxzY2hhbmdlIil9LF9wYW5JbnNpZGVNYXhCb3VuZHM6ZnVuY3Rpb24oKXt0aGlzLnBhbkluc2lkZUJvdW5kcyh0aGlzLm9wdGlvbnMubWF4Qm91bmRzKX0sX2NoZWNrSWZMb2FkZWQ6ZnVuY3Rpb24oKXtpZighdGhpcy5fbG9hZGVkKXRocm93IG5ldyBFcnJvcigiU2V0IG1hcCBjZW50ZXIgYW5kIHpvb20gZmlyc3QuIil9LF9pbml0RXZlbnRzOmZ1bmN0aW9uKGUpe2lmKG8uRG9tRXZlbnQpe2U9ZXx8Im9uIixvLkRvbUV2ZW50W2VdKHRoaXMuX2NvbnRhaW5lciwiY2xpY2siLHRoaXMuX29uTW91c2VDbGljayx0aGlzKTt2YXIgaSxuLHM9WyJkYmxjbGljayIsIm1vdXNlZG93biIsIm1vdXNldXAiLCJtb3VzZWVudGVyIiwibW91c2VsZWF2ZSIsIm1vdXNlbW92ZSIsImNvbnRleHRtZW51Il07Zm9yKGk9MCxuPXMubGVuZ3RoO24+aTtpKyspby5Eb21FdmVudFtlXSh0aGlzLl9jb250YWluZXIsc1tpXSx0aGlzLl9maXJlTW91c2VFdmVudCx0aGlzKTt0aGlzLm9wdGlvbnMudHJhY2tSZXNpemUmJm8uRG9tRXZlbnRbZV0odCwicmVzaXplIix0aGlzLl9vblJlc2l6ZSx0aGlzKX19LF9vblJlc2l6ZTpmdW5jdGlvbigpe28uVXRpbC5jYW5jZWxBbmltRnJhbWUodGhpcy5fcmVzaXplUmVxdWVzdCksdGhpcy5fcmVzaXplUmVxdWVzdD1vLlV0aWwucmVxdWVzdEFuaW1GcmFtZShmdW5jdGlvbigpe3RoaXMuaW52YWxpZGF0ZVNpemUoe2RlYm91bmNlTW92ZWVuZDohMH0pfSx0aGlzLCExLHRoaXMuX2NvbnRhaW5lcil9LF9vbk1vdXNlQ2xpY2s6ZnVuY3Rpb24odCl7IXRoaXMuX2xvYWRlZHx8IXQuX3NpbXVsYXRlZCYmKHRoaXMuZHJhZ2dpbmcmJnRoaXMuZHJhZ2dpbmcubW92ZWQoKXx8dGhpcy5ib3hab29tJiZ0aGlzLmJveFpvb20ubW92ZWQoKSl8fG8uRG9tRXZlbnQuX3NraXBwZWQodCl8fCh0aGlzLmZpcmUoInByZWNsaWNrIiksdGhpcy5fZmlyZU1vdXNlRXZlbnQodCkpfSxfZmlyZU1vdXNlRXZlbnQ6ZnVuY3Rpb24odCl7aWYodGhpcy5fbG9hZGVkJiYhby5Eb21FdmVudC5fc2tpcHBlZCh0KSl7dmFyIGU9dC50eXBlO2lmKGU9Im1vdXNlZW50ZXIiPT09ZT8ibW91c2VvdmVyIjoibW91c2VsZWF2ZSI9PT1lPyJtb3VzZW91dCI6ZSx0aGlzLmhhc0V2ZW50TGlzdGVuZXJzKGUpKXsiY29udGV4dG1lbnUiPT09ZSYmby5Eb21FdmVudC5wcmV2ZW50RGVmYXVsdCh0KTt2YXIgaT10aGlzLm1vdXNlRXZlbnRUb0NvbnRhaW5lclBvaW50KHQpLG49dGhpcy5jb250YWluZXJQb2ludFRvTGF5ZXJQb2ludChpKSxzPXRoaXMubGF5ZXJQb2ludFRvTGF0TG5nKG4pO3RoaXMuZmlyZShlLHtsYXRsbmc6cyxsYXllclBvaW50Om4sY29udGFpbmVyUG9pbnQ6aSxvcmlnaW5hbEV2ZW50OnR9KX19fSxfb25UaWxlTGF5ZXJMb2FkOmZ1bmN0aW9uKCl7dGhpcy5fdGlsZUxheWVyc1RvTG9hZC0tLHRoaXMuX3RpbGVMYXllcnNOdW0mJiF0aGlzLl90aWxlTGF5ZXJzVG9Mb2FkJiZ0aGlzLmZpcmUoInRpbGVsYXllcnNsb2FkIil9LF9jbGVhckhhbmRsZXJzOmZ1bmN0aW9uKCl7Zm9yKHZhciB0PTAsZT10aGlzLl9oYW5kbGVycy5sZW5ndGg7ZT50O3QrKyl0aGlzLl9oYW5kbGVyc1t0XS5kaXNhYmxlKCl9LHdoZW5SZWFkeTpmdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLl9sb2FkZWQ/dC5jYWxsKGV8fHRoaXMsdGhpcyk6dGhpcy5vbigibG9hZCIsdCxlKSx0aGlzfSxfbGF5ZXJBZGQ6ZnVuY3Rpb24odCl7dC5vbkFkZCh0aGlzKSx0aGlzLmZpcmUoImxheWVyYWRkIix7bGF5ZXI6dH0pfSxfZ2V0TWFwUGFuZVBvczpmdW5jdGlvbigpe3JldHVybiBvLkRvbVV0aWwuZ2V0UG9zaXRpb24odGhpcy5fbWFwUGFuZSl9LF9tb3ZlZDpmdW5jdGlvbigpe3ZhciB0PXRoaXMuX2dldE1hcFBhbmVQb3MoKTtyZXR1cm4gdCYmIXQuZXF1YWxzKFswLDBdKX0sX2dldFRvcExlZnRQb2ludDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmdldFBpeGVsT3JpZ2luKCkuc3VidHJhY3QodGhpcy5fZ2V0TWFwUGFuZVBvcygpKX0sX2dldE5ld1RvcExlZnRQb2ludDpmdW5jdGlvbih0LGUpe3ZhciBpPXRoaXMuZ2V0U2l6ZSgpLl9kaXZpZGVCeSgyKTtyZXR1cm4gdGhpcy5wcm9qZWN0KHQsZSkuX3N1YnRyYWN0KGkpLl9yb3VuZCgpfSxfbGF0TG5nVG9OZXdMYXllclBvaW50OmZ1bmN0aW9uKHQsZSxpKXt2YXIgbj10aGlzLl9nZXROZXdUb3BMZWZ0UG9pbnQoaSxlKS5hZGQodGhpcy5fZ2V0TWFwUGFuZVBvcygpKTtyZXR1cm4gdGhpcy5wcm9qZWN0KHQsZSkuX3N1YnRyYWN0KG4pfSxfZ2V0Q2VudGVyTGF5ZXJQb2ludDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbnRhaW5lclBvaW50VG9MYXllclBvaW50KHRoaXMuZ2V0U2l6ZSgpLl9kaXZpZGVCeSgyKSl9LF9nZXRDZW50ZXJPZmZzZXQ6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMubGF0TG5nVG9MYXllclBvaW50KHQpLnN1YnRyYWN0KHRoaXMuX2dldENlbnRlckxheWVyUG9pbnQoKSl9LF9saW1pdENlbnRlcjpmdW5jdGlvbih0LGUsaSl7aWYoIWkpcmV0dXJuIHQ7dmFyIG49dGhpcy5wcm9qZWN0KHQsZSkscz10aGlzLmdldFNpemUoKS5kaXZpZGVCeSgyKSxhPW5ldyBvLkJvdW5kcyhuLnN1YnRyYWN0KHMpLG4uYWRkKHMpKSxyPXRoaXMuX2dldEJvdW5kc09mZnNldChhLGksZSk7cmV0dXJuIHRoaXMudW5wcm9qZWN0KG4uYWRkKHIpLGUpfSxfbGltaXRPZmZzZXQ6ZnVuY3Rpb24odCxlKXtpZighZSlyZXR1cm4gdDt2YXIgaT10aGlzLmdldFBpeGVsQm91bmRzKCksbj1uZXcgby5Cb3VuZHMoaS5taW4uYWRkKHQpLGkubWF4LmFkZCh0KSk7cmV0dXJuIHQuYWRkKHRoaXMuX2dldEJvdW5kc09mZnNldChuLGUpKX0sX2dldEJvdW5kc09mZnNldDpmdW5jdGlvbih0LGUsaSl7dmFyIG49dGhpcy5wcm9qZWN0KGUuZ2V0Tm9ydGhXZXN0KCksaSkuc3VidHJhY3QodC5taW4pLHM9dGhpcy5wcm9qZWN0KGUuZ2V0U291dGhFYXN0KCksaSkuc3VidHJhY3QodC5tYXgpLGE9dGhpcy5fcmVib3VuZChuLngsLXMueCkscj10aGlzLl9yZWJvdW5kKG4ueSwtcy55KTtyZXR1cm4gbmV3IG8uUG9pbnQoYSxyKX0sX3JlYm91bmQ6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdCtlPjA/TWF0aC5yb3VuZCh0LWUpLzI6TWF0aC5tYXgoMCxNYXRoLmNlaWwodCkpLU1hdGgubWF4KDAsTWF0aC5mbG9vcihlKSl9LF9saW1pdFpvb206ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5nZXRNaW5ab29tKCksaT10aGlzLmdldE1heFpvb20oKTtyZXR1cm4gTWF0aC5tYXgoZSxNYXRoLm1pbihpLHQpKX19KSxvLm1hcD1mdW5jdGlvbih0LGUpe3JldHVybiBuZXcgby5NYXAodCxlKX0sby5Qcm9qZWN0aW9uLk1lcmNhdG9yPXtNQVhfTEFUSVRVREU6ODUuMDg0MDU5MTU1NixSX01JTk9SOjYzNTY3NTIuMzE0MjQ1MTc5LFJfTUFKT1I6NjM3ODEzNyxwcm9qZWN0OmZ1bmN0aW9uKHQpe3ZhciBlPW8uTGF0TG5nLkRFR19UT19SQUQsaT10aGlzLk1BWF9MQVRJVFVERSxuPU1hdGgubWF4KE1hdGgubWluKGksdC5sYXQpLC1pKSxzPXRoaXMuUl9NQUpPUixhPXRoaXMuUl9NSU5PUixyPXQubG5nKmUqcyxoPW4qZSxsPWEvcyx1PU1hdGguc3FydCgxLWwqbCksYz11Kk1hdGguc2luKGgpO2M9TWF0aC5wb3coKDEtYykvKDErYyksLjUqdSk7dmFyIGQ9TWF0aC50YW4oLjUqKC41Kk1hdGguUEktaCkpL2M7cmV0dXJuIGg9LXMqTWF0aC5sb2coZCksbmV3IG8uUG9pbnQocixoKX0sdW5wcm9qZWN0OmZ1bmN0aW9uKHQpe2Zvcih2YXIgZSxpPW8uTGF0TG5nLlJBRF9UT19ERUcsbj10aGlzLlJfTUFKT1Iscz10aGlzLlJfTUlOT1IsYT10LngqaS9uLHI9cy9uLGg9TWF0aC5zcXJ0KDEtcipyKSxsPU1hdGguZXhwKC10LnkvbiksdT1NYXRoLlBJLzItMipNYXRoLmF0YW4obCksYz0xNSxkPTFlLTcscD1jLF89LjE7TWF0aC5hYnMoXyk+ZCYmLS1wPjA7KWU9aCpNYXRoLnNpbih1KSxfPU1hdGguUEkvMi0yKk1hdGguYXRhbihsKk1hdGgucG93KCgxLWUpLygxK2UpLC41KmgpKS11LHUrPV87CnJldHVybiBuZXcgby5MYXRMbmcodSppLGEpfX0sby5DUlMuRVBTRzMzOTU9by5leHRlbmQoe30sby5DUlMse2NvZGU6IkVQU0c6MzM5NSIscHJvamVjdGlvbjpvLlByb2plY3Rpb24uTWVyY2F0b3IsdHJhbnNmb3JtYXRpb246ZnVuY3Rpb24oKXt2YXIgdD1vLlByb2plY3Rpb24uTWVyY2F0b3IsZT10LlJfTUFKT1IsaT0uNS8oTWF0aC5QSSplKTtyZXR1cm4gbmV3IG8uVHJhbnNmb3JtYXRpb24oaSwuNSwtaSwuNSl9KCl9KSxvLlRpbGVMYXllcj1vLkNsYXNzLmV4dGVuZCh7aW5jbHVkZXM6by5NaXhpbi5FdmVudHMsb3B0aW9uczp7bWluWm9vbTowLG1heFpvb206MTgsdGlsZVNpemU6MjU2LHN1YmRvbWFpbnM6ImFiYyIsZXJyb3JUaWxlVXJsOiIiLGF0dHJpYnV0aW9uOiIiLHpvb21PZmZzZXQ6MCxvcGFjaXR5OjEsdW5sb2FkSW52aXNpYmxlVGlsZXM6by5Ccm93c2VyLm1vYmlsZSx1cGRhdGVXaGVuSWRsZTpvLkJyb3dzZXIubW9iaWxlfSxpbml0aWFsaXplOmZ1bmN0aW9uKHQsZSl7ZT1vLnNldE9wdGlvbnModGhpcyxlKSxlLmRldGVjdFJldGluYSYmby5Ccm93c2VyLnJldGluYSYmZS5tYXhab29tPjAmJihlLnRpbGVTaXplPU1hdGguZmxvb3IoZS50aWxlU2l6ZS8yKSxlLnpvb21PZmZzZXQrKyxlLm1pblpvb20+MCYmZS5taW5ab29tLS0sdGhpcy5vcHRpb25zLm1heFpvb20tLSksZS5ib3VuZHMmJihlLmJvdW5kcz1vLmxhdExuZ0JvdW5kcyhlLmJvdW5kcykpLHRoaXMuX3VybD10O3ZhciBpPXRoaXMub3B0aW9ucy5zdWJkb21haW5zOyJzdHJpbmciPT10eXBlb2YgaSYmKHRoaXMub3B0aW9ucy5zdWJkb21haW5zPWkuc3BsaXQoIiIpKX0sb25BZGQ6ZnVuY3Rpb24odCl7dGhpcy5fbWFwPXQsdGhpcy5fYW5pbWF0ZWQ9dC5fem9vbUFuaW1hdGVkLHRoaXMuX2luaXRDb250YWluZXIoKSx0Lm9uKHt2aWV3cmVzZXQ6dGhpcy5fcmVzZXQsbW92ZWVuZDp0aGlzLl91cGRhdGV9LHRoaXMpLHRoaXMuX2FuaW1hdGVkJiZ0Lm9uKHt6b29tYW5pbTp0aGlzLl9hbmltYXRlWm9vbSx6b29tZW5kOnRoaXMuX2VuZFpvb21BbmltfSx0aGlzKSx0aGlzLm9wdGlvbnMudXBkYXRlV2hlbklkbGV8fCh0aGlzLl9saW1pdGVkVXBkYXRlPW8uVXRpbC5saW1pdEV4ZWNCeUludGVydmFsKHRoaXMuX3VwZGF0ZSwxNTAsdGhpcyksdC5vbigibW92ZSIsdGhpcy5fbGltaXRlZFVwZGF0ZSx0aGlzKSksdGhpcy5fcmVzZXQoKSx0aGlzLl91cGRhdGUoKX0sYWRkVG86ZnVuY3Rpb24odCl7cmV0dXJuIHQuYWRkTGF5ZXIodGhpcyksdGhpc30sb25SZW1vdmU6ZnVuY3Rpb24odCl7dGhpcy5fY29udGFpbmVyLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodGhpcy5fY29udGFpbmVyKSx0Lm9mZih7dmlld3Jlc2V0OnRoaXMuX3Jlc2V0LG1vdmVlbmQ6dGhpcy5fdXBkYXRlfSx0aGlzKSx0aGlzLl9hbmltYXRlZCYmdC5vZmYoe3pvb21hbmltOnRoaXMuX2FuaW1hdGVab29tLHpvb21lbmQ6dGhpcy5fZW5kWm9vbUFuaW19LHRoaXMpLHRoaXMub3B0aW9ucy51cGRhdGVXaGVuSWRsZXx8dC5vZmYoIm1vdmUiLHRoaXMuX2xpbWl0ZWRVcGRhdGUsdGhpcyksdGhpcy5fY29udGFpbmVyPW51bGwsdGhpcy5fbWFwPW51bGx9LGJyaW5nVG9Gcm9udDpmdW5jdGlvbigpe3ZhciB0PXRoaXMuX21hcC5fcGFuZXMudGlsZVBhbmU7cmV0dXJuIHRoaXMuX2NvbnRhaW5lciYmKHQuYXBwZW5kQ2hpbGQodGhpcy5fY29udGFpbmVyKSx0aGlzLl9zZXRBdXRvWkluZGV4KHQsTWF0aC5tYXgpKSx0aGlzfSxicmluZ1RvQmFjazpmdW5jdGlvbigpe3ZhciB0PXRoaXMuX21hcC5fcGFuZXMudGlsZVBhbmU7cmV0dXJuIHRoaXMuX2NvbnRhaW5lciYmKHQuaW5zZXJ0QmVmb3JlKHRoaXMuX2NvbnRhaW5lcix0LmZpcnN0Q2hpbGQpLHRoaXMuX3NldEF1dG9aSW5kZXgodCxNYXRoLm1pbikpLHRoaXN9LGdldEF0dHJpYnV0aW9uOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMub3B0aW9ucy5hdHRyaWJ1dGlvbn0sZ2V0Q29udGFpbmVyOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2NvbnRhaW5lcn0sc2V0T3BhY2l0eTpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5vcHRpb25zLm9wYWNpdHk9dCx0aGlzLl9tYXAmJnRoaXMuX3VwZGF0ZU9wYWNpdHkoKSx0aGlzfSxzZXRaSW5kZXg6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMub3B0aW9ucy56SW5kZXg9dCx0aGlzLl91cGRhdGVaSW5kZXgoKSx0aGlzfSxzZXRVcmw6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5fdXJsPXQsZXx8dGhpcy5yZWRyYXcoKSx0aGlzfSxyZWRyYXc6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbWFwJiYodGhpcy5fcmVzZXQoe2hhcmQ6ITB9KSx0aGlzLl91cGRhdGUoKSksdGhpc30sX3VwZGF0ZVpJbmRleDpmdW5jdGlvbigpe3RoaXMuX2NvbnRhaW5lciYmdGhpcy5vcHRpb25zLnpJbmRleCE9PWkmJih0aGlzLl9jb250YWluZXIuc3R5bGUuekluZGV4PXRoaXMub3B0aW9ucy56SW5kZXgpfSxfc2V0QXV0b1pJbmRleDpmdW5jdGlvbih0LGUpe3ZhciBpLG4sbyxzPXQuY2hpbGRyZW4sYT0tZSgxLzAsLTEvMCk7Zm9yKG49MCxvPXMubGVuZ3RoO28+bjtuKyspc1tuXSE9PXRoaXMuX2NvbnRhaW5lciYmKGk9cGFyc2VJbnQoc1tuXS5zdHlsZS56SW5kZXgsMTApLGlzTmFOKGkpfHwoYT1lKGEsaSkpKTt0aGlzLm9wdGlvbnMuekluZGV4PXRoaXMuX2NvbnRhaW5lci5zdHlsZS56SW5kZXg9KGlzRmluaXRlKGEpP2E6MCkrZSgxLC0xKX0sX3VwZGF0ZU9wYWNpdHk6ZnVuY3Rpb24oKXt2YXIgdCxlPXRoaXMuX3RpbGVzO2lmKG8uQnJvd3Nlci5pZWx0OSlmb3IodCBpbiBlKW8uRG9tVXRpbC5zZXRPcGFjaXR5KGVbdF0sdGhpcy5vcHRpb25zLm9wYWNpdHkpO2Vsc2Ugby5Eb21VdGlsLnNldE9wYWNpdHkodGhpcy5fY29udGFpbmVyLHRoaXMub3B0aW9ucy5vcGFjaXR5KX0sX2luaXRDb250YWluZXI6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9tYXAuX3BhbmVzLnRpbGVQYW5lO2lmKCF0aGlzLl9jb250YWluZXIpe2lmKHRoaXMuX2NvbnRhaW5lcj1vLkRvbVV0aWwuY3JlYXRlKCJkaXYiLCJsZWFmbGV0LWxheWVyIiksdGhpcy5fdXBkYXRlWkluZGV4KCksdGhpcy5fYW5pbWF0ZWQpe3ZhciBlPSJsZWFmbGV0LXRpbGUtY29udGFpbmVyIjt0aGlzLl9iZ0J1ZmZlcj1vLkRvbVV0aWwuY3JlYXRlKCJkaXYiLGUsdGhpcy5fY29udGFpbmVyKSx0aGlzLl90aWxlQ29udGFpbmVyPW8uRG9tVXRpbC5jcmVhdGUoImRpdiIsZSx0aGlzLl9jb250YWluZXIpfWVsc2UgdGhpcy5fdGlsZUNvbnRhaW5lcj10aGlzLl9jb250YWluZXI7dC5hcHBlbmRDaGlsZCh0aGlzLl9jb250YWluZXIpLHRoaXMub3B0aW9ucy5vcGFjaXR5PDEmJnRoaXMuX3VwZGF0ZU9wYWNpdHkoKX19LF9yZXNldDpmdW5jdGlvbih0KXtmb3IodmFyIGUgaW4gdGhpcy5fdGlsZXMpdGhpcy5maXJlKCJ0aWxldW5sb2FkIix7dGlsZTp0aGlzLl90aWxlc1tlXX0pO3RoaXMuX3RpbGVzPXt9LHRoaXMuX3RpbGVzVG9Mb2FkPTAsdGhpcy5vcHRpb25zLnJldXNlVGlsZXMmJih0aGlzLl91bnVzZWRUaWxlcz1bXSksdGhpcy5fdGlsZUNvbnRhaW5lci5pbm5lckhUTUw9IiIsdGhpcy5fYW5pbWF0ZWQmJnQmJnQuaGFyZCYmdGhpcy5fY2xlYXJCZ0J1ZmZlcigpLHRoaXMuX2luaXRDb250YWluZXIoKX0sX2dldFRpbGVTaXplOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fbWFwLGU9dC5nZXRab29tKCkrdGhpcy5vcHRpb25zLnpvb21PZmZzZXQsaT10aGlzLm9wdGlvbnMubWF4TmF0aXZlWm9vbSxuPXRoaXMub3B0aW9ucy50aWxlU2l6ZTtyZXR1cm4gaSYmZT5pJiYobj1NYXRoLnJvdW5kKHQuZ2V0Wm9vbVNjYWxlKGUpL3QuZ2V0Wm9vbVNjYWxlKGkpKm4pKSxufSxfdXBkYXRlOmZ1bmN0aW9uKCl7aWYodGhpcy5fbWFwKXt2YXIgdD10aGlzLl9tYXAsZT10LmdldFBpeGVsQm91bmRzKCksaT10LmdldFpvb20oKSxuPXRoaXMuX2dldFRpbGVTaXplKCk7aWYoIShpPnRoaXMub3B0aW9ucy5tYXhab29tfHxpPHRoaXMub3B0aW9ucy5taW5ab29tKSl7dmFyIHM9by5ib3VuZHMoZS5taW4uZGl2aWRlQnkobikuX2Zsb29yKCksZS5tYXguZGl2aWRlQnkobikuX2Zsb29yKCkpO3RoaXMuX2FkZFRpbGVzRnJvbUNlbnRlck91dChzKSwodGhpcy5vcHRpb25zLnVubG9hZEludmlzaWJsZVRpbGVzfHx0aGlzLm9wdGlvbnMucmV1c2VUaWxlcykmJnRoaXMuX3JlbW92ZU90aGVyVGlsZXMocyl9fX0sX2FkZFRpbGVzRnJvbUNlbnRlck91dDpmdW5jdGlvbih0KXt2YXIgaSxuLHMsYT1bXSxyPXQuZ2V0Q2VudGVyKCk7Zm9yKGk9dC5taW4ueTtpPD10Lm1heC55O2krKylmb3Iobj10Lm1pbi54O248PXQubWF4Lng7bisrKXM9bmV3IG8uUG9pbnQobixpKSx0aGlzLl90aWxlU2hvdWxkQmVMb2FkZWQocykmJmEucHVzaChzKTt2YXIgaD1hLmxlbmd0aDtpZigwIT09aCl7YS5zb3J0KGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQuZGlzdGFuY2VUbyhyKS1lLmRpc3RhbmNlVG8ocil9KTt2YXIgbD1lLmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKTtmb3IodGhpcy5fdGlsZXNUb0xvYWR8fHRoaXMuZmlyZSgibG9hZGluZyIpLHRoaXMuX3RpbGVzVG9Mb2FkKz1oLG49MDtoPm47bisrKXRoaXMuX2FkZFRpbGUoYVtuXSxsKTt0aGlzLl90aWxlQ29udGFpbmVyLmFwcGVuZENoaWxkKGwpfX0sX3RpbGVTaG91bGRCZUxvYWRlZDpmdW5jdGlvbih0KXtpZih0LngrIjoiK3QueSBpbiB0aGlzLl90aWxlcylyZXR1cm4hMTt2YXIgZT10aGlzLm9wdGlvbnM7aWYoIWUuY29udGludW91c1dvcmxkKXt2YXIgaT10aGlzLl9nZXRXcmFwVGlsZU51bSgpO2lmKGUubm9XcmFwJiYodC54PDB8fHQueD49aS54KXx8dC55PDB8fHQueT49aS55KXJldHVybiExfWlmKGUuYm91bmRzKXt2YXIgbj1lLnRpbGVTaXplLG89dC5tdWx0aXBseUJ5KG4pLHM9by5hZGQoW24sbl0pLGE9dGhpcy5fbWFwLnVucHJvamVjdChvKSxyPXRoaXMuX21hcC51bnByb2plY3Qocyk7aWYoZS5jb250aW51b3VzV29ybGR8fGUubm9XcmFwfHwoYT1hLndyYXAoKSxyPXIud3JhcCgpKSwhZS5ib3VuZHMuaW50ZXJzZWN0cyhbYSxyXSkpcmV0dXJuITF9cmV0dXJuITB9LF9yZW1vdmVPdGhlclRpbGVzOmZ1bmN0aW9uKHQpe3ZhciBlLGksbixvO2ZvcihvIGluIHRoaXMuX3RpbGVzKWU9by5zcGxpdCgiOiIpLGk9cGFyc2VJbnQoZVswXSwxMCksbj1wYXJzZUludChlWzFdLDEwKSwoaTx0Lm1pbi54fHxpPnQubWF4Lnh8fG48dC5taW4ueXx8bj50Lm1heC55KSYmdGhpcy5fcmVtb3ZlVGlsZShvKX0sX3JlbW92ZVRpbGU6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fdGlsZXNbdF07dGhpcy5maXJlKCJ0aWxldW5sb2FkIix7dGlsZTplLHVybDplLnNyY30pLHRoaXMub3B0aW9ucy5yZXVzZVRpbGVzPyhvLkRvbVV0aWwucmVtb3ZlQ2xhc3MoZSwibGVhZmxldC10aWxlLWxvYWRlZCIpLHRoaXMuX3VudXNlZFRpbGVzLnB1c2goZSkpOmUucGFyZW50Tm9kZT09PXRoaXMuX3RpbGVDb250YWluZXImJnRoaXMuX3RpbGVDb250YWluZXIucmVtb3ZlQ2hpbGQoZSksby5Ccm93c2VyLmFuZHJvaWR8fChlLm9ubG9hZD1udWxsLGUuc3JjPW8uVXRpbC5lbXB0eUltYWdlVXJsKSxkZWxldGUgdGhpcy5fdGlsZXNbdF19LF9hZGRUaWxlOmZ1bmN0aW9uKHQsZSl7dmFyIGk9dGhpcy5fZ2V0VGlsZVBvcyh0KSxuPXRoaXMuX2dldFRpbGUoKTtvLkRvbVV0aWwuc2V0UG9zaXRpb24obixpLG8uQnJvd3Nlci5jaHJvbWUpLHRoaXMuX3RpbGVzW3QueCsiOiIrdC55XT1uLHRoaXMuX2xvYWRUaWxlKG4sdCksbi5wYXJlbnROb2RlIT09dGhpcy5fdGlsZUNvbnRhaW5lciYmZS5hcHBlbmRDaGlsZChuKX0sX2dldFpvb21Gb3JVcmw6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLm9wdGlvbnMsZT10aGlzLl9tYXAuZ2V0Wm9vbSgpO3JldHVybiB0Lnpvb21SZXZlcnNlJiYoZT10Lm1heFpvb20tZSksZSs9dC56b29tT2Zmc2V0LHQubWF4TmF0aXZlWm9vbT9NYXRoLm1pbihlLHQubWF4TmF0aXZlWm9vbSk6ZX0sX2dldFRpbGVQb3M6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fbWFwLmdldFBpeGVsT3JpZ2luKCksaT10aGlzLl9nZXRUaWxlU2l6ZSgpO3JldHVybiB0Lm11bHRpcGx5QnkoaSkuc3VidHJhY3QoZSl9LGdldFRpbGVVcmw6ZnVuY3Rpb24odCl7cmV0dXJuIG8uVXRpbC50ZW1wbGF0ZSh0aGlzLl91cmwsby5leHRlbmQoe3M6dGhpcy5fZ2V0U3ViZG9tYWluKHQpLHo6dC56LHg6dC54LHk6dC55fSx0aGlzLm9wdGlvbnMpKX0sX2dldFdyYXBUaWxlTnVtOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fbWFwLm9wdGlvbnMuY3JzLGU9dC5nZXRTaXplKHRoaXMuX21hcC5nZXRab29tKCkpO3JldHVybiBlLmRpdmlkZUJ5KHRoaXMuX2dldFRpbGVTaXplKCkpLl9mbG9vcigpfSxfYWRqdXN0VGlsZVBvaW50OmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX2dldFdyYXBUaWxlTnVtKCk7dGhpcy5vcHRpb25zLmNvbnRpbnVvdXNXb3JsZHx8dGhpcy5vcHRpb25zLm5vV3JhcHx8KHQueD0odC54JWUueCtlLngpJWUueCksdGhpcy5vcHRpb25zLnRtcyYmKHQueT1lLnktdC55LTEpLHQuej10aGlzLl9nZXRab29tRm9yVXJsKCl9LF9nZXRTdWJkb21haW46ZnVuY3Rpb24odCl7dmFyIGU9TWF0aC5hYnModC54K3QueSkldGhpcy5vcHRpb25zLnN1YmRvbWFpbnMubGVuZ3RoO3JldHVybiB0aGlzLm9wdGlvbnMuc3ViZG9tYWluc1tlXX0sX2dldFRpbGU6ZnVuY3Rpb24oKXtpZih0aGlzLm9wdGlvbnMucmV1c2VUaWxlcyYmdGhpcy5fdW51c2VkVGlsZXMubGVuZ3RoPjApe3ZhciB0PXRoaXMuX3VudXNlZFRpbGVzLnBvcCgpO3JldHVybiB0aGlzLl9yZXNldFRpbGUodCksdH1yZXR1cm4gdGhpcy5fY3JlYXRlVGlsZSgpfSxfcmVzZXRUaWxlOmZ1bmN0aW9uKCl7fSxfY3JlYXRlVGlsZTpmdW5jdGlvbigpe3ZhciB0PW8uRG9tVXRpbC5jcmVhdGUoImltZyIsImxlYWZsZXQtdGlsZSIpO3JldHVybiB0LnN0eWxlLndpZHRoPXQuc3R5bGUuaGVpZ2h0PXRoaXMuX2dldFRpbGVTaXplKCkrInB4Iix0LmdhbGxlcnlpbWc9Im5vIix0Lm9uc2VsZWN0c3RhcnQ9dC5vbm1vdXNlbW92ZT1vLlV0aWwuZmFsc2VGbixvLkJyb3dzZXIuaWVsdDkmJnRoaXMub3B0aW9ucy5vcGFjaXR5IT09aSYmby5Eb21VdGlsLnNldE9wYWNpdHkodCx0aGlzLm9wdGlvbnMub3BhY2l0eSksby5Ccm93c2VyLm1vYmlsZVdlYmtpdDNkJiYodC5zdHlsZS5XZWJraXRCYWNrZmFjZVZpc2liaWxpdHk9ImhpZGRlbiIpLHR9LF9sb2FkVGlsZTpmdW5jdGlvbih0LGUpe3QuX2xheWVyPXRoaXMsdC5vbmxvYWQ9dGhpcy5fdGlsZU9uTG9hZCx0Lm9uZXJyb3I9dGhpcy5fdGlsZU9uRXJyb3IsdGhpcy5fYWRqdXN0VGlsZVBvaW50KGUpLHQuc3JjPXRoaXMuZ2V0VGlsZVVybChlKSx0aGlzLmZpcmUoInRpbGVsb2Fkc3RhcnQiLHt0aWxlOnQsdXJsOnQuc3JjfSl9LF90aWxlTG9hZGVkOmZ1bmN0aW9uKCl7dGhpcy5fdGlsZXNUb0xvYWQtLSx0aGlzLl9hbmltYXRlZCYmby5Eb21VdGlsLmFkZENsYXNzKHRoaXMuX3RpbGVDb250YWluZXIsImxlYWZsZXQtem9vbS1hbmltYXRlZCIpLHRoaXMuX3RpbGVzVG9Mb2FkfHwodGhpcy5maXJlKCJsb2FkIiksdGhpcy5fYW5pbWF0ZWQmJihjbGVhclRpbWVvdXQodGhpcy5fY2xlYXJCZ0J1ZmZlclRpbWVyKSx0aGlzLl9jbGVhckJnQnVmZmVyVGltZXI9c2V0VGltZW91dChvLmJpbmQodGhpcy5fY2xlYXJCZ0J1ZmZlcix0aGlzKSw1MDApKSl9LF90aWxlT25Mb2FkOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fbGF5ZXI7dGhpcy5zcmMhPT1vLlV0aWwuZW1wdHlJbWFnZVVybCYmKG8uRG9tVXRpbC5hZGRDbGFzcyh0aGlzLCJsZWFmbGV0LXRpbGUtbG9hZGVkIiksdC5maXJlKCJ0aWxlbG9hZCIse3RpbGU6dGhpcyx1cmw6dGhpcy5zcmN9KSksdC5fdGlsZUxvYWRlZCgpfSxfdGlsZU9uRXJyb3I6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9sYXllcjt0LmZpcmUoInRpbGVlcnJvciIse3RpbGU6dGhpcyx1cmw6dGhpcy5zcmN9KTt2YXIgZT10Lm9wdGlvbnMuZXJyb3JUaWxlVXJsO2UmJih0aGlzLnNyYz1lKSx0Ll90aWxlTG9hZGVkKCl9fSksby50aWxlTGF5ZXI9ZnVuY3Rpb24odCxlKXtyZXR1cm4gbmV3IG8uVGlsZUxheWVyKHQsZSl9LG8uVGlsZUxheWVyLldNUz1vLlRpbGVMYXllci5leHRlbmQoe2RlZmF1bHRXbXNQYXJhbXM6e3NlcnZpY2U6IldNUyIscmVxdWVzdDoiR2V0TWFwIix2ZXJzaW9uOiIxLjEuMSIsbGF5ZXJzOiIiLHN0eWxlczoiIixmb3JtYXQ6ImltYWdlL2pwZWciLHRyYW5zcGFyZW50OiExfSxpbml0aWFsaXplOmZ1bmN0aW9uKHQsZSl7dGhpcy5fdXJsPXQ7dmFyIGk9by5leHRlbmQoe30sdGhpcy5kZWZhdWx0V21zUGFyYW1zKSxuPWUudGlsZVNpemV8fHRoaXMub3B0aW9ucy50aWxlU2l6ZTtpLndpZHRoPWkuaGVpZ2h0PWUuZGV0ZWN0UmV0aW5hJiZvLkJyb3dzZXIucmV0aW5hPzIqbjpuO2Zvcih2YXIgcyBpbiBlKXRoaXMub3B0aW9ucy5oYXNPd25Qcm9wZXJ0eShzKXx8ImNycyI9PT1zfHwoaVtzXT1lW3NdKTt0aGlzLndtc1BhcmFtcz1pLG8uc2V0T3B0aW9ucyh0aGlzLGUpfSxvbkFkZDpmdW5jdGlvbih0KXt0aGlzLl9jcnM9dGhpcy5vcHRpb25zLmNyc3x8dC5vcHRpb25zLmNycyx0aGlzLl93bXNWZXJzaW9uPXBhcnNlRmxvYXQodGhpcy53bXNQYXJhbXMudmVyc2lvbik7dmFyIGU9dGhpcy5fd21zVmVyc2lvbj49MS4zPyJjcnMiOiJzcnMiO3RoaXMud21zUGFyYW1zW2VdPXRoaXMuX2Nycy5jb2RlLG8uVGlsZUxheWVyLnByb3RvdHlwZS5vbkFkZC5jYWxsKHRoaXMsdCl9LGdldFRpbGVVcmw6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fbWFwLGk9dGhpcy5vcHRpb25zLnRpbGVTaXplLG49dC5tdWx0aXBseUJ5KGkpLHM9bi5hZGQoW2ksaV0pLGE9dGhpcy5fY3JzLnByb2plY3QoZS51bnByb2plY3Qobix0LnopKSxyPXRoaXMuX2Nycy5wcm9qZWN0KGUudW5wcm9qZWN0KHMsdC56KSksaD10aGlzLl93bXNWZXJzaW9uPj0xLjMmJnRoaXMuX2Nycz09PW8uQ1JTLkVQU0c0MzI2P1tyLnksYS54LGEueSxyLnhdLmpvaW4oIiwiKTpbYS54LHIueSxyLngsYS55XS5qb2luKCIsIiksbD1vLlV0aWwudGVtcGxhdGUodGhpcy5fdXJsLHtzOnRoaXMuX2dldFN1YmRvbWFpbih0KX0pO3JldHVybiBsK28uVXRpbC5nZXRQYXJhbVN0cmluZyh0aGlzLndtc1BhcmFtcyxsLCEwKSsiJkJCT1g9IitofSxzZXRQYXJhbXM6ZnVuY3Rpb24odCxlKXtyZXR1cm4gby5leHRlbmQodGhpcy53bXNQYXJhbXMsdCksZXx8dGhpcy5yZWRyYXcoKSx0aGlzfX0pLG8udGlsZUxheWVyLndtcz1mdW5jdGlvbih0LGUpe3JldHVybiBuZXcgby5UaWxlTGF5ZXIuV01TKHQsZSl9LG8uVGlsZUxheWVyLkNhbnZhcz1vLlRpbGVMYXllci5leHRlbmQoe29wdGlvbnM6e2FzeW5jOiExfSxpbml0aWFsaXplOmZ1bmN0aW9uKHQpe28uc2V0T3B0aW9ucyh0aGlzLHQpfSxyZWRyYXc6ZnVuY3Rpb24oKXt0aGlzLl9tYXAmJih0aGlzLl9yZXNldCh7aGFyZDohMH0pLHRoaXMuX3VwZGF0ZSgpKTtmb3IodmFyIHQgaW4gdGhpcy5fdGlsZXMpdGhpcy5fcmVkcmF3VGlsZSh0aGlzLl90aWxlc1t0XSk7cmV0dXJuIHRoaXN9LF9yZWRyYXdUaWxlOmZ1bmN0aW9uKHQpe3RoaXMuZHJhd1RpbGUodCx0Ll90aWxlUG9pbnQsdGhpcy5fbWFwLl96b29tKX0sX2NyZWF0ZVRpbGU6ZnVuY3Rpb24oKXt2YXIgdD1vLkRvbVV0aWwuY3JlYXRlKCJjYW52YXMiLCJsZWFmbGV0LXRpbGUiKTtyZXR1cm4gdC53aWR0aD10LmhlaWdodD10aGlzLm9wdGlvbnMudGlsZVNpemUsdC5vbnNlbGVjdHN0YXJ0PXQub25tb3VzZW1vdmU9by5VdGlsLmZhbHNlRm4sdH0sX2xvYWRUaWxlOmZ1bmN0aW9uKHQsZSl7dC5fbGF5ZXI9dGhpcyx0Ll90aWxlUG9pbnQ9ZSx0aGlzLl9yZWRyYXdUaWxlKHQpLHRoaXMub3B0aW9ucy5hc3luY3x8dGhpcy50aWxlRHJhd24odCl9LGRyYXdUaWxlOmZ1bmN0aW9uKCl7fSx0aWxlRHJhd246ZnVuY3Rpb24odCl7dGhpcy5fdGlsZU9uTG9hZC5jYWxsKHQpfX0pLG8udGlsZUxheWVyLmNhbnZhcz1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IG8uVGlsZUxheWVyLkNhbnZhcyh0KX0sby5JbWFnZU92ZXJsYXk9by5DbGFzcy5leHRlbmQoe2luY2x1ZGVzOm8uTWl4aW4uRXZlbnRzLG9wdGlvbnM6e29wYWNpdHk6MX0saW5pdGlhbGl6ZTpmdW5jdGlvbih0LGUsaSl7dGhpcy5fdXJsPXQsdGhpcy5fYm91bmRzPW8ubGF0TG5nQm91bmRzKGUpLG8uc2V0T3B0aW9ucyh0aGlzLGkpfSxvbkFkZDpmdW5jdGlvbih0KXt0aGlzLl9tYXA9dCx0aGlzLl9pbWFnZXx8dGhpcy5faW5pdEltYWdlKCksdC5fcGFuZXMub3ZlcmxheVBhbmUuYXBwZW5kQ2hpbGQodGhpcy5faW1hZ2UpLHQub24oInZpZXdyZXNldCIsdGhpcy5fcmVzZXQsdGhpcyksdC5vcHRpb25zLnpvb21BbmltYXRpb24mJm8uQnJvd3Nlci5hbnkzZCYmdC5vbigiem9vbWFuaW0iLHRoaXMuX2FuaW1hdGVab29tLHRoaXMpLHRoaXMuX3Jlc2V0KCl9LG9uUmVtb3ZlOmZ1bmN0aW9uKHQpe3QuZ2V0UGFuZXMoKS5vdmVybGF5UGFuZS5yZW1vdmVDaGlsZCh0aGlzLl9pbWFnZSksdC5vZmYoInZpZXdyZXNldCIsdGhpcy5fcmVzZXQsdGhpcyksdC5vcHRpb25zLnpvb21BbmltYXRpb24mJnQub2ZmKCJ6b29tYW5pbSIsdGhpcy5fYW5pbWF0ZVpvb20sdGhpcyl9LGFkZFRvOmZ1bmN0aW9uKHQpe3JldHVybiB0LmFkZExheWVyKHRoaXMpLHRoaXN9LHNldE9wYWNpdHk6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMub3B0aW9ucy5vcGFjaXR5PXQsdGhpcy5fdXBkYXRlT3BhY2l0eSgpLHRoaXN9LGJyaW5nVG9Gcm9udDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9pbWFnZSYmdGhpcy5fbWFwLl9wYW5lcy5vdmVybGF5UGFuZS5hcHBlbmRDaGlsZCh0aGlzLl9pbWFnZSksdGhpc30sYnJpbmdUb0JhY2s6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9tYXAuX3BhbmVzLm92ZXJsYXlQYW5lO3JldHVybiB0aGlzLl9pbWFnZSYmdC5pbnNlcnRCZWZvcmUodGhpcy5faW1hZ2UsdC5maXJzdENoaWxkKSx0aGlzfSxzZXRVcmw6ZnVuY3Rpb24odCl7dGhpcy5fdXJsPXQsdGhpcy5faW1hZ2Uuc3JjPXRoaXMuX3VybH0sZ2V0QXR0cmlidXRpb246ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vcHRpb25zLmF0dHJpYnV0aW9ufSxfaW5pdEltYWdlOmZ1bmN0aW9uKCl7dGhpcy5faW1hZ2U9by5Eb21VdGlsLmNyZWF0ZSgiaW1nIiwibGVhZmxldC1pbWFnZS1sYXllciIpLHRoaXMuX21hcC5vcHRpb25zLnpvb21BbmltYXRpb24mJm8uQnJvd3Nlci5hbnkzZD9vLkRvbVV0aWwuYWRkQ2xhc3ModGhpcy5faW1hZ2UsImxlYWZsZXQtem9vbS1hbmltYXRlZCIpOm8uRG9tVXRpbC5hZGRDbGFzcyh0aGlzLl9pbWFnZSwibGVhZmxldC16b29tLWhpZGUiKSx0aGlzLl91cGRhdGVPcGFjaXR5KCksby5leHRlbmQodGhpcy5faW1hZ2Use2dhbGxlcnlpbWc6Im5vIixvbnNlbGVjdHN0YXJ0Om8uVXRpbC5mYWxzZUZuLG9ubW91c2Vtb3ZlOm8uVXRpbC5mYWxzZUZuLG9ubG9hZDpvLmJpbmQodGhpcy5fb25JbWFnZUxvYWQsdGhpcyksc3JjOnRoaXMuX3VybH0pfSxfYW5pbWF0ZVpvb206ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fbWFwLGk9dGhpcy5faW1hZ2Usbj1lLmdldFpvb21TY2FsZSh0Lnpvb20pLHM9dGhpcy5fYm91bmRzLmdldE5vcnRoV2VzdCgpLGE9dGhpcy5fYm91bmRzLmdldFNvdXRoRWFzdCgpLHI9ZS5fbGF0TG5nVG9OZXdMYXllclBvaW50KHMsdC56b29tLHQuY2VudGVyKSxoPWUuX2xhdExuZ1RvTmV3TGF5ZXJQb2ludChhLHQuem9vbSx0LmNlbnRlcikuX3N1YnRyYWN0KHIpLGw9ci5fYWRkKGguX211bHRpcGx5QnkoLjUqKDEtMS9uKSkpO2kuc3R5bGVbby5Eb21VdGlsLlRSQU5TRk9STV09by5Eb21VdGlsLmdldFRyYW5zbGF0ZVN0cmluZyhsKSsiIHNjYWxlKCIrbisiKSAifSxfcmVzZXQ6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9pbWFnZSxlPXRoaXMuX21hcC5sYXRMbmdUb0xheWVyUG9pbnQodGhpcy5fYm91bmRzLmdldE5vcnRoV2VzdCgpKSxpPXRoaXMuX21hcC5sYXRMbmdUb0xheWVyUG9pbnQodGhpcy5fYm91bmRzLmdldFNvdXRoRWFzdCgpKS5fc3VidHJhY3QoZSk7by5Eb21VdGlsLnNldFBvc2l0aW9uKHQsZSksdC5zdHlsZS53aWR0aD1pLngrInB4Iix0LnN0eWxlLmhlaWdodD1pLnkrInB4In0sX29uSW1hZ2VMb2FkOmZ1bmN0aW9uKCl7dGhpcy5maXJlKCJsb2FkIil9LF91cGRhdGVPcGFjaXR5OmZ1bmN0aW9uKCl7by5Eb21VdGlsLnNldE9wYWNpdHkodGhpcy5faW1hZ2UsdGhpcy5vcHRpb25zLm9wYWNpdHkpfX0pLG8uaW1hZ2VPdmVybGF5PWZ1bmN0aW9uKHQsZSxpKXtyZXR1cm4gbmV3IG8uSW1hZ2VPdmVybGF5KHQsZSxpKX0sby5JY29uPW8uQ2xhc3MuZXh0ZW5kKHtvcHRpb25zOntjbGFzc05hbWU6IiJ9LGluaXRpYWxpemU6ZnVuY3Rpb24odCl7by5zZXRPcHRpb25zKHRoaXMsdCl9LGNyZWF0ZUljb246ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX2NyZWF0ZUljb24oImljb24iLHQpfSxjcmVhdGVTaGFkb3c6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX2NyZWF0ZUljb24oInNoYWRvdyIsdCl9LF9jcmVhdGVJY29uOmZ1bmN0aW9uKHQsZSl7dmFyIGk9dGhpcy5fZ2V0SWNvblVybCh0KTtpZighaSl7aWYoImljb24iPT09dCl0aHJvdyBuZXcgRXJyb3IoImljb25Vcmwgbm90IHNldCBpbiBJY29uIG9wdGlvbnMgKHNlZSB0aGUgZG9jcykuIik7cmV0dXJuIG51bGx9dmFyIG47cmV0dXJuIG49ZSYmIklNRyI9PT1lLnRhZ05hbWU/dGhpcy5fY3JlYXRlSW1nKGksZSk6dGhpcy5fY3JlYXRlSW1nKGkpLHRoaXMuX3NldEljb25TdHlsZXMobix0KSxufSxfc2V0SWNvblN0eWxlczpmdW5jdGlvbih0LGUpe3ZhciBpLG49dGhpcy5vcHRpb25zLHM9by5wb2ludChuW2UrIlNpemUiXSk7aT1vLnBvaW50KCJzaGFkb3ciPT09ZT9uLnNoYWRvd0FuY2hvcnx8bi5pY29uQW5jaG9yOm4uaWNvbkFuY2hvciksIWkmJnMmJihpPXMuZGl2aWRlQnkoMiwhMCkpLHQuY2xhc3NOYW1lPSJsZWFmbGV0LW1hcmtlci0iK2UrIiAiK24uY2xhc3NOYW1lLGkmJih0LnN0eWxlLm1hcmdpbkxlZnQ9LWkueCsicHgiLHQuc3R5bGUubWFyZ2luVG9wPS1pLnkrInB4IikscyYmKHQuc3R5bGUud2lkdGg9cy54KyJweCIsdC5zdHlsZS5oZWlnaHQ9cy55KyJweCIpfSxfY3JlYXRlSW1nOmZ1bmN0aW9uKHQsaSl7cmV0dXJuIGk9aXx8ZS5jcmVhdGVFbGVtZW50KCJpbWciKSxpLnNyYz10LGl9LF9nZXRJY29uVXJsOmZ1bmN0aW9uKHQpe3JldHVybiBvLkJyb3dzZXIucmV0aW5hJiZ0aGlzLm9wdGlvbnNbdCsiUmV0aW5hVXJsIl0/dGhpcy5vcHRpb25zW3QrIlJldGluYVVybCJdOnRoaXMub3B0aW9uc1t0KyJVcmwiXX19KSxvLmljb249ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBvLkljb24odCl9LG8uSWNvbi5EZWZhdWx0PW8uSWNvbi5leHRlbmQoe29wdGlvbnM6e2ljb25TaXplOlsyNSw0MV0saWNvbkFuY2hvcjpbMTIsNDFdLHBvcHVwQW5jaG9yOlsxLC0zNF0sc2hhZG93U2l6ZTpbNDEsNDFdfSxfZ2V0SWNvblVybDpmdW5jdGlvbih0KXt2YXIgZT10KyJVcmwiO2lmKHRoaXMub3B0aW9uc1tlXSlyZXR1cm4gdGhpcy5vcHRpb25zW2VdO28uQnJvd3Nlci5yZXRpbmEmJiJpY29uIj09PXQmJih0Kz0iLTJ4Iik7dmFyIGk9by5JY29uLkRlZmF1bHQuaW1hZ2VQYXRoO2lmKCFpKXRocm93IG5ldyBFcnJvcigiQ291bGRuJ3QgYXV0b2RldGVjdCBMLkljb24uRGVmYXVsdC5pbWFnZVBhdGgsIHNldCBpdCBtYW51YWxseS4iKTtyZXR1cm4gaSsiL21hcmtlci0iK3QrIi5wbmcifX0pLG8uSWNvbi5EZWZhdWx0LmltYWdlUGF0aD1mdW5jdGlvbigpe3ZhciB0LGksbixvLHMsYT1lLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJzY3JpcHQiKSxyPS9bXC9eXWxlYWZsZXRbXC1cLl9dPyhbXHdcLVwuX10qKVwuanNcPz8vO2Zvcih0PTAsaT1hLmxlbmd0aDtpPnQ7dCsrKWlmKG49YVt0XS5zcmMsbz1uLm1hdGNoKHIpKXJldHVybiBzPW4uc3BsaXQocilbMF0sKHM/cysiLyI6IiIpKyJpbWFnZXMifSgpLG8uTWFya2VyPW8uQ2xhc3MuZXh0ZW5kKHtpbmNsdWRlczpvLk1peGluLkV2ZW50cyxvcHRpb25zOntpY29uOm5ldyBvLkljb24uRGVmYXVsdCx0aXRsZToiIixhbHQ6IiIsY2xpY2thYmxlOiEwLGRyYWdnYWJsZTohMSxrZXlib2FyZDohMCx6SW5kZXhPZmZzZXQ6MCxvcGFjaXR5OjEscmlzZU9uSG92ZXI6ITEscmlzZU9mZnNldDoyNTB9LGluaXRpYWxpemU6ZnVuY3Rpb24odCxlKXtvLnNldE9wdGlvbnModGhpcyxlKSx0aGlzLl9sYXRsbmc9by5sYXRMbmcodCl9LG9uQWRkOmZ1bmN0aW9uKHQpe3RoaXMuX21hcD10LHQub24oInZpZXdyZXNldCIsdGhpcy51cGRhdGUsdGhpcyksdGhpcy5faW5pdEljb24oKSx0aGlzLnVwZGF0ZSgpLHRoaXMuZmlyZSgiYWRkIiksdC5vcHRpb25zLnpvb21BbmltYXRpb24mJnQub3B0aW9ucy5tYXJrZXJab29tQW5pbWF0aW9uJiZ0Lm9uKCJ6b29tYW5pbSIsdGhpcy5fYW5pbWF0ZVpvb20sdGhpcyl9LGFkZFRvOmZ1bmN0aW9uKHQpe3JldHVybiB0LmFkZExheWVyKHRoaXMpLHRoaXN9LG9uUmVtb3ZlOmZ1bmN0aW9uKHQpe3RoaXMuZHJhZ2dpbmcmJnRoaXMuZHJhZ2dpbmcuZGlzYWJsZSgpLHRoaXMuX3JlbW92ZUljb24oKSx0aGlzLl9yZW1vdmVTaGFkb3coKSx0aGlzLmZpcmUoInJlbW92ZSIpLHQub2ZmKHt2aWV3cmVzZXQ6dGhpcy51cGRhdGUsem9vbWFuaW06dGhpcy5fYW5pbWF0ZVpvb219LHRoaXMpLHRoaXMuX21hcD1udWxsfSxnZXRMYXRMbmc6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbGF0bG5nfSxzZXRMYXRMbmc6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX2xhdGxuZz1vLmxhdExuZyh0KSx0aGlzLnVwZGF0ZSgpLHRoaXMuZmlyZSgibW92ZSIse2xhdGxuZzp0aGlzLl9sYXRsbmd9KX0sc2V0WkluZGV4T2Zmc2V0OmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLm9wdGlvbnMuekluZGV4T2Zmc2V0PXQsdGhpcy51cGRhdGUoKSx0aGlzfSxzZXRJY29uOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLm9wdGlvbnMuaWNvbj10LHRoaXMuX21hcCYmKHRoaXMuX2luaXRJY29uKCksdGhpcy51cGRhdGUoKSksdGhpcy5fcG9wdXAmJnRoaXMuYmluZFBvcHVwKHRoaXMuX3BvcHVwKSx0aGlzfSx1cGRhdGU6ZnVuY3Rpb24oKXtpZih0aGlzLl9pY29uKXt2YXIgdD10aGlzLl9tYXAubGF0TG5nVG9MYXllclBvaW50KHRoaXMuX2xhdGxuZykucm91bmQoKTt0aGlzLl9zZXRQb3ModCl9cmV0dXJuIHRoaXN9LF9pbml0SWNvbjpmdW5jdGlvbigpe3ZhciB0PXRoaXMub3B0aW9ucyxlPXRoaXMuX21hcCxpPWUub3B0aW9ucy56b29tQW5pbWF0aW9uJiZlLm9wdGlvbnMubWFya2VyWm9vbUFuaW1hdGlvbixuPWk/ImxlYWZsZXQtem9vbS1hbmltYXRlZCI6ImxlYWZsZXQtem9vbS1oaWRlIixzPXQuaWNvbi5jcmVhdGVJY29uKHRoaXMuX2ljb24pLGE9ITE7cyE9PXRoaXMuX2ljb24mJih0aGlzLl9pY29uJiZ0aGlzLl9yZW1vdmVJY29uKCksYT0hMCx0LnRpdGxlJiYocy50aXRsZT10LnRpdGxlKSx0LmFsdCYmKHMuYWx0PXQuYWx0KSksby5Eb21VdGlsLmFkZENsYXNzKHMsbiksdC5rZXlib2FyZCYmKHMudGFiSW5kZXg9IjAiKSx0aGlzLl9pY29uPXMsdGhpcy5faW5pdEludGVyYWN0aW9uKCksdC5yaXNlT25Ib3ZlciYmby5Eb21FdmVudC5vbihzLCJtb3VzZW92ZXIiLHRoaXMuX2JyaW5nVG9Gcm9udCx0aGlzKS5vbihzLCJtb3VzZW91dCIsdGhpcy5fcmVzZXRaSW5kZXgsdGhpcyk7dmFyIHI9dC5pY29uLmNyZWF0ZVNoYWRvdyh0aGlzLl9zaGFkb3cpLGg9ITE7ciE9PXRoaXMuX3NoYWRvdyYmKHRoaXMuX3JlbW92ZVNoYWRvdygpLGg9ITApLHImJm8uRG9tVXRpbC5hZGRDbGFzcyhyLG4pLHRoaXMuX3NoYWRvdz1yLHQub3BhY2l0eTwxJiZ0aGlzLl91cGRhdGVPcGFjaXR5KCk7dmFyIGw9dGhpcy5fbWFwLl9wYW5lczthJiZsLm1hcmtlclBhbmUuYXBwZW5kQ2hpbGQodGhpcy5faWNvbiksciYmaCYmbC5zaGFkb3dQYW5lLmFwcGVuZENoaWxkKHRoaXMuX3NoYWRvdyl9LF9yZW1vdmVJY29uOmZ1bmN0aW9uKCl7dGhpcy5vcHRpb25zLnJpc2VPbkhvdmVyJiZvLkRvbUV2ZW50Lm9mZih0aGlzLl9pY29uLCJtb3VzZW92ZXIiLHRoaXMuX2JyaW5nVG9Gcm9udCkub2ZmKHRoaXMuX2ljb24sIm1vdXNlb3V0Iix0aGlzLl9yZXNldFpJbmRleCksdGhpcy5fbWFwLl9wYW5lcy5tYXJrZXJQYW5lLnJlbW92ZUNoaWxkKHRoaXMuX2ljb24pLHRoaXMuX2ljb249bnVsbH0sX3JlbW92ZVNoYWRvdzpmdW5jdGlvbigpe3RoaXMuX3NoYWRvdyYmdGhpcy5fbWFwLl9wYW5lcy5zaGFkb3dQYW5lLnJlbW92ZUNoaWxkKHRoaXMuX3NoYWRvdyksdGhpcy5fc2hhZG93PW51bGx9LF9zZXRQb3M6ZnVuY3Rpb24odCl7by5Eb21VdGlsLnNldFBvc2l0aW9uKHRoaXMuX2ljb24sdCksdGhpcy5fc2hhZG93JiZvLkRvbVV0aWwuc2V0UG9zaXRpb24odGhpcy5fc2hhZG93LHQpLHRoaXMuX3pJbmRleD10LnkrdGhpcy5vcHRpb25zLnpJbmRleE9mZnNldCx0aGlzLl9yZXNldFpJbmRleCgpfSxfdXBkYXRlWkluZGV4OmZ1bmN0aW9uKHQpe3RoaXMuX2ljb24uc3R5bGUuekluZGV4PXRoaXMuX3pJbmRleCt0fSxfYW5pbWF0ZVpvb206ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fbWFwLl9sYXRMbmdUb05ld0xheWVyUG9pbnQodGhpcy5fbGF0bG5nLHQuem9vbSx0LmNlbnRlcikucm91bmQoKTt0aGlzLl9zZXRQb3MoZSl9LF9pbml0SW50ZXJhY3Rpb246ZnVuY3Rpb24oKXtpZih0aGlzLm9wdGlvbnMuY2xpY2thYmxlKXt2YXIgdD10aGlzLl9pY29uLGU9WyJkYmxjbGljayIsIm1vdXNlZG93biIsIm1vdXNlb3ZlciIsIm1vdXNlb3V0IiwiY29udGV4dG1lbnUiXTtvLkRvbVV0aWwuYWRkQ2xhc3ModCwibGVhZmxldC1jbGlja2FibGUiKSxvLkRvbUV2ZW50Lm9uKHQsImNsaWNrIix0aGlzLl9vbk1vdXNlQ2xpY2ssdGhpcyksby5Eb21FdmVudC5vbih0LCJrZXlwcmVzcyIsdGhpcy5fb25LZXlQcmVzcyx0aGlzKTtmb3IodmFyIGk9MDtpPGUubGVuZ3RoO2krKylvLkRvbUV2ZW50Lm9uKHQsZVtpXSx0aGlzLl9maXJlTW91c2VFdmVudCx0aGlzKTtvLkhhbmRsZXIuTWFya2VyRHJhZyYmKHRoaXMuZHJhZ2dpbmc9bmV3IG8uSGFuZGxlci5NYXJrZXJEcmFnKHRoaXMpLHRoaXMub3B0aW9ucy5kcmFnZ2FibGUmJnRoaXMuZHJhZ2dpbmcuZW5hYmxlKCkpfX0sX29uTW91c2VDbGljazpmdW5jdGlvbih0KXt2YXIgZT10aGlzLmRyYWdnaW5nJiZ0aGlzLmRyYWdnaW5nLm1vdmVkKCk7KHRoaXMuaGFzRXZlbnRMaXN0ZW5lcnModC50eXBlKXx8ZSkmJm8uRG9tRXZlbnQuc3RvcFByb3BhZ2F0aW9uKHQpLGV8fCh0aGlzLmRyYWdnaW5nJiZ0aGlzLmRyYWdnaW5nLl9lbmFibGVkfHwhdGhpcy5fbWFwLmRyYWdnaW5nfHwhdGhpcy5fbWFwLmRyYWdnaW5nLm1vdmVkKCkpJiZ0aGlzLmZpcmUodC50eXBlLHtvcmlnaW5hbEV2ZW50OnQsbGF0bG5nOnRoaXMuX2xhdGxuZ30pfSxfb25LZXlQcmVzczpmdW5jdGlvbih0KXsxMz09PXQua2V5Q29kZSYmdGhpcy5maXJlKCJjbGljayIse29yaWdpbmFsRXZlbnQ6dCxsYXRsbmc6dGhpcy5fbGF0bG5nfSl9LF9maXJlTW91c2VFdmVudDpmdW5jdGlvbih0KXt0aGlzLmZpcmUodC50eXBlLHtvcmlnaW5hbEV2ZW50OnQsbGF0bG5nOnRoaXMuX2xhdGxuZ30pLCJjb250ZXh0bWVudSI9PT10LnR5cGUmJnRoaXMuaGFzRXZlbnRMaXN0ZW5lcnModC50eXBlKSYmby5Eb21FdmVudC5wcmV2ZW50RGVmYXVsdCh0KSwibW91c2Vkb3duIiE9PXQudHlwZT9vLkRvbUV2ZW50LnN0b3BQcm9wYWdhdGlvbih0KTpvLkRvbUV2ZW50LnByZXZlbnREZWZhdWx0KHQpfSxzZXRPcGFjaXR5OmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLm9wdGlvbnMub3BhY2l0eT10LHRoaXMuX21hcCYmdGhpcy5fdXBkYXRlT3BhY2l0eSgpLHRoaXN9LF91cGRhdGVPcGFjaXR5OmZ1bmN0aW9uKCl7by5Eb21VdGlsLnNldE9wYWNpdHkodGhpcy5faWNvbix0aGlzLm9wdGlvbnMub3BhY2l0eSksdGhpcy5fc2hhZG93JiZvLkRvbVV0aWwuc2V0T3BhY2l0eSh0aGlzLl9zaGFkb3csdGhpcy5vcHRpb25zLm9wYWNpdHkpfSxfYnJpbmdUb0Zyb250OmZ1bmN0aW9uKCl7dGhpcy5fdXBkYXRlWkluZGV4KHRoaXMub3B0aW9ucy5yaXNlT2Zmc2V0KX0sX3Jlc2V0WkluZGV4OmZ1bmN0aW9uKCl7dGhpcy5fdXBkYXRlWkluZGV4KDApfX0pLG8ubWFya2VyPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIG5ldyBvLk1hcmtlcih0LGUpfSxvLkRpdkljb249by5JY29uLmV4dGVuZCh7b3B0aW9uczp7aWNvblNpemU6WzEyLDEyXSxjbGFzc05hbWU6ImxlYWZsZXQtZGl2LWljb24iLGh0bWw6ITF9LGNyZWF0ZUljb246ZnVuY3Rpb24odCl7dmFyIGk9dCYmIkRJViI9PT10LnRhZ05hbWU/dDplLmNyZWF0ZUVsZW1lbnQoImRpdiIpLG49dGhpcy5vcHRpb25zO3JldHVybiBpLmlubmVySFRNTD1uLmh0bWwhPT0hMT9uLmh0bWw6IiIsbi5iZ1BvcyYmKGkuc3R5bGUuYmFja2dyb3VuZFBvc2l0aW9uPS1uLmJnUG9zLngrInB4ICIrLW4uYmdQb3MueSsicHgiKSx0aGlzLl9zZXRJY29uU3R5bGVzKGksImljb24iKSxpfSxjcmVhdGVTaGFkb3c6ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbH19KSxvLmRpdkljb249ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBvLkRpdkljb24odCl9LG8uTWFwLm1lcmdlT3B0aW9ucyh7Y2xvc2VQb3B1cE9uQ2xpY2s6ITB9KSxvLlBvcHVwPW8uQ2xhc3MuZXh0ZW5kKHtpbmNsdWRlczpvLk1peGluLkV2ZW50cyxvcHRpb25zOnttaW5XaWR0aDo1MCxtYXhXaWR0aDozMDAsYXV0b1BhbjohMCxjbG9zZUJ1dHRvbjohMCxvZmZzZXQ6WzAsN10sYXV0b1BhblBhZGRpbmc6WzUsNV0sa2VlcEluVmlldzohMSxjbGFzc05hbWU6IiIsem9vbUFuaW1hdGlvbjohMH0saW5pdGlhbGl6ZTpmdW5jdGlvbih0LGUpe28uc2V0T3B0aW9ucyh0aGlzLHQpLHRoaXMuX3NvdXJjZT1lLHRoaXMuX2FuaW1hdGVkPW8uQnJvd3Nlci5hbnkzZCYmdGhpcy5vcHRpb25zLnpvb21BbmltYXRpb24sdGhpcy5faXNPcGVuPSExfSxvbkFkZDpmdW5jdGlvbih0KXt0aGlzLl9tYXA9dCx0aGlzLl9jb250YWluZXJ8fHRoaXMuX2luaXRMYXlvdXQoKTt2YXIgZT10Lm9wdGlvbnMuZmFkZUFuaW1hdGlvbjtlJiZvLkRvbVV0aWwuc2V0T3BhY2l0eSh0aGlzLl9jb250YWluZXIsMCksdC5fcGFuZXMucG9wdXBQYW5lLmFwcGVuZENoaWxkKHRoaXMuX2NvbnRhaW5lciksdC5vbih0aGlzLl9nZXRFdmVudHMoKSx0aGlzKSx0aGlzLnVwZGF0ZSgpLGUmJm8uRG9tVXRpbC5zZXRPcGFjaXR5KHRoaXMuX2NvbnRhaW5lciwxKSx0aGlzLmZpcmUoIm9wZW4iKSx0LmZpcmUoInBvcHVwb3BlbiIse3BvcHVwOnRoaXN9KSx0aGlzLl9zb3VyY2UmJnRoaXMuX3NvdXJjZS5maXJlKCJwb3B1cG9wZW4iLHtwb3B1cDp0aGlzfSl9LGFkZFRvOmZ1bmN0aW9uKHQpe3JldHVybiB0LmFkZExheWVyKHRoaXMpLHRoaXN9LG9wZW5PbjpmdW5jdGlvbih0KXtyZXR1cm4gdC5vcGVuUG9wdXAodGhpcyksdGhpc30sb25SZW1vdmU6ZnVuY3Rpb24odCl7dC5fcGFuZXMucG9wdXBQYW5lLnJlbW92ZUNoaWxkKHRoaXMuX2NvbnRhaW5lciksby5VdGlsLmZhbHNlRm4odGhpcy5fY29udGFpbmVyLm9mZnNldFdpZHRoKSx0Lm9mZih0aGlzLl9nZXRFdmVudHMoKSx0aGlzKSx0Lm9wdGlvbnMuZmFkZUFuaW1hdGlvbiYmby5Eb21VdGlsLnNldE9wYWNpdHkodGhpcy5fY29udGFpbmVyLDApLHRoaXMuX21hcD1udWxsLHRoaXMuZmlyZSgiY2xvc2UiKSx0LmZpcmUoInBvcHVwY2xvc2UiLHtwb3B1cDp0aGlzfSksdGhpcy5fc291cmNlJiZ0aGlzLl9zb3VyY2UuZmlyZSgicG9wdXBjbG9zZSIse3BvcHVwOnRoaXN9KX0sZ2V0TGF0TG5nOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2xhdGxuZ30sc2V0TGF0TG5nOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9sYXRsbmc9by5sYXRMbmcodCksdGhpcy5fbWFwJiYodGhpcy5fdXBkYXRlUG9zaXRpb24oKSx0aGlzLl9hZGp1c3RQYW4oKSksdGhpc30sZ2V0Q29udGVudDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9jb250ZW50fSxzZXRDb250ZW50OmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9jb250ZW50PXQsdGhpcy51cGRhdGUoKSx0aGlzfSx1cGRhdGU6ZnVuY3Rpb24oKXt0aGlzLl9tYXAmJih0aGlzLl9jb250YWluZXIuc3R5bGUudmlzaWJpbGl0eT0iaGlkZGVuIix0aGlzLl91cGRhdGVDb250ZW50KCksdGhpcy5fdXBkYXRlTGF5b3V0KCksdGhpcy5fdXBkYXRlUG9zaXRpb24oKSx0aGlzLl9jb250YWluZXIuc3R5bGUudmlzaWJpbGl0eT0iIix0aGlzLl9hZGp1c3RQYW4oKSl9LF9nZXRFdmVudHM6ZnVuY3Rpb24oKXt2YXIgdD17dmlld3Jlc2V0OnRoaXMuX3VwZGF0ZVBvc2l0aW9ufTtyZXR1cm4gdGhpcy5fYW5pbWF0ZWQmJih0Lnpvb21hbmltPXRoaXMuX3pvb21BbmltYXRpb24pLCgiY2xvc2VPbkNsaWNrImluIHRoaXMub3B0aW9ucz90aGlzLm9wdGlvbnMuY2xvc2VPbkNsaWNrOnRoaXMuX21hcC5vcHRpb25zLmNsb3NlUG9wdXBPbkNsaWNrKSYmKHQucHJlY2xpY2s9dGhpcy5fY2xvc2UpLHRoaXMub3B0aW9ucy5rZWVwSW5WaWV3JiYodC5tb3ZlZW5kPXRoaXMuX2FkanVzdFBhbiksdH0sX2Nsb3NlOmZ1bmN0aW9uKCl7dGhpcy5fbWFwJiZ0aGlzLl9tYXAuY2xvc2VQb3B1cCh0aGlzKX0sX2luaXRMYXlvdXQ6ZnVuY3Rpb24oKXt2YXIgdCxlPSJsZWFmbGV0LXBvcHVwIixpPWUrIiAiK3RoaXMub3B0aW9ucy5jbGFzc05hbWUrIiBsZWFmbGV0LXpvb20tIisodGhpcy5fYW5pbWF0ZWQ/ImFuaW1hdGVkIjoiaGlkZSIpLG49dGhpcy5fY29udGFpbmVyPW8uRG9tVXRpbC5jcmVhdGUoImRpdiIsaSk7dGhpcy5vcHRpb25zLmNsb3NlQnV0dG9uJiYodD10aGlzLl9jbG9zZUJ1dHRvbj1vLkRvbVV0aWwuY3JlYXRlKCJhIixlKyItY2xvc2UtYnV0dG9uIixuKSx0LmhyZWY9IiNjbG9zZSIsdC5pbm5lckhUTUw9IiYjMjE1OyIsby5Eb21FdmVudC5kaXNhYmxlQ2xpY2tQcm9wYWdhdGlvbih0KSxvLkRvbUV2ZW50Lm9uKHQsImNsaWNrIix0aGlzLl9vbkNsb3NlQnV0dG9uQ2xpY2ssdGhpcykpO3ZhciBzPXRoaXMuX3dyYXBwZXI9by5Eb21VdGlsLmNyZWF0ZSgiZGl2IixlKyItY29udGVudC13cmFwcGVyIixuKTtvLkRvbUV2ZW50LmRpc2FibGVDbGlja1Byb3BhZ2F0aW9uKHMpLHRoaXMuX2NvbnRlbnROb2RlPW8uRG9tVXRpbC5jcmVhdGUoImRpdiIsZSsiLWNvbnRlbnQiLHMpLG8uRG9tRXZlbnQuZGlzYWJsZVNjcm9sbFByb3BhZ2F0aW9uKHRoaXMuX2NvbnRlbnROb2RlKSxvLkRvbUV2ZW50Lm9uKHMsImNvbnRleHRtZW51IixvLkRvbUV2ZW50LnN0b3BQcm9wYWdhdGlvbiksdGhpcy5fdGlwQ29udGFpbmVyPW8uRG9tVXRpbC5jcmVhdGUoImRpdiIsZSsiLXRpcC1jb250YWluZXIiLG4pLHRoaXMuX3RpcD1vLkRvbVV0aWwuY3JlYXRlKCJkaXYiLGUrIi10aXAiLHRoaXMuX3RpcENvbnRhaW5lcil9LF91cGRhdGVDb250ZW50OmZ1bmN0aW9uKCl7aWYodGhpcy5fY29udGVudCl7aWYoInN0cmluZyI9PXR5cGVvZiB0aGlzLl9jb250ZW50KXRoaXMuX2NvbnRlbnROb2RlLmlubmVySFRNTD10aGlzLl9jb250ZW50O2Vsc2V7Zm9yKDt0aGlzLl9jb250ZW50Tm9kZS5oYXNDaGlsZE5vZGVzKCk7KXRoaXMuX2NvbnRlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMuX2NvbnRlbnROb2RlLmZpcnN0Q2hpbGQpO3RoaXMuX2NvbnRlbnROb2RlLmFwcGVuZENoaWxkKHRoaXMuX2NvbnRlbnQpfXRoaXMuZmlyZSgiY29udGVudHVwZGF0ZSIpfX0sX3VwZGF0ZUxheW91dDpmdW5jdGlvbigpe3ZhciB0PXRoaXMuX2NvbnRlbnROb2RlLGU9dC5zdHlsZTtlLndpZHRoPSIiLGUud2hpdGVTcGFjZT0ibm93cmFwIjt2YXIgaT10Lm9mZnNldFdpZHRoO2k9TWF0aC5taW4oaSx0aGlzLm9wdGlvbnMubWF4V2lkdGgpLGk9TWF0aC5tYXgoaSx0aGlzLm9wdGlvbnMubWluV2lkdGgpLGUud2lkdGg9aSsxKyJweCIsZS53aGl0ZVNwYWNlPSIiLGUuaGVpZ2h0PSIiO3ZhciBuPXQub2Zmc2V0SGVpZ2h0LHM9dGhpcy5vcHRpb25zLm1heEhlaWdodCxhPSJsZWFmbGV0LXBvcHVwLXNjcm9sbGVkIjtzJiZuPnM/KGUuaGVpZ2h0PXMrInB4IixvLkRvbVV0aWwuYWRkQ2xhc3ModCxhKSk6by5Eb21VdGlsLnJlbW92ZUNsYXNzKHQsYSksdGhpcy5fY29udGFpbmVyV2lkdGg9dGhpcy5fY29udGFpbmVyLm9mZnNldFdpZHRofSxfdXBkYXRlUG9zaXRpb246ZnVuY3Rpb24oKXtpZih0aGlzLl9tYXApe3ZhciB0PXRoaXMuX21hcC5sYXRMbmdUb0xheWVyUG9pbnQodGhpcy5fbGF0bG5nKSxlPXRoaXMuX2FuaW1hdGVkLGk9by5wb2ludCh0aGlzLm9wdGlvbnMub2Zmc2V0KTtlJiZvLkRvbVV0aWwuc2V0UG9zaXRpb24odGhpcy5fY29udGFpbmVyLHQpLHRoaXMuX2NvbnRhaW5lckJvdHRvbT0taS55LShlPzA6dC55KSx0aGlzLl9jb250YWluZXJMZWZ0PS1NYXRoLnJvdW5kKHRoaXMuX2NvbnRhaW5lcldpZHRoLzIpK2kueCsoZT8wOnQueCksdGhpcy5fY29udGFpbmVyLnN0eWxlLmJvdHRvbT10aGlzLl9jb250YWluZXJCb3R0b20rInB4Iix0aGlzLl9jb250YWluZXIuc3R5bGUubGVmdD10aGlzLl9jb250YWluZXJMZWZ0KyJweCJ9fSxfem9vbUFuaW1hdGlvbjpmdW5jdGlvbih0KXt2YXIgZT10aGlzLl9tYXAuX2xhdExuZ1RvTmV3TGF5ZXJQb2ludCh0aGlzLl9sYXRsbmcsdC56b29tLHQuY2VudGVyKTtvLkRvbVV0aWwuc2V0UG9zaXRpb24odGhpcy5fY29udGFpbmVyLGUpfSxfYWRqdXN0UGFuOmZ1bmN0aW9uKCl7aWYodGhpcy5vcHRpb25zLmF1dG9QYW4pe3ZhciB0PXRoaXMuX21hcCxlPXRoaXMuX2NvbnRhaW5lci5vZmZzZXRIZWlnaHQsaT10aGlzLl9jb250YWluZXJXaWR0aCxuPW5ldyBvLlBvaW50KHRoaXMuX2NvbnRhaW5lckxlZnQsLWUtdGhpcy5fY29udGFpbmVyQm90dG9tKTt0aGlzLl9hbmltYXRlZCYmbi5fYWRkKG8uRG9tVXRpbC5nZXRQb3NpdGlvbih0aGlzLl9jb250YWluZXIpKTt2YXIgcz10LmxheWVyUG9pbnRUb0NvbnRhaW5lclBvaW50KG4pLGE9by5wb2ludCh0aGlzLm9wdGlvbnMuYXV0b1BhblBhZGRpbmcpLHI9by5wb2ludCh0aGlzLm9wdGlvbnMuYXV0b1BhblBhZGRpbmdUb3BMZWZ0fHxhKSxoPW8ucG9pbnQodGhpcy5vcHRpb25zLmF1dG9QYW5QYWRkaW5nQm90dG9tUmlnaHR8fGEpLGw9dC5nZXRTaXplKCksdT0wLGM9MDtzLngraStoLng+bC54JiYodT1zLngraS1sLngraC54KSxzLngtdS1yLng8MCYmKHU9cy54LXIueCkscy55K2UraC55PmwueSYmKGM9cy55K2UtbC55K2gueSkscy55LWMtci55PDAmJihjPXMueS1yLnkpLCh1fHxjKSYmdC5maXJlKCJhdXRvcGFuc3RhcnQiKS5wYW5CeShbdSxjXSl9fSxfb25DbG9zZUJ1dHRvbkNsaWNrOmZ1bmN0aW9uKHQpe3RoaXMuX2Nsb3NlKCksby5Eb21FdmVudC5zdG9wKHQpfX0pLG8ucG9wdXA9ZnVuY3Rpb24odCxlKXtyZXR1cm4gbmV3IG8uUG9wdXAodCxlKX0sby5NYXAuaW5jbHVkZSh7b3BlblBvcHVwOmZ1bmN0aW9uKHQsZSxpKXtpZih0aGlzLmNsb3NlUG9wdXAoKSwhKHQgaW5zdGFuY2VvZiBvLlBvcHVwKSl7dmFyIG49dDt0PW5ldyBvLlBvcHVwKGkpLnNldExhdExuZyhlKS5zZXRDb250ZW50KG4pfXJldHVybiB0Ll9pc09wZW49ITAsdGhpcy5fcG9wdXA9dCx0aGlzLmFkZExheWVyKHQpfSxjbG9zZVBvcHVwOmZ1bmN0aW9uKHQpe3JldHVybiB0JiZ0IT09dGhpcy5fcG9wdXB8fCh0PXRoaXMuX3BvcHVwLHRoaXMuX3BvcHVwPW51bGwpLHQmJih0aGlzLnJlbW92ZUxheWVyKHQpLHQuX2lzT3Blbj0hMSksdGhpc319KSxvLk1hcmtlci5pbmNsdWRlKHtvcGVuUG9wdXA6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcG9wdXAmJnRoaXMuX21hcCYmIXRoaXMuX21hcC5oYXNMYXllcih0aGlzLl9wb3B1cCkmJih0aGlzLl9wb3B1cC5zZXRMYXRMbmcodGhpcy5fbGF0bG5nKSx0aGlzLl9tYXAub3BlblBvcHVwKHRoaXMuX3BvcHVwKSksdGhpc30sY2xvc2VQb3B1cDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9wb3B1cCYmdGhpcy5fcG9wdXAuX2Nsb3NlKCksdGhpc30sdG9nZ2xlUG9wdXA6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcG9wdXAmJih0aGlzLl9wb3B1cC5faXNPcGVuP3RoaXMuY2xvc2VQb3B1cCgpOnRoaXMub3BlblBvcHVwKCkpLHRoaXN9LGJpbmRQb3B1cDpmdW5jdGlvbih0LGUpe3ZhciBpPW8ucG9pbnQodGhpcy5vcHRpb25zLmljb24ub3B0aW9ucy5wb3B1cEFuY2hvcnx8WzAsMF0pO3JldHVybiBpPWkuYWRkKG8uUG9wdXAucHJvdG90eXBlLm9wdGlvbnMub2Zmc2V0KSxlJiZlLm9mZnNldCYmKGk9aS5hZGQoZS5vZmZzZXQpKSxlPW8uZXh0ZW5kKHtvZmZzZXQ6aX0sZSksdGhpcy5fcG9wdXBIYW5kbGVyc0FkZGVkfHwodGhpcy5vbigiY2xpY2siLHRoaXMudG9nZ2xlUG9wdXAsdGhpcykub24oInJlbW92ZSIsdGhpcy5jbG9zZVBvcHVwLHRoaXMpLm9uKCJtb3ZlIix0aGlzLl9tb3ZlUG9wdXAsdGhpcyksdGhpcy5fcG9wdXBIYW5kbGVyc0FkZGVkPSEwKSx0IGluc3RhbmNlb2Ygby5Qb3B1cD8oby5zZXRPcHRpb25zKHQsZSksdGhpcy5fcG9wdXA9dCk6dGhpcy5fcG9wdXA9bmV3IG8uUG9wdXAoZSx0aGlzKS5zZXRDb250ZW50KHQpLHRoaXN9LHNldFBvcHVwQ29udGVudDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fcG9wdXAmJnRoaXMuX3BvcHVwLnNldENvbnRlbnQodCksdGhpc30sdW5iaW5kUG9wdXA6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcG9wdXAmJih0aGlzLl9wb3B1cD1udWxsLHRoaXMub2ZmKCJjbGljayIsdGhpcy50b2dnbGVQb3B1cCx0aGlzKS5vZmYoInJlbW92ZSIsdGhpcy5jbG9zZVBvcHVwLHRoaXMpLm9mZigibW92ZSIsdGhpcy5fbW92ZVBvcHVwLHRoaXMpLHRoaXMuX3BvcHVwSGFuZGxlcnNBZGRlZD0hMSksdGhpc30sZ2V0UG9wdXA6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcG9wdXB9LF9tb3ZlUG9wdXA6ZnVuY3Rpb24odCl7dGhpcy5fcG9wdXAuc2V0TGF0TG5nKHQubGF0bG5nKX19KSxvLkxheWVyR3JvdXA9by5DbGFzcy5leHRlbmQoe2luaXRpYWxpemU6ZnVuY3Rpb24odCl7dGhpcy5fbGF5ZXJzPXt9O3ZhciBlLGk7aWYodClmb3IoZT0wLGk9dC5sZW5ndGg7aT5lO2UrKyl0aGlzLmFkZExheWVyKHRbZV0pfSxhZGRMYXllcjpmdW5jdGlvbih0KXt2YXIgZT10aGlzLmdldExheWVySWQodCk7cmV0dXJuIHRoaXMuX2xheWVyc1tlXT10LHRoaXMuX21hcCYmdGhpcy5fbWFwLmFkZExheWVyKHQpLHRoaXN9LHJlbW92ZUxheWVyOmZ1bmN0aW9uKHQpe3ZhciBlPXQgaW4gdGhpcy5fbGF5ZXJzP3Q6dGhpcy5nZXRMYXllcklkKHQpO3JldHVybiB0aGlzLl9tYXAmJnRoaXMuX2xheWVyc1tlXSYmdGhpcy5fbWFwLnJlbW92ZUxheWVyKHRoaXMuX2xheWVyc1tlXSksZGVsZXRlIHRoaXMuX2xheWVyc1tlXSx0aGlzfSxoYXNMYXllcjpmdW5jdGlvbih0KXtyZXR1cm4gdD90IGluIHRoaXMuX2xheWVyc3x8dGhpcy5nZXRMYXllcklkKHQpaW4gdGhpcy5fbGF5ZXJzOiExfSxjbGVhckxheWVyczpmdW5jdGlvbigpe3JldHVybiB0aGlzLmVhY2hMYXllcih0aGlzLnJlbW92ZUxheWVyLHRoaXMpLHRoaXN9LGludm9rZTpmdW5jdGlvbih0KXt2YXIgZSxpLG49QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLDEpO2ZvcihlIGluIHRoaXMuX2xheWVycylpPXRoaXMuX2xheWVyc1tlXSxpW3RdJiZpW3RdLmFwcGx5KGksbik7cmV0dXJuIHRoaXN9LG9uQWRkOmZ1bmN0aW9uKHQpe3RoaXMuX21hcD10LHRoaXMuZWFjaExheWVyKHQuYWRkTGF5ZXIsdCl9LG9uUmVtb3ZlOmZ1bmN0aW9uKHQpe3RoaXMuZWFjaExheWVyKHQucmVtb3ZlTGF5ZXIsdCksdGhpcy5fbWFwPW51bGx9LGFkZFRvOmZ1bmN0aW9uKHQpe3JldHVybiB0LmFkZExheWVyKHRoaXMpLHRoaXN9LGVhY2hMYXllcjpmdW5jdGlvbih0LGUpe2Zvcih2YXIgaSBpbiB0aGlzLl9sYXllcnMpdC5jYWxsKGUsdGhpcy5fbGF5ZXJzW2ldKTtyZXR1cm4gdGhpc30sZ2V0TGF5ZXI6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX2xheWVyc1t0XX0sZ2V0TGF5ZXJzOmZ1bmN0aW9uKCl7dmFyIHQ9W107Zm9yKHZhciBlIGluIHRoaXMuX2xheWVycyl0LnB1c2godGhpcy5fbGF5ZXJzW2VdKTtyZXR1cm4gdH0sc2V0WkluZGV4OmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmludm9rZSgic2V0WkluZGV4Iix0KX0sZ2V0TGF5ZXJJZDpmdW5jdGlvbih0KXtyZXR1cm4gby5zdGFtcCh0KX19KSxvLmxheWVyR3JvdXA9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBvLkxheWVyR3JvdXAodCl9LG8uRmVhdHVyZUdyb3VwPW8uTGF5ZXJHcm91cC5leHRlbmQoe2luY2x1ZGVzOm8uTWl4aW4uRXZlbnRzLHN0YXRpY3M6e0VWRU5UUzoiY2xpY2sgZGJsY2xpY2sgbW91c2VvdmVyIG1vdXNlb3V0IG1vdXNlbW92ZSBjb250ZXh0bWVudSBwb3B1cG9wZW4gcG9wdXBjbG9zZSJ9LGFkZExheWVyOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmhhc0xheWVyKHQpP3RoaXM6KCJvbiJpbiB0JiZ0Lm9uKG8uRmVhdHVyZUdyb3VwLkVWRU5UUyx0aGlzLl9wcm9wYWdhdGVFdmVudCx0aGlzKSxvLkxheWVyR3JvdXAucHJvdG90eXBlLmFkZExheWVyLmNhbGwodGhpcyx0KSx0aGlzLl9wb3B1cENvbnRlbnQmJnQuYmluZFBvcHVwJiZ0LmJpbmRQb3B1cCh0aGlzLl9wb3B1cENvbnRlbnQsdGhpcy5fcG9wdXBPcHRpb25zKSx0aGlzLmZpcmUoImxheWVyYWRkIix7bGF5ZXI6dH0pKX0scmVtb3ZlTGF5ZXI6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuaGFzTGF5ZXIodCk/KHQgaW4gdGhpcy5fbGF5ZXJzJiYodD10aGlzLl9sYXllcnNbdF0pLHQub2ZmKG8uRmVhdHVyZUdyb3VwLkVWRU5UUyx0aGlzLl9wcm9wYWdhdGVFdmVudCx0aGlzKSxvLkxheWVyR3JvdXAucHJvdG90eXBlLnJlbW92ZUxheWVyLmNhbGwodGhpcyx0KSx0aGlzLl9wb3B1cENvbnRlbnQmJnRoaXMuaW52b2tlKCJ1bmJpbmRQb3B1cCIpLHRoaXMuZmlyZSgibGF5ZXJyZW1vdmUiLHtsYXllcjp0fSkpOnRoaXN9LGJpbmRQb3B1cDpmdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLl9wb3B1cENvbnRlbnQ9dCx0aGlzLl9wb3B1cE9wdGlvbnM9ZSx0aGlzLmludm9rZSgiYmluZFBvcHVwIix0LGUpfSxvcGVuUG9wdXA6ZnVuY3Rpb24odCl7Zm9yKHZhciBlIGluIHRoaXMuX2xheWVycyl7dGhpcy5fbGF5ZXJzW2VdLm9wZW5Qb3B1cCh0KTticmVha31yZXR1cm4gdGhpc30sc2V0U3R5bGU6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuaW52b2tlKCJzZXRTdHlsZSIsdCl9LGJyaW5nVG9Gcm9udDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmludm9rZSgiYnJpbmdUb0Zyb250Iil9LGJyaW5nVG9CYWNrOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaW52b2tlKCJicmluZ1RvQmFjayIpfSxnZXRCb3VuZHM6ZnVuY3Rpb24oKXt2YXIgdD1uZXcgby5MYXRMbmdCb3VuZHM7cmV0dXJuIHRoaXMuZWFjaExheWVyKGZ1bmN0aW9uKGUpe3QuZXh0ZW5kKGUgaW5zdGFuY2VvZiBvLk1hcmtlcj9lLmdldExhdExuZygpOmUuZ2V0Qm91bmRzKCkpfSksdH0sX3Byb3BhZ2F0ZUV2ZW50OmZ1bmN0aW9uKHQpe3Q9by5leHRlbmQoe2xheWVyOnQudGFyZ2V0LHRhcmdldDp0aGlzfSx0KSx0aGlzLmZpcmUodC50eXBlLHQpfX0pLG8uZmVhdHVyZUdyb3VwPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgby5GZWF0dXJlR3JvdXAodCl9LG8uUGF0aD1vLkNsYXNzLmV4dGVuZCh7aW5jbHVkZXM6W28uTWl4aW4uRXZlbnRzXSxzdGF0aWNzOntDTElQX1BBRERJTkc6ZnVuY3Rpb24oKXt2YXIgZT1vLkJyb3dzZXIubW9iaWxlPzEyODA6MmUzLGk9KGUvTWF0aC5tYXgodC5vdXRlcldpZHRoLHQub3V0ZXJIZWlnaHQpLTEpLzI7cmV0dXJuIE1hdGgubWF4KDAsTWF0aC5taW4oLjUsaSkpfSgpfSxvcHRpb25zOntzdHJva2U6ITAsY29sb3I6IiMwMDMzZmYiLGRhc2hBcnJheTpudWxsLGxpbmVDYXA6bnVsbCxsaW5lSm9pbjpudWxsLHdlaWdodDo1LG9wYWNpdHk6LjUsZmlsbDohMSxmaWxsQ29sb3I6bnVsbCxmaWxsT3BhY2l0eTouMixjbGlja2FibGU6ITB9LGluaXRpYWxpemU6ZnVuY3Rpb24odCl7by5zZXRPcHRpb25zKHRoaXMsdCl9LG9uQWRkOmZ1bmN0aW9uKHQpe3RoaXMuX21hcD10LHRoaXMuX2NvbnRhaW5lcnx8KHRoaXMuX2luaXRFbGVtZW50cygpLHRoaXMuX2luaXRFdmVudHMoKSksdGhpcy5wcm9qZWN0TGF0bG5ncygpLHRoaXMuX3VwZGF0ZVBhdGgoKSx0aGlzLl9jb250YWluZXImJnRoaXMuX21hcC5fcGF0aFJvb3QuYXBwZW5kQ2hpbGQodGhpcy5fY29udGFpbmVyKSx0aGlzLmZpcmUoImFkZCIpLHQub24oe3ZpZXdyZXNldDp0aGlzLnByb2plY3RMYXRsbmdzLG1vdmVlbmQ6dGhpcy5fdXBkYXRlUGF0aH0sdGhpcyl9LGFkZFRvOmZ1bmN0aW9uKHQpe3JldHVybiB0LmFkZExheWVyKHRoaXMpLHRoaXN9LG9uUmVtb3ZlOmZ1bmN0aW9uKHQpe3QuX3BhdGhSb290LnJlbW92ZUNoaWxkKHRoaXMuX2NvbnRhaW5lciksdGhpcy5maXJlKCJyZW1vdmUiKSx0aGlzLl9tYXA9bnVsbCxvLkJyb3dzZXIudm1sJiYodGhpcy5fY29udGFpbmVyPW51bGwsdGhpcy5fc3Ryb2tlPW51bGwsdGhpcy5fZmlsbD1udWxsKSx0Lm9mZih7dmlld3Jlc2V0OnRoaXMucHJvamVjdExhdGxuZ3MsbW92ZWVuZDp0aGlzLl91cGRhdGVQYXRofSx0aGlzKX0scHJvamVjdExhdGxuZ3M6ZnVuY3Rpb24oKXt9LHNldFN0eWxlOmZ1bmN0aW9uKHQpe3JldHVybiBvLnNldE9wdGlvbnModGhpcyx0KSx0aGlzLl9jb250YWluZXImJnRoaXMuX3VwZGF0ZVN0eWxlKCksdGhpc30scmVkcmF3OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX21hcCYmKHRoaXMucHJvamVjdExhdGxuZ3MoKSx0aGlzLl91cGRhdGVQYXRoKCkpLHRoaXN9fSksby5NYXAuaW5jbHVkZSh7X3VwZGF0ZVBhdGhWaWV3cG9ydDpmdW5jdGlvbigpe3ZhciB0PW8uUGF0aC5DTElQX1BBRERJTkcsZT10aGlzLmdldFNpemUoKSxpPW8uRG9tVXRpbC5nZXRQb3NpdGlvbih0aGlzLl9tYXBQYW5lKSxuPWkubXVsdGlwbHlCeSgtMSkuX3N1YnRyYWN0KGUubXVsdGlwbHlCeSh0KS5fcm91bmQoKSkscz1uLmFkZChlLm11bHRpcGx5QnkoMSsyKnQpLl9yb3VuZCgpKTt0aGlzLl9wYXRoVmlld3BvcnQ9bmV3IG8uQm91bmRzKG4scyl9fSksby5QYXRoLlNWR19OUz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLG8uQnJvd3Nlci5zdmc9ISghZS5jcmVhdGVFbGVtZW50TlN8fCFlLmNyZWF0ZUVsZW1lbnROUyhvLlBhdGguU1ZHX05TLCJzdmciKS5jcmVhdGVTVkdSZWN0KSxvLlBhdGg9by5QYXRoLmV4dGVuZCh7c3RhdGljczp7U1ZHOm8uQnJvd3Nlci5zdmd9LGJyaW5nVG9Gcm9udDpmdW5jdGlvbigpe3ZhciB0PXRoaXMuX21hcC5fcGF0aFJvb3QsZT10aGlzLl9jb250YWluZXI7cmV0dXJuIGUmJnQubGFzdENoaWxkIT09ZSYmdC5hcHBlbmRDaGlsZChlKSx0aGlzfSxicmluZ1RvQmFjazpmdW5jdGlvbigpe3ZhciB0PXRoaXMuX21hcC5fcGF0aFJvb3QsZT10aGlzLl9jb250YWluZXIsaT10LmZpcnN0Q2hpbGQ7cmV0dXJuIGUmJmkhPT1lJiZ0Lmluc2VydEJlZm9yZShlLGkpLHRoaXN9LGdldFBhdGhTdHJpbmc6ZnVuY3Rpb24oKXt9LF9jcmVhdGVFbGVtZW50OmZ1bmN0aW9uKHQpe3JldHVybiBlLmNyZWF0ZUVsZW1lbnROUyhvLlBhdGguU1ZHX05TLHQpfSxfaW5pdEVsZW1lbnRzOmZ1bmN0aW9uKCl7dGhpcy5fbWFwLl9pbml0UGF0aFJvb3QoKSx0aGlzLl9pbml0UGF0aCgpLHRoaXMuX2luaXRTdHlsZSgpfSxfaW5pdFBhdGg6ZnVuY3Rpb24oKXt0aGlzLl9jb250YWluZXI9dGhpcy5fY3JlYXRlRWxlbWVudCgiZyIpLHRoaXMuX3BhdGg9dGhpcy5fY3JlYXRlRWxlbWVudCgicGF0aCIpLHRoaXMub3B0aW9ucy5jbGFzc05hbWUmJm8uRG9tVXRpbC5hZGRDbGFzcyh0aGlzLl9wYXRoLHRoaXMub3B0aW9ucy5jbGFzc05hbWUpLHRoaXMuX2NvbnRhaW5lci5hcHBlbmRDaGlsZCh0aGlzLl9wYXRoKX0sX2luaXRTdHlsZTpmdW5jdGlvbigpe3RoaXMub3B0aW9ucy5zdHJva2UmJih0aGlzLl9wYXRoLnNldEF0dHJpYnV0ZSgic3Ryb2tlLWxpbmVqb2luIiwicm91bmQiKSx0aGlzLl9wYXRoLnNldEF0dHJpYnV0ZSgic3Ryb2tlLWxpbmVjYXAiLCJyb3VuZCIpKSx0aGlzLm9wdGlvbnMuZmlsbCYmdGhpcy5fcGF0aC5zZXRBdHRyaWJ1dGUoImZpbGwtcnVsZSIsImV2ZW5vZGQiKSx0aGlzLm9wdGlvbnMucG9pbnRlckV2ZW50cyYmdGhpcy5fcGF0aC5zZXRBdHRyaWJ1dGUoInBvaW50ZXItZXZlbnRzIix0aGlzLm9wdGlvbnMucG9pbnRlckV2ZW50cyksdGhpcy5vcHRpb25zLmNsaWNrYWJsZXx8dGhpcy5vcHRpb25zLnBvaW50ZXJFdmVudHN8fHRoaXMuX3BhdGguc2V0QXR0cmlidXRlKCJwb2ludGVyLWV2ZW50cyIsIm5vbmUiKSx0aGlzLl91cGRhdGVTdHlsZSgpfSxfdXBkYXRlU3R5bGU6ZnVuY3Rpb24oKXt0aGlzLm9wdGlvbnMuc3Ryb2tlPyh0aGlzLl9wYXRoLnNldEF0dHJpYnV0ZSgic3Ryb2tlIix0aGlzLm9wdGlvbnMuY29sb3IpLHRoaXMuX3BhdGguc2V0QXR0cmlidXRlKCJzdHJva2Utb3BhY2l0eSIsdGhpcy5vcHRpb25zLm9wYWNpdHkpLHRoaXMuX3BhdGguc2V0QXR0cmlidXRlKCJzdHJva2Utd2lkdGgiLHRoaXMub3B0aW9ucy53ZWlnaHQpLHRoaXMub3B0aW9ucy5kYXNoQXJyYXk/dGhpcy5fcGF0aC5zZXRBdHRyaWJ1dGUoInN0cm9rZS1kYXNoYXJyYXkiLHRoaXMub3B0aW9ucy5kYXNoQXJyYXkpOnRoaXMuX3BhdGgucmVtb3ZlQXR0cmlidXRlKCJzdHJva2UtZGFzaGFycmF5IiksdGhpcy5vcHRpb25zLmxpbmVDYXAmJnRoaXMuX3BhdGguc2V0QXR0cmlidXRlKCJzdHJva2UtbGluZWNhcCIsdGhpcy5vcHRpb25zLmxpbmVDYXApLHRoaXMub3B0aW9ucy5saW5lSm9pbiYmdGhpcy5fcGF0aC5zZXRBdHRyaWJ1dGUoInN0cm9rZS1saW5lam9pbiIsdGhpcy5vcHRpb25zLmxpbmVKb2luKSk6dGhpcy5fcGF0aC5zZXRBdHRyaWJ1dGUoInN0cm9rZSIsIm5vbmUiKSx0aGlzLm9wdGlvbnMuZmlsbD8odGhpcy5fcGF0aC5zZXRBdHRyaWJ1dGUoImZpbGwiLHRoaXMub3B0aW9ucy5maWxsQ29sb3J8fHRoaXMub3B0aW9ucy5jb2xvciksdGhpcy5fcGF0aC5zZXRBdHRyaWJ1dGUoImZpbGwtb3BhY2l0eSIsdGhpcy5vcHRpb25zLmZpbGxPcGFjaXR5KSk6dGhpcy5fcGF0aC5zZXRBdHRyaWJ1dGUoImZpbGwiLCJub25lIil9LF91cGRhdGVQYXRoOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5nZXRQYXRoU3RyaW5nKCk7dHx8KHQ9Ik0wIDAiKSx0aGlzLl9wYXRoLnNldEF0dHJpYnV0ZSgiZCIsdCl9LF9pbml0RXZlbnRzOmZ1bmN0aW9uKCl7aWYodGhpcy5vcHRpb25zLmNsaWNrYWJsZSl7KG8uQnJvd3Nlci5zdmd8fCFvLkJyb3dzZXIudm1sKSYmby5Eb21VdGlsLmFkZENsYXNzKHRoaXMuX3BhdGgsImxlYWZsZXQtY2xpY2thYmxlIiksby5Eb21FdmVudC5vbih0aGlzLl9jb250YWluZXIsImNsaWNrIix0aGlzLl9vbk1vdXNlQ2xpY2ssdGhpcyk7Zm9yKHZhciB0PVsiZGJsY2xpY2siLCJtb3VzZWRvd24iLCJtb3VzZW92ZXIiLCJtb3VzZW91dCIsIm1vdXNlbW92ZSIsImNvbnRleHRtZW51Il0sZT0wO2U8dC5sZW5ndGg7ZSsrKW8uRG9tRXZlbnQub24odGhpcy5fY29udGFpbmVyLHRbZV0sdGhpcy5fZmlyZU1vdXNlRXZlbnQsdGhpcyl9fSxfb25Nb3VzZUNsaWNrOmZ1bmN0aW9uKHQpe3RoaXMuX21hcC5kcmFnZ2luZyYmdGhpcy5fbWFwLmRyYWdnaW5nLm1vdmVkKCl8fHRoaXMuX2ZpcmVNb3VzZUV2ZW50KHQpfSxfZmlyZU1vdXNlRXZlbnQ6ZnVuY3Rpb24odCl7aWYodGhpcy5oYXNFdmVudExpc3RlbmVycyh0LnR5cGUpKXt2YXIgZT10aGlzLl9tYXAsaT1lLm1vdXNlRXZlbnRUb0NvbnRhaW5lclBvaW50KHQpLG49ZS5jb250YWluZXJQb2ludFRvTGF5ZXJQb2ludChpKSxzPWUubGF5ZXJQb2ludFRvTGF0TG5nKG4pO3RoaXMuZmlyZSh0LnR5cGUse2xhdGxuZzpzLGxheWVyUG9pbnQ6bixjb250YWluZXJQb2ludDppLG9yaWdpbmFsRXZlbnQ6dH0pLCJjb250ZXh0bWVudSI9PT10LnR5cGUmJm8uRG9tRXZlbnQucHJldmVudERlZmF1bHQodCksIm1vdXNlbW92ZSIhPT10LnR5cGUmJm8uRG9tRXZlbnQuc3RvcFByb3BhZ2F0aW9uKHQpfX19KSxvLk1hcC5pbmNsdWRlKHtfaW5pdFBhdGhSb290OmZ1bmN0aW9uKCl7dGhpcy5fcGF0aFJvb3R8fCh0aGlzLl9wYXRoUm9vdD1vLlBhdGgucHJvdG90eXBlLl9jcmVhdGVFbGVtZW50KCJzdmciKSx0aGlzLl9wYW5lcy5vdmVybGF5UGFuZS5hcHBlbmRDaGlsZCh0aGlzLl9wYXRoUm9vdCksdGhpcy5vcHRpb25zLnpvb21BbmltYXRpb24mJm8uQnJvd3Nlci5hbnkzZD8oby5Eb21VdGlsLmFkZENsYXNzKHRoaXMuX3BhdGhSb290LCJsZWFmbGV0LXpvb20tYW5pbWF0ZWQiKSx0aGlzLm9uKHt6b29tYW5pbTp0aGlzLl9hbmltYXRlUGF0aFpvb20sem9vbWVuZDp0aGlzLl9lbmRQYXRoWm9vbX0pKTpvLkRvbVV0aWwuYWRkQ2xhc3ModGhpcy5fcGF0aFJvb3QsImxlYWZsZXQtem9vbS1oaWRlIiksdGhpcy5vbigibW92ZWVuZCIsdGhpcy5fdXBkYXRlU3ZnVmlld3BvcnQpLHRoaXMuX3VwZGF0ZVN2Z1ZpZXdwb3J0KCkpCn0sX2FuaW1hdGVQYXRoWm9vbTpmdW5jdGlvbih0KXt2YXIgZT10aGlzLmdldFpvb21TY2FsZSh0Lnpvb20pLGk9dGhpcy5fZ2V0Q2VudGVyT2Zmc2V0KHQuY2VudGVyKS5fbXVsdGlwbHlCeSgtZSkuX2FkZCh0aGlzLl9wYXRoVmlld3BvcnQubWluKTt0aGlzLl9wYXRoUm9vdC5zdHlsZVtvLkRvbVV0aWwuVFJBTlNGT1JNXT1vLkRvbVV0aWwuZ2V0VHJhbnNsYXRlU3RyaW5nKGkpKyIgc2NhbGUoIitlKyIpICIsdGhpcy5fcGF0aFpvb21pbmc9ITB9LF9lbmRQYXRoWm9vbTpmdW5jdGlvbigpe3RoaXMuX3BhdGhab29taW5nPSExfSxfdXBkYXRlU3ZnVmlld3BvcnQ6ZnVuY3Rpb24oKXtpZighdGhpcy5fcGF0aFpvb21pbmcpe3RoaXMuX3VwZGF0ZVBhdGhWaWV3cG9ydCgpO3ZhciB0PXRoaXMuX3BhdGhWaWV3cG9ydCxlPXQubWluLGk9dC5tYXgsbj1pLngtZS54LHM9aS55LWUueSxhPXRoaXMuX3BhdGhSb290LHI9dGhpcy5fcGFuZXMub3ZlcmxheVBhbmU7by5Ccm93c2VyLm1vYmlsZVdlYmtpdCYmci5yZW1vdmVDaGlsZChhKSxvLkRvbVV0aWwuc2V0UG9zaXRpb24oYSxlKSxhLnNldEF0dHJpYnV0ZSgid2lkdGgiLG4pLGEuc2V0QXR0cmlidXRlKCJoZWlnaHQiLHMpLGEuc2V0QXR0cmlidXRlKCJ2aWV3Qm94IixbZS54LGUueSxuLHNdLmpvaW4oIiAiKSksby5Ccm93c2VyLm1vYmlsZVdlYmtpdCYmci5hcHBlbmRDaGlsZChhKX19fSksby5QYXRoLmluY2x1ZGUoe2JpbmRQb3B1cDpmdW5jdGlvbih0LGUpe3JldHVybiB0IGluc3RhbmNlb2Ygby5Qb3B1cD90aGlzLl9wb3B1cD10OigoIXRoaXMuX3BvcHVwfHxlKSYmKHRoaXMuX3BvcHVwPW5ldyBvLlBvcHVwKGUsdGhpcykpLHRoaXMuX3BvcHVwLnNldENvbnRlbnQodCkpLHRoaXMuX3BvcHVwSGFuZGxlcnNBZGRlZHx8KHRoaXMub24oImNsaWNrIix0aGlzLl9vcGVuUG9wdXAsdGhpcykub24oInJlbW92ZSIsdGhpcy5jbG9zZVBvcHVwLHRoaXMpLHRoaXMuX3BvcHVwSGFuZGxlcnNBZGRlZD0hMCksdGhpc30sdW5iaW5kUG9wdXA6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcG9wdXAmJih0aGlzLl9wb3B1cD1udWxsLHRoaXMub2ZmKCJjbGljayIsdGhpcy5fb3BlblBvcHVwKS5vZmYoInJlbW92ZSIsdGhpcy5jbG9zZVBvcHVwKSx0aGlzLl9wb3B1cEhhbmRsZXJzQWRkZWQ9ITEpLHRoaXN9LG9wZW5Qb3B1cDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fcG9wdXAmJih0PXR8fHRoaXMuX2xhdGxuZ3x8dGhpcy5fbGF0bG5nc1tNYXRoLmZsb29yKHRoaXMuX2xhdGxuZ3MubGVuZ3RoLzIpXSx0aGlzLl9vcGVuUG9wdXAoe2xhdGxuZzp0fSkpLHRoaXN9LGNsb3NlUG9wdXA6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcG9wdXAmJnRoaXMuX3BvcHVwLl9jbG9zZSgpLHRoaXN9LF9vcGVuUG9wdXA6ZnVuY3Rpb24odCl7dGhpcy5fcG9wdXAuc2V0TGF0TG5nKHQubGF0bG5nKSx0aGlzLl9tYXAub3BlblBvcHVwKHRoaXMuX3BvcHVwKX19KSxvLkJyb3dzZXIudm1sPSFvLkJyb3dzZXIuc3ZnJiZmdW5jdGlvbigpe3RyeXt2YXIgdD1lLmNyZWF0ZUVsZW1lbnQoImRpdiIpO3QuaW5uZXJIVE1MPSc8djpzaGFwZSBhZGo9IjEiLz4nO3ZhciBpPXQuZmlyc3RDaGlsZDtyZXR1cm4gaS5zdHlsZS5iZWhhdmlvcj0idXJsKCNkZWZhdWx0I1ZNTCkiLGkmJiJvYmplY3QiPT10eXBlb2YgaS5hZGp9Y2F0Y2gobil7cmV0dXJuITF9fSgpLG8uUGF0aD1vLkJyb3dzZXIuc3ZnfHwhby5Ccm93c2VyLnZtbD9vLlBhdGg6by5QYXRoLmV4dGVuZCh7c3RhdGljczp7Vk1MOiEwLENMSVBfUEFERElORzouMDJ9LF9jcmVhdGVFbGVtZW50OmZ1bmN0aW9uKCl7dHJ5e3JldHVybiBlLm5hbWVzcGFjZXMuYWRkKCJsdm1sIiwidXJuOnNjaGVtYXMtbWljcm9zb2Z0LWNvbTp2bWwiKSxmdW5jdGlvbih0KXtyZXR1cm4gZS5jcmVhdGVFbGVtZW50KCI8bHZtbDoiK3QrJyBjbGFzcz0ibHZtbCI+Jyl9fWNhdGNoKHQpe3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gZS5jcmVhdGVFbGVtZW50KCI8Iit0KycgeG1sbnM9InVybjpzY2hlbWFzLW1pY3Jvc29mdC5jb206dm1sIiBjbGFzcz0ibHZtbCI+Jyl9fX0oKSxfaW5pdFBhdGg6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9jb250YWluZXI9dGhpcy5fY3JlYXRlRWxlbWVudCgic2hhcGUiKTtvLkRvbVV0aWwuYWRkQ2xhc3ModCwibGVhZmxldC12bWwtc2hhcGUiKyh0aGlzLm9wdGlvbnMuY2xhc3NOYW1lPyIgIit0aGlzLm9wdGlvbnMuY2xhc3NOYW1lOiIiKSksdGhpcy5vcHRpb25zLmNsaWNrYWJsZSYmby5Eb21VdGlsLmFkZENsYXNzKHQsImxlYWZsZXQtY2xpY2thYmxlIiksdC5jb29yZHNpemU9IjEgMSIsdGhpcy5fcGF0aD10aGlzLl9jcmVhdGVFbGVtZW50KCJwYXRoIiksdC5hcHBlbmRDaGlsZCh0aGlzLl9wYXRoKSx0aGlzLl9tYXAuX3BhdGhSb290LmFwcGVuZENoaWxkKHQpfSxfaW5pdFN0eWxlOmZ1bmN0aW9uKCl7dGhpcy5fdXBkYXRlU3R5bGUoKX0sX3VwZGF0ZVN0eWxlOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fc3Ryb2tlLGU9dGhpcy5fZmlsbCxpPXRoaXMub3B0aW9ucyxuPXRoaXMuX2NvbnRhaW5lcjtuLnN0cm9rZWQ9aS5zdHJva2Usbi5maWxsZWQ9aS5maWxsLGkuc3Ryb2tlPyh0fHwodD10aGlzLl9zdHJva2U9dGhpcy5fY3JlYXRlRWxlbWVudCgic3Ryb2tlIiksdC5lbmRjYXA9InJvdW5kIixuLmFwcGVuZENoaWxkKHQpKSx0LndlaWdodD1pLndlaWdodCsicHgiLHQuY29sb3I9aS5jb2xvcix0Lm9wYWNpdHk9aS5vcGFjaXR5LHQuZGFzaFN0eWxlPWkuZGFzaEFycmF5P28uVXRpbC5pc0FycmF5KGkuZGFzaEFycmF5KT9pLmRhc2hBcnJheS5qb2luKCIgIik6aS5kYXNoQXJyYXkucmVwbGFjZSgvKCAqLCAqKS9nLCIgIik6IiIsaS5saW5lQ2FwJiYodC5lbmRjYXA9aS5saW5lQ2FwLnJlcGxhY2UoImJ1dHQiLCJmbGF0IikpLGkubGluZUpvaW4mJih0LmpvaW5zdHlsZT1pLmxpbmVKb2luKSk6dCYmKG4ucmVtb3ZlQ2hpbGQodCksdGhpcy5fc3Ryb2tlPW51bGwpLGkuZmlsbD8oZXx8KGU9dGhpcy5fZmlsbD10aGlzLl9jcmVhdGVFbGVtZW50KCJmaWxsIiksbi5hcHBlbmRDaGlsZChlKSksZS5jb2xvcj1pLmZpbGxDb2xvcnx8aS5jb2xvcixlLm9wYWNpdHk9aS5maWxsT3BhY2l0eSk6ZSYmKG4ucmVtb3ZlQ2hpbGQoZSksdGhpcy5fZmlsbD1udWxsKX0sX3VwZGF0ZVBhdGg6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9jb250YWluZXIuc3R5bGU7dC5kaXNwbGF5PSJub25lIix0aGlzLl9wYXRoLnY9dGhpcy5nZXRQYXRoU3RyaW5nKCkrIiAiLHQuZGlzcGxheT0iIn19KSxvLk1hcC5pbmNsdWRlKG8uQnJvd3Nlci5zdmd8fCFvLkJyb3dzZXIudm1sP3t9OntfaW5pdFBhdGhSb290OmZ1bmN0aW9uKCl7aWYoIXRoaXMuX3BhdGhSb290KXt2YXIgdD10aGlzLl9wYXRoUm9vdD1lLmNyZWF0ZUVsZW1lbnQoImRpdiIpO3QuY2xhc3NOYW1lPSJsZWFmbGV0LXZtbC1jb250YWluZXIiLHRoaXMuX3BhbmVzLm92ZXJsYXlQYW5lLmFwcGVuZENoaWxkKHQpLHRoaXMub24oIm1vdmVlbmQiLHRoaXMuX3VwZGF0ZVBhdGhWaWV3cG9ydCksdGhpcy5fdXBkYXRlUGF0aFZpZXdwb3J0KCl9fX0pLG8uQnJvd3Nlci5jYW52YXM9ZnVuY3Rpb24oKXtyZXR1cm4hIWUuY3JlYXRlRWxlbWVudCgiY2FudmFzIikuZ2V0Q29udGV4dH0oKSxvLlBhdGg9by5QYXRoLlNWRyYmIXQuTF9QUkVGRVJfQ0FOVkFTfHwhby5Ccm93c2VyLmNhbnZhcz9vLlBhdGg6by5QYXRoLmV4dGVuZCh7c3RhdGljczp7Q0FOVkFTOiEwLFNWRzohMX0scmVkcmF3OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX21hcCYmKHRoaXMucHJvamVjdExhdGxuZ3MoKSx0aGlzLl9yZXF1ZXN0VXBkYXRlKCkpLHRoaXN9LHNldFN0eWxlOmZ1bmN0aW9uKHQpe3JldHVybiBvLnNldE9wdGlvbnModGhpcyx0KSx0aGlzLl9tYXAmJih0aGlzLl91cGRhdGVTdHlsZSgpLHRoaXMuX3JlcXVlc3RVcGRhdGUoKSksdGhpc30sb25SZW1vdmU6ZnVuY3Rpb24odCl7dC5vZmYoInZpZXdyZXNldCIsdGhpcy5wcm9qZWN0TGF0bG5ncyx0aGlzKS5vZmYoIm1vdmVlbmQiLHRoaXMuX3VwZGF0ZVBhdGgsdGhpcyksdGhpcy5vcHRpb25zLmNsaWNrYWJsZSYmKHRoaXMuX21hcC5vZmYoImNsaWNrIix0aGlzLl9vbkNsaWNrLHRoaXMpLHRoaXMuX21hcC5vZmYoIm1vdXNlbW92ZSIsdGhpcy5fb25Nb3VzZU1vdmUsdGhpcykpLHRoaXMuX3JlcXVlc3RVcGRhdGUoKSx0aGlzLmZpcmUoInJlbW92ZSIpLHRoaXMuX21hcD1udWxsfSxfcmVxdWVzdFVwZGF0ZTpmdW5jdGlvbigpe3RoaXMuX21hcCYmIW8uUGF0aC5fdXBkYXRlUmVxdWVzdCYmKG8uUGF0aC5fdXBkYXRlUmVxdWVzdD1vLlV0aWwucmVxdWVzdEFuaW1GcmFtZSh0aGlzLl9maXJlTWFwTW92ZUVuZCx0aGlzLl9tYXApKX0sX2ZpcmVNYXBNb3ZlRW5kOmZ1bmN0aW9uKCl7by5QYXRoLl91cGRhdGVSZXF1ZXN0PW51bGwsdGhpcy5maXJlKCJtb3ZlZW5kIil9LF9pbml0RWxlbWVudHM6ZnVuY3Rpb24oKXt0aGlzLl9tYXAuX2luaXRQYXRoUm9vdCgpLHRoaXMuX2N0eD10aGlzLl9tYXAuX2NhbnZhc0N0eH0sX3VwZGF0ZVN0eWxlOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5vcHRpb25zO3Quc3Ryb2tlJiYodGhpcy5fY3R4LmxpbmVXaWR0aD10LndlaWdodCx0aGlzLl9jdHguc3Ryb2tlU3R5bGU9dC5jb2xvciksdC5maWxsJiYodGhpcy5fY3R4LmZpbGxTdHlsZT10LmZpbGxDb2xvcnx8dC5jb2xvcil9LF9kcmF3UGF0aDpmdW5jdGlvbigpe3ZhciB0LGUsaSxuLHMsYTtmb3IodGhpcy5fY3R4LmJlZ2luUGF0aCgpLHQ9MCxpPXRoaXMuX3BhcnRzLmxlbmd0aDtpPnQ7dCsrKXtmb3IoZT0wLG49dGhpcy5fcGFydHNbdF0ubGVuZ3RoO24+ZTtlKyspcz10aGlzLl9wYXJ0c1t0XVtlXSxhPSgwPT09ZT8ibW92ZSI6ImxpbmUiKSsiVG8iLHRoaXMuX2N0eFthXShzLngscy55KTt0aGlzIGluc3RhbmNlb2Ygby5Qb2x5Z29uJiZ0aGlzLl9jdHguY2xvc2VQYXRoKCl9fSxfY2hlY2tJZkVtcHR5OmZ1bmN0aW9uKCl7cmV0dXJuIXRoaXMuX3BhcnRzLmxlbmd0aH0sX3VwZGF0ZVBhdGg6ZnVuY3Rpb24oKXtpZighdGhpcy5fY2hlY2tJZkVtcHR5KCkpe3ZhciB0PXRoaXMuX2N0eCxlPXRoaXMub3B0aW9uczt0aGlzLl9kcmF3UGF0aCgpLHQuc2F2ZSgpLHRoaXMuX3VwZGF0ZVN0eWxlKCksZS5maWxsJiYodC5nbG9iYWxBbHBoYT1lLmZpbGxPcGFjaXR5LHQuZmlsbCgpKSxlLnN0cm9rZSYmKHQuZ2xvYmFsQWxwaGE9ZS5vcGFjaXR5LHQuc3Ryb2tlKCkpLHQucmVzdG9yZSgpfX0sX2luaXRFdmVudHM6ZnVuY3Rpb24oKXt0aGlzLm9wdGlvbnMuY2xpY2thYmxlJiYodGhpcy5fbWFwLm9uKCJtb3VzZW1vdmUiLHRoaXMuX29uTW91c2VNb3ZlLHRoaXMpLHRoaXMuX21hcC5vbigiY2xpY2siLHRoaXMuX29uQ2xpY2ssdGhpcykpfSxfb25DbGljazpmdW5jdGlvbih0KXt0aGlzLl9jb250YWluc1BvaW50KHQubGF5ZXJQb2ludCkmJnRoaXMuZmlyZSgiY2xpY2siLHQpfSxfb25Nb3VzZU1vdmU6ZnVuY3Rpb24odCl7dGhpcy5fbWFwJiYhdGhpcy5fbWFwLl9hbmltYXRpbmdab29tJiYodGhpcy5fY29udGFpbnNQb2ludCh0LmxheWVyUG9pbnQpPyh0aGlzLl9jdHguY2FudmFzLnN0eWxlLmN1cnNvcj0icG9pbnRlciIsdGhpcy5fbW91c2VJbnNpZGU9ITAsdGhpcy5maXJlKCJtb3VzZW92ZXIiLHQpKTp0aGlzLl9tb3VzZUluc2lkZSYmKHRoaXMuX2N0eC5jYW52YXMuc3R5bGUuY3Vyc29yPSIiLHRoaXMuX21vdXNlSW5zaWRlPSExLHRoaXMuZmlyZSgibW91c2VvdXQiLHQpKSl9fSksby5NYXAuaW5jbHVkZShvLlBhdGguU1ZHJiYhdC5MX1BSRUZFUl9DQU5WQVN8fCFvLkJyb3dzZXIuY2FudmFzP3t9OntfaW5pdFBhdGhSb290OmZ1bmN0aW9uKCl7dmFyIHQsaT10aGlzLl9wYXRoUm9vdDtpfHwoaT10aGlzLl9wYXRoUm9vdD1lLmNyZWF0ZUVsZW1lbnQoImNhbnZhcyIpLGkuc3R5bGUucG9zaXRpb249ImFic29sdXRlIix0PXRoaXMuX2NhbnZhc0N0eD1pLmdldENvbnRleHQoIjJkIiksdC5saW5lQ2FwPSJyb3VuZCIsdC5saW5lSm9pbj0icm91bmQiLHRoaXMuX3BhbmVzLm92ZXJsYXlQYW5lLmFwcGVuZENoaWxkKGkpLHRoaXMub3B0aW9ucy56b29tQW5pbWF0aW9uJiYodGhpcy5fcGF0aFJvb3QuY2xhc3NOYW1lPSJsZWFmbGV0LXpvb20tYW5pbWF0ZWQiLHRoaXMub24oInpvb21hbmltIix0aGlzLl9hbmltYXRlUGF0aFpvb20pLHRoaXMub24oInpvb21lbmQiLHRoaXMuX2VuZFBhdGhab29tKSksdGhpcy5vbigibW92ZWVuZCIsdGhpcy5fdXBkYXRlQ2FudmFzVmlld3BvcnQpLHRoaXMuX3VwZGF0ZUNhbnZhc1ZpZXdwb3J0KCkpfSxfdXBkYXRlQ2FudmFzVmlld3BvcnQ6ZnVuY3Rpb24oKXtpZighdGhpcy5fcGF0aFpvb21pbmcpe3RoaXMuX3VwZGF0ZVBhdGhWaWV3cG9ydCgpO3ZhciB0PXRoaXMuX3BhdGhWaWV3cG9ydCxlPXQubWluLGk9dC5tYXguc3VidHJhY3QoZSksbj10aGlzLl9wYXRoUm9vdDtvLkRvbVV0aWwuc2V0UG9zaXRpb24obixlKSxuLndpZHRoPWkueCxuLmhlaWdodD1pLnksbi5nZXRDb250ZXh0KCIyZCIpLnRyYW5zbGF0ZSgtZS54LC1lLnkpfX19KSxvLkxpbmVVdGlsPXtzaW1wbGlmeTpmdW5jdGlvbih0LGUpe2lmKCFlfHwhdC5sZW5ndGgpcmV0dXJuIHQuc2xpY2UoKTt2YXIgaT1lKmU7cmV0dXJuIHQ9dGhpcy5fcmVkdWNlUG9pbnRzKHQsaSksdD10aGlzLl9zaW1wbGlmeURQKHQsaSl9LHBvaW50VG9TZWdtZW50RGlzdGFuY2U6ZnVuY3Rpb24odCxlLGkpe3JldHVybiBNYXRoLnNxcnQodGhpcy5fc3FDbG9zZXN0UG9pbnRPblNlZ21lbnQodCxlLGksITApKX0sY2xvc2VzdFBvaW50T25TZWdtZW50OmZ1bmN0aW9uKHQsZSxpKXtyZXR1cm4gdGhpcy5fc3FDbG9zZXN0UG9pbnRPblNlZ21lbnQodCxlLGkpfSxfc2ltcGxpZnlEUDpmdW5jdGlvbih0LGUpe3ZhciBuPXQubGVuZ3RoLG89dHlwZW9mIFVpbnQ4QXJyYXkhPWkrIiI/VWludDhBcnJheTpBcnJheSxzPW5ldyBvKG4pO3NbMF09c1tuLTFdPTEsdGhpcy5fc2ltcGxpZnlEUFN0ZXAodCxzLGUsMCxuLTEpO3ZhciBhLHI9W107Zm9yKGE9MDtuPmE7YSsrKXNbYV0mJnIucHVzaCh0W2FdKTtyZXR1cm4gcn0sX3NpbXBsaWZ5RFBTdGVwOmZ1bmN0aW9uKHQsZSxpLG4sbyl7dmFyIHMsYSxyLGg9MDtmb3IoYT1uKzE7by0xPj1hO2ErKylyPXRoaXMuX3NxQ2xvc2VzdFBvaW50T25TZWdtZW50KHRbYV0sdFtuXSx0W29dLCEwKSxyPmgmJihzPWEsaD1yKTtoPmkmJihlW3NdPTEsdGhpcy5fc2ltcGxpZnlEUFN0ZXAodCxlLGksbixzKSx0aGlzLl9zaW1wbGlmeURQU3RlcCh0LGUsaSxzLG8pKX0sX3JlZHVjZVBvaW50czpmdW5jdGlvbih0LGUpe2Zvcih2YXIgaT1bdFswXV0sbj0xLG89MCxzPXQubGVuZ3RoO3M+bjtuKyspdGhpcy5fc3FEaXN0KHRbbl0sdFtvXSk+ZSYmKGkucHVzaCh0W25dKSxvPW4pO3JldHVybiBzLTE+byYmaS5wdXNoKHRbcy0xXSksaX0sY2xpcFNlZ21lbnQ6ZnVuY3Rpb24odCxlLGksbil7dmFyIG8scyxhLHI9bj90aGlzLl9sYXN0Q29kZTp0aGlzLl9nZXRCaXRDb2RlKHQsaSksaD10aGlzLl9nZXRCaXRDb2RlKGUsaSk7Zm9yKHRoaXMuX2xhc3RDb2RlPWg7Oyl7aWYoIShyfGgpKXJldHVyblt0LGVdO2lmKHImaClyZXR1cm4hMTtvPXJ8fGgscz10aGlzLl9nZXRFZGdlSW50ZXJzZWN0aW9uKHQsZSxvLGkpLGE9dGhpcy5fZ2V0Qml0Q29kZShzLGkpLG89PT1yPyh0PXMscj1hKTooZT1zLGg9YSl9fSxfZ2V0RWRnZUludGVyc2VjdGlvbjpmdW5jdGlvbih0LGUsaSxuKXt2YXIgcz1lLngtdC54LGE9ZS55LXQueSxyPW4ubWluLGg9bi5tYXg7cmV0dXJuIDgmaT9uZXcgby5Qb2ludCh0LngrcyooaC55LXQueSkvYSxoLnkpOjQmaT9uZXcgby5Qb2ludCh0Lngrcyooci55LXQueSkvYSxyLnkpOjImaT9uZXcgby5Qb2ludChoLngsdC55K2EqKGgueC10LngpL3MpOjEmaT9uZXcgby5Qb2ludChyLngsdC55K2EqKHIueC10LngpL3MpOnZvaWQgMH0sX2dldEJpdENvZGU6ZnVuY3Rpb24odCxlKXt2YXIgaT0wO3JldHVybiB0Lng8ZS5taW4ueD9pfD0xOnQueD5lLm1heC54JiYoaXw9MiksdC55PGUubWluLnk/aXw9NDp0Lnk+ZS5tYXgueSYmKGl8PTgpLGl9LF9zcURpc3Q6ZnVuY3Rpb24odCxlKXt2YXIgaT1lLngtdC54LG49ZS55LXQueTtyZXR1cm4gaSppK24qbn0sX3NxQ2xvc2VzdFBvaW50T25TZWdtZW50OmZ1bmN0aW9uKHQsZSxpLG4pe3ZhciBzLGE9ZS54LHI9ZS55LGg9aS54LWEsbD1pLnktcix1PWgqaCtsKmw7cmV0dXJuIHU+MCYmKHM9KCh0LngtYSkqaCsodC55LXIpKmwpL3Uscz4xPyhhPWkueCxyPWkueSk6cz4wJiYoYSs9aCpzLHIrPWwqcykpLGg9dC54LWEsbD10LnktcixuP2gqaCtsKmw6bmV3IG8uUG9pbnQoYSxyKX19LG8uUG9seWxpbmU9by5QYXRoLmV4dGVuZCh7aW5pdGlhbGl6ZTpmdW5jdGlvbih0LGUpe28uUGF0aC5wcm90b3R5cGUuaW5pdGlhbGl6ZS5jYWxsKHRoaXMsZSksdGhpcy5fbGF0bG5ncz10aGlzLl9jb252ZXJ0TGF0TG5ncyh0KX0sb3B0aW9uczp7c21vb3RoRmFjdG9yOjEsbm9DbGlwOiExfSxwcm9qZWN0TGF0bG5nczpmdW5jdGlvbigpe3RoaXMuX29yaWdpbmFsUG9pbnRzPVtdO2Zvcih2YXIgdD0wLGU9dGhpcy5fbGF0bG5ncy5sZW5ndGg7ZT50O3QrKyl0aGlzLl9vcmlnaW5hbFBvaW50c1t0XT10aGlzLl9tYXAubGF0TG5nVG9MYXllclBvaW50KHRoaXMuX2xhdGxuZ3NbdF0pfSxnZXRQYXRoU3RyaW5nOmZ1bmN0aW9uKCl7Zm9yKHZhciB0PTAsZT10aGlzLl9wYXJ0cy5sZW5ndGgsaT0iIjtlPnQ7dCsrKWkrPXRoaXMuX2dldFBhdGhQYXJ0U3RyKHRoaXMuX3BhcnRzW3RdKTtyZXR1cm4gaX0sZ2V0TGF0TG5nczpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9sYXRsbmdzfSxzZXRMYXRMbmdzOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9sYXRsbmdzPXRoaXMuX2NvbnZlcnRMYXRMbmdzKHQpLHRoaXMucmVkcmF3KCl9LGFkZExhdExuZzpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fbGF0bG5ncy5wdXNoKG8ubGF0TG5nKHQpKSx0aGlzLnJlZHJhdygpfSxzcGxpY2VMYXRMbmdzOmZ1bmN0aW9uKCl7dmFyIHQ9W10uc3BsaWNlLmFwcGx5KHRoaXMuX2xhdGxuZ3MsYXJndW1lbnRzKTtyZXR1cm4gdGhpcy5fY29udmVydExhdExuZ3ModGhpcy5fbGF0bG5ncywhMCksdGhpcy5yZWRyYXcoKSx0fSxjbG9zZXN0TGF5ZXJQb2ludDpmdW5jdGlvbih0KXtmb3IodmFyIGUsaSxuPTEvMCxzPXRoaXMuX3BhcnRzLGE9bnVsbCxyPTAsaD1zLmxlbmd0aDtoPnI7cisrKWZvcih2YXIgbD1zW3JdLHU9MSxjPWwubGVuZ3RoO2M+dTt1Kyspe2U9bFt1LTFdLGk9bFt1XTt2YXIgZD1vLkxpbmVVdGlsLl9zcUNsb3Nlc3RQb2ludE9uU2VnbWVudCh0LGUsaSwhMCk7bj5kJiYobj1kLGE9by5MaW5lVXRpbC5fc3FDbG9zZXN0UG9pbnRPblNlZ21lbnQodCxlLGkpKX1yZXR1cm4gYSYmKGEuZGlzdGFuY2U9TWF0aC5zcXJ0KG4pKSxhfSxnZXRCb3VuZHM6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IG8uTGF0TG5nQm91bmRzKHRoaXMuZ2V0TGF0TG5ncygpKX0sX2NvbnZlcnRMYXRMbmdzOmZ1bmN0aW9uKHQsZSl7dmFyIGksbixzPWU/dDpbXTtmb3IoaT0wLG49dC5sZW5ndGg7bj5pO2krKyl7aWYoby5VdGlsLmlzQXJyYXkodFtpXSkmJiJudW1iZXIiIT10eXBlb2YgdFtpXVswXSlyZXR1cm47c1tpXT1vLmxhdExuZyh0W2ldKX1yZXR1cm4gc30sX2luaXRFdmVudHM6ZnVuY3Rpb24oKXtvLlBhdGgucHJvdG90eXBlLl9pbml0RXZlbnRzLmNhbGwodGhpcyl9LF9nZXRQYXRoUGFydFN0cjpmdW5jdGlvbih0KXtmb3IodmFyIGUsaT1vLlBhdGguVk1MLG49MCxzPXQubGVuZ3RoLGE9IiI7cz5uO24rKyllPXRbbl0saSYmZS5fcm91bmQoKSxhKz0obj8iTCI6Ik0iKStlLngrIiAiK2UueTtyZXR1cm4gYX0sX2NsaXBQb2ludHM6ZnVuY3Rpb24oKXt2YXIgdCxlLGksbj10aGlzLl9vcmlnaW5hbFBvaW50cyxzPW4ubGVuZ3RoO2lmKHRoaXMub3B0aW9ucy5ub0NsaXApcmV0dXJuIHZvaWQodGhpcy5fcGFydHM9W25dKTt0aGlzLl9wYXJ0cz1bXTt2YXIgYT10aGlzLl9wYXJ0cyxyPXRoaXMuX21hcC5fcGF0aFZpZXdwb3J0LGg9by5MaW5lVXRpbDtmb3IodD0wLGU9MDtzLTE+dDt0KyspaT1oLmNsaXBTZWdtZW50KG5bdF0sblt0KzFdLHIsdCksaSYmKGFbZV09YVtlXXx8W10sYVtlXS5wdXNoKGlbMF0pLChpWzFdIT09blt0KzFdfHx0PT09cy0yKSYmKGFbZV0ucHVzaChpWzFdKSxlKyspKX0sX3NpbXBsaWZ5UG9pbnRzOmZ1bmN0aW9uKCl7Zm9yKHZhciB0PXRoaXMuX3BhcnRzLGU9by5MaW5lVXRpbCxpPTAsbj10Lmxlbmd0aDtuPmk7aSsrKXRbaV09ZS5zaW1wbGlmeSh0W2ldLHRoaXMub3B0aW9ucy5zbW9vdGhGYWN0b3IpfSxfdXBkYXRlUGF0aDpmdW5jdGlvbigpe3RoaXMuX21hcCYmKHRoaXMuX2NsaXBQb2ludHMoKSx0aGlzLl9zaW1wbGlmeVBvaW50cygpLG8uUGF0aC5wcm90b3R5cGUuX3VwZGF0ZVBhdGguY2FsbCh0aGlzKSl9fSksby5wb2x5bGluZT1mdW5jdGlvbih0LGUpe3JldHVybiBuZXcgby5Qb2x5bGluZSh0LGUpfSxvLlBvbHlVdGlsPXt9LG8uUG9seVV0aWwuY2xpcFBvbHlnb249ZnVuY3Rpb24odCxlKXt2YXIgaSxuLHMsYSxyLGgsbCx1LGMsZD1bMSw0LDIsOF0scD1vLkxpbmVVdGlsO2ZvcihuPTAsbD10Lmxlbmd0aDtsPm47bisrKXRbbl0uX2NvZGU9cC5fZ2V0Qml0Q29kZSh0W25dLGUpO2ZvcihhPTA7ND5hO2ErKyl7Zm9yKHU9ZFthXSxpPVtdLG49MCxsPXQubGVuZ3RoLHM9bC0xO2w+bjtzPW4rKylyPXRbbl0saD10W3NdLHIuX2NvZGUmdT9oLl9jb2RlJnV8fChjPXAuX2dldEVkZ2VJbnRlcnNlY3Rpb24oaCxyLHUsZSksYy5fY29kZT1wLl9nZXRCaXRDb2RlKGMsZSksaS5wdXNoKGMpKTooaC5fY29kZSZ1JiYoYz1wLl9nZXRFZGdlSW50ZXJzZWN0aW9uKGgscix1LGUpLGMuX2NvZGU9cC5fZ2V0Qml0Q29kZShjLGUpLGkucHVzaChjKSksaS5wdXNoKHIpKTt0PWl9cmV0dXJuIHR9LG8uUG9seWdvbj1vLlBvbHlsaW5lLmV4dGVuZCh7b3B0aW9uczp7ZmlsbDohMH0saW5pdGlhbGl6ZTpmdW5jdGlvbih0LGUpe28uUG9seWxpbmUucHJvdG90eXBlLmluaXRpYWxpemUuY2FsbCh0aGlzLHQsZSksdGhpcy5faW5pdFdpdGhIb2xlcyh0KX0sX2luaXRXaXRoSG9sZXM6ZnVuY3Rpb24odCl7dmFyIGUsaSxuO2lmKHQmJm8uVXRpbC5pc0FycmF5KHRbMF0pJiYibnVtYmVyIiE9dHlwZW9mIHRbMF1bMF0pZm9yKHRoaXMuX2xhdGxuZ3M9dGhpcy5fY29udmVydExhdExuZ3ModFswXSksdGhpcy5faG9sZXM9dC5zbGljZSgxKSxlPTAsaT10aGlzLl9ob2xlcy5sZW5ndGg7aT5lO2UrKyluPXRoaXMuX2hvbGVzW2VdPXRoaXMuX2NvbnZlcnRMYXRMbmdzKHRoaXMuX2hvbGVzW2VdKSxuWzBdLmVxdWFscyhuW24ubGVuZ3RoLTFdKSYmbi5wb3AoKTt0PXRoaXMuX2xhdGxuZ3MsdC5sZW5ndGg+PTImJnRbMF0uZXF1YWxzKHRbdC5sZW5ndGgtMV0pJiZ0LnBvcCgpfSxwcm9qZWN0TGF0bG5nczpmdW5jdGlvbigpe2lmKG8uUG9seWxpbmUucHJvdG90eXBlLnByb2plY3RMYXRsbmdzLmNhbGwodGhpcyksdGhpcy5faG9sZVBvaW50cz1bXSx0aGlzLl9ob2xlcyl7dmFyIHQsZSxpLG47Zm9yKHQ9MCxpPXRoaXMuX2hvbGVzLmxlbmd0aDtpPnQ7dCsrKWZvcih0aGlzLl9ob2xlUG9pbnRzW3RdPVtdLGU9MCxuPXRoaXMuX2hvbGVzW3RdLmxlbmd0aDtuPmU7ZSsrKXRoaXMuX2hvbGVQb2ludHNbdF1bZV09dGhpcy5fbWFwLmxhdExuZ1RvTGF5ZXJQb2ludCh0aGlzLl9ob2xlc1t0XVtlXSl9fSxzZXRMYXRMbmdzOmZ1bmN0aW9uKHQpe3JldHVybiB0JiZvLlV0aWwuaXNBcnJheSh0WzBdKSYmIm51bWJlciIhPXR5cGVvZiB0WzBdWzBdPyh0aGlzLl9pbml0V2l0aEhvbGVzKHQpLHRoaXMucmVkcmF3KCkpOm8uUG9seWxpbmUucHJvdG90eXBlLnNldExhdExuZ3MuY2FsbCh0aGlzLHQpfSxfY2xpcFBvaW50czpmdW5jdGlvbigpe3ZhciB0PXRoaXMuX29yaWdpbmFsUG9pbnRzLGU9W107aWYodGhpcy5fcGFydHM9W3RdLmNvbmNhdCh0aGlzLl9ob2xlUG9pbnRzKSwhdGhpcy5vcHRpb25zLm5vQ2xpcCl7Zm9yKHZhciBpPTAsbj10aGlzLl9wYXJ0cy5sZW5ndGg7bj5pO2krKyl7dmFyIHM9by5Qb2x5VXRpbC5jbGlwUG9seWdvbih0aGlzLl9wYXJ0c1tpXSx0aGlzLl9tYXAuX3BhdGhWaWV3cG9ydCk7cy5sZW5ndGgmJmUucHVzaChzKX10aGlzLl9wYXJ0cz1lfX0sX2dldFBhdGhQYXJ0U3RyOmZ1bmN0aW9uKHQpe3ZhciBlPW8uUG9seWxpbmUucHJvdG90eXBlLl9nZXRQYXRoUGFydFN0ci5jYWxsKHRoaXMsdCk7cmV0dXJuIGUrKG8uQnJvd3Nlci5zdmc/InoiOiJ4Iil9fSksby5wb2x5Z29uPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIG5ldyBvLlBvbHlnb24odCxlKX0sZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQpe3JldHVybiBvLkZlYXR1cmVHcm91cC5leHRlbmQoe2luaXRpYWxpemU6ZnVuY3Rpb24odCxlKXt0aGlzLl9sYXllcnM9e30sdGhpcy5fb3B0aW9ucz1lLHRoaXMuc2V0TGF0TG5ncyh0KX0sc2V0TGF0TG5nczpmdW5jdGlvbihlKXt2YXIgaT0wLG49ZS5sZW5ndGg7Zm9yKHRoaXMuZWFjaExheWVyKGZ1bmN0aW9uKHQpe24+aT90LnNldExhdExuZ3MoZVtpKytdKTp0aGlzLnJlbW92ZUxheWVyKHQpfSx0aGlzKTtuPmk7KXRoaXMuYWRkTGF5ZXIobmV3IHQoZVtpKytdLHRoaXMuX29wdGlvbnMpKTtyZXR1cm4gdGhpc30sZ2V0TGF0TG5nczpmdW5jdGlvbigpe3ZhciB0PVtdO3JldHVybiB0aGlzLmVhY2hMYXllcihmdW5jdGlvbihlKXt0LnB1c2goZS5nZXRMYXRMbmdzKCkpfSksdH19KX1vLk11bHRpUG9seWxpbmU9dChvLlBvbHlsaW5lKSxvLk11bHRpUG9seWdvbj10KG8uUG9seWdvbiksby5tdWx0aVBvbHlsaW5lPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIG5ldyBvLk11bHRpUG9seWxpbmUodCxlKX0sby5tdWx0aVBvbHlnb249ZnVuY3Rpb24odCxlKXtyZXR1cm4gbmV3IG8uTXVsdGlQb2x5Z29uKHQsZSl9fSgpLG8uUmVjdGFuZ2xlPW8uUG9seWdvbi5leHRlbmQoe2luaXRpYWxpemU6ZnVuY3Rpb24odCxlKXtvLlBvbHlnb24ucHJvdG90eXBlLmluaXRpYWxpemUuY2FsbCh0aGlzLHRoaXMuX2JvdW5kc1RvTGF0TG5ncyh0KSxlKX0sc2V0Qm91bmRzOmZ1bmN0aW9uKHQpe3RoaXMuc2V0TGF0TG5ncyh0aGlzLl9ib3VuZHNUb0xhdExuZ3ModCkpfSxfYm91bmRzVG9MYXRMbmdzOmZ1bmN0aW9uKHQpe3JldHVybiB0PW8ubGF0TG5nQm91bmRzKHQpLFt0LmdldFNvdXRoV2VzdCgpLHQuZ2V0Tm9ydGhXZXN0KCksdC5nZXROb3J0aEVhc3QoKSx0LmdldFNvdXRoRWFzdCgpXX19KSxvLnJlY3RhbmdsZT1mdW5jdGlvbih0LGUpe3JldHVybiBuZXcgby5SZWN0YW5nbGUodCxlKX0sby5DaXJjbGU9by5QYXRoLmV4dGVuZCh7aW5pdGlhbGl6ZTpmdW5jdGlvbih0LGUsaSl7by5QYXRoLnByb3RvdHlwZS5pbml0aWFsaXplLmNhbGwodGhpcyxpKSx0aGlzLl9sYXRsbmc9by5sYXRMbmcodCksdGhpcy5fbVJhZGl1cz1lfSxvcHRpb25zOntmaWxsOiEwfSxzZXRMYXRMbmc6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX2xhdGxuZz1vLmxhdExuZyh0KSx0aGlzLnJlZHJhdygpfSxzZXRSYWRpdXM6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX21SYWRpdXM9dCx0aGlzLnJlZHJhdygpfSxwcm9qZWN0TGF0bG5nczpmdW5jdGlvbigpe3ZhciB0PXRoaXMuX2dldExuZ1JhZGl1cygpLGU9dGhpcy5fbGF0bG5nLGk9dGhpcy5fbWFwLmxhdExuZ1RvTGF5ZXJQb2ludChbZS5sYXQsZS5sbmctdF0pO3RoaXMuX3BvaW50PXRoaXMuX21hcC5sYXRMbmdUb0xheWVyUG9pbnQoZSksdGhpcy5fcmFkaXVzPU1hdGgubWF4KHRoaXMuX3BvaW50LngtaS54LDEpfSxnZXRCb3VuZHM6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9nZXRMbmdSYWRpdXMoKSxlPXRoaXMuX21SYWRpdXMvNDAwNzUwMTcqMzYwLGk9dGhpcy5fbGF0bG5nO3JldHVybiBuZXcgby5MYXRMbmdCb3VuZHMoW2kubGF0LWUsaS5sbmctdF0sW2kubGF0K2UsaS5sbmcrdF0pfSxnZXRMYXRMbmc6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbGF0bG5nfSxnZXRQYXRoU3RyaW5nOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fcG9pbnQsZT10aGlzLl9yYWRpdXM7cmV0dXJuIHRoaXMuX2NoZWNrSWZFbXB0eSgpPyIiOm8uQnJvd3Nlci5zdmc/Ik0iK3QueCsiLCIrKHQueS1lKSsiQSIrZSsiLCIrZSsiLDAsMSwxLCIrKHQueC0uMSkrIiwiKyh0LnktZSkrIiB6IjoodC5fcm91bmQoKSxlPU1hdGgucm91bmQoZSksIkFMICIrdC54KyIsIit0LnkrIiAiK2UrIiwiK2UrIiAwLDIzNTkyNjAwIil9LGdldFJhZGl1czpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9tUmFkaXVzfSxfZ2V0TGF0UmFkaXVzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX21SYWRpdXMvNDAwNzUwMTcqMzYwfSxfZ2V0TG5nUmFkaXVzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2dldExhdFJhZGl1cygpL01hdGguY29zKG8uTGF0TG5nLkRFR19UT19SQUQqdGhpcy5fbGF0bG5nLmxhdCl9LF9jaGVja0lmRW1wdHk6ZnVuY3Rpb24oKXtpZighdGhpcy5fbWFwKXJldHVybiExO3ZhciB0PXRoaXMuX21hcC5fcGF0aFZpZXdwb3J0LGU9dGhpcy5fcmFkaXVzLGk9dGhpcy5fcG9pbnQ7cmV0dXJuIGkueC1lPnQubWF4Lnh8fGkueS1lPnQubWF4Lnl8fGkueCtlPHQubWluLnh8fGkueStlPHQubWluLnl9fSksby5jaXJjbGU9ZnVuY3Rpb24odCxlLGkpe3JldHVybiBuZXcgby5DaXJjbGUodCxlLGkpfSxvLkNpcmNsZU1hcmtlcj1vLkNpcmNsZS5leHRlbmQoe29wdGlvbnM6e3JhZGl1czoxMCx3ZWlnaHQ6Mn0saW5pdGlhbGl6ZTpmdW5jdGlvbih0LGUpe28uQ2lyY2xlLnByb3RvdHlwZS5pbml0aWFsaXplLmNhbGwodGhpcyx0LG51bGwsZSksdGhpcy5fcmFkaXVzPXRoaXMub3B0aW9ucy5yYWRpdXN9LHByb2plY3RMYXRsbmdzOmZ1bmN0aW9uKCl7dGhpcy5fcG9pbnQ9dGhpcy5fbWFwLmxhdExuZ1RvTGF5ZXJQb2ludCh0aGlzLl9sYXRsbmcpfSxfdXBkYXRlU3R5bGU6ZnVuY3Rpb24oKXtvLkNpcmNsZS5wcm90b3R5cGUuX3VwZGF0ZVN0eWxlLmNhbGwodGhpcyksdGhpcy5zZXRSYWRpdXModGhpcy5vcHRpb25zLnJhZGl1cyl9LHNldExhdExuZzpmdW5jdGlvbih0KXtyZXR1cm4gby5DaXJjbGUucHJvdG90eXBlLnNldExhdExuZy5jYWxsKHRoaXMsdCksdGhpcy5fcG9wdXAmJnRoaXMuX3BvcHVwLl9pc09wZW4mJnRoaXMuX3BvcHVwLnNldExhdExuZyh0KSx0aGlzfSxzZXRSYWRpdXM6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMub3B0aW9ucy5yYWRpdXM9dGhpcy5fcmFkaXVzPXQsdGhpcy5yZWRyYXcoKX0sZ2V0UmFkaXVzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3JhZGl1c319KSxvLmNpcmNsZU1hcmtlcj1mdW5jdGlvbih0LGUpe3JldHVybiBuZXcgby5DaXJjbGVNYXJrZXIodCxlKX0sby5Qb2x5bGluZS5pbmNsdWRlKG8uUGF0aC5DQU5WQVM/e19jb250YWluc1BvaW50OmZ1bmN0aW9uKHQsZSl7dmFyIGksbixzLGEscixoLGwsdT10aGlzLm9wdGlvbnMud2VpZ2h0LzI7Zm9yKG8uQnJvd3Nlci50b3VjaCYmKHUrPTEwKSxpPTAsYT10aGlzLl9wYXJ0cy5sZW5ndGg7YT5pO2krKylmb3IobD10aGlzLl9wYXJ0c1tpXSxuPTAscj1sLmxlbmd0aCxzPXItMTtyPm47cz1uKyspaWYoKGV8fDAhPT1uKSYmKGg9by5MaW5lVXRpbC5wb2ludFRvU2VnbWVudERpc3RhbmNlKHQsbFtzXSxsW25dKSx1Pj1oKSlyZXR1cm4hMDtyZXR1cm4hMX19Ont9KSxvLlBvbHlnb24uaW5jbHVkZShvLlBhdGguQ0FOVkFTP3tfY29udGFpbnNQb2ludDpmdW5jdGlvbih0KXt2YXIgZSxpLG4scyxhLHIsaCxsLHU9ITE7aWYoby5Qb2x5bGluZS5wcm90b3R5cGUuX2NvbnRhaW5zUG9pbnQuY2FsbCh0aGlzLHQsITApKXJldHVybiEwO2ZvcihzPTAsaD10aGlzLl9wYXJ0cy5sZW5ndGg7aD5zO3MrKylmb3IoZT10aGlzLl9wYXJ0c1tzXSxhPTAsbD1lLmxlbmd0aCxyPWwtMTtsPmE7cj1hKyspaT1lW2FdLG49ZVtyXSxpLnk+dC55IT1uLnk+dC55JiZ0Lng8KG4ueC1pLngpKih0LnktaS55KS8obi55LWkueSkraS54JiYodT0hdSk7cmV0dXJuIHV9fTp7fSksby5DaXJjbGUuaW5jbHVkZShvLlBhdGguQ0FOVkFTP3tfZHJhd1BhdGg6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9wb2ludDt0aGlzLl9jdHguYmVnaW5QYXRoKCksdGhpcy5fY3R4LmFyYyh0LngsdC55LHRoaXMuX3JhZGl1cywwLDIqTWF0aC5QSSwhMSl9LF9jb250YWluc1BvaW50OmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX3BvaW50LGk9dGhpcy5vcHRpb25zLnN0cm9rZT90aGlzLm9wdGlvbnMud2VpZ2h0LzI6MDtyZXR1cm4gdC5kaXN0YW5jZVRvKGUpPD10aGlzLl9yYWRpdXMraX19Ont9KSxvLkNpcmNsZU1hcmtlci5pbmNsdWRlKG8uUGF0aC5DQU5WQVM/e191cGRhdGVTdHlsZTpmdW5jdGlvbigpe28uUGF0aC5wcm90b3R5cGUuX3VwZGF0ZVN0eWxlLmNhbGwodGhpcyl9fTp7fSksby5HZW9KU09OPW8uRmVhdHVyZUdyb3VwLmV4dGVuZCh7aW5pdGlhbGl6ZTpmdW5jdGlvbih0LGUpe28uc2V0T3B0aW9ucyh0aGlzLGUpLHRoaXMuX2xheWVycz17fSx0JiZ0aGlzLmFkZERhdGEodCl9LGFkZERhdGE6ZnVuY3Rpb24odCl7dmFyIGUsaSxuLHM9by5VdGlsLmlzQXJyYXkodCk/dDp0LmZlYXR1cmVzO2lmKHMpe2ZvcihlPTAsaT1zLmxlbmd0aDtpPmU7ZSsrKW49c1tlXSwobi5nZW9tZXRyaWVzfHxuLmdlb21ldHJ5fHxuLmZlYXR1cmVzfHxuLmNvb3JkaW5hdGVzKSYmdGhpcy5hZGREYXRhKHNbZV0pO3JldHVybiB0aGlzfXZhciBhPXRoaXMub3B0aW9ucztpZighYS5maWx0ZXJ8fGEuZmlsdGVyKHQpKXt2YXIgcj1vLkdlb0pTT04uZ2VvbWV0cnlUb0xheWVyKHQsYS5wb2ludFRvTGF5ZXIsYS5jb29yZHNUb0xhdExuZyxhKTtyZXR1cm4gci5mZWF0dXJlPW8uR2VvSlNPTi5hc0ZlYXR1cmUodCksci5kZWZhdWx0T3B0aW9ucz1yLm9wdGlvbnMsdGhpcy5yZXNldFN0eWxlKHIpLGEub25FYWNoRmVhdHVyZSYmYS5vbkVhY2hGZWF0dXJlKHQsciksdGhpcy5hZGRMYXllcihyKX19LHJlc2V0U3R5bGU6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5vcHRpb25zLnN0eWxlO2UmJihvLlV0aWwuZXh0ZW5kKHQub3B0aW9ucyx0LmRlZmF1bHRPcHRpb25zKSx0aGlzLl9zZXRMYXllclN0eWxlKHQsZSkpfSxzZXRTdHlsZTpmdW5jdGlvbih0KXt0aGlzLmVhY2hMYXllcihmdW5jdGlvbihlKXt0aGlzLl9zZXRMYXllclN0eWxlKGUsdCl9LHRoaXMpfSxfc2V0TGF5ZXJTdHlsZTpmdW5jdGlvbih0LGUpeyJmdW5jdGlvbiI9PXR5cGVvZiBlJiYoZT1lKHQuZmVhdHVyZSkpLHQuc2V0U3R5bGUmJnQuc2V0U3R5bGUoZSl9fSksby5leHRlbmQoby5HZW9KU09OLHtnZW9tZXRyeVRvTGF5ZXI6ZnVuY3Rpb24odCxlLGksbil7dmFyIHMsYSxyLGgsbD0iRmVhdHVyZSI9PT10LnR5cGU/dC5nZW9tZXRyeTp0LHU9bC5jb29yZGluYXRlcyxjPVtdO3N3aXRjaChpPWl8fHRoaXMuY29vcmRzVG9MYXRMbmcsbC50eXBlKXtjYXNlIlBvaW50IjpyZXR1cm4gcz1pKHUpLGU/ZSh0LHMpOm5ldyBvLk1hcmtlcihzKTtjYXNlIk11bHRpUG9pbnQiOmZvcihyPTAsaD11Lmxlbmd0aDtoPnI7cisrKXM9aSh1W3JdKSxjLnB1c2goZT9lKHQscyk6bmV3IG8uTWFya2VyKHMpKTtyZXR1cm4gbmV3IG8uRmVhdHVyZUdyb3VwKGMpO2Nhc2UiTGluZVN0cmluZyI6cmV0dXJuIGE9dGhpcy5jb29yZHNUb0xhdExuZ3ModSwwLGkpLG5ldyBvLlBvbHlsaW5lKGEsbik7Y2FzZSJQb2x5Z29uIjppZigyPT09dS5sZW5ndGgmJiF1WzFdLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgR2VvSlNPTiBvYmplY3QuIik7cmV0dXJuIGE9dGhpcy5jb29yZHNUb0xhdExuZ3ModSwxLGkpLG5ldyBvLlBvbHlnb24oYSxuKTtjYXNlIk11bHRpTGluZVN0cmluZyI6cmV0dXJuIGE9dGhpcy5jb29yZHNUb0xhdExuZ3ModSwxLGkpLG5ldyBvLk11bHRpUG9seWxpbmUoYSxuKTtjYXNlIk11bHRpUG9seWdvbiI6cmV0dXJuIGE9dGhpcy5jb29yZHNUb0xhdExuZ3ModSwyLGkpLG5ldyBvLk11bHRpUG9seWdvbihhLG4pO2Nhc2UiR2VvbWV0cnlDb2xsZWN0aW9uIjpmb3Iocj0wLGg9bC5nZW9tZXRyaWVzLmxlbmd0aDtoPnI7cisrKWMucHVzaCh0aGlzLmdlb21ldHJ5VG9MYXllcih7Z2VvbWV0cnk6bC5nZW9tZXRyaWVzW3JdLHR5cGU6IkZlYXR1cmUiLHByb3BlcnRpZXM6dC5wcm9wZXJ0aWVzfSxlLGksbikpO3JldHVybiBuZXcgby5GZWF0dXJlR3JvdXAoYyk7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgR2VvSlNPTiBvYmplY3QuIil9fSxjb29yZHNUb0xhdExuZzpmdW5jdGlvbih0KXtyZXR1cm4gbmV3IG8uTGF0TG5nKHRbMV0sdFswXSx0WzJdKX0sY29vcmRzVG9MYXRMbmdzOmZ1bmN0aW9uKHQsZSxpKXt2YXIgbixvLHMsYT1bXTtmb3Iobz0wLHM9dC5sZW5ndGg7cz5vO28rKyluPWU/dGhpcy5jb29yZHNUb0xhdExuZ3ModFtvXSxlLTEsaSk6KGl8fHRoaXMuY29vcmRzVG9MYXRMbmcpKHRbb10pLGEucHVzaChuKTtyZXR1cm4gYX0sbGF0TG5nVG9Db29yZHM6ZnVuY3Rpb24odCl7dmFyIGU9W3QubG5nLHQubGF0XTtyZXR1cm4gdC5hbHQhPT1pJiZlLnB1c2godC5hbHQpLGV9LGxhdExuZ3NUb0Nvb3JkczpmdW5jdGlvbih0KXtmb3IodmFyIGU9W10saT0wLG49dC5sZW5ndGg7bj5pO2krKyllLnB1c2goby5HZW9KU09OLmxhdExuZ1RvQ29vcmRzKHRbaV0pKTtyZXR1cm4gZX0sZ2V0RmVhdHVyZTpmdW5jdGlvbih0LGUpe3JldHVybiB0LmZlYXR1cmU/by5leHRlbmQoe30sdC5mZWF0dXJlLHtnZW9tZXRyeTplfSk6by5HZW9KU09OLmFzRmVhdHVyZShlKX0sYXNGZWF0dXJlOmZ1bmN0aW9uKHQpe3JldHVybiJGZWF0dXJlIj09PXQudHlwZT90Ont0eXBlOiJGZWF0dXJlIixwcm9wZXJ0aWVzOnt9LGdlb21ldHJ5OnR9fX0pO3ZhciBhPXt0b0dlb0pTT046ZnVuY3Rpb24oKXtyZXR1cm4gby5HZW9KU09OLmdldEZlYXR1cmUodGhpcyx7dHlwZToiUG9pbnQiLGNvb3JkaW5hdGVzOm8uR2VvSlNPTi5sYXRMbmdUb0Nvb3Jkcyh0aGlzLmdldExhdExuZygpKX0pfX07by5NYXJrZXIuaW5jbHVkZShhKSxvLkNpcmNsZS5pbmNsdWRlKGEpLG8uQ2lyY2xlTWFya2VyLmluY2x1ZGUoYSksby5Qb2x5bGluZS5pbmNsdWRlKHt0b0dlb0pTT046ZnVuY3Rpb24oKXtyZXR1cm4gby5HZW9KU09OLmdldEZlYXR1cmUodGhpcyx7dHlwZToiTGluZVN0cmluZyIsY29vcmRpbmF0ZXM6by5HZW9KU09OLmxhdExuZ3NUb0Nvb3Jkcyh0aGlzLmdldExhdExuZ3MoKSl9KX19KSxvLlBvbHlnb24uaW5jbHVkZSh7dG9HZW9KU09OOmZ1bmN0aW9uKCl7dmFyIHQsZSxpLG49W28uR2VvSlNPTi5sYXRMbmdzVG9Db29yZHModGhpcy5nZXRMYXRMbmdzKCkpXTtpZihuWzBdLnB1c2goblswXVswXSksdGhpcy5faG9sZXMpZm9yKHQ9MCxlPXRoaXMuX2hvbGVzLmxlbmd0aDtlPnQ7dCsrKWk9by5HZW9KU09OLmxhdExuZ3NUb0Nvb3Jkcyh0aGlzLl9ob2xlc1t0XSksaS5wdXNoKGlbMF0pLG4ucHVzaChpKTtyZXR1cm4gby5HZW9KU09OLmdldEZlYXR1cmUodGhpcyx7dHlwZToiUG9seWdvbiIsY29vcmRpbmF0ZXM6bn0pfX0pLGZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0KXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgZT1bXTtyZXR1cm4gdGhpcy5lYWNoTGF5ZXIoZnVuY3Rpb24odCl7ZS5wdXNoKHQudG9HZW9KU09OKCkuZ2VvbWV0cnkuY29vcmRpbmF0ZXMpfSksby5HZW9KU09OLmdldEZlYXR1cmUodGhpcyx7dHlwZTp0LGNvb3JkaW5hdGVzOmV9KX19by5NdWx0aVBvbHlsaW5lLmluY2x1ZGUoe3RvR2VvSlNPTjp0KCJNdWx0aUxpbmVTdHJpbmciKX0pLG8uTXVsdGlQb2x5Z29uLmluY2x1ZGUoe3RvR2VvSlNPTjp0KCJNdWx0aVBvbHlnb24iKX0pLG8uTGF5ZXJHcm91cC5pbmNsdWRlKHt0b0dlb0pTT046ZnVuY3Rpb24oKXt2YXIgZSxpPXRoaXMuZmVhdHVyZSYmdGhpcy5mZWF0dXJlLmdlb21ldHJ5LG49W107aWYoaSYmIk11bHRpUG9pbnQiPT09aS50eXBlKXJldHVybiB0KCJNdWx0aVBvaW50IikuY2FsbCh0aGlzKTt2YXIgcz1pJiYiR2VvbWV0cnlDb2xsZWN0aW9uIj09PWkudHlwZTtyZXR1cm4gdGhpcy5lYWNoTGF5ZXIoZnVuY3Rpb24odCl7dC50b0dlb0pTT04mJihlPXQudG9HZW9KU09OKCksbi5wdXNoKHM/ZS5nZW9tZXRyeTpvLkdlb0pTT04uYXNGZWF0dXJlKGUpKSl9KSxzP28uR2VvSlNPTi5nZXRGZWF0dXJlKHRoaXMse2dlb21ldHJpZXM6bix0eXBlOiJHZW9tZXRyeUNvbGxlY3Rpb24ifSk6e3R5cGU6IkZlYXR1cmVDb2xsZWN0aW9uIixmZWF0dXJlczpufX19KX0oKSxvLmdlb0pzb249ZnVuY3Rpb24odCxlKXtyZXR1cm4gbmV3IG8uR2VvSlNPTih0LGUpfSxvLkRvbUV2ZW50PXthZGRMaXN0ZW5lcjpmdW5jdGlvbih0LGUsaSxuKXt2YXIgcyxhLHIsaD1vLnN0YW1wKGkpLGw9Il9sZWFmbGV0XyIrZStoO3JldHVybiB0W2xdP3RoaXM6KHM9ZnVuY3Rpb24oZSl7cmV0dXJuIGkuY2FsbChufHx0LGV8fG8uRG9tRXZlbnQuX2dldEV2ZW50KCkpfSxvLkJyb3dzZXIucG9pbnRlciYmMD09PWUuaW5kZXhPZigidG91Y2giKT90aGlzLmFkZFBvaW50ZXJMaXN0ZW5lcih0LGUscyxoKTooby5Ccm93c2VyLnRvdWNoJiYiZGJsY2xpY2siPT09ZSYmdGhpcy5hZGREb3VibGVUYXBMaXN0ZW5lciYmdGhpcy5hZGREb3VibGVUYXBMaXN0ZW5lcih0LHMsaCksImFkZEV2ZW50TGlzdGVuZXIiaW4gdD8ibW91c2V3aGVlbCI9PT1lPyh0LmFkZEV2ZW50TGlzdGVuZXIoIkRPTU1vdXNlU2Nyb2xsIixzLCExKSx0LmFkZEV2ZW50TGlzdGVuZXIoZSxzLCExKSk6Im1vdXNlZW50ZXIiPT09ZXx8Im1vdXNlbGVhdmUiPT09ZT8oYT1zLHI9Im1vdXNlZW50ZXIiPT09ZT8ibW91c2VvdmVyIjoibW91c2VvdXQiLHM9ZnVuY3Rpb24oZSl7cmV0dXJuIG8uRG9tRXZlbnQuX2NoZWNrTW91c2UodCxlKT9hKGUpOnZvaWQgMH0sdC5hZGRFdmVudExpc3RlbmVyKHIscywhMSkpOiJjbGljayI9PT1lJiZvLkJyb3dzZXIuYW5kcm9pZD8oYT1zLHM9ZnVuY3Rpb24odCl7cmV0dXJuIG8uRG9tRXZlbnQuX2ZpbHRlckNsaWNrKHQsYSl9LHQuYWRkRXZlbnRMaXN0ZW5lcihlLHMsITEpKTp0LmFkZEV2ZW50TGlzdGVuZXIoZSxzLCExKToiYXR0YWNoRXZlbnQiaW4gdCYmdC5hdHRhY2hFdmVudCgib24iK2UscyksdFtsXT1zLHRoaXMpKX0scmVtb3ZlTGlzdGVuZXI6ZnVuY3Rpb24odCxlLGkpe3ZhciBuPW8uc3RhbXAoaSkscz0iX2xlYWZsZXRfIitlK24sYT10W3NdO3JldHVybiBhPyhvLkJyb3dzZXIucG9pbnRlciYmMD09PWUuaW5kZXhPZigidG91Y2giKT90aGlzLnJlbW92ZVBvaW50ZXJMaXN0ZW5lcih0LGUsbik6by5Ccm93c2VyLnRvdWNoJiYiZGJsY2xpY2siPT09ZSYmdGhpcy5yZW1vdmVEb3VibGVUYXBMaXN0ZW5lcj90aGlzLnJlbW92ZURvdWJsZVRhcExpc3RlbmVyKHQsbik6InJlbW92ZUV2ZW50TGlzdGVuZXIiaW4gdD8ibW91c2V3aGVlbCI9PT1lPyh0LnJlbW92ZUV2ZW50TGlzdGVuZXIoIkRPTU1vdXNlU2Nyb2xsIixhLCExKSx0LnJlbW92ZUV2ZW50TGlzdGVuZXIoZSxhLCExKSk6Im1vdXNlZW50ZXIiPT09ZXx8Im1vdXNlbGVhdmUiPT09ZT90LnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1vdXNlZW50ZXIiPT09ZT8ibW91c2VvdmVyIjoibW91c2VvdXQiLGEsITEpOnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihlLGEsITEpOiJkZXRhY2hFdmVudCJpbiB0JiZ0LmRldGFjaEV2ZW50KCJvbiIrZSxhKSx0W3NdPW51bGwsdGhpcyk6dGhpc30sc3RvcFByb3BhZ2F0aW9uOmZ1bmN0aW9uKHQpe3JldHVybiB0LnN0b3BQcm9wYWdhdGlvbj90LnN0b3BQcm9wYWdhdGlvbigpOnQuY2FuY2VsQnViYmxlPSEwLG8uRG9tRXZlbnQuX3NraXBwZWQodCksdGhpc30sZGlzYWJsZVNjcm9sbFByb3BhZ2F0aW9uOmZ1bmN0aW9uKHQpe3ZhciBlPW8uRG9tRXZlbnQuc3RvcFByb3BhZ2F0aW9uO3JldHVybiBvLkRvbUV2ZW50Lm9uKHQsIm1vdXNld2hlZWwiLGUpLm9uKHQsIk1vek1vdXNlUGl4ZWxTY3JvbGwiLGUpfSxkaXNhYmxlQ2xpY2tQcm9wYWdhdGlvbjpmdW5jdGlvbih0KXtmb3IodmFyIGU9by5Eb21FdmVudC5zdG9wUHJvcGFnYXRpb24saT1vLkRyYWdnYWJsZS5TVEFSVC5sZW5ndGgtMTtpPj0wO2ktLSlvLkRvbUV2ZW50Lm9uKHQsby5EcmFnZ2FibGUuU1RBUlRbaV0sZSk7cmV0dXJuIG8uRG9tRXZlbnQub24odCwiY2xpY2siLG8uRG9tRXZlbnQuX2Zha2VTdG9wKS5vbih0LCJkYmxjbGljayIsZSl9LHByZXZlbnREZWZhdWx0OmZ1bmN0aW9uKHQpe3JldHVybiB0LnByZXZlbnREZWZhdWx0P3QucHJldmVudERlZmF1bHQoKTp0LnJldHVyblZhbHVlPSExLHRoaXN9LHN0b3A6ZnVuY3Rpb24odCl7cmV0dXJuIG8uRG9tRXZlbnQucHJldmVudERlZmF1bHQodCkuc3RvcFByb3BhZ2F0aW9uKHQpfSxnZXRNb3VzZVBvc2l0aW9uOmZ1bmN0aW9uKHQsZSl7aWYoIWUpcmV0dXJuIG5ldyBvLlBvaW50KHQuY2xpZW50WCx0LmNsaWVudFkpO3ZhciBpPWUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7cmV0dXJuIG5ldyBvLlBvaW50KHQuY2xpZW50WC1pLmxlZnQtZS5jbGllbnRMZWZ0LHQuY2xpZW50WS1pLnRvcC1lLmNsaWVudFRvcCl9LGdldFdoZWVsRGVsdGE6ZnVuY3Rpb24odCl7dmFyIGU9MDtyZXR1cm4gdC53aGVlbERlbHRhJiYoZT10LndoZWVsRGVsdGEvMTIwKSx0LmRldGFpbCYmKGU9LXQuZGV0YWlsLzMpLGV9LF9za2lwRXZlbnRzOnt9LF9mYWtlU3RvcDpmdW5jdGlvbih0KXtvLkRvbUV2ZW50Ll9za2lwRXZlbnRzW3QudHlwZV09ITB9LF9za2lwcGVkOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX3NraXBFdmVudHNbdC50eXBlXTtyZXR1cm4gdGhpcy5fc2tpcEV2ZW50c1t0LnR5cGVdPSExLGV9LF9jaGVja01vdXNlOmZ1bmN0aW9uKHQsZSl7dmFyIGk9ZS5yZWxhdGVkVGFyZ2V0O2lmKCFpKXJldHVybiEwO3RyeXtmb3IoO2kmJmkhPT10OylpPWkucGFyZW50Tm9kZX1jYXRjaChuKXtyZXR1cm4hMX1yZXR1cm4gaSE9PXR9LF9nZXRFdmVudDpmdW5jdGlvbigpe3ZhciBlPXQuZXZlbnQ7aWYoIWUpZm9yKHZhciBpPWFyZ3VtZW50cy5jYWxsZWUuY2FsbGVyO2kmJihlPWkuYXJndW1lbnRzWzBdLCFlfHx0LkV2ZW50IT09ZS5jb25zdHJ1Y3Rvcik7KWk9aS5jYWxsZXI7cmV0dXJuIGV9LF9maWx0ZXJDbGljazpmdW5jdGlvbih0LGUpe3ZhciBpPXQudGltZVN0YW1wfHx0Lm9yaWdpbmFsRXZlbnQudGltZVN0YW1wLG49by5Eb21FdmVudC5fbGFzdENsaWNrJiZpLW8uRG9tRXZlbnQuX2xhc3RDbGljaztyZXR1cm4gbiYmbj4xMDAmJjUwMD5ufHx0LnRhcmdldC5fc2ltdWxhdGVkQ2xpY2smJiF0Ll9zaW11bGF0ZWQ/dm9pZCBvLkRvbUV2ZW50LnN0b3AodCk6KG8uRG9tRXZlbnQuX2xhc3RDbGljaz1pLGUodCkpfX0sby5Eb21FdmVudC5vbj1vLkRvbUV2ZW50LmFkZExpc3RlbmVyLG8uRG9tRXZlbnQub2ZmPW8uRG9tRXZlbnQucmVtb3ZlTGlzdGVuZXIsby5EcmFnZ2FibGU9by5DbGFzcy5leHRlbmQoe2luY2x1ZGVzOm8uTWl4aW4uRXZlbnRzLHN0YXRpY3M6e1NUQVJUOm8uQnJvd3Nlci50b3VjaD9bInRvdWNoc3RhcnQiLCJtb3VzZWRvd24iXTpbIm1vdXNlZG93biJdLEVORDp7bW91c2Vkb3duOiJtb3VzZXVwIix0b3VjaHN0YXJ0OiJ0b3VjaGVuZCIscG9pbnRlcmRvd246InRvdWNoZW5kIixNU1BvaW50ZXJEb3duOiJ0b3VjaGVuZCJ9LE1PVkU6e21vdXNlZG93bjoibW91c2Vtb3ZlIix0b3VjaHN0YXJ0OiJ0b3VjaG1vdmUiLHBvaW50ZXJkb3duOiJ0b3VjaG1vdmUiLE1TUG9pbnRlckRvd246InRvdWNobW92ZSJ9fSxpbml0aWFsaXplOmZ1bmN0aW9uKHQsZSl7dGhpcy5fZWxlbWVudD10LHRoaXMuX2RyYWdTdGFydFRhcmdldD1lfHx0fSxlbmFibGU6ZnVuY3Rpb24oKXtpZighdGhpcy5fZW5hYmxlZCl7Zm9yKHZhciB0PW8uRHJhZ2dhYmxlLlNUQVJULmxlbmd0aC0xO3Q+PTA7dC0tKW8uRG9tRXZlbnQub24odGhpcy5fZHJhZ1N0YXJ0VGFyZ2V0LG8uRHJhZ2dhYmxlLlNUQVJUW3RdLHRoaXMuX29uRG93bix0aGlzKTt0aGlzLl9lbmFibGVkPSEwfX0sZGlzYWJsZTpmdW5jdGlvbigpe2lmKHRoaXMuX2VuYWJsZWQpe2Zvcih2YXIgdD1vLkRyYWdnYWJsZS5TVEFSVC5sZW5ndGgtMTt0Pj0wO3QtLSlvLkRvbUV2ZW50Lm9mZih0aGlzLl9kcmFnU3RhcnRUYXJnZXQsby5EcmFnZ2FibGUuU1RBUlRbdF0sdGhpcy5fb25Eb3duLHRoaXMpO3RoaXMuX2VuYWJsZWQ9ITEsdGhpcy5fbW92ZWQ9ITF9fSxfb25Eb3duOmZ1bmN0aW9uKHQpe2lmKHRoaXMuX21vdmVkPSExLCEodC5zaGlmdEtleXx8MSE9PXQud2hpY2gmJjEhPT10LmJ1dHRvbiYmIXQudG91Y2hlc3x8KG8uRG9tRXZlbnQuc3RvcFByb3BhZ2F0aW9uKHQpLG8uRHJhZ2dhYmxlLl9kaXNhYmxlZHx8KG8uRG9tVXRpbC5kaXNhYmxlSW1hZ2VEcmFnKCksby5Eb21VdGlsLmRpc2FibGVUZXh0U2VsZWN0aW9uKCksdGhpcy5fbW92aW5nKSkpKXt2YXIgaT10LnRvdWNoZXM/dC50b3VjaGVzWzBdOnQ7dGhpcy5fc3RhcnRQb2ludD1uZXcgby5Qb2ludChpLmNsaWVudFgsaS5jbGllbnRZKSx0aGlzLl9zdGFydFBvcz10aGlzLl9uZXdQb3M9by5Eb21VdGlsLmdldFBvc2l0aW9uKHRoaXMuX2VsZW1lbnQpLG8uRG9tRXZlbnQub24oZSxvLkRyYWdnYWJsZS5NT1ZFW3QudHlwZV0sdGhpcy5fb25Nb3ZlLHRoaXMpLm9uKGUsby5EcmFnZ2FibGUuRU5EW3QudHlwZV0sdGhpcy5fb25VcCx0aGlzKX19LF9vbk1vdmU6ZnVuY3Rpb24odCl7aWYodC50b3VjaGVzJiZ0LnRvdWNoZXMubGVuZ3RoPjEpcmV0dXJuIHZvaWQodGhpcy5fbW92ZWQ9ITApO3ZhciBpPXQudG91Y2hlcyYmMT09PXQudG91Y2hlcy5sZW5ndGg/dC50b3VjaGVzWzBdOnQsbj1uZXcgby5Qb2ludChpLmNsaWVudFgsaS5jbGllbnRZKSxzPW4uc3VidHJhY3QodGhpcy5fc3RhcnRQb2ludCk7KHMueHx8cy55KSYmKG8uQnJvd3Nlci50b3VjaCYmTWF0aC5hYnMocy54KStNYXRoLmFicyhzLnkpPDN8fChvLkRvbUV2ZW50LnByZXZlbnREZWZhdWx0KHQpLHRoaXMuX21vdmVkfHwodGhpcy5maXJlKCJkcmFnc3RhcnQiKSx0aGlzLl9tb3ZlZD0hMCx0aGlzLl9zdGFydFBvcz1vLkRvbVV0aWwuZ2V0UG9zaXRpb24odGhpcy5fZWxlbWVudCkuc3VidHJhY3Qocyksby5Eb21VdGlsLmFkZENsYXNzKGUuYm9keSwibGVhZmxldC1kcmFnZ2luZyIpLHRoaXMuX2xhc3RUYXJnZXQ9dC50YXJnZXR8fHQuc3JjRWxlbWVudCxvLkRvbVV0aWwuYWRkQ2xhc3ModGhpcy5fbGFzdFRhcmdldCwibGVhZmxldC1kcmFnLXRhcmdldCIpKSx0aGlzLl9uZXdQb3M9dGhpcy5fc3RhcnRQb3MuYWRkKHMpLHRoaXMuX21vdmluZz0hMCxvLlV0aWwuY2FuY2VsQW5pbUZyYW1lKHRoaXMuX2FuaW1SZXF1ZXN0KSx0aGlzLl9hbmltUmVxdWVzdD1vLlV0aWwucmVxdWVzdEFuaW1GcmFtZSh0aGlzLl91cGRhdGVQb3NpdGlvbix0aGlzLCEwLHRoaXMuX2RyYWdTdGFydFRhcmdldCkpKX0sX3VwZGF0ZVBvc2l0aW9uOmZ1bmN0aW9uKCl7dGhpcy5maXJlKCJwcmVkcmFnIiksby5Eb21VdGlsLnNldFBvc2l0aW9uKHRoaXMuX2VsZW1lbnQsdGhpcy5fbmV3UG9zKSx0aGlzLmZpcmUoImRyYWciKX0sX29uVXA6ZnVuY3Rpb24oKXtvLkRvbVV0aWwucmVtb3ZlQ2xhc3MoZS5ib2R5LCJsZWFmbGV0LWRyYWdnaW5nIiksdGhpcy5fbGFzdFRhcmdldCYmKG8uRG9tVXRpbC5yZW1vdmVDbGFzcyh0aGlzLl9sYXN0VGFyZ2V0LCJsZWFmbGV0LWRyYWctdGFyZ2V0IiksdGhpcy5fbGFzdFRhcmdldD1udWxsKTtmb3IodmFyIHQgaW4gby5EcmFnZ2FibGUuTU9WRSlvLkRvbUV2ZW50Lm9mZihlLG8uRHJhZ2dhYmxlLk1PVkVbdF0sdGhpcy5fb25Nb3ZlKS5vZmYoZSxvLkRyYWdnYWJsZS5FTkRbdF0sdGhpcy5fb25VcCk7by5Eb21VdGlsLmVuYWJsZUltYWdlRHJhZygpLG8uRG9tVXRpbC5lbmFibGVUZXh0U2VsZWN0aW9uKCksdGhpcy5fbW92ZWQmJnRoaXMuX21vdmluZyYmKG8uVXRpbC5jYW5jZWxBbmltRnJhbWUodGhpcy5fYW5pbVJlcXVlc3QpLHRoaXMuZmlyZSgiZHJhZ2VuZCIse2Rpc3RhbmNlOnRoaXMuX25ld1Bvcy5kaXN0YW5jZVRvKHRoaXMuX3N0YXJ0UG9zKX0pKSx0aGlzLl9tb3Zpbmc9ITF9fSksby5IYW5kbGVyPW8uQ2xhc3MuZXh0ZW5kKHtpbml0aWFsaXplOmZ1bmN0aW9uKHQpe3RoaXMuX21hcD10fSxlbmFibGU6ZnVuY3Rpb24oKXt0aGlzLl9lbmFibGVkfHwodGhpcy5fZW5hYmxlZD0hMCx0aGlzLmFkZEhvb2tzKCkpfSxkaXNhYmxlOmZ1bmN0aW9uKCl7dGhpcy5fZW5hYmxlZCYmKHRoaXMuX2VuYWJsZWQ9ITEsdGhpcy5yZW1vdmVIb29rcygpKX0sZW5hYmxlZDpmdW5jdGlvbigpe3JldHVybiEhdGhpcy5fZW5hYmxlZH19KSxvLk1hcC5tZXJnZU9wdGlvbnMoe2RyYWdnaW5nOiEwLGluZXJ0aWE6IW8uQnJvd3Nlci5hbmRyb2lkMjMsaW5lcnRpYURlY2VsZXJhdGlvbjozNDAwLGluZXJ0aWFNYXhTcGVlZDoxLzAsaW5lcnRpYVRocmVzaG9sZDpvLkJyb3dzZXIudG91Y2g/MzI6MTgsZWFzZUxpbmVhcml0eTouMjUsd29ybGRDb3B5SnVtcDohMX0pLG8uTWFwLkRyYWc9by5IYW5kbGVyLmV4dGVuZCh7YWRkSG9va3M6ZnVuY3Rpb24oKXtpZighdGhpcy5fZHJhZ2dhYmxlKXt2YXIgdD10aGlzLl9tYXA7dGhpcy5fZHJhZ2dhYmxlPW5ldyBvLkRyYWdnYWJsZSh0Ll9tYXBQYW5lLHQuX2NvbnRhaW5lciksdGhpcy5fZHJhZ2dhYmxlLm9uKHtkcmFnc3RhcnQ6dGhpcy5fb25EcmFnU3RhcnQsZHJhZzp0aGlzLl9vbkRyYWcsZHJhZ2VuZDp0aGlzLl9vbkRyYWdFbmR9LHRoaXMpLHQub3B0aW9ucy53b3JsZENvcHlKdW1wJiYodGhpcy5fZHJhZ2dhYmxlLm9uKCJwcmVkcmFnIix0aGlzLl9vblByZURyYWcsdGhpcyksdC5vbigidmlld3Jlc2V0Iix0aGlzLl9vblZpZXdSZXNldCx0aGlzKSx0LndoZW5SZWFkeSh0aGlzLl9vblZpZXdSZXNldCx0aGlzKSl9dGhpcy5fZHJhZ2dhYmxlLmVuYWJsZSgpfSxyZW1vdmVIb29rczpmdW5jdGlvbigpe3RoaXMuX2RyYWdnYWJsZS5kaXNhYmxlKCl9LG1vdmVkOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2RyYWdnYWJsZSYmdGhpcy5fZHJhZ2dhYmxlLl9tb3ZlZH0sX29uRHJhZ1N0YXJ0OmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fbWFwO3QuX3BhbkFuaW0mJnQuX3BhbkFuaW0uc3RvcCgpLHQuZmlyZSgibW92ZXN0YXJ0IikuZmlyZSgiZHJhZ3N0YXJ0IiksdC5vcHRpb25zLmluZXJ0aWEmJih0aGlzLl9wb3NpdGlvbnM9W10sdGhpcy5fdGltZXM9W10pfSxfb25EcmFnOmZ1bmN0aW9uKCl7aWYodGhpcy5fbWFwLm9wdGlvbnMuaW5lcnRpYSl7dmFyIHQ9dGhpcy5fbGFzdFRpbWU9K25ldyBEYXRlLGU9dGhpcy5fbGFzdFBvcz10aGlzLl9kcmFnZ2FibGUuX25ld1Bvczt0aGlzLl9wb3NpdGlvbnMucHVzaChlKSx0aGlzLl90aW1lcy5wdXNoKHQpLHQtdGhpcy5fdGltZXNbMF0+MjAwJiYodGhpcy5fcG9zaXRpb25zLnNoaWZ0KCksdGhpcy5fdGltZXMuc2hpZnQoKSl9dGhpcy5fbWFwLmZpcmUoIm1vdmUiKS5maXJlKCJkcmFnIil9LF9vblZpZXdSZXNldDpmdW5jdGlvbigpe3ZhciB0PXRoaXMuX21hcC5nZXRTaXplKCkuX2RpdmlkZUJ5KDIpLGU9dGhpcy5fbWFwLmxhdExuZ1RvTGF5ZXJQb2ludChbMCwwXSk7dGhpcy5faW5pdGlhbFdvcmxkT2Zmc2V0PWUuc3VidHJhY3QodCkueCx0aGlzLl93b3JsZFdpZHRoPXRoaXMuX21hcC5wcm9qZWN0KFswLDE4MF0pLnh9LF9vblByZURyYWc6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl93b3JsZFdpZHRoLGU9TWF0aC5yb3VuZCh0LzIpLGk9dGhpcy5faW5pdGlhbFdvcmxkT2Zmc2V0LG49dGhpcy5fZHJhZ2dhYmxlLl9uZXdQb3MueCxvPShuLWUraSkldCtlLWkscz0obitlK2kpJXQtZS1pLGE9TWF0aC5hYnMobytpKTxNYXRoLmFicyhzK2kpP286czt0aGlzLl9kcmFnZ2FibGUuX25ld1Bvcy54PWF9LF9vbkRyYWdFbmQ6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fbWFwLGk9ZS5vcHRpb25zLG49K25ldyBEYXRlLXRoaXMuX2xhc3RUaW1lLHM9IWkuaW5lcnRpYXx8bj5pLmluZXJ0aWFUaHJlc2hvbGR8fCF0aGlzLl9wb3NpdGlvbnNbMF07aWYoZS5maXJlKCJkcmFnZW5kIix0KSxzKWUuZmlyZSgibW92ZWVuZCIpO2Vsc2V7dmFyIGE9dGhpcy5fbGFzdFBvcy5zdWJ0cmFjdCh0aGlzLl9wb3NpdGlvbnNbMF0pLHI9KHRoaXMuX2xhc3RUaW1lK24tdGhpcy5fdGltZXNbMF0pLzFlMyxoPWkuZWFzZUxpbmVhcml0eSxsPWEubXVsdGlwbHlCeShoL3IpLHU9bC5kaXN0YW5jZVRvKFswLDBdKSxjPU1hdGgubWluKGkuaW5lcnRpYU1heFNwZWVkLHUpLGQ9bC5tdWx0aXBseUJ5KGMvdSkscD1jLyhpLmluZXJ0aWFEZWNlbGVyYXRpb24qaCksXz1kLm11bHRpcGx5QnkoLXAvMikucm91bmQoKTtfLngmJl8ueT8oXz1lLl9saW1pdE9mZnNldChfLGUub3B0aW9ucy5tYXhCb3VuZHMpLG8uVXRpbC5yZXF1ZXN0QW5pbUZyYW1lKGZ1bmN0aW9uKCl7ZS5wYW5CeShfLHtkdXJhdGlvbjpwLGVhc2VMaW5lYXJpdHk6aCxub01vdmVTdGFydDohMH0pfSkpOmUuZmlyZSgibW92ZWVuZCIpfX19KSxvLk1hcC5hZGRJbml0SG9vaygiYWRkSGFuZGxlciIsImRyYWdnaW5nIixvLk1hcC5EcmFnKSxvLk1hcC5tZXJnZU9wdGlvbnMoe2RvdWJsZUNsaWNrWm9vbTohMH0pLG8uTWFwLkRvdWJsZUNsaWNrWm9vbT1vLkhhbmRsZXIuZXh0ZW5kKHthZGRIb29rczpmdW5jdGlvbigpe3RoaXMuX21hcC5vbigiZGJsY2xpY2siLHRoaXMuX29uRG91YmxlQ2xpY2ssdGhpcyl9LHJlbW92ZUhvb2tzOmZ1bmN0aW9uKCl7dGhpcy5fbWFwLm9mZigiZGJsY2xpY2siLHRoaXMuX29uRG91YmxlQ2xpY2ssdGhpcyl9LF9vbkRvdWJsZUNsaWNrOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX21hcCxpPWUuZ2V0Wm9vbSgpKyh0Lm9yaWdpbmFsRXZlbnQuc2hpZnRLZXk/LTE6MSk7ImNlbnRlciI9PT1lLm9wdGlvbnMuZG91YmxlQ2xpY2tab29tP2Uuc2V0Wm9vbShpKTplLnNldFpvb21Bcm91bmQodC5jb250YWluZXJQb2ludCxpKX19KSxvLk1hcC5hZGRJbml0SG9vaygiYWRkSGFuZGxlciIsImRvdWJsZUNsaWNrWm9vbSIsby5NYXAuRG91YmxlQ2xpY2tab29tKSxvLk1hcC5tZXJnZU9wdGlvbnMoe3Njcm9sbFdoZWVsWm9vbTohMH0pLG8uTWFwLlNjcm9sbFdoZWVsWm9vbT1vLkhhbmRsZXIuZXh0ZW5kKHthZGRIb29rczpmdW5jdGlvbigpe28uRG9tRXZlbnQub24odGhpcy5fbWFwLl9jb250YWluZXIsIm1vdXNld2hlZWwiLHRoaXMuX29uV2hlZWxTY3JvbGwsdGhpcyksby5Eb21FdmVudC5vbih0aGlzLl9tYXAuX2NvbnRhaW5lciwiTW96TW91c2VQaXhlbFNjcm9sbCIsby5Eb21FdmVudC5wcmV2ZW50RGVmYXVsdCksdGhpcy5fZGVsdGE9MH0scmVtb3ZlSG9va3M6ZnVuY3Rpb24oKXtvLkRvbUV2ZW50Lm9mZih0aGlzLl9tYXAuX2NvbnRhaW5lciwibW91c2V3aGVlbCIsdGhpcy5fb25XaGVlbFNjcm9sbCksby5Eb21FdmVudC5vZmYodGhpcy5fbWFwLl9jb250YWluZXIsIk1vek1vdXNlUGl4ZWxTY3JvbGwiLG8uRG9tRXZlbnQucHJldmVudERlZmF1bHQpfSxfb25XaGVlbFNjcm9sbDpmdW5jdGlvbih0KXt2YXIgZT1vLkRvbUV2ZW50LmdldFdoZWVsRGVsdGEodCk7dGhpcy5fZGVsdGErPWUsdGhpcy5fbGFzdE1vdXNlUG9zPXRoaXMuX21hcC5tb3VzZUV2ZW50VG9Db250YWluZXJQb2ludCh0KSx0aGlzLl9zdGFydFRpbWV8fCh0aGlzLl9zdGFydFRpbWU9K25ldyBEYXRlKTt2YXIgaT1NYXRoLm1heCg0MC0oK25ldyBEYXRlLXRoaXMuX3N0YXJ0VGltZSksMCk7Y2xlYXJUaW1lb3V0KHRoaXMuX3RpbWVyKSx0aGlzLl90aW1lcj1zZXRUaW1lb3V0KG8uYmluZCh0aGlzLl9wZXJmb3JtWm9vbSx0aGlzKSxpKSxvLkRvbUV2ZW50LnByZXZlbnREZWZhdWx0KHQpLG8uRG9tRXZlbnQuc3RvcFByb3BhZ2F0aW9uKHQpfSxfcGVyZm9ybVpvb206ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9tYXAsZT10aGlzLl9kZWx0YSxpPXQuZ2V0Wm9vbSgpO2U9ZT4wP01hdGguY2VpbChlKTpNYXRoLmZsb29yKGUpLGU9TWF0aC5tYXgoTWF0aC5taW4oZSw0KSwtNCksZT10Ll9saW1pdFpvb20oaStlKS1pLHRoaXMuX2RlbHRhPTAsdGhpcy5fc3RhcnRUaW1lPW51bGwsZSYmKCJjZW50ZXIiPT09dC5vcHRpb25zLnNjcm9sbFdoZWVsWm9vbT90LnNldFpvb20oaStlKTp0LnNldFpvb21Bcm91bmQodGhpcy5fbGFzdE1vdXNlUG9zLGkrZSkpfX0pLG8uTWFwLmFkZEluaXRIb29rKCJhZGRIYW5kbGVyIiwic2Nyb2xsV2hlZWxab29tIixvLk1hcC5TY3JvbGxXaGVlbFpvb20pLG8uZXh0ZW5kKG8uRG9tRXZlbnQse190b3VjaHN0YXJ0Om8uQnJvd3Nlci5tc1BvaW50ZXI/Ik1TUG9pbnRlckRvd24iOm8uQnJvd3Nlci5wb2ludGVyPyJwb2ludGVyZG93biI6InRvdWNoc3RhcnQiLF90b3VjaGVuZDpvLkJyb3dzZXIubXNQb2ludGVyPyJNU1BvaW50ZXJVcCI6by5Ccm93c2VyLnBvaW50ZXI/InBvaW50ZXJ1cCI6InRvdWNoZW5kIixhZGREb3VibGVUYXBMaXN0ZW5lcjpmdW5jdGlvbih0LGksbil7ZnVuY3Rpb24gcyh0KXt2YXIgZTtpZihvLkJyb3dzZXIucG9pbnRlcj8oXy5wdXNoKHQucG9pbnRlcklkKSxlPV8ubGVuZ3RoKTplPXQudG91Y2hlcy5sZW5ndGgsIShlPjEpKXt2YXIgaT1EYXRlLm5vdygpLG49aS0ocnx8aSk7aD10LnRvdWNoZXM/dC50b3VjaGVzWzBdOnQsbD1uPjAmJnU+PW4scj1pfX1mdW5jdGlvbiBhKHQpe2lmKG8uQnJvd3Nlci5wb2ludGVyKXt2YXIgZT1fLmluZGV4T2YodC5wb2ludGVySWQpO2lmKC0xPT09ZSlyZXR1cm47Xy5zcGxpY2UoZSwxKX1pZihsKXtpZihvLkJyb3dzZXIucG9pbnRlcil7dmFyIG4scz17fTtmb3IodmFyIGEgaW4gaCluPWhbYV0sc1thXT0iZnVuY3Rpb24iPT10eXBlb2Ygbj9uLmJpbmQoaCk6bjtoPXN9aC50eXBlPSJkYmxjbGljayIsaShoKSxyPW51bGx9fXZhciByLGgsbD0hMSx1PTI1MCxjPSJfbGVhZmxldF8iLGQ9dGhpcy5fdG91Y2hzdGFydCxwPXRoaXMuX3RvdWNoZW5kLF89W107dFtjK2Qrbl09cyx0W2MrcCtuXT1hO3ZhciBtPW8uQnJvd3Nlci5wb2ludGVyP2UuZG9jdW1lbnRFbGVtZW50OnQ7cmV0dXJuIHQuYWRkRXZlbnRMaXN0ZW5lcihkLHMsITEpLG0uYWRkRXZlbnRMaXN0ZW5lcihwLGEsITEpLG8uQnJvd3Nlci5wb2ludGVyJiZtLmFkZEV2ZW50TGlzdGVuZXIoby5Eb21FdmVudC5QT0lOVEVSX0NBTkNFTCxhLCExKSx0aGlzfSxyZW1vdmVEb3VibGVUYXBMaXN0ZW5lcjpmdW5jdGlvbih0LGkpe3ZhciBuPSJfbGVhZmxldF8iO3JldHVybiB0LnJlbW92ZUV2ZW50TGlzdGVuZXIodGhpcy5fdG91Y2hzdGFydCx0W24rdGhpcy5fdG91Y2hzdGFydCtpXSwhMSksKG8uQnJvd3Nlci5wb2ludGVyP2UuZG9jdW1lbnRFbGVtZW50OnQpLnJlbW92ZUV2ZW50TGlzdGVuZXIodGhpcy5fdG91Y2hlbmQsdFtuK3RoaXMuX3RvdWNoZW5kK2ldLCExKSxvLkJyb3dzZXIucG9pbnRlciYmZS5kb2N1bWVudEVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihvLkRvbUV2ZW50LlBPSU5URVJfQ0FOQ0VMLHRbbit0aGlzLl90b3VjaGVuZCtpXSwhMSksdGhpc319KSxvLmV4dGVuZChvLkRvbUV2ZW50LHtQT0lOVEVSX0RPV046by5Ccm93c2VyLm1zUG9pbnRlcj8iTVNQb2ludGVyRG93biI6InBvaW50ZXJkb3duIixQT0lOVEVSX01PVkU6by5Ccm93c2VyLm1zUG9pbnRlcj8iTVNQb2ludGVyTW92ZSI6InBvaW50ZXJtb3ZlIixQT0lOVEVSX1VQOm8uQnJvd3Nlci5tc1BvaW50ZXI/Ik1TUG9pbnRlclVwIjoicG9pbnRlcnVwIixQT0lOVEVSX0NBTkNFTDpvLkJyb3dzZXIubXNQb2ludGVyPyJNU1BvaW50ZXJDYW5jZWwiOiJwb2ludGVyY2FuY2VsIixfcG9pbnRlcnM6W10sX3BvaW50ZXJEb2N1bWVudExpc3RlbmVyOiExLGFkZFBvaW50ZXJMaXN0ZW5lcjpmdW5jdGlvbih0LGUsaSxuKXtzd2l0Y2goZSl7Y2FzZSJ0b3VjaHN0YXJ0IjpyZXR1cm4gdGhpcy5hZGRQb2ludGVyTGlzdGVuZXJTdGFydCh0LGUsaSxuKTtjYXNlInRvdWNoZW5kIjpyZXR1cm4gdGhpcy5hZGRQb2ludGVyTGlzdGVuZXJFbmQodCxlLGksbik7Y2FzZSJ0b3VjaG1vdmUiOnJldHVybiB0aGlzLmFkZFBvaW50ZXJMaXN0ZW5lck1vdmUodCxlLGksbik7ZGVmYXVsdDp0aHJvdyJVbmtub3duIHRvdWNoIGV2ZW50IHR5cGUifX0sYWRkUG9pbnRlckxpc3RlbmVyU3RhcnQ6ZnVuY3Rpb24odCxpLG4scyl7dmFyIGE9Il9sZWFmbGV0XyIscj10aGlzLl9wb2ludGVycyxoPWZ1bmN0aW9uKHQpe28uRG9tRXZlbnQucHJldmVudERlZmF1bHQodCk7Zm9yKHZhciBlPSExLGk9MDtpPHIubGVuZ3RoO2krKylpZihyW2ldLnBvaW50ZXJJZD09PXQucG9pbnRlcklkKXtlPSEwOwpicmVha31lfHxyLnB1c2godCksdC50b3VjaGVzPXIuc2xpY2UoKSx0LmNoYW5nZWRUb3VjaGVzPVt0XSxuKHQpfTtpZih0W2ErInRvdWNoc3RhcnQiK3NdPWgsdC5hZGRFdmVudExpc3RlbmVyKHRoaXMuUE9JTlRFUl9ET1dOLGgsITEpLCF0aGlzLl9wb2ludGVyRG9jdW1lbnRMaXN0ZW5lcil7dmFyIGw9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPTA7ZTxyLmxlbmd0aDtlKyspaWYocltlXS5wb2ludGVySWQ9PT10LnBvaW50ZXJJZCl7ci5zcGxpY2UoZSwxKTticmVha319O2UuZG9jdW1lbnRFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIodGhpcy5QT0lOVEVSX1VQLGwsITEpLGUuZG9jdW1lbnRFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIodGhpcy5QT0lOVEVSX0NBTkNFTCxsLCExKSx0aGlzLl9wb2ludGVyRG9jdW1lbnRMaXN0ZW5lcj0hMH1yZXR1cm4gdGhpc30sYWRkUG9pbnRlckxpc3RlbmVyTW92ZTpmdW5jdGlvbih0LGUsaSxuKXtmdW5jdGlvbiBvKHQpe2lmKHQucG9pbnRlclR5cGUhPT10Lk1TUE9JTlRFUl9UWVBFX01PVVNFJiYibW91c2UiIT09dC5wb2ludGVyVHlwZXx8MCE9PXQuYnV0dG9ucyl7Zm9yKHZhciBlPTA7ZTxhLmxlbmd0aDtlKyspaWYoYVtlXS5wb2ludGVySWQ9PT10LnBvaW50ZXJJZCl7YVtlXT10O2JyZWFrfXQudG91Y2hlcz1hLnNsaWNlKCksdC5jaGFuZ2VkVG91Y2hlcz1bdF0saSh0KX19dmFyIHM9Il9sZWFmbGV0XyIsYT10aGlzLl9wb2ludGVycztyZXR1cm4gdFtzKyJ0b3VjaG1vdmUiK25dPW8sdC5hZGRFdmVudExpc3RlbmVyKHRoaXMuUE9JTlRFUl9NT1ZFLG8sITEpLHRoaXN9LGFkZFBvaW50ZXJMaXN0ZW5lckVuZDpmdW5jdGlvbih0LGUsaSxuKXt2YXIgbz0iX2xlYWZsZXRfIixzPXRoaXMuX3BvaW50ZXJzLGE9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPTA7ZTxzLmxlbmd0aDtlKyspaWYoc1tlXS5wb2ludGVySWQ9PT10LnBvaW50ZXJJZCl7cy5zcGxpY2UoZSwxKTticmVha310LnRvdWNoZXM9cy5zbGljZSgpLHQuY2hhbmdlZFRvdWNoZXM9W3RdLGkodCl9O3JldHVybiB0W28rInRvdWNoZW5kIituXT1hLHQuYWRkRXZlbnRMaXN0ZW5lcih0aGlzLlBPSU5URVJfVVAsYSwhMSksdC5hZGRFdmVudExpc3RlbmVyKHRoaXMuUE9JTlRFUl9DQU5DRUwsYSwhMSksdGhpc30scmVtb3ZlUG9pbnRlckxpc3RlbmVyOmZ1bmN0aW9uKHQsZSxpKXt2YXIgbj0iX2xlYWZsZXRfIixvPXRbbitlK2ldO3N3aXRjaChlKXtjYXNlInRvdWNoc3RhcnQiOnQucmVtb3ZlRXZlbnRMaXN0ZW5lcih0aGlzLlBPSU5URVJfRE9XTixvLCExKTticmVhaztjYXNlInRvdWNobW92ZSI6dC5yZW1vdmVFdmVudExpc3RlbmVyKHRoaXMuUE9JTlRFUl9NT1ZFLG8sITEpO2JyZWFrO2Nhc2UidG91Y2hlbmQiOnQucmVtb3ZlRXZlbnRMaXN0ZW5lcih0aGlzLlBPSU5URVJfVVAsbywhMSksdC5yZW1vdmVFdmVudExpc3RlbmVyKHRoaXMuUE9JTlRFUl9DQU5DRUwsbywhMSl9cmV0dXJuIHRoaXN9fSksby5NYXAubWVyZ2VPcHRpb25zKHt0b3VjaFpvb206by5Ccm93c2VyLnRvdWNoJiYhby5Ccm93c2VyLmFuZHJvaWQyMyxib3VuY2VBdFpvb21MaW1pdHM6ITB9KSxvLk1hcC5Ub3VjaFpvb209by5IYW5kbGVyLmV4dGVuZCh7YWRkSG9va3M6ZnVuY3Rpb24oKXtvLkRvbUV2ZW50Lm9uKHRoaXMuX21hcC5fY29udGFpbmVyLCJ0b3VjaHN0YXJ0Iix0aGlzLl9vblRvdWNoU3RhcnQsdGhpcyl9LHJlbW92ZUhvb2tzOmZ1bmN0aW9uKCl7by5Eb21FdmVudC5vZmYodGhpcy5fbWFwLl9jb250YWluZXIsInRvdWNoc3RhcnQiLHRoaXMuX29uVG91Y2hTdGFydCx0aGlzKX0sX29uVG91Y2hTdGFydDpmdW5jdGlvbih0KXt2YXIgaT10aGlzLl9tYXA7aWYodC50b3VjaGVzJiYyPT09dC50b3VjaGVzLmxlbmd0aCYmIWkuX2FuaW1hdGluZ1pvb20mJiF0aGlzLl96b29taW5nKXt2YXIgbj1pLm1vdXNlRXZlbnRUb0xheWVyUG9pbnQodC50b3VjaGVzWzBdKSxzPWkubW91c2VFdmVudFRvTGF5ZXJQb2ludCh0LnRvdWNoZXNbMV0pLGE9aS5fZ2V0Q2VudGVyTGF5ZXJQb2ludCgpO3RoaXMuX3N0YXJ0Q2VudGVyPW4uYWRkKHMpLl9kaXZpZGVCeSgyKSx0aGlzLl9zdGFydERpc3Q9bi5kaXN0YW5jZVRvKHMpLHRoaXMuX21vdmVkPSExLHRoaXMuX3pvb21pbmc9ITAsdGhpcy5fY2VudGVyT2Zmc2V0PWEuc3VidHJhY3QodGhpcy5fc3RhcnRDZW50ZXIpLGkuX3BhbkFuaW0mJmkuX3BhbkFuaW0uc3RvcCgpLG8uRG9tRXZlbnQub24oZSwidG91Y2htb3ZlIix0aGlzLl9vblRvdWNoTW92ZSx0aGlzKS5vbihlLCJ0b3VjaGVuZCIsdGhpcy5fb25Ub3VjaEVuZCx0aGlzKSxvLkRvbUV2ZW50LnByZXZlbnREZWZhdWx0KHQpfX0sX29uVG91Y2hNb3ZlOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX21hcDtpZih0LnRvdWNoZXMmJjI9PT10LnRvdWNoZXMubGVuZ3RoJiZ0aGlzLl96b29taW5nKXt2YXIgaT1lLm1vdXNlRXZlbnRUb0xheWVyUG9pbnQodC50b3VjaGVzWzBdKSxuPWUubW91c2VFdmVudFRvTGF5ZXJQb2ludCh0LnRvdWNoZXNbMV0pO3RoaXMuX3NjYWxlPWkuZGlzdGFuY2VUbyhuKS90aGlzLl9zdGFydERpc3QsdGhpcy5fZGVsdGE9aS5fYWRkKG4pLl9kaXZpZGVCeSgyKS5fc3VidHJhY3QodGhpcy5fc3RhcnRDZW50ZXIpLDEhPT10aGlzLl9zY2FsZSYmKGUub3B0aW9ucy5ib3VuY2VBdFpvb21MaW1pdHN8fCEoZS5nZXRab29tKCk9PT1lLmdldE1pblpvb20oKSYmdGhpcy5fc2NhbGU8MXx8ZS5nZXRab29tKCk9PT1lLmdldE1heFpvb20oKSYmdGhpcy5fc2NhbGU+MSkpJiYodGhpcy5fbW92ZWR8fChvLkRvbVV0aWwuYWRkQ2xhc3MoZS5fbWFwUGFuZSwibGVhZmxldC10b3VjaGluZyIpLGUuZmlyZSgibW92ZXN0YXJ0IikuZmlyZSgiem9vbXN0YXJ0IiksdGhpcy5fbW92ZWQ9ITApLG8uVXRpbC5jYW5jZWxBbmltRnJhbWUodGhpcy5fYW5pbVJlcXVlc3QpLHRoaXMuX2FuaW1SZXF1ZXN0PW8uVXRpbC5yZXF1ZXN0QW5pbUZyYW1lKHRoaXMuX3VwZGF0ZU9uTW92ZSx0aGlzLCEwLHRoaXMuX21hcC5fY29udGFpbmVyKSxvLkRvbUV2ZW50LnByZXZlbnREZWZhdWx0KHQpKX19LF91cGRhdGVPbk1vdmU6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9tYXAsZT10aGlzLl9nZXRTY2FsZU9yaWdpbigpLGk9dC5sYXllclBvaW50VG9MYXRMbmcoZSksbj10LmdldFNjYWxlWm9vbSh0aGlzLl9zY2FsZSk7dC5fYW5pbWF0ZVpvb20oaSxuLHRoaXMuX3N0YXJ0Q2VudGVyLHRoaXMuX3NjYWxlLHRoaXMuX2RlbHRhLCExLCEwKX0sX29uVG91Y2hFbmQ6ZnVuY3Rpb24oKXtpZighdGhpcy5fbW92ZWR8fCF0aGlzLl96b29taW5nKXJldHVybiB2b2lkKHRoaXMuX3pvb21pbmc9ITEpO3ZhciB0PXRoaXMuX21hcDt0aGlzLl96b29taW5nPSExLG8uRG9tVXRpbC5yZW1vdmVDbGFzcyh0Ll9tYXBQYW5lLCJsZWFmbGV0LXRvdWNoaW5nIiksby5VdGlsLmNhbmNlbEFuaW1GcmFtZSh0aGlzLl9hbmltUmVxdWVzdCksby5Eb21FdmVudC5vZmYoZSwidG91Y2htb3ZlIix0aGlzLl9vblRvdWNoTW92ZSkub2ZmKGUsInRvdWNoZW5kIix0aGlzLl9vblRvdWNoRW5kKTt2YXIgaT10aGlzLl9nZXRTY2FsZU9yaWdpbigpLG49dC5sYXllclBvaW50VG9MYXRMbmcoaSkscz10LmdldFpvb20oKSxhPXQuZ2V0U2NhbGVab29tKHRoaXMuX3NjYWxlKS1zLHI9YT4wP01hdGguY2VpbChhKTpNYXRoLmZsb29yKGEpLGg9dC5fbGltaXRab29tKHMrciksbD10LmdldFpvb21TY2FsZShoKS90aGlzLl9zY2FsZTt0Ll9hbmltYXRlWm9vbShuLGgsaSxsKX0sX2dldFNjYWxlT3JpZ2luOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fY2VudGVyT2Zmc2V0LnN1YnRyYWN0KHRoaXMuX2RlbHRhKS5kaXZpZGVCeSh0aGlzLl9zY2FsZSk7cmV0dXJuIHRoaXMuX3N0YXJ0Q2VudGVyLmFkZCh0KX19KSxvLk1hcC5hZGRJbml0SG9vaygiYWRkSGFuZGxlciIsInRvdWNoWm9vbSIsby5NYXAuVG91Y2hab29tKSxvLk1hcC5tZXJnZU9wdGlvbnMoe3RhcDohMCx0YXBUb2xlcmFuY2U6MTV9KSxvLk1hcC5UYXA9by5IYW5kbGVyLmV4dGVuZCh7YWRkSG9va3M6ZnVuY3Rpb24oKXtvLkRvbUV2ZW50Lm9uKHRoaXMuX21hcC5fY29udGFpbmVyLCJ0b3VjaHN0YXJ0Iix0aGlzLl9vbkRvd24sdGhpcyl9LHJlbW92ZUhvb2tzOmZ1bmN0aW9uKCl7by5Eb21FdmVudC5vZmYodGhpcy5fbWFwLl9jb250YWluZXIsInRvdWNoc3RhcnQiLHRoaXMuX29uRG93bix0aGlzKX0sX29uRG93bjpmdW5jdGlvbih0KXtpZih0LnRvdWNoZXMpe2lmKG8uRG9tRXZlbnQucHJldmVudERlZmF1bHQodCksdGhpcy5fZmlyZUNsaWNrPSEwLHQudG91Y2hlcy5sZW5ndGg+MSlyZXR1cm4gdGhpcy5fZmlyZUNsaWNrPSExLHZvaWQgY2xlYXJUaW1lb3V0KHRoaXMuX2hvbGRUaW1lb3V0KTt2YXIgaT10LnRvdWNoZXNbMF0sbj1pLnRhcmdldDt0aGlzLl9zdGFydFBvcz10aGlzLl9uZXdQb3M9bmV3IG8uUG9pbnQoaS5jbGllbnRYLGkuY2xpZW50WSksbi50YWdOYW1lJiYiYSI9PT1uLnRhZ05hbWUudG9Mb3dlckNhc2UoKSYmby5Eb21VdGlsLmFkZENsYXNzKG4sImxlYWZsZXQtYWN0aXZlIiksdGhpcy5faG9sZFRpbWVvdXQ9c2V0VGltZW91dChvLmJpbmQoZnVuY3Rpb24oKXt0aGlzLl9pc1RhcFZhbGlkKCkmJih0aGlzLl9maXJlQ2xpY2s9ITEsdGhpcy5fb25VcCgpLHRoaXMuX3NpbXVsYXRlRXZlbnQoImNvbnRleHRtZW51IixpKSl9LHRoaXMpLDFlMyksby5Eb21FdmVudC5vbihlLCJ0b3VjaG1vdmUiLHRoaXMuX29uTW92ZSx0aGlzKS5vbihlLCJ0b3VjaGVuZCIsdGhpcy5fb25VcCx0aGlzKX19LF9vblVwOmZ1bmN0aW9uKHQpe2lmKGNsZWFyVGltZW91dCh0aGlzLl9ob2xkVGltZW91dCksby5Eb21FdmVudC5vZmYoZSwidG91Y2htb3ZlIix0aGlzLl9vbk1vdmUsdGhpcykub2ZmKGUsInRvdWNoZW5kIix0aGlzLl9vblVwLHRoaXMpLHRoaXMuX2ZpcmVDbGljayYmdCYmdC5jaGFuZ2VkVG91Y2hlcyl7dmFyIGk9dC5jaGFuZ2VkVG91Y2hlc1swXSxuPWkudGFyZ2V0O24mJm4udGFnTmFtZSYmImEiPT09bi50YWdOYW1lLnRvTG93ZXJDYXNlKCkmJm8uRG9tVXRpbC5yZW1vdmVDbGFzcyhuLCJsZWFmbGV0LWFjdGl2ZSIpLHRoaXMuX2lzVGFwVmFsaWQoKSYmdGhpcy5fc2ltdWxhdGVFdmVudCgiY2xpY2siLGkpfX0sX2lzVGFwVmFsaWQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbmV3UG9zLmRpc3RhbmNlVG8odGhpcy5fc3RhcnRQb3MpPD10aGlzLl9tYXAub3B0aW9ucy50YXBUb2xlcmFuY2V9LF9vbk1vdmU6ZnVuY3Rpb24odCl7dmFyIGU9dC50b3VjaGVzWzBdO3RoaXMuX25ld1Bvcz1uZXcgby5Qb2ludChlLmNsaWVudFgsZS5jbGllbnRZKX0sX3NpbXVsYXRlRXZlbnQ6ZnVuY3Rpb24oaSxuKXt2YXIgbz1lLmNyZWF0ZUV2ZW50KCJNb3VzZUV2ZW50cyIpO28uX3NpbXVsYXRlZD0hMCxuLnRhcmdldC5fc2ltdWxhdGVkQ2xpY2s9ITAsby5pbml0TW91c2VFdmVudChpLCEwLCEwLHQsMSxuLnNjcmVlblgsbi5zY3JlZW5ZLG4uY2xpZW50WCxuLmNsaWVudFksITEsITEsITEsITEsMCxudWxsKSxuLnRhcmdldC5kaXNwYXRjaEV2ZW50KG8pfX0pLG8uQnJvd3Nlci50b3VjaCYmIW8uQnJvd3Nlci5wb2ludGVyJiZvLk1hcC5hZGRJbml0SG9vaygiYWRkSGFuZGxlciIsInRhcCIsby5NYXAuVGFwKSxvLk1hcC5tZXJnZU9wdGlvbnMoe2JveFpvb206ITB9KSxvLk1hcC5Cb3hab29tPW8uSGFuZGxlci5leHRlbmQoe2luaXRpYWxpemU6ZnVuY3Rpb24odCl7dGhpcy5fbWFwPXQsdGhpcy5fY29udGFpbmVyPXQuX2NvbnRhaW5lcix0aGlzLl9wYW5lPXQuX3BhbmVzLm92ZXJsYXlQYW5lLHRoaXMuX21vdmVkPSExfSxhZGRIb29rczpmdW5jdGlvbigpe28uRG9tRXZlbnQub24odGhpcy5fY29udGFpbmVyLCJtb3VzZWRvd24iLHRoaXMuX29uTW91c2VEb3duLHRoaXMpfSxyZW1vdmVIb29rczpmdW5jdGlvbigpe28uRG9tRXZlbnQub2ZmKHRoaXMuX2NvbnRhaW5lciwibW91c2Vkb3duIix0aGlzLl9vbk1vdXNlRG93biksdGhpcy5fbW92ZWQ9ITF9LG1vdmVkOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX21vdmVkfSxfb25Nb3VzZURvd246ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX21vdmVkPSExLCF0LnNoaWZ0S2V5fHwxIT09dC53aGljaCYmMSE9PXQuYnV0dG9uPyExOihvLkRvbVV0aWwuZGlzYWJsZVRleHRTZWxlY3Rpb24oKSxvLkRvbVV0aWwuZGlzYWJsZUltYWdlRHJhZygpLHRoaXMuX3N0YXJ0TGF5ZXJQb2ludD10aGlzLl9tYXAubW91c2VFdmVudFRvTGF5ZXJQb2ludCh0KSx2b2lkIG8uRG9tRXZlbnQub24oZSwibW91c2Vtb3ZlIix0aGlzLl9vbk1vdXNlTW92ZSx0aGlzKS5vbihlLCJtb3VzZXVwIix0aGlzLl9vbk1vdXNlVXAsdGhpcykub24oZSwia2V5ZG93biIsdGhpcy5fb25LZXlEb3duLHRoaXMpKX0sX29uTW91c2VNb3ZlOmZ1bmN0aW9uKHQpe3RoaXMuX21vdmVkfHwodGhpcy5fYm94PW8uRG9tVXRpbC5jcmVhdGUoImRpdiIsImxlYWZsZXQtem9vbS1ib3giLHRoaXMuX3BhbmUpLG8uRG9tVXRpbC5zZXRQb3NpdGlvbih0aGlzLl9ib3gsdGhpcy5fc3RhcnRMYXllclBvaW50KSx0aGlzLl9jb250YWluZXIuc3R5bGUuY3Vyc29yPSJjcm9zc2hhaXIiLHRoaXMuX21hcC5maXJlKCJib3h6b29tc3RhcnQiKSk7dmFyIGU9dGhpcy5fc3RhcnRMYXllclBvaW50LGk9dGhpcy5fYm94LG49dGhpcy5fbWFwLm1vdXNlRXZlbnRUb0xheWVyUG9pbnQodCkscz1uLnN1YnRyYWN0KGUpLGE9bmV3IG8uUG9pbnQoTWF0aC5taW4obi54LGUueCksTWF0aC5taW4obi55LGUueSkpO28uRG9tVXRpbC5zZXRQb3NpdGlvbihpLGEpLHRoaXMuX21vdmVkPSEwLGkuc3R5bGUud2lkdGg9TWF0aC5tYXgoMCxNYXRoLmFicyhzLngpLTQpKyJweCIsaS5zdHlsZS5oZWlnaHQ9TWF0aC5tYXgoMCxNYXRoLmFicyhzLnkpLTQpKyJweCJ9LF9maW5pc2g6ZnVuY3Rpb24oKXt0aGlzLl9tb3ZlZCYmKHRoaXMuX3BhbmUucmVtb3ZlQ2hpbGQodGhpcy5fYm94KSx0aGlzLl9jb250YWluZXIuc3R5bGUuY3Vyc29yPSIiKSxvLkRvbVV0aWwuZW5hYmxlVGV4dFNlbGVjdGlvbigpLG8uRG9tVXRpbC5lbmFibGVJbWFnZURyYWcoKSxvLkRvbUV2ZW50Lm9mZihlLCJtb3VzZW1vdmUiLHRoaXMuX29uTW91c2VNb3ZlKS5vZmYoZSwibW91c2V1cCIsdGhpcy5fb25Nb3VzZVVwKS5vZmYoZSwia2V5ZG93biIsdGhpcy5fb25LZXlEb3duKX0sX29uTW91c2VVcDpmdW5jdGlvbih0KXt0aGlzLl9maW5pc2goKTt2YXIgZT10aGlzLl9tYXAsaT1lLm1vdXNlRXZlbnRUb0xheWVyUG9pbnQodCk7aWYoIXRoaXMuX3N0YXJ0TGF5ZXJQb2ludC5lcXVhbHMoaSkpe3ZhciBuPW5ldyBvLkxhdExuZ0JvdW5kcyhlLmxheWVyUG9pbnRUb0xhdExuZyh0aGlzLl9zdGFydExheWVyUG9pbnQpLGUubGF5ZXJQb2ludFRvTGF0TG5nKGkpKTtlLmZpdEJvdW5kcyhuKSxlLmZpcmUoImJveHpvb21lbmQiLHtib3hab29tQm91bmRzOm59KX19LF9vbktleURvd246ZnVuY3Rpb24odCl7Mjc9PT10LmtleUNvZGUmJnRoaXMuX2ZpbmlzaCgpfX0pLG8uTWFwLmFkZEluaXRIb29rKCJhZGRIYW5kbGVyIiwiYm94Wm9vbSIsby5NYXAuQm94Wm9vbSksby5NYXAubWVyZ2VPcHRpb25zKHtrZXlib2FyZDohMCxrZXlib2FyZFBhbk9mZnNldDo4MCxrZXlib2FyZFpvb21PZmZzZXQ6MX0pLG8uTWFwLktleWJvYXJkPW8uSGFuZGxlci5leHRlbmQoe2tleUNvZGVzOntsZWZ0OlszN10scmlnaHQ6WzM5XSxkb3duOls0MF0sdXA6WzM4XSx6b29tSW46WzE4NywxMDcsNjEsMTcxXSx6b29tT3V0OlsxODksMTA5LDE3M119LGluaXRpYWxpemU6ZnVuY3Rpb24odCl7dGhpcy5fbWFwPXQsdGhpcy5fc2V0UGFuT2Zmc2V0KHQub3B0aW9ucy5rZXlib2FyZFBhbk9mZnNldCksdGhpcy5fc2V0Wm9vbU9mZnNldCh0Lm9wdGlvbnMua2V5Ym9hcmRab29tT2Zmc2V0KX0sYWRkSG9va3M6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9tYXAuX2NvbnRhaW5lcjstMT09PXQudGFiSW5kZXgmJih0LnRhYkluZGV4PSIwIiksby5Eb21FdmVudC5vbih0LCJmb2N1cyIsdGhpcy5fb25Gb2N1cyx0aGlzKS5vbih0LCJibHVyIix0aGlzLl9vbkJsdXIsdGhpcykub24odCwibW91c2Vkb3duIix0aGlzLl9vbk1vdXNlRG93bix0aGlzKSx0aGlzLl9tYXAub24oImZvY3VzIix0aGlzLl9hZGRIb29rcyx0aGlzKS5vbigiYmx1ciIsdGhpcy5fcmVtb3ZlSG9va3MsdGhpcyl9LHJlbW92ZUhvb2tzOmZ1bmN0aW9uKCl7dGhpcy5fcmVtb3ZlSG9va3MoKTt2YXIgdD10aGlzLl9tYXAuX2NvbnRhaW5lcjtvLkRvbUV2ZW50Lm9mZih0LCJmb2N1cyIsdGhpcy5fb25Gb2N1cyx0aGlzKS5vZmYodCwiYmx1ciIsdGhpcy5fb25CbHVyLHRoaXMpLm9mZih0LCJtb3VzZWRvd24iLHRoaXMuX29uTW91c2VEb3duLHRoaXMpLHRoaXMuX21hcC5vZmYoImZvY3VzIix0aGlzLl9hZGRIb29rcyx0aGlzKS5vZmYoImJsdXIiLHRoaXMuX3JlbW92ZUhvb2tzLHRoaXMpfSxfb25Nb3VzZURvd246ZnVuY3Rpb24oKXtpZighdGhpcy5fZm9jdXNlZCl7dmFyIGk9ZS5ib2R5LG49ZS5kb2N1bWVudEVsZW1lbnQsbz1pLnNjcm9sbFRvcHx8bi5zY3JvbGxUb3Ascz1pLnNjcm9sbExlZnR8fG4uc2Nyb2xsTGVmdDt0aGlzLl9tYXAuX2NvbnRhaW5lci5mb2N1cygpLHQuc2Nyb2xsVG8ocyxvKX19LF9vbkZvY3VzOmZ1bmN0aW9uKCl7dGhpcy5fZm9jdXNlZD0hMCx0aGlzLl9tYXAuZmlyZSgiZm9jdXMiKX0sX29uQmx1cjpmdW5jdGlvbigpe3RoaXMuX2ZvY3VzZWQ9ITEsdGhpcy5fbWFwLmZpcmUoImJsdXIiKX0sX3NldFBhbk9mZnNldDpmdW5jdGlvbih0KXt2YXIgZSxpLG49dGhpcy5fcGFuS2V5cz17fSxvPXRoaXMua2V5Q29kZXM7Zm9yKGU9MCxpPW8ubGVmdC5sZW5ndGg7aT5lO2UrKyluW28ubGVmdFtlXV09Wy0xKnQsMF07Zm9yKGU9MCxpPW8ucmlnaHQubGVuZ3RoO2k+ZTtlKyspbltvLnJpZ2h0W2VdXT1bdCwwXTtmb3IoZT0wLGk9by5kb3duLmxlbmd0aDtpPmU7ZSsrKW5bby5kb3duW2VdXT1bMCx0XTtmb3IoZT0wLGk9by51cC5sZW5ndGg7aT5lO2UrKyluW28udXBbZV1dPVswLC0xKnRdfSxfc2V0Wm9vbU9mZnNldDpmdW5jdGlvbih0KXt2YXIgZSxpLG49dGhpcy5fem9vbUtleXM9e30sbz10aGlzLmtleUNvZGVzO2ZvcihlPTAsaT1vLnpvb21Jbi5sZW5ndGg7aT5lO2UrKyluW28uem9vbUluW2VdXT10O2ZvcihlPTAsaT1vLnpvb21PdXQubGVuZ3RoO2k+ZTtlKyspbltvLnpvb21PdXRbZV1dPS10fSxfYWRkSG9va3M6ZnVuY3Rpb24oKXtvLkRvbUV2ZW50Lm9uKGUsImtleWRvd24iLHRoaXMuX29uS2V5RG93bix0aGlzKX0sX3JlbW92ZUhvb2tzOmZ1bmN0aW9uKCl7by5Eb21FdmVudC5vZmYoZSwia2V5ZG93biIsdGhpcy5fb25LZXlEb3duLHRoaXMpfSxfb25LZXlEb3duOmZ1bmN0aW9uKHQpe3ZhciBlPXQua2V5Q29kZSxpPXRoaXMuX21hcDtpZihlIGluIHRoaXMuX3BhbktleXMpe2lmKGkuX3BhbkFuaW0mJmkuX3BhbkFuaW0uX2luUHJvZ3Jlc3MpcmV0dXJuO2kucGFuQnkodGhpcy5fcGFuS2V5c1tlXSksaS5vcHRpb25zLm1heEJvdW5kcyYmaS5wYW5JbnNpZGVCb3VuZHMoaS5vcHRpb25zLm1heEJvdW5kcyl9ZWxzZXtpZighKGUgaW4gdGhpcy5fem9vbUtleXMpKXJldHVybjtpLnNldFpvb20oaS5nZXRab29tKCkrdGhpcy5fem9vbUtleXNbZV0pfW8uRG9tRXZlbnQuc3RvcCh0KX19KSxvLk1hcC5hZGRJbml0SG9vaygiYWRkSGFuZGxlciIsImtleWJvYXJkIixvLk1hcC5LZXlib2FyZCksby5IYW5kbGVyLk1hcmtlckRyYWc9by5IYW5kbGVyLmV4dGVuZCh7aW5pdGlhbGl6ZTpmdW5jdGlvbih0KXt0aGlzLl9tYXJrZXI9dH0sYWRkSG9va3M6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9tYXJrZXIuX2ljb247dGhpcy5fZHJhZ2dhYmxlfHwodGhpcy5fZHJhZ2dhYmxlPW5ldyBvLkRyYWdnYWJsZSh0LHQpKSx0aGlzLl9kcmFnZ2FibGUub24oImRyYWdzdGFydCIsdGhpcy5fb25EcmFnU3RhcnQsdGhpcykub24oImRyYWciLHRoaXMuX29uRHJhZyx0aGlzKS5vbigiZHJhZ2VuZCIsdGhpcy5fb25EcmFnRW5kLHRoaXMpLHRoaXMuX2RyYWdnYWJsZS5lbmFibGUoKSxvLkRvbVV0aWwuYWRkQ2xhc3ModGhpcy5fbWFya2VyLl9pY29uLCJsZWFmbGV0LW1hcmtlci1kcmFnZ2FibGUiKX0scmVtb3ZlSG9va3M6ZnVuY3Rpb24oKXt0aGlzLl9kcmFnZ2FibGUub2ZmKCJkcmFnc3RhcnQiLHRoaXMuX29uRHJhZ1N0YXJ0LHRoaXMpLm9mZigiZHJhZyIsdGhpcy5fb25EcmFnLHRoaXMpLm9mZigiZHJhZ2VuZCIsdGhpcy5fb25EcmFnRW5kLHRoaXMpLHRoaXMuX2RyYWdnYWJsZS5kaXNhYmxlKCksby5Eb21VdGlsLnJlbW92ZUNsYXNzKHRoaXMuX21hcmtlci5faWNvbiwibGVhZmxldC1tYXJrZXItZHJhZ2dhYmxlIil9LG1vdmVkOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2RyYWdnYWJsZSYmdGhpcy5fZHJhZ2dhYmxlLl9tb3ZlZH0sX29uRHJhZ1N0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fbWFya2VyLmNsb3NlUG9wdXAoKS5maXJlKCJtb3Zlc3RhcnQiKS5maXJlKCJkcmFnc3RhcnQiKX0sX29uRHJhZzpmdW5jdGlvbigpe3ZhciB0PXRoaXMuX21hcmtlcixlPXQuX3NoYWRvdyxpPW8uRG9tVXRpbC5nZXRQb3NpdGlvbih0Ll9pY29uKSxuPXQuX21hcC5sYXllclBvaW50VG9MYXRMbmcoaSk7ZSYmby5Eb21VdGlsLnNldFBvc2l0aW9uKGUsaSksdC5fbGF0bG5nPW4sdC5maXJlKCJtb3ZlIix7bGF0bG5nOm59KS5maXJlKCJkcmFnIil9LF9vbkRyYWdFbmQ6ZnVuY3Rpb24odCl7dGhpcy5fbWFya2VyLmZpcmUoIm1vdmVlbmQiKS5maXJlKCJkcmFnZW5kIix0KX19KSxvLkNvbnRyb2w9by5DbGFzcy5leHRlbmQoe29wdGlvbnM6e3Bvc2l0aW9uOiJ0b3ByaWdodCJ9LGluaXRpYWxpemU6ZnVuY3Rpb24odCl7by5zZXRPcHRpb25zKHRoaXMsdCl9LGdldFBvc2l0aW9uOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMub3B0aW9ucy5wb3NpdGlvbn0sc2V0UG9zaXRpb246ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fbWFwO3JldHVybiBlJiZlLnJlbW92ZUNvbnRyb2wodGhpcyksdGhpcy5vcHRpb25zLnBvc2l0aW9uPXQsZSYmZS5hZGRDb250cm9sKHRoaXMpLHRoaXN9LGdldENvbnRhaW5lcjpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9jb250YWluZXJ9LGFkZFRvOmZ1bmN0aW9uKHQpe3RoaXMuX21hcD10O3ZhciBlPXRoaXMuX2NvbnRhaW5lcj10aGlzLm9uQWRkKHQpLGk9dGhpcy5nZXRQb3NpdGlvbigpLG49dC5fY29udHJvbENvcm5lcnNbaV07cmV0dXJuIG8uRG9tVXRpbC5hZGRDbGFzcyhlLCJsZWFmbGV0LWNvbnRyb2wiKSwtMSE9PWkuaW5kZXhPZigiYm90dG9tIik/bi5pbnNlcnRCZWZvcmUoZSxuLmZpcnN0Q2hpbGQpOm4uYXBwZW5kQ2hpbGQoZSksdGhpc30scmVtb3ZlRnJvbTpmdW5jdGlvbih0KXt2YXIgZT10aGlzLmdldFBvc2l0aW9uKCksaT10Ll9jb250cm9sQ29ybmVyc1tlXTtyZXR1cm4gaS5yZW1vdmVDaGlsZCh0aGlzLl9jb250YWluZXIpLHRoaXMuX21hcD1udWxsLHRoaXMub25SZW1vdmUmJnRoaXMub25SZW1vdmUodCksdGhpc30sX3JlZm9jdXNPbk1hcDpmdW5jdGlvbigpe3RoaXMuX21hcCYmdGhpcy5fbWFwLmdldENvbnRhaW5lcigpLmZvY3VzKCl9fSksby5jb250cm9sPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgby5Db250cm9sKHQpfSxvLk1hcC5pbmNsdWRlKHthZGRDb250cm9sOmZ1bmN0aW9uKHQpe3JldHVybiB0LmFkZFRvKHRoaXMpLHRoaXN9LHJlbW92ZUNvbnRyb2w6ZnVuY3Rpb24odCl7cmV0dXJuIHQucmVtb3ZlRnJvbSh0aGlzKSx0aGlzfSxfaW5pdENvbnRyb2xQb3M6ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQscyl7dmFyIGE9aSt0KyIgIitpK3M7ZVt0K3NdPW8uRG9tVXRpbC5jcmVhdGUoImRpdiIsYSxuKX12YXIgZT10aGlzLl9jb250cm9sQ29ybmVycz17fSxpPSJsZWFmbGV0LSIsbj10aGlzLl9jb250cm9sQ29udGFpbmVyPW8uRG9tVXRpbC5jcmVhdGUoImRpdiIsaSsiY29udHJvbC1jb250YWluZXIiLHRoaXMuX2NvbnRhaW5lcik7dCgidG9wIiwibGVmdCIpLHQoInRvcCIsInJpZ2h0IiksdCgiYm90dG9tIiwibGVmdCIpLHQoImJvdHRvbSIsInJpZ2h0Iil9LF9jbGVhckNvbnRyb2xQb3M6ZnVuY3Rpb24oKXt0aGlzLl9jb250YWluZXIucmVtb3ZlQ2hpbGQodGhpcy5fY29udHJvbENvbnRhaW5lcil9fSksby5Db250cm9sLlpvb209by5Db250cm9sLmV4dGVuZCh7b3B0aW9uczp7cG9zaXRpb246InRvcGxlZnQiLHpvb21JblRleHQ6IisiLHpvb21JblRpdGxlOiJab29tIGluIix6b29tT3V0VGV4dDoiLSIsem9vbU91dFRpdGxlOiJab29tIG91dCJ9LG9uQWRkOmZ1bmN0aW9uKHQpe3ZhciBlPSJsZWFmbGV0LWNvbnRyb2wtem9vbSIsaT1vLkRvbVV0aWwuY3JlYXRlKCJkaXYiLGUrIiBsZWFmbGV0LWJhciIpO3JldHVybiB0aGlzLl9tYXA9dCx0aGlzLl96b29tSW5CdXR0b249dGhpcy5fY3JlYXRlQnV0dG9uKHRoaXMub3B0aW9ucy56b29tSW5UZXh0LHRoaXMub3B0aW9ucy56b29tSW5UaXRsZSxlKyItaW4iLGksdGhpcy5fem9vbUluLHRoaXMpLHRoaXMuX3pvb21PdXRCdXR0b249dGhpcy5fY3JlYXRlQnV0dG9uKHRoaXMub3B0aW9ucy56b29tT3V0VGV4dCx0aGlzLm9wdGlvbnMuem9vbU91dFRpdGxlLGUrIi1vdXQiLGksdGhpcy5fem9vbU91dCx0aGlzKSx0aGlzLl91cGRhdGVEaXNhYmxlZCgpLHQub24oInpvb21lbmQgem9vbWxldmVsc2NoYW5nZSIsdGhpcy5fdXBkYXRlRGlzYWJsZWQsdGhpcyksaX0sb25SZW1vdmU6ZnVuY3Rpb24odCl7dC5vZmYoInpvb21lbmQgem9vbWxldmVsc2NoYW5nZSIsdGhpcy5fdXBkYXRlRGlzYWJsZWQsdGhpcyl9LF96b29tSW46ZnVuY3Rpb24odCl7dGhpcy5fbWFwLnpvb21Jbih0LnNoaWZ0S2V5PzM6MSl9LF96b29tT3V0OmZ1bmN0aW9uKHQpe3RoaXMuX21hcC56b29tT3V0KHQuc2hpZnRLZXk/MzoxKX0sX2NyZWF0ZUJ1dHRvbjpmdW5jdGlvbih0LGUsaSxuLHMsYSl7dmFyIHI9by5Eb21VdGlsLmNyZWF0ZSgiYSIsaSxuKTtyLmlubmVySFRNTD10LHIuaHJlZj0iIyIsci50aXRsZT1lO3ZhciBoPW8uRG9tRXZlbnQuc3RvcFByb3BhZ2F0aW9uO3JldHVybiBvLkRvbUV2ZW50Lm9uKHIsImNsaWNrIixoKS5vbihyLCJtb3VzZWRvd24iLGgpLm9uKHIsImRibGNsaWNrIixoKS5vbihyLCJjbGljayIsby5Eb21FdmVudC5wcmV2ZW50RGVmYXVsdCkub24ociwiY2xpY2siLHMsYSkub24ociwiY2xpY2siLHRoaXMuX3JlZm9jdXNPbk1hcCxhKSxyfSxfdXBkYXRlRGlzYWJsZWQ6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9tYXAsZT0ibGVhZmxldC1kaXNhYmxlZCI7by5Eb21VdGlsLnJlbW92ZUNsYXNzKHRoaXMuX3pvb21JbkJ1dHRvbixlKSxvLkRvbVV0aWwucmVtb3ZlQ2xhc3ModGhpcy5fem9vbU91dEJ1dHRvbixlKSx0Ll96b29tPT09dC5nZXRNaW5ab29tKCkmJm8uRG9tVXRpbC5hZGRDbGFzcyh0aGlzLl96b29tT3V0QnV0dG9uLGUpLHQuX3pvb209PT10LmdldE1heFpvb20oKSYmby5Eb21VdGlsLmFkZENsYXNzKHRoaXMuX3pvb21JbkJ1dHRvbixlKX19KSxvLk1hcC5tZXJnZU9wdGlvbnMoe3pvb21Db250cm9sOiEwfSksby5NYXAuYWRkSW5pdEhvb2soZnVuY3Rpb24oKXt0aGlzLm9wdGlvbnMuem9vbUNvbnRyb2wmJih0aGlzLnpvb21Db250cm9sPW5ldyBvLkNvbnRyb2wuWm9vbSx0aGlzLmFkZENvbnRyb2wodGhpcy56b29tQ29udHJvbCkpfSksby5jb250cm9sLnpvb209ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBvLkNvbnRyb2wuWm9vbSh0KX0sby5Db250cm9sLkF0dHJpYnV0aW9uPW8uQ29udHJvbC5leHRlbmQoe29wdGlvbnM6e3Bvc2l0aW9uOiJib3R0b21yaWdodCIscHJlZml4Oic8YSBocmVmPSJodHRwOi8vbGVhZmxldGpzLmNvbSIgdGl0bGU9IkEgSlMgbGlicmFyeSBmb3IgaW50ZXJhY3RpdmUgbWFwcyI+TGVhZmxldDwvYT4nfSxpbml0aWFsaXplOmZ1bmN0aW9uKHQpe28uc2V0T3B0aW9ucyh0aGlzLHQpLHRoaXMuX2F0dHJpYnV0aW9ucz17fX0sb25BZGQ6ZnVuY3Rpb24odCl7dGhpcy5fY29udGFpbmVyPW8uRG9tVXRpbC5jcmVhdGUoImRpdiIsImxlYWZsZXQtY29udHJvbC1hdHRyaWJ1dGlvbiIpLG8uRG9tRXZlbnQuZGlzYWJsZUNsaWNrUHJvcGFnYXRpb24odGhpcy5fY29udGFpbmVyKTtmb3IodmFyIGUgaW4gdC5fbGF5ZXJzKXQuX2xheWVyc1tlXS5nZXRBdHRyaWJ1dGlvbiYmdGhpcy5hZGRBdHRyaWJ1dGlvbih0Ll9sYXllcnNbZV0uZ2V0QXR0cmlidXRpb24oKSk7cmV0dXJuIHQub24oImxheWVyYWRkIix0aGlzLl9vbkxheWVyQWRkLHRoaXMpLm9uKCJsYXllcnJlbW92ZSIsdGhpcy5fb25MYXllclJlbW92ZSx0aGlzKSx0aGlzLl91cGRhdGUoKSx0aGlzLl9jb250YWluZXJ9LG9uUmVtb3ZlOmZ1bmN0aW9uKHQpe3Qub2ZmKCJsYXllcmFkZCIsdGhpcy5fb25MYXllckFkZCkub2ZmKCJsYXllcnJlbW92ZSIsdGhpcy5fb25MYXllclJlbW92ZSl9LHNldFByZWZpeDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5vcHRpb25zLnByZWZpeD10LHRoaXMuX3VwZGF0ZSgpLHRoaXN9LGFkZEF0dHJpYnV0aW9uOmZ1bmN0aW9uKHQpe3JldHVybiB0Pyh0aGlzLl9hdHRyaWJ1dGlvbnNbdF18fCh0aGlzLl9hdHRyaWJ1dGlvbnNbdF09MCksdGhpcy5fYXR0cmlidXRpb25zW3RdKyssdGhpcy5fdXBkYXRlKCksdGhpcyk6dm9pZCAwfSxyZW1vdmVBdHRyaWJ1dGlvbjpmdW5jdGlvbih0KXtyZXR1cm4gdD8odGhpcy5fYXR0cmlidXRpb25zW3RdJiYodGhpcy5fYXR0cmlidXRpb25zW3RdLS0sdGhpcy5fdXBkYXRlKCkpLHRoaXMpOnZvaWQgMH0sX3VwZGF0ZTpmdW5jdGlvbigpe2lmKHRoaXMuX21hcCl7dmFyIHQ9W107Zm9yKHZhciBlIGluIHRoaXMuX2F0dHJpYnV0aW9ucyl0aGlzLl9hdHRyaWJ1dGlvbnNbZV0mJnQucHVzaChlKTt2YXIgaT1bXTt0aGlzLm9wdGlvbnMucHJlZml4JiZpLnB1c2godGhpcy5vcHRpb25zLnByZWZpeCksdC5sZW5ndGgmJmkucHVzaCh0LmpvaW4oIiwgIikpLHRoaXMuX2NvbnRhaW5lci5pbm5lckhUTUw9aS5qb2luKCIgfCAiKX19LF9vbkxheWVyQWRkOmZ1bmN0aW9uKHQpe3QubGF5ZXIuZ2V0QXR0cmlidXRpb24mJnRoaXMuYWRkQXR0cmlidXRpb24odC5sYXllci5nZXRBdHRyaWJ1dGlvbigpKX0sX29uTGF5ZXJSZW1vdmU6ZnVuY3Rpb24odCl7dC5sYXllci5nZXRBdHRyaWJ1dGlvbiYmdGhpcy5yZW1vdmVBdHRyaWJ1dGlvbih0LmxheWVyLmdldEF0dHJpYnV0aW9uKCkpfX0pLG8uTWFwLm1lcmdlT3B0aW9ucyh7YXR0cmlidXRpb25Db250cm9sOiEwfSksby5NYXAuYWRkSW5pdEhvb2soZnVuY3Rpb24oKXt0aGlzLm9wdGlvbnMuYXR0cmlidXRpb25Db250cm9sJiYodGhpcy5hdHRyaWJ1dGlvbkNvbnRyb2w9KG5ldyBvLkNvbnRyb2wuQXR0cmlidXRpb24pLmFkZFRvKHRoaXMpKX0pLG8uY29udHJvbC5hdHRyaWJ1dGlvbj1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IG8uQ29udHJvbC5BdHRyaWJ1dGlvbih0KX0sby5Db250cm9sLlNjYWxlPW8uQ29udHJvbC5leHRlbmQoe29wdGlvbnM6e3Bvc2l0aW9uOiJib3R0b21sZWZ0IixtYXhXaWR0aDoxMDAsbWV0cmljOiEwLGltcGVyaWFsOiEwLHVwZGF0ZVdoZW5JZGxlOiExfSxvbkFkZDpmdW5jdGlvbih0KXt0aGlzLl9tYXA9dDt2YXIgZT0ibGVhZmxldC1jb250cm9sLXNjYWxlIixpPW8uRG9tVXRpbC5jcmVhdGUoImRpdiIsZSksbj10aGlzLm9wdGlvbnM7cmV0dXJuIHRoaXMuX2FkZFNjYWxlcyhuLGUsaSksdC5vbihuLnVwZGF0ZVdoZW5JZGxlPyJtb3ZlZW5kIjoibW92ZSIsdGhpcy5fdXBkYXRlLHRoaXMpLHQud2hlblJlYWR5KHRoaXMuX3VwZGF0ZSx0aGlzKSxpfSxvblJlbW92ZTpmdW5jdGlvbih0KXt0Lm9mZih0aGlzLm9wdGlvbnMudXBkYXRlV2hlbklkbGU/Im1vdmVlbmQiOiJtb3ZlIix0aGlzLl91cGRhdGUsdGhpcyl9LF9hZGRTY2FsZXM6ZnVuY3Rpb24odCxlLGkpe3QubWV0cmljJiYodGhpcy5fbVNjYWxlPW8uRG9tVXRpbC5jcmVhdGUoImRpdiIsZSsiLWxpbmUiLGkpKSx0LmltcGVyaWFsJiYodGhpcy5faVNjYWxlPW8uRG9tVXRpbC5jcmVhdGUoImRpdiIsZSsiLWxpbmUiLGkpKX0sX3VwZGF0ZTpmdW5jdGlvbigpe3ZhciB0PXRoaXMuX21hcC5nZXRCb3VuZHMoKSxlPXQuZ2V0Q2VudGVyKCkubGF0LGk9NjM3ODEzNypNYXRoLlBJKk1hdGguY29zKGUqTWF0aC5QSS8xODApLG49aSoodC5nZXROb3J0aEVhc3QoKS5sbmctdC5nZXRTb3V0aFdlc3QoKS5sbmcpLzE4MCxvPXRoaXMuX21hcC5nZXRTaXplKCkscz10aGlzLm9wdGlvbnMsYT0wO28ueD4wJiYoYT1uKihzLm1heFdpZHRoL28ueCkpLHRoaXMuX3VwZGF0ZVNjYWxlcyhzLGEpfSxfdXBkYXRlU2NhbGVzOmZ1bmN0aW9uKHQsZSl7dC5tZXRyaWMmJmUmJnRoaXMuX3VwZGF0ZU1ldHJpYyhlKSx0LmltcGVyaWFsJiZlJiZ0aGlzLl91cGRhdGVJbXBlcmlhbChlKX0sX3VwZGF0ZU1ldHJpYzpmdW5jdGlvbih0KXt2YXIgZT10aGlzLl9nZXRSb3VuZE51bSh0KTt0aGlzLl9tU2NhbGUuc3R5bGUud2lkdGg9dGhpcy5fZ2V0U2NhbGVXaWR0aChlL3QpKyJweCIsdGhpcy5fbVNjYWxlLmlubmVySFRNTD0xZTM+ZT9lKyIgbSI6ZS8xZTMrIiBrbSJ9LF91cGRhdGVJbXBlcmlhbDpmdW5jdGlvbih0KXt2YXIgZSxpLG4sbz0zLjI4MDgzOTkqdCxzPXRoaXMuX2lTY2FsZTtvPjUyODA/KGU9by81MjgwLGk9dGhpcy5fZ2V0Um91bmROdW0oZSkscy5zdHlsZS53aWR0aD10aGlzLl9nZXRTY2FsZVdpZHRoKGkvZSkrInB4IixzLmlubmVySFRNTD1pKyIgbWkiKToobj10aGlzLl9nZXRSb3VuZE51bShvKSxzLnN0eWxlLndpZHRoPXRoaXMuX2dldFNjYWxlV2lkdGgobi9vKSsicHgiLHMuaW5uZXJIVE1MPW4rIiBmdCIpfSxfZ2V0U2NhbGVXaWR0aDpmdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5yb3VuZCh0aGlzLm9wdGlvbnMubWF4V2lkdGgqdCktMTB9LF9nZXRSb3VuZE51bTpmdW5jdGlvbih0KXt2YXIgZT1NYXRoLnBvdygxMCwoTWF0aC5mbG9vcih0KSsiIikubGVuZ3RoLTEpLGk9dC9lO3JldHVybiBpPWk+PTEwPzEwOmk+PTU/NTppPj0zPzM6aT49Mj8yOjEsZSppfX0pLG8uY29udHJvbC5zY2FsZT1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IG8uQ29udHJvbC5TY2FsZSh0KX0sby5Db250cm9sLkxheWVycz1vLkNvbnRyb2wuZXh0ZW5kKHtvcHRpb25zOntjb2xsYXBzZWQ6ITAscG9zaXRpb246InRvcHJpZ2h0IixhdXRvWkluZGV4OiEwfSxpbml0aWFsaXplOmZ1bmN0aW9uKHQsZSxpKXtvLnNldE9wdGlvbnModGhpcyxpKSx0aGlzLl9sYXllcnM9e30sdGhpcy5fbGFzdFpJbmRleD0wLHRoaXMuX2hhbmRsaW5nQ2xpY2s9ITE7Zm9yKHZhciBuIGluIHQpdGhpcy5fYWRkTGF5ZXIodFtuXSxuKTtmb3IobiBpbiBlKXRoaXMuX2FkZExheWVyKGVbbl0sbiwhMCl9LG9uQWRkOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9pbml0TGF5b3V0KCksdGhpcy5fdXBkYXRlKCksdC5vbigibGF5ZXJhZGQiLHRoaXMuX29uTGF5ZXJDaGFuZ2UsdGhpcykub24oImxheWVycmVtb3ZlIix0aGlzLl9vbkxheWVyQ2hhbmdlLHRoaXMpLHRoaXMuX2NvbnRhaW5lcn0sb25SZW1vdmU6ZnVuY3Rpb24odCl7dC5vZmYoImxheWVyYWRkIix0aGlzLl9vbkxheWVyQ2hhbmdlLHRoaXMpLm9mZigibGF5ZXJyZW1vdmUiLHRoaXMuX29uTGF5ZXJDaGFuZ2UsdGhpcyl9LGFkZEJhc2VMYXllcjpmdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLl9hZGRMYXllcih0LGUpLHRoaXMuX3VwZGF0ZSgpLHRoaXN9LGFkZE92ZXJsYXk6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5fYWRkTGF5ZXIodCxlLCEwKSx0aGlzLl91cGRhdGUoKSx0aGlzfSxyZW1vdmVMYXllcjpmdW5jdGlvbih0KXt2YXIgZT1vLnN0YW1wKHQpO3JldHVybiBkZWxldGUgdGhpcy5fbGF5ZXJzW2VdLHRoaXMuX3VwZGF0ZSgpLHRoaXN9LF9pbml0TGF5b3V0OmZ1bmN0aW9uKCl7dmFyIHQ9ImxlYWZsZXQtY29udHJvbC1sYXllcnMiLGU9dGhpcy5fY29udGFpbmVyPW8uRG9tVXRpbC5jcmVhdGUoImRpdiIsdCk7ZS5zZXRBdHRyaWJ1dGUoImFyaWEtaGFzcG9wdXAiLCEwKSxvLkJyb3dzZXIudG91Y2g/by5Eb21FdmVudC5vbihlLCJjbGljayIsby5Eb21FdmVudC5zdG9wUHJvcGFnYXRpb24pOm8uRG9tRXZlbnQuZGlzYWJsZUNsaWNrUHJvcGFnYXRpb24oZSkuZGlzYWJsZVNjcm9sbFByb3BhZ2F0aW9uKGUpO3ZhciBpPXRoaXMuX2Zvcm09by5Eb21VdGlsLmNyZWF0ZSgiZm9ybSIsdCsiLWxpc3QiKTtpZih0aGlzLm9wdGlvbnMuY29sbGFwc2VkKXtvLkJyb3dzZXIuYW5kcm9pZHx8by5Eb21FdmVudC5vbihlLCJtb3VzZW92ZXIiLHRoaXMuX2V4cGFuZCx0aGlzKS5vbihlLCJtb3VzZW91dCIsdGhpcy5fY29sbGFwc2UsdGhpcyk7dmFyIG49dGhpcy5fbGF5ZXJzTGluaz1vLkRvbVV0aWwuY3JlYXRlKCJhIix0KyItdG9nZ2xlIixlKTtuLmhyZWY9IiMiLG4udGl0bGU9IkxheWVycyIsby5Ccm93c2VyLnRvdWNoP28uRG9tRXZlbnQub24obiwiY2xpY2siLG8uRG9tRXZlbnQuc3RvcCkub24obiwiY2xpY2siLHRoaXMuX2V4cGFuZCx0aGlzKTpvLkRvbUV2ZW50Lm9uKG4sImZvY3VzIix0aGlzLl9leHBhbmQsdGhpcyksby5Eb21FdmVudC5vbihpLCJjbGljayIsZnVuY3Rpb24oKXtzZXRUaW1lb3V0KG8uYmluZCh0aGlzLl9vbklucHV0Q2xpY2ssdGhpcyksMCl9LHRoaXMpLHRoaXMuX21hcC5vbigiY2xpY2siLHRoaXMuX2NvbGxhcHNlLHRoaXMpfWVsc2UgdGhpcy5fZXhwYW5kKCk7dGhpcy5fYmFzZUxheWVyc0xpc3Q9by5Eb21VdGlsLmNyZWF0ZSgiZGl2Iix0KyItYmFzZSIsaSksdGhpcy5fc2VwYXJhdG9yPW8uRG9tVXRpbC5jcmVhdGUoImRpdiIsdCsiLXNlcGFyYXRvciIsaSksdGhpcy5fb3ZlcmxheXNMaXN0PW8uRG9tVXRpbC5jcmVhdGUoImRpdiIsdCsiLW92ZXJsYXlzIixpKSxlLmFwcGVuZENoaWxkKGkpfSxfYWRkTGF5ZXI6ZnVuY3Rpb24odCxlLGkpe3ZhciBuPW8uc3RhbXAodCk7dGhpcy5fbGF5ZXJzW25dPXtsYXllcjp0LG5hbWU6ZSxvdmVybGF5Oml9LHRoaXMub3B0aW9ucy5hdXRvWkluZGV4JiZ0LnNldFpJbmRleCYmKHRoaXMuX2xhc3RaSW5kZXgrKyx0LnNldFpJbmRleCh0aGlzLl9sYXN0WkluZGV4KSl9LF91cGRhdGU6ZnVuY3Rpb24oKXtpZih0aGlzLl9jb250YWluZXIpe3RoaXMuX2Jhc2VMYXllcnNMaXN0LmlubmVySFRNTD0iIix0aGlzLl9vdmVybGF5c0xpc3QuaW5uZXJIVE1MPSIiO3ZhciB0LGUsaT0hMSxuPSExO2Zvcih0IGluIHRoaXMuX2xheWVycyllPXRoaXMuX2xheWVyc1t0XSx0aGlzLl9hZGRJdGVtKGUpLG49bnx8ZS5vdmVybGF5LGk9aXx8IWUub3ZlcmxheTt0aGlzLl9zZXBhcmF0b3Iuc3R5bGUuZGlzcGxheT1uJiZpPyIiOiJub25lIn19LF9vbkxheWVyQ2hhbmdlOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX2xheWVyc1tvLnN0YW1wKHQubGF5ZXIpXTtpZihlKXt0aGlzLl9oYW5kbGluZ0NsaWNrfHx0aGlzLl91cGRhdGUoKTt2YXIgaT1lLm92ZXJsYXk/ImxheWVyYWRkIj09PXQudHlwZT8ib3ZlcmxheWFkZCI6Im92ZXJsYXlyZW1vdmUiOiJsYXllcmFkZCI9PT10LnR5cGU/ImJhc2VsYXllcmNoYW5nZSI6bnVsbDtpJiZ0aGlzLl9tYXAuZmlyZShpLGUpfX0sX2NyZWF0ZVJhZGlvRWxlbWVudDpmdW5jdGlvbih0LGkpe3ZhciBuPSc8aW5wdXQgdHlwZT0icmFkaW8iIGNsYXNzPSJsZWFmbGV0LWNvbnRyb2wtbGF5ZXJzLXNlbGVjdG9yIiBuYW1lPSInK3QrJyInO2kmJihuKz0nIGNoZWNrZWQ9ImNoZWNrZWQiJyksbis9Ii8+Ijt2YXIgbz1lLmNyZWF0ZUVsZW1lbnQoImRpdiIpO3JldHVybiBvLmlubmVySFRNTD1uLG8uZmlyc3RDaGlsZH0sX2FkZEl0ZW06ZnVuY3Rpb24odCl7dmFyIGksbj1lLmNyZWF0ZUVsZW1lbnQoImxhYmVsIikscz10aGlzLl9tYXAuaGFzTGF5ZXIodC5sYXllcik7dC5vdmVybGF5PyhpPWUuY3JlYXRlRWxlbWVudCgiaW5wdXQiKSxpLnR5cGU9ImNoZWNrYm94IixpLmNsYXNzTmFtZT0ibGVhZmxldC1jb250cm9sLWxheWVycy1zZWxlY3RvciIsaS5kZWZhdWx0Q2hlY2tlZD1zKTppPXRoaXMuX2NyZWF0ZVJhZGlvRWxlbWVudCgibGVhZmxldC1iYXNlLWxheWVycyIscyksaS5sYXllcklkPW8uc3RhbXAodC5sYXllciksby5Eb21FdmVudC5vbihpLCJjbGljayIsdGhpcy5fb25JbnB1dENsaWNrLHRoaXMpO3ZhciBhPWUuY3JlYXRlRWxlbWVudCgic3BhbiIpO2EuaW5uZXJIVE1MPSIgIit0Lm5hbWUsbi5hcHBlbmRDaGlsZChpKSxuLmFwcGVuZENoaWxkKGEpO3ZhciByPXQub3ZlcmxheT90aGlzLl9vdmVybGF5c0xpc3Q6dGhpcy5fYmFzZUxheWVyc0xpc3Q7cmV0dXJuIHIuYXBwZW5kQ2hpbGQobiksbn0sX29uSW5wdXRDbGljazpmdW5jdGlvbigpe3ZhciB0LGUsaSxuPXRoaXMuX2Zvcm0uZ2V0RWxlbWVudHNCeVRhZ05hbWUoImlucHV0Iiksbz1uLmxlbmd0aDtmb3IodGhpcy5faGFuZGxpbmdDbGljaz0hMCx0PTA7bz50O3QrKyllPW5bdF0saT10aGlzLl9sYXllcnNbZS5sYXllcklkXSxlLmNoZWNrZWQmJiF0aGlzLl9tYXAuaGFzTGF5ZXIoaS5sYXllcik/dGhpcy5fbWFwLmFkZExheWVyKGkubGF5ZXIpOiFlLmNoZWNrZWQmJnRoaXMuX21hcC5oYXNMYXllcihpLmxheWVyKSYmdGhpcy5fbWFwLnJlbW92ZUxheWVyKGkubGF5ZXIpO3RoaXMuX2hhbmRsaW5nQ2xpY2s9ITEsdGhpcy5fcmVmb2N1c09uTWFwKCl9LF9leHBhbmQ6ZnVuY3Rpb24oKXtvLkRvbVV0aWwuYWRkQ2xhc3ModGhpcy5fY29udGFpbmVyLCJsZWFmbGV0LWNvbnRyb2wtbGF5ZXJzLWV4cGFuZGVkIil9LF9jb2xsYXBzZTpmdW5jdGlvbigpe3RoaXMuX2NvbnRhaW5lci5jbGFzc05hbWU9dGhpcy5fY29udGFpbmVyLmNsYXNzTmFtZS5yZXBsYWNlKCIgbGVhZmxldC1jb250cm9sLWxheWVycy1leHBhbmRlZCIsIiIpfX0pLG8uY29udHJvbC5sYXllcnM9ZnVuY3Rpb24odCxlLGkpe3JldHVybiBuZXcgby5Db250cm9sLkxheWVycyh0LGUsaSl9LG8uUG9zQW5pbWF0aW9uPW8uQ2xhc3MuZXh0ZW5kKHtpbmNsdWRlczpvLk1peGluLkV2ZW50cyxydW46ZnVuY3Rpb24odCxlLGksbil7dGhpcy5zdG9wKCksdGhpcy5fZWw9dCx0aGlzLl9pblByb2dyZXNzPSEwLHRoaXMuX25ld1Bvcz1lLHRoaXMuZmlyZSgic3RhcnQiKSx0LnN0eWxlW28uRG9tVXRpbC5UUkFOU0lUSU9OXT0iYWxsICIrKGl8fC4yNSkrInMgY3ViaWMtYmV6aWVyKDAsMCwiKyhufHwuNSkrIiwxKSIsby5Eb21FdmVudC5vbih0LG8uRG9tVXRpbC5UUkFOU0lUSU9OX0VORCx0aGlzLl9vblRyYW5zaXRpb25FbmQsdGhpcyksby5Eb21VdGlsLnNldFBvc2l0aW9uKHQsZSksby5VdGlsLmZhbHNlRm4odC5vZmZzZXRXaWR0aCksdGhpcy5fc3RlcFRpbWVyPXNldEludGVydmFsKG8uYmluZCh0aGlzLl9vblN0ZXAsdGhpcyksNTApfSxzdG9wOmZ1bmN0aW9uKCl7dGhpcy5faW5Qcm9ncmVzcyYmKG8uRG9tVXRpbC5zZXRQb3NpdGlvbih0aGlzLl9lbCx0aGlzLl9nZXRQb3MoKSksdGhpcy5fb25UcmFuc2l0aW9uRW5kKCksby5VdGlsLmZhbHNlRm4odGhpcy5fZWwub2Zmc2V0V2lkdGgpKX0sX29uU3RlcDpmdW5jdGlvbigpe3ZhciB0PXRoaXMuX2dldFBvcygpO3JldHVybiB0Pyh0aGlzLl9lbC5fbGVhZmxldF9wb3M9dCx2b2lkIHRoaXMuZmlyZSgic3RlcCIpKTp2b2lkIHRoaXMuX29uVHJhbnNpdGlvbkVuZCgpfSxfdHJhbnNmb3JtUmU6LyhbLStdPyg/OlxkKlwuKT9cZCspXEQqLCAoWy0rXT8oPzpcZCpcLik/XGQrKVxEKlwpLyxfZ2V0UG9zOmZ1bmN0aW9uKCl7dmFyIGUsaSxuLHM9dGhpcy5fZWwsYT10LmdldENvbXB1dGVkU3R5bGUocyk7aWYoby5Ccm93c2VyLmFueTNkKXtpZihuPWFbby5Eb21VdGlsLlRSQU5TRk9STV0ubWF0Y2godGhpcy5fdHJhbnNmb3JtUmUpLCFuKXJldHVybjtlPXBhcnNlRmxvYXQoblsxXSksaT1wYXJzZUZsb2F0KG5bMl0pfWVsc2UgZT1wYXJzZUZsb2F0KGEubGVmdCksaT1wYXJzZUZsb2F0KGEudG9wKTtyZXR1cm4gbmV3IG8uUG9pbnQoZSxpLCEwKX0sX29uVHJhbnNpdGlvbkVuZDpmdW5jdGlvbigpe28uRG9tRXZlbnQub2ZmKHRoaXMuX2VsLG8uRG9tVXRpbC5UUkFOU0lUSU9OX0VORCx0aGlzLl9vblRyYW5zaXRpb25FbmQsdGhpcyksdGhpcy5faW5Qcm9ncmVzcyYmKHRoaXMuX2luUHJvZ3Jlc3M9ITEsdGhpcy5fZWwuc3R5bGVbby5Eb21VdGlsLlRSQU5TSVRJT05dPSIiLHRoaXMuX2VsLl9sZWFmbGV0X3Bvcz10aGlzLl9uZXdQb3MsY2xlYXJJbnRlcnZhbCh0aGlzLl9zdGVwVGltZXIpLHRoaXMuZmlyZSgic3RlcCIpLmZpcmUoImVuZCIpKX19KSxvLk1hcC5pbmNsdWRlKHtzZXRWaWV3OmZ1bmN0aW9uKHQsZSxuKXtpZihlPWU9PT1pP3RoaXMuX3pvb206dGhpcy5fbGltaXRab29tKGUpLHQ9dGhpcy5fbGltaXRDZW50ZXIoby5sYXRMbmcodCksZSx0aGlzLm9wdGlvbnMubWF4Qm91bmRzKSxuPW58fHt9LHRoaXMuX3BhbkFuaW0mJnRoaXMuX3BhbkFuaW0uc3RvcCgpLHRoaXMuX2xvYWRlZCYmIW4ucmVzZXQmJm4hPT0hMCl7bi5hbmltYXRlIT09aSYmKG4uem9vbT1vLmV4dGVuZCh7YW5pbWF0ZTpuLmFuaW1hdGV9LG4uem9vbSksbi5wYW49by5leHRlbmQoe2FuaW1hdGU6bi5hbmltYXRlfSxuLnBhbikpO3ZhciBzPXRoaXMuX3pvb20hPT1lP3RoaXMuX3RyeUFuaW1hdGVkWm9vbSYmdGhpcy5fdHJ5QW5pbWF0ZWRab29tKHQsZSxuLnpvb20pOnRoaXMuX3RyeUFuaW1hdGVkUGFuKHQsbi5wYW4pO2lmKHMpcmV0dXJuIGNsZWFyVGltZW91dCh0aGlzLl9zaXplVGltZXIpLHRoaXN9cmV0dXJuIHRoaXMuX3Jlc2V0Vmlldyh0LGUpLHRoaXN9LHBhbkJ5OmZ1bmN0aW9uKHQsZSl7aWYodD1vLnBvaW50KHQpLnJvdW5kKCksZT1lfHx7fSwhdC54JiYhdC55KXJldHVybiB0aGlzO2lmKHRoaXMuX3BhbkFuaW18fCh0aGlzLl9wYW5BbmltPW5ldyBvLlBvc0FuaW1hdGlvbix0aGlzLl9wYW5BbmltLm9uKHtzdGVwOnRoaXMuX29uUGFuVHJhbnNpdGlvblN0ZXAsZW5kOnRoaXMuX29uUGFuVHJhbnNpdGlvbkVuZH0sdGhpcykpLGUubm9Nb3ZlU3RhcnR8fHRoaXMuZmlyZSgibW92ZXN0YXJ0IiksZS5hbmltYXRlIT09ITEpe28uRG9tVXRpbC5hZGRDbGFzcyh0aGlzLl9tYXBQYW5lLCJsZWFmbGV0LXBhbi1hbmltIik7dmFyIGk9dGhpcy5fZ2V0TWFwUGFuZVBvcygpLnN1YnRyYWN0KHQpO3RoaXMuX3BhbkFuaW0ucnVuKHRoaXMuX21hcFBhbmUsaSxlLmR1cmF0aW9ufHwuMjUsZS5lYXNlTGluZWFyaXR5KX1lbHNlIHRoaXMuX3Jhd1BhbkJ5KHQpLHRoaXMuZmlyZSgibW92ZSIpLmZpcmUoIm1vdmVlbmQiKTtyZXR1cm4gdGhpc30sX29uUGFuVHJhbnNpdGlvblN0ZXA6ZnVuY3Rpb24oKXt0aGlzLmZpcmUoIm1vdmUiKX0sX29uUGFuVHJhbnNpdGlvbkVuZDpmdW5jdGlvbigpe28uRG9tVXRpbC5yZW1vdmVDbGFzcyh0aGlzLl9tYXBQYW5lLCJsZWFmbGV0LXBhbi1hbmltIiksdGhpcy5maXJlKCJtb3ZlZW5kIil9LF90cnlBbmltYXRlZFBhbjpmdW5jdGlvbih0LGUpe3ZhciBpPXRoaXMuX2dldENlbnRlck9mZnNldCh0KS5fZmxvb3IoKTtyZXR1cm4oZSYmZS5hbmltYXRlKT09PSEwfHx0aGlzLmdldFNpemUoKS5jb250YWlucyhpKT8odGhpcy5wYW5CeShpLGUpLCEwKTohMX19KSxvLlBvc0FuaW1hdGlvbj1vLkRvbVV0aWwuVFJBTlNJVElPTj9vLlBvc0FuaW1hdGlvbjpvLlBvc0FuaW1hdGlvbi5leHRlbmQoe3J1bjpmdW5jdGlvbih0LGUsaSxuKXt0aGlzLnN0b3AoKSx0aGlzLl9lbD10LHRoaXMuX2luUHJvZ3Jlc3M9ITAsdGhpcy5fZHVyYXRpb249aXx8LjI1LHRoaXMuX2Vhc2VPdXRQb3dlcj0xL01hdGgubWF4KG58fC41LC4yKSx0aGlzLl9zdGFydFBvcz1vLkRvbVV0aWwuZ2V0UG9zaXRpb24odCksdGhpcy5fb2Zmc2V0PWUuc3VidHJhY3QodGhpcy5fc3RhcnRQb3MpLHRoaXMuX3N0YXJ0VGltZT0rbmV3IERhdGUsdGhpcy5maXJlKCJzdGFydCIpLHRoaXMuX2FuaW1hdGUoKX0sc3RvcDpmdW5jdGlvbigpe3RoaXMuX2luUHJvZ3Jlc3MmJih0aGlzLl9zdGVwKCksdGhpcy5fY29tcGxldGUoKSl9LF9hbmltYXRlOmZ1bmN0aW9uKCl7dGhpcy5fYW5pbUlkPW8uVXRpbC5yZXF1ZXN0QW5pbUZyYW1lKHRoaXMuX2FuaW1hdGUsdGhpcyksdGhpcy5fc3RlcCgpfSxfc3RlcDpmdW5jdGlvbigpe3ZhciB0PStuZXcgRGF0ZS10aGlzLl9zdGFydFRpbWUsZT0xZTMqdGhpcy5fZHVyYXRpb247ZT50P3RoaXMuX3J1bkZyYW1lKHRoaXMuX2Vhc2VPdXQodC9lKSk6KHRoaXMuX3J1bkZyYW1lKDEpLHRoaXMuX2NvbXBsZXRlKCkpfSxfcnVuRnJhbWU6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fc3RhcnRQb3MuYWRkKHRoaXMuX29mZnNldC5tdWx0aXBseUJ5KHQpKTtvLkRvbVV0aWwuc2V0UG9zaXRpb24odGhpcy5fZWwsZSksdGhpcy5maXJlKCJzdGVwIil9LF9jb21wbGV0ZTpmdW5jdGlvbigpe28uVXRpbC5jYW5jZWxBbmltRnJhbWUodGhpcy5fYW5pbUlkKSx0aGlzLl9pblByb2dyZXNzPSExLHRoaXMuZmlyZSgiZW5kIil9LF9lYXNlT3V0OmZ1bmN0aW9uKHQpe3JldHVybiAxLU1hdGgucG93KDEtdCx0aGlzLl9lYXNlT3V0UG93ZXIpfX0pLG8uTWFwLm1lcmdlT3B0aW9ucyh7em9vbUFuaW1hdGlvbjohMCx6b29tQW5pbWF0aW9uVGhyZXNob2xkOjR9KSxvLkRvbVV0aWwuVFJBTlNJVElPTiYmby5NYXAuYWRkSW5pdEhvb2soZnVuY3Rpb24oKXt0aGlzLl96b29tQW5pbWF0ZWQ9dGhpcy5vcHRpb25zLnpvb21BbmltYXRpb24mJm8uRG9tVXRpbC5UUkFOU0lUSU9OJiZvLkJyb3dzZXIuYW55M2QmJiFvLkJyb3dzZXIuYW5kcm9pZDIzJiYhby5Ccm93c2VyLm1vYmlsZU9wZXJhLHRoaXMuX3pvb21BbmltYXRlZCYmby5Eb21FdmVudC5vbih0aGlzLl9tYXBQYW5lLG8uRG9tVXRpbC5UUkFOU0lUSU9OX0VORCx0aGlzLl9jYXRjaFRyYW5zaXRpb25FbmQsdGhpcyl9KSxvLk1hcC5pbmNsdWRlKG8uRG9tVXRpbC5UUkFOU0lUSU9OP3tfY2F0Y2hUcmFuc2l0aW9uRW5kOmZ1bmN0aW9uKHQpe3RoaXMuX2FuaW1hdGluZ1pvb20mJnQucHJvcGVydHlOYW1lLmluZGV4T2YoInRyYW5zZm9ybSIpPj0wJiZ0aGlzLl9vblpvb21UcmFuc2l0aW9uRW5kKCl9LF9ub3RoaW5nVG9BbmltYXRlOmZ1bmN0aW9uKCl7cmV0dXJuIXRoaXMuX2NvbnRhaW5lci5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCJsZWFmbGV0LXpvb20tYW5pbWF0ZWQiKS5sZW5ndGh9LF90cnlBbmltYXRlZFpvb206ZnVuY3Rpb24odCxlLGkpe2lmKHRoaXMuX2FuaW1hdGluZ1pvb20pcmV0dXJuITA7aWYoaT1pfHx7fSwhdGhpcy5fem9vbUFuaW1hdGVkfHxpLmFuaW1hdGU9PT0hMXx8dGhpcy5fbm90aGluZ1RvQW5pbWF0ZSgpfHxNYXRoLmFicyhlLXRoaXMuX3pvb20pPnRoaXMub3B0aW9ucy56b29tQW5pbWF0aW9uVGhyZXNob2xkKXJldHVybiExO3ZhciBuPXRoaXMuZ2V0Wm9vbVNjYWxlKGUpLG89dGhpcy5fZ2V0Q2VudGVyT2Zmc2V0KHQpLl9kaXZpZGVCeSgxLTEvbikscz10aGlzLl9nZXRDZW50ZXJMYXllclBvaW50KCkuX2FkZChvKTtyZXR1cm4gaS5hbmltYXRlPT09ITB8fHRoaXMuZ2V0U2l6ZSgpLmNvbnRhaW5zKG8pPyh0aGlzLmZpcmUoIm1vdmVzdGFydCIpLmZpcmUoInpvb21zdGFydCIpLHRoaXMuX2FuaW1hdGVab29tKHQsZSxzLG4sbnVsbCwhMCksITApOiExfSxfYW5pbWF0ZVpvb206ZnVuY3Rpb24odCxlLGksbixzLGEscil7cnx8KHRoaXMuX2FuaW1hdGluZ1pvb209ITApLG8uRG9tVXRpbC5hZGRDbGFzcyh0aGlzLl9tYXBQYW5lLCJsZWFmbGV0LXpvb20tYW5pbSIpLHRoaXMuX2FuaW1hdGVUb0NlbnRlcj10LHRoaXMuX2FuaW1hdGVUb1pvb209ZSxvLkRyYWdnYWJsZSYmKG8uRHJhZ2dhYmxlLl9kaXNhYmxlZD0hMCksby5VdGlsLnJlcXVlc3RBbmltRnJhbWUoZnVuY3Rpb24oKXt0aGlzLmZpcmUoInpvb21hbmltIix7Y2VudGVyOnQsem9vbTplLG9yaWdpbjppLHNjYWxlOm4sZGVsdGE6cyxiYWNrd2FyZHM6YX0pfSx0aGlzKX0sX29uWm9vbVRyYW5zaXRpb25FbmQ6ZnVuY3Rpb24oKXt0aGlzLl9hbmltYXRpbmdab29tPSExLG8uRG9tVXRpbC5yZW1vdmVDbGFzcyh0aGlzLl9tYXBQYW5lLCJsZWFmbGV0LXpvb20tYW5pbSIpLHRoaXMuX3Jlc2V0Vmlldyh0aGlzLl9hbmltYXRlVG9DZW50ZXIsdGhpcy5fYW5pbWF0ZVRvWm9vbSwhMCwhMCksby5EcmFnZ2FibGUmJihvLkRyYWdnYWJsZS5fZGlzYWJsZWQ9ITEpfX06e30pLG8uVGlsZUxheWVyLmluY2x1ZGUoe19hbmltYXRlWm9vbTpmdW5jdGlvbih0KXt0aGlzLl9hbmltYXRpbmd8fCh0aGlzLl9hbmltYXRpbmc9ITAsdGhpcy5fcHJlcGFyZUJnQnVmZmVyKCkpO3ZhciBlPXRoaXMuX2JnQnVmZmVyLGk9by5Eb21VdGlsLlRSQU5TRk9STSxuPXQuZGVsdGE/by5Eb21VdGlsLmdldFRyYW5zbGF0ZVN0cmluZyh0LmRlbHRhKTplLnN0eWxlW2ldLHM9by5Eb21VdGlsLmdldFNjYWxlU3RyaW5nKHQuc2NhbGUsdC5vcmlnaW4pO2Uuc3R5bGVbaV09dC5iYWNrd2FyZHM/cysiICIrbjpuKyIgIitzfSxfZW5kWm9vbUFuaW06ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl90aWxlQ29udGFpbmVyLGU9dGhpcy5fYmdCdWZmZXI7dC5zdHlsZS52aXNpYmlsaXR5PSIiLHQucGFyZW50Tm9kZS5hcHBlbmRDaGlsZCh0KSxvLlV0aWwuZmFsc2VGbihlLm9mZnNldFdpZHRoKSx0aGlzLl9hbmltYXRpbmc9ITF9LF9jbGVhckJnQnVmZmVyOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fbWFwOyF0fHx0Ll9hbmltYXRpbmdab29tfHx0LnRvdWNoWm9vbS5fem9vbWluZ3x8KHRoaXMuX2JnQnVmZmVyLmlubmVySFRNTD0iIix0aGlzLl9iZ0J1ZmZlci5zdHlsZVtvLkRvbVV0aWwuVFJBTlNGT1JNXT0iIil9LF9wcmVwYXJlQmdCdWZmZXI6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl90aWxlQ29udGFpbmVyLGU9dGhpcy5fYmdCdWZmZXIsaT10aGlzLl9nZXRMb2FkZWRUaWxlc1BlcmNlbnRhZ2UoZSksbj10aGlzLl9nZXRMb2FkZWRUaWxlc1BlcmNlbnRhZ2UodCk7cmV0dXJuIGUmJmk+LjUmJi41Pm4/KHQuc3R5bGUudmlzaWJpbGl0eT0iaGlkZGVuIix2b2lkIHRoaXMuX3N0b3BMb2FkaW5nSW1hZ2VzKHQpKTooZS5zdHlsZS52aXNpYmlsaXR5PSJoaWRkZW4iLGUuc3R5bGVbby5Eb21VdGlsLlRSQU5TRk9STV09IiIsdGhpcy5fdGlsZUNvbnRhaW5lcj1lLGU9dGhpcy5fYmdCdWZmZXI9dCx0aGlzLl9zdG9wTG9hZGluZ0ltYWdlcyhlKSx2b2lkIGNsZWFyVGltZW91dCh0aGlzLl9jbGVhckJnQnVmZmVyVGltZXIpKX0sX2dldExvYWRlZFRpbGVzUGVyY2VudGFnZTpmdW5jdGlvbih0KXt2YXIgZSxpLG49dC5nZXRFbGVtZW50c0J5VGFnTmFtZSgiaW1nIiksbz0wO2ZvcihlPTAsaT1uLmxlbmd0aDtpPmU7ZSsrKW5bZV0uY29tcGxldGUmJm8rKztyZXR1cm4gby9pfSxfc3RvcExvYWRpbmdJbWFnZXM6ZnVuY3Rpb24odCl7dmFyIGUsaSxuLHM9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwodC5nZXRFbGVtZW50c0J5VGFnTmFtZSgiaW1nIikpO2ZvcihlPTAsaT1zLmxlbmd0aDtpPmU7ZSsrKW49c1tlXSxuLmNvbXBsZXRlfHwobi5vbmxvYWQ9by5VdGlsLmZhbHNlRm4sbi5vbmVycm9yPW8uVXRpbC5mYWxzZUZuLG4uc3JjPW8uVXRpbC5lbXB0eUltYWdlVXJsLG4ucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChuKSl9fSksby5NYXAuaW5jbHVkZSh7X2RlZmF1bHRMb2NhdGVPcHRpb25zOnt3YXRjaDohMSxzZXRWaWV3OiExLG1heFpvb206MS8wLHRpbWVvdXQ6MWU0LG1heGltdW1BZ2U6MCxlbmFibGVIaWdoQWNjdXJhY3k6ITF9LGxvY2F0ZTpmdW5jdGlvbih0KXtpZih0PXRoaXMuX2xvY2F0ZU9wdGlvbnM9by5leHRlbmQodGhpcy5fZGVmYXVsdExvY2F0ZU9wdGlvbnMsdCksIW5hdmlnYXRvci5nZW9sb2NhdGlvbilyZXR1cm4gdGhpcy5faGFuZGxlR2VvbG9jYXRpb25FcnJvcih7Y29kZTowLG1lc3NhZ2U6Ikdlb2xvY2F0aW9uIG5vdCBzdXBwb3J0ZWQuIn0pLHRoaXM7dmFyIGU9by5iaW5kKHRoaXMuX2hhbmRsZUdlb2xvY2F0aW9uUmVzcG9uc2UsdGhpcyksaT1vLmJpbmQodGhpcy5faGFuZGxlR2VvbG9jYXRpb25FcnJvcix0aGlzKTtyZXR1cm4gdC53YXRjaD90aGlzLl9sb2NhdGlvbldhdGNoSWQ9bmF2aWdhdG9yLmdlb2xvY2F0aW9uLndhdGNoUG9zaXRpb24oZSxpLHQpOm5hdmlnYXRvci5nZW9sb2NhdGlvbi5nZXRDdXJyZW50UG9zaXRpb24oZSxpLHQpLHRoaXN9LHN0b3BMb2NhdGU6ZnVuY3Rpb24oKXtyZXR1cm4gbmF2aWdhdG9yLmdlb2xvY2F0aW9uJiZuYXZpZ2F0b3IuZ2VvbG9jYXRpb24uY2xlYXJXYXRjaCh0aGlzLl9sb2NhdGlvbldhdGNoSWQpLHRoaXMuX2xvY2F0ZU9wdGlvbnMmJih0aGlzLl9sb2NhdGVPcHRpb25zLnNldFZpZXc9ITEpLHRoaXN9LF9oYW5kbGVHZW9sb2NhdGlvbkVycm9yOmZ1bmN0aW9uKHQpe3ZhciBlPXQuY29kZSxpPXQubWVzc2FnZXx8KDE9PT1lPyJwZXJtaXNzaW9uIGRlbmllZCI6Mj09PWU/InBvc2l0aW9uIHVuYXZhaWxhYmxlIjoidGltZW91dCIpO3RoaXMuX2xvY2F0ZU9wdGlvbnMuc2V0VmlldyYmIXRoaXMuX2xvYWRlZCYmdGhpcy5maXRXb3JsZCgpLHRoaXMuZmlyZSgibG9jYXRpb25lcnJvciIse2NvZGU6ZSxtZXNzYWdlOiJHZW9sb2NhdGlvbiBlcnJvcjogIitpKyIuIn0pfSxfaGFuZGxlR2VvbG9jYXRpb25SZXNwb25zZTpmdW5jdGlvbih0KXt2YXIgZT10LmNvb3Jkcy5sYXRpdHVkZSxpPXQuY29vcmRzLmxvbmdpdHVkZSxuPW5ldyBvLkxhdExuZyhlLGkpLHM9MTgwKnQuY29vcmRzLmFjY3VyYWN5LzQwMDc1MDE3LGE9cy9NYXRoLmNvcyhvLkxhdExuZy5ERUdfVE9fUkFEKmUpLHI9by5sYXRMbmdCb3VuZHMoW2UtcyxpLWFdLFtlK3MsaSthXSksaD10aGlzLl9sb2NhdGVPcHRpb25zO2lmKGguc2V0Vmlldyl7dmFyIGw9TWF0aC5taW4odGhpcy5nZXRCb3VuZHNab29tKHIpLGgubWF4Wm9vbSk7dGhpcy5zZXRWaWV3KG4sbCl9dmFyIHU9e2xhdGxuZzpuLGJvdW5kczpyLHRpbWVzdGFtcDp0LnRpbWVzdGFtcH07Zm9yKHZhciBjIGluIHQuY29vcmRzKSJudW1iZXIiPT10eXBlb2YgdC5jb29yZHNbY10mJih1W2NdPXQuY29vcmRzW2NdKTt0aGlzLmZpcmUoImxvY2F0aW9uZm91bmQiLHUpfX0pfSh3aW5kb3csZG9jdW1lbnQpOw=="></script>
<link href="data:text/css;charset=utf-8,%0Aimg%2Eleaflet%2Dtile%20%7B%0Apadding%3A%200%3B%0Amargin%3A%200%3B%0Aborder%2Dradius%3A%200%3B%0Aborder%3A%20none%3B%0A%7D%0A%2Einfo%20%7B%0Apadding%3A%206px%208px%3B%0Afont%3A%2014px%2F16px%20Arial%2C%20Helvetica%2C%20sans%2Dserif%3B%0Abackground%3A%20white%3B%0Abackground%3A%20rgba%28255%2C255%2C255%2C0%2E8%29%3B%0Abox%2Dshadow%3A%200%200%2015px%20rgba%280%2C0%2C0%2C0%2E2%29%3B%0Aborder%2Dradius%3A%205px%3B%0A%7D%0A%2Elegend%20%7B%0Aline%2Dheight%3A%2018px%3B%0Acolor%3A%20%23555%3B%0A%7D%0A%2Elegend%20svg%20text%20%7B%0Afill%3A%20%23555%3B%0A%7D%0A%2Elegend%20svg%20line%20%7B%0Astroke%3A%20%23555%3B%0A%7D%0A%2Elegend%20i%20%7B%0Awidth%3A%2018px%3B%0Aheight%3A%2018px%3B%0Afloat%3A%20left%3B%0Amargin%2Dright%3A%208px%3B%0Aopacity%3A%200%2E7%3B%0A%7D%0A" rel="stylesheet" />
<link href="data:text/css;charset=utf-8,%2Eleaflet%2Dlabel%20%7B%0Abackground%3A%20rgb%28235%2C%20235%2C%20235%29%3B%0Abackground%3A%20rgba%28235%2C%20235%2C%20235%2C%200%2E81%29%3B%0Abackground%2Dclip%3A%20padding%2Dbox%3B%0Aborder%2Dcolor%3A%20%23777%3B%0Aborder%2Dcolor%3A%20rgba%280%2C0%2C0%2C0%2E25%29%3B%0Aborder%2Dradius%3A%204px%3B%0Aborder%2Dstyle%3A%20solid%3B%0Aborder%2Dwidth%3A%204px%3B%0Acolor%3A%20%23111%3B%0Adisplay%3A%20block%3B%0Afont%3A%2012px%2F20px%20%22Helvetica%20Neue%22%2C%20Arial%2C%20Helvetica%2C%20sans%2Dserif%3B%0Afont%2Dweight%3A%20bold%3B%0Apadding%3A%201px%206px%3B%0Aposition%3A%20absolute%3B%0A%2Dwebkit%2Duser%2Dselect%3A%20none%3B%0A%2Dmoz%2Duser%2Dselect%3A%20none%3B%0A%2Dms%2Duser%2Dselect%3A%20none%3B%0Auser%2Dselect%3A%20none%3B%0Apointer%2Devents%3A%20none%3B%0Awhite%2Dspace%3A%20nowrap%3B%0Az%2Dindex%3A%20500%3B%0A%7D%0A%2Eleaflet%2Dlabel%2Eleaflet%2Dclickable%20%7B%0Acursor%3A%20pointer%3B%0Apointer%2Devents%3A%20auto%3B%0A%7D%0A%2Eleaflet%2Dlabel%3Abefore%2C%0A%2Eleaflet%2Dlabel%3Aafter%20%7B%0Aborder%2Dtop%3A%206px%20solid%20transparent%3B%0Aborder%2Dbottom%3A%206px%20solid%20transparent%3B%0Acontent%3A%20none%3B%0Aposition%3A%20absolute%3B%0Atop%3A%205px%3B%0A%7D%0A%2Eleaflet%2Dlabel%3Abefore%20%7B%0Aborder%2Dright%3A%206px%20solid%20black%3B%0Aborder%2Dright%2Dcolor%3A%20inherit%3B%0Aleft%3A%20%2D10px%3B%0A%7D%0A%2Eleaflet%2Dlabel%3Aafter%20%7B%0Aborder%2Dleft%3A%206px%20solid%20black%3B%0Aborder%2Dleft%2Dcolor%3A%20inherit%3B%0Aright%3A%20%2D10px%3B%0A%7D%0A%2Eleaflet%2Dlabel%2Dright%3Abefore%2C%0A%2Eleaflet%2Dlabel%2Dleft%3Aafter%20%7B%0Acontent%3A%20%22%22%3B%0A%7D%0A" rel="stylesheet" />
<script src="data:application/x-javascript;base64,LyoKCUxlYWZsZXQubGFiZWwsIGEgcGx1Z2luIHRoYXQgYWRkcyBsYWJlbHMgdG8gbWFya2VycyBhbmQgdmVjdG9ycyBmb3IgTGVhZmxldCBwb3dlcmVkIG1hcHMuCgkoYykgMjAxMi0yMDEzLCBKYWNvYiBUb3llLCBTbWFydHJhawoKCWh0dHBzOi8vZ2l0aHViLmNvbS9MZWFmbGV0L0xlYWZsZXQubGFiZWwKCWh0dHA6Ly9sZWFmbGV0anMuY29tCglodHRwczovL2dpdGh1Yi5jb20vamFjb2J0b3llCiovCihmdW5jdGlvbih0KXt2YXIgZT10Lkw7ZS5sYWJlbFZlcnNpb249IjAuMi4yLWRldiIsZS5MYWJlbD0oZS5MYXllcj9lLkxheWVyOmUuQ2xhc3MpLmV4dGVuZCh7aW5jbHVkZXM6ZS5NaXhpbi5FdmVudHMsb3B0aW9uczp7Y2xhc3NOYW1lOiIiLGNsaWNrYWJsZTohMSxkaXJlY3Rpb246InJpZ2h0Iixub0hpZGU6ITEsb2Zmc2V0OlsxMiwtMTVdLG9wYWNpdHk6MSx6b29tQW5pbWF0aW9uOiEwfSxpbml0aWFsaXplOmZ1bmN0aW9uKHQsaSl7ZS5zZXRPcHRpb25zKHRoaXMsdCksdGhpcy5fc291cmNlPWksdGhpcy5fYW5pbWF0ZWQ9ZS5Ccm93c2VyLmFueTNkJiZ0aGlzLm9wdGlvbnMuem9vbUFuaW1hdGlvbix0aGlzLl9pc09wZW49ITF9LG9uQWRkOmZ1bmN0aW9uKHQpe3RoaXMuX21hcD10LHRoaXMuX3BhbmU9dGhpcy5vcHRpb25zLnBhbmU/dC5fcGFuZXNbdGhpcy5vcHRpb25zLnBhbmVdOnRoaXMuX3NvdXJjZSBpbnN0YW5jZW9mIGUuTWFya2VyP3QuX3BhbmVzLm1hcmtlclBhbmU6dC5fcGFuZXMucG9wdXBQYW5lLHRoaXMuX2NvbnRhaW5lcnx8dGhpcy5faW5pdExheW91dCgpLHRoaXMuX3BhbmUuYXBwZW5kQ2hpbGQodGhpcy5fY29udGFpbmVyKSx0aGlzLl9pbml0SW50ZXJhY3Rpb24oKSx0aGlzLl91cGRhdGUoKSx0aGlzLnNldE9wYWNpdHkodGhpcy5vcHRpb25zLm9wYWNpdHkpLHQub24oIm1vdmVlbmQiLHRoaXMuX29uTW92ZUVuZCx0aGlzKS5vbigidmlld3Jlc2V0Iix0aGlzLl9vblZpZXdSZXNldCx0aGlzKSx0aGlzLl9hbmltYXRlZCYmdC5vbigiem9vbWFuaW0iLHRoaXMuX3pvb21BbmltYXRpb24sdGhpcyksZS5Ccm93c2VyLnRvdWNoJiYhdGhpcy5vcHRpb25zLm5vSGlkZSYmKGUuRG9tRXZlbnQub24odGhpcy5fY29udGFpbmVyLCJjbGljayIsdGhpcy5jbG9zZSx0aGlzKSx0Lm9uKCJjbGljayIsdGhpcy5jbG9zZSx0aGlzKSl9LG9uUmVtb3ZlOmZ1bmN0aW9uKHQpe3RoaXMuX3BhbmUucmVtb3ZlQ2hpbGQodGhpcy5fY29udGFpbmVyKSx0Lm9mZih7em9vbWFuaW06dGhpcy5fem9vbUFuaW1hdGlvbixtb3ZlZW5kOnRoaXMuX29uTW92ZUVuZCx2aWV3cmVzZXQ6dGhpcy5fb25WaWV3UmVzZXR9LHRoaXMpLHRoaXMuX3JlbW92ZUludGVyYWN0aW9uKCksdGhpcy5fbWFwPW51bGx9LHNldExhdExuZzpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fbGF0bG5nPWUubGF0TG5nKHQpLHRoaXMuX21hcCYmdGhpcy5fdXBkYXRlUG9zaXRpb24oKSx0aGlzfSxzZXRDb250ZW50OmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9wcmV2aW91c0NvbnRlbnQ9dGhpcy5fY29udGVudCx0aGlzLl9jb250ZW50PXQsdGhpcy5fdXBkYXRlQ29udGVudCgpLHRoaXN9LGNsb3NlOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fbWFwO3QmJihlLkJyb3dzZXIudG91Y2gmJiF0aGlzLm9wdGlvbnMubm9IaWRlJiYoZS5Eb21FdmVudC5vZmYodGhpcy5fY29udGFpbmVyLCJjbGljayIsdGhpcy5jbG9zZSksdC5vZmYoImNsaWNrIix0aGlzLmNsb3NlLHRoaXMpKSx0LnJlbW92ZUxheWVyKHRoaXMpKX0sdXBkYXRlWkluZGV4OmZ1bmN0aW9uKHQpe3RoaXMuX3pJbmRleD10LHRoaXMuX2NvbnRhaW5lciYmdGhpcy5fekluZGV4JiYodGhpcy5fY29udGFpbmVyLnN0eWxlLnpJbmRleD10KX0sc2V0T3BhY2l0eTpmdW5jdGlvbih0KXt0aGlzLm9wdGlvbnMub3BhY2l0eT10LHRoaXMuX2NvbnRhaW5lciYmZS5Eb21VdGlsLnNldE9wYWNpdHkodGhpcy5fY29udGFpbmVyLHQpfSxfaW5pdExheW91dDpmdW5jdGlvbigpe3RoaXMuX2NvbnRhaW5lcj1lLkRvbVV0aWwuY3JlYXRlKCJkaXYiLCJsZWFmbGV0LWxhYmVsICIrdGhpcy5vcHRpb25zLmNsYXNzTmFtZSsiIGxlYWZsZXQtem9vbS1hbmltYXRlZCIpLHRoaXMudXBkYXRlWkluZGV4KHRoaXMuX3pJbmRleCl9LF91cGRhdGU6ZnVuY3Rpb24oKXt0aGlzLl9tYXAmJih0aGlzLl9jb250YWluZXIuc3R5bGUudmlzaWJpbGl0eT0iaGlkZGVuIix0aGlzLl91cGRhdGVDb250ZW50KCksdGhpcy5fdXBkYXRlUG9zaXRpb24oKSx0aGlzLl9jb250YWluZXIuc3R5bGUudmlzaWJpbGl0eT0iIil9LF91cGRhdGVDb250ZW50OmZ1bmN0aW9uKCl7dGhpcy5fY29udGVudCYmdGhpcy5fbWFwJiZ0aGlzLl9wcmV2Q29udGVudCE9PXRoaXMuX2NvbnRlbnQmJiJzdHJpbmciPT10eXBlb2YgdGhpcy5fY29udGVudCYmKHRoaXMuX2NvbnRhaW5lci5pbm5lckhUTUw9dGhpcy5fY29udGVudCx0aGlzLl9wcmV2Q29udGVudD10aGlzLl9jb250ZW50LHRoaXMuX2xhYmVsV2lkdGg9dGhpcy5fY29udGFpbmVyLm9mZnNldFdpZHRoKX0sX3VwZGF0ZVBvc2l0aW9uOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fbWFwLmxhdExuZ1RvTGF5ZXJQb2ludCh0aGlzLl9sYXRsbmcpO3RoaXMuX3NldFBvc2l0aW9uKHQpfSxfc2V0UG9zaXRpb246ZnVuY3Rpb24odCl7dmFyIGk9dGhpcy5fbWFwLG49dGhpcy5fY29udGFpbmVyLG89aS5sYXRMbmdUb0NvbnRhaW5lclBvaW50KGkuZ2V0Q2VudGVyKCkpLHM9aS5sYXllclBvaW50VG9Db250YWluZXJQb2ludCh0KSxhPXRoaXMub3B0aW9ucy5kaXJlY3Rpb24sbD10aGlzLl9sYWJlbFdpZHRoLGg9ZS5wb2ludCh0aGlzLm9wdGlvbnMub2Zmc2V0KTsicmlnaHQiPT09YXx8ImF1dG8iPT09YSYmcy54PG8ueD8oZS5Eb21VdGlsLmFkZENsYXNzKG4sImxlYWZsZXQtbGFiZWwtcmlnaHQiKSxlLkRvbVV0aWwucmVtb3ZlQ2xhc3MobiwibGVhZmxldC1sYWJlbC1sZWZ0IiksdD10LmFkZChoKSk6KGUuRG9tVXRpbC5hZGRDbGFzcyhuLCJsZWFmbGV0LWxhYmVsLWxlZnQiKSxlLkRvbVV0aWwucmVtb3ZlQ2xhc3MobiwibGVhZmxldC1sYWJlbC1yaWdodCIpLHQ9dC5hZGQoZS5wb2ludCgtaC54LWwsaC55KSkpLGUuRG9tVXRpbC5zZXRQb3NpdGlvbihuLHQpfSxfem9vbUFuaW1hdGlvbjpmdW5jdGlvbih0KXt2YXIgZT10aGlzLl9tYXAuX2xhdExuZ1RvTmV3TGF5ZXJQb2ludCh0aGlzLl9sYXRsbmcsdC56b29tLHQuY2VudGVyKS5yb3VuZCgpO3RoaXMuX3NldFBvc2l0aW9uKGUpfSxfb25Nb3ZlRW5kOmZ1bmN0aW9uKCl7dGhpcy5fYW5pbWF0ZWQmJiJhdXRvIiE9PXRoaXMub3B0aW9ucy5kaXJlY3Rpb258fHRoaXMuX3VwZGF0ZVBvc2l0aW9uKCl9LF9vblZpZXdSZXNldDpmdW5jdGlvbih0KXt0JiZ0LmhhcmQmJnRoaXMuX3VwZGF0ZSgpfSxfaW5pdEludGVyYWN0aW9uOmZ1bmN0aW9uKCl7aWYodGhpcy5vcHRpb25zLmNsaWNrYWJsZSl7dmFyIHQ9dGhpcy5fY29udGFpbmVyLGk9WyJkYmxjbGljayIsIm1vdXNlZG93biIsIm1vdXNlb3ZlciIsIm1vdXNlb3V0IiwiY29udGV4dG1lbnUiXTtlLkRvbVV0aWwuYWRkQ2xhc3ModCwibGVhZmxldC1jbGlja2FibGUiKSxlLkRvbUV2ZW50Lm9uKHQsImNsaWNrIix0aGlzLl9vbk1vdXNlQ2xpY2ssdGhpcyk7Zm9yKHZhciBuPTA7aS5sZW5ndGg+bjtuKyspZS5Eb21FdmVudC5vbih0LGlbbl0sdGhpcy5fZmlyZU1vdXNlRXZlbnQsdGhpcyl9fSxfcmVtb3ZlSW50ZXJhY3Rpb246ZnVuY3Rpb24oKXtpZih0aGlzLm9wdGlvbnMuY2xpY2thYmxlKXt2YXIgdD10aGlzLl9jb250YWluZXIsaT1bImRibGNsaWNrIiwibW91c2Vkb3duIiwibW91c2VvdmVyIiwibW91c2VvdXQiLCJjb250ZXh0bWVudSJdO2UuRG9tVXRpbC5yZW1vdmVDbGFzcyh0LCJsZWFmbGV0LWNsaWNrYWJsZSIpLGUuRG9tRXZlbnQub2ZmKHQsImNsaWNrIix0aGlzLl9vbk1vdXNlQ2xpY2ssdGhpcyk7Zm9yKHZhciBuPTA7aS5sZW5ndGg+bjtuKyspZS5Eb21FdmVudC5vZmYodCxpW25dLHRoaXMuX2ZpcmVNb3VzZUV2ZW50LHRoaXMpfX0sX29uTW91c2VDbGljazpmdW5jdGlvbih0KXt0aGlzLmhhc0V2ZW50TGlzdGVuZXJzKHQudHlwZSkmJmUuRG9tRXZlbnQuc3RvcFByb3BhZ2F0aW9uKHQpLHRoaXMuZmlyZSh0LnR5cGUse29yaWdpbmFsRXZlbnQ6dH0pfSxfZmlyZU1vdXNlRXZlbnQ6ZnVuY3Rpb24odCl7dGhpcy5maXJlKHQudHlwZSx7b3JpZ2luYWxFdmVudDp0fSksImNvbnRleHRtZW51Ij09PXQudHlwZSYmdGhpcy5oYXNFdmVudExpc3RlbmVycyh0LnR5cGUpJiZlLkRvbUV2ZW50LnByZXZlbnREZWZhdWx0KHQpLCJtb3VzZWRvd24iIT09dC50eXBlP2UuRG9tRXZlbnQuc3RvcFByb3BhZ2F0aW9uKHQpOmUuRG9tRXZlbnQucHJldmVudERlZmF1bHQodCl9fSksZS5CYXNlTWFya2VyTWV0aG9kcz17c2hvd0xhYmVsOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubGFiZWwmJnRoaXMuX21hcCYmKHRoaXMubGFiZWwuc2V0TGF0TG5nKHRoaXMuX2xhdGxuZyksdGhpcy5fbWFwLnNob3dMYWJlbCh0aGlzLmxhYmVsKSksdGhpc30saGlkZUxhYmVsOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubGFiZWwmJnRoaXMubGFiZWwuY2xvc2UoKSx0aGlzfSxzZXRMYWJlbE5vSGlkZTpmdW5jdGlvbih0KXt0aGlzLl9sYWJlbE5vSGlkZSE9PXQmJih0aGlzLl9sYWJlbE5vSGlkZT10LHQ/KHRoaXMuX3JlbW92ZUxhYmVsUmV2ZWFsSGFuZGxlcnMoKSx0aGlzLnNob3dMYWJlbCgpKToodGhpcy5fYWRkTGFiZWxSZXZlYWxIYW5kbGVycygpLHRoaXMuaGlkZUxhYmVsKCkpKX0sYmluZExhYmVsOmZ1bmN0aW9uKHQsaSl7dmFyIG49dGhpcy5vcHRpb25zLmljb24/dGhpcy5vcHRpb25zLmljb24ub3B0aW9ucy5sYWJlbEFuY2hvcjp0aGlzLm9wdGlvbnMubGFiZWxBbmNob3Isbz1lLnBvaW50KG4pfHxlLnBvaW50KDAsMCk7cmV0dXJuIG89by5hZGQoZS5MYWJlbC5wcm90b3R5cGUub3B0aW9ucy5vZmZzZXQpLGkmJmkub2Zmc2V0JiYobz1vLmFkZChpLm9mZnNldCkpLGk9ZS5VdGlsLmV4dGVuZCh7b2Zmc2V0Om99LGkpLHRoaXMuX2xhYmVsTm9IaWRlPWkubm9IaWRlLHRoaXMubGFiZWx8fCh0aGlzLl9sYWJlbE5vSGlkZXx8dGhpcy5fYWRkTGFiZWxSZXZlYWxIYW5kbGVycygpLHRoaXMub24oInJlbW92ZSIsdGhpcy5oaWRlTGFiZWwsdGhpcykub24oIm1vdmUiLHRoaXMuX21vdmVMYWJlbCx0aGlzKS5vbigiYWRkIix0aGlzLl9vbk1hcmtlckFkZCx0aGlzKSx0aGlzLl9oYXNMYWJlbEhhbmRsZXJzPSEwKSx0aGlzLmxhYmVsPW5ldyBlLkxhYmVsKGksdGhpcykuc2V0Q29udGVudCh0KSx0aGlzfSx1bmJpbmRMYWJlbDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmxhYmVsJiYodGhpcy5oaWRlTGFiZWwoKSx0aGlzLmxhYmVsPW51bGwsdGhpcy5faGFzTGFiZWxIYW5kbGVycyYmKHRoaXMuX2xhYmVsTm9IaWRlfHx0aGlzLl9yZW1vdmVMYWJlbFJldmVhbEhhbmRsZXJzKCksdGhpcy5vZmYoInJlbW92ZSIsdGhpcy5oaWRlTGFiZWwsdGhpcykub2ZmKCJtb3ZlIix0aGlzLl9tb3ZlTGFiZWwsdGhpcykub2ZmKCJhZGQiLHRoaXMuX29uTWFya2VyQWRkLHRoaXMpKSx0aGlzLl9oYXNMYWJlbEhhbmRsZXJzPSExKSx0aGlzfSx1cGRhdGVMYWJlbENvbnRlbnQ6ZnVuY3Rpb24odCl7dGhpcy5sYWJlbCYmdGhpcy5sYWJlbC5zZXRDb250ZW50KHQpfSxnZXRMYWJlbDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmxhYmVsfSxfb25NYXJrZXJBZGQ6ZnVuY3Rpb24oKXt0aGlzLl9sYWJlbE5vSGlkZSYmdGhpcy5zaG93TGFiZWwoKX0sX2FkZExhYmVsUmV2ZWFsSGFuZGxlcnM6ZnVuY3Rpb24oKXt0aGlzLm9uKCJtb3VzZW92ZXIiLHRoaXMuc2hvd0xhYmVsLHRoaXMpLm9uKCJtb3VzZW91dCIsdGhpcy5oaWRlTGFiZWwsdGhpcyksZS5Ccm93c2VyLnRvdWNoJiZ0aGlzLm9uKCJjbGljayIsdGhpcy5zaG93TGFiZWwsdGhpcyl9LF9yZW1vdmVMYWJlbFJldmVhbEhhbmRsZXJzOmZ1bmN0aW9uKCl7dGhpcy5vZmYoIm1vdXNlb3ZlciIsdGhpcy5zaG93TGFiZWwsdGhpcykub2ZmKCJtb3VzZW91dCIsdGhpcy5oaWRlTGFiZWwsdGhpcyksZS5Ccm93c2VyLnRvdWNoJiZ0aGlzLm9mZigiY2xpY2siLHRoaXMuc2hvd0xhYmVsLHRoaXMpfSxfbW92ZUxhYmVsOmZ1bmN0aW9uKHQpe3RoaXMubGFiZWwuc2V0TGF0TG5nKHQubGF0bG5nKX19LGUuSWNvbi5EZWZhdWx0Lm1lcmdlT3B0aW9ucyh7bGFiZWxBbmNob3I6bmV3IGUuUG9pbnQoOSwtMjApfSksZS5NYXJrZXIubWVyZ2VPcHRpb25zKHtpY29uOm5ldyBlLkljb24uRGVmYXVsdH0pLGUuTWFya2VyLmluY2x1ZGUoZS5CYXNlTWFya2VyTWV0aG9kcyksZS5NYXJrZXIuaW5jbHVkZSh7X29yaWdpbmFsVXBkYXRlWkluZGV4OmUuTWFya2VyLnByb3RvdHlwZS5fdXBkYXRlWkluZGV4LF91cGRhdGVaSW5kZXg6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fekluZGV4K3Q7dGhpcy5fb3JpZ2luYWxVcGRhdGVaSW5kZXgodCksdGhpcy5sYWJlbCYmdGhpcy5sYWJlbC51cGRhdGVaSW5kZXgoZSl9LF9vcmlnaW5hbFNldE9wYWNpdHk6ZS5NYXJrZXIucHJvdG90eXBlLnNldE9wYWNpdHksc2V0T3BhY2l0eTpmdW5jdGlvbih0LGUpe3RoaXMub3B0aW9ucy5sYWJlbEhhc1NlbWlUcmFuc3BhcmVuY3k9ZSx0aGlzLl9vcmlnaW5hbFNldE9wYWNpdHkodCl9LF9vcmlnaW5hbFVwZGF0ZU9wYWNpdHk6ZS5NYXJrZXIucHJvdG90eXBlLl91cGRhdGVPcGFjaXR5LF91cGRhdGVPcGFjaXR5OmZ1bmN0aW9uKCl7dmFyIHQ9MD09PXRoaXMub3B0aW9ucy5vcGFjaXR5PzA6MTt0aGlzLl9vcmlnaW5hbFVwZGF0ZU9wYWNpdHkoKSx0aGlzLmxhYmVsJiZ0aGlzLmxhYmVsLnNldE9wYWNpdHkodGhpcy5vcHRpb25zLmxhYmVsSGFzU2VtaVRyYW5zcGFyZW5jeT90aGlzLm9wdGlvbnMub3BhY2l0eTp0KX0sX29yaWdpbmFsU2V0TGF0TG5nOmUuTWFya2VyLnByb3RvdHlwZS5zZXRMYXRMbmcsc2V0TGF0TG5nOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmxhYmVsJiYhdGhpcy5fbGFiZWxOb0hpZGUmJnRoaXMuaGlkZUxhYmVsKCksdGhpcy5fb3JpZ2luYWxTZXRMYXRMbmcodCl9fSksZS5DaXJjbGVNYXJrZXIubWVyZ2VPcHRpb25zKHtsYWJlbEFuY2hvcjpuZXcgZS5Qb2ludCgwLDApfSksZS5DaXJjbGVNYXJrZXIuaW5jbHVkZShlLkJhc2VNYXJrZXJNZXRob2RzKSxlLlBhdGguaW5jbHVkZSh7YmluZExhYmVsOmZ1bmN0aW9uKHQsaSl7cmV0dXJuIHRoaXMubGFiZWwmJnRoaXMubGFiZWwub3B0aW9ucz09PWl8fCh0aGlzLmxhYmVsPW5ldyBlLkxhYmVsKGksdGhpcykpLHRoaXMubGFiZWwuc2V0Q29udGVudCh0KSx0aGlzLl9zaG93TGFiZWxBZGRlZHx8KHRoaXMub24oIm1vdXNlb3ZlciIsdGhpcy5fc2hvd0xhYmVsLHRoaXMpLm9uKCJtb3VzZW1vdmUiLHRoaXMuX21vdmVMYWJlbCx0aGlzKS5vbigibW91c2VvdXQgcmVtb3ZlIix0aGlzLl9oaWRlTGFiZWwsdGhpcyksZS5Ccm93c2VyLnRvdWNoJiZ0aGlzLm9uKCJjbGljayIsdGhpcy5fc2hvd0xhYmVsLHRoaXMpLHRoaXMuX3Nob3dMYWJlbEFkZGVkPSEwKSx0aGlzfSx1bmJpbmRMYWJlbDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmxhYmVsJiYodGhpcy5faGlkZUxhYmVsKCksdGhpcy5sYWJlbD1udWxsLHRoaXMuX3Nob3dMYWJlbEFkZGVkPSExLHRoaXMub2ZmKCJtb3VzZW92ZXIiLHRoaXMuX3Nob3dMYWJlbCx0aGlzKS5vZmYoIm1vdXNlbW92ZSIsdGhpcy5fbW92ZUxhYmVsLHRoaXMpLm9mZigibW91c2VvdXQgcmVtb3ZlIix0aGlzLl9oaWRlTGFiZWwsdGhpcykpLHRoaXN9LHVwZGF0ZUxhYmVsQ29udGVudDpmdW5jdGlvbih0KXt0aGlzLmxhYmVsJiZ0aGlzLmxhYmVsLnNldENvbnRlbnQodCl9LF9zaG93TGFiZWw6ZnVuY3Rpb24odCl7dGhpcy5sYWJlbC5zZXRMYXRMbmcodC5sYXRsbmcpLHRoaXMuX21hcC5zaG93TGFiZWwodGhpcy5sYWJlbCl9LF9tb3ZlTGFiZWw6ZnVuY3Rpb24odCl7dGhpcy5sYWJlbC5zZXRMYXRMbmcodC5sYXRsbmcpfSxfaGlkZUxhYmVsOmZ1bmN0aW9uKCl7dGhpcy5sYWJlbC5jbG9zZSgpfX0pLGUuTWFwLmluY2x1ZGUoe3Nob3dMYWJlbDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5hZGRMYXllcih0KX19KSxlLkZlYXR1cmVHcm91cC5pbmNsdWRlKHtjbGVhckxheWVyczpmdW5jdGlvbigpe3JldHVybiB0aGlzLnVuYmluZExhYmVsKCksdGhpcy5lYWNoTGF5ZXIodGhpcy5yZW1vdmVMYXllcix0aGlzKSx0aGlzfSxiaW5kTGFiZWw6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5pbnZva2UoImJpbmRMYWJlbCIsdCxlKX0sdW5iaW5kTGFiZWw6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pbnZva2UoInVuYmluZExhYmVsIil9LHVwZGF0ZUxhYmVsQ29udGVudDpmdW5jdGlvbih0KXt0aGlzLmludm9rZSgidXBkYXRlTGFiZWxDb250ZW50Iix0KX19KX0pKHdpbmRvdyxkb2N1bWVudCk7"></script>
<script src="data:application/x-javascript;base64,ZnVuY3Rpb24gcmVjeWNsZSh2YWx1ZXMsIGxlbmd0aCwgaW5QbGFjZSkgewogIGlmIChsZW5ndGggPT09IDAgJiYgIWluUGxhY2UpCiAgICByZXR1cm4gW107CgogIGlmICghKHZhbHVlcyBpbnN0YW5jZW9mIEFycmF5KSkgewogICAgaWYgKGluUGxhY2UpIHsKICAgICAgdGhyb3cgbmV3IEVycm9yKCJDYW4ndCBkbyBpbi1wbGFjZSByZWN5Y2xpbmcgb2YgYSBub24tQXJyYXkgdmFsdWUiKTsKICAgIH0KICAgIHZhbHVlcyA9IFt2YWx1ZXNdOwogIH0KICBpZiAodHlwZW9mKGxlbmd0aCkgPT09ICd1bmRlZmluZWQnKQogICAgbGVuZ3RoID0gdmFsdWVzLmxlbmd0aDsKCiAgdmFyIGRlc3QgPSBpblBsYWNlID8gdmFsdWVzIDogW107CiAgdmFyIG9yaWdMZW5ndGggPSB2YWx1ZXMubGVuZ3RoOwogIHdoaWxlIChkZXN0Lmxlbmd0aCA8IGxlbmd0aCkgewogICAgZGVzdC5wdXNoKHZhbHVlc1tkZXN0Lmxlbmd0aCAlIG9yaWdMZW5ndGhdKTsKICB9CiAgaWYgKGRlc3QubGVuZ3RoID4gbGVuZ3RoKSB7CiAgICBkZXN0LnNwbGljZShsZW5ndGgsIGRlc3QubGVuZ3RoIC0gbGVuZ3RoKTsKICB9CiAgcmV0dXJuIGRlc3Q7Cn0KCmZ1bmN0aW9uIGFzQXJyYXkodmFsdWUpIHsKICBpZiAodmFsdWUgaW5zdGFuY2VvZiBBcnJheSkKICAgIHJldHVybiB2YWx1ZTsKICBlbHNlCiAgICByZXR1cm4gW3ZhbHVlXTsKfQoKdmFyIGRhdGFmcmFtZSA9IChmdW5jdGlvbigpIHsKICB2YXIgZXhwb3J0cyA9IHt9OwoKICB2YXIgRGF0YUZyYW1lID0gZnVuY3Rpb24oKSB7CiAgICB0aGlzLmNvbHVtbnMgPSBbXTsKICAgIHRoaXMuY29sbmFtZXMgPSBbXTsKICAgIHRoaXMuY29sc3RyaWN0ID0gW107CgogICAgdGhpcy5lZmZlY3RpdmVMZW5ndGggPSAwOwogICAgdGhpcy5jb2xpbmRpY2VzID0ge307CiAgfTsKCiAgRGF0YUZyYW1lLnByb3RvdHlwZS5fdXBkYXRlQ2FjaGVkUHJvcGVydGllcyA9IGZ1bmN0aW9uKCkgewogICAgdmFyIHNlbGYgPSB0aGlzOwogICAgdGhpcy5lZmZlY3RpdmVMZW5ndGggPSAwOwogICAgdGhpcy5jb2xpbmRpY2VzID0ge307CgogICAgJC5lYWNoKHRoaXMuY29sdW1ucywgZnVuY3Rpb24oaSwgY29sdW1uKSB7CiAgICAgIHNlbGYuZWZmZWN0aXZlTGVuZ3RoID0gTWF0aC5tYXgoc2VsZi5lZmZlY3RpdmVMZW5ndGgsIGNvbHVtbi5sZW5ndGgpOwogICAgICBzZWxmLmNvbGluZGljZXNbc2VsZi5jb2xuYW1lc1tpXV0gPSBpOwogICAgfSk7CiAgfTsKCiAgRGF0YUZyYW1lLnByb3RvdHlwZS5fY29sSW5kZXggPSBmdW5jdGlvbihjb2xuYW1lKSB7CiAgICB2YXIgaW5kZXggPSB0aGlzLmNvbGluZGljZXNbY29sbmFtZV07CiAgICBpZiAodHlwZW9mKGluZGV4KSA9PT0gJ3VuZGVmaW5lZCcpCiAgICAgIHJldHVybiAtMTsKICAgIHJldHVybiBpbmRleDsKICB9OwoKICBEYXRhRnJhbWUucHJvdG90eXBlLmNvbCA9IGZ1bmN0aW9uKG5hbWUsIHZhbHVlcywgc3RyaWN0KSB7CiAgICBpZiAodHlwZW9mKG5hbWUpICE9PSAnc3RyaW5nJykKICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGNvbHVtbiBuYW1lICInICsgbmFtZSArICciJyk7CgogICAgdmFyIGluZGV4ID0gdGhpcy5fY29sSW5kZXgobmFtZSk7CgogICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDEpIHsKICAgICAgaWYgKGluZGV4IDwgMCkKICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgZWxzZQogICAgICAgIHJldHVybiByZWN5Y2xlKHRoaXMuY29sdW1uc1tpbmRleF0sIHRoaXMuZWZmZWN0aXZlTGVuZ3RoKTsKICAgIH0KCiAgICBpZiAoaW5kZXggPCAwKSB7CiAgICAgIGluZGV4ID0gdGhpcy5jb2xuYW1lcy5sZW5ndGg7CiAgICAgIHRoaXMuY29sbmFtZXMucHVzaChuYW1lKTsKICAgIH0KICAgIHRoaXMuY29sdW1uc1tpbmRleF0gPSBhc0FycmF5KHZhbHVlcyk7CiAgICB0aGlzLmNvbHN0cmljdFtpbmRleF0gPSAhIXN0cmljdDsKCiAgICAvLyBUT0RPOiBWYWxpZGF0ZSBzdHJpY3RuZXNzIChlbnN1cmUgbGVuZ3RocyBtYXRjaCB1cCB3aXRoIG90aGVyIHN0cmljdHMpCgogICAgdGhpcy5fdXBkYXRlQ2FjaGVkUHJvcGVydGllcygpOwoKICAgIHJldHVybiB0aGlzOwogIH07CgogIERhdGFGcmFtZS5wcm90b3R5cGUuY2JpbmQgPSBmdW5jdGlvbihvYmosIHN0cmljdCkgewogICAgdmFyIHNlbGYgPSB0aGlzLCBuYW1lOwogICAgJC5lYWNoKG9iaiwgZnVuY3Rpb24obmFtZSwgY29sZGF0YSkgewogICAgICBzZWxmLmNvbChuYW1lLCBjb2xkYXRhKTsKICAgIH0pOwogICAgcmV0dXJuIHRoaXM7CiAgfTsKCiAgRGF0YUZyYW1lLnByb3RvdHlwZS5nZXQgPSBmdW5jdGlvbihyb3csIGNvbCkgewogICAgdmFyIHNlbGYgPSB0aGlzOwoKICAgIGlmIChyb3cgPiB0aGlzLmVmZmVjdGl2ZUxlbmd0aCkKICAgICAgdGhyb3cgbmV3IEVycm9yKCdSb3cgYXJndW1lbnQgd2FzIG91dCBvZiBib3VuZHM6ICcgKyByb3cgKyAnID4gJyArIHRoaXMuZWZmZWN0aXZlTGVuZ3RoKTsKCiAgICB2YXIgY29sSW5kZXggPSAtMTsKICAgIGlmICh0eXBlb2YoY29sKSA9PT0gJ3VuZGVmaW5lZCcpIHsKICAgICAgdmFyIHJvd0RhdGEgPSB7fTsKICAgICAgJC5lYWNoKHRoaXMuY29sbmFtZXMsIGZ1bmN0aW9uKGksIG5hbWUpIHsKICAgICAgICByb3dEYXRhW25hbWVdID0gc2VsZi5jb2x1bW5zW2ldW3JvdyAlIHNlbGYuY29sdW1uc1tpXS5sZW5ndGhdOwogICAgICB9KTsKICAgICAgcmV0dXJuIHJvd0RhdGE7CiAgICB9IGVsc2UgaWYgKHR5cGVvZihjb2wpID09PSAnc3RyaW5nJykgewogICAgICBjb2xJbmRleCA9IHRoaXMuX2NvbEluZGV4KGNvbCk7CiAgICB9IGVsc2UgaWYgKHR5cGVvZihjb2wpID09PSAnbnVtYmVyJykgewogICAgICBjb2xJbmRleCA9IGNvbDsKICAgIH0KICAgIGlmIChjb2xJbmRleCA8IDAgfHwgY29sSW5kZXggPiB0aGlzLmNvbHVtbnMubGVuZ3RoKQogICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Vua25vd24gY29sdW1uIGluZGV4OiAnICsgY29sKTsKCiAgICByZXR1cm4gdGhpcy5jb2x1bW5zW2NvbEluZGV4XVtyb3cgJSB0aGlzLmNvbHVtbnNbY29sSW5kZXhdLmxlbmd0aF07CiAgfTsKCiAgRGF0YUZyYW1lLnByb3RvdHlwZS5ucm93ID0gZnVuY3Rpb24oKSB7CiAgICByZXR1cm4gdGhpcy5lZmZlY3RpdmVMZW5ndGg7CiAgfTsKCiAgZnVuY3Rpb24gdGVzdCgpIHsKICAgIHZhciBkZiA9IG5ldyBEYXRhRnJhbWUoKTsKICAgIGRmLmNvbCgic3BlZWQiLCBbNCwgNCwgNywgNywgOCwgOSwgMTAsIDEwLCAxMCwgMTEsIDExLCAxMiwgMTIsIDEyLCAxMiwgMTMsIDEzLCAxMywgMTMsIDE0LCAxNCwgMTQsIDE0LCAxNSwgMTUsIDE1LCAxNiwgMTYsIDE3LCAxNywgMTcsIDE4LCAxOCwgMTgsIDE4LCAxOSwgMTksIDE5LCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIyLCAyMywgMjQsIDI0LCAyNCwgMjQsIDI1XSkKICAgICAgLmNvbCgiZGlzdCIsIFsyLCAxMCwgNCwgMjIsIDE2LCAxMCwgMTgsIDI2LCAzNCwgMTcsIDI4LCAxNCwgMjAsIDI0LCAyOCwgMjYsIDM0LCAzNCwgNDYsIDI2LCAzNiwgNjAsIDgwLCAyMCwgMjYsIDU0LCAzMiwgNDAsIDMyLCA0MCwgNTAsIDQyLCA1NiwgNzYsIDg0LCAzNiwgNDYsIDY4LCAzMiwgNDgsIDUyLCA1NiwgNjQsIDY2LCA1NCwgNzAsIDkyLCA5MywgMTIwLCA4NV0pCiAgICAgIC5jb2woImNvbG9yIiwgWyJ5ZWxsb3ciLCAicmVkIl0pCiAgICAgIC5jYmluZCh7CiAgICAgICAgIk1ha2UiIDogWyJUb3lvdGEiLCAiQ2FkaWxsYWMiLCAiQk1XIl0sCiAgICAgICAgIk1vZGVsIiA6IFsiQ29yb2xsYSIsICJDVFMiLCAiNDM1aSJdCiAgICAgIH0pCiAgICA7CiAgICBjb25zb2xlLmxvZyhkZi5nZXQoOSwgInNwZWVkIikpOwogICAgY29uc29sZS5sb2coZGYuZ2V0KDksICJkaXN0IikpOwogICAgY29uc29sZS5sb2coZGYuZ2V0KDksICJjb2xvciIpKTsKICAgIGNvbnNvbGUubG9nKGRmLmdldCg5LCAiTWFrZSIpKTsKICAgIGNvbnNvbGUubG9nKGRmLmdldCg5LCAiTW9kZWwiKSk7CiAgICBjb25zb2xlLmxvZyhkZi5nZXQoOSkpOwoKICB9CgogIHJldHVybiB7CiAgICBjcmVhdGU6IGZ1bmN0aW9uKCkgewogICAgICByZXR1cm4gbmV3IERhdGFGcmFtZSgpOwogICAgfQogIH07Cgp9KSgpOwoKKGZ1bmN0aW9uKCkgewogIC8vIFRoaXMgY2xhc3Mgc2ltdWxhdGVzIGEgbWlwbWFwLCB3aGljaCBzaHJpbmtzIGltYWdlcyBieSBwb3dlcnMgb2YgdHdvLiBUaGlzCiAgLy8gc3RlcHdpc2UgcmVkdWN0aW9uIHJlc3VsdHMgaW4gInBpeGVsLXBlcmZlY3QgZG93bnNjYWxpbmciICh3aGVyZSBldmVyeQogIC8vIHBpeGVsIG9mIHRoZSBvcmlnaW5hbCBpbWFnZSBoYXMgc29tZSBjb250cmlidXRpb24gdG8gdGhlIGRvd25zY2FsZWQgaW1hZ2UpCiAgLy8gYXMgb3Bwb3NlZCB0byBhIHNpbmdsZS1zdGVwIGRvd25zY2FsaW5nIHdoaWNoIHdpbGwgZGlzY2FyZCBhIGxvdCBvZiBkYXRhCiAgLy8gKGFuZCB3aXRoIHNwYXJzZSBpbWFnZXMgYXQgc21hbGwgc2NhbGVzIGNhbiBnaXZlIHZlcnkgc3VycHJpc2luZyByZXN1bHRzKS4KICBmdW5jdGlvbiBNaXBtYXBwZXIoaW1nKSB7CiAgICB0aGlzLl9sYXllcnMgPSBbaW1nXTsKICB9CiAgLy8gVGhlIHZhcmlvdXMgZnVuY3Rpb25zIG9uIHRoaXMgY2xhc3MgdGFrZSBhIGNhbGxiYWNrIGZ1bmN0aW9uIEJVVCBNQVkgT1IgTUFZCiAgLy8gTk9UIGFjdHVhbGx5IGJlaGF2ZSBhc3luY2hyb25vdXNseS4KICBNaXBtYXBwZXIucHJvdG90eXBlLmdldEJ5U2l6ZSA9IGZ1bmN0aW9uKGRlc2lyZWRXaWR0aCwgZGVzaXJlZEhlaWdodCwgY2FsbGJhY2spIHsKICAgIHZhciBzZWxmID0gdGhpczsKICAgIHZhciBpID0gMDsKICAgIHZhciBsYXN0SW1nID0gdGhpcy5fbGF5ZXJzWzBdOwogICAgZnVuY3Rpb24gdGVzdE5leHQoKSB7CiAgICAgIHNlbGYuZ2V0QnlJbmRleChpLCBmdW5jdGlvbihpbWcpIHsKICAgICAgICAvLyBJZiBjdXJyZW50IGltYWdlIGlzIGludmFsaWQgKGkuZS4gdG9vIHNtYWxsIHRvIGJlIHJlbmRlcmVkKSBvcgogICAgICAgIC8vIGl0J3Mgc21hbGxlciB0aGFuIHdoYXQgd2Ugd2FudGVkLCByZXR1cm4gdGhlIGxhc3Qga25vd24gZ29vZCBpbWFnZS4KICAgICAgICBpZiAoIWltZyB8fCBpbWcud2lkdGggPCBkZXNpcmVkV2lkdGggfHwgaW1nLmhlaWdodCA8IGRlc2lyZWRIZWlnaHQpIHsKICAgICAgICAgIGNhbGxiYWNrKGxhc3RJbWcpOwogICAgICAgICAgcmV0dXJuOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBsYXN0SW1nID0gaW1nOwogICAgICAgICAgaSsrOwogICAgICAgICAgdGVzdE5leHQoKTsKICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgIH0pOwogICAgfQogICAgdGVzdE5leHQoKTsKICB9OwogIE1pcG1hcHBlci5wcm90b3R5cGUuZ2V0QnlJbmRleCA9IGZ1bmN0aW9uKGksIGNhbGxiYWNrKSB7CiAgICB2YXIgc2VsZiA9IHRoaXM7CiAgICBpZiAodGhpcy5fbGF5ZXJzW2ldKSB7CiAgICAgIGNhbGxiYWNrKHRoaXMuX2xheWVyc1tpXSk7CiAgICAgIHJldHVybjsKICAgIH0KCiAgICB0aGlzLmdldEJ5SW5kZXgoaS0xLCBmdW5jdGlvbihwcmV2SW1nKSB7CiAgICAgIGlmICghcHJldkltZykgewogICAgICAgIC8vIHByZXZJbWcgY291bGQgbm90IGJlIGNhbGN1bGF0ZWQgKHRvbyBzbWFsbCwgcG9zc2libHkpCiAgICAgICAgY2FsbGJhY2sobnVsbCk7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIGlmIChwcmV2SW1nLndpZHRoIDwgMiB8fCBwcmV2SW1nLmhlaWdodCA8IDIpIHsKICAgICAgICAvLyBDYW4ndCByZWR1Y2UgdGhpcyBpbWFnZSBhbnkgZnVydGhlcgogICAgICAgIGNhbGxiYWNrKG51bGwpOwogICAgICAgIHJldHVybjsKICAgICAgfQogICAgICAvLyBJZiByZWR1Y2UgZXZlciBiZWNvbWVzIHRydWx5IGFzeW5jaHJvbm91cywgd2Ugc2hvdWxkIHN0dWZmIGEgcHJvbWlzZSBvcgogICAgICAvLyBzb21ldGhpbmcgaW50byBzZWxmLl9sYXllcnNbaV0gYmVmb3JlIGNhbGxpbmcgc2VsZi5yZWR1Y2UoKSwgdG8gcHJldmVudAogICAgICAvLyByZWR1bmRhbnQgcmVkdWNlIG9wZXJhdGlvbnMgZnJvbSBoYXBwZW5pbmcuCiAgICAgIHNlbGYucmVkdWNlKHByZXZJbWcsIGZ1bmN0aW9uKHJlZHVjZWRJbWcpIHsKICAgICAgICBzZWxmLl9sYXllcnNbaV0gPSByZWR1Y2VkSW1nOwogICAgICAgIGNhbGxiYWNrKHJlZHVjZWRJbWcpOwogICAgICAgIHJldHVybjsKICAgICAgfSk7CiAgICB9KTsKICB9OwogIE1pcG1hcHBlci5wcm90b3R5cGUucmVkdWNlID0gZnVuY3Rpb24oaW1nLCBjYWxsYmFjaykgewogICAgICB2YXIgaW1nRGF0YUNhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImNhbnZhcyIpOwogICAgICBpbWdEYXRhQ2FudmFzLndpZHRoID0gTWF0aC5jZWlsKGltZy53aWR0aCAvIDIpOwogICAgICBpbWdEYXRhQ2FudmFzLmhlaWdodCA9IE1hdGguY2VpbChpbWcuaGVpZ2h0IC8gMik7CiAgICAgIGltZ0RhdGFDYW52YXMuc3R5bGUuZGlzcGxheSA9ICJub25lIjsKICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChpbWdEYXRhQ2FudmFzKTsKICAgICAgdHJ5IHsKICAgICAgICB2YXIgaW1nRGF0YUN0eCA9IGltZ0RhdGFDYW52YXMuZ2V0Q29udGV4dCgiMmQiKTsKICAgICAgICBpbWdEYXRhQ3R4LmRyYXdJbWFnZShpbWcsIDAsIDAsIGltZy53aWR0aC8yLCBpbWcuaGVpZ2h0LzIpOwogICAgICAgIGNhbGxiYWNrKGltZ0RhdGFDYW52YXMpOwogICAgICB9IGZpbmFsbHkgewogICAgICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQoaW1nRGF0YUNhbnZhcyk7CiAgICAgIH0KCiAgfTsKCiAgZnVuY3Rpb24gTGF5ZXJNYW5hZ2VyKG1hcCkgewogICAgdGhpcy5fbWFwID0gbWFwOwoKICAgIC8vIEJFR0lOIGxheWVyIGluZGljZXMKCiAgICAvLyB7PGdyb3VwbmFtZT46IHs8c3RhbXA+OiBsYXllcn19CiAgICB0aGlzLl9ieUdyb3VwID0ge307CiAgICAvLyB7PGNhdGVnb3J5TmFtZT46IHs8c3RhbXA+OiBsYXllcn19CiAgICB0aGlzLl9ieUNhdGVnb3J5ID0ge307CiAgICAvLyB7PGNhdGVnb3J5TmFtZV9sYXllcklkPjogbGF5ZXJ9CiAgICB0aGlzLl9ieUxheWVySWQgPSB7fTsKICAgIC8vIHs8c3RhbXA+OiB7CiAgICAvLyAgICAgICAgICAgICAiZ3JvdXAiOiA8Z3JvdXBuYW1lPiwKICAgIC8vICAgICAgICAgICAgICJsYXllcklkIjogPGxheWVySWQ+LAogICAgLy8gICAgICAgICAgICAgImNhdGVnb3J5IjogPGNhdGVnb3J5PiwKICAgIC8vICAgICAgICAgICAgICJjb250YWluZXIiOiA8Y29udGFpbmVyPgogICAgLy8gICAgICAgICAgIH0KICAgIC8vIH0KICAgIHRoaXMuX2J5U3RhbXAgPSB7fTsKCiAgICAvLyBFTkQgbGF5ZXIgaW5kaWNlcwoKICAgIC8vIHs8Y2F0ZWdvcnlOYW1lPjogTC5sYXllckdyb3VwfQogICAgdGhpcy5fY2F0ZWdvcnlDb250YWluZXJzID0ge307CiAgICAvLyB7PGdyb3VwTmFtZT46IEwubGF5ZXJHcm91cH0KICAgIHRoaXMuX2dyb3VwQ29udGFpbmVycyA9IHt9OwogIH0KICBMYXllck1hbmFnZXIucHJvdG90eXBlLmFkZExheWVyID0gZnVuY3Rpb24obGF5ZXIsIGNhdGVnb3J5LCBsYXllcklkLCBncm91cCkgewogICAgLy8gV2FzIGEgZ3JvdXAgcHJvdmlkZWQ/CiAgICB2YXIgaGFzSWQgPSB0eXBlb2YobGF5ZXJJZCkgPT09ICJzdHJpbmciOwogICAgdmFyIGdyb3VwZWQgPSB0eXBlb2YoZ3JvdXApID09PSAic3RyaW5nIjsKCiAgICB2YXIgc3RhbXAgPSBMLlV0aWwuc3RhbXAobGF5ZXIpOwoKICAgIC8vIFRoaXMgd2lsbCBiZSB0aGUgZGVmYXVsdCBsYXllciBncm91cCB0byBhZGQgdGhlIGxheWVyIHRvLgogICAgLy8gV2UgbWF5IG92ZXJ3cml0ZSB0aGlzIHZhciBiZWZvcmUgdXNpbmcgaXQgKGkuZS4gaWYgYSBncm91cCBpcyBhc3NpZ25lZCkuCiAgICAvLyBUaGlzIG9uZSBsaW5lciBjcmVhdGVzIHRoZSBfY2F0ZWdvcnlDb250YWluZXJzW2NhdGVnb3J5XSBlbnRyeSBpZiBpdAogICAgLy8gZG9lc24ndCBhbHJlYWR5IGV4aXN0LgogICAgdmFyIGNvbnRhaW5lciA9IHRoaXMuX2NhdGVnb3J5Q29udGFpbmVyc1tjYXRlZ29yeV0gPQogICAgICAgIHRoaXMuX2NhdGVnb3J5Q29udGFpbmVyc1tjYXRlZ29yeV0gfHwgTC5sYXllckdyb3VwKCkuYWRkVG8odGhpcy5fbWFwKTsKCiAgICB2YXIgb2xkTGF5ZXIgPSBudWxsOwogICAgaWYgKGhhc0lkKSB7CiAgICAgIC8vIEZpcnN0LCByZW1vdmUgYW55IGxheWVyIHdpdGggdGhlIHNhbWUgY2F0ZWdvcnkgYW5kIGxheWVySWQKICAgICAgdmFyIHByZWZpeGVkTGF5ZXJJZCA9IHRoaXMuX2xheWVySWRLZXkoY2F0ZWdvcnksIGxheWVySWQpOwogICAgICBvbGRMYXllciA9IHRoaXMuX2J5TGF5ZXJJZFtwcmVmaXhlZExheWVySWRdOwogICAgICBpZiAob2xkTGF5ZXIpIHsKICAgICAgICB0aGlzLl9yZW1vdmVMYXllcihvbGRMYXllcik7CiAgICAgIH0KCiAgICAgIC8vIFVwZGF0ZSBsYXllcklkIGluZGV4CiAgICAgIHRoaXMuX2J5TGF5ZXJJZFtwcmVmaXhlZExheWVySWRdID0gbGF5ZXI7CiAgICB9CgogICAgLy8gVXBkYXRlIGdyb3VwIGluZGV4CiAgICBpZiAoZ3JvdXBlZCkgewogICAgICB0aGlzLl9ieUdyb3VwW2dyb3VwXSA9IHRoaXMuX2J5R3JvdXBbZ3JvdXBdIHx8IHt9OwogICAgICB0aGlzLl9ieUdyb3VwW2dyb3VwXVtzdGFtcF0gPSBsYXllcjsKCiAgICAgIC8vIFNpbmNlIGEgZ3JvdXAgaXMgYXNzaWduZWQsIGRvbid0IGFkZCB0aGUgbGF5ZXIgdG8gdGhlIGNhdGVnb3J5J3MgbGF5ZXIKICAgICAgLy8gZ3JvdXA7IGluc3RlYWQsIHVzZSB0aGUgZ3JvdXAncyBsYXllciBncm91cC4KICAgICAgLy8gVGhpcyBvbmUgbGluZXIgY3JlYXRlcyB0aGUgX2dyb3VwQ29udGFpbmVyc1tncm91cF0gZW50cnkgaWYgaXQgZG9lc24ndAogICAgICAvLyBhbHJlYWR5IGV4aXN0LgogICAgICBjb250YWluZXIgPSB0aGlzLmdldExheWVyR3JvdXAoZ3JvdXAsIHRydWUpOwogICAgfQoKICAgIC8vIFVwZGF0ZSBjYXRlZ29yeSBpbmRleAogICAgdGhpcy5fYnlDYXRlZ29yeVtjYXRlZ29yeV0gPSB0aGlzLl9ieUNhdGVnb3J5W2NhdGVnb3J5XSB8fCB7fTsKICAgIHRoaXMuX2J5Q2F0ZWdvcnlbY2F0ZWdvcnldW3N0YW1wXSA9IGxheWVyOwoKICAgIC8vIFVwZGF0ZSBzdGFtcCBpbmRleAogICAgdGhpcy5fYnlTdGFtcFtzdGFtcF0gPSB7CiAgICAgIGxheWVyOiBsYXllciwKICAgICAgZ3JvdXA6IGdyb3VwLAogICAgICBsYXllcklkOiBsYXllcklkLAogICAgICBjYXRlZ29yeTogY2F0ZWdvcnksCiAgICAgIGNvbnRhaW5lcjogY29udGFpbmVyCiAgICB9OwoKICAgIC8vIEFkZCB0byBjb250YWluZXIKICAgIGNvbnRhaW5lci5hZGRMYXllcihsYXllcik7CgogICAgcmV0dXJuIG9sZExheWVyOwogIH07CiAgTGF5ZXJNYW5hZ2VyLnByb3RvdHlwZS5nZXRMYXllciA9IGZ1bmN0aW9uKGNhdGVnb3J5LCBsYXllcklkKSB7CiAgICByZXR1cm4gdGhpcy5fYnlMYXllcklkW3RoaXMuX2xheWVySWRLZXkoY2F0ZWdvcnksIGxheWVySWQpXTsKICB9OwogIExheWVyTWFuYWdlci5wcm90b3R5cGUucmVtb3ZlTGF5ZXIgPSBmdW5jdGlvbihjYXRlZ29yeSwgbGF5ZXJJZHMpIHsKICAgIHZhciBzZWxmID0gdGhpczsKICAgIC8vIEZpbmQgbGF5ZXIgaW5mbwogICAgJC5lYWNoKGFzQXJyYXkobGF5ZXJJZHMpLCBmdW5jdGlvbihpLCBsYXllcklkKSB7CiAgICAgIHZhciBsYXllciA9IHNlbGYuX2J5TGF5ZXJJZFtzZWxmLl9sYXllcklkS2V5KGNhdGVnb3J5LCBsYXllcklkKV07CiAgICAgIGlmIChsYXllcikgewogICAgICAgIHNlbGYuX3JlbW92ZUxheWVyKGxheWVyKTsKICAgICAgfQogICAgfSk7CiAgfTsKICBMYXllck1hbmFnZXIucHJvdG90eXBlLmNsZWFyTGF5ZXJzID0gZnVuY3Rpb24oY2F0ZWdvcnkpIHsKICAgIHZhciBzZWxmID0gdGhpczsKCiAgICAvLyBGaW5kIGFsbCBsYXllcnMgaW4gX2J5Q2F0ZWdvcnlbY2F0ZWdvcnldCiAgICB2YXIgY2F0VGFibGUgPSB0aGlzLl9ieUNhdGVnb3J5W2NhdGVnb3J5XTsKICAgIGlmICghY2F0VGFibGUpIHsKICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQoKICAgIC8vIFJlbW92ZSBhbGwgbGF5ZXJzLiBNYWtlIGNvcHkgb2Yga2V5cyB0byBhdm9pZCBtdXRhdGluZyB0aGUgY29sbGVjdGlvbgogICAgLy8gYmVoaW5kIHRoZSBpdGVyYXRvciB5b3UncmUgYWNjZXNzaW5nLgogICAgdmFyIHN0YW1wcyA9IFtdOwogICAgJC5lYWNoKGNhdFRhYmxlLCBmdW5jdGlvbihrLCB2KSB7CiAgICAgIHN0YW1wcy5wdXNoKGspOwogICAgfSk7CiAgICAkLmVhY2goc3RhbXBzLCBmdW5jdGlvbihpLCBzdGFtcCkgewogICAgICBzZWxmLl9yZW1vdmVMYXllcihzdGFtcCk7CiAgICB9KTsKICB9OwogIExheWVyTWFuYWdlci5wcm90b3R5cGUuZ2V0TGF5ZXJHcm91cCA9IGZ1bmN0aW9uKGdyb3VwLCBlbnN1cmVFeGlzdHMpIHsKICAgIHZhciBnID0gdGhpcy5fZ3JvdXBDb250YWluZXJzW2dyb3VwXTsKICAgIGlmIChlbnN1cmVFeGlzdHMgJiYgIWcpIHsKICAgICAgdGhpcy5fYnlHcm91cFtncm91cF0gPSB0aGlzLl9ieUdyb3VwW2dyb3VwXSB8fCB7fTsKICAgICAgZyA9IHRoaXMuX2dyb3VwQ29udGFpbmVyc1tncm91cF0gPSBMLmxheWVyR3JvdXAoKTsKICAgICAgZy5ncm91cG5hbWUgPSBncm91cDsKICAgICAgZy5hZGRUbyh0aGlzLl9tYXApOwogICAgfQogICAgcmV0dXJuIGc7CiAgfTsKICBMYXllck1hbmFnZXIucHJvdG90eXBlLmdldEdyb3VwTmFtZUZyb21MYXllckdyb3VwID0gZnVuY3Rpb24obGF5ZXJHcm91cCkgewogICAgcmV0dXJuIGxheWVyR3JvdXAuZ3JvdXBuYW1lOwogIH07CiAgTGF5ZXJNYW5hZ2VyLnByb3RvdHlwZS5nZXRWaXNpYmxlR3JvdXBzID0gZnVuY3Rpb24oKSB7CiAgICB2YXIgc2VsZiA9IHRoaXM7CiAgICB2YXIgcmVzdWx0ID0gW107CiAgICAkLmVhY2godGhpcy5fZ3JvdXBDb250YWluZXJzLCBmdW5jdGlvbihrLCB2KSB7CiAgICAgIGlmIChzZWxmLl9tYXAuaGFzTGF5ZXIodikpIHsKICAgICAgICByZXN1bHQucHVzaChrKTsKICAgICAgfQogICAgfSk7CiAgICByZXR1cm4gcmVzdWx0OwogIH07CiAgTGF5ZXJNYW5hZ2VyLnByb3RvdHlwZS5jbGVhckdyb3VwID0gZnVuY3Rpb24oZ3JvdXApIHsKICAgIHZhciBzZWxmID0gdGhpczsKCiAgICAvLyBGaW5kIGFsbCBsYXllcnMgaW4gX2J5R3JvdXBbZ3JvdXBdCiAgICB2YXIgZ3JvdXBUYWJsZSA9IHRoaXMuX2J5R3JvdXBbZ3JvdXBdOwogICAgaWYgKCFncm91cFRhYmxlKSB7CiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KCiAgICAvLyBSZW1vdmUgYWxsIGxheWVycy4gTWFrZSBjb3B5IG9mIGtleXMgdG8gYXZvaWQgbXV0YXRpbmcgdGhlIGNvbGxlY3Rpb24KICAgIC8vIGJlaGluZCB0aGUgaXRlcmF0b3IgeW91J3JlIGFjY2Vzc2luZy4KICAgIHZhciBzdGFtcHMgPSBbXTsKICAgICQuZWFjaChncm91cFRhYmxlLCBmdW5jdGlvbihrLCB2KSB7CiAgICAgIHN0YW1wcy5wdXNoKGspOwogICAgfSk7CiAgICAkLmVhY2goc3RhbXBzLCBmdW5jdGlvbihpLCBzdGFtcCkgewogICAgICBzZWxmLl9yZW1vdmVMYXllcihzdGFtcCk7CiAgICB9KTsKICB9OwogIExheWVyTWFuYWdlci5wcm90b3R5cGUuY2xlYXIgPSBmdW5jdGlvbigpIHsKICAgIGZ1bmN0aW9uIGNsZWFyTGF5ZXJHcm91cChrZXksIGxheWVyR3JvdXApIHsKICAgICAgbGF5ZXJHcm91cC5jbGVhckxheWVycygpOwogICAgfQogICAgLy8gQ2xlYXIgYWxsIGluZGljZXMgYW5kIGxheWVyR3JvdXBzCiAgICB0aGlzLl9ieUdyb3VwID0ge307CiAgICB0aGlzLl9ieUNhdGVnb3J5ID0ge307CiAgICB0aGlzLl9ieUxheWVySWQgPSB7fTsKICAgIHRoaXMuX2J5U3RhbXAgPSB7fTsKICAgICQuZWFjaCh0aGlzLl9jYXRlZ29yeUNvbnRhaW5lcnMsIGNsZWFyTGF5ZXJHcm91cCk7CiAgICB0aGlzLl9jYXRlZ29yeUNvbnRhaW5lcnMgPSB7fTsKICAgICQuZWFjaCh0aGlzLl9ncm91cENvbnRhaW5lcnMsIGNsZWFyTGF5ZXJHcm91cCk7CiAgICB0aGlzLl9ncm91cENvbnRhaW5lcnMgPSB7fTsKICB9OwogIExheWVyTWFuYWdlci5wcm90b3R5cGUuX3JlbW92ZUxheWVyID0gZnVuY3Rpb24obGF5ZXIpIHsKICAgIHZhciBzdGFtcDsKICAgIGlmICh0eXBlb2YobGF5ZXIpID09PSAic3RyaW5nIikgewogICAgICBzdGFtcCA9IGxheWVyOwogICAgfSBlbHNlIHsKICAgICAgc3RhbXAgPSBMLlV0aWwuc3RhbXAobGF5ZXIpOwogICAgfQoKICAgIHZhciBsYXllckluZm8gPSB0aGlzLl9ieVN0YW1wW3N0YW1wXTsKICAgIGlmICghbGF5ZXJJbmZvKSB7CiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KCiAgICBsYXllckluZm8uY29udGFpbmVyLnJlbW92ZUxheWVyKHN0YW1wKTsKICAgIGlmICh0eXBlb2YobGF5ZXJJbmZvLmdyb3VwKSA9PT0gInN0cmluZyIpIHsKICAgICAgZGVsZXRlIHRoaXMuX2J5R3JvdXBbbGF5ZXJJbmZvLmdyb3VwXVtzdGFtcF07CiAgICB9CiAgICBpZiAodHlwZW9mKGxheWVySW5mby5sYXllcklkKSA9PT0gInN0cmluZyIpIHsKICAgICAgZGVsZXRlIHRoaXMuX2J5TGF5ZXJJZFt0aGlzLl9sYXllcklkS2V5KGxheWVySW5mby5jYXRlZ29yeSwgbGF5ZXJJbmZvLmxheWVySWQpXTsKICAgIH0KICAgIGRlbGV0ZSB0aGlzLl9ieUNhdGVnb3J5W2xheWVySW5mby5jYXRlZ29yeV1bc3RhbXBdOwogICAgZGVsZXRlIHRoaXMuX2J5U3RhbXBbc3RhbXBdOwogIH07CiAgTGF5ZXJNYW5hZ2VyLnByb3RvdHlwZS5fbGF5ZXJJZEtleSA9IGZ1bmN0aW9uKGNhdGVnb3J5LCBsYXllcklkKSB7CiAgICByZXR1cm4gY2F0ZWdvcnkgKyAiXG4iICsgbGF5ZXJJZDsKICB9OwoKICBmdW5jdGlvbiBDb250cm9sU3RvcmUobWFwKSB7CiAgICB0aGlzLl9jb250cm9sc05vSWQgPSBbXTsKICAgIHRoaXMuX2NvbnRyb2xzQnlJZCA9IHt9OwogICAgdGhpcy5fbWFwID0gbWFwCiAgfQoKICBDb250cm9sU3RvcmUucHJvdG90eXBlLmFkZCA9IGZ1bmN0aW9uKGNvbnRyb2wsIGlkLCBodG1sKSB7CiAgICBpZiAodHlwZW9mKGlkKSAhPT0gJ3VuZGVmaW5lZCcgJiYgaWQgIT09IG51bGwpIHsKICAgICAgaWYgKHRoaXMuX2NvbnRyb2xzQnlJZFtpZF0pIHsKICAgICAgICB0aGlzLl9tYXAucmVtb3ZlQ29udHJvbCh0aGlzLl9jb250cm9sc0J5SWRbaWRdKTsKICAgICAgfQogICAgICB0aGlzLl9jb250cm9sc0J5SWRbaWRdID0gY29udHJvbDsKICAgIH0gZWxzZSB7CiAgICAgIHRoaXMuX2NvbnRyb2xzTm9JZC5wdXNoKGNvbnRyb2wpCiAgICB9CiAgICB0aGlzLl9tYXAuYWRkQ29udHJvbChjb250cm9sKTsKICB9OwoKICBDb250cm9sU3RvcmUucHJvdG90eXBlLnJlbW92ZSA9IGZ1bmN0aW9uKGlkKSB7CiAgICBpZiAodGhpcy5fY29udHJvbHNCeUlkW2lkXSkgewogICAgICB2YXIgY29udHJvbCA9IHRoaXMuX2NvbnRyb2xzQnlJZFtpZF07CiAgICAgIHRoaXMuX21hcC5yZW1vdmVDb250cm9sKGNvbnRyb2wpOwogICAgICBkZWxldGUgdGhpcy5fY29udHJvbHNCeUlkW2lkXTsKICAgIH0KICB9OwoKICBDb250cm9sU3RvcmUucHJvdG90eXBlLmNsZWFyID0gZnVuY3Rpb24oKSB7CiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuX2NvbnRyb2xzTm9JZC5sZW5ndGg7IGkrKykgewogICAgICB2YXIgY29udHJvbCA9IHRoaXMuX2NvbnRyb2xzTm9JZFtpXTsKICAgICAgdGhpcy5fbWFwLnJlbW92ZUNvbnRyb2woY29udHJvbCk7CiAgICB9OwogICAgdGhpcy5fY29udHJvbHNOb0lkID0gW107CgogICAgZm9yICh2YXIga2V5IGluIHRoaXMuX2NvbnRyb2xzQnlJZCkgewogICAgICB2YXIgY29udHJvbCA9IHRoaXMuX2NvbnRyb2xzQnlJZFtrZXldOwogICAgICB0aGlzLl9tYXAucmVtb3ZlQ29udHJvbChjb250cm9sKQogICAgfQogICAgdGhpcy5fY29udHJvbHNCeUlkID0ge30KICB9CgogIGZ1bmN0aW9uIENsdXN0ZXJMYXllclN0b3JlKGdyb3VwKSB7CiAgICB0aGlzLl9sYXllcnMgPSB7fTsKICAgIHRoaXMuX2dyb3VwID0gZ3JvdXA7CiAgfQoKICBDbHVzdGVyTGF5ZXJTdG9yZS5wcm90b3R5cGUuYWRkID0gZnVuY3Rpb24obGF5ZXIsIGlkKSB7CiAgICBpZiAodHlwZW9mKGlkKSAhPT0gJ3VuZGVmaW5lZCcgJiYgaWQgIT09IG51bGwpIHsKICAgICAgaWYgKHRoaXMuX2xheWVyc1tpZF0pIHsKICAgICAgICB0aGlzLl9ncm91cC5yZW1vdmVMYXllcih0aGlzLl9sYXllcnNbaWRdKTsKICAgICAgfQogICAgICB0aGlzLl9sYXllcnNbaWRdID0gbGF5ZXI7CiAgICB9CiAgICB0aGlzLl9ncm91cC5hZGRMYXllcihsYXllcik7CiAgfTsKCiAgQ2x1c3RlckxheWVyU3RvcmUucHJvdG90eXBlLnJlbW92ZSA9IGZ1bmN0aW9uKGlkKSB7CiAgICBpZiAodHlwZW9mKGlkKSA9PT0gJ3VuZGVmaW5lZCcgfHwgaWQgPT09IG51bGwpIHsKICAgICAgcmV0dXJuOwogICAgfQoKICAgIGlkID0gYXNBcnJheShpZCk7CiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGlkLmxlbmd0aDsgaSsrKSB7CiAgICAgIGlmICh0aGlzLl9sYXllcnNbaWRbaV1dKSB7CiAgICAgICAgdGhpcy5fZ3JvdXAucmVtb3ZlTGF5ZXIodGhpcy5fbGF5ZXJzW2lkW2ldXSk7CiAgICAgICAgZGVsZXRlIHRoaXMuX2xheWVyc1tpZFtpXV07CiAgICAgIH0KICAgIH0KICB9OwoKICBDbHVzdGVyTGF5ZXJTdG9yZS5wcm90b3R5cGUuY2xlYXIgPSBmdW5jdGlvbigpIHsKICAgIHRoaXMuX2xheWVycyA9IHt9OwogICAgdGhpcy5fZ3JvdXAuY2xlYXJMYXllcnMoKTsKICB9OwoKICBmdW5jdGlvbiBtb3VzZUhhbmRsZXIobWFwSWQsIGxheWVySWQsIGdyb3VwLCBldmVudE5hbWUsIGV4dHJhSW5mbykgewogICAgcmV0dXJuIGZ1bmN0aW9uKGUpIHsKICAgICAgaWYgKCFIVE1MV2lkZ2V0cy5zaGlueU1vZGUpIHJldHVybjsKCiAgICAgIHZhciBldmVudEluZm8gPSAkLmV4dGVuZCgKICAgICAgICB7CiAgICAgICAgICBpZDogbGF5ZXJJZCwKICAgICAgICAgICcubm9uY2UnOiBNYXRoLnJhbmRvbSgpICAvLyBmb3JjZSByZWFjdGl2aXR5CiAgICAgICAgfSwKICAgICAgICBncm91cCAhPT0gbnVsbCA/IHtncm91cDogZ3JvdXB9IDogbnVsbCwKICAgICAgICBlLnRhcmdldC5nZXRMYXRMbmcgPyBlLnRhcmdldC5nZXRMYXRMbmcoKSA6IGUubGF0bG5nLAogICAgICAgIGV4dHJhSW5mbwogICAgICApOwoKICAgICAgU2hpbnkub25JbnB1dENoYW5nZShtYXBJZCArICdfJyArIGV2ZW50TmFtZSwgZXZlbnRJbmZvKTsKICAgIH07CiAgfQoKICAvLyBTZW5kIHVwZGF0ZWQgYm91bmRzIGJhY2sgdG8gYXBwLiBUYWtlcyBhIGxlYWZsZXQgZXZlbnQgb2JqZWN0IGFzIGlucHV0LgogIGZ1bmN0aW9uIHVwZGF0ZUJvdW5kcyhtYXApIHsKICAgIHZhciBpZCA9IG1hcC5nZXRDb250YWluZXIoKS5pZDsKICAgIHZhciBib3VuZHMgPSBtYXAuZ2V0Qm91bmRzKCk7CgogICAgU2hpbnkub25JbnB1dENoYW5nZShpZCArICdfYm91bmRzJywgewogICAgICBub3J0aDogYm91bmRzLmdldE5vcnRoRWFzdCgpLmxhdCwKICAgICAgZWFzdDogYm91bmRzLmdldE5vcnRoRWFzdCgpLmxuZywKICAgICAgc291dGg6IGJvdW5kcy5nZXRTb3V0aFdlc3QoKS5sYXQsCiAgICAgIHdlc3Q6IGJvdW5kcy5nZXRTb3V0aFdlc3QoKS5sbmcKICAgIH0pOwogICAgU2hpbnkub25JbnB1dENoYW5nZShpZCArICdfY2VudGVyJywgewogICAgICBsbmc6IG1hcC5nZXRDZW50ZXIoKS5sbmcsCiAgICAgIGxhdDogbWFwLmdldENlbnRlcigpLmxhdAogICAgfSk7CiAgICBTaGlueS5vbklucHV0Q2hhbmdlKGlkICsgJ196b29tJywgbWFwLmdldFpvb20oKSk7CiAgfQoKICB3aW5kb3cuTGVhZmxldFdpZGdldCA9IHt9OwogIHZhciBtZXRob2RzID0gd2luZG93LkxlYWZsZXRXaWRnZXQubWV0aG9kcyA9IHt9OwoKICBtZXRob2RzLmNsZWFyR3JvdXAgPSBmdW5jdGlvbihncm91cCkgewogICAgdmFyIHNlbGYgPSB0aGlzOwogICAgJC5lYWNoKGFzQXJyYXkoZ3JvdXApLCBmdW5jdGlvbihpLCB2KSB7CiAgICAgIHNlbGYubGF5ZXJNYW5hZ2VyLmNsZWFyR3JvdXAodik7CiAgICB9KTsKICB9OwoKICBtZXRob2RzLnNldFZpZXcgPSBmdW5jdGlvbihjZW50ZXIsIHpvb20sIG9wdGlvbnMpIHsKICAgIHRoaXMuc2V0VmlldyhjZW50ZXIsIHpvb20sIG9wdGlvbnMpOwogIH07CgogIG1ldGhvZHMuZml0Qm91bmRzID0gZnVuY3Rpb24obGF0MSwgbG5nMSwgbGF0MiwgbG5nMikgewogICAgdGhpcy5maXRCb3VuZHMoWwogICAgICBbbGF0MSwgbG5nMV0sIFtsYXQyLCBsbmcyXQogICAgXSk7CiAgfTsKCiAgbWV0aG9kcy5zZXRNYXhCb3VuZHMgPSBmdW5jdGlvbihsYXQxLCBsbmcxLCBsYXQyLCBsbmcyKSB7CiAgICB0aGlzLnNldE1heEJvdW5kcyhbCiAgICAgIFtsYXQxLCBsbmcxXSwgW2xhdDIsIGxuZzJdCiAgICBdKTsKICB9OwoKICBtZXRob2RzLmFkZFBvcHVwcyA9IGZ1bmN0aW9uKGxhdCwgbG5nLCBwb3B1cCwgbGF5ZXJJZCwgZ3JvdXAsIG9wdGlvbnMpIHsKICAgIHZhciBkZiA9IGRhdGFmcmFtZS5jcmVhdGUoKQogICAgICAuY29sKCdsYXQnLCBsYXQpCiAgICAgIC5jb2woJ2xuZycsIGxuZykKICAgICAgLmNvbCgncG9wdXAnLCBwb3B1cCkKICAgICAgLmNvbCgnbGF5ZXJJZCcsIGxheWVySWQpCiAgICAgIC5jb2woJ2dyb3VwJywgZ3JvdXApCiAgICAgIC5jYmluZChvcHRpb25zKTsKCiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGRmLm5yb3coKTsgaSsrKSB7CiAgICAgIChmdW5jdGlvbigpIHsKICAgICAgICB2YXIgcG9wdXAgPSBMLnBvcHVwKGRmLmdldChpKSkKICAgICAgICAgICAgICAgICAgICAgLnNldExhdExuZyhbZGYuZ2V0KGksICdsYXQnKSwgZGYuZ2V0KGksICdsbmcnKV0pCiAgICAgICAgICAgICAgICAgICAgIC5zZXRDb250ZW50KGRmLmdldChpLCAncG9wdXAnKSk7CiAgICAgICAgdmFyIHRoaXNJZCA9IGRmLmdldChpLCAnbGF5ZXJJZCcpOwogICAgICAgIHZhciB0aGlzR3JvdXAgPSBkZi5nZXQoaSwgJ2dyb3VwJyk7CiAgICAgICAgdGhpcy5sYXllck1hbmFnZXIuYWRkTGF5ZXIocG9wdXAsICJwb3B1cCIsIHRoaXNJZCwgdGhpc0dyb3VwKTsKICAgICAgICBwb3B1cC5vbignY2xpY2snLCBtb3VzZUhhbmRsZXIodGhpcy5pZCwgdGhpc0lkLCB0aGlzR3JvdXAsICdwb3B1cF9jbGljaycpLCB0aGlzKTsKICAgICAgICBwb3B1cC5vbignbW91c2VvdmVyJywgbW91c2VIYW5kbGVyKHRoaXMuaWQsIHRoaXNJZCwgdGhpc0dyb3VwLCAncG9wdXBfbW91c2VvdmVyJyksIHRoaXMpOwogICAgICAgIHBvcHVwLm9uKCdtb3VzZW91dCcsIG1vdXNlSGFuZGxlcih0aGlzLmlkLCB0aGlzSWQsIHRoaXNHcm91cCwgJ3BvcHVwX21vdXNlb3V0JyksIHRoaXMpOwogICAgICB9KS5jYWxsKHRoaXMpOwogICAgfQogIH07CgogIG1ldGhvZHMucmVtb3ZlUG9wdXAgPSBmdW5jdGlvbihsYXllcklkKSB7CiAgICB0aGlzLmxheWVyTWFuYWdlci5yZW1vdmVMYXllcigicG9wdXAiLCBsYXllcklkKTsKICB9OwoKICBtZXRob2RzLmNsZWFyUG9wdXBzID0gZnVuY3Rpb24oKSB7CiAgICB0aGlzLmxheWVyTWFuYWdlci5jbGVhckxheWVycygicG9wdXAiKTsKICB9OwoKICBtZXRob2RzLmFkZFRpbGVzID0gZnVuY3Rpb24odXJsVGVtcGxhdGUsIGxheWVySWQsIGdyb3VwLCBvcHRpb25zKSB7CiAgICB0aGlzLmxheWVyTWFuYWdlci5hZGRMYXllcihMLnRpbGVMYXllcih1cmxUZW1wbGF0ZSwgb3B0aW9ucyksICJ0aWxlIiwgbGF5ZXJJZCwgZ3JvdXApOwogIH07CgogIG1ldGhvZHMucmVtb3ZlVGlsZXMgPSBmdW5jdGlvbihsYXllcklkKSB7CiAgICB0aGlzLmxheWVyTWFuYWdlci5yZW1vdmVMYXllcigidGlsZSIsIGxheWVySWQpOwogIH07CgogIG1ldGhvZHMuY2xlYXJUaWxlcyA9IGZ1bmN0aW9uKCkgewogICAgdGhpcy5sYXllck1hbmFnZXIuY2xlYXJMYXllcnMoInRpbGUiKTsKICB9OwoKICBtZXRob2RzLmFkZFdNU1RpbGVzID0gZnVuY3Rpb24oYmFzZVVybCwgbGF5ZXJJZCwgZ3JvdXAsIG9wdGlvbnMpIHsKICAgIHRoaXMubGF5ZXJNYW5hZ2VyLmFkZExheWVyKEwudGlsZUxheWVyLndtcyhiYXNlVXJsLCBvcHRpb25zKSwgInRpbGUiLCBsYXllcklkLCBncm91cCk7CiAgfTsKCiAgLy8gR2l2ZW46CiAgLy8gICB7ZGF0YTogWyJhIiwgImIiLCAiYyJdLCBpbmRleDogWzAsIDEsIDAsIDJdfQogIC8vIHJldHVybnM6CiAgLy8gICBbImEiLCAiYiIsICJhIiwgImMiXQogIGZ1bmN0aW9uIHVucGFja1N0cmluZ3MoaWNvbnNldCkgewogICAgaWYgKCFpY29uc2V0KSB7CiAgICAgIHJldHVybiBpY29uc2V0OwogICAgfQogICAgaWYgKHR5cGVvZihpY29uc2V0LmluZGV4KSA9PT0gJ3VuZGVmaW5lZCcpIHsKICAgICAgcmV0dXJuIGljb25zZXQ7CiAgICB9CgogICAgaWNvbnNldC5kYXRhID0gYXNBcnJheShpY29uc2V0LmRhdGEpOwogICAgaWNvbnNldC5pbmRleCA9IGFzQXJyYXkoaWNvbnNldC5pbmRleCk7CgogICAgcmV0dXJuICQubWFwKGljb25zZXQuaW5kZXgsIGZ1bmN0aW9uKGUsIGkpIHsKICAgICAgcmV0dXJuIGljb25zZXQuZGF0YVtlXTsKICAgIH0pOwogIH0KCiAgZnVuY3Rpb24gYWRkTWFya2VycyhtYXAsIGRmLCBncm91cCwgY2x1c3Rlck9wdGlvbnMsIGNsdXN0ZXJJZCwgbWFya2VyRnVuYykgewogICAgKGZ1bmN0aW9uKCkgewogICAgICB2YXIgY2x1c3Rlckdyb3VwID0gdGhpcy5sYXllck1hbmFnZXIuZ2V0TGF5ZXIoImNsdXN0ZXIiLCBjbHVzdGVySWQpLAogICAgICAgICAgY2x1c3RlciA9IGNsdXN0ZXJPcHRpb25zICE9PSBudWxsOwogICAgICBpZiAoY2x1c3RlciAmJiAhY2x1c3Rlckdyb3VwKSB7CiAgICAgICAgY2x1c3Rlckdyb3VwID0gTC5tYXJrZXJDbHVzdGVyR3JvdXAoY2x1c3Rlck9wdGlvbnMpOwogICAgICAgIGNsdXN0ZXJHcm91cC5jbHVzdGVyTGF5ZXJTdG9yZSA9IG5ldyBDbHVzdGVyTGF5ZXJTdG9yZShjbHVzdGVyR3JvdXApOwogICAgICB9CiAgICAgIHZhciBleHRyYUluZm8gPSBjbHVzdGVyID8geyBjbHVzdGVySWQ6IGNsdXN0ZXJJZCB9IDoge307CgogICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGRmLm5yb3coKTsgaSsrKSB7CiAgICAgICAgKGZ1bmN0aW9uKCkgewogICAgICAgICAgdmFyIG1hcmtlciA9IG1hcmtlckZ1bmMoZGYsIGkpOwogICAgICAgICAgdmFyIHRoaXNJZCA9IGRmLmdldChpLCAnbGF5ZXJJZCcpOwogICAgICAgICAgdmFyIHRoaXNHcm91cCA9IGNsdXN0ZXIgPyBudWxsIDogZGYuZ2V0KGksICdncm91cCcpOwogICAgICAgICAgaWYgKGNsdXN0ZXIpIHsKICAgICAgICAgICAgY2x1c3Rlckdyb3VwLmNsdXN0ZXJMYXllclN0b3JlLmFkZChtYXJrZXIsIHRoaXNJZCk7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICB0aGlzLmxheWVyTWFuYWdlci5hZGRMYXllcihtYXJrZXIsICJtYXJrZXIiLCB0aGlzSWQsIHRoaXNHcm91cCk7CiAgICAgICAgICB9CiAgICAgICAgICB2YXIgcG9wdXAgPSBkZi5nZXQoaSwgJ3BvcHVwJyk7CiAgICAgICAgICBpZiAocG9wdXAgIT09IG51bGwpIG1hcmtlci5iaW5kUG9wdXAocG9wdXApOwogICAgICAgICAgdmFyIGxhYmVsID0gZGYuZ2V0KGksICdsYWJlbCcpOwogICAgICAgICAgdmFyIGxhYmVsT3B0aW9ucyA9IGRmLmdldChpLCAnbGFiZWxPcHRpb25zJyk7CiAgICAgICAgICBpZiAobGFiZWwgIT09IG51bGwpIHsKICAgICAgICAgICAgaWYgKGxhYmVsT3B0aW9ucyAhPT0gbnVsbCkgewogICAgICAgICAgICAgIGlmKGxhYmVsT3B0aW9ucy5ub0hpZGUpIHsKICAgICAgICAgICAgICAgIG1hcmtlci5iaW5kTGFiZWwobGFiZWwsIGxhYmVsT3B0aW9ucykuc2hvd0xhYmVsKCk7CiAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIG1hcmtlci5iaW5kTGFiZWwobGFiZWwsIGxhYmVsT3B0aW9ucyk7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgIG1hcmtlci5iaW5kTGFiZWwobGFiZWwpOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgICBtYXJrZXIub24oJ2NsaWNrJywgbW91c2VIYW5kbGVyKHRoaXMuaWQsIHRoaXNJZCwgdGhpc0dyb3VwLCAnbWFya2VyX2NsaWNrJywgZXh0cmFJbmZvKSwgdGhpcyk7CiAgICAgICAgICBtYXJrZXIub24oJ21vdXNlb3ZlcicsIG1vdXNlSGFuZGxlcih0aGlzLmlkLCB0aGlzSWQsIHRoaXNHcm91cCwgJ21hcmtlcl9tb3VzZW92ZXInLCBleHRyYUluZm8pLCB0aGlzKTsKICAgICAgICAgIG1hcmtlci5vbignbW91c2VvdXQnLCBtb3VzZUhhbmRsZXIodGhpcy5pZCwgdGhpc0lkLCB0aGlzR3JvdXAsICdtYXJrZXJfbW91c2VvdXQnLCBleHRyYUluZm8pLCB0aGlzKTsKICAgICAgICB9KS5jYWxsKHRoaXMpOwogICAgICB9CgogICAgICBpZiAoY2x1c3RlcikgewogICAgICAgIHRoaXMubGF5ZXJNYW5hZ2VyLmFkZExheWVyKGNsdXN0ZXJHcm91cCwgImNsdXN0ZXIiLCBjbHVzdGVySWQsIGdyb3VwKTsKICAgICAgfQogICAgfSkuY2FsbChtYXApOwogIH0KCiAgbWV0aG9kcy5hZGRNYXJrZXJzID0gZnVuY3Rpb24obGF0LCBsbmcsIGljb24sIGxheWVySWQsIGdyb3VwLCBvcHRpb25zLCBwb3B1cCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbHVzdGVyT3B0aW9ucywgY2x1c3RlcklkLCBsYWJlbCwgbGFiZWxPcHRpb25zKSB7CiAgICBpZiAoaWNvbikgewogICAgICAvLyBVbnBhY2sgaWNvbnMKICAgICAgaWNvbi5pY29uVXJsICAgICAgICAgPSB1bnBhY2tTdHJpbmdzKGljb24uaWNvblVybCk7CiAgICAgIGljb24uaWNvblJldGluYVVybCAgID0gdW5wYWNrU3RyaW5ncyhpY29uLmljb25SZXRpbmFVcmwpOwogICAgICBpY29uLnNoYWRvd1VybCAgICAgICA9IHVucGFja1N0cmluZ3MoaWNvbi5zaGFkb3dVcmwpOwogICAgICBpY29uLnNoYWRvd1JldGluYVVybCA9IHVucGFja1N0cmluZ3MoaWNvbi5zaGFkb3dSZXRpbmFVcmwpOwoKICAgICAgLy8gVGhpcyBjYmluZHMgdGhlIGljb24gVVJMcyBhbmQgYW55IG90aGVyIGljb24gb3B0aW9uczsgdGhleSdyZSBhbGwKICAgICAgLy8gcHJlc2VudCBvbiB0aGUgaWNvbiBvYmplY3QuCiAgICAgIHZhciBpY29uZGYgPSBkYXRhZnJhbWUuY3JlYXRlKCkuY2JpbmQoaWNvbik7CgogICAgICAvLyBDb25zdHJ1Y3RzIGFuIGljb24gZnJvbSBhIHNwZWNpZmllZCByb3cgb2YgdGhlIGljb24gZGF0YWZyYW1lLgogICAgICB2YXIgZ2V0SWNvbiA9IGZ1bmN0aW9uKGkpIHsKICAgICAgICB2YXIgb3B0cyA9IGljb25kZi5nZXQoaSk7CiAgICAgICAgaWYgKCFvcHRzLmljb25VcmwpIHsKICAgICAgICAgIHJldHVybiBuZXcgTC5JY29uLkRlZmF1bHQoKTsKICAgICAgICB9CgogICAgICAgIC8vIENvbXBvc2l0ZSBvcHRpb25zIChsaWtlIHBvaW50cyBvciBzaXplcykgYXJlIHBhc3NlZCBmcm9tIFIgd2l0aCBlYWNoCiAgICAgICAgLy8gaW5kaXZpZHVhbCBjb21wb25lbnQgYXMgaXRzIG93biBvcHRpb24uIFdlIG5lZWQgdG8gY29tYmluZSB0aGVtIG5vdwogICAgICAgIC8vIGludG8gdGhlaXIgY29tcG9zaXRlIGZvcm0uCiAgICAgICAgaWYgKG9wdHMuaWNvbldpZHRoKSB7CiAgICAgICAgICBvcHRzLmljb25TaXplID0gW29wdHMuaWNvbldpZHRoLCBvcHRzLmljb25IZWlnaHRdOwogICAgICAgIH0KICAgICAgICBpZiAob3B0cy5zaGFkb3dXaWR0aCkgewogICAgICAgICAgb3B0cy5zaGFkb3dTaXplID0gW29wdHMuc2hhZG93V2lkdGgsIG9wdHMuc2hhZG93SGVpZ2h0XTsKICAgICAgICB9CiAgICAgICAgaWYgKG9wdHMuaWNvbkFuY2hvclgpIHsKICAgICAgICAgIG9wdHMuaWNvbkFuY2hvciA9IFtvcHRzLmljb25BbmNob3JYLCBvcHRzLmljb25BbmNob3JZXTsKICAgICAgICB9CiAgICAgICAgaWYgKG9wdHMuc2hhZG93QW5jaG9yWCkgewogICAgICAgICAgb3B0cy5zaGFkb3dBbmNob3IgPSBbb3B0cy5zaGFkb3dBbmNob3JYLCBvcHRzLnNoYWRvd0FuY2hvclldOwogICAgICAgIH0KICAgICAgICBpZiAob3B0cy5wb3B1cEFuY2hvclgpIHsKICAgICAgICAgIG9wdHMucG9wdXBBbmNob3IgPSBbb3B0cy5wb3B1cEFuY2hvclgsIG9wdHMucG9wdXBBbmNob3JZXTsKICAgICAgICB9CgogICAgICAgIHJldHVybiBuZXcgTC5JY29uKG9wdHMpOwogICAgICB9OwogICAgfQoKICAgIHZhciBkZiA9IGRhdGFmcmFtZS5jcmVhdGUoKQogICAgICAuY29sKCdsYXQnLCBsYXQpCiAgICAgIC5jb2woJ2xuZycsIGxuZykKICAgICAgLmNvbCgnbGF5ZXJJZCcsIGxheWVySWQpCiAgICAgIC5jb2woJ2dyb3VwJywgZ3JvdXApCiAgICAgIC5jb2woJ3BvcHVwJywgcG9wdXApCiAgICAgIC5jb2woJ2xhYmVsJywgbGFiZWwpCiAgICAgIC5jb2woJ2xhYmVsT3B0aW9ucycsIGxhYmVsT3B0aW9ucykKICAgICAgLmNiaW5kKG9wdGlvbnMpOwoKICAgIGlmIChpY29uKSBpY29uZGYuZWZmZWN0aXZlTGVuZ3RoID0gZGYubnJvdygpOwoKICAgIGFkZE1hcmtlcnModGhpcywgZGYsIGdyb3VwLCBjbHVzdGVyT3B0aW9ucywgY2x1c3RlcklkLCBmdW5jdGlvbihkZiwgaSkgewogICAgICB2YXIgb3B0aW9ucyA9IGRmLmdldChpKTsKICAgICAgaWYgKGljb24pIG9wdGlvbnMuaWNvbiA9IGdldEljb24oaSk7CiAgICAgIHJldHVybiBMLm1hcmtlcihbZGYuZ2V0KGksICdsYXQnKSwgZGYuZ2V0KGksICdsbmcnKV0sIG9wdGlvbnMpOwogICAgfSk7CiAgfTsKCiAgbWV0aG9kcy5hZGRBd2Vzb21lTWFya2VycyA9IGZ1bmN0aW9uKGxhdCwgbG5nLCBpY29uLCBsYXllcklkLCBncm91cCwgb3B0aW9ucywgcG9wdXAsCiAgY2x1c3Rlck9wdGlvbnMsIGNsdXN0ZXJJZCwgbGFiZWwsIGxhYmVsT3B0aW9ucykgewogICAgaWYgKGljb24pIHsKCiAgICAgIC8vIFRoaXMgY2JpbmRzIHRoZSBpY29uIFVSTHMgYW5kIGFueSBvdGhlciBpY29uIG9wdGlvbnM7IHRoZXkncmUgYWxsCiAgICAgIC8vIHByZXNlbnQgb24gdGhlIGljb24gb2JqZWN0LgogICAgICB2YXIgaWNvbmRmID0gZGF0YWZyYW1lLmNyZWF0ZSgpLmNiaW5kKGljb24pOwoKICAgICAgLy8gQ29uc3RydWN0cyBhbiBpY29uIGZyb20gYSBzcGVjaWZpZWQgcm93IG9mIHRoZSBpY29uIGRhdGFmcmFtZS4KICAgICAgdmFyIGdldEljb24gPSBmdW5jdGlvbihpKSB7CiAgICAgICAgdmFyIG9wdHMgPSBpY29uZGYuZ2V0KGkpOwogICAgICAgIGlmICghb3B0cykgewogICAgICAgICAgcmV0dXJuIG5ldyBMLkF3ZXNvbWVNYXJrZXJzLmljb24oKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiBuZXcgTC5Bd2Vzb21lTWFya2Vycy5pY29uKG9wdHMpOwogICAgICB9OwogICAgfQoKICAgIHZhciBkZiA9IGRhdGFmcmFtZS5jcmVhdGUoKQogICAgICAuY29sKCdsYXQnLCBsYXQpCiAgICAgIC5jb2woJ2xuZycsIGxuZykKICAgICAgLmNvbCgnbGF5ZXJJZCcsIGxheWVySWQpCiAgICAgIC5jb2woJ2dyb3VwJywgZ3JvdXApCiAgICAgIC5jb2woJ3BvcHVwJywgcG9wdXApCiAgICAgIC5jb2woJ2xhYmVsJywgbGFiZWwpCiAgICAgIC5jb2woJ2xhYmVsT3B0aW9ucycsIGxhYmVsT3B0aW9ucykKICAgICAgLmNiaW5kKG9wdGlvbnMpOwoKICAgIGlmIChpY29uKSBpY29uZGYuZWZmZWN0aXZlTGVuZ3RoID0gZGYubnJvdygpOwoKICAgIGFkZE1hcmtlcnModGhpcywgZGYsIGdyb3VwLCBjbHVzdGVyT3B0aW9ucywgY2x1c3RlcklkLCBmdW5jdGlvbihkZiwgaSkgewogICAgICB2YXIgb3B0aW9ucyA9IGRmLmdldChpKTsKICAgICAgaWYgKGljb24pIG9wdGlvbnMuaWNvbiA9IGdldEljb24oaSk7CiAgICAgIHJldHVybiBMLm1hcmtlcihbZGYuZ2V0KGksICdsYXQnKSwgZGYuZ2V0KGksICdsbmcnKV0sIG9wdGlvbnMpOwogICAgfSk7CiAgfTsKCiAgYWRkTGF5ZXJzID0gZnVuY3Rpb24obWFwLCBjYXRlZ29yeSwgZGYsIGxheWVyRnVuYykgewogICAgZm9yICh2YXIgaSA9IDA7IGkgPCBkZi5ucm93KCk7IGkrKykgewogICAgICAoZnVuY3Rpb24oKSB7CiAgICAgICAgdmFyIGxheWVyID0gbGF5ZXJGdW5jKGRmLCBpKTsKICAgICAgICB2YXIgdGhpc0lkID0gZGYuZ2V0KGksICdsYXllcklkJyk7CiAgICAgICAgdmFyIHRoaXNHcm91cCA9IGRmLmdldChpLCAnZ3JvdXAnKTsKICAgICAgICB0aGlzLmxheWVyTWFuYWdlci5hZGRMYXllcihsYXllciwgY2F0ZWdvcnksIHRoaXNJZCwgdGhpc0dyb3VwKTsKICAgICAgICBpZiAobGF5ZXIuYmluZFBvcHVwKSB7CiAgICAgICAgICB2YXIgcG9wdXAgPSBkZi5nZXQoaSwgJ3BvcHVwJyk7CiAgICAgICAgICBpZiAocG9wdXAgIT09IG51bGwpIGxheWVyLmJpbmRQb3B1cChwb3B1cCk7CiAgICAgICAgfQogICAgICAgIGlmIChsYXllci5iaW5kTGFiZWwpIHsKICAgICAgICAgIHZhciBsYWJlbCA9IGRmLmdldChpLCAnbGFiZWwnKTsKICAgICAgICAgIHZhciBsYWJlbE9wdGlvbnMgPSBkZi5nZXQoaSwgJ2xhYmVsT3B0aW9ucycpOwogICAgICAgICAgaWYgKGxhYmVsICE9PSBudWxsKSB7CiAgICAgICAgICAgIGlmIChsYWJlbE9wdGlvbnMgIT09IG51bGwpIHsKICAgICAgICAgICAgICAgIGxheWVyLmJpbmRMYWJlbChsYWJlbCwgbGFiZWxPcHRpb25zKTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICBsYXllci5iaW5kTGFiZWwobGFiZWwpOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGxheWVyLm9uKCdjbGljaycsIG1vdXNlSGFuZGxlcih0aGlzLmlkLCB0aGlzSWQsIHRoaXNHcm91cCwgY2F0ZWdvcnkgKyAnX2NsaWNrJyksIHRoaXMpOwogICAgICAgIGxheWVyLm9uKCdtb3VzZW92ZXInLCBtb3VzZUhhbmRsZXIodGhpcy5pZCwgdGhpc0lkLCB0aGlzR3JvdXAsIGNhdGVnb3J5ICsgJ19tb3VzZW92ZXInKSwgdGhpcyk7CiAgICAgICAgbGF5ZXIub24oJ21vdXNlb3V0JywgbW91c2VIYW5kbGVyKHRoaXMuaWQsIHRoaXNJZCwgdGhpc0dyb3VwLCBjYXRlZ29yeSArICdfbW91c2VvdXQnKSwgdGhpcyk7CiAgICAgIH0pLmNhbGwobWFwKTsKICAgIH0KICB9CgogIG1ldGhvZHMuYWRkQ2lyY2xlcyA9IGZ1bmN0aW9uKGxhdCwgbG5nLCByYWRpdXMsIGxheWVySWQsIGdyb3VwLCBvcHRpb25zLCBwb3B1cCwgbGFiZWwsIGxhYmVsT3B0aW9ucykgewogICAgdmFyIGRmID0gZGF0YWZyYW1lLmNyZWF0ZSgpCiAgICAgIC5jb2woJ2xhdCcsIGxhdCkKICAgICAgLmNvbCgnbG5nJywgbG5nKQogICAgICAuY29sKCdyYWRpdXMnLCByYWRpdXMpCiAgICAgIC5jb2woJ2xheWVySWQnLCBsYXllcklkKQogICAgICAuY29sKCdncm91cCcsIGdyb3VwKQogICAgICAuY29sKCdwb3B1cCcsIHBvcHVwKQogICAgICAuY29sKCdsYWJlbCcsIGxhYmVsKQogICAgICAuY29sKCdsYWJlbE9wdGlvbnMnLCBsYWJlbE9wdGlvbnMpCiAgICAgIC5jYmluZChvcHRpb25zKTsKCiAgICBhZGRMYXllcnModGhpcywgInNoYXBlIiwgZGYsIGZ1bmN0aW9uKGRmLCBpKSB7CiAgICAgIHJldHVybiBMLmNpcmNsZShbZGYuZ2V0KGksICdsYXQnKSwgZGYuZ2V0KGksICdsbmcnKV0sIGRmLmdldChpLCAncmFkaXVzJyksIGRmLmdldChpKSk7CiAgICB9KTsKICB9OwoKICBtZXRob2RzLmFkZENpcmNsZU1hcmtlcnMgPSBmdW5jdGlvbihsYXQsIGxuZywgcmFkaXVzLCBsYXllcklkLCBncm91cCwgb3B0aW9ucywgY2x1c3Rlck9wdGlvbnMsIGNsdXN0ZXJJZCwgcG9wdXAsIGxhYmVsLCBsYWJlbE9wdGlvbnMpIHsKICAgIHZhciBkZiA9IGRhdGFmcmFtZS5jcmVhdGUoKQogICAgICAuY29sKCdsYXQnLCBsYXQpCiAgICAgIC5jb2woJ2xuZycsIGxuZykKICAgICAgLmNvbCgncmFkaXVzJywgcmFkaXVzKQogICAgICAuY29sKCdsYXllcklkJywgbGF5ZXJJZCkKICAgICAgLmNvbCgnZ3JvdXAnLCBncm91cCkKICAgICAgLmNvbCgncG9wdXAnLCBwb3B1cCkKICAgICAgLmNvbCgnbGFiZWwnLCBsYWJlbCkKICAgICAgLmNvbCgnbGFiZWxPcHRpb25zJywgbGFiZWxPcHRpb25zKQogICAgICAuY2JpbmQob3B0aW9ucyk7CgogICAgYWRkTWFya2Vycyh0aGlzLCBkZiwgZ3JvdXAsIGNsdXN0ZXJPcHRpb25zLCBjbHVzdGVySWQsIGZ1bmN0aW9uKGRmLCBpKSB7CiAgICAgIHJldHVybiBMLmNpcmNsZU1hcmtlcihbZGYuZ2V0KGksICdsYXQnKSwgZGYuZ2V0KGksICdsbmcnKV0sIGRmLmdldChpKSk7CiAgICB9KTsKICB9OwoKICAvKgogICAqIEBwYXJhbSBsYXQgQXJyYXkgb2YgYXJyYXlzIG9mIGxhdGl0dWRlIGNvb3JkaW5hdGVzIGZvciBwb2x5bGluZXMKICAgKiBAcGFyYW0gbG5nIEFycmF5IG9mIGFycmF5cyBvZiBsb25naXR1ZGUgY29vcmRpbmF0ZXMgZm9yIHBvbHlsaW5lcwogICAqLwogIG1ldGhvZHMuYWRkUG9seWxpbmVzID0gZnVuY3Rpb24ocG9seWdvbnMsIGxheWVySWQsIGdyb3VwLCBvcHRpb25zLCBwb3B1cCwgbGFiZWwsIGxhYmVsT3B0aW9ucykgewogICAgdmFyIGRmID0gZGF0YWZyYW1lLmNyZWF0ZSgpCiAgICAgIC5jb2woJ3NoYXBlcycsIHBvbHlnb25zKQogICAgICAuY29sKCdsYXllcklkJywgbGF5ZXJJZCkKICAgICAgLmNvbCgnZ3JvdXAnLCBncm91cCkKICAgICAgLmNvbCgncG9wdXAnLCBwb3B1cCkKICAgICAgLmNvbCgnbGFiZWwnLCBsYWJlbCkKICAgICAgLmNvbCgnbGFiZWxPcHRpb25zJywgbGFiZWxPcHRpb25zKQogICAgICAuY2JpbmQob3B0aW9ucyk7CgogICAgYWRkTGF5ZXJzKHRoaXMsICJzaGFwZSIsIGRmLCBmdW5jdGlvbihkZiwgaSkgewogICAgICAgIHZhciBzaGFwZSA9IGRmLmdldChpLCAnc2hhcGVzJylbMF07CiAgICAgICAgc2hhcGUgPSBIVE1MV2lkZ2V0cy5kYXRhZnJhbWVUb0QzKHNoYXBlKTsKICAgICAgICByZXR1cm4gTC5wb2x5bGluZShzaGFwZSwgZGYuZ2V0KGkpKTsKICAgIH0pOwogIH07CgogIG1ldGhvZHMucmVtb3ZlTWFya2VyID0gZnVuY3Rpb24obGF5ZXJJZCkgewogICAgdGhpcy5sYXllck1hbmFnZXIucmVtb3ZlTGF5ZXIoIm1hcmtlciIsIGxheWVySWQpOwogIH07CgogIG1ldGhvZHMuY2xlYXJNYXJrZXJzID0gZnVuY3Rpb24oKSB7CiAgICB0aGlzLmxheWVyTWFuYWdlci5jbGVhckxheWVycygibWFya2VyIik7CiAgfTsKCiAgbWV0aG9kcy5yZW1vdmVNYXJrZXJDbHVzdGVyID0gZnVuY3Rpb24obGF5ZXJJZCkgewogICAgdGhpcy5sYXllck1hbmFnZXIucmVtb3ZlTGF5ZXIoImNsdXN0ZXIiLCBsYXllcklkKTsKICB9CgogIG1ldGhvZHMucmVtb3ZlTWFya2VyRnJvbUNsdXN0ZXIgPSBmdW5jdGlvbihsYXllcklkLCBjbHVzdGVySWQpIHsKICAgIHZhciBjbHVzdGVyID0gdGhpcy5sYXllck1hbmFnZXIuZ2V0TGF5ZXIoImNsdXN0ZXIiLCBjbHVzdGVySWQpOwogICAgaWYgKCFjbHVzdGVyKSByZXR1cm47CiAgICBjbHVzdGVyLmNsdXN0ZXJMYXllclN0b3JlLnJlbW92ZShsYXllcklkKTsKICB9CgogIG1ldGhvZHMuY2xlYXJNYXJrZXJDbHVzdGVycyA9IGZ1bmN0aW9uKCkgewogICAgdGhpcy5sYXllck1hbmFnZXIuY2xlYXJMYXllcnMoImNsdXN0ZXIiKTsKICB9OwoKICBtZXRob2RzLnJlbW92ZVNoYXBlID0gZnVuY3Rpb24obGF5ZXJJZCkgewogICAgdGhpcy5sYXllck1hbmFnZXIucmVtb3ZlTGF5ZXIoInNoYXBlIiwgbGF5ZXJJZCk7CiAgfTsKCiAgbWV0aG9kcy5jbGVhclNoYXBlcyA9IGZ1bmN0aW9uKCkgewogICAgdGhpcy5sYXllck1hbmFnZXIuY2xlYXJMYXllcnMoInNoYXBlIik7CiAgfTsKCiAgbWV0aG9kcy5hZGRSZWN0YW5nbGVzID0gZnVuY3Rpb24obGF0MSwgbG5nMSwgbGF0MiwgbG5nMiwgbGF5ZXJJZCwgZ3JvdXAsIG9wdGlvbnMsIHBvcHVwLCBsYWJlbCwgbGFiZWxPcHRpb25zKSB7CiAgICB2YXIgZGYgPSBkYXRhZnJhbWUuY3JlYXRlKCkKICAgICAgLmNvbCgnbGF0MScsIGxhdDEpCiAgICAgIC5jb2woJ2xuZzEnLCBsbmcxKQogICAgICAuY29sKCdsYXQyJywgbGF0MikKICAgICAgLmNvbCgnbG5nMicsIGxuZzIpCiAgICAgIC5jb2woJ2xheWVySWQnLCBsYXllcklkKQogICAgICAuY29sKCdncm91cCcsIGdyb3VwKQogICAgICAuY29sKCdwb3B1cCcsIHBvcHVwKQogICAgICAuY29sKCdsYWJlbCcsIGxhYmVsKQogICAgICAuY29sKCdsYWJlbE9wdGlvbnMnLCBsYWJlbE9wdGlvbnMpCiAgICAgIC5jYmluZChvcHRpb25zKTsKCiAgICBhZGRMYXllcnModGhpcywgInNoYXBlIiwgZGYsIGZ1bmN0aW9uKGRmLCBpKSB7CiAgICAgIHJldHVybiBMLnJlY3RhbmdsZShbCiAgICAgICAgICBbZGYuZ2V0KGksICdsYXQxJyksIGRmLmdldChpLCAnbG5nMScpXSwKICAgICAgICAgIFtkZi5nZXQoaSwgJ2xhdDInKSwgZGYuZ2V0KGksICdsbmcyJyldCiAgICAgICAgXSwKICAgICAgICBkZi5nZXQoaSkpOwogICAgfSk7CiAgfTsKCiAgLyoKICAgKiBAcGFyYW0gbGF0IEFycmF5IG9mIGFycmF5cyBvZiBsYXRpdHVkZSBjb29yZGluYXRlcyBmb3IgcG9seWdvbnMKICAgKiBAcGFyYW0gbG5nIEFycmF5IG9mIGFycmF5cyBvZiBsb25naXR1ZGUgY29vcmRpbmF0ZXMgZm9yIHBvbHlnb25zCiAgICovCiAgbWV0aG9kcy5hZGRQb2x5Z29ucyA9IGZ1bmN0aW9uKHBvbHlnb25zLCBsYXllcklkLCBncm91cCwgb3B0aW9ucywgcG9wdXAsIGxhYmVsLCBsYWJlbE9wdGlvbnMpIHsKICAgIHZhciBkZiA9IGRhdGFmcmFtZS5jcmVhdGUoKQogICAgICAuY29sKCdzaGFwZXMnLCBwb2x5Z29ucykKICAgICAgLmNvbCgnbGF5ZXJJZCcsIGxheWVySWQpCiAgICAgIC5jb2woJ2dyb3VwJywgZ3JvdXApCiAgICAgIC5jb2woJ3BvcHVwJywgcG9wdXApCiAgICAgIC5jb2woJ2xhYmVsJywgbGFiZWwpCiAgICAgIC5jb2woJ2xhYmVsT3B0aW9ucycsIGxhYmVsT3B0aW9ucykKICAgICAgLmNiaW5kKG9wdGlvbnMpOwoKICAgIGFkZExheWVycyh0aGlzLCAic2hhcGUiLCBkZiwgZnVuY3Rpb24oZGYsIGkpIHsKICAgICAgdmFyIHNoYXBlcyA9IGRmLmdldChpLCAnc2hhcGVzJyk7CiAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgc2hhcGVzLmxlbmd0aDsgaisrKSB7CiAgICAgICAgc2hhcGVzW2pdID0gSFRNTFdpZGdldHMuZGF0YWZyYW1lVG9EMyhzaGFwZXNbal0pOwogICAgICB9CiAgICAgIHJldHVybiBMLnBvbHlnb24oc2hhcGVzLCBkZi5nZXQoaSkpOwogICAgfSk7CiAgfTsKCiAgbWV0aG9kcy5hZGRHZW9KU09OID0gZnVuY3Rpb24oZGF0YSwgbGF5ZXJJZCwgZ3JvdXAsIHN0eWxlKSB7CiAgICB2YXIgc2VsZiA9IHRoaXM7CiAgICBpZiAodHlwZW9mKGRhdGEpID09PSAic3RyaW5nIikgewogICAgICBkYXRhID0gSlNPTi5wYXJzZShkYXRhKTsKICAgIH0KCiAgICB2YXIgZ2xvYmFsU3R5bGUgPSAkLmV4dGVuZCh7fSwgc3R5bGUsIGRhdGEuc3R5bGUgfHwge30pOwoKICAgIHZhciBnamxheWVyID0gTC5nZW9Kc29uKGRhdGEsIHsKICAgICAgc3R5bGU6IGZ1bmN0aW9uKGZlYXR1cmUpIHsKICAgICAgICBpZiAoZmVhdHVyZS5zdHlsZSB8fCBmZWF0dXJlLnByb3BlcnRpZXMuc3R5bGUpIHsKICAgICAgICAgIHJldHVybiAkLmV4dGVuZCh7fSwgZ2xvYmFsU3R5bGUsIGZlYXR1cmUuc3R5bGUsIGZlYXR1cmUucHJvcGVydGllcy5zdHlsZSk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHJldHVybiBnbG9iYWxTdHlsZTsKICAgICAgICB9CiAgICAgIH0sCiAgICAgIG9uRWFjaEZlYXR1cmU6IGZ1bmN0aW9uKGZlYXR1cmUsIGxheWVyKSB7CiAgICAgICAgdmFyIGV4dHJhSW5mbyA9IHsKICAgICAgICAgIGZlYXR1cmVJZDogZmVhdHVyZS5pZCwKICAgICAgICAgIHByb3BlcnRpZXM6IGZlYXR1cmUucHJvcGVydGllcwogICAgICAgIH07CiAgICAgICAgdmFyIHBvcHVwID0gZmVhdHVyZS5wcm9wZXJ0aWVzLnBvcHVwOwogICAgICAgIGlmICh0eXBlb2YgcG9wdXAgIT09ICd1bmRlZmluZWQnICYmIHBvcHVwICE9PSBudWxsKSBsYXllci5iaW5kUG9wdXAocG9wdXApOwogICAgICAgIGxheWVyLm9uKCJjbGljayIsIG1vdXNlSGFuZGxlcihzZWxmLmlkLCBsYXllcklkLCBncm91cCwgImdlb2pzb25fY2xpY2siLCBleHRyYUluZm8pLCB0aGlzKTsKICAgICAgICBsYXllci5vbigibW91c2VvdmVyIiwgbW91c2VIYW5kbGVyKHNlbGYuaWQsIGxheWVySWQsIGdyb3VwLCAiZ2VvanNvbl9tb3VzZW92ZXIiLCBleHRyYUluZm8pLCB0aGlzKTsKICAgICAgICBsYXllci5vbigibW91c2VvdXQiLCBtb3VzZUhhbmRsZXIoc2VsZi5pZCwgbGF5ZXJJZCwgZ3JvdXAsICJnZW9qc29uX21vdXNlb3V0IiwgZXh0cmFJbmZvKSwgdGhpcyk7CiAgICAgIH0KICAgIH0pOwogICAgdGhpcy5sYXllck1hbmFnZXIuYWRkTGF5ZXIoZ2psYXllciwgImdlb2pzb24iLCBsYXllcklkLCBncm91cCk7CiAgfTsKCiAgbWV0aG9kcy5yZW1vdmVHZW9KU09OID0gZnVuY3Rpb24obGF5ZXJJZCkgewogICAgdGhpcy5sYXllck1hbmFnZXIucmVtb3ZlTGF5ZXIoImdlb2pzb24iLCBsYXllcklkKTsKICB9OwoKICBtZXRob2RzLmNsZWFyR2VvSlNPTiA9IGZ1bmN0aW9uKCkgewogICAgdGhpcy5sYXllck1hbmFnZXIuY2xlYXJMYXllcnMoImdlb2pzb24iKTsKICB9OwoKICBtZXRob2RzLmFkZFRvcG9KU09OID0gZnVuY3Rpb24oZGF0YSwgbGF5ZXJJZCwgZ3JvdXAsIHN0eWxlKSB7CiAgICB2YXIgc2VsZiA9IHRoaXM7CiAgICBpZiAodHlwZW9mKGRhdGEpID09PSAic3RyaW5nIikgewogICAgICBkYXRhID0gSlNPTi5wYXJzZShkYXRhKTsKICAgIH0KCiAgICB2YXIgZ2xvYmFsU3R5bGUgPSAkLmV4dGVuZCh7fSwgc3R5bGUsIGRhdGEuc3R5bGUgfHwge30pOwoKICAgIHZhciBnamxheWVyID0gTC5nZW9Kc29uKG51bGwsIHsKICAgICAgc3R5bGU6IGZ1bmN0aW9uKGZlYXR1cmUpIHsKICAgICAgICBpZiAoZmVhdHVyZS5zdHlsZSB8fCBmZWF0dXJlLnByb3BlcnRpZXMuc3R5bGUpIHsKICAgICAgICAgIHJldHVybiAkLmV4dGVuZCh7fSwgZ2xvYmFsU3R5bGUsIGZlYXR1cmUuc3R5bGUsIGZlYXR1cmUucHJvcGVydGllcy5zdHlsZSk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHJldHVybiBnbG9iYWxTdHlsZTsKICAgICAgICB9CiAgICAgIH0sCiAgICAgIG9uRWFjaEZlYXR1cmU6IGZ1bmN0aW9uKGZlYXR1cmUsIGxheWVyKSB7CiAgICAgICAgdmFyIGV4dHJhSW5mbyA9IHsKICAgICAgICAgIGZlYXR1cmVJZDogZmVhdHVyZS5pZCwKICAgICAgICAgIHByb3BlcnRpZXM6IGZlYXR1cmUucHJvcGVydGllcwogICAgICAgIH07CiAgICAgICAgdmFyIHBvcHVwID0gZmVhdHVyZS5wcm9wZXJ0aWVzLnBvcHVwOwogICAgICAgIGlmICh0eXBlb2YgcG9wdXAgIT09ICd1bmRlZmluZWQnICYmIHBvcHVwICE9PSBudWxsKSBsYXllci5iaW5kUG9wdXAocG9wdXApOwogICAgICAgIGxheWVyLm9uKCJjbGljayIsIG1vdXNlSGFuZGxlcihzZWxmLmlkLCBsYXllcklkLCBncm91cCwgInRvcG9qc29uX2NsaWNrIiwgZXh0cmFJbmZvKSwgdGhpcyk7CiAgICAgICAgbGF5ZXIub24oIm1vdXNlb3ZlciIsIG1vdXNlSGFuZGxlcihzZWxmLmlkLCBsYXllcklkLCBncm91cCwgInRvcG9qc29uX21vdXNlb3ZlciIsIGV4dHJhSW5mbyksIHRoaXMpOwogICAgICAgIGxheWVyLm9uKCJtb3VzZW91dCIsIG1vdXNlSGFuZGxlcihzZWxmLmlkLCBsYXllcklkLCBncm91cCwgInRvcG9qc29uX21vdXNlb3V0IiwgZXh0cmFJbmZvKSwgdGhpcyk7CiAgICAgIH0KICAgIH0pOwogICAgb21uaXZvcmUudG9wb2pzb24ucGFyc2UoZGF0YSwgbnVsbCwgZ2psYXllcik7CiAgICB0aGlzLmxheWVyTWFuYWdlci5hZGRMYXllcihnamxheWVyLCAidG9wb2pzb24iLCBsYXllcklkLCBncm91cCk7CiAgfTsKCiAgbWV0aG9kcy5yZW1vdmVUb3BvSlNPTiA9IGZ1bmN0aW9uKGxheWVySWQpIHsKICAgIHRoaXMubGF5ZXJNYW5hZ2VyLnJlbW92ZUxheWVyKCJ0b3BvanNvbiIsIGxheWVySWQpOwogIH07CgogIG1ldGhvZHMuY2xlYXJUb3BvSlNPTiA9IGZ1bmN0aW9uKCkgewogICAgdGhpcy5sYXllck1hbmFnZXIuY2xlYXJMYXllcnMoInRvcG9qc29uIik7CiAgfTsKCiAgbWV0aG9kcy5hZGRDb250cm9sID0gZnVuY3Rpb24oaHRtbCwgcG9zaXRpb24sIGxheWVySWQsIGNsYXNzZXMpIHsKICAgIGZ1bmN0aW9uIG9uQWRkKG1hcCkgewogICAgICB2YXIgZGl2ID0gTC5Eb21VdGlsLmNyZWF0ZSgnZGl2JywgY2xhc3Nlcyk7CiAgICAgIGlmICh0eXBlb2YgbGF5ZXJJZCAhPT0gJ3VuZGVmaW5lZCcgJiYgbGF5ZXJJZCAhPT0gbnVsbCkgewogICAgICAgIGRpdi5zZXRBdHRyaWJ1dGUoJ2lkJywgbGF5ZXJJZCkKICAgICAgfQogICAgICB0aGlzLl9kaXYgPSBkaXY7CgogICAgICAvLyBJdCdzIHBvc3NpYmxlIGZvciB3aW5kb3cuU2hpbnkgdG8gYmUgdHJ1ZSBidXQgU2hpbnkuaW5pdGlhbGl6ZUlucHV0cyB0bwogICAgICAvLyBub3QgYmUsIHdoZW4gYSBzdGF0aWMgbGVhZmxldCB3aWRnZXQgaXMgaW5jbHVkZWQgYXMgcGFydCBvZiB0aGUgc2hpbnkKICAgICAgLy8gVUkgZGlyZWN0bHkgKG5vdCB0aHJvdWdoIGxlYWZsZXRPdXRwdXQgb3IgdWlPdXRwdXQpLiBJbiB0aGlzIGNhc2Ugd2UKICAgICAgLy8gZG9uJ3QgZG8gdGhlIG5vcm1hbCBTaGlueSBzdHVmZiBhcyB0aGF0IHdpbGwgYWxsIGhhcHBlbiB3aGVuIFNoaW55CiAgICAgIC8vIGl0c2VsZiBsb2FkcyBhbmQgYmluZHMgdGhlIGVudGlyZSBkb2MuCgogICAgICBpZiAod2luZG93LlNoaW55ICYmIFNoaW55LmluaXRpYWxpemVJbnB1dHMpIHsKICAgICAgICBTaGlueS5yZW5kZXJIdG1sKGh0bWwsIHRoaXMuX2Rpdik7CiAgICAgICAgU2hpbnkuaW5pdGlhbGl6ZUlucHV0cyh0aGlzLl9kaXYpOwogICAgICAgIFNoaW55LmJpbmRBbGwodGhpcy5fZGl2KTsKICAgICAgfSBlbHNlIHsKICAgICAgICB0aGlzLl9kaXYuaW5uZXJIVE1MID0gaHRtbDsKICAgICAgfQoKICAgICAgcmV0dXJuIHRoaXMuX2RpdjsKICAgIH0KICAgIGZ1bmN0aW9uIG9uUmVtb3ZlKG1hcCkgewogICAgICBpZiAod2luZG93LlNoaW55ICYmIFNoaW55LnVuYmluZEFsbCkgewogICAgICAgIFNoaW55LnVuYmluZEFsbCh0aGlzLl9kaXYpOwogICAgICB9CiAgICB9CiAgICB2YXIgQ29udHJvbCA9IEwuQ29udHJvbC5leHRlbmQoewogICAgICBvcHRpb25zOiB7cG9zaXRpb246IHBvc2l0aW9ufSwKICAgICAgb25BZGQ6IG9uQWRkLAogICAgICBvblJlbW92ZTogb25SZW1vdmUKICAgIH0pCiAgICB0aGlzLmNvbnRyb2xzLmFkZChuZXcgQ29udHJvbCwgbGF5ZXJJZCwgaHRtbCk7CiAgfTsKCiAgbWV0aG9kcy5yZW1vdmVDb250cm9sID0gZnVuY3Rpb24obGF5ZXJJZCkgewogICAgdGhpcy5jb250cm9scy5yZW1vdmUobGF5ZXJJZCk7CiAgfTsKCiAgbWV0aG9kcy5jbGVhckNvbnRyb2xzID0gZnVuY3Rpb24oKSB7CiAgICB0aGlzLmNvbnRyb2xzLmNsZWFyKCk7CiAgfTsKCiAgbWV0aG9kcy5hZGRMZWdlbmQgPSBmdW5jdGlvbihvcHRpb25zKSB7CiAgICB2YXIgbGVnZW5kID0gTC5jb250cm9sKHtwb3NpdGlvbjogb3B0aW9ucy5wb3NpdGlvbn0pOwogICAgdmFyIGdyYWRTcGFuOwoKICAgIGxlZ2VuZC5vbkFkZCA9IGZ1bmN0aW9uIChtYXApIHsKICAgICAgdmFyIGRpdiA9IEwuRG9tVXRpbC5jcmVhdGUoJ2RpdicsIG9wdGlvbnMuY2xhc3NOYW1lKSwKICAgICAgICAgIGNvbG9ycyA9IG9wdGlvbnMuY29sb3JzLAogICAgICAgICAgbGFiZWxzID0gb3B0aW9ucy5sYWJlbHMsCiAgICAgICAgICBsZWdlbmRIVE1MID0gJyc7CiAgICAgIGlmIChvcHRpb25zLnR5cGUgPT09ICdudW1lcmljJykgewogICAgICAgIC8vICMgRm9ybWF0dGluZyBjb25zdGFudHMuCiAgICAgICAgdmFyIHNpbmdsZUJpbkhlaWdodCA9IDIwOyAgLy8gVGhlIGRpc3RhbmNlIGJldHdlZW4gdGljayBtYXJrcywgaW4gcHgKICAgICAgICB2YXIgdk1hcmdpbiA9IDg7IC8vIElmIDFzdCB0aWNrIG1hcmsgc3RhcnRzIGF0IHRvcCBvZiBncmFkaWVudCwgaG93CiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBtYW55IGV4dHJhIHB4IGFyZSBuZWVkZWQgZm9yIHRoZSB0b3AgaGFsZiBvZiB0aGUKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIDFzdCBsYWJlbD8gKGRpdHRvIGZvciBsYXN0IHRpY2sgbWFyay9sYWJlbCkKICAgICAgICB2YXIgdGlja1dpZHRoID0gNDsgICAgIC8vIEhvdyB3aWRlIHNob3VsZCB0aWNrIG1hcmtzIGJlLCBpbiBweD8KICAgICAgICB2YXIgbGFiZWxQYWRkaW5nID0gNjsgIC8vIEhvdyBtdWNoIGRpc3RhbmNlIHRvIHJlc2VydmUgZm9yIHRpY2sgbWFyaz8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIChNdXN0IGJlID49IHRpY2tXaWR0aCkKCiAgICAgICAgLy8gIyBEZXJpdmVkIGZvcm1hdHRpbmcgcGFyYW1ldGVycy4KCiAgICAgICAgLy8gV2hhdCdzIHRoZSBoZWlnaHQgb2YgYSBzaW5nbGUgYmluLCBpbiBwZXJjZW50YWdlIChvZiBncmFkaWVudCBoZWlnaHQpPwogICAgICAgIC8vIEl0IG1pZ2h0IG5vdCBqdXN0IGJlIDEvKG4tMSksIGlmIHRoZSBncmFkaWVudCBleHRlbmRzIHBhc3QgdGhlIHRpY2sKICAgICAgICAvLyBtYXJrcyAod2hpY2ggY2FuIGJlIHRoZSBjYXNlIGZvciBwcmV0dHkgY3V0IHBvaW50cykuCiAgICAgICAgdmFyIHNpbmdsZUJpblBjdCA9IChvcHRpb25zLmV4dHJhLnBfbiAtIG9wdGlvbnMuZXh0cmEucF8xKSAvIChsYWJlbHMubGVuZ3RoIC0gMSk7CiAgICAgICAgLy8gRWFjaCBiaW4gaXMgYHNpbmdsZUJpbkhlaWdodGAgaGlnaC4gSG93IHRhbGwgaXMgdGhlIGdyYWRpZW50PwogICAgICAgIHZhciB0b3RhbEhlaWdodCA9ICgxIC8gc2luZ2xlQmluUGN0KSAqIHNpbmdsZUJpbkhlaWdodCArIDE7CiAgICAgICAgLy8gSG93IGZhciBzaG91bGQgdGhlIGZpcnN0IHRpY2sgYmUgc2hpZnRlZCBkb3duLCByZWxhdGl2ZSB0byB0aGUgdG9wCiAgICAgICAgLy8gb2YgdGhlIGdyYWRpZW50PwogICAgICAgIHZhciB0aWNrT2Zmc2V0ID0gKHNpbmdsZUJpbkhlaWdodCAvIHNpbmdsZUJpblBjdCkgKiBvcHRpb25zLmV4dHJhLnBfMTsKCiAgICAgICAgZ3JhZFNwYW4gPSAkKCc8c3Bhbi8+JykuY3NzKHsKICAgICAgICAgICdiYWNrZ3JvdW5kJzogJ2xpbmVhci1ncmFkaWVudCgnICsgY29sb3JzICsgJyknLAogICAgICAgICAgJ29wYWNpdHknOiBvcHRpb25zLm9wYWNpdHksCiAgICAgICAgICAnaGVpZ2h0JzogdG90YWxIZWlnaHQgKyAncHgnLAogICAgICAgICAgJ3dpZHRoJzogJzE4cHgnLAogICAgICAgICAgJ2Rpc3BsYXknOiAnYmxvY2snLAogICAgICAgICAgJ21hcmdpbi10b3AnOiB2TWFyZ2luICsgJ3B4JwogICAgICAgIH0pOwogICAgICAgIHZhciBsZWZ0RGl2ID0gJCgnPGRpdi8+JykuY3NzKCdmbG9hdCcsICdsZWZ0JyksCiAgICAgICAgICAgIHJpZ2h0RGl2ID0gJCgnPGRpdi8+JykuY3NzKCdmbG9hdCcsICdsZWZ0Jyk7CiAgICAgICAgbGVmdERpdi5hcHBlbmQoZ3JhZFNwYW4pOwogICAgICAgICQoZGl2KS5hcHBlbmQobGVmdERpdikuYXBwZW5kKHJpZ2h0RGl2KQogICAgICAgICAgLmFwcGVuZCgkKCI8YnIgY2xlYXI9J2JvdGgnLz4iKSk7CgogICAgICAgIC8vIEhhdmUgdG8gYXR0YWNoIHRoZSBkaXYgdG8gdGhlIGJvZHkgYXQgdGhpcyBlYXJseSBwb2ludCwgc28gdGhhdCB0aGUKICAgICAgICAvLyBzdmcgdGV4dCBnZXRDb21wdXRlZFRleHRMZW5ndGgoKSBhY3R1YWxseSB3b3JrcywgYmVsb3cuCiAgICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChkaXYpOwoKICAgICAgICB2YXIgbnMgPSAnaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnOwogICAgICAgIHZhciBzdmcgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMobnMsICdzdmcnKTsKICAgICAgICByaWdodERpdi5hcHBlbmQoc3ZnKTsKICAgICAgICB2YXIgZyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhucywgJ2cnKTsKICAgICAgICAkKGcpLmF0dHIoInRyYW5zZm9ybSIsICJ0cmFuc2xhdGUoMCwgIiArIHZNYXJnaW4gKyAiKSIpOwogICAgICAgIHN2Zy5hcHBlbmRDaGlsZChnKTsKCiAgICAgICAgLy8gbWF4IGxhYmVsIHdpZHRoIG5lZWRlZCB0byBzZXQgd2lkdGggb2Ygc3ZnLCBhbmQgcmlnaHQtanVzdGlmeSB0ZXh0CiAgICAgICAgdmFyIG1heExibFdpZHRoID0gMDsKCiAgICAgICAgLy8gQ3JlYXRlIHRpY2sgbWFya3MgYW5kIGxhYmVscwogICAgICAgICQuZWFjaChsYWJlbHMsIGZ1bmN0aW9uKGksIGxhYmVsKSB7CiAgICAgICAgICB2YXIgeSA9IHRpY2tPZmZzZXQgKyBpKnNpbmdsZUJpbkhlaWdodCArIDAuNTsKCiAgICAgICAgICB2YXIgdGhpc0xhYmVsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKG5zLCAndGV4dCcpOwogICAgICAgICAgJCh0aGlzTGFiZWwpCiAgICAgICAgICAgIC50ZXh0KGxhYmVsc1tpXSkKICAgICAgICAgICAgLmF0dHIoJ3knLCB5KQogICAgICAgICAgICAuYXR0cignZHgnLCBsYWJlbFBhZGRpbmcpCiAgICAgICAgICAgIC5hdHRyKCdkeScsICcwLjVleCcpOwogICAgICAgICAgZy5hcHBlbmRDaGlsZCh0aGlzTGFiZWwpOwogICAgICAgICAgbWF4TGJsV2lkdGggPSBNYXRoLm1heChtYXhMYmxXaWR0aCwgdGhpc0xhYmVsLmdldENvbXB1dGVkVGV4dExlbmd0aCgpKTsKCiAgICAgICAgICB2YXIgdGhpc1RpY2sgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMobnMsICdsaW5lJyk7CiAgICAgICAgICAkKHRoaXNUaWNrKQogICAgICAgICAgICAuYXR0cigneDEnLCAwKQogICAgICAgICAgICAuYXR0cigneDInLCB0aWNrV2lkdGgpCiAgICAgICAgICAgIC5hdHRyKCd5MScsIHkpCiAgICAgICAgICAgIC5hdHRyKCd5MicsIHkpCiAgICAgICAgICAgIC5hdHRyKCdzdHJva2Utd2lkdGgnLCAxKTsKICAgICAgICAgIGcuYXBwZW5kQ2hpbGQodGhpc1RpY2spOwogICAgICAgIH0pOwoKICAgICAgICAvLyBOb3cgdGhhdCB3ZSBrbm93IHRoZSBtYXggbGFiZWwgd2lkdGgsIHdlIGNhbiByaWdodC1qdXN0aWZ5CiAgICAgICAgJChzdmcpLmZpbmQoJ3RleHQnKQogICAgICAgICAgLmF0dHIoJ2R4JywgbGFiZWxQYWRkaW5nICsgbWF4TGJsV2lkdGgpCiAgICAgICAgICAuYXR0cigndGV4dC1hbmNob3InLCAnZW5kJyk7CiAgICAgICAgLy8gRmluYWwgc2l6ZSBmb3IgPHN2Zz4KICAgICAgICAkKHN2ZykuY3NzKHsKICAgICAgICAgIHdpZHRoOiAobWF4TGJsV2lkdGggKyBsYWJlbFBhZGRpbmcpICsgInB4IiwKICAgICAgICAgIGhlaWdodDogdG90YWxIZWlnaHQgKyB2TWFyZ2luKjIgKyAicHgiCiAgICAgICAgfSk7CgogICAgICAgIGlmIChvcHRpb25zLm5hX2NvbG9yKSB7CiAgICAgICAgICAkKGRpdikuYXBwZW5kKCc8ZGl2PjxpIHN0eWxlPSJiYWNrZ3JvdW5kOicgKyBvcHRpb25zLm5hX2NvbG9yICsKICAgICAgICAgICAgICAgICAgICAgICAgJyI+PC9pPiAnICsgb3B0aW9ucy5uYV9sYWJlbCArICc8L2Rpdj4nKTsKICAgICAgICB9CiAgICAgIH0gZWxzZSB7CiAgICAgICAgaWYgKG9wdGlvbnMubmFfY29sb3IpIHsKICAgICAgICAgIGNvbG9ycy5wdXNoKG9wdGlvbnMubmFfY29sb3IpOwogICAgICAgICAgbGFiZWxzLnB1c2gob3B0aW9ucy5uYV9sYWJlbCk7CiAgICAgICAgfQogICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY29sb3JzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICBsZWdlbmRIVE1MICs9ICc8aSBzdHlsZT0iYmFja2dyb3VuZDonICsgY29sb3JzW2ldICsgJztvcGFjaXR5OicgKwogICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zLm9wYWNpdHkgKyAnIj48L2k+ICcgKyBsYWJlbHNbaV0gKyAnPGJyLz4nOwogICAgICAgIH0KICAgICAgICBkaXYuaW5uZXJIVE1MID0gbGVnZW5kSFRNTDsKICAgICAgfQogICAgICBpZiAob3B0aW9ucy50aXRsZSkKICAgICAgICAkKGRpdikucHJlcGVuZCgnPGRpdiBzdHlsZT0ibWFyZ2luLWJvdHRvbTozcHgiPjxzdHJvbmc+JyArCiAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnMudGl0bGUgKyAnPC9zdHJvbmc+PC9kaXY+Jyk7CiAgICAgIHJldHVybiBkaXY7CiAgICB9OwoKICAgIHRoaXMuY29udHJvbHMuYWRkKGxlZ2VuZCwgb3B0aW9ucy5sYXllcklkKTsKICB9OwoKICBtZXRob2RzLmFkZExheWVyc0NvbnRyb2wgPSBmdW5jdGlvbihiYXNlR3JvdXBzLCBvdmVybGF5R3JvdXBzLCBvcHRpb25zKSB7CgogICAgdmFyIHNlbGYgPSB0aGlzOwoKICAgIC8vIE9ubHkgYWxsb3cgb25lIGxheWVycyBjb250cm9sIGF0IGEgdGltZQogICAgbWV0aG9kcy5yZW1vdmVMYXllcnNDb250cm9sLmNhbGwodGhpcyk7CgogICAgdmFyIGZpcnN0TGF5ZXIgPSB0cnVlOwogICAgdmFyIGJhc2UgPSB7fTsKICAgICQuZWFjaChhc0FycmF5KGJhc2VHcm91cHMpLCBmdW5jdGlvbihpLCBnKSB7CiAgICAgIHZhciBsYXllciA9IHNlbGYubGF5ZXJNYW5hZ2VyLmdldExheWVyR3JvdXAoZywgdHJ1ZSk7CiAgICAgIGlmIChsYXllcikgewogICAgICAgIGJhc2VbZ10gPSBsYXllcjsKCiAgICAgICAgLy8gQ2hlY2sgaWYgPjEgYmFzZSBsYXllcnMgYXJlIHZpc2libGU7IGlmIHNvLCBoaWRlIGFsbCBidXQgdGhlIGZpcnN0IG9uZQogICAgICAgIGlmIChzZWxmLmhhc0xheWVyKGxheWVyKSkgewogICAgICAgICAgaWYgKGZpcnN0TGF5ZXIpIHsKICAgICAgICAgICAgZmlyc3RMYXllciA9IGZhbHNlOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgc2VsZi5yZW1vdmVMYXllcihsYXllcik7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICB9KTsKICAgIHZhciBvdmVybGF5ID0ge307CiAgICAkLmVhY2goYXNBcnJheShvdmVybGF5R3JvdXBzKSwgZnVuY3Rpb24oaSwgZykgewogICAgICB2YXIgbGF5ZXIgPSBzZWxmLmxheWVyTWFuYWdlci5nZXRMYXllckdyb3VwKGcsIHRydWUpOwogICAgICBpZiAobGF5ZXIpIHsKICAgICAgICBvdmVybGF5W2ddID0gbGF5ZXI7CiAgICAgIH0KICAgIH0pOwoKICAgIHZhciBsYXllcnNDb250cm9sID0gTC5jb250cm9sLmxheWVycyhiYXNlLCBvdmVybGF5LCBvcHRpb25zKS5hZGRUbyh0aGlzKTsKICAgIHRoaXMuY3VycmVudExheWVyc0NvbnRyb2wgPSBsYXllcnNDb250cm9sOwogIH07CgogIG1ldGhvZHMucmVtb3ZlTGF5ZXJzQ29udHJvbCA9IGZ1bmN0aW9uKCkgewogICAgaWYgKHRoaXMuY3VycmVudExheWVyc0NvbnRyb2wpIHsKICAgICAgdGhpcy5jdXJyZW50TGF5ZXJzQ29udHJvbC5yZW1vdmVGcm9tKHRoaXMpOwogICAgICB0aGlzLmN1cnJlbnRMYXllcnNDb250cm9sID0gbnVsbDsKICAgIH0KICB9OwoKICBtZXRob2RzLmFkZFNjYWxlQmFyID0gZnVuY3Rpb24ob3B0aW9ucykgewoKICAgIHZhciBzZWxmID0gdGhpczsKCiAgICAvLyBPbmx5IGFsbG93IG9uZSBzY2FsZSBiYXIgYXQgYSB0aW1lCiAgICBtZXRob2RzLnJlbW92ZVNjYWxlQmFyLmNhbGwodGhpcyk7CgogICAgdmFyIHNjYWxlQmFyID0gTC5jb250cm9sLnNjYWxlKG9wdGlvbnMpLmFkZFRvKHRoaXMpOwogICAgdGhpcy5jdXJyZW50U2NhbGVCYXIgPSBzY2FsZUJhcjsKICB9OwoKICBtZXRob2RzLnJlbW92ZVNjYWxlQmFyID0gZnVuY3Rpb24oKSB7CiAgICBpZiAodGhpcy5jdXJyZW50U2NhbGVCYXIpIHsKICAgICAgdGhpcy5jdXJyZW50U2NhbGVCYXIucmVtb3ZlRnJvbSh0aGlzKTsKICAgICAgdGhpcy5jdXJyZW50U2NhbGVCYXIgPSBudWxsOwogICAgfQogIH07CgogIG1ldGhvZHMuaGlkZUdyb3VwID0gZnVuY3Rpb24oZ3JvdXApIHsKICAgIHZhciBzZWxmID0gdGhpczsKICAgICQuZWFjaChhc0FycmF5KGdyb3VwKSwgZnVuY3Rpb24oaSwgZykgewogICAgICB2YXIgbGF5ZXIgPSBzZWxmLmxheWVyTWFuYWdlci5nZXRMYXllckdyb3VwKGcsIHRydWUpOwogICAgICBpZiAobGF5ZXIpIHsKICAgICAgICBzZWxmLnJlbW92ZUxheWVyKGxheWVyKTsKICAgICAgfQogICAgfSk7CiAgfTsKCiAgbWV0aG9kcy5zaG93R3JvdXAgPSBmdW5jdGlvbihncm91cCkgewogICAgdmFyIHNlbGYgPSB0aGlzOwogICAgJC5lYWNoKGFzQXJyYXkoZ3JvdXApLCBmdW5jdGlvbihpLCBnKSB7CiAgICAgIHZhciBsYXllciA9IHNlbGYubGF5ZXJNYW5hZ2VyLmdldExheWVyR3JvdXAoZywgdHJ1ZSk7CiAgICAgIGlmIChsYXllcikgewogICAgICAgIHNlbGYuYWRkTGF5ZXIobGF5ZXIpOwogICAgICB9CiAgICB9KTsKICB9OwoKICBtZXRob2RzLmFkZFJhc3RlckltYWdlID0gZnVuY3Rpb24odXJpLCBib3VuZHMsIG9wYWNpdHksIGF0dHJpYnV0aW9uLCBsYXllcklkLCBncm91cCkgewogICAgLy8gdXJpIGlzIGEgZGF0YSBVUkkgY29udGFpbmluZyBhbiBpbWFnZS4gV2Ugd2FudCB0byBwYWludCB0aGlzIGltYWdlIGFzIGEKICAgIC8vIGxheWVyIGF0ICh0b3AtbGVmdCkgYm91bmRzWzBdIHRvIChib3R0b20tcmlnaHQpIGJvdW5kc1sxXS4KCiAgICAvLyBXZSBjYW4ndCBzaW1wbHkgdXNlIEltYWdlT3ZlcmxheSwgYXMgaXQgdXNlcyBiaWxpbmVhciBzY2FsaW5nIHdoaWNoIGxvb2tzCiAgICAvLyBhd2Z1bCBhcyB5b3Ugem9vbSBpbiAoYW5kIHNvbWV0aW1lcyBzaGlmdHMgcG9zaXRpb25zIG9yIGRpc2FwcGVhcnMpLgogICAgLy8gSW5zdGVhZCwgd2UnbGwgdXNlIGEgVGlsZUxheWVyLkNhbnZhcyB0byBkcmF3IHBpZWNlcyBvZiB0aGUgaW1hZ2UuCgogICAgLy8gRmlyc3QsIHNvbWUgaGVscGVyIGZ1bmN0aW9ucy4KCiAgICAvLyBkZWdyZWUydGlsZSBjb252ZXJ0cyBsYXRpdHVkZSwgbG9uZ2l0dWRlLCBhbmQgem9vbSB0byB4IGFuZCB5IHRpbGUKICAgIC8vIG51bWJlcnMuIFRoZSB0aWxlIG51bWJlcnMgcmV0dXJuZWQgY2FuIGJlIG5vbi1pbnRlZ3JhbCwgYXMgdGhlcmUncyBubwogICAgLy8gcmVhc29uIHRvIGV4cGVjdCB0aGF0IHRoZSBsYXQvbG5nIGlucHV0cyBhcmUgZXhhY3RseSBvbiB0aGUgYm9yZGVyIG9mIHR3bwogICAgLy8gdGlsZXMuCiAgICAvLwogICAgLy8gV2UnbGwgdXNlIHRoaXMgdG8gY29udmVydCB0aGUgYm91bmRzIHdlIGdvdCBmcm9tIHRoZSBzZXJ2ZXIsIGludG8gY29vcmRzCiAgICAvLyBpbiB0aWxlLXNwYWNlIGF0IGEgZ2l2ZW4gem9vbSBsZXZlbC4gTm90ZSB0aGF0IG9uY2Ugd2UgZG8gdGhlIGNvbnZlcnNpb24sCiAgICAvLyB3ZSBkb24ndCB0byBkbyBhbnkgbW9yZSB0cmlnb25vbWV0cnkgdG8gY29udmVydCBiZXR3ZWVuIHBpeGVsIGNvb3JkaW5hdGVzCiAgICAvLyBhbmQgdGlsZSBjb29yZGluYXRlczsgdGhlIHNvdXJjZSBpbWFnZSBwaXhlbCBjb29yZHMsIGRlc3RpbmF0aW9uIGNhbnZhcwogICAgLy8gcGl4ZWwgY29vcmRzLCBhbmQgdGlsZSBjb29yZHMgYWxsIGNhbiBiZSBzY2FsZWQgbGluZWFybHkuCiAgICBmdW5jdGlvbiBkZWdyZWUydGlsZShsYXQsIGxuZywgem9vbSkgewogICAgICAvLyBTZWUgaHR0cDovL3dpa2kub3BlbnN0cmVldG1hcC5vcmcvd2lraS9TbGlwcHlfbWFwX3RpbGVuYW1lcwogICAgICB2YXIgbGF0UmFkID0gbGF0ICogTWF0aC5QSSAvIDE4MDsKICAgICAgdmFyIG4gPSBNYXRoLnBvdygyLCB6b29tKTsKICAgICAgdmFyIHggPSAobG5nICsgMTgwKSAvIDM2MCAqIG4KICAgICAgdmFyIHkgPSAoMSAtIE1hdGgubG9nKE1hdGgudGFuKGxhdFJhZCkgKyAoMSAvIE1hdGguY29zKGxhdFJhZCkpKSAvIE1hdGguUEkpIC8gMiAqIG4KICAgICAgcmV0dXJuIHt4OiB4LCB5OiB5fTsKICAgIH0KCiAgICAvLyBHaXZlbiBhIHJhbmdlIFtmcm9tLHRvKSBhbmQgZWl0aGVyIG9uZSBvciB0d28gbnVtYmVycywgcmV0dXJucyB0cnVlIGlmCiAgICAvLyB0aGVyZSBpcyBhbnkgb3ZlcmxhcCBiZXR3ZWVuIFt4LHgxKSBhbmQgdGhlIHJhbmdlLS1vciBpZiB4MSBpcyBvbWl0dGVkLAogICAgLy8gdGhlbiByZXR1cm5zIHRydWUgaWYgeCBpcyB3aXRoaW4gW2Zyb20sdG8pLgogICAgZnVuY3Rpb24gb3ZlcmxhcChmcm9tLCB0bywgeCwgLyogb3B0aW9uYWwgKi8geDEpIHsKICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT0gMykKICAgICAgICB4MSA9IHg7CiAgICAgIHJldHVybiB4IDwgdG8gJiYgeDEgPj0gZnJvbTsKICAgIH0KCiAgICBmdW5jdGlvbiBnZXRDYW52YXNTbW9vdGhpbmdQcm9wZXJ0eShjdHgpIHsKICAgICAgdmFyIGNhbmRpZGF0ZXMgPSBbImltYWdlU21vb3RoaW5nRW5hYmxlZCIsICJtb3pJbWFnZVNtb290aGluZ0VuYWJsZWQiLAogICAgICAgICAgIndlYmtpdEltYWdlU21vb3RoaW5nRW5hYmxlZCIsICJtc0ltYWdlU21vb3RoaW5nRW5hYmxlZCJdOwogICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNhbmRpZGF0ZXMubGVuZ3RoOyBpKyspIHsKICAgICAgICBpZiAodHlwZW9mKGN0eFtjYW5kaWRhdGVzW2ldXSkgIT09ICJ1bmRlZmluZWQiKSB7CiAgICAgICAgICByZXR1cm4gY2FuZGlkYXRlc1tpXTsKICAgICAgICB9CiAgICAgIH0KICAgICAgcmV0dXJuIG51bGw7CiAgICB9CgogICAgLy8gT3VyIGdlbmVyYWwgc3RyYXRlZ3kgaXMgdG86CiAgICAvLyAxLiBMb2FkIHRoZSBkYXRhIFVSSSBpbiBhbiBJbWFnZSgpIG9iamVjdCwgc28gd2UgY2FuIGdldCBpdHMgcGl4ZWwKICAgIC8vICAgIGRpbWVuc2lvbnMgYW5kIHRoZSB1bmRlcmx5aW5nIGltYWdlIGRhdGEuIChXZSBjb3VsZCBoYXZlIGRvbmUgdGhpcwogICAgLy8gICAgYnkgbm90IGVuY29kaW5nIGFzIFBORyBhdCBhbGwgYnV0IGp1c3Qgc2VuZCBhbiBhcnJheSBvZiBSR0JBIHZhbHVlcwogICAgLy8gICAgZnJvbSB0aGUgc2VydmVyLCBidXQgdGhhdCB3b3VsZCBpbmZsYXRlIHRoZSBKU09OIHRvbyBtdWNoLikKICAgIC8vIDIuIENyZWF0ZSBhIGhpZGRlbiBjYW52YXMgdGhhdCB3ZSB1c2UganVzdCB0byBleHRyYWN0IHRoZSBpbWFnZSBkYXRhCiAgICAvLyAgICBmcm9tIHRoZSBJbWFnZSAodXNpbmcgQ29udGV4dDJELmdldEltYWdlRGF0YSgpKS4KICAgIC8vIDMuIENyZWF0ZSBhIFRpbGVMYXllci5DYW52YXMgYW5kIGFkZCBpdCB0byB0aGUgbWFwLgoKICAgIC8vIFdlIHdhbnQgdG8gc3luY2hyb25vdXNseSBjcmVhdGUgYW5kIGF0dGFjaCB0aGUgVGlsZUxheWVyLkNhbnZhcyAoc28gYW4KICAgIC8vIGltbWVkaWF0ZSBjYWxsIHRvIGNsZWFyUmFzdGVycygpIHdpbGwgYmUgcmVzcGVjdGVkLCBmb3IgZXhhbXBsZSksIGJ1dAogICAgLy8gSW1hZ2UgbG9hZHMgaXRzIGRhdGEgYXN5bmNocm9ub3VzbHkuIEZvcnR1bmF0ZWx5IHdlIGNhbiByZXNvbHZlIHRoaXMKICAgIC8vIGJ5IHB1dHRpbmcgVGlsZUxheWVyLkNhbnZhcyBpbnRvIGFzeW5jIG1vZGUsIHdoaWNoIHdpbGwgbGV0IHVzIGNyZWF0ZQogICAgLy8gYW5kIGF0dGFjaCB0aGUgbGF5ZXIgYnV0IGhhdmUgaXQgd2FpdCB1bnRpbCB0aGUgaW1hZ2UgaXMgbG9hZGVkIGJlZm9yZQogICAgLy8gaXQgYWN0dWFsbHkgZHJhd3MgYW55dGhpbmcuCgogICAgLy8gVGhlc2UgYXJlIHRoZSB2YXJpYWJsZXMgdGhhdCB3ZSB3aWxsIHBvcHVsYXRlIG9uY2UgdGhlIGltYWdlIGlzIGxvYWRlZC4KICAgIHZhciBpbWdEYXRhID0gbnVsbDsgLy8gMWQgcm93LW1ham9yIGFycmF5LCBmb3VyIFswLTI1NV0gaW50ZWdlcnMgcGVyIHBpeGVsCiAgICB2YXIgaW1nRGF0YU1pcE1hcHBlciA9IG51bGw7CiAgICB2YXIgdyA9IG51bGw7ICAgICAgIC8vIGltYWdlIHdpZHRoIGluIHBpeGVscwogICAgdmFyIGggPSBudWxsOyAgICAgICAvLyBpbWFnZSBoZWlnaHQgaW4gcGl4ZWxzCgogICAgLy8gV2UnbGwgdXNlIHRoaXMgYXJyYXkgdG8gc3RvcmUgY2FsbGJhY2tzIHRoYXQgbmVlZCB0byBiZSBpbnZva2VkIG9uY2UKICAgIC8vIGltZ0RhdGEsIHcsIGFuZCBoIGhhdmUgYmVlbiByZXNvbHZlZC4KICAgIHZhciBpbWdEYXRhQ2FsbGJhY2tzID0gW107CgogICAgLy8gQ29uc3VtZXJzIG9mIGltZ0RhdGEsIHcsIGFuZCBoIGNhbiBjYWxsIHRoaXMgdG8gYmUgbm90aWZpZWQgd2hlbiBkYXRhCiAgICAvLyBpcyBhdmFpbGFibGUuIFVubGlrZSBtb3N0IGFzeW5jL3Byb21pc2UtYmFzZWQgQVBJcywgdGhlIGNhbGxiYWNrIHdpbGwKICAgIC8vIGJlIGludm9rZWQgaW1tZWRpYXRlbHkvc3luY2hyb25vdXNseSBpZiB0aGUgZGF0YSBpcyBhbHJlYWR5IGF2YWlsYWJsZS4KICAgIGZ1bmN0aW9uIGdldEltYWdlRGF0YShjYWxsYmFjaykgewogICAgICBpZiAoaW1nRGF0YSAhPSBudWxsKSB7CiAgICAgICAgY2FsbGJhY2soaW1nRGF0YSwgdywgaCwgaW1nRGF0YU1pcE1hcHBlcik7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgaW1nRGF0YUNhbGxiYWNrcy5wdXNoKGNhbGxiYWNrKTsKICAgICAgfQogICAgfQoKICAgIHZhciBpbWcgPSBuZXcgSW1hZ2UoKTsKICAgIGltZy5vbmxvYWQgPSBmdW5jdGlvbigpIHsKICAgICAgLy8gU2F2ZSBzaXplCiAgICAgIHcgPSBpbWcud2lkdGg7CiAgICAgIGggPSBpbWcuaGVpZ2h0OwoKICAgICAgLy8gQ3JlYXRlIGEgZHVtbXkgY2FudmFzIHRvIGV4dHJhY3QgdGhlIGltYWdlIGRhdGEKICAgICAgdmFyIGltZ0RhdGFDYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJjYW52YXMiKTsKICAgICAgaW1nRGF0YUNhbnZhcy53aWR0aCA9IHc7CiAgICAgIGltZ0RhdGFDYW52YXMuaGVpZ2h0ID0gaDsKICAgICAgaW1nRGF0YUNhbnZhcy5zdHlsZS5kaXNwbGF5ID0gIm5vbmUiOwogICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGltZ0RhdGFDYW52YXMpOwoKICAgICAgdmFyIGltZ0RhdGFDdHggPSBpbWdEYXRhQ2FudmFzLmdldENvbnRleHQoIjJkIik7CiAgICAgIGltZ0RhdGFDdHguZHJhd0ltYWdlKGltZywgMCwgMCk7CgogICAgICAvLyBTYXZlIHRoZSBpbWFnZSBkYXRhLgogICAgICBpbWdEYXRhID0gaW1nRGF0YUN0eC5nZXRJbWFnZURhdGEoMCwgMCwgdywgaCkuZGF0YTsKICAgICAgaW1nRGF0YU1pcE1hcHBlciA9IG5ldyBNaXBtYXBwZXIoaW1nKTsKCiAgICAgIC8vIERvbmUgd2l0aCB0aGUgY2FudmFzLCByZW1vdmUgaXQgZnJvbSB0aGUgcGFnZSBzbyBpdCBjYW4gYmUgZ2MnZC4KICAgICAgZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChpbWdEYXRhQ2FudmFzKTsKCiAgICAgIC8vIEFsZXJ0IGFueSBnZXRJbWFnZURhdGEgY2FsbGVycyB3aG8gYXJlIHdhaXRpbmcuCiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaW1nRGF0YUNhbGxiYWNrcy5sZW5ndGg7IGkrKykgewogICAgICAgIGltZ0RhdGFDYWxsYmFja3NbaV0oaW1nRGF0YSwgdywgaCwgaW1nRGF0YU1pcE1hcHBlcik7CiAgICAgIH0KICAgICAgaW1nRGF0YUNhbGxiYWNrcyA9IFtdOwogICAgfTsKICAgIGltZy5zcmMgPSB1cmk7CgogICAgdmFyIGNhbnZhc1RpbGVzID0gTC50aWxlTGF5ZXIuY2FudmFzKHsKICAgICAgb3BhY2l0eTogb3BhY2l0eSwKICAgICAgYXR0cmlidXRpb246IGF0dHJpYnV0aW9uLAogICAgICBkZXRlY3RSZXRpbmE6IHRydWUsCiAgICAgIGFzeW5jOiB0cnVlCiAgICB9KTsKCiAgICBjYW52YXNUaWxlcy5kcmF3VGlsZSA9IGZ1bmN0aW9uKGNhbnZhcywgdGlsZVBvaW50LCB6b29tKSB7CiAgICAgIGdldEltYWdlRGF0YShmdW5jdGlvbihpbWdEYXRhLCB3LCBoLCBtaXBtYXBwZXIpIHsKICAgICAgICB0cnkgewogICAgICAgICAgLy8gVGhlIENvbnRleHQyRCB3ZSdsbCBiZWluZyBkcmF3aW5nIG9udG8uIEl0J3MgYWx3YXlzIDI1NngyNTYuCiAgICAgICAgICB2YXIgY3R4ID0gY2FudmFzLmdldENvbnRleHQoJzJkJyk7CgogICAgICAgICAgLy8gQ29udmVydCBvdXIgaW1hZ2UgZGF0YSdzIHRvcC1sZWZ0IGFuZCBib3R0b20tcmlnaHQgbG9jYXRpb25zIGludG8KICAgICAgICAgIC8vIHgveSB0aWxlIGNvb3JkaW5hdGVzLiBUaGlzIGlzIGVzc2VudGlhbGx5IGRvaW5nIGEgc3BoZXJpY2FsIG1lcmNhdG9yCiAgICAgICAgICAvLyBwcm9qZWN0aW9uLCB0aGVuIG11bHRpcGx5aW5nIGJ5IDJeem9vbS4KICAgICAgICAgIHZhciB0b3BMZWZ0ID0gZGVncmVlMnRpbGUoYm91bmRzWzBdWzBdLCBib3VuZHNbMF1bMV0sIHpvb20pOwogICAgICAgICAgdmFyIGJvdHRvbVJpZ2h0ID0gZGVncmVlMnRpbGUoYm91bmRzWzFdWzBdLCBib3VuZHNbMV1bMV0sIHpvb20pOwogICAgICAgICAgLy8gVGhlIHNpemUgb2YgdGhlIGltYWdlIGluIHgveSB0aWxlIGNvb3JkaW5hdGVzLgogICAgICAgICAgdmFyIGV4dGVudCA9IHt4OiBib3R0b21SaWdodC54IC0gdG9wTGVmdC54LCB5OiBib3R0b21SaWdodC55IC0gdG9wTGVmdC55fTsKCiAgICAgICAgICAvLyBTaG9ydCBjaXJjdWl0IGlmIHRpbGUgaXMgdG90YWxseSBkaXNqb2ludCBmcm9tIGltYWdlLgogICAgICAgICAgaWYgKCFvdmVybGFwKHRpbGVQb2ludC54LCB0aWxlUG9pbnQueCArIDEsIHRvcExlZnQueCwgYm90dG9tUmlnaHQueCkpCiAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgIGlmICghb3ZlcmxhcCh0aWxlUG9pbnQueSwgdGlsZVBvaW50LnkgKyAxLCB0b3BMZWZ0LnksIGJvdHRvbVJpZ2h0LnkpKQogICAgICAgICAgICByZXR1cm47CgogICAgICAgICAgLy8gVGhlIGxpbmVhciByZXNvbHV0aW9uIG9mIHRoZSB0aWxlIHdlJ3JlIGRyYXdpbmcgaXMgYWx3YXlzIDI1NnB4IHBlciB0aWxlIHVuaXQuCiAgICAgICAgICAvLyBJZiB0aGUgbGluZWFyIHJlc29sdXRpb24gKGluIGVpdGhlciBkaXJlY3Rpb24pIG9mIHRoZSBpbWFnZSBpcyBsZXNzIHRoYW4gMjU2cHgKICAgICAgICAgIC8vIHBlciB0aWxlIHVuaXQsIHRoZW4gdXNlIG5lYXJlc3QgbmVpZ2hib3I7IG90aGVyd2lzZSwgdXNlIHRoZSBjYW52YXMncyBidWlsdC1pbgogICAgICAgICAgLy8gc2NhbGluZy4KICAgICAgICAgIHZhciBpbWdSZXMgPSB7CiAgICAgICAgICAgIHg6IHcgLyBleHRlbnQueCwKICAgICAgICAgICAgeTogaCAvIGV4dGVudC55CiAgICAgICAgICB9OwoKICAgICAgICAgIC8vIFdlIGNhbiBkbyB0aGUgYWN0dWFsIGRyYXdpbmcgaW4gb25lIG9mIHRocmVlIHdheXM6CiAgICAgICAgICAvLyAtIENhbGwgZHJhd0ltYWdlKCkuIFRoaXMgaXMgZWFzeSBhbmQgZmFzdCwgYW5kIHJlc3VsdHMgaW4gc21vb3RoCiAgICAgICAgICAvLyAgIGludGVycG9sYXRpb24gKGJpbGluZWFyPykuIFRoaXMgaXMgd2hhdCB3ZSB3YW50IHdoZW4gd2UgYXJlCiAgICAgICAgICAvLyAgIHJlZHVjaW5nIHRoZSBpbWFnZSBmcm9tIGl0cyBuYXRpdmUgc2l6ZS4KICAgICAgICAgIC8vIC0gQ2FsbCBkcmF3SW1hZ2UoKSB3aXRoIGltYWdlU21vb3RoaW5nRW5hYmxlZD1mYWxzZS4gVGhpcyBpcyBlYXN5CiAgICAgICAgICAvLyAgIGFuZCBmYXN0IGFuZCBnaXZlcyB1cyBuZWFyZXN0LW5laWdoYm9yIGludGVycG9sYXRpb24sIHdoaWNoIGlzIHdoYXQKICAgICAgICAgIC8vICAgd2Ugd2FudCB3aGVuIGVubGFyZ2luZyB0aGUgaW1hZ2UuIEhvd2V2ZXIsIGl0J3MgdW5zdXBwb3J0ZWQgb24gbWFueQogICAgICAgICAgLy8gICBicm93c2VycyAoaW5jbHVkaW5nIFF0V2Via2l0KS4KICAgICAgICAgIC8vIC0gRG8gYSBtYW51YWwgbmVhcmVzdC1uZWlnaGJvciBpbnRlcnBvbGF0aW9uLiBUaGlzIGlzIHdoYXQgd2UnbGwgZmFsbAogICAgICAgICAgLy8gICBiYWNrIHRvIHdoZW4gZW5sYXJnaW5nLCBhbmQgaW1hZ2VTbW9vdGhpbmdFbmFibGVkIGlzbid0IHN1cHBvcnRlZC4KICAgICAgICAgIC8vICAgSW4gdGhlb3J5IGl0J3Mgc2xvd2VyLCBidXQgc3RpbGwgcHJldHR5IGZhc3Qgb24gbXkgbWFjaGluZSwgYW5kIHRoZQogICAgICAgICAgLy8gICByZXN1bHRzIGxvb2sgdGhlIHNhbWUgQUZBSUNULgoKICAgICAgICAgIC8vIElzIGltYWdlU21vb3RoaW5nRW5hYmxlZCBzdXBwb3J0ZWQ/IElmIHNvLCB3ZSBjYW4gbGV0IGNhbnZhcyBkbwogICAgICAgICAgLy8gbmVhcmVzdC1uZWlnaGJvciBpbnRlcnBvbGF0aW9uIGZvciB1cy4KICAgICAgICAgIHZhciBzbW9vdGhpbmdQcm9wZXJ0eSA9IGdldENhbnZhc1Ntb290aGluZ1Byb3BlcnR5KGN0eCk7CgogICAgICAgICAgaWYgKHNtb290aGluZ1Byb3BlcnR5IHx8IGltZ1Jlcy54ID49IDI1NiAmJiBpbWdSZXMueSA+PSAyNTYpIHsKICAgICAgICAgICAgLy8gVXNlIGJ1aWx0LWluIHNjYWxpbmcKCiAgICAgICAgICAgIC8vIFR1cm4gb2ZmIGFudGktYWxpYXNpbmcgaWYgbmVjZXNzYXJ5CiAgICAgICAgICAgIGlmIChzbW9vdGhpbmdQcm9wZXJ0eSkgewogICAgICAgICAgICAgIGN0eFtzbW9vdGhpbmdQcm9wZXJ0eV0gPSBpbWdSZXMueCA+PSAyNTYgJiYgaW1nUmVzLnkgPj0gMjU2OwogICAgICAgICAgICB9CgogICAgICAgICAgICAvLyBEb24ndCBuZWNlc3NhcmlseSBkcmF3IHdpdGggdGhlIGZ1bGwtc2l6ZSBpbWFnZTsgaWYgd2UncmUKICAgICAgICAgICAgLy8gZG93bnNjYWxpbmcsIHVzZSB0aGUgbWlwbWFwcGVyIHRvIGdldCBhIHByZS1kb3duc2NhbGVkIGltYWdlCiAgICAgICAgICAgIC8vIChzZWUgY29tbWVudHMgb24gTWlwbWFwcGVyIGNsYXNzIGZvciB3aHkgdGhpcyBtYXR0ZXJzKS4KICAgICAgICAgICAgbWlwbWFwcGVyLmdldEJ5U2l6ZShleHRlbnQueCoyNTYsIGV4dGVudC55KjI1NiwgZnVuY3Rpb24obWlwKSB7CiAgICAgICAgICAgICAgLy8gSXQncyBwb3NzaWJsZSB0aGF0IHRoZSBpbWFnZSB3aWxsIGdvIG9mZiB0aGUgZWRnZSBvZiB0aGUgY2FudmFzLS0KICAgICAgICAgICAgICAvLyB0aGF0J3MgT0ssIHRoZSBjYW52YXMgc2hvdWxkIGNsaXAgYXBwcm9wcmlhdGVseS4KICAgICAgICAgICAgICBjdHguZHJhd0ltYWdlKG1pcCwKICAgICAgICAgICAgICAgIC8vIENvbnZlcnQgYWJzIHRpbGUgY29vcmRzIHRvIHJlbCB0aWxlIGNvb3JkcywgdGhlbiAqMjU2IHRvIGNvbnZlcnQKICAgICAgICAgICAgICAgIC8vIHRvIHJlbCBwaXhlbCBjb29yZHMKICAgICAgICAgICAgICAgICh0b3BMZWZ0LnggLSB0aWxlUG9pbnQueCkgKiAyNTYsCiAgICAgICAgICAgICAgICAodG9wTGVmdC55IC0gdGlsZVBvaW50LnkpICogMjU2LAogICAgICAgICAgICAgICAgLy8gQWx3YXlzIGRyYXcgdGhlIHdob2xlIHRoaW5nIGFuZCBsZXQgY2FudmFzIGNsaXA7IHNvIHdlIGNhbiBqdXN0CiAgICAgICAgICAgICAgICAvLyBjb252ZXJ0IGZyb20gc2l6ZSBpbiB0aWxlIGNvb3JkcyBzdHJhaWdodCB0byBwaXhlbHMKICAgICAgICAgICAgICAgIGV4dGVudC54ICogMjU2LAogICAgICAgICAgICAgICAgZXh0ZW50LnkgKiAyNTYKICAgICAgICAgICAgICApOwogICAgICAgICAgICB9KTsKCiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAvLyBVc2UgbWFudWFsIG5lYXJlc3QtbmVpZ2hib3IgaW50ZXJwb2xhdGlvbgoKICAgICAgICAgICAgLy8gQ2FsY3VsYXRlIHRoZSBzb3VyY2UgaW1hZ2UgcGl4ZWwgY29vcmRpbmF0ZXMgdGhhdCBjb3JyZXNwb25kIHdpdGgKICAgICAgICAgICAgLy8gdGhlIHRvcC1sZWZ0IGFuZCBib3R0b20tcmlnaHQgb2YgdGhpcyB0aWxlLiAoSWYgdGhlIHNvdXJjZSBpbWFnZQogICAgICAgICAgICAvLyBvbmx5IHBhcnRpYWxseSBvdmVybGFwcyB0aGUgdGlsZSwgd2UgdXNlIG1heC9taW4gdG8gbGltaXQgdGhlCiAgICAgICAgICAgIC8vIHNvdXJjZVN0YXJ0L0VuZCB0byBvbmx5IHJlZmxlY3QgdGhlIG92ZXJsYXBwaW5nIHBvcnRpb24uKQogICAgICAgICAgICB2YXIgc291cmNlU3RhcnQgPSB7CiAgICAgICAgICAgICAgeDogTWF0aC5tYXgoMCwgTWF0aC5mbG9vcigodGlsZVBvaW50LnggLSB0b3BMZWZ0LngpICogaW1nUmVzLngpKSwKICAgICAgICAgICAgICB5OiBNYXRoLm1heCgwLCBNYXRoLmZsb29yKCh0aWxlUG9pbnQueSAtIHRvcExlZnQueSkgKiBpbWdSZXMueSkpCiAgICAgICAgICAgIH07CiAgICAgICAgICAgIHZhciBzb3VyY2VFbmQgPSB7CiAgICAgICAgICAgICAgeDogTWF0aC5taW4odywgTWF0aC5jZWlsKCh0aWxlUG9pbnQueCArIDEgLSB0b3BMZWZ0LngpICogaW1nUmVzLngpKSwKICAgICAgICAgICAgICB5OiBNYXRoLm1pbihoLCBNYXRoLmNlaWwoKHRpbGVQb2ludC55ICsgMSAtIHRvcExlZnQueSkgKiBpbWdSZXMueSkpCiAgICAgICAgICAgIH07CgogICAgICAgICAgICAvLyBUaGUgc2l6ZSwgaW4gZGVzdCBwaXhlbHMsIHRoYXQgZWFjaCBzb3VyY2UgcGl4ZWwgc2hvdWxkIG9jY3VweS4KICAgICAgICAgICAgLy8gVGhpcyBtaWdodCBiZSBncmVhdGVyIG9yIGxlc3MgdGhhbiAxIChlLmcuIGlmIHggYW5kIHkgcmVzb2x1dGlvbgogICAgICAgICAgICAvLyBhcmUgdmVyeSBkaWZmZXJlbnQpLgogICAgICAgICAgICB2YXIgcGl4ZWxTaXplID0gewogICAgICAgICAgICAgIHg6IDI1NiAvIGltZ1Jlcy54LAogICAgICAgICAgICAgIHk6IDI1NiAvIGltZ1Jlcy55CiAgICAgICAgICAgIH07CgogICAgICAgICAgICAvLyBGb3IgZWFjaCBwaXhlbCBpbiB0aGUgc291cmNlIGltYWdlIHRoYXQgb3ZlcmxhcHMgdGhlIHRpbGUuLi4KICAgICAgICAgICAgZm9yICh2YXIgcm93ID0gc291cmNlU3RhcnQueTsgcm93IDwgc291cmNlRW5kLnk7IHJvdysrKSB7CiAgICAgICAgICAgICAgZm9yICh2YXIgY29sID0gc291cmNlU3RhcnQueDsgY29sIDwgc291cmNlRW5kLng7IGNvbCsrKSB7CiAgICAgICAgICAgICAgICAvLyAuLi5leHRyYWN0IHRoZSBwaXhlbCBkYXRhLi4uCiAgICAgICAgICAgICAgICB2YXIgaSA9ICgocm93ICogdykgKyBjb2wpICogNDsKICAgICAgICAgICAgICAgIHZhciByID0gaW1nRGF0YVtpXTsKICAgICAgICAgICAgICAgIHZhciBnID0gaW1nRGF0YVtpKzFdOwogICAgICAgICAgICAgICAgdmFyIGIgPSBpbWdEYXRhW2krMl07CiAgICAgICAgICAgICAgICB2YXIgYSA9IGltZ0RhdGFbaSszXTsKICAgICAgICAgICAgICAgIGN0eC5maWxsU3R5bGUgPSAicmdiYSgiICsgW3IsZyxiLGEvMjU1XS5qb2luKCIsIikgKyAiKSI7CgogICAgICAgICAgICAgICAgLy8gLi4uY2FsY3VsYXRlIHRoZSBjb3JyZXNwb25kaW5nIHBpeGVsIGNvb3JkIGluIHRoZSBkZXN0IGltYWdlCiAgICAgICAgICAgICAgICAvLyB3aGVyZSBpdCBzaG91bGQgYmUgZHJhd24uLi4KICAgICAgICAgICAgICAgIHZhciBwaXhlbFBvcyA9IHsKICAgICAgICAgICAgICAgICAgeDogKCgoY29sIC8gaW1nUmVzLngpICsgdG9wTGVmdC54KSAtIHRpbGVQb2ludC54KSAqIDI1NiwKICAgICAgICAgICAgICAgICAgeTogKCgocm93IC8gaW1nUmVzLnkpICsgdG9wTGVmdC55KSAtIHRpbGVQb2ludC55KSAqIDI1NgogICAgICAgICAgICAgICAgfTsKCiAgICAgICAgICAgICAgICAvLyAuLi5hbmQgZHJhdyBhIHJlY3RhbmdsZSB0aGVyZS4KICAgICAgICAgICAgICAgIGN0eC5maWxsUmVjdCgKICAgICAgICAgICAgICAgICAgTWF0aC5yb3VuZChwaXhlbFBvcy54KSwKICAgICAgICAgICAgICAgICAgTWF0aC5yb3VuZChwaXhlbFBvcy55KSwKICAgICAgICAgICAgICAgICAgLy8gTG9va3MgY3JhenksIGJ1dCB0aGlzIGlzIG5lY2Vzc2FyeSB0byBwcmV2ZW50IHJvdW5kaW5nIGZyb20KICAgICAgICAgICAgICAgICAgLy8gY2F1c2luZyBvdmVybGFwIGJldHdlZW4gdGhpcyByZWN0IGFuZCBpdHMgbmVpZ2hib3JzLiBUaGUKICAgICAgICAgICAgICAgICAgLy8gbWludWVuZCBpcyB0aGUgbG9jYXRpb24gb2YgdGhlIG5leHQgcGl4ZWwsIHdoaWxlIHRoZQogICAgICAgICAgICAgICAgICAvLyBzdWJ0cmFoZW5kIGlzIHRoZSBwb3NpdGlvbiBvZiB0aGUgY3VycmVudCBwaXhlbCAodG8gdHVybiBhbgogICAgICAgICAgICAgICAgICAvLyBhYnNvbHV0ZSBjb29yZGluYXRlIHRvIGEgd2lkdGgvaGVpZ2h0KS4gWWVzLCBJIGhhZCB0byBsb29rCiAgICAgICAgICAgICAgICAgIC8vIHVwIG1pbnVlbmQgYW5kIHN1YnRyYWhlbmQuCiAgICAgICAgICAgICAgICAgIE1hdGgucm91bmQocGl4ZWxQb3MueCArIHBpeGVsU2l6ZS54KSAtIE1hdGgucm91bmQocGl4ZWxQb3MueCksCiAgICAgICAgICAgICAgICAgIE1hdGgucm91bmQocGl4ZWxQb3MueSArIHBpeGVsU2l6ZS55KSAtIE1hdGgucm91bmQocGl4ZWxQb3MueSkpOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0gZmluYWxseSB7CiAgICAgICAgICBjYW52YXNUaWxlcy50aWxlRHJhd24oY2FudmFzKTsKICAgICAgICB9CiAgICAgIH0pOwogICAgfTsKCiAgICB0aGlzLmxheWVyTWFuYWdlci5hZGRMYXllcihjYW52YXNUaWxlcywgImltYWdlIiwgbGF5ZXJJZCwgZ3JvdXApOwogIH07CgogIG1ldGhvZHMucmVtb3ZlSW1hZ2UgPSBmdW5jdGlvbihsYXllcklkKSB7CiAgICB0aGlzLmxheWVyTWFuYWdlci5yZW1vdmVMYXllcigiaW1hZ2UiLCBsYXllcklkKTsKICB9OwoKICBtZXRob2RzLmNsZWFySW1hZ2VzID0gZnVuY3Rpb24oKSB7CiAgICB0aGlzLmxheWVyTWFuYWdlci5jbGVhckxheWVycygiaW1hZ2UiKTsKICB9OwoKICBtZXRob2RzLmFkZE1lYXN1cmUgPSBmdW5jdGlvbihvcHRpb25zKXsKICAgIC8vIGlmIGEgbWVhc3VyZUNvbnRyb2wgYWxyZWFkeSBleGlzdHMsIHRoZW4gcmVtb3ZlIGl0IGFuZAogICAgLy8gICByZXBsYWNlIHdpdGggYSBuZXcgb25lCiAgICBpZih0aGlzLm1lYXN1cmVDb250cm9sKSB7CiAgICAgIHRoaXMubWVhc3VyZUNvbnRyb2wucmVtb3ZlRnJvbSggdGhpcyApOwogICAgfQogICAgdGhpcy5tZWFzdXJlQ29udHJvbCA9IEwuY29udHJvbC5tZWFzdXJlKG9wdGlvbnMpOwogICAgdGhpcy5tZWFzdXJlQ29udHJvbC5hZGRUbyh0aGlzKTsKICB9OwoKICBtZXRob2RzLnJlbW92ZU1lYXN1cmUgPSBmdW5jdGlvbiggKXsKICAgIHRoaXMubWVhc3VyZUNvbnRyb2wucmVtb3ZlRnJvbSggdGhpcyApOwogICAgZGVsZXRlIHRoaXMubWVhc3VyZUNvbnRyb2w7CiAgfQoKICBmdW5jdGlvbiBwcmV2ZW50VW5pbnRlbmRlZFpvb21PblNjcm9sbChtYXApIHsKICAgIC8vIFByZXZlbnQgdW53YW50ZWQgc2Nyb2xsIGNhcHR1cmluZy4gU2ltaWxhciBpbiBwdXJwb3NlIHRvCiAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vQ2xpZmZDbG91ZC9MZWFmbGV0LlNsZWVwIGJ1dCB3aXRoIGEKICAgIC8vIGRpZmZlcmVudCBzZXQgb2YgaGV1cmlzdGljcy4KCiAgICAvLyBUaGUgYmFzaWMgaWRlYSBpcyB0aGF0IHdoZW4gYSBtb3VzZXdoZWVsL0RPTU1vdXNlU2Nyb2xsCiAgICAvLyBldmVudCBpcyBzZWVuLCB3ZSBkaXNhYmxlIHNjcm9sbCB3aGVlbCB6b29taW5nIHVudGlsIHRoZQogICAgLy8gdXNlciBtb3ZlcyB0aGVpciBtb3VzZSBjdXJzb3Igb3IgY2xpY2tzIG9uIHRoZSBtYXAuIFRoaXMKICAgIC8vIGlzIHNsaWdodGx5IHRyaWNraWVyIHRoYW4ganVzdCBsaXN0ZW5pbmcgZm9yIG1vdXNlbW92ZSwKICAgIC8vIGJlY2F1c2UgbW91c2Vtb3ZlIGlzIGZpcmVkIHdoZW4gdGhlIHBhZ2UgaXMgc2Nyb2xsZWQsCiAgICAvLyBldmVuIGlmIHRoZSB1c2VyIGRpZCBub3QgcGh5c2ljYWxseSBtb3ZlIHRoZSBtb3VzZS4gV2UKICAgIC8vIGhhbmRsZSB0aGlzIGJ5IGV4YW1pbmluZyB0aGUgbW91c2Vtb3ZlIGV2ZW50J3Mgc2NyZWVuWAogICAgLy8gYW5kIHNjcmVlblkgcHJvcGVydGllczsgaWYgdGhleSBjaGFuZ2UsIHdlIGtub3cgaXQncyBhCiAgICAvLyAidHJ1ZSIgbW92ZS4KCiAgICAvLyBsYXN0U2NyZWVuIGNhbiBuZXZlciBiZSBudWxsLCBidXQgaXRzIHggYW5kIHkgY2FuLgogICAgdmFyIGxhc3RTY3JlZW4gPSB7eDogbnVsbCwgeTogbnVsbH07CiAgICAkKGRvY3VtZW50KS5vbigibW91c2V3aGVlbCBET01Nb3VzZVNjcm9sbCIsICIqIiwgZnVuY3Rpb24oZSkgewogICAgICAvLyBEaXNhYmxlIHpvb21pbmcgKHVudGlsIHRoZSBtb3VzZSBtb3ZlcyBvciBjbGljaykKICAgICAgbWFwLnNjcm9sbFdoZWVsWm9vbS5kaXNhYmxlKCk7CiAgICAgIC8vIEFueSBtb3VzZW1vdmUgZXZlbnRzIGF0IHRoaXMgc2NyZWVuIHBvc2l0aW9uIHdpbGwgYmUgaWdub3JlZC4KICAgICAgbGFzdFNjcmVlbiA9IHt4OiBlLm9yaWdpbmFsRXZlbnQuc2NyZWVuWCwgeTogZS5vcmlnaW5hbEV2ZW50LnNjcmVlbll9OwogICAgfSk7CiAgICAkKGRvY3VtZW50KS5vbigibW91c2Vtb3ZlIiwgIioiLCBmdW5jdGlvbihlKSB7CiAgICAgIC8vIERpZCB0aGUgbW91c2UgcmVhbGx5IG1vdmU/CiAgICAgIGlmIChsYXN0U2NyZWVuLnggIT09IG51bGwgJiYgZS5zY3JlZW5YICE9PSBsYXN0U2NyZWVuLnggfHwgZS5zY3JlZW5ZICE9PSBsYXN0U2NyZWVuLnkpIHsKICAgICAgICAvLyBJdCByZWFsbHkgbW92ZWQuIEVuYWJsZSB6b29taW5nLgogICAgICAgIG1hcC5zY3JvbGxXaGVlbFpvb20uZW5hYmxlKCk7CiAgICAgICAgbGFzdFNjcmVlbiA9IHt4OiBudWxsLCB5OiBudWxsfTsKICAgICAgfQogICAgfSk7CiAgICAkKGRvY3VtZW50KS5vbigibW91c2Vkb3duIiwgIi5sZWFmbGV0IiwgZnVuY3Rpb24oZSkgewogICAgICAvLyBDbGlja2luZyBhbHdheXMgZW5hYmxlcyB6b29taW5nLgogICAgICBtYXAuc2Nyb2xsV2hlZWxab29tLmVuYWJsZSgpOwogICAgICBsYXN0U2NyZWVuID0ge3g6IG51bGwsIHk6IG51bGx9OwogICAgfSk7CiAgfQoKICBIVE1MV2lkZ2V0cy53aWRnZXQoewogICAgbmFtZTogImxlYWZsZXQiLAogICAgdHlwZTogIm91dHB1dCIsCiAgICBpbml0aWFsaXplOiBmdW5jdGlvbihlbCwgd2lkdGgsIGhlaWdodCkgewogICAgICAvLyBoYXJkLWNvZGluZyBjZW50ZXIvem9vbSBoZXJlIGZvciBhIG5vbi1lbXB0eSBpbml0aWFsIHZpZXcsIHNpbmNlIHRoZXJlCiAgICAgIC8vIGlzIG5vIHdheSBmb3IgaHRtbHdpZGdldHMgdG8gcGFzcyBpbml0aWFsIHBhcmFtcyB0byBpbml0aWFsaXplKCkKICAgICAgdmFyIG1hcCA9IEwubWFwKGVsLCB7CiAgICAgICAgY2VudGVyOiBbNTEuNTA1LCAtMC4wOV0sCiAgICAgICAgem9vbTogMTMKICAgICAgfSk7CgogICAgICBwcmV2ZW50VW5pbnRlbmRlZFpvb21PblNjcm9sbChtYXApOwoKICAgICAgLy8gU3RvcmUgc29tZSBzdGF0ZSBpbiB0aGUgbWFwIG9iamVjdAogICAgICBtYXAubGVhZmxldHIgPSB7CiAgICAgICAgLy8gSGFzIHRoZSBtYXAgZXZlciByZW5kZXJlZCBzdWNjZXNzZnVsbHk/CiAgICAgICAgaGFzUmVuZGVyZWQ6IGZhbHNlLAogICAgICAgIC8vIERhdGEgdG8gYmUgcmVuZGVyZWQgd2hlbiByZXNpemUgaXMgY2FsbGVkIHdpdGggYXJlYSAhPSAwCiAgICAgICAgcGVuZGluZ1JlbmRlckRhdGE6IG51bGwKICAgICAgfTsKCiAgICAgIGlmICghSFRNTFdpZGdldHMuc2hpbnlNb2RlKSByZXR1cm4gbWFwOwoKICAgICAgLy8gQ2hlY2sgaWYgdGhlIG1hcCBpcyByZW5kZXJlZCBzdGF0aWNhbGx5IChubyBvdXRwdXQgYmluZGluZykKICAgICAgaWYgKCEvXGJzaGlueS1ib3VuZC1vdXRwdXRcYi8udGVzdChlbC5jbGFzc05hbWUpKSByZXR1cm4gbWFwOwoKICAgICAgbWFwLmlkID0gZWwuaWQ7CgogICAgICAvLyBTdG9yZSB0aGUgbWFwIG9uIHRoZSBlbGVtZW50IHNvIHdlIGNhbiBmaW5kIGl0IGxhdGVyIGJ5IElECiAgICAgICQoZWwpLmRhdGEoImxlYWZsZXQtbWFwIiwgbWFwKTsKCiAgICAgIC8vIFdoZW4gdGhlIG1hcCBpcyBjbGlja2VkLCBzZW5kIHRoZSBjb29yZGluYXRlcyBiYWNrIHRvIHRoZSBhcHAKICAgICAgbWFwLm9uKCdjbGljaycsIGZ1bmN0aW9uKGUpIHsKICAgICAgICBTaGlueS5vbklucHV0Q2hhbmdlKG1hcC5pZCArICdfY2xpY2snLCB7CiAgICAgICAgICBsYXQ6IGUubGF0bG5nLmxhdCwKICAgICAgICAgIGxuZzogZS5sYXRsbmcubG5nLAogICAgICAgICAgJy5ub25jZSc6IE1hdGgucmFuZG9tKCkgLy8gRm9yY2UgcmVhY3Rpdml0eSBpZiBsYXQvbG5nIGhhc24ndCBjaGFuZ2VkCiAgICAgICAgfSk7CiAgICAgIH0pOwoKICAgICAgdmFyIGdyb3VwVGltZXJJZCA9IG51bGw7CgogICAgICBtYXAKICAgICAgICAub24oJ21vdmVlbmQnLCBmdW5jdGlvbihlKSB7IHVwZGF0ZUJvdW5kcyhlLnRhcmdldCk7IH0pCiAgICAgICAgLm9uKCdsYXllcmFkZCBsYXllcnJlbW92ZScsIGZ1bmN0aW9uKGUpIHsKICAgICAgICAgIC8vIElmIHRoZSBsYXllciB0aGF0J3MgY29taW5nIG9yIGdvaW5nIGlzIGEgZ3JvdXAgd2UgY3JlYXRlZCwgdGVsbAogICAgICAgICAgLy8gdGhlIHNlcnZlci4KICAgICAgICAgIGlmIChtYXAubGF5ZXJNYW5hZ2VyLmdldEdyb3VwTmFtZUZyb21MYXllckdyb3VwKGUubGF5ZXIpKSB7CiAgICAgICAgICAgIC8vIEJ1dCB0byBhdm9pZCBjaGF0dGluZXNzLCBjb2FsZXNjZSBldmVudHMKICAgICAgICAgICAgaWYgKGdyb3VwVGltZXJJZCkgewogICAgICAgICAgICAgIGNsZWFyVGltZW91dChncm91cFRpbWVySWQpOwogICAgICAgICAgICAgIGdyb3VwVGltZXJJZCA9IG51bGw7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZ3JvdXBUaW1lcklkID0gc2V0VGltZW91dChmdW5jdGlvbigpIHsKICAgICAgICAgICAgICBncm91cFRpbWVySWQgPSBudWxsOwogICAgICAgICAgICAgIFNoaW55Lm9uSW5wdXRDaGFuZ2UobWFwLmlkICsgJ19ncm91cHMnLAogICAgICAgICAgICAgICAgbWFwLmxheWVyTWFuYWdlci5nZXRWaXNpYmxlR3JvdXBzKCkpOwogICAgICAgICAgICB9LCAxMDApOwogICAgICAgICAgfQogICAgICAgIH0pOwoKICAgICAgcmV0dXJuIG1hcDsKICAgIH0sCiAgICByZW5kZXJWYWx1ZTogZnVuY3Rpb24oZWwsIGRhdGEsIG1hcCkgewogICAgICByZXR1cm4gdGhpcy5kb1JlbmRlclZhbHVlKGVsLCBkYXRhLCBtYXApOwogICAgfSwKICAgIGRvUmVuZGVyVmFsdWU6IGZ1bmN0aW9uKGVsLCBkYXRhLCBtYXApIHsKICAgICAgLy8gTGVhZmxldCBkb2VzIG5vdCBiZWhhdmUgd2VsbCB3aGVuIHlvdSBzZXQgdXAgYSBidW5jaCBvZiBsYXllcnMgd2hlbgogICAgICAvLyB0aGUgbWFwIGlzIG5vdCB2aXNpYmxlICh3aWR0aC9oZWlnaHQgPT0gMCkuIFBvcHVwcyBnZXQgbWlzYWxpZ25lZAogICAgICAvLyByZWxhdGl2ZSB0byB0aGVpciBvd25pbmcgbWFya2VycywgYW5kIHRoZSBmaXRCb3VuZHMgY2FsY3VsYXRpb25zCiAgICAgIC8vIGFyZSBvZmYuIFRoZXJlZm9yZSB3ZSB3YWl0IHVudGlsIHRoZSBtYXAgaXMgYWN0dWFsbHkgc2hvd2luZyB0bwogICAgICAvLyByZW5kZXIgdGhlIHZhbHVlICh3ZSByZWx5IG9uIHRoZSByZXNpemUoKSBjYWxsYmFjayBiZWluZyBpbnZva2VkCiAgICAgIC8vIGF0IHRoZSBhcHByb3ByaWF0ZSB0aW1lKS4KICAgICAgLy8KICAgICAgLy8gVGhlcmUgbWF5IGJlIGFuIGlzc3VlIHdpdGggbGVhZmxldFByb3h5KCkgY2FsbHMgYmVpbmcgbWFkZSB3aGlsZQogICAgICAvLyB0aGUgbWFwIGlzIG5vdCBiZWluZyB2aWV3ZWQtLW5vdCBzdXJlIHdoYXQgdGhlIHJpZ2h0IHNvbHV0aW9uIGlzCiAgICAgIC8vIHRoZXJlLgogICAgICBpZiAoZWwub2Zmc2V0V2lkdGggPT09IDAgfHwgZWwub2Zmc2V0SGVpZ2h0ID09PSAwKSB7CiAgICAgICAgbWFwLmxlYWZsZXRyLnBlbmRpbmdSZW5kZXJEYXRhID0gZGF0YTsKICAgICAgICByZXR1cm47CiAgICAgIH0KICAgICAgbWFwLmxlYWZsZXRyLnBlbmRpbmdSZW5kZXJEYXRhID0gbnVsbDsKCiAgICAgIC8vIE1lcmdlIGRhdGEgb3B0aW9ucyBpbnRvIGRlZmF1bHRzCiAgICAgIHZhciBvcHRpb25zID0gJC5leHRlbmQoeyB6b29tVG9MaW1pdHM6ICJhbHdheXMiIH0sIGRhdGEub3B0aW9ucyk7CgogICAgICBpZiAoIW1hcC5sYXllck1hbmFnZXIpIHsKICAgICAgICBtYXAuY29udHJvbHMgPSBuZXcgQ29udHJvbFN0b3JlKG1hcCk7CiAgICAgICAgbWFwLmxheWVyTWFuYWdlciA9IG5ldyBMYXllck1hbmFnZXIobWFwKTsKICAgICAgfSBlbHNlIHsKICAgICAgICBtYXAuY29udHJvbHMuY2xlYXIoKTsKICAgICAgICBtYXAubGF5ZXJNYW5hZ2VyLmNsZWFyKCk7CiAgICAgIH0KCiAgICAgIHZhciBleHBsaWNpdFZpZXcgPSBmYWxzZTsKICAgICAgaWYgKGRhdGEuc2V0VmlldykgewogICAgICAgIGV4cGxpY2l0VmlldyA9IHRydWU7CiAgICAgICAgbWFwLnNldFZpZXcuYXBwbHkobWFwLCBkYXRhLnNldFZpZXcpOwogICAgICB9CiAgICAgIGlmIChkYXRhLmZpdEJvdW5kcykgewogICAgICAgIGV4cGxpY2l0VmlldyA9IHRydWU7CiAgICAgICAgbWV0aG9kcy5maXRCb3VuZHMuYXBwbHkobWFwLCBkYXRhLmZpdEJvdW5kcyk7CiAgICAgIH0KCiAgICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgem9vbVRvTGltaXRzIG9wdGlvbiBzYXlzIHRoYXQgdGhlIG1hcCBzaG91bGQgYmUKICAgICAgLy8gem9vbWVkIHRvIG1hcCBlbGVtZW50cy4KICAgICAgZnVuY3Rpb24gbmVlZHNab29tKCkgewogICAgICAgIHJldHVybiBvcHRpb25zLnpvb21Ub0xpbWl0cyA9PT0gImFsd2F5cyIgfHwKICAgICAgICAgICAgICAgKG9wdGlvbnMuem9vbVRvTGltaXRzID09PSAiZmlyc3QiICYmICFtYXAubGVhZmxldHIuaGFzUmVuZGVyZWQpOwogICAgICB9CgogICAgICBpZiAoIWV4cGxpY2l0VmlldyAmJiBuZWVkc1pvb20oKSkgewogICAgICAgIGlmIChkYXRhLmxpbWl0cykgewogICAgICAgICAgLy8gVXNlIHRoZSBuYXR1cmFsIGxpbWl0cyBvZiB3aGF0J3MgYmVpbmcgZHJhd24gb24gdGhlIG1hcAogICAgICAgICAgLy8gSWYgdGhlIHNpemUgb2YgdGhlIGJvdW5kaW5nIGJveCBpcyAwLCBsZWFmbGV0IGdldHMgYWxsIHdlaXJkCiAgICAgICAgICB2YXIgcGFkID0gMC4wMDY7CiAgICAgICAgICBpZiAoZGF0YS5saW1pdHMubGF0WzBdID09PSBkYXRhLmxpbWl0cy5sYXRbMV0pIHsKICAgICAgICAgICAgZGF0YS5saW1pdHMubGF0WzBdID0gZGF0YS5saW1pdHMubGF0WzBdIC0gcGFkOwogICAgICAgICAgICBkYXRhLmxpbWl0cy5sYXRbMV0gPSBkYXRhLmxpbWl0cy5sYXRbMV0gKyBwYWQ7CiAgICAgICAgICB9CiAgICAgICAgICBpZiAoZGF0YS5saW1pdHMubG5nWzBdID09PSBkYXRhLmxpbWl0cy5sbmdbMV0pIHsKICAgICAgICAgICAgZGF0YS5saW1pdHMubG5nWzBdID0gZGF0YS5saW1pdHMubG5nWzBdIC0gcGFkOwogICAgICAgICAgICBkYXRhLmxpbWl0cy5sbmdbMV0gPSBkYXRhLmxpbWl0cy5sbmdbMV0gKyBwYWQ7CiAgICAgICAgICB9CiAgICAgICAgICBtYXAuZml0Qm91bmRzKFsKICAgICAgICAgICAgWyBkYXRhLmxpbWl0cy5sYXRbMF0sIGRhdGEubGltaXRzLmxuZ1swXSBdLAogICAgICAgICAgICBbIGRhdGEubGltaXRzLmxhdFsxXSwgZGF0YS5saW1pdHMubG5nWzFdIF0KICAgICAgICAgIF0pOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBtYXAuZml0V29ybGQoKTsKICAgICAgICB9CiAgICAgIH0KCiAgICAgIGZvciAodmFyIGkgPSAwOyBkYXRhLmNhbGxzICYmIGkgPCBkYXRhLmNhbGxzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgdmFyIGNhbGwgPSBkYXRhLmNhbGxzW2ldOwogICAgICAgIGlmIChtZXRob2RzW2NhbGwubWV0aG9kXSkKICAgICAgICAgIG1ldGhvZHNbY2FsbC5tZXRob2RdLmFwcGx5KG1hcCwgY2FsbC5hcmdzKTsKICAgICAgICBlbHNlCiAgICAgICAgICBjb25zb2xlLmxvZygiVW5rbm93biBtZXRob2QgIiArIGNhbGwubWV0aG9kKTsKICAgICAgfQoKICAgICAgbWFwLmxlYWZsZXRyLmhhc1JlbmRlcmVkID0gdHJ1ZTsKCiAgICAgIGlmICghSFRNTFdpZGdldHMuc2hpbnlNb2RlKSByZXR1cm47CgogICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkgeyB1cGRhdGVCb3VuZHMobWFwKTsgfSwgMSk7CiAgICB9LAogICAgcmVzaXplOiBmdW5jdGlvbihlbCwgd2lkdGgsIGhlaWdodCwgbWFwKSB7CiAgICAgIG1hcC5pbnZhbGlkYXRlU2l6ZSgpOwogICAgICBpZiAobWFwLmxlYWZsZXRyLnBlbmRpbmdSZW5kZXJEYXRhKSB7CiAgICAgICAgdGhpcy5kb1JlbmRlclZhbHVlKGVsLCBtYXAubGVhZmxldHIucGVuZGluZ1JlbmRlckRhdGEsIG1hcCk7CiAgICAgIH0KICAgIH0KICB9KTsKCiAgaWYgKCFIVE1MV2lkZ2V0cy5zaGlueU1vZGUpIHJldHVybjsKCiAgU2hpbnkuYWRkQ3VzdG9tTWVzc2FnZUhhbmRsZXIoJ2xlYWZsZXQtY2FsbHMnLCBmdW5jdGlvbihkYXRhKSB7CiAgICB2YXIgaWQgPSBkYXRhLmlkOwogICAgdmFyIGVsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpOwogICAgdmFyIG1hcCA9IGVsID8gJChlbCkuZGF0YSgnbGVhZmxldC1tYXAnKSA6IG51bGw7CiAgICBpZiAoIW1hcCkgewogICAgICBjb25zb2xlLmxvZygiQ291bGRuJ3QgZmluZCBtYXAgd2l0aCBpZCAiICsgaWQpOwogICAgICByZXR1cm47CiAgICB9CgogICAgZm9yICh2YXIgaSA9IDA7IGkgPCBkYXRhLmNhbGxzLmxlbmd0aDsgaSsrKSB7CiAgICAgIHZhciBjYWxsID0gZGF0YS5jYWxsc1tpXTsKICAgICAgaWYgKGNhbGwuZGVwZW5kZW5jaWVzKSB7CiAgICAgICAgU2hpbnkucmVuZGVyRGVwZW5kZW5jaWVzKGNhbGwuZGVwZW5kZW5jaWVzKTsKICAgICAgfQogICAgICBpZiAobWV0aG9kc1tjYWxsLm1ldGhvZF0pCiAgICAgICAgbWV0aG9kc1tjYWxsLm1ldGhvZF0uYXBwbHkobWFwLCBjYWxsLmFyZ3MpOwogICAgICBlbHNlCiAgICAgICAgY29uc29sZS5sb2coIlVua25vd24gbWV0aG9kICIgKyBjYWxsLm1ldGhvZCk7CiAgICB9CiAgfSk7Cgp9KSgpOwoKCgovLyBJbiBSTWFya2Rvd24ncyBzZWxmLWNvbnRhaW5lZCBtb2RlLCB3ZSBkb24ndCBoYXZlIGEgd2F5IHRvIGNhcnJ5IGFyb3VuZCB0aGUKLy8gaW1hZ2VzIHRoYXQgTGVhZmxldCBuZWVkcyBidXQgZG9lc24ndCBsb2FkIGludG8gdGhlIHBhZ2UuIEluc3RlYWQsIHdlJ2xsIHNldAovLyBkYXRhIFVSSXMgZm9yIHRoZSBkZWZhdWx0IG1hcmtlciwgYW5kIGxldCBhbnkgb3RoZXJzIGJlIGxvYWRlZCB2aWEgQ0ROLgppZiAodHlwZW9mKEwuSWNvbi5EZWZhdWx0LmltYWdlUGF0aCkgPT09ICJ1bmRlZmluZWQiKSB7CiAgTC5JY29uLkRlZmF1bHQuaW1hZ2VQYXRoID0gImh0dHA6Ly9jZG4ubGVhZmxldGpzLmNvbS9sZWFmbGV0LTAuNy4zL2ltYWdlcyI7CgogIGlmIChMLkJyb3dzZXIucmV0aW5hKSB7CiAgICBMLkljb24uRGVmYXVsdC5wcm90b3R5cGUub3B0aW9ucy5pY29uVXJsID0gImRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBRElBQUFCU0NBWUFBQUFXeTRmckFBQVBpRWxFUVZSNDJ0MWJDVkNVNXhrbWJhYnRaSkpPTytsMG1oZ1QweVFlMFdYWmd6MjU3ME5COEk2SjZVemFUQm9PUlJGRXJ1VkdEaFdVUFJBUVJGRlJFRG5WeEN0RUJSYjI0REJORTNXYWFhdHBrbWx1bzRtK2ZkOXY5OTlvbEdWQkR1M09QTGorLy9zKzcvVzkzL2Y5Ly82L0V3QTQvVDlnM0FsRk9VZWVVR1IydU1xek95SmsyUjJ4MHF5T0Ftbm1rUzNTckNQclpKbEhsc3F6anlwY3M0OU9YMUpmLy9QN0toRDg4NUEwdTEwbXkyb3ZRc2N2eWJJNndFRjhpdkk3cEZudEFWNnFrdzlQV1NCSzFiRW5aUmx0bTJXWjdSOGg0RmJJMFZHMzNHUGdYWGdDQXJhK0E0RUluOEtUNEpIL0ZpZ29pSi9JSXo2VFpiVlZLTExhbjV1MFFFU3Fsa2NrV1czcDBzeTJieERBZ1p3TzEzVER5dG9CK05QZTkremlsZDJERUZHdUI3L05wekRvZHJpRjU1bzBvN1hJUlhYb054TWFpQ1NqOVZVMDlDOEVFTnh5ajBDNHRodGVyaDJFVit2ZXV3T3I2czdEeTNzc29POTNrM2xsenhCRTZQVGdrWGNNT0Y3RUo5S010cWpSOUpGRFFuTlY5YitRcWxxcUVFQ1FaN1RCZ3UxbllkWHVJWGdWbmVTd1l0Y2dSRmIxUTFpRkdVTEx6UkNzTTkwR09yWmdoeGtpS3Z0aGVjMGdyTHBGbHhDdTZjS2gxdzZjSFVTYmN0UGh4OFlsRUVsdTQrTlNWZk5wQkJBQ3RweUdsYnNHbUJPRWxSaE1CRG9mZ2s0R29iT2pRWEM1Q1JaaVVDL1ZEdG40cUxyQkpaM0EyY05nK25FNFAzMVBnU0RCYkltcTVVTkplak1RRnFpN2NDaWNaM2laQlRBQVFWb1RCSTRES0tDVkdCREhINm5yQlJsV3hXcjdzbGpWSWhsVElETFZvUmtTMWVIL1NOSVBnenl6RlJaVjlObkcrK0xxUWN5b0dRTFFnZkZFSUZZcGN1ZUF6YzZTU2lNT3RUWWdIOUNYcitXcFRieFJCZUtscW45VWt0WmtSb0FDWjVQbE84MVlnZk1NNFJYOUVLQXhUU2pDZHZUakVMUFlXMTdkRDhyc2RpQmZFQmNsU1kyUE94UUlIbmxJa25yb0VBSms2VTJ3cE1MSVNGL2FOUVNoV0FWL3RXbFNFSUsyVnFCTnNyMjAwZ1J5R21Mb2t5UzE4Y1RkRnRBN0FuRk5iY3hBQUNHTXJRdERMQWpxQlQrMWNWSkJOc2syK2JCUTF3T2NYNUsweHMxMkE4R3l6WFJOYWZnZUFZRmIzbUVrckJJNEkvbVdHVWVOUUkxbHlwMlBvTzlqNGFES2NINEViZTBFOGczeGd5eWxjYzZ3Z2JpbU5qU1NvRnRXSzFzVHFMUmgyQk0rU09nSWZER0xKTDhJRzNaWmpVWC9WaXl2R1lMRk93ZFpuL2xqWUk3eXpzZWU0VGpjc1YvSVIzRnFRK3RkQXhFbk5TakZ5UWVCRUs3cGdSVm9kRW5WSVBoc056cUVZSzBabHVGc1JucTNZakgyMktKeUE2ejR5VG1TcFo1emxIOFJUdldrdDFDckI4NVBZVXFqengyQnVHNnNQeWZlZUFBOHNqdHdwaGhpQ0ZTYndYdWIwUzdJU1BpT0Fadk80aDA0OHhTZkJNK2NEcERpZUNaT2dnU3o2SkhkQnY1RkozQ042TFBKUjFRTWdPOTIwNGgyYUFMZ2REeHpqbHA0a3c4WWFIS3lCU0pKUGlnV2I2d0hRaVJtYnhrS0wwUURYa2hnRDk0WXhHS3NHc2tUUWt2ZnhWbmxJSEJjQk5ma2Vneml3QjNIQW5IRHVHeW5SWGNwL3V0WFpoclJIaVdNNUNQTGpiZHdIVkRZQWhGdDNKOHJUdG9QYnBrdFNEckU0SU5aOGl3MTJrVVlFcFBzNGtvemVPVzBBM0VRSW92YlljZnhJVGo3OTh2d3hiZlg0T3IxSDhCNDZST283ZndidktZOWJwTnp5MmhtaVNPT3lNckJFZTJSVDV4Lzd0akh4Q0ZLMmwvNFl5QkorOTVIUUFCbWliS3pFSnZSczlSZ0Y0RnFFNU1sZUdTM0F1bUxOKzZENGxZamZJZU9EL2U1ZVJPZzdzejdvRWc3d0hSazZZM1lpLzJNSndUN2JDUzc1QnZKQnVHc1N2cUlEMWdnYUh5ZWFBTWVRRVJneWFqQmczQkc4U2d4REFzdkpGeFVPY0JrZzdkME1sM1hqZnVoQ3l2ZzZPZml4MStBbDZxQjZmcHVlb3R4c2NrRmg1QTkyK1FieWRIdzR2eW1HSnhFRytyV2lSTDNnb0pXY1N3dndiUEVDTzViRGNNaVJHTm1jaFM0YTFJOWtQNjJEaE9NOXRQYWQ0bnBFaGFVZFRQT3NQSit1N2JKTjg1UHBhcUo2WW9UNnhLY1JJbDFwUWp3eEl1a3hYaHlJWTU3TjFTd2g3RHlBU2JybTM4TVNIZFJVU3RjKy80R2pPVVRWMzJhY2JobE5qTk82cFdSN0ZQVGs2eFgzbEdtSzB5czB6cmhuMFpod2g3d0szaWJuVnlnNndlM0xRYTdXRlF4eUdTcGlxUmJlL284alBYVGUrRUs0eERqRUNIT3hkWVJZYzgrK1VoeWZnWEhtYTV3L1o1bUorSDYzVDNDaE4zWTZPL2d1TWN4ajhOR2ljTERnWXlRM0NLY25zVWJNQnVvYTdqNDhaZ0QrZXJxZGN6cWJzWVRwdWxqM0xTdTJQT0JmQ1E1OHBuMEVIMU93b1RhZnd2WDErSlYyVm1JeEV3SGxKbEJzZGt3TEh5Mm1aamNnakk5a0o0WW5iaDYvWHU0bDA5WWZoUGpDc1NKZzdocEliYm5nLzkyTTVNam4wa1BjZGxKR0YvN0pRSkNTcnNnQXNlZUh6b3FMKzRiRm5TZTVFSkt6Z0hwZWFUc2czdjlyQ3J0WUZ6K2hTY1pkekFHWXM4SFg4NEg5Sm4wS0FZblFmeXVJUVQ0WTVtbzBha2lNaFFlRGg0NHRFZ3VYR2NFMGlQODQ1TXZ4eHpFalJzM1FaNVV4M2hDdG5VeGJxcTZQUi84Y1JkQWN1U3oxWWZ6R0VoTm0yQmREZmprdncwTGNUWUtva0NLK29hRkFvbElqaURGQllsMDIvb3VqRG1RQzFjK1p4ekMrQm9JcDJ0MzVIWEhQckRuQS9sSWN1UXo2U0tPT0FuV1Zxc1JiSHNjamlkRE5mMGdSV0Y3Q05YMk0xbDNWVE9RYm1wZDU1Z0RxVDAxeERoa21CVGlKTWhHc0IraXNkclBiR2U2d3JVMTVSakl6a1FFeUhCM0dxWWJZQ0FpU2VId0NNQm1JN21BWWl3dDZnclg3UVQ5aDVkSEhjUS9QL3NLbEVtN0dZZDM3bEhHR2FMdXQydGJpckQ1aVQ2VHJpQ3VLc1ZKc0xyQ3d5V3VpaDJZai91bk1DMlZGbGZzZ3I1aG9keHNaSElFWlZvVGtQNzg3QVB3N1RYSFp5L2FjLzI1ckozcFNwUDI0dFJyWm55ZVcwMTJiYnRaYlM5QWVmS1orYjZtTXRqSlM2VjZHUC96T1Izd0srcGtRbjdiekhiSkNDUkRzcUZsQnB6K2RqSENWN2Eyd01Vci94MHhpTSsrdWdwcnE0NWJuRmhiaGROb0YrTUtMT3QzMkM3NVN2cUliN3hVTzMvRmRyLzh1TXFETG1zcXdVM1ZpcEgyUXpBMmszaFRyMTFJQ25xWkhNbjdGK0hDRklmWlFRNUpmRFZVdlcxbXp2NzA4L1YzMTZGVi93RjRKZTloc2dTdjNHT01ZejcxSmc2YmtlelMwQ041TjFXTGhTT3Vzc1cyalJlc3Juek5aWFVGbTVQblcwbmwyQ2NpVkxRSGViSEJKaDlVMGcxUzNHWVFENGVRakgyUVdIMEMwdXR3MTVEWEFFSXliRDBueG9Vc1lQTVptejRONTlIWUUrSzBTenlDMk1vM2JJSHc0elRUK0t0MzNFU0FYL0ZaQ01Xb3ZVdE1JTXp2SFJGS0pBOUcrVkFHdko3SVBzS0dDM0hkRFlJNHFud3poSlFabVE1bDJBT0RjTVNXYjZtSjZmZ1duK0g0YnN4Yld6WDl0bXQybDlYbDdmelljcHdKR2hsNU1JNVhFU29MOGthR0tCOVhXd3c4eE9vWUlYQnJEM2h2T2duSzlCYkVZZHlwSHNjdFNCY0dZTGJKK0ZNdmJ1cHoyQWFuSjAxdUFQTFZKYWI4OEIwM0gxeGlkS0g4V0IwVENDcTFLTkVNNFlnUkRtN0ZSbHlzK204TDZHNmdKTG1Qa3B1cXhoSlUwc3Q4SkY4Rk1lVitkd1RpcEZMOXpEbEdld21CMXdZZHpKaC9xUmxjY250SERjcWV2QkN2Nk5CWjN4SXorQ0dQNXhZVEtJb01JTVp6bytVVElBSzNXUktnVUxVQitlZ2NyVHMvN0EwNlhwUTIwVGxhaStPNG1tMERLTHVTQWdQd2tXZ3FJY09ra0MrQk9CUmRWbGNDK2NpTDBrVU5HNGpvZGQzdm5LTTEzeUhBSy84VUJHNm5UQnJCT1VjL3BmREJSWko4OGNnOUR1UWJMMXJ6eGR3M3l4NjFleFBiT1Vhemk0UmQ4VnFZTWhCSXd5dW5GNXl6OVZNQ1VWNnZ4UStFQ0pjSDhzMDVTbE15NHQxNDV4aTFqQWtqZkl1N0dJRVN4ellQU2FjQzFHZmtnM2ZoR2JENmRkTWxWdnVDUXovMG9IQWZLY2xTbWlBQUswSk43NXpkQy9PeTlKTUthbkt5VHhCdk9HQUpKRWJkNGZBdlZyeG85VXVreE1mWndidTRod1dpS0RMQ1hDU2ZUTkFVVGJhOUNzNXgxU0Q0T0J3SW00cWpOUU9rS0UxdUJIK2FRa3NzVlptYnFaOFVDTEF2eVM1Qm5MRGYyaHZhRTZQK01aUWZwWW5nc3VCZDJBMStXN0VxQlVaNE1VTS9LWEF2TWpHYkh2bTIzZ0NYYUkxeVREOVBvN0tleldCSkI4RVhwMEFDRDBzK0o2Tm5Ra0d6SkdkUGxGREhCZEkrNXQvWitkR2FRQzRiSHB2T2dnK3V6bkpjSUdlcmVpWVV5a0lqcytXVzIybXJCaTlXTGJxbkp4OXdsdWdrSWxIaWZ2QkdjZ0xOS0xQUTRFU0ErcEN6STRqZnd5MkFqZmY4Q0FkdVd6eTRyTGpubldFR3FGZG1wZmRNQ0tnYVpFT1pjNXFyeGczbldNMjhjWG1vaGhldFBjcXFzbjR2ZUcwMk1jekRtV1ZtV3MrNHdqbXIxOFl2V0ZmTEJWSTNiazhIdWJ4WjVzcFZSWkhUeVF6SnNTb3ZvUEh4aEFLclFkeUtyRk5jRUQvd284cG5qdXZ6V3JnSGF5SnlJWTViejJJVHcxeWNKcDlQN1I0WDhMRENISy9MMmwwc0VINjB0bXJjSHp6alJldDR0TTloVmNrK3hRektOeG5HTFJEcU8rS1VaWjdncW5IZFpZMW14b1E4UVVmamxZd0kxdGFDQnk1WUJLcktjeW5kOXdUcU53dWZFZmhycXExN0tvMTZ3aDRGcFBGSzQ1WnRLRE5PZ25zaFpqRGZBSDlNN3I0bnlQT05qRXVhL2haWGphdjhOelRUSnZUaFRGNlVwcEp0RitKcXdBMk5FMTVVNmVGWmRHZ3NtSnZSeXppVWVCWElYN1BUMmh1YXpSUCtsS2tnYXZzemVNMThqVzBvVmNmQnJZQ3FZb1JuTjNhUEdsdzFpTU0xN2FpMUd0cXZuZC9RL0g1U252dkY3ZjEybGprY3owcHNVbVdCcFNvejBMblJnS3BCdWdxNkw4Q3V4U2tRZGU2a1BjQXNXcU43QW8xK3l6YVVhY2RBc2NrSTBqd0RQSlBVNVRCbWJPeGkvVVc2NHBRT3JqYys1LzFWL2R0SmZSSWJydzBLV0ZWV1YrSHc2R05EWkU2YUhwN2UwT1VRNXFUcm1ZNDhydy80c1JXVzNvalNwazM2SStXem83WS83aHlsK1pKdFhWSTdXSis0NWhyZ2FjejI5QTMyUVRJU3JDRHBpSkxidVdwOE9pdWg4akdZaW9mOGVUSHFERXRWS2tDR21aVlpxekk5c2NzdVNJWmtaWFRmS25ZSHQ4Tk5tTEszRmFReHBiOUdKejVqVmNITWNsV2hyRCtWZUhmUXNKTGtXcW9oVEdybHFuRlo5THJ1a1NsOTdZSVhwVTVrVmNITVN2REtUcHBuaE5tWThXa0pYWGNGblNNWlNZNmUzY08xcnVLeFUvNytDR1VTbmJuQ3RpNGJXakhiT0F2bEdPQXBkUHJKOWJlRGp0RTVraEZzYU9hcThkSHpNYVcvdkMvZTZLR01XbTRmbFlNa3U0Y05uVm1wUGVqOHVkdEExYUJ6cmxsNDdSR2pzL2FHK3ZYNzV0VWt5aWhsMWxLVlpuREZySXV5KzJBYU92OUV2QVgwblk3Uk9aZUVKcTRhRitnM3pQdnFIU3Rlak9Zdmx2R3VBMUZtTnh0Q00xUDE4QWNNZ2pBTHY5TXhZV2FYOVdjQmt0V3V1dTllRnFQTTRtYnZBemJFRWc1aDl0SHBMSU90UCtnN0hlTW5OSExWZUcvSmt2RjdZV3hjMzNqRHFxeTBaaG9FS292ek0xUDBEUFNkanRGdkc1WlZYTFAwdm4xOXozS3JWVHZJSEYzZllISGVDdnJ1SE4vQWJkTk4zUE82OSsxN2lMZ3pqclJ1eDhFbC9Td0lNZzBNOVAzSEc5SHFzUHYraFVyckpYRXZjemorQUFiUngrQWNYODhGMHYxQXZCbktBbmxURzhSbG41LzZMdUxIVzUvem9yVCtEMHdnMXFxOHk1eGZ1ODhDU3lDbkg1aDNkVy9aR1h2ZTh1T01aUldQMG5vOGNJRlk3K1lmc3dVUnJUMzZRTDA5ZmZzTXBwSFllZ1cvUDdDQldIdmxNT0dCZTUvOWp0ZGpZN1I4d2tUYitSOW1lWkE2bjJvSldBQUFBQUJKUlU1RXJrSmdnZz09IjsKICB9IGVsc2UgewogICAgTC5JY29uLkRlZmF1bHQucHJvdG90eXBlLm9wdGlvbnMuaWNvblVybCA9ICJkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUJrQUFBQXBDQVlBQUFEQWs0TE9BQUFHbWtsRVFWUll3N1ZYZVV5VFp4anZObmZFTEZ1eUl6T2FiZXJtTVpFZVFDL09jbGtPNDlDcE9IWE9MSmwvQ0FVUnVZYlFpM0tMZ0VoYnJoWjFhRHdtYW9HcUtJSTZvZEFUbUgvc2NERmJkQzdMdkZxT0NjK2U5NXMyVkc1MFgvTExtL2Y0L1o3bmVZL25lMThhQU5DbUFyNUUveFpmMXVET2tUY0djV1I2aGw5MjQ3dFQ1VTdZNlNOdldzS1Q2M1A1OHFiZmVMSkc4TTVxY2dUa25ydnZyZERic1Q3TWwrdHY4Mlg2dlZ4SkUzM2FSbWdTeVl0Y1dWTXFYOTdZdjJKdlczOVVoUkUySHV5QkwrdCtnSzExMTZseTA2RWVXRk5sQW1IeGxRRTBPTWlWNm1RQ1NjdXNLUmxoUzNRTGVWSmRsMSsyM2g1ZFk0Rk5CM3RocmJZYm9xcHRFRmxwaFRDMWhTcEpuYlJ2eFA0Tldnc0U1Snl6ODZRTk5pLzVxU1VUR3VGazFndTU0dE45d3VLMndjM28rV2MxM1JDbXNvQndFcXpHY1pzeHN2Q1N5Lzl3SktmN1VXZjFtRVk4SldmZXdjNjdVVW9EYkRqUUMrRnFLNFFxTFZNR0dSOWQyd3VyS3pxQmszbnFJVC85ekx4UlJqZ1o5YnFRZ3ViK0Rkb2VDQzAzUThqKzBRaEZoQkhSL2VQM1UvekNsbjdVdStoaWhKMStiQk5mZkxJdm1reVAwZ3BCWldZWGhLdXNzSzZtQno1SFQ2TTFOcXBjcCttQkNQWG9zWVFmcmVrR3ZyamV3ZDU5L0d2S0NFN1RiSy8wNC9aVjVRWllWV21Ed0gxbUYzeGEyUTNyYTNEQkM1dkJUMW9QN1BUajRDMCtDY0w4YzdDMkN0ZWpxaHVDbnVJUUhhS0h6dmNSZlpwbnlsRmZYc1lKeDNwTkx3aEt6UkF3QWhFcUcwU3B1c0JIZkFLa3h3M3c0NjI3TVBob0NINzk4ejdzMFpuQkovTUVKYlpTYlhQaEVSMmloN3Ayb2svelNqMmNFSkRkNENBZSs1V1luQkNnUjJ1cnV5RXc2elJvVzYvRFdKL09lQVA4cGQvQkd0ek9aS3BHOG9rZTBTWDZHTW1SazZHRmx5QWM1OUszMk9URWluSUxSSlJjaGFoOEhRd05EOE40MzVaOVowRlkxRXF0eFVnKzBTTzZSSi9tbVh6NFZ1UytEcHhYQzNnWG1ad0lMN2RCU0g0ektFNTB3RVNmOHF3VmdyUDFFSWxUTzVKUDlJZ3UwYWV4ZGgyOEYxbG1BRUdKR2ZoN2pFNkVseU01UncvRkRjWUpqV2hiZWlCWW9ZTklwYzJGVC9TSUxpdnAwRjFpcERXazRCSUVvMlZ1b2RFSlVpZmhiaWx0bk5CSVhQVUZDTXB0aHRBeXF3cy9CUGxFRi9WYmFJeEVyZHhQcGhzVTdyY0NwOERvaEMrR3ZCSVBKUy90VzJqdHZUbW1BZXVOTzhCTk9ZUWVHOEcvMk96Q0ozcStzb1lCNWk2TmhNYUtyMTdGU2FsN0dJSGhldVYzdVNDWThxWVZ1RW0xY096cWRXcjdrdS9SMEJEb1RUK0RUK29oQ002L0NDdktMS080UkkrZFhQZUF1YU1xa3NhS3JaN0wzRkU1RklGYmtJY2VlT1oyT2NITzZ3SWhUa05vMGZmZ2pSR3hFcW9nWEhZVVBIZldBQy9sQURwd0djTFJZM2FlSzQvb1JHQ0tZY1pYUFZvZVgva2VsVllZOGRVR2Y4VjVFQlJiZ0pYVDVRSVBoUDllUEppNDI4SktPaUVZaFlYRkJxb3UyR3VoK3AvbUVCMS9SZk13NnJZN2N4Y2pUcm5lSTFGckR5dXpVU1JtOW1pd0VKeDhFL2dVbXFseXZIR2tuZWl3RXJSMjFGM3ROT0s1VGYweVhhVCtPN0RnQ3ZBTFRVQlhkTTRZaEMvSWF3UFUrMlBkdXFNdnVhUjZlb3hTd1VrNzVnZ3FzWUo3Vmljc253R0lrWkJTWEtPVXd3NzNXR1h5cVArSjIvYjljK2dpMVlBZy94cHdjazNnSnV1Y05yaDVKdkRQdlFyMFdGWGYwcGl5dDhmOC9XSTBoVjRwUnh4a1FaZEpEZkRKTk9BbU0wQWc4anlUNmh6MFdHWFd1UDk0WWgyamNmam1YQUd2SENNc2xSaW1ESFl1SHVEc3kyUXRIdUlhdnpuaGJZVVJxNVI1N0twekJCUlpLUEppOGVRZzQ4aDRqOFNEZG93aWZkSXJFVmRVK2diTzZRTnZSUnQ0WkJ0aFVhWmhVbmpsWU9iTmFnVjNrZW9lcnUzclU3cmN1Y2VxVTFtSkJ4eStCV1pZbE5FQkgrMGVINHZSaUIrT1l5YlUyaG5ibFlsVHZrSGluTTRtNTRZbnhTeWFaWVNGNlIzandnUDd1ZEtMR0lYNnIvbGJOYTlONnk1TUZ5bmpXRHRySGQ3NVp2VFlBUE8vNlJnRjBrNzZtUWxhM0ZHcTdkTytjSDhzS24wVm83bkRsbHdBaHF3TFBreHJId1dtSEpPbytBS0o0cmFiNU9nck03clZ1OGVXYjJQdTBEaDRlRGdYb09mdnA3WTdRZXFrblJtdmNUQkV5cTltL0hRUVNDU3o2TEhxM3oweXpzTnlTUmZNUzI1M3dsMkt5UkRiY1pQY2ZKS2pabVNFT2pjeHlpK1k4ZFVPdHNJRUg2UjJ3TnlrZHFya1lKMFJWOTJIMFc1OHBrZlFrN2NLZXZzTEsxMFB5OFNkTUdmWE5YQVRZK3BQYnlKUi9FVDZuOW5JZnp0TnRaWVJWOVhuaVF1OUlBMnZPVmd5NGlyN0dDTFZtbWQremprSDBlQUY5UG82SzYxcG1DWEh4VTVySE1ZZDFmdGMzb3dqd1JTVlJ6TGpLdnFaRXR5NmNSVUQ3akdxaU9kdTVIRzZNZEhqTmNOWUdxZkRtNVlSekxCQkNDRGwvMmJrOGE4Z2RicWNmd0VDdTYyRmcvSHJnZ0FBQUFCSlJVNUVya0pnZ2c9PSI7CiAgfQp9Cg=="></script>
<script src="data:application/x-javascript;base64,KGZ1bmN0aW9uICgpIHsKCSd1c2Ugc3RyaWN0JzsKCglMLlRpbGVMYXllci5Qcm92aWRlciA9IEwuVGlsZUxheWVyLmV4dGVuZCh7CgkJaW5pdGlhbGl6ZTogZnVuY3Rpb24gKGFyZywgb3B0aW9ucykgewoJCQl2YXIgcHJvdmlkZXJzID0gTC5UaWxlTGF5ZXIuUHJvdmlkZXIucHJvdmlkZXJzOwoKCQkJdmFyIHBhcnRzID0gYXJnLnNwbGl0KCcuJyk7CgoJCQl2YXIgcHJvdmlkZXJOYW1lID0gcGFydHNbMF07CgkJCXZhciB2YXJpYW50TmFtZSA9IHBhcnRzWzFdOwoKCQkJaWYgKCFwcm92aWRlcnNbcHJvdmlkZXJOYW1lXSkgewoJCQkJdGhyb3cgJ05vIHN1Y2ggcHJvdmlkZXIgKCcgKyBwcm92aWRlck5hbWUgKyAnKSc7CgkJCX0KCgkJCXZhciBwcm92aWRlciA9IHsKCQkJCXVybDogcHJvdmlkZXJzW3Byb3ZpZGVyTmFtZV0udXJsLAoJCQkJb3B0aW9uczogcHJvdmlkZXJzW3Byb3ZpZGVyTmFtZV0ub3B0aW9ucwoJCQl9OwoKCQkJLy8gb3ZlcndyaXRlIHZhbHVlcyBpbiBwcm92aWRlciBmcm9tIHZhcmlhbnQuCgkJCWlmICh2YXJpYW50TmFtZSAmJiAndmFyaWFudHMnIGluIHByb3ZpZGVyc1twcm92aWRlck5hbWVdKSB7CgkJCQlpZiAoISh2YXJpYW50TmFtZSBpbiBwcm92aWRlcnNbcHJvdmlkZXJOYW1lXS52YXJpYW50cykpIHsKCQkJCQl0aHJvdyAnTm8gc3VjaCB2YXJpYW50IG9mICcgKyBwcm92aWRlck5hbWUgKyAnICgnICsgdmFyaWFudE5hbWUgKyAnKSc7CgkJCQl9CgkJCQl2YXIgdmFyaWFudCA9IHByb3ZpZGVyc1twcm92aWRlck5hbWVdLnZhcmlhbnRzW3ZhcmlhbnROYW1lXTsKCQkJCXZhciB2YXJpYW50T3B0aW9uczsKCQkJCWlmICh0eXBlb2YgdmFyaWFudCA9PT0gJ3N0cmluZycpIHsKCQkJCQl2YXJpYW50T3B0aW9ucyA9IHsKCQkJCQkJdmFyaWFudDogdmFyaWFudAoJCQkJCX07CgkJCQl9IGVsc2UgewoJCQkJCXZhcmlhbnRPcHRpb25zID0gdmFyaWFudC5vcHRpb25zOwoJCQkJfQoJCQkJcHJvdmlkZXIgPSB7CgkJCQkJdXJsOiB2YXJpYW50LnVybCB8fCBwcm92aWRlci51cmwsCgkJCQkJb3B0aW9uczogTC5VdGlsLmV4dGVuZCh7fSwgcHJvdmlkZXIub3B0aW9ucywgdmFyaWFudE9wdGlvbnMpCgkJCQl9OwoJCQl9IGVsc2UgaWYgKHR5cGVvZiBwcm92aWRlci51cmwgPT09ICdmdW5jdGlvbicpIHsKCQkJCXByb3ZpZGVyLnVybCA9IHByb3ZpZGVyLnVybChwYXJ0cy5zcGxpY2UoMSwgcGFydHMubGVuZ3RoIC0gMSkuam9pbignLicpKTsKCQkJfQoKCQkJdmFyIGZvcmNlSFRUUCA9IHdpbmRvdy5sb2NhdGlvbi5wcm90b2NvbCA9PT0gJ2ZpbGU6JyB8fCBwcm92aWRlci5vcHRpb25zLmZvcmNlSFRUUDsKCQkJaWYgKHByb3ZpZGVyLnVybC5pbmRleE9mKCcvLycpID09PSAwICYmIGZvcmNlSFRUUCkgewoJCQkJcHJvdmlkZXIudXJsID0gJ2h0dHA6JyArIHByb3ZpZGVyLnVybDsKCQkJfQoKCQkJLy8gcmVwbGFjZSBhdHRyaWJ1dGlvbiBwbGFjZWhvbGRlcnMgd2l0aCB0aGVpciB2YWx1ZXMgZnJvbSB0b3BsZXZlbCBwcm92aWRlciBhdHRyaWJ1dGlvbiwKCQkJLy8gcmVjdXJzaXZlbHkKCQkJdmFyIGF0dHJpYnV0aW9uUmVwbGFjZXIgPSBmdW5jdGlvbiAoYXR0cikgewoJCQkJaWYgKGF0dHIuaW5kZXhPZigne2F0dHJpYnV0aW9uLicpID09PSAtMSkgewoJCQkJCXJldHVybiBhdHRyOwoJCQkJfQoJCQkJcmV0dXJuIGF0dHIucmVwbGFjZSgvXHthdHRyaWJ1dGlvbi4oXHcqKVx9LywKCQkJCQlmdW5jdGlvbiAobWF0Y2gsIGF0dHJpYnV0aW9uTmFtZSkgewoJCQkJCQlyZXR1cm4gYXR0cmlidXRpb25SZXBsYWNlcihwcm92aWRlcnNbYXR0cmlidXRpb25OYW1lXS5vcHRpb25zLmF0dHJpYnV0aW9uKTsKCQkJCQl9CgkJCQkpOwoJCQl9OwoJCQlwcm92aWRlci5vcHRpb25zLmF0dHJpYnV0aW9uID0gYXR0cmlidXRpb25SZXBsYWNlcihwcm92aWRlci5vcHRpb25zLmF0dHJpYnV0aW9uKTsKCgkJCS8vIENvbXB1dGUgZmluYWwgb3B0aW9ucyBjb21iaW5pbmcgcHJvdmlkZXIgb3B0aW9ucyB3aXRoIGFueSB1c2VyIG92ZXJyaWRlcwoJCQl2YXIgbGF5ZXJPcHRzID0gTC5VdGlsLmV4dGVuZCh7fSwgcHJvdmlkZXIub3B0aW9ucywgb3B0aW9ucyk7CgkJCUwuVGlsZUxheWVyLnByb3RvdHlwZS5pbml0aWFsaXplLmNhbGwodGhpcywgcHJvdmlkZXIudXJsLCBsYXllck9wdHMpOwoJCX0KCX0pOwoKCS8qKgoJICogRGVmaW5pdGlvbiBvZiBwcm92aWRlcnMuCgkgKiBzZWUgaHR0cDovL2xlYWZsZXRqcy5jb20vcmVmZXJlbmNlLmh0bWwjdGlsZWxheWVyIGZvciBvcHRpb25zIGluIHRoZSBvcHRpb25zIG1hcC4KCSAqLwoKCUwuVGlsZUxheWVyLlByb3ZpZGVyLnByb3ZpZGVycyA9IHsKCQlPcGVuU3RyZWV0TWFwOiB7CgkJCXVybDogJy8ve3N9LnRpbGUub3BlbnN0cmVldG1hcC5vcmcve3p9L3t4fS97eX0ucG5nJywKCQkJb3B0aW9uczogewoJCQkJYXR0cmlidXRpb246CgkJCQkJJyZjb3B5OyA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW5zdHJlZXRtYXAub3JnL2NvcHlyaWdodCI+T3BlblN0cmVldE1hcDwvYT4nCgkJCX0sCgkJCXZhcmlhbnRzOiB7CgkJCQlNYXBuaWs6IHt9LAoJCQkJQmxhY2tBbmRXaGl0ZTogewoJCQkJCXVybDogJ2h0dHA6Ly97c30udGlsZXMud21mbGFicy5vcmcvYnctbWFwbmlrL3t6fS97eH0ve3l9LnBuZycKCQkJCX0sCgkJCQlERTogewoJCQkJCXVybDogJ2h0dHA6Ly97c30udGlsZS5vcGVuc3RyZWV0bWFwLmRlL3RpbGVzL29zbWRlL3t6fS97eH0ve3l9LnBuZycKCQkJCX0sCgkJCQlIT1Q6IHsKCQkJCQl1cmw6ICdodHRwOi8ve3N9LnRpbGUub3BlbnN0cmVldG1hcC5mci9ob3Qve3p9L3t4fS97eX0ucG5nJywKCQkJCQlvcHRpb25zOiB7CgkJCQkJCWF0dHJpYnV0aW9uOiAne2F0dHJpYnV0aW9uLk9wZW5TdHJlZXRNYXB9LCBUaWxlcyBjb3VydGVzeSBvZiA8YSBocmVmPSJodHRwOi8vaG90Lm9wZW5zdHJlZXRtYXAub3JnLyIgdGFyZ2V0PSJfYmxhbmsiPkh1bWFuaXRhcmlhbiBPcGVuU3RyZWV0TWFwIFRlYW08L2E+JwoJCQkJCX0KCQkJCX0KCQkJfQoJCX0sCgkJT3BlblNlYU1hcDogewoJCQl1cmw6ICdodHRwOi8vdGlsZXMub3BlbnNlYW1hcC5vcmcvc2VhbWFyay97en0ve3h9L3t5fS5wbmcnLAoJCQlvcHRpb25zOiB7CgkJCQlhdHRyaWJ1dGlvbjogJ01hcCBkYXRhOiAmY29weTsgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuc2VhbWFwLm9yZyI+T3BlblNlYU1hcDwvYT4gY29udHJpYnV0b3JzJwoJCQl9CgkJfSwKCQlPcGVuVG9wb01hcDogewoJCQl1cmw6ICcvL3tzfS50aWxlLm9wZW50b3BvbWFwLm9yZy97en0ve3h9L3t5fS5wbmcnLAoJCQlvcHRpb25zOiB7CgkJCQltYXhab29tOiAxNiwKCQkJCWF0dHJpYnV0aW9uOiAnTWFwIGRhdGE6IHthdHRyaWJ1dGlvbi5PcGVuU3RyZWV0TWFwfSwgPGEgaHJlZj0iaHR0cDovL3ZpZXdmaW5kZXJwYW5vcmFtYXMub3JnIj5TUlRNPC9hPiB8IE1hcCBzdHlsZTogJmNvcHk7IDxhIGhyZWY9Imh0dHBzOi8vb3BlbnRvcG9tYXAub3JnIj5PcGVuVG9wb01hcDwvYT4gKDxhIGhyZWY9Imh0dHBzOi8vY3JlYXRpdmVjb21tb25zLm9yZy9saWNlbnNlcy9ieS1zYS8zLjAvIj5DQy1CWS1TQTwvYT4pJwoJCQl9CgkJfSwKCQlUaHVuZGVyZm9yZXN0OiB7CgkJCXVybDogJy8ve3N9LnRpbGUudGh1bmRlcmZvcmVzdC5jb20ve3ZhcmlhbnR9L3t6fS97eH0ve3l9LnBuZycsCgkJCW9wdGlvbnM6IHsKCQkJCWF0dHJpYnV0aW9uOgoJCQkJCScmY29weTsgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuY3ljbGVtYXAub3JnIj5PcGVuQ3ljbGVNYXA8L2E+LCB7YXR0cmlidXRpb24uT3BlblN0cmVldE1hcH0nLAoJCQkJdmFyaWFudDogJ2N5Y2xlJwoJCQl9LAoJCQl2YXJpYW50czogewoJCQkJT3BlbkN5Y2xlTWFwOiAnY3ljbGUnLAoJCQkJVHJhbnNwb3J0OiAndHJhbnNwb3J0JywKCQkJCVRyYW5zcG9ydERhcms6ICd0cmFuc3BvcnQtZGFyaycsCgkJCQlMYW5kc2NhcGU6ICdsYW5kc2NhcGUnLAoJCQkJT3V0ZG9vcnM6ICdvdXRkb29ycycKCQkJfQoJCX0sCgkJT3Blbk1hcFN1cmZlcjogewoJCQl1cmw6ICdodHRwOi8vb3Blbm1hcHN1cmZlci51bmktaGQuZGUvdGlsZXMve3ZhcmlhbnR9L3g9e3h9Jnk9e3l9Jno9e3p9JywKCQkJb3B0aW9uczogewoJCQkJbWluWm9vbTogMCwKCQkJCW1heFpvb206IDIwLAoJCQkJdmFyaWFudDogJ3JvYWRzJywKCQkJCWF0dHJpYnV0aW9uOiAnSW1hZ2VyeSBmcm9tIDxhIGhyZWY9Imh0dHA6Ly9naXNjaWVuY2UudW5pLWhkLmRlLyI+R0lTY2llbmNlIFJlc2VhcmNoIEdyb3VwIEAgVW5pdmVyc2l0eSBvZiBIZWlkZWxiZXJnPC9hPiAmbWRhc2g7IE1hcCBkYXRhIHthdHRyaWJ1dGlvbi5PcGVuU3RyZWV0TWFwfScKCQkJfSwKCQkJdmFyaWFudHM6IHsKCQkJCVJvYWRzOiAncm9hZHMnLAoJCQkJQWRtaW5Cb3VuZHM6IHsKCQkJCQlvcHRpb25zOiB7CgkJCQkJCXZhcmlhbnQ6ICdhZG1pbmInLAoJCQkJCQltYXhab29tOiAxOQoJCQkJCX0KCQkJCX0sCgkJCQlHcmF5c2NhbGU6IHsKCQkJCQlvcHRpb25zOiB7CgkJCQkJCXZhcmlhbnQ6ICdyb2Fkc2cnLAoJCQkJCQltYXhab29tOiAxOQoJCQkJCX0KCQkJCX0KCQkJfQoJCX0sCgkJSHlkZGE6IHsKCQkJdXJsOiAnaHR0cDovL3tzfS50aWxlLm9wZW5zdHJlZXRtYXAuc2UvaHlkZGEve3ZhcmlhbnR9L3t6fS97eH0ve3l9LnBuZycsCgkJCW9wdGlvbnM6IHsKCQkJCW1pblpvb206IDAsCgkJCQltYXhab29tOiAxOCwKCQkJCXZhcmlhbnQ6ICdmdWxsJywKCQkJCWF0dHJpYnV0aW9uOiAnVGlsZXMgY291cnRlc3kgb2YgPGEgaHJlZj0iaHR0cDovL29wZW5zdHJlZXRtYXAuc2UvIiB0YXJnZXQ9Il9ibGFuayI+T3BlblN0cmVldE1hcCBTd2VkZW48L2E+ICZtZGFzaDsgTWFwIGRhdGEge2F0dHJpYnV0aW9uLk9wZW5TdHJlZXRNYXB9JwoJCQl9LAoJCQl2YXJpYW50czogewoJCQkJRnVsbDogJ2Z1bGwnLAoJCQkJQmFzZTogJ2Jhc2UnLAoJCQkJUm9hZHNBbmRMYWJlbHM6ICdyb2Fkc19hbmRfbGFiZWxzJwoJCQl9CgkJfSwKCQlNYXBRdWVzdE9wZW46IHsKCQkJLyogTWFwcXVlc3QgZG9lcyBzdXBwb3J0IGh0dHBzLCBidXQgd2l0aCBhIGRpZmZlcmVudCBzdWJkb21haW46CgkJCSAqIGh0dHBzOi8vb3RpbGV7c30tcy5tcWNkbi5jb20vdGlsZXMvMS4wLjAve3R5cGV9L3t6fS97eH0ve3l9LntleHR9CgkJCSAqIHdoaWNoIG1ha2VzIGltcGxlbWVudGluZyBwcm90b2NvbCByZWxhdGl2aXR5IGltcG9zc2libGUuCgkJCSAqLwoJCQl1cmw6ICdodHRwOi8vb3RpbGV7c30ubXFjZG4uY29tL3RpbGVzLzEuMC4wL3t0eXBlfS97en0ve3h9L3t5fS57ZXh0fScsCgkJCW9wdGlvbnM6IHsKCQkJCXR5cGU6ICdtYXAnLAoJCQkJZXh0OiAnanBnJywKCQkJCWF0dHJpYnV0aW9uOgoJCQkJCSdUaWxlcyBDb3VydGVzeSBvZiA8YSBocmVmPSJodHRwOi8vd3d3Lm1hcHF1ZXN0LmNvbS8iPk1hcFF1ZXN0PC9hPiAmbWRhc2g7ICcgKwoJCQkJCSdNYXAgZGF0YSB7YXR0cmlidXRpb24uT3BlblN0cmVldE1hcH0nLAoJCQkJc3ViZG9tYWluczogJzEyMzQnCgkJCX0sCgkJCXZhcmlhbnRzOiB7CgkJCQlPU006IHt9LAoJCQkJQWVyaWFsOiB7CgkJCQkJb3B0aW9uczogewoJCQkJCQl0eXBlOiAnc2F0JywKCQkJCQkJYXR0cmlidXRpb246CgkJCQkJCQknVGlsZXMgQ291cnRlc3kgb2YgPGEgaHJlZj0iaHR0cDovL3d3dy5tYXBxdWVzdC5jb20vIj5NYXBRdWVzdDwvYT4gJm1kYXNoOyAnICsKCQkJCQkJCSdQb3J0aW9ucyBDb3VydGVzeSBOQVNBL0pQTC1DYWx0ZWNoIGFuZCBVLlMuIERlcGFydC4gb2YgQWdyaWN1bHR1cmUsIEZhcm0gU2VydmljZSBBZ2VuY3knCgkJCQkJfQoJCQkJfSwKCQkJCUh5YnJpZE92ZXJsYXk6IHsKCQkJCQlvcHRpb25zOiB7CgkJCQkJCXR5cGU6ICdoeWInLAoJCQkJCQlleHQ6ICdwbmcnLAoJCQkJCQlvcGFjaXR5OiAwLjkKCQkJCQl9CgkJCQl9CgkJCX0KCQl9LAoJCU1hcEJveDogewoJCQl1cmw6IGZ1bmN0aW9uIChpZCkgewoJCQkJcmV0dXJuICcvL3tzfS50aWxlcy5tYXBib3guY29tL3YzLycgKyBpZCArICcve3p9L3t4fS97eX0ucG5nJzsKCQkJfSwKCQkJb3B0aW9uczogewoJCQkJYXR0cmlidXRpb246CgkJCQkJJ0ltYWdlcnkgZnJvbSA8YSBocmVmPSJodHRwOi8vbWFwYm94LmNvbS9hYm91dC9tYXBzLyI+TWFwQm94PC9hPiAmbWRhc2g7ICcgKwoJCQkJCSdNYXAgZGF0YSB7YXR0cmlidXRpb24uT3BlblN0cmVldE1hcH0nLAoJCQkJc3ViZG9tYWluczogJ2FiY2QnCgkJCX0KCQl9LAoJCVN0YW1lbjogewoJCQl1cmw6ICdodHRwOi8ve3N9LnRpbGUuc3RhbWVuLmNvbS97dmFyaWFudH0ve3p9L3t4fS97eX0ue2V4dH0nLAoJCQlvcHRpb25zOiB7CgkJCQlhdHRyaWJ1dGlvbjoKCQkJCQknTWFwIHRpbGVzIGJ5IDxhIGhyZWY9Imh0dHA6Ly9zdGFtZW4uY29tIj5TdGFtZW4gRGVzaWduPC9hPiwgJyArCgkJCQkJJzxhIGhyZWY9Imh0dHA6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnL2xpY2Vuc2VzL2J5LzMuMCI+Q0MgQlkgMy4wPC9hPiAmbWRhc2g7ICcgKwoJCQkJCSdNYXAgZGF0YSB7YXR0cmlidXRpb24uT3BlblN0cmVldE1hcH0nLAoJCQkJc3ViZG9tYWluczogJ2FiY2QnLAoJCQkJbWluWm9vbTogMCwKCQkJCW1heFpvb206IDIwLAoJCQkJdmFyaWFudDogJ3RvbmVyJywKCQkJCWV4dDogJ3BuZycKCQkJfSwKCQkJdmFyaWFudHM6IHsKCQkJCVRvbmVyOiAndG9uZXInLAoJCQkJVG9uZXJCYWNrZ3JvdW5kOiAndG9uZXItYmFja2dyb3VuZCcsCgkJCQlUb25lckh5YnJpZDogJ3RvbmVyLWh5YnJpZCcsCgkJCQlUb25lckxpbmVzOiAndG9uZXItbGluZXMnLAoJCQkJVG9uZXJMYWJlbHM6ICd0b25lci1sYWJlbHMnLAoJCQkJVG9uZXJMaXRlOiAndG9uZXItbGl0ZScsCgkJCQlXYXRlcmNvbG9yOiB7CgkJCQkJb3B0aW9uczogewoJCQkJCQl2YXJpYW50OiAnd2F0ZXJjb2xvcicsCgkJCQkJCW1pblpvb206IDEsCgkJCQkJCW1heFpvb206IDE2CgkJCQkJfQoJCQkJfSwKCQkJCVRlcnJhaW46IHsKCQkJCQlvcHRpb25zOiB7CgkJCQkJCXZhcmlhbnQ6ICd0ZXJyYWluJywKCQkJCQkJbWluWm9vbTogNCwKCQkJCQkJbWF4Wm9vbTogMTgsCgkJCQkJCWJvdW5kczogW1syMiwgLTEzMl0sIFs3MCwgLTU2XV0KCQkJCQl9CgkJCQl9LAoJCQkJVGVycmFpbkJhY2tncm91bmQ6IHsKCQkJCQlvcHRpb25zOiB7CgkJCQkJCXZhcmlhbnQ6ICd0ZXJyYWluLWJhY2tncm91bmQnLAoJCQkJCQltaW5ab29tOiA0LAoJCQkJCQltYXhab29tOiAxOCwKCQkJCQkJYm91bmRzOiBbWzIyLCAtMTMyXSwgWzcwLCAtNTZdXQoJCQkJCX0KCQkJCX0sCgkJCQlUb3BPU01SZWxpZWY6IHsKCQkJCQlvcHRpb25zOiB7CgkJCQkJCXZhcmlhbnQ6ICd0b3Bvc20tY29sb3ItcmVsaWVmJywKCQkJCQkJZXh0OiAnanBnJywKCQkJCQkJYm91bmRzOiBbWzIyLCAtMTMyXSwgWzUxLCAtNTZdXQoJCQkJCX0KCQkJCX0sCgkJCQlUb3BPU01GZWF0dXJlczogewoJCQkJCW9wdGlvbnM6IHsKCQkJCQkJdmFyaWFudDogJ3RvcG9zbS1mZWF0dXJlcycsCgkJCQkJCWJvdW5kczogW1syMiwgLTEzMl0sIFs1MSwgLTU2XV0sCgkJCQkJCW9wYWNpdHk6IDAuOQoJCQkJCX0KCQkJCX0KCQkJfQoJCX0sCgkJRXNyaTogewoJCQl1cmw6ICcvL3NlcnZlci5hcmNnaXNvbmxpbmUuY29tL0FyY0dJUy9yZXN0L3NlcnZpY2VzL3t2YXJpYW50fS9NYXBTZXJ2ZXIvdGlsZS97en0ve3l9L3t4fScsCgkJCW9wdGlvbnM6IHsKCQkJCXZhcmlhbnQ6ICdXb3JsZF9TdHJlZXRfTWFwJywKCQkJCWF0dHJpYnV0aW9uOiAnVGlsZXMgJmNvcHk7IEVzcmknCgkJCX0sCgkJCXZhcmlhbnRzOiB7CgkJCQlXb3JsZFN0cmVldE1hcDogewoJCQkJCW9wdGlvbnM6IHsKCQkJCQkJYXR0cmlidXRpb246CgkJCQkJCQkne2F0dHJpYnV0aW9uLkVzcml9ICZtZGFzaDsgJyArCgkJCQkJCQknU291cmNlOiBFc3JpLCBEZUxvcm1lLCBOQVZURVEsIFVTR1MsIEludGVybWFwLCBpUEMsIE5SQ0FOLCBFc3JpIEphcGFuLCBNRVRJLCBFc3JpIENoaW5hIChIb25nIEtvbmcpLCBFc3JpIChUaGFpbGFuZCksIFRvbVRvbSwgMjAxMicKCQkJCQl9CgkJCQl9LAoJCQkJRGVMb3JtZTogewoJCQkJCW9wdGlvbnM6IHsKCQkJCQkJdmFyaWFudDogJ1NwZWNpYWx0eS9EZUxvcm1lX1dvcmxkX0Jhc2VfTWFwJywKCQkJCQkJbWluWm9vbTogMSwKCQkJCQkJbWF4Wm9vbTogMTEsCgkJCQkJCWF0dHJpYnV0aW9uOiAne2F0dHJpYnV0aW9uLkVzcml9ICZtZGFzaDsgQ29weXJpZ2h0OiAmY29weTsyMDEyIERlTG9ybWUnCgkJCQkJfQoJCQkJfSwKCQkJCVdvcmxkVG9wb01hcDogewoJCQkJCW9wdGlvbnM6IHsKCQkJCQkJdmFyaWFudDogJ1dvcmxkX1RvcG9fTWFwJywKCQkJCQkJYXR0cmlidXRpb246CgkJCQkJCQkne2F0dHJpYnV0aW9uLkVzcml9ICZtZGFzaDsgJyArCgkJCQkJCQknRXNyaSwgRGVMb3JtZSwgTkFWVEVRLCBUb21Ub20sIEludGVybWFwLCBpUEMsIFVTR1MsIEZBTywgTlBTLCBOUkNBTiwgR2VvQmFzZSwgS2FkYXN0ZXIgTkwsIE9yZG5hbmNlIFN1cnZleSwgRXNyaSBKYXBhbiwgTUVUSSwgRXNyaSBDaGluYSAoSG9uZyBLb25nKSwgYW5kIHRoZSBHSVMgVXNlciBDb21tdW5pdHknCgkJCQkJfQoJCQkJfSwKCQkJCVdvcmxkSW1hZ2VyeTogewoJCQkJCW9wdGlvbnM6IHsKCQkJCQkJdmFyaWFudDogJ1dvcmxkX0ltYWdlcnknLAoJCQkJCQlhdHRyaWJ1dGlvbjoKCQkJCQkJCSd7YXR0cmlidXRpb24uRXNyaX0gJm1kYXNoOyAnICsKCQkJCQkJCSdTb3VyY2U6IEVzcmksIGktY3ViZWQsIFVTREEsIFVTR1MsIEFFWCwgR2VvRXllLCBHZXRtYXBwaW5nLCBBZXJvZ3JpZCwgSUdOLCBJR1AsIFVQUi1FR1AsIGFuZCB0aGUgR0lTIFVzZXIgQ29tbXVuaXR5JwoJCQkJCX0KCQkJCX0sCgkJCQlXb3JsZFRlcnJhaW46IHsKCQkJCQlvcHRpb25zOiB7CgkJCQkJCXZhcmlhbnQ6ICdXb3JsZF9UZXJyYWluX0Jhc2UnLAoJCQkJCQltYXhab29tOiAxMywKCQkJCQkJYXR0cmlidXRpb246CgkJCQkJCQkne2F0dHJpYnV0aW9uLkVzcml9ICZtZGFzaDsgJyArCgkJCQkJCQknU291cmNlOiBVU0dTLCBFc3JpLCBUQU5BLCBEZUxvcm1lLCBhbmQgTlBTJwoJCQkJCX0KCQkJCX0sCgkJCQlXb3JsZFNoYWRlZFJlbGllZjogewoJCQkJCW9wdGlvbnM6IHsKCQkJCQkJdmFyaWFudDogJ1dvcmxkX1NoYWRlZF9SZWxpZWYnLAoJCQkJCQltYXhab29tOiAxMywKCQkJCQkJYXR0cmlidXRpb246ICd7YXR0cmlidXRpb24uRXNyaX0gJm1kYXNoOyBTb3VyY2U6IEVzcmknCgkJCQkJfQoJCQkJfSwKCQkJCVdvcmxkUGh5c2ljYWw6IHsKCQkJCQlvcHRpb25zOiB7CgkJCQkJCXZhcmlhbnQ6ICdXb3JsZF9QaHlzaWNhbF9NYXAnLAoJCQkJCQltYXhab29tOiA4LAoJCQkJCQlhdHRyaWJ1dGlvbjogJ3thdHRyaWJ1dGlvbi5Fc3JpfSAmbWRhc2g7IFNvdXJjZTogVVMgTmF0aW9uYWwgUGFyayBTZXJ2aWNlJwoJCQkJCX0KCQkJCX0sCgkJCQlPY2VhbkJhc2VtYXA6IHsKCQkJCQlvcHRpb25zOiB7CgkJCQkJCXZhcmlhbnQ6ICdPY2Vhbl9CYXNlbWFwJywKCQkJCQkJbWF4Wm9vbTogMTMsCgkJCQkJCWF0dHJpYnV0aW9uOiAne2F0dHJpYnV0aW9uLkVzcml9ICZtZGFzaDsgU291cmNlczogR0VCQ08sIE5PQUEsIENIUywgT1NVLCBVTkgsIENTVU1CLCBOYXRpb25hbCBHZW9ncmFwaGljLCBEZUxvcm1lLCBOQVZURVEsIGFuZCBFc3JpJwoJCQkJCX0KCQkJCX0sCgkJCQlOYXRHZW9Xb3JsZE1hcDogewoJCQkJCW9wdGlvbnM6IHsKCQkJCQkJdmFyaWFudDogJ05hdEdlb19Xb3JsZF9NYXAnLAoJCQkJCQltYXhab29tOiAxNiwKCQkJCQkJYXR0cmlidXRpb246ICd7YXR0cmlidXRpb24uRXNyaX0gJm1kYXNoOyBOYXRpb25hbCBHZW9ncmFwaGljLCBFc3JpLCBEZUxvcm1lLCBOQVZURVEsIFVORVAtV0NNQywgVVNHUywgTkFTQSwgRVNBLCBNRVRJLCBOUkNBTiwgR0VCQ08sIE5PQUEsIGlQQycKCQkJCQl9CgkJCQl9LAoJCQkJV29ybGRHcmF5Q2FudmFzOiB7CgkJCQkJb3B0aW9uczogewoJCQkJCQl2YXJpYW50OiAnQ2FudmFzL1dvcmxkX0xpZ2h0X0dyYXlfQmFzZScsCgkJCQkJCW1heFpvb206IDE2LAoJCQkJCQlhdHRyaWJ1dGlvbjogJ3thdHRyaWJ1dGlvbi5Fc3JpfSAmbWRhc2g7IEVzcmksIERlTG9ybWUsIE5BVlRFUScKCQkJCQl9CgkJCQl9CgkJCX0KCQl9LAoJCU9wZW5XZWF0aGVyTWFwOiB7CgkJCXVybDogJ2h0dHA6Ly97c30udGlsZS5vcGVud2VhdGhlcm1hcC5vcmcvbWFwL3t2YXJpYW50fS97en0ve3h9L3t5fS5wbmcnLAoJCQlvcHRpb25zOiB7CgkJCQlhdHRyaWJ1dGlvbjogJ01hcCBkYXRhICZjb3B5OyA8YSBocmVmPSJodHRwOi8vb3BlbndlYXRoZXJtYXAub3JnIj5PcGVuV2VhdGhlck1hcDwvYT4nLAoJCQkJb3BhY2l0eTogMC41CgkJCX0sCgkJCXZhcmlhbnRzOiB7CgkJCQlDbG91ZHM6ICdjbG91ZHMnLAoJCQkJQ2xvdWRzQ2xhc3NpYzogJ2Nsb3Vkc19jbHMnLAoJCQkJUHJlY2lwaXRhdGlvbjogJ3ByZWNpcGl0YXRpb24nLAoJCQkJUHJlY2lwaXRhdGlvbkNsYXNzaWM6ICdwcmVjaXBpdGF0aW9uX2NscycsCgkJCQlSYWluOiAncmFpbicsCgkJCQlSYWluQ2xhc3NpYzogJ3JhaW5fY2xzJywKCQkJCVByZXNzdXJlOiAncHJlc3N1cmUnLAoJCQkJUHJlc3N1cmVDb250b3VyOiAncHJlc3N1cmVfY250cicsCgkJCQlXaW5kOiAnd2luZCcsCgkJCQlUZW1wZXJhdHVyZTogJ3RlbXAnLAoJCQkJU25vdzogJ3Nub3cnCgkJCX0KCQl9LAoJCUhFUkU6IHsKCQkJLyoKCQkJICogSEVSRSBtYXBzLCBmb3JtZXJseSBOb2tpYSBtYXBzLgoJCQkgKiBUaGVzZSBiYXNlbWFwcyBhcmUgZnJlZSwgYnV0IHlvdSBuZWVkIGFuIEFQSSBrZXkuIFBsZWFzZSBzaWduIHVwIGF0CgkJCSAqIGh0dHA6Ly9kZXZlbG9wZXIuaGVyZS5jb20vZ2V0dGluZy1zdGFydGVkCgkJCSAqCgkJCSAqIE5vdGUgdGhhdCB0aGUgYmFzZSB1cmxzIGNvbnRhaW4gJy5jaXQnIHdoaWNocyBpcyBIRVJFJ3MKCQkJICogJ0N1c3RvbWVyIEludGVncmF0aW9uIFRlc3RpbmcnIGVudmlyb25tZW50LiBQbGVhc2UgcmVtb3ZlIGZvciBwcm9kdWN0aW9uCgkJCSAqIGVudmlyaW9ubWVudHMuCgkJCSAqLwoJCQl1cmw6CgkJCQknLy97c30ue2Jhc2V9Lm1hcHMuY2l0LmFwaS5oZXJlLmNvbS9tYXB0aWxlLzIuMS8nICsKCQkJCSdtYXB0aWxlL3ttYXBJRH0ve3ZhcmlhbnR9L3t6fS97eH0ve3l9LzI1Ni9wbmc4PycgKwoJCQkJJ2FwcF9pZD17YXBwX2lkfSZhcHBfY29kZT17YXBwX2NvZGV9JywKCQkJb3B0aW9uczogewoJCQkJYXR0cmlidXRpb246CgkJCQkJJ01hcCAmY29weTsgMTk4Ny0yMDE0IDxhIGhyZWY9Imh0dHA6Ly9kZXZlbG9wZXIuaGVyZS5jb20iPkhFUkU8L2E+JywKCQkJCXN1YmRvbWFpbnM6ICcxMjM0JywKCQkJCW1hcElEOiAnbmV3ZXN0JywKCQkJCSdhcHBfaWQnOiAnPGluc2VydCB5b3VyIGFwcF9pZCBoZXJlPicsCgkJCQknYXBwX2NvZGUnOiAnPGluc2VydCB5b3VyIGFwcF9jb2RlIGhlcmU+JywKCQkJCWJhc2U6ICdiYXNlJywKCQkJCXZhcmlhbnQ6ICdub3JtYWwuZGF5JywKCQkJCW1pblpvb206IDAsCgkJCQltYXhab29tOiAyMAoJCQl9LAoJCQl2YXJpYW50czogewoJCQkJbm9ybWFsRGF5OiAnbm9ybWFsLmRheScsCgkJCQlub3JtYWxEYXlDdXN0b206ICdub3JtYWwuZGF5LmN1c3RvbScsCgkJCQlub3JtYWxEYXlHcmV5OiAnbm9ybWFsLmRheS5ncmV5JywKCQkJCW5vcm1hbERheU1vYmlsZTogJ25vcm1hbC5kYXkubW9iaWxlJywKCQkJCW5vcm1hbERheUdyZXlNb2JpbGU6ICdub3JtYWwuZGF5LmdyZXkubW9iaWxlJywKCQkJCW5vcm1hbERheVRyYW5zaXQ6ICdub3JtYWwuZGF5LnRyYW5zaXQnLAoJCQkJbm9ybWFsRGF5VHJhbnNpdE1vYmlsZTogJ25vcm1hbC5kYXkudHJhbnNpdC5tb2JpbGUnLAoJCQkJbm9ybWFsTmlnaHQ6ICdub3JtYWwubmlnaHQnLAoJCQkJbm9ybWFsTmlnaHRNb2JpbGU6ICdub3JtYWwubmlnaHQubW9iaWxlJywKCQkJCW5vcm1hbE5pZ2h0R3JleTogJ25vcm1hbC5uaWdodC5ncmV5JywKCQkJCW5vcm1hbE5pZ2h0R3JleU1vYmlsZTogJ25vcm1hbC5uaWdodC5ncmV5Lm1vYmlsZScsCgoJCQkJY2FybmF2RGF5R3JleTogJ2Nhcm5hdi5kYXkuZ3JleScsCgkJCQloeWJyaWREYXk6IHsKCQkJCQlvcHRpb25zOiB7CgkJCQkJCWJhc2U6ICdhZXJpYWwnLAoJCQkJCQl2YXJpYW50OiAnaHlicmlkLmRheScKCQkJCQl9CgkJCQl9LAoJCQkJaHlicmlkRGF5TW9iaWxlOiB7CgkJCQkJb3B0aW9uczogewoJCQkJCQliYXNlOiAnYWVyaWFsJywKCQkJCQkJdmFyaWFudDogJ2h5YnJpZC5kYXkubW9iaWxlJwoJCQkJCX0KCQkJCX0sCgkJCQlwZWRlc3RyaWFuRGF5OiAncGVkZXN0cmlhbi5kYXknLAoJCQkJcGVkZXN0cmlhbk5pZ2h0OiAncGVkZXN0cmlhbi5uaWdodCcsCgkJCQlzYXRlbGxpdGVEYXk6IHsKCQkJCQlvcHRpb25zOiB7CgkJCQkJCWJhc2U6ICdhZXJpYWwnLAoJCQkJCQl2YXJpYW50OiAnc2F0ZWxsaXRlLmRheScKCQkJCQl9CgkJCQl9LAoJCQkJdGVycmFpbkRheTogewoJCQkJCW9wdGlvbnM6IHsKCQkJCQkJYmFzZTogJ2FlcmlhbCcsCgkJCQkJCXZhcmlhbnQ6ICd0ZXJyYWluLmRheScKCQkJCQl9CgkJCQl9LAoJCQkJdGVycmFpbkRheU1vYmlsZTogewoJCQkJCW9wdGlvbnM6IHsKCQkJCQkJYmFzZTogJ2FlcmlhbCcsCgkJCQkJCXZhcmlhbnQ6ICd0ZXJyYWluLmRheS5tb2JpbGUnCgkJCQkJfQoJCQkJfQoJCQl9CgkJfSwKCQlBY2V0YXRlOiB7CgkJCXVybDogJ2h0dHA6Ly9he3N9LmFjZXRhdGUuZ2VvaXEuY29tL3RpbGVzL3t2YXJpYW50fS97en0ve3h9L3t5fS5wbmcnLAoJCQlvcHRpb25zOiB7CgkJCQlhdHRyaWJ1dGlvbjoKCQkJCQknJmNvcHk7MjAxMiBFc3JpICYgU3RhbWVuLCBEYXRhIGZyb20gT1NNIGFuZCBOYXR1cmFsIEVhcnRoJywKCQkJCXN1YmRvbWFpbnM6ICcwMTIzJywKCQkJCW1pblpvb206IDIsCgkJCQltYXhab29tOiAxOCwKCQkJCXZhcmlhbnQ6ICdhY2V0YXRlLWJhc2UnCgkJCX0sCgkJCXZhcmlhbnRzOiB7CgkJCQliYXNlbWFwOiAnYWNldGF0ZS1iYXNlJywKCQkJCXRlcnJhaW46ICd0ZXJyYWluJywKCQkJCWFsbDogJ2FjZXRhdGUtaGlsbHNoYWRpbmcnLAoJCQkJZm9yZWdyb3VuZDogJ2FjZXRhdGUtZmcnLAoJCQkJcm9hZHM6ICdhY2V0YXRlLXJvYWRzJywKCQkJCWxhYmVsczogJ2FjZXRhdGUtbGFiZWxzJywKCQkJCWhpbGxzaGFkaW5nOiAnaGlsbHNoYWRpbmcnCgkJCX0KCQl9LAoJCUZyZWVNYXBTSzogewoJCQl1cmw6ICdodHRwOi8ve3N9LmZyZWVtYXAuc2svVC97en0ve3h9L3t5fS5qcGVnJywKCQkJb3B0aW9uczogewoJCQkJbWluWm9vbTogOCwKCQkJCW1heFpvb206IDE2LAoJCQkJc3ViZG9tYWluczogWyd0MScsICd0MicsICd0MycsICd0NCddLAoJCQkJYXR0cmlidXRpb246CgkJCQkJJ3thdHRyaWJ1dGlvbi5PcGVuU3RyZWV0TWFwfSwgdml6dWFsaXphdGlvbiBDQy1CeS1TQSAyLjAgPGEgaHJlZj0iaHR0cDovL2ZyZWVtYXAuc2siPkZyZWVtYXAuc2s8L2E+JwoJCQl9CgkJfSwKCQlNdGJNYXA6IHsKCQkJdXJsOiAnaHR0cDovL3RpbGUubXRibWFwLmN6L210Ym1hcF90aWxlcy97en0ve3h9L3t5fS5wbmcnLAoJCQlvcHRpb25zOiB7CgkJCQlhdHRyaWJ1dGlvbjoKCQkJCQkne2F0dHJpYnV0aW9uLk9wZW5TdHJlZXRNYXB9ICZhbXA7IFVTR1MnCgkJCX0KCQl9LAoJCUNhcnRvREI6IHsKCQkJdXJsOiAnaHR0cDovL3tzfS5iYXNlbWFwcy5jYXJ0b2Nkbi5jb20ve3ZhcmlhbnR9L3t6fS97eH0ve3l9LnBuZycsCgkJCW9wdGlvbnM6IHsKCQkJCWF0dHJpYnV0aW9uOiAne2F0dHJpYnV0aW9uLk9wZW5TdHJlZXRNYXB9ICZjb3B5OyA8YSBocmVmPSJodHRwOi8vY2FydG9kYi5jb20vYXR0cmlidXRpb25zIj5DYXJ0b0RCPC9hPicsCgkJCQlzdWJkb21haW5zOiAnYWJjZCcsCgkJCQltaW5ab29tOiAwLAoJCQkJbWF4Wm9vbTogMTgsCgkJCQl2YXJpYW50OiAnbGlnaHRfYWxsJwoJCQl9LAoJCQl2YXJpYW50czogewoJCQkJUG9zaXRyb246ICdsaWdodF9hbGwnLAoJCQkJUG9zaXRyb25Ob0xhYmVsczogJ2xpZ2h0X25vbGFiZWxzJywKCQkJCURhcmtNYXR0ZXI6ICdkYXJrX2FsbCcsCgkJCQlEYXJrTWF0dGVyTm9MYWJlbHM6ICdkYXJrX25vbGFiZWxzJwoJCQl9CgkJfSwKCQlIaWtlQmlrZTogewoJCQl1cmw6ICdodHRwOi8ve3N9LnRpbGVzLndtZmxhYnMub3JnL2hpa2ViaWtlL3t6fS97eH0ve3l9LnBuZycsCgkJCW9wdGlvbnM6IHsKCQkJCWF0dHJpYnV0aW9uOiAne2F0dHJpYnV0aW9uLk9wZW5TdHJlZXRNYXB9JwoJCQl9CgkJfSwKCQlCYXNlbWFwQVQ6IHsKCQkJdXJsOiAnLy9tYXBze3N9LndpZW4uZ3YuYXQvYmFzZW1hcC97dmFyaWFudH0vbm9ybWFsL2dvb2dsZTM4NTcve3p9L3t5fS97eH0ue2Zvcm1hdH0nLAoJCQlvcHRpb25zOiB7CgkJCQlhdHRyaWJ1dGlvbjogJ0RhdGVucXVlbGxlOiA8YSBocmVmPSJ3d3cuYmFzZW1hcC5hdCI+YmFzZW1hcC5hdDwvYT4nLAoJCQkJc3ViZG9tYWluczogWycnLCAnMScsICcyJywgJzMnLCAnNCddLAoJCQkJYm91bmRzOiBbWzQ2LjM1ODc3MCwgOC43ODIzNzldLCBbNDkuMDM3ODcyLCAxNy4xODk1MzJdXQoJCQl9LAoJCQl2YXJpYW50czogewoJCQkJYmFzZW1hcDogewoJCQkJCW9wdGlvbnM6IHsKCQkJCQkJdmFyaWFudDogJ2dlb2xhbmRiYXNlbWFwJywKCQkJCQkJZm9ybWF0OiAnanBlZycKCQkJCQl9CgkJCQl9LAoJCQkJaGlnaGRwaTogewoJCQkJCW9wdGlvbnM6IHsKCQkJCQkJdmFyaWFudDogJ2JtYXBoaWRwaScsCgkJCQkJCWZvcm1hdDogJ2pwZWcnCgkJCQkJfQoJCQkJfSwKCQkJCWdyYXU6IHsKCQkJCQlvcHRpb25zOiB7CgkJCQkJCXZhcmlhbnQ6ICdibWFwZ3JhdScsCgkJCQkJCWZvcm1hdDogJ3BuZycKCQkJCQl9CgkJCQl9LAoJCQkJb3ZlcmxheTogewoJCQkJCW9wdGlvbnM6IHsKCQkJCQkJdmFyaWFudDogJ2JtYXBvdmVybGF5JywKCQkJCQkJZm9ybWF0OiAncG5nJwoJCQkJCX0KCQkJCX0sCgkJCQlvcnRob2ZvdG86IHsKCQkJCQlvcHRpb25zOiB7CgkJCQkJCXZhcmlhbnQ6ICdibWFwb3J0aG9mb3RvMzBjbScsCgkJCQkJCWZvcm1hdDogJ2pwZWcnCgkJCQkJfQoJCQkJfQoJCQl9CgkJfSwKCQlOQVNBR0lCUzogewoJCQl1cmw6ICcvL21hcDEudmlzLmVhcnRoZGF0YS5uYXNhLmdvdi93bXRzLXdlYm1lcmMve3ZhcmlhbnR9L2RlZmF1bHQve3RpbWV9L3t0aWxlbWF0cml4c2V0fXttYXhab29tfS97en0ve3l9L3t4fS57Zm9ybWF0fScsCgkJCW9wdGlvbnM6IHsKCQkJCWF0dHJpYnV0aW9uOgoJCQkJCSdJbWFnZXJ5IHByb3ZpZGVkIGJ5IHNlcnZpY2VzIGZyb20gdGhlIEdsb2JhbCBJbWFnZXJ5IEJyb3dzZSBTZXJ2aWNlcyAoR0lCUyksIG9wZXJhdGVkIGJ5IHRoZSBOQVNBL0dTRkMvRWFydGggU2NpZW5jZSBEYXRhIGFuZCBJbmZvcm1hdGlvbiBTeXN0ZW0gJyArCgkJCQkJJyg8YSBocmVmPSJodHRwczovL2VhcnRoZGF0YS5uYXNhLmdvdiI+RVNESVM8L2E+KSB3aXRoIGZ1bmRpbmcgcHJvdmlkZWQgYnkgTkFTQS9IUS4nLAoJCQkJYm91bmRzOiBbWy04NS4wNTExMjg3Nzc2LCAtMTc5Ljk5OTk5OTk3NV0sIFs4NS4wNTExMjg3Nzc2LCAxNzkuOTk5OTk5OTc1XV0sCgkJCQltaW5ab29tOiAxLAoJCQkJbWF4Wm9vbTogOSwKCQkJCWZvcm1hdDogJ2pwZycsCgkJCQl0aW1lOiAnJywKCQkJCXRpbGVtYXRyaXhzZXQ6ICdHb29nbGVNYXBzQ29tcGF0aWJsZV9MZXZlbCcKCQkJfSwKCQkJdmFyaWFudHM6IHsKCQkJCU1vZGlzVGVycmFUcnVlQ29sb3JDUjogJ01PRElTX1RlcnJhX0NvcnJlY3RlZFJlZmxlY3RhbmNlX1RydWVDb2xvcicsCgkJCQlNb2Rpc1RlcnJhQmFuZHMzNjdDUjogJ01PRElTX1RlcnJhX0NvcnJlY3RlZFJlZmxlY3RhbmNlX0JhbmRzMzY3JywKCQkJCVZpaXJzRWFydGhBdE5pZ2h0MjAxMjogewoJCQkJCW9wdGlvbnM6IHsKCQkJCQkJdmFyaWFudDogJ1ZJSVJTX0NpdHlMaWdodHNfMjAxMicsCgkJCQkJCW1heFpvb206IDgKCQkJCQl9CgkJCQl9LAoJCQkJTW9kaXNUZXJyYUxTVERheTogewoJCQkJCW9wdGlvbnM6IHsKCQkJCQkJdmFyaWFudDogJ01PRElTX1RlcnJhX0xhbmRfU3VyZmFjZV9UZW1wX0RheScsCgkJCQkJCWZvcm1hdDogJ3BuZycsCgkJCQkJCW1heFpvb206IDcsCgkJCQkJCW9wYWNpdHk6IDAuNzUKCQkJCQl9CgkJCQl9LAoJCQkJTW9kaXNUZXJyYVNub3dDb3ZlcjogewoJCQkJCW9wdGlvbnM6IHsKCQkJCQkJdmFyaWFudDogJ01PRElTX1RlcnJhX1Nub3dfQ292ZXInLAoJCQkJCQlmb3JtYXQ6ICdwbmcnLAoJCQkJCQltYXhab29tOiA4LAoJCQkJCQlvcGFjaXR5OiAwLjc1CgkJCQkJfQoJCQkJfSwKCQkJCU1vZGlzVGVycmFBT0Q6IHsKCQkJCQlvcHRpb25zOiB7CgkJCQkJCXZhcmlhbnQ6ICdNT0RJU19UZXJyYV9BZXJvc29sJywKCQkJCQkJZm9ybWF0OiAncG5nJywKCQkJCQkJbWF4Wm9vbTogNiwKCQkJCQkJb3BhY2l0eTogMC43NQoJCQkJCX0KCQkJCX0sCgkJCQlNb2Rpc1RlcnJhQ2hsb3JvcGh5bGw6IHsKCQkJCQlvcHRpb25zOiB7CgkJCQkJCXZhcmlhbnQ6ICdNT0RJU19UZXJyYV9DaGxvcm9waHlsbF9BJywKCQkJCQkJZm9ybWF0OiAncG5nJywKCQkJCQkJbWF4Wm9vbTogNywKCQkJCQkJb3BhY2l0eTogMC43NQoJCQkJCX0KCQkJCX0KCQkJfQoJCX0KCX07CgoJTC50aWxlTGF5ZXIucHJvdmlkZXIgPSBmdW5jdGlvbiAocHJvdmlkZXIsIG9wdGlvbnMpIHsKCQlyZXR1cm4gbmV3IEwuVGlsZUxheWVyLlByb3ZpZGVyKHByb3ZpZGVyLCBvcHRpb25zKTsKCX07Cn0oKSk7Cg=="></script>
<script src="data:application/x-javascript;base64,TGVhZmxldFdpZGdldC5tZXRob2RzLmFkZFByb3ZpZGVyVGlsZXMgPSBmdW5jdGlvbihwcm92aWRlciwgbGF5ZXJJZCwgZ3JvdXAsIG9wdGlvbnMpIHsKICB0aGlzLmxheWVyTWFuYWdlci5hZGRMYXllcihMLnRpbGVMYXllci5wcm92aWRlcihwcm92aWRlciwgb3B0aW9ucyksICJ0aWxlIiwgbGF5ZXJJZCwgZ3JvdXApOwp9Owo="></script>
<link href="data:text/css;charset=utf-8,%0A%0A%2Eawesome%2Dmarker%20%7B%0Abackground%3A%20url%28data%3Aimage%2Fpng%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAAtAAAAAuCAYAAAABUC7cAAAACXBIWXMAAAsTAAALEwEAmpwYAAA66GlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4KPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS41LWMwMTQgNzkuMTUxNDgxLCAyMDEzLzAzLzEzLTEyOjA5OjE1ICAgICAgICAiPgogICA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPgogICAgICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIgogICAgICAgICAgICB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iCiAgICAgICAgICAgIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIKICAgICAgICAgICAgeG1sbnM6cGhvdG9zaG9wPSJodHRwOi8vbnMuYWRvYmUuY29tL3Bob3Rvc2hvcC8xLjAvIgogICAgICAgICAgICB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIKICAgICAgICAgICAgeG1sbnM6c3RFdnQ9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZUV2ZW50IyIKICAgICAgICAgICAgeG1sbnM6dGlmZj0iaHR0cDovL25zLmFkb2JlLmNvbS90aWZmLzEuMC8iCiAgICAgICAgICAgIHhtbG5zOmV4aWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20vZXhpZi8xLjAvIj4KICAgICAgICAgPHhtcDpDcmVhdG9yVG9vbD5BZG9iZSBQaG90b3Nob3AgQ0MgKE1hY2ludG9zaCk8L3htcDpDcmVhdG9yVG9vbD4KICAgICAgICAgPHhtcDpDcmVhdGVEYXRlPjIwMTMtMTEtMjVUMTk6NTE6NDErMDE6MDA8L3htcDpDcmVhdGVEYXRlPgogICAgICAgICA8eG1wOk1vZGlmeURhdGU%2BMjAxMy0xMS0yOFQyMToyNzowNyswMTowMDwveG1wOk1vZGlmeURhdGU%2BCiAgICAgICAgIDx4bXA6TWV0YWRhdGFEYXRlPjIwMTMtMTEtMjhUMjE6Mjc6MDcrMDE6MDA8L3htcDpNZXRhZGF0YURhdGU%2BCiAgICAgICAgIDxkYzpmb3JtYXQ%2BaW1hZ2UvcG5nPC9kYzpmb3JtYXQ%2BCiAgICAgICAgIDxwaG90b3Nob3A6Q29sb3JNb2RlPjM8L3Bob3Rvc2hvcDpDb2xvck1vZGU%2BCiAgICAgICAgIDxwaG90b3Nob3A6RG9jdW1lbnRBbmNlc3RvcnM%2BCiAgICAgICAgICAgIDxyZGY6QmFnPgogICAgICAgICAgICAgICA8cmRmOmxpPnhtcC5kaWQ6NDg5Mjg4N2ItNmUyMS00NzVhLTk3NjItMjg2MDA1YmY4NzcwPC9yZGY6bGk%2BCiAgICAgICAgICAgICAgIDxyZGY6bGk%2BeG1wLmRpZDo4MkZFRTA1Mjg3M0UxMUUyQTdENEU3RkFGNDE5M0Q3OTwvcmRmOmxpPgogICAgICAgICAgICA8L3JkZjpCYWc%2BCiAgICAgICAgIDwvcGhvdG9zaG9wOkRvY3VtZW50QW5jZXN0b3JzPgogICAgICAgICA8eG1wTU06RG9jdW1lbnRJRD54bXAuZGlkOjQ4OTI4ODdiLTZlMjEtNDc1YS05NzYyLTI4NjAwNWJmODc3MDwveG1wTU06RG9jdW1lbnRJRD4KICAgICAgICAgPHhtcE1NOkluc3RhbmNlSUQ%2BeG1wLmlpZDozYjZiOTRmNi1hZTFkLTQ1ZjMtOTcwMS1jNWY2Mjg0ZjExMDQ8L3htcE1NOkluc3RhbmNlSUQ%2BCiAgICAgICAgIDx4bXBNTTpPcmlnaW5hbERvY3VtZW50SUQ%2BeG1wLmRpZDo0ODkyODg3Yi02ZTIxLTQ3NWEtOTc2Mi0yODYwMDViZjg3NzA8L3htcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD4KICAgICAgICAgPHhtcE1NOkhpc3Rvcnk%2BCiAgICAgICAgICAgIDxyZGY6U2VxPgogICAgICAgICAgICAgICA8cmRmOmxpIHJkZjpwYXJzZVR5cGU9IlJlc291cmNlIj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OmFjdGlvbj5jcmVhdGVkPC9zdEV2dDphY3Rpb24%2BCiAgICAgICAgICAgICAgICAgIDxzdEV2dDppbnN0YW5jZUlEPnhtcC5paWQ6YTg2MDAxOTQtMzdmYS00MGM3LTlmNjktYTE5MDIwMGUzNTUzPC9zdEV2dDppbnN0YW5jZUlEPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6d2hlbj4yMDEzLTExLTI1VDE5OjUxOjQxKzAxOjAwPC9zdEV2dDp3aGVuPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6c29mdHdhcmVBZ2VudD5BZG9iZSBQaG90b3Nob3AgQ0MgKE1hY2ludG9zaCk8L3N0RXZ0OnNvZnR3YXJlQWdlbnQ%2BCiAgICAgICAgICAgICAgIDwvcmRmOmxpPgogICAgICAgICAgICAgICA8cmRmOmxpIHJkZjpwYXJzZVR5cGU9IlJlc291cmNlIj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OmFjdGlvbj5zYXZlZDwvc3RFdnQ6YWN0aW9uPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6aW5zdGFuY2VJRD54bXAuaWlkOjNiNmI5NGY2LWFlMWQtNDVmMy05NzAxLWM1ZjYyODRmMTEwNDwvc3RFdnQ6aW5zdGFuY2VJRD4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OndoZW4%2BMjAxMy0xMS0yOFQyMToyNzowNyswMTowMDwvc3RFdnQ6d2hlbj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OnNvZnR3YXJlQWdlbnQ%2BQWRvYmUgUGhvdG9zaG9wIENDIChNYWNpbnRvc2gpPC9zdEV2dDpzb2Z0d2FyZUFnZW50PgogICAgICAgICAgICAgICAgICA8c3RFdnQ6Y2hhbmdlZD4vPC9zdEV2dDpjaGFuZ2VkPgogICAgICAgICAgICAgICA8L3JkZjpsaT4KICAgICAgICAgICAgPC9yZGY6U2VxPgogICAgICAgICA8L3htcE1NOkhpc3Rvcnk%2BCiAgICAgICAgIDx0aWZmOk9yaWVudGF0aW9uPjE8L3RpZmY6T3JpZW50YXRpb24%2BCiAgICAgICAgIDx0aWZmOlhSZXNvbHV0aW9uPjcyMDAwMC8xMDAwMDwvdGlmZjpYUmVzb2x1dGlvbj4KICAgICAgICAgPHRpZmY6WVJlc29sdXRpb24%2BNzIwMDAwLzEwMDAwPC90aWZmOllSZXNvbHV0aW9uPgogICAgICAgICA8dGlmZjpSZXNvbHV0aW9uVW5pdD4yPC90aWZmOlJlc29sdXRpb25Vbml0PgogICAgICAgICA8ZXhpZjpDb2xvclNwYWNlPjY1NTM1PC9leGlmOkNvbG9yU3BhY2U%2BCiAgICAgICAgIDxleGlmOlBpeGVsWERpbWVuc2lvbj43MjA8L2V4aWY6UGl4ZWxYRGltZW5zaW9uPgogICAgICAgICA8ZXhpZjpQaXhlbFlEaW1lbnNpb24%2BNDY8L2V4aWY6UGl4ZWxZRGltZW5zaW9uPgogICAgICA8L3JkZjpEZXNjcmlwdGlvbj4KICAgPC9yZGY6UkRGPgo8L3g6eG1wbWV0YT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAKPD94cGFja2V0IGVuZD0idyI%2FPkWEzfQAAAAgY0hSTQAAeiUAAICDAAD5%2FwAAgOkAAHUwAADqYAAAOpgAABdvkl%2FFRgAAZZxJREFUeNrsvXlUU%2Fe%2B%2Fv%2BxPcdzeg%2F39p7ec%2B%2F3tA4Q5nkKDjhUq9IKhEnAAScUFXEAmccMCEmQGRkUUXCotnWe6zxUxFpR5kGxdWRUq5UQZt%2B%2FP3Z22NnZOwkhYNdvmbWeFUJg571Menit5zyf540AAH3QB33QB33Qn1sidhASsYNQBzsQdXM2oh7uRtTJCUSdnCDUw9mIetgbUTc7EInZgagff54diLrY2H0PNxD1czeibk4g6uVuRF3sQNTFCZT8TCAScwJRF2cjEnOCpK%2BFqz06CHXnByG4sgnBBbKCEVwKR3A5AsHFEASXQrGvL0cguByOfe9KFIIrkZLnw7D7yxEIrsZgjy9HYr93KQzBRfw%2BGPv6YrDs610JQqV7I1BELA9xudyhaBSHw0UcNhdxONhjidS%2FJoeNIq89QxHlvSjibieme10orLIXhVX1obCKHhRR1oXCK%2FtQeFU%2FCq%2FoQ%2BHl3Si8qh9FVPWj8PJuFFbRi8LLu1FERQ%2BKqAHscaXk5yp6sPvyHhRe1oU9LusaeC2JNlV0o23nXqK2zeXouaBSRo2CKtQmqEMvhfWoVVCLmgXV6IWgDr0Q3kcvBXWoWVCFXgrq0e%2BCB6iFX43aBLWoRVCN2gR16I3gIWoT1Ep%2FF%2Fv9GuyeX4VaBdWoSVBF8Zq16FHiFXSPy0Zl3HgZlXPjURWHh2rYPFTF4aEKLg9VcwZUwY1H1RweqmPHowoOD1VKFY%2Fq2fGoisNFNex4VMmJR5UcnvRnyiX3FRye3GuWcePR3agY1FxWjkRdXejt27cy6ujoQGKxGHV0dKD29nbU0dEhFf5YLBYjkUiEOjo6kEgkQiKRSPo7%2BPeI9%2B3t7dKfI7%2BeWCxGT548QcnJySglJUVOqampKD09HaWmpqLU1FSUlpaG0tPTpd9LS0tDmZmZ0ufx723dulX6s%2Fj38OeTk5OlX5NfLy0tDSUkJCAnJyfk6OgoJ2dnZ%2BTs7IycnJykwr%2Fn6OiIXFxcEIvFQo6OjtJrsFgsxGKxKH%2BX7nXw33dwcEAMBgNpa2sjHR0dqXR1dZG%2Bvj7S1dVFDAYD6enpIX19faSnp4cYDAbS1dVFBgYG0q8ZDAZiMBjI0NAQ6enpyUhXV1fmZxgMhsxrUf1v8oc%2FTB%2F0QR%2F0Qf8%2FBWgxOxB1srH79w%2FQEZKfDcXuL4ePOEBzONxR7Fgeio3kIXYMD%2FE2cz%2BOT%2BD8nbeZ%2BzH%2B%2FbhoHuKwuYjLUQOmNQDQoX8igMaguAY1C6pQq6D2vQN0uQSIMX0AaDJAk3%2FnA0B%2FAOgP%2BqAP%2BqAPAK0iQHeyA3X6ORsX93E3Cnq5Qbt7uUFHerlB%2BX3cwM393I1rujkbrXu5G%2F%2FSOSIAHYbgYsh4uBK1EK7GJMKV6EK4GnMUrkQXwNWYBLgavRYuhTHhcsRf4VLIsAE0h8MdFRfNQ1wed3TajjjTvGPRvoWXI9MO1YXtP%2Fww9MzBurD9hVcj07cdjwrL%2FiFmTkIS51%2FsOC5iY6%2Fx0XACdFh59%2BfhVf3zIqvfxUdW9RVEVvUfjars2xVZ1cePqIYNYRW99mGVfX8bCYB%2BIahFzYKq%2F3spqHd9I3jIfS14sOON4OHR14IHRa8FDYI3goeBbYLaaS%2BEdZ%2B04OA8jACNPY7%2FVzWH51zPjmfXcuLz6zm8o%2FUc3u5aTrywnh2%2FqYrDnVHNjv9HxcgD9Kcikcioo6NjukgkshGJRP8Wi8X%2FGEmAlgDxp2lpaQ5ZWVnRmZmZuVlZWUeysrL2ZWVlbdm6dWtoWlqaQ3p6%2Bqc4GI8AQBu4uLj4urq6Clks1l4Wi3WExWJtc3FxiWexWCudnZ3NnJ2dPxoJgGYwGMjAwECLwWDo6urqTmUwGBMYDMYYQ0NDLY0DtKq3G5MNtYrtDb2K7Y04xfZG%2BcX2Rock98nF9oa%2BxfaGY9AI3jIWjtXa5avt9f1aBufoet38Exv0Dh1br5t%2FMICRvHultm%2B2z9gRnceDM0bLO3Gs16It4zg%2BKePzF6eOP7Q4dXz%2BouRxyfP5Y33ncceM6DzG0bu0TLn7vcwSD3PMhcfyLZKOH7IQHs835x9JNo3%2Fztc4dveIzrPBzFcrxnqDl8AunJMyMTY%2FYzLnUNokdr5wQmQyxybId5O534jOk21pq5VjxfTKsWJycqyY%2BTlWzEOS%2B%2BQcK6ZvjhVzROdBU5ZpoVlrvdCcIA6aG5qPnMIPIcewfPT1pmQ0K8AXTfUd2c%2Fz0s%2B1vFd%2B4bVozViOj%2F%2FY%2FCVrxx5asnZsvo%2F%2F2OQFfmN85y37fETn%2BcqEpTXHzN3ra3NPzlwL7%2Fy5lt6H5lp6539t7pnsYObh%2B5WJy4jOozdxupbRdAcv01ksjvnXbvmWc%2BcdsvjGI99sjkuyyYy5vvr2Mwc1Dx1AK4O3XvZGxz5u0Ml3m0NEwA8HEETIix8OkBja0x%2B%2F6XYPJzCgi7PxH0OMQdAKLkfMgauxR95d57V3X%2BZAz%2BU46L0UDX0XI6HvUjT0XI6B7sts6Lse3wvX2HfhcuQmuBT6XxqeA4NfHvcvWw%2FEOB%2BqDTt%2B5mVI%2B5lXIXDmRTCcbAmGU83BcLolGE63hcCZV8Fw9vWmvhPPQmr33IiMT8pia3O5XMRhayDeQVJ4Vf%2BUyKr%2B%2FbHV%2Fb%2FHVfVAbGUPxFT1QExlD8RWDSiupr8vuvpddURlX1xYRc%2F%2FDdf79UJYP%2BGN4MEekeDXFy%2BF9dAmrIVWQS20CGqgVVgHrcJaeCmsB5Hwt36R8FH9S8H9%2BFZBzRfKrqsOQFdhAG1Vx%2BEVPGTHtzxh8%2BAZmweNcTxojONCYxwXnsfx4Ck7Hh6zee8a2LyHtRyesJLD0y4fXoA26ejoiO7s7DzX1dXV1tXV1dnV1dXf1dXV09XV9barq%2BupWCw%2BKRaLg0Uike4wA7RBZmZmZm5u7tP8%2FHwoKCiAXbt2yaigoADy8%2FMhNzf3aWZm5tbU1FRj%2FHrDANAeLi4u593d3cUeHh7g6ekpo3nz5oGHhwe4u7t3ubq6%2FsRisZY7OTn9dZgAepyent5GQ0PDY8bGxo0mJiYdJiYm%2FSYmJr0mJibtxsbGTYaGhhcNDAzidHV1LUcEoIvtDR2K7Y1Ol9gbdd%2BaYgS3phjBzyTdmmIEJfZGcNPeqLTY3ijgxmTDj4frD9dO3%2FEOpwL1Tt%2BMNuou55pAbYIp3OebwQOBGdznm0E93xQq403g51gjOB%2BsX7pvlU5A8vwxwzaPd%2BJYhyVp40%2BvyNPpXrWDAWt26YJ%2FkR6s3a0H%2FkWYVu9kwMrtOrA0S7t0gWBcgHvcF8M2jyn3WweLLSdOW2Ve6rbJ%2Bwlst90E2x0%2Fg%2B2O29h9%2Fi2w2VYM1luvgGXK2VKz%2BB8CjCJ3Dts8MdbrHTIn807vm5nRfWxOPpz%2BphDOzd0D5%2Bfug%2FNz98KZb3bDcYcC%2BO6rrbBtKr%2BUZxscsNZkybDNk2PFdMixYp7Os2J251nZQp6VLWwjCfs%2BE3KtmKU5VsyAbEvbYZsHzfR3QI4Rp9G8hG60MBnQojRAPpmAlmRh9wvTAS1IAeTFB%2BQSU4rmbAhAkxYP3%2Bd55RcOSwPGnl4RNL57VYg2%2BIfrgH%2BEDqyNxO79I3RgTZg2rAweD8s2jCtduGpsgPuSfw%2FbPLNN3RwcLeefdrH26XazXQbzmL7gwfSFecwV4CH52t12ObjaLAFnq4WlDmYeATONnYdtHqPpDg6Wjp6n7TyWdk9esAqm%2BPjD1CUBMHXpOpi6ZB1MWewPkxeuggmey8GaNb%2FUZKZjAMNu6seaBugudiCzjxt0AhLDCLAcqUCS5%2Fnh0B%2B%2FqbKHvXGRRsH5YoglXI090nOVA%2F0XIwAuRwJciwO4zgX4afOAbvAArrMBrkQCXAqD7ktseHedUwuXwn01MQeHg8Fz%2Bs5Y5g81YUfPvAyBUy0hGDDjsPx7iIzOvAiGU63BcLI5BE6%2FCIGTLSGPdl2MDI5P4GjJAPlQwLmsWzeyqn93bFVvf3RlD4RXAUTXAsTWAsTVAbBrsPu4OoCYWoCIaoDIqj6IreqBmJp3jyIq%2BjaGl%2Fd8rKn3q1lQPe614MGOl4L7Pc2CGmgT1MJbwUMQJf0GncIn0CV4Cl2Cx9AhfAR%2FCH%2BFl4JaaBHWwAvBfegQPn7%2BQnA%2FrEVQM1pTAF3O5f2%2FWg5v629sXkcjmwdNbB60KFGTBLB%2FZfNaaji8uAoO7x8aBmg9sVic29XV1d7T0wPK1N3dDV1dXa%2FFYnGaSCQap0mATklJ%2Ba%2BMjIzE3NzcVwUFBVBUVAS7d%2B%2BG3bt3w549e2SEf7%2BoqAh27twJeXl5bzIyMpJTU1P%2FR4MA%2FaWLi8sFHJq9vLzA29sbvL29Yf78%2BVLh3%2FPy8gJPT0%2Fw8PAAFxeXn52dnd00BdC6urr%2FZ2BgsNnY2LjV3NwcLCwswNLSklIWFhZgbm4OJiYmnQYGBrt1dXXNhgWgi%2B0NLW7aG10osccg%2BfYUI7g9xRh%2BmSqv21OM4TYBpm%2FaGzUU2xt6afIP17Yl4yzOBOldKGUbQ4PADJ6nmkNLugW0ZFAo3QIa0yzgtyQzqIw3gUuhBg1FK7U1Oo9n%2FBiLJRnjL%2FjlM2DtHj1Y960%2BrD%2BgDxsotP6APqz%2FVh8C9ujBqgIGLNuq3TA%2FcaxG5zGJ22thseXUBevsa8As%2BAXsCu%2FChN3lMGFPhbx2l4Nd4T1g7rwDNnk3wDLtbIMp74BG5wmzXGORbR9%2F4eDsPLjg%2BC3cYB2GEpejUOJyjEJH4QbrMFx2OgDHHQpgxzRhA9s60EvD4GyRa8W8kGfFlILydms72G7NpJCdDEznWjEbcqyYGp0HfelngZwjLyBvIQbLy%2FIALc9XoO2AlmZjMO0S14BmBWh0Hi%2Ffzy2Wrh97wS9YGwKiGLA%2BRhc2xtFrQ4wurItiwOpQbVi2YVzD%2FJVfaHSeWSauFo6W8y%2B42SwFT7uV4DXBD7wnrIL5E1bLyXvCKvCesAo87VaCm%2B0ycLZa2DDHzF2j8xhOnW1h5eh1YZL3Cpi2dD18uTIIZvoFw8xVFPILhi9XBsH0ZRtg8sJVYOuysMF4xjdemgLoHs7Gpe8SQt7KgLEwClMShfDniDCdGAY93MB8MXvobjRcDvfuvcJ%2B%2Fe5SOMDVaICfEgBuCgFKkgFuUagkGaBkC8CNRAymL4VB92U2wNWoPXAx%2BFO14ZmNgW7%2ByahFp1qDX53EHebXwXD2TTCce6tAb4Lhx9fBcOpFMJxoCoEzL4Phh9qwk1ty4sYPFaLDKnvnRFf2NkZV9kJkDQCnDoBXB7C5HiDhvrw212PPc2sBYmoAIqr7IK6qByKr%2Bk%2BGlXV%2FPtT3q1VQN%2FWloP5Js6AaXgnvQ1fSUwBhM8CWZoAtrRRqBhA2Q6%2FwGfwh%2FBWaBdXwu%2BA%2BvBE8vNDMr9YeCkBXs3moihNv94DDq37G5kEzmwctbC60xvGglc2DNna8RDyJsMet7Hhoi4uHljgJSMfx4D6bd6OCwzPQBECLRKK1XV1dL7q7u6WA3NvbK70nigqmu7q6mjo6OlZqAqBTUlKMt27d%2BjMRnHFY3rt3L61wmMZBOjs7uzwlJcVmqADt7Oy8wc3NrdPT01MOmBWJCNLu7u7AYrG2ODo6%2FnUoAK2rq%2BtuZGT0m7m5uRwsW1lZyYj8vASk3%2Brr68fo6OhoDqCL7Q19btobiW9JwPmXqcZwZ6oxlE41hrsUKpU8j8P0zxJHutjeKO%2FGZMPRQ%2F3jtddP2%2BdGlKH4vsAMGtMwSG7NsIS2TEt4QaG2TEtozbCElgwLaJaAdCnbGI6s081Lnj9myPMs4I%2FzWZGrI%2FYv0oX130pA%2BTt92Pg9vTZ8J4Hp%2FRhI%2B%2BUzwCdlfJ577BdDnscs%2Fnsfq8yLYtv8n8Gu8J4ElCthwt4qmLhPXhP2VmHP76mACUVlwNx5B6yzr4G54GieUWTBkOfh2mzy2TszQ3xu7j4JOB%2BDW67H4WfX43Db9YScfnY9Drdcj0OJyzG46XIELjsdgIOz8yBlYkzeWpMlozUAzz65VkxxnhScmZBvzYQdCpRPguk8KybkWDHzsi1thzwPmr3eB3nEi5FPJgbGy%2FMBrdgBaPkOQL4F8lq%2BQ%2FJ8PqAV%2BRhIewsBzQ3NQ5MWD%2F3z7DfGZ0XgeLF%2FhA5sIIBzIJteUpCOxUDaL1gbfPzH5rkv%2FveQ53Ew8%2FBxsfYRezB9ZaF54hp6EWDa024luNkshW8svPJmGjsPeR6TmY4%2Bdh5LxFOXBmDgvCoYZq4KgZmrQmHmagqtCpU8j8H09GUbYJL3CjB3cMtj2E0dPRSA7uUE8iAxVBack6IAtkRjSo6RF%2F5cEhGksWhHPzfweid74%2Bfqw3NUZM%2FluHdwKRxzmEu2SEA5RaJUCuHPSWD6RiLA1WjovRgF767E%2FgwXQ8erA8%2FsWN6onRcio868COk%2F1RwMZ3%2FfBOck4Pxj%2ByY4r0A%2Ftm%2BSwvSPrzHwPtUaDCebQmrSC2Ot1YXo8Kq%2BVTGVPT3hVZi7zKsbAOXEeoDEBxSql4Vpbi1AZA1ATGUPRFf314RX9Jqp%2B369FN73aRPUdrYK6qBTiINzK0ByC6YUCuHPSWC6V%2FgMXgnvQ6ugBtoFvzW0Cmps1Xegue6%2FsuN%2Fb4zjQgtbFppfsHnQxuHBCzZXRtj3CHAtAelGNg8a2NzHVRzeVHUBuqOj429isTiLCM5U0EwlKkdaLBanikSiv6oL0GlpaV%2Fm5OQ827VrlxSccUDet2%2BfQpFBeteuXZCbm%2FsiLS3Nher1lAG0k5PTKBaLleXh4SF1nFWFZ7K8vLxg3rx5wGKxTjg6Ov63OgCtr68fZWpq2k92nMngTCXiz5uZmYGBgcEBBoPxzyEDdLG9UfyA64yB8d2pxnBvmjHcm2YC96aZQBlJ2PcHYBoDaakbfePGZMNP1f3j9Z0%2FI76UbQyPt5hDcxoGzi8yLeFlliW82orpd5JebcWex2G6JcMCnqWaQ81mUzgTpHcjbf4YtedZmDQu3i%2BfAQF79TDHWQLOgT8YQOBBBfrBYACmD%2BjDum%2F1YfVOBizJGH%2FDg63%2BPGYJh%2BKts68Bc9cdieNcKQHlapj4bQ2m%2FbWy%2BrYGe14K0xVgV3gXbLcVg8WWUzeMo3eqPQ%2FfLjz%2B4Ow8uOL8Pdx0OQK3JND8i9tJuCPVKZJOwi9uJ6UwXeJyDH5iHYKTX%2B%2BCbPv4G%2BtNl386BHiOx13n7dZ2UnAusGZCgY0dFNjYwU6SCmzsoIAA09utmUQ3%2Bka2pa3a86A5gfGY65yDwfAKIjTvxLRyl6x8d8rC9PJ8zLFelAbIOfIGmrJU7XkWrR4b7xesDeuiGDLgHMTRgyCuAnH0ZGB6fYwurAnThqXrx97wWPr5p%2BrD87x43HWWwvPENbBgkr9UCyetlRH%2BfSJMe03wAw%2FmcnC0nH9jhrGz2vOYzmLFT%2FJeAdOXb5A4ziEwc3UofLU6TKkGYDoYvlwRBPaLVoOVo9cN3YnTP1UHoHs5GyMHcs4SeCZC85ZYTMlxstoSKwvTJJDu4wX93MEO%2FG818s4bui9GY65zMV%2FiOEug%2BedUgJ%2FTFIgI08mYY32NC%2B8uhkH%2FldgKuLDpf1U%2FxIeB7c7zUUEnW0LgdFsI%2FPhaFpzPiYKVCofpc28xx%2FrMi2A42RwMJ5tCfk3dEWcwWIgOr%2BxbEFXR%2FS6yBoBbP%2BA446DMr5foAUn18jDNk0Q7oip7Ibq6%2F3F4WbfOoPPOgjpWM7%2Bq75XwPvQkPcecZRyaU1sA0polaiWpGXs%2BZQCk%2B4VN0C58BM2CKngrfNjUzK8yGgxAl2EAPes3Nk%2FUFIdFMojgTIZmOrVxeFJHuoXNg0Y2Fx6yua0VHJ61GgA9WiwWf0d2nQcrMkiLxeL97e3tf1UDoK1zc3PbCgsLpfCsDJoVgfTu3buhsLAQ8vLy2tPS0mYNFqBZLFYyDs9UULxgwQJaKYHo046Ojn9XFaAlhwSTzczMaKHZ2tpaRvj36EDa3NwcDA0NrzMYjM%2FUBuhie6OAEvsB17mUAM5l00ygfJoJVEyXV7nkuTICSN8hQHSxvdEFdXLR367WCbjLMYZnqebQkmEBbQRw%2Fn2rJbzOtoI3FHot0e8EkG7NsITGNAuoSzSFU4F6F7Z4Dz4XvTBpXIDfDgask7jOZHAOOmQAQYcpdAgTEaQ3fIfFOtYU6sKStPEX3GMHn4s2SzgYYJNzHYtr7KmQOM7VBGiug0kH6uU0cX%2BdRLUDIL2nEuwK74Ht9hKw2HLiglFkwaDn2cwMCzg4extcdz4IJS7H4GfX4wRwPgWl7qfhrvsZOZW6n4ZS99Nwx%2B2UFKRvuR6HG6zDcPqbIsiy513wN%2Fb5WA14DhiAZ1lw3mljB7tsJkChrbx22WDaSQDpfAJE51gxL6iVi56zMQB5CglxjR0D4LxyFyC%2FQkCri%2BTlV4hp5a4BkF6xA3OvF6UDcoy4gOwHn4tetHpsgF%2BItjSuQQbnTVw92MSjkOQ5IkjjsQ7%2FcB1YGjD2gvviweeiHczmBbjZLgWvCX5y4IzD8qLJAXIiwzQO0d4TVoEH0xccLedfUCcXbTrLOWDS%2FBUw3TdQ4jqTwHlNGHy1JpxCkudkQDoEvlwZBFN8%2FMHK0fMCORetDKA72YHfQGJoPwgiZF1nHJxxWE5ly0sGqAkgLYXocOjlBO0dZOZ5evelmF64GoPBL%2B46E8H5doZikUG6ZAvAdR70XwiDd1ejj8CFTarA6igul4uy9sfMOtUa0n26LUQa1yCD8wWxYhFB%2Bsd2zL0%2B8wqD6MMNoVc3Czj%2FyY5T7VBheFm3WVRltzi6esB1xh1nHJoF9wGEFBJIxCe40jhEx9YCRFX2QFRV%2F%2FXwe12fqPp%2BNQmqdJsE1W9fCRugX9g44DpLwVkCy%2BkUIsI0EaSFzSBKegzNwir4Q%2FCwtFFQ%2BZ%2BDAOgvGti8Z3jWuS0Oi2moCs70II1B9AM2r7qMy%2FtsMAAtFovThwrPdCDd0dGRMUiA%2FnTr1q2VZOdZHYAmgvSePXtg165dkJOT8zwlJWW8qgDt5OS0yN3dnRKeFYGzIpDG89EeHh7AYrFSVQVoPT29DaamppTwTAZnKimCaAMDg2M6Ojp%2FGTRAF9sbziixN%2Br7mQTPRHCunG4CVRSqlKhi%2BoAjTQHR2YP541WwfPyMn2ON%2Bp4ky8IzEZz%2FyLGCt7ny%2BiMH0xsJRL%2FaKgvR1ZtN4FAAY1DzeCeMnbFym05fwF49OXjGwXnTEcUKOjwA20SIXr2TAYuSxw1qHhPOtzOss670MXfdkYVnIjh%2Fdx8mffeAQvcxHagnONIEiN5WDOb8I4OaJ9pq3Yzvvtrad9X5BxI8D4DzPfczUOZxVk73JM%2FddT8jdaSJEH3y652wZUJU9iDheUaeFbOPDM9EcC5SokLbCVJHmgKiBzUPmuk%2FA3nx%2B9CSHFl4JoKzXxGg1bvl5Yc%2FVyTrSOMQvSAV0DfBg%2Fs8r%2FhixspN4%2Ftw55kIzzg4B8cr1ibeAGwTIXpNmDb4%2BI8d1DyzTd1muNos6fO0WykDz4rAmQ6m5SF6OXxt7jmoeQynOcyY4Lm8b7rvRnl4JoDzLP8IOcnANAVE2y9cDWZzXLNVBehOTuCn7zaHPJU6z0R4JoNzGkdeZJjGHWkiRPPDoZuz0Vs1eA7%2BR8%2FF6IdwJRKgWCAPz1JIzgT4hUK3cWUMwLYMRHOg52IUwKUwpQcLOXG8UYlbOP88%2Bij0%2FqnWYKnzTIRnHJDPd25SKFqIfhEMp1pCoPBKZDQR2mnhubzrLxEV3XcjqjHnWQaeCeCc9ECxhPdlHWmiEx1d2QMRlX3RqrxfLfzqUY38yuKXglroS2oiwTMJnDNb5CUH080yEN0u%2FBVaBNXwUlDPJwP048QrqIITR1iEguWT69i8%2Fc81BM9kiG5h8%2BA5mws1bN7We2SAjoxGLWXlqKO7G7W3t0slEolcu7q6NAbPZIju6uoCkUjkRQXQeFyDmE3OyMhILSgo0Bg8U0F0ZmbmISqApuhrHuPm5tbs6ek5JHimc6O9vLzA3d29z8nJaRYVQJPcZxsTE5MOdeFZGUibmZmBnp5exKAA%2BsZkw9E37Y0aqOBZFpxNpar%2BEtPA97CfwR1pHKLxOAeWiTacpsofr%2BT5Y0ZfDDFo%2BDXJTA6eieDcTpAozxpEedbSxzhM4440DtF4nOOXOGMoWD5epXnc474YvSxLuyFgDwU8E8A5%2BKjhgI5JJHlMhGjcjSbGOVZu1wHvhLEqzWMUuXO0ZerZBuZOeXiWAefvBzT5hwaY%2FEPDwPdwmMYdaSlEY3EO6%2ByrYML5VqV51posGZ0%2FTdhw2emAHDwTwbnc40eCzkmEPcZhGnekcYjG4xzfz8qBaKt1Ks2TbWk7OteK2UAFzzLgzJwk1W7mRNjNnDjwPQJE77KZIIXogTgHE3KsmCrNgyYtHo1cYhvQ4q3y8EwHzmv2YpIDaokjjUM0HufwEgCa6a%2Fa53nJv0cv2zCugRKeCeAcsllfqmCJpI8JEL2JBNHrY3RhZfB48F7xhUrzzDR2Hu1stbCBCp7pQNln8jrwmbxOJYj2muAHrjZLYLapm0rzMOymjrZxWdAwfdkGCngmgPPaSHrJwDQRorE4x0QvXzCc5jBNFYDu4QRG08KzInCmg2kiREvjHBHwbnPw4w52oNJDhf2XwgPhQiiWXaaEZxyWsxQIh2mCG30rdSDOcSUKei7HNMOFTf%2BtzH0uuBAVeKI5hBaecUC%2BSFS3RJLHRIjGQZoY55DkoV%2Bn5EmjHAoAumd%2BeGUfcGvl4ZkOnLc0YKKCaMF9eYjGMtG9b8PvdWkrbdzgVzk18auhV%2FhMHp5lwLlVgQgwTYRoSZzjpaAeXgnuixsFVcZcLhc1CipREw1AV3J4Ux%2BxeX3NbB52GJATP2R4HoBoLM7RzObBb2xeZzmHZyMFaA4P3YuJQ23V1Ujc0yM93CcSibQ6OztrNQ3PZIju7Ox8%2BPbt238qA%2BjU1FSTvLw8UVFRkUbhGReeid6%2Bffu71NRUB2UONIvFSps3b55c5lkdeKaDaE9PT3BxcSlxdHT8CxGgSQ0ZHxkYGJzHM89DgWcqiMah3MTE5A8Gg2GgMkAX2xsF3CJknonwjIMzDsw1FJKFaVmIxjPRP2N56FJVoxtV8SbSzDMRnt%2BSgLmDQkSYJkM0nol%2BKDSDc8H6Ks2zMGlcwOqdDFi%2FH3ONyfBMBOYQChFhmg6i1%2B7Rg6WZ2irNY5ZwMMBmWzFMKCqTZJ6J8CwLzJN%2FeEghAkyTIBrPRDMLfgHLlDMqzbOZGRZwwmGnNPNMhOcBcMaAuWKevIgwTYZoPBN9yXE%2F5E5JLFXRfQ7II2Se5eCZAMx7KCQD0wogOteKqdI8aM7GALQoVTbzjMMzGZgViQqi8Uz04q1YzZ2K0Y01YdqwIRYDXjI8UwEzHUzTQXRAFAOWrR%2Bn0jwOZvMC3G2XSzPPVPCMA7MiKYJoT7uV4GS5QKV5TGc5B0xeuFqaeSbCMxmcZ1OIDNIyEC3JRE9buh6snL1LlQG0mLNR611CyAv5zHMcNTinc%2BWlCKLxTLQkD93D2bhMifv8t%2B6LEU1wnTOQeSbCsxw4b6UQCaRlIFqSib6RAHAxBOByxDoFBwdHJSZxPj36KPTZmRcDmWcyPMsAsyIpgOgzr4PhVHMIFF2NSFDmQkdWdD2IqZXNPJPhGQdmRaKEaMk1OXUAEZV9EFHZn6gMoJ8Kyqvahb8OZJ6J8EwG56wWeZFBmgjRkkx0t%2FCZpJ3jQSbW9FGL2gQP0LPEa6icEyfdJFjG4aFaDu%2F7RjYh98zhag6g2QOZ6OdsHtSxebvwJSsV0bHofk4uEnVg4Iy7zx0dHf7DBc9EiO7u7oaOjo4Q%2FHU7OzvR06dP5SIcGRkZGTt37hxS7llVFzorK%2Bs0sfEjMTGR7ED%2F283N7SXZfR4KPFNBtMSFBmdnZ0d8QcvXX38tA9C6urpzqKIb6sIzHURbWFiAvr5%2BHoPBUA7QNyYbfnzT3qgZd5%2BxA4NE55kanGtpQJoI0Xgm%2Bo6sC%2B2qxH3%2B%2BHKYQfPjLVh040UmFsHAnWccnsnQLN5GDdJEiMYz0XiU4y7HGHb5aiucxz32i4%2BXZ2s3y7jPFPAsB87HaUCaANF4JhqPcvjtYIB34lhXxe5zwcdWaT824%2B7zxH1VMPHbmgHnWQrPJGg%2B%2BCslSMtCNJaJxqMcNjnXwZS731WJ%2B%2Fzxzulbmq84fw8lLsfgtusJuON2Uuo84%2FBMhubKeedpQHoAovFMNB7lODR7G8RYb3BV4j5%2FnGvFbJZxnyngmQzNe2lAmgjReCY6X9aFdlXiPn%2BM3NjN0ugGnnkmOs9UsOy%2FTzlE45loPMrhKQQ0a63iz%2FPif3%2B8fOO4Zhn3mQKeQ1QQGaLxTDQe5fAL0QbvlV%2B4KnGfP3a2WthMdp%2BVwfNi%2B%2FWqQ7QkyuFmuxTmmLm7KnGfP7Z1XdQ8fbnEfcYPDOLOMx04B0TRgzQO0XicQxLlmDR%2FJRhNd3BVBNDdnI2eMu4znnkmO89U4KwIpKXZaGKUIwL640PudnECabPH7y6GfQMXQ7FDg7eSJQcGic4zDTjfUQTSmaRMtCTKcTUGui5E1sCl0L%2FSzbP1QIzzKQr3edDwTAHROIjjUY7TbSFw7HHI4wQh5384NFno8LJu24jKvndS91kSwVAGz8kPlEM0n5SHjq4GiKrseR5W0fsP%2BuxztUmToOoddmiwFXON05oJzjMdOLcpAGkCRKcORDleCxughV%2FT1sqv%2BWcbvxa94D9AzxOuozJOHCqXLDmp4PDG%2Fcrm%2Ft4shWfNuc%2FEKEerpBLvIYfXUsnh%2FbuKw0OV0bHowbbtqKOri%2Bg%2B%2F7Wzs%2FPWcAM0DtGdnZ3VIpHo7x0dHai7uxs9f%2F6cDNCf5uTkPMLdZ03DM9mF3rZtW0daWppxWloaysjIkAI07gI7Ozuv9vDwkHGfNQHPVBDt6ekJLBZrHxGgSeu5vyW7z0OFZzqINjY2fqmrq%2FtvpQBdbG%2FojB0cHIhulE8biG1Uk6CZTmSIrqSIcvyMZaGPKvoDttN3vPM9rjE0pw1EN14TYhsiEjTTiQzRf%2BTIRzkaBGZwcqOewnm8E8c6r9qBuc94dCPoECG2QYZmOlFBNNmF3q0HS9LGK5zHlPuts03udcx9lkY36qSxDRl4PvgrveQg%2Br5clMN2x22w2HLiqOJFKRucD8%2FZDjddjkijG6XupwmxDVlophMZou9RRDkuOH4LmZN5R5W4z855Vlj9HB7d2GUzENvYTYJmOlFBNJULnWPFPKok%2B%2ByMvJMw9xmPbvgVUsOz%2Fz56kSHajyLKsSQLkFP4USWLUpxXhWDuMx7d2MQlZJtVhGdKiCa50GsjdWBpwNijSrLPzm62SzH3mSK6QYZmOlFBNNmFnsdcAY6W848qWZTiPHmBn8R9DpXJPOPusww004kE0VRRjmlL14Olo%2BdRRQDdFx98SnpwkM59VgWeyRBNFeUQRAIkhvV2cjbSbprr%2FDH0EFyLkXWf5WIbBGimExmiiZloPMrxUwL0XQjrh4shenTzfFcWfvB0WwglPJ8fLDzTQLQ0yvF7CJxsCnmXvit2Kt08EWUd%2BdES9xmPbgho4Dn5Ab2oIJoc5WDXYAcKwyu6J9HN08C%2Fk%2FFa2KDYfZaBZjqRIJoiytGV9BSaBNXQyq%2BZ1cyvQi38OvQ08Soq47BROScelXHiUSUn3vupjPvMGxaAxrPQT9jxUMnhuZZzeKgsOhbV5W1D7eIOaQ65vb3dsqurq2ekALq7u7u%2Fo6PjSzqATk1N%2FTI%2FP3%2FY3GeiC717924oKCiA9PR0f7oIB4vFOjgc7jOdC%2B3q6tro5OSkRXSgJdnnfxkbG7%2FQtPtMB9BmZmagr6%2B%2FQgWANsq7ReE%2BV5Hc51oVJAvR1C70TXsjsaJGjiPrdPPq%2BaZy7jMxuqEMnqkgmsqFfp5qDj9FGopTFGwq9EkZn7emUFe5%2B3xcBREgmsqFXvetPvjm6IgVbSo0FxzNs82%2FReE%2BP5B1nxXBMxVEU7rQd8Eq44JY0abClIkxeWfn7pFzn4nRDWXwTAXRVC70T6xDsHtGmjjAZOnHCgA6L08F93mvCpKBaBoXOteKKVbYyDE3NA8tTJd3n8nRDUXwTAfRZBd6WR4gd54YTabf5OjjPzbPP1xnyO6zXKSDwoVeH6MLvhvHixVtKvzGwivPg%2Bmr1H1WBM8qQbQkC82y9hErauQwd3DLm7pkrZz7TIxuKIVnKoimcqFXBIGdxxIxY8K0j%2BkA%2Bl1CaCOl%2B6wstjEYiCa50N2cjV%2FTAVnPuZAncIMn7z7%2FQnKf76ggGYimcKFvCgEuhcG7i%2BEeFNV1o7hc7ugjv4Y%2BOvNKQ%2B4zQVQu9Nk3wXCyKQR2XYoMoAXo8q66uDrl7rMieKaDaCoXOrz6HYRX9q6lm%2Bcx%2F25lh%2FCJvPtMjG4ohWcqiJZ3ofuFTdAirIUXgvqwVkEdeiFoQM8Tr6MaNhvVsuNRDTse1bF5gucEgNY0PA9EOfDDhDyo5fA4lbgDnbcdibu7iWu6%2FUYCnkkxjlCRSIS6urrQs2fPpGu6Jau6g4iHB4cToPEYR0ZGRl5KSoo0wsFisRCLxULOzs6fuLq6VhABWpPwTNXK4e7u3uPk5GRL4UDPwuMbmoZnMkQTYhz5SgH6pr1RCTG%2BQcw%2Bq%2Bo%2BkyFa3oXG3G08xnFjsqE13R%2Bw88H6Jb9JDg%2B%2ByJTNPqvqPpMhmuxCv8zCstBNaRZQyjaG3CXjaOdZmqVdQhvfUNV9JkG0nAstqbZbv18f%2FPIZ4MkbQzuPZcrZEpn4BiH7rLL7LAfRJBd6XzVM2FsFdkVlYJ19DUzi9tDOs20qvwQ%2FPIgBNDH7rJr7TIZosgv9iyQLXexyGA7OzoMwizW08%2BRaMUuI8Q1i9llV95kM0XIutOTaeIwj29KWdh7kElOClmYPADQx%2B6yq%2B0wF0TIuNN4PvR1bsDJtJe08yzaMK6GLb6gDz5QutKTabkOsLvgFa4PX8s9p53G2WlhCjG%2Bo4z5TQTSVC%2B09YRW42SyFr0xcaOexZs0vkR4epADo2YMBaAlEU7rQq0JhxspNMMl7BRhMmWVNB9DAD%2B%2BSAeihuM8qAnQ%2Fb1MCZf75WvRf4GKweODwIBVAb1UdoO%2FQudDEGEc0dJ6PSKMB6P889jSkgza%2B0T0E0bjQp9tCYN%2BtiCK6HHR4Zd9bmfgGIfusqvtMBdFEFxrvh46vxw4TRpR376YD6EZB1Wvp4cEUdd1nEkSTXWgJQL9LaoJXwvvQKKg6%2BEr4AL0W%2FoZa%2BDdQLTsO1bF5qI7NQ%2FfZvEONhIUpwwbQHGzBSiObB%2FUc3t4aDg9VR8eih3nbUWdPDxKLxUgsFqPOzs6MkQRoSYyjUCwWo56eHtTY2IgyMzNRVlYWysrKQlu3bt2K5581fXiQKsZRWFgIW7duPZeeno6ysrKQUChErq6uiMViIRcXl%2F%2Fn5ub2ajgBmgjReKWdi4uLu6urK3J0dESGhoZIX18fGRgYrMd7n4cLoHGIxl1uIyOjq6oAdNvtKUaUhwerBwnPtQpiHKWSLYVYpR39mu9rEYZtz1LNKQ8PigYJz3QALT1MmG4BFTwTKFxBv%2BbbN1unbd23NIcHBwvPxxXHONYf0IdVBQzwVrDm2yrjfBvW%2Byx%2FeHBQ7rMigMYPE%2B4uB5u8G2DK3U87T9GXqW0%2FsQ7RHB4cHDzTAfTAYcKjcNxhB8Rab%2FRSANBt26xsKQ8P7h4kPO9VGuOwwyvt6Nc0u3Pb0LI86sODg4VnWoAmHCZckAJo5lr6z%2FPG8W1477Nc84amAJoQ41gdqg3eCtZ8s6x92vDeZ7r4hqrwrBJA2y4DRWu%2Bme6L275cEUR7eHBQ8KwEoGf6BcPkBavA6MuvvWgBWhDxTmPxDUUxDmKl3ebgvdQAHft3uBTaj%2FU%2B0x0eHAQ831EU40jBYiLX2CA%2BF36IBqD%2F%2B2RjSP%2FZNzSHB4cBoE%2B9CIYDd8PP0wJ09bteXp1igFYVnukAGj9MuLlesuq7vPuiggq7nn5hk5L4RtvQAFp6mLAZ%2FhA2wDNBxY3Xwgb0RvgItfFvono2G91nx6P77HjUwI6%2FNNIAfZ%2FNO1nHjke1UXHot7x81NXbizo7O3EdfA8A%2FSMO0E1NTWjr1q0oOzsbZWdno5ycnH149%2FNIAXROTs6trKwslJ2djbZs2UIE6PHu7u69xO7n4QRoLy8vHKCXubq6IicnJ2RkZIQMDAyQoaFhIr6ue6QA2tjYuEYVgO4mAjRV%2FnkYANqP7g%2FYjSjD7kZC%2BwZV%2FlmTAF0ZbwJ7%2FLRp51mRq9O9ngDQlPlnDQL06p0MmM8fSzuPVebFbmxddyV9%2FlmTAL2tGEzjv6OdZ%2B%2FMjO4brMNSgKbKP2sWoAuAYxPkpwCgu4kATZV%2FHgaApp0HecR3o%2BXbBwCaKv%2BsaYD%2Bah395zlwfPcGAkAPJf%2BsCkCvCdOGBX5jaOdxsfbppmvfGA6AdrddDg5mHrTz2Hks6cbWdYfQ5581CdALV4HJjLl%2BfyaAfrc5%2BHtqgI4ZDZfC3mHruhXknzUJ0NfZ0Hku7BgNQP%2FXqebgd%2BcIAD3k%2FLMSgD7zIhgOlIVdpgXoKnhHBGiBmvENlQG6FiC8vOsqLUALat%2BBsHkEAfpXeCIoL%2FldAtCt%2FGJUx45D9Wweqmfz0AM273QjmwetccNzgJAGoI%2FW4gC9bTsZoI%2B%2FB4C%2BSgRoifOMq%2BA9ONA3MjIyqBzoMW5ubh3vwYH2oQDoLe8BoB%2BqAtBisgM9AgC9gO4P2E%2BRhuLnJAd6OAG6gmcCRSu1aefxzdERkx3o4QToVQUMmJ84dgG9A31BLOdADydA590AU94B2nl2z0gTEwH6jtupYQboHRBnHbhAAUCLyQ70CAD0AnoHmieWc6CHG6BnBSxQ4ECLyQ70cAL06lBtmL%2FyiwUKHGjxe3CgFygAaLEMQI%2BAA20845sFCgC6f6QBun9z8Baa1d2jqB3ozGF1oDvOhGTSAPTfTjbJO9DDCdCnXgTD%2FrvhRbQd0NXv%2BsgO9LACdA1A%2BD0x7TzNwprekQXoBviNf%2Fc7PAPdmHgdVbNjUQ2bi2rYXFTH5qY9HwmAJixUqeXwBJWEFg4SQG9%2FDwB9iBjhkGSfUXp6OsrIyAgf6Qx0ZmZmYWpqKsrIyEB8Ph%2FPPyNnZ%2Bd%2FuLq61o5wBrrP2dnZnsVioblz5xIjHGHvIcLxiyoAXfrzCEY4JFV2ExVkoEsfbRmZCEezJAO9bcm4iQoy0KUBe%2FRGLMLhl88Az%2FgxExVkoEuxDPTIRDiwDPTeiQoy0KWXnb4bkQjHTZcjWAbacs1EBQBdOrIRDibkWDEnKshAl6LF2SMT4ViRj2Wgv%2FSbqCADXYpnoEciwuEXrA1evp9PVJCBLsUz0CMC0DZLYZaJ60QFGehSLAM9MgA9yXsFGE6dPZH2ECE%2FvAUEkSMI0BHQnxDyDW0P9PmgJqzCboQiHFej4c2JTS508xx9HNL04%2BuRi3CcbguBwiuRtBsSwyp6nyjLQGsSoCNrAMJL25fQzfNMUP5br7BxxAD6lfA%2B1Cf%2BvLqZX41a%2BPXoSeJVmRq7Sg7P7YkEbtvYmtlAqKiF43EcDyrZvK%2FxFo76PNkauz%2FDIULSIpXJ27dvfzdSLRw7duyA9PT05QpaOPaNcAvHr05OTp84OzujOXPmEA8Rzh7pQ4QGBgbbVWnhENIdIqyaPpRDhCYyhwgJXdCvFLVwHAxgCIktHOQFKuoeInxLOkTYmmEJz1LN4XqE4StFLRyLkscJ%2FYvoO6DVPUQo3Ux4SK6F45XCFg7%2BEaFMC4fcAhU1DxF%2BRzpEONDC8UpRC0fShCjhmW920xwi%2FFHtQ4T4im%2F8EOEt1%2BNw3fkgFH2Z9kpJC4eQ7hBhEXOS%2BocIJdfADxESuqBfKWzh%2BHqTUKaFg26BylAPEeItHB68V0paOIT%2BEfQtHCFDaOEgHiIktHC8UtTC8bW5p5DYwkG3QGXIAD3QwvFKUQuH2RwX4ZTF%2Fpo%2FRCi3UCUEpvsGAtNj8SslLRwHRvgQYTckhn1MW2N3NmiP4hYOdQ8RZsofIrwpBLgY2vPqRDBtD%2FQP1WHfnv09ZFhaOIgATWjh6E3OifsnrQN9T7w9rk75ApWhHiIktHD0hd%2FroO2Bruf%2FnNMhfDQMhwipWjgaoYVf2%2FdUUPZpm6AWvRA8QM8Sr6MyLhuVc%2BNx%2FeshO74R64Eenhy0TA80m%2FesksP7p7QHOm8baheLiTV2Bl1dXR0jVWPX1dXV29HRYaegB%2Frv2dnZ1YWFhcOyhZCiB%2FptWlqaDrEHmgjQTk5O80e4BzrfyckJsVgsNGPGDOIa70%2BNjY2fjGSNnZ6enrcqPdD2%2BBbCUkmN3UAOWr0aO%2FIylbuy2wj3Kuph3bFsvH0pe6AH%2BtXWgRy0ujV25GUqeA%2F0fb4ZHN%2Bgq3Aer81j7f3yCT3QBwdy0GrX2JGWqeA90P5FerA4bbzCeUzY39pb51wb6IH%2BtmYgB61mjZ38MhW8B%2FpnsBCeUDhPpFWA%2FaHZ26Q90HcIOWj1a%2Bxkl6ngPdDn5%2B6F9EnsvUp6oO3xLYR4jZ00B61mjR15mQppG6HCedBXa%2ByRt5DQA71T%2FRy0omUqy%2FMB%2BWQCmhumcB5v3y%2Fs%2FYIJPdDcgRy0ujV25GUquPvsH6EDSwLG7lXSA23vaqO8B1odeMYBGu%2BB9mD6gqPlfIXzGE6bYz9p%2FkrqHmgN1djhPdBTl6wDi2889irqgX6XGPalzBbCLbFDh2gqgJb0QL%2Fjh19XtNXu5bGgqXA1mtADTbNEZSg1dtIe6M3Q%2B2PgTdpNhBzuqAP3wr6i64G%2BOAw90IcfhN5TtIkw%2FPZr%2B8iagR5ofr36OWhly1Ti6gDCy7rvKXq%2F7vKv2sv0QKc1EyBaQzV2eA%2B04DE84t%2Br4nK5qJVfi9r4GEDf47IRvk77Hjce1XLi8xuHqcquTbrOmwfP2fFQx%2BZly2wizNuGRJ2d0i2E7e3to8Ri8YURXKRSKhKJ%2FiISiVB3dzd6%2BvQpEggEKDk5GW3ZsgUlJSWh9PR03nDHOAibCA%2BRNxGSVnl%2F6ubm9mSENhG%2Bc3Z2%2FooM0AwGA%2Bno6CB9ff3cEVyk0sxgMP5HpVXeJfZGDcoOEtZoLP9sNEvZKt3LYQYNj5PNFR4kVAWiFcU3miSbCHcuH690nmVbtRsC9uopPkh4bIjxjf3STYRK57FM%2F7HBblep4oOEqkC0ovhGURnY5F4HU95%2BpfMUTEtquOL0vcKDhKpAtKL4RjHriGQT4Xql8%2BRZMRuUHSTco7n8s9J5kBu7AS3JUXyQUBWIVph%2FlmwinOmv%2FPO8YVwDMcYxHItUNsRKNxEqncfJamGDshy0KhCtPP%2B8FOaYuSudx9ZlUQO2iTBE%2FUUqqlTYYZsIZykCaC6Xi4Af3jasi1SIBwgTw%2BYqWw0NF4JbZWIc6ixSURrfwDYRvj4RyFIwyygul4uOPQlpJcY4hmuRClZhF75Y2b9PWFV%2FI7de8UFCVSBaWXwjuhYgvLR9gbJ5GvkVz5XHOFqGFt8QtsBrYQPU8EuWSurzUJOgDj1KvCIT4ZBsI2Q%2BZvO6W6QuNE%2BzhwfZ8dDM5sEjdry4nBNvKYX3mDhUl7cdicRiIkAjkUi0qLu7G4YTognxjXV4fEQsFqPXr1%2BjXbt2oaSkJKILzcjLy%2FtjuLYR7tmzB4qKimD79u39qamps%2FDXxSMcpFXeiMViJc6bN0%2FjLjQx%2B%2Bzp6QkuLi43HB0dP3Z0dETOzs5o9uzZUniWgPRkExOTPqILPRzwLOmATldplTdCCN20NwpSFOOoHvQmQtpV3pVIhduBNTpBNQkm0JJOHeMQDXITIdUSlUdbzOBiqL5K8yxMGhe0ZtcQl6koWaISsFcPlmZpqzSPWeLBINvtNxXEOBoGt4mQaonKrjtgmXpWpXkS7MKCTn69C0pcjlLGOFRxoZUtUbns9B3kTxWoNE%2BuFTNIUYxj92A3EdKv8lZpHvR1YBBalDa0GIeyJSqLswGxYlWaZ9HqsUGaWqZCt0RlXRQDlm0Yp9I8DmbzgoYa41C2RMXTbiU4Wy1UaR7TWc5B9otWYy60ustUlCxRmb5sA9iwFkjnUQTQ7%2Fjh0QpjHIOBaEXxDX74c2UwxuVykehUYDhc50pcaDWXqShbolLMB7iwqUnZLJw43qgfasNiNLlMhWqJyo%2Bvg%2BHYk5AXuPOtaKbwu%2B3BsbVDi3EoW6LCrQcIq%2Bh9ocr7VcO%2Fuald%2BAhzoaliHCq50IqXqPQKG%2BE5v%2FwVYYU4ahZgGegKThyqlLjAlRhAo3oO7wTWxqE5F7qNgx0ebGXzoJHNgzo2b%2F89CTyXcePR3Zg4VLdtO%2Bro6iSu8kYikegfnZ2dtcMF0Ph1u7q6nrS3t%2F83Ed77%2BvrQqVOnkEAgkOagU1JSUGZm5vadO3fCnj17NA7RhPaNK8nJyaOUAbSTk9N4Nze3N8Q6u6FCNNl99vDwAGdn53n4a1JsIkQ6OjqjDAwMftS0C02EZ0tLSzAxMRExGAxDHR0d1QC62N5Q69YUozbqdd6mSl1o8hpvHKDvycc3fFT5A5axcIzW9UjDtqfJ5nLrvNtVcKHJa7xxgMbXeDdL2jf2rtJWaR4P9hitFbmMtnXfyq%2FzlgHoY4NY402Mb%2BzXh9UFurBAOE6leYxjdmlZZV7E%2BqDJ67y%2FV8GFllvjLQFofI033r6x%2BQeV5tloulxr95dpbdecf5Bb500EaDqIJq%2FxHgBobI33TZejcGzODuDablJpnhwrplaelW0b5TpvAkDvGcQa70Jb%2BTXeuVZMleZBU5ZpIXdeG1qWq946bzl4lgA0cY33ghRAs9er9nle%2BrnWikDttvUx8uu8BwPQwTTxjQ2xurA6VAcWrhqr0jxfmbC0XPA%2BaDXWeVPB86LJAXLtGw5mHirNozvxSy2m%2B%2BK26b4bFcc46CCatMZbLr4had8wmenoowpAAz9MCwSRoiG70ETgTmXLrfF%2Bxw9foQqQPT%2B8SQsuhbZDsYDChc5S7kKT13iT4xuS9o23p4JWqzDPqIO1YVonG0Pbz77RAEArqK%2Fbfy88VJV%2Fn%2FBbL7TCq%2BAPXp1667yp1ngLCWu88faNsFJRoCrz3Eo4r9XMr3nTl0TVB92qggtNWuMtBWh8jXczvBU8hLrEkjBVALqSw0NVHN7Ux%2Bz4Xk260NjhQR40s7nwiM0Tl3PibVQEaNTR0bFuuAG6o6MjkgjP7e3tqKenBx0%2FflwGoCUy3rZtW7umXWg8%2Byxxn78muN6KABqxWKwUTbnQ5OYNT09PcHV1LXFycvorGaAJhwjx%2B2%2FIhwmHAtE07nMB7nqrBNASFzpKFRe6Rn33uazYnv7wIPn2vT8jShUXmgqilbnPv20xgwsh%2BmVbvL5QeZ6FSeOi1uzShQ37lbjQx9R2n8vcY1WfxyzxUJTt9pswYXe5YheaCqJVc5%2FLjKIKVJ5HMCEiShUXmgqilbnPlxwPwPap%2FDJ%2FYx%2BV58m1Ykap4kLvUd99LsuxYqo8D3IIilLJhaaCaFXcZ5fYMmSv%2Br%2FPotVjo%2FzDdWSz0IN0oZW4z2Xui%2F%2Bt8jwOZvOiPJi%2B0iw0nQtNBdEqus9lig4Pyv33NZsVpZILTQXRStznacvWgw1rQRnDburHqgC0xIXmDdmFVuw%2BPwY%2B%2FeFBORf6dBBbJRf6F3VWeCcCnA969vjgJpXm4cTxRh2sDdusCReazn0%2B%2Bji0%2BYea0I%2Fpss9yEF0qiomtlWShFbjQVBCtovvcHFHSpvL7VSsoiVLNhW4ZtPvcLXwGzwQVbTcSznysKkBLXOiDxCx0G2fozRutkvXddWzeDiI8KwNokUikNRwuNKG67iHZfcYB%2BsSJE3IALXGhszTpQhOr67Kysk6QDi8qBGgnJ6cxbm5uLzThQlNkn8HJyelrQu4aOTk5oW%2B%2B%2BQbp6ekhXV1dqRgMxihDQ8PzmnKhKdznPxgMhsGgAbrY3mj0rSlGT6hdaPosdI2C7DPJfZ6FBnFLWzB29NVwgydPKFxoRVlosvtMzD6%2FyLSEpjRzuMc1hqIV2oOaZx5n7GjfHJ0nAfv05FxohVnoY8qzz6t26MJ8%2FrhBzWMUXTjaKv38E7tdFC60oiy0nPs8kH3G3OcysMm5Dqa87wY1z3rT5aN3TU9%2BctXpezkXWlEWmuw%2BE7PPmPt8BA7P3g6x1hsHNU%2BOFXN0npXtE0oXWkEWeo%2FS7LPUfR7UPGjK0tHIjfMELckZnAtNhmdi9tm3ANCybYC8kwDNChjc53npF6N9N45%2Fsi6aIedCq5KFVpR9XhWiA%2FP9xgxqnpnGrNEu1j5PButCK4RnQvbZwcxjUPPoTpw%2B2tbN58n05RQutKIsNMl9lsk%2BS9znSQv8wOjLr2XmUQbQwA8fDYLIV2q70FTZZ4L7DIIIB1VhjMvloqeHN42GiyEvqF1oBVnoXxRln1MBSpIArsXA6xNBcwcxz6iDtWGjTzwPeUnlQquchVaUfb4T4cWOUw2eJS706PDKd62DdaGp3GcByX2OrgYIu9PuNpj362bC%2BdFNgsrmPsHzQWahW%2BizzxL3WZJ99pTpnxbUoBbBffQ08ZpcBpqQhTb%2Fjc1rb5b0NrdxeEPKPuPNG7%2ByeS8r2VztCi4G6rioauxIWoJnoYch%2B%2BxHhuf29nbU1dWFjhw5ggQCgQzMSjQmLy%2BvFXehh9rIQcg%2Bd6SmplqT6vOkhwhpABqxWKxIsgs9WIgm%2Fh7evOHi4nKUdHAROTs7o2nTpknjG0Tp6upONTU17R1qIwfZfTY3Nwd9fX0h8bVUBmiJC%2B2jqgtdoyC6QeE%2Bn0Zq3Pat0vap4JlAswouNFEiiuYN3H1uEJrB6SA9teZZKBzns7pARRf6mOLoBu4%2Br92tB0sztNWax2zzQR%2BbvBuqudAyaqBo3sDcZ2bBL2CRfEqteXi2wT7H5uyAmyq40ETJRzcG3OcLc7%2BFrMnxas2Ta8X0UdWF3qMgukHhPqs1D5q93gctSFHNhSaLqnljxQ5APlmAnCPV%2BzyvGuuzOnTwLjRVdAN3n9dG6sCy9ePUmudrs3k%2BbrbLVHKhySI3bxDdZ0fL%2BWrNYzLT0WfyglWqudAEzVLgPk9dsg4sHT3l5lEG0FwuF4EgYqlaLjQ5ukFyn9%2Fxw4sHA2O4%2FjgRuBiusVVzoX9REt3A3ecbCdB3LvDWYGfhsLkfHaoPW37mhZoudCe1%2B3z29xA4%2BmsY3nTx0WBmCr%2FT7hNTo5oLTRZd8wanDiC8vOeeOu9XZWKxz1vBQxVd6BYF0Y0B97lL8BQeJ5ZVyK8Qr0Gt%2FPvoSeI1mRYOorBGDl7a8yH2QhN7n5%2ByeVDN4W0q58jCcwWHh8qjY1G9fAsHUX%2Fp7Oy8rikXmuA%2B%2FyQSif5KBvbOzk7U1NSE0tPTyVV2KCUlBSUnJ6P09PTQHTt2DLmRA%2B99LigogIyMjGQyPKsC0E5OTv9wdXWtH0ojB4X73O7k5GREfi0XFxfEZDLR%2BPHj5QCawWAgAwODoqG40GR4lixOeairq%2FsZ0fEeFEAjhNCtKUalt6cYUy5WoYLoasreZ5nmje5ieyN9pObtQoh%2B6W9JZpSLVaggWkTR%2B4w3bzxPNYdbMUbd25aOU3ueZVk6pWv30ixWoYDoYKreZ4n7vG6%2FPqzcxuj2ih%2Br9jyWqWdL7WgWq1BDdIN877O0eeMeWG%2B90m3C3qv2PNumCkovO9ItVpGHaAyeZXuf8eaNn5wPwv6ZW7vDLf3VnifPyrZ0u7Ud5WIVKojeTdX7LNu80Z1jxVR7HuQSW4qW0ixWUQTRVM0by%2FIAeSV2oy%2F91P88bxhfGkCzWIUKooOpep8l7vP6WF1YuUm729v3C7XnUbRYRRFE07nPrjZLumeZuKo9jzVrfuk0BYtVZimDZ0LzxpcrgsDOc1m34dTZ%2BuoAtASi6xW60GSIpoJn2eaNPuCH66sDZNhilcBauJGoYLFKlgJ4JjVv3BQCXI7sbz0WpM48oySLVerO0C1W6VS99%2Fl8%2ByY4%2BzYYTraE9O%2B%2FG27KYavuPpMWq1RxVThQSAfQxOaN%2BPsAEdXQH%2FHLa0N136%2BngvIKhY0cZIimgmdJ80a%2FsBFe8Ov6yxKvGcttQORXoRZ%2BHXqaeAWVc%2BLkYJagfz1k8x43sbnQqkatXRsbPzjIhUY2Dx6w42%2BVc3ifUDneZdGxqC5vGxJ1iukAGolEouldXV29QwVowsHBLpFINIXG8Ua9vb10GWg8yvEf2dnZdwsLC9Ve741HNwoLCyEnJ%2BdBSkrKZxRut7IIB55Ndvfw8AB1ohzk7LPk4GAM1eu4uLggOzs7WoBmMBi6xsbGv6vrQpPhWdL77EN%2BnUED9E17o2k%2FTzHqw11oql7oajl4pu59lrjPiWgIt12%2B46fdYRv3NaaZwwuaXmgRCZ6pep%2Bb0y2gNsEEDgYwhjTP%2FMRx0%2FzyGX2KeqGDSfBMd3BwzS5d8EkZP6R5TLj7p9nkXOubsLsMc6Epe6EbZOGZqvd5dzkw80vAXHB0SPPEWK2fdnBWbl%2Bxy2GJCy1%2FoBCHaPxrqt7nmy5H4fTXhZA0MWpI8%2BRaMadts7Ltw11oql7o3WR4VtD7nGfFHNI8aNbaachL0IeWbcMAmq4XWpn7vDwf0KI0QF9vGtrneeWYaX7B2n2KeqGDSfBMd3DQP1wHfPzHDmmeOabu09xsl%2FYp64VW5D7j8OzB9IVvLLyGNI%2FhdIdpE71X9M1YuYngQsseKJxFhmeag4NTfPzBfI4L5TyDAOhpIIh8J3WhqXqhcYgmPqbqfcYWp6SoC2NcLhe9OhY4Da5Gv4OSJFkXWuZAYRYJnmkODl7ngvhMYLra83C4Hx1%2BEDbtdFvIu0G50HQHB18Fww%2B1ofmKep%2BVu9B%2FTIuqgX6pC11PH%2BVQ5D5vrpf0Pt%2FrzB3K%2B3Uv8dq03wUP%2Bt8lNUlcaIpeaByiiY%2Flep%2BbQST4DR7wb%2B%2Bgep0WQTVqFdSjp4lXFQJ0OXag0OsJMQs9CBe6jRMPrXE8aW1dFZs3iZy3rpTpgVYY4cDr5bKH6kLj0Q2xWJyi4HXQ69evUWFhIUpKSqIDaJSamvrl9u3be9Q9UIhHN%2FLz8%2FvT0tKcqdxnBT3QcmKxWPvnzZsnF8dQ8%2BDg39UEaKSnpxdEXu%2BtCkRTHRw0MDA4SvUagwZoSS90Ht4LTRXlIII0fXTDGG5NMaoptjcajYZ4O7pON%2B8%2B3xRa0y0poxxEkKaLbjzaYgaXQvVrUuePHfI8i1O18%2FwL6bcTEkGaLroRsE8Plm%2FVqfFgjxnyPObC43nM%2FFswYTd1rR0RpOmiG3a7SsEy7VyNUdSuIc%2BTNik27%2Bw3u6HE9RhNlONHWniW1tY5fgf5U4U160yWDXmePCtmHt4LTRXlIII0XXRD4j7X5FgxhzwPmhuahxZl0LvQRJCmi24szgbkEleDJi8Z%2Bud57bg8RbV2iuBZenAwmgHLN46v8Vj6%2BZDnmWvhnaeo1o4I0nTRDa8JfsCyWlQz05g15HksvvbIm7p4Le12wlkK4Hng4OAGsHFZUMOYMG30UABaAtG7lLrQiuB5YOvgY%2BCHjx4KkHG5XNR1emMB%2FBQPUJKiIMqRpTi6UcwHuBD09Mmh4CHNw4nlfXT0YVjh2ZcKlqt0qhDdeBMMx5%2BENB2sDRutLjxLXeiyzu3sWoCEOmoXOkmFpSnceoCwqv6m8Jsvhvx%2BNfBv5yncTignutq6ypbixHOjlQE0XYSDqHoO74dGNk%2FqQqsC0eToRh2bx6ODZ9lFKvQOtET%2F7Ozs%2FFVdiCZENypFItF%2F0QF0V1cXevLkCRIKhVT5Z5koB36gcLBRDjy6sXPnTsjMzMyng%2BfBALSjo%2BM4Nze3lsG40BTRjQ5nZ2c7Oqcbj3CMGzeOuI2QrL8aGRn9NJgoB1V0w9jYuE1XV1dHYwBdbG%2BkdWuK0XPygcIBiB4AaarohuTgYN9Ne6OJSAO3zEVjta5GGDwnHyjEIZoI0lTRjcY0c7gTZ9S3y3e8RuaZxxmr5Zuj85x8oBCHaCJIU0U31u%2FXB798Rt%2F8xHEamcc4plDLKv38c7kDhThEE0CaMrqxuwxssq%2F2mXD3a2SejWa%2BWoXTk5%2BTDxTiEE0Eaaroxg3WIfhhVm5fjNV6jcwjqbV7Tj5QKIVoAkhTRzeYsM3Kti%2FXiqmRedDU5VrIjfNc7kAhGaJxyUU3tgHyEvShWWs183le%2BoWW78bxz8kHCnGIlgFpiujGhlhd8AvW7pu%2FcoxG5vnKxEXLxdrnOd2BQipRRDf65pi6a2QevUlfatm6%2BjynPVBIBGma6MZE7xV9htMdaOcZFEDzw7VAEPlSZYgmRzewg4PvQBAxcagwxuVy0fOjm7SoDxTiEJ2pOLpRkgRwJfrdq2OBmpjno4O1YVpUBwplDhV2DsAzzcHBd99XhE9TN7ohV2tHcaCQDNFEkZemRNXAu%2FA7f0zWxPtVknhOq0lQ2UJ%2FoFBxdAOEzfC74MG78sSfptK9RpOgCjUL6tDjxCsqAXQ5N177VzbvZTMBolVr3ZBGN34p5%2FD%2Bgyq6MZgIByHK4aHOchVCdKNHJBJ9pcjp7urqQs%2BfP5c6zUr0z5ycnIeDWfFNim48TElJ%2BZei11AlwkGIcqwir%2Fimg2iy%2Bzxv3jxwdnbmKHG5VQFoxGAw7ExMTMSqRjmoohu6uror6VxutQBaEuVwJR4oxKMcFdMHmjkqJc4zuXVDEt1IRhq87fHTdi3jGkMTKcrxhtDM8UcO9vg1qfO5LsEUDq9jaHSeBYJxrqsKdOVWfBMhGneeifBMiG5odB7T%2BO9dbXJ%2FArkox4F6aTPHpO%2FuS5znOpnOZyy6cUyj83BsglyPzN4ON12OyEQ57rqfkTZz3HM%2FA3flWjew6EbyxGiNzpNrxXQlHijEoxwyEC1xnqlaN%2FKsmBqdB321zhV5J4FclGN10UCcw69I8rhQtvPZJx2QQ7BG51m4aqzrKvKBQhJE484zGZ4l0Q2NzuNg5uHqTjhQqAiiyfDswfSFuRbeGp3HZMZc10kL%2FEgHCsMksBxOAGf51o0pPv5g7uCmcJ7BALTEhXaVOVBIjHLgII1%2FTW7dwNznLE3AGK43J4Nc4VosyEc5CM0cODjLRTd40HUmMEdj83C4Hx1pCHM7RXGgkAjRODhTRTcO1oUWDiW6IedCl751jSbW2tVTQ7TwvnzrRlwdQNjdzgJNvl8V%2FBuubwQPCAcKCVGOdAI4U7RuiAS%2FQQP%2FTpGi6z8TVKLnglr0KPEKuseJQ2UcnlJVc3irVY1yEFs3HrHjOyo5vEn3lED6vZg4VLttu0oA3d7ejjo7O78bDEDjP9vT0wNisThdldfo7u5GR48eRXw%2BXylEp6WluW7fvl1lF5oQ3ehLS0tjUR1UVBegnZycPnZxcTlDPlBIhmi66Iajo%2BPfNQHQkhXfCapEOWiiG8d1dHRG0V1bbYCWRDkOEaMcRIiuIMAznnvWdHSDfDu5UffQfcFAlIMI0bheE3LPremW8FuS5qIb5NuSdO1D%2FkWkKIcEoqUiwvN3%2BrB2rx4s01B0Q%2B7%2Fak46eYhZcHsgykGEaIkm7q8byD3vqQS7nXfAMvVHjUQ3yLeMyZxD5%2BbuJUQ5BiD6rgw8Y7nnEtdjcMnxgMaiGxRRjkPEKAcRogsJ8IznnjUe3SDfnMIPyUQ5iBC9mgDPxOjGUs1FN8i3pevGHfKPIEU5JBAtFQGeN8bpQkCU5qIb5Juj5fxD85grpFEOKoheOGmtNPdM6HzWSHRD7sDu3HmHpi4JIEU5wgjgTILnVcFY57OC6Ia6AC2B6JMyLjQZoqWxDXJ0I%2FKRJqIbZPX%2BuOE4ZZSDLCk8pwDcSAS4EPRkqNEN8oFCTix31JFfQ0%2Bd%2FT2EEqKJwuH5x%2FZNcOZ1MBx9HNKoieiGnBN9r%2BsIp44Q5SBANC4BObpRCxBW0f9cE9ENsn7l3zncKXxCiHKQIFoKz3juuRW6hc%2FgOb%2BiiS66IXWg%2BZWomV%2BLHlOs8lakOg7vcKMSiB6IbnDhKZsHNRxeWAUnHnOZFehedCyqVdGBlujzrq6u56pCNCG6cVckEv2XpgFaEuXILSgoUArRuPu8c%2BdOyMjISFHB4R4sQCMnJyddNze3VrooBxmsvby8wM3N7bWTk5MF3vWsKMKhLANN0H8YGhr%2BoijKQRPdaNTV1R2vCM6HBNDF9kaf3Zpi1Iy3cuAQXUbQPXl4Ft%2B0NzJFw3Db6jP2s2sRBs2Pt2CtHDhE%2F04Q7jy3ZljC02RzKIkxEucvGzcs83jyxn7mm6PTHLAPa%2BXAIZosHJ7XfasPK7cxxN6bh2ce49jdn1llXGi221UqaeXAIbp2QLjzvKcS7ArvgvXWK2ITzrfDMk%2BQ2crPCr9Mab7q9D3ccj0uheg7bqcIwpznW67H4ZrzD7B%2FZpY4wnLtsMyTY8X8LM%2FKthlv5cAheidBBfLwLM61Yg7LPGiq72fIjdOMluTIQvTKXQPCnecVOwAtywU0L0GMZqwens%2Fz8i8%2B8904vnldNEMGosnC4Xl9jC6s3KQt9vIdMyzzfGXi8hnL2qfZa4KfHETjwp1nPPfsarNEPNvUbVjm0Zs04zOm2%2BJmLMoRMgDRJGHwHALTfTeC3bxlYsOps5XOoxZA88M%2FA0Hk75QQjQt3ngfguQcEEaaahjEul4sajwR9BhdDXkExH4tm4BBN1i089ywAuBzR%2B%2BJY0HDM89Hh%2BrDPTjwPeXX2DZZrPk9o5iAKh%2Bezb4LhZHNI76GacHMOe3CVdSoB9O1Xn4VXv3vBrSe0ctRjwCxV%2FQA88%2BoAIqqhN%2Fz262F5v35OvPBZk6C6TRrlIEJ0Gsl5Tm6BvqQmeMGv6ytNvKJ0HryF44mKGWiCvnjI5jUSWzmI%2FdDE3HMjmwf1bN7Jcg7vI1XgfDARDlwdHR3uqnRDE6Ibbzs6OmwVRTfUjHDg%2BjQnJ6daUSsHcWFKdnb2zZSUlE%2BGCaCRs7PzEqooB1mE1g0%2FVa47SIBGurq6TBMTExGdC02GZ1NT035dXV03ZdcdEkBLohwOP08xAlmIHhARniULU3zRMN6KVmo73OUYw%2FNUcylEv8waEA7PjanmUM4zhm9X6wzrPPP54xxW7dCFdfv1ByD6BwOppPAsWde9UDhuWOcx5X3nYJNzHSYU3RuA6H3VBGHwPKHoHtjk3QCzhIPDOk%2BcTaDD4dnb4AbrkBSif3E7KRUOzzdYh%2BDonHzYzAwZ1nlyrZgOWJSDANEEEeFZsjBlWOdBswIckKcQq6STQjRJK3YA8t0GyHsLoDkbh%2Ffz7DfGYVWIDqyP1R2AaI6eVFJ4HljXPazzOJh5OLjZLsWiHASIxoXD88C67nnDOo%2FxjG8cJs33gy9XBFFCNA7PX64IgskLVoHpV84qzaMOQEtcaAcQRIJsHpqkAXgGEESsHA4Yw%2FX78SAHuBqDVdJJIZogHJ5vJgFci4W3pwJXDds8HO5Hhx%2BGOZxuC4Gzb6khWgrPknXd31eFBWoyuiEX5fjlrUN0NVZJh0M0WQn3sedjagDC77avG873q4x%2F3eG1sAFA2DwA0akESeAZhM3wRvAQavg3N6qUixdUokY8wjE4gEZVHN68J5KV3G1sHrRxMIgmbhtsYvPgIZv3vJzL%2B0LV6w42woFLLBZvU%2BZCExamrFf1ul1dXejp06doy5YtgwFovJWjm2rBCg7PRUVFkJub%2BzolJcVM1eviAK3CIUJy3GIf1YIVcu6ZxWLtHcQ1FfZAU0lfXz8Mj3KQQZoIz5KFKemEHPXwAbQEovNwiP5FAsylkvtfCPBcYm%2B0F43A7cg63by6RFNoSrOAlgwLaM3ADgu2ZlhCS4YFNKVZQD3fFE5s0B2ReXxSxuf5F%2BrB%2Bv36sOHAAEhv%2BA57vH6%2FPvgX6sGSdO0RmcdceCzPdnsJTCgqgwl7KjBg3isB5z0VMKGoDGy3l4BF0skRmSd1YmzemW%2BKoJh1BEpcjsEt1%2BPws%2BtxuOV6HEpcjkEx6wic%2BWY3ZEzmjMg8uZJWju3WdrBdAswD4DwAz3lWzBGZB2vlSAe0fDuWcV6xAzssuGIH9nj5dkAL0wE5hY%2FM59l%2FbB6%2B5ntj3ABI41%2Fjueel68aNyDx4K4cUoiUgjX%2BN554dLeePyDwWX7vnTfHxhxkrN2FxjlUhMHNVqOQ%2BGGas3ARTFvuD5dx5Ks%2BjLkBLILpACtFJEpDGJc08RwLww48MJ4wRWjny4ToPoGQLwK1kCUjjSsa%2Bf4MHvWc2HhvmWUax43ijDv8ashNv5ThHAOkfJZnnc2%2BD4ezLEDh0P%2BzccMIzoZUjD1%2FznYCDNOHrzfUAsbUA4fe6zo7E%2B%2FUg8ReslUOIxTQguWVAW1oBhC3QIXwEj%2Fil51U%2BWDoEgC7jxqM6Ni%2FvuUyUQyJJZd1jdnxPFZvrPJhrqgvQ7e3t%2F93Z2VlDBdGk3PPBwVy3s7MTPX36FCnLJtNEOTjEBSt79%2B6Vgef8%2FHxIT0%2F3Hcx11QVoR0fH%2F3V1dX1AlYcm5J6rnJyc%2FmewAK1KBpqgjw0MDOTWfBPh2cLCAoyMjG7p6Oj8Q5VragSgi%2B0NP7lpb1Rza4oR3JaA9ICM4BbmPNcU2xtqjcQfsLQFYz65EKJf0yA0wyA6fUBNaRbQIDSDiyEGNekLxozIPB7sMZ8sy9Ku8d%2BNHSpcf4Cg%2Ffrgv1sXlmVp13iwR2Yeo%2Bhdn1imnq1h7rgNdkVlMGF3uVR2RWXA3HEbLFPP1hjH7BqRedabLvtk%2B1RBzYW530Kxy2EocTkqVbHLYbgw91vInyas2WC6fETmybFifpJrxazJs7KFAZC2I4CzLeRaMWtyrJgjMg%2BasvQT5BJbg3yyBiBaqu3YtkGX2Bo0ddnIfJ6Xfv7Jsg3javwjZSFaCs%2BROrBsw7gaj6Wfj8g8M41ZnzhbLayZx1wB3hNWyWkecwU4Wy2s%2BcqENSLz6E6Y%2FokNa0HN1CXrMIj2C5ZqxspNMHXJOrBxWVCjO3G61ogAND%2FsExBE%2FCqFaLIw5%2Fkx8MO0RgLInh7e9AmcD2yAGwkYLJckE7QF4EYCwLlNT58e3jQS84w6WBv2ybGnIQ%2FP%2Fj4AzESd%2FX0THMUq67S4HM1HNyhaOT4Jq%2Bi9z6kBiJe0bOCKrwfg1ACEVfQ2ht96MSLv182EHz95Kiiv7xI8hXdJTdjBQoneJTVBl%2BApPOdXNN9MOK81UgBdzuH9131O%2FB08D90ah7Vz4Lnnag4vbrDXHAJAI5FINLWrq6uDCMxEdXZ21opEov8dCYCW6K9bt249t2vXLti9e7cUpAnbBrMHe011AVoS5Zjh7u7eRcxD4%2FDs7u7%2Bh6OjI3OQrrY6AI10dXUZxsbGzTgwk2VsbPyCwWCYqHo9jQC0BKJNb9obiUvsMWDGVWJvBDftjcTF9oamaARv%2BUvHmxZHG4l%2FSzKDxlQLqX5LMoPiaCNx%2FtLxIzqPV%2FxY0xW5OuKAPXqw7tsBBezRgxW5OmKv%2BLEjOo8Je5%2BpddYlMbPgF7ArvCsVs%2BAXsM66JDZh7xvReSIs15rum5kpvuz0HdxgHZbqstN3sG9m5rDlnhVAtGmuFVOcZ8WEPAk0Y2JCrhVTnDNcuWfaKMcaU%2BSxWYxtKdw%2BoKXZgDw2i9GsNSM6j7fvF6YrAseL10UxYH3MgNZFMWBF4Hixt%2B8XIzrPbFM3U5a1j9jTbiV4TfCTytNuJbCsfYYt90x3M5w629Ru3lLx9GUb4MuVQVJNX7YB7OYtVSn3rCmAlkC0KQgiekAQIQFmXBEAgoge4IeZjgSM4XpxLMgULod3w41EgJtbBnQjEeBy%2BHDlnmnz0Ifuh5qeagru%2FvF1MJx9M6AfXwfDqabg3h9qwsw1UVmneh76tWl4DXRx6rCsMy5OHUB4zfDlnulUmnjFtE1Q29UrbMTiHBL1ChuhTVCrUu5ZkwB9jxuPKjg869%2FY8W%2BaJG0bzXE8eM6Oh%2Fts3tFyDu%2BjkQRoSR46mFhtR8o9Txzs9YYI0CglJUU7Nze3qbCwEIqKiqCoqAjPPf%2BUkpLyH%2BoANJ%2FPH1QGmigWixWNbyn09PTE4RmcnZ1XDNLRVhugJRDtbmpq%2Bo4Mz6ampv16enqeg7mWxgAaIYRuTDZcU2xvCMUYNEOxvREU2xvCjcmGa9B7uO1bpbOmlG0Ej7aYwbMUc3i0xQxK2Uawb5XOe5lnvmDcGr%2FtDFi7Rw8C9urB2j164LedAfMF497LPGbx36%2Bxzr4KzILbYLerFJgFt8E6%2ByqYxX%2F%2FXuaJtw1Zc2j2Nrji9B38xDoIV5y%2Bg4Oz8yDeNuS9zJNtabsmx4oJORg0A%2F51tqXte5kHzdmwBnkLsSUpy%2FKwe28hoDkb3ss8C1aNXeMXrA0BURg4B0QxwC9YGxasGvte5nEw81jjarME5jFXgNcEP5jHXAGuNkvAwczjvcxj8pXTmknzV8L0ZRvgS18Mnid5rwCTr5wGPc9QAZrL5SJIDFsD%2FDAAfjgGzvxwAH4YQGLYmpGEMVx%2FnAhcA1ejsSUpN4XY%2FdVo%2BONE4NoRn4fD%2FehwQ5j%2F6ZYQOPMaA%2Bczr4PhdEsIfF8dvmkkohtkRZS%2BXRNZg0Eztx67j6wBiCh9u%2FF9vF%2FVicVrXgsboFfYCP3CRugVNsIr4X2oTSzZNOgDpYIq1CSoUxugMRc6HlVx4v0eceKhkY3B8wNOfF0Fh%2Fd%2FZRweGmmAFolEH4nF4sNEeJbknleJRCL0HgAapaamuuTl5fXu3LkTCgoKICcnpyk1NVVPnWulp6ej0NBQNHfu3MFGOHB9zGKxjnt4eMC8efPAw8MDWCxWtjrXGgpAMxgMZGBgkELMQ5uZmYGBgQFfV1cXvTeARgihnyYb7v9psiHcmGwIP2EqQu%2FxdmSd7v6KeBP4NckMynkmcHid7nudxydl%2FP5V%2BbrgX6QHq%2FJ1YVHy%2BPc6jzn%2F6H6bnGvA3HELbHKugRn%2FyHudJ3Vi7P7jDgVwyekAHHfYAckTot%2FrPFstbfZvtbSBbEtb2GppA1stbd7rPGhu6H60IAXQ4q2A5icD%2Bibk%2FX6e%2Fcfu9wvWAf8IHfAL1gEf%2F7HvdZ5vLLz2u9kuBQ%2BmL7jZLoWvzT3f6zwWX7vvn7xwFUxfvgEmL1gF5g5uas2jCYDmcrkIEkIPQkIoQGIYQEIoQELo%2FvcBY4Q89PdwnY05z9fioPNM4HfvaZZRnDjuqCO%2FhRw83RYCZ38PgdNtIXD4fhieC%2F%2FofcwVfk%2B8P6oGgF0LEFUDEH5PfOh9vl8PEn%2FZ%2F4fwV%2BgWPoM%2FhA3wgP%2FLUXWu0ySoRs2CevR48C0ccqrh8HIfx%2FGggR3%2FqpzDs1H3Ovdi4lBt7jbU3tGB3r59q5ba29v%2FTywW13d3d%2BPwnKXutcRiMXry5MmQAFoCvuy8vDzIycnpTEtLc1D3OpmZmWjFihXIwcFBXYBGTk5O%2F%2Bvi4lLv5uYGLBbrvKOj49%2BGAtCDOURI0t8NDAwumZmZ4fB8nMFg%2FGWw19E4QF%2BdZKh1bbJhzbXJhnBtsuHtq5MMR7%2FPP2Ap88donQnSq7kdawynAvVub%2FEa817ncY8Zo7U4TbtmRa4OLE7Rvu0W88V7nccocoeWRdKJGuusS2AuPHbbMDz%2Fvc6zzmSpVo795pofZuVAlj3vtr%2Fx4vc6T6alrVaWpU1NlqUNZFna3M60tH2v86DJS7SQc2QN8uIDcoy4jaa8338fN5%2FPtZYEjKtZETgeFvuPu%2B3m8%2B%2F3Os8MIyctR8v5NSxrH5hr4X17hpHTe52HMWGalpWTV81ErxVg5eh5m2E3Va15NAfQIVqQEPIrJIQAJIRUQkLI6PcJZE8OBWu9O7exAa5EQd%2FZjdWPfgh%2Bn%2FOM%2BqEqXOvoo9CHp5qD4ejDsPqD1WGj3xc8c7lcFFHSohV%2Br6s%2BvAYgrKyzPvxm63t9v4oTz2k94t%2Bt%2B11QD48Edx%2FcSPhRrXkGHOirqJQTh%2B5yeGrrHof7j0oO73Ilh7dUHecZ192YOFSXXzAkgH779i0SiUSTxGJxl1gsvtje3v63oQK0UChESUlJQ9HHycnJx1JSUkKHAuIZGRlo5cqVaM6cOWju3LlD0QxHR8cSJyenMeqCuAYAGjEYjPEGBgatBgYGD3R1df%2BlzjU0DtAIIXRlkoHR1UkG9VcmGYxBf4Jb5sKxRnv8tOvTFoz5U8zjHjvGyDtxbL177J9jHqOoAiNT7oF6o8gdf4p5As1WGPFsg%2Bs3mC3%2FU8yTYWFtlGlhXZ9hYf2nmAdNXW6EvlpXj6Ys%2FVPM47b4cyPvlV%2FUuy3%2B%2FE8xz0xjZ6M5Zu71M4yc%2FhTz6E2aYWQy07Feb%2BJ0tefRFEBzuVwEm4ONICHkAWwOHvM%2BYUyahz28yejNyaAHTw9v%2BjPM89H3VeHGRx6ENhwoixjHwQ4NjnqfM0WUtBmF3%2FnjfkRJy5%2Fi%2FSpJvGBUmVh8%2Fyb%2FvNrz%2FMYvRY%2F45eh%2Bwjn0CzsW3WFzh6TbHN4nP3N4aCgqiYxGz%2B6UordiMXrz5s1Q5fHHH3%2Fo%2FPHHH2pfQyQSoUePHqHExETE5%2FPVVmJiIkpMTPxbQkICSkxMRAkJCWopKSkJLV%2B%2BHM2ePRt98803Q5KDg8MnDg4OSF3NnTsXWVtbozFjxqDx48cPRbO0tbWZ2traSB0NC0AjhNCliQafoD%2FRLcb533%2BqeZxCPv9TzaMfmPGnmmehruufap50C%2Bs%2F1TzI1v1PNY%2Bz95%2Frv68p%2Bg5%2FqnnGmtsOaR5NAjSXy0XA3fTJnwHGpPnaAyF%2FqnkO3Iv45H3knmkh%2BtrTP9W%2Fz7nNR4c0z6%2F8O%2Bg3fpkmARppAqCfl5VrBKBfv349ZLW3t6PffvttyACNQ7S64IxLKBRqEqDRnwGgx40bNyQpBegP%2BqAP%2BqAP%2BqAP%2BqAP%2BqAPUqwP%2Fwgf9EEf9EEf9EEf9EEf9EGD0P83AKanuJLCUXIrAAAAAElFTkSuQmCC%29%20no%2Drepeat%200%200%3B%0Awidth%3A%2035px%3B%0Aheight%3A%2046px%3B%0Aposition%3Aabsolute%3B%0Aleft%3A0%3B%0Atop%3A0%3B%0Adisplay%3A%20block%3B%0Atext%2Dalign%3A%20center%3B%0A%7D%0A%2Eawesome%2Dmarker%2Dshadow%20%7B%0Abackground%3A%20url%28data%3Aimage%2Fpng%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAACMAAAAQCAYAAACcN8ZaAAAB3klEQVR42s3U4UdDURzG8czMXJnJ1Vwzc6VJZjaZJdlMlpQsKdmUFNOUspRSSqUolfQfr%2BfF98Vx5mwv9qbDx7LdznnO7%2F7Omej3%2B%2F%2BGa0QMUYkhbvBgmhzCQxwxibIGrGEF8CQhU%2BLLtKQkQNqScUgjxRxTBIxbgfgD%2FBgnhM8kM5KTeclLQYqGkkMRBckzR8ic%2FmAgd5BAZplsUaqyIg2sDtHg2brUZJk5SmwopErJUWE8SpmTMhNvya60Zd%2FSNrR4bkeaskG4uiwRZk6yrJEYFibGAxn%2BscECHTmTnuVCzvmty3PHciB7bGKN6lQkzysPqIrHmpFhYbKUtckC1%2FIoz4ZHuZdbuSLYiRxRpSZVWXZVxAzC0R4Ik5SQsu6w8yd5l2%2F5kg95I9SdXMoZQfYIUjeqEUrgOkXGPeN4TYRhxy8E%2BZUf%2BeS7B7miIoeybVSjKDnm8u3%2BgH3pDTYwu1igATvs%2FpXqvBKiR4i2bNJfi1ZfUAnjgrOG8wY2quNzBKuU%2FZS%2BuSFEl5O0xRGuUIlZCcw7xG5QPkeHYUSNV5WXGou2sC3rBC0LjenqCXGO0WEiTJa0Lr4KixdHBrDGuGGiRqCUpFk8pGIpQtCU7p4YPwxYxEMCk1aAMQZh8Ac8PfbIzYPJOwAAAABJRU5ErkJggg%3D%3D%29%20no%2Drepeat%200%200%3B%0Awidth%3A%2036px%3B%0Aheight%3A%2016px%3B%0A%7D%0A%0A%40media%20%28min%2D%2Dmoz%2Ddevice%2Dpixel%2Dratio%3A%201%2E5%29%2C%28%2Do%2Dmin%2Ddevice%2Dpixel%2Dratio%3A%203%2F2%29%2C%0A%28%2Dwebkit%2Dmin%2Ddevice%2Dpixel%2Dratio%3A%201%2E5%29%2C%28min%2Ddevice%2Dpixel%2Dratio%3A%201%2E5%29%2C%28min%2Dresolution%3A%201%2E5dppx%29%20%7B%0A%2Eawesome%2Dmarker%20%7B%0Abackground%2Dimage%3A%20url%28data%3Aimage%2Fpng%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAABaAAAABcCAYAAACYyBINAAAACXBIWXMAAAsTAAALEwEAmpwYAAA8FmlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4KPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS41LWMwMTQgNzkuMTUxNDgxLCAyMDEzLzAzLzEzLTEyOjA5OjE1ICAgICAgICAiPgogICA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPgogICAgICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIgogICAgICAgICAgICB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIKICAgICAgICAgICAgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiCiAgICAgICAgICAgIHhtbG5zOnN0RXZ0PSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VFdmVudCMiCiAgICAgICAgICAgIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIKICAgICAgICAgICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIgogICAgICAgICAgICB4bWxuczpwaG90b3Nob3A9Imh0dHA6Ly9ucy5hZG9iZS5jb20vcGhvdG9zaG9wLzEuMC8iCiAgICAgICAgICAgIHhtbG5zOnRpZmY9Imh0dHA6Ly9ucy5hZG9iZS5jb20vdGlmZi8xLjAvIgogICAgICAgICAgICB4bWxuczpleGlmPSJodHRwOi8vbnMuYWRvYmUuY29tL2V4aWYvMS4wLyI%2BCiAgICAgICAgIDx4bXBNTTpPcmlnaW5hbERvY3VtZW50SUQ%2BeG1wLmRpZDpBNjA4QzVCMUNEQTRFMTExQTVDOEVDQTA5OTM3RTBDQzwveG1wTU06T3JpZ2luYWxEb2N1bWVudElEPgogICAgICAgICA8eG1wTU06RG9jdW1lbnRJRD54bXAuZGlkOjgyRkVFMDUyODczRTExRTJBN0Q0RTdGQUY0MTkzRDc5PC94bXBNTTpEb2N1bWVudElEPgogICAgICAgICA8eG1wTU06SW5zdGFuY2VJRD54bXAuaWlkOjU0YWVlNjBiLTE0MzYtNGE5Ny05ODE5LWVhMmM3YmQzNWE3MTwveG1wTU06SW5zdGFuY2VJRD4KICAgICAgICAgPHhtcE1NOkRlcml2ZWRGcm9tIHJkZjpwYXJzZVR5cGU9IlJlc291cmNlIj4KICAgICAgICAgICAgPHN0UmVmOmluc3RhbmNlSUQ%2BeG1wLmlpZDpGNzdGMTE3NDA3MjA2ODExOTEwOUFBM0Q3NjQ4QzhFMDwvc3RSZWY6aW5zdGFuY2VJRD4KICAgICAgICAgICAgPHN0UmVmOmRvY3VtZW50SUQ%2BeG1wLmRpZDpBNjA4QzVCMUNEQTRFMTExQTVDOEVDQTA5OTM3RTBDQzwvc3RSZWY6ZG9jdW1lbnRJRD4KICAgICAgICAgPC94bXBNTTpEZXJpdmVkRnJvbT4KICAgICAgICAgPHhtcE1NOkhpc3Rvcnk%2BCiAgICAgICAgICAgIDxyZGY6U2VxPgogICAgICAgICAgICAgICA8cmRmOmxpIHJkZjpwYXJzZVR5cGU9IlJlc291cmNlIj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OmFjdGlvbj5zYXZlZDwvc3RFdnQ6YWN0aW9uPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6aW5zdGFuY2VJRD54bXAuaWlkOjdkOTI0NGZmLTMwYzMtNGI5NS1hZDYxLTYwZGNiM2E3NDNjNjwvc3RFdnQ6aW5zdGFuY2VJRD4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OndoZW4%2BMjAxMy0xMS0yOFQyMToyNzoyNyswMTowMDwvc3RFdnQ6d2hlbj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OnNvZnR3YXJlQWdlbnQ%2BQWRvYmUgUGhvdG9zaG9wIENDIChNYWNpbnRvc2gpPC9zdEV2dDpzb2Z0d2FyZUFnZW50PgogICAgICAgICAgICAgICAgICA8c3RFdnQ6Y2hhbmdlZD4vPC9zdEV2dDpjaGFuZ2VkPgogICAgICAgICAgICAgICA8L3JkZjpsaT4KICAgICAgICAgICAgICAgPHJkZjpsaSByZGY6cGFyc2VUeXBlPSJSZXNvdXJjZSI%2BCiAgICAgICAgICAgICAgICAgIDxzdEV2dDphY3Rpb24%2Bc2F2ZWQ8L3N0RXZ0OmFjdGlvbj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0Omluc3RhbmNlSUQ%2BeG1wLmlpZDo1NGFlZTYwYi0xNDM2LTRhOTctOTgxOS1lYTJjN2JkMzVhNzE8L3N0RXZ0Omluc3RhbmNlSUQ%2BCiAgICAgICAgICAgICAgICAgIDxzdEV2dDp3aGVuPjIwMTMtMTEtMjhUMjE6Mjc6MjcrMDE6MDA8L3N0RXZ0OndoZW4%2BCiAgICAgICAgICAgICAgICAgIDxzdEV2dDpzb2Z0d2FyZUFnZW50PkFkb2JlIFBob3Rvc2hvcCBDQyAoTWFjaW50b3NoKTwvc3RFdnQ6c29mdHdhcmVBZ2VudD4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OmNoYW5nZWQ%2BLzwvc3RFdnQ6Y2hhbmdlZD4KICAgICAgICAgICAgICAgPC9yZGY6bGk%2BCiAgICAgICAgICAgIDwvcmRmOlNlcT4KICAgICAgICAgPC94bXBNTTpIaXN0b3J5PgogICAgICAgICA8eG1wOkNyZWF0b3JUb29sPkFkb2JlIFBob3Rvc2hvcCBDQyAoTWFjaW50b3NoKTwveG1wOkNyZWF0b3JUb29sPgogICAgICAgICA8eG1wOkNyZWF0ZURhdGU%2BMjAxMy0xMS0yNVQxOTo1MTo0MSswMTowMDwveG1wOkNyZWF0ZURhdGU%2BCiAgICAgICAgIDx4bXA6TW9kaWZ5RGF0ZT4yMDEzLTExLTI4VDIxOjI3OjI3KzAxOjAwPC94bXA6TW9kaWZ5RGF0ZT4KICAgICAgICAgPHhtcDpNZXRhZGF0YURhdGU%2BMjAxMy0xMS0yOFQyMToyNzoyNyswMTowMDwveG1wOk1ldGFkYXRhRGF0ZT4KICAgICAgICAgPGRjOmZvcm1hdD5pbWFnZS9wbmc8L2RjOmZvcm1hdD4KICAgICAgICAgPHBob3Rvc2hvcDpDb2xvck1vZGU%2BMzwvcGhvdG9zaG9wOkNvbG9yTW9kZT4KICAgICAgICAgPHBob3Rvc2hvcDpEb2N1bWVudEFuY2VzdG9ycz4KICAgICAgICAgICAgPHJkZjpCYWc%2BCiAgICAgICAgICAgICAgIDxyZGY6bGk%2BeG1wLmRpZDo4MkZFRTA1Mjg3M0UxMUUyQTdENEU3RkFGNDE5M0Q3OTwvcmRmOmxpPgogICAgICAgICAgICA8L3JkZjpCYWc%2BCiAgICAgICAgIDwvcGhvdG9zaG9wOkRvY3VtZW50QW5jZXN0b3JzPgogICAgICAgICA8dGlmZjpPcmllbnRhdGlvbj4xPC90aWZmOk9yaWVudGF0aW9uPgogICAgICAgICA8dGlmZjpYUmVzb2x1dGlvbj43MjAwMDAvMTAwMDA8L3RpZmY6WFJlc29sdXRpb24%2BCiAgICAgICAgIDx0aWZmOllSZXNvbHV0aW9uPjcyMDAwMC8xMDAwMDwvdGlmZjpZUmVzb2x1dGlvbj4KICAgICAgICAgPHRpZmY6UmVzb2x1dGlvblVuaXQ%2BMjwvdGlmZjpSZXNvbHV0aW9uVW5pdD4KICAgICAgICAgPGV4aWY6Q29sb3JTcGFjZT42NTUzNTwvZXhpZjpDb2xvclNwYWNlPgogICAgICAgICA8ZXhpZjpQaXhlbFhEaW1lbnNpb24%2BMTQ0MDwvZXhpZjpQaXhlbFhEaW1lbnNpb24%2BCiAgICAgICAgIDxleGlmOlBpeGVsWURpbWVuc2lvbj45MjwvZXhpZjpQaXhlbFlEaW1lbnNpb24%2BCiAgICAgIDwvcmRmOkRlc2NyaXB0aW9uPgogICA8L3JkZjpSREY%2BCjwveDp4bXBtZXRhPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIAo8P3hwYWNrZXQgZW5kPSJ3Ij8%2B1QucAQAAACBjSFJNAAB6JQAAgIMAAPn%2FAACA6QAAdTAAAOpgAAA6mAAAF2%2BSX8VGAADGzElEQVR42uydeVhTd9r3f%2FPYoWNra0vnfZ9564gkBEICYQug1VrbmdrKLq4VQVDcagFlRzE5QTQREhBBcMG9pbW17gutK4p7tVhERKla6oK1tXUEgtRM7%2FePcwIn4WQlyzmU33Xd18yjx7nwe%2BV3mXzyfT43AgDUN33TN33TN33TN33TN33TN33TN33TN33TN33TN33TN31j6ekLoW%2F6pm%2F6pm%2F6pm%2F6pm%2F6pm%2F6pm%2F6pm%2F6pm%2F6pm%2F6pm9sC6D7Tt9h0PkLafpO3%2Bk7fafv9J2%2B03d6fMx5Y41hWN%2F0DVPmL6Tpy6Nv%2BqYXTR%2Fo6pu%2B6Zs%2BAN13%2Bo5lQPP%2FkKafjiE%2F0weo%2B07f6Tt9p%2B%2F0nb7TB6D75s8Mmv%2BHNP10DPmZPkDdN33TB6D7pm%2F6pm%2F6AHTf%2BVMC534IoecQQn9FCDkghJ4n5m9ao%2F51B%2BLZ54jppwWk%2B07f6Tt9p%2B%2F0nb7Td%2FoAdN%2F0ZuDcD8Ow5zAM%2ByuGYQ4Yhj1PzN%2B0Rv3rDsSzzxHTTwtI92XcN33TB6D7pm%2F6pm%2F6AHTf6XXguR8JOP8NIdQfIfQiQmgAQuglhNDLxAwk%2FfeXid8bQDz7AglMO%2FTB6L7Td%2FpO3%2Bk7fafv9AHovunF4LkfCTj%2FDcOw%2FhiGvYhh2AAMw17CMOxlYgaS%2FvvLxO8NIJ59gQSmHfpgdN%2F0TR%2BA7pu%2B6Zu%2BYSyA%2FsKPxfrSjy3c4ceO2eHHnk3MqO1%2BbOEXvqz%2Bf%2FYPPsfSXVlV6W7Ck5luMdWZbrOrM91mn8hwG3U83U14NN21N%2BZDBs%2FPkaDzCwRMfhkh9ApCyBEh9PfhU14T%2Fmv2%2Fx0dsfD1hMjFr6eNzX49bUzSP8b%2Ba%2Fb%2FHf1Pj%2F6DEUJ%2FJ559lQDULxFAuj8Bo%2F%2BqBaJ71RHk7WEJ8vcJveT7Y7zkB2Z7yQ%2FMFuTvGyXI2ysULN%2F9p79fm96Ss7a8VSjcOmpFzMejimZ%2FPKpo9tZRhaO2vFUg3DhS%2FqfPZyGXz8rm8oTZXF7MYi5vdjY%2Bo7K5PGEWl%2F%2BnzweNX8JC43KFaMLSGDRh6Ww0YelsNC53FBq%2FRIgic%2F70%2BcQmDGbFJjoJ45KcYuKSnGbHJTnNjk10GhWb6CSMTRj8p88nzCeKFeoTJQzzmRoT5jN1dpjP1NmhPlGjwnyihGE%2BUX%2F6fIQRU1nCsdFC%2F8joGP9xMbP9x8XM9h8bPUo4NlroF267fOgKoNvESax2cZLwqSgx5qkocTYxo9rFScI2cVL%2FPz14OZzMgsMpQjiSGgNH0mbDkbTZcDh1FBxOEcLh5P69HDw%2FR4LOLxAw%2BWUMw17BMMwRw7C%2FbziaKdx6JmP0F3VpCduvpqZ9fjU1reKb9LFbz2SMLtiQPRjDsL8Tz75KAOqXCCDdn4DRf9UC0b0qz%2FTLT1npl38Xptf%2BHpP23bPZad89m51%2B%2BfdR6ZefCjNq2v%2F096t52RXWT8uuCh9I62MeSutnP5TWz34grRv107KrwvvSuj99PpfFElatWCKsFUtiasWS2cSMqhVLhDVYTv8%2BAM1gcGaDI5fLWQqFQqhQKGIUCsVsYkYpFAqhXC6n7fsfW5zg4GBWUFCQMDg4OCY4OHh2cHDw7KCgoFHBwcHC4OBgWr837Bs7AOhtPqwBO%2FzYIXv8XfIPBLic%2FyqAozoUyIEjga5wdGjXHAl0hSOBHDgUyIGvAjhwIMClZq%2B%2Fy%2FZdQnbCdj82p7d%2B2Dqc6jrgRIZbyNlsbv5Fkfv5yxhPdSWHB%2FW5fLi2lA8Ny%2FD%2FrM%2Flw9VcHtTm8OAyxoNLYvea89nu208t5CYcT3djaj66wPOLBHR%2B1SXgxSEhqf9v6qRlg0ujVzjVzFjNUsWvZkH8WhbMXMeGmeXErGND%2FFoWxK9mwYzVLIgpcqqbkj94%2Fzhs0KI3Y%2F4eiBB6jYDYLxFgu1eAaIF01wAv%2Bf4Q74LKfO%2BiI%2Bd9So6rfFZVgW%2FpSfAtO0WaavAtPQk%2Bq6rAp%2BQ4%2BKw8WuO94uvtXoqDCYK8vb32fq0fmT9g66jCkM%2FeKcnf%2Fu%2FV53ePLlftfW8DHHh%2FExx4fzMcfH8LHHx%2FCxx4fzPsf28T7H1vPeweXQ473l1b8%2Fk7q7ZXvLMyYfNbil6bTyaXPyCbywuR8Dzyl%2FIF56V8gWq5hxfke3qDgjRyT2%2FI8%2FCC5R5eIOULYClfUJPD89gu5vISsrm8XpsPCscGoHG5IWiiLB9Nyj%2BPJitUaEoBoCkrus8HhYCmFACarAA0Kb8GTZRtRxOWJaDxS3ptPtMSBg%2BITXQKmT7fKT8%2Becj5mSlDVLPThsCcdGfKmZ02BGalDoH4lCE1MxY4bZ%2Be5JQQm%2BjUa%2FMJ9YkaEOoTFRLhF5M%2F1m%2Fa%2BUhhrGqcMA4idQz%2Be7EQ4TetJsIvZnu4b3RCmE9Ur83HL2LKAP%2Bx0SEBE2Lzh06acX7YBzNVb0yZBcOj5sDwqXNgRPRcGBE9F4ZPnQPDo%2BbAGx%2FMgmEfzIRhk%2BNrAidM3x4wblqCMGKqVfKhA4BuFc0f8FSUGPJMnJT%2FB5Z4HrBEFUiSALAFAEuSuwZbACCZD%2FjvJcIfWGLNM3HS9t%2BxxIR2cRKn18LmQwsGwOHUEDiWmQ%2FHF56HqsUqOCEGOIEBnJAAVEvw%2FzyBESMCqFoMcHxRDRzL2g5H0xPgcAqnl4HnFwno%2FGrxJ4uGfFaTPvXL79NKd91Jrtn7IEW1%2F0EK7H%2BIz76fk2Hfz8md%2F%2Ff%2BBymw90EK7LmTXLfrdur%2BLxrSFm2sygjEMOw1AmK%2FRIDtXgGiMy61D0iv%2FT0kvVaVn34FzmdeBVXmVYCF9QCLrmrOwnqAzKv4ZNRBTXrdH9vTvnuWkH75aa%2B9X3eltQMeSOtCfpE25P8mazz%2FH9lNVYvsNrR1ThMxt6FV%2BgO0yG7Cf2Q34bH0%2B5pfpQ3bf5ZdS2hedqXX5lOD5QyoFUtC6sSS%2FGuinPPXRTmqG2IJNIpy4KbWNIowuCGWwHVRDlwT5dTUiyXbr4iwhFqxhEMXAG2L09raymptbRW2tbXFtLW1zW5ra5vd2to6qrW1VdjS0kJriGgF2DxAoVCEFBYW5hcVFZ0vLi5WlZSUQGlpKeWUlJRASUkJFBcX1xQWFm5XKBQJCoWCFu9%2FLH2CgoIGBAUFhYSGhuaHhYWdDw8PV0VEREB4eDjlqH8vNDS0JjQ0dHtISEhCcHCwXbOxxWHhR8hms2PYbPZsNps9m8VijWKxWEJnZ2da3ierB7bDjz16r79LxVcBnJYjga5wfKgrnBjmBqeGceHMcHzOao36108N40L1MC5UEXD6UCAHDgS41O4WstM%2F92H9ozd88DqR4Tb6XDa34jLGa6nP5cN1KR%2B%2Bl3nAD3ke8KPcE%2B7IPeGuQnPuyD3hR7kn%2FJDnAbeWe8ANqQc0LOPDlRweXBK7155eyE0%2FkubKlHzIqg0yeB6IEHotOOUfE6fkD945o4zVOnMdG2ZtYMOcjS4wd7MLfPixC8z7hHo%2B%2FNgF5m7Bn5u9AYfT8TiQvjY%2BZ9ASv9BXPBDejKYC0YzRcgjy9432LvyqwqfkeItvWTUI154BYfl5EJZfAP%2BNl8B%2F47cUcwmf9d%2Fgz649C75lp8BnVRV4Fx2p9VIcTBfIdvWK%2B7V1VOHoz99ZVbF79LqWA%2B9vgkNjPobDQRVwPHgbnAj9Ak6Gbodq0pwkpirkczgevA2OBn0Gh8Z8Agff3wJ731sPX767pvbTd4rTN74l7xX5ZHN5oyU8jwopX9Ai9%2FSGAoEPrBD4QLGXL5R6C6HUWwhl3n4ao%2F71Yi9fWOnlC4UCHyjw9IblHl6wlC%2Boxdw90rO4%2FF6RDxqXOxpNlFWgyYoWNGUFoKiVgKaWAIpeBWhaGTGrtYb49ehV%2BEwtBhRVhEPpSfm1aKI0HYVjvSKf2ESn0TMWOFXMTBnSMifdGeZkOMOHWSyYt5AFHy1iQcIiNuV8tAh%2F5sMsFszNxP%2Fc7LQhEJ88pHZ6klP6tITBvSKfUJ%2Bo0RF%2BMRWRwtiWSGEcjPefAeP9Z8CEgHiYGDBT70wIiIcJAfEw3n9GJ5Qe6zetNtw3Oj3UJ6pX5OM%2FNnp04ITpFcMmz2wZHjUHRkTPgzenfQQjYxPhrbgkeGv6fMoZGZcII2MT4c1pCTAieh6MiJ6LQ%2BnJ8bUB42PThRFTLZaPPQH0U1Hi6GfipArAElsAWwCQmwKQmwqQmw4gzSAmU2uIX89NJyYFh9OSJPgDS6z9HUtMb1uc9I%2Fe0XJOHQ3HMiuganELnMAATuYAVOcCnFoGcEYKcFpGPWek%2BDPVSwFOLiEAtRjg%2BKJaOJqRDocW%2FINB8Fmt2iCD54EYhr326bdpE3fdTt25rzm1df%2FDFDjwKBkO%2FpICB39NgYOPk%2FXOgd%2BS4eCv%2BJ%2FZ93My7MeB9LXt11OXrNuf5UE0o6lANGO0HOmXfx%2BdXquqyLwKLYuuAiy%2BBiAmRmJgsHr8OREBqTOvAqRfgdq0756lZ9S094r79UBaN%2FpXaUPFf2SNLW2y2%2FBU%2BiN0yO6ASnoX%2Fiu7B%2F%2BV3QeQNXfOf2X34b%2By%2B6Bafh9U0rvwTHYPnkp%2FhDZZE7TIbsJvssban2XX0u9L63pFPrViyeg6saTiuiin5aYoB26JJXBbhEGTKAfudA6mNfivNxFzSyyBW4slcEMsgWuinNqropz0GiznH70JQD958mRAa2triFKpzFcqlefb29tV7e3tYGiUSmWNUqnc3tbWltDa2kqbL5gtdRQKxejCwsKK4uLiltLSUigrK4M1a9bAunXrYN26dVBeXk456t9fs2YNlJWVQVlZGZSUlEBRUVGtQqFIl8vldnv%2FY0HwPDo0NLQiPDy8JTw8HMaOHQtjx46FyMhIGDdunN6JjIyEyMhIGDt2bCeUDgsLqw0JCUkPCgqyeTaWPs7OzgNYLFYIh8PJd3V1Pe%2Fm5qbicrng7u5OOW5ubuqp4XA4211cXBJYLJbd75PVAtvhxx6139%2Fl4uFADlQNde0EzueGu8M3I%2FC5ZGAuEs%2BdH%2BEOZ4dz4fQbXDgxzA2ODnWFrwI4yj3%2BLgVf%2BLEcmfjB62Sm26iLIveLdUt4cEPqAbfzPOCO3BOaCwTw0wov%2BGmFF%2FxcpH%2FUzzUXCOCuwhOa8j3hexkOoy9jPOXZbG7B0XRXuuajhrxqx%2FPzZPA8JukfY2OKnL6LX8OC2RvYMHczDpY%2FquBAwmccSPyMA4nbjJjPOPBRBQfmfeICc7e6wJyNLjCznA0zyljtk6SD1%2FDfedmNBKL7oy5HNK3b0F7y%2FaO8Vxy%2B6Ft6AoRrzxLA%2BVvw31QDAVtqIWBLLQR%2BfEXvBGy9gj%2B7%2BTL%2BZwkg7Vt2CnxKjiu9CyoLBHl7GHm%2Fto5aMWr7v1df3PfeRjg05hM4HrwNToZuh1NhO%2BBM2C44G74Lzofv0Ttnw3fBmbBdcDpsJ1SHbofjwdvgcFAFHHx%2FC%2BweXa787J2Sgk1vyRmZTzaXNyqX53FxuYcXFJKA82pvP1jjI4S1PkJYZ2DW%2BghhjY8Q1vj4Q5m3H6zyFsIKAkZL%2BQKlhOdRsJDLZ2Q%2BaFzuKDQp7yKaUogDZDVwnr4W0PR1%2BMSV659Y4rnYtQSYLsXhdVQRoMkKJZooK0DjlzAyn9hEp1HxyUMuzk4bAnMynGHeQhw2Jy5mQ9JiNiSJjJzF%2BJ9JWMTuBNJzMpxhZsoQ5fT5TgWxCYMZmU%2BoT9SosX7TLqqhMxk4TwqYBZMCZxs3AbNgUsCsTiCthtGRwlhlhF9MQZhPFCPz8Y%2BMHjV00oyLb0TNhhHR83DgPH0%2BjJqxAN6emQxvz0yBt2el6p%2BZKfiz8ck4lI5NhDenfQQjoufCsA9mKgMmxBYII6b2OB97AOinosRRKlHiRZDMJ6BzehdszluIT%2F4i%2FaN%2BbnlWF5jOTSWa0onKZ%2BKkgjZxkiMjwfOR1FFwfOFFOCHGAfKpZQRYzgc4KydGYWCI587k43%2F2lBSH19USgKrFSjiWWQCHkx1p3npWO56fJ4Pnim%2FSx%2B65k%2Fzd%2FgcEdCaA81dPkqGyZQF8bcJ89YQEpH8h2tLNqe1ffp%2B2pnTHQjcSiO5PckTTug2dXvv7qPQrcHFhPQ6Q1cA5pwEg9zo%2BS28YGOLZJQ2aQJqA0cr0WlVB%2BuWnjswEz%2FWjfpM1XmyV3oKn0h8J4Hwf%2FljeDJD3E0D%2BAwC5gcl%2FgD%2Bbh8NplfQudMjuQJusCf4ju6n8RdpQ0LzsiiNDwfOoayLs4g2xBG6JJZ3A%2BZ4Ig3uiHLi%2FWGLU3BPlwD0CUv8oXgK3RRjcWiyB66IcZZ1YUnBZLHFkMoBubW0drVQqK9rb21va29vh6dOn0NHRYfI8ffpUDaRrlUpl%2BpMnT%2Bz6BbMFwPOooqKiiyUlJVBWVtYJmzds2AAbNmyAjRs3GjXq59VQWg2ki4uLlYWFhQVyudzm738sAJ5HhYWFXVRDZ23gPH78eKNGG0irYXR4eLgyNDS0IDg42GbZWOqwWKzRHA6nws3NrcXd3R14PB7w%2BXzg8%2Fng4eGhd9TP8Xg8MpSudXFxSWexWHa5TxYP7Es%2FtmC%2Fv0vl4UAOnBjmqgGdL41wh2%2FfVA8PagzMt52D%2F1kyjD41jAvHcBD9eLeQnbXNhxnO6Kp0N8E3i90r65bwoFGGt5zV0PnnIi%2F4ZSU%2Bj4q94FcD84iYX1Z2AekHhV5wV%2BEJt%2FM84DoOoh%2BfXsjNOpxKK2e0duu5PwGAX307%2Fv%2BMilI4HVeD5w8%2FxqGzGjgnfe6KzxcmzOeuXTD6UwJGb3aBWeVsmF7GejIh55%2FLBnv2%2FycBv19EXW1o2kFoQf4%2BgfeKw5W%2BpSdAuO4c3mQmoDMOluvw%2BeQqBFbU659PruLzcR0OpEkwWlh%2BAXxXnwafkuOPvQoOZgmkuxhxv7a8VSj44t%2BrK%2Fe9txEOB1XAidAv4FTYjk7gfCFiL1yI2AvfROyFbyL2GRj8uQsRezuB9OmwXVAduh2OBW%2BDr8Zsgd2j1z3%2B9J2SrPUj8xmRTzaXJ1jC86hc7uEFKwQ%2BGtB5nY8QytXj6w%2FrDUy5erSAdJm3H6z08oUCgQ9I%2BYLHmDs%2FK5MpzuhxuQI0cXllJ3gmQ2cNwLwe0IwN%2BiduPTHEnyHD6OhVgKJXApqseIwmSrNQOMaIfGITnQQzkp0qZ6cNgbmZzvDRIpYGdJ4vdsEHM2HELp1AmgyjCRD9ePp8p6xpDHFGh%2FpECSL8YirV4FkbOk8eOqdzPhg6V%2B%2BQnyUDaTWMHiecDpHC2MfhvtFZoQxxRgvHRguGTppe%2BUbUbHhz2kfwVlwSAZ1x4PzOrDSzhgykcRidACOiP4Rhk2c%2BDpgQm%2BUXMcXsfGwJoNvFSQKVKLESB8%2BpmtBZAy5nA%2BQv1j952cRzJCCthtG56WoQ%2Ffh3LDGrVTS%2FPzMazykCOLawEk6IcVh8RkqCzgqAc%2BopMGFIQLoTRi%2FD29RVix%2FD0YwsOLSgP41bz%2F0JAPzq5lMZo3b%2BkHK8EzwT0LkTJrcmmzXaMPrgrylwAAfRT7ZfT122YkP2Pwn4%2FSKpDU07CJ1%2B%2BXdB%2BhWoVINnMnQmw%2BVlDQDLbhiYBnzUf4YMo8XXALJxVcfjtCvPsjIuMcMZ%2FdOyq4JHssbKVukt6JDdgf%2FK7uHQWQ2cFcQUNAMU%2FGRgmvFRaAFpWTM8k92DdlkT%2FEfW%2BPhn2fWsu9La%2FgwBz4J6saTyBtF01obOD4hpFmFGzwMtIH2HaFDfwjUdj6%2BKsKyeOKPtAVhbW1tHKZXKi%2B3t7Rog%2BffffzdrKGC0UqlUFrS2ttrlC%2BYegGdBUVFRJRk8k6Hz5s2bzRoykFbDaAJEPy4sLMzqiTPaVtkEBQUJQkNDK9XgWRs6T5gwoXMmTpyod8jPagPpyMhItabjcUhISFZQUJDVs%2BnpYbPZo1xdXS9yudxO6Ozh4QGenp4gEAhAIBCAl5eX3lE%2FJxAINIA0AaOVHA6ngMVi2fQ%2BWSywbT6sgXv8XTYdIhrPZPCsDZwvE%2FPdSMOjfraGAkafHY4rOo4OdYUDAZzmHX7sKLp%2B8Dqc6jrwbDZ3U20O3ngmg2dt4PxbiTf8VuINj40Y9bO%2FkmD0QwJGq0F0wzI%2BXBK7N5%2FMdKNDPtqu5xcQQgO5b77E%2FiBv8Lb41d3BszZwnr%2BdmC%2BNGOJZKhitBtEzy9kQW%2Bz8MDzr9Q8RvrRQ3YamjZJDIN010LugcpPPqioQrj0L%2FhsvQcDmywR41gbO1yCw4hoM%2FbTB4Kif7QTSJBjdCaLLToHPyqPNXvIDtL1f60fmD9z2Tsmmve%2Bth0NjPoGqkM%2FhdNhOOBu%2Bqxtwvjh2P1wcux8ujT1gcNTPqoH0hYi9cC58N5whgeiD72%2BBHe%2Bubd46agVt88nk8gdKeB6b1I1nNXheSwGcN%2FgGwAbfANjoZ3jUz67XgtEaINrTG5byPZuzuTza5oPCsYFoomwTmlKgAzyTgHP8RnxmbTI86mc7gTQJRqtBdFQRoMnyZjRhKW3zmZYweOCMBU6bqMCzNnBeoB6JEUM82w1Ga4Ho%2BJQhzXFJTrTNJ9QnamCEX8ymcSTwrA2dtQHzlGEfGhwqIK0NoiOFcRDhN605zGcqbfPxi5gyMHBC3KY3PpiFN57jEuHteLzp3A0oz1ZPuhFDPEuG0TNTtUD0XBg2Ob7ZPzLarHxsAaBbRfMHPhMnbQJJEt541gbPVMBZITI82kCaDKNJIPoPLLH5qSgxisaO54FwLHMTnBDhjWcyeNYGzudXmD4aMJpoRqtBdLUE4PiiZjiSGkUj%2BKx2Pb%2BAYdjAVdsWsXfcTt1GBZ61YfIhpelDBaPVIHrfz8mw927Kw221aR8SSwvVbWjaKDkyLrUPTK9Vbcq82gWel5DAMxk4S6%2FjIzNi1M%2BqgTQZRqtB9CLcFd2c9t2zKBo7ngf%2BIm3Y1CK7iTeel9%2FHm8v5eoBzoRGjDaQV3UF0m6wJHku%2Fb34grY%2BiseN5YJ1YskndeFaD5%2FsUwPknUY7Jow2jNUD0YglcE2HNtWJJFN0BdGtrq0CpVFaSwbO50NkYGN3e3v5YqVRmPXnyxKZfMJt65HL5wMLCwk1U4FkXVN6yZYvB0QWjKUB0s0KhsMn7HzPA88DQ0NBNERERGuCZDJ21AfOkSZMMDhWQ1gbRhCu6OTg42KrZ9KDxLHB1da3kcrndoLMh4GwskFbDaAJEP%2BZwOFk9cUbbHEBv92NzDgS4NB4lVBtU4JkMnGuJuWLEqJ%2FtDqNxEH2BANEnhrnB4UAO7PF3Kdvmw3Kg04ev4%2BlunEti98bry%2FjwQ54HJXgmA%2Bf%2FrMLnSanhUT%2BrDaO1QfT3Mg%2BoW8KDs9ncssOprvbKhwyf1cqNV0ZM%2FfvQmCKn27PK2TB3CzV4JgPnBTtMn24wmgDRCQSInrPRBeLXsGCybPCWvw95%2FnWELz98gYDkdl1QKMjby%2FEuOtLou%2Fo0%2BK%2F%2FhtR4JoNnEnD%2B7DoxN4wY4lltGN0Jor8jQPR58C09Ad4FlWUC6S5a3a8tbxVwvnx3TWPlmC1wPHhbZ%2BOZDJ7JwPlbYmoiDxoc9bPaMJoMok%2BGbofDQRWw772NsO2dkrLykXm0yieby%2BMs5QsaCwQ%2BUOLlRwmeycB5kxnTDUZrgegVAh9Y7uEFEp5HWSaXT6t80PglHDQpvxFFFeFAmAo8k4FzPDGzNhuezme1YbQWiJ5aAmhKIaCJsjIUjtEqn9hEJ058ypBGtWqDCjyTgXNyjunTDUZrgegPs1gwO20IzFjgVDbto8G0yifMJ4oz1m9a4zjh9E7VBhV4NgY4mwKjySBareaI8IspC%2FWJolU%2BwrHRnGGT4xtHRH8II2MTOxvP3aGzJlz%2B15wMg6MPRpNB9JvTPoI3omZD4IS4Mr%2FwKSblY20A3S5O4vyBJTbCkmRCtaEDPGvD5QKx4dEFo9UgurMRnQogmQ%2FPxEllraL5DjRrPXPg%2BKJGOJlDuJ0pwLMGUC7C54IRo362G4zWAtHVubgj%2BlhmGRxa4EAD%2BKxWbryy6Xjm0D13km8f%2BBnXZFCBZzJM%2Frp9gclDBaO%2FblkAlWoQ%2FQu%2BuHDHzdQteaWi14nlhy8QkNyuCwrTLz%2FlpF%2BBxux6XJORQwGeycB5%2BQ3TRxtGU4HohfUA6bWqsoxL7Q40az1zfpM1NrbLmkAlvdvVeNYGz9pwueiB4dEFo0kg%2Br%2By%2B9AhuwOt0lvwi7Sh7K601oFmrWfONVFO4y2xBH5cLKEEz2SY%2FHCxxOTRhtHaIPo2sbiwTiwpq8FyHOgGoJ88eTJQqVRuMgU8P3v2zOAYA6KJRnRzW1ubzb5gNrH1zCkuLm40BJ6NAc6mwGgyiF6zZg2UlJRAYWFhWV5enlXf%2F5hygoODOWFhYY0RERGdqg0q8GwMcDYFRpNBtFrNERoaWhYUFGSVbEw9zs7OAzkcziY3Nzfg8Xjg4eFhdNPZXBitBaKb2Wy21e9TjwPb4cce81UAp%2BXEMFc4O5xLUm1ogmdN4MzXmLq3uo%2F2M1QwWg2iLxJqjtNv4G3o%2Ff4uVV%2F40WNJ4clMtzGXMV5Lo8wD7io8O1Ub2uCZDJxbtKa1zKfbaD9DBaPJILq5QAA%2FEG3obxa7Vx1Lt%2FmSQjJ8%2FhtCaABCyDE4%2BR9TZpSxWmdvYMO8T1y6VBta4JkMk5N3umnOLorReoYKRneCaMITPXcL3oaOLnQ66xf2igfClRx2hdBe8gNjfEqOt%2BCt52%2B7VBva4JkMnLdpzrDPG7uN9jPUMJoA0Vuv4GqO9d%2BAb9kp8F5xuEqQt4cW92vrqBVjdo8ubzkcVAEnQ7fDmTBctaENnsnA%2BXJkpdZ8RTGaz1DBaDKIPh22E44Tbegv%2Fr26ahNNlhRmc3ljpHxBywqBD5SRVRta4FkDKAuHasxmYWC30X6GCkZrgmh%2FKPHygwJPb8jleVQtpMuSwglLx6DJiha89bxaN3jWB5xnb%2B0%2BxsBoNYiOVas5SgFNWQFoUl4VGr%2BEFvnEJTmNmZkypGVupjMkLCKpNrTAMxkmpyzhaEwyxXR7hgJGk0F04mKiDZ3uDPHJQ6piabKkMMxn6phIYWwLVevZWPAcNWxetzEWRpNBtLoNPdZvWlUYTZYU%2BkdGjxn2wcyWN6d9BG9Nn487m8mqDRJ47gTLczNNHyoYTQbR8ckwMjYRRkTPhaGTpleZsqTQmgD6qShxDGCJLbhuwwB4NgY4mwyjyWqODIAlyaASJVa1iemxpBCOpI6BqsUtUJ2Lg%2BBO1YY2eCaD5ZVmDAWMJoPoM%2FldbehjC6vgcPI%2F7Aif%2F4Zh2AAMwxw%2F%2FTZtyr7m1FZ161lbtUEFnQ9rTwfFaD1DBaPJIPqrJzj83vdzMuz%2BMeXs2gOZHoSSw64QOu27Z2Myr0KLuvWsCzzrg8t5jd3HGBi9jOSKXtKAw%2B9F%2BKLCqvTLT%2F9BE9fzmP%2FIbrbguo37eDNZrgM8d4Lln8wYHTC6E0Tjjug2WRM8kjVWNS%2B78g%2BawOcx10U5LbeJBYJq1YY2eNYAyuIlWiOhGK1nKGC0Noj%2BcbFE3YauuiyW%2FIMuALq1tZWjVCob1X5nQ8DZHACtD0aT2tCgVCrLnjx5YvUvmE2Az2OKi4tbysrKOh3P2qoNbZD88ccfmzz6YLQaRK9btw5KS0uhqKioypQlhdbKJjg4eEx4eHgLVevZUuBZH4wmg2h1GzosLKwqODjY4tmY2HrmuLm5Nbq7uwOfzze68ezt7W1wTAHRXC4XOBxOmbOzs9XuU48C2y1kZx0K5KiqidbzRaL1TA2eu8Pmq0ZMdyDd1YxWg2i1muObEe5wZjgXqnAlR9OXfuxAe374Or2Qm3Ulh6e6tdwD7hcI4CHheKYCz1Swuc2I0QbS5Ga0GkSr1Rw%2FrfCCO3JPuC7lwyWxe1NVuput8qGEz%2BNzBi2LX81Szd3cvfWsDZ6pYHOKEaMNpPWBaHUbevYGNsQWO999d97%2Fvo8QeoVoaqshtM0AtFfBwSyfVVUqYfl58N9UA4FbCcczFXimhM3fGzFaQJrcjFaDaELNgWs5LoFw7RnwWXm0SZC%2Fz67369N3irP2vrdBdTToMzgVtgPOhe8mWs%2FdwTMVbP5unOHRBtLkZnQXiMbVHOo29KExH8POd9c2bXmr0K75YO4eWcs9vFQrvXyhzNuv0%2FFMCZ4pYPMWI6YbkKYA0Wo1xxofIZR6C6FQ4ANL%2BZ5N2VyeXfNBE6VZaEqBqrP1HEvAZ33gmQo2GzNUMFoNotVqjunrcPXH1GJAk%2BVNaFyuXfOZnuSUNTttiOrDrO6tZ23wTAWbU4wY7Wf1gmiiDU0oOZpiE53smk%2B4b3TWOGGcSrv1rA88U8FmY0YfiO5Uc5Da0BF%2B05pCfaLsmk%2FA%2BNisN6bMUr05LYFoPesBzxRQ%2Bd9GDBWI1oTRZBCNt6FHRM%2BDYZNnNgnHRhuVj7UA9O9YYhZIklTdWs%2FGgudCzPAYgtFkNUfeQmJRYQr8gSU2tYuTAu0Kn49mZMEJsQqqlwKcydNsPXcDz1RQudiIoQDRF%2FSA6NMy3A19fFETHE4JtCd83n49ddn%2BBymqg7%2BmdGs9a4NnvbDZmDECRKvb0AceJcPeuyl3t57LeB%2FDsFeIprYDScdhG%2Fh85VlW5lVQiQnP81JCkaEPPFPBZmNGL4hu0GxDL74GkFEHTemXf7fr%2FfpZdi2rRXZb9YzseVY80AGeKaDyygeGhwpEk2E0Wc1BtKGfSn%2BEx9Lvm35adtWu%2BVwV5WTdEEtUTUQLmdx67gaeKWDzzyLM4HQD0npA9D1i0eEtsQSuibCmWrEk0N4Auq2tbUx7e3uLvtazGh4bA5x7AqNJELqqtbXVql8wGwmfs0pKSlRr1qyhbD33FDqbCqLVbWhCydGkUCis8v7HmBMSEpIVERGh0m49WxM8U4FoddOa3IYODQ1tCgoKsmg2xh42mz3Gzc2tRa3b0AeejQHO5sJogUDQ2YZ2dXWtMmVJoU0A9G6hS8nhwC7lxkWi9awPPFMB5nodYyyMrtVqQ3%2FTqeRwha8COModfux%2F2ePD15lF3JKrS%2Fhwm1BuPCRaz%2FrAMxVgVq6mHmNh9H9Wabah1UqORpkHXMZ4yhMZbtbOR1u7MQAh5DhJOnhj%2FBoWaMBnA%2BCZEjLv1jEmwGjtNrQaQs8oY7WPmf%2BP8QSEfsGWENq7oLLEt%2FQECMsvQMDmyzh8%2FuSqAfBMAZi%2FuEk9RsPo6xpt6E439Lpz4FNyXOkl32%2BX%2B%2FXZOyUl%2B9%2FfCMeDt8HpsJ1wLnw3fBOxVy94pgLMteO%2BphxjYfS3Wm3os%2BG4G%2FpwUAXsHl2u3Dqq0C75SHgeJXkeXlDs5Qur1fDZAHimAsxbdYwpMJrchiYrOaR8gTKby7NLPmiCtARNKQRN%2BLzedPA852PqMRZGx2u1oTuVHMWAJiuUaFyuXfKZPt%2BpZHbakC7lBtF61geeU3o4umA0FYSem%2BkMM1OGKGMTneyST4RfTEmkMA4mBMR3az2bAp6nvvER5ZgCozXa0BpKjlhlqE%2BUXfIJmBBbMjxqDoyMVbueUw2CZ0rI%2FGEW9RgJo7tD6JROJcewD2Yq%2FcdGG8zHGgC6Q5xUAtgCTeWGuvWsCzwbA5xNhdFUbWi1kgNLVD4VJf7LTvC5BKowLeWGIfBMAZi%2F0THGwmg1iNaG0NW5AFWLlXA49V821m4MwDDM8cvv0zbuf5AC2vDZ4uDZCBit3YZWQ%2Bh9zantFZfSxxMQ%2BgVbQuj0WlXJwnpcfbGEgM%2FLGkwHz%2Fk3qMcUGE1uQ6shtAhfUKhMr%2F3dLvfrF2lDSevyW6CS3u1yPatbz7rAMyVkfqhjjITRVG1oWTN0yO7Af2Q3lQ%2BkdXbJp04sKWkkHMxq5YYh8GwMcDYHRneH0LiS47ooR1krlvzLXgBaqVRmtbe3q6wNnnXBaCoQTWpDN7W2tlrtC2ZDp7CwsKSkpKRTuUFuPVsDPOuD0XogtFKhUFj8%2FY%2BhExoaWhIeHg5U8NkUgDx58mTKMbcNraXkUAYFBVksG2OOi4tLFpfLValbz9YCz8bCaHUbmsfjgZubWxOLxbL4fTIrsN1CtlgNn8%2BTlBtq%2BGwIPNebMbpBdFcbWr2o8OIIdzg73B1ODHODrwI4Sls3oU8v5IqvLsF9zw8KvbrBZ0PgWRd01je6QDS5Da1eVPiwyAvuFeBeaAJCWzOfvxDQVu18dpyw5J%2Fy%2BDUs3Pf8aZdygwyf9YLn3WaMDhBNbkOrtR%2BJn3Hgo084MGejC8woY7WP%2FqizCf0C0lxMaK3ms9i37CT4r%2F8Gh88fa8NnA%2BBZF3TWN7pAtEYbmlhUuPUK%2BG%2FCvdA%2BJceVtm5Cf%2FpOiVgffDYEnnVBZ32jC0ST29DqRYXnwnfDqbAvyRDapvlg7nxxnocXlHj5wRoff2r4rAc8bzVjdIJoUhtavahwXXcIbdum5kSpuBM%2Bx67tUm50ep4NgGdd0Fnf6APR6ja0elFhLMkLjUNom%2BYzfb6T2BB8tiR41geiyW1otfYjScSGhGzcCz0rdYjS1k3ocN9osbHw2RTorG%2BMBdFqJYcWhLZpPgETYsX64LNB8KwLOusbXSCa3IYmKTlGzVhAhtCBtgTQv2OJ4k74vDxLU7lhDfBsCERrt6G1ILStm9BwNEOsFz4bAs%2FfmDE6QbQ2hC4glBzLyRA60MoAuh%2FJ%2Bey4%2FXqqfP%2BDlG6%2BZzJ8tgp4pgDRuiD0V4QXel9zavsnFzqb0C9oLSa0VvNZvJDwPS9p6FJuUMFnU6CzvjEEomXkRYUNAJLrOBzPvApKWzehf5ZdF%2BuFzwbB80MzRheIpmhD5z%2BAP5bfJ0PoQNs2nzFxowgjfM851PDZguBZL4jWgtDNBAzXgtCBtgbQbW1tJWrfsy3BszGOaBKEVra2tlrlC2YD8FlsCD5bEzzrakSTlRwkL7TSUBPaktmEhISIewKfdUFnfWNKG1qt5CBBaItkY%2BhwOJwStXJDV%2BvZGJDs4%2BNDOeaCaLKSw83NTclisSx6n0wObKcfO%2B5wIKcTPpOVG%2BTWc50FoLOpIJqs5CBD6IMBnMfb%2FdgsW3z4qs50i6tbwuuEz2TlBrn13GoB6GwqiCYrOcgQ%2BlvM%2FfHxdDdr5KOGzw4EvH117KLX55PhM1m5odF6tgR0NhFEk5UcZAgdu8r5yfCo14QId0L3JyC0VXzQXvIDcb6lJ0jwmaTcILWeu4Fnc6CzqSCarORQQ%2Bh158Bn5bHHgry9Nrlfn7xdFLfvvS74TFZuaLaeew6dTQXRZCUHGULvenfd481vKWySz2IuL2450Xxe4%2BOvodwgt543WwA6mwqiyUoOMoReyvd8nM3l2SQfNGFZXDf4rFZukFvPloDOpoJospJDA0LLH6PxS2yST1ySUxwZPpOVG%2BTWszXAsyEQTVZyqCE00YR%2BHJvoZJN8wnymxpHhsy7lhiWgszkgmgpCR%2FhNexzmE2WTfPzHxcS9ETW7Ez5rKzfI8LnH0NksEE0BoSfPfCyMmMqyBYB%2BKkqMA8l8TfhMVm5YEzwbA6IpIPQfWOLjdnESyzbO57Q4OCHugs8ayg3t1nMPobPJIJqk5NCA0Isew%2BEUlhXhswMBb1%2F9oi5tPhk%2Bk5UbGq3nDhsOhZKDDKH33k95suFoppBwQvcnILRVfNBp3z2L6wafiRayPvBsDnQ2FURrKDkICC2qB8iog8fpl5%2Fa5H49lNbHtUpJ8FlbuUGGzz2GzmaAaAoI%2FUT6%2FePmZVdYNnI%2Bx90QS4jmc46GckOz9Wx58GwIRJOVHGQIfU2EPa4VS1i2AtBKpVKsDz7beqja0FoQ2uJfMOvRbsSR4TOVcsNW8FlfG1oNoYkm9GOFQmGx9z%2B6TnBwcBwZPhur3DAHOpsDoqkgdGho6OPg4OAeZ2MAPov1wWdzobO%2BMbUN7enpSYbQFrtPJgX2pR9b8FUAR3lymFtn89mW8FkfiNYHoavwxYQ123xY%2Fa354asq3U3wnYSnvLm8S7thS%2FisD0Trg9A3pB5wUeReczjV1ZL5kNUb%2FRFCA9%2BO%2Fz%2BjZpSx2udsIrQbpOazTeCzPhCtA0KrdRwxRU51gz37%2FxMh9BLR5n7O0gBakL9P4FNyXCksP9%2FVfLYlfNYDovVC6LVnwbvoSI1Ausuq92vLW4WC3aPLlUeCPiU1n20Hn%2FWDaN0Q%2BtCYT2D7v1fXrB%2BZb9V8srk8gZQvUK4UeHc2n20Jn%2FWBaH0QGndCC2oyuXyr5oPG5QrQZIUSTS2xD3zWB6L1QuhiQJPyalA4ZtV8YhOdBLNShyg7nc%2Bk5rOt4bM2iNYHoedkOEN88pCaaQmDrZpPqE%2BUIFIYqxzvP6Oz%2BWxL%2BKwPRBuC0GP9ptWE%2BkRZNR%2Fh2GjBsA9mKt%2Bc9pHB5rNV4LMhEK0DQo%2BIngdDJ82o8YuY0t%2BaALpdnCQALFEJuan2h8%2B6QDQlhE4BlSixplU0v79V4fPhFAFUiZS481m7%2BWwD%2BGwQROuA0CeXABxfWAOHFvS3knqjP4ZhAzefyhi1rzm1nUq7YTf4bABCq3Uce%2B4k163YkP1PDMNeItrcz1kaQKdf%2Fl2QeRWUndoNG8NnfSDaEIROvwI1GZfarXq%2Fflp2VfAf2U1lh%2BwOqflsS%2FhsCERTQ%2Bin0h%2FhN1ljzV1pbX8rw2fBdVGOsklr2aA94HN3EK0bQuNO6JyaGiynv7UBdFtbW5wu%2BGwvAK2rEU2C0I9bW1tZ1gbQCoVCUFJSolQ7n%2B3ZfDYVQhcVFdXI5fL%2B1gLQQUFBgvDwcKV64eD48eNtCp%2BNBdFUEDosLKwmKCiovzUANJvNjuNyuSbDZ3Ogc09BNAlCP2axWCybAuhtPiyHAwEuDSeGucLZ4ZraDV3wud7KYwyEVjuhjw51hT3%2BLmut9eHrcKqrwyWxe0OjzAPuFXhqaDd0wWdrgGdTIbTaCd2wjA9ns7lrLQyg1eqNl%2F4%2B5PnXY4qcvp%2B9gQ0ffWIkfN5t5TEBQs8qZ8Pk5YM%2FRgg5IissJRRIdzl4Fx1pEK49C%2F6bvtXUbuiCz9YAzyZCaLUT2nf1afAuqLTa%2FSofmefw5btrGg4HVcCpsC81tBu64LM1wLOpEPpsOL6YsHLMFtj2TonV8snk8h2W8gUNKwQ%2BXQsHDcDnrVYeYyD0WgJCF3h6g4TnYbV8UDjmgCblN6CpxTjUJWs3dMFna4BnUyG02gkdVQRoosxq%2BUxLGOwQnzykYW6mMyRk0wc%2BG4TQpMWEMxY4rbUifHYY6zetYbz%2FjG4LB3XBZ2uAZ3MhdKQwDiL8YqyWj1%2F4FIdhk%2BMb3pz2kebCQX3w2Rrg2WQInUIsJvwQAifErbUWgG4VzXf4A0tsgNxUHOrq027YEj4bC6GXJMMzcdJaq8HnQwsc4PiiBqjOxaGuMfD5GyuPsRD6tAygWgJwLHOtldQbL%2BWVil7fcyf5%2BwOPkuGrxzSDz8ZA6J%2BTYcfN1I8xDHO0xlLCjEvtDulXoEFUj0NdsnZDF3y2Bng2FUKrndDZ9QDptSqr3a%2B70lqH32SNDR2yO%2FDH8vv6tRtWBc%2BmQ%2Bj%2Fyu5Du6wJfpE2WC2fGizH4Zoop%2BG2COtcOEgH%2BGw0hF4sgTqxZK01AXRra6ugvb1dSVf4rA9CK5XKmidPnvS3FoCWy%2BUORUVFDWVlZVBeXk47%2BKwLQpOd0IWFhWutAaCDgoIcwsLCGsjw2ZB2wxrg2VwIHR4eDqGhoWstDaBZLJbAzc1NaS%2F4bAyIpoLQPB4PXF1da5ydnfvbDEDvFrrIjg51hbPDufANDeAzFYjWhtDkxYSn3%2BDCoUAOWGsp4ZlFXFnDMj7cVXjCTyvsD5%2BpQLQ2hCYvJvwhzwOu5PDAQksJ1e3nv6rVGxNz%2F1kys5wN8z5x0Vg4aDf4TAGitSG0ejFhwmccmLvFBeLXsIBYSqhWcTxH%2FD17rt4oOCjzLTsF%2Fhu%2FhYAttfaHz5QgWhtCkxYTrv8GfFZVgbWWEn76Tons4Ptb4GTodjgbvsvu8JkKRGtDaPViwjNhu%2BB48DbY%2B94GsNZSQsydLyvw9IYybz9YSwP4TAWitSE0eTFhiZcfLPfwAqstJZwglaEpK3CYO32d%2FeGzLhBNhtAaiwlLAU0pAGstJZw%2B30k2J90ZEhaxIWkxveCzLghNXkw4byELZqcNAWstJQz3jZZFCuNoA591gWhKCB0wCyYExMM4YRxYaylhwIRY2YjoufDW9Pnw9swU%2B8NnChDdDUJ3OqGTYWRsIrwxZRZQLSW0BIDuECfJYEky9cJBe8NnfRC6czFhBoAkCay1lBCOZsigWoLDXDrAZ0oQrQWhyYsJTy0DOCEGCy0lVLef%2F6pWb%2BxoTC3Z93MyHKQrfKaA0Go9SGXLAjjwWzLsf5ACxFJCtYrjOeLvaQnvs2zRVRzm5l63P3zWBaK1ndDqxYQYvpQQrLWU8GfZdVmbrAn%2BK6MLfKYA0VQQWvEAIO8nUEnvQovsNlhrKeFVESa7RcBcusFnXRCavJjwx8USuCGWANVSQksA1idPnjgolcoGNdClK3zWBaGfPn0KSqVyrbUAdGFhoay0tBTKy8s11Bt0gs%2F6IPS6deugpKQEqJYS9jSbkJAQWXh4OG3gszEgmryYMDIyEiIiIoBqKaG5mTg7Ozu4ubk16Fo4aCvwbCqEVjuh3d3dgcPhrLUJgN7ux%2BZ%2FHcjpODVMDZ9x9cZ3NIDPxkLoc4QP%2BkCAS%2BM2H5aDJT98HU93438n4XX8kOcBP63o8j6TFw7aCz4bC6GbCwTwvcwDLondGw%2BnujpYAEA%2FhxD6G0Lo5VEz%2Fs%2BbM8pYv8%2Fd7AIJn5G8z1%2FSAD4bCaE%2FqsB90DFFTrf%2FPuT51xFCA4h2d49b0IK8vXyfVcc7hOUXcPhMeJ%2FJCwftBp%2BNhdCbL4Nw3TnwLjrSKJDusuj92vJWAX%2FP6PUdx4O3wZmwXZ3e50s0gM%2FGQujTYTvhcFAFfPnumsbykXkWzSeby%2BPL%2BIIO3Pss7PQ%2Bb6QBfDYWQq%2Fu9EELGjO5fIvmg8Yv4aMpBR0oehUBnwn1xiwawGejIfRa3Ac9Kb8RhWMWzSc20Yk%2FK3VIx7yFLBw%2Bq73PEvrAZ0MQOnEx7oOOTxnSOC1hsEXzCfOJ4o8TxnVoe5%2FpAJ9NgdCEiqMx1CfKovkIx0bzh30wq2NkbCK8PZPsfaYBfDYWQscnEz7o%2BEa%2F8CkOlgTQ7eIkPkiSOiA3HYe5avUGneCzIQjd5YNubBXNd7CweoMPVaIOOLWMgM8k77O94bOxEPpMPu6DPr6oEQ4tcLAAgH4Ow7C%2FYRj28pbqzDf3Naf%2BfvDXFKgk4DMZQNMGPuuB0F89wX3Qe%2B4k384rFb2OYdgAot3d4xZ0%2BuWn%2FMyr0CEm4LNavUFeOGgv%2BGwshF7S0KniaMy41O5gYfUGv0V2swP3Pv%2FU5X2mBXw2FkI3Q4fsDvwma2y8K611sLB6g39jsaRDp%2FeZBvDZMIRW%2B6BzGmuwHAdLA%2Bi2tjYZnbzP5kDo9vZ2oFpK2NN8FAoFv6SkpEPb%2B0xH%2BKwPQhM%2B6Ea5XO5gKQAdHBzMj4iI6ND2PtMBPpsCoQkVR2NQUJCDJQA0h8ORubu7g4eHR7f2sz3gsyEQrQ2h%2BXw%2BcLlcoFpKaHEAvdffZWfVUFc4N7zL%2B0wn%2BKwLQtd280HjKo7dQnaKJT%2BAnc9233lD6gH3Sd5nOsFnXRD6P6s0fdB3FZ5wbSkfTi%2FkpvQQPv8Poah4ESHkGCV3Ojh7A1vT%2B0wn%2BKwPQmupOGaWs2G8ZBCGEHoFaS4kNPt4r%2Fh6p3DtGfDfVNPpfaYVfNYJoa9r%2BqA3fgu%2BZafAS3HQovfri3%2BV7jw05mM4Fbaj0%2FtMJ%2FisC0J%2Fq%2BWDPhm6HQ6%2BvwU%2BfafYovnk8Dx2FpLUG3SDz%2FogtLYPWuHpDZi7h0XzQRNlO9HUYhzi0hE%2B64LQ8RQ%2B6CkrAE2UWjSfGQucds7JcNb0PtMQPlNCaLIPehEb5qQ7w%2FQkJ4vmE%2BEXs5Os3qAbfNYHoalUHOG%2B0RbNJ3Di9J0joudpqTdoBJ91QGhtHzSu4pgLAeNjUywJoJ%2BJk3ZCbkqXeoOu8FkbQutQcfyOJaZYFEAfy9oJJ5cAnMnTbD%2FTBT7rgtDni7qrOE5IAI5mpFig%2FexAqCocd%2F6QcvDAo2RK7zPt4LMOCK1Wcez7ORm%2BbEjDMAx7RWshofkAuu6PnYuvAeQ00BM%2B64PQGj7oawCLrgKkfffMovfrV%2BmNnU%2BlP8Ify0neZ1rBZx0QmkLF0SZrgp9l1yyaT71YsvOWWEf7mUbwWR%2BEVqs4bopy4KooJ8WSALq1tZXf3t7eoQ2f6Qqe9UFopVLZ%2BOTJEwdLAujCwsKdZWVlGt5nOsNnMoTW9kGXlpaCQqFIsRSADg0N3antfaYTfNYHoalUHCEhISk9BdAsFovv5ubWQaXesDd8NhVCu7m5NTo7OztYDUB%2F6ccWHArkwOk3qNQb9IHP2hC6uw%2FaHc6PcIfqYVw4GMB5uM2HNcASH76q0t0EV3J40JTfXb1BJ%2FisDaG1fdC%2FrPSCB4VecGu5B3yLuT88nOo6oAcAup%2B6%2Ffx2%2FP8ZFb%2BaBXO3dFdv0Ao%2Ba0NobR%2F0567w0accmLvZBWJXOf%2FiEvDiENS1kNDsFrQgf5%2FAZ1UV%2BK%2F%2Fprt6g07wWQtCd%2FNBq1vQ5efBZ%2BWxhwLpLovcry1vFQr2vrcejgdv66beoBN87g6hNX3QeAt6FxwN%2Bgx2vrv24fqR%2BRbJJ5vLEyz38IISLz%2B8%2FUxWb9AIPmtD6G4%2BaELFsdLLF5byPR9mcvkWyQeNyxWgKQW4woJKvUEX%2BKwNobv5oMvxxYnRqwBNlj9E4ZhF8olNdBLMThsCne1nknqDjvBZA0STfdBEC%2FrDLBbMTBnycFrCYIvkE%2BoTJRgnjANd7We6wGdtCK1PxRHhN%2B1hqE%2BURfIRjo0WvPHBLMDbz1rqDTrBZyoI3c0HnQxvTkuAYZNnPvSLmDLAEgC6XZwkAEkSrrDQpd6gE3zWBaHzF%2BGLE3PT4Q8s8WGraP4Aiy0ePCEGOCWlUG%2FQCD5TQmiyD1rdgl4KULXoIRxaMKCH7ue%2FYRj28uZTGaP2P0iBA78xCD7r8EF%2F9SQZDv6aAnvvp%2FxS%2FMmiIaSFhGa3oInFg4DVU6s36AKftSG0tg9a3YIWXwPIqIOHGZfaB1hq8WCL7CaopHcp1Bt0gs9UELq7iuOZ7B48ln7%2F8K60doClFg%2FeEEvgR0JlQXf43AWhNX3QahVHkygHromwhzVYzgBLAWilUrmT6fCZ3IJWKpUplgLQxOJBoGo%2F0xk%2B62pBr1mzBoqLix%2FK5fIBPQXQQUFBgoiICDCm%2FWxP%2BGwMhFarOEJDQx8GBQUN6AmA5nA4O3k8Xjf1Bl3gsy4Ira0JUas4XFxcUqwGoPf6u2wzpv1cTzMATaXiuERqQe8Ssudb4gPYuWzuNnX7%2BWc97Wc6wGdDKg51C7phGR9OLeSam4%2BG%2B%2FmD%2FMF7jGo%2F76YZgKZQcSRu62pBj8MGiUgt6OfMBdDehV9tM6r9TAf4bFDFodGCtsj9%2BvydVdvU7efz4Xt0tp%2FpAJ8NqTjILeiKd1ZaJB8Jz2NbocAHVhtoP2%2BlGYCmUnGQW9BiLs8i%2BaCJsm1GtZ%2FpAJ%2BNUXGoW9ATllkknxkLnLYxqf2sT8Wh1YK2SD4RfjHbjGk%2F0wE%2BG1JxaLWgLZJP4ITp2zrbz7P0tJ%2FpAJ8NqDg0WtDjps23BIB%2BJk7axqj2szEqDrwFPd8y7efMbV3tZz3qjW%2FoCKC1VBzkhYRH083NR9P9fDt1D%2BPaz0a0oL9oSBORWtDPmQ2ga1XbjGk%2F0wE%2BG6PiILWg51um%2FdywrbP9LNfXfn5IQwCtBaE1W9AWyadOLNl2S4wrLJjQfja2BX1FhM23BIAmFg8ySr1hhIrj4ZMnTwZYAkAXFhZuY2L7mQpCa7Wg5%2FcUQIeGhm4zpv1MB%2FhsSMWh1YKeby6AJhYPgjHtZ3vCZ2MgNKkF%2FdDZ2XmAxQH0F74sx68COMou9zO928%2FUEJpHUnHgLWjCBd3Q0w9fR9NdHb%2BT8JRq9zPd289UEPoJScWhbkETLmhz8lG3n59HCL3Ef%2BdltxllrPa5mxnSfqaA0OolieQWNOGC%2Fh4h9BqhGXEwR8MhWL7b0afkuLLT%2FUz39jMVhP6MpOIgtaC9i470%2BH5tekvuuHt0uZIp7WcqCF0TebBTxaHlgu5xPgu5fEcpX6DsdD%2FTvP1MCaEJWN7VgvZXu6B7nA%2BKzHFEkxXKLvczzdvPBlUcRAsad0H3OJ%2FYhMGOs1KHKJnYflb%2FfOolidot6PiUIT3OJ8wnyjFSGKtkSvvZKBVHlwu6x%2FkII6Y6DvtgppIx7WdjWtBdLuiGngLoNnGSI2CJyk73M1PazwZb0KnwB5bY0PP2c7IjVImUXe5nmrefdbagi7Ra0LkAxxc19KD9%2FDyGYS%2BV7ljotq85tf3grynMg8%2FEfK3tg%2B5yQX%2BPYdhrhGbEwRwNR0ZNu2PmVVCKrzGj%2FWxIxUFuQadfgR7fr%2BZlVxz%2FI7upZE772ZgWdKcLusf5XBZLHK%2BLcpRq9zNT4LMGhCaWJJJb0IQLusESAFqpVG5jYvtZF4RWt6Db2trm9xRAy%2BVyx5KSEiUT289GtKAbegKgg4ODHcPDw5VMaT8b24ImXNAN5gJoDoezzZj2Mx3gszEqDlILer7FAfQuITvh6FBXODucS9l%2BpiN8JkNo7Ra02gV9ZjgXDgdy4Es%2FdmBPPoCdWshNaFjGh7sKT8r2Mx3hMxlCa7eg1S7oO3JPqFvCg6p0t0AzAPRzRCv4lXHYoEUzy9kw7xMXyvYzLeEzCUJTtqA%2F48CHH7tA%2FBoWvDvvf99HCL1M6EZM1nB4KQ4m%2BJadAv%2BN3%2BpoP9MQPmtAaK0WdKcL%2BhL4lp4AQf6%2BHt2vindWJhx8fwtUh26nbD%2FTET6TIXT3FjTugj4R%2BgXse28jbHmrsEf5iLm8hAJPb53uZzrCZzKE1m5Bq13Qpd5CWO7hBdlcXo%2FyQROWJaApK%2FDWMBPaz4ZUHJ0u6DJAUwoBjcvtUT7Tk5wS5qQ7Q8Ii6vZzCgMANFUL%2BqNFLJidNgRiE516lE%2B4b3RCpDCOMe1nQyoObRd0qE9Uj%2FIJGDctYUT0XHhr%2BnzK9jMt4TMJQutsQcclwRtRs0E4NjqwJwD6dywxAZYk624%2F0xk%2BU7WgO13QGQCS%2BdAuTgrsEYA%2Bmp4A1RK8NUzZfqYhfNaA0Hpa0CfEAIdTAs1cPtgfw7BXvmhIW7Tv52Q4%2BDiZsQBaVwt6%2F4MU2Hou430Mw14mdCMmazjSvnuWsOgq3hpmQvvZkIqD7IJeWA%2BQfvn3Ht2vn2XXEtpkTQAyHe1nWsJnEoTu1oJWu6DvQav0Fvy07GqP8rkiwhJuLdbtfqYzfNbfgs6BG2IJ1IolgT0B0C0tLY7t7e1KJrefdak4lEplQ08BtEKhSCgtLYXy8nJGtp91taDXrVsHJSUloFAoAs0F0CEhIQnh4eGMaT8bgtDaLuigoKBAUwE0i8VydHNzUzKl%2FWxiC7rB4gB6v79L9YlhrnB%2BhDt8%2B6Y7I9rPulrQag3Ht2%2B6w7nh7nBsqCvs8Xcp68kHsIsi9%2BrvZR7woNALflnJjPazrha0WsPxy0ovuF8ggOvL%2BHA2m2tqPmr9xosIIcfoQqfzcza6wEefciDpc4a0n3W0oNUAOulzV%2FioggOz1rNh8vLBmxFCr5qr4fBecbhauO4cBGy%2BDIEf1zGj%2FayrBd2p4agD%2F0014LfmNHgXVPbofm3%2F9%2Brqw0EVcDpsJ1xgSPtZVwtareG4ELEXToXtgK%2FHbIVt75T0KJ9cnkf1CoEPrPHxh3IfISPaz7pa0GoNR7mPEFZ7%2B0GBwAckPI8e5YMm5VWjqcV4aziunBntZ50qDpKGY%2FpaQNErAU2U9Sif%2BOQh1XMzcf3GfDGz2s%2FaLWg1gFa3oOdkOMOMBU49ymes37Tq8f4zGNV%2BNqYFPTFgJowTTocIv5ge5TN00ozqN6d9BG%2FHJzOn%2FayvBT0Lb0GPmrEARkTPg8AJcWU9AdAqUWI15KbirWEmAmhdLWhCw%2FFMnFTWIwB9fGE1VOfireFzCma0n%2FW5oM8VEC3oPICTOQDHMsvM1G%2B8iGGY4%2B4fU84f%2FCUFvnqSzEz4TGpBdzagiRb0gZ%2BTYcfN1M0Yhr1qroYj%2FQpUi%2Brx1vDSG8xoP%2BtqQZM1HDkNANn1AOm1qh7dr99kjdUdsjsAec14e5gR7WfDLeg%2FljfDU%2BkP8Iu0oUf5XBNh1bdFGNwj2sNMaj9rt6DVABpvQWNwSyyBOrGkrCcAuq2tLUFbv8HE9rOuFnRra2tgTwB0UVFRtVq%2FwcT2s74WdFlZGRQWFpaZC6DDwsKq1foNprSfjW1BR0REQGhoaJmpANrFxSXB3d0dPDw8GAOfjYHQHh4ewOVygcViBVoMQH%2Fuw3L8OpCjMqTfqKfxkFvQZA3HN8QywgMBnCZzP3wdSXN1%2FE7CUxnSb9ARPlO1oMkajp9W4MsIL4ndm8wA0A4IoQH8d152m7GapTK4fHA3jUe7BU1oOBI%2FI5YRFjvfNVfDIZDtcvRZdVxlcPkgHeEzZQuapOHYUkssIzxq9v3aMFLuuGf0epUh%2FQYd4TNVC5qs4ThDLCPc8e5as%2FPJ5PIdZXyBqsTLD9bq0W9spfFot6AplhE2mV9fxRzRlAKVQf0GHeEzVQuarOGYvk69jNDsfKbh%2Bg3VvIWsrvYzQwF0ZwuaANBJXRoOs%2FMJxfUbqgkB8TApcLZOAE1H%2BKyrBU2xjNDsfPwiohyHfTBLZVC%2FQUf4TNGCpl5GGN9k7gfUtsVJjiBJUjFWv6EPQOctVC8jbDIbPh9a4AhVIpVB%2FcY3NB5yC5qs4Tgrx5cRHl%2FUZAaAdsAwbEDpjoVuex%2BkqBi3fNDYFvSvKbD3bspdczUchH5DZWj5IB3hs64WtFrDkXu9cxmh2ffrvrTOsUV2U2VYv%2FGQxkNqQVMvIzQ7nxosx%2FHGYonqx8USRrmfDbWgtZYRNvUEQCuVymqmt5%2F1uaCVSqXZXzAT%2Bg3VunXrOtvPTAXQaghNoeEw6%2F1PUFCQY3h4uCoyMhLGjx%2BvE0DTET7rgtAUywibTAXQrq6u1UxrPxsDoD09PYHH4wGHwymzGIDe4ccOORLoCmcYqN8wpOG4NMIdTr%2FBhUOBHPjCj%2BVkzgewExluIfW5fLgjZ55%2BwxgNR1O%2BJ9Tm8OBYuqux%2Baj9z39DCL0ckvr%2Fps5cx1D9hiENxzYOzN3qAvGrWRA4wdEXIfQS4b3uZ7R%2BQ74%2FxLesmpn6DUMajo%2BvgP%2F6b8BnVRUI8vaYdb%2B2jioMOfD%2BJjjJQP2GMRqO48HbYO9762HTW3Kz8snm8kLknt5Q6i1knH7DGA3HKkLDsYjLMysfNC43BNdvlDFPv2FIwxFXDmhaKaApBYDGLzErn9hEpxAm6zcMaTjmLSQ0HAmDncwE0CFM1W8Yo%2BGYEBAP44RxEOYTZVY%2B%2FmOjQ4ZHzWGmfsMIDcfI2ER444NZIIyY6mTOB9SnosQQwBbgugqmtp91aTjyFxEajiRoEyc5med%2FTg2BExgz9RvGaDhOSQFOiAAOJzuZ6H%2F%2BG4ZhL39Wkz51%2F8MUZus39ADoA7%2FhGo7yrzN9MQx7ifBe9zN%2B%2BeDvIUzVbxjUcNwAwOoBMq8CpF9%2Batb9eiCtC2mT3Yb%2Fyu4zUL9hWMOhkt6FFtlNaF52xax8asWSkJuiHLgjymGkfsOQhuNH8RK4IZbAZbHErH%2B%2Fnjx54tje3q7qLQCaSsPR3t5u9hfMCoUipDfoNwxpOORyuZMZADqEqfoNYzQckZGREBERAcHBwUZnQ%2Bg3VIYANB3hMxWE1qHhaLIYgN4tZGcfG%2BoK54bj%2Bg0ygGZC%2B5ms4SAD6BoCQJ8dzoUjga6ww48dbs4HsNMLudnXl%2FHhfoEAflmpCaCZ0H4mazjIAPrXYi%2F4ucgL7io84dpSPpzMdAs3AUB3%2Bp8nLPnn8lnlbPioAtdvaABoJsBnsoaDAkDP%2B8QFZq5jQ2ja%2F5tmjgfaq%2BBgtu%2Fq0%2BC%2FqYbQb3QBaEa0n0kaDg0AXVGPA%2BiN34JvWTV4yfebdb8%2Bfack%2B6sxW%2BBU2A64ELFXC0DTHz5rajgqNTQc58P3wMnQ7XDg%2Fc2wddQKs%2FLB3D2yCwQ%2BUObtB%2BVaAJoJ7WeyhoMMoNcTALrM2w%2Fknt6QzeWZlQ%2BaKM1G0StxXYU2gGYCfNYFoNUajmmrAU1ZAWhcrln5TE9yyp6T0aXfIAPoZAYB6BQdADphERvmpDtDbKKTWfmE%2B0ZnjxNOh4kBMxnZftYFoD8YOlfbA21WPgETYrNHRH8Io2Ys6FRXdAPQdIbPejQcb89Khbemz4fhU%2BeAf2R0uDkfUH%2FHErMZ7X82RsOBLYCnosRw8%2FzPGdlwMgfXVZzTAaC%2FYQKAptBwnFUQHmgJwJHUcHP8z9uvpy4%2F8HNyp35DA0B39IIG9ONk2P8wBT6rSZ9mjgc67cqz7Ox6XFehDaCZAJ91AmhCwyG5BrDoKkB67e%2Fh5vmfr2e3y5rgj%2BXa%2Bo0HDGk%2F69FwyB%2FAf2X3oU12Gx5I683K56ooJ%2FuWGPc%2FP%2BgGoCWMAdA4hKbyQGNwU5QDtWKJWf9%2Btba2hvQm%2FYYeDYeTmQA6m0q%2F0VsAdHl5OZSWloJCoTD59RMSEpIdERGhV79BZ%2FisT8Oh5YEONwFAhzBVv2FMC5oA0MBisZwsAqD3%2BrtsNeR%2FrmcIhNbngd4tZGeb8wHsfLb71kaZBzQTAJpp%2Bg3tFrQuD%2FTphdxsEwH0CwihV6fkD94%2BewNbv%2F95NzMgtE4PdDkbJiz553KE0CumeqC9V3y9Vbj2rH7%2FM90BNLkFTeGB9l19GrwKDpp1v774V%2BnWQ2M%2B0et%2FpjuAJregqTzQX43ZAp%2B%2BU2JWPjk8j62FBvzPWxkCoak80GWEBxpz98g2D0DLthr0P9MdQHeD0FQeaKlZ%2BcxY4LSV6f5nYzzQ05OczMonwi9mqyH%2FM90BtD4Nh9oDHe4bbVY%2BgROnbx0RPU%2B%2F%2F5nuAJrcgqb0QH8IARNis835gPpMnLSV8f5nIzzQv2OJ2WYB6GNZWw36n79hCoTW44E%2BmpFtIoB%2BAcOwV3fdTt1%2B4FEy4%2F3PhjzQ26%2BnLscw7BVTPdDpdX9sNeR%2FpjuA1obQVB7otCvPzLpfv0pvbH0q%2FdGA%2F%2FkhMyC0Dg90u6wJfpZdNyuferFk6y2xhNH%2BZ30e6DuEB%2FqqKMesf7%2BUSmW2dvu5lwJoswB9YWHh1t7gfzbkgVYoFCa%2FfkJDQ7ca8j%2FTHUAb0nBERERASEiI0dlwOJxsd3d38PT0ZGT72RgPtLu7O7DZ7HCLAOgDAS4XTzLY%2F2zIA31%2BhDtUDXWFvf4uW835AHZJ7H7x1nLm%2Bp8NeaCbCwRwQ%2BoB57K5W00A0F0LCFc41c7d7AIJTPU%2FG%2FBAf1TBgdkb2PBB%2FuDtxCLCF0wC0EVHLgrLzzPX%2F2zIA735MgjXngXvwq%2FMul9fvrvm4tGgz%2BBMGDP9z4Y80KfDdsKhMZ%2FA5%2B%2BsMiufpXzBxZVevrCGof5nwx5ofyjEFxGalQ%2BalH8RTS1hrv%2FZkAc6di2gqcWAJsrMyic%2BecjFD7NYkLSYuf5nfR5o0iJCs%2FIZ6zft4oSA%2BF4LoCcFzILx%2FjMgwi%2FGrHyGTY6%2F%2BOa0BHh7Zi8B0Noe6PhkYhHh9K3mfED9A0u8CEvSmO1%2F1gegl2cB5KbAM3HSVvMWEC66CNVLmet%2FNuSBPpMPcHIJwLHMrSYA6M4FhLvuJNce%2FDUFKpmu39DRgv7qSTIceJQMO26nbicWEb5gEoC%2BAhfF15jrfzbkgV7SACDCFxFuNXMB4cVnsnsAeT8x1P9syAPdDE%2BlP8Kv0oat5i0gzLnYJMqBewS0ZTyApvBAE4sIt5oJoLf2Jv%2BzHg%2B0WYC%2BqKjo4po1a3oNgKbyQBOLCE1%2B%2FYSFhV2MjIzs1QB67NixEBoautUEAL2Vx%2BMxVr9hSMPh6ekJ7u7uwOFwsi0CoA8GcJqrezmAPjHMFfb7u1Sa8wHsW8y9%2BXZe7wXQDwq94HuZB3yz2N3YfP6HBKBfiy1xfjh3M4MXEBoC0J9yYM5GF4hSOB1HCDkSAPqvxgJon5XHmoXlF3o3gF53DrxXHDbrfu18d23zMQYvIDQGQB8OqoAv%2Fr260jwA7dm80suXsQsIjQHQKwQ%2BsITnYVY%2BaLK8mdELCI0G0MvNymdmypDmeQt7N4Cem%2BkMM5KdKs1rQE9rZvICQmMB9Fi%2FaZXmAeiZzSNjE5i7gNAIAP3mtI9g6KTplWYC6GbGLyA0CKBTQSVKrDQLQFctamb0AkJjAHR1LsCxhZUmLCBUA%2BjX9t5PeXjw1xTm%2B5%2F1AOiDv6TAzh9SjmMY5kgA6L8aC6Az6qD5TwGgr4BZ9%2Bux9PvmZ7J7DF5AaBhAd8juwCNZY6V5ABprbtLhf%2B4tAPq2CIN6saTSTAB9sbcBaCoPtFKpNAvQFxcXN69bt67XA%2BiioqJKMxrQzUxeQGgsgA4LCzM6Gzc3t4tM9j8b44EmFhFutQiArgzgtJwaxoWLvRRAfzPCHU4Mc4MDAS5nzPkAVoPxWn7oxQD6pxU4gL4kdj9jAoB2UAPo6aXOrXO3kBYQ9jIAnfAZDqCjVzhdNAtAFx9r8V%2F%2FDQRsvdI7AfSWWhCWnwfvoiNm3a9d75a3HO%2FFAPpM2C44HFQBX767xqx8pHxBS3GvBtBCWCHwgaV8wRnzALSiBUWvAhTbSwH09HWAppYAmpRvVj6zUoe0zFvI6lpA2MsAdNJiNnyYxYL45CFm5TNWOK3lTwKgzcpn2AczW0bGJvZeAD0TB9DDJsefMecDKmCJLb0aQOctBMhNhT%2BwxDPmAejFLb0aQJ%2BV4wD6%2BKIzJgBoBzWA3tec3Hrgt%2BReC6ArWxbAwV9SYNed5ItmAugWrB5gaUPvBNC51wHE1wDSr4BZ9%2BuJ9FaLSnq3FwPon6BDdgd%2BkzWalc91UU7LnwFAXxPlmPXvV3t7e%2FOfBECbBehLSkpa1q1b17mAsDcC6DVr1kBRUdEZMxrQLX8SAH3GBADd3NsBNJ%2FPB1dX10pLAWj4kwDoWnM%2BgF2W8OCHPA94WNR7AfTN5R5wSexeayKAHoAQem16mTP0ZgCd%2BBkH5mxygZgip2sEgH7RRAANfxIAXWsmgIbjwdvgXPjuXgugjwR9Cl%2B%2Bu6bWTAANJV5%2BsK4XA%2BgiHEDXmgmg4U8CoGvNBNDwpwDQKUNqzQTQ8CcB0LVmAmjAAXRqbwfQtWYCaPiTAOhaMwE09H4AvRTg%2BKJaEwH0AAJAQ28G0F%2B3LICDv6bAnjvJ1wgA%2FaKJABr%2BJAC61kwADX8SAF1rJoCGHxdL%2FgwAutZMAN3yJwHQZ8wE0PBnANDFxcW1ZgBo%2BJMA6FoTAHTLnwFAu7m5nelrQBsBoC90AeiLfQ1o3QqOS2L3iyYA6L9qNKA3914ArVZwxBQ5fWduA1pYfqH3AujN36kB9EXzAPS6Xt2APt3VgDYrn2V%2Fngb0xb4GtF4AbVY%2BM1N6dwM6sasBfbGvAa0XQJuVz7DJf5oG9MW%2BBrRuBccfWOLFvga0HgXH8UUXzVFw7GtObv0zKDj23En%2BztwGtPhaLwbQ1zoB9EXzAPT3f5YG9MW%2BBrReAH3RTAANfxIAXWumguPP0oC%2B2NeA1gmgL5oAoIHP52tA214KoGsttISQc%2BvkMDfCAe3eax3Q%2B8x0QF8Su9%2B6SSwh%2FGVl7wTQjTIPuJBtlgPacdrKIT%2FO2UQ4oD%2FvnQB69gY2TC1wOmbOEkKflUdvdS4h%2FLiuFzugvzbrfu14d%2B2tI0GfwtnwXXChNzug%2F1VmrgP61kqBN76E0EfYax3QOeY7oG91LSEs73NAay8hTBlyq3MJobgXO6AXmO2AvjXef8afYQmhmQ7o%2BFtvTvuo1zugAyea7YC%2BBbmpOIDOX9TngO6%2BhPBW1xJCRS92QGeZ44B23H035cfeDqAPPEqG3T%2BmHDNnCWFGHdxSO6CX3ujFDui6P8x1QN%2FqkN3BAbTiQa91QP8qvWGuA%2FpWkwiDewSw7XNA%2F2kb0BfNBNC3%2FiRLCM1xQN8aO3bsn2EJYWVfA7obgL5oEQC9z9%2Bl8sQwVzjfawA0D74byYMaAkCfG%2B4Ox4a6wh5%2FlxJzPoBdyHavbJR5wIPC3gGgn5R6w%2BMSb%2Fi1GP%2F7NBcI4PoyPpzN5hqbz18IAP0CQujVKIXT8dkb2PDRp70DQC%2FY4Qrzv3SFpC8IAF3BgVnr2TBJOngjQugVhFB%2FUwC094pDlcJ15yBg8%2BXeAaA%2FuwFDP22AwIp6CPy4Dvw31YDfmtPgXVBp1v364l9llYeDKuB02M5eAaBrIg%2FCpbEH4JuIfXAhYi%2BcCtsBX4%2FZCp%2B9U2JWPjk8j8oVAh9Y4%2BPfOwC0XwBs9AuA9b7432e1tx8UCHxAwvMwKx80cXklmlqMg9reAqBnbQI0YwPRgF4LKHoloIkys%2FKZscCpcm6mMyT2EgCdnOMCCyQuMJ8EoOdkOMP0%2BU4l5gHomMreDKAnBsyEccLpEOEXY1Y%2BgROnV7457SN4Oz65dwDoORk4gJ6FA%2BhRMxbAiOh5EDAhtsScD6gqUWIl5KbioLY3AmhpJsCSZHgmTioxC0Afy6qE6lwc1PYKAK2GzwVdAPpkDsCxTGPz%2BQsBoF%2FAMOzVnT%2BkHD%2FwCAe1vQFAa8BnNYD%2BORm%2B%2FD5tI4Zhr2AY1t8UAJ1e90elqB4Htb0FQMuuAyy7gf99choAsusB0mtVZt2vX6U3KjtkdwDymnsJgH6gAaD%2FWN4MT6U%2FwC%2FSBrPyqRdLKm%2F3JgBN%2FB2aRRgBoDG4JZZAnVhSYiaAvtXngNY9hYWFlWVlZb0GQG%2FZskUXgC4xA0BX9nYAHRERAaGhoSUmAOhbfwYAzeFwLOOA3i10yTk21BXODccBdM2bOMC9MpLHGAB9lZgrIzUB9KUR7nB2OBeODnWFHX7sKHM%2BgJ1ZxM25vowP9wsE8MtKL%2Fi12Asel3jDEwYB6Dbi52wp9dYA0D8XecFdhSdcW8qHk5luUSYA6OcIEPvKxNx%2FFsxaz4aPKnAAnfQFDnAX7HBlDoAmfs7O9jMBoBO3cWDeJy4wcx0bwrNe%2FxAhNBAh9DeEUD9jAbRXwcEc39WnwX9TDQGg62Hopw0w9DMGAejPv4dhn39PtJ%2FJAPoK%2BG%2F8FnzLqsFLvt%2Bs%2B%2FXpOyU5X43ZAqfCdsCFiL3wTcQ%2BuDT2ANREHmQMgP5u3FcEgK7UANDnw%2FfAydDtcOD9zbB11Aqz8sHc%2BTkFAh8o8%2FaDch8hrPf1h41%2BOIRmCoDeQoy6%2FawG0Ot8hFDm7QdyT2%2FI5vLMygdNkOag6JU4qI0rx8HtLIYBaA34rAWgp60GNGUFoAlLzcpn%2BnynnDkZXQB6PoYD3OQcF8YB6BQtAJ0kYkPCIjbMSXeGuCQns%2FIJ943OGSecDhMDZjIWQGvDZzWAnhQ4GyYGzIRIYRyE%2BUw1K5%2BACbE5I6I%2FhFEzFnRC23dmp8O%2F5mQwB0ATP6c2gH57Viq8NX0%2BDJ86B%2Fwjo6PM%2BYDaIU7KgSXJOKjtxQD6qSgxyiwAfTQjB07mAJzJw4GtWsNxoYg5APqCDgB9VgFwWgZwQgJwJDXKBAD9HAFiX9nRmFpw4OcuAK0BoXuD%2F%2FlxMux%2FmALbatM%2BxDBsIIZhf8MwrJ%2BxADrtyrOc7Hoc1C69gYNb2XVmAWjt9jMZQEuuASy6CpBe%2B7tZ9%2Btn2fWcdlkT%2FLFcG0A%2FYBCAfkANoOUP4L%2By%2B9Amuw0PpPVm5XNVhOXcEkvgDgFsNTUcTAPQSzQA9P3F%2BN%2FrpigHasUSs%2F79UiqVlb0NQGtDaAJAl5gJoHOoADRTITQZQG%2FcuBHKy8uhtLQUFAqFya%2BfkJCQnIiICEYDaO2fVw2gx48fD%2BPGjYPw8HAIDg42OhsOh1PZmwG0p6cn8Hg84HA4JRYB0Dv82KOPBLrCmeFcuDRCE0BfGdkFd5mi31AD6G%2Ff5ME3I9zh9Btc%2BDqQo%2FrCj%2BVozgewExluo%2Btz%2BXBH7gkPizQBdEupdyfcZYp%2BQw2gHxXjCwh%2FyPOA2hye6mi6q6MJALofAWJfDkr%2Bx6T4tSyY9wnJA%2F1lVws6hQkQWlu%2FoQbQn3Fg7hYXmLGapeK%2F87IbQuglhNDzxN%2FfqCPI3zfat%2FQk%2BG%2B8BIEfX9EA0HgL%2Bnv6Q2gN%2FQYBoD%2B5CgFbasF%2F%2FTfgs%2Bq4SpC3x6z7tXVU4egD72%2BCk6HbiUWEZABd2Ql3maLf6ALQe%2BFs%2BC44HrwN9oxer9r0ltysfLK5vNH5nt5Q6i2EdVoAepNwaCfcZZJ%2BY6NfAJT7%2BsNaHyGUePmBjC9QLeTyzcoHjcsdjaasADStrDuAZgqEpgLQcetxrci0UkBTClRo%2FBKz8olNdBo9J90ZEhaxuzzQkq4WNCP1GyQAPW8hC2alDlHFJgw2K59Qn6jRkcI4mBgwEyYFztYA0EyB0FQAevLQOTApcDZMCIiHccI4VZhPlFn5%2BI%2BNHj08ag68NX0%2BaRGhFoCmO4Qm6Tc0APTMFBgZmwjDPpilEkZMdTTnA%2BpTUeJowBYASDOYDaDVP68aQOdl41oRaQaAJEnVJk5yNAtAH04dDScwHNSSPdBkAH2BQfoNDQAtxxcsnhCp4HCyowkAuh8BYl%2F%2B9Nu0SfsfpsDBx71gESEFgD7wWzLsfZCiKt2x0A3DsJcwDHue%2BPsb9fpJv%2Fz76IX1OKjVBtBMgdCUALoB14pg9QCZV0GVfvmpWffrgbRudJvsNvxXdp%2FwQFMB6AfM0W90AuhmgPwHoJLehRbZTVXzsitm5VMrloxuFOXAHR0eaKbqN9QA%2BsfFErixWKK6LJaY9e9XW1tbjjaAZjp8JgPojo4OaG9vh7a2NrMAvUKhGF1aWgrl5eWdHujeBKDXrVsHJSUlKrlcbvLrJygoaHR4eDiMGzcOxo8fTwmg6Q6hqX7eCRMmwPjx4yEyMhIiIiJUwcHBjiYA6Bx3d3fw9PRkLIAm%2F6zaANrDwwPc3d2BzWZHWQRAb%2FNh9a8M4Dw6NYxLeKCZt4hQ3wLCk8O4cCDA5Qwy8xxOde1%2FGeM9us3gRYS6%2FM8%2FrfCCm8s94KLI3dR8%2Fgch5IAQGjDYs%2F8%2F40pZv83dTHigmbiIUIf%2FOeEzDszd5ALRK5wuIoReI7zXfyX%2B%2FsYBaOmu%2Fj7Fxx8Jyy%2FgHmgmLiLU5X%2Fe8h3ufy46Yvb9Wj8yv%2F%2Fu0eseHWPwIkJd%2FuczYbvgSNCnsP3fq83OJ5PL7y%2FlCx6t9PLFPdAMXESobwFhkZcvLOULzM4HhWP90RTFIxS9ivBAM3ARoeEFhGbnMy1hcP%2BZKUMezVtIeKAZuoiQyv%2Bc1LWA0Ox8Qn2i%2BkcKYx9NCIhnrIZDn%2F95QkA8jPWbZnY%2BfhFT%2Bg%2BbPPPRyNgE5nqgDSwgHDppxhmEEDLnA2qraH5%2FwBIfMX4RoS7%2F85I0%2BANLPGMO%2FMEwDMGhBf2havEjRi8i1OV%2FPisHqF4KcHyhqfn8D4ZhDhiGDVixIfufe5pTf%2BsVHmgtAF3ZsgAO%2FpoCu%2B4kX8Qw7DXCe%2F1X4u9vVFYZl9r7Z16BR2oPNBMXEepcQHid8D9fAbPv111pbf%2F%2FyBofPZPdY%2FAiQoMLCM3OpwbL6X9dlPOoSZQD9whwy0QNh27%2Fcw5cE%2BWcwTDMvH%2B%2FWltHay8i7IUAWtXa2moWoJfL5f2Li4sfrVu3rldoOHQsIDTr%2FU9QUFD%2F8PDwR5GRkYxtQevTb0RGRkJYWJhJ2bBYrNHu7u7g4eGhE0DTHULrAtAk%2F7OKxWI5WgRAI4TQPn%2BXiiqShqMLQHdpOK7SXL%2Bhy%2F98dKgr7Bayc1APzoXF7hU3pB7QTGg41ACarOGgK4RW%2F2xU%2Fuf7hP%2F59EJujhkAutMDPSV%2F8M7ZG7o0HGoAraHh2EVz%2FQaF%2F3neJy4wq5wNE3P%2FWWCO%2F5nkga4Qrj3b3QNN1nDQFUKrfzYd%2Fmff1afBq%2BBgj%2B7X5%2F8qrTg05pNuHmiyhoOuELpLv0Htf64cswU%2BfaekR%2Fks4XlUFAp8YDWh4egE0CQNxxaa6zeo%2FM9lhP8Zc%2Bf3KB80XlaBphZ3aTioADRdITT556PyP0cVAZoo7VE%2BM5KdKsgaDjWAZpKGw4D%2FuUf5RPjFVBjyQNMVQpN%2FPl3%2B53Df6B7lEzhxesWI6HndPdBMaEHr0G90%2BZ8%2FhIAJsTnmAmgMw5BKlFgBuSnM1nDo0W%2F8jiXmmAuACA90BZxcQuGBZkAL%2BoI%2B%2F3Me7n8%2BmpFjBoDu9EDvup26k8oDzTQNh7b%2F%2BeBj3P%2B8ozG1wBz%2FM8kDXWHIA01XCE3%2B%2BXT5n9OuPOvR%2FfpVeqPiqfRHCg80E1rQD%2FT6n9tlTfCz7HqP8qkXSypuiXFfsoYHmkEaDir%2F8x3C%2F3xVhOWYC6CfPHnSv729%2FVFv0XDo8D%2Bb%2FQUzQggVFRVV9AYNhx7%2Fs1nvfxBCKDQ0tMKQB5quEFqXfoPsfw4JCTEpG2dn5%2F5ubm6PmKzhMOR%2FdnV1Nfk%2B6X0R7RSyQ5iq4dCl37g4wh3ODOfCoUAObPdjc3ryAexkllsIUzUcuvQbD4u84Ee5J9Tm8OB4upup%2Bag90H9DCA0MSft%2FUxmr4dCj3%2FjwYxeIX82CEVP%2FPhQh9DJJv2ESgPaSHwjxLatmpoZDh34jcOsV8N9wEXxWVYEgb2%2BP7tfHbxeFMFXDoUu%2FcS58N1SFfA5731sPW94q6FE%2Bi7m8EKZqOHTpN9b5CKHUWwjLPbwgm8vrUT5owrIQxmo4dOk3Ytfhf58pBYDGL%2BlRPtOTnEKYrOGg1G8sZsNHi1gwO20IxCY69SifMJ%2BpIUzVcOjTb%2BAAOg7CfKJ6lI%2F%2FuJgQxmo4dOo3UmFkXCK88cEsEI6N5vQEQD%2FFEkMYreHQr9%2BAdnESp0cA%2BkhqCGM1HPr0G2ekACdEAIdTTM1H7YH%2BG4ZhAz%2BrSZ%2FKeA2HLv%2FzgxTYdDxzKIZhL5P0GyYB6LTvnoUsuspMDYcu%2FcbSBgCsASDzKkD65ac9ul8PpfUhzNVw6NFvLL8PLbKb8NOyqz3Kp1YsCWGyhkOXfuOOKAduiCVQK5ZwzAXQCCHU1tZW0Zs80OS%2Fw9OnT0GpVOb0BEArFIqQ3qDhIAPoDRs2qPUboFAoOOYC6ODg4BCmajj06TfUADo4ONikbBBCiMPhVPB4PL0Amq4QWp9%2Bw9PTE9zd3YHD4eRYFEBv82H1OxjAaa5mmIbjqh79xvkR7nBymBvs93epRj08h1Nd%2B9Vg7s23ljNLw0FuP2vrN5oLBPA9rt8wJ5%2B%2FkDUcL7763P%2FGrWI9nLvZBRKYpOHYpVu%2F8dGnHJizkQ3RhU7nzdVvkDQc%2FXyKjzcLy88zS8NBbj9r6zc2X8b1GysO9%2Fh%2BlY%2FM67fr3bXNR4M%2BgzNhzNFwkNvP2vqN02E74TCu3%2BhxPplcfr9lfEEz0zQcW%2FTqN%2FyhyMsXcnkePc4HhWP90GR5M%2BM0HNrtZ7J%2BI3YtoJgSQJPyepzPtI8G95uZMqT5wyxmajio9BuJXfqNHucT6hPVb6xfbDPTNBz62s%2BTAmbBeP8ZMNZvWo%2Fz8Quf0m%2FY5JnNb05LgLdnJjNHw0FuP2vrN%2BKT4c3Yj2DopBmd%2BZgLoFtF8%2Fv9gSU2M1bDoUu%2FkZsKKlFidU%2FgD6Hh6AdV2c1QvZRZGo4LevQbZ%2FIBqnMBji80J5%2B%2FkDUcy%2BSi%2F91zL%2FXhwV9ToLKXAOivniRD5aNk2P1jynlz9RskDUe%2FzCvQzDQNh3b7mazfWNLQqd%2Fo8f26K63t90T6ffMz2T2AvJ8YpOF4oEe%2F0azWb%2FQ4nxosp991UU4zUzUc%2BvUbWGc%2BPQDQIb1Jw6Htf25tbeX0BEDn5eX1Ky4ubl6zZg2jNRw69Btmv%2F9BCKGgoKB%2BYWFhzUzTcBhqP48dOxbCwsJMzgYhhNhsdghTNRyG%2FM9ubm7AYrE4FgXQCCG0W%2Biy9PhQVzg3nAvfvqnZgqarhoOq%2FVzzJg8uEe3nI4GusFPIjkIWOGcWcZdeX8aH%2B4SGg9yCpquGg6r9%2FCvRfr4j94RrS%2FlQneVmbj4aGo6JS%2F9ZNGs9G%2BZ94gJJn7tqtqDpquHQ1X7exoF5n7jAzHVsCF%2F4%2BjyE0EBz9RudGo6CyqV%2Ba86A%2F6YaQsPR1YKmrYaDqv1cUQ%2BBH18B%2F43fgm9ZNXjJD1rkfn32TsnSr8dsherQL%2BFCxF6tFjQ9NRzU7ed9cC58N5wM3Q4H3t8Mn7y90iL5SHgeSwsEPlBGaDjILWi6ajio2s%2FrSe1nuac3iLg8i%2BSDJkiXoqiVgGLXdG9B01XDQdV%2BVus3ppUBmrIC0IRlFsln%2BnynpXMynCEhG9dwkFvQyQxcPpiwiA1z0p1hepKTRfKJ8ItZOt5%2FBkwMmMkYDQdV%2B%2FmDoXM728%2BRwjgI9422SD4BE2KXjoieB2%2FNmN%2BpsKB9C1pP%2B%2Fmt6fNh%2BNQ54D8uJqqnABrDMNQhTlrKSA2Hdvu5U7%2BRAYAtgKdYYlRPARCGYQiOZiyFkzm4tuKcghktaH3t59MygBMSgCNp5uajoeHY0ZhadOBnXFuhVlh0Qmimtp8fpsC2urR5GIYNNFe%2F0anhqFUtza7HtRXaLWi6ajgo28%2BEfkNyDWDRVYC0755Z5H79Im1Y%2BlT6A4CMSRoOqvbzTwD5D%2BC%2FsvvQJrsND6UNFsmnTixZekuMaysedGtBSxjZfr4pyoErIiyqpwD6yZMn%2Fdrb25uZ3oLWod%2Fo0RfM6lNYWLi0rKwMysvLGanh0F4%2BWF5eDqWlpaBQKKJ6AqAJDcdSpmk4dAFodfs5PDwcQkJCoswB0M7Ozv3c3Nyamabh0AefSfoNs%2B6TwRfRF36sQV8HcjpOv8GFiwxoQetuP%2FPgwgh3qB7GhYMBnLuf%2B7IcLPEB7Fi666DvJLyOpnwPeFhE%2Fxa0rvbzo2J8%2BeCt5R7wrdj97pE0V3Pz%2BQuho3geIfSSMOJV7xllrN8%2F3MqQZYS62s9fEMsHN7tAXAmr%2Be9Dnn8dITSAaHv3MxdAC%2FL2DPJZdbzDf8NFCNx6hf4taF3t50%2Bu4ssHy8%2BDT%2FGxuwLZbovcr81vKQbtGb2%2BoypkG6HhoHcLWlf7%2BRti%2BeDRoM9g17tr764fmW%2BRfBZxeYNkfEFHiZcfrGVAC1pn%2B9nXH9b4CGGlly8s4wvuZnL5FskHjV8yCE0p6EAxpbi%2Bgu4taJ3t5%2FV4izt6FaDJ8rtorMQi%2BcQmDB40K3VIx0eLmNWC7tZ%2BxkjLB1OG3I1NGGyRfMJ8ogaNE8Z1TAyYCZMDZ9O%2BBW2o%2FYwvH4y9G%2BoTZZF8hBFTBw37YFbHyNhEkoaDxi1ofe3nmcnw5rQEGDZ55l2%2FiCkOlgDQbeKkQSBJ6gBpBrNa0NrwOS%2BbaD%2Bnwx9Y4t02cZKDRQD04eRBUCXqgFNSZrSgdbafC0jLBxfdhUMLzM3nL4SO4nkMw15adzDLe19z6u%2BVvzFQw6Fj%2BeCee6nNeaWi1zEMG0C0vfuZDaAvPx2UeRU6MEJfQfcWtK7287IGvMUtvgaQUQd3M2raLXK%2FmpddGdQiu9mhWn6XIcsIdbSfC5oB8n6CZ7J78ET6%2Fd270lqL5HNZLBl0Y7Gk48fFEkoNB10hNBWAvifKgSZRDlwX5dytwXIcegqgiRb00qdPnzK%2BBa3dfm5ra4uyBICWy%2BWDSkpKOpi6jJCq%2FVxcXHxXLpc79BRABwcHD4qIiOhQazjo3oI21H4mlg%2FeDQoKcjAHQBMajqU8Ho9RLWhD7Wd3d3dgs9lRVgHQxDLCTUxZRqiv%2FXxuOFe9fHA%2BsuA5n83ddEPq0dmCpvMyQn3t53uKzuWDPc1H3YJ%2BESHk%2BMHywZ8zZhmhofbzejaMwwaJSMsHzdJvaC4j%2FHqTcC25BU3jZYR628814IcvH7To%2Ffr8X6WbDo35GE6F7aD9MkJ97efq0C%2Bh8v0t8Ok7xRbNJ4fnsYkpywj1tZ%2B7lg96WDQfNF62iTHLCPW1n2PX4O3niVKL5jMj2WkTk5YR6mw%2FZ3e2ny2aT4RfzCamtKANtZ%2BJ5YMWzSdw4vRNI6LnwagZC%2Bi%2FjFBf%2B3nGfHz54PhYjXx6AqCJZYSbGNWC1tl%2B7lw%2BON8S8Ie0jHATvowwj%2F7LCPW2nzuXD%2FY0H3UL%2BkUMwxx33Ez9nHHLCHW0n%2Ff9nAxfNKSJSMsHzdJvaC0j3LT4WlcLms7LCPW1n3PqO5cPWvR%2B%2FSq9semp9Ef4YzkTWtC6288gUy8fvGbRfOrFkk1MWkaou%2F2sXj6Yo5FPTwBra2vroPb29g6mtqCp2s%2Ft7e13W1paHCwBoIllhJuYuIxQT%2Fu5R%2B9%2FNDR2oaGbmNKCNtR%2BJpYPmpWN%2BrBYrEFubm4dfD5fA%2BTStQVtTPvZzc3trrOzs4PVAPSXfmz%2B4UAOnBne1YImLyOkC4TW137%2Bhmg%2FVwZwHn7hyxpgyQ9gJzLc%2BHVLePAjsYzwkdYyQrpAaEPt59t5HlCDuT88kuba03zIywhfHjXj%2F7wZv4YFGi3oLyla0LsY0H4uZf3C9n%2FRGSH0krnLB7u3oPfxfVedAHILWnMZIU0gtN72cy0Iyy%2BAT%2FHxh4Lluy16v7aMKuTvfW8DVIV83tmCJi8jpAuENtR%2BPha8DXaPXvdw40i5RfPJ5vL5eR5esIpYRliutYyQLhDamPazlC94mMXlWzQfNC6Xj6YU4voKdQuaahmhvSG0Me3nKYqHKDLHovnEJTrx56Q7g0YLWkLfFrS%2B9vPMlCEPYxMGWzSfMJ%2BpfPIywslD51AuI7Q3hDam%2FRwpjH0Y5hNl0Xz8x0bz35gyC0bGJVIuI6QNhDbQfh4ZmwDDJs986BeumU9PAXS7OIkPkvmg0YImA2i6QWiq9nPeQoDcdAAs8WGbOGmARQH04VQ%2BnBDjy%2FsolxHSBEIbaj%2BfWgZQlf0QDi3oaT7kZYQvb6nOfHP%2FgxRgVAtaV%2Fu5OfWXlR9nO2MY9pK5ywe7t6B%2F5y%2Bsw5f3qVvQMhpCaGPaz5lX4GFGTbtF79cDaR2%2FRXYbVMvvd7WgyQCaNhDacPv5P7LGh%2FeldRbNp1Ys4TeKMPhRvIQRLWgD7eeHNVjOAEsBaKIFvYnJGg7t9rNSqezxF8zko1Ao%2BKWlpUBuQTMFQFO0nx%2FK5fIBlgLQwcHBfPIywgkTJlCCXntDaGPaz%2BHh4Q%2BDg4MH9ARAEy3oTTweDzw9PWnfgjam%2Fezi4mL2fTIqMIQQ2u%2FvsofuLWhd7edv38Tbz8eGusIeoUs2ssK5sNh9zw2pBzTTuAWtq%2F38M6n9fHYR1xL5kJcRvogQcoxSOH1N%2Bxa0jvZz0ueuMO8TF5i1ng0TlvxzOULoVcJx3eP2c1cL%2BtAe4dqz9G5B62w%2F1%2BHt5zVnwKuw0ir364t%2Fl%2B05NOYTWregdbWfz0fsgerQL%2BGrMVvhs3dKrJLPEp7HHrq3oHW3n%2F1I7We%2BVfJBE5fvoX0L2lD7OXoloIkyq%2BQzI9lpDxNa0FTt5%2FliF7z9nOEMMxY4WSWfCL%2BYPXRvQetqP08eOqez%2FRzhG2OVfIZOnL6H9i1oHe3nd2aR2s8TYrvl01MATbSg9zCiBW2g%2FfxMnJRtSfhDakHvwVvQ%2BfRtQetsPytI7edMS%2BRDXkb4IoZhjjt%2FSPmaMS1o7cWDrbjD%2BsDPybD9eupyDMNeJRzXPW4%2Fk1rQe0T19G5BG9d%2B%2Fq9V7tcj2fU99G9B62g%2FK7raz79IG6yST71YsocJLWjq9rOY1H7GuuXTU8Da2trKZ%2BIyQh3t54ctLS0DLAmgiRb0Hia1oMnt582bN0N5eTmUlZVBYWFhj9%2F%2FdFvmHRq6h%2B4taEMAOiIiAkJDQ83OhnxYLBafy%2BUa1HDYG0Ib2X5%2B6OzsPMDqAPpLP7aQzi1oY9zPlQGcR1%2F4sgZa4wPYiQw3IZ1b0Ma4n2sw90dH010tlQ%2B5BT3wX3P%2B72hat6CNaz%2F%2F5jZigIsl28%2BdLej8%2FUJat6CNcj8ffyRYvtsq92vLqBXCfe9tpG0L2hj38%2B7R6x5tHCm3Sj7ZXL5Q3YJeS8MWtJHt50dZXL5V8kHjcoW0bkEb135%2BhCJzrJJPXKKTkAktaAPt50exCYOtkk%2BYz1ShugU9mYYtaCPbz4%2FCfKKsko9%2FZLTwjajZ9G1BG%2Bd%2BfuQX3j0fSwDodnGSkBEtaD3uZ8ASH7WJkwZaBUAfThXSugVtjPu5KvsRHE62VD7kFvTALWfTRzOmBa27%2FfxbyecLXSzZfia1oIV0bkEb2X5%2BlFHTbpX79UBaL2yV3qJxC9qo9vOj%2B9I6q%2BRTK5YImdCCNtB%2BflSD5Qy0NIBGCCGlUrmHiS1oMnwmlg9a5Atm7aNQKIRMakHraD8%2FksvlAy0NoIODg4V0bkEb2X5%2BFBwcPNASAJpoQe%2BhewvamPYzh8Pp0X0yOjCiBb2d3IKu0YLQ9gLQV%2FW0ny9qup9TkBXPhcXu28ku6F%2B1ILS9ALQ2fNbjfrZkPt1a0FPyB%2B8nt6C1IbTdAPQuPe7nzzTczxJrtJ9JLejtmi3oei0IbScA3Q0%2Bk9rPWzXcz1a9X1%2F8u2w7uQX9TcQ%2BDQhtLwCtDZ%2F1uJ%2Btms8Snsd2cgt6vRaEtheA3mK8%2B9mq%2BaCJy7drtKBnbKCG0PaGz%2BT2c%2Bw6svvZqvnMSHbaTm5Ba0NoBrifrZpPhF%2FMdl0taHsuJKSCzzrcz1bNZ%2BjE6ds1WtCzaNKC1oLPetzPlPlYAkATLejttG5BU7Wf8xaS3c8p1oA%2FpBb0dg0XdDcIbScAfcFo97Ml8%2BnWgt51O3U%2FuQVNSwit3%2F0ssUb7mdSC3k5uQS%2B7QQ2h6QCfO9vPDRruZ6ver0ey69vp2YJ%2BYKz72ar51Isl28ktaG0IzQD3M2U%2BlgCsra2tQia1oHW0nx%2B1tLQMtAaAJlrQ25nQgtbjfrbI%2Bx%2BqExoaup2OLWhdIJzC%2FdyjbLQPm80W0rkFbWT7%2BZGzs%2FNAmwHoL%2F3Y3EOBHNXpN7pa0F0qDvu1oDUBNK9b%2B%2FnkMC4cDODc%2BtyX5WDND2AnMty4V5bwVE35HvAT0YJWqzjs2YImA%2BgnWu3nB4UCuLXcA74Vu986kuZq6Xw0XNBvTvv78Pg1LJVGC3o7DVrQJACt1oJot59ji51%2F%2FD%2FOz79ujfYzyQXN9V1VpSK3oDtVHPZsQZMB9Ge62s%2FHbglku616v7aMKuTufW%2BDqipkG5wlWtBqFYc9W9BkAF0TeVCr%2FbwTjgZ9BjvfXXtrw0i5VfPJ5vK5yz28VOQWdKeKw44taA0ATQDxrvazP6z08oVlfMGtLC7fqvmgcblcNKVAhWJKu1rQdFBxGGo%2FTy0BNFl%2BC42VWDWfuEQn7px0Z5VGCxqjTws6mYDPVO3n%2BJQht2ITBls1nzCfqdxIYZyK3IKmg4rDmPbzWL%2FYW6E%2BUVbNx39sNPeNKbNUI2MT4e2ZKZoqDnu2oMkAWg2f1e3n%2BM728y2%2FCOp8LAWg28VJXJAkqTRa0HSC0Lraz0vS4A8s8VabOMnBqgD6cCoXTohVcEqrBX3ezi1oDQBdpNl%2BPpOPt5%2BPL7oFhxZYOh8NF%2FTGqozh%2Bx%2BkqOjcgv5aR%2Ft5792UH%2BWlotet0X4mtaC5WVdBRW5B00HFYUz7OaMObmXUtFv1fj2Q1nFbZLdVquV3u1rQnRDani1oMoB%2BoNV%2BboZnsnvwWPr9rfvSOqvmUyuWcG%2BIJSq6tqAfiiWdWhCK9vOtGizHwVoAmmhBb9duQTPM%2FWyxL5ipjkKh4JaWlqrILWg1hKareoPUfr4ll8sdrAWgg4ODueHh4SpyC5oOENqY9nNYWNitoKAgB0sCaKIFvZ2OLWgqCK7D%2Fdzj%2B2RSYAghtM%2FfZf1xPS3oOhsDaEPt5zPDuXAk0BV2CdlRyAbnfDZ3%2FXUpH%2B4XCODnou4t6FYbA2hD7ec7ck%2Boz%2BVDdZabNfLp1oL%2BYPngT2dtYMO8T1woW9DJtgbQBtrPH37sAjPXsSF84evzEEKvIIT6W6P93NWC%2Fnq9cO0ZPS3oRtsCaIPt50vgW1YNXvKDNrlfn%2F%2BrdP3XY7bCqbAdcD5iT7cWtBpC06X9fCL0Czjw%2FiaoeGelTfLJ4XmsLxD4QJm3H6zz8evWgt5sYwBtqP1c6i0Euac3iLg8m%2BSDxsvWo6iV9GlBG2o%2FTyvD288TltkknxnJTuv1taCT6dR%2BXsyGjxax1O1nm%2BQT4Reznk4taGPaz5HCOAj3jbZJPoETp6%2FvakHrUXHQpf0clwTDo%2BZAwLhpOvOxFIAmWtDr9bag7QWhdbafMwCwBfA7lhhlTfhDakGvh5M5eAv6rEK3ioM27WcZwAkM4EiaNfLp1oLecTP10wOPcKcy7VrQOtrP%2Bx%2BmwLa6tHkYhr2CYVh%2Fa7SfSS3o9Yuv0acFbaj9LLkGsOgqQNp3z2xyv36V3lj%2FVPqD7hZ0J4SmR%2Fv5v7J70Ca7DT%2FLrtkkn3qxZP0tMd4qvr9YTBsIrbv9nAM3RTlwRYTpzMdSgLW1tZXb3t6uoruKQ0f7%2BVZLS4vFvmDWdYqKitbTuQVNBtAbNmyAdevWqdvPFnv%2Fo%2BuEhoaup1ML2pj2c3h4OISEhPQ4G6rDYrG4XC5XxefzQSAQ0AZCG9l%2BvsVisXp8n0x%2BEX3hxxr0VQCn5fQbXLhAgxY0FXy%2B3Ll40B1ODnODA%2F4uNchG51i666DLGK%2Flh3wP%2BGmF%2FVvQVPD5txJv%2BGWlFzQXCOD75R5wUeRuzXw0WtDCiFe9Z5SxWuducYEEOrSgKeDz%2FO344sGPKjgwZyMbpq0cUocQeg0hNICA6RZvP3e1oPcM8ik53iJc%2Fw0EbPnO%2Fi1oSvh8DV88uKkGhOvOgXfREZvdr81vKQbtHl3ecjxkG5wJ22X3FjQVfL44dj9ciNgLp8J2wOGgT%2BHLf6%2B2WT6LuLxBUr6gpdjLF9bQoAVNBZ83%2BAZAuY8QVnv7QZGXL%2BTyPGyWDxq%2FZBCarGhBMaV4u9jeLWgq%2BBy%2FEYfj09cCiikB9EG%2BzfKJTRg8aFbqkBY6taC14fMCYvFgorr9nDzEZvmE%2BUQNihTGtkwMmAmTAmbZvQVtaPHgeP8ZEOE3zWb5CCOmDhr2wcwWvAWdbP8WNBV8JtrPo2YsgDdjP4Khk%2BL15mNJAN0mThoEWGILSDPwdjEdWtD6Fg%2FmpsIfosQaW8AfvAWdPAiqFrfAqWX0aEFTwefzK3BFyJl8gOpcgOMLrZmPRgt63cEs733Nqa0HfsPbxbQB0CT43Ll88EkyVD5Kht13U%2BowDHsNw7ABBEy3ePu5qwX9dFDmVWjB6vF2sb1b0FTwWXqdWDzYACCqB0i%2FAja7X83Lrgz6j%2Bxmi2r5XYC8n2jQgta9ePCP5c3QIbsDv8kabZbPZbFk0HVRTkuTKAfuEaDX3gBaGz7%2FJMqBB4txVchtUQ5cE2F687EkYG1ra1v%2F9OlT2regtdvPbW1tFv2CWdeRy%2BWDSkpKWujYgtbVfi4qKrLo%2Bx9dJzg4eFB4eHjLuHHjaAGhDbWfx44dC6GhoRbJRtfhcDjr6dSCNqH9bJH7ZHJgCCG0R%2BiSdWyoK5wjFhLW2Gkhob7Fg%2Br28%2BFAjupLP7YQ2fCcXcTNur6MD%2FcUAniopwVtbQitd%2FFgkRc05XtA3RKe6mSmmzXzUbeg%2F4pwd%2FKrE3L%2BuWzmerwFbdeFhHoWDyZ%2BxoEPt7pA%2FBqW6t9z%2F%2B9ohNBAov38nLXaz%2BrjVViZ5bf6NPhvrMFVHLpa0NaG0HoWDwZuvQL%2BGy6C76oTKkH%2Bfpver8%2FeKcmqfH8LVId%2BSSwk3GeXhYT6Fg%2BeDd8NVSGfw973Nqi2vr3Cpvlg7vysrha0UGcLeosdFw%2Bu9RHCKm8h5Hl4qbK5fJvmgybKslD0StytHLtOdwva2hBan3qjs%2F1cqELjcm2az4wFTllzMpwhIZsNSSL7LyTUtXiQaD%2Br4hKdbJpPhG9M1jjhdJgYMBMmBc7W2YK2NoTWp96Y3NV%2BVoX5TLVpPgETYrNGRH8Ib82Yb9%2BFhHoXD6bAyLhEeGPKLJV%2FZLTQVgAawzD0TJyUBUuSccCbt9D%2BLWgq9Ya6%2FSyZr2oXJwltBYAwDENwNDMLTubgbmV7LiQ0tHjwlBTghFgFR1KFVgbQ%2F0O0hl%2FAMOzV7ddTl%2B37GW9B00bFQdF%2BrvwtGfY%2FSFF9fDZ9NIZhA4n283PWaj%2BrJ%2B3Kf7Oy63G38tIG3S1oa0NofeqNpQ34wsSFdaBKv%2Fy7Te%2FXL9KGrHZZE4CsmVBx%2FGSnhYR6Fg%2FmPwDV8vvQIruteiCtt2k%2BV0VYVlcL2v4qDl3t5x%2FFS6BRhKlqxRKhrQB0a2vroPb29hY6t6Ap2s8W%2F4JZ3yksLMwqKyuD8vJy2LhxI21a0NrwmWg%2FqxQKhUXf%2F%2Bg7oaGhWREREZ0LCXUBaGtDaH3wmdR%2BVgUHB1skG12HxWINcnNza6FLC1offPb09AQ%2Bnw%2Burq4Wu09mvYg%2B92U5HAzgNJ0cpm5Bu5Na0DybAGh96g28%2FcyF40NdYa%2B%2FSxmy8TmS5urwrdi96dZyD3hQiC8kVLegn9gIQOtTb%2FysXjwo5cP5bK4t8vkL0Rp%2BHiH00t%2BHOAyKK2HdnbuZaEF%2F3tWCXrDD1TYAWo96I%2BlzV5j3iQvM2sCGybLBWxBCjoRCxIGAz3%2BxZlgC2W4Hn%2BJjTcLy83gL%2BuO6rhb0ZzYC0PrUGx%2FXgf%2FGGhCuPQPeK762%2Bf3aMFLusPPdtU1Hgz6DM2E74QKpBY1DaOsDaH3qjfMRe6A69Ev4esxW2PavVTbPJ4vLd1jGFzSt9PKFNT7%2BUO4j7GpB%2BwXYBEDrV2%2F4dS4elPA8bJ4PGitxQJPlTWhqCdGCLrd9C1qfeiOuHIfjUSsBjZfZPJ%2FYhMEO8SlDmj7MIlrQ4q4WdHKOi00BNJV6Y77YBV88mOEMM5KdbJ5PmE%2BUw1i%2F2KYJAfF2a0HrU29otp9jbJ6PX0SUw7DJM5venJYAb8drtaBttZBQj3rjnVnqxYPzIHBCnMF8LA2g28RJDn9giU2wJA1vQdtzIaHe9nMKPBMnldkS%2FmAYhuDQAgc4vqgJqpfiLeNzClIL2kYLCfWqNxRdiwePZdkin78QreHnMQx7Ka80e9Cee6l3D%2F6a0q0F%2FXW7%2FeHzV604HD%2FwKBl23EzdgmGYI6EQcSDg81%2BsmVdGTbtDRh00ia%2FhLeilN2zfgtar3riBw%2FHF1wDS6%2F6w%2Bf26L61zeCz9vumZ7B5Anr0WEj7Q234GWTM8lf4Av0gbbJ5PDZbjcF2U06RuQT8gwK%2Fav2xLAE0Nn8WdiwfrxBKD%2BVgasCqVyqyOjg7aLSTUod5Qtba2WvwLZn1HLpc7FBcXN61Zs4Y2Kg7t9nN5eTmUlZVBUVGRxd%2F%2F6DvBwcEOYWFhTZGRkXZrQetTb2i1ny2Wjb7D4XCy3N3d7b6Q0JB6w8PDA7hcrorNZlvsPpkVGEII7RKyo44EusIZrRa0rVQchhYPVg%2FjQmUA59EXfixHZIdTneUWVZ%2FLhztyT40WtK1UHPoWD%2F60wgtuLfeAGsz90dF0V1vlo25B90cIvRK%2B8PV58WtZ8OHHdmpBG7F4MK6U9Rv%2FnZfdEEIvEwqR56wNnztb0PKDUb5l1eC%2F8ZJWC9pGKg6jFg8efyTI22OX%2B%2FXJ2yujDry%2FCU6EfqHRgraVisOYxYO7R697tOktuV3yEXF5Ufme3lDqLbRLC9qYxYNSvuDRQi7fLvmgCcui0JQVeMuY3IK2FYQ2tHgwehWgKYpHaPwSu%2BQzPckpak66M2ioOOzQgta3eHBmypBHsQmD7ZJPuG90VKQwzm4taGMWD0YKYx%2BF%2BUTZJR%2F%2FcTFRw6PmwFtxSRotaJupOIxbPPhIGDHVYD6WBtAYhqHfscQowBZA50JCNYC2NYTWtXgwNx0AS3zUJk5ytDUAwjAMwZG0KDiB4Y5le6g49C0ePCvHFw9WZT%2BCw8m2ykfdgu6PYdgr2%2BrS5u1%2FmEKLFrSuxYN7mlN%2FK92x0A3DsJcJhchz1obPnS3o755FLbqKO5bt0YI2ZvFg5hV4lH75qV3u10NpQ1Sb7Db8V3ZPswVtMxWH4cWD%2F5E1PmpedsUu%2BVwRYVGNohy4I8qxawvawOLBR5fFEkdbA%2BiWlhaH9vb2Jjq2oMnw%2BenTp9DW1maVL5gNHYVCEVVaWgpkFYe9ALSexYOP5HK5xd%2F%2FGDohISFR4eHhdmtBG7N4MDw8%2FFFwcLDFstF3WCyWg5ubW5M9W9DGqDd4PB5wOByL3iezX0QIIbTf36XqxDA3gwsJr9pAvaFj8eBsZMdzUeRe1SjzMLiQ0NIQmkq9QbV48NRCri3zUbegHRDuUn4tunDI2Tkb2fBRBUf%2FQsJd9lk8GCl%2BPQ3hiwdfQF2LB%2F9iq8C8i45UCdeeM7yQ0NIQmkK9Qbl4UHHQrvdr%2B79XVx0aU2FwIaGlITSVekPH4kG75pPL86ha4eVrcCHhFhu2n9eSFg%2BKuTy75oMmLq9CU4sNLyS0NISmgs%2FUiwftmk988pCquZn2W0hoxOJBu%2BYT4TetypiFhJaG0Hrbz5qLB%2B2az9BJM6pGxBixkNDSEJpSvUG5eNCofKwBoImFhFWQm2q%2FhYRk%2BEy9eHC2PeBPJzg5vrAKqnMNLyS8YGP1hnrx4NF0W%2BajbkE7EC7l13Y1pZ6tfIS7lu22kFDP4sHt11LTiMWDL5AWD%2F7FVpmlX4EqUb3hhYSWhtAmLB606%2F36TdZY9VR614iFhA%2Bsr96gXjxo13yuibCq26Icuy0kNGLxoFH5WAOwtrW1RbW3t3drQdsLQutoPz9qbW21yhfMxpyioqIqOiwk1LN40Crvf4w5oaGhVcYsJLQ0hDZh8aBFszF02Gx2FFUL2lYQ2sjFg49YLJZF71OPXkTb%2FdicQ4GcDlsuJDSs3nCHE8PcYL%2B%2Fy1Fk51OV4capzeF12HIhoSH1xv0CATTKPOCiyN0e%2BfwP6lpIOHDE1L8PnVHG%2Bt2mCwkNqDfUiwejC4ecQl2LB59HVlw8qFPFkbeP47uqqsOmCwkNqTc21YBw7TnwLjpi9%2Fu1ZVQhZ8%2FoDR1VNlxIaEi9cSpsBxwaUwHb%2F73a7vlkc3mc5XxBR4mXn80WEhqj3liBLx60ez5oXC4HTSnosOlCQkPqjelrAU0tBjRxud3ziUt04sxOc%2B6wx0JCXeqNxMVsmJvpDPHJQ%2ByeT5jPVE6kMK7DlgsJjVdvTLN7Pv5joznDpszqsOlCQgPqjVEzFsCImHkwdNIMo%2FOxFoBuFydxQJLUYZeFhAYWD6pEiUftCX%2FwhYQpHDgh6rDpQkJD6o0zeerFg%2FbI539ICwkHbjqeOXRfc%2BrvdltISKHeUC8e3NWUeoq0ePB5ay4e1L2Q8HdO1lXosOVCQoPqja7Fg3a%2FXw%2BkdZwW2e0O2y4kfGBw8eBT6V34TdZo93xqxRLOjcWSjh8XS2y%2BkFCfeoNYPGh0PtYCrEqlskq7BW0v%2BKxj8aDVvmA25igUCk5paWmHPRcSUrWfCfWG1d7%2FGHOCg4M54eHhHbZcSGiCesPi2RhzXF1dq4xZSGhpCK0PPmstHrT4fepRYAjhCwmPDnWFszZaSGhIvXHqDS58HcBp2e7HZiEaHPVCwrs2WkhoSL3xQ74H1ObwWqoy3OyRj3ohoQPCncq2X0hoSL2xxQVmlLFa3%2FjgNX%2BELx5Uqzf%2Bxx6vH5svJDSk3lj%2FDfiWHG8R5O2jxf2y9UJCQ%2BqN4yHbYPfo9S1bRhXSIh%2F1QkJbqTgMqTeKvXxBxhe0ZHN5tMgHTZRloSkrAE230UJCo9QbBS1oXC4t8pmxwClrTjqxkNCGKg5d6o2PFrFgdppzS1yiEy3ysfVCQkPqDaL93BLmM5UW%2Bdh8IaEB9cbI2EQY9sHMFv%2Bx0UbnYy0AbdeFhLrUG8vSASRJLe3iJJa9AZDmQsLltllIaEi9cWoZwAlRCxxOsUc%2B6oWEDoRT2a4LCanUGwd%2BS4Z9zamtG49k%2BROLB%2F9mi8WDdFlIaEi9gdUDZF2FlvTLv9Piftl%2BIaF%2B9YZq%2BV34j%2BxmywNpHS3y6VpIaFsVhz71xo3FkpZasYRlbwDd2trKaW9v76CDikO7%2FaxUKq36BbOxp7CwMKu0tBTKy8ttruKggs9E%2B7lFoVBY7f2PscfWCwkNwWei%2FdwSHBxs8WyMOSwWi%2BPm5tZhSxWHIfWGp6cn8Hg8cHV1tcp96vGLCF9I6FJzcpgbnB%2FefSGhJSG0seqNPUJ2AqLJOZLm6nBJ7F7zvY6FhJaE0MaoNxqW8uHMQq4989FaSPj869NWDqmbs5ENCZ9SLCS0JIQ2Rr1RzoZx2KBFCKFXkZ3UGxotaNluB%2B%2BVR2uE686B%2F%2BbL3RYSWhRCG6He8Ft9CrwKKmlzv9aPzHfY8e6amsNBn8LpsB0UCwktB6GNUW8cfH8zfPZOMW3yyeTyHZbyBTVFXr6w2tuv20JCS0JoY9QbCoEvYO4etMmHWEhYg2JKAMWu7b6Q0JIQ2mj1hpQ2%2BUxLGOwQnzyk5sMsVqeKg7yQ0BoQ2qB6Y74TbfIJ9YlyiPCbVjPefwZlC9qSENoY9cY44XSI8I2hTT5%2BEVMchk2Or3kz9iOdCwktBqGNUG%2BMmDoXAsbHmpSPNQE0sZCwBnJTAWRZtlFxGFBvPBMnJNAB%2FpAWEtbgKg5dCwktBKGNUm9IAI5m2DMfrYWEotd3302pI6s4NBYStttWvbHv52T4oiFtEYZhr9pLvUGxkLCGrOIgt6AtCaGNUm%2FUA6Rd%2BS9t7tddaa3DY%2BmNmg7ZHd0LCS0GoY1Tb%2FwiradNPjVYjsM1UU7NbVEO3BNhFAsJLQ%2Bh9ak3vhcvgauiHJPysSZgVSqVWe3t7XaDzzrUGy2tra1W%2FYLZ2COXyx2Kiopq7LGQUJd6o7Cw0Krvf4w9QUFBDqGhoTW2UHEYo96IiIiA0NBQq2Rj7LH1QkIj1RstLBbLKvepx4EhhNAOP3bg4UCO6vQbeAvaGioOY9UbB%2FxdqhDNzslMt8C6JTxVU74H%2FFRkHRWHCeoNe%2BejbkGrFxIOfHfe%2Fx0Tv4al%2BnCrFVUcRqo3YlYMOYsQ%2Bjuyo3qjG4TO3x%2Fou%2BqEyn%2FDRbwFbQ0Vh%2FHqDdrdr61vrwjc%2B94GVVXINjgbvtsqKg4T1Bu0yyebyw%2FM8%2FBSrfIWwlorqThMUG%2FQLh80bmkgmlKoQjGlOAi2horDWPXGB%2Fm0yycu0SlwTrqzyhYqDiPUG7TLJ8xnamCkME41MWAmTA6cbRUVhwnqDdrl4x8ZHfjGlFkqXMWRYh0Vh%2FHqDZPzsSaAxjAMPRUlBoJkvqpzIaE1VRwG1Bt%2FiBKr6AJ%2FuhYSpgbCCbEKTkmtp%2BIwXr1h73z%2BorWQcODH59PH7H%2BQoqq0lYpDj3pjz53UsxiG%2Fd2e6g0KFUfgwjpQYQ1EC9oKKg4T1Bu0u18PpPWBLbLbKtXyu0QL2hoqDqPVG7TLp1YsCWwUYaofxUus3oI2Qr1hcj7WBKzEQsIae7Sg9ag3rP4FsylHoVAElpaWqmyp4tCj3rD6%2Bx9TTnBwcGB4eLhK3YK2horDBPWG1bIx9jg7Ozu4ubnVGNOC7imENkG9YbX7ZJEXEUII7fV3KTo21BXODefCJSssJDRBvcFBNDznsrlF15fx4Z7COgsJTVBv0CEf8kLCFxFCjpNkg8tnESqOpG1WWEhopHpjxNS%2FD0W4eqM%2F6lJv%2FMXegXkXflXkt%2BaM9VQcxqs3aHm%2Ftv1rVdFXY7ZCdeiXVllIaIJ6g5b5SHgeRQUCH6stJDRBvUHLfNB4WRGKXgkodo11FhIar96gZT4zkp2K5mTgKg5rLiQ0Qr1By3wi%2FGKKrLmQ0AT1Bi3zCZwQV6RWcVhlIaHx6g2T87E2gCZUHEWdKg5rtqANqzc4dANAGIYhOJZZhKs4rLSQ0Hj1Bh3yIS8kfBHDMMftN1PLD3SqOFKsCqH1qTc2Hc8cSqg3%2BpPUG3%2Bxd2bptaoia6o4TFBv0PJ%2B%2FSJtKOpUcVilBW20eoOW%2BdSJJUW4isO6CwmNUG9w6ASgEUKotbU1sL29XWUvCK0FoG3yBbOpp6ioqKisrAzKy8ut3oI2oN6w%2Bvsfk%2F%2B%2FCENDi6zZgjZBvWG1bEw5bDY7kMvlqqyp4jBBvWHV%2B2SxF9EXvqwBBwM4TSeHqRcSWk7FYYx64%2BhQV9gjZM9HND1H0lwHfCt2b7ppBRWHCeoNOuXzF9S1kPAltv%2BLznElrLtzN7lYXsVhvHpDhLrUGw50gc8IISRYvnuAT%2FGxJmH5eXwhoSVVHMaqNworaXu%2FNo6UD9j17tqmI0GfwpmwnRZVcZig3qBtPllc%2FoBlfEFTkZcvrPHxt6iKQ3%2F7WUO9Qdt8UGTOADRZ3oSmlhALCS2o4jBevUHbfGITBg%2BITxnSZE0VhxHqDdrmE%2BYTNWCsX2zThIB4i6s49LWfJ2mqN2ibj1941IBhk2c2vTnNCioO49UbZuVjCwDdJk4a8AeW2ARL0nAgbA0IrU%2B9sSQZnokT5tMR%2FhAqjgFwfFETVC%2B1vIrDePUGnfL5C2kh4UsrP8523nMv9e7BX1Osq%2BLQr94QkdQbDnSBz4SKY0BGHTSJr%2BFA2JIqDhPUG7S9X%2FeldQOeSL9vso6Kw2j1Bm3zqcFyBlwX5TThKo4cq6g4jFBvmJWPLQBrW1tbUUdHB5AhtJ3UGzb5gtnUI5fLBxQXFzfZQsWhR71hk%2Fc%2Fpp7g4OABYWFhTZGRkRaH0CaoN6yajamHw%2BEUWVPFYYJ6w6r3yWKBIYTQTiE75EggB84Mt5yKwwT1RvU2X1Y%2FRONzMsst5GouD36Ue1pMxWGCeqP6cKornfIhqzheQAi9Epz6j%2Bj4tSz48GPSQsKeqjiMV29ceNHxuf9FCL2EaKLe0D5e8oMhvqUnwaIqDuPVG9Wesl20vl8fv10Usv%2B9TVAV8rnFVBzGqje%2B%2FPfq6vUj82idz2IuLyTPwwtKLajiMEG9UZ3J5dM6HzRhWQj6oBAHwpZScRiv3qhGkRJa5zM9ySlkTrozWEPFoU%2B98WEWC%2BKTh1RPSxhM63zCfaNDIoVxYEkVhwnqjepQnyha5%2BM%2FLiZkeNQcGBlnQRWH0eqN%2BGq%2F8Clm5WMLAI1hGHqKJYaAZD5YRcVhWL1R3YrN70dXAESoOELgBAZwxoIqDuPVG9VwaEE%2FmgFotYrjBQzDXvn0clr0%2Focp1ltIqF%2B9cWGZXPS%2FGIa9RBf1RreFhN89C1lYD2BJFYcJ6o3qtJp2Wt%2Bvh9L6kFbpD6Baft%2BCKg6j1RvVd6W1tM6nViwJaRRhVllIaIR6o7oGy%2BlHVwDd0tIyoL29vckWLWg96g2bfcFszlEoFCGlpaVgTRUHVft5zZo1UFRUVC2Xy23y%2FsecExISEhIeHg6WVHGYoN6oDgoKsmo2ph5nZ%2BcBbm5uTdZQcZig3rD6fbLoiwghhPb5u1Qct5CKgwo%2Ba6s3qodx4esAjpKu6g3tcz6bW3FdahkVBxV81lZv3M7zgNocnpIm6g0qCK1WcQxACL02JX%2FwzlkbLKTioIDP3dQbm11gRhmrna7qDe3jveLrCuFaC6k4qOCztnqj%2FAL4lhxX0lW9oX0%2B%2F1dpxdcWUnFQwWdt9cax4G2we%2FR6JV3VG9onh%2BdRYSkVBxV81lZvrMTVG0raqje0z3hZBYqykIqDCj5TqzeUdFVvaJ8ZyU4VllZxkOGztnpj3kIWzE5zVtJVvaF9IvxiKiyl4jAEnycFzIIJAfEQKYxT0lW9oX0CJ06vGBE9zzIqDl3wWUO9kQDDPpipNEe9YWsAjWEYUokSKyA3xbIqDir4rFZv5KYDSJKUdFVvdFdxZFVYTMVBCZ8p1RtKmqg39Kk4BmAY9tqu26k7DzyygoqjnVq9cfDXFNjXnNpOV%2FVGNxVH3R8Vi69ZRsVBBZ%2B11RviawBZV0FJV%2FWG9vwqvVHxVPqDhVQceuAzod54JrsH%2F5HdVNJVvaE99WJJhaVVHGT4rEO9oTRHvWFLAE20oEPa29vBVhBaC0BXt7S02OwLZnNPUVFRhbVUHHrUG0pz1Bu2BNAIIRQaGlphKRWHMfA5MjISwsPDleaoN6wNoBFCiM1mh6hb0JZScZig3qh2dna2%2Bn2y%2BIvoC1%2BW48EATrMlVBxU6g01fFarN44EusJuIftDxJBzNN3VsQZzb7aEioNKvdEJn4u84Ee5J9Tn8uHUQi6d8yGrOF7mv%2FOyW9wq1kOLqDio2s%2FbtdQb69gwVvR6FqKpekP7CJbvdvQpPt5sERUHhXpDDZ%2FV6g3fsmrwUhxkzP3a9Jbccde7a5stoeKgUm%2Bo4fNZQr1x4P1N8Ok7xYzJZyGX77iML2i2hIqDCkCr4fNaQr0h9%2FQGzN2DMfmgyBxHNFnebBEVhz7vM1m9MVHKmHxiEwY7zkwZ0mxJFYdG%2BxmjUG8kOTEmnzCfKMexfrHNllBx6PM%2BTybUG5HCOAj3jWZMPsKIqY7DJs9stoiKg1K9QcDnmSnwVlwSDI%2BaAwHjY3uUjy0BdJs4yfEPLLHZoioOKvisVm9gC%2BB3LPFDJsAfDMMQHE52hKrsZouoOAypN85IAU5gAEfT6ZwPWcXxcumOhW577qU%2BtLiKQ4d6Y%2F%2FDFPj8WmoWXdUbFCoOx8wr0GwJFYc%2B73OneuMqQNp3zxhzv5qXXXF8Iv2%2B2TIqDgr1hho%2Bk9QbP8uuMSafy2KJ43VRTrMlVRz61Bs3RTlwVZTTo3xsCVjb2toqnj59ajUVhw71htIc9YY9ALRcLncsLi5utoaKQwd8BoVCYdP3P%2Bae4OBgx7CwsGZLqDj0wWe1eiM8PBxCQkJsko25h8PhVPB4PIuoOAzBZ5J6Q2mOeoMWABohhHYK2aMP91DFoU%2B9celNdzg3nAvHh7rCfn%2BXPYhh52SW2%2Bi6JTxoyvcwW8VhSL1xTyGA61I%2BXFjsTvd8uqk4xiz4x%2BT4tSz4cKsLJJir4tCn3tjmCvM%2BcYFZG9gQJXf6GiH0GtHApqV6Q%2Ft4yQ%2BM9l11omcqDn3qja1XwH9jDQjXngHvFYcYd78%2Bfrto9L73NvZIxWFIvVEd%2BiV8PWYrfPHvMsbls5jLG53n4QWreqDiMEa9USDwgSU8D8blgyYsG42m9FDFYUi9EbsGUNRKQBOXMy6f6UlOoy2l4tCl3kjIZsOcDGeYkezEuHzCfaNH91TFYbx6I4Zx%2BfiPixn9RtTsnqk4DKg33poxH0ZEz4OhE6f3OB9bAmhCxTHaYioOveqNFFCJEvcwBf6QVByj4YQY4FQPVByG1Bun8wBO5gAcy6J7Pt1UHBWX0ifvf5gClb%2FhLeUet6C7wWdc83HgUTLs%2FCHlawzDXiMa2LRUb1CoOEYvrOuZisOQ9zmnHmDxNYD0uj8Yd78eSutHt0pv9VDFoV%2B9AbJmeCr9AR7JrjMun1qxZHSjCIMfxUt6rOLQp964JZZAvVjS43xsCVhbWloc29vbm63RgtYBn0GpVNr8C%2BaeHIVCMdrSKg7t9nN5eTmUlZVBUVGRzd%2F%2F9OSEhISM7qmKwwT1hs2yMfewWCxHNze3ZkuoOAzBZ5J6w2b3ySovIoQQ2uvvUnaMUHFcHGGaikMXfL5MeJ%2FPD3eHk8O4cDCA0%2FSFH8sRMfCcy%2BaWXV%2BGqzgemqji0AWffyvxhp%2BLvOBBoQBuLveAb8XuTUfTXZmQj7aKw3GybPCWWetxFUenD9pYFYcO%2BDx%2FO%2B59TviUA3M3uUBcCesu%2F52X3RBCLyO8gU1b9Yb28V7xdZnfGjNVHDrh8zUI%2FLgOV2%2BsOwc%2BxceaBHl7GHm%2Ftv1rVdlXhIrjXPhuk1QcuuDzxbH74XzEHjgTthOOBH0Ku95d27TpLTkj85HwPMq6VBxCk1QcuuDzBt8AWOfjB6u9%2FaDIyxeW8QVNC7l8RuaDxsvKUDSh4ohdZ5qKQxd8jt9IwOe1gKaWAJosb0LjlzAynxnJTmVqFUcnhDZRxaENnxdoe59ThjTFJgxmZD4RfjFlahXHpMDZJrWgjVVvjPWLbQrziWJkPoET4spGRH8Ib82YD2%2FPNFHFoVe9kQpvxyfDm9M%2BgmGTZzYJI6b2OB9bA2gMw9AzcVIZLEnGQXHeQvNa0LrgsywLYEka%2FIElNrWJkxyZBoBwFUdmWZeKQ26aikMXfD6%2FgvA%2B5wNULwU4vqgJDiczIR9tFYfjjpupWw78nNxzHzQJPne6n58kw8FfU2DPvdS7pTsWumEY9jLRwH6Ozu1nLRVHWXa9eSoOXfBZSjSqc6%2Fj3ueMOmhKv%2FyUkffrF2lDWbusCVdx5JvagjYAn%2FOaoUN2B55Iv29qXnaFkfnUiSVlXSoO8yC0Nnz%2BSZQD9xeL4R7hfb4uymm6LJY4MglAI4RQW1vbaGupOMjw%2BenTp6BUKu3yBXNPT1FRUZlaxaGG0Oa2oHV5n4uLi5vkcrnN3%2F%2F09ISGhpapVRzjx483qQVtrHojLCysKTg42GbZ9OSw2ezRXC63RyoOQ%2B1nDw8P4PF4wOFwbHqfrPYi%2BtyX1f9ggEvDyWFucH44ruIwBkIb8j5%2FM8IdTr%2FBhcOBHNUOP%2FYoxNBzJM21%2FyWxe4NaxWGsD9qg97nIC5ryPaBuCU91MsuNSfmQVRwv%2FZPff%2FC0lUO%2BJ6s4jILQRnifP9zqAvFrWKox8%2F8xFiH0CsKb139lCnxGCCGBbHd%2Fn%2BJjDcJ158B%2F82VCxWEEhDbgfQ7cWgv%2BGy6C76oTKi%2F5Acberw0j5f13vru24XDQp3A6bIfRPmhD3uez4buhKmQb7H1vg%2Brjt4sYm08Wl99%2FKd%2BrocjLF1ab4IM25H1e6yOEEi8%2FyPPwUmVzeYzNB42V9EeT5Q0opgQHxsb6oA15n2PXAYopBTSlUIXGLWVsPrEJg%2FvHpwxpIKs4TIHQ%2BrzPhHpDFZfoxNh8wnyi%2Bo%2F1i20wVcVhCD6T1BuqMJ%2BpjM3HLyKq%2F7DJMxvejFWrOIyE0Ia8zzNTYGRsIrwxZZbKf1yMRfKxB4BuEyf1%2FwNLbIDcVBwYm6ri0OV9Vqs3JPNVT0WJo5gIfzAMQ3BoQX84vqihU8VhrA%2FaKO%2BzFOCEWAVHUpmUD1nF8VLh%2BsWDd99N%2BZ6s4jAZQuvwPlf%2Blgz7H6SoKi6lj8Uw7BWief1XpsBnQsXRP6MOGkT1%2BKLApTeMg9DGeJ%2BxBoCFdaBK%2B%2B4ZY%2B%2FXfWld%2F8fS7xtMV3EY8D7nPwDV8rvQIruteiitZ2w%2BNVhO%2F2uinAZcxWG6D1qX9%2Fn%2BYgn8uFgCjSJMVSuWWCQfewDWtra2so6ODouqOCjaz02tra12%2BYK5p0cul%2FcvLi5u6KmKQ4%2F3WaVQKOzy%2FqenJzg4uH9YWFiDqSoOQ%2FCZpN5QBQcH2zSbnh4Oh1Om9kGb2oI2Qb3RxGKxbHqfrBYYQgjt8GMHHgrkqE6%2FwYVvuqk4eFD3liaEvqrD%2B6xWb1wc4Q5nh3Ph6FBX2CN0WYoYfk5mugVeWcJTUak4nhAAmgyhyUP2PqvVGw%2BLvOCuQgDXl%2FHh7CIu0%2FIhqzj6I4ReeXfe%2Fx0Tv4almrulu4pjwQ5XHDKTIfQu%2FeqNxM84MO8TF5i5ng0Tc%2F%2B5EiHkiBB6EeHNa9qrN7pB6Pz9gb6rqlTC9d9A4NZaTRXHZ2oATYLQGtPlfdZUb3wLfqtPg3fhV4y%2FX1vfXhG4970NqqqQbd1UHDiE%2FkoDQpOH7H1WqzfOhe%2BG6tAvofL9LbDtX6sYn082lx%2B43MNLVeLl113F4RcAmwnQvIViqNQbau9zgcAHJDwPxueDxi0NRFMKVCim1LCKg2rU8Fmt3ohdB2j6GsL7LGN8PnGJToFz0p1VVCqO5BwXSNYDoanUG0mL2bh6I90ZZixwYnw%2BYT5TAyOFcSpjVBxU0w1AE%2FB5nHA6RPjFMD4f%2F8jowDemzFKNjKVQcVBBaNJoep%2FTCfisVm98CIET4iyWjz0ANIZh6KkoMRAkSSq9Kg5dEJoMnzsB9EK8Ub0kGZ6Jk5YyFf6QVByBcEKsolZxUEDoC0Z4n08vx9UbRzOZlg9ZxdEfw7BXPj6fPmb%2FgxTVAQoVx9ft5nuf9%2F2cDDsaU1diGOaIYdiLRPO6H1Pgc2cL%2BvLvgVlXQYXV4%2BBYn4qDaqjUG5JrANn1AOm1KsbfrwfS%2BsAW2W2VavldChUHFYR%2BQO19VgPofFy90S5rgl%2BkDYzPp1YsCbwhlqh%2BXCzp3oJeLCEgs8Rk7%2FMtsQTqxBKL5WMPwNrS0tK%2Fvb29QbsFbUH1hqq1tdVuXzBb4igUisDS0lIVlYrDWAhNBtAbNmyA8vJyKC0thcLCQru9%2F7HECQ4ODgwPD1cZo%2BIwNBMnTuyEzxERERAaGmrzbHp6WCxWfzc3twZTVRzGwmcul6tis9k2v09WfREhhNAeoYv46FBXOKul4iD7oOt0wGey9%2FnbN93h3HB3ODHMDQ74u1Rv82X1Q73gnF3EFV9fxoe7WioOsg%2B6VQd81vY%2B3y8QQKPMAy6K3KuPpLkyMR%2ByiuNFhJDjhCX%2FlM80oOJINgI%2BJ32Oe5%2FnbGRDzIohF150fO5%2FEUIvIdz7%2FBzT4LP6eBVWiv1Wnwb%2Fjd9qqTjIPuhGHfCZ5H3%2BuA78N9WAcO058C46Uu0p29Ur7tdn75SIK9%2Ff0k3FQfZBa0NoXd7nU2E74NCYCvjy36ur14%2FM7xX5YO58cYHAB0q9hTpVHJuNgM9q7%2FMKL1%2FI5XlUZ3L5vSIfNFEmRlNW4OCYrOIwBKGpvM%2FT1wKaWgzog%2FxqFCnpFfnMWOAknpOuX8WRbKT3OXExG%2BZmOkN88pDqaQmDe0U%2BEb4x4nHC6UapOIz3Pk%2BrDvWJ6hX5BEyIFVOpOMg%2B6H%2FpgM%2Fa3udRMxbAiJh5MHRSfLVfxBSL5WMvAE2oOMSUKg59EFqv9zkV%2FhAlVrdi8%2FsxHQBhGIbgaKYYV3Es1%2BODXkkNn7W9z2fyAKpzAY4vrIZDC5iYD1nF8SKGYY7br6fK95mj4tCCz1%2B14v8blY%2BSYc%2Bd1AvL5KL%2FxTDsJcL7%2FBzT4HOnD%2FrKf8XZ9Tg4NqTi0Aufb%2BBNalE9QPoVqE6rae8V9%2BsXaYOYUsVB9kFrQ2gd6o0%2FljfDU%2Bld%2BE3WWH1XWtsr8rkqwsS4iiNHp4pDG0Lr8z7fFuXANRFWXYPl9GMygEYIodbW1sD29nZVT1Qc6mfJf5bwPtv1C2ZLncLCQnFpaalZKg6q9jPhfa6Wy%2BV2e%2F9jqRMaGiqOiIgwSsVhgve5OigoyObZWOKw2exALperMhZCG4LPavWGu7s7cDgcu9wnq7%2BItvmy%2Bh3wdzl%2FYpgbnNOj4iAPlff5wgh3qB7Gha8COI%2B3%2B7FZqJecI2mu%2FS6K3M83yjzgfoFuFQd5tL3Pv6zEvc%2B3lnvAZYz3uCrDjcn5qFUczyOEXnrR8bn%2FjSkaUjNnIxs%2BqtCt4tAYXd7nzS4wvYz15I0PXvNHCA1EeNOaMd5nquMp29XPu%2BjIeeHac%2BC%2FqUaPiqNrdHqfy8%2BDT8nxx4K8fb3mfq0fmd%2Fvy3%2BvPn9oTAWc0qPi0BxN7%2FOFiL1wJmwnHA36DHaPLn%2B8ZVRhr8knk8vvl8vzOL%2FCy5fwQfvphNCbdXify32EsMbHH1Z6%2BYKUL3iczeX1mnxQpKQf%2BiD%2FPJpajANkQyoOXd7n6esARa8CNFnxGI3L7TX5TEsY3C8%2Bech5QyqOZC0Yrcv7PDNlyOO4RKdek0%2BoT1S%2FCL9p59U%2BaEMqDkPe50hh7OMwn6m9Jh%2B%2FiCn9hk6KPz8iZh6MmrFAp4qj22irN%2BKT4c1pCTDsg5mP%2FcdGWzQfewLoVmx%2Bvz9EiechNxUHyLpUHFRDhs%2FLswBy0wGwxMft4iRWb4A%2FhIqjHxxfeB6qc3GArFPFoT0k7%2FM5kve5avFjOJzC5HzUKo7nMQx7aZlc9L977qTWVD5KNl7Focf7vK859cnGI1n%2BGIYNJJrWzzFJvdENQNe090u%2FAueNVXHo8z6LrwFkXoXH6Zd%2F7zX36660tt9vssbzT6V34Y%2FlelQc3aa79%2FmZ7B78R3bz8QNpXa%2FJpwbL6XdNhJ2%2FLcohfNBinRC6azS9zw8WS%2BCeKAeacO%2Fz41qxxKL52BOwKpVKcXt7ezf4bCqE1mo%2FV7e0tNj1C2ZLHblc3q%2BoqOi8qSoOPd7nxwqFwq7vfyx1goKC%2BoWGhp5X%2B6BNbUFre5%2FDw8MfBwcH2yUbSx0OhyOmUnEYC6HJz3t6egKPxwNXV9dqZ2dnu9wnqweGEELb%2FdjcrwM4LdXDuHCBpOIgQ2jN0fQ%2BXxzhDmeGc%2BFIIAd2CdkTUC87VRlu3NocXsvtPNwHrVZxkCE0eXR5n6%2Fm8qA6y43p%2BahVHM8RgHjgmzF%2FHz6jjNU6d7OmikMDQpNGp%2Fd5LQvCMv%2FfTITQq4iB3mddR5C3j%2BtbcrxFWH4BArZ816XiIEFojenmfb6Ce59LT4KX%2FGCvu19bRhVyd49e33IseBucCdvZqeLQhNBdQ%2B19%2Fhz2v7cJPnl7Za%2FLJ5vL48r4gpaVXr6wxse%2FU8VBhtAaQ%2BF9XuUthDwPLxBxeb0uHzQul4umFLSg6FU4SFarOMgQWnu0vc%2FTygB9UAhowrJel09cohN3dppzy4dZmioOMoTWaEDr9j7D9CSnXpdPmM9UbqQwrkWfD5pqKLzPEO4b3evy8R8bzR32wcyWkbEJhA%2BaWsWh1%2FsclwjDo%2BaA%2F7gYi%2BdjTwCNYRhqFydxQZLUArnpOEjWpeIw7H2G37HECb0F%2FnQClsMpXDghaoFTy3CQ3NmC1gWhdXmfMYAjaUzPR63ieI4AxAM3VmUM39ec2nrw1xQNFYcGhCaNTu%2FzwxTYVps2E8OwV5nofdaj4uBmXYUW8TVNFQcZQlON2vu8tIHwPtcDpH33rNfdrwfSOu5%2FZDdbnsnu4T5oXSoOvd7n%2B9Aq%2FQEeSht6XT61Ygn3xmJJS5MoB%2B4RjWY1XO6C0KSh8j6Ll0CjCIMrIszi%2BdgTsLa0tPRrb28%2Fb66KgwI%2BP25tbbX7F8yWPAqFgltaWtpiLITW430GhUJh9%2Fc%2FljzBwcHc8PDwFmN90Hq8zxASEmK3bCx1nJ2d%2B7m6up7n8Xjg6elpEoDW4X1%2BzGKx7HafbPIiQgihXUJ2zJFAVzhDqDi6Q%2Biu0YbPau%2FzXn%2BXItRLz6mF3Jj6XD78KPfU8EGrITR5yPCZ7H0%2Bl83tLfmoIbQDAYpfjch%2BPSF%2BLQs%2B%2FJik4iBBaO1Rw2ey93mSdHA5wr3PAxDesGac91nX8VIcjPEtPQn%2BGy7iKg5tCK0xWvC5y%2Fvca%2B9XxTsrYw68vwmqQj7X8EGrITR5yPBZy%2Fvca%2FMRc3kx%2BZ7eUOot1PBBd0JorSHDZ5L3udfmgyYsi0FTVuAgOdYAhNaGz2rv83hZr81nepJTzJx0Z9D2QashtPaQ4XOn9znZqdfmE%2B4bHRMpjANdPmhD8JnwPvfafALGTYsZHjUHRsbp8EGTRhM%2Ba3ifrZKPvQE0hmHodywxBrAFYNAHTQmfO73PRb0N%2FnSpONJj4AQGcEbbB62G0KTR5X0%2Bltlb8lFDaAcCFL%2F6%2BdXUhP0PU7qpOMhO6K8p4DPZ%2B%2Fzl92nlhPd5ANGw7sd0%2BNzZhP7uWczCehwkL20wDKHJ8Jnkfe619%2Btn2bWYNtltUC2%2Fr8MHTRot%2BEzyPvfafK6IsJhGUU43FYeGE5o0OrzPVsnH3oC1tbWV297e3mIKhNbhfYa2tjZafMFs6aNQKGJKS0tBlw9ae8jwWe19LioqosX7H0ufkJCQmPDwcDDWB60Nnwnvs12zseRhsVhcNze3FlNUHNrwWa3eYLPZdr1PNnsRIYTQPn%2BXrceHusI5CghdS4xau6FeOnhuOLfT%2B%2Fy5L8sB9eJzPpu79foyPtwjfNBkCP2fVV0LB38jLR3U8j73pnzUPujnCWD82gf5g7f%2Ff%2FbOPCiqM93DX%2B5MSFJyw6Qyc2tqCEh3QwPN1mxCwjVmknhlaxYjLi0KCsYNUFYF7D7dIM3SLbYLiqJo2olXjaLiNkYibnRcohgFOUazaBQcsshFaGCmr%2B%2F945xDH7ZkauqCxz7fW%2FWr6m6r%2FONX56s6POfU8y4Y7IMeBKH7tRss%2BMx4n38%2F%2FqU%2FIcr7%2FDKyqDesZnzWnjT4VRohoLpxGAh9m7VwsMWydJDlffYqPmTV52vvuxWGk6EGlg%2FaAqGv0bnaD58tSwdZ3mer7kft7mFY4yWlVRzDQ2hGu0F5n%2F0He5%2Btuh%2F0QbEBydcBSqgcCqGTdlgWDiZVW5YOJlRavM8xKqvuZ366o2FhziAf9CAI3a%2FdIESQpqDgM8v7bNX9RPvNMTAqjum%2FAKFnBi2CmUGLYDoNn1neZ6vuZ0LcPENI%2FJJBPmiLE9qSQfDZ4n0elX64AKAJgkBmRaoBCjMsPmg2hGanbNXApYO097lbmWZjrQCIIAgEp1caKB906VAIfYkFntnweaD32Zr6YXzQL9HA%2BPUD32Z%2BcmwYHzQbQrO1Gwx8ZrzPpRWKP9He55dZ6g2ruX6ym54a8m8BqG%2BNDKEZ7QazdJDtfc5p7LHq8%2FWz5itDr%2BY7lg%2B6baATmr1wkLV0kOV9tup%2BbilVBsoHTYwIoZnvFvg8wPtsY40AGiGEuru75%2FT09MA%2FA6EHw2fG%2B9zd3c2ZB8yjMXq93rBp06YBPujhIDTze3V1NVRVVbG9z5y4%2FxmNiYyMNDAqjl%2BC0HFxcQOWDrK8z8%2B0m%2F%2FvEYlEcxgVx69B6F%2FwPj%2Fz8zSmF9E%2BX4Ht8UAReY72QV%2BlIXQjDaIZ8HyNtXTwXLArnAh0bv%2FET2iPrHzqslxsryrdyLsllA%2BagdA%2F0yCaAc8%2F0UsH29Z4wdclHtBIuLXXZ7tYWz9sFcfLCKFXhQHjnOauG3%2BX8UGn7qEgdD%2BIpsEzs3Rw6cfOsGiHCBIrBD%2F6R7%2FmgyzeZ6tQbwwer5JDttL1p0n%2FrYwPmoHQt2joTIPnvzRT3ued1ynv8%2Fr6dq%2FSWqs%2FX9UTtbY1728hT4XthguyA%2F0Q%2Bkr0Efgi5mg%2FeL4SXQuXog9Dg6wG6sJ2w6HJW9t3Tlpj9f2sdJXYrpZ4k3pvX9jMgtDbaBDNgOcqeungZh8%2F0FPe5%2FY8V3er7wfFqm3RDC2J5myw%2BKATt1GwOanaAp4Tt7GWDm4ANEvXjqYWWn0%2FCSkOtkkZ40nGB52moCB0P4imPy8b6n1uT0h1sPp%2BZFK5bYxfAjkchGZnRtDCwd7ndpl0ttX34xcltw2ekUz%2BZ8JSmDR%2FuQVC94PoLMv3BZm093kpBM9Ibg%2BIjR%2B1frgCoLuVabZPiVRygA%2BagdDslOZblg4WZAEQqe09yjR7a4Y%2FtA%2FaFurzSIsPmobQbBDNfP%2Bc7X3Ob4dTGdbWD1vF8TJBEK%2Bu25XvdOhBxl3GB81AaDaIZr6zvc%2BH2zJ%2F3Hp8pQ%2FL%2B2wV6o3ByWnssc1pAnKAD5peTKhhgeci%2Bt8KSNr7fBPas6%2F3Wv35atU02XZo7pJ9xd9TPmg2hB6Qtn7vc1%2Fx9%2FA%2FxXfa24qbrb6fRkJt26JQk98q1PCQBaHZIJr53rpKCQ9p%2BHxboW6%2FrlSNWj9cAazd3d2G3t7eYSH0cJ%2BZN59Z3mfOPGAejdFqtbbr168nGRVHdXV1P2weLizvc7tWq%2BXM%2Fc9oTHh4uK1MJiOHg9DsTJs2bbD3uT08PPyZdzMa4%2BzsbHB3dx%2FWBz1SPDw82N7nZ36exrQwhBDa7yeUnpzg3Hch2BUuhTAQ2o2GzhR4vhriBpdC3OBCsCucmuBsrvEXvot4MmdzxNIbavc%2BygdNgeYf11HQ%2Baf11Ocf9N7wqNwbviv1gKYCd%2FO5lWJr7YeB0C%2FS4Njuz8n%2F8d78TYK%2FL9opgqW7aQi9dyB4Tt3jDEvppYNJlQLzlGV%2FnIYQ%2Bh2yIu%2FziBC67KhUurG%2Bz7%2FqMgTuvE5B6F1NFHSmwfOEXTdp%2BHwZfDeeNXtrj%2FHmfH00aa308ORtfafD90CDrAYuRR2Gy9G1NIiuhcvRtXAp6jA0yA5CffgeqP2v7eZd7%2Bh500%2B%2Bq0RaLPHqY3zQW6X%2BUEWD6CrfAKiS%2BsNWqT9USv1hvbcvlHp4m1e5uvOmHzS1UIpmrelD8RsBJTAQmgbRDHhOrKL%2BLX4joFnlZjStiDf9JKY6Shdkju9bksuC0MqB4DlNIYTUVUJYkiuAhdlO5nlpjrzpRyadLZ3qn9jH%2BKAZCM3O9AkfsuBzolkmnc2bfgJi46XBMxf0MT7odxawIDSddxZkwjvJ6TAxIRXenLXAHDB1zqj2wxUATfugpaBK6%2Bv3QZflWUA0A57ZSwdVy8y9ROq71g5%2FLD7oTCmcVfT1%2B6A%2F11FLBhnwfFFngc8XigDOKs1Ql2mt%2FTAQ%2BkXGB224kPPekbbMvx%2F%2FOWMIhGZy8snyfvh89FGG%2BeOr2dMIgvidNXmff8EHLV3RDH3KFgowr%2F6KBaJZ3xn4nNsE5qwv%2F8Gb8%2FVIc0v6pPjrvn4ftPYRvZiwzQKetY8ASv8GZs0DeFL8rbldc4s3%2FdxQqqRfrVL1MT7o1lUqeMQC0Y9WqaCVtXTwjoIw31CqRrUfrgDWJ0%2Be2Pb09JCDAfQvhYbP7V1dXZx6wDxao9PppBs2bOhjVBzDQejq6mq299ms0%2Bk4df8zWhMeHi6Njo7uY3zQDIRmh3nzmYbP5vDwcE50Mxrj5ORkKxaLSYlEMsQHPVxY3ud2oVDIifM05hcRQggd8hem1E1wgYY3qaWEX9Ag%2Bir9%2BXKIGzS8SXmfD%2FmLViKeTUOua8qtQgncK%2FOER%2BWUauMHOu00fL5X5gktqyVgzHO19n4YFYcNQmgcQui1qYR9XvJWISwyiCCFhtDspOx2hkUGESRvFcI09RtFiPI%2Bj6P%2FD6vxPo803rrjKb6bzkPA9i8gcOeXEGi4SYPomxBouAmBO7%2Bklg5uOg%2Fea47z7nzt%2FvP6lGNTdsKZiL3QIDsIF6MOwaWow3Ap6jBcjDoEDbKDcCZiLxybshN2%2F3kD7%2Foh3DxStJ4%2BsNGHAs1bB6WSXjqo9fQBwk3Cu35QnCaF8kFXUEsJE7aywPNW6re5FZT3eZqGd%2F3MS3NMWZjtBGwIzQ4LPsO8ZY686yfKNz4l1j8R2BB6QCzwGaJ843nXT%2BAHCSlvzWZ80OnwTnImBZ0XZFKfk9OppYOzF0LgtIRR74dLAJr2Qaf0%2B6BLVlKqjX4QnUv9pskBKEiHPmXaSr7AH4sPOicFzhLUYkFjGfUm9Oc0eP5cS8NnDcBZFcBnOdbeD6PisCEIYhxBEK%2FtI7PyjrZnwLHHljeh2flrZzoco5cOfnI7s4j2Po%2Bj%2F4%2FfWCt8ZvmgU%2FKaKR90YQul2mDA82r6N4IEyGsGyLr5D96drx%2BKW1L6fdCltGpDS6eMhs8lrdBd%2FC38UHybd%2F00K9QpXyvUcF9Z0A%2Bh2XlI%2F9vXCjU0K4hR74dLgLWrq0va09PT989AaBo%2Bm7u7uzn3gHk0R6fTpbB90NXV1QPCXjpYXl7Oufuf0ZyIiIiUqKgoYENodljwGSIiIjjTzWiNUCiUisXivuF80MPBZ1dXV7NQKOTMeXomFxFCCNUGiGpOB7mA8U1Kx3GZBs8X33ID45tiOB3kAkcCREcRT%2BdSvlsNuZpaSti2xgseraXStsYL7ms9gSySwKV8N770M8QHPavM4URylQAWG0Sw9GMKOqfsdoalHzvDYoMIkqsEINc61iGEXkeU9%2FklROk8XuBDYT5rT9b4br5AQegdjRD40ZdUdjRCwPYvwG%2FzBfBZe5K352vfuxU1J0I%2FgjMR%2B6BBdgCMsoNglB2EBtkBOBOxD06EfgT73q3gbT9qd48anZcUNvr4w2ZpAFTS4HmzNAA20ksH1e4evO0HxRXXILmeWko4bwv1xnPCFurz3E2A5HpAcSW87Wf%2BcseahdlOsDSX8jynrqKSki%2BEpbn00sHljrztJ9pvTg0DoeMCkykQHbgA4gKT%2B%2BFztN8c3vYzIW5eTUj8YgpCJ6XTIDod3kmi4HNI%2FGKYEDdvTPrhGoAmCAL9Q5lWAwXpAJpsSrVRspIGzyuo3wrSwaxIPco3%2BMPyQdfAWRW1lNBYBvA5HWMZ9dt5FcDplXzpZ4gP%2BuC3mSeO%2FJAOJ2gIzc6Jx9TSwZrvMuoIgnid9j6%2FROs8XuBDZ9lNT2vy6KWEBSRA4W0qBSQNn28BZDc95e35%2BlnzVU1P8T0aQrdRILr0bwClbWAuaYWe4nvws%2BYr3vZzS6mquatU9UNodu4rC%2BAbpQpuKVVj0g%2FXAKvJZEoZzgc9wtJBTj5gHu0pLy%2BvYSA044RmFg6y4DMn739GeyIjI2vYEJodBj5HRkZyqpvRHJFIlDKSD3rw0kFnZ2dOnadndhHtlQrsjgWKyPpg6k3oi2%2B5wudvuULDm65QH%2BwCxwJF5F6pwI6vf4DVZbnYfaFwI28XecB9rSc81HnBQx0Fn29rPOALhRtZl%2BXCl36G%2BKDFIbaiOXrHuwtoCL3kLyJYsksEiw0iWLBNAHP0jnfFIbYihNCraODSQV4AaK%2Fig3bSdXWkX2UD%2BG%2B%2FAgE7rkFA9VXw334F%2FDY3gI%2F%2BFOlVfJC352v7RK3d%2Fvcqyb%2BG7oKzkfvgvGw%2FnJfth7OR%2B%2BBk6F%2Fgk%2Fc2k9snannbzwpXid1qiRdZ7iWFCh9q2eAmHz%2FY6OMP5V5SWC3xIle4SnjbD4oi7ND0UhLFr6OAc0IloHmVNHxeB2h6KYmiCN72MzfFwS4pfTzJvAm9NI%2FKklwBLMxxgqT08eTcFAfe9hMpldvF%2BM0l2RCagc9T%2FedBjN9cMlIq520%2FftFyu6AZSWTInMXwdmIaTJq%2FDCbNXwZvJ6bRSwfnk37RY9MPFwF096o0O8oHnUG97axZQScHoDADnhKpZPeqNDveAuhPl9tBfS4J5woo4NxQSsWoAThXAFCfS8Kny%2B14BKAH%2BKA37M0VHf4%2B%2Fe4xGkIf76By4nE6HPshHQ5%2Fn353w95cEUEQrw5aOsgLAJ3T2GOX3QxkPg2hVbcBVPSbz%2FnU0kEyp7GHt%2BerVdNk97j4DtlTfB%2F%2Bt%2FghPC1phaclrfC%2FxQ%2BhV3MfHhffIVs1Tbztp5FQ27Uo1CS1lFAN3ysI%2BF5B9MPnFoWabCTUdnwE0DSErhnOB83A597eXjCZTJx9wDzao9Vq7fR6PclAaHbopYOkVqvl5P3PaE9YWJidTCYjB0Po2NhYiI6OBplMRoaFhXGqm9EeZ2fnGjaEZocFnzl3np5ZYQghtM9XKDke4GyqDxLDuWBXOBfsCvVBYjge4Nyx11fojHg%2Bp7NcJNcIN9NtjQS%2BK%2FWA70o94LZGAteUbh2fZbnwrZ8hPuiJCX%2BYmLjRqWfBdiEs2imCRTtFsGC7EBI2OnW%2BJf99ELLypYO%2FCqFLDkuk6%2BpMfpUNELDtMvhXXQK%2FygaQrqvr8Co5zPvztePtNZID728xnQzdBWci9kJ9xB44GboLDry%2FpWPH2zre95PnKpGslnibyr2ksN7bF9Z7%2B9Lw2bsj11XC%2B35QrFqCppeZ0Cw95XuO3wholh7Q9LIOFKvmfT8JqY6SpPTxpoU5TrB4pQAWr%2ByHzx0JqY6870cmlUti%2FOeaYv0T4YOA%2BfBBwHyI9U%2BEGP%2B5HTKpnPf9%2BMfOlgTPSDKFzFkCExNTYWJCKoTMWQLBM5I6%2FGNmj1k%2FXATQ9FJCyVNFqgkKM6hlgwVZFHxWpHZ0K9Oc%2BQp%2FLBA6XQJn8kxwTk35ni8UAZxTA9TndcCn6XzrZ4gPesfZFRNrWzN6jv1E%2BZ6P%2F5wBx35Kh9rWjM7tn60Isvalg7%2F6FvS1Xkl2M5jyb1G%2BZ2ULDZ%2BboSP7Wi%2Fvz1dbUbOkQ3PX1Ku5D%2BaSVjCXPIBezX3o0NztaCu6yft%2BritVkhaF2vSNUgX3aOczDZ87ritVY9YPFwFrZ2ennclkIpklgwyIZsFnsrOzk7MPmMdidDqdRK%2FXmzZt2gSVlZVQWVnJwOcOnU7H2fufsZjw8HCJTCYzRUVFQUxMDMTExEBUVBTIZLKO8PBwznUz2iMQCOzEYjHJLCX09PQET09P9tJBUiAQcO48PdOLCCGE9vsJ5ScCRVAX5AKnglzgeKDI%2FImfMBThQQghdHaFWN5IuEHLagm0rJZAo9LNXJ%2Fjwtd%2Bhvigo1b%2BaXFihRMkVwkhuUoIiRudzGHL%2FzgLWZYO8sL7PCKELjsil67%2FDHw3nQffTefBZ12d2au0Fp8vegyTyuWH3q%2BCE1M%2BghNTPoKa97eYd05ag%2FuhJ99VIi%2BSeMEaT29Y4%2BkDRRIvc76rO%2B6HmamFcjRDS%2FmeZ5YDmqE1ow8KcD8WCC1PSh8PH2Y5wYdZTpCUPt6ckOqI%2B7FAaHmM31yI9U9ktBtmmVSO%2B6EnICZeHjwzGULiF0NI%2FGIInpFsDoiNH9N%2BuAqg6aWEciBSAdTLAdTL4SmRau5RpoXyHf70w5e6TDmcyad8z2dVAPX5ZjiVwdd%2Bhvig99zIWny4jVJuHPkhHWpbM8z%2FfTV7FmvpIC%2B8z7%2BwlFCe00T5nvOaAbKbwZx9vRefr%2F6lhE3yTs030FN8D3qK70GH5q65rbgZ92NZSii%2FrVDDN6uU8M0qFdxWqM03lKox7YergPXJkycSk8lkYnQcjHbDZDJ1PHnyhNMPmMdqdDqdXK%2FXQ0VFBVRUVIBerzfrdDpO3%2F%2BM1YSHh8tlMhlERUUx2g1zeHg4J7sZixEIBBKxWGxiILREIgF3d3cQi8UdAoGAk%2BfpmV9ECCG031eoP%2BIvgiP%2BItjvK8jGf3YNgdD6K6vc4PIqN6jPEfO9n8E%2B6NemFzpsSVjvBAnrnWAqYa%2Bi4TNvlg7%2BKoQurdX7rD0JPmtPgldpLT5fQyD0Wv2%2B9zbDvvc2g2FSOe5nKITWF7p7QKG7B%2BS7SnA%2FQyG0HsWVAIorATStEPczGEKnOOjnL3eEecscYW6KA%2B5n0ERK5foo33iI8o2HSKkc9zMYQsfG64Omz4Og6fMgICZ%2BzPvhMoCmIbTerEgFsyIVepRp2Rj8DIHQejidC3B6JcCpDL73M9gH%2Fdr%2Br7K21D7IgNoHGbCPzFLR8Hkc3%2BGzBUL36rObnkJ201PIvt6Lz9cQCH1L%2F1PxHfip%2BA480jThfoZCaH2LgoAWBQE3lKox74fLgLWrq0ve09MDrJi7uro4%2F4B5LEer1erLy8uhvLwctFot5%2B9%2FxnLCwsL0EREREBERAWFhYZztZqxGIBDIxWIxuLm5gZubG4jFYrNQKOTseeLERWTwcbLZLRUYd0sFBvzn1tA5luZs82mGs%2FHTDGfcz0Af9EsIoXF%2FFL%2F8h7jVb1yeVvDGHkQ5n8chy9JB3qk3Bo9HwV4bT02N0bPoAL5%2BhplNIUU22yaWGbdNLMX9DDPpzmKbFa4S4wpXCe5nuJHl26BopRFFK3E%2Fw0z8ojds5i51MM5d4oD7GWbCvWfYRPjMNEb4zMT9DDPSiDgbv%2BhZRr%2BoWc%2BkH64D6A5imU2nYpmxU7HMgIHP0Dw9nmoDJ9OMcDIN9zPQB%2F0SQRDjtFvy%2F3DgTublT25n7qGdz%2BNYSwf%2FjfcA%2BsoTm%2BxrJmP2NRO%2BfobJd5rrNg80N4wPNDdwP8PkioKwaSTUxkZC%2FUz64Tpg7erq0ptMJjCZTNDd3f1cPGAeyykqKrIpLS01lpaWPhf3P2M5U6ZMsQkNDTWGhoZyupuxHKFQqHdxcQEXFxcQCAScPk%2BcKAwhhLZ5jbff5jX%2BFfzn1vBzYInQfv8SIe5nKIS2QQi9MnHu753FIf%2F%2BOqIWDtpg%2BDxw3BW77N0Vu%2FD1M8KsDVbarw1W4n5GmFSR2D5VJMb9jDQRK%2BxRxArczwgz68M37Gd9%2BAbuZ4QJ9Y6zD%2FWKw%2F2MMN6hU%2B29Q6c%2Bk364DqAJgkA%2FKpfb%2F6hc%2FgoGPsOn92iqfc%2BxNNzPUAhtQxDEKzvP5Div35P3Or1w0AbD50EQ%2BtJj%2B%2BxLj%2FH1M0K%2BLrpi%2F3XRFdzPCLmoVNlfVKpewQB66HR0dNh0dnYaOzs7n5sHzGM9hYWF9oWFhc%2FF%2Fc9Yz%2BTJk%2B0nT57M6W7GchwdHW2cnJyMTk5OnD9PnLmI8OD5FyH0b2jY%2FCKd39K%2FYfiMBw8ePHjw4LFqAI2D8y9C6N%2FQsPlFOr%2Blf8PwGQfHGhREzwFgffz4sf3jx4%2BfmwfMODhcPk8ODg72Dg4OnD9PGEDjed4hNAOi2XkBw2c8ePDgwYMHDwbQODjDQmgGRLPzAobPODj8BdA4ODg4ow7mMYDGY0UgGkNnPHjw4MGDBw8G0Dg4%2FzyIxtAZBwcDaBwcHJxnB6BxcHBwcHBwcHBwcHBwcHBwcHBwcHBwMIDGwcHBwcHBwcHBwcHBwcHBwcHBwcHhXP5vAGP66OJSj6ehAAAAAElFTkSuQmCC%29%3B%0Abackground%2Dsize%3A%20720px%2046px%3B%0A%7D%0A%2Eawesome%2Dmarker%2Dshadow%20%7B%0Abackground%2Dimage%3A%20url%28data%3Aimage%2Fpng%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAAEYAAAAgCAYAAACvgw7DAAAFhElEQVR42tWZ%2F0ubVxSHZZQxpJQRwoqEUkJQQhlBCcEiQRGJiKFEQqQ4lKFYLA5FsSjKioqipRutbLJ2f627g%2BdyDmfvqfetzlLh%2BaFpcr88%2Bdxzb%2B7bdwt%2F33wG974g%2Frhu%2Bpdzwt86fJdA%2F82w7Un%2F18m6kRBXgD%2B5%2B4YHDt%2FfEtImfRppVlJ%2BMY4QEWEmbyZZUBQVP2TwMJGBDMx7aFP6K4gwJBlBecVYISIDCSJAJm0mUIJH8NhQdqjkh8%2FSNv2VRB6SjCAtJ2dKMGuFIEIEMHGZ2CAMQdXwxPDjNdQ%2B%2Bf%2B0Q9tD9F1RkgYYLwlCDmIg19IhJQiRVJToFAlMViYxHBiBOjQyGP0ETzMw76Ed%2BqC%2FYSVrSAkqiRySo1IjAnwkKSKlQKMIQQYS4sQZ%2FBg0A%2BMwYZg0TKViPjeh%2BmjS72iUhKCqyCE5pCZdDEmxUmjwURQSZSCiqSbXCkwHZmAW2g7PEmkbZml%2Fmj6nlKgm42rE9DDushHzQGpNohjefB8pD2NK6GSEjscZ1AyD7QTmAt1AD%2BYVz%2FMjn6e9LswB0pCEICVnhFQPIabEfAoiJj0xkhaWj5LSoNMW39ocA14I%2FBRYCvwMy58NbdDe4r9twwLCEIUcEoSYCbWkhqk1g0lLyTv92bTQUBkpdZWSDoNbZAKrgbXAy8B64JdE1jN4SVsvAquwokUhaJ70dNTyaiEmLqUaYiqUArZu0qLF%2BEdjOa%2FwwWKsK2r5tPiGFhjoGhPcCmwHdgKvEtlRbMNWYDOwQbtIEjlGDIlhKUmNqZOWKuOPW3bRSct1iUGMbM2PabxBp20GtMygt5jkfuAg8DpwaOF1y6%2BBA9iDXdpDEoKQQ79LLKv5mBZVX8ZZQiO66Nqt2jngISFNTJkoPqXjLoOKUvaY5HHgJHDmcAoncBw4UtIOkLtnxJAapEid6aqkTKliW2f5VOPysXUFjJQ0Mf1KTAXzTb6VeeK8wQQOmeibwNvA7xn8xv%2B95X3nyIqCDiU9iGFJUXPWkLKo6krbLJ2GpIQdiJoiy8dJyg3E1IjoDDvCCgPfZ3LnCHgf%2BMNwwevveE%2BUE1N0RGKilJ0MIUv021Vb86QIYefJJUSkXF1d4eS6rdoXM0uUV5nA6ygFCZeBDxpe%2B1MEkSBJzbESs6uWzwu%2BgEWzdFpIidtxzWzHck5h6fgpETHI8cWYGlOMW7VKzEKWGCb%2FV%2BBj4G%2F4wGtRzDsSc07SjjKSsqaEPFdCpkWIpMQc9UmJCLEXVVaGFXPP4G%2FXUnybjpg3TPhSS4GPKjHvVVJOY10hJduxyKpa0gt01Nlk3JxkbXEt%2Bj8OBREhpIgRORzw6LiqdqUexXeTb%2FqUFFzE1MAly4vaQkpYNrHAqh1nSS2Ztl0yJiFsvyYhbh0RHDH%2BUvJSw7cxqM4xc9SZdbUrnaniewEiRBJyoBKyniGk4y8ZOY%2BkLhn4z19%2BMYLcw8ghr0ZqppnEMpPbZUmcIOAMTA1hubDTILenziKT5nBmt92B9G1XhOQQk3iliRgGU%2BJbqzOBttqdNkUOp1451e5LUWXJSFHtaCHebxunqKZJ4d%2B3LEZ2JwZWYcCjLKlnTHCZFGwgIB7MYjFdUculJwczKaZquVT9c4gUVKeG9P3fYuS3VPaPyRrf7CQ7Ro%2F0yDWD%2BqHn7C5j5ug%2BaO9m7c2%2BFZLndv%2F2xPin4BLJqcZf2wiaMbdxs3KzJncjzlWjFFM5lJl0%2BA%2FI7lpMX%2BbdDHKIe1WlZ0zuddXVIjJMMsr21t6mI%2B8DsbsXQ2pEDqdhuf%2BtsHM8YfJgbujZZh0Z%2FW4xNX9fXoz%2F%2B8nKKdlnSYqKTYctplYIfC1i7KFPnhwwUXnMah%2BdioxCsgyEfD1iIPMxrVAQ0p8ZexLuWsw%2F8PFSG0HPbPgAAAAASUVORK5CYII%3D%29%3B%0Abackground%2Dsize%3A%2035px%2016px%3B%0A%7D%0A%7D%0A%2Eawesome%2Dmarker%20i%20%7B%0Acolor%3A%20%23333%3B%0Amargin%2Dtop%3A%2010px%3B%0Adisplay%3A%20inline%2Dblock%3B%0Afont%2Dsize%3A%2014px%3B%0A%7D%0A%2Eawesome%2Dmarker%20%2Eicon%2Dwhite%20%7B%0Acolor%3A%20%23fff%3B%0A%7D%0A%0A%2Eawesome%2Dmarker%2Dicon%2Dred%20%7B%0Abackground%2Dposition%3A%200%200%3B%0A%7D%0A%2Eawesome%2Dmarker%2Dicon%2Ddarkred%20%7B%0Abackground%2Dposition%3A%20%2D180px%200%3B%0A%7D%0A%2Eawesome%2Dmarker%2Dicon%2Dlightred%20%7B%0Abackground%2Dposition%3A%20%2D360px%200%3B%0A%7D%0A%2Eawesome%2Dmarker%2Dicon%2Dorange%20%7B%0Abackground%2Dposition%3A%20%2D36px%200%3B%0A%7D%0A%2Eawesome%2Dmarker%2Dicon%2Dbeige%20%7B%0Abackground%2Dposition%3A%20%2D396px%200%3B%0A%7D%0A%2Eawesome%2Dmarker%2Dicon%2Dgreen%20%7B%0Abackground%2Dposition%3A%20%2D72px%200%3B%0A%7D%0A%2Eawesome%2Dmarker%2Dicon%2Ddarkgreen%20%7B%0Abackground%2Dposition%3A%20%2D252px%200%3B%0A%7D%0A%2Eawesome%2Dmarker%2Dicon%2Dlightgreen%20%7B%0Abackground%2Dposition%3A%20%2D432px%200%3B%0A%7D%0A%2Eawesome%2Dmarker%2Dicon%2Dblue%20%7B%0Abackground%2Dposition%3A%20%2D108px%200%3B%0A%7D%0A%2Eawesome%2Dmarker%2Dicon%2Ddarkblue%20%7B%0Abackground%2Dposition%3A%20%2D216px%200%3B%0A%7D%0A%2Eawesome%2Dmarker%2Dicon%2Dlightblue%20%7B%0Abackground%2Dposition%3A%20%2D468px%200%3B%0A%7D%0A%2Eawesome%2Dmarker%2Dicon%2Dpurple%20%7B%0Abackground%2Dposition%3A%20%2D144px%200%3B%0A%7D%0A%2Eawesome%2Dmarker%2Dicon%2Ddarkpurple%20%7B%0Abackground%2Dposition%3A%20%2D288px%200%3B%0A%7D%0A%2Eawesome%2Dmarker%2Dicon%2Dpink%20%7B%0Abackground%2Dposition%3A%20%2D504px%200%3B%0A%7D%0A%2Eawesome%2Dmarker%2Dicon%2Dcadetblue%20%7B%0Abackground%2Dposition%3A%20%2D324px%200%3B%0A%7D%0A%2Eawesome%2Dmarker%2Dicon%2Dwhite%20%7B%0Abackground%2Dposition%3A%20%2D574px%200%3B%0A%7D%0A%2Eawesome%2Dmarker%2Dicon%2Dgray%20%7B%0Abackground%2Dposition%3A%20%2D648px%200%3B%0A%7D%0A%2Eawesome%2Dmarker%2Dicon%2Dlightgray%20%7B%0Abackground%2Dposition%3A%20%2D612px%200%3B%0A%7D%0A%2Eawesome%2Dmarker%2Dicon%2Dblack%20%7B%0Abackground%2Dposition%3A%20%2D682px%200%3B%0A%7D%0A" rel="stylesheet" />
<script src="data:application/x-javascript;base64,LyoKICBMZWFmbGV0LkF3ZXNvbWVNYXJrZXJzLCBhIHBsdWdpbiB0aGF0IGFkZHMgY29sb3JmdWwgaWNvbmljIG1hcmtlcnMgZm9yIExlYWZsZXQsIGJhc2VkIG9uIHRoZSBGb250IEF3ZXNvbWUgaWNvbnMKICAoYykgMjAxMi0yMDEzLCBMZW5uYXJkIFZvb2dkdAoKICBodHRwOi8vbGVhZmxldGpzLmNvbQogIGh0dHBzOi8vZ2l0aHViLmNvbS9sdm9vZ2R0CiovLypnbG9iYWwgTCovKGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7TC5Bd2Vzb21lTWFya2Vycz17fTtMLkF3ZXNvbWVNYXJrZXJzLnZlcnNpb249IjIuMC4xIjtMLkF3ZXNvbWVNYXJrZXJzLkljb249TC5JY29uLmV4dGVuZCh7b3B0aW9uczp7aWNvblNpemU6WzM1LDQ1XSxpY29uQW5jaG9yOlsxNyw0Ml0scG9wdXBBbmNob3I6WzEsLTMyXSxzaGFkb3dBbmNob3I6WzEwLDEyXSxzaGFkb3dTaXplOlszNiwxNl0sY2xhc3NOYW1lOiJhd2Vzb21lLW1hcmtlciIscHJlZml4OiJnbHlwaGljb24iLHNwaW5DbGFzczoiZmEtc3BpbiIsaWNvbjoiaG9tZSIsbWFya2VyQ29sb3I6ImJsdWUiLGljb25Db2xvcjoid2hpdGUifSxpbml0aWFsaXplOmZ1bmN0aW9uKGUpe2U9TC5VdGlsLnNldE9wdGlvbnModGhpcyxlKX0sY3JlYXRlSWNvbjpmdW5jdGlvbigpe3ZhciBlPXQuY3JlYXRlRWxlbWVudCgiZGl2Iiksbj10aGlzLm9wdGlvbnM7bi5pY29uJiYoZS5pbm5lckhUTUw9dGhpcy5fY3JlYXRlSW5uZXIoKSk7bi5iZ1BvcyYmKGUuc3R5bGUuYmFja2dyb3VuZFBvc2l0aW9uPS1uLmJnUG9zLngrInB4ICIrIC1uLmJnUG9zLnkrInB4Iik7dGhpcy5fc2V0SWNvblN0eWxlcyhlLCJpY29uLSIrbi5tYXJrZXJDb2xvcik7cmV0dXJuIGV9LF9jcmVhdGVJbm5lcjpmdW5jdGlvbigpe3ZhciBlLHQ9IiIsbj0iIixyPSIiLGk9dGhpcy5vcHRpb25zO2kuaWNvbi5zbGljZSgwLGkucHJlZml4Lmxlbmd0aCsxKT09PWkucHJlZml4KyItIj9lPWkuaWNvbjplPWkucHJlZml4KyItIitpLmljb247aS5zcGluJiZ0eXBlb2YgaS5zcGluQ2xhc3M9PSJzdHJpbmciJiYodD1pLnNwaW5DbGFzcyk7aS5pY29uQ29sb3ImJihpLmljb25Db2xvcj09PSJ3aGl0ZSJ8fGkuaWNvbkNvbG9yPT09ImJsYWNrIj9uPSJpY29uLSIraS5pY29uQ29sb3I6cj0ic3R5bGU9J2NvbG9yOiAiK2kuaWNvbkNvbG9yKyInICIpO3JldHVybiI8aSAiK3IrImNsYXNzPSciK2kucHJlZml4KyIgIitlKyIgIit0KyIgIituKyInPjwvaT4ifSxfc2V0SWNvblN0eWxlczpmdW5jdGlvbihlLHQpe3ZhciBuPXRoaXMub3B0aW9ucyxyPUwucG9pbnQoblt0PT09InNoYWRvdyI/InNoYWRvd1NpemUiOiJpY29uU2l6ZSJdKSxpO3Q9PT0ic2hhZG93Ij9pPUwucG9pbnQobi5zaGFkb3dBbmNob3J8fG4uaWNvbkFuY2hvcik6aT1MLnBvaW50KG4uaWNvbkFuY2hvcik7IWkmJnImJihpPXIuZGl2aWRlQnkoMiwhMCkpO2UuY2xhc3NOYW1lPSJhd2Vzb21lLW1hcmtlci0iK3QrIiAiK24uY2xhc3NOYW1lO2lmKGkpe2Uuc3R5bGUubWFyZ2luTGVmdD0taS54KyJweCI7ZS5zdHlsZS5tYXJnaW5Ub3A9LWkueSsicHgifWlmKHIpe2Uuc3R5bGUud2lkdGg9ci54KyJweCI7ZS5zdHlsZS5oZWlnaHQ9ci55KyJweCJ9fSxjcmVhdGVTaGFkb3c6ZnVuY3Rpb24oKXt2YXIgZT10LmNyZWF0ZUVsZW1lbnQoImRpdiIpO3RoaXMuX3NldEljb25TdHlsZXMoZSwic2hhZG93Iik7cmV0dXJuIGV9fSk7TC5Bd2Vzb21lTWFya2Vycy5pY29uPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcgTC5Bd2Vzb21lTWFya2Vycy5JY29uKGUpfX0pKHRoaXMsZG9jdW1lbnQpOwo="></script>
View raw

(Sorry about that, but we can’t show files that are this big right now.)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
You can’t perform that action at this time.