@next2d/core 2.13.0 → 2.13.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +11 -11
- package/src/renderer.worker.inline.js +1 -1
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@next2d/core",
|
|
3
|
-
"version": "2.13.
|
|
3
|
+
"version": "2.13.1",
|
|
4
4
|
"description": "Next2D Core Package",
|
|
5
5
|
"author": "Toshiyuki Ienaga<ienaga@next2d.app> (https://github.com/ienaga/)",
|
|
6
6
|
"license": "MIT",
|
|
@@ -24,15 +24,15 @@
|
|
|
24
24
|
"url": "git+https://github.com/Next2D/Player.git"
|
|
25
25
|
},
|
|
26
26
|
"dependencies": {
|
|
27
|
-
"@next2d/core": "2.13.
|
|
28
|
-
"@next2d/display": "2.13.
|
|
29
|
-
"@next2d/events": "2.13.
|
|
30
|
-
"@next2d/filters": "2.13.
|
|
31
|
-
"@next2d/geom": "2.13.
|
|
32
|
-
"@next2d/media": "2.13.
|
|
33
|
-
"@next2d/net": "2.13.
|
|
34
|
-
"@next2d/text": "2.13.
|
|
35
|
-
"@next2d/ui": "2.13.
|
|
36
|
-
"@next2d/render-queue": "2.13.
|
|
27
|
+
"@next2d/core": "2.13.1",
|
|
28
|
+
"@next2d/display": "2.13.1",
|
|
29
|
+
"@next2d/events": "2.13.1",
|
|
30
|
+
"@next2d/filters": "2.13.1",
|
|
31
|
+
"@next2d/geom": "2.13.1",
|
|
32
|
+
"@next2d/media": "2.13.1",
|
|
33
|
+
"@next2d/net": "2.13.1",
|
|
34
|
+
"@next2d/text": "2.13.1",
|
|
35
|
+
"@next2d/ui": "2.13.1",
|
|
36
|
+
"@next2d/render-queue": "2.13.1"
|
|
37
37
|
}
|
|
38
38
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export const workerInlineUrl = 'data:application/javascript;base64,dmFyIFJlbmRlcmVyV29ya2VyPWZ1bmN0aW9uKCl7InVzZSBzdHJpY3QiO2xldCBlPTIwNDg7bGV0IHQ9NDtsZXQgbjtsZXQgcjtjb25zdCBhPShlLHQsbixyPW51bGwpPT57Y29uc3QgYT0rZTtyZXR1cm4gaXNOYU4oYSkmJm51bGwhPT1yP3I6TWF0aC5taW4oTWF0aC5tYXgodCxpc05hTihhKT8wOmEpLG4pfSxzPVtdLG89KC4uLmUpPT57Y29uc3QgdD1zLnBvcCgpfHxbXTtyZXR1cm4gZS5sZW5ndGgmJnQucHVzaCguLi5lKSx0fSxpPShlPW51bGwpPT57ZSYmKGUubGVuZ3RoJiYoZS5sZW5ndGg9MCkscy5wdXNoKGUpKX0sYz1lPT4oZS0tLGV8PWU+PjEsZXw9ZT4+MixlfD1lPj40LGV8PWU+PjgsZXw9ZT4+MTYsKytlKSxsPVtdLHU9KGU9MCx0PTAsbj0wLHI9MCk9Pntjb25zdCBhPWwucG9wKCl8fG5ldyBGbG9hdDMyQXJyYXkoNCk7cmV0dXJuIGFbMF09ZSxhWzFdPXQsYVsyXT1uLGFbM109cixhfSxoPWU9PntsLnB1c2goZSl9LGI9W10sZD0oZT0wLHQ9MCxuPTAscj0wLGE9MCxzPTAsbz0wLGk9MCxjPTApPT57Y29uc3QgbD1iLnBvcCgpfHxuZXcgRmxvYXQzMkFycmF5KDkpO3JldHVybiBsWzBdPWUsbFsxXT10LGxbMl09bixsWzNdPXIsbFs0XT1hLGxbNV09cyxsWzZdPW8sbFs3XT1pLGxbOF09YyxsfSxmPVtdLG09KGU9MCx0PTAsbj0wLHI9MCxhPTAscz0wKT0+e2NvbnN0IG89Zi5wb3AoKXx8bmV3IEZsb2F0MzJBcnJheSg2KTtyZXR1cm4gb1swXT1lLG9bMV09dCxvWzJdPW4sb1szXT1yLG9bNF09YSxvWzVdPXMsb30sdj1lPT57Zi5wdXNoKGUpfSxfPWU9Pntjb25zdCB0PTEvKGVbMF0qZVs0XS1lWzNdKmVbMV0pLG49ZVszXSplWzddLWVbNF0qZVs2XSxyPWVbMV0qZVs2XS1lWzBdKmVbN107cmV0dXJuIGQoZVs0XSp0LDAtZVsxXSp0LDAsMC1lWzNdKnQsZVswXSp0LDAsbip0LHIqdCwxKX07bGV0IHA9MCxnPTA7Y29uc3QgeD0oKT0+cCxFPSgpPT5nO2xldCB5PTE7Y29uc3QgQT0oKT0+eSxUPW8oKSxSPW8oKSxNPShlPSExKT0+e2NvbnN0IHQ9ZT80OjEwO3JldHVybiBULmxlbmd0aDx0JiYoVC5sZW5ndGg9MCksVC5sZW5ndGgmJihSLnB1c2goVC5zbGljZSgwKSksVC5sZW5ndGg9MCksUn0sdz0oZSx0LG4pPT57VC5wdXNoKGUsdCxuKX0sRj0oZSx0KT0+e2NvbnN0IG49VC5sZW5ndGgscj0rVFtuLTNdLGE9K1Rbbi0yXTtyZXR1cm4gZT09PXImJnQ9PT1hfSwkPShlLHQpPT57VC5sZW5ndGg/RihlLHQpfHwoKChlPSExKT0+e2NvbnN0IHQ9ZT80OjEwO1QubGVuZ3RoPHR8fFIucHVzaChULnNsaWNlKDApKSxULmxlbmd0aD0wfSkoKSx3KGUsdCwhMSkpOncoZSx0LCExKX0sTz0oZSx0LG4scik9PntULmxlbmd0aHx8JCgwLDApLEYobixyKXx8KHcoZSx0LCEwKSx3KG4sciwhMSkpfSxTPW5ldyBGbG9hdDMyQXJyYXkoMzIpLGs9KGUsdCxuLHIsYSxzLG8saSxjLGwpPT57Y29uc3QgdT0uMTI1KihlKzMqKG4rYSkrbyksaD0uMTI1Kih0KzMqKHIrcykraSksYj0uMTI1KihvK2Etbi1lKSxkPS4xMjUqKGkrcy1yLXQpO1NbY109ZSxTW2MrMV09dCxTW2MrMl09LjUqKGUrbiksU1tjKzNdPS41Kih0K3IpLFNbYys0XT11LWIsU1tjKzVdPWgtZCxTW2MrNl09dSxTW2MrN109aCxTW2xdPXUsU1tsKzFdPWgsU1tsKzJdPXUrYixTW2wrM109aCtkLFNbbCs0XT0uNSooYStvKSxTW2wrNV09LjUqKHMraSksU1tsKzZdPW8sU1tsKzddPWl9LEM9KGUsdCxuLHIsYSxzLG8saSxjKT0+e2NvbnN0IGw9LjEyNSooZSszKihuK2EpK28pLHU9LjEyNSoodCszKihyK3MpK2kpO1NbY109LjI1KmUrLjc1Km4sU1tjKzFdPS4yNSp0Ky43NSpyLFNbYysyXT1sLFNbYyszXT11LFNbYys0XT0uNzUqYSsuMjUqbyxTW2MrNV09Ljc1KnMrLjI1KmksU1tjKzZdPW8sU1tjKzddPWl9LFA9KGUsdCxuLHIsYSxzKT0+e2lmKFQubGVuZ3RofHwkKDAsMCksRihhLHMpKXJldHVybjtjb25zdCBvPVQubGVuZ3RoLGk9KChlLHQsbixyLGEscyxvLGkpPT4oayhlLHQsbixyLGEscyxvLGksMCwxNiksayhTWzBdLFNbMV0sU1syXSxTWzNdLFNbNF0sU1s1XSxTWzZdLFNbN10sMCw4KSxrKFNbMTZdLFNbMTddLFNbMThdLFNbMTldLFNbMjBdLFNbMjFdLFNbMjJdLFNbMjNdLDE2LDI0KSxDKFNbMF0sU1sxXSxTWzJdLFNbM10sU1s0XSxTWzVdLFNbNl0sU1s3XSwwKSxDKFNbOF0sU1s5XSxTWzEwXSxTWzExXSxTWzEyXSxTWzEzXSxTWzE0XSxTWzE1XSw4KSxDKFNbMTZdLFNbMTddLFNbMThdLFNbMTldLFNbMjBdLFNbMjFdLFNbMjJdLFNbMjNdLDE2KSxDKFNbMjRdLFNbMjVdLFNbMjZdLFNbMjddLFNbMjhdLFNbMjldLFNbMzBdLFNbMzFdLDI0KSxTKSkoK1Rbby0zXSwrVFtvLTJdLGUsdCxuLHIsYSxzKTtmb3IobGV0IGU9MDszMj5lOylPKGlbZSsrXSxpW2UrK10saVtlKytdLGlbZSsrXSl9LEI9W10sST1lPT57bGV0IHQ9LTEsbj1CLmxlbmd0aDtmb3IoO01hdGguYWJzKG4tdCk+MTspe2NvbnN0IHI9TWF0aC5mbG9vcigobit0KS8yKTtlPD1CW3JdLmFyZWE/bj1yOnQ9cn1yZXR1cm4gbn0sTD1lPT57bi5kZWxldGVUZXh0dXJlKGUucmVzb3VyY2UpfSxVPVtdLE49W107bGV0IEQ7bGV0IGo9bnVsbDtsZXQgej1udWxsO2xldCBYPW51bGw7Y29uc3QgVz1lPT57WD1lfSxHPSgpPT5YO2xldCBWPSExO2NvbnN0IFk9ZT0+e1Y9ZX0scT0oKT0+VjtsZXQgSz1udWxsLEg9bnVsbCxaPW51bGwsUT1udWxsO2NvbnN0IEo9KCk9PkgsZWU9KGUsdD0hMCk9Pnt2YXIgcjtlLm1zYWE/KChlPT57aWYoQi5pbmRleE9mKGUpPi0xKXJldHVybjtjb25zdCB0PUkoZS5hcmVhKTtlLmRpcnR5PSEwLEIuc3BsaWNlKHQsMCxlKX0pKGUuY29sb3IpLGUuY29sb3I9bnVsbCxlLnN0ZW5jaWw9bnVsbCk6KHQmJkwoZS50ZXh0dXJlKSxlLnRleHR1cmU9bnVsbCxyPWUuc3RlbmNpbCxVLmluZGV4T2Yocik+LTF8fChVLmxlbmd0aD4xMD9uLmRlbGV0ZVJlbmRlcmJ1ZmZlcihyLnJlc291cmNlKTooci5kaXJ0eT0hMCxVLnB1c2gocikpKSxlLnN0ZW5jaWw9bnVsbCksTi5wdXNoKGUpfTtsZXQgdGU9MDtjb25zdCBuZT1lPT57aWYoIUIubGVuZ3RoKXJldHVybigoKT0+e2NvbnN0IGU9e2lkOjAscmVzb3VyY2U6bi5jcmVhdGVSZW5kZXJidWZmZXIoKSx3aWR0aDowLGhlaWdodDowLGFyZWE6MCxkaXJ0eTohMX07cmV0dXJue3Jlc291cmNlOm4uY3JlYXRlUmVuZGVyYnVmZmVyKCksc3RlbmNpbDplLHdpZHRoOjAsaGVpZ2h0OjAsYXJlYTowLGRpcnR5OiExfX0pKCk7Y29uc3QgdD1JKGUpO2lmKHQ8Qi5sZW5ndGgpe2NvbnN0IGU9Qlt0XTtyZXR1cm4gQi5zcGxpY2UodCwxKSxlfWNvbnN0IHI9Qi5zaGlmdCgpO2lmKCFyKXRocm93IG5ldyBFcnJvcigidGhlIGNvbG9yIGJ1ZmZlciBpcyB2b2lkLiIpO3JldHVybiByfTtsZXQgcmU9MDtjb25zdCBhZT0oZSx0KT0+e2lmKCFVLmxlbmd0aClyZXR1cm57aWQ6cmUrKyxyZXNvdXJjZTpuLmNyZWF0ZVJlbmRlcmJ1ZmZlcigpLHdpZHRoOjAsaGVpZ2h0OjAsYXJlYTowLGRpcnR5OiExfTtmb3IobGV0IG49MDtuPFUubGVuZ3RoOysrbil7Y29uc3Qgcj1VW25dO2lmKHIud2lkdGg9PT1lJiZyLmhlaWdodD09PXQpcmV0dXJuIFUuc3BsaWNlKG4sMSkscn1yZXR1cm4gVS5zaGlmdCgpfTtsZXQgc2U9MDtjb25zdCBvZT0oZSx0KT0+KHtpZDpzZSsrLHJlc291cmNlOm4uY3JlYXRlVGV4dHVyZSgpLHdpZHRoOmUsaGVpZ2h0OnQsYXJlYTplKnQsc21vb3RoOiExfSk7bGV0IGllPS0xO2NvbnN0IGNlPWU9PntpZT1lfSxsZT1bbnVsbCxudWxsLG51bGxdLHVlPShlLHQscj0hMSk9Pntjb25zdCBhPW9lKGUsdCk7cmV0dXJuKChlLHQ9ITEpPT57aWUhPT1uLlRFWFRVUkUwJiYoY2Uobi5URVhUVVJFMCksbi5hY3RpdmVUZXh0dXJlKG4uVEVYVFVSRTApKSxsZVswXT1lLG4uYmluZFRleHR1cmUobi5URVhUVVJFXzJELGUucmVzb3VyY2UpLG4udGV4UGFyYW1ldGVyaShuLlRFWFRVUkVfMkQsbi5URVhUVVJFX1dSQVBfUyxuLkNMQU1QX1RPX0VER0UpLG4udGV4UGFyYW1ldGVyaShuLlRFWFRVUkVfMkQsbi5URVhUVVJFX1dSQVBfVCxuLkNMQU1QX1RPX0VER0UpLG4udGV4UGFyYW1ldGVyaShuLlRFWFRVUkVfMkQsbi5URVhUVVJFX01JTl9GSUxURVIsdD9uLkxJTkVBUjpuLk5FQVJFU1QpLG4udGV4UGFyYW1ldGVyaShuLlRFWFRVUkVfMkQsbi5URVhUVVJFX01BR19GSUxURVIsdD9uLkxJTkVBUjpuLk5FQVJFU1QpLG4udGV4U3RvcmFnZTJEKG4uVEVYVFVSRV8yRCwxLG4uUkdCQTgsZS53aWR0aCxlLmhlaWdodCl9KShhLHIpLGF9LGhlPShlLHIsYT0hMSk9Pntjb25zdCBzPU4ubGVuZ3RoP04uc2hpZnQoKTp7aWQ6dGUrKyx3aWR0aDowLGhlaWdodDowLGNsaXBMZXZlbDowLG1zYWE6ITEsbWFzazohMSxjb2xvcjpudWxsLHRleHR1cmU6bnVsbCxzdGVuY2lsOm51bGx9O3JldHVybiBzLndpZHRoPWUscy5oZWlnaHQ9cixhPyhzLm1zYWE9ITAscy50ZXh0dXJlPW51bGwscy5jb2xvcj0oKGUscik9PntlPU1hdGgubWF4KDI1NixjKGUpKSxyPU1hdGgubWF4KDI1NixjKHIpKTtjb25zdCBhPW5lKGUqcik7cmV0dXJuKGEud2lkdGg8ZXx8YS5oZWlnaHQ8cikmJihlPU1hdGgubWF4KGUsYS53aWR0aCkscj1NYXRoLm1heChyLGEuaGVpZ2h0KSxhLndpZHRoPWUsYS5oZWlnaHQ9cixhLmFyZWE9ZSpyLG4uYmluZFJlbmRlcmJ1ZmZlcihuLlJFTkRFUkJVRkZFUixhLnJlc291cmNlKSxuLnJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZShuLlJFTkRFUkJVRkZFUix0LG4uUkdCQTgsZSxyKSxuLmJpbmRSZW5kZXJidWZmZXIobi5SRU5ERVJCVUZGRVIsYS5zdGVuY2lsLnJlc291cmNlKSxuLnJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZShuLlJFTkRFUkJVRkZFUix0LG4uU1RFTkNJTF9JTkRFWDgsZSxyKSksYS5kaXJ0eT0hMCxhfSkoZSxyKSxzLnN0ZW5jaWw9cy5jb2xvci5zdGVuY2lsKToocy5tc2FhPSExLHMudGV4dHVyZT11ZShlLHIpLHMuY29sb3I9bnVsbCxzLnN0ZW5jaWw9KChlLHQpPT57Y29uc3Qgcj1hZShlLHQpO3JldHVybiByLndpZHRoPT09ZSYmci5oZWlnaHQ9PT10fHwoci53aWR0aD1lLHIuaGVpZ2h0PXQsci5hcmVhPWUqdCxyLmRpcnR5PSExLG4uYmluZFJlbmRlcmJ1ZmZlcihuLlJFTkRFUkJVRkZFUixyLnJlc291cmNlKSxuLnJlbmRlcmJ1ZmZlclN0b3JhZ2Uobi5SRU5ERVJCVUZGRVIsbi5TVEVOQ0lMX0lOREVYOCxlLHQpKSxyfSkoZSxyKSkscy5tYXNrPSExLHMuY2xpcExldmVsPTAsc30sYmU9TnVtYmVyLk1BWF9WQUxVRSxkZT0tTnVtYmVyLk1BWF9WQUxVRTtsZXQgZmU9MDtjb25zdCBtZT1lPT57ZmU9ZX0sdmU9KCk9PmZlLF9lPVtdLHBlPSgpPT57dmFyIHQ7cmV0dXJuIGZlIGluIF9lfHwodD1oZShlLGUsITApLF9lW2ZlXT10KSxfZVtmZV19LGdlPVtdO2xldCB4ZT1udWxsO2NvbnN0IEVlPSgpPT4oeGV8fCh4ZT0oKCk9Pntjb25zdCB0PW9lKGUsZSk7cmV0dXJuIG4uYWN0aXZlVGV4dHVyZShuLlRFWFRVUkUzKSxuLmJpbmRUZXh0dXJlKG4uVEVYVFVSRV8yRCx0LnJlc291cmNlKSxuLnRleFBhcmFtZXRlcmkobi5URVhUVVJFXzJELG4uVEVYVFVSRV9XUkFQX1Msbi5DTEFNUF9UT19FREdFKSxuLnRleFBhcmFtZXRlcmkobi5URVhUVVJFXzJELG4uVEVYVFVSRV9XUkFQX1Qsbi5DTEFNUF9UT19FREdFKSxuLnRleFBhcmFtZXRlcmkobi5URVhUVVJFXzJELG4uVEVYVFVSRV9NSU5fRklMVEVSLG4uTElORUFSKSxuLnRleFBhcmFtZXRlcmkobi5URVhUVVJFXzJELG4uVEVYVFVSRV9NQUdfRklMVEVSLG4uTkVBUkVTVCksbi50ZXhTdG9yYWdlMkQobi5URVhUVVJFXzJELDEsbi5SR0JBOCx0LndpZHRoLHQuaGVpZ2h0KSxuLmFjdGl2ZVRleHR1cmUoLTEhPT1pZT9pZTpuLlRFWFRVUkUwKSx0fSkoKSkseGUpLHllPVtdLEFlPWU9PihlIGluIHllfHwoeWVbZV09bmV3IEZsb2F0MzJBcnJheShbYmUsYmUsZGUsZGVdKSkseWVbZV0pLFRlPVtdLFJlPWU9PihlIGluIFRlfHwoVGVbZV09bmV3IEZsb2F0MzJBcnJheShbYmUsYmUsZGUsZGVdKSksVGVbZV0pO2xldCBNZT0wO2NvbnN0IHdlPWU9PntNZT1lfSxGZT0oKT0+TWUsJGU9KCk9PntnZS5sZW5ndGg9MCxtZSgwKTtjb25zdCBlPV9lO2ZvcihsZXQgdD0wO3Q8ZS5sZW5ndGg7dCsrKWVlKGVbdF0pO2UubGVuZ3RoPTB9LE9lPShlLHQscixhPSEwKT0+e2lmKGUuY2xlYXJBcnJheXNJbnN0YW5jZWQoKSxlLiRzdGFja0F0dGFjaG1lbnRPYmplY3QubGVuZ3RoKWZvcihsZXQgdD0wO3Q8ZS4kc3RhY2tBdHRhY2htZW50T2JqZWN0Lmxlbmd0aDsrK3Qpe2NvbnN0IG49ZS4kc3RhY2tBdHRhY2htZW50T2JqZWN0W3RdO24mJmVlKG4pfWVsc2UgZS4kbWFpbkF0dGFjaG1lbnRPYmplY3QmJmVlKGUuJG1haW5BdHRhY2htZW50T2JqZWN0KTthJiYkZSgpLFcobnVsbCkscSgpJiYoWSghMSksbi5iaW5kRnJhbWVidWZmZXIobi5GUkFNRUJVRkZFUixudWxsKSksZS4kbWFpbkF0dGFjaG1lbnRPYmplY3Q9aGUodCxyLCEwKSxlLmJpbmQoZS4kbWFpbkF0dGFjaG1lbnRPYmplY3QpfSxTZT0oZSx0LHI9bnVsbCxhPSExKT0+ey0xIT09aWUmJnQ9PT1pZXx8KGNlKHQpLG4uYWN0aXZlVGV4dHVyZSh0KSk7Y29uc3Qgcz1sZVtlXTtudWxsIT09cyYmbnVsbCE9PXImJnMuaWQ9PT1yLmlkfHxyPT09c3x8KGxlW2VdPXIsbi5iaW5kVGV4dHVyZShuLlRFWFRVUkVfMkQscj9yLnJlc291cmNlOm51bGwpLHImJnIuc21vb3RoIT09YSYmKHIuc21vb3RoPWEsbi50ZXhQYXJhbWV0ZXJpKG4uVEVYVFVSRV8yRCxuLlRFWFRVUkVfTUlOX0ZJTFRFUixhP24uTElORUFSOm4uTkVBUkVTVCksbi50ZXhQYXJhbWV0ZXJpKG4uVEVYVFVSRV8yRCxuLlRFWFRVUkVfTUFHX0ZJTFRFUixhP24uTElORUFSOm4uTkVBUkVTVCkpKX0sa2U9KGUsdD0hMSk9PntTZSgyLG4uVEVYVFVSRTIsbnVsbCksU2UoMSxuLlRFWFRVUkUxLG51bGwpLFNlKDAsbi5URVhUVVJFMCxlLHQpfSxDZT0oKT0+e2NvbnN0IGU9ci5jdXJyZW50QXR0YWNobWVudE9iamVjdDtpZighZSlyZXR1cm47Y29uc3QgdD1lLmNsaXBMZXZlbDtsZXQgYT0wO2ZvcihsZXQgZT0wO2U8dDsrK2UpYXw9KDE8PHQtZSktMTtuLnN0ZW5jaWxNYXNrKDI1NSksbi5zdGVuY2lsRnVuYyhuLkVRVUFMLDI1NSZhLGEpLG4uc3RlbmNpbE9wKG4uS0VFUCxuLktFRVAsbi5LRUVQKSxuLmNvbG9yTWFzayghMCwhMCwhMCwhMCksbi5kaXNhYmxlKG4uU0FNUExFX0FMUEhBX1RPX0NPVkVSQUdFKSxuLmRpc2FibGUobi5TQ0lTU09SX1RFU1QpfTtsZXQgUGU9ITE7Y29uc3QgQmU9ZT0+e1BlPWV9LEllPSgpPT5QZSxMZT1uZXcgTWFwLFVlPW5ldyBNYXAsTmU9KGUsdCk9Pntjb25zdCByPUcoKTtpZihyJiZ0LmlkPT09ci5pZClyZXR1cm47dmFyIGEsczsoZT0+e1coZSkscSgpfHwoWSghMCksbi5iaW5kRnJhbWVidWZmZXIobi5GUkFNRUJVRkZFUixEKSksZS5tc2FhPyhuLmJpbmRSZW5kZXJidWZmZXIobi5SRU5ERVJCVUZGRVIsZS5jb2xvci5yZXNvdXJjZSksbi5mcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcihuLkZSQU1FQlVGRkVSLG4uQ09MT1JfQVRUQUNITUVOVDAsbi5SRU5ERVJCVUZGRVIsZS5jb2xvci5yZXNvdXJjZSkpOihrZShlLnRleHR1cmUpLG4uZnJhbWVidWZmZXJUZXh0dXJlMkQobi5GUkFNRUJVRkZFUixuLkNPTE9SX0FUVEFDSE1FTlQwLG4uVEVYVFVSRV8yRCxlLnRleHR1cmUucmVzb3VyY2UsMCkpLG4uYmluZFJlbmRlcmJ1ZmZlcihuLlJFTkRFUkJVRkZFUixlLnN0ZW5jaWwucmVzb3VyY2UpLG4uZnJhbWVidWZmZXJSZW5kZXJidWZmZXIobi5GUkFNRUJVRkZFUixuLlNURU5DSUxfQVRUQUNITUVOVCxuLlJFTkRFUkJVRkZFUixlLnN0ZW5jaWwucmVzb3VyY2UpfSkodCksciYmci53aWR0aD09PXQud2lkdGgmJnIuaGVpZ2h0PT09dC5oZWlnaHR8fChhPXQud2lkdGgscz10LmhlaWdodCxwPWEsZz1zLG4udmlld3BvcnQoMCwwLHQud2lkdGgsdC5oZWlnaHQpKTtjb25zdCBvPXQubXNhYT90LmNvbG9yOnQuc3RlbmNpbDt2YXIgaTtvLmRpcnR5JiYoby5kaXJ0eT0hMSxlLmNsZWFyUmVjdCgwLDAsdC53aWR0aCx0LmhlaWdodCkpLCEoaT10Lm1hc2spJiZJZSgpPyhCZSghMSksbi5kaXNhYmxlKG4uU1RFTkNJTF9URVNUKSxuLmRpc2FibGUobi5TQ0lTU09SX1RFU1QpKTppJiYhSWUoKSYmKEJlKCEwKSxuLmVuYWJsZShuLlNURU5DSUxfVEVTVCksQ2UoKSl9LERlPWU9PntpZighZS4kc3RhY2subGVuZ3RoKXJldHVybjtjb25zdCB0PWUuJHN0YWNrLnBvcCgpO3ZhciBuO2UuJG1hdHJpeFswXT10WzBdLGUuJG1hdHJpeFsxXT10WzFdLGUuJG1hdHJpeFszXT10WzNdLGUuJG1hdHJpeFs0XT10WzRdLGUuJG1hdHJpeFs2XT10WzZdLGUuJG1hdHJpeFs3XT10WzddLG49dCxiLnB1c2gobil9LGplPShlLHQsbixyLGEscyxvLGksYyxsLHUsaCxiKT0+e2NvbnN0IGQ9ZS5sZW5ndGgtNTtmb3IobGV0IGY9MztmPGQ7Zis9Myl7bGV0IGQ9MTcqbjtlW2YrMl0/KHRbZCsrXT1lW2YtM10sdFtkKytdPWVbZi0yXSx0W2QrK109MCx0W2QrK109MCx0W2QrK109bCx0W2QrK109dSx0W2QrK109aCx0W2QrK109Yix0W2QrK109cix0W2QrK109YSx0W2QrK109MCx0W2QrK109cyx0W2QrK109byx0W2QrK109MCx0W2QrK109aSx0W2QrK109Yyx0W2QrK109MCx0W2QrK109ZVtmXSx0W2QrK109ZVtmKzFdLHRbZCsrXT0uNSx0W2QrK109MCx0W2QrK109bCx0W2QrK109dSx0W2QrK109aCx0W2QrK109Yix0W2QrK109cix0W2QrK109YSx0W2QrK109MCx0W2QrK109cyx0W2QrK109byx0W2QrK109MCx0W2QrK109aSx0W2QrK109Yyx0W2QrK109MCx0W2QrK109ZVtmKzNdLHRbZCsrXT1lW2YrNF0sdFtkKytdPTEsdFtkKytdPTEsdFtkKytdPWwsdFtkKytdPXUsdFtkKytdPWgsdFtkKytdPWIsdFtkKytdPXIsdFtkKytdPWEsdFtkKytdPTAsdFtkKytdPXMsdFtkKytdPW8sdFtkKytdPTAsdFtkKytdPWksdFtkKytdPWMsdFtkKytdPTApOmVbZis1XT8odFtkKytdPWVbMF0sdFtkKytdPWVbMV0sdFtkKytdPS41LHRbZCsrXT0uNSx0W2QrK109bCx0W2QrK109dSx0W2QrK109aCx0W2QrK109Yix0W2QrK109cix0W2QrK109YSx0W2QrK109MCx0W2QrK109cyx0W2QrK109byx0W2QrK109MCx0W2QrK109aSx0W2QrK109Yyx0W2QrK109MCx0W2QrK109ZVtmXSx0W2QrK109ZVtmKzFdLHRbZCsrXT0uNSx0W2QrK109LjUsdFtkKytdPWwsdFtkKytdPXUsdFtkKytdPWgsdFtkKytdPWIsdFtkKytdPXIsdFtkKytdPWEsdFtkKytdPTAsdFtkKytdPXMsdFtkKytdPW8sdFtkKytdPTAsdFtkKytdPWksdFtkKytdPWMsdFtkKytdPTAsdFtkKytdPWVbZis2XSx0W2QrK109ZVtmKzddLHRbZCsrXT0uNSx0W2QrK109LjUsdFtkKytdPWwsdFtkKytdPXUsdFtkKytdPWgsdFtkKytdPWIsdFtkKytdPXIsdFtkKytdPWEsdFtkKytdPTAsdFtkKytdPXMsdFtkKytdPW8sdFtkKytdPTAsdFtkKytdPWksdFtkKytdPWMsdFtkKytdPTApOih0W2QrK109ZVswXSx0W2QrK109ZVsxXSx0W2QrK109LjUsdFtkKytdPS41LHRbZCsrXT1sLHRbZCsrXT11LHRbZCsrXT1oLHRbZCsrXT1iLHRbZCsrXT1yLHRbZCsrXT1hLHRbZCsrXT0wLHRbZCsrXT1zLHRbZCsrXT1vLHRbZCsrXT0wLHRbZCsrXT1pLHRbZCsrXT1jLHRbZCsrXT0wLHRbZCsrXT1lW2ZdLHRbZCsrXT1lW2YrMV0sdFtkKytdPS41LHRbZCsrXT0uNSx0W2QrK109bCx0W2QrK109dSx0W2QrK109aCx0W2QrK109Yix0W2QrK109cix0W2QrK109YSx0W2QrK109MCx0W2QrK109cyx0W2QrK109byx0W2QrK109MCx0W2QrK109aSx0W2QrK109Yyx0W2QrK109MCx0W2QrK109ZVtmKzNdLHRbZCsrXT1lW2YrNF0sdFtkKytdPS41LHRbZCsrXT0uNSx0W2QrK109bCx0W2QrK109dSx0W2QrK109aCx0W2QrK109Yix0W2QrK109cix0W2QrK109YSx0W2QrK109MCx0W2QrK109cyx0W2QrK109byx0W2QrK109MCx0W2QrK109aSx0W2QrK109Yyx0W2QrK109MCksbis9M31yZXR1cm4gbn0semU9KGUsdD0iZmlsbCIpPT57Y29uc3Qgbj0iZmlsbCI9PT10P3IuJGZpbGxTdHlsZTpyLiRzdHJva2VTdHlsZSxhPW5bMF0scz1uWzFdLG89blsyXSxpPW5bM10sYz1yLiRtYXRyaXgsbD14KCksdT1FKCksaD1jWzBdL2wsYj1jWzNdL2wsZD1jWzZdL2wsZj1jWzFdL3UsbT1jWzRdL3Usdj1jWzddL3U7bGV0IF89MDtmb3IobGV0IHQ9MDt0PGUubGVuZ3RoOysrdClfKz01MSooZVt0XS5sZW5ndGgvMy0yKTtjb25zdCBwPW5ldyBGbG9hdDMyQXJyYXkoXyk7bGV0IGc9MDtmb3IobGV0IHQ9MDt0PGUubGVuZ3RoOysrdClnPWplKGVbdF0scCxnLGgsZixiLG0sZCx2LGEscyxvLGkpO3JldHVybntidWZmZXI6cCxpbmRleENvdW50Omd9fTtsZXQgWGU9bmV3IEZsb2F0MzJBcnJheSgxMjgpLFdlPTA7Y29uc3QgR2U9ZT0+e2NvbnN0IHQ9ZS5sZW5ndGgrV2U7aWYodD5YZS5sZW5ndGgpe2NvbnN0IHI9bmV3IEZsb2F0MzJBcnJheSgobj10LG4tLSxufD1uPj4xLG58PW4+PjIsbnw9bj4+NCxufD1uPj44LG58PW4+PjE2LCsrbikpO3Iuc2V0KFhlKSxyLnNldChlLFdlKSxYZT1yfWVsc2UgWGUuc2V0KGUsV2UpO3ZhciBuO1dlKz1lLmxlbmd0aH0sVmU9W10sWWU9W10scWU9KCk9PntZZS5sZW5ndGg9MCxXZT0wLFZlLmxlbmd0aD0wfSxLZT1bXSxIZT0oZSx0LG4pPT57Y29uc3Qgcj17eDp0LngtZS54LHk6dC55LWUueX0sYT0oKGUsdCxuKT0+e2NvbnN0IHI9TWF0aC5zcXJ0KGUqZSt0KnQpO3JldHVybnt4Oi10L3Iqbix5OmUvcipufX0pKHIueCxyLnksbikscz17eDplLngrYS54LHk6ZS55K2EueX0sbz17eDp0LngrYS54LHk6dC55K2EueX0saT17eDplLngtYS54LHk6ZS55LWEueX0sYz17eDp0LngtYS54LHk6dC55LWEueX07cmV0dXJuW3MueCxzLnksITEsby54LG8ueSwhMSxjLngsYy55LCExLGkueCxpLnksITEscy54LHMueSwhMV19LFplPShlLHQsbik9Pih7eDplLngrKHQueC1lLngpKm4seTplLnkrKHQueS1lLnkpKm59KSxRZT0oZSx0LG4scj0uNSk9Pntjb25zdCBhPVplKGUsdCxyKSxzPVplKHQsbixyKSxvPVplKGEscyxyKTtyZXR1cm5bW2UsYSxvXSxbbyxzLG5dXX0sSmU9KGUsdCxuLHIpPT4oe3g6KDEtZSkqKjIqdC54KzIqKDEtZSkqZSpuLngrZSoqMipyLngseTooMS1lKSoqMip0LnkrMiooMS1lKSplKm4ueStlKioyKnIueX0pLGV0PShlLHQsbixyKT0+KHt4OjIqKDEtZSkqKG4ueC10LngpKzIqZSooci54LW4ueCkseToyKigxLWUpKihuLnktdC55KSsyKmUqKHIueS1uLnkpfSksdHQ9ZT0+e2NvbnN0IHQ9TWF0aC5zcXJ0KGUueCplLngrZS55KmUueSk7cmV0dXJuIDA9PT10P3t4OjAseTowfTp7eDplLngvdCx5OmUueS90fX0sbnQ9KGUsdCxuLHIpPT57Y29uc3QgYT1bMCwuNSwxXSxzPVtdO2ZvcihsZXQgbz0wO288YS5sZW5ndGg7KytvKXtjb25zdCBpPWFbb10sYz1KZShpLGUsdCxuKSxsPWV0KGksZSx0LG4pLHU9dHQoe3g6LWwueSx5OmwueH0pO3MucHVzaCh7eDpjLngrdS54KnIseTpjLnkrdS55KnJ9KX1yZXR1cm4gc30scnQ9KGUsdCxuLHIpPT57Y29uc3QgYT0oKGUsdCxuLHI9NCk9PntsZXQgYT1bW2UsdCxuXV07Zm9yKGxldCBlPTA7ZTxyOysrZSl7Y29uc3QgZT1bXTtmb3IobGV0IHQ9MDt0PGEubGVuZ3RoOysrdCl7Y29uc3Qgbj1hW3RdO2lmKCFuKWNvbnRpbnVlO2NvbnN0IHI9UWUoblswXSxuWzFdLG5bMl0sLjUpO2UucHVzaChyWzBdLHJbMV0pfWE9ZX1yZXR1cm4gYX0pKGUsdCxuLDUpLHM9W10sbz1bXTtmb3IobGV0IGU9MDtlPGEubGVuZ3RoOysrZSl7Y29uc3RbdCxuLGldPWFbZV07cy5wdXNoKG50KHQsbixpLCtyKSksby5wdXNoKG50KHQsbixpLC1yKSl9Y29uc3QgaT1zWzBdWzBdLGM9W2kueCxpLnksITFdO2ZvcihsZXQgZT0wO2U8cy5sZW5ndGg7KytlKXtjb25zdCB0PXNbZV07Yy5wdXNoKHRbMV0ueCx0WzFdLnksITAsdFsyXS54LHRbMl0ueSwhMSl9Y29uc3QgbD1bLi4ub10ucmV2ZXJzZSgpO2ZvcihsZXQgZT0wO2U8bC5sZW5ndGg7KytlKXtjb25zdFt0LG4scl09bFtlXTtsW2VdPVtyLG4sdF19Y29uc3QgdT1sWzBdWzBdO2MucHVzaCh1LngsdS55LCExKTtmb3IobGV0IGU9MDtlPGwubGVuZ3RoOysrZSl7Y29uc3QgdD1sW2VdO2MucHVzaCh0WzFdLngsdFsxXS55LCEwLHRbMl0ueCx0WzJdLnksITEpfXJldHVybiBjfSxhdD0oZSx0LG4scik9Pntjb25zdCBhPVtdO2ZvcihsZXQgcz0wO3M8ci5sZW5ndGg7cys9Myl7aWYocltzKzJdKWNvbnRpbnVlO2NvbnN0IG89cltzXSxpPXJbcysxXTtNYXRoLnNxcnQoTWF0aC5wb3coby1lLDIpK01hdGgucG93KGktdCwyKSk9PT1uJiZhLnB1c2gobyxpKX1yZXR1cm4gYX0sc3Q9bmV3IE9mZnNjcmVlbkNhbnZhcygxLDEpLmdldENvbnRleHQoIjJkIiksb3Q9KGUsdCk9PntzdC5iZWdpblBhdGgoKSxzdC5tb3ZlVG8odFswXSx0WzFdKTtmb3IobGV0IGU9MztlPHQubGVuZ3RoO2UrPTMpdFtlKzJdPyhzdC5xdWFkcmF0aWNDdXJ2ZVRvKHRbZV0sdFtlKzFdLHRbZSszXSx0W2UrNF0pLGUrPTMpOnN0LmxpbmVUbyh0W2VdLHRbZSsxXSk7c3QuY2xvc2VQYXRoKCk7Zm9yKGxldCB0PTA7dDxlLmxlbmd0aDt0Kz0yKXtjb25zdCBuPWVbdF0scj1lW3QrMV07aWYoIXN0LmlzUG9pbnRJblBhdGgobixyKSlyZXR1cm5bbixyXX1yZXR1cm4gbnVsbH0saXQ9KGUsdCxuLHIsYT0hMSk9Pntjb25zdCBzPWE/MDpyLmxlbmd0aC0xLG89YT9yLmxlbmd0aC0xOnIubGVuZ3RoLTIsaT1hdChlLHQsbixyW3NdKSxjPWF0KGUsdCxuLHJbb10pLGw9b3QoaSxyW29dKTtpZighbClyZXR1cm47Y29uc3QgdT1vdChjLHJbc10pO2lmKCF1KXJldHVybjtjb25zdCBoPU1hdGguYXRhbjIobFsxXS10LGxbMF0tZSk7bGV0IGI9TWF0aC5hdGFuMih1WzFdLXQsdVswXS1lKS1oO2I+TWF0aC5QST9iLT0yKk1hdGguUEk6YjwtTWF0aC5QSSYmKGIrPTIqTWF0aC5QSSk7Y29uc3QgZD1iLzgsZj1bZSx0LCExXTtmb3IobGV0IHI9MDtyPD04O3IrKyl7Y29uc3QgYT1oK3IqZCxzPWUrbipNYXRoLmNvcyhhKSxvPXQrbipNYXRoLnNpbihhKTtmLnB1c2gocyxvLCExKX1yLnNwbGljZSgtMSwwLGYpfSxjdD0oZSx0LG4scixhPSExKT0+e2NvbnN0IHM9YT8wOnIubGVuZ3RoLTEsbz1hP3IubGVuZ3RoLTE6ci5sZW5ndGgtMixpPWF0KGUsdCxuLHJbc10pLGM9YXQoZSx0LG4scltvXSk7aWYoaVswXT09PWNbMF0mJmlbMV09PT1jWzFdfHxpWzBdPT09Y1syXSYmaVsxXT09PWNbM10pcmV0dXJuO2NvbnN0IGw9b3QoaSxyW29dKTtpZighbClyZXR1cm47Y29uc3QgdT1vdChjLHJbc10pO3UmJnIuc3BsaWNlKC0xLDAsW2UsdCwhMSxsWzBdLGxbMV0sITEsdVswXSx1WzFdLCExLGUsdCwhMV0pfSxsdD0oZSx0LG4scixhLHM9ITEpPT57Y29uc3Qgbz1zPzA6YS5sZW5ndGgtMSxpPXM/YS5sZW5ndGgtMTphLmxlbmd0aC0yLGM9YXQoZS54LGUueSxyLGFbb10pLGw9YXQoZS54LGUueSxyLGFbaV0pO2lmKGNbMF09PT1sWzBdJiZjWzFdPT09bFsxXXx8Y1swXT09PWxbMl0mJmNbMV09PT1sWzNdKXJldHVybjtjb25zdCB1PW90KGMsYVtpXSk7aWYoIXUpcmV0dXJuO2NvbnN0IGg9b3QobCxhW29dKTtpZighaClyZXR1cm47Y29uc3QgYj10LngtZS54LGQ9dC55LWUueSxmPU1hdGguaHlwb3QoYixkKSxtPXt4OmIvZix5OmQvZn0sdj1uLngtZS54LF89bi55LWUueSxwPU1hdGguaHlwb3QodixfKSxnPXt4OnYvcCx5Ol8vcH0seD1tLngsRT1tLnkseT1nLngsQT1nLnksVD14KkEtRSp5OzA9PT1UJiZhLnNwbGljZSgtMSwwLFtlLngsZS55LCExLHVbMF0sdVsxXSwhMSxoWzBdLGhbMV0sITFdKTtjb25zdCBSPSgoaFswXS11WzBdKSpBLShoWzFdLXVbMV0pKnkpL1QsTT11WzBdK1IqeCx3PXVbMV0rUipFO2Euc3BsaWNlKC0xLDAsW2UueCxlLnksITEsdVswXSx1WzFdLCExLE0sdywhMSxlLngsZS55LCExLGhbMF0saFsxXSwhMSxNLHcsITFdKX0sdXQ9KGUsdCk9Pntjb25zdCBuPXt4OmVbMF0seTplWzFdfSxhPXt4OjAseTowfSxzPXt4OjAseTowfSxvPXt4OjAseTowfSxpPVtdO2ZvcihsZXQgYz0zO2M8ZS5sZW5ndGg7Yys9Myl7Y29uc3QgbD1lW2NdLHU9ZVtjKzFdO2lmKGVbYysyXSlhLng9bCxhLnk9dTtlbHNle2lmKHMueD1sLHMueT11LGVbYy0xXT9pLnB1c2gocnQobixhLHMsdCkpOmkucHVzaChIZShuLHMsdCkpLGkubGVuZ3RoPjEpc3dpdGNoKHIuam9pbnRzKXtjYXNlIDA6Y3Qobi54LG4ueSx0LGkpO2JyZWFrO2Nhc2UgMTpvLng9ZVtjLTZdLG8ueT1lW2MtNV0sbHQobixzLG8sdCxpKTticmVhaztjYXNlIDI6aXQobi54LG4ueSx0LGkpfW4ueD1zLngsbi55PXMueX19aWYoZVswXT09PWVbZS5sZW5ndGgtM10mJmVbMV09PT1lW2UubGVuZ3RoLTJdKXN3aXRjaChyLmpvaW50cyl7Y2FzZSAwOmN0KG4ueCxuLnksdCxpLCEwKTticmVhaztjYXNlIDE6bi54PWVbMF0sbi55PWVbMV0scy54PWVbM10scy55PWVbNF0sby54PWVbZS5sZW5ndGgtNl0sby55PWVbZS5sZW5ndGgtNV0sbHQobixzLG8sdCxpLCEwKTticmVhaztjYXNlIDI6aXQobi54LG4ueSx0LGksITApfWVsc2Ugc3dpdGNoKHIuY2Fwcyl7Y2FzZSAxOigoZSx0LG4pPT57Zm9yKGxldCByPTA7cjwyOysrcil7bGV0IGE9MCxzPTAsbz0wLGk9MDswPT09cj8oYT1lWzBdLHM9ZVsxXSxvPWVbM10saT1lWzRdKTooYT1lW2UubGVuZ3RoLTNdLHM9ZVtlLmxlbmd0aC0yXSxvPWVbZS5sZW5ndGgtNl0saT1lW2UubGVuZ3RoLTVdKTtjb25zdCBjPW8tYSxsPWktcyx1PU1hdGguYXRhbjIobCxjKSxoPXUrTWF0aC5QSS8yLGI9dS1NYXRoLlBJLzIsZD0xNixmPShiLWgpL2QsbT1bXTtmb3IobGV0IGU9MDtlPD1kO2UrKyl7Y29uc3Qgbj1iK2YqZSxyPWErdCpNYXRoLmNvcyhuKSxvPXMrdCpNYXRoLnNpbihuKTttLnB1c2gocixvLCExKX0wPT09cj9uLnVuc2hpZnQobSk6bi5wdXNoKG0pfX0pKGUsdCxpKTticmVhaztjYXNlIDI6KChlLHQsbik9Pntmb3IobGV0IHI9MDtyPDI7KytyKXtsZXQgYT0wLHM9MCxvPTAsaT0wOzA9PT1yPyhhPWVbMF0scz1lWzFdLG89ZVszXSxpPWVbNF0pOihhPWVbZS5sZW5ndGgtM10scz1lW2UubGVuZ3RoLTJdLG89ZVtlLmxlbmd0aC02XSxpPWVbZS5sZW5ndGgtNV0pO2NvbnN0IGM9LShvLWEpLGw9LShpLXMpLHU9TWF0aC5zcXJ0KGMqYytsKmwpO2lmKDA9PT11KWNvbnRpbnVlO2NvbnN0IGg9Yy91LGI9bC91LGQ9YSt0KmgsZj1zK3QqYixtPS1iLHY9W2QrdCpoK3QqbSxmK3QqYit0KmgsITEsZCt0KmgtdCptLGYrdCpiLXQqaCwhMSxkLXQqaC10Km0sZi10KmItdCpoLCExLGQrdCpoK3QqbSxmK3QqYit0KmgsITEsZC10KmgtdCptLGYtdCpiLXQqaCwhMSxkLXQqaCt0Km0sZi10KmIrdCpoLCExXTswPT09cj9uLnVuc2hpZnQodik6bi5wdXNoKHYpfX0pKGUsdCxpKX1yZXR1cm4gaX0saHQ9ZT0+e2NvbnN0IHQ9ci50aGlja25lc3MvMixuPVtdO2ZvcihsZXQgcj0wO3I8ZS5sZW5ndGg7KytyKXtjb25zdCBhPXV0KGVbcl0sdCk7bi5wdXNoKC4uLmEpfXJldHVybiB6ZShuLCJzdHJva2UiKX0sYnQ9bmV3IE1hcCxkdD0oKT0+e2J0LmNsZWFyKCl9LGZ0PSgpPT4oe2lkOiJmdW5jdGlvbiI9PXR5cGVvZiBjcnlwdG8/LnJhbmRvbVVVSUQ/Y3J5cHRvLnJhbmRvbVVVSUQoKToieHh4eHh4eHgteHh4eC00eHh4LXl4eHgteHh4eHh4eHh4eHh4Ii5yZXBsYWNlKC9beHldL2csZT0+e2NvbnN0IHQ9MTYqTWF0aC5yYW5kb20oKXwwO3JldHVybigieCI9PT1lP3Q6MyZ0fDgpLnRvU3RyaW5nKDE2KX0pLHJlc291cmNlOm4uY3JlYXRlVmVydGV4QXJyYXkoKSx2ZXJ0ZXhCdWZmZXI6bi5jcmVhdGVCdWZmZXIoKSx2ZXJ0ZXhMZW5ndGg6MH0pO2xldCBtdDtjb25zdCB2dD1lPT57bXQmJm10LmlkPT09ZS5pZHx8KG10PWUsbi5iaW5kVmVydGV4QXJyYXkoZS5yZXNvdXJjZSkpfSxfdD1bXSxwdD1uZXcgRmxvYXQzMkFycmF5KFswLDAsMCwxLDEsMCwxLDFdKTtsZXQgZ3Q7bGV0IHh0O2xldCBFdDtjb25zdCB5dD0oKT0+KEV0fHwoRXQ9KCgpPT57Y29uc3QgZT1mdCgpO3Z0KGUpLG4uYmluZEJ1ZmZlcihuLkFSUkFZX0JVRkZFUixlLnZlcnRleEJ1ZmZlcik7Y29uc3QgdD1uZXcgRmxvYXQzMkFycmF5KFswLDAsMSwwLDEsMSwwLDAsMSwxLDAsMV0pO3JldHVybiBuLmJ1ZmZlckRhdGEobi5BUlJBWV9CVUZGRVIsdCxuLlNUQVRJQ19EUkFXKSxuLmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KDApLG4udmVydGV4QXR0cmliUG9pbnRlcigwLDIsbi5GTE9BVCwhMSwwLDApLGV9KSgpKSxFdCksQXQ9KCk9Pntjb25zdCBlPSgoKT0+e2lmKF90Lmxlbmd0aClyZXR1cm4gX3QucG9wKCk7Y29uc3QgZT1mdCgpO3JldHVybiB2dChlKSxuLmJpbmRCdWZmZXIobi5BUlJBWV9CVUZGRVIsZS52ZXJ0ZXhCdWZmZXIpLG4uZW5hYmxlVmVydGV4QXR0cmliQXJyYXkoMCksbi5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheSgxKSxuLmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KDIpLG4uZW5hYmxlVmVydGV4QXR0cmliQXJyYXkoMyksbi5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheSg0KSxuLmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KDUpLG4udmVydGV4QXR0cmliUG9pbnRlcigwLDIsbi5GTE9BVCwhMSw2OCwwKSxuLnZlcnRleEF0dHJpYlBvaW50ZXIoMSwyLG4uRkxPQVQsITEsNjgsOCksbi52ZXJ0ZXhBdHRyaWJQb2ludGVyKDIsNCxuLkZMT0FULCExLDY4LDE2KSxuLnZlcnRleEF0dHJpYlBvaW50ZXIoMywzLG4uRkxPQVQsITEsNjgsMzIpLG4udmVydGV4QXR0cmliUG9pbnRlcig0LDMsbi5GTE9BVCwhMSw2OCw0NCksbi52ZXJ0ZXhBdHRyaWJQb2ludGVyKDUsMyxuLkZMT0FULCExLDY4LDU2KSxlfSkoKTt2dChlKTtjb25zdCB0PVhlLHI9V2U7cmV0dXJuIG4uYmluZEJ1ZmZlcihuLkFSUkFZX0JVRkZFUixlLnZlcnRleEJ1ZmZlciksZS52ZXJ0ZXhMZW5ndGg8dC5sZW5ndGgmJihlLnZlcnRleExlbmd0aD1jKHQubGVuZ3RoKSxuLmJ1ZmZlckRhdGEobi5BUlJBWV9CVUZGRVIsNCplLnZlcnRleExlbmd0aCxuLkRZTkFNSUNfRFJBVykpLG4uYnVmZmVyU3ViRGF0YShuLkFSUkFZX0JVRkZFUiwwLHQuc3ViYXJyYXkoMCxyKSksZX0sVHQ9ZT0+e190LmluZGV4T2YoZSk+LTF8fF90LnB1c2goZSl9O2xldCBSdD0wO2xldCBNdD0tMTtjbGFzcyB3dHtjb25zdHJ1Y3RvcihlLHQscj0hMSl7T2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsIl8kcHJvZ3JhbU9iamVjdCIse2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwLHZhbHVlOnZvaWQgMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCJfJHVuaWZvcm1NYXAiLHtlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMCx2YWx1ZTp2b2lkIDB9KSx0aGlzLl8kcHJvZ3JhbU9iamVjdD0oKGUsdCk9Pntjb25zdCByPW4uY3JlYXRlUHJvZ3JhbSgpLGE9bi5jcmVhdGVTaGFkZXIobi5WRVJURVhfU0hBREVSKTtuLnNoYWRlclNvdXJjZShhLGUpLG4uY29tcGlsZVNoYWRlcihhKTtjb25zdCBzPW4uY3JlYXRlU2hhZGVyKG4uRlJBR01FTlRfU0hBREVSKTtyZXR1cm4gbi5zaGFkZXJTb3VyY2Uocyx0KSxuLmNvbXBpbGVTaGFkZXIocyksbi5hdHRhY2hTaGFkZXIocixhKSxuLmF0dGFjaFNoYWRlcihyLHMpLG4ubGlua1Byb2dyYW0ociksbi5kZXRhY2hTaGFkZXIocixhKSxuLmRldGFjaFNoYWRlcihyLHMpLG4uZGVsZXRlU2hhZGVyKGEpLG4uZGVsZXRlU2hhZGVyKHMpLHtpZDpSdCsrLHJlc291cmNlOnJ9fSkoZSx0KSx0aGlzLl8kdW5pZm9ybU1hcD1uZXcgTWFwLCgoZSx0LHI9ITEpPT57Y29uc3QgYT1uLmdldFByb2dyYW1QYXJhbWV0ZXIoZSxuLkFDVElWRV9VTklGT1JNUyk7Zm9yKGxldCBzPTA7czxhOysrcyl7Y29uc3QgYT1uLmdldEFjdGl2ZVVuaWZvcm0oZSxzKSxvPWEubmFtZS5lbmRzV2l0aCgiWzBdIik/YS5uYW1lLnNsaWNlKDAsLTMpOmEubmFtZSxpPW4uZ2V0VW5pZm9ybUxvY2F0aW9uKGUsbyk7aWYoYS50eXBlPT09bi5TQU1QTEVSXzJEJiYxPT09YS5zaXplJiYhciljb250aW51ZTtjb25zdCBjPXt9O3N3aXRjaChhLnR5cGUpe2Nhc2Ugbi5GTE9BVF9WRUM0OmMubWV0aG9kPW4udW5pZm9ybTRmdi5iaW5kKG4saSksYy5hcnJheT1uZXcgRmxvYXQzMkFycmF5KDQqYS5zaXplKSxjLmFzc2lnbj0tMTticmVhaztjYXNlIG4uSU5UX1ZFQzQ6Yy5tZXRob2Q9bi51bmlmb3JtNGl2LmJpbmQobixpKSxjLmFycmF5PW5ldyBJbnQzMkFycmF5KDQqYS5zaXplKSxjLmFzc2lnbj0tMTticmVhaztjYXNlIG4uU0FNUExFUl8yRDpjLm1ldGhvZD1yP24udW5pZm9ybTFpLmJpbmQobixpLDMpOm4udW5pZm9ybTFpdi5iaW5kKG4saSksYy5hcnJheT1uZXcgSW50MzJBcnJheShhLnNpemUpLGMuYXNzaWduPTE7YnJlYWs7Y2FzZSBuLkZMT0FUOmNhc2Ugbi5GTE9BVF9WRUMyOmNhc2Ugbi5GTE9BVF9WRUMzOmNhc2Ugbi5GTE9BVF9NQVQyOmNhc2Ugbi5GTE9BVF9NQVQzOmNhc2Ugbi5GTE9BVF9NQVQ0OmNhc2Ugbi5JTlQ6Y2FzZSBuLklOVF9WRUMyOmNhc2Ugbi5JTlRfVkVDMzpkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiVXNlIGdsLkZMT0FUX1ZFQzQgb3IgZ2wuSU5UX1ZFQzQgaW5zdGVhZCIpfXQuc2V0KG8sYyl9fSkodGhpcy5fJHByb2dyYW1PYmplY3QucmVzb3VyY2UsdGhpcy5fJHVuaWZvcm1NYXAscil9dXNlUHJvZ3JhbSgpe3ZhciBlO2U9dGhpcy5fJHByb2dyYW1PYmplY3QsTXQhPT1lLmlkJiYoTXQ9ZS5pZCxuLnVzZVByb2dyYW0oZS5yZXNvdXJjZSkpfWJpbmRVbmlmb3JtKCl7KGU9Pntmb3IoY29uc3QgdCBvZiBlLnZhbHVlcygpKXZvaWQgMCE9PXQubWV0aG9kJiZ2b2lkIDAhPT10LmFzc2lnbiYmKHQuYXNzaWduPDA/dC5tZXRob2QodC5hcnJheSk6dC5hc3NpZ24+MCYmKHQuYXNzaWduLS0sdC5tZXRob2QodC5hcnJheSkpKX0pKHRoaXMuXyR1bmlmb3JtTWFwKX1nZXQgaGlnaHAoKXtyZXR1cm4gdGhpcy5fJHVuaWZvcm1NYXAuZ2V0KCJ1X2hpZ2hwIikuYXJyYXl9Z2V0IG1lZGl1bXAoKXtyZXR1cm4gdGhpcy5fJHVuaWZvcm1NYXAuZ2V0KCJ1X21lZGl1bXAiKS5hcnJheX1nZXQgdGV4dHVyZXMoKXtyZXR1cm4gdGhpcy5fJHVuaWZvcm1NYXAuZ2V0KCJ1X3RleHR1cmVzIikuYXJyYXl9fWNvbnN0IEZ0PW5ldyBNYXAsJHQ9KGUsdCxuLHIpPT57Y29uc3QgYT1uPyJsYXlvdXQgKGxvY2F0aW9uID0gMSkgaW4gdmVjMiBhX2JlemllcjsiOiIiLHM9bj8ib3V0IHZlYzIgdl9iZXppZXI7Ijp0PyJvdXQgdmVjMiB2X3V2OyI6IiIsbz1uPyJ2X2JlemllciA9IGFfYmV6aWVyOyI6dD8iXG4gICAgbWF0MyB1dl9tYXRyaXggPSBtYXQzKFxuICAgICAgICB1X2hpZ2hwWzBdLnh5eixcbiAgICAgICAgdV9oaWdocFsxXS54eXosXG4gICAgICAgIHVfaGlnaHBbMl0ueHl6XG4gICAgKTtcbiAgICBtYXQzIGludmVyc2VfbWF0cml4ID0gbWF0MyhcbiAgICAgICAgdV9oaWdocFszXS54eXosXG4gICAgICAgIHVfaGlnaHBbNF0ueHl6LFxuICAgICAgICB2ZWMzKHVfaGlnaHBbMl0udywgdV9oaWdocFszXS53LCB1X2hpZ2hwWzRdLncpXG4gICAgKTtcbiAgICB2X3V2ID0gKGludmVyc2VfbWF0cml4ICogdXZfbWF0cml4ICogdmVjMyhhX3ZlcnRleCwgMS4wKSkueHk7IjoiIixpPXI/KGU9PmBcbnZlYzIgYXBwbHlNYXRyaXgoaW4gdmVjMiB2ZXJ0ZXgpIHtcbiAgICBtYXQzIHBhcmVudF9tYXRyaXggPSBtYXQzKFxuICAgICAgICB1X2hpZ2hwWyR7ZX1dLnh5eixcbiAgICAgICAgdV9oaWdocFske2UrMX1dLnh5eixcbiAgICAgICAgdV9oaWdocFske2UrMn1dLnh5elxuICAgICk7XG4gICAgbWF0MyBhbmNlc3Rvcl9tYXRyaXggPSBtYXQzKFxuICAgICAgICB1X2hpZ2hwWyR7ZSszfV0ueHl6LFxuICAgICAgICB1X2hpZ2hwWyR7ZSs0fV0ueHl6LFxuICAgICAgICB1X2hpZ2hwWyR7ZSs1fV0ueHl6XG4gICAgKTtcblxuICAgIHZlYzIgcGFyZW50X29mZnNldCA9IHZlYzIodV9oaWdocFske2UrMn1dLncsIHVfaGlnaHBbJHtlKzN9XS53KTtcbiAgICB2ZWMyIHBhcmVudF9zaXplICAgPSB2ZWMyKHVfaGlnaHBbJHtlKzR9XS53LCB1X2hpZ2hwWyR7ZSs1fV0udyk7XG4gICAgdmVjNCBncmlkX21pbiA9IHVfaGlnaHBbJHtlKzZ9XTtcbiAgICB2ZWM0IGdyaWRfbWF4ID0gdV9oaWdocFske2UrN31dO1xuICAgIFxuICAgIHZlYzIgcG9zaXRpb24gPSAocGFyZW50X21hdHJpeCAqIHZlYzModmVydGV4LCAxLjApKS54eTtcbiAgICBwb3NpdGlvbiA9IChwb3NpdGlvbiAtIHBhcmVudF9vZmZzZXQpIC8gcGFyZW50X3NpemU7XG5cbiAgICB2ZWM0IGdhID0gZ3JpZF9taW47XG4gICAgdmVjNCBnYiA9IGdyaWRfbWF4ICAtIGdyaWRfbWluO1xuICAgIHZlYzQgZ2MgPSB2ZWM0KDEuMCkgLSBncmlkX21heDtcblxuICAgIHZlYzIgcGEgPSBwb3NpdGlvbjtcbiAgICB2ZWMyIHBiID0gcG9zaXRpb24gLSBncmlkX21pbi5zdDtcbiAgICB2ZWMyIHBjID0gcG9zaXRpb24gLSBncmlkX21heC5zdDtcblxuICAgIHBvc2l0aW9uID0gKGdhLnBxIC8gZ2Euc3QpICogbWluKHBhLCBnYS5zdClcbiAgICAgICAgICAgICAgICArIChnYi5wcSAvIGdiLnN0KSAqIGNsYW1wKHBiLCB2ZWMyKDAuMCksIGdiLnN0KVxuICAgICAgICAgICAgICAgICsgKGdjLnBxIC8gZ2Muc3QpICogbWF4KHZlYzIoMC4wKSwgcGMpO1xuXG4gICAgcG9zaXRpb24gPSBwb3NpdGlvbiAqIHBhcmVudF9zaXplICsgcGFyZW50X29mZnNldDtcbiAgICBwb3NpdGlvbiA9IChhbmNlc3Rvcl9tYXRyaXggKiB2ZWMzKHBvc2l0aW9uLCAxLjApKS54eTtcblxuICAgIHBvc2l0aW9uID0gcG9zaXRpb24gKyB2ZWMyKHVfaGlnaHBbJHtlKzh9XS54LCB1X2hpZ2hwWyR7ZSs4fV0ueSk7XG4gICAgcmV0dXJuIHBvc2l0aW9uIC8gdmVjMih1X2hpZ2hwWzBdLncsIHVfaGlnaHBbMV0udyk7XG59YCkodD81OjApOiJcbnZlYzIgYXBwbHlNYXRyaXgoaW4gdmVjMiB2ZXJ0ZXgpIHtcbiAgICBtYXQzIG1hdHJpeCA9IG1hdDMoYV9tYXRyaXgwLCBhX21hdHJpeDEsIGFfbWF0cml4Mik7XG4gICAgcmV0dXJuIChtYXRyaXggKiB2ZWMzKHZlcnRleCwgMS4wKSkueHk7XG59IjtyZXR1cm5gI3ZlcnNpb24gMzAwIGVzXG5cbmxheW91dCAobG9jYXRpb24gPSAwKSBpbiB2ZWMyIGFfdmVydGV4O1xuJHthfVxuJHtuPyIiOiJsYXlvdXQgKGxvY2F0aW9uID0gMikgaW4gdmVjNCBhX2NvbG9yOyJ9XG4ke3I/IiI6ImxheW91dCAobG9jYXRpb24gPSAzKSBpbiB2ZWMzIGFfbWF0cml4MDtcbmxheW91dCAobG9jYXRpb24gPSA0KSBpbiB2ZWMzIGFfbWF0cml4MTtcbmxheW91dCAobG9jYXRpb24gPSA1KSBpbiB2ZWMzIGFfbWF0cml4MjsifVxuXG4ke2U+MT9gdW5pZm9ybSB2ZWM0IHVfaGlnaHBbJHtlfV07YDoiIn1cbiR7c31cbiR7bj8iIjoib3V0IHZlYzQgdl9jb2xvcjsifVxuJHtpfVxuXG52b2lkIG1haW4oKSB7XG4gICAgJHtuPyIiOiJ2X2NvbG9yID0gYV9jb2xvcjsifVxuICAgICR7b31cbiAgICB2ZWMyIHBvcyA9IGFwcGx5TWF0cml4KGFfdmVydGV4KTtcbiAgICBwb3MgPSBwb3MgKiAyLjAgLSAxLjA7XG4gICAgZ2xfUG9zaXRpb24gPSB2ZWM0KHBvcy54LCAtcG9zLnksIDAuMCwgMS4wKTtcbn1gfSxPdD1lPT57Y29uc3QgdD0ibSIrKGU/InkiOiJuIik7aWYoRnQuaGFzKHQpKXJldHVybiBGdC5nZXQodCk7Y29uc3Qgbj1uZXcgd3QoJHQoZT85OjAsITEsITAsZSksIiN2ZXJzaW9uIDMwMCBlc1xucHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XG5cbmluIHZlYzIgdl9iZXppZXI7XG5vdXQgdmVjNCBvX2NvbG9yO1xuXG52b2lkIG1haW4oKSB7XG4gICAgdmVjMiBweCA9IGRGZHgodl9iZXppZXIpO1xuICAgIHZlYzIgcHkgPSBkRmR5KHZfYmV6aWVyKTtcblxuICAgIHZlYzIgZiA9ICgyLjAgKiB2X2Jlemllci54KSAqIHZlYzIocHgueCwgcHkueCkgLSB2ZWMyKHB4LnksIHB5LnkpO1xuICAgIGZsb2F0IGFscGhhID0gMC41IC0gKHZfYmV6aWVyLnggKiB2X2Jlemllci54IC0gdl9iZXppZXIueSkgLyBsZW5ndGgoZik7XG5cbiAgICBpZiAoYWxwaGEgPiAwLjApIHtcbiAgICAgICAgb19jb2xvciA9IHZlYzQobWluKGFscGhhLCAxLjApKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBkaXNjYXJkO1xuICAgIH0gICAgXG59Iik7cmV0dXJuIEZ0LnNldCh0LG4pLG59LFN0PShlLHQpPT57Y29uc3Qgbj1lLmhpZ2hwO25bMF09dFswXSxuWzFdPXRbMV0sblsyXT0wLG5bNF09dFsyXSxuWzVdPXRbM10sbls2XT0wLG5bOF09dFs0XSxuWzldPXRbNV0sblsxMF09MSxuWzEyXT10WzZdLG5bMTNdPXRbN10sblsxNF09MCxuWzE2XT10WzhdLG5bMTddPXRbOV0sblsxOF09MCxuWzIwXT10WzEwXSxuWzIxXT10WzExXSxuWzIyXT0xLG5bM109eCgpLG5bN109RSgpLG5bMTFdPXRbMTJdLG5bMTVdPXRbMTNdLG5bMTldPXRbMTRdLG5bMjNdPXRbMTVdLG5bMjRdPXRbMTZdLG5bMjVdPXRbMTddLG5bMjZdPXRbMThdLG5bMjddPXRbMTldLG5bMjhdPXRbMjBdLG5bMjldPXRbMjFdLG5bMzBdPXRbMjJdLG5bMzFdPXRbMjNdLG5bMzJdPXRbMjRdLG5bMzNdPXRbMjVdfTtsZXQga3Q9Im5vcm1hbCI7Y29uc3QgQ3Q9ZT0+e2t0PWV9LFB0PSgpPT5rdDtsZXQgQnQ9NjAwO2NvbnN0IEl0PWU9PntCdD1lfSxMdD0oKT0+QnQsVXQ9KCk9Pns2MTMhPT1MdCgpJiYoSXQoNjEzKSxuLmJsZW5kRnVuYyhuLk9ORSxuLk9ORV9NSU5VU19TUkNfQUxQSEEpKX0sTnQ9KGUsdCxyLGEpPT57ZS51c2VQcm9ncmFtKCksZS5iaW5kVW5pZm9ybSgpLFV0KCksdnQodCksbi5kcmF3QXJyYXlzKG4uVFJJQU5HTEVTLHIsYSl9LER0PSgpPT57Y29uc3QgZT0icm1ubiI7aWYoRnQuaGFzKGUpKXJldHVybiBGdC5nZXQoZSk7Y29uc3QgdD1uZXcgd3QoIiN2ZXJzaW9uIDMwMCBlc1xubGF5b3V0IChsb2NhdGlvbiA9IDApIGluIHZlYzIgYV92ZXJ0ZXg7XG52b2lkIG1haW4oKSB7XG4gICAgdmVjMiBwb3MgPSBhX3ZlcnRleCAqIDIuMCAtIDEuMDtcbiAgICBnbF9Qb3NpdGlvbiA9IHZlYzQocG9zLngsIC1wb3MueSwgMC4wLCAxLjApO1xufSIsIiN2ZXJzaW9uIDMwMCBlc1xucHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XG5vdXQgdmVjNCBvX2NvbG9yO1xudm9pZCBtYWluKCkge1xuICAgIG9fY29sb3IgPSB2ZWM0KDEuMCk7XG59Iik7cmV0dXJuIEZ0LnNldChlLHQpLHR9LGp0PSgpPT57Y29uc3QgZT1yLmN1cnJlbnRBdHRhY2htZW50T2JqZWN0O2lmKCFlKXJldHVybjtjb25zdCB0PTE8PGUuY2xpcExldmVsLTE7bi5zdGVuY2lsTWFzayh+dC0xKSxuLnN0ZW5jaWxGdW5jKG4uTEVRVUFMLHQsMjU1KSxuLnN0ZW5jaWxPcChuLlpFUk8sbi5SRVBMQUNFLG4uUkVQTEFDRSksTnQoRHQoKSx5dCgpLDAsNiksbi5zdGVuY2lsTWFzaygxPDxlLmNsaXBMZXZlbCksbi5zdGVuY2lsRnVuYyhuLkFMV0FZUywwLDI1NSksbi5zdGVuY2lsT3Aobi5SRVBMQUNFLG4uUkVQTEFDRSxuLlJFUExBQ0UpLE50KER0KCkseXQoKSwwLDYpLG4uc3RlbmNpbE1hc2soMjU1KSxuLnN0ZW5jaWxPcChuLlpFUk8sbi5JTlZFUlQsbi5JTlZFUlQpfSx6dD1bXTtjbGFzcyBYdHtjb25zdHJ1Y3RvcihlLHQsbixyLGEpe09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCJpbmRleCIse2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwLHZhbHVlOnZvaWQgMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCJ4Iix7ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITAsdmFsdWU6dm9pZCAwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsInkiLHtlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMCx2YWx1ZTp2b2lkIDB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywidyIse2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwLHZhbHVlOnZvaWQgMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCJoIix7ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITAsdmFsdWU6dm9pZCAwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsImxlZnQiLHtlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMCx2YWx1ZTp2b2lkIDB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywicmlnaHQiLHtlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMCx2YWx1ZTp2b2lkIDB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywidXNlZCIse2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwLHZhbHVlOnZvaWQgMH0pLHRoaXMuaW5kZXg9ZSx0aGlzLng9dCx0aGlzLnk9bix0aGlzLnc9cix0aGlzLmg9YSx0aGlzLmxlZnQ9bnVsbCx0aGlzLnJpZ2h0PW51bGwsdGhpcy51c2VkPSExfWluc2VydChlLHQpe3JldHVybigoZSx0LG4pPT57aWYoZS51c2VkKXtjb25zdCByPWUubGVmdD8uaW5zZXJ0KHQsbik7cmV0dXJuIHJ8fGUucmlnaHQ/Lmluc2VydCh0LG4pfHxudWxsfWNvbnN0IHI9dCsxLGE9bisxO2lmKHI+ZS53fHxhPmUuaClyZXR1cm4gbnVsbDtpZihyPT09ZS53JiZhPT09ZS5oKXJldHVybiBlLnVzZWQ9ITAsZS53PXQsZS5oPW4sZTtjb25zdCBzPWUudy1yLG89ZS5oLWE7cmV0dXJuIHM+bz8oZS5sZWZ0PWUuY3JlYXRlKGUuaW5kZXgsZS54LGUueSxyLGUuaCksZS5yaWdodD1lLmNyZWF0ZShlLmluZGV4LGUueCtyLGUueSxzLGUuaCkpOihlLmxlZnQ9ZS5jcmVhdGUoZS5pbmRleCxlLngsZS55LGUudyxhKSxlLnJpZ2h0PWUuY3JlYXRlKGUuaW5kZXgsZS54LGUueSthLGUudyxvKSksZS51c2VkPSEwLGUubGVmdC5pbnNlcnQodCxuKX0pKHRoaXMsZSx0KX1kaXNwb3NlKGUsdCxuLHIpe3JldHVybigoZSx0LG4scixhKT0+ZS5sZWZ0Py5kaXNwb3NlKHQsbixyLGEpPyhlLmxlZnQudXNlZHx8ZS5yaWdodD8udXNlZHx8KGUubGVmdCYmZS5sZWZ0LnJlbGVhc2UoKSxlLnJpZ2h0JiZlLnJpZ2h0LnJlbGVhc2UoKSxlLmxlZnQ9ZS5yaWdodD1udWxsLGUudXNlZD0hMSksITApOmUucmlnaHQ/LmRpc3Bvc2UodCxuLHIsYSk/KGUucmlnaHQudXNlZHx8ZS5sZWZ0Py51c2VkfHwoZS5sZWZ0JiZlLmxlZnQucmVsZWFzZSgpLGUucmlnaHQmJmUucmlnaHQucmVsZWFzZSgpLGUubGVmdD1lLnJpZ2h0PW51bGwsZS51c2VkPSExKSwhMCk6dD09PWUueCYmbj09PWUueSYmcj09PWUudyYmYT09PWUuaCYmKGUudXNlZD0hMSwhMCkpKHRoaXMsZSx0LG4scil9Y3JlYXRlKGUsdCxuLHIsYSl7bGV0IHM7cmV0dXJuIHp0Lmxlbmd0aD4wPyhzPXp0LnBvcCgpLHMuaW5kZXg9ZSxzLng9dCxzLnk9bixzLnc9cixzLmg9YSxzLmxlZnQ9bnVsbCxzLnJpZ2h0PW51bGwscy51c2VkPSExKTpzPW5ldyBYdChlLHQsbixyLGEpLHN9cmVsZWFzZSgpe3RoaXMubGVmdCYmKHRoaXMubGVmdC5yZWxlYXNlKCksdGhpcy5sZWZ0PW51bGwpLHRoaXMucmlnaHQmJih0aGlzLnJpZ2h0LnJlbGVhc2UoKSx0aGlzLnJpZ2h0PW51bGwpLHRoaXMudXNlZD0hMSx6dC5wdXNoKHRoaXMpfX1jbGFzcyBXdHtjb25zdHJ1Y3RvcihlLHQsbil7T2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsIl8kcm9vdCIse2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwLHZhbHVlOnZvaWQgMH0pLHRoaXMuXyRyb290PW5ldyBYdChlLDAsMCx0LG4pfWluc2VydChlLHQpe3JldHVybiB0aGlzLl8kcm9vdC5pbnNlcnQoZSx0KX1kaXNwb3NlKGUsdCxuLHIpe3JldHVybiB0aGlzLl8kcm9vdC5kaXNwb3NlKGUsdCxuLHIpfX1jb25zdCBHdD0odCxuKT0+e2NvbnN0IHI9dmUoKTtnZVtyXXx8KGdlW3JdPW5ldyBXdChyLGUsZSkpO2NvbnN0IGE9Z2Vbcl0uaW5zZXJ0KHQsbik7cmV0dXJuIGF8fChtZShyKzEpLEd0KHQsbikpfSxWdD1lPT5gXG4gICAgdmVjNCBtdWwgPSB1X21lZGl1bXBbJHtlfV07XG4gICAgdmVjNCBhZGQgPSB1X21lZGl1bXBbJHtlKzF9XTtcblxuICAgIGlmIChtdWwueCAhPSAxLjAgfHwgbXVsLnkgIT0gMS4wIHx8IG11bC56ICE9IDEuMCB8fCBtdWwudyAhPSAxLjBcbiAgICAgICAgfHwgYWRkLnggIT0gMC4wIHx8IGFkZC55ICE9IDAuMCB8fCBhZGQueiAhPSAwLjBcbiAgICApIHtcbiAgICAgICAgc3JjLnJnYiAvPSBtYXgoMC4wMDAxLCBzcmMuYSk7XG4gICAgICAgIHNyYyA9IGNsYW1wKHNyYyAqIG11bCArIGFkZCwgMC4wLCAxLjApO1xuICAgICAgICBzcmMucmdiICo9IHNyYy5hO1xuICAgIH1cbmAsWXQ9ZT0+YCN2ZXJzaW9uIDMwMCBlc1xucHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XG5cbnVuaWZvcm0gc2FtcGxlcjJEIHVfdGV4dHVyZTtcbiR7ZT8idW5pZm9ybSB2ZWM0IHVfbWVkaXVtcFsyXTsiOiIifVxuXG5pbiB2ZWMyIHZfY29vcmQ7XG5vdXQgdmVjNCBvX2NvbG9yO1xuXG52b2lkIG1haW4oKSB7XG4gICAgdmVjNCBzcmMgPSB0ZXh0dXJlKHVfdGV4dHVyZSwgdl9jb29yZCk7XG4gICAgJHtlP1Z0KDApOiIifVxuICAgIG9fY29sb3IgPSBzcmM7XG59YDtjb25zdCBxdD1uZXcgY2xhc3N7Y29uc3RydWN0b3IoKXtPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywiYnVmZmVyIix7ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITAsdmFsdWU6dm9pZCAwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsIm9mZnNldCIse2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwLHZhbHVlOnZvaWQgMH0pLHRoaXMuYnVmZmVyPW5ldyBGbG9hdDMyQXJyYXkoMjU2KSx0aGlzLm9mZnNldD0wfXB1c2goLi4uZSl7dGhpcy5idWZmZXIubGVuZ3RoPHRoaXMub2Zmc2V0K2UubGVuZ3RoJiZ0aGlzLnJlc2l6ZShlLmxlbmd0aCk7Zm9yKGxldCB0PTA7dDxlLmxlbmd0aDt0KyspdGhpcy5idWZmZXJbdGhpcy5vZmZzZXQrK109ZVt0XX1zZXQoZSl7dGhpcy5idWZmZXIubGVuZ3RoPHRoaXMub2Zmc2V0K2UubGVuZ3RoJiZ0aGlzLnJlc2l6ZShlLmxlbmd0aCksdGhpcy5idWZmZXIuc2V0KGUsdGhpcy5vZmZzZXQpLHRoaXMub2Zmc2V0Kz1lLmxlbmd0aH1yZXNpemUoZSl7Y29uc3QgdD1uZXcgRmxvYXQzMkFycmF5KChuPXRoaXMub2Zmc2V0K2Usbi0tLG58PW4+PjEsbnw9bj4+MixufD1uPj40LG58PW4+Pjgsbnw9bj4+MTYsKytuKSk7dmFyIG47dGhpcy5idWZmZXIubGVuZ3RoJiZ0LnNldCh0aGlzLmJ1ZmZlciksdGhpcy5idWZmZXI9dH19O2NsYXNzIEt0IGV4dGVuZHMgd3R7Y29uc3RydWN0b3IoZSx0LG49ITApe3N1cGVyKGUsdCxuKSxPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywiY291bnQiLHtlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMCx2YWx1ZTp2b2lkIDB9KSx0aGlzLmNvdW50PTB9Y2xlYXIoKXt0aGlzLmNvdW50PXF0Lm9mZnNldD0wfX1jb25zdCBIdD1uZXcgTWFwLFp0PSgpPT57aWYoSHQuaGFzKCJpIikpcmV0dXJuIEh0LmdldCgiaSIpO2NvbnN0IGU9bmV3IEt0KCIjdmVyc2lvbiAzMDAgZXNcblxubGF5b3V0IChsb2NhdGlvbiA9IDApIGluIHZlYzIgYV92ZXJ0ZXg7XG5sYXlvdXQgKGxvY2F0aW9uID0gMSkgaW4gdmVjNCBhX3JlY3Q7XG5sYXlvdXQgKGxvY2F0aW9uID0gMikgaW4gdmVjNCBhX3NpemU7XG5sYXlvdXQgKGxvY2F0aW9uID0gMykgaW4gdmVjMiBhX29mZnNldDtcbmxheW91dCAobG9jYXRpb24gPSA0KSBpbiB2ZWM0IGFfbWF0cml4O1xubGF5b3V0IChsb2NhdGlvbiA9IDUpIGluIHZlYzQgYV9tdWw7XG5sYXlvdXQgKGxvY2F0aW9uID0gNikgaW4gdmVjNCBhX2FkZDtcblxub3V0IHZlYzIgdl9jb29yZDtcbm91dCB2ZWM0IHZfbXVsO1xub3V0IHZlYzQgdl9hZGQ7XG5cbnZvaWQgbWFpbigpIHtcbiAgICB2X2Nvb3JkID0gYV92ZXJ0ZXggKiBhX3JlY3QuencgKyBhX3JlY3QueHk7XG4gICAgdl9tdWwgPSBhX211bDtcbiAgICB2X2FkZCA9IGFfYWRkO1xuXG4gICAgdmVjMiBwb3NpdGlvbiA9IHZlYzIoYV92ZXJ0ZXgueCwgMS4wIC0gYV92ZXJ0ZXgueSk7XG4gICAgcG9zaXRpb24gPSBwb3NpdGlvbiAqIGFfc2l6ZS54eTtcblxuICAgIG1hdDMgbWF0cml4ID0gbWF0MyhcbiAgICAgICAgYV9tYXRyaXgueCwgYV9tYXRyaXgueSwgMC4wLFxuICAgICAgICBhX21hdHJpeC56LCBhX21hdHJpeC53LCAwLjAsXG4gICAgICAgIGFfb2Zmc2V0LngsIGFfb2Zmc2V0LnksIDEuMFxuICAgICk7XG5cbiAgICBwb3NpdGlvbiA9IChtYXRyaXggKiB2ZWMzKHBvc2l0aW9uLCAxLjApKS54eTtcbiAgICBwb3NpdGlvbiAvPSBhX3NpemUuenc7XG5cbiAgICBwb3NpdGlvbiA9IHBvc2l0aW9uICogMi4wIC0gMS4wO1xuICAgIGdsX1Bvc2l0aW9uID0gdmVjNChwb3NpdGlvbi54LCAtcG9zaXRpb24ueSwgMC4wLCAxLjApO1xufSIsIiN2ZXJzaW9uIDMwMCBlc1xucHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XG5cbnVuaWZvcm0gc2FtcGxlcjJEIHVfdGV4dHVyZTtcblxuaW4gdmVjNCB2X211bDtcbmluIHZlYzQgdl9hZGQ7XG5pbiB2ZWMyIHZfY29vcmQ7XG5vdXQgdmVjNCBvX2NvbG9yO1xuXG52b2lkIG1haW4oKSB7XG4gICAgdmVjNCBzcmMgPSB0ZXh0dXJlKHVfdGV4dHVyZSwgdl9jb29yZCk7XG5cbiAgICBpZiAodl9tdWwueCAhPSAxLjAgfHwgdl9tdWwueSAhPSAxLjAgfHwgdl9tdWwueiAhPSAxLjAgfHwgdl9tdWwudyAhPSAxLjBcbiAgICAgICAgfHwgdl9hZGQueCAhPSAwLjAgfHwgdl9hZGQueSAhPSAwLjAgfHwgdl9hZGQueiAhPSAwLjBcbiAgICApIHtcbiAgICAgICAgc3JjLnJnYiAvPSBtYXgoMC4wMDAxLCBzcmMuYSk7XG4gICAgICAgIHNyYyA9IGNsYW1wKHNyYyAqIHZfbXVsICsgdl9hZGQsIDAuMCwgMS4wKTtcbiAgICAgICAgc3JjLnJnYiAqPSBzcmMuYTtcbiAgICB9XG5cbiAgICBvX2NvbG9yID0gc3JjO1xufSIpO3JldHVybiBIdC5zZXQoImkiLGUpLGV9LFF0PShlLHQpPT57Y29uc3Qgbj1gaSR7ZX15YDtpZihIdC5oYXMobikpcmV0dXJuIEh0LmdldChuKTtjb25zdCByPW5ldyB3dCgiI3ZlcnNpb24gMzAwIGVzXG5cbmxheW91dCAobG9jYXRpb24gPSAwKSBpbiB2ZWMyIGFfdmVydGV4O1xuXG5vdXQgdmVjMiB2X2Nvb3JkO1xuXG52b2lkIG1haW4oKSB7XG4gICAgdl9jb29yZCA9IGFfdmVydGV4O1xuXG4gICAgdmVjMiBwb3NpdGlvbiA9IGFfdmVydGV4ICogMi4wIC0gMS4wO1xuICAgIGdsX1Bvc2l0aW9uID0gdmVjNChwb3NpdGlvbiwgMC4wLCAxLjApO1xufSIsKGU9PntsZXQgdDtzd2l0Y2goZSl7Y2FzZSJzdWJ0cmFjdCI6dD0iXG52ZWM0IGJsZW5kIChpbiB2ZWM0IHNyYywgaW4gdmVjNCBkc3QpIHtcbiAgICBpZiAoc3JjLmEgPT0gMC4wKSB7IHJldHVybiBkc3Q7IH1cbiAgICBpZiAoZHN0LmEgPT0gMC4wKSB7IHJldHVybiBzcmM7IH1cblxuICAgIHZlYzQgYSA9IHNyYyAtIHNyYyAqIGRzdC5hO1xuICAgIHZlYzQgYiA9IGRzdCAtIGRzdCAqIHNyYy5hO1xuXG4gICAgc3JjLnJnYiAvPSBzcmMuYTtcbiAgICBkc3QucmdiIC89IGRzdC5hO1xuXG4gICAgdmVjNCBjID0gdmVjNChkc3QucmdiIC0gc3JjLnJnYiwgc3JjLmEgKiBkc3QuYSk7XG4gICAgYy5yZ2IgKj0gYy5hO1xuXG4gICAgcmV0dXJuIGEgKyBiICsgYztcbn0iO2JyZWFrO2Nhc2UibXVsdGlwbHkiOnQ9IlxudmVjNCBibGVuZCAoaW4gdmVjNCBzcmMsIGluIHZlYzQgZHN0KSB7XG4gICAgdmVjNCBhID0gc3JjIC0gc3JjICogZHN0LmE7XG4gICAgdmVjNCBiID0gZHN0IC0gZHN0ICogc3JjLmE7XG4gICAgdmVjNCBjID0gc3JjICogZHN0O1xuXG4gICAgcmV0dXJuIGEgKyBiICsgYztcbn0iO2JyZWFrO2Nhc2UibGlnaHRlbiI6dD0iXG52ZWM0IGJsZW5kIChpbiB2ZWM0IHNyYywgaW4gdmVjNCBkc3QpIHtcbiAgICBpZiAoc3JjLmEgPT0gMC4wKSB7IHJldHVybiBkc3Q7IH1cbiAgICBpZiAoZHN0LmEgPT0gMC4wKSB7IHJldHVybiBzcmM7IH1cblxuICAgIHZlYzQgYSA9IHNyYyAtIHNyYyAqIGRzdC5hO1xuICAgIHZlYzQgYiA9IGRzdCAtIGRzdCAqIHNyYy5hO1xuXG4gICAgc3JjLnJnYiAvPSBzcmMuYTtcbiAgICBkc3QucmdiIC89IGRzdC5hO1xuXG4gICAgdmVjNCBjID0gdmVjNChtaXgoc3JjLnJnYiwgZHN0LnJnYiwgc3RlcChzcmMucmdiLCBkc3QucmdiKSksIHNyYy5hICogZHN0LmEpO1xuICAgIGMucmdiICo9IGMuYTtcblxuICAgIHJldHVybiBhICsgYiArIGM7XG59IjticmVhaztjYXNlImRhcmtlbiI6dD0iXG52ZWM0IGJsZW5kIChpbiB2ZWM0IHNyYywgaW4gdmVjNCBkc3QpIHtcbiAgICBpZiAoc3JjLmEgPT0gMC4wKSB7IHJldHVybiBkc3Q7IH1cbiAgICBpZiAoZHN0LmEgPT0gMC4wKSB7IHJldHVybiBzcmM7IH1cblxuICAgIHZlYzQgYSA9IHNyYyAtIHNyYyAqIGRzdC5hO1xuICAgIHZlYzQgYiA9IGRzdCAtIGRzdCAqIHNyYy5hO1xuXG4gICAgc3JjLnJnYiAvPSBzcmMuYTtcbiAgICBkc3QucmdiIC89IGRzdC5hO1xuXG4gICAgdmVjNCBjID0gdmVjNChtaXgoc3JjLnJnYiwgZHN0LnJnYiwgc3RlcChkc3QucmdiLCBzcmMucmdiKSksIHNyYy5hICogZHN0LmEpO1xuICAgIGMucmdiICo9IGMuYTtcblxuICAgIHJldHVybiBhICsgYiArIGM7XG59IjticmVhaztjYXNlIm92ZXJsYXkiOnQ9IlxudmVjNCBibGVuZCAoaW4gdmVjNCBzcmMsIGluIHZlYzQgZHN0KSB7XG4gICAgaWYgKHNyYy5hID09IDAuMCkgeyByZXR1cm4gZHN0OyB9XG4gICAgaWYgKGRzdC5hID09IDAuMCkgeyByZXR1cm4gc3JjOyB9XG5cbiAgICB2ZWM0IGEgPSBzcmMgLSBzcmMgKiBkc3QuYTtcbiAgICB2ZWM0IGIgPSBkc3QgLSBkc3QgKiBzcmMuYTtcblxuICAgIHNyYy5yZ2IgLz0gc3JjLmE7XG4gICAgZHN0LnJnYiAvPSBkc3QuYTtcblxuICAgIHZlYzQgbXVsID0gc3JjICogZHN0O1xuICAgIHZlYzMgYzEgPSAyLjAgKiBtdWwucmdiO1xuICAgIHZlYzMgYzIgPSAyLjAgKiAoc3JjLnJnYiArIGRzdC5yZ2IgLSBtdWwucmdiKSAtIDEuMDtcbiAgICB2ZWM0IGMgPSB2ZWM0KG1peChjMSwgYzIsIHN0ZXAodmVjMygwLjUpLCBkc3QucmdiKSksIG11bC5hKTtcbiAgICBjLnJnYiAqPSBjLmE7XG5cbiAgICByZXR1cm4gYSArIGIgKyBjO1xufSI7YnJlYWs7Y2FzZSJoYXJkbGlnaHQiOnQ9IlxudmVjNCBibGVuZCAoaW4gdmVjNCBzcmMsIGluIHZlYzQgZHN0KSB7XG4gICAgaWYgKHNyYy5hID09IDAuMCkgeyByZXR1cm4gZHN0OyB9XG4gICAgaWYgKGRzdC5hID09IDAuMCkgeyByZXR1cm4gc3JjOyB9XG5cbiAgICB2ZWM0IGEgPSBzcmMgLSBzcmMgKiBkc3QuYTtcbiAgICB2ZWM0IGIgPSBkc3QgLSBkc3QgKiBzcmMuYTtcblxuICAgIHNyYy5yZ2IgLz0gc3JjLmE7XG4gICAgZHN0LnJnYiAvPSBkc3QuYTtcblxuICAgIHZlYzQgbXVsID0gc3JjICogZHN0O1xuICAgIHZlYzMgYzEgPSAyLjAgKiBtdWwucmdiO1xuICAgIHZlYzMgYzIgPSAyLjAgKiAoc3JjLnJnYiArIGRzdC5yZ2IgLSBtdWwucmdiKSAtIDEuMDtcbiAgICB2ZWM0IGMgPSB2ZWM0KG1peChjMSwgYzIsIHN0ZXAodmVjMygwLjUpLCBzcmMucmdiKSksIG11bC5hKTtcbiAgICBjLnJnYiAqPSBjLmE7XG5cbiAgICByZXR1cm4gYSArIGIgKyBjO1xufSI7YnJlYWs7Y2FzZSJkaWZmZXJlbmNlIjp0PSJcbnZlYzQgYmxlbmQgKGluIHZlYzQgc3JjLCBpbiB2ZWM0IGRzdCkge1xuICAgIGlmIChzcmMuYSA9PSAwLjApIHsgcmV0dXJuIGRzdDsgfVxuICAgIGlmIChkc3QuYSA9PSAwLjApIHsgcmV0dXJuIHNyYzsgfVxuXG4gICAgdmVjNCBhID0gc3JjIC0gc3JjICogZHN0LmE7XG4gICAgdmVjNCBiID0gZHN0IC0gZHN0ICogc3JjLmE7XG5cbiAgICBzcmMucmdiIC89IHNyYy5hO1xuICAgIGRzdC5yZ2IgLz0gZHN0LmE7XG5cbiAgICB2ZWM0IGMgPSB2ZWM0KGFicyhzcmMucmdiIC0gZHN0LnJnYiksIHNyYy5hICogZHN0LmEpO1xuICAgIGMucmdiICo9IGMuYTtcblxuICAgIHJldHVybiBhICsgYiArIGM7XG59IjticmVhaztjYXNlImludmVydCI6dD0iXG52ZWM0IGJsZW5kIChpbiB2ZWM0IHNyYywgaW4gdmVjNCBkc3QpIHtcbiAgICBpZiAoc3JjLmEgPT0gMC4wKSB7IHJldHVybiBkc3Q7IH1cbiAgICBpZiAoZHN0LmEgPT0gMC4wKSB7IHJldHVybiBzcmM7IH1cblxuICAgIHZlYzQgYiA9IGRzdCAtIGRzdCAqIHNyYy5hO1xuICAgIHZlYzQgYyA9IHZlYzQoc3JjLmEgLSBkc3QucmdiICogc3JjLmEsIHNyYy5hKTtcblxuICAgIHJldHVybiBiICsgYztcbn0iO2JyZWFrO2RlZmF1bHQ6dD0iXG52ZWM0IGJsZW5kIChpbiB2ZWM0IHNyYywgaW4gdmVjNCBkc3QpIHtcbiAgICByZXR1cm4gc3JjICsgZHN0IC0gZHN0ICogc3JjLmE7XG59In1yZXR1cm5gI3ZlcnNpb24gMzAwIGVzXG5wcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcblxudW5pZm9ybSBzYW1wbGVyMkQgdV90ZXh0dXJlc1syXTtcbnVuaWZvcm0gdmVjNCB1X21lZGl1bXBbMl07XG5cbmluIHZlYzIgdl9jb29yZDtcbm91dCB2ZWM0IG9fY29sb3I7XG5cbiR7dH1cblxudm9pZCBtYWluKCkge1xuICAgIHZlYzQgZHN0ID0gdGV4dHVyZSh1X3RleHR1cmVzWzBdLCB2X2Nvb3JkKTtcbiAgICB2ZWM0IHNyYyA9IHRleHR1cmUodV90ZXh0dXJlc1sxXSwgdl9jb29yZCk7XG4gICAgJHtWdCgwKX1cbiAgICBvX2NvbG9yID0gYmxlbmQoc3JjLCBkc3QpO1xufWB9KShlKSk7cmV0dXJuIEh0LnNldChuLHIpLHJ9O2xldCBKdD0wO2NvbnN0IGVuPSgpPT57Y29uc3QgZT1yLmN1cnJlbnRBdHRhY2htZW50T2JqZWN0LHQ9ci5hdGxhc0F0dGFjaG1lbnRPYmplY3Q7aWYoci5iaW5kKHQpLG4uYmluZEZyYW1lYnVmZmVyKG4uRFJBV19GUkFNRUJVRkZFUix6KSxZKCExKSxKdD09PXZlKCkpe2NvbnN0IGU9QWUodmUoKSk7ZVsyXSE9PS1OdW1iZXIuTUFYX1ZBTFVFJiZlWzNdIT09LU51bWJlci5NQVhfVkFMVUUmJihuLmVuYWJsZShuLlNDSVNTT1JfVEVTVCksbi5zY2lzc29yKGVbMF0sZVsxXSxlWzJdLGVbM10pLG4uYmxpdEZyYW1lYnVmZmVyKDAsMCx0LndpZHRoLHQuaGVpZ2h0LDAsMCx0LndpZHRoLHQuaGVpZ2h0LG4uQ09MT1JfQlVGRkVSX0JJVCxuLk5FQVJFU1QpLG4uZGlzYWJsZShuLlNDSVNTT1JfVEVTVCkpfWVsc2V7Y29uc3QgZT1SZSh2ZSgpKTtuLmVuYWJsZShuLlNDSVNTT1JfVEVTVCksbi5zY2lzc29yKGVbMF0sZVsxXSxlWzJdLGVbM10pLG4uYmxpdEZyYW1lYnVmZmVyKDAsMCx0LndpZHRoLHQuaGVpZ2h0LDAsMCx0LndpZHRoLHQuaGVpZ2h0LG4uQ09MT1JfQlVGRkVSX0JJVCxuLk5FQVJFU1QpLG4uZGlzYWJsZShuLlNDSVNTT1JfVEVTVCksSnQ9dmUoKX1lJiZyLmJpbmQoZSl9LHRuPWU9Pntjb25zdCB0PXZlKCk7bWUoZS5pbmRleCksZW4oKTtjb25zdCByPUs7bi5iaW5kRnJhbWVidWZmZXIobi5GUkFNRUJVRkZFUixyKTtjb25zdCBhPUVlKCk7bi5mcmFtZWJ1ZmZlclRleHR1cmUyRChuLkZSQU1FQlVGRkVSLG4uQ09MT1JfQVRUQUNITUVOVDAsbi5URVhUVVJFXzJELGEucmVzb3VyY2UsMCk7Y29uc3Qgcz1KKCk7bi5iaW5kRnJhbWVidWZmZXIobi5GUkFNRUJVRkZFUixzKTtjb25zdCBvPXVlKGUudyxlLmgpO3JldHVybiBuLmZyYW1lYnVmZmVyVGV4dHVyZTJEKG4uRlJBTUVCVUZGRVIsbi5DT0xPUl9BVFRBQ0hNRU5UMCxuLlRFWFRVUkVfMkQsby5yZXNvdXJjZSwwKSxuLmJpbmRGcmFtZWJ1ZmZlcihuLkZSQU1FQlVGRkVSLG51bGwpLG4uYmluZEZyYW1lYnVmZmVyKG4uUkVBRF9GUkFNRUJVRkZFUixyKSxuLmJpbmRGcmFtZWJ1ZmZlcihuLkRSQVdfRlJBTUVCVUZGRVIscyksbi5ibGl0RnJhbWVidWZmZXIoZS54LGUueSxlLngrZS53LGUueStlLmgsMCwwLGUudyxlLmgsbi5DT0xPUl9CVUZGRVJfQklULG4uTkVBUkVTVCksbWUodCksbi5iaW5kRnJhbWVidWZmZXIobi5SRUFEX0ZSQU1FQlVGRkVSLEQpLG4uYmluZEZyYW1lYnVmZmVyKG4uRlJBTUVCVUZGRVIsRCksb30sbm49KGUsdCxyPSExKT0+e1NlKDIsbi5URVhUVVJFMixudWxsLHIpLFNlKDEsbi5URVhUVVJFMSx0LHIpLFNlKDAsbi5URVhUVVJFMCxlLHIpfSxybj0oKT0+e2lmKEh0LmhhcygicCIpKXJldHVybiBIdC5nZXQoInAiKTtjb25zdCBlPW5ldyB3dCgiI3ZlcnNpb24gMzAwIGVzXG5cbmxheW91dCAobG9jYXRpb24gPSAwKSBpbiB2ZWMyIGFfdmVydGV4O1xudW5pZm9ybSB2ZWM0IHVfaGlnaHBbMl07XG5cbm91dCB2ZWMyIHZfY29vcmQ7XG5cbnZvaWQgbWFpbigpIHtcbiAgICB2X2Nvb3JkID0gYV92ZXJ0ZXg7XG5cbiAgICB2ZWMyIG9mZnNldCAgID0gdV9oaWdocFswXS54eTtcbiAgICB2ZWMyIHNpemUgICAgID0gdV9oaWdocFswXS56dztcbiAgICB2ZWMyIHZpZXdwb3J0ID0gdmVjMih1X2hpZ2hwWzFdLngsIHVfaGlnaHBbMV0ueSk7XG5cbiAgICB2ZWMyIHBvc2l0aW9uID0gdmVjMihhX3ZlcnRleC54LCAxLjAgLSBhX3ZlcnRleC55KTtcbiAgICBwb3NpdGlvbiA9IHBvc2l0aW9uICogc2l6ZSArIG9mZnNldDtcbiAgICBwb3NpdGlvbiAvPSB2aWV3cG9ydDtcblxuICAgIHBvc2l0aW9uID0gcG9zaXRpb24gKiAyLjAgLSAxLjA7XG4gICAgZ2xfUG9zaXRpb24gPSB2ZWM0KHBvc2l0aW9uLngsIC1wb3NpdGlvbi55LCAwLjAsIDEuMCk7XG59IixZdCghMSkpO3JldHVybiBIdC5zZXQoInAiLGUpLGV9LGFuPShlLHQsbik9Pntjb25zdCBhPWUuaGlnaHAscz1yLiRtYXRyaXg7YVswXT1zWzZdLGFbMV09c1s3XSxhWzJdPXQsYVszXT1uLGFbNF09eCgpLGFbNV09RSgpfSxzbj1lPT57ZS51c2VQcm9ncmFtKCksZS5iaW5kVW5pZm9ybSgpLHZ0KHl0KCkpLG4uZHJhd0FycmF5cyhuLlRSSUFOR0xFUywwLDYpfTtsZXQgb249bnVsbDtjb25zdCBjbj0oZSx0LGEscyk9Pntjb25zdCBvPXIuY3VycmVudEF0dGFjaG1lbnRPYmplY3QsaT1yLiRtYWluQXR0YWNobWVudE9iamVjdDtyLmJpbmQoaSk7Y29uc3QgYz1KKCk7cmV0dXJuIG4uYmluZEZyYW1lYnVmZmVyKG4uRlJBTUVCVUZGRVIsYyksb24mJm9uLndpZHRoPT09aS53aWR0aCYmb24uaGVpZ2h0PT09aS5oZWlnaHR8fChvbj11ZShpLndpZHRoLGkuaGVpZ2h0KSksa2Uob24pLG4uZnJhbWVidWZmZXJUZXh0dXJlMkQobi5GUkFNRUJVRkZFUixuLkNPTE9SX0FUVEFDSE1FTlQwLG4uVEVYVFVSRV8yRCxvbi5yZXNvdXJjZSwwKSxuLmJpbmRGcmFtZWJ1ZmZlcihuLkZSQU1FQlVGRkVSLG51bGwpLG4uYmluZEZyYW1lYnVmZmVyKG4uUkVBRF9GUkFNRUJVRkZFUixEKSxuLmJpbmRGcmFtZWJ1ZmZlcihuLkRSQVdfRlJBTUVCVUZGRVIsYyksbi5lbmFibGUobi5TQ0lTU09SX1RFU1QpLG4uc2Npc3NvcihlLGkuaGVpZ2h0LXQtcyxhKzEscysxKSxuLmJsaXRGcmFtZWJ1ZmZlcigwLDAsaS53aWR0aCxpLmhlaWdodCwwLDAsaS53aWR0aCxpLmhlaWdodCxuLkNPTE9SX0JVRkZFUl9CSVQsbi5ORUFSRVNUKSxuLmRpc2FibGUobi5TQ0lTU09SX1RFU1QpLG4uYmluZEZyYW1lYnVmZmVyKG4uRlJBTUVCVUZGRVIsRCksbyYmci5iaW5kKG8pLG9ufSxsbj0oZSx0LG4sYSk9Pntjb25zdCBzPXIuY3VycmVudEF0dGFjaG1lbnRPYmplY3Qsbz1jbihlLHQsbixhKSxpPWhlKG4sYSwhMSk7ci5iaW5kKGkpLHIuc2F2ZSgpLHIuc2V0VHJhbnNmb3JtKDEsMCwwLDEsLWUsLXQpO2NvbnN0IGM9cm4oKTthbihjLG8ud2lkdGgsby5oZWlnaHQpLFV0KCksa2Uobyksc24oYyk7Y29uc3QgbD1pLnRleHR1cmU7cmV0dXJuIHIucmVzdG9yZSgpLGVlKGksITEpLHMmJnIuYmluZChzKSxsfSx1bj0oKT0+ezYxMCE9PUx0KCkmJihJdCg2MTApLG4uYmxlbmRGdW5jKG4uT05FLG4uWkVSTykpfSxobj1lPT57a2UoZSksdW4oKTtjb25zdCB0PXJuKCk7YW4odCxlLndpZHRoLGUuaGVpZ2h0KSxzbih0KSxVdCgpfSxibj0oZSx0LG4scixhLHMsbyxpLGMpPT57Y29uc3QgbD1lLnRleHR1cmVzO2xbMF09MCxsWzFdPTE7Y29uc3QgdT1lLm1lZGl1bXA7dVswXT10LHVbMV09bix1WzJdPXIsdVszXT1hLHVbNF09cyx1WzVdPW8sdVs2XT1pLHVbN109Y30sZG49KGU9ITEpPT57Y29uc3QgdD0ibSIrKGU/InkiOiJuIik7aWYoSHQuaGFzKHQpKXJldHVybiBIdC5nZXQodCk7Y29uc3Qgbj1uZXcgd3QoIiN2ZXJzaW9uIDMwMCBlc1xuXG5sYXlvdXQgKGxvY2F0aW9uID0gMCkgaW4gdmVjMiBhX3ZlcnRleDtcbnVuaWZvcm0gdmVjNCB1X2hpZ2hwWzNdO1xuXG5vdXQgdmVjMiB2X2Nvb3JkO1xuXG52b2lkIG1haW4oKSB7XG4gICAgdl9jb29yZCA9IGFfdmVydGV4O1xuXG4gICAgbWF0MyBtYXRyaXggPSBtYXQzKFxuICAgICAgICB1X2hpZ2hwWzBdLngsIHVfaGlnaHBbMF0ueSwgMC4wLFxuICAgICAgICB1X2hpZ2hwWzBdLnosIHVfaGlnaHBbMF0udywgMC4wLFxuICAgICAgICB1X2hpZ2hwWzFdLngsIHVfaGlnaHBbMV0ueSwgMS4wXG4gICAgKTtcblxuICAgIHZlYzIgc2l6ZSAgICAgPSB1X2hpZ2hwWzFdLnp3O1xuICAgIHZlYzIgdmlld3BvcnQgPSB2ZWMyKHVfaGlnaHBbMl0ueCwgdV9oaWdocFsyXS55KTtcblxuICAgIHZlYzIgcG9zaXRpb24gPSB2ZWMyKGFfdmVydGV4LngsIDEuMCAtIGFfdmVydGV4LnkpO1xuICAgIHBvc2l0aW9uID0gcG9zaXRpb24gKiBzaXplO1xuICAgIHBvc2l0aW9uID0gKG1hdHJpeCAqIHZlYzMocG9zaXRpb24sIDEuMCkpLnh5O1xuICAgIHBvc2l0aW9uIC89IHZpZXdwb3J0O1xuXG4gICAgcG9zaXRpb24gPSBwb3NpdGlvbiAqIDIuMCAtIDEuMDtcbiAgICBnbF9Qb3NpdGlvbiA9IHZlYzQocG9zaXRpb24ueCwgLXBvc2l0aW9uLnksIDAuMCwgMS4wKTtcbn0iLFl0KGUpKTtyZXR1cm4gSHQuc2V0KHQsbiksbn0sZm49KGUsdCxuKT0+e2NvbnN0IGE9ZS5oaWdocCxzPXIuJG1hdHJpeDthWzBdPXNbMF0sYVsxXT1zWzFdLGFbMl09c1szXSxhWzNdPXNbNF0sYVs0XT1zWzZdLGFbNV09c1s3XSxhWzZdPXQsYVs3XT1uLGFbOF09eCgpLGFbOV09RSgpfTtsZXQgbW49MDtjb25zdCB2bj1lPT57ZS51c2VQcm9ncmFtKCksZS5iaW5kVW5pZm9ybSgpLHZ0KHh0KSxuLmJpbmRCdWZmZXIobi5BUlJBWV9CVUZGRVIsZ3QpLHF0LmJ1ZmZlci5sZW5ndGg+bW4mJihtbj1xdC5idWZmZXIubGVuZ3RoLG4uYnVmZmVyRGF0YShuLkFSUkFZX0JVRkZFUiw0Km1uLG4uRFlOQU1JQ19EUkFXKSksbi5idWZmZXJTdWJEYXRhKG4uQVJSQVlfQlVGRkVSLDAscXQuYnVmZmVyLnN1YmFycmF5KDAscXQub2Zmc2V0KSksbi5kcmF3QXJyYXlzSW5zdGFuY2VkKG4uVFJJQU5HTEVTLDAsNixlLmNvdW50KX0sX249KCk9Pns2MDMhPT1MdCgpJiYoSXQoNjAzKSxuLmJsZW5kRnVuYyhuLlpFUk8sbi5PTkVfTUlOVVNfU1JDX0FMUEhBKSl9LHBuPWU9Pntzd2l0Y2goZSl7Y2FzZSJhZGQiOjYxMSE9PUx0KCkmJihJdCg2MTEpLG4uYmxlbmRGdW5jKG4uT05FLG4uT05FKSk7YnJlYWs7Y2FzZSJzY3JlZW4iOjY0MSE9PUx0KCkmJihJdCg2NDEpLG4uYmxlbmRGdW5jKG4uT05FX01JTlVTX0RTVF9DT0xPUixuLk9ORSkpO2JyZWFrO2Nhc2UiYWxwaGEiOjYwNiE9PUx0KCkmJihJdCg2MDYpLG4uYmxlbmRGdW5jKG4uWkVSTyxuLlNSQ19BTFBIQSkpO2JyZWFrO2Nhc2UiZXJhc2UiOl9uKCk7YnJlYWs7Y2FzZSJjb3B5Ijp1bigpO2JyZWFrO2RlZmF1bHQ6VXQoKX19LGduPWU9Pnt2YXIgdDsoZT0+e2d0PWUuY3JlYXRlQnVmZmVyKCl9KShlKSx0PSgoKT0+e2NvbnN0IGU9ZnQoKTtyZXR1cm4gdnQoZSksbi5iaW5kQnVmZmVyKG4uQVJSQVlfQlVGRkVSLGUudmVydGV4QnVmZmVyKSxuLmJ1ZmZlckRhdGEobi5BUlJBWV9CVUZGRVIsbmV3IEZsb2F0MzJBcnJheShbMCwwLDEsMCwxLDEsMCwwLDEsMSwwLDFdKSxuLlNUQVRJQ19EUkFXKSxuLmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KDApLG4udmVydGV4QXR0cmliUG9pbnRlcigwLDIsbi5GTE9BVCwhMSwwLDApLG4uYmluZEJ1ZmZlcihuLkFSUkFZX0JVRkZFUixndCksbi5idWZmZXJEYXRhKG4uQVJSQVlfQlVGRkVSLHF0LmJ1ZmZlci5sZW5ndGgsbi5EWU5BTUlDX0RSQVcpLG4uZW5hYmxlVmVydGV4QXR0cmliQXJyYXkoMSksbi52ZXJ0ZXhBdHRyaWJQb2ludGVyKDEsNCxuLkZMT0FULCExLDg4LDApLG4udmVydGV4QXR0cmliRGl2aXNvcigxLDEpLG4uZW5hYmxlVmVydGV4QXR0cmliQXJyYXkoMiksbi52ZXJ0ZXhBdHRyaWJQb2ludGVyKDIsNCxuLkZMT0FULCExLDg4LDE2KSxuLnZlcnRleEF0dHJpYkRpdmlzb3IoMiwxKSxuLmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KDMpLG4udmVydGV4QXR0cmliUG9pbnRlcigzLDIsbi5GTE9BVCwhMSw4OCwzMiksbi52ZXJ0ZXhBdHRyaWJEaXZpc29yKDMsMSksbi5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheSg0KSxuLnZlcnRleEF0dHJpYlBvaW50ZXIoNCw0LG4uRkxPQVQsITEsODgsNDApLG4udmVydGV4QXR0cmliRGl2aXNvcig0LDEpLG4uZW5hYmxlVmVydGV4QXR0cmliQXJyYXkoNSksbi52ZXJ0ZXhBdHRyaWJQb2ludGVyKDUsNCxuLkZMT0FULCExLDg4LDU2KSxuLnZlcnRleEF0dHJpYkRpdmlzb3IoNSwxKSxuLmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KDYpLG4udmVydGV4QXR0cmliUG9pbnRlcig2LDQsbi5GTE9BVCwhMSw4OCw3Miksbi52ZXJ0ZXhBdHRyaWJEaXZpc29yKDYsMSksZX0pKCkseHQ9dH0seG49KGUsdCxyLGE9ITEpPT57Y29uc3Qgcz11ZShlLHQsYSk7cmV0dXJuIG4udGV4U3ViSW1hZ2UyRChuLlRFWFRVUkVfMkQsMCwwLDAsZSx0LG4uUkdCQSxuLlVOU0lHTkVEX0JZVEUsciksc30sRW49KGUsdCk9Pntjb25zdCByPSgoZSx0LHIsYT0hMSk9Pntjb25zdCBzPXVlKGUsdCxhKTtyZXR1cm4gbi50ZXhTdWJJbWFnZTJEKG4uVEVYVFVSRV8yRCwwLDAsMCxuLlJHQkEsbi5VTlNJR05FRF9CWVRFLHIpLHN9KShlLncsZS5oLHQpLGE9cm4oKTthbihhLGUudyxlLmgpLFV0KCksc24oYSksTChyKX0seW49W10sQW49bmV3IE1hcCxUbj0oZSx0LG4pPT57a2UoZSwhMCk7Y29uc3Qgcj1NYXRoLmNlaWwoLjUqbiksYT0xLShyLS41Km4pLHM9MStuLG89KGU9Pntjb25zdCB0PWBiJHtlfWA7aWYoQW4uaGFzKHQpKXJldHVybiBBbi5nZXQodCk7Y29uc3Qgbj1uZXcgd3QoIiN2ZXJzaW9uIDMwMCBlc1xuXG5sYXlvdXQgKGxvY2F0aW9uID0gMCkgaW4gdmVjMiBhX3ZlcnRleDtcblxub3V0IHZlYzIgdl9jb29yZDtcblxudm9pZCBtYWluKCkge1xuICAgIHZfY29vcmQgPSBhX3ZlcnRleDtcblxuICAgIHZlYzIgcG9zaXRpb24gPSBhX3ZlcnRleCAqIDIuMCAtIDEuMDtcbiAgICBnbF9Qb3NpdGlvbiA9IHZlYzQocG9zaXRpb24sIDAuMCwgMS4wKTtcbn0iLChlPT57Y29uc3QgdD1lLnRvRml4ZWQoMSk7cmV0dXJuYCN2ZXJzaW9uIDMwMCBlc1xucHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XG5cbnVuaWZvcm0gc2FtcGxlcjJEIHVfdGV4dHVyZTtcbnVuaWZvcm0gdmVjNCB1X21lZGl1bXA7XG5cbmluIHZlYzIgdl9jb29yZDtcbm91dCB2ZWM0IG9fY29sb3I7XG5cbnZvaWQgbWFpbigpIHtcbiAgICB2ZWMyICBvZmZzZXQgICA9IHVfbWVkaXVtcC54eTtcbiAgICBmbG9hdCBmcmFjdGlvbiA9IHVfbWVkaXVtcC56O1xuICAgIGZsb2F0IHNhbXBsZXMgID0gdV9tZWRpdW1wLnc7XG4gICAgXG4gICAgdmVjNCBjb2xvciA9IHRleHR1cmUodV90ZXh0dXJlLCB2X2Nvb3JkKTtcblxuICAgIGZvciAoZmxvYXQgaSA9IDEuMDsgaSA8ICR7dH07IGkgKz0gMS4wKSB7XG4gICAgICAgIGNvbG9yICs9IHRleHR1cmUodV90ZXh0dXJlLCB2X2Nvb3JkICsgb2Zmc2V0ICogaSk7XG4gICAgICAgIGNvbG9yICs9IHRleHR1cmUodV90ZXh0dXJlLCB2X2Nvb3JkIC0gb2Zmc2V0ICogaSk7XG4gICAgfVxuICAgIGNvbG9yICs9IHRleHR1cmUodV90ZXh0dXJlLCB2X2Nvb3JkICsgb2Zmc2V0ICogJHt0fSkgKiBmcmFjdGlvbjtcbiAgICBjb2xvciArPSB0ZXh0dXJlKHVfdGV4dHVyZSwgdl9jb29yZCAtIG9mZnNldCAqICR7dH0pICogZnJhY3Rpb247XG4gICAgY29sb3IgLz0gc2FtcGxlcztcblxuICAgIG9fY29sb3IgPSBjb2xvcjtcbn1gfSkoZSkpO3JldHVybiBBbi5zZXQodCxuKSxufSkocik7KChlLHQsbixyLGEscyk9Pntjb25zdCBvPWUubWVkaXVtcDtyPyhvWzBdPTEvdCxvWzFdPTApOihvWzBdPTAsb1sxXT0xL24pLG9bMl09YSxvWzNdPXN9KShvLGUud2lkdGgsZS5oZWlnaHQsdCxhLHMpLHNuKG8pfSxSbj17eDowLHk6MH0sTW49KGUsdCxuKT0+KGU+PjE2KSoobj90OjEpLzI1NSx3bj0oZSx0LG4pPT4oZT4+OCYyNTUpKihuP3Q6MSkvMjU1LEZuPShlLHQsbik9PigyNTUmZSkqKG4/dDoxKS8yNTUsJG49Wy41LDEuMDUsMS40LDEuNTUsMS43NSwxLjksMiwyLjE1LDIuMiwyLjMsMi41LDMsMywzLjUsMy41XSxPbj0oZSx0LG49NCxhPTQscz0xLG89ITApPT57Y29uc3QgaT1yLmN1cnJlbnRBdHRhY2htZW50T2JqZWN0LGM9TWF0aC5zcXJ0KHRbMF0qdFswXSt0WzFdKnRbMV0pLGw9TWF0aC5zcXJ0KHRbMl0qdFsyXSt0WzNdKnRbM10pLHU9QSgpLGg9biooYy91KSxiPWEqKGwvdSksZD0kbltzLTFdLGY9TWF0aC5yb3VuZChoKmQpLG09TWF0aC5yb3VuZChiKmQpO1JuLngrPWYsUm4ueSs9bTtjb25zdCB2PWUud2lkdGgrMipmLF89ZS5oZWlnaHQrMiptO2xldCBwPTEsZz0xO2g+MTI4P3A9LjA2MjU6aD42ND9wPS4xMjU6aD4zMj9wPS4yNTpoPjE2JiYocD0uNSksYj4xMjg/Zz0uMDYyNTpiPjY0P2c9LjEyNTpiPjMyP2c9LjI1OmI+MTYmJihnPS41KTtjb25zdCB4PU1hdGguY2VpbCh2KnApLEU9TWF0aC5jZWlsKF8qZykseT1oZSh4LEUsITEpLFQ9W3ksaGUoeCxFLCExKV07ci5iaW5kKHkpLHIucmVzZXQoKSxyLnNldFRyYW5zZm9ybShwLDAsMCxnLGYqcCxtKmcpLGtlKGUpO2NvbnN0IFI9ZG4oKTtmbihSLGUud2lkdGgsZS5oZWlnaHQpLHNuKFIpLG8mJkwoZSk7Y29uc3QgTT1oKnAsdz1iKmc7bGV0IEY9MCwkPXkudGV4dHVyZTtrZSgkLCEwKSx1bigpO2ZvcihsZXQgZT0wO2U8czsrK2Upe2lmKG4+MCl7Rj0oRisxKSUyO2NvbnN0IGU9VFtGXTtyLmJpbmQoZSksVG4oJCwhMCxNKSwkPWUudGV4dHVyZX1pZihhPjApe0Y9KEYrMSklMjtjb25zdCBlPVRbRl07ci5iaW5kKGUpLFRuKCQsITEsdyksJD1lLnRleHR1cmV9fWlmKFV0KCksMSE9PXB8fDEhPT1nKXtjb25zdCBlPWhlKHYsXywhMSk7ci5iaW5kKGUpLHIuc2V0VHJhbnNmb3JtKDEvcCwwLDAsMS9nLDAsMCksa2UoJCwhMCksZm4oUiwkLndpZHRoLCQuaGVpZ2h0KSxzbihSKSwkPWUudGV4dHVyZSxlZShUWzBdKSxlZShUWzFdKSxlZShlLCExKX1lbHNlIEY9KEYrMSklMixlZShUW0ZdKSxGPShGKzEpJTIsZWUoVFtGXSwhMSk7cmV0dXJuIGkmJnIuYmluZChpKSwkfSxTbj0oZSx0KT0+e2NvbnN0IG49ci5jdXJyZW50QXR0YWNobWVudE9iamVjdCxhPWhlKGUud2lkdGgsZS5oZWlnaHQsITEpO3IuYmluZChhKSxyLnJlc2V0KCksci5zZXRUcmFuc2Zvcm0oMSwwLDAsMSwwLDApLGtlKGUpLFV0KCk7Y29uc3Qgcz0oKCk9PntpZihBbi5oYXMoIm0iKSlyZXR1cm4gQW4uZ2V0KCJtIik7Y29uc3QgZT1uZXcgd3QoIiN2ZXJzaW9uIDMwMCBlc1xuXG5sYXlvdXQgKGxvY2F0aW9uID0gMCkgaW4gdmVjMiBhX3ZlcnRleDtcblxub3V0IHZlYzIgdl9jb29yZDtcblxudm9pZCBtYWluKCkge1xuICAgIHZfY29vcmQgPSBhX3ZlcnRleDtcblxuICAgIHZlYzIgcG9zaXRpb24gPSBhX3ZlcnRleCAqIDIuMCAtIDEuMDtcbiAgICBnbF9Qb3NpdGlvbiA9IHZlYzQocG9zaXRpb24sIDAuMCwgMS4wKTtcbn0iLCIjdmVyc2lvbiAzMDAgZXNcbnByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xuXG51bmlmb3JtIHNhbXBsZXIyRCB1X3RleHR1cmU7XG51bmlmb3JtIHZlYzQgdV9tZWRpdW1wWzVdO1xuXG5pbiB2ZWMyIHZfY29vcmQ7XG5vdXQgdmVjNCBvX2NvbG9yO1xuXG52b2lkIG1haW4oKSB7XG4gICAgbWF0NCBtdWwgPSBtYXQ0KHVfbWVkaXVtcFswXSwgdV9tZWRpdW1wWzFdLCB1X21lZGl1bXBbMl0sIHVfbWVkaXVtcFszXSk7XG4gICAgdmVjNCBhZGQgPSB1X21lZGl1bXBbNF07XG4gICAgXG4gICAgdmVjNCBjb2xvciA9IHRleHR1cmUodV90ZXh0dXJlLCB2X2Nvb3JkKTtcblxuICAgIGNvbG9yLnJnYiAvPSBtYXgoMC4wMDAxLCBjb2xvci5hKTtcbiAgICBjb2xvciA9IGNsYW1wKGNvbG9yICogbXVsICsgYWRkLCAwLjAsIDEuMCk7XG4gICAgY29sb3IucmdiICo9IGNvbG9yLmE7XG5cbiAgICBvX2NvbG9yID0gY29sb3I7XG59Iik7cmV0dXJuIEFuLnNldCgibSIsZSksZX0pKCk7KChlLHQpPT57Y29uc3Qgbj1lLm1lZGl1bXA7blswXT10WzBdLG5bMV09dFsxXSxuWzJdPXRbMl0sblszXT10WzNdLG5bNF09dFs1XSxuWzVdPXRbNl0sbls2XT10WzddLG5bN109dFs4XSxuWzhdPXRbMTBdLG5bOV09dFsxMV0sblsxMF09dFsxMl0sblsxMV09dFsxM10sblsxMl09dFsxNV0sblsxM109dFsxNl0sblsxNF09dFsxN10sblsxNV09dFsxOF0sblsxNl09dFs0XS8yNTUsblsxN109dFs5XS8yNTUsblsxOF09dFsxNF0vMjU1LG5bMTldPXRbMTldLzI1NX0pKHMsdCksc24ocyk7Y29uc3Qgbz1hLnRleHR1cmU7cmV0dXJuIEwoZSksZWUoYSwhMSksbiYmci5iaW5kKG4pLG99LGtuPShlLHQsbixyLGEscyk9Pntjb25zdCBvPWU/ImJsdXIuYSA9IDEuMCAtIGJsdXIuYTsiOiIiLGk9bj8oYz1zLGBcbiAgICBmbG9hdCBzdHJlbmd0aCA9IHVfbWVkaXVtcFske01hdGguZmxvb3IoYy80KX1dWyR7YyU0fV07XG4gICAgYmx1ci5hID0gY2xhbXAoYmx1ci5hICogc3RyZW5ndGgsIDAuMCwgMS4wKTtcbmApOiIiO3ZhciBjO2NvbnN0IGw9cj8oZT0+YFxuICAgIGJsdXIgPSB0ZXh0dXJlKHVfdGV4dHVyZXNbJHtlPzI6MX1dLCB2ZWMyKGJsdXIuYSwgMC41KSk7XG5gKSh0KTooZT0+YFxuICAgIHZlYzQgY29sb3IgPSB1X21lZGl1bXBbJHtlfV07XG4gICAgYmx1ciA9IGNvbG9yICogYmx1ci5hO1xuYCkoYSk7cmV0dXJuYFxuICAgICR7b31cbiAgICAke2l9XG4gICAgJHtsfVxuYH0sQ249KGUsdCxuLHIsYSxzKT0+e2NvbnN0IG89dD8iXG4gICAgdmVjMiBwcSA9ICgxLjAgLSB2X2Nvb3JkKSAqIGJsdXJfc2NhbGUgLSBibHVyX29mZnNldDtcbiAgICB2ZWM0IGJsdXIyID0gbWl4KHZlYzQoMC4wKSwgdGV4dHVyZSh1X3RleHR1cmVzWzBdLCBwcSksIGlzSW5zaWRlKHBxKSk7XG4iOiJcbiAgICB2ZWM0IGJsdXIyID0gdGV4dHVyZSh1X3RleHR1cmVzWzBdLCAxLjAgLSB2X2Nvb3JkKTtcbiIsaT1uPyhjPXMsYFxuICAgIGZsb2F0IHN0cmVuZ3RoID0gdV9tZWRpdW1wWyR7TWF0aC5mbG9vcihjLzQpfV1bJHtjJTR9XTtcbiAgICBoaWdobGlnaHRfYWxwaGEgKj0gc3RyZW5ndGg7XG4gICAgc2hhZG93X2FscGhhICAgICo9IHN0cmVuZ3RoO1xuYCk6IiI7dmFyIGM7Y29uc3QgbD1yPyhlPT5gXG4gICAgYmx1ciA9IHRleHR1cmUodV90ZXh0dXJlc1ske2U/MjoxfV0sIHZlYzIoXG4gICAgICAgIDAuNTAxOTYwNzg0MzEzNzI1NSAtIDAuNTAxOTYwNzg0MzEzNzI1NSAqIHNoYWRvd19hbHBoYSArIDAuNDk4MDM5MjE1Njg2Mjc0NSAqIGhpZ2hsaWdodF9hbHBoYSxcbiAgICAgICAgMC41XG4gICAgKSk7XG5gKShlKTooZT0+YFxuICAgIHZlYzQgaGlnaGxpZ2h0X2NvbG9yID0gdV9tZWRpdW1wWyR7ZX1dO1xuICAgIHZlYzQgc2hhZG93X2NvbG9yICAgID0gdV9tZWRpdW1wWyR7ZSsxfV07XG4gICAgYmx1ciA9IGhpZ2hsaWdodF9jb2xvciAqIGhpZ2hsaWdodF9hbHBoYSArIHNoYWRvd19jb2xvciAqIHNoYWRvd19hbHBoYTtcbmApKGEpO3JldHVybmBcbiAgICAke299XG4gICAgZmxvYXQgaGlnaGxpZ2h0X2FscGhhID0gYmx1ci5hIC0gYmx1cjIuYTtcbiAgICBmbG9hdCBzaGFkb3dfYWxwaGEgICAgPSBibHVyMi5hIC0gYmx1ci5hO1xuICAgICR7aX1cbiAgICBoaWdobGlnaHRfYWxwaGEgPSBjbGFtcChoaWdobGlnaHRfYWxwaGEsIDAuMCwgMS4wKTtcbiAgICBzaGFkb3dfYWxwaGEgICAgPSBjbGFtcChzaGFkb3dfYWxwaGEsIDAuMCwgMS4wKTtcbiAgICAke2x9XG5gfSxQbj0oZSx0LG4scixhLHMsbyk9Pntjb25zdCBpPWBmJHtlPyJ5IjoibiJ9JHt0PyJ5IjoibiJ9JHtuPyJ5IjoibiJ9JHtyfSR7YT8ieSI6Im4ifSR7cz8ieSI6Im4ifWA7aWYoQW4uaGFzKGkpKXJldHVybiBBbi5nZXQoaSk7bGV0IGM9MTtlJiZjKyssbyYmYysrO2xldCBsPShlPzQ6MCkrKHQ/NDowKSsocz8xOjApO298fChsKz1uPzQ6OCksbD1NYXRoLmNlaWwobC80KTtjb25zdCB1PW5ldyB3dCgiI3ZlcnNpb24gMzAwIGVzXG5cbmxheW91dCAobG9jYXRpb24gPSAwKSBpbiB2ZWMyIGFfdmVydGV4O1xuXG5vdXQgdmVjMiB2X2Nvb3JkO1xuXG52b2lkIG1haW4oKSB7XG4gICAgdl9jb29yZCA9IGFfdmVydGV4O1xuXG4gICAgdmVjMiBwb3NpdGlvbiA9IGFfdmVydGV4ICogMi4wIC0gMS4wO1xuICAgIGdsX1Bvc2l0aW9uID0gdmVjNChwb3NpdGlvbiwgMC4wLCAxLjApO1xufSIsKChlLHQsbixyLGEscyxvLGksYyk9PntsZXQgbD0wO2NvbnN0IHU9bj8oZT0+YFxuICAgIHZlYzIgYmFzZV9zY2FsZSAgPSB1X21lZGl1bXBbJHtlfV0ueHk7XG4gICAgdmVjMiBiYXNlX29mZnNldCA9IHVfbWVkaXVtcFske2V9XS56dztcblxuICAgIHZlYzIgdXYgPSB2X2Nvb3JkICogYmFzZV9zY2FsZSAtIGJhc2Vfb2Zmc2V0O1xuICAgIHZlYzQgYmFzZSA9IG1peCh2ZWM0KDAuMCksIHRleHR1cmUodV90ZXh0dXJlc1sxXSwgdXYpLCBpc0luc2lkZSh1dikpO1xuYCkobCsrKToiIixoPXI/KGU9PmBcbiAgICB2ZWMyIGJsdXJfc2NhbGUgID0gdV9tZWRpdW1wWyR7ZX1dLnh5O1xuICAgIHZlYzIgYmx1cl9vZmZzZXQgPSB1X21lZGl1bXBbJHtlfV0uenc7XG5cbiAgICB2ZWMyIHN0ID0gdl9jb29yZCAqIGJsdXJfc2NhbGUgLSBibHVyX29mZnNldDtcbiAgICB2ZWM0IGJsdXIgPSBtaXgodmVjNCgwLjApLCB0ZXh0dXJlKHVfdGV4dHVyZXNbMF0sIHN0KSwgaXNJbnNpZGUoc3QpKTtcbmApKGwrKyk6IlxuICAgIHZlYzQgYmx1ciA9IHRleHR1cmUodV90ZXh0dXJlc1swXSwgdl9jb29yZCk7XG4iLGI9ImlubmVyIj09PXMsZD1sO2xldCBmLG0sdj00Kmw7c3dpdGNoKGM/Zj1hP2tuKCExLG4saSxjLGQsdik6Q24obixyLGksYyxkLHYpOmE/KHYrPTQsZj1rbihiLG4saSxjLGQsdikpOih2Kz04LGY9Q24obixyLGksYyxkLHYpKSxzKXtjYXNlIm91dGVyIjptPW8/ImJsdXIgLSBibHVyICogYmFzZS5hIjoiYmFzZSArIGJsdXIgLSBibHVyICogYmFzZS5hIjticmVhaztjYXNlImZ1bGwiOm09bz8iYmx1ciI6ImJhc2UgLSBiYXNlICogYmx1ci5hICsgYmx1ciI7YnJlYWs7ZGVmYXVsdDptPSJibHVyIn1yZXR1cm5gI3ZlcnNpb24gMzAwIGVzXG5wcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcblxudW5pZm9ybSBzYW1wbGVyMkQgdV90ZXh0dXJlc1ske2V9XTtcbnVuaWZvcm0gdmVjNCB1X21lZGl1bXBbJHt0fV07XG5cbmluIHZlYzIgdl9jb29yZDtcbm91dCB2ZWM0IG9fY29sb3I7XG5cblxuZmxvYXQgaXNJbnNpZGUoaW4gdmVjMiB1dikge1xuICAgIHJldHVybiBzdGVwKDQuMCwgZG90KHN0ZXAodmVjNCgwLjAsIHV2LngsIDAuMCwgdXYueSksIHZlYzQodXYueCwgMS4wLCB1di55LCAxLjApKSwgdmVjNCgxLjApKSk7XG59XG5cbnZvaWQgbWFpbigpIHtcbiAgICAke3V9XG4gICAgJHtofVxuICAgICR7Zn1cbiAgICBvX2NvbG9yID0gJHttfTtcbn1gfSkoYyxsLGUsdCxuLHIsYSxzLG8pKTtyZXR1cm4gQW4uc2V0KGksdSksdX0sQm49bmV3IE1hcCxJbj0oZSx0KT0+e2NvbnN0IG49YGwkeygiMDAiK2UpLnNsaWNlKC0zKX0ke3Q/InkiOiJuIn1gO2lmKEJuLmhhcyhuKSlyZXR1cm4gQm4uZ2V0KG4pO2NvbnN0IHI9TWF0aC5jZWlsKDUqZS80KSxhPW5ldyB3dCgiI3ZlcnNpb24gMzAwIGVzXG5cbmxheW91dCAobG9jYXRpb24gPSAwKSBpbiB2ZWMyIGFfdmVydGV4O1xuXG5vdXQgdmVjMiB2X2Nvb3JkO1xuXG52b2lkIG1haW4oKSB7XG4gICAgdl9jb29yZCA9IGFfdmVydGV4O1xuXG4gICAgdmVjMiBwb3NpdGlvbiA9IGFfdmVydGV4ICogMi4wIC0gMS4wO1xuICAgIGdsX1Bvc2l0aW9uID0gdmVjNChwb3NpdGlvbiwgMC4wLCAxLjApO1xufSIsKChlLHQsbik9PntsZXQgcj0iIjtmb3IobGV0IGU9MTtlPHQ7KytlKXtjb25zdCBuPWUtMSxhPWUscz1gdV9tZWRpdW1wWyR7dCtNYXRoLmZsb29yKG4vNCl9XVske24lNH1dYCxvPWB1X21lZGl1bXBbJHt0K01hdGguZmxvb3IoYS80KX1dWyR7YSU0fV1gO3IrPWBcbiAgICBpZiAodCA8PSAke299KSB7XG4gICAgICAgIHJldHVybiBtaXgodV9tZWRpdW1wWyR7bn1dLCB1X21lZGl1bXBbJHthfV0sICh0IC0gJHtzfSkgLyAoJHtvfSAtICR7c30pKTtcbiAgICB9XG5gfXJldHVybmAjdmVyc2lvbiAzMDAgZXNcbnByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xuXG51bmlmb3JtIHZlYzQgdV9tZWRpdW1wWyR7ZX1dO1xuXG5pbiB2ZWMyIHZfY29vcmQ7XG5vdXQgdmVjNCBvX2NvbG9yO1xuXG52ZWM0IGdldEdyYWRpZW50Q29sb3IoaW4gZmxvYXQgdCkge1xuICAgIGlmICh0IDw9IHVfbWVkaXVtcFske3R9XVswXSkge1xuICAgICAgICByZXR1cm4gdV9tZWRpdW1wWzBdO1xuICAgIH1cbiAgICAke3J9XG4gICAgcmV0dXJuIHVfbWVkaXVtcFske3QtMX1dO1xufVxuXG52b2lkIG1haW4oKSB7XG4gICAgdmVjNCBjb2xvciA9IGdldEdyYWRpZW50Q29sb3Iodl9jb29yZC54KTtcbiAgICAke24/ImNvbG9yID0gcG93KGNvbG9yLCB2ZWM0KDAuNDU0NTQ1NDUpKTsiOiIifVxuICAgIGNvbG9yLnJnYiAqPSBjb2xvci5hO1xuXG4gICAgb19jb2xvciA9IGNvbG9yO1xufWB9KShyLGUsdCkpO3JldHVybiBCbi5zZXQobixhKSxhfSxMbj0oZSx0LG4scixhLHMpPT57Y29uc3Qgbz1lLm1lZGl1bXA7bGV0IGk9MDtmb3IobGV0IGU9YTtlPHM7ZSsrKXtjb25zdCB0PW5bZV07b1tpKytdPSh0Pj4xNikvMjU1LG9baSsrXT0odD4+OCYyNTUpLzI1NSxvW2krK109KDI1NSZ0KS8yNTUsb1tpKytdPXJbZV19Zm9yKGxldCBlPWE7ZTxzO2UrKylvW2krK109dFtlXS8yNTV9O2xldCBVbjtjb25zdCBObj0oZSx0KT0+KFVuP3B0WzBdPT09ZSYmcHRbNF09PT10fHwocHRbMF09ZSxwdFsyXT1lLHB0WzRdPXQscHRbNl09dCxuLmJ1ZmZlclN1YkRhdGEobi5BUlJBWV9CVUZGRVIsMCxwdCkpOlVuPSgoZSx0KT0+e2NvbnN0IHI9ZnQoKTtyZXR1cm4gdnQociksbi5iaW5kQnVmZmVyKG4uQVJSQVlfQlVGRkVSLHIudmVydGV4QnVmZmVyKSxwdFswXT1lLHB0WzJdPWUscHRbNF09dCxwdFs2XT10LG4uYnVmZmVyRGF0YShuLkFSUkFZX0JVRkZFUixwdCxuLlNUQVRJQ19EUkFXKSxuLmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KDApLG4udmVydGV4QXR0cmliUG9pbnRlcigwLDIsbi5GTE9BVCwhMSwwLDApLHJ9KShlLHQpLFVuKSxEbj0oZSx0LHIpPT57ZS51c2VQcm9ncmFtKCksZS5iaW5kVW5pZm9ybSgpLHZ0KE5uKHQscikpLG4uZHJhd0FycmF5cyhuLlRSSUFOR0xFX1NUUklQLDAsNCl9O2xldCBqbj1udWxsO2NvbnN0IHpuPSgpPT4oam58fChqbj1oZSg1MTIsMSwhMSkpLGpuKTtsZXQgWG49MDtjb25zdCBXbj0oKT0+WG4sR249bmV3IEZsb2F0MzJBcnJheSgyNTYpLFZuPW5ldyBGbG9hdDMyQXJyYXkoMjU2KTtmb3IobGV0IGU9MDtlPDI1NjsrK2Upe2NvbnN0IHQ9ZS8yNTU7R25bZV09TWF0aC5wb3codCwyLjIzMzMzMzMzKSxWbltlXT10fWNvbnN0IFluPShlLHQsYSxzLG8saSxjLGwsdSxoLGIsZCxmLG0sdixfLHA9bnVsbCxnPW51bGwseD1udWxsLEU9MCx5PTAsQT0wLFQ9MCxSPTAsTT0wLHc9MCxGPTApPT57Y29uc3QgJD1yLmN1cnJlbnRBdHRhY2htZW50T2JqZWN0LE89aGUoYSxzLCExKTtyLmJpbmQoTyk7Y29uc3QgUz0iaW5uZXIiPT09bSxrPW51bGwhPT1wJiZudWxsIT09ZyYmbnVsbCE9PXg7bGV0IEM9bnVsbDtpZihrJiYoQz0oKGUsdCxuKT0+e2NvbnN0IGE9ci5jdXJyZW50QXR0YWNobWVudE9iamVjdCxzPXpuKCk7ci5iaW5kKHMpO2NvbnN0IG89ZS5sZW5ndGg7dW4oKTtjb25zdCBpPVduKCk7Zm9yKGxldCByPTA7cjxvO3IrPWktMSl7Y29uc3QgYT1NYXRoLm1pbihyK2ksbykscz1JbihhLXIsITEpO0xuKHMsZSx0LG4scixhKSxEbihzLGVbcl0vMjU1LGVbYS0xXS8yNTUpfXJldHVybiBVdCgpLGEmJnIuYmluZChhKSxzLnRleHR1cmV9KShwLGcseCkpLFMpe3IucmVzZXQoKSxyLnNldFRyYW5zZm9ybSgxLDAsMCwxLDAsMCksa2UoZSwhMCk7Y29uc3QgYT1ybigpO2FuKGEsZS53aWR0aCxlLmhlaWdodCksc24oYSksayYmQz8oKGUsdCxyPSExKT0+e1NlKDIsbi5URVhUVVJFMix0LHIpLFNlKDEsbi5URVhUVVJFMSxudWxsKSxTZSgwLG4uVEVYVFVSRTAsZSxyKX0pKHQsQywhMCk6a2UodCwhMCl9ZWxzZSBrJiZDPygoZSx0LHIsYT0hMSk9PntTZSgyLG4uVEVYVFVSRTIscixhKSxTZSgxLG4uVEVYVFVSRTEsdCxhKSxTZSgwLG4uVEVYVFVSRTAsZSxhKX0pKHQsZSxDLCEwKTpubih0LGUsITApO2NvbnN0IFA9IShTfHwiZnVsbCI9PT1tJiZ2KSxCPSEoYT09PXUmJnM9PT1oJiYwPT09YiYmMD09PWQpLEk9ISgxPT09Xyk7Uz92PzY3MCE9PUx0KCkmJihJdCg2NzApLG4uYmxlbmRGdW5jKG4uRFNUX0FMUEhBLG4uWkVSTykpOjY3MyE9PUx0KCkmJihJdCg2NzMpLG4uYmxlbmRGdW5jKG4uRFNUX0FMUEhBLG4uT05FX01JTlVTX1NSQ19BTFBIQSkpOnVuKCk7Y29uc3QgTD1QbihQLEIsZixtLHYsSSxrKTsoKGUsdCxuLHIsYSxzLG8saSxjLGwsdSxoLGIsZCxmLG0sdixfLHAsZyx4LEUseSxBLFQpPT57bGV0IFI7RT8oUj1lLnRleHR1cmVzLFJbMF09MCxSWzFdPTEsVCYmKFJbMl09MikpOlQmJihSPWUudGV4dHVyZXMsUlswXT0wLFJbMV09Mik7Y29uc3QgTT1lLm1lZGl1bXA7bGV0IHc9MDtFJiYoTVt3KytdPXQvcixNW3crK109bi9hLE1bdysrXT1zL3IsTVt3KytdPShuLWEtbykvYSkseSYmKE1bdysrXT10L2ksTVt3KytdPW4vYyxNW3crK109bC9pLE1bdysrXT0obi1jLXUpL2MpLFR8fChoPyhNW3crK109ZCxNW3crK109ZixNW3crK109bSxNW3crK109dik6KE1bdysrXT1kLE1bdysrXT1mLE1bdysrXT1tLE1bdysrXT12LE1bdysrXT1fLE1bdysrXT1wLE1bdysrXT1nLE1bdysrXT14KSksQSYmKE1bd109Yil9KShMLGEscyxvLGksYyxsLHUsaCxiLGQsZixfLEUseSxBLFQsUixNLHcsRixQLEIsSSxrKSxzbihMKTtjb25zdCBVPU8udGV4dHVyZTtyZXR1cm4gZWUoTywhMSksVXQoKSwkJiZyLmJpbmQoJCksVX0scW49KGUsdCxuPTAsYT0xLHM9NCxvPTQsaT0xLGM9MSxsPSExLHU9ITEpPT57Y29uc3QgaD1yLmN1cnJlbnRBdHRhY2htZW50T2JqZWN0LGI9ZS53aWR0aCxkPWUuaGVpZ2h0LGY9Um4ueCxtPVJuLnksdj1PbihlLHQscyxvLGMsITEpLF89di53aWR0aCxwPXYuaGVpZ2h0LGc9Um4ueC1mLHg9Um4ueS1tLEU9WW4oZSx2LGw/YjpfLGw/ZDpwLGIsZCxsPzA6ZyxsPzA6eCxfLHAsbD8tZzowLGw/LXg6MCwhMCxsPyJpbm5lciI6Im91dGVyIix1LGksbnVsbCxudWxsLG51bGwsTW4obixhLCEwKSx3bihuLGEsITApLEZuKG4sYSwhMCksYSwwLDAsMCwwKTtyZXR1cm4gTChlKSxMKHYpLGgmJnIuYmluZChoKSxFfSxLbj1NYXRoLlBJLzE4MCxIbj0oZSx0LG49NCxhPTQ1LHM9MCxvPTEsaT00LGM9NCxsPTEsdT0xLGg9ITEsYj0hMSxkPSExKT0+e2NvbnN0IGY9ci5jdXJyZW50QXR0YWNobWVudE9iamVjdCxtPWUud2lkdGgsdj1lLmhlaWdodCxfPVJuLngscD1Sbi55LGc9T24oZSx0LGksYyx1LCExKSx4PWcud2lkdGgsRT1nLmhlaWdodCx5PVJuLngsVD1Sbi55LFI9eS1fLE09VC1wLHc9TWF0aC5zcXJ0KHRbMF0qdFswXSt0WzFdKnRbMV0pLEY9TWF0aC5zcXJ0KHRbMl0qdFsyXSt0WzNdKnRbM10pLCQ9QSgpLE89YSpLbixTPU1hdGguY29zKE8pKm4qKHcvJCksaz1NYXRoLnNpbihPKSpuKihGLyQpLEM9aD9tOngrTWF0aC5tYXgoMCxNYXRoLmFicyhTKS1SKSxQPWg/djpFK01hdGgubWF4KDAsTWF0aC5hYnMoayktTSksQj1NYXRoLmNlaWwoQyksST1NYXRoLmNlaWwoUCksVT0oQi1DKS8yLE49KEktUCkvMixEPWg/MDpNYXRoLm1heCgwLFItUykrVSxqPWg/MDpNYXRoLm1heCgwLE0taykrTix6PWg/Uy15OihTPjA/TWF0aC5tYXgoMCxTLVIpOjApK1UsWD1oP2stVDooaz4wP01hdGgubWF4KDAsay1NKTowKStOO2xldCBXLEc9IiI7aD8oRz0iaW5uZXIiLFc9Ynx8ZCk6IWImJmQ/KEc9ImZ1bGwiLFc9ITApOihHPSJvdXRlciIsVz1iKTtjb25zdCBWPVluKGUsZyxCLEksbSx2LEQsaix4LEUseixYLCEwLEcsVyxsLG51bGwsbnVsbCxudWxsLE1uKHMsbywhMCksd24ocyxvLCEwKSxGbihzLG8sITApLG8sMCwwLDAsMCk7cmV0dXJuIEwoZSksTChnKSxmJiZyLmJpbmQoZiksVn0sWm49TWF0aC5QSS8xODAsUW49KGUsdCxuPTQsYT00NSxzPTE2Nzc3MjE1LG89MSxpPTAsYz0xLGw9NCx1PTQsaD0xLGI9MSxkPTAsZj0hMSk9Pntjb25zdCBtPWUud2lkdGgsdj1lLmhlaWdodCxfPVJuLngscD1Sbi55LGc9TWF0aC5zcXJ0KHRbMF0qdFswXSt0WzFdKnRbMV0pLHg9TWF0aC5zcXJ0KHRbMl0qdFsyXSt0WzNdKnRbM10pLEU9QSgpLHk9YSpabixUPU1hdGguY29zKHkpKm4qKGcvRSksUj1NYXRoLnNpbih5KSpuKih4L0UpLE09ci5jdXJyZW50QXR0YWNobWVudE9iamVjdCx3PWhlKG0sdiwhMSk7ci5iaW5kKHcpLHIucmVzZXQoKSxyLnNldFRyYW5zZm9ybSgxLDAsMCwxLDAsMCksa2UoZSk7Y29uc3QgRj1ybigpO2FuKEYsZS53aWR0aCxlLmhlaWdodCksc24oRiksci5zZXRUcmFuc2Zvcm0oMSwwLDAsMSwyKlQsMipSKSxfbigpLGFuKEYsZS53aWR0aCxlLmhlaWdodCksc24oRiksVXQoKTtjb25zdCAkPXcudGV4dHVyZTtNJiZyLmJpbmQoTSk7Y29uc3QgTz1PbigkLHQsbCx1LGIsITEpO2VlKHcpO2NvbnN0IFM9Ty53aWR0aCxrPU8uaGVpZ2h0LEM9TWF0aC5jZWlsKFMrMipNYXRoLmFicyhUKSksUD1NYXRoLmNlaWwoaysyKk1hdGguYWJzKFIpKTtsZXQgQj0iIjtzd2l0Y2goZCl7Y2FzZSAwOkI9ImZ1bGwiO2JyZWFrO2Nhc2UgMTpCPSJpbm5lciI7YnJlYWs7Y2FzZSAyOkI9Im91dGVyIn1jb25zdCBJPSJpbm5lciI9PT1CLFU9ST9tOkMsTj1JP3Y6UCxEPU1hdGguYWJzKFQpLGo9TWF0aC5hYnMoUiksej0oUy1tKS8yLFg9KGstdikvMixXPUk/MDpEK3osRz1JPzA6aitYLFY9WW4oZSxPLFUsTixtLHYsVyxHLFMsayxJPy16LVQ6RC1ULEk/LVgtUjpqLVIsITEsQixmLGgsbnVsbCxudWxsLG51bGwsTW4ocyxvLCEwKSx3bihzLG8sITApLEZuKHMsbywhMCksbyxNbihpLGMsITApLHduKGksYywhMCksRm4oaSxjLCEwKSxjKTtyZXR1cm4gUm4ueD1fK1csUm4ueT1wK0csTChlKSxMKE8pLFZ9LEpuPU1hdGguUEkvMTgwLGVyPShlLHQsbj00LGE9NDUscyxvLGksYz00LGw9NCx1PTEsaD0xLGI9MCxkPSExKT0+e2NvbnN0IGY9ZS53aWR0aCxtPWUuaGVpZ2h0LHY9Um4ueCxfPVJuLnkscD1NYXRoLnNxcnQodFswXSp0WzBdK3RbMV0qdFsxXSksZz1NYXRoLnNxcnQodFsyXSp0WzJdK3RbM10qdFszXSkseD1BKCksRT1hKkpuLHk9TWF0aC5jb3MoRSkqbioocC94KSxUPU1hdGguc2luKEUpKm4qKGcveCksUj1yLmN1cnJlbnRBdHRhY2htZW50T2JqZWN0LE09aGUoZixtLCExKTtyLmJpbmQoTSksci5yZXNldCgpLHIuc2V0VHJhbnNmb3JtKDEsMCwwLDEsMCwwKSxrZShlKTtjb25zdCB3PXJuKCk7YW4odyxlLndpZHRoLGUuaGVpZ2h0KSxzbih3KSxyLnNldFRyYW5zZm9ybSgxLDAsMCwxLDIqeSwyKlQpLF9uKCksYW4odyxlLndpZHRoLGUuaGVpZ2h0KSxzbih3KSxVdCgpO2NvbnN0IEY9TS50ZXh0dXJlO1ImJnIuYmluZChSKTtjb25zdCAkPU9uKEYsdCxjLGwsaCwhMSk7ZWUoTSk7Y29uc3QgTz0kLndpZHRoLFM9JC5oZWlnaHQsaz1NYXRoLmNlaWwoTysyKk1hdGguYWJzKHkpKSxDPU1hdGguY2VpbChTKzIqTWF0aC5hYnMoVCkpO2xldCBQPSIiO3N3aXRjaChiKXtjYXNlIDA6UD0iZnVsbCI7YnJlYWs7Y2FzZSAxOlA9ImlubmVyIjticmVhaztjYXNlIDI6UD0ib3V0ZXIifWNvbnN0IEI9ImlubmVyIj09PVAsST1CP2Y6ayxVPUI/bTpDLE49TWF0aC5hYnMoeSksRD1NYXRoLmFicyhUKSxqPShPLWYpLzIsej0oUy1tKS8yLFg9Qj8wOk4raixXPUI/MDpEK3osRz1ZbihlLCQsSSxVLGYsbSxYLFcsTyxTLEI/LWoteTpOLXksQj8tei1UOkQtVCwhMSxQLGQsdSxpLHMsbywwLDAsMCwwLDAsMCwwLDApO3JldHVybiBSbi54PXYrWCxSbi55PV8rVyxMKGUpLEwoJCksR30sdHI9TWF0aC5QSS8xODAsbnI9KGUsdCxuPTQscj00NSxhLHMsbyxpPTQsYz00LGw9MSx1PTEsaD0wLGI9ITEpPT57Y29uc3QgZD1lLndpZHRoLGY9ZS5oZWlnaHQsbT1Sbi54LHY9Um4ueSxfPU9uKGUsdCxpLGMsdSwhMSkscD1fLndpZHRoLGc9Xy5oZWlnaHQseD1Sbi54LEU9Um4ueSx5PXgtbSxUPUUtdixSPU1hdGguc3FydCh0WzBdKnRbMF0rdFsxXSp0WzFdKSxNPU1hdGguc3FydCh0WzJdKnRbMl0rdFszXSp0WzNdKSx3PUEoKSxGPXIqdHIsJD1NYXRoLmNvcyhGKSpuKihSL3cpLE89TWF0aC5zaW4oRikqbiooTS93KSxTPTE9PT1oLGs9Uz9kOnArTWF0aC5tYXgoMCxNYXRoLmFicygkKS15KSxDPVM/ZjpnK01hdGgubWF4KDAsTWF0aC5hYnMoTyktVCksUD1NYXRoLmNlaWwoayksQj1NYXRoLmNlaWwoQyksST0oUC1rKS8yLFU9KEItQykvMixOPVM/MDpNYXRoLm1heCgwLHktJCkrSSxEPVM/MDpNYXRoLm1heCgwLFQtTykrVSxqPVM/JC14OigkPjA/TWF0aC5tYXgoMCwkLXkpOjApK0ksej1TP08tRTooTz4wP01hdGgubWF4KDAsTy1UKTowKStVO2xldCBYPSIiO3N3aXRjaChoKXtjYXNlIDA6WD0iZnVsbCI7YnJlYWs7Y2FzZSAxOlg9ImlubmVyIjticmVhaztjYXNlIDI6WD0ib3V0ZXIifWNvbnN0IFc9WW4oZSxfLFAsQixkLGYsTixELHAsZyxqLHosITAsWCxiLGwsbyxhLHMsMCwwLDAsMCwwLDAsMCwwKTtyZXR1cm4gUm4ueD1tK04sUm4ueT12K0QsTChlKSxMKF8pLFd9LHJyPShlLHQsbixyKT0+e2NvbnN0IGE9YGMkeygiMCIrZSkuc2xpY2UoLTIpfSR7KCIwIit0KS5zbGljZSgtMil9JHtuPyJ5IjoibiJ9JHtyPyJ5IjoibiJ9YDtpZihBbi5oYXMoYSkpcmV0dXJuIEFuLmdldChhKTtjb25zdCBzPShyPzE6MikrTWF0aC5jZWlsKGUqdC80KSxvPW5ldyB3dCgiI3ZlcnNpb24gMzAwIGVzXG5cbmxheW91dCAobG9jYXRpb24gPSAwKSBpbiB2ZWMyIGFfdmVydGV4O1xuXG5vdXQgdmVjMiB2X2Nvb3JkO1xuXG52b2lkIG1haW4oKSB7XG4gICAgdl9jb29yZCA9IGFfdmVydGV4O1xuXG4gICAgdmVjMiBwb3NpdGlvbiA9IGFfdmVydGV4ICogMi4wIC0gMS4wO1xuICAgIGdsX1Bvc2l0aW9uID0gdmVjNChwb3NpdGlvbiwgMC4wLCAxLjApO1xufSIsKChlLHQsbixyLGEpPT57Y29uc3Qgcz1NYXRoLmZsb29yKC41KnQpLG89TWF0aC5mbG9vciguNSpuKSxpPXQqbjtsZXQgYz0iIjtjb25zdCBsPWE/MToyO2ZvcihsZXQgZT0wO2U8aTsrK2UpYys9YFxuICAgIHJlc3VsdCArPSBnZXRXZWlnaHRlZENvbG9yKCR7ZX0sIHVfbWVkaXVtcFske2wrTWF0aC5mbG9vcihlLzQpfV1bJHtlJTR9XSk7XG5gO3JldHVybmAjdmVyc2lvbiAzMDAgZXNcbnByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xuXG51bmlmb3JtIHNhbXBsZXIyRCB1X3RleHR1cmU7XG51bmlmb3JtIHZlYzQgdV9tZWRpdW1wWyR7ZX1dO1xuXG5pbiB2ZWMyIHZfY29vcmQ7XG5vdXQgdmVjNCBvX2NvbG9yO1xuXG5cbmZsb2F0IGlzSW5zaWRlKGluIHZlYzIgdXYpIHtcbiAgICByZXR1cm4gc3RlcCg0LjAsIGRvdChzdGVwKHZlYzQoMC4wLCB1di54LCAwLjAsIHV2LnkpLCB2ZWM0KHV2LngsIDEuMCwgdXYueSwgMS4wKSksIHZlYzQoMS4wKSkpO1xufVxuXG52ZWM0IGdldFdlaWdodGVkQ29sb3IgKGluIGludCBpLCBpbiBmbG9hdCB3ZWlnaHQpIHtcbiAgICB2ZWMyIHJjcF9zaXplID0gdV9tZWRpdW1wWzBdLnh5O1xuXG4gICAgaW50IGlfZGl2X3ggPSBpIC8gJHt0fTtcbiAgICBpbnQgaV9tb2RfeCA9IGkgLSAke3R9ICogaV9kaXZfeDtcbiAgICB2ZWMyIG9mZnNldCA9IHZlYzIoaV9tb2RfeCAtICR7c30sICR7b30gLSBpX2Rpdl94KTtcbiAgICB2ZWMyIHV2ID0gdl9jb29yZCArIG9mZnNldCAqIHJjcF9zaXplO1xuXG4gICAgdmVjNCBjb2xvciA9IHRleHR1cmUodV90ZXh0dXJlLCB1dik7XG4gICAgY29sb3IucmdiIC89IG1heCgwLjAwMDEsIGNvbG9yLmEpO1xuICAgICR7YT8iIjoiXG4gICAgdmVjNCBzdWJzdGl0dXRlX2NvbG9yID0gdV9tZWRpdW1wWzFdO1xuICAgIGNvbG9yID0gbWl4KHN1YnN0aXR1dGVfY29sb3IsIGNvbG9yLCBpc0luc2lkZSh1dikpO1xuIn1cblxuICAgIHJldHVybiBjb2xvciAqIHdlaWdodDtcbn1cblxudm9pZCBtYWluKCkge1xuICAgIGZsb2F0IHJjcF9kaXZpc29yID0gdV9tZWRpdW1wWzBdLno7XG4gICAgZmxvYXQgYmlhcyAgICAgICAgPSB1X21lZGl1bXBbMF0udztcblxuICAgIHZlYzQgcmVzdWx0ID0gdmVjNCgwLjApO1xuICAgICR7Y31cbiAgICByZXN1bHQgPSBjbGFtcChyZXN1bHQgKiByY3BfZGl2aXNvciArIGJpYXMsIDAuMCwgMS4wKTtcbiAgICAke3I/InJlc3VsdC5hID0gdGV4dHVyZSh1X3RleHR1cmUsIHZfY29vcmQpLmE7IjoiIn1cblxuICAgIHJlc3VsdC5yZ2IgKj0gcmVzdWx0LmE7XG4gICAgb19jb2xvciA9IHJlc3VsdDtcbn1gfSkocyxlLHQsbixyKSk7cmV0dXJuIEFuLnNldChhLG8pLG99LGFyPShlLHQ9MCxuPTAsYSxzPTEsbz0wLGk9ITAsYz0hMCxsPTAsdT0wKT0+e2NvbnN0IGg9ci5jdXJyZW50QXR0YWNobWVudE9iamVjdCxiPWUud2lkdGgsZD1lLmhlaWdodCxmPWhlKGIsZCwhMSk7ci5iaW5kKGYpLHIucmVzZXQoKSxyLnNldFRyYW5zZm9ybSgxLDAsMCwxLDAsMCksa2UoZSwhMCksVXQoKTtjb25zdCBtPXJyKHQsbixpLGMpOygoZSx0LG4scixhLHMsbyxpLGMsbCx1KT0+e2NvbnN0IGg9ZS5tZWRpdW1wO2hbMF09MS90LGhbMV09MS9uLGhbMl09MS9hLGhbM109cy8yNTU7bGV0IGI9NDtvfHwoaFtiKytdPWksaFtiKytdPWMsaFtiKytdPWwsaFtiKytdPXUpO2NvbnN0IGQ9ci5sZW5ndGg7Zm9yKGxldCBlPTA7ZTxkO2UrKyloW2IrK109cltlXX0pKG0sYixkLGEscyxvLGMsTW4obCx1LCExKSx3bihsLHUsITEpLEZuKGwsdSwhMSksdSksc24obSk7Y29uc3Qgdj1mLnRleHR1cmU7cmV0dXJuIEwoZSksZWUoZiwhMSksaCYmci5iaW5kKGgpLHZ9LHNyPShlLHQsbixhPTAscz0wLG89MCxpPTAsYz0wLGw9MCx1PTAsaD0wLGI9MixkPTAsZj0wKT0+e2NvbnN0IG09ci5jdXJyZW50QXR0YWNobWVudE9iamVjdCx2PUEoKSxfPU1hdGguc3FydCh0WzBdKnRbMF0rdFsxXSp0WzFdKS92LHA9TWF0aC5zcXJ0KHRbMl0qdFsyXSt0WzNdKnRbM10pL3YsZz1lLndpZHRoLHg9ZS5oZWlnaHQsRT1nL18seT14L3AsVD1oZShnLHgsITEpO3IuYmluZChUKTtjb25zdCBSPXhuKGEscyxuKTtubihlLFIpO2NvbnN0IE09KChlLHQsbik9Pntjb25zdCByPWBkJHtlfSR7dH0ke259YDtpZihBbi5oYXMocikpcmV0dXJuIEFuLmdldChyKTtjb25zdCBhPW5ldyB3dCgiI3ZlcnNpb24gMzAwIGVzXG5cbmxheW91dCAobG9jYXRpb24gPSAwKSBpbiB2ZWMyIGFfdmVydGV4O1xuXG5vdXQgdmVjMiB2X2Nvb3JkO1xuXG52b2lkIG1haW4oKSB7XG4gICAgdl9jb29yZCA9IGFfdmVydGV4O1xuXG4gICAgdmVjMiBwb3NpdGlvbiA9IGFfdmVydGV4ICogMi4wIC0gMS4wO1xuICAgIGdsX1Bvc2l0aW9uID0gdmVjNChwb3NpdGlvbiwgMC4wLCAxLjApO1xufSIsKChlLHQsbixyKT0+e2xldCBhLHMsbztzd2l0Y2godCl7Y2FzZSAxOmE9Im1hcF9jb2xvci5yIjticmVhaztjYXNlIDI6YT0ibWFwX2NvbG9yLmciO2JyZWFrO2Nhc2UgNDphPSJtYXBfY29sb3IuYiI7YnJlYWs7Y2FzZSA4OmE9Im1hcF9jb2xvci5hIjticmVhaztkZWZhdWx0OmE9IjAuNSJ9c3dpdGNoKG4pe2Nhc2UgMTpzPSJtYXBfY29sb3IuciI7YnJlYWs7Y2FzZSAyOnM9Im1hcF9jb2xvci5nIjticmVhaztjYXNlIDQ6cz0ibWFwX2NvbG9yLmIiO2JyZWFrO2Nhc2UgODpzPSJtYXBfY29sb3IuYSI7YnJlYWs7ZGVmYXVsdDpzPSIwLjUifXN3aXRjaChyKXtjYXNlIDA6bz0iXG4gICAgdmVjNCBzb3VyY2VfY29sb3IgPSB0ZXh0dXJlKHVfdGV4dHVyZXNbMF0sIHV2KTtcbiI7YnJlYWs7Y2FzZSAzOm89IlxuICAgIHZlYzQgc291cmNlX2NvbG9yID10ZXh0dXJlKHVfdGV4dHVyZXNbMF0sIG1peCh2X2Nvb3JkLCB1diwgc3RlcChhYnModXYgLSB2ZWMyKDAuNSkpLCB2ZWMyKDAuNSkpKSk7XG4iO2JyZWFrO2Nhc2UgMTpvPSJcbiAgICB2ZWM0IHN1YnN0aXR1dGVfY29sb3IgPSB1X21lZGl1bXBbMl07XG4gICAgdmVjNCBzb3VyY2VfY29sb3IgPSBtaXgoc3Vic3RpdHV0ZV9jb2xvciwgdGV4dHVyZSh1X3RleHR1cmVzWzBdLCB1diksIGlzSW5zaWRlKHV2KSk7XG4iO2JyZWFrO2RlZmF1bHQ6bz0iXG4gICAgdmVjNCBzb3VyY2VfY29sb3IgPSB0ZXh0dXJlKHVfdGV4dHVyZXNbMF0sIGZyYWN0KHV2KSk7XG4ifXJldHVybmAjdmVyc2lvbiAzMDAgZXNcbnByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xuXG51bmlmb3JtIHNhbXBsZXIyRCB1X3RleHR1cmVzWzJdO1xudW5pZm9ybSB2ZWM0IHVfbWVkaXVtcFske2V9XTtcblxuaW4gdmVjMiB2X2Nvb3JkO1xub3V0IHZlYzQgb19jb2xvcjtcblxuXG5mbG9hdCBpc0luc2lkZShpbiB2ZWMyIHV2KSB7XG4gICAgcmV0dXJuIHN0ZXAoNC4wLCBkb3Qoc3RlcCh2ZWM0KDAuMCwgdXYueCwgMC4wLCB1di55KSwgdmVjNCh1di54LCAxLjAsIHV2LnksIDEuMCkpLCB2ZWM0KDEuMCkpKTtcbn1cblxudm9pZCBtYWluKCkge1xuICAgIHZlYzIgdXZfdG9fc3Rfc2NhbGUgID0gdV9tZWRpdW1wWzBdLnh5O1xuICAgIHZlYzIgdXZfdG9fc3Rfb2Zmc2V0ID0gdV9tZWRpdW1wWzBdLnp3O1xuICAgIHZlYzIgc2NhbGUgICAgICAgICAgID0gdV9tZWRpdW1wWzFdLnh5O1xuXG4gICAgdmVjMiBzdCA9IHZfY29vcmQgKiB1dl90b19zdF9zY2FsZSAtIHV2X3RvX3N0X29mZnNldDtcbiAgICB2ZWM0IG1hcF9jb2xvciA9IHRleHR1cmUodV90ZXh0dXJlc1sxXSwgc3QpO1xuXG4gICAgdmVjMiBvZmZzZXQgPSB2ZWMyKCR7YX0sICR7c30pIC0gMC41O1xuICAgIHZlYzIgdXYgPSB2X2Nvb3JkICsgb2Zmc2V0ICogc2NhbGU7XG4gICAgJHtvfVxuXG4gICAgb19jb2xvciA9IG1peCh0ZXh0dXJlKHVfdGV4dHVyZXNbMF0sIHZfY29vcmQpLCBzb3VyY2VfY29sb3IsIGlzSW5zaWRlKHN0KSk7XG59YH0pKDE9PT1uPzM6MixlLHQsbikpO3JldHVybiBBbi5zZXQocixhKSxhfSkoYyxsLGIpOygoZSx0LG4scixhLHMsbyxpLGMsbCx1LGgsYixkKT0+e2NvbnN0IGY9ZS50ZXh0dXJlcztmWzBdPTAsZlsxXT0xO2NvbnN0IG09ZS5tZWRpdW1wO21bMF09ci90LG1bMV09YS9uLG1bMl09cy90LG1bM109KGEtbi1vKS9uLG1bNF09aS9yLG1bNV09LWMvYSwxPT09bCYmKG1bOF09dSxtWzldPWgsbVsxMF09YixtWzExXT1kKX0pKE0sZyx4LEUseSxvLGksdSxoLGIsTW4oZCxmLCEwKSx3bihkLGYsITApLEZuKGQsZiwhMCksZiksVXQoKSxzbihNKTtjb25zdCB3PVQudGV4dHVyZTtyZXR1cm4gbSYmci5iaW5kKG0pLEwoZSksTChSKSxlZShULCExKSx3fSxvcj0oZSx0LG4sYSk9Pntjb25zdCBzPXIuY3VycmVudEF0dGFjaG1lbnRPYmplY3Qsbz1lLndpZHRoLGk9ZS5oZWlnaHQ7c3dpdGNoKHIuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uKXtjYXNlIm5vcm1hbCI6Y2FzZSJsYXllciI6Y2FzZSJhZGQiOmNhc2Uic2NyZWVuIjpjYXNlImFscGhhIjpjYXNlImVyYXNlIjpjYXNlImNvcHkiOntyLmJpbmQoci4kbWFpbkF0dGFjaG1lbnRPYmplY3QpLHIuc2V0VHJhbnNmb3JtKDEsMCwwLDEsbixhKTtjb25zdCBzPWRuKCEwKTsoKGUsdCxuLGEpPT57Y29uc3Qgcz1lLmhpZ2hwLG89ci4kbWF0cml4O3NbMF09b1swXSxzWzFdPW9bMV0sc1syXT1vWzNdLHNbM109b1s0XSxzWzRdPW9bNl0sc1s1XT1vWzddLHNbNl09bixzWzddPWEsc1s4XT14KCksc1s5XT1FKCk7Y29uc3QgaT1lLm1lZGl1bXA7aVswXT10WzBdLGlbMV09dFsxXSxpWzJdPXRbMl0saVszXT10WzNdLGlbNF09dFs0XSxpWzVdPXRbNV0saVs2XT10WzZdLGlbN109dFs3XX0pKHMsdCxvLGkpLGtlKGUpLHBuKHIuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uKSxzbihzKX1icmVhaztkZWZhdWx0Ontjb25zdCBzPWxuKG4sYSxvLGkpLGM9aGUobyxpLCExKTtyLmJpbmQoYyksbm4ocyxlKTtjb25zdCBsPVF0KHIuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uKTtibihsLHRbMF0sdFsxXSx0WzJdLHRbM10sdFs0XSx0WzVdLHRbNl0sdFs3XSksc24obCksci5iaW5kKHIuJG1haW5BdHRhY2htZW50T2JqZWN0KSxyLnJlc2V0KCksci5zZXRUcmFuc2Zvcm0oMSwwLDAsMSxuLGEpLGhuKGMudGV4dHVyZSksTChzKSxlZShjKX19cyYmci5iaW5kKHMpLFV0KCl9LGlyPVtdLGNyPWU9PntlLnNpemUmJmUuY2xlYXIoKSxpci5wdXNoKGUpfSxscj0oZSx0LG4scixhPW51bGwpPT57dC5oYXMobil8fHQuc2V0KG4saXIucG9wKCl8fG5ldyBNYXApO2NvbnN0IHM9dC5nZXQobik7aWYobnVsbD09PWEpe2lmKCFzLmhhcyhyKSlyZXR1cm47cmV0dXJuIGUuZGVzdHJveShzLmdldChyKSkscy5kZWxldGUociksdm9pZChzLnNpemV8fCh0LmRlbGV0ZShuKSxjcihzKSkpfXMuc2V0KHIsYSl9O2NvbnN0IHVyPW5ldyBjbGFzc3tjb25zdHJ1Y3Rvcigpe09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCJfJHBvb2wiLHtlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMCx2YWx1ZTp2b2lkIDB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywiXyRzdG9yZSIse2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwLHZhbHVlOnZvaWQgMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCJfJHRyYXNoIix7ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITAsdmFsdWU6dm9pZCAwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsIiR0aW1lcklkIix7ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITAsdmFsdWU6dm9pZCAwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsIiRyZW1vdmVDYWNoZSIse2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwLHZhbHVlOnZvaWQgMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCIkcmVtb3ZlSWRzIix7ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITAsdmFsdWU6dm9pZCAwfSksdGhpcy5fJHBvb2w9W10sdGhpcy5fJHN0b3JlPW5ldyBNYXAsdGhpcy5fJHRyYXNoPW5ldyBNYXAsdGhpcy4kdGltZXJJZD1udWxsLHRoaXMuJHJlbW92ZUlkcz1bXSx0aGlzLiRyZW1vdmVDYWNoZT0hMX1yZXNldCgpeygoZSx0LG4pPT57bi5jbGVhcigpLG51bGwhPT1lLiR0aW1lcklkJiZjbGVhclRpbWVvdXQoZS4kdGltZXJJZCk7Zm9yKGNvbnN0IG4gb2YgdC52YWx1ZXMoKSl7Zm9yKGNvbnN0IHQgb2Ygbi52YWx1ZXMoKSl0JiZlLmRlc3Ryb3kodCk7Y3Iobil9dC5jbGVhcigpfSkodGhpcyx0aGlzLl8kc3RvcmUsdGhpcy5fJHRyYXNoKX1kZXN0cm95KGU9bnVsbCl7KChlLHQpPT57aWYodCYmIm9iamVjdCI9PXR5cGVvZiB0JiYiY2FudmFzImluIHQpe2NvbnN0IG49dC5jYW52YXMscj1uLndpZHRoLGE9bi5oZWlnaHQ7dC5jbGVhclJlY3QoMCwwLHIrMSxhKzEpLG4ud2lkdGg9bi5oZWlnaHQ9MSxlLnB1c2gobil9fSkodGhpcy5fJHBvb2wsZSl9Z2V0Q2FudmFzKCl7cmV0dXJuIHRoaXMuXyRwb29sLnBvcCgpfHxkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJjYW52YXMiKX1yZW1vdmUoZSx0KXsoKGUsdCxuKT0+e2lmKCFlLmhhcyh0KSlyZXR1cm47Y29uc3Qgcj1lLmdldCh0KTtyLmhhcyhuKSYmKHIuZGVsZXRlKG4pLHIuc2l6ZXx8KGNyKHIpLGUuZGVsZXRlKHQpKSl9KSh0aGlzLl8kc3RvcmUsZSx0KX1yZW1vdmVUaW1lcihlKXsoKGUsdCxuLHIpPT57aWYobi5oYXMocikpcmV0dXJuO2NvbnN0IGE9dC5nZXQocik7YSYmKGEuc2V0KCJ0cmFzaCIsITApLG4uc2V0KHIsYSksbnVsbCE9PWUuJHRpbWVySWQmJmNsZWFyVGltZW91dChlLiR0aW1lcklkKSxlLiRyZW1vdmVDYWNoZT0hMSxlLiR0aW1lcklkPXNldFRpbWVvdXQoKCk9PntlLiRyZW1vdmVDYWNoZT0hMCxlLiR0aW1lcklkPW51bGx9LDFlMykpfSkodGhpcyx0aGlzLl8kc3RvcmUsdGhpcy5fJHRyYXNoLGUpfXJlbW92ZVRpbWVyU2NoZWR1bGVkQ2FjaGUoKXsoKGUsdCk9PntpZih0LnNpemUpe2Zvcihjb25zdFtuLHJdb2YgdClyLmhhcygidHJhc2giKSYmKGUucmVtb3ZlQnlJZChuKSxlLiRyZW1vdmVJZHMucHVzaCgrbikpO3QuY2xlYXIoKSxlLiRyZW1vdmVDYWNoZT0hMX19KSh0aGlzLHRoaXMuXyR0cmFzaCl9cmVtb3ZlQnlJZChlKXsoKGUsdCxuKT0+e2lmKCF0LmhhcyhuKSlyZXR1cm47Y29uc3Qgcj10LmdldChuKTtmb3IoY29uc3QgdCBvZiByLnZhbHVlcygpKWUuZGVzdHJveSh0KTt0LmRlbGV0ZShuKSxjcihyKX0pKHRoaXMsdGhpcy5fJHN0b3JlLGUpfWdldEJ5SWQoZSl7cmV0dXJuIHRoaXMuXyRzdG9yZS5nZXQoZSl9Z2V0KGUsdCl7cmV0dXJuKChlLHQsbik9Pntjb25zdCByPWUuZ2V0KHQpfHxudWxsO3JldHVybiByPyhyLmRlbGV0ZSgidHJhc2giKSxyLmdldChuKXx8bnVsbCk6bnVsbH0pKHRoaXMuXyRzdG9yZSxlLHQpfXNldChlLHQsbj1udWxsKXtscih0aGlzLHRoaXMuXyRzdG9yZSxlLHQsbil9aGFzKGUsdD0iIil7cmV0dXJuKChlLHQsbj0iIik9Pm4/ISFlLmhhcyh0KSYmZS5nZXQodCkuaGFzKG4pOmUuaGFzKHQpKSh0aGlzLl8kc3RvcmUsZSx0KX1nZW5lcmF0ZUtleXMoZSx0LG4pe3JldHVybigoZSx0LG4pPT57Y29uc3Qgcj1bMTAwKmUsMTAwKnRdO24mJnIucHVzaCgxMDAqbik7bGV0IGE9MjE2NjEzNjI2MTtmb3IobGV0IGU9MDtlPHIubGVuZ3RoOysrZSl7bGV0IHQ9MHxyW2VdO2ZvcihsZXQgZT0wO2U8NDtlKyspYV49MjU1JnQsYT1NYXRoLmltdWwoYSwxNjc3NzYxOSksdD4+Pj04fXJldHVybihhPj4+MCklMTY3NzcyMTZ9KShlLHQsbil9Z2VuZXJhdGVGaWx0ZXJLZXlzKGUsdCxuLHIpe3JldHVybigoZSx0LG4scik9PmAke2V9JHt0fSR7bn0ke3J9YCkoZSx0LG4scil9fSxocj0oZSx0LG4sYSxzLG8saSxjLGwsdSxoKT0+e2NvbnN0IGI9ci5jdXJyZW50QXR0YWNobWVudE9iamVjdDtsZXQgZD1udWxsO2NvbnN0IGY9TWF0aC5zcXJ0KGlbMF0qaVswXStpWzFdKmlbMV0pLF89TWF0aC5zcXJ0KGlbMl0qaVsyXStpWzNdKmlbM10pLHA9dXIuZ2VuZXJhdGVGaWx0ZXJLZXlzKGlbMF0saVsxXSxpWzJdLGlbM10pO2xldCBnPSExO2lmKHVyLmdldCh0LCJmS2V5Iik9PT1wKXtjb25zdCBlPXVyLmdldCh0LCJmVGV4dHVyZSIpO24/TChlKTooZz0hMCxkPWUpfWxldCB4PTAsRT0wO2lmKGcpeD11ci5nZXQodCwib2Zmc2V0WCIpLEU9dXIuZ2V0KHQsIm9mZnNldFkiKTtlbHNle2Q9dG4oZSk7Y29uc3QgdD1NYXRoLmF0YW4yKGlbMV0saVswXSksbj1NYXRoLmF0YW4yKC1pWzJdLGlbM10pLGM9bz9mKk1hdGguY29zKHQpOk1hdGguY29zKHQpLGw9bz9mKk1hdGguc2luKHQpOk1hdGguc2luKHQpLHU9bz8tXypNYXRoLnNpbihuKTotTWF0aC5zaW4obikscD1vP18qTWF0aC5jb3Mobik6TWF0aC5jb3MobiksZz1tKGMsbCx1LHAsYS8yLHMvMikseT1tKDEsMCwwLDEsLWUudy8yLC1lLmgvMiksQT0oKGUsdCk9Pntjb25zdCBuPWVbMF0scj1lWzFdLGE9ZVsyXSxzPWVbM10sbz1lWzRdLGk9ZVs1XSxjPXRbMF0sbD10WzFdLHU9dFsyXSxoPXRbM10sYj10WzRdLGQ9dFs1XTtyZXR1cm4gbShuKmMrYSpsLHIqYytzKmwsbip1K2EqaCxyKnUrcypoLG4qYithKmQrbyxyKmIrcypkK2kpfSkoZyx5KTtpZih2KGcpLHYoeSksMSE9PUFbMF18fDAhPT1BWzFdfHwwIT09QVsyXXx8MSE9PUFbM10pe2NvbnN0IGU9aGUoYSxzLCExKTtyLmJpbmQoZSksci5yZXNldCgpLHIuc2V0VHJhbnNmb3JtKEFbMF0sQVsxXSxBWzJdLEFbM10sQVs0XSxBWzVdKSx4PUFbNF0sRT1BWzVdLGtlKGQpO2NvbnN0IHQ9ZG4oKTtmbih0LGQud2lkdGgsZC5oZWlnaHQpLHNuKHQpLEwoZCksZD1lLnRleHR1cmUsZWUoZSwhMSksYiYmci5iaW5kKGIpfXYoQSksUm4ueD0wLFJuLnk9MDtmb3IobGV0IGU9MDtoLmxlbmd0aD5lOyl7c3dpdGNoKGhbZSsrXSl7Y2FzZSAwOmQ9UW4oZCxpLGhbZSsrXSxoW2UrK10saFtlKytdLGhbZSsrXSxoW2UrK10saFtlKytdLGhbZSsrXSxoW2UrK10saFtlKytdLGhbZSsrXSxoW2UrK10sQm9vbGVhbihoW2UrK10pKTticmVhaztjYXNlIDE6ZD1PbihkLGksaFtlKytdLGhbZSsrXSxoW2UrK10pO2JyZWFrO2Nhc2UgMjpkPVNuKGQsbmV3IEZsb2F0MzJBcnJheShbaFtlKytdLGhbZSsrXSxoW2UrK10saFtlKytdLGhbZSsrXSxoW2UrK10saFtlKytdLGhbZSsrXSxoW2UrK10saFtlKytdLGhbZSsrXSxoW2UrK10saFtlKytdLGhbZSsrXSxoW2UrK10saFtlKytdLGhbZSsrXSxoW2UrK10saFtlKytdLGhbZSsrXV0pKTticmVhaztjYXNlIDM6e2NvbnN0IHQ9aFtlKytdLG49aFtlKytdLHI9dCpuLGE9aC5zdWJhcnJheShlLGUrcik7ZSs9cixkPWFyKGQsdCxuLGEsaFtlKytdLGhbZSsrXSxCb29sZWFuKGhbZSsrXSksQm9vbGVhbihoW2UrK10pLGhbZSsrXSxoW2UrK10pfWJyZWFrO2Nhc2UgNDp7Y29uc3QgdD1oW2UrK10sbj1uZXcgVWludDhBcnJheSh0KTtuLnNldChoLnN1YmFycmF5KGUsZSt0KSksZSs9dCxkPXNyKGQsaSxuLGhbZSsrXSxoW2UrK10saFtlKytdLGhbZSsrXSxoW2UrK10saFtlKytdLGhbZSsrXSxoW2UrK10saFtlKytdLGhbZSsrXSxoW2UrK10pfWJyZWFrO2Nhc2UgNTpkPUhuKGQsaSxoW2UrK10saFtlKytdLGhbZSsrXSxoW2UrK10saFtlKytdLGhbZSsrXSxoW2UrK10saFtlKytdLEJvb2xlYW4oaFtlKytdKSxCb29sZWFuKGhbZSsrXSksQm9vbGVhbihoW2UrK10pKTticmVhaztjYXNlIDY6ZD1xbihkLGksaFtlKytdLGhbZSsrXSxoW2UrK10saFtlKytdLGhbZSsrXSxoW2UrK10sQm9vbGVhbihoW2UrK10pLEJvb2xlYW4oaFtlKytdKSk7YnJlYWs7Y2FzZSA3Ontjb25zdCB0PWhbZSsrXSxuPWhbZSsrXTtsZXQgcj1oW2UrK107Y29uc3QgYT1oLnN1YmFycmF5KGUsZStyKTtlKz1yLHI9aFtlKytdO2NvbnN0IHM9aC5zdWJhcnJheShlLGUrcik7ZSs9cixyPWhbZSsrXTtjb25zdCBvPWguc3ViYXJyYXkoZSxlK3IpO2UrPXIsZD1lcihkLGksdCxuLGEscyxvLGhbZSsrXSxoW2UrK10saFtlKytdLGhbZSsrXSxoW2UrK10sQm9vbGVhbihoW2UrK10pKX1icmVhaztjYXNlIDg6e2NvbnN0IHQ9aFtlKytdLG49aFtlKytdO2xldCByPWhbZSsrXTtjb25zdCBhPWguc3ViYXJyYXkoZSxlK3IpO2UrPXIscj1oW2UrK107Y29uc3Qgcz1oLnN1YmFycmF5KGUsZStyKTtlKz1yLHI9aFtlKytdO2NvbnN0IG89aC5zdWJhcnJheShlLGUrcik7ZSs9cixkPW5yKGQsaSx0LG4sYSxzLG8saFtlKytdLGhbZSsrXSxoW2UrK10saFtlKytdLGhbZSsrXSxCb29sZWFuKGhbZSsrXSkpfX19fWlmKGQpe2NvbnN0IGU9QSgpLHQ9dVswXSooZi9lKSxuPXVbMV0qKF8vZSk7ci5yZXNldCgpLHIuc2V0VHJhbnNmb3JtKDEsMCwwLDEsMCwwKSxyLmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbj1sLG9yKGQsYywteCt0K2lbNF0sLUUrbitpWzVdKX1nfHwodXIuc2V0KHQsImZLZXkiLHApLHVyLnNldCh0LCJmVGV4dHVyZSIsZCksdXIuc2V0KHQsIm9mZnNldFgiLHgpLHVyLnNldCh0LCJvZmZzZXRZIixFKSksYiYmci5iaW5kKGIpfSxicj0oZSx0LHIsYSk9PntuLnN0ZW5jaWxGdW5jKG4uQUxXQVlTLDAsMjU1KSxuLnN0ZW5jaWxPcFNlcGFyYXRlKG4uRlJPTlQsbi5LRUVQLG4uS0VFUCxuLklOQ1JfV1JBUCksbi5zdGVuY2lsT3BTZXBhcmF0ZShuLkJBQ0ssbi5LRUVQLG4uS0VFUCxuLkRFQ1JfV1JBUCksbi5jb2xvck1hc2soITEsITEsITEsITEpO2NvbnN0IHM9ISFhLG89T3Qocyk7YSYmU3QobyxhKSxuLmVuYWJsZShuLlNBTVBMRV9BTFBIQV9UT19DT1ZFUkFHRSksTnQobyxlLHQsciksbi5kaXNhYmxlKG4uU0FNUExFX0FMUEhBX1RPX0NPVkVSQUdFKSxuLnN0ZW5jaWxGdW5jKG4uTk9URVFVQUwsMCwyNTUpLG4uc3RlbmNpbE9wKG4uS0VFUCxuLlpFUk8sbi5aRVJPKSxuLmNvbG9yTWFzayghMCwhMCwhMCwhMCk7Y29uc3QgaT0oZT0+e2NvbnN0IHQ9InMiKyhlPyJ5IjoibiIpO2lmKEZ0Lmhhcyh0KSlyZXR1cm4gRnQuZ2V0KHQpO2NvbnN0IG49bmV3IHd0KCR0KGU/OTowLCExLCExLGUpLCIjdmVyc2lvbiAzMDAgZXNcbnByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xuXG5pbiB2ZWM0IHZfY29sb3I7XG5vdXQgdmVjNCBvX2NvbG9yO1xuXG52b2lkIG1haW4oKSB7XG4gICAgb19jb2xvciA9IHZlYzQodl9jb2xvci5yZ2IgKiB2X2NvbG9yLmEsIHZfY29sb3IuYSk7XG59Iik7cmV0dXJuIEZ0LnNldCh0LG4pLG59KShzKTthJiYoKGUsdCk9Pntjb25zdCBuPWUuaGlnaHA7blswXT10WzBdLG5bMV09dFsxXSxuWzJdPTAsbls0XT10WzJdLG5bNV09dFszXSxuWzZdPTAsbls4XT10WzRdLG5bOV09dFs1XSxuWzEwXT0xLG5bMTJdPXRbNl0sblsxM109dFs3XSxuWzE0XT0wLG5bMTZdPXRbOF0sblsxN109dFs5XSxuWzE4XT0wLG5bMjBdPXRbMTBdLG5bMjFdPXRbMTFdLG5bMjJdPTEsblszXT14KCksbls3XT1FKCksblsxMV09dFsxMl0sblsxNV09dFsxM10sblsxOV09dFsxNF0sblsyM109dFsxNV0sblsyNF09dFsxNl0sblsyNV09dFsxN10sblsyNl09dFsxOF0sblsyN109dFsxOV0sblsyOF09dFsyMF0sblsyOV09dFsyMV0sblszMF09dFsyMl0sblszMV09dFsyM10sblszMl09dFsyNF0sblszM109dFsyNV19KShpLGEpLE50KGksZSx0LHIpfSxkcj0oZSx0LG4scixhKT0+e2NvbnN0IHM9ZS5tZWRpdW1wO2xldCBvPTA7Zm9yKGxldCBlPW47ZTxyOysrZSl7Y29uc3Qgbj01KmU7c1tvKytdPWFbdFtuKzFdXSxzW28rK109YVt0W24rMl1dLHNbbysrXT1hW3RbbiszXV0sc1tvKytdPWFbdFtuKzRdXX1mb3IobGV0IGU9bjtlPHI7KytlKXNbbysrXT10WzUqZV19LGZyPShlLHQpPT57Y29uc3QgYT1yLmN1cnJlbnRBdHRhY2htZW50T2JqZWN0LHM9bi5nZXRQYXJhbWV0ZXIobi5TQ0lTU09SX0JPWCk7bi5kaXNhYmxlKG4uU0NJU1NPUl9URVNUKTtjb25zdCBvPXpuKCk7ci5iaW5kKG8pO2NvbnN0IGk9MD09PXQsYz1lLmxlbmd0aC81LGw9aT9HbjpWbjt1bigpO2NvbnN0IHU9V24oKTtmb3IobGV0IHQ9MDt0PGM7dCs9dS0xKXtjb25zdCBuPU1hdGgubWluKHQrdSxjKSxyPUluKG4tdCxpKTtkcihyLGUsdCxuLGwpLERuKHIsZVswXSxlW2UubGVuZ3RoLTVdKX1yZXR1cm4gVXQoKSxhJiZyLmJpbmQoYSksbi5lbmFibGUobi5TQ0lTU09SX1RFU1QpLG4uc2Npc3NvcihzWzBdLHNbMV0sc1syXSxzWzNdKSxvLnRleHR1cmV9LG1yPW5ldyBNYXAsdnI9KGUsdCxuLHIpPT57Y29uc3QgYT0oKGUsdCxuLHIpPT5gJHtlPyJ5IjoibiJ9JHt0PyJ5IjoibiJ9JHt0JiZuPyJ5IjoibiJ9JHtyfWApKHIsZSx0LG4pO2lmKG1yLmhhcyhhKSlyZXR1cm4gbXIuZ2V0KGEpO2NvbnN0IHM9MSsocj8xNDo1KSxvPXMtMSxpPW5ldyB3dCgkdChzLCEwLCExLHIpLCgoZSx0LG4scixhKT0+e2NvbnN0IHM9bj8oKGUsdCk9Pntjb25zdCBuPXQ/KGU9PmBcbiAgICB2ZWMyIGZvY2FsID0gdmVjMih1X2hpZ2hwWyR7ZX1dWzFdLCAwLjApO1xuXG4gICAgdmVjMiBkaXIgPSBub3JtYWxpemUoY29vcmQgLSBmb2NhbCk7XG5cbiAgICBmbG9hdCBhID0gZG90KGRpciwgZGlyKTtcbiAgICBmbG9hdCBiID0gMi4wICogZG90KGRpciwgZm9jYWwpO1xuICAgIGZsb2F0IGMgPSBkb3QoZm9jYWwsIGZvY2FsKSAtIDEuMDtcbiAgICBmbG9hdCB4ID0gKC1iICsgc3FydChiICogYiAtIDQuMCAqIGEgKiBjKSkgLyAoMi4wICogYSk7XG5cbiAgICBmbG9hdCB0ID0gZGlzdGFuY2UoZm9jYWwsIGNvb3JkKSAvIGRpc3RhbmNlKGZvY2FsLCBmb2NhbCArIGRpciAqIHgpO2ApKGUpOiJmbG9hdCB0ID0gbGVuZ3RoKGNvb3JkKTsiO3JldHVybmBcbiAgICBmbG9hdCByYWRpdXMgPSB1X2hpZ2hwWyR7ZX1dWzBdO1xuICAgIHZlYzIgY29vcmQgPSBwIC8gcmFkaXVzO1xuICAgICR7bn1cbmB9KSh0LHIpOihlPT5gXG4gICAgdmVjMiBhID0gdV9oaWdocFske2V9XS54eTtcbiAgICB2ZWMyIGIgPSB1X2hpZ2hwWyR7ZX1dLnp3O1xuXG4gICAgdmVjMiBhYiA9IGIgLSBhO1xuICAgIHZlYzIgYXAgPSBwIC0gYTtcblxuICAgIGZsb2F0IHQgPSBkb3QoYWIsIGFwKSAvIGRvdChhYiwgYWIpO2ApKHQpO2xldCBvO3N3aXRjaChhKXtjYXNlIDA6bz0iMS4wIC0gYWJzKGZyYWN0KHQgKiAwLjUpICogMi4wIC0gMS4wKSI7YnJlYWs7Y2FzZSAxOm89ImZyYWN0KHQpIjticmVhaztkZWZhdWx0Om89ImNsYW1wKHQsIDAuMCwgMS4wKSJ9cmV0dXJuYCN2ZXJzaW9uIDMwMCBlc1xucHJlY2lzaW9uIGhpZ2hwIGZsb2F0O1xuXG51bmlmb3JtIHNhbXBsZXIyRCB1X3RleHR1cmU7XG51bmlmb3JtIHZlYzQgdV9oaWdocFske2V9XTtcbiAgICBcbmluIHZlYzIgdl91djtcbm91dCB2ZWM0IG9fY29sb3I7XG4gICAgXG52b2lkIG1haW4oKSB7XG4gICAgdmVjMiBwID0gdl91djtcbiAgICAke3N9XG4gICAgdCA9ICR7b307XG4gICAgb19jb2xvciA9IHRleHR1cmUodV90ZXh0dXJlLCB2ZWMyKHQsIDAuNSkpO1xufWB9KShzLG8sZSx0LG4pKTtyZXR1cm4gbXIuc2V0KGEsaSksaX0sX3I9KGUsdCxuLHIscz0wLG89bnVsbCxpPW51bGwpPT57Y29uc3QgYz1lLmhpZ2hwO2NbMF09blswXSxjWzFdPW5bMV0sY1syXT1uWzJdLGNbNF09blszXSxjWzVdPW5bNF0sY1s2XT1uWzVdLGNbOF09bls2XSxjWzldPW5bN10sY1sxMF09bls4XSxjWzEyXT1yWzBdLGNbMTNdPXJbMV0sY1sxNF09clsyXSxjWzE2XT1yWzNdLGNbMTddPXJbNF0sY1sxOF09cls1XSxjWzExXT1yWzZdLGNbMTVdPXJbN10sY1sxOV09cls4XSxjWzNdPXgoKSxjWzddPUUoKTtsZXQgbD0yMDtpJiYoY1syMF09aVswXSxjWzIxXT1pWzFdLGNbMjJdPTAsY1syNF09aVsyXSxjWzI1XT1pWzNdLGNbMjZdPTAsY1syOF09aVs0XSxjWzI5XT1pWzVdLGNbMzBdPTEsY1szMl09aVs2XSxjWzMzXT1pWzddLGNbMzRdPTAsY1szNl09aVs4XSxjWzM3XT1pWzldLGNbMzhdPTAsY1s0MF09aVsxMF0sY1s0MV09aVsxMV0sY1s0Ml09MSxjWzMxXT1pWzEyXSxjWzM1XT1pWzEzXSxjWzM5XT1pWzE0XSxjWzQzXT1pWzE1XSxjWzQ0XT1pWzE2XSxjWzQ1XT1pWzE3XSxjWzQ2XT1pWzE4XSxjWzQ3XT1pWzE5XSxjWzQ4XT1pWzIwXSxjWzQ5XT1pWzIxXSxjWzUwXT1pWzIyXSxjWzUxXT1pWzIzXSxjWzUyXT1pWzI0XSxjWzUzXT1pWzI1XSxsPTU2KSwwPT09dD8oY1tsKytdPW9bMF0sY1tsKytdPW9bMV0sY1tsKytdPW9bMl0sY1tsXT1vWzNdKTooY1tsKytdPTgxOS4yLGNbbF09YShzLC0uOTc1LC45NzUsMCkpfSxwcj0oZSx0LGEscyk9Pntjb25zdCBvPUtlLnNoaWZ0KCksaT1LZS5zaGlmdCgpLGM9S2Uuc2hpZnQoKSxsPUtlLnNoaWZ0KCk7bi5kaXNhYmxlKG4uU1RFTkNJTF9URVNUKTtjb25zdCBiPWZyKG8sbCk7a2UoYiksbi5lbmFibGUobi5TVEVOQ0lMX1RFU1QpLG4uZnJvbnRGYWNlKG4uQ0NXKSxuLnN0ZW5jaWxNYXNrKDI1NSksbi5zdGVuY2lsRnVuYyhuLkFMV0FZUywwLDI1NSksbi5zdGVuY2lsT3BTZXBhcmF0ZShuLkZST05ULG4uS0VFUCxuLktFRVAsbi5JTkNSX1dSQVApLG4uc3RlbmNpbE9wU2VwYXJhdGUobi5CQUNLLG4uS0VFUCxuLktFRVAsbi5ERUNSX1dSQVApLG4uY29sb3JNYXNrKCExLCExLCExLCExKTtjb25zdCBkPSEhcyxmPU90KGQpO3MmJlN0KGYscyksbi5lbmFibGUobi5TQU1QTEVfQUxQSEFfVE9fQ09WRVJBR0UpLE50KGYsZSx0LGEpLG4uZGlzYWJsZShuLlNBTVBMRV9BTFBIQV9UT19DT1ZFUkFHRSksbi5zdGVuY2lsRnVuYyhuLk5PVEVRVUFMLDAsMjU1KSxuLnN0ZW5jaWxPcChuLktFRVAsbi5aRVJPLG4uWkVSTyksbi5jb2xvck1hc2soITAsITAsITAsITApO2NvbnN0IG09dnIoITEsITEsYyxkKSxwPShlPT57Y29uc3QgdD0tODE5LjIqZVswXS04MTkuMiplWzJdK2VbNF0sbj04MTkuMiplWzBdLTgxOS4yKmVbMl0rZVs0XSxyPS04MTkuMiplWzBdKzgxOS4yKmVbMl0rZVs0XSxhPS04MTkuMiplWzFdLTgxOS4yKmVbM10rZVs1XSxzPTgxOS4yKmVbMV0tODE5LjIqZVszXStlWzVdO2xldCBvPXItdCxpPS04MTkuMiplWzFdKzgxOS4yKmVbM10rZVs1XS1hO2NvbnN0IGM9TWF0aC5zcXJ0KG8qbytpKmkpO2M/KG8vPWMsaS89Yyk6KG89MCxpPTApO2NvbnN0IGw9KG4tdCkqbysocy1hKSppO3JldHVybiB1KHQrbCpvLGErbCppLG4scyl9KShpKSxnPV8oci4kbWF0cml4KTtfcihtLDAsci4kbWF0cml4LGcsMCxwLHMpLGgocCksdihnKSxOdChtLGUsdCxhKX0sZ3I9KGUsdCxhLHMpPT57Y29uc3Qgbz1LZS5zaGlmdCgpLGk9S2Uuc2hpZnQoKSxjPUtlLnNoaWZ0KCksbD1LZS5zaGlmdCgpLHU9S2Uuc2hpZnQoKTtuLmRpc2FibGUobi5TVEVOQ0lMX1RFU1QpO2NvbnN0IGg9ZnIobyxsKTtrZShoKSxuLmVuYWJsZShuLlNURU5DSUxfVEVTVCksbi5mcm9udEZhY2Uobi5DQ1cpLG4uc3RlbmNpbE1hc2soMjU1KSxuLnN0ZW5jaWxGdW5jKG4uQUxXQVlTLDAsMjU1KSxuLnN0ZW5jaWxPcFNlcGFyYXRlKG4uRlJPTlQsbi5LRUVQLG4uS0VFUCxuLklOQ1JfV1JBUCksbi5zdGVuY2lsT3BTZXBhcmF0ZShuLkJBQ0ssbi5LRUVQLG4uS0VFUCxuLkRFQ1JfV1JBUCksbi5jb2xvck1hc2soITEsITEsITEsITEpO2NvbnN0IGI9ISFzLGQ9T3QoYik7cyYmU3QoZCxzKSxuLmVuYWJsZShuLlNBTVBMRV9BTFBIQV9UT19DT1ZFUkFHRSksTnQoZCxlLHQsYSksbi5kaXNhYmxlKG4uU0FNUExFX0FMUEhBX1RPX0NPVkVSQUdFKSxuLnN0ZW5jaWxGdW5jKG4uTk9URVFVQUwsMCwyNTUpLG4uc3RlbmNpbE9wKG4uS0VFUCxuLlpFUk8sbi5aRVJPKSxuLmNvbG9yTWFzayghMCwhMCwhMCwhMCksci5zYXZlKCksci50cmFuc2Zvcm0oaVswXSxpWzFdLGlbMl0saVszXSxpWzRdLGlbNV0pO2NvbnN0IGY9ci4kc3RhY2tbci4kc3RhY2subGVuZ3RoLTFdLG09XyhyLiRtYXRyaXgpLHA9dnIoITAsQm9vbGVhbih1KSxjLGIpO19yKHAsMSxmLG0sdSxzKSxyLnJlc3RvcmUoKSx2KG0pLE50KHAsZSx0LGEpfSx4cj1uZXcgTWFwLEVyPShlLHQsYSxzKT0+e24uc3RlbmNpbEZ1bmMobi5BTFdBWVMsMCwyNTUpLG4uc3RlbmNpbE9wU2VwYXJhdGUobi5GUk9OVCxuLktFRVAsbi5LRUVQLG4uSU5DUl9XUkFQKSxuLnN0ZW5jaWxPcFNlcGFyYXRlKG4uQkFDSyxuLktFRVAsbi5LRUVQLG4uREVDUl9XUkFQKSxuLmNvbG9yTWFzayghMSwhMSwhMSwhMSk7Y29uc3Qgbz0hIXMsaT1PdChvKTtzJiZTdChpLHMpLG4uZW5hYmxlKG4uU0FNUExFX0FMUEhBX1RPX0NPVkVSQUdFKSxOdChpLGUsdCxhKSxuLmRpc2FibGUobi5TQU1QTEVfQUxQSEFfVE9fQ09WRVJBR0UpO2NvbnN0IGM9eW4uc2hpZnQoKSxsPXluLnNoaWZ0KCksdT15bi5zaGlmdCgpLGg9eW4uc2hpZnQoKSxiPXluLnNoaWZ0KCksZD15bi5zaGlmdCgpLGY9eG4odSxoLGMsZCk7ci5zYXZlKCksci50cmFuc2Zvcm0obFswXSxsWzFdLGxbMl0sbFszXSxsWzRdLGxbNV0pLG4uc3RlbmNpbEZ1bmMobi5OT1RFUVVBTCwwLDI1NSksbi5zdGVuY2lsT3Aobi5LRUVQLG4uWkVSTyxuLlpFUk8pLG4uY29sb3JNYXNrKCEwLCEwLCEwLCEwKTtjb25zdCBtPSgoZSx0KT0+e2NvbnN0IG49YGIke2U/InkiOiJuIn0ke3Q/InkiOiJuIn1gO2lmKHhyLmhhcyhuKSlyZXR1cm4geHIuZ2V0KG4pO2NvbnN0IHI9ZT8iI3ZlcnNpb24gMzAwIGVzXG5wcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcblxudW5pZm9ybSBzYW1wbGVyMkQgdV90ZXh0dXJlO1xudW5pZm9ybSB2ZWM0IHVfbWVkaXVtcFsxXTtcblxuaW4gdmVjMiB2X3V2O1xub3V0IHZlYzQgb19jb2xvcjtcblxudm9pZCBtYWluKCkge1xuICAgIHZlYzIgdXYgPSBmcmFjdCh2ZWMyKHZfdXYueCwgLXZfdXYueSkgLyB1X21lZGl1bXBbMF0ueHkpO1xuICAgIFxuICAgIHZlYzQgc3JjID0gdGV4dHVyZSh1X3RleHR1cmUsIHV2KTtcbiAgICBvX2NvbG9yID0gc3JjO1xufSI6IiN2ZXJzaW9uIDMwMCBlc1xucHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XG5cbnVuaWZvcm0gc2FtcGxlcjJEIHVfdGV4dHVyZTtcbnVuaWZvcm0gdmVjNCB1X21lZGl1bXBbMV07XG5cbmluIHZlYzIgdl91djtcbm91dCB2ZWM0IG9fY29sb3I7XG5cbnZvaWQgbWFpbigpIHtcbiAgICB2ZWMyIHV2ID0gdmVjMih2X3V2LngsIHVfbWVkaXVtcFswXS55IC0gdl91di55KSAvIHVfbWVkaXVtcFswXS54eTtcblxuICAgIHZlYzQgc3JjID0gdGV4dHVyZSh1X3RleHR1cmUsIHV2KTtcbiAgICBvX2NvbG9yID0gc3JjO1xufSIsYT1uZXcgd3QoJHQodD8xNDo1LCEwLCExLHQpLHIpO3JldHVybiB4ci5zZXQobixhKSxhfSkoYixvKTsoKGUsdCxuLGEpPT57Y29uc3Qgcz1lLmhpZ2hwLG89ci4kc3RhY2tbci4kc3RhY2subGVuZ3RoLTFdO3NbMF09b1swXSxzWzFdPW9bMV0sc1syXT1vWzJdLHNbNF09b1szXSxzWzVdPW9bNF0sc1s2XT1vWzVdLHNbOF09b1s2XSxzWzldPW9bN10sc1sxMF09b1s4XTtjb25zdCBpPV8oci4kbWF0cml4KTtzWzEyXT1pWzBdLHNbMTNdPWlbMV0sc1sxNF09aVsyXSxzWzE2XT1pWzNdLHNbMTddPWlbNF0sc1sxOF09aVs1XSxzWzExXT1pWzZdLHNbMTVdPWlbN10sc1sxOV09aVs4XSxzWzNdPXgoKSxzWzddPUUoKSxhJiYoc1syMF09YVswXSxzWzIxXT1hWzFdLHNbMjJdPTAsc1syNF09YVsyXSxzWzI1XT1hWzNdLHNbMjZdPTAsc1syOF09YVs0XSxzWzI5XT1hWzVdLHNbMzBdPTEsc1szMl09YVs2XSxzWzMzXT1hWzddLHNbMzRdPTAsc1szNl09YVs4XSxzWzM3XT1hWzldLHNbMzhdPTAsc1s0MF09YVsxMF0sc1s0MV09YVsxMV0sc1s0Ml09MSxzWzMxXT1hWzEyXSxzWzM1XT1hWzEzXSxzWzM5XT1hWzE0XSxzWzQzXT1hWzE1XSxzWzQ0XT1hWzE2XSxzWzQ1XT1hWzE3XSxzWzQ2XT1hWzE4XSxzWzQ3XT1hWzE5XSxzWzQ4XT1hWzIwXSxzWzQ5XT1hWzIxXSxzWzUwXT1hWzIyXSxzWzUxXT1hWzIzXSxzWzUyXT1hWzI0XSxzWzUzXT1hWzI1XSk7Y29uc3QgYz1lLm1lZGl1bXA7Y1swXT10LGNbMV09bn0pKG0sdSxoLHMpLE50KG0sZSx0LGEpLHIucmVzdG9yZSgpLEwoZil9O2xldCB5cj0wO2NvbnN0IEFyPW5ldyBGbG9hdDMyQXJyYXkoMjU2KTtmb3IobGV0IGU9MTtlPDI1NjtlKyspQXJbZV09MjU1L2U7Y29uc3QgVHI9YXN5bmMoZSx0KT0+e2NvbnN0IGE9Y24oMCwwLGUsdCk7a2UoYSksbi5iaW5kRnJhbWVidWZmZXIobi5GUkFNRUJVRkZFUixaKSxuLmZyYW1lYnVmZmVyVGV4dHVyZTJEKG4uRlJBTUVCVUZGRVIsbi5DT0xPUl9BVFRBQ0hNRU5UMCxuLlRFWFRVUkVfMkQsYS5yZXNvdXJjZSwwKTtjb25zdCBzPW5ldyBVaW50OEFycmF5KGUqdCo0KSxvPXIuJG1haW5BdHRhY2htZW50T2JqZWN0O3MuYnl0ZUxlbmd0aD55ciYmKHlyPWMocy5ieXRlTGVuZ3RoKSxuLmJ1ZmZlckRhdGEobi5QSVhFTF9QQUNLX0JVRkZFUix5cixuLlNUUkVBTV9SRUFEKSksbi5yZWFkUGl4ZWxzKDAsby5oZWlnaHQtdCxlLHQsbi5SR0JBLG4uVU5TSUdORURfQllURSwwKTtjb25zdCBpPW4uZmVuY2VTeW5jKG4uU1lOQ19HUFVfQ09NTUFORFNfQ09NUExFVEUsMCk7YXdhaXQgbmV3IFByb21pc2UoZT0+e2NvbnN0IHQ9KCk9PntpZihuLmNsaWVudFdhaXRTeW5jKGksbi5TWU5DX0ZMVVNIX0NPTU1BTkRTX0JJVCwwKSE9PW4uVElNRU9VVF9FWFBJUkVEKXJldHVybiBuLmRlbGV0ZVN5bmMoaSksbi5nZXRCdWZmZXJTdWJEYXRhKG4uUElYRUxfUEFDS19CVUZGRVIsMCxzKSxlKCk7cmVxdWVzdEFuaW1hdGlvbkZyYW1lKHQpfTt0KCl9KSxuLmJpbmRGcmFtZWJ1ZmZlcihuLkZSQU1FQlVGRkVSLEQpO2ZvcihsZXQgZT0wO2U8cy5sZW5ndGg7ZSs9NCl7Y29uc3QgdD1zW2UrM107aWYoMD09PXR8fDI1NT09PXQpY29udGludWU7Y29uc3Qgbj1Bclt0XTtzW2VdPU1hdGgubWluKDI1NSxNYXRoLnJvdW5kKHNbZV0qbikpLHNbZSsxXT1NYXRoLm1pbigyNTUsTWF0aC5yb3VuZChzW2UrMV0qbikpLHNbZSsyXT1NYXRoLm1pbigyNTUsTWF0aC5yb3VuZChzW2UrMl0qbikpfXJldHVybiBhd2FpdCBjcmVhdGVJbWFnZUJpdG1hcChuZXcgSW1hZ2VEYXRhKG5ldyBVaW50OENsYW1wZWRBcnJheShzKSxlLHQpLHtpbWFnZU9yaWVudGF0aW9uOiJmbGlwWSIscHJlbXVsdGlwbHlBbHBoYToibm9uZSIsY29sb3JTcGFjZUNvbnZlcnNpb246Im5vbmUifSl9O2NsYXNzIFJye2NvbnN0cnVjdG9yKGEscyxpPTEpe3ZhciBjO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCIkc3RhY2siLHtlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMCx2YWx1ZTp2b2lkIDB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywiJG1hdHJpeCIse2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwLHZhbHVlOnZvaWQgMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCIkY2xlYXJDb2xvclIiLHtlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMCx2YWx1ZTp2b2lkIDB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywiJGNsZWFyQ29sb3JHIix7ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITAsdmFsdWU6dm9pZCAwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsIiRjbGVhckNvbG9yQiIse2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwLHZhbHVlOnZvaWQgMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCIkY2xlYXJDb2xvckEiLHtlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMCx2YWx1ZTp2b2lkIDB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywiJG1haW5BdHRhY2htZW50T2JqZWN0Iix7ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITAsdmFsdWU6dm9pZCAwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsIiRzdGFja0F0dGFjaG1lbnRPYmplY3QiLHtlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMCx2YWx1ZTp2b2lkIDB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywiZ2xvYmFsQWxwaGEiLHtlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMCx2YWx1ZTp2b2lkIDB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywiZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uIix7ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITAsdmFsdWU6dm9pZCAwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsImltYWdlU21vb3RoaW5nRW5hYmxlZCIse2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwLHZhbHVlOnZvaWQgMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCIkZmlsbFN0eWxlIix7ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITAsdmFsdWU6dm9pZCAwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsIiRzdHJva2VTdHlsZSIse2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwLHZhbHVlOnZvaWQgMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCJtYXNrQm91bmRzIix7ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITAsdmFsdWU6dm9pZCAwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsInRoaWNrbmVzcyIse2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwLHZhbHVlOnZvaWQgMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCJjYXBzIix7ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITAsdmFsdWU6dm9pZCAwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsImpvaW50cyIse2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwLHZhbHVlOnZvaWQgMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCJtaXRlckxpbWl0Iix7ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITAsdmFsdWU6dm9pZCAwfSksKGU9PntuPWV9KShhKSxjPWEuZ2V0UGFyYW1ldGVyKGEuTUFYX1RFWFRVUkVfU0laRSksZT1NYXRoLm1pbig0MDk2LGMvMiksKGU9Pnt0PWV9KShzKSwoZT0+e3k9ZX0pKGkpLHRoaXMuJHN0YWNrPW8oKSx0aGlzLiRzdGFja0F0dGFjaG1lbnRPYmplY3Q9bygpLHRoaXMuJG1hdHJpeD1kKDEsMCwwLDAsMSwwLDAsMCwxKSx0aGlzLiRjbGVhckNvbG9yUj0wLHRoaXMuJGNsZWFyQ29sb3JHPTAsdGhpcy4kY2xlYXJDb2xvckI9MCx0aGlzLiRjbGVhckNvbG9yQT0wLHRoaXMudGhpY2tuZXNzPTEsdGhpcy5jYXBzPTEsdGhpcy5qb2ludHM9Mix0aGlzLm1pdGVyTGltaXQ9MCx0aGlzLiRtYWluQXR0YWNobWVudE9iamVjdD1udWxsLHRoaXMuZ2xvYmFsQWxwaGE9MSx0aGlzLmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbj0ibm9ybWFsIix0aGlzLmltYWdlU21vb3RoaW5nRW5hYmxlZD0hMSx0aGlzLiRmaWxsU3R5bGU9bmV3IEZsb2F0MzJBcnJheShbMSwxLDEsMV0pLHRoaXMuJHN0cm9rZVN0eWxlPW5ldyBGbG9hdDMyQXJyYXkoWzEsMSwxLDFdKSx0aGlzLm1hc2tCb3VuZHM9e3hNaW46MCx5TWluOjAseE1heDowLHlNYXg6MH0sYS5waXhlbFN0b3JlaShhLlVOUEFDS19BTElHTk1FTlQsMSksYS5waXhlbFN0b3JlaShhLlVOUEFDS19GTElQX1lfV0VCR0wsITApLChlPT57RD1lLmNyZWF0ZUZyYW1lYnVmZmVyKCl9KShhKSwoZT0+e2o9ZS5jcmVhdGVGcmFtZWJ1ZmZlcigpfSkoYSksKChlLHQpPT57ej1lLmNyZWF0ZUZyYW1lYnVmZmVyKCksZS5iaW5kRnJhbWVidWZmZXIoZS5GUkFNRUJVRkZFUix6KSxlLmZyYW1lYnVmZmVyVGV4dHVyZTJEKGUuRlJBTUVCVUZGRVIsZS5DT0xPUl9BVFRBQ0hNRU5UMCxlLlRFWFRVUkVfMkQsdC5yZXNvdXJjZSwwKSxlLmJpbmRGcmFtZWJ1ZmZlcihlLkZSQU1FQlVGRkVSLG51bGwpLGUuYmluZEZyYW1lYnVmZmVyKGUuRFJBV19GUkFNRUJVRkZFUix6KX0pKGEsRWUoKSksKGU9PntIPWUuY3JlYXRlRnJhbWVidWZmZXIoKSxLPWUuY3JlYXRlRnJhbWVidWZmZXIoKSxaPWUuY3JlYXRlRnJhbWVidWZmZXIoKSxRPWUuY3JlYXRlQnVmZmVyKCksZS5iaW5kQnVmZmVyKGUuUElYRUxfUEFDS19CVUZGRVIsUSl9KShhKSxnbihhKSxuLmVuYWJsZShuLkJMRU5EKSxVdCgpLChlPT57WG49TWF0aC5mbG9vciguNzUqZS5nZXRQYXJhbWV0ZXIoZS5NQVhfRlJBR01FTlRfVU5JRk9STV9WRUNUT1JTKSl9KShhKSxyPXRoaXN9Y2xlYXJUcmFuc2ZlckJvdW5kcygpeygoKT0+e2ZvcihsZXQgZT0wO2U8eWUubGVuZ3RoOysrZSl7Y29uc3QgdD15ZVtlXTt0JiYodFswXT10WzFdPWJlLHRbMl09dFszXT1kZSl9Zm9yKGxldCBlPTA7ZTxUZS5sZW5ndGg7KytlKXtjb25zdCB0PVRlW2VdO3QmJih0WzBdPXRbMV09YmUsdFsyXT10WzNdPWRlKX19KSgpfXVwZGF0ZUJhY2tncm91bmRDb2xvcihlLHQsbixyKXsoKGUsdCxuLHIscyk9PntlLiRjbGVhckNvbG9yUj1hKHQsMCwxLDApLGUuJGNsZWFyQ29sb3JHPWEobiwwLDEsMCksZS4kY2xlYXJDb2xvckI9YShyLDAsMSwwKSxlLiRjbGVhckNvbG9yQT1hKHMsMCwxLDApfSkodGhpcyxlLHQsbixyKX1maWxsQmFja2dyb3VuZENvbG9yKCl7dmFyIGUsdCxyLGE7ZT10aGlzLiRjbGVhckNvbG9yUix0PXRoaXMuJGNsZWFyQ29sb3JHLHI9dGhpcy4kY2xlYXJDb2xvckIsYT10aGlzLiRjbGVhckNvbG9yQSxuLmNsZWFyQ29sb3IoZSx0LHIsYSksbi5jbGVhcihuLkNPTE9SX0JVRkZFUl9CSVR8bi5TVEVOQ0lMX0JVRkZFUl9CSVQpLG4uY2xlYXJDb2xvcigwLDAsMCwwKX1yZXNpemUoZSx0LG49ITApe09lKHRoaXMsZSx0LG4pfWNsZWFyUmVjdChlLHQscixhKXsoKGUsdCxyLGEpPT57bi5lbmFibGUobi5TQ0lTU09SX1RFU1QpLG4uc2Npc3NvcihlLHQscixhKSxuLmNsZWFyKG4uQ09MT1JfQlVGRkVSX0JJVHxuLlNURU5DSUxfQlVGRkVSX0JJVCksbi5kaXNhYmxlKG4uU0NJU1NPUl9URVNUKX0pKGUsdCxyLGEpfWJpbmQoZSl7TmUodGhpcyxlKX1zYXZlKCl7dmFyIGU7KGU9dGhpcykuJHN0YWNrLnB1c2goZCguLi5lLiRtYXRyaXgpKX1yZXN0b3JlKCl7RGUodGhpcyl9c2V0VHJhbnNmb3JtKGUsdCxuLHIsYSxzKXsoKGUsdCxuLHIsYSxzLG8pPT57ZVswXT10LGVbMV09bixlWzNdPXIsZVs0XT1hLGVbNl09cyxlWzddPW99KSh0aGlzLiRtYXRyaXgsZSx0LG4scixhLHMpfXRyYW5zZm9ybShlLHQsbixyLGEscyl7KChlLHQsbixyLGEscyxvKT0+e2NvbnN0IGk9ZS4kbWF0cml4WzBdLGM9ZS4kbWF0cml4WzFdLGw9ZS4kbWF0cml4WzNdLHU9ZS4kbWF0cml4WzRdLGg9ZS4kbWF0cml4WzZdLGI9ZS4kbWF0cml4WzddO2UuJG1hdHJpeFswXT10KmkrbipsLGUuJG1hdHJpeFsxXT10KmMrbip1LGUuJG1hdHJpeFszXT1yKmkrYSpsLGUuJG1hdHJpeFs0XT1yKmMrYSp1LGUuJG1hdHJpeFs2XT1zKmkrbypsK2gsZS4kbWF0cml4WzddPXMqYytvKnUrYn0pKHRoaXMsZSx0LG4scixhLHMpfXJlc2V0KCl7dmFyIGU7KGU9dGhpcykuZ2xvYmFsQWxwaGE9MSxlLmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbj0ibm9ybWFsIixlLmltYWdlU21vb3RoaW5nRW5hYmxlZD0hMX1iZWdpblBhdGgoKXt2YXIgZTsoZT10aGlzKS4kZmlsbFN0eWxlLmZpbGwoMSksZS4kc3Ryb2tlU3R5bGUuZmlsbCgxKSwoKCk9Pntmb3IoVC5sZW5ndGg9MDtSLmxlbmd0aDspaShSLnBvcCgpKX0pKCl9bW92ZVRvKGUsdCl7JChlLHQpfWxpbmVUbyhlLHQpeygoZSx0KT0+e1QubGVuZ3RofHwkKGUsdCksRihlLHQpfHx3KGUsdCwhMSl9KShlLHQpfXF1YWRyYXRpY0N1cnZlVG8oZSx0LG4scil7TyhlLHQsbixyKX1maWxsU3R5bGUoZSx0LG4scil7dGhpcy4kZmlsbFN0eWxlWzBdPWUsdGhpcy4kZmlsbFN0eWxlWzFdPXQsdGhpcy4kZmlsbFN0eWxlWzJdPW4sdGhpcy4kZmlsbFN0eWxlWzNdPXJ9c3Ryb2tlU3R5bGUoZSx0LG4scil7dGhpcy4kc3Ryb2tlU3R5bGVbMF09ZSx0aGlzLiRzdHJva2VTdHlsZVsxXT10LHRoaXMuJHN0cm9rZVN0eWxlWzJdPW4sdGhpcy4kc3Ryb2tlU3R5bGVbM109cn1jbG9zZVBhdGgoKXsoKCk9PntpZihULmxlbmd0aDw3KXJldHVybjtjb25zdCBlPStUWzBdLHQ9K1RbMV07RihlLHQpfHx3KGUsdCwhMSl9KSgpfWFyYyhlLHQsbil7KChlLHQsbik9Pntjb25zdCByPW4sYT0uNTUyMjg0NzQ5ODMwNzkzNipuO1AoZStyLHQrYSxlK2EsdCtyLGUsdCtyKSxQKGUtYSx0K3IsZS1yLHQrYSxlLXIsdCksUChlLXIsdC1hLGUtYSx0LXIsZSx0LXIpLFAoZSthLHQtcixlK3IsdC1hLGUrcix0KX0pKGUsdCxuKX1iZXppZXJDdXJ2ZVRvKGUsdCxuLHIsYSxzKXtQKGUsdCxuLHIsYSxzKX1maWxsKCl7KGU9Pntjb25zdCB0PU0oKTtpZighdC5sZW5ndGgpcmV0dXJuO1llLnB1c2goZSk7Y29uc3Qgbj16ZSh0KTtHZShuLmJ1ZmZlciksVmUucHVzaChuLmluZGV4Q291bnQpfSkoImZpbGwiKX1ncmFkaWVudEZpbGwoZSx0LG4scixhLHMpeygoZSx0LG4scixhLHMpPT57Y29uc3Qgbz1NKCk7aWYoIW8ubGVuZ3RoKXJldHVybjtZZS5wdXNoKDA9PT1lPyJsaW5lYXIiOiJyYWRpYWwiKTtjb25zdCBpPXplKG8pO0dlKGkuYnVmZmVyKSxWZS5wdXNoKGkuaW5kZXhDb3VudCksS2UucHVzaCh0LG4scixhKSwxPT09ZSYmS2UucHVzaChzKX0pKGUsdCxuLHIsYSxzKX1iaXRtYXBGaWxsKGUsdCxuLHIsYSxzKXsoKGUsdCxuLHIsYSxzKT0+e2NvbnN0IG89TSgpO2lmKCFvLmxlbmd0aClyZXR1cm47WWUucHVzaCgiYml0bWFwIik7Y29uc3QgaT16ZShvKTtHZShpLmJ1ZmZlciksVmUucHVzaChpLmluZGV4Q291bnQpLHluLnB1c2goZSx0LG4scixhLHMpfSkoZSx0LG4scixhLHMpfXN0cm9rZSgpeygoKT0+e2NvbnN0IGU9TSghMCk7aWYoIWUubGVuZ3RoKXJldHVybjtZZS5wdXNoKCJmaWxsIik7Y29uc3QgdD1odChlKTtHZSh0LmJ1ZmZlciksVmUucHVzaCh0LmluZGV4Q291bnQpfSkoKX1ncmFkaWVudFN0cm9rZShlLHQsbixyLGEscyl7KChlLHQsbixyLGEscyk9Pntjb25zdCBvPU0oKTtpZighby5sZW5ndGgpcmV0dXJuO1llLnB1c2goMD09PWU/ImxpbmVhciI6InJhZGlhbCIpO2NvbnN0IGk9aHQobyk7R2UoaS5idWZmZXIpLFZlLnB1c2goaS5pbmRleENvdW50KSxLZS5wdXNoKHQsbixyLGEpLDE9PT1lJiZLZS5wdXNoKHMpfSkoZSx0LG4scixhLHMpfWJpdG1hcFN0cm9rZShlLHQsbixyLGEscyl7KChlLHQsbixyLGEscyk9Pntjb25zdCBvPU0oITApO2lmKCFvLmxlbmd0aClyZXR1cm47WWUucHVzaCgiYml0bWFwIik7Y29uc3QgaT1odChvKTtHZShpLmJ1ZmZlciksVmUucHVzaChpLmluZGV4Q291bnQpLHluLnB1c2goZSx0LG4scixhLHMpfSkoZSx0LG4scixhLHMpfWNsaXAoKXsoKCk9Pntjb25zdCBlPXIuY3VycmVudEF0dGFjaG1lbnRPYmplY3Q7aWYoIWUpcmV0dXJuO2NvbnN0IHQ9TGUuZ2V0KGUuY2xpcExldmVsKSxhPXRbMF0scz10WzFdLG89dFsyXSxpPXRbM10sYz1NYXRoLmNlaWwoTWF0aC5hYnMoby1hKSksbD1NYXRoLmNlaWwoTWF0aC5hYnMoaS1zKSk7bi5lbmFibGUobi5TQ0lTU09SX1RFU1QpLG4uc2Npc3NvcihhLGUuaGVpZ2h0LXMtbCxjLGwpO2NvbnN0IHU9QXQoKTtsZXQgaD1VZS5nZXQoZS5jbGlwTGV2ZWwpLGI9MCxkPW51bGw7Y29uc3QgZj1WZS5sZW5ndGg7Zm9yKGxldCB0PTA7dDxmO3QrKyl7bi5zdGVuY2lsTWFzaygxPDxoLTEpO2NvbnN0IHI9VmVbdF07YnQuaGFzKHQpJiYoZD1idC5nZXQodCkpO2NvbnN0IGE9T3QoISFkKTtkJiZTdChhLGQpLE50KGEsdSxiLHIpLGIrPXIsKytoLGg+NyYmKGp0KCksaD1lLmNsaXBMZXZlbCsxKX1VZS5zZXQoZS5jbGlwTGV2ZWwsaCksVHQodSkscWUoKSxkdCgpLG4uZGlzYWJsZShuLlNDSVNTT1JfVEVTVCl9KSgpfWdldCBjdXJyZW50QXR0YWNobWVudE9iamVjdCgpe3JldHVybiBHKCl9Z2V0IGF0bGFzQXR0YWNobWVudE9iamVjdCgpe3JldHVybiBwZSgpfWNyZWF0ZU5vZGUoZSx0KXtyZXR1cm4gR3QoZSx0KX1yZW1vdmVOb2RlKGUpeyhlPT57Y29uc3QgdD1nZVtlLmluZGV4XTt0JiZ0LmRpc3Bvc2UoZS54LGUueSxlLncsZS5oKX0pKGUpfWJlZ2luTm9kZVJlbmRlcmluZyhlKXt2YXIgdCxyLGEsczsoZT0+e2NvbnN0IHQ9QWUoZS5pbmRleCksbj10WzBdLHI9dFsxXSxhPXRbMl0scz10WzNdO3RbMF09TWF0aC5taW4oZS54LG4pLHRbMV09TWF0aC5taW4oZS55LHIpLHRbMl09TWF0aC5tYXgoZS54K2UudyxhKSx0WzNdPU1hdGgubWF4KGUueStlLmgscyl9KShlKSx0PWUueCxyPWUueSxhPWUudyxzPWUuaCxuLmVuYWJsZShuLlNDSVNTT1JfVEVTVCksbi5zY2lzc29yKHQscixhKzEscysxKSxuLmNsZWFyKG4uQ09MT1JfQlVGRkVSX0JJVHxuLlNURU5DSUxfQlVGRkVSX0JJVCksbi5zY2lzc29yKHQscixhLHMpfWVuZE5vZGVSZW5kZXJpbmcoKXtuLmRpc2FibGUobi5TQ0lTU09SX1RFU1QpfWRyYXdGaWxsKCl7KCgpPT57Y29uc3QgZT1BdCgpO24uZW5hYmxlKG4uU1RFTkNJTF9URVNUKSxuLmZyb250RmFjZShuLkNDVyksbi5zdGVuY2lsTWFzaygyNTUpO2xldCB0PTAscj1udWxsO2ZvcihsZXQgbj0wO248WWUubGVuZ3RoO24rKylzd2l0Y2goYnQuaGFzKG4pJiYocj1idC5nZXQobikpLFllW25dKXtjYXNlImZpbGwiOntjb25zdCBuPVZlLnNoaWZ0KCk7YnIoZSx0LG4sciksdCs9bn1icmVhaztjYXNlImxpbmVhciI6e2NvbnN0IG49VmUuc2hpZnQoKTtwcihlLHQsbixyKSx0Kz1ufWJyZWFrO2Nhc2UicmFkaWFsIjp7Y29uc3Qgbj1WZS5zaGlmdCgpO2dyKGUsdCxuLHIpLHQrPW59YnJlYWs7Y2FzZSJiaXRtYXAiOntjb25zdCBuPVZlLnNoaWZ0KCk7RXIoZSx0LG4sciksdCs9bn19bi5kaXNhYmxlKG4uU1RFTkNJTF9URVNUKSxUdChlKSxxZSgpLGR0KCl9KSgpfWRyYXdEaXNwbGF5T2JqZWN0KHQsbixhLHMsbyxpKXsoZT0+e2NvbnN0IHQ9UmUoZS5pbmRleCksbj10WzBdLHI9dFsxXSxhPXRbMl0scz10WzNdO3RbMF09TWF0aC5taW4oZS54LG4pLHRbMV09TWF0aC5taW4oZS55LHIpLHRbMl09TWF0aC5tYXgoZS54K2UudyxhKSx0WzNdPU1hdGgubWF4KGUueStlLmgscyl9KSh0KSwoKHQsbixhLHMsbyxpKT0+e2NvbnN0IGM9aVswXSxsPWlbMV0sdT1pWzJdLGg9ci5nbG9iYWxBbHBoYSxiPWlbNF0vMjU1LGQ9aVs1XS8yNTUsZj1pWzZdLzI1NSx2PXIuJG1hdHJpeDtzd2l0Y2goci5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb24pe2Nhc2Uibm9ybWFsIjpjYXNlImxheWVyIjpjYXNlImFkZCI6Y2FzZSJzY3JlZW4iOmNhc2UiYWxwaGEiOmNhc2UiZXJhc2UiOmNhc2UiY29weSI6e2lmKFB0KCkhPT1yLmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbnx8RmUoKSE9PXQuaW5kZXgpe21lKEZlKCkpO2NvbnN0IGU9ci5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb247ci5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb249UHQoKSxyLmRyYXdBcnJheXNJbnN0YW5jZWQoKSxyLmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbj1lLEN0KHIuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uKSx3ZSh0LmluZGV4KSxtZSh0LmluZGV4KX1jb25zdCBuPVp0KCk7cXQucHVzaCh0LngvZSx0LnkvZSx0LncvZSx0LmgvZSx0LncsdC5oLHgoKSxFKCksdls2XSx2WzddLHZbMF0sdlsxXSx2WzNdLHZbNF0sYyxsLHUsaCxiLGQsZiwwKSxuLmNvdW50Kyt9YnJlYWs7ZGVmYXVsdDp7Y29uc3QgZT1yLmN1cnJlbnRBdHRhY2htZW50T2JqZWN0O3IuZHJhd0FycmF5c0luc3RhbmNlZCgpO2NvbnN0IGk9TWF0aC5jZWlsKE1hdGguYWJzKHMtbikpLF89TWF0aC5jZWlsKE1hdGguYWJzKG8tYSkpO2xldCBwPTAsZz0wLHg9dG4odCk7aWYoMSE9PXZbMF18fDAhPT12WzFdfHwwIT09dlszXXx8MSE9PXZbNF0pe2NvbnN0IG49aGUoaSxfLCExKSxhPW0odlswXSx2WzFdLHZbM10sdls0XSxpLzIsXy8yKSxzPW0oMSwwLDAsMSwtdC53LzIsLXQuaC8yKSxvPW0oYVswXSpzWzBdK2FbMl0qc1sxXSxhWzFdKnNbMF0rYVszXSpzWzFdLGFbMF0qc1syXSthWzJdKnNbM10sYVsxXSpzWzJdK2FbM10qc1szXSxhWzBdKnNbNF0rYVsyXSpzWzVdK2FbNF0sYVsxXSpzWzRdK2FbM10qc1s1XSthWzVdKTtyLnNhdmUoKSxyLmJpbmQobiksci5zZXRUcmFuc2Zvcm0ob1swXSxvWzFdLG9bMl0sb1szXSxvWzRdLG9bNV0pLHA9b1s0XSxnPW9bNV07Y29uc3QgYz1kbigpO2ZuKGMseC53aWR0aCx4LmhlaWdodCksa2UoeCwhMCksc24oYyksTCh4KSx4PW4udGV4dHVyZSxlZShuLCExKSxlJiZyLmJpbmQoZSksci5yZXN0b3JlKCl9KHB8fGcpJiYodls2XS09cCx2WzddLT1nKTtjb25zdCBFPWxuKHZbNl0sdls3XSxpLF8pLHk9aGUoaSxfLCExKTtyLmJpbmQoeSksbm4oRSx4KTtjb25zdCBBPVF0KHIuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uKTtibihBLGMsbCx1LGgsYixkLGYsMCksc24oQSksZSYmci5iaW5kKGUpLGhuKHkudGV4dHVyZSksKHB8fGcpJiYodls2XSs9cCx2WzddKz1nKSxMKHgpLEwoRSksZWUoeSksQ3Qoci5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb24pLHdlKHQuaW5kZXgpLG1lKHQuaW5kZXgpfX19KSh0LG4sYSxzLG8saSl9ZHJhd0FycmF5c0luc3RhbmNlZCgpeygoKT0+e2NvbnN0IGU9WnQoKTtlLmNvdW50JiYoZW4oKSxwbihyLmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbiksdm4oZSksZS5jbGVhcigpKX0pKCl9Y2xlYXJBcnJheXNJbnN0YW5jZWQoKXtadCgpLmNsZWFyKCl9dHJhbnNmZXJNYWluQ2FudmFzKCl7KCgpPT57Y29uc3QgZT1yLiRtYWluQXR0YWNobWVudE9iamVjdDtyLmJpbmQoZSksbi5iaW5kRnJhbWVidWZmZXIobi5SRUFEX0ZSQU1FQlVGRkVSLEQpLG4uYmluZEZyYW1lYnVmZmVyKG4uRFJBV19GUkFNRUJVRkZFUixudWxsKTtjb25zdCB0PWUud2lkdGgsYT1lLmhlaWdodDtuLmJsaXRGcmFtZWJ1ZmZlcigwLDAsdCxhLDAsMCx0LGEsbi5DT0xPUl9CVUZGRVJfQklULG4uTkVBUkVTVCksbi5iaW5kRnJhbWVidWZmZXIobi5EUkFXX0ZSQU1FQlVGRkVSLGopLG4uYmluZEZyYW1lYnVmZmVyKG4uRlJBTUVCVUZGRVIsRCl9KSgpfWRyYXdQaXhlbHMoZSx0KXsoKGUsdCk9Pntjb25zdCBuPXhuKGUudyxlLmgsdCkscj1ybigpO2FuKHIsZS53LGUuaCksVXQoKSxzbihyKSxMKG4pfSkoZSx0KX1kcmF3RWxlbWVudChlLHQpe0VuKGUsdCl9YmVnaW5NYXNrKCl7KCgpPT57Y29uc3QgZT1yLmN1cnJlbnRBdHRhY2htZW50T2JqZWN0O2UmJihlLm1hc2s9ITAsZS5jbGlwTGV2ZWwrKyxVZS5zZXQoZS5jbGlwTGV2ZWwsZS5jbGlwTGV2ZWwpLEllKCl8fChCZSghMCksbi5lbmFibGUobi5TVEVOQ0lMX1RFU1QpLG4uZW5hYmxlKG4uU0FNUExFX0FMUEhBX1RPX0NPVkVSQUdFKSxuLnN0ZW5jaWxGdW5jKG4uQUxXQVlTLDAsMjU1KSxuLnN0ZW5jaWxPcChuLlpFUk8sbi5JTlZFUlQsbi5JTlZFUlQpLG4uY29sb3JNYXNrKCExLCExLCExLCExKSkpfSkoKX1zZXRNYXNrQm91bmRzKGUsdCxhLHMpeygoZSx0LGEscyk9Pntjb25zdCBvPXIuY3VycmVudEF0dGFjaG1lbnRPYmplY3Q7aWYoIW8pcmV0dXJuO0xlLnNldChvLmNsaXBMZXZlbCx1KGUsdCxhLHMpKTtjb25zdCBpPU1hdGguY2VpbChNYXRoLmFicyhhLWUpKSxjPU1hdGguY2VpbChNYXRoLmFicyhzLXQpKTtuLmVuYWJsZShuLlNDSVNTT1JfVEVTVCksbi5zY2lzc29yKGUsby5oZWlnaHQtdC1jLGksYyl9KShlLHQsYSxzKX1lbmRNYXNrKCl7Q2UoKX1sZWF2ZU1hc2soKXt0aGlzLmRyYXdBcnJheXNJbnN0YW5jZWQoKSwoKCk9Pntjb25zdCBlPXIuY3VycmVudEF0dGFjaG1lbnRPYmplY3Q7aWYoIWUpcmV0dXJuO2NvbnN0IHQ9ZS5jbGlwTGV2ZWwsYT1MZS5nZXQodCkscz1hWzBdLG89YVsxXSxpPWFbMl0sYz1hWzNdO0xlLmRlbGV0ZSh0KSxVZS5kZWxldGUodCksaChhKTtjb25zdCBsPU1hdGguY2VpbChNYXRoLmFicyhpLXMpKSx1PU1hdGguY2VpbChNYXRoLmFicyhjLW8pKTtpZihuLmVuYWJsZShuLlNDSVNTT1JfVEVTVCksbi5zY2lzc29yKHMsZS5oZWlnaHQtby11LGwsdSksLS1lLmNsaXBMZXZlbCwhZS5jbGlwTGV2ZWwpcmV0dXJuIGUubWFzaz0hMSxCZSghMSksbi5jbGVhcihuLlNURU5DSUxfQlVGRkVSX0JJVCksbi5kaXNhYmxlKG4uU1RFTkNJTF9URVNUKSxuLmRpc2FibGUobi5TQ0lTU09SX1RFU1QpLFVlLmNsZWFyKCksdm9pZCBMZS5jbGVhcigpO24uc3RlbmNpbE1hc2soMTw8ZS5jbGlwTGV2ZWwpLG4uc3RlbmNpbEZ1bmMobi5BTFdBWVMsMCwyNTUpLG4uc3RlbmNpbE9wKG4uUkVQTEFDRSxuLlJFUExBQ0Usbi5SRVBMQUNFKSxuLmNvbG9yTWFzayghMSwhMSwhMSwhMSksTnQoRHQoKSx5dCgpLDAsNiksQ2UoKX0pKCl9dXNlR3JpZChlKXsoZT0+e2J0LnNldChWZS5sZW5ndGgsZSl9KShlKX1hcHBseUZpbHRlcihlLHQsbixyLGEscyxvLGksYyxsLHUpe3RoaXMuZHJhd0FycmF5c0luc3RhbmNlZCgpLGhyKGUsdCxuLHIsYSxzLG8saSxjLGwsdSl9YXN5bmMgY3JlYXRlSW1hZ2VCaXRtYXAoZSx0KXtyZXR1cm4gYXdhaXQgVHIoZSx0KX19bGV0IE1yO2xldCB3cjtsZXQgRnI9MDtsZXQgJHI9MDtsZXQgT3I9ITE7Y29uc3QgU3I9W10sa3I9KC4uLmUpPT57Y29uc3QgdD1Tci5wb3AoKXx8W107cmV0dXJuIGUubGVuZ3RoJiZ0LnB1c2goLi4uZSksdH0sQ3I9KGUsdD0xKT0+KHtSOigxNjcxMTY4MCZlKT4+MTYsRzooNjUyODAmZSk+PjgsQjoyNTUmZSxBOjI1NSp0fSksUHI9KGUsdCk9PnsoZT0+e3dyPWV9KShlKTtjb25zdCBuPWUuZ2V0Q29udGV4dCgid2ViZ2wyIix7c3RlbmNpbDohMCxwcmVtdWx0aXBsaWVkQWxwaGE6ITAsYW50aWFsaWFzOiExLGRlcHRoOiExfSk7aWYoIW4pdGhyb3cgbmV3IEVycm9yKCJ3ZWJnbDIgaXMgbm90IHN1cHBvcnRlZC4iKTt2YXIgcjtyPW5ldyBScihuLDQsdCksTXI9cn0sQnI9KGUsdCxuPSEwKT0+e0ZyPT09ZSYmJHI9PT10fHwoT3I9ITAsRnI9ZSwkcj10LE1yLnJlc2l6ZShlLHQsbiksbiYmdXIucmVzZXQoKSl9LElyPShlLHQ9ITEpPT57bGV0IG49MDtmb3IoO2UubGVuZ3RoPm47KXN3aXRjaChlW24rK10pe2Nhc2UgOTpNci5iZWdpblBhdGgoKTticmVhaztjYXNlIDA6TXIubW92ZVRvKGVbbisrXSxlW24rK10pO2JyZWFrO2Nhc2UgMjpNci5saW5lVG8oZVtuKytdLGVbbisrXSk7YnJlYWs7Y2FzZSAxOk1yLnF1YWRyYXRpY0N1cnZlVG8oZVtuKytdLGVbbisrXSxlW24rK10sZVtuKytdKTticmVhaztjYXNlIDU6aWYodCl7bis9NDticmVha31Nci5maWxsU3R5bGUoZVtuKytdLzI1NSxlW24rK10vMjU1LGVbbisrXS8yNTUsZVtuKytdLzI1NSk7YnJlYWs7Y2FzZSA3Ok1yLmZpbGwoKTticmVhaztjYXNlIDY6aWYodCl7bis9ODticmVha31Nci50aGlja25lc3M9ZVtuKytdLE1yLmNhcHM9ZVtuKytdLE1yLmpvaW50cz1lW24rK10sTXIubWl0ZXJMaW1pdD1lW24rK10sTXIuc3Ryb2tlU3R5bGUoZVtuKytdLzI1NSxlW24rK10vMjU1LGVbbisrXS8yNTUsZVtuKytdLzI1NSk7YnJlYWs7Y2FzZSA4OmlmKHQpYnJlYWs7TXIuc3Ryb2tlKCk7YnJlYWs7Y2FzZSAxMjpNci5jbG9zZVBhdGgoKTticmVhaztjYXNlIDQ6TXIuYXJjKGVbbisrXSxlW24rK10sZVtuKytdKTticmVhaztjYXNlIDM6TXIuYmV6aWVyQ3VydmVUbyhlW24rK10sZVtuKytdLGVbbisrXSxlW24rK10sZVtuKytdLGVbbisrXSk7YnJlYWs7Y2FzZSAxMDp7aWYodCl7bis9MTtjb25zdCB0PWVbbisrXTtuKz01KnQsbis9OSxNci5maWxsKCk7YnJlYWt9Y29uc3Qgcj1lW24rK10sYT1rcigpLHM9ZVtuKytdO2ZvcihsZXQgdD0wO3Q8czsrK3QpYS5wdXNoKGVbbisrXSxlW24rK10sZVtuKytdLGVbbisrXSxlW24rK10pO2NvbnN0IG89bmV3IEZsb2F0MzJBcnJheShbZVtuKytdLGVbbisrXSxlW24rK10sZVtuKytdLGVbbisrXSxlW24rK11dKSxpPWVbbisrXSxjPWVbbisrXSxsPWVbbisrXTtNci5ncmFkaWVudEZpbGwocixhLG8saSxjLGwpfWJyZWFrO2Nhc2UgMTM6e2lmKHQpe24rPTI7Y29uc3QgdD1lW24rK107bis9dCxuKz04LE1yLmZpbGwoKTticmVha31jb25zdCByPWVbbisrXSxhPWVbbisrXSxzPWVbbisrXSxvPW5ldyBVaW50OEFycmF5KGUuc3ViYXJyYXkobixuK3MpKTtuKz1zO2NvbnN0IGk9bmV3IEZsb2F0MzJBcnJheShbZVtuKytdLGVbbisrXSxlW24rK10sZVtuKytdLGVbbisrXSxlW24rK11dKTtNci5iaXRtYXBGaWxsKG8saSxyLGEsQm9vbGVhbihlW24rK10pLEJvb2xlYW4oZVtuKytdKSl9YnJlYWs7Y2FzZSAxMTp7aWYodCl7bis9MjAsTXIuZmlsbCgpO2JyZWFrfU1yLnRoaWNrbmVzcz1lW24rK10sTXIuY2Fwcz1lW24rK10sTXIuam9pbnRzPWVbbisrXSxNci5taXRlckxpbWl0PWVbbisrXTtjb25zdCByPWVbbisrXSxhPWtyKCkscz1lW24rK107Zm9yKGxldCB0PTA7dDxzOysrdClhLnB1c2goZVtuKytdLGVbbisrXSxlW24rK10sZVtuKytdLGVbbisrXSk7Y29uc3Qgbz1uZXcgRmxvYXQzMkFycmF5KFtlW24rK10sZVtuKytdLGVbbisrXSxlW24rK10sZVtuKytdLGVbbisrXV0pLGk9ZVtuKytdLGM9ZVtuKytdLGw9ZVtuKytdO01yLmdyYWRpZW50U3Ryb2tlKHIsYSxvLGksYyxsKX1icmVhaztjYXNlIDE0OntpZih0KXtuKz02O2NvbnN0IHQ9ZVtuKytdO24rPXQsbis9OCxNci5maWxsKCk7YnJlYWt9TXIudGhpY2tuZXNzPWVbbisrXSxNci5jYXBzPWVbbisrXSxNci5qb2ludHM9ZVtuKytdLE1yLm1pdGVyTGltaXQ9ZVtuKytdO2NvbnN0IHI9ZVtuKytdLGE9ZVtuKytdLHM9ZVtuKytdLG89bmV3IFVpbnQ4QXJyYXkoZS5zdWJhcnJheShuLG4rcykpO24rPXM7Y29uc3QgaT1uZXcgRmxvYXQzMkFycmF5KFtlW24rK10sZVtuKytdLGVbbisrXSxlW24rK10sZVtuKytdLGVbbisrXV0pO01yLmJpdG1hcFN0cm9rZShvLGkscixhLEJvb2xlYW4oZVtuKytdKSxCb29sZWFuKGVbbisrXSkpfX19LExyPWU9Pntzd2l0Y2goZSl7Y2FzZSAwOnJldHVybiJjb3B5IjtjYXNlIDE6cmV0dXJuImFkZCI7Y2FzZSAyOnJldHVybiJhbHBoYSI7Y2FzZSAzOnJldHVybiJkYXJrZW4iO2Nhc2UgNDpyZXR1cm4iZGlmZmVyZW5jZSI7Y2FzZSA1OnJldHVybiJlcmFzZSI7Y2FzZSA2OnJldHVybiJoYXJkbGlnaHQiO2Nhc2UgNzpyZXR1cm4iaW52ZXJ0IjtjYXNlIDg6cmV0dXJuImxheWVyIjtjYXNlIDk6cmV0dXJuImxpZ2h0ZW4iO2Nhc2UgMTA6cmV0dXJuIm11bHRpcGx5IjtjYXNlIDExOmRlZmF1bHQ6cmV0dXJuIm5vcm1hbCI7Y2FzZSAxMjpyZXR1cm4ib3ZlcmxheSI7Y2FzZSAxMzpyZXR1cm4ic2NyZWVuIjtjYXNlIDE0OnJldHVybiJzdWJ0cmFjdCJ9fSxVcj0oZSx0KT0+e2NvbnN0IG49ZS5zdWJhcnJheSh0LHQrNik7dCs9Njtjb25zdCByPWUuc3ViYXJyYXkodCx0KzgpO3QrPTg7Y29uc3QgYT1lLnN1YmFycmF5KHQsdCs0KTt0Kz00O2NvbnN0IHM9ZVt0KytdLG89ZVt0KytdLGk9ZVt0KytdLGM9ZVt0KytdLGw9Qm9vbGVhbihlW3QrK10pLHU9Qm9vbGVhbihlW3QrK10pLGg9Qm9vbGVhbihlW3QrK10pLGI9YCR7ZVt0KytdfWAsZD1lW3QrK10sZj1NYXRoLnNxcnQoblswXSpuWzBdK25bMV0qblsxXSksbT1NYXRoLnNxcnQoblsyXSpuWzJdK25bM10qblszXSk7bGV0IHY7aWYoZVt0KytdKXtpZih2PXVyLmdldChiLGAke2R9YCksIXYpcmV0dXJuIHR9ZWxzZXtjb25zdCBuPWw/bmV3IEZsb2F0MzJBcnJheSgyOCk6bnVsbDtuJiYobi5zZXQoZS5zdWJhcnJheSh0LHQrMjQpKSx0Kz0yNCksTXIudXNlR3JpZChuKTtjb25zdCByPWVbdCsrXSxhPWUuc3ViYXJyYXkodCx0K3IpO2lmKGgmJiFsKXtjb25zdCBlPU1hdGguY2VpbChNYXRoLmFicyhpLXMpKSx0PU1hdGguY2VpbChNYXRoLmFicyhjLW8pKTt2PU1yLmNyZWF0ZU5vZGUoZSx0KSx1ci5zZXQoYixgJHtkfWAsdik7Y29uc3Qgbj1Nci5jdXJyZW50QXR0YWNobWVudE9iamVjdDtNci5iaW5kKE1yLmF0bGFzQXR0YWNobWVudE9iamVjdCksTXIucmVzZXQoKSxNci5iZWdpbk5vZGVSZW5kZXJpbmcodik7Y29uc3Qgcj1Nci5hdGxhc0F0dGFjaG1lbnRPYmplY3QuaGVpZ2h0LXYueS10O01yLnNldFRyYW5zZm9ybSgxLDAsMCwxLHYueCxyKSx1PyhJcihhKSxNci5kcmF3RmlsbCgpKTpNci5kcmF3UGl4ZWxzKHYsbmV3IFVpbnQ4QXJyYXkoYSkpLE1yLmVuZE5vZGVSZW5kZXJpbmcoKSxuJiZNci5iaW5kKG4pfWVsc2V7Y29uc3QgZT1NYXRoLmNlaWwoTWF0aC5hYnMoaS1zKSpmKSx0PU1hdGguY2VpbChNYXRoLmFicyhjLW8pKm0pO3Y9TXIuY3JlYXRlTm9kZShlLHQpLHVyLnNldChiLGAke2R9YCx2KTtjb25zdCByPU1yLmN1cnJlbnRBdHRhY2htZW50T2JqZWN0O01yLmJpbmQoTXIuYXRsYXNBdHRhY2htZW50T2JqZWN0KSxNci5yZXNldCgpLE1yLmJlZ2luTm9kZVJlbmRlcmluZyh2KTtjb25zdCBsPU1yLmF0bGFzQXR0YWNobWVudE9iamVjdC5oZWlnaHQtdi55LXQ7TXIuc2V0VHJhbnNmb3JtKGYsMCwwLG0sLXMqZit2LngsLW8qbStsKSxuJiYoblsyNF09di54LG5bMjVdPWwpLElyKGEpLE1yLmRyYXdGaWxsKCksTXIuZW5kTm9kZVJlbmRlcmluZygpLHImJk1yLmJpbmQocil9dCs9cn1jb25zdCBfPWVbdCsrXTtpZihCb29sZWFuKGVbdCsrXSkpe2NvbnN0IHM9Qm9vbGVhbihlW3QrK10pLG89ZS5zdWJhcnJheSh0LHQrNCk7dCs9NDtjb25zdCBpPWVbdCsrXSxjPWUuc3ViYXJyYXkodCx0K2kpLGw9TWF0aC5jZWlsKE1hdGguYWJzKGFbMl0tYVswXSkpLHU9TWF0aC5jZWlsKE1hdGguYWJzKGFbM10tYVsxXSkpO3JldHVybiBNci5hcHBseUZpbHRlcih2LGIscyxsLHUsaCxuLHIsTHIoXyksbyxjKSx0Kz1pfWlmKE1yLmdsb2JhbEFscGhhPU1hdGgubWluKE1hdGgubWF4KDAsclszXStyWzddLzI1NSksMSksTXIuaW1hZ2VTbW9vdGhpbmdFbmFibGVkPSEwLE1yLmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbj1McihfKSxoJiYhbClNci5zZXRUcmFuc2Zvcm0oblswXSxuWzFdLG5bMl0sblszXSxuWzRdLG5bNV0pLE1yLmRyYXdEaXNwbGF5T2JqZWN0KHYsYVswXSxhWzFdLGFbMl0sYVszXSxyKTtlbHNle2NvbnN0IGU9TWF0aC5hdGFuMihuWzFdLG5bMF0pLHQ9TWF0aC5hdGFuMigtblsyXSxuWzNdKTtpZihlfHx0KXtjb25zdCByPXMqZixhPW8qbSxpPU1hdGguY29zKGUpLGM9TWF0aC5zaW4oZSksbD1NYXRoLmNvcyh0KSx1PU1hdGguc2luKHQpO01yLnNldFRyYW5zZm9ybShpLGMsLXUsbCxyKmktYSp1K25bNF0scipjK2EqbCtuWzVdKX1lbHNlIE1yLnNldFRyYW5zZm9ybSgxLDAsMCwxLGFbMF0sYVsxXSk7TXIuZHJhd0Rpc3BsYXlPYmplY3QodixhWzBdLGFbMV0sYVsyXSxhWzNdLHIpfXJldHVybiB0fSxOcj0oZSx0KT0+e2NvbnN0IG49ZS5zdWJhcnJheSh0LHQrNik7dCs9NixNci5yZXNldCgpLE1yLnNldFRyYW5zZm9ybShuWzBdLG5bMV0sblsyXSxuWzNdLG5bNF0sbls1XSk7Y29uc3Qgcj1Cb29sZWFuKGVbdCsrXSk/bmV3IEZsb2F0MzJBcnJheSgyOCk6bnVsbDtNci51c2VHcmlkKHIpLHImJihyLnNldChlLnN1YmFycmF5KHQsdCsyNCkpLHQrPTI0KTtjb25zdCBhPWVbdCsrXSxzPWUuc3ViYXJyYXkodCx0K2EpO3JldHVybiBJcihzLCEwKSx0Kz1hLE1yLmNsaXAoKSx0fSxEcj0oZSx0LG4pPT57Y29uc3Qgcj1lLndpZHRoVGFibGVbdC5saW5lXXx8MCxhPXQudGV4dEZvcm1hdCxzPWEubGVmdE1hcmdpbnx8MDtpZighbi53b3JkV3JhcCYmcj5uLnJhd1dpZHRoKXJldHVybiBNYXRoLm1heCgwLHMpO2NvbnN0IG89YS5yaWdodE1hcmdpbnx8MDtyZXR1cm4iY2VudGVyIj09PWEuYWxpZ258fCJjZW50ZXIiPT09bi5hdXRvU2l6ZT9NYXRoLm1heCgwLG4ucmF3V2lkdGgvMi1zLW8tci8yLTIpOiJyaWdodCI9PT1hLmFsaWdufHwicmlnaHQiPT09bi5hdXRvU2l6ZT9NYXRoLm1heCgwLG4ucmF3V2lkdGgtcy1yLW8tNCk6TWF0aC5tYXgoMCxzKX0sanI9ZT0+e2xldCB0PSIiO3JldHVybiBlLml0YWxpYyYmKHQrPSJpdGFsaWMgIiksZS5ib2xkJiYodCs9ImJvbGQgIiksYCR7dH0ke2Uuc2l6ZX1weCAnJHtlLmZvbnR9Jywnc2Fucy1zZXJpZidgfSx6cj1uZXcgVGV4dERlY29kZXIsWHI9KGUsdCk9Pntjb25zdCBuPWUuc3ViYXJyYXkodCx0KzYpO3QrPTY7Y29uc3Qgcj1lLnN1YmFycmF5KHQsdCs4KTt0Kz04O2NvbnN0IGE9ZS5zdWJhcnJheSh0LHQrNCk7dCs9NDtjb25zdCBzPWVbdCsrXSxvPWVbdCsrXSxpPWVbdCsrXSxjPWVbdCsrXSxsPWAke2VbdCsrXX1gLHU9ZVt0KytdLGg9Qm9vbGVhbihlW3QrK10pLGI9TWF0aC5zcXJ0KG5bMF0qblswXStuWzFdKm5bMV0pLGQ9TWF0aC5zcXJ0KG5bMl0qblsyXStuWzNdKm5bM10pO2xldCBmO2lmKGVbdCsrXSl7aWYoZj11ci5nZXQobCxgJHt1fWApLCFmKXJldHVybiB0fWVsc2V7Y29uc3Qgbj1NYXRoLmNlaWwoTWF0aC5hYnMoaS1zKSpiKSxyPU1hdGguY2VpbChNYXRoLmFicyhjLW8pKmQpLGE9Qm9vbGVhbihlW3QrK10pO2Y9YT91ci5nZXQobCxgJHt1fWApOk1yLmNyZWF0ZU5vZGUobixyKSxhfHx1ci5zZXQobCxgJHt1fWAsZik7Y29uc3QgaD1lW3QrK10sbT1uZXcgVWludDhBcnJheShlLnN1YmFycmF5KHQsdCtoKSk7dCs9aDtsZXQgdj0ibm9uZSI7c3dpdGNoKGVbdCsrXSl7Y2FzZSAwOnY9ImNlbnRlciI7YnJlYWs7Y2FzZSAxOnY9ImxlZnQiO2JyZWFrO2Nhc2UgMjp2PSJub25lIjticmVhaztjYXNlIDM6dj0icmlnaHQifWNvbnN0IF89e3dpZHRoOm4saGVpZ2h0OnIsYXV0b1NpemU6dixzdG9wSW5kZXg6ZVt0KytdLHNjcm9sbFg6ZVt0KytdLHNjcm9sbFk6ZVt0KytdLHRleHRXaWR0aDplW3QrK10sdGV4dEhlaWdodDplW3QrK10scmF3V2lkdGg6ZVt0KytdLHJhd0hlaWdodDplW3QrK10sZm9jdXNJbmRleDplW3QrK10sc2VsZWN0SW5kZXg6ZVt0KytdLGZvY3VzVmlzaWJsZTpCb29sZWFuKGVbdCsrXSksdGhpY2tuZXNzOmVbdCsrXSx0aGlja25lc3NDb2xvcjplW3QrK10sd29yZFdyYXA6Qm9vbGVhbihlW3QrK10pLGJvcmRlcjpCb29sZWFuKGVbdCsrXSksYm9yZGVyQ29sb3I6ZVt0KytdLGJhY2tncm91bmQ6Qm9vbGVhbihlW3QrK10pLGJhY2tncm91bmRDb2xvcjplW3QrK10sZGVmYXVsdENvbG9yOmVbdCsrXSxkZWZhdWx0U2l6ZTplW3QrK119LHA9KChlLHQsbixyKT0+e2NvbnN0IGE9bmV3IE9mZnNjcmVlbkNhbnZhcyh0LndpZHRoLHQuaGVpZ2h0KSxzPWEuZ2V0Q29udGV4dCgiMmQiKTtpZighcylyZXR1cm4gYTtjb25zdCBvPU1hdGgubWluKDEsTWF0aC5tYXgobixyKSk7aWYodC5iYWNrZ3JvdW5kfHx0LmJvcmRlcil7aWYocy5iZWdpblBhdGgoKSxzLm1vdmVUbygwLDApLHMubGluZVRvKHQud2lkdGgsMCkscy5saW5lVG8odC53aWR0aCx0LmhlaWdodCkscy5saW5lVG8oMCx0LmhlaWdodCkscy5saW5lVG8oMCwwKSx0LmJhY2tncm91bmQpe2NvbnN0IGU9Q3IodC5iYWNrZ3JvdW5kQ29sb3IpO3MuZmlsbFN0eWxlPWByZ2JhKCR7ZS5SfSwke2UuR30sJHtlLkJ9LCR7ZS5BfSlgLHMuZmlsbCgpfWlmKHQuYm9yZGVyKXtjb25zdCBlPUNyKHQuYm9yZGVyQ29sb3IpO3MubGluZVdpZHRoPW8scy5zdHJva2VTdHlsZT1gcmdiYSgke2UuUn0sJHtlLkd9LCR7ZS5CfSwke2UuQX0pYCxzLnN0cm9rZSgpfX1pZighZSlyZXR1cm4gYTtzLnNhdmUoKSxzLmJlZ2luUGF0aCgpLHMubW92ZVRvKDIsMikscy5saW5lVG8odC53aWR0aC0yLDIpLHMubGluZVRvKHQud2lkdGgtMix0LmhlaWdodC0yKSxzLmxpbmVUbygyLHQuaGVpZ2h0LTIpLHMubGluZVRvKDIsMikscy5jbGlwKCk7bGV0IGk9MjtpZih0LnNjcm9sbFg+MCl7Y29uc3QgZT0odC50ZXh0V2lkdGgrNC10LnJhd1dpZHRoKS90LnJhd1dpZHRoO2krPS10LnNjcm9sbFgqZX1sZXQgYz0yO2lmKHQuc2Nyb2xsWT4wKXtjb25zdCBlPSh0LnRleHRIZWlnaHQrMi10LnJhd0hlaWdodCkvdC5yYXdIZWlnaHQ7Yys9LXQuc2Nyb2xsWSplfWlmKHMuc2V0VHJhbnNmb3JtKG4sMCwwLHIsaSpuLGMqcikscy5iZWdpblBhdGgoKSx0LnNlbGVjdEluZGV4Pi0xJiZ0LmZvY3VzSW5kZXg+LTEpe2NvbnN0IG49ZS50ZXh0VGFibGUubGVuZ3RoLTE7bGV0IHI9MCxhPTA7dC5mb2N1c0luZGV4PD10LnNlbGVjdEluZGV4PyhyPU1hdGgubWluKHQuZm9jdXNJbmRleCxuKSxhPU1hdGgubWluKHQuc2VsZWN0SW5kZXgsbikpOihyPU1hdGgubWluKHQuc2VsZWN0SW5kZXgsbiksYT1NYXRoLm1pbih0LmZvY3VzSW5kZXgtMSxuKSk7Y29uc3Qgbz1lLnRleHRUYWJsZVtyXSxpPWUubGluZVRhYmxlW28ubGluZV0sYz1EcihlLGksdCk7bGV0IGw9MDtpZihyJiYidGV4dCI9PT1vLm1vZGUpe2xldCB0PXI7Zm9yKDt0Oyl7Y29uc3Qgbj1lLnRleHRUYWJsZVstLXRdO2lmKCJ0ZXh0IiE9PW4ubW9kZSlicmVhaztsKz1uLnd9fXMuZmlsbFN0eWxlPSIjYjRkN2ZmIjtsZXQgdT0wO2ZvcihsZXQgdD1yO3Q8PWE7Kyt0KXtjb25zdCBuPWUudGV4dFRhYmxlW3RdO2lmKCJ0ZXh0Ij09PW4ubW9kZSYmKHUrPW4udyx0IT09YSkpY29udGludWU7bGV0IHI9MDtjb25zdCBvPSJ0ZXh0Ij09PW4ubW9kZT9uLmxpbmU6bi5saW5lLTE7Zm9yKGxldCB0PTA7dDxvOysrdClyKz1lLmhlaWdodFRhYmxlW3RdO3MuYmVnaW5QYXRoKCkscy5yZWN0KGwscix1K2MsZS5oZWlnaHRUYWJsZVtvXSkscy5maWxsKCksbD0wLHU9MH19Y29uc3QgbD10LnJhd1dpZHRoO2xldCB1PTA7aWYodC5zY3JvbGxYPjApe2NvbnN0IGU9KHQudGV4dFdpZHRoLWwpL2w7dT10LnNjcm9sbFgqZX1jb25zdCBoPWwrdSxiPXQucmF3SGVpZ2h0O2xldCBkPTA7aWYodC5zY3JvbGxZPjApe2NvbnN0IGU9KHQudGV4dEhlaWdodC1iKS9iO2Q9dC5zY3JvbGxZKmV9Y29uc3QgZj1iK2Q7bGV0IG09MCx2PTAsXz0wLHA9MCxnPSExLHg9LTE7Zm9yKGxldCBuPTA7bjxlLnRleHRUYWJsZS5sZW5ndGg7KytuKXtjb25zdCByPWUudGV4dFRhYmxlW25dO2lmKCFyKWNvbnRpbnVlO2lmKCgidGV4dCI9PT1yLm1vZGV8fCJicmVhayI9PT1yLm1vZGUpJiYoeCsrLHQuc3RvcEluZGV4Pi0xJiZ4PnQuc3RvcEluZGV4KSlicmVhaztpZihnJiYidGV4dCI9PT1yLm1vZGUpY29udGludWU7Y29uc3QgYT1yLnRleHRGb3JtYXQ7aWYoIm5vbmUiPT09dC5hdXRvU2l6ZSl7aWYodj5mKWJyZWFrO2lmKCJ0ZXh0Ij09PXIubW9kZSYmKHU+bStyLnd8fG0+aCkpe20rPXIudztjb250aW51ZX19Y29uc3QgaT1DcihhLmNvbG9yfHwwKTtpZihzLmZpbGxTdHlsZT1gcmdiYSgke2kuUn0sJHtpLkd9LCR7aS5CfSwke2kuQX0pYCx0LmZvY3VzVmlzaWJsZSYmdC5mb2N1c0luZGV4PT09bil7Y29uc3QgdD1tK18rLjE7bGV0IG49ci5saW5lLGE9ci55LG89ZS5hc2NlbnRUYWJsZVtuXTsidGV4dCIhPT1yLm1vZGUmJihhPSJicmVhayI9PT1yLm1vZGU/ci5oOmUuYXNjZW50VGFibGVbbi0xXSxuPjA/KG49ci5saW5lLTEsbz1lLmFzY2VudFRhYmxlW25dKTpvPXIuaCksbj4wJiYwPT09ZS5hc2NlbnRUYWJsZVtuXSYmbisrO2ZvcihsZXQgdD0wO3Q8bjsrK3Qpbys9ZS5oZWlnaHRUYWJsZVt0XTtzLnN0cm9rZVN0eWxlPWByZ2JhKCR7aS5SfSwke2kuR30sJHtpLkJ9LCR7aS5BfSlgLHMuYmVnaW5QYXRoKCkscy5tb3ZlVG8odCxvKSxzLmxpbmVUbyh0LG8tYSkscy5zdHJva2UoKX1pZih0LnRoaWNrbmVzcyl7Y29uc3QgZT1Dcih0LnRoaWNrbmVzc0NvbG9yKTtzLmxpbmVXaWR0aD10LnRoaWNrbmVzcyxzLnN0cm9rZVN0eWxlPWByZ2JhKCR7ZS5SfSwke2UuR30sJHtlLkJ9LCR7ZS5BfSlgfWNvbnN0IGM9MHxyLmxpbmU7c3dpdGNoKHIubW9kZSl7Y2FzZSJicmVhayI6Y2FzZSJ3cmFwIjppZihtPTAsYyYmKHYrPWUuaGVpZ2h0VGFibGVbYy0xXSksZD52K2UuaGVpZ2h0VGFibGVbY10pe2c9ITA7Y29udGludWV9cD1lLmFzY2VudFRhYmxlW2NdLF89RHIoZSxyLHQpLGc9ITE7YnJlYWs7Y2FzZSJ0ZXh0Ijp7cy5iZWdpblBhdGgoKSxzLmZvbnQ9anIoYSk7Y29uc3QgZT1tK18sbj12K3A7aWYoYS51bmRlcmxpbmUpe2NvbnN0IHQ9Q3IoYS5jb2xvcnx8MCk7cy5saW5lV2lkdGg9byxzLnN0cm9rZVN0eWxlPWByZ2JhKCR7dC5SfSwke3QuR30sJHt0LkJ9LCR7dC5BfSlgLHMuYmVnaW5QYXRoKCkscy5tb3ZlVG8oZSxuKzIpLHMubGluZVRvKGUrci53LG4rMikscy5zdHJva2UoKX10LnRoaWNrbmVzcyYmcy5zdHJva2VUZXh0KHIudGV4dCxlLG4pLHMuZmlsbFRleHQoci50ZXh0LGUsbiksbSs9ci53fX19aWYodC5mb2N1c1Zpc2libGUmJnQuZm9jdXNJbmRleD49ZS50ZXh0VGFibGUubGVuZ3RoKXtjb25zdCBuPWUudGV4dFRhYmxlW3QuZm9jdXNJbmRleC0xXTtpZihuKXtjb25zdCBlPUNyKG4udGV4dEZvcm1hdC5jb2xvcnx8MCk7cy5zdHJva2VTdHlsZT1gcmdiYSgke2UuUn0sJHtlLkd9LCR7ZS5CfSwke2UuQX0pYDtjb25zdCB0PW0rXysuMSxyPXYrcDtzLmJlZ2luUGF0aCgpLCJ0ZXh0Ij09PW4ubW9kZT9zLm1vdmVUbyh0LHItbi55KTpzLm1vdmVUbyh0LHIrbi5oKSxzLmxpbmVUbyh0LHIpLHMuc3Ryb2tlKCl9fXJldHVybiBzLnJlc3RvcmUoKSxhfSkoSlNPTi5wYXJzZSh6ci5kZWNvZGUobSkpLF8sYixkKSxnPU1yLmN1cnJlbnRBdHRhY2htZW50T2JqZWN0O01yLmJpbmQoTXIuYXRsYXNBdHRhY2htZW50T2JqZWN0KSxNci5yZXNldCgpLE1yLmJlZ2luTm9kZVJlbmRlcmluZyhmKTtjb25zdCB4PU1yLmF0bGFzQXR0YWNobWVudE9iamVjdC5oZWlnaHQtZi55LXI7TXIuc2V0VHJhbnNmb3JtKDEsMCwwLDEsZi54LHgpLE1yLmRyYXdFbGVtZW50KGYscCksTXIuZW5kTm9kZVJlbmRlcmluZygpLGcmJk1yLmJpbmQoZyl9Y29uc3QgbT1lW3QrK107aWYoQm9vbGVhbihlW3QrK10pKXtjb25zdCBzPUJvb2xlYW4oZVt0KytdKSxvPWUuc3ViYXJyYXkodCx0KzQpO3QrPTQ7Y29uc3QgaT1lW3QrK10sYz1lLnN1YmFycmF5KHQsdCtpKSx1PU1hdGguY2VpbChNYXRoLmFicyhhWzJdLWFbMF0pKSxiPU1hdGguY2VpbChNYXRoLmFicyhhWzNdLWFbMV0pKTtyZXR1cm4gTXIuYXBwbHlGaWx0ZXIoZixsLEJvb2xlYW4oTWF0aC5tYXgoK2gsK3MpKSx1LGIsITEsbixyLExyKG0pLG8sYyksdCs9aX1Nci5nbG9iYWxBbHBoYT1NYXRoLm1pbihNYXRoLm1heCgwLHJbM10rcls3XS8yNTUpLDEpLE1yLmltYWdlU21vb3RoaW5nRW5hYmxlZD0hMCxNci5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb249THIobSk7Y29uc3Qgdj1NYXRoLmF0YW4yKG5bMV0sblswXSksXz1NYXRoLmF0YW4yKC1uWzJdLG5bM10pO2lmKHZ8fF8pe2NvbnN0IGU9cypiLHQ9bypkLHI9TWF0aC5jb3ModiksYT1NYXRoLnNpbih2KSxpPU1hdGguY29zKF8pLGM9TWF0aC5zaW4oXyk7TXIuc2V0VHJhbnNmb3JtKHIsYSwtYyxpLGUqci10KmMrbls0XSxlKmErdCppK25bNV0pfWVsc2UgTXIuc2V0VHJhbnNmb3JtKDEsMCwwLDEsYVswXSxhWzFdKTtyZXR1cm4gTXIuZHJhd0Rpc3BsYXlPYmplY3QoZixhWzBdLGFbMV0sYVsyXSxhWzNdLHIpLHR9LFdyPShlLHQsbik9Pntjb25zdCByPWUuc3ViYXJyYXkodCx0KzYpO3QrPTY7Y29uc3QgYT1lLnN1YmFycmF5KHQsdCs4KTt0Kz04O2NvbnN0IHM9ZS5zdWJhcnJheSh0LHQrNCk7dCs9NDtjb25zdCBvPWVbdCsrXSxpPWVbdCsrXSxjPWVbdCsrXSxsPWVbdCsrXSx1PWAke2VbdCsrXX1gLGg9Qm9vbGVhbihlW3QrK10pO2xldCBiO2lmKGVbdCsrXSl7aWYoYj11ci5nZXQodSwiMCIpLCFiKXJldHVybiB0fWVsc2V7Y29uc3Qgcj1NYXRoLmFicyhjLW8pLGE9TWF0aC5hYnMobC1pKSxzPUJvb2xlYW4oZVt0KytdKTtpZihiPXM/dXIuZ2V0KHUsIjAiKTpNci5jcmVhdGVOb2RlKHIsYSksc3x8dXIuc2V0KHUsIjAiLGIpLG4mJm4ubGVuZ3RoKXtjb25zdCBlPU1yLmN1cnJlbnRBdHRhY2htZW50T2JqZWN0O01yLmJpbmQoTXIuYXRsYXNBdHRhY2htZW50T2JqZWN0KSxNci5yZXNldCgpLE1yLmJlZ2luTm9kZVJlbmRlcmluZyhiKTtjb25zdCB0PU1yLmF0bGFzQXR0YWNobWVudE9iamVjdC5oZWlnaHQtYi55LWE7TXIuc2V0VHJhbnNmb3JtKDEsMCwwLDEsYi54LHQpO2NvbnN0IHI9bi5zaGlmdCgpO01yLmRyYXdFbGVtZW50KGIsciksTXIuZW5kTm9kZVJlbmRlcmluZygpLGUmJk1yLmJpbmQoZSl9fWNvbnN0IGQ9ZVt0KytdO2lmKEJvb2xlYW4oZVt0KytdKSl7Y29uc3Qgbj1Cb29sZWFuKGVbdCsrXSksbz1lLnN1YmFycmF5KHQsdCs0KTt0Kz00O2NvbnN0IGk9ZVt0KytdLGM9ZS5zdWJhcnJheSh0LHQraSksbD1NYXRoLmNlaWwoTWF0aC5hYnMoc1syXS1zWzBdKSksZj1NYXRoLmNlaWwoTWF0aC5hYnMoc1szXS1zWzFdKSk7cmV0dXJuIE1yLmFwcGx5RmlsdGVyKGIsdSxCb29sZWFuKE1hdGgubWF4KCtoLCtuKSksbCxmLCEwLHIsYSxMcihkKSxvLGMpLHQrPWl9cmV0dXJuIE1yLmdsb2JhbEFscGhhPU1hdGgubWluKE1hdGgubWF4KDAsYVszXSthWzddLzI1NSksMSksTXIuaW1hZ2VTbW9vdGhpbmdFbmFibGVkPSEwLE1yLmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbj1McihkKSxNci5zZXRUcmFuc2Zvcm0oclswXSxyWzFdLHJbMl0sclszXSxyWzRdLHJbNV0pLE1yLmRyYXdEaXNwbGF5T2JqZWN0KGIsc1swXSxzWzFdLHNbMl0sc1szXSxhKSx0fSxHcj0oZSx0KT0+e2NvbnN0IG49ZVt0KytdO2ZvcihsZXQgcj0wO3I8bjsrK3Ipe3N3aXRjaChlW3QrK10pe2Nhc2UgMDp0PUdyKGUsdCk7YnJlYWs7Y2FzZSAxOnQ9TnIoZSx0KX19cmV0dXJuIHR9LFZyPShlLHQsbik9Pntjb25zdCByPUJvb2xlYW4oZVt0KytdKTtpZihyKXtNci5kcmF3QXJyYXlzSW5zdGFuY2VkKCksTXIuc2F2ZSgpLE1yLmJlZ2luTWFzaygpLE1yLnNldE1hc2tCb3VuZHMoZVt0KytdLGVbdCsrXSxlW3QrK10sZVt0KytdKTtzd2l0Y2goZVt0KytdKXtjYXNlIDA6dD1HcihlLHQpO2JyZWFrO2Nhc2UgMTp0PU5yKGUsdCl9TXIuZW5kTWFzaygpfWxldCBhPTAscz0hMDtjb25zdCBvPWVbdCsrXTtmb3IobGV0IHI9MDtvPnI7cisrKXtjb25zdCByPWVbdCsrXSxvPWVbdCsrXTtpZihhJiZyPmEmJihzJiYoTXIucmVzdG9yZSgpLE1yLmxlYXZlTWFzaygpKSxhPTAscz0hMCksIXMpY29udGludWU7aWYobyl7aWYoYT1vLHM9Qm9vbGVhbihlW3QrK10pLCFzKWNvbnRpbnVlO01yLmRyYXdBcnJheXNJbnN0YW5jZWQoKSxNci5zYXZlKCksTXIuYmVnaW5NYXNrKCksTXIuc2V0TWFza0JvdW5kcyhlW3QrK10sZVt0KytdLGVbdCsrXSxlW3QrK10pO3N3aXRjaChlW3QrK10pe2Nhc2UgMDp0PUdyKGUsdCk7YnJlYWs7Y2FzZSAxOnQ9TnIoZSx0KX1Nci5lbmRNYXNrKCk7Y29udGludWV9aWYoIWVbdCsrXSljb250aW51ZTtjb25zdCBpPWVbdCsrXTtzd2l0Y2goaSl7Y2FzZSAwOnQ9VnIoZSx0LG4pO2JyZWFrO2Nhc2UgMTp0PVVyKGUsdCk7YnJlYWs7Y2FzZSAyOnQ9WHIoZSx0KTticmVhaztjYXNlIDM6dD1XcihlLHQsbik7YnJlYWs7ZGVmYXVsdDpjb25zb2xlLmVycm9yKCJ1bmtub3duIHR5cGUiLGkpfX1yZXR1cm4oYXx8cikmJihNci5yZXN0b3JlKCksTXIubGVhdmVNYXNrKCkpLHR9O2xldCBZcj0tMTtjb25zdCBxcj0oZSx0KT0+e01yLmNsZWFyVHJhbnNmZXJCb3VuZHMoKTtsZXQgbj0wO2NvbnN0IHI9ZVtuKytdO2ZvcihZciE9PXImJihZcj1yLC0xPT09WXI/TXIudXBkYXRlQmFja2dyb3VuZENvbG9yKDAsMCwwLDApOk1yLnVwZGF0ZUJhY2tncm91bmRDb2xvcigoWXI+PjE2JjI1NSkvMjU1LChZcj4+OCYyNTUpLzI1NSwoMjU1JllyKS8yNTUsMSkpLE1yLnJlc2V0KCksTXIuc2V0VHJhbnNmb3JtKDEsMCwwLDEsMCwwKSxNci5maWxsQmFja2dyb3VuZENvbG9yKCk7ZS5sZW5ndGg+bjspe2lmKCFlW24rK10pY29udGludWU7Y29uc3Qgcj1lW24rK107c3dpdGNoKHIpe2Nhc2UgMDpuPVZyKGUsbix0KTticmVhaztjYXNlIDE6bj1VcihlLG4pO2JyZWFrO2Nhc2UgMjpuPVhyKGUsbik7YnJlYWs7Y2FzZSAzOm49V3IoZSxuLHQpO2JyZWFrO2RlZmF1bHQ6Y29uc29sZS5lcnJvcigidW5rbm93biB0eXBlIixyKX19TXIuZHJhd0FycmF5c0luc3RhbmNlZCgpLE9yJiYod3Iud2lkdGg9RnIsd3IuaGVpZ2h0PSRyLE9yPSExKSxNci50cmFuc2Zlck1haW5DYW52YXMoKX0sS3I9ZT0+e2ZvcihsZXQgdD0wO3Q8ZS5sZW5ndGg7Kyt0KXtjb25zdCBuPWAke2VbdF19YDtpZighdXIuaGFzKG4pKWNvbnRpbnVlO2NvbnN0IHI9dXIuZ2V0QnlJZChuKTtmb3IoY29uc3QgZSBvZiByLnZhbHVlcygpKU1yLnJlbW92ZU5vZGUoZSk7dXIucmVtb3ZlQnlJZChuKX19LEhyPWFzeW5jKGUsdCxuLHI9MCxhPTAscyk9PntNci5jbGVhclRyYW5zZmVyQm91bmRzKCk7bGV0IG89MTtmb3IoTXIucmVzZXQoKSxNci5zZXRUcmFuc2Zvcm0oMSwwLDAsMSwwLDApLE1yLnVwZGF0ZUJhY2tncm91bmRDb2xvcigocj4+MTYmMjU1KS8yNTUsKHI+PjgmMjU1KS8yNTUsKDI1NSZyKS8yNTUsYSksTXIuZmlsbEJhY2tncm91bmRDb2xvcigpO2UubGVuZ3RoPm87KXtpZighZVtvKytdKWNvbnRpbnVlO2NvbnN0IHQ9ZVtvKytdO3N3aXRjaCh0KXtjYXNlIDA6bz1WcihlLG8scyk7YnJlYWs7Y2FzZSAxOm89VXIoZSxvKTticmVhaztjYXNlIDI6bz1YcihlLG8pO2JyZWFrO2Nhc2UgMzpvPVdyKGUsbyxzKTticmVhaztkZWZhdWx0OmNvbnNvbGUuZXJyb3IoInVua25vd24gdHlwZSIsdCl9fXJldHVybiBNci5kcmF3QXJyYXlzSW5zdGFuY2VkKCksYXdhaXQgTXIuY3JlYXRlSW1hZ2VCaXRtYXAodCxuKX07Y29uc3QgWnI9bmV3IGNsYXNze2NvbnN0cnVjdG9yKCl7T2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsInN0YXRlIix7ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITAsdmFsdWU6dm9pZCAwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsInF1ZXVlIix7ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITAsdmFsdWU6dm9pZCAwfSksdGhpcy5zdGF0ZT0iZGVhY3RpdmF0ZSIsdGhpcy5xdWV1ZT1bXX1hc3luYyBleGVjdXRlKCl7Zm9yKHRoaXMuc3RhdGU9ImFjdGl2ZSI7dGhpcy5xdWV1ZS5sZW5ndGg7KXtjb25zdCBlPXRoaXMucXVldWUuc2hpZnQoKTtpZihlKXN3aXRjaChlLmNvbW1hbmQpe2Nhc2UicmVuZGVyIjpxcihlLmJ1ZmZlci5zdWJhcnJheSgwLGUubGVuZ3RoKSxlLmltYWdlQml0bWFwcyksZ2xvYmFsVGhpcy5wb3N0TWVzc2FnZSh7bWVzc2FnZToicmVuZGVyIixidWZmZXI6ZS5idWZmZXJ9LFtlLmJ1ZmZlci5idWZmZXJdKTticmVhaztjYXNlInJlc2l6ZSI6QnIoZS5idWZmZXJbMF0sZS5idWZmZXJbMV0sQm9vbGVhbihlLmJ1ZmZlclsyXSkpO2JyZWFrO2Nhc2UiaW5pdGlhbGl6ZSI6UHIoZS5jYW52YXMsZS5kZXZpY2VQaXhlbFJhdGlvKTticmVhaztjYXNlInJlbW92ZUNhY2hlIjpLcihlLmJ1ZmZlcik7YnJlYWs7Y2FzZSJjYWNoZUNsZWFyIjp1ci5yZXNldCgpO2JyZWFrO2Nhc2UiY2FwdHVyZSI6e2NvbnN0IHQ9YXdhaXQgSHIoZS5idWZmZXIuc3ViYXJyYXkoMCxlLmxlbmd0aCksZS53aWR0aCxlLmhlaWdodCxlLmJnQ29sb3IsZS5iZ0FscGhhLGUuaW1hZ2VCaXRtYXBzKTtnbG9iYWxUaGlzLnBvc3RNZXNzYWdlKHttZXNzYWdlOiJjYXB0dXJlIixidWZmZXI6ZS5idWZmZXIsaW1hZ2VCaXRtYXA6dH0sW2UuYnVmZmVyLmJ1ZmZlcix0XSl9fX10aGlzLnN0YXRlPSJkZWFjdGl2YXRlIn19O3NlbGYuYWRkRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIsYXN5bmMgZT0+e1pyLnF1ZXVlLnB1c2goZS5kYXRhKSwiZGVhY3RpdmF0ZSI9PT1aci5zdGF0ZSYmYXdhaXQgWnIuZXhlY3V0ZSgpfSk7cmV0dXJue319KCk7Cg==';
|
|
1
|
+
export const workerInlineUrl = 'data:application/javascript;base64,dmFyIFJlbmRlcmVyV29ya2VyPWZ1bmN0aW9uKCl7InVzZSBzdHJpY3QiO2xldCBlPTIwNDg7bGV0IHQ9NDtsZXQgbjtsZXQgcjtjb25zdCBhPShlLHQsbixyPW51bGwpPT57Y29uc3QgYT0rZTtyZXR1cm4gaXNOYU4oYSkmJm51bGwhPT1yP3I6TWF0aC5taW4oTWF0aC5tYXgodCxpc05hTihhKT8wOmEpLG4pfSxzPVtdLG89KC4uLmUpPT57Y29uc3QgdD1zLnBvcCgpfHxbXTtyZXR1cm4gZS5sZW5ndGgmJnQucHVzaCguLi5lKSx0fSxpPShlPW51bGwpPT57ZSYmKGUubGVuZ3RoJiYoZS5sZW5ndGg9MCkscy5wdXNoKGUpKX0sYz1lPT4oZS0tLGV8PWU+PjEsZXw9ZT4+MixlfD1lPj40LGV8PWU+PjgsZXw9ZT4+MTYsKytlKSxsPVtdLHU9KGU9MCx0PTAsbj0wLHI9MCk9Pntjb25zdCBhPWwucG9wKCl8fG5ldyBGbG9hdDMyQXJyYXkoNCk7cmV0dXJuIGFbMF09ZSxhWzFdPXQsYVsyXT1uLGFbM109cixhfSxoPWU9PntsLnB1c2goZSl9LGI9W10sZD0oZT0wLHQ9MCxuPTAscj0wLGE9MCxzPTAsbz0wLGk9MCxjPTApPT57Y29uc3QgbD1iLnBvcCgpfHxuZXcgRmxvYXQzMkFycmF5KDkpO3JldHVybiBsWzBdPWUsbFsxXT10LGxbMl09bixsWzNdPXIsbFs0XT1hLGxbNV09cyxsWzZdPW8sbFs3XT1pLGxbOF09YyxsfSxmPVtdLG09KGU9MCx0PTAsbj0wLHI9MCxhPTAscz0wKT0+e2NvbnN0IG89Zi5wb3AoKXx8bmV3IEZsb2F0MzJBcnJheSg2KTtyZXR1cm4gb1swXT1lLG9bMV09dCxvWzJdPW4sb1szXT1yLG9bNF09YSxvWzVdPXMsb30sdj1lPT57Zi5wdXNoKGUpfSxfPWU9Pntjb25zdCB0PTEvKGVbMF0qZVs0XS1lWzNdKmVbMV0pLG49ZVszXSplWzddLWVbNF0qZVs2XSxyPWVbMV0qZVs2XS1lWzBdKmVbN107cmV0dXJuIGQoZVs0XSp0LDAtZVsxXSp0LDAsMC1lWzNdKnQsZVswXSp0LDAsbip0LHIqdCwxKX07bGV0IHA9MCxnPTA7Y29uc3QgeD0oKT0+cCxFPSgpPT5nO2xldCB5PTE7Y29uc3QgQT0oKT0+eSxUPW8oKSxSPW8oKSxNPShlPSExKT0+e2NvbnN0IHQ9ZT80OjEwO3JldHVybiBULmxlbmd0aDx0JiYoVC5sZW5ndGg9MCksVC5sZW5ndGgmJihSLnB1c2goVC5zbGljZSgwKSksVC5sZW5ndGg9MCksUn0sdz0oZSx0LG4pPT57VC5wdXNoKGUsdCxuKX0sRj0oZSx0KT0+e2NvbnN0IG49VC5sZW5ndGgscj0rVFtuLTNdLGE9K1Rbbi0yXTtyZXR1cm4gZT09PXImJnQ9PT1hfSwkPShlLHQpPT57VC5sZW5ndGg/RihlLHQpfHwoKChlPSExKT0+e2NvbnN0IHQ9ZT80OjEwO1QubGVuZ3RoPHR8fFIucHVzaChULnNsaWNlKDApKSxULmxlbmd0aD0wfSkoKSx3KGUsdCwhMSkpOncoZSx0LCExKX0sTz0oZSx0LG4scik9PntULmxlbmd0aHx8JCgwLDApLEYobixyKXx8KHcoZSx0LCEwKSx3KG4sciwhMSkpfSxTPW5ldyBGbG9hdDMyQXJyYXkoMzIpLGs9KGUsdCxuLHIsYSxzLG8saSxjLGwpPT57Y29uc3QgdT0uMTI1KihlKzMqKG4rYSkrbyksaD0uMTI1Kih0KzMqKHIrcykraSksYj0uMTI1KihvK2Etbi1lKSxkPS4xMjUqKGkrcy1yLXQpO1NbY109ZSxTW2MrMV09dCxTW2MrMl09LjUqKGUrbiksU1tjKzNdPS41Kih0K3IpLFNbYys0XT11LWIsU1tjKzVdPWgtZCxTW2MrNl09dSxTW2MrN109aCxTW2xdPXUsU1tsKzFdPWgsU1tsKzJdPXUrYixTW2wrM109aCtkLFNbbCs0XT0uNSooYStvKSxTW2wrNV09LjUqKHMraSksU1tsKzZdPW8sU1tsKzddPWl9LEM9KGUsdCxuLHIsYSxzLG8saSxjKT0+e2NvbnN0IGw9LjEyNSooZSszKihuK2EpK28pLHU9LjEyNSoodCszKihyK3MpK2kpO1NbY109LjI1KmUrLjc1Km4sU1tjKzFdPS4yNSp0Ky43NSpyLFNbYysyXT1sLFNbYyszXT11LFNbYys0XT0uNzUqYSsuMjUqbyxTW2MrNV09Ljc1KnMrLjI1KmksU1tjKzZdPW8sU1tjKzddPWl9LFA9KGUsdCxuLHIsYSxzKT0+e2lmKFQubGVuZ3RofHwkKDAsMCksRihhLHMpKXJldHVybjtjb25zdCBvPVQubGVuZ3RoLGk9KChlLHQsbixyLGEscyxvLGkpPT4oayhlLHQsbixyLGEscyxvLGksMCwxNiksayhTWzBdLFNbMV0sU1syXSxTWzNdLFNbNF0sU1s1XSxTWzZdLFNbN10sMCw4KSxrKFNbMTZdLFNbMTddLFNbMThdLFNbMTldLFNbMjBdLFNbMjFdLFNbMjJdLFNbMjNdLDE2LDI0KSxDKFNbMF0sU1sxXSxTWzJdLFNbM10sU1s0XSxTWzVdLFNbNl0sU1s3XSwwKSxDKFNbOF0sU1s5XSxTWzEwXSxTWzExXSxTWzEyXSxTWzEzXSxTWzE0XSxTWzE1XSw4KSxDKFNbMTZdLFNbMTddLFNbMThdLFNbMTldLFNbMjBdLFNbMjFdLFNbMjJdLFNbMjNdLDE2KSxDKFNbMjRdLFNbMjVdLFNbMjZdLFNbMjddLFNbMjhdLFNbMjldLFNbMzBdLFNbMzFdLDI0KSxTKSkoK1Rbby0zXSwrVFtvLTJdLGUsdCxuLHIsYSxzKTtmb3IobGV0IGU9MDszMj5lOylPKGlbZSsrXSxpW2UrK10saVtlKytdLGlbZSsrXSl9LEI9W10sST1lPT57bGV0IHQ9LTEsbj1CLmxlbmd0aDtmb3IoO01hdGguYWJzKG4tdCk+MTspe2NvbnN0IHI9TWF0aC5mbG9vcigobit0KS8yKTtlPD1CW3JdLmFyZWE/bj1yOnQ9cn1yZXR1cm4gbn0sTD1lPT57bi5kZWxldGVUZXh0dXJlKGUucmVzb3VyY2UpfSxVPVtdLE49W107bGV0IEQ7bGV0IGo9bnVsbDtsZXQgej1udWxsO2xldCBYPW51bGw7Y29uc3QgVz1lPT57WD1lfSxHPSgpPT5YO2xldCBWPSExO2NvbnN0IFk9ZT0+e1Y9ZX0scT0oKT0+VjtsZXQgSz1udWxsLEg9bnVsbCxaPW51bGwsUT1udWxsO2NvbnN0IEo9KCk9PkgsZWU9KGUsdD0hMCk9Pnt2YXIgcjtlLm1zYWE/KChlPT57aWYoQi5pbmRleE9mKGUpPi0xKXJldHVybjtjb25zdCB0PUkoZS5hcmVhKTtlLmRpcnR5PSEwLEIuc3BsaWNlKHQsMCxlKX0pKGUuY29sb3IpLGUuY29sb3I9bnVsbCxlLnN0ZW5jaWw9bnVsbCk6KHQmJkwoZS50ZXh0dXJlKSxlLnRleHR1cmU9bnVsbCxyPWUuc3RlbmNpbCxVLmluZGV4T2Yocik+LTF8fChVLmxlbmd0aD4xMD9uLmRlbGV0ZVJlbmRlcmJ1ZmZlcihyLnJlc291cmNlKTooci5kaXJ0eT0hMCxVLnB1c2gocikpKSxlLnN0ZW5jaWw9bnVsbCksTi5wdXNoKGUpfTtsZXQgdGU9MDtjb25zdCBuZT1lPT57aWYoIUIubGVuZ3RoKXJldHVybigoKT0+e2NvbnN0IGU9e2lkOjAscmVzb3VyY2U6bi5jcmVhdGVSZW5kZXJidWZmZXIoKSx3aWR0aDowLGhlaWdodDowLGFyZWE6MCxkaXJ0eTohMX07cmV0dXJue3Jlc291cmNlOm4uY3JlYXRlUmVuZGVyYnVmZmVyKCksc3RlbmNpbDplLHdpZHRoOjAsaGVpZ2h0OjAsYXJlYTowLGRpcnR5OiExfX0pKCk7Y29uc3QgdD1JKGUpO2lmKHQ8Qi5sZW5ndGgpe2NvbnN0IGU9Qlt0XTtyZXR1cm4gQi5zcGxpY2UodCwxKSxlfWNvbnN0IHI9Qi5zaGlmdCgpO2lmKCFyKXRocm93IG5ldyBFcnJvcigidGhlIGNvbG9yIGJ1ZmZlciBpcyB2b2lkLiIpO3JldHVybiByfTtsZXQgcmU9MDtjb25zdCBhZT0oZSx0KT0+e2lmKCFVLmxlbmd0aClyZXR1cm57aWQ6cmUrKyxyZXNvdXJjZTpuLmNyZWF0ZVJlbmRlcmJ1ZmZlcigpLHdpZHRoOjAsaGVpZ2h0OjAsYXJlYTowLGRpcnR5OiExfTtmb3IobGV0IG49MDtuPFUubGVuZ3RoOysrbil7Y29uc3Qgcj1VW25dO2lmKHIud2lkdGg9PT1lJiZyLmhlaWdodD09PXQpcmV0dXJuIFUuc3BsaWNlKG4sMSkscn1yZXR1cm4gVS5zaGlmdCgpfTtsZXQgc2U9MDtjb25zdCBvZT0oZSx0KT0+KHtpZDpzZSsrLHJlc291cmNlOm4uY3JlYXRlVGV4dHVyZSgpLHdpZHRoOmUsaGVpZ2h0OnQsYXJlYTplKnQsc21vb3RoOiExfSk7bGV0IGllPS0xO2NvbnN0IGNlPWU9PntpZT1lfSxsZT1bbnVsbCxudWxsLG51bGxdLHVlPShlLHQscj0hMSk9Pntjb25zdCBhPW9lKGUsdCk7cmV0dXJuKChlLHQ9ITEpPT57aWUhPT1uLlRFWFRVUkUwJiYoY2Uobi5URVhUVVJFMCksbi5hY3RpdmVUZXh0dXJlKG4uVEVYVFVSRTApKSxsZVswXT1lLG4uYmluZFRleHR1cmUobi5URVhUVVJFXzJELGUucmVzb3VyY2UpLG4udGV4UGFyYW1ldGVyaShuLlRFWFRVUkVfMkQsbi5URVhUVVJFX1dSQVBfUyxuLkNMQU1QX1RPX0VER0UpLG4udGV4UGFyYW1ldGVyaShuLlRFWFRVUkVfMkQsbi5URVhUVVJFX1dSQVBfVCxuLkNMQU1QX1RPX0VER0UpLG4udGV4UGFyYW1ldGVyaShuLlRFWFRVUkVfMkQsbi5URVhUVVJFX01JTl9GSUxURVIsdD9uLkxJTkVBUjpuLk5FQVJFU1QpLG4udGV4UGFyYW1ldGVyaShuLlRFWFRVUkVfMkQsbi5URVhUVVJFX01BR19GSUxURVIsdD9uLkxJTkVBUjpuLk5FQVJFU1QpLG4udGV4U3RvcmFnZTJEKG4uVEVYVFVSRV8yRCwxLG4uUkdCQTgsZS53aWR0aCxlLmhlaWdodCl9KShhLHIpLGF9LGhlPShlLHIsYT0hMSk9Pntjb25zdCBzPU4ubGVuZ3RoP04uc2hpZnQoKTp7aWQ6dGUrKyx3aWR0aDowLGhlaWdodDowLGNsaXBMZXZlbDowLG1zYWE6ITEsbWFzazohMSxjb2xvcjpudWxsLHRleHR1cmU6bnVsbCxzdGVuY2lsOm51bGx9O3JldHVybiBzLndpZHRoPWUscy5oZWlnaHQ9cixhPyhzLm1zYWE9ITAscy50ZXh0dXJlPW51bGwscy5jb2xvcj0oKGUscik9PntlPU1hdGgubWF4KDI1NixjKGUpKSxyPU1hdGgubWF4KDI1NixjKHIpKTtjb25zdCBhPW5lKGUqcik7cmV0dXJuKGEud2lkdGg8ZXx8YS5oZWlnaHQ8cikmJihlPU1hdGgubWF4KGUsYS53aWR0aCkscj1NYXRoLm1heChyLGEuaGVpZ2h0KSxhLndpZHRoPWUsYS5oZWlnaHQ9cixhLmFyZWE9ZSpyLG4uYmluZFJlbmRlcmJ1ZmZlcihuLlJFTkRFUkJVRkZFUixhLnJlc291cmNlKSxuLnJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZShuLlJFTkRFUkJVRkZFUix0LG4uUkdCQTgsZSxyKSxuLmJpbmRSZW5kZXJidWZmZXIobi5SRU5ERVJCVUZGRVIsYS5zdGVuY2lsLnJlc291cmNlKSxuLnJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZShuLlJFTkRFUkJVRkZFUix0LG4uU1RFTkNJTF9JTkRFWDgsZSxyKSksYS5kaXJ0eT0hMCxhfSkoZSxyKSxzLnN0ZW5jaWw9cy5jb2xvci5zdGVuY2lsKToocy5tc2FhPSExLHMudGV4dHVyZT11ZShlLHIpLHMuY29sb3I9bnVsbCxzLnN0ZW5jaWw9KChlLHQpPT57Y29uc3Qgcj1hZShlLHQpO3JldHVybiByLndpZHRoPT09ZSYmci5oZWlnaHQ9PT10fHwoci53aWR0aD1lLHIuaGVpZ2h0PXQsci5hcmVhPWUqdCxyLmRpcnR5PSExLG4uYmluZFJlbmRlcmJ1ZmZlcihuLlJFTkRFUkJVRkZFUixyLnJlc291cmNlKSxuLnJlbmRlcmJ1ZmZlclN0b3JhZ2Uobi5SRU5ERVJCVUZGRVIsbi5TVEVOQ0lMX0lOREVYOCxlLHQpKSxyfSkoZSxyKSkscy5tYXNrPSExLHMuY2xpcExldmVsPTAsc30sYmU9TnVtYmVyLk1BWF9WQUxVRSxkZT0tTnVtYmVyLk1BWF9WQUxVRTtsZXQgZmU9MDtjb25zdCBtZT1lPT57ZmU9ZX0sdmU9KCk9PmZlLF9lPVtdLHBlPSgpPT57dmFyIHQ7cmV0dXJuIGZlIGluIF9lfHwodD1oZShlLGUsITApLF9lW2ZlXT10KSxfZVtmZV19LGdlPVtdO2xldCB4ZT1udWxsO2NvbnN0IEVlPSgpPT4oeGV8fCh4ZT0oKCk9Pntjb25zdCB0PW9lKGUsZSk7cmV0dXJuIG4uYWN0aXZlVGV4dHVyZShuLlRFWFRVUkUzKSxuLmJpbmRUZXh0dXJlKG4uVEVYVFVSRV8yRCx0LnJlc291cmNlKSxuLnRleFBhcmFtZXRlcmkobi5URVhUVVJFXzJELG4uVEVYVFVSRV9XUkFQX1Msbi5DTEFNUF9UT19FREdFKSxuLnRleFBhcmFtZXRlcmkobi5URVhUVVJFXzJELG4uVEVYVFVSRV9XUkFQX1Qsbi5DTEFNUF9UT19FREdFKSxuLnRleFBhcmFtZXRlcmkobi5URVhUVVJFXzJELG4uVEVYVFVSRV9NSU5fRklMVEVSLG4uTElORUFSKSxuLnRleFBhcmFtZXRlcmkobi5URVhUVVJFXzJELG4uVEVYVFVSRV9NQUdfRklMVEVSLG4uTkVBUkVTVCksbi50ZXhTdG9yYWdlMkQobi5URVhUVVJFXzJELDEsbi5SR0JBOCx0LndpZHRoLHQuaGVpZ2h0KSxuLmFjdGl2ZVRleHR1cmUoLTEhPT1pZT9pZTpuLlRFWFRVUkUwKSx0fSkoKSkseGUpLHllPVtdLEFlPWU9PihlIGluIHllfHwoeWVbZV09bmV3IEZsb2F0MzJBcnJheShbYmUsYmUsZGUsZGVdKSkseWVbZV0pLFRlPVtdLFJlPWU9PihlIGluIFRlfHwoVGVbZV09bmV3IEZsb2F0MzJBcnJheShbYmUsYmUsZGUsZGVdKSksVGVbZV0pO2xldCBNZT0wO2NvbnN0IHdlPWU9PntNZT1lfSxGZT0oKT0+TWUsJGU9KCk9PntnZS5sZW5ndGg9MCxtZSgwKTtjb25zdCBlPV9lO2ZvcihsZXQgdD0wO3Q8ZS5sZW5ndGg7dCsrKWVlKGVbdF0pO2UubGVuZ3RoPTB9LE9lPShlLHQscixhPSEwKT0+e2lmKGUuY2xlYXJBcnJheXNJbnN0YW5jZWQoKSxlLiRzdGFja0F0dGFjaG1lbnRPYmplY3QubGVuZ3RoKWZvcihsZXQgdD0wO3Q8ZS4kc3RhY2tBdHRhY2htZW50T2JqZWN0Lmxlbmd0aDsrK3Qpe2NvbnN0IG49ZS4kc3RhY2tBdHRhY2htZW50T2JqZWN0W3RdO24mJmVlKG4pfWVsc2UgZS4kbWFpbkF0dGFjaG1lbnRPYmplY3QmJmVlKGUuJG1haW5BdHRhY2htZW50T2JqZWN0KTthJiYkZSgpLFcobnVsbCkscSgpJiYoWSghMSksbi5iaW5kRnJhbWVidWZmZXIobi5GUkFNRUJVRkZFUixudWxsKSksZS4kbWFpbkF0dGFjaG1lbnRPYmplY3Q9aGUodCxyLCEwKSxlLmJpbmQoZS4kbWFpbkF0dGFjaG1lbnRPYmplY3QpfSxTZT0oZSx0LHI9bnVsbCxhPSExKT0+ey0xIT09aWUmJnQ9PT1pZXx8KGNlKHQpLG4uYWN0aXZlVGV4dHVyZSh0KSk7Y29uc3Qgcz1sZVtlXTtudWxsIT09cyYmbnVsbCE9PXImJnMuaWQ9PT1yLmlkfHxyPT09c3x8KGxlW2VdPXIsbi5iaW5kVGV4dHVyZShuLlRFWFRVUkVfMkQscj9yLnJlc291cmNlOm51bGwpLHImJnIuc21vb3RoIT09YSYmKHIuc21vb3RoPWEsbi50ZXhQYXJhbWV0ZXJpKG4uVEVYVFVSRV8yRCxuLlRFWFRVUkVfTUlOX0ZJTFRFUixhP24uTElORUFSOm4uTkVBUkVTVCksbi50ZXhQYXJhbWV0ZXJpKG4uVEVYVFVSRV8yRCxuLlRFWFRVUkVfTUFHX0ZJTFRFUixhP24uTElORUFSOm4uTkVBUkVTVCkpKX0sa2U9KGUsdD0hMSk9PntTZSgyLG4uVEVYVFVSRTIsbnVsbCksU2UoMSxuLlRFWFRVUkUxLG51bGwpLFNlKDAsbi5URVhUVVJFMCxlLHQpfSxDZT0oKT0+e2NvbnN0IGU9ci5jdXJyZW50QXR0YWNobWVudE9iamVjdDtpZighZSlyZXR1cm47Y29uc3QgdD1lLmNsaXBMZXZlbDtsZXQgYT0wO2ZvcihsZXQgZT0wO2U8dDsrK2UpYXw9KDE8PHQtZSktMTtuLnN0ZW5jaWxNYXNrKDI1NSksbi5zdGVuY2lsRnVuYyhuLkVRVUFMLDI1NSZhLGEpLG4uc3RlbmNpbE9wKG4uS0VFUCxuLktFRVAsbi5LRUVQKSxuLmNvbG9yTWFzayghMCwhMCwhMCwhMCksbi5kaXNhYmxlKG4uU0FNUExFX0FMUEhBX1RPX0NPVkVSQUdFKSxuLmRpc2FibGUobi5TQ0lTU09SX1RFU1QpfTtsZXQgUGU9ITE7Y29uc3QgQmU9ZT0+e1BlPWV9LEllPSgpPT5QZSxMZT1uZXcgTWFwLFVlPW5ldyBNYXAsTmU9KGUsdCk9Pntjb25zdCByPUcoKTtpZihyJiZ0LmlkPT09ci5pZClyZXR1cm47dmFyIGEsczsoZT0+e1coZSkscSgpfHwoWSghMCksbi5iaW5kRnJhbWVidWZmZXIobi5GUkFNRUJVRkZFUixEKSksZS5tc2FhPyhuLmJpbmRSZW5kZXJidWZmZXIobi5SRU5ERVJCVUZGRVIsZS5jb2xvci5yZXNvdXJjZSksbi5mcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcihuLkZSQU1FQlVGRkVSLG4uQ09MT1JfQVRUQUNITUVOVDAsbi5SRU5ERVJCVUZGRVIsZS5jb2xvci5yZXNvdXJjZSkpOihrZShlLnRleHR1cmUpLG4uZnJhbWVidWZmZXJUZXh0dXJlMkQobi5GUkFNRUJVRkZFUixuLkNPTE9SX0FUVEFDSE1FTlQwLG4uVEVYVFVSRV8yRCxlLnRleHR1cmUucmVzb3VyY2UsMCkpLG4uYmluZFJlbmRlcmJ1ZmZlcihuLlJFTkRFUkJVRkZFUixlLnN0ZW5jaWwucmVzb3VyY2UpLG4uZnJhbWVidWZmZXJSZW5kZXJidWZmZXIobi5GUkFNRUJVRkZFUixuLlNURU5DSUxfQVRUQUNITUVOVCxuLlJFTkRFUkJVRkZFUixlLnN0ZW5jaWwucmVzb3VyY2UpfSkodCksciYmci53aWR0aD09PXQud2lkdGgmJnIuaGVpZ2h0PT09dC5oZWlnaHR8fChhPXQud2lkdGgscz10LmhlaWdodCxwPWEsZz1zLG4udmlld3BvcnQoMCwwLHQud2lkdGgsdC5oZWlnaHQpKTtjb25zdCBvPXQubXNhYT90LmNvbG9yOnQuc3RlbmNpbDt2YXIgaTtvLmRpcnR5JiYoby5kaXJ0eT0hMSxlLmNsZWFyUmVjdCgwLDAsdC53aWR0aCx0LmhlaWdodCkpLCEoaT10Lm1hc2spJiZJZSgpPyhCZSghMSksbi5kaXNhYmxlKG4uU1RFTkNJTF9URVNUKSxuLmRpc2FibGUobi5TQ0lTU09SX1RFU1QpKTppJiYhSWUoKSYmKEJlKCEwKSxuLmVuYWJsZShuLlNURU5DSUxfVEVTVCksQ2UoKSl9LERlPWU9PntpZighZS4kc3RhY2subGVuZ3RoKXJldHVybjtjb25zdCB0PWUuJHN0YWNrLnBvcCgpO3ZhciBuO2UuJG1hdHJpeFswXT10WzBdLGUuJG1hdHJpeFsxXT10WzFdLGUuJG1hdHJpeFszXT10WzNdLGUuJG1hdHJpeFs0XT10WzRdLGUuJG1hdHJpeFs2XT10WzZdLGUuJG1hdHJpeFs3XT10WzddLG49dCxiLnB1c2gobil9LGplPShlLHQsbixyLGEscyxvLGksYyxsLHUsaCxiKT0+e2NvbnN0IGQ9ZS5sZW5ndGgtNTtmb3IobGV0IGY9MztmPGQ7Zis9Myl7bGV0IGQ9MTcqbjtlW2YrMl0/KHRbZCsrXT1lW2YtM10sdFtkKytdPWVbZi0yXSx0W2QrK109MCx0W2QrK109MCx0W2QrK109bCx0W2QrK109dSx0W2QrK109aCx0W2QrK109Yix0W2QrK109cix0W2QrK109YSx0W2QrK109MCx0W2QrK109cyx0W2QrK109byx0W2QrK109MCx0W2QrK109aSx0W2QrK109Yyx0W2QrK109MCx0W2QrK109ZVtmXSx0W2QrK109ZVtmKzFdLHRbZCsrXT0uNSx0W2QrK109MCx0W2QrK109bCx0W2QrK109dSx0W2QrK109aCx0W2QrK109Yix0W2QrK109cix0W2QrK109YSx0W2QrK109MCx0W2QrK109cyx0W2QrK109byx0W2QrK109MCx0W2QrK109aSx0W2QrK109Yyx0W2QrK109MCx0W2QrK109ZVtmKzNdLHRbZCsrXT1lW2YrNF0sdFtkKytdPTEsdFtkKytdPTEsdFtkKytdPWwsdFtkKytdPXUsdFtkKytdPWgsdFtkKytdPWIsdFtkKytdPXIsdFtkKytdPWEsdFtkKytdPTAsdFtkKytdPXMsdFtkKytdPW8sdFtkKytdPTAsdFtkKytdPWksdFtkKytdPWMsdFtkKytdPTApOmVbZis1XT8odFtkKytdPWVbMF0sdFtkKytdPWVbMV0sdFtkKytdPS41LHRbZCsrXT0uNSx0W2QrK109bCx0W2QrK109dSx0W2QrK109aCx0W2QrK109Yix0W2QrK109cix0W2QrK109YSx0W2QrK109MCx0W2QrK109cyx0W2QrK109byx0W2QrK109MCx0W2QrK109aSx0W2QrK109Yyx0W2QrK109MCx0W2QrK109ZVtmXSx0W2QrK109ZVtmKzFdLHRbZCsrXT0uNSx0W2QrK109LjUsdFtkKytdPWwsdFtkKytdPXUsdFtkKytdPWgsdFtkKytdPWIsdFtkKytdPXIsdFtkKytdPWEsdFtkKytdPTAsdFtkKytdPXMsdFtkKytdPW8sdFtkKytdPTAsdFtkKytdPWksdFtkKytdPWMsdFtkKytdPTAsdFtkKytdPWVbZis2XSx0W2QrK109ZVtmKzddLHRbZCsrXT0uNSx0W2QrK109LjUsdFtkKytdPWwsdFtkKytdPXUsdFtkKytdPWgsdFtkKytdPWIsdFtkKytdPXIsdFtkKytdPWEsdFtkKytdPTAsdFtkKytdPXMsdFtkKytdPW8sdFtkKytdPTAsdFtkKytdPWksdFtkKytdPWMsdFtkKytdPTApOih0W2QrK109ZVswXSx0W2QrK109ZVsxXSx0W2QrK109LjUsdFtkKytdPS41LHRbZCsrXT1sLHRbZCsrXT11LHRbZCsrXT1oLHRbZCsrXT1iLHRbZCsrXT1yLHRbZCsrXT1hLHRbZCsrXT0wLHRbZCsrXT1zLHRbZCsrXT1vLHRbZCsrXT0wLHRbZCsrXT1pLHRbZCsrXT1jLHRbZCsrXT0wLHRbZCsrXT1lW2ZdLHRbZCsrXT1lW2YrMV0sdFtkKytdPS41LHRbZCsrXT0uNSx0W2QrK109bCx0W2QrK109dSx0W2QrK109aCx0W2QrK109Yix0W2QrK109cix0W2QrK109YSx0W2QrK109MCx0W2QrK109cyx0W2QrK109byx0W2QrK109MCx0W2QrK109aSx0W2QrK109Yyx0W2QrK109MCx0W2QrK109ZVtmKzNdLHRbZCsrXT1lW2YrNF0sdFtkKytdPS41LHRbZCsrXT0uNSx0W2QrK109bCx0W2QrK109dSx0W2QrK109aCx0W2QrK109Yix0W2QrK109cix0W2QrK109YSx0W2QrK109MCx0W2QrK109cyx0W2QrK109byx0W2QrK109MCx0W2QrK109aSx0W2QrK109Yyx0W2QrK109MCksbis9M31yZXR1cm4gbn0semU9KGUsdD0iZmlsbCIpPT57Y29uc3Qgbj0iZmlsbCI9PT10P3IuJGZpbGxTdHlsZTpyLiRzdHJva2VTdHlsZSxhPW5bMF0scz1uWzFdLG89blsyXSxpPW5bM10sYz1yLiRtYXRyaXgsbD14KCksdT1FKCksaD1jWzBdL2wsYj1jWzNdL2wsZD1jWzZdL2wsZj1jWzFdL3UsbT1jWzRdL3Usdj1jWzddL3U7bGV0IF89MDtmb3IobGV0IHQ9MDt0PGUubGVuZ3RoOysrdClfKz01MSooZVt0XS5sZW5ndGgvMy0yKTtjb25zdCBwPW5ldyBGbG9hdDMyQXJyYXkoXyk7bGV0IGc9MDtmb3IobGV0IHQ9MDt0PGUubGVuZ3RoOysrdClnPWplKGVbdF0scCxnLGgsZixiLG0sZCx2LGEscyxvLGkpO3JldHVybntidWZmZXI6cCxpbmRleENvdW50Omd9fTtsZXQgWGU9bmV3IEZsb2F0MzJBcnJheSgxMjgpLFdlPTA7Y29uc3QgR2U9ZT0+e2NvbnN0IHQ9ZS5sZW5ndGgrV2U7aWYodD5YZS5sZW5ndGgpe2NvbnN0IHI9bmV3IEZsb2F0MzJBcnJheSgobj10LG4tLSxufD1uPj4xLG58PW4+PjIsbnw9bj4+NCxufD1uPj44LG58PW4+PjE2LCsrbikpO3Iuc2V0KFhlKSxyLnNldChlLFdlKSxYZT1yfWVsc2UgWGUuc2V0KGUsV2UpO3ZhciBuO1dlKz1lLmxlbmd0aH0sVmU9W10sWWU9W10scWU9KCk9PntZZS5sZW5ndGg9MCxXZT0wLFZlLmxlbmd0aD0wfSxLZT1bXSxIZT0oZSx0LG4pPT57Y29uc3Qgcj17eDp0LngtZS54LHk6dC55LWUueX0sYT0oKGUsdCxuKT0+e2NvbnN0IHI9TWF0aC5zcXJ0KGUqZSt0KnQpO3JldHVybnt4Oi10L3Iqbix5OmUvcipufX0pKHIueCxyLnksbikscz17eDplLngrYS54LHk6ZS55K2EueX0sbz17eDp0LngrYS54LHk6dC55K2EueX0saT17eDplLngtYS54LHk6ZS55LWEueX0sYz17eDp0LngtYS54LHk6dC55LWEueX07cmV0dXJuW3MueCxzLnksITEsby54LG8ueSwhMSxjLngsYy55LCExLGkueCxpLnksITEscy54LHMueSwhMV19LFplPShlLHQsbik9Pih7eDplLngrKHQueC1lLngpKm4seTplLnkrKHQueS1lLnkpKm59KSxRZT0oZSx0LG4scj0uNSk9Pntjb25zdCBhPVplKGUsdCxyKSxzPVplKHQsbixyKSxvPVplKGEscyxyKTtyZXR1cm5bW2UsYSxvXSxbbyxzLG5dXX0sSmU9KGUsdCxuLHIpPT4oe3g6KDEtZSkqKjIqdC54KzIqKDEtZSkqZSpuLngrZSoqMipyLngseTooMS1lKSoqMip0LnkrMiooMS1lKSplKm4ueStlKioyKnIueX0pLGV0PShlLHQsbixyKT0+KHt4OjIqKDEtZSkqKG4ueC10LngpKzIqZSooci54LW4ueCkseToyKigxLWUpKihuLnktdC55KSsyKmUqKHIueS1uLnkpfSksdHQ9ZT0+e2NvbnN0IHQ9TWF0aC5zcXJ0KGUueCplLngrZS55KmUueSk7cmV0dXJuIDA9PT10P3t4OjAseTowfTp7eDplLngvdCx5OmUueS90fX0sbnQ9KGUsdCxuLHIpPT57Y29uc3QgYT1bMCwuNSwxXSxzPVtdO2ZvcihsZXQgbz0wO288YS5sZW5ndGg7KytvKXtjb25zdCBpPWFbb10sYz1KZShpLGUsdCxuKSxsPWV0KGksZSx0LG4pLHU9dHQoe3g6LWwueSx5OmwueH0pO3MucHVzaCh7eDpjLngrdS54KnIseTpjLnkrdS55KnJ9KX1yZXR1cm4gc30scnQ9KGUsdCxuLHIpPT57Y29uc3QgYT0oKGUsdCxuLHI9NCk9PntsZXQgYT1bW2UsdCxuXV07Zm9yKGxldCBlPTA7ZTxyOysrZSl7Y29uc3QgZT1bXTtmb3IobGV0IHQ9MDt0PGEubGVuZ3RoOysrdCl7Y29uc3Qgbj1hW3RdO2lmKCFuKWNvbnRpbnVlO2NvbnN0IHI9UWUoblswXSxuWzFdLG5bMl0sLjUpO2UucHVzaChyWzBdLHJbMV0pfWE9ZX1yZXR1cm4gYX0pKGUsdCxuLDUpLHM9W10sbz1bXTtmb3IobGV0IGU9MDtlPGEubGVuZ3RoOysrZSl7Y29uc3RbdCxuLGldPWFbZV07cy5wdXNoKG50KHQsbixpLCtyKSksby5wdXNoKG50KHQsbixpLC1yKSl9Y29uc3QgaT1zWzBdWzBdLGM9W2kueCxpLnksITFdO2ZvcihsZXQgZT0wO2U8cy5sZW5ndGg7KytlKXtjb25zdCB0PXNbZV07Yy5wdXNoKHRbMV0ueCx0WzFdLnksITAsdFsyXS54LHRbMl0ueSwhMSl9Y29uc3QgbD1bLi4ub10ucmV2ZXJzZSgpO2ZvcihsZXQgZT0wO2U8bC5sZW5ndGg7KytlKXtjb25zdFt0LG4scl09bFtlXTtsW2VdPVtyLG4sdF19Y29uc3QgdT1sWzBdWzBdO2MucHVzaCh1LngsdS55LCExKTtmb3IobGV0IGU9MDtlPGwubGVuZ3RoOysrZSl7Y29uc3QgdD1sW2VdO2MucHVzaCh0WzFdLngsdFsxXS55LCEwLHRbMl0ueCx0WzJdLnksITEpfXJldHVybiBjfSxhdD0oZSx0LG4scik9Pntjb25zdCBhPVtdO2ZvcihsZXQgcz0wO3M8ci5sZW5ndGg7cys9Myl7aWYocltzKzJdKWNvbnRpbnVlO2NvbnN0IG89cltzXSxpPXJbcysxXTtNYXRoLnNxcnQoTWF0aC5wb3coby1lLDIpK01hdGgucG93KGktdCwyKSk9PT1uJiZhLnB1c2gobyxpKX1yZXR1cm4gYX0sc3Q9bmV3IE9mZnNjcmVlbkNhbnZhcygxLDEpLmdldENvbnRleHQoIjJkIiksb3Q9KGUsdCk9PntzdC5iZWdpblBhdGgoKSxzdC5tb3ZlVG8odFswXSx0WzFdKTtmb3IobGV0IGU9MztlPHQubGVuZ3RoO2UrPTMpdFtlKzJdPyhzdC5xdWFkcmF0aWNDdXJ2ZVRvKHRbZV0sdFtlKzFdLHRbZSszXSx0W2UrNF0pLGUrPTMpOnN0LmxpbmVUbyh0W2VdLHRbZSsxXSk7c3QuY2xvc2VQYXRoKCk7Zm9yKGxldCB0PTA7dDxlLmxlbmd0aDt0Kz0yKXtjb25zdCBuPWVbdF0scj1lW3QrMV07aWYoIXN0LmlzUG9pbnRJblBhdGgobixyKSlyZXR1cm5bbixyXX1yZXR1cm4gbnVsbH0saXQ9KGUsdCxuLHIsYT0hMSk9Pntjb25zdCBzPWE/MDpyLmxlbmd0aC0xLG89YT9yLmxlbmd0aC0xOnIubGVuZ3RoLTIsaT1hdChlLHQsbixyW3NdKSxjPWF0KGUsdCxuLHJbb10pLGw9b3QoaSxyW29dKTtpZighbClyZXR1cm47Y29uc3QgdT1vdChjLHJbc10pO2lmKCF1KXJldHVybjtjb25zdCBoPU1hdGguYXRhbjIobFsxXS10LGxbMF0tZSk7bGV0IGI9TWF0aC5hdGFuMih1WzFdLXQsdVswXS1lKS1oO2I+TWF0aC5QST9iLT0yKk1hdGguUEk6YjwtTWF0aC5QSSYmKGIrPTIqTWF0aC5QSSk7Y29uc3QgZD1iLzgsZj1bZSx0LCExXTtmb3IobGV0IHI9MDtyPD04O3IrKyl7Y29uc3QgYT1oK3IqZCxzPWUrbipNYXRoLmNvcyhhKSxvPXQrbipNYXRoLnNpbihhKTtmLnB1c2gocyxvLCExKX1yLnNwbGljZSgtMSwwLGYpfSxjdD0oZSx0LG4scixhPSExKT0+e2NvbnN0IHM9YT8wOnIubGVuZ3RoLTEsbz1hP3IubGVuZ3RoLTE6ci5sZW5ndGgtMixpPWF0KGUsdCxuLHJbc10pLGM9YXQoZSx0LG4scltvXSk7aWYoaVswXT09PWNbMF0mJmlbMV09PT1jWzFdfHxpWzBdPT09Y1syXSYmaVsxXT09PWNbM10pcmV0dXJuO2NvbnN0IGw9b3QoaSxyW29dKTtpZighbClyZXR1cm47Y29uc3QgdT1vdChjLHJbc10pO3UmJnIuc3BsaWNlKC0xLDAsW2UsdCwhMSxsWzBdLGxbMV0sITEsdVswXSx1WzFdLCExLGUsdCwhMV0pfSxsdD0oZSx0LG4scixhLHM9ITEpPT57Y29uc3Qgbz1zPzA6YS5sZW5ndGgtMSxpPXM/YS5sZW5ndGgtMTphLmxlbmd0aC0yLGM9YXQoZS54LGUueSxyLGFbb10pLGw9YXQoZS54LGUueSxyLGFbaV0pO2lmKGNbMF09PT1sWzBdJiZjWzFdPT09bFsxXXx8Y1swXT09PWxbMl0mJmNbMV09PT1sWzNdKXJldHVybjtjb25zdCB1PW90KGMsYVtpXSk7aWYoIXUpcmV0dXJuO2NvbnN0IGg9b3QobCxhW29dKTtpZighaClyZXR1cm47Y29uc3QgYj10LngtZS54LGQ9dC55LWUueSxmPU1hdGguaHlwb3QoYixkKSxtPXt4OmIvZix5OmQvZn0sdj1uLngtZS54LF89bi55LWUueSxwPU1hdGguaHlwb3QodixfKSxnPXt4OnYvcCx5Ol8vcH0seD1tLngsRT1tLnkseT1nLngsQT1nLnksVD14KkEtRSp5OzA9PT1UJiZhLnNwbGljZSgtMSwwLFtlLngsZS55LCExLHVbMF0sdVsxXSwhMSxoWzBdLGhbMV0sITFdKTtjb25zdCBSPSgoaFswXS11WzBdKSpBLShoWzFdLXVbMV0pKnkpL1QsTT11WzBdK1IqeCx3PXVbMV0rUipFO2Euc3BsaWNlKC0xLDAsW2UueCxlLnksITEsdVswXSx1WzFdLCExLE0sdywhMSxlLngsZS55LCExLGhbMF0saFsxXSwhMSxNLHcsITFdKX0sdXQ9KGUsdCk9Pntjb25zdCBuPXt4OmVbMF0seTplWzFdfSxhPXt4OjAseTowfSxzPXt4OjAseTowfSxvPXt4OjAseTowfSxpPVtdO2ZvcihsZXQgYz0zO2M8ZS5sZW5ndGg7Yys9Myl7Y29uc3QgbD1lW2NdLHU9ZVtjKzFdO2lmKGVbYysyXSlhLng9bCxhLnk9dTtlbHNle2lmKHMueD1sLHMueT11LGVbYy0xXT9pLnB1c2gocnQobixhLHMsdCkpOmkucHVzaChIZShuLHMsdCkpLGkubGVuZ3RoPjEpc3dpdGNoKHIuam9pbnRzKXtjYXNlIDA6Y3Qobi54LG4ueSx0LGkpO2JyZWFrO2Nhc2UgMTpvLng9ZVtjLTZdLG8ueT1lW2MtNV0sbHQobixzLG8sdCxpKTticmVhaztjYXNlIDI6aXQobi54LG4ueSx0LGkpfW4ueD1zLngsbi55PXMueX19aWYoZVswXT09PWVbZS5sZW5ndGgtM10mJmVbMV09PT1lW2UubGVuZ3RoLTJdKXN3aXRjaChyLmpvaW50cyl7Y2FzZSAwOmN0KG4ueCxuLnksdCxpLCEwKTticmVhaztjYXNlIDE6bi54PWVbMF0sbi55PWVbMV0scy54PWVbM10scy55PWVbNF0sby54PWVbZS5sZW5ndGgtNl0sby55PWVbZS5sZW5ndGgtNV0sbHQobixzLG8sdCxpLCEwKTticmVhaztjYXNlIDI6aXQobi54LG4ueSx0LGksITApfWVsc2Ugc3dpdGNoKHIuY2Fwcyl7Y2FzZSAxOigoZSx0LG4pPT57Zm9yKGxldCByPTA7cjwyOysrcil7bGV0IGE9MCxzPTAsbz0wLGk9MDswPT09cj8oYT1lWzBdLHM9ZVsxXSxvPWVbM10saT1lWzRdKTooYT1lW2UubGVuZ3RoLTNdLHM9ZVtlLmxlbmd0aC0yXSxvPWVbZS5sZW5ndGgtNl0saT1lW2UubGVuZ3RoLTVdKTtjb25zdCBjPW8tYSxsPWktcyx1PU1hdGguYXRhbjIobCxjKSxoPXUrTWF0aC5QSS8yLGI9dS1NYXRoLlBJLzIsZD0xNixmPShiLWgpL2QsbT1bXTtmb3IobGV0IGU9MDtlPD1kO2UrKyl7Y29uc3Qgbj1iK2YqZSxyPWErdCpNYXRoLmNvcyhuKSxvPXMrdCpNYXRoLnNpbihuKTttLnB1c2gocixvLCExKX0wPT09cj9uLnVuc2hpZnQobSk6bi5wdXNoKG0pfX0pKGUsdCxpKTticmVhaztjYXNlIDI6KChlLHQsbik9Pntmb3IobGV0IHI9MDtyPDI7KytyKXtsZXQgYT0wLHM9MCxvPTAsaT0wOzA9PT1yPyhhPWVbMF0scz1lWzFdLG89ZVszXSxpPWVbNF0pOihhPWVbZS5sZW5ndGgtM10scz1lW2UubGVuZ3RoLTJdLG89ZVtlLmxlbmd0aC02XSxpPWVbZS5sZW5ndGgtNV0pO2NvbnN0IGM9LShvLWEpLGw9LShpLXMpLHU9TWF0aC5zcXJ0KGMqYytsKmwpO2lmKDA9PT11KWNvbnRpbnVlO2NvbnN0IGg9Yy91LGI9bC91LGQ9YSt0KmgsZj1zK3QqYixtPS1iLHY9W2QrdCpoK3QqbSxmK3QqYit0KmgsITEsZCt0KmgtdCptLGYrdCpiLXQqaCwhMSxkLXQqaC10Km0sZi10KmItdCpoLCExLGQrdCpoK3QqbSxmK3QqYit0KmgsITEsZC10KmgtdCptLGYtdCpiLXQqaCwhMSxkLXQqaCt0Km0sZi10KmIrdCpoLCExXTswPT09cj9uLnVuc2hpZnQodik6bi5wdXNoKHYpfX0pKGUsdCxpKX1yZXR1cm4gaX0saHQ9ZT0+e2NvbnN0IHQ9ci50aGlja25lc3MvMixuPVtdO2ZvcihsZXQgcj0wO3I8ZS5sZW5ndGg7KytyKXtjb25zdCBhPXV0KGVbcl0sdCk7bi5wdXNoKC4uLmEpfXJldHVybiB6ZShuLCJzdHJva2UiKX0sYnQ9bmV3IE1hcCxkdD0oKT0+e2J0LmNsZWFyKCl9LGZ0PSgpPT4oe2lkOiJmdW5jdGlvbiI9PXR5cGVvZiBjcnlwdG8/LnJhbmRvbVVVSUQ/Y3J5cHRvLnJhbmRvbVVVSUQoKToieHh4eHh4eHgteHh4eC00eHh4LXl4eHgteHh4eHh4eHh4eHh4Ii5yZXBsYWNlKC9beHldL2csZT0+e2NvbnN0IHQ9MTYqTWF0aC5yYW5kb20oKXwwO3JldHVybigieCI9PT1lP3Q6MyZ0fDgpLnRvU3RyaW5nKDE2KX0pLHJlc291cmNlOm4uY3JlYXRlVmVydGV4QXJyYXkoKSx2ZXJ0ZXhCdWZmZXI6bi5jcmVhdGVCdWZmZXIoKSx2ZXJ0ZXhMZW5ndGg6MH0pO2xldCBtdDtjb25zdCB2dD1lPT57bXQmJm10LmlkPT09ZS5pZHx8KG10PWUsbi5iaW5kVmVydGV4QXJyYXkoZS5yZXNvdXJjZSkpfSxfdD1bXSxwdD1uZXcgRmxvYXQzMkFycmF5KFswLDAsMCwxLDEsMCwxLDFdKTtsZXQgZ3Q7bGV0IHh0O2xldCBFdDtjb25zdCB5dD0oKT0+KEV0fHwoRXQ9KCgpPT57Y29uc3QgZT1mdCgpO3Z0KGUpLG4uYmluZEJ1ZmZlcihuLkFSUkFZX0JVRkZFUixlLnZlcnRleEJ1ZmZlcik7Y29uc3QgdD1uZXcgRmxvYXQzMkFycmF5KFswLDAsMSwwLDEsMSwwLDAsMSwxLDAsMV0pO3JldHVybiBuLmJ1ZmZlckRhdGEobi5BUlJBWV9CVUZGRVIsdCxuLlNUQVRJQ19EUkFXKSxuLmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KDApLG4udmVydGV4QXR0cmliUG9pbnRlcigwLDIsbi5GTE9BVCwhMSwwLDApLGV9KSgpKSxFdCksQXQ9KCk9Pntjb25zdCBlPSgoKT0+e2lmKF90Lmxlbmd0aClyZXR1cm4gX3QucG9wKCk7Y29uc3QgZT1mdCgpO3JldHVybiB2dChlKSxuLmJpbmRCdWZmZXIobi5BUlJBWV9CVUZGRVIsZS52ZXJ0ZXhCdWZmZXIpLG4uZW5hYmxlVmVydGV4QXR0cmliQXJyYXkoMCksbi5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheSgxKSxuLmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KDIpLG4uZW5hYmxlVmVydGV4QXR0cmliQXJyYXkoMyksbi5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheSg0KSxuLmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KDUpLG4udmVydGV4QXR0cmliUG9pbnRlcigwLDIsbi5GTE9BVCwhMSw2OCwwKSxuLnZlcnRleEF0dHJpYlBvaW50ZXIoMSwyLG4uRkxPQVQsITEsNjgsOCksbi52ZXJ0ZXhBdHRyaWJQb2ludGVyKDIsNCxuLkZMT0FULCExLDY4LDE2KSxuLnZlcnRleEF0dHJpYlBvaW50ZXIoMywzLG4uRkxPQVQsITEsNjgsMzIpLG4udmVydGV4QXR0cmliUG9pbnRlcig0LDMsbi5GTE9BVCwhMSw2OCw0NCksbi52ZXJ0ZXhBdHRyaWJQb2ludGVyKDUsMyxuLkZMT0FULCExLDY4LDU2KSxlfSkoKTt2dChlKTtjb25zdCB0PVhlLHI9V2U7cmV0dXJuIG4uYmluZEJ1ZmZlcihuLkFSUkFZX0JVRkZFUixlLnZlcnRleEJ1ZmZlciksZS52ZXJ0ZXhMZW5ndGg8dC5sZW5ndGgmJihlLnZlcnRleExlbmd0aD1jKHQubGVuZ3RoKSxuLmJ1ZmZlckRhdGEobi5BUlJBWV9CVUZGRVIsNCplLnZlcnRleExlbmd0aCxuLkRZTkFNSUNfRFJBVykpLG4uYnVmZmVyU3ViRGF0YShuLkFSUkFZX0JVRkZFUiwwLHQuc3ViYXJyYXkoMCxyKSksZX0sVHQ9ZT0+e190LmluZGV4T2YoZSk+LTF8fF90LnB1c2goZSl9O2xldCBSdD0wO2xldCBNdD0tMTtjbGFzcyB3dHtjb25zdHJ1Y3RvcihlLHQscj0hMSl7T2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsIl8kcHJvZ3JhbU9iamVjdCIse2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwLHZhbHVlOnZvaWQgMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCJfJHVuaWZvcm1NYXAiLHtlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMCx2YWx1ZTp2b2lkIDB9KSx0aGlzLl8kcHJvZ3JhbU9iamVjdD0oKGUsdCk9Pntjb25zdCByPW4uY3JlYXRlUHJvZ3JhbSgpLGE9bi5jcmVhdGVTaGFkZXIobi5WRVJURVhfU0hBREVSKTtuLnNoYWRlclNvdXJjZShhLGUpLG4uY29tcGlsZVNoYWRlcihhKTtjb25zdCBzPW4uY3JlYXRlU2hhZGVyKG4uRlJBR01FTlRfU0hBREVSKTtyZXR1cm4gbi5zaGFkZXJTb3VyY2Uocyx0KSxuLmNvbXBpbGVTaGFkZXIocyksbi5hdHRhY2hTaGFkZXIocixhKSxuLmF0dGFjaFNoYWRlcihyLHMpLG4ubGlua1Byb2dyYW0ociksbi5kZXRhY2hTaGFkZXIocixhKSxuLmRldGFjaFNoYWRlcihyLHMpLG4uZGVsZXRlU2hhZGVyKGEpLG4uZGVsZXRlU2hhZGVyKHMpLHtpZDpSdCsrLHJlc291cmNlOnJ9fSkoZSx0KSx0aGlzLl8kdW5pZm9ybU1hcD1uZXcgTWFwLCgoZSx0LHI9ITEpPT57Y29uc3QgYT1uLmdldFByb2dyYW1QYXJhbWV0ZXIoZSxuLkFDVElWRV9VTklGT1JNUyk7Zm9yKGxldCBzPTA7czxhOysrcyl7Y29uc3QgYT1uLmdldEFjdGl2ZVVuaWZvcm0oZSxzKSxvPWEubmFtZS5lbmRzV2l0aCgiWzBdIik/YS5uYW1lLnNsaWNlKDAsLTMpOmEubmFtZSxpPW4uZ2V0VW5pZm9ybUxvY2F0aW9uKGUsbyk7aWYoYS50eXBlPT09bi5TQU1QTEVSXzJEJiYxPT09YS5zaXplJiYhciljb250aW51ZTtjb25zdCBjPXt9O3N3aXRjaChhLnR5cGUpe2Nhc2Ugbi5GTE9BVF9WRUM0OmMubWV0aG9kPW4udW5pZm9ybTRmdi5iaW5kKG4saSksYy5hcnJheT1uZXcgRmxvYXQzMkFycmF5KDQqYS5zaXplKSxjLmFzc2lnbj0tMTticmVhaztjYXNlIG4uSU5UX1ZFQzQ6Yy5tZXRob2Q9bi51bmlmb3JtNGl2LmJpbmQobixpKSxjLmFycmF5PW5ldyBJbnQzMkFycmF5KDQqYS5zaXplKSxjLmFzc2lnbj0tMTticmVhaztjYXNlIG4uU0FNUExFUl8yRDpjLm1ldGhvZD1yP24udW5pZm9ybTFpLmJpbmQobixpLDMpOm4udW5pZm9ybTFpdi5iaW5kKG4saSksYy5hcnJheT1uZXcgSW50MzJBcnJheShhLnNpemUpLGMuYXNzaWduPTE7YnJlYWs7Y2FzZSBuLkZMT0FUOmNhc2Ugbi5GTE9BVF9WRUMyOmNhc2Ugbi5GTE9BVF9WRUMzOmNhc2Ugbi5GTE9BVF9NQVQyOmNhc2Ugbi5GTE9BVF9NQVQzOmNhc2Ugbi5GTE9BVF9NQVQ0OmNhc2Ugbi5JTlQ6Y2FzZSBuLklOVF9WRUMyOmNhc2Ugbi5JTlRfVkVDMzpkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiVXNlIGdsLkZMT0FUX1ZFQzQgb3IgZ2wuSU5UX1ZFQzQgaW5zdGVhZCIpfXQuc2V0KG8sYyl9fSkodGhpcy5fJHByb2dyYW1PYmplY3QucmVzb3VyY2UsdGhpcy5fJHVuaWZvcm1NYXAscil9dXNlUHJvZ3JhbSgpe3ZhciBlO2U9dGhpcy5fJHByb2dyYW1PYmplY3QsTXQhPT1lLmlkJiYoTXQ9ZS5pZCxuLnVzZVByb2dyYW0oZS5yZXNvdXJjZSkpfWJpbmRVbmlmb3JtKCl7KGU9Pntmb3IoY29uc3QgdCBvZiBlLnZhbHVlcygpKXZvaWQgMCE9PXQubWV0aG9kJiZ2b2lkIDAhPT10LmFzc2lnbiYmKHQuYXNzaWduPDA/dC5tZXRob2QodC5hcnJheSk6dC5hc3NpZ24+MCYmKHQuYXNzaWduLS0sdC5tZXRob2QodC5hcnJheSkpKX0pKHRoaXMuXyR1bmlmb3JtTWFwKX1nZXQgaGlnaHAoKXtyZXR1cm4gdGhpcy5fJHVuaWZvcm1NYXAuZ2V0KCJ1X2hpZ2hwIikuYXJyYXl9Z2V0IG1lZGl1bXAoKXtyZXR1cm4gdGhpcy5fJHVuaWZvcm1NYXAuZ2V0KCJ1X21lZGl1bXAiKS5hcnJheX1nZXQgdGV4dHVyZXMoKXtyZXR1cm4gdGhpcy5fJHVuaWZvcm1NYXAuZ2V0KCJ1X3RleHR1cmVzIikuYXJyYXl9fWNvbnN0IEZ0PW5ldyBNYXAsJHQ9KGUsdCxuLHIpPT57Y29uc3QgYT1uPyJsYXlvdXQgKGxvY2F0aW9uID0gMSkgaW4gdmVjMiBhX2JlemllcjsiOiIiLHM9bj8ib3V0IHZlYzIgdl9iZXppZXI7Ijp0PyJvdXQgdmVjMiB2X3V2OyI6IiIsbz1uPyJ2X2JlemllciA9IGFfYmV6aWVyOyI6dD8iXG4gICAgbWF0MyB1dl9tYXRyaXggPSBtYXQzKFxuICAgICAgICB1X2hpZ2hwWzBdLnh5eixcbiAgICAgICAgdV9oaWdocFsxXS54eXosXG4gICAgICAgIHVfaGlnaHBbMl0ueHl6XG4gICAgKTtcbiAgICBtYXQzIGludmVyc2VfbWF0cml4ID0gbWF0MyhcbiAgICAgICAgdV9oaWdocFszXS54eXosXG4gICAgICAgIHVfaGlnaHBbNF0ueHl6LFxuICAgICAgICB2ZWMzKHVfaGlnaHBbMl0udywgdV9oaWdocFszXS53LCB1X2hpZ2hwWzRdLncpXG4gICAgKTtcbiAgICB2X3V2ID0gKGludmVyc2VfbWF0cml4ICogdXZfbWF0cml4ICogdmVjMyhhX3ZlcnRleCwgMS4wKSkueHk7IjoiIixpPXI/KGU9PmBcbnZlYzIgYXBwbHlNYXRyaXgoaW4gdmVjMiB2ZXJ0ZXgpIHtcbiAgICBtYXQzIHBhcmVudF9tYXRyaXggPSBtYXQzKFxuICAgICAgICB1X2hpZ2hwWyR7ZX1dLnh5eixcbiAgICAgICAgdV9oaWdocFske2UrMX1dLnh5eixcbiAgICAgICAgdV9oaWdocFske2UrMn1dLnh5elxuICAgICk7XG4gICAgbWF0MyBhbmNlc3Rvcl9tYXRyaXggPSBtYXQzKFxuICAgICAgICB1X2hpZ2hwWyR7ZSszfV0ueHl6LFxuICAgICAgICB1X2hpZ2hwWyR7ZSs0fV0ueHl6LFxuICAgICAgICB1X2hpZ2hwWyR7ZSs1fV0ueHl6XG4gICAgKTtcblxuICAgIHZlYzIgcGFyZW50X29mZnNldCA9IHZlYzIodV9oaWdocFske2UrMn1dLncsIHVfaGlnaHBbJHtlKzN9XS53KTtcbiAgICB2ZWMyIHBhcmVudF9zaXplICAgPSB2ZWMyKHVfaGlnaHBbJHtlKzR9XS53LCB1X2hpZ2hwWyR7ZSs1fV0udyk7XG4gICAgdmVjNCBncmlkX21pbiA9IHVfaGlnaHBbJHtlKzZ9XTtcbiAgICB2ZWM0IGdyaWRfbWF4ID0gdV9oaWdocFske2UrN31dO1xuICAgIFxuICAgIHZlYzIgcG9zaXRpb24gPSAocGFyZW50X21hdHJpeCAqIHZlYzModmVydGV4LCAxLjApKS54eTtcbiAgICBwb3NpdGlvbiA9IChwb3NpdGlvbiAtIHBhcmVudF9vZmZzZXQpIC8gcGFyZW50X3NpemU7XG5cbiAgICB2ZWM0IGdhID0gZ3JpZF9taW47XG4gICAgdmVjNCBnYiA9IGdyaWRfbWF4ICAtIGdyaWRfbWluO1xuICAgIHZlYzQgZ2MgPSB2ZWM0KDEuMCkgLSBncmlkX21heDtcblxuICAgIHZlYzIgcGEgPSBwb3NpdGlvbjtcbiAgICB2ZWMyIHBiID0gcG9zaXRpb24gLSBncmlkX21pbi5zdDtcbiAgICB2ZWMyIHBjID0gcG9zaXRpb24gLSBncmlkX21heC5zdDtcblxuICAgIHBvc2l0aW9uID0gKGdhLnBxIC8gZ2Euc3QpICogbWluKHBhLCBnYS5zdClcbiAgICAgICAgICAgICAgICArIChnYi5wcSAvIGdiLnN0KSAqIGNsYW1wKHBiLCB2ZWMyKDAuMCksIGdiLnN0KVxuICAgICAgICAgICAgICAgICsgKGdjLnBxIC8gZ2Muc3QpICogbWF4KHZlYzIoMC4wKSwgcGMpO1xuXG4gICAgcG9zaXRpb24gPSBwb3NpdGlvbiAqIHBhcmVudF9zaXplICsgcGFyZW50X29mZnNldDtcbiAgICBwb3NpdGlvbiA9IChhbmNlc3Rvcl9tYXRyaXggKiB2ZWMzKHBvc2l0aW9uLCAxLjApKS54eTtcblxuICAgIHBvc2l0aW9uID0gcG9zaXRpb24gKyB2ZWMyKHVfaGlnaHBbJHtlKzh9XS54LCB1X2hpZ2hwWyR7ZSs4fV0ueSk7XG4gICAgcmV0dXJuIHBvc2l0aW9uIC8gdmVjMih1X2hpZ2hwWzBdLncsIHVfaGlnaHBbMV0udyk7XG59YCkodD81OjApOiJcbnZlYzIgYXBwbHlNYXRyaXgoaW4gdmVjMiB2ZXJ0ZXgpIHtcbiAgICBtYXQzIG1hdHJpeCA9IG1hdDMoYV9tYXRyaXgwLCBhX21hdHJpeDEsIGFfbWF0cml4Mik7XG4gICAgcmV0dXJuIChtYXRyaXggKiB2ZWMzKHZlcnRleCwgMS4wKSkueHk7XG59IjtyZXR1cm5gI3ZlcnNpb24gMzAwIGVzXG5cbmxheW91dCAobG9jYXRpb24gPSAwKSBpbiB2ZWMyIGFfdmVydGV4O1xuJHthfVxuJHtuPyIiOiJsYXlvdXQgKGxvY2F0aW9uID0gMikgaW4gdmVjNCBhX2NvbG9yOyJ9XG4ke3I/IiI6ImxheW91dCAobG9jYXRpb24gPSAzKSBpbiB2ZWMzIGFfbWF0cml4MDtcbmxheW91dCAobG9jYXRpb24gPSA0KSBpbiB2ZWMzIGFfbWF0cml4MTtcbmxheW91dCAobG9jYXRpb24gPSA1KSBpbiB2ZWMzIGFfbWF0cml4MjsifVxuXG4ke2U+MT9gdW5pZm9ybSB2ZWM0IHVfaGlnaHBbJHtlfV07YDoiIn1cbiR7c31cbiR7bj8iIjoib3V0IHZlYzQgdl9jb2xvcjsifVxuJHtpfVxuXG52b2lkIG1haW4oKSB7XG4gICAgJHtuPyIiOiJ2X2NvbG9yID0gYV9jb2xvcjsifVxuICAgICR7b31cbiAgICB2ZWMyIHBvcyA9IGFwcGx5TWF0cml4KGFfdmVydGV4KTtcbiAgICBwb3MgPSBwb3MgKiAyLjAgLSAxLjA7XG4gICAgZ2xfUG9zaXRpb24gPSB2ZWM0KHBvcy54LCAtcG9zLnksIDAuMCwgMS4wKTtcbn1gfSxPdD1lPT57Y29uc3QgdD0ibSIrKGU/InkiOiJuIik7aWYoRnQuaGFzKHQpKXJldHVybiBGdC5nZXQodCk7Y29uc3Qgbj1uZXcgd3QoJHQoZT85OjAsITEsITAsZSksIiN2ZXJzaW9uIDMwMCBlc1xucHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XG5cbmluIHZlYzIgdl9iZXppZXI7XG5vdXQgdmVjNCBvX2NvbG9yO1xuXG52b2lkIG1haW4oKSB7XG4gICAgdmVjMiBweCA9IGRGZHgodl9iZXppZXIpO1xuICAgIHZlYzIgcHkgPSBkRmR5KHZfYmV6aWVyKTtcblxuICAgIHZlYzIgZiA9ICgyLjAgKiB2X2Jlemllci54KSAqIHZlYzIocHgueCwgcHkueCkgLSB2ZWMyKHB4LnksIHB5LnkpO1xuICAgIGZsb2F0IGFscGhhID0gMC41IC0gKHZfYmV6aWVyLnggKiB2X2Jlemllci54IC0gdl9iZXppZXIueSkgLyBsZW5ndGgoZik7XG5cbiAgICBpZiAoYWxwaGEgPiAwLjApIHtcbiAgICAgICAgb19jb2xvciA9IHZlYzQobWluKGFscGhhLCAxLjApKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBkaXNjYXJkO1xuICAgIH0gICAgXG59Iik7cmV0dXJuIEZ0LnNldCh0LG4pLG59LFN0PShlLHQpPT57Y29uc3Qgbj1lLmhpZ2hwO25bMF09dFswXSxuWzFdPXRbMV0sblsyXT0wLG5bNF09dFsyXSxuWzVdPXRbM10sbls2XT0wLG5bOF09dFs0XSxuWzldPXRbNV0sblsxMF09MSxuWzEyXT10WzZdLG5bMTNdPXRbN10sblsxNF09MCxuWzE2XT10WzhdLG5bMTddPXRbOV0sblsxOF09MCxuWzIwXT10WzEwXSxuWzIxXT10WzExXSxuWzIyXT0xLG5bM109eCgpLG5bN109RSgpLG5bMTFdPXRbMTJdLG5bMTVdPXRbMTNdLG5bMTldPXRbMTRdLG5bMjNdPXRbMTVdLG5bMjRdPXRbMTZdLG5bMjVdPXRbMTddLG5bMjZdPXRbMThdLG5bMjddPXRbMTldLG5bMjhdPXRbMjBdLG5bMjldPXRbMjFdLG5bMzBdPXRbMjJdLG5bMzFdPXRbMjNdLG5bMzJdPXRbMjRdLG5bMzNdPXRbMjVdfTtsZXQga3Q9Im5vcm1hbCI7Y29uc3QgQ3Q9ZT0+e2t0PWV9LFB0PSgpPT5rdDtsZXQgQnQ9NjAwO2NvbnN0IEl0PWU9PntCdD1lfSxMdD0oKT0+QnQsVXQ9KCk9Pns2MTMhPT1MdCgpJiYoSXQoNjEzKSxuLmJsZW5kRnVuYyhuLk9ORSxuLk9ORV9NSU5VU19TUkNfQUxQSEEpKX0sTnQ9KGUsdCxyLGEpPT57ZS51c2VQcm9ncmFtKCksZS5iaW5kVW5pZm9ybSgpLFV0KCksdnQodCksbi5kcmF3QXJyYXlzKG4uVFJJQU5HTEVTLHIsYSl9LER0PSgpPT57Y29uc3QgZT0icm1ubiI7aWYoRnQuaGFzKGUpKXJldHVybiBGdC5nZXQoZSk7Y29uc3QgdD1uZXcgd3QoIiN2ZXJzaW9uIDMwMCBlc1xubGF5b3V0IChsb2NhdGlvbiA9IDApIGluIHZlYzIgYV92ZXJ0ZXg7XG52b2lkIG1haW4oKSB7XG4gICAgdmVjMiBwb3MgPSBhX3ZlcnRleCAqIDIuMCAtIDEuMDtcbiAgICBnbF9Qb3NpdGlvbiA9IHZlYzQocG9zLngsIC1wb3MueSwgMC4wLCAxLjApO1xufSIsIiN2ZXJzaW9uIDMwMCBlc1xucHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XG5vdXQgdmVjNCBvX2NvbG9yO1xudm9pZCBtYWluKCkge1xuICAgIG9fY29sb3IgPSB2ZWM0KDEuMCk7XG59Iik7cmV0dXJuIEZ0LnNldChlLHQpLHR9LGp0PSgpPT57Y29uc3QgZT1yLmN1cnJlbnRBdHRhY2htZW50T2JqZWN0O2lmKCFlKXJldHVybjtjb25zdCB0PTE8PGUuY2xpcExldmVsLTE7bi5zdGVuY2lsTWFzayh+dC0xKSxuLnN0ZW5jaWxGdW5jKG4uTEVRVUFMLHQsMjU1KSxuLnN0ZW5jaWxPcChuLlpFUk8sbi5SRVBMQUNFLG4uUkVQTEFDRSksTnQoRHQoKSx5dCgpLDAsNiksbi5zdGVuY2lsTWFzaygxPDxlLmNsaXBMZXZlbCksbi5zdGVuY2lsRnVuYyhuLkFMV0FZUywwLDI1NSksbi5zdGVuY2lsT3Aobi5SRVBMQUNFLG4uUkVQTEFDRSxuLlJFUExBQ0UpLE50KER0KCkseXQoKSwwLDYpLG4uc3RlbmNpbE1hc2soMjU1KSxuLnN0ZW5jaWxPcChuLlpFUk8sbi5JTlZFUlQsbi5JTlZFUlQpfSx6dD1bXTtjbGFzcyBYdHtjb25zdHJ1Y3RvcihlLHQsbixyLGEpe09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCJpbmRleCIse2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwLHZhbHVlOnZvaWQgMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCJ4Iix7ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITAsdmFsdWU6dm9pZCAwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsInkiLHtlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMCx2YWx1ZTp2b2lkIDB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywidyIse2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwLHZhbHVlOnZvaWQgMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCJoIix7ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITAsdmFsdWU6dm9pZCAwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsImxlZnQiLHtlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMCx2YWx1ZTp2b2lkIDB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywicmlnaHQiLHtlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMCx2YWx1ZTp2b2lkIDB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywidXNlZCIse2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwLHZhbHVlOnZvaWQgMH0pLHRoaXMuaW5kZXg9ZSx0aGlzLng9dCx0aGlzLnk9bix0aGlzLnc9cix0aGlzLmg9YSx0aGlzLmxlZnQ9bnVsbCx0aGlzLnJpZ2h0PW51bGwsdGhpcy51c2VkPSExfWluc2VydChlLHQpe3JldHVybigoZSx0LG4pPT57aWYoZS51c2VkKXtjb25zdCByPWUubGVmdD8uaW5zZXJ0KHQsbik7cmV0dXJuIHJ8fGUucmlnaHQ/Lmluc2VydCh0LG4pfHxudWxsfWlmKHQ+ZS53fHxuPmUuaClyZXR1cm4gbnVsbDtpZih0PT09ZS53JiZuPT09ZS5oKXJldHVybiBlLnVzZWQ9ITAsZTtjb25zdCByPXQrMSxhPW4rMSxzPWUudy1yLG89ZS5oLWE7cmV0dXJuIHM+bz8oZS5sZWZ0PWUuY3JlYXRlKGUuaW5kZXgsZS54LGUueSx0LGUuaCksZS5yaWdodD1lLmNyZWF0ZShlLmluZGV4LGUueCtyLGUueSxzLGUuaCkpOihlLmxlZnQ9ZS5jcmVhdGUoZS5pbmRleCxlLngsZS55LGUudyxuKSxlLnJpZ2h0PWUuY3JlYXRlKGUuaW5kZXgsZS54LGUueSthLGUudyxvKSksZS51c2VkPSEwLGUubGVmdC5pbnNlcnQodCxuKX0pKHRoaXMsZSx0KX1kaXNwb3NlKGUsdCxuLHIpe3JldHVybigoZSx0LG4scixhKT0+ZS5sZWZ0Py5kaXNwb3NlKHQsbixyLGEpPyhlLmxlZnQudXNlZHx8ZS5yaWdodD8udXNlZHx8KGUubGVmdCYmZS5sZWZ0LnJlbGVhc2UoKSxlLnJpZ2h0JiZlLnJpZ2h0LnJlbGVhc2UoKSxlLmxlZnQ9ZS5yaWdodD1udWxsLGUudXNlZD0hMSksITApOmUucmlnaHQ/LmRpc3Bvc2UodCxuLHIsYSk/KGUucmlnaHQudXNlZHx8ZS5sZWZ0Py51c2VkfHwoZS5sZWZ0JiZlLmxlZnQucmVsZWFzZSgpLGUucmlnaHQmJmUucmlnaHQucmVsZWFzZSgpLGUubGVmdD1lLnJpZ2h0PW51bGwsZS51c2VkPSExKSwhMCk6dD09PWUueCYmbj09PWUueSYmcj09PWUudyYmYT09PWUuaCYmKGUudXNlZD0hMSwhMCkpKHRoaXMsZSx0LG4scil9Y3JlYXRlKGUsdCxuLHIsYSl7Y29uc3Qgcz16dC5sZW5ndGg/enQucG9wKCk6bmV3IFh0KGUsMCwwLDAsMCk7cmV0dXJuIHMuaW5kZXg9ZSxzLng9dCxzLnk9bixzLnc9cixzLmg9YSxzLmxlZnQ9bnVsbCxzLnJpZ2h0PW51bGwscy51c2VkPSExLHN9cmVsZWFzZSgpe3RoaXMubGVmdCYmKHRoaXMubGVmdC5yZWxlYXNlKCksdGhpcy5sZWZ0PW51bGwpLHRoaXMucmlnaHQmJih0aGlzLnJpZ2h0LnJlbGVhc2UoKSx0aGlzLnJpZ2h0PW51bGwpLHRoaXMudXNlZD0hMSx6dC5wdXNoKHRoaXMpfX1jbGFzcyBXdHtjb25zdHJ1Y3RvcihlLHQsbil7T2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsIl8kcm9vdCIse2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwLHZhbHVlOnZvaWQgMH0pLHRoaXMuXyRyb290PW5ldyBYdChlLDAsMCx0LG4pfWluc2VydChlLHQpe3JldHVybiB0aGlzLl8kcm9vdC5pbnNlcnQoZSx0KX1kaXNwb3NlKGUsdCxuLHIpe3JldHVybiB0aGlzLl8kcm9vdC5kaXNwb3NlKGUsdCxuLHIpfX1jb25zdCBHdD0odCxuKT0+e2NvbnN0IHI9dmUoKTtnZVtyXXx8KGdlW3JdPW5ldyBXdChyLGUsZSkpO2NvbnN0IGE9Z2Vbcl0uaW5zZXJ0KHQsbik7cmV0dXJuIGF8fChtZShyKzEpLEd0KHQsbikpfSxWdD1lPT5gXG4gICAgdmVjNCBtdWwgPSB1X21lZGl1bXBbJHtlfV07XG4gICAgdmVjNCBhZGQgPSB1X21lZGl1bXBbJHtlKzF9XTtcblxuICAgIGlmIChtdWwueCAhPSAxLjAgfHwgbXVsLnkgIT0gMS4wIHx8IG11bC56ICE9IDEuMCB8fCBtdWwudyAhPSAxLjBcbiAgICAgICAgfHwgYWRkLnggIT0gMC4wIHx8IGFkZC55ICE9IDAuMCB8fCBhZGQueiAhPSAwLjBcbiAgICApIHtcbiAgICAgICAgc3JjLnJnYiAvPSBtYXgoMC4wMDAxLCBzcmMuYSk7XG4gICAgICAgIHNyYyA9IGNsYW1wKHNyYyAqIG11bCArIGFkZCwgMC4wLCAxLjApO1xuICAgICAgICBzcmMucmdiICo9IHNyYy5hO1xuICAgIH1cbmAsWXQ9ZT0+YCN2ZXJzaW9uIDMwMCBlc1xucHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XG5cbnVuaWZvcm0gc2FtcGxlcjJEIHVfdGV4dHVyZTtcbiR7ZT8idW5pZm9ybSB2ZWM0IHVfbWVkaXVtcFsyXTsiOiIifVxuXG5pbiB2ZWMyIHZfY29vcmQ7XG5vdXQgdmVjNCBvX2NvbG9yO1xuXG52b2lkIG1haW4oKSB7XG4gICAgdmVjNCBzcmMgPSB0ZXh0dXJlKHVfdGV4dHVyZSwgdl9jb29yZCk7XG4gICAgJHtlP1Z0KDApOiIifVxuICAgIG9fY29sb3IgPSBzcmM7XG59YDtjb25zdCBxdD1uZXcgY2xhc3N7Y29uc3RydWN0b3IoKXtPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywiYnVmZmVyIix7ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITAsdmFsdWU6dm9pZCAwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsIm9mZnNldCIse2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwLHZhbHVlOnZvaWQgMH0pLHRoaXMuYnVmZmVyPW5ldyBGbG9hdDMyQXJyYXkoMjU2KSx0aGlzLm9mZnNldD0wfXB1c2goLi4uZSl7dGhpcy5idWZmZXIubGVuZ3RoPHRoaXMub2Zmc2V0K2UubGVuZ3RoJiZ0aGlzLnJlc2l6ZShlLmxlbmd0aCk7Zm9yKGxldCB0PTA7dDxlLmxlbmd0aDt0KyspdGhpcy5idWZmZXJbdGhpcy5vZmZzZXQrK109ZVt0XX1zZXQoZSl7dGhpcy5idWZmZXIubGVuZ3RoPHRoaXMub2Zmc2V0K2UubGVuZ3RoJiZ0aGlzLnJlc2l6ZShlLmxlbmd0aCksdGhpcy5idWZmZXIuc2V0KGUsdGhpcy5vZmZzZXQpLHRoaXMub2Zmc2V0Kz1lLmxlbmd0aH1yZXNpemUoZSl7Y29uc3QgdD1uZXcgRmxvYXQzMkFycmF5KChuPXRoaXMub2Zmc2V0K2Usbi0tLG58PW4+PjEsbnw9bj4+MixufD1uPj40LG58PW4+Pjgsbnw9bj4+MTYsKytuKSk7dmFyIG47dGhpcy5idWZmZXIubGVuZ3RoJiZ0LnNldCh0aGlzLmJ1ZmZlciksdGhpcy5idWZmZXI9dH19O2NsYXNzIEt0IGV4dGVuZHMgd3R7Y29uc3RydWN0b3IoZSx0LG49ITApe3N1cGVyKGUsdCxuKSxPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywiY291bnQiLHtlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMCx2YWx1ZTp2b2lkIDB9KSx0aGlzLmNvdW50PTB9Y2xlYXIoKXt0aGlzLmNvdW50PXF0Lm9mZnNldD0wfX1jb25zdCBIdD1uZXcgTWFwLFp0PSgpPT57aWYoSHQuaGFzKCJpIikpcmV0dXJuIEh0LmdldCgiaSIpO2NvbnN0IGU9bmV3IEt0KCIjdmVyc2lvbiAzMDAgZXNcblxubGF5b3V0IChsb2NhdGlvbiA9IDApIGluIHZlYzIgYV92ZXJ0ZXg7XG5sYXlvdXQgKGxvY2F0aW9uID0gMSkgaW4gdmVjNCBhX3JlY3Q7XG5sYXlvdXQgKGxvY2F0aW9uID0gMikgaW4gdmVjNCBhX3NpemU7XG5sYXlvdXQgKGxvY2F0aW9uID0gMykgaW4gdmVjMiBhX29mZnNldDtcbmxheW91dCAobG9jYXRpb24gPSA0KSBpbiB2ZWM0IGFfbWF0cml4O1xubGF5b3V0IChsb2NhdGlvbiA9IDUpIGluIHZlYzQgYV9tdWw7XG5sYXlvdXQgKGxvY2F0aW9uID0gNikgaW4gdmVjNCBhX2FkZDtcblxub3V0IHZlYzIgdl9jb29yZDtcbm91dCB2ZWM0IHZfbXVsO1xub3V0IHZlYzQgdl9hZGQ7XG5cbnZvaWQgbWFpbigpIHtcbiAgICB2X2Nvb3JkID0gYV92ZXJ0ZXggKiBhX3JlY3QuencgKyBhX3JlY3QueHk7XG4gICAgdl9tdWwgPSBhX211bDtcbiAgICB2X2FkZCA9IGFfYWRkO1xuXG4gICAgdmVjMiBwb3NpdGlvbiA9IHZlYzIoYV92ZXJ0ZXgueCwgMS4wIC0gYV92ZXJ0ZXgueSk7XG4gICAgcG9zaXRpb24gPSBwb3NpdGlvbiAqIGFfc2l6ZS54eTtcblxuICAgIG1hdDMgbWF0cml4ID0gbWF0MyhcbiAgICAgICAgYV9tYXRyaXgueCwgYV9tYXRyaXgueSwgMC4wLFxuICAgICAgICBhX21hdHJpeC56LCBhX21hdHJpeC53LCAwLjAsXG4gICAgICAgIGFfb2Zmc2V0LngsIGFfb2Zmc2V0LnksIDEuMFxuICAgICk7XG5cbiAgICBwb3NpdGlvbiA9IChtYXRyaXggKiB2ZWMzKHBvc2l0aW9uLCAxLjApKS54eTtcbiAgICBwb3NpdGlvbiAvPSBhX3NpemUuenc7XG5cbiAgICBwb3NpdGlvbiA9IHBvc2l0aW9uICogMi4wIC0gMS4wO1xuICAgIGdsX1Bvc2l0aW9uID0gdmVjNChwb3NpdGlvbi54LCAtcG9zaXRpb24ueSwgMC4wLCAxLjApO1xufSIsIiN2ZXJzaW9uIDMwMCBlc1xucHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XG5cbnVuaWZvcm0gc2FtcGxlcjJEIHVfdGV4dHVyZTtcblxuaW4gdmVjNCB2X211bDtcbmluIHZlYzQgdl9hZGQ7XG5pbiB2ZWMyIHZfY29vcmQ7XG5vdXQgdmVjNCBvX2NvbG9yO1xuXG52b2lkIG1haW4oKSB7XG4gICAgdmVjNCBzcmMgPSB0ZXh0dXJlKHVfdGV4dHVyZSwgdl9jb29yZCk7XG5cbiAgICBpZiAodl9tdWwueCAhPSAxLjAgfHwgdl9tdWwueSAhPSAxLjAgfHwgdl9tdWwueiAhPSAxLjAgfHwgdl9tdWwudyAhPSAxLjBcbiAgICAgICAgfHwgdl9hZGQueCAhPSAwLjAgfHwgdl9hZGQueSAhPSAwLjAgfHwgdl9hZGQueiAhPSAwLjBcbiAgICApIHtcbiAgICAgICAgc3JjLnJnYiAvPSBtYXgoMC4wMDAxLCBzcmMuYSk7XG4gICAgICAgIHNyYyA9IGNsYW1wKHNyYyAqIHZfbXVsICsgdl9hZGQsIDAuMCwgMS4wKTtcbiAgICAgICAgc3JjLnJnYiAqPSBzcmMuYTtcbiAgICB9XG5cbiAgICBvX2NvbG9yID0gc3JjO1xufSIpO3JldHVybiBIdC5zZXQoImkiLGUpLGV9LFF0PShlLHQpPT57Y29uc3Qgbj1gaSR7ZX15YDtpZihIdC5oYXMobikpcmV0dXJuIEh0LmdldChuKTtjb25zdCByPW5ldyB3dCgiI3ZlcnNpb24gMzAwIGVzXG5cbmxheW91dCAobG9jYXRpb24gPSAwKSBpbiB2ZWMyIGFfdmVydGV4O1xuXG5vdXQgdmVjMiB2X2Nvb3JkO1xuXG52b2lkIG1haW4oKSB7XG4gICAgdl9jb29yZCA9IGFfdmVydGV4O1xuXG4gICAgdmVjMiBwb3NpdGlvbiA9IGFfdmVydGV4ICogMi4wIC0gMS4wO1xuICAgIGdsX1Bvc2l0aW9uID0gdmVjNChwb3NpdGlvbiwgMC4wLCAxLjApO1xufSIsKGU9PntsZXQgdDtzd2l0Y2goZSl7Y2FzZSJzdWJ0cmFjdCI6dD0iXG52ZWM0IGJsZW5kIChpbiB2ZWM0IHNyYywgaW4gdmVjNCBkc3QpIHtcbiAgICBpZiAoc3JjLmEgPT0gMC4wKSB7IHJldHVybiBkc3Q7IH1cbiAgICBpZiAoZHN0LmEgPT0gMC4wKSB7IHJldHVybiBzcmM7IH1cblxuICAgIHZlYzQgYSA9IHNyYyAtIHNyYyAqIGRzdC5hO1xuICAgIHZlYzQgYiA9IGRzdCAtIGRzdCAqIHNyYy5hO1xuXG4gICAgc3JjLnJnYiAvPSBzcmMuYTtcbiAgICBkc3QucmdiIC89IGRzdC5hO1xuXG4gICAgdmVjNCBjID0gdmVjNChkc3QucmdiIC0gc3JjLnJnYiwgc3JjLmEgKiBkc3QuYSk7XG4gICAgYy5yZ2IgKj0gYy5hO1xuXG4gICAgcmV0dXJuIGEgKyBiICsgYztcbn0iO2JyZWFrO2Nhc2UibXVsdGlwbHkiOnQ9IlxudmVjNCBibGVuZCAoaW4gdmVjNCBzcmMsIGluIHZlYzQgZHN0KSB7XG4gICAgdmVjNCBhID0gc3JjIC0gc3JjICogZHN0LmE7XG4gICAgdmVjNCBiID0gZHN0IC0gZHN0ICogc3JjLmE7XG4gICAgdmVjNCBjID0gc3JjICogZHN0O1xuXG4gICAgcmV0dXJuIGEgKyBiICsgYztcbn0iO2JyZWFrO2Nhc2UibGlnaHRlbiI6dD0iXG52ZWM0IGJsZW5kIChpbiB2ZWM0IHNyYywgaW4gdmVjNCBkc3QpIHtcbiAgICBpZiAoc3JjLmEgPT0gMC4wKSB7IHJldHVybiBkc3Q7IH1cbiAgICBpZiAoZHN0LmEgPT0gMC4wKSB7IHJldHVybiBzcmM7IH1cblxuICAgIHZlYzQgYSA9IHNyYyAtIHNyYyAqIGRzdC5hO1xuICAgIHZlYzQgYiA9IGRzdCAtIGRzdCAqIHNyYy5hO1xuXG4gICAgc3JjLnJnYiAvPSBzcmMuYTtcbiAgICBkc3QucmdiIC89IGRzdC5hO1xuXG4gICAgdmVjNCBjID0gdmVjNChtaXgoc3JjLnJnYiwgZHN0LnJnYiwgc3RlcChzcmMucmdiLCBkc3QucmdiKSksIHNyYy5hICogZHN0LmEpO1xuICAgIGMucmdiICo9IGMuYTtcblxuICAgIHJldHVybiBhICsgYiArIGM7XG59IjticmVhaztjYXNlImRhcmtlbiI6dD0iXG52ZWM0IGJsZW5kIChpbiB2ZWM0IHNyYywgaW4gdmVjNCBkc3QpIHtcbiAgICBpZiAoc3JjLmEgPT0gMC4wKSB7IHJldHVybiBkc3Q7IH1cbiAgICBpZiAoZHN0LmEgPT0gMC4wKSB7IHJldHVybiBzcmM7IH1cblxuICAgIHZlYzQgYSA9IHNyYyAtIHNyYyAqIGRzdC5hO1xuICAgIHZlYzQgYiA9IGRzdCAtIGRzdCAqIHNyYy5hO1xuXG4gICAgc3JjLnJnYiAvPSBzcmMuYTtcbiAgICBkc3QucmdiIC89IGRzdC5hO1xuXG4gICAgdmVjNCBjID0gdmVjNChtaXgoc3JjLnJnYiwgZHN0LnJnYiwgc3RlcChkc3QucmdiLCBzcmMucmdiKSksIHNyYy5hICogZHN0LmEpO1xuICAgIGMucmdiICo9IGMuYTtcblxuICAgIHJldHVybiBhICsgYiArIGM7XG59IjticmVhaztjYXNlIm92ZXJsYXkiOnQ9IlxudmVjNCBibGVuZCAoaW4gdmVjNCBzcmMsIGluIHZlYzQgZHN0KSB7XG4gICAgaWYgKHNyYy5hID09IDAuMCkgeyByZXR1cm4gZHN0OyB9XG4gICAgaWYgKGRzdC5hID09IDAuMCkgeyByZXR1cm4gc3JjOyB9XG5cbiAgICB2ZWM0IGEgPSBzcmMgLSBzcmMgKiBkc3QuYTtcbiAgICB2ZWM0IGIgPSBkc3QgLSBkc3QgKiBzcmMuYTtcblxuICAgIHNyYy5yZ2IgLz0gc3JjLmE7XG4gICAgZHN0LnJnYiAvPSBkc3QuYTtcblxuICAgIHZlYzQgbXVsID0gc3JjICogZHN0O1xuICAgIHZlYzMgYzEgPSAyLjAgKiBtdWwucmdiO1xuICAgIHZlYzMgYzIgPSAyLjAgKiAoc3JjLnJnYiArIGRzdC5yZ2IgLSBtdWwucmdiKSAtIDEuMDtcbiAgICB2ZWM0IGMgPSB2ZWM0KG1peChjMSwgYzIsIHN0ZXAodmVjMygwLjUpLCBkc3QucmdiKSksIG11bC5hKTtcbiAgICBjLnJnYiAqPSBjLmE7XG5cbiAgICByZXR1cm4gYSArIGIgKyBjO1xufSI7YnJlYWs7Y2FzZSJoYXJkbGlnaHQiOnQ9IlxudmVjNCBibGVuZCAoaW4gdmVjNCBzcmMsIGluIHZlYzQgZHN0KSB7XG4gICAgaWYgKHNyYy5hID09IDAuMCkgeyByZXR1cm4gZHN0OyB9XG4gICAgaWYgKGRzdC5hID09IDAuMCkgeyByZXR1cm4gc3JjOyB9XG5cbiAgICB2ZWM0IGEgPSBzcmMgLSBzcmMgKiBkc3QuYTtcbiAgICB2ZWM0IGIgPSBkc3QgLSBkc3QgKiBzcmMuYTtcblxuICAgIHNyYy5yZ2IgLz0gc3JjLmE7XG4gICAgZHN0LnJnYiAvPSBkc3QuYTtcblxuICAgIHZlYzQgbXVsID0gc3JjICogZHN0O1xuICAgIHZlYzMgYzEgPSAyLjAgKiBtdWwucmdiO1xuICAgIHZlYzMgYzIgPSAyLjAgKiAoc3JjLnJnYiArIGRzdC5yZ2IgLSBtdWwucmdiKSAtIDEuMDtcbiAgICB2ZWM0IGMgPSB2ZWM0KG1peChjMSwgYzIsIHN0ZXAodmVjMygwLjUpLCBzcmMucmdiKSksIG11bC5hKTtcbiAgICBjLnJnYiAqPSBjLmE7XG5cbiAgICByZXR1cm4gYSArIGIgKyBjO1xufSI7YnJlYWs7Y2FzZSJkaWZmZXJlbmNlIjp0PSJcbnZlYzQgYmxlbmQgKGluIHZlYzQgc3JjLCBpbiB2ZWM0IGRzdCkge1xuICAgIGlmIChzcmMuYSA9PSAwLjApIHsgcmV0dXJuIGRzdDsgfVxuICAgIGlmIChkc3QuYSA9PSAwLjApIHsgcmV0dXJuIHNyYzsgfVxuXG4gICAgdmVjNCBhID0gc3JjIC0gc3JjICogZHN0LmE7XG4gICAgdmVjNCBiID0gZHN0IC0gZHN0ICogc3JjLmE7XG5cbiAgICBzcmMucmdiIC89IHNyYy5hO1xuICAgIGRzdC5yZ2IgLz0gZHN0LmE7XG5cbiAgICB2ZWM0IGMgPSB2ZWM0KGFicyhzcmMucmdiIC0gZHN0LnJnYiksIHNyYy5hICogZHN0LmEpO1xuICAgIGMucmdiICo9IGMuYTtcblxuICAgIHJldHVybiBhICsgYiArIGM7XG59IjticmVhaztjYXNlImludmVydCI6dD0iXG52ZWM0IGJsZW5kIChpbiB2ZWM0IHNyYywgaW4gdmVjNCBkc3QpIHtcbiAgICBpZiAoc3JjLmEgPT0gMC4wKSB7IHJldHVybiBkc3Q7IH1cbiAgICBpZiAoZHN0LmEgPT0gMC4wKSB7IHJldHVybiBzcmM7IH1cblxuICAgIHZlYzQgYiA9IGRzdCAtIGRzdCAqIHNyYy5hO1xuICAgIHZlYzQgYyA9IHZlYzQoc3JjLmEgLSBkc3QucmdiICogc3JjLmEsIHNyYy5hKTtcblxuICAgIHJldHVybiBiICsgYztcbn0iO2JyZWFrO2RlZmF1bHQ6dD0iXG52ZWM0IGJsZW5kIChpbiB2ZWM0IHNyYywgaW4gdmVjNCBkc3QpIHtcbiAgICByZXR1cm4gc3JjICsgZHN0IC0gZHN0ICogc3JjLmE7XG59In1yZXR1cm5gI3ZlcnNpb24gMzAwIGVzXG5wcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcblxudW5pZm9ybSBzYW1wbGVyMkQgdV90ZXh0dXJlc1syXTtcbnVuaWZvcm0gdmVjNCB1X21lZGl1bXBbMl07XG5cbmluIHZlYzIgdl9jb29yZDtcbm91dCB2ZWM0IG9fY29sb3I7XG5cbiR7dH1cblxudm9pZCBtYWluKCkge1xuICAgIHZlYzQgZHN0ID0gdGV4dHVyZSh1X3RleHR1cmVzWzBdLCB2X2Nvb3JkKTtcbiAgICB2ZWM0IHNyYyA9IHRleHR1cmUodV90ZXh0dXJlc1sxXSwgdl9jb29yZCk7XG4gICAgJHtWdCgwKX1cbiAgICBvX2NvbG9yID0gYmxlbmQoc3JjLCBkc3QpO1xufWB9KShlKSk7cmV0dXJuIEh0LnNldChuLHIpLHJ9O2xldCBKdD0wO2NvbnN0IGVuPSgpPT57Y29uc3QgZT1yLmN1cnJlbnRBdHRhY2htZW50T2JqZWN0LHQ9ci5hdGxhc0F0dGFjaG1lbnRPYmplY3Q7aWYoci5iaW5kKHQpLG4uYmluZEZyYW1lYnVmZmVyKG4uRFJBV19GUkFNRUJVRkZFUix6KSxZKCExKSxKdD09PXZlKCkpe2NvbnN0IGU9QWUodmUoKSk7ZVsyXSE9PS1OdW1iZXIuTUFYX1ZBTFVFJiZlWzNdIT09LU51bWJlci5NQVhfVkFMVUUmJihuLmVuYWJsZShuLlNDSVNTT1JfVEVTVCksbi5zY2lzc29yKGVbMF0sZVsxXSxlWzJdLGVbM10pLG4uYmxpdEZyYW1lYnVmZmVyKDAsMCx0LndpZHRoLHQuaGVpZ2h0LDAsMCx0LndpZHRoLHQuaGVpZ2h0LG4uQ09MT1JfQlVGRkVSX0JJVCxuLk5FQVJFU1QpLG4uZGlzYWJsZShuLlNDSVNTT1JfVEVTVCkpfWVsc2V7Y29uc3QgZT1SZSh2ZSgpKTtuLmVuYWJsZShuLlNDSVNTT1JfVEVTVCksbi5zY2lzc29yKGVbMF0sZVsxXSxlWzJdLGVbM10pLG4uYmxpdEZyYW1lYnVmZmVyKDAsMCx0LndpZHRoLHQuaGVpZ2h0LDAsMCx0LndpZHRoLHQuaGVpZ2h0LG4uQ09MT1JfQlVGRkVSX0JJVCxuLk5FQVJFU1QpLG4uZGlzYWJsZShuLlNDSVNTT1JfVEVTVCksSnQ9dmUoKX1lJiZyLmJpbmQoZSl9LHRuPWU9Pntjb25zdCB0PXZlKCk7bWUoZS5pbmRleCksZW4oKTtjb25zdCByPUs7bi5iaW5kRnJhbWVidWZmZXIobi5GUkFNRUJVRkZFUixyKTtjb25zdCBhPUVlKCk7bi5mcmFtZWJ1ZmZlclRleHR1cmUyRChuLkZSQU1FQlVGRkVSLG4uQ09MT1JfQVRUQUNITUVOVDAsbi5URVhUVVJFXzJELGEucmVzb3VyY2UsMCk7Y29uc3Qgcz1KKCk7bi5iaW5kRnJhbWVidWZmZXIobi5GUkFNRUJVRkZFUixzKTtjb25zdCBvPXVlKGUudyxlLmgpO3JldHVybiBuLmZyYW1lYnVmZmVyVGV4dHVyZTJEKG4uRlJBTUVCVUZGRVIsbi5DT0xPUl9BVFRBQ0hNRU5UMCxuLlRFWFRVUkVfMkQsby5yZXNvdXJjZSwwKSxuLmJpbmRGcmFtZWJ1ZmZlcihuLkZSQU1FQlVGRkVSLG51bGwpLG4uYmluZEZyYW1lYnVmZmVyKG4uUkVBRF9GUkFNRUJVRkZFUixyKSxuLmJpbmRGcmFtZWJ1ZmZlcihuLkRSQVdfRlJBTUVCVUZGRVIscyksbi5ibGl0RnJhbWVidWZmZXIoZS54LGUueSxlLngrZS53LGUueStlLmgsMCwwLGUudyxlLmgsbi5DT0xPUl9CVUZGRVJfQklULG4uTkVBUkVTVCksbWUodCksbi5iaW5kRnJhbWVidWZmZXIobi5SRUFEX0ZSQU1FQlVGRkVSLEQpLG4uYmluZEZyYW1lYnVmZmVyKG4uRlJBTUVCVUZGRVIsRCksb30sbm49KGUsdCxyPSExKT0+e1NlKDIsbi5URVhUVVJFMixudWxsLHIpLFNlKDEsbi5URVhUVVJFMSx0LHIpLFNlKDAsbi5URVhUVVJFMCxlLHIpfSxybj0oKT0+e2lmKEh0LmhhcygicCIpKXJldHVybiBIdC5nZXQoInAiKTtjb25zdCBlPW5ldyB3dCgiI3ZlcnNpb24gMzAwIGVzXG5cbmxheW91dCAobG9jYXRpb24gPSAwKSBpbiB2ZWMyIGFfdmVydGV4O1xudW5pZm9ybSB2ZWM0IHVfaGlnaHBbMl07XG5cbm91dCB2ZWMyIHZfY29vcmQ7XG5cbnZvaWQgbWFpbigpIHtcbiAgICB2X2Nvb3JkID0gYV92ZXJ0ZXg7XG5cbiAgICB2ZWMyIG9mZnNldCAgID0gdV9oaWdocFswXS54eTtcbiAgICB2ZWMyIHNpemUgICAgID0gdV9oaWdocFswXS56dztcbiAgICB2ZWMyIHZpZXdwb3J0ID0gdmVjMih1X2hpZ2hwWzFdLngsIHVfaGlnaHBbMV0ueSk7XG5cbiAgICB2ZWMyIHBvc2l0aW9uID0gdmVjMihhX3ZlcnRleC54LCAxLjAgLSBhX3ZlcnRleC55KTtcbiAgICBwb3NpdGlvbiA9IHBvc2l0aW9uICogc2l6ZSArIG9mZnNldDtcbiAgICBwb3NpdGlvbiAvPSB2aWV3cG9ydDtcblxuICAgIHBvc2l0aW9uID0gcG9zaXRpb24gKiAyLjAgLSAxLjA7XG4gICAgZ2xfUG9zaXRpb24gPSB2ZWM0KHBvc2l0aW9uLngsIC1wb3NpdGlvbi55LCAwLjAsIDEuMCk7XG59IixZdCghMSkpO3JldHVybiBIdC5zZXQoInAiLGUpLGV9LGFuPShlLHQsbik9Pntjb25zdCBhPWUuaGlnaHAscz1yLiRtYXRyaXg7YVswXT1zWzZdLGFbMV09c1s3XSxhWzJdPXQsYVszXT1uLGFbNF09eCgpLGFbNV09RSgpfSxzbj1lPT57ZS51c2VQcm9ncmFtKCksZS5iaW5kVW5pZm9ybSgpLHZ0KHl0KCkpLG4uZHJhd0FycmF5cyhuLlRSSUFOR0xFUywwLDYpfTtsZXQgb249bnVsbDtjb25zdCBjbj0oZSx0LGEscyk9Pntjb25zdCBvPXIuY3VycmVudEF0dGFjaG1lbnRPYmplY3QsaT1yLiRtYWluQXR0YWNobWVudE9iamVjdDtyLmJpbmQoaSk7Y29uc3QgYz1KKCk7cmV0dXJuIG4uYmluZEZyYW1lYnVmZmVyKG4uRlJBTUVCVUZGRVIsYyksb24mJm9uLndpZHRoPT09aS53aWR0aCYmb24uaGVpZ2h0PT09aS5oZWlnaHR8fChvbj11ZShpLndpZHRoLGkuaGVpZ2h0KSksa2Uob24pLG4uZnJhbWVidWZmZXJUZXh0dXJlMkQobi5GUkFNRUJVRkZFUixuLkNPTE9SX0FUVEFDSE1FTlQwLG4uVEVYVFVSRV8yRCxvbi5yZXNvdXJjZSwwKSxuLmJpbmRGcmFtZWJ1ZmZlcihuLkZSQU1FQlVGRkVSLG51bGwpLG4uYmluZEZyYW1lYnVmZmVyKG4uUkVBRF9GUkFNRUJVRkZFUixEKSxuLmJpbmRGcmFtZWJ1ZmZlcihuLkRSQVdfRlJBTUVCVUZGRVIsYyksbi5lbmFibGUobi5TQ0lTU09SX1RFU1QpLG4uc2Npc3NvcihlLGkuaGVpZ2h0LXQtcyxhKzEscysxKSxuLmJsaXRGcmFtZWJ1ZmZlcigwLDAsaS53aWR0aCxpLmhlaWdodCwwLDAsaS53aWR0aCxpLmhlaWdodCxuLkNPTE9SX0JVRkZFUl9CSVQsbi5ORUFSRVNUKSxuLmRpc2FibGUobi5TQ0lTU09SX1RFU1QpLG4uYmluZEZyYW1lYnVmZmVyKG4uRlJBTUVCVUZGRVIsRCksbyYmci5iaW5kKG8pLG9ufSxsbj0oZSx0LG4sYSk9Pntjb25zdCBzPXIuY3VycmVudEF0dGFjaG1lbnRPYmplY3Qsbz1jbihlLHQsbixhKSxpPWhlKG4sYSwhMSk7ci5iaW5kKGkpLHIuc2F2ZSgpLHIuc2V0VHJhbnNmb3JtKDEsMCwwLDEsLWUsLXQpO2NvbnN0IGM9cm4oKTthbihjLG8ud2lkdGgsby5oZWlnaHQpLFV0KCksa2Uobyksc24oYyk7Y29uc3QgbD1pLnRleHR1cmU7cmV0dXJuIHIucmVzdG9yZSgpLGVlKGksITEpLHMmJnIuYmluZChzKSxsfSx1bj0oKT0+ezYxMCE9PUx0KCkmJihJdCg2MTApLG4uYmxlbmRGdW5jKG4uT05FLG4uWkVSTykpfSxobj1lPT57a2UoZSksdW4oKTtjb25zdCB0PXJuKCk7YW4odCxlLndpZHRoLGUuaGVpZ2h0KSxzbih0KSxVdCgpfSxibj0oZSx0LG4scixhLHMsbyxpLGMpPT57Y29uc3QgbD1lLnRleHR1cmVzO2xbMF09MCxsWzFdPTE7Y29uc3QgdT1lLm1lZGl1bXA7dVswXT10LHVbMV09bix1WzJdPXIsdVszXT1hLHVbNF09cyx1WzVdPW8sdVs2XT1pLHVbN109Y30sZG49KGU9ITEpPT57Y29uc3QgdD0ibSIrKGU/InkiOiJuIik7aWYoSHQuaGFzKHQpKXJldHVybiBIdC5nZXQodCk7Y29uc3Qgbj1uZXcgd3QoIiN2ZXJzaW9uIDMwMCBlc1xuXG5sYXlvdXQgKGxvY2F0aW9uID0gMCkgaW4gdmVjMiBhX3ZlcnRleDtcbnVuaWZvcm0gdmVjNCB1X2hpZ2hwWzNdO1xuXG5vdXQgdmVjMiB2X2Nvb3JkO1xuXG52b2lkIG1haW4oKSB7XG4gICAgdl9jb29yZCA9IGFfdmVydGV4O1xuXG4gICAgbWF0MyBtYXRyaXggPSBtYXQzKFxuICAgICAgICB1X2hpZ2hwWzBdLngsIHVfaGlnaHBbMF0ueSwgMC4wLFxuICAgICAgICB1X2hpZ2hwWzBdLnosIHVfaGlnaHBbMF0udywgMC4wLFxuICAgICAgICB1X2hpZ2hwWzFdLngsIHVfaGlnaHBbMV0ueSwgMS4wXG4gICAgKTtcblxuICAgIHZlYzIgc2l6ZSAgICAgPSB1X2hpZ2hwWzFdLnp3O1xuICAgIHZlYzIgdmlld3BvcnQgPSB2ZWMyKHVfaGlnaHBbMl0ueCwgdV9oaWdocFsyXS55KTtcblxuICAgIHZlYzIgcG9zaXRpb24gPSB2ZWMyKGFfdmVydGV4LngsIDEuMCAtIGFfdmVydGV4LnkpO1xuICAgIHBvc2l0aW9uID0gcG9zaXRpb24gKiBzaXplO1xuICAgIHBvc2l0aW9uID0gKG1hdHJpeCAqIHZlYzMocG9zaXRpb24sIDEuMCkpLnh5O1xuICAgIHBvc2l0aW9uIC89IHZpZXdwb3J0O1xuXG4gICAgcG9zaXRpb24gPSBwb3NpdGlvbiAqIDIuMCAtIDEuMDtcbiAgICBnbF9Qb3NpdGlvbiA9IHZlYzQocG9zaXRpb24ueCwgLXBvc2l0aW9uLnksIDAuMCwgMS4wKTtcbn0iLFl0KGUpKTtyZXR1cm4gSHQuc2V0KHQsbiksbn0sZm49KGUsdCxuKT0+e2NvbnN0IGE9ZS5oaWdocCxzPXIuJG1hdHJpeDthWzBdPXNbMF0sYVsxXT1zWzFdLGFbMl09c1szXSxhWzNdPXNbNF0sYVs0XT1zWzZdLGFbNV09c1s3XSxhWzZdPXQsYVs3XT1uLGFbOF09eCgpLGFbOV09RSgpfTtsZXQgbW49MDtjb25zdCB2bj1lPT57ZS51c2VQcm9ncmFtKCksZS5iaW5kVW5pZm9ybSgpLHZ0KHh0KSxuLmJpbmRCdWZmZXIobi5BUlJBWV9CVUZGRVIsZ3QpLHF0LmJ1ZmZlci5sZW5ndGg+bW4mJihtbj1xdC5idWZmZXIubGVuZ3RoLG4uYnVmZmVyRGF0YShuLkFSUkFZX0JVRkZFUiw0Km1uLG4uRFlOQU1JQ19EUkFXKSksbi5idWZmZXJTdWJEYXRhKG4uQVJSQVlfQlVGRkVSLDAscXQuYnVmZmVyLnN1YmFycmF5KDAscXQub2Zmc2V0KSksbi5kcmF3QXJyYXlzSW5zdGFuY2VkKG4uVFJJQU5HTEVTLDAsNixlLmNvdW50KX0sX249KCk9Pns2MDMhPT1MdCgpJiYoSXQoNjAzKSxuLmJsZW5kRnVuYyhuLlpFUk8sbi5PTkVfTUlOVVNfU1JDX0FMUEhBKSl9LHBuPWU9Pntzd2l0Y2goZSl7Y2FzZSJhZGQiOjYxMSE9PUx0KCkmJihJdCg2MTEpLG4uYmxlbmRGdW5jKG4uT05FLG4uT05FKSk7YnJlYWs7Y2FzZSJzY3JlZW4iOjY0MSE9PUx0KCkmJihJdCg2NDEpLG4uYmxlbmRGdW5jKG4uT05FX01JTlVTX0RTVF9DT0xPUixuLk9ORSkpO2JyZWFrO2Nhc2UiYWxwaGEiOjYwNiE9PUx0KCkmJihJdCg2MDYpLG4uYmxlbmRGdW5jKG4uWkVSTyxuLlNSQ19BTFBIQSkpO2JyZWFrO2Nhc2UiZXJhc2UiOl9uKCk7YnJlYWs7Y2FzZSJjb3B5Ijp1bigpO2JyZWFrO2RlZmF1bHQ6VXQoKX19LGduPWU9Pnt2YXIgdDsoZT0+e2d0PWUuY3JlYXRlQnVmZmVyKCl9KShlKSx0PSgoKT0+e2NvbnN0IGU9ZnQoKTtyZXR1cm4gdnQoZSksbi5iaW5kQnVmZmVyKG4uQVJSQVlfQlVGRkVSLGUudmVydGV4QnVmZmVyKSxuLmJ1ZmZlckRhdGEobi5BUlJBWV9CVUZGRVIsbmV3IEZsb2F0MzJBcnJheShbMCwwLDEsMCwxLDEsMCwwLDEsMSwwLDFdKSxuLlNUQVRJQ19EUkFXKSxuLmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KDApLG4udmVydGV4QXR0cmliUG9pbnRlcigwLDIsbi5GTE9BVCwhMSwwLDApLG4uYmluZEJ1ZmZlcihuLkFSUkFZX0JVRkZFUixndCksbi5idWZmZXJEYXRhKG4uQVJSQVlfQlVGRkVSLHF0LmJ1ZmZlci5sZW5ndGgsbi5EWU5BTUlDX0RSQVcpLG4uZW5hYmxlVmVydGV4QXR0cmliQXJyYXkoMSksbi52ZXJ0ZXhBdHRyaWJQb2ludGVyKDEsNCxuLkZMT0FULCExLDg4LDApLG4udmVydGV4QXR0cmliRGl2aXNvcigxLDEpLG4uZW5hYmxlVmVydGV4QXR0cmliQXJyYXkoMiksbi52ZXJ0ZXhBdHRyaWJQb2ludGVyKDIsNCxuLkZMT0FULCExLDg4LDE2KSxuLnZlcnRleEF0dHJpYkRpdmlzb3IoMiwxKSxuLmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KDMpLG4udmVydGV4QXR0cmliUG9pbnRlcigzLDIsbi5GTE9BVCwhMSw4OCwzMiksbi52ZXJ0ZXhBdHRyaWJEaXZpc29yKDMsMSksbi5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheSg0KSxuLnZlcnRleEF0dHJpYlBvaW50ZXIoNCw0LG4uRkxPQVQsITEsODgsNDApLG4udmVydGV4QXR0cmliRGl2aXNvcig0LDEpLG4uZW5hYmxlVmVydGV4QXR0cmliQXJyYXkoNSksbi52ZXJ0ZXhBdHRyaWJQb2ludGVyKDUsNCxuLkZMT0FULCExLDg4LDU2KSxuLnZlcnRleEF0dHJpYkRpdmlzb3IoNSwxKSxuLmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KDYpLG4udmVydGV4QXR0cmliUG9pbnRlcig2LDQsbi5GTE9BVCwhMSw4OCw3Miksbi52ZXJ0ZXhBdHRyaWJEaXZpc29yKDYsMSksZX0pKCkseHQ9dH0seG49KGUsdCxyLGE9ITEpPT57Y29uc3Qgcz11ZShlLHQsYSk7cmV0dXJuIG4udGV4U3ViSW1hZ2UyRChuLlRFWFRVUkVfMkQsMCwwLDAsZSx0LG4uUkdCQSxuLlVOU0lHTkVEX0JZVEUsciksc30sRW49KGUsdCk9Pntjb25zdCByPSgoZSx0LHIsYT0hMSk9Pntjb25zdCBzPXVlKGUsdCxhKTtyZXR1cm4gbi50ZXhTdWJJbWFnZTJEKG4uVEVYVFVSRV8yRCwwLDAsMCxuLlJHQkEsbi5VTlNJR05FRF9CWVRFLHIpLHN9KShlLncsZS5oLHQpLGE9cm4oKTthbihhLGUudyxlLmgpLFV0KCksc24oYSksTChyKX0seW49W10sQW49bmV3IE1hcCxUbj0oZSx0LG4pPT57a2UoZSwhMCk7Y29uc3Qgcj1NYXRoLmNlaWwoLjUqbiksYT0xLShyLS41Km4pLHM9MStuLG89KGU9Pntjb25zdCB0PWBiJHtlfWA7aWYoQW4uaGFzKHQpKXJldHVybiBBbi5nZXQodCk7Y29uc3Qgbj1uZXcgd3QoIiN2ZXJzaW9uIDMwMCBlc1xuXG5sYXlvdXQgKGxvY2F0aW9uID0gMCkgaW4gdmVjMiBhX3ZlcnRleDtcblxub3V0IHZlYzIgdl9jb29yZDtcblxudm9pZCBtYWluKCkge1xuICAgIHZfY29vcmQgPSBhX3ZlcnRleDtcblxuICAgIHZlYzIgcG9zaXRpb24gPSBhX3ZlcnRleCAqIDIuMCAtIDEuMDtcbiAgICBnbF9Qb3NpdGlvbiA9IHZlYzQocG9zaXRpb24sIDAuMCwgMS4wKTtcbn0iLChlPT57Y29uc3QgdD1lLnRvRml4ZWQoMSk7cmV0dXJuYCN2ZXJzaW9uIDMwMCBlc1xucHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XG5cbnVuaWZvcm0gc2FtcGxlcjJEIHVfdGV4dHVyZTtcbnVuaWZvcm0gdmVjNCB1X21lZGl1bXA7XG5cbmluIHZlYzIgdl9jb29yZDtcbm91dCB2ZWM0IG9fY29sb3I7XG5cbnZvaWQgbWFpbigpIHtcbiAgICB2ZWMyICBvZmZzZXQgICA9IHVfbWVkaXVtcC54eTtcbiAgICBmbG9hdCBmcmFjdGlvbiA9IHVfbWVkaXVtcC56O1xuICAgIGZsb2F0IHNhbXBsZXMgID0gdV9tZWRpdW1wLnc7XG4gICAgXG4gICAgdmVjNCBjb2xvciA9IHRleHR1cmUodV90ZXh0dXJlLCB2X2Nvb3JkKTtcblxuICAgIGZvciAoZmxvYXQgaSA9IDEuMDsgaSA8ICR7dH07IGkgKz0gMS4wKSB7XG4gICAgICAgIGNvbG9yICs9IHRleHR1cmUodV90ZXh0dXJlLCB2X2Nvb3JkICsgb2Zmc2V0ICogaSk7XG4gICAgICAgIGNvbG9yICs9IHRleHR1cmUodV90ZXh0dXJlLCB2X2Nvb3JkIC0gb2Zmc2V0ICogaSk7XG4gICAgfVxuICAgIGNvbG9yICs9IHRleHR1cmUodV90ZXh0dXJlLCB2X2Nvb3JkICsgb2Zmc2V0ICogJHt0fSkgKiBmcmFjdGlvbjtcbiAgICBjb2xvciArPSB0ZXh0dXJlKHVfdGV4dHVyZSwgdl9jb29yZCAtIG9mZnNldCAqICR7dH0pICogZnJhY3Rpb247XG4gICAgY29sb3IgLz0gc2FtcGxlcztcblxuICAgIG9fY29sb3IgPSBjb2xvcjtcbn1gfSkoZSkpO3JldHVybiBBbi5zZXQodCxuKSxufSkocik7KChlLHQsbixyLGEscyk9Pntjb25zdCBvPWUubWVkaXVtcDtyPyhvWzBdPTEvdCxvWzFdPTApOihvWzBdPTAsb1sxXT0xL24pLG9bMl09YSxvWzNdPXN9KShvLGUud2lkdGgsZS5oZWlnaHQsdCxhLHMpLHNuKG8pfSxSbj17eDowLHk6MH0sTW49KGUsdCxuKT0+KGU+PjE2KSoobj90OjEpLzI1NSx3bj0oZSx0LG4pPT4oZT4+OCYyNTUpKihuP3Q6MSkvMjU1LEZuPShlLHQsbik9PigyNTUmZSkqKG4/dDoxKS8yNTUsJG49Wy41LDEuMDUsMS40LDEuNTUsMS43NSwxLjksMiwyLjE1LDIuMiwyLjMsMi41LDMsMywzLjUsMy41XSxPbj0oZSx0LG49NCxhPTQscz0xLG89ITApPT57Y29uc3QgaT1yLmN1cnJlbnRBdHRhY2htZW50T2JqZWN0LGM9TWF0aC5zcXJ0KHRbMF0qdFswXSt0WzFdKnRbMV0pLGw9TWF0aC5zcXJ0KHRbMl0qdFsyXSt0WzNdKnRbM10pLHU9QSgpLGg9biooYy91KSxiPWEqKGwvdSksZD0kbltzLTFdLGY9TWF0aC5yb3VuZChoKmQpLG09TWF0aC5yb3VuZChiKmQpO1JuLngrPWYsUm4ueSs9bTtjb25zdCB2PWUud2lkdGgrMipmLF89ZS5oZWlnaHQrMiptO2xldCBwPTEsZz0xO2g+MTI4P3A9LjA2MjU6aD42ND9wPS4xMjU6aD4zMj9wPS4yNTpoPjE2JiYocD0uNSksYj4xMjg/Zz0uMDYyNTpiPjY0P2c9LjEyNTpiPjMyP2c9LjI1OmI+MTYmJihnPS41KTtjb25zdCB4PU1hdGguY2VpbCh2KnApLEU9TWF0aC5jZWlsKF8qZykseT1oZSh4LEUsITEpLFQ9W3ksaGUoeCxFLCExKV07ci5iaW5kKHkpLHIucmVzZXQoKSxyLnNldFRyYW5zZm9ybShwLDAsMCxnLGYqcCxtKmcpLGtlKGUpO2NvbnN0IFI9ZG4oKTtmbihSLGUud2lkdGgsZS5oZWlnaHQpLHNuKFIpLG8mJkwoZSk7Y29uc3QgTT1oKnAsdz1iKmc7bGV0IEY9MCwkPXkudGV4dHVyZTtrZSgkLCEwKSx1bigpO2ZvcihsZXQgZT0wO2U8czsrK2Upe2lmKG4+MCl7Rj0oRisxKSUyO2NvbnN0IGU9VFtGXTtyLmJpbmQoZSksVG4oJCwhMCxNKSwkPWUudGV4dHVyZX1pZihhPjApe0Y9KEYrMSklMjtjb25zdCBlPVRbRl07ci5iaW5kKGUpLFRuKCQsITEsdyksJD1lLnRleHR1cmV9fWlmKFV0KCksMSE9PXB8fDEhPT1nKXtjb25zdCBlPWhlKHYsXywhMSk7ci5iaW5kKGUpLHIuc2V0VHJhbnNmb3JtKDEvcCwwLDAsMS9nLDAsMCksa2UoJCwhMCksZm4oUiwkLndpZHRoLCQuaGVpZ2h0KSxzbihSKSwkPWUudGV4dHVyZSxlZShUWzBdKSxlZShUWzFdKSxlZShlLCExKX1lbHNlIEY9KEYrMSklMixlZShUW0ZdKSxGPShGKzEpJTIsZWUoVFtGXSwhMSk7cmV0dXJuIGkmJnIuYmluZChpKSwkfSxTbj0oZSx0KT0+e2NvbnN0IG49ci5jdXJyZW50QXR0YWNobWVudE9iamVjdCxhPWhlKGUud2lkdGgsZS5oZWlnaHQsITEpO3IuYmluZChhKSxyLnJlc2V0KCksci5zZXRUcmFuc2Zvcm0oMSwwLDAsMSwwLDApLGtlKGUpLFV0KCk7Y29uc3Qgcz0oKCk9PntpZihBbi5oYXMoIm0iKSlyZXR1cm4gQW4uZ2V0KCJtIik7Y29uc3QgZT1uZXcgd3QoIiN2ZXJzaW9uIDMwMCBlc1xuXG5sYXlvdXQgKGxvY2F0aW9uID0gMCkgaW4gdmVjMiBhX3ZlcnRleDtcblxub3V0IHZlYzIgdl9jb29yZDtcblxudm9pZCBtYWluKCkge1xuICAgIHZfY29vcmQgPSBhX3ZlcnRleDtcblxuICAgIHZlYzIgcG9zaXRpb24gPSBhX3ZlcnRleCAqIDIuMCAtIDEuMDtcbiAgICBnbF9Qb3NpdGlvbiA9IHZlYzQocG9zaXRpb24sIDAuMCwgMS4wKTtcbn0iLCIjdmVyc2lvbiAzMDAgZXNcbnByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xuXG51bmlmb3JtIHNhbXBsZXIyRCB1X3RleHR1cmU7XG51bmlmb3JtIHZlYzQgdV9tZWRpdW1wWzVdO1xuXG5pbiB2ZWMyIHZfY29vcmQ7XG5vdXQgdmVjNCBvX2NvbG9yO1xuXG52b2lkIG1haW4oKSB7XG4gICAgbWF0NCBtdWwgPSBtYXQ0KHVfbWVkaXVtcFswXSwgdV9tZWRpdW1wWzFdLCB1X21lZGl1bXBbMl0sIHVfbWVkaXVtcFszXSk7XG4gICAgdmVjNCBhZGQgPSB1X21lZGl1bXBbNF07XG4gICAgXG4gICAgdmVjNCBjb2xvciA9IHRleHR1cmUodV90ZXh0dXJlLCB2X2Nvb3JkKTtcblxuICAgIGNvbG9yLnJnYiAvPSBtYXgoMC4wMDAxLCBjb2xvci5hKTtcbiAgICBjb2xvciA9IGNsYW1wKGNvbG9yICogbXVsICsgYWRkLCAwLjAsIDEuMCk7XG4gICAgY29sb3IucmdiICo9IGNvbG9yLmE7XG5cbiAgICBvX2NvbG9yID0gY29sb3I7XG59Iik7cmV0dXJuIEFuLnNldCgibSIsZSksZX0pKCk7KChlLHQpPT57Y29uc3Qgbj1lLm1lZGl1bXA7blswXT10WzBdLG5bMV09dFsxXSxuWzJdPXRbMl0sblszXT10WzNdLG5bNF09dFs1XSxuWzVdPXRbNl0sbls2XT10WzddLG5bN109dFs4XSxuWzhdPXRbMTBdLG5bOV09dFsxMV0sblsxMF09dFsxMl0sblsxMV09dFsxM10sblsxMl09dFsxNV0sblsxM109dFsxNl0sblsxNF09dFsxN10sblsxNV09dFsxOF0sblsxNl09dFs0XS8yNTUsblsxN109dFs5XS8yNTUsblsxOF09dFsxNF0vMjU1LG5bMTldPXRbMTldLzI1NX0pKHMsdCksc24ocyk7Y29uc3Qgbz1hLnRleHR1cmU7cmV0dXJuIEwoZSksZWUoYSwhMSksbiYmci5iaW5kKG4pLG99LGtuPShlLHQsbixyLGEscyk9Pntjb25zdCBvPWU/ImJsdXIuYSA9IDEuMCAtIGJsdXIuYTsiOiIiLGk9bj8oYz1zLGBcbiAgICBmbG9hdCBzdHJlbmd0aCA9IHVfbWVkaXVtcFske01hdGguZmxvb3IoYy80KX1dWyR7YyU0fV07XG4gICAgYmx1ci5hID0gY2xhbXAoYmx1ci5hICogc3RyZW5ndGgsIDAuMCwgMS4wKTtcbmApOiIiO3ZhciBjO2NvbnN0IGw9cj8oZT0+YFxuICAgIGJsdXIgPSB0ZXh0dXJlKHVfdGV4dHVyZXNbJHtlPzI6MX1dLCB2ZWMyKGJsdXIuYSwgMC41KSk7XG5gKSh0KTooZT0+YFxuICAgIHZlYzQgY29sb3IgPSB1X21lZGl1bXBbJHtlfV07XG4gICAgYmx1ciA9IGNvbG9yICogYmx1ci5hO1xuYCkoYSk7cmV0dXJuYFxuICAgICR7b31cbiAgICAke2l9XG4gICAgJHtsfVxuYH0sQ249KGUsdCxuLHIsYSxzKT0+e2NvbnN0IG89dD8iXG4gICAgdmVjMiBwcSA9ICgxLjAgLSB2X2Nvb3JkKSAqIGJsdXJfc2NhbGUgLSBibHVyX29mZnNldDtcbiAgICB2ZWM0IGJsdXIyID0gbWl4KHZlYzQoMC4wKSwgdGV4dHVyZSh1X3RleHR1cmVzWzBdLCBwcSksIGlzSW5zaWRlKHBxKSk7XG4iOiJcbiAgICB2ZWM0IGJsdXIyID0gdGV4dHVyZSh1X3RleHR1cmVzWzBdLCAxLjAgLSB2X2Nvb3JkKTtcbiIsaT1uPyhjPXMsYFxuICAgIGZsb2F0IHN0cmVuZ3RoID0gdV9tZWRpdW1wWyR7TWF0aC5mbG9vcihjLzQpfV1bJHtjJTR9XTtcbiAgICBoaWdobGlnaHRfYWxwaGEgKj0gc3RyZW5ndGg7XG4gICAgc2hhZG93X2FscGhhICAgICo9IHN0cmVuZ3RoO1xuYCk6IiI7dmFyIGM7Y29uc3QgbD1yPyhlPT5gXG4gICAgYmx1ciA9IHRleHR1cmUodV90ZXh0dXJlc1ske2U/MjoxfV0sIHZlYzIoXG4gICAgICAgIDAuNTAxOTYwNzg0MzEzNzI1NSAtIDAuNTAxOTYwNzg0MzEzNzI1NSAqIHNoYWRvd19hbHBoYSArIDAuNDk4MDM5MjE1Njg2Mjc0NSAqIGhpZ2hsaWdodF9hbHBoYSxcbiAgICAgICAgMC41XG4gICAgKSk7XG5gKShlKTooZT0+YFxuICAgIHZlYzQgaGlnaGxpZ2h0X2NvbG9yID0gdV9tZWRpdW1wWyR7ZX1dO1xuICAgIHZlYzQgc2hhZG93X2NvbG9yICAgID0gdV9tZWRpdW1wWyR7ZSsxfV07XG4gICAgYmx1ciA9IGhpZ2hsaWdodF9jb2xvciAqIGhpZ2hsaWdodF9hbHBoYSArIHNoYWRvd19jb2xvciAqIHNoYWRvd19hbHBoYTtcbmApKGEpO3JldHVybmBcbiAgICAke299XG4gICAgZmxvYXQgaGlnaGxpZ2h0X2FscGhhID0gYmx1ci5hIC0gYmx1cjIuYTtcbiAgICBmbG9hdCBzaGFkb3dfYWxwaGEgICAgPSBibHVyMi5hIC0gYmx1ci5hO1xuICAgICR7aX1cbiAgICBoaWdobGlnaHRfYWxwaGEgPSBjbGFtcChoaWdobGlnaHRfYWxwaGEsIDAuMCwgMS4wKTtcbiAgICBzaGFkb3dfYWxwaGEgICAgPSBjbGFtcChzaGFkb3dfYWxwaGEsIDAuMCwgMS4wKTtcbiAgICAke2x9XG5gfSxQbj0oZSx0LG4scixhLHMsbyk9Pntjb25zdCBpPWBmJHtlPyJ5IjoibiJ9JHt0PyJ5IjoibiJ9JHtuPyJ5IjoibiJ9JHtyfSR7YT8ieSI6Im4ifSR7cz8ieSI6Im4ifWA7aWYoQW4uaGFzKGkpKXJldHVybiBBbi5nZXQoaSk7bGV0IGM9MTtlJiZjKyssbyYmYysrO2xldCBsPShlPzQ6MCkrKHQ/NDowKSsocz8xOjApO298fChsKz1uPzQ6OCksbD1NYXRoLmNlaWwobC80KTtjb25zdCB1PW5ldyB3dCgiI3ZlcnNpb24gMzAwIGVzXG5cbmxheW91dCAobG9jYXRpb24gPSAwKSBpbiB2ZWMyIGFfdmVydGV4O1xuXG5vdXQgdmVjMiB2X2Nvb3JkO1xuXG52b2lkIG1haW4oKSB7XG4gICAgdl9jb29yZCA9IGFfdmVydGV4O1xuXG4gICAgdmVjMiBwb3NpdGlvbiA9IGFfdmVydGV4ICogMi4wIC0gMS4wO1xuICAgIGdsX1Bvc2l0aW9uID0gdmVjNChwb3NpdGlvbiwgMC4wLCAxLjApO1xufSIsKChlLHQsbixyLGEscyxvLGksYyk9PntsZXQgbD0wO2NvbnN0IHU9bj8oZT0+YFxuICAgIHZlYzIgYmFzZV9zY2FsZSAgPSB1X21lZGl1bXBbJHtlfV0ueHk7XG4gICAgdmVjMiBiYXNlX29mZnNldCA9IHVfbWVkaXVtcFske2V9XS56dztcblxuICAgIHZlYzIgdXYgPSB2X2Nvb3JkICogYmFzZV9zY2FsZSAtIGJhc2Vfb2Zmc2V0O1xuICAgIHZlYzQgYmFzZSA9IG1peCh2ZWM0KDAuMCksIHRleHR1cmUodV90ZXh0dXJlc1sxXSwgdXYpLCBpc0luc2lkZSh1dikpO1xuYCkobCsrKToiIixoPXI/KGU9PmBcbiAgICB2ZWMyIGJsdXJfc2NhbGUgID0gdV9tZWRpdW1wWyR7ZX1dLnh5O1xuICAgIHZlYzIgYmx1cl9vZmZzZXQgPSB1X21lZGl1bXBbJHtlfV0uenc7XG5cbiAgICB2ZWMyIHN0ID0gdl9jb29yZCAqIGJsdXJfc2NhbGUgLSBibHVyX29mZnNldDtcbiAgICB2ZWM0IGJsdXIgPSBtaXgodmVjNCgwLjApLCB0ZXh0dXJlKHVfdGV4dHVyZXNbMF0sIHN0KSwgaXNJbnNpZGUoc3QpKTtcbmApKGwrKyk6IlxuICAgIHZlYzQgYmx1ciA9IHRleHR1cmUodV90ZXh0dXJlc1swXSwgdl9jb29yZCk7XG4iLGI9ImlubmVyIj09PXMsZD1sO2xldCBmLG0sdj00Kmw7c3dpdGNoKGM/Zj1hP2tuKCExLG4saSxjLGQsdik6Q24obixyLGksYyxkLHYpOmE/KHYrPTQsZj1rbihiLG4saSxjLGQsdikpOih2Kz04LGY9Q24obixyLGksYyxkLHYpKSxzKXtjYXNlIm91dGVyIjptPW8/ImJsdXIgLSBibHVyICogYmFzZS5hIjoiYmFzZSArIGJsdXIgLSBibHVyICogYmFzZS5hIjticmVhaztjYXNlImZ1bGwiOm09bz8iYmx1ciI6ImJhc2UgLSBiYXNlICogYmx1ci5hICsgYmx1ciI7YnJlYWs7ZGVmYXVsdDptPSJibHVyIn1yZXR1cm5gI3ZlcnNpb24gMzAwIGVzXG5wcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcblxudW5pZm9ybSBzYW1wbGVyMkQgdV90ZXh0dXJlc1ske2V9XTtcbnVuaWZvcm0gdmVjNCB1X21lZGl1bXBbJHt0fV07XG5cbmluIHZlYzIgdl9jb29yZDtcbm91dCB2ZWM0IG9fY29sb3I7XG5cblxuZmxvYXQgaXNJbnNpZGUoaW4gdmVjMiB1dikge1xuICAgIHJldHVybiBzdGVwKDQuMCwgZG90KHN0ZXAodmVjNCgwLjAsIHV2LngsIDAuMCwgdXYueSksIHZlYzQodXYueCwgMS4wLCB1di55LCAxLjApKSwgdmVjNCgxLjApKSk7XG59XG5cbnZvaWQgbWFpbigpIHtcbiAgICAke3V9XG4gICAgJHtofVxuICAgICR7Zn1cbiAgICBvX2NvbG9yID0gJHttfTtcbn1gfSkoYyxsLGUsdCxuLHIsYSxzLG8pKTtyZXR1cm4gQW4uc2V0KGksdSksdX0sQm49bmV3IE1hcCxJbj0oZSx0KT0+e2NvbnN0IG49YGwkeygiMDAiK2UpLnNsaWNlKC0zKX0ke3Q/InkiOiJuIn1gO2lmKEJuLmhhcyhuKSlyZXR1cm4gQm4uZ2V0KG4pO2NvbnN0IHI9TWF0aC5jZWlsKDUqZS80KSxhPW5ldyB3dCgiI3ZlcnNpb24gMzAwIGVzXG5cbmxheW91dCAobG9jYXRpb24gPSAwKSBpbiB2ZWMyIGFfdmVydGV4O1xuXG5vdXQgdmVjMiB2X2Nvb3JkO1xuXG52b2lkIG1haW4oKSB7XG4gICAgdl9jb29yZCA9IGFfdmVydGV4O1xuXG4gICAgdmVjMiBwb3NpdGlvbiA9IGFfdmVydGV4ICogMi4wIC0gMS4wO1xuICAgIGdsX1Bvc2l0aW9uID0gdmVjNChwb3NpdGlvbiwgMC4wLCAxLjApO1xufSIsKChlLHQsbik9PntsZXQgcj0iIjtmb3IobGV0IGU9MTtlPHQ7KytlKXtjb25zdCBuPWUtMSxhPWUscz1gdV9tZWRpdW1wWyR7dCtNYXRoLmZsb29yKG4vNCl9XVske24lNH1dYCxvPWB1X21lZGl1bXBbJHt0K01hdGguZmxvb3IoYS80KX1dWyR7YSU0fV1gO3IrPWBcbiAgICBpZiAodCA8PSAke299KSB7XG4gICAgICAgIHJldHVybiBtaXgodV9tZWRpdW1wWyR7bn1dLCB1X21lZGl1bXBbJHthfV0sICh0IC0gJHtzfSkgLyAoJHtvfSAtICR7c30pKTtcbiAgICB9XG5gfXJldHVybmAjdmVyc2lvbiAzMDAgZXNcbnByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xuXG51bmlmb3JtIHZlYzQgdV9tZWRpdW1wWyR7ZX1dO1xuXG5pbiB2ZWMyIHZfY29vcmQ7XG5vdXQgdmVjNCBvX2NvbG9yO1xuXG52ZWM0IGdldEdyYWRpZW50Q29sb3IoaW4gZmxvYXQgdCkge1xuICAgIGlmICh0IDw9IHVfbWVkaXVtcFske3R9XVswXSkge1xuICAgICAgICByZXR1cm4gdV9tZWRpdW1wWzBdO1xuICAgIH1cbiAgICAke3J9XG4gICAgcmV0dXJuIHVfbWVkaXVtcFske3QtMX1dO1xufVxuXG52b2lkIG1haW4oKSB7XG4gICAgdmVjNCBjb2xvciA9IGdldEdyYWRpZW50Q29sb3Iodl9jb29yZC54KTtcbiAgICAke24/ImNvbG9yID0gcG93KGNvbG9yLCB2ZWM0KDAuNDU0NTQ1NDUpKTsiOiIifVxuICAgIGNvbG9yLnJnYiAqPSBjb2xvci5hO1xuXG4gICAgb19jb2xvciA9IGNvbG9yO1xufWB9KShyLGUsdCkpO3JldHVybiBCbi5zZXQobixhKSxhfSxMbj0oZSx0LG4scixhLHMpPT57Y29uc3Qgbz1lLm1lZGl1bXA7bGV0IGk9MDtmb3IobGV0IGU9YTtlPHM7ZSsrKXtjb25zdCB0PW5bZV07b1tpKytdPSh0Pj4xNikvMjU1LG9baSsrXT0odD4+OCYyNTUpLzI1NSxvW2krK109KDI1NSZ0KS8yNTUsb1tpKytdPXJbZV19Zm9yKGxldCBlPWE7ZTxzO2UrKylvW2krK109dFtlXS8yNTV9O2xldCBVbjtjb25zdCBObj0oZSx0KT0+KFVuP3B0WzBdPT09ZSYmcHRbNF09PT10fHwocHRbMF09ZSxwdFsyXT1lLHB0WzRdPXQscHRbNl09dCxuLmJ1ZmZlclN1YkRhdGEobi5BUlJBWV9CVUZGRVIsMCxwdCkpOlVuPSgoZSx0KT0+e2NvbnN0IHI9ZnQoKTtyZXR1cm4gdnQociksbi5iaW5kQnVmZmVyKG4uQVJSQVlfQlVGRkVSLHIudmVydGV4QnVmZmVyKSxwdFswXT1lLHB0WzJdPWUscHRbNF09dCxwdFs2XT10LG4uYnVmZmVyRGF0YShuLkFSUkFZX0JVRkZFUixwdCxuLlNUQVRJQ19EUkFXKSxuLmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KDApLG4udmVydGV4QXR0cmliUG9pbnRlcigwLDIsbi5GTE9BVCwhMSwwLDApLHJ9KShlLHQpLFVuKSxEbj0oZSx0LHIpPT57ZS51c2VQcm9ncmFtKCksZS5iaW5kVW5pZm9ybSgpLHZ0KE5uKHQscikpLG4uZHJhd0FycmF5cyhuLlRSSUFOR0xFX1NUUklQLDAsNCl9O2xldCBqbj1udWxsO2NvbnN0IHpuPSgpPT4oam58fChqbj1oZSg1MTIsMSwhMSkpLGpuKTtsZXQgWG49MDtjb25zdCBXbj0oKT0+WG4sR249bmV3IEZsb2F0MzJBcnJheSgyNTYpLFZuPW5ldyBGbG9hdDMyQXJyYXkoMjU2KTtmb3IobGV0IGU9MDtlPDI1NjsrK2Upe2NvbnN0IHQ9ZS8yNTU7R25bZV09TWF0aC5wb3codCwyLjIzMzMzMzMzKSxWbltlXT10fWNvbnN0IFluPShlLHQsYSxzLG8saSxjLGwsdSxoLGIsZCxmLG0sdixfLHA9bnVsbCxnPW51bGwseD1udWxsLEU9MCx5PTAsQT0wLFQ9MCxSPTAsTT0wLHc9MCxGPTApPT57Y29uc3QgJD1yLmN1cnJlbnRBdHRhY2htZW50T2JqZWN0LE89aGUoYSxzLCExKTtyLmJpbmQoTyk7Y29uc3QgUz0iaW5uZXIiPT09bSxrPW51bGwhPT1wJiZudWxsIT09ZyYmbnVsbCE9PXg7bGV0IEM9bnVsbDtpZihrJiYoQz0oKGUsdCxuKT0+e2NvbnN0IGE9ci5jdXJyZW50QXR0YWNobWVudE9iamVjdCxzPXpuKCk7ci5iaW5kKHMpO2NvbnN0IG89ZS5sZW5ndGg7dW4oKTtjb25zdCBpPVduKCk7Zm9yKGxldCByPTA7cjxvO3IrPWktMSl7Y29uc3QgYT1NYXRoLm1pbihyK2ksbykscz1JbihhLXIsITEpO0xuKHMsZSx0LG4scixhKSxEbihzLGVbcl0vMjU1LGVbYS0xXS8yNTUpfXJldHVybiBVdCgpLGEmJnIuYmluZChhKSxzLnRleHR1cmV9KShwLGcseCkpLFMpe3IucmVzZXQoKSxyLnNldFRyYW5zZm9ybSgxLDAsMCwxLDAsMCksa2UoZSwhMCk7Y29uc3QgYT1ybigpO2FuKGEsZS53aWR0aCxlLmhlaWdodCksc24oYSksayYmQz8oKGUsdCxyPSExKT0+e1NlKDIsbi5URVhUVVJFMix0LHIpLFNlKDEsbi5URVhUVVJFMSxudWxsKSxTZSgwLG4uVEVYVFVSRTAsZSxyKX0pKHQsQywhMCk6a2UodCwhMCl9ZWxzZSBrJiZDPygoZSx0LHIsYT0hMSk9PntTZSgyLG4uVEVYVFVSRTIscixhKSxTZSgxLG4uVEVYVFVSRTEsdCxhKSxTZSgwLG4uVEVYVFVSRTAsZSxhKX0pKHQsZSxDLCEwKTpubih0LGUsITApO2NvbnN0IFA9IShTfHwiZnVsbCI9PT1tJiZ2KSxCPSEoYT09PXUmJnM9PT1oJiYwPT09YiYmMD09PWQpLEk9ISgxPT09Xyk7Uz92PzY3MCE9PUx0KCkmJihJdCg2NzApLG4uYmxlbmRGdW5jKG4uRFNUX0FMUEhBLG4uWkVSTykpOjY3MyE9PUx0KCkmJihJdCg2NzMpLG4uYmxlbmRGdW5jKG4uRFNUX0FMUEhBLG4uT05FX01JTlVTX1NSQ19BTFBIQSkpOnVuKCk7Y29uc3QgTD1QbihQLEIsZixtLHYsSSxrKTsoKGUsdCxuLHIsYSxzLG8saSxjLGwsdSxoLGIsZCxmLG0sdixfLHAsZyx4LEUseSxBLFQpPT57bGV0IFI7RT8oUj1lLnRleHR1cmVzLFJbMF09MCxSWzFdPTEsVCYmKFJbMl09MikpOlQmJihSPWUudGV4dHVyZXMsUlswXT0wLFJbMV09Mik7Y29uc3QgTT1lLm1lZGl1bXA7bGV0IHc9MDtFJiYoTVt3KytdPXQvcixNW3crK109bi9hLE1bdysrXT1zL3IsTVt3KytdPShuLWEtbykvYSkseSYmKE1bdysrXT10L2ksTVt3KytdPW4vYyxNW3crK109bC9pLE1bdysrXT0obi1jLXUpL2MpLFR8fChoPyhNW3crK109ZCxNW3crK109ZixNW3crK109bSxNW3crK109dik6KE1bdysrXT1kLE1bdysrXT1mLE1bdysrXT1tLE1bdysrXT12LE1bdysrXT1fLE1bdysrXT1wLE1bdysrXT1nLE1bdysrXT14KSksQSYmKE1bd109Yil9KShMLGEscyxvLGksYyxsLHUsaCxiLGQsZixfLEUseSxBLFQsUixNLHcsRixQLEIsSSxrKSxzbihMKTtjb25zdCBVPU8udGV4dHVyZTtyZXR1cm4gZWUoTywhMSksVXQoKSwkJiZyLmJpbmQoJCksVX0scW49KGUsdCxuPTAsYT0xLHM9NCxvPTQsaT0xLGM9MSxsPSExLHU9ITEpPT57Y29uc3QgaD1yLmN1cnJlbnRBdHRhY2htZW50T2JqZWN0LGI9ZS53aWR0aCxkPWUuaGVpZ2h0LGY9Um4ueCxtPVJuLnksdj1PbihlLHQscyxvLGMsITEpLF89di53aWR0aCxwPXYuaGVpZ2h0LGc9Um4ueC1mLHg9Um4ueS1tLEU9WW4oZSx2LGw/YjpfLGw/ZDpwLGIsZCxsPzA6ZyxsPzA6eCxfLHAsbD8tZzowLGw/LXg6MCwhMCxsPyJpbm5lciI6Im91dGVyIix1LGksbnVsbCxudWxsLG51bGwsTW4obixhLCEwKSx3bihuLGEsITApLEZuKG4sYSwhMCksYSwwLDAsMCwwKTtyZXR1cm4gTChlKSxMKHYpLGgmJnIuYmluZChoKSxFfSxLbj1NYXRoLlBJLzE4MCxIbj0oZSx0LG49NCxhPTQ1LHM9MCxvPTEsaT00LGM9NCxsPTEsdT0xLGg9ITEsYj0hMSxkPSExKT0+e2NvbnN0IGY9ci5jdXJyZW50QXR0YWNobWVudE9iamVjdCxtPWUud2lkdGgsdj1lLmhlaWdodCxfPVJuLngscD1Sbi55LGc9T24oZSx0LGksYyx1LCExKSx4PWcud2lkdGgsRT1nLmhlaWdodCx5PVJuLngsVD1Sbi55LFI9eS1fLE09VC1wLHc9TWF0aC5zcXJ0KHRbMF0qdFswXSt0WzFdKnRbMV0pLEY9TWF0aC5zcXJ0KHRbMl0qdFsyXSt0WzNdKnRbM10pLCQ9QSgpLE89YSpLbixTPU1hdGguY29zKE8pKm4qKHcvJCksaz1NYXRoLnNpbihPKSpuKihGLyQpLEM9aD9tOngrTWF0aC5tYXgoMCxNYXRoLmFicyhTKS1SKSxQPWg/djpFK01hdGgubWF4KDAsTWF0aC5hYnMoayktTSksQj1NYXRoLmNlaWwoQyksST1NYXRoLmNlaWwoUCksVT0oQi1DKS8yLE49KEktUCkvMixEPWg/MDpNYXRoLm1heCgwLFItUykrVSxqPWg/MDpNYXRoLm1heCgwLE0taykrTix6PWg/Uy15OihTPjA/TWF0aC5tYXgoMCxTLVIpOjApK1UsWD1oP2stVDooaz4wP01hdGgubWF4KDAsay1NKTowKStOO2xldCBXLEc9IiI7aD8oRz0iaW5uZXIiLFc9Ynx8ZCk6IWImJmQ/KEc9ImZ1bGwiLFc9ITApOihHPSJvdXRlciIsVz1iKTtjb25zdCBWPVluKGUsZyxCLEksbSx2LEQsaix4LEUseixYLCEwLEcsVyxsLG51bGwsbnVsbCxudWxsLE1uKHMsbywhMCksd24ocyxvLCEwKSxGbihzLG8sITApLG8sMCwwLDAsMCk7cmV0dXJuIEwoZSksTChnKSxmJiZyLmJpbmQoZiksVn0sWm49TWF0aC5QSS8xODAsUW49KGUsdCxuPTQsYT00NSxzPTE2Nzc3MjE1LG89MSxpPTAsYz0xLGw9NCx1PTQsaD0xLGI9MSxkPTAsZj0hMSk9Pntjb25zdCBtPWUud2lkdGgsdj1lLmhlaWdodCxfPVJuLngscD1Sbi55LGc9TWF0aC5zcXJ0KHRbMF0qdFswXSt0WzFdKnRbMV0pLHg9TWF0aC5zcXJ0KHRbMl0qdFsyXSt0WzNdKnRbM10pLEU9QSgpLHk9YSpabixUPU1hdGguY29zKHkpKm4qKGcvRSksUj1NYXRoLnNpbih5KSpuKih4L0UpLE09ci5jdXJyZW50QXR0YWNobWVudE9iamVjdCx3PWhlKG0sdiwhMSk7ci5iaW5kKHcpLHIucmVzZXQoKSxyLnNldFRyYW5zZm9ybSgxLDAsMCwxLDAsMCksa2UoZSk7Y29uc3QgRj1ybigpO2FuKEYsZS53aWR0aCxlLmhlaWdodCksc24oRiksci5zZXRUcmFuc2Zvcm0oMSwwLDAsMSwyKlQsMipSKSxfbigpLGFuKEYsZS53aWR0aCxlLmhlaWdodCksc24oRiksVXQoKTtjb25zdCAkPXcudGV4dHVyZTtNJiZyLmJpbmQoTSk7Y29uc3QgTz1PbigkLHQsbCx1LGIsITEpO2VlKHcpO2NvbnN0IFM9Ty53aWR0aCxrPU8uaGVpZ2h0LEM9TWF0aC5jZWlsKFMrMipNYXRoLmFicyhUKSksUD1NYXRoLmNlaWwoaysyKk1hdGguYWJzKFIpKTtsZXQgQj0iIjtzd2l0Y2goZCl7Y2FzZSAwOkI9ImZ1bGwiO2JyZWFrO2Nhc2UgMTpCPSJpbm5lciI7YnJlYWs7Y2FzZSAyOkI9Im91dGVyIn1jb25zdCBJPSJpbm5lciI9PT1CLFU9ST9tOkMsTj1JP3Y6UCxEPU1hdGguYWJzKFQpLGo9TWF0aC5hYnMoUiksej0oUy1tKS8yLFg9KGstdikvMixXPUk/MDpEK3osRz1JPzA6aitYLFY9WW4oZSxPLFUsTixtLHYsVyxHLFMsayxJPy16LVQ6RC1ULEk/LVgtUjpqLVIsITEsQixmLGgsbnVsbCxudWxsLG51bGwsTW4ocyxvLCEwKSx3bihzLG8sITApLEZuKHMsbywhMCksbyxNbihpLGMsITApLHduKGksYywhMCksRm4oaSxjLCEwKSxjKTtyZXR1cm4gUm4ueD1fK1csUm4ueT1wK0csTChlKSxMKE8pLFZ9LEpuPU1hdGguUEkvMTgwLGVyPShlLHQsbj00LGE9NDUscyxvLGksYz00LGw9NCx1PTEsaD0xLGI9MCxkPSExKT0+e2NvbnN0IGY9ZS53aWR0aCxtPWUuaGVpZ2h0LHY9Um4ueCxfPVJuLnkscD1NYXRoLnNxcnQodFswXSp0WzBdK3RbMV0qdFsxXSksZz1NYXRoLnNxcnQodFsyXSp0WzJdK3RbM10qdFszXSkseD1BKCksRT1hKkpuLHk9TWF0aC5jb3MoRSkqbioocC94KSxUPU1hdGguc2luKEUpKm4qKGcveCksUj1yLmN1cnJlbnRBdHRhY2htZW50T2JqZWN0LE09aGUoZixtLCExKTtyLmJpbmQoTSksci5yZXNldCgpLHIuc2V0VHJhbnNmb3JtKDEsMCwwLDEsMCwwKSxrZShlKTtjb25zdCB3PXJuKCk7YW4odyxlLndpZHRoLGUuaGVpZ2h0KSxzbih3KSxyLnNldFRyYW5zZm9ybSgxLDAsMCwxLDIqeSwyKlQpLF9uKCksYW4odyxlLndpZHRoLGUuaGVpZ2h0KSxzbih3KSxVdCgpO2NvbnN0IEY9TS50ZXh0dXJlO1ImJnIuYmluZChSKTtjb25zdCAkPU9uKEYsdCxjLGwsaCwhMSk7ZWUoTSk7Y29uc3QgTz0kLndpZHRoLFM9JC5oZWlnaHQsaz1NYXRoLmNlaWwoTysyKk1hdGguYWJzKHkpKSxDPU1hdGguY2VpbChTKzIqTWF0aC5hYnMoVCkpO2xldCBQPSIiO3N3aXRjaChiKXtjYXNlIDA6UD0iZnVsbCI7YnJlYWs7Y2FzZSAxOlA9ImlubmVyIjticmVhaztjYXNlIDI6UD0ib3V0ZXIifWNvbnN0IEI9ImlubmVyIj09PVAsST1CP2Y6ayxVPUI/bTpDLE49TWF0aC5hYnMoeSksRD1NYXRoLmFicyhUKSxqPShPLWYpLzIsej0oUy1tKS8yLFg9Qj8wOk4raixXPUI/MDpEK3osRz1ZbihlLCQsSSxVLGYsbSxYLFcsTyxTLEI/LWoteTpOLXksQj8tei1UOkQtVCwhMSxQLGQsdSxpLHMsbywwLDAsMCwwLDAsMCwwLDApO3JldHVybiBSbi54PXYrWCxSbi55PV8rVyxMKGUpLEwoJCksR30sdHI9TWF0aC5QSS8xODAsbnI9KGUsdCxuPTQscj00NSxhLHMsbyxpPTQsYz00LGw9MSx1PTEsaD0wLGI9ITEpPT57Y29uc3QgZD1lLndpZHRoLGY9ZS5oZWlnaHQsbT1Sbi54LHY9Um4ueSxfPU9uKGUsdCxpLGMsdSwhMSkscD1fLndpZHRoLGc9Xy5oZWlnaHQseD1Sbi54LEU9Um4ueSx5PXgtbSxUPUUtdixSPU1hdGguc3FydCh0WzBdKnRbMF0rdFsxXSp0WzFdKSxNPU1hdGguc3FydCh0WzJdKnRbMl0rdFszXSp0WzNdKSx3PUEoKSxGPXIqdHIsJD1NYXRoLmNvcyhGKSpuKihSL3cpLE89TWF0aC5zaW4oRikqbiooTS93KSxTPTE9PT1oLGs9Uz9kOnArTWF0aC5tYXgoMCxNYXRoLmFicygkKS15KSxDPVM/ZjpnK01hdGgubWF4KDAsTWF0aC5hYnMoTyktVCksUD1NYXRoLmNlaWwoayksQj1NYXRoLmNlaWwoQyksST0oUC1rKS8yLFU9KEItQykvMixOPVM/MDpNYXRoLm1heCgwLHktJCkrSSxEPVM/MDpNYXRoLm1heCgwLFQtTykrVSxqPVM/JC14OigkPjA/TWF0aC5tYXgoMCwkLXkpOjApK0ksej1TP08tRTooTz4wP01hdGgubWF4KDAsTy1UKTowKStVO2xldCBYPSIiO3N3aXRjaChoKXtjYXNlIDA6WD0iZnVsbCI7YnJlYWs7Y2FzZSAxOlg9ImlubmVyIjticmVhaztjYXNlIDI6WD0ib3V0ZXIifWNvbnN0IFc9WW4oZSxfLFAsQixkLGYsTixELHAsZyxqLHosITAsWCxiLGwsbyxhLHMsMCwwLDAsMCwwLDAsMCwwKTtyZXR1cm4gUm4ueD1tK04sUm4ueT12K0QsTChlKSxMKF8pLFd9LHJyPShlLHQsbixyKT0+e2NvbnN0IGE9YGMkeygiMCIrZSkuc2xpY2UoLTIpfSR7KCIwIit0KS5zbGljZSgtMil9JHtuPyJ5IjoibiJ9JHtyPyJ5IjoibiJ9YDtpZihBbi5oYXMoYSkpcmV0dXJuIEFuLmdldChhKTtjb25zdCBzPShyPzE6MikrTWF0aC5jZWlsKGUqdC80KSxvPW5ldyB3dCgiI3ZlcnNpb24gMzAwIGVzXG5cbmxheW91dCAobG9jYXRpb24gPSAwKSBpbiB2ZWMyIGFfdmVydGV4O1xuXG5vdXQgdmVjMiB2X2Nvb3JkO1xuXG52b2lkIG1haW4oKSB7XG4gICAgdl9jb29yZCA9IGFfdmVydGV4O1xuXG4gICAgdmVjMiBwb3NpdGlvbiA9IGFfdmVydGV4ICogMi4wIC0gMS4wO1xuICAgIGdsX1Bvc2l0aW9uID0gdmVjNChwb3NpdGlvbiwgMC4wLCAxLjApO1xufSIsKChlLHQsbixyLGEpPT57Y29uc3Qgcz1NYXRoLmZsb29yKC41KnQpLG89TWF0aC5mbG9vciguNSpuKSxpPXQqbjtsZXQgYz0iIjtjb25zdCBsPWE/MToyO2ZvcihsZXQgZT0wO2U8aTsrK2UpYys9YFxuICAgIHJlc3VsdCArPSBnZXRXZWlnaHRlZENvbG9yKCR7ZX0sIHVfbWVkaXVtcFske2wrTWF0aC5mbG9vcihlLzQpfV1bJHtlJTR9XSk7XG5gO3JldHVybmAjdmVyc2lvbiAzMDAgZXNcbnByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xuXG51bmlmb3JtIHNhbXBsZXIyRCB1X3RleHR1cmU7XG51bmlmb3JtIHZlYzQgdV9tZWRpdW1wWyR7ZX1dO1xuXG5pbiB2ZWMyIHZfY29vcmQ7XG5vdXQgdmVjNCBvX2NvbG9yO1xuXG5cbmZsb2F0IGlzSW5zaWRlKGluIHZlYzIgdXYpIHtcbiAgICByZXR1cm4gc3RlcCg0LjAsIGRvdChzdGVwKHZlYzQoMC4wLCB1di54LCAwLjAsIHV2LnkpLCB2ZWM0KHV2LngsIDEuMCwgdXYueSwgMS4wKSksIHZlYzQoMS4wKSkpO1xufVxuXG52ZWM0IGdldFdlaWdodGVkQ29sb3IgKGluIGludCBpLCBpbiBmbG9hdCB3ZWlnaHQpIHtcbiAgICB2ZWMyIHJjcF9zaXplID0gdV9tZWRpdW1wWzBdLnh5O1xuXG4gICAgaW50IGlfZGl2X3ggPSBpIC8gJHt0fTtcbiAgICBpbnQgaV9tb2RfeCA9IGkgLSAke3R9ICogaV9kaXZfeDtcbiAgICB2ZWMyIG9mZnNldCA9IHZlYzIoaV9tb2RfeCAtICR7c30sICR7b30gLSBpX2Rpdl94KTtcbiAgICB2ZWMyIHV2ID0gdl9jb29yZCArIG9mZnNldCAqIHJjcF9zaXplO1xuXG4gICAgdmVjNCBjb2xvciA9IHRleHR1cmUodV90ZXh0dXJlLCB1dik7XG4gICAgY29sb3IucmdiIC89IG1heCgwLjAwMDEsIGNvbG9yLmEpO1xuICAgICR7YT8iIjoiXG4gICAgdmVjNCBzdWJzdGl0dXRlX2NvbG9yID0gdV9tZWRpdW1wWzFdO1xuICAgIGNvbG9yID0gbWl4KHN1YnN0aXR1dGVfY29sb3IsIGNvbG9yLCBpc0luc2lkZSh1dikpO1xuIn1cblxuICAgIHJldHVybiBjb2xvciAqIHdlaWdodDtcbn1cblxudm9pZCBtYWluKCkge1xuICAgIGZsb2F0IHJjcF9kaXZpc29yID0gdV9tZWRpdW1wWzBdLno7XG4gICAgZmxvYXQgYmlhcyAgICAgICAgPSB1X21lZGl1bXBbMF0udztcblxuICAgIHZlYzQgcmVzdWx0ID0gdmVjNCgwLjApO1xuICAgICR7Y31cbiAgICByZXN1bHQgPSBjbGFtcChyZXN1bHQgKiByY3BfZGl2aXNvciArIGJpYXMsIDAuMCwgMS4wKTtcbiAgICAke3I/InJlc3VsdC5hID0gdGV4dHVyZSh1X3RleHR1cmUsIHZfY29vcmQpLmE7IjoiIn1cblxuICAgIHJlc3VsdC5yZ2IgKj0gcmVzdWx0LmE7XG4gICAgb19jb2xvciA9IHJlc3VsdDtcbn1gfSkocyxlLHQsbixyKSk7cmV0dXJuIEFuLnNldChhLG8pLG99LGFyPShlLHQ9MCxuPTAsYSxzPTEsbz0wLGk9ITAsYz0hMCxsPTAsdT0wKT0+e2NvbnN0IGg9ci5jdXJyZW50QXR0YWNobWVudE9iamVjdCxiPWUud2lkdGgsZD1lLmhlaWdodCxmPWhlKGIsZCwhMSk7ci5iaW5kKGYpLHIucmVzZXQoKSxyLnNldFRyYW5zZm9ybSgxLDAsMCwxLDAsMCksa2UoZSwhMCksVXQoKTtjb25zdCBtPXJyKHQsbixpLGMpOygoZSx0LG4scixhLHMsbyxpLGMsbCx1KT0+e2NvbnN0IGg9ZS5tZWRpdW1wO2hbMF09MS90LGhbMV09MS9uLGhbMl09MS9hLGhbM109cy8yNTU7bGV0IGI9NDtvfHwoaFtiKytdPWksaFtiKytdPWMsaFtiKytdPWwsaFtiKytdPXUpO2NvbnN0IGQ9ci5sZW5ndGg7Zm9yKGxldCBlPTA7ZTxkO2UrKyloW2IrK109cltlXX0pKG0sYixkLGEscyxvLGMsTW4obCx1LCExKSx3bihsLHUsITEpLEZuKGwsdSwhMSksdSksc24obSk7Y29uc3Qgdj1mLnRleHR1cmU7cmV0dXJuIEwoZSksZWUoZiwhMSksaCYmci5iaW5kKGgpLHZ9LHNyPShlLHQsbixhPTAscz0wLG89MCxpPTAsYz0wLGw9MCx1PTAsaD0wLGI9MixkPTAsZj0wKT0+e2NvbnN0IG09ci5jdXJyZW50QXR0YWNobWVudE9iamVjdCx2PUEoKSxfPU1hdGguc3FydCh0WzBdKnRbMF0rdFsxXSp0WzFdKS92LHA9TWF0aC5zcXJ0KHRbMl0qdFsyXSt0WzNdKnRbM10pL3YsZz1lLndpZHRoLHg9ZS5oZWlnaHQsRT1nL18seT14L3AsVD1oZShnLHgsITEpO3IuYmluZChUKTtjb25zdCBSPXhuKGEscyxuKTtubihlLFIpO2NvbnN0IE09KChlLHQsbik9Pntjb25zdCByPWBkJHtlfSR7dH0ke259YDtpZihBbi5oYXMocikpcmV0dXJuIEFuLmdldChyKTtjb25zdCBhPW5ldyB3dCgiI3ZlcnNpb24gMzAwIGVzXG5cbmxheW91dCAobG9jYXRpb24gPSAwKSBpbiB2ZWMyIGFfdmVydGV4O1xuXG5vdXQgdmVjMiB2X2Nvb3JkO1xuXG52b2lkIG1haW4oKSB7XG4gICAgdl9jb29yZCA9IGFfdmVydGV4O1xuXG4gICAgdmVjMiBwb3NpdGlvbiA9IGFfdmVydGV4ICogMi4wIC0gMS4wO1xuICAgIGdsX1Bvc2l0aW9uID0gdmVjNChwb3NpdGlvbiwgMC4wLCAxLjApO1xufSIsKChlLHQsbixyKT0+e2xldCBhLHMsbztzd2l0Y2godCl7Y2FzZSAxOmE9Im1hcF9jb2xvci5yIjticmVhaztjYXNlIDI6YT0ibWFwX2NvbG9yLmciO2JyZWFrO2Nhc2UgNDphPSJtYXBfY29sb3IuYiI7YnJlYWs7Y2FzZSA4OmE9Im1hcF9jb2xvci5hIjticmVhaztkZWZhdWx0OmE9IjAuNSJ9c3dpdGNoKG4pe2Nhc2UgMTpzPSJtYXBfY29sb3IuciI7YnJlYWs7Y2FzZSAyOnM9Im1hcF9jb2xvci5nIjticmVhaztjYXNlIDQ6cz0ibWFwX2NvbG9yLmIiO2JyZWFrO2Nhc2UgODpzPSJtYXBfY29sb3IuYSI7YnJlYWs7ZGVmYXVsdDpzPSIwLjUifXN3aXRjaChyKXtjYXNlIDA6bz0iXG4gICAgdmVjNCBzb3VyY2VfY29sb3IgPSB0ZXh0dXJlKHVfdGV4dHVyZXNbMF0sIHV2KTtcbiI7YnJlYWs7Y2FzZSAzOm89IlxuICAgIHZlYzQgc291cmNlX2NvbG9yID10ZXh0dXJlKHVfdGV4dHVyZXNbMF0sIG1peCh2X2Nvb3JkLCB1diwgc3RlcChhYnModXYgLSB2ZWMyKDAuNSkpLCB2ZWMyKDAuNSkpKSk7XG4iO2JyZWFrO2Nhc2UgMTpvPSJcbiAgICB2ZWM0IHN1YnN0aXR1dGVfY29sb3IgPSB1X21lZGl1bXBbMl07XG4gICAgdmVjNCBzb3VyY2VfY29sb3IgPSBtaXgoc3Vic3RpdHV0ZV9jb2xvciwgdGV4dHVyZSh1X3RleHR1cmVzWzBdLCB1diksIGlzSW5zaWRlKHV2KSk7XG4iO2JyZWFrO2RlZmF1bHQ6bz0iXG4gICAgdmVjNCBzb3VyY2VfY29sb3IgPSB0ZXh0dXJlKHVfdGV4dHVyZXNbMF0sIGZyYWN0KHV2KSk7XG4ifXJldHVybmAjdmVyc2lvbiAzMDAgZXNcbnByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xuXG51bmlmb3JtIHNhbXBsZXIyRCB1X3RleHR1cmVzWzJdO1xudW5pZm9ybSB2ZWM0IHVfbWVkaXVtcFske2V9XTtcblxuaW4gdmVjMiB2X2Nvb3JkO1xub3V0IHZlYzQgb19jb2xvcjtcblxuXG5mbG9hdCBpc0luc2lkZShpbiB2ZWMyIHV2KSB7XG4gICAgcmV0dXJuIHN0ZXAoNC4wLCBkb3Qoc3RlcCh2ZWM0KDAuMCwgdXYueCwgMC4wLCB1di55KSwgdmVjNCh1di54LCAxLjAsIHV2LnksIDEuMCkpLCB2ZWM0KDEuMCkpKTtcbn1cblxudm9pZCBtYWluKCkge1xuICAgIHZlYzIgdXZfdG9fc3Rfc2NhbGUgID0gdV9tZWRpdW1wWzBdLnh5O1xuICAgIHZlYzIgdXZfdG9fc3Rfb2Zmc2V0ID0gdV9tZWRpdW1wWzBdLnp3O1xuICAgIHZlYzIgc2NhbGUgICAgICAgICAgID0gdV9tZWRpdW1wWzFdLnh5O1xuXG4gICAgdmVjMiBzdCA9IHZfY29vcmQgKiB1dl90b19zdF9zY2FsZSAtIHV2X3RvX3N0X29mZnNldDtcbiAgICB2ZWM0IG1hcF9jb2xvciA9IHRleHR1cmUodV90ZXh0dXJlc1sxXSwgc3QpO1xuXG4gICAgdmVjMiBvZmZzZXQgPSB2ZWMyKCR7YX0sICR7c30pIC0gMC41O1xuICAgIHZlYzIgdXYgPSB2X2Nvb3JkICsgb2Zmc2V0ICogc2NhbGU7XG4gICAgJHtvfVxuXG4gICAgb19jb2xvciA9IG1peCh0ZXh0dXJlKHVfdGV4dHVyZXNbMF0sIHZfY29vcmQpLCBzb3VyY2VfY29sb3IsIGlzSW5zaWRlKHN0KSk7XG59YH0pKDE9PT1uPzM6MixlLHQsbikpO3JldHVybiBBbi5zZXQocixhKSxhfSkoYyxsLGIpOygoZSx0LG4scixhLHMsbyxpLGMsbCx1LGgsYixkKT0+e2NvbnN0IGY9ZS50ZXh0dXJlcztmWzBdPTAsZlsxXT0xO2NvbnN0IG09ZS5tZWRpdW1wO21bMF09ci90LG1bMV09YS9uLG1bMl09cy90LG1bM109KGEtbi1vKS9uLG1bNF09aS9yLG1bNV09LWMvYSwxPT09bCYmKG1bOF09dSxtWzldPWgsbVsxMF09YixtWzExXT1kKX0pKE0sZyx4LEUseSxvLGksdSxoLGIsTW4oZCxmLCEwKSx3bihkLGYsITApLEZuKGQsZiwhMCksZiksVXQoKSxzbihNKTtjb25zdCB3PVQudGV4dHVyZTtyZXR1cm4gbSYmci5iaW5kKG0pLEwoZSksTChSKSxlZShULCExKSx3fSxvcj0oZSx0LG4sYSk9Pntjb25zdCBzPXIuY3VycmVudEF0dGFjaG1lbnRPYmplY3Qsbz1lLndpZHRoLGk9ZS5oZWlnaHQ7c3dpdGNoKHIuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uKXtjYXNlIm5vcm1hbCI6Y2FzZSJsYXllciI6Y2FzZSJhZGQiOmNhc2Uic2NyZWVuIjpjYXNlImFscGhhIjpjYXNlImVyYXNlIjpjYXNlImNvcHkiOntyLmJpbmQoci4kbWFpbkF0dGFjaG1lbnRPYmplY3QpLHIuc2V0VHJhbnNmb3JtKDEsMCwwLDEsbixhKTtjb25zdCBzPWRuKCEwKTsoKGUsdCxuLGEpPT57Y29uc3Qgcz1lLmhpZ2hwLG89ci4kbWF0cml4O3NbMF09b1swXSxzWzFdPW9bMV0sc1syXT1vWzNdLHNbM109b1s0XSxzWzRdPW9bNl0sc1s1XT1vWzddLHNbNl09bixzWzddPWEsc1s4XT14KCksc1s5XT1FKCk7Y29uc3QgaT1lLm1lZGl1bXA7aVswXT10WzBdLGlbMV09dFsxXSxpWzJdPXRbMl0saVszXT10WzNdLGlbNF09dFs0XSxpWzVdPXRbNV0saVs2XT10WzZdLGlbN109dFs3XX0pKHMsdCxvLGkpLGtlKGUpLHBuKHIuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uKSxzbihzKX1icmVhaztkZWZhdWx0Ontjb25zdCBzPWxuKG4sYSxvLGkpLGM9aGUobyxpLCExKTtyLmJpbmQoYyksbm4ocyxlKTtjb25zdCBsPVF0KHIuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uKTtibihsLHRbMF0sdFsxXSx0WzJdLHRbM10sdFs0XSx0WzVdLHRbNl0sdFs3XSksc24obCksci5iaW5kKHIuJG1haW5BdHRhY2htZW50T2JqZWN0KSxyLnJlc2V0KCksci5zZXRUcmFuc2Zvcm0oMSwwLDAsMSxuLGEpLGhuKGMudGV4dHVyZSksTChzKSxlZShjKX19cyYmci5iaW5kKHMpLFV0KCl9LGlyPVtdLGNyPWU9PntlLnNpemUmJmUuY2xlYXIoKSxpci5wdXNoKGUpfSxscj0oZSx0LG4scixhPW51bGwpPT57dC5oYXMobil8fHQuc2V0KG4saXIucG9wKCl8fG5ldyBNYXApO2NvbnN0IHM9dC5nZXQobik7aWYobnVsbD09PWEpe2lmKCFzLmhhcyhyKSlyZXR1cm47cmV0dXJuIGUuZGVzdHJveShzLmdldChyKSkscy5kZWxldGUociksdm9pZChzLnNpemV8fCh0LmRlbGV0ZShuKSxjcihzKSkpfXMuc2V0KHIsYSl9O2NvbnN0IHVyPW5ldyBjbGFzc3tjb25zdHJ1Y3Rvcigpe09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCJfJHBvb2wiLHtlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMCx2YWx1ZTp2b2lkIDB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywiXyRzdG9yZSIse2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwLHZhbHVlOnZvaWQgMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCJfJHRyYXNoIix7ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITAsdmFsdWU6dm9pZCAwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsIiR0aW1lcklkIix7ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITAsdmFsdWU6dm9pZCAwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsIiRyZW1vdmVDYWNoZSIse2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwLHZhbHVlOnZvaWQgMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCIkcmVtb3ZlSWRzIix7ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITAsdmFsdWU6dm9pZCAwfSksdGhpcy5fJHBvb2w9W10sdGhpcy5fJHN0b3JlPW5ldyBNYXAsdGhpcy5fJHRyYXNoPW5ldyBNYXAsdGhpcy4kdGltZXJJZD1udWxsLHRoaXMuJHJlbW92ZUlkcz1bXSx0aGlzLiRyZW1vdmVDYWNoZT0hMX1yZXNldCgpeygoZSx0LG4pPT57bi5jbGVhcigpLG51bGwhPT1lLiR0aW1lcklkJiZjbGVhclRpbWVvdXQoZS4kdGltZXJJZCk7Zm9yKGNvbnN0IG4gb2YgdC52YWx1ZXMoKSl7Zm9yKGNvbnN0IHQgb2Ygbi52YWx1ZXMoKSl0JiZlLmRlc3Ryb3kodCk7Y3Iobil9dC5jbGVhcigpfSkodGhpcyx0aGlzLl8kc3RvcmUsdGhpcy5fJHRyYXNoKX1kZXN0cm95KGU9bnVsbCl7KChlLHQpPT57aWYodCYmIm9iamVjdCI9PXR5cGVvZiB0JiYiY2FudmFzImluIHQpe2NvbnN0IG49dC5jYW52YXMscj1uLndpZHRoLGE9bi5oZWlnaHQ7dC5jbGVhclJlY3QoMCwwLHIrMSxhKzEpLG4ud2lkdGg9bi5oZWlnaHQ9MSxlLnB1c2gobil9fSkodGhpcy5fJHBvb2wsZSl9Z2V0Q2FudmFzKCl7cmV0dXJuIHRoaXMuXyRwb29sLnBvcCgpfHxkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJjYW52YXMiKX1yZW1vdmUoZSx0KXsoKGUsdCxuKT0+e2lmKCFlLmhhcyh0KSlyZXR1cm47Y29uc3Qgcj1lLmdldCh0KTtyLmhhcyhuKSYmKHIuZGVsZXRlKG4pLHIuc2l6ZXx8KGNyKHIpLGUuZGVsZXRlKHQpKSl9KSh0aGlzLl8kc3RvcmUsZSx0KX1yZW1vdmVUaW1lcihlKXsoKGUsdCxuLHIpPT57aWYobi5oYXMocikpcmV0dXJuO2NvbnN0IGE9dC5nZXQocik7YSYmKGEuc2V0KCJ0cmFzaCIsITApLG4uc2V0KHIsYSksbnVsbCE9PWUuJHRpbWVySWQmJmNsZWFyVGltZW91dChlLiR0aW1lcklkKSxlLiRyZW1vdmVDYWNoZT0hMSxlLiR0aW1lcklkPXNldFRpbWVvdXQoKCk9PntlLiRyZW1vdmVDYWNoZT0hMCxlLiR0aW1lcklkPW51bGx9LDFlMykpfSkodGhpcyx0aGlzLl8kc3RvcmUsdGhpcy5fJHRyYXNoLGUpfXJlbW92ZVRpbWVyU2NoZWR1bGVkQ2FjaGUoKXsoKGUsdCk9PntpZih0LnNpemUpe2Zvcihjb25zdFtuLHJdb2YgdClyLmhhcygidHJhc2giKSYmKGUucmVtb3ZlQnlJZChuKSxlLiRyZW1vdmVJZHMucHVzaCgrbikpO3QuY2xlYXIoKSxlLiRyZW1vdmVDYWNoZT0hMX19KSh0aGlzLHRoaXMuXyR0cmFzaCl9cmVtb3ZlQnlJZChlKXsoKGUsdCxuKT0+e2lmKCF0LmhhcyhuKSlyZXR1cm47Y29uc3Qgcj10LmdldChuKTtmb3IoY29uc3QgdCBvZiByLnZhbHVlcygpKWUuZGVzdHJveSh0KTt0LmRlbGV0ZShuKSxjcihyKX0pKHRoaXMsdGhpcy5fJHN0b3JlLGUpfWdldEJ5SWQoZSl7cmV0dXJuIHRoaXMuXyRzdG9yZS5nZXQoZSl9Z2V0KGUsdCl7cmV0dXJuKChlLHQsbik9Pntjb25zdCByPWUuZ2V0KHQpfHxudWxsO3JldHVybiByPyhyLmRlbGV0ZSgidHJhc2giKSxyLmdldChuKXx8bnVsbCk6bnVsbH0pKHRoaXMuXyRzdG9yZSxlLHQpfXNldChlLHQsbj1udWxsKXtscih0aGlzLHRoaXMuXyRzdG9yZSxlLHQsbil9aGFzKGUsdD0iIil7cmV0dXJuKChlLHQsbj0iIik9Pm4/ISFlLmhhcyh0KSYmZS5nZXQodCkuaGFzKG4pOmUuaGFzKHQpKSh0aGlzLl8kc3RvcmUsZSx0KX1nZW5lcmF0ZUtleXMoZSx0LG4pe3JldHVybigoZSx0LG4pPT57Y29uc3Qgcj1bMTAwKmUsMTAwKnRdO24mJnIucHVzaCgxMDAqbik7bGV0IGE9MjE2NjEzNjI2MTtmb3IobGV0IGU9MDtlPHIubGVuZ3RoOysrZSl7bGV0IHQ9MHxyW2VdO2ZvcihsZXQgZT0wO2U8NDtlKyspYV49MjU1JnQsYT1NYXRoLmltdWwoYSwxNjc3NzYxOSksdD4+Pj04fXJldHVybihhPj4+MCklMTY3NzcyMTZ9KShlLHQsbil9Z2VuZXJhdGVGaWx0ZXJLZXlzKGUsdCxuLHIpe3JldHVybigoZSx0LG4scik9PmAke2V9JHt0fSR7bn0ke3J9YCkoZSx0LG4scil9fSxocj0oZSx0LG4sYSxzLG8saSxjLGwsdSxoKT0+e2NvbnN0IGI9ci5jdXJyZW50QXR0YWNobWVudE9iamVjdDtsZXQgZD1udWxsO2NvbnN0IGY9TWF0aC5zcXJ0KGlbMF0qaVswXStpWzFdKmlbMV0pLF89TWF0aC5zcXJ0KGlbMl0qaVsyXStpWzNdKmlbM10pLHA9dXIuZ2VuZXJhdGVGaWx0ZXJLZXlzKGlbMF0saVsxXSxpWzJdLGlbM10pO2xldCBnPSExO2lmKHVyLmdldCh0LCJmS2V5Iik9PT1wKXtjb25zdCBlPXVyLmdldCh0LCJmVGV4dHVyZSIpO24/TChlKTooZz0hMCxkPWUpfWxldCB4PTAsRT0wO2lmKGcpeD11ci5nZXQodCwib2Zmc2V0WCIpLEU9dXIuZ2V0KHQsIm9mZnNldFkiKTtlbHNle2Q9dG4oZSk7Y29uc3QgdD1NYXRoLmF0YW4yKGlbMV0saVswXSksbj1NYXRoLmF0YW4yKC1pWzJdLGlbM10pLGM9bz9mKk1hdGguY29zKHQpOk1hdGguY29zKHQpLGw9bz9mKk1hdGguc2luKHQpOk1hdGguc2luKHQpLHU9bz8tXypNYXRoLnNpbihuKTotTWF0aC5zaW4obikscD1vP18qTWF0aC5jb3Mobik6TWF0aC5jb3MobiksZz1tKGMsbCx1LHAsYS8yLHMvMikseT1tKDEsMCwwLDEsLWUudy8yLC1lLmgvMiksQT0oKGUsdCk9Pntjb25zdCBuPWVbMF0scj1lWzFdLGE9ZVsyXSxzPWVbM10sbz1lWzRdLGk9ZVs1XSxjPXRbMF0sbD10WzFdLHU9dFsyXSxoPXRbM10sYj10WzRdLGQ9dFs1XTtyZXR1cm4gbShuKmMrYSpsLHIqYytzKmwsbip1K2EqaCxyKnUrcypoLG4qYithKmQrbyxyKmIrcypkK2kpfSkoZyx5KTtpZih2KGcpLHYoeSksMSE9PUFbMF18fDAhPT1BWzFdfHwwIT09QVsyXXx8MSE9PUFbM10pe2NvbnN0IGU9aGUoYSxzLCExKTtyLmJpbmQoZSksci5yZXNldCgpLHIuc2V0VHJhbnNmb3JtKEFbMF0sQVsxXSxBWzJdLEFbM10sQVs0XSxBWzVdKSx4PUFbNF0sRT1BWzVdLGtlKGQpO2NvbnN0IHQ9ZG4oKTtmbih0LGQud2lkdGgsZC5oZWlnaHQpLHNuKHQpLEwoZCksZD1lLnRleHR1cmUsZWUoZSwhMSksYiYmci5iaW5kKGIpfXYoQSksUm4ueD0wLFJuLnk9MDtmb3IobGV0IGU9MDtoLmxlbmd0aD5lOyl7c3dpdGNoKGhbZSsrXSl7Y2FzZSAwOmQ9UW4oZCxpLGhbZSsrXSxoW2UrK10saFtlKytdLGhbZSsrXSxoW2UrK10saFtlKytdLGhbZSsrXSxoW2UrK10saFtlKytdLGhbZSsrXSxoW2UrK10sQm9vbGVhbihoW2UrK10pKTticmVhaztjYXNlIDE6ZD1PbihkLGksaFtlKytdLGhbZSsrXSxoW2UrK10pO2JyZWFrO2Nhc2UgMjpkPVNuKGQsbmV3IEZsb2F0MzJBcnJheShbaFtlKytdLGhbZSsrXSxoW2UrK10saFtlKytdLGhbZSsrXSxoW2UrK10saFtlKytdLGhbZSsrXSxoW2UrK10saFtlKytdLGhbZSsrXSxoW2UrK10saFtlKytdLGhbZSsrXSxoW2UrK10saFtlKytdLGhbZSsrXSxoW2UrK10saFtlKytdLGhbZSsrXV0pKTticmVhaztjYXNlIDM6e2NvbnN0IHQ9aFtlKytdLG49aFtlKytdLHI9dCpuLGE9aC5zdWJhcnJheShlLGUrcik7ZSs9cixkPWFyKGQsdCxuLGEsaFtlKytdLGhbZSsrXSxCb29sZWFuKGhbZSsrXSksQm9vbGVhbihoW2UrK10pLGhbZSsrXSxoW2UrK10pfWJyZWFrO2Nhc2UgNDp7Y29uc3QgdD1oW2UrK10sbj1uZXcgVWludDhBcnJheSh0KTtuLnNldChoLnN1YmFycmF5KGUsZSt0KSksZSs9dCxkPXNyKGQsaSxuLGhbZSsrXSxoW2UrK10saFtlKytdLGhbZSsrXSxoW2UrK10saFtlKytdLGhbZSsrXSxoW2UrK10saFtlKytdLGhbZSsrXSxoW2UrK10pfWJyZWFrO2Nhc2UgNTpkPUhuKGQsaSxoW2UrK10saFtlKytdLGhbZSsrXSxoW2UrK10saFtlKytdLGhbZSsrXSxoW2UrK10saFtlKytdLEJvb2xlYW4oaFtlKytdKSxCb29sZWFuKGhbZSsrXSksQm9vbGVhbihoW2UrK10pKTticmVhaztjYXNlIDY6ZD1xbihkLGksaFtlKytdLGhbZSsrXSxoW2UrK10saFtlKytdLGhbZSsrXSxoW2UrK10sQm9vbGVhbihoW2UrK10pLEJvb2xlYW4oaFtlKytdKSk7YnJlYWs7Y2FzZSA3Ontjb25zdCB0PWhbZSsrXSxuPWhbZSsrXTtsZXQgcj1oW2UrK107Y29uc3QgYT1oLnN1YmFycmF5KGUsZStyKTtlKz1yLHI9aFtlKytdO2NvbnN0IHM9aC5zdWJhcnJheShlLGUrcik7ZSs9cixyPWhbZSsrXTtjb25zdCBvPWguc3ViYXJyYXkoZSxlK3IpO2UrPXIsZD1lcihkLGksdCxuLGEscyxvLGhbZSsrXSxoW2UrK10saFtlKytdLGhbZSsrXSxoW2UrK10sQm9vbGVhbihoW2UrK10pKX1icmVhaztjYXNlIDg6e2NvbnN0IHQ9aFtlKytdLG49aFtlKytdO2xldCByPWhbZSsrXTtjb25zdCBhPWguc3ViYXJyYXkoZSxlK3IpO2UrPXIscj1oW2UrK107Y29uc3Qgcz1oLnN1YmFycmF5KGUsZStyKTtlKz1yLHI9aFtlKytdO2NvbnN0IG89aC5zdWJhcnJheShlLGUrcik7ZSs9cixkPW5yKGQsaSx0LG4sYSxzLG8saFtlKytdLGhbZSsrXSxoW2UrK10saFtlKytdLGhbZSsrXSxCb29sZWFuKGhbZSsrXSkpfX19fWlmKGQpe2NvbnN0IGU9QSgpLHQ9dVswXSooZi9lKSxuPXVbMV0qKF8vZSk7ci5yZXNldCgpLHIuc2V0VHJhbnNmb3JtKDEsMCwwLDEsMCwwKSxyLmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbj1sLG9yKGQsYywteCt0K2lbNF0sLUUrbitpWzVdKX1nfHwodXIuc2V0KHQsImZLZXkiLHApLHVyLnNldCh0LCJmVGV4dHVyZSIsZCksdXIuc2V0KHQsIm9mZnNldFgiLHgpLHVyLnNldCh0LCJvZmZzZXRZIixFKSksYiYmci5iaW5kKGIpfSxicj0oZSx0LHIsYSk9PntuLnN0ZW5jaWxGdW5jKG4uQUxXQVlTLDAsMjU1KSxuLnN0ZW5jaWxPcFNlcGFyYXRlKG4uRlJPTlQsbi5LRUVQLG4uS0VFUCxuLklOQ1JfV1JBUCksbi5zdGVuY2lsT3BTZXBhcmF0ZShuLkJBQ0ssbi5LRUVQLG4uS0VFUCxuLkRFQ1JfV1JBUCksbi5jb2xvck1hc2soITEsITEsITEsITEpO2NvbnN0IHM9ISFhLG89T3Qocyk7YSYmU3QobyxhKSxuLmVuYWJsZShuLlNBTVBMRV9BTFBIQV9UT19DT1ZFUkFHRSksTnQobyxlLHQsciksbi5kaXNhYmxlKG4uU0FNUExFX0FMUEhBX1RPX0NPVkVSQUdFKSxuLnN0ZW5jaWxGdW5jKG4uTk9URVFVQUwsMCwyNTUpLG4uc3RlbmNpbE9wKG4uS0VFUCxuLlpFUk8sbi5aRVJPKSxuLmNvbG9yTWFzayghMCwhMCwhMCwhMCk7Y29uc3QgaT0oZT0+e2NvbnN0IHQ9InMiKyhlPyJ5IjoibiIpO2lmKEZ0Lmhhcyh0KSlyZXR1cm4gRnQuZ2V0KHQpO2NvbnN0IG49bmV3IHd0KCR0KGU/OTowLCExLCExLGUpLCIjdmVyc2lvbiAzMDAgZXNcbnByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xuXG5pbiB2ZWM0IHZfY29sb3I7XG5vdXQgdmVjNCBvX2NvbG9yO1xuXG52b2lkIG1haW4oKSB7XG4gICAgb19jb2xvciA9IHZlYzQodl9jb2xvci5yZ2IgKiB2X2NvbG9yLmEsIHZfY29sb3IuYSk7XG59Iik7cmV0dXJuIEZ0LnNldCh0LG4pLG59KShzKTthJiYoKGUsdCk9Pntjb25zdCBuPWUuaGlnaHA7blswXT10WzBdLG5bMV09dFsxXSxuWzJdPTAsbls0XT10WzJdLG5bNV09dFszXSxuWzZdPTAsbls4XT10WzRdLG5bOV09dFs1XSxuWzEwXT0xLG5bMTJdPXRbNl0sblsxM109dFs3XSxuWzE0XT0wLG5bMTZdPXRbOF0sblsxN109dFs5XSxuWzE4XT0wLG5bMjBdPXRbMTBdLG5bMjFdPXRbMTFdLG5bMjJdPTEsblszXT14KCksbls3XT1FKCksblsxMV09dFsxMl0sblsxNV09dFsxM10sblsxOV09dFsxNF0sblsyM109dFsxNV0sblsyNF09dFsxNl0sblsyNV09dFsxN10sblsyNl09dFsxOF0sblsyN109dFsxOV0sblsyOF09dFsyMF0sblsyOV09dFsyMV0sblszMF09dFsyMl0sblszMV09dFsyM10sblszMl09dFsyNF0sblszM109dFsyNV19KShpLGEpLE50KGksZSx0LHIpfSxkcj0oZSx0LG4scixhKT0+e2NvbnN0IHM9ZS5tZWRpdW1wO2xldCBvPTA7Zm9yKGxldCBlPW47ZTxyOysrZSl7Y29uc3Qgbj01KmU7c1tvKytdPWFbdFtuKzFdXSxzW28rK109YVt0W24rMl1dLHNbbysrXT1hW3RbbiszXV0sc1tvKytdPWFbdFtuKzRdXX1mb3IobGV0IGU9bjtlPHI7KytlKXNbbysrXT10WzUqZV19LGZyPShlLHQpPT57Y29uc3QgYT1yLmN1cnJlbnRBdHRhY2htZW50T2JqZWN0LHM9bi5nZXRQYXJhbWV0ZXIobi5TQ0lTU09SX0JPWCk7bi5kaXNhYmxlKG4uU0NJU1NPUl9URVNUKTtjb25zdCBvPXpuKCk7ci5iaW5kKG8pO2NvbnN0IGk9MD09PXQsYz1lLmxlbmd0aC81LGw9aT9HbjpWbjt1bigpO2NvbnN0IHU9V24oKTtmb3IobGV0IHQ9MDt0PGM7dCs9dS0xKXtjb25zdCBuPU1hdGgubWluKHQrdSxjKSxyPUluKG4tdCxpKTtkcihyLGUsdCxuLGwpLERuKHIsZVswXSxlW2UubGVuZ3RoLTVdKX1yZXR1cm4gVXQoKSxhJiZyLmJpbmQoYSksbi5lbmFibGUobi5TQ0lTU09SX1RFU1QpLG4uc2Npc3NvcihzWzBdLHNbMV0sc1syXSxzWzNdKSxvLnRleHR1cmV9LG1yPW5ldyBNYXAsdnI9KGUsdCxuLHIpPT57Y29uc3QgYT0oKGUsdCxuLHIpPT5gJHtlPyJ5IjoibiJ9JHt0PyJ5IjoibiJ9JHt0JiZuPyJ5IjoibiJ9JHtyfWApKHIsZSx0LG4pO2lmKG1yLmhhcyhhKSlyZXR1cm4gbXIuZ2V0KGEpO2NvbnN0IHM9MSsocj8xNDo1KSxvPXMtMSxpPW5ldyB3dCgkdChzLCEwLCExLHIpLCgoZSx0LG4scixhKT0+e2NvbnN0IHM9bj8oKGUsdCk9Pntjb25zdCBuPXQ/KGU9PmBcbiAgICB2ZWMyIGZvY2FsID0gdmVjMih1X2hpZ2hwWyR7ZX1dWzFdLCAwLjApO1xuXG4gICAgdmVjMiBkaXIgPSBub3JtYWxpemUoY29vcmQgLSBmb2NhbCk7XG5cbiAgICBmbG9hdCBhID0gZG90KGRpciwgZGlyKTtcbiAgICBmbG9hdCBiID0gMi4wICogZG90KGRpciwgZm9jYWwpO1xuICAgIGZsb2F0IGMgPSBkb3QoZm9jYWwsIGZvY2FsKSAtIDEuMDtcbiAgICBmbG9hdCB4ID0gKC1iICsgc3FydChiICogYiAtIDQuMCAqIGEgKiBjKSkgLyAoMi4wICogYSk7XG5cbiAgICBmbG9hdCB0ID0gZGlzdGFuY2UoZm9jYWwsIGNvb3JkKSAvIGRpc3RhbmNlKGZvY2FsLCBmb2NhbCArIGRpciAqIHgpO2ApKGUpOiJmbG9hdCB0ID0gbGVuZ3RoKGNvb3JkKTsiO3JldHVybmBcbiAgICBmbG9hdCByYWRpdXMgPSB1X2hpZ2hwWyR7ZX1dWzBdO1xuICAgIHZlYzIgY29vcmQgPSBwIC8gcmFkaXVzO1xuICAgICR7bn1cbmB9KSh0LHIpOihlPT5gXG4gICAgdmVjMiBhID0gdV9oaWdocFske2V9XS54eTtcbiAgICB2ZWMyIGIgPSB1X2hpZ2hwWyR7ZX1dLnp3O1xuXG4gICAgdmVjMiBhYiA9IGIgLSBhO1xuICAgIHZlYzIgYXAgPSBwIC0gYTtcblxuICAgIGZsb2F0IHQgPSBkb3QoYWIsIGFwKSAvIGRvdChhYiwgYWIpO2ApKHQpO2xldCBvO3N3aXRjaChhKXtjYXNlIDA6bz0iMS4wIC0gYWJzKGZyYWN0KHQgKiAwLjUpICogMi4wIC0gMS4wKSI7YnJlYWs7Y2FzZSAxOm89ImZyYWN0KHQpIjticmVhaztkZWZhdWx0Om89ImNsYW1wKHQsIDAuMCwgMS4wKSJ9cmV0dXJuYCN2ZXJzaW9uIDMwMCBlc1xucHJlY2lzaW9uIGhpZ2hwIGZsb2F0O1xuXG51bmlmb3JtIHNhbXBsZXIyRCB1X3RleHR1cmU7XG51bmlmb3JtIHZlYzQgdV9oaWdocFske2V9XTtcbiAgICBcbmluIHZlYzIgdl91djtcbm91dCB2ZWM0IG9fY29sb3I7XG4gICAgXG52b2lkIG1haW4oKSB7XG4gICAgdmVjMiBwID0gdl91djtcbiAgICAke3N9XG4gICAgdCA9ICR7b307XG4gICAgb19jb2xvciA9IHRleHR1cmUodV90ZXh0dXJlLCB2ZWMyKHQsIDAuNSkpO1xufWB9KShzLG8sZSx0LG4pKTtyZXR1cm4gbXIuc2V0KGEsaSksaX0sX3I9KGUsdCxuLHIscz0wLG89bnVsbCxpPW51bGwpPT57Y29uc3QgYz1lLmhpZ2hwO2NbMF09blswXSxjWzFdPW5bMV0sY1syXT1uWzJdLGNbNF09blszXSxjWzVdPW5bNF0sY1s2XT1uWzVdLGNbOF09bls2XSxjWzldPW5bN10sY1sxMF09bls4XSxjWzEyXT1yWzBdLGNbMTNdPXJbMV0sY1sxNF09clsyXSxjWzE2XT1yWzNdLGNbMTddPXJbNF0sY1sxOF09cls1XSxjWzExXT1yWzZdLGNbMTVdPXJbN10sY1sxOV09cls4XSxjWzNdPXgoKSxjWzddPUUoKTtsZXQgbD0yMDtpJiYoY1syMF09aVswXSxjWzIxXT1pWzFdLGNbMjJdPTAsY1syNF09aVsyXSxjWzI1XT1pWzNdLGNbMjZdPTAsY1syOF09aVs0XSxjWzI5XT1pWzVdLGNbMzBdPTEsY1szMl09aVs2XSxjWzMzXT1pWzddLGNbMzRdPTAsY1szNl09aVs4XSxjWzM3XT1pWzldLGNbMzhdPTAsY1s0MF09aVsxMF0sY1s0MV09aVsxMV0sY1s0Ml09MSxjWzMxXT1pWzEyXSxjWzM1XT1pWzEzXSxjWzM5XT1pWzE0XSxjWzQzXT1pWzE1XSxjWzQ0XT1pWzE2XSxjWzQ1XT1pWzE3XSxjWzQ2XT1pWzE4XSxjWzQ3XT1pWzE5XSxjWzQ4XT1pWzIwXSxjWzQ5XT1pWzIxXSxjWzUwXT1pWzIyXSxjWzUxXT1pWzIzXSxjWzUyXT1pWzI0XSxjWzUzXT1pWzI1XSxsPTU2KSwwPT09dD8oY1tsKytdPW9bMF0sY1tsKytdPW9bMV0sY1tsKytdPW9bMl0sY1tsXT1vWzNdKTooY1tsKytdPTgxOS4yLGNbbF09YShzLC0uOTc1LC45NzUsMCkpfSxwcj0oZSx0LGEscyk9Pntjb25zdCBvPUtlLnNoaWZ0KCksaT1LZS5zaGlmdCgpLGM9S2Uuc2hpZnQoKSxsPUtlLnNoaWZ0KCk7bi5kaXNhYmxlKG4uU1RFTkNJTF9URVNUKTtjb25zdCBiPWZyKG8sbCk7a2UoYiksbi5lbmFibGUobi5TVEVOQ0lMX1RFU1QpLG4uZnJvbnRGYWNlKG4uQ0NXKSxuLnN0ZW5jaWxNYXNrKDI1NSksbi5zdGVuY2lsRnVuYyhuLkFMV0FZUywwLDI1NSksbi5zdGVuY2lsT3BTZXBhcmF0ZShuLkZST05ULG4uS0VFUCxuLktFRVAsbi5JTkNSX1dSQVApLG4uc3RlbmNpbE9wU2VwYXJhdGUobi5CQUNLLG4uS0VFUCxuLktFRVAsbi5ERUNSX1dSQVApLG4uY29sb3JNYXNrKCExLCExLCExLCExKTtjb25zdCBkPSEhcyxmPU90KGQpO3MmJlN0KGYscyksbi5lbmFibGUobi5TQU1QTEVfQUxQSEFfVE9fQ09WRVJBR0UpLE50KGYsZSx0LGEpLG4uZGlzYWJsZShuLlNBTVBMRV9BTFBIQV9UT19DT1ZFUkFHRSksbi5zdGVuY2lsRnVuYyhuLk5PVEVRVUFMLDAsMjU1KSxuLnN0ZW5jaWxPcChuLktFRVAsbi5aRVJPLG4uWkVSTyksbi5jb2xvck1hc2soITAsITAsITAsITApO2NvbnN0IG09dnIoITEsITEsYyxkKSxwPShlPT57Y29uc3QgdD0tODE5LjIqZVswXS04MTkuMiplWzJdK2VbNF0sbj04MTkuMiplWzBdLTgxOS4yKmVbMl0rZVs0XSxyPS04MTkuMiplWzBdKzgxOS4yKmVbMl0rZVs0XSxhPS04MTkuMiplWzFdLTgxOS4yKmVbM10rZVs1XSxzPTgxOS4yKmVbMV0tODE5LjIqZVszXStlWzVdO2xldCBvPXItdCxpPS04MTkuMiplWzFdKzgxOS4yKmVbM10rZVs1XS1hO2NvbnN0IGM9TWF0aC5zcXJ0KG8qbytpKmkpO2M/KG8vPWMsaS89Yyk6KG89MCxpPTApO2NvbnN0IGw9KG4tdCkqbysocy1hKSppO3JldHVybiB1KHQrbCpvLGErbCppLG4scyl9KShpKSxnPV8oci4kbWF0cml4KTtfcihtLDAsci4kbWF0cml4LGcsMCxwLHMpLGgocCksdihnKSxOdChtLGUsdCxhKX0sZ3I9KGUsdCxhLHMpPT57Y29uc3Qgbz1LZS5zaGlmdCgpLGk9S2Uuc2hpZnQoKSxjPUtlLnNoaWZ0KCksbD1LZS5zaGlmdCgpLHU9S2Uuc2hpZnQoKTtuLmRpc2FibGUobi5TVEVOQ0lMX1RFU1QpO2NvbnN0IGg9ZnIobyxsKTtrZShoKSxuLmVuYWJsZShuLlNURU5DSUxfVEVTVCksbi5mcm9udEZhY2Uobi5DQ1cpLG4uc3RlbmNpbE1hc2soMjU1KSxuLnN0ZW5jaWxGdW5jKG4uQUxXQVlTLDAsMjU1KSxuLnN0ZW5jaWxPcFNlcGFyYXRlKG4uRlJPTlQsbi5LRUVQLG4uS0VFUCxuLklOQ1JfV1JBUCksbi5zdGVuY2lsT3BTZXBhcmF0ZShuLkJBQ0ssbi5LRUVQLG4uS0VFUCxuLkRFQ1JfV1JBUCksbi5jb2xvck1hc2soITEsITEsITEsITEpO2NvbnN0IGI9ISFzLGQ9T3QoYik7cyYmU3QoZCxzKSxuLmVuYWJsZShuLlNBTVBMRV9BTFBIQV9UT19DT1ZFUkFHRSksTnQoZCxlLHQsYSksbi5kaXNhYmxlKG4uU0FNUExFX0FMUEhBX1RPX0NPVkVSQUdFKSxuLnN0ZW5jaWxGdW5jKG4uTk9URVFVQUwsMCwyNTUpLG4uc3RlbmNpbE9wKG4uS0VFUCxuLlpFUk8sbi5aRVJPKSxuLmNvbG9yTWFzayghMCwhMCwhMCwhMCksci5zYXZlKCksci50cmFuc2Zvcm0oaVswXSxpWzFdLGlbMl0saVszXSxpWzRdLGlbNV0pO2NvbnN0IGY9ci4kc3RhY2tbci4kc3RhY2subGVuZ3RoLTFdLG09XyhyLiRtYXRyaXgpLHA9dnIoITAsQm9vbGVhbih1KSxjLGIpO19yKHAsMSxmLG0sdSxzKSxyLnJlc3RvcmUoKSx2KG0pLE50KHAsZSx0LGEpfSx4cj1uZXcgTWFwLEVyPShlLHQsYSxzKT0+e24uc3RlbmNpbEZ1bmMobi5BTFdBWVMsMCwyNTUpLG4uc3RlbmNpbE9wU2VwYXJhdGUobi5GUk9OVCxuLktFRVAsbi5LRUVQLG4uSU5DUl9XUkFQKSxuLnN0ZW5jaWxPcFNlcGFyYXRlKG4uQkFDSyxuLktFRVAsbi5LRUVQLG4uREVDUl9XUkFQKSxuLmNvbG9yTWFzayghMSwhMSwhMSwhMSk7Y29uc3Qgbz0hIXMsaT1PdChvKTtzJiZTdChpLHMpLG4uZW5hYmxlKG4uU0FNUExFX0FMUEhBX1RPX0NPVkVSQUdFKSxOdChpLGUsdCxhKSxuLmRpc2FibGUobi5TQU1QTEVfQUxQSEFfVE9fQ09WRVJBR0UpO2NvbnN0IGM9eW4uc2hpZnQoKSxsPXluLnNoaWZ0KCksdT15bi5zaGlmdCgpLGg9eW4uc2hpZnQoKSxiPXluLnNoaWZ0KCksZD15bi5zaGlmdCgpLGY9eG4odSxoLGMsZCk7ci5zYXZlKCksci50cmFuc2Zvcm0obFswXSxsWzFdLGxbMl0sbFszXSxsWzRdLGxbNV0pLG4uc3RlbmNpbEZ1bmMobi5OT1RFUVVBTCwwLDI1NSksbi5zdGVuY2lsT3Aobi5LRUVQLG4uWkVSTyxuLlpFUk8pLG4uY29sb3JNYXNrKCEwLCEwLCEwLCEwKTtjb25zdCBtPSgoZSx0KT0+e2NvbnN0IG49YGIke2U/InkiOiJuIn0ke3Q/InkiOiJuIn1gO2lmKHhyLmhhcyhuKSlyZXR1cm4geHIuZ2V0KG4pO2NvbnN0IHI9ZT8iI3ZlcnNpb24gMzAwIGVzXG5wcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcblxudW5pZm9ybSBzYW1wbGVyMkQgdV90ZXh0dXJlO1xudW5pZm9ybSB2ZWM0IHVfbWVkaXVtcFsxXTtcblxuaW4gdmVjMiB2X3V2O1xub3V0IHZlYzQgb19jb2xvcjtcblxudm9pZCBtYWluKCkge1xuICAgIHZlYzIgdXYgPSBmcmFjdCh2ZWMyKHZfdXYueCwgLXZfdXYueSkgLyB1X21lZGl1bXBbMF0ueHkpO1xuICAgIFxuICAgIHZlYzQgc3JjID0gdGV4dHVyZSh1X3RleHR1cmUsIHV2KTtcbiAgICBvX2NvbG9yID0gc3JjO1xufSI6IiN2ZXJzaW9uIDMwMCBlc1xucHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XG5cbnVuaWZvcm0gc2FtcGxlcjJEIHVfdGV4dHVyZTtcbnVuaWZvcm0gdmVjNCB1X21lZGl1bXBbMV07XG5cbmluIHZlYzIgdl91djtcbm91dCB2ZWM0IG9fY29sb3I7XG5cbnZvaWQgbWFpbigpIHtcbiAgICB2ZWMyIHV2ID0gdmVjMih2X3V2LngsIHVfbWVkaXVtcFswXS55IC0gdl91di55KSAvIHVfbWVkaXVtcFswXS54eTtcblxuICAgIHZlYzQgc3JjID0gdGV4dHVyZSh1X3RleHR1cmUsIHV2KTtcbiAgICBvX2NvbG9yID0gc3JjO1xufSIsYT1uZXcgd3QoJHQodD8xNDo1LCEwLCExLHQpLHIpO3JldHVybiB4ci5zZXQobixhKSxhfSkoYixvKTsoKGUsdCxuLGEpPT57Y29uc3Qgcz1lLmhpZ2hwLG89ci4kc3RhY2tbci4kc3RhY2subGVuZ3RoLTFdO3NbMF09b1swXSxzWzFdPW9bMV0sc1syXT1vWzJdLHNbNF09b1szXSxzWzVdPW9bNF0sc1s2XT1vWzVdLHNbOF09b1s2XSxzWzldPW9bN10sc1sxMF09b1s4XTtjb25zdCBpPV8oci4kbWF0cml4KTtzWzEyXT1pWzBdLHNbMTNdPWlbMV0sc1sxNF09aVsyXSxzWzE2XT1pWzNdLHNbMTddPWlbNF0sc1sxOF09aVs1XSxzWzExXT1pWzZdLHNbMTVdPWlbN10sc1sxOV09aVs4XSxzWzNdPXgoKSxzWzddPUUoKSxhJiYoc1syMF09YVswXSxzWzIxXT1hWzFdLHNbMjJdPTAsc1syNF09YVsyXSxzWzI1XT1hWzNdLHNbMjZdPTAsc1syOF09YVs0XSxzWzI5XT1hWzVdLHNbMzBdPTEsc1szMl09YVs2XSxzWzMzXT1hWzddLHNbMzRdPTAsc1szNl09YVs4XSxzWzM3XT1hWzldLHNbMzhdPTAsc1s0MF09YVsxMF0sc1s0MV09YVsxMV0sc1s0Ml09MSxzWzMxXT1hWzEyXSxzWzM1XT1hWzEzXSxzWzM5XT1hWzE0XSxzWzQzXT1hWzE1XSxzWzQ0XT1hWzE2XSxzWzQ1XT1hWzE3XSxzWzQ2XT1hWzE4XSxzWzQ3XT1hWzE5XSxzWzQ4XT1hWzIwXSxzWzQ5XT1hWzIxXSxzWzUwXT1hWzIyXSxzWzUxXT1hWzIzXSxzWzUyXT1hWzI0XSxzWzUzXT1hWzI1XSk7Y29uc3QgYz1lLm1lZGl1bXA7Y1swXT10LGNbMV09bn0pKG0sdSxoLHMpLE50KG0sZSx0LGEpLHIucmVzdG9yZSgpLEwoZil9O2xldCB5cj0wO2NvbnN0IEFyPW5ldyBGbG9hdDMyQXJyYXkoMjU2KTtmb3IobGV0IGU9MTtlPDI1NjtlKyspQXJbZV09MjU1L2U7Y29uc3QgVHI9YXN5bmMoZSx0KT0+e2NvbnN0IGE9Y24oMCwwLGUsdCk7a2UoYSksbi5iaW5kRnJhbWVidWZmZXIobi5GUkFNRUJVRkZFUixaKSxuLmZyYW1lYnVmZmVyVGV4dHVyZTJEKG4uRlJBTUVCVUZGRVIsbi5DT0xPUl9BVFRBQ0hNRU5UMCxuLlRFWFRVUkVfMkQsYS5yZXNvdXJjZSwwKTtjb25zdCBzPW5ldyBVaW50OEFycmF5KGUqdCo0KSxvPXIuJG1haW5BdHRhY2htZW50T2JqZWN0O3MuYnl0ZUxlbmd0aD55ciYmKHlyPWMocy5ieXRlTGVuZ3RoKSxuLmJ1ZmZlckRhdGEobi5QSVhFTF9QQUNLX0JVRkZFUix5cixuLlNUUkVBTV9SRUFEKSksbi5yZWFkUGl4ZWxzKDAsby5oZWlnaHQtdCxlLHQsbi5SR0JBLG4uVU5TSUdORURfQllURSwwKTtjb25zdCBpPW4uZmVuY2VTeW5jKG4uU1lOQ19HUFVfQ09NTUFORFNfQ09NUExFVEUsMCk7YXdhaXQgbmV3IFByb21pc2UoZT0+e2NvbnN0IHQ9KCk9PntpZihuLmNsaWVudFdhaXRTeW5jKGksbi5TWU5DX0ZMVVNIX0NPTU1BTkRTX0JJVCwwKSE9PW4uVElNRU9VVF9FWFBJUkVEKXJldHVybiBuLmRlbGV0ZVN5bmMoaSksbi5nZXRCdWZmZXJTdWJEYXRhKG4uUElYRUxfUEFDS19CVUZGRVIsMCxzKSxlKCk7cmVxdWVzdEFuaW1hdGlvbkZyYW1lKHQpfTt0KCl9KSxuLmJpbmRGcmFtZWJ1ZmZlcihuLkZSQU1FQlVGRkVSLEQpO2ZvcihsZXQgZT0wO2U8cy5sZW5ndGg7ZSs9NCl7Y29uc3QgdD1zW2UrM107aWYoMD09PXR8fDI1NT09PXQpY29udGludWU7Y29uc3Qgbj1Bclt0XTtzW2VdPU1hdGgubWluKDI1NSxNYXRoLnJvdW5kKHNbZV0qbikpLHNbZSsxXT1NYXRoLm1pbigyNTUsTWF0aC5yb3VuZChzW2UrMV0qbikpLHNbZSsyXT1NYXRoLm1pbigyNTUsTWF0aC5yb3VuZChzW2UrMl0qbikpfXJldHVybiBhd2FpdCBjcmVhdGVJbWFnZUJpdG1hcChuZXcgSW1hZ2VEYXRhKG5ldyBVaW50OENsYW1wZWRBcnJheShzKSxlLHQpLHtpbWFnZU9yaWVudGF0aW9uOiJmbGlwWSIscHJlbXVsdGlwbHlBbHBoYToibm9uZSIsY29sb3JTcGFjZUNvbnZlcnNpb246Im5vbmUifSl9O2NsYXNzIFJye2NvbnN0cnVjdG9yKGEscyxpPTEpe3ZhciBjO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCIkc3RhY2siLHtlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMCx2YWx1ZTp2b2lkIDB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywiJG1hdHJpeCIse2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwLHZhbHVlOnZvaWQgMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCIkY2xlYXJDb2xvclIiLHtlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMCx2YWx1ZTp2b2lkIDB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywiJGNsZWFyQ29sb3JHIix7ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITAsdmFsdWU6dm9pZCAwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsIiRjbGVhckNvbG9yQiIse2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwLHZhbHVlOnZvaWQgMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCIkY2xlYXJDb2xvckEiLHtlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMCx2YWx1ZTp2b2lkIDB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywiJG1haW5BdHRhY2htZW50T2JqZWN0Iix7ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITAsdmFsdWU6dm9pZCAwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsIiRzdGFja0F0dGFjaG1lbnRPYmplY3QiLHtlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMCx2YWx1ZTp2b2lkIDB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywiZ2xvYmFsQWxwaGEiLHtlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMCx2YWx1ZTp2b2lkIDB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywiZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uIix7ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITAsdmFsdWU6dm9pZCAwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsImltYWdlU21vb3RoaW5nRW5hYmxlZCIse2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwLHZhbHVlOnZvaWQgMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCIkZmlsbFN0eWxlIix7ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITAsdmFsdWU6dm9pZCAwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsIiRzdHJva2VTdHlsZSIse2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwLHZhbHVlOnZvaWQgMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCJtYXNrQm91bmRzIix7ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITAsdmFsdWU6dm9pZCAwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsInRoaWNrbmVzcyIse2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwLHZhbHVlOnZvaWQgMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCJjYXBzIix7ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITAsdmFsdWU6dm9pZCAwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsImpvaW50cyIse2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwLHZhbHVlOnZvaWQgMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCJtaXRlckxpbWl0Iix7ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITAsdmFsdWU6dm9pZCAwfSksKGU9PntuPWV9KShhKSxjPWEuZ2V0UGFyYW1ldGVyKGEuTUFYX1RFWFRVUkVfU0laRSksZT1NYXRoLm1pbig0MDk2LGMvMiksKGU9Pnt0PWV9KShzKSwoZT0+e3k9ZX0pKGkpLHRoaXMuJHN0YWNrPW8oKSx0aGlzLiRzdGFja0F0dGFjaG1lbnRPYmplY3Q9bygpLHRoaXMuJG1hdHJpeD1kKDEsMCwwLDAsMSwwLDAsMCwxKSx0aGlzLiRjbGVhckNvbG9yUj0wLHRoaXMuJGNsZWFyQ29sb3JHPTAsdGhpcy4kY2xlYXJDb2xvckI9MCx0aGlzLiRjbGVhckNvbG9yQT0wLHRoaXMudGhpY2tuZXNzPTEsdGhpcy5jYXBzPTEsdGhpcy5qb2ludHM9Mix0aGlzLm1pdGVyTGltaXQ9MCx0aGlzLiRtYWluQXR0YWNobWVudE9iamVjdD1udWxsLHRoaXMuZ2xvYmFsQWxwaGE9MSx0aGlzLmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbj0ibm9ybWFsIix0aGlzLmltYWdlU21vb3RoaW5nRW5hYmxlZD0hMSx0aGlzLiRmaWxsU3R5bGU9bmV3IEZsb2F0MzJBcnJheShbMSwxLDEsMV0pLHRoaXMuJHN0cm9rZVN0eWxlPW5ldyBGbG9hdDMyQXJyYXkoWzEsMSwxLDFdKSx0aGlzLm1hc2tCb3VuZHM9e3hNaW46MCx5TWluOjAseE1heDowLHlNYXg6MH0sYS5waXhlbFN0b3JlaShhLlVOUEFDS19BTElHTk1FTlQsMSksYS5waXhlbFN0b3JlaShhLlVOUEFDS19GTElQX1lfV0VCR0wsITApLChlPT57RD1lLmNyZWF0ZUZyYW1lYnVmZmVyKCl9KShhKSwoZT0+e2o9ZS5jcmVhdGVGcmFtZWJ1ZmZlcigpfSkoYSksKChlLHQpPT57ej1lLmNyZWF0ZUZyYW1lYnVmZmVyKCksZS5iaW5kRnJhbWVidWZmZXIoZS5GUkFNRUJVRkZFUix6KSxlLmZyYW1lYnVmZmVyVGV4dHVyZTJEKGUuRlJBTUVCVUZGRVIsZS5DT0xPUl9BVFRBQ0hNRU5UMCxlLlRFWFRVUkVfMkQsdC5yZXNvdXJjZSwwKSxlLmJpbmRGcmFtZWJ1ZmZlcihlLkZSQU1FQlVGRkVSLG51bGwpLGUuYmluZEZyYW1lYnVmZmVyKGUuRFJBV19GUkFNRUJVRkZFUix6KX0pKGEsRWUoKSksKGU9PntIPWUuY3JlYXRlRnJhbWVidWZmZXIoKSxLPWUuY3JlYXRlRnJhbWVidWZmZXIoKSxaPWUuY3JlYXRlRnJhbWVidWZmZXIoKSxRPWUuY3JlYXRlQnVmZmVyKCksZS5iaW5kQnVmZmVyKGUuUElYRUxfUEFDS19CVUZGRVIsUSl9KShhKSxnbihhKSxuLmVuYWJsZShuLkJMRU5EKSxVdCgpLChlPT57WG49TWF0aC5mbG9vciguNzUqZS5nZXRQYXJhbWV0ZXIoZS5NQVhfRlJBR01FTlRfVU5JRk9STV9WRUNUT1JTKSl9KShhKSxyPXRoaXN9Y2xlYXJUcmFuc2ZlckJvdW5kcygpeygoKT0+e2ZvcihsZXQgZT0wO2U8eWUubGVuZ3RoOysrZSl7Y29uc3QgdD15ZVtlXTt0JiYodFswXT10WzFdPWJlLHRbMl09dFszXT1kZSl9Zm9yKGxldCBlPTA7ZTxUZS5sZW5ndGg7KytlKXtjb25zdCB0PVRlW2VdO3QmJih0WzBdPXRbMV09YmUsdFsyXT10WzNdPWRlKX19KSgpfXVwZGF0ZUJhY2tncm91bmRDb2xvcihlLHQsbixyKXsoKGUsdCxuLHIscyk9PntlLiRjbGVhckNvbG9yUj1hKHQsMCwxLDApLGUuJGNsZWFyQ29sb3JHPWEobiwwLDEsMCksZS4kY2xlYXJDb2xvckI9YShyLDAsMSwwKSxlLiRjbGVhckNvbG9yQT1hKHMsMCwxLDApfSkodGhpcyxlLHQsbixyKX1maWxsQmFja2dyb3VuZENvbG9yKCl7dmFyIGUsdCxyLGE7ZT10aGlzLiRjbGVhckNvbG9yUix0PXRoaXMuJGNsZWFyQ29sb3JHLHI9dGhpcy4kY2xlYXJDb2xvckIsYT10aGlzLiRjbGVhckNvbG9yQSxuLmNsZWFyQ29sb3IoZSx0LHIsYSksbi5jbGVhcihuLkNPTE9SX0JVRkZFUl9CSVR8bi5TVEVOQ0lMX0JVRkZFUl9CSVQpLG4uY2xlYXJDb2xvcigwLDAsMCwwKX1yZXNpemUoZSx0LG49ITApe09lKHRoaXMsZSx0LG4pfWNsZWFyUmVjdChlLHQscixhKXsoKGUsdCxyLGEpPT57bi5lbmFibGUobi5TQ0lTU09SX1RFU1QpLG4uc2Npc3NvcihlLHQscixhKSxuLmNsZWFyKG4uQ09MT1JfQlVGRkVSX0JJVHxuLlNURU5DSUxfQlVGRkVSX0JJVCksbi5kaXNhYmxlKG4uU0NJU1NPUl9URVNUKX0pKGUsdCxyLGEpfWJpbmQoZSl7TmUodGhpcyxlKX1zYXZlKCl7dmFyIGU7KGU9dGhpcykuJHN0YWNrLnB1c2goZCguLi5lLiRtYXRyaXgpKX1yZXN0b3JlKCl7RGUodGhpcyl9c2V0VHJhbnNmb3JtKGUsdCxuLHIsYSxzKXsoKGUsdCxuLHIsYSxzLG8pPT57ZVswXT10LGVbMV09bixlWzNdPXIsZVs0XT1hLGVbNl09cyxlWzddPW99KSh0aGlzLiRtYXRyaXgsZSx0LG4scixhLHMpfXRyYW5zZm9ybShlLHQsbixyLGEscyl7KChlLHQsbixyLGEscyxvKT0+e2NvbnN0IGk9ZS4kbWF0cml4WzBdLGM9ZS4kbWF0cml4WzFdLGw9ZS4kbWF0cml4WzNdLHU9ZS4kbWF0cml4WzRdLGg9ZS4kbWF0cml4WzZdLGI9ZS4kbWF0cml4WzddO2UuJG1hdHJpeFswXT10KmkrbipsLGUuJG1hdHJpeFsxXT10KmMrbip1LGUuJG1hdHJpeFszXT1yKmkrYSpsLGUuJG1hdHJpeFs0XT1yKmMrYSp1LGUuJG1hdHJpeFs2XT1zKmkrbypsK2gsZS4kbWF0cml4WzddPXMqYytvKnUrYn0pKHRoaXMsZSx0LG4scixhLHMpfXJlc2V0KCl7dmFyIGU7KGU9dGhpcykuZ2xvYmFsQWxwaGE9MSxlLmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbj0ibm9ybWFsIixlLmltYWdlU21vb3RoaW5nRW5hYmxlZD0hMX1iZWdpblBhdGgoKXt2YXIgZTsoZT10aGlzKS4kZmlsbFN0eWxlLmZpbGwoMSksZS4kc3Ryb2tlU3R5bGUuZmlsbCgxKSwoKCk9Pntmb3IoVC5sZW5ndGg9MDtSLmxlbmd0aDspaShSLnBvcCgpKX0pKCl9bW92ZVRvKGUsdCl7JChlLHQpfWxpbmVUbyhlLHQpeygoZSx0KT0+e1QubGVuZ3RofHwkKGUsdCksRihlLHQpfHx3KGUsdCwhMSl9KShlLHQpfXF1YWRyYXRpY0N1cnZlVG8oZSx0LG4scil7TyhlLHQsbixyKX1maWxsU3R5bGUoZSx0LG4scil7dGhpcy4kZmlsbFN0eWxlWzBdPWUsdGhpcy4kZmlsbFN0eWxlWzFdPXQsdGhpcy4kZmlsbFN0eWxlWzJdPW4sdGhpcy4kZmlsbFN0eWxlWzNdPXJ9c3Ryb2tlU3R5bGUoZSx0LG4scil7dGhpcy4kc3Ryb2tlU3R5bGVbMF09ZSx0aGlzLiRzdHJva2VTdHlsZVsxXT10LHRoaXMuJHN0cm9rZVN0eWxlWzJdPW4sdGhpcy4kc3Ryb2tlU3R5bGVbM109cn1jbG9zZVBhdGgoKXsoKCk9PntpZihULmxlbmd0aDw3KXJldHVybjtjb25zdCBlPStUWzBdLHQ9K1RbMV07RihlLHQpfHx3KGUsdCwhMSl9KSgpfWFyYyhlLHQsbil7KChlLHQsbik9Pntjb25zdCByPW4sYT0uNTUyMjg0NzQ5ODMwNzkzNipuO1AoZStyLHQrYSxlK2EsdCtyLGUsdCtyKSxQKGUtYSx0K3IsZS1yLHQrYSxlLXIsdCksUChlLXIsdC1hLGUtYSx0LXIsZSx0LXIpLFAoZSthLHQtcixlK3IsdC1hLGUrcix0KX0pKGUsdCxuKX1iZXppZXJDdXJ2ZVRvKGUsdCxuLHIsYSxzKXtQKGUsdCxuLHIsYSxzKX1maWxsKCl7KGU9Pntjb25zdCB0PU0oKTtpZighdC5sZW5ndGgpcmV0dXJuO1llLnB1c2goZSk7Y29uc3Qgbj16ZSh0KTtHZShuLmJ1ZmZlciksVmUucHVzaChuLmluZGV4Q291bnQpfSkoImZpbGwiKX1ncmFkaWVudEZpbGwoZSx0LG4scixhLHMpeygoZSx0LG4scixhLHMpPT57Y29uc3Qgbz1NKCk7aWYoIW8ubGVuZ3RoKXJldHVybjtZZS5wdXNoKDA9PT1lPyJsaW5lYXIiOiJyYWRpYWwiKTtjb25zdCBpPXplKG8pO0dlKGkuYnVmZmVyKSxWZS5wdXNoKGkuaW5kZXhDb3VudCksS2UucHVzaCh0LG4scixhKSwxPT09ZSYmS2UucHVzaChzKX0pKGUsdCxuLHIsYSxzKX1iaXRtYXBGaWxsKGUsdCxuLHIsYSxzKXsoKGUsdCxuLHIsYSxzKT0+e2NvbnN0IG89TSgpO2lmKCFvLmxlbmd0aClyZXR1cm47WWUucHVzaCgiYml0bWFwIik7Y29uc3QgaT16ZShvKTtHZShpLmJ1ZmZlciksVmUucHVzaChpLmluZGV4Q291bnQpLHluLnB1c2goZSx0LG4scixhLHMpfSkoZSx0LG4scixhLHMpfXN0cm9rZSgpeygoKT0+e2NvbnN0IGU9TSghMCk7aWYoIWUubGVuZ3RoKXJldHVybjtZZS5wdXNoKCJmaWxsIik7Y29uc3QgdD1odChlKTtHZSh0LmJ1ZmZlciksVmUucHVzaCh0LmluZGV4Q291bnQpfSkoKX1ncmFkaWVudFN0cm9rZShlLHQsbixyLGEscyl7KChlLHQsbixyLGEscyk9Pntjb25zdCBvPU0oKTtpZighby5sZW5ndGgpcmV0dXJuO1llLnB1c2goMD09PWU/ImxpbmVhciI6InJhZGlhbCIpO2NvbnN0IGk9aHQobyk7R2UoaS5idWZmZXIpLFZlLnB1c2goaS5pbmRleENvdW50KSxLZS5wdXNoKHQsbixyLGEpLDE9PT1lJiZLZS5wdXNoKHMpfSkoZSx0LG4scixhLHMpfWJpdG1hcFN0cm9rZShlLHQsbixyLGEscyl7KChlLHQsbixyLGEscyk9Pntjb25zdCBvPU0oITApO2lmKCFvLmxlbmd0aClyZXR1cm47WWUucHVzaCgiYml0bWFwIik7Y29uc3QgaT1odChvKTtHZShpLmJ1ZmZlciksVmUucHVzaChpLmluZGV4Q291bnQpLHluLnB1c2goZSx0LG4scixhLHMpfSkoZSx0LG4scixhLHMpfWNsaXAoKXsoKCk9Pntjb25zdCBlPXIuY3VycmVudEF0dGFjaG1lbnRPYmplY3Q7aWYoIWUpcmV0dXJuO2NvbnN0IHQ9TGUuZ2V0KGUuY2xpcExldmVsKSxhPXRbMF0scz10WzFdLG89dFsyXSxpPXRbM10sYz1NYXRoLmNlaWwoTWF0aC5hYnMoby1hKSksbD1NYXRoLmNlaWwoTWF0aC5hYnMoaS1zKSk7bi5lbmFibGUobi5TQ0lTU09SX1RFU1QpLG4uc2Npc3NvcihhLGUuaGVpZ2h0LXMtbCxjLGwpO2NvbnN0IHU9QXQoKTtsZXQgaD1VZS5nZXQoZS5jbGlwTGV2ZWwpLGI9MCxkPW51bGw7Y29uc3QgZj1WZS5sZW5ndGg7Zm9yKGxldCB0PTA7dDxmO3QrKyl7bi5zdGVuY2lsTWFzaygxPDxoLTEpO2NvbnN0IHI9VmVbdF07YnQuaGFzKHQpJiYoZD1idC5nZXQodCkpO2NvbnN0IGE9T3QoISFkKTtkJiZTdChhLGQpLE50KGEsdSxiLHIpLGIrPXIsKytoLGg+NyYmKGp0KCksaD1lLmNsaXBMZXZlbCsxKX1VZS5zZXQoZS5jbGlwTGV2ZWwsaCksVHQodSkscWUoKSxkdCgpLG4uZGlzYWJsZShuLlNDSVNTT1JfVEVTVCl9KSgpfWdldCBjdXJyZW50QXR0YWNobWVudE9iamVjdCgpe3JldHVybiBHKCl9Z2V0IGF0bGFzQXR0YWNobWVudE9iamVjdCgpe3JldHVybiBwZSgpfWNyZWF0ZU5vZGUoZSx0KXtyZXR1cm4gR3QoZSx0KX1yZW1vdmVOb2RlKGUpeyhlPT57Y29uc3QgdD1nZVtlLmluZGV4XTt0JiZ0LmRpc3Bvc2UoZS54LGUueSxlLncsZS5oKX0pKGUpfWJlZ2luTm9kZVJlbmRlcmluZyhlKXt2YXIgdCxyLGEsczsoZT0+e2NvbnN0IHQ9QWUoZS5pbmRleCksbj10WzBdLHI9dFsxXSxhPXRbMl0scz10WzNdO3RbMF09TWF0aC5taW4oZS54LG4pLHRbMV09TWF0aC5taW4oZS55LHIpLHRbMl09TWF0aC5tYXgoZS54K2UudyxhKSx0WzNdPU1hdGgubWF4KGUueStlLmgscyl9KShlKSx0PWUueCxyPWUueSxhPWUudyxzPWUuaCxuLmVuYWJsZShuLlNDSVNTT1JfVEVTVCksbi5zY2lzc29yKHQscixhKzEscysxKSxuLmNsZWFyKG4uQ09MT1JfQlVGRkVSX0JJVHxuLlNURU5DSUxfQlVGRkVSX0JJVCksbi5zY2lzc29yKHQscixhLHMpfWVuZE5vZGVSZW5kZXJpbmcoKXtuLmRpc2FibGUobi5TQ0lTU09SX1RFU1QpfWRyYXdGaWxsKCl7KCgpPT57Y29uc3QgZT1BdCgpO24uZW5hYmxlKG4uU1RFTkNJTF9URVNUKSxuLmZyb250RmFjZShuLkNDVyksbi5zdGVuY2lsTWFzaygyNTUpO2xldCB0PTAscj1udWxsO2ZvcihsZXQgbj0wO248WWUubGVuZ3RoO24rKylzd2l0Y2goYnQuaGFzKG4pJiYocj1idC5nZXQobikpLFllW25dKXtjYXNlImZpbGwiOntjb25zdCBuPVZlLnNoaWZ0KCk7YnIoZSx0LG4sciksdCs9bn1icmVhaztjYXNlImxpbmVhciI6e2NvbnN0IG49VmUuc2hpZnQoKTtwcihlLHQsbixyKSx0Kz1ufWJyZWFrO2Nhc2UicmFkaWFsIjp7Y29uc3Qgbj1WZS5zaGlmdCgpO2dyKGUsdCxuLHIpLHQrPW59YnJlYWs7Y2FzZSJiaXRtYXAiOntjb25zdCBuPVZlLnNoaWZ0KCk7RXIoZSx0LG4sciksdCs9bn19bi5kaXNhYmxlKG4uU1RFTkNJTF9URVNUKSxUdChlKSxxZSgpLGR0KCl9KSgpfWRyYXdEaXNwbGF5T2JqZWN0KHQsbixhLHMsbyxpKXsoZT0+e2NvbnN0IHQ9UmUoZS5pbmRleCksbj10WzBdLHI9dFsxXSxhPXRbMl0scz10WzNdO3RbMF09TWF0aC5taW4oZS54LG4pLHRbMV09TWF0aC5taW4oZS55LHIpLHRbMl09TWF0aC5tYXgoZS54K2UudyxhKSx0WzNdPU1hdGgubWF4KGUueStlLmgscyl9KSh0KSwoKHQsbixhLHMsbyxpKT0+e2NvbnN0IGM9aVswXSxsPWlbMV0sdT1pWzJdLGg9ci5nbG9iYWxBbHBoYSxiPWlbNF0vMjU1LGQ9aVs1XS8yNTUsZj1pWzZdLzI1NSx2PXIuJG1hdHJpeDtzd2l0Y2goci5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb24pe2Nhc2Uibm9ybWFsIjpjYXNlImxheWVyIjpjYXNlImFkZCI6Y2FzZSJzY3JlZW4iOmNhc2UiYWxwaGEiOmNhc2UiZXJhc2UiOmNhc2UiY29weSI6e2lmKFB0KCkhPT1yLmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbnx8RmUoKSE9PXQuaW5kZXgpe21lKEZlKCkpO2NvbnN0IGU9ci5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb247ci5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb249UHQoKSxyLmRyYXdBcnJheXNJbnN0YW5jZWQoKSxyLmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbj1lLEN0KHIuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uKSx3ZSh0LmluZGV4KSxtZSh0LmluZGV4KX1jb25zdCBuPVp0KCk7cXQucHVzaCh0LngvZSx0LnkvZSx0LncvZSx0LmgvZSx0LncsdC5oLHgoKSxFKCksdls2XSx2WzddLHZbMF0sdlsxXSx2WzNdLHZbNF0sYyxsLHUsaCxiLGQsZiwwKSxuLmNvdW50Kyt9YnJlYWs7ZGVmYXVsdDp7Y29uc3QgZT1yLmN1cnJlbnRBdHRhY2htZW50T2JqZWN0O3IuZHJhd0FycmF5c0luc3RhbmNlZCgpO2NvbnN0IGk9TWF0aC5jZWlsKE1hdGguYWJzKHMtbikpLF89TWF0aC5jZWlsKE1hdGguYWJzKG8tYSkpO2xldCBwPTAsZz0wLHg9dG4odCk7aWYoMSE9PXZbMF18fDAhPT12WzFdfHwwIT09dlszXXx8MSE9PXZbNF0pe2NvbnN0IG49aGUoaSxfLCExKSxhPW0odlswXSx2WzFdLHZbM10sdls0XSxpLzIsXy8yKSxzPW0oMSwwLDAsMSwtdC53LzIsLXQuaC8yKSxvPW0oYVswXSpzWzBdK2FbMl0qc1sxXSxhWzFdKnNbMF0rYVszXSpzWzFdLGFbMF0qc1syXSthWzJdKnNbM10sYVsxXSpzWzJdK2FbM10qc1szXSxhWzBdKnNbNF0rYVsyXSpzWzVdK2FbNF0sYVsxXSpzWzRdK2FbM10qc1s1XSthWzVdKTtyLnNhdmUoKSxyLmJpbmQobiksci5zZXRUcmFuc2Zvcm0ob1swXSxvWzFdLG9bMl0sb1szXSxvWzRdLG9bNV0pLHA9b1s0XSxnPW9bNV07Y29uc3QgYz1kbigpO2ZuKGMseC53aWR0aCx4LmhlaWdodCksa2UoeCwhMCksc24oYyksTCh4KSx4PW4udGV4dHVyZSxlZShuLCExKSxlJiZyLmJpbmQoZSksci5yZXN0b3JlKCl9KHB8fGcpJiYodls2XS09cCx2WzddLT1nKTtjb25zdCBFPWxuKHZbNl0sdls3XSxpLF8pLHk9aGUoaSxfLCExKTtyLmJpbmQoeSksbm4oRSx4KTtjb25zdCBBPVF0KHIuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uKTtibihBLGMsbCx1LGgsYixkLGYsMCksc24oQSksZSYmci5iaW5kKGUpLGhuKHkudGV4dHVyZSksKHB8fGcpJiYodls2XSs9cCx2WzddKz1nKSxMKHgpLEwoRSksZWUoeSksQ3Qoci5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb24pLHdlKHQuaW5kZXgpLG1lKHQuaW5kZXgpfX19KSh0LG4sYSxzLG8saSl9ZHJhd0FycmF5c0luc3RhbmNlZCgpeygoKT0+e2NvbnN0IGU9WnQoKTtlLmNvdW50JiYoZW4oKSxwbihyLmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbiksdm4oZSksZS5jbGVhcigpKX0pKCl9Y2xlYXJBcnJheXNJbnN0YW5jZWQoKXtadCgpLmNsZWFyKCl9dHJhbnNmZXJNYWluQ2FudmFzKCl7KCgpPT57Y29uc3QgZT1yLiRtYWluQXR0YWNobWVudE9iamVjdDtyLmJpbmQoZSksbi5iaW5kRnJhbWVidWZmZXIobi5SRUFEX0ZSQU1FQlVGRkVSLEQpLG4uYmluZEZyYW1lYnVmZmVyKG4uRFJBV19GUkFNRUJVRkZFUixudWxsKTtjb25zdCB0PWUud2lkdGgsYT1lLmhlaWdodDtuLmJsaXRGcmFtZWJ1ZmZlcigwLDAsdCxhLDAsMCx0LGEsbi5DT0xPUl9CVUZGRVJfQklULG4uTkVBUkVTVCksbi5iaW5kRnJhbWVidWZmZXIobi5EUkFXX0ZSQU1FQlVGRkVSLGopLG4uYmluZEZyYW1lYnVmZmVyKG4uRlJBTUVCVUZGRVIsRCl9KSgpfWRyYXdQaXhlbHMoZSx0KXsoKGUsdCk9Pntjb25zdCBuPXhuKGUudyxlLmgsdCkscj1ybigpO2FuKHIsZS53LGUuaCksVXQoKSxzbihyKSxMKG4pfSkoZSx0KX1kcmF3RWxlbWVudChlLHQpe0VuKGUsdCl9YmVnaW5NYXNrKCl7KCgpPT57Y29uc3QgZT1yLmN1cnJlbnRBdHRhY2htZW50T2JqZWN0O2UmJihlLm1hc2s9ITAsZS5jbGlwTGV2ZWwrKyxVZS5zZXQoZS5jbGlwTGV2ZWwsZS5jbGlwTGV2ZWwpLEllKCl8fChCZSghMCksbi5lbmFibGUobi5TVEVOQ0lMX1RFU1QpLG4uZW5hYmxlKG4uU0FNUExFX0FMUEhBX1RPX0NPVkVSQUdFKSxuLnN0ZW5jaWxGdW5jKG4uQUxXQVlTLDAsMjU1KSxuLnN0ZW5jaWxPcChuLlpFUk8sbi5JTlZFUlQsbi5JTlZFUlQpLG4uY29sb3JNYXNrKCExLCExLCExLCExKSkpfSkoKX1zZXRNYXNrQm91bmRzKGUsdCxhLHMpeygoZSx0LGEscyk9Pntjb25zdCBvPXIuY3VycmVudEF0dGFjaG1lbnRPYmplY3Q7aWYoIW8pcmV0dXJuO0xlLnNldChvLmNsaXBMZXZlbCx1KGUsdCxhLHMpKTtjb25zdCBpPU1hdGguY2VpbChNYXRoLmFicyhhLWUpKSxjPU1hdGguY2VpbChNYXRoLmFicyhzLXQpKTtuLmVuYWJsZShuLlNDSVNTT1JfVEVTVCksbi5zY2lzc29yKGUsby5oZWlnaHQtdC1jLGksYyl9KShlLHQsYSxzKX1lbmRNYXNrKCl7Q2UoKX1sZWF2ZU1hc2soKXt0aGlzLmRyYXdBcnJheXNJbnN0YW5jZWQoKSwoKCk9Pntjb25zdCBlPXIuY3VycmVudEF0dGFjaG1lbnRPYmplY3Q7aWYoIWUpcmV0dXJuO2NvbnN0IHQ9ZS5jbGlwTGV2ZWwsYT1MZS5nZXQodCkscz1hWzBdLG89YVsxXSxpPWFbMl0sYz1hWzNdO0xlLmRlbGV0ZSh0KSxVZS5kZWxldGUodCksaChhKTtjb25zdCBsPU1hdGguY2VpbChNYXRoLmFicyhpLXMpKSx1PU1hdGguY2VpbChNYXRoLmFicyhjLW8pKTtpZihuLmVuYWJsZShuLlNDSVNTT1JfVEVTVCksbi5zY2lzc29yKHMsZS5oZWlnaHQtby11LGwsdSksLS1lLmNsaXBMZXZlbCwhZS5jbGlwTGV2ZWwpcmV0dXJuIGUubWFzaz0hMSxCZSghMSksbi5jbGVhcihuLlNURU5DSUxfQlVGRkVSX0JJVCksbi5kaXNhYmxlKG4uU1RFTkNJTF9URVNUKSxuLmRpc2FibGUobi5TQ0lTU09SX1RFU1QpLFVlLmNsZWFyKCksdm9pZCBMZS5jbGVhcigpO24uc3RlbmNpbE1hc2soMTw8ZS5jbGlwTGV2ZWwpLG4uc3RlbmNpbEZ1bmMobi5BTFdBWVMsMCwyNTUpLG4uc3RlbmNpbE9wKG4uUkVQTEFDRSxuLlJFUExBQ0Usbi5SRVBMQUNFKSxuLmNvbG9yTWFzayghMSwhMSwhMSwhMSksTnQoRHQoKSx5dCgpLDAsNiksQ2UoKX0pKCl9dXNlR3JpZChlKXsoZT0+e2J0LnNldChWZS5sZW5ndGgsZSl9KShlKX1hcHBseUZpbHRlcihlLHQsbixyLGEscyxvLGksYyxsLHUpe3RoaXMuZHJhd0FycmF5c0luc3RhbmNlZCgpLGhyKGUsdCxuLHIsYSxzLG8saSxjLGwsdSl9YXN5bmMgY3JlYXRlSW1hZ2VCaXRtYXAoZSx0KXtyZXR1cm4gYXdhaXQgVHIoZSx0KX19bGV0IE1yO2xldCB3cjtsZXQgRnI9MDtsZXQgJHI9MDtsZXQgT3I9ITE7Y29uc3QgU3I9W10sa3I9KC4uLmUpPT57Y29uc3QgdD1Tci5wb3AoKXx8W107cmV0dXJuIGUubGVuZ3RoJiZ0LnB1c2goLi4uZSksdH0sQ3I9KGUsdD0xKT0+KHtSOigxNjcxMTY4MCZlKT4+MTYsRzooNjUyODAmZSk+PjgsQjoyNTUmZSxBOjI1NSp0fSksUHI9KGUsdCk9PnsoZT0+e3dyPWV9KShlKTtjb25zdCBuPWUuZ2V0Q29udGV4dCgid2ViZ2wyIix7c3RlbmNpbDohMCxwcmVtdWx0aXBsaWVkQWxwaGE6ITAsYW50aWFsaWFzOiExLGRlcHRoOiExfSk7aWYoIW4pdGhyb3cgbmV3IEVycm9yKCJ3ZWJnbDIgaXMgbm90IHN1cHBvcnRlZC4iKTt2YXIgcjtyPW5ldyBScihuLDQsdCksTXI9cn0sQnI9KGUsdCxuPSEwKT0+e0ZyPT09ZSYmJHI9PT10fHwoT3I9ITAsRnI9ZSwkcj10LE1yLnJlc2l6ZShlLHQsbiksbiYmdXIucmVzZXQoKSl9LElyPShlLHQ9ITEpPT57bGV0IG49MDtmb3IoO2UubGVuZ3RoPm47KXN3aXRjaChlW24rK10pe2Nhc2UgOTpNci5iZWdpblBhdGgoKTticmVhaztjYXNlIDA6TXIubW92ZVRvKGVbbisrXSxlW24rK10pO2JyZWFrO2Nhc2UgMjpNci5saW5lVG8oZVtuKytdLGVbbisrXSk7YnJlYWs7Y2FzZSAxOk1yLnF1YWRyYXRpY0N1cnZlVG8oZVtuKytdLGVbbisrXSxlW24rK10sZVtuKytdKTticmVhaztjYXNlIDU6aWYodCl7bis9NDticmVha31Nci5maWxsU3R5bGUoZVtuKytdLzI1NSxlW24rK10vMjU1LGVbbisrXS8yNTUsZVtuKytdLzI1NSk7YnJlYWs7Y2FzZSA3Ok1yLmZpbGwoKTticmVhaztjYXNlIDY6aWYodCl7bis9ODticmVha31Nci50aGlja25lc3M9ZVtuKytdLE1yLmNhcHM9ZVtuKytdLE1yLmpvaW50cz1lW24rK10sTXIubWl0ZXJMaW1pdD1lW24rK10sTXIuc3Ryb2tlU3R5bGUoZVtuKytdLzI1NSxlW24rK10vMjU1LGVbbisrXS8yNTUsZVtuKytdLzI1NSk7YnJlYWs7Y2FzZSA4OmlmKHQpYnJlYWs7TXIuc3Ryb2tlKCk7YnJlYWs7Y2FzZSAxMjpNci5jbG9zZVBhdGgoKTticmVhaztjYXNlIDQ6TXIuYXJjKGVbbisrXSxlW24rK10sZVtuKytdKTticmVhaztjYXNlIDM6TXIuYmV6aWVyQ3VydmVUbyhlW24rK10sZVtuKytdLGVbbisrXSxlW24rK10sZVtuKytdLGVbbisrXSk7YnJlYWs7Y2FzZSAxMDp7aWYodCl7bis9MTtjb25zdCB0PWVbbisrXTtuKz01KnQsbis9OSxNci5maWxsKCk7YnJlYWt9Y29uc3Qgcj1lW24rK10sYT1rcigpLHM9ZVtuKytdO2ZvcihsZXQgdD0wO3Q8czsrK3QpYS5wdXNoKGVbbisrXSxlW24rK10sZVtuKytdLGVbbisrXSxlW24rK10pO2NvbnN0IG89bmV3IEZsb2F0MzJBcnJheShbZVtuKytdLGVbbisrXSxlW24rK10sZVtuKytdLGVbbisrXSxlW24rK11dKSxpPWVbbisrXSxjPWVbbisrXSxsPWVbbisrXTtNci5ncmFkaWVudEZpbGwocixhLG8saSxjLGwpfWJyZWFrO2Nhc2UgMTM6e2lmKHQpe24rPTI7Y29uc3QgdD1lW24rK107bis9dCxuKz04LE1yLmZpbGwoKTticmVha31jb25zdCByPWVbbisrXSxhPWVbbisrXSxzPWVbbisrXSxvPW5ldyBVaW50OEFycmF5KGUuc3ViYXJyYXkobixuK3MpKTtuKz1zO2NvbnN0IGk9bmV3IEZsb2F0MzJBcnJheShbZVtuKytdLGVbbisrXSxlW24rK10sZVtuKytdLGVbbisrXSxlW24rK11dKTtNci5iaXRtYXBGaWxsKG8saSxyLGEsQm9vbGVhbihlW24rK10pLEJvb2xlYW4oZVtuKytdKSl9YnJlYWs7Y2FzZSAxMTp7aWYodCl7bis9MjAsTXIuZmlsbCgpO2JyZWFrfU1yLnRoaWNrbmVzcz1lW24rK10sTXIuY2Fwcz1lW24rK10sTXIuam9pbnRzPWVbbisrXSxNci5taXRlckxpbWl0PWVbbisrXTtjb25zdCByPWVbbisrXSxhPWtyKCkscz1lW24rK107Zm9yKGxldCB0PTA7dDxzOysrdClhLnB1c2goZVtuKytdLGVbbisrXSxlW24rK10sZVtuKytdLGVbbisrXSk7Y29uc3Qgbz1uZXcgRmxvYXQzMkFycmF5KFtlW24rK10sZVtuKytdLGVbbisrXSxlW24rK10sZVtuKytdLGVbbisrXV0pLGk9ZVtuKytdLGM9ZVtuKytdLGw9ZVtuKytdO01yLmdyYWRpZW50U3Ryb2tlKHIsYSxvLGksYyxsKX1icmVhaztjYXNlIDE0OntpZih0KXtuKz02O2NvbnN0IHQ9ZVtuKytdO24rPXQsbis9OCxNci5maWxsKCk7YnJlYWt9TXIudGhpY2tuZXNzPWVbbisrXSxNci5jYXBzPWVbbisrXSxNci5qb2ludHM9ZVtuKytdLE1yLm1pdGVyTGltaXQ9ZVtuKytdO2NvbnN0IHI9ZVtuKytdLGE9ZVtuKytdLHM9ZVtuKytdLG89bmV3IFVpbnQ4QXJyYXkoZS5zdWJhcnJheShuLG4rcykpO24rPXM7Y29uc3QgaT1uZXcgRmxvYXQzMkFycmF5KFtlW24rK10sZVtuKytdLGVbbisrXSxlW24rK10sZVtuKytdLGVbbisrXV0pO01yLmJpdG1hcFN0cm9rZShvLGkscixhLEJvb2xlYW4oZVtuKytdKSxCb29sZWFuKGVbbisrXSkpfX19LExyPWU9Pntzd2l0Y2goZSl7Y2FzZSAwOnJldHVybiJjb3B5IjtjYXNlIDE6cmV0dXJuImFkZCI7Y2FzZSAyOnJldHVybiJhbHBoYSI7Y2FzZSAzOnJldHVybiJkYXJrZW4iO2Nhc2UgNDpyZXR1cm4iZGlmZmVyZW5jZSI7Y2FzZSA1OnJldHVybiJlcmFzZSI7Y2FzZSA2OnJldHVybiJoYXJkbGlnaHQiO2Nhc2UgNzpyZXR1cm4iaW52ZXJ0IjtjYXNlIDg6cmV0dXJuImxheWVyIjtjYXNlIDk6cmV0dXJuImxpZ2h0ZW4iO2Nhc2UgMTA6cmV0dXJuIm11bHRpcGx5IjtjYXNlIDExOmRlZmF1bHQ6cmV0dXJuIm5vcm1hbCI7Y2FzZSAxMjpyZXR1cm4ib3ZlcmxheSI7Y2FzZSAxMzpyZXR1cm4ic2NyZWVuIjtjYXNlIDE0OnJldHVybiJzdWJ0cmFjdCJ9fSxVcj0oZSx0KT0+e2NvbnN0IG49ZS5zdWJhcnJheSh0LHQrNik7dCs9Njtjb25zdCByPWUuc3ViYXJyYXkodCx0KzgpO3QrPTg7Y29uc3QgYT1lLnN1YmFycmF5KHQsdCs0KTt0Kz00O2NvbnN0IHM9ZVt0KytdLG89ZVt0KytdLGk9ZVt0KytdLGM9ZVt0KytdLGw9Qm9vbGVhbihlW3QrK10pLHU9Qm9vbGVhbihlW3QrK10pLGg9Qm9vbGVhbihlW3QrK10pLGI9YCR7ZVt0KytdfWAsZD1lW3QrK10sZj1NYXRoLnNxcnQoblswXSpuWzBdK25bMV0qblsxXSksbT1NYXRoLnNxcnQoblsyXSpuWzJdK25bM10qblszXSk7bGV0IHY7aWYoZVt0KytdKXtpZih2PXVyLmdldChiLGAke2R9YCksIXYpcmV0dXJuIHR9ZWxzZXtjb25zdCBuPWw/bmV3IEZsb2F0MzJBcnJheSgyOCk6bnVsbDtuJiYobi5zZXQoZS5zdWJhcnJheSh0LHQrMjQpKSx0Kz0yNCksTXIudXNlR3JpZChuKTtjb25zdCByPWVbdCsrXSxhPWUuc3ViYXJyYXkodCx0K3IpO2lmKGgmJiFsKXtjb25zdCBlPU1hdGguY2VpbChNYXRoLmFicyhpLXMpKSx0PU1hdGguY2VpbChNYXRoLmFicyhjLW8pKTt2PU1yLmNyZWF0ZU5vZGUoZSx0KSx1ci5zZXQoYixgJHtkfWAsdik7Y29uc3Qgbj1Nci5jdXJyZW50QXR0YWNobWVudE9iamVjdDtNci5iaW5kKE1yLmF0bGFzQXR0YWNobWVudE9iamVjdCksTXIucmVzZXQoKSxNci5iZWdpbk5vZGVSZW5kZXJpbmcodik7Y29uc3Qgcj1Nci5hdGxhc0F0dGFjaG1lbnRPYmplY3QuaGVpZ2h0LXYueS10O01yLnNldFRyYW5zZm9ybSgxLDAsMCwxLHYueCxyKSx1PyhJcihhKSxNci5kcmF3RmlsbCgpKTpNci5kcmF3UGl4ZWxzKHYsbmV3IFVpbnQ4QXJyYXkoYSkpLE1yLmVuZE5vZGVSZW5kZXJpbmcoKSxuJiZNci5iaW5kKG4pfWVsc2V7Y29uc3QgZT1NYXRoLmNlaWwoTWF0aC5hYnMoaS1zKSpmKSx0PU1hdGguY2VpbChNYXRoLmFicyhjLW8pKm0pO3Y9TXIuY3JlYXRlTm9kZShlLHQpLHVyLnNldChiLGAke2R9YCx2KTtjb25zdCByPU1yLmN1cnJlbnRBdHRhY2htZW50T2JqZWN0O01yLmJpbmQoTXIuYXRsYXNBdHRhY2htZW50T2JqZWN0KSxNci5yZXNldCgpLE1yLmJlZ2luTm9kZVJlbmRlcmluZyh2KTtjb25zdCBsPU1yLmF0bGFzQXR0YWNobWVudE9iamVjdC5oZWlnaHQtdi55LXQ7TXIuc2V0VHJhbnNmb3JtKGYsMCwwLG0sLXMqZit2LngsLW8qbStsKSxuJiYoblsyNF09di54LG5bMjVdPWwpLElyKGEpLE1yLmRyYXdGaWxsKCksTXIuZW5kTm9kZVJlbmRlcmluZygpLHImJk1yLmJpbmQocil9dCs9cn1jb25zdCBfPWVbdCsrXTtpZihCb29sZWFuKGVbdCsrXSkpe2NvbnN0IHM9Qm9vbGVhbihlW3QrK10pLG89ZS5zdWJhcnJheSh0LHQrNCk7dCs9NDtjb25zdCBpPWVbdCsrXSxjPWUuc3ViYXJyYXkodCx0K2kpLGw9TWF0aC5jZWlsKE1hdGguYWJzKGFbMl0tYVswXSkpLHU9TWF0aC5jZWlsKE1hdGguYWJzKGFbM10tYVsxXSkpO3JldHVybiBNci5hcHBseUZpbHRlcih2LGIscyxsLHUsaCxuLHIsTHIoXyksbyxjKSx0Kz1pfWlmKE1yLmdsb2JhbEFscGhhPU1hdGgubWluKE1hdGgubWF4KDAsclszXStyWzddLzI1NSksMSksTXIuaW1hZ2VTbW9vdGhpbmdFbmFibGVkPSEwLE1yLmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbj1McihfKSxoJiYhbClNci5zZXRUcmFuc2Zvcm0oblswXSxuWzFdLG5bMl0sblszXSxuWzRdLG5bNV0pLE1yLmRyYXdEaXNwbGF5T2JqZWN0KHYsYVswXSxhWzFdLGFbMl0sYVszXSxyKTtlbHNle2NvbnN0IGU9TWF0aC5hdGFuMihuWzFdLG5bMF0pLHQ9TWF0aC5hdGFuMigtblsyXSxuWzNdKTtpZihlfHx0KXtjb25zdCByPXMqZixhPW8qbSxpPU1hdGguY29zKGUpLGM9TWF0aC5zaW4oZSksbD1NYXRoLmNvcyh0KSx1PU1hdGguc2luKHQpO01yLnNldFRyYW5zZm9ybShpLGMsLXUsbCxyKmktYSp1K25bNF0scipjK2EqbCtuWzVdKX1lbHNlIE1yLnNldFRyYW5zZm9ybSgxLDAsMCwxLGFbMF0sYVsxXSk7TXIuZHJhd0Rpc3BsYXlPYmplY3QodixhWzBdLGFbMV0sYVsyXSxhWzNdLHIpfXJldHVybiB0fSxOcj0oZSx0KT0+e2NvbnN0IG49ZS5zdWJhcnJheSh0LHQrNik7dCs9NixNci5yZXNldCgpLE1yLnNldFRyYW5zZm9ybShuWzBdLG5bMV0sblsyXSxuWzNdLG5bNF0sbls1XSk7Y29uc3Qgcj1Cb29sZWFuKGVbdCsrXSk/bmV3IEZsb2F0MzJBcnJheSgyOCk6bnVsbDtNci51c2VHcmlkKHIpLHImJihyLnNldChlLnN1YmFycmF5KHQsdCsyNCkpLHQrPTI0KTtjb25zdCBhPWVbdCsrXSxzPWUuc3ViYXJyYXkodCx0K2EpO3JldHVybiBJcihzLCEwKSx0Kz1hLE1yLmNsaXAoKSx0fSxEcj0oZSx0LG4pPT57Y29uc3Qgcj1lLndpZHRoVGFibGVbdC5saW5lXXx8MCxhPXQudGV4dEZvcm1hdCxzPWEubGVmdE1hcmdpbnx8MDtpZighbi53b3JkV3JhcCYmcj5uLnJhd1dpZHRoKXJldHVybiBNYXRoLm1heCgwLHMpO2NvbnN0IG89YS5yaWdodE1hcmdpbnx8MDtyZXR1cm4iY2VudGVyIj09PWEuYWxpZ258fCJjZW50ZXIiPT09bi5hdXRvU2l6ZT9NYXRoLm1heCgwLG4ucmF3V2lkdGgvMi1zLW8tci8yLTIpOiJyaWdodCI9PT1hLmFsaWdufHwicmlnaHQiPT09bi5hdXRvU2l6ZT9NYXRoLm1heCgwLG4ucmF3V2lkdGgtcy1yLW8tNCk6TWF0aC5tYXgoMCxzKX0sanI9ZT0+e2xldCB0PSIiO3JldHVybiBlLml0YWxpYyYmKHQrPSJpdGFsaWMgIiksZS5ib2xkJiYodCs9ImJvbGQgIiksYCR7dH0ke2Uuc2l6ZX1weCAnJHtlLmZvbnR9Jywnc2Fucy1zZXJpZidgfSx6cj1uZXcgVGV4dERlY29kZXIsWHI9KGUsdCk9Pntjb25zdCBuPWUuc3ViYXJyYXkodCx0KzYpO3QrPTY7Y29uc3Qgcj1lLnN1YmFycmF5KHQsdCs4KTt0Kz04O2NvbnN0IGE9ZS5zdWJhcnJheSh0LHQrNCk7dCs9NDtjb25zdCBzPWVbdCsrXSxvPWVbdCsrXSxpPWVbdCsrXSxjPWVbdCsrXSxsPWAke2VbdCsrXX1gLHU9ZVt0KytdLGg9Qm9vbGVhbihlW3QrK10pLGI9TWF0aC5zcXJ0KG5bMF0qblswXStuWzFdKm5bMV0pLGQ9TWF0aC5zcXJ0KG5bMl0qblsyXStuWzNdKm5bM10pO2xldCBmO2lmKGVbdCsrXSl7aWYoZj11ci5nZXQobCxgJHt1fWApLCFmKXJldHVybiB0fWVsc2V7Y29uc3Qgbj1NYXRoLmNlaWwoTWF0aC5hYnMoaS1zKSpiKSxyPU1hdGguY2VpbChNYXRoLmFicyhjLW8pKmQpLGE9Qm9vbGVhbihlW3QrK10pO2Y9YT91ci5nZXQobCxgJHt1fWApOk1yLmNyZWF0ZU5vZGUobixyKSxhfHx1ci5zZXQobCxgJHt1fWAsZik7Y29uc3QgaD1lW3QrK10sbT1uZXcgVWludDhBcnJheShlLnN1YmFycmF5KHQsdCtoKSk7dCs9aDtsZXQgdj0ibm9uZSI7c3dpdGNoKGVbdCsrXSl7Y2FzZSAwOnY9ImNlbnRlciI7YnJlYWs7Y2FzZSAxOnY9ImxlZnQiO2JyZWFrO2Nhc2UgMjp2PSJub25lIjticmVhaztjYXNlIDM6dj0icmlnaHQifWNvbnN0IF89e3dpZHRoOm4saGVpZ2h0OnIsYXV0b1NpemU6dixzdG9wSW5kZXg6ZVt0KytdLHNjcm9sbFg6ZVt0KytdLHNjcm9sbFk6ZVt0KytdLHRleHRXaWR0aDplW3QrK10sdGV4dEhlaWdodDplW3QrK10scmF3V2lkdGg6ZVt0KytdLHJhd0hlaWdodDplW3QrK10sZm9jdXNJbmRleDplW3QrK10sc2VsZWN0SW5kZXg6ZVt0KytdLGZvY3VzVmlzaWJsZTpCb29sZWFuKGVbdCsrXSksdGhpY2tuZXNzOmVbdCsrXSx0aGlja25lc3NDb2xvcjplW3QrK10sd29yZFdyYXA6Qm9vbGVhbihlW3QrK10pLGJvcmRlcjpCb29sZWFuKGVbdCsrXSksYm9yZGVyQ29sb3I6ZVt0KytdLGJhY2tncm91bmQ6Qm9vbGVhbihlW3QrK10pLGJhY2tncm91bmRDb2xvcjplW3QrK10sZGVmYXVsdENvbG9yOmVbdCsrXSxkZWZhdWx0U2l6ZTplW3QrK119LHA9KChlLHQsbixyKT0+e2NvbnN0IGE9bmV3IE9mZnNjcmVlbkNhbnZhcyh0LndpZHRoLHQuaGVpZ2h0KSxzPWEuZ2V0Q29udGV4dCgiMmQiKTtpZighcylyZXR1cm4gYTtjb25zdCBvPU1hdGgubWluKDEsTWF0aC5tYXgobixyKSk7aWYodC5iYWNrZ3JvdW5kfHx0LmJvcmRlcil7aWYocy5iZWdpblBhdGgoKSxzLm1vdmVUbygwLDApLHMubGluZVRvKHQud2lkdGgsMCkscy5saW5lVG8odC53aWR0aCx0LmhlaWdodCkscy5saW5lVG8oMCx0LmhlaWdodCkscy5saW5lVG8oMCwwKSx0LmJhY2tncm91bmQpe2NvbnN0IGU9Q3IodC5iYWNrZ3JvdW5kQ29sb3IpO3MuZmlsbFN0eWxlPWByZ2JhKCR7ZS5SfSwke2UuR30sJHtlLkJ9LCR7ZS5BfSlgLHMuZmlsbCgpfWlmKHQuYm9yZGVyKXtjb25zdCBlPUNyKHQuYm9yZGVyQ29sb3IpO3MubGluZVdpZHRoPW8scy5zdHJva2VTdHlsZT1gcmdiYSgke2UuUn0sJHtlLkd9LCR7ZS5CfSwke2UuQX0pYCxzLnN0cm9rZSgpfX1pZighZSlyZXR1cm4gYTtzLnNhdmUoKSxzLmJlZ2luUGF0aCgpLHMubW92ZVRvKDIsMikscy5saW5lVG8odC53aWR0aC0yLDIpLHMubGluZVRvKHQud2lkdGgtMix0LmhlaWdodC0yKSxzLmxpbmVUbygyLHQuaGVpZ2h0LTIpLHMubGluZVRvKDIsMikscy5jbGlwKCk7bGV0IGk9MjtpZih0LnNjcm9sbFg+MCl7Y29uc3QgZT0odC50ZXh0V2lkdGgrNC10LnJhd1dpZHRoKS90LnJhd1dpZHRoO2krPS10LnNjcm9sbFgqZX1sZXQgYz0yO2lmKHQuc2Nyb2xsWT4wKXtjb25zdCBlPSh0LnRleHRIZWlnaHQrMi10LnJhd0hlaWdodCkvdC5yYXdIZWlnaHQ7Yys9LXQuc2Nyb2xsWSplfWlmKHMuc2V0VHJhbnNmb3JtKG4sMCwwLHIsaSpuLGMqcikscy5iZWdpblBhdGgoKSx0LnNlbGVjdEluZGV4Pi0xJiZ0LmZvY3VzSW5kZXg+LTEpe2NvbnN0IG49ZS50ZXh0VGFibGUubGVuZ3RoLTE7bGV0IHI9MCxhPTA7dC5mb2N1c0luZGV4PD10LnNlbGVjdEluZGV4PyhyPU1hdGgubWluKHQuZm9jdXNJbmRleCxuKSxhPU1hdGgubWluKHQuc2VsZWN0SW5kZXgsbikpOihyPU1hdGgubWluKHQuc2VsZWN0SW5kZXgsbiksYT1NYXRoLm1pbih0LmZvY3VzSW5kZXgtMSxuKSk7Y29uc3Qgbz1lLnRleHRUYWJsZVtyXSxpPWUubGluZVRhYmxlW28ubGluZV0sYz1EcihlLGksdCk7bGV0IGw9MDtpZihyJiYidGV4dCI9PT1vLm1vZGUpe2xldCB0PXI7Zm9yKDt0Oyl7Y29uc3Qgbj1lLnRleHRUYWJsZVstLXRdO2lmKCJ0ZXh0IiE9PW4ubW9kZSlicmVhaztsKz1uLnd9fXMuZmlsbFN0eWxlPSIjYjRkN2ZmIjtsZXQgdT0wO2ZvcihsZXQgdD1yO3Q8PWE7Kyt0KXtjb25zdCBuPWUudGV4dFRhYmxlW3RdO2lmKCJ0ZXh0Ij09PW4ubW9kZSYmKHUrPW4udyx0IT09YSkpY29udGludWU7bGV0IHI9MDtjb25zdCBvPSJ0ZXh0Ij09PW4ubW9kZT9uLmxpbmU6bi5saW5lLTE7Zm9yKGxldCB0PTA7dDxvOysrdClyKz1lLmhlaWdodFRhYmxlW3RdO3MuYmVnaW5QYXRoKCkscy5yZWN0KGwscix1K2MsZS5oZWlnaHRUYWJsZVtvXSkscy5maWxsKCksbD0wLHU9MH19Y29uc3QgbD10LnJhd1dpZHRoO2xldCB1PTA7aWYodC5zY3JvbGxYPjApe2NvbnN0IGU9KHQudGV4dFdpZHRoLWwpL2w7dT10LnNjcm9sbFgqZX1jb25zdCBoPWwrdSxiPXQucmF3SGVpZ2h0O2xldCBkPTA7aWYodC5zY3JvbGxZPjApe2NvbnN0IGU9KHQudGV4dEhlaWdodC1iKS9iO2Q9dC5zY3JvbGxZKmV9Y29uc3QgZj1iK2Q7bGV0IG09MCx2PTAsXz0wLHA9MCxnPSExLHg9LTE7Zm9yKGxldCBuPTA7bjxlLnRleHRUYWJsZS5sZW5ndGg7KytuKXtjb25zdCByPWUudGV4dFRhYmxlW25dO2lmKCFyKWNvbnRpbnVlO2lmKCgidGV4dCI9PT1yLm1vZGV8fCJicmVhayI9PT1yLm1vZGUpJiYoeCsrLHQuc3RvcEluZGV4Pi0xJiZ4PnQuc3RvcEluZGV4KSlicmVhaztpZihnJiYidGV4dCI9PT1yLm1vZGUpY29udGludWU7Y29uc3QgYT1yLnRleHRGb3JtYXQ7aWYoIm5vbmUiPT09dC5hdXRvU2l6ZSl7aWYodj5mKWJyZWFrO2lmKCJ0ZXh0Ij09PXIubW9kZSYmKHU+bStyLnd8fG0+aCkpe20rPXIudztjb250aW51ZX19Y29uc3QgaT1DcihhLmNvbG9yfHwwKTtpZihzLmZpbGxTdHlsZT1gcmdiYSgke2kuUn0sJHtpLkd9LCR7aS5CfSwke2kuQX0pYCx0LmZvY3VzVmlzaWJsZSYmdC5mb2N1c0luZGV4PT09bil7Y29uc3QgdD1tK18rLjE7bGV0IG49ci5saW5lLGE9ci55LG89ZS5hc2NlbnRUYWJsZVtuXTsidGV4dCIhPT1yLm1vZGUmJihhPSJicmVhayI9PT1yLm1vZGU/ci5oOmUuYXNjZW50VGFibGVbbi0xXSxuPjA/KG49ci5saW5lLTEsbz1lLmFzY2VudFRhYmxlW25dKTpvPXIuaCksbj4wJiYwPT09ZS5hc2NlbnRUYWJsZVtuXSYmbisrO2ZvcihsZXQgdD0wO3Q8bjsrK3Qpbys9ZS5oZWlnaHRUYWJsZVt0XTtzLnN0cm9rZVN0eWxlPWByZ2JhKCR7aS5SfSwke2kuR30sJHtpLkJ9LCR7aS5BfSlgLHMuYmVnaW5QYXRoKCkscy5tb3ZlVG8odCxvKSxzLmxpbmVUbyh0LG8tYSkscy5zdHJva2UoKX1pZih0LnRoaWNrbmVzcyl7Y29uc3QgZT1Dcih0LnRoaWNrbmVzc0NvbG9yKTtzLmxpbmVXaWR0aD10LnRoaWNrbmVzcyxzLnN0cm9rZVN0eWxlPWByZ2JhKCR7ZS5SfSwke2UuR30sJHtlLkJ9LCR7ZS5BfSlgfWNvbnN0IGM9MHxyLmxpbmU7c3dpdGNoKHIubW9kZSl7Y2FzZSJicmVhayI6Y2FzZSJ3cmFwIjppZihtPTAsYyYmKHYrPWUuaGVpZ2h0VGFibGVbYy0xXSksZD52K2UuaGVpZ2h0VGFibGVbY10pe2c9ITA7Y29udGludWV9cD1lLmFzY2VudFRhYmxlW2NdLF89RHIoZSxyLHQpLGc9ITE7YnJlYWs7Y2FzZSJ0ZXh0Ijp7cy5iZWdpblBhdGgoKSxzLmZvbnQ9anIoYSk7Y29uc3QgZT1tK18sbj12K3A7aWYoYS51bmRlcmxpbmUpe2NvbnN0IHQ9Q3IoYS5jb2xvcnx8MCk7cy5saW5lV2lkdGg9byxzLnN0cm9rZVN0eWxlPWByZ2JhKCR7dC5SfSwke3QuR30sJHt0LkJ9LCR7dC5BfSlgLHMuYmVnaW5QYXRoKCkscy5tb3ZlVG8oZSxuKzIpLHMubGluZVRvKGUrci53LG4rMikscy5zdHJva2UoKX10LnRoaWNrbmVzcyYmcy5zdHJva2VUZXh0KHIudGV4dCxlLG4pLHMuZmlsbFRleHQoci50ZXh0LGUsbiksbSs9ci53fX19aWYodC5mb2N1c1Zpc2libGUmJnQuZm9jdXNJbmRleD49ZS50ZXh0VGFibGUubGVuZ3RoKXtjb25zdCBuPWUudGV4dFRhYmxlW3QuZm9jdXNJbmRleC0xXTtpZihuKXtjb25zdCBlPUNyKG4udGV4dEZvcm1hdC5jb2xvcnx8MCk7cy5zdHJva2VTdHlsZT1gcmdiYSgke2UuUn0sJHtlLkd9LCR7ZS5CfSwke2UuQX0pYDtjb25zdCB0PW0rXysuMSxyPXYrcDtzLmJlZ2luUGF0aCgpLCJ0ZXh0Ij09PW4ubW9kZT9zLm1vdmVUbyh0LHItbi55KTpzLm1vdmVUbyh0LHIrbi5oKSxzLmxpbmVUbyh0LHIpLHMuc3Ryb2tlKCl9fXJldHVybiBzLnJlc3RvcmUoKSxhfSkoSlNPTi5wYXJzZSh6ci5kZWNvZGUobSkpLF8sYixkKSxnPU1yLmN1cnJlbnRBdHRhY2htZW50T2JqZWN0O01yLmJpbmQoTXIuYXRsYXNBdHRhY2htZW50T2JqZWN0KSxNci5yZXNldCgpLE1yLmJlZ2luTm9kZVJlbmRlcmluZyhmKTtjb25zdCB4PU1yLmF0bGFzQXR0YWNobWVudE9iamVjdC5oZWlnaHQtZi55LXI7TXIuc2V0VHJhbnNmb3JtKDEsMCwwLDEsZi54LHgpLE1yLmRyYXdFbGVtZW50KGYscCksTXIuZW5kTm9kZVJlbmRlcmluZygpLGcmJk1yLmJpbmQoZyl9Y29uc3QgbT1lW3QrK107aWYoQm9vbGVhbihlW3QrK10pKXtjb25zdCBzPUJvb2xlYW4oZVt0KytdKSxvPWUuc3ViYXJyYXkodCx0KzQpO3QrPTQ7Y29uc3QgaT1lW3QrK10sYz1lLnN1YmFycmF5KHQsdCtpKSx1PU1hdGguY2VpbChNYXRoLmFicyhhWzJdLWFbMF0pKSxiPU1hdGguY2VpbChNYXRoLmFicyhhWzNdLWFbMV0pKTtyZXR1cm4gTXIuYXBwbHlGaWx0ZXIoZixsLEJvb2xlYW4oTWF0aC5tYXgoK2gsK3MpKSx1LGIsITEsbixyLExyKG0pLG8sYyksdCs9aX1Nci5nbG9iYWxBbHBoYT1NYXRoLm1pbihNYXRoLm1heCgwLHJbM10rcls3XS8yNTUpLDEpLE1yLmltYWdlU21vb3RoaW5nRW5hYmxlZD0hMCxNci5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb249THIobSk7Y29uc3Qgdj1NYXRoLmF0YW4yKG5bMV0sblswXSksXz1NYXRoLmF0YW4yKC1uWzJdLG5bM10pO2lmKHZ8fF8pe2NvbnN0IGU9cypiLHQ9bypkLHI9TWF0aC5jb3ModiksYT1NYXRoLnNpbih2KSxpPU1hdGguY29zKF8pLGM9TWF0aC5zaW4oXyk7TXIuc2V0VHJhbnNmb3JtKHIsYSwtYyxpLGUqci10KmMrbls0XSxlKmErdCppK25bNV0pfWVsc2UgTXIuc2V0VHJhbnNmb3JtKDEsMCwwLDEsYVswXSxhWzFdKTtyZXR1cm4gTXIuZHJhd0Rpc3BsYXlPYmplY3QoZixhWzBdLGFbMV0sYVsyXSxhWzNdLHIpLHR9LFdyPShlLHQsbik9Pntjb25zdCByPWUuc3ViYXJyYXkodCx0KzYpO3QrPTY7Y29uc3QgYT1lLnN1YmFycmF5KHQsdCs4KTt0Kz04O2NvbnN0IHM9ZS5zdWJhcnJheSh0LHQrNCk7dCs9NDtjb25zdCBvPWVbdCsrXSxpPWVbdCsrXSxjPWVbdCsrXSxsPWVbdCsrXSx1PWAke2VbdCsrXX1gLGg9Qm9vbGVhbihlW3QrK10pO2xldCBiO2lmKGVbdCsrXSl7aWYoYj11ci5nZXQodSwiMCIpLCFiKXJldHVybiB0fWVsc2V7Y29uc3Qgcj1NYXRoLmFicyhjLW8pLGE9TWF0aC5hYnMobC1pKSxzPUJvb2xlYW4oZVt0KytdKTtpZihiPXM/dXIuZ2V0KHUsIjAiKTpNci5jcmVhdGVOb2RlKHIsYSksc3x8dXIuc2V0KHUsIjAiLGIpLG4mJm4ubGVuZ3RoKXtjb25zdCBlPU1yLmN1cnJlbnRBdHRhY2htZW50T2JqZWN0O01yLmJpbmQoTXIuYXRsYXNBdHRhY2htZW50T2JqZWN0KSxNci5yZXNldCgpLE1yLmJlZ2luTm9kZVJlbmRlcmluZyhiKTtjb25zdCB0PU1yLmF0bGFzQXR0YWNobWVudE9iamVjdC5oZWlnaHQtYi55LWE7TXIuc2V0VHJhbnNmb3JtKDEsMCwwLDEsYi54LHQpO2NvbnN0IHI9bi5zaGlmdCgpO01yLmRyYXdFbGVtZW50KGIsciksTXIuZW5kTm9kZVJlbmRlcmluZygpLGUmJk1yLmJpbmQoZSl9fWNvbnN0IGQ9ZVt0KytdO2lmKEJvb2xlYW4oZVt0KytdKSl7Y29uc3Qgbj1Cb29sZWFuKGVbdCsrXSksbz1lLnN1YmFycmF5KHQsdCs0KTt0Kz00O2NvbnN0IGk9ZVt0KytdLGM9ZS5zdWJhcnJheSh0LHQraSksbD1NYXRoLmNlaWwoTWF0aC5hYnMoc1syXS1zWzBdKSksZj1NYXRoLmNlaWwoTWF0aC5hYnMoc1szXS1zWzFdKSk7cmV0dXJuIE1yLmFwcGx5RmlsdGVyKGIsdSxCb29sZWFuKE1hdGgubWF4KCtoLCtuKSksbCxmLCEwLHIsYSxMcihkKSxvLGMpLHQrPWl9cmV0dXJuIE1yLmdsb2JhbEFscGhhPU1hdGgubWluKE1hdGgubWF4KDAsYVszXSthWzddLzI1NSksMSksTXIuaW1hZ2VTbW9vdGhpbmdFbmFibGVkPSEwLE1yLmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbj1McihkKSxNci5zZXRUcmFuc2Zvcm0oclswXSxyWzFdLHJbMl0sclszXSxyWzRdLHJbNV0pLE1yLmRyYXdEaXNwbGF5T2JqZWN0KGIsc1swXSxzWzFdLHNbMl0sc1szXSxhKSx0fSxHcj0oZSx0KT0+e2NvbnN0IG49ZVt0KytdO2ZvcihsZXQgcj0wO3I8bjsrK3Ipe3N3aXRjaChlW3QrK10pe2Nhc2UgMDp0PUdyKGUsdCk7YnJlYWs7Y2FzZSAxOnQ9TnIoZSx0KX19cmV0dXJuIHR9LFZyPShlLHQsbik9Pntjb25zdCByPUJvb2xlYW4oZVt0KytdKTtpZihyKXtNci5kcmF3QXJyYXlzSW5zdGFuY2VkKCksTXIuc2F2ZSgpLE1yLmJlZ2luTWFzaygpLE1yLnNldE1hc2tCb3VuZHMoZVt0KytdLGVbdCsrXSxlW3QrK10sZVt0KytdKTtzd2l0Y2goZVt0KytdKXtjYXNlIDA6dD1HcihlLHQpO2JyZWFrO2Nhc2UgMTp0PU5yKGUsdCl9TXIuZW5kTWFzaygpfWxldCBhPTAscz0hMDtjb25zdCBvPWVbdCsrXTtmb3IobGV0IHI9MDtvPnI7cisrKXtjb25zdCByPWVbdCsrXSxvPWVbdCsrXTtpZihhJiZyPmEmJihzJiYoTXIucmVzdG9yZSgpLE1yLmxlYXZlTWFzaygpKSxhPTAscz0hMCksIXMpY29udGludWU7aWYobyl7aWYoYT1vLHM9Qm9vbGVhbihlW3QrK10pLCFzKWNvbnRpbnVlO01yLmRyYXdBcnJheXNJbnN0YW5jZWQoKSxNci5zYXZlKCksTXIuYmVnaW5NYXNrKCksTXIuc2V0TWFza0JvdW5kcyhlW3QrK10sZVt0KytdLGVbdCsrXSxlW3QrK10pO3N3aXRjaChlW3QrK10pe2Nhc2UgMDp0PUdyKGUsdCk7YnJlYWs7Y2FzZSAxOnQ9TnIoZSx0KX1Nci5lbmRNYXNrKCk7Y29udGludWV9aWYoIWVbdCsrXSljb250aW51ZTtjb25zdCBpPWVbdCsrXTtzd2l0Y2goaSl7Y2FzZSAwOnQ9VnIoZSx0LG4pO2JyZWFrO2Nhc2UgMTp0PVVyKGUsdCk7YnJlYWs7Y2FzZSAyOnQ9WHIoZSx0KTticmVhaztjYXNlIDM6dD1XcihlLHQsbik7YnJlYWs7ZGVmYXVsdDpjb25zb2xlLmVycm9yKCJ1bmtub3duIHR5cGUiLGkpfX1yZXR1cm4oYXx8cikmJihNci5yZXN0b3JlKCksTXIubGVhdmVNYXNrKCkpLHR9O2xldCBZcj0tMTtjb25zdCBxcj0oZSx0KT0+e01yLmNsZWFyVHJhbnNmZXJCb3VuZHMoKTtsZXQgbj0wO2NvbnN0IHI9ZVtuKytdO2ZvcihZciE9PXImJihZcj1yLC0xPT09WXI/TXIudXBkYXRlQmFja2dyb3VuZENvbG9yKDAsMCwwLDApOk1yLnVwZGF0ZUJhY2tncm91bmRDb2xvcigoWXI+PjE2JjI1NSkvMjU1LChZcj4+OCYyNTUpLzI1NSwoMjU1JllyKS8yNTUsMSkpLE1yLnJlc2V0KCksTXIuc2V0VHJhbnNmb3JtKDEsMCwwLDEsMCwwKSxNci5maWxsQmFja2dyb3VuZENvbG9yKCk7ZS5sZW5ndGg+bjspe2lmKCFlW24rK10pY29udGludWU7Y29uc3Qgcj1lW24rK107c3dpdGNoKHIpe2Nhc2UgMDpuPVZyKGUsbix0KTticmVhaztjYXNlIDE6bj1VcihlLG4pO2JyZWFrO2Nhc2UgMjpuPVhyKGUsbik7YnJlYWs7Y2FzZSAzOm49V3IoZSxuLHQpO2JyZWFrO2RlZmF1bHQ6Y29uc29sZS5lcnJvcigidW5rbm93biB0eXBlIixyKX19TXIuZHJhd0FycmF5c0luc3RhbmNlZCgpLE9yJiYod3Iud2lkdGg9RnIsd3IuaGVpZ2h0PSRyLE9yPSExKSxNci50cmFuc2Zlck1haW5DYW52YXMoKX0sS3I9ZT0+e2ZvcihsZXQgdD0wO3Q8ZS5sZW5ndGg7Kyt0KXtjb25zdCBuPWAke2VbdF19YDtpZighdXIuaGFzKG4pKWNvbnRpbnVlO2NvbnN0IHI9dXIuZ2V0QnlJZChuKTtmb3IoY29uc3QgZSBvZiByLnZhbHVlcygpKU1yLnJlbW92ZU5vZGUoZSk7dXIucmVtb3ZlQnlJZChuKX19LEhyPWFzeW5jKGUsdCxuLHI9MCxhPTAscyk9PntNci5jbGVhclRyYW5zZmVyQm91bmRzKCk7bGV0IG89MTtmb3IoTXIucmVzZXQoKSxNci5zZXRUcmFuc2Zvcm0oMSwwLDAsMSwwLDApLE1yLnVwZGF0ZUJhY2tncm91bmRDb2xvcigocj4+MTYmMjU1KS8yNTUsKHI+PjgmMjU1KS8yNTUsKDI1NSZyKS8yNTUsYSksTXIuZmlsbEJhY2tncm91bmRDb2xvcigpO2UubGVuZ3RoPm87KXtpZighZVtvKytdKWNvbnRpbnVlO2NvbnN0IHQ9ZVtvKytdO3N3aXRjaCh0KXtjYXNlIDA6bz1WcihlLG8scyk7YnJlYWs7Y2FzZSAxOm89VXIoZSxvKTticmVhaztjYXNlIDI6bz1YcihlLG8pO2JyZWFrO2Nhc2UgMzpvPVdyKGUsbyxzKTticmVhaztkZWZhdWx0OmNvbnNvbGUuZXJyb3IoInVua25vd24gdHlwZSIsdCl9fXJldHVybiBNci5kcmF3QXJyYXlzSW5zdGFuY2VkKCksYXdhaXQgTXIuY3JlYXRlSW1hZ2VCaXRtYXAodCxuKX07Y29uc3QgWnI9bmV3IGNsYXNze2NvbnN0cnVjdG9yKCl7T2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsInN0YXRlIix7ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITAsdmFsdWU6dm9pZCAwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsInF1ZXVlIix7ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITAsdmFsdWU6dm9pZCAwfSksdGhpcy5zdGF0ZT0iZGVhY3RpdmF0ZSIsdGhpcy5xdWV1ZT1bXX1hc3luYyBleGVjdXRlKCl7Zm9yKHRoaXMuc3RhdGU9ImFjdGl2ZSI7dGhpcy5xdWV1ZS5sZW5ndGg7KXtjb25zdCBlPXRoaXMucXVldWUuc2hpZnQoKTtpZihlKXN3aXRjaChlLmNvbW1hbmQpe2Nhc2UicmVuZGVyIjpxcihlLmJ1ZmZlci5zdWJhcnJheSgwLGUubGVuZ3RoKSxlLmltYWdlQml0bWFwcyksZ2xvYmFsVGhpcy5wb3N0TWVzc2FnZSh7bWVzc2FnZToicmVuZGVyIixidWZmZXI6ZS5idWZmZXJ9LFtlLmJ1ZmZlci5idWZmZXJdKTticmVhaztjYXNlInJlc2l6ZSI6QnIoZS5idWZmZXJbMF0sZS5idWZmZXJbMV0sQm9vbGVhbihlLmJ1ZmZlclsyXSkpO2JyZWFrO2Nhc2UiaW5pdGlhbGl6ZSI6UHIoZS5jYW52YXMsZS5kZXZpY2VQaXhlbFJhdGlvKTticmVhaztjYXNlInJlbW92ZUNhY2hlIjpLcihlLmJ1ZmZlcik7YnJlYWs7Y2FzZSJjYWNoZUNsZWFyIjp1ci5yZXNldCgpO2JyZWFrO2Nhc2UiY2FwdHVyZSI6e2NvbnN0IHQ9YXdhaXQgSHIoZS5idWZmZXIuc3ViYXJyYXkoMCxlLmxlbmd0aCksZS53aWR0aCxlLmhlaWdodCxlLmJnQ29sb3IsZS5iZ0FscGhhLGUuaW1hZ2VCaXRtYXBzKTtnbG9iYWxUaGlzLnBvc3RNZXNzYWdlKHttZXNzYWdlOiJjYXB0dXJlIixidWZmZXI6ZS5idWZmZXIsaW1hZ2VCaXRtYXA6dH0sW2UuYnVmZmVyLmJ1ZmZlcix0XSl9fX10aGlzLnN0YXRlPSJkZWFjdGl2YXRlIn19O3NlbGYuYWRkRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIsYXN5bmMgZT0+e1pyLnF1ZXVlLnB1c2goZS5kYXRhKSwiZGVhY3RpdmF0ZSI9PT1aci5zdGF0ZSYmYXdhaXQgWnIuZXhlY3V0ZSgpfSk7cmV0dXJue319KCk7Cg==';
|